pax_global_header00006660000000000000000000000064120361104240014503gustar00rootroot0000000000000052 comment=0ef6c4f2561d8d01fc38c7366597cf13f96c079f eclipse-subclipse-1.8.16/000077500000000000000000000000001203611042400152135ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.feature/000077500000000000000000000000001203611042400257505ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.feature/.project000066400000000000000000000006371203611042400274250ustar00rootroot00000000000000 org.tigris.subversion.clientadapter.feature org.eclipse.pde.FeatureBuilder org.eclipse.pde.FeatureNature eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.feature/build.properties000066400000000000000000000001351203611042400311640ustar00rootroot00000000000000bin.includes = feature.xml,\ feature.properties,\ license.html eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.feature/feature.properties000066400000000000000000000061071203611042400315250ustar00rootroot00000000000000#****************************************************************************** # Copyright (c) 2004, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ # feature.properties # contains externalized strings for feature.xml # "%foo" in feature.xml corresponds to the key "foo" in this file # java.io.Properties file (ISO 8859-1 with "\" escapes) # This file should be translated. # "featureName" property - name of the feature featureName=Subversion Client Adapter # "providerName" property - name of the company that provides the feature providerName=Tigris.org # "updateSiteName" property - label for the update site updateSiteName=Subclipse update site # "description" property - description of the feature description=Subversion Client Adapter provides a common API for Subversion client functionality. # "licenseURL" property - URL of the "Feature License" # do not translate value - just change to point to a locale-specific HTML page licenseURL=license.html # "license" property - text of the "Feature Update License" # should be plain text version of license agreement pointed to be "licenseURL" license=\ Subclipse Software User Agreement\n\ 11th April, 2006\n\ \n\ Subclipse is licensed under the terms of the Eclipse Public\n\ License v1.0. http://www.eclipse.org/legal/epl-v10.html\n\ \n\ Applicable Licenses\n\ \n\ Subclipse is built upon a number of other open source\n\ technologies and products. Here is a list of those products\n\ with links to their licenses.\n\ \n\ svnClientAdapter: Part of the overall Subclipse project,\n\ svnClientAdapter presents a pluggable high-level interface\n\ to the Subversion repository. svnClientAdapter is licensed\n\ under the Apache2 License.\n\ http://www.apache.org/licenses/LICENSE-2.0\n\ \n\ Depending on the adapter you choose in your preferences, the\n\ following products and licenses are involved.\n\ \n\ Subversion/JavaHL: JavaHL is a high-level Java language binding\n\ to the Subversion "C" libraries and is part of the official\n\ Subversion source distribution. Subversion is licensed under\n\ the CollabNet license.\n\ http://subversion.tigris.org/project_license.html\n\ \n\ SVNKit: SVNKit is a "pure Java" implementation of the\n\ Subversion network protocols and working copy formats.\n\ SVNKit is licensed under the TMate license.\n\ http://svnkit.com/licensing/index.html\n\ \n\ Ganymed SSH-2: SVNKit uses the Ganymed SSH-2 library to support\n\ the svn+ssh:// protocol. Ganymed SSH-2 is licensed under the\n\ Ganymed license.\n\ http://www.ganymed.ethz.ch/ssh2/LICENSE.txt\n\ \n\ IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS\n\ AND CONDITIONS PRIOR TO USE OF THIS CONTENT.\n ########### end of license property ##########################################eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.feature/feature.xml000066400000000000000000000016101203611042400301230ustar00rootroot00000000000000 %description http://subclipse.tigris.org/ %license eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.feature/license.html000066400000000000000000000030631203611042400302620ustar00rootroot00000000000000 Subclipse License

Subclipse Software User Agreement

11th April, 2006

Subclipse

Subclipse is licensed under the terms of the Eclipse Public License v1.0.

Applicable Licenses

Subclipse is built upon a number of other open source technologies and products. Here is a list of those products with links to their licenses.

svnClientAdapter: Part of the overall Subclipse project, svnClientAdapter presents a pluggable high-level interface to the Subversion repository. svnClientAdapter is licensed under the Apache2 License. Depending on the adapter you choose in your preferences, the following products and licenses are involved.

Subversion/JavaHL: JavaHL is a high-level Java language binding to the Subversion "C" libraries and is part of the official Subversion source distribution. Subversion is licensed under the CollabNet license.

SVNKit: SVNKit is a "pure Java" implementation of the Subversion network protocols and working copy formats. SVNKit is licensed under the TMate license.

Ganymed SSH-2: SVNKit uses the Ganymed SSH-2 library to support the svn+ssh:// protocol. Ganymed SSH-2 is licensed under a BSD-style license.

IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THIS CONTENT.

eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl.feature/000077500000000000000000000000001203611042400272145ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl.feature/.project000066400000000000000000000006461203611042400306710ustar00rootroot00000000000000 org.tigris.subversion.clientadapter.javahl.feature org.eclipse.pde.FeatureBuilder org.eclipse.pde.FeatureNature eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl.feature/build.properties000066400000000000000000000001351203611042400324300ustar00rootroot00000000000000bin.includes = feature.xml,\ feature.properties,\ license.html eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl.feature/feature.properties000066400000000000000000000061301203611042400327650ustar00rootroot00000000000000#****************************************************************************** # Copyright (c) 2004, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ # feature.properties # contains externalized strings for feature.xml # "%foo" in feature.xml corresponds to the key "foo" in this file # java.io.Properties file (ISO 8859-1 with "\" escapes) # This file should be translated. # "featureName" property - name of the feature featureName=Subversion Native Library Adapter (JavaHL) # "providerName" property - name of the company that provides the feature providerName=Tigris.org # "updateSiteName" property - label for the update site updateSiteName=Subclipse update site # "description" property - description of the feature description=Subversion Client Adapter implementation using the Subversion native JavaHL library. # "licenseURL" property - URL of the "Feature License" # do not translate value - just change to point to a locale-specific HTML page licenseURL=license.html # "license" property - text of the "Feature Update License" # should be plain text version of license agreement pointed to be "licenseURL" license=\ Subclipse Software User Agreement\n\ 11th April, 2006\n\ \n\ Subclipse is licensed under the terms of the Eclipse Public\n\ License v1.0. http://www.eclipse.org/legal/epl-v10.html\n\ \n\ Applicable Licenses\n\ \n\ Subclipse is built upon a number of other open source\n\ technologies and products. Here is a list of those products\n\ with links to their licenses.\n\ \n\ svnClientAdapter: Part of the overall Subclipse project,\n\ svnClientAdapter presents a pluggable high-level interface\n\ to the Subversion repository. svnClientAdapter is licensed\n\ under the Apache2 License.\n\ http://www.apache.org/licenses/LICENSE-2.0\n\ \n\ Depending on the adapter you choose in your preferences, the\n\ following products and licenses are involved.\n\ \n\ Subversion/JavaHL: JavaHL is a high-level Java language binding\n\ to the Subversion "C" libraries and is part of the official\n\ Subversion source distribution. Subversion is licensed under\n\ the CollabNet license.\n\ http://subversion.tigris.org/project_license.html\n\ \n\ SVNKit: SVNKit is a "pure Java" implementation of the\n\ Subversion network protocols and working copy formats.\n\ SVNKit is licensed under the TMate license.\n\ http://svnkit.com/licensing/index.html\n\ \n\ Ganymed SSH-2: SVNKit uses the Ganymed SSH-2 library to support\n\ the svn+ssh:// protocol. Ganymed SSH-2 is licensed under the\n\ Ganymed license.\n\ http://www.ganymed.ethz.ch/ssh2/LICENSE.txt\n\ \n\ IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS\n\ AND CONDITIONS PRIOR TO USE OF THIS CONTENT.\n ########### end of license property ##########################################eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl.feature/feature.xml000066400000000000000000000026741203611042400314020ustar00rootroot00000000000000 %description http://subclipse.tigris.org/ %license eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl.feature/license.html000066400000000000000000000030631203611042400315260ustar00rootroot00000000000000 Subclipse License

Subclipse Software User Agreement

11th April, 2006

Subclipse

Subclipse is licensed under the terms of the Eclipse Public License v1.0.

Applicable Licenses

Subclipse is built upon a number of other open source technologies and products. Here is a list of those products with links to their licenses.

svnClientAdapter: Part of the overall Subclipse project, svnClientAdapter presents a pluggable high-level interface to the Subversion repository. svnClientAdapter is licensed under the Apache2 License. Depending on the adapter you choose in your preferences, the following products and licenses are involved.

Subversion/JavaHL: JavaHL is a high-level Java language binding to the Subversion "C" libraries and is part of the official Subversion source distribution. Subversion is licensed under the CollabNet license.

SVNKit: SVNKit is a "pure Java" implementation of the Subversion network protocols and working copy formats. SVNKit is licensed under the TMate license.

Ganymed SSH-2: SVNKit uses the Ganymed SSH-2 library to support the svn+ssh:// protocol. Ganymed SSH-2 is licensed under a BSD-style license.

IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THIS CONTENT.

eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl.win32/000077500000000000000000000000001203611042400265235ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl.win32/.project000066400000000000000000000010031203611042400301640ustar00rootroot00000000000000 org.tigris.subversion.clientadapter.javahl.win32 org.eclipse.pde.ManifestBuilder org.eclipse.pde.SchemaBuilder org.eclipse.pde.PluginNature eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl.win32/.settings/000077500000000000000000000000001203611042400304415ustar00rootroot00000000000000org.eclipse.mylar.tasklist.prefs000066400000000000000000000002231203611042400366120ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl.win32/.settings#Wed May 23 09:36:24 EDT 2007 eclipse.preferences.version=1 project.repository.kind=issuezilla project.repository.url=http\://subclipse.tigris.org eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl.win32/META-INF/000077500000000000000000000000001203611042400276635ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl.win32/META-INF/MANIFEST.MF000066400000000000000000000005361203611042400313210ustar00rootroot00000000000000Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Win32 JavaHL Binaries Bundle-SymbolicName: org.tigris.subversion.clientadapter.javahl.win32 Bundle-Version: 1.7.6 Bundle-Vendor: tigris.org Fragment-Host: org.tigris.subversion.clientadapter.javahl;bundle-version="[1.7.0,1.8.0)" Eclipse-PlatformFilter: (& (osgi.os=win32) (osgi.arch=x86)) eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl.win32/build.properties000066400000000000000000000001261203611042400317370ustar00rootroot00000000000000bin.includes = META-INF/,\ *.DLL,\ *.dll eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl.win64/000077500000000000000000000000001203611042400265305ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl.win64/.project000066400000000000000000000010311203611042400301720ustar00rootroot00000000000000 org.tigris.subversion.clientadapter.javahl.win64 org.eclipse.pde.ManifestBuilder org.eclipse.pde.SchemaBuilder org.eclipse.pde.PluginNature eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl.win64/.settings/000077500000000000000000000000001203611042400304465ustar00rootroot00000000000000org.eclipse.mylar.tasklist.prefs000066400000000000000000000002271203611042400366230ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl.win64/.settings#Wed May 23 09:36:24 EDT 2007 eclipse.preferences.version=1 project.repository.kind=issuezilla project.repository.url=http\://subclipse.tigris.org eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl.win64/META-INF/000077500000000000000000000000001203611042400276705ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl.win64/META-INF/MANIFEST.MF000066400000000000000000000005511203611042400313230ustar00rootroot00000000000000Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Win64 JavaHL Binaries Bundle-SymbolicName: org.tigris.subversion.clientadapter.javahl.win64 Bundle-Version: 1.7.6 Bundle-Vendor: tigris.org Fragment-Host: org.tigris.subversion.clientadapter.javahl;bundle-version="[1.7.0,1.8.0)" Eclipse-PlatformFilter: (& (osgi.os=win32) (osgi.arch=x86_64)) eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl.win64/build.properties000066400000000000000000000001311203611042400317400ustar00rootroot00000000000000bin.includes = META-INF/,\ *.DLL,\ *.dll eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/000077500000000000000000000000001203611042400255625ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/.classpath000066400000000000000000000005571203611042400275540ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/.project000066400000000000000000000012431203611042400272310ustar00rootroot00000000000000 org.tigris.subversion.clientadapter.javahl org.eclipse.jdt.core.javabuilder org.eclipse.pde.ManifestBuilder org.eclipse.pde.SchemaBuilder org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/.settings/000077500000000000000000000000001203611042400275005ustar00rootroot00000000000000org.eclipse.jdt.core.prefs000066400000000000000000000006031203611042400344020ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/.settings#Wed Aug 11 13:59:18 EDT 2010 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 org.eclipse.jdt.core.compiler.compliance=1.5 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.source=1.5 org.eclipse.mylar.tasklist.prefs000066400000000000000000000002231203611042400356510ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/.settings#Wed May 23 09:36:19 EDT 2007 eclipse.preferences.version=1 project.repository.kind=issuezilla project.repository.url=http\://subclipse.tigris.org eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/META-INF/000077500000000000000000000000001203611042400267225ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/META-INF/MANIFEST.MF000066400000000000000000000011741203611042400303570ustar00rootroot00000000000000Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Subversion JavaHL Bundle-SymbolicName: org.tigris.subversion.clientadapter.javahl;singleton:=true Bundle-Version: 1.7.6 Bundle-Activator: org.tigris.subversion.clientadapter.javahl.Activator Bundle-Vendor: tigris.org Require-Bundle: org.eclipse.core.runtime, org.tigris.subversion.clientadapter;bundle-version="[1.8.1,1.9.0)" Eclipse-LazyStart: true Export-Package: org.apache.subversion.javahl, org.apache.subversion.javahl.callback, org.tigris.subversion.clientadapter.javahl, org.tigris.subversion.svnclientadapter.javahl Bundle-RequiredExecutionEnvironment: J2SE-1.5 eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/about.html000066400000000000000000000013641203611042400275660ustar00rootroot00000000000000 About

About This Content

21st August, 2007

Subversion Native Library Adapter (JavaHL)

Subversion Client Adapter is a standard and pluggable API for the Subversion version control system.

This product includes software developed by CollabNet (http://www.Collab.Net/)

This offering is based on technology from the Eclipse Project http://www.eclipse.org.

eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/about.ini000066400000000000000000000017171203611042400274030ustar00rootroot00000000000000# about.ini # contains information about a feature # java.io.Properties file (ISO 8859-1 with "\" escapes) # "%key" are externalized strings defined in about.properties # This file does not need to be translated. appName=Subversion Native Library Adapter # Property "aboutText" contains blurb for "About" dialog (translated) aboutText=%blurb # Property "windowImage" contains path to window icon (16x16) # needed for primary features only # Property "featureImage" contains path to feature image (32x32) featureImage=svn.gif # Property "aboutImage" contains path to product image (500x330 or 115x164) # needed for primary features only # Property "appName" contains name of the application (translated) # needed for primary features only # Property "welcomePage" contains path to welcome page (special XML-based format) # Property "welcomePerspective" contains the id of the perspective in which the # welcome page is to be opened. # optional eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/about.properties000066400000000000000000000012551203611042400310150ustar00rootroot00000000000000# about.properties # contains externalized strings for about.ini # java.io.Properties file (ISO 8859-1 with "\" escapes) # fill-ins are supplied by about.mappings # This file should be translated. blurb=Subversion Native Library Adapter (JavaHL)\n\ \n\ Subclipse is an Eclipse team provider for the Subversion version\n\ control system. Visit http://subclipse.tigris.org/\n\ \n\ This product includes software developed by CollabNet (http://www.Collab.Net/)\n\ \n\ This product includes SVNKit. (http://svnkit.com/)\n\ Copyright (c) 2004-2006 TMate Software. All rights reserved.\n\ \n\ This offering is based on technology from the Eclipse Project.\n\ Visit http://www.eclipse.org eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/build.properties000066400000000000000000000003701203611042400307770ustar00rootroot00000000000000source.. = src/ output.. = bin/ bin.includes = META-INF/,\ .,\ plugin.xml,\ about.html,\ about.ini,\ about.properties,\ epl-v10.html,\ svn.gif eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/epl-v10.html000066400000000000000000000402301203611042400276330ustar00rootroot00000000000000 Eclipse Public License - Version 1.0

Eclipse Public License - v 1.0

THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.

1. DEFINITIONS

"Contribution" means:

a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
b) in the case of each subsequent Contributor:

i) changes to the Program, and

ii) additions to the Program;

where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.

"Contributor" means any person or entity that distributes the Program.

"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.

"Program" means the Contributions distributed in accordance with this Agreement.

"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.

2. GRANT OF RIGHTS

a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.

b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.

c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.

d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.

3. REQUIREMENTS

A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:

a) it complies with the terms and conditions of this Agreement; and

b) its license agreement:

i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;

ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;

iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and

iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.

When the Program is made available in source code form:

a) it must be made available under this Agreement; and

b) a copy of this Agreement must be included with each copy of the Program.

Contributors may not remove or alter any copyright notices contained within the Program.

Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.

4. COMMERCIAL DISTRIBUTION

Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.

For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.

5. NO WARRANTY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.

6. DISCLAIMER OF LIABILITY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

7. GENERAL

If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.

If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.

All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.

Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.

This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

 

eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/plugin.xml000066400000000000000000000006051203611042400276030ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/src/000077500000000000000000000000001203611042400263515ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/src/org/000077500000000000000000000000001203611042400271405ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/src/org/tigris/000077500000000000000000000000001203611042400304415ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/src/org/tigris/subversion/000077500000000000000000000000001203611042400326405ustar00rootroot00000000000000000077500000000000000000000000001203611042400354005ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/src/org/tigris/subversion/clientadapter000077500000000000000000000000001203611042400366455ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/src/org/tigris/subversion/clientadapter/javahlActivator.java000066400000000000000000000052251203611042400414500ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/src/org/tigris/subversion/clientadapter/javahlpackage org.tigris.subversion.clientadapter.javahl; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Plugin; import org.eclipse.core.runtime.Status; import org.osgi.framework.BundleContext; import org.tigris.subversion.clientadapter.ISVNClientWrapper; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.javahl.JhlClientAdapter; import org.tigris.subversion.svnclientadapter.javahl.JhlClientAdapterFactory; /** * The activator class controls the plug-in life cycle */ public class Activator extends Plugin implements ISVNClientWrapper{ // The plug-in ID public static final String PLUGIN_ID = "org.tigris.subversion.clientadapter.javahl"; // The shared instance private static Activator plugin; private String displayName; private String version; private boolean loadErrorLogged = false; /** * The constructor */ public Activator() { } /* * (non-Javadoc) * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext) */ public void start(BundleContext context) throws Exception { super.start(context); plugin = this; } /* * (non-Javadoc) * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext) */ public void stop(BundleContext context) throws Exception { plugin = null; super.stop(context); } /** * Returns the shared instance * * @return the shared instance */ public static Activator getDefault() { return plugin; } public ISVNClientAdapter getAdapter() { if (this.isAvailable()) return new JhlClientAdapter(); else return null; } public String getAdapterID() { return JhlClientAdapterFactory.JAVAHL_CLIENT; } public String getVersionString() { return getVersionSynchronized(); } private synchronized String getVersionSynchronized() { if (version == null) { if (this.isAvailable()) { JhlClientAdapter adapter = new JhlClientAdapter(); version = adapter.getNativeLibraryVersionString(); } else { version = "Not Available"; } } return version; } public boolean isAvailable() { boolean available = JhlClientAdapterFactory.isAvailable(); if (!available && !loadErrorLogged) { getLog().log(new Status(IStatus.INFO, PLUGIN_ID, 0, getLoadErrors(), null)); loadErrorLogged = true; org.tigris.subversion.clientadapter.Activator.getDefault().handleLoadErrors(this); } return available; } public void setDisplayName(String string) { displayName = string; } public String getDisplayName() { return displayName + " " + this.getVersionString(); } public String getLoadErrors() { return JhlClientAdapterFactory.getLibraryLoadErrors(); } } eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.javahl/svn.gif000066400000000000000000000021011203611042400270510ustar00rootroot00000000000000GIF89a ÷„žÌÄÒ䤺Üäêô”®Ô´ÆÜÔÞìôöüŒ¦ÌÌÚì¬ÂÜìòô¼Î䤶ÔÜæôüþü„¢ÌÌÖ쬾Üäîôœ²Ô´Æäôúü”ªÔÌÖ䬺ܜ®ÔÜâ씪ÌÔÚì´ÂÜìòüÄÎääæôŒ¢Ììîô¼ÊäüúüV>¨äæe¨ç8ž åégî×|wp 8‘Õ|wÿàÿÿÒÿÿEÿÿÿm>.‘Õ|wgŽ †‚××|wZÐÞ´Ônw`ÿ<ÿ ÿÿ 8Ë ´Ôw¸¥¨bÐçÔwÉC{3~G¼çÀÖ„×Zÿ<ÿæ ÿÿ ÿ˜ÿÕÿÔÿwÞÈén C3>@ZŸ€|Hå/Ù‹‚Ô|wÛˆ‚Ú|w ¨ åP¸\bæ`l¬ÕÔw„@äZ4`æÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m=‘|Jç=ö*€‚||„ÜæíÂÿ*ÿ‚ÿ|ÿ¸bŒç¾Ž>Ø‚K|Wÿlöÿç€ÿ|ÿpˆ{æçðN¸÷ b>ç‚|pܾõú>ÕN‚w|H°IpèxOxÁ}ÿ{ÿ„ æè@P¾?>‚‚||1”t@éZ}E8ÿGÿ»ÿGÿ!ù, ÿH° Áƒ*\Ȱ¡Ã‡# @±¢Å‹/v˜ €ÃCbá £ (!\ !2äˆ H¤4A!ƒ Z^Œ“AJ tЙ±‚)!JtçSrpÐ4ãI!X¡êŲj­à#±$4°ÁÁ‚<< pm :`p áC DÔEK¸°áÈ+FÉh›8˜0¡O ¸Y!'Ñb $èZÖ¢± à$[v„ËŒ3 u€@ÖD8ÉXnŠ«uv0€õ§ÏiÛ¦ªqAØ 2pÕ‰“y!8@?p¼j‚$xLÊ€;Ó²Y/p0téŠåÙŸQ¢ýûøóë/;eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit.feature/000077500000000000000000000000001203611042400272655ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit.feature/.project000066400000000000000000000006461203611042400307420ustar00rootroot00000000000000 org.tigris.subversion.clientadapter.svnkit.feature org.eclipse.pde.FeatureBuilder org.eclipse.pde.FeatureNature eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit.feature/build.properties000066400000000000000000000001351203611042400325010ustar00rootroot00000000000000bin.includes = feature.xml,\ feature.properties,\ license.html eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit.feature/feature.properties000066400000000000000000000061131203611042400330370ustar00rootroot00000000000000#****************************************************************************** # Copyright (c) 2004, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ # feature.properties # contains externalized strings for feature.xml # "%foo" in feature.xml corresponds to the key "foo" in this file # java.io.Properties file (ISO 8859-1 with "\" escapes) # This file should be translated. # "featureName" property - name of the feature featureName=Subversion Pure Java Adapter (SVNKit) # "providerName" property - name of the company that provides the feature providerName=Tigris.org # "updateSiteName" property - label for the update site updateSiteName=Subclipse update site # "description" property - description of the feature description=Subversion Client Adapter implementation using the pure Java SVNKit library. # "licenseURL" property - URL of the "Feature License" # do not translate value - just change to point to a locale-specific HTML page licenseURL=license.html # "license" property - text of the "Feature Update License" # should be plain text version of license agreement pointed to be "licenseURL" license=\ Subclipse Software User Agreement\n\ 11th April, 2006\n\ \n\ Subclipse is licensed under the terms of the Eclipse Public\n\ License v1.0. http://www.eclipse.org/legal/epl-v10.html\n\ \n\ Applicable Licenses\n\ \n\ Subclipse is built upon a number of other open source\n\ technologies and products. Here is a list of those products\n\ with links to their licenses.\n\ \n\ svnClientAdapter: Part of the overall Subclipse project,\n\ svnClientAdapter presents a pluggable high-level interface\n\ to the Subversion repository. svnClientAdapter is licensed\n\ under the Apache2 License.\n\ http://www.apache.org/licenses/LICENSE-2.0\n\ \n\ Depending on the adapter you choose in your preferences, the\n\ following products and licenses are involved.\n\ \n\ Subversion/JavaHL: JavaHL is a high-level Java language binding\n\ to the Subversion "C" libraries and is part of the official\n\ Subversion source distribution. Subversion is licensed under\n\ the CollabNet license.\n\ http://subversion.tigris.org/project_license.html\n\ \n\ SVNKit: SVNKit is a "pure Java" implementation of the\n\ Subversion network protocols and working copy formats.\n\ SVNKit is licensed under the TMate license.\n\ http://svnkit.com/licensing/index.html\n\ \n\ Ganymed SSH-2: SVNKit uses the Ganymed SSH-2 library to support\n\ the svn+ssh:// protocol. Ganymed SSH-2 is licensed under the\n\ Ganymed license.\n\ http://www.ganymed.ethz.ch/ssh2/LICENSE.txt\n\ \n\ IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS\n\ AND CONDITIONS PRIOR TO USE OF THIS CONTENT.\n ########### end of license property ##########################################eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit.feature/feature.xml000066400000000000000000000021201203611042400314350ustar00rootroot00000000000000 %description http://subclipse.tigris.org/ %license eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit.feature/license.html000066400000000000000000000030631203611042400315770ustar00rootroot00000000000000 Subclipse License

Subclipse Software User Agreement

11th April, 2006

Subclipse

Subclipse is licensed under the terms of the Eclipse Public License v1.0.

Applicable Licenses

Subclipse is built upon a number of other open source technologies and products. Here is a list of those products with links to their licenses.

svnClientAdapter: Part of the overall Subclipse project, svnClientAdapter presents a pluggable high-level interface to the Subversion repository. svnClientAdapter is licensed under the Apache2 License. Depending on the adapter you choose in your preferences, the following products and licenses are involved.

Subversion/JavaHL: JavaHL is a high-level Java language binding to the Subversion "C" libraries and is part of the official Subversion source distribution. Subversion is licensed under the CollabNet license.

SVNKit: SVNKit is a "pure Java" implementation of the Subversion network protocols and working copy formats. SVNKit is licensed under the TMate license.

Ganymed SSH-2: SVNKit uses the Ganymed SSH-2 library to support the svn+ssh:// protocol. Ganymed SSH-2 is licensed under a BSD-style license.

IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THIS CONTENT.

eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/000077500000000000000000000000001203611042400256335ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/.classpath000066400000000000000000000005571203611042400276250ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/.project000066400000000000000000000012431203611042400273020ustar00rootroot00000000000000 org.tigris.subversion.clientadapter.svnkit org.eclipse.jdt.core.javabuilder org.eclipse.pde.ManifestBuilder org.eclipse.pde.SchemaBuilder org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/.settings/000077500000000000000000000000001203611042400275515ustar00rootroot00000000000000org.eclipse.jdt.core.prefs000066400000000000000000000006031203611042400344530ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/.settings#Wed Feb 22 11:46:02 EST 2012 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 org.eclipse.jdt.core.compiler.compliance=1.5 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.source=1.5 eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/META-INF/000077500000000000000000000000001203611042400267735ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/META-INF/MANIFEST.MF000066400000000000000000000010061203611042400304220ustar00rootroot00000000000000Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: SVNKit Client Adapter Bundle-SymbolicName: org.tigris.subversion.clientadapter.svnkit;singleton:=true Bundle-Version: 1.7.5.1 Bundle-Activator: org.tigris.subversion.clientadapter.svnkit.Activator Bundle-Vendor: tigris.org Require-Bundle: org.eclipse.core.runtime, org.tigris.subversion.clientadapter;bundle-version="[1.8.0,1.9.0)", org.tmatesoft.svnkit;bundle-version="[1.7.0,1.8.0)" Eclipse-LazyStart: true Bundle-RequiredExecutionEnvironment: J2SE-1.5 eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/about.html000066400000000000000000000013571203611042400276410ustar00rootroot00000000000000 About

About This Content

21st August, 2007

Subversion Pure Java Adapter (SVNKit)

Subversion Client Adapter is a standard and pluggable API for the Subversion version control system.

This product includes software developed by CollabNet (http://www.Collab.Net/)

This offering is based on technology from the Eclipse Project http://www.eclipse.org.

eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/about.ini000066400000000000000000000017231203611042400274510ustar00rootroot00000000000000# about.ini # contains information about a feature # java.io.Properties file (ISO 8859-1 with "\" escapes) # "%key" are externalized strings defined in about.properties # This file does not need to be translated. appName=Subversion Pure Java Adapter (SVNKit) # Property "aboutText" contains blurb for "About" dialog (translated) aboutText=%blurb # Property "windowImage" contains path to window icon (16x16) # needed for primary features only # Property "featureImage" contains path to feature image (32x32) featureImage=svn.gif # Property "aboutImage" contains path to product image (500x330 or 115x164) # needed for primary features only # Property "appName" contains name of the application (translated) # needed for primary features only # Property "welcomePage" contains path to welcome page (special XML-based format) # Property "welcomePerspective" contains the id of the perspective in which the # welcome page is to be opened. # optional eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/about.properties000066400000000000000000000012501203611042400310610ustar00rootroot00000000000000# about.properties # contains externalized strings for about.ini # java.io.Properties file (ISO 8859-1 with "\" escapes) # fill-ins are supplied by about.mappings # This file should be translated. blurb=Subversion Pure Java Adapter (SVNKit)\n\ \n\ Subclipse is an Eclipse team provider for the Subversion version\n\ control system. Visit http://subclipse.tigris.org/\n\ \n\ This product includes software developed by CollabNet (http://www.Collab.Net/)\n\ \n\ This product includes SVNKit. (http://svnkit.com/)\n\ Copyright (c) 2004-2006 TMate Software. All rights reserved.\n\ \n\ This offering is based on technology from the Eclipse Project.\n\ Visit http://www.eclipse.org eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/build.properties000066400000000000000000000004211203611042400310450ustar00rootroot00000000000000source.. = src/ output.. = bin/ bin.includes = META-INF/,\ .,\ plugin.xml,\ about.html,\ about.properties,\ about.ini,\ epl-v10.html,\ svn.gif,\ schema/ eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/epl-v10.html000066400000000000000000000402301203611042400277040ustar00rootroot00000000000000 Eclipse Public License - Version 1.0

Eclipse Public License - v 1.0

THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.

1. DEFINITIONS

"Contribution" means:

a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
b) in the case of each subsequent Contributor:

i) changes to the Program, and

ii) additions to the Program;

where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.

"Contributor" means any person or entity that distributes the Program.

"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.

"Program" means the Contributions distributed in accordance with this Agreement.

"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.

2. GRANT OF RIGHTS

a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.

b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.

c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.

d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.

3. REQUIREMENTS

A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:

a) it complies with the terms and conditions of this Agreement; and

b) its license agreement:

i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;

ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;

iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and

iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.

When the Program is made available in source code form:

a) it must be made available under this Agreement; and

b) a copy of this Agreement must be included with each copy of the Program.

Contributors may not remove or alter any copyright notices contained within the Program.

Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.

4. COMMERCIAL DISTRIBUTION

Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.

For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.

5. NO WARRANTY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.

6. DISCLAIMER OF LIABILITY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

7. GENERAL

If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.

If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.

All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.

Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.

This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

 

eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/plugin.xml000066400000000000000000000007761203611042400276650ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/schema/000077500000000000000000000000001203611042400270735ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/schema/svnconnectorfactory.exsd000066400000000000000000000076461203611042400341060ustar00rootroot00000000000000 This extension point allows additional SVNConnectorFactory to be pluged in. It is for internal use. An implementation of <samp>ISVNConnectorFactory</samp> [Enter the first release in which this extension point appears.] Following is an example of a svnconnectorfactory extention: <p> <pre> <extenstion id="jsch" point="org.tigris.subversion.clientadapter.svnkit.svnconnectorfactory"> <adapter run="org.tigris.subversion.internal.clientadapter.svnkit.jsch.SVNJSchConnectorFactory"> </adapter> </extension> </pre> </p> This extension poit is internal use only. [Enter information about supplied implementation of this extension point.] eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/src/000077500000000000000000000000001203611042400264225ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/src/org/000077500000000000000000000000001203611042400272115ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/src/org/tigris/000077500000000000000000000000001203611042400305125ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/src/org/tigris/subversion/000077500000000000000000000000001203611042400327115ustar00rootroot00000000000000000077500000000000000000000000001203611042400354515ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/src/org/tigris/subversion/clientadapter000077500000000000000000000000001203611042400367675ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/src/org/tigris/subversion/clientadapter/svnkitActivator.java000066400000000000000000000060061203611042400415700ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/src/org/tigris/subversion/clientadapter/svnkitpackage org.tigris.subversion.clientadapter.svnkit; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Plugin; import org.eclipse.core.runtime.Status; import org.osgi.framework.BundleContext; import org.tigris.subversion.clientadapter.ISVNClientWrapper; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.svnkit.SvnKitClientAdapter; import org.tigris.subversion.svnclientadapter.svnkit.SvnKitClientAdapterFactory; import org.tmatesoft.svn.core.javahl17.SVNClientImpl; /** * The activator class controls the plug-in life cycle */ public class Activator extends Plugin implements ISVNClientWrapper { // The plug-in ID public static final String PLUGIN_ID = "org.tigris.subversion.clientadapter.svnkit"; // Extension point public static final String PT_SVNCONNECTORFACTORY = "svnconnectorfactory"; //$NON-NLS-1$ // The shared instance private static Activator plugin; private String displayName; private String version; /** * The constructor */ public Activator() { } /* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) */ public void start(BundleContext context) throws Exception { super.start(context); plugin = this; } /* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) */ public void stop(BundleContext context) throws Exception { plugin = null; super.stop(context); } /** * Returns the shared instance * * @return the shared instance */ public static Activator getDefault() { return plugin; } public ISVNClientAdapter getAdapter() { if (this.isAvailable()) return new SvnKitClientAdapter(); else return null; } public String getAdapterID() { return SvnKitClientAdapterFactory.SVNKIT_CLIENT; } public String getVersionString() { return getVersionSynchronized(); } private synchronized String getVersionSynchronized() { if (version == null) { if (this.isAvailable()) { SVNClientImpl adapter = SVNClientImpl.newInstance(); version = adapter.getVersion().toString(); } else version = "Not Available"; } return version; } public boolean isAvailable() { return SvnKitClientAdapterFactory.isAvailable(); } public void setDisplayName(String string) { displayName = string; } public String getDisplayName() { return displayName + " " + this.getVersionString(); } public String getLoadErrors() { if (this.isAvailable()) return ""; return "Class org.tmatesoft.svn.core.javahl17.SVNClientImpl not found.\nInstall the SVNKit plug-in from http://www.svnkit.com/"; } /** * Log the given exception along with the provided message and severity indicator */ public static void log(int severity, String message, Throwable e) { log(new Status(severity, PLUGIN_ID, 0, message, e)); } public static void log(IStatus status) { // For now, we'll log the status. However we should do more getDefault().getLog().log(status); } } eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter.svnkit/svn.gif000066400000000000000000000021011203611042400271220ustar00rootroot00000000000000GIF89a ÷„žÌÄÒ䤺Üäêô”®Ô´ÆÜÔÞìôöüŒ¦ÌÌÚì¬ÂÜìòô¼Î䤶ÔÜæôüþü„¢ÌÌÖ쬾Üäîôœ²Ô´Æäôúü”ªÔÌÖ䬺ܜ®ÔÜâ씪ÌÔÚì´ÂÜìòüÄÎääæôŒ¢Ììîô¼ÊäüúüV>¨äæe¨ç8ž åégî×|wp 8‘Õ|wÿàÿÿÒÿÿEÿÿÿm>.‘Õ|wgŽ †‚××|wZÐÞ´Ônw`ÿ<ÿ ÿÿ 8Ë ´Ôw¸¥¨bÐçÔwÉC{3~G¼çÀÖ„×Zÿ<ÿæ ÿÿ ÿ˜ÿÕÿÔÿwÞÈén C3>@ZŸ€|Hå/Ù‹‚Ô|wÛˆ‚Ú|w ¨ åP¸\bæ`l¬ÕÔw„@äZ4`æÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m=‘|Jç=ö*€‚||„ÜæíÂÿ*ÿ‚ÿ|ÿ¸bŒç¾Ž>Ø‚K|Wÿlöÿç€ÿ|ÿpˆ{æçðN¸÷ b>ç‚|pܾõú>ÕN‚w|H°IpèxOxÁ}ÿ{ÿ„ æè@P¾?>‚‚||1”t@éZ}E8ÿGÿ»ÿGÿ!ù, ÿH° Áƒ*\Ȱ¡Ã‡# @±¢Å‹/v˜ €ÃCbá £ (!\ !2äˆ H¤4A!ƒ Z^Œ“AJ tЙ±‚)!JtçSrpÐ4ãI!X¡êŲj­à#±$4°ÁÁ‚<< pm :`p áC DÔEK¸°áÈ+FÉh›8˜0¡O ¸Y!'Ñb $èZÖ¢± à$[v„ËŒ3 u€@ÖD8ÉXnŠ«uv0€õ§ÏiÛ¦ªqAØ 2pÕ‰“y!8@?p¼j‚$xLÊ€;Ó²Y/p0téŠåÙŸQ¢ýûøóë/;eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/000077500000000000000000000000001203611042400243165ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/.classpath000066400000000000000000000005571203611042400263100ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/.project000066400000000000000000000012341203611042400257650ustar00rootroot00000000000000 org.tigris.subversion.clientadapter org.eclipse.jdt.core.javabuilder org.eclipse.pde.ManifestBuilder org.eclipse.pde.SchemaBuilder org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/.settings/000077500000000000000000000000001203611042400262345ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/.settings/org.eclipse.jdt.core.prefs000066400000000000000000000005071203611042400332200ustar00rootroot00000000000000#Thu Apr 12 15:28:33 EDT 2007 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2 org.eclipse.jdt.core.compiler.compliance=1.4 org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning org.eclipse.jdt.core.compiler.source=1.3 org.eclipse.mylar.tasklist.prefs000066400000000000000000000002231203611042400344050ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/.settings#Wed May 23 09:36:07 EDT 2007 eclipse.preferences.version=1 project.repository.kind=issuezilla project.repository.url=http\://subclipse.tigris.org eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/META-INF/000077500000000000000000000000001203611042400254565ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/META-INF/MANIFEST.MF000066400000000000000000000010131203611042400271030ustar00rootroot00000000000000Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Subversion Client Adapter Bundle-SymbolicName: org.tigris.subversion.clientadapter;singleton:=true Bundle-Version: 1.8.3 Bundle-Activator: org.tigris.subversion.clientadapter.Activator Bundle-Vendor: tigris.org Require-Bundle: org.eclipse.core.runtime Eclipse-LazyStart: true Export-Package: org.tigris.subversion.clientadapter, org.tigris.subversion.svnclientadapter, org.tigris.subversion.svnclientadapter.utils Bundle-RequiredExecutionEnvironment: J2SE-1.4 eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/about.html000066400000000000000000000013431203611042400263170ustar00rootroot00000000000000 About

About This Content

21st August, 2007

Subversion Client Adapter

Subversion Client Adapter is a standard and pluggable API for the Subversion version control system.

This product includes software developed by CollabNet (http://www.Collab.Net/)

This offering is based on technology from the Eclipse Project http://www.eclipse.org.

eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/about.ini000066400000000000000000000017071203611042400261360ustar00rootroot00000000000000# about.ini # contains information about a feature # java.io.Properties file (ISO 8859-1 with "\" escapes) # "%key" are externalized strings defined in about.properties # This file does not need to be translated. appName=Subversion Client Adapter # Property "aboutText" contains blurb for "About" dialog (translated) aboutText=%blurb # Property "windowImage" contains path to window icon (16x16) # needed for primary features only # Property "featureImage" contains path to feature image (32x32) featureImage=svn.gif # Property "aboutImage" contains path to product image (500x330 or 115x164) # needed for primary features only # Property "appName" contains name of the application (translated) # needed for primary features only # Property "welcomePage" contains path to welcome page (special XML-based format) # Property "welcomePerspective" contains the id of the perspective in which the # welcome page is to be opened. # optional eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/about.properties000066400000000000000000000012341203611042400275460ustar00rootroot00000000000000# about.properties # contains externalized strings for about.ini # java.io.Properties file (ISO 8859-1 with "\" escapes) # fill-ins are supplied by about.mappings # This file should be translated. blurb=Subversion Client Adapter\n\ \n\ Subclipse is an Eclipse team provider for the Subversion version\n\ control system. Visit http://subclipse.tigris.org/\n\ \n\ This product includes software developed by CollabNet (http://www.Collab.Net/)\n\ \n\ This product includes SVNKit. (http://svnkit.com/)\n\ Copyright (c) 2004-2006 TMate Software. All rights reserved.\n\ \n\ This offering is based on technology from the Eclipse Project.\n\ Visit http://www.eclipse.org eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/build.properties000066400000000000000000000004211203611042400275300ustar00rootroot00000000000000source.. = src/ output.. = bin/ bin.includes = META-INF/,\ .,\ plugin.xml,\ schema/,\ about.html,\ about.ini,\ about.properties,\ epl-v10.html,\ svn.gif eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/epl-v10.html000066400000000000000000000402301203611042400263670ustar00rootroot00000000000000 Eclipse Public License - Version 1.0

Eclipse Public License - v 1.0

THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.

1. DEFINITIONS

"Contribution" means:

a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
b) in the case of each subsequent Contributor:

i) changes to the Program, and

ii) additions to the Program;

where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.

"Contributor" means any person or entity that distributes the Program.

"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.

"Program" means the Contributions distributed in accordance with this Agreement.

"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.

2. GRANT OF RIGHTS

a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.

b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.

c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.

d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.

3. REQUIREMENTS

A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:

a) it complies with the terms and conditions of this Agreement; and

b) its license agreement:

i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;

ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;

iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and

iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.

When the Program is made available in source code form:

a) it must be made available under this Agreement; and

b) a copy of this Agreement must be included with each copy of the Program.

Contributors may not remove or alter any copyright notices contained within the Program.

Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.

4. COMMERCIAL DISTRIBUTION

Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.

For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.

5. NO WARRANTY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.

6. DISCLAIMER OF LIABILITY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

7. GENERAL

If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.

If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.

All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.

Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.

This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

 

eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/plugin.xml000066400000000000000000000004451203611042400263410ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/schema/000077500000000000000000000000001203611042400255565ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/schema/loadErrorHandlers.exsd000066400000000000000000000041011203611042400320510ustar00rootroot00000000000000 [Enter the first release in which this extension point appears.] [Enter extension point usage example here.] [Enter API information here.] [Enter information about supplied implementation of this extension point.] eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/schema/wrapper.exsd000066400000000000000000000072011203611042400301230ustar00rootroot00000000000000 This extension point is used to plug in SVN Client Adapters. A unique name that will be used to reference this adapter A fully qualified name of the Java class that implements <samp>org.tigris.subversion.clientadapter.ISVNClientWrapper</samp> interface A translatable name that will be used for presenting this adapter in the UI The following is an example of the extension point usage: <p> <pre> <extension point="org.tigris.subversion.clientadapter.wrapper"> <svnclient id="com.example.xyz.type1" name="Custom SVN Client Wrapper" class="com.example.xyz.SVNClientWrapper"> </svnclient> </extension> </pre> </p> Plug-ins that want to extend this extension point must implement <samp>org.tigris.subversion.clientadapter.ISVNClientWrapper</samp> interface. [Enter information about supplied implementation of this extension point.] eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/src/000077500000000000000000000000001203611042400251055ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/src/org/000077500000000000000000000000001203611042400256745ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/src/org/tigris/000077500000000000000000000000001203611042400271755ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/src/org/tigris/subversion/000077500000000000000000000000001203611042400313745ustar00rootroot00000000000000000077500000000000000000000000001203611042400341345ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/src/org/tigris/subversion/clientadapterActivator.java000066400000000000000000000075751203611042400367510ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/src/org/tigris/subversion/clientadapterpackage org.tigris.subversion.clientadapter; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtensionRegistry; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Plugin; import org.osgi.framework.BundleContext; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; /** * The activator class controls the plug-in life cycle */ public class Activator extends Plugin { // The plug-in ID public static final String PLUGIN_ID = "org.tigris.subversion.clientadapter"; public static final String LOAD_ERROR_HANDLERS = "org.tigris.subversion.clientadapter.loadErrorHandlers"; // The shared instance private static Activator plugin; private AdapterManager adapterManager; // cache of available wrappers private Map wrappers; private ILoadErrorHandler[] loadErrorHandlers; /** * The constructor */ public Activator() { } /* * (non-Javadoc) * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext) */ public void start(BundleContext context) throws Exception { super.start(context); adapterManager = new AdapterManager(); plugin = this; } /* * (non-Javadoc) * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext) */ public void stop(BundleContext context) throws Exception { plugin = null; adapterManager = null; super.stop(context); } public ISVNClientAdapter getClientAdapter(String id) { if (id == null) return this.getAnyClientAdapter(); if (wrappers == null) wrappers = adapterManager.getClientWrappers(); ISVNClientWrapper wrapper = (ISVNClientWrapper) wrappers.get(id); if (wrapper == null || !wrapper.isAvailable()) { return null; } return wrapper.getAdapter(); } public ISVNClientAdapter getAnyClientAdapter() { if (wrappers == null) wrappers = adapterManager.getClientWrappers(); if (wrappers.isEmpty()) return null; ISVNClientWrapper wrapper = null; for (Iterator iterator = wrappers.values().iterator(); iterator.hasNext();) { wrapper = (ISVNClientWrapper) iterator.next(); if (wrapper.isAvailable()) break; } if (wrapper == null) return null; return wrapper.getAdapter(); } /** * Get all available client wrappers. This method * also always refreshes the internal cache. In theory perhaps * a new wrapper could be installed after plugin is started * * @return */ public ISVNClientWrapper[] getAllClientWrappers() { wrappers = adapterManager.getClientWrappers(); return (ISVNClientWrapper[])wrappers.values().toArray(new ISVNClientWrapper[wrappers.size()]); } /** * Returns the shared instance * * @return the shared instance */ public static Activator getDefault() { return plugin; } public void handleLoadErrors(ISVNClientWrapper clientWrapper) { try { loadErrorHandlers = getLoadErrorHandlers(); if (loadErrorHandlers != null) { for (int i = 0; i < loadErrorHandlers.length; i++) { loadErrorHandlers[i].handleLoadError(clientWrapper); } } } catch (Exception e) {} } private ILoadErrorHandler[] getLoadErrorHandlers() throws Exception { if (loadErrorHandlers == null) { List handlerList = new ArrayList(); IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry(); IConfigurationElement[] configurationElements = extensionRegistry.getConfigurationElementsFor(LOAD_ERROR_HANDLERS); for (int i = 0; i < configurationElements.length; i++) { IConfigurationElement configurationElement = configurationElements[i]; ILoadErrorHandler handler = (ILoadErrorHandler)configurationElement.createExecutableExtension("class"); //$NON-NLS-1$ handlerList.add(handler); } loadErrorHandlers = new ILoadErrorHandler[handlerList.size()]; handlerList.toArray(loadErrorHandlers); } return loadErrorHandlers; } } AdapterManager.java000066400000000000000000000020771203611042400376600ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/src/org/tigris/subversion/clientadapterpackage org.tigris.subversion.clientadapter; import java.util.HashMap; import java.util.Map; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtensionRegistry; import org.eclipse.core.runtime.Platform; public class AdapterManager { // All available client adapters private Map clients; public synchronized Map getClientWrappers() { if (clients == null) { clients = new HashMap(); IExtensionRegistry pluginRegistry = Platform.getExtensionRegistry(); IConfigurationElement[] configurationElements = pluginRegistry.getConfigurationElementsFor("org.tigris.subversion.clientadapter.wrapper"); for (int i = 0; i < configurationElements.length; i++) { IConfigurationElement configurationElement = configurationElements[i]; try { ISVNClientWrapper client = (ISVNClientWrapper)configurationElement.createExecutableExtension("class"); client.setDisplayName(configurationElement.getAttribute("name")); clients.put(client.getAdapterID(), client); } catch(Exception e) { } } } return clients; } } ILoadErrorHandler.java000066400000000000000000000002271203611042400403000ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/src/org/tigris/subversion/clientadapterpackage org.tigris.subversion.clientadapter; public interface ILoadErrorHandler { public void handleLoadError(ISVNClientWrapper clientWrapper); } ISVNClientWrapper.java000066400000000000000000000006301203611042400402550ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/src/org/tigris/subversion/clientadapterpackage org.tigris.subversion.clientadapter; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; public interface ISVNClientWrapper { public ISVNClientAdapter getAdapter(); public boolean isAvailable(); public String getVersionString(); public void setDisplayName(String string); public String getDisplayName(); public String getLoadErrors(); public String getAdapterID(); } eclipse-subclipse-1.8.16/org.tigris.subversion.clientadapter/svn.gif000066400000000000000000000021011203611042400256050ustar00rootroot00000000000000GIF89a ÷„žÌÄÒ䤺Üäêô”®Ô´ÆÜÔÞìôöüŒ¦ÌÌÚì¬ÂÜìòô¼Î䤶ÔÜæôüþü„¢ÌÌÖ쬾Üäîôœ²Ô´Æäôúü”ªÔÌÖ䬺ܜ®ÔÜâ씪ÌÔÚì´ÂÜìòüÄÎääæôŒ¢Ììîô¼ÊäüúüV>¨äæe¨ç8ž åégî×|wp 8‘Õ|wÿàÿÿÒÿÿEÿÿÿm>.‘Õ|wgŽ †‚××|wZÐÞ´Ônw`ÿ<ÿ ÿÿ 8Ë ´Ôw¸¥¨bÐçÔwÉC{3~G¼çÀÖ„×Zÿ<ÿæ ÿÿ ÿ˜ÿÕÿÔÿwÞÈén C3>@ZŸ€|Hå/Ù‹‚Ô|wÛˆ‚Ú|w ¨ åP¸\bæ`l¬ÕÔw„@äZ4`æÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m=‘|Jç=ö*€‚||„ÜæíÂÿ*ÿ‚ÿ|ÿ¸bŒç¾Ž>Ø‚K|Wÿlöÿç€ÿ|ÿpˆ{æçðN¸÷ b>ç‚|pܾõú>ÕN‚w|H°IpèxOxÁ}ÿ{ÿ„ æè@P¾?>‚‚||1”t@éZ}E8ÿGÿ»ÿGÿ!ù, ÿH° Áƒ*\Ȱ¡Ã‡# @±¢Å‹/v˜ €ÃCbá £ (!\ !2äˆ H¤4A!ƒ Z^Œ“AJ tЙ±‚)!JtçSrpÐ4ãI!X¡êŲj­à#±$4°ÁÁ‚<< pm :`p áC DÔEK¸°áÈ+FÉh›8˜0¡O ¸Y!'Ñb $èZÖ¢± à$[v„ËŒ3 u€@ÖD8ÉXnŠ«uv0€õ§ÏiÛ¦ªqAØ 2pÕ‰“y!8@?p¼j‚$xLÊ€;Ó²Y/p0téŠåÙŸQ¢ýûøóë/;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/000077500000000000000000000000001203611042400244175ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/.classpath000066400000000000000000000010001203611042400263710ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/.options000066400000000000000000000006261203611042400261170ustar00rootroot00000000000000# Debugging options for the org.tigris.subversion.subclipse.core plugin. # Turn on debugging for the plugin. org.tigris.subversion.subclipse.core/debug=true # Shows when meta-files are modified by a 3rd party org.tigris.subversion.subclipse.core/metafiles=true # Shows stream debugging information org.tigris.subversion.subclipse.core/threading=false # org.tigris.subversion.subclipse.core/status=trueeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/.project000066400000000000000000000012351203611042400260670ustar00rootroot00000000000000 org.tigris.subversion.subclipse.core org.eclipse.jdt.core.javabuilder org.eclipse.pde.ManifestBuilder org.eclipse.pde.SchemaBuilder org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/.settings/000077500000000000000000000000001203611042400263355ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/.settings/org.eclipse.jdt.core.prefs000066400000000000000000000011511203611042400333150ustar00rootroot00000000000000#Tue Apr 19 15:25:12 EDT 2011 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.compliance=1.5 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.source=1.5 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/.settings/org.eclipse.jdt.ui.prefs000066400000000000000000000131721203611042400330100ustar00rootroot00000000000000#Mon Oct 11 16:35:29 EDT 2010 eclipse.preferences.version=1 internal.default.compliance=default org.eclipse.jdt.ui.text.custom_code_templates= org.eclipse.mylar.tasklist.prefs000066400000000000000000000002231203611042400345060ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/.settings#Wed May 23 09:33:29 EDT 2007 eclipse.preferences.version=1 project.repository.kind=issuezilla project.repository.url=http\://subclipse.tigris.org eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/META-INF/000077500000000000000000000000001203611042400255575ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/META-INF/MANIFEST.MF000066400000000000000000000023631203611042400272150ustar00rootroot00000000000000Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.tigris.subversion.subclipse.core; singleton:=true Bundle-Version: 1.8.16 Bundle-Activator: org.tigris.subversion.subclipse.core.SVNProviderPlugin Bundle-Vendor: %providerName Bundle-Localization: plugin Require-Bundle: org.eclipse.core.resources;bundle-version="3.2.0", org.eclipse.team.core;bundle-version="3.2.0", org.eclipse.core.runtime;bundle-version="3.2.0", org.eclipse.osgi, org.tigris.subversion.clientadapter;bundle-version="[1.8.0,1.9.0)";visibility:=reexport Eclipse-LazyStart: true Export-Package: org.tigris.subversion.subclipse.core, org.tigris.subversion.subclipse.core.client, org.tigris.subversion.subclipse.core.commands, org.tigris.subversion.subclipse.core.history, org.tigris.subversion.subclipse.core.internal, org.tigris.subversion.subclipse.core.mapping, org.tigris.subversion.subclipse.core.properties, org.tigris.subversion.subclipse.core.repo, org.tigris.subversion.subclipse.core.resources, org.tigris.subversion.subclipse.core.resourcesListeners, org.tigris.subversion.subclipse.core.status, org.tigris.subversion.subclipse.core.sync, org.tigris.subversion.subclipse.core.util Bundle-RequiredExecutionEnvironment: J2SE-1.5 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/about.html000066400000000000000000000023141203611042400264170ustar00rootroot00000000000000 About

About This Content

13th November, 2006

Subclipse

Subclipse is an Eclipse team provider for the Subversion version control system.

This product includes software developed by CollabNet (http://www.Collab.Net/)

This product includes SVNKit. (http://svnkit.com/)
Copyright (c) 2004-2006 TMate Software. All rights reserved.

SVNKit is licensed under the terms of the TMate License. (http://svnkit.com/licensing/index.html

This offering is based on technology from the Eclipse Project http://www.eclipse.org.

Subclipse includes icons from the TortoiseSVN project. Those icons are licensed under the terms of the GPL.

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/about.ini000066400000000000000000000016351203611042400262370ustar00rootroot00000000000000# about.ini # contains information about a feature # java.io.Properties file (ISO 8859-1 with "\" escapes) # "%key" are externalized strings defined in about.properties # This file does not need to be translated. appName=Subclipse # Property "aboutText" contains blurb for "About" dialog (translated) aboutText=%blurb # Property "windowImage" contains path to window icon (16x16) # needed for primary features only # Property "featureImage" contains path to feature image (32x32) featureImage=svn.gif # Property "aboutImage" contains path to product image (500x330 or 115x164) # needed for primary features only # Property "appName" contains name of the application (translated) # needed for primary features only # Property "welcomePage" contains path to welcome page (special XML-based format) # Property "welcomePerspective" contains the id of the perspective in which the # welcome page is to be opened. # optional eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/about.properties000066400000000000000000000012141203611042400276450ustar00rootroot00000000000000# about.properties # contains externalized strings for about.ini # java.io.Properties file (ISO 8859-1 with "\" escapes) # fill-ins are supplied by about.mappings # This file should be translated. blurb=Subclipse\n\ \n\ Subclipse is an Eclipse team provider for the Subversion version\n\ control system. Visit http://subclipse.tigris.org/\n\ \n\ This product includes software developed by CollabNet (http://www.Collab.Net/)\n\ \n\ This product includes SVNKit. (http://svnkit.com/)\n\ Copyright (c) 2004-2006 TMate Software. All rights reserved.\n\ \n\ This offering is based on technology from the Eclipse Project.\n\ Visit http://www.eclipse.org eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/build.properties000066400000000000000000000006321203611042400276350ustar00rootroot00000000000000bin.includes = plugin.properties,\ plugin.xml,\ .,\ schema/,\ epl-v10.html,\ META-INF/,\ plugin_zh.properties,\ plugin_zh_TW.properties,\ plugin_ja.properties,\ about.html,\ about.ini,\ about.properties,\ svn.gif source.. = src/ eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/epl-v10.html000066400000000000000000000402301203611042400264700ustar00rootroot00000000000000 Eclipse Public License - Version 1.0

Eclipse Public License - v 1.0

THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.

1. DEFINITIONS

"Contribution" means:

a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
b) in the case of each subsequent Contributor:

i) changes to the Program, and

ii) additions to the Program;

where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.

"Contributor" means any person or entity that distributes the Program.

"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.

"Program" means the Contributions distributed in accordance with this Agreement.

"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.

2. GRANT OF RIGHTS

a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.

b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.

c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.

d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.

3. REQUIREMENTS

A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:

a) it complies with the terms and conditions of this Agreement; and

b) its license agreement:

i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;

ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;

iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and

iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.

When the Program is made available in source code form:

a) it must be made available under this Agreement; and

b) a copy of this Agreement must be included with each copy of the Program.

Contributors may not remove or alter any copyright notices contained within the Program.

Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.

4. COMMERCIAL DISTRIBUTION

Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.

For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.

5. NO WARRANTY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.

6. DISCLAIMER OF LIABILITY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

7. GENERAL

If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.

If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.

All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.

Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.

This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

 

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/plugin.properties000066400000000000000000000011771203611042400300410ustar00rootroot00000000000000#****************************************************************************** # Copyright (c) 2003, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ providerName=tigris.org pluginName=SVN Team Provider Core svnRemove=SVN Remove svnAdd=SVN Addeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/plugin.xml000066400000000000000000000123271203611042400264440ustar00rootroot00000000000000 svn:executable If present, make the file executable. The value you enter for this property will be canonicalized to *, so just enter *. svn:needs-lock If present, makes the file read-only unless the file is locked. The purpose of this property is to serve as a communication mechanism to let the user know that they should lock the file before attempting to edit it. The value you enter for this property will be canonicalized to *, so just enter *. svn:mime-type The mimetype of the file. Used to determine whether to merge the file, and how to serve it from Apache. A mimetype beginning with 'text/' (or an absent mimetype) is treated as text. Anything else is treated as binary. svn:ignore A newline separated list of file patterns to ignore. This property is set automatically when you use the Add to svn:ignore option. svn:keywords Keywords to be expanded. Valid keywords are: URL, HeadURL The URL for the head version of the object. Author, LastChangedBy The last person to modify the file. Date, LastChangedDate The date/time the object was last modified. Rev, LastChangedRevision The last revision the object changed. Id A compressed summary of the previous 4 keywords. svn:eol-style One of 'native', 'LF', 'CR', 'CRLF'. svn:externals A newline separated list of module specifiers, each of which consists of a relative directory path, optional revision flags, and an URL. For example: foo http://example.com/repos/zig foo/bar -r 1234 http://example.com/repos/zag DeferFileDelete Set to "true" if your project is using some kind of generator or other process that updates versioned files by deleting and then recreating the files. By setting this property you indicate that you do not want Delete operations to be immediately handled and turned into svn delete commands. If the file is deleted and recreated, this will cause it to be recognized as a modification. If the file is never recreated it will have a status of missing and can be deleted on commit or from the Show Pending Operations view. eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/plugin_ja.properties000066400000000000000000000014051203611042400305050ustar00rootroot00000000000000#****************************************************************************** # Copyright (c) 2005, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ #Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) pluginName = SVN\u30C1\u30FC\u30E0\u30D7\u30ED\u30D0\u30A4\u30C0 Core providerName = tigris.org svnAdd = SVN \u8FFD\u52A0 svnRemove = SVN \u524A\u9664 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/plugin_zh.properties000066400000000000000000000014451203611042400305400ustar00rootroot00000000000000#****************************************************************************** # Copyright (c) 2005, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ #Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) #Translated by fcoffee. pluginName = SVN \u5C0F\u7EC4\u529F\u80FD\u63D0\u4F9B\u7A0B\u5E8F\u6838\u5FC3 providerName = tigris.org svnAdd = SVN \u6DFB\u52A0 svnRemove = SVN \u79FB\u9664 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/plugin_zh_TW.properties000066400000000000000000000013651203611042400311530ustar00rootroot00000000000000#****************************************************************************** # Copyright (c) 2005, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ #Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) pluginName = SVN \u5718\u968A\u529F\u80FD\u6838\u5FC3 providerName = tigris.org svnAdd = SVN \u65B0\u589E svnRemove = SVN \u79FB\u9664 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/schema/000077500000000000000000000000001203611042400256575ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/schema/messageHandlers.exsd000066400000000000000000000040611203611042400316520ustar00rootroot00000000000000 [Enter the first release in which this extension point appears.] [Enter extension point usage example here.] [Enter API information here.] [Enter information about supplied implementation of this extension point.] eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/schema/svnPropertyTypes.exsd000066400000000000000000000101521203611042400321430ustar00rootroot00000000000000 Extension point for defining new Subversion properties Name of this property. e.g: svn:external Allow recursive setting of property. Datatype used for editing the property. Show property for files, folders or both. api eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/000077500000000000000000000000001203611042400252065ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/000077500000000000000000000000001203611042400257755ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/000077500000000000000000000000001203611042400272765ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/000077500000000000000000000000001203611042400314755ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/000077500000000000000000000000001203611042400334665ustar00rootroot00000000000000000077500000000000000000000000001203611042400343375ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/coreCancelableSVNStatusCallback.java000066400000000000000000000020221203611042400424170ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/corepackage org.tigris.subversion.subclipse.core; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNStatusCallback; public class CancelableSVNStatusCallback extends SVNStatusCallback { private IProgressMonitor monitor; private ISVNClientAdapter svnClient; private boolean canceled; public CancelableSVNStatusCallback(IProgressMonitor monitor) { super(); this.monitor = monitor; } public void setSvnClient(ISVNClientAdapter svnClient) { this.svnClient = svnClient; } @Override public void doStatus(String path, ISVNStatus status) { super.doStatus(path, status); if (svnClient != null && monitor != null && monitor.isCanceled() && !canceled) { try { svnClient.cancelOperation(); canceled = true; } catch (SVNClientException e) {} } } }IMessageHandler.java000066400000000000000000000005311203611042400401740ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/corepackage org.tigris.subversion.subclipse.core; public interface IMessageHandler { public static final int INFO = 0; public static final int WARNING = 1; public static final int ERROR = 2; public void handleMessage(String title, String message, int severity); public boolean handleQuestion(String title, String question); } IResourceStateChangeListener.java000066400000000000000000000047021203611042400427220ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import java.util.EventListener; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; /** * A resource state change listener is notified of changes to resources * regarding their team state. *

* Clients may implement this interface. *

* @see ITeamManager#addResourceStateChangeListener(IResourceStateChangeListener) */ public interface IResourceStateChangeListener extends EventListener{ /** * Notifies this listener that some resource sync info state changes have * already happened. For example, a resource's base revision may have * changed. The resource tree is open for modification when this method is * invoked, so markers can be created, etc. * * @param changedResources that have sync info state changes * * [Note: The changed state event is purposely vague. For now it is only * a hint to listeners that they should query the provider to determine the * resources new sync info.] */ public void resourceSyncInfoChanged(IResource[] changedResources); /** * Notifies this listener that the resource's have been modified. This * doesn't necessarily mean that the resource state isModified. The listener * must check the state. * * @param changedResources that have changed state * @param changeType the type of state change. */ public void resourceModified(IResource[] changedResources); /** * Notifies this listener that the project has just been configured * to be a Subversion project. * * @param project The project that has just been configured */ public void projectConfigured(IProject project); /** * Notifies this listener that the project has just been deconfigured * and no longer has the SVN nature. * * @param project The project that has just been configured */ public void projectDeconfigured(IProject project); public void initialize(); } ISVNCoreConstants.java000066400000000000000000000023771203611042400405000ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; /** * @author Brock Janiczak */ public interface ISVNCoreConstants { String PREF_RECURSIVE_STATUS_UPDATE = "resursive_status_update"; String PREF_SHOW_OUT_OF_DATE_FOLDERS = "show_out_of_date_folders"; String PREF_SHARE_NESTED_PROJECTS = "share_nested_projects"; String PREF_IGNORE_HIDDEN_CHANGES = "ignore_hidden_changes"; String PREF_IGNORE_MANAGED_DERIVED_RESOURCES = "ignore_managed_derived_resources"; public final int DEPTH_UNKNOWN = 0; public final int DEPTH_EXCLUDE = 1; public final int DEPTH_EMPTY = 2; public final int DEPTH_FILES = 3; public final int DEPTH_IMMEDIATES = 4; public final int DEPTH_INFINITY = 5; } ISVNFile.java000066400000000000000000000013241203611042400365610ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; /** * SVN file. Can be local or remote * * @see ISVNResource */ public interface ISVNFile extends ISVNResource { } ISVNFolder.java000066400000000000000000000062461203611042400371250ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import org.eclipse.core.runtime.IProgressMonitor; /** * The SVN analog of a directory. SVN folders have access to synchronization information * that describes the association between the folder and the remote repository. * * @see ISVNResource * @see ISVNFile */ public interface ISVNFolder extends ISVNResource { public static final int FILE_MEMBERS = 1; public static final int FOLDER_MEMBERS = 2; public static final int IGNORED_MEMBERS = 4; public static final int UNMANAGED_MEMBERS = 8; public static final int MANAGED_MEMBERS = 16; public static final int EXISTING_MEMBERS = 32; public static final int PHANTOM_MEMBERS = 64; public static final int ALL_MEMBERS = FILE_MEMBERS | FOLDER_MEMBERS | IGNORED_MEMBERS | UNMANAGED_MEMBERS | MANAGED_MEMBERS | EXISTING_MEMBERS | PHANTOM_MEMBERS; public static final int ALL_EXISTING_MEMBERS = FILE_MEMBERS | FOLDER_MEMBERS | IGNORED_MEMBERS | UNMANAGED_MEMBERS | MANAGED_MEMBERS | EXISTING_MEMBERS; public static final int ALL_UNIGNORED_MEMBERS = FILE_MEMBERS | FOLDER_MEMBERS | UNMANAGED_MEMBERS | MANAGED_MEMBERS | EXISTING_MEMBERS | PHANTOM_MEMBERS; public static final int ALL_EXISTING_UNIGNORED_MEMBERS = FILE_MEMBERS | FOLDER_MEMBERS | UNMANAGED_MEMBERS | MANAGED_MEMBERS | EXISTING_MEMBERS; /** * Answer the immediate children of the resource * The flags indicate the type of members to be included. * Here are the rules for specifying just one flag: * * a) FILE_MEMBERS and FOLDER_MEMBERS will return managed * and unmanaged resource of the corresponding type * b) IGNORED_MEMBERS, MANAGED_RESOURCES and UNMANAGED_RESOURCES * will return files and folders of the given type * c) EXISTING_MEMBERS and PHANTOM_MEMBERS will return existing * and phatom resource of the corresponding type * * Note: Unmanaged resources are those that are neither managed or ignored. * * If all of the flags from either group a), group b) or group c) * are not present, the same rule for default types applies. * For example, * - FILE_MEMBERS | FOLDER_MEMBERS will return all managed * and unmanaged, existing and phantom files and folders. * - IGNORED_MEMBERS | UNMANAGED_MEMBERS will return all * ignored or unmanaged, existing or phantom files and folders * If a flag from each group is present, the result is the * union of the sets. For example, * - FILE_MEMBERS | IGNORED_MEMBERS | EXISTING_MEMBERS will return all * existing ignored files. */ public ISVNResource[] members(IProgressMonitor monitor,int flags) throws SVNException; } ISVNLocalFile.java000066400000000000000000000031241203611042400375340ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import org.tigris.subversion.svnclientadapter.SVNKeywords; /** * SVN local file. SVN files have access to synchronization information * that describes their association with the SVN repository. * * @see ISVNFile * @see ISVNLocalResource */ public interface ISVNLocalFile extends ISVNLocalResource, ISVNFile { /** * set the keywords for this file * @param svnKeywords * @throws SVNException */ void setKeywords(SVNKeywords svnKeywords) throws SVNException; /** * add given keywords to this file * @param svnKeywords * @throws SVNException */ void addKeywords(SVNKeywords svnKeywords) throws SVNException; /** * remove given keywords for this file * @param svnKeywords * @throws SVNException */ void removeKeywords(SVNKeywords svnKeywords) throws SVNException; /** * get the keywords for this file * @return * @throws SVNException */ SVNKeywords getKeywords() throws SVNException; } ISVNLocalFolder.java000066400000000000000000000032261203611042400400730ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import org.eclipse.core.runtime.IProgressMonitor; /** * SVN local folder. SVN folders have access to synchronization information * that describes the association between the folder and the remote repository. * * @see ISVNFolder */ public interface ISVNLocalFolder extends ISVNLocalResource, ISVNFolder { /** * refresh the status of this folde and its children according to recursive * false : this folder and its immediate children * true : this folder and its children (recursively) * @param recursive * @see ISVNLocalResource#refreshStatus */ public void refreshStatus(boolean recursive) throws SVNException; public void acceptChildren(ISVNResourceVisitor visitor) throws SVNException; /** * unmanage the folder, ie delete its svn subdirectory. This is a recursive operation */ public void unmanage(IProgressMonitor monitor) throws SVNException; /** * Add the following pattern to the file's parent ignore list */ public void setIgnoredAs(final String pattern) throws SVNException; } ISVNLocalResource.java000066400000000000000000000130451203611042400404470ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import java.io.File; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.ISVNProperty; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * The interface represents a resource that exists in a local SVN working copy repository. * * @see ISVNLocalFile * @see ISVNLocalFolder */ public interface ISVNLocalResource extends ISVNResource, IAdaptable { /** * Answers the workspace synchronization information for this resource. This * function does not contact the server * * @return the synchronization information for this resource, or * null if the resource does not have synchronization * information available. * @throws SVNException */ public LocalResourceStatus getStatus() throws SVNException; public LocalResourceStatus getStatusFromCache() throws SVNException; /** * Answers the revision number for this resource. * The revision might not be stored in workspace sychronization data, * so a svn call might be required. This call however is not expected to contact server, * just fetch the revision from working copy metadata * @return * @throws SVNException */ public SVNRevision getRevision() throws SVNException; /** * refresh the status of the resource (which is cached) * @throws SVNException */ public void refreshStatus() throws SVNException; /** * @return if this resource exists */ public boolean exists(); /** * @return true if this resource is managed by SVN * @throws SVNException */ public boolean isManaged() throws SVNException; /** * @return true if this resource is locally added by SVN * @throws SVNException */ public boolean isAdded() throws SVNException; /** * @return true if this resource is managed by SVN and has a remote counter * part * @throws SVNException */ public boolean hasRemote() throws SVNException; /** * @return the parent of this local resource */ public ISVNLocalFolder getParent(); /** * @return the underlaying resource */ public IResource getIResource(); /** * @return the file corresponding to the resource */ public File getFile(); /** * @return the latest remote version of this resource from repository * @throws SVNException */ public ISVNRemoteResource getLatestRemoteResource() throws SVNException; /** * @return the base version for this local resource * @throws SVNException */ public ISVNRemoteResource getBaseResource() throws SVNException; /** * get the remote resource corresponding to the given revision of this local * resource * * @return null if there is no remote file corresponding to this local * resource * @throws SVNException */ public ISVNRemoteResource getRemoteResource(SVNRevision revision) throws SVNException; /** * resource is considered dirty if either * * @throws SVNException */ public boolean isDirty() throws SVNException; public void accept(ISVNResourceVisitor visitor) throws SVNException; /** * Add the following file to the parent's ignore list * @throws SVNException */ public void setIgnored() throws SVNException; /** * Answer whether the resource could be ignored. Even if a resource is * ignored, it can still be added to a repository, at which time it should * never be ignored by the SVN client. * @throws SVNException */ public boolean isIgnored() throws SVNException; /** * Remove file or directory from version control. * @throws SVNException */ public void delete() throws SVNException; /** * Restore pristine working copy file (undo all local edits) * @throws SVNException */ public void revert() throws SVNException; /** * Set a svn property * @throws SVNException */ public void setSvnProperty(String name, String value, boolean recurse) throws SVNException; /** * Set a svn property * @throws SVNException */ public void setSvnProperty(String name, File value, boolean recurse) throws SVNException; /** * @param name a name of the svn property * @return a svn property * @throws SVNException */ public ISVNProperty getSvnProperty(String name) throws SVNException; /** * @return the svn properties for this resource * @throws SVNException */ public ISVNProperty[] getSvnProperties() throws SVNException; /** * Delete a svn property * @throws SVNException */ public void deleteSvnProperty(String name, boolean recurse) throws SVNException; /** * @throws SVNException */ public void resolve() throws SVNException; /** * @return the workspace root (i.e. the project) */ public SVNWorkspaceRoot getWorkspaceRoot(); }ISVNRemoteFile.java000066400000000000000000000026101203611042400377340ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import org.eclipse.team.core.TeamException; import org.tigris.subversion.svnclientadapter.ISVNAnnotations; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * This interface represents a file in a repository. Instances of this interface * can be used to fetch the contents of the remote file. * */ public interface ISVNRemoteFile extends ISVNRemoteResource, ISVNFile { /** * Get annotations for the remote file * * @param fromRevision * @param toRevision * @param includeMergedRevisions * @param ignoreMimeType * @return annotations of the receiver for the specified range * @throws TeamException */ public ISVNAnnotations getAnnotations(SVNRevision fromRevision, SVNRevision toRevision, boolean includeMergedRevisions, boolean ignoreMimeType) throws TeamException; } ISVNRemoteFolder.java000066400000000000000000000024671203611042400403020ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import org.eclipse.core.runtime.IProgressMonitor; /** * This interface represents a remote folder in a repository. It provides * access to the members (remote files and folders) of a remote folder * * Clients are not expected to implement this interface. */ public interface ISVNRemoteFolder extends ISVNRemoteResource, ISVNFolder{ /** * Create a new remote folder * @param folderName a folder name * @param message a commit message * @param monitor a progress monitor * @throws SVNException */ void createRemoteFolder(String folderName, String message, IProgressMonitor monitor) throws SVNException; /** * Empty the cache of children */ void refresh(); } ISVNRemoteResource.java000066400000000000000000000076121203611042400406530ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import java.util.Date; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.team.core.TeamException; import org.eclipse.team.core.variants.IResourceVariant; import org.tigris.subversion.svnclientadapter.ISVNLogMessage; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * The interface represents a resource that exists in a SVN repository. * It purpose is to provide information about the remote resource from * the repository. * * Clients are not expected to implement this interface. */ public interface ISVNRemoteResource extends ISVNResource, IAdaptable, IResourceVariant { /** * Does the remote resource represented by this handle exist on the server? * This method may contact the server and be long running. * @param monitor * @return true when a resource exists * @throws TeamException */ public boolean exists(IProgressMonitor monitor) throws TeamException; /** * @return the repository relative path of this remote folder. */ public String getRepositoryRelativePath(); /** * @return the project relative path of this remote folder. */ public String getProjectRelativePath(); /** * Compares two objects for equality; for svn emote resources, equality is defined in * terms of their handles: same url, and identical revision numbers. * Remote resources are not equal to objects other * than svn remote resources. * * @param other the other object * @return an indication of whether the objects are equals */ public boolean equals(Object other); /** * @return the last changed revision of this remote resource */ public SVNRevision.Number getLastChangedRevision(); /** * @return the revision of this remote resource */ public SVNRevision getRevision(); /** * @return the date of modification for this remote resource or null if this date is not available */ public Date getDate(); /** * @return the author of this remote resource or null if the author is not available */ public String getAuthor(); /** * Get all the log entries of the remote resource * * * @param pegRevision * @param revisionStart * @param revisionEnd * @param stopOnCopy * @param fetchChangePath * @param limit * @param includeMergedRevisions * @return array of LogMessages * @throws TeamException */ public ISVNLogMessage[] getLogMessages(SVNRevision pegRevision, SVNRevision revisionStart, SVNRevision revisionEnd, boolean stopOnCopy, boolean fetchChangePath, long limit, boolean includeMergedRevisions) throws TeamException; /** * @return the parent remote folder */ public ISVNRemoteFolder getParent(); /** * Get the members of this remote resource (at the same revision than this resource) * @param progress a progress monitor * @return ISVNRemoteResource[] and array of members (children resources) * @throws TeamException */ public ISVNRemoteResource[] members(IProgressMonitor progress) throws TeamException; /** * Answers if the remote element may have children. * * @return true if the remote element may have children and * false otherwise. */ public boolean isContainer(); } ISVNRepositoryLocation.java000066400000000000000000000107471203611042400415630ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * This interface provides access to the specific portions of * the repository location string for use by connection methods * and the user authenticator. * * It is not intended to implemented by clients. * * @see IUserAuthenticator * @see IConnectionMethod */ public interface ISVNRepositoryLocation extends IAdaptable { /** * Returns the host where the repository is located */ public SVNUrl getUrl(); /** * Returns the string representing the receiver. This string * should contain enough information to recreate the receiver. */ public String getLocation(); /** * Returns the immediate children of this location. If tag is null the * HEAD branch is assumed. * * If modules is true, then the module definitions from the CVSROOT/modules file are returned. * Otherwise, the root level projects are returned. * * @param tag the context in which to return the members (e.g. branch or version). */ public ISVNRemoteResource[] members(IProgressMonitor progress) throws SVNException; /** * Returns a handle to a remote file at this repository location using the given tag as the * context. The corresponding remote file may not exist or may be a folder. */ // public ICVSRemoteFile getRemoteFile(String remotePath, CVSTag tag); /** * Returns a handle to a remote folder at this repository location using the given tag as the * context. The corresponding remote folder may not exist or may be a file. */ public ISVNRemoteFolder getRemoteFolder(String remotePath); public ISVNRemoteFile getRemoteFile(String remotePath) throws SVNException; public ISVNRemoteFile getRemoteFile(SVNUrl url) throws SVNException; /** * Return the conection timeout value in milliseconds. * A value of 0 means there is no timeout value. */ // public int getTimeout(); /** * Return the username */ public String getUsername(); /** * Exists for pre-1.0 compatibility. It is not expected * that users of this class will use this method * @deprecated */ public void setUsername(String username); /** * Exists for pre-1.0 compatibility. It is not expected * that users of this class will use this method * @deprecated */ public void setPassword(String password); /** * add user and password to the keyring */ public void updateCache() throws SVNException; public ISVNClientAdapter getSVNClient() throws SVNException; public void returnSVNClient(ISVNClientAdapter client); public ISVNRemoteFolder getRootFolder(); public void refreshRootFolder(); /** * Returns the user information for the location. */ // public IUserInfo getUserInfo(boolean allowModificationOfUsername); /** * Flush any cahced user information related to the repository location */ // public void flushUserInfo() throws CVSException; /** * returns the label (friendly name for the repository location) or null if no label */ public String getLabel(); public void setLabel(String label); /** * Validate that the receiver can be used to connect to a repository. * An exception is thrown if connection fails * * @param monitor the progress monitor used while validating */ public void validateConnection(IProgressMonitor monitor) throws SVNException; /** * Verify that said location contains said path. * @throws SVNException * */ public boolean pathExists() throws SVNException; /** * get the repository root url * @return */ public SVNUrl getRepositoryRoot(); /** * set the repository root url * @param url */ public void setRepositoryRoot(SVNUrl url); } ISVNResource.java000066400000000000000000000044471203611042400375020ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import org.eclipse.core.resources.IResource; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * The SVN analog of file system files and directories. These are handles to * state maintained by a SVN client. That is, the SVN resource does not * actually contain data but rather represents SVN state and behavior. You are * free to manipulate handles for SVN resources that do not exist but be aware * that some methods require that an actual resource be available. *

* The SVN client has been designed to work on these handles uniquely. As such, the * handle could be to a remote resource or a local resource and the client could * perform SVN operations ignoring the actual location of the resources.

* * @see ISVNFolder * @see ISVNFile */ public interface ISVNResource { /** * Answers the name of the resource. * * @return the name of the resource this handle represents. It can never * be null. */ public String getName(); /** * Answers if the handle is a file or a folder handle. * * @return true if this is a folder handle and false if * it is a file handle. */ public boolean isFolder(); /** * @return the repository location * @throws SVNException */ public ISVNRepositoryLocation getRepository(); /** * get the url corresponding to this resource (which needs not to exist) * @throws SVNException */ public SVNUrl getUrl(); /** * Gets the underlying resource of this SVN resource if there is one * @return Local resource or null if this is a remote resource with * no corresponding local resource */ public IResource getResource(); } ISVNResourceVisitor.java000066400000000000000000000014751203611042400410600ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; /** * Interface for an visitor of the ISVNResources. */ public interface ISVNResourceVisitor { public void visitFile(ISVNFile file) throws SVNException; public void visitFolder(ISVNFolder folder) throws SVNException; } ISVNRunnable.java000066400000000000000000000034071203611042400374540ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.runtime.IProgressMonitor; /** * A runnable which executes as a batch operation within a specific svn local * workspace. * The ISVNRunnable interface should be implemented by any class whose * instances are intended to be run by IWorkspace.run. *

* Clients may implement this interface. *

* @see IWorkspace#run(IWorkspaceRunnable, IProgressMonitor) */ public interface ISVNRunnable { /** * Runs the operation reporting progress to and accepting * cancellation requests from the given progress monitor. *

* Implementors of this method should check the progress monitor * for cancellation when it is safe and appropriate to do so. The cancellation * request should be propagated to the caller by throwing * OperationCanceledException. *

* * @param monitor a progress monitor, or null if progress * reporting and cancellation are not desired * @exception SVNException if this operation fails. */ public void run(IProgressMonitor monitor) throws SVNException; } Messages.java000066400000000000000000000012021203611042400367440ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/corepackage org.tigris.subversion.subclipse.core; import org.eclipse.osgi.util.NLS; public class Messages extends NLS { private static final String BUNDLE_NAME = "org.tigris.subversion.subclipse.core.messages"; //$NON-NLS-1$ public static String SVNTeamProviderType_0; public static String SVNTeamProviderType_1; public static String SVNTeamProviderType_2; public static String SVNTeamProviderType_3; public static String SVNTeamProviderType_4; public static String SVNTeamProviderType_5; static { // initialize resource bundle NLS.initializeMessages(BUNDLE_NAME, Messages.class); } private Messages() { } } Policy.java000066400000000000000000000165401203611042400364470ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import java.text.MessageFormat; import java.util.MissingResourceException; import java.util.ResourceBundle; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.SubProgressMonitor; import org.tigris.subversion.subclipse.core.internal.InfiniteSubProgressMonitor; public class Policy { /** The initial guess for number of resources(pm ticks) the infinite subPm should start with in case of checkout */ public static final int INFINITE_PM_GUESS_FOR_CHECKOUT = 1000; /** The initial guess for number of resources(pm ticks) the infinite subPm should start with in case of update/switch */ public static final int INFINITE_PM_GUESS_FOR_SWITCH = 100; private static final String BUNDLE_NAME = "org.tigris.subversion.subclipse.core.messages"; //$NON-NLS-1$ protected static ResourceBundle bundle = null; //debug constants // You can enable debugging in the .options file : // org.tigris.subversion.subclipse.core/debug=true // org.tigris.subversion.subclipse.core/metafiles=true // org.tigris.subversion.subclipse.core/threading=true // org.tigris.subversion.subclipse.core/status=true // You can also enable tracing in the PDE target run-time tab public static boolean DEBUG_METAFILE_CHANGES = false; public static boolean DEBUG_THREADING = false; // used in ReetrantLock public static boolean DEBUG_STATUS = false; static { //init debug options if (SVNProviderPlugin.getPlugin().isDebugging()) { DEBUG_METAFILE_CHANGES = "true".equalsIgnoreCase(Platform.getDebugOption(SVNProviderPlugin.ID + "/metafiles"));//$NON-NLS-1$ //$NON-NLS-2$ DEBUG_THREADING = "true".equalsIgnoreCase(Platform.getDebugOption(SVNProviderPlugin.ID + "/threading"));//$NON-NLS-1$ //$NON-NLS-2$ DEBUG_STATUS = "true".equalsIgnoreCase(Platform.getDebugOption(SVNProviderPlugin.ID + "/status"));//$NON-NLS-1$ //$NON-NLS-2$ } } private static ResourceBundle getResourceBundle() { if (bundle == null) { bundle = ResourceBundle.getBundle(BUNDLE_NAME); } return bundle; } /** * Lookup the message with the given ID in this catalog and bind its * substitution locations with the given string. */ public static String bind(String id, String binding) { return bind(id, new String[] { binding }); } /** * Lookup the message with the given ID in this catalog and bind its * substitution locations with the given strings. */ public static String bind(String id, String binding1, String binding2) { return bind(id, new String[] { binding1, binding2 }); } /** * Gets a string from the resource bundle. We don't want to crash because of a missing String. * Returns the key if not found. */ public static String bind(String key) { try { return getResourceBundle().getString(key); } catch (MissingResourceException e) { return key; } catch (NullPointerException e) { return "!" + key + "!"; //$NON-NLS-1$ //$NON-NLS-2$ } } /** * Gets a string from the resource bundle and binds it with the given arguments. If the key is * not found, return the key. */ public static String bind(String key, Object[] args) { try { return MessageFormat.format(bind(key), args); } catch (MissingResourceException e) { return key; } catch (NullPointerException e) { return "!" + key + "!"; //$NON-NLS-1$ //$NON-NLS-2$ } } /** * throw an OperationCanceledException if monitor.isCanceled() */ public static void checkCanceled(IProgressMonitor monitor) { if (monitor.isCanceled()) throw new OperationCanceledException(); } /** * Return a NullProgressMonitor if monitor is null or monitor itself otherwise */ public static IProgressMonitor monitorFor(IProgressMonitor monitor) { if (monitor == null) return new NullProgressMonitor(); return monitor; } /** * Return a submonitor for monitor * @param monitor the parent progress monitor * @param ticks the number of work ticks allocated from the * parent monitor * @return IProgressMonitor */ public static IProgressMonitor subMonitorFor(IProgressMonitor monitor, int ticks) { if (monitor == null) return new NullProgressMonitor(); if (monitor instanceof NullProgressMonitor) return monitor; return new SubProgressMonitor(monitor, ticks, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK); } /** * Return a submonitor for monitor * @param monitor the parent progress monitor * @param ticks the number of work ticks allocated from the * parent monitor * @param style one of * * @see SubProgressMonitor#SUPPRESS_SUBTASK_LABEL * @see SubProgressMonitor#PREPEND_MAIN_LABEL_TO_SUBTASK * @return IProgressMonitor */ public static IProgressMonitor subMonitorFor(IProgressMonitor monitor, int ticks, int style) { if (monitor == null) return new NullProgressMonitor(); if (monitor instanceof NullProgressMonitor) return monitor; return new SubProgressMonitor(monitor, ticks, style); } /** * Return a submonitor for cases when we do not know the number of ticks ... * The main task label will be prepended to the subtask label. * @param monitor the parent progress monitor * @param ticks the number of work ticks allocated from the * parent monitor * @return IProgressMonitor */ public static IProgressMonitor infiniteSubMonitorFor(IProgressMonitor monitor, int ticks) { if (monitor == null) return new NullProgressMonitor(); if (monitor instanceof NullProgressMonitor) return monitor; return new InfiniteSubProgressMonitor(monitor, ticks, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK); } /** * Return a submonitor for cases when we do not know the number of ticks ... * The main task label will be prepended to the subtask label. * @param monitor the parent progress monitor * @param ticks the number of work ticks allocated from the * parent monitor * @param style one of * * @see SubProgressMonitor#SUPPRESS_SUBTASK_LABEL * @see SubProgressMonitor#PREPEND_MAIN_LABEL_TO_SUBTASK * @return IProgressMonitor */ public static IProgressMonitor infiniteSubMonitorFor(IProgressMonitor monitor, int ticks, int style) { if (monitor == null) return new NullProgressMonitor(); if (monitor instanceof NullProgressMonitor) return monitor; return new InfiniteSubProgressMonitor(monitor, ticks, style); } } PreferenceInitializer.java000066400000000000000000000027171203611042400414730ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import org.eclipse.core.runtime.Preferences; import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; /** * Preference Initializer. * Called at startup by Eclipse to initialize any default preferences. * * @author markphip */ public class PreferenceInitializer extends AbstractPreferenceInitializer { public PreferenceInitializer() { super(); } public void initializeDefaultPreferences() { Preferences preferences = SVNProviderPlugin.getPlugin().getPluginPreferences(); preferences.setDefault(ISVNCoreConstants.PREF_RECURSIVE_STATUS_UPDATE, true); preferences.setDefault(ISVNCoreConstants.PREF_SHOW_OUT_OF_DATE_FOLDERS, false); preferences.setDefault(ISVNCoreConstants.PREF_SHARE_NESTED_PROJECTS, true); preferences.setDefault(ISVNCoreConstants.PREF_IGNORE_MANAGED_DERIVED_RESOURCES, false); } } SVNAdapterFactories.java000066400000000000000000000031421203611042400410110ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdapterManager; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Platform; import org.tigris.subversion.subclipse.core.resources.LocalResourceAdapterFactory; /** * handles all the IAdapterFactory used in the plugin */ public class SVNAdapterFactories { LocalResourceAdapterFactory localResourceAdapterFactory; public void startup(IProgressMonitor monitor) throws CoreException { IAdapterManager mgr = Platform.getAdapterManager(); // adapterFactory to translate IResource to ISVNResource localResourceAdapterFactory = new LocalResourceAdapterFactory(); mgr.registerAdapters(localResourceAdapterFactory,IResource.class); } public void shutdown(IProgressMonitor monitor) throws CoreException { IAdapterManager mgr = Platform.getAdapterManager(); mgr.unregisterAdapters(localResourceAdapterFactory); localResourceAdapterFactory = null; } } SVNClientManager.java000066400000000000000000000122201203611042400402770ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import java.io.File; import java.util.HashMap; import java.util.Set; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.clientadapter.Activator; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; /** * Handles the creation of SVNClients * * @author Cedric Chabanois (cchab at tigris.org) */ public class SVNClientManager { private static String DEFAULT_ADMIN_DIR = ".svn"; private String svnClientInterface; private String svnAdminDir = null; private File configDir = null; private boolean fetchChangePathOnDemand = true; private HashMap cachedClients = null; public static final String UNABLE_TO_LOAD_DEFAULT_CLIENT = "Unable to load default SVN Client"; public void startup(IProgressMonitor monitor) throws CoreException { } public void shutdown(IProgressMonitor monitor) throws CoreException { } /** * set the client interface to use * * @param svnClientInterface */ public void setSvnClientInterface(String svnClientInterface) { this.svnClientInterface = svnClientInterface; } /** * get the current svn client interface used * @return */ public String getSvnClientInterface() { return svnClientInterface; } public String getSvnAdminDirectory() { if (svnAdminDir == null) return DEFAULT_ADMIN_DIR; return svnAdminDir; } /** * @param configDir The configDir to set. */ public void setConfigDir(File configDir) { this.configDir = configDir; if (cachedClients == null) return; // Update configDir in stored clients Set keys = cachedClients.keySet(); for (String key : keys) { ISVNClientAdapter svnClient = cachedClients.get(key); if (svnClient != null) { try { svnClient.setConfigDirectory(configDir); } catch (SVNClientException e) { break; } } } } /** * @return the cached ISVNClientAdapter for the client interface * @throws SVNClientException */ public ISVNClientAdapter getSVNClient() throws SVNException { ISVNClientAdapter svnClient = this.getAdapter(svnClientInterface); if (svnClient == null) { svnClient = this.getAdapter(null); } if (svnClient == null) throw new SVNException("No client adapters available."); return svnClient; } private void setupClientAdapter(ISVNClientAdapter svnClient) throws SVNException { if (configDir != null) { try { svnClient.setConfigDirectory(configDir); } catch (SVNClientException e) { throw SVNException.wrapException(e); } } if (SVNProviderPlugin.getPlugin().getSvnPromptUserPassword() != null) svnClient.addPasswordCallback(SVNProviderPlugin.getPlugin().getSvnPromptUserPassword()); if (svnAdminDir == null) svnAdminDir = svnClient.getAdminDirectoryName(); } private ISVNClientAdapter getAdapter(String key) throws SVNException { ISVNClientAdapter client = null; if (key == null) { key = "default"; } if (cachedClients != null) // See if we have cached a client client = (ISVNClientAdapter) cachedClients.get(key); if (client == null) { if (!key.equals("default")) client = Activator.getDefault().getClientAdapter(svnClientInterface); if (client == null) client = Activator.getDefault().getAnyClientAdapter(); if (client == null) throw new SVNException(UNABLE_TO_LOAD_DEFAULT_CLIENT); setupClientAdapter(client); if (client.isThreadsafe()) cacheClient(key, client); } return client; } /** * @return Returns the fetchChangePathOnDemand. */ public boolean isFetchChangePathOnDemand() { return fetchChangePathOnDemand; } /** * @param fetchChangePathOnDemand The fetchChangePathOnDemand to set. */ public void setFetchChangePathOnDemand( boolean fetchChangePathOnDemand) { this.fetchChangePathOnDemand = fetchChangePathOnDemand; } public void returnSVNClient(ISVNClientAdapter client) { if (client == null || client.isThreadsafe()) return; // For non-threadsafe clients we are done with the object so // let it clean up any resources it has allocated. client.dispose(); client = null; } private void cacheClient(String key, ISVNClientAdapter client){ if (cachedClients == null) cachedClients = new HashMap(); cachedClients.put(key, client); } } SVNException.java000066400000000000000000000102111203611042400375220ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.team.core.TeamException; import org.tigris.subversion.svnclientadapter.SVNClientException; /** * A checked expection representing a failure in the SVN plugin. *

* SVN exceptions contain a status object describing the cause of * the exception. *

* * @see IStatus */ public class SVNException extends TeamException { private boolean operationInterrupted; /* * Helpers for creating SVN exceptions */ public SVNException(int severity, int code, String message, Throwable e) { super(new SVNStatus(severity, code, message, null)); operationInterrupted = (getMessage() != null && getMessage().indexOf(SVNClientException.OPERATION_INTERRUPTED) != -1); } public SVNException(int severity, int code, String message) { this(severity, code, message, null); operationInterrupted = (message != null && message.indexOf(SVNClientException.OPERATION_INTERRUPTED) != -1); } public SVNException(String message) { super(new SVNStatus(IStatus.ERROR, UNABLE, message, null)); operationInterrupted = (message != null && message.indexOf(SVNClientException.OPERATION_INTERRUPTED) != -1); } public SVNException(String message, boolean operationInterrupted) { this(message); this.operationInterrupted = operationInterrupted; } public SVNException(String message, Throwable e) { this(IStatus.ERROR, UNABLE, message, e); operationInterrupted = (getMessage() != null && getMessage().indexOf(SVNClientException.OPERATION_INTERRUPTED) != -1); } public SVNException(IStatus status) { super(status); operationInterrupted = (status.getMessage() != null && status.getMessage().indexOf(SVNClientException.OPERATION_INTERRUPTED) != -1); } public boolean operationInterrupted() { return operationInterrupted; } /* * Static helper methods for creating exceptions */ public static SVNException wrapException(IResource resource, String message, CoreException e) { return new SVNException(new SVNStatus(IStatus.ERROR, e.getStatus().getCode(), message, e)); } /* * Static helper methods for creating exceptions */ public static SVNException wrapException(Exception e) { Throwable t = e; if (e instanceof InvocationTargetException) { Throwable target = ((InvocationTargetException) e).getTargetException(); if (target instanceof SVNException) { return (SVNException) target; } t = target; } return new SVNException(new SVNStatus(IStatus.ERROR, UNABLE, t.getMessage() != null ? t.getMessage() : "", t)); //$NON-NLS-1$ } public static SVNException wrapException(CoreException e) { IStatus status = e.getStatus(); // If the exception is not a multi-status, wrap the exception to keep the original stack trace. // If the exception is a multi-status, the interesting stack traces should be in the childen already if ( ! status.isMultiStatus()) { status = new SVNStatus(status.getSeverity(), status.getCode(), status.getMessage(), e); } return new SVNException(status); } /* * Static helper methods for creating exceptions */ public static SVNException wrapException(TeamException e) { if (e instanceof SVNException) return (SVNException)e; else return new SVNException(e.getStatus()); } public CoreException toCoreException() { IStatus status = getStatus(); return new CoreException(new Status(status.getSeverity(), status.getPlugin(), 0, status.getMessage(), this)); } } SVNExternal.java000066400000000000000000000110711203611042400373530ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/corepackage org.tigris.subversion.subclipse.core; import java.io.File; import java.net.MalformedURLException; import java.net.URL; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Path; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; public class SVNExternal { private File file; private String propertyLine; private String folder; private String path; private String url; private long revision = -1; private long fixedAtRevision = -1; private boolean selected; private static final String REGEXP_REVISION = "-r ?(\\d+)"; private static final Pattern pattern = Pattern.compile(REGEXP_REVISION); public SVNExternal(File file, String propertyLine) { super(); this.file = file; this.propertyLine = propertyLine; if (propertyLine != null) { Matcher matcher = pattern.matcher(propertyLine); if (matcher.find()) { String revision = matcher.group(); if (revision.startsWith("-r ")) { fixedAtRevision = Long.parseLong(revision.substring(3)); } else { fixedAtRevision = Long.parseLong(revision.substring(2)); } if (matcher.start() == 0) { String urlAndFolder = propertyLine.substring(matcher.end() + 1); int index = urlAndFolder.lastIndexOf(" "); if (index != -1) { url = urlAndFolder.substring(0, index); folder = urlAndFolder.substring(index + 1); if (file != null) { path = file.getAbsolutePath() + File.separator + urlAndFolder.substring(index + 1); } } } else { url = propertyLine.substring(matcher.end() + 1); folder = propertyLine.substring(0, matcher.start() - 1); if (file != null) { path = file.getAbsolutePath() + File.separator + propertyLine.substring(0, matcher.start() - 1); } } } else { int index = propertyLine.indexOf(" "); if (index != -1) { try { new URL(propertyLine.substring(0, index)); int lastIndex = propertyLine.lastIndexOf(" "); if (lastIndex != -1) { url = propertyLine.substring(0, lastIndex); folder = propertyLine.substring(lastIndex + 1); if (file != null) { path = file.getAbsolutePath() + File.separator + propertyLine.substring(lastIndex + 1); } } } catch (MalformedURLException e) { url = propertyLine.substring(index + 1); folder = propertyLine.substring(0, index); if (file != null) { path = file.getAbsolutePath() + File.separator + propertyLine.substring(0, index); } } } } if (fixedAtRevision == -1 && url != null) { int index = url.lastIndexOf("@"); if (index != -1) { try { fixedAtRevision = Long.parseLong(url.substring(index + 1)); } catch (Exception e) {} } } if (path != null) { ISVNLocalResource svnResource = getSvnResource(path); if (svnResource != null) { try { revision = svnResource.getStatus().getLastChangedRevision().getNumber(); } catch (SVNException e) {} } } if (revision == -1 && fixedAtRevision != -1) { revision = fixedAtRevision; } } } public File getFile() { return file; } public String getPropertyLine() { return propertyLine; } public boolean isSelected() { return selected; } public void setSelected(boolean selected) { this.selected = selected; } public String getFolder() { return folder; } public String getPath() { return path; } public String getUrl() { return url; } public long getRevision() { return revision; } public long getFixedAtRevision() { return fixedAtRevision; } public String toString() { if (!selected || revision == -1) { return propertyLine; } else { return "-r" + revision + " " + url + " " + folder; } } private static ISVNLocalResource getSvnResource(String path) { IResource resource = null; ISVNLocalResource svnResource = null; if (path != null) { File file = new File(path); if (file.exists()) { if (file.isDirectory()) { resource = ResourcesPlugin.getWorkspace().getRoot().getContainerForLocation(new Path(path)); } else { resource = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(new Path(path)); } if (resource != null) { svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); } } } return svnResource; } } SVNProjectSetCapability.java000066400000000000000000000324561203611042400416670ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import java.io.File; import java.io.IOException; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.StringTokenizer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.MultiRule; import org.eclipse.team.core.ProjectSetCapability; import org.eclipse.team.core.ProjectSetSerializationContext; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.commands.CheckoutCommand; import org.tigris.subversion.subclipse.core.repo.SVNRepositoryLocation; import org.tigris.subversion.subclipse.core.resources.RemoteFolder; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * An object for serializing and deserializing of references to SVN based * projects. Given a project, it can produce a UTF-8 encoded String which can be * stored in a file. Given this String, it can load a project into the * workspace. */ public class SVNProjectSetCapability extends ProjectSetCapability { /** * Override superclass implementation to return an array of project * references. * * @see ProjectSetSerializer#asReference(IProject[], * ProjectSetSerializationContext, IProgressMonitor) */ public String[] asReference(IProject[] projects, ProjectSetSerializationContext context, IProgressMonitor monitor) throws TeamException { String[] result = new String[projects.length]; for (int i = 0; i < projects.length; i++) { result[i] = asReference(projects[i]); } return result; } /** * Answer a string representing the specified project * * @param project * the project (not null) * @return the project reference (not null) */ private String asReference(IProject project) { StringBuffer buffer = new StringBuffer(); buffer.append("0.9.3,"); //$NON-NLS-1$ SVNTeamProvider provider = (SVNTeamProvider) RepositoryProvider .getProvider(project); SVNWorkspaceRoot root = provider.getSVNWorkspaceRoot(); buffer.append(root.getLocalRoot().getUrl().toString()); buffer.append(","); buffer.append(project.getName()); return buffer.toString(); } /** * Override superclass implementation to load the referenced projects into * the workspace. * * @see org.eclipse.team.core.ProjectSetSerializer#addToWorkspace(java.lang.String[], * org.eclipse.team.core.ProjectSetSerializationContext, * org.eclipse.core.runtime.IProgressMonitor) */ public IProject[] addToWorkspace(String[] referenceStrings, ProjectSetSerializationContext context, IProgressMonitor monitor) throws TeamException { monitor = Policy.monitorFor(monitor); Policy.checkCanceled(monitor); // Confirm the projects to be loaded Map infoMap = new HashMap(referenceStrings.length); IProject[] projects = asProjects(context, referenceStrings, infoMap); projects = confirmOverwrite(context, projects); if (projects == null) { return new IProject[0]; } // Load the projects try { return checkout(projects, infoMap, monitor); } catch (MalformedURLException e) { throw SVNException.wrapException(e); } } /** * Translate the reference strings into projects to be loaded and build a * mapping of project to project load information. * * @param context * the context of where the references came from * @param referenceStrings * project references * @param infoMap * a mapping of project to project load information * @return the projects to be loaded */ private IProject[] asProjects(ProjectSetSerializationContext context, String[] referenceStrings, Map infoMap) throws SVNException { Collection result = new ArrayList(); for (String referenceString : referenceStrings) { StringTokenizer tokenizer = new StringTokenizer( referenceString, ","); //$NON-NLS-1$ String version = tokenizer.nextToken(); // If this is a newer version, then ignore it if (!version.equals("0.9.3")) { //$NON-NLS-1$ continue; } LoadInfo info = new LoadInfo(context, tokenizer); IProject proj = info.getProject(); result.add(proj); infoMap.put(proj, info); } return (IProject[]) result.toArray(new IProject[result.size()]); } /** * Checkout projects from the SVN repository * * @param projects * the projects to be loaded from the repository * @param infoMap * a mapping of project to project load information * @param monitor * the progress monitor (not null) */ private IProject[] checkout(IProject[] projects, Map infoMap, IProgressMonitor monitor) throws TeamException, MalformedURLException { if(projects==null || projects.length==0) { return new IProject[0]; } ISchedulingRule[] ruleArray = new ISchedulingRule[projects.length]; for (int i = 0; i < projects.length; i++) { ruleArray[i] = projects[i].getWorkspace().getRuleFactory().modifyRule(projects[i]); } ISchedulingRule rule= MultiRule.combine(ruleArray); Job.getJobManager().beginRule(rule, monitor); monitor.beginTask("", 1000 * projects.length); //$NON-NLS-1$ List result = new ArrayList(); try { for (IProject project : projects) { if (monitor.isCanceled()) { break; } LoadInfo info = infoMap.get(project); if (info != null && info.checkout(new SubProgressMonitor(monitor, 1000))) { result.add(project); } } } finally { Job.getJobManager().endRule(rule); monitor.done(); } return result.toArray(new IProject[result.size()]); } /** * Internal class for adding projects to the workspace */ protected static class LoadInfo { private final ISVNRepositoryLocation repositoryLocation; private final String repo; private final IProject project; private final boolean fromFileSystem; private final String directory; // Only used when fromFileSystem is true /** * Construct a new instance wrappering the specified project reference * * @param context * the context of where the reference came from * @param projRef * the project reference */ LoadInfo(ProjectSetSerializationContext context, StringTokenizer tokenizer) throws SVNException { repo = tokenizer.nextToken(); String projectName = tokenizer.nextToken(); project = ResourcesPlugin.getWorkspace().getRoot().getProject( projectName); if (repo.indexOf("://") != -1) { //$NON-NLS-1$ // Create connection to repository root. repositoryLocation = SVNRepositoryLocation.fromString(repo, false, true); fromFileSystem = false; directory = null; } else { // Assume this is an already checked // out project, from the filesystem repositoryLocation = null; fromFileSystem = true; // Is it relative? If so, expand it // from the psf file location if (!new Path(repo).isAbsolute()) { String baseDir; if (context.getFilename() != null) { baseDir = new File(context.getFilename()).getParent(); } else { // Use the workspace root directory as // basedir, this shouldn't happen baseDir = project.getWorkspace().getRoot() .getLocation().toOSString(); } try { directory = new File(baseDir + File.separatorChar + repo).getCanonicalPath(); } catch (IOException ioe) { throw new SVNException( "Path expansion/canonicalization failed", ioe); } } else { directory = repo; } } } /** * Answer the project referenced by this object. The project may or may * not already exist. * * @return the project (not null) */ protected IProject getProject() { return project; } /** * Checkout the project specified by this reference. * * @param monitor * project monitor * @return true if loaded, else false * @throws TeamException */ boolean checkout(IProgressMonitor monitor) throws TeamException, MalformedURLException { if (fromFileSystem) { return importExistingProject(monitor); } else { if (repositoryLocation == null) { return false; } RemoteFolder remoteFolder = new RemoteFolder(repositoryLocation, new SVNUrl(repo), repositoryLocation.getRootFolder().getRevision()); CheckoutCommand command = new CheckoutCommand( new ISVNRemoteFolder[] { remoteFolder }, new IProject[] { project }); command.run(monitor); return true; } } /** * Imports a existing SVN Project to the workbench * * @param monitor * project monitor * @return true if loaded, else false * @throws TeamException */ boolean importExistingProject(IProgressMonitor monitor) throws TeamException { if (directory == null) { return false; } try { monitor.beginTask("Importing", 3 * 1000); createExistingProject(new SubProgressMonitor(monitor, 1000)); monitor.subTask("Refreshing " + project.getName()); RepositoryProvider.map(project, SVNProviderPlugin.getTypeId()); monitor.worked(1000); SVNWorkspaceRoot.setSharing(project, new SubProgressMonitor( monitor, 1000)); return true; } catch (CoreException ce) { throw new SVNException("Failed to import External SVN Project" + ce, ce); } finally { monitor.done(); } } /** * Creates a new project in the workbench from an existing one * * @param monitor * @throws CoreException */ void createExistingProject(IProgressMonitor monitor) throws CoreException { String projectName = project.getName(); IProjectDescription description; try { monitor.beginTask("Creating " + projectName, 2 * 1000); description = ResourcesPlugin.getWorkspace() .loadProjectDescription( new Path(directory + File.separatorChar + ".project")); //$NON-NLS-1$ description.setName(projectName); project.create(description, new SubProgressMonitor(monitor, 1000)); project.open(new SubProgressMonitor(monitor, 1000)); } finally { monitor.done(); } } } }SVNProviderPlugin.java000066400000000000000000000533451203611042400405540ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import java.io.File; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtensionRegistry; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.ISafeRunnable; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Plugin; import org.eclipse.core.runtime.SafeRunner; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; import org.eclipse.team.internal.core.subscribers.ActiveChangeSetManager; import org.osgi.framework.BundleContext; import org.tigris.subversion.subclipse.core.client.IConsoleListener; import org.tigris.subversion.subclipse.core.mapping.SVNActiveChangeSetCollector; import org.tigris.subversion.subclipse.core.repo.SVNRepositories; import org.tigris.subversion.subclipse.core.resources.ISVNFileModificationValidatorPrompt; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.RepositoryResourcesManager; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.core.resourcesListeners.FileModificationManager; import org.tigris.subversion.subclipse.core.resourcesListeners.RevertResourceManager; import org.tigris.subversion.subclipse.core.resourcesListeners.SyncFileChangeListener; import org.tigris.subversion.subclipse.core.resourcesListeners.TeamPrivateListener; import org.tigris.subversion.subclipse.core.status.StatusCacheManager; import org.tigris.subversion.subclipse.core.sync.SVNWorkspaceSubscriber; import org.tigris.subversion.subclipse.core.util.ISimpleDialogsHelper; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNPromptUserPassword; /** * The plugin itself */ public class SVNProviderPlugin extends Plugin { // svn plugin id public static final String ID = "org.tigris.subversion.subclipse.core"; //$NON-NLS-1$ public static final String PROVIDER_ID="org.tigris.subversion.subclipse.core.svnnature"; //$NON-NLS-1$ public static final String SVN_PROPERTY_TYPES_EXTENSION = "svnPropertyTypes"; public static final String SVN_PROPERTY_GROUPS_EXTENSION = "svnPropertyGroups"; // all projects shared with subversion will have this nature private static final String NATURE_ID = ID + ".svnnature"; //$NON-NLS-1$ // the plugin instance. @see getPlugin() private static volatile SVNProviderPlugin instance; public static final String MESSAGE_HANDLERS = "org.tigris.subversion.subclipse.core.messageHandlers"; //$NON-NLS-1$ private static IMessageHandler[] messageHandlers; // the console listener private IConsoleListener consoleListener; // SVN specific resource delta listeners private FileModificationManager fileModificationManager; private SyncFileChangeListener metaFileSyncListener; private TeamPrivateListener teamPrivateListener; // the list of all repositories currently handled by this provider private SVNRepositories repositories; private StatusCacheManager statusCacheManager; private RepositoryResourcesManager repositoryResourcesManager = new RepositoryResourcesManager(); private SVNClientManager svnClientManager; private SVNAdapterFactories adapterFactories; private ISVNPromptUserPassword svnPromptUserPassword; private ISimpleDialogsHelper simpleDialogsHelper; private ISVNFileModificationValidatorPrompt svnFileModificationValidatorPrompt; private SVNActiveChangeSetCollector changeSetManager; private RevertResourceManager revertManager; private static boolean consoleLoggingEnabled = true; public final static String UPGRADE_NEEDED = "working copy needs to be upgraded"; /** * This constructor required by the bundle loader (calls newInstance()) * */ public SVNProviderPlugin() { super(); instance = this; } /** * Log the given exception along with the provided message and severity indicator */ public static void log(int severity, String message, Throwable e) { log(new Status(severity, ID, 0, message, e)); } /** * Convenience method for logging SVNExceptions to the plugin log */ public static void log(TeamException e) { // For now, we'll log the status. However we should do more log(e.getStatus()); } public static void log(IStatus status) { // For now, we'll log the status. However we should do more getPlugin().getLog().log(status); } public static void handleMessage(String title, String message, int severity) { for (IMessageHandler messageHandler : messageHandlers) { messageHandler.handleMessage(title, message, severity); } } public static boolean handleQuestion(String title, String question) { return messageHandlers[0].handleQuestion(title, question); } /** * Returns the singleton plug-in instance. * * @return the plugin instance */ public static SVNProviderPlugin getPlugin() { return instance; } public void start(BundleContext ctxt) throws Exception { super.start(ctxt); messageHandlers = getMessageHandlers(); // register all the adapter factories adapterFactories = new SVNAdapterFactories(); adapterFactories.startup(null); statusCacheManager = new StatusCacheManager(); getPluginPreferences().addPropertyChangeListener(statusCacheManager); // Initialize SVN change listeners. Note tha the report type is important. IWorkspace workspace = ResourcesPlugin.getWorkspace(); // this listener will listen to additions of svn meta directories teamPrivateListener = new TeamPrivateListener(); // this listener will listen to modifications to files fileModificationManager = new FileModificationManager(); getPluginPreferences().addPropertyChangeListener(fileModificationManager); // this listener will listen to modification to metafiles (files in .svn // subdir) metaFileSyncListener = new SyncFileChangeListener(); revertManager = new RevertResourceManager(); workspace.addResourceChangeListener(teamPrivateListener, IResourceChangeEvent.POST_CHANGE); workspace.addResourceChangeListener(statusCacheManager, IResourceChangeEvent.PRE_BUILD); workspace.addResourceChangeListener(metaFileSyncListener, IResourceChangeEvent.PRE_BUILD); workspace.addResourceChangeListener(fileModificationManager, IResourceChangeEvent.POST_CHANGE); workspace.addResourceChangeListener(revertManager, IResourceChangeEvent.PRE_BUILD); teamPrivateListener.registerSaveParticipant(); fileModificationManager.registerSaveParticipant(); // Must load the change set manager on startup since it listens to deltas getChangeSetManager(); } /** * @see Plugin#stop(BundleContext ctxt) */ public void stop(BundleContext ctxt) throws Exception { super.stop(ctxt); // remove listeners IWorkspace workspace = ResourcesPlugin.getWorkspace(); workspace.removeResourceChangeListener(statusCacheManager); workspace.removeResourceChangeListener(metaFileSyncListener); workspace.removeResourceChangeListener(fileModificationManager); workspace.removeResourceChangeListener(teamPrivateListener); workspace.removeResourceChangeListener(revertManager); // save the state which includes the known repositories if (repositories != null) { repositories.shutdown(); } adapterFactories.shutdown(null); getPluginPreferences().removePropertyChangeListener(statusCacheManager); // save the plugin preferences savePluginPreferences(); // remove all of this plugin's save participants. This is easier than // having // each class that added itself as a participant to have to listen to // shutdown. workspace.removeSaveParticipant(this); if (svnClientManager != null) svnClientManager.shutdown(null); getChangeSetManager().dispose(); } private static List listeners = new ArrayList(); public static IMessageHandler[] getMessageHandlers() throws Exception { if (messageHandlers == null) { ArrayList messageHandlerList = new ArrayList(); IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry(); IConfigurationElement[] configurationElements = extensionRegistry.getConfigurationElementsFor(MESSAGE_HANDLERS); for (int i = 0; i < configurationElements.length; i++) { IConfigurationElement configurationElement = configurationElements[i]; IMessageHandler messageHandler = (IMessageHandler)configurationElement.createExecutableExtension("class"); //$NON-NLS-1$ messageHandlerList.add(messageHandler); } messageHandlers = new IMessageHandler[messageHandlerList.size()]; messageHandlerList.toArray(messageHandlers); } return messageHandlers; } /* * @see ITeamManager#addResourceStateChangeListener(IResourceStateChangeListener) */ public static void addResourceStateChangeListener( IResourceStateChangeListener listener) { synchronized(listeners) { listeners.add(listener); } } /* * @see ITeamManager#removeResourceStateChangeListener(IResourceStateChangeListener) */ public static void removeResourceStateChangeListener( IResourceStateChangeListener listener) { synchronized(listeners) { listeners.remove(listener); } } /** * This method is called by SyncFileChangeListener when metafiles have * changed */ public static void broadcastSyncInfoChanges(final IResource[] resources, final boolean initializeListeners) { IResourceStateChangeListener[] toNotify; synchronized(listeners) { toNotify = (IResourceStateChangeListener[])listeners.toArray(new IResourceStateChangeListener[listeners.size()]); } for (int i = 0; i < toNotify.length; ++i) { final IResourceStateChangeListener listener = toNotify[i]; ISafeRunnable code = new ISafeRunnable() { public void run() throws Exception { if (initializeListeners) listener.initialize(); listener.resourceSyncInfoChanged(resources); } public void handleException(Throwable e) { // don't log the exception....it is already being logged in // Platform#run } }; SafeRunner.run(code); } } // public static void broadcastDecoratorEnablementChanged(final boolean // enabled) { // for(Iterator it=decoratorEnablementListeners.iterator(); it.hasNext();) { // final ICVSDecoratorEnablementListener listener = // (ICVSDecoratorEnablementListener)it.next(); // ISafeRunnable code = new ISafeRunnable() { // public void run() throws Exception { // listener.decoratorEnablementChanged(enabled); // } // public void handleException(Throwable e) { // // don't log the exception....it is already being logged in Platform#run // } // }; // Platform.run(code); // } // } // /** * This method is called by FileModificationManager when some resources have * changed */ public static void broadcastModificationStateChanges( final IResource[] resources) { IResourceStateChangeListener[] toNotify; synchronized(listeners) { toNotify = (IResourceStateChangeListener[])listeners.toArray(new IResourceStateChangeListener[listeners.size()]); } for (int i = 0; i < toNotify.length; ++i) { final IResourceStateChangeListener listener = toNotify[i]; ISafeRunnable code = new ISafeRunnable() { public void run() throws Exception { listener.resourceModified(resources); } public void handleException(Throwable e) { // don't log the exception....it is already being logged in // Platform#run } }; SafeRunner.run(code); } } /** * This method is called by SVNTeamProvider.configureProject which is * invoked when a project is mapped */ protected static void broadcastProjectConfigured(final IProject project) { IResourceStateChangeListener[] toNotify; synchronized(listeners) { toNotify = (IResourceStateChangeListener[])listeners.toArray(new IResourceStateChangeListener[listeners.size()]); } for (int i = 0; i < toNotify.length; ++i) { final IResourceStateChangeListener listener = toNotify[i]; ISafeRunnable code = new ISafeRunnable() { public void run() throws Exception { listener.projectConfigured(project); } public void handleException(Throwable e) { // don't log the exception....it is already being logged in // Platform#run } }; SafeRunner.run(code); } } /** * This method is called by SVNTeamProvider.deconfigured which is invoked * after a provider has been unmaped */ protected static void broadcastProjectDeconfigured(final IProject project) { IResourceStateChangeListener[] toNotify; synchronized(listeners) { toNotify = (IResourceStateChangeListener[])listeners.toArray(new IResourceStateChangeListener[listeners.size()]); } for (int i = 0; i < toNotify.length; ++i) { final IResourceStateChangeListener listener = toNotify[i]; ISafeRunnable code = new ISafeRunnable() { public void run() throws Exception { listener.projectDeconfigured(project); } public void handleException(Throwable e) { // don't log the exception....it is already being logged in // Platform#run } }; SafeRunner.run(code); } } /** * Register to receive notification of enablement of sync info decoration * requirements. This can be useful for providing lazy initialization of * caches that are only required for decorating resource with CVS * information. */ /* * public void * addDecoratorEnablementListener(ISVNDecoratorEnablementListener listener) { * decoratorEnablementListeners.add(listener); } */ /** * De-register the decorator enablement listener. */ /* * public void * removeDecoratorEnablementListener(ICVSDecoratorEnablementListener * listener) { decoratorEnablementListeners.remove(listener); } */ /** * get the repository corresponding to the location location is an url */ public ISVNRepositoryLocation getRepository(String location) throws SVNException { return getRepositories().getRepository(location); } /** * get all the known repositories */ public SVNRepositories getRepositories() { if (repositories == null) { // load the state which includes the known repositories repositories = new SVNRepositories(); repositories.startup(); } return repositories; } /** * get the resource status cache */ public StatusCacheManager getStatusCacheManager() { return statusCacheManager; } public SVNClientManager getSVNClientManager() { if (svnClientManager == null) { svnClientManager = new SVNClientManager(); try { svnClientManager.startup(null); } catch (CoreException e) { } } return svnClientManager; } public ISVNClientAdapter getSVNClient() throws SVNException { return getSVNClientManager().getSVNClient(); } /** * Set the console listener for commands. * * @param consoleListener * the listener */ public void setConsoleListener(IConsoleListener consoleListener) { this.consoleListener = consoleListener; } /** * Get the console listener for commands. * * @return the consoleListener, or null */ public IConsoleListener getConsoleListener() { if (consoleLoggingEnabled) return consoleListener; else return null; } /** * Answers the repository provider type id for the svn plugin */ public static String getTypeId() { return NATURE_ID; } /** * Same as IWorkspace.run but uses a ISVNRunnable */ public static void run(final ISVNRunnable job, IProgressMonitor monitor) throws SVNException { final SVNException[] error = new SVNException[1]; try { ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() { public void run(IProgressMonitor monitor) { try { monitor = Policy.monitorFor(monitor); try { job.run(monitor); } finally { monitor.done(); } } catch (SVNException e) { error[0] = e; } } }, monitor); } catch (CoreException e) { throw SVNException.wrapException(e); } if (error[0] != null) { throw error[0]; } } /** * Same as IWorkspace.run but uses a ISVNRunnable */ public static void run(final ISVNRunnable job, ISchedulingRule rule, IProgressMonitor monitor) throws SVNException { final SVNException[] error = new SVNException[1]; try { ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() { public void run(IProgressMonitor monitor) { try { monitor = Policy.monitorFor(monitor); try { job.run(monitor); } finally { monitor.done(); } } catch (SVNException e) { error[0] = e; } } }, rule, IWorkspace.AVOID_UPDATE, monitor); } catch (CoreException e) { throw SVNException.wrapException(e); } if (error[0] != null) { throw error[0]; } } /** * @return the repository resources Manager */ public RepositoryResourcesManager getRepositoryResourcesManager() { return repositoryResourcesManager; } public ISVNPromptUserPassword getSvnPromptUserPassword() { return svnPromptUserPassword; } public void setSvnPromptUserPassword( ISVNPromptUserPassword svnPromptUserPassword) { this.svnPromptUserPassword = svnPromptUserPassword; } public ISimpleDialogsHelper getSimpleDialogsHelper() { return simpleDialogsHelper; } public void setSimpleDialogsHelper(ISimpleDialogsHelper simpleDialogsHelper) { this.simpleDialogsHelper = simpleDialogsHelper; } public ISVNFileModificationValidatorPrompt getSvnFileModificationValidatorPrompt() { return svnFileModificationValidatorPrompt; } public void setSvnFileModificationValidatorPrompt( ISVNFileModificationValidatorPrompt svnFileModificationValidatorPrompt) { this.svnFileModificationValidatorPrompt = svnFileModificationValidatorPrompt; } public String getAdminDirectoryName() { return this.getSVNClientManager().getSvnAdminDirectory(); } /** * @return true if the container is managed by SVN */ public boolean isManagedBySubversion(IContainer container) { if (container instanceof IProject) { if (RepositoryProvider.getProvider((IProject)container, getTypeId()) != null) return true; // svn handled project // Don't return at this point, since the project may not be registered // yet with Team. } return isManagedBySubversion(container.getLocation()); } /** * @return true if the container is managed by SVN */ public boolean isManagedBySubversion(IPath folder) { File svnDir = folder.append(getAdminDirectoryName()).toFile(); if (svnDir == null || !svnDir.exists() || !svnDir.isDirectory()) return false; try { LocalResourceStatus status = SVNWorkspaceRoot.peekResourceStatusFor(folder); if (status.hasRemote()) return true; } catch (SVNException e) { if (e.getMessage() != null && e.getMessage().contains(UPGRADE_NEEDED)) { return true; } } return false; } /** * Return the SVN preferences node in the instance scope */ public org.osgi.service.prefs.Preferences getInstancePreferences() { return new InstanceScope().getNode(getBundle().getSymbolicName()); } public boolean isAdminDirectory(String name) { if (".svn".equals(name) || getAdminDirectoryName().equals(name)) return true; else return false; // Calling the adapter method here potentially lead to a thread problem // that would make native JavaHL crash. So I am recreating the logic // internally. This method is likely to be a lot faster so it is worth it. // try { // return createSVNClient().isAdminDirectory(name); // } catch (SVNException e) { // return getAdminDirectoryName().equals(name); // } } public synchronized ActiveChangeSetManager getChangeSetManager() { if (changeSetManager == null) { changeSetManager = new SVNActiveChangeSetCollector(SVNWorkspaceSubscriber.getInstance()); } return changeSetManager; } /** * Turn on console logging. It should always * be on and just turned off temporarily when needed. Usually * this is when running a command that you expect to fail, such * as checking if something exists, and you do not want to bug * the user with expected errors. */ public static void enableConsoleLogging() { consoleLoggingEnabled = true; } /** * Turn off all console logging * You MUST re-enable logging when you are done */ public static void disableConsoleLogging() { consoleLoggingEnabled = false; } } SVNStatus.java000066400000000000000000000032221203611042400370530ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import org.eclipse.core.runtime.Status; /* * A status object represents the outcome of an operation. * All CoreExceptions carry a status object to indicate * what went wrong. Status objects are also returned by methods needing * to provide details of failures (e.g., validation methods). */ public class SVNStatus extends Status { /*** Status codes ***/ public static final int SERVER_ERROR = -10; public static final int CONFLICT = -12; public static final int DOES_NOT_EXIST = -17; public SVNStatus(int severity, int code, String message, Throwable t) { super(severity, SVNProviderPlugin.ID, code, message, t); } public SVNStatus(int severity, int code, String message) { this(severity, code, message, null); } public SVNStatus(int severity, String message, Throwable t) { this(severity, message); } public SVNStatus(int severity, String message) { this(severity, severity, message, null); } /** * @see IStatus#getMessage() */ public String getMessage() { String message = super.getMessage(); return message; } } SVNTeamProvider.java000066400000000000000000000177611203611042400402060ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFileModificationValidator; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectNature; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceRuleFactory; import org.eclipse.core.resources.IResourceVisitor; import org.eclipse.core.resources.team.IMoveDeleteHook; import org.eclipse.core.resources.team.ResourceRuleFactory; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; import org.eclipse.team.core.variants.IResourceVariant; import org.tigris.subversion.subclipse.core.commands.AddResourcesCommand; import org.tigris.subversion.subclipse.core.commands.CheckinResourcesCommand; import org.tigris.subversion.subclipse.core.commands.SwitchToUrlCommand; import org.tigris.subversion.subclipse.core.resources.RemoteFile; import org.tigris.subversion.subclipse.core.resources.RemoteFolder; import org.tigris.subversion.subclipse.core.resources.SVNFileModificationValidator; import org.tigris.subversion.subclipse.core.resources.SVNMoveDeleteHook; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * This class is responsible for configuring a project for repository management * and providing the necessary hooks for resource modification * This class is created for each project that is associated with a repository provider */ public class SVNTeamProvider extends RepositoryProvider { private SVNWorkspaceRoot workspaceRoot; /** * Scheduling rule to use when modifying resources. * ResourceRuleFactory only locks the file or its parent if read-only */ private static final ResourceRuleFactory RESOURCE_RULE_FACTORY = new ResourceRuleFactory() {}; /** * No-arg Constructor for IProjectNature conformance */ public SVNTeamProvider() { } /** * @see IProjectNature#deconfigure() */ public void deconfigure() { } /** * @see RepositoryProvider#deconfigured() */ public void deconfigured() { try { // when a nature is removed from the project, notify the synchronizer that // we no longer need the sync info cached. This does not affect the actual SVN // meta directories on disk, and will remain unless a client calls unmanage(). SVNProviderPlugin.getPlugin().getStatusCacheManager().purgeCache(getProject(), true); } catch (SVNException e) { SVNProviderPlugin.log(e); } SVNProviderPlugin.broadcastProjectDeconfigured(getProject()); } private void configureTeamPrivateResource(IProject project) { try { project.accept( new IResourceVisitor() { public boolean visit(IResource resource) throws CoreException { if ((resource.getType() == IResource.FOLDER) && (resource.getName().equals(SVNProviderPlugin.getPlugin().getAdminDirectoryName())) && (!resource.isTeamPrivateMember())) { resource.setTeamPrivateMember(true); return false; } else { return true; } } }, IResource.DEPTH_INFINITE, IContainer.INCLUDE_PHANTOMS | IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS); } catch (CoreException e) { SVNProviderPlugin.log(SVNException.wrapException(e)); } } /** * @see IProjectNature#setProject(IProject) */ public void setProject(IProject project) { super.setProject(project); this.workspaceRoot = new SVNWorkspaceRoot(project); } /** * Add the given resources to the project. *

* The sematics follow that of SVN in the sense that any folders and files * are created remotely on the next commit. *

*/ public void add(IResource[] resources, int depth, IProgressMonitor progress) throws SVNException { AddResourcesCommand command = new AddResourcesCommand(getSVNWorkspaceRoot(), resources, depth); command.run(progress); } /** * Checkin any local changes to given resources * * @param resources resources to commit. * @param comment log message. * @param keepLocks whether to keep to locks * @param depth IResource.DEPTH_INFINITE if the commit should be recursive, anything else if otherwise * @param progress progressMonitor or null * @exception TeamException */ public String checkin(IResource[] resources, final String comment, boolean keepLocks, final int depth, IProgressMonitor progress) throws TeamException { CheckinResourcesCommand command = new CheckinResourcesCommand(getSVNWorkspaceRoot(), resources, depth, comment, keepLocks); command.run(progress); return command.getPostCommitError(); } /** * Switch URL for selected resource * */ public void switchToUrl(IResource resource, final SVNUrl svnUrl, final SVNRevision svnRevision, IProgressMonitor progress) throws TeamException { SwitchToUrlCommand command = new SwitchToUrlCommand(getSVNWorkspaceRoot(), resource, svnUrl, svnRevision); command.run(progress); } public SVNWorkspaceRoot getSVNWorkspaceRoot() { return workspaceRoot; } public void configureProject() { configureTeamPrivateResource(getProject()); SVNProviderPlugin.broadcastProjectConfigured(getProject()); } /* * @see RepositoryProvider#getID() */ public String getID() { return SVNProviderPlugin.getTypeId(); } /* * (non-Javadoc) * @see org.eclipse.team.core.RepositoryProvider#getMoveDeleteHook() */ public IMoveDeleteHook getMoveDeleteHook() { return new SVNMoveDeleteHook(); } public IFileModificationValidator getFileModificationValidator() { return new SVNFileModificationValidator(); } public IResourceVariant getResourceVariant(IResource resource) throws SVNException{ ISVNLocalResource local = SVNWorkspaceRoot.getSVNResourceFor(resource); return local.getLatestRemoteResource(); } /** * Create the resource variant for the given local resource from the * given bytes. The bytes are those that were previously returned * from a call to IResourceVariant#asBytes(). This means it's already been fetched, * so we should be able to create enough nfo about it to rebuild it to a minimally useable form for * synchronization. * @param resource the local resource * @param bytes the bytes that identify a variant of the resource * @return the resouce variant handle recreated from the bytes */ public IResourceVariant getResourceVariant(IResource resource, byte[] bytes) { //in this case, asBytes() will return the revision string, so we create //the variant resource with this minimal info. if(bytes==null)return null; if(resource.getType()==IResource.FILE){ return new RemoteFile(resource, bytes); }else if(resource.getType()==IResource.FOLDER || resource.getType()==IResource.PROJECT){ return new RemoteFolder(resource, bytes); }else{ return null; } } /* (non-Javadoc) * @see org.eclipse.team.core.RepositoryProvider#getRuleFactory() */ public IResourceRuleFactory getRuleFactory() { return RESOURCE_RULE_FACTORY; } /* (non-Javadoc) * @see org.eclipse.team.core.RepositoryProvider#canHandleLinkedResources() */ public boolean canHandleLinkedResources() { return true; } public boolean canHandleLinkedResourceURI() { return true; } } SVNTeamProviderType.java000066400000000000000000000302161203611042400410360ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core; import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.JobChangeAdapter; import org.eclipse.team.core.ProjectSetCapability; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.RepositoryProviderType; import org.eclipse.team.core.TeamException; import org.eclipse.team.core.subscribers.Subscriber; import org.tigris.subversion.subclipse.core.client.PeekStatusCommand; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.core.sync.SVNWorkspaceSubscriber; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; /** * This class represents the SVN Provider's capabilities in the absence of a * particular project. */ public class SVNTeamProviderType extends RepositoryProviderType { protected static AutoShareJob autoShareJob; public static class AutoShareJob extends Job { List projectsToShare = new ArrayList(); AutoShareJob() { super("Auto-sharing imported subversion projects"); } public boolean isQueueEmpty() { return projectsToShare.isEmpty(); } /* (non-Javadoc) * @see org.eclipse.core.runtime.jobs.Job#shouldSchedule() */ public boolean shouldSchedule() { return !isQueueEmpty(); } /* (non-Javadoc) * @see org.eclipse.core.runtime.jobs.Job#shouldRun() */ public boolean shouldRun() { synchronized (projectsToShare) { for (Iterator iter = projectsToShare.iterator(); iter.hasNext();) { IProject project = iter.next(); if (RepositoryProvider.isShared(project)) { iter.remove(); } } return !projectsToShare.isEmpty(); } } public void share(IProject project) { if (!RepositoryProvider.isShared(project)) { synchronized (projectsToShare) { if (!projectsToShare.contains(project)) { SVNWorkspaceRoot.setManagedBySubclipse(project); projectsToShare.add(project); } } if(getState() == Job.NONE && !isQueueEmpty()) schedule(); } } /* (non-Javadoc) * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor) */ protected IStatus run(IProgressMonitor monitor) { IProject next = null; next = getNextProject(); monitor.beginTask(null, IProgressMonitor.UNKNOWN); while (next != null) { autoconnectSVNProject(next, Policy.subMonitorFor(monitor, IProgressMonitor.UNKNOWN)); next = getNextProject(); } monitor.done(); return Status.OK_STATUS; } private IProject getNextProject() { IProject next = null; synchronized (projectsToShare) { if (!projectsToShare.isEmpty()) { next = (IProject)projectsToShare.remove(0); } } return next; } /* * Auto-connect to the repository using .svn/ directories */ private void autoconnectSVNProject(IProject project, IProgressMonitor monitor) { try { PeekStatusCommand command = new PeekStatusCommand(project); try { command.execute(); } catch (SVNException e1) { if (e1.getMessage() != null && e1.getMessage().contains(SVNProviderPlugin.UPGRADE_NEEDED)) { if (!SVNProviderPlugin.handleQuestion("Upgrade Working Copy", project.getName() + " appears to be managed by Subversion, but the working copy needs to be upgraded. Do you want to upgrade the working copy now?\n\nWarning: This operation cannot be undone.")) { return; } } SVNWorkspaceRoot.upgradeWorkingCopy(project, monitor); } SVNWorkspaceRoot.setSharing(project, monitor); } catch (TeamException e) { SVNProviderPlugin.log(IStatus.ERROR, "Could not auto-share project " + project.getName(), e); //$NON-NLS-1$ } } } public synchronized static AutoShareJob getAutoShareJob() { if (autoShareJob == null) { autoShareJob = new AutoShareJob(); autoShareJob.addJobChangeListener(new JobChangeAdapter() { public void done(IJobChangeEvent event) { // Reschedule the job if it has unprocessed projects if (!autoShareJob.isQueueEmpty()) { autoShareJob.schedule(); } } }); autoShareJob.setSystem(true); autoShareJob.setPriority(Job.SHORT); // Must run with the workspace rule to ensure that projects added while we're running // can be shared autoShareJob.setRule(ResourcesPlugin.getWorkspace().getRoot()); } return autoShareJob; } /** * @see org.eclipse.team.core.RepositoryProviderType#supportsProjectSetImportRelocation() */ public boolean supportsProjectSetImportRelocation() { return false; } /* (non-Javadoc) * @see org.eclipse.team.core.RepositoryProviderType#getProjectSetCapability() */ public ProjectSetCapability getProjectSetCapability() { return new SVNProjectSetCapability(); } public static class AutoAddJob extends Job { final static int MAX_RETRIES = 10; int reschedCount = 0; final IProject project; protected AutoAddJob(IProject project){ super("Auto-adding newly created project to subversion: " + project.getName()); //$NON-NLS-1$ this.project = project; } /* (non-Javadoc) * @see org.eclipse.core.runtime.jobs.Job#run(org.eclipse.core.runtime.IProgressMonitor) */ protected IStatus run(IProgressMonitor monitor) { monitor.beginTask(null, IProgressMonitor.UNKNOWN); SVNProviderPlugin plugin = SVNProviderPlugin.getPlugin(); SVNClientManager svnClientManager = plugin.getSVNClientManager(); ISVNClientAdapter client = null; try{ if (plugin == null || plugin.getSimpleDialogsHelper() == null){ if (++reschedCount > MAX_RETRIES){ String errorString = "Subclipse core and/or ui didn't come up in " + MAX_RETRIES + " retries, failing."; //$NON-NLS-1$ System.err.println(errorString); // Let it be visible to the user throw new SVNException(errorString); } schedule(1000); return Status.OK_STATUS; } if (!plugin.getSimpleDialogsHelper().promptYesNo( "Auto-add "+project.getName()+" to source control", //$NON-NLS-1$ "The new project \""+ project.getName() +"\" was created in a subversion " + //$NON-NLS-1$ "controlled directory.\n\n" + //$NON-NLS-1$ "Would you like to automatically add it to source control?", true)) { //$NON-NLS-1$ return Status.OK_STATUS; } client = svnClientManager.getSVNClient(); File file = project.getLocation().toFile(); client.addDirectory(file, false); RepositoryProvider.map(project, SVNProviderPlugin.getTypeId()); plugin.getStatusCacheManager().refreshStatus(project, true); }catch(Exception e){ SVNProviderPlugin.log(IStatus.ERROR, "Could not auto-add project " + project.getName(), e); //$NON-NLS-1$ return Status.CANCEL_STATUS; }finally{ monitor.done(); svnClientManager.returnSVNClient(client); } return Status.OK_STATUS; } } /** * Create and schedule an auto-add job */ private static synchronized void createAutoAddJob(IProject project) { Job j = new AutoAddJob(project); j.setSystem(true); j.setPriority(Job.SHORT); j.setRule(ResourcesPlugin.getWorkspace().getRoot()); j.schedule(); } /* (non-Javadoc) * @see org.eclipse.team.core.RepositoryProviderType#metaFilesDetected(org.eclipse.core.resources.IProject, org.eclipse.core.resources.IContainer[]) */ public void metaFilesDetected(IProject project, IContainer[] containers) { SVNProviderPlugin plugin = SVNProviderPlugin.getPlugin(); boolean isProject = false; boolean isSvnProject = plugin.isManagedBySubversion(project); for (int i = 0; i < containers.length; i++) { IContainer container = containers[i]; IContainer svnDir = null; if (!isProject && container.getType() == IResource.PROJECT) isProject = true; if (plugin.isAdminDirectory(container.getName())) { //$NON-NLS-1$ svnDir = container; } else { IResource resource = container.findMember(plugin.getAdminDirectoryName()); //$NON-NLS-1$ if (resource != null && resource.getType() != IResource.FILE) { svnDir = (IContainer)resource; } } try { if (svnDir != null && !svnDir.isTeamPrivateMember()) { if (!isSvnProject) { if (plugin.isManagedBySubversion(svnDir.getParent())) svnDir.setTeamPrivateMember(true); } else { svnDir.setTeamPrivateMember(true); } } } catch (CoreException e) { SVNProviderPlugin.log(IStatus.ERROR, "Could not flag meta-files as team-private for " + svnDir.getFullPath(), e); //$NON-NLS-1$ } } if (!isProject) return; // Nothing more to do, all remaining operations are on projects // Examine whether this project is a nested project. If yes, we don't // share it automatically. if (!SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_SHARE_NESTED_PROJECTS) && isNestedProject(project)) { return; } if (isSvnProject) { // It's a project and has toplevel .svn directory, lets share it! getAutoShareJob().share(project); } else { // It's a project and doesn't have .svn dir, let's see if we can add it! IPath parentDir = project.getLocation().append("../"); //$NON-NLS-1$ if (plugin.isManagedBySubversion(parentDir)) { createAutoAddJob(project); } } } /* (non-Javadoc) * @see org.eclipse.team.core.RepositoryProviderType#getSubscriber() */ public Subscriber getSubscriber() { return SVNWorkspaceSubscriber.getInstance(); } private boolean isNestedProject(IProject testProject) { IPath testProjectLocation = testProject.getLocation(); IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); for (int i = 0; i < projects.length; i++) { IProject project = projects[i]; if (project.equals(testProject)) continue; IPath projectLocation = project.getLocation(); if ((projectLocation != null) && projectLocation.isPrefixOf(testProjectLocation)) return true; } return false; } } 000077500000000000000000000000001203611042400356155ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/clientIConsoleListener.java000066400000000000000000000015271203611042400417060ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/client/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.client; import org.tigris.subversion.svnclientadapter.ISVNNotifyListener; /** * For now this interface is exactly ISVNNotifyListener but we can add new methods * in the future * */ public interface IConsoleListener extends ISVNNotifyListener { } ISVNNotifyAdapter.java000066400000000000000000000036771203611042400417460ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/client/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.client; import java.io.File; import org.tigris.subversion.svnclientadapter.SVNNodeKind; public class ISVNNotifyAdapter implements IConsoleListener { /* (non-Javadoc) * @see org.tigris.subversion.svnclientadapter.ISVNNotifyListener#setCommand(int) */ public void setCommand(int command) { } /* (non-Javadoc) * @see org.tigris.subversion.svnclientadapter.ISVNNotifyListener#logCommandLine(java.lang.String) */ public void logCommandLine(String commandLine) { } /* (non-Javadoc) * @see org.tigris.subversion.svnclientadapter.ISVNNotifyListener#logMessage(java.lang.String) */ public void logMessage(String message) { } /* (non-Javadoc) * @see org.tigris.subversion.svnclientadapter.ISVNNotifyListener#logError(java.lang.String) */ public void logError(String message) { } /* (non-Javadoc) * @see org.tigris.subversion.svnclientadapter.ISVNNotifyListener#logRevision(long, java.lang.String) */ public void logRevision(long revision, String path) { } /* (non-Javadoc) * @see org.tigris.subversion.svnclientadapter.ISVNNotifyListener#logCompleted(java.lang.String) */ public void logCompleted(String message) { } /* (non-Javadoc) * @see org.tigris.subversion.svnclientadapter.ISVNNotifyListener#onNotify(java.io.File, org.tigris.subversion.svnclientadapter.SVNNodeKind) */ public void onNotify(File path, SVNNodeKind kind) { } } NotificationListener.java000066400000000000000000000064731203611042400426260ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/client/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.client; import java.io.*; import org.tigris.subversion.subclipse.core.*; import org.tigris.subversion.svnclientadapter.*; /** * This class listen to notifications from svnClientAdapter and redirect them to the console listener */ public class NotificationListener implements ISVNNotifyListener { private static NotificationListener instance; /* * private contructor */ private NotificationListener() { } private IConsoleListener getConsoleListener() { return SVNProviderPlugin.getPlugin().getConsoleListener(); } /** * Returns the singleton instance */ public static NotificationListener getInstance() { if(instance==null) { instance = new NotificationListener(); } return instance; } /* (non-Javadoc) * @see org.tigris.subversion.svnclientadapter.ISVNNotifyListener#logCommandLine(java.lang.String) */ public void logCommandLine(String commandLine) { IConsoleListener consoleListener = getConsoleListener(); if (consoleListener != null) { consoleListener.logCommandLine(commandLine); } } public void logRevision(long revision, String path) { } /* (non-Javadoc) * @see org.tigris.subversion.svnclientadapter.ISVNNotifyListener#logCompleted(java.lang.String) */ public void logCompleted(String message) { IConsoleListener consoleListener = getConsoleListener(); if (consoleListener != null) { consoleListener.logCompleted(message); } } /* (non-Javadoc) * @see org.tigris.subversion.svnclientadapter.ISVNNotifyListener#logError(java.lang.String) */ public void logError(String message) { IConsoleListener consoleListener = getConsoleListener(); if (consoleListener != null) { consoleListener.logError(message); } } /* (non-Javadoc) * @see org.tigris.subversion.svnclientadapter.ISVNNotifyListener#logMessage(java.lang.String) */ public void logMessage(String message) { IConsoleListener consoleListener = getConsoleListener(); if (consoleListener != null) { consoleListener.logMessage(message); } } /* (non-Javadoc) * @see org.tigris.subversion.svnclientadapter.ISVNNotifyListener#onNotify(java.lang.String, org.tigris.subversion.svnclientadapter.SVNNodeKind) */ public void onNotify(File path, SVNNodeKind kind) { IConsoleListener consoleListener = getConsoleListener(); if (consoleListener != null) { consoleListener.onNotify(path,kind); } } /* (non-Javadoc) * @see org.tigris.subversion.svnclientadapter.ISVNNotifyListener#setCommand(int) */ public void setCommand(int command) { IConsoleListener consoleListener = getConsoleListener(); if (consoleListener != null) { consoleListener.setCommand(command); } } } OperationManager.java000066400000000000000000000140361203611042400417170ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/client/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.client; import java.io.File; import java.util.LinkedHashSet; import java.util.Set; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.core.util.FilteringContainerList; import org.tigris.subversion.subclipse.core.util.ReentrantLock; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNNotifyListener; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNNodeKind; /** * This class manages svn operations. beginOperation must be called before a * batch of svn operations and endOperation after * * All changed .svn directories are refreshed using resource.refreshLocal * SyncFileChangeListener will then find that some meta files have changed and * will refresh the corresponding resources. */ public class OperationManager implements ISVNNotifyListener { // track resources that have changed in a given operation private ReentrantLock lock = new ReentrantLock(); // private Set changedResources = new LinkedHashSet(); private Set localRefreshList = new LinkedHashSet(); private ISVNClientAdapter svnClient = null; private OperationProgressNotifyListener operationNotifyListener = null; private static OperationManager instance; /* * private contructor */ private OperationManager() { } /** * Returns the singleton instance of the synchronizer. */ public static OperationManager getInstance() { if (instance == null) { instance = new OperationManager(); } return instance; } /** * Begins a batch of operations. */ public void beginOperation(ISVNClientAdapter aSvnClient) { lock.acquire(); this.svnClient = aSvnClient; aSvnClient.addNotifyListener(this); if (operationNotifyListener != null) { aSvnClient.setProgressListener(operationNotifyListener); } } /** * Begins a batch of operations. * Forward notifications to messageNotifyListener */ public void beginOperation(ISVNClientAdapter aSvnClient, OperationProgressNotifyListener anOperationNotifyListener) { this.operationNotifyListener = anOperationNotifyListener; beginOperation(aSvnClient); } public void endOperation(boolean refresh) throws SVNException { endOperation(refresh, null); } public void endOperation() throws SVNException { endOperation(true, null); } public void endOperation(boolean refresh, Set refreshResourceList) throws SVNException { endOperation(refresh, refreshResourceList, true); } /** * Ends a batch of operations. Pending changes are committed only when the * number of calls to endOperation() balances those to beginOperation(). */ public void endOperation(boolean refresh, Set refreshResourceList, boolean refreshLocal) throws SVNException { try { if (lock.getNestingCount() == 1) { svnClient.removeNotifyListener(this); if (operationNotifyListener != null) { operationNotifyListener.clear(); //Clear progress information svnClient.setProgressListener(null); } if (refreshResourceList != null) { FilteringContainerList folderList = new FilteringContainerList(refreshResourceList); for (IContainer resource : folderList) { SVNProviderPlugin.getPlugin().getStatusCacheManager().refreshStatus((IContainer)resource, true); } IResource[] resources = new IResource[refreshResourceList.size()]; refreshResourceList.toArray(resources); SVNProviderPlugin.broadcastModificationStateChanges(resources); } if (refreshLocal) { FilteringContainerList foldersToRefresh = new FilteringContainerList(localRefreshList); for (IContainer folder : foldersToRefresh) { try { folder.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); } catch (CoreException e) {} } } } } finally { lock.release(); operationNotifyListener = null; localRefreshList = new LinkedHashSet(); } } public void onNotify(File path, SVNNodeKind kind) { IPath pathEclipse = new Path(path.getAbsolutePath()); IResource[] resources = SVNWorkspaceRoot.getResourcesFor(pathEclipse, false); for (IResource resource : resources) { localRefreshList.add(resource); } if (operationNotifyListener != null) { operationNotifyListener.onNotify(path, kind); if ((operationNotifyListener.getMonitor() != null) && (operationNotifyListener.getMonitor().isCanceled())) { try { svnClient.cancelOperation(); } catch (SVNClientException e) { SVNProviderPlugin.log(SVNException.wrapException(e)); } } } } public void logCommandLine(String commandLine) { } public void logRevision(long revision, String path) { } public void logCompleted(String message) { if (operationNotifyListener != null) { operationNotifyListener.logMessage(message); } } public void logError(String message) { } public void logMessage(String message) { if (operationNotifyListener != null) { operationNotifyListener.logMessage(message); } } public void setCommand(int command) { } }OperationProgressNotifyListener.java000066400000000000000000000101201203611042400450360ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/client/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.client; import java.io.File; import java.text.DecimalFormat; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNProgressListener; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNNodeKind; import org.tigris.subversion.svnclientadapter.SVNProgressEvent; /** * ISVNNotifyListener implementation which intercepts the some log*() methods * and uses them to display the operation progress within the supplied progress monitor. * * @author Martin Letenay (letenay at tigris.org) */ public class OperationProgressNotifyListener extends ISVNNotifyAdapter implements ISVNProgressListener { private IProgressMonitor monitor = null; private ISVNClientAdapter svnClient; private File path; private SVNProgressEvent progressEvent; private long lastProgress; private long lastTotal; private long delta; private long grandTotal; public OperationProgressNotifyListener(final IProgressMonitor monitor) { super(); this.monitor = monitor; } public OperationProgressNotifyListener(final IProgressMonitor monitor, ISVNClientAdapter svnClient) { this(monitor); this.svnClient = svnClient; } /** * Display the log the message in the progress monitor and increase the progress by 1 */ public void onNotify(File path, SVNNodeKind kind) { this.path = path; if (monitor != null) { monitor.worked(1); subTask(); } } /** * The operation was completed, clear the progress' subTask. */ public void logCompleted(String message) { this.clear(); if (monitor != null) { monitor.subTask(" "); } } public void clear() { path = null; progressEvent = null; lastProgress = 0; lastTotal = 0; delta = 0; grandTotal = 0; } public IProgressMonitor getMonitor() { return monitor; } public void onProgress(SVNProgressEvent progressEvent) { if (monitor != null && monitor.isCanceled()) { if (svnClient != null) { try { svnClient.cancelOperation(); } catch (SVNClientException e) { SVNProviderPlugin.log(SVNException.wrapException(e)); } } return; } this.progressEvent = progressEvent; delta = progressEvent.getProgress(); if (progressEvent.getProgress() >= lastProgress && progressEvent.getTotal() == lastTotal) delta = progressEvent.getProgress() - lastProgress; lastProgress = progressEvent.getProgress(); lastTotal = progressEvent.getTotal(); grandTotal += delta; if (monitor != null) { subTask(); } } private void subTask() { String subTask = null; if (progressEvent == null) subTask = path.getPath(); else { Object t = null; String unit; if (grandTotal < 1000) { t = new Long(grandTotal); unit = " bytes"; //$NON-NLS-1$ } else if (grandTotal < 1000000) { t = new Double(grandTotal/1000.0); unit = " kB"; //$NON-NLS-1$ } else { t = new Double(grandTotal/1000000.0); unit = " MB"; //$NON-NLS-1$ } String roundedTotal; if (t instanceof Double) { DecimalFormat df = new DecimalFormat("###.#"); //$NON-NLS-1$ roundedTotal = df.format(((Double)t).doubleValue()); } else roundedTotal = t.toString(); if (path == null) subTask = roundedTotal + unit; else subTask = roundedTotal + unit + "\n" + path.getPath(); //$NON-NLS-1$ } monitor.subTask(subTask); } } OperationResourceCollector.java000066400000000000000000000023661203611042400440060ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/clientpackage org.tigris.subversion.subclipse.core.client; import java.io.File; import java.util.LinkedHashSet; import java.util.Set; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.ISVNNotifyListener; import org.tigris.subversion.svnclientadapter.SVNNodeKind; public class OperationResourceCollector implements ISVNNotifyListener { private Set operationResources = new LinkedHashSet(); public void onNotify(File path, SVNNodeKind kind) { IPath pathEclipse = new Path(path.getAbsolutePath()); IResource[] resources = SVNWorkspaceRoot.getResourcesFor(pathEclipse, false); for (IResource resource : resources) { operationResources.add(resource); } } public Set getOperationResources() { return operationResources; } public void setCommand(int command) {} public void logCommandLine(String commandLine) {} public void logMessage(String message) {} public void logError(String message) {} public void logRevision(long revision, String path) {} public void logCompleted(String message) {} }PeekStatusCommand.java000066400000000000000000000106151203611042400420520ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/client/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.client; import java.io.File; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IPath; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.ISVNNotifyListener; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNNodeKind; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNStatusKind; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * Peek for (get) the resource status. * Do not descend to children and DO NOT affect sync cache in any way ! * This command should have no side effects. */ public class PeekStatusCommand { private final IResource resource; private final IPath path; private ISVNStatus status = null; private ISVNInfo info = null; protected SVNRevision.Number revision; public PeekStatusCommand(IResource resource) { this.resource = resource; this.path = null; } public PeekStatusCommand(IPath path) { this.resource = null; this.path = path; } public void execute() throws SVNException { ISVNClientAdapter client = null; ISVNNotifyListener revisionListener = new ISVNNotifyListener() { public void setCommand(int command) {} public void logCommandLine(String commandLine) {} public void logMessage(String message) {} public void logError(String message) {} public void logRevision(long aRevision, String path) { PeekStatusCommand.this.revision = new SVNRevision.Number(aRevision); } public void logCompleted(String message) {} public void onNotify(File path, SVNNodeKind kind) {} }; try{ client = SVNProviderPlugin.getPlugin().getSVNClientManager().getSVNClient(); client.addNotifyListener( revisionListener ); File file; if (resource != null) file = resource.getLocation().toFile(); else file = path.toFile(); status = null; ISVNStatus[] statuses = client.getStatus( file, false, true, false); for (int i = 0; i < statuses.length; i++) { if (file.equals(statuses[i].getFile())) { status = statuses[i]; if (status.getUrl() == null && !(status.getTextStatus() == SVNStatusKind.UNVERSIONED)) info = client.getInfo(status.getFile()); break; } } } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { if (client != null) { client.removeNotifyListener( revisionListener ); SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } } } public ISVNStatus getStatus() { return status; } public LocalResourceStatus getLocalResourceStatus() { return (status != null) ? new LocalResourceStatus(status, getURL(status)) : null; } public SVNRevision.Number getRevision() { return revision; } // getStatuses returns null URL for svn:externals folder. This will // get the URL using svn info command on the local resource private String getURL(ISVNStatus status) { String url = status.getUrlString(); if (url == null && info != null) { SVNUrl svnurl = info.getUrl(); url = (svnurl != null) ? svnurl.toString() : null; } return url; } } StatusAndInfoCommand.java000066400000000000000000000106141203611042400425030ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/client/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.client; import java.util.Arrays; import java.util.Comparator; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.commands.ISVNCommand; import org.tigris.subversion.subclipse.core.resources.RemoteResourceStatus; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNStatusKind; /** * svn status + subsequent svn info command(s). * After execute() of superclass StatusCommand, not all necessary information is retrieved. * For added files or resources (incoming additions), their e.g. nodeKind is not known from the status. * To get that information, subsequent calls to "svn info" are executed for those unknown urls ... * * @author Martin Letenay */ public class StatusAndInfoCommand extends StatusCommand implements ISVNCommand { private RemoteResourceStatus[] remoteStatuses; public StatusAndInfoCommand(ISVNLocalResource svnResource, boolean descend, boolean getAll, boolean contactServer) { super(svnResource.getFile(), descend, getAll, contactServer); } protected void execute(final ISVNClientAdapter client, final IProgressMonitor monitor) throws SVNClientException { super.execute(client, monitor); monitor.worked(50); remoteStatuses = collectRemoteStatuses(getStatuses(), client, Policy.subMonitorFor(monitor,50)); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.commands.ISVNCommand#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(IProgressMonitor monitor) throws SVNException { ISVNClientAdapter svnClient = null; try { svnClient = SVNProviderPlugin.getPlugin().getSVNClient(); execute(svnClient, monitor); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(svnClient); } } /** * Answer sorted array of informed statuses ... * @return */ public RemoteResourceStatus[] getRemoteResourceStatuses() { return remoteStatuses; } private RemoteResourceStatus[] collectRemoteStatuses(ISVNStatus[] statuses, ISVNClientAdapter client, final IProgressMonitor monitor) { monitor.beginTask("", statuses.length); try { RemoteResourceStatus[] result = new RemoteResourceStatus[statuses.length]; Arrays.sort(statuses, new Comparator() { public int compare(Object o1, Object o2) { return ((ISVNStatus) o1).getPath().compareTo(((ISVNStatus) o2).getPath()); } }); for (int i = 0; i < statuses.length; i++) { ISVNStatus status = statuses[i]; SVNStatusKind localTextStatus = status.getTextStatus(); if (SVNStatusKind.UNVERSIONED.equals(localTextStatus) || SVNStatusKind.ADDED.equals(localTextStatus) || SVNStatusKind.IGNORED.equals(localTextStatus) ) { if (SVNStatusKind.NONE.equals(status.getRepositoryTextStatus())) result[i] = RemoteResourceStatus.NONE; else result[i] = new RemoteResourceStatus(statuses[i], getRevisionFor(statuses[i])); } else { result[i] = new RemoteResourceStatus(statuses[i], getRevisionFor(statuses[i])); } monitor.worked(1); } return result; } finally { monitor.done(); } } } StatusCommand.java000066400000000000000000000110001203611042400412320ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/client/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.client; import java.io.File; import java.util.ArrayList; import java.util.Collections; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.CancelableSVNStatusCallback; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNNotifyListener; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.ISVNStatusCallback; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNNodeKind; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * @author Panagiotis K */ public class StatusCommand { private final File file; private final boolean descend; private final boolean getAll; private final boolean contactServer; private ISVNStatusCallback callback; private ISVNStatus[] statuses; /** List storing RevisionsCache objects as reported by logRevision() * They have to be sorted in descending order, so more specific (deeper in the tree) * is looked up first */ protected List revisions = new ArrayList(); public StatusCommand(File file, boolean descend, boolean getAll, boolean contactServer) { this.file = file; this.descend = descend; this.getAll = getAll; this.contactServer = contactServer; } protected void execute(final ISVNClientAdapter client, final IProgressMonitor monitor) throws SVNClientException { ISVNNotifyListener revisionListener = new ISVNNotifyListener() { public void setCommand(int command) {} public void logCommandLine(String commandLine) {} public void logMessage(String message) {} public void logError(String message) {} public void logRevision(long aRevision, String path) { StatusCommand.this.revisions.add(new RevisionsCache(aRevision, path)); if (StatusCommand.this.revisions.size() > 1) { Collections.sort(StatusCommand.this.revisions); } } public void logCompleted(String message) {} public void onNotify(File path, SVNNodeKind kind) {} }; try{ client.addNotifyListener( revisionListener ); if (callback != null && callback instanceof CancelableSVNStatusCallback) { ((CancelableSVNStatusCallback)callback).setSvnClient(client); } statuses = client.getStatus(file, descend, getAll, contactServer, false, callback); } finally { client.removeNotifyListener( revisionListener ); } } public void setCallback(ISVNStatusCallback callback) { this.callback = callback; } public ISVNStatus[] getStatuses() { return statuses; } protected SVNRevision.Number getRevisionFor(ISVNStatus status) { if (revisions.size() == 1) { return (revisions.get(0)).getRevision(); } else { for (RevisionsCache element : revisions) { if (element.appliesFor(status.getPath())) { return element.getRevision(); } } return SVNRevision.INVALID_REVISION; } } private static class RevisionsCache implements Comparable { private final long revision; private final String path; protected RevisionsCache(long revision, String path) { this.revision = revision; this.path = path; } protected String getPath() { return path; } protected SVNRevision.Number getRevision() { return new SVNRevision.Number(revision); } protected boolean appliesFor(String statusPath) { return statusPath.startsWith(this.path); } public int compareTo(RevisionsCache o2) { return o2.getPath().compareTo(this.getPath()); } } } 000077500000000000000000000000001203611042400361405ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commandsAddIgnoredPatternCommand.java000066400000000000000000000102721203611042400436420ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNFolder; import org.tigris.subversion.subclipse.core.ISVNLocalFolder; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNResource; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; /** * Adds a pattern to the set of ignores for the specified folder. * * @author Cedric Chabanois (cchab at tigris.org) */ public class AddIgnoredPatternCommand implements ISVNCommand { private ISVNLocalFolder folder; private String pattern; public AddIgnoredPatternCommand(ISVNLocalFolder folder, String pattern) { this.folder = folder; this.pattern = pattern; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.commands.ISVNCommand#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(IProgressMonitor monitor) throws SVNException { monitor = Policy.monitorFor(monitor); monitor.beginTask(null, 100); //$NON-NLS-1$ if (!folder.getStatus().isManaged()) throw new SVNException(IStatus.ERROR, TeamException.UNABLE, Policy.bind("SVNTeamProvider.ErrorSettingIgnorePattern", folder.getIResource().getFullPath().toString())); //$NON-NLS-1$ ISVNClientAdapter svnClient = folder.getRepository().getSVNClient(); try { OperationManager.getInstance().beginOperation(svnClient); try { svnClient.addToIgnoredPatterns(folder.getFile(), pattern); // broadcast changes to unmanaged children - they are the only candidates for being ignored ISVNResource[] members = folder.members(null, ISVNFolder.UNMANAGED_MEMBERS); IResource[] possiblesIgnores = new IResource[members.length]; for (int i = 0; i < members.length;i++) { possiblesIgnores[i] = ((ISVNLocalResource)members[i]).getIResource(); } folder.refreshStatus(false); SVNProviderPlugin.broadcastSyncInfoChanges(possiblesIgnores, false); broadcastNestedFolders(possiblesIgnores); } catch (SVNClientException e) { throw SVNException.wrapException(e); } } finally { OperationManager.getInstance().endOperation(); monitor.done(); folder.getRepository().returnSVNClient(svnClient); } } /** * @param resources */ private void broadcastNestedFolders(IResource[] resources) { for (int i = 0; i < resources.length;i++) { if (resources[i].getType() == IResource.FOLDER) { IFolder folder = (IFolder) resources[i]; try { IResource[] children = folder.members(true); SVNProviderPlugin.broadcastSyncInfoChanges(children, false); broadcastNestedFolders(children); } catch (CoreException e1) { } } } } } AddResourcesCommand.java000066400000000000000000000175711203611042400427000ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import java.util.HashSet; import java.util.Set; import java.util.SortedSet; import java.util.TreeSet; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceVisitor; import org.eclipse.core.resources.ResourceAttributes; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.subclipse.core.client.OperationProgressNotifyListener; import org.tigris.subversion.subclipse.core.client.OperationResourceCollector; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; /** * Add the given resources to the project. *

* The sematics follow that of SVN in the sense that any folders and files * are created remotely on the next commit. *

* * @author Cedric Chabanois (cchab at tigris.org) */ public class AddResourcesCommand implements ISVNCommand { // resources to add private IResource[] resources; private int depth; private SVNWorkspaceRoot root; private OperationResourceCollector operationResourceCollector = new OperationResourceCollector(); public AddResourcesCommand(SVNWorkspaceRoot root, IResource[] resources, int depth) { this.resources = resources; this.depth = depth; this.root = root; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.commands.ISVNCommand#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(IProgressMonitor monitor) throws SVNException { monitor = Policy.monitorFor(monitor); // Visit the children of the resources using the depth in order to // determine which folders, text files and binary files need to be added // A TreeSet is needed for the folders so they are in the right order (i.e. parents created before children) final SortedSet folders = new TreeSet(); // Sets are required for the files to ensure that files will not appear twice if there parent was added as well // and the depth isn't zero final HashSet files = new HashSet(); for (int i=0; i operationResources = operationResourceCollector.getOperationResources(); OperationManager.getInstance().endOperation(true, operationResources); monitor.done(); if (svnClient != null) { svnClient.removeNotifyListener(operationResourceCollector); root.getRepository().returnSVNClient(svnClient); } } } } BranchTagCommand.java000066400000000000000000000165361203611042400421460ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import java.io.File; import java.net.MalformedURLException; import java.util.HashMap; import java.util.Map; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.subclipse.core.client.OperationProgressNotifyListener; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class BranchTagCommand implements ISVNCommand { private SVNUrl[] sourceUrls; private SVNUrl destinationUrl; // selected resources private IResource[] resources; private boolean createOnServer; private String message; private SVNRevision revision; private boolean makeParents; private ISVNClientAdapter svnClient; private SVNWorkspaceRoot root; private boolean multipleTransactions = true; private Map urlMap = new HashMap(); public BranchTagCommand(SVNWorkspaceRoot root, IResource[] resources, SVNUrl[] sourceUrls, SVNUrl destinationUrl, String message, boolean createOnServer, SVNRevision revision) { super(); this.root = root; this.resources = resources; this.sourceUrls = sourceUrls; this.destinationUrl = destinationUrl; this.createOnServer = createOnServer; this.message = message; this.revision = revision; } public BranchTagCommand(ISVNClientAdapter svnClient, IResource[] resources, SVNUrl[] sourceUrls, SVNUrl destinationUrl, String message, boolean createOnServer, SVNRevision revision) { super(); this.svnClient = svnClient; this.resources = resources; this.sourceUrls = sourceUrls; this.destinationUrl = destinationUrl; this.createOnServer = createOnServer; this.message = message; this.revision = revision; } public void run(IProgressMonitor monitor) throws SVNException { boolean clientPassed = svnClient != null; try { monitor.beginTask(null, 100); if (!clientPassed) { svnClient = root.getRepository().getSVNClient(); } OperationManager.getInstance().beginOperation(svnClient, new OperationProgressNotifyListener(monitor, svnClient)); if (createOnServer) { boolean copyAsChild = sourceUrls.length > 1; String commonRoot = null; if (copyAsChild) { commonRoot = getCommonRoot(); } if (!multipleTransactions || !copyAsChild || destinationUrl.toString().startsWith(commonRoot)) { svnClient.copy(sourceUrls, destinationUrl, message, revision, copyAsChild, makeParents); multipleTransactions = false; } else { for (SVNUrl sourceUrl : sourceUrls) { String fromUrl = sourceUrl.toString(); String uncommonPortion = fromUrl.substring(commonRoot.length()); String toUrl = destinationUrl.toString() + uncommonPortion; SVNUrl destination = new SVNUrl(toUrl); SVNUrl[] source = { sourceUrl }; urlMap.put(fromUrl, destination); svnClient.copy(source, destination, message, revision, copyAsChild, makeParents); } } } else { File[] files = new File[resources.length]; for (int i = 0; i < resources.length; i++) { files[i] = resources[i].getLocation().toFile(); } boolean copyAsChild = files.length > 1; String commonRoot = null; if (copyAsChild) { commonRoot = getCommonRoot(); } if (!multipleTransactions || !copyAsChild || destinationUrl.toString().startsWith(commonRoot)) try { svnClient.copy(files, destinationUrl, message, copyAsChild, makeParents); multipleTransactions = false; } catch (IllegalArgumentException ex) { // Ignore. Bug in JavaHL results in this error when parent directories are created, even though copy succeeds. } else { for (int i = 0; i < sourceUrls.length; i++) { String fromUrl = sourceUrls[i].toString(); String uncommonPortion = fromUrl.substring(commonRoot.length()); String toUrl = destinationUrl.toString() + uncommonPortion; SVNUrl destination = new SVNUrl(toUrl); File[] source = { files[i] }; try { urlMap.put(fromUrl, destination); svnClient.copy(source, destination, message, copyAsChild, makeParents); } catch (IllegalArgumentException ex) { // Ignore. Bug in JavaHL results in this error when parent directories are created, even though copy succeeds. } } } } monitor.worked(100); } catch (Exception e) { throw SVNException.wrapException(e); } finally { if (!clientPassed) { root.getRepository().returnSVNClient(svnClient); } OperationManager.getInstance().endOperation(); monitor.done(); } } public void setMakeParents(boolean makeParents) { this.makeParents = makeParents; } public void setMultipleTransactions(boolean multipleTransactions) { this.multipleTransactions = multipleTransactions; } // For switch public SVNUrl getDestinationUrl(String sourceUrl) { if (!multipleTransactions) { if (sourceUrls.length == 1) { return destinationUrl; } else { String uncommonPortion = sourceUrl.substring(getCommonRoot().length()); String toUrl = destinationUrl.toString() + uncommonPortion; try { return new SVNUrl(toUrl); } catch (MalformedURLException e) { return destinationUrl; } } } else return (SVNUrl)urlMap.get(sourceUrl); } private String getCommonRoot() { String commonRoot = null; String urlString = sourceUrls[0].toString(); tag1: for (int i = 0; i < urlString.length(); i++) { String partialPath = urlString.substring(0, i+1); if (partialPath.endsWith("/")) { for (int j = 1; j < sourceUrls.length; j++) { if (!sourceUrls[j].toString().startsWith(partialPath)) break tag1; } commonRoot = partialPath.substring(0, i); } } return commonRoot; } } ChangeCommitPropertiesCommand.java000066400000000000000000000060701203611042400447200ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * Changes the commit comment on a previously committed revision * * @author Jesper Steen Møller (jespersm at tigris.org) */ public class ChangeCommitPropertiesCommand implements ISVNCommand { private ISVNRepositoryLocation repositoryLocation; private SVNRevision.Number revisionNo; private String logMessage; private String author; private boolean logMessageChanged = false; private boolean authorChanged = false; public ChangeCommitPropertiesCommand(ISVNRepositoryLocation theRepositoryLocation, SVNRevision.Number theRevisionNo, String theLogMessage, String theAuthor) { this.repositoryLocation = theRepositoryLocation; this.revisionNo = theRevisionNo; this.logMessage = theLogMessage; this.author = theAuthor; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.commands.ISVNCommand#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(IProgressMonitor monitor) throws SVNException { monitor.beginTask(null, 100); //$NON-NLS-1$ ISVNClientAdapter svnClient = repositoryLocation.getSVNClient(); try { OperationManager.getInstance().beginOperation(svnClient); try { if (logMessage != null) { svnClient.setRevProperty(repositoryLocation.getUrl(), revisionNo, "svn:log", logMessage, true); logMessageChanged = true; } if (author != null) { svnClient.setRevProperty(repositoryLocation.getUrl(), revisionNo, "svn:author", author, true); authorChanged = true; } } catch (SVNClientException e) { throw SVNException.wrapException(e); } } finally { repositoryLocation.returnSVNClient(svnClient); OperationManager.getInstance().endOperation(); monitor.done(); } } public boolean isAuthorChanged() { return authorChanged; } public boolean isLogMessageChanged() { return logMessageChanged; } } CheckinResourcesCommand.java000066400000000000000000000164631203611042400435530ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import java.io.File; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.MultiRule; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRunnable; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.subclipse.core.client.OperationProgressNotifyListener; import org.tigris.subversion.subclipse.core.client.OperationResourceCollector; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNNotifyListener; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNNodeKind; /** * Checkin any local changes to given resources in the given project * * @author Cedric Chabanois (cchab at tigris.org) */ public class CheckinResourcesCommand implements ISVNCommand { // resources to commit protected IResource[] resources; protected String message; protected boolean keepLocks; protected int depth; protected SVNWorkspaceRoot root; private ISVNNotifyListener notifyListener; private String postCommitError; private OperationResourceCollector operationResourceCollector = new OperationResourceCollector(); public CheckinResourcesCommand(SVNWorkspaceRoot root, IResource[] resources, int depth, String message, boolean keepLocks) { this.resources = resources; this.message = message; this.depth = depth; this.root = root; this.keepLocks = keepLocks; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.commands.ISVNCommand#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(IProgressMonitor monitor) throws SVNException { postCommitError = null; final ISVNClientAdapter svnClient = root.getRepository().getSVNClient(); OperationManager.getInstance().beginOperation(svnClient, new OperationProgressNotifyListener(monitor, svnClient)); try { // Prepare the parents list // we will Auto-commit parents if they are not already commited List parentsList = new ArrayList(); List projectList = new ArrayList(); for (IResource currentResource : resources) { IProject project = currentResource.getProject(); if (!projectList.contains(project)) { projectList.add(project); } IContainer parent = currentResource.getParent(); ISVNLocalResource svnParentResource = SVNWorkspaceRoot.getSVNResourceFor(parent); while (parent.getType() != IResource.ROOT && parent.getType() != IResource.PROJECT && !svnParentResource.hasRemote()) { if (!inCommitList(parent)) parentsList.add(parent); parent = parent.getParent(); svnParentResource = svnParentResource.getParent(); } } // convert parents and resources to an array of File int parents = parentsList.size(); if (parents > 0) depth = IResource.DEPTH_ZERO; // change commit to non-recursive!! final File[] resourceFiles = new File[parents + resources.length]; for (int i = 0; i < parents; i++) { resourceFiles[i] = ((IResource)parentsList.get(i)).getLocation().toFile(); } for (int i = 0, j = parents; i < resources.length; i++, j++) { resourceFiles[j] = resources[i].getLocation().toFile(); } IProject[] projects = new IProject[projectList.size()]; projectList.toArray(projects); ISchedulingRule rule = MultiRule.combine(projects); SVNProviderPlugin.run(new ISVNRunnable() { public void run(final IProgressMonitor pm) throws SVNException { try { notifyListener = new ISVNNotifyListener() { public void logCommandLine(String commandLine) {} public void logCompleted(String message) {} public void logError(String message) {} public void logMessage(String message) { if (message.startsWith("Transmitting file data")) pm.subTask(message); } public void logRevision(long revision, String path) {} public void onNotify(File path, SVNNodeKind kind) {} public void setCommand(int command) {} }; pm.beginTask(null, resourceFiles.length); pm.setTaskName("Checking in..."); svnClient.addNotifyListener(operationResourceCollector); svnClient.addNotifyListener(notifyListener); // then the resources the user has requested to commit if (svnClient.canCommitAcrossWC()) svnClient.commitAcrossWC(resourceFiles,message,depth == IResource.DEPTH_INFINITE,keepLocks,true); else svnClient.commit(resourceFiles,message,depth == IResource.DEPTH_INFINITE,keepLocks); postCommitError = svnClient.getPostCommitError(); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { pm.done(); if (svnClient != null) { svnClient.removeNotifyListener(operationResourceCollector); svnClient.removeNotifyListener(notifyListener); root.getRepository().returnSVNClient(svnClient); } } } }, rule, Policy.monitorFor(monitor)); } finally { OperationManager.getInstance().endOperation(true, operationResourceCollector.getOperationResources()); } } private boolean inCommitList(IResource resource) { for (IResource checkResource : resources) { if (checkResource.equals(resource)) return true; } return false; } public String getPostCommitError() { return postCommitError; } } CheckoutCommand.java000066400000000000000000000302141203611042400420470ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import java.io.File; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.ISVNLocalFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRunnable; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.subclipse.core.client.OperationProgressNotifyListener; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.core.util.Util; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * Checkout the remote resources into the local workspace as projects. Each * resource will be checked out into the corresponding project. You can use * getProject to get a project for a given remote Folder * * Resources existing in the local file system at the target project location * but now known to the workbench will be overwritten. * * @author cedric chabanois (cchab at tigris.org) */ public class CheckoutCommand implements ISVNCommand { private ISVNRemoteFolder[] resources; private IProject[] projects; private IPath projectRoot; private SVNRevision svnRevision = SVNRevision.HEAD; private int depth = ISVNCoreConstants.DEPTH_INFINITY; private boolean ignoreExternals = false; private boolean force = true; private boolean refreshProjects = true; private List createProjectList = new ArrayList(); private List manageProjectList = new ArrayList(); public CheckoutCommand(ISVNRemoteFolder[] resources, IProject[] projects) { this(resources, projects, null); } public CheckoutCommand(ISVNRemoteFolder[] resources, IProject[] projects, IPath root) { this.resources = resources; this.projects = projects; this.projectRoot = root; } protected void basicRun(final IProject project, ISVNRemoteFolder resource, final IProgressMonitor pm) throws SVNException { ISVNClientAdapter svnClient = null; if (pm != null) { pm.beginTask(null, 1000); } try { // Perform the checkout boolean createProject = false; svnClient = resource.getRepository().getSVNClient(); OperationManager.getInstance().beginOperation(svnClient, new OperationProgressNotifyListener(pm, svnClient)); // Prepare the target projects to receive resources scrubProject(resource, project, (pm != null) ? Policy.subMonitorFor(pm, 100) : null); File destPath; if (project.getLocation() == null) { // project.getLocation is null if the project does // not exist in the workspace if (projectRoot==null) { ISVNLocalFolder root = SVNWorkspaceRoot.getSVNFolderFor(ResourcesPlugin .getWorkspace().getRoot()); destPath = new File(root.getIResource().getLocation().toFile(), project.getName()); } else { destPath = new File(projectRoot.toFile(), project.getName()); } if (!destPath.exists()) { destPath.mkdirs(); } createProject = true; } else { if (projectRoot!=null) { try { destPath = new File(projectRoot.toFile(), project.getName()); setProjectToRoot(project, destPath); } catch (CoreException e) { throw new SVNException( "Cannot create project to checkout to", e); } } else { destPath = project.getLocation().toFile(); } } if (createProject) { createProjectList.add(project); } checkoutProject(pm, resource, svnClient, destPath); SVNWorkspaceRoot.setManagedBySubclipse(project); if (refreshProjects) { try { project.create(null); project.open(null); } catch (CoreException e1) { throw new SVNException( "Cannot create project to checkout to", e1); } refreshProject(project, (pm != null) ? Policy.subMonitorFor(pm, 100) : null); } else { manageProjectList.add(project); } }finally { resource.getRepository().returnSVNClient(svnClient); if (pm != null) { pm.done(); } } } public List getCreateProjectList() { return createProjectList; } /** * @return Returns the manageProjectList. */ public List getManageProjectList() { return manageProjectList; } private void setProjectToRoot(final IProject project, File destPath) throws CoreException { IProjectDescription description = project.getDescription(); description.setLocation(new Path(destPath.getAbsolutePath())); project.move(description, true, null); } /** * @param pm * @param resource * @param svnClient * @param destPath * @throws SVNException */ private void checkoutProject(final IProgressMonitor pm, ISVNRemoteFolder resource, ISVNClientAdapter svnClient, File destPath) throws SVNException { final IProgressMonitor subPm = Policy.infiniteSubMonitorFor(pm, 800); try { subPm.beginTask("", Policy.INFINITE_PM_GUESS_FOR_CHECKOUT); // If checking out a specific revision, check to see if the location has changed in the // repository and adjust the URL if it has. SVNUrl url; if (svnRevision instanceof SVNRevision.Number) { url = Util.getUrlForRevision(resource, (SVNRevision.Number)svnRevision, subPm); } else { url = resource.getUrl(); } svnClient.checkout(url, destPath, svnRevision, depth, ignoreExternals, force); } catch (SVNClientException e) { throw new SVNException("cannot checkout", e.operationInterrupted()); } finally { subPm.done(); } } /* * (non-Javadoc) * * @see org.tigris.subversion.subclipse.core.commands.ISVNCommand#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(IProgressMonitor monitor) throws SVNException { try { for (int i = 0; i < resources.length; i++) { final IProject project = projects[i]; final ISVNRemoteFolder resource = resources[i]; SVNProviderPlugin.run(new ISVNRunnable() { public void run(IProgressMonitor pm) throws SVNException { basicRun(project, resource, pm); } // run }, projects[i], Policy.monitorFor(monitor)); } }finally { OperationManager.getInstance().endOperation(); } } /* * Delete the target projects before checking out * @param monitor - may be null ! */ private void scrubProject(ISVNRemoteFolder resource, IProject project, IProgressMonitor monitor) throws SVNException { if (project == null) { if (monitor !=null) { monitor.done(); } return; } if (monitor != null) { monitor.beginTask("", 100); monitor.subTask(Policy.bind("SVNProvider.Scrubbing_local_project_1", project.getName())); //$NON-NLS-1$ } try { File destPath = null; if (projectRoot != null) { destPath = new File(projectRoot.toFile(), project.getName()); } // New location, just delete the project but not the content. if (destPath != null && !destPath.exists() && project != null && project.exists()) { project.delete(IResource.NEVER_DELETE_PROJECT_CONTENT, monitor); project = null; } if (project != null && project.exists() && (destPath == null || destPath.exists())) { if (!project.isOpen()) { project.open((monitor != null) ? Policy.subMonitorFor(monitor, 10) : null); } // We do not want to delete the project to avoid a project // deletion delta // We do not want to delete the .project to avoid core // exceptions // unmap the project from any previous repository provider if (RepositoryProvider.getProvider(project) != null) RepositoryProvider.unmap(project); IResource[] children = project .members(IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS); IProgressMonitor subMonitor = (monitor != null) ? Policy.subMonitorFor(monitor, 80) : null; if (subMonitor != null) { subMonitor.beginTask(null, children.length * 100); } ISVNClientAdapter clientSilent = null; try { for (int j = 0; j < children.length; j++) { if (!children[j].getName().equals(".project")) {//$NON-NLS-1$ if (clientSilent == null) clientSilent = SVNProviderPlugin.getPlugin().getSVNClient(); ISVNInfo info = null; try { SVNUrl url = new SVNUrl(resource.getUrl().toString() + "/" + children[j].getProjectRelativePath()); try { SVNProviderPlugin.disableConsoleLogging(); info = clientSilent.getInfo(url); } catch (SVNClientException e2) { } finally { SVNProviderPlugin.enableConsoleLogging(); } } catch (MalformedURLException e1) { } if (info != null) children[j].delete(true /* force */, (subMonitor != null) ? Policy .subMonitorFor(subMonitor, 100) : null); } } } finally { if (subMonitor != null) { subMonitor.done(); } SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(clientSilent); } } else if (project != null) { // Make sure there is no directory in the local file system. File location = new File(project.getParent().getLocation() .toFile(), project.getName()); if (location.exists()) { deepDelete(location); } } } catch (CoreException e) { throw SVNException.wrapException(e); } finally { if (monitor != null) { monitor.subTask(" "); monitor.done(); } } } /* * delete a folder recursively */ private void deepDelete(File resource) { if (resource.isDirectory()) { File[] fileList = resource.listFiles(); for (int i = 0; i < fileList.length; i++) { deepDelete(fileList[i]); } } resource.delete(); } /* * Bring the provided projects into the workspace */ private void refreshProject(IProject project, IProgressMonitor monitor) throws SVNException { if (monitor != null) { monitor.beginTask("", 100); //$NON-NLS-1$ monitor.subTask(Policy.bind("SVNProvider.Creating_project_1", project.getName())); } try { // Register the project with Team RepositoryProvider.map(project, SVNProviderPlugin.getTypeId()); RepositoryProvider.getProvider(project, SVNProviderPlugin.getTypeId()); } catch (TeamException e) { throw new SVNException("Cannot map the project with svn provider",e); } finally { if (monitor != null) { monitor.subTask(" "); monitor.done(); } } } public void setSvnRevision(SVNRevision svnRevision) { this.svnRevision = svnRevision; } public void setRefreshProjects(boolean refreshProjects) { this.refreshProjects = refreshProjects; } public void setDepth(int depth) { this.depth = depth; } public void setIgnoreExternals(boolean ignoreExternals) { this.ignoreExternals = ignoreExternals; } public void setForce(boolean force) { this.force = force; } }CleanupResourcesCommand.java000066400000000000000000000064321203611042400435710ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import java.util.LinkedHashSet; import java.util.Set; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; /** * Remove stale transactions and locks from the working copy. This operation can only be run * on folders. */ public class CleanupResourcesCommand implements ISVNCommand { private final SVNWorkspaceRoot root; private final IResource[] resources; private Set cleanedUpResources = new LinkedHashSet(); public CleanupResourcesCommand(SVNWorkspaceRoot root, IResource[] resources) { this.root = root; this.resources = resources; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.commands.ISVNCommand#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(IProgressMonitor monitor) throws SVNException { ISVNClientAdapter svnClient = root.getRepository().getSVNClient(); try { monitor.beginTask(null, 100 * resources.length); OperationManager.getInstance().beginOperation(svnClient); for (int i = 0; i < resources.length; i++) { svnClient.cleanup(resources[i].getLocation().toFile()); cleanedUpResources.add(resources[i]); monitor.worked(100); } } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { Set refreshResources = new LinkedHashSet(); for (IResource resource : cleanedUpResources) { addToRefreshList(refreshResources, resource); } OperationManager.getInstance().endOperation(true, refreshResources); root.getRepository().returnSVNClient(svnClient); monitor.done(); } } private void addToRefreshList(Set refreshResources, IResource resource) { refreshResources.add(resource); OperationManager.getInstance().onNotify(resource.getLocation().toFile(), null); if (resource instanceof IContainer) { try { IResource[] children = ((IContainer)resource).members(); for (IResource child : children) { if (child instanceof IContainer) { addToRefreshList(refreshResources, child); } } } catch (CoreException e) {} } } } GetAnnotationsCommand.java000066400000000000000000000054251203611042400432450ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.svnclientadapter.ISVNAnnotations; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * Get the svn blame for the specified resource * * @author Martin */ public class GetAnnotationsCommand implements ISVNCommand { private ISVNAnnotations annotations; private final SVNRevision fromRevision; private final SVNRevision toRevision; private final ISVNRemoteFile remoteFile; private final boolean includeMergedRevisions; private final boolean ignoreMimeType; /** * Constructor * @param remoteFile * @param fromRevision * @param toRevision * @param includeMergedRevisions * @param ignoreMimeType */ public GetAnnotationsCommand(ISVNRemoteFile remoteFile, SVNRevision fromRevision, SVNRevision toRevision, boolean includeMergedRevisions, boolean ignoreMimeType) { this.remoteFile = remoteFile; this.fromRevision = fromRevision; this.toRevision = toRevision; this.includeMergedRevisions = includeMergedRevisions; this.ignoreMimeType = ignoreMimeType; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.commands.ISVNCommand#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(IProgressMonitor aMonitor) throws SVNException { IProgressMonitor monitor = Policy.monitorFor(aMonitor); monitor.beginTask(Policy.bind("RemoteFile.getAnnotations"), 100);//$NON-NLS-1$ try { annotations = remoteFile.getAnnotations(fromRevision, toRevision, includeMergedRevisions, ignoreMimeType); monitor.worked(100); } catch (TeamException e) { throw SVNException.wrapException(e); } finally { monitor.done(); } } /** * @return the annotations retrieved for the specified resource */ public ISVNAnnotations getAnnotations() { return annotations; } } GetInfoCommand.java000066400000000000000000000041221203611042400416340ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.SVNClientException; /** * Get the svn info for the specified resource. * * @author Martin Letenay (letenay at tigris.org) */ public class GetInfoCommand implements ISVNCommand { private ISVNInfo info = null; private ISVNLocalResource resource = null; public GetInfoCommand(ISVNLocalResource resource) { this.resource = resource; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.commands.ISVNCommand#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(IProgressMonitor monitor) throws SVNException { ISVNClientAdapter svnClient = resource.getRepository().getSVNClient(); try { if (monitor != null) { monitor.beginTask(null, 100); } info = svnClient.getInfoFromWorkingCopy(resource.getFile()); if (monitor != null) { monitor.worked(100); } } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { resource.getRepository().returnSVNClient(svnClient); if (monitor != null) { monitor.done(); } } } public ISVNInfo getInfo() { return info; } } GetLogsCommand.java000066400000000000000000000266501203611042400416570ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.history.AliasManager; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.history.LogEntry; import org.tigris.subversion.subclipse.core.history.Tags; import org.tigris.subversion.subclipse.core.resources.BaseResource; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.ISVNLogMessage; import org.tigris.subversion.svnclientadapter.ISVNLogMessageChangePath; import org.tigris.subversion.svnclientadapter.SVNLogMessageCallback; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * Command to get the logs of a remote resource * */ public class GetLogsCommand implements ISVNCommand { private ISVNRemoteResource remoteResource; private SVNRevision pegRevision = SVNRevision.HEAD; private SVNRevision revisionStart = new SVNRevision.Number(0); private SVNRevision revisionEnd = SVNRevision.HEAD; private boolean stopOnCopy = false; private long limit = 0; private boolean includeMergedRevisions; private AliasManager tagManager; private ILogEntry[] logEntries; private SVNLogMessageCallback callback; /** * Constructor * * @param remoteResource * @param pegRevision peg revision for URL * @param revisionStart first revision to show * @param revisionEnd last revision to show * @param stopOnCopy do not continue on copy operations * @param limit limit the number of log messages (if 0 or less no * limit) * @param tagManager used to determine tags for revision */ public GetLogsCommand(ISVNRemoteResource remoteResource, SVNRevision pegRevision, SVNRevision revisionStart, SVNRevision revisionEnd, boolean stopOnCopy, long limit, AliasManager tagManager, boolean includeMergedRevisions) { this.remoteResource = remoteResource; this.pegRevision = (pegRevision != null) ? pegRevision : SVNRevision.HEAD; this.revisionStart = revisionStart; this.revisionEnd = (revisionEnd != null) ? revisionEnd : SVNRevision.HEAD; this.stopOnCopy = stopOnCopy; this.limit = limit; this.tagManager = tagManager; this.includeMergedRevisions = includeMergedRevisions; } /** * execute the command * @param aMonitor * @throws SVNException */ public void run(IProgressMonitor aMonitor) throws SVNException { ISVNRepositoryLocation repository = null; ISVNClientAdapter svnClient = null; logEntries = null; IProgressMonitor monitor = Policy.monitorFor(aMonitor); monitor.beginTask(Policy.bind("RemoteFile.getLogEntries"), 100); //$NON-NLS-1$ ISVNLogMessage[] logMessages; try { if (callback == null) { logMessages = remoteResource.getLogMessages( pegRevision, revisionStart, revisionEnd, stopOnCopy, !SVNProviderPlugin.getPlugin().getSVNClientManager().isFetchChangePathOnDemand(), limit, includeMergedRevisions); } else { repository = remoteResource.getRepository(); svnClient = repository.getSVNClient(); if (remoteResource instanceof BaseResource) { boolean logMessagesRetrieved = false; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(remoteResource.getResource()); if (svnResource != null) { LocalResourceStatus status = svnResource.getStatus(); if (status != null && status.isCopied()) { ISVNInfo info = svnClient.getInfoFromWorkingCopy(svnResource.getFile()); SVNUrl copiedFromUrl = info.getCopyUrl(); if (copiedFromUrl != null) { svnClient.getLogMessages(copiedFromUrl, SVNRevision.HEAD, revisionStart, revisionEnd, stopOnCopy, !SVNProviderPlugin.getPlugin().getSVNClientManager().isFetchChangePathOnDemand(), limit, includeMergedRevisions, ISVNClientAdapter.DEFAULT_LOG_PROPERTIES, callback); logMessagesRetrieved = true; GetRemoteResourceCommand getRemoteResourceCommand = new GetRemoteResourceCommand(remoteResource.getRepository(), copiedFromUrl, SVNRevision.HEAD); getRemoteResourceCommand.run(null); remoteResource = getRemoteResourceCommand.getRemoteResource(); } } } if (!logMessagesRetrieved) svnClient.getLogMessages(((BaseResource)remoteResource).getFile(), pegRevision, revisionStart, revisionEnd, stopOnCopy, !SVNProviderPlugin.getPlugin().getSVNClientManager().isFetchChangePathOnDemand(), limit, includeMergedRevisions, ISVNClientAdapter.DEFAULT_LOG_PROPERTIES, callback); } else { svnClient.getLogMessages(remoteResource.getUrl(), pegRevision, revisionStart, revisionEnd, stopOnCopy, !SVNProviderPlugin.getPlugin().getSVNClientManager().isFetchChangePathOnDemand(), limit, includeMergedRevisions, ISVNClientAdapter.DEFAULT_LOG_PROPERTIES, callback); } logMessages = callback.getLogMessages(); } if (remoteResource.isFolder()) { logEntries = LogEntry.createLogEntriesFrom((ISVNRemoteFolder) remoteResource, logMessages, getTags(logMessages)); } else { logEntries = LogEntry.createLogEntriesFrom((ISVNRemoteFile) remoteResource, logMessages, getTags(logMessages), getUrls(logMessages)); } } catch (Exception e) { throw SVNException.wrapException(e); } finally { if (repository != null) { repository.returnSVNClient(svnClient); } monitor.done(); } } public void setCallback(SVNLogMessageCallback callback) { this.callback = callback; } /** * get the result of the command * @return log entries for the supplied resource and range */ public ILogEntry[] getLogEntries() { return logEntries; } private SVNUrl[] fillUrlsWith(SVNUrl[] urls, SVNUrl url) { for (int i = 0; i < urls.length;i++) { urls[i] = url; } return urls; } /** * get the urls of the resource for each revision in logMessages * It will always be the same url if the resource has never been moved * @param logMessages * @return an array of corresponding resource urls */ private SVNUrl[] getUrls(ISVNLogMessage[] logMessages) { SVNUrl[] urls = new SVNUrl[logMessages.length]; SVNUrl rootRepositoryUrl = remoteResource.getRepository().getRepositoryRoot(); if (rootRepositoryUrl == null) { // don't know the root repository url, we consider that resource has never been moved // and so that the url was always the same return fillUrlsWith(urls, remoteResource.getUrl()); } // we identify the logMessage corresponding to the revision // of the remote resource int indexRemote = -1; for (int i = 0; i < logMessages.length;i++) { if (logMessages[i].getRevision().equals(remoteResource.getLastChangedRevision())) { indexRemote = i; break; } } if(indexRemote > -1) { urls[indexRemote] = remoteResource.getUrl(); } // we get the url of more recent revisions SVNUrl currentUrl = remoteResource.getUrl(); for (int i = indexRemote+1; i < logMessages.length;i++) { ISVNLogMessageChangePath[] changePaths = logMessages[i].getChangedPaths(); for (int j = 0; j < changePaths.length;j++) { SVNUrl urlChangedPath = rootRepositoryUrl.appendPath(changePaths[j].getPath()); if (currentUrl.equals(urlChangedPath)) { urls[i] = currentUrl; break; } if (changePaths[j].getCopySrcPath() != null) { SVNUrl urlCopyPath = rootRepositoryUrl.appendPath(changePaths[j].getCopySrcPath()); if (currentUrl.equals(urlCopyPath)) { currentUrl = rootRepositoryUrl.appendPath(changePaths[j].getPath()); urls[i] = currentUrl; break; } } } if (urls[i] == null) { // something went wrong return fillUrlsWith(urls, remoteResource.getUrl()); } } // we get the url of previous revisions currentUrl = remoteResource.getUrl(); for (int i = indexRemote-1; i >= 0;i--) { ISVNLogMessageChangePath[] changePaths = logMessages[i].getChangedPaths(); for (int j = 0; j < changePaths.length;j++) { SVNUrl urlChangedPath = rootRepositoryUrl.appendPath(changePaths[j].getPath()); if (currentUrl.equals(urlChangedPath)) { urls[i] = currentUrl; if (changePaths[j].getCopySrcPath() != null) { SVNUrl urlCopyPath = rootRepositoryUrl.appendPath(changePaths[j].getCopySrcPath()); currentUrl = urlCopyPath; } break; } } if (urls[i] == null) { // something went wrong return fillUrlsWith(urls, remoteResource.getUrl()); } } return urls; } private Tags[] getTags(ISVNLogMessage[] logMessages) throws NumberFormatException { Tags[] tags = new Tags[logMessages.length]; for (int i = 0; i < logMessages.length;i++) { if (tagManager != null) { String rev = logMessages[i].getRevision().toString(); int revNo = Integer.parseInt(rev); tags[i] = new Tags(tagManager.getTags(revNo)); } } return tags; } } GetRemoteResourceCommand.java000066400000000000000000000075501203611042400437140ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.RemoteFile; import org.tigris.subversion.subclipse.core.resources.RemoteFolder; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNNodeKind; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * Command to get a remote resource given a url and a revision */ public class GetRemoteResourceCommand implements ISVNCommand { private ISVNRepositoryLocation repository; private SVNUrl url; private SVNRevision revision; private ISVNRemoteResource remoteResource; /** * revision must not be SVNRevision.BASE ! * @param repository * @param url * @param revision */ public GetRemoteResourceCommand(ISVNRepositoryLocation repository, SVNUrl url, SVNRevision revision) { this.repository = repository; this.url = url; this.revision = revision; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.commands.ISVNCommand#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(IProgressMonitor monitor) throws SVNException { monitor = Policy.monitorFor(monitor); monitor.beginTask(Policy.bind("GetRemoteResourceCommand.getLogEntries"), 100); //$NON-NLS-1$ remoteResource = null; ISVNClientAdapter svnClient = repository.getSVNClient(); ISVNInfo info; try { info = svnClient.getInfo(url, revision, revision); } catch (SVNClientException e) { throw new SVNException("Can't get remote resource "+url+" at revision "+revision,e); } finally { repository.returnSVNClient(svnClient); } if (info == null) { remoteResource = null; // no remote file } else { if (info.getNodeKind() == SVNNodeKind.FILE) remoteResource = new RemoteFile( null, // we don't know its parent repository, url, revision, info.getLastChangedRevision(), info.getLastChangedDate(), info.getLastCommitAuthor() ); else remoteResource = new RemoteFolder( null, // we don't know its parent repository, url, revision, info.getLastChangedRevision(), info.getLastChangedDate(), info.getLastCommitAuthor() ); } monitor.done(); } /** * get the result of the command * @return */ public ISVNRemoteResource getRemoteResource() { return remoteResource; } } GetStatusCommand.java000066400000000000000000000100061203611042400422220ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2003, 2004 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNStatusKind; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * Command to get the statuses of local resources */ public class GetStatusCommand implements ISVNCommand { private ISVNRepositoryLocation repository; private IResource resource; private boolean descend = true; private boolean getAll = true; private ISVNStatus[] svnStatuses; public GetStatusCommand(ISVNLocalResource svnResource, boolean descend, boolean getAll) { this.repository = svnResource.getRepository(); this.resource = svnResource.getIResource(); this.descend = descend; this.getAll = getAll; } public GetStatusCommand(ISVNRepositoryLocation repository, IResource resource, boolean descend, boolean getAll) { this.repository = repository; this.resource = resource; this.descend = descend; this.getAll = getAll; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.commands.ISVNCommand#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(IProgressMonitor monitor) throws SVNException { ISVNClientAdapter svnClient = repository.getSVNClient(); try { svnStatuses = svnClient.getStatus(resource.getLocation().toFile(), descend, getAll); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { repository.returnSVNClient(svnClient); } } private LocalResourceStatus[] convert(ISVNStatus[] statuses) { LocalResourceStatus[] localStatuses = new LocalResourceStatus[statuses.length]; for (int i = 0; i < statuses.length;i++) { localStatuses[i] = new LocalResourceStatus(statuses[i], getURL(statuses[i])); } return localStatuses; } // getStatuses returns null URL for svn:externals folder. This will // get the URL using svn info command on the local resource private String getURL(ISVNStatus status) { ISVNClientAdapter svnClient = null; String url = status.getUrlString(); if (url == null && !(status.getTextStatus() == SVNStatusKind.UNVERSIONED)) { try { svnClient = repository.getSVNClient(); ISVNInfo info = svnClient.getInfoFromWorkingCopy(status.getFile()); SVNUrl svnurl = info.getUrl(); url = (svnurl != null) ? svnurl.toString() : null; } catch (SVNException e) { } catch (SVNClientException e) { } finally { repository.returnSVNClient(svnClient); } } return url; } /** * get the results * @return */ public ISVNStatus[] getStatuses() { return svnStatuses; } /** * get the results * @return */ public LocalResourceStatus[] getLocalResourceStatuses() { return convert(svnStatuses); } } ISVNCommand.java000066400000000000000000000016231203611042400410630ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.SVNException; /** * */ public interface ISVNCommand { /** * execute the command * @param monitor * @throws SVNException */ public abstract void run(IProgressMonitor monitor) throws SVNException; }ImportCommand.java000066400000000000000000000047051203611042400415620ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import java.io.File; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.subclipse.core.client.OperationProgressNotifyListener; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; /** * Import local folder to repository */ public class ImportCommand implements ISVNCommand { private ISVNRemoteFolder folder; private File dir; String comment; boolean recurse; public ImportCommand(ISVNRemoteFolder folder, File dir, String comment, boolean recurse) { super(); this.folder = folder; this.dir = dir; this.comment = comment; this.recurse = recurse; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.commands.ISVNCommand#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(IProgressMonitor monitor) throws SVNException { final IProgressMonitor subPm = Policy.infiniteSubMonitorFor(monitor, 100); ISVNClientAdapter svnClient = null; try { subPm.beginTask(null, Policy.INFINITE_PM_GUESS_FOR_SWITCH); svnClient = folder.getRepository().getSVNClient(); OperationManager.getInstance().beginOperation(svnClient, new OperationProgressNotifyListener(subPm, svnClient)); svnClient.doImport(dir, folder.getUrl(), comment, recurse); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { folder.getRepository().returnSVNClient(svnClient); OperationManager.getInstance().endOperation(); subPm.done(); } } } LockResourcesCommand.java000066400000000000000000000065001203611042400430660ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import java.io.File; import java.util.Set; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.subclipse.core.client.OperationResourceCollector; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; /** * Lock resources * */ public class LockResourcesCommand implements ISVNCommand { // resources to lock private IResource[] resources; // lock comment -- may be null private String message; // steal the lock from other owner private boolean force; private SVNWorkspaceRoot root; private boolean refreshLocal; private OperationResourceCollector operationResourceCollector = new OperationResourceCollector(); public LockResourcesCommand(SVNWorkspaceRoot root, IResource[] resources, boolean force, String message, boolean refreshLocal) { this.resources = resources; this.message = message; this.force = force; this.root = root; this.refreshLocal = refreshLocal; } public LockResourcesCommand(SVNWorkspaceRoot root, IResource[] resources, boolean force, String message) { this(root, resources, force, message, true); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.commands.ISVNCommand#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(IProgressMonitor monitor) throws SVNException { final ISVNClientAdapter svnClient = root.getRepository().getSVNClient(); final File[] resourceFiles = new File[resources.length]; for (int i = 0; i < resources.length;i++) resourceFiles[i] = resources[i].getLocation().toFile(); try { monitor.beginTask(null, 100); svnClient.addNotifyListener(operationResourceCollector); OperationManager.getInstance().beginOperation(svnClient); svnClient.lock(resourceFiles,message,force); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { Set operationResources = operationResourceCollector.getOperationResources(); OperationManager.getInstance().endOperation(true, operationResources, refreshLocal); if (svnClient != null) { svnClient.removeNotifyListener(operationResourceCollector); root.getRepository().returnSVNClient(svnClient); } monitor.done(); } } } MergeCommand.java000066400000000000000000000067041203611042400413500ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import java.io.File; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.subclipse.core.client.OperationProgressNotifyListener; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class MergeCommand implements ISVNCommand { // selected resource private IResource resource; private SVNUrl svnUrl1; private SVNUrl svnUrl2; private SVNRevision svnRevision1; private SVNRevision svnRevision2; private SVNWorkspaceRoot root; private boolean force = false; private boolean ignoreAncestry = false; private boolean recurse = true; public MergeCommand(SVNWorkspaceRoot root, IResource resource, SVNUrl svnUrl1, SVNRevision svnRevision1, SVNUrl svnUrl2, SVNRevision svnRevision2) { super(); this.root = root; this.resource = resource; this.svnUrl1 = svnUrl1; this.svnRevision1 = svnRevision1; this.svnUrl2 = svnUrl2; this.svnRevision2 = svnRevision2; } public void run(IProgressMonitor monitor) throws SVNException { ISVNClientAdapter svnClient = null; try { monitor.beginTask(null, 100); svnClient = root.getRepository().getSVNClient(); OperationManager.getInstance().beginOperation(svnClient, new OperationProgressNotifyListener(monitor, svnClient)); monitor.subTask(resource.getName()); File file = resource.getLocation().toFile(); svnClient.merge(svnUrl1, svnRevision1, svnUrl2, svnRevision2, file, force, recurse, false, ignoreAncestry); try { // Refresh the resource after merge resource.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); } catch (CoreException e1) { } monitor.worked(100); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { root.getRepository().returnSVNClient(svnClient); OperationManager.getInstance().endOperation(); monitor.done(); } } public void setForce(boolean force) { this.force = force; } public void setIgnoreAncestry(boolean ignoreAncestry) { this.ignoreAncestry = ignoreAncestry; } public void setRecurse(boolean recurse) { this.recurse = recurse; } } ResolveResourcesCommand.java000066400000000000000000000055701203611042400436230ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import java.util.Set; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.subclipse.core.client.OperationResourceCollector; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; /** * Mark a conflicted resource as being resolved. This will also remove the .mine and .r* files */ public class ResolveResourcesCommand implements ISVNCommand { private final SVNWorkspaceRoot root; private final IResource[] resources; private final int resolution; private OperationResourceCollector operationResourceCollector = new OperationResourceCollector(); public ResolveResourcesCommand(SVNWorkspaceRoot root, IResource[] resources, int resolution) { this.root = root; this.resources = resources; this.resolution = resolution; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.commands.ISVNCommand#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(IProgressMonitor monitor) throws SVNException { ISVNClientAdapter svnClient = root.getRepository().getSVNClient(); try { svnClient.addNotifyListener(operationResourceCollector); OperationManager.getInstance().beginOperation(svnClient); for (int i = 0; i < resources.length; i++) { svnClient.resolve(resources[i].getLocation().toFile(), resolution); monitor.worked(100); } } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { Set operationResources = operationResourceCollector.getOperationResources(); OperationManager.getInstance().endOperation(true, operationResources); if (svnClient != null) { svnClient.removeNotifyListener(operationResourceCollector); root.getRepository().returnSVNClient(svnClient); } monitor.done(); } } } RevertResourcesCommand.java000066400000000000000000000210371203611042400434470ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import java.io.File; import java.text.Collator; import java.util.Arrays; import java.util.Comparator; import java.util.LinkedHashSet; import java.util.Set; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceVisitor; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.core.util.Util; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNNodeKind; /** * Revert changes made to the local verion of a file. This is equivalent to replace with base revision */ public class RevertResourcesCommand implements ISVNCommand { private final SVNWorkspaceRoot root; private final IResource[] resources; private IResource[] resourcesToRevert; private boolean recurse = false; private IProject project; public RevertResourcesCommand(SVNWorkspaceRoot root, IResource[] resources) { this.root = root; this.resources = resources; } // derived from org.eclipse.team.internal.ui.Sorter // Compares IResources by their full path. Uses Comparator because that accounts for // situations like // /foo // /foo/file // /foobar // /foobar/file // where if ordered using string compare, foobar would come after foo and before foo/file, // and that would break the parent/child ordering of the array public static final Comparator resourceComparator = new Comparator() { Collator collator = Collator.getInstance(); public boolean equals(Object obj) { return false; } public int compare(Object o1, Object o2) { IResource resource0 = (IResource) o1; IResource resource1 = (IResource) o2; return collator.compare(resource0.getFullPath().toString(), resource1.getFullPath().toString()); } }; /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.commands.ISVNCommand#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(IProgressMonitor monitor) throws SVNException { final Set propertiesOnlyFolders = new LinkedHashSet(); // sort first, so that all children of a folder directly follow it in the array Arrays.sort( resources, resourceComparator ); ISVNClientAdapter svnClient = root.getRepository().getSVNClient(); try { final OperationManager operationManager = OperationManager.getInstance(); operationManager.beginOperation(svnClient); // If we are doing a recursive revert, take snapshot of resources for // local history first. Also remove unversioned resources. if (recurse && resourcesToRevert != null) { for (int i = 0; i < resourcesToRevert.length; i++) { if (project == null || resourcesToRevert[i].getProject().equals(project)) { try { Util.saveLocalHistory(resourcesToRevert[i]); } catch (CoreException e) { SVNProviderPlugin.log(IStatus.ERROR, e.getMessage(), e); } LocalResourceStatus status = SVNWorkspaceRoot.getSVNResourceFor( resourcesToRevert[i] ).getStatus(); if (!(resourcesToRevert[i].getType() == IResource.FOLDER) || !status.isAdded()) { if (!status.isManaged()) { try { resourcesToRevert[i].delete(true, monitor); } catch (CoreException ex) { throw SVNException.wrapException(ex); } } } } } } for (int i = 0; i < resources.length; i++) { LocalResourceStatus status = SVNWorkspaceRoot.getSVNResourceFor( resources[i] ).getStatus(); // If a folder add is reverted, all the adds underneath it will be reverted too. // Don't try to revert them. Because the resources are sorted by path we can just // keep going along the IResource array until we find one that doesn't have the // current as a base path. if (resources[i].getType() == IResource.FOLDER && status.isAdded()) { svnClient.revert(resources[i].getLocation().toFile(), true); propertiesOnlyFolders.add(resources[i]); monitor.worked(100); // Add the subdirectories to the list of resources which must // be refreshed. try { resources[i].accept(new IResourceVisitor() { public boolean visit(IResource aResource) { if (aResource.getType() == IResource.FOLDER) { operationManager.onNotify(aResource.getLocation().toFile(), SVNNodeKind.UNKNOWN); // This is necessary for folders, that are ignored after the revert propertiesOnlyFolders.add(aResource); } return true; } }, IResource.DEPTH_INFINITE, false); } catch (CoreException e) { SVNProviderPlugin.log(Status.WARNING, "", e); } // If folder path has no ending / we can have problem where dir foobar will look like subdir of foo String baseFullPath = resources[i].getFullPath().addTrailingSeparator().toString(); while (i < resources.length - 1 && resources[i+1].getFullPath().toString().startsWith( baseFullPath )) { monitor.worked(100); i++; } } else { if (!status.isManaged()) { try { resources[i].delete(true, monitor); } catch (CoreException ex) { throw SVNException.wrapException(ex); } } else { if (!recurse) { try { Util.saveLocalHistory(resources[i]); } catch (CoreException e) { SVNProviderPlugin.log(IStatus.ERROR, e.getMessage(), e); } } File path = resources[i].getLocation().toFile(); svnClient.revert(path, recurse); // If only properties were changed, svn 1.4.0 does not // notify the change. As workaround, do it manually. if (resources[i].getType() != IResource.FILE) { operationManager.onNotify(path, SVNNodeKind.UNKNOWN); propertiesOnlyFolders.add(resources[i]); } monitor.worked(100); } } } } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { root.getRepository().returnSVNClient(svnClient); if (propertiesOnlyFolders.size() > 0) { OperationManager.getInstance().endOperation(true, propertiesOnlyFolders); } else { OperationManager.getInstance().endOperation(); } monitor.done(); } } public void setRecurse(boolean recurse) { this.recurse = recurse; } public void setResourcesToRevert(IResource[] resourcesToRevert) { this.resourcesToRevert = resourcesToRevert; } public void setProject(IProject project) { this.project = project; } } ShareProjectCommand.java000066400000000000000000000124241203611042400426760ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.ISVNRunnable; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.subclipse.core.client.OperationProgressNotifyListener; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; /** *

* Create a remote directory in the SVN repository and link the project * directory to this remote directory. *

*

* The contents of the project are not imported. *

*

* If location is not in repositories, it is added *

*/ public class ShareProjectCommand implements ISVNCommand { protected ISVNRepositoryLocation location; protected IProject project; protected String remoteDirName; protected String comment; protected boolean createDirectory; /** * if remoteDirName is null, the name of the project is used */ public ShareProjectCommand(ISVNRepositoryLocation location, IProject project, String remoteDirName, boolean createDirectory) { this.location = location; this.project = project; if (remoteDirName == null) { this.remoteDirName = project.getName(); } else { this.remoteDirName = remoteDirName; } this.createDirectory = createDirectory; } public ShareProjectCommand(ISVNRepositoryLocation location, IProject project) { this(location, project, null, true); } /* * (non-Javadoc) * * @see org.tigris.subversion.subclipse.core.commands.ISVNCommand#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(IProgressMonitor monitor) throws SVNException { // Determine if the repository is known boolean alreadyExists = SVNProviderPlugin.getPlugin().getRepositories() .isKnownRepository(location.getLocation(), false); final ISVNClientAdapter svnClient = location.getSVNClient(); try { // perform the workspace modifications in a runnable SVNProviderPlugin.run(new ISVNRunnable() { public void run(IProgressMonitor pm) throws SVNException { String message; if (comment == null) message = Policy.bind("SVNProvider.initialImport"); //$NON-NLS-1$ else message = comment; try { // create the remote dir SVNUrl url = location.getUrl().appendPath(remoteDirName); if (createDirectory) svnClient.mkdir(url, true, message); try { OperationManager.getInstance().beginOperation(svnClient, new OperationProgressNotifyListener(pm, svnClient)); // checkout it so that we have .svn // If directory already existed in repository, do recursive checkout. svnClient.checkout(url, project.getLocation() .toFile(), SVNRevision.HEAD, !createDirectory); } finally { OperationManager.getInstance().endOperation(); } } catch (SVNClientException e) { throw new SVNException( "Error while creating module: " + e.getMessage(), e); } // SharingWizard.doesSVNDirectoryExist calls // getStatus on the folder which populates the // status cache // Need to clear the cache so we can get the new // hasRemote value SVNProviderPlugin.getPlugin() .getStatusCacheManager().refreshStatus( project, true); try { //Register it with Team. RepositoryProvider.map(project, SVNProviderPlugin .getTypeId()); } catch (TeamException e) { throw new SVNException("Cannot register project with svn provider",e); } } }, monitor); } catch (SVNException e) { // The checkout may have triggered password caching // Therefore, if this is a newly created location, we want to clear // its cache if (!alreadyExists) SVNProviderPlugin.getPlugin().getRepositories() .disposeRepository(location); throw e; } finally { location.returnSVNClient(svnClient); } // Add the repository if it didn't exist already if (!alreadyExists) SVNProviderPlugin.getPlugin().getRepositories() .addOrUpdateRepository(location); } public void setComment(String comment) { this.comment = comment; } }SwitchToUrlCommand.java000066400000000000000000000114651203611042400425400ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import java.io.File; import java.util.Set; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.subclipse.core.client.OperationProgressNotifyListener; import org.tigris.subversion.subclipse.core.client.OperationResourceCollector; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNNodeKind; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * Switch URL for selected resource */ public class SwitchToUrlCommand implements ISVNCommand { // resource to switch private IResource resource; private SVNUrl svnUrl; private SVNRevision svnRevision; private SVNWorkspaceRoot root; private int depth = ISVNCoreConstants.DEPTH_UNKNOWN; private boolean setDepth = false; private boolean ignoreExternals = false; private boolean force = true; private boolean ignoreAncestry = false; private ISVNConflictResolver conflictResolver; private OperationResourceCollector operationResourceCollector = new OperationResourceCollector(); public SwitchToUrlCommand(SVNWorkspaceRoot root, IResource resource, SVNUrl svnUrl, SVNRevision svnRevision) { super(); this.root = root; this.resource = resource; this.svnUrl = svnUrl; this.svnRevision = svnRevision; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.commands.ISVNCommand#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(IProgressMonitor monitor) throws SVNException { final IProgressMonitor subPm = Policy.infiniteSubMonitorFor(monitor, 100); ISVNClientAdapter svnClient = null; try { subPm.beginTask(null, Policy.INFINITE_PM_GUESS_FOR_SWITCH); svnClient = root.getRepository().getSVNClient(); if (conflictResolver != null) { svnClient.addConflictResolutionCallback(conflictResolver); } svnClient.addNotifyListener(operationResourceCollector); OperationManager.getInstance().beginOperation(svnClient, new OperationProgressNotifyListener(subPm, svnClient)); File file = resource.getLocation().toFile(); svnClient.switchToUrl(file, svnUrl, svnRevision, svnRevision, depth, setDepth, ignoreExternals, force, ignoreAncestry); OperationManager.getInstance().onNotify(resource.getLocation().toFile(), SVNNodeKind.UNKNOWN); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { Set operationResources = operationResourceCollector.getOperationResources(); if (operationResources.size() == 0) { IResource[] resources = SVNWorkspaceRoot.getResourcesFor(resource); for (IResource refreshResource : resources) { operationResources.add(refreshResource); } } OperationManager.getInstance().endOperation(true, operationResources); if (svnClient != null) { if (conflictResolver != null) { svnClient.addConflictResolutionCallback(null); } root.getRepository().returnSVNClient(svnClient); } subPm.done(); } } public void setConflictResolver(ISVNConflictResolver conflictResolver) { this.conflictResolver = conflictResolver; } public void setDepth(int depth) { this.depth = depth; } public void setSetDepth(boolean setDepth) { this.setDepth = setDepth; } public void setIgnoreExternals(boolean ignoreExternals) { this.ignoreExternals = ignoreExternals; } public void setForce(boolean force) { this.force = force; } public void setIgnoreAncestry(boolean ignoreAncestry) { this.ignoreAncestry = ignoreAncestry; } } UnlockResourcesCommand.java000066400000000000000000000056101203611042400434320ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import java.io.File; import java.util.Set; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.subclipse.core.client.OperationResourceCollector; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; /** * Unlock resources * */ public class UnlockResourcesCommand implements ISVNCommand { // resources to unlock private IResource[] resources; // break the lock of another owner private boolean force; private SVNWorkspaceRoot root; private OperationResourceCollector operationResourceCollector = new OperationResourceCollector(); public UnlockResourcesCommand(SVNWorkspaceRoot root, IResource[] resources, boolean force) { this.resources = resources; this.force = force; this.root = root; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.commands.ISVNCommand#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(IProgressMonitor monitor) throws SVNException { final ISVNClientAdapter svnClient = root.getRepository().getSVNClient(); final File[] resourceFiles = new File[resources.length]; for (int i = 0; i < resources.length;i++) resourceFiles[i] = resources[i].getLocation().toFile(); try { monitor.beginTask(null, 100); svnClient.addNotifyListener(operationResourceCollector); OperationManager.getInstance().beginOperation(svnClient); svnClient.unlock(resourceFiles, force); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { Set operationResources = operationResourceCollector.getOperationResources(); OperationManager.getInstance().endOperation(true, operationResources); svnClient.removeNotifyListener(operationResourceCollector); root.getRepository().returnSVNClient(svnClient); monitor.done(); } } } UpdateResourcesCommand.java000066400000000000000000000122121203611042400434150ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commands/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.commands; import java.io.File; import java.util.LinkedHashSet; import java.util.Set; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.subclipse.core.client.OperationProgressNotifyListener; import org.tigris.subversion.subclipse.core.client.OperationResourceCollector; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * Update the given resources in the given project to the given revision * * @author Cedric Chabanois (cchab at tigris.org) */ public class UpdateResourcesCommand implements ISVNCommand { private SVNWorkspaceRoot root; private IResource[] resources; private SVNRevision revision; private int depth = ISVNCoreConstants.DEPTH_UNKNOWN; private boolean setDepth = false; private boolean ignoreExternals = false; private boolean force = true; private Set updatedResources = new LinkedHashSet(); private ISVNConflictResolver conflictResolver; private OperationResourceCollector operationResourceCollector = new OperationResourceCollector(); /** * Update the given resources. * BEWARE ! The resource array has to be sorted properly, so parent folder (incoming additions) are updated sooner than their children. * BEWARE ! For incoming deletions, it has to be opposite. * WATCH OUT ! These two statements mean that you CANNOT have both additions and deletions within the same call !!! * When doing recursive call, it's obviously not an issue ... * @param root * @param resources * @param revision */ public UpdateResourcesCommand(SVNWorkspaceRoot root, IResource[] resources, SVNRevision revision) { this.root = root; this.resources = resources; this.revision = revision; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.commands.ISVNCommand#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(final IProgressMonitor monitor) throws SVNException { ISVNClientAdapter svnClient = root.getRepository().getSVNClient(); if (conflictResolver != null) { svnClient.addConflictResolutionCallback(conflictResolver); } try { monitor.beginTask(null, 100 * resources.length); svnClient.addNotifyListener(operationResourceCollector); OperationManager.getInstance().beginOperation(svnClient, new OperationProgressNotifyListener(monitor, svnClient)); if (resources.length == 1) { monitor.subTask(resources[0].getName()); svnClient.update(resources[0].getLocation().toFile(),revision, depth, setDepth, ignoreExternals, force); updatedResources.add(resources[0]); monitor.worked(100); } else { File[] files = new File[resources.length]; for (int i = 0; i < resources.length; i++) { files[i] = resources[i].getLocation().toFile(); updatedResources.add(resources[i]); } svnClient.update(files, revision, depth, setDepth, ignoreExternals, force); monitor.worked(100); } } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { Set operationResources = operationResourceCollector.getOperationResources(); OperationManager.getInstance().endOperation(true, operationResources); if (conflictResolver != null) { svnClient.addConflictResolutionCallback(null); } svnClient.removeNotifyListener(operationResourceCollector); root.getRepository().returnSVNClient(svnClient); monitor.done(); } } public void setConflictResolver(ISVNConflictResolver conflictResolver) { this.conflictResolver = conflictResolver; } public void setDepth(int depth) { this.depth = depth; } public void setSetDepth(boolean setDepth) { this.setDepth = setDepth; } public void setIgnoreExternals(boolean ignoreExternals) { this.ignoreExternals = ignoreExternals; } public void setForce(boolean force) { this.force = force; } }UpgradeResourcesCommand.java000066400000000000000000000033151203611042400435660ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/commandspackage org.tigris.subversion.subclipse.core.commands; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; public class UpgradeResourcesCommand implements ISVNCommand { private final SVNWorkspaceRoot root; private final IResource[] resources; public UpgradeResourcesCommand(SVNWorkspaceRoot root, IResource[] resources) { this.root = root; this.resources = resources; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.commands.ISVNCommand#run(org.eclipse.core.runtime.IProgressMonitor) */ public void run(IProgressMonitor monitor) throws SVNException { ISVNClientAdapter svnClient = null; try { monitor.beginTask(null, 100 * resources.length); svnClient = root.getRepository().getSVNClient(); OperationManager.getInstance().beginOperation(svnClient); for (int i = 0; i < resources.length; i++) { svnClient.upgrade(resources[i].getLocation().toFile()); monitor.worked(100); } } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { root.getRepository().returnSVNClient(svnClient); OperationManager.getInstance().endOperation(); monitor.done(); } } } 000077500000000000000000000000001203611042400360405ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/historyAlias.java000066400000000000000000000037711203611042400377440ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/history/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.history; public class Alias implements Comparable { private int revision; private String name; private String relativePath; private boolean branch; private String url; public Alias() { super(); } public Alias(int revision, String name, String relativePath, String url) { this(); this.revision = revision; this.name = name; this.relativePath = relativePath; this.url = url; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getRelativePath() { return relativePath; } public void setRelativePath(String relativePath) { this.relativePath = relativePath; } public int getRevision() { return revision; } public void setRevision(int revision) { this.revision = revision; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public boolean equals(Object object) { if (!(object instanceof Alias)) return false; return ((Alias)object).getName().equals(name); } public String toString() { return revision + "," + name + "," + relativePath + " URL: " + url; } public int compareTo(Object object) { Alias compare = (Alias)object; if (revision > compare.getRevision()) return 1; if (compare.getRevision() > revision) return -1; return 0; } public boolean isBranch() { return branch; } public void setBranch(boolean branch) { this.branch = branch; } } AliasManager.java000066400000000000000000000173561203611042400412430ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/history/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.history; import java.io.BufferedReader; import java.io.StringReader; import java.util.ArrayList; import java.util.Arrays; import org.eclipse.core.resources.IResource; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNProperty; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNUrl; public class AliasManager { private ArrayList aliases = new ArrayList(); public AliasManager(IResource resource) { Alias[] aliasArray = getAliases(resource); Arrays.sort(aliasArray); for (Alias alias : aliasArray) { aliases.add(alias); } } public AliasManager(IResource resource, boolean checkParents) { Alias[] aliasArray = getAliases(resource, checkParents); Arrays.sort(aliasArray); for (Alias alias : aliasArray) { aliases.add(alias); } } public AliasManager(SVNUrl url) { Alias[] aliasArray = getAliases(url); Arrays.sort(aliasArray); for (Alias alias : aliasArray) { aliases.add(alias); } } public Alias[] getTags(int revision) { ArrayList revisionAliases = new ArrayList(); for (Alias alias : aliases) { if (alias.getRevision() >= revision && !alias.isBranch()) { revisionAliases.add(alias); } } Alias[] aliasArray = new Alias[revisionAliases.size()]; revisionAliases.toArray(aliasArray); for (Alias alias : aliasArray) { aliases.remove(alias); } return aliasArray; } public Alias[] getTags() { ArrayList tags = new ArrayList(); for (Alias tag : aliases) { if (!tag.isBranch()) { tags.add(tag); } } Alias[] tagArray = new Alias[tags.size()]; tags.toArray(tagArray); return tagArray; } public Alias[] getBranches() { ArrayList branches = new ArrayList(); for (Alias branch : aliases) { if (branch.isBranch()) { branches.add(branch); } } Alias[] branchArray = new Alias[branches.size()]; branches.toArray(branchArray); return branchArray; } public Alias getAlias(String revisionNamePathBranch, String url) { boolean branch = false; Alias alias = null; if (revisionNamePathBranch != null && revisionNamePathBranch.length() > 0) { String[] aliasParts = revisionNamePathBranch.split(","); if (aliasParts.length > 1) { int revision; try { revision = Integer.parseInt(aliasParts[0]); } catch (Exception e) { return null; } String name = aliasParts[1]; String relativePath = null; if (aliasParts.length > 2) { relativePath = aliasParts[2]; } if (aliasParts.length > 3) { branch = aliasParts[3].equalsIgnoreCase("branch"); } alias = new Alias(revision, name, relativePath, url); alias.setBranch(branch); } } return alias; } public static String getAliasesAsString(Alias[] aliases) { if (aliases == null) return ""; StringBuffer stringBuffer = new StringBuffer(); for (int i = 0; i < aliases.length; i++) { if (i != 0) stringBuffer.append(", "); stringBuffer.append(aliases[i].getName()); } return stringBuffer.toString(); } public static String transformUrl(IResource resource, Alias alias) { String aliasUrl = alias.getUrl(); String a; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); ISVNRepositoryLocation repository = svnResource.getRepository(); if (svnResource.getUrl().toString().length() <= aliasUrl.length()) a = ""; else a = svnResource.getUrl().toString().substring(aliasUrl.length()); String b = repository.getUrl().toString(); String c; if (alias.getRelativePath() == null) c = ""; else c = alias.getRelativePath(); return b + c + a; } public Alias[] getAliases(IResource resource) { Alias[] aliases = getAliases(resource, true); Arrays.sort(aliases); return aliases; } private Alias[] getAliases(IResource resource, boolean checkParents) { ArrayList aliases = new ArrayList(); if (resource != null) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); try { if (svnResource.isManaged()) { ISVNProperty property = null; property = svnResource.getSvnProperty("subclipse:tags"); //$NON-NLS-1$ if (property != null && property.getValue() != null) getAliases(aliases, property.getValue(), svnResource.getUrl().toString()); if (checkParents) { IResource checkResource = resource; while (checkResource.getParent() != null) { checkResource = checkResource.getParent(); Alias[] parentAliases = getAliases(checkResource, false); for (Alias parentAlias : parentAliases) { if (aliases.contains(parentAlias)) { Alias checkAlias = (Alias)aliases.get(aliases.indexOf(parentAlias)); if (parentAlias.getRevision() < checkAlias.getRevision()) { aliases.remove(checkAlias); aliases.add(parentAlias); } } else aliases.add(parentAlias); } } } } } catch (SVNException e) { } } Alias[] aliasArray = new Alias[aliases.size()]; aliases.toArray(aliasArray); return aliasArray; } public Alias[] getAliases(SVNUrl url) { Alias[] aliases = getAliases(url, true); Arrays.sort(aliases); return aliases; } private Alias[] getAliases(SVNUrl url, boolean checkParents) { ArrayList aliases = new ArrayList(); ISVNClientAdapter client = null; try { client = SVNProviderPlugin.getPlugin().getSVNClient(); ISVNProperty property = null; SVNProviderPlugin.disableConsoleLogging(); property = client.propertyGet(url, "subclipse:tags"); SVNProviderPlugin.enableConsoleLogging(); if (property != null && property.getValue() != null) { getAliases(aliases, property.getValue(), url.toString()); } else { if (url.getParent() != null && checkParents) return getAliases(url.getParent(), checkParents); } } catch (SVNClientException e) { } catch (SVNException e) { } finally { SVNProviderPlugin.enableConsoleLogging(); SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } Alias[] aliasArray = new Alias[aliases.size()]; aliases.toArray(aliasArray); return aliasArray; } private void getAliases(ArrayList aliases, String propertyValue, String url) { StringReader reader = new StringReader(propertyValue); BufferedReader bReader = new BufferedReader(reader); try { String line = bReader.readLine(); while (line != null) { Alias alias = getAlias(line, url); if (aliases.contains(alias)) { Alias checkAlias = aliases.get(aliases.indexOf(alias)); if (alias.getRevision() < checkAlias.getRevision()) { aliases.remove(checkAlias); aliases.add(alias); } } else { if (alias != null) { aliases.add(alias); } } line = bReader.readLine(); } bReader.close(); } catch (Exception e) {} } } Branches.java000066400000000000000000000016211203611042400404300ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/history/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.history; public class Branches { private Alias[] branches; public Branches() { super(); } public Branches(Alias[] branches) { this(); this.branches = branches; } public Alias[] getBranches() { return branches; } public void setBranches(Alias[] branches) { this.branches = branches; } } ILogEntry.java000066400000000000000000000051171203611042400405630ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/history/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.history; import java.util.Date; import org.eclipse.core.runtime.IAdaptable; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNResource; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * Instances of ILogEntry represent an entry for a SVN file that results * from the svn log command. * */ public interface ILogEntry extends IAdaptable { /** * Get the revision for the entry */ public SVNRevision.Number getRevision(); /** * Get the author of the revision */ public String getAuthor(); /** * Get the date the revision was committed */ public Date getDate(); /** * Get the comment for the revision */ public String getComment(); /** * Get the remote file for this entry
* Returns null if this cannot be determined (which is the case * when we ask the history of a folder) */ public ISVNRemoteResource getRemoteResource(); /** * get the resource for which we asked history */ public ISVNResource getResource(); /** * get the change paths */ public LogEntryChangePath[] getLogEntryChangePaths(); /** * Get the tags for the revision */ public Alias[] getTags(); /** * Set the tags for the revision */ public void setTags(Alias[] tags); /** * Returns the number of child log messages. When merge-sensitive * log option was specified. * @return the number of revisions merged by this commit */ public long getNumberOfChildren(); /** * Returns the child log messages. When merge-sensitive * log option was specified. * @return the revisions merged by this commit */ public ILogEntry[] getChildMessages(); /** * Returns the merged revisions as a String * when merge-sensitive log option was specified. * @return the revisions merged by this commit in String form. */ public String getMergedRevisionsAsString(); } LogEntry.java000066400000000000000000000266341203611042400404610ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/history/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.history; import java.text.SimpleDateFormat; import java.util.Date; import org.eclipse.core.runtime.PlatformObject; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNResource; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.resources.RemoteFile; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.ISVNLogMessage; import org.tigris.subversion.svnclientadapter.ISVNLogMessageChangePath; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * represent an entry for a SVN file that results * from the svn log command. */ public class LogEntry extends PlatformObject implements ILogEntry { private ISVNRemoteResource remoteResource; // the corresponding remote resource private ISVNLogMessage logMessage; private ISVNResource resource; // the resource for which we asked the history private Alias[] tags; private String messageOverride = null; // Log comment may be overridden private String authorOverride = null; // Author names may be overridden private static SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss z"); /** * creates a LogEntry * @param logMessage * @param resource the corresponding remote resource or null * @param repository */ private LogEntry( ISVNLogMessage logMessage, ISVNResource resource, ISVNRemoteResource remoteResource, Alias[] tags) { this.logMessage = logMessage; this.remoteResource = remoteResource; this.resource = resource; this.tags = tags; } /** * create the LogEntry for the logMessages * @param logMessages * @return */ public static ILogEntry[] createLogEntriesFrom(ISVNRemoteFolder remoteFolder, ISVNLogMessage[] logMessages, Tags[] tags) { // if we get the history for a folder, we get the history for all // its members // so there is no remoteResource associated with each LogEntry ILogEntry[] result = new ILogEntry[logMessages.length]; for (int i = 0; i < logMessages.length;i++) { result[i] = new LogEntry(logMessages[i], remoteFolder, null, (tags[i] != null) ? tags[i].getTags() : null); } return result; } /** * create the LogEntry for the logMessages * @param logMessages * @return */ public static ILogEntry[] createLogEntriesFrom(ISVNRemoteFile remoteFile, ISVNLogMessage[] logMessages, Tags[] tags, SVNUrl[] urls) { ILogEntry[] result = new ILogEntry[logMessages.length]; for (int i = 0; i < logMessages.length;i++) { ISVNLogMessage logMessage = logMessages[i]; ISVNRemoteResource correspondingResource; correspondingResource = new RemoteFile( null, remoteFile.getRepository(), urls[i], logMessage.getRevision(), logMessage.getRevision(), logMessage.getDate(), logMessage.getAuthor()); result[i] = new LogEntry(logMessage, remoteFile, correspondingResource, (tags[i] != null) ? tags[i].getTags() : null); } return result; } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.core.history.ILogEntry#getRevision() */ public SVNRevision.Number getRevision() { return logMessage.getRevision(); } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.core.history.ILogEntry#getAuthor() */ public String getAuthor() { if (authorOverride != null) { return authorOverride; } return logMessage.getAuthor(); } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.core.history.ILogEntry#getDate() */ public Date getDate() { return logMessage.getDate(); } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.core.history.ILogEntry#getComment() */ public String getComment() { if (messageOverride != null) { return messageOverride; } if (logMessage.getMessage() == null) return ""; return logMessage.getMessage(); } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.core.history.ILogEntry#getResource() */ public ISVNResource getResource() { return resource; } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.core.history.ILogEntry#getRemoteResource() */ public ISVNRemoteResource getRemoteResource() { return remoteResource; } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.core.history.ILogEntry#getLogEntryChangePaths() */ public LogEntryChangePath[] getLogEntryChangePaths() { ISVNLogMessageChangePath[] changePaths = null; if (SVNProviderPlugin.getPlugin().getSVNClientManager().isFetchChangePathOnDemand()) { SVNUrl url = resource.getRepository().getRepositoryRoot(); if (url == null) url = updateRootUrl(resource); changePaths = getPathsOnDemand(url); if (changePaths == null) { // Root URL is probably bad. Run svn info to retrieve the root URL and // update it in the repository. SVNUrl url2 = updateRootUrl(resource); if (!url.toString().equals(url2.toString())) changePaths = getPathsOnDemand(url); // one last try using the resource URL if (changePaths == null) changePaths = getPathsOnDemand(resource.getUrl()); // Still nothing, just return an empty array if (changePaths == null) changePaths = new ISVNLogMessageChangePath[0]; } } else { changePaths = logMessage.getChangedPaths(); } LogEntryChangePath[] logEntryChangePaths = new LogEntryChangePath[changePaths.length]; for (int i = 0; i < changePaths.length; i++) { logEntryChangePaths[i] = new LogEntryChangePath(this,changePaths[i]); } return logEntryChangePaths; } /** * @param resource * @return rootURL */ private SVNUrl updateRootUrl(ISVNResource resource) { ISVNClientAdapter client = null; try { client = SVNProviderPlugin.getPlugin().getSVNClient(); SVNProviderPlugin.disableConsoleLogging(); ISVNInfo info = client.getInfo(resource.getUrl()); SVNProviderPlugin.enableConsoleLogging(); if (info.getRepository() == null) return resource.getUrl(); else { // update the saved root URL resource.getRepository().setRepositoryRoot(info.getRepository()); return info.getRepository(); } } catch (Exception e) { SVNProviderPlugin.enableConsoleLogging(); return resource.getUrl(); } finally { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } } private ISVNLogMessageChangePath[] getPathsOnDemand(SVNUrl url) { ISVNLogMessage[] tmpMessage; ISVNClientAdapter client = null; try { client = SVNProviderPlugin.getPlugin().getSVNClient(); // errors will not log to console SVNProviderPlugin.disableConsoleLogging(); tmpMessage = client.getLogMessages(url, getRevision(), getRevision(), true); SVNProviderPlugin.enableConsoleLogging(); if (tmpMessage != null && tmpMessage.length > 0) return tmpMessage[0].getChangedPaths(); else return null; } catch (Exception e) { SVNProviderPlugin.enableConsoleLogging(); return null; } finally { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } } /* (non-Javadoc) * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) */ public Object getAdapter(Class adapter) { if (adapter.isInstance(remoteResource)) { return remoteResource; } return super.getAdapter(adapter); } /** * Re-sets the comment after changing it as a revision property. * @param newComment */ public void setComment(String newComment) { messageOverride = newComment; } /** * Re-sets the author after changing it as a revision property. * @param newAuthor */ public void setAuthor(String newAuthor) { authorOverride = newAuthor; } public Alias[] getTags() { return tags; } public void setTags(Alias[] tags) { this.tags = tags; } public long getNumberOfChildren() { return logMessage.getNumberOfChildren(); } public ILogEntry[] getChildMessages() { ISVNLogMessage[] childMessages = logMessage.getChildMessages(); if (childMessages == null) return null; ILogEntry[] childEntries = new ILogEntry[childMessages.length]; for (int i = 0; i < childMessages.length; i++) { childEntries[i] = new LogEntry(childMessages[i], resource, remoteResource, null); } return childEntries; } public String getMergedRevisionsAsString() { ILogEntry[] childMessages = getChildMessages(); if (childMessages == null || childMessages.length == 0) return ""; StringBuffer mergedRevisions = new StringBuffer(); for (int i = 0; i < childMessages.length; i++) { if (i > 0) mergedRevisions.append(", "); mergedRevisions.append(childMessages[i].getRevision().getNumber()); } return mergedRevisions.toString(); } public String getChangeLog(boolean includeAffectedPaths) { StringBuffer log = new StringBuffer("r" + getRevision()); if (getAuthor() != null) log.append(" | " + getAuthor()); if (getDate() != null) log.append(" | " + formatDate()); if (includeAffectedPaths) { log.append("\nChanged paths:"); LogEntryChangePath[] changePaths = getLogEntryChangePaths(); for (int i = 0; i < changePaths.length; i++) { log.append("\n\t" + changePaths[i].getAction() + " " + changePaths[i].getPath()); } } if (getComment() != null && getComment().trim().length() > 0) log.append("\n\n" + getComment()); log.append("\n----------------------------------------------------------------------------\n"); return log.toString(); } public String getGnuLog() { StringBuffer log = new StringBuffer(); if (getDate() != null) log.append(formatDate()); if (getAuthor() != null) log.append(" " + getAuthor()); if (getComment() != null && getComment().trim().length() > 0) { String tabbedComment = "\t" + getComment().replaceAll("\n", "\n\t"); log.append("\n\n" + tabbedComment); } log.append("\n\n"); return log.toString(); } private String formatDate() { return format.format(getDate()); } } LogEntryChangePath.java000066400000000000000000000106571203611042400424020ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/history/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.history; import org.eclipse.core.runtime.PlatformObject; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.commands.GetRemoteResourceCommand; import org.tigris.subversion.svnclientadapter.ISVNLogMessageChangePath; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * A changePath in LogEntry * @see ISVNLogMessageChangePath */ public class LogEntryChangePath extends PlatformObject { private ISVNLogMessageChangePath logMessageChangePath; private ILogEntry logEntry; private ISVNRemoteResource remoteResource; public LogEntryChangePath(ILogEntry logEntry, ISVNLogMessageChangePath logMessageChangePath) { this.logMessageChangePath = logMessageChangePath; this.logEntry = logEntry; } /** * Retrieve the path to the commited item * @return the path to the commited item */ public String getPath() { return logMessageChangePath.getPath(); } /** * Retrieve the copy source revision (if any) * @return the copy source revision (if any) */ public SVNRevision.Number getCopySrcRevision() { return logMessageChangePath.getCopySrcRevision(); } /** * Retrieve the copy source path (if any) * @return the copy source path (if any) */ public String getCopySrcPath() { return logMessageChangePath.getCopySrcPath(); } /** * Retrieve action performed * @return action performed */ public char getAction() { return logMessageChangePath.getAction(); } /** * @return Returns the logEntry. */ public ILogEntry getLogEntry() { return logEntry; } private ISVNRepositoryLocation getRepository() { return logEntry.getResource().getRepository(); } /** * get the url corresponding to this changed path or null if it cannot * be determined */ public SVNUrl getUrl() { SVNUrl repositoryRoot = getRepository().getRepositoryRoot(); if (repositoryRoot != null) { return repositoryRoot.appendPath(getPath()); } else { return null; } } public SVNRevision getRevision() { return logEntry.getRevision(); } /** * get the remote resource corresponding to this changed path or null * if it cannot be determined * @return * @throws SVNException */ public ISVNRemoteResource getRemoteResource() throws SVNException { SVNRevision revision = getRevision(); if (getAction() == 'D') { long rev = Long.parseLong(revision.toString()); rev--; revision = new SVNRevision.Number(rev); } SVNUrl url = getUrl(); if (url == null) { return null; } if (remoteResource == null) { GetRemoteResourceCommand command = new GetRemoteResourceCommand(getRepository(), url, revision); command.run(null); remoteResource = command.getRemoteResource(); } return remoteResource; } /* * (non-Javadoc) * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) */ public Object getAdapter(Class adapter) { // Could the specfied adapter possibly be a remote resource? if (ISVNRemoteResource.class.isAssignableFrom(adapter)) { ISVNRemoteResource aRemoteResource = null; try { aRemoteResource = getRemoteResource(); } catch (SVNException e) { } // Is the actual resource type compatible with the requested type? if (adapter.isInstance(aRemoteResource)) { return aRemoteResource; } } return super.getAdapter(adapter); } } Tags.java000066400000000000000000000015341203611042400376040ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/history/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.history; public class Tags { private Alias[] tags; public Tags() { super(); } public Tags(Alias[] tags) { this(); this.tags = tags; } public Alias[] getTags() { return tags; } public void setTags(Alias[] tags) { this.tags = tags; } }000077500000000000000000000000001203611042400361535ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/internalInfiniteSubProgressMonitor.java000066400000000000000000000055151203611042400443400ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/internal/******************************************************************************* * copied from: org.eclipse.team.internal.core.InfiniteSubProgressMonitor * * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.tigris.subversion.subclipse.core.internal; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.SubProgressMonitor; /** * Provides an infinite progress monitor by subdividing by half repeatedly. * * The ticks parameter represents the number of ticks shown in the progress dialog * (or propogated up to a parent IProgressMonitor). The totalWork parameter provided * in actually a hint used to determine how work is translated into ticks. * The number of totalWork that can actually be worked is n*totalWork/2 where * 2^n = totalWork. What this means is that if you provide a totalWork of 32 (2^5) than * the maximum number of ticks is 5*32/2 = 80. * */ public class InfiniteSubProgressMonitor extends SubProgressMonitor { int totalWork; int halfWay; int currentIncrement; int nextProgress; int worked; /** * Constructor for InfiniteSubProgressMonitor. * @param monitor * @param ticks */ public InfiniteSubProgressMonitor(IProgressMonitor monitor, int ticks) { this(monitor, ticks, 0); } /** * Constructor for InfiniteSubProgressMonitor. * @param monitor * @param ticks * @param style */ public InfiniteSubProgressMonitor(IProgressMonitor monitor, int ticks, int style) { super(monitor, ticks, style); } public void beginTask(String name, int total) { super.beginTask(name, total); this.totalWork = total; this.halfWay = total / 2; this.currentIncrement = 1; this.nextProgress = currentIncrement; this.worked = 0; } public void worked(int work) { if (worked >= totalWork) return; if (--nextProgress <= 0) { super.worked(1); worked++; if (worked >= halfWay) { // we have passed the current halfway point, so double the // increment and reset the halfway point. currentIncrement *= 2; halfWay += (totalWork - halfWay) / 2; } // reset the progress counter to another full increment nextProgress = currentIncrement; } } /** * Don't allow clearing of the subtask. This will stop the flickering * of the subtask in the progress dialogs. * * @see IProgressMonitor#subTask(String) */ public void subTask(String name) { if(name != null && ! name.equals("")) { //$NON-NLS-1$ super.subTask(name); } } } 000077500000000000000000000000001203611042400357725ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/mappingSVNActiveChangeSet.java000066400000000000000000000016321203611042400422230ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/mapping/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.mapping; import org.eclipse.team.internal.core.subscribers.ActiveChangeSet; import org.eclipse.team.internal.core.subscribers.ActiveChangeSetManager; /** * */ public class SVNActiveChangeSet extends ActiveChangeSet { public SVNActiveChangeSet(ActiveChangeSetManager manager, String title) { super(manager, title); } } SVNActiveChangeSetCollector.java000066400000000000000000000021041203611042400440650ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/mapping/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.mapping; import org.eclipse.team.core.subscribers.Subscriber; import org.eclipse.team.internal.core.subscribers.ActiveChangeSet; import org.eclipse.team.internal.core.subscribers.SubscriberChangeSetManager; /** * */ public class SVNActiveChangeSetCollector extends SubclipseSubscriberChangeSetManager { public SVNActiveChangeSetCollector(Subscriber subscriber) { super(subscriber); } protected ActiveChangeSet doCreateSet(String name) { return new SVNActiveChangeSet(this, name); } } SubclipseSubscriberChangeSetManager.java000066400000000000000000000350401203611042400456710ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/mapping/******************************************************************************* * Copyright (c) 2000, 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.tigris.subversion.subclipse.core.mapping; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.osgi.util.NLS; import org.eclipse.team.core.TeamException; import org.eclipse.team.core.diff.IDiff; import org.eclipse.team.core.mapping.provider.ResourceDiffTree; import org.eclipse.team.core.subscribers.Subscriber; import org.eclipse.team.internal.core.BackgroundEventHandler; import org.eclipse.team.internal.core.Messages; import org.eclipse.team.internal.core.Policy; import org.eclipse.team.internal.core.TeamPlugin; import org.eclipse.team.internal.core.subscribers.ActiveChangeSet; import org.eclipse.team.internal.core.subscribers.ActiveChangeSetManager; import org.eclipse.team.internal.core.subscribers.ChangeSet; import org.osgi.service.prefs.Preferences; /** * This class manages the active change sets associated with a subscriber. */ public class SubclipseSubscriberChangeSetManager extends ActiveChangeSetManager { private static final String PREF_CHANGE_SETS = "changeSets"; //$NON-NLS-1$ private static final int RESOURCE_REMOVAL = 1; private static final int RESOURCE_CHANGE = 2; private EventHandler handler; private ResourceCollector collector; /* * Background event handler for serializing and batching change set changes */ private class EventHandler extends BackgroundEventHandler { private List dispatchEvents = new ArrayList(); protected EventHandler(String jobName, String errorTitle) { super(jobName, errorTitle); } /* (non-Javadoc) * @see org.eclipse.team.internal.core.BackgroundEventHandler#processEvent(org.eclipse.team.internal.core.BackgroundEventHandler.Event, org.eclipse.core.runtime.IProgressMonitor) */ protected void processEvent(Event event, IProgressMonitor monitor) throws CoreException { // Handle everything in the dispatch if (isShutdown()) throw new OperationCanceledException(); dispatchEvents.add(event); } /* (non-Javadoc) * @see org.eclipse.team.internal.core.BackgroundEventHandler#doDispatchEvents(org.eclipse.core.runtime.IProgressMonitor) */ protected boolean doDispatchEvents(IProgressMonitor monitor) throws TeamException { if (dispatchEvents.isEmpty()) { return false; } if (isShutdown()) throw new OperationCanceledException(); ResourceDiffTree[] locked = null; try { locked = beginDispath(); for (Iterator iter = dispatchEvents.iterator(); iter.hasNext();) { Event event = (Event) iter.next(); switch (event.getType()) { case RESOURCE_REMOVAL: handleRemove(event.getResource()); break; case RESOURCE_CHANGE: handleChange(event.getResource(), ((ResourceEvent)event).getDepth()); break; default: break; } if (isShutdown()) throw new OperationCanceledException(); } } catch (CoreException e) { throw TeamException.asTeamException(e); } finally { try { endDispatch(locked, monitor); } finally { dispatchEvents.clear(); } } return true; } /* * Begin input on all the sets and return the sync sets that were * locked. If this method throws an exception then the client * can assume that no sets were locked */ private ResourceDiffTree[] beginDispath() { ChangeSet[] sets = getSets(); List lockedSets = new ArrayList(); try { for (int i = 0; i < sets.length; i++) { ActiveChangeSet set = (ActiveChangeSet)sets[i]; ResourceDiffTree tree = (ResourceDiffTree) set.getDiffTree(); lockedSets.add(tree); tree.beginInput(); } return (ResourceDiffTree[]) lockedSets.toArray(new ResourceDiffTree[lockedSets.size()]); } catch (RuntimeException e) { try { for (Iterator iter = lockedSets.iterator(); iter.hasNext();) { ResourceDiffTree tree = (ResourceDiffTree) iter.next(); try { tree.endInput(null); } catch (Throwable e1) { // Ignore so that original exception is not masked } } } catch (Throwable e1) { // Ignore so that original exception is not masked } throw e; } } private void endDispatch(ResourceDiffTree[] locked, IProgressMonitor monitor) { if (locked == null) { // The begin failed so there's nothing to unlock return; } monitor.beginTask(null, 100 * locked.length); for (int i = 0; i < locked.length; i++) { ResourceDiffTree tree = locked[i]; try { tree.endInput(Policy.subMonitorFor(monitor, 100)); } catch (RuntimeException e) { // Don't worry about ending every set if an error occurs. // Instead, log the error and suggest a restart. TeamPlugin.log(IStatus.ERROR, Messages.SubscriberChangeSetCollector_0, e); throw e; } } monitor.done(); } /* (non-Javadoc) * @see org.eclipse.team.internal.core.BackgroundEventHandler#queueEvent(org.eclipse.team.internal.core.BackgroundEventHandler.Event, boolean) */ protected synchronized void queueEvent(Event event, boolean front) { // Override to allow access from enclosing class super.queueEvent(event, front); } /* * Handle the removal */ private void handleRemove(IResource resource) { ChangeSet[] sets = getSets(); for (int i = 0; i < sets.length; i++) { ChangeSet set = sets[i]; // This will remove any descendants from the set and callback to // resourcesChanged which will batch changes if (!set.isEmpty()) { set.rootRemoved(resource, IResource.DEPTH_INFINITE); if (set.isEmpty()) { remove(set); } } } } /* * Handle the change */ private void handleChange(IResource resource, int depth) throws CoreException { IDiff diff = getDiff(resource); if (isModified(diff)) { ActiveChangeSet[] containingSets = getContainingSets(resource); if (containingSets.length == 0) { // Consider for inclusion in the default set // if the resource is not already a member of another set if (getDefaultSet() != null) { getDefaultSet().add(diff); } } else { for (int i = 0; i < containingSets.length; i++) { ActiveChangeSet set = containingSets[i]; // Update the sync info in the set set.add(diff); } } } else { removeFromAllSets(resource); } if (depth != IResource.DEPTH_ZERO) { IResource[] members = getSubscriber().members(resource); for (int i = 0; i < members.length; i++) { IResource member = members[i]; handleChange(member, depth == IResource.DEPTH_ONE ? IResource.DEPTH_ZERO : IResource.DEPTH_INFINITE); } } } private void removeFromAllSets(IResource resource) { List toRemove = new ArrayList(); ChangeSet[] sets = getSets(); for (int i = 0; i < sets.length; i++) { ChangeSet set = sets[i]; if (set.contains(resource)) { set.remove(resource); if (set.isEmpty()) { toRemove.add(set); } } } for (Iterator iter = toRemove.iterator(); iter.hasNext();) { ActiveChangeSet set = (ActiveChangeSet) iter.next(); remove(set); } } private ActiveChangeSet[] getContainingSets(IResource resource) { Set result = new HashSet(); ChangeSet[] sets = getSets(); for (int i = 0; i < sets.length; i++) { ChangeSet set = sets[i]; if (set.contains(resource)) { result.add(set); } } return (ActiveChangeSet[]) result.toArray(new ActiveChangeSet[result.size()]); } } private class ResourceCollector extends org.tigris.subversion.subclipse.core.mapping.SubclipseSubscriberResourceCollector { public ResourceCollector(Subscriber subscriber) { super(subscriber); } /* (non-Javadoc) * @see org.eclipse.team.internal.core.subscribers.SubscriberResourceCollector#remove(org.eclipse.core.resources.IResource) */ protected void remove(IResource resource) { if (handler != null) handler.queueEvent(new BackgroundEventHandler.ResourceEvent(resource, RESOURCE_REMOVAL, IResource.DEPTH_INFINITE), false); } /* (non-Javadoc) * @see org.eclipse.team.internal.core.subscribers.SubscriberResourceCollector#change(org.eclipse.core.resources.IResource, int) */ protected void change(IResource resource, int depth) { if (handler != null) handler.queueEvent(new BackgroundEventHandler.ResourceEvent(resource, RESOURCE_CHANGE, depth), false); } protected boolean hasMembers(IResource resource) { return SubclipseSubscriberChangeSetManager.this.hasMembers(resource); } } public SubclipseSubscriberChangeSetManager(Subscriber subscriber) { collector = new ResourceCollector(subscriber); handler = new EventHandler(NLS.bind(Messages.SubscriberChangeSetCollector_1, new String[] { subscriber.getName() }), NLS.bind(Messages.SubscriberChangeSetCollector_2, new String[] { subscriber.getName() })); // } /* (non-Javadoc) * @see org.eclipse.team.internal.core.subscribers.ChangeSetManager#initializeSets() */ protected void initializeSets() { load(getPreferences()); } public boolean hasMembers(IResource resource) { ChangeSet[] sets = getSets(); for (int i = 0; i < sets.length; i++) { ActiveChangeSet set = (ActiveChangeSet)sets[i]; if (set.getDiffTree().getChildren(resource.getFullPath()).length > 0) return true; } if (getDefaultSet() != null) return (getDefaultSet().getDiffTree().getChildren(resource.getFullPath()).length > 0); return false; } /** * Return the sync info for the given resource obtained * from the subscriber. * @param resource the resource * @return the sync info for the resource * @throws CoreException */ public IDiff getDiff(IResource resource) throws CoreException { Subscriber subscriber = getSubscriber(); return subscriber.getDiff(resource); } /** * Return the subscriber associated with this collector. * @return the subscriber associated with this collector */ public Subscriber getSubscriber() { return collector.getSubscriber(); } /* (non-Javadoc) * @see org.eclipse.team.internal.core.subscribers.SubscriberResourceCollector#dispose() */ public void dispose() { handler.shutdown(); collector.dispose(); super.dispose(); save(getPreferences()); } private Preferences getPreferences() { return getParentPreferences().node(getSubscriberIdentifier()); } private static Preferences getParentPreferences() { return getTeamPreferences().node(PREF_CHANGE_SETS); } private static Preferences getTeamPreferences() { return new InstanceScope().getNode(TeamPlugin.getPlugin().getBundle().getSymbolicName()); } /** * Return the id that will uniquely identify the subscriber across * restarts. * @return the id that will uniquely identify the subscriber across */ protected String getSubscriberIdentifier() { return getSubscriber().getName(); } /** * Wait until the collector is done processing any events. * This method is for testing purposes only. * @param monitor */ public void waitUntilDone(IProgressMonitor monitor) { monitor.worked(1); // wait for the event handler to process changes. while(handler.getEventHandlerJob().getState() != Job.NONE) { monitor.worked(1); try { Thread.sleep(10); } catch (InterruptedException e) { } Policy.checkCanceled(monitor); } monitor.worked(1); } /* (non-Javadoc) * @see org.eclipse.team.internal.core.subscribers.ActiveChangeSetManager#getName() */ protected String getName() { return getSubscriber().getName(); } } SubclipseSubscriberResourceCollector.java000066400000000000000000000227721203611042400462030ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/mapping/******************************************************************************* * Copyright (c) 2000, 2009 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.tigris.subversion.subclipse.core.mapping; import org.eclipse.core.resources.*; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Preferences.IPropertyChangeListener; import org.eclipse.core.runtime.Preferences.PropertyChangeEvent; import org.eclipse.team.core.subscribers.*; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; /** * This class acts as a superclass for any class that is collecting subscriber * resources. It provides functionality that listens to resource deltas and * subscriber change events in order to determine when the state of resources * that are supervised by a subscriber may have changed. */ public abstract class SubclipseSubscriberResourceCollector implements IResourceChangeListener, ISubscriberChangeListener, IPropertyChangeListener { private boolean ignoreManagedDerivedResources = SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_IGNORE_MANAGED_DERIVED_RESOURCES); Subscriber subscriber; /** * Create the collector and register it as a listener with the workspace * and the subscriber. * @param subscriber the subscriber to be associated with this collector */ public SubclipseSubscriberResourceCollector(Subscriber subscriber) { Assert.isNotNull(subscriber); this.subscriber = subscriber; ResourcesPlugin.getWorkspace().addResourceChangeListener(this, IResourceChangeEvent.POST_CHANGE); subscriber.addListener(this); SVNProviderPlugin.getPlugin().getPluginPreferences().addPropertyChangeListener(this); } /** * Returns the Subscriber associated with this collector. * * @return the Subscriber associated with this collector. */ public Subscriber getSubscriber() { return subscriber; } /** * De-register the listeners for this collector. */ public void dispose() { getSubscriber().removeListener(this); ResourcesPlugin.getWorkspace().removeResourceChangeListener(this); } /* (non-Javadoc) * @see org.eclipse.team.core.sync.ITeamResourceChangeListener#teamResourceChanged(org.eclipse.team.core.sync.TeamDelta[]) */ public void subscriberResourceChanged(ISubscriberChangeEvent[] deltas) { try { beginInput(); IResource[] roots = getRoots(); for (int i = 0; i < deltas.length; i++) { switch (deltas[i].getFlags()) { case ISubscriberChangeEvent.SYNC_CHANGED : if (isAllRootsIncluded() || isDescendantOfRoot(deltas[i].getResource(), roots)) { change(deltas[i].getResource(), IResource.DEPTH_ZERO); } break; case ISubscriberChangeEvent.ROOT_REMOVED : remove(deltas[i].getResource()); break; case ISubscriberChangeEvent.ROOT_ADDED : if (isAllRootsIncluded() || isDescendantOfRoot(deltas[i].getResource(), roots)) { change(deltas[i].getResource(), IResource.DEPTH_INFINITE); } break; } } } finally { endInput(); } } /** * This method is invoked at the beginning of a subscriber change event * or resource delta event. The endInput method will be invoked at some point * following this. There may be several invocations of remove or change * in between. */ protected void beginInput() { // Do nothing by default } /** * The processing of the resource or subscriber delta has finished. * Subclasses can accumulate removals and changes and handle them * at this point to allow batched change events. */ protected void endInput() { // Do nothing by default } /*(non-Javadoc) * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent) */ public void resourceChanged(IResourceChangeEvent event) { try { beginInput(); processDelta(event.getDelta(), getRoots()); } finally { endInput(); } } /** * Process the resource delta and posts all necessary events to the background * event handler. * * @param delta the resource delta to analyze */ protected void processDelta(IResourceDelta delta, IResource[] roots) { IResource resource = delta.getResource(); int kind = delta.getKind(); // Skip derived resources: << PATCH >> if (resource.isDerived()) { LocalResourceStatus aStatus = null; try { aStatus = SVNProviderPlugin.getPlugin().getStatusCacheManager().getStatusFromCache(resource); } catch (SVNException e) { SVNProviderPlugin.log(IStatus.ERROR, e.getMessage(), e); } if ((aStatus == null) || !aStatus.isManaged()) { return; } if (ignoreManagedDerivedResources) { return; } } if (resource.getType() == IResource.PROJECT) { // Handle projects that should be removed from the collector if (((kind & IResourceDelta.REMOVED) != 0) /* deleted project */ || (delta.getFlags() & IResourceDelta.OPEN) != 0 && !((IProject) resource).isOpen() /* closed project */ || !isAncestorOfRoot(resource, roots)) /* not within subscriber roots */ { // If the project has any entries in the sync set, remove them if (hasMembers(resource)) { remove(resource); } } } boolean visitChildren = false; if (isDescendantOfRoot(resource, roots)) { visitChildren = true; // If the resource has changed type, remove the old resource handle // and add the new one if ((delta.getFlags() & IResourceDelta.TYPE) != 0) { remove(resource); change(resource, IResource.DEPTH_INFINITE); } // Check the flags for changes the SyncSet cares about. // Notice we don't care about MARKERS currently. int changeFlags = delta.getFlags(); if ((changeFlags & (IResourceDelta.OPEN | IResourceDelta.CONTENT)) != 0) { change(resource, IResource.DEPTH_ZERO); } // Check the kind and deal with those we care about if ((delta.getKind() & (IResourceDelta.REMOVED | IResourceDelta.ADDED)) != 0) { change(resource, IResource.DEPTH_ZERO); } } if (resource.getType() == IFolder.FOLDER) { visitChildren = false; } // Handle changed children if (visitChildren || isAncestorOfRoot(resource, roots)) { IResourceDelta[] affectedChildren = delta.getAffectedChildren(IResourceDelta.CHANGED | IResourceDelta.REMOVED | IResourceDelta.ADDED); for (int i = 0; i < affectedChildren.length; i++) { processDelta(affectedChildren[i], roots); } } } /** * Return the root resources that are to be considered by this handler. * These may be either the subscriber roots or a set of resources that are * contained by the subscriber's roots. * @return the root resources that are to be considered by this handler */ protected IResource[] getRoots() { return getSubscriber().roots(); } /** * Return whether the given resource, which is not * within the roots of this handler, has children * that are. * @param resource the resource * @return whether the resource has children that are being considered * by this handler. */ protected abstract boolean hasMembers(IResource resource); /** * The resource is no longer of concern to the subscriber. * Remove the resource and any of it's descendants * from the set of resources being collected. * @param resource the resource to be removed along with its * descendants. */ protected abstract void remove(IResource resource); /** * The resource sync state has changed to the depth specified. * @param resource the resource * @param depth the depth */ protected abstract void change(IResource resource, int depth); /** * Return whether all roots of a subscriber are included or * if the collector is only consider a subset of the resources. * @return whether all roots of a subscriber are included */ protected boolean isAllRootsIncluded() { return true; } private boolean isAncestorOfRoot(IResource parent, IResource[] roots) { // Always traverse into projects in case a root was removed if (parent.getType() == IResource.ROOT) return true; for (int i = 0; i < roots.length; i++) { IResource resource = roots[i]; if (parent.getFullPath().isPrefixOf(resource.getFullPath())) { return true; } } return false; } private boolean isDescendantOfRoot(IResource resource, IResource[] roots) { for (int i = 0; i < roots.length; i++) { IResource root = roots[i]; if (root.getFullPath().isPrefixOf(resource.getFullPath())) { return true; } } return false; } public void propertyChange(PropertyChangeEvent event) { if (event.getProperty().equals(ISVNCoreConstants.PREF_IGNORE_MANAGED_DERIVED_RESOURCES)) { ignoreManagedDerivedResources = SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_IGNORE_MANAGED_DERIVED_RESOURCES); } } } messages.properties000066400000000000000000000121701203611042400402650ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core#****************************************************************************** # Copyright (c) 2003, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ AddDeleteMoveListener.Error_creating_deletion_marker_1=Error creating deletion marker. AddDeleteMoveListener.Error_updating_marker_state_4=Error updating marker state. AddDeleteMoveListener.deletedResource='{0}' has been deleted locally. RemoteFile.getContents=Retrieving remote file contents... RemoteFile.getLogEntries=Retrieving log entries... RemoteFolder.doesNotExist=Folder ''{0}'' does not exist remotely. RemoteFolder.getMembers=Retrieving children of remote folder... RemoteFolder.createRemoteFolder=Creating remote folder ResourceDeltaVisitor.visitError=Error while processing resource deltas. SVNProvider.Creating_project_1=Creating project ''{0}'' SVNProvider.Scrubbing_local_project_1=Scrubbing local project ''{0}'' SVNProvider.alreadyExists=The specified repository location already exists. SVNProvider.errorLoading=Error loading state. SVNProvider.errorSaving=Error saving state. SVNProvider.infoMismatch=Provided SVN information does not match that on disk for project ''{0}''. SVNProvider.initialImport=Initial import. SVNProvider.ioException=I/O Exception occurred on the state file. SVNProvider.rename=An I/O Exception occurred while renaming the state file ''{0}''. SVNProvider.save=An I/O Exception occurred while saving the state file ''{0}''. SVNProviderPlugin.unknownStateFileVersion=Could not read SVN state file: unknown version ''{0}''. SVNRepositories.refresh=Refreshing repository locations... SVNRepositoryLocation.errorCaching=Error occurred while saving password for ''{0}''. SVNRepositoryLocation.errorFlushing=Error occurred while flushing password for ''{0}''. SVNRepositoryLocation.invalidFormat=Invalid SVN repository location format: ''{0}''. SVNRepositoryLocation.locationForm=Location must have form 'protocol://hostname:[port]/path/to/repository'. SVNTeamProvider.ErrorSettingIgnorePattern=Cannot set ignored pattern on ''{0}''. SVNTeamProvider.noFolderInfo=Project ''{0}'' does not contain SVN folder meta-information. SVNTeamProvider.visitError=An error occurred while visiting resource ''{0}''. SVNTeamProviderType_0=Auto-sharing imported subversion projects SVNTeamProviderType_1=Upgrade Working Copy SVNTeamProviderType_2=\ appears to be managed by Subversion, but the working copy needs to be upgraded. Do you want to upgrade the working copy now?\n\nWarning: This operation cannot be undone. SVNTeamProviderType_3=\ retries, failing. SVNTeamProviderType_4=\ to source control SVNTeamProviderType_5=" was created in a subversion SVNWorkspaceRoot.notSVNFolder=The SVN synchronization information for ''{0}'' has become corrupt or does not exist. SVNWorkspaceRoot.nullResource=An error was encountered retrieving the Eclipse resource for: ''{0}''. SVNWorkspaceRoot.nullResource.2=The typical cause of this problem is that the case of the drive letter and/or path of this file in Eclipse, SVNWorkspaceRoot.nullResource.3=does not match the operating system. The value shown previously is the OS path. The project may need to SVNWorkspaceRoot.nullResource.4=reloaded into Eclipse with the correct path to resolve the problem. This problem may effect several projects SVNWorkspaceRoot.nullResource.5=but we try to send this message only once per session. This may only effect the JavaHL SVN adapter. SVNWorkspaceRoot.nullResource.6=See: http://subclipse.tigris.org/faq.html#path-case for background information. SyncFileChangeListener.errorSettingTeamPrivateFlag=Error setting team-private flag on resource. SVNWorkspaceSubscriber.errorWhileSynchronizing.1=Problems reported while synchronizing {0}. {1} of {2} resources were synchronized. SVNWorkspaceSubscriber.errorWhileSynchronizing.2=An error occurred synchronizing {0}: {1} SVNWorkspaceSubscriber.retrievingSynchronizationData=Retrieving svn synchronization data SVNWorkspaceSubscriber.refreshingSynchronizationData=Refreshing svn status data for {0}. SVNMoveDeleteHook.4=Could Not Delete Project SVNMoveDeleteHook.5=Project SVNMoveDeleteHook.6=\ could not be deleted due to locks on the SVN SQLite database. Please restart Eclipse and try again. SVNMoveHook.moveFileException=Cannot move a file to a location that is not managed by SVN. Try Team -> Copy followed by Delete. SVNMoveHook.moveFolderException=Cannot move a folder to a location that is not managed by SVN. Try Team -> Copy followed by Delete. LocalResource.errorGettingTeamProvider=Failed to get SVNTeamProvider for ''{0}'' ok=OK FileModificationValidator.someReadOnly=Some files are read-only. FileModificationValidator.fileIsReadOnly=File {0} is read-only. FileModificationValidator.editFailed=Files are read-only. # RevertResourceManager.jobName=Updating SVN status RevertResourceManager.reverting=Updating SVN status messages_ja.properties000066400000000000000000000213531203611042400407420ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) #****************************************************************************** # Copyright (c) 2005, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ #Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) AddDeleteMoveListener.Error_creating_deletion_marker_1 = \u524A\u9664\u30DE\u30FC\u30AB\u30FC\u3092\u4F5C\u6210\u4E2D\u306B\u30A8\u30E9\u30FC AddDeleteMoveListener.Error_updating_marker_state_4 = \u30DE\u30FC\u30AB\u30FC\u72B6\u614B\u3092\u66F4\u65B0\u4E2D\u306B\u30A8\u30E9\u30FC AddDeleteMoveListener.deletedResource = '{0}'\u306F\u30ED\u30FC\u30AB\u30EB\u3067\u524A\u9664\u3055\u308C\u3066\u3044\u307E\u3059\u3002 FileModificationValidator.editFailed = \u30D5\u30A1\u30A4\u30EB\u306F\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u3067\u3059\u3002 FileModificationValidator.fileIsReadOnly = \u30D5\u30A1\u30A4\u30EB {0} \u306F\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u3067\u3059\u3002 FileModificationValidator.someReadOnly = \u3044\u304F\u3064\u304B\u306E\u30D5\u30A1\u30A4\u30EB\u304C\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u3067\u3059\u3002 LocalResource.errorGettingTeamProvider = "{0}"\u306ESVN\u30C1\u30FC\u30E0\u30D7\u30ED\u30D0\u30A4\u30C0\u53D6\u5F97\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002 RemoteFile.getContents = \u30EA\u30E2\u30FC\u30C8\uFF65\u30D5\u30A1\u30A4\u30EB\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u691C\u7D22\u4E2D... RemoteFile.getLogEntries = \u30ED\u30B0\u30FB\u30A8\u30F3\u30C8\u30EA\u3092\u691C\u7D22\u4E2D... RemoteFolder.createRemoteFolder = \u30EA\u30E2\u30FC\u30C8\u30FB\u30D5\u30A9\u30EB\u30C0\u3092\u4F5C\u6210 RemoteFolder.doesNotExist = \u30D5\u30A9\u30EB\u30C0''{0}''\u306F\u30EA\u30E2\u30FC\u30C8\u306B\u5B58\u5728\u3057\u307E\u305B\u3093\u3002 RemoteFolder.getMembers = \u30EA\u30E2\u30FC\u30C8\uFF65\u30D5\u30A9\u30EB\u30C0\u306E\u5B50\u3092\u691C\u7D22\u4E2D... ResourceDeltaVisitor.visitError = \u30EA\u30BD\u30FC\u30B9\u306E\u5DEE\u5206\u3092\u8ABF\u67FB\u4E2D\u306B\u30A8\u30E9\u30FC SVNMoveHook.moveFileException = SVN\u7BA1\u7406\u3055\u308C\u3066\u3044\u306A\u3044\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u3078\u30D5\u30A1\u30A4\u30EB\u3092\u79FB\u52D5\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002\uFF62\u30C1\u30FC\u30E0\uFF63 -> \uFF62\u30B3\u30D4\u30FC\uFF63\u3092\u8A66\u3057\u3066\u307F\u3066\u304F\u3060\u3055\u3044\u3002 SVNMoveHook.moveFolderException = SVN\u7BA1\u7406\u3055\u308C\u3066\u3044\u306A\u3044\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u3078\u30D5\u30A9\u30EB\u30C0\u3092\u79FB\u52D5\u3059\u308B\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002\uFF62\u30C1\u30FC\u30E0\uFF63 -> \uFF62\u30B3\u30D4\u30FC\uFF63\u3092\u8A66\u3057\u3066\u307F\u3066\u304F\u3060\u3055\u3044\u3002 SVNProvider.Creating_project_1 = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8''{0}''\u3092\u4F5C\u6210 SVNProvider.Scrubbing_local_project_1 = \u30ED\u30FC\u30AB\u30EB\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8''{0}''\u306E\u6383\u9664 SVNProvider.alreadyExists = \u6307\u5B9A\u3057\u305F\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\uFF65\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u306F\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059\u3002 SVNProvider.errorLoading = \u72B6\u614B\u3092\u30ED\u30FC\u30C9\u4E2D\u306B\u30A8\u30E9\u30FC SVNProvider.errorSaving = \u72B6\u614B\u3092\u4FDD\u5B58\u4E2D\u306B\u30A8\u30E9\u30FC SVNProvider.infoMismatch = \u63D0\u4F9B\u3055\u308C\u305FSVN\u60C5\u5831\u304C\u30C7\u30A3\u30B9\u30AF\u4E0A\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8''{0}'\u306E\u60C5\u5831\u3068\u30DE\u30C3\u30C1\u3057\u307E\u305B\u3093\u3002 SVNProvider.initialImport = \u521D\u671F\u30A4\u30F3\u30DD\u30FC\u30C8 SVNProvider.ioException = \u72B6\u614B\u30D5\u30A1\u30A4\u30EB\u3067 I/O Exception \u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 SVNProvider.rename = \u72B6\u614B\u30D5\u30A1\u30A4\u30EB''{0}'\u306E\u540D\u524D\u5909\u66F4\u4E2D\u306B I/O Exception \u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 SVNProvider.save = \u72B6\u614B\u30D5\u30A1\u30A4\u30EB''{0}'\u3092\u4FDD\u5B58\u4E2D\u306B I/O Exception \u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 SVNProviderPlugin.unknownStateFileVersion = SVN\u72B6\u614B\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u307F\u8FBC\u3081\u307E\u305B\u3093 : \u672A\u77E5\u30D0\u30FC\u30B8\u30E7\u30F3"{0}" SVNRepositories.refresh = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306E\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u66F4\u65B0\u4E2D... SVNRepositoryLocation.errorCaching = ''{0}'\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u4FDD\u5B58\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 SVNRepositoryLocation.errorFlushing = ''{0}'\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u9001\u4FE1\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 SVNRepositoryLocation.invalidFormat = \u7121\u52B9\u306ASVN\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\uFF65\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\u5F62\u5F0F: ''{0}' SVNRepositoryLocation.locationForm = \u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u306F\u6B21\u306E\u5F62\u5F0F\u3067\u306A\u3051\u308C\u3070\u3044\u3051\u307E\u305B\u3093 : 'protocol://hostname:[port]/path/to/repository' SVNTeamProvider.ErrorSettingIgnorePattern = ''{0}'\u306B\u7121\u8996\u30D1\u30BF\u30FC\u30F3\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u305B\u3093\u3002 SVNTeamProvider.noFolderInfo = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8''{0}'\u306FSVN\u30D5\u30A9\u30EB\u30C0\u306E\u30E1\u30BF\u60C5\u5831\u3092\u542B\u3093\u3067\u3044\u307E\u305B\u3093\u3002 SVNTeamProvider.visitError = \u30EA\u30BD\u30FC\u30B9''{0}'\u3092\u8A2A\u554F\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 SVNWorkspaceRoot.notSVNFolder = ''{0}''\u306ESVN\u540C\u671F\u5316\u60C5\u5831\u304C\u4FE1\u983C\u3067\u304D\u306A\u3044\u3082\u3057\u304F\u306F\u5B58\u5728\u3057\u307E\u305B\u3093\u3002 SVNWorkspaceRoot.nullResource = \u6B21\u306EEclipse\u30EA\u30BD\u30FC\u30B9\u3092\u5FA9\u65E7\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F:"{0}" SVNWorkspaceRoot.nullResource.2 = \u3053\u306E\u554F\u984C\u306E\u5178\u578B\u7684\u306A\u539F\u56E0\u306F\u3001\u30C9\u30E9\u30A4\u30D6\u6587\u5B57\u3084Eclipse\u306E\u3053\u306E\u30D5\u30A1\u30A4\u30EB\u306E\u30D1\u30B9\u304C SVNWorkspaceRoot.nullResource.3 = OS\u306B\u9069\u5408\u3057\u3066\u3044\u306A\u3044\u3053\u3068\u3067\u3059\u3002\u5148\u306B\u793A\u3057\u305F\u5024\u306FOS\u30D1\u30B9\u3067\u3059\u3002\u554F\u984C\u3092\u89E3\u6C7A\u3059\u308B\u306B\u306F\u3001\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092Eclipse\u3078 SVNWorkspaceRoot.nullResource.4 = \u6B63\u3057\u3044\u30D1\u30B9\u3067\u30EA\u30ED\u30FC\u30C9\u3059\u308B\u5FC5\u8981\u304C\u3042\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002\u3053\u306E\u554F\u984C\u306F\u3044\u304F\u3064\u304B\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3067\u5F71\u97FF\u304C\u3042\u308B\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u304C\u3001 SVNWorkspaceRoot.nullResource.5 = \u3053\u306E\u30E1\u30C3\u30BB\u30FC\u30B8\u306F1\u30BB\u30C3\u30B7\u30E7\u30F3\u306B\u3064\u304D1\u5EA6\u3057\u304B\u8868\u793A\u3057\u307E\u305B\u3093\u3002\u3053\u308C\u306FJavaHL SVN\u30A2\u30C0\u30D7\u30BF\u306E\u307F\u306E\u554F\u984C\u304B\u3082\u3057\u308C\u307E\u305B\u3093\u3002 SVNWorkspaceRoot.nullResource.6 = \u8A73\u3057\u304F\u306FFAQ\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044: http://subclipse.tigris.org/faq.html#path-case SVNWorkspaceSubscriber.errorWhileSynchronizing.1 = {0}\u3092\u540C\u671F\u5316\u4E2D\u306B\u554F\u984C\u304C\u5831\u544A\u3055\u308C\u307E\u3057\u305F\u3002{2}\u500B\u306E\u3046\u3061{1}\u500B\u306E\u30EA\u30BD\u30FC\u30B9\u306F\u540C\u671F\u5316\u3055\u308C\u307E\u3057\u305F\u3002 SVNWorkspaceSubscriber.errorWhileSynchronizing.2 = {0}\u306E\u540C\u671F\u5316\u4E2D\u306B\u30A8\u30E9\u30FC\u767A\u751F: {1} SVNWorkspaceSubscriber.refreshingSynchronizationData = \u30EA\u30BD\u30FC\u30B9\u306E\u30C7\u30FC\u30BF\u3092\u66F4\u65B0\u4E2D {0} SVNWorkspaceSubscriber.retrievingSynchronizationData = \u540C\u671F\u5316\u30C7\u30FC\u30BF\u3092\u691C\u7D22\u4E2D... SyncFileChangeListener.errorSettingTeamPrivateFlag = \u30EA\u30BD\u30FC\u30B9\u306B\u30C1\u30FC\u30E0\u30FB\u30D7\u30E9\u30A4\u30D9\u30FC\u30C8\u30FB\u30D5\u30E9\u30B0\u3092\u8A2D\u5B9A\u4E2D\u306B\u30A8\u30E9\u30FC ok = OK messages_zh.properties000066400000000000000000000155221203611042400407720ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) #****************************************************************************** # Copyright (c) 2005, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ #Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) #Translated by fcoffee. AddDeleteMoveListener.Error_creating_deletion_marker_1 = \u521B\u5EFA\u5220\u9664\u6807\u8BB0\u65F6\u53D1\u751F\u9519\u8BEF\u3002 AddDeleteMoveListener.Error_updating_marker_state_4 = \u66F4\u65B0\u6807\u8BB0\u72B6\u6001\u65F6\u53D1\u751F\u9519\u8BEF\u3002 AddDeleteMoveListener.deletedResource = \u201C{0}\u201D\u5DF2\u88AB\u5220\u9664\u3002 FileModificationValidator.editFailed = \u6587\u4EF6\u5177\u6709\u53EA\u8BFB\u5C5E\u6027\u3002 FileModificationValidator.fileIsReadOnly = \u6587\u4EF6 {0} \u5177\u6709\u53EA\u8BFB\u5C5E\u6027\u3002 FileModificationValidator.someReadOnly = \u90E8\u5206\u6587\u4EF6\u5177\u6709\u53EA\u8BFB\u5C5E\u6027\u3002 LocalResource.errorGettingTeamProvider = \u83B7\u53D6 SVN \u5C0F\u7EC4\u63D0\u4F9B\u7A0B\u5E8F\u5931\u8D25\uFF1A\u201C{0}\u201D RemoteFile.getContents = \u6B63\u5728\u83B7\u53D6\u8FDC\u7A0B\u6587\u4EF6\u5185\u5BB9... RemoteFile.getLogEntries = \u6B63\u5728\u83B7\u53D6\u65E5\u5FD7\u6761\u76EE... RemoteFolder.createRemoteFolder = \u6B63\u5728\u521B\u5EFA\u8FDC\u7A0B\u6587\u4EF6\u5939 RemoteFolder.doesNotExist = \u6587\u4EF6\u5939\u201C{0}\u201D\u5DF2\u4E0D\u5B58\u5728\u3002 RemoteFolder.getMembers = \u6B63\u5728\u83B7\u53D6\u8FDC\u7A0B\u6587\u4EF6\u5939\u7684\u5B50\u6587\u4EF6\u5939... ResourceDeltaVisitor.visitError = \u5904\u7406\u8D44\u6E90\u5DEE\u5F02\u65F6\u53D1\u751F\u9519\u8BEF RevertResourceManager.jobName = \u66F4\u65B0 SVN \u72B6\u6001 RevertResourceManager.reverting = \u6B63\u5728\u66F4\u65B0 SVN \u72B6\u6001 SVNMoveHook.moveFileException = \u4E0D\u80FD\u5C06\u6587\u4EF6\u79FB\u52A8\u5230\u672A\u88AB SVN \u7BA1\u7406\u7684\u4F4D\u7F6E\u3002\u8BF7\u5C1D\u8BD5\u201C\u5C0F\u7EC4\u201D-> \u201C\u590D\u5236\u201D\u7136\u540E\u201C\u5220\u9664\u201D\u3002 SVNMoveHook.moveFolderException = \u4E0D\u80FD\u5C06\u6587\u4EF6\u5939\u79FB\u52A8\u5230\u672A\u88AB SVN \u7BA1\u7406\u4F4D\u7F6E\u3002\u8BF7\u5C1D\u8BD5\u201C\u5C0F\u7EC4\u201D-> \u201C\u590D\u5236\u201D\u7136\u540E\u201C\u5220\u9664\u201D\u3002 SVNProvider.Creating_project_1 = \u6B63\u5728\u521B\u5EFA\u9879\u76EE\u201C{0}\u201D SVNProvider.Scrubbing_local_project_1 = \u6E05\u7406\u672C\u5730\u9879\u76EE\u201C{0}\u201D SVNProvider.alreadyExists = \u6307\u5B9A\u7684\u8D44\u6E90\u5E93\u4F4D\u7F6E\u5DF2\u7ECF\u5B58\u5728\u3002 SVNProvider.errorLoading = \u8BFB\u53D6\u72B6\u6001\u65F6\u53D1\u751F\u9519\u8BEF\u3002 SVNProvider.errorSaving = \u4FDD\u5B58\u72B6\u6001\u65F6\u53D1\u751F\u9519\u8BEF\u3002 SVNProvider.infoMismatch = \u63D0\u4F9B\u7684 SVN \u4FE1\u606F\u4E0E\u78C1\u76D8\u4E0A\u201C{0}\u201D\u9879\u76EE\u7684\u4FE1\u606F\u4E0D\u76F8\u5339\u914D\u3002 SVNProvider.initialImport = \u521D\u59CB\u5BFC\u5165\u3002 SVNProvider.ioException = \u72B6\u6001\u6587\u4EF6\u53D1\u751F I/O \u5F02\u5E38\u3002 SVNProvider.rename = \u91CD\u547D\u540D\u72B6\u6001\u6587\u4EF6\u201C{0}\u201D\u65F6\u53D1\u751F I/O \u5F02\u5E38\u3002 SVNProvider.save = \u4FDD\u5B58\u72B6\u6001\u6587\u4EF6\u201C{0}\u201D\u65F6\u53D1\u751F I/O \u5F02\u5E38\u3002 SVNProviderPlugin.unknownStateFileVersion = \u4E0D\u80FD\u8BFB\u53D6 SVN \u72B6\u6001\u6587\u4EF6\uFF1A\u672A\u77E5\u7248\u672C\u201C{0}\u201D\u3002 SVNRepositories.refresh = \u6B63\u5728\u5237\u65B0\u8D44\u6E90\u5E93\u4F4D\u7F6E... SVNRepositoryLocation.errorCaching = \u4FDD\u5B58\u201C{0}\u201D\u7684\u5BC6\u7801\u65F6\u53D1\u751F\u9519\u8BEF\u3002 SVNRepositoryLocation.errorFlushing = \u66F4\u65B0\u201C{0}\u201D\u7684\u5BC6\u7801\u65F6\u53D1\u751F\u9519\u8BEF\u3002 SVNRepositoryLocation.invalidFormat = \u65E0\u6548 SVN \u8D44\u6E90\u5E93\u4F4D\u7F6E\u683C\u5F0F\uFF1A\u201C{0}\u201D\u3002 SVNRepositoryLocation.locationForm = \u4F4D\u7F6E\u683C\u5F0F\u5FC5\u987B\u7B26\u5408\uFF1A\u201Cprotocol://hostname:[port]/path/to/repository\u201D\u3002 SVNTeamProvider.ErrorSettingIgnorePattern = \u4E0D\u80FD\u8BBE\u7F6E\u201C{0}\u201D\u7684\u5FFD\u7565\u6A21\u5F0F\u3002 SVNTeamProvider.noFolderInfo = \u9879\u76EE\u201C{0}\u201D\u6CA1\u6709\u5305\u542B SVN \u6587\u4EF6\u5939\u5143\u4FE1\u606F\u3002 SVNTeamProvider.visitError = \u8BBF\u95EE\u8D44\u6E90\u201C{0}\u201D\u65F6\u53D1\u751F\u9519\u8BEF\u3002 SVNWorkspaceRoot.notSVNFolder = \u201C{0}\u201D\u7684 SVN \u540C\u6B65\u4FE1\u606F\u6709\u9519\u8BEF\u6216\u4E0D\u5B58\u5728\u3002 SVNWorkspaceRoot.nullResource = \u83B7\u53D6 Eclipse \u8D44\u6E90\u65F6\u53D1\u751F\u9519\u8BEF\uFF1A\u201C{0}\u201D\u3002 SVNWorkspaceRoot.nullResource.2 = \u8FD9\u4E2A\u95EE\u9898\u7684\u5178\u578B\u539F\u56E0\u662F Eclipse \u4E2D\u7684\u76D8\u7B26\u548C\uFF08\u6216\uFF09\u6587\u4EF6\u8DEF\u5F84\u4E0E\u64CD\u4F5C\u7CFB\u7EDF\u4E0D\u5339\u914D\u3002 SVNWorkspaceRoot.nullResource.3 = \u524D\u9762\u663E\u793A\u7684\u662F\u64CD\u4F5C\u7CFB\u7EDF\u7684\u8DEF\u5F84\u3002\u9879\u76EE\u53EF\u80FD\u9700\u8981\u4F7F\u7528\u6B63\u786E\u7684\u8DEF\u5F84\u91CD\u65B0\u5BFC\u5165\u5230 Eclipse \u4E2D\u4EE5\u89E3\u51B3\u6B64\u95EE\u9898\u3002 SVNWorkspaceRoot.nullResource.4 = \u8FD9\u4E2A\u95EE\u9898\u53EF\u80FD\u4F1A\u5F71\u54CD\u591A\u4E2A\u9879\u76EE\uFF0C\u4F46\u662F\u6BCF\u6B21\u4F1A\u8BDD\u6211\u4EEC\u53EA\u4F1A\u63D0\u793A\u4E00\u6B21\u6B64\u4FE1\u606F\u3002 SVNWorkspaceRoot.nullResource.5 = \u6B64\u95EE\u9898\u53EF\u80FD\u53EA\u5F71\u54CD JavaHL SVN \u9002\u914D\u5668\u3002\r\n SVNWorkspaceRoot.nullResource.6 = \u8BE6\u7EC6\u4FE1\u606F\u8BF7\u67E5\u770B FAQ\uFF1Ahttp://subclipse.tigris.org/faq.html#path-case SVNWorkspaceSubscriber.errorWhileSynchronizing.1 = \u540C\u6B65 {0} \u65F6\u62A5\u544A\u4E86\u9519\u8BEF\u3002{2} \u4E2D\u7684 {1} \u4E2A\u8D44\u6E90\u5DF2\u7ECF\u540C\u6B65\u3002 SVNWorkspaceSubscriber.errorWhileSynchronizing.2 = \u540C\u6B65 {0} \u65F6\u53D1\u751F\u9519\u8BEF\uFF1A{1} SVNWorkspaceSubscriber.refreshingSynchronizationData = \u6B63\u5728\u5237\u65B0\u8D44\u6E90\u6570\u636E {0} SVNWorkspaceSubscriber.retrievingSynchronizationData = \u6B63\u5728\u83B7\u53D6\u540C\u6B65\u6570\u636E... SyncFileChangeListener.errorSettingTeamPrivateFlag = \u5C06\u5C0F\u7EC4\u4E13\u6709\u6807\u5FD7\u8BBE\u7F6E\u7ED9\u8D44\u6E90\u65F6\u53D1\u751F\u9519\u8BEF\u3002 ok = \u786E\u5B9A messages_zh_TW.properties000066400000000000000000000146221203611042400414040ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) #****************************************************************************** # Copyright (c) 2005, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ #Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) AddDeleteMoveListener.Error_creating_deletion_marker_1 = \u5EFA\u7ACB\u522A\u9664\u6A19\u8A18\u6642\u767C\u751F\u932F\u8AA4 AddDeleteMoveListener.Error_updating_marker_state_4 = \u66F4\u65B0\u6A19\u8A18\u72C0\u614B\u6642\u767C\u751F\u932F\u8AA4 AddDeleteMoveListener.deletedResource = `{0}' \u5DF2\u522A\u9664 FileModificationValidator.editFailed = \u6A94\u6848\u70BA\u552F\u8B80\u72C0\u614B FileModificationValidator.fileIsReadOnly = \u6A94\u6848 {0} \u70BA\u552F\u8B80\u72C0\u614B FileModificationValidator.someReadOnly = \u90E8\u5206\u6A94\u6848\u70BA\u552F\u8B80\u72C0\u614B LocalResource.errorGettingTeamProvider = \u53D6\u5F97SVN\u5718\u968A\u63D0\u4F9B\u6A21\u7D44\u5931\u6557: ``{0}'' RemoteFile.getContents = \u6B63\u5728\u8B80\u53D6\u9060\u7AEF\u6A94\u6848\u5167\u5BB9 RemoteFile.getLogEntries = \u6B63\u5728\u8B80\u53D6\u65E5\u8A8C\u9805\u76EE RemoteFolder.createRemoteFolder = \u6B63\u5728\u5EFA\u7ACB\u9060\u7AEF\u8CC7\u6599\u593E RemoteFolder.doesNotExist = \u8CC7\u6599\u593E``{0}''\u4E0D\u5B58\u5728 RemoteFolder.getMembers = \u6B63\u5728\u8B80\u53D6\u9060\u7AEF\u8CC7\u6599\u593E\u7684\u5B50\u8CC7\u6599\u593E ResourceDeltaVisitor.visitError = \u8655\u7406\u8CC7\u6E90\u5DEE\u7570\u6642\u767C\u751F\u932F\u8AA4 SVNMoveHook.moveFileException = \u7121\u6CD5\u5C07\u6A94\u6848\u79FB\u5230\u672A\u53D7 SVN \u63A7\u7BA1\u7684\u4F4D\u7F6E\uFF0C\u8ACB\u5617\u8A66 ``\u5718\u968A'' -> ``\u8907\u88FD''\u4E4B\u5F8C\u518D\u9032\u884C``\u522A\u9664''\u3002 SVNMoveHook.moveFolderException = \u7121\u6CD5\u5C07\u8CC7\u6599\u593E\u79FB\u5230\u672A\u53D7 SVN \u63A7\u7BA1\u7684\u4F4D\u7F6E\uFF0C\u8ACB\u5617\u8A66 ``\u5718\u968A'' -> ``\u8907\u88FD''\u4E4B\u5F8C\u518D\u9032\u884C``\u522A\u9664''\u3002 SVNProvider.Creating_project_1 = \u6B63\u5728\u5EFA\u7ACB\u5C08\u6848``{0}'' SVNProvider.Scrubbing_local_project_1 = \u6E05\u7406\u672C\u5730\u7AEF\u5C08\u6848``{0}'' SVNProvider.alreadyExists = \u6307\u5B9A\u7684\u6A94\u6848\u5EAB\u4F4D\u7F6E\u5DF2\u5B58\u5728\u3002 SVNProvider.errorLoading = \u8B80\u53D6\u72C0\u614B\u6642\u767C\u751F\u932F\u8AA4\u3002 SVNProvider.errorSaving = \u5132\u5B58\u72C0\u614B\u6642\u767C\u751F\u932F\u8AA4\u3002 SVNProvider.infoMismatch = \u63D0\u4F9B\u7684 SVN \u8A0A\u606F\u8207\u786C\u789F\u4E0A``{0}''\u5C08\u6848\u7684\u8CC7\u6599\u4E0D\u76F8\u7B26\u3002 SVNProvider.initialImport = \u521D\u59CB\u532F\u5165 SVNProvider.ioException = \u72C0\u614B\u6A94\u767C\u751F I/O \u4F8B\u5916\u3002 SVNProvider.rename = \u91CD\u65B0\u547D\u540D\u6A94\u6848``{0}''\u6642\u767C\u751F I/O \u4F8B\u5916\u3002 SVNProvider.save = \u5132\u5B58\u72C0\u614B\u6A94``{0}''\u6642\u767C\u751F I/O \u4F8B\u5916\u3002 SVNProviderPlugin.unknownStateFileVersion = \u7121\u6CD5\u8B80\u53D6 SVN \u72C0\u614B\u6A94\u6848: \u672A\u77E5\u7248\u672C ``{0}''\u3002 SVNRepositories.refresh = \u6B63\u5728\u66F4\u65B0\u6A94\u6848\u5EAB\u4F4D\u7F6E... SVNRepositoryLocation.errorCaching = \u5132\u5B58``{0}''\u7684\u5BC6\u78BC\u6642\u767C\u751F\u932F\u8AA4\u3002 SVNRepositoryLocation.errorFlushing = \u66F4\u65B0``{0}''\u7684\u5BC6\u78BC\u6642\u767C\u751F\u932F\u8AA4\u3002 SVNRepositoryLocation.invalidFormat = SVN \u6A94\u6848\u5EAB\u4F4D\u7F6E\u683C\u5F0F\u932F\u8AA4: ``{0}''\u3002 SVNRepositoryLocation.locationForm = \u4F4D\u7F6E\u5FC5\u9700\u7B26\u5408\u4EE5\u4E0B\u683C\u5F0F: ``protocol://hostname:[port]/path/to/repository'' SVNTeamProvider.ErrorSettingIgnorePattern = \u7121\u6CD5\u8A2D``{0}''\u7684\u5FFD\u7565\u6A23\u5F0F\u3002 SVNTeamProvider.noFolderInfo = ``{0}''\u5C08\u6848\u4E0D\u542B SVN \u8CC7\u6599\u593E\u5F8C\u8A2D\u8CC7\u6599\u3002 SVNTeamProvider.visitError = \u53D6\u5F97\u8CC7\u6E90``{0}''\u6642\u767C\u751F\u932F\u8AA4\u3002 SVNWorkspaceRoot.notSVNFolder = ``{0}''\u7684 SVN \u540C\u6B65\u8CC7\u6599\u932F\u8AA4\u6216\u4E0D\u5B58\u5728\u3002 SVNWorkspaceRoot.nullResource = \u8B80\u53D6 Eclipse \u8CC7\u6E90\u6642\u767C\u751F\u932F\u8AA4 : ``{0}'' SVNWorkspaceRoot.nullResource.2 = \u9019\u500B\u554F\u984C\u5E38\u898B\u7684\u539F\u56E0\u662F Eclipse \u4E2D\u7684\u78C1\u789F\u6A5F\u4EE3\u865F\u548C(\u6216)\u6A94\u6848\u8DEF\u5F91\u8207\u4F5C\u696D\u7CFB\u7D71\u4E0D\u7B26\u3002 SVNWorkspaceRoot.nullResource.3 = \u524D\u9762\u986F\u793A\u7684\u662F\u4F5C\u696D\u7CFB\u7D71\u8DEF\u5F91\u3002\u5C08\u6848\u53EF\u80FD\u9700\u8981\u4F7F\u7528\u6B63\u78BA\u7684\u8DEF\u5F91\u91CD\u65B0\u532F\u5165 Eclpse \u4E2D\u4EE5\u89E3\u6C7A\u9019\u500B\u554F\u984C\u3002 SVNWorkspaceRoot.nullResource.4 = \u9019\u500B\u554F\u984C\u53EF\u80FD\u6703\u5F71\u97FF\u591A\u500B\u5C08\u6848\uFF0C\u4F46\u662F\u6BCF\u500B\u4F5C\u696D\u968E\u6BB5\u6211\u5011\u53EA\u6703\u63D0\u793A\u4E00\u6B21\u8A0A\u606F\u3002 SVNWorkspaceRoot.nullResource.5 = \u9019\u500B\u554F\u984C\u53EF\u80FD\u53EA\u6703\u5F71\u97FF\u4F7F\u7528 JavaHL SVN \u8F49\u63A5\u5668\u3002\\r\\n SVNWorkspaceRoot.nullResource.6 = \u8A73\u7D30\u8A0A\u606F\u8ACB\u67E5\u770B FAQ: http://subclipse.tigris.org/faq.html#path-case SVNWorkspaceSubscriber.errorWhileSynchronizing.1 = \u540C\u6B65 {0} \u6642\u767C\u751F\u4E86\u932F\u8AA4\u3002 {2} \u500B\u8CC7\u6E90\u4E2D\u7684 {1} \u500B\u5DF2\u540C\u6B65\u3002 SVNWorkspaceSubscriber.errorWhileSynchronizing.2 = \u540C\u6B65 {0} \u6642\u767C\u751F\u932F\u8AA4: {1} SVNWorkspaceSubscriber.refreshingSynchronizationData = \u6B63\u5728\u91CD\u65B0\u6574\u7406\u8CC7\u6E90\u8CC7\u6599 {0} SVNWorkspaceSubscriber.retrievingSynchronizationData = \u6B63\u5728\u8B80\u53D6\u540C\u6B65\u8CC7\u6599... SyncFileChangeListener.errorSettingTeamPrivateFlag = \u70BA\u8CC7\u6E90\u8A2D\u5B9A\u5718\u968A\u79C1\u6709\u65D7\u6A19\u6642\u767C\u751F\u932F\u8AA4\u3002 ok = \u78BA\u5B9A 000077500000000000000000000000001203611042400365335ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/propertiesSVNPropertyDefinition.java000066400000000000000000000062751203611042400436340ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/properties/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.properties; /** * @author Brock Janiczak */ public class SVNPropertyDefinition implements Comparable { private final String name; private final String description; private String type = STRING; private int showFor; private boolean allowRecurse = true; public final static int BOTH = 0; public final static int FOLDER = 1; public final static int FILE = 2; public final static String STRING = "String"; //$NON-NLS-1$ public final static String NUMBER = "Number"; //$NON-NLS-1$ public final static String URL = "URL"; //$NON-NLS-1$ public final static String BOOLEAN = "Boolean"; //$NON-NLS-1$ public SVNPropertyDefinition(String name, String description) { this.name = name; this.description = description; } public SVNPropertyDefinition(String name, String description, int showFor) { this(name, description); this.showFor = showFor; } public SVNPropertyDefinition(String name, String description, int showFor, boolean allowRecurse) { this(name, description, showFor); this.allowRecurse = allowRecurse; } public SVNPropertyDefinition(String name, String description, int showFor, boolean allowRecurse, String type) { this(name, description, showFor, allowRecurse); this.type = type; } public String getDescription() { return this.description; } public String getName() { return this.name; } /* (non-Javadoc) * @see java.lang.Object#toString() */ public String toString() { return this.name; } public int compareTo(Object property) { SVNPropertyDefinition compare = (SVNPropertyDefinition)property; return name.compareTo(compare.getName()); } public int getShowFor() { return showFor; } public boolean showForFile() { return ((showFor == BOTH) || (showFor == FILE)); } public boolean showForFolder() { return ((showFor == BOTH) || (showFor == FOLDER)); } public boolean isAllowRecurse() { return allowRecurse; } public String getType() { return type; } public boolean isNumber() { return type.equals(NUMBER); } public boolean isBoolean() { return type.equals(BOOLEAN); } public boolean isUrl() { return type.equals(URL); } public boolean equals(Object object) { if (!(object instanceof SVNPropertyDefinition)) return false; return ((SVNPropertyDefinition)object).getName().equals(name); } } SVNPropertyManager.java000066400000000000000000000105241203611042400431060ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/properties/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.properties; import java.util.ArrayList; import java.util.Arrays; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.Platform; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; /** * @author Brock Janiczak */ public class SVNPropertyManager { private static SVNPropertyManager instance; private SVNPropertyDefinition[] definitions; private SVNPropertyDefinition[] fileDefinitions; private SVNPropertyDefinition[] folderDefinitions; public static SVNPropertyManager getInstance() { if (instance == null) { instance = new SVNPropertyManager(); } return instance; } private SVNPropertyManager() { loadPropertiesFromExtensions(); } private void loadPropertiesFromExtensions() { ArrayList propertyTypes = new ArrayList(); IExtensionPoint extensionPoint = Platform.getExtensionRegistry().getExtensionPoint(SVNProviderPlugin.ID, SVNProviderPlugin.SVN_PROPERTY_TYPES_EXTENSION); IExtension[] extensions = extensionPoint.getExtensions(); for (IExtension extension : extensions) { IConfigurationElement[] configElements = extension.getConfigurationElements(); for (IConfigurationElement configElement : configElements) { String name = configElement.getAttribute("name"); //$NON-NLS-1$ String type = configElement.getAttribute("type"); //$NON-NLS-1$ String fileOrFolder = configElement.getAttribute("fileOrFolder"); //$NON-NLS-1$ String allowRecurse = configElement.getAttribute("allowRecurse"); //$NON-NLS-1$ String description = ""; IConfigurationElement[] descriptionElements = configElement.getChildren("description"); if (descriptionElements.length == 1) { description = descriptionElements[0].getValue(); } int showFor; if (fileOrFolder.equals("file")) showFor = SVNPropertyDefinition.FILE; else if (fileOrFolder.equals("folder")) showFor = SVNPropertyDefinition.FOLDER; else showFor = SVNPropertyDefinition.BOTH; boolean recurse = true; if ((allowRecurse != null) && (allowRecurse.equalsIgnoreCase("false"))) recurse = false; SVNPropertyDefinition property = new SVNPropertyDefinition(name, description, showFor, recurse, type); propertyTypes.add(property); } } definitions = new SVNPropertyDefinition[propertyTypes.size()]; propertyTypes.toArray(definitions); Arrays.sort(definitions); ArrayList fileProperties = new ArrayList(); ArrayList folderProperties = new ArrayList(); for (SVNPropertyDefinition definition : definitions) { if (definition.showForFile()) fileProperties.add(definition); if (definition.showForFolder()) folderProperties.add(definition); } fileDefinitions = new SVNPropertyDefinition[fileProperties.size()]; fileProperties.toArray(fileDefinitions); folderDefinitions = new SVNPropertyDefinition[folderProperties.size()]; folderProperties.toArray(folderDefinitions); } public SVNPropertyDefinition[] getPropertyTypes() { return definitions; } public SVNPropertyDefinition[] getFilePropertyTypes() { return fileDefinitions; } public SVNPropertyDefinition[] getFolderPropertyTypes() { return folderDefinitions; } } 000077500000000000000000000000001203611042400353045ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/repoISVNListener.java000066400000000000000000000037521203611042400404430ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/repo/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.repo; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; public interface ISVNListener { /** * called when a new repository is added to the list of repositories */ public void repositoryAdded(ISVNRepositoryLocation root); /** * called when a repository location has been modified (label, username, password) * @param root */ public void repositoryModified(ISVNRepositoryLocation root); /** * called when a repository is removed from the list of repositories */ public void repositoryRemoved(ISVNRepositoryLocation root); /** * called when a remote resource has been deleted */ public void remoteResourceDeleted(ISVNRemoteResource resource); /** * called when a remote resource has been created */ public void remoteResourceCreated(ISVNRemoteFolder parent,String resourceName); /** * called when a remote resource has been copied */ public void remoteResourceCopied(ISVNRemoteResource source, ISVNRemoteFolder destination); /** * called when a remote resource has been moved */ public void remoteResourceMoved(ISVNRemoteResource resource, ISVNRemoteFolder destinationFolder, String destinationResourceName); } IUserInfo.java000066400000000000000000000023701203611042400400140ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/repo/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.repo; /** * Instances of this class represent a username password pair. * Both values can be set and the username can be retrieved. * However, it is possible that the username is not mutable. * Users must check before trying to set the username. * * Clients are not expected to implement this interface */ public interface IUserInfo { /** * Get the username for this user. */ public String getUsername(); /** * Sets the password for this user. */ public void setPassword(String password); /** * Sets the username for this user. This should not be called if * isUsernameMutable() returns false. */ public void setUsername(String username); } RepositoryComparator.java000066400000000000000000000032131203611042400423550ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/repo/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.repo; import java.util.Comparator; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; /** * This class allows to sort ISVNRepositoryLoction's alphabetically using the * URL or the label (if set). The case of the strings is ignored. */ public class RepositoryComparator implements Comparator { /** * @see java.util.Comparator#compare(Obejct, Object) */ public int compare(Object o1, Object o2) { if (o1 instanceof ISVNRepositoryLocation && o2 instanceof ISVNRepositoryLocation) { ISVNRepositoryLocation loc1 = (ISVNRepositoryLocation) o1; ISVNRepositoryLocation loc2 = (ISVNRepositoryLocation) o2; String label1 = (loc1.getLabel() == null || loc1.getLabel() .length() == 0) ? loc1.getLocation() : loc1.getLabel(); String label2 = (loc2.getLabel() == null || loc2.getLabel() .length() == 0) ? loc2.getLocation() : loc2.getLabel(); return label1.compareToIgnoreCase(label2); } return 0; } }SVNRepositories.java000066400000000000000000000350521203611042400412320ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/repo/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.repo; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.net.MalformedURLException; import java.net.URL; import java.util.Collection; import java.util.HashMap; import java.util.Map; import java.util.Properties; import java.util.Set; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.team.core.TeamException; import org.osgi.service.prefs.BackingStoreException; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNStatus; import org.tigris.subversion.subclipse.core.util.Util; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * The list of known repositories * */ public class SVNRepositories { private Map repositories = new HashMap(); private static final String REPOSITORIES_STATE_FILE = ".svnProviderState"; //$NON-NLS-1$ // version numbers for the state file private static final int REPOSITORIES_STATE_FILE_VERSION_1 = 1; private static final int REPOSITORIES_STATE_FILE_VERSION_2 = 2; private static final int REPOSITORIES_STATE_FILE_VERSION_3 = 3; /* * Add the repository location to the cached locations */ private void addToRepositoriesCache(ISVNRepositoryLocation repository) { repositories.put(repository.getLocation(), repository); SVNProviderPlugin.getPlugin().getRepositoryResourcesManager().repositoryAdded(repository); } /* * Remove the repository location from the cached locations */ private void removeFromRepositoriesCache(ISVNRepositoryLocation repository) { if (repositories.remove(repository.getLocation()) != null) { SVNProviderPlugin.getPlugin().getRepositoryResourcesManager().repositoryRemoved(repository); } } /** * Add the repository to the receiver's list of known repositories or update it. * Doing this will enable password caching accross platform invokations. */ public void addOrUpdateRepository(ISVNRepositoryLocation repository) throws SVNException { // Check the cache for an equivalent instance and if there is one, just update the cache SVNRepositoryLocation existingLocation = (SVNRepositoryLocation)repositories.get(repository.getLocation()); if (existingLocation != null) { SVNProviderPlugin.getPlugin().getRepositoryResourcesManager().repositoryModified(repository); ((SVNRepositoryLocation)repository).updateCache(); } else { // Cache the password and register the repository location addToRepositoriesCache(repository); ((SVNRepositoryLocation)repository).updateCache(); } saveState(); } /** * Dispose of the repository location * * Removes any cached information about the repository such as a remembered password. */ public void disposeRepository(ISVNRepositoryLocation repository) throws SVNException { ((SVNRepositoryLocation)repository).dispose(); removeFromRepositoriesCache(repository); } /** * Return a list of the know repository locations */ public ISVNRepositoryLocation[] getKnownRepositories(IProgressMonitor monitor) { IProgressMonitor progress = Policy.monitorFor(monitor); IEclipsePreferences prefs = (IEclipsePreferences) SVNRepositoryLocation.getParentPreferences(); try { String[] keys = prefs.childrenNames(); progress.beginTask(Policy.bind("SVNRepositories.refresh"), keys.length); //$NON-NLS-1$ for (String key : keys) { progress.worked(1); try { IEclipsePreferences node = (IEclipsePreferences) prefs.node(key); String location = node.get(SVNRepositoryLocation.PREF_LOCATION, null); if (location != null && !exactMatchExists(location)) { ISVNRepositoryLocation repos = SVNRepositoryLocation.fromString(location); try { repos.validateConnection(new NullProgressMonitor()); } catch(SVNException swallow){} addToRepositoriesCache(repos); } else { node.removeNode(); prefs.flush(); } } catch (SVNException e) { // Log and continue SVNProviderPlugin.log(e); } } } catch (BackingStoreException e) { // Log and continue (although all repos will be missing) SVNProviderPlugin.log(SVNException.wrapException(e)); } progress.done(); return (ISVNRepositoryLocation[])repositories.values().toArray(new ISVNRepositoryLocation[repositories.size()]); } public void refreshRepositoriesFolders(IProgressMonitor monitor) { ISVNRepositoryLocation[] repositories = getKnownRepositories(monitor); for (ISVNRepositoryLocation repository : repositories) { repository.refreshRootFolder(); } } /** * Create a repository instance from the given properties. * The supported properties are: * * user The username for the connection (optional) * password The password used for the connection (optional) * url The url where the repository resides * rootUrl The root url of the subversion repository (optional) * * The created instance is not known by the provider and it's user information is not cached. * The purpose of the created location is to allow connection validation before adding the * location to the provider. * * This method will throw a SVNException if the location for the given configuration already * exists. */ public ISVNRepositoryLocation createRepository(Properties configuration) throws SVNException { // Create a new repository location SVNRepositoryLocation location = SVNRepositoryLocation.fromProperties(configuration); // Check the cache for an equivalent instance and if there is one, throw an exception SVNRepositoryLocation existingLocation = (SVNRepositoryLocation)repositories.get(location.getLocation()); if (existingLocation != null) { throw new SVNException(new SVNStatus(SVNStatus.ERROR, Policy.bind("SVNProvider.alreadyExists"))); //$NON-NLS-1$ } return location; } public ISVNRepositoryLocation getRepository(String location) throws SVNException { return getRepository(location, true); } /** * Get the repository instance which matches the given String. * The format of the String is an url */ public ISVNRepositoryLocation getRepository(String location, boolean useRootUrl) throws SVNException { Set keys = repositories.keySet(); for(String url : keys){ if (url.equals(location) || location.indexOf(url + "/") != -1){ return (ISVNRepositoryLocation) repositories.get(url); } } // If we haven't found a matching repository yet, check to see if the default // port is redundantly specified in the location. If it is, check the known // repositories again to see if there is a match for the location with the // default port stripped out (normalizedLocation). String normalizedLocation = getNormalizedLocation(location); if (!normalizedLocation.equals(location)) { for(String url : keys){ if (url.equals(normalizedLocation) || normalizedLocation.indexOf(url + "/") != -1){ return (ISVNRepositoryLocation) repositories.get(url); } } } //else we couldn't find it, fall through to adding new repo. ISVNRepositoryLocation repository = SVNRepositoryLocation.fromString(location, false, useRootUrl); addToRepositoriesCache(repository); return repository; } // If the default port is redundantly specified in the location, strip it out. private String getNormalizedLocation(String location) { try { URL url = new URL(location); if (url.getPort() == -1 || url.getDefaultPort() == -1 || url.getPort() != url.getDefaultPort()) return location; url = new URL(url.getProtocol(), url.getHost(), -1, url.getPath()); return url.toString(); } catch (MalformedURLException e) { return location; } } /** * load the state of the plugin, ie the repositories locations * */ private void loadState() { try { IPath pluginStateLocation = SVNProviderPlugin.getPlugin().getStateLocation().append(REPOSITORIES_STATE_FILE); File file = pluginStateLocation.toFile(); if (file.exists()) { try { DataInputStream dis = new DataInputStream(new FileInputStream(file)); readState(dis); dis.close(); } catch (IOException e) { throw new TeamException(new Status(Status.ERROR, SVNProviderPlugin.ID, TeamException.UNABLE, Policy.bind("SVNProvider.ioException"), e)); //$NON-NLS-1$ } } } catch (TeamException e) { Util.logError(Policy.bind("SVNProvider.errorLoading"), e);//$NON-NLS-1$ } } /** * Save the state of the plugin, ie the repositories locations */ private void saveState() { try { IPath pluginStateLocation = SVNProviderPlugin.getPlugin().getStateLocation(); File tempFile = pluginStateLocation.append(REPOSITORIES_STATE_FILE + ".tmp").toFile(); //$NON-NLS-1$ File stateFile = pluginStateLocation.append(REPOSITORIES_STATE_FILE).toFile(); try { DataOutputStream dos = new DataOutputStream(new FileOutputStream(tempFile)); writeState(dos); dos.close(); if (stateFile.exists()) { stateFile.delete(); } boolean renamed = tempFile.renameTo(stateFile); if (!renamed) { throw new TeamException(new Status(Status.ERROR, SVNProviderPlugin.ID, TeamException.UNABLE, Policy.bind("SVNProvider.rename", tempFile.getAbsolutePath()), null)); //$NON-NLS-1$ } } catch (IOException e) { throw new TeamException(new Status(Status.ERROR, SVNProviderPlugin.ID, TeamException.UNABLE, Policy.bind("SVNProvider.save",stateFile.getAbsolutePath()), e)); //$NON-NLS-1$ } } catch (TeamException e) { Util.logError(Policy.bind("SVNProvider.errorSaving"), e);//$NON-NLS-1$ } } /** * read the state of the plugin, ie the repositories locations * @param dis * @throws IOException * @throws SVNException */ private void readState(DataInputStream dis) throws IOException, SVNException { int version = dis.readInt(); if ((version < REPOSITORIES_STATE_FILE_VERSION_1) || (version > REPOSITORIES_STATE_FILE_VERSION_3)) { Util.logError(Policy.bind("SVNProviderPlugin.unknownStateFileVersion", new Integer(version).toString()), null); //$NON-NLS-1$ return; } int count = dis.readInt(); for(int i = 0; i < count;i++){ ISVNRepositoryLocation root = SVNRepositoryLocation.fromString(dis.readUTF()); addToRepositoriesCache(root); if (version >= REPOSITORIES_STATE_FILE_VERSION_2) { String label = dis.readUTF(); if (!label.equals("")) { root.setLabel(label); } } if (version >= REPOSITORIES_STATE_FILE_VERSION_3) { String repositoryRoot = dis.readUTF(); if (!repositoryRoot.equals("")) { root.setRepositoryRoot(new SVNUrl(repositoryRoot)); } } } } /** * write the state of the plugin ie the repositories locations * @param dos * @throws IOException */ private void writeState(DataOutputStream dos) throws IOException { // Write the repositories dos.writeInt(REPOSITORIES_STATE_FILE_VERSION_3); // Write out the repos Collection repos = repositories.values(); dos.writeInt(repos.size()); for (ISVNRepositoryLocation reposLocation : repos) { SVNRepositoryLocation root = (SVNRepositoryLocation)reposLocation; dos.writeUTF(root.getLocation()); if (root.getLabel() == null) { dos.writeUTF(""); } else { dos.writeUTF(root.getLabel()); } if (root.getRepositoryRoot() == null) { dos.writeUTF(""); } else { dos.writeUTF(root.getRepositoryRoot().toString()); } } dos.flush(); dos.close(); } public void startup() { loadState(); } public void shutdown() { saveState(); } /** * Answer whether the provided repository location is known by the provider or not. * The location string corresponds to the Strin returned by ISVNRepositoryLocation#getLocation() */ public boolean isKnownRepository(String location, boolean requireExactMatch) { Set keys = repositories.keySet(); for(String checkLocation : keys){ if(!requireExactMatch && location.indexOf(checkLocation)!=-1){ return true; } if (location.equals(checkLocation)) return true; } return false; } /** * Answer whether the provided repository location already has an exact match location * The location string corresponds to the Strin returned by ISVNRepositoryLocation#getLocation() */ public boolean exactMatchExists(String location) { Set keys = repositories.keySet(); for(String url : keys){ if (url.equals(location)){ return true; } } return false; } } SVNRepositoryLocation.java000066400000000000000000000545641203611042400424240ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/repo/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.repo; import java.net.MalformedURLException; import java.net.URL; import java.util.Map; import java.util.Properties; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.preferences.DefaultScope; import org.eclipse.team.core.TeamException; import org.osgi.service.prefs.BackingStoreException; import org.osgi.service.prefs.Preferences; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNStatus; import org.tigris.subversion.subclipse.core.client.NotificationListener; import org.tigris.subversion.subclipse.core.resources.RemoteFile; import org.tigris.subversion.subclipse.core.resources.RemoteFolder; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * This class manages a SVN repository location. *
* After modifying a SVNRepositoryLocation (label, username, password), * add it to repositories using {@link SVNRepositories#addOrUpdateRepository(ISVNRepositoryLocation)} */ public class SVNRepositoryLocation implements ISVNRepositoryLocation, IUserInfo, IAdaptable { /** * The name of the preferences node in the CVS preferences that contains * the known repositories as its children. */ public static final String PREF_REPOSITORIES_NODE = "repositories"; //$NON-NLS-1$ /* * The name of the node in the default scope that has the default settings * for a repository. */ private static final String DEFAULT_REPOSITORY_SETTINGS_NODE = "default_repository_settings"; //$NON-NLS-1$ // Preference keys used to persist the state of the location public static final String PREF_LOCATION = "location"; //$NON-NLS-1$ public static final String PREF_SERVER_ENCODING = "encoding"; //$NON-NLS-1$ // friendly name of the location private String label = null; private String user; private String password; // url of this location private SVNUrl url; // url of the root repository private SVNUrl repositoryRootUrl; // the folder corresponding to this repository location private RemoteFolder rootFolder; // fields needed for caching the password public static final String INFO_PASSWORD = "org.tigris.subversion.subclipse.core.password"; //$NON-NLS-1$ public static final String INFO_USERNAME = "org.tigris.subversion.subclipse.core.username"; //$NON-NLS-1$ public static final String AUTH_SCHEME = ""; //$NON-NLS-1$ public static final URL FAKE_URL; public static final String USER_VARIABLE = "{user}"; //$NON-NLS-1$ public static final String PASSWORD_VARIABLE = "{password}"; //$NON-NLS-1$ public static final String HOST_VARIABLE = "{host}"; //$NON-NLS-1$ public static final String PORT_VARIABLE = "{port}"; //$NON-NLS-1$ // private ISVNClientAdapter svnClient; static { URL temp = null; try { temp = new URL("http://org.tigris.subversion.subclipse.core"); //$NON-NLS-1$ } catch (MalformedURLException e) { } // The protection space is defined by this url and realm (AUTH_SCHEME) FAKE_URL = temp; } /** * Return the preferences node whose child nodes are the know repositories * @return a preferences node */ public static Preferences getParentPreferences() { return SVNProviderPlugin.getPlugin().getInstancePreferences().node(PREF_REPOSITORIES_NODE); } /** * Return a preferences node that contains suitabel defaults for a * repository location. * @return a preferences node */ public static Preferences getDefaultPreferences() { Preferences defaults = new DefaultScope().getNode(SVNProviderPlugin.ID).node(DEFAULT_REPOSITORY_SETTINGS_NODE); defaults.put(PREF_SERVER_ENCODING, getDefaultEncoding()); return defaults; } private static String getDefaultEncoding() { return System.getProperty("file.encoding", "UTF-8"); //$NON-NLS-1$ //$NON-NLS-2$ } /* * Create a SVNRepositoryLocation from its composite parts. */ private SVNRepositoryLocation(String user, String password, SVNUrl url, SVNUrl repositoryRootUrl) { this.user = user; this.password = password; this.url = url; this.repositoryRootUrl = repositoryRootUrl; rootFolder = new RemoteFolder(this, url, SVNRevision.HEAD); } /* * Dispose of the receiver by clearing any cached authorization information. * This method should only be invoked when the corresponding adapter is shut * down or a connection is being validated. */ public void dispose() throws SVNException { try { Platform.flushAuthorizationInfo( FAKE_URL, getLocation(), AUTH_SCHEME); ensurePreferencesStored(); } catch (CoreException e) { // We should probably wrap the CoreException here! SVNProviderPlugin.log(e.getStatus()); throw new SVNException(IStatus.ERROR, IStatus.ERROR, Policy.bind("SVNRepositoryLocation.errorFlushing", getLocation()), e); //$NON-NLS-1$ } // remove repo location from preferences try { if (hasPreferences()) { internalGetPreferences().removeNode(); getParentPreferences().flush(); } } catch (BackingStoreException e) { SVNProviderPlugin.log(SVNException.wrapException(e)); } } /* * @see ISVNRepositoryLocation#getUrl() */ public SVNUrl getUrl() { return url; } /* * @see IRepositoryLocation#getLocation() */ public String getLocation() { return getUrl().toString(); } public ISVNRemoteFolder getRootFolder() { // // refresh it so that members don't return always the same remote resources ... // rootFolder.refresh(); return rootFolder; } public void refreshRootFolder() { rootFolder.refresh(); } /* * @see ISVNRepositoryLocation#members(IProgressMonitor) */ public ISVNRemoteResource[] members(IProgressMonitor progress) throws SVNException { try { ISVNRemoteResource[] resources = getRootFolder().members(progress); return resources; } catch (TeamException e) { throw new SVNException(e.getStatus()); } } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNRepositoryLocation#getRemoteFolder(java.lang.String) */ public ISVNRemoteFolder getRemoteFolder(String remotePath) { return new RemoteFolder( this, getUrl().appendPath(remotePath), SVNRevision.HEAD); } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNRepositoryLocation#getRemoteFile(org.tigris.subversion.svnclientadapter.SVNUrl) */ public ISVNRemoteFile getRemoteFile(SVNUrl url) throws SVNException{ ISVNClientAdapter svnClient = getSVNClient(); ISVNInfo info = null; try { if (this.getRepositoryRoot().equals(url)) return new RemoteFile(this, url, SVNRevision.HEAD); else info = svnClient.getInfo(url, SVNRevision.HEAD, SVNRevision.HEAD); } catch (SVNClientException e) { throw new SVNException( "Can't get latest remote resource for " + url); } if (info == null) return null; // no remote file else { return new RemoteFile(null, // we don't know its parent this, url, SVNRevision.HEAD, info.getLastChangedRevision(), info.getLastChangedDate(), info.getLastCommitAuthor()); } } public ISVNRemoteFile getRemoteFile(String remotePath) throws SVNException{ return getRemoteFile(getUrl().appendPath(remotePath)); } /* * @see ISVNRepositoryLocation#getUsername() * @see IUserInfo#getUsername() */ public String getUsername() { if (user == null) { retrieveUsername(); } return user == null ? "" : user; //$NON-NLS-1$ } /** * get the svn client corresponding to the repository * @throws SVNException */ public ISVNClientAdapter getSVNClient() throws SVNException { ISVNClientAdapter svnClient = SVNProviderPlugin.getPlugin().getSVNClient(); svnClient.addNotifyListener(NotificationListener.getInstance()); svnClient.setUsername(getUsername()); String password = getPassword(); if (password != null) svnClient.setPassword(password); return svnClient; } public void returnSVNClient(ISVNClientAdapter client) { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } /* * Implementation of inherited toString() */ public String toString() { if (getLabel() != null) { return getLabel(); } else { return getLocation(); } } public boolean equals(Object o) { if (!(o instanceof SVNRepositoryLocation)) return false; return getLocation().equals(((SVNRepositoryLocation) o).getLocation()); } public int hashCode() { return getLocation().hashCode(); } /** * Retrieves the cached username from the keyring. */ private void retrieveUsername() { Map map = Platform.getAuthorizationInfo(FAKE_URL, getLocation(), AUTH_SCHEME); if (map != null) { String username = (String) map.get(INFO_USERNAME); if (username != null) setUsername(username); } } /** * Retrieves the cached password * @return */ private String retrievePassword() { Map map = Platform.getAuthorizationInfo(FAKE_URL, getLocation(), AUTH_SCHEME); if (map != null) { String password = (String) map.get(INFO_PASSWORD); if (password != null) { return password; } } return null; } /** * get the password * @return */ private String getPassword() { if (password != null) { return password; } else { return retrievePassword(); } } /* * @see IUserInfo#setPassword(String) */ public void setPassword(String password) { this.password = password; } /* * @see IUserInfo#setUsername(String) */ public void setUsername(String user) { this.user = user; } /** * add user and password to the keyring */ public void updateCache() throws SVNException { // put the password into the Platform map Map map = Platform.getAuthorizationInfo(FAKE_URL, getLocation(), AUTH_SCHEME); if (map == null) { map = new java.util.HashMap(10); } if (user != null) map.put(INFO_USERNAME, user); if (password != null) map.put(INFO_PASSWORD, password); try { Platform.addAuthorizationInfo( FAKE_URL, getLocation(), AUTH_SCHEME, map); } catch (CoreException e) { // We should probably wrap the CoreException here! SVNProviderPlugin.log(e.getStatus()); throw new SVNException(IStatus.ERROR, IStatus.ERROR, Policy.bind("SVNRepositoryLocation.errorCaching", getLocation()), e); //$NON-NLS-1$ } // If the cache was updated, null the password field // so we will obtain the password from the cache when needed password = null; // Ensure that the receiver is known by the SVN provider SVNProviderPlugin.getPlugin().getRepository(getLocation()); // Ensure location is stored in plugin preferences ensurePreferencesStored(); } /* * Validate that the receiver contains valid information for * making a connection. If the receiver contains valid * information, the method returns. Otherwise, an exception * indicating the problem is throw. */ public void validateConnection(IProgressMonitor monitor) throws SVNException { ISVNClientAdapter svnClient = getSVNClient(); try { // we try to get the list of directories and files using the connection ISVNInfo info = svnClient.getInfo(getUrl()); repositoryRootUrl = info.getRepository(); } catch (SVNClientException e) { // If the validation failed, dispose of any cached info dispose(); throw SVNException.wrapException(e); } } /* * this should be made more robust --mml 11/27/03 * @see org.tigris.subversion.subclipse.core.ISVNRepositoryLocation#pathExists() */ public boolean pathExists() throws SVNException{ ISVNClientAdapter svnClient = getSVNClient(); try{ svnClient.getList(getUrl(), SVNRevision.HEAD, false); }catch(SVNClientException e){ return false; } return true; } /* * Create a repository location instance from the given properties. * The supported properties are: * user The username for the connection (optional) * password The password used for the connection (optional) * url The url where the repository resides * rootUrl The repository root url */ public static SVNRepositoryLocation fromProperties(Properties configuration) throws SVNException { // We build a string to allow validation of the components that are provided to us String user = configuration.getProperty("user"); //$NON-NLS-1$ if ((user == null) || (user.length() == 0)) user = null; String password = configuration.getProperty("password"); //$NON-NLS-1$ if (user == null) password = null; String rootUrl = configuration.getProperty("rootUrl"); //$NON-NLS-1$ if ((rootUrl == null) || (rootUrl.length() == 0)) rootUrl = null; String url = configuration.getProperty("url"); //$NON-NLS-1$ if (url == null) throw new SVNException(new Status(IStatus.ERROR, SVNProviderPlugin.ID, TeamException.UNABLE, Policy.bind("SVNRepositoryLocation.hostRequired"), null)); //$NON-NLS-1$ SVNUrl urlURL = null; try { urlURL = new SVNUrl(url); } catch (MalformedURLException e) { throw new SVNException(e.getMessage()); } SVNUrl rootUrlURL = null; if (rootUrl != null) { try { rootUrlURL = new SVNUrl(rootUrl); } catch (MalformedURLException e) { throw new SVNException(e.getMessage()); } } return new SVNRepositoryLocation(user, password, urlURL, rootUrlURL); } /* * Parse a location string and return a SVNRepositoryLocation. * * On failure, the status of the exception will be a MultiStatus * that includes the original parsing error and a general status * displaying the passed location and proper form. This form is * better for logging, etc. */ public static SVNRepositoryLocation fromString(String location) throws SVNException { try { return fromString(location, false); } catch (SVNException e) { // Parsing failed. Include a status that // shows the passed location and the proper form MultiStatus error = new MultiStatus(SVNProviderPlugin.ID, SVNStatus.ERROR, Policy.bind("SVNRepositoryLocation.invalidFormat", new Object[] { location }), null); //$NON-NLS-1$ error.merge(new SVNStatus(SVNStatus.ERROR, Policy.bind("SVNRepositoryLocation.locationForm"))); //$NON-NLS-1$ error.merge(e.getStatus()); throw new SVNException(error); } } /* * Parse a location string and return a SVNRepositoryLocation. * * The location is an url */ public static SVNRepositoryLocation fromString( String location, boolean validateOnly) throws SVNException { String partId = null; try { String user = null; String password = null; SVNUrl rootUrl = null; SVNUrl url = new SVNUrl(location); if (validateOnly) throw new SVNException(new SVNStatus(SVNStatus.OK, Policy.bind("ok"))); //$NON-NLS-1$ return new SVNRepositoryLocation(user, password, url, rootUrl); } catch (MalformedURLException e) { throw new SVNException(Policy.bind(partId)); } catch (IndexOutOfBoundsException e) { // We'll get here if anything funny happened while extracting substrings throw new SVNException(Policy.bind(partId)); } catch (NumberFormatException e) { // We'll get here if we couldn't parse a number throw new SVNException(Policy.bind(partId)); } } /* * Parse a location string and return a SVNRepositoryLocation. * If useRootUrl is true, use the repository root URL. */ public static SVNRepositoryLocation fromString( String location, boolean validateOnly, boolean useRootUrl) throws SVNException { if (!useRootUrl) return fromString(location, validateOnly); ISVNClientAdapter svnClient = SVNProviderPlugin.getPlugin().getSVNClient(); try { SVNUrl url = new SVNUrl(location); ISVNInfo info = svnClient.getInfo(url); SVNUrl rootUrl = info.getRepository(); return fromString(rootUrl.toString()); } catch (MalformedURLException e) { throw SVNException.wrapException(e); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(svnClient); } } // public static IUserAuthenticator getAuthenticator() { // if (authenticator == null) { // authenticator = getPluggedInAuthenticator(); // } // return authenticator; // } /* * Return the connection method registered for the given name or null if none * are registered */ // private static IConnectionMethod getPluggedInConnectionMethod(String methodName) { // IConnectionMethod[] methods = getPluggedInConnectionMethods(); // for(int i=0; i * Ex : if url is http://svn.collab.net/viewcvs/svn/trunk/subversion/, the * repository root is http://svn.collab.net/viewcvs/svn * @return */ public SVNUrl getRepositoryRoot() { // for now, we can't get it using svn, so user must give it // if the user did not provide a value, we will just return // the repository URL. if (repositoryRootUrl == null) return getUrl(); else return repositoryRootUrl; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNRepositoryLocation#setRepositoryRoot(org.tigris.subversion.svnclientadapter.SVNUrl) */ public void setRepositoryRoot(SVNUrl url) { repositoryRootUrl = url; } /** * @return Returns the label. */ public String getLabel() { return label; } /** * @param label The label to set. */ public void setLabel(String label) { this.label = label; } /* * Return the preferences node for this repository */ public Preferences getPreferences() { if (!hasPreferences()) { ensurePreferencesStored(); } return internalGetPreferences(); } private Preferences internalGetPreferences() { return getParentPreferences().node(getPreferenceName()); } private boolean hasPreferences() { try { return getParentPreferences().nodeExists(getPreferenceName()); } catch (Exception e) { // FIXME: commented 2 lines below is how CVS did it. Did i do it right? //CVSProviderPlugin.log(IStatus.ERROR, NLS.bind(CVSMessages.CVSRepositoryLocation_74, new String[] { getLocation(true) }), e); //return false; SVNProviderPlugin.log(SVNException.wrapException(e)); return false; } } /** * Return a unique name that identifies this location but * does not contain any slashes (/). Also, do not use ':'. * Although a valid path character, the initial core implementation * didn't handle it well. */ private String getPreferenceName() { return getLocation().replace('/', '%').replace(':', '%'); } public void storePreferences() { Preferences prefs = internalGetPreferences(); // Must store at least one preference in the node prefs.put(PREF_LOCATION, getLocation()); flushPreferences(); } private void flushPreferences() { try { internalGetPreferences().flush(); } catch (BackingStoreException e) { SVNProviderPlugin.log(SVNException.wrapException(e)); } } public void setUrl(SVNUrl url) { this.url = url; } private void ensurePreferencesStored() { if (!hasPreferences()) { storePreferences(); } } } 000077500000000000000000000000001203611042400363515ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resourcesBaseFile.java000066400000000000000000000067611203611042400407000ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IStorage; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.svnclientadapter.ISVNAnnotations; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * Represents the base revision of a file. * */ public class BaseFile extends BaseResource implements ISVNRemoteFile { /** * Constructor * @param localResourceStatus */ public BaseFile(IResource resource, LocalResourceStatus localResourceStatus) { super(resource, localResourceStatus); } /** * Constructor * @param localResourceStatus * @param charset */ public BaseFile(IResource resource, LocalResourceStatus localResourceStatus, String charset) { super(resource, localResourceStatus, charset); } /* (non-Javadoc) * @see org.eclipse.team.core.variants.IResourceVariant#isContainer() */ public boolean isContainer() { return false; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNResource#isFolder() */ public boolean isFolder() { return false; } /* (non-Javadoc) * @see org.eclipse.team.core.variants.IResourceVariant#getStorage(org.eclipse.core.runtime.IProgressMonitor) */ public IStorage getStorage(IProgressMonitor monitor) throws TeamException { return BaseResourceStorageFactory.current().createResourceStorage(this); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNRemoteResource#members(org.eclipse.core.runtime.IProgressMonitor) */ public ISVNRemoteResource[] members(IProgressMonitor progress){ return new ISVNRemoteResource[0]; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNRemoteFile#getAnnotations(org.tigris.subversion.svnclientadapter.SVNRevision, org.tigris.subversion.svnclientadapter.SVNRevision) */ public ISVNAnnotations getAnnotations(SVNRevision fromRevision, SVNRevision toRevision, boolean includeMergedRevisions, boolean ignoreMimeType) throws TeamException { ISVNClientAdapter svnClient = getRepository().getSVNClient(); try { SVNRevision pegRevision = null; ISVNLocalResource localResource = SVNWorkspaceRoot.getSVNResourceFor(resource); if (localResource != null) { pegRevision = localResource.getRevision(); } return svnClient.annotate( localResourceStatus.getFile(), fromRevision, toRevision, pegRevision, ignoreMimeType, includeMergedRevisions); } catch (SVNClientException e) { throw new TeamException("Failed in BaseFile.getAnnotations()", e); } finally { getRepository().returnSVNClient(svnClient); } } } BaseFolder.java000066400000000000000000000136351203611042400412320ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IStorage; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNResource; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNStatus; import org.tigris.subversion.subclipse.core.commands.GetStatusCommand; /** * Represents the base revision of a folder. * */ public class BaseFolder extends BaseResource implements ISVNRemoteFolder { /** * Constructor * @param localResourceStatus */ public BaseFolder(IResource resource, LocalResourceStatus localResourceStatus) { super(resource, localResourceStatus); } /* (non-Javadoc) * @see org.eclipse.team.core.variants.IResourceVariant#isContainer() */ public boolean isContainer() { return true; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNResource#isFolder() */ public boolean isFolder() { return true; } /* (non-Javadoc) * @see org.eclipse.team.core.variants.IResourceVariant#getStorage(org.eclipse.core.runtime.IProgressMonitor) */ public IStorage getStorage(IProgressMonitor monitor) throws TeamException { //Do nothing. Folders do not have contents return null; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNRemoteResource#members(org.eclipse.core.runtime.IProgressMonitor) */ public ISVNRemoteResource[] members(IProgressMonitor progress) throws TeamException { return getMembers(progress); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNFolder#members(org.eclipse.core.runtime.IProgressMonitor, int) */ public ISVNResource[] members(IProgressMonitor monitor, int flags) throws SVNException { final List result = new ArrayList(); ISVNRemoteResource[] resources = getMembers(monitor); // RemoteFolders never have phantom members if ((flags & EXISTING_MEMBERS) == 0 && (flags & PHANTOM_MEMBERS) == 1) { return new ISVNResource[0]; } boolean includeFiles = (((flags & FILE_MEMBERS) != 0) || ((flags & (FILE_MEMBERS | FOLDER_MEMBERS)) == 0)); boolean includeFolders = (((flags & FOLDER_MEMBERS) != 0) || ((flags & (FILE_MEMBERS | FOLDER_MEMBERS)) == 0)); boolean includeManaged = (((flags & MANAGED_MEMBERS) != 0) || ((flags & (MANAGED_MEMBERS | UNMANAGED_MEMBERS | IGNORED_MEMBERS)) == 0)); for (ISVNResource svnResource : resources) { if ((includeFiles && ( ! svnResource.isFolder())) || (includeFolders && (svnResource.isFolder()))) { if (includeManaged) { result.add(svnResource); } } } return (ISVNResource[]) result.toArray(new ISVNResource[result.size()]); } /* (non-Javadoc) * TODO This should use the synchronization information instead of hitting the WC * @see org.tigris.subversion.subclipse.core.resources.RemoteFolder#getMembers(org.eclipse.core.runtime.IProgressMonitor) */ protected ISVNRemoteResource[] getMembers(IProgressMonitor monitor) throws SVNException { final IProgressMonitor progress = Policy.monitorFor(monitor); progress.beginTask(Policy.bind("RemoteFolder.getMembers"), 100); //$NON-NLS-1$ try { GetStatusCommand c = new GetStatusCommand(localResourceStatus.getRepository(), resource, false, true); c.run(monitor); LocalResourceStatus[] statuses = c.getLocalResourceStatuses(); List baseChildren = new ArrayList(statuses.length); for (LocalResourceStatus status : statuses) { if (localResourceStatus.getFile().equals(status.getFile())) { continue; } // Don't create base entries for files that aren't managed yet if (!status.hasRemote()) { continue; } // The folders itself is not its own child, all direct children are if (status.getUrlString() != null && !status.getUrlString().equals(localResourceStatus.getUrlString())) { BaseResource member = BaseResource.from(SVNWorkspaceRoot.getResourceFor(resource, status), status); member.setParent(this); baseChildren.add(member); } } return (ISVNRemoteResource[]) baseChildren.toArray(new ISVNRemoteResource[baseChildren.size()]); } catch (CoreException e) { throw new SVNException(new SVNStatus(IStatus.ERROR, SVNStatus.DOES_NOT_EXIST, Policy.bind("RemoteFolder.doesNotExist", getRepositoryRelativePath()))); //$NON-NLS-1$ } finally { progress.done(); } } public void createRemoteFolder(String folderName, String message, IProgressMonitor monitor) throws SVNException { throw new SVNException("Cannot create remote folder on Base Folder"); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNRemoteFolder#refresh() */ public void refresh() { //Do nothing. Base folder does NOT caches anything. } } BaseResource.java000066400000000000000000000171611203611042400416040ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; import java.io.File; import java.util.Date; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.PlatformObject; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.util.Assert; import org.tigris.subversion.subclipse.core.util.Util; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNLogMessage; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNNodeKind; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; import org.tigris.subversion.svnclientadapter.utils.SVNUrlUtils; /** * Represents handles to SVN resource on the base (pristine copy). * Synchronization information is taken from the .svn subdirectories. * * @see BaseFolder * @see BaseFile */ public abstract class BaseResource extends PlatformObject implements ISVNRemoteResource { private String charset = null; protected LocalResourceStatus localResourceStatus; protected IResource resource; private ISVNRemoteFolder parent; /** * Constructor for BaseResource. * @param localResourceStatus */ public BaseResource(IResource resource, LocalResourceStatus localResourceStatus) { Assert.isNotNull(resource); Assert.isNotNull(localResourceStatus); this.localResourceStatus = localResourceStatus; this.resource = resource; } /** * Constructor for BaseResource. * @param localResourceStatus * @param charset */ public BaseResource(IResource resource, LocalResourceStatus localResourceStatus, String charset) { Assert.isNotNull(resource); Assert.isNotNull(localResourceStatus); this.localResourceStatus = localResourceStatus; this.charset = charset; this.resource = resource; } /** * Create a BaseFile or BaseFolder according to nodeKind of the given status. * @param localResourceStatus * @return newly constructed BaseFile or BaseFolder instance */ public static BaseResource from(IResource resource, LocalResourceStatus localResourceStatus) { if (SVNNodeKind.FILE.equals(localResourceStatus.getNodeKind())) { return new BaseFile(resource, localResourceStatus); } else { return new BaseFolder(resource, localResourceStatus); } } /* (non-Javadoc) * @see org.eclipse.team.core.variants.IResourceVariant#getName() */ public String getName() { return localResourceStatus.getFile().getName(); } /* (non-Javadoc) * @see org.eclipse.team.core.variants.IResourceVariant#getContentIdentifier() */ public String getContentIdentifier() { return SVNRevision.BASE.toString(); } /* (non-Javadoc) * @see org.eclipse.team.core.variants.IResourceVariant#asBytes() */ public byte[] asBytes() { return getContentIdentifier().getBytes(); } /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ public boolean equals(Object target) { if (this == target) return true; if (!(target instanceof BaseResource)) return false; BaseResource base = (BaseResource) target; return base.isContainer() == isContainer() && base.getUrl().equals(getUrl()) && base.getRevision() == getRevision(); } /* (non-Javadoc) * @see java.lang.Object#hashCode() */ public int hashCode() { return getUrl().hashCode() + getRevision().hashCode(); } public ISVNRepositoryLocation getRepository() { return localResourceStatus.getRepository(); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNResource#getUrl() */ public SVNUrl getUrl() { return localResourceStatus.getUrl(); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNRemoteResource#getLastChangedRevision() */ public SVNRevision.Number getLastChangedRevision() { return localResourceStatus.getLastChangedRevision(); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNRemoteResource#getRevision() */ public SVNRevision getRevision() { return SVNRevision.BASE; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNRemoteResource#getDate() */ public Date getDate() { return localResourceStatus.getLastChangedDate(); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNRemoteResource#getAuthor() */ public String getAuthor() { return localResourceStatus.getLastCommitAuthor(); } /** * Get resource file * @return a file corresponding to base resource */ public File getFile() { return localResourceStatus.getFile(); } /** * Get resource path * @return a path corresponding to base resource */ public IPath getPath() { return localResourceStatus.getIPath(); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNRemoteResource#getRepositoryRelativePath() */ public String getRepositoryRelativePath() { return SVNUrlUtils.getRelativePath(getRepository().getUrl(), getUrl(), true); } public String getProjectRelativePath() { ISVNRemoteResource project = this; while(project.getParent() != null) { project = project.getParent(); } return SVNUrlUtils.getRelativePath(project.getUrl(), getUrl(), true); } public ISVNLogMessage[] getLogMessages(SVNRevision pegRevision, SVNRevision revisionStart, SVNRevision revisionEnd, boolean stopOnCopy, boolean fetchChangePath, long limit, boolean includeMergedRevisions) throws TeamException { ISVNClientAdapter svnClient = getRepository().getSVNClient(); try { return svnClient.getLogMessages(getFile(), pegRevision, revisionStart, revisionEnd, stopOnCopy, fetchChangePath, limit, includeMergedRevisions); } catch (SVNClientException e) { throw new TeamException("Failed in BaseResource.getLogMessages()", e); } finally { getRepository().returnSVNClient(svnClient); } } /* * (non-Javadoc) * * @see org.tigris.subversion.subclipse.core.ISVNRemoteResource#exists(org.eclipse.core.runtime.IProgressMonitor) */ public boolean exists(IProgressMonitor monitor) throws TeamException { return true; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNRemoteResource#getParent() */ public ISVNRemoteFolder getParent() { return parent; } public void setParent(ISVNRemoteFolder parent) { this.parent = parent; } /** * @return charset same as local resource. */ public String getCharset(){ return charset; } /* (non-Javadoc) * @see java.lang.Object#toString() */ public String toString() { return (localResourceStatus != null) ? localResourceStatus.getPath() : ""; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNResource#getResource() */ public IResource getResource() { return resource; } } BaseResourceStorage.java000066400000000000000000000052661203611042400431340ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; import java.io.InputStream; import org.eclipse.core.resources.IEncodedStorage; import org.eclipse.core.resources.IStorage; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.PlatformObject; import org.eclipse.core.runtime.Status; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; /** * IStorage implementation for accessing the contents of base resource * */ public class BaseResourceStorage extends PlatformObject implements IStorage ,IEncodedStorage { private BaseResource baseResource; public BaseResourceStorage(BaseResource baseResource) { super(); this.baseResource = baseResource; } /* (non-Javadoc) * @see org.eclipse.core.resources.IStorage#getContents() */ public InputStream getContents() throws CoreException { ISVNClientAdapter svnClient = baseResource.getRepository().getSVNClient(); try { return svnClient.getContent(baseResource.getFile(), baseResource.getRevision()); } catch (SVNClientException e) { throw new CoreException(new Status(IStatus.ERROR, SVNProviderPlugin.ID, 0, "Failed in BaseFile.getContents()", e)); //$NON-NLS-1$); } finally { baseResource.getRepository().returnSVNClient(svnClient); } } /* (non-Javadoc) * @see org.eclipse.core.resources.IStorage#getFullPath() */ public IPath getFullPath() { IPath path = baseResource.getPath(); String lastSegment = path.lastSegment(); lastSegment += " " + baseResource.getLastChangedRevision().toString(); path = path.removeLastSegments(1); return path.append(lastSegment); } /* (non-Javadoc) * @see org.eclipse.core.resources.IStorage#getName() */ public String getName() { return baseResource.getName(); } /* (non-Javadoc) * @see org.eclipse.core.resources.IStorage#isReadOnly() */ public boolean isReadOnly() { return true; } public String getCharset() throws CoreException { return baseResource.getCharset(); } } BaseResourceStorageFactory.java000066400000000000000000000035231203611042400444560ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; /** * This is the default implementation of the factory and also the maintainer of * the current factory. When using the subclipse.core plugin is a headless mode, the * defualt implementation will suffice. The subclipse.ui plugin is expected to install * a new factory that in turn creates instances implementing the * IEncodedStreamContentAccessor (defined in org.eclipse.compare) * * @author Thomas Hallgren */ public class BaseResourceStorageFactory implements IBaseResourceStorageFactory { private static IBaseResourceStorageFactory currentFactory = new BaseResourceStorageFactory(); /** * Creates an instance and returns it. */ public BaseResourceStorage createResourceStorage(BaseResource baseResource) { return new BaseResourceStorage(baseResource); } /** * Returns the current factory. */ public static IBaseResourceStorageFactory current() { return currentFactory; } /** * This method is called from the org.tigris.subversion.subclipse.ui plugin and will * install a factory that creates {@link BaseResourceStorage} that implements the * * @param factory The factory to become current */ public static void setCurrent(IBaseResourceStorageFactory factory) { currentFactory = factory; } } IBaseResourceStorageFactory.java000066400000000000000000000013461203611042400445700ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; public interface IBaseResourceStorageFactory { public BaseResourceStorage createResourceStorage(BaseResource baseResource); } ISVNFileModificationValidatorPrompt.java000066400000000000000000000015231203611042400461720ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; import org.eclipse.core.resources.IFile; public interface ISVNFileModificationValidatorPrompt { public boolean prompt(IFile[] files, Object context); public String getComment(); public boolean isStealLock(); } ISVNTreeConflict.java000066400000000000000000000005361203611042400423010ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resourcespackage org.tigris.subversion.subclipse.core.resources; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.SVNConflictDescriptor; public interface ISVNTreeConflict { public ISVNStatus getStatus(); public SVNConflictDescriptor getConflictDescriptor(); public String getDescription(); } LocalFile.java000066400000000000000000000126371203611042400410570ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; import org.eclipse.core.resources.IFile; import org.tigris.subversion.subclipse.core.ISVNLocalFile; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNResourceVisitor; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNKeywords; /** * Represents handles to SVN file on the local file system. */ public class LocalFile extends LocalResource implements ISVNLocalFile { /** * Create a handle based on the given local resource. */ public LocalFile(IFile file) { super(file); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#getBaseResource() */ public ISVNRemoteResource getBaseResource() throws SVNException { if (!hasRemote()) {// no base if no remote return null; } return new BaseFile(resource, getStatusFromCache()); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#refreshStatus() */ public void refreshStatus() throws SVNException { SVNProviderPlugin.getPlugin().getStatusCacheManager().refreshStatus(resource.getParent(), false); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNResource#isFolder() */ public boolean isFolder() { return false; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#isDirty() */ public boolean isDirty() throws SVNException { return getStatusFromCache().isDirty(); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#accept(org.tigris.subversion.subclipse.core.ISVNResourceVisitor) */ public void accept(ISVNResourceVisitor visitor) throws SVNException { visitor.visitFile(this); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalFile#setKeywords(org.tigris.subversion.svnclientadapter.SVNKeywords) */ public void setKeywords(SVNKeywords svnKeywords) throws SVNException { ISVNClientAdapter svnClient = null; try { svnClient = getRepository().getSVNClient(); OperationManager.getInstance().beginOperation(svnClient); svnClient.setKeywords(getFile(), svnKeywords, false); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { getRepository().returnSVNClient(svnClient); OperationManager.getInstance().endOperation(); } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalFile#addKeywords(org.tigris.subversion.svnclientadapter.SVNKeywords) */ public void addKeywords(SVNKeywords svnKeywords) throws SVNException { ISVNClientAdapter svnClient = null; try { svnClient = getRepository().getSVNClient(); OperationManager.getInstance().beginOperation(svnClient); svnClient.addKeywords(getFile(), svnKeywords); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { getRepository().returnSVNClient(svnClient); OperationManager.getInstance().endOperation(); } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalFile#removeKeywords(org.tigris.subversion.svnclientadapter.SVNKeywords) */ public void removeKeywords(SVNKeywords svnKeywords) throws SVNException { ISVNClientAdapter svnClient = null; try { svnClient = getRepository().getSVNClient(); OperationManager.getInstance().beginOperation(svnClient); svnClient.removeKeywords(getFile(), svnKeywords); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { getRepository().returnSVNClient(svnClient); OperationManager.getInstance().endOperation(); } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalFile#getKeywords() */ public SVNKeywords getKeywords() throws SVNException { ISVNClientAdapter svnClient = null; try { svnClient = getRepository().getSVNClient(); return svnClient.getKeywords(getFile()); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { getRepository().returnSVNClient(svnClient); } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#revert() */ public void revert() throws SVNException { super.revert(false); } } LocalFolder.java000066400000000000000000000316421203611042400414100ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.ISVNLocalFolder; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNResource; import org.tigris.subversion.subclipse.core.ISVNResourceVisitor; import org.tigris.subversion.subclipse.core.ISVNRunnable; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.commands.AddIgnoredPatternCommand; import org.tigris.subversion.subclipse.core.util.Util; /** * Implements the ISVNLocalFolder interface on top of an instance of the * ISVNFolder interface * * @see ISVNLocalFolder */ public class LocalFolder extends LocalResource implements ISVNLocalFolder { /** * create a handle based on the given local resource. * Container can be IResource.ROOT * * @param container */ public LocalFolder(IContainer container) { super(container); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#getBaseResource() */ public ISVNRemoteResource getBaseResource() throws SVNException { if (!isManaged()) {// no base if no remote return null; } return new BaseFolder(resource, getStatusFromCache()); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNFolder#members(org.eclipse.core.runtime.IProgressMonitor, int) */ public ISVNResource[] members(IProgressMonitor monitor, int flags) throws SVNException { if (!resource.exists()) return new ISVNLocalResource[0]; boolean ignoreHiddenChanges = SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_IGNORE_HIDDEN_CHANGES); final List result = new ArrayList(); IResource[] resources; try { boolean isHiddenSupported = true;; if (!ignoreHiddenChanges) { try { isHiddenSupported = Util.isHiddenSupported(); } catch (NoSuchMethodException e) { isHiddenSupported = false; } } if (ignoreHiddenChanges || !isHiddenSupported) { resources = ((IContainer) resource).members(true); } else { // 8 = IContainer.INCLUDE_HIDDEN. resources = ((IContainer) resource).members(8 | IContainer.INCLUDE_PHANTOMS); } } catch (CoreException e) { throw SVNException.wrapException(e); } final boolean includeFiles = (((flags & FILE_MEMBERS) != 0) || ((flags & (FILE_MEMBERS | FOLDER_MEMBERS)) == 0)); final boolean includeFolders = (((flags & FOLDER_MEMBERS) != 0) || ((flags & (FILE_MEMBERS | FOLDER_MEMBERS)) == 0)); final boolean includeManaged = (((flags & MANAGED_MEMBERS) != 0) || ((flags & (MANAGED_MEMBERS | UNMANAGED_MEMBERS | IGNORED_MEMBERS)) == 0)); final boolean includeUnmanaged = (((flags & UNMANAGED_MEMBERS) != 0) || ((flags & (MANAGED_MEMBERS | UNMANAGED_MEMBERS | IGNORED_MEMBERS)) == 0)); final boolean includeIgnored = ((flags & IGNORED_MEMBERS) != 0); final boolean includeExisting = (((flags & EXISTING_MEMBERS) != 0) || ((flags & (EXISTING_MEMBERS | PHANTOM_MEMBERS)) == 0)); final boolean includePhantoms = (((flags & PHANTOM_MEMBERS) != 0) || ((flags & (EXISTING_MEMBERS | PHANTOM_MEMBERS)) == 0)); for (int i = 0; i < resources.length; i++) { if ((includeFiles && (resources[i].getType() == IResource.FILE)) || (includeFolders && (resources[i].getType() == IResource.FOLDER))) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resources[i]); final boolean isManaged = svnResource.isManaged(); final boolean isIgnored = svnResource.isIgnored(); if ((isManaged && includeManaged) || (isIgnored && includeIgnored) || (!isManaged && !isIgnored && includeUnmanaged)) { final boolean exists = svnResource.exists(); if ((includeExisting && exists) || (includePhantoms && !exists)) { if (!ignoreHiddenChanges || !Util.isHidden(resources[i], false)) { result.add(svnResource); } } } } } return (ISVNLocalResource[]) result .toArray(new ISVNLocalResource[result.size()]); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNResource#isFolder() */ public boolean isFolder() { return true; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#refreshStatus() */ public void refreshStatus() throws SVNException { refreshStatus(false); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalFolder#refreshStatus(boolean) */ public void refreshStatus(boolean recursive) throws SVNException { SVNProviderPlugin.getPlugin().getStatusCacheManager().refreshStatus( (IContainer)resource, recursive); } /** * A folder is considered dirty if its status is dirty or if one of its children is dirty */ public boolean isDirty() throws SVNException { if (getStatusFromCache().isDirty()) { return true; } // ignored resources are not considered dirty ISVNLocalResource[] children = (ISVNLocalResource[]) members( new NullProgressMonitor(), ALL_UNIGNORED_MEMBERS); for (int i = 0; i < children.length; i++) { if (children[i].isDirty() || children[i].getStatusFromCache().isMissing() || (children[i].exists() && !children[i].isManaged())) { // if a child resource is dirty consider the parent dirty as // well, there is no need to continue checking other siblings. return true; } } return false; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalFolder#acceptChildren(org.tigris.subversion.subclipse.core.ISVNResourceVisitor) */ public void acceptChildren(ISVNResourceVisitor visitor) throws SVNException { // Visit files and then folders ISVNLocalResource[] subFiles = (ISVNLocalResource[]) members(null, FILE_MEMBERS); for (int i = 0; i < subFiles.length; i++) { subFiles[i].accept(visitor); } ISVNLocalResource[] subFolders = (ISVNLocalResource[]) members(null, FOLDER_MEMBERS); for (int i = 0; i < subFolders.length; i++) { subFolders[i].accept(visitor); } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#accept(org.tigris.subversion.subclipse.core.ISVNResourceVisitor) */ public void accept(ISVNResourceVisitor visitor) throws SVNException { visitor.visitFolder(this); } public IFolder[] getSVNFolders(IProgressMonitor monitor, final boolean unmanage) throws SVNException { final ArrayList svnFolders = new ArrayList(); SVNProviderPlugin.run(new ISVNRunnable() { public void run(IProgressMonitor pm) throws SVNException { pm = Policy.monitorFor(pm); pm.beginTask(null, 100); ISVNResource[] members = members(Policy.subMonitorFor(pm, 20), FOLDER_MEMBERS | MANAGED_MEMBERS); ArrayList dirs = new ArrayList(); for (ISVNResource member : members) { dirs.add((IContainer)((ISVNLocalResource)member).getIResource()); } dirs.add((IContainer)getIResource()); // we add the current folder to the // list : we want to add .svn dir // for it too IProgressMonitor monitorDel = Policy.subMonitorFor(pm, 80); monitorDel.beginTask(null, dirs.size()); for (IContainer container : dirs) { monitorDel.worked(1); recursiveGetSVNFolders(container, monitorDel, unmanage); } monitorDel.done(); pm.done(); } private void recursiveGetSVNFolders(IContainer container, IProgressMonitor pm, boolean unmanage) { try { // We must not add svn directories for linked resources. if (container.isLinked()) return; pm.beginTask(null, 10); pm.subTask(container.getFullPath().toOSString()); IResource[] members = container.members(true); for (IResource member : members) { pm.worked(1); if (member.getType() != IResource.FILE) { recursiveGetSVNFolders((IContainer) member, pm, unmanage); } } // Post order traversal IFolder svnFolder = container.getFolder(new Path( SVNProviderPlugin.getPlugin().getAdminDirectoryName())); if (svnFolder.exists()) { svnFolders.add(svnFolder); if (unmanage) { try { svnFolder.delete(true, null); } catch (CoreException e) {} } } } catch (CoreException e) { // Just ignore and continue } finally { pm.done(); } } }, Policy.subMonitorFor(monitor, 99)); IFolder[] folderArray = new IFolder[svnFolders.size()]; svnFolders.toArray(folderArray); return folderArray; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalFolder#unmanage(org.eclipse.core.runtime.IProgressMonitor) */ public void unmanage(IProgressMonitor monitor) throws SVNException { getSVNFolders(monitor, true); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalFolder#setIgnoredAs(java.lang.String) */ public void setIgnoredAs(final String pattern) throws SVNException { AddIgnoredPatternCommand command = new AddIgnoredPatternCommand(this, pattern); command.run(new NullProgressMonitor()); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#revert() */ public void revert() throws SVNException { super.revert(true); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#resolve() */ public void resolve() { //Directories could not be resolved. } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#getStatus() */ public LocalResourceStatus getStatus() throws SVNException { if (getIResource().isTeamPrivateMember() && (SVNProviderPlugin.getPlugin().isAdminDirectory(getIResource().getName()))) { return LocalResourceStatus.NONE; } if (getIResource() instanceof IWorkspaceRoot) { return LocalResourceStatus.NONE; } return super.getStatus(); } public LocalResourceStatus getStatusFromCache() throws SVNException { if (getIResource().isTeamPrivateMember() && (SVNProviderPlugin.getPlugin().isAdminDirectory(getIResource().getName()))) { return LocalResourceStatus.NONE; } if (getIResource() instanceof IWorkspaceRoot) { return LocalResourceStatus.NONE; } return super.getStatusFromCache(); } }LocalResource.java000066400000000000000000000447741203611042400417760ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; import java.io.File; import java.io.IOException; import java.util.HashSet; import java.util.Set; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.Team; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.ISVNLocalFolder; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.subclipse.core.client.OperationResourceCollector; import org.tigris.subversion.subclipse.core.commands.AddIgnoredPatternCommand; import org.tigris.subversion.subclipse.core.commands.GetRemoteResourceCommand; import org.tigris.subversion.subclipse.core.status.StatusCacheManager; import org.tigris.subversion.subclipse.core.util.Assert; import org.tigris.subversion.subclipse.core.util.Util; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNProperty; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNStatusKind; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * Represents handles to SVN resource on the local file system. Synchronization * information is taken from the .svn subdirectories. * * We implement Comparable so that resources are in the right order (i.e. parents created before children) * This is used in SVNTeamProvider.add for example. * * @see LocalFolder * @see LocalFile */ public abstract class LocalResource implements ISVNLocalResource, Comparable { /** The local resource represented by this handle */ protected IResource resource; /** * Creates a SVN handle to the provided resource * @param resource */ protected LocalResource(IResource resource) { Assert.isNotNull(resource); this.resource = resource; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#exists() */ public boolean exists() { return resource.exists(); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#getParent() */ public ISVNLocalFolder getParent() { IContainer parent = resource.getParent(); if (parent==null) { return null; } return new LocalFolder(parent); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNResource#getName() */ public String getName() { return resource.getName(); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#isIgnored() */ @SuppressWarnings("deprecation") public boolean isIgnored() throws SVNException { // If the resource is a team private or linked resource, it is ignored if (resource.isTeamPrivateMember() || resource.isLinked() ) { return true; } // always ignore .svn folder if ((resource.getType() == IResource.FOLDER) && SVNProviderPlugin.getPlugin().isAdminDirectory(getName())) { //$NON-NLS-1$ return true; } if(resource.getType()==IResource.ROOT || resource.getType()==IResource.PROJECT ) { return false; } if (isParentInSvnIgnore()) { return true; } LocalResourceStatus status = getStatusFromCache(); // If resource is derived, it is ignored if it is unmanaged, or if preference is to ignore managed derived resources. if (resource.isDerived()) { if (SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_IGNORE_MANAGED_DERIVED_RESOURCES) || !status.isManaged()) { return true; } } // a managed resource is never ignored if (status.isManaged()) { return false; } // check ignore patterns from the .cvsignore file. if (status.isIgnored()) { return true; } // check the global ignores from Team if (Team.isIgnoredHint(resource)) { return true; } // check the parent, if the parent is ignored // then this resource is ignored also ISVNLocalFolder parent = getParent(); if (parent==null) { return false; } if (parent.isIgnored()) { return true; } return false; } /** * Check whether any of the resources parent does not have svn status IGNORED present in cache. * @return true if there's parent with IGNORED status in cache, false otherwise * @throws SVNException */ protected boolean isParentInSvnIgnore() throws SVNException { StatusCacheManager cacheMgr = SVNProviderPlugin.getPlugin().getStatusCacheManager(); IResource parent = resource.getParent(); //Traverse up to the first parent with status present in cache while ((parent != null) && !cacheMgr.hasCachedStatus(parent)) { parent = parent.getParent(); } //Check if the first parent with status has status IGNORED if (parent != null) { LocalResourceStatus status = cacheMgr.getStatusFromCache(parent); if ((status != null) && (SVNStatusKind.IGNORED.equals(status.getTextStatus()))) { return true; } } //It's not under svn:ignore (at least according to cached statuses) return false; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#setIgnored() */ public void setIgnored() throws SVNException { AddIgnoredPatternCommand command = new AddIgnoredPatternCommand(getParent(), resource.getName()); command.run(null); } /* * @see ISVNLocalResource#isManaged() */ public boolean isManaged() throws SVNException { return getStatusFromCache().isManaged(); } /* * @see ISVNLocalResource#isAdded() */ public boolean isAdded() throws SVNException { return getStatusFromCache().isAdded(); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#hasRemote() */ public boolean hasRemote() throws SVNException { return !isLinked() && getStatusFromCache().hasRemote(); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#isLinked() */ public boolean isLinked() { return SVNWorkspaceRoot.isLinkedResource(this.resource); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#getStatus() */ public LocalResourceStatus getStatus() throws SVNException { if (isLinked()) { return LocalResourceStatus.NONE; } LocalResourceStatus aStatus = SVNProviderPlugin.getPlugin().getStatusCacheManager().getStatus(resource); return (aStatus != null) ? aStatus : LocalResourceStatus.NONE; } public LocalResourceStatus getStatusFromCache() throws SVNException { if (isLinked()) { return LocalResourceStatus.NONE; } LocalResourceStatus aStatus = SVNProviderPlugin.getPlugin().getStatusCacheManager().getStatusFromCache(resource); return (aStatus != null) ? aStatus : LocalResourceStatus.NONE; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#getRevision() */ public SVNRevision getRevision() throws SVNException { if (isLinked()) { return null; } return SVNProviderPlugin.getPlugin().getStatusCacheManager().getResourceRevision(this); } /* * @see Comparable#compareTo(Object) * the comparaison is used for example in SVNTeamProvider.add */ public int compareTo(Object arg0) { LocalResource other = (LocalResource)arg0; // this way, resources will be in order return resource.getFullPath().toString().compareTo(other.resource.getFullPath().toString()); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#getIResource() */ public IResource getIResource() { return resource; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#getFile() */ public File getFile() { return resource.getLocation().toFile(); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#getWorkspaceRoot() */ public SVNWorkspaceRoot getWorkspaceRoot() { SVNTeamProvider teamProvider = (SVNTeamProvider)RepositoryProvider.getProvider(resource.getProject(), SVNProviderPlugin.getTypeId()); if (teamProvider == null) return null; return teamProvider.getSVNWorkspaceRoot(); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNResource#getRepository() */ public ISVNRepositoryLocation getRepository() { try { SVNWorkspaceRoot root = getWorkspaceRoot(); if (root == null) { SVNProviderPlugin.log(IStatus.WARNING, Policy.bind("LocalResource.errorGettingTeamProvider", resource.toString()), null); return null; } return root.getRepository(); } catch (SVNException e) { // an exception is thrown when project is not managed SVNProviderPlugin.log(e); return null; } } /** * get the url of the resource in the repository * The resource does not need to exist in repository * @return the url or null if cannot get the url (when project is not managed) * @throws SVNException */ public SVNUrl getUrl() { try { LocalResourceStatus status = getStatusFromCache(); if (status.isManaged()) { // if the resource is managed, get the url directly return status.getUrl(); } else { // otherwise, get the url of the parent SVNUrl parentUrl = null; ISVNLocalResource parent = getParent(); if (parent != null) { parentUrl = parent.getUrl(); } if (parentUrl == null) { return null; // we cannot find the url } return parentUrl.appendPath(resource.getName()); } } catch (SVNException e) { return null; } } /** * get the remote resource corresponding to the latest revision of this local resource * @return null if there is no remote file corresponding to this local resource * @throws SVNException */ public ISVNRemoteResource getLatestRemoteResource() throws SVNException { return getRemoteResource(SVNRevision.HEAD); } /** * get the remote resource corresponding to the given revision of this local resource * @return null if there is no remote file corresponding to this local resource * @throws SVNException */ public ISVNRemoteResource getRemoteResource(SVNRevision revision) throws SVNException { if (SVNRevision.BASE.equals(revision)) { // if the user wants the base resource, we can't get it using the url return getBaseResource(); } // even if file is not managed, there can be a corresponding resource GetRemoteResourceCommand command = new GetRemoteResourceCommand(getRepository(), getUrl(), revision); command.run(null); return command.getRemoteResource(); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#delete() */ public void delete() throws SVNException { ISVNClientAdapter svnClient = null; try { svnClient = getRepository().getSVNClient(); OperationManager.getInstance().beginOperation(svnClient); svnClient.remove(new File[] { getFile() }, true); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { getRepository().returnSVNClient(svnClient); OperationManager.getInstance().endOperation(); } } /** * Restore pristine working copy file (undo all local edits) */ public void revert(boolean recurse) throws SVNException { ISVNClientAdapter svnClient = null; try { try { Util.saveLocalHistory(resource); } catch (CoreException e) { SVNProviderPlugin.log(IStatus.ERROR, e.getMessage(), e); } svnClient = getRepository().getSVNClient(); OperationManager.getInstance().beginOperation(svnClient); svnClient.revert(getFile(), recurse); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { getRepository().returnSVNClient(svnClient); Set refreshList = new HashSet(); refreshList.add(getResource()); OperationManager.getInstance().endOperation(true, refreshList); } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#resolve() */ public void resolve() throws SVNException { ISVNClientAdapter svnClient = null; try { svnClient = getRepository().getSVNClient(); OperationManager.getInstance().beginOperation(svnClient); svnClient.resolved(getFile()); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { getRepository().returnSVNClient(svnClient); OperationManager.getInstance().endOperation(); } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#setSvnProperty(java.lang.String, java.lang.String, boolean) */ public void setSvnProperty(String name, String value, boolean recurse) throws SVNException { OperationResourceCollector operationResourceCollector = new OperationResourceCollector(); ISVNClientAdapter svnClient = getRepository().getSVNClient(); try { svnClient.addNotifyListener(operationResourceCollector); OperationManager.getInstance().beginOperation(svnClient); svnClient.propertySet(getFile(),name,value,recurse); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { OperationManager.getInstance().endOperation(true, operationResourceCollector.getOperationResources()); if (svnClient != null) { svnClient.removeNotifyListener(operationResourceCollector); getRepository().returnSVNClient(svnClient); } } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#setSvnProperty(java.lang.String, java.io.File, boolean) */ public void setSvnProperty(String name, File value, boolean recurse) throws SVNException { OperationResourceCollector operationResourceCollector = new OperationResourceCollector(); ISVNClientAdapter svnClient = getRepository().getSVNClient(); try { svnClient.addNotifyListener(operationResourceCollector); OperationManager.getInstance().beginOperation(svnClient); svnClient.propertySet(getFile(),name,value,recurse); } catch (IOException e) { throw SVNException.wrapException(e); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { OperationManager.getInstance().endOperation(true, operationResourceCollector.getOperationResources()); if (svnClient != null) { svnClient.removeNotifyListener(operationResourceCollector); getRepository().returnSVNClient(svnClient); } } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#deleteSvnProperty(java.lang.String, boolean) */ public void deleteSvnProperty(String name,boolean recurse) throws SVNException { OperationResourceCollector operationResourceCollector = new OperationResourceCollector(); ISVNClientAdapter svnClient = getRepository().getSVNClient(); try { svnClient.addNotifyListener(operationResourceCollector); OperationManager.getInstance().beginOperation(svnClient); svnClient.propertyDel(getFile(),name,recurse); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { OperationManager.getInstance().endOperation(true, operationResourceCollector.getOperationResources()); if (svnClient != null) { svnClient.removeNotifyListener(operationResourceCollector); getRepository().returnSVNClient(svnClient); } } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#getSvnProperty(java.lang.String) */ public ISVNProperty getSvnProperty(String name) throws SVNException { ISVNClientAdapter svnClient = null; try { svnClient = SVNProviderPlugin.getPlugin().getSVNClient(); SVNProviderPlugin.disableConsoleLogging(); ISVNProperty prop = svnClient.propertyGet(getFile(),name); return prop; } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { SVNProviderPlugin.enableConsoleLogging(); SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(svnClient); } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNLocalResource#getSvnProperties() */ public ISVNProperty[] getSvnProperties() throws SVNException { ISVNClientAdapter svnClient = null; try { svnClient = getRepository().getSVNClient(); ISVNProperty[] properties = svnClient.getProperties(getFile()); return properties; } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { getRepository().returnSVNClient(svnClient); } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNResource#getResource() */ public IResource getResource() { return resource; } /* (non-Javadoc) * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class) */ public Object getAdapter(Class adapter) { if (adapter.isInstance(getIResource())) { return getIResource(); } return Platform.getAdapterManager().getAdapter(this,adapter); } public boolean equals(Object obj) { if (obj instanceof LocalResource) { LocalResource resource = (LocalResource)obj; return resource.getResource().getFullPath().equals(getResource().getFullPath()); } return false; } public int hashCode() { return 23 * resource.getFullPath().hashCode(); } } LocalResourceAdapterFactory.java000066400000000000000000000045661203611042400446220ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IAdapterFactory; import org.tigris.subversion.subclipse.core.ISVNLocalFile; import org.tigris.subversion.subclipse.core.ISVNLocalFolder; import org.tigris.subversion.subclipse.core.ISVNLocalResource; /** * AdaptorFactory used to translate IResource in ISVNLocalResource if possible */ public class LocalResourceAdapterFactory implements IAdapterFactory { private static Class[] SUPPORTED_TYPES = new Class[] { ISVNLocalResource.class, ISVNLocalFile.class, ISVNLocalFolder.class}; /* (non-Javadoc) * @see org.eclipse.core.runtime.IAdapterFactory#getAdapter(java.lang.Object, java.lang.Class) */ public Object getAdapter(Object adaptableObject, Class adapterType) { if (!(adaptableObject instanceof IResource)) { adaptableObject = ((IAdaptable)adaptableObject).getAdapter(IResource.class); } if (adaptableObject instanceof IResource) { IResource resource = (IResource)adaptableObject; if (ISVNLocalResource.class.equals(adapterType)) { return SVNWorkspaceRoot.getSVNResourceFor(resource); } if ((ISVNLocalFile.class.equals(adapterType)) && (adaptableObject instanceof IFile)) { IFile file = (IFile)resource; return SVNWorkspaceRoot.getSVNFileFor(file); } if ((ISVNLocalFolder.class.equals(adapterType)) && (adaptableObject instanceof IContainer)) { IContainer container = (IContainer)resource; return SVNWorkspaceRoot.getSVNFolderFor(container); } } return null; } /* (non-Javadoc) * @see org.eclipse.core.runtime.IAdapterFactory#getAdapterList() */ public Class[] getAdapterList() { return SUPPORTED_TYPES; } } LocalResourceStatus.java000066400000000000000000000344131203611042400431670ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; import java.io.File; import java.io.IOException; import java.util.Date; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.SVNNodeKind; import org.tigris.subversion.svnclientadapter.SVNRevision.Number; import org.tigris.subversion.svnclientadapter.SVNStatusKind; /** * This class has an interface which is very similar to ISVNStatus but we make * sure to take as little memory as possible. This class also have a getBytes() * method and a constructor/factory method that takes bytes. * * This class does NOT stores resource revision intentionally. * The revision numbers changes too frequently and it does not provide too valuable imformation for synchronization * needs anyway. The lastChangedRevision() is more important here. * * @see org.tigris.subversion.svnclientadapter.ISVNStatus */ public class LocalResourceStatus extends ResourceStatus { /** Singleton instance of the status "None" */ public static final LocalResourceStatus NONE = new LocalResourceStatusNone(); protected String urlCopiedFrom = ""; protected String pathConflictOld; protected String pathConflictWorking; protected String pathConflictNew; protected String lockOwner; protected long lockCreationDate; protected String lockComment; protected boolean readOnly; protected boolean isCopied; protected boolean isWcLocked; protected boolean isSwitched; static final long serialVersionUID = 1L; /** * Factory method created instance from byte[] * @param bytes * @return a new instance created from given bytes or null * @throws SVNException */ public static LocalResourceStatus fromBytes(byte[] bytes) throws SVNException { return ((bytes != null) && (bytes.length > 0)) ? new LocalResourceStatus(bytes) : null; } protected LocalResourceStatus() { super(); } /** * @param status * @param url - Only needed when status.getUrl is Null, such as * for an svn:externals folder */ public LocalResourceStatus(ISVNStatus status, String url) { super(status, url, false); /** a temporary variable serving as immediate cache for various status values */ Object aValue = null; // aValue = status.getUrlCopiedFrom(); // if (aValue == null) { // this.urlCopiedFrom = null; // } else { // this.urlCopiedFrom = ((SVNUrl) aValue).toString(); // } this.readOnly = !getFile().canWrite(); aValue = status.getConflictNew(); if (aValue == null) { this.pathConflictNew = null; } else { this.pathConflictNew = ((File) aValue).getAbsolutePath(); } aValue = status.getConflictOld(); if (aValue == null) { this.pathConflictOld = null; } else { this.pathConflictOld = ((File) aValue).getAbsolutePath(); } aValue = status.getConflictWorking(); if (aValue == null) { this.pathConflictWorking = null; } else { this.pathConflictWorking = ((File) aValue).getAbsolutePath(); } this.lockOwner = status.getLockOwner(); this.lockComment = status.getLockComment(); aValue = status.getLockCreationDate(); if (aValue == null) this.lockCreationDate = -1; else this.lockCreationDate = ((Date) aValue).getTime(); this.isCopied = status.isCopied(); this.isWcLocked = status.isWcLocked(); this.isSwitched = status.isSwitched(); } /** * (Re)Construct an object from the given bytes * @param bytes * @throws SVNException */ protected LocalResourceStatus(byte[] bytes) throws SVNException { super(); if (bytes.length < 4) { return; } StatusFromBytesStream in = new StatusFromBytesStream(bytes); initFromBytes(in); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.resources.ResourceStatus#getBytesInto(org.tigris.subversion.subclipse.core.resources.ResourceStatus.StatusToBytesStream) */ protected void getBytesInto(StatusToBytesStream dos) { super.getBytesInto(dos); try { // urlCopiedFrom dos.writeString(urlCopiedFrom); // conflict old dos.writeString(pathConflictOld); // conflict new dos.writeString(pathConflictNew); // conflict working dos.writeString(pathConflictWorking); // lock owner dos.writeString(lockOwner); // lock creation date dos.writeLong(lockCreationDate); // lock comment dos.writeString(lockComment); dos.writeBoolean(isCopied); dos.writeBoolean(isWcLocked); dos.writeBoolean(isSwitched); //read only dos.writeBoolean(readOnly); // file dos.writeString(file.getAbsolutePath()); } catch (IOException e) { return; } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.resources.ResourceStatus#initFromBytes(java.io.DataInputStream) */ protected int initFromBytes(StatusFromBytesStream dis) throws SVNException { int version = super.initFromBytes(dis); try { if (version == FORMAT_VERSION_4 || version == FORMAT_VERSION_3) { readFromVersion3Stream(dis); } else if (version == FORMAT_VERSION_2) { readFromVersion2Stream(dis); } else { readFromVersion1Stream(dis); } } catch (IOException e) { throw new SVNException( "cannot create LocalResourceStatus from bytes", e); } return version; } private void readFromVersion3Stream(StatusFromBytesStream dis) throws IOException { // urlCopiedFrom urlCopiedFrom = dis.readString(); // conflict old pathConflictOld = dis.readString(); // conflict new pathConflictNew = dis.readString(); // conflict working pathConflictWorking = dis.readString(); // lock owner lockOwner = dis.readString(); // lock creation date lockCreationDate = dis.readLong(); // lock comment lockComment = dis.readString(); isCopied = dis.readBoolean(); isWcLocked = dis.readBoolean(); isSwitched = dis.readBoolean(); //read only readOnly = dis.readBoolean(); // file file = new File(dis.readString()); } /** * Just for backwards compatibility with workspaces stored with previous version * @param dis * @throws IOException * @deprecated */ private void readFromVersion2Stream(StatusFromBytesStream dis) throws IOException { readFromVersion1Stream(dis); lockOwner = dis.readUTF(); if (lockOwner.equals("")) lockOwner = null; lockCreationDate = dis.readLong(); lockComment = dis.readUTF(); if (lockComment.equals("")) lockComment = null; readOnly = dis.readBoolean(); } /** * Just for backwards compatibility with workspaces stored with previous version * @param dis * @throws IOException * @deprecated */ private void readFromVersion1Stream(StatusFromBytesStream dis) throws IOException { // urlCopiedFrom String urlCopiedFromString = dis.readUTF(); if (urlCopiedFromString.equals("")) { urlCopiedFrom = null; } else { urlCopiedFrom = url; } // file file = new File(dis.readUTF()); // conflict old pathConflictOld = dis.readUTF(); if (pathConflictOld.equals("")) pathConflictOld = null; // conflict new pathConflictNew = dis.readUTF(); if (pathConflictNew.equals("")) pathConflictNew = null; // conflict new pathConflictWorking = dis.readUTF(); if (pathConflictWorking.equals("")) pathConflictWorking = null; //Pre version 2 lockOwner = null; lockCreationDate = 0L; lockComment = null; readOnly = false; } /** * Returns if is managed by svn (added, normal, modified ...) * * @return if managed by svn */ public boolean isManaged() { return org.tigris.subversion.svnclientadapter.utils.SVNStatusUtils.isManaged(getTextStatus()); } /** * Returns if the resource has a remote counter-part * * @return has version in repository */ public boolean hasRemote() { return org.tigris.subversion.svnclientadapter.utils.SVNStatusUtils.hasRemote(this); } /** * text is considered dirty if text status has status added, deleted, * replaced, modified, merged or conflicted. * * @return true if the resource text is dirty */ public boolean isTextDirty() { SVNStatusKind theTextStatus = getTextStatus(); return ((theTextStatus.equals(SVNStatusKind.ADDED)) || (theTextStatus.equals(SVNStatusKind.DELETED)) || (theTextStatus.equals(SVNStatusKind.REPLACED)) || (theTextStatus.equals(SVNStatusKind.MODIFIED)) || (theTextStatus.equals(SVNStatusKind.MERGED)) || (theTextStatus .equals(SVNStatusKind.CONFLICTED))); } /** * prop is considered dirty if prop status is either conflicted or modified * * @return true if the resource property is dirty */ public boolean isPropDirty() { SVNStatusKind thePropStatus = getPropStatus(); return thePropStatus.equals(SVNStatusKind.CONFLICTED) || thePropStatus.equals(SVNStatusKind.MODIFIED); } /** * resource is considered dirty if properties are dirty or text is dirty * @return true if the resource text or property is dirty */ public boolean isDirty() { return isTextDirty() || isPropDirty(); } public boolean isUnversioned() { return getTextStatus().equals(SVNStatusKind.UNVERSIONED); } public boolean isAdded() { return getTextStatus().equals(SVNStatusKind.ADDED); } public boolean isDeleted() { return getTextStatus().equals(SVNStatusKind.DELETED); } public boolean isMissing() { return getTextStatus().equals(SVNStatusKind.MISSING); } public boolean isReplaced() { return getTextStatus().equals(SVNStatusKind.REPLACED); } public boolean isIgnored() { return getTextStatus().equals(SVNStatusKind.IGNORED); } public boolean isTextMerged() { return getTextStatus().equals(SVNStatusKind.MERGED); } public boolean isTextModified() { return getTextStatus().equals(SVNStatusKind.MODIFIED); } public boolean isTextConflicted() { return getTextStatus().equals(SVNStatusKind.CONFLICTED); } public boolean isPropModified() { return getPropStatus().equals(SVNStatusKind.MODIFIED); } public boolean isPropConflicted() { return getPropStatus().equals(SVNStatusKind.CONFLICTED); } public boolean isLocked() { return lockOwner != null; } /** * the original file without your changes * * @return */ public File getConflictOld() { if (pathConflictOld == null) { return null; } else { return new File(pathConflictOld); } } /** * the file as it is in the repository * * @return */ public File getConflictNew() { if (pathConflictNew == null) { return null; } else { return new File(pathConflictNew); } } /** * your own file with your changes * * @return */ public File getConflictWorking() { if (pathConflictWorking == null) { return null; } else { return new File(pathConflictWorking); } } public Date getLockCreationDate() { if (lockCreationDate == -1) { return null; } else { return new Date(lockCreationDate); } } public String getLockOwner() { return lockOwner; } public boolean isReadOnly() { return readOnly; } public String getLockComment() { return lockComment; } /** * @return true when the resource was copied */ public boolean isCopied() { return isCopied; } /** * @return true when the working copy directory is locked. */ public boolean isWcLocked() { return isWcLocked; } /** * @return true when the resource was switched relative to its parent. */ public boolean isSwitched() { return isSwitched; } public SVNStatusKind getRepositoryPropStatus() { throw new UnsupportedOperationException("LocalResourceStatus does not provide repository statuses"); } public SVNStatusKind getRepositoryTextStatus() { throw new UnsupportedOperationException("LocalResourceStatus does not provide repository statuses"); } public Number getRevision() { throw new UnsupportedOperationException("LocalResourceStatus does not provide (repository) revision"); } /** * Special LocalResourceStatus subclass representing status "None". */ public static class LocalResourceStatusNone extends LocalResourceStatus { static final long serialVersionUID = 1L; protected LocalResourceStatusNone() { super(); this.nodeKind = SVNNodeKind.UNKNOWN.toInt(); this.textStatus = SVNStatusKind.NONE.toInt(); this.propStatus = SVNStatusKind.NONE.toInt(); this.readOnly = false; //this.path = status.getFile().getAbsolutePath(); } } } RemoteFile.java000066400000000000000000000135371203611042400412600ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; import java.io.InputStream; import java.util.Date; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.svnclientadapter.ISVNAnnotations; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNLock; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * This class provides the implementation of ISVNRemoteFile for use by the * repository and sync view. */ public class RemoteFile extends RemoteResource implements ISVNRemoteFile { private ISVNLock lock; private boolean cached = false; /** * Constructor (from byte[]) * * @param local * @param bytes */ public RemoteFile(IResource local, byte[] bytes) { super(local, bytes); } /** * Constructor * * @param parent * @param repository * @param url * @param revision * @param lastChangedRevision * @param date * @param author */ public RemoteFile(RemoteFolder parent, ISVNRepositoryLocation repository, SVNUrl url, SVNRevision revision, SVNRevision.Number lastChangedRevision, Date date, String author) { super(parent, repository, url, revision, lastChangedRevision, date, author); } /** * Constructor (from url and revision) * * @param repository * @param url * @param revision */ public RemoteFile(ISVNRepositoryLocation repository, SVNUrl url, SVNRevision revision) { super(repository, url, revision); } /** * Constructor * @param remoteStatusInfo */ public RemoteFile(RemoteResourceStatus remoteStatusInfo) { this(null, remoteStatusInfo.getRepository(), remoteStatusInfo.getUrl(), remoteStatusInfo.getRepositoryRevision(), remoteStatusInfo .getLastChangedRevision(), remoteStatusInfo .getLastChangedDate(), remoteStatusInfo .getLastCommitAuthor()); } public ISVNLock getLock() { return lock; } public void setLock(ISVNLock lock) { this.lock = lock; } /* * (non-Javadoc) * * @see org.eclipse.team.core.variants.CachedResourceVariant#fetchContents(org.eclipse.core.runtime.IProgressMonitor) */ public void fetchContents(IProgressMonitor aMonitor) throws TeamException { IProgressMonitor monitor = Policy.monitorFor(aMonitor); monitor.beginTask(Policy.bind("RemoteFile.getContents"), 100);//$NON-NLS-1$ ISVNClientAdapter svnClient = null; try { svnClient = repository.getSVNClient(); InputStream inputStream = null; try { if (pegRevision != null) { try { inputStream = svnClient.getContent(url, revision, pegRevision); } catch (SVNClientException e1) {} } if (inputStream == null) { inputStream = svnClient.getContent(url, getRevision(), getRevision()); } super.setContents(inputStream, monitor); cached = true; } catch (SVNClientException e) { throw new TeamException("Failed in RemoteFile.getContents()", e); } } finally { repository.returnSVNClient(svnClient); monitor.done(); } } /* * (non-Javadoc) * * @see org.tigris.subversion.subclipse.core.ISVNRemoteResource#members(org.eclipse.core.runtime.IProgressMonitor) */ public ISVNRemoteResource[] members(IProgressMonitor progress) { return new ISVNRemoteResource[0]; } /* * (non-Javadoc) * * @see org.eclipse.team.core.variants.IResourceVariant#isContainer() */ public boolean isContainer() { return false; } /* * (non-Javadoc) * * @see org.tigris.subversion.subclipse.core.ISVNResource#isFolder() */ public boolean isFolder() { return false; } /* (non-Javadoc) * @see org.eclipse.team.core.variants.CachedResourceVariant#isHandleCached() */ @Override protected boolean isHandleCached() { if (revision.equals(SVNRevision.HEAD)) { if (!cached) { return false; } } return super.isHandleCached(); } /* * (non-Javadoc) * * @see java.lang.Object#equals(java.lang.Object) */ public boolean equals(Object target) { if (this == target) return true; if (!(target instanceof RemoteFile)) return false; RemoteFile remote = (RemoteFile) target; return super.equals(target) && remote.getLastChangedRevision() == getLastChangedRevision(); } /* * (non-Javadoc) * * @see org.tigris.subversion.subclipse.core.ISVNRemoteFile#getAnnotations(org.tigris.subversion.svnclientadapter.SVNRevision, * org.tigris.subversion.svnclientadapter.SVNRevision) */ public ISVNAnnotations getAnnotations(SVNRevision fromRevision, SVNRevision toRevision, boolean includeMergedRevisions, boolean ignoreMimeType) throws TeamException { ISVNClientAdapter svnClient = repository.getSVNClient(); try { return svnClient.annotate(url, fromRevision, toRevision, pegRevision, ignoreMimeType, includeMergedRevisions); } catch (SVNClientException e) { throw new TeamException("Failed in remoteFile.getAnnotations()", e); } finally { repository.returnSVNClient(svnClient); } } } RemoteFolder.java000066400000000000000000000240201203611042400416010ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.ISVNResource; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNStatus; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNDirEntry; import org.tigris.subversion.svnclientadapter.ISVNDirEntryWithLock; import org.tigris.subversion.svnclientadapter.ISVNLock; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNNodeKind; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * This class provides the implementation of ISVNRemoteFolder * */ public class RemoteFolder extends RemoteResource implements ISVNRemoteFolder, ISVNFolder { protected ISVNRemoteResource[] children; /** * Constructor for RemoteFolder. * @param parent * @param repository * @param url * @param revision * @param lastChangedRevision * @param date * @param author */ public RemoteFolder(RemoteFolder parent, ISVNRepositoryLocation repository, SVNUrl url, SVNRevision revision, SVNRevision.Number lastChangedRevision, Date date, String author) { super(parent, repository, url, revision, lastChangedRevision, date, author); } /** * Constructor (from url and revision) * @param repository * @param url * @param revision */ public RemoteFolder(ISVNRepositoryLocation repository, SVNUrl url, SVNRevision revision) { super(repository, url,revision); } /** * Constructor (from byet[]) * @param resource * @param bytes */ public RemoteFolder(IResource resource, byte[] bytes) { super(resource, bytes); } public RemoteFolder(RemoteResourceStatus remoteStatusInfo) { this( null, remoteStatusInfo.getRepository(), remoteStatusInfo.getUrl(), remoteStatusInfo.getRepositoryRevision(), remoteStatusInfo.getLastChangedRevision(), remoteStatusInfo.getLastChangedDate(), remoteStatusInfo.getLastCommitAuthor()); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNRemoteResource#exists(org.eclipse.core.runtime.IProgressMonitor) */ public boolean exists(IProgressMonitor monitor) throws TeamException { try { getMembers(monitor); return true; } catch (SVNException e) { if (e.getStatus().getCode() == SVNStatus.DOES_NOT_EXIST) { return false; } else { throw e; } } } /** * Check whether the given child exists * @param child the child resource to check for existence * @param monitor a progress monitor * @return true when the child resource exists */ protected boolean exists(final ISVNRemoteResource child, IProgressMonitor monitor) throws SVNException { ISVNRemoteResource[] members; try { members = getMembers(monitor); } catch (SVNException e) { if (e.getStatus().getCode() == SVNStatus.DOES_NOT_EXIST) { return false; } else { throw e; } } for (int i = 0; i < members.length;i++) { if (members[i].equals(child)) return true; } return false; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNRemoteFolder#refresh() */ public void refresh() { children = null; } /** * Get the members of this folder at the same revision than this resource * @param monitor a progress monitor * @return ISVNRemoteResource[] an array of child remoteResources */ protected ISVNRemoteResource[] getMembers(IProgressMonitor monitor) throws SVNException { final IProgressMonitor progress = Policy.monitorFor(monitor); progress.beginTask(Policy.bind("RemoteFolder.getMembers"), 100); //$NON-NLS-1$ //Try to hit the cache first. if (children != null) { progress.done(); return children; } ISVNClientAdapter client = null; try { client = getRepository().getSVNClient(); ISVNDirEntryWithLock[] list = client.getListWithLocks(url, getRevision(), SVNRevision.HEAD, false); List result = new ArrayList(list.length); // directories first for (ISVNDirEntryWithLock entryWithLock : list) { ISVNDirEntry entry = entryWithLock.getDirEntry(); if (entry.getNodeKind() == SVNNodeKind.DIR) { result.add(new RemoteFolder(this, getRepository(), url.appendPath(entry.getPath()), getRevision(), entry.getLastChangedRevision(), entry.getLastChangedDate(), entry.getLastCommitAuthor())); } } // files then for (ISVNDirEntryWithLock entryWithLock : list) { ISVNDirEntry entry = entryWithLock.getDirEntry(); ISVNLock lock = entryWithLock.getLock(); if (entry.getNodeKind() == SVNNodeKind.FILE) { RemoteFile remoteFile = new RemoteFile(this, getRepository(), url.appendPath(entry.getPath()), getRevision(), entry.getLastChangedRevision(), entry.getLastChangedDate(), entry.getLastCommitAuthor()); remoteFile.setPegRevision(getRevision()); remoteFile.setLock(lock); result.add(remoteFile); } } //Save it to the cache children = (ISVNRemoteResource[]) result.toArray(new ISVNRemoteResource[result.size()]); return children; } catch (SVNClientException e) { throw new SVNException(new SVNStatus(IStatus.ERROR, SVNStatus.DOES_NOT_EXIST, Policy.bind("RemoteFolder.doesNotExist", getRepositoryRelativePath()))); //$NON-NLS-1$ } finally { getRepository().returnSVNClient(client); progress.done(); } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNFolder#members(org.eclipse.core.runtime.IProgressMonitor, int) */ public ISVNResource[] members(IProgressMonitor monitor, int flags) throws SVNException { final List result = new ArrayList(); ISVNRemoteResource[] resources = getMembers(monitor); // RemoteFolders never have phantom members if ((flags & EXISTING_MEMBERS) == 0 && (flags & PHANTOM_MEMBERS) == 1) { return new ISVNResource[0]; } boolean includeFiles = (((flags & FILE_MEMBERS) != 0) || ((flags & (FILE_MEMBERS | FOLDER_MEMBERS)) == 0)); boolean includeFolders = (((flags & FOLDER_MEMBERS) != 0) || ((flags & (FILE_MEMBERS | FOLDER_MEMBERS)) == 0)); boolean includeManaged = (((flags & MANAGED_MEMBERS) != 0) || ((flags & (MANAGED_MEMBERS | UNMANAGED_MEMBERS | IGNORED_MEMBERS)) == 0)); for (ISVNResource svnResource : resources) { if ((includeFiles && ( ! svnResource.isFolder())) || (includeFolders && (svnResource.isFolder()))) { if (includeManaged) { result.add(svnResource); } } } return (ISVNResource[]) result.toArray(new ISVNResource[result.size()]); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNResource#isFolder() */ public boolean isFolder() { return true; } /* (non-Javadoc) * @see org.eclipse.team.core.variants.IResourceVariant#isContainer() */ public boolean isContainer() { return true; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNRemoteResource#members(org.eclipse.core.runtime.IProgressMonitor) */ public ISVNRemoteResource[] members(IProgressMonitor progress) throws TeamException { return getMembers(progress); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNRemoteFolder#createRemoteFolder(java.lang.String, java.lang.String, org.eclipse.core.runtime.IProgressMonitor) */ public void createRemoteFolder(String folderName, String message, IProgressMonitor monitor) throws SVNException { IProgressMonitor progress = Policy.monitorFor(monitor); progress.beginTask(Policy.bind("RemoteFolder.createRemoteFolder"), 100); //$NON-NLS-1$ ISVNClientAdapter svnClient = null; try { svnClient = getRepository().getSVNClient(); svnClient.mkdir( getUrl().appendPath(folderName), message); refresh(); SVNProviderPlugin.getPlugin().getRepositoryResourcesManager().remoteResourceCreated(this, folderName); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { getRepository().returnSVNClient(svnClient); progress.done(); } } /* (non-Javadoc) * @see org.eclipse.team.core.variants.CachedResourceVariant#fetchContents(org.eclipse.core.runtime.IProgressMonitor) */ protected void fetchContents(IProgressMonitor monitor) { //Do nothing. Folders do not have contents } } RemoteFolderTree.java000066400000000000000000000050511203611042400424240ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; import java.util.Date; import org.eclipse.core.resources.IResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; import org.tigris.subversion.svnclientadapter.SVNRevision.Number; /** * Whereas the RemoteFolder class provides access to a remote hierarchy using * lazy retrieval via getMembers(), the RemoteFolderTree will force * a recursive retrieval of the remote hierarchy in one round trip. */ public class RemoteFolderTree extends RemoteFolder { private static final ISVNRemoteResource[] EMPTY = new ISVNRemoteResource[] {}; /** * @param resource * @param bytes */ public RemoteFolderTree(IResource resource, byte[] bytes) { super(resource, bytes); this.children = EMPTY; } /** * @param repository * @param url * @param revision */ public RemoteFolderTree(ISVNRepositoryLocation repository, SVNUrl url, SVNRevision revision) { super(repository, url, revision); this.children = EMPTY; } /** * @param parent * @param repository * @param url * @param revision * @param lastChangedRevision * @param date * @param author */ public RemoteFolderTree(RemoteFolder parent, ISVNRepositoryLocation repository, SVNUrl url, SVNRevision revision, Number lastChangedRevision, Date date, String author) { super(parent, repository, url, revision, lastChangedRevision, date, author); this.children = EMPTY; } /* * This method is public to allow access by the RemoteFolderTreeBuilder utility class. * No other external classes should use this method. */ public void setChildren(ISVNRemoteResource[] children) { this.children = children; } } RemoteResource.java000066400000000000000000000173421203611042400421660ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; import java.util.Date; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.team.core.TeamException; import org.eclipse.team.core.variants.CachedResourceVariant; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNLogMessage; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; import org.tigris.subversion.svnclientadapter.utils.SVNUrlUtils; /** * The purpose of this class and its subclasses is to implement the corresponding * ISVNRemoteResource interfaces for the purpose of communicating information about * resources that reside in a SVN repository but have not necessarily been loaded * locally. */ public abstract class RemoteResource extends CachedResourceVariant implements ISVNRemoteResource { protected RemoteFolder parent; // null when this is the repository location protected SVNUrl url; protected ISVNRepositoryLocation repository; protected SVNRevision revision; protected SVNRevision.Number lastChangedRevision; protected Date date; protected String author; protected SVNRevision pegRevision; /** * Constructor * @param local * @param bytes */ public RemoteResource(IResource local, byte[] bytes){ String nfo = new String(bytes); lastChangedRevision = new SVNRevision.Number(Long.parseLong(nfo)); revision = lastChangedRevision; ISVNLocalResource res = SVNWorkspaceRoot.getSVNResourceFor(local); url = res.getUrl(); repository = res.getRepository(); } /** * Constructor for RemoteResource. * * @param parent * @param repository * @param url * @param revision * @param lastChangedRevision * @param date * @param author */ public RemoteResource( RemoteFolder parent, ISVNRepositoryLocation repository, SVNUrl url, SVNRevision revision, SVNRevision.Number lastChangedRevision, Date date, String author) { this.parent = parent; this.repository = repository; this.url = url; this.revision = revision; this.lastChangedRevision = lastChangedRevision; this.date = date; this.author = author; } /** * This constructor is used for the folder corresponding to repository location * @param repository * @param url * @param revision */ public RemoteResource(ISVNRepositoryLocation repository, SVNUrl url, SVNRevision revision) { this.parent = null; this.repository = repository; this.url = url; this.revision = revision; // we don't know the following properties this.lastChangedRevision = null; this.date = null; this.author = null; } /* * @see ISVNRemoteResource#getName() */ public String getName() { return (url != null) ? url.getLastPathSegment() : ""; } /** * get the path of this remote resource relatively to the repository */ public String getRepositoryRelativePath() { return SVNUrlUtils.getRelativePath(getRepository().getUrl(), getUrl(), true); } public String getProjectRelativePath() { ISVNRemoteResource project = this; while(project.getParent() != null) { project = project.getParent(); } return SVNUrlUtils.getRelativePath(project.getUrl(), getUrl(), false); } /* * @see ISVNRemoteResource#exists(IProgressMonitor) */ public boolean exists(IProgressMonitor monitor) throws TeamException { return parent.exists(this, monitor); } /* * @see ISVNRemoteResource#getParent() */ public ISVNRemoteFolder getParent() { return parent; } /* * (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ public boolean equals(Object target) { if (this == target) return true; if (!(target instanceof RemoteResource)) return false; RemoteResource remote = (RemoteResource) target; return remote.isContainer() == isContainer() && remote.getUrl().equals(getUrl()) && remote.getRevision() == getRevision(); } /* (non-Javadoc) * @see java.lang.Object#hashCode() */ public int hashCode() { return getUrl().hashCode() + getRevision().hashCode(); } public ISVNRepositoryLocation getRepository() { return repository; } /** * get the url of this remote resource */ public SVNUrl getUrl() { return url; } /** * get the lastChangedRevision */ public SVNRevision.Number getLastChangedRevision() { return lastChangedRevision; } /** * get the revision */ public SVNRevision getRevision() { return revision; } /** * get the date */ public Date getDate() { return date; } /** * get the author */ public String getAuthor() { return author; } public SVNRevision getPegRevision() { return pegRevision; } public void setPegRevision(SVNRevision pegRevision) { this.pegRevision = pegRevision; } /* * (non-Javadoc) * @see org.eclipse.team.core.variants.IResourceVariant#getContentIdentifier() */ public String getContentIdentifier() { if (getLastChangedRevision() == null) { if (revision == null) return ""; else return revision.toString(); } return String.valueOf(getLastChangedRevision().getNumber()); } /* * (non-Javadoc) * @see org.eclipse.team.core.variants.CachedResourceVariant#getCachePath() */ protected String getCachePath() { return this.getUrl().toString() + ":" + getContentIdentifier(); } /* * (non-Javadoc) * * @see org.eclipse.team.core.variants.CachedResourceVariant#getCacheId() */ protected String getCacheId() { return SVNProviderPlugin.ID; } /* (non-Javadoc) * @see org.eclipse.team.core.variants.IResourceVariant#asBytes() */ public byte[] asBytes() { return new Long(getContentIdentifier()).toString().getBytes(); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.ISVNResource#getResource() */ public IResource getResource() { return null; } public ISVNLogMessage[] getLogMessages(SVNRevision pegRevision, SVNRevision revisionStart, SVNRevision revisionEnd, boolean stopOnCopy, boolean fetchChangePath, long limit, boolean includeMergedRevisions) throws TeamException { ISVNClientAdapter svnClient = repository.getSVNClient(); try { return svnClient.getLogMessages(getUrl(), pegRevision, revisionStart, revisionEnd, stopOnCopy, fetchChangePath, limit, includeMergedRevisions); } catch (SVNClientException e) { throw new TeamException("Failed in RemoteResource.getLogMessages()", e); } finally { repository.returnSVNClient(svnClient); } } /* (non-Javadoc) * @see java.lang.Object#toString() */ public String toString() { return getCachePath(); } } RemoteResourceStatus.java000066400000000000000000000217601203611042400433710ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; import java.io.File; import java.io.IOException; import java.util.Date; import org.eclipse.core.resources.IResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.SVNNodeKind; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNStatusKind; import org.tigris.subversion.svnclientadapter.SVNUrl; import org.tigris.subversion.svnclientadapter.SVNRevision.Number; /** * This class has an interface which is very similar to ISVNStatus but we make * sure to take as little memory as possible. This class also have a getBytes() * method and a constructor/factory method that takes bytes. * (However, the bytes are not complete representation of this status, just subset of interesting attributes) * * Since we want to add/modify the nodeKind the setter is also there * @see org.tigris.subversion.svnclientadapter.ISVNStatus * @see org.tigris.subversion.subclipse.core.resources.ResourceStatus */ public class RemoteResourceStatus extends ResourceStatus { /** Singleton instance of the status "None" */ public static final RemoteResourceStatus NONE = new RemoteResourceStatusNone(); static final long serialVersionUID = 1L; protected long repositoryRevision; /** * Factory method created instance from byte[] * @param bytes * @return a new instance created from given bytes or null * @throws SVNException */ public static RemoteResourceStatus fromBytes(byte[] bytes) throws SVNException { return ((bytes != null) && (bytes.length > 0)) ? new RemoteResourceStatus(bytes) : null; } protected RemoteResourceStatus() { super(); } /** * Constructor * @param realStatus * @param revision */ public RemoteResourceStatus(ISVNStatus realStatus, SVNRevision.Number revision) { super(realStatus, null, true); this.textStatus = realStatus.getRepositoryTextStatus().toInt(); this.propStatus = realStatus.getRepositoryPropStatus().toInt(); if (revision == null) { this.repositoryRevision = SVNRevision.SVN_INVALID_REVNUM; } else { this.repositoryRevision = revision.getNumber(); } if (SVNStatusKind.EXTERNAL.equals(realStatus.getTextStatus())) { this.textStatus = realStatus.getTextStatus().toInt(); } } /** * (Re)Construct an object from the given bytes * @param bytes * @throws SVNException */ protected RemoteResourceStatus(byte[] bytes) throws SVNException { super(); StatusFromBytesStream in = new StatusFromBytesStream(bytes); initFromBytes(in); } /** * Answer the revision number. Contrary to getRevision() of * localResourceStatus, this is the revision of the repository at the time * of fetching this status via svn status call ... * (And meanwhile the localResourceStatus was changed, * so it even does not store it's revision anymore) * @return revision of the resource in repository */ public Number getRepositoryRevision() { if (repositoryRevision == SVNRevision.SVN_INVALID_REVNUM) { return null; } else { return new SVNRevision.Number(repositoryRevision); } } /** * Update missing data from the supplied info * * @param info */ public void updateFromInfo(ISVNInfo info) { if (info == null) return; /** a temporary variable serving as immediate cache for various status values */ Object aValue = null; aValue = info.getNodeKind(); if (aValue != null) this.nodeKind = ((SVNNodeKind) aValue).toInt(); aValue = info.getLastChangedDate(); if (aValue == null) { this.lastChangedDate = -1; } else { this.lastChangedDate = ((Date) aValue).getTime(); } aValue = info.getLastChangedRevision(); if (aValue == null) { this.lastChangedRevision = SVNRevision.SVN_INVALID_REVNUM; } else { this.lastChangedRevision = ((SVNRevision.Number) aValue).getNumber(); } this.lastCommitAuthor = info.getLastCommitAuthor(); aValue = info.getUrl(); if (aValue == null) { this.url = null; } else { this.url = ((SVNUrl) aValue).toString(); } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.resources.ResourceStatus#getBytesInto(org.tigris.subversion.subclipse.core.resources.ResourceStatus.StatusToBytesStream) */ protected void getBytesInto(StatusToBytesStream dos) { super.getBytesInto(dos); try { // repositoryRevision dos.writeLong(repositoryRevision); // file dos.writeString(file.getAbsolutePath()); } catch (IOException e) { return; } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.resources.ResourceStatus#initFromBytes(java.io.DataInputStream) */ protected int initFromBytes(StatusFromBytesStream dis) throws SVNException { int version = super.initFromBytes(dis); try { if (version >= FORMAT_VERSION_3) { readFromVersion3Stream(dis); } else { readFromVersion2Stream(dis); } } catch (IOException e) { throw new SVNException( "cannot create RemoteResourceStatus from bytes", e); } return version; } private void readFromVersion3Stream(StatusFromBytesStream dis) throws IOException { // repositoryRevision repositoryRevision = dis.readLong(); // file file = new File(dis.readString()); } /** * Just for backwards compatibility with workspaces stored with previous versions * @param dis * @throws IOException * @deprecated */ private void readFromVersion2Stream(StatusFromBytesStream dis) throws IOException { file = new File(dis.readUTF()); } /** * Set the revision number - for internal purposes only. * This method is expected to be called from initFromBytes() method only! */ protected void setRevisionNumber(long revision) { this.repositoryRevision = revision; } public SVNStatusKind getRepositoryPropStatus() { return getPropStatus(); } public SVNStatusKind getRepositoryTextStatus() { return getTextStatus(); } public Number getRevision() { return getRepositoryRevision(); } public File getConflictNew() { //This is remote/repository status. It's irrelevant here. return null; } public File getConflictOld() { //This is remote/repository status. It's irrelevant here. return null; } public File getConflictWorking() { //This is remote/repository status. It's irrelevant here. return null; } public boolean isCopied() { //This is remote/repository status. It's irrelevant here. return false; } public boolean isSwitched() { //This is remote/repository status. It's irrelevant here. return false; } public boolean isWcLocked() { //This is remote/repository status. It's irrelevant here. return false; } public String getLockComment() { // TODO Locks are not yet supported for RemoteResourceStatus throw new UnsupportedOperationException("Locks are not suported for RemoteResourceStatus"); } public Date getLockCreationDate() { // TODO Locks are not yet supported for RemoteResourceStatus throw new UnsupportedOperationException("Locks are not suported for RemoteResourceStatus"); } public String getLockOwner() { // TODO Locks are not yet supported for RemoteResourceStatus throw new UnsupportedOperationException("Locks are not suported for RemoteResourceStatus"); } /** * Special RemoteResourceStatus subclass representing status "None". */ public static class RemoteResourceStatusNone extends RemoteResourceStatus { static final long serialVersionUID = 1L; protected RemoteResourceStatusNone() { super(); this.nodeKind = SVNNodeKind.UNKNOWN.toInt(); this.repositoryRevision = SVNRevision.SVN_INVALID_REVNUM; this.textStatus = SVNStatusKind.NONE.toInt(); this.propStatus = SVNStatusKind.NONE.toInt(); //this.path = status.getFile().getAbsolutePath(); } public IResource getResource() { return null; } } } RepositoryResourcesManager.java000066400000000000000000000220621203611042400445630ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.repo.ISVNListener; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * provides some static methods to handle repository management * (deletion of remote resources etc ...) */ public class RepositoryResourcesManager { private List repositoryListeners = new ArrayList(); /** * Register to receive notification of repository creation and disposal */ public void addRepositoryListener(ISVNListener listener) { repositoryListeners.add(listener); } /** * De-register a listener */ public void removeRepositoryListener(ISVNListener listener) { repositoryListeners.remove(listener); } /** * signals all listener that we have removed a repository */ public void repositoryRemoved(ISVNRepositoryLocation repository) { for (ISVNListener listener : repositoryListeners) { listener.repositoryRemoved(repository); } } /** * signals all listener that we have removed a repository */ public void repositoryAdded(ISVNRepositoryLocation repository) { for (ISVNListener listener : repositoryListeners) { listener.repositoryAdded(repository); } } /** * signals all listener that we have removed a repository */ public void repositoryModified(ISVNRepositoryLocation repository) { for (ISVNListener listener : repositoryListeners) { listener.repositoryModified(repository); } } /** * signals all listener that a remote resource has been created */ public void remoteResourceCreated(ISVNRemoteFolder parent, String resourceName) { for (ISVNListener listener : repositoryListeners) { listener.remoteResourceCreated(parent,resourceName); } } /** * signals all listener that a remote resource has been created */ public void remoteResourceDeleted(ISVNRemoteResource resource) { for (ISVNListener listener : repositoryListeners) { listener.remoteResourceDeleted(resource); } } /** * signals all listener that a remote resource has been copied */ public void remoteResourceCopied(ISVNRemoteResource source, ISVNRemoteFolder destination) { for (ISVNListener listener : repositoryListeners) { listener.remoteResourceCopied(source, destination); } } /** * signals all listener that a remote resource has been moved */ public void remoteResourceMoved(ISVNRemoteResource resource, ISVNRemoteFolder destinationFolder, String destinationResourceName) { for (ISVNListener listener : repositoryListeners) { listener.remoteResourceMoved(resource, destinationFolder, destinationResourceName); } } /** * Creates a remote folder */ public void createRemoteFolder(ISVNRemoteFolder parent, String folderName, String message,IProgressMonitor monitor) throws SVNException { parent.createRemoteFolder(folderName, message, monitor); } /** * delete some remote resources * Resources can be from several RemoteRepositoryLocations */ public void deleteRemoteResources(ISVNRemoteResource[] remoteResources, String message,IProgressMonitor monitor) throws SVNException { IProgressMonitor progress = Policy.monitorFor(monitor); progress.beginTask(Policy.bind("RepositoryResourcesManager.deleteRemoteResources"), 100*remoteResources.length); //$NON-NLS-1$ // the given remote resources can come from more than a repository and so needs // more than one svnClient // we associate each repository with the corresponding resources to delete HashMap> mapRepositories = new HashMap>(); for (ISVNRemoteResource remoteResource : remoteResources) { ISVNRepositoryLocation repositoryLocation = remoteResource.getRepository(); List resources = (List)mapRepositories.get(repositoryLocation); if (resources == null) { resources = new ArrayList(); mapRepositories.put(repositoryLocation, resources); } resources.add(remoteResource); } ISVNClientAdapter svnClient = null; ISVNRepositoryLocation repository = null; try { for (List resources : mapRepositories.values()) { repository = (resources.get(0)).getRepository(); svnClient = repository.getSVNClient(); SVNUrl urls[] = new SVNUrl[resources.size()]; for (int i = 0; i < resources.size();i++) { ISVNRemoteResource resource = resources.get(i); urls[i] = resource.getUrl(); // refresh just says that resource needs to be updated // it does not update immediatly resource.getParent().refresh(); } svnClient.remove(urls,message); repository.returnSVNClient(svnClient); svnClient = null; repository = null; for (ISVNRemoteResource resource : resources) { remoteResourceDeleted(resource); } progress.worked(100*urls.length); } } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { if (repository != null) { repository.returnSVNClient(svnClient); } progress.done(); } } /** * copy the remote resource to the given remote folder */ public void copyRemoteResource(ISVNRemoteResource resource, ISVNRemoteFolder destinationFolder, String message,IProgressMonitor monitor) throws SVNException { IProgressMonitor progress = Policy.monitorFor(monitor); progress.beginTask(Policy.bind("RepositoryResourcesManager.copyRemoteResources"), 100); //$NON-NLS-1$ ISVNClientAdapter svnClient = null; try { svnClient = resource.getRepository().getSVNClient(); svnClient.copy(resource.getUrl(),destinationFolder.getUrl(),message,SVNRevision.HEAD); destinationFolder.refresh(); remoteResourceCopied(resource, destinationFolder); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { resource.getRepository().returnSVNClient(svnClient); progress.done(); } } public void moveRemoteResource(ISVNRemoteResource resource,ISVNRemoteFolder destinationFolder, String destinationResourceName, String message,IProgressMonitor monitor) throws SVNException { IProgressMonitor progress = Policy.monitorFor(monitor); progress.beginTask(Policy.bind("RepositoryResourcesManager.moveRemoteResources"), 100); //$NON-NLS-1$ ISVNClientAdapter svnClient = null; try { svnClient = resource.getRepository().getSVNClient(); SVNUrl destUrl = destinationFolder.getUrl().appendPath(destinationResourceName); svnClient.move(resource.getUrl(),destUrl,message,SVNRevision.HEAD); resource.getParent().refresh(); destinationFolder.refresh(); remoteResourceMoved(resource, destinationFolder, destinationResourceName); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { resource.getRepository().returnSVNClient(svnClient); progress.done(); } } } RepositoryRootFolder.java000066400000000000000000000007471203611042400434030ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resourcespackage org.tigris.subversion.subclipse.core.resources; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class RepositoryRootFolder extends RemoteFolder { public RepositoryRootFolder(ISVNRepositoryLocation repository, SVNUrl url, SVNRevision revision) { super(repository, url, revision); } public String getName() { return "Root"; } } ResourceStatus.java000066400000000000000000000531461203611042400422200ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.File; import java.io.IOException; import java.io.Serializable; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.tigris.subversion.subclipse.core.ISVNLocalFolder; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.SVNConflictDescriptor; import org.tigris.subversion.svnclientadapter.SVNConflictVersion; import org.tigris.subversion.svnclientadapter.SVNNodeKind; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNRevision.Number; import org.tigris.subversion.svnclientadapter.SVNStatusKind; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * This class has an interface which is very similar to ISVNStatus but we make * sure to take as little memory as possible. This class also have a getBytes() * method and a constructor/factory method that takes bytes. * (However, the bytes are not complete representation of this status, just subset of interesting attributes) * * This class and neither its LocalResourceStatus which is stored in the workspace metadata does NOT * stores resource revision intentionally. * The revision numbers changes too frequently and it does not provide too valuable imformation for synchronization * needs anyway. The lastChangedRevision() is more important here. * * @see org.tigris.subversion.svnclientadapter.ISVNStatus */ public abstract class ResourceStatus implements ISVNStatus, Serializable { static final long serialVersionUID = 1L; protected static final int FORMAT_VERSION_1 = 1; protected static final int FORMAT_VERSION_2 = 2; protected static final int FORMAT_VERSION_3 = 3; protected static final int FORMAT_VERSION_4 = 4; protected String url; protected File file; // file (absolute path) -- not stored in bytes in this class. Subclasses may store it ... protected long lastChangedRevision; protected long lastChangedDate; protected String lastCommitAuthor; protected int textStatus; protected int propStatus; protected int nodeKind; protected boolean treeConflicted; protected boolean fileExternal; protected SVNConflictDescriptor conflictDescriptor; protected ResourceStatus() { super(); } /** * @param status * @param url - Only needed when status.getUrl is Null, such as * for an svn:externals folder */ public ResourceStatus(ISVNStatus status, String url, boolean useUrlHack) { super(); /** a temporary variable serving as immediate cache for various status values */ Object aValue = null; aValue = status.getUrlString(); if (aValue == null) { if (url == null) this.url = null; else this.url = url; } else { this.url = (String) aValue; } // This is a hack to get the URL for incoming additions if when URL is null due to a JavaHL bug. // See Issue #1312 for details. This should only be done for RemoteResourceStatus (useUrlHack == true), // not LocalResourceStatus. if (this.url == null && useUrlHack) { File file = status.getFile(); if (file != null) { List segments = new ArrayList(); segments.add(file.getName()); File parentFile = file.getParentFile(); while (parentFile != null) { if (parentFile.exists()) { IContainer container = ResourcesPlugin.getWorkspace().getRoot().getContainerForLocation(new Path(parentFile.getPath())); if (container != null) { ISVNLocalFolder localFolder = SVNWorkspaceRoot.getSVNFolderFor(container); SVNUrl parentUrl = localFolder.getUrl(); if (parentUrl != null) { StringBuffer sb = new StringBuffer(parentUrl.toString()); for (int i = segments.size() - 1; i >= 0; i--) { sb.append("/" + segments.get(i)); } this.url = sb.toString(); break; } } } segments.add(parentFile.getName()); parentFile = parentFile.getParentFile(); } } } aValue = status.getLastChangedRevision(); if (aValue == null) { this.lastChangedRevision = SVNRevision.SVN_INVALID_REVNUM; } else { this.lastChangedRevision = ((SVNRevision.Number) aValue).getNumber(); } aValue = status.getLastChangedDate(); if (aValue == null) { this.lastChangedDate = -1; } else { this.lastChangedDate = ((Date) aValue).getTime(); } this.lastCommitAuthor = status.getLastCommitAuthor(); this.textStatus = status.getTextStatus().toInt(); this.propStatus = status.getPropStatus().toInt(); this.treeConflicted = status.hasTreeConflict(); this.fileExternal = status.isFileExternal(); this.conflictDescriptor = status.getConflictDescriptor(); this.nodeKind = status.getNodeKind().toInt(); this.file = status.getFile(); } public String toString() { return ((file != null) ? file.getAbsolutePath() : "") + " (" + lastChangedRevision + ") " + getTextStatus().toString(); } /** * @return Returns the file. */ public File getFile() { return file; } /** * @return Returns the absolute resource path. * (It is absolute since it was constructed as status.getFile().getAbsolutePath()) */ public IPath getIPath() { return new Path(getPath()); } /** * @return Returns the absolute resource path (as String). * (It is absolute since it was constructed as status.getFile().getAbsolutePath()) */ public String getPath() { return file.getAbsolutePath(); } public SVNStatusKind getTextStatus() { SVNStatusKind statusKind = SVNStatusKind.fromInt(textStatus); statusKind.setTreeConflicted(treeConflicted); return statusKind; } public SVNStatusKind getPropStatus() { return SVNStatusKind.fromInt(propStatus); } public boolean hasTreeConflict() { return treeConflicted; } public boolean isFileExternal() { return fileExternal; } public SVNConflictDescriptor getConflictDescriptor() { return conflictDescriptor; } /** * Answer a 'join' of text and property statuses. * The text has priority, i.e. the prop does not override the text status * unless it is harmless - i.e. SVNStatusKind.NORMAL * @param textStatus * @param propStatus * @return */ public SVNStatusKind getStatusKind() { if (!SVNStatusKind.NORMAL.equals(getTextStatus()) && !SVNStatusKind.EXTERNAL.equals(getTextStatus()) && !SVNStatusKind.NONE.equals(getTextStatus())) { return getTextStatus(); } else { if (SVNStatusKind.MODIFIED.equals(getPropStatus()) || SVNStatusKind.CONFLICTED.equals(getPropStatus())) { return getPropStatus(); } else { return getTextStatus(); } } } public ISVNRepositoryLocation getRepository() { if (getUrlString() != null) { try { return SVNProviderPlugin.getPlugin().getRepository(getUrlString()); } catch (SVNException e) { // an exception is thrown when resource is not managed SVNProviderPlugin.log(e); return null; } } else if (file != null) { return SVNWorkspaceRoot.getRepositoryFor(new Path(file.getAbsolutePath())); } return null; } /* (non-Javadoc) * @see org.tigris.subversion.svnclientadapter.ISVNStatus#getNodeKind() */ public SVNNodeKind getNodeKind() { return SVNNodeKind.fromInt(nodeKind); } /* (non-Javadoc) * @see org.tigris.subversion.svnclientadapter.ISVNStatus#getUrl() */ public SVNUrl getUrl() { if (url == null) { return null; } else { try { return new SVNUrl(url); } catch (MalformedURLException e) { return null; } } } public String getUrlString() { return url; } /* (non-Javadoc) * @see org.tigris.subversion.svnclientadapter.ISVNStatus#getLastChangedRevision() */ public Number getLastChangedRevision() { if (lastChangedRevision == SVNRevision.SVN_INVALID_REVNUM) { return null; } else { return new SVNRevision.Number(lastChangedRevision); } } /* (non-Javadoc) * @see org.tigris.subversion.svnclientadapter.ISVNStatus#getLastChangedDate() */ public Date getLastChangedDate() { if (lastChangedDate == -1) { return null; } else { return new Date(lastChangedDate); } } /* (non-Javadoc) * @see org.tigris.subversion.svnclientadapter.ISVNStatus#getLastCommitAuthor() */ public String getLastCommitAuthor() { return lastCommitAuthor; } /** * Initialize receivers internal state according the information encoded in the given DataInputStream. * (Which contents was created with {@link #getBytes()} * @param dis * @return encoding format version * @throws SVNException */ protected int initFromBytes(StatusFromBytesStream dis) throws SVNException { int version; try { version = dis.readInt(); if (version != FORMAT_VERSION_1 && version != FORMAT_VERSION_2 && version != FORMAT_VERSION_3 && version != FORMAT_VERSION_4) { throw new SVNException("Invalid format"); } if (version == FORMAT_VERSION_2) { readFromVersion2Stream(dis); } else { readFromVersion3Stream(dis); } if (version == FORMAT_VERSION_4) { readFromVersion4Stream(dis); } } catch (IOException e) { throw new SVNException( "cannot create RemoteResourceStatus from bytes", e); } return version; } private void readFromVersion4Stream(StatusFromBytesStream dis) throws IOException { fileExternal = dis.readBoolean(); treeConflicted = dis.readBoolean(); if (treeConflicted) { int action = dis.readInt(); int reason = dis.readInt(); int operation = dis.readInt(); String leftReposURL = dis.readString(); long leftPegRevision = dis.readLong(); String leftPathInRepos = dis.readString(); int leftNodeKind = dis.readInt(); SVNConflictVersion srcLeftVersion = new SVNConflictVersion(leftReposURL, leftPegRevision, leftPathInRepos, leftNodeKind); String rightReposURL = dis.readString(); long rightPegRevision = dis.readLong(); String rightPathInRepos = dis.readString(); int rightNodeKind = dis.readInt(); SVNConflictVersion srcRightVersion = new SVNConflictVersion(rightReposURL, rightPegRevision, rightPathInRepos, rightNodeKind); conflictDescriptor = new SVNConflictDescriptor(url, action, reason, operation, srcLeftVersion, srcRightVersion); } else conflictDescriptor = null; } private void readFromVersion3Stream(StatusFromBytesStream dis) throws IOException { // url url = dis.readString(); // lastChangedRevision lastChangedRevision = dis.readLong(); // lastChangedDate lastChangedDate = dis.readLong(); // lastCommitAuthor lastCommitAuthor = dis.readString(); // textStatus textStatus = dis.readInt(); // propStatus propStatus = dis.readInt(); // nodeKind nodeKind= dis.readInt(); } /** * Just for backwards compatibility with workspaces stored with previous version * @param dis * @throws IOException */ private void readFromVersion2Stream(StatusFromBytesStream dis) throws IOException { // url String urlString = dis.readUTF(); if (urlString.equals("")) { url = null; } else { url = urlString; } // lastChangedRevision lastChangedRevision = dis.readLong(); // lastChangedDate lastChangedDate = dis.readLong(); // lastCommitAuthor String lastCommitAuthorString = dis.readUTF(); if ((url == null) || (lastCommitAuthorString.equals(""))) { lastCommitAuthor = null; } else { lastCommitAuthor = lastCommitAuthorString; } // textStatus textStatus = dis.readInt(); // propStatus propStatus = dis.readInt(); // revision // originally, the ResourceStatus also contained revision data. // we do not store them anymore, but for backwards compatibilty, // we maintain the byte[] array offsets so we store/read 0 here. //revision = dis.readLong(); setRevisionNumber(dis.readLong()); // nodeKind nodeKind = dis.readInt(); } /** * Get the status encoded in bytes * @return byte[] with externalized status */ public byte[] getBytes() { StatusToBytesStream out = new StatusToBytesStream(); getBytesInto(out); return out.toByteArray(); } /** * Encode the internal state into given DataOutputStream * Decoding is done by {@link #initFromBytes(DataInputStream)} * @param dos */ protected void getBytesInto(StatusToBytesStream dos) { try { // dos.writeInt(FORMAT_VERSION_3); dos.writeInt(FORMAT_VERSION_4); // url dos.writeString(url); // lastChangedRevision dos.writeLong(lastChangedRevision); // lastChangedDate dos.writeLong(lastChangedDate); // lastCommitAuthor dos.writeString(lastCommitAuthor); // textStatus dos.writeInt(textStatus); // propStatus dos.writeInt(propStatus); // nodeKind dos.writeInt(nodeKind); // fileExternal dos.writeBoolean(fileExternal); // treeConflicted dos.writeBoolean(treeConflicted); // conflictDescriptor if (treeConflicted && conflictDescriptor != null) { dos.writeInt(conflictDescriptor.getAction()); dos.writeInt(conflictDescriptor.getReason()); dos.writeInt(conflictDescriptor.getOperation()); if (conflictDescriptor.getSrcLeftVersion() != null) { dos.writeString(conflictDescriptor.getSrcLeftVersion().getReposURL()); dos.writeLong(conflictDescriptor.getSrcLeftVersion().getPegRevision()); dos.writeString(conflictDescriptor.getSrcLeftVersion().getPathInRepos()); dos.writeInt(conflictDescriptor.getSrcLeftVersion().getNodeKind()); } else { dos.writeString(""); dos.writeLong(-1); dos.writeString(""); dos.writeInt(-1); } if (conflictDescriptor.getSrcRightVersion() != null) { dos.writeString(conflictDescriptor.getSrcRightVersion().getReposURL()); dos.writeLong(conflictDescriptor.getSrcRightVersion().getPegRevision()); dos.writeString(conflictDescriptor.getSrcRightVersion().getPathInRepos()); dos.writeInt(conflictDescriptor.getSrcRightVersion().getNodeKind()); } else { dos.writeString(""); dos.writeLong(-1); dos.writeString(""); dos.writeInt(-1); } } } catch (IOException e) { return; } } /** * Set the revision number - for internal purposes only. * This class does not contain revision anymore. * However subclasses might add it. * This method is expected to be called from initFromBytes() method only! */ protected void setRevisionNumber(long revision) { //Do not set anything. There is no revision here. //However subclass may added it } /** * Performance optimized ByteArrayOutputStream for storing status data. * This is one-purpose specialized stream without need for synchronization * or generic bounds checking */ protected static final class StatusToBytesStream extends ByteArrayOutputStream { protected StatusToBytesStream() { //Set the default size which should fit for most cases super(256); } /** * Overrides the standard {@link ByteArrayOutputStream#write(int)}. * This is one-purpose specialized stream without need for synchronization. * The method does not check for available capacity, the {@link #ensureCapacity(int)} has to be explicitely called prior */ public final void write(int b) { buf[count] = (byte)b; count++; } /** * Ensure the stream is able to store next n bytes. * Grow the array if necessary. * @param length */ private void ensureCapacity(int length) { int newcount = count + length; if (newcount > buf.length) { byte newbuf[] = new byte[Math.max(buf.length + 100, newcount)]; System.arraycopy(buf, 0, newbuf, 0, count); buf = newbuf; } } /** * Overrides the standard {@link ByteArrayOutputStream#toByteArray()}. * This is one-purpose stream so we don't have to return the copy of the buffer, * so we return the ByteArrays' buffer itself directly. */ public final byte[] toByteArray() { return buf; } public final void writeLong(long v) throws IOException { ensureCapacity(8); write((byte) (v >>> 56)); write((byte) (v >>> 48)); write((byte) (v >>> 40)); write((byte) (v >>> 32)); write((byte) (v >>> 24)); write((byte) (v >>> 16)); write((byte) (v >>> 8)); write((byte) (v >>> 0)); } public final void writeInt(int v) throws IOException { ensureCapacity(4); write((v >>> 24) & 0xFF); write((v >>> 16) & 0xFF); write((v >>> 8) & 0xFF); write((v >>> 0) & 0xFF); } public final void writeBoolean(boolean v) throws IOException { ensureCapacity(1); write(v ? 1 : 0); } public final void writeString(String v) throws IOException { int length = (v != null) ? v.length() : 0; writeInt(length); ensureCapacity(length * 2); for (int i = 0; i < length; i++) { char c = v.charAt(i); write((c >>> 8) & 0xFF); write((c >>> 0) & 0xFF); } } } /** * Performance optimized ByteArrayInputStream for storing status data. * This is one-purpose specialized stream without need for synchronization * or generic bounds checking */ protected static final class StatusFromBytesStream extends ByteArrayInputStream { private DataInputStream dis; protected StatusFromBytesStream(byte buf[]) { super(buf); this.dis = new DataInputStream(this); } /** * Overrides the standatd {@link ByteArrayInputStream#read()} * This is one-purpose specialized stream without need for synchronization. */ public final int read() { return (pos < count) ? (buf[pos++] & 0xff) : -1; } /** * Overrides the standatd {@link ByteArrayInputStream#read(byte[], int, int)} * This is one-purpose specialized stream without need for synchronization. */ public final int read(byte b[], int off, int len) { if (pos >= count) { return -1; } if (pos + len > count) { len = count - pos; } if (len <= 0) { return 0; } System.arraycopy(buf, pos, b, off, len); pos += len; return len; } public final long readLong() throws IOException { return this.dis.readLong(); } public final int readInt() throws IOException { return this.dis.readInt(); } public final boolean readBoolean() throws IOException { return this.dis.readBoolean(); } public final String readString() throws IOException { int length = this.dis.readInt(); if (length == 0) { return null; } char[] chars = new char[length]; for (int i = 0; i < length; i++) { chars[i] = this.dis.readChar(); } return new String(chars); } public final String readUTF() throws IOException { return this.dis.readUTF(); } } } SVNFileModificationValidator.java000066400000000000000000000203061203611042400446570ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; import java.io.File; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFileModificationValidator; import org.eclipse.core.resources.IResourceStatus; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtension; import org.eclipse.core.runtime.IExtensionPoint; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.team.core.RepositoryProvider; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.commands.LockResourcesCommand; import org.tigris.subversion.svnclientadapter.ISVNProperty; public class SVNFileModificationValidator implements IFileModificationValidator { /* * A validator plugged in the the Team UI that will prompt * the user to make read-only files writtable. In the absense of * this validator, edit/save fail on read-only files. */ private IFileModificationValidator uiValidator; // The id of the core team plug-in private static final String ID = "org.eclipse.team.core"; //$NON-NLS-1$ // The id of the default file modification vaidator extension point private static final String DEFAULT_FILE_MODIFICATION_VALIDATOR_EXTENSION = "defaultFileModificationValidator"; //$NON-NLS-1$ public IStatus validateEdit(IFile[] files, Object context) { String comment = ""; boolean stealLock = false; // reduce the array to just read only files ReadOnlyFiles readOnlyFiles = processFileArray(files); if (readOnlyFiles.size() == 0) return Status.OK_STATUS; // of the read-only files, get array of ones which are versioned IFile[] managedFiles = readOnlyFiles.getManaged(); if (managedFiles.length > 0) { // Prompt user to lock files if (context != null) { ISVNFileModificationValidatorPrompt svnFileModificationValidatorPrompt = SVNProviderPlugin.getPlugin().getSvnFileModificationValidatorPrompt(); if (svnFileModificationValidatorPrompt != null) { if (!svnFileModificationValidatorPrompt.prompt(managedFiles, context)) return Status.CANCEL_STATUS; comment = svnFileModificationValidatorPrompt.getComment(); stealLock = svnFileModificationValidatorPrompt.isStealLock(); } } // Run the svn lock command RepositoryProvider provider = RepositoryProvider.getProvider(managedFiles[0].getProject()); if ((provider != null) && (provider instanceof SVNTeamProvider)) { SVNTeamProvider svnTeamProvider = (SVNTeamProvider) provider; LockResourcesCommand command = new LockResourcesCommand(svnTeamProvider.getSVNWorkspaceRoot(), managedFiles, stealLock, comment, false); try { command.run(new NullProgressMonitor()); } catch (SVNException e) { SVNProviderPlugin.log(IStatus.ERROR, e.getMessage(), e); return Status.CANCEL_STATUS; } } } // Process any unmanaged but read-only files. For // those we need to prompt the user to flip the read only bit IFile[] unManagedFiles = readOnlyFiles.getUnManaged(); if (unManagedFiles.length > 0) { synchronized (this) { if (uiValidator == null) uiValidator = loadUIValidator(); } if (uiValidator != null) { return uiValidator.validateEdit(unManagedFiles, context); } // There was no plugged in validator so fail gracefully return getStatus(unManagedFiles); } return Status.OK_STATUS; } public IStatus validateSave(IFile file) { return Status.OK_STATUS; } /** * This method processes the file array and separates * the read-only files into managed and unmanaged lists. */ private ReadOnlyFiles processFileArray(IFile[] files) { ReadOnlyFiles result = new ReadOnlyFiles(); for (IFile file : files) { if (isReadOnly(file)) { try { ISVNLocalResource resource = SVNWorkspaceRoot.getSVNResourceFor(file); if (resource.isManaged()) { if (hasNeedsLockProperty(resource)) result.addManaged(file); else result.addUnManaged(file); } else result.addUnManaged(file); } catch (SVNException e) { result.addUnManaged(file); } } } return result; } private boolean hasNeedsLockProperty(ISVNLocalResource resource) { try { ISVNProperty needsLock = resource.getSvnProperty("svn:needs-lock"); //$NON-NLS-1$ if (needsLock != null && needsLock.getValue().length() > 0) return true; } catch (SVNException e) { return false; } return false; } private boolean isReadOnly(IFile file) { if (file == null) return false; File fsFile = file.getLocation().toFile(); if (fsFile == null || fsFile.canWrite()) return false; else return true; } private IStatus getDefaultStatus(IFile file) { return isReadOnly(file) ? new Status(IStatus.ERROR, SVNProviderPlugin.ID, IResourceStatus.READ_ONLY_LOCAL, Policy.bind("FileModificationValidator.fileIsReadOnly", new String[] { file.getFullPath().toString() }), null) : Status.OK_STATUS; } protected IStatus getStatus(IFile[] files) { if (files.length == 1) { return getDefaultStatus(files[0]); } IStatus[] stati = new Status[files.length]; boolean allOK = true; for (int i = 0; i < files.length; i++) { stati[i] = getDefaultStatus(files[i]); if(! stati[i].isOK()) allOK = false; } return new MultiStatus(SVNProviderPlugin.ID, 0, stati, allOK ? Policy.bind("ok") : Policy.bind("FileModificationValidator.someReadOnly"), null); } private IFileModificationValidator loadUIValidator() { IExtensionPoint extension = Platform.getExtensionRegistry().getExtensionPoint(ID, DEFAULT_FILE_MODIFICATION_VALIDATOR_EXTENSION); if (extension != null) { IExtension[] extensions = extension.getExtensions(); if (extensions.length > 0) { IConfigurationElement[] configElements = extensions[0].getConfigurationElements(); if (configElements.length > 0) { try { Object o = configElements[0].createExecutableExtension("class"); //$NON-NLS-1$ if (o instanceof IFileModificationValidator) { return (IFileModificationValidator)o; } } catch (CoreException e) { SVNProviderPlugin.log(e.getStatus().getSeverity(), e.getMessage(), e); } } } } return null; } private class ReadOnlyFiles { private List managed; private List unManaged; public ReadOnlyFiles() { super(); managed = new ArrayList(); unManaged = new ArrayList(); } public void addManaged(IFile file) { managed.add(file); } public void addUnManaged(IFile file) { unManaged.add(file); } public IFile[] getManaged() { return managed.toArray(new IFile[managed.size()]); } public IFile[] getUnManaged() { return unManaged.toArray(new IFile[unManaged.size()]); } public int size() { return managed.size() + unManaged.size(); } } } SVNMoveDeleteHook.java000066400000000000000000000325741203611042400424700ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; import java.io.File; import java.util.HashSet; import java.util.Set; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.team.IMoveDeleteHook; import org.eclipse.core.resources.team.IResourceTree; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.IMessageHandler; import org.tigris.subversion.subclipse.core.ISVNLocalFile; import org.tigris.subversion.subclipse.core.ISVNLocalFolder; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNProperty; import org.tigris.subversion.svnclientadapter.SVNClientException; public class SVNMoveDeleteHook implements IMoveDeleteHook { private static Set deletedFiles = new HashSet(); private void deleteResource(ISVNLocalResource resource) throws SVNException { ISVNClientAdapter svnClient = resource.getRepository().getSVNClient(); try { svnClient.remove(new File[] { resource.getResource().getLocation().toFile() }, true); } catch (SVNClientException e) { throw new SVNException(IStatus.ERROR, TeamException.UNABLE, e.getMessage(), e); } finally { resource.getRepository().returnSVNClient(svnClient); } } public boolean deleteFile(IResourceTree tree, IFile file, int updateFlags, IProgressMonitor monitor) { if (SVNWorkspaceRoot.isLinkedResource(file)) return false; ISVNLocalFile resource = new LocalFile(file); try { if (!resource.isManaged()) { return false; } if (getDeferFileDelete(file)) return false; monitor.beginTask(null, 1000); deletedFiles.add(file); deleteResource(resource); tree.deletedFile(file); } catch (SVNException e) { tree.failed(e.getStatus()); } finally { monitor.done(); } return true; } public static boolean isDeleted(IFile file) { return deletedFiles.contains(file); } public static void removeFromDeletedFileList(IFile file) { deletedFiles.remove(file); } public boolean deleteFolder(IResourceTree tree, IFolder folder, int updateFlags, IProgressMonitor monitor) { if (SVNWorkspaceRoot.isLinkedResource(folder)) return false; ISVNLocalFolder resource = new LocalFolder(folder); try { if (!resource.isManaged()) { return false; } monitor.beginTask(null, 1000); deleteResource(resource); tree.deletedFolder(folder); } catch (SVNException e) { tree.failed(e.getStatus()); } finally { monitor.done(); } return true; } /* * (non-Javadoc) * * @see org.eclipse.core.resources.team.IMoveDeleteHook#moveFile(org.eclipse.core.resources.team.IResourceTree, * org.eclipse.core.resources.IFile, org.eclipse.core.resources.IFile, * int, org.eclipse.core.runtime.IProgressMonitor) */ public boolean moveFile(IResourceTree tree, IFile source, IFile destination, int updateFlags, IProgressMonitor monitor) { if (SVNWorkspaceRoot.isLinkedResource(source)) return false; try { RepositoryProvider repositoryProvider = RepositoryProvider .getProvider(destination.getProject()); if (repositoryProvider == null || !(repositoryProvider instanceof SVNTeamProvider)) //target is not SVN project throw new SVNException(Policy.bind("SVNMoveHook.moveFileException")); //$NON-NLS-1$ ISVNLocalFile resource = new LocalFile(source); if (!resource.isManaged()) return false; // pass ISVNClientAdapter svnClient = resource.getRepository() .getSVNClient(); monitor.beginTask(null, 1000); try { OperationManager.getInstance().beginOperation(svnClient); // add destination directory to version control if necessary // see bug #15 if (!SVNWorkspaceRoot.getSVNFolderFor(destination.getParent()) .isManaged()) { SVNTeamProvider provider = (SVNTeamProvider) repositoryProvider; provider.add(new IResource[] { destination.getParent() }, IResource.DEPTH_ZERO, new NullProgressMonitor()); ISVNLocalResource parent = SVNWorkspaceRoot.getSVNResourceFor(destination.getParent()); if (parent != null) parent.refreshStatus(); } // force is set to true because when we rename (refactor) a // java class, the file is modified before being moved // A modified file cannot be moved without force svnClient.move(source.getLocation().toFile(), destination.getLocation().toFile(), true); //movedFile must be done before endOperation because // destination file must not already exist in the workspace // resource tree. tree.movedFile(source, destination); destination.refreshLocal(IResource.DEPTH_ZERO, monitor); } catch (SVNClientException e) { throw SVNException.wrapException(e); } catch (TeamException e) { throw SVNException.wrapException(e); } catch (CoreException e) { throw SVNException.wrapException(e); } finally { resource.getRepository().returnSVNClient(svnClient); OperationManager.getInstance().endOperation(false, null, false); } } catch (SVNException e) { tree.failed(e.getStatus()); } finally { monitor.done(); } return true; } public boolean moveFolder(IResourceTree tree, IFolder source, IFolder destination, int updateFlags, IProgressMonitor monitor) { if (SVNWorkspaceRoot.isLinkedResource(source)) return false; try { ISVNLocalFolder resource = new LocalFolder(source); if (!resource.isManaged()) return false; RepositoryProvider repositoryProvider = RepositoryProvider .getProvider(destination.getProject()); if (repositoryProvider == null || !(repositoryProvider instanceof SVNTeamProvider)) //target is not SVN project throw new SVNException(Policy.bind("SVNMoveHook.moveFolderException")); //$NON-NLS-1$ monitor.beginTask(null, 1000); ISVNClientAdapter svnClient = resource.getRepository().getSVNClient(); try { OperationManager.getInstance().beginOperation(svnClient); // add destination directory to version control if necessary // see bug #15 if (!SVNWorkspaceRoot.getSVNFolderFor(destination.getParent()) .isManaged()) { SVNTeamProvider provider = (SVNTeamProvider)repositoryProvider; provider.add(new IResource[] { destination.getParent() }, IResource.DEPTH_ZERO, new NullProgressMonitor()); ISVNLocalResource parent = SVNWorkspaceRoot.getSVNResourceFor(destination.getParent()); if (parent != null) parent.refreshStatus(); } svnClient.move(source.getLocation().toFile(), destination.getLocation().toFile(), true); tree.movedFolderSubtree(source, destination); destination.refreshLocal(IResource.DEPTH_INFINITE, monitor); } catch (SVNClientException e) { throw SVNException.wrapException(e); } catch (CoreException e) { throw SVNException.wrapException(e); } finally { resource.getRepository().returnSVNClient(svnClient); OperationManager.getInstance().endOperation(false); } } catch (SVNException e) { tree.failed(e.getStatus()); } finally { monitor.done(); } return true; } /* (non-Javadoc) * @see org.eclipse.core.resources.team.IMoveDeleteHook#deleteProject(org.eclipse.core.resources.team.IResourceTree, org.eclipse.core.resources.IProject, int, org.eclipse.core.runtime.IProgressMonitor) */ public boolean deleteProject(IResourceTree tree, IProject project, int updateFlags, IProgressMonitor monitor) { ISVNLocalFolder resource = new LocalFolder(project); try { // If contents are not being deleted, let Eclipse handle. if ((updateFlags & IResource.NEVER_DELETE_PROJECT_CONTENT) == IResource.NEVER_DELETE_PROJECT_CONTENT) { return false; } // If not managed, let Eclipse handle. if (!resource.isManaged()) return false; File projectDirectory = new File(project.getLocationURI()); // If meta directory does not exist, let Eclipse handle. File metaFolder = new File(projectDirectory, ".svn"); //$NON-NLS-1$ if (!metaFolder.exists()) { return false; } // If database file does not exist, let Eclipse handle. File databaseFile = new File(metaFolder, "wc.db"); //$NON-NLS-1$ if (!databaseFile.exists()) { return false; } // If we can delete database file, let Eclipse handle project deletion. if (databaseFile.delete()) { return false; } // Show message dialog in UI thread and cancel deletion. SVNProviderPlugin.handleMessage(Policy.bind("SVNMoveDeleteHook.4"), Policy.bind("SVNMoveDeleteHook.5") + project.getName() + Policy.bind("SVNMoveDeleteHook.6"), IMessageHandler.ERROR); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ return true; } catch (Exception e) { // Let Eclipse try to handle it. return false; } } /* (non-Javadoc) * @see org.eclipse.core.resources.team.IMoveDeleteHook#moveProject(org.eclipse.core.resources.team.IResourceTree, org.eclipse.core.resources.IProject, org.eclipse.core.resources.IProjectDescription, int, org.eclipse.core.runtime.IProgressMonitor) */ public boolean moveProject(IResourceTree tree, IProject source, IProjectDescription description, int updateFlags, IProgressMonitor monitor) { return false; } // Get the DeferFileDelete Property for selected resource. First looks at selected resource, // then works up through ancestors until a folder with the DeferFileDelete property // is found. If none found, returns false. private boolean getDeferFileDelete(IResource resource) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); ISVNProperty property = null; try { if (svnResource.isManaged()) { property = svnResource.getSvnProperty("DeferFileDelete"); //$NON-NLS-1$ } } catch (SVNException e) { } if ((property != null) && (property.getValue() != null) && (property.getValue().trim().length() > 0)) { return property.getValue().equalsIgnoreCase("true"); //$NON-NLS-1$ } IResource checkResource = resource; while (checkResource.getParent() != null) { checkResource = checkResource.getParent(); if (checkResource.getParent() == null) return false; svnResource = SVNWorkspaceRoot.getSVNResourceFor(checkResource); try { if (svnResource.isManaged()) property = svnResource.getSvnProperty("DeferFileDelete"); //$NON-NLS-1$ } catch (SVNException e1) { } if ((property != null) && (property.getValue() != null) && (property.getValue().trim().length() > 0)) { return property.getValue().equalsIgnoreCase("true"); //$NON-NLS-1$ } } return false; } }SVNTreeConflict.java000066400000000000000000000057141203611042400421730ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resourcespackage org.tigris.subversion.subclipse.core.resources; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; import org.tigris.subversion.subclipse.core.util.File2Resource; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.SVNConflictDescriptor; public class SVNTreeConflict implements ISVNTreeConflict, IAdaptable { private ISVNStatus status; public SVNTreeConflict(ISVNStatus status) { super(); this.status = status; } public SVNConflictDescriptor getConflictDescriptor() { return status.getConflictDescriptor(); } public String getDescription() { String reason; String action; String operation; switch (status.getConflictDescriptor().getReason()) { case SVNConflictDescriptor.Reason.edited: reason = "edit"; //$NON-NLS-1$ break; case SVNConflictDescriptor.Reason.obstructed: reason = "obstruction"; //$NON-NLS-1$ break; case SVNConflictDescriptor.Reason.deleted: reason = "delete"; //$NON-NLS-1$ break; case SVNConflictDescriptor.Reason.missing: reason = "missing"; //$NON-NLS-1$ break; case SVNConflictDescriptor.Reason.unversioned: reason = "unversioned"; //$NON-NLS-1$ break; case SVNConflictDescriptor.Reason.added: reason = "add"; //$NON-NLS-1$ break; default: reason = Integer.toString(status.getConflictDescriptor().getReason()); break; } switch (status.getConflictDescriptor().getAction()) { case SVNConflictDescriptor.Action.edit: action = "edit"; //$NON-NLS-1$ break; case SVNConflictDescriptor.Action.add: action = "add"; //$NON-NLS-1$ break; case SVNConflictDescriptor.Action.delete: action = "delete"; //$NON-NLS-1$ break; default: action = Integer.toString(status.getConflictDescriptor().getAction()); break; } switch (status.getConflictDescriptor().getOperation()) { case SVNConflictDescriptor.Operation._none: operation = "none"; //$NON-NLS-1$ break; case SVNConflictDescriptor.Operation._update: operation = "update"; //$NON-NLS-1$ break; case SVNConflictDescriptor.Operation._switch: operation = "switch"; //$NON-NLS-1$ break; case SVNConflictDescriptor.Operation._merge: operation = "merge"; //$NON-NLS-1$ break; default: operation = Integer.toString(status.getConflictDescriptor().getOperation()); break; } return "local " + reason + ", incoming " + action + " upon " + operation; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } public ISVNStatus getStatus() { return status; } public IResource getResource() { return File2Resource.getResource(status.getFile()); } public Object getAdapter(Class adapterType) { if (IFile.class == adapterType) { IResource resource = getResource(); if (resource instanceof IFile) { IFile file = (IFile)resource; return file; } } if (IResource.class == adapterType) { return getResource(); } return null; } } SVNWorkspaceRoot.java000066400000000000000000000441241203611042400424120ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resources/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resources; import java.io.InputStream; import java.util.HashSet; import java.util.LinkedHashSet; import java.util.Set; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNLocalFile; import org.tigris.subversion.subclipse.core.ISVNLocalFolder; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNStatus; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.client.PeekStatusCommand; import org.tigris.subversion.subclipse.core.commands.CheckoutCommand; import org.tigris.subversion.subclipse.core.commands.ShareProjectCommand; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.w3c.dom.Text; /** * This class provides static methods for checking out projects from a repository * into the local workspace and for converting IResources into SVNResources *

* Instances of this class represent a local workspace root (i.e. a project). *
* Here is how you can get a SVNWorkspaceRoot from an IProject :
* * SVNTeamProvider teamProvider = (SVNTeamProvider)RepositoryProvider.getProvider(myIProject, SVNProviderPlugin.getTypeId());
* SVNWorkspaceRoot svnProject = teamProvider.getSVNWorkspaceRoot(); *
*

*/ public class SVNWorkspaceRoot { private ISVNLocalFolder localRoot; private String url; private static Set sharedProjects = new HashSet(); public SVNWorkspaceRoot(IContainer resource){ this.localRoot = getSVNFolderFor(resource); } public static boolean isManagedBySubclipse(IProject project) { if (project == null) return false; synchronized (sharedProjects) { if (sharedProjects.contains(project)) return true; } return null != RepositoryProvider.getProvider(project, SVNProviderPlugin.getTypeId()); } public static void setManagedBySubclipse(IProject project) { synchronized (sharedProjects) { sharedProjects.add(project); } } public static void unsetManagedBySubclipse(IProject project) { synchronized (sharedProjects) { sharedProjects.remove(project); } } /** * get the project name for the remote folder. The name is either the name of the * remote folder or the name in .project if this file exists. * @param folder * @param monitor * @return */ public static String getProjectName(ISVNRemoteFolder folder,IProgressMonitor monitor) throws Exception { ISVNClientAdapter client = folder.getRepository().getSVNClient(); try { client.getNotificationHandler().disableLog(); String result = folder.getName(); InputStream is = client.getContent(folder.getUrl().appendPath(".project"), SVNRevision.HEAD); DocumentBuilder db = DocumentBuilderFactory.newInstance().newDocumentBuilder(); org.w3c.dom.Document doc = db.parse(is); is.close(); NodeList nl = doc.getDocumentElement().getChildNodes(); for (int j = 0; j < nl.getLength(); ++j) { Node child = nl.item(j); if (child instanceof Element && "name".equals(child.getNodeName())) { Node grandChild = child.getFirstChild(); if (grandChild instanceof Text) result = ((Text)grandChild).getData(); } } return result; } catch (Exception e) { throw e; } finally { if (client != null) { client.getNotificationHandler().enableLog(); folder.getRepository().returnSVNClient(client); } } } /** * get a project for the remote folder. The name is either the name of the * remote folder or the name in .project if this file exists. * Project is not created. There is no check to see if the project already exists * @param folder * @param monitor * @return */ public static IProject getProject(ISVNRemoteFolder folder,IProgressMonitor monitor) throws Exception { final String name = getProjectName(folder, monitor); return getProject(name); } /** * @param name * @return */ public static IProject getProject(String name) { return ResourcesPlugin.getWorkspace().getRoot().getProject(name); } /** * Checkout the remote resources into the local workspace as projects. * Each resource will be checked out into the corresponding project. * You can use getProject to get a project for a given remote Folder * * Resources existing in the local file system at the target project location but now * known to the workbench will be overwritten. */ public static void checkout( final ISVNRemoteFolder[] resources, final IProject[] projects, final IProgressMonitor monitor) throws SVNException { CheckoutCommand command = new CheckoutCommand(resources, projects); command.run(monitor); } /** * Create a remote directory in the SVN repository and link the project directory to this remote directory. * The contents of the project are not imported. * if remoteDirName is null, the name of the project is used * if location is not in repositories, it is added */ public static void shareProject(ISVNRepositoryLocation location, IProject project, String remoteDirName, String comment, boolean createDirectory, IProgressMonitor monitor) throws TeamException { ShareProjectCommand command = new ShareProjectCommand(location, project, remoteDirName, createDirectory); command.setComment(comment); command.run(monitor); } /** * Set the sharing for a project to enable it to be used with the SVNTeamProvider. * This is used when a project has .svn directory but is not shared in Eclipse. * An exception is thrown if project does not have a remote directory counterpart */ public static void setSharing(IProject project, IProgressMonitor monitor) throws TeamException { // Ensure provided info matches that of the project LocalResourceStatus status = peekResourceStatusFor(project); // this folder needs to be managed but also to have a remote counter-part // because we need to know its url // we will change this exception ! if (!status.hasRemote()) throw new SVNException(new SVNStatus(IStatus.ERROR, Policy.bind("SVNProvider.infoMismatch", project.getName())));//$NON-NLS-1$ String repositoryURL = null; ISVNClientAdapter client = SVNProviderPlugin.getPlugin().getSVNClient(); try { SVNProviderPlugin.disableConsoleLogging(); ISVNInfo info = client.getInfoFromWorkingCopy(project.getLocation().toFile()); if (info.getRepository() != null) repositoryURL = info.getRepository().toString(); } catch (SVNClientException e) { } finally { SVNProviderPlugin.enableConsoleLogging(); SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } if (repositoryURL == null) repositoryURL = status.getUrlString(); // Ensure that the provided location is managed SVNProviderPlugin.getPlugin().getRepositories().getRepository(repositoryURL, false); // Register the project with Team RepositoryProvider.map(project, SVNProviderPlugin.getTypeId()); } public static void upgradeWorkingCopy(IProject project, IProgressMonitor monitor) throws TeamException { ISVNClientAdapter client = SVNProviderPlugin.getPlugin().getSVNClient(); try { client.upgrade(project.getLocation().toFile()); } catch (SVNClientException e) { throw new TeamException(e.getMessage(), e); } finally { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } } /** * get the SVNLocalFolder for the given resource */ public static ISVNLocalFolder getSVNFolderFor(IContainer resource) { return new LocalFolder(resource); } /** * get the SVNLocalFile for the given resource */ public static ISVNLocalFile getSVNFileFor(IFile resource) { return new LocalFile(resource); } /** * get the SVNLocalResource for the given resource */ public static ISVNLocalResource getSVNResourceFor(IResource resource) { if (resource.getType() == IResource.FILE) return getSVNFileFor((IFile) resource); else // container return getSVNFolderFor((IContainer) resource); } /** * get the SVNLocalResources for the given resources * @param resources * @return */ public static ISVNLocalResource[] getSVNResourcesFor(IResource resources[]) { ISVNLocalResource[] svnResources = new ISVNLocalResource[resources.length]; for (int i = 0; i < resources.length;i++) { svnResources[i] = getSVNResourceFor(resources[i]); } return svnResources; } /** * get the base resource corresponding to the local one * @param resource * @return * @throws SVNException */ public static ISVNRemoteResource getBaseResourceFor(IResource resource) throws SVNException { ISVNLocalResource managed = getSVNResourceFor(resource); return managed.getBaseResource(); } /** * get the latest remote resource corresponding to the local one * @param resource * @return * @throws SVNException */ public static ISVNRemoteResource getLatestResourceFor(IResource resource) throws SVNException { ISVNLocalResource managed = getSVNResourceFor(resource); return managed.getLatestRemoteResource(); } /** * Peek for (get) the resource status. * Do not descend to children and DO NOT affect sync cache in any way ! * @param resource the IResource of which svn status were are looking for * @return LocalResourceStatus of the queried resource or null when no status was found (resource is not svn managed) */ public static LocalResourceStatus peekResourceStatusFor(IResource resource) throws SVNException { PeekStatusCommand command = new PeekStatusCommand(resource); command.execute(); return command.getLocalResourceStatus(); } public static LocalResourceStatus peekResourceStatusFor(IPath path) throws SVNException { PeekStatusCommand command = new PeekStatusCommand(path); command.execute(); return command.getLocalResourceStatus(); } /** * get the repository for this project */ public ISVNRepositoryLocation getRepository() throws SVNException { if (url == null) { LocalResourceStatus status = localRoot.getStatus(); if (!status.isManaged()) { throw new SVNException(Policy.bind("SVNWorkspaceRoot.notSVNFolder", localRoot.getName())); //$NON-NLS-1$ } url = status.getUrlString(); } return SVNProviderPlugin.getPlugin().getRepository(url); } /** * get the svn folder corresponding to the project */ public ISVNLocalFolder getLocalRoot() { return localRoot; } /** * Return true if the resource is part of a link (i.e. a linked resource or * one of it's children. * * @param container * @return boolean */ public static boolean isLinkedResource(IResource resource) { return resource.isLinked(IResource.CHECK_ANCESTORS); } /** * Return true when a resource is a SVN "meta" resource. * I.e. .svn dir or any file within it. * @param resource * @return */ public static boolean isSvnMetaResource(IResource resource) { if ((resource.getType() == IResource.FOLDER) && (SVNProviderPlugin.getPlugin().isAdminDirectory(resource.getName()))) return true; IResource parent = resource.getParent(); if (parent == null) { return false; } else { return isSvnMetaResource(parent); } } /** * Return the resource type (FILE, FOLDER, PROJECT) of the resource specified by an absolute filesystem path * @param a resource path relative to workspace root as returned by pathForLocation() * @return IResource.FILE, IResource.FOLDER, IResource.PROJECT or IResource.ROOT or 0 if it could not be determined */ public static int getResourceType(IPath aResourcePath) { if (aResourcePath == null) return 0; IResource r = ResourcesPlugin.getWorkspace().getRoot().findMember(aResourcePath); return r == null ? 0 : r.getType(); } /** * Returns workspace resource for the given local file system location * and which is a child of the given parent resource. Returns * parent if parent's file system location equals to the given * location. Returns null if parent is the * workspace root. * * Resource does not have to exist in the workspace in which case resource * type will be determined by the type of the local filesystem object. */ public static IResource getResourceFor(IResource parent, IPath location) { if (parent == null || location == null) { return null; } if (parent instanceof IWorkspaceRoot) { return null; } if (!isManagedBySubclipse(parent.getProject())) { return null; } if (!parent.getLocation().isPrefixOf(location)) { return null; } int segmentsToRemove = parent.getLocation().segmentCount(); IPath fullPath = parent.getFullPath().append(location.removeFirstSegments(segmentsToRemove)); IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); IResource resource = root.findMember(fullPath,true); if (resource != null) { return resource; } if (parent instanceof IFile) { return null; } if (fullPath.isRoot()) { return root; } else if (fullPath.segmentCount() == 1) { return root.getProject(fullPath.segment(0)); } if (!location.toFile().exists()) { if (location.toFile().getName().indexOf(".") == -1) { return root.getFolder(fullPath); } } if (location.toFile().isDirectory()) { return root.getFolder(fullPath); } return root.getFile(fullPath); } public static IResource getResourceFor(IResource parent, ISVNStatus status) { if (status == null || status.getFile() == null) { return null; } return getResourceFor(parent, new Path(status.getFile().getAbsolutePath())); } public static IResource[] getResourcesFor(IPath location) { return getResourcesFor(location, true); } /** * Gets the resources to which the local filesystem location is corresponding to. * The resources do not need to exists (yet) * @return IResource[] * @throws SVNException */ public static IResource[] getResourcesFor(IPath location, boolean includeProjects) { Set resources = new LinkedHashSet(); IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); IProject[] projects = root.getProjects(); for (IProject project : projects) { IResource resource = getResourceFor(project, location); if (resource != null) { resources.add(resource); } if (includeProjects && isManagedBySubclipse(project) && location.isPrefixOf(project.getLocation())) { resources.add(project); } } return (IResource[]) resources.toArray(new IResource[resources.size()]); } public static IResource[] getResourcesFor(IResource resource) { Set resources = new LinkedHashSet(); resources.add(resource); IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); IProject[] projects = root.getProjects(); for (IProject project : projects) { if (!project.getLocation().equals(resource.getLocation()) && resource.getLocation().isPrefixOf(project.getLocation())) { resources.add(project); } } return (IResource[]) resources.toArray(new IResource[resources.size()]); } /** * Gets the repository which the local filesystem location belongs to. */ public static ISVNRepositoryLocation getRepositoryFor(IPath location) { IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); IProject[] projects = root.getProjects(); for (IProject project : projects) { if (project.getLocation().isPrefixOf(location) && SVNWorkspaceRoot.isManagedBySubclipse(project)) { try { SVNTeamProvider teamProvider = (SVNTeamProvider)RepositoryProvider.getProvider(project, SVNProviderPlugin.getTypeId()); return teamProvider.getSVNWorkspaceRoot().getRepository(); } catch (SVNException e) { // an exception is thrown when resource is not managed SVNProviderPlugin.log(e); return null; } } } return null; } } 000077500000000000000000000000001203611042400402425ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resourcesListenersFileModificationManager.java000066400000000000000000000267461203611042400456240ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resourcesListeners/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resourcesListeners; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.IResourceDeltaVisitor; import org.eclipse.core.resources.ISaveContext; import org.eclipse.core.resources.ISaveParticipant; import org.eclipse.core.resources.ISavedState; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Preferences.IPropertyChangeListener; import org.eclipse.core.runtime.Preferences.PropertyChangeEvent; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNTeamProviderType; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.core.util.JobUtility; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; /** * This class performs several functions related to determining the modified * status of files under Subversion control. First, it listens for change delta's for * files and brodcasts them to all listeners. It also registers as a save * participant so that deltas generated before the plugin are loaded are not * missed. */ public class FileModificationManager implements IResourceChangeListener, ISaveParticipant, IPropertyChangeListener { private boolean ignoreManagedDerivedResources = SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_IGNORE_MANAGED_DERIVED_RESOURCES); // consider the following changes types and ignore the others (e.g. marker and description changes are ignored) protected int INTERESTING_CHANGES = IResourceDelta.CONTENT | IResourceDelta.MOVED_FROM | IResourceDelta.MOVED_TO | IResourceDelta.OPEN | IResourceDelta.REPLACED | IResourceDelta.TYPE; /** * Listen for file modifications and fire modification state changes * * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent) */ public void resourceChanged(IResourceChangeEvent event) { try { final List modifiedResources = new ArrayList(); final List modifiedInfiniteDepthResources = new ArrayList(); event.getDelta().accept(new IResourceDeltaVisitor() { public boolean visit(IResourceDelta delta) { IResource resource = delta.getResource(); if (resource.isDerived()) { LocalResourceStatus aStatus = null; try { aStatus = SVNProviderPlugin.getPlugin().getStatusCacheManager().getStatusFromCache(resource); } catch (SVNException e) { SVNProviderPlugin.log(IStatus.ERROR, e.getMessage(), e); } if ((aStatus == null) || !aStatus.isManaged()) { return false; } if (ignoreManagedDerivedResources) { return false; } } if (resource.getType()==IResource.FILE) { if (delta.getKind() == IResourceDelta.CHANGED && resource.exists()) { if((delta.getFlags() & INTERESTING_CHANGES) != 0) { modifiedResources.add(resource); return true; } } else if (delta.getKind() == IResourceDelta.ADDED) { modifiedResources.add(resource); return true; } else if (delta.getKind() == IResourceDelta.REMOVED) { // provide notifications for deletions since they may not have been managed // The move/delete hook would have updated the parent counts properly modifiedResources.add(resource); return true; } } else if(resource.getType()==IResource.FOLDER) { // FIXME: Why a different processing for add and delete? if (delta.getKind() == IResourceDelta.ADDED) { if (resource.getParent() != null && !modifiedInfiniteDepthResources.contains(resource.getParent())) { modifiedInfiniteDepthResources.add(resource.getParent()); } else { modifiedInfiniteDepthResources.add(resource); } return false; } else if (delta.getKind() == IResourceDelta.REMOVED) { modifiedInfiniteDepthResources.add(resource); // No need to add the complete resource tree return false; } return true; } else if (resource.getType()==IResource.PROJECT) { IProject project = (IProject)resource; if ((delta.getKind() & IResourceDelta.REMOVED) != 0) { SVNWorkspaceRoot.unsetManagedBySubclipse(project); return false; } if (!project.isAccessible()) { return false; } if (delta.getKind() != IResourceDelta.ADDED && (delta.getFlags() & IResourceDelta.OPEN) != 0) { return false; } if (!SVNWorkspaceRoot.isManagedBySubclipse(project)) { if (delta.getKind() == IResourceDelta.ADDED) { autoShareProjectIfSVNWorkingCopy(project); } return false; // not a svn handled project } if (delta.getKind() == IResourceDelta.ADDED) { modifiedInfiniteDepthResources.add(resource); return false; } else if (delta.getKind() == IResourceDelta.REMOVED) { modifiedInfiniteDepthResources.add(resource); return false; } } return true; } }); if (!modifiedResources.isEmpty() || !modifiedInfiniteDepthResources.isEmpty()) { JobUtility.scheduleJob("Refresh SVN status cache", new Runnable() { public void run() { // we refresh all changed resources and broadcast the changes to all listeners (ex : SVNLightweightDecorator) if (!modifiedResources.isEmpty()) { IResource[] resources = (IResource[])modifiedResources.toArray(new IResource[modifiedResources.size()]); refreshStatus(resources); SVNProviderPlugin.broadcastModificationStateChanges(resources); } if (!modifiedInfiniteDepthResources.isEmpty()) { IResource[] resources = (IResource[])modifiedInfiniteDepthResources.toArray(new IResource[modifiedInfiniteDepthResources.size()]); refreshStatusInfitite(resources); SVNProviderPlugin.broadcastModificationStateChanges(resources); } } }, null, false); } } catch (CoreException e) { SVNProviderPlugin.log(e.getStatus()); } } /** * Refresh (reset/reload) the status of all the given resources. * @param resources Array of IResources to refresh */ private void refreshStatusInfitite(IResource[] resources) { for (int i = 0; i < resources.length; i++) { try { SVNProviderPlugin.getPlugin().getStatusCacheManager().refreshStatus((IContainer)resources[i], true); } catch (SVNException e) { SVNProviderPlugin.log(IStatus.ERROR, e.getMessage(), e); } } } /** * Refresh (reset/reload) the status of all the given resources. * @param resources Array of IResources to refresh */ private void refreshStatus(IResource[] resources) { //We are not able to get the status for a single file anyway, //so from the performance reasons we collect the parent folders of the files //and we refresh only those folders then. //All immediate child resources (files) are refreshed automatically Set foldersToRefresh = new HashSet(resources.length); for (IResource resource : resources) { if (resources.length == 1 && resources[0].getType() == IResource.FILE) { try { SVNProviderPlugin.getPlugin().getStatusCacheManager().refreshStatus(resource, false); } catch (SVNException e) { SVNProviderPlugin.log(IStatus.ERROR, e.getMessage(), e); } } else { if (resource.getType()==IResource.FILE) { foldersToRefresh.add(resource.getParent()); } else { foldersToRefresh.add((IContainer)resource); } } } for (IResource folder : foldersToRefresh) { try { SVNProviderPlugin.getPlugin().getStatusCacheManager().refreshStatus((IContainer)folder, true); } catch (SVNException e) { SVNProviderPlugin.log(IStatus.ERROR, e.getMessage(), e); } } } /** * We register a save participant so we can get the delta from workbench * startup to plugin startup. * @throws CoreException */ public void registerSaveParticipant() throws CoreException { IWorkspace ws = ResourcesPlugin.getWorkspace(); ISavedState ss = ws.addSaveParticipant(SVNProviderPlugin.getPlugin(), this); if (ss != null) { ss.processResourceChangeEvents(this); } ws.removeSaveParticipant(SVNProviderPlugin.getPlugin()); } /** * @see org.eclipse.core.resources.ISaveParticipant#doneSaving(org.eclipse.core.resources.ISaveContext) */ public void doneSaving(ISaveContext context) { } /** * @see org.eclipse.core.resources.ISaveParticipant#prepareToSave(org.eclipse.core.resources.ISaveContext) */ public void prepareToSave(ISaveContext context) { } /** * @see org.eclipse.core.resources.ISaveParticipant#rollback(org.eclipse.core.resources.ISaveContext) */ public void rollback(ISaveContext context) { } /** * @see org.eclipse.core.resources.ISaveParticipant#saving(org.eclipse.core.resources.ISaveContext) */ public void saving(ISaveContext context) { } private void autoShareProjectIfSVNWorkingCopy(IProject project) { ISVNClientAdapter client = null; try { client = SVNProviderPlugin.getPlugin().getSVNClient(); SVNProviderPlugin.disableConsoleLogging(); ISVNInfo info = client.getInfoFromWorkingCopy(project.getLocation().toFile()); if (info != null) { SVNTeamProviderType.getAutoShareJob().share(project); } } catch (Exception e) {} finally { SVNProviderPlugin.enableConsoleLogging(); if (client != null) { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } } } public void propertyChange(PropertyChangeEvent event) { if (event.getProperty().equals(ISVNCoreConstants.PREF_IGNORE_MANAGED_DERIVED_RESOURCES)) { ignoreManagedDerivedResources = SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_IGNORE_MANAGED_DERIVED_RESOURCES); } } } RevertResourceManager.java000066400000000000000000000211611203611042400453600ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resourcesListenerspackage org.tigris.subversion.subclipse.core.resourcesListeners; import java.io.File; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.IResourceDeltaVisitor; import org.eclipse.core.resources.WorkspaceJob; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.tigris.subversion.subclipse.core.ISVNLocalFile; import org.tigris.subversion.subclipse.core.ISVNLocalFolder; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.client.OperationManager; import org.tigris.subversion.subclipse.core.resources.SVNMoveDeleteHook; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; /** * RevertResourceManager reverts not yet commited deletes when a file is added which was scheduled for deletion. It also reverts folder deletes when * new resources are added to folders that are scheduled for deletion. * @author Hugo Visser joegi at scene.nl */ public class RevertResourceManager implements IResourceChangeListener { private class RevertWorkspaceJob extends WorkspaceJob { private final ISVNLocalResource[] resources; public RevertWorkspaceJob(ISVNLocalResource[] resources) { super(Policy.bind("RevertResourceManager.jobName")); this.resources = resources; } private void revertResources(ISVNLocalResource[] resources, IProgressMonitor monitor) throws SVNException { monitor.beginTask(Policy.bind("RevertResourceManager.reverting"), resources.length); for (int i=0; i < resources.length; i++) { if (monitor.isCanceled()) { break; } if (resources[i] instanceof ISVNLocalFile) { ISVNLocalFile res = (ISVNLocalFile)resources[i]; File file = res.getFile().getAbsoluteFile(); // TODO a better location? File tmp = new File(res.getFile().getAbsolutePath() + ".svntmp"); if (tmp.exists()) { tmp.delete(); } if (file.renameTo(tmp)) { // res.revert is recursive and updates local history revert(res); if (!file.delete()) { //TODO handle this in a better way? throw SVNException.wrapException(new IllegalStateException("Could not remove "+file)); } if (!tmp.renameTo(file)) { //TODO handle this in a better way? throw SVNException.wrapException(new IllegalStateException("Could not rename "+tmp+" to "+file)); } } else { //TODO handle this in a better way? throw SVNException.wrapException(new IllegalStateException("Could not rename "+file+" to "+tmp)); } } else { revert(resources[i]); } monitor.worked(1); } monitor.done(); } public IStatus runInWorkspace(IProgressMonitor monitor) throws CoreException { revertResources(resources, monitor); return monitor.isCanceled() ? Status.CANCEL_STATUS : Status.OK_STATUS; } } public void resourceChanged(IResourceChangeEvent event) { final List addedFileResources = new ArrayList(); try { event.getDelta().accept(new IResourceDeltaVisitor() { public boolean visit(IResourceDelta delta) throws CoreException { IResource resource = delta.getResource(); if (resource.getType()==IResource.PROJECT) { IProject project = (IProject)resource; if (!project.isAccessible()) { return false; // i.e., closed project } if ((delta.getFlags() & IResourceDelta.OPEN) != 0) { return false; // ignore project open } if (!SVNWorkspaceRoot.isManagedBySubclipse(project)) { return false; // not a svn handled project } } else if (resource.getType() == IResource.FILE) { if (delta.getKind() == IResourceDelta.ADDED || delta.getKind() == IResourceDelta.CHANGED) { addedFileResources.add(delta); } else if (delta.getKind() == IResourceDelta.REMOVED) { SVNMoveDeleteHook.removeFromDeletedFileList((IFile)delta.getResource()); } } return true; } }); if (!addedFileResources.isEmpty()) { final IResourceDelta[] resources = (IResourceDelta[]) addedFileResources.toArray(new IResourceDelta[addedFileResources .size()]); ISVNLocalResource[] revertResources = processResources(resources); if (revertResources.length > 0) { new RevertWorkspaceJob(revertResources).schedule(500); } } } catch (CoreException e) { SVNProviderPlugin.log(e.getStatus()); } } /** * Revert previously deleted resources that are added again. When a file is * reverted, it's parent directories are also reverted. * When new files are added in folders that are scheduled for deletion, the parent * folder tree is reverted. * * @param resources */ private ISVNLocalResource[] processResources(IResourceDelta[] resources) throws CoreException { List revertedResources = new ArrayList(); for (IResourceDelta resourceDelta : resources) { IResource resource = resourceDelta.getResource(); if (resource.getType() == IResource.FILE) { ISVNLocalFile res = SVNWorkspaceRoot.getSVNFileFor((IFile) resource); if (res.getFile().exists()) { boolean deleted; if (resourceDelta.getKind() == IResourceDelta.ADDED) deleted = res.getStatusFromCache().isDeleted(); else { deleted = SVNMoveDeleteHook.isDeleted((IFile)resource); if (deleted) SVNMoveDeleteHook.removeFromDeletedFileList((IFile)resource); } if (deleted) { revertedResources.add(res); } ISVNLocalFolder parentFolder = res.getParent(); while (parentFolder != null) { if (parentFolder.getStatusFromCache().isDeleted() && !parentFolder.getResource().exists() && !revertedResources.contains(parentFolder)) { revertedResources.add(parentFolder); } else { break; } if (parentFolder.getParent() == null) { break; } parentFolder = parentFolder.getParent(); } } } } return (ISVNLocalResource[]) revertedResources.toArray(new ISVNLocalResource[revertedResources.size()]); } /** * Like revert on ISVNLocalFile but without updating the local history. Non * recursive revert for folders * * @param resource * @throws SVNException */ private void revert(ISVNLocalResource resource) throws SVNException { ISVNClientAdapter svnClient = null; try { svnClient = resource.getRepository().getSVNClient(); OperationManager.getInstance().beginOperation(svnClient); svnClient.revert(resource.getFile(), false); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { resource.getRepository().returnSVNClient(svnClient); OperationManager.getInstance().endOperation(); } } } SyncFileChangeListener.java000066400000000000000000000221341203611042400454370ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resourcesListeners/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resourcesListeners; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.IResourceDeltaVisitor; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Path; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.core.status.StatusCacheManager; import org.tigris.subversion.svnclientadapter.SVNConstants; /** * Listens to subversion meta-file changes : * - .svn/entries * - .svn/dir-props * - files in .svn/props * When a change occurs in one of these files : * - all files in the directory (.svn/..) are refreshed * - the svn status of all files in the directory (.svn/..) is refreshed * - a message is sent to all listeners to tell them that all files in the directory (.svn/..) could have * changed * * we treat all files in the directory (.svn/..) because we don't want to parse .svn/entries to know * which changes occured */ public class SyncFileChangeListener implements IResourceChangeListener { // consider the following changes types and ignore the others (e.g. marker and description changes are ignored) protected int INTERESTING_CHANGES = IResourceDelta.CONTENT | IResourceDelta.MOVED_FROM | IResourceDelta.MOVED_TO | IResourceDelta.OPEN | IResourceDelta.REPLACED | IResourceDelta.TYPE; /* * When a resource changes this method will detect if * the changed resources is a meta file that has changed * * @see IResourceChangeListener#resourceChanged(IResourceChangeEvent) */ public void resourceChanged(IResourceChangeEvent event) { try { final StatusCacheManager cacheManager = SVNProviderPlugin.getPlugin().getStatusCacheManager(); // final ChangesCollector changesCollector = new ChangesCollector(); event.getDelta().accept(new IResourceDeltaVisitor() { public boolean visit(IResourceDelta delta) { IResource resource = delta.getResource(); if(resource.getType()==IResource.ROOT) { // continue with the delta return true; } if (resource.getType() == IResource.PROJECT) { // If the project is not accessible, don't process it if (!resource.isAccessible()) return false; // If the Project is not managed by subclipse, don't process it if (!SVNWorkspaceRoot.isManagedBySubclipse((IProject)resource)) return false; } String name = resource.getName(); int kind = delta.getKind(); //FileModificationManager may already have processed the folder. //Since we do not want to refresh the statuses again, we finish the visitor if we already have the statuses try { if ((resource.getType() == IResource.FOLDER) && (kind == IResourceDelta.ADDED) && (cacheManager.hasCachedStatus(resource)) && (cacheManager.getStatus(resource).isManaged())) { if(Policy.DEBUG_METAFILE_CHANGES) { System.out.println("[svn] duplicte ADD change event registered in SyncFileChangeListener: " + resource); //$NON-NLS-1$ } return false; } } catch (SVNException e) { //The get status failed, so just proceed deeper as normal. return true; } // if the file has changed but not in a way that we care // then ignore the change (e.g. marker changes to files). if(kind == IResourceDelta.CHANGED && (delta.getFlags() & INTERESTING_CHANGES) == 0) { return true; } // IContainer toBeNotified = null; if(SVNProviderPlugin.getPlugin().isAdminDirectory(name)) { handleSVNDir((IContainer)resource, kind); } // if(isEntries(resource)) { // toBeNotified = handleChangedEntries(resource, kind); // } // // if(toBeNotified != null) { // changesCollector.collectChange(toBeNotified); // if(Policy.DEBUG_METAFILE_CHANGES) { // System.out.println("[svn] metafile changed : " + resource.getFullPath()); //$NON-NLS-1$ // } // return false; /*don't visit any children we have all the information we need*/ // } else { // return true; // } return true; } }, IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS); // changesCollector.refreshChangedResources(); } catch(CoreException e) { SVNProviderPlugin.log(e.getStatus()); } } /* * If it's a new SVN directory with the canonical child metafiles then mark it as team-private. Otherwise * if changed or deleted */ protected void handleSVNDir(IContainer svnDir, int kind) { if((kind & IResourceDelta.ALL_WITH_PHANTOMS)!=0) { if(kind==IResourceDelta.ADDED) { // should this dir be made team-private? If it contains Entries then yes! IFile entriesFile = svnDir.getFile(new Path(SVNConstants.SVN_ENTRIES)); if (entriesFile.exists() && !svnDir.isTeamPrivateMember()) { try { svnDir.setTeamPrivateMember(true); if(Policy.DEBUG_METAFILE_CHANGES) { System.out.println("[svn] found a new SVN meta folder, marking as team-private: " + svnDir.getFullPath()); //$NON-NLS-1$ } } catch(CoreException e) { SVNProviderPlugin.log(SVNException.wrapException(svnDir, Policy.bind("SyncFileChangeListener.errorSettingTeamPrivateFlag"), e)); //$NON-NLS-1$ } } } } } /* * Tells if this resource is a subversion "entries" file */ protected boolean isEntries(IResource resource) { if (resource.getType() != IResource.FILE || !resource.getName().equals(SVNConstants.SVN_ENTRIES)) { return false; } IContainer parent = resource.getParent(); if ((parent != null) && (SVNProviderPlugin.getPlugin().isAdminDirectory(parent.getName())) && (parent.isTeamPrivateMember() || !parent.exists()) ) { return true; } return false; } protected IContainer handleChangedEntries(IResource resource, int kind) { IContainer changedContainer = resource.getParent(); IContainer parent = changedContainer.getParent(); if((parent != null) && parent.exists()) { return changedContainer; } else { return null; } } // protected final static class ChangesCollector // { // private Map map = new HashMap(); // // protected void collectChange(IContainer svnFolder) // { // IProject project = svnFolder.getProject(); // Set changes = (Set) map.get(project); // if (changes == null) { // changes = new HashSet(); // map.put(project, changes); // } // changes.add(svnFolder); // } // // protected void refreshChangedResources() throws CoreException // { // for (Iterator iter = map.entrySet().iterator(); iter.hasNext();) { // final Map.Entry element = (Map.Entry) iter.next(); // SVNProviderPlugin.run(new ISVNRunnable() { // public void run(IProgressMonitor monitor) throws SVNException { // refreshProjectFolders((Set) element.getValue(), monitor); // }}, // (IProject) element.getKey(), null); // } // } // // protected void refreshProjectFolders(Set folders, IProgressMonitor monitor) throws SVNException // { // boolean initializeListeners = true; // for (Iterator it = folders.iterator(); it.hasNext();) { // IContainer dotSvnContainer = (IContainer)it.next(); // IContainer container = dotSvnContainer.getParent(); // // // we update the members. Refresh can be useful in case of revert etc ... // try { //// container.refreshLocal(IResource.DEPTH_ONE, Policy.subMonitorFor(monitor, 100, SubProgressMonitor.PREPEND_MAIN_LABEL_TO_SUBTASK)); // container.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); // } catch (CoreException e) { // throw SVNException.wrapException(e); // } // //ISVNLocalFolder svnContainer = (ISVNLocalFolder)SVNWorkspaceRoot.getSVNResourceFor(container); // //svnContainer.refreshStatus(IResource.DEPTH_ONE); // IResource[] refreshed = SVNProviderPlugin.getPlugin().getStatusCacheManager().refreshStatus(container, false); // // SVNProviderPlugin.broadcastSyncInfoChanges(refreshed, initializeListeners); // initializeListeners = false; // } // } // } } TeamPrivateListener.java000066400000000000000000000125771203611042400450500ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/resourcesListeners/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.resourcesListeners; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.IResourceDeltaVisitor; import org.eclipse.core.resources.ISaveContext; import org.eclipse.core.resources.ISaveParticipant; import org.eclipse.core.resources.ISavedState; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Path; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.SVNConstants; /** * This class listens for additions of subversion meta directories and mark them as * team private resources. It also registers as a save participant so that deltas * generated before the plugin are loaded are not missed. */ public class TeamPrivateListener implements IResourceChangeListener, ISaveParticipant { private SVNProviderPlugin provider; public TeamPrivateListener() { super(); provider = SVNProviderPlugin.getPlugin(); } /** * Listen for file modifications * * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent) */ public void resourceChanged(IResourceChangeEvent event) { try { event.getDelta().accept(new IResourceDeltaVisitor() { public boolean visit(IResourceDelta delta) throws CoreException { IResource resource = delta.getResource(); int type = resource.getType(); if(type==IResource.FOLDER) { if (delta.getKind() != IResourceDelta.ADDED) return true; if (provider.isAdminDirectory(resource.getName())) { if (handleSVNDir((IContainer)resource)) { return false; } } return true; } else if (type==IResource.PROJECT) { IProject project = (IProject)resource; if (!project.isAccessible()) { return false; } if (!SVNWorkspaceRoot.isManagedBySubclipse(project)) { return false; // not a svn handled project } } return true; } }); } catch (CoreException e) { SVNProviderPlugin.log(e.getStatus()); } } /** * We register a save participant so we can get the delta from workbench * startup to plugin startup. * @throws CoreException */ public void registerSaveParticipant() throws CoreException { IWorkspace ws = ResourcesPlugin.getWorkspace(); ISavedState ss = ws.addSaveParticipant(SVNProviderPlugin.getPlugin(), this); if (ss != null) { ss.processResourceChangeEvents(this); } ws.removeSaveParticipant(SVNProviderPlugin.getPlugin()); } /** * @see org.eclipse.core.resources.ISaveParticipant#doneSaving(org.eclipse.core.resources.ISaveContext) */ public void doneSaving(ISaveContext context) { } /** * @see org.eclipse.core.resources.ISaveParticipant#prepareToSave(org.eclipse.core.resources.ISaveContext) */ public void prepareToSave(ISaveContext context) { } /** * @see org.eclipse.core.resources.ISaveParticipant#rollback(org.eclipse.core.resources.ISaveContext) */ public void rollback(ISaveContext context) { } /** * @see org.eclipse.core.resources.ISaveParticipant#saving(org.eclipse.core.resources.ISaveContext) */ public void saving(ISaveContext context) { } /** * If it's a new SVN directory with the canonical child metafiles then mark it as team-private. * Makr it is team private even when it is changed but not marked team private yet. * @param svnDir IContainer which is expected to be svn meta directory * @param kind resourceDelta kind of change * @return true when the folder folder really is svn meta directory */ public boolean handleSVNDir(IContainer svnDir) { if (!svnDir.isTeamPrivateMember()) { // should this dir be made team-private? If it contains Entries then yes! IFile entriesFile = svnDir.getFile(new Path(SVNConstants.SVN_ENTRIES)); if (entriesFile.exists() && !svnDir.isTeamPrivateMember()) { try { svnDir.setTeamPrivateMember(true); if(Policy.DEBUG_METAFILE_CHANGES) { System.out.println("[svn] found a new SVN meta folder, marking as team-private: " + svnDir.getFullPath()); //$NON-NLS-1$ } } catch(CoreException e) { SVNProviderPlugin.log(SVNException.wrapException(svnDir, Policy.bind("SyncFileChangeListener.errorSettingTeamPrivateFlag"), e)); //$NON-NLS-1$ } } } return svnDir.isTeamPrivateMember(); } } 000077500000000000000000000000001203611042400356625ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/statusIStatusCache.java000066400000000000000000000037571203611042400410610ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/status/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.status; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; /** * Cache for storing and retrieving local status info * */ public interface IStatusCache { /** * @param resource * @return true when the resource's status is present in cache */ boolean hasCachedStatus(IResource resource); /** * Get the status of the given resource (which does not need to exist) * @param resource * @return LocalResourceStatus */ LocalResourceStatus getStatus(IResource resource); /** * Add a status for its resource (which does not need to exist) * @param status - can be null * @return resource for which the status was cached */ IResource addStatus(IResource resource, LocalResourceStatus status); /** * Remove status of the given resource from the cache * @param resource * @return */ IResource removeStatus(IResource resource); /** * Purge (remove) the status information from the cache. * @param root * @param deep * @throws SVNException */ void purgeCache(IContainer root, boolean deep) throws SVNException; /** * Flush (pending) statuses which were not saved yet due to e.g. locked workspace */ void flushPendingStatuses(); }NonRecursiveStatusUpdateStrategy.java000066400000000000000000000057501203611042400452500ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/status/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.status; import org.eclipse.core.resources.IResource; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.SVNClientException; /** * A strategy that when asked to get the status of a given resource, * get the status and the status of all its siblings. * * @author cedric chabanois (cchab at tigris.org) */ public class NonRecursiveStatusUpdateStrategy extends StatusUpdateStrategy { public NonRecursiveStatusUpdateStrategy(IStatusCache statusCache) { super(statusCache); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.status.StatusUpdateStrategy#statusesToUpdate(org.eclipse.core.resources.IResource) */ protected ISVNStatus[] statusesToUpdate(IResource resource) throws SVNException { // we update the parent and its immediate children IResource resourceToUpdate = resource; if ((resource.getType() == IResource.FILE)) { resourceToUpdate = resource.getParent(); } if (Policy.DEBUG_STATUS) { System.out.println("[svn] getting status for : " + resourceToUpdate.getFullPath()); //$NON-NLS-1$ } // don't do getRepository().getSVNClient() as we can ask the status of a file // that is not associated with a known repository // we don't need login & password so this is not a problem ISVNStatus[] statuses = null; ISVNClientAdapter svnClientAdapterStatus = null; try { svnClientAdapterStatus = SVNProviderPlugin.getPlugin().getSVNClient(); SVNProviderPlugin.disableConsoleLogging(); statuses = svnClientAdapterStatus.getStatus( resourceToUpdate.getLocation().toFile(), false, // do only immediate children. true); // retrieve all entries } catch (SVNClientException e1) { throw SVNException.wrapException(e1); } finally { SVNProviderPlugin.enableConsoleLogging(); SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(svnClientAdapterStatus); } return collectUnversionedFolders(statuses, false); } } RecursiveStatusUpdateStrategy.java000066400000000000000000000063351203611042400445750ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/status/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.status; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.SVNClientException; /** * A strategy that when asked to get the status of a given resource, * get the status of its parent (if not present yet) and parent's children recursively * * @author cedric chabanois (cchab at tigris.org) */ public class RecursiveStatusUpdateStrategy extends StatusUpdateStrategy { public RecursiveStatusUpdateStrategy(IStatusCache statusCache) { super(statusCache); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.status.StatusUpdateStrategy#statusesToUpdate(org.eclipse.core.resources.IResource) */ protected ISVNStatus[] statusesToUpdate(IResource resource) throws SVNException { if (!(resource instanceof IProject)) { // if the status of the resource parent is not known, we // recursively update it instead IContainer parent = resource.getParent(); if (parent != null) { if (statusCache.getStatus(parent) == null) { return statusesToUpdate(parent); } } } if (Policy.DEBUG_STATUS) { System.out.println("[svn] getting status for : " + resource.getFullPath()); //$NON-NLS-1$ } // don't do getRepository().getSVNClient() as we can ask the status of a file // that is not associated with a known repository // we don't need login & password so this is not a problem ISVNStatus[] statuses = null; ISVNClientAdapter svnClientAdapterStatus = null; try { SVNProviderPlugin.disableConsoleLogging(); svnClientAdapterStatus = SVNProviderPlugin.getPlugin().getSVNClient(); statuses = svnClientAdapterStatus.getStatus(resource.getLocation().toFile(),true, true); } catch (SVNClientException e1) { if (!e1.getMessage().contains(SVNProviderPlugin.UPGRADE_NEEDED)) { throw SVNException.wrapException(e1); } } finally { SVNProviderPlugin.enableConsoleLogging(); SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(svnClientAdapterStatus); } return collectUnversionedFolders(statuses, true); } } StatusCacheManager.java000066400000000000000000000365601203611042400422410ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/status/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.status; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.IResourceDeltaVisitor; import org.eclipse.core.resources.IResourceVisitor; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Preferences; import org.eclipse.core.runtime.Preferences.PropertyChangeEvent; import org.eclipse.core.runtime.QualifiedName; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.commands.GetInfoCommand; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNStatusKind; import org.tigris.subversion.svnclientadapter.SVNStatusUnversioned; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * Provides a method to get the status of a resource.
* It is much more efficient to get the status of a set a resources than only * one resource at a time. For that we use a @link org.tigris.subversion.subclipse.core.status.StatusUpdateStrategy
* * We use a tree (@link org.tigris.subversion.subclipse.core.status.StatusCacheComposite) to keep the status of the resources * * @author cedric chabanois (cchab at tigris.org) */ public class StatusCacheManager implements IResourceChangeListener, Preferences.IPropertyChangeListener { /** Name used for identifying SVN synchronization data in Resource>ResourceInfo#syncInfo storage */ public static final QualifiedName SVN_BC_SYNC_KEY = new QualifiedName(SVNProviderPlugin.ID, "svn-bc-sync-key"); private IStatusCache statusCache; private StatusUpdateStrategy statusUpdateStrategy; private boolean flushCache; public StatusCacheManager() { chooseUpdateStrategy(); ResourcesPlugin.getWorkspace().getSynchronizer().add(StatusCacheManager.SVN_BC_SYNC_KEY); statusCache = new SynchronizerSyncInfoCache(); } private void chooseUpdateStrategy() { boolean recursiveStatusUpdate = SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_RECURSIVE_STATUS_UPDATE); statusUpdateStrategy = recursiveStatusUpdate ? (StatusUpdateStrategy)new RecursiveStatusUpdateStrategy(statusCache) : (StatusUpdateStrategy)new NonRecursiveStatusUpdateStrategy(statusCache); } /** * @param resource * @return true when the resource's status is present in cache */ public boolean hasCachedStatus(IResource resource) { return statusCache.hasCachedStatus(resource); } /** * update the cache using the given statuses * @param statuses * @param rule the scheduling rule to use when running this operation */ protected List updateCache(IResource parent, final ISVNStatus[] statuses) throws CoreException { final List result = new ArrayList(); if (statuses != null) { for (ISVNStatus status : statuses) { IResource resource = SVNWorkspaceRoot.getResourceFor(parent, status); result.add(updateCache(resource, status)); } } return result; } /** * update the cache using the given statuses * @param status * @param workspaceRoot */ // protected IResource updateCache(LocalResourceStatus status) { // return statusCache.addStatus(status); // } /** * update the cache using the given statuses * @param status * @param workspaceRoot */ public IResource updateCache(IResource resource, ISVNStatus status) { if (resource != null && status != null && status.getTextStatus() != null && !resource.exists() && status.getTextStatus().equals(SVNStatusKind.MISSING) && (status.getLastChangedRevision() == null || status.getLastChangedRevision().getNumber() == -1)) { statusCache.removeStatus(resource); return resource; } return statusCache.addStatus(resource, new LocalResourceStatus(status, getURL(status))); } public void removeStatus(IResource resource) { statusCache.removeStatus(resource); } /** * Get the status of the given resource. * If the status is not present in cache, it will be retrieved using the actual updateStrategy. * If recursive startegy is being used also all child resources would be updated, * otherwise only direct childern * @param resource whose status is required. * * @throws SVNException */ public LocalResourceStatus getStatus(IResource resource) throws SVNException { return getStatus(resource, statusUpdateStrategy, true); } public LocalResourceStatus getStatusFromCache(IResource resource) throws SVNException { return getStatus(resource, statusUpdateStrategy, false); } /** * Get the status of the given resource. * If the status is not present in cache, it will be retrieved using the specified updateStrategy. * If recursive startegy is being used also all child resources would be updated, * otherwise only direct childern * * @param resource whose status is required. * @param useRecursiveStartegy when true also children statuses should be recursively updated * @throws SVNException */ public LocalResourceStatus getStatus(IResource resource, boolean useRecursiveStartegy) throws SVNException { return getStatus(resource, useRecursiveStartegy ? (StatusUpdateStrategy) new RecursiveStatusUpdateStrategy(statusCache) : (StatusUpdateStrategy) new NonRecursiveStatusUpdateStrategy(statusCache), true); } /** * The cached statuses do not provide revision numbers anymore. * This method is the only place how to query for the revision of the resource explicitely. * @param resource * @return * @throws SVNException */ public SVNRevision getResourceRevision(ISVNLocalResource resource) throws SVNException { if (resource == null) return null; GetInfoCommand command = new GetInfoCommand(resource); command.run(null); final ISVNInfo info = command.getInfo(); return (info != null) ? info.getRevision() : null; } /** * get the status of the given resource * @throws SVNException */ private LocalResourceStatus getStatus(IResource resource, StatusUpdateStrategy strategy, boolean getStatusFromSvn) throws SVNException { if (!resource.exists() && !resource.isPhantom()) { return null; } LocalResourceStatus status = null; status = statusCache.getStatus(resource); // we get it using svn if (status == null && getStatusFromSvn) { status = basicGetStatus(resource, strategy); } return status; } /** * Get the statuse(s) from the svn meta files * * @param resource * @param strategy * @return * @throws SVNException */ private LocalResourceStatus basicGetStatus(IResource resource, StatusUpdateStrategy strategy) throws SVNException { if (!resource.exists()) return LocalResourceStatus.NONE; LocalResourceStatus status = null; /* Code commented so that svn:externals that are multi-level deep will be * decorated. In this scenario, there can be unversioned files in the middle * of the svn:externals files. */ // if (isAncestorNotManaged(resource)) { // // we know the resource is not managed because one of its ancestor is not managed // status = new LocalResourceStatus(new SVNStatusUnversioned(resource.getLocation().toFile(),false)); // } else { // we don't know if resource is managed or not, we must update its status strategy.setStatusCache(statusCache); setStatuses(resource, strategy.statusesToUpdate(resource)); status = statusCache.getStatus(resource); // } if (status == null && resource != null && resource.getLocation() != null) { status = new LocalResourceStatus(new SVNStatusUnversioned(resource.getLocation().toFile(),false), null); } return status; } /** * The cache manager handles itself the status retrieving. However this method can * be used to update the statuses of some resources * * @param statuses * @param rule the scheduling rule to use when running this operation */ public void setStatuses(IResource parent, ISVNStatus[] statuses) throws SVNException { try { updateCache(parent, statuses); } catch (CoreException e) { throw SVNException.wrapException(e); } } /** * Refresh the status of the given resource to the give depth. The depth can * be deeper in case of phantom resources. These have to be traversed to * infinite always ... * * @param resource * @param recursive * @return array of resources which were refreshed (including all phantoms * and their children) * @throws SVNException */ public IResource[] refreshStatus(final IResource resource, final boolean recursive) throws SVNException { if (SVNWorkspaceRoot.isLinkedResource(resource)) { return new IResource[0]; } final int depth = (recursive) ? IResource.DEPTH_INFINITE : IResource.DEPTH_ONE; final StatusUpdateStrategy strategy = (depth == IResource.DEPTH_INFINITE) ? (StatusUpdateStrategy) new RecursiveStatusUpdateStrategy(statusCache) : (StatusUpdateStrategy) new NonRecursiveStatusUpdateStrategy(statusCache); try { List refreshedResources = updateCache(resource, strategy.statusesToUpdate(resource)); Set resourcesToRefresh = resourcesToRefresh(resource, depth, IContainer.INCLUDE_PHANTOMS, refreshedResources.size()); for (Iterator iter = refreshedResources.iterator(); iter.hasNext();) { resourcesToRefresh.remove(iter.next()); } //Resources which were not refreshed above (e.g. deleted resources) //We do it with depth = infinite, so the whole deleted trees are refreshed. for (IResource res : resourcesToRefresh) { if ((res.getType() != IResource.FILE) && res.isPhantom()) { Set children = resourcesToRefresh(res, IResource.DEPTH_INFINITE, IContainer.INCLUDE_PHANTOMS | IContainer.INCLUDE_TEAM_PRIVATE_MEMBERS, 0); for (IResource child : children) { statusCache.removeStatus(child); refreshedResources.add(child); } } statusCache.removeStatus(res); refreshedResources.add(res); } return (IResource[]) refreshedResources.toArray(new IResource[refreshedResources.size()]); } catch (CoreException e) { throw SVNException.wrapException(e); } } private Set resourcesToRefresh(IResource resource, int depth, int flags, int expectedSize) throws CoreException { if (!resource.exists() && !resource.isPhantom()) { return new HashSet(0); } final Set resultSet = (expectedSize != 0) ? new HashSet(expectedSize) : new HashSet(); resource.accept(new IResourceVisitor() { public boolean visit(IResource aResource) throws CoreException { resultSet.add(aResource); return true; } }, depth, flags); return resultSet; } /** * Purge the status information from the cache * @param root * @param deep */ public void purgeCache(IContainer root, boolean deep) throws SVNException { statusCache.purgeCache(root, deep); } /* (non-Javadoc) * @see org.eclipse.core.runtime.Preferences.IPropertyChangeListener#propertyChange(org.eclipse.core.runtime.Preferences.PropertyChangeEvent) */ public void propertyChange(PropertyChangeEvent event) { if (ISVNCoreConstants.PREF_RECURSIVE_STATUS_UPDATE.equals(event.getProperty())) { chooseUpdateStrategy(); } } /* (non-Javadoc) * @see org.eclipse.core.resources.IResourceChangeListener#resourceChanged(org.eclipse.core.resources.IResourceChangeEvent) * * When a resource changes this method will be called in a PRE_BUILD to allow to flush all changes which were not * saved during previous operations when the workspace was locked. * */ public void resourceChanged(IResourceChangeEvent event) { flushCache = false; try { event.getDelta().accept(new IResourceDeltaVisitor() { public boolean visit(IResourceDelta delta) throws CoreException { IResource resource = delta.getResource(); if (resource.getType()==IResource.PROJECT) { IProject project = (IProject)resource; if (!project.isAccessible()) { return false; // i.e., closed project } if (SVNWorkspaceRoot.isManagedBySubclipse(project)) { flushCache = true; } return false; // No need to check deeper than project. } return true; } }); } catch (CoreException e) { SVNProviderPlugin.log(e.getStatus()); } if (flushCache) { statusCache.flushPendingStatuses(); } } // getStatuses returns null URL for svn:externals folder. This will // get the URL using svn info command on the local resource private String getURL(ISVNStatus status) { String url = status.getUrlString(); if (url == null && !(status.getTextStatus() == SVNStatusKind.UNVERSIONED) && !(status.getTextStatus() == SVNStatusKind.IGNORED)) { ISVNClientAdapter svnClient = null; try { svnClient = SVNProviderPlugin.getPlugin().getSVNClient(); SVNProviderPlugin.disableConsoleLogging(); ISVNInfo info = svnClient.getInfoFromWorkingCopy(status.getFile()); SVNUrl svnurl = info.getUrl(); url = (svnurl != null) ? svnurl.toString() : null; } catch (SVNException e) { } catch (SVNClientException e) { } finally { SVNProviderPlugin.enableConsoleLogging(); SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(svnClient); } } return url; } } StatusUpdateStrategy.java000066400000000000000000000071271203611042400427050ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/status/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.status; import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; import org.eclipse.core.resources.IResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.SVNNodeKind; import org.tigris.subversion.svnclientadapter.SVNStatusKind; import org.tigris.subversion.svnclientadapter.SVNStatusUnversioned; /** * When the status of a resource is asked, we don't update a resource at once. * We use a strategy to get the status of several resources at once. * There are more than one strategy. All strategies inherit from this class * * @author cedric chabanois (cchab at tigris.org) */ public abstract class StatusUpdateStrategy { protected IStatusCache statusCache; public StatusUpdateStrategy(IStatusCache statusCache) { super(); setStatusCache(statusCache); } /** * @param treeCacheRoot The treeCacheRoot to set. */ public void setStatusCache(IStatusCache statusCache) { this.statusCache = statusCache; } /** * update the status of the given resource and possibly to other resources * as well depending on the strategy * @param resource * @throws SVNException */ abstract ISVNStatus[] statusesToUpdate(IResource resource) throws SVNException; /** * Collect the content of unversioned folders. * @param statuses * @param recursive * @return */ protected ISVNStatus[] collectUnversionedFolders(ISVNStatus[] statuses, boolean recursive) { if (statuses == null) { return null; } List processed = new ArrayList(); for (ISVNStatus status : statuses) { processed.add(status); if (status.getNodeKind() != SVNNodeKind.FILE && status.getTextStatus() == SVNStatusKind.UNVERSIONED) { File folder = status.getFile(); if (!folder.isDirectory() && !folder.exists()) continue; try { Set alreadyProcessed = new HashSet(); processUnversionedFolder(folder, processed, recursive, alreadyProcessed); } catch (IOException e) { System.out.println(e); e.printStackTrace(); } } } return processed.toArray(new ISVNStatus[processed.size()]); } void processUnversionedFolder(final File folder, final List statuses, final boolean recursive, final Set alreadyProcessed) throws IOException { String canonicalPath = folder.getCanonicalPath(); if (alreadyProcessed.contains(canonicalPath)) return; alreadyProcessed.add(canonicalPath); File[] files = folder.listFiles(); if (files == null) return; for (File file : files) { statuses.add(new SVNStatusUnversioned(file, false)); if (recursive && file.isDirectory()) { processUnversionedFolder(file, statuses, recursive, alreadyProcessed); continue; } } } } SynchronizerSyncInfoCache.java000066400000000000000000000254671203611042400436350ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/status/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.status; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceStatus; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; /** * Local sync info cache using ResourceInfo.syncInfo for storage. * */ public class SynchronizerSyncInfoCache implements IStatusCache { protected static final byte[] BYTES_REMOVED = new byte[0]; protected SyncInfoSynchronizedAccessor accessor = new SyncInfoSynchronizedAccessor(); /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.status.IStatusCache#hasCachedStatus(org.eclipse.core.resources.IResource) */ public boolean hasCachedStatus(IResource resource) { try { return getCachedSyncBytes(resource) != null; } catch (SVNException e) { SVNProviderPlugin.log(e); return false; } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.status.IStatusCache#getStatus(org.eclipse.core.resources.IResource) */ public LocalResourceStatus getStatus(IResource resource){ try { return LocalResourceStatus.fromBytes(getCachedSyncBytes(resource)); } catch (SVNException e) { SVNProviderPlugin.log(e); return null; } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.status.IStatusCache#addStatus(org.tigris.subversion.subclipse.core.resources.LocalResourceStatus) */ public IResource addStatus(IResource resource, LocalResourceStatus status) { try { if (resource == null) return null; if (status.isUnversioned() && !(resource.exists() || resource.isPhantom())) { return resource; } setCachedSyncBytes(resource, status.getBytes()); return resource; } catch (SVNException e) { if (!"".equals(e.getMessage())) // We send these exceptions so that the log does not go nuts SVNProviderPlugin.log(e); return null; } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.status.IStatusCache#removeStatus(org.eclipse.core.resources.IResource) */ public IResource removeStatus(IResource resource) { try { setCachedSyncBytes(resource, null); return resource; } catch (SVNException e) { SVNProviderPlugin.log(e); return null; } } private byte[] getCachedSyncBytes(IResource resource) throws SVNException { try { byte[] bytes; if (accessor.pendingCacheContains(resource)) { bytes = accessor.readFromPendingCache(resource); if (bytes == BYTES_REMOVED) { bytes = null; } } else { bytes = accessor.internalGetCachedSyncBytes(resource); } return bytes; } catch (CoreException e) { throw SVNException.wrapException(e); } } private void setCachedSyncBytes(IResource resource, byte[] syncBytes) throws SVNException { byte[] oldBytes = getCachedSyncBytes(resource); try { if (syncBytes == null) { if (oldBytes != null) { boolean canModifyWorkspace = !ResourcesPlugin.getWorkspace().isTreeLocked(); if (canModifyWorkspace) { try { accessor.removeFromPendingCache(resource); if (resource.exists() || resource.isPhantom()) { accessor.internalSetCachedSyncBytes(resource, null); } } catch (Exception e) { if (resource.exists() || resource.isPhantom()) { accessor.writeToPendingCache(resource, BYTES_REMOVED); } } } else { if (resource.exists() || resource.isPhantom()) { accessor.writeToPendingCache(resource, BYTES_REMOVED); } } } } else { // ensure that the sync info is not already set to the same thing. // We do this to avoid causing a resource delta when the sync info is // initially loaded (i.e. the synchronizer has it and so does the Entries file if (oldBytes == null || !SyncInfoSynchronizedAccessor.equals(syncBytes, oldBytes)) { boolean canModifyWorkspace = !ResourcesPlugin.getWorkspace().isTreeLocked(); if (canModifyWorkspace) { try { accessor.removeFromPendingCache(resource); accessor.internalSetCachedSyncBytes(resource, syncBytes); } catch (Exception e) { LocalResourceStatus.fromBytes(oldBytes); accessor.writeToPendingCache(resource, syncBytes); } } else { LocalResourceStatus.fromBytes(oldBytes); accessor.writeToPendingCache(resource, syncBytes); } } } } catch (CoreException e) { throw SVNException.wrapException(e); } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.status.IStatusCache#purgeCache(org.eclipse.core.resources.IContainer, boolean) */ public void purgeCache(IContainer root, boolean deep) throws SVNException { int depth = deep ? IResource.DEPTH_INFINITE : IResource.DEPTH_ZERO; try { if (root.exists() || root.isPhantom()) { ResourcesPlugin.getWorkspace().getSynchronizer().flushSyncInfo(StatusCacheManager.SVN_BC_SYNC_KEY, root, depth); } if (deep) { accessor.removeRecursiveFromPendingCache(root); } else { accessor.removeFromPendingCache(root); } } catch (CoreException e) { if (e.getStatus().getCode() == IResourceStatus.RESOURCE_NOT_FOUND) { // Must have been deleted since we checked return; } throw SVNException.wrapException(e); } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.status.IStatusCache#flushPendingStatuses() */ public void flushPendingStatuses() { if (accessor.isFlushFeasible()) { try { ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() { public void run(IProgressMonitor monitor) { accessor.flushPendingCacheWrites(); } }, null); } catch (CoreException e) { SVNProviderPlugin.log(SVNException.wrapException(e)); } } } protected final static class SyncInfoSynchronizedAccessor { // Map of sync bytes that were set without a scheduling rule private Map pendingCacheWrites = new HashMap(); /* * Retieve the cached sync bytes from the synchronizer. A null * is returned if there are no cached sync bytes. */ protected byte[] internalGetCachedSyncBytes(IResource resource) throws SVNException { try { return ResourcesPlugin.getWorkspace().getSynchronizer().getSyncInfo(StatusCacheManager.SVN_BC_SYNC_KEY, resource); } catch (CoreException e) { throw SVNException.wrapException(e); } } /* * Set the sync bytes to the synchronizer. */ protected void internalSetCachedSyncBytes(IResource resource, byte[] syncInfo) throws SVNException { try { ResourcesPlugin.getWorkspace().getSynchronizer().setSyncInfo(StatusCacheManager.SVN_BC_SYNC_KEY, resource, syncInfo); } catch (CoreException e) { throw SVNException.wrapException(e); } } /** * Flushes statuses from pending cache. * The method is not synchronized intentionally. */ protected void flushPendingCacheWrites() { if ((pendingCacheWrites.size() > 0) && (!ResourcesPlugin.getWorkspace().isTreeLocked())) { int count = pendingCacheWrites.size(); for (int i = 0; i < count; i++) { Map.Entry cachedEntry = nextFromPendingCache(); if (cachedEntry != null) { IResource resource = (IResource) cachedEntry.getKey(); byte[] value = (byte []) cachedEntry.getValue(); if (value == BYTES_REMOVED) value = null; try { ResourcesPlugin.getWorkspace().getSynchronizer().setSyncInfo(StatusCacheManager.SVN_BC_SYNC_KEY, resource, value); } catch (CoreException e) { SVNProviderPlugin.log(SVNException.wrapException(e)); } removeFromPendingCacheIfEqual((IResource) cachedEntry.getKey(), (byte []) cachedEntry.getValue()); } } } } protected boolean isFlushFeasible() { return (pendingCacheWrites.size() > 0) && (!ResourcesPlugin.getWorkspace().isTreeLocked()); } synchronized private Map.Entry nextFromPendingCache() { if (pendingCacheWrites.size() > 0) { return (Map.Entry) pendingCacheWrites.entrySet().iterator().next(); } return null; } synchronized protected boolean pendingCacheContains(IResource resource) { return ((pendingCacheWrites.size() > 0) && (pendingCacheWrites.containsKey(resource))); } synchronized protected byte[] readFromPendingCache(IResource resource) { return (byte[]) pendingCacheWrites.get(resource); } synchronized protected void writeToPendingCache(IResource resource, byte[] syncBytes) { pendingCacheWrites.put(resource, syncBytes); } synchronized protected void removeFromPendingCache(IResource resource) { pendingCacheWrites.remove(resource); } /** * Remove the resource from cache if the cached bytes are equal to syncBytes * This is because the caller of this method is not synchronized, so if the cache * was modified, do not remove the resource ... * @param resource * @param syncBytes * @return true when the status was equal and removed from pendingCache */ synchronized protected boolean removeFromPendingCacheIfEqual(IResource resource, byte[] syncBytes) { byte[] old = (byte[]) pendingCacheWrites.get(resource); if (equals(old, syncBytes)) { pendingCacheWrites.remove(resource); return true; } return false; } synchronized protected void removeRecursiveFromPendingCache(IResource resource) { IPath fullPath = resource.getFullPath(); for (Iterator iter = pendingCacheWrites.keySet().iterator(); iter.hasNext();) { if (fullPath.isPrefixOf(((IResource) iter.next()).getFullPath())) { iter.remove(); } } } /** * Method equals. * @param syncBytes * @param oldBytes * @return boolean */ protected static boolean equals(byte[] syncBytes, byte[] oldBytes) { if (syncBytes == null || oldBytes == null) return syncBytes == oldBytes; if (syncBytes.length != oldBytes.length) return false; for (int i = 0; i < oldBytes.length; i++) { if (oldBytes[i] != syncBytes[i]) { return false; } } return true; } } }000077500000000000000000000000001203611042400353135ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/syncSVNRevisionComparator.java000066400000000000000000000057611203611042400424040ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/sync/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.sync; import org.eclipse.core.resources.IResource; import org.eclipse.team.core.variants.IResourceVariant; import org.eclipse.team.core.variants.IResourceVariantComparator; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.core.util.Util; /** * @author mml */ public class SVNRevisionComparator implements IResourceVariantComparator { /* (non-Javadoc) * @see org.eclipse.team.core.variants.IResourceVariantComparator#compare(org.eclipse.core.resources.IResource, org.eclipse.team.core.variants.IResourceVariant) */ public boolean compare(IResource local, IResourceVariant remote) { if( local == null && remote == null ) return true; if( local == null || remote == null ) return false; ISVNLocalResource a = SVNWorkspaceRoot.getSVNResourceFor(local); ISVNRemoteResource b = (ISVNRemoteResource)remote; try { return a.getStatus().getLastChangedRevision().getNumber() == b.getLastChangedRevision().getNumber(); } catch (SVNException e) { Util.logError("Cannot compare local resource with remote resource",e); } catch(NullPointerException npe) { // When svn:externals are used several of the above methods can return null // We have already checked for the important/expected nulls return true; } return false; } /* (non-Javadoc) * @see org.eclipse.team.core.variants.IResourceVariantComparator#compare(org.eclipse.team.core.variants.IResourceVariant, org.eclipse.team.core.variants.IResourceVariant) */ public boolean compare(IResourceVariant base, IResourceVariant remote) { if( base == remote ) return true; if( base == null || remote == null ) return false; ISVNRemoteResource a = (ISVNRemoteResource)base; ISVNRemoteResource b = (ISVNRemoteResource)remote; try { return a.getLastChangedRevision().getNumber()==b.getLastChangedRevision().getNumber(); } catch(NullPointerException npe) { // When svn:externals are used several of the above methods can return null // We have already checked for the important/expected nulls return true; } } /* (non-Javadoc) * @see org.eclipse.team.core.variants.IResourceVariantComparator#isThreeWay() */ public boolean isThreeWay() { return true; } } SVNStatusSyncInfo.java000066400000000000000000000303141203611042400415020ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/sync/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.sync; import org.eclipse.core.resources.IEncodedStorage; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.team.core.TeamException; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.core.variants.IResourceVariant; import org.eclipse.team.core.variants.IResourceVariantComparator; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.resources.BaseFile; import org.tigris.subversion.subclipse.core.resources.BaseFolder; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.RemoteFile; import org.tigris.subversion.subclipse.core.resources.RemoteFolder; import org.tigris.subversion.subclipse.core.resources.RemoteResourceStatus; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNStatusKind; /** * @author Panagiotis K */ public class SVNStatusSyncInfo extends SyncInfo { private final LocalResourceStatus baseStatusInfo; private final RemoteResourceStatus remoteStatusInfo; public SVNStatusSyncInfo(IResource local, LocalResourceStatus baseStatusInfo, RemoteResourceStatus remoteStatusInfo, IResourceVariantComparator comparator) { super(local, createBaseResourceVariant( local, baseStatusInfo), createLatestResourceVariant( local, baseStatusInfo, remoteStatusInfo), comparator); this.baseStatusInfo = (baseStatusInfo != null) ? baseStatusInfo : LocalResourceStatus.NONE; this.remoteStatusInfo = remoteStatusInfo; } /** * Get the repository revision (from the remoteStatus). * If we can't get the revision from the remote status, return HEAD. * @return */ public SVNRevision getRepositoryRevision() { if (remoteStatusInfo != null) { SVNRevision rev = remoteStatusInfo.getRepositoryRevision(); if ((rev != null) && !SVNRevision.INVALID_REVISION.equals(rev)) { return rev; } else { return SVNRevision.HEAD; } } else { return SVNRevision.HEAD; } } /* (non-Javadoc) * @see org.eclipse.team.core.synchronize.SyncInfo#getRemote() */ public IResourceVariant getRemote() { // If we want to avoid the unnecessary roundtrip for fetching the contents of remote file in case of outgoing changes, // (when we actually need/want to compare with base only), we should trick the eclipse somehow. //So what we do now is answer the remote only in case of incoming change or conflict. IResourceVariant theRemote = super.getRemote(); if ((theRemote != null) && ((SyncInfo.INCOMING == SyncInfo.getDirection(getKind())) || (SyncInfo.CONFLICTING == SyncInfo.getDirection(getKind())))) { return theRemote; } else { return (super.getBase() != null) ? super.getBase() : theRemote; } } // /* (non-Javadoc) // * @see org.eclipse.team.core.synchronize.SyncInfo#getRemote() // */ // public IResourceVariant getBase() { // //TODO This should probably go away when the JavaHL will be fixed. // //There is a bug in JavaHL (1.2.2) which does not correctly translates the line endings. // //To avoid displaying the change as confilct, we will answer base only when really necessary // //So what we do now is answer the base only in case of outgoing change or conflict. // IResourceVariant theBase = super.getBase(); // if ((theBase != null) && // ((SyncInfo.OUTGOING == SyncInfo.getDirection(getKind())) || // (SyncInfo.CONFLICTING == SyncInfo.getDirection(getKind())))) // { // return theBase; // } // else // { // return (super.getRemote() != null) ? super.getRemote() : theBase; // } // } /* (non-Javadoc) * @see org.eclipse.team.core.synchronize.SyncInfo#getLocalContentIdentifier() */ public String getLocalContentIdentifier() { return (baseStatusInfo.getLastChangedRevision() != null) ? baseStatusInfo.getLastChangedRevision().toString() : null; } /** * Returns the remote status information of this SyncInfo */ public RemoteResourceStatus getRemoteResourceStatus() { return remoteStatusInfo; } /* (non-Javadoc) * @see org.eclipse.team.core.synchronize.SyncInfo#calculateKind() */ protected int calculateKind() throws TeamException { SVNStatusKind localKind = baseStatusInfo.getStatusKind(); SVNStatusKind repositoryKind = (remoteStatusInfo != null) ? remoteStatusInfo.getStatusKind() : SVNStatusKind.NORMAL; IResource local = getLocal(); // If resource is ignored through Eclipse project's resource filters property, IResource.exists() returns false, // even if the file/folder exists in the file system. So we need to check for the existence in the file system // so that these items aren't incorrectly shown as outgoing deletions. if (!local.exists() && !(local.getLocation() == null || local.getLocation().toFile().exists())) { if (isAddition(repositoryKind)) return SyncInfo.INCOMING | SyncInfo.ADDITION; if (localKind == SVNStatusKind.UNVERSIONED) return SyncInfo.IN_SYNC; if (isDeletion(repositoryKind)) return SyncInfo.IN_SYNC; if (!repositoryKind.equals(SVNStatusKind.ADDED)) { if (localKind == SVNStatusKind.NONE) { return SyncInfo.IN_SYNC; } if (isChange(repositoryKind)) return SyncInfo.CONFLICTING | SyncInfo.DELETION; return SyncInfo.OUTGOING | SyncInfo.DELETION; } else return SyncInfo.INCOMING | SyncInfo.ADDITION; } else if ( isDeletion(localKind)) { if (isNotModified(repositoryKind)) { if (isOutOfDate()) return SyncInfo.CONFLICTING | SyncInfo.DELETION; else return SyncInfo.OUTGOING | SyncInfo.DELETION; } else return SyncInfo.CONFLICTING | SyncInfo.DELETION; } else if( isChange(localKind) ) { if( isChange( repositoryKind ) || isAddition( repositoryKind ) || isDeletion( repositoryKind )) return SyncInfo.CONFLICTING | SyncInfo.CHANGE; else { if ((IResource.FOLDER == local.getType() || IResource.PROJECT == local.getType()) && isOutOfDate()) return SyncInfo.CONFLICTING | SyncInfo.CHANGE; else return SyncInfo.OUTGOING | SyncInfo.CHANGE; } } else if( isAddition( localKind ) ) { if( isAddition( repositoryKind ) ) return SyncInfo.CONFLICTING | SyncInfo.ADDITION; return SyncInfo.OUTGOING | SyncInfo.ADDITION; } else if( isNotModified(localKind) ) { if( isNotModified( repositoryKind) ) { if ((IResource.FOLDER == local.getType() || IResource.PROJECT == local.getType()) && isOutOfDate()) return SyncInfo.INCOMING | SyncInfo.CHANGE; return SyncInfo.IN_SYNC; } if ((localKind == SVNStatusKind.IGNORED) && (repositoryKind == SVNStatusKind.ADDED)) return SyncInfo.CONFLICTING | SyncInfo.ADDITION; if( repositoryKind == SVNStatusKind.DELETED ) return SyncInfo.INCOMING | SyncInfo.DELETION; if( repositoryKind == SVNStatusKind.ADDED ) return SyncInfo.INCOMING | SyncInfo.ADDITION; if( repositoryKind == SVNStatusKind.EXTERNAL) return SyncInfo.IN_SYNC; //TODO Is this really necessary here ? // if (getComparator().compare(getBase(), getRemote())) // return SyncInfo.IN_SYNC; return SyncInfo.INCOMING | SyncInfo.CHANGE; } else if( repositoryKind == SVNStatusKind.EXTERNAL ) { if (localKind == SVNStatusKind.EXTERNAL) return SyncInfo.IN_SYNC; } else if ((localKind == SVNStatusKind.EXTERNAL) && (remoteStatusInfo == null)) { return SyncInfo.IN_SYNC; } return super.calculateKind(); } private boolean isOutOfDate() { if (remoteStatusInfo == null || baseStatusInfo == null) return false; if (remoteStatusInfo.getLastChangedRevision() == null || baseStatusInfo.getLastChangedRevision() == null) return false; if (remoteStatusInfo.getLastChangedRevision().getNumber() > baseStatusInfo.getLastChangedRevision().getNumber()) return true; else return false; } private boolean isDeletion(SVNStatusKind kind) { return kind == SVNStatusKind.DELETED || kind == SVNStatusKind.MISSING; } private boolean isChange(SVNStatusKind kind) { return kind == SVNStatusKind.MODIFIED || kind == SVNStatusKind.REPLACED || kind == SVNStatusKind.OBSTRUCTED || kind == SVNStatusKind.CONFLICTED || kind == SVNStatusKind.MERGED; } private boolean isNotModified(SVNStatusKind kind) { return kind == SVNStatusKind.NORMAL || kind == SVNStatusKind.IGNORED || kind == SVNStatusKind.NONE; } private static boolean isAddition(SVNStatusKind kind) { return kind == SVNStatusKind.ADDED || kind == SVNStatusKind.UNVERSIONED; } private static IResourceVariant createBaseResourceVariant(IResource local, LocalResourceStatus baseStatusInfo) { if( baseStatusInfo == null || baseStatusInfo.getLastChangedRevision() == null ) return null; if( local.getType() == IResource.FILE ) { String charset = null; try { charset = ((IEncodedStorage)local).getCharset(); } catch (CoreException e) { SVNProviderPlugin.log(IStatus.ERROR, e.getMessage(), e); } return new BaseFile(local, baseStatusInfo, charset); } else { return new BaseFolder(local, baseStatusInfo); } } private static IResourceVariant createLatestResourceVariant(IResource local, LocalResourceStatus baseStatusInfo, RemoteResourceStatus remoteStatusInfo) { if( remoteStatusInfo == null || remoteStatusInfo.getStatusKind() == SVNStatusKind.DELETED ) return null; if( remoteStatusInfo.getStatusKind() == SVNStatusKind.NONE && baseStatusInfo != null && isAddition(baseStatusInfo.getStatusKind()) ) { return null; } if( local.getType() == IResource.FILE ) { return new RemoteFile(remoteStatusInfo); } else { return new RemoteFolder(remoteStatusInfo); } } /** * Asnwer label describing revision status. * (E.g. the one displayed byt the resource in the synchronize view). * @return */ public String getLabel() { IResourceVariant remote = getRemote(); if ((remote != null) && ((SyncInfo.INCOMING == SyncInfo.getDirection(getKind())) || (SyncInfo.CONFLICTING == SyncInfo.getDirection(getKind())))) { if (remote instanceof ISVNRemoteResource) { ISVNRemoteResource remoteResource = (ISVNRemoteResource)remote; if (remoteResource.getAuthor() != null) { return " (" + remote.getContentIdentifier() + " - " + remoteResource.getAuthor() + ")" ; } } return " (" + remote.getContentIdentifier() + ")" ; } else { return ""; } } public String toString() { return SyncInfo.kindToString(this.getKind()) + " L: " + this.baseStatusInfo + " R: " + this.remoteStatusInfo; } } SVNWorkspaceSubscriber.java000066400000000000000000000404331203611042400425330ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/sync/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.sync; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Set; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceStatus; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.Preferences.IPropertyChangeListener; import org.eclipse.core.runtime.Preferences.PropertyChangeEvent; import org.eclipse.core.runtime.Status; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; import org.eclipse.team.core.TeamStatus; import org.eclipse.team.core.subscribers.ISubscriberChangeEvent; import org.eclipse.team.core.subscribers.Subscriber; import org.eclipse.team.core.subscribers.SubscriberChangeEvent; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.core.variants.IResourceVariantComparator; import org.eclipse.team.core.variants.ResourceVariantByteStore; import org.eclipse.team.core.variants.SessionResourceVariantByteStore; import org.tigris.subversion.subclipse.core.CancelableSVNStatusCallback; import org.tigris.subversion.subclipse.core.IResourceStateChangeListener; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.client.StatusAndInfoCommand; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.RemoteResourceStatus; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.core.util.Util; import org.tigris.subversion.svnclientadapter.SVNStatusKind; public class SVNWorkspaceSubscriber extends Subscriber implements IResourceStateChangeListener, IPropertyChangeListener { private static SVNWorkspaceSubscriber instance; private HashMap changesMap = new HashMap(); private boolean ignoreHiddenChanges = SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_IGNORE_HIDDEN_CHANGES); /** We need to store unchanged parents in remoteSyncStateStore. * To distinguish them from real changed resources we store this dummy data instead for them */ private static final byte[] DUMMY_SYNC_BYTES = new byte[] {-1, -2, -3, -4}; /** * Return the file system subscriber singleton. * @return the file system subscriber singleton. */ public static synchronized SVNWorkspaceSubscriber getInstance() { if (instance == null) { instance = new SVNWorkspaceSubscriber(); } return instance; } protected SVNRevisionComparator comparator = new SVNRevisionComparator(); protected ResourceVariantByteStore remoteSyncStateStore = new SessionResourceVariantByteStore(); private SVNWorkspaceSubscriber() { SVNProviderPlugin.addResourceStateChangeListener(this); SVNProviderPlugin.getPlugin().getPluginPreferences().addPropertyChangeListener(this); } /* (non-Javadoc) * @see org.eclipse.team.core.subscribers.Subscriber#getResourceComparator() */ public IResourceVariantComparator getResourceComparator() { return comparator; } /* (non-Javadoc) * @see org.eclipse.team.core.subscribers.Subscriber#getName() */ public String getName() { return "SVNStatusSubscriber"; //$NON-NLS-1$ } /* (non-Javadoc) * @see org.eclipse.team.core.subscribers.Subscriber#roots() */ public IResource[] roots() { List result = new ArrayList(); IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); for (IProject project : projects) { if(project.isAccessible()) { RepositoryProvider provider = RepositoryProvider.getProvider(project, SVNProviderPlugin.PROVIDER_ID); if(provider != null) { result.add(project); } } } return (IProject[]) result.toArray(new IProject[result.size()]); } /* (non-Javadoc) * @see org.eclipse.team.core.subscribers.Subscriber#isSupervised(org.eclipse.core.resources.IResource) */ public boolean isSupervised(IResource resource) throws TeamException { try { if (resource.isTeamPrivateMember() || SVNWorkspaceRoot.isLinkedResource(resource)) return false; RepositoryProvider provider = RepositoryProvider.getProvider(resource.getProject(), SVNProviderPlugin.getTypeId()); if (provider == null) return false; // TODO: what happens for resources that don't exist? // TODO: is it proper to use ignored here? ISVNLocalResource svnThing = SVNWorkspaceRoot.getSVNResourceFor(resource); if (svnThing.isIgnored()) { // An ignored resource could have an incoming addition (conflict) return (remoteSyncStateStore.getBytes(resource) != null) || ((remoteSyncStateStore.members(resource) != null) && (remoteSyncStateStore.members(resource).length > 0)); } return true; } catch (TeamException e) { // If there is no resource in coe this measn there is no local and no remote // so the resource is not supervised. if (e.getStatus().getCode() == IResourceStatus.RESOURCE_NOT_FOUND) { return false; } throw e; } } /* (non-Javadoc) * @see org.eclipse.team.core.subscribers.Subscriber#members(org.eclipse.core.resources.IResource) */ public IResource[] members(IResource resource) throws TeamException { if ((resource.getType() == IResource.FILE) || (!isSupervised(resource))){ return new IResource[0]; } try { Set allMembers = new HashSet(); try { allMembers.addAll(Arrays.asList(((IContainer)resource).members(true))); } catch (CoreException e) { if (e.getStatus().getCode() == IResourceStatus.RESOURCE_NOT_FOUND) { // The resource is no longer exists so ignore the exception } else { throw e; } } //add remote changed resources (they may not exist locally) allMembers.addAll(Arrays.asList( remoteSyncStateStore.members( resource ) ) ); return allMembers.toArray(new IResource[allMembers.size()]); } catch (CoreException e) { throw TeamException.asTeamException(e); } } /* (non-Javadoc) * @see org.eclipse.team.core.subscribers.Subscriber#getSyncInfo(org.eclipse.core.resources.IResource) */ public SyncInfo getSyncInfo(IResource resource) throws TeamException { if (resource == null) return null; if( ! isSupervised( resource ) ) return null; if (ignoreHiddenChanges && Util.isHidden(resource)) { return null; } //LocalResourceStatus localStatus = SVNWorkspaceRoot.getSVNResourceFor( resource ); LocalResourceStatus localStatus = SVNProviderPlugin.getPlugin().getStatusCacheManager().getStatus(resource); RemoteResourceStatus remoteStatusInfo = null; byte[] remoteBytes = remoteSyncStateStore.getBytes( resource ); if ((remoteBytes != null) && (remoteBytes != DUMMY_SYNC_BYTES)) { remoteStatusInfo = RemoteResourceStatus.fromBytes(remoteBytes); } SyncInfo syncInfo = new SVNStatusSyncInfo(resource, localStatus, remoteStatusInfo, comparator); syncInfo.init(); return syncInfo; } /* (non-Javadoc) * @see org.eclipse.team.core.subscribers.Subscriber#refresh(org.eclipse.core.resources.IResource[], int, org.eclipse.core.runtime.IProgressMonitor) */ public void refresh(IResource[] resources, int depth, IProgressMonitor monitor) throws TeamException { monitor = Policy.monitorFor(monitor); List errors = new ArrayList(); try { monitor.beginTask("", 1000 * resources.length); for (IResource resource : resources) { // Make certain that resource is still connected with SVN. When // Synch is on a schedule it is possible for the project to become disconnected SVNTeamProvider teamProvider = (SVNTeamProvider)RepositoryProvider.getProvider(resource.getProject(), SVNProviderPlugin.getTypeId()); if (teamProvider != null) { monitor.subTask(resource.getName()); IStatus status = refresh(resource, depth, monitor); if (!status.isOK()) { errors.add(status); } } } } finally { monitor.done(); } if (!errors.isEmpty()) { int numSuccess = resources.length - errors.size(); throw new TeamException(new MultiStatus(SVNProviderPlugin.ID, 0, (IStatus[]) errors.toArray(new IStatus[errors.size()]), Policy.bind("SVNWorkspaceSubscriber.errorWhileSynchronizing.1", new Object[] {getName(), Integer.toString(numSuccess), Integer.toString(resources.length)}), null)); //$NON-NLS-1$ } } private IStatus refresh(IResource resource, int depth, IProgressMonitor monitor) { try { // monitor.setTaskName(Policy.bind("SVNWorkspaceSubscriber.refreshingSynchronizationData", resource.getFullPath().toString())); monitor.worked(100); // SVNProviderPlugin.getPlugin().getStatusCacheManager().refreshStatus(resource, IResource.DEPTH_INFINITE); // monitor.worked(300); monitor.setTaskName(Policy.bind("SVNWorkspaceSubscriber.retrievingSynchronizationData")); IResource[] lastChangedResources = (IResource[])changesMap.get(resource); IResource[] changedResources = findChanges(resource, depth, Policy.infiniteSubMonitorFor(monitor, 400)); changesMap.put(resource, changedResources); fireTeamResourceChange(SubscriberChangeEvent.asSyncChangedDeltas(this, changedResources)); if (lastChangedResources != null && lastChangedResources.length > 0) fireTeamResourceChange(SubscriberChangeEvent.asSyncChangedDeltas(this, lastChangedResources)); monitor.worked(400); return Status.OK_STATUS; } catch (TeamException e) { return new TeamStatus(IStatus.ERROR, SVNProviderPlugin.ID, 0, Policy.bind("SVNWorkspaceSubscriber.errorWhileSynchronizing.2", resource.getFullPath().toString(), e.getMessage()), e, resource); //$NON-NLS-1$ } } private IResource[] findChanges(IResource resource, int depth, IProgressMonitor monitor) throws TeamException { try { monitor.beginTask("", 100); remoteSyncStateStore.flushBytes(resource, depth); // ISVNClientAdapter client = SVNProviderPlugin.getPlugin().createSVNClient(); boolean descend = (depth == IResource.DEPTH_INFINITE)? true : false; boolean showOutOfDate = SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_SHOW_OUT_OF_DATE_FOLDERS); StatusAndInfoCommand cmd = new StatusAndInfoCommand(SVNWorkspaceRoot.getSVNResourceFor( resource ), descend, showOutOfDate, true ); cmd.setCallback(new CancelableSVNStatusCallback(monitor)); cmd.run(monitor); if (monitor.isCanceled()) { return new IResource[0]; } monitor.worked(70); RemoteResourceStatus[] statuses = cmd.getRemoteResourceStatuses(); List result = new ArrayList(statuses.length); for (RemoteResourceStatus status : statuses) { IResource changedResource = SVNWorkspaceRoot.getResourceFor(resource, status); if (changedResource == null) continue; if (isSupervised(changedResource) || (status.getTextStatus() != SVNStatusKind.NONE)) { if (!ignoreHiddenChanges || !Util.isHidden(changedResource)) { result.add(changedResource); remoteSyncStateStore.setBytes( changedResource, status.getBytes() ); registerChangedResourceParent(changedResource); } } } // Ensure that the local sync state is also updated IContainer container = resource.getType() == IResource.FILE ? resource.getParent() : (IContainer)resource; SVNProviderPlugin.getPlugin().getStatusCacheManager().refreshStatus(container, true); monitor.worked(30); return (IResource[]) result.toArray(new IResource[result.size()]); } catch (SVNException e) { if (e.getMessage().contains("Operation cancelled")) { return new IResource[0]; } else { throw new TeamException("Error getting status for resource " + resource + " " + e.getMessage(), e); } } finally { monitor.done(); } } /** * SessionResourceVariantByteStore of remoteSyncStateStore used to store (and flush) sync changes * register only direct parents of the changed resources. * If we want to be able to flush arbitrary subtree from the remoteSyncStateStore (event subtree which root * is unchanged resource), we have to cache all parent of the changed resources up to the top. * These sync DUMMY_SYNC_BYTES are stored as synch info, so upon this dummy bytes we then filter out * the actually unchanged sync data from the cache * @param changedResource */ private void registerChangedResourceParent(IResource changedResource) throws TeamException { IContainer parent = changedResource.getParent(); if (parent == null) return; if (remoteSyncStateStore.getBytes(parent) == null) { remoteSyncStateStore.setBytes(parent, DUMMY_SYNC_BYTES); registerChangedResourceParent(parent); } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.IResourceStateChangeListener#resourceSyncInfoChanged(org.eclipse.core.resources.IResource[]) */ public void resourceSyncInfoChanged(IResource[] changedResources) { internalResourceChanged(changedResources); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.IResourceStateChangeListener#resourceModified(org.eclipse.core.resources.IResource[]) */ public void resourceModified(IResource[] changedResources) { internalResourceChanged(changedResources); } /** * @param changedResources */ private void internalResourceChanged(IResource[] changedResources) { fireTeamResourceChange(SubscriberChangeEvent.asSyncChangedDeltas(this, changedResources)); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.IResourceStateChangeListener#projectConfigured(org.eclipse.core.resources.IProject) */ public void projectConfigured(IProject project) { SubscriberChangeEvent delta = new SubscriberChangeEvent(this, ISubscriberChangeEvent.ROOT_ADDED, project); fireTeamResourceChange(new SubscriberChangeEvent[] {delta}); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.IResourceStateChangeListener#projectDeconfigured(org.eclipse.core.resources.IProject) */ public void projectDeconfigured(IProject project) { SubscriberChangeEvent delta = new SubscriberChangeEvent(this, ISubscriberChangeEvent.ROOT_REMOVED, project); fireTeamResourceChange(new SubscriberChangeEvent[] {delta}); } public void initialize() {}; public void updateRemote(IResource[] resources) throws TeamException { for (int i = 0; i < resources.length; i++) { remoteSyncStateStore.flushBytes(resources[i], IResource.DEPTH_INFINITE); } } public void propertyChange(PropertyChangeEvent event) { if (event.getProperty().equals(ISVNCoreConstants.PREF_IGNORE_HIDDEN_CHANGES)) { ignoreHiddenChanges = SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_IGNORE_HIDDEN_CHANGES); } } } 000077500000000000000000000000001203611042400353145ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/utilAssert.java000066400000000000000000000102361203611042400374220ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/util/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.util; /** * Assert is useful for for embedding runtime sanity checks * in code. * The predicate methods all test a condition and throw some * type of unchecked exception if the condition does not hold. *

* Assertion failure exceptions, like most runtime exceptions, are * thrown when something is misbehaving. Assertion failures are invariably * unspecified behavior; consequently, clients should never rely on * these being thrown (and certainly should not being catching them * specifically). *

*/ public final class Assert { /* This class is not intended to be instantiated. */ private Assert() { } /** Asserts that an argument is legal. If the given boolean is * not true, an IllegalArgumentException * is thrown. * * @param expression the outcode of the check * @return true if the check passes (does not return * if the check fails) * @exception IllegalArgumentException if the legality test failed */ public static boolean isLegal(boolean expression) { return isLegal(expression, ""); //$NON-NLS-1$ } /** Asserts that an argument is legal. If the given boolean is * not true, an IllegalArgumentException * is thrown. * The given message is included in that exception, to aid debugging. * * @param expression the outcode of the check * @param message the message to include in the exception * @return true if the check passes (does not return * if the check fails) * @exception IllegalArgumentException if the legality test failed */ public static boolean isLegal(boolean expression, String message) { if (!expression) throw new IllegalArgumentException(message); return expression; } /** Asserts that the given object is not null. If this * is not the case, some kind of unchecked exception is thrown. * * @param object the value to test * @exception IllegalArgumentException if the object is null */ public static void isNotNull(Object object) { isNotNull(object, ""); //$NON-NLS-1$ } /** Asserts that the given object is not null. If this * is not the case, some kind of unchecked exception is thrown. * The given message is included in that exception, to aid debugging. * * @param object the value to test * @param message the message to include in the exception * @exception IllegalArgumentException if the object is null */ public static void isNotNull(Object object, String message) { if (object == null) throw new AssertionFailedException("null argument:" + message); //$NON-NLS-1$ } /** Asserts that the given boolean is true. If this * is not the case, some kind of unchecked exception is thrown. * * @param expression the outcode of the check * @return true if the check passes (does not return * if the check fails) */ public static boolean isTrue(boolean expression) { return isTrue(expression, ""); //$NON-NLS-1$ } /** Asserts that the given boolean is true. If this * is not the case, some kind of unchecked exception is thrown. * The given message is included in that exception, to aid debugging. * * @param expression the outcode of the check * @param message the message to include in the exception * @return true if the check passes (does not return * if the check fails) */ public static boolean isTrue(boolean expression, String message) { if (!expression) throw new AssertionFailedException("assertion failed: " + message); //$NON-NLS-1$ return expression; } } AssertionFailedException.java000066400000000000000000000023361203611042400431160ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/util/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.util; /** * AssertionFailedException is a runtime exception thrown * by some of the methods in Assert. *

* This class is not declared public to prevent some misuses; programs that catch * or otherwise depend on assertion failures are susceptible to unexpected * breakage when assertions in the code are added or removed. *

*/ /* package */ class AssertionFailedException extends RuntimeException { /** Constructs a new exception. */ public AssertionFailedException() { } /** Constructs a new exception with the given message. */ public AssertionFailedException(String detail) { super(detail); } } File2Resource.java000066400000000000000000000044011203611042400406270ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/util/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.util; import java.io.File; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; /** * Utility class to get the IResource corresponding to given File * * @author Cedric Chabanois (cchab at tigris.org) */ public class File2Resource { /** * get the IResource corresponding to the given file. Given file should * exist because it is used to determine whether we need to create a * IContainer or a IFile * * @param file * @return */ public static IResource getResource(File file) { if (file == null) return null; return getResource(file, file.isDirectory()); } /** * get the IResource corresponding to the given file. Given file does not * need to exist. * * @param file * @param isDirectory * if true, an IContainer will be returned, otherwise an IFile * will be returned * @return */ public static IResource getResource(File file, boolean isDirectory) { if (file == null) return null; IWorkspace workspace = ResourcesPlugin.getWorkspace(); IWorkspaceRoot workspaceRoot = workspace.getRoot(); IPath pathEclipse = new Path(file.getAbsolutePath()); IResource resource = null; if (isDirectory) { resource = workspaceRoot.getContainerForLocation(pathEclipse); } else { resource = workspaceRoot.getFileForLocation(pathEclipse); } return resource; } }FileNameMatcher.java000066400000000000000000000043211203611042400411430ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/util/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.util; import java.util.ArrayList; import java.util.List; /** * A FileNameMatcher associates a String with a String pattern. */ public class FileNameMatcher { private List matchers = new ArrayList(); private List results = new ArrayList(); private static final String TRUE = "true"; //$NON-NLS-1$ public FileNameMatcher() { } public FileNameMatcher(String[] patterns) { register(patterns); } /** * register a set of pattern (all associated with "true" */ void register(String[] patterns) { for (String pattern : patterns) { register(pattern,TRUE); } } /** * register a pattern and an associated string */ public void register(String pattern, String result) { Assert.isTrue(matchers.size() == results.size()); pattern = pattern.trim(); // The empty pattern matches everything, but we want to match // nothing with it, so we just do not register anything if (pattern.length() == 0) { return; } matchers.add(new StringMatcher(pattern,false,false)); results.add(result); } /** * returns the string associated with the pattern that matches the given name * or null if no pattern matches the name */ public String getMatch(String name) { StringMatcher stringMatcher; for (int i = 0; i < matchers.size(); i++) { stringMatcher = matchers.get(i); if (stringMatcher.match(name)) { return results.get(i); } } return null; } /** * returns true if name matches one of the patterns */ public boolean match(String name) { return getMatch(name) != null; } } FilteringContainerList.java000066400000000000000000000042261203611042400426050ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/utilpackage org.tigris.subversion.subclipse.core.util; import java.util.Collection; import java.util.Iterator; import java.util.SortedMap; import java.util.TreeMap; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; /** * Iterable that only returns the top level containers and silently swallowing the childs. */ public class FilteringContainerList implements Iterable { private SortedMap containers = new TreeMap(); public FilteringContainerList() { } public FilteringContainerList(Collection resources) { addAll(resources); } public Iterator iterator() { return new FilteringContainerListIterator(new TreeMap(containers)); } public void add(IContainer container) { containers.put(container.getFullPath().toString(), container); } public void add(IResource resource) { IContainer container; if (resource instanceof IContainer) { container = (IContainer)resource; } else { container = resource.getParent(); } containers.put(container.getFullPath().toString(), container); } public void addAll(Collection resources) { if (resources == null) return; for (IResource resource : resources) add(resource); } private static class FilteringContainerListIterator implements Iterator { private SortedMap containers = new TreeMap(); FilteringContainerListIterator(SortedMap containers) { this.containers = containers; } public boolean hasNext() { return !containers.isEmpty(); } public IContainer next() { String key = containers.firstKey(); IContainer result = containers.get(key); containers.remove(key); key += "/"; // Remove child containers SortedMap childs = containers.tailMap(key); for (Iterator it = childs.keySet().iterator(); it.hasNext(); ) { if (it.next().startsWith(key)) it.remove(); else break; } return result; } public void remove() { throw new UnsupportedOperationException(); } } } ISimpleDialogsHelper.java000066400000000000000000000024411203611042400421650ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/util/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ /** * * This interface exists to provide the UI package a way to pass dialogs * helpers to the subclipse core package. * * @author Magnus Naeslund (mag@kite.se) * */ package org.tigris.subversion.subclipse.core.util; /** * * @author mag * @see org.tigris.subversion.subclipse.ui.util.SimpleDialogsHelper * @see org.tigris.subversion.subclipse.core.SVNProviderPlugin#getSimpleDialogsHelper() * */ public interface ISimpleDialogsHelper { /** * * @param title * @param question * @param yesIsDefault * @return true if the user pressed yes * */ public boolean promptYesNo(String title, String question, boolean yesIsDefault); public boolean promptYesCancel(String title, String question, boolean yesIsDefault); } JobUtility.java000066400000000000000000000023461203611042400402620ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/utilpackage org.tigris.subversion.subclipse.core.util; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.Job; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; public class JobUtility { public static Job scheduleJob(String jobName, final Runnable runnable, final ISchedulingRule schedulingRule, boolean system) { Job job = new Job(jobName) { protected IStatus run(IProgressMonitor monitor) { try { ResourcesPlugin.getWorkspace().run(new IWorkspaceRunnable() { public void run(IProgressMonitor monitor) throws CoreException { runnable.run(); } }, this.getRule(), IWorkspace.AVOID_UPDATE, monitor); } catch (CoreException e) { SVNProviderPlugin.log(Status.ERROR, e.getMessage(), e); } return Status.OK_STATUS; } }; job.setRule(schedulingRule); job.setSystem(system); job.schedule(); return job; } } ReentrantLock.java000066400000000000000000000054511203611042400407370ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/util/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.util; import java.util.HashSet; import java.util.Set; import org.tigris.subversion.subclipse.core.Policy; /** * Provides a per-thread nested locking mechanism. A thread can acquire a * lock and then call acquire() multiple times. Other threads that try * and acquire the lock will be blocked until the first thread releases all * it's nested locks. */ public class ReentrantLock { private final static boolean DEBUG = Policy.DEBUG_THREADING; private Thread thread; private int nestingCount; private Set readOnlyThreads = new HashSet(); public ReentrantLock() { this.thread = null; this.nestingCount = 0; } public synchronized void acquire() { // stop early if we've been interrupted -- don't enter the lock anew Thread thisThread = Thread.currentThread(); // race for access to the lock -- does not guarantee fairness if (thread != thisThread) { while (nestingCount != 0) { try { if(DEBUG) System.out.println("["+ thisThread.getName() + "] waiting for SVN synchronizer lock"); //$NON-NLS-1$ //$NON-NLS-2$ wait(); } catch(InterruptedException e) { // keep waiting for the lock if(DEBUG) System.out.println("["+ thisThread.getName() + "] interrupted in SVN synchronizer lock"); //$NON-NLS-1$ //$NON-NLS-2$ } } thread = thisThread; if(DEBUG) System.out.println("[" + thisThread.getName() + "] acquired SVN synchronizer lock"); //$NON-NLS-1$ //$NON-NLS-2$ } nestingCount++; } public synchronized void release() { Thread thisThread = Thread.currentThread(); Assert.isLegal(thread == thisThread, "Thread attempted to release a lock it did not own"); //$NON-NLS-1$ if (--nestingCount == 0) { if(DEBUG) System.out.println("[" + thread.getName() + "] released SVN synchronizer lock"); //$NON-NLS-1$ //$NON-NLS-2$ thread = null; notifyAll(); } } public int getNestingCount() { Thread thisThread = Thread.currentThread(); Assert.isLegal(thread == thisThread, "Thread attempted to read nesting count of a lock it did not own"); //$NON-NLS-1$ return nestingCount; } public boolean isReadOnly() { return readOnlyThreads.contains(thread); } public void addReadOnlyThread(Thread aThread) { readOnlyThreads.add(aThread); } } SVNUrlWithPegRevision.java000066400000000000000000000021061203611042400423160ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/utilpackage org.tigris.subversion.subclipse.core.util; import java.net.MalformedURLException; import java.text.ParseException; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class SVNUrlWithPegRevision { private SVNUrl url; private SVNRevision pegRevision; public SVNUrlWithPegRevision(SVNUrl url) { parse(url); } public SVNUrl getUrl() { return url; } public SVNRevision getPegRevision() { return pegRevision; } private void parse(SVNUrl url) { String urlString = url.toString(); if (!urlString.endsWith("@")) { int index = urlString.lastIndexOf("@"); if (index != -1) { String rev = urlString.substring(index + 1); try { pegRevision = SVNRevision.getRevision(rev); } catch (ParseException e) {} if (pegRevision != null) { urlString = urlString.substring(0, index); try { this.url = new SVNUrl(urlString); } catch (MalformedURLException e) { this.url = url; pegRevision = null; } return; } } } this.url = url; } } StringMatcher.java000066400000000000000000000276721203611042400407470ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/util/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.util; import java.util.Vector; /** * A string pattern matcher, suppporting * and ? wildcards. */ public class StringMatcher { protected String fPattern; protected int fLength; // pattern length protected boolean fIgnoreWildCards; protected boolean fIgnoreCase; protected boolean fHasLeadingStar; protected boolean fHasTrailingStar; protected String fSegments[]; //the given pattern is split into * separated segments /* boundary value beyond which we don't need to search in the text */ protected int fBound = 0; protected static final char fSingleWildCard = '\u0000'; public static class Position { int start; //inclusive int end; //exclusive public Position(int start, int end) { this.start = start; this.end = end; } public int getStart() { return start; } public int getEnd() { return end; } } /** * Find the first occurrence of the pattern between startend(exclusive). * @param text, the String object to search in * @param start, the starting index of the search range, inclusive * @param end, the ending index of the search range, exclusive * @return an StringMatcher.Position object that keeps the starting * (inclusive) and ending positions (exclusive) of the first occurrence of the * pattern in the specified range of the text; return null if not found or subtext * is empty (start==end). A pair of zeros is returned if pattern is empty string * Note that for pattern like "*abc*" with leading and trailing stars, position of "abc" * is returned. For a pattern like"*??*" in text "abcdf", (1,3) is returned */ public StringMatcher.Position find(String text, int start, int end) { if (fPattern == null|| text == null) throw new IllegalArgumentException(); int tlen = text.length(); if (start < 0) start = 0; if (end > tlen) end = tlen; if (end < 0 ||start >= end ) return null; if (fLength == 0) return new Position(start, start); if (fIgnoreWildCards) { int x = posIn(text, start, end); if (x < 0) return null; return new Position(x, x+fLength); } int segCount = fSegments.length; if (segCount == 0)//pattern contains only '*'(s) return new Position (start, end); int curPos = start; int matchStart = -1; int i; for (i = 0; i < segCount && curPos < end; ++i) { String current = fSegments[i]; int nextMatch = regExpPosIn(text, curPos, end, current); if (nextMatch < 0 ) return null; if(i == 0) matchStart = nextMatch; curPos = nextMatch + current.length(); } if (i < segCount) return null; return new Position(matchStart, curPos); } /** * StringMatcher constructor takes in a String object that is a simple * pattern which may contain *  for 0 and many characters and * ?  for exactly one character. * * Literal '*' and '?' characters must be escaped in the pattern * e.g., "\*" means literal "*", etc. * * Escaping any other character (including the escape character itself), * just results in that character in the pattern. * e.g., "\a" means "a" and "\\" means "\" * * If invoking the StringMatcher with string literals in Java, don't forget * escape characters are represented by "\\". * * @param aPattern the pattern to match text with * @param ignoreCase if true, case is ignored * @param ignoreWildCards if true, wild cards and their escape sequences are ignored * (everything is taken literally). */ public StringMatcher(String aPattern, boolean ignoreCase, boolean ignoreWildCards) { fIgnoreCase = ignoreCase; fIgnoreWildCards = ignoreWildCards; fLength = aPattern.length(); /* convert case */ if (fIgnoreCase) { fPattern = aPattern.toUpperCase(); } else { fPattern = aPattern; } if (fIgnoreWildCards) { parseNoWildCards(); } else { parseWildCards(); } } /** * Given the starting (inclusive) and the ending (exclusive) poisitions in the * text, determine if the given substring matches with aPattern * @return true if the specified portion of the text matches the pattern * @param String text, a String object that contains the substring to match * @param int start marks the starting position (inclusive) of the substring * @param int end marks the ending index (exclusive) of the substring */ public boolean match(String text, int start, int end) { if (null == text) throw new IllegalArgumentException(); if (start > end) return false; if (fIgnoreWildCards) return (end - start == fLength) && fPattern.regionMatches(fIgnoreCase, 0, text, start, fLength); int segCount= fSegments.length; if (segCount == 0 && (fHasLeadingStar || fHasTrailingStar)) // pattern contains only '*'(s) return true; if (start == end) return fLength == 0; if (fLength == 0) return start == end; int tlen= text.length(); if (start < 0) start= 0; if (end > tlen) end= tlen; int tCurPos= start; int bound= end - fBound; if ( bound < 0) return false; int i=0; String current= fSegments[i]; int segLength= current.length(); /* process first segment */ if (!fHasLeadingStar){ if(!regExpRegionMatches(text, start, current, 0, segLength)) { return false; } else { ++i; tCurPos= tCurPos + segLength; } } if ((fSegments.length == 1) && (!fHasLeadingStar) && (!fHasTrailingStar)) { // only one segment to match, no wildcards specified return tCurPos == end; } /* process middle segments */ while (i < segCount) { current= fSegments[i]; int currentMatch; int k= current.indexOf(fSingleWildCard); if (k < 0) { currentMatch= textPosIn(text, tCurPos, end, current); if (currentMatch < 0) return false; } else { currentMatch= regExpPosIn(text, tCurPos, end, current); if (currentMatch < 0) return false; } tCurPos= currentMatch + current.length(); i++; } /* process final segment */ if (!fHasTrailingStar && tCurPos != end) { int clen= current.length(); return regExpRegionMatches(text, end - clen, current, 0, clen); } return i == segCount ; } /** * match the given text with the pattern * @return true if matched eitherwise false * @param text, a String object */ public boolean match(String text) { return match(text, 0, text.length()); } /** * This method parses the given pattern into segments separated by wildcard '*' characters. * Since wildcards are not being used in this case, the pattern consists of a single segment. */ private void parseNoWildCards() { fSegments = new String[1]; fSegments[0] = fPattern; fBound = fLength; } /** * This method parses the given pattern into segments separated by wildcard '*' characters. * @param p, a String object that is a simple regular expression with *  and/or ?  */ private void parseWildCards() { if(fPattern.startsWith("*"))//$NON-NLS-1$ fHasLeadingStar = true; if(fPattern.endsWith("*")) {//$NON-NLS-1$ /* make sure it's not an escaped wildcard */ if (fLength > 1 && fPattern.charAt(fLength - 2) != '\\') { fHasTrailingStar = true; } } Vector temp = new Vector(); int pos = 0; StringBuffer buf = new StringBuffer(); while (pos < fLength) { char c = fPattern.charAt(pos++); switch (c) { case '\\': if (pos >= fLength) { buf.append(c); } else { char next = fPattern.charAt(pos++); /* if it's an escape sequence */ if (next == '*' || next == '?' || next == '\\') { buf.append(next); } else { /* not an escape sequence, just insert literally */ buf.append(c); buf.append(next); } } break; case '*': if (buf.length() > 0) { /* new segment */ temp.addElement(buf.toString()); fBound += buf.length(); buf.setLength(0); } break; case '?': /* append special character representing single match wildcard */ buf.append(fSingleWildCard); break; default: buf.append(c); } } /* add last buffer to segment list */ if (buf.length() > 0) { temp.addElement(buf.toString()); fBound += buf.length(); } fSegments = new String[temp.size()]; temp.copyInto(fSegments); } /** * @param text, a string which contains no wildcard * @param start, the starting index in the text for search, inclusive * @param end, the stopping point of search, exclusive * @return the starting index in the text of the pattern , or -1 if not found */ protected int posIn(String text, int start, int end) {//no wild card in pattern int max = end - fLength; if (!fIgnoreCase) { int i = text.indexOf(fPattern, start); if (i == -1 || i > max) return -1; return i; } for (int i = start; i <= max; ++i) { if (text.regionMatches(true, i, fPattern, 0, fLength)) return i; } return -1; } /** * @param text, a simple regular expression that may only contain '?'(s) * @param start, the starting index in the text for search, inclusive * @param end, the stopping point of search, exclusive * @param p, a simple regular expression that may contains '?' * @param caseIgnored, wether the pattern is not casesensitive * @return the starting index in the text of the pattern , or -1 if not found */ protected int regExpPosIn(String text, int start, int end, String p) { int plen = p.length(); int max = end - plen; for (int i = start; i <= max; ++i) { if (regExpRegionMatches(text, i, p, 0, plen)) return i; } return -1; } /** * * @return boolean * @param text, a String to match * @param start, int that indicates the starting index of match, inclusive * @param end int that indicates the ending index of match, exclusive * @param p, String, String, a simple regular expression that may contain '?' * @param ignoreCase, boolean indicating wether code>p is case sensitive */ protected boolean regExpRegionMatches(String text, int tStart, String p, int pStart, int plen) { while (plen-- > 0) { char tchar = text.charAt(tStart++); char pchar = p.charAt(pStart++); /* process wild cards */ if (!fIgnoreWildCards) { /* skip single wild cards */ if (pchar == fSingleWildCard) { continue; } } if (pchar == tchar) continue; if (fIgnoreCase) { char tc = Character.toUpperCase(tchar); if (tc == pchar) continue; } return false; } return true; } /** * @param text, the string to match * @param start, the starting index in the text for search, inclusive * @param end, the stopping point of search, exclusive * @param code>p, a string that has no wildcard * @param ignoreCase, boolean indicating wether code>p is case sensitive * @return the starting index in the text of the pattern , or -1 if not found */ protected int textPosIn(String text, int start, int end, String p) { int plen = p.length(); int max = end - plen; if (!fIgnoreCase) { int i = text.indexOf(p, start); if (i == -1 || i > max) return -1; return i; } for (int i = start; i <= max; ++i) { if (text.regionMatches(true, i, p, 0, plen)) return i; } return -1; } } Util.java000066400000000000000000000204511203611042400370760ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/src/org/tigris/subversion/subclipse/core/util/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.core.util; import java.io.ByteArrayInputStream; import java.lang.reflect.Method; import java.net.MalformedURLException; import java.net.URLDecoder; import org.eclipse.core.internal.resources.Resource; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.tigris.subversion.subclipse.core.ISVNLocalFolder; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.commands.GetLogsCommand; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.history.LogEntryChangePath; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * Unsorted static helper-methods */ @SuppressWarnings("restriction") public class Util { public static final String CURRENT_LOCAL_FOLDER = "."; //$NON-NLS-1$ public static final String SERVER_SEPARATOR = "/"; //$NON-NLS-1$ public static Method isHiddenMethod; public static boolean isHiddenUnsupported; public static Method isFilteredMethod; public static boolean isFilteredUnsupported; /** * Return the last segment of the given path *
* Do not abuse this unnecesarily ! * When there is a SVNUrl instance available use direct * {@link SVNUrl#getLastPathSegment()} * @param path * @return String */ public static String getLastSegment(String path) { int index = path.lastIndexOf(SERVER_SEPARATOR); if (index == -1) return path; else return path.substring(index + 1); } /** * Append the prefix and suffix to form a valid SVN path. *
* Do not abuse this unnecesarily ! * When there is a SVNUrl instance available use direct * {@link SVNUrl#appendPath(java.lang.String)} */ public static String appendPath(String prefix, String suffix) { if (prefix.length() == 0 || prefix.equals(CURRENT_LOCAL_FOLDER)) { return suffix; } else if (prefix.endsWith(SERVER_SEPARATOR)) { if (suffix.startsWith(SERVER_SEPARATOR)) return prefix + suffix.substring(1); else return prefix + suffix; } else if (suffix.startsWith(SERVER_SEPARATOR)) return prefix + suffix; else return prefix + SERVER_SEPARATOR + suffix; } public static void logError(String message, Throwable throwable) { SVNProviderPlugin.log(new Status(IStatus.ERROR, SVNProviderPlugin.ID, IStatus.ERROR, message, throwable)); } /** * Get the url string of the parent resource * @param svnResource * @return parent's url, null if none of parents has an url * @throws SVNException */ public static String getParentUrl(ISVNLocalResource svnResource) throws SVNException { ISVNLocalFolder parent = svnResource.getParent(); while (parent != null) { String url = parent.getStatus().getUrlString(); if (url != null) return url; parent = parent.getParent(); } return null; } public static String flattenText(String string) { StringBuffer buffer = new StringBuffer(string.length() + 20); boolean skipAdjacentLineSeparator = true; for (int i = 0; i < string.length(); i++) { char c = string.charAt(i); if (c == '\r' || c == '\n') { if (!skipAdjacentLineSeparator) buffer.append(SERVER_SEPARATOR); skipAdjacentLineSeparator = true; } else { buffer.append(c); skipAdjacentLineSeparator = false; } } return buffer.toString(); } /** * unescape UTF8/URL encoded strings * * @param s * @return */ public static String unescape(String s) { try { return URLDecoder.decode(s, "UTF-8"); } catch (Exception e) { return s; } } /** * Save local history * * @param resource * @throws CoreException */ public static void saveLocalHistory(IResource resource) throws CoreException { if (resource instanceof IFile && resource.exists()) { if (!resource.isSynchronized(IResource.DEPTH_ZERO)) resource.refreshLocal(IResource.DEPTH_ZERO, null); ((IFile)resource).appendContents(new ByteArrayInputStream(new byte[0]),IResource.KEEP_HISTORY, null); } } public static boolean isSpecialEclipseFile(IResource resource) { return resource.getName().equals(".project") || resource.getName().equals(".classpath"); } public static boolean isHidden(IResource resource) { return isHidden(resource, true); } public static boolean isHidden(IResource resource, boolean checkParents) { // If resource is excluded using resource filters, return true. if (resource instanceof Resource && !isFilteredUnsupported) { if (isFilteredMethod == null) { try { isFilteredSupported(); } catch (Exception e) { isFilteredUnsupported = true; } } if (!isFilteredUnsupported) { Resource checkResource = (Resource)resource; try { Object isFiltered = isFilteredMethod.invoke(checkResource, new Object[] {}); if (isFiltered instanceof Boolean) { if (((Boolean)isFiltered).booleanValue()) { return true; } } } catch (Exception e) {} } } // If we've previously checked for isHidden method and it is not supported, return false. if (isHiddenUnsupported) { return false; } // If we have not previously checked for isHidden method, check for it. If it is not supported, return false. if (isHiddenMethod == null) { try { isHiddenSupported(); } catch (Exception e) { isHiddenUnsupported = true; return false; } } if (checkParents) { IResource parent = resource; while (parent != null) { try { Object isHidden = isHiddenMethod.invoke(parent, new Object[] {}); if (isHidden instanceof Boolean) { if (((Boolean)isHidden).booleanValue()) { return true; } } } catch (Exception e) { return false; } parent = parent.getParent(); } } return false; } public static boolean isHiddenSupported() throws NoSuchMethodException { if (isHiddenUnsupported) { return false; } isHiddenMethod = IResource.class.getDeclaredMethod("isHidden", new Class[] {}); return (isHiddenMethod != null); } public static boolean isFilteredSupported() throws NoSuchMethodException { if (isFilteredUnsupported) { return false; } isFilteredMethod = Resource.class.getDeclaredMethod("isFiltered", new Class[] {}); return (isFilteredMethod != null); } public static SVNUrl getUrlForRevision(ISVNRemoteResource resource, SVNRevision.Number revision, IProgressMonitor pm) throws SVNException { SVNUrl url = resource.getUrl(); SVNRevision revisionStart = new SVNRevision.Number(revision.getNumber()); GetLogsCommand getLogsCommand = new GetLogsCommand(resource, SVNRevision.HEAD, revisionStart, SVNRevision.HEAD, false, 0, null, true); getLogsCommand.run(pm); ILogEntry[] logEntries = getLogsCommand.getLogEntries(); String path = resource.getRepositoryRelativePath().replaceAll("%20", " "); for (int i = logEntries.length - 1; i > -1 ; i--) { ILogEntry logEntry = logEntries[i]; if (!logEntry.getRevision().equals(revision)) { LogEntryChangePath[] changePaths = logEntry.getLogEntryChangePaths(); for (LogEntryChangePath changePath : changePaths) { if (changePath.getPath().equals(path) && changePath.getCopySrcPath() != null) { try { path = changePath.getCopySrcPath(); url = new SVNUrl(resource.getRepository().getRepositoryRoot().toString() + changePath.getCopySrcPath()); } catch (MalformedURLException e) {} } } } } return url; } } eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/subclipse.psf000066400000000000000000000014251203611042400271240ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.core/svn.gif000066400000000000000000000021011203611042400257060ustar00rootroot00000000000000GIF89a ÷„žÌÄÒ䤺Üäêô”®Ô´ÆÜÔÞìôöüŒ¦ÌÌÚì¬ÂÜìòô¼Î䤶ÔÜæôüþü„¢ÌÌÖ쬾Üäîôœ²Ô´Æäôúü”ªÔÌÖ䬺ܜ®ÔÜâ씪ÌÔÚì´ÂÜìòüÄÎääæôŒ¢Ììîô¼ÊäüúüV>¨äæe¨ç8ž åégî×|wp 8‘Õ|wÿàÿÿÒÿÿEÿÿÿm>.‘Õ|wgŽ †‚××|wZÐÞ´Ônw`ÿ<ÿ ÿÿ 8Ë ´Ôw¸¥¨bÐçÔwÉC{3~G¼çÀÖ„×Zÿ<ÿæ ÿÿ ÿ˜ÿÕÿÔÿwÞÈén C3>@ZŸ€|Hå/Ù‹‚Ô|wÛˆ‚Ú|w ¨ åP¸\bæ`l¬ÕÔw„@äZ4`æÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m=‘|Jç=ö*€‚||„ÜæíÂÿ*ÿ‚ÿ|ÿ¸bŒç¾Ž>Ø‚K|Wÿlöÿç€ÿ|ÿpˆ{æçðN¸÷ b>ç‚|pܾõú>ÕN‚w|H°IpèxOxÁ}ÿ{ÿ„ æè@P¾?>‚‚||1”t@éZ}E8ÿGÿ»ÿGÿ!ù, ÿH° Áƒ*\Ȱ¡Ã‡# @±¢Å‹/v˜ €ÃCbá £ (!\ !2äˆ H¤4A!ƒ Z^Œ“AJ tЙ±‚)!JtçSrpÐ4ãI!X¡êŲj­à#±$4°ÁÁ‚<< pm :`p áC DÔEK¸°áÈ+FÉh›8˜0¡O ¸Y!'Ñb $èZÖ¢± à$[v„ËŒ3 u€@ÖD8ÉXnŠ«uv0€õ§ÏiÛ¦ªqAØ 2pÕ‰“y!8@?p¼j‚$xLÊ€;Ó²Y/p0téŠåÙŸQ¢ýûøóë/;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/000077500000000000000000000000001203611042400242345ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/.project000066400000000000000000000010141203611042400256770ustar00rootroot00000000000000 org.tigris.subversion.subclipse.doc org.eclipse.pde.ManifestBuilder org.eclipse.pde.SchemaBuilder org.eclipse.pde.PluginNature eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/.settings/000077500000000000000000000000001203611042400261525ustar00rootroot00000000000000org.eclipse.mylar.tasklist.prefs000066400000000000000000000002231203611042400343230ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/.settings#Wed May 23 09:38:54 EDT 2007 eclipse.preferences.version=1 project.repository.kind=issuezilla project.repository.url=http\://subclipse.tigris.org eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/META-INF/000077500000000000000000000000001203611042400253745ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/META-INF/MANIFEST.MF000066400000000000000000000004141203611042400270250ustar00rootroot00000000000000Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Subclipse Documentation Bundle-SymbolicName: org.tigris.subversion.subclipse.doc; singleton:=true Bundle-Version: 1.3.0 Bundle-Vendor: tigris.org Bundle-Localization: plugin Require-Bundle: org.eclipse.help eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/build.properties000066400000000000000000000001121203611042400274430ustar00rootroot00000000000000bin.includes = META-INF/,\ html/,\ *.xml eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/dailywork.xml000066400000000000000000000013421203611042400267630ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/000077500000000000000000000000001203611042400252005ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/advanced/000077500000000000000000000000001203611042400267455ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/advanced/managing-passwords.html000066400000000000000000000033401203611042400334370ustar00rootroot00000000000000 Managing Passwords

Managing Passwords

Overview

As of release 0.9.100 Subclipse no longer allows you to store the username and password for your repository connection in the connection itself. When using the JavaHL or SVNKit adapters, you will be prompted whenever the adapter needs your username and password.

Password dialog

As the previous screen shows, you will typically be given the option to have Subversion cache your password. If using the JavaHL adapter, on Windows the password will be encrypted. See Client Credentials Caching in the Subversion book for more information. The SVNKit adapter caches all information in the Eclipse keyring which provides some degree of encryption.

The chief benefit you get by allowing the adapter to manage your password is that it will prompt you for a new password when the password has changed, and then cache that change. If Subclipse is storing your password, then the adapter will prompt you for a new password, but Subclipse will not know that this has happened and it will keep using the old password, which means you will keep getting prompted. You can update the Subclipse password by invoking the Properties dialog for the stored connection.


Reference:

Creating a Repository Location

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/advanced/wc-outside-workspace.html000066400000000000000000000053071203611042400337170ustar00rootroot00000000000000 Using a Working Copy outside the Workspace

Using a Working Copy outside the Workspace

Overview

You are already an existing SVN user and you have a working copy on your disk. You want to just use that same working copy inside the IDE so that you do not have to maintain two copies. Fortunately, this is a supported scenario. The only requirement is that your working copy has to also be a valid Eclipse project. This means that it must containg an Eclipse .project file as well as any other files like the Java .classpath file that are needed by Eclipse. If necessary, create a "dummy" project in Eclipse and copy the files Eclipse creates into your working copy folder.

Procedure

To add the existing project to your workspace use the File > Import menu option.

File Menu

This will bring up the Import dialog.

Import dialog

Select the "Existing Projects into Workspace" option and click Next

Import Project

The above dialog is from Eclipse 3.1. The dialog on Eclipse 3.0 is a little different, mainly that you can only import one project at a time. In this example, I have the entire trunk folder checked out from the repository to my disk. When I select that folder, the wizard automatically shows all of the projects it finds in that folder. You can select the ones that you want to import into your workspace and click Finish.

If you are on Eclipse 3.1, after the Import completes, SVN should automatically recognize the addition of these projects and connect the SVN Team actions to the projects. In Eclipse 3.0, you have to manually register the projects with SVN. See: Connect an Existing Project with SVN for details.

This option sounds like Eclipse is going to copy the projects into your workspace, but in actuality it only creates a pointer to the location on disk which is what we want.

Summary

This is a great option to use if you have a need to use SVN clients other than Eclipse and/or you already have an existing working copy on your disk and want to avoid the checkout process.


Reference:

Connect an Existing Project with SVN

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/book.css000066400000000000000000000020121203611042400266370ustar00rootroot00000000000000body { font-family: sans-serif; font-size: 10pt; background-color: white; color: black; } h1 { font-size: 18pt; } h2 { font-size: 16pt; } h3 { font-size: 14pt; } h4 { font-size: 12pt; } table { font-size: 10pt; } th { font-weight: bold; } kbd { font-family: monospace; font-weight: bold; } var { font-style: italic; } ol { margin-bottom: 1em; } dt { font-weight: bold; margin-top: 1em; } li { margin-top: 1em; } span.control { font-weight: bold; } span.name { font-style: italic; font-weight: bold; } span.action { font-style: italic; } span.code { font-family: monospace; } span.menu { color: #660033; font-weight: bold; } span.filefolder { font-family: monospace; } blockquote { background-color: #e8e8e8; border: 1pt black; margin: 2em; border: 1px solid black; padding: 1em; } .tasks, .reference, .faq { padding-left: 18px; font-size: 14pt; background-image:url(images/bullet14.png); background-repeat: no-repeat; background-position: left; }eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/dailywork/000077500000000000000000000000001203611042400272055ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/dailywork/branches.html000066400000000000000000000177671203611042400317020ustar00rootroot00000000000000 Maintaining branches

Maintaining branches with SVN

Like many other SCM systems, SVN has the notion of working with separate branches of the same project, meaning that different lines of development are isolated in different parts of the repository, but that it is possible to work with sets of changes, including comparing whole branches and copying changes between branches.

Typically, the 'main' line of development in a project using SVN is called the trunk, but this is not a technical requirement, it is a convention.

Unlike CVS (which supports tags/versions and branches as a direct mechanism) the support for branches and tags are a "by-product" of the SVN repository model, where copying is cheap and where the addressing of specific resources is simplified. The usual SVN repository setup groups the repository into three areas:
  • trunk - the main line of development, the leading edge, where developers usually commit their regular changes.
  • tags - a collection of snapshots of the trunk (or a branch) at a user-defined point in time, for instance release day.
  • branches - active variations of the project compared to the trunk (or even another branch). This is useful when working out a (big) change that needs to be coordinated in a team or when using a single working-copy for the work with the changeproject is not feasible.
While this convention roughly matches the equivalent CVS constructs used for tagging (versioning) and branching, the interpretation is entirely up to you (and your team), and the process of defining and setting up your repository should take this into account.

Assuming that you've set up your repository in the conventional manner, it's easier to discuss tagging, branching and merging.

Tagging

Assuming that most of the work in a project is done in the 'trunk' of the repository, you may want to "save the state" of the repository, for instance whenever you release a version of the ensuing product or otherwise reach a milestone. Obviously, you could just write down which revision number was the current one and then you could always use that information to restore the contents of the project, use it for comparison, etc. However, you can also give the tag an explicit name so that it is easier to refer to.

To compare: In the SVN command line, this is done simply by copying the repository location (like http://svn-server/bigproj/trunk/) to a new, different location (like http://svn-server/bigproj/tags/client-release-0.99/) using svn cp.

Using the Eclipse plug-in, you have this functionaliy available in Branch/Tag... found in the Team menu.

By convention, you never commit anything to a tag repository locations, they merely exist to pinpoint a specific repository revision. That being said, there is nothing which stops you from commiting to a tag (although the Create Branch/Tag dialog will warn you if the URL contains "tags"). Tags are just a convention in SVN. If you need to make a copy and work in a different direction, use a branch. That being said, the fact that you can commit to a tag folder also has some advantages, as you may have some files that contain version numbers and/or release dates that you would prefer to only update in the tag.

Branching

Creating a branch is the same as creating a tag, a basic repository copy. If you need to work on the branch directly afterwards, using the same working copy (i.e. your Eclipse project), use the 'Team > Switch' command to switch to the new location.

If you are working with a number of changes that you wish to put into a branch in one operation, be sure to clear the "create a copy on the server" check box (as explained in the command's documentation: Your local modifications will then be applied to the base revision your are copying.

Choosing to work with a branch or tag

Creating a branch or a tag does not change your working copy. Instead, you need to switch to the newly created repostory location (or a sublocation thereof).

Note: You do not need to switch an entire project, you can indeed switch at an arbitrary folder level or even an individual file, but it might make it harder to analyze outgoing changes before a commit.

Merging changes

If working on a branch requires the branch maintainer(s) to keep up with the changes being done in the trunk, these changes can be merged into the branch. This is done using 'Team > Merge', which can be used to apply the the differences between the trunk at two different revisions.

Example: Alice is working on project 'X' with two other team members, Bob and Charlie. Alice needs to do a major overhaul of the user interface, so she creates a branch called 'gui_changes' from the trunk. This is committed at revision 8. Now Alice can switch to this location and work as she wishes, being sandboxed off the main trunk, and soon after, she has committed some changes to her branch. Meanwhile, Bob and Charlie have been working on the the trunk, bringing the revision of the entire repository up to 12 (keep in mind, this revision counter is global).

To keep up with the team, Alice needs to add the changes made in the trunk to her branch. This is done by selecting the project, choosing 'Team > Merge...' from the Team context menu, and entering the proper URL for the project she wishes to switch to. If the dialog shows http://svn-server/sw-dev/branches/gui_changes/project-x/, she would have to edit that to http://svn-server/sw-dev/trunk/project-x/, enter '9' as the "from" revision, and enter '12' (or HEAD) as the "to" revision, and merge away. This brings her working copy up to date with the changes done in the trunk, which she can commit to her branch (unless there are any conflicts, which would have to be addressed first)

Note: It is a good idea to only merge changes using a 'clean' working copy (i.e. one without changes), since you may then commit the differences (and JUST the differences), documenting which revisions they were. Some SCM systems can track this automatically (working with "changesets") but not Subversion (although the feature is slated for a later release).

Applying changes from a branch

To apply changes from a branch back to trunk or vice versa, see the Merge documentation.

Backporting

Some branches are just for maintenance or release preparation and cleanup. However, sometimes a change commited to a branch can be useful to put back into the trunk. This process is called 'backporting', and is also done using merge, just with the roles reversed, applying changes between two specific branch revisions into the trunk.

Related Tasks

None

Related Reference

Team > Configure Branches/Tags...
Team > Branch/Tag...
Team > Switch...
Team > Merge...
Team > Commit...
Team > Edit conflicts
Team > Mark Resolved

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/dailywork/diffing.html000066400000000000000000000023631203611042400315050ustar00rootroot00000000000000 Comparing, QuickDiff and restoring

Comparing, QuickDiff and Restoring

Often, you want to see what actual changes you have done. To do this, you can use the "Compare With" and QuickDiff functions.

Setting the QuickDiff provider

It's as easy as right-clicking in the QuickDiff marker line to the immediate left of Eclipse's text editor(s).

Activating the pristine SVN resource version as the QuickDiff reference

Now, you can just hover the mouse over the QuickDiff marker line to see what was changed locally.

To set this permanently, you may use the Window > Preferences > Workbench > Editors > QuickDiff page, where you can select the "Pristine SVN Copy" in the QuickDiff reference list box:

Use this preference setting to permanently set the QuickDiff reference

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/dailywork/patches.html000066400000000000000000000044351203611042400315300ustar00rootroot00000000000000 Creating and applying patches

Creating and applying patches

Overview

Often, when work on a project is shared between many developers, you need to work with, review and mabye transfer changes that haven't been committed yet. To help with with process, SVN provides the functionality to create a patch, which works with Eclipse's built-in ability to apply a patch.

Patches are representations of changes to a given version of the repository state, and can easily be transferred to other developers; for example, when one developer (who doesn't have commit access) needs to submit a change to someone who can then review and commit it.

Creating a patch

Select your project or a folder/file and take the Team > Create patch... option. Save the patch to a file and distribute the file via email or whatever mechanism is appropriate.

To have new files included in your patch you must use the Team > Add to Version Control option prior to creating the patch. This will tell SVN to include it in the patch.

Applying a patch

Select the project or a folder/file and take the Team > Apply patch... option. This will walk you through a wizard that lets you specify the patch location and then apply it to your working copy.

Related Tasks

None

Related Reference

Team > Create patch...
Team > Apply patch...

Working with patches (Eclipse Documentation)

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/dailywork/synchronize.html000066400000000000000000000023721203611042400324520ustar00rootroot00000000000000 Using the synchronize view

Using the synchronize view

Overview

The synchronize view is useful if you want to see the overall status of your working copy against the state of the repository, including any updates. The view focuses on inbound and outbound changes, where inbound changes are the changes that others have committed and are coming in to your working copy when synchronizing. The outbound changes are the ones you did to your repository as a result of editing, removing or adding resources.

In short, the synchronize view offers a different way of updating and commiting your work, and does so in a manner which may be more familar to you as an Eclipse user.

Related Tasks

None

Related Reference

Team > Synchronize

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/dailywork/workcycle.html000066400000000000000000000116251203611042400321020ustar00rootroot00000000000000 Edit, Update, Commit

Typical work cycle: Edit, Update, Commit

Often with SVN (and most other SCM systems), once you have checked out your project, or shared it, you work in a simple cycle:

  1. Edit
  2. Update
  3. Commit

The SVN plug-in for Eclipse makes working with this cycle easy by combining the Team features in Eclipse with the special features in SVN.

Editing your working copy

When editing your working copy, you can observe the markings on the resource (i.e. file, folder, etc.) found in the Navigator view (and views that are based on the same information, like the Java Development Tools' Package Explorer.)

Eclipse will catch your changes and refactorings, as long as you use Eclipse to work with your working copy. You may contrast this with working with the SVN command line tool which needs to perform about every rename, delete and move operation that you want in the working copy. The SVN plug-in for Eclipse does this for you.

One exception from this is adding resources: The new file(s) or folder(s) you create must be added to your working copy, using the command Add to Source Control found in the "Team" menu available in the context menu for the added resource(s). If you do not do this, the SVN plug-in will display a question mark (?) next to the resource, meaning that an unknown file is present in your working copy. Once added however, the resource is marked with an asterisk (*)

Eventually, when you commit your changes, this marking will disappear. If you forget to add a resource, it will still be presented in the commit dialog, but will be de-selected by default.

To ensure exclusive access when editing a file, you may lock it if your repository is based on SVN 1.2 or later.

Updating your working copy with other people's committed changes

While your are working, editing, debugging, etc., others (if you are working in a team) may commit changes to the project. To keep up, you have to update whenever you are ready to do so, e.g. when your changes are stable. You should also always update immediately before your commit your work.

Should an update concern one of the resources that you had modified, SVN will try to merge those changes. This will work if your changes do not overlap the changes made in the repository, but in case of a conflicting change, the affected resources in your working copy are marked as being conflicted, and some text markings are placed, citing the differences between the repository and your changes. These conflicts can be mended manually, or by using the Edit conflicts command found in the Team menu. If you resolve the changes by editing the text, you need to mark the conflict as resolved.

In extreme cases it may be simpler to revert your own changes and start over.

Committing your changes to the repository

Once you are pleased with all your changes, it is time to commit them to the repository. SVN will never let you commit changes that are out-of-sync, and will force you to update in the event of a collision, but this only covers the cases when the affected resources require updating. However, if a dependent resource (for instance, a program file which is required by your change) is updated, this will not be detected when committing. This is why you need to update first and review your change.

Related Tasks

None

Related Reference

Team > Update
Team > Commit
Team > Add to Version Control
Team > Edit conflicts
Team > Revert
Team > Mark Resolved

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/faq/000077500000000000000000000000001203611042400257475ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/faq/faq.html000066400000000000000000000476351203611042400274230ustar00rootroot00000000000000 FAQ

FAQ


General questions:

Why does this project exist?

Subclipse exists to provide an outstanding user interface to Subversion from within the Eclipse IDE. We aim to provide a client that is every bit as robust and user-friendly as the CVS client that comes with Eclipse. That being said, there are a lot of major technical differences between Subversion and CVS. Therefore, we try to strike a balance between providing a UI that will be familiar to experienced Eclipse CVS users, and one that is appropriate for the Subversion action being exposed. In particular, the way that Subversion handles branches and tags is very, very different from CVS. Consequently the UI for these features in Subclipse is different than the UI for the CVS client.

Does Subclipse support Eclipse X.Y or Websphere Studio X.Y?

Subclipse should support any IDE or application that is built on the Eclipse framework. The Subclipse feature has the appropriate <requires> tags to define the Eclipse features that we require. The current version of Subclipse supports Eclipse 3.x. There is an older version of Subclipse that supports Eclipse 2.x and applications that are based on it, such as WebSphere Studio 5.x. That version of Subclipse is no longer supported or actively developed.

What is an adapter? What is JavaHL?

Unlike CVS, which does not have an official API, Subversion was designed from the start to be an API. Subversion is written (in C) as a set of libraries. Subversion then provides a default UI, in the form of a command line interface, that uses these libraries. Subversion also provides language bindings for various programing languages so that these same libraries can be used in your language of choice. JavaHL is the name of the Java language binding provided by the Subversion project. JavaHL is an official part of the Subversion project, not the Subclipse project.

svnClientAdapter is a Java project that was developed for Subclipse. It provides an even higher level of abstraction to the Subversion libraries. It also allows for different ways of accessing Subversion functionality. Historically, the two options were to use the JavaHL library or the Subversion command line. Recently, a third option was added and that is to use the SVNKit library which is a 100% Pure Java implementation of the protocols used by Subversion. This option has the advantage of not requiring any native libraries installed on the client. Of course, since SVNKit does not utilize the Subversion libraries it does not have the guaranteed compatability that you can expect from JavaHL or the command line adapters. That being said, SVNKit is tested against the same test suite that tests the Subversion command line, and passes those tests.

SVNKit does not currently support the file:// protocol but there are plans to add support for accessing fsfs repositories in the future.

Which adapter should I use?

If the JavaHL library is available on your system, or easily attainable, then it is probably the best choice. That being said, SVNKit is a great option and offers a number of significant features that JavaHL does not currently offer. JavaHL is currently your only option if you have to use file:// protocol. In that scenario, you should really consider running a local svnserve instance and using the svn:// protocol.

Usernames and passwords

When you define a repository connection to Subclipse there is an area to specify your username and password. Since version 0.9.30 of Subclipse the best thing to do is always leave these fields empty. The exception is if you are using the command line adapter. As of version 0.9.100 the dialogs no longer show the username and password fields. Why should you leave them blank? Because the JavaHL and SVNKit adapters are intelligent enough to prompt you for this information when they need to. You can also then allow the adapter to cache this information. The adapters are also intelligent enough to prompt you when the password has changed. Conversely, if you specify a username and password within Subclipse then we supply that username and password to the adapter. If the password has changed on the server, then the adapter will prompt you for a new one. Now we get to the problem. Subclipse does not know that this exchange took place so it has no way to update its password. Consequently you keep getting prompted by the adapter for your password.

If you just leave these fields blank within Subclipse, then you never have to worry about it. If you do provide a username and password to Subclipse, and your password changes, you can update the stored values by right-clicking on the connection in the SVN Repository view and choosing the Properties option.

How-to:

How do I check out the Subclipse code?

The URL for the Subclipse repository is http://subclipse.tigris.org/svn/subclipse/. If you have at least the Observer role in the Subclipse project, then provide your tigris.org username and password when prompted. Otherwise use a value of "guest" for each. Subclipse development is currently active on trunk.

How do I create a repository? How do I import data into it?

Subclipse does not provide anything that allows you to create a Subversion repository. That action has to be performed outside of Eclipse. Within Subclipse, you define a "connection" to an already existing repository. Defining a connection is one of the first things you should do when using Subclipse. This is done from the Subclipse Repository Exploring perspective.

As for importing data, there are numerous ways it can be done, including doing it from outside of Eclipse. Assuming you have an existing project in your Eclipse workspace that you want to add to your repository, you need to right-click on the project and do Team -> Share Project. Then follow the wizard.

How do I convert an existing CVS repository into a Subversion repository?

Members of the Subversion development community created and maintain a tool called cvs2svn. You can find it at http://cvs2svn.tigris.org/. Be sure to read the cvs2svn documentation.

If cvs2svn.py does not work for you, (e.g. your repository causes it to crash, or it doesn't deal with branches and tags quite how you would like), there are at least two other conversion utilities you can try. These have different features (and possibly different bugs):

See also the Subversion links page.

How do I configure an HTTP proxy connection?

If you are using the JavaHL or command-line client adapter then all communication with your repository is performed by the Subversion libraries. Consequently, the configuration is the same as what you would do for the Subversion command line. See: http://svnbook.red-bean.com/en/1.1/ch07.html#svn-ch-7-sect-1 for more information.

If you are using the SVNKit command-line client adapter then see: http://svnkit.com/kb/user-guide-config-settings.html for more information.

How do I specify SSL client certificates?

If you are using the JavaHL or SVNKit adapters, then, at least in theory, you should be prompted when/if you need to supply the server with a client certificate. Just as you are when using the command-line. As of the writing of this FAQ entry, at least JavaHL has not implemented this prompting. Consequently, you need to store your client certificate in the Subversion configuration area. See: http://svnbook.red-bean.com/en/1.1/ch07.html#svn-ch-7-sect-1 for more information.

How do I configure an svn+ssh:// connection?

If you are using the JavaHL or command-line client adapter then all communication with your repository is performed by the Subversion libraries. Consequently, the configuration is the same as what you would do for the Subversion command line. See: http://svnbook.red-bean.com/en/1.1/ch07.html#svn-ch-7-sect-1 for more information. For Windows users, here is a great explanation of how to set this up from our mailing list archives: Configuring svn+ssh:// on Windows.

As of Subclipse 0.9.35 if you are using the SVNKit client adapter you should be dynamically prompted for your SSH username, password, keyfile, port etc... When defining the repository connection in Subclipse, simply specify the URL like svn+ssh://hostname/repos. Do not include your username in the URL and do not provide a username and password in the connection dialog. At runtime, SVNKit will prompt you for your SSH credentials and optionally cache them in the Eclipse keyring. If you are not prompted for your credentials, it may be because you have previously attempted to manually configure SVNKit. If so, then you should "undo" all of that manual configuration. The older manual configuration is documented at: http://svnkit.com/kb/user-guide-config-settings.html.

Troubleshooting:

How do I get the JavaHL library for my operating system?

Windows: JavaHL is included as part of Subclipse. You do not need to do anything.

OS X: We recommend that you install the Metissian Subversion package. This package includes JavaHL and installs everything in a way that it is recognized by Subclipse. Download the package at http://metissian.com/projects/macosx/subversion/.

Linux: The answer varies by distribution and the packaging mechanism. In general most distributions do NOT include the JavaHL library in their Subversion package. In most cases, you can download the source package and alter the build spec to build JavaHL.

There are Debian packages available for Subversion with JavaHL enabled. The packages are provided by http://www.ggtools.net/. Here is the sources.list entry:

deb http://www.ggtools.net/files/debian/unstable/ ./

There are also binary RPM packages for SUSE available. The main Subversion RPM package includes JavaHL by default. These can be obtained at http://ftp.suse.com/pub/projects/apache/subversion/.

Others: If your packaging mechanism does not include the JavaHL library, then you probably need to build the library from source.

How do I build JavaHL from source?

JavaHL is part of the Subversion project. So to begin, you probably want to download the latest source tarball. See: http://subversion.tigris.org/project_packages.html. You should refer to the Subversion instructions for detailed information, but on a *nix system the general procedure is this:

./configure --your-other-flags=here --enable-javahl --with-jdk=$JAVA_HOME\
     --with-jikes=$JAVA_HOME/bin/javac
make
make javahl
make install
make install-javahl

The main part to check before running the above command is "--your-other-flags". You will typically at least want --enable-ssl.

I think I have a valid JavaHL library installed, but Subclipse says it is not found. What should I do?

Starting with Subclipse 0.9.33 we now show the errors that occurred when loading the JavaHL library. To see these errors open the Eclipse preferences and go to Team -> SVN. Then click on JavaHL in the adapter section, the error messages should appear in a dialog.

On *nix systems the problem is almost always that the JavaHL library was not found in the java.library.path. The Sun JVM only looks in the value of LD_LIBRARY_PATH, and on many *nix systems this value is not defined. The easiest workaround is to create a shell script that launches Eclipse:

export LD_LIBRARY_PATH=/usr/local/lib:.
./eclipse

Alternatively, you can also do something like this in your script:

./eclipse -vmargs -Djava.library.path=/usr/local/lib

Why am I getting an error dialog telling me the case of my Eclipse workspace path does not match the filesystem? Windows does not seem to care.

The underlying problem here is in Eclipse, see Bug#: 95832. Eclipse does not canonicalize the workspace path to match the case of the underlying OS. That alone would not be a problem, but Eclipse also has code which relies on an exact string match when converting a path represented as a String to an Eclipse resource. When Subclipse calls Subversion API's, Subversion naturally passes back paths in their exact case from the file system. Subclipse then has to take those Strings and convert them to an Eclipse IResource. The Eclipse code to do this fails if the case of the string does not match exactly with the value that Eclipse has stored for the workspace.

This problem was causing a lot of problems for Subclipse users and it took a long time before the underlying cause was discovered. See Subclipse issue# 285 and all of the duplicates. Since we cannot fix the Eclipse problem and this problem is so hard for a user to self-diagnose, we added in our own check which displays a warning dialog when we detect this situation exists. The validation code looks like this:

 public static boolean validateWorkspacePath() {
    File file = ResourcesPlugin.getWorkspace().getRoot().getLocation().toFile();
    String canonicalPath = null;
    try {
       canonicalPath = file.getCanonicalPath();
    } catch (IOException e) {
        e.printStackTrace();
    }
    if (!file.getAbsolutePath().equals(canonicalPath)) {
        MessageDialog.openError(Display.getCurrent().getActiveShell(), Policy.bind("WorkspacePathValidator.title"),
         Policy.bind("WorkspacePathValidator.eclipsePath") + "\n\n"  + file.getAbsolutePath() + 
         "\n\n" + Policy.bind("WorkspacePathValidator.fileSystemPath") + "\n\n" + canonicalPath +
         "\n\n" + Policy.bind("WorkspacePathValidator.instructions"));
        return false;
    }
    return true;
 }

NOTE: We recently discovered that this basic issue was causing another problem users were seeing. In this case it happens when you use File -> Import to import a project and you do not specify the correct case when importing. This leads to the same null resource problem. In this scenario, we are now logging a very detailed error in the SVN Console and Eclipse error log. It also points to this FAQ. In recreating the problem it appeared that the SVNKit adapter did not have the problem. Possibly because it is using the same Java API's as Eclipse the case does not get canonicalized as it does when using the JavaHL native C libraries. Other than switching to SVNKit, the way to solve the problem in this scenario would be to delete the project from the workspace and re-import it. Use the Eclipse file chooser to select the project so that the case matches the OS.

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/faq/subversion-mapping.html000066400000000000000000000247231203611042400324750ustar00rootroot00000000000000 SVN Plug-in Quick Reference

SVN plug-in for Eclipse

Quick reference for command line users

svn command SVN plug-in Feature Explanation
add Team > Add to Version Control Just as with the command line, you need to add a resource to SVN after you create it.
blame (praise, annotate, ann) SVN Annotate View
lock Team > Lock
unlock Team > Unlock
cat SVN Repository View
checkout (co) SVN Repository View
cleanup Team > Cleanup
commit (ci) Team > Commit
copy (cp) Team > Branch/Tag, Team > Copy
delete (del, remove, rm) Refactoring support, SVN Repository View When you remove a file, the SVN plug-in refactoring hook ensures that the resource is scheduled for deletion within SVN. Also, in the Repository view, you can delete resources directly, without having them checked out.
diff (di) Compare menu, and Team > Generate Patch.
export Team > Export  
import Team > Share..., Importing a project This doesn't work quite like with the command line, as you cannot perform the import operation in one single revision; rather the import is performed by creating the existing Eclipse project in a SVN repository and then scheduling all the project contents for addition.
info SVN Properties Page, Properties, SVN Repository View The information is found on the resource's property page (right click on a controlled resource inside a project), and also from the repository view.
list (ls) SVN Repository View Not all details are shown.
log History View
merge Merge
mkdir SVN Repository View From a repository node, you can right-click and choose New > New Remote Folder
move (mv, rename, ren) SVN Repository view Support for moving and renaming have been integrated directly into the Eclipse workbench and refactoring operations. You can also move and rename resources directly in the Repository view without having them checked out.
propdel, propedit, propget, proplist, propset SVN Properties View
Team > Add to svn:ignore

Team > Set Property.
resolved Team > Mark Resolved Use this after you resolve merge conflicts
revert Team > Revert This also works if you select several resources. But be careful, as it will work recursively on folders.
status (stat, st) Team Synchronizing Perspective File status is also shown as an icon overlay (decorator) and text annotation.
switch (sw) Team > Switch A switch cannot happen above the project level, since that would be outside of the Eclipse workspace.
sw --relocate Relocate, SVN Repository View This option is enabled in the SVN Repository view. Right-click on a repository location to relocate the URL and update the attached projects in your workspace.
update (up) Team > Update
Console output SVN Console The output from the SVN commands (or the JNI calls) are displayed here.
eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/faq/tips-and-tricks.html000066400000000000000000000016631203611042400316570ustar00rootroot00000000000000 Tips and Tricks

Tips and Tricks

Here is a collection of tips and tricks on getting the most out of the SVN plug-in. Remember, Subclipse is an open-source project so please contribute your own tips! See: http://subclipse.tigris.org/mailing-list-guidelines.html for information on sending patches.

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/gettingstarted/000077500000000000000000000000001203611042400302305ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/gettingstarted/checkout.html000066400000000000000000000054161203611042400327310ustar00rootroot00000000000000 Checkout

Checkout

Overview

Check out is the term used to describe the process of making a copy of a project from a repository into your local workspace. In SVN, the check out process creates a working copy. A working copy is a specially formatted folder structure which contains additional .svn folders that store SVN information, as well as a pristine copy of each item that is checked out.

Process

To checkout directly against your repository, navigate to the SVN Repository Exploring Perspective. If you have not yet defined a connection to your repository, you will need to add a new repository location.

Select the desired repository directory and choose Checkout from the context menu.

If an Eclipse .project file already exists in the selected repository folder, the check out wizard will automatically default the method of checkout and using the project definition file. If no .project file exists in the selected repository location, the wizard will give you the option of checking out the folder as a regular Eclipse project or launching the New Project Wizard.

The next step allows you to identify where the working copy should be created. The default option is to create the working copy in your Eclispe workspace. To select an alternative location, uncheck the use default workspace location option and type or Browse for a new target location.

Related Tasks

None

Related Reference

SVN Repository Exploring Perspective
Creating a Repository Location

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/gettingstarted/importing.html000066400000000000000000000110771203611042400331340ustar00rootroot00000000000000 Import a new Project into a SVN Repository

Import a new Project into a SVN Repository

Overview

This is the process for taking a new project in your Eclipse workspace and importing it into a repository so that it can be managed by SVN. If you have already been using SVN and you have an existing working copy in your workspace that you want to connect to SVN, then you will likely want to follow the procedure for Connecting an Existing Project.

Procedure

If you do not yet have your project ready to import into the repository, create a simple project that contains a few files so that they can be stored in the repository. A simple way to achieve this is to create a sample plug-in project by selecting File > New > Project... and Plug-in Development > Plug-in Project. Give the project a name and click through to finish on the wizard.

To import a project into the repository, right click the project you want to import and select Team > Share Project... from the context menu.

This will begin the Share Project wizard. Select SVN as the repository type and click Next.

Select Project

If you have already defined the repository location you want to store this project in, then select it in the list and click Next. Otherwise, select the Create a new repository location option and click Next. If you need to create a location then see the section on creating a new repository location for more information.

You must specify the folder name where you want to store the project. The folder name is relative to the URL of the repository location you specified in the previous step. All intermediate folders must already exist in the repository, but the final folder name must not already exist. You can use the Browse... button to select a path from within the repository. The Browse dialog also allows you to create folders, so you could use that option to create any intermediate folders. In the above example, we are going to follow the convention of storing the project in a ProjectName/trunk structure. In this example, the ProjectName folder must already exist and the trunk folder must not exist. Click Next or Finish when you are through.

The final page of the wizard is just a final confirmation page. When you click Finish, SVN will issue the mkdir command to create an empty folder in the repository. It will then checkout that folder on top of your local project. This will create the .svn folder inside your project, converting it into a valid Working Copy. Finally, the wizard will bring up the Commit Dialog so that you can commit everything into the repository. You do not have to commit everything or even anything. You may want to cancel the commit dialog and then go back to your workspace and do everything from the Team menu. For example, if you wanted to set SVN properties as part of the commit, you would want to first use the Team > Add to Version Control option and then use the Team > Set Property option etc. Once you have things the way you want them you can then perform a Team > Commit.

Related Tasks

None

Related Reference

Connecting an Existing Project
Creating a Repository Location

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/gettingstarted/new-location.html000066400000000000000000000050731203611042400335220ustar00rootroot00000000000000 Creating a new Repository Location

Creating a new Repository Location

Overview

Before you can begin working with a SVN repository, you must define that repository location to your Eclipse IDE.

Procedure

You create and work with your repository locations from the SVN Repository View, which is part of the SVN Repository Exploring Perspective. To create a new repository location, click the Add SVN Repository button or right clicking inside the view and selecting New > Repository Location...

The Add SVN Repository dialog will prompt you for a repository location URL. Enter the URL of the repository you want to connect to. No authentication information is requested at the time the location is defined; it is left to SVN to request your user and password information when it is needed. The main benefit of allowing SVN to manage your password in this way is that it will prompt you for a new password when your password changes. Furthermore, it will also cache and encrypt the new password.

Once you click finish, the wizard will create the location. Expand the location to see the contents for the given URL.

Related Tasks

None

Related Reference

SVN Repository Exploring Perspective
SVN Repository View

Related FAQ

How do I configure an HTTP proxy connection?
How do I specify SSL client certificates?
How do I configure an svn+ssh:// connection?

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/gettingstarted/settingup.html000066400000000000000000000020721203611042400331410ustar00rootroot00000000000000 Setting up a SVN Repository

Setting up a SVN Repository

If you don't already have a SVN Repository set up you will need to create one using the svnadmin command. Creating a Repository and setting up network access is outside the scope of the Eclipse plug-in. For the purposes of this tutorial it is assumed that you already have a repository that you can access.

Check out the book Version Control with Subversion for more details on setting up HTTP and other types of repository access. The book is also available in print.

Related Tasks

None

Related Reference

None

 

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/gettingstarted/share-existing.html000066400000000000000000000052241203611042400340530ustar00rootroot00000000000000 Connect an Existing Project with SVN

Connect an Existing Project with SVN

Overview

This is the process for taking an existing working copy that exists in your workspace and connecting it to SVN. If you have a brand new project that you want to import into your repository, then see the section on Importing a new Project into a SVN Repository.

Procedure

This procedure assumes that you have an existing project in your workspace and that project is already a valid working copy.

Select the project you want to connect with SVN and right click to select Team > Share Project...

This will begin the Share Project wizard. Select SVN as the repository type and click Next.

The wizard will check for valid .svn metadata folders in the root of the project you originally selected to share. If it finds those folders, then you will see a screen like the one above. If you do not see this screen, and instead see the screen that you would see when this is a new project, then you should cancel the wizard. This would mean that the wizard did not recognize this as an existing working copy. If you continue, the wizard will treat this like a new project to import into your repository. Otherwise, assuming that you do see the above screen, just click Finish to connect the project with SVN. The wizard will complete the process by launching the commit dialog to commit any locally modified files. You can cancel the dialog if you do not want to commit anything at this time.

Related Tasks

None

Related Reference

Import a New Project into a SVN Repository
Using a Working Copy outside the Eclipse Workspace
Creating a Repository Location

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/000077500000000000000000000000001203611042400264455ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/add-repos-wizard.jpg000066400000000000000000001244521203611042400323330ustar00rootroot00000000000000ÿØÿàJFIF``ÿþLEAD Technologies Inc. V1.01ÿÛ„    $.' "+"(6(+/1343&8<82<.231  1!!11111111111111111111111111111111111111111111111111ÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀŸ¶ÿÚ ?ô »Û-V1{«$·©9ó-í +1ó´•È<žz8â·Qka6hô/ÛÿãßãUiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p#‘ü=‹ü#Ñ<Œ TŽ9ˆõÂä㚉ÉSø¥cJt§Rü«aÛt_úæÿÀ)ÿ²úÅ?ç4úµO/½˜ÇDWí0+»¤·š1Ï[ª5¡'e!<5E+h»4ÿ&jEâ;O F³n»—K”ykmþ±íä`)f&ÐxíŒs›plÀÍÓb'K³lqöxÿôWpJîÅoNÖðGý˜ÁÜýîTâºiS¿Æ”ˆ©áËû»é%·½¶òÞ1¹\c ? U ¡¬HRL—Ěſ‡ã³{”Ü.®Vƒ õsì5Ì¥y¨wþ¿6—̧¤»uBËG¶2ß][[’¬cY¥XüÂp3×ÿ¯S:œ©¾½ŠŒnÊQx‚Å|;iªßKmeö¸<èâšu]ÇÚ Æ*ª²öwêíriûþJö$ƒW¼&šüÖì‘_´´Hw6çñŸÒвöKîüBŸ¿øþ)uÛëM*=N÷L¶['06 Ï0à·Üw*}zñTï¨>®ßå÷½âä»_úþº ®ø‘t™u YáÓ£…æu|Ò>Рc“·æëè;æ³U;í{~v…5Û³wùê[µÖ!»Ö­¬mQe†æÈÞ%Àn£p\mÇ¿¯áWwÍ%ÚßÿÈ—¢O»kî+ë:ÕÝŽ­=…¦ É·±7®Ò\˜‰PÄP²xî@¬ý¥”¤ö¯ù–£v’Ýßôÿ2ìZƘÖ67SÞ[Ú-ôk$ q*ÆÎÉät­^’äêfãÍÐ’mSI‚óìsjv1]n ä=ÂÉè6“œœŠ•+èŠ~[»oc²–òÚ;¹R•DŒ=—9=åMJîÈŠì­s«é­Ú¥ý‹ÜZ#4›”R¸ã “òò@É隉NÑrZ-Rz,|K§O¨Zi³Ë ×6Éq°NŽ€¶0Áù›œŒG5¥ï)Etþ¿¤ÞÉ7ÔÒŠÿM•®+û7k@LáfRa®î~\`õô©çV澃³¿/Q¶Ú–—u8‚×Q²šbp#Žuf'è§4î+ÿ^»mÌ7ͼ±J#sì`ÛXuSŽ„zPž—‘/ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸zŒ­g®6ß”›xÏþ<õæâþ$}WÑ’}ÿDk›mU…±Ðä}^ÖèìŽiv£ÀøË,û@H`:q‚vïËÙ)YÃcj¨óFº÷—n¦?‰æH-îm¡ÔdÔÄÁædTMä|Â0£îzd“þÑàÔIEJÑ= $&©óTVoòÆÑ˜ôTãí ÿ ½{iê|™×hyŸÃÚ{c­cçþ+&ìÆ´w8Ÿx/ÄÆg}ÚÞéýÖXƒÅú×£KNÖ–‚©Ýâi|8ð>©¤y÷Úè¶[¹—bÅH<µÎNY@É8ÜVŒDgîÇbc ñg‚õø†eO"ÖÆ‚."óD'ße à©(ûñ\v“êío–¿Ÿäm{rÛ¥ßéo»ó3­tÚÍþ¡¢Í{,ºOØ ’#$2«›æ` ¸ äxäUU|ñ¨–ó³ôÓU÷“Mr8v‹ûõÑýÚé~×´ˆ¬î&ѧ½ß¢‹Ž̶”NC0Nz‚~ïN”ë{ʤWÚµŸÊÖû—ºàßÙoOW{þ‡Uá­÷Oð¥µÎœf¼·³ØÖlÊ<Æ ™?/=3Ò´­$Þš­?à‘I8羚ó1tÉ4úÕ²é×ZF‰¨[ì3º±INwHY•G#€zŽ€Y8·IÆúßO+ÁÔ´ùj)[×ÏúEUðFº>_Û\Àn5˹ã’UÞ¿6Ç@0IÆ =}kNeÍM®Žïç«ÿ/‘ 6æ^M/ºËüþf®Ÿà«Ý;âÔà´»‹I—Àû<¬êÌë† ·±ÏLŒÍ?uI?+zk§ÊúyYt*§½Ê×}~ë_úõ+ø·Àº†·â{™!3[[ˤùÜG)UóD…¶:ƒ–R Œ`úÖjéMõºitvEiî¯_U{Xɼð§ˆ/.žâ}*öÚý=,æ¶´{m°2’ ’á±pdÉ™ÅhÒ”¤›ÒM?ø~·_sn<¶û)¯ëÉ *ñ®ü_áí?L¹Ôaon³»G²/ܨß&N쎿*žE-jÓíïÉßæŸõù„mJkü+õ-^x/]Š CJû ÝBæÞxõ0é¶7nîÜ6`½ÔsW^q{ZN_'¯ßÐŽ[EùÅ/žßðI“Âú캥ž›¦]ç\Áw˜®žO5þé…ÁÜ¡º•lŸZÁ¦è¸y+wôôüM“J¬eç¯o_Qt¯ kvšDòi÷_C]:f…µ¬¡¾óà gªç¥kWßub¾ÖÏäÑ”=Åú7øØ¦<¯\iövCGkIt½*êѤ2&ÛÇtÚ¡o»‘»-ŽON¦¦£çæ’Òê*ÞŽïî±p÷%úI»ýÿÿWĚƓð÷OÔ¡µXµ- !œGŒd¨ èqê ºóµ^xw·ÊZ—ÜE(ÞŸ$»_æµÿ?¼è|á×Ó|3gÊ~Ðêeœž¦G;˜þdÕÎд#²Ñ 7+Éîõ6ÿ³O÷k;ŽÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»G0X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓýÚ9‚Áýš»G0X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓéEÂÇãÅk?…@ D €Nù+‹¬‘ôyV”enÿ¢,Å®iÚbËKŠ-N)‡üLn."ÇÛŸº€1Àç¾s–-<êGa¬ëÞuÝŸO/ëú×lý†™4›™&²’-ñ‰ABH9‰ûØã “prAcœ”y¯³í”«ºüN§âm¯Ùô(1ºåô¯ZSãÍïê÷k¦ÙØXiotÖÖVîìãÈûÌ=åPâ·lfŸö޵ÿBüŸ÷ú/þ.•—q‡ö޵ÿBüŸ÷ú/þ.‹.àÚ:×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»^¿·»žî ˆ®.1çH’BL ß?$2hI%Êž€÷¹cûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜ ×ÿmÔ!}áaqäÈ%‹Ì’cqÑ”ïàûŠIÝ=C¥‹"ÿYPðü€EÿÅÑeÜAý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý£­п'ýÿ‹ÿ‹¢Ë¸ÃûGZÿ¡~OûÿÿE—píkþ…ù?ïü_ü]]À?´u¯úäÿ¿ññtYwþÑÖ¿è_“þÿÅÿÅÑeÜûGZÿ¡~OûÿÿE—píkþ…ù?ïü_ü]]À?´u¯úäÿ¿ññtYwþÑÖ¿è_“þÿÅÿÅÑeÜûGZÿ¡~OûÿÿE—qö޵ÿBüŸ÷ú/þ.‹.àÚ:×ý òßè¿øº,»€hë_ô/Éÿ¢ÿâè²îý£­п'ýþ‹ÿ‹¢Ë¸ö޵ÿBüŸ÷ú/þ.‹.à#jzÂõÐ$öÚ/þ.ŽUÜwÄú4ž"ž)ï4[Ø'‰v -îaRW9ÁË2M)SŒºT1U0÷åØÅ>Œu´Öð.Þ§êñîtÿjUì¿óÛA:I.ªÎ¨A1KuVö8ÁÅ5B)ÞäO2«(¸è½ 5vÕ4’Úµ´¶—±£) ýèÝ»:b¶ŒyYçÜè~ÿÇÌÿö Óÿô[TOüÁf0 € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € d²G eåu«1À2”`¯'d8ÅÉÚ(¤úÍšýÆ’OtˆüñŠóçšaaöŽ……©×OšºÔ¤õØ?Ç5ŠÎp·µßÜ %Õ ºÝŽà¯+BOüôB£óé[ÓÌð³ÑJÞ ðµz+ú–DxÃÆÊÊ݃^„Z’ºØæiÅÙ;U¡äj´"¼T‰+»U$#ñ§üxê¿ö·ÿÒv§Ô¥±×ü?ÿ™ÿì§ÿ趬gþe#‡ø¿¯ë:ŸŠ§Ñ<5¨jÖ#D±k©¤ÓbÌ· ƒOå´g-Ç'=+š2kš¯HÙ.Û«·ÓE»Íš¸¯vŸó}ö³KÏ}ü¬miŸïüG'…tÿ­œ7:Åœ—7wQ4©– ²ª+¡'x<ä zÖ˜ˆ«ÔKáQæûÝ’ùuܵ8·»vû•ïóZ£˜øIâ]Rß@ðÏ…´E´Šâûí—3]]ÄÒ¤q¤€¨®¤’G÷¸´ëûðk¤i§÷¶‹Ÿ¹Rmîæ×Ü“gaû?:ÅðªÍäuUIn 3’}]wjqkùzüÂÍÖ¨ºó~ˆ«¢üFÔfñf¦Mq§j–zǸ³Óîm’9#>\’1Y— Œ®;:MsIÇÊë§Þ·Z £å\Ñïo¿ÏoëîÜñ¯‰µ3ÅþÐtQ`ŸÛã|×q<ž_–]}øþU3¼ÿ»þ?צúìT­)y¥÷œ–“ñwSÕ¬|;V[jŸÚæd±¸¼Ž5ˆ‘òCÞňÅ…sž6jïÝÛ•?½ÛåªÖéû—O~g¹'ù?øbY¾)ëú]¾sâ6 â¼I<ø%…äšßErGàA9ÈÍCnÖÄâš_Þ½š~[?GÔ¤µòR³~Mh×ëèixâµâ/éú-Í­”7[\K«ªFù‰ÒS*e¸ÏæÉÇ¥h¢Ÿ4—Â’·ø›w_ƒ2ævvßÝdÓülTø•wâ;h5–©ªxVÒØ$ÐèÚ‹[Ío#ZGXÈw!p@'h9Ö ¨óóéÙöÓîß«üMšmEC~«¾¶_/N¨ÈÒ¼ZþÕ´}uµ­OQðÞ±£Ìµ Idž[æ\•UB’>ódóšÒ£”H?ŠÊQóvI¥ówk¥ÒÙ§É%·3OÑ·oë²0`Ô|Y¥_x:îóZÕešòÞãW»¶k¹$O™åìÎ1å¯ Øš«*U%´cý[i¿Xßÿ%&MÕ‚œw”¾IYz7ø3Ò> êwš§Ã–¼½¾¸¼˜Ü\…šiYÛhc·’s€:Vuï ,^Ï•ý÷eÁ©W¶æÓÒÈó?‡ž Öo.ü¬ë÷—wó®µ éeµ½…N *…ØoÁÀʯ$rI¼æŠéÊÛ]õvkÒÚí¶Ýó«¤gþ$—–}¯½»X>(k×óÜÞi<—–Vú™³û Z]Ô“4+€Òý¡t­“…xûÖT=õMËi|­{Û}üÿ«]_s-ãø¾«ËËò"¸øâKkkýQí´¹4û%íÒÒGŸ¼~r?‡=±ÉGßö<ßòóOG®¿ð?t+{Ž¢ØIúùŠÈÓ¤ñ´±4zßöY³1?Ú¶tó<ÍÛwnçnΜg½}ÿcÍÿ/? ÞÞ»j}ßkËö?¯é¸ëj·ÍÞ¯Ak£Gsu-¥½îŸsºö¸-ʰBO¦Ð9óšÅ¾z ½ùdÚÚÚ6½|öën†©rUVÚñ³ïv¾ïÇ¥úœÃ]k^¿×ü#i£^ZésiW ¶+óZ®Ù¥(Óe˜ã©n+±&êTæÖÑé·o^ßyÌÚQŠJÞóü¯¯ß±ÕÿÂÐÖ†œþ!û%ˆÑãÖ¿²Í™‰þÓ³¡“Ìß·vîvléÆ{Ö4}ÿeùy·•ïo]µØº—‚©o±¿ž×ôßMÉmükã^_aÙhFòâ߉Œ“*)(¡U°X‘ÉÈð+56°ê»óü-ù&ûßóו:¾Éwñþ¿áÍ/|B¹ñv¿¤ÚiQÚ6Ò…î¦øbÑJÇh‰pàIÈ< èp\Õ-ð«[½Þºü¿Ÿ™òÁ}§{ú-/÷þ¡Vf@P@P@P@P@P@ïŠdd½³C¨Vm„㜎~µóyÛw„}Nü+ŒiÊúmú•¤¥A¶ ׎‚2ßË5ó²Ã՗®mÅ?‰}ÿça°\Ç Ì¥×ë…g5#º.tå/‡óE+ûèdm‘†bz|¸þu¢ƒ½èДUÙ­á°öqÏÎ0vȪ œÿ…}vQNTã(7Ùý÷8qòŒœZóF“ΘëŠ÷ly—!i±§aHÜU!HqT‰8OÈ?Tÿ°•¿þ“µKŽÇaðÿþ>gÿ°nŸÿ¢Ú±Ÿù”ÝúV}¨Þé¶¾MΧ/w!‘œÈüóóÉà`V{G“¦¯ïÜoYs=öûŒˆ~xRßËû6›%³C4“Æð^O£È|2¸ Ê=©$’Q蕾[Ù÷ù¾fÛêïóïåòòì‡EðëÂÐZX[[iÒ[¦œd6­ ÜñÉ™÷ÀupÄàœSzïÚß.Ï¿Ì]ýoóý>F®‡áÝ'AÑF¥Ù¬:xßû†fÄ–q$ƒ“Ö‰ûñå–Ö·È»'%¾æ^—ðóÃUÞŸsec:ɦ6aïg‘-÷›j3•ç¦*”šwëk|„ÒjÝ/žæµöƒ¦_ëµÝ·™}¦ï²ùŒ<½ã À89 Ôr¯{ÍYú ê¹^×¹•Ãß Ûéö–6Úk[Åe+Ílñ\Ê“BÍ÷ŠÊ8¸ ƒNûy+|µÓÏw¸Û½ïÕÝú÷ü /<áËí:+ û.àŠëí‹ö‹¹¤7Ü]œ±ãŒjiòÊ2[Ço¾ÿž¤µu(½¥¿ÝoÈ»¦xgGÒµ­CX°²X/õ" Ô¡Øù˜éÁ8€¥r<‹kßçý69{ÒR{íý}ÅmgÁš³yqw}mp&º„ApÖ÷“Û‰ã¸Ô8ùˆùàâ’ŠWó׿>g§–Á®x'Ãzî‹k£êzTRiöl#f‰c 1°ƒÐž)½f¦÷_×è(û‘å[n|3£Ýjö:¤öJך|M ³ï`#FeÚÓǃD—3“iYù­Ä—,c´uC¼=áÝ+Ãz@Ò´[O²ÙfyŒü·'–$þ´Oß$¶µ¾_Ó÷dä·z™ð®ü+ýo¢ +nŸkqö˜c†Ž\çr¾íÀóëNîñ—Xì$¿›rY< á縸™mn`ûS‰'ŽÞúxb™øùž4p¬N9$÷Í|–·GuÙz-šº³ío;zî`xKᕵ•þ¥{â(㽚Mf]FÍæcA±´´G ¼sÎÓÛšT¿wN |QVÿ†_~r}¿æùð'†Î¦u¦þôÜý°ÇçÉäñ7ÉÝåïÇñmÎyëD?wn^›y_·oKß½úïçëÜ ð/‡¡»ŠçìsÊð3´+=äóG >wGr¨NO v©å\¼½-ËòÚ×ßmÌù¹¼ïóïb~øZÚ >+M>k_ìÅ‘md·½ž)#W$°óÃI<zŸZÓ™ósu²_%±6I[Îÿ;[ò&>ð×öŸÛΛûß´ý°ÇçËäñ7ÉÝåïÇñmÎyëSrܽ6ò¿nß ’æVðöïßæhhÞÒô9¯æÒí|‰5†¹¹>c7™!êß18ú _ 5Ml¶CzË™ï¢ûŽsáO‚$ðm–¨÷¢Ô_jw<‚јÅdìE,ÀÉüê£îQ…5Ó_ød‚~õYTï·§ùµ ( € ( € ( € ( € ( € ç¯ôdǵzö8™}éØC‘‰^x ݽ)¡GŒ?ä©ÿØJßÿIÚ—Ú4ŽÇcðÿþ>gÿ°nŸÿ¢Ú±Ÿù”ŽÆ³Û-E÷ؾÓ»1ù¾FñælÎ7mëŒñž”-on°}nš„V &.e‰¦DÚyE*ç§W_Î…­íÒßíù0zX-/­î幊ÞMïi/“0ÚFÇÚ­ŽzðÊxõ¡j“þ´vüÐ=‹P@HPI É&“i+°JævâT išÆŸy—òÇÙîRL¶ màžp Ç 5V×õæ¾ðÛBx5]:âê[[{ûYn!¤‰&Vt•$€rAPEM×+—D³·_ëüȯµÝO±†úÿU±µ´ŸTó\"G&FFÖ'#ž)¿uò½Áj®‹v—0^[Gsg¯¨Úið»lY.¦X”·\Ä ði]'aÙî(Õ4ón÷úÔÃ*¼‚eÚ¥°Tœw.=wZoÝßA-võßR°¹†ÚkkÛi¢»$[¼r«,ÄNÂÍÀ'CNÍ;|þ_ÓAæ@|A¢[û$êöRÎ>Çö”ó³Œãfwtç§JQ÷¾~îæ„…’’i6’»®Ck}itqkuçËYw o‘³µ¸ìpp{àÕY ¹1!A$€$š–ÒW`•ÆÁ4WG=¼‰,2(t‘2²žAuM4ìÂãéóÃnŠ÷dz*ìc€9îISG[™%P@P@P9âŸøþ´ÿqÿ˜¯›Î¾:?Ðê¥ü'ê¿RΗ÷GÒ£e"¦©Þ¦¹ß@æåÿ´ú×–þ4zÑøµ!Äçþ¹'þÍ_a–ï/EúŸ=ŒÚ??ПíXóÇ@¦FéÅ' [R2nµH“‹ñwüƒ5?û [ÿ膤þ#Xìv_ÿãæûéÿú-« ÿ™Hìk1žmskâøKÿá%‹I_!5²†2Éöƒk+ýO—÷<ÃæîÝÓœb¢Ê:o%/½ÙÆý¾¼®ïÔu,ÿíÛ~½»é&¼ì¾y ª^Þæ(¼Möå°)«O*ÜnV7– ß(;˜òG ¹ V‹‘=> ǽö–ÿk{sz±Jÿöòæôòòôù\ê<0²éú‰îtí;T™Zåæ´†õ§Iî‚0>is'$ ät튙ÝQŠõù''®ší®š¿QÂÞÖý4ü¼ÿá¾D_ÿµc“Y†æmBâ×ʉíä¹¶»‡÷„8p¿iwã Ü@3’V¿°—.úÛ½¬­·ÿ« Ä‹{Y_ïÿ/ësçOñ-Ž…§¾Ÿs®=ÍÞ”¨äžá•ÄoÚ›WØÒü±”cƒ˜WRʤ¢¾Çÿn¾ÚÚö½´K¥´ÞÉõ÷¿àyz7×rÅ­–»ö H¬µ]^î;»‰,ÝÚÖîÑ­c-‹ÿ¤3Iò„“82m±-6ÔVš^únÒùÞÏ«I|·’èÖž©¯ÎÏÊÌÞÓb½¿ðn°|Gôw‘ËmŸ3hˆFâ5?Þev_]À÷¢§,¢ž××Òòºû•®¼¶;Â¥–¼º'ÞÝ~o¯¦¦Q:•Οyuooy~ºC[\ÙÏ>˜ö——[9’Œ©¼ì$)TQûÂ0H$’rVµ»ù¦­wÛ{¾ö艌½šz[îiÝkê¾Kw­Èm<5¨Ù]Ü_Am!Ô­,-å  s#4íq<»àvQV*å구y"¯÷«ù´×V\_<¢Þ—×ÑÝ´ŸÉÛÓ^ˆºº~°|;àhôä·–¡<ƺµyôGSæ e#“·’0HëÒ·¬ß·›i|õ‰œ-ìµî¿Sö e4Ý:Ï:¦™rÝ6¢ÐXÝÊ Ó¸pÉögÚ#ºB¤P7tËKû®ÉE%ßMú_mÕž¼ºoz§+ï}{ZÚ[õêžýE³“S¸¾ž]G^½×-ïíV)Z+¨m<¡ /˜‡÷I•2óF9Å7wïAuþù%n¥­ù-!Ù&Ÿen÷þ·¾–¸Ø—\kT¹ñ-¬†Í­,ö÷3•¹ó“ýJ)©_4n@ TŽ@¡òýŸ‡Ko}î÷_fý/¶—-Þþ~÷¥º[¥ûuµï­†›=SPÑî>ße¯Çg ¶3$?j»–@«u)‘‘ˆYXìÚpFðñ =Œ¥Ýü“‚Ko7ùß©:ûÊ=¾÷ußoêÎÖPù†ði‡ÄƒSÅçœdûG’-¶7Ùü­ß'™þ§yû¹Í(¦ùSò¾ß:¿•­Í·»Ëo"´éåoNW¿üy­Ðè|Mg¨i’év:Eõ骶Ÿ!–ñÞHË0Î¥‰!•ÜŽ™AÀ6uyzhþQ{w÷¯fûÚ÷¹ª|ýV¬´ÛF“·nm ž;ÓÄ·^¸1j2CgxÛ͛ϹBê¬Â#¸ÛA<ðNx&¡¹)¹Gvš]¯tÕú[G¾úÒön/k¯[u·[þ&€µ?µ¢ûGöÖ~µ´¼ÝŸkÞ¸òwü˜ÿ[þ«äÆÏjÕrÙòü>í»õ½úö½ô¾ÝE;ó.÷~–éÿ­¯}LÙüŠ_{’kð×M.µêŠªõºëËþOú~¨¥uoâo>.µ=fÂÖ‘-'[ÛÇÜ·€_É‘I;Dƒ«ŸÅš¤îâå¿»ù+ùo{èž¿q4•ÒÚòÿçéÿ v>3+o§_$š¤¶ð̰Ïi¦½ìGqMÑË)`Õ<<¸Vrºrå[­žÏçåëmuNÚW‚Rï¿àÿÃhd 'T›SÓ’m7ìÖ÷Ö°]ÞE*Þ{t#Ë™f‡Ò&çŠu—ñRÖÜÍy¹G–ß-_«»ò¾öOÑ>díçª}´ùÖðÞ‰©iSø:(ì§.âu1‘ö9þÊêá‡UH>Ì<°­ä×¶šégoœ¢íòwkÉÛh™µî_«jÿ+ÙýÚ?EÝ“jVÂꚭİ4º Ö ¹šlÝ®˜$p²Én!Ô:.åTÝ€ø$ñYR|ª]9­äÛ’Wò³ßÒú]šT\ÜÊ=Rù÷·Ÿ¯àìbkx‚¯^Ýk­ÄIxË X^ùm×1m›Ì0.aQ_#’s0Ò1RßÝ¿¯2¿{õµ´iíÑ7ïKMº}Ývùßgò/È·ßl2X¿Š[à ,ïÛÞý²ï1‡ýøMÆ Û8ëŽ7U«'iíwo¹omm½¯×},f®ÒåÞÚýý:_{Û§™ÿÂ@³im9×î ¶ÅÔ%"óܬ’J™F( xçŸïH9Ë›–_Ím|Ÿ.¶[=oªÖû_Ý/N›]ÛÏ_½y7¥­~£ZÇUƒmä±x„_\é:x–Hà±Uf#ƒ´Jä†É%>bkirª’_gšïÒÊßù2ÖÚòù­“ëi[×]þOKé{z–©y­®éuøôHEÔ¶By®#‘°`Ø%.CŸŸÎÚ¯É^Åkó*Soâ¶Ÿ|í·[[𿽪­9Ò[__¹_åúß¡›£EâfÕtæÕµ-^ÎDKCgÞN²'”žb»$žJ±01™ ç8Ûfìæã½åúÚ×ÓkZÖÕ[Ö_—õ{¾Úþ–ùÃA}¾ú;ã«N¾TY»¾ûL>sűßêØdå±CÆ6ô¡¥Éo—üï÷ü›Ô%üKúüµÑv}vùô*<$ ‰5/ø•\Áiîôµk•f‘»¸„v”zÖw“J]]×ÍFJý—4µKÉ$“’[o÷µeÿnê¾çé• Ãâ4²ºººÔõ‰5 Yî,NŸy™,r£²¤#ÄÙ êªÁú` ]Ô"œUÕ×Üô{ë³ïdÒb’r“ŽÏÞôòÛE­¼í¿S§ðt:êj¾V±%ÙŽ s.df(ï6Æ+“Á1²ÊþeSIE8Þö²¿{^ïæœuêÓ&NòMm-}:%ú³±©(( € ( € ç‹ò9+?ÞKÕ×B28ïÈ+Sÿ°•¿þˆj‡ñGc³øÿ3ÿØ7OÿÑmXOüËGcYŒ( € ( € ( €#Š`y^£¦mòP ¶Éõ8gÐ 6V2J( Þ^hæx£ibFåAdÏ\ÙÀ£m¯ë@ò$ € ( € (;ˆ!¹‚H.bI¡‘J¼r(e`z‚Q@lIÓ¥°P@P@P@P@P9â Eí™í±Çê+æó¥ïSùþ‡U/á?Uú–t¿»øTa ärÖúV°šn“¬èf9äKH÷A'^gƒ‘ô5õÉÅ^29µÝþÜ_x'Q’;e‚îÌïeN…”g#ê2)òrMîŒ }{þI¼;¥#gb“8öRG?ðÿÇ«^NK²y¯ xŸÍÔÄË ÿh üzþ4U…©±Â^ò:;mIÅ´KÂúS£M*qôDÔ—¾ýIÒêI|©sž*ÏöN¥ž¿ÚVÿú!«ñGc´øÿ3ÿØ7OÿÑmXOüËGcYŒ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €+_ÙC}•0<« ŸQXWÃÃI£Ju7tgÇg{dva¸NÛ‰Cøà^trú”Ÿ¸ÓõÓüÍ\éKt×ãþGoá‹_L°¾ÿ„ŽæÂi,âŽX¢Bà(Ç~9ï_M)8É®SΜS¹ÑxzÃDðæšllnburZG’U-!>½¿ Ê\Òwhµe±‰á¿ hžÔæ¾´ÔLÏ"U’DÂAãLV²œ¤¬Ñ)$L4í>?M¯ üÏ,B#õØϯj.ùyBÚÜÉ_iVÝÞ³kxD“#æë°ã¿\ŸÆœ¥xr±%i\±¦@óEÆhçð­"ù`‘2ø™µ Káj—ñ_ü‚µ/û [ÿ膬ŸÄmŽÏáÿü|Ïÿ`Ý?ÿEµa?ó-f0 € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (`ô vhq䮑fWþ¹+¡W©üÆ^ÊŠá½tÒ­ý²~Ò}ÅÉÄáíp4ÛaÿlÅòî.Tº6¤/M>ÿîÃb&Ðô±ÒÆôZa{$ …P0íTK rž+ÿV¥ÿa+ýÕ›ø£±Ñxf(¤¹o6¥Æ›c25l~íºdV2-ßfµÿŸ;OüOð¨}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(#WÕl´­VÒÒ}*o5¼×],í¶XÚ%ÜãÙ™FX}Üdü»™PÿfµÿŸ;OüOð¦ök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ÆÊ©eª¬h‘¨Ô­ð¨¡@ÿGn¶‡Aþÿ–ÿ°mþ‹j‰:‘Ï4Vм×$1F ;»U©$ô%ÓEn¡§•"V`€»‰À÷$€(ë`&Štß©*+¹pGÁ¥aäI@P@P@P@P@P@Pu·ü”=/þÁWßú6Ò“Ž·©hþÔa³¸Õ,m´û¾]¤·’Ùn;Wj“ û³ÿLÿÕ ú`P@P@P@P@P@p8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[TH¹s»j*9Œ¼±¦åÆ@gãôB÷WßÝ¿kYsy_{õÚÃv³þ]}vÓÏÓÎ÷6ô{-Ní6öiµF–mBî;”–iZ%‡÷Æ?Ý“µFBa±žG84SÒËû¿»øïøß[±Jî÷Ý5·n¿#°0‚IûEÊ粘ð>™J'?çêïþúÿˆ Èóõwÿ}GÿÄPäùú»ÿ¾£ÿâ(òüý]ÿßQÿñyþ~®ÿï¨ÿøŠ<ÿ?W÷ÔüE@ÿŸ«¿ûê?þ"€ ÏÕßýõÿ@?çêïþúÿˆ Èóõwÿ}GÿÄPäùú»ÿ¾£ÿâ(òüý]ÿßQÿñyþ~®ÿï¨ÿøŠ<ÿ?W÷ÔüE@ÿŸ«¿ûê?þ"€ ÏÕßýõÿ@?çêïþúÿˆ Èóõwÿ}GÿÄPäùú»ÿ¾£ÿâ(òüý]ÿßQÿñyþ~®ÿï¨ÿøŠ<ÿ?W÷ÔüEdjz-åÖ»gum©Ool–—×,¬ådhXÙTlÏ”AnHw†TEŒØzŒVæYR+'M‘”®æ³‘›ì.r§îHd·À›w˜Ä(Ø»Èóõwÿ}GÿÄSòüý]ÿßQÿñyþ~®ÿï¨ÿøŠ<ÿ?W÷ÔüE@ÿŸ«¿ûê?þ"€ ÏÕßýõÿ@?çêïþúÿˆ Èóõwÿ}GÿÄPäùú»ÿ¾£ÿâ(òüý]ÿßQÿñyþ~®ÿï¨ÿøŠ<ÿ?W÷ÔüE@ÿŸ«¿ûê?þ"€ ÏÕßýõÿ@?çêïþúÿˆ Èóõwÿ}GÿÄPäùú»ÿ¾£ÿâ(òüý]ÿßQÿñyþ~®ÿï¨ÿøŠkÆchJÜ\6fJ¹L\ÑèOzž€8Çž«ÿa+ý'jÚox[þ>[þÁ¶?ú-ª$ÜŸ¬õñþŒZ’Ð@P@d·‰´eb­#‚<~”®€OøIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢è&Ö¼5=Õ½ÔÓÚIqm»È™ãËŸa¶œer88ëEÐÿÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÖzî™{uµ¥ÚM4‡Š 'ô¢è “õƒþ¾!ÿÑ‹L h€ñÇüyê¿ö·ÿÒv­¡ÐF÷…¿ãå¿ìcÿ¢Ú¢@ÉúÁÿ_ÿèŨ£{Ÿn³L®ÊeŽ  åÝP~aŸj¨ÅÉÙ »+•.¼A¦Y_Oiu™‚8äi.$XЇ߀ =vÄÔ­vïoËüÒõ)«X]ZƒR…K4pLòN‰ ”uŠB…€à‘À>Ù-R~Iú\WÕúØÓ € (OÖNƒà +á³oÛ„RRØGº*ÄÉ8'øàÔ'ïÆ/­ÿ&Õ¾hv÷[]~ãÇ:bK§-´7³­åÛÚ8S‰ uŒ¿Í—¸»Áƒ» 5QW’]ÓsKó¿ÝæK|±oµ¿H4ÿˆº5Ä$ÜŨ[ÏæN« é×23,R.1#N"¥Ir)y&ü®¯÷yìÊqjN>võþ»¶:þ—1ŠÎñ&akæT¾KçcîÆ0vžý©Ï÷jN_gG÷_ò&/›–ÝvüŒübÐÚh×:†ïâ’îP‘HÌ!ʬJª2ÅØËÆNìGgrËt•ÿÄúzi/¸ofãµÝ¿Â¯¯å÷£ZßÅz4öwwIs"Eep%¶–7‰2ëÊ2†Îc~1ž:r(·ço›·ù ëc?@ñ¾Ÿy¾ Fqkr³] f‚HáeŠGJÃa`Š ²98âS^ÍMÿ*oîW·•ÝüM.ö_§ÞC7Ž­Î­eª:ÙO-%å¥Å³2‹³r|À‰OA‚qó“OáræÒß~ÒoOûwË®ï@{._øü9rørh|Ô½˜!‰f}œègBÊ Ä .Y”a2rÀw¦ÓZzzë~Ÿ'®ÖÔ6ü õý [ÆšE=ÈW›63æ©iFÌÄ7+ É´|§ÐЕß*þ¯Òû_ËpÙ_úï·Ì±â~/éÑ^Ko5ÂIs aäa½Âç¬NÎ1ÉÀêEMýå÷ü§êeÉt3Ï4H-Dדȧ;-½­ÄÆ(ÒFMòcR>`CN3T•ÚKËÒòÛ]µéùü]7Бüm¢‡Ìwj Ži"žib–4B‹#8V)µˆòÛ##¿ OKôµ×žÛ}öÓ®–½ìíwe¿õ÷–¦¦¬YëI-‘œ,O±ÖâÚKwS€Ü¬Š­Ðƒœcšr÷UÙ)§±–¾;ðáŠY~Þâ8¶áÚÚP% û£%x¥ˆ“#‘Ï"Ž‹ÏïÕ6´ßT»ô)«;??Ã}|¯¯bgñŽ‹äV5КF‰Hû ø‰¤ÆÅ‘¶b69+yÓJîËÍ}ÊîÏ­—b[²»þµ±VãÆVVÆ¡o¨HVÞØˆãöÒÏ!eEy]‚Â(’1œ 9<â”=åó~–Û^Úó/‘RM4——Þï§Ü“ù¢õ׊ôK;ys{åÀ$–"Æ'Èhƒ4™ÈÀF9ÆÎFUÖžæ—æìû=ĵÛúººü5ô!>.ÒäÒµKÛI%c¦Àf’9­ä…ˆÚJA*ÛNÈ=¨š’âµ½’óÒÉ­ÖèpårI½7¿—{ímã1Ä6··,/~X¥hí&Xmë,nWkbF pÇú¶¢åîlöóZ»ýË}¾ôBmFòÓ¿—[zê¾6±Ó|F¶³½¼pÌn 6“M$r'”@Â);vK’pGNEDdš“{+~rNý¬Ñn-Y-ßùh/ˆ¼mac¥^K¥È×—QZ˜ÌV²ÍÊO2DS# ÀàƒÜUYó¨ÿy'÷«üìÅš¿uëúïØQãÝu½¹d’"ÆS¼òÇ 0Îâ< Ê6K` Hä¨ûÖ·[}í&¿5akm«o¡løÇCÜGö©Ñ÷eŬÆ7*á ÆûvÈÛØ.Ô$ä㤞—þ¾îÞ{[]‡ÖßÖ×ßÓSCHÕm5{všÅ¤+˜Ý%…á’68dpN<Á¡ªµ’b¾¶.ÒP@P@P@P@ÝDHì ‘¤À导a¢é×Ok¨kºU¥Äxß ×#®FFTœŽ?; oEæ»áÙ`&·–I$Fˆ‚Ž M†pFÞ“I ·?X?ëâýµb% ÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰7'ëý|Cÿ£ e?ÙO¥´6Î’Å4~i!£‘d HÉíÆpqœàôªŒœÐ4ši˜‰áýN÷ÄvÚÖ©Œ/ÈM¼2´ÁQ#™Cd\±iz``¦¦ƒo½ÿUù'÷ØR¼•½?6ÿȹ¢è÷š}Í¿›žñ£]³Ë´™—Ì›z8à`üÃÔ´CD“þX¯šßåØrÕÝw¿áùþ‡A@PéŸÚ¾ °ƒÎò|«ß´gnìùw%ñÔuÛŒöÍLt’—kþ)¯ÔÂãܳsáiΠ×özŒpÜ Kíëæ[™…€àž2AÈÁǹs—Êéú9s|žÝý~ò/ÀÉ_ øŠÃÄ1>“©Ù% Žð¬×&F‹Î™$Ø@™wîÃ`sSÞ„¶´WÉ]}é={ö*Ms)%Öÿ‡ëø¯<7¨XxjmH¼yí ŒV[º"´\•’c';8Çðð9Å\íQÚkF×Ê=WÍ~2bÜ=äõI¿Y=SòÔ/ü3>§u«+Åi&+k[E¼¶[¨^(ϘۢÜ2 1^ €ŽÙM¹^Ow+ü­eèîäÕ»ú IC–+d­óo_Á/Ä¢þÔÆŸwiˆÁþеû5ÛÜZ¼í´4Œ¾[4»”0Œ9s€9Ó³]“OÎêÝ|ìº_͆ڭõ^V~_ÒòèJÞšîeªê±Í§G-ÔÐE©ŠTyüÀK9v ´JøWœÓ)5gï$’~–w·ýº¿“Z;tnì~¡àý[T–ÖãVÖmgšÍB§ÙìàKœæV䘱‘ót㙨®¤âµå%ÿ·~EÿüŠ:wµ[ÍM]»Ó^æÊÁ- ¶—MóaŒu•L¤Jt ($vÆÕu%%»ÿƒ·Tîï{ô^w˜è’Ùjÿ¯“z[¯ ­ð×3Asqu¦j—"/*VÖ4Ã|¸3¯–^]éå~g~úTÅòÊþž·JÛùúi÷íý[îþ·~Vèõ}÷Q²º€êŠŒná¹³-l Ûye!‚à²yæÆx:§·Wün¿'oÄ,¬ãÑ«Áü´8íoÂ:ý”VZ!7m¬BðÞÎÖшtÒ8#uºcÎládÈŒð];)F?e8¿üÉþZ[~º»97g?µ¯ãÿ­ÿ$tw i4›{$¾u½ÍÕÀimDˆþp˜md-‚È=@Çá[o(¥÷8ÿò?ŽâZ_ÖäÚ†¯ô›tƒû]L&奖ÞvX|£A Jîæ% …l `)Í)Ç–Zèמ½oä»ß}ö£ºÑéøyw}ÿS:ßÀ7ì>Ù¬$ñéKV!m62D“G!ä;.à ´æ©Ióó½úýÒ_/‰·÷+ Jñå[køÿ–«ç©³¢kↃL…ÿ²®õ kû™fŠ2ªÑì-±üàã"%1Iä‘ýÖ¯´y­óOõo{~ Ûv’üË×ïlsø/PÔ´{6–æßM¿gžyä6æIà’gÜ|™£‘ lÊpYHà‚:¸®N]vKnûËÕ6Û³_!·¬½~VZ-=êžÿ-OÁQßM«8¾h×P´xL@ˆ¤uUyzĈããŒa¿½ÁwïOÑ'{/W«ÿ€%¥¼•½]¬ŸªNÞ‚ëÞ¸ºÔüè̆úKHîS|¨ y$'$ó¸•\ßñ4’íw/Ÿ*KñIÿZ¦½Ë-ío½ëø\£qà;¹oÕàµß7Ú"ŽÚÉ£¥,ªó “l¬6,ŒåºaBðJÛ¯»fž/~Ž×èT­+®ÿ–½—gÎëƒ5¸5IõH|Ad/n¼á36˜Å1"¸Eóy#–ëÍ.UÈ齚׾òûw`»æRê¿ÊßÖ¢ÿ si¥^hÚ>­ ¾•{n°ËÅ¡šPÂ!åq"ŠH*y¦xÓ™¹'-”®¾ûÛïùêJ\º­í¯ã¯ãèS‹Àú²ßjö1j0C¤êVþTò5®ùdWšwtŒ‰Â\ne`r8"¢ r(Ëd×á¯Å­·óê;¸ÉJ;ëòþ·$¼øno êK¨[Gm9.–ðØ•‰ßÍYî#2æa°)m¨Ì2 é_FõjÞžzt½ú4¯­$•–Ö·žÖZö]¿ç~—º Ðt÷¶éP—¹e‡Øã<’›Û-Ç\úzU·t’³lØ©P@P@P@P@µ c†ÕžWXЖc€2¥ÕÀø“Ã^ñ&¥a¬Gkq=‹e ‘q"ó„qüJ ݃ÜzÀÓ{ˆgñ>…äM›e—;~é½*d„ý`ÿ¯ˆôbÕ-p8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[TH¹?X?ëâýµ% € ( € ’ÖU³·H-aŽ(“îªäÜ÷õæ§•/Û¤þêþmþ4r ·IýÕüÛühå@n“û«ù·øÑÊ€>Ý'÷Wóoñ£•}ºOî¯æßãG*ûtŸÝ_ͿƎTöé?º¿›¨íÒu6ÿ9PÛ¤þêþmþ4r ·IýÕüÛühå@n“û«ù·øÑÊ€>Ý'÷Wóoñ£•}ºOî¯æßãG*ûtŸÝ_ͿƎTöé?º¿›¨íÒu6ÿ9PÛ¤þêþmþ4r ·IýÕüÛühå@n“û«ù·øÑÊ€>Ý'÷Wóoñ£•}ºOî¯æßãG*ûtŸÝ_ͿƎTöé?º¿›¨íÒu6ÿ9PÛ¤þêþmþ4r ·IýÕüÛühå@n“û«ù·øÑÊ€>Ý'÷Wóoñ£•}ºOî¯æßãG*ûtŸÝ_ͿƎTöé?º¿›¨íÒu6ÿ9PÛ¤þêþmþ4r ·IýÕüÛühå@n“û«ù·øÑÊ€>Ý'÷Wóoñ£•}ºOî¯æßãG*ûtŸÝ_ͿƎTöé?º¿›¨oè„W¶–÷1ƒ¸$«¼ë‚zòhå@SþÌÒè ¦ÿà:ÑȆKmi§ÚN³Úév0JŸuã„+¡r ~°×Ä?ú1j„K@Ž?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕnOÖúø‡ÿF-@Éh € (8¦ŠV‘b•¢m’`J6Áô8 þ"Ž—"JÌñ Í͵µ¸³”E$×1ø `t¤Àì:×ý¢ÿÀ!ÿÅQ¨Øu¯ú Eÿ€CÿŠ£P°ë_ô‹ÿ‡ÿF aÖ¿è5þþ*@>íÐj/üüU€}‡Zÿ Ô_ø?øª5ûµÿA¨¿ðñTjökþƒQàÿâ¨Ôì:×ý¢ÿÀ!ÿÅQ¨Øu¯ú Eÿ€CÿŠ£P°ë_ô‹ÿ‡ÿF aÖ¿è5þþ*@>íÐj/üüU€}‡Zÿ Ô_ø?øª5ûµÿA¨¿ðñTjökþƒQàÿâ¨Ôì:×ý¢ÿÀ!ÿÅQ¨Øu¯ú Eÿ€CÿŠ£P°ë_ô‹ÿ‡ÿF aÖ¿è5þþ*@>íÐj/üüU€}‡Zÿ Ô_ø?øª5ûµÿA¨¿ðñTjökþƒQàÿâ¨Ôì:×ý¢ÿÀ!ÿÅQ¨Øu¯ú Eÿ€CÿŠ£P°ë_ô‹ÿ‡ÿF aÖ¿è5þþ*@>íÐj/üüU€}‡Zÿ Ô_ø?øª5ûµÿA¨¿ðñTjökþƒQàÿâ¨Ô :mާöè~ת¤Ðîù£[`…½³“ŠNè KV)æ•8!8#ê(`gÞøŸNÓï#³¾Ö¬ín¤ÁHf¹DvÉÀ“““Å );-ÁûªïbÿÚ§ÿž­NÈíSÿÏV¢ÈíSÿÏV¢ÈíSÿÏV¢ÈíSÿÏV¢ÈíSÿÏV¢È m G–ãVy¾ÜÃ,rxDô¡~~°×Ä?ú1i-p8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[TH¹?X?ëâýµ1<}Ú<4ðýš ¯2êÕ|‹ƒˆäÍÄ+7¿éZSW–Ýÿ"dì™ËÚßÿcZËeö˜<6SÅÜP*Ób1… ®Í’2¼¨\Èì“¿*oK?¿~_+'§t´Ñ”×+–šé÷u£í×b|W« %’]_ìÓ%·™§ÇäÆ?¶_Îu^«ÎåXÎØöŸÞç¦0ávÕÖ¾í×dÒ»ïßÒÚƒ²O]=í}6û¿òn‡Eá¢bñ‰âmFW¹7"U²/åSxp†#?.rGËë“Y¶ÕË«Wù;¶¾ýÿ-µ¨¹´º_ð~ã O^ÞâÛiºÌBîkhEñ#vŠfš`Ë•€wxÆzt­¬¥U¨ü:ZÞ“z?’ïþrÛŒ5Ý_ðþ¾gOáth'ñIpò´w ¤ ¹ˆ·‡æ!@ïÀÚ³“µöø¾^ôŠK÷–ßcG×kÐln>Ýý£æÂ­ö¯'Êó²>öÏáÏ¥i5gkX•×Õþd>%ÿUaÿ_ðèU f½0 ( € ( € ( € ( € ( € ( € ( € (  lÿãê?­'°¿Ý›þ¹Ÿæ(`yÏŒí®¥×5Xà:¯ú]„1Cµ™’ · /É$žYØ>a“½0œÑOûy?+{ºþ†ÝÜ­eèö߯õú’5¦¡•ÅìšãG>§/Û– g2¤åòÄj‡r®|¼˜Æâ¸ê)FË‘?åÿɬ·ü|¯këv-}ëoúi{[^Ý ñCâv¶´H¤ÔWÏ…äF•œÖ‘¢gîÀòÁ[= 4Ü]åöT[óv´£§Þ­×nƒ²•ãm_µÚ³ùYÛÉ ˜ëSÓço홤œ¤«i‹˜Ró»’Ò.c;Pª´rÀá‡B­(Þ+{Zþ|ºï£Mß]ýt%¾hÝ«oþKÍ=/Û]z–þG«-û>­¨_½Á€‹›Yìn‘»†Ye‘Ú#› ªAÎ04\ª/—m?­uõ× Jüß7ývôêu2ê¾_Ÿÿûöò.c·ùaÎýÛx¼òƒ'¶Öô©ZÛÎÿ…÷õ¶ž¨oKù+ÿÀõ,ÚÝý¢k¨þÏ[þÁ¶?ú-ª$ÜŸ¬õñþŒZ’Ð@P@W¼²†ôÀ'wD†e›ä’Tä{f“î-¿½/ýò?Æ@1mýéï‘þ4j‹oïKÿ|ñ£P [z_ûä€bÛûÒÿß#ühÔßÞ—þùãF ¶þô¿÷Èÿ5Å·÷¥ÿ¾GøÑ¨-¿½/ýò?Æ@1mýéï‘þ4j‹oïKÿ|ñ£P [z_ûä€bÛûÒÿß#ühÔßÞ—þùãF ¶þô¿÷Èÿ5Å·÷¥ÿ¾GøÑ¨-¿½/ýò?Æ@1mýéï‘þ4j‹oïKÿ|ñ£P [z_ûä€bÛûÒÿß#ühÔßÞ—þùãF ¶þô¿÷Èÿ5Å·÷¥ÿ¾GøÑ¨-¿½/ýò?Æ@1mýéï‘þ4j‹oïKÿ|ñ£P [z_ûä€bÛûÒÿß#ühÔßÞ—þùãF ¶þô¿÷Èÿ5Å·÷¥ÿ¾GøÑ¨‰­â‘\NÓœmãJÌ w©ao$’E<»—b¤1’GaÓ¡äÓ`foÇÿ@ÝSÿÞ‹€oÇÿ@ÝSÿÞ‹€oÇÿ@ÝSÿÞ‹€oÇÿ@ÝSÿÞ‹€oÇÿ@ÝSÿÞ‹€oÇÿ@ÝSÿÞ‹€oÇÿ@ÝSÿÞ‹€xky]BW†hD×",±”b ¯8? )úÁÿ_ÿèŦ´Àxãþ<õ_û [ÿé;VÐè#{Âßñòßö ±ÿÑmQ Fäý`ÿ¯ˆôbÔ –€ (  ‡ñ>ˆ,EäŒ7|…6Y¹-&3°,{‰8çtç¥Ywþ_ðƪ0tV†FAò=)µg`Nêã©P@óEm Íq"C`³»°UP:’OA@SÅ+H°ÊŽÑ6Ç À”lƒèpAüE`I@Qu+2·lnÉö\3ü‹Ú’xÆôæ…²}ÿÎߘu±n€+ÙÞÛÞÛ™í¤ß»¡b ᑊ·_B +¤¹ºZÿ!õ°±^ZÌbÜÃ!š?6 ®ôãæ_QÈäzŠviµØDôZmBÖ ¯³K(Y|–œŒRbz¿ÏÐÔ¹(¦ÞËÇü˜ÒwIuþ¿RKKˆ®ía¹·bÑL‚D%J’¤dGãW(¸·ДÓWD´†P@P@@o [å²2¤4fP€¸ç ä¯àhZÞÝ-øÞß“¥¼Éè $I8©4›I]Œ†ÞòÖäâÚæŽÅ“÷nälín;ø4ìÐ‰è  š~¥e¨++„—nr ̹Áç«`ô8ã4-RkoóWüš£±n€ ½¼‚Æ$’êO-D‰N Ë;QÇ© P·K¿ù_ô “}‚òò $®dØ%‘bN ,ìp½ t»ÿ•ÿ$&ûÐ$œÔšM¤®Æ6 cžš X¤PÈèÀ«Ђ:Šm4ìÄ$ÓEn¡§•"V`€»‰À÷$€(ë`$ € Š~°×Ä?ú1hZà^ìùXÚwýíÝéAÙE½´o½ù•þVæÑiku±M+ÙwVô·_ø=|‹³Ë}¯x¦öå¶’ÆìžÐGp[¨Vw– ã¼ô«‚Õ·çoü’ß®ž½/|Û|©-ô¿ßýÛڭÍ׉ôð²Þ¥¤6³HÂ)^8ÚPñìTŒÿ¨ÏQšÍóZmoeo_{þ—áj²´cç¯{$o¬Zéþv««k1Ìò[¥ä e{n3Ƥ…Ý Á`  Ààb×-â–ÏÖÿ ¾~ºéo˜Jþó[ëé¿ÝéF_u¾Y$3ŸŸ´“Aº7Aü¸öïÇï¶n󱻎™ãmG½Ê×Ú³·mÞý/ko¥¼ÊVæÓm/÷tëm¯n»hW¿ÿ„•|Ó)Ö.56³ÃˆÄ1Û¸¶çnÜÃ0.{mun›€ãUn}6æü9––}-ÕtÝnBøW§ôß·Oåлwg5žµ©^Kyõ$–é­å·Û˜W ÿ-@Gó€1÷k8Y$žË›ï»kåföÒö¸Ý÷ëeÿçë­¯b÷„ôýRöêfÖ'Õã…-mCÏ,_+<àäfA—Ù àŸ›šn-Ói¿yþìon›ßË{hÝË¥5m®ÿ>¿§•®^ð[êW¶w—z„Îò Q.QÌ9W” ã,û¹ë€´ª7:NQVr×ÒëD¿4üÇ£S—¤tüzü¬Ÿf™%Ƶ¨C¢Ùĺì ´0ßÉåMï<èüäaŽÑ'Ì20IÏZÓÝW%ð»ytŸÍtíÒÚ’ï[®¿ð?¯¼Ù{;Û Å‘ØÇx³ìŒÚWż@c–cFrNAïRŸ» ÿ6¾œïð·àRIMú~ƒþZ|´éóêtvk.ûǵo)šÐ&ï?íšw•|â-¥77c½Ѥÿ›OKuò¾×Öä?‡þÝwý-ç¾ÚlK«È÷¯­´nC^Ï_ùhG¡dœÿ°*`“QOíI¿”w_ù,¾óI7Úû+ÿ&–ßœ~ã*ãLÖ’Þæhg×Aô¨‹<ÛD‘Ï‹p8ÆÂp£†AÀ§M¿u¿úw¿ŸÅÿïßQ8¥î­µ_+iøìþ[hiêÛ­­jz~›s+X_P€ùÙ;䌤pO@âWü¿sÓˆû ÿ.šnîÓ¿ªWKÕ1­âŸ[?»O¹»?ü ЧuäùVßgÿ„»û;Ë—ÎÇÛ¾Ñö«åç?>Üoû¿»ÝŒöªï.NÞïküþVæÒ×ëp‡NnêþšöóÞÚíÐe–™â ¹`}^ãXŽynW" ‰cŒ ³V%ByÃï.9ÈÏ$R©¢—'iýüÞïá·u½Ð¡ÒÿÝûºßÎÛöz«2¦qªÝyÚäšìWV€#…¶Dò¡i–N<¡dÈo›$c’+Fýîh««Êþ—•’ü-oÉi-Y8¾ÊÝïßüïÒã-‡ˆ.¯‚ÆÚͼ7†&¸‰c¼O³7Ú"Ü‚IƒaòÑ…R8㉧¢nëO/³+ùïmÝöµ™UÕ­õüÕ¼¿®ÆÅÿö¶‡mu=Œ·² ]Gȵ†êáßÎI¢EQ¹É.¬I$ÀzTÙÉF7³—2ôÕ´þI}ÃÒ-·²³ýùöþkÚ³^ÚhRiv‹©Í-¤6þuÚ†i&Œ¶%òß%Œ›UËŽHª›Ríhßðé¶¶Úï}ÉŠ”c¯ÅgéËÑmò9ýWíìøIvý™²÷}³iÞÛ¼íÿ6ßõë~M»±Þˆ^úïuéË×ç½ïïmnƒv·•ûÞÚ[ô¶—½Èîtíwȹ¸[pNa¾™Q'›oš“þàÎ1´œ/FAÀ¥ON_û‡¿þMøo÷ï¨=o=½4üv{ôÛCJêÚëYñ?ž’ÞÇh/E”¦ÖW‹÷qÁ#6æRWÆr9QíNžüÏgÌþæ’üTŸÏµÅ&ì—UoÇWørÿØš»k–Í­Ý\꺕¬ð¥ÙX’ÎìÆÑío(¬ÛÌ °‚6F$æ!ðÆým^eøe£ObÚ÷¬¶é÷W¿_‘qÖóíeìÛćÃ$"çÚ¾Ó»l»ŠýðL˜s³Ž¸ãuZÑÚ[ko¹oÖÛÚýwÐl­½µûút¾÷·O2%þÜiÍ1Öçl(†ß1Î}²<«”gòÂŽ`û@’ K›•ÿ5¾çË­º=o¶·Úú§M®íç¯Þ¼¯¥­~£Mž¥Û©#×EíÆ—b%’œ± Ä\Ñ CÀ8l’Wæ5¬¹UI.œ×ùY[ñZÛ[y­“ëgo]M¯¥Í?ZjzüBYu¤Ñ¢3Éj.%ž7` ;D¥ˆsóy»CòWÔRìÜ·²üåøÚß…õØ–öŽßðáúß °^êVZ’[‰eDŽKkbÓûD²6ôÝÏ%TÄ™<äµgg*Zo+E|Ÿ/7͵4Ñz*šì¯'ékÛåïYvq(_héÚ¼vÖŸÛ(ïo§À—²O°ªJVmÅNÀv~lu$u5¢åsih®ßý»Ë§â­¦¿›æPMïg÷Þÿ«ò4/çÔl^ïK·Xy£lÖÒ*O*‹p! ™¹áò dä’9Íe')GM×5þé[óV·èieû4¿=L«½+^MÑEœšœ×w6Öòܛ֚tŽáf€‚ÊOÉ€_ màô­¤­U¨ìžŸø ﯞžKM:§-åç÷ioë2mzæáôR¶¹Ól®¯náÜ̳1© ÆF]ÙJ€¿(ÀÅEÓ’’Ùr¯?z]ww²’{ïÕö–í»öÑ_O+¸µøërKk;ÛÝ~Ú+ üBš ’ ˜ÜKu…ÄSÁ“*Ýz.ï»Îj ¬ß6ÚÛÿ%ßç{_]ï£Ö÷U·Òÿ×ß{yu&Ž-F]eâ™õ¤˜Ït/™äž;ak†òŒL@ßê°PïûÛ»Ö2mQo´]ûó]~í¥·5·¼’î­émoÿ^m´3t®Ý^i—Z¦¡è­Ü‹;»ˆæŒÄ›ƒ:Iå[x&D,3œãn7šjS¶÷–Ÿ}¼»mmWß–Ž+·ü¿ô·Ìµqh/|8>׈¤ÔḶ›PV7Š2²0Â@ùˆvŽ‚§ÝN.?ã¬Z×®ûÛO‘nþò{Ùúo÷z__ÎßHÔ ½’æÚÖ;€¶,‘4“óŠØÄ€Ã;°sMÝûÞoðý/§È•¦žKúõëóF…!…E?X?ëâý´-p8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[TH¹?X?ëâýµ%  :‘i+u‡ËyÝ·ïÉè yy•IB—,zxX§;³ÊÂíYäŽà‹$9h°¬òŸâ#ðÁÇZùûÕQ‰é~ïS~ÂV–ÕÊ—Ve9 A ‘õÆkë¨MÔ¦¤Ï¤TdÒ3¥ñF ´w^mŽHÞUýÓç ÁÆ2s Ô“€ ­oÛËÿ&Ûï"Öü þîû}è[-kGÔî"huÊ$¬¢[wŽX‚•C!ù—ƒ‚A‘Cj)˲ü?áã÷¡nù|ÿ“üGi>"Òõ‰Ú6y'dEv" ¨eVb C)ÆsíÁª³WòÓôþ¾]ЯbâÍE,‚âfX¦û9Ùk+—, —`U²8'ŽjSºMuÛî½ý<ûé¹MYµØI<_¡Æ¶ìo­Â X$a–ÛºL/î†ìŒ¾ÞAŽWv^_ŽÚí¯NânÊþ¿†ÿwQl5›MbûS±šÎAý™p´¶ï±Š…pÁ™BäÀžt"¥I({GÒÿªü¿Èm{Üì5<_£IeÜ3]Mù1yV3»H YT!b£pË´ŒçЧîïý];­V‚^_×ü!SÅúÝ-º^;tŒH¶òC8—nÀX2ã'œŠ:Û×ð½þë17eq#ñŽ…$sH—ŽR ³Ê<Ð[`1|¿½°MÜ‘ê)tOÓ×]´ßm~O³)«;??ø©{ãkxZxašâ5’Ê,‰—Ì•£;£òò0Pàu$c#-n—v×Ýÿ_ðé'³òW'‹Å^³ImãŸìÑZ£±Å¬‘Æ¡]Tí YFr î9Z[Ëô½´ò¾—Ø:úþªÿ}µî[ÿ„“J<Ï<‘"[µÉómäBbS‚À2‚yôääã/m=?¿¯¼»yþ¿Ë]˯mÔv¯!Y¤‰¦T*s±J†=8ÁaÇ^iI¨©7ÓÇü˜-mn¦ÏŒ¬&Ž!£Jnd3Û#–·"¤¯VÀ¶ÈçÛƒT“æKͯ¹?Õkåê„ݢߑPñŽ›}%­ãʱ”Hc’i\¾þh„ž#'Œð@™Oóýý}6ÖîÅ5oëÎÁ©kzBivÒÞ–š×Q"ŒZÉ)›*[o–±ùAàŠoIrõßר–×ù[x¿B¸pÞ“ˆŒÎL*ăp&BWࣻ#i6’réþi5÷ßNúö`–¼½v·àeÜø§FŽ]5¬m÷Do[ÌFÓåFÏŽ#Ú–9ù‚œ‚ÞôÒ啟gø8é壽½=S~ŸwO]´5ŸÅZBZ[Ýù· mp2³%œÍ`àï`¸ƒ¿ÁÏJ÷”{ÛñÛ]µì›íÃ} ?øLí`ÒõIÖ8¢ÕÝmÖEŠs 0Qæck°U³×¦8P÷”-ו¿Ÿ*m}ö¿ Ú´š}4üÚýNš-jÂIc…g&W¸kPž[gÌU,F1ÀÚ3ž˜Ç<Šk]¼ßÉ;?ÇBSÒïËñWüµÿ†3m¼WjºÕö›~Æ'†ñm¡d‚BŸ4hÊÀ*¬Yˆ#Z«oÐ^oú³¶¾›y uã ËlÑÜÎó@ño™ZÊWDŒ³)ó~L ʰ;ñŒЕڷ—ÞìÖ¿5`ÛñõÓ} —ž'Òl&šÉg¶ò¤g’Òe•Wsmr»_' IÀ>”®¿¯[~mj mn¿åÈ-|Q¤Ü¶Èç•[ÍH¶Ëm,GsçaÃ(ù[û¤ñš¤ž‹×ðW~šwÒü?oÌ»o©YÜYËyê-¡iåpQWa!ŽN8zqPä£gµ¯ò)&ß*ÜÌèÑÛ¤Ò=ê,™Ø­§\pK*lÜT2ÀmóTôvðÞ½¾`•öþ½;üŠ÷'ð´/%«:ÉûÁ)X¬¤•^L, ‚¨C> ¿ŸŸEóJ_p“N Kú]_ËOK–[ÄúR\GË:;íµ¤Ê±³UŠá‚>V!¹r)6•ü¯øonÿ!ÿ_Šðx×@š™o$HÖ:´¶ÒÇæ¡ åg,£åÏ,qNÖÓÑyë¶žvø?†ÿqψü4ð<÷¥ûB<3Ftù^]‘ýá${7ª®ÿâ þü‹t—¯—kßeªü<‡¯é÷«éê»™-&¶ƒVTŽþ¥ºÛq›tŽìcù‡–I•Ç;Àq‘’â”lº+5ò·_;+éé`mÝËíkøùytünnXiYßêr-Ò5­û F#¾7ب~}Ø+„mÎsÍD£ÍMÁùþ7oñ~_¨£hÉ5Ñ/ÀÈÔ|ÝŽû ‰t«o³í s ŠUA>^àU²€‚¹æ´“æ©)÷ÿ?øpZG—Îå{/ êI{gy5¶÷Ì-íí64¢8âÆÆov“€yä–”¢¹¿½ø·¿}úѾ^©/óÿEË[$:ÚZ[ K4¹Ó„ˆ±oF"U/‰  ÈÙŒg¦Ûo™îí’{vwwßðÚ-µüM×£ù·ð]Ì6“+k/-Óý’Ycy4S4 a¤,ËómÁl€>÷¡{ZÛ§ü•Eöþ»õ›-oÚßðß×Ü2óÀ÷7¶ïis«ÆlÃ\K-¦9fV Koù”y…À<Œ±Ç$mÚÉz&ž¾vI_Nö)¶ïç¿ÝþzÿÀ4¼K¢6«¨èÅco*Úb×À å‘Ô†tŒñýÓô$t©Íäþû«|Öéô·™-~ï“Óòiþ|ïП[Ñîï/íïtëø¬çŠ-Ûη3+#•'2áAƒ’:ðj%©G¤•Ÿãþl»ÚÝÓ¹CKðØ4uÓþßæmº¶¸ó<œ©X†1»¿•×¶îøçW+ÉK³“ûù¿+™ÛF»«ñ…¤Õ/¦»†êÕE„¹´31ù¸e*èÊù“!”‚6ûñšM^Ýßâ’ý>w.ÿ—ëÔMOFÕVæݬ³éòæ[»Ä3qäºneÞ¥‰$½žrsÍ[¼rZ+5ø¯òô&Ö…ž÷aอíuhn/^S«@c¸tŒ!Í+;¯'2œpÉ56´#¥šk䕽uW)?ÿ_ÒЉ¼'ª¶¡ªúÍ£j‘:bC`ÞO–±ÈLb\ç2±'w§žÍµÖ÷ùòíÿ€ù“m}6þ¼ÿBŽ£ðà^[˜Mý¬ždN®÷V>sG#»»ÉÎD³ú…^xÍJVÙrúû¶Òý´íÕü©¶ï}Ýý5òòéÿ{7>º¼³{+½Z´G¹–Ùc´*èóov2à €µ(û¼­î¬¾I§øÛóuÑÿ_ðM;-“ÆWš«ÆÉ‰.yI1ØíHןîŸÅÃÝRó†—ù7Óº¿Q5ð®Ëüí÷&þÿ"Iü;æý¯ý+iÔa¾ÿW÷|¿/äëÎ|¾¾ý8¢>ï/•ÿo󵿚H¥'…ï£×S„kÙní·Ú–ÀI½ç¿Ö0ÛŒ ƒYJ/ÙÙvqõZ[ÑèµÛÈ«ûÍ÷iú5úy~%}Ã:Ìz]“ßêpÛêši´´ò-ãÕ™Wq|» (½6ŽñÑ7ïI§«·Üöó"=Z&ßõø“êºV§tu§H÷Kso „¹Fc?ë$ÆxÿXÜuù83“ºkG-­§þ•÷«õ³MÆÍ=Rvÿô¢YO ,w¢xî¶¢Þ•Ëè ¿“·9üsø{Òšs‹Mð)\#hÚÝ-ø-¼*aÕôPû¤¶Ól2K¢ym)’~PÒ¸ù‡\qr´åQ¾¿­îým§š~BÚ1K»ýæ“ùy‹Ã:¬6–Vñk6 inÁšÄ’ª“l¿¼ÃüŒ®Ãµ+Ë›™ïk?>ÿ;¤ûyËT¶ßñþË Tlêä–[y¥o'¤Žw™ˆ¸ Î@Â=h¡Ê–Ëÿ‘åÿ‚)^Wowþwÿ€R_ê‚ûU´Žú´ÍB.iÛt’–wuCæ „,¸ÜUÈ8ã0IAF[&¿øµ¶þeɵ.hï¯ÈeçÃqss,Ÿn´MÆ}³}‡uÉYÐ+Ì_,ª` ¨^-7åó÷“»óÓ7èM•¬¿­-§‘±â={‹}ZâÌ™n®í¡ŠÆÊ’'fI7ŽƒtþùÅKNÖZ{Éß¶Éþ ç°ãekì“^¿å}¿Ãøwv“·œ,^ÒHBÎÌ 7žAn;–ç¥TýæÜtÚÞVÛôÓÈP¼m}úùßMJ“èìÏ Ëk–K} R[‰WNm…ÎSÍûÙ@A£i¥$¥ÌžÒÑþ–ûÞ÷ßÈ#îÛËoø?ÒLðdZbÛGmxÞMµÇšŠÑäãì¤ç¯³lw¢§¾šî¤¿ð)_ðØ#§àþïó ±ð¤àˆn&Ú–)c¼»AóR$c´—sdrxÛß½ó^n§VÛùr´¿ßÏîMiËÒß‹zþ ¾ðdrx‚ãV†=*Spé+ Í4M:2¨_Ý˽Jp Œ†ÁÉö¬Z§(¯?'¯üÃBïv›ò)iþ Ô®´3ûcP†Í:Ò8í l w7>f]„œÄ££½Av¨çïò¶½<îúöùÂW+Û_øw§©5ç‚nîƒÌÚ¥ªßO4“Mt–L¯2¢ƒ,¡â!cüÌ' Ž*"”Z¶ßŽí¿–»4ö^e6ÝÛòôÑNúoéi§ð[Én.¥„hî᜴gŽy7§pÚÊ@Á9Ÿ–•šµ´Ò?|v~ëñ@´ûïú5ÿšËÂ×CZƒWÔõ8®oauɆÔÂŒ‹ˆ«´»`æVbsè0*“Qm¥½ÿ_þGñÜ–´Kµ­ýyþ…‹M—Æwº³ÆÉ’‰.yI1ØíHןîŸÅCÝŒ¼ßáe“};«õõqò_ço¹7÷ùôP@E?X?ëâý´-p8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[TH»23„òönIÆò@;X62ôô¨˜ºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@—pòEæUE•ŠÈäáX7`ô¤´ÀàXAo©Fcµ’QmŒL¯Îùçugù¾Q•ÆkDÔe¢Ñ;¯üÇð\½v¿]á§%w»Nÿ7Íùß§^ÛM{ Þj3BÿÞüMZàZLÐ<‚&¶†å¶páI¿‡#8“‹PIoi/Fåuý.åÞíö÷~vÜ«qà‹Û}Æ-.Ám§m1#Ô<—Œ=ì±F-•rUe°+彤­ðÝíÚë×TõÕ÷¹*ö]ýïÇúù4À÷-æ‘rÖ Î-õ%´Ú’1‹nØàýØkœž¦³¨›§$·²·þM÷o§“·qÅÚIùë÷_q𦠷Z|ÒhÉ%á¶Ó•ïsx3.æ-¸’»y\çn=+Y»Ô“‹µÜýcoÏR-h%Ù5oÿ-Iáû¯ìHìO…1rdQ¨Þ,VSK{ÄȆV!‰|Þ®@cš‡gk+.Ý¿%ª¾ïæËÕ7­ß+ÿZl­äŠ—>Ô[D³I´!yuå¤{͹’Ü´™„“•Pä|Ÿw8 ¥¤Óÿ¿áßÏ_ÆÚ‹§•Þž¿†ÿð u_ j·õ-ô—²Ã6¤&ý6)„pçvþ7GëåðzTÁYE=µüß2wû“wß[ Ûð·—»k~ŸŽç[ èQiÞ¢l죴Óî ƒ <€É¼áNw`¦[©ãž*“´Zóvô²û¶Ø›|/­µûÍ¿³[ÿÏ9?ð"_þ*‘Aökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPökùç'þKÿÅPd†(Ú]OŸæy‚êÁb:@OLÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰7'ëý|Cÿ£ d´P@P@u+øôèRIRWß V%ÜÅ@z[[ûa¿è«ÿà ÿ…@Û ÿ@_ÿ_ü(ºþØoújÿøÿáEÐöÃÐ#WÿÀÿ .€?¶þ¿þ¿øQtý°ßôÕÿðÿ‹ í†ÿ F¯ÿ€/þ]l7ý5üð¢èûa¿è«ÿà ÿ…@Û ÿ@_ÿ_ü(ºþØoújÿøÿáEÐöÃÐ#WÿÀÿ .€?¶þ¿þ¿øQtý°ßôÕÿðÿ‹ í†ÿ F¯ÿ€/þ]l7ý5üð¢èûa¿è«ÿà ÿ…@Û ÿ@_ÿ_ü(ºþØoújÿøÿáEÐöÃÐ#WÿÀÿ .€?¶þ¿þ¿øQtý°ßôÕÿðÿ‹ í†ÿ F¯ÿ€/þ]l7ý5üð¢èûa¿è«ÿà ÿ…@Û ÿ@_ÿ_ü(ºþØoújÿøÿáEÐöÃÐ#WÿÀÿ .€?¶þ¿þ¿øQtý°ßôÕÿðÿ‹ í†ÿ F¯ÿ€/þ]l7ý5üð¢èûa¿è«ÿà ÿ…@Û ÿ@_ÿ_ü(ºþØoújÿøÿáEÐöÃÐ#WÿÀÿ .€?¶þ¿þ¿øQtý°ßôÕÿðÿ‹ í†ÿ F¯ÿ€/þ]‡Y*2t\}lž—2?·ýõoüz9ìIk«-Åä¿a¿…ç}ˆÓ[˜×8'©öþs!'ëý|Cÿ£¨ h€ñÇüyê¿ö·ÿÒv­¡ÐF÷…¿ãå¿ìcÿ¢Ú¢@ÉúÁÿ_ÿèŨ­}ýh³ù~féá‡n쬑S?†ìþp3°¤ùUÊÞ&´ÓõYì¯VEòÒ&ŒÅÌó3ùŸ*ÆŠXàFOã=1Y§uó·àÿêå5oëÎ×ÅZ;K -ĤJ‰´¾Z—ª³íÚŒAV üÃŽE ¥+þ»wù úümòÔu—‰´›Øl涸Ç}/“lío" [a—*26ƒÏNÎxª³¿/]_É_=Яdßo×Oë·S^€ Ì×>þ—ÿa+ý R{ÙR € ( € ( € ( € ( € ( € ( € ( € ( € ( €!º$DH8 ô4»Áø‡âG‡¼7©?[Õ§´¹ c[ÎC)èC Ž£ õu¨ .M׈<902íw‘ÔJ¬ŒˆžU°TûïS!—§ëý|Cÿ£¬D´Àxãþ<õ_û [ÿé;VÐè#{Âßñòßö ±ÿÑmQ Fäý`ÿ¯ˆôbÔ ­­éí©éÏmÿg“|rÇ&ÍÁ]]r¼deFFFFyi©8» ²jÌÁ¾ðýÿ›qy¨éó_Jñüí§·”ŠÂì_7z82H㨵¶óül´ù/;ÝùYß¿§ë¯ø Îõíü–ÚŠÝ™´ëço)¥ŸQÓ…ÅÎôE]É6ðW!Aä6NNiÉ'Ei{úëùëä» ³ð7þ–æýŽ•ua§iVÚ†Èìo܃ö”T+ŽOÉÎ#=1Þ®Ræ¨åÓ]?®ÂJѲ5jFPf¹÷ô¿û [ÿèb“ØÊP@P@P@P@P@P@P@P@P@C[¿´ÓlL÷Ó¤“´3¤ƒ€=iÅj7ÞÔµ´¸ŸO—ζy“ã}Ô)êtˆ5[GÅ:"ØÜ¤Æ9e,¶cj™43b~°×Ä?ú1jÄK@Ž?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕnOÖúø‡ÿF-@Éh € ( €óÅm¶I^$ÁùZLpqÛ=ñš@'öÌóùmÿ}%¨ûfùü¶ÿ¾’ŽTý³üþ[ßIG*þÙƒþ-¿ï¤£•lÁÿ?–ß÷ÒQÊ€?¶`ÿŸËoûé(å@Û0Ïå·ýô”r í˜?çòÛþúJ9PöÌóùmÿ}%¨ûfùü¶ÿ¾’ŽTý³üþ[ßIG*þÙƒþ-¿ï¤£•lÁÿ?–ß÷ÒQÊ€?¶`ÿŸËoûé(å@Û0Ïå·ýô”r í˜?çòÛþúJ9PöÌóùmÿ}%¨ûfùü¶ÿ¾’ŽTý³üþ[ßIG*þÙƒþ-¿ï¤£•lÁÿ?–ß÷ÒQÊ€?¶`ÿŸËoûé(å@Û0Ïå·ýô”r í˜?çòÛþúJ9PöÌóùmÿ}%¨ûfùü¶ÿ¾’ŽTý³üþ[ßIG*þÙƒþ-¿ï¤£•lÁÿ?–ß÷ÒQÊ€?¶`ÿŸËoûé(å@Û0Ïå·ýô”r í˜?çòÛþúJ9PöÌóùmÿ}%¨ûfùü¶ÿ¾’ŽTý³üþ[ßIG*þÙƒþ-¿ï¤£•lÁÿ?–ß÷ÒQÊ€?¶`ÿŸËoûé(å@Û0Ïå·ýô”r í˜?çòÛþúJ9PöÌóùmÿ}%¨G«Dò*GwnÎÄ P’{b‹ #Ÿ¬õñþŒZ`K@Ž?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕnOÖúø‡ÿF-@Êú΢ºVž×mo5Î8Ö(vïvwTP7:°êE4›v@ÚZ²Œ^*Ò’ÙäÕ.#Ñž)ŒC¨ML¯´62©Ê²·ÊOëKM,÷ýŸâÝéý?ëðeÙ5­*;Ñe&§d—e<ÁN‚B¸Îí¹Î0 ϵ-¯å¿—¨.–ë·™·ˆ4[¨{]^ÂhQYÚHîQ•Uq¸’†}2=iÛúõخȒûZÒ´èÌ—ú¢+ˆËM: Fà¹'®9ǧ4u·P[]šÎ—ÓC&¥f’Û¡’TiÔ4h%˜g€29>¢•ÒWþ»~jÀº[©OEñ6«=ÇÙ®­Z$ºû,¥ÂºÜ7–®v‘Ôòxû¦šNÉ÷¿àÚÒmv·âKâÒeÓ¢•HßPYd0/È#¸¤ö¢ÿ„{Dÿ >Ÿÿ€Éþ6@ðhŸôÓÿð?‹ øG´Oúéÿø ŸáEü#Ú'ýôÿüOð¢Èþíþ€úþ'øQdÿö‰ÿ@}?ÿ“ü(²ÿ„{Dÿ >Ÿÿ€ÉþYÂ=¢ÐOÿÀdÿ ,€?áÑ?è§ÿà2…@ðhŸôÓÿð?‹ øG´Oúéÿø ŸáEü#Ú'ýôÿüOð¢Èþíþ€úþ'øQdÿö‰ÿ@}?ÿ“ü(²ÿ„{Dÿ >Ÿÿ€ÉþYÂ=¢ÐOÿÀdÿ ,€?áÑ?è§ÿà2…@ðhŸôÓÿð?‹ øG´Oúéÿø ŸáEü#Ú'ýôÿüOð¢Èþíþ€úþ'øQdÿö‰ÿ@}?ÿ“ü(²ÿ„{Dÿ >Ÿÿ€ÉþYÂ=¢ÐOÿÀdÿ ,€?áÑ?è§ÿà2…@ðhŸôÓÿð?‹ øG´Oúéÿø ŸáEü#Ú'ýôÿüOð¢Èþíþ€úþ'øQdÿö‰ÿ@}?ÿ“ü(²ÿ„{Dÿ >Ÿÿ€ÉþYÂ=¢ÐOÿÀdÿ ,€?áÑ?è§ÿà2…@ðhŸôÓÿð?‹ øG´Oúéÿø ŸáEü#Ú'ýôÿüOð¢Èþíþ€úþ'øQdÿö‰ÿ@}?ÿ“ü(²ÿ„{Dÿ >Ÿÿ€ÉþYÂ=¢ÐOÿÀdÿ ,€?áÑ?è§ÿà2…@:-K´•&µÓlà•ÚñÀªÃ<=(h ¹úÁÿ_ÿèÅ«Zà™¤Ÿi—Õïþr ´Ëê¿÷Àÿ 9PÚeõ_ûà…¨í2ú¯ýð?ÂŽTö™}WþøáG*ûL¾«ÿ|ð£•}¦_Uÿ¾øQÊ€>Ó/ªÿßü(å@i—Õïþr ´Ëê¿÷Àÿ 9PÚeõ_ûà…¨í2ú¯ýð?ÂŽTö™}WþøáG*ûL¾«ÿ|ð£•}¦_Uÿ¾øQÊ€>Ó/ªÿßü(å@i—Õïþr ´Ëê¿÷Àÿ 9PÚeõ_ûà…¨í2ú¯ýð?ÂŽTö™}WþøáG*ûL¾«ÿ|ð£•}¦_Uÿ¾øQÊ€>Ó/ªÿßü(å@i—Õïþr ´Ëê¿÷Àÿ 9PÚeõ_ûà…¨í2ú¯ýð?ÂŽTö™}WþøáG*ûL¾«ÿ|ð£•}¦_Uÿ¾øQÊ€>Ó/ªÿßü(å@i—Õïþr ´Ëê¿÷Àÿ 9PÚeõ_ûà…¨í2ú¯ýð?ÂŽTö™}WþøáG*ûL¾«ÿ|ð£•}¦_Uÿ¾øQÊ€>Ó/ªÿßü(å@i—Õïþr ]JAQÿáE'ëý|Cÿ£˜ÐãøóÕì%oÿ¤í[C ï ÇËØ6ÇÿEµD*ºí‘ÔõWPÀþ dfµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþä†Þ7WŽÖÕNU–QÅ>€8Çž«ÿa+ý'jÚox[þ>[þÁ¶?ú-ª$·âÒW×¥I&A¹›Øg%âøN4—Kð¶™sªø¡ïfÓ ÓMÄÀ¬±± $‡~@|ÙÈÈî¸rŠÀz<öÑYǽªã‰6 äã“×¹þ´µ¶›Œäl¼U;À’ÏDZÙË5ú¡ ²D“˳°UIOÌz(æ«™YË¥£oû{üºú…ùzÞ_rÿ;¦¼ŠxòýBÆ]>c›î†hÈŠlIç@ƒæG+÷e<«3È$bšÒíí§þßý'ÏË{’Þšn¿É™eTлK*Æå]÷†9 µºyâQ‚œ¶jÿ.ŸçøyŽKÞqOÏúÓñò ÿ„îÄD’>©"Ψö™3v" dò]8m§ *¬ïËm{z¦×—G×G½„ìµé®¾Ÿ×Ï áãHŒæÖ=U{Ôó<ËUXwǰ!9o3gIŒ1Î}x©rJ.]¯ïkó_Ö¶i;òõÿrñA:•µ’ÊsqåæH—cH¡ˉ ¼ª3ÉàâÚ´œ{_ðßòëboh©Ô<]rº\WÚn‡},ÜÁ2Éä…¸ä ¹”0È8®¤…7’ Å”(1ûŒFp:ƒN>ó^v&ÒýUuºþ¿ êž5ó!—û*Òô‹kèí¤R&Wa2$‘ÜYX†8Ü«‘È8æ”]Ü_GžŽÞ[¥»VëÔ‰÷KÖçG¢êɪÅ9·s[Jaš »Ñ°ª3)È`x'­;hšëú6¿@Ù´hP@P@P@P@P@P@P@P@Àxãþ<õ_û [ÿé;VÐè#{Âßñòßö ±ÿÑmQ FÆ£e£e%¤îñÅ(™-ŒöÍfÆZ‚ÏH·×.u¸l!MNê%†k¡è½9úg×jƒ«…f·R¬²\ð;Œw'úÓJÀs—>ÓæMD+ÏßÜGrÎ¥I‰Ð‚»1¸Áe›Ö„¹RK£oæ÷ÿ/ø:êÛ}UŠ©à{µ}ªæúþêàÌ&y%hþvÝrÇî€û`²JÖÓÿÚÿäŸà'v0øÍ’4}ORt·ŒEj®Ñl¡ÑÔ/ÉÎ k÷÷q×4îï{립t¿Ë«èÎ릺z–SÂP":ž ÷?lûa¹còæ?,ŒlÙ´¯ÛߌqJÊÉ[MWªní?Ÿk¾¾vù[bÞ‡¢¡Õ/§³<¸mgòŠB½€`Îs*®í®¯¸5­Ö„CÃiì“Zjz…­´ÓùòÙÄÑùR99n¨]CÈVäúœÂŠååz®ß×õÓmõwZ?ëôÒûüʶþ ±…á/{}:Úùkj’ºl‰"ÈHPH%Å› 9«M§Í׿}ý_«ÜRWÓ¦¿õò/AáÛHu›QdœÏp2–Fñ8Ïü²^ýÏá+‘ãÿ6ÿöæ;ûÊ]ŠÚo…"Òž?ìíSP·€,k-¸òš9ö @[r UPv•éëÍ[|׿Õ;éë¿ù“km¸‹áH×Mm?û[Q6¨Ñµ²ú!G ›—“‚ùËp)k£oU×®ÖôÕoþcÓ^ÎúzÿZ7ìŒmÔ5I•’íCÇ‹´24…_äàeÜe6œ1éDmm<ÖÏð^NÚƒ¿}u××úùt4­¼?in,Äo6,îeº$rÒoÜ?xØú –òVùiþ@ÖëÎä¾´»Ôžéî®ÒfK‰¬Õ—É–T+œ©`FÕà0¨È<æyW+¯ÊêÎß{߸Ûý?ëËBΟ¡ZØ>žðÉ1:}¡³‹q¡ÙÉã¯È:c¿£“r”»Ûð¿ù“míúˆÚ ©Ð®´2o³ÝyÛÛ#xó™°qެqÇçP´Q_ËoÂÖüо­÷ýJ—¾Óï4´ÓäšäD’Ï(*Ë»2‰Aæ6>ƒ­5£‹ì’ûš¢Ñ5ÜŽOYϪ®£w}{s[þÁ¶?ú-ª$èjP@P@P@P@P@P@P@P@P@P@P@P@P@p8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÐÔ ( € ( € ( € ( € ( € ( € ( € ( €0u[8õiÖw3^%°Óîç1Û^Mm¹ÖKeRLl¤à;uõ5/@'ÿ„cIõÕÿðy}ÿÇh³ÿ„cIõÕÿðy}ÿÇh³ÿ„cIõÕÿðy}ÿÇh³ÿ„cIõÕÿðy}ÿÇh³ÿ„cIõÕÿðy}ÿÇh³x{C7Á6©*+¹5ëÒ2â^ ‚Ò‹=ÃÈü#O®¯ÿƒËïþ;E˜ü#O®¯ÿƒËïþ;E˜ÏÄÍ6ßEðmýî•q«[ÝF„¤¿Û7ŽP€N@iHíÜ5@z¶˜v©Ú™î)°íþyÅÿ| -æöƒÿ<âÿ¾óûAÿžqß‹y€} ÿÏ8¿ïE¼À>Ðçœ_÷À¢Þ`h?óÎ/ûàQo0ôs¦ø ¼¨®ä FAÁw~”­Öáä?íþyÅÿ| vóë¹"²¸’4‰]#fSåŽX z¼š-„’3;½¼lÌÇ$’£$šÀq¾8ÿ=WþÂVÿúNÕ¼:Þð·ü|·ýƒlô[THÐÔ ( € ( € ( € ( € ( € ( € ( € ( €2$ÿ‘çOÿ°M÷þŽ´©`kÕPâýûkÅš]¿•¦I²Êáñ¨Øý®?¿áw®=sëSïMÿ‡ÿn£æÿ#;O:˜×îô[=F=2u•˜ØYC%"¶ …elœðrqž¦ý”§Ù7ÿ“Oü¼µÖûݨ¥8Ç¿ù#ÅzŠØ‹¹5X, ÇÍ‘-Òî'sonG–%]²`¹ÊîW#'VÍ%>UÝéÿo˦öÓ¦½÷¹ m|µùwéóÓÑ\Ýð¼·ö’é² BWµ¿Ô¯akF…™Á÷e;¶9éQe¿äOîåZ|ŸŸ!6Ýåæ¿çyAA@gÆ?ù'úýsoý©=€î-þìßõÌÿ1C*`ÇxŒè¿ð•mñ‡ØÆ›öE6Ú~ÌeÜÞgßù<ÌlÆyÆqüU1弯¿OO/žÿ/!Êö¶Öþ½/ò½¾f6¡â‡³Ö,íôô†Â¶·K9§Œ4±¸\:Db2Úãæ2(È<rœ¥ï7¿½ê­¿mUõ½þah¤­åèõéßNÚ.›]o]²Ó4û›bIÆ£¦­ÌÒIo[?žy*Ždf;·”™¬ÒIA»$㯯6µi%}º¶J½”—žž›yÿŸKê¾#¿†þ+}'źt–‚$7·×¶ñ%Ô›Ø2X\.BŒ7rNANîZ®«Në¿æ´vÓníÙGGßå·ü>»w‚3ý„ÙÆ~ÙwÓþ¾$¡|ÿ $/µ+÷7h[Rÿu×ýqäh-þ@:wý{Gÿ ŠK`8ïÇž«ÿa+ý'jÞox[þ>[þÁ¶?ú-ª$èjP@P@P@P@P@P@P@P@¯‰üC¦xoÅzeæ±r–ÐɦÞÄ…Ž79–Ôãòþ, ßð´ü%ÿAH¿ïµÿw@ð´ü%ÿAH¿ïµÿ.€?áiøKþ‚‘ßkþ4]ÂÓð—ý"ÿ¾×ühºÿ…§á/ú Eÿ}¯øÑtÿ OÂ_ô‹þû_ñ¢èþŸ„¿è)ýö¿ãEÐü-? ÐR/ûíÆ‹ 9¿‰><ðæµàíBÊÃR…çh˜ª—_›å<zóI°=R{û]:ÚY¯gH#+´8É$p=OøPÀËÿ„ŸEÿ „_¯øSºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ] ÷‰4yl§Ž;ø‹´8ùoþÅÿ æ“ÿ€W5<žApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžApÿ„±è9¤ÿàÍžAs ÄÚ•¥Ö•pQ·»º¹¼Šb°C$jª±²úwïW`?ÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/add-resource.jpg000066400000000000000000000517741203611042400315420ustar00rootroot00000000000000ÿØÿàJFIF,,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀä8"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ì|kãfð„º|I§Cr.£c–eM›U çcg;«•OH¥“C¶`½H˜qÿißQdÔü<ŒÁU£”# ‘sÔ1Yצae¤yÐ¥½¥²ª©“pÎöËdç¶zc¿$úXl59ÒR”nýIæÕÝ—OÆ·Úåt;f(2@œg®;ÅQÂñ“þ…è¿ïúÿñºá5»Kd–H& ì(6ôÈç†'ô®¯CÑŠþipG§Ù½ûølıE¼†Ým˰idð‰!‰#£ ¹aèE]Çñæg9ËšÑfü/ ?è^‹þÿ¯ÿ¥ÿ…Ý'ý ñßåÿãuœ¾ðåÌš!µÕ& ®[]%“nâ`t1FÎÜÃnÀæ«Oà&ÓUÔb{‡–ÇF´uK¯¶D»v¬e!‘™s•ÁL‚§$c”¨á¿—óôïÜŽzÍ¿ø]²пýþ_þ7Kÿ ²Oúâÿ¿ËÿÆëŠñG†m´^è+¨¤vа+st­…V@à0EbO!r'œÓKáÞ™c?Äí6Âv³Ô훸ùLÑIû—?vEƒê:Æ›Ãáù9Ôz_¨½¥KÚçIÿ ®OúEÿ—ÿÒÿÂê“þ€ßåÿãuÏE§éÖ›­ëóÍssm¥Cn¢{+}9¤ye+ÿ,îç8ÉÎ8 ÏSm¦ÚjŸt²Ç ¶¬Ü®±ÊÃlé´ÈyÁûʽ©• ìùnû\juRø]2Ð/ûü¿ünø]Ð/ûü¿ün©ëžÐ,§×¡‚òúÑtY¬–k›†YÕ㜀Çb¢W9êsŒ`g‹ü9ÑÆ¨Ì—ntd°º¾KȯÒu¸X™WnV/ÝXÂÉè2A¥ì°Ý¿?^áÍW¹/ü.y?èýþ_þ7Kÿ šOúÅÿWÿ×/o§è+ãíßJ»þаžâ×ÎI¬\Œ–EÞ=öŒ†Æ85èz,Ú$,ôøŵX5{݆ÊÓÈX-D.¢' fÜ:üÝÍÏ$èÑŠø:_¨)Íõ1árÉÿ@¿ïêÿñº_ø\’Ð /ûú¿ün±ì¼ i7‡f–îg¶ÕH}Z$YüÀñùIO( ¼­$Þ u’ÛéoÄ -9íZÇDšlÛÈ‘…o*,@OÝ6†ï›–'ØŽ–;(þ,êufgü.9?èýý_þ7Gü.)?èýý_þ7YÒø:ÆâÍÞk»é5I4¯=ÓÈ¥‹dÆP®âHþ=ýyÇj·yàŸ Úx“ZÒÒ}Z_ì­>[ÙxÓvÔ‰‘Cm9ÎçÉÚ1•À8$žËÛózÉÿápÉÿ@8¿ïêÿñº_ø\Ð/ûú¿ün³çðV’ÐÎ-低VÐF· I*:¢àf&ã÷¾pW¨ùN9àE\0ô%²üÉu*.§§ÿÂß“þ€qßÕÿãt¿ð·¤ÿ $_÷ñøÝyˆ§ ¿ªQíø±{i÷=7þìŸô‹þþ/ÿ¥ÿ…¹'ý"ÿ¿‹ÿÆëÌÅ(¥õJ=¿Ú}ÏLÿ…·'ýbÿ¿‹ÿÆèÿ…µ'ýbÿ¿‹ÿÆëÍE8QõJ=¿/m>ç¤ÿÂÙ“þ€±ßÅÿãt¿ð¶$ÿ 4_÷ñøÝy¸¥}RoÅÛO¹éðµäÿ 4_÷ñøÝ/ü-i?è ýü_þ7^p)ªQíø°öÓîz7ü-I?èýö¿ün—þœŸô‹þû_þ"¼äS…T£Ûñaí§ÜôOøZRÐ/ûíøŠ_øZ2Ð/ûíøŠóÁN¾©G·âÃÛO¹è_ð´$ÿ D_÷Úÿñ¿ð³äÿ D_÷Úÿñ碶|=5¥½óÉ|Knb‘# H1± »Š€CèêÇ /SIáh¥~_Å‚­6÷=?Oñ)º³^–Ò’qwZ"»œŒí!“œ«m˜×[§É3áfµhP1óä°ÇË”è«Ñ‰Æ2óû;’úú-BÒH¼DΗ1¥Ìbƒ{0Ê™eänùI‘>—Jîìë²?º¨ÀnÈ$È$FÒwëÁVÂŽˆI½É’ò}è¤ÙÔ–£;ˆÃc$@<ÁëøóƒÅ‰¡ã<;«k·ZCi–¯0‚'•¦äŒ7è*âOƒ|d-c¶];l0°Ð–z‘»ÌÉÉ$œ÷=«ÜîÖ¯ýsOýW$þ-ÛâiôŒéy71Á‹OÊžM蔋Ë;¾þÝÉ¥mO8EE%§õÜ9lïsËá׋œÍ§É#Èù¦„È?ß«w^ø}=¼÷†þâkfß“jJíd©/òœÈôégŒ-kžA’1oœÎîo ¥¶ªï* ¸ÜU@Ê‚<ôÍÄω,2(t‘2²‘AAkQt_×Ì™RRwlñK¯ |F¾žÞ{³q5³o‚Iµv‰²T—ùN@äz m·„> YßM}käsnón"¿E’LœÌ'$dç½zïˆ5ì=Ký¾Ù"÷óyQò*ngÁÚ£vIÁàU[_Âtø®¯ ³™Ù¼…Ò¤’üH‹€Ì6FŒ@'$ >½RÛ/ëæO°vy5ßé.¬ì涸Lì–ÈÑ×#>GƽDñ¨¿m* ›|Ïyl²;ZÇ,‚9<»wÃ(CµÒ>ñb –É u´þ¿RÖ²þ¾bú¼{ž2<=ñ#íßnóµµù~OŸý¤¾fÌçnï3;sÎ:fšÞø†èÈæù•–De:ŠVCº@~~ŒyoSÖ½;_׿±~Î6Ù¯¸ù×÷_fvãå2moœîÈ\rÎ~^gí¤WQYÝ?—vv$¾ZHðÅ#„2í ä`6Òw/0Êúôÿ•_1û÷gëÖüC©›Û¨&‡$±Aê¬Pº¨‘L‡kwÈç$ÕðÏÄuµ óÞÄ»#¹mALˆ¼ð~@äþgÖ½>èÖÖv—“ß$V×p-Ä2º²©Œ´j’>Q™cëŒnÉàIÿ š&òÚY“ù²;ÛH±Â6oÄ®WlM·k@#ŽE%šVQ_×̾¬ò« xòîö+Û”»šîySË|Œéƒ‘µ‹ä`œŒw¦ÅàÿÁ¨B(.#½,Înõ…›;ŽàùÉÉÏ®MzÚj~`·3+ÇñÏÈÎÇPÛN%Hìjí?¯Ô쿯˜{÷gŽEῈiçOˆßGdUÛ¦ ¢2­Ãh|`äç×&”øoÇæ„›ãBmÕ »V"(ÿºB®GN¥zˆ®®/¢K‹b´¸½¸²·–;’òˆË’èPR!sÃ1ÉQŽIê^/²‡Mšky& Ä^Ú]²+Ê‘ù‘Œ=TºŸÝ“œ¨ÈÜ ^©ü«úù‡°vpÂÞ:þÍþÍÙwöùõûrù]w}ÍøëÏN¼Ò·…ür÷7.—m=Ìf)å7ÊZT ¬wå†i²–(‹7ÀˆØž3nÉ’Fi\ø¾Â´hb¼¸‚{Ÿ ˤÄc‘ÃÇ„>jŸ/ªdaƒgO¯T쿯˜{÷gŸ øãû—ñïö_øþ_õ?óÏïýÏözUOø@¼Mÿ@ßüÿ^«?‰´‹g¹\º-ºÈÏ)‚O,ù`—U}»]”+eT–[”ãFÒî ëT¹¶2ÎÇ€ã8ÈÏU8È#‚0FA¯Ô]õó«Ç¹ãðx—þ¿ù?þ*”xÄ¿ô ÿÈñÿñUëšÆ¡ý“¢_ê^W›öKi'ò÷mß±Kc88Î:â³íÄVY¼«ØÒX&6Ò˜?ÜB»U+I c$f–âû ÝÇQ’+Èžê5qn–“I'ÝVbªs Ü£ÌnHç‘G×êö_×Ì>¯çžÂâ?úäxÿøªwü!"ÿ wþFÿН^†h® Žx$Ia‘C¤ˆÁ•”Œ‚ꪺ¶¡ý—¦Myåyž^Ñ‚ÛUrÀnvÁÚ‹ÌØ;TƒŒQõú—õó«ÄòÁàÐ?ÿ#GÿÅRÿÂâúÿähÿøªô+_Âtø®¯ ³™Ù¼…Ò¤’üH‹€Ì6FŒ@'$ ºúÞž“ÛFfr·*­ ë ´ ázÀXà['#FO¯Õ쿯˜}^Ï2ÿ„+Ä?ôÿÈÑÿñT£Á~ ÿ þFÿНB‹Åš5ÅŒ7–×\Ã>|¯³ÚË+8Bª–*7N0¬vœ7ÍÄêÉkp+¥»¹3o"G ŽWPF]¶&HRO p0p}~¯eý|Ãêðîp#Á~ ÿ þFÿЧkÿóáÿ‘£ÿâ«ÖkŸÕüEu¦ß_$vÍi§Ù%íÔ­rR@„ˉ°†`"cË($‘Ö¯Ô쿯˜}^'ÿn¿ÿ>ù?þ*º? xWR·Šùï­¦Q‰íbY,·(F £o$Fs’F9Þÿ„›H);%ËËäNmÝb‚IÍUT–a±‰ ~R ¹ÿ ¦ŸyS¬ñ<¶r«"M°Ýªòþg&@6n’ƒi,)ÁmcÂ猳ù%±Œ`IÚ¢Šsö>µÓo?´- 1ê-s<’ܬ¢–c#Füäàm³P…”çXx ÞÂ8â…ìbX*H4õŽY)£“÷Òd—cå‘´e˜•<ØÑEÄs§„´u¸õ>Ï幂ãtö~lñùL²)w-ÎFÓ˹þ,n4mWKÒtømíÇL‘ž°Ú¨hÔDñfmó “äleJ|Ø8#"ºÚ(¸•ׄ§Õ4Ùm%¼û=¤¿ižZf†k„”>÷UÕ|ù0ªEùŽ n¶Š(Ÿ¯Y¶£áÝNÅ7î¹´–°Ùd#€HóÜî:×+>‰y«ø–{¦Óµ>ÞêÙ£tmä‹ÍÌD´›g,ÈëQ´``Œò7]Õä ð4I¹±ìÔOz.vÙÚx‘LK ˆ¨ã|~b“ž …‡ Sõ=PÓõ)õ­'}Åìó·î„ꑼP«d4ÑäæÙ;¿ˆ§¨ê¨¢àq¾• Ò<û‹šÍlËÉ%¡šThyHe,»#cM§—süX¦ðWc§[É.uý›‹í?ÏŒ@B¹wŒÊ<µùÁQ‚ß/X‹åX#çyêü|Ãn^§á˘õ{³hó]Ák%¬‰rm-ZUùgd.gÊC³•àr8` ÑEÄsðøvêÆÇFK øRïM²û–{c$r!î;© ˜”˜€20rš ÉûúN~˨Üßÿ«ûÞoŸòuã^ûz ñµEÌjztK⓪ÉáÙµgû4) ‰¹û;Fò6U¥‘X1Þ½ðŽOnžŠsñhS2ÐÃ?Ùï!½›P‹Ï„8F™¥%Uþl,̹W€sŽ Û?& Òîìíï,Ùdžâæ{xݤ’[•˜ÄˆÅÂÄHl†Å•,5Sƒ2†UÁ+œdg¥h[|’+ÇÍä—ÏNƒp§Q““õ¦„6++·æ¾y§ùUË#6~ìȸʡ*\³)s†#  AÏ'{Ïôü*ºF¥Ñƒàî$—~p8éÆG>½:t©¡P± 3É“ÏãT!à‚H8>ÔP6ï<üØíÏoΊb9ÐJÞRAdÛ÷U“¦È*Ïþ¸'þ‚+[þ^¿íßÿiVN™ÿ «?úàŸú¬Ê*¦¥{%ÛÄšl†%vA(Y88Ïãõ«SÜ4²9 êê« +î0~GËŽvqÎ1Ä›>¹·{‹Ï‹ÍI¥Ü›ÆáûÆÆE3ZÔ챊;Ûs?™„£yÌ‹Ÿ—9éQˆ’”#ìôb¤¤¤ùµE:(¬-ÁÚ‡u ëí2Å!žñ²ätxù äg¿°P,£¡·ˆMsL̪Ää¯^„ÿJ¿›o-¼R4Óè€WŒ¥P·m·Qsü$¯q´ e‚yÁ=÷ñÀ=¸ªŠÐ–ÂDTò¶³ñ+ØàœÔNØSÏ8â¬]ö€`ÔéɦEq¼§Ì$+ÆÉÀÉç[[ô,]Y$YòV*°’3ƒŽx!qØÕ0AèAúU†º³f,Y÷üÞHÏ=yÛQK:ÜÜK*«ÛJ6È®É]T ~ÈãŸQÞÈTÿ¯Gþb¤©.»w¨´ËĆ8[|_ºi$vå6*±-ÄrtéÔð2.iúŽוo,ñ­ñA¾=¬ŸnX&à7cœ’½ e]ÛÜh:«ê–6ø´ ˜µI6çÌ|3F£…;š?îçkz‚lé–š¬šŒ×Ó;Ù£lC*7Œåœ àí r2FZŠ”ÔìÍú)“CÄAØçœ`X+G*ÿ Í×éþÂSâ¯ú Ý~ŸáGö}NëúùÖ#Ø÷Сz>”PÖ¼ þŸÐfëôÿ ?á)ñWýn¿Oð£û>§uý|ƒëì{æÄþâþTà¼þŸÐfëôÿ ?á)ñWýn¿Oð£û>§uý|ƒëì{Ôð%Ì-›ü¶á‚¹]ÃÐàŒj’¼þŸÐfëôÿ ?á)ñWýn¿Oð£û>§uý|ƒëì{ãFŽÈÌŠÅä$giÁœ?N¯ÿ„§Å_ôºý?Â¬ÙøËĶòfkÙ.P‘•‘ˆà@+ŒgÖ“ÀUKt Ýh®ÃÞ2Óõ7ò5žÎsѾ×!F$àó}+´’äƒÿO2ñUË:rƒ´‘´d¤®‹TU_ìø¿sÿ2ñTgÃýûŸü “ÿЍ(µEUþχû÷?ø'ÿGö|?ß¹ÿÀ™?øªµM’4š6ŽTWF*à þ_û>ïÜÿàLŸüUÙðÿ~çÿdÿâ¨ÚôËdY"±¶G^C,JüqVª¯ö|?ß¹ÿÀ™?øª?³áþýÏþÉÿÅRI!¹J[²Õ5Óz,꣕?˜æ«ÿgÃýûŸü “ÿŠ£û>ïÜÿàLŸüU2KFÄ‘F0ˆ¡Tg )ÕWû>ïÜÿàLŸüUÙðÿ~çÿdÿâ¨ÕWû>ïÜÿàLŸüUÙðÿ~çÿdÿâ¨jŠÃþÒð÷ýàÿÁ™ÿâêõ¼Wp,ö×2Ígl‘Þ;)ÁÇ7­5"ŠV]Ê>PAù¸^ø'B}$LJ\bxU–æWKw 'üµñSéÏ8üê–c¨GÃ* »4ªÞPÉùBŒ‘‘ž˜\óŒqFþi’BÍ‘†f’áOF?à]ÉÍ–/»Â§$gƒÉ=¿Éõ¢œPòÙ€7sŽÝN¿_SE1ÅÏúÕÿ®iÿ Šñý{Oóõûù6ç3·ó¯`¹ÿZ¿õÍ?ô\LÚŸuq&:Ï'þ†k£íQúâ>rñ5»Já£OôwBZO,‘°‚7 8ÎyéƒÒ®[iqê~.·j“Gqz‹0IK«à0’O~søÖøÒ0¤ ã!*ÄAvÁ"¦ŠÊhn’å¼ô“Í7Ìwg99ëÏ­m2wWMUºß¡¯ESÖ÷¹‡7†m.ç¶O&ÞÎOÞg2ÍFìrÏ.ÐKR Ž‹ÆHÝ^ûÂi©#\Ý1ÜJÛù1+ïùÆã¿ 1"r¥ÿ‹¨ž–ÞÎ[Y Å·‘µ•2°ô*A=À=ªy>×0Kå8p!p¡~Q—€ËŽƒÐWUäžú^'?«xFâ{¨òayæ”ù1 Ž·œ³*õãp2[*ž·Køm®¯YÌë »Ã Ëœª6[ç JŸt·ñvžŒÑ$®d çHd‘^5ef=~R1ÉÁÇLªŸáµku<´óD³J ´@¤a¨avpª>R§åôÄÞ¢Z1Þ78›¯Gk¥-Ó^Dgòã”ÀY9W€¿>òØ`H(“™¥ÑôûoÙ¿Ùlêkvf2›8·šêvŸ/×Ðð{ôo Ì–ßgf0Š”tRØÜ@ÀÀ'AJ#¸‹lVT¢ï·Fe’@b29$õïUy=Ø®ŽVڼч½a±ÉÿÍYRhË,O¦QÔ«PiÿÙ’ùÞŸsöŒîûGžþnq·>fwguéÇJδF¬Ê§QGs…JS•ù— ×"»_ ëÒÚ*Y_±hGÊz¯±ö§G£,Q$h˜DPª=§ÿe³WR©Y Ž.èìA¢¹û ‹»XŠ™ ÃüKô$ãƵ¡Ômg`‹(YHäýëøW“R”©»3º#5¡jŠ(¬ÍŠ( Š( Š( Š( Š(  v–Úœ–Þ Ô#X£O.ÜíU&,žIgkö8 ~t“3I$¯$›w3;—bv€:±èX¢‹ˆ±á "Ú? è÷[ÒòXÛ± }1@v£p¥ö8 dt$UÑk§®™wok$ lCÅ,†BË‘‘ rNIÉbÇ “»$šÈ³Òtx-d¶u¤V÷8¨·R’m9—8íÜMjËck§è÷qyV¶–)‰„‚„nXR$ð{œb®÷ø‹Ü^ÍHñÄbˆ¸ƒƒ¹ò6‘éž„(ÂEk¨‹ ÙärOòü?Îj¥´F 7Bžk1lÀC´pôÿëâ®gæ#œŽzP„;NÒìHÍPÛ€Á=qßüâŠ`r÷?ëWþ¹§þ‚+&Â%’9sÚyôcVµÏúÕÿ®iÿ ŠÌÓÕÍÿ]åÿÑNœœyšíú¡M'dÿ­ gÞ³ÇïRÑG·©Ü=”;}ž?z>ϽKEÞ§pöPìEöxýèû<~õ-{zÃÙC±Ùã÷£ìñûÔ´QíêweÄ_gÞ³ÇïRÑG·©Ü=”;}ž?z>ϽKEÞ§pöPìEöxýèû<~õ-{zÃÙC±Ùã÷£ìñûÔ´w“ŒžƒëG·©Ü=”;}ž?zkÙÃ*‘©ê¬µßOˆ¤a% Êæ)’Äã߀1Ò©Ï‘/—¼?Ê c×ü(uªw²‡c;û&Ãþ}!ÿ¿kþdØϤ?÷í¯ĂI’2á77œpOô«Ñið+±–pêT¨Â`ƒ‘È9>”½¤û’=Œ/ì›ùô‡þý¯øQý“`?åÖûö¿áWÝvHÈ6Óá§ÛcípägæýpqúÒö“î>Hö3•§ž–°¤kþ¿Ù6óéýû_ð­u)ÏÚäeklìÞe;½sŒôÿg¯jc²:€®À¡¦ç5ÔJfziz{‡"Ò’CÌk×j·§£Öý“aÿ>ÿßµÿ ³oþ®çþ¾ÛÿEEM™CHƒŒª PØÌˆ¤€AÁ4ã9ÉÚâ”b•ìAý“aÿ>ÿßµÿ ‚óN´†ßtV¶áË¢Ñæ ÓZ»¾¹š8!ñ=‹Êî«E5¶ælð9Ïj­+´š]´ŽrÌð}Iuª›œz“ItOù1f“KŽ5å­pNû½ÿ—¨Ëdž$8ÿo?ôèO§û^ÿËÔgGX-­/&ºC$ÝÄl­€¬T‚\Îs÷±Õ³$1Íok åÊ/žHPÓ 7à Ž!\“ž>nä᳆äxÉ)¸µÛñþ´:.7EtðüÃ#\Åi#|¨€lç$ç ÿëäS²l?çÒûö¿á[—g0¿9ù“¿ûþÿçß©æõýRïG°7–ÚÛcL™@—c þö6œ_O¦qÒ§6ì™—${¶in‘ɬlQ @B‘çw îýqWã·²¶Y]-ƒ´«c‹ç Êq¹€çÚx®_ÁÕlj­%ÔJ’ÒÞ)Ñ ˜É¹f ¶ð8Qž›Ž3Øìò²ªG&øÞTÚÌŒAÉŠç¨ã>„gbò½˜Y!#hÚf‚U‰ö"ɵ_v=“°F\†éŽnçæ´ÁDÛvÈTé’p q“ÇNMF6·ÍÔ²¨ÏËÏQ×òïHd”SAc#±žA\ŸéEs?ëWþ¹§þ‚+3MÿW7ýw—ÿF5iÜÿ­_úæŸúªÚš5îsu<\òªÙÎd~»”úQ T½?T)oë ú*O#Eÿ¡£ÿ&-ÿøŠ¹ýƒoö´l]ù7ù™‡nÜg9ÙŒc½G+.æ}#YYmó#Õo¥ƒ¼Ñµ¹_||¹8öÓ¯Û6!s§%¶¯q,w7&LM伃N§jŸ¡÷”W3itì®ÆÑZð'ýï¿(¿øŠ?áOú ß~QñùX\Ì¢´ÿáOú ß~QñÚµ²ŸX»‰ ªv…Af`ª9N¥ˆw$ 9X\¡EiÿÂ4Ÿô¾ü¢ÿâ*1¡[5ÃÛ®±vgDWxÃC¹U‰ HÙ V÷Ú}(åar…¯£Áyk&³ª‰,6‹‚-2˜!XÕÄ;^Fó¤±ÜÕ‹km2îò+8u»ãu,M0…£EtU–¦0Q€š#µ°ß8âŽVEiÿÂ4Ÿô¾ü¢ÿâ+>Km2/´ïÖï‡Ù®â²—÷iòÍ/—±ÕóŸ:>Gw$`àåaq”U»}"Òî{¸`ÕïžKID3±ŽQd˜ùù]O¾¹«ð'ýï¿(¿øŠ9X\ÊeÜWvPB‚:gáJJ¹a¤Zjzuµýž¯}%­ÔI4/¶1¹§<Œ‚:ÕøF“þ‚wß”_üE¬.fÁÐ_ráNÈãð­¡[5ÃÛ®±vgDWxÃC¹U‰ HÙ V÷Ú}*OøF“þ‚wß”_üE¬.ft Œÿõªüz´Ï2E¬]»Âû%UhIFÚ òpv²œÄõ_LÓôífÊ;Í?]»¸Ñ2ùYÑ]wT•ulzÑÊÂå·&Q"»nÝ»;Îs½~œTà` õïZŸð'ýï¿(¿øŠ¯{¤Zið,×Z½ôq´±ÂØÎ^GXÐqveÙçŠvlWE q‘ŒÜ–î<¸Æ0#I29(ñ‘½[i8 +`œ}ÚиÒ--'´†}^ù$»”ÃÛÞáB8•óé늱ÿÒÐNûò‹ÿˆ¡]; vj̇ûjàœ6ßÿÿXsÆaÓmâb $)ÇNk¢ÿ„i?è'}ùEÿÄS“û2j·êáP?ú7v$’دz¿i¶xãºXœÿ$ƒ× í`}zûœù)moÕ'߬ÐÈ£pªêpÅÝÔÉõÊñž3¿›ö”/ˆ5 P;!d–&•аá:†Ø‚(›Mû2ŸÄ„H]P3Ë‚ÌÁTrKîH…\4jj÷5…W£©K7šÊPÏSóûŸæO©o¼jÔæ;Yõ¶ÑZÖ âÄg -¾#t]€”‘¢ØØó¤‘ž{ÕÏøF“þ‚wß”_üEj¡edEÇiVÐ[ÙGmh‚ÙÔŒˆÀ  W ÐŽz К9.­æ…eòÉÊî†ô‚/#"CŸ™L€°R¤Æhãy´éõÈt¨õ (@o¦ºŽF™®ü¹ÔùäHјž!´æ<“¸5z­Ì7¶Ý[¾øfd°Få# àóÐÒÉ3UàžÃÒ®Pá¨ïb´ÓÖîïY¹ûMÍ»›i`?³¾DË41‹~ü|˜fž—ÿøG±ûïíVóY“wü·³o‘#ç®ß2ËjŸ™pœ/åô ¯ …¿Ùü‹H"û4F6FÊŒíÊ.>êü‹Àãå‚€<Îæ=RïIÓ¯­îîàÓu ‹ëÙnm­®§’móhXZÈ“ö|“µBª° š¬Ú·…õE–çUÌÚ%µ¬r¸X£kÉL±§—°•IŒ®»Èmª Gvk´‚mmâ··Š8`‰GjQ@ÀŒQ4Ü IâŽT®Ô0 ¬O=ÃAì@4ÃϦÜIâét»vÔ–ÁíͼmfnlcÒ¡û>ÐcÀû<çqãñ–x'ÉصýfçLŸW{ëuŸP·0ióÏoÇ µÀi2¤2«ÜCg ‚ ó‘^Ey|:ÜWú­ÚǪXé÷z,…¥(Ï ÷¢?;?#~íà*óýíÙÆ£Ž-Zä_Y–Ïí‘Òõ(ÚbBñ‡2Iu?º&@<µÚZE>©Ey{Au¦i~(–X5];[Ô­"Kû\óF²ImooùÙòŒÂàlÞÄ>âvóV/4iì5n 15[ ›CO6`%ò#³Î'* /— !†íŠr uôI †åOr up®¡€e`Êyîb©(ƒ½›PÓn.ô¨Æ²ï6±§½“¤w¨´Sj²î˜ ?w>àì Ëù8m¥kñxÃQ[Uî¯-,î/ÍóOv"ºK»& Êí”ÀiÙ•Jd+g±Epvóß6³QÙ]Þj.™u5Å­Üÿë.ådò]%`‡ rªê "³)XùA'€›QMGU¶žæúæÁ"·’ .ì¯-ÿzÆQ jw‘¸Xº6Ñ‘€ b{A+p÷ bwEG(Üʤ•õ bmÇÖ¤ ÑŸVÔ<5¡É£^xŒ5Å¥‘Ôî¦7Âf¸µùâ7‚» Ño,ÊýðFÚé.aÔ-¼@ÐBu“wí¢iÄIpöæÄDþcdÄÏÿ\ÊL„íÇ>]wA ­¼VöñG  HãBª(ÀqŠ’€<|Åâ)O—mªê±ÛÁ-Ü:{¤W®Ó%íÊafEùQmÀûIhϰgcS±›P´Ô¡½\“T]A&˜#]EœwÉ"˜vþëÌ*å~ôuz$Cko½¼QÃH8ãPªŠpb¤ ]<¯øL¼;äyþOö%æÏ´oó6ù–xßæ|û±×wÍž¼×QTãÒtØuIµH´ûDÔ&M’ݬ*%uã†|d•x'°ô«”RžN8´„Gäõ¨i¸W*êAô# ÿNŸ•)ÎÓ´€{3A óÇ=h2†R<‚;ÑKEr×?ëWþ¹§þ‚*_ÿ«¾ÿ®ïÿ£¢¹ÿZ¿õÍ?ôRøGý]÷ýwýôSÚ^Ÿª÷_×C¤¢Š(Íê×S[ë7 mªéºtío‘YCMIÎJó“ôç‡iÜÝ_Ü‘©é÷w mÉ=´$DNéðùŒF2¹ùŽpzdcjý¶i×-»n"c»vÜpyÎåÇýô>£­X [S½km~xRiÞÖ"ˆd¸Ï\1“ù +˜Ô¼8í?ÛVä<­,—š5DŒ‰÷†ÔgoË^‡©[i“B&Õ ´x¢è÷H¥S8[¦xý+Á ^µ¶¿³³B‘­“¦@Á21ód–QÎã9>n# Z\Ò§-^Çe*ð”—©&•ůÃÈâ‚îH&[0\¤-pñåIFœ—`;FFÑÆsþ´Õ.µ-eÍ®]Èî×WEoZ×Ëg[ŒË'ÍÄDÿrèÍ¿¿¶·ŽÒÖh‹sÀþ-ÒUí½ÉÛj²ÛIò–ÏNGã=Gl‘Ú¤¡¦ÎvœäÜQOÁ[¿³Û?µ¶|¨¿´þÛö/í;üŸ3÷{wnÿSòcn8Û]EV±Ô-µžKWgT}¹HlŒ0¡¿n·þÑû“7B/9‘T©œÄp¹9Æq»kc;[&šº!¦™bНo}ow=Ü0I¾KID3¤lr‹ õù]O¾¹¨ãÕ-&Õ&Ó¢yâÝ.Øœ¢t;ZLl†S°Ø ã4Ä\¢Š§«csqaÌfîÝÊI á œÔš,‘7׊¹EPEW{ëxõlL]M“F›ÖP1ÏN ‰ùû±@U·[ÿhý€É‹£œ¨ÊFäÎ RxlgÛ¹sË QEQEQEQEQEQEQE„àdçÓšZ( aÂàò Î8?ÆŠZ(–¹ÿZ¿õÍ?ôRøGý]÷ýwýõÏúÕÿ®iÿ Š—Â?êï¿ë»ÿèÇ¢žÒôýP§ºþº%Q@Ê÷í³N¹mÛqÛ¶ãƒÎw.?ï¡õjÅW¿mšuËnÛˆ˜îÝ·s¹qÿ}¨ëV(7]‘"ÓVIQæÝ™˜à&L’kí÷’ùqÞx‹C¿V¸· •±ŠMÞ|g93¾FãùãžÂŠ­²÷Ëaö‹}ûVòð0HßÈÎ㌎ÉóH>ÞÖº,«¨@#ip ,Êl}មí×>Õéwúž—j×7×1Áþ'ldàœÜà5åwÞ!µÕnš?è:}©Tô›ƒw&ùW8và–ÏUgÖÄ®hY%Õè¾óÒÀájUM¥hõnÉ/›;OµÜWZµ¥Ü»¬©/î€ §’yûƒ°Ç¾xÁÕõËk ÏFÚ€K«NÊ0ñHL‚ˬª®¼¦Ý·g†VbÃÔ±eà;½h›Í__[ˆ¦}̶'rI€@!°K ïêkFßÁú>›}ä[é0^IBVšúå¾måÆ …*pö»ó[Q¡†ÃRQ¯UÎ_Ý^½_ùU£€Œ›G/(¯Ö_äpš¼vúµý®—ª_G¤Éx÷>kËs,“olˆw‹ˆ¥à¤ã øå~Sò•ÓÒõ=abÕï ÒµmJëS`¾Wž(˜ˆ#„ÉäÄv†-l¡ 7m 1šô= óJAiiak$ 25™VŽpx`£$dñ\gœr¿>"jÞ׬´½.ÆÚökÈCG©gKª€ªûŽ[gFv°–ù6§[ 'ËJ““ó—ßµ¬e,FšÒ‹~nOÿmHƲÕ|u¢ZÁ}.Ÿs m$ ‚æ~_cd¡w•€òÎËcÌuª¹öºWоÙa}ömV;“¥oo ñGaö"MÏ Ea-eÚ¤’@8[xŽfŽëS›R—|MŠSlP²²–_³.ñ€A ™m¤¾9¶øíª‹‰®"д´žDÙæÅŠƒ)@Ç ¥Ð㎒cÆÍ!ñ—Å·ZÅiá»Ye¾‰å´Ž ò» i—;Täà¢ç¦|·<W·¥ü"þ×þä?ðþE« Å’dØÞêw}’íVk¯µG"ƒäo‰^åU•Ÿ”9(ä2Õ$2øßûlÜÛÜjÒ_Ü£/’öÓ¬VĈ Œ°EÁœ wGRøËâÝ22÷~µ³ß,‘"ÜWWU݆RAáe·=pØÆá²‹ü~ÖÎÿ/HÓ×;¶n.q÷ö瑜f,ôÎÇé¼l\CÚ”~è‡ö¿÷!ÿ€/ò.ZÇâ]š•…¾­®É¥»Ý<ŸoócWi6WO?£!ŒkÎᜀÛw-íHþÐòžL ²Äë´žÌq´c¹Î=ëzÖöÒþ#-Ì7†Ú^€}2;ò+>ãºÌ š=VÆLqÛ®xeÁ¬ φz[ÊgÓn®¬' ­VÞ±‘ŽF~lñŸ½Áü«\ôR”}Rkð³/“.©¢”¡ê”—ágø3¶¢¸ƒÇ¾Vò'‡YµE}¢O™À œÅ8·§¥kè>8°ÕîÎæ6Ó¯Õ¶˜.[v6©8Ëtà€yã85503Qs¦ÔãåÓÕnˆ«–ÔŒJMN+¬^Þ«u÷EQ\GžQE…A #=©h Ç$ì(HÉ÷¥¢€|§œç4RÑ@µÏúÕÿ®iÿ Š—Â?êï¿ë»ÿèǨ®Ö¯ýsOýT¾ÿW}ÿ]ßÿF=ö—§ê…=×õÐé(¢ŠW¿mšuËnÛˆ˜îÝ·s¹qÿ}¨ëV*½ûlÓ®[vÜDÇví¸àóËûè}GZ±@Q@Œía¼ñ¦‡¯*Å£´Nw4ŠƒxÉ`[¨ÇŽi—“j0\éPhúæ‘§ZÛj7?h·š>c_ô€ 2nL´`  µ³Šëõ­N×íD„ödÇ"œ¿á'0ÙëV¥¥¾ìC5À U7†ãgâ½5ËŠ¥ jj2еž‰ëº}ûßsØ\˜Úé*Š2‚µž‰êÝÓÚýï¹Üèæi´÷’Öâ)î. 1Œ¸9–^rdr§è¨"®«|¶ž¡3Å4ª,àaBìròެ};↙;ˆõYì\±ù‡ïP d@ ’xÀSÛðµ&§£ëú¢½„°Ï+@ 7öŒ¶¬À3ü»dã yÒ¸ëa+ÐjU í÷¯½\㯗â©EóÁ¥ßu÷­?;Ã×w6:–ƒáÉ´·Q ºÜ‰¾ÒÆè[sHóF 0%±€À1ÿÅì-¼oiw¨_< g£Ë$+W—Íw1#F†UÃ)q !Tþë†l|žƒ¤_Y\j+‰œ@!„Ç}$ÐKç#$)qÎXØHÎ3|gàï ø†ÿO»ñ ä°0eµ·ŒÝùI+³†ªz»meùy žê¥f5éÊ¢š^¾º§¹Áìä£ËCÅîdÓ®žKýîÂãS»‚Õó«Gl„Çp\L͘ïRdäI‘‘¸ëÛ3¬k7Z}ÎŽl¦‹Vû\¯%¿œó¿ÚD~YÞ•d0åü§'¾êî-¾ø[ɬ⻹žêÓËûL"ñK¦B½@ÊîǶ|ÇÆ0»d‹à·‚…ÇÙüëÙ'‰#y#7K»i*`@cƒ<}ù1Œ.ί­Sìÿó3öR<óR—ÃMy[Ùé±@%—û6V»·“pòdò|ÄHÔª™<‚~ÒÄŽ‡#Ì5WYŸíÚ5®×ZTz¼–‘okyí•\]3C¾2"RwÃ&Ò@%2~m úŠ|ð‚lÜuÛ·;®Í™ÎuØÙÆ?Ö>1„Û§Áo\[ÛÜA5í̈é"Ý+,«„9F`¬r?ç«c&Ñb©«hÿóe/#Êô˜-m4û KË› .í.ï%[aujé1xí@G ¾cÀ‚c*0ØÅ­N=(5jºmš´K#\,Ö—…äkhÉ#á—÷¬ãÍ„‘´*‚žœŸ¼ ›7AöíÎëócfs…v6qõŒa6‰ð; ³qÔnÜî¸66g8Q×cgÿXøÆkúÝ;ÞÏðÿ1{);â{k;©­#µŸM²ÄSÉö4{yÝ*›˜×3í!CüààîÞÚ:jÙ-¦xðØ5ÛiA~Îÿc¶Y€¹L¥ç£,¢8צöÝœá[=ì þ¾–ú¢kk6Ÿnê“]ÿiFb <¾ÇœtÈÿ\ØÇÉ·R/ƒž¿ŠÚì]ê±´QysÀâXÕc †•*„ q‰Âm.­gø˜{^çj²xzÜêÒYÅlÍc=Í…œHUÒhäwò¦9%œ¢†üðE¿_š¤ñ,:JøR1mö9'·¹†+k˜®-¼Ë˜ I¹Ú(•]2V"D¥˜Æs»>ŸÂO‡ïª>–šŒÓjè¯5§ÛÊy|²:à®lcäÚi_ >êÖâãMÔfÔ`Â<–÷É"–2A(0 Ië[ù6Ÿ[§¦ðÿ0ö2ò>y®—áòyŸtÙ¿‘¶6nèsœl~˜Îp1ŒîLn_aƒá'Ã÷ÕKMFiµ tWšÓíÈe <¾YÈp?×61òmµáŸ†ž76ÚÆ…©6 Ös)Y£ºŠá‹åžp¥w|¤ö#Í$c µÕÆÂpqI꼿Ì#FJIÜôº+:MFŠöâÊMZÁ.íÐ<ð5ʉNÜ\åAܼŸïQYz‡¼;§ù‹öߴʘýݲ—Ýœtoºzúöõâ¸éP«UÚœ[ôG}5jîÔ å莖¸‰–:dºÛ'hãÔbÀ·ù¼‹¸\³íøœæ?Ä]OZ7ñè6ÑGeIs=ÄËû„#*í’8bG°5ÃÞµÖ kº¾­¼ÒçÊh%ó-Æç g#n˜`סBÔê*µ§fº'vü´Ûæz˜l?ö}X×ÄO•Çì§y?'mïvvzwÚ¿²í>Ýÿ~Jyý>þÑ»§sÓŠ³UÞþÎ8®¥’îŽÓ?iv9Þ‡å!¹ìAéEýž§gå…Üv²gdÐH$FÁ á‡øW—'vÙâÉó6ËU95m6R.]BÑ5 “|V2‰]yåS9#ån@ì}*å!Q@˜ùç#Ž´´€``gדš(@ ‘Áö¢€9{Ÿõ«ÿ\ÓÿA/„Õß×wÿÑZÓéé$8À2mÚ(P?N?STü?c%ƒÞG"HHYK¨Ë1ìHïëùt§e/OÕ [¯ë¡µER^ý¶i×-»n"c»vÜpyÎåÇýô>£­X¬ýSQ³µ·š¯`†v‰Š#ÌŽAŒ²ž¾ãê:Õ‹[û;Ýÿd»‚ãf7yRÛž™ÇÐЊ(ªwš•µŒöÐÎÄ5ÃmOÐdþcó©œãÍ'd8ÅÉÙ+Ïõ ­P_i«¦xƒJ²†N鮢¹MÌ ý p&MèKFc!¶¶p1^Yrø—A…'yu½64·wI™îÙUƒsÁ "Bê;Š¡,¬âÕt¦Ü,®-šêáã@&\ù²á‡ÍƒÕyç#˜ñ…t¯¯XYÜÄ© Sm²Ë6çyœŒp¼Æ8Ç5Ùj^%Ðtk…·Õ5½6Æv@ëÕÒDÅrF@b2ϱ¨5ÔÐm ê:ÕüvöÀ&–ý­•±¹‚ä2‚ycëÖ¶¥ˆ­E§NM|Íéb«Ñ_º›£<âÛÖMaäjwVO3B“íÈd™ÔtŽ—o'?{ס­øKÅ—?Ùº}Ƥ—ÖëxÍm3/ˆ¥"W}¥­¸ívL@#·EÓïžÒþ Ée¶ýÜñåWŽL*ì}Ø,Ù §;¹Ç¹Î¼“à ’Ë<ϲ%f»m-…õ;UŽ`Ojtsc”Þ"ÒMéxÅé÷~g¡S6«(ÅJÓvך)ë÷Cs¦ø«@¼×§’Æ{÷¼ŽÝ®®m<íò$…<¶„¤„‚åHÚŠ£1šësâ르’æËÄf!äF×VîȦàfR$ Afäùp-_Ú¨®®ÅüT£÷5ú™ÿhÁ¿z„>æ¿'§Üy½Ÿ‰µø4vÓ®¼/¬\©óMæL’™›bï »r¡UßÄ®ârkŸ¶Õü_7ü#÷¶VzŒÐÚZ[$“ææ_¶ªòï€þQ󑹑ØnÈl…#×.çÓf²¿KÉmÒd½Y™J"ì ÂLðÆƒØƒÐÔ–wÖú„ 5¬ždk,“´Œ·„ÿ uÿKüÏ9Ôõ-oQ–2ž t³¶N,åµwät”Lì®òË#€½Ë¾C³.Çhºß5 SQÔm¼¡äj±[ßë~u¾ØZ ȶ 3£€ËøÜ ÀeÄdpA=ºîØ|ÝVÆ?í }‹u´çòùùó¹zgïZ,µ«-CQ½°§V[LÉ5´‘`1`¬¥ÔRc|2äu®SˆâÞÔ½¿Œ!²Ó.áÛ¶×€­Œ‘åT[y³Ä +«E+€îeWtŠe‡T¸—ír%Íï™ÕìîTCo’=©°†F@&Uàçst”Pã)u-B{kOÛݶ­§<÷)#[2D¬l§HÊË"ˆœù’Æ6‚zœŒ+cŸŽ-Zä_Y–Ïí‘Òõ(ÚbBñ‡2Iu?º&@<µÚZE>©EeèÐË”NdÆ‘@c2LêcS€òÞÎÙ”[…nPÖ¥GÂóKA#ª“ü{AÊ‘óÉQ¶}*×RÓ †Ê8ì6±?•æMºY0¨QX’qËJ8ù^ÜÖÐ\ù~|Ëå8’?1lqцzëMKHïñ-`[©kÎ#ØqÁn¤p?!JNmZîÂP‚—5µÝ¢ØÇIBÌ¥Q<ÇÆ3ÀMÛ²ç=³Xwzn¯>­wªZ4q^Z$öö xCÁ,rC gä ¢Éc'fMq¤Q¬q¢¢ ª£ÐN¡^Ú”÷ÐæôئðÕž–~×&‹ ••‹,fó•\¿–¹QµaË0=G5±*Ÿmo1%¶BDÐ@$—ËÜ®è£k`(Éã€EÊ)ˆãÕuIõ‹;¾d»ò5+ô#ZÕAJ»„YdDýßÌ ­×ÎÄŒaÙè7úŒ6·œº”ö–—úm@\^ÛÏwˆnca®|Ëw èvÇ…uo”c= A Ü=ÂÅÑQä 72©%A=H˜Ûqõ©(Ëõ 7Æ^jÆFø_ÝE¨yðÅ0Eˆ‰’Û÷Í7ÙãlˆHØ‚^›¸25niºf«iâF6òjMem©›cö«¹$SdlÄ™cçí-ü¸ås±JŽÒŠàõyotûoZ[ÛêK¨j)-Î%­´®1¢‘*)T}ñ0 Hló.yû˜5Km/YM/E«aîmÒÄaoµ4&ߺÞd6ä¾s’zo¯\¢€<ïÆöÚ冗»K¸ÔŒ–6í%µÊ¥ÍÔ·—O½¶´p:ª€QNdFˆy¡Bª‚¦ÀMKKЮµÛ‹ÝIî­õ‹‰VÖâVĶâæhÒããqhäÌc«Ha*ª£¼¢€8ý^ÖòÏÁš|ZÇŸ|Ú®Ÿ-Ç,‚G¿‰ÙPž|µ,Uä(QÚ¬\Bðø¾äÇôÒ\ÅÙdšÝ§´³œGt £.6åT#„Û÷“œÈHé&‚” 1-‘xìÚ·g¸i.çÄʨefvù>F+,®}ŽŸöÏk¶7é©jö÷±ÇÞŸtªÒ7,w2™²a,]#)VB²5z%OP3Mo5•¥Ì–·“ÛÉä\‹s"ÂÀäm$)#v`q‡áÝ%ü7}â Ãåé·Z„/h‘ÆÒÈ塆7‘Ø-¹ÁÉ`!ݘ†Èê(  ;WÖe´ŸKŽÙ!w¹³QhÇ YÖIŒ yjî]ˆ@wí%›ï•KšŽ™öûí&çÎòÿ³îÚçnÜù™†X¶ç<­Îyû¸ï‘¡QÃ6ÈR£‰ ³•E 3cÇrÄ’{’Mr÷6¶šQ’Ãû2Id¾y›1Ø»ÛÞy²LÞDîVM¹™¶®X•ùw Ü†+qâÙU`MiÈË921PÑã ¹/†ÏÌKáШã‚^gŠ(Ñæ}ò²¨Ûh\·©Úª2{;P”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/add-to-svnignore.jpg000066400000000000000000000377641203611042400323500ustar00rootroot00000000000000ÿØÿàJFIF,,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀü "ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ì5\OÙxoHLTšÅ. —6ÅØAÆÏ@>¼ ·q'‰­eƱáx›8ÃÙ‘ÿµ+Qßÿ ¦ÇË¿öËŽ¹Ãâ¹ïøŠßí-@*ÉÛœqø í¥II%n„_FÙ¯ãOø·Á°ÚK0Ю£¹$+Gf@éž>sŸþ¸ëÎ91ñŸÄgþ\tü?üU;\´»Öü)á[$_Ûu†ÌÌͯ±A9 ¸žÝ:WWâ½?Cñ‹XŨ¶žÕ­¬ß—¬¬ÜG¦ç]¬Þb3n%°¯jÕB”l¥™IÊú3œ-ëçþ\ôŸü?üUix‡ÃÞÓņÛC·Ck#´ó‘0˜a„Ÿ¼è dmÚrIÏü!Þ'×4‰wÚ®“4z‹HæI –~Z´°à€ 7-ƒßÑj¿/õ§ù¡^§s|X×ü¹é_ø øª|U×Oüºiø øªåd—KR÷ÖÞÙÞ Œ[$@¤#~T ¼ÍÄ…Ç;s‘ø×§Å¨I?Ž< ¡xò[I¥A;%Ĥ£Nc+N îÆ\âªtéGì Jo©ÎŠzáÿ—M/ÿ¿úôññC[?òé¦à7ÿ^ºŸÿhùZ'ö÷Ú¿´ÿµ§ò~ß»Îò~ÈÛ¶ïù¶nÆqÆqUü9ÿ>ÿ„£þC_n—ìÿnÿ]ö-¶îÏ?ë¾îîs÷x¬Ú¤¯îmÿüŠN}Ìñ7Z?òë¦à7ÿ^¬ˆ!6Ÿjþαû6ÿ/Îû!Ù¿Ûœã8çÛõ¸oÛ/‰å¾Šðê­å½Ìeî>HÎÅ‘”•Ý·<œw­ÏZÚ\hÖ6ðÍröͭɉ2`ÿ¡±þ$sèÜ®)Ê4”y¹DœÛµÌ1ñX?òë§à?ÿ^ž>"jçþ]´ïüÿëÖ†¤ivšN‰«ÇÛ êÇþ]´ÿüÿëÔƒÇÚ©ÿ—}?ÿÿúõvóHµ¼Õ¼I&©eý›N/¶ÈÛwLÀ7–[çÞ22>Q·€*Ö³g§‡uk M-JÛê{¼1ä0Æ`˜rÁ?6@É¥.Z;rŽõ;™cÇz¡ÿ—{üãO8ÔÏü»Øà8ÿm‰2|<¸Ž+Uº’=@»¯ÌL*bÿY…#`òxëWµ­N³Óµ)!·ò£·û7Ø®·±ûVñóòNÖî~P1J|”¯gsN×¹XxÛR?òÂÇÿÅH•J›·).U½É†½vå·ýùZkwGþYÛß•¬…©V¯ØSìGµŸsTk'þYÛÿß•ÿ xÕnð[ÿß•ÿ ÌZ•i{}ƒÚϹ¤5)ÏðAÿ~Wü*ÔRÏ,"Röˆ¥ŠÐŒœcÑO¨¬•«sˆ… º‹Î·&_6?(ɽv®FÀ lŽ0ÏJƼ!]#ZS”¥fËÛäÿžö_÷àÿñÊøŸXû_†uè!d?gtˆ&NÆ»öëÉh:V£o«éSjún¢úÿcÙÊþsé¬~á¸@¹é„–òº˜ißȽâïúû“ÿA޹bù¯¡ÐÕ­©©â-_oÙøƒDšÁ 1@Vå˜ÕE<@õëÓƒIu‹o¤Y.ô¯\:œ†šr®JW]sþµëšè"²l5«-JvŠÓí.ï›YV'\ŽRB¡‚6“‘ÈÈæm-b¹N7ÅÞñ—ŒcµŽömí¾âÂò?ñÏóïž`|!×Çü¾iŸ÷öOþ"½~Kø£Õ-ôò¯çO³«6…‘N}ó"ãèjÕieH+D—F2wgŒ„šðÿ—½7þþIÿÄTƒá>º?åïNÿ¿ÿÄW®ZÝÁ{ KnûÑd’"pGÌŽQ‡>Œ¤~5W׫ Ø@òð«\ò÷§ßÇÿâ*ý¯€|Qg¦ÞéðêzÚÞùhsûåä¦F¦+Ñ´ÛøµM.ÓP]aº'Epe 3ŒóƒR5Ü }›>.%åDÁåP¨cžœ_ÏëIãj½ì–†Ðÿ—­?þþ?ÿR†zÈÿ—«ûøÿüEzzÝÀ÷ÒÙ«æâ(ÒWLË9éÉFü¾•5^ªÂ–†ÚÈÿ—›ûøÿüM<|8Öü¼ØÿßoÿÄ×§Õ[[ø®î/ \5œâ ‚Æ4“lH?ÑõÚ¢ö<ô|;ÕÇü¼YßoÿÄÔƒáö¬?åâËþûþ&»‹MjÎîÃK» ñ®¦ªÖÈëóÑ™0qÕc×uéZ}v¨{t<ªùx³ÿ¾Ûÿ‰§jƒþ[ÙÿßmÿÄ×eq­Yۤ͹ä0]Ãg*¢ò²Jc ו #±=Æ+B—×j‡°Àêcþ[ÚßmÿÄÔƒÁZÿ–öŸ÷Ûñ5ÝÑG×*‡ÕàpãÁºˆÿ–Ö¿÷Óñ4ñá @Ëkoûé¿øšíi‰*Èòª‡6ÚÛ¨'ðHù†ädg#¨"®U«Àä„ïÇü¶¶ÿ¾›ü*Aákáÿ-mÿï¦ÿ 먣ë•Cêð9Aá›Ñÿ-mÿï£þbÛD¿µrèöd‘Þ ~L¤WGE/­ÔaŸ¸Ñõ»—¸¸¸ŠI\嘱çô¤ Ðÿ–þgü+¡¢­Ôah—#øâüÏøSÆp?Ž/Ìÿ…mÕY5 hç¹€³´ÖÐ,òÆ‘³°F.€ÜIøÕÎ|¡žµï®~4«ÇÛ»Z/›ñŒ¿}‹Œãýbçm£ß\.üiW·v6´_67ã~ûÇúÅÎ0Û@8ë? Þéš.›†—m£˜58ãH¿}.`~Y$Ø.6—Êî?1óDðÕÍ®§ksw£M5½Ì«kÊÚù–ÛÖØ‰BÆDhªñL~O›-¤±5Ú=õÂïÆ•xûwckEóc~1—ï±qœ¬\ã ´{ë…ß*ñöîÆÖ‹æÆüc/ßbã8ÿX¹Æip0µ½æïZ¾»¶´Fº¹ÒþÉg~ †±” ²Å³½Cy¨@ǃœq›^ÓÍ¥õìði?Ù2ÇGeˆ—÷Šd/&Ø™n Îrvr0tÞúáwãJ¼}»±µ¢ù±¿Ë÷ظÎ?Ö.q†Ú=õÂïÆ•xûwckEóc~1—ï±qœ¬\ã ´…OëM¨\Ll&O>=úŠ(µŽ ·Â쑄ú²,ê<þpøb75MmáæŽîââ_ nÒ^æVM#m±ÚͲ¬»7ùC)†wngL1Çh÷× ¿UãíÝ­ÍøÆ_¾ÅÆqþ±sŒ6Ñï®~4«ÇÛ»Z/›ñŒ¿}‹Œãýbçm¥Àæß@™ü#á{[Ý)/Ž˜°µÕƒyn\‹wˆ¼„$3ƒÉ H$à,tk¸¼Cí§ùwÞÜOs©îý&Ýüß.ƒæ6Ýðü¬¡G•ÁùW=ß\.üiW·v6´_67ã~ûÇúÅÎ0ÛG¾¸]øÒ¯nìmh¾loÆ2ýö.3õ‹œa¶€s§†Ö¥ª–Ñ¡¹këÛ9ÍÑXˆ6èöÂH[qÜÕ;íÁR1ÎN*–©á;—»–4°™´h®d6ö6ijÀnŠ :Ç81ª‡[Œã —$pÌk´{ë…ß*ñöîÆÖ‹æÆüc/ßbã8ÿX¹Æh÷× ¿UãíÝ­ÍøÆ_¾ÅÆqþ±sŒ6ÒàbëZMÄÞÓìž Ëéíü½ñ+Åp&eB?}ç¦pOÝbpFÒ2oáëļ²ŠD¶ŠÊE‚êöUÄBæUULÁI޶ƒæéá•g‚98Y0…3Ê>ÄdSè…Óü-&›¢YÁ‰ ß Ío¨ÛC"Cö«±Ge<±ÄÀ?8ÜÇ<ó¹m›¬^jZ啵֑5Ûì·¸š¯#Al©&&uL¯“:õÜ7p$×}EÎü;á{˜t;kÆÒÒ-TO¦´s²*Î$V«2î?2Œ$ÊTã<Œò/…µ mm-ƘöÒF¶ñêW 2FÚ„«qní8tmÌBÇ3n}¯ûÎIÇ¢QEÂÇ7…ç_­Ôv÷"ž´’ÜÛ$VÐ" 1ne3(%dù#ù> œ†x‹O:—ŠuH Ò~Õ|ÚMºZ^â!ö Ü…“s0uÁÁÊ~N™Æ{ª(¸YðÜ‘Xy’él/«\ÜÞZG703Ïå(Û6ƒ"I´ Øß×è—j…—ö/›¨6œŸaŸ÷_ñ+ß=Ù‡æ-”Ø ÝnÇ—òç ŸN¢‹ç‡„µ9¦ÖÝ ¼–òâ;гù–ÉÉ"H"‹vß9ð1µÈ@S á s£~¦,tt¹kí-&Ê‚\NX³HÁ³!˜ Ãq'qlu=½\|1|ºÕýÔ‰ªyò5Ó5ݬ¶±ù‘8q#íó™”4`,…QY Ï¢éóhš†›ssamcjíqf‹ÂàËä˜Þq1îc.Tà—ˆ!{z(¸|šUÅ—†µ›±òTŒXÚ½Äq}¶âY«<ï2È«»~ï¼d$nnÒÆ*ïR²ymÈ3ÌÝçþê5ßáÆÝ˜ÿc=êíQE +Æ?ò(ê_õËúŠÜ¬?ÿÈ£©×/ê([ˆè®Ö¯ýsOýWyoâìï\øNøIþÛk,Ê»þŵHX‹þïvîH=ºó²»Ÿõ«ÿ\ÓÿAÔšH×jW®Ö†}p{ÓNÀ?ìÿg°Ï†Î+é Éwö%+\ýë òrvòyüs^ccytþ!Ô™$Ôw.¼-£¼kÒÖq'îËÄÑùÎ0.«•Æù ‡ ¾’ò<—bHà{Aè++ ˆ’îÝìlg‚êyfy[2£•:²¶HBËØÄhÕl!p1bñ6».¡;C¤$¶f{«kdi"ˆÉ$>`He%‹4Dmò—hbrBe¤²×5kû¨ôÈ®¬ÓPýóNóiÒ ƒËæ#›ó1óÃoW+ÆsšÓg™u5ÔÚ‘ö‹¨Ä7RïÜò!†V&,²ãxÁàìN›ŽÆcE6ŸŸ?‡tSe[mÁ£ŽÝÅTÅŒüÓzg ÓyÚ€ÏÓü[u¨h©-¼1föŒ嶥ÂÛ3dñ–{`àrišÞ»ªXè«»N¶»Ô¬šÿòÇ(„lÛ½If2îÎp mÃ}ó§.™öÛë{ÛÝ H–î-›gwß$X(~V1g‚e#§*½7„ºgÛlmì¯t-"[H¶mß|q` ùTÅŽ”œ*ôÞvs÷¾/ÖíãÔ¯SN„XÃöØàyv^—w¾L˜NPF¤Nâ-§,×^¸Ótèu¥*7¾žÜÜ5ÄÒI´«e1»˜ÈÊÊZNpxm,¥PmCûKŽöeTšæ9O˜Ëû¼‚ÞP,ëå§MÇem;CûØ[û#NiìãX`¸y·Ë _(دåUCJ£<«“—b wÿ¸ðWŒôäÿ{îa€uÙe èL¥TUQÛ&ìšÞ§¦ßKo~ÖwZýž{«ˆ`h‚Á)•2»ccÆ®Ì[ p óvËOº¶ÓŸ-œÐI¸Ü nKù¦FV”‘år^cŒp£ „„hxÓ‘§XÚK$rOœÛðÑR@2°)|ʪ7€έ©Çáx/ÄPÛÞ\Ü‘¤ð±ò’k…Dóp;Õnp88ªSëú¸iôËe†ãX·¹d>M®RX–8œ#Î0gÖ1=@Á;wX_Ü$is§Ø²îGe7 áXÛ#1òTï#§(7•n4Ïíü½CBÒ'I$Y¥YÌö¢–Á‹– æO$"7€ZŠua­ä¶û ´7³Åo IÊгY­Ñf`ë¼`²`êTAÀc±é›.­.Ž…¤GqmèùxS ¡ò JjôÞv€]ÑÓËÑ,#Ù³m´cfÍ›p£»M‹îŽ‚íUÓmÚÓK´¶uEh`Hʦ6‚ *Œ}G°éV¨QEQEQEQEQEQEQEQEVŒäQÔ¿ë—õ¹X~1ÿ‘GRÿ®_ÔP·Ñ\ÿ­_úæŸú¨jkŸõ«ÿ\ÓÿA QE ÅÒ¼Dº¥¬o¦ÞXÙÜF’Csvð“yPŠÈÌ· §\ Ú®;@ðíþ‘ /ûÃð³ÚGo5Är3‹–)iSÊ]ÃÛ¹Ö ¶“Gž dµ‚îÆGºó_s´Z“å¡@KE·vጞ>\4ŸÝØ5”sù3"ý’Idûu¢<Ę.Na;Fá•;@ lZÆ™4“Ç£g#ÛȰ̩:“³mUaž·IâªêºìZn©¦éäÛ,×ÌÛZæàD»U‘H^é ‘v§Áäcœý'DÔìlÕ–ÌZ¤–ÂÖÂYÚê;tGÙddW-ŽT6B².^k dñ– <˜-. e$î-#ÂÃسõJÓÅzt¶×7W—ÖÑO)-ÅÌad/s˜¹Ä„pX¹ŠÐmRÖâÒJMö‰-žä7–|½ªÊ¤nè[.8À댌ñv^Ô¬aµ¼3Ïk•¡= #ìö±–ó#]Ü5±Âã0$‚1] ®{c«è¦ìÿ³ì4ç³vº¾[ËÆÔ!¾Qä¨åóóNߘZÿR°ÒàYõ ÛkHY¶ .%XÔ¶ ÆIàʄԬ%Ô%Óã½¶{Ø—|–Ë*™xä®rÌ?1ëXº¶•¬_›iíÚÚßQ‰§Ž;Ø®~ϸÛû¢Œ³Š›•°7/ÊG ‘{gu Oä>ÂöçQIb/$Ò™DÄÇåã{`†bv”nà_[Õ¢Ñ4™oæÙµ$Õ³º °$ààdàôªVþ&·–ò(%û2GöI.f¹K¥x"ÀĆÉÁÜÁN8ÃOžÓQÕ¼;§¥ÚC¡æYÜ\ÆÈ±É"‚3ýÖ“Ûžõ‹ªø:÷PÕï®ÄЬRÈeD®ŽHûU,£)“jãpÉ]Ê@'€ÐË­Âö°\i–ójÉ>â`ѲaN Þ̩׌nÉçá±fFÎ}.=M.YI¸?È¢2»·ãóÒ¹ jðZ!´±’ ™ÞkëYµ)ÜÊv¢"´ÎŽÒ) w.Ôm^T6ý}NÊÿS°šÞâÒÎThàt…o%„‰ÕË7ïUw\FT…rhÐ×´vKG]ZÄ­ã¶ar˜ÚBsó8ïZÇOáÍrk;Èg»¶»›S°û Üò¾ÆwLC(HÀ”…›#Ï–¾^’Âæêækã<>\ܘí‰R¥Ð"åˆ<ÿ¬ó8€È æ¼µ¶‘#žæžO¸®áK|ʼ׿tV¸¬]_ÅúfŸØ/´é®ȶq-êǵ۸ SˆÜ”’ؤL4««~ÃS¾K66qÞF›%|É#òÙr8o-cž¬@àÕ-;DÔíáÐlç[1o£H¡&IÙžt[yaÜP Ùd8Üï< €]Ķ_l¿Žåáµ¶³îf¸@™i¦‹ƒÌ=Î~l"µáš+ˆ#ž XdPé"0ee# ‚:‚+ˆ“ÁWæò[¿6+rgŠ$»–ܾf¼lPnO–éN@9*W¡ÍnèÖ÷zd¶ºZÛ"Û,\\¸i$¯(dQ$‡2™K¹‚ ­|Eaq®_hò\[C{o8Ž8uó&SI¸'\|Äwû¤ý$³ñ“{5½´z˜¼ž5‘m>ÓK†Mã…cŸ”ç##‚G5—>‰©Í©ßG¶Ìi÷ZµÿŸç·š¾RÁòy{0r`Æwð88Á«¤øNþÇãO–[c0»ÓçܬÛvÀ–Êýº“ãê3ŽpØÑE (¢Š(¢Š+Æ?ò(ê_õËúŠÜ¬?ÿÈ£©×/ê([ˆè®Ö¯ýsOýVEÞ³mkuöDŽâîì.ö·´…¥‘WûÄ/AÓóµ¯sþµëšè"£ðŒmeq­5Ü{Zk°ñܾ0ñì]¨óòÜt¸Ï8ijKè5X áÅ"ºhÜYŒ22;UšÓÕdÏÊ:‘ƒŽ¸'èr9ï·Ú¼×ÄúœzµÝŽ›l“5óGªF$` KnÈ|Ȭ’%|2ŠÀv’Íi5,¨ØYˆU÷$€=I¢YÒ" YÖ2Ãs( p .~£Ö¼ÞòVžïO¿ÂmÕ®ÅꃘÅí„p²’7(h–6+Ÿ¼y+·q&¡§ÞÿmyºƒiÏöè?uÿ½óÚ ¾P¹M€¹ýîìy6pÙ,=:Šóïø¢]/L†}3_†àAm%ÊÜÝ]@‘ß͈ÓlDJÊP†T1~l¶EÓªjKaö«ÍcìÖ“j×6¯r"œ¼áIfw3$i¹†0T¸î%€ìbš)м2$в0 2’¬8î úiõÄXßÜÙü;žïMºK™ ýÀ[·eÚck×V˜²©P}ÛJŒgiY뚨Òã•ukû=Ò%·Ct³Cµ ˹#yˆ“÷Sþ«™XÞŠó羸ÓÛÄ:Ïq4–ÒB’¼A$£¶ï2#'hòàÆÓ•8"§ÒoµZúÎÉõý°´wR ­<Å7œÛ…ÌFÁ–A”@8’ÊÔXêŠóÏßÞè÷Ow ¼ú+\-•Ÿ“,qfÓÌcsŠ]T±ÂJP0ùîêÞ$Ô­mõ)mõOø˜Göå“OÙû$QG1Š}»wÆ8N\•>oæ\ žƒEbéR]Á­ßiwÓ^¤6Ð\$Ó¤b@diT¯Èª»G”ã9'“Æ6¨QEQEQEQEQEQEQEQEQEVŒäQÔ¿ë—õ¹X~1ÿ‘GRÿ®_ÔP·Ñ\ÿ­_úæŸú¨ÒG‰·F쇦T⤹ÿZ¿õÍ?ôPÐ’Y‹1$žI=é(¢…W+ xÉu}<ê7ÙpÙ¬Ë)¶Ô Ä–åñ*ÆÀíÄœ.Óž ª¢³æÖ¬¡‚I‡ÚfŽ9Ì m­e›ç)È ‘À`Tœ‚*«x³FI\M1M¸0ZË*¹dWT‡mŒ IÛ“Ð6¨¬ˆüM¤Myöh®]ÎäO9`Á¹ÕY·ËËL|Üîr@ªÚ7Š­/´Ý-®¤Ùwum’˜á“ÉŽIX!“QŽá…fÉܽw ‚: +2i³ÂÓ$³yH¢YšÚEŽC#„BŒW¤‘ó)#àæªø—\¼ÑcµkM=îüéâ¶ÿi£LrUrC2ÀîÇCnÑT†£ZDZ…àòFŒèÉ ØÂ*±$»C@Û“Šªþ&ÒâHšY.c»Û}œÊaL‘¾PW÷K•l3í)9À&€5袹¿xŠÿWÔ¯m®´·µŽ]·Ï(_oN¹‘ζ•ùr IEfIâ*+«Ëfºýýžß=6b…‚”Y·¨P9c¹*@È»ñw—¨J±#Åko`ײ›….?z0Í·÷IË+ òŽ9uTW?iâ«ABO.U¹¹¼¨dtŠ8ç’5y#RÌ@ùXô +˜ÒeËÛ«SJñ›¬íû³ñ‰£ó­¤‡ÍN>dÞ£zò¹+7.zŒ‚4袊QEQEQEQEQE‡ãùu/úåýEnVŒäQÔ¿ë—õ-ÄtW?ëWþ¹§þ‚*šçýjÿ×4ÿÐEdK©\I¨K§éšmÆ¡w ,“*2Ʊ«gv dã§SÏ¡  * I¦¸ž{+‹ICÇ:à†ƒÑ—žp{T:†±¦i>_ö–£ggæçËûLëüc8ÜFq‘ùÐ2ísúV­iºDaÖ,ÌöÉo‘X•Bí²Ò²–Ú>\d‚A©è)†h–t€È‚gVuŒ°ÜÊÜËŸ¨õ nïÂ>u¥šOg-µžèí­ïìþÑ ÄBí ›×s¦ÒªùÈV †$±4dÅ`Ÿnó~ÉsùòvïÙd-q÷Ž3ùü=ë§¢‹ˆâô_ j6K.Ÿ=ä?Ù‘\ÚH¸ƒ÷³˜!·ƒo!¼8*TœÏ ‡éÞ·Óî,¤ßc1m÷Í6ž¯p^Ñ—!'ËR#S¬F[ {cÍOI"#JÛ#V` ¶ `zœ)?@}(¸ZW‡n´¸fßÃK$$Eilc¶÷2¤,ìœ TÈ8È$ôȦŠt/ ‰"†d,Œ ¤«;‚>„}35M2}F¸Z[9mæŽ%K{Ë1Ç|÷Ó;ǺFýÓ3åóœþfLçwUE)X}¸Í|÷Ÿ,Mr~ËÛ”ˆ"¯8õpì9' 3ƒò‰ï"žkˆ­n>Ípñ²Å>Àþ[Ãm<pz⦢˜·¦Î×¼½†ö2cÈâXv3ó.èA<‚A Ö¡¸ðíÕõ®®·—ðµÆ¥§ xmŠ"`͇ ]I‡þ¼àtP?€­ç¹yÝìfiZ_1®ôõ‘yeVã„aç0%ƒƒµNÞ=%‡ÛŒ×ÏyòÄ×'ì±¹H‚*óWÃ’pÃ8?(»E9+_Ý-¦™æ© ¿Ù‘Á ³ChcÊG,2ù‘·1û:FÐ2ÇŒiéšöwö/úO™ý›§5‡ú¼y™ò~~¼©éÏÞëÇ;TPEP0¢Š(¢Š(¢Š(¢Š(¢Š(¬?ÿÈ£©×/ê+r°ücÿ"Ž¥ÿ\¿¨¡n#¢¹ÿZ¿õÍ?ôIá8dÓdÕ’U ÅÙ¹ÔåŽäPAQ’Ú9ï“ÀÀÊÜÿ­_úæŸú¨iÞÀij— +Igzúgqã¨Ç½q¿i.³©Ï}ä¢òD{y­­%¸Äk¯–|µb¸pí‚ýæA$¶: )\"êïTAž²ê^G},— g4È2\´'!JHèq'i–r¶©¥^^Zê‰m \Câ{Çidf·(îŽ|Èã>\™GÊ ¹$†V=õ\;Xµyím!S­ ä[uÖ <é‰ÍŸo)‰.ß´äÂvëÆÚÚÐbÔmõx„ÆøÁ*ß,¿hy@Šáßï´˜‹ŒûÇq溪(¸wznå¸ÓcÕ/oã¿¿1O,Ëo$*ÓˆÑOÝ)Þ _“‘Ï`ÕŸ­ì×q­Üš½Î“is ÃIµô©h®cmžc´Íɇ!n€n'Òâ†(¤1¤jYœª(³ÌxîI$ú’iô\>žÆúÖÂê gÔm¥mZioØGu*çxŒK)9-ï%ùø (û&ºÚf­#^jòIŠMTx|ÉK\…!w3— 個r¥Æð6ú \ ]*Öm?[¾´¯OÐK\Í$ß½f”8!'¢Çòç®ãª( aEPEPEPEPEPEPEPEPEPEPX~1ÿ‘GRÿ®_ÔVåaøÇþEKþ¹QBÜGEsþµëšè"¡©®Ö¯ýsOýT4QE +‹¸ÖÿÄÉ¥ék}¨i·6§òDW6±±ùIݸÌÛ¸éŽiøÇN¹Žâ[ho&‚$ D[RV™bh‘Kó7š£œmÁÝ´&fðü¯åJÚæ¢o"Þ©w¶0FûwG+fÒQNvîÈ댊eŸ„ì,ty4Ø¥¹1³A"ÈÌ¥ÑáH’6c#ÉFÁœŒP4½vF‡Äº¤sYÛØ\ŸÝÌž–Þ)|²ÀòÌÜyǰ‚ji­ØDº¢[k–{MÖÞa(Ðm“>nÝ£{ nÎON†´-¼?o†¥iwss~º“3]=ÁUg5ŒÝª€6  ûÔ–š1‚úËFòöâå‰qÂÈc$aG!©ëÆ)Kã-&+í6ÜɔԣŠKy¼ÈÆá!Â~ì°—“ŽB3ÉlFþ3²OÛkks¥Ë*Ä.$†Ý˜2nÏïdQŽ£®N2\1!ðm¥´¶Öú…ôV°µ´1•à„g% ˆ£)Qòô9´<7 6:m½õ夺}·Ùa¹‹Ëi XPUƒ£)Ï–„ åxÀ$ Wþ/C¢êÚE¤×q[Y=Àº*« 7‘ç"²³,‡*È~U?| ‚ KÇ:n$1jpÍg;ÇçKÒÀ÷2†#ÌùóµŽ#ÞÜr í¼!eiflc»¼þÏ’Ø[ÜÚ–M—B!ÜÍ·xmŠ£äe(8äæfðñyVÕõ;F!¸• H÷1†fUb¨6ã{€cØß7\€A ¿‹ì’Z^öÖ°…YR?´N®êQ °Sþ¬œ’ÈPKåEY5›Í2Ò%K¦Wg[€¤©0¸@pee1“ŒŒ)äô$ºo¤Ë§C{s3O4²•Hœ¸•ÝÝ‘JåÏÎç®tlí °±·³µO.ÞÞ5Š$É;UFÉäð;Ð15Ï‹î5}NÒÞmíͱ—.£çíŽGU‹<¹ÀS±|Æî¤×:v“us©H“4-<ÙFTPvd\¶Õ&ÐI džõ¡Uu µ+6¶•d‘]ÜŽŒg#!”AÇ Ž( ÓÆöš’šm…åôòy»¢¶’ݼ¿/ËÎ_ÍØxš3ò³uÁÁ_ø°\[Û>ÌÐ=Ý”r^ª Y";J¹–ŽEä)ÆñÈ ãCMðÜ:~¦ú“ß^]Ý¿™¾Iü±»z§„E tÆ®sž*ÃàÛKh-m­õ è­akic+;À#ÎJFR£åè2rvöß\}Yd²½¶ŠËjƒ‘ï;¶N$nksÄnFyϵŸÄ:¢Á=½Ý˜µI6™Ò2‰xžd æ"¶ò«°\ ù°ÙW éê;d²±·´Œå cSµW…( :t@(/_ñ=‡†þÎÚÛÛ‰:%Ø;YÃ?^ˆûd€jÜø×N´³žêhncŠ;·²F—ˉe™Ã*³²®Œ¶â@9ÙQkYðÜ:ÏÚÓ¯,þÕmö[Ÿ³y¾‹æÂèØÆ÷åp~ns‡¿‡íþÆEss‘]Ëy Â/’4…°J‘‰]pTð}@4Áâk)<;µm×0K"B‘ÂP»HÒˆ¶‚X!Üd6ÓŒ‚F ¥}ã7NVî »24oi4°DèUQŽ]䟖HΓóôá±wTÑg»ÐcÓ­ïf-Ì©œ4Ÿ$é#0Ê•Ýòœ »AÀÀ^†#GjwÑê%¤¾_(É `ŠASŒ Eáù<¶@ 4°– ç³³¾»†&·A$q*¬8ˆÄ».I/\mÚwc+¸o[¿–‚ÞæÞI'H͸söˆà•F×à£È“ÆNåóæèð혂xD·%f»·»bÒomðˆ‚Í’AòS9$œžyâ<'a$–îe¹ÌË:á—–’å.Nxé¾5ý’{ó@ú?Šõ-Cþÿ7G™´lžy¶ÆÒ<Þ¯ï8‹÷­ÁËð>_WÙ|AÑ5*Û;ÈÁU¡T’'iÃ:Ƹ ä¡-$cì?78ÃmеðÜ6bû=õâ}‹1Ûÿ«;-ÎÌÁÊrŸ»NN_¿É¦GákxìþÆoïžÚ%E´ˆº…´ÊɰŠ”L7Ÿ—†mÀðþ¥w¨Ï¬}® ­ü‹ÑPMåï|ˆ›¡ ä³§¯àãùu/úåýEKa ‹)S©_\L÷k•äd_5¼‘Vª … q¼ Ô^1ÿ‘GRÿ®_ÔQÔŠçýjÿ×4ÿÐECS\ÿ­_úæŸú¨h¢Š(W-¤ÿÂA«iëxºÔ0«¼ŠÙ +²õÜ3ÓÒºšæ¼<Æå®7 Ü0=xèhB,ÿgx‡þ†?ð^?øº?³¼CÿCø/ü]N“Ý“µ%29¤(Ï— \Ž7 äž„äc¥Z‚k‰‘fEFŠWÜ»›iTà0sËsŒgÀÎþÎñý à¼ñtgx‡þ†?ð^?øº™m£„ß5´ Œ'E&$ÃöÆX sÓ'ŽsÓšŠëì›Ù¼±nO?f<¼ù‰ŒöÎ7gÛí@ ýâú ÿÁxÿâèþÎñý à¼ñu1ò÷~çoöfåß³ît}Øÿg;3Ž:çøªh +Êtô…í°»ý©»æÝ´€ÙéÆsß4Il5÷_[°ÉòñÒÿgx‡þ†?ð^?øºjÜ<-q¶hâ]çs3*±lÜ)a‚x:ôëV­&X¥»šiäA´Jb”ÛDi— ç Ž8ÈŸ{mw ¶Ã%¼«"†À8È'œùÖ‡Ù.çÞ_ûà× ðæG–×ÄHìîúĬÌÇ$“Y$×uwÿ“ÿ×Fþt}’çþ}åÿ¾ d¹ÿŸyïƒPÓ&š+x$žy(cRï#°UU$’z(ÏÙ.çÞ_ûàÑöKŸù÷—þø5™§ê–ú—™äGxž^3ö›9`ÎsÓÌUÏNÙÇãWho²\ÿϼ¿÷Á£ì—?óï/ýðj«%üQê–úyWó§‚YÕ€BÆÈ§>ù‘qô4¡öKŸù÷—þø4}’çþ}åÿ¾ CEù&0¿Ë*¨r‡† rÇ¡ÁüaøÇþEKþ¹QFÿ#v¹ÿ\­“Ñãùu/úåýEDtW?ëWþ¹§þ‚*šçýjÿ×4ÿÐEC@Q@Š( Š( Š( Š( Š(  _È“¯ÿØ:ãÿEµtñù?ýtoçXÞ$´žÿÂÚ½ªy—SEd ÌÈ@<OzÀ¸ñŽ&¹–Tð`Uw,ÞBHôϘ3@ŽÊŠâ·¼uÿBzÿà\?üríïО¿øÿ¢Ás¦Ö¬%Ôtß&A2O Â$+4R¬IÀ%1œg88Ås~ Ñõ/¤rý’óLò¼¸Lщð×6òI"²3*ìXr9$’x›ý½ã¯ú×ÿáÿã”oxëþ„õÿÀ¸øå0:)'†Åm§µ†oˆ—Èbua‘s•\q´ýÒËÝ®'û{Ç_ô'¯þÃÿÇ(þÞñ×ý ëÿpÿñÊV¶¢¸ŸíïО¿øÿ£û{Ç_ô'¯þÃÿÇ(°\>ÿÇŽ»ÿay?ôTUÞ]ÿÇäÿõÑ¿q¾Òõ-3MÔÿ´ìšÒ[AçHšDs´ÇÎT‘ÕOåZ·:ί%Ôφ®J3±R×PƒŒñ‘¸â›^³õ« u7ÉL“ÃpÉ Í« RFp LgÎ1Tÿµõ¯úgÿÀ¸øª?µõ¯úgÿÀ¸øªV¦°Ú†¹¤IjÚä0™ÏŠai$’§'÷AãÜ!>fÜãæÆ9ûO _¾•©És¦nÔNh´©. &h$]4aØØ+Á¸QÀÛÇWý¯­г?þÃÿÅQý¯­г?þÃÿÅSï@ºš×T·SBiÚGÕÈ-snnž@f%‰ò±ÙËùv“·Íá½ëMÕ-&û5Ì6‹Ò„¸xD]­¶®È@DÇ#ar;“¹ˆ¿Úú×ý 3ÿà\?üUÚú×ý 3ÿà\?üUnQXÚú×ý 3ÿà\?üUÚú×ý 3ÿà\?üU+ißò7kŸõÊ×ù=1ÿ‘GRÿ®_ÔRh±_¾³©ßÞX=šÜ$*ˆÒ#’W~~é>£ó¥ñüŠ:—ýrþ¢ŸP:+Ÿõ«ÿ\ÓÿA xô¿¼E,…̶ã<!p3þ7ˆç´÷äQÊÂç²Q^7ÿ Ä?óÚûò(ÿ…âùíýùr°¹ì”WÿÂÆñüöƒþüŠ?ácx‡þ{Aÿ~E¬.{%ãð±¼Cÿ= ÿ¿"øXÞ!ÿžÐß‘G+ žÉExßü,oÿÏh?ïÈ£þ7ˆç´÷äQÊÂç²Q^7ÿ Ä?óÚûò(ÿ…âùíýùr°¹ì”WÿÂÆñüöƒþüŠ?ácx‡þ{Aÿ~E¬.{%ãð±¼Cÿ= ÿ¿"øXÞ!ÿžÐß‘G+ žÉExßü,oÿÏh?ïÈ£þ7ˆç´÷äQÊÂç²Q^7ÿ Ä?óÚûò(ÿ…âùíýùr°¹ì”WÿÂÆñüöƒþüŠ?ácx‡þ{Aÿ~E¬.{%ãð±¼Cÿ= ÿ¿"øXÞ!ÿžÐß‘G+ žÉExßü,oÿÏh?ïÈ£þ7ˆç´÷äQÊÂç²Q^7ÿ Ä?óÚûò(ÿ…âùíýùr°¹ì”WÿÂÆñüöƒþüŠ?ácx‡þ{Aÿ~E¬.{%ãð±¼Cÿ= ÿ¿"øXÞ!ÿžÐß‘G+ žÉExßü,oÿÏh?ïÈ£þ7ˆç´÷äQÊÂç²VŒäQÔ¿ë—õæÿð±¼Cÿ= ÿ¿"«ßxçZÔlf³¹’†UÚÀDÇÖŸ(®ÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/add-to-svnignore.png000066400000000000000000000233621203611042400323410ustar00rootroot00000000000000‰PNG  IHDR ÙNO pHYsÄÄ•+tIMEÕ 10,i¤tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœí{˜Å™ÿß¾Ïõpf††¹Q4šõÂeDu]%1€:Ȉ¨a$K²åò¬‚MQ@eu“Õ¨ÙQÄU” ƒñBÈM$Ü™a`æ\»û÷GÓôôíô¹ô9}μŸg¨S]ýÖÛÕõíª®îª¦dYwÝ5I”çž›¯þI)#Òª©®,.ö”•uÏ€k’Íœ:uòìÙ¶}û‚JfÝu×Ü\~Ù°Ú^zi_`&ƒŽ"H6"Š"lßþíÇ·~µíoDc”,ËD]u£ èaG»/ µûÄŽ_¦F¬¡  ¿0Ÿáy® 0Ï7ÿX‹s$4IDATÿþ¢1ª«+ˆºŽ9yò”? ¶µµgÚaÉ2<žBžç»—å è!À ¶³­@56Ω1âªá—Ÿ_(Ó®"H&ùæð¡š7^Šw¯}ã§\Ö¿¦°¨°G’îÝ‹ÿ²aÛú?d ×…¥'O¶úöxK 6\HWçTûÉš7^úYãurUÏpEt"#€6@SpØC§¨Çþ{ùKnk,+ìðä^–KŒ¶··û|¡¼<>G„ .¢ü™åcoÜqÆ_A;»0?co¼ú?—ó³æù|¡ööH[Å/ðgZü8rˆ ±ÃªgÆIDAT/e./;ÜòäɦA¦(N”5¾#ȵù¥°òû©p¢#ðgZCž’qÚŽýþ¯# Ïôùý>_ Ãؾ㣌òIDATL^µÃjdŠ “)¨ÃÿøN;|ÅeÿÔƒŽ—^^Þ‚¼¶`ÈN<¬[½vîÚÑ4ûîŽsgF_?΢ä(šº[AÞÙ`ÈN^¿ýíøåÌ_—zKÞ}oÍÉc‡ûöîãE«,t1[·~²uë–ÆÆ™{éyùååPRwVwȉ´ŸE,û©º†CÓÏ0Ý òÎm"8%ƒm_”ÑA€p(DÉ,°ˆôáûgö~| (7¡áϯ+ê:|ÿL)Y Èr8 ,ÃÈ” ²LSDZ0òòEÀHlï (`9º¨˜ëÿ½î¡P($Á`0ÆöþIDAT††a9Òԣ㖔 ò³Ë~?½xÌè8–¶8>³­†ñ>I¬p¬xá™ñõý’©&OjÈ£³¼¾úrËgmþí#—zKB²<|Ôuy4#ƒÌQVžëkßÂ…À/ïý×sÇ,`tî%i0fÖönÁ&MšJÎËflh-z)™Š"q¢-Ë4€ßÝw_Ÿ§ž‚¨Æu}wß}çÍIˆ"°©{ ©A4Ð4Ͳ ËÒ ùèÿ9ùοqoÛÖ£¾ƒaæ”ßRPx®¸Ø×Í.+ƒž=Ø /8“W° Ë2 Ë2,ð,ËÒ--§à†ënm8IDAT€'Ž1,£ü½µæúúºç–/Q\²Ž'êÈí;¾"Æ)†eêëëêëëH2%L׎¢A³»a^[?ÿª*«ed†bX&DC˜¦–ÙÔ¼XÛÔ¼Añ§¾¾îƒõk[øðMõukÖ¼ÑÞ~–eÙ›ê눵1c‡³,Kbnª¯knÞ°|ùÓܼA‰d£(n°Ñ¼©¾nÇŽmË—/!™¶´œZ³æ›êë–/_BPrTÒXg¡wØÐ=…cÇŽ¼òʪzUŽä' ··Ÿ­¯¯{å•U,ËÖ××­_ÿîÂ…׫ʇ¤' HrŽÂ4Ųìš5oÔ××-\øð+¯¬Ú±c›’ÆÐ~~­IDATNsô¤¨ýTbÔ¥­O¦†aYŽe¢Aò/9Å,„$ä¢òwð¾¤Äu¼o†:È¡$ËÒ K3,KÓ4Œ¡:]Þd€Ÿ=òÞÑÀYÈtø>_Ðç÷wø~‡/àóû}þ ÏÓ㯺ƒ’ÕʧŽ;µC¯^³öÍ9\~ao 6lxÿù•KŸøÝ³ \ûΛ‘JϰfñЙ1c‡+á¾öF i†‰8ÌK FRà%xgí¦ë¯ª‰·È‹¼ÝJd¦ÓµôÓO7-^4ÙÓ«–m˜>©8¿ðÊŸ %›žzrñ«\ &ßq3Ô¸ ?}çݯ¿˜j†mIDATv®¬$‹|ÄRMïÊ.â)ØüÙ'‹Í_¶ôEá¦O*.(P¬EÜëܼh Àolzfé‹·ÿ¼aâÏo|~åÒWþû­Ñ#ÆLüùXàÞ_Ì–¢;6MŸ5fäuM¿œÞ£¬¼vÄ(³,4ö7±EëÞ Nî½øâ²O>ùø^{÷µ×ÿxâ葲ҲÚÚºW^yiïßwþxȰ=ßì€áƒ¯æ( ž|rÑ«X &ßq3 Ô¸ñ?•(Š¢dà(J¤©wÖ~|ýuÀ“ä×ßzmåÊ¥/¯zDiòÔ[áŠO@Òr¶€W§7´óÞº· ¦o 9ƒkß]­>)5Õý˜|žÒU¶>ú¿‘u£)M'\ÕŒ P Ëd„C!à8NA‰¢`úÚ·uA´¯øìuÿ´,a¡ðží$TŽçÔÖÈÏÍ[6AXbÞl/5êMoä@Hä ó5é7oÙ¢Ì汚xCûz­çÎ;ïYž<õ–Ù³6lxIa Ü2ñÖ¦¦»?\ÿ^sóÆÅ-a8¦ÓIŒŠM †r]à  åüıÂ:¯«GŒ¨6üíwßôù:x{ûÕ~ô>/p&Üûöïݵ{\7ú_„|¾“q¾Sø|F<§ÙÄó*k»TÖ:ïµrå³+W>KÒk6™ej&Y\}Õ(}ê?u¼¡{Ï*¯ýéýkóàaƒ@ ‹ÁvŸÀ³¥%Ý,X Ìž[PPPP(XôÏŸ_¹ìù•˃ʦ?¿ñ*¼üüŸÖ­Þpè±}*ûu+0³£ø¹{×vµŸêÄÏNš4¾ÜöùÑ–Ã ~7ïïû·—÷é®>gyçyV8çx!#¬ ðàKaQ ‹ðàÇëuí¼ýNKn~IDATQ¢ÈßÎÛï$‘ë~ðãõa¢äK^àYÒ‚Ežƒ «z$ ßëÑQròØ‘ž¼+.îõÒ›=àós \ôý>µW}oô5—]x7š^Òs¥ä/¿Ü ½z^г¢ÜÛÓûúËqÆ ?vìÇŽmš}÷Í&ž/óxè iGŒùè#‹®¼|PI¹Wø[otôÈщ“ëçÍ{Äp_Aàõ«Â!qç®}ú2Ì«´´ôÑG[³ú­uC`úô{F#†ÄQ£®Yð袻g6À’'ž¹¸æÒboQ'ãª:-ðÜÌ_Ü¿aÇcÆßþõnµç$Ù¨ÅèšvIDAT‘£<ÒÙZ·"çλW3’eè€?h÷{JŠÀР&S}ø©e¿_³öÍÇüÇßÿQaq& µcjûîy‹ÕÕdذaãÆ€éÓgŒ:š¦i²õÇ?þ\rñ¥¥=½š7ÅÕ» DztÀ ´û=¥Åêd}ûVÀä©·Ÿ'þlâÄŸ]tÑņvFetR8MâaÆ=·ìùU«^ؼeÓÍ&Võ©‘E)OÕíÐÌŸD:adIž?(ÒÛ>ùvèÌöÉ·_úò*˜?hxX’Åh§S8" 12ìW³<^/É&ò\;Ò•u.Dß×PPž"€ @8z°JuIDATº­ålõE4MK’´×!OIqy¯R’¶õtÛ©c-ž’â¶–³Ðo`¥uÝ•RRg¡.XÃÜ+̃Î!’¸¤{·n¥ÅÊ(n8$üæpeÿÞlô&vïÎo ßÀ¾šðég ´¼!;WMIDAT›:™·Gáþ}JŠÊ õLËÄÉõµÃ†?÷ì ^àÌìœk눞”rÕI9Ÿ€àk÷Ÿi9Û~Öç))*-÷2LçAÕ —¬~ò÷þØ U](…B4MSŒz4ÍIY K’DsÜ®ÿµúu"™¶Ö3‹¿@56Îù·_O-ë^FòÈÀeôÝYVeN´u^rÑ—8@&c‰Tôa³ã*-}+{ÀºÕþ *ì9û&‡ÂŠ•Ë7oÞüðoæV×T}þÅçõõco8åÞ»ѧº—£ù*mé|‘JKQ2ÈÔÛ×ÞØç‚žOK4ÇYY‰"…B>‰€ïŽ»þÝÿ%Îé§-EÍIDATûíó,Ð p<×yÜRi§È iÚ(J-vå%®Ng#òh!·ISíK^÷#Òv o›<ÅSØí¡‡~³qÓ†Û¦ÜöäO]TsyAQ¾Ås‹” wºÃ‰È ×ÀÑãÁ^=øP–¬íD‰ì‘îº @Ñ €rÆqLä1[ô–J‘ÈTô¥-¥ËHګȰNí[D…n®)@vß5äÔÉ“Ÿ5o“‡ñ“¦#,)-¹íŽ)õõ7>y¦õt[y¯ÒbOai÷nNç«t¸È/Š´2PtÜ3»`éâ£ÇKâµ[:î™Íq y1÷ü»ˆo)‹³-³ŸŸÔ^žieè=KкRIDATzôŒ»B;Dýè+þf,]¬ÄgÐÑ@Ó;î™]?ú eâ²Ç]2@à¹Ãß}ç¤Ï’M\;üþb;úEJeÝ{€2áòï»§Ê9A`¨Z`ßìÙ½ÿ‰Œúƒ ¹CuuùÐ!ß"0–c?ÿ|çƒLË´W’#,X¸bê,W¥q‚8 A† ‚CA!ˆƒ$%°ªêŠTùá¨ÍdrOÞŸÌQ×Á°œ3^øV«ª®Pþ’É#å™Á¢´™K¦ÎkÆëSò¨ÁþáTUWØH`ÿ¡Ì–‰éÔ37“c§,'¾¹CÊÅ@säúxE ØkIDATM ù©ÞK°aÀÚš¡AM¤™«ÖöõiÌ Áf.öÈÐ=õeŽ„ÕŽi6Q‚î*nqŽÔ9Æ<×6wL8kkgÌJIŸXc'Í¢5˜ú¬è³ë#®£Ò[¶ˆ±ÞŒÊÔÂ[rÈú˜dr‰™£áuÇ‹L ³ïƒaEŒY€1wŒ+k0’tÌ f˜Ø Xµ`†¥`˜2ánnÌòJÒ~¬¥ÜMU³SD©ªR†í@¼;ÚÁâ²e3}bK¿öâë"fÄoëö$³Öƺ$ ;ÀiÆÑÜã5nØ„–’{ à0}òM™úªl§ËU KLÓ½Ls ïfã†wtz,·¸²K«QD%¬–‘’?•IDAT:F ÞV*1ÊÏÄ$t@7ÒjhPi檵5‹˜„s1»WŒ9„ÌåÆÂ;>ÄÜïŽÖÕÃÌ‚¦Ÿ¬No=Œ¡Ï=ƒ×nª±qÎÒgæÞ3c>ÎËIR^½â5˜žúí¶a WY¥`‰/Ä…¤¤%Ì"Ì:Ò¿õ@å&ÎÕª$Ç'œÃ¬7žžÜÍÀ—}ÄAP`â (0q‚8 AÄî(âë×+á‘uuÎ8ƒ ¹Fli}½m£&e† 1‰!°Ö¯'Òúý+”ÈYMÓ ¡aÊÁ®þd„ý'‰ä*¶ºˆju‘Ÿm­±_¦Ìl•5ÓLW~±I?V#Í££ ÞIDAT—¢.Š¢@–eðx+ÚZUVUè1—¼d‰ nÀî Q ÈñÀ2æÖ1gOkæÚß]¿Õ°‹é€>¥ÍÃѼÞÕÞìâ¤ã]ĘS¾­'¨ë“ŵ»Í†4®†WŸØ,Fã³Í#Er»‹~}b6_†W踦|›a‘ÞzúSbyÙ\ÎÀމ¥Dr+‘øYMÓÈm˜ZZm­‡<^ƒ00ZKtÚP§IÉU<æäVGçǵ ¶Z]ŠØorÌ›7G3fh6„¨ÆlR­ÓÃŒ3‘ã5åôx#6e]]Ä‘uuoè,*·b>S*¨Í)ßf1f–•°ÙîqÍ!O—ÆIDATfìÁÎ}CÏãÍÉ:b߃!UVUhb 1ì ZÄÛ‰ë§ÍMÖi,ž¤éÃ1Ü,%’ÛØäpùKz\;‡éRäòÛôIÎ!G"É“ËCŒƒCA!ˆƒ ÀÄAP`â (0q‚8 A$g–ä«´UÕj i~17³¹Û$'ÝyDN±?XÏgÉ,ñN‹LíëWqåž©W‡S>s4W_aËä×U²¢@í¨+S¹»d~´Ó3ú²}¾È°ºØ\ëÂbš™å@Ìf¯®n ±f=WÅzžŽõ^1s·/þ¸rWïn1ñÇ~ÙôMS’¹!¹L Ìl—ú„Ù›û~IDAT\ëÂ0¥a8Þ%:4'Óu´¿{¼¹Û™7Xsg¶JNj0Kæ†69…¸«‹hq9L˜˜ËÄuãõ'å·gqe‘|î ìÞu0ìà¢.¢ž¸Öº0Ãðº›ðqí’d^vr·PÊs·I4;)Ä]ÃôúŽxj+áäI;÷]ú¼â²s/ëµÎ=U坨éÊmš+îÁ sçð€Ñbö­iºIÞè«Ñ[{u]}\Nänh3 ¹'œLï^®B56ÎYúÌÜ{fÌði™v&q²÷†8³ž§'÷ì=; ³`á "+wu»¨®œ'G–¥§0³n§'÷,=5©"G† î†ÔÍ8IDAT ‚CA!ˆƒ ÀÄAì>hþ`ýz%L>k„ HLb ŒHëëm5ñ(3‰I ‘ï €ò)t˜Õ4 ¦$öEý“Ç$ŸEvñG™ˆ›±u¦Vù9oÞÔêWãôa÷¼ô™¤'î9ÄåX Œ4_u<ÞŠ¶ÖC•U}âÊ,gÚ™œ9ÄiÒú6}ÌÉ”Öo¾›Í`7ÌH¿£ÆÃô–õï­ÇœE¯ÙéʤX`šiÿ³ôõ“)-&¥ë'®[ÌÅÔËÉÐë%ì,4`gG›å†ä*nŸÑ¬‰±¿’„~Gë©õvl¢`x±ˆŸÕ4MÖÖzÈã­pô»²oNX)IDATɬ¯b¦ÏÔô{$Û‰=Š8oÞœ¶ÖNUJóSƒáÜä$½Lõ¬u;ó£­ ´x‰ÑEYWçñö΢òx+ éϢ뫻f¶¹µ,¶.`¶&£˜}HëõDCì{0"¤Êª MŒšZ¨ ë‡ ÇûÓfJÃÜc¦7K`'#¤+cwÃÑÛ-ÉUðmzq‚8 A† ‚CA!ˆƒ ÀÄAP`â (0qœ˜ŸÆLž„¿f¶ƒC9"©"c#•FùË”†$\›°©¼œ*gÜVÚ¹»¾Ñì”×äS8×&%6SâŒk‹='qÑŒ®‚Ì|IDATf‹•3Àhñ ÃE5@W,¾ ©_}@»õbf^Y™M³åF4=Í5±ÖŒÙÒ&J”œs¸â²šÉZÖ+g˜-Îa½Æè*±Ö³NôµÜÎ:1g².7b'½u¾`R2ñH qWÑâ"0z fõ,¦{fìc›ðnÊý¸¨‹¨'™e9 [ƒdV×pÏúØì¸w ÓÛ\9#aãJ8FR¿ÀýÄI&³oÛ4·áŠ{00Y*'.±Ù\6#ùU4 o“´©Æ¦AûùâÂ!$c³^#梛ñ1Ö'lÁ¾M³[DÍpŽ|ͼÅåCÒƒ»ºˆ¹A¦å¼•IDATp0Ð…äˆÀ\U±2匫 !äˆÀÄ ÀÄAP`â (0q‚8ˆÝç`¬_¯„Ég‰Ili}½m£&e† 1‰!0òtPƒoVÓ4hh˜‚_„@klu5_¸üý+¬¿Áïd¾4¼‚`ö‚¤+‘æKÿýXðx+ÚZUV|E«/‚(¤øe_³ öúÖÃlV¼Ù&Ð- ¶¯„õóÇ41v²SÏ­Ö[Fûdæmz‹Yñ†j4[&Àbw‹˜˜ÙY¯Y€ öÉØt§ëkÉPHHª°ˆŸÕ4MÖÖzÈã5¸³‰Ó³îãZkå„8ƱIDATGì79æÍ›£3´BŒk²Ûj6ηGRNŒ.âȺ:·t•Ç[æŸE× èUg6ë^“ؾ-¦ñk¼Rg‘pvb“Ø÷`DH•Uš bNª·¹^€æg\“öíg×t}‰ »ƒøÒ‚$@.¼Mm âZrA`âZP`â (0q‚8 A† ‚CA!ˆƒ¸H`)|×Öð«–©5˜BãNPýàº&ÆlkÂYر™’ì\…ýcɘÀªª+Ô)4›*S$µGa&3çHùiuëkPªÈð÷ÁR>í_›Ò£ÌHۤ쬘žÇÜõf³…4@¢àuIDATWúéýêµ4ôͲ°XÃpw›vì[¶H¯“fŸêÓ¬2B&éè‹Ôâ  ýÔ`fÓbSÇÓ+‹…U4kºh2ŠYìÇn»¦¹ò.˜aý¼f;‹y®Ì¡¿ßH`Q‹¥>â]¤Äby=ö'ÝÄ<Џ¦ŠÇôÍ~á[Žu‘¢bNJÒÛŒëØÜ%0=1G kg2öSÕs°¶×µ0¦);>ÛI“Ú›á˜9¦­ˆ#%¥áv9ÚQNìš”¼åxóµ(}Ç&aœ+IJ‹ëpœ¨')±é¢azk4ç@Ýp%ÙˆeÖ÷?®"….%Ù”9ê@Ìì\Ý‚HnÁŒæ+s€Éb¦»¦IDAT!Ö»Ûw,^ËfŽˆµjH2å—ÏöÓ(ŽÅ¼³YD1:™zbXÔ†ÅnÿØÕPs–>3÷žó|`Z¼;#HúÉŠÞÊ‚…+ˆ¬²¦‹ˆ Ù É2Üß|©A!ˆƒ ÀÄAP`â (0qŒ=#ßVGÀâ{å™|ÐL>¯Ž Yͼys,¶føMŽ™Ms3ë‚$l± ïÁÄAP`â Y)°Ï¶¼3&mYgÖâr\ô6½ºÎ]9èz³4f›â²“€Y'öEr Tz0«µvÔ…ÕqZHX£MGËL]J2²Õ°‰#‘JŠ);f~*û*‰•H³67 IDAT‘®€»f§6«käa' [Ĩ# ÷Õ£Ž×ìh‘#Òp—À\R QHªÈÊQDÉrJ`ê» §ÁqvÄîê"jîÁ¬c¸Uyå ë5cÖ¦4 ’ÙWC\·—HÎà"Ù—× ØÊ74¢ ›Ù4ûiÓˆM³H®’S]Dq(°t€íU—%“]ÄyóæX¿ê ÙNÆÖÐ0%SY#HÚȘÀ̦X#H.÷`â (0q‚8 A† ‚CA!ˆƒ ÀÄAP`â (0q‚8 A† ‚CA!ˆƒ ÀÄAP`â (0q²xfÏIDAT‚8 A† ‚CA!ˆƒ ÀÄAP`â (0q‚8 A† ‚CA!ˆƒ ÀÄAP`â ™üFsסªº"Ó.8Îý‡Ô?+«údÊ“ô0«iÚ̦¹1“¡ÀÒ„,çìçÞg5M{|ÉJ}|[ë!}dnðúŸ?´™–>r²ÂYWµ–V*mž¸XZÁ ×ÕÀAq‚8 ér¤sPïÁr¥Ò(ÃåUÕ†áìB-†l<X.`­¥¬VW–z®€Ëz4µðÀþC9Óvz®i« ›8³4é/ X.“½ê²@íÐÄhŽ:³XVþIDAT—’e$0D‘ÁWÕP`¹Œþržíhš#›{e°p˜>ë!*R~Þ’e¯dqÂóô¶`¹€º.ê¯ÖÙÛŽi4v`ÿ!;ªÓ”†uá8 ,G0Ô•ÅÖlÁú¸Àä0-ÒÚtì""ˆƒ ÀÄAP`â (0qäHöç™#9 ,MÌjš–iÒ ^P–6 —…ÉaºàÅX:ÈÞÇP cgI³®r ˆƒ ÀÄAP`â (0q‚8 A† ‚CA!ˆƒ ÀÄA"¯JÕ¬]°pEf]Aœ¡nd- D6~|Ýøñu™óArª±qã˜Pá IDATN¦}@œåÿ‡Kôr»‡¹kIEND®B`‚add-to-version-control-after.png000066400000000000000000000035071203611042400345110ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images‰PNG  IHDR=3j„H pHYsÄÄ•+tIMEÕ  òî9 tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíœMhUÇÏô%ÝÄ…4n\‰" Á…´*(HhtÑV£T6‚¢ ‹ 1‚кˆˆU±Fh$bëGžA𩡆j±.ÒÖVäù±è"ÁEß{3s]L;™Ü;÷ÌywÞ›Ûü‹ðÞ{Ï=3wÎ;s†û'„ = óÙõ4ÓÐ{<>nÍi,Hm¿gçKVìbøÃ¹òíöû^”ZÎÕŸm,@è`—-üaó õÃZ(„$„¸ô¶ _íÿ©KÅÝãy^I–¨2q»0ÐÐ „‚f>ÿå½…ŸÞ>üã} ±uhxphø*¿Y?úfê(o#ù|`9—S)IDAT³’ñœlžo;A-hÏý·"ˆ! NDGÿøúÔQQuíyÖÊl6ÖêÛNP ‰¾9vÖ÷ÃvÇ¿Ðò[íN«å·;þ3ÞÝñk†E1Grœ„ãÀV[HùüØdzW>ðSªŒµ|ÛjA î½ýzHºßƒP´ƒŒ‰’$cF $]|¦ÆXæX©CÜA *ŽQ}ËÿhûA(¾=~néØo_~·º°ôëá/~yyfdïÔÈÞ©Ç>ýÛÜ')‘ò¥/cêØÌA œÀÚ=úþÌÌî–ÂâÚýïØ=NDõéÉÎükZ'4¨êg)¨ “°ô™”øÄ2p kõmÛ¯î%¤IDAT…!­œü=ªoŸ\=ID;&&ës‡ø¸äÂZ¾ ‚Úì'KQ¢ò<¯57õúôÑWϬÕO6£eT¶Ý€Œ Ü¥¬*.b‹ç îû€ˆ¢d[µ¸À]2âú[*ô·¸ô·¸ô·¸ô·¸ERî IDATô·¸ô·ë2Õê¾HÕzô·ëxýmªÉü¤°ô·òÔæ‰‚ô èo¹Î:ƒÉFÂs2è9Ðßn@ý!à òÖ( èo×[xý­45^J>ým†e~:úô·¸ô·¸ô·¸ô·¸ô·¸ô·¸‡cúÛ269ôFB˜w lç`ÀÅé¿þ6ós©ÄŠÃIM¤Â&{ª Uk™Šeu·I.gtýÕIÕ½ß §Š¸Q*}ÖßVŠÌR?ï6ffK³I£Îã§„¹œáûîýì;UöÍ•ÓßJdnNäû뾪SE¿ºY œErVj´H¹«Ø¼©ºâ\uE;ÝIDATΘ.ùW×SÚ"ªÊETŸ™¥OµI‰U6¹NÓgý­ºð:‘€šmÔ›[j1Αn”2¶%Ñ>ô7CšÌž¹R©ë"Ý'ÒD®<  \ýí‡ +ïÎ-¡hw‘o+U8‰Kè\Šåò9îl2D$0œBw7ç%>/ÉšITHÙ/>_þ™¿:K_5JÔß^s%Ñ?ûVçD_o¾ó&ÚÖHñÀ,ß&;«ŸS[RŸÇ ´ή;5Þo<×ùfúÌ;ÉOÇÌά—ÔŸ”GYÝiæj‘>d®ãe@ŽÃ#éo/´ü§]?rÃÁ³Ñ_ÿ.ÍžÛ–20y‰™oæÒWsUJò*—YƪÖIDAT“ÀîCkR•QÍUskq+ëomZO2ÕÔ¿X9šù œi0™X(-q©Òðø:#ïƒjÜc_ÏHý‹]±L¬¬‚y]°°·õ·­–ÿÂãwŽeª/þk7Ãã;U=šzÓ3äê£;jÞÎØïòruéF®SÓ¹¡®‚ÎŽÚ3¹¦üiºŽ½¸Ý¨¿uú‡±Œœ€E¬Å­¤¿%û'vÚ2ÞcúRþ•4;¸,Ñî‰1Ì×¢M+cK³§¢oc{Òß'òRfÜÊ!cß ‚ npÿ•Óʼ IEND®B`‚add-to-version-control-before.png000066400000000000000000000330041203611042400346450ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images‰PNG  IHDRwb‚¹ pHYsÄÄ•+tIMEÕ DzòtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíy¼U•ïWÝ›02˜ Òø12@4Jš„! /BµIPIxÒ>ˆHûž´ýàSúÙÍ$`„@# Cž„á1ˆH·C/‰Ë ƒÎ=í÷G%•}÷¼wUÚ§ÎïûÉç¤Î®µ×^»jתUûÔ^7Ú°þEbxíõ×W®\IàŇ?üáì³[2$ÝJý˘1û·Û®òX»ö…dC<4X±båà *Jb™ÄÅt•ျ GX±"½”¢ ë_L\ÌØ±£Ë6,Ö¬Ù@ð5€ˆˆX±â¬³ÎxaÃKeÒ‘¤Ž¦.†cìØÑcÇŽ^¹rv$ëIDATåk¯¿^¶- [X»xòÚœ˶"gŽ;öØä:b–íJG³AM%èë[—nu`‰–HY»xò1ßZýà¿äWýGW]¢Ù{Á‚ïæ[Ñ£Ö•+WŽw[ÔóÔåÉÆÀ'¿¡QWy’òråJ‚£É@r…çrmû©êë[wäQG¥_ÿï#äåhûó½À´Ž6*I\L3.XðÝ]uÉW]Ç•_¸àË“ ÖJëæRë¸c}`Å >–éyêòiþdû±+þUË×ܹä†d㤹gè SÆ;ŽÆ›¾¾uø”ß=ñd^ mön¢¯oÝØ1ûýõå5­f³¿¿¿¿<”ÊIDATÖ¿ûnÚP6xè±G¨výqÅ£ÆêkO>æ¢'âÆ›EÉWN`Ì©OÛ˜qÁ‚ï^¸àËìÅoãb¼Ñû ‘!DEQú}óÖ½³ý×–iÿuÞýWß0<ŠÆñ‡²çyó “äL\¸àËsNþ"Ýqû/Óö8°Œ ‰‹É]­«£yïîïÓ üñ«²8š{n¼]µë¶—_%¢Ïø÷Ò½kO>ú¼%qÿ+D4@4ý¼%1EDñ™;¾ó‘ÃüÅÆ ÖÑØ»W‘àñ±Ì¦wú©ïO;¿¾Ý?œè³çý'v÷ù‡s%³>ýi"Zv÷Ýé×t[O’F®¸êºä_žÊZIDATˆ¨Ž+}}ë›ò‰mÚ¸^0^Ø\ıCÏrt4­fº½Û{öXþðã=QtüQ‡oÛúŽMufž~²j—Æ9õé;¾ó‘9ÿü³äë’ü£(cébGCÚ¹NÞ^yx/³yKcáOã EŸ’#y9æœüÅÔßsáeÚh€£±§¯oÝäɇ¶šÛ/ïãfœ$Ê<ýô5nBí,±w4Íf#Ùxïîï»ë¾GÚˆ–ýö‘™Ç±ùÝ·ŒÕ-ùÀ.>µ[ð—;~ð‘“¾ù/é׌f´Íq8Á?1<ÿR"šý£Ç—^0ÕU×=K—Μ=ûž¥K“¯‰ÚsënIDAT™³g§{“¯©@²–¤’¬0û•vDLÒ½œ6s?÷%ñ vîç¾dÓÁƒGc¤¯oÝ!‡Ll6ëõ4êýzɓջª„V³AD»ï¹÷-ÿ~ÿăÜïƒÛÏÝíK;gæ±ï¾ý·Œv&ôÈŸ¶Í¶à/wþëNG“²vñäÖȽƟð@VË@þKö½™_žÜñ¸4åŸ<à|ŠJŒó>ªºRm¬ŸÒ»˜ìÀÑØÐldu1DTÛ¶9»"j5{¾ï‹n½û‡L¹÷^ýýu"1rÏqñ¨—ÜsÚI'½hTb¤7CÝÄÑHtnÜôÜ}ÇUÀјޗyò߸Ÿœô¾FŒ& ›©IDATØ…°ñ\]#6.fÉm¿àæb’9Ëp†àhLŒuàªgÖ4~TF=F/³vý«–OLq<Ðl6ÿð§g{{{¦v=þÔŸã8nµ’™£ìì5ëŸÅÂMË~`Y]ú¬”¼D³vñdË_š‚…bJù‡Åmþmý-årÚ=Ššc¶?L Yû8[%Õ“lDQtâ¬Y÷.[–ž8k–( ýª©ËÉpÛª‰Rnÿõ¢ÔŰ³¿‰£9ùógê«§|ðX8 £F¸ú¹ucØ7ùúø£àƒü+gz1jÔk×󳿯½¼ú“‡mŸšé{y“åìo³Þÿú+ë?}Ô‡÷ÞwÔ¢ÝcKÜIDAT_ß³m[Çõzã‹'Ÿð·WûÞøë%F¶Üûƒõ[ù—j¶Õ¥/þÆý¯L¿ðA"z芰Ï/Ù"w¶í÷â¿ßÏýä´;ó“Ó²Óĺ÷.[vâ¬Yš&Ôƒ”BêS¸9{àhô$nbô‡FÑ>xÇOź¹ak3jÔéoU/½öL£ÙêïoQ½Ñ¸ó¶_0þÃú†ìé%ûϺkO>ú+×ÅDÜM2Þº&Ù8ú+×=üÓPdzá‰Iú““Ô¹H1z¤¦äÞeËØ½N+qÃiØròçÏô{e€àhLŒuà†¾u£>¸W¾jí]LjûµÑhÑ=“n`IDATÇ&<$nd÷/é«wQ¿’1§>ýëïJæe>wñö)áÛ.ýÖÔ‹²þüT"ÑÂ…¿œ0a\Ùf â„™3ï»çž²­°åÙgŸÇZ' ¥¯0•4£¡Éö¸¡Wh³&û¶{7óô“z¯|ï•?¹]õVžžÇ/ûHâe:ÝÅHV”È 3g&äbˆh„qXW©!ÇÕ‰¹¨bŸ¡òâžo/hÈvº‹IÈËt–saI‚A<=u ù.Ëö Ul¨†‹!ÍoLÀ•‰Ç#¨yQ ÿ’P,S&NOD+wäg‡»étŽ;öX$Ê˼Lþ$¾†àn "<1ʤIÛ_E[‰¿>ºÄ5ÿDIDAT2í u7t«V­Îð.X°3–™2%ÿ´f€jðÖ›¯¼úææû—=6~Üè8&&Ÿ%_¢ô3¦ÕÏ­Ÿù™#ßÙ¸=}ž˜V¬Xþä§f9aÂX£ä˜g׬XþÄ'&oÿ$g/óç;.N·?:çÒ|•ÊÅÆÅ$b+|"ýš§—ùÓ’‹™{)óõ[‡Ìå3€AEqKË“ éÞ Pu!£ž: Sh¶Ìy†ôÊê%÷2Kn½VUîÎáJ~ü½%"¢øË_×x}Qskmë;[¶mzg·aý?þÞËF_ýÎ7¹êÜïèù^ÒK.)Ï~as õM¤Ûb-©ZT =IDATBq¯b‹d¤¿Ö0Ê náeHæMHá}6ׇ4÷™vñ—¶'aº+í6bû®ñGï»ôƼÎ'‘ æJ(ô~›»~Q¡Mz™ö ²P« J·:÷¤ÙKîäsT¾+û5‡_²¿ùý 7nxŠêoëÿmÜðÔ7¿¡B6ñ4!^Š´¢=¬N§˜ÍÛ›£#ÐhkÛ¡À’mÛê鿹'Í&¢¹'Íf ·mã³>ç3/óöÖaTÛ,cÍ=Ÿ3V')ôzÄ }+béCSZKj†žÜYغmûß–8çìyiáióç\»ðfU—QM,¹õÚ¹_8‡ý|·6”êïèv·–IDATÑ—.Ý%Љýóx1QQSDC¾tÎõQL‹®;ËØ׋Ŀºr½Us:›Èb† p1 Pjµ&îéÉ׫¯¹1Ù>çìyW_s£´ŠÎ˨k2eÃ~nnìB7ˆèÿôîÜÿùw_üþ©‰ä/N-S`ö2®ä2›«×_æÜ)úP€.§Ñh|cÁöKøò«®o4—_u}Rrþ¹§_~Õõb•|Vl©¥Æfjlžñíý¿ð­Ï×67j[šµ-Z½ÕìGÞúð]ÉF­‘ϦaFŠ#i¾­R®ùö ÐÄq|Ù• ‰è²+Æ;àJ¸*ùx™­õ^jÖ¦^|è¼ þ}WoIDATfny«¾ùíú–Mý[ÞªoíoÞôÈNßvÓ#×o©55zD’ F:Á©–îb'JÙ)Ök°{U6°s:Ü䫨„ö>(¯C@v·¢/IQ>1i^™éoôú­#Î>wÚæMuŠât2fs­9ÿ¨³GsÓ#×Ï?ꬭŠÛÙ+»ê4_S¡Ö—û5ê$ci^v«ìmFîe¤/ËhøÓ=Ÿð©¥?þÑ\yÔßHœKúy蘣¥ " UÚÙh8 œ!`þ%;ùÉ(öìý’¿6{ྭùGíœëÔYµzQó2"á\ 5²#ލùZ`,“%„Æûö6tè°ýþno¶°Õèíåª~÷ÝÍÃwÙaËÀÑP~òÓ[fü—#lRÌì¿ÿš›nyÀ!‹Ub™G/Û™ ôˆ‹žôkP4&Œ­Õê[¶Ôˆ¨ÕjQ½ÞLÖô×ëõzk`` Š¢Ì1‹•SH┘&áŽóÆÍùßÏ«¾a¬ ä'¼àºï§FbGþ±Œ}b"zôÒ)³¾}Qÿk?«mªÕjµÚ¦M“ŽŸý襃òœq¹IDAT±2ºÁõ @iÄÅït.Q$u4ÎËØ¸€~jÒ®‡Ñ®ûRš÷fôôSRG¯ùª«~.µû•}IO©êúɈ¨ú@Ç%é"¢ô PŒðbß—1S'ª½ªÙß÷Ü›Nú¤iVTùb8IM]'i ]K!±Lz÷æ^ðÓÔˆ¨¶)­¸ìê+9U{ŽÜóŽošlϹüNf„ëkûp4 Ë)$–Q­6Óô¿ÛŸz™e×.šuþK¶wu&½tîª[ïJ¾Nš6ñŽÛ7Q8¹ ö¡ ¾t'æÌN‹³]©Õû‰jDµe×.šuÎ<ªmÚþhÕ­w?ó¡IÓöœô⤟IDAT!Z~ó3b SzrûÖá_@7S༌ͥ•Ä2Ën¸wÖ'QÍy9çh’ :ö³­œ¤M]''c¨*ùÏË8Å>o¿Û\vý³Î8‘ÈsÅ“4é”ô«fÃXWSK/ç@αŒkà³`É+‹þñà›~|'W~æO/qÒh71óIÄü ÍSþ:¦3öÿ$¥1ÿ']rQí!ˆuLR&M›¸ü’éÉöŒy³¨”Hù±ŒœhþÐ ¤¾ ó1ÿ’ü2€,ø¾L¡/Ú:… æe²ç—Á[üKÇç—”B’X†½·Gä›ù!äü2€ðéàü2$[I$¾Ñ¯I7c‡{I]IDATì ;œ_†Kõ"–pé`Ó7”A×å—£ ÍtW~d{ ýtp~oà_h'œ_FÌb%æsáJ0õ @ÎDìÿ¾ÙÅCÎ/cLCŠü/€¶ü2€b)MvYùeí!ˆuLR_€jP~,#ùe¨ È/(ä—ø%&›âˆâ(&Š¡,ˆy™ìùeÁÒÁùe°" €Ž ƒóËÀÅÐtp~™4·Cò•ý»±©@º‹+!uº¬B _:8¿L ·<ÝÐäš±ÌGÈN•óˈ™ôldàhÈ—Êæ—#©¢åâ.KįÀŽK²»2¿,IÑòIDATŒqÊ œ_ÆØº&ûŒX‚ÜãDç—á¦x5\R{8l9r®dÕ3/¨„»+¿ BraãÆwnØ1mš2}ê4©pùk²Û™_΀\9r¯õt¶dÕ3/Ôë-©p똤 ¿ ÁÒa±Œä— `±LS*n,E,3U*j,˜Î‹eÚŸ_ËÈB™±L›óˤÛ¹ é2¸'ˆhþɳ‰¨Ñߪõ7ˆ¨¿^o_,Ó¶ü2$¬ºv²Ó¬ØÀÎ/£j‘M‘”«–MŠ™ÄZÒ•“Hj€=UÈ/Ã"f™!Áûz•¶èU—=ÎøIDAT’Ú€n'ŽhûBì£7Ф*»³óˈ!@é—+’ÚÀÑÙùeB»2‘Ôä—)$µÝ@Wä—IgL\3ΰ“»â¬Š¾QË&S¿ êt|~M‰QÀI [ޤ6ØÓ]ùeJ¡ èrÊ_ÇÔÎü2¥ç*I%ÏûD销b¨±ŽI òËP Êeä ¿ UÁüK6ò˲Pàû2…¾h肘—i~@Ûèàü2Tü»³XÙ@v:8¿L)<\ Û‰™O"æmžJå—!Yvi0¢Ï&Cjo¢©¨Ù%óËHÙdϓ树V½’JRe¤*QZª§IDAT\ è:;¿Œ_FN½S°T"•T¹${¨_&wrqUÞ’Tä—‘Ãeö5†?¬˜ªŠ} @•èàü2âÏØ69e8 ¥ÙdŒÆ! @U©T~i¡>™‹Mª}f½˜etqD48™xD¾ÙÅ‘_…ò×dW>¿ ]N똤 ¿ Õ üXFòËP‚ˆeº÷‡Òòé'þw¿¦áJ,3õø‹¸’çï;ï¡{G@§D®¼æ@ï@Ç1Åq¼cƒ† ¹OóU˜¼q}9/jÀÁIWb ¿kï$ˆ\yÍÖ˜n¸û?¯[òÔ57=qÅ/ˆãaðsj8IDATG>òýÍ ÷ý†_Ü”18¦Z‚䤤tlún”q:œ¶h0F=®Æ¨äÅF91!Q˜Q:AÌË4Z½­Í›yhœxĘZ4ò£_Kö®»ÿ'ªŠ¹¯–ìl…e\]Œ¨Í~Ý©«1zy¿óÞ~B¶­1/ÓhõýöñçšÍz£Yëoö×ýýÍz£ùÕùG6š½NíŠoôskØ ¬$»‚\Üe\$ý’â2ûëÍ2ål‹âò‹´›Ry'¤}w2Æ£9öS%É1ýh³~D‰:I6¢Î®"ˆX¦Þêmµâc'¾ŸÜˆë-³‘)Òq#–wHÖ%é×¼/ýñIDAT¨<‘eΩUšFóõ>š¶ôU\m(7ú°i]²iF7H¸†:%ø*ˆÂçeôŸ õæÖ@üàïŸ_þøêe¯Z²üO7-ýâ%¿ûÙ-¶âº:–IŸÏ¹+ÓòÉ\Ç㔨‡(ilZåbìL–æ¾ìrš¤H…mªÄ –M¨®=W¤çÝò¨Š­h˜ª9?kA᱌þ3¡ÞÚ i›–ì»%ùe^¿Ž&Ñ7Òá‰MpÏl¡ñ)ÉC‰x[Ó«u%£6U„o.â~›£Zo=ÇS {‚ø©Þì ÇþcÍÿîÿ<öÌÝ+þLB~MuÕ½ÔéÒRá§Y«ãKÊIDAT¯V:ýá­ÍHq^#£ ¹_´N7˜t»;Ÿbò "JvDqÅŠļL£5¤5ò£cü"f¬ˆFĉI•èÛÕ¨Kا}é$+¯2ÃÒBî¦->ZŠ…\õt—þÀª<ˆ*0Ê1ñD²³cD<ÅöOˆgû™b…â Ë4š½1=üä³÷?ò—ßüö?n[ö{›ZªIÖt²€ÝÅ–¤ãX*¦©"mšž°o]´Y*/jS©•¢PiPU1vM#FlÈ^¹_‰F§ôŒÐà³£éÉÎ#[®Ò_"¢(¦Hׯ0b™ÞÖ@<õ'¿1å~›(â®@²n}ß»ï¨PíÃIDATööôôôôô$blyïË´Z½7ß¶…«m!÷¥tpplâ}™òËØÔ jHÙôÝ(ãôf3§-ŒQ«1*y±QN,œ3ˆ¥ļ ò˸½S+í‘QÆÕÅP2IDATˆÚ4GRtNÆèåýÎ{û Ù¶vļL¡ùeÄñš–¨$m6HvA# ¶9®„­«²Üé8¨l`ßO•^Û\\à×®´GNÆx4Ç~ª$¹c.Ž Ñf͉“ê¤ÁgÐx*O±L¡ùe²KÚT—–p¨œJ€»r8IqègÄï ¸ÚPnôaÓº&dO‡ñF¥ÒÙUT?¿LzAŠ'Xúäo¼z#6glEêbˆqCScä—QÔ媈†©šó³ñîïÏo¸aÖ§OaÏaš_&ù:išäÝ_ÕSŒêšää¥NG ¼¥—*ØÖ˜¡Ú›ØU46ÇÊI¹}ïT…F;-€¦uU7ņHxNÔßIDAT¨QuÓ©D:Æ\OV˜dy÷7ˆß˜ŠÎ/c¼Ë‰—:W…½o[vгAc¼¾zöÀª ‘íd•Ê åj‘mpä,1/Sh~}IcuU‰~¯Ø:W¢ryöƳ7m’b!Wõ³\‹zDåÜ£Š^>ãÙQá¡ÓõD‘ b™¢óËpûRIªÄô éKØŠì^i뚺b÷±•^@¥AUÅh°F8ŒØ½r¿NÕq¶?ÑbØrýyìˆe Î/(‘ Þ—):¿LGІ»œkÝyã¹D,óíó?ÃÅõIÓ&.¿dzòmƼ‰~6J'ˆXFòËP‚ˆe_€AóÉIDAT J,ƒü2Tä—Éñí‰j¼OáÚ‹jôº ºùàñ¾ òËŠÍQ2Êèß®Ök‹cÔãjŒJ^l” çœbFA1/ƒü2ÅY,¢1ʸºQ›æ˜‹.Ãɽ¼ßi?!Û– æe_&öÊ/#ÚÏéÏB¤X^Àîåâ¿v¥}w2Æ£9öS%Éq‰6kN±T' >ׯãСË ¿ŒT€»4hº° Èïp¹ÚPnôaÓº&dOœñ–¦ÒY_†27Þâ¼›3¶¢r1*ýÒÂtŪ¹™hu¹*¢aªæü¬­*È/#ÓÕªZc†jo6kŒG±óLIDATl! ¾&]C6Õ=ÖOYžŽ,q™±SF=¢‘F¯AÈDCDÈ/£ºCráŒÍ`JŸ*ìÝØ²Sœ ãõÕ¹Þéf—l§{»Æ{æˆe7=" ļ òËHKT.Oj¿ª/–Ýä‚ 1( ¹ê¬GæZÔÛ *çUôòÏ£ ®C¢{"–A~©=FcôÚTj¥èTTUŒ]Óǃ²WîW¢Ñ)=#ä2$ıå*ýN± òËP]‚x_ùe(°{—«1AB#ˆXùe¨0AÄ2_€ªD,ƒü2T˜Pbä— ª ¿ÌNŠ{µ¡C_šp5»C»Ùºµ`à¨IDATùàñ¾Œ_~b–t óÕ_Ö8³é‚QFÿvµ^[4£WcTòb£œXq#Ç•@Ì(ˆ æeüòË´çuï´‰ö4—;‘ÅÒ£Œ«‹µiè2œŒÑËwÊé Ù¶ì1/“c~ñÅp®$­q{¹ê­hÆ}4xõª-£þT’í”´Eo"Å¢v/øµ+í‘“1ͱŸ*Iý9•Ú¬9qR$ KQg"–ñË/ XôwQÖ³ˆò¬é®逳–¾À¨Ÿà®NÒÒuÚãáPõ†u4aÄ2“_¦ˆû'Õ&ˆ÷eÚ™_Æþ¶fY½m´¡i×&àj AÄ2È/@… "–‘€ü2T… bä— Â„Ë ¿ Uùe€?®'HC…NïË ¿L¹Øo”‘îRÉsÚ¢Áõ¸£’åÄrZÞb†AÌË ¿L‰D‹hŒ2®.FÔ¦9†¢Ëp2F/oì{ „l›‘ æe_ÆÆx•©¤Q¡¨? ‘by»—‹ üÚK¸XÔIDATU {c<šc?U’ÜÙáÎ…~üHG”¨“,ÆdøË ¿Œ±9©w=pÚ¸BÕE.=Œñp(6”}Ø´niÒÅ ý˜Ì«;…‚ü2… NØ ±–±_šxJª_Zh<Œ12Ñ(êrUDÃTÍùYÛ¡ ¿L5ó˨ÊÙ Ü^•T­M¬$U®o1K\fì”Qh¤Ñkú¹8Ëhä6ìRA ¿Lid£l¢}uνŒ㲠‘ít 5Þ3G,»éu!AÌË ¿ŒT¹ÑÎtLKÇ7×wU5»Dc4AXÈUOw‰-êm•ëO='oÙAWdgêr‚ˆeòÊ/“réWiuNiœ*•Ò†T;©:FW צï…F8ŒØ½r¿NÍ—–ˆ=bËUú+O±Lçä—)„ô  â}™væ— W—‘—‹)«]ÐË ¿ &ˆXFòËP‚ˆe_€ J,ƒü2Tä—é"\_Ÿ+ôeWåx3ECà'ˆ÷e_ÆÉÂ6h‹v,²Ñ`ì¸QFºKc›êÙèq5F%¯*œ€ª•vRºAÌË ¿Œ=ù¶•Q[d±0Ç(ãêbDmš^ˆ.Ãɽ¼±äãv¨IDATïPºmAÌË ¿Œ½‘$ VXÜ`«KJÍ í‘ÌN¤X²Àîå⿦U½³7Æ£9öS%É ÎaiΈ´Dª“,Îr{"–A~K#®ýmŸ³ÄRR¬U¨²¯âjC¹Ñ‡MëÆ3¶–tIu¶ä—éìü2¬ZiPPèì@êû4}‘ÝFQ—«"¦jÎÏÚA~R•H›jÓ(Q‰‘:T¶ Ǥ}?Uƨ$-Í0î²9†Æ£¤ï¾ýÑ6¶el×F>•6Dê'eãÑ”HǪëÉâ@~™L°×¼¼ÍÍJ¯*—`5ü~ s²§=xŒlKµmÈýàXvÓ#êP‚ªÍIDAT˜—A~{#íqmÎI“…ìM›dAXÈU—ž#î¤Km•ëÏ'Ÿñ¨ÈxT%ÁD,ƒü2NFJ›06-55µŠ«îd†j'£ß+ ¨ª¡F8ŒØ½r¿Nã •ZΖˆ=bËUúÛ@± òËØQá T˜ Þ—A~™‚ää;{ÝÍË ¿ &ˆXFòËP‚ˆe_€ J,ƒü2Tä—i+…¾à઼SÞ¶(œ â}ä—‘ÚEFºK%¯é²WcTòªƒÏ ¨Zi'˜Ñ)1/ƒü2Rm*ÍFW#jÓôHtNÆèå}„m æe$¯„IDATº*¿ ¾ðòj4R¼†Ïîå⿦c‹…zc<šc?U’ìq}™Ôfý©u’0–D@$ˆX¦{ò˰š¥zm~x8Ê>lZׄlÜ9%õMH<_öt-È/Sx~§;y„Œ-Q$õ¼6®\Ñ0Us~ÖK_†T%Ò&¤ÚŒJÒ`Ûh‰e¥²Jo‰>¾“Ö²é¦ý¡Ó7§i]ÕM±!R? ǃ¦Dzö]OVGƒü2™`]€¼Í­•SUÐø+hd{_Y4Ø`ÙM´ æe*œ_Æu‚Co6§Vˆ…\ui¯¹Ã¨éwgí×Ë[vÐâ}ÅþNœ"–©pn‹6ŠIDAT~© RI½aRý^©fKy bÄ# Weo^–.ˆfˆÛRËÙ±Gl¹þ<‚”0bä— ºñ¾L׿—É ×)n¼ Ë ¿ &ˆXFòËP‚ˆe_€ J,ƒü2T•îÍ/ƒ7#hA¼/ã—_&ŒŸ‘€¢ b^Æ/¿Ll±°P:AÌËä•_F\á–”§nHúº~%Ž´®øN}W-œÀ‰ b¿ü2R¸:l¡Ó*jc]N –­ÓP°ùeFì>4ýwŠ‹›ã‚ý”~=!W×8õ€”Pó˼oØÞßfãwî#¢‘ß;áoßV¾ûk“»D¡(¶IDATeX8ââãXX^T•jæ—ÙøûF~ï„xàÂÄ×;Éb­hö¦n+7ã¨AÌËHóËÄQôþŸ¿÷üc¦©«Éñ¡É"­È•p¬±©FPF,£È/“„3€Ž&ˆ÷e$ùeÎû,E=WÐ>{ǯžáÑz¡ ZÀž bI~"B,@%b^Pa‚ˆe_€ ļ !¿ ÕùeÅļ òËPa‚˜—A~*Ló2Ý_F\‘ Z@% "–©|~érpûNК¼žVIDATÑ ¿L9ùe0‘ºä—iG~Í3‚Ð ¿Œ?…æ—Ñ+„]Bó2•Ï/Ã5©_ÐUËT5¿ŒJ^Ô@… #–A~ªKïË ¿ &ˆXùe¨0AÌË*L± òËPa‚˜—!ä— ºË$ùe"Šˆâ˜(¢ˆˆ† ¹Ï–rt4E¬jÏû»®–c”?vÛeÛ«߸ÙcãÇNÞÇ`÷&? oÿŒiõsëg~æÈto±L’_fñÒÿL—b/8ãÈaÃGÑû·l¸ï7Wžð™¯‹µJÿ3²®Ú¼Œg”qZó©Z®jB\„ádŒJ^º„ŒFpIDAT g±|†ËŸüÔŒ#'Lk”óìšËŸøÄäñÉ× b¿ü2Aaãbœ–;éÓG UÚlœŸ1zùößüÙ¶°q1‰ØŠŸH¿Ëä•_†Ã2¿ŒJ^ˆ7a1©ª^°/K¯mnñ”_»±,oŽ“1ͱŸ*Inqç°4çEZ"ÕIÌY¶9ÝL³Õ2Ê étÍËøå—‡)wµkîäâ¥(]±m¬®Qb¹Š* ÅÆr£›ÖgJz^¸q"®e³7 «è¯5Œ2C†ò2æ—¹ié-ùÝÏny´5×3Ä2 ~Õó%Ú‘ìJsßNv9Ùœ ÛT‰Ò»âŒIDAT,›P]{®¤ýâ´9Ígã¬õƒ:õ£V«ÿqU eôŸ õÖÐæMûøÎG¾}÷"zéÜU·Þõúu4™ˆž¸‘ÈÕ€N¼©B!£pÍQ­·él±MD ²³m[ˆN›?çW7ÝÁ–‹%)Æ2öHóˬºõ®ñg>4iÚž“>DËo~FZ‘½jnŒ6ÏüAQœ×ÈhCî‡Ë²›(ˆ­ÛúO›?‡ˆN›?gë¶þäWÂU)ðï1Ù“æ—9üã㎞2áSG}$»Nö都³‰q»(¯ªîÔ¨="¢ÁÜl™œ&7;Ë*ÔÛ *¤m±ò~GÌH.gÁãQ¨¨ÕâýIDATšW_sc²}ÎÙójµæ9gÏK¾^}͵Z³VkrU‚ˆeTùelÐ̤sÜWU•¼ª!©± •~Uw4* ª*ÒþZšFlÈ^¹_‰F§æ ŠÆKKıå*ý€ˆF£Ñ¸üªë“¯çŸ{z²qùU×7vÀU)p^ÆU~™N$Êû‡$‚"Ø—]¹ð¢¯Ÿnk|ïËØ#É/óµ m±8òu.®ÚàÚ@;IÍeW.Ô‹ËHòËÄõIÓ&.¿dzòmÆ<åß0”ˆÑÅP ïþJˆ†ÑáÍ8ܳ6 ‚x÷ùe¨0¡Ä2È/@ø¬[ß·Çï±c¿Ë]>áÈIDATtn~™NÇõ˜àj¨üÁ9å”9‹-1b„QrãÆ7çzòË}Ï'_wþÛñã>äÚjkÀüº ÝL½±KÙ&HØm—m®UÞygÀµÊ«¯½LD«V­Þ˼úæfU"¬„ôM–xG.¬¸A«WoØm×a®ÍPyÞ|{Ûøñû0zTÙ†HÐd½K/ö÷ 1?(©ØéeìaÑŽ\XDtΗç j~ì Ûh4š×^wóì_¶!<.öÙ3}þt aÙ*1¹°†".ôìºë0²YÂS»7|"&Â:þ˜c~ûàƒ|5&Ö–-µ,PI/òúLîb—^é$bdOˆIDAT$¾ó€wµýµûïøcŽIšçÊ3¶ rdäÈ=¤Ÿ ¢ Il³¹Òs¹ØùX†}ü™{ÒìdcÉK¹Ç¢áÃwM·[­VLDqEÙ~ÆËü#`\þm#“‘ï!¸áÖ»¾þÕÓ¹Ïù'ÏvV”ùb EÄüžÝÛS¾A*Ø‹zÉK“ë}Ö‰3–ܹ”c/v?x/“$Â"¢$- ýê¦;ÒB€QO°33Ä]׿ºéŽäªŸ{ÒlUÖ;?x/“ä¹JÓÒ\»ðf1óG½Þ¤8Š)Îúšý>–±~æ»NP·­F¿9×uZ½Þš>uZ½Þœ>ujúé¬(ûËÑ Ÿ C~bb±Ìzç‡yq€±ádUN¼tJ7 #n?Ð…ADÙw»(ÈÅ—1ÒAÇÐ~¤cqwIDATyË5Äd©y~ÍúzG>ÿP,ϯY¿ûîï-Û %»7;½Œ}ŠÚ‘¥fø.µ§ž^ýÒK3@õ½ÿÞŸž5åõ76•mˆ‹½Õ¿Õ»¹Y¬ wV­ZÝà€Îe­Zµºl3•åÿ ºÃ ‹æIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/add.png000066400000000000000000000012731203611042400277060ustar00rootroot00000000000000‰PNG  IHDR °AÒ pHYsÄÄ•+tIMEÕ  ÊO'\tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœm¿KBQ†ßÓ¹ºÔ&õTÐÕP µYC«ÕÒV9äÔXAØTƒÐ¸DFKHè-¥$$’¢$"n›ƒcA÷ž_ýšFg8çáá}Ëgøo¦f6Úö|6a;òÏyÊ¬ä³ j™©¹&"5.ðwzäG!·×ÔRšp|ñh;¶¥#äúRÐßÐýe™™ýÐ\ €!W ³C0¥Œºš÷ËCÏ'×ÀõÝ«”ÚòÛ–MñêbPHîqŽâJÑôX?¨½²Òä(£ÁICiºyxkõŊϨ[.1ö|>©11Ü×jŠŸCÑ83oú¸Ö(U<ßrAý3zIDAT®ì±E˜]_xÓía(M£ƒ½Þs®|°1k¨~% “(¦ !¹&ÜÞ¿¸É˜5°JÔ­fJCh®4 ¸}cçY7S(7Ó©_N)~rvcvz{7™ÙªÖÍŠGˆÓŒ¨í×4Qc¾µ#®Ìå~UÃÂù 1xIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/added-status.jpg000066400000000000000000000255321203611042400315400ustar00rootroot00000000000000ÿØÿàJFIF,,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀg"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?÷ˢ¯ µµ·ŠW–7™f1€ ì­Ÿ¿úS`½¼þÑŽÒîÖüÈžEh§2}Ò ‚ /÷ÇåUõ­+ûNX„¶7ö¾SÇ-µéù-Œ }Ç¥WÒ¼? …Ü~F¥iÖhŽ|› 6´ŒÑÅDj2<±Ï^¥\½Ôn!Õ"±HURXZQpdäm 0 ƒÏ̼ž9ïŒTmuhŽíºŒ8SºP Ä* Ü’Øü¸ç~ζùЬq±¡ÛåØÀ (Íg]<5£¤.iîí­£7ö’¦Ï6á!,Ñ6Çà1 gŽÆ³âñUÔZåõÛÁ¶Â[[9²ieû?ïa¹™öˆN[€K…$‹šýž¯7…¢’=KP†öÒáÖÒ1‘cºŽBd€v)êü‘Û8 øu¯mïeyd¶}CS³Õ)#RИE¿îŽÖ “ö|nwÇ è3²ÔtïeÙ}{io$Æ+y K,jÂ6“‰uڌێôë¹srÿ__²Ù¶–ÑÏ=Ö¦,Q]XRVœ`¬qNA<ƒ²çô¯†–Ú]Õ„¢M6àÛ¥©’â}-è¼GùR³»X‚ÎCA]É4ÍFmsG7s}¦ÖÎ[»ß´XÊÈÙŽŠç•O($ “’FH ÛÄ—’yŸfŽóµ´Óì2¤y±¦ß´“Ï ž]Þ À>Rà6Fë‰âý íîî>×"Ákn÷M#ÛÊ«$(2ÒDJ2ƒº=Ãæ_ï.rô}Q_øF¾ÝoåyjÕ/vºŸ*úlæ!ÉÌé78Æ~âe¿½‡à!áë{”Ó.4Û9Å“YÚ]ÛiQ¤ë6É;’LÎ ©ãb±ÜJœ®Ð ‹ý}l5ï²ÈÑ‹;{#qvûXº»È©n¨.\¬à*†$ªŽ Ò/Š4“gytóO vVŸm¸ÚKÇdŠ2†ÿ–2qŒñœ`ŒçÝh­çˆdº·±ÿJû5­²ÞÛ ˜$‚!æx·[Ì–a˸‡e„ðdF n¯§»›N•¤’YÝݦRâ]€³– ³G.K0XB’C1 £ã½&ÏNÕn óæšÂ+– -¼°Ç</Jɱ›1¿ XáXà…5rOhð¤/4—q Ìo2Æu0&â»æ3 e[ &ÐB±‘Ÿ}àxu=.âúAÛo®¤hã™n–åJ ’Qs÷°s³§p:ä íáy¦²ÔÒ{øÚîöößP¥¹TI¡Hü…É(^Ü7†+»#uG£øZòÇÄsk—úœ7SyûÒ C ~ñ-P`Œ QÜçlrcHñ=¾£ªßZyðH¢ìGbmòþt_e‚c!##nfÆþæAÕ†c±ñdØ–š–¦$Š ×–[yᵕâÛÉŠY"#å@Ëg cØø&ûšÝ΃wƹ¼K™Øî„V±B±H»ÆAh‹+n žJ—kŸ aÔôkm.ÞêÐÁ˜ºlm©Ø‹¶UJ‰aàŽRÌØ9Ùo F«â ?F¸··»û[OpŽñGke5ËB¡‰#t8ê*ºøÃ@‘î’-J9ª#Ëä£HuFA \H›És¹*ÀWÖôÝjçÅZUö“=¥ºAew Ó][™Ô{rªdC“å±ÎHH#‘Uì¼ ÜéV·Òlk‹K‹i%Œ1­£·XÀFðZÙKcnC1Ö€.Iã%ZÈùþTwËw°<¸šVÞ?vÛ@`²ÊÀ2hæÝå2]££ª}šKÒá‹FØ ®rªFÏð60õ/Üj‚;[Ùüï·]Ïu©][ …5“Z‰ƒd<–#’FUL–~k—6rèÖZ„7 <&ÇGX-ò#–?ÞF$Þä¬ÒË@ €0ÛÀ4-|G.¹uªéºbÉgyhñùSÝØLñ24PË–» ø”¯–\0Æâ1ÅhxkR›Y𮑪\,k=í”7,`… è’N2}MS†ÇQÑ'¿ÔSþ&_lò渴¶c‘îGhÚIB¬{#cdç?9ájÇ„ìn4Ïèv‘ùwVº}¼3&àvºÆ¡†G”±EPEP{û¯±i×7{7ù4›sÛA8ÏáY·W:ŒwZ„–dG\-ÙÎÔÜÜ+'©àœ}2s¡©[=æ•ykPó@ñ©n€• gó®nãÃPMqy4Ðmõ)ã“uò H@ÊͿɓ–Ï9çž´ÔÝ\%¥¤×2) m#ë€2q\î±®jZe€œ,,òKJ©lòˆËºƒ¯–À'.N:ÖÔ´¸î´ËÈmà·K™¡‘cvP0ìHêíÿ}7©®~ßN½¹º‰õ=Irã>kBéçœ äýN2 8ñ3©%ÍèÆ ^LƒÂž+Ô5=V;;Óæ$ËrêÂÂHJ”—d’6í$r In½EÖµeg¨Áa#N÷Sm! ¶’mޤ(¤F¤ƒ†|µ¹ùN9? YÙDðEø­ ’ÿ‚bH8é÷œméíÀÆæ«á·Ô¼Ce©¥Ì«oåï’.äåü³0 8Ý#Éàà«ÁVu©s>í}ÃÄÁBvAt­:ÞþÒê{¸.2aû-œÓ<€,ʈ…Š®åVlaXí$7ÐW/…¯4í;AM7S‚;í'OþÏ\Úc–2"Üv,ŠCf î Ã Ž¢ºÎp¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ªè¸Ôfm½bŒnÛ×—ã;}ÿ¼zôËXªè¸Ôfm½bŒnÛ×—ã;}ÿ¼zôËX¬™î/o..míí-š;iЖà©f$éå°îz÷85©$‘ÃË+ªFŠYŽÔ“ØW™kZö‡®Ïkÿå—‰‹Ld„¼BB‡b«… gýVr¼Žx­¨áêÖv§ÿ]ö:0øJ؇jQ½¾åêöG¡Ø]ÍrnRââ–Þ_-„rSò+d£ûÞªŽ¹ªÜi×ÑÃ-¬K$rÈïp¤€o£ïã-4_ßÂætýÝ‘<¸<µ@‹µ@f4ã+‚96ÿá¼ð¼e¼Õ Y6Ž"€>v9 :ÿwŽv«„¥¿kY'ýÔäÿEøôð8zrýýhú/{ñÑ~%ÛIm {¨ØJ僪BÅ–?3¯ÊÄ )ã#$çšµñCF·­œ7r*Ú#ŽFÆ@$üÊ3Á;N= s’èVs<Ög¿e>TS’X°–Q€¤Ü,}2 ÷çÐ5})¼?=–•­¬ë$wVê$Fxd~Ñ¥£@ØçnqƒŠæÃb0R„c95mÚ[ßµûw.·ö}(©(JW¿UÉ3O‰š”ö"K]í\ñA-Ð #g,€®ÁŒá€U.Ø.¿½I~%ø„Å%ÔzL lDr@ÞVi’GUC ÍÌ‘‚cëœdWUsá«íBá®!¼ŽÊÒööÓR»´¹µógYa0‹"JF @x~wH ý7᥶™PÁ&› [½°†[m-"žD†x¥ýü›‰‘Ï’£rìfb§å Ùõª1ø(¯›oõ0úî?ÃÃÇæäÿTfOâßË5”šlzs_Ìwok"¤{Û Ø”F'åØß6HdŠŠ}gŰÚé— âK)“SH¤´ o‚ñÉ,1æ!€â"AÁÁ8WI¬øûWÄ1êŸh±ùní®·ÜØy×1y.åÃ6ñåÆÞ_+´ó$‡ø°+§€¯7éPˬÀÖ:DQ[ÙF¶Edò㸶”yæÌEª®B¨ËŽÔ¾½m©ÁÛ·üî/í+iP_öíÿ;˜zn±ã K­â1®Ãm§¥¹¹‘®¬š6T ?8 z¦àppMI§ãìînc×Sýi–¥Ì³€Ç Âoæ$0R>Vçå8é/<;}mðÓUðå¼±Þ8Ó&²ÓÕcò˜§“²5rX†WùAÏÝZŽ÷Á·š¯Ÿs©j677Òù(c:y6rG›µe¥&NgvûànXÎ>S¸úü¿’ø í9ϸàçÓTñt²Úňíg’çR $1eŠ~ô,Éù•”ù›pQÁå[Øë0Ô4eÔà×ax¾ÏÃÇ“M$be ŠV8[/µ”•\• À ž“Ãþ ¼ðÓÄöŠïÊ]Æ4ò±´hšeXTJ<¬}¢Eä¸À^kÇðóì¾Óôk]B´µŠ?6ÖîÏε¸™av‹xù[,å7cÌã Ì>¿/ä‡þƒûN_óîø9ûÏx–ÆÌ]Kâ‹V„DÓH`Óå˜ÀŠH&UKrbÁGx^QÇUlYZñ”²ÚÅ©ZjS !ÙÊC#¨mʳDv]­•G, 6GÊØMGÀúΕ Üi:‘4šµ¤öWn–I´òÍ"mS:´J>Õ ùDÜ Âäaº OÁ£k—Õ½½Œì²Ü]Æ"Ó¢ÒÉ.ödk‡l˰Pø ¸úûëNø í9u¥ü~š™ö~!ñÞ¡Mk¢éÒF²É ;±‡Ú7ÉÙ•‡¾8â¥_x¦Íž ÿ M<Êß~×~Ì8È ÷ÛµtþÓfÒ´Hmîš6»w’âäÄIO:Wid ÍîÁsÎ1œžkR®SzJŒ~W_¨}~”´ÛË™~78EøinÏ«¤_ÙÝ#sˆ»iž˜ô­ˆ¾š’KÉ cœÇ$Yyï´ùê«2çú-ßœgÒ¬¦Î÷òT9'©ÜsïœÓö¸9|TÜ}%ÍÛeóø©J>’¿æ¿R{][M¿”Åg¨ZÜHqHfW zàœŠ¹\…ßÃ_Üìò£¸µÛœù3»ë¿wOluª)àïhÎ@ñ-þ`!ºljNFIë“…ýMà ?áÕ³þòýUÃêØ:ŸÂ­gÚJߊ¹ÞÑ\ø¿Äº¨ñ‚Ï ªn¹·è£8%ˆÊ–>™_ÔWU£xK×¢Ýat­ \´-òÈ3•ô##=ë:Ø*Ô£ÎÕãÝj¿ù}z1çjñî×Þ¿SVŠ(®Cˆ(¢Š(¢Š(¢Š*º.5›oX£¶õåøÎßï½rÖ*º.5›oX£¶õåøÎßï½rÀ I¨üGºžSu%† ˆÄ(róCÃ8Î0rrŒÉ®ãLÑ´íŸi ~ñQ–nIcÉêzž+„Ò5>^M£ë³ØÜKæÛÞĹ;Täg dGû@ƒ^‰osÜ =´ÑÍ gl‘°e888#Þ½LÁÔ£á}›lý{¿]Ok5uchSÒÙ¶ÏÍ÷}ï©-S¿»šØÛ%¼1Ë-ľZ‰$(£äfÉ!O÷};ÕÊÍÖlþmí®Q$c,' "4n…OÊÙûýæ¼³Å)隬²`¶6ó^\[™"™‰YQ¤Þ6˜×8hÙsß®Nrtu‰P–6dt¶‘•”à‚ò sš„mt­‘ÚhÚm¥³]Í5ÁïÊÎò“(¾i žŒõ­ÝbÑF…ª kqçKk*|ÎHbNXŸ©>µ3øXÖæ>¥'Ùµ‹2Ñî–{´’DïeaLT’9ïúÕëùäÔ<ª¢F”Û\Â苽Y—z)GÈ$tØýq†èxGsu:j1ÝɦEòa­ BfLo.2ÈJœàqÀî±àíkŸ‡ºàº‡:T–’ý‚0‘°$ù¾h ¨äØá‘½•‡¼ðÐT½´$»[úêrÃ'_ØÊ/½ÿ®Ÿ©ä÷úbÇáµøHešævIneÉl¬e”üØ$}ªrØfb$åT™vG¬èz­­Õµ´Åô·l7a˜ ‚刘³`ª Ü´™D®sÕ¤ÁskªØ]¾“-ì1Ϧݢ%g]ÑC #|Åë¸g£‹ÅšÝäE/ô‘zÓÎÒ `³Ž+ZAq sÏ•Ãd ôš‚ÚÏî'W܃PÐ5–Ëñ#\Ú4÷r˪Cäoy®Sh”¸BYL‡nâIyÚÄzö‰¬ÚêzÂAqq-½ÍÌh&»_:h‘åW/!~y·2®ßš\ÿO&«æŸm¥j¥¬QÑ.™¤HèÞg“´©ûhvdïœwþ0Õµkk¨ÒÃWŒ]4þL÷’-¹K‰<Ïž5Qæ6n¸º,© ¯ì¿×Ì©†õ™ô‹©îïÚ;¯´¬n|¯åFÑ]I9™³«$%H wÊ6’Hª¬–w–´öšÞ¯tÖÖ†v1Af# âGܹŸ=9s×sU龓íQGŽúQs˜žÞTùV$Ê·îÔŒò&L‘¸\mø¿Õʲé#’-îD«*»=ÀÔcx1–¾`æ0s;ÌÿôÐf «Mn;)îîo“¹Õ·j–›,êÌ‹¿2©i&”;¤çïWLÞ,»ºû }‡Ä÷ ›óK©ùÒN&û>#% *ÑÝþì© f_PUίw¨h²Ø¦‹pÏu.øÔööÁäIµfèwy°¯C  îRqê—à ?3:5Kí*Kó}++Ý¥¡ó.)iR|ÂÎ ƒ¾NHÚwË–‚jzõ¤Ü]Í+Á¹UæKµ•$2‰º2±ú@$2d’AØÓ5aou-–“p>Ù©G=µ¤aÙ ˆFê¥e+÷ÿÓ!òÜn;¶±¨iäñ^«6¯g}i§ê’ìEª5ÜææY_ÍC!,gl²Û0\r6)È~Nh_D­ò ;u1'Ó¼Aÿšvim%–+¨ ò4¹]þiò÷îulİa¤$ãue>£}.ÿ2òá÷îߺV;·oÝžyÏ›.}|ÇþñÏS£k÷Ö:Ó£Ó5Fóm¦·Dµ¸híæó—jÉ,[˜ãí`îèO,šuô»<»;‡ß·fؘîݳn8ç>lXõóûÃ7O^k~¾n—Ôo¥ßæ^\>ýÛ÷JÇvíû³Ï9óeϯ˜ÿÞ9ûïæøgJ“™ºÎß¿~ì çv÷Ï×{gûÍÔü~šuô»<»;‡ß·fؘîݳn8ç>lXõóûÃ?`xuüß éRoó7YÂÛ÷ïÝ”îÞùúïlÿyºž,o%ãÉn»|èóYÜÒ®CZð­Ì‚÷D—û+PLðeQ¾\c ~_ªúœƒšëëžñŒtÏ¡I_íg [DÃp8ÈßýÑÈ÷ç€y¨ÂJº©j»éß×¥½OO^£§¸Šá—\äŒñß*sŽ;ޏ-r^Ñïì×PÕu%X®uIDÆÜ)1–<ç¡;°3Î@ëhƪj¼•=¼¶½µ·ÎᘪK%FÖòÚöÖÞW¸QEÊqQ@Q@WEÆ£3mëcvÞ¼¿Ûïýã× ÎZÅWEÆ£3mëcvÞ¼¿Ûïýã× ÎXo,íõ 9m.áY`•vº7B?¡÷í\\Þ¿Òo ß…uf´.ß<’S7|Àg0=Îs]ÝÑCVŠjGºz§ò:°øÚØtãî½ÓÕ?TÎx¯Åš4LºÇ‡à$Aüè Ìì¡—•ÚV·áëMIã˜i¶3Íæ1˜liËdÆð¤äeHÿttÀ­ý¾§ñ)ÛÎ/ôwGWÖpU‹G•÷ƒ·àGˆàº¹‚ÖÓå\L§ÈºÜêAv'g–¹\©»ä¶rvu‰P–6dt¶‘•”à‚ò qð­m&’x>Í’F–H¯LŽÊÙ* 4`|§¸î<Ôw¿î4ë;ù4nõ!0³}•P–› ~RU€lœ»ß½L¨á'ËU¯Xÿ•Ĩ`e¬k8ÿŠ?ªlÚÔ¤û6±c¦Z=ÒÏv’H“½ì¬#)ƒÊ’Cg=ÿZè4Û©/,VY•Pïì?)dr¤Œö%sø×—¶›âu“ΣmµFHî.í¥–7uïxø= ù‰f¯xPñ¼VGaeiÌøžW1<œë‘“œã©5›ÁÒöª4ªÃm¹­ó³_©K,rƒ’­¯Þßš_qvûâoØ´}nä鯴û¹¢·³ûN>Õ m0iwìÂqmtvœŸÝcø—=&­â?IÉ3Iö¶òL ÌG›#2Y|²¬v‚HM̱Úv‘^{¨é/ý¼šéßAç!ó$o$ó% ‹'?6ÜpH 9êN.³¥ëš½õÔßðŒ<~ÚÚ[Ow¼>|2űçãtiç|«´acEÏ­³«=`âý$¿ÌìªïX8ËÒQÿ3Ø,¼Q¤ßê-cÓùÂY -¤±Ç$‘–‰#(G`QøRN@H’ë\‚ÓY]9ÖBÿb–õ¶Ã+1Dd\ T!ÏÍʆÜ2¸S»#Îíõrßû7þ)mE¾ÅªÝê_êÜoóþÑò}Î6ý£¯9ÙÐgŠú•ç‰5h, æ¨Éum§½¤Ò›v tìð;3 @<¶0xÇÞYr:Ñýˆì¿ð(ÿ˜dâû/ü ?æze‡ˆtÍJâ;kiäûD‰#ùÁ$R(ŒÆz:‚‡÷±C‚2j8üQ¤ËýžÉ4þN¡s[\ID,²}Àe+±YŽV!‰eÉò{{Qt[½:ãÁΫs¨ ½–R[CV cXÆq¾!*–ÏRÀd ±¬ÿnj¾!Tÿ„Mþ[»k­÷6/5Ì^K£ypÍåÆÞ_+´ó$‡ø°ììGeÿGüÃû'ÙàQÿ3ÒnýñìS÷à‡b~L¨ÉÛÇø‡^ñV·o=Œ~½ƒO¼·kk¸^ÝäbŒc…]ŽUˆË) 0ÛªÛÍâù5kD²Ð^;[kûBÞ+›w %˜M¼<¤ª•ýü˜TýÑ“ƒ¸þίÖËþÞù‡öN'­’ïÍó=KRžú uþβŽîáÜ(YgòcA‚K;aˆ`mV9#€2ß“Å×ÃD‡X‡FìÂn™Íæ §y@¶ !3—* {¼°âH°rÄ.>¤Þ>ÕmÖÚçC²6ÅÁš‘Bθ?#þó% Á cv0r¥”«é^=Õ¯¢ÔfžÂÆ[va†XÉP ¨ÆHÈÜNàÀÀb õÖ¤ý½Êáýš×ÅV þÞ¿åvuúÖ«6š,¡´¶Žâòúãìöé,¦(÷ÞB]±Q¶7ÆóÀ$ŒïËc£¦©.m¬RK Éžü#<ÑI$o²í&gÌNT7—¸îX&5¯ÃMI¯§Ô§Õíìµ §óžK}»ßk.òWg͇gÄÜüƤ¸øSçÍm)×d/æ½i-÷´à°?!Ü6g$ïÉ9Çbþ­†Ç[îMþvÕ0‘øëýÑoñvFþ»ã3K·‹ìw6w·¾ÕQqû´d³²+•†’Hãeççø³wP[Å¥,­.È—Dy“’AHÁL°é´çîŒVÕçÃÝ#÷3épCkw›ÐÜ«ÜÂà©R²F\nbFÃ<ãeð…éÐ_D‹X,.âš+èšÏîØÔ¶y xËdh &Ýo'”CCs(¹¹I#.^täœ.ÑðP¤AÏçšQEQEQEW¿ºûsw³‘I·8Ý´Œþ‹>¯wk{¨if×¶qÜOܶDY—iÉÉI3Æ: äìjVÏy¥^ZÆT<Ðfž:»uþñõ5æ+à½]*éz’¨_Æ÷Ýg:Êžœ‰Ð«SZrŠõvýAðæ±&¦—Ï$RKg|D*IÔd}©5ýZóG[)ᲂâÖ[¸-®îLo›*D¬ªƒòù •éßb·ðG<k\j+lËve•·M-¼‹"ù ì\‘†_˜.Ò£i¹eãM>{[¹®"»í¯f³òÖÖi ̒ȃÊÚŸ½%bg!7lÏBjGñ®‚’¬j™¢–s0@YÑUˆO’BñºÛ\mwŸà·Y½œ—3ÚŨI¨ZC{aç¢É)”È&]àJ¹Ê°®%°r[ø-£)Ü+}„˜íì–ÔÛÝÉrB"XÈTH$¹$ ‹¿ÛÅ¢Ûêv«ö˜f»·¶“S$é neY ©‚¥NLý{Å£E׬, ~drKœCÓÌâº`V4SüVã‘»ù c$þ™¼7.—osLê1Ï%¹uVûgÚ‚” ù~ðÏ^:U;¿ ëZÅ®µýµbºœOÍýœæòÖí>ç¸enÿ¿Õ3üXž)ѯµtûkÏ2òX¼å€DáÕ2êK>M­£nÆÖ¶”ïã](•纞ݞQ Cqg4S3²»(²;„næe*¹n*¾àï°®«Nq&¥iäË-²ùO-į$g'oÍrÛAÉ]£%5Ÿ£|>þËסÕ|í*.X¤û>™¥ý’6ÙÌ|1¾cöœîôŒ sÔG­éÒý›eÆ~Ów-”_#|ÓEæo^œcÉ““ÁÛÁ9ßė¶2ø¦þîKA¥èî"Ž%¶”È[Ȇ]ï"!3) nÏ®iÚ'—âý[Y–ßÉß¶+Ÿw™˜âóeëÆï.ö‘ÇÙ÷õ†±õ-3V¹·ñ¾••9]g?e¼2Ä!;í`ƒæ÷¬®Çåûªq’B KïM¤_·ö­„vÚiIäYÒàË:Ç yd‰S ƒ±Ì‘ ¾Äž/ÐâHd7r4R§™æÇo+¢E¸¨•ÙTˆâ;X¬ŒB0RÀ ¬»¿ ë±kÖókV-¯ð<‡Ns:Fêëó¶í æ<3³uŸËȱ­Ûúè_ÄpsV>LjZÒ¾äø“+ã-û?v"ï/>îyoú=SÔ«ð`ÁIDAT—7¡ÀB!°Ygà,èßÚ75×*ƒåÇ%,hÆ{CGÝÓÈÛ¥¬ÿ¦ç q¼`^¾~-²‰ø7_õ*(ì8jo”Ôk€TË}1øŽ¸ƒÄÖeM'îîM6¯Ð,펤BšgE8Á*C£å!|ÚÑdÚmÁÌkP´l^¿¨˜ðy„ ú’gYÙˆÇçäu£oGýÔ:ëg+ì8°à;±ßï¶þðú®+ïè1àÞ`þ;qL3õø$§¾ ¬£§˜ß‰Œ²a2žù×à£+†_|C–aç¡ |bê-£P¨7‚˜Sþ³­IDATàìüÄQ%ú e–b޼«*dÀI…¿É7†,ý8ß‚ q‚ï´Ëøè^azW÷S k‚éÞh2ã@ÇúÝLÊÔXÿøè^4$1¤ßÈÏg|´çG!÷`Ñâö¥Ö²!8W|Ný²HqÚ€â[ý‚ļ ^9ñÑÀëç_>·ÿÈ„Ýh,ZÜî˜Á؉Á€,µuZ“ìh…Ф¹xëÏÏwýLìbão¿´é~>½TÒՙϩ_6*’¯ñKšëÓj€±êç@j&©YµºY«YuÓÚõð½ÎU!n‡ê4/º9ÇLËStÀô%Zš+¯‹É/Ó‡‘x`UIDAT )LACj ¬êv«i5î»ë&þ’i5ê¶T7¦Å«ka,DG@+ìMXP1 -I˜¸Öê_‡ºÕ§'/žž¼X9óéÈ©O†O~082yèÕª{5ü¶ÈÒ<šøü¸TH‘4{ —‡†ºËÛé”þM7òÙŽŸ¡OÕý(¢è§}IÓ©K-Sß½ 8Jƒ4÷…œžþì‡Sg?œú빿ÿeüoÄ´[í-öcgÞtˆiSCMLý®_±úCi~0íVèXµ¼cÕòuwß|×m³Äž8ìfž8r? ï‹_â<øAä]',ËTJ_U—úñy0Ò uš'~€và‘¥¡œ:2# š’Õ([IDATÜÇðþpj9ºU…)«/# R§âÔWeùÕWyÂKÖÑVß½ 8ŠŽæ‰ˆ¶ƒt¥ÅÔïú«?t ~Éeü€ ï‹ÏG Ðüú‘²Xv# òKîãüú÷‡‰ÀHƒ¦¤èñúøí}±·Î EÐ# š•lõU?€$Æ E㢃ñHÑÉ_ü@’ÎÁêBw†|‘¿ø‡´Ú¶ïæ£ùã öðÑ/…d™\ÆÀBßc'%Œ?“©HXÜqdp/¡[~Éeü€ Óã Ý0ÕΘž~£êhE’r?À p‰£óø-‚41yðìÔùæ¸ÈZ†gIDATèJ¾¸P s€£A¾ˆ~Ð'Ö¿? î×ÕS Eôßô‰6~€9•õľ|ú5úºS$ËD¿/¤O˜øM{~ýêËË_<ày€¡|‘ê80×bÏ5:îX±îž[»×ÞþÀ†;gk¦ÓôÀ1†Ùš·HÁIsÈWüÒ¬dkãä‘Ú@ã‚dl’ ÓÔÀ‚¶•ж ÜMͺ¾sƒ«¾ð˜¢¸Â‰Mæ &Œ`¤ñbs“…ÈRdU{†"ïQ¿^™æÌóQÌ:dOLý4`á»Jh¼}ôUÔÈ%Åõ™‹_kJR» szºþûÊ=]>#E Õ <2›×¬W!DM Lþ\ °Æ}Ò½ç‹ýK€nÁÊÁçQKÚ—r¥s¼eÿÇš:ù}‚j¹Xßoú=SÔ(êM¥-ê÷bYC`|ïâà,èßÚ75×*ƒåÇÅÁÁ†a¼7t4RµY…ý_|»©GIDAT1¼|ýZd9ðo ¼´µ¿,j.Dê5•£å¾‡è1ÁÅ ðÞÐQýA Ši 3£©j&Q¿#Œ¶ËL±ÎWßOãý7¿8ã@eh´¼ãA ¯Úd@?²†$&ÝWóå…0SYc•åQ¬/…+Q¾¬ŽYÊt£oGýÔ:ózò¥d)¾ðT#³°6àëóð¾±*C£åÝÎhÀ`À5ú#mÂtþ”Ÿ~xnbèÌUx×YOë—å5Ñ—¦“Y½zÉÖ¯(/„¿]¡¸ºóÐiÅñ ñÈ$gazàK¿ys|'F¿Q¤è¤ßQ!Hº ß(Rtp@ŠŽ2 IDATHÑÁø-Ÿœ0¤? ãkíÎAö·Œ0~À›h-!ÉJc’¦‰ÂùȘ.‘Å€qéÆd“Ôo!uD?Ë–`ü€¨,súõÊ4gžº^ÅýÊNýÞ#“’/0~@ж‚eæÇï+R„Èl^QJGa¿÷¨¿ôbBvˆ+~`é‡ËÓ÷mûͱ½?ÀôLQ¬Þ•zÞ£çCÖïàR!dü€ Ä ÐvMeß¾ò3»¿õkølØõ,ŒýñÙûúvžŒïd½QÜ»1¼|ýZd9Ô ßæ8©¸ÇT¶¼¢%düÀ•oã¾TÞõK0 ¸úÒž¥RIDATàµß^®ÂØÕÓpío/lŠõÿÎU Êp.ÁšU3‰ú½]Fö<'ê{T?ä öý4±Äx⑱Kpá“Ó°æ€ê¦¬ð ò}Œ~óå…0sPÙ‹”å.0èKžeuÌR¦};êç¸^õÍ oYX—Z‚°T¦ˆ%~`ìÀôä8\ž†ËÓ:¢h{¦ó§üÐÜPny ÷¬Â³¸ÎzZ¿,¯‰¾4æR$×oÕ²¥Bôñ}ÆÏƒ »ž{õˆkæ±ß/¨ãb# suÇŸ©a!®øïÿúO°¢ .ŒÃåi¦õ#H¦ˆóïÐ\ל!HŠ`Rt"˜8ŽîÉÝê½IDAT¦wu?R2‚$@4¬cýn&ej¬|t/š’}¢YØóƒ‰{°hqûRë Ùáþë•P‚¦XÏl‘|\ÓôG\]*¤ÂáÈ#Ä‘ó*xåÄG¯ŸqøÜþ#v£±hq»cc'xJÈøCŒI=}ÛˆCrò¢2‹t.¤?˜s-– Ûï_é¦X6üà¶]Îñ?ß~)Œ~Y ¦=ì,l#ÉzÀ´Z`¬ú9šéþÑùºiízø^窡o½Ð?Þͬø ,ó%v3 ]…u¼áUëøÖ µ¢õ‘)Ì?ú^O€.¥y´À ä”ƺÝjZû¿dZºáØ IDAT­å–G?MOÿ->›°ˆÎçRY» ÙSx ¼ÿ‚Ðx<å»ÇÀ äõ€úסnµÀéÉ‹§'/VÎ|:rê“á“ ŽLzµê^õE„. qOgù¥yb­‰–ìøå¡¡îòv:¥Ó|¶ãggغ½"¡Ô}˜zÖD×’¹g©S…P¾Î=ò—t4ätä(îQ¨m0rJ¸XJ˜ïéÏ~8óëbÚ‹[¯€á‰Ã=½pÅúwøŠ(Þ3•©j&1_Í"_ÚFŽt.¤i·@Ǫå«–¯»ûæû»n›%ÖðÄa7ÃðÄáYb1¥èçî4#¾%¹é:ØÍL÷[\3DŠIDATtŠPšNYfEY¾?–IV·?Ù“ê&|ž¼VÁžªgÎüÁ8`Z-¦Ýx÷ügîŽÐbõtö:fà W8` ßŸ0?®ØJ¢Ýi:UxW÷¦¾Šó•Ê4ïBG“ÈQŒs-ö\£ãŽëî¹µ{ííl¸s¶fº³ Çfk±†R"Hp"ì¹–£¯¢SHÝv À¡§³—Ôm¦TLG|}RÉ:E¢R8ïqŠÄ²º~iŸ8ó•àï5!HêzCA ’õ‚ä´¤è  Em):hHÑA@ŠÚRtТƒ6€´¤è  Em):hHUKIDATÑA@ŠÚRtþ¬¡£ȉº¶IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/affected-paths-flat.png000066400000000000000000000065471203611042400327710ustar00rootroot00000000000000‰PNG  IHDR6t€9‰- pHYsÄÄ•+tIMEÕ ,4ôLE]tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíI®ßƇÉ@LjénÉ:ÃA ï /²7|=/rƒ {+÷|fAèWU]U=ù~ßⲺ†fOìAÚãØfñ¿ýå»ï˜f€ðnÛ¶ß¿~™`é§Ÿ9/æ˜àüôó/ïΫÿ}Ýgžl€ûò‡Õ4âVÑßøøž_wÔ¿09N²UtD­P æ>||ÿù×/ŸýB®=zF¹ˆj V·lçŒ.çì¸Ò‹-éCœšÅÜuŸ\§n;NaîÃu­„\ä íÈU”“Vž9¤æÒ:@®¹cNa^WyBå:?‹À[À[EãPôA8yNµž_l=IDATtG¨¢g¹LgS‡»RsEδx®w¹9[éH€väé¢sUŸG%°âµ9ݾÂ- r‚¾xºç·Öu=ÌŸb7Èëgz- sLáT¹™€.ìÇqüþõË„yŸ^^þóï}÷ýsÌ•‚ÏHO//X 4ï¶ä Ê&›sòãÿüôò²Ú (ûßÿúçÕ>²ì3toÛößÏ¿ýéÃgZàÖì˜# 4Çqœ霿g‹0Ó"þâï­ÿb  @h¾-ºìûâ…ÊvD Nµ¦X—ü¹”ìû>3ÃO[~‹\ryñxË|«¢g_JŠÎä’´…/ ½*êqþÁËüÊ,i¹øIDATRz²œ(½è-˜üQ0Ÿ˜Æôjßöè^¹pÇÙÌ_'8qÚº®E7Rây…—0W›jæÂD›x'gšçÒ’ývsž“üñØMM‹ÚÒœÜ2ðLÐ=qf×`FGîøEº‚p½h ¹Æ%ÝÒ9â=qý~+zPçId»u”ê· Ž+C‘§‹nÆÅ“.1ìúê+U›Êß´T¯ïEÉG…ØÔ)Õ\i¯.Næqñã6}d¦Í²¸$÷íèwÒeš]‚òTL[ô.øëóAq/8¯ª¨ò¡?Ü€ò“-œtYm·WÚ" þt#°. @hpÒ€Ðठ¡Á@€ÐD©¢ísô¢§ZS¬Ëß°6²9nšÅ9©NºæZ1-IDATЫ¢žË3ÒßîˆÒ‹Þ‚[ÏÝŸ< „·ݺpí¡»þNp‚ï>ãn¤ú²gn‹ö%œÛ–M´‰wr¦Íµr1F¿Ýœç$t»J¼¹ŸE1¦èQ\nº)o&ëwÄò¤KŠU.ų…Z,úu¦?ºçÊ‘\“¤¤ò8Ü=F¾™AôpÒ¥¼ûšwtêìV­Ž´®m!׸¤³•ë÷[ÉÒ·ª:Ps”Q#h']zšæ7[ºÓu§zŒèWG°¾MûÜüAÑÄWB¦.DmŠŒøq›>2Óæ†Ù\’û–†£çCµ]=X1dO’\¦0HÁIY@7¼ÕºIDATa&÷L5ùÓrOüÚÈ£.Ùkú):l^ öŠ`]€Ðठ¡ÁIBƒ.¡‰REÛçëE Nµ¦X¯ ô×ÅÌõ‰}úIСŠN.@Äô»NzUÔsc¦ÑAÚÀ¢ô¢·à«á­A·.,ÙÙ,žOr\Âʲgn[ù%,nwž8É™6Oˆ1úíæ<'ù£ÛUâÍý,‘Üí¬ß]DË“.ižºð47bѯ®8’^+wDrM’’ÊãpiŒ3Ûô7E¸*šRúÊ•R2ºUŸQ¶":©³[aÔŒµt¯ª(™ú»]ŽçÚòt`6""®ßo%7Jߪê[utÎQ†§’IDATãèL~³ÿ¿èŇ9pÒ¥M›žÐŒñ¦Å&2ëºi¿qà¤ËmOº`®hÚI—%yVWÅ™ô'w8é’±Û%{KMƒ°. @hpÒ€Ðठ¡Á@€ÐD©¢íK¢§ZS¬×úëbævv²Ü=“ »öƒ¸QNºЫ¢-;Y/íbúb•©3ÕO'³~]ôF<`]aU·Û©œtÁIígiŒD@/K¦Qå½›TˆÂœu½2Óæ —ä¾¥áèùPmWV Y´¥˜Vâê‚''Eù´ ¸®såp 8é" è&ÌäJÖU¤åžøµ‘G]²·ÔtNÀ4ºIUݼpZ*ÚVew@'] Nº tM”*Ú>¹'jpª5źÌ=¦ Î3ç÷Ér÷Lb.cÜ œt) WE-Zv²^Ún·±\‘•¹ºyIDAT´f»£Û ^ÒR¢ô¢· ÎD|5«B¸ïf˜åठNºh?Kc$ÎÎ7RŠ’oÛë·™õ»‹byÒ%ÅâinÄ¢_'lú£{®ÜÉ5IJ*Ã¥1µé?•J[jElëãWΓpU4¥4õf{è+á%؟м£Sg·Â¨£?“IÚÜp‰¤j‰´´‰Nºô±KôWô''z-ÕÖ1¡£?“=16æÃ“ÀI—ž¦ùÍ–î´…AÝ©cKÑ¥KÐëükûú.ù<›á¢ÌåJÈă¨M‘?nÓGfÚ\áã’Ü·4=ªíêÁŠ!‹¶r¦=ù¯x¨“ó<Í·ô{w–EøI‹žIDAT']dÝ„™\ÉºŠ´Ü¿6ò¨KöÖ™6…‹Bóx%›Ë°`]€Ðठ¡ÁIBƒ.¡‰REÛgÃE ¥³‚ÕEVö}Ÿ9ûO–»grÇEŽhà¤K½*jѲsõÒv»íåjOØ^ÇrÝá7‰]‹{ƒX¿.z#î2M¯°*²vZÁíöºõ']pÒEûY#pn„p¾‡µKIÉÌíõ« B¸^T,Oº¤˜×)žæF,úu¦?ºçÊ‘\“¤SÓáÒ‹ÚtŸDæÈìĪ6-&U9OÂUÑ”ÒüÒ›í¡¹ÏK°?¡yG§În…Q3F&“´¹áIål€ü•¶§ ƒÔ®IDAT´z/']úØ%ú+õ½Œ–jë˜ÐŒÑŸÉžóáIà¤KOÓüfKwÚ îÔŒ±¥¨è”FYŸÚ½î+&ëºäK@l†‹ò‘+¿a¸9ñã6}d¦Í¾Ü÷U.=ªíêÁŠ!‹¶r¦=ù¯xH”(N𤙙~u“ÏÝPýNºÈº 3¹þ¥Tš–{â×FuÉÞ:Ó¦p]h¹Ì1¯Í›Aˆ²» ò%ƒBZ?·aIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/apply-patch.png000066400000000000000000000416631203611042400314070ustar00rootroot00000000000000‰PNG  IHDR)ÝW~Û pHYsÄÄ•+tIMEÕ *Î|>tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝy˜U¹?ð÷TUo³e’ÉF’a¸1,*†%, „E K¢„‡›p‘À½x•Åë¼\@ TP ˆ@žKDQ®a'ûB–I&³ôRÛùýQÝ55UÝÕÕ=ÕÕ]ÝßÏú«O:Õ“œwNSõ2Î9Y\zéõ૟þôFë[fÆ#ê4­«µµ­£clšu§§gOßú ›È²±çÒK¯?|ÖGŽŸóÑø@"E±Š €º¡i­[·ùù?ýýµ×ÿÏ?Œsnž¹§|âà“’ƒ)YVSZ2™ªvƒ ÜššÍ 14¦CÅIDAT5'Þ}oûÚÿ}É?M›ÖižvìÙÓ“–e¹¯o°Ú €zÐÖÖFÇvÄž1‰è}ý½DÄ–/¿nîÉ'Ÿpâ¬={úwíÚ780˜J)Õn*ÔD"ÒÜÒ<~üè±c[Ÿ{öõµÏ<#ÑÄIcöìéÛ²y×¾}î@wn=hõªR÷Z¿pÉÔ Súûåþ~9“–‰øÄIcˆH2>L¥”x<êsc ü¶õl?hõªÅËÏàS'¨4ŠHÏ.’fDö£ý$méawÞçªÝ/ŸÜ1‰ˆR)ep0;‘ˆ(‹îß—ÆÚ6ÈkÜÏï\pî1ÉýizÑ7'IDATm“–‘½ì"¾µƒˆœ{Ì£?¿S¼æ¿Œû{•¶Ñq2Ç=5#DXeÚ ¡§%Ó\æ‘x<²­Wi‹óXDˆ3ѸíE4)GúҺʕtš©"2ãKFÍYb(rÛacm$uè=£ÈôwöîÉhª¢ÆÔ:Vš81žhŽxÖPM™ŒÎU•kIQÓÝø"úå×®â"SU]gÌ|ñ¹›n%¢/¿TKgdEgšNùBŒTè0ãõèÄÑí•6í|c{ßδ.ËjF–wïWR›2c#3í˜0±¹’g µB“U¸"3%¥>µiÖ5ù¾¥KÔ\•è¢{W ®ÔIDATí¾ö«¤k:ç¤kyk“ˆˆ1""A`D̘-JdxG<i‰fâq¥W‰7G2²"Ër:#§3r*•y÷ýÉO>hÔ¨81bœ¸±+'"zïÝ7¿þßú¯Û>xfÙçùû߯~ãÍ׿rÍEKžÿÙÓŒýèì5ûðÃ?:vìø²[êÑ™ý7¨_¸"ß08'Æçœc<ûã×¢D*ib6Ü<µiÛi]“W~æÓÆÛîßüÖrxJÍôŠºïwѨD¬_Q‹&¢§}v09øÛ‡î¿ü‹ýøöŸ0¹PÉ¿ýí…¼ò×e˯ôñè ýQ#Áoƒqâ¹Q‰¹„TEa\"‰‘&l»êÊÉ·~ŸÌðsÞ¢î‡4϶«®$"q-ùª‘$ŠÄ‰3Nœ ŒQvÜ#P<ãDŒ81&DH‘š¢)bÄHŠ-­‘‡ŒU%#ÿɲ¬ddEň$’ΈgcÑOò="ºíG·œvê'#’0¢ï€1ï5ñø™gž{ÿoîûýc]ö… Ïÿ¯å¿¿ý ’\èpIDAT"ºúòOsÝÇ£7 ôF¿g4ŽÜ¿kFÄY8ˆ4"ÚzÅS~øCÊ…3ðl½âŠ¡ºt4ˆrcŠH"ˆ²ãA$‘SndE\`ÂÃ=¤ëi]×u®ëš¨ÅZ$ªÇ4UÕu]#]—4½—sIšBbÄ9±Ý»wÑ'O?ûñ'Ù³gWû„ ƧŸ:ëD":㌳Ÿxâ‘îK.;÷ÜóÝ·›}ìÁ•wßqß/~×Þ>º·wßEžsþùK.¼èçW&JbûØ"êÙ»[d‚.Ò·ï‰'!¢îK.;ùäùíí£ÃÑégŸôØïŸ%¢×^{åÏÏÿñ‰'9j'èKIDAT㌳Ï>çÓ“'wš®þݯï\yÇgœ}Áç>ßÞ>ÚÓÏ­± GjøI7žëÉ·,7¨ "EçQ®h–U›®¸¬ë‡w‘x6]q™µ6ÆUEçD$I"ËÎÉ0AȈ="#qøo÷œÔÙìXóA¦?­¤3™d:“JÉ©t:™Ê$Óéd*“J§Si9ÍùüÐ EĈhç;ˆè„ãOzüÉG¶ïØ6ö€Iœ ý½]ñ…«çÏ;ýª/a|ÇøN>µèv"š={ÎÊ»ïXÿÖ›G;ç½÷Þ!¢c>6;BLwÜ$Š’qãÒÉ'œBŒ‰¢xÅ—¾rååÿ¾ïÞ󗜓\rñ9›gEIDAT²?<ñç3Ï8ŽˆžzôYÒé•u¯}ý?¯ºñºo_yù¿?ùäc½{ötuN5<ï¤ùÇÏ™»äó‹ÚÛF-¹x¹õD€ˆˆaäÓ0ð£n Œåæï‰g;w󇯫œ ÿWoñœÖ5ùγX?ÕÕla1{…Œg¢9ßÃDHœ32*0Ò´Ô‹h™ 7ë\×uMÓ5MÓt]S5ó­®ëº®GbÆÀHÆîëÖýƒˆ¦8ˆ^{ýGý ax˜uäQDôÇ?®™7o¾ ‰E·O?è Ouî_ÿöâ±sN|åï/ÑS¥h„‰ö«aª’~äw÷sÌñÿØl1*E$ñ™gÖ2‚ÜIDAT<ýôš^øÝÿëŸ~é21:´¥æø_þòG"šý±c„ˆô©séŠJ3ÜÞ>ZlŠÑý¿^õù¥Ë­û~n$®`C½KdCË XTE¡H$¢iÄIgýÛ™‡rß~rƧˆHà:1R9©ŠBDѨ˜]¶@dŸÜ5·³^×S£Âœ}ûþ¾~ï_·õ&Ór*•N¦ÒÉt&™Ê¤Rét&“Î(éŒü…KOŠJSÍ×ì~ñ‹{ˆÈ¸Bõ«ß¬ºä’‹D†Åãí‹ý iz$õ²ýÜó>ÝÝ}Á‚ç=öØC—.ûbsSs$&±á£ÓœHD×\óŸç|jYúLWIDATQkk[4ùÍo~yûí·ÝõÓû¾ù›O=óx"âŠiŽ[k~챇Œ×1ãˆûX*š‹7¶}²KK !0 |ƒåÇÌØðAéš®2‘ˆˆë—=õ¸xÞ_¾|úwR.üÜqÚ'u"â¤kÙ9õ¨1‡P‚‹=¢@¢$±ÜE=ÆIÔ¬Ëz׸æ÷÷ôõì3.µe²—Ú2r:#Ëõ˜Ù2ï°HTÊþöË9c´yó&ãHF$ ¢ë×øˆÃ¬çHD4ûècuU3^Ý~èÌCÏ9{ᥗ]LDGvd¼9‹Úïl}êÑg‰–„“A¸ýöÛˆèÀljMØŽb¾>þ}–¿üIDATøŸþYÛvgk¯ãž‚ß3ã<{ ‹ËÝ:cüôuéºÎ9gŒ]ñô“fày§ûãÏCVÞM¹ðóÃy§sÎ5-»Œ yv"‰‘®RnÜÃ"QëSDytB$™ÖÇ;N‰ýíí­ÉT:•ΤÒr:#g2êqÇMÿüEsºk^4šýþûïÑ¿÷AÓf¬ßðÞ®¼ä½÷ßùÈQ³$Ëxâ­·ß ¢“O8%Fc‘BÛO8á¤çžû#eN?ã“¿{d54mF¢9.å»ü5nʰTß7ß|˵×^ÓÛ»oÇÞìwÔÛ»oÜ”±Öš/¼ðâçŸöÕ×_9õÌù˜ä`iIDAT?ü`GÇØN8ÉZ‰µ…Ö×õˆY‡:æ3D”Vu‰'ñúךçÍ¥ÿjþúæÒyïψè©MÛ2íÆÙ'kZvÆ'š-0"®È™÷÷Äb’e=7'b±ƒÇÆÚ)!2*~ÔÌV=òòÆ2‘>ô‘)ÇÏù—ù§~xÒÄѹi)¢ìý¥ôê?^!¢ ?e\û„V"zýŸ¯·hQ,–m?¸ã{?ùÈÍ7ÝrÔaG·´5»lÿêW¿¦*ê›o¯›2ýT":òÈ#ˆèÚ/_GDÍ­My¿3³6Âçèª~þ’s~øÃß|Ó-×~íšÁIW¬¸ú¹çþxÚ¸\&ÅIDAT‚×­{wΜ9?¹ãîÇ}ô«_¿êüó/½x™®ê ˵5k¶ús Þ1|YõðHD*'®ó?‘½¬µî¢¥¶½×]´ôÃ÷ÝKD7~âDUçZnßX4’»‡iŠLF\ÓÝÖÞn&{+kn±µ£ –§¹ÙZ˜vïèéë˜vH§ º¦oxgK[{˸:f<•ˆžzôÙ¶ö–¾Þñ“ƶŽj&¢BÛ‰HÎ(=»ö;*žˆm߾턻ûÇ¿8êãGšL‰ˆ¦Ïìr~“ýûwmß3qÊ8]ç»¶ïéØUòã]Tm_òòk¤ˆdDÎhèynmíc¤@’–Ξ3«¤í¥–€J8gþ‘¿£kšn¿ÅÜÂrK¦Éu60yù5çÌ?ÒbÚÚÇ{bÑȶ­[+Öf½ÓO<”N¼§ŒÓ™Œ5ÄtŒOfK'dYIDATÞÙåKã\g=ï½ûΆ »«Ú¨sÓ¦;îØÃȈ=RDj=vß+oþô§HÓ þàœËŠ.+\Ñøuÿñ­#š)E$"ÂÊÀOºNªÆ3Š®¨\)p+bø€sRT®ê\Q¹¢šÏ°Î±FDÕ¸ªqM眓¬pÕÃc{ œ“¦sYåœs"R5’Ù ö@Éd•«Z6êÃÍkÜ!B쀒hš®hdU#ÅëÞ†>7 ªdþ·gtóÌÇ_}°Bõë:¥e=£Ž4ðÆ=uC“âŸ9ë‹·<ü "ú䋬=y¸aœIDATþꃯlxqçþì³m¦L>ôØÎÙ'|h¾ÇšÍ5l–-\Q¹ûb6÷Ô±£¦|æÜ«nyâæèçVÎÿö¬ûßx@m8øˆ#gÌš6cÖ´ýüýÛÖÜpÞŽõ2H2nÖ±Y)?ðPUÆ=Œ1"â –ÑvÖÆ[ÓÈ¿ÆüVÀ¦5i;í3ç^uËÃßèOõ=ÿöšýJÿ9ç|qÔè6"Ú¿¯/Áˆˆš4ù˜Y_¿}ÛÊ¿ÞúÄ«Þ|þ­‰6gmœ“¬êœ“uxFØÙ¸Å[ÿHº6¿z@ë¡ýíOÝ[è{H(Úç—\F%†&1òÜú·þeÒŸ9÷ªmðwvIDATŸ<|ËÑG-úȇ"¢7ßy«·o“µdGŒ¦vN»xÁâ'ž}ò²_,¾ãÂûmáǸkÇV¿/‡¼Œ{¬¿ª3Æ‚éìrIèí[Gôñ| ÕSéú ¡$1“Ü÷ò{>~èQ‹/º‰ˆvíܹmǦLŠ(® ôD")£¤ØÌÞÙ”Š ‰3N<ýé—ž½ö×Ë´ôã#N¤(\wô*Fàñ¥åÏ÷0 s‹õ£BÅœ5x<–s—¢ÛÅò(ïè¶³+´Ý¥ äí»òòUª§èwu#.µ2±?5øò¯Œc»vî|{ã[™Ô¾=;7oÝØ—ÜÙ³¿ÏøoëÎí[vmÛÝ¿óžXÅIDATïÿüç¼Oœ¸CÞòÀ +‰H×IVô¼GQ}û·ÌùfçÜ9Xq¾u¾6w÷~PÛ.Þ«*u8•w dÅyv…¶[ë)Ô†B{yüª]êá×!’Ò5"j‹H¤f^~ã•þÔ mÞº‘ˆ"ÊöT²_ÎdÇ=©X¢9ÙšJ¦úûe=uÖ‰ V>|Û'X[œÕÇÇ£ÌqOyM°uÁ~ÔßËV…ee„ß•¿áÁ îÅ[r¿kªãÅ¡ÓgF”í¢š¾è˜KW¯xþ/7lüË ï\ºzv× ;¶oK%S[vmÛ?Ø;}Úy—½iºŸ#CñØcíˆm¿M×ßöª *IDAT¥nAÞTú{¨×¯*$¡7"c„µE¤ÚÇÎýèœSÏX*sebû”Ú§Å9àÐoœû{/ýCÿÞþT2õΦ·ÆwLyþí5¶ÚtN¾ò{lÝ1Y®êX7Öò:w>\%šT_5TBLÈN£°DÜܘûuÀé ®°Þ÷c8ä€Ctñ;¶oëìïìyçƒ7luV"ðPÀ÷÷Te‚!ÈáBÞ,ï¬1eHjʶ½ëö«½röÎÏYÙ’Vwôî9ìC‡œ{ÆÒ[žöÔUã]c?tÆá‹^Üô\çøÉé>km ¢Gæ…g‰Ô‰û–=¬rþûçé[¬ ô}aÞ׉Hç¤j¾µJÓ¹îcˆ=µ%ùÁ$ï/ÿè¨ÄØéLŠåýs÷ÿÇIDATR4®§ûäÝë¬Û/›q QÏ2‘¢?oŸÉb­ù> UçºNºÎuN…®°„;ösá—§ Héÿ×Ût¸m£$æŸüŽ ßžîßyë‡ÑŽ™-³Înêè²6qÒ3½=ƒ:ÍÑíD”~õg±ÈïÅ®¹RçIÆU#sUÍNí5Ã{ê’›˜}%Â"…HÈ-,cD$0¦f_E›'³ÍP?økoê:ꦉ‡šufù666{”Ü!‘f9„ñôë!Ì£4͘¯½~oò½5±øÔ³5Šš‡ðù{j’ÀH`Œ‘ÀˆY˜x™ VIDATxˆHdŒ}xi¼¹‰öoî}åÉÜý:¶À3ì(¹À#ä ntëèQÍ͉x4*0ˆHʤ)“Vcñxs îëûñŽÉ+œõç]V@DL`ýûû“M׉ëÆ&"…lØš’;DvËÖSGÆÛ§{9/Ä€ZdL½Ì<ø@]ã³<@‰HYü rIDAT$=WL$"A"" ¢(ŠLUÔæäz³xLdi"}ßúžmïšCUãTø:›Q¦cTkû¨VF\`\g¢h> D”ÚñŠõÔÜDƒûz{þAµ{üz–%ê\ˆßŒKUA~ÿÕúYãïÔsÎ?*‰,’Ýb|$ZV‹Æg‚ÀˆHQµQûÞWcñÁ¦oÐG°—q¾›úúïßEtððà Í!™ÇÍ…1Y$wÑ\û 0"âº.ì~…ˆ”–qÛiò&¥}p —ûÚ·¼7ÕSè)+öXœìòÏ•åKÕ\ÒQBÝ*§¢-¯ò°ÿ•ð¨?­7 ŒéœoÙ¶;Q"‘2ù¢÷IDATaëÂt‘¦qM׉¨9kk··$ⱈ‘FómÚÌ%ƒã?‘I¥šöô¶DvïÓ«oqÈyr±ˆ“éÁTºÐ^㉶ú¼i,O¥FõíÚ/ìÒ¥þ^u»Çs,sÜSjPA—à1ˆ iº.êL˜µ€xt]ÓtˆG9‘Ò2Zf$Åb1"°˜FDzÿ`ná€U¾%s¶Ä,Æ­@CÙÑ9Û5åÓ‰˜E…D̘ꉈ™]Ž=&#ç-ô3éQ&ï€É¹—ÉzÉ®PåÎÍcyÜÑùÖYÝ+,»ý¶Æ¸ŸšKUEà,™÷XNeÿ•>£šúÐ[IDAT‘Ÿx¡±ûë~1þ† "ëêœ@ŽUÔä¸Îfl7^𣑱֖VÒt"’åþBG)´V»­5ÑÖš`ÃAÙR‡]©‹¦é£‰hû.¯'èÛ|OÞ´.ill:åû§ž7'—­qÂeÇBÍv9»’vÏû‘—b^¶¸ÅcͶ†Ùκìï?È3ªDj³ t4ΉH䜘À9g,ûä4qMŒ{=ItbRîF jmkQU¥­);pᜫߟV‰(“NmعÃvÜ“:›šâŒ‘¦j\§¡åܹI&c™µ±Î›—$1ÖÔܪëDäuÔãïZ—ß }ßË}G[xpîXjþîIDAT_ã>­URU^øUg%ÚV^åm‰‡ss‚×—V§G×_kS2Stõ„ŽÖ1ím­MQ!‡nD%"%©¥µ%i'ê×u®jCµ7ìÜqÃ]?¶ý?.¸ìGÌU}ÕCÏ æ™ï1uM×5yÌÔIcÇ´´67‘ª²X“Çsô3ö”÷oµìáwÌû±_ ðüªÄÊ},|=…x?ñJ·¤º‡¨‘1Øô'ÈŠj½™Ô LÕ¹1Ó“¤D,eBD’QTN=î°tZ66 –㫹GÃ5´«¥:IDAT%bmͱ¶–x4"I’oJx?»‘Æž¼¿¼ŠÉãŽÖb¶É'_4ìoÊuvâô@-ÈN½¨¶fëO¡©²\g˜­E³Ñƒs¢\ç7¾£ã‚Ož­ɱsë­)w”ƒ:Ç:ç,%‡‚1Š'*{œÓ¼ÖÞÜû¿[—½ÌòÖæñpÎb¶·ÎîaÉVÞcûÝ[[´Þ«*ÔÔ2ÊŒäû¯ôyüæ]š”w @M1þ†îÜÓ›JÉ‚@Lꮹ®Ñ¨ÖæöÖD,±…Zw0ôOKÙÝuËßwÆ(" ÑHöI<ÖØFD©”’Î䮹±ìØHX,*6%b‚$%ðy?ÔYêIDAT»rbO¡«…æ{ÉÒ9?u…ª*¯y÷*º¥Ô ó~䱘—-^^mjå¾/-qi¹÷3ò±Ö·ô@Õ%Ó2cÄÓu¾kOÿ`*ˆ‚íýUÕ4=£¨ãFËш‹·žæ‹Øh¹Ç#dÔ¡¿ðÙ…mŽAÕÀ`ª?%qÎÄ©%&E#RDÌÇ"X÷òÏÔ¨9F?.ŠìðC4¢×u–›u1Lv¡sîʘ{àÉ{—µÚÇ·ObfÉìÿ,ãª<‡Hê^s# öTYýýŠ]ƒgäeäå#€`$uÁÑxŒ4ÑPF…"×ÙŠrŸC’UQ5²2cÆÏ¯ÿö¾ÞþßÿDtÛ•ÿilgŒ%bÒ…gíñ0Cëîž´¢éèJ}\QJîVLlC6ÄNóÄIDAT€š“œ÷ ¤ö÷'#RDÌMãh×t]QUQdYå‰èPBWj&ÌÞ¯ÃRÔ<Æû3¼ÓÒÃR2AEâe° uˆ=µePÎÝß# ;¬Ë—:U'-5˜¤ˆÉ=“Í¿áŽaPÖäd6¼IщѣL$)f-‰ØP+8çºn¬+«TÊw)"H‰„&Dˆ¨ÇÐU•ˆI""1ãqAŠJRÔÌ>—m†Ï‡€²ô¤EI'SÉŒR™¸C‰æD,3/Uæ $HR´©IŒÇI”¤$[à!Ä€Ñß7 ªJ*•"¢Uøƒ¿•ïÝÛ×ÖÒt!7–IDAToJ£ð‡^}õÝwý=ÊÖÝ=ѦD¤¥Õ%ê{jB<ÓU©)‘¸qi·í#ÝsJC-߃˜ FcQ#ûq1sæ¬Í$NDdÖ­SîÕð£©ùîæáÃd™ûщˆ Š:Ä€š0ftö~><$%öðaÛ9ñ¡0al7Ä‘×VU¡O¹eãЖÜv‘kC¶*Ý|Á‰H [UENÖknm€Ç¾Û‰QéûTb@-)7‚powùÔÄ€ZQÆp'¤{Â/lQkØZƒ•+WU«Ð8†Åžîî%ÕjÔ·—^ºÞ|=,ölÚ¸5ðÆaŽIDAT@ÃÁ| ±‚†ØAC쀠!ö@Ð{ hˆ=4Äb ±‚†ØAó9öLÖéo…#ä¥=S§uZ‹ùx ¶šÝVk_Õd“ >”{ŒÎÔ¥Kõ^Ow·UµqÖ¶ø[­­fßùû øU€GRñ"9FgZ¹¦xW¡fÔÈÙÔ½bO^æoͶŽÛ¹Ý¶Åx[t¯¼QÐú »ó(¶JŠÖlV[jc(•±ÙzŽE¿¨JW^èá^UÞÂÒ0B%Äkwoí-î¯VÞþ«PW¨¿s9Šm Ç¥ëÌ[³¬M ´IDATË.y?ÊÛB_޵Á>V^¨˜—-îG¡ÒÆ=y»Å¼%Ë›EpÙk„}_í)iûeçqýíôG8Áƒ#7Òkn…z¢2z¨B£~ý§¼¾¯Œ½ªÕÉVô¸._2@`|[cíï(/_:åJ€|T›±¡6[áRÚ:7óµ9Ow–۹ݶÅ|[h¯B‡v?…j(ÔNU9§@üªÍÙ`•[¿@÷]\~¥Và¶|ùu·ßqýêÕk×>ý§¯]»¬Úíñ æÆ _Ô’›n¾kî¼9 νü²G:ßSkðk;@í«·Øƒc…ojž% ACì€2Ó÷IDAT !ö@Ð{ h%¬5xzíÚʵB­»{ɦ[=.mÛ?_ÿSéí€:wà וT¾ä5Öß»í®Rw!ï´ ]S§T®r€0Ú·wû{žzüχ<•s"âÖO93ÿäôö;Î\0§ÔCÔÛý=0rk×¼tÚü93gÎ(Zrú›ï­]óÂEœTRýÕ‰=¯?ô5óõ¬ónªJÀ…—Àc[ûÌ ¥V^…ØóÚ꯾ð&ËÛk_xsÇÅÃÍJ¢jZÑ2’(–QóˆbÏê_ßY装ç/·m¹ã›ÿCDD|Ù¿¬ìºGM¦“}ƒ©Þ¾D4sÇ7Œ£IDATÿ{xYvÙu_±íž7£TN&­-#5{(_Œ¡1i@–ÔñÇ}m©l¼Ä)1&ûÑ!'»éÞ¨´ëÏÎÝ]²G@%¤Ó²õíÂsÏZýðïmeš›ãeÔܽ¥_ùÖÕ=_&y¿û=_þÊ·®öR¡1²þiÛnþ—wGp—JÉæ Ï=‹ˆž{–uc*%­$¯@ç{ö'£$ï/^Æ3÷a59tÞ×à"™Ê/–_²ØÜxáçÝy÷ý#¬Ù‡ØÃ³¾å<»|õ¯ï\xþrëŸýéÉ}D´ô¦ã”[#Nd,gÄ91’–._É8ÝsWwÑC—ExÃj9IDAT¼K§U"úÒåopû}Æëå—,þÁí÷¤fbllŒ© ëŸJŒ”ÝDtï5ý ÿ뀋¿õ¹BuÞûŸ¿yÜŒœÐ?^(Šòï+²Ã€ïÞ¶RQ”ïÞ¶ÒØò¥Ë/úîm+Ë®9Ðg‰ÊRH˜ÿõ®ó¯ýLz@IªéAãOó?åG_þíC÷]X¡6á§B•ÔÎùwn½›ˆ¾sëÝ<Ƕ¥¼šïIÊ"©éc¯›½ì+§î“9#FÙ'3pNÆ¥»»þgÍ_>¿ÔšKŠ(ýxg÷-¥iìq¹ÅÇ)£ˆG\{ü%—7Ð+ãÖI⌿ûG»^UàIDAT~õñ….5X†-x¸¼5^»ì AQìÉ{s‹×þpöÌÓ~Ç÷ >}áͧÎI{ |»æf¬d+ZìͧÎòëˆR¾ÅžRÇ@PËÖoØÜÖÖä¥X•=î)cG¤ØØg?{Þ=÷ür̘1EKöôì]ü¹EDƒ%Õ_ýq÷ÿøÄçÝ~Ò_-ïÐ×èöh$tÀXëFMÓEÑ~gNÿ@s,]jý!÷X{Ê—m[Þ}òŠ?>ñß?>úñO˜êñ^Røtu½÷«ž®Zî¸Æ=ª.êܸ)ˆs"ãî hsÇøÁM#?Œ±²o’ªýà ~IDAT”jæÌé´<8˜&"MÓˆH–Uã);Y–eM×uÆØQG–“;ηç”t£Oy;ªš¤sZõØ?îZýòí¿zá{?Nç<ÚÜiî§n|òÑ[K:.cÌö$:ï{•·oÑšý­À/Üxø&g÷•/LãE5Ÿy§ì4:f}ÑøtýS?.¯¥2Ç+»@£àF§Ë‡Bc# ?ašïQ4Q'úß¿¼£ªº¬¨éŒš‘•LF•õ² æ(j ¹ó̰áŒæøÃ,`}[¨6Û.ÎødÖªÙØâîqvî¶?‹v/ã¾Å`lWüÜ_=œËŽeÈ7î©—ù/]Ôt~ìÇ>IJÉN‰霈ˆWµü±'ï%µòš:^ÖjÔ ëÜfÜ£iâý¿]côÞ,w[S6Ù6g…žÑP#}}4  ,ú)²’{¦Ž"+jM¬5`Üóõ/-(ï0"ÙY Ëe¤‘ý:¦ç¹@51"Ɖùp'LãäïÌú ›ûûõBŸ ‚ ÕqÞR+äïÀâϳòg8ò–fŸä<„QoïšË2IDAT¾Ï/9“H+©þ0{¿ ©L"gŸ¿ä!—8FQ ÆcÑ.c‚¹|w×îÞ–Ä@I‡Ó|ò÷Ô‡0{¿ >„i¾ù{|ÉßSÆ ø+Lãäïyþ÷}‚Q+ó=îŒü=ÏüõÝ5yûñg×­^óÚ¯~ÿ·{V¿øÓž×tîcþ÷<'°ç “û¡KzŠ(æ™ xµ2îAþžB*š¿§ÏA˜æ{¿Çª¤ü=^òœŽ¤µ%©•qÈßã¥îù{œ…mg€0{¿ÇËáFR3@0B5îAþ€º¦qò÷Ô¢åOSIDAT‡0{¿ >ÔÊý=Ð8Â4îAþ€ú¦ùBþ€ºàÛ5·Àò÷pNœóÜ Š6wŒW7UnÆ([˜æ{üÊßSèVMF˜æ{j$ŒP˜æ{|Ìß“WÑÇçP¾ARÞ” ^çäÝ×|ëýil¡¦qù{ò†—„:yŸÎYh¯B¡ÂÇ4<¡V+ó=çïáæÆ¼irl[œœe …ŠŠ¦á‘Z÷™¿§[/Ÿ7Ùhѽ ©h€p Ó|ù{Ü•7Úð’£Ú©¤4<õ¡VÆ=^T4Oyix¼§Àñ7 @¨…iÜSÑü=mšxIDATÎíåmqy;ò4<õ!Tãž0çïS˜Æ=¡Îߦ0{¿ >ÔÊý=Ð8Â4îAþ€ú¦ùBþ€º€ü=eB怲…i¾ù{êC˜æ{¿ >„i¾ù{Ük« f…i܃ü=… ão.µ2߃ü=yé=¨`Ö B¤VÆ=ÈßSV“‡µ©€ ,Â4߃ü=îµ¹TPSjeÜãò÷:.@¸„i܃ü=Hðõ!Tãäï¨ a÷ @}Ó¸ù{êC­Üß#Lãäï¨ašï!äï¨ ÆL§IDATÈßA Ó|ù{œm+¹ÝP®0Í÷ @}Ó|ù{l ÌqO¡¤8Ö-%¥Õq©³¤gµÔ“0{|Ìß“——>E+ñ1I@½ª•ùž€ó÷PgtzIØã®¢IzêC­Œ{j!ø<MÒP7Â4ßã{þ—`PÒXÄß$=u¯VÆ=^T4yK„㞟Íß$=õ*Lãž åï±nñ’}Ç{Þ’ #ð@ãÕ¸ù{êB˜Æ=ÈßPÂ4îAþ€úP+÷÷@ãÓ¸ù{êC˜æ{ù{êò÷@ÐÂ4߃ü= Àµ©IDATõ!Ló=ÈßPÂ4ßÓ€ù{\öõ~²µ&LãžFËßã¾/@xÕÊ|ò÷x¬¼ì†ÔŽZ÷ Ƕ!Ô0Í÷4Hþ÷ÚÜ“8„B­Œ{¼h´ü=ÎÂîm‹0{$ü@Ý Õ¸ù{êB˜Æ=ÈßPÂ4îAþ€úP+÷÷@ãÓ¸ù{êC˜æ{ù{êò÷@ÐÂ4߃ü=õ!Ló=ÈßPÂ4ßÓhù{lzs¯Ùûáª.LãžFËßc-ïl[©UÔŽZ™ïAþžBŸz¯¢VÆ=ÈßSjÛ²¦MýIDATÎÂ+Ló=Èßã,`›¬ÂÐB¡VÆ=^4Zþ÷¶9ßz¬  êÂ4îi´ü=îUyi*@m Õ¸ù{êB˜Æ=ÈßPÂ4îAþ€úP+÷÷@ãÓ¸ù{êC˜æ{ù{êò÷”™Ê¦ùó÷“¶Çz Ä*C˜æ{|ÌßXºæïqIæž¼·qÉîSè¡8æ[ÛB]žôãcº €À„iÜS¹ü=#ÌÜã,Yh—¼uÚŽh«¤èsÞ¬•Œ0]%b©zv?õøŸ9xªÑ9Y?5+È8§·ßÙpæ‚9åÍÎkIDAT-‰DI‡¨•qûŸFI#ÏsËóëýÌq%åï)úÌÐ’”÷ØïÓ?.¡ÂY‰—g’"ð€»µk^:mþœ™3í9kœ¦¿ùÞÚ5/\tÁI%Õ_+㞀ó÷øØù:söøÛ—<=M ÎKà1Š­}æ…R+¯•q—’¾çï©^"Î<= ç=†>à…ªiEËHb9}o­Œ{¼¨\þž¼™{\RïÚ×É\]Í9·."ð’+(o3ÜíWº "ʤ•¢e¤æªÆžPçïÉ»±è–’²þxÿÈö¢Òé‚ I§å¢eš›ãeÔªqò÷(•’‰è Îûů²˜£txIDATnwn)U˜Æ=AæïA|H¦2Ë/YLD^pÞwßoltn)C˜Æ=ÈߤtZýÁí÷}éò‹ˆhù%‹Í×DôƒÛïK§Õ²kÓóÜ HŠ¢(ŠòÝÛVoÍÀóÝÛV*9åÕ¦qò÷Éœ}øÎ­wùªKÌ×#Ÿ•Ù¸çØS¾lûo\•(4”ïÜz·ùçÈ!OùŠ_‡Â5îAþ€ú¦ùäï¨aº¿ù{*¿Çe_€³~Ãæ¶¶&/Åʨ½ví¢óN.©vhmí›6nu)pÓÍwÍ7gá¹—_vc c…îî%#n@)×ÜÜ€G¾­±ð±‚†ØAC쀠!ö@Ð{ hˆ=4Äb ±‚†ØAC쀠!ö@Ð{ hˆ=4Äb ±‚†ØAC쀠!ö@Ð{ hˆ=4ÄZp±gê´ÎÀŽU;‡'ɝЬýûÆ [FRsw/•çÝj?cæDIDAT±'€~߬1 ì|÷8™ƒ[¨pn·m1Þ 0…ê±VRè-TQ ±çéµkçÍKD7lqöõyG*Î×ÎqŒÇðà¬Óel”÷£¼geèî^²iãV…K÷tw/±m1äìÜ Íð—7óï2Z*›ót  +W®*©|É×ܼ‡µB×ò®z9/Ü<y?ðQk¬ý@Øù¶ÎÍ|mN½äÞwn·m1ߺ¬{Ù¶X+)ZÏŸØ“·/4Ûï,\t­—úÉ䊾€ªÀ3u hˆ=4Äb ±‚†ØîAS×IDATA«à³DÀ‹®©SªÝ„\½bÙ•+®a%¡=x(„KÞgnöõ†ãÖÃzÆ—zB{ˆèŸ¯ÿ©ÚMð䆮+ôѾ^dKª«b}ï¶»ªÝh8¥Vn¸á›jIèø{¬ÁŒì>cŒq΃?.4 ¶v¯ÏD.5Ë@}ó3öQÇy¬* ÈÆRßbÏÓk×QÇzùëê˨ÄdvΔ£Pg|¾æf›wùÞmwºš7¢åKLSgü‰=Æ Ç <Œ1"2&]ÚÚ;ûz·tMít}ЦNhXÖÔÌõ×=úÿ\#ðX_xd p+ IDATMÖiüç[ËBËè Í.ÑÖCº¿°•¬…®µšk¬]•Ö8_—1êOÞ½ìîË™|Ùì ½÷¶Ok§kõ?öpέ×Ü\¸ŸvÕÃ2@IŒykÛ–‘Ôf¼0ƒDÑÚŒ’.ñ†j¦kõ'ö«¨¯^±Ì˜ò±F¾Þ-míy&{ŠÂXBÇ~j¡3ÇIæëZhù;ßsà ×ÙVµùò„¢‰Ò^T¥‹·wœCŸ¼qÎ ¹¼öo×ÜæÍÛÖ>…†ÇãŽßò=5õ»€w¾ôZ.} ÷ÒV¬vºV?ç{ŒÓ5µÓ¶%¯¼ß¦u;B4¬B=¤Ç.©Çó–¯@ŒIDATô‘ÿk ðx pW‡yKñ Q€W'9ªO§.b@™§lõ{œk»à’„Ü…>ötw/©vFêÁ‡ž©vú؃euvFª³†úØvW®¸¾ÚMZ®±€‡ØAC쀠!ö@Ð{ hþ¯s{zíZóµ‘SÀÊÏØcD¾þ'ÛvD °ò-ö<½v­uŒ´Ùㆩîî%ïµåÚ+éÓRù[xçó57kà1Þº?iÍš“ÕŒˆ õÍŸØc zlÇÐÖÞÙ×»¥kj§sèS(Æ ðÔ·ª==@`³IDATSÇepc|ThHTê³6ó­¿'¥ªéç¹9¯ÂÙ¶XX¡2y_‚@õÔtì)3¨à"@MñçÞÒysç6kNÞÇ€÷õnikÏ3ÙS!ÆÈÆø/˜#@©ü|®3¨Ë"7ÛŒ4ß®¹Í›;·­} 7míT8½[¡¦¢ë¬58·="T…Ÿó=FŒéšÚiÛâÂol‹ò~ê^Cѽp- êü_k€$Öà®vŸc @½ªÝØõ ±‚†ØAC쀠!ö@Ð{ hˆ=´Òî-]¹rU…Ú£„ØÓ‰˜M@IDATݽ¤rí€ÆQBìÁÃrÀ˜ï€ !ö@Ð{ hˆ=4Äb ±‚†ØAC쀠!ö@Ð{ hˆ=4Äb ±‚†ØAC쀠!ö@Ð{ hˆ=4Äb ±‚†ØAC쀠!ö@Ð{ hˆ=4Äb ±‚†ØAC쀠!ö@Ð{ hˆ=4Äb ±‚†ØACìA¤5IDAT€ !ö@Ð{ hˆ=4Äb ±‚†ØAC쀠!ö@Ð$ë›§×®­V; q ‹=ÝÝKªÕ¨o/½t½ùzXìÙ´qkà€†ƒùb ±‚†ØAC쀠!ö@Ð{ hˆ=4ÄbM*^ Úº¦N©v*ëê˾wÛ]ÕnEe]½bÙ•+®·n™:­³Z ÌÆ [¬oáo²í§\b„C_ï–â…ÂéÁ‡ž1^4Â9ÚpÎnI`®^±ìÖïÿ̹½Êy!AìæIDATö@hìëeÕnBÅ5Â9ÚÔe_ìÞ 7àOÙ ±ª }qÂZb ± H0_7ð£4¼ìó=ÃzŸysçzÜ«kê”ÚIõkœ‚Ùø§×®õx"ÞKÖ,[ð˜7wn¡“*´½¦~”^Xã„mwX ö@#röAÝÝKŒ+W® o_líC½÷§yK†+&™?>ü¹sóžT¡íá2uZgHãb4s|àìƒl½¶ùÛ´u0aÛBµÔGww/qN[›­­5_¯\¹Š>côàÜ^³¬?MãÔœÃYó”m_‹ñ PN¶Pà1GBƧyF…ÊT%’!ö@£°F-·ÊIDATÞUQ¾ÞÇ,itèF·e»/ÝÜX;¿J[cm³qæ‰X?2 ¶³0 äLµÆüñQ®©¶S3£²qF¶eŒz­ÆxmÛb ZÖ·UH!ö@C°vµyㄳ÷±þÖlìh‹1fV;gÞܹ¶ÞÓv›6nµ³å…NÁ(oö×müHØ®¹YY‡³æFçhµŒk•5¥Œ•Õ}¦b4/W¬½õWcëïÔVy¯qÕ‚¼¿Ñ;Ëxìa]®RÖïm ÑxÎ#Û Æã^Õ4ÂkhóæÎíî^òôÚµ×Ô]­{f›T¨ÆÐǺÅ8‹•+WçbüÊ_( Zß•ñ½Õ?ýëˆIDATxà)•1ž£>ÜÓ¸zæoUaÜ Äå ’m¾ÇÙ;[·X÷uYÑ[u¶6[Çsf³Í2ÎE îW)Ã+ïš‘±…Ÿ¶x HÖ2¶]°Ö f2»TÛ̳±Ý¹²ÀºÅ~ª>,p¶ÇùÚvâæë¼1¦NÊ#g1È»Åù¸TU›œÑ¶ÅúÖ|íR&o…Ø ªÐk÷Ö-…^W‹Ç¶åýÈãé׬B?)çÉ:·ç-•†ùb ±‚†ù¨¦’-CÝ@ìph„ªÎÑæê˪݄ 5àO9/ÄFè¡ánýþϪ݄@5æO9¥¢mtŠIDAT/Ä+W\_í&€ÿê @©ð7Ù„µ4Äb ±‚†ØAC쀠!ö@Ð{ hˆ=4ÄÚ°gêÜtó]Õj4Ž¡Ø3wÞœ*¶G6ö,\8·ºí€ÆÁ–/¿®Úm€ÆòÿšbÚ % Š…IEND®B`‚branch-tag-wc-issuetrack-ref.png000066400000000000000000000014121203611042400344340ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images‰PNG  IHDR$mȦ pHYsÄÄ•+tIMEÕ ¯£^|tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÛMNÂ@Æñ§ÆkàÅX4‘;è{ãF7ž#Ð 70î©Á/€‹74ãL-m± ÿ_¡Ã´Åût:|$óùâùåa¹ÌóÕúþîVÀEºŠ=à$@" €! €DC‰$æ:öºXåyì! _i:û(>‡<ã(“ éým{èK–-†?éX“ éñé5öЋï¯íð'eH$0$Z%az3±GOC±#w>~²÷WKòÛñÆ9i‘„b³-ŸOM’$»=«ò°EÒÎu¼89Ý)ÂÝt¯ë•*¥`Zèoþ<?EÞLÜÉÁÛ¬ïv.6[k<]†ÉIDATxœæ¼©À^„-€éþ}B‡0´=EóT¸uoìîÈ}íV¿û. ÎI°µâ.6[o³f—w/ÔyZ/ü@sG}ŠÞä4Ù˛܅xªÊžMÔ\ìIj´˜ÜkvY£îl § Ãr÷úü;+ô2á:¡rå˜Ip+øàlФÅ{«Õ.¡°¸›´†ï˜‰$f¬¿ÊβE”ßîâ\2 i:‹=œ›Q&aàÿõá°N$’’H$0$H`H ‘ÀüsäçB2Bª½IEND®B`‚branch-tag-wc-issuetrack.png000066400000000000000000000436531203611042400336770ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images‰PNG  IHDRAluTà pHYsÄÄ•+tIMEÕ &pS¢tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝ{œu}ÿñÏœËîf“lvCn&Y²›¢(ÖÃ%)V¥^ˆ¸JTøQ•¶Ð6Yúk±U¢?0U´¿_Û H­ÒþX°)P¼Ð–H¸äÖå¢@Èd¯gæ÷ÇìNfçò=3sfΙïÙ×ó‘œóï|¿sæÌû|gæœ1,Ë—O}j“KßøÆõî? 'ÃìôZÞ»löìŽ#Ž˜×€¦b÷îWØ¿}Ç.q%ÙD†}êS›Þrü›ß¹ú7Ž;îH)‹ l(•JEDž|ò¿þuË/þóñÿgǘaY–`kÎ<ñ¨•‹;8T9th¨Ñ8ŠÄIDAT @D¤½}ÆÌÅ––rûÌÏ>÷âÀÿ}ÔŽ±’ˆôövÛö«—^}u÷ðèèèþýÝ`ëè˜ÙÒÒ2£V.9qÿ½"b¬_¿qÍgœzÚñ¯¾zàå—÷|ýàÐÐX£› €×Œ噳f.XÐ5oÞìùÉã) î6vþúßzÇ+[¿äˆÅ"244vðàÄa“¿HIDATˆ«$"-­-ûö s-" Só¿}ë¹ï;éоaùÏ]•‘Ñ(³·¾$"ç¾ï¤|ûÖâ5ÿÝž¸oïXGW›8ã°‘ñ‘BÙȦÍL¨¶F­r[[ù…½cmVky¼ –a”+–çAË¡ÑòþasÜ6ÆGDÄÉ©‘ñW†‹–IsŒòÜJÙ­‘æµÝ£•±ÑJë «c~iá¢í3Ëõê2 IŒŒ˜Öø¸U9T¬T.¼þ‹"ò7×]eñqÓ4 çÁGn¸QDî¼üS•á‘Ñ1Ó¨˜U¥°Å,4[Íí”–ò®_üå‹û_±FG+#££¯î{î¿FæÎÏNØIDAT+ûÆ#-š•eO§»¡¡C3f´7º¦Ê踬±Qclhü¾]/ˆÈÙË–|ç’uã“ÆE.þÖöS¯\û‡bVL˳X[ID CD¤P0D ûlZÛˆ5·µµ<«u¤­mlïXÛÌòÈèØèèèðÈèðÈèÐÐÈsÏì{ýõ¡ÓÏX>gN›bXbÙ³Z""<üàC=øó_<òþ÷xíšsæÍ[ÅŠx饾ûÝÛ®¹¦ÿ¢ß=Û™xÖYïyã±o>ùäÓ³X¢í‡?¼ë—¿ü×\ÓïjhèÐ%ß§Ö_õ[o œ÷ïþö¾è úÚ-_¼â²ßo›9;Y;(`Pi~>.IDAT†3Óže‰a"–e"bÖÄfQ3¥Ed\*ʼnغo× g/[²ùƒ°ÿìûûÿc˜ˆŒŽ+R)ŠŒ™"R(Ä1Ĭ˜vr•D¤`…‚Q, û’®}–iŽ¿òÚðë¥ÊððØÐ¡‘‘ÑÑ‘‘Ñ¡áÑ¡áá¡¡‘CÃ#O>¹oÁÂöw®^!bg˜eˆXbüÕ_ý©ˆñûWþáÜήÿÓ?¼úëŽ\²t¸¡µøîÿºý­ÇŸÐÙÞ6±~ðyêé_n¸æ3‡^ß÷®w¿?õ%ÚîøÎ­"ÒÙÞ¶ÔûEº_z^DÞzÜ›tσѳÏ=Íi›Í?W˜ãÞô–¯úžœIDATßzãµôç#¬½L±ÿŸd`'Ãä(ɹäPÆÇÆ «$%C*…®ºrÉ_'ÆÞaßÝw:öÂUWŠHŰ*#–5>."¥bQ,± K,ËÞÇ–DÄ(H[[«%bL.¦,c¥ö–!1ÄR¹0kvyåÑóÆÆÆFFí£££c#£cÅb±\*Š‹b‰?ûùÃ?ÿÙ#õç7Îí쳬ÓÎ<§­P´Ä*…t×ÍÎÛ~þ³‡?úÁ‹Ýo”!³ÒsÔ*¹mó-œÑpÈØ3-å’·SÏ>ûKY´ð –ÈÐÔ¥;úç óÆ7¾éÛßþúSOþǪ7½¥æÆÖ{/ð9“ûCÄó1ŠIDATrH""•ŠË*ˆTDäù+®XzÓM2cN€=Ňë2M©TDdr¬%åRÑN•’ˆ …R©hÉäHO¬‚¾·[LsØ4MÓ2ÍJ±Ò:£Rn1[+ãã¦iVÄ4KsŸe•J‡O±b=öØOE¤gY¯UKŒ¢ÇDDŒb¡ø/ÿ2ð…Ï_/"×üÁ¦SO]cÏòÞ÷œ&"ç¼û¼ýã=ŸøäåçŸÿAùþ÷ÿþ›·ßüÝ¿ùþœ9]ûöíùèGοèw×}ô£Ÿp¯^|^DŽ˜{„åJ„b©øøã‰È{Î9Ï)–Švý×üÁ¦'žøË.»ZDn¹åK?úÇ{D䟼üHd¿IDATŒ3Κ3§ËnÆ¿wÍO}øÑGrOüñÇþõ_üÑ?ÞsλÏ;ï¼,YÒí,ë®{þþÖoÞ|λÏûÈG>n‘¿þë¯ýÎ9çµ··W R”)ßU(–&þ l€ÝåO<¥§wÅñÇŸpüño‘ù ˆÈ¶Ͻå­oÓí§S؃MwlÓœ=(²&7C¬Éa™Œ™V‹5Vq]±ëŠË–Ýt‹ˆ8¶ëŠËܵÖø˜i‰H©T4&ÎY…BAì +Rœ:8°dì¿zéŸ~5r`xlxdäÐðÈÐÐèÐðð¡¡‘CÃdžF††‡‡†G[Z ®þøá/¤‰aï;çtYÎn/ŒbIDAT>[DD~úÓ‡¾ðùë¿öÕoµ–J}Ÿþèì3ßþŽSœg7|úê³×ž³á÷?½àˆù«O?ëïXýÍÛoÞ¾uëo¼ú¹çž‘“~㤣P)nä“Oþ§ˆ,˜¿Ð*N¬û¨íw~û<)ŠÅ‰òË—,;vå1-R¨ W\ñ.ûìÞ=»/ºøü¡×__÷±õ¦ˆˆÜô?¿ðwsïèèðÅÿ@QŒ÷_ð¡ÿÏ_üñuW]ßÿù —}öÇ?þÁ¾Ý»{º{ÍÉ·æÚÓÏZ½úŒ‹/¹°«£Ó®dÇöçDäÄ·Ÿ$…‚ žoÛ'ÛéoÀ]wÿí7o¿ù;ߺS*æÅŸøàœYrÙ•ÕIDAT¿ñÖß4 cÑ¢%"rë7o¾àý¿[,¤<Í–ÁHlÚc˜Þ Cdò: ±&BÂÙ(Ìq˘º—pÀÎ^¶äÖ÷œë~ÖŸ(\œ8ò'†eóaFÑh)—,1 ûN,†T*Ö¿-zì…æLÓ2M³R1+•JÅ4+ãçOÓ4MÓ,·– ËXq·©Ü2åŠÇºïDdù‘½Å­"ò£ßsò)«âáýò›ßz‚ˆ<øà?¯]ó®å½½ï}ÏûúóGN^}Ú/~þo"²¬»§ØR*¹öãÿøÃï{dŸsúÇûÃ?¹ê™gŸ:êo,&gyïŠâŒVC¤T0xàŸþéá¾ÓIDAT‡ÿEDþ×ß~ûã[ïÔÐ9»£Ô>_Dn½ý«¸ðÃ?ô ˆ¼ãm'[Jïyß…ÖxE Ãis眮R{«»’—^‘¥K–[J¥¢7rZ'—âoÀm·Ý$" æÎ·+´—^.»B°b¶êõ*|‡EˆMo‡Ç6fL ÆÇƤ\.W*b‰iDäÓ?º× 0™<¨øõsÞ+"ËCÆ-‘––¢5vˆMK,îã••cõÞ=¿ØþÚO_Ø{hxthhøÐÐð¡á‘CC#CCÃÃ##Ã#cÃ#£ŸùÔé-¥gÁ–Èyç]pÏ=w‰È”]°ˆ½Ë‘–Ö’ˆ<òèCR©”I<†(IDATÛÃÌ.ÿÈ£‰i–Ë-ï{ÿúú>tî¹Ü{ïÝŸYÿ{ííí--åÀ=£{A3:gžtêj¹ñ«_8÷ü Š®§ìåþÝßýÍÍ7ßxû­ßù³?½áÌsÞ)"æØxëÌÖõM&9:vï½wOÌk·³ìý“Ã…ÇÆ[g¶>ðÀ?‹È’ÅÝå–¢á6Ùí l€½Ò^~å×mí"òá‹Ö™£c­í-þÙuabÓžÁ@lzs½ü†1u&"fÅ7Š""–yÙ}?tlÛúõ+n½U&cì–³ÇKÌŠ}¼LZJegHW(LfX± ÅRɘaÿ÷èÍߔɻiío[–U©L\®ÑÒR´&N´bŽËä8Ì(·¸ð8õIDATw»V˲5Té9¥P(”ŒŸ?ýü¡¡á¡á‘¡áÑá‘Ñ‘‘ñ“O^Þwñ©=Ëæ;Ç;ífŸ~úé«ßyÚ|Ï1o>fNçœï}ï®ööö³Ï>ç ?¸e˃ÛwlkßÓ&"ç¼ë½­3ZZZÞ~æ—"rú©g:ÓÏ9çÝßÿþ"²¼wÅŒ™m¥©;ñO~òÓ·ßþuqWÒÒZ¾ï¾‰ÈUÿíÿS"ò¹Ï}ñÚk?»wßž_í™Xk{÷홿tž§˜í£]·e˃ÿñøcg½û]ßûÞ]óæÍ[½úð)7Oá»¶‹ÈÒÅËfwÍrOÒ€þÉEä;ßüûóŠÈ¬Î™B{¿YIDAT­í­…ɑ܇/ZçYäžázk,7K†XRÜôoN€=uÉ'¿O]òÉc¿u»ˆÜ·ë… î½þgT*gÄZZÊN}c£q¾ÖÚZr]Ço‰­GÏ?ÔuPf”Öv´pÌ¢;îùÙΡárQV½yéêÕ«ÞuÖq‹uMž¶™øž³´¶týÅŸÿå?Ü{ïkN‘Oúò3Ï8»2V9ó̳nø‹ÏæÊ>ùÊ—o9fùq³;g9ã•›¾ö¥øÑ=yÃOxÓoÎì˜iOë[O‘k¯Ù$"3gy®â˜cŽ‘—_ùõÒ‹í)ö5gœ±ö/þüóo?B£˜×IDATþÄ®ùîñýøÜsÏ3+æEŸÿÕ¯~ý/oøâ]÷Ùƒ_/—Jžb¶w¾sõ7¾öÍ{ðƒ?ü“«.ºèCï¼jÕ1/½ô¢ˆ,;²·£kvàØ.¿8†aÓÜÔËé§&šŒ[b™Öõ'NŒ ž¼øÏÜO^|Éqßù–ˆ\âiã¦U™œ·Õ>©d‰FelTì{`þÁ5}öb&¾R=y‘½¯ ®_ãg²»°ˆX•ŠyðÀÐ+/í‘®ysfÏ™Yn)‹Èëûþú…WEä Ý ÚgÍ‘•Gf‚äæIDATõˆÈ}?øIG×ìý{,\2oVÇL»â_|ñÔÓNÞüõï¾í7Op&:vìØqÖ»ÎøÚW6ŸqÖ©¥riÛS»œ§fÎnŸÕÑîÌb?µâØeN»oè^`šæ¯_xõÈ‹Ë-ew1÷㡃ï8´ÏŽ®ÙsçϱÝ?°ð+¿zmÿž½«º SO†UmÀ¬®ÖÁÁºfÍ‘½ûö\tñù«ßyÚ7¾~ÛöÛÞóÞsÂÖ@®±ÿŸcpxGःüßs/\Õ³Ø+ Fѹð.”i‰U7M³P.?½óÅ3ðœTÚ¿wßç¿°yâX¢}ÕÜÄ€jb‰†%2y¡¢Ó Ër¥‹`§ÇIDATš!Wü[†aX–ë+ÆŒmótyZ3w^çÜy ]räÂ%G.tþòÈÃúÇ›z—÷>öï‰H÷’e{_ÝÿèOÿíC¿û‘°5ä6­9#û( ö…G*"…bЇX ¦i™©Èä±D{ètøšŽBQÊ-å©WB:£-û’{€fîö?¿|ÓªåÇ·Ïšñ_»v~æÒËfΜ¶r‹½ŠOsίL¹=Ãþ߯^]´ eL 7£UfØsÉDRL‘ý%܉óaårÑ^â䵉â$™X“W,αEcòšÚ2J›º¨;±×^yõg<)"å)_‰ž˜Þ³bqW×ìR)ø²ò7,ZxËWozað•rH]Ìíê¼ä’‹ßwÞù»wïÛûÚ çÎîhŸ;oÎÿãìÚþÒ’îùak ·,v` Ŧ7çÈœý—ay,9tù5í7áW/{ÒU5^ÙsèòkJå’>EöIDATN–!‡/±£sn©q7q~ÇêãcMw+–ŠË^šv‹ X*Î_4wþ¢¹žéÍÑ;°ÿ®¾/×´ßügŠ1y©¼(‡?‡.¿æüwàŽªŽÎ¹bgXkKù…çŸÏ¬ÍLøíÓÞ(§ýu‚‡GFÜQuļâÜsë3/§Ò8êàw†=÷ì3;v¼ÒÐöIoïüSN~“ØV*—:»æíyì©ë®½´Ñ @å†ÏÝvÂÛŽµ¼I«;zàB†tE†tE†tE†tE†tE†t•0Ãzz»é6È®0õjÍÇ{Ç“èvî´ôôv;k«V2éIDAT—bU€æ–<Ã9ã';ŠÜÃ)wæ)¦8‰hOôÔãüé”t'hºi È9U†Ý?0àŸ¸vÍš°òqâ™â/<ÉäN8u\6 —¾¾u»v†ÞY¥Ê8¬¯ogŠS—8%IÏc%?9ådÔr€^6o¾C] ú±Ä°ô-”Dg³üGS¡Èm@s¨õÚz{äŸw@VKz)HšX ×t8âγ°+8üeI:Ū a†y²Ä}vJ]R1¯¢*õ, Â`zâw:ºÊ6Ãê36˜î"Rüœî9Ð÷àRcWlº «¶iúÀ-«q˜û„³çä³úÒÅ©~q}Î <3VFqX/°Iêyýçһΰ%VXõY§*ÅÉÿªrµbÝñ¯XÏô(ü•ä³þ:Õgà¸|®€åIDAT”N†ùO8‡M” ÷aôSîaSkð/4°m›¤î£g©X´ºBõŸþÝ_ÄŽGéT”–„ÕYËŠ |6â ñ7@|9‘Û>F™]±¥yo˜žô8– ÆC9©ôUï ‹þ5»ýu5gš.QÆ ‰kKQ‚š3jŒv}äÓ L ëïßÈÝ•$ÃúúÖ¥ÞâJ’aÜ!¹ø~ a]‘a]‘a]‘a]‘a]‘a]%ù~˜ç—gÕ?“x—ÛÀŸdåv´€X’d˜ÿމ+©½À´•Ú±Ä,î¿Î- éün}ؽ+ÈNÃî_HšIDATåžXd!@¡a×%îÜ1HDjÑàkë=×(zp>  Î±Dwùo:x%½§€s­cX1<’g˜?«"– ›·j1Üø€®È0€®È0€®È0€®È0€®È0€®ö[S€L-ëYÚè&Äpõ†K¯Ü°)î\I2ìþs²Ó×·n×Îç=÷ïÕã[¶wÞý@²ŽÃžx|K²©ëïßöÔž½F=[RgÉ%~éË·¥Ø€-îà©¿ÿÏ2jIþq> r§£3ê/žoÞ|G¦-É92 òÈr ~é\[oiou×±æªÅÒmaÔØõ‰ö=IDAT£\­ØÚ+ ¬A»>Úe’-®ù¶p ЬÆa†aX–åÜX©´$n×òÓý줾bs(£æ± ¡žÔwÂÒÑô:–˜úŽ J…ÓaïCóV-Ɖ.çÆZKíw:ŒIž)žÇ†‹»¤ûqà(Ç=Wà¼a ðkƒ¿ÁaÇgü-ñÔéÿ¯ºNÿÒ•ÇZ3aÍÏŠõ7&lªäovûX¡ºÁþ5ãy,@ ì‘™3>ëéí¶ÿ¹Ÿ {à)éþ³nR‡ùƒÇý3ð±ùI”’žjÕ³¨ ÕŽz¦xÊΨhOàâüdê°jµa­qöº­ØX RÌ’·>Fåݸ… )Câ6ÏæIDAT!”S›@晩Gižg£Ï˜º\ü^b”w`ÖŸ7=õû?Ǹ3­eö0îjí]ªÄü|½U $^±q÷ËêO ±ªŠ+õpK÷÷;w ÚÿüaÆŽ%O”úÿÔ{–)÷q˜,>rúëÏèÌYê]¨±Ú&X±îe)ÆvÍÑGL[±"§œq›ó¸Q­ÊÅ8,â'Ö¬w õ» ¦»ˆ?§{4Å=¸Ô؛mš>bÚjHTØÙé,Úsœ0°1þ3gŠÇµËjæìM,Ër?×[}ê"ð<ó97ðÌPXÅa½À&©çõt'¬=ê%VXõY§ª°5E®V¬»1þë™fÿIDAT…¿’|öÑ_§ú \vãHh$•SŒç¢ö<Å8LL'Ãü'œÃ&JÐû0ú)÷°)5øضˆMR÷ѳÇT,Z]¡úOÿî/bÇ£t*JKÂê¬eÅ>q…ø ¾œÈm£Ì®ØÒ<ˆ7DQõÔšº€ó8Ê)º°[º!§Çù°üK0ÊIå ¯zgXô¨Ùí¯³¨9Ót‰2nH\[ŠÔœQc´ë#ŸN€d‡@îLó_£Ž €|™Î÷‹+a†õ÷oÔå× ÅM™á‘$ÃúúÖ¥Þ@êî¼ûF7![I2Œ;³@þ]½áÒF7!sœ€ætå†MnBæráBâIDATñ[S$@†tE†tE†tE†tE†tE†tE†tE†tE†%áÜu» ôôv7SwL+™d˜½[L¼slÈ.µêBó³£·[’J{zz»wîL÷ÖàP7éÿ^¢½[L½Ú¬iÔfš ™J9ÃÌžè<å œ’aSÂÊ»kv?ö§{Š{î Fzfñ/.z/¢t?p‰êÊ=U…Uë”TôÚ]IÄv:kIQ'ÔG’ »`À?qíš5ŠYÜ{Fÿ¾/Ê IÀ?Õõ¨)fqÿé)V5'¢wß_&¬ñêµ±ËëPÑΪõn Ö×·.Á½ŽÃ(þGìIDATü·ÁT/Û³£ô<«>µ“≨À¡IZíTw?båqì”ÞëdëÄ3·H׿Íw$›1ù±ÄÄw £HÈþ]—ãTqÇyqköÁË-n‘  nR¾.ÑsJI-îˆ$•YFƒ0·ˆíŒÛZÚœi¯ósÅ&€é&ýëÕWF¸Ÿuβxv‚î«üåê ,©¸$q¿ÂNMEYV”FúËÖq-%“z……ô3L‚ÂFñgÕ)êHˆ[³úúõrÝg˜ÔkldĨh­â€mX±¸ ­ÚqÈ¿ÓÐU3gXÕ‘GÔ§=yë5¤¢™3 ÐÜÈ0€®È0€®È0€GDÚ8IDAT®È0€®2ù~˜ÍýÛ¯ê_ L2ÌN¯'ßâ™N’R”~†Ý?0`§×—¾|›3ñê —JÒŸÖonÜ| ËêX¢;Àì?÷ï ÞSW½¥„ÜS¦þÚlíI ¸gíõÔXgF²» ÔAÊfÂ<fëèìÞ¿wpYOwÄ¡XÜ[™Ô¾#Nëw=4Êš ~:]—h§TØí]üÓí?‰=½Ýö?÷³UK*f÷Lñ×VÀy6°æÀ){¥*Eï+ÊSÞó"Ãë£ ÛËÛj+8ƒ3Ï6uV=¢è<®Z¡¢@àÆûìùgT÷¨jU±š¸,È\²Á^$IDATd˜ç|˜bº5;O…íÖ¾ËV q=Š^yÜÞ¹o³Â)4ù‘r†ÙWÏ_½áRÿ)±ý{;:£ž óóûJ¼#ŽRLq»Ë:ˆ{.0nÍí¤%“óaýý=W!†]”‹}2Ìþç6zª¹‡zQnÙ@GZqdµôŽA€üHÿXâÚ5k::—ÊÔÜêèì‘Xƒ°ˆ×ÍG<öè¾â£ê…ïþbÑg©-,>£,+°˜gŠ¿ŒºwžKf*9—Éù0;«–õt{¦ ¼ØÁ¿÷ŒX¬ê,Š2uºO©gTÔ£èN`±°~UíQÄõ±2^ÓÁOr2¥Ó÷#í¿¸IDATàVŸáƒ0ùA†tE†tE†tE†tE†tE†t•‹ßüòiYÏÒF7!ª«7\zå†MnPod ’ÊO}fíλht€Æ ÃPo÷ 4º ÁúúÖþ¸Ìž½Fý 2 ðÄã[ݯþþn€Ø2Ì0÷Çmû¾b€#'o¬F7@l™d˜^þÏÚ$ EégØývz¹oå|õ†K%ü|CŠšéÅÜåD ÷ ðá h”¬¾æ0ûOÅù†žÞnç_²ÅÙ3Ú;}ÏÍSX[‚ET%Ýf×ÂY¥nHîÜ?0àü³§Ô~ ~n¯sgˆ*ÊIDATr.åq˜=ó˜­£³{ÿÞÁe=Ýž¡X*£(wƒL·þd‹Ðh\¥QSëÉueñ½±e=K¹åW¯Ktöwö¤ÎÄÀ)N:Ç=SdêNÙ~6¬Œ;V%³ûÛï©-¬€L=ªîu`ÍÑ›w•†­(Ï¢%¥Ï%¹å›Í›ï°8q•=Å9ÞèÆSƒp‘¤ñæÞ§;;¾° œâ©Íý§bgêÞGGÜù>8{Õ ÜV]Ñ{Tû* ¬¶¹ãÊoíš5þÄêë[g?ؼù޵kÖ¸Çjöq%ŸÿŸ¿Ïm€­ñ&öø’Á‰ϰÌóTØn½áHì{IDAT»lÅzPô(zåq{çþءΦáÏ'qÅ~Ê1ÎG;‡Üs)øk ·¿”3Ì~s^½áRÿ)±ý{;:½'âËt·±rÿ±µú‹ÕÔ57Ó…ÙñçSDN¥ß&`ZÊäºÄþþž_™KñGç2½R.ð„GNöï×CÜÕUKï¦Ã ,÷ð+úP @UéK\»fMGçR™š[Ýâúôêårÿ9³À³h~QŠE¬Êߪ¸³GáÔŸ‰{]uª{·sÇ`º=ÕT” +Ï™‰ïð â î)™œ›  +2  +2  +2  +2  «*×%ò=0@n©2ŒïòL•a| gœèŠ èŠ èŠ èŠ èŠ èjºgXOow£› ·¦_5v°§·»éWQävf×°Üv¹Yt¥LþIDATJ•až·_ØâkiV”úë)mHE¦iàZªÏ¢kܤ7NOo÷΃;w ¦×´šäsóž>­ªZgZûÒŒQÏ:£›îã0üìnjÔ4ñÈ¿ì濨¿L·Ši»ÉUù½Ä;íÏ’î‰Nê:Óí)öŸÏ†­_§~wO ž§gq |à¯0pvç¿îzZ%¾ÍÅ_àŸŠ6C]³{+ú¨èHÄ^øKJ„W\½;¯TÄ5ã_¥Íˆ¸NÔŒÎó2EljÕ-$ì§’°žÖÞž°7QØÕ]ó·JÑEÍŠ¥G¯ÇÓ€ªÛ@¬ ÃÞ•Zµ©_ͰÜ•(ÞG B¸IDAT"@2S%Ãü×QàûM]qëWKPaØ~Á¶ëß롨J½~ª6XQ•¿LØ"©º–ÍŽ¸ˆª+¶jÕ«HQRQC”ž*:Ö*õ²j×x–±_5¶'ð©ªC`þîÊ«n9U§øß¶ŠOE~wk±¶EÍþU½fO4º©V&Ê^H=%¬Ù¬Eõ S¿Ì~þVªç[¿ºÎªÛ¥öZöɾÃÚ±ÎX%³îo¬-UÑ_õŠŠÒŒètâVžX²Ö¬‰Û“xÝÖØwEÍÉæJý‘Ýæ”¸Ëµì`טzq±–U£Øã°ªêœµKë•…軉ˆŸthËvIDATœÏVÑ+O ö‘DZmˆÒÓ¬?'ÖGn{‘Ñf–¸¿ƒ’tß¹zgÕÞÁ°!š„¬ù:ïK#]Ó¡¨*8³Ôç厢¸±”¬ƒµ¨}t[ãÒS¬M!q³kü„‘Ý´–ÙkéT-Ûyí‰Î½C¨ÿ;NÑÉëv’bÍ©t0îBëóLJ¹7>÷É~à6Åú“‰Ø$õRÏzê\\²u}eF_EaÆzáܯxÜf+žJÖß°$züóª;¨æ?ïRU*Û|”Y"ö+Å÷ ¿*¶ªêÆ«¿êö.%únM±®ÁKüÎò—Q7/âÚŽ²1¨×UÖŸWŒõë7Þ|˦»îÒ3>IDAT¸Ëu×^šÝ’šFÜO¬ås{ô2Syè5mðË[{²Ðô}lúºÝð¹ÛÖ¬]}Ák.¿ìúôχ5«Ç—êoš¼m§U€yaQ¥{Jfznpyè5mðË[{RÔÄ]s›&Ý ÄïttÕ˜ kø%I5jlûs»örÛ0µ6»Q‹ÖÕ`íz‡ZÔ/ÚxÃJ·kÎ…m)Ö™¸iK\>#µ4#캯ú,ºÇõ›ÂêEÔçÂîZ¾u“"M·CÔŽóa¹3mC!úyûznBl®h¬*¦þ.…ÿK‚=S¿ÂíÙ¾ÝßK¨ú%*Å7—ö5KkŽò¥.Åg7u×ü‹±‹2óIDATv¾ãé‚gzXÑ¿­}]Å}½" ›¸¬ªýU÷ËSUôf¤rõZÜ×(úS,±>›ó”í)6*ÿ\×€¿%am‹^gÄíÚQe˜×àßk(ËÏó­:÷Œ5V®ÎNEK–^uŠºÂÀ–ĽþUÑ£(‹[\Xªù Gé”(_Võ”À&…-®–×·j3bU(Ö ÷à”Œ›µimBU_ĸ/YÜ÷Kï›ãYl‡ÐQÊÇ7a‚}b”“âR¢/=z{b-%ðÍŸbG<ו"ƒS—Åj”øÛ@FÍð,³ N\OØSŠ]v›Ps¨Ã€†ÈÑù°Æ¾£t‘‡#uß±PIDAT[º:8ë¦Í𿸉W2Q”ºœl‡ÈBú×%Öþ‘0ÊF–ÝϬdN›Ý]¨ÏPÌÿ”ÖïçLWZ²5“îJ®:cÝ6¡¦§õašSÃ<ÇßÇG?@ïÌX2Á±~õìî)5Î^µBw׉ÕÁˆuVíH²2ÑýeU”OwKóŽØŒˆ<µ¹G`KL¼ÆÂ¶ŸˆÍNq ëçYĶÅÝ´ÔmóשîT”òÐHM¿ùø¹¯>ùÈ9­ÄÚÒØ6ÒÅúDÞ¸ó—ßš誦 ¶×Rg-‹F³Šµ¥±m¤‹õ‰báx×%>ñø–øí ’þþ±ÊǾ¶þK_¾-î,€ihÏk/vÌ™_,–#–ß½ûE‘J¬Eðý0@VŠÅòððÁÑÑ¡JeÜ4MË2-Ë2ÍŠˆX–eÿ×4ÇçÌ™?kV×ÈÈ¡r{k¬úÉ0@†FG‡ZZÚLÓ4ÍŠeYvt‰X“LÓ¬8°gÖ¬®ÑÑ!‰™a\—ÈÐäÌš 0;ôuôEIDAT·ì)æd¤‰ˆŒŒ Å­œq C®ØáIJ§8e ѱ±‘¸•'‡.‰+Éww<]3¦RLTWžiûS_t¯oØ:ô”‰[[”YÂ^_#H”ò1º=µ fÔ‘Ö= {¥êð fñ¾k,Ӭأ.gÊÓOoµd“ÿ&ŒÇ­ Ä]bàëå}¶“u»W¾Ý/g®¸ÛOà‹^µžÀ=p3ˆÛž0qÛ&ñþ!V¿üÿUô+°ki½ïÈé—`+W®´lß¾CB6˜ˆÒ¿.1°)†‹ÊT]IDAT»dàt…XåÔŸ€S”×@QÆÿ”ºýßË×.Ïo!·Æ¾áã.7bS2žÂ‰·OÉ:¼êÿŠÔ§_’ñq-ÞwöflB‘£^eÆŠ+ì?퓉³b±»S§k뭩쉞Ï‰ë “ þ²«¿>íGUꕟéªF±Þ/ašu;lÖ~å’eYæÑG¯‘£^5yÀÐêíí‘ÞÞž‡I2ÌòI¼ø(•d]=Õr¼¢n˪Ëuà+â,YX®´^Ç:¬Š¸ËmÔ«ÓLû‡f5ù9Á<ꨣ츲&„öööØÜ'þ‘ðûa–ï°¬„Ÿkµ|Çš­ÉãîÍ4½ÃIDATÂîZ`ýaõDld”¦5yòÃSÒ©ÇðW¸#vfL¶Þ¬³îÇžõã¯ßS^ÝT“ªÖ@àzÖuåaëA=%ðqÄN…½ŽaíWôËyÊ©Çiª³MV}¿(ÖCÕ÷]”÷©„¼ŽimŸQÚ)¶E¿Â¶ÃXýržòïO5ð}W–eº‡LžÐ².YÍÉ¿ãì_eŠ•ö”§Ug‰û:)êWÏ’zcÜï´èõ¶¿–•¥Íq_Çdož¸U¥øΨž’`Cª¥ª(ëAÑ`E™ª ˆ;K¬×%•í3Ár£TRËëRõõÊÏû®!ìßé0 Ë“ýÎÌi±ÄüN M4+IDATC xÍ5š4D¦|Ì2ÍJGÇ"ÒÒïÇ… dgppkw÷1³gÏ­ZòÙg[¼x%÷^äEW×­[=xp¥2>>>tÞË(Šíí³Ž:êmCC¯Ç­Ÿ dbhd†i”ç/zÓÂÉK‹‹Ã(Š1Œ‚}pÑ0 Îaƽû*åñbŒ{¯tE†tE†tE†tÕ<æþÙ‚üÈg«2’ÞN«õLCÍ“aùüÖz>[刻W—Ïag#6‰œ4•ð˜2õ§Û§ûŸòLŒXâzå£LOe¹žÂU—ëþi5÷êõ¯óÀŸÈSü®ZØë¥þ½»¸‡¿çIDATå£ô7¬=a׃ºž퉾$|;PgI2Ìòý>¦óûWîéÃ÷û¹ê÷|Zõ„•>½öåºwvQ–ëÙiz²M¦®Ož…Õ¯~½ü}Q×£øé6Ïž=n{®E=q×Üõ¶¨¿4óW1=ð}îŸXõg7S9öeMýè°é©ì§Â–¥(«˜bœ‘¬f‰ßædÒ»$Ë¿ˆân'ê¬N¿Ó¡øð^{=qË+>G‡·tÙO¥ÒÎfg$èW”jUÇ‘²Ó<×t$ã9Ö”iýµÌR‡ ‰»Ü†d[*)u=UÑ4¡4äã0ÿ9ð°sãþc8UÏ'Å­Ç}îÊ™V^nÇz IDAT}NÅ_yÜö‡Õv JqlÊÌé¦ÿÜLX;õéðœ R´Ç³~ËK´õïßNüí©ºJ=í‘jÛIØúÒ¯(Û›TÛdªÁ÷ÀŒ[8ÖI¸ˆÓ£0¬åfÕ“|­Xáê.¨w–X‡…´'LXc-"•~Z@~$9–è' Áv áµõ©·ˆ‹íÀt¿¦ /2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  VY«ÒIDAT+2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +mŒ™<IDAT2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  +2  «R£hN3Z‡::f‹åˆå[[†â.‚ d¥X,ªTÆMÓ´,Ó²,Ó¬ˆˆeYöMs|Μù³fuŒ*··ÆªŸ dhtt¨¥¥Í4MHE"IDATÓ¬X–eG—ˆ5É4ÍÊ{fÍê’˜Æù0@†&G`Öd€Ù¹eO1'#MDdd„c‰€>>tÞË(Šíí³Ž:êmCC¯Ç­?v†íyퟳ ̈; Wf´ÆþQùýûM‘ƒ3Ú–Ìh[Rµð+/ï‘®Îx‹ˆasæG¿)§ˆìÞýbk[Œò€ŠuGfÙ½;ö€'ئ¸)§„Ü—³µ}NÊ­ÔW‚¿H[)0TIDATÖ­Jr>,즜âú.›û¾œ3ÚSm2 âîü|fXÐM9­§ŸÞjÿˆˆÿ¾œ®K*ºòïü·n}jÕªc&aÞ[kWÖMJ’aþ›r>ýôVyæ™§W¬XásîËI†@ðìüí=ÿÓOo]¹reàM™ÛbÝ+¶d6妜v7DdÅŠ÷å,È0Оgç¿jÕ1öþÿ¹çž[±b¹§p‚›2'øûa@]¶Ü™hßßÌžnš¦Qà—… 9Lìçí?V¬X±mÛ6Ù¶mûò彞Z“pf•`+W®´§Ûº•–e‰0П³ó·Ž†±N( ÖIDATråJç¶–®û%¹)s χ974{æ™§eb ¹Â0 2Ùn×ï[öt€Öœ¿ýg¡P´,óÙgŸµÿ´̽ó¯C“’K´,Ë´“ɉ±mÛ¶­X±Ü<º˜K: )Þù‹ˆ;Àz{{œ«ëÙ $#¤Àš‰È¶mÛS¹§ ‡<;'ÀÒº¡e ¯éðßÐlÛ¶mS„¾§Ç 9¸wþö™°oh™@òï8{nh¶|yoØ=Íø~4ÿÎùòÞÉÝ~ 7´L I†)nh&iÜÓ C9ÜùÇΰè74“Ã÷4è-ÁÎÿõ™TŒanh&ž{š½üÊÞ-‹ËSIDATÚ h ;ÿ:´*^†õ÷o4Ç__¼h±Èâ(åÇG÷•‹RžQž²cŽKÜÜZ&#ÃúúÖe×⊑a»v>Ÿ];ˆ‹ontE†tE†tE†tE†tE†tUk†õôv§Ò½äª×¹j ÔSì ëéívþeÑ zjlš`:š©/4ï·¦zz»wį̂)õ×L}€i(F†…˜óÜy6ÁEýžéîJvîtÚé_„{é±J†u!𱺃þ• hƒzéB½n݆5À==Y_ø| ÞÇÙ-,"N‘jaë)ÿƒÀÝ¢”ŒƒF -IDAT»S¬3Ê”ˆ}ñLQ4UÑýÓãöê&… KÆ¿«U”Œ^­¢Ngwœl”˜ Š ãž"ò—¸~ê îÒÉ3õј s’RŠW 8".%þ§¾tuùƦ™ Ÿb\—èœ&I‹úìZŠ:2 ‰÷‹+^†õ÷oŒ{O3Àô÷¦Ì ÄȰ¾¾uÙµ3C€IDAT€¸bdX¦÷1 .®KèŠ èŠ èŠ èŠ èŠ èŠ èŠ èŠ èŠ èŠ èŠ èŠ èŠ èŠ èŠ èŠ èŠ èŠ èŠ èªÔè@Mzz»Ý„ÌíÜ1èþsYÏÒFµ¤>®Þpé•6E)I†ОeYnBV®Þpé_¹Ý?}ÿÞAÿÄæpçÝD/L†hM¹OWïÍ÷ì5êÖ’Ü"Ã4 öéÓ×ttE†tE†RSçËD9U8ûeç÷žÞîÀÇzqç¦] Ã@Eç4ˆIDATWZ˜¦-w#à ”gG¿sÇ`ÓŒÀ[îqÔÂÊ4dUa„¾¦àgÏO¯žèd`B‚+2û[_d$á”èÎ3¨Š8Wc××Ö@(;¨œ?O5¢]µÊ¢å YŒÃ@Ž»÷9ôyblçŽÁ(ÁæYê•SdT]Šgu¡î—„tSQ&°ÎLq, +2  +2  +2  +®éÐ bÝÀMƒ  ½«7\Úè&Ô™m#ÃhïÆ¯ÜÞè&ÔÕ4Ìì0d½éûõ¬Ä®Ü°©ÑMÈ ®éèŠ èŠ èŠ èŠ 6XRIDATèŠ èŠ èŠ èŠ èŠ èjÊoMÝð¹ÛÕâ:œakÖ®n`;ˆk"Ã.¸`McÛ@\ÆúõÝ’øÿ)rÚÜ;×>‡IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/branch-tag-wc-ref.png000066400000000000000000000201631203611042400323440ustar00rootroot00000000000000‰PNG  IHDR^ ¤áf pHYsÄÄ•+tIMEÕ  ³†tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíYŒ$Gzß¿¸ò¨¬®®>fzz¦›sð\.¯5É%Ö€d`¸+ÀÖƒdð| y ú jØ„…`Àa ïöÁýàY6ÇHŠ´$RZ’»$Å!‡ä 93}T×™g~ˆªììªêêꙚ>¿zº£"###²{¾~‘ñ‘ϯ]A™(t¿€ ‚AP]àÜùåýnÂÄ8w~ù(uAÃËÎêb Ö›­}1v;^ôà˜`Û’‰´çÜùåϯ]Ç¡NA|ôak°ö¦)äµù5Ad|F©ËPi±™ù¡ü¡;/¹]Îvå‹5m÷±˜Î1_ IDATS¼D±Â¼‘}§ ^nü^ŒÓý¡W]y_UÛU›—Ñëb%c¶3¿K#êD¹økW® æ>ñâˆsŠ6kÐ*“ÛèÁУë͈SŠûŠíhÁÇïþ`™í?ú.Ùå¡÷pD;w¬èŸ‚ Èh.]zÛ}¾øüƈÓúLXßÑÑSœðú8?)F´st÷Ǭ|· ÎËßë;»'}g þm ‚ŒæÕW ùÈØh9ÁvÏõ°å=,£.»õv[sßxÔåŽÿ09æŒZ3Ö7u1šÝ>ÅOĉ¹GŽK‘1Û¹ÛîÜM›ïi¯Îj:A5;¬=7^<š\yÛÝIDATæ÷™§â¼ñ`ùíªZrÄŠ€Ý28›=º_£+ÑÈÁ2Ckó.ݯAdGÈø£K—^8ø #°íK{†²7í9h½F)òÚ•+—.½€ïê#‚ “çШËèU¼„½iÏAë5‚ È ‡F]ACª ‚ 2yP]AÉƒê‚ ‚LTAdòìð6eNq7ÃÑ{\"‚ ÈÎêbuåƒ÷^ïËGAA¶cuyíÊ«+?øý?Ì3_~éE8oøï1ø=‚ ˆe¬‘±¢´ØÍúpºc/Ø&ªlÝ?ñîmô¤vŽÙñ”ƒ£(÷.‚ Èn´}MIDAT¥.Öqé“K¥ºÜ¬_?{nyL÷åîƒ}í–I½Ûˆ,õ!j*‚ Gž}[3fõc»MþóíÇ<óÜùeûU<ºcɧ÷å Ö¶]üèК‡æŒÙ£qªÑ»7ª¯|_AäîwÍØølgmânž¯G‡ò}Êv™}‘€GTxÜ‚(#‚Ü “W—¡'§d°æüÐvwßé·à°QFÙ-£ÔÅ®9~ù¥§^šõë•긓.ƒ Žäܱ‰§Øˆ@a{QFä²ó¼Ëå˯ô­ÛnÁØ®°“.ökðèøzStv)Ú_ÆôNvëÄØ Ê‚gv{þâI¿ólIDATÅJu ¶*J¥º »r\Æ\m<æHÚø¡|G‡Þñôq8VA”AÆdÜÈÇgÏ-åi|‰rØ—A&Ž|<î¬>* ‚ 2>¸Gòƒ(#r¨AuAA&ª ‚ 2yP]AÉƒê‚ ‚LTAdò º ‚ “gò»X"ÈÁ¤øFðçå—^üþK¿³ß­@»Õ9FLd‹¼{Íû£ÿ»ßM@ €ê‚ܯ]¹²ßMÎvûmÔÉÞ7AŽ!¨.ÈÝòÁ{¯ïwú¹|ù•ýn‚wÆU—â#ªû‚ 9o’Àìw丳³ºX]|>EAaAï¾IDATA¶cuyíÊ«+Åð”/¿ô"l?®=AŽRÔEÜëþPðÚ•+øØ„ a¬÷]ú"ÿà÷ÿpĸö¹óËù×µ)‹œG®¼ãªFÔ?NæÔs—uÞ#úBM#9¯]¹’Ùœ»_¸|`W: È^2Êw±ŽKŸ´X*ÕåfýúÙsË}îËDžÐk˜ìSÿ¤¢#"_ä5u/±žÊ½xæì¹% ‰„sîùš±¡1GGùÍ%*ëË­æÒÝ®LQðF”qú`ûûjÛ®lÜÛ1¶ñø=ºû[ºÝê»4Lè‰áÀ2(¯¾úc›È‡Èr_Äæä£gƒ‰íè«p™ r ˜°]<IDATº ä¾qšÓW[ñã3W´žcšÅ¡G‡ž¾c…# ôE¼/ÝÔÑ=ºû[:´Ú£-$ƒ<ñâ –\ºô‚M¼úꟿx±èߨ(hÒ`bÁúrÐÑAŽ$“÷]Æ1îŸèseúmgp÷Ý˜Ž¸#z4~å»í]ñ`´J• q¾í¡¢õχѬBÏÁ` ¨(È‘g”ºØÿ6/¿ôâàÔK³~½RíŸtŸ{j°Æ¬|p¤hïÙUSï æ£´èîÞ1¨c’ëÄäÛ„ ‡Ÿ×Œ]¾üJßîLܬ鞮b:ñÐDZ¼cÞ‡ÝÞ®»éÝqp\Ë2¾û‚ Ç$yIDATFÆž¿x±R]‚­ŠR©.CቯÈ8΃s3Cgk§Ø˜U ¶j·§C^ÛvÂvǽÞñŽîÝç×®O¶§‡”q¦Ö‡ÎÍÀÀ`׈¥ƒ5sä¨B~øÃó^dÑýßÕ€>ÿNœ½¹¥c^Å.[?h;ÁÌTÍàÈíÙsKÍúõ¾],ÿ°‡ÊF^l¨¢ ªËÐjk€W_ýqßÀƒyKd|^»råÒ¥ÆÕÇHäH2ø‡]ÌÉÓc?gp2‚1îùû.è¸Lœ½¹¥ø‹»§ßâÄG7äH‚;ð#Èþ€¢‚mŽ”ºd™ÒZéL)©´RZ)£µRJJ­•ÒÚ(¥ŒÄ6¯KIDATm´6FfF)­Œ1Z„2B€­4ÌTÎ_X t¬­ØŽ3—/¿‚;Þ#ÒÇU—,3I’˜,Qa¬¢PÇ‘Œ"E:MT«4ƒ,52“R1†€&\" #”Áaš2&p\Æ£”sCseŒ2J£Œ»6A eŒs@Àh·ä€1]»IÆ4Bþf;‚ H‘½V—(Vi’ê8ÒQ¨:-è´²VS6Ðng­†ŠÂ,ŒT’h™)i€M(ãœ8‚¸%êy¼ÐRÀJe13K}/(•¿D=8s]êÊ9ã\¶yÉAQØúœ­µÞâ bAcŒ±åIÉÞÃÎ´Š·ÙIDATáÞÁõ²gLX]´†V'M¢â¢¶i7i«žÕÖY§aš5Ójd­&‘’¢´N2LJR™”Êljšž\ò«U65ͧ¦X0%¦Ê¬äy¾ï8ÌšøÜ“LQJíØTc !äË/Vöî§>Í*ö¦*¾ð}à"®€!¸ã/%tb;6.‚ {êK’Èf'ÍÂŽ CÝnð°!Â:o®Óf7kU¾1Fé$ÉšqÖéÄ™W΂*©ž¢÷=Ó³¢:Ëgf+•)7¦¦|°.‚ýÑK®¦Ó¤§¹a&*½2c[g–gÏ,Ï6a«ÖH­ÚFÇ_¯ßw¢|þÌ“}éXIDATõ©Œ[+­všÉ M ÕÔ1ŽãwÝ'*»¼mÈ~‚o È^²³ºH%W×Â, MÔÖ–›¶½¨á†'âú,È)"Af&­èëzg-¥ª2—O’¹S¦:çž\p¦«åêT¥RêiGO<¬“e‰)ø%ÃÔe Ûy-¹Ka»ò0Ê[N𥯭õG7Ö?ø¤åÉp†eó>µü‹÷ss¸ê AãÿÕg«°±ë«puÍÛ+áGëÙJ°Hïÿ¶ÿÝ ó÷AŽ.IDAT:8ÝymÂN¨µ°öPÓû ÿÜdS-Ó„Ê(!@)…^ÎV€ülU( …u¯±U¨'`Ü—îGÓõ]4€²™2ÎAJP&áÒX]5ÆLO»•Ê)€S}µñÎ;«‹ªñ÷.ó³Lé,ÕFijR€,[²‹ææíO®¿ñæðÔóÏýê÷¦{ rôàòí×Y³¾¶¿{3©|P?ð 'þþßš²r¢” ÃŽRú7ßc´1æ¹o?WTèYç¢K±)´ëw ´ûa‹–ä™Ýá/³E‘>Í’^3z]ÜÆw)B1Æ0Î(¥J)JO—[>IDAT %TkŘVZ)©”VJJ@ŒQJ£•RZëù¥ùùû:ðÞÿúlçæ¯=YòH% Hi´SSd’vžv¢Õ¿øÉëío¾ø¿óÜýœsÊ(1¨1‚Yø'}íx¦uÿwã[߸oFJ©µj·ÛÆØÍSôÛo¿­µ¹ú·ï˜žÅNÓ€<ûì3= 銄ÕJ)¥›rRT—ž–ô I.0ƒ2˜”>¥íUd4ÆM4ç\)@Œa”*f˜fZ)¥9—R)%)SJJ ¤TZ+¥W<ü­å/¯—ÿÍŸ|üý'ô)?‰ãX'i’e™TI¦Û±´u1ùàüÞ2ÿâŸTò-IDAT|ûés\pFã 5A# ÿÏê‘ß¼ü›ÍÆšTªÙlvҵݘKÿÕ;ï|öéOÁÀo}ÿ·í „ÿøþ=ò+¿òË·o­2Ρ”RÆ(¡4ÿ=O…ÒžnlªHOHLÑ;!=|ÿÕO®ÍÙ¸kÍØ”R­µubì;üŒVZ)eŒæ¼ëÊH%e&—R)I©”R‚\^ª:Î7þÝÿõ¿}& LÒN³Lv7<ÓZ'š˜,ù޼qå'rþì¯W§KB®¸"¿3÷ºw‚ {_zb¤^oH™)­•”Úè|ÖDJ©•þ§¿õ/1”RÆcì_ýöå(\õ}ß÷}B(cÐ,ñ!IDAT¬«#”~û¹§ß}ço¬´<ùÔc¼ÿ¡ˆG¿ùðG~²ÅŒ’þa.c c›;¸ì}Ø1Û Æ˜1PJ»ó1LëÞŒ‹RJ;ZI¥\%3©”Ì2)e–e™”rq‘½sráÿ|öÅ?¼ÝÙm´mÀ# 8:â7¯xõëÇZð<×ó<ùA޼Ó鬭­5u¥•V€;ñðÞûïqíƒöÒ¿fŒ !žyæcÌG}Ä«T*Qçö^¸ùõJ.-Ö;Ž›§]×µ*bŒ±é0¶ ²ñEúÚiû’Ïük­µ£µÒRH­µõc¬À¤i:UöÃÎíM„Âfe´,"ÑIDATÀnZÖnµM/Ë|)U©d<„pìÎ4ûÕeAÉÂð³±±ÑjµÀªçœÆ{”J%!Äc=fÍëC=tëÖ-Æh?Ï÷zó+ÔÎ;ŽcGºú|»žx0ü» ð^Ô’bf^†E•‡^~ðÄ⥷ó–Šó"›J#ÀNìk­ídU&e»Õi]_}þ™²¢-ÊÒ]°­AkCµŽÀkVç˾l62Ë”Ò@) Žƒƒ ÈÑÇqÜétÒ4eœQF¹®ë:Žã8ŽçùBðJ¥"„°ãBöœ (¥Zú¾ï;Â)N¹_ûìË>m(ŠÇPS>TZŠMì;¥¯’bÉUåÝ>nýIDATéµd4ygíP¡Ö„J).åOþËŸ]zœ/Í›¨F4©´”ZI¥¤2RMþÊÌÏ=º˜Æ(»Õ&çLÎ×Zãô>‚ GnÇtŒ1œq×u}Ï÷K%×uáø¾'Ÿššâœ7›Ír¹ Y–¥”s; ÃvºÄŒ––{Í ŽI>I”Ò[·joüÏ·^x }bÁ‹WB“¤QGQGiK™J!³¿Ô§7žxâÉ3"I @)áB8Žãzž«¤R#•!rdàJ)BˆÂ/ùAPJ%Ïó]×BüÒ÷~Éóü˯üóßûÁB¤”ùÃu³~}z澉Çö¸+¿ïDQ*2ÈIDATôæŸþ¼¼öÅ÷Ÿó|Æ·ëªQ¯×êµõfs£ÓiE²³ØüyzæÚ“Ï|ó‰¥5dÂ9ϲTJ)3©Ô¦kˆ rà„ι瑒_*Ažï;B0ÖõM~÷w'l߬T7Ç šõQÖ¿¨w {/0w|ÅÚFóã÷>ë7~yÙ9uÞÕ·nF«kÑzmc½^[o¶aÔŽi”6ÿ­Ò…ôôŒÛÛËò-sîA‡AöÞü*Óš A]Ïs]Ïó}×qíú.BÈ÷¾ûÝé™%ت(ViîÀq)ÎÒ°æ}“ùãí«èåÆiÀhŒ1?ÿùWÍ×çUý,y•E·¿ «9þ›IDAT?_jµÆz½Vk5aÜŠHœF©ó>œ^yâéÓ/Q«ÞÌJ/ò2\0Æ8g½·‚AŽäýí/£Êí“÷/=õèC.•Ïóc}sgÏ-åéƒìv·>ÇÐòcV¢µ¾úéípeÅk¯õâGN¹ÖÔÍ›­•õv­Þ¨5ëõN»©N ‰jdîU>>õí©'îœ,I“,Mµ1„F)çÂ÷½ (WºLAàº.ç8õ‚ È¡çµ+W.]zŸžÖÿèD§)?zÿõ¿øÙuþ¡Ó<´´4Û·„éà( LÂÿŸpåæZçë›ó¤yŽ…Î9à5`åVýÏ×Zëõ朄¼NIDATF«Ñè´[q&ËL²¯2gmá~þô³ó÷xÚ ;IœÙåa”ƹàÜu]ß/•J%ûFªã8\pƺ/‚øz=l»NàË_\t¨ûEóæWŸ^ý³OJ Ù%÷ô}ÕÅ…3gªÍêݱ¨ =q0óöíVmm#«×‚¤>oZÏxjvVC»–­¬¬ül½Qk¶íV3 Û‰ŠRHu&éªäµ™sô™¿S~êñÇ—f’´…QEišÚ1Æ9£L8ÂŽïû¥R©\.AÙó|ÇqlP˃vŸAîÞ¾¹:¬á8+žëûn¹ä>VöDA¶¶úñ{×ÿ†\óf“édp*¨Î6Ç IDATÌÎúGoô&I²[+ÍhcC7j~XŸV­gJzÞÓ@›z}mceýêz£Õè´[QØŽe”™Té BÅoI¡–0~cúÉG9{ŠBÇq»³Çqš¦Y–i¥Á9ã\á8Žçz¥ J¥R)(%Ïõ„”QJŽÚ]Eä8ÃÿhczÙ„sº5ïµK©¹”¹Bx®WòÊ÷è”ï9!è5½ruõKU¯ÆJY09e:3/¦gx¹ìú~µêïwGv1f½ÅQÕêÐiNCÇ ëKis) $ êñzmããkÍV3 Ûq&*‘:ÕJ’PÒ5IÓ¹3ä‘>ñÈ……Å©4M“$3õ¦HIDAT‰Ã4M­¨ØMÛÀº,\p!„뺮ãvÄJ%Ïõ<ÏBpÁ)ÁMÆ9RðÕÇ<ùØ·Þûì«Õ¼µý¶ßÙ˜w;Ó.ñ"Ê]Á=Ç+¹¥À?ø¥ÀcäkH]Ýf­kPÏLH܆;•8%åPªh?0^‰úó|æ8¾'|ß¡tL§ÖºÑL“4IZ&c›N’v-È:gX:ïW1tšÑF½Qk|¶Ñl5¨¥Q&ãL§FJˆ%ijÖ`e8}Ö=¡tÿ…“ç—ªóUFe–eY–Õëõ4˲,ÍÒL)¥´ÒJ³»~R&„BxžçÙ}+]Ï÷=×uÇåœ3ÎPZÔ¢uIDAT9zpÇ'æËÄœ€ ')yÔ€ØhE«k §±ÁÖo“•÷ÖF ZÓ‚”„ÕÆÆîxÂñßwJ®ç{®ë2á@ƒÂbMB e2*w;ÌWŽ—q„«„G××0Ü!BÀeœpÆÂ¥ŒPFRB)aŒõÉ#VJKe2­´ÌŒÔ*KM–é4fY IIGd±#£@†s2®:¤L$‘ „í¸ÙlÕ›Ízëv³µã4L³DÊTg™‰% %´4˦æÉÂiÿìYïüÙÒÉ…ùųG)™I™¥i5²,Ëd&3©”’Jj¥”Ò ôö’f\pG8®ë:®ëö~Ø]vK‚aIDAT8ïí½Ò‚ ÈQ„û¾?55Õn…Úh0ˆ©Îùt>`|™3N("Ùi¶›µ†©×ôêmÖicƒ´"mV8ø‚x „ œSÆ)” Æw\Qr„ãá.ãœr”¥†2iˆ¢€¤R Ê€¦ÌP*e†0C !L¢()›´&ZS£=• £¨–#%Fjh¢¤ÉR™ÄIÆ(êD×;I&iœ¥‰JSd&’&Ì %A—¦teÖ»pšœ8,ŸqgæfOÍ{•)ß.L*%³¤Ñ³,SÝð.6Z¥ÒFk­m€NáÆÆÜz,››¶9ŽÛÍrD7n£7q¶8ÁIDATƒ… bá¥R0;;vâLÊnpÝÝ1^*IvRZ¨ÐÓUJÎÛ÷`íN¢Â¨ÓhµZMYoèFZMÝjV Â6MÛL¦#‡‚ „1`%”F é%(£”Ê¥”1B(-!Ç2_Je_oŒQÚc”–RGR)¥¥ÒY¦¥Ô™Ô™„T™D™XB¨Œ®v|Ì`Š˜á³s|vÎ;1W™­”½é©²ÏÑZ÷¶¤TªS¯gZë,˺» £¤´ÁÄìžžöM{ÖíéίôtÅ*‰ã:Žœ Îy7%cyÀ´ýýÝ#‚Ü;x”çææÚ­PJ»åUfÌsoÞ®oIDAT ÐÝj¾»Õ%×aÔóÉ\‰±Óvï}+<ư$•2ÍT«0ÎÂ0 #E:ŒL›$î&âØ¤)d©‰3P)QÊ(e”"F% #eŸé5”B ¡”3C„áPáîÏ×å~@}Ÿú>/O± `A0]š+—yPr<×s¥Æ†ÓZ£mNc’v;T]qÑZ))e7P˜ÑZõB‡Aoã”Ùwë cŒqf5C8Žà\Á¹ްzÂã½ý>)ë†F]AäÈÃ}ß«V«j+ˤRRJÙM¨-!sÛj 1RI¢·„.¦”Z'ƒR*êx>™ñ)ëÆ£¤”ôÂ/Ú`üûYIDATÈ`ìÇÞžöyÀ®BÀÊ^¢?œ µÎÝæuŠ-?µ6&‰"cÀtc¬š˜¼—Ôån–MPJ¡àz!¢6²íÚ‰ r ‚ Èpþ?õýð¨óÔIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/branch_tag_property.png000066400000000000000000000453311203611042400332150ustar00rootroot00000000000000‰PNG  IHDR¹Šب| pHYsÄÄ•+tIMEÕ  ŽtltEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝ{xå7üßè`ÇIp@'>dDcyéÛ–.åĵ)’¶W ‘S –@¢ÒÈ~¶íÒ.XjߥK·µM»J ´IC +í³ÏVòÓÚksl—wiû.k¹ !±…@¡$!'ÙÖaž?f4I#eíïçòåK‡™û¾ç–æ§{N¿axž'™ûîë&€yïñÇò§Œ+…(ÙØ°ú‚ j/¼ð¢4   |ðÁ_Μ9}xüÉ"¦+ﻯûcWþÕu×Òh\EDZ­¶„ (¡H$BD>ßÑ—þþ¿^ÿo!\2<Ï rýg®f׬8.8=:Œœ?,uƒbãýIDATŠmášE5Úª*ýÂE5Ü[ÇGþíU!\ꈨ¡¡N”ï¾ó—¿|09==}úô¹R7 4jkUUU]távÍ ¢«OŸ9ED̶m¯¿é¦u7\ù—¿œysçΞ C¥n*@)ÕÔè-^ô‘,»è¢ ^zñõ‘çŸ×Ñ¥+–ÿå/§Gß;yÃI˜#&þ|¬ñ—Oe;×áÛ¶Ô_²òÌ™é3g¦§&§‰øKW,'"ðö¹sç‚ÁЂUyn,@)¼ýÁñÆ_>uû¶[øúKÂuÒ¢¨xÒC”ü@ÃЇ¤ |ÀLüùÙ'žzÿ®m—_¸‚ˆ‚ÁйsâRG’¬k¤IDATDUÕUžœ”Ž}ÿä¯fÕ¦/ÿÏ«ó±hysñ¾'>÷…kÎ8Iÿu$25=“Y´o¼CDŸûÂ5ÿºï í×¾#¼øá©Pí²$+§ÂS=#ÍóÖ‰7¦Îi˜pM•nN§çχêµÕÚÈÔt0L“áèT(ŒÐÔâZýå—^-Ÿ LDÎOòÓ¼~ÁýÛ§Bµ øj}XC<Ãè#|ÒƒªóÓúÓ“Ñ0šœdÂSD$…µ©ð‘,Vjµ Wïœ;ËëøêàûÕÁþ¯>R{I]­†&ß?}æìT8LÑóSÁééP”‰Ni©ó”ƒ©©(ó‘óÚHdƒóûDôô7;y-B(IDATG£ #=¸ã‘^":`»/295Š2‘()…5bÓšêé€þ–Ï6Þñ…óïÖF.\üÿqÿqæõ#|Lž×Ÿ WŽžŸ>§Ñh ¼°³™“†M3¡`ø·GÞ&¢›W_¾ÿî-áØa¢Í?{Jxëý¿AÑH”ç)Q,MGD CD¤Ñ0D 1DD\¾ôð‘Së?ÚöåOߥ/ÿÝÓ'Ïœ½`ÉBÝ¢êд^¿ˆ˜j>üî$á‰H£Õ0<ñ 1D]Èî9ŒðKû¡J‡ç‰a"žç"b^ü<"¡(U…)¢Ãão¼}óêËàIDAT÷tX…§[ûÝB $¢éð”6B-Q(JD­†x"†¢‘¨!uD¤a†Ñê´ ‘PÉJý¢ëoª;ÿÖÂÈ9úVOD;¹¢ö‚èd$„ô´°Šx†E¦ÎD‚ÓD¤Õjžx†gˆøÀþ®¿ÝÏlÜûîhÔÐ ÿ𕉵 «ª§#ŠglþîŸé9¶¥§wK]Áz±üå·°Æ–~§Jˆá‰ú¤CÜ…^G:†"š·;w^ÞûIáòÖ [u@ ”owî$¢ÃG¦x>&"VK<ñ O<¯aÇ•Z° š'bbŸ÷ïp•öÊ+7ßó?~éµÿþtó•Ñ©p˜á£”hIDATÄk4N·`AÍôÒªi†ˆH¯Óľ3üñ#¢ëë‰ùë»~¸®Š˜°N£WX¼_ýÑ*íâ*]u4-dG–±J|4ò|”(B|( †‚¡Ãÿþ[­Nk)Ï74®¢>Ú}ð×Îk„a0£Ñjþ̶cïQ""ZµiŸk=»Ãù Ý»ís{é:ç¯ÿîFù¿ü7<ú²ð°~Ó®ÿ‘‡ÆIDAT}·¯J꜉gwÜõŒPÝø Ï=w=C÷¸vÝ½Šˆè…G-Ý/¯ºÇµ«þYK7]wãË/¿¶(YçyáQK÷Ë×ݳéèÞgŽ’ØBÙÄ×ý݋߸.Ãì o­Ú´Ïµ©>¥Ì{6Ý+ë„{6Ý›¼)=£ëli ßKEäñ±O€mÄQ(ÊWñ¡ˆì¨Ì‘v¬þÑ."’å‘vÈKcøp(Ê‘N§eH8“ÌèˆHËV—p”æÄ¿îùôÍ×h³ÏÿúWK/¸à½Žø0ÏGy>å§#áóáéSgÏ}8y>ZE—étšX`g¨áËw^¿÷‘ƒ/<ò77Ðõß äû]IDATøæz"¢#{îß±—îxê7W3¯tßüè]ß[ýòƒ'pËCWÝóÄ?ß½šˆHÑÆ¿o7|ë•#aM”^zô†Øáhø¯•}>íxæhîŸm®£—žýÙêhÃwÞôÌ#{Ÿ;¸õÁ5üÁ_&ºþö»×ð/2D6<îùv}tüç_¹kJQ¤ÑÑêÛ÷=q{=‘PÝ]š?½iµ†!¢—Ÿ×î:ø~ä cÕÑ}÷Æ–âè³wmûǘ_ypušÙIi‘×%—¹®¾!`yXê„#¿xá™gžÿ#[cKqíU‰=£‚ÁȲDÐñ%Â0D±ã%Ä‹#JéÓˆ‚ïQrIDAT†y&q¥(o^}ù–ÏÉ߆ʼnµ:­P Ã3Zi%£eªô:ž&–ÍRsígÿÿ ÞÀTÿ?mš<²ªú¢(ÏGx>J|8J“‘ðµÁÐÔyýûc¨Òë„uT˜½Õñë¹Ç¿tÿÞ#2ÝòüÃÃß]ý»çRÃækVkªªµíí7<ú‹/ ?t£^ ϶FÇ$’ñ›­ßŽ=?z˜¿imü4N¶±‘høç6GÃÐ?®ÿòý|(L­Ûîzúù}ÏîÙ¼¾ýågFhõÖÍ×S¥ÓQ]}=iµ‹>zãM û÷%EzFøiªªÖê™õ[ïýù+O|ñÐ][µ"l^¸—IDATºöž;WòššÏ®§ÈÄþ¤¥húò¶žýæ‹/ýÛCw)Ï~£>ý"ËÊäI'ÖϬ~æÉ—^ßb¸âà+#D7­»–½¾ZùlÅ/ÎŒ§„üâ,K„‰‡F!T2±a8"½^‰OQFCD÷ÿŸ_K’bã?¾åoˆHÃG‰¡0OáPˆˆªª´âa""!XƶÁõŒ|;ÿ…_>Ò¼zÕ[¶¾ûþ~±g×5ënÒiõ MG5¡n*ôç³çŸ:QÿÒSGöOÐ ÞµZ[UU;§I«­Òkõ!$ ›ŒF£×kH/þJψóꫪ«µDÚcÃD7­Z¥ÑUëtZ±d>Ê+Î~d"ã"ÇʇµR'°÷m½ñÉîWž?rÏÛ_¤ú;ï^G:}MÉDyËa0°,Y¿3Lâ ’ˆ¢‘h˜ÑñÑ¿õJòжmMO/ššèùñ£GµúOêô$•¬<{}C#½”~‘ce’TN¬nnkëþÖÞ§öÝ Æ>]¯]´ FŸMÞe„ÊÁ¯T©0Žh”‰F£<Ï3 óÀðo¤@éßid©IDATú%á¿aÏO).ÔúYžç#ñ°MU•–w„2 Sl\É諲fü­ûìÙ·?zÝÝGßýïu-×ú^ðƱ7x FµçÏN?}ºêä_øÉ³g—,_HDÕUzÙqúß|cáûìh$¢Àø85Þum}ýâ›÷íÞÿìK÷õܺ0°kÃ×é{v4RóšF1}µ^¾•©×2DãGÚŸ:vt‚ˆÆHû)1&Ño¿ñ zôÑ›¯ºÍÜø¬+žœÒ,«5í¸o÷Èã‡W_³nµ~áâZ½Žd±²Z¯íõÓVÉŠªÒ2D £ÕWU?þ÷?§Ï<|{=£}_>/©XÏ‹IDAT]ñÙÏ6þÄõÒ+‡îûÔ'Žíy|˜ï¾ýFÒ<£8{ý ÅE®N*“ÈÜ ·ÜÒö­¡¡§Ÿ¤úm¿J»`ñ‚*¥s †‘%ñw‹'¢ÉpTÇOÚîÿ‘åŸîþ²4¦øÓÝ_^û³ŸÑo¼½ÁÐàüôM‘ˆ¸Ç²J\ñ">4!éüÊêj]üü$¢htòªOmúø_¯Þxÿ¶›þꦛ>q½{úäùðÔäþløìÙ³z&4=!¢ê*QlTzh|ü°kÃ'\DDÄÚžýÅç…Öuýú{o¿þÐuW?DÄÚ<·ü½)M]óW¿òÙÇ»ön»e/­ùêÿþßRÆÏIDAT¬‰-íÚ¯þðþAÓ½îºGéfÛW\ÿ|äè¡(ýêêØoMŒýðCDDÔtßžÛ뾺Z·ö«ö¶Çÿå¯o¯×_°xQµŽ¤½Z]uu•^',£­ªª–~ôZ Ñágïj}VxþÙøÍƒWM×,¹¸J>/ÑZû¯¿ç7~}óuϵ}ç•ÛWQítµòìŸR\d]r™”Ú sËÍ]C¿¥Õ×\»²jáâÅY†Jì5+ +K%ñ4¡ÄÈIažø(ï¼úá©oóÝIsû6ßmÜÿ3"r^}C8ÊGbóVWéc»™Hhš„\¿_ÿÚÖÚ¥K…jxžßúù}'®zÉß!ÔÂIDAT寽x€hÉ… /‰F4áHDCš(Eˆ k˜i¢) YR»põŠÏìý¡úØ)GS§‡?Œ¥õÐ/o\±Lˆq§ß?ôöù´/V/­k\"܆N>~bŠˆhñÅK§ß?E¯¨»H7¦> >%Ö’0ïù?ÿéÜ¢µ/Ž?}ÿlíÅM—/$¢é¿¼OñÚ‰ˆë»ÅÔº}ßã·×Ç^Zx‰8{¼¢øRÐâËW_òç ³+.rÆ2«—Ö5.9ò£¶[~ÚüÏû¶~2q‘gkl©àWª”¤ï}üÄÇû܆+êWDC!FÃhuµU#Ê G£Q^ÿæÄñÏü«[Š»§O}ø½ãcr&IDATÚ#nƒWWéH¶tux¬²%ƒ®/ i‹VxÆc8žÎÛ¾¶ÐõOï¾·,ÛÑ“çm_Ó Ç7x†g(~=xíÒåºù|CðÚK?vý¥%›½ ¥ÌWŸoÿø¿Ð׺þIz…‰D‡sçm_û|ûÇå!±viì~;ÕUú·K;+@úì ÍtÃÞYÌ895%‰^ô’.,|Ãÿ^^0Ç\+•oqþñÈ HIDATñ÷KÚ€²ÓÐpñµÿ£…„X©Óë–.»èäþôÍï-uÃÊÅ#ß}òãŸX«Óëˆ7ÌP‡X  ±@b%€:ÄJuˆ•ê+Ô!V¨C¬P—sÊÅy`xd¤ÔM€üÛºuË‘‰™¦ B¬œ‘Ñ×–º OÇÃYMX9S;íÝ¥n([¶4»üâÇ·³­±æ‚Ú¥u3œrÏž§fQ>b%Ì3ßù8 8^AÎ÷:Ìe(3ˆ•¥“¯ˆ‰È PxYÄʶ†ºzño»·mázÛÚ{¹B”\žjXã•lM©[3‘ÍþJ¶khó«oÑIDAT°“%¢íõí½áñ¼|û%ß±³DD5¬‘¥Ã5 Q/Èù8jd‰èìñ×N‰hñŠ+×­¨!¢w½úÇ“DD´l%K²‰sgÐ;'ƒDDËXSÓòÄò¯dkâ#ÇXiAÎ÷ú;Ë®\·¢æìqŽ É÷*W³r]#ýAœ1aÊØ¨³†5^ÉRRáÅê4€Š6«c;&³Ùæõs½;ldf{ú,®ñÝf®·­½‡#"Š=µù äñrDDfWÀeFŽÂ4ûà°zÛâ%tr¶Ž£¶†Ö¾ÛìÝÎÙ.yl ½ìà°]Ìœ4K¼Xî±Ö¶>?%+Vmv ³}­}\šȃ=×e]°IDATÛÖî1'½¨(È>vAÓÕë–äþ8I‹•¦9Ss¥©©†‚o¿äã¸eW^vòõ?kºj¹X‚ï…‰éÄ_ãþxòÊÅÇÊçøëgW\mZ&ÌÈqËÜâ,{R Ö´îªË‰ˆèÄ_;öÎ –½Î-`MÆåbhNiñîɚ˖Qbù´xA0eÞ ç{õ¥ãRe±HCT±%Ë/]÷„¦m<À%Œ.ó()o碳¬ÛÞ7Ðé27àáLfâú¤w¼^Ö2db9›8MZœ_ë™í]}íÛÉ>ìR¯]ÀrŽ,3i¤RÕ3Þ_Y³˜Ž½ôÚ1"¢š•ëŒË/[ù’ïÕ­óÕ¶IDAT¶¸…i‚œïUŽH8~r­`Yß믑tlG"ML—5]ÍÖÐ; å×,¦+ÏJó*Œ1kØË½úNÍÊu+j^ŠŠµä²&öÝ×^8›2¹ñØ[ sš.órŽz¾®Û±¸¹¶öºzáñ¸…¸Þø6;Y\ã,‘l"¶k() ²vS­ÁÓgÚi Ölf=d2¨ÔÌvÚÙ:¡"ÖdÉè,É ˜åYØŒ«¹² %Åy¥±Ç¬|.y±ÒÄòévJf±¿²’œä‰Û³W¾×ƒ{½³=0÷Oá¬aW°xÙf¯`±2iÔ™=sÊh Ùeš¹òWÌÐ,òQf ±rFއ‰²K& E“m’óY@¬T'œŸób¥º‚&€Š€ü•ê+Ô!V¨C¬P‡X  ±@b%€:ÄJuˆ•ê+Ô!V¨C¬P7«XÉõ¶5ÔÕ‹Û½ùn“XEûlïßß’ ר³WJ7u‘ ¡溜·æÕl¦IDATÁMf3ç÷s½mí½}¶Ø03>ðŒ=mßnk‡¢¶¢„iZû8qø+ÁßgëḞ¶†º¶Ç<}í±YÈc&ŽóØdÅ*Ô+”)Õ+/ÙŸ¾ i¦€ù*SþÊá‘‘Ô…ûíJ¸Çz½¬ÅND\gL¸ˆÈckï1¸C&âkm³yÌv"ÎÏ&X¢íõ¶í¦qó@»ß>0×Ûfë5»ä%¹º¼6Ú%Ü’õÖ{=.“…¼^SçDüveþ¾öíä Lˆ÷ûöØRë•9°½¾¯×nê´ÇKöØÒ·AaúLÝ•nëÖ-’ÕªäúMM .–%Ýû[¸±-×Kl—]ˆYŸ¢›§IDATçg»v™ˆ„v÷y½v±³lLf3õr?y¼ ›XªÅO†x ILf³Íë% y=fóîøëœ×KbEéë•É’o Éq™Ú:}ú>€J§zk3õ¼èÊ6õÞßÙJ*ëíK;©ÅdÚ>0`¦‹É•K•¹´!iÒæ¡œ3IJ®§o€ˆˆðp&s­k¼^Öb6ŧI‹óK;Íö.¿m»ßÞ™Pk6“¬Ìõ¦–ÌΠ )-€ù©÷Û±¸¹¶öºzáñ¸…¸Þø6;Y\ã,‘l"¶k(iÀÈvÚMu¶OŸ}xh§X³™õÉ8‘Áîê’ 1» õ5šN#IDAT¦’—<Ø•© Š-€y‰Ù¶ía×®î_þrddøà7¼WþÞðÈHæ3Åõ¶%ÉÚÀöú>C®[ýi(†»G¾ûäúÖëo»m½m‡³2îãèõzÌö%”JQb%Û94˜SfW íÎG€ÂÃõàê+Ô!V¨C¬P‡X  .ÇÁå¹$’2kÌ 9ÅJ!J޾~0éuDL˜cf+‡GF„(ÙÓ÷¤ôb—ý^RKmPqrÝ_)”ÂS‡ãa…én;Ë­«8Y³¬WÄí"p €J0Ëq¥0¨”%Ã0DÄó<Õ.­;}*°º¾.yh™{7ÔíAÁIDAT€ÉÃqp!PÊÌÈìoðp74î±Ö4cÕŒ¥‘Ç&Ý‚ëmkhíã”n‘z÷‹’Ý-J©ˆç q=ñÍpa«“ëáÌ Î,Þ¾^Ž vWËv †vúmí~»pû³A‹×&Ÿ~·üÚpvçð„x—4C_ŸGöNæÒ,®Á.êëõ’¿Ïæ1ÛYùô²ÜkœŸuÅi¢Ô ñnã!»ßfó(Mïɸ òJ-v»Åëõ‘p· ;áe#ç ñ‡0‘|cñC>…S}˜IDATnqúä/ÄCŒPTâ[òQFü±4‰ô^|pÕq@6±ÏÙÒÒÑ+OˆuÉU+5%Ö˜âôgšO‹v¸}Ζ§3aë;à&yñ ¥¾JZ:¥BäŸX¨µÛÚì‹Ëx;R>O©Ø¤~N,6m3’~²þ"ÍÁà´ôwÛ,DtÛ,òƒÁy+¹ÝnŸ#qÅ&’VÐfcâÊêv:ÈÑ6››S×Þô¥Å_F·•ï·*·'¥ÉV«•ŒÝÏ9ŒFÇ(Ïvã#ßþf‡ÓMäîhq4‹£)‡‘„5B|¡¿9ÖH¡(Å·’Û8f|N(Œ…1>¸êß <1ßouwt¸“Ëww´4Ï# IDATøºÅÁŸÕ½QнR,|*.¸±»ÛêG‰Rc|Ÿ5¶,N§ÏwÀíknÎ4zTZº¤B?;i€ÕjË”O¾q#~Ä)ýœPìXúf$ýrdùEšÎ§„¿;7Ý*½xç¦[¥×ϧr¬¢âb%Yãmn²öZÝñßtÙŠ¡0¨œAáéJ‹¾ŸV·ø«Ôžd©!Eh[‹ÆÆ|¾±1cbP767 c%ÙP(uÞJi£¸ÁjÜ`5ú|c¾î ?±‰ÉjµÒØ%–ï‹ïAtøbÑPy¹’å§?Ó-¸Õ*K·{L\<©›bUI»`’(.]j! ³ÄvJÁÕ îUIDAT2õ㣔8µŸå?™›‘©ýj_¤ùar2<9Þö¥Û…§?tílûÒíÂ[““᫨ÄX#mòI¿­££lÅPT’ðOY‘Ò”–"e“RiT¹Ÿ³¥Åm•ýøùRÆ[BȰºe[Ʊ¢Rßʯ”òŽø`q˜£¸\êÏô nívŒ¹Ýäv¥Ù™il–o(+SXºL|Ü>qìÛá¦4¥§~βl†r- _¤y! }Õ¶Yxüƒ¾=¡Pè}{„§_µm…B¡Ð<8¶“Èj¶ŠHøÎÊÇ)>çFG|ÿò ÒçlÆ-ÒXDV@ž¯”Òdïúœ²MP£±Y±=‘›AIDATR])‡o¥hbø¸}$¡Èêïpúˆ¬ýü¨CRQIoÅ‹K“sÀí³Z­Æ V73q»ÝFëJ,Ÿš›})óÆ—«ðý™nÁ}DdÜ`sw¤ •DÖn9Zd[óIc£ÒÒ);ÙwÀí³ÆY}î>YDŽI±œÐÏFY±êÍ}©(›/ÒüÀóü÷{JDßïý©ôƒ“ôJŽUTÀu;>g‹°»¼…qXûùþþѱ–ÆADFÇ訕(¶YFF‡t`ÓçÜè Çhâ! £õ9#YûûÝ ÃYûùÔ£©¥Å›I¬œÈÚÏw‰RÛ#«ËwÀMÂ#"2vw[Ù,VIDAT™†1:F»›cóX­FŠ5*V2òšŒŽÑQ#ùœ±¢’Þ²78ZZFV‘Ï!Ÿ‚ˆºŸ‹MDdu8»Ø‘¸LîĪ4ŸWè’-W¡û3Þ‡)}BB°tøºûÓ݌ݣ£o>YûysÆß·ö'-ÝsÊ¥ˆŸÕJäx.~¨ÈjípðJŸø»»›™Ä8µŸ¾£*͈©²û"Í'BpÌüʬåáž·y4<22úúÁ‚\îÙT›fžB-ÏÙ²‘žËòì™ug%›U?ÇÍ¢æHÇeròÄñg~1lÛ±ùµßsª_õIÖµkÿæM7Ö.­K kª$² IDAT÷¼­¸mðYòÍà@DÞëšÙñaÒø=¤tÀ&‹¢ ¯˜)«/™™Õ¾H0K° žÆîÑþÔ¥´Mš†µ?ó•,ŠÊޱ{t4Ûy Ö˜×UH³é焹gøVû"Á,Í—X sÕáñ£µµ g2Y.µ VEŽûª²-Juš|µ'ËU̺ Úìbö }ñ‹·îÝûôòåËU§üàƒ·ß±èÜì*ª”ý•sg(^—)ŸE~s=È3(_S†Ü¹÷'rgä:×\œª!†¿çKw|á ·Üz«é¶ÛÌVËÆŸÛtûçîØôù;ïøüw|~ó·nÙ|Û–Í·îÒ•ÄIDATuÚïÕ£^h+ÕsglŒŽÛßì.˘Ï"Ϲˆâ—š¤ÉžÜ¹÷'rg@iU@¬TË!»"-c>‹<çz˜äÎȽ?‘;C‚Ü¥Q±2Qjnc÷h·Ox¥Åm}®Û8“|‚<äz[Ցᛉܹ÷'rgÈz¹3J¢âb%¥æVˆmŽ:ŒÒeb*ù,2>ë\ñ] ;#÷þDîŒôíGîŒ"©ÄX#lò¹Nq51vÊ÷yɦI·’ß\iV,äÎȹ?‘;#]S;£x*.V¦äV°Ê’ˆ\™óYä7׃,rg¨?‘;ƒ¹3J®ίTÍ'‘ƒRIDATa'ˆ%ŠÈ˜Ï"ϹÈ8&夋CîŒ|ö'rgrg”rgrgäÕIÜpü“Õ ôÄ0"a·­VÃ0VC £~yFÃÄ~ƒÞ{ÿÔ⚳ȑ rgärgrg”\lƒçrg¤…ÜÅÜn¾Œ+rXYy¼€w&E©N“¯öóÂä"÷ay¥S)±2cî …ì yÉæ0Ã\²7Ò¬$È‘{"wF®sAn* VªåÎHÍ…¡’¯¡¹ÈÝÁ8ÉšnMFîŒÜû¹3 ´* VªåÎHÍÝ9_Cþs=øœ-Nc†õ¹3rïOäÎ ùîXÐIDATwFiT@¬L”1/FäÎȽ?‘;#]S;£x*.V¦æÅPÊÝ ’åk(\î È‘×þDî "äÎ(¹ ¸nG5w¥ænPÈ×P¸Ü©;#Ÿý‰ÜD„Ü%‡Ü€Üy5GR@ wF¼wrê¿ÞðïûÙf8ý]w?põÚ¥³ËQãʼ(e]Ç~Qš+ ³(ªðŠÙ˜²Zð’Éh^$qIDAT*wFÆ/Ò\³ïg?ú–ýëk×®QòOzëú¾wõ£Í®¢ù+‘;#-äÎ(äÎ(˜µk×ð<N‡C‘p8BD“SáÉÉ)" CSS¡H4ªa˜«>©O3˜/±æ6FþÁñ³¿¸¢Š;^™;£¬êBH • C ÃÈgžbf¥ÄJyî y"„ÄkÃâWó¤ÍÈXB^r=d®‹¹3òÑŸÈ‘ë\s],$òDñ’2Åʈ¹3òÑŸÈ¥U±25w†ÏÙâ4*}ÏÅ3Òe׆_¶»6IDAT(\£V¸\ŠÄrgä£?‘;C‚Üi-YRsá…‹.¼pÑå—/kjº¤©é’<^±2I†ÓÔb—9»G»}Â÷¥Åm}.ýØ!o¹„—Ól%"wFîý‰Ü²^FîŒt>ü0Ø»k¿üoèÅ(OçTÜ9C¾nŸÏ']—@--$Ž0…Ae¿‘¤­l«ÏÙÒâpº»³8ËÌ¿¥®ð4M®‡nrw0-cñÑ­»£Åm¯%I |o-éj$"2}>3Ê®!!w†£ƒéèçû­ýý EÝ oùœÎäÒsg8|c>rSbùJ“Õj%çYSÊwwÄwúXLjŒñåÊ|y`~úSyn»ñìIDATÁ‰Èjíp»ÉjåÎpÎ:w†léŒ3Éñœ‘È(\´Óm¤±äR>bJéç„KZ36#SûÕ¾HóÉ’%5;6Ë_õ¦¦By)¼âÆ•²“££ìº¹xî ŸÓ)&1v¦Í¿K”Ç\îFy¯rgä£?‘;#]S;#|\É0Œ8®Ì“Š‹•iÈsgÈÓ$¦s(Dî ò9[’%rgäµ?‘;ƒ¹3fBW DÔeÛÒvÃùÊ_YÛàɹ3~p“rgȳ!ÄRG,w†ÏéöQ|¯€Ñ1:ÚÜùìÏç¹3¹3fâÃ{ž> =åyža˜×~8/…#wF‡2NhIDAT wF^Í‘ÈQI¹3-ª–Þb†îQÆ0¯þç[¹çΨ€qe^”2wÆÌ®ã ¿(ÍÐYUxÅlLY-xÉd•;#ãiÎbRÆ•atùŸ¯ʱüù+‘;#-äÎ(äÎ(Š-_¼•ˆ¦&§»lñ…pÉçÖ1såØ@zB¸Ì¥ÄÊ¢@ª ¹3æ"^ …<¥9ûœçù§Ÿ˜ý±J‰•òÜ)Ùd¯%~K2n$–\*u!wF>ú¹3r ˆxž_²lÕìæ­€X™œ;#5Û‚»CJŽ?}Y)ã†X@~s=d¬K€Ü¹÷'rg@^Ìzc¼berîŒ| ùIDAT”l n÷˜<9‚ò\qùÎõ©.©FäÎȱ?‘;C‚ܹây¾¾¡.Û¹* V*‘g[p»Ýâgé6óÒÊo®‡t;#÷þDî Y/#w†2>ÍcéG„ˆ² —+…oˆÕ-þnZã›q)Y²öZÝñ‚âj–T» å{kI?þnóùÆÆ’%››c§ÊIC¡XÔUx+¥²Ü>ߘÒ'bHÈé06F‰åÇÒ:ˆ]‹†3»gX~ú3Ý‚K×WÆrgЬsg$,Ý rgl0Ê.(Lýø(å#¦”~NØ›±™Ú¯öE"F¶ÑýáÉ£<ÏOŒ&ÆYR¡±R²QßðŸdIDAT§´˜IÞr=dYrg(Uš¾?‘;#]S;C3ò¢'Iɶ`µ ÛI$OÞ 4_rgdª ¹3òÑŸÈA„Ü3ÄðÄðñl üöûC¯þç[BÄäs8^×í$çÎHɶ@ñ‰R¦ŒÔŒ…Ê‘¹.äÎȽ?»Ç;ƒ;c†ùïÑÀÔÔt~JCօܹ›#) ;£sgL‡Ã‘H8BD““¡ËW.ëлÁ`hjj:å5 ó©«šøX6Ô•ª¹3*o|vJ™;cfÕÊÎè!¥6YUxÅlLY-xÉd•;#ãi®cÄ¿·½KDiˆg¯¶Áó¹¯v'IDAT3ÒBîŒâ@îŒRãc4„óê88@‘ V–+á¼¹ü^w‘ËuÄe~ 22k¨ü2ÿÜðDÄó Ï3‹â+ V&eRÝȑ﷊e(e[ÎË-?ÄŒ–`Ì'^gÆ÷7;6Îâû>æ+«P™×œè:dÖF8Æ-HF ç͹èi3SÈîݨ–½"i¾ló/dÙ0’_{˜z•œ»Cs$ž_,ŸÆínn–~¤1Vb>ÖicŽIDAT¥ì ©-ON™q i‚”¼Yäì(—®Cf ¹ÂgÊ whÂ7vìðÄûcçÔñwN8y.89œœ&bª«õ kª,¨âMäRKÄÊtâ7Oó~GÒú.˜Eþ…\Z©°qhíuÃé&Ÿs£Ûª8z‰·$)FB>¥ì I-OI™‘£uƒ‘ŒÍ$fnq[Ÿë–ò/¸)SðQÃdopû(ž8ù.@âÕgÖþþæØŠk^R¨ôÅÛšœúÝØÝÝ,¾»Ñ—nŸ›±û9ǘ´c>ùÎÉ$ì”&`Zœ¾”þ‰·§,».Çæ»GåÐAIÁ%¥Ò”Òmuw0LK‡3!O¨¸ÏRh­ì“Rü줅î þQ)³†p8«Y­ñïOá¿3å(‰¨þåXrg”‡ÓmR¹µ'I™7o¦ŠŸYc¦‡ˆ‰IDATN8yâø3¿¶íØ|îܤêÄ‹-píÚ¿yÓµKëRÃrgˆrË!?Y9ó#÷æ•[ªˆÛSè®+·î*b¦†)O““Óª9VQ±ÇÁ³”[§#˜]º¢È±=…îºrë®Ù*Vf¹*œ&¢;7Ýúóg~%=õ•Y›/ãJ˜ÃΧîÜt+ݹéÖóÁ)á/é•«@¬€Š79þ¡k¿ðxÛ—nŸœ oûÒíÂÓºöON†''Ã9VX / …B¡ôíž~Õ¶Yxðƒ¾=¡˜«@¬€Š'¦ÿýÞŸJ/~¿÷§¼LŽU VÀœ"„KyÐÌ ÄJ˜¥¼ô IDATkò( ±`&+ÔÍ—sÑ`®:<~´¶váL&Ë¥ÄJ¨`_üâ­{÷>½|ùrÕ)?øàÄíwl :7»ŠÊ1VžÑ‚¢5¯c%MO«ªD£Ñh4";ç^ì,žçy>FΜ9¹xñ²éé`úŽ](wÙ®ø beì‡Eº8‰šÅƒJIDATçyþÍ7ß0® "áGšxj*È0ù¹0”PêŠÿÆºâŠÆ•É+þ‚êeEk[™ÆJÙ‹Ø;o¾ùùýo655I“ !2šB¬˜’V|a­óÍ7Ö¬Y#’ÒŠ¿ ºxm+ÛX‰F£ÒS¡Ëˆ¨©©)é¶–D‡µÄJ€Š—´â_qÅG…uÿ­·ÞjjjLš8Î5ÍZVÊ4V‘´“B(¥†‘~g¢Ñ(£ÁHsƒ¸Ž Oššš:DD‡nllHZñ‹Ù¬2•Â8œa)P®Y³Fx]x*ó|T‹P Pù¤_ØÊ‡C ìY³æ­·Þ"¢Ãµ8J@IDAT‡Ç¤‰y±’HÚ¿k0\á÷¿Iâ ¼‰a4ë#a§ñÂëPѤ_xªÑhy>ÊqœðT”ò¿˜m+ÓX)œG%D@)\:t¨©©QxËUph`Nˆ¯øD$” õÒÑð’´¬L‡cÒ¹TÂ˲Âë‡çÂa²Üs@ùHZñ¥@ÙÔÔXò¿lǕ¯G<” »x÷VHCqÂ68ÀÜ _ñ…=•MMMò±¤|Å/¦2•Â)© ÃÇ~Lx"jllN¼J¼‡ƒó+æ€Ô¿±±!¶Ê+¬øÅl[™ÆÊ¥K?ræÌ Ydäûq…žŠF#µµQUUOÔŽUVIDATH€‚)ç¿ce ðF]ÝG/¸@=!qÜV¬XSè&@¡ÍbÅ?{¦xãå+—-»ä7^=wît$‡CiöM0váÂÅ,û‰`ðì{ïŸ*v+ ¯f±â³ye+އ£á³+.]A´b&Ó‡§?ÔkI_SÔ^€¼‹†)ÛÙÒB7*®¼båÖ­[JÝå+L+uà´Duˆ•ê+Ô!V¨C¬P—‡ãàÃ##ÒãÖõës/ Üä+…(9úúÁ¤×1`Ž™}¬¢dOߓҋ]ö{‰hëÖ-Å>Sr`{½ÍCDfWÀ>gIDATÅö¶Ùh×`'[ÔÀ\–ëþJy ž:+LÇõ¶µ÷réžæÊc³ù탉Á._‹Í2V ƒÊ¤@)¨]ZwúT`uýÊÜ– Žó“e‰ØÎ! ' J|œ{¬µ¾¡®¾¡®^fr½mÂÓ†Ö>.Í”Éoylí=ylòrÄyÒ–•’ÆJ®wGŸÁ5˜¸X¿Ÿ<¶v¿}<01˜´xm [ÓìÎá á-—¡¯Ï#{ÇâìbÙ®¡ñÀÄ`—lP™©4€¬”4w˨ÇÖ@4¾ÛìÚM\oy¼ ›ø¶ÅO}\o[{ïX'KÇù3”YHv‡üIDATŽ+[ׯo¹òzá¨w’Ó§µKëfvÜâLŒ›êê¶{‰HŠ»ÍÒ„\o[»Ç<( »fòÒ•¥œ¶ÁއOŸ È_IzDzÎãmsŽeY®×ö˜ŸÈâ¶³~ŽX×Ó7¦2ÖbfcóΤqlÆÒ²1ûmðÖõëk—®¤ÄøX»´Ž”ÓPZ\ƒ\[{]ŸðŒí´y¨¯µ¾ˆˆµ±äÚÚëêãÓÄj³v¶®­¡‡ˆX“efãJ±F…Ò²”ÓþJ!&®®¯KzEÛ94Þ™ø’Å5nq©L#2»i7¢ÙΡÁ„ñ§iJÈJg Õ¯IDATŽí ™9ÌyÈ3 ±@b%€:ÄJuˆ•ê+Ô!V¨C¬P‡X  ±@b%€:ÄJu%Í‹•©¨7ÌY—ýÞöî )ëX9<2Rê&mݺ%5XÚÄÞeæÀ¯žÏK9e+‰hôõƒ¥nÀ¼æp<œî­“§˜b¶¤´Ê=VQîƒgÈ_ê”ÛP‡X  ±@]쯀ò'?k¥uýú¶¤@+ ?¶nÝ"<س穹.± ysdâXìVØ+…‘¦4Þþ¤§$M)Z*W@~ìÙó”ð@ÑzJ IDATTŒ´®_¿º~¥0Ò®ö‘F«ëWJUz ŸRš8iÆ’@¬€üHÝ^I ˆ$»DR¦IAPxQþTz,/¤È+ oR£¡jh¦”¦—Æ¡ŸJ!¸´°¿J@>œLZ™8&m¤K¯™8¶gÏSBä•4Ó=Î;Œ+ ?R÷WJ„h˜únÒ†ù‘‰cR¼“‡Qé•Ô]œçb%äü€ ÉÆ†ŠáL>ôXq²™ÌH>¯±ò#u@—ôJæ ¤Çªå¤›QqÊ|ÁþJuˆ•êÊ}Üáxéó äÊ:V–ÉyUe+Ku‚>¨Ê×}l*ŸºêöIDATEYÇJ(O]ö{KÝ„bC¬€¬Íû`á88€:ÄJuˆ•ê+Ô!V¨C¬P‡X  ±@b%€:ÄJu*×8Jwº˜Ï2ÅJ¤DdŠ•H‰ ÀþJuˆ•ê+Ô!V¨C¬P—é8øðȈêü[·nÁár˜óTÎE}ý`†wއóÚ€2¥~o²ž¾'Ó½uúT ¯""âzÛl´k°“-uC@R€ý•\o[C]}C]}C]Ûcþ´Ó´÷rù¯;£’TZ&µ@nò~Ï[­Ýc ØY"òØl~"C¾«¨LlçÐ`Jr("IDAT©Û³UˆãàVÜz´¸\"ùH³µ#"Ÿ­‡ãzÚäO®·­}»­]ÚÄXŸ­®¾a»7¡ØÓ¤éS+J(A^©§¯=6 ylb«¤f(V*Mã±ÅFͶÇdCEaؘ8;÷X«0e}ì-ŽëmJ‹JW ùÓ6Š.ï±Òb2yl uõ6Oì­ÝoLŒ&-^[/G»«‹e»†ÆC;e£NÎϺã —Åk‚HgLŒï6“ÇÖÞcp&ÆCv¿M(¿ÝeP®EÞlõF@10Û¶=ìÚÕýË_ŽŒ üæƒ÷ÊßÙpëM™ç¯]Z—Ÿk³=;÷¶¶×÷ÉIãìIDAT†Êü”ïŠh$ÀõÈwŸ\ßzým·­·ípÎß{Hx½³=Pæ1¨" 0”Í=$²=U;çS»Í®@ù﬈FÌÈÉ ±@b%€:ÄJuˆ•ê+Ô!V¨C¬P‡X  ±@b%€:ÄJuˆ•ê+Ô!V¨C¬P‡X  ±@b%€:ÄJuˆ•ê+Ô!V¨C¬P‡X  ±@b%€:ÄJuˆ•ê+Ô!V¨C¬P‡X  ±@b%€:]©PFêêJ ÁÍ£IDATÝ„b›ÈŸ®®_Yª–”D—ýÞöî™L‰X €çùR7¡Hºì÷ö>ö“Ô×OŸ ¤¾8'øÕó3Ÿ± Ù|™ÃÄÉSLÑZR)+ X@ÛP‡X  ±*×ÛÖÞË•¢fÄJ€bãk­o¨þÚó%†€íõ u¶R¶0?¶K‹Yoó”º5¹B¬(*î±Ö6¯eh<01˜ßmèkÃ¥øvo›Ío ¸L¥kb>pµÖÛÈ%.fÀE^o©›”#ÄJ€bòôõ‘ÝÕÉŠO-®Á.òzÅ%×ÛÖî1ÛÙ´óW¿×KöÁÝæØs³k·9a@ÝÚ§H^IDATlj£é>›8öŒ ¥=¶Ù+\o›|–ÒA¬("Žó³³<²¬óû‰ˆ<;æH $â¼^ÎÀ¦,»sXfN¸ }}""®‡3 ¯X¼}½ùûÚ·“+65ylí~»0Ë Åk+ÍžJί(™í†>[¯y°sDKb †Ô¹Þ¶ö.6GDl—Ý$>e‰ˆóz©k—´ÿãüäñ6xlâs‹ŸJ-Œ+Šˆe œÇ+qœ_+¬Å¼s÷ÙÓVù‡A“¤=  ±k¦¿lWlßn`b<¾Q_|ˆ•Åd±Û©/¾-é±µ÷9¾QÎîÜmç¶'í©H»úÚ·p#IDATKÇs¼¶í^"Šíà<Ê[Ó¬ÙL=}Ò9,kàdOK ÛàEÅî¢Ö¶†á©Ù2qRT1Øws ­m4<´³dÛ›¹‹-f¸ùlÚ=ÁZˆ­œ5YÒŒ+ vWW[{]=™]× '=%¶kÈU膧…X PlìÎá‰I/u JO,®qK‘›T©‹iv’6¢ãK-õÛ94Þ)›$é©l–âÂ68€:ÄJuˆ•ê+ÔáØ@²¬n-ób%@‚.û½¥nB‰á§Bb%@ÅÛuÍø©H± .é°óÐ o;áØ€:ÄJuˆ•Ïæ\IDATê+Ô!V¨C¬P‡X  ±@b%€:ÄJu ×8>òÝ'KÕ€r•ë[¯/a;Ê™+o»m}iÛPΘmÛ.uÊÝÿ{!U<$µ.IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/btn-clear-console.png000066400000000000000000000015231203611042400324630ustar00rootroot00000000000000‰PNG  IHDR¤R pHYsÄÄ•+tIMEÕ # áåïBtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœ­”ÏkAÇßfb…b4eƒùÁÖ…®Ú%õ ä (ŠGOêÁ« Mh ö¢­Þ…nÙ½yÈ¡à zP¨=(ˆˆ $Xƒf š"ÉšÍÌ<AÙ„&¬lßa˜y3ó™ï{ox"B0+—×ÂðýÛ€ PÀû} {[›+»’Ž/üf.>ò|}^ÜÚ\ˆˆóGDDü;‰h"Æv~~Zõ«…¢À?ûÐu{Ý.u{tîfa"š€ÛíFÅÈh%NƒëWò ãÐfû»¿^Üó§…°þæ ¥ÜíÑ.ý'êöåÄ¥ÇcxþŒ" ýET`´IDATÆ1vè˜OJ˜q|õ¾îÕrø`4?%¥S åÄ…ßÛ~"b„r873ðft?y°´ØétâñxqvÎ0õV«•L&KÅùZ8áÞ~ÐrròH»ÝVUÕqAUÕZ­6N ãxZ›ô:“±}OE±R©hš¶|ÿn.—«V«’$Ë Gxýî³·:·®JÅù;‹ –e‰¢Øl6]×õ†3La\`Ïžšêר?"€aꌱH$bÛv&“qÇ0õ‘yáZòÈëI¥ŽNOçmÛÎf³„UÝ4L=N[–5RËåKWa7“e¹^¯+ŠˆØh4dYö1`—z¹±±7]jz]¹¼œý빦IDATòŠìž‡ÒIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/btn-display-selected.png000066400000000000000000000013651203611042400331740ustar00rootroot00000000000000‰PNG  IHDR$'Щi pHYsÄÄ•+tIMEÕ $2]ÍtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœÝÕ¿‹AÆñï{3£…(þÌhea%ȵÖrÿ„•Õ  ñ»p ¥U `@ÐÎÆ+¬ìEHc‘ÍYh¡^ŽÝKvf^‹õB{{Ფð­vf÷Ïì,‹.\NwÎÇ,ð­?`ášg‘•Å™ùk©˜o½þÒû}©ºçÎùŸ­wkÀz¿.ÞN?U÷ôôÞ)¤Œè1ÍÖÓã¶·^}M˜zcW€[ç@P@ÄZ#uarwÖ[²4þÙî³4ýøî™"¢j­ÑQ^¦1wÎÛO6(²@UqÎJV[2ïÎ8 ùrŽÒ4=di::½ï6³ÄqÛX–m´IDATÅŠ7n®Mû»É±q윞?º¯EôQ³ª¶±¿›L¼i‰’:æÖ !ªø@ê>àœ%žðÎ cF*I&al­}Û~#¨"ZEc •ÉJ3•c+v¾þ`êhL bJaõêå±ÒšÅÚ›ë“뇯>ïí}×®Oߪ;2’»¨*€Ê`l4 ±ºvjµko®Ã¢!JëÿýŸ-“N§»4ì/ʆ"‹QJÍIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/btn-linktoeditor.png000066400000000000000000000011661203611042400324470ustar00rootroot00000000000000‰PNG  IHDR¤R pHYsÄÄ•+tIMEÕ .1¢îãstEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœ¥Ô¿KÃ@ðïÙü'™3dpI‹‚Sþ»‚! uª‚ˆ³RÈP¸EI\ÝÔE§L™*(H·–NB<‡ˆÐû¥ñÞ”;Þ}¸wï"„€[dÙØðúòæ­9ž·)œQΨ“Âí¤§»üƒàÉDÿQ|Ì H½”²ý¸üEáŒF½\,§>v/¯G€?³P ‚0©lŠ—Å Ø:¸¨—ùpGÍÖrEaRÃ`sïØ~F ùuäº>IÕ<ÎèÓÍÆ_ Ôš-L~ê¤RË餓Öl¡FOÝ‚®ÇÄrÚÞ½pwF¥–kÎhÔ €HÊûsýuG÷ç+FñãòËwù5IDATò0P÷·÷¿{wu”®÷WêÕW$%x8 Lšþ´D3ÅDÀT‘¦óïb /ËÆîÊB¾u >ôdkIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/btn-menu.png000066400000000000000000000006561203611042400307070ustar00rootroot00000000000000‰PNG  IHDRB=[ pHYsÄÄ•+tIMEÕ (Ù¬³åtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'yIDATxœcüÿÿ?‰`Þ¼E, ,Ñʾþ«Ž”ŠÍ]‹µ™èXŸÀëW³fë7%eSR–&LlL)š~€fTã·FhR¿w¶“©šÐ2GŠa¦bAÚ`TþÔ#€d\¨ù¦áH9™/ÛÝÓsšZ¦m‰é¹d\Pw4µLËêâ!ïËjn}"z½ÕY5ILgBCƒµ–µ5öŽt£{FZÞ—4ÍÂR"Oÿ‚ÕcÝÛ5 IDAT½R¢(uNù“ á<®úPIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/btn-open-console.png000066400000000000000000000015671203611042400323460ustar00rootroot00000000000000‰PNG  IHDR$'Щi pHYsÄÄ•+tIMEÕ %!À¸xRtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœÍÕ1haðÿ{ßÝÅ/(©&•ª‡A”"X…BEŠ ‚`¡:ˆdpt«C¡“›c‹… YDAŪC')h*Ap‘‚! JÔ’-Ä$½ûîsH’‹ÄƒÒ7ïãÞ½wÜAyŽd2Õa™ ·öž£“&ìé<ö0¶º8ºKØêâè•DÆ‹§5îÎ}d"frlÛ ŽöšáPpx0 ôn–%WÞŒœ¾¾ä¸|Ag24B´ˆiôô“‡}ŸçOݼ·"*çÆî¼œ…ÙKçnð„}{Ÿ©MfÙf0p$ ÷˜¾X4|ãÓÓGgÄŸÍOAáâdÆëd¼°®IDATRቷ® «¡bS¹ÓQ”²å’=v5¾ÝåÂl‡ôM‚ à0ÉøÌäOΤ/ϵéxüıÆãZö{=oz·% € 0Uo‘#H²0bˆüúF¬±{cîÆ*’hQ‚@’É4Éû¶Š² V7\RËd¶@•!A#Àä°S G[ÿ_Y«×ÎÊ;˜+t– ›~¾R}‡Š•–ŠÎ¢ «ÈLQõ*•8ÿ\õÛ*ÄŠ«ež1‹ @mQPìlrá5à¨È-G$¥3¡buùùnÂtŸi6‘öë±ó#g¢¿þý`sÝüš~²’]ÞDàÂ*IDAT,Zÿ|ªKìÚøt=/(þÔòþ¡ûýCÝõoŠ=ü?ó”L¦v û ë¢v8…ìIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/btn-options.png000066400000000000000000000006561203611042400314360ustar00rootroot00000000000000‰PNG  IHDRB=[ pHYsÄÄ•+tIMEÕ / ”š®µtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'yIDATxœcüÿÿ?‰`Þ¼E, 2¹0ô­~Ê`òŸ)bjJ¢RbB lÒ|,j¬*|,2<,ê+N˜j*]æ¿­ûQµoÏÛu[Ñt¡›òêÖ½7wî¿úÃÿL€ó•8÷k)uQ®"á¾9ç< û¶ïÜŸ’ˆéYtSªî±iæ  .Í)jaè›s~~¨;¦XL5in†ÿ Œ :qWN,b`680¨IDAT`¨ta```¸²§S=zýøÍÆÀÀÀ̈@×O,:qï#33 #TS>ÿ䄸…‰™‘™…‰ÁN™ÿÌóï‘/?8‰0å'3Ôf˜AÖÒœ·_|gf`ø„Íôpùüƒâ£ÿŒ`a``d€„‘¶'Æ/?‰0åÇo¶ÃÛvÆTˆ¬„M‰ð2Åg0˜Ê–yóQn ;,} (pjIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/btn-scroll-lock.png000066400000000000000000000016041203611042400321610ustar00rootroot00000000000000‰PNG  IHDR¤R pHYsÄÄ•+tIMEÕ #5Œ8 ©tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœ­”]H“QÇÿÏÙ\N6ÚGkÔbAKÌ ƒØ‚è"ºŽ¨nŒ"3 /¼ê¢‹" ŠÄŠ.›ÁlI„*Šky!}¹Á–K—ºš¹wï{ÞÓŘø®móá\<çüüÏ×CBÔ~Ÿ@<–¨ÄjÔ¯$E_R¿¹òŸJßÞs)\eMo••M„»¶¸½”/Ÿ*Ý‘¢2ðÇlÖ àü¥À̧D!¯èEæzŒÊxIf,WÛñì©¥Åj߀•ÃÌ.˜{¯Ý)VU½˜W¯³­bÆeIV‹K3Þ]û@ÀëÈp5JƒÙžzÑK…X<ží &)*€/úIDAT͞ݾ€žž¬F߇Ô|´uÀøàÉoBòø:ë :YQeU$+•æŽþ¤Ç²©GÓi“Ím²¹m[Ï&¢7ç§¢Œ c$ɘ¯Ó×tF“ÍÁi¼Ì%ßfÒ¹ŸS_Ä/ÐL™t.öþÁ×6ÃbžBwC€Pò…µ”Éû‡;ÎmÏ—O\›ZŒfÇŽík‡‚—»ÐbGO*¬¼×ª¸#®¨dõ‚gßE^>êò ®¨ ¤#ÊI„â«Ëå+{á² °Tüc4ú@³wÂé0rY9ú»|ü¦2…ãw2â´›ŽŸhà´×IÙiÎñpx|fn `Þ7IDATaƒÓzãz?Ê…†²¾ùØ` g©{ànmw5ZkY}!HQc¯]¡.å÷÷ÕNù ngÝÙ‚í¯ÎIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/bullet-important.png000066400000000000000000000033111203611042400324530ustar00rootroot00000000000000‰PNG  IHDRUè¤Ò pHYsÃÃÇo¨d{IDATxœÝWYL“YîÆRÖ‚,–ai¡ˆ:Ã&‚È`DÐq‰é<F4%Æ3‘Ĩãƒ>k¢Éè/câƒaðAypDE‘M*JjY,K)¥¥¬miç£G.¿¨óä ™9ùóç¿çÜ{Öïž{¾ËåâÍÓ‹eeµjuwOÏ0ïG11¡II²üü33“Oñ:õçãÇmÄ GF†`Ap°ÿÒ8ûí¨¿ß¤Õêõ#³³Nâääüpútahhâ2«Tç©æ?>>bíZE` ÏRzý­i``ôÉ“6“iœ†(miéoáá¾Ã1«R]hjê—Ïç¯Z™–¦‰„4/8ØwzÚ>9i“H|ÅbƒaŒe™ Ÿ¶Z§IÊŒŒXm¶Y6„ö0¿§Ç`2MS,ö”HRìp8AšÌUEDv½½EAA~CC§ÓÅ4ãm6O°™R©“ýýÅŸ+ùðaäöí†ÑÑ)@˜¥¥Ç„©©;JJªˆ˜š+ fçI©\~oïð¶mk¶nMÕëMƒƒ&EG‡îÛ—;3ãèìì‡týú•QQ!qqÒ„„ï6lø^§4™¬˜¶ysÒöíiÈ2ÎÍMFÌM†ññR( …(BttHVÖªÕ«#_½z襧ÇCOfæJ¹<<&& ßmm=SS3ÙÙ«wîL‡3ƒ™|€Ý¼¼äæfíää4qŽU¾|Ù™œ,û\I{{ò¢Ó Ñ–0/ºzõËâÇ{jÊÆ8N§Ónw€ƒô£>+VDR@@ HHúüy{uõkmÙ’’““xñbEFF¼Bqþü ‹e|¯ƒZ·.¡ªJm·Ï–k×>ZG"Žÿ96vùÝ»Ä9vLY^Þ¬Ñ|˜‡› %EþðakZZ:41Ý`t)•é—.=`>ÏÌØ¿¦Ä :_À“†ˆ]€”Ï{ ðóóÆbî¤ÁQ|ÀÒë×݈Áp•É¡|’"lš à‡tÚÊÊfƒÁB|`ïÎ 9Åål h³}ÂA•0‡ åò0¤ûÑ#5êéëûÑOØ­©y+‘ø¶Ä¡ø¿¦¿ÿ¦Cì"¶ŸAv»“[|J0â§ £†èŽMMÚÄÄ\°úÃ'‚O@€`‰9àK¥Á:«S£ÑãpAA´Ë–ìÚ•Å C8€)7ô\˜ÃÖJµµíË4ãûúõäÞÄÄ4öoQÑŽÖÖnì80ѰتEJÜ´pÞc¹ˆu—Õ:éé)âLc:h¤ ×ÕiéÚZ šGMMö€@R€•!ó55o**Zœn²Ùìà0…è‚T"D ~W×@Hˆ?6vKËû+Wj`bÁMלë´)KJ’?xÐ*•a+•eeÏ1™¼R«{ž>}£RmŸ¿Ó•º®®C¥ÊAõd²ÐââîÔÔ87ìç¤Í7oÖó>¥Þ^cTTè»wýŒ£P,Œqâ*R³Ùzÿ~3˜@õ™3…(,k.äº6wñ“õzãš5q¬n¸ÉÔÕµ“W˜ƒÜ=»/+k%¤È8­Z¤Ä½Ð566ÉL vQJJ,³ ϼ½=‘l.Bÿ¨3,™ÍãjµnÿþÜÆÆ.ÒϤ‹öèÖ­úÂÂMõõ-âN±gÏÆòò&̤ýOKPÒË—:´­¨èꔼO¡›››XZú-–Dòò’ªªZ™]<ÅÅ·Ožü…÷·ø4cÈÜCì‚Ý»³¹Ñ¢2F£ujÊN»ÿa½}>öêê7€+ ˆo؆\é¢çÞ½fD{áÂ#G”‡ï,.þµ««¿¤¤"\P=6óÆ—¸8°…qºøÀ)…žòìÙ[&Â1ŽÓ',LµÛР­¬lá¹ñÿ¹¤W vø!ö¹ûÏÞ½¿cû1.¶(P€³ 8Œ\†:èdЋ#‰ââÂ;:ô˜‰£cLÊûᑱÂÃCÐØ¨Å©KLôaE}} ?àDD¡Å"/Êda8qa˱+¹3ArùòÑQ«XìŵëååUZízq0Ä郰±í¹•çÍßæî¿0“Ÿ÷d®wA$‚è‹Qý'ˆRÉ=ãˆî¿tŸĉËèÛKàã¿N‹ÿ˜€þÛÚzіνŠðG‹S£  ›ûÿû€y`.¿´gIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/bullet-warn.png000066400000000000000000000032731203611042400314140ustar00rootroot00000000000000‰PNG  IHDRKÑe‰ pHYsÃÃÇo¨dmIDATxœÍW[L“Ini"rGäºh)"ˆ€r”e#ëZ6j‚¾”¬ã>]MÄðĘ@Ü„ø"Db$Ù‡t5FWʼnÈED.V@®-EËÅ^hÊ~þüºOK²º“IsfæÌ™óÍùΙ¿Â¥¥%ÁÇÖ÷èQSeåpK‹ö͉««ãÚµ‚ß„Bá*v­º1 zÎÊ0}d² ;vì, eœžÓh^+•þ[¶`›gPr ¨L£P664%…ÝhCˆ@Ù;:ÇÅaõjnîXWË@[ÂL <½vmÏéÓ¸V8ÄØhµZ±… ýöššïNž6µÐ‘Ä~ááH¡– Ágçàøx¤¨af>…gd ‘ûö¡ã¢²²ÌcØvýú“Êʪ#G·¸œ2ÈæÃ@Bp$îÐ!Ž¥Cb2ѵ±¼¥!:;›Õ1™´ƒƒÐôÚ°Lý–ž~!!¡¶¤—6àÃ'ðD"±4)‰ž Df•W(Dmä4ƺ»A ibâò2*9í­±û÷÷>x@D±¾qö,)CóLCƒD„n|œÍC›> Âsç~¹yS¥T(•CZú³ àxM  Wix1dc"Ü*(ø¹ªŠ%¿É„¬ÕÕß7}ø@‡zc#DA ùÎ.õØ1n =¼›¨¶8fvv®“J‘i4쫯ÿ&6¾BÞ–Ýyû6§‰ø*Š=xbÈÍãk£áÒ%p µñ¤4£ù/âB[ZyyhýXÞ¶·++*Döö”«]¸€/““uu(¡x~­¯Gygo_¯‡ç´ZÁ§ èØ¿45•«¨Û‡%NE‡] ñâU«RÑ*hƒ§oôÅ È‘‘Ú¡!XçöâÉ>J.¸M:ÔðÐaÊ(Î`ŽnlŒcŒhT*Áw"x‹8x-žoþ^u?•h4”(”Yììí¥‚G•ö3xôâ³_mH?ú3shÿ9ù¿jüü¶òÕFóZíU…¢çþý/ëÞÕ>ÿòæèߨ¯éïÿzî­¾çø÷„Üãÿ{útCú ñê6IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/bullet14.png000066400000000000000000000007231203611042400306110ustar00rootroot00000000000000‰PNG  IHDR*º† pHYsÃÃÇo¨d…IDATxœM’»®a…ÍÌϸ† QŠˆB£¡óï":J¥(^@H\¢ð z·ˆû}Žsv2“½g¯µöú÷?Úóù´|b½^÷z½Édr8G(ŠF£‰DÂår @èp8¬×ën·Ûçóy½^Ó4iÝï÷d2‹ÅÀ(žn·[­VƒÁ m§Óéñx <Ýn×ï÷o·[<×çóy¥RQŸ°Z­6›Ín·34/Ng»ÝêÍfóx<¢-N¾Ö‘üæ×ëu4P7› JÅüòº®Ó>Nûý¼W«•Á!°‚AbCÓ4$/—‹à$‹…}<°#A ßFéªp8<©é†A[˜p$Ǫ~¿_¥R) x€Ê’óùŒ<´o‰d:Öf³Y.—£x/Y)¶Ãe‚@ñ@R«ÕÞ·ÕjµŠÅ¢å7e ÅC©TÊf³?Ûn·Ëå²hÿ† pÿ±\.Æ`0˜N§”‘H$“Éäóy®M/(@—âXŸ˜IEND®B`‚checkout-from-svn-location.png000066400000000000000000000314451203611042400342630ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images‰PNG  IHDRÅŸ¡¶^B pHYsÄÄ•+tIMEÕ 0¸,°–tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝyœå?ðOuWs3ܧ̀ xÄ[•€ ¢ÆhTï#1«ñå±!‡»QY£It7&kÌFT¢øÛ5ÉzßĈTdãш"  Ç0W×]õûãé®)ªé™yfº{æó~ñª«ëxjºû3ßzªºJñ<—]vˆˆ¨wݵ(øPñóT$餯‰ƒ 6lx šFDT!vîÜÑÚÚòÉú¤j:O/»ì†ƒ¾tà13Ûÿ½D£Ñ6”ˆ¨Ì9Ž`ÍšO_^ùÆ;ïþ]DªâyžÓÙÇMŸ²÷ØT»fšV»æ¤RZ©LDTŽª««jª¢ñx¬º¦ê£?_þ—Ç„¸æIDATÕ"RUD˜nݲcÇNÝ4Í––öR7˜ˆ¨| \LJKNÙ{,0½¥u7eÁ‚ëg{ìWg~iÇŽÖ/¾hjok×4«ÔM%"*wUU±šÚš‘#ë‡ô×—Þ]þâ‹*€Ñc‡îØÑòÙ§_45±,%¢döM“^ÚÕ¹>9ó†Qã[[ÍÖVÓÐMÀ=v(U<ÝÞÞ®iV2—ÜX"¢rµyçç“^z΂“¼†Qö„a¸éž <QÐ õ³Ê†m.^ºý¢ã† iV{{ºUÄñæ&Çô‰h@qÿâSOÿJªYÇ;Ã,f–è?¶8õô¯V5›IDAT|$€§Ÿ~øý÷ÿ¾páÝÛìÎ^ä*–>°øŒ3Î=ë[õÆò_ÍüZ.[pÍìÙ'¸çÞ;žþ©û~ÿhUUµ¦¥.þöéÇÊw.¹ò¬³çÞú‹ÿš8q’?ïYgÏðÇ?,+~u9ö8¨Ï±­ ™Lx€’YM –Z× @‹ÔŠí=u¸eY†)þ™¦i¦Fcj"¢áÊß^õõ¿­úÅOoZWoyÞÌãNJF¢¼˜ñ7+¦v wCOfÿùÏþÀ?ïûZV¹þ«Ûo0jä(Ûó,Ïía#³Ýÿïˆ_Ë¿^w³ª(0uÊ>¶ïØ>zÌøææ¦LžâþßóŸß»baÍàÁÁåß0~ŽËÿª•‰ÌÇA<¿pÇñ¼àØtå•ã︙HõÃtÓ•Wv,Ëuá825(bjT$œ ‰¨jÔC¦†AäÑp]Ýu]×s]'ê$ªœàÚ.IDATXÜM8¶íº®×U·ÙóTµ£KV÷æ›ÿ ab£%ЍJ4’>ëáÇÿ´øÞ;O:ù´óÎûö!õþú×å·ÝºÀÂÜðկΓ½ûî›/¿¼âÙg?éäÓN;í›ãÆMð·%ªFÅ,ÿyÇ’ÆÆÉ9gÿú)3<ùÔKÁa1`î©3ÅS¾ÐSQDŘ…?¸á½÷Þ¾üòks¶óë§Ì¼ù–ÛE;/ùÎG=ó•W^º÷ž=¶ÎwÒɧ=ûÌã+V.?jæl§fLØk"€uë?>èàC7lüÀ¸±ÜL`ÎúêqO?ýÈù\Ìþ¨Züimü,—_ƒr ŠEK")IDAT/ój(ð2å*,׋{–8’´ñÊË'Þñ[~˜n¼òòàÒ϶\€ªF•t§‰D ò4ª ºgÕãÁúòÖ-Þj´ê–n)ÝÐ4SÓõ”f¤t=¥š®kºGæÍøvÇ ¯Pž}æquCê½<Ÿû9³ŽŸ1ãØ .žW?¸î‹¼øÒ_n»uѯþã®Á55ó¿{¾ª(3fÿÎ;oüËu×,ºñÖ«/ÿþsÏ=ѼsgÄF /¿¼â¶[ý×oî›´Wãk¯¯à UÿÝóUÕþå£ý)ã.œ˜ê?óì+'Ÿt4€eO¼„ÀS@Þ§&›8mï}㈬zcUÎýË@ÿ IDATu×üöÎû.>ï’³Î;õÞ{îüÃOpìܳÎ;5 å{W.t~ÆçìÞ¹óg·-:eÍ;§q¶ÿâœs.^|ïgžqö½÷ÜyîÙð¢éµÏš1ûþÿYòØcÿû3Ïñ—æ=„¦°B-|Ê€¢™c<ðÒå¿2®í){~X‚•é܉ãŸrjðY×NOMïCñ”¨ßªD•xLõ (âê} Ç{mô˜ÚQnë¹®ë8®ã8Žë:¶ã?t]×uÝX"¦x"ìlS,žûc_7¤^­NøŸ?Üÿ틬üë ¦MÙ7Z°bÅósfŸðê++|ùÐéѸz-ÒÃðIDATÊéó<ÛIwz÷ÿ÷½ÿóÇ¥·ýâŽI{5F«Ëþü1 àÙç?êèJ´ãoC"ÐŒà°Z“ÌKÁ§&5NŽV%àÏËr¬HL3yBz$€úšAbëžz汫®ü~,ÞqJÙ¤ÆÆë®[ôÔ“ÞuÏožzæ±Åw=0yï©;숼ï“?pÐGbªhç9ç]tËÍ×12çVt‚¥Q9ð¨e £æKÇ©’),mËB,sxp•€ï>û¤¦Èìøÿˆx.ØlËGýØšÙß)Á>'®ÌØÝôÆ'»þoóî”njšžÒô”n¤4CÓtÝ0t;ŠsNIDATÃÒ óŸ.›Wü{Ài§ùøãˆÅòî–úQëZö«¯þÀÜSÓ»Û«V¿×}òÉGÄÃx2E­ß°ÀGkÿqÄGFÔ¨˜@<¡¦gwœX²#Å‚ÍÈ7nÞžO‰%ç\Qhš¬­s5ÉࢆÔ9ï‚‹GŽyÓÍ×ÿ~Éï~öóÛ#ÑÈĉ¼õîÆŽK¨‘@e?dÈàk¯ýÑ7¿uJ1-ñ¨e@aZ¯¢ìYœp×V¢à¹—/{ÚÓu L^¼™Hýíܯ¹<¸NzÏ3®ÆüR7Éäi4‚¨ª*™Ń=®Ö1½‰#jÖíhÙÙ$vójÃñmIDATôn¾aê†iöW¦Oš3{ÿX\MBž§(8üð#üáOÖ¯;äÈCóm[<°£=cƬ•+W,{¢£7Ó±124¥põ÷}ÔŒ¿ýç‡rè!‡šò+Óv,'8W1Úç?̹¢î­åk§œzÓÍׯZýŠkÚÉÁÕÆ°øÞ;Œ1*žˆ‰Ž &Œ¿{ñý—.¸¨Ó–‡1NËÿª•Åó ö¾(™S;ÅK㺊뺞ç)Šrå Ïùaºvþ%âçÔ%÷"©wÌ9Ñó<ÇIjŠÇ£^ºcVk#SŸ*±xðJ(^|TÌÓœzàèH$¢*¯¸)¥éšnhº©—ï%òIDAT¦aØG5iþ_m˜8Âï“Íž5kÖŒcf>ýÜãû¸ïº!>úpuuõܹ'·-žè¨Ï?ÿ•+W¼ý'ŒZ²äî3ÎøæŒ3ý‘ÇŸ|£><|øð3ÒlÝú³Ï;oõßV-}`É>Ӧ͛÷­•+W|²~]uSÀI'|=Q'bóæõÐCÜÝÜ”rÚ‚ë9óØ—^z1Ô†ÐSâaÎåœ%ßð²eÏ®[÷ñå—_¹k×.?^xƒeXb‚Ÿüäßnºéúk¾·@2Óu\Âa‡~Ýu7ÜrË¢Â-'¢<”`Iª¤ÿÎytÛUxˆÞðÚr?L?¸F"^IDATø;~=òÁÅß™vß=–mÜŽŸ1cŸŽßìèúL7/>§‰xýÍ?ýùSO>yìì£|÷»Wwì\Çrªk«üI$:’è˜cfÜõ_÷Þwß’U«_ùæ¼³ÆOòWŒ|ò‰'~ø¯×œuÖ9Ç|eçtÚ©ªJþèÇÿòµ¯ðÜ3O]xñÅ·Ü|ë?]5À¯õÛ}'í?¨®6‘ˆŸ{îù[·l=ë‚oÜxãOƒë½êªk_z鏧Î\³æ£|¿ø`óü‡Çw|CYÞIDATöŠrÎ’oø˜cŽÙ¶u롇îì±s~ó›ßMÙkÚÐQõb‚iÓ¦˜8qRýˆºœkpÞyçoݲ%»y…°ç®°<-{ž"µgºÂöà¹Þ¢éé¢m͇æ^sÁÅû?p€EÓgÚ®çdæMÄc™3EÇ2!®'ýƒ…ó×Õ‰Õ¤¿>9q*« oAÁœ€ç8n{«¶}ËNõÇ R#ŽÌ¬û`#€ÉÓ&††µv½¹©µ½55¸~ÐÐCÄ•®´v½­5ÕÒÔê Îb™Ö§ë>1fØàºÚ¶–öm›w3a¤ܦaîÚÞÜÞš1f˜h‰˜Ñ4ÌÏ>Ùâ? .?¸bêtIDATû!€ìåÛ¢ìy8ŽÓÚܾs[SÍ êÁuµÁ¿1ºflÞ°u\Ãh¿>͹„]ÛwQ‡"ñ“\øW­\øŸ?©ð—SçíÓ0Öµ¬H$¢DÕHg×ƒçØ®ëFb±7|~Üÿë'dËîæ[o[¢,Xpý~xɰáÀL¡™^£âen×—Y‹ˆÒŽ„U>‹ËSÅó§uñ£L$0OKϯøÄž´È(EñžžûñcF¨Š¸‘XQ=i®einÀ¦-ÛN~î1dJÊ]Ûwþü÷ª"QÄâ±=Ï(ð«Pq8L®ŠÌvÿ›°{¼eÒý©Trü—~ÊÿMÓà·–Ä[¿ž‡f0IDAT0GŒ[P`»…ÑAs!}òb:Å7–Òý§±XT¬1sŒ~ªÂËùWüý%s¼ P¼=ª×tèò³\z?Êe/Céù{Ïâ‘"jA©+VßyÛÖ/ê ΃í4¥®X¨ÆT‘”ž‚ŽïﮪòâüD4À|ã„CÃÂê;oóÇ(™ÓŸP°,L]±ð'ŒÍÁu™ûG%â±Í›6õZ›‰ˆÊÔ‰3÷ÃÌßwcFÝ0‚±9løHø×“þÇÚ/¤4Žˆh::˜§´výúí%mQEjlqôQ@ä©Sëê‡7½ùÁ]w-*uȨ_鯧Û4Û´á8ÞO~ôÓC¦Š IDATÆT¸…ø1jÚ^\ Ÿ¼Á<%"êD›fÐŒŽb;®*¦íU%ö¸r´ä»zõ'ºåŠšT„i4ª˜¶'~ÆUÅqöèÎ`}JD¦[®ùÆT°,uœtŒ²>%"ê„n¹~˜úe©¯p}Ê<%"2I ÀS!í8îªOƒOyJD@$)²Â@°e}JD”W›f‹üd,bÛ®i§ÃÔÏJÖ§DDÓ-WU#¶íÖV©â8¾ÏÏÊÞ­OEQ”ž^…LÊBˆˆº'X–"s¢~P7êÓNΗ Ež×·ßËÜN f)<™¿Ø>Þ"*¢«TU#â§x Sä¯O5íJD4èuIDATÃíZ}êg“¯/+Êìµ#WÂÏ?î$øGŸâYµe_÷Ÿ*Ùc ŒÏ·œ®®7û¡?²ÀƒlhšÂ$¢J S!û€¾Ðëý§ÁdEQBec¨¢Ì7>;Å i×Û_ˆß€ân$U4ÿÜRq_Œ,Pœ¢7úO èv†B¹'‹êªàêDhŠ¿ Á ügû¦ID”úl•ö骾YW;À˜UcSæ!WqŠnõŸÊÿþ~W+»¾O®œ-ôkÒ>Žx"`VsèÙRÕ¦Ùâä'ñжmŽí¤Wäx<ÓÐw¿[¥o‹«¹Ã€ã¤ËÏh´#7e~¿˜¬ôö$e™råk[p$fwú£IDAT÷÷‰*‘ˆÑ6ÍV €mÛŽíˆ05Ï ”“º¾G·iö.Z¼|GŸüážµ/~ÞìÂ3»“¬L‰ú\»á´hŽ”EÕV©â§)Ž¥ªjTFÕ(€xT‰GsÄ…HÒì*Uòñ}?n|…³&ßô¡ñ¡…ä‹Ôì¥!Ðõé?•oiÝèvÈ^UQŸ¶·i¼h,g}ê".&nÑœûûݨO;é?Í+9#¬Àô9Çwo®bfïÒÒŠi•¿6ÍVÕˆâX^4&’¹ºM /–L˜ºÓ §6sp?g¤v£ÿ”ד&¢ÒÛ­§#­M³[šš77}¡˜õuC‡ T7(¹m×ζ/÷EIDATº 7®&'7ŽÎûùç;·5ïÃS7niÖšw0]§qâ^ñ¨"Ât÷ö¦ÍÍ;Ô =¬®FLßÕúÔgÚÍØã„Væ)•X«i‰m»v®|éïUUUš¦‰Ÿ°À¼Ógµ5»o½÷QJ·ª“±ºº#†Õ§±M³ßz÷ãM-FŒ¹×hcÃÚw6µ¸–©ÙnÊ2öß{ Ï467ïøðíõ&M «k°[·G]ŸŠ`Ùywd™§DTv6µ/[öf\´¶¶ `lãp£GÔ¶µ¶Gbñ”n}±uW:O­6CW>ýü ×´xpCTjšÖÚÜ @3dpm6IDATß^?fä^Õ‰XB•Šh¦cš–kê)ÃÒmWí¬>MǨíÈÐ æ)•^‹á¼õáZº¦Gbñãf:vì°6ÍÞ¶µÉÔu5µU‘X\嚬›Ð0FU#@õ§[×µ·éb!£GŒql'¥[Í™1¦i½±úÍ_nx1×Ô[ZÚnG§gÎþÓ`5 À²½ˆ·ˆDežQ‰‰SA[vÙ". ‰; @m•Zè*Ô0ú¯¯lÐÜöùIŽe#¦8Ö‡ï}jš–®ûí³—8ª]Óu]| †aéº1yʤ±cFhšf€”aÐqðñý`h¦‹xña ^OšˆÊD" u1IDATâ6·éÍmú¦ÍÛ—>øü¶];CLÙg¬®âßÚÏ6𢱷Þ]×ÜÜfÖð C˜Žçš–aXÍ­©d2¡›Vskꥫ´9±–v£¥Ýpõ6ËqMÓ:.ůnèà’Ó˜ª¸bjQç_²>%¢Óë[ÇŽQ/‚²U3V¬úû|&¾?í  ÝÞÑÔ¾iÛî/¶îzãíµ".'íÝ@7Ü„bílwtÓÖMÛJEŽ<êH­)}óMM»Z-Û¶l»ÝŽÐ €8-™óICLC/rO_`žQéíÎ|¿¦¶ê¨Ãö»îûç^þí¯ºÝÜ¢ºýÎ{k½h ÀÄ1C×Vé¦ÝšÒW¬zy][IDAT{ýæ­)½5¥4­AÌnx1;ÕbÙöîÖ€d\=äðÚ5³]3_{ûc1½ÝòÒ+õëÓœâ‰$ëS"ª$v®Ã燲Ïðú˶[Sºi»þõ¢&ï;Ydå˯} òqÊ”ÆH<¡gŽ&™–Û®™­íº¦›Ž>ꚪxk»¾uGKk»ÞÚ®›™.WêÓœºZŸöÖñ¨N/žÒÇËé åÜ6¢ bX.€GžùÛSÏ­<âà)NkH&ã+V¾ûÞÇ[Ä‘d­å)°mÇvöß{ܳ˰uGËV´ ªI¶¶ëî?IL–2¬êDl—í¶¶§Ï?©˜¢žøµY÷Ýÿ€]­ÚÐAUºnMÕ)IDAT8¶Ûž¾ _ú›ø9ƒUÔ§‘¢µ›yš}ͽn/'{ö¾Ì©"×%·IÁ¥1”‰4éÎgo¾·qó®÷Ö¾4¨fµD—F=}ªe“ƒ¿4ÙŸKLvÀ´IÈ„iʰTÝØÕª0\ÅP“Šãù¥)×$7nm°«UkwT¥öŸÆÉœßßÏ©;ûûþ£ºq›¦rSòö—¼D%'Nýð‹‘~uÙÚ®0uì¿]Y¢*™žÒñü¥}vµjâßSÇ««qM@ʰè™ôËrWÊ?ë['×è“Û*m?ßõ˜³Ç‡Æä¼Þhλæ[Böº‚óŠ ›æx“¥çIDAT\T—ÖRຨEΛ=A§m˹™DýO›áüñ?.ùàã¦ÖoýdÓv£GÔïÛ0´±a¼˜À¿´¾gçÌ;nöô©zl¨bì5r(Ýë( Ï½à›§·ì0n¯ "L-ûíÓpí÷ÎÔ áØŽf¹m†Óiÿi—êÓîäiðöŸÁØc ç»tö*²‡³—P`iÁœÊ×Èà=£º×ήΛï~97Š}4@¤ÜÕ’Æ ÏMŸtÃM&"†VV7 0*eX¢,1R†šœ8ºV7Ø?ÃT·Ü¤×æ(µ_š6Ù/K;–\ý§9c+甽q#¦.-³È$êÕ¸%?)IDATFñnTDwoVËòä SÏ4€˜ïšF°,Ðîª"Ñ‚a @Wj‘ÙÇÏ\«ßÑmEœÚëõiNݸƾôu•Û2…PíÙKk!ª\ºí¶›éô †©¹gé†+ÂTz †iÄH¥”¸ئ­D#¦í:vÇ—ñ-Ç‹E•@@§ÚM§ÀÎ>%š(>LÑK÷‹Î×É(=³*e™²”sÛˆzbãÖm?þͯãj7ψ7m·ó‰2lǰ½iǘá#"0=ÓPâ Ï4ìh­ê´0¼˜?qè6J4Q`ÉÝÉÓìC%Ù=ªþph|hŒÿ0ç\ùºVó ¶-ç«ò=Û½vvuÞX›ë†ÃIDATx£ˆú·¿<ó€½÷Žqm%¢z9Ú® ÀÒ=/ýyÁ¬ã¯Ø±ùïŸnøl¿£¾\‚ãtž°Õ±Dºæ?mÃA¬Ó¹ èæñ¨NG“¢È);½À2‹\xñ33oO¶1{Þ³³áD•kX}Ͱú©ÙãuËMÆ"Á6ÍVkù 7½óÚcbš¾I ¼òÈ9;òƒ¦_š½(Ë%KüÔ 7O¸¦üY•ˆ„®×‰ªL…}½>î>•³d,ŒTÇ0lOql÷×›=ãÄÑc¦„¦ÿô£U/ÿßÒ©_"Â1®Ø¦çGœ¡uü„jµ›PÅY«âg(Lu/’T×–ð‘"<IDATŽ' ïé ý*O»Ž S¢r懩m»Šc‰ƒõ"þF™Ò8u¶?¥çšnêSר…·^G&aºSבLšºüà@|Ó)™þA´j0ïwBD•aǶ÷W,»Éèº.€H$À²ìh4‚<ý¡J|XzÈÜ ÀµÚ¼ºì²"×;z¯SÆ7ïg¨?àeiñ÷;ažQ‰ «N?b¿â§_÷ñ^´*ç釳fRär,Ý0GOE“Õ°-¨11O&D≨Úù>~ó”ˆJL‰«ùå®Ìñ`è±çšJ´Z ¿¨íÛTGO?£j,š¬‰'â‰ôÎ~_|?ŠˆH–­F’£©IDATÛÖ?ûðµ]Kq4ÏÑÒ¼Ž›”>ôÿŠ]Ôè½ÎÑpºN‘¤ñd²*ñâ™Ë¯”êûQDDÝ3züß¾êïâ¾8èdhºcš¦§Š>MQ? :°ùO§pµÏƒ ñœô4ùß]X·n ™@G’ fg}ŸˆH¢ö6M·\qì~Ç®vd2ÔÔДâT[·|ä»BO}¾eSW×O&ªê†f'©Àú”ˆ*‰iX–e‹0Õ5£M³8z*;I}õ£[¾ò¹œOŸ0³ÈõÆ“‰h²:9xH<‘Ì——¬O‰¨’˜nÇ×±£ñøðª„®¨œ~ÖSãŠíˆŸ'žú˼KÛó¬Ò|Ùï²KIDAT?“ƒ‡$Ë‹ò¯/•óz}¬O‰¨’ÔV©€Z5¦aÅ1ñ³M³k«Ô6ÍŽG<ÓU‚ÃÇw<õ˜6â*lÛvQ/ÆD`»¨÷lCQëC±hÚÉ`†æ¼ÐTWëSÞß”ˆÊB›fÇ1ÝrƒaZ[¥úa*†ÅÄ~†zј¸¿‰SÓ†(]¨Žã)ÓH£QÅ´½h´##ÅýNrÞõ¤«÷7ežQ‰‰cúµUªø‚©n¹bØÑ6ÍVÕˆΞ]Ĩÿ3$U‚•©ãxqu1®'ÝÕûG1O‰¨”B‘?Û4[ «jú'¬ÙKðcTDj¶`5ŠL‰ê¤¬O‰¨Ÿ¹‰À'ÑzfIDATÕ¤üÊTä¬`Ûnáú{kP¨çT”¨¡žSÖ§DTñ‚×6 Ö§þî¿m§'(¾> U©¬O‰¨Ÿ –¥Èê?ñZ|ÿ)»ÿ¬O‰¨ß ]{?Øê÷™úý§¶í²ÿ”ˆ(·P}:%n-vömÛe}JD”Wö½¡Ä€_™¢+õiáS¦BYŸQ¿’ÝêÇe¨Põ“™œ *|0 ¬O‰¨ßËî?õw烇øE‰êOŸ­ðÉR`}JDý˜ÈG!ØÜ1êw¤†æ îìƒõ) (Áý÷`ÿiðp“ØÍè?ýxõ…*ÓÖ§{¬yÉ’¥ÅÏIDDA{äéüù–ªDD•h²:wGIDATõêüá=òtã†.ß-€ˆˆöŸÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’#×ÍòxaùòN§™?ÿB~i•ˆ¦.ä)€÷Þ]YàÙo¼¾g!"ª`]ËS¿üÕÝùžjÙýYÏÓ‰†Æ Öç^ECãùž-~9Ò&]_®‹ˆºDNÿ©¢ä½äªHº|¥ÓՔ閔³àö´m'êò´@˜Ryb…KÔº¼¿@QÏóüáî­Ø/‘Äg;ô0ç”ùæÅžûûÙKN\~v/?AÎìÅf/0{â`ûC .0¦À/j UÓIDAT¤ÛKð··ÀFe7•ˆŠÔi=Ù4)¿±ÂÍè›_~}‰û? &6Œ©êW]~Ýê?,0š2ø°·õèø~v[;ݘ%K–Їnh±Eþ:ò}h;-RŸ~²?Þ¯§‚³dOæ/*ôl¾‘§N Î’½ê®.§Hù¶1¸|c;]]ÎÆÐ|ø § þ NPø7ÜÕ׫@ ´9»mù&.ü‹íô]ÔŸþ<ˆd@Ö§ÞÏVñ­*¿zõ«±à@pJâÐŒ½ªûyêo-2m ްqæì ÞžeiŒIDAT4%ßo*gåßKÅl¶œÑN߸9?i9C¼˜1ù–_`®ÐºBóHºì"×µÓÕuµ î´{¡À‹,usnZpšb^¯N圫@˜†Û¥W6ßêúìO½ M¾®*'”¡Ú+XŸõA†ô¨>ÍÞÈP‹C#B›”ó7#r¹'íDI»G»:}¾úº'ÍÈùïÉsêÎÖœzïÕ ­=g©XÌŸØ| ˜ý°Ó6tc‚ U òñcG<ôëYdêÜ>¾ë]/žÏ*`{¸´ ½{U7J¶Ð(²J’¾oXñ Ìn|÷–S*ùŠÇ.3T{ø-óZ÷›š´Û‚ei¨Då× 0wIDATË—‡B9»§µÀp·õîùR¢ºìyE¨OÊWÌßü^}›Ÿƒ}üi‘[ìHl|i«°ìµ‡b±«‡=sv•JodåZ²d©8_*;ÔDbf?ڵݸa“ÒU0jý1~Â/p•o¸{ºVŸûŒE[ý‡È´>çþÈ`)ž=KUß÷Qø½›½óš,»·14&_dnIŽÑàÑ’œ³ÆÓdÿ6 lcp ÷QÞ5îÞß§|¿„|KëÒo¦˜Nðnê)r®|oËo¶œËï^#Ë\0ì©1óMàŸ |¶ÀdÅÌI'( \çooxøáåË_XyÝ/-Oo¼ñúvM0"*O•§}|rQ•§ìT%ªD]½/S¥¨ì<%¢ŠsíÕœGT¹˜§DÔ§úñ Šèõ¤‰ˆ¤cžÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆ,mƒ“IDATHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS"ùž¸¡IDAT"9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰¾JCIDATˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%=NgIDAT"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’C >xaùòRõ@ÏIDATµƒˆ¨Òí‘§óç_XªvU¢Õ«oð‡÷ÈÓ6õycˆˆú öŸÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆä`žÉÁ<%"’Cí|êÆ—º ½ëÚ«/ýå¯î.u+z×µW_zÕÕ7Ç44N(Ucú̆õŸ„wrèU·yZJ-»?ë|¢ÊôÐ#/а!žçõqKú̵W_zû¯ïÉ?_團§%Ö´[)uzÝ@ØÆ~™/…“e¾ÊÙ˜§D½‚ù2ñx‘ÌS""9˜§Ôa › øR }ü{`ÿi¿|'…Np©┡[uIDAT†fsfÏöúÃÎXä”e+ÖÖÐ8!çë˜o|ÅéïXæiÿ‘ý¹òVôGnbÃxÿN<ÁáâçòUVÎæ{5 OV¡*ú-êcžöâ{1oG¿Fmh ÊéÍ=þ…K–, … #^1>˜’þð’%K¨mýéC5o/Jvç¿X¡—2ç+[ž ”Þb ´EÈÿ.íV3O+[á$Í~o…*Öœïãò S_°Ø‰)¾“#¢V¤¤ÿS<å߬7T¥Š r¦m¹É·ÿ›s·£_îdoBá7pá_H`žV°Nß1Ùï­N»çËð³7göìP‰ê×§ÈDm0LýÍ×3 ¦©{t»IDATZΑÚÕ¢ _»êÆÑ¤ÒˆcžV0ï¯ÈOQè¯we–áÇ2ø%q¿öÌž¦ÈÞU¯¿øYÊ\ðïe¾|ÝPÌÛ5[i·yZÙzãST†‘*JÔà‚~o©(¦Þ &)ò×°*ÔÁZ)zã-Çý}ê¦Ðq _¨ÿ4ûÃê¡+·Hõ³5¸Û>±a¼¿×ïO“} «¿&i}Ê)ûP[1Boà|ïç>Ã<í?Š9½&{dÎùfïcÁ4ôs04ìw†Š|ô‡sæfíàç{¥²_£ìñ9'+…ߜȳQ…ßö}¼íÌS*kÁìË7œï©œ¹YaJŠß7%"’ƒyJr,î˼IDATD$ó”ˆHöŸÉ×¥›dP¿Á<-¥ð©ÛríÕ—–º }m¾Ê91OKf |êÂ6fËyǺ~l`¾Ê91OK¦È;ÐRe©”“=%â;ÙÇãQDDr0O‰ˆä`žÉÁ<%"’ƒyJD$ó”ˆHæ)‘ÌS""9˜§DDr0O‰ˆäØãû¦·üìîRµƒˆ¨Òuäéì93JØ"¢J—ÎÓ3Ïìä.»DDT˜²`Áõ¥nQðÿTÿ®¸£÷KIEND®B`‚checkout-from-svn-method-project.png000066400000000000000000000350351203611042400353760ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images‰PNG  IHDRÅŸ¡¶^B pHYsÄÄ•+tIMEÕ /00©â}tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝyœå?ðouWs0Ìp_ãÌ€ xÄ[•€ƒŠ&F£’x h0bVãËcCw£°F“ènLÖ˜¨Dñ·k’ÕxÄ0b•'ñˆ'   Ç0W×]õûã鮩©««{žéî™ù¼_¾°¦ú©§žªêþôSGW –e‘Ãe—Ý@Áw.sþ)ØyÊ’tjKÓˆu£G)CӉݻwuuu~¼q39R5›§—]vÃ!_8øøYGxà>DÇËØP€ g½ýö'/¬}õÍ g‘*X–Å´õÄc¦ï;)Ó#©ªÖ#™ŒTîT¢êꪚªx2™¨®©úàÃT]ʽIDATOÛþ²žEªHD--,L·¶k×nYUÕÎΞr7 rÕÕÕ$“É1£ÓÓ÷DtLg×^"/¾¾õ„¾<û »vu}þy{Ow$iån*@¥«ªJÔÔÖŒ×0f̈¿>¿¡í¹çD"š0iÔ®][>ù¼½ÝRF6íØ:õ¡•…NõñÙ ›ÇOéêR»ºTEV‰¬ “F‘È^îéé‘$-Nrn,@¥Ú¶ûÓ©­|¿£»[šsÂÔ‘#Ó$`‘Å&µˆˆ^zqͺuk^yõ¥³Î:në©cÆŒ#¢'Ÿ|èwþ¾dÉÒ⻟“GœÅÊû—ŸuÖùç|ó¢¨ÿÅÜj¹lñ5­­§ÑÝ÷Üþì³OÜû»‡«ªª%)sñ·Î<é¤Ó¾}É•çœ;ï–ŸÿWSÓT{ÚsÎGDøýªè³óÙ〒ÃA´Ê`Y$‘eY ‚•Ý6†fR’H'#žÐU›·Íkš¼â›ß`.úãÿ²0%"UWâq"Í$¢X°ò]S³üWé¤xüœytȳÏ>a*=éú‘;>ï ¢#=bdušˆ¾ÿƒúÝ]¨mí¬¤ ÅÇ'¹2à{­BY¹Þ£}êžtM,‘DŒØ¶k®š|ۯȎԳæ/úÓƒv˜n»æ*"2•{AIDATËP,K׉HŒÇÉ"K°È²b‚@ÙþiŒÒé”E$äf“ M¬NJ$@b"V;"±ïŒ1š¦)*ûOUUMQµx<žãÄ"š,"áo¯¼øÊß^úùOnUß YÖìOMÇâY !f/VBì.B&ÿÙOÿ•ˆþù»ß“<Ýõ_Þv7^·,Í2ûÙH¯ûîû-±Õò¯×Ý$ ‚E4cú~D´s×Î §ttì&¢éÓ¦ÛŸ¿åwÿçw¯XRSWç¬'zÃð9®øV«¹ƒ@dÙG""à !fY1"ƒˆ¶^yå”Ûo§\¤ÚaºõÊ+{ë2M2 "ÊõA)!ÆY‰D‹ÅD18:¾lIDATnQ®LVŒbï&Ó”MÓ4-Ó4âFªÊH$Í”¡ë¦idš¢avX–(ö’Èzíµÿ#¢æ¦+F qŠkDDB<–½ë¡Gÿ¸üž;NýÊ |käÈ"úë_Ûn½e-ùþ _þr++¶aÃk/¼°æé§=õ+gœqÆ7&On´—%.ÆÙ$ÿyûŠ––i¾“í´ÙDôøÏ;‡ÙÍ;}6{Éæz)Nq6fÉ÷oxë­7.¿üZßv~í´Ù7Ý|kç%ß¾â¸ãf¯[÷ü=w÷Y:Û©_9ãé§]³¶íØÙ­»4£qŸ&"úh㇇zø¦ÍÑäIf.0ç|ùÑùIDATÄ'ŸüÓ^âÌþ¸ý²6|–ËÛ °Î¢•ÛY¹î*i¦•´4Ãq&ió•—7Ýþ"²Ãtó•—;k,]3-"Ÿ=Æ)Äb1by(Þ·×c‘öÅíŸýy»Ò%k²¢ddE’TI–3’’‘匤H²,Éj2›?ë[½¼’ðôSQýÈ+às?wÎI³fpáÅóêê^´ø¹çÿrë-Ë~ùwÖÕÔ,ú΢ ÌšsÒ›o¾ú/×]³lé-W_þ½gžy¬c÷îæÆ»†^Xsë-Ëþë×÷NݧååWÖ³á”(.úÎ#ªjŽüâqvɤIFB´‡ŸzzÝWN=Žì$–IDATˆV=ö<9^" |iê䦙ûØK¯¾ä;£¹îšßÜqïÅ .9gÁé÷Ü}Çïxâäæ³àô8 ß½r‰éXð³Î:oïîÝ?½uÙio¿yÆYçÚßçwñò{î8û¬sï¹ûŽóϽˆˆ¬xvîsfµÞ÷?+yä¿~öyv=ñxà)D7=Ô €P(wއ¬l`Ù[ÆÔ-¡ï‡ÅÙ3×4yùi§;_5õláxvïœKˆÛÇO…¸Lˆ »{Ÿ@†a½uŸ–xUjÕŸŸ "6LDO?óè±ÇÍâ½ß )G3œÃbM:(–œ/Mm™¯J D^å3#VfZcv$5ÔŒ`K÷ÄS\uå÷ÉÞKʦ¶´\wݲ'øÎ»ýÄS,¿óþiûÎ ¢#Ž8êîýøÃˆèƒ%DÑÑÎó\tóM×;Îw)ò@רXÔ ÐÛçËÆ©ëXêšF‰DÂ0È"SˆÑwž~ÜSÊíøÿöÔ¯QÌ2I Ý"]Óˆ(™ŒÛ±Ç5·¿Ÿ¿ž- IDATœÇŒ¤0koû«ïù¿m{3²*IrF’3²’‘I’eE‘MVÔºlNRl¶glqÆÙ>ú%»¥vÔššþâ‹%¢y§gw·_Z¿ŽLóñÇÿÄþL¦DDŽª6núˆˆ>xÿGutLŒ³É‰(™³“F"Ý›bÎf »›×÷%V³ïŒ\eÚÕ¹»íæ+ÙÝ|E•UUô/3un뉤˜íY– БGýè£}¼ñ£ÃŽ>aIFÑq±XL^yokF’%Y‘dUVTEÑ=vê¢ ¿ÜÜ4Ö>&Áš=gΜYÇÏ~ò™G÷?xÿ‘õ#~ø¡êêêyóNu.[2ÕÛ¼à‚…k×®ycÃkǯXq×Yg}cÖ¬ÙöÈ“¾ròÃ?4f̘Y³²Øú‘ ç.X°þo/­¼Å~3gΟÿ͵k×|¼ñ£êö4zò×RUÉd*1þ9>ø‡½í£Û9ßÙ³Oxþùç\mpq½Äþô‘ï$AëV=ýÑG^~ù•{öì!¢-¹AS4VàÇ?þ·o¼þšï.!¢tîг†Ò“¿IDAT#Ž<òºën¸ùæeá-€‚³K*d¿ç,"’uSÈ¢ø /·ÙaúîÅß¶û#ï^üí™÷ÞMD«6o›?£eÙO0ŒìÔdö€ž@diªAöõ§©”è¸6Ë"R3Æfz¨Jœ[—>lÿ +ýÛ&INÄi¿ƒ§ÌšµßÉ'8iBCî0/Qöš~J%núÉÏžxüñZ%¢ï|çŠO˜ghFum•½0©Toü¬;ÿëž{ï]ñÒúuߘNó”©–a²‘?öØþõšsÎ9ïø/-¶ŒÞS;UUéþè_¾úÕ“Ÿyꉅ_|óM·üÓU‹ˆèW¿üÍþSQ_›J%Ï9aú€IDAT?ÿ‚íŸm?ç¯/]úç|¯ºêÚçŸnÞé³ß~ûƒ ïlžýç‰'žä‘ï$AÃÇüŽíÛ?üÀN˜ûë_ÿvú>3Go`fΜIDMMSÆÖûΈ,¸`ûgŸy›Gî*º§• ï%R}Ó•t‹,ÓZvL¶Óöö…»¦~û‹¼ÿ^"ZvÌlÝ´ŒÜ´©d"w¥¨`h*±ûIÉ¢ºúz6›ìÏrNyšàøÙ£…‰È2 ³§KÚùÙn"j3rÄÈvfæ£w7Ñ´™M®a©GîhïêéÊÔ5Œ5v$»Ó•Ô#wwe:Û»ì‘ÎI4Uûä£OÇN‰ÝfIDAT]W_ÛÝÙ³cÛ."šØ8ÎnUQ÷ììèéÊŒ8šµ„M¨*ê–?³ÿtrÖïý“ˆ¼3 Z"ï´DdFWGÏîí5#ªëêkß1²¤lÛ´}ró»ê[Þ{G­§ˆðI®øV«öçÁN*úËéó÷kždjZ,âb,ßGÆ´È2tÓ4c‰Ä{›>=ñ±ÿµ²soÇ-·®/¾þ‡?¸dô˜ÑD¹ŽfvŽ‚•{\_n.,J{V ìU\– –帬 eyZ~víI³ŒëÉy_Ÿ2q<UÅÌX"Ò‘4SÓ$3FD[?Ûñ•g¡\—rÏÎÝ?ûù="Åâ”&tzIDATH&ú^Q`÷BÙé0Öqg¶Û¿„íó–ÉO…²Ãç¸àÃP ì_š:µÄþ·ýsu¸¤FéfX½6e/^̆"ûÅRöøi"gsÌã';UÉÊùìý!w¾ŒH°úô^³¡‹ÏrùYø(Wl†ò³÷žÙ_ë Z”¹bIõ·nÿ¼!tjºÑž¹b‰˜YRZõþ~¿®~”ˆ›óÀ0óõ“{„–Tßq«=FÈ]þD¡ÝÂÌK¾~òaÎØ¬«Ï=?*•LlÛºuÀÚ P¡N™}Íþ]ÊŠâŒÍÑcÆ‘}?é¼ÿ9—Æ CÇ9óôÃÞ߸qgYÛ0p»øIDAT(µ´Œ=îØƒˆå©˜ëÆ´¿öîw.+wÃ`Hª'§»%]ÕÉ0¬ÿð'‡>SLˆòü(p±cTÕ­¤è¾xy G·¤‘¤ôv¶“¢ êVUªÏ£9?Õ`(‘5“õIY˜Æã‚ª[ìߤ(FŸÃ蟸ɚ©ç~1åì–F6FÑ?ÈCÖL;Lín©-¼Š< Ê%)ÙaÊÄã½ç\ýSçK„< "–¤ä S"rvBÑ?Ô-él?ˆéº©êÙ0µ³ýS€üdÍŘ®›µU";o³³r`û§‚ BïBÆ¥€â8»¥”»Pß©íœiõIDATˆþižë¥\‘g•ö·cÞÀÍÛ6Ix1»Ú/Tv¨Tcì_ö§+L)¸*)fU*&)faýS;›l¥ìQzçN~ }Þ‰±Ï>%=}ËR?r¼cBÆÕSè|½Ú#C*tv`]e ƒ+Lï }fÀŸ:wApu]=Ê ñÞ#N»Þv%v¢ o$ jöµ¥ì$>Ò9¥8~¢èt…rª*”sv,4Ù·‚³€ýjiš™-/IŸ¼Tšyõ‘BDDjÕ¤Ôôùä×9¥¢ŽŸòÿý~¡=»Ò'—o í>i‰#ˆH­š4ñðs¹TÕ-éìâ'ö8 ´ûIDAT§®ëDdèFvF†ED–ªÈ{7TÉ;’¢˜‘ad»Ÿñxonòüý~”¬´úâR'_AmsŽÄþ>À`Äb´[ÒC#"]× Ý`aª–êèNÊrŸÃ¦Þ]þ]]ÐÙ'{¸ÿgí£Oëíxzòz¦%×£’Á¥ªÚ*‘ýkÅ‚¡‰¢ãq1NDɸŒûÄKRo/•óù};nláYTÞ5ÞUIP¤zk#Ç¡Oû¥ ÚŠ8ìà .¬ÚÓ-‘OøöOMJ²Â’²¿_Dÿ4ÏñSßXñ°ò¾ã‹›*ÊäÕ¥Pùº%]c‚¡YñKRò;lªX‰tJ•­ŽL]°IDAT„¤µ¹“û¾‘ZÄñSÜOÊo¯œ´nIïlïØÖþ¹ Æˆ¨¡~Ôè1#êG¤wìÙݽ[VÉLŠéi-cÓ~úéî{Øðôæ–ÍŸuH»ˆH5–¦}’q…éÞíÛ:vQýˆ £ëkXùBû§6U·ˆHRú\Њ<€2ëR56°cÏîµÏÿ½ªªJ’$öï&úŒˆæŸ9§»Ã|ý­2²VNÔ×5º!ˆÝ’þú†w·wÑØñãö™ lzÿÃÝí¦¦Jº™Ñ”÷ND–ªlëØõÞ‰hêŒØèú"Ú+ëc#÷OY€‘¦îÈ"O "ìnïYµêµ¤ëêêl%)(IDAT&"‘D4©e M[ÛÝÕK$3²öùö=Ù<ÕºYøäÓÏMU#¢ƒmŽ‹qI’º:ºˆHR÷ÞØ8qÜ>Õ©DJ -“TCU5S•3Š&릘¯šQÝ ÉP'ä)”_§b¼þÞûD$Kr,‘ìr¨I–eö(RM–•iÓ§Nš8V’$Eш(£èD$SÌTÜç÷ÇCc¤š”Œ¦„ûI@…HÅÌŽn¹£[Þºmçʞݱg·«Àôý&ɲÂþ{ËV"²â‰×7|ÔÑÑ­(Ú˜ÆQD¤–©jŠ¢uteÒ锬j]™ç׬'¢n#ÑÙ£tö(¦Ü­¦ªêD½·â—Óur‰…iBL‹b¤ë/Ñ?€2“,a¯d÷¥}׿òóö;ß~gãÈ‘µ'Ï=âÈÃöc#ÇN§::ºeUûû›¦7·lxç}9w.kZã4v¿£[îìQˆèƒ¦=ôÔ:"êúdûy-h7IDATëo¾Ó2Š®Q7¥ Ã$¢½’áÚµw‰ Ù#?Eÿ*¤I£/ZputedU“UmÇÎöûÿ—•df3›\±z¦SÓõ½]"J'ÅÃŽ<¨GR{$õå7>d$÷hVv¦vÿÔW2•FÿÝïôù‘‡í7¦¡FÓõ®Œ¬ê¦}¿¨iûOcYùÂËï²|œ>½%–Lɹ³IªföHjW,É*wìa5UÉ®yû®Î®¹«GVs‡\ÉÑ?õUhÿt ÎGå½yJ‰ëá8‹(åóÞT¥ˆå*Áª( E3‰èOOýí‰gÖuèôƒg6§Z ŸIDATÓÉ5k7¼õág¬@,]«Y麡î;ùéU´}WçvêQ“îê‘>p*+–Q´êTbnvõd¯?)™„ žòÕ9÷Þ÷íé’F¨’eÅÐÍžìcø²¿Ä÷ VÖ?ENÔ"óÔ{Ͻ¢ëñN^Z9•§›àÔ.[^{kó¶=o½ÿüˆšõ,Y\6NÕzÌ ûÎ&‡~aš=+vÐÌ©” ÓŒ¢‰²²§K""Å1-æÑ_˜þPMzóöv"ÚÓ%õ¢=Ó¼ÇO“©´ïï÷}³¿o?9ªˆÇ4¸°KAßû¼“å£Ý»ìꑚ1éß®¿,U•Ζ4,":ô ûí“PÿIDATé’Ø͘4º¾ÆT"Ê(ɹ ô M3 “Ê?ç›§:çhŸã{ü”Ûþ~Ðý˜½ã]c|w}ŸBTƒï¼\ÕU}!7T ¯<¨XA3õ}ÈUHÍÎBÖ3@…èVŒ?üÇ%ï~ØþîÆíoÝIDÆ6ìß<ª¥y +`ßZßR•óæŸØzÌ 91JPöŽ7Šˆd«·kxþ…ß8³sMÞ§‘…©fÑû5_ûÝsXú‘c Ý4³[1ò?-¨ZLž:ÿòöº´wÞao !÷“vøNRÐ,\cœsÌ[yxS#Î4¤žðâ@¥É˜1"’©º±9ÝØ£h¬[JD1%£ˆé¦ µÂä:û SY3ÓV·!Ô~aæ4»[Ú[s%? êþxõçY&AЍs šÁ]ÞFâ0( aìéÍ‚¡i–@aj© Q‚7UÅÙ-%¢Sd‰æ S"’…ZÊíãçîÕoȺE®?ðþ©¯Rv‹Š¨sPÄPÞFuZ5Y7{Ôlz:ÃTíd²b²0e§žœaS2!)Äcºª ñ˜ª›†Þûc|ͰqÁÐÙÕÙÙ'"!žŠ¦4@Ï‹öýÀD Õ«ŽÂwÛû¿ƒb%À°²yûŽýúWI±È+âUÝÌÖ„ºßIDAT_(G7,"ÚÙ¾k☱1R-U’)KUôx­ht‘b%ì®Ç ñTHÍÅä©÷b)ïU{Ø5Þ5Æ{âÈY&èÐjÐù¨ !͈8 ç˜âÚ“·XÞuå*i‰ÒÚðå(¯S¾8û }÷uŽ1u!&Z¾ÿê¦NDšlÑó^<ç¤+vmûû'›¶pì÷œ5Fþ„­N¤²}^ö¯®”È;Uˆ"ÏGåéü´G,™wò:ƒ DiFÄY„ge”’¾3Š>Ӡር ™ ¼F7ÔŒn˜á/kf:stKº`hm«o|óåGX™ÕÝÈÖýé<":âè…‡s©·*ÅJ¤ý+)f‹žIDAT,™2UÅùoU*æº_ŸK,Ö3ep¿>¨PéDÌ©†¢è–`èæ›/?Ò:ë” §»ÊòÁK/üßʇ^ÂÂ1)èªeGœ"õþK¢Ö£’È®ZeÿºÂT¶biÁqoéd*|OŸAž@…²ÃT×MÁÐØÉz&No™Ñj—´LÕÌ|b*{èõW(ŽŽ0íC•eJ§UYN:þ%"{€Ø/ÒÙÄ«êð¼víxgͪí?MÓ$¢X,FDš¦Çã1 8*$Gg‡ÔÝDdj=DôâªË"ÎwÂ>§Mi9ÉÎP{Àƺ¥ÑŸw‚<€2]?樢—ÿè÷‰ÈŠWùž#žVq*|IDAT3û°ˆõh²¢r&ž®&]#1Á†“é4Å’©¸˜ß y e&$G×ûb!S<àúÛ2U!^͆£Wµs‡hÈ"bÿÆÅD<]MD±d*™Êîì—â÷Q¼lß±ñ釮-t*Á,CÊþaõ>¤ôÁÿµª û,Û|& N–¤Étº*³’¹Û¯”ë÷QÅ™0å¨o]õwvŸtR$ÙPUÕÙ1MÖdd¢m<“ˆLéSg%–‘-sÈÑÿ]À¼e…Ò)êMÒÎì,Ñï÷8êé–dÍdçîwíé¡\†ª²â*É~Aµý³Leë¥O?ÛZè|“éTUý(o’2èŸÀZ&¥IDAT`¢*š¦é,LeIé–t"2äŒ7Im Žh[ûŒïKSgGœo2Ч«Óu#“©tP^¢ ƒ‰jöþ8:žLŽ©JÉ’BUuÙW-1)èöû÷”ÓX[ß«JƒþM×L š•aß_Ê÷~}èŸÀ`R[%‰5DD5ª¢%S öo·¤×V‰Ý’žŒYª)8‡‰H04öÄS{€ˆT’"éºnR#ݤKW±Á‹ªžvf¨ï¦ íŸâù¦Pº%=™JÈšé ÓÚ*ÑS6Ì ÛjÅìù&,LULG7Ñ$Ñ0,Áqi<.¨º÷f${Þ‰ïSO }¾)òÊŒ¹-UêIDATÓ¯­ÙLeÍdÃvŒvKº(ÆØ°wr£ö¿.ñ¸à왆•ûŒ ¹Ÿt¡ÏBž@9¹n"Åþí–t6,ŠÙ‰ˆ«·;FY¤z9{£”ë¢ÚRôO`ˆ`¹IŽ»IÙ=S–³Œ®›áýSê¬N®#§¬‹ê:rŠþ) zÎ{›:û§öî¿®g Dz©èŸÀçì–’çø)‹×èÇO‰üŸú§0ä¹î½ï<~j3µŸêº‰ã§þ\ýS×É(öøh¶³¯ë&ú§¼Ï†bvÏ” 韆_2åúýSR¼ÇOí¸tuTíä¥\Î:…ŸŒ"ôO`Èó?µ*'n·IDATwç§øYÕ.ï~±¡ CËGÆyüÔ¹;ÏbÔ>êšÊɹ³OèŸÀ°âÜw?užnb»ùÎýì_;^m®žiû§}æ¼bÅÊèS€SŸ<]´ha¹Ú0­_ƒ=Ü'O7o*øiÀàø)ÈS>§| Oø@žð<ày Àò€ä)ÈS>§|ô7O›[¹´£\õóõ@´¶¹¥1¨Zïø¯®2n€ ä÷ðªPÎЦ[¸6f 4·4V~S}9 -w¥aå¯"€ WXžŠ`‚ˆØ¦Ä6ी< úàÙ–ôkáIDATÝûÕ"Æx D¯ßn˜wÀUI¡ó*nÑBàm³«ÙÞVEiyÈŽ¿svy£ÓYÌÛÂ]„2±¿ïåýÔ4†Â%zýE4Òwò"fq'=b›}Ççm¹k8èÕˆë*¼X”Õ0lqÈÓâx³ŒK…ýÙÎÛÎ o; ýâ‰>£JX^€JPž<õîÞ–ÏdÞv– Ó£(Y*dy*A×K¹Ž õ_øÑØ‚ê±?Ò%ûx‡´“ûŠê´¤¢– Œ 럆Ÿ”ð–qfœsLÞÛ}Öî ‡Lž·æ(‹æ,i ŸÐÛÈ‚<¤ªÚò*(%ÑK "añâëïøÍ =ÔÖe›IDAT¶zíu?º´ÜíLnþé]­sg}vë—/ÃïMø@žð<ày Àò€ä)ÈS>Šÿ½éê¶6{xnk+Æ bÅä)KÒ·6¬uGªÀpVðþþê¶¶·6¬}kÃÚ«®¾Áþijž½’"æ[è$À¬nk¸µWâí‚·A?a¨"Ÿ^uõ ®?—.½>¤<ûH;?ØÑÃ×VÄ$öÜ‹›p Dl ¯6¯nk›ÛÚºhѦæ)´ Ú.ýÿ*-èkÛ9mÑ‹ï}÷F™¤èbAmfÃý߈EŽ ¯Âö÷YçÔ¦Lû^hKSsãæM[½SLªrâIDATÍmm-ïVljžâmXY°U¥1¼Úl×}Ö§¸6ô§ÙÎi‹®gÑ¢…l`ÅŠ•QŽkõs+µ¹©yJ%lD2à÷?µÃÔõX±b%°ßöoÈ»B×,œÅœìa6»ð ƒæe¼kîö|½ms ‡Ì=J›ƒþtNh×ãm•k¼«ýAKAÁ½$ß•ïœÜ®ÙÛÎ3œÎUåc[´h¡7ƒÞ0Þ'g¨±:n+‡Z¾ å»Åaà”â~Ò¾_§®/|gÖ;ÆæMgï„äùJwÎÎÙ’ð9†” Yg“Øç„l.¾/y—×ÛfWo%¾í±Ç# ì©Ø€w…,…k»¶ŽPÿoIDAT¬«*çä¾[Ä·N×{ƹyß9äý ã2p[ynk«³°+»ÉÑKu®+ïBµ0d¡ ŸÊö¼êû…O}¿B½rrćëîÍ‚ðÙÙ¼sôí˜xKºªòÍnïÇÒ5aÞåõm³«Œï²‡Œ Z/çRDijˆ µêjgxΗÂß9®JìHr¶Çµ8v#ƒÙÛ)Эì,4áæM[]{®iƒZ§°Jj 9»6eoŒ­2[U„ ÙÊPÎ<-çùý! Ðƒ‰ò1s^²SöÆØ*³UE¨­ ¥‡<í¯B?6ò1«f¸Tf«Š0d +w†ä)ÈS>§| Oø@žð<à£à<-ôÆ´z#Û»ójÇö¢{ú®îÇ“BÑbr4Ø—z°·¿B–§®»á®ŽöP¸«=Ӡʽã‹nFÚïZ9wƒ¥ðùTlµß#§ jy “ïd'—Ÿ´IDATô‘!J¶qƒZÒŸLtÝ´ŠSpÿÔþ!ý©[´haé·„ë&畬,팾~|‹±­¼Ùq×÷ T\–È;2ʲWÈʱ›ÚÏöTÈâ ^üÞÔûh ;[ç†>ÈwZWÍÎIò>ƒÈ[‰÷¦pA·P º}\ÈC„ò>°(ün„E?ûÈÛf×âÜ󋼜ÊÛÚc,! ë[¡ïú ÚÄ…¾—‚VZÐ}ÄbãFÙ|y«rŽq½WC>2®Y;WÑÜBnU ¾ ûý~Þ{šQð“ C¦ë¸µø\¿@mö{<Žó»Ôûªo3\·1w½u¼·Âô]"ßJBžÙÏgùNè\îÏ/"Ï#§™)¯%IDATò®=ïýá½…ÃÇ5 Ê:wÞ>ÑwU¸jhò{ª•ïzKS?6nÈæ‹R•w;ú6ÕU­k%D¼W!D7 ÷CñÞçÑþêó½K¹ó ¹)wÏ]ï·¨³Lx AÍð–ôÞ£×÷[ÚUUÞÙyoû±ª·²kÂ~~‘ïÈÖ†ß!4h½ù¾|—×[›o#½-t¦kÍmåðÆpÙ¸á犲øA«.(%3 ÿ)®¹à=S4gž|ü´è=‚¹­­ØTÅ)tÕ±m„µ=H•æ“âš Þ3\y> \§| Oø@žð<à£øß›†ßw`¸)&OY’¾µa­k¦ŽIDATÙü“û®ãhQ„”/¢¶B•åòƒÏÑ;SW,ô½•÷.—T¾‚÷÷ç¶¶ÖÕO¡¾ZWßHÁ7OŒòys–q~ª½“¸>íáºÊxëq :â!çO‚!Êòú¶9¯ð©BÚ“·ÂðI"ž} Ù4Ôw©£· r|~›ïJ†›"Ž? ŸÓ,ÃgIa8sÞŸ¿øóQÃ6Cû0„áþRýRh8«0V @ÈS^§| Oø@žð<ày Àò€ä)ÈS>§| Oø(ÛóN*Ùê¶¶r7ÂD:})!Oý½µam¹›ãÙùAIDATþ–.½¾ÜMð‡< d?*JÈAÊ ÇOø@žð<-ölmŠÏÓæ–Fû¿è“]Ì5£?üRè«”³€Á¢_磜±Œòp‹Áû ˲ˆH6àÅóü>KU;[]þu>ÇØûLàÂ6ßçÂûNH~ONöiÑϲÕù¯k¼]ÒÁe€¡ŠóõRÎ0uÅ–pÞ—¼¹=æ¼áèj€w¼2žŒ®„2 jýÊSo/bN}ôÓ¾ý9zÛÏT-4¦CŸã§%›ÐÅÕë,ÍL‹æ:2CL™¯—*¢£j7èÿLK|‘å"µÄ3€$š79IDATҨߛ:SÏ÷´’ó%×賓(s)º=ýWPJ¢— 0TŸ§ÞTŠ~N©ˆic‚†ÉïHnȱÝBƒÕ‚®@ ù“ ‡L CCéö÷yU¨L¥ËS„) m¸_Ÿ¿¥K¯¯Ø{‚@eBžúX´ha¹›ƒòÔG>G*î×Àò€ä)ÈS>§| Oø@žð<ày Àò€ä)ÈS>§| Oø@žð<ày Àò€ä)ÈS>§| Oø@žð<ày Àò¡ W‹IDAT€ä)ÈS>§| Oø@žð<ày Àò€ä)ÈS>§| Oø@žð<ày Àò€ä)ÈS>§| Oø@žð<ày Àò€ä)ÈS>§| Oø@žð<ày Àò€ä)ÈS>§| Oø@žð<ày Àò€ä)ÈS>§| Oø@žð<ày Àò€ä)Èâ§LÀIDATS>§| Oø@žð<ày Àò€ä)ÈS>§| Oø@žð<ày Àò€ä)ÈS>§| Oø@žð<ày Àò€ä)ÈS>§| Oø@žð<ày Àò€ä)ÈS>§| Oø@žð<ày Àò€ä)ÈS>§| Oø@žð<ày Àò€ä)ÈS>§| žãWIDATOø@žð<ày Àò€ä)ÈS>§| Oø@žð<ày Àò€ä)ÈS>§| Oø@žð<ày Àò€ä)ÈS>§| Oø@žð<ày À‡èücu[[¹Ú0ØõÉÓE‹–«ƒÑúõ7ØÃ}òtó¦­%o Àã§| Oø@žð<ày Àò€ä)ÈS>§| OøóÑÔ<¥ÜMX×^}é/~7U¤IDATyW¹[1°®½úÒ«®¾Á9¦¹¥±\)™M·8ÿïd×V‚<-§Î½[òœüÓsl`8,£‹eY%nIÉ\{õ¥·ýênïøa¸•}!Oˬ}¯Pî& ¸á°Œ.C2_“ene/ä)À€@¾ C8Àò€ä)ôÂo†Œáp™A%^8~:d9ÃqnkkÄ©šš§TÎc؇Á¾:§¹¥Ñu¥NÈ„KV,WlÚ¸%h¡†ÀÂ2ÎE¤K„<:V·µ¹rÓ~ ØŠ+£Gê6¸¢ÇÕÔ –¢% 1¸6MäéPÀº¢s[[½½KûOö’ÝiµãÕ;†ü¢¹\|û.¤UIDATevG†w°‡]}[gmÞñƒ[4o'εÈÎñÎ?+YH×› ¸–ˆúîµø–)ËR#O7g’’牊+V¬dv8Ú%Y•å¦ë÷-öÈÊÙñwò¦§¹Î—Â{sƒ"Uƒö}€x#©ˆã$•Æ»®1®E _!%€<Äœiè›}Þý}çAU6¡+7YÉŠ SßMÞ2y뤊šBÛVá‹S„"Î&•÷DòtcL =ÝäÜß·³’]W—E‹VþÁÖþ§Æ èŸdõ»#ru6#NUÞeÇõRƒÛÜÖÖE‹®nk‹x©ëx†÷=혮®ã†6{¤÷Øbæ–Fû(çVðí•øIDATV€AºP·]AÊÒQEÿtÐÛ¼i+ëuzû•®ã§s[[]ÝRçç´ö¡ÕmzQœŸ=×n»½×tÞièíÛÑÙ'_ÞSmQBÖõfð¾7J y:DØ©j÷=]'šØxïÙ'çW¤–ý(ªïIò|T|_òý8 ¢¬ñ6ÕuBÆ5&Ê:©pA‹ìûgІŽx‘ÙAž)AK…tŽ €¼pü€ä)ÈS>pü€¿‚’Cò´œ†Ã§n8,£ËµW_Zî&”Ú0Üʾ§e3>uÃa½|ŸX7„ Ï­ì yZ6Ÿ@ ƒË`¹Ø“#¼“m8Àò€]·`IDATä)ÈS>§| Oø@žð<ày Àò€>¿7½ù§w•«ƒ]ož¶ÎUÆv vÙ<=ûìJ|’%À ",^|}¹Û0ücT‘šé1ÊIEND®B`‚checkout-from-svn-method.png000066400000000000000000000646101203611042400337330ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images‰PNG  IHDR©.ñð pHYsÄÄ•+tIMEÕ !giG€tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœìy˜Õ¹ÿ¿§ªºº{f˜…a`˜Aq‰â†qA£q%¢âŒ`\£7d17*×h½÷š\£Q¢Fñ—˜E↠1"’¸+ddXf†™^j¯óûãt×½MO3L÷ ïçá)N:Ë[ÝÓõ=ïÙŠqÎácîÜÛAAäÁÃÏ÷Ÿ¦YäopÎùÇ?ÿÄyÞ"²c·UYÚ‡†Do“ðû Û¬¸¦Aô1N\ç&„B­»­Êl œ±€ÃSjÜ tê®Í-]g¶À{f¶öý‰„öËr†¥)U,0Ø pÓ‰xwm[«éX¦ óÊ:eX}¸¬<з¦Aô2†árÛæN\vœóÿÀïn½™Ë̶]—1/0ëîû<}ý\G7LËeŽ‹,M‚è(Ù. sÕúÁÕP›¶Ç>þ²s‡ÁMÓ1LsW§µn³1xˆ2áàÚúúо´•¹ }ÀIDAT ¢wqL·Lfiö’M[L=âÉ«®°“ làòÇŠK;ø}¸ŽË9\§x&D/ ` $‰LÌl |p0¨¡µÛ • Ó2MS7LÝ05ÍX·¶#Õ¦ž<¦ª*ÆÁEV«ÞX¶rå²·Þ^uÁ—ž2íÌ!C†xñÅEüá¼ywfè^fÏ³Š…O.¸à‚Kg^tå¾(ÿäÇ2wÎÍÓ¦à‘GïõÕÅÿö™p¸LÓâW}óüÓN;û[Wß8óâé÷üü×£Gñòμx:€?þaIþÕ‘KR Ð@ZiÀ9cçœ`Œ'¾Çr¡69!÷Kùä€IDAT6m>zÄc}CœÎþÓŸ…ð0mCvàÈ€åd `p—Ñ7Mô+c’ÄdEf€˜ÖZÓÁ]×ÞÙ¦GG×--n¦i¦¦›š®kš×5k:†+;iòX@h?gûùÏ °ÿ¸éûƒ«k^ùëâ]Û·Ž1Rwœ…O.P]ê4 Ù?`/³ Þ~ûÍwÞ^}Íœ›Ò/­\ù÷…O.XøÈŸ† ÆÈ^Ô’‘Å/<ýÄ=µðYÛ2\ð˪œ4uú!‡þê«‹]#ª®Ú¾£ÀÑGUUð½ïû·¿ùcEM­¿Ý>=‹Jjƒ•Œƒ'=o ?lËbÀ£IDAT\ÂàH[o¾iÄ}¿„'ÿ̘ý—§=áßzóMƃsÛ È288ãà\"ñ'ú &! r€%XJ™ªA HƒŒbY–aЦiZ†iɲPdˆ¦/8ÀþõÖoýkÕÏrßàê‹ó)§ž’d`’We@‘²“{“ýg?ýOÿqÃwµ´.»_Üw€aC‡Ùœ[ÜÝK#Óy≇ˆå?o½KaŒãÇ`ç®õÃGvt´7vœ§ ù¿®ŸW^Yé/'ÃHsJ„!ùs`÷œp0‰s pl¹ñÆ‘÷ߤü{¿åÆ»ÊÃg6¤IDATr]8€¤¿„€"³^~`ľE I’¢ÈÉ^0p Ò3­p]Ýu]—»®#;Á°PÝ cÛ®ë:p]Åq;8W”®é. üwþ  it3—ÀÁdÈ0YJ, \ôÜŸ<úÀ™_;wÖ¬oVUÕøÇ?–Þ{Ï|ó¾wûW¿:M$ûàƒw^}ÙË/=wæ×Î=÷ÜoŒÑèY,+²Èò÷?ÖÜ<6cö¯Ÿ=À ‹—ûÃ"`ú9SÄ%”K2d3ï{·ôÑ{×]wKF;¿~ö”»î¾OØyõ·®?ñÄ)+W.ô‘=îÎã̯ûòKÏ-[±ô„)Ó8 –5Ž `ý†u‡q½ƒ+ÄIDATäÆMŸÑÐè&"S¿zê‹/þå²Ë¯ö·Sd%ÿ¥˜¤;Ň¾ƒR@86<ùm0ðd7,—«Ür|3Ÿ6ÝxÝèûà ÿ¦¯ó—Ƹm¹€¢È,1ÎÉ$‰ÄŸèO(dyOo’Ã:®eÛ_[Œˆné†× M35]kF\×㚡麦›ª*͘üÍ®Í/À^~é9ÕU5<‹F2õ´É“O¾üª5•ÕW\9çïËÿvï=óñ?W–—Ͼö2…±ÉSO{ÿý·tëÍóï¸ç;×}÷•WžïhmmjlöJxýõe÷Þ3ÿ׿z|̨æ7ßZ-ÂAE™}íeƒÂåGw¢—RuáÏÎcüIDAT/üÒË+¿v扖<¿¾K@ÖKcFŒžpÀA*¤Uo¯ÊXÑn½ùÁ¿jÖÕ3góè#üá©Å§Ÿ<}æ¬sd°nœçúnü‚ .ÙÝÚúÓ{矽æýs/¸ØkÍ\rÉU }à .~ô‘.½øJ\NÔ>uò´'~ÿسÏþù¼ /ñÊ‘å¬Ó3Saäù—ô%”ŒÉ9Ià‰–÷͸6g{þXüÿôÑ#œ}Žÿªk'ˉ^O0Îdjåý “™P8oôepþfýðŠan¹Ë]×u×qÇuÛñN]×u]7 0.Ñðÿ~jf‰ª®ªQÊ‚~ÿsL’fIDAT‡'¾yåœÿx À„qÉaÀ²e¯ž2íô7V.pÜ‘“dU9ûüÜvK{âwþþ ïýùýcF5Ëáà’¿. Â^~å¹NœÌä®vLÐg†?¬”‡²I¨ÿÒ˜æ±r8È€¿.ÉP‘H3¶1  ¦|¸»Å/={Óß ¨]Ë Ç47ßzëüÅ/<óð#¿ZüÒ³ ~rìãuÔ1O=õøçë>pø¡GHEñÙyɬ+ï¾ë¶ºº¡ï¢èaT ЋÝJ.ÿ$!ý,é°Û–…@ à8àp™àÚ—_ð„ÉÎÿ‡Îü:‰»`°9lË ª²÷Ø#ñ'úÉ>ÿ~Åì)IDATó9*›¼»ýíÏÛþ¹uw\75Mkz\7âš¡iºnºaé†ùí¹SU¥É+‹çž{ásÏ-díšöš®e¿ñÆ?L?'Ñå¾jõJ¸î /üEœª¡øŠÚ°q=€ÏÖþû˜cŽ•Yd •DvÇ „º×oF¶pªy{^%g¬(%MÚÝ9Áò=¶û¨ª©šuùUC‡ ½ó®Û~ûØC?ýÙ}’,=À»¼  aøˆ@P‘|=&UU•·Üòƒo\tv>–§ÀIüKFŽ àûÛÓéà:®ÍdàîuK^ô„ýœ9c,@Rþœ~– €Ãu=zªðº$eÿ IDAT‰~nDB K…%À‡=¢Â1ùèºòõ»:[ÛEW¿‘èê7LÝ0MÃ>~Ò˜S¦P•„ƒÉ9c8úècŸ{nÑçÖO<öÈlUª¾ÎöÉ“§®X±lÉó]£ïŽåˆÈ””‚ïÜ0ïÄ&ÿ÷}?›8ñȉG•’òøI':–ãÏ•O8‡yÞiÆŠ «å¬³Ï¹ó®ÛV­^éšv¨²¬qäH }Àкaj0à8TJcãÈß,xâš9Wvky*ô,*¨V 0Î!z5Xr9²øj\—¹®Ë9gŒÝøÚ+žð¯}µ8ŽìQ$åÿþSÎàœ;Nbj”ªÊ<1‘€Áµ³×O%ÆÛ°'IDAT‡ðûY@õ¿Å‡«Ã\sj€%IRØ[Ÿn‰kº¦šnê†iö 'Œ™}ùW›F×ych6uêÔÉ'Myñ•ç:ì ªêªgžYTVV6}ú™þ*Õ`—_~ÙeW¬X±ì½Þ©oöØc¿¹à‚oLž<Å‹<ík§?óÌ¢!C†Lžœè¨®ª¹xÖ¬ÕÿZµðÉÇœ0aÆŒ‹V¬Xöù†õeí!gžþõ`XUƒ3f>ýôww´Ç¨¿Þ)SN^¾üï)6¤rIœf¬(c–lá%K^^¿~Ýu×ÝØÖÖà‡ón· K$øñÿëÎ;o»ù†yBÉá G}ô­·Þ~÷Ý™˜!IDATós[ND˜ßÕg‰6 Û®ÂÀ!ßþæROø?¹ê[^Ûù“«¾5áñG,Ù´uÆøæùÇì8‰51¨Çn™´ÛÑŸH¬ïßÚW°àøºxM aå”ÊÐăê>÷¯šqàa#'O>ðôÓi¨¯IN¡ûû ¨ÖÜõ“Ÿ-~á…“§àÚk¯?õäéŽå”U„½*ƒÁ.Õ<é¤ÉÿúÑÇlÕê•ߘ1³iäî¸"ò…çŸÿþÞ @Xr¥@^£i®ei®`˶í_{åY$ÝŸ¶­?ûù£¤ýDA ɨ<ºõIDAT=WÁxÞ½˜+:ó·™½±÷x¼%Æÿ‰¢CšS Сðvóõï`&þkÙaÖU-0Øn®"º`" nE)ÿ=·¢HŒ÷²øu$çúÃk€'W0o €%çÍŒïÑ+h îN²SÐ×P|¼^IqƄ߿~^Ù÷¶ì¨É™;¶Ó¿~žPÄ“’3Ð~þDÿBPY=X‘©ÕJÄþÅy§O|óʸ׋aÉ%{ÈéÂįŸwÞéýÍÊêÁûÐP‚èmA5°uË–b[BÑל1å`LùmuÃð?6k‡ Í‘˜ JÄF1ÿ^»£¸vA.™hIDATô_N$í'ú í_÷ÙÚ vׂ ˆþHss݉'Zl+¢(”€R]3¤ýO~x~±í!b@1P'þF5Û´á8üÇ?øÉÄ#'(ùo¶M%ý½Aä‹'ù¦ÍU…æöýÒ~‚ ˆnˆj6ÍèêÄPfÚ<”²g"ˆÒ…þp ‚ ²¢[®ðõ…ðË23m.ŽªÂg€iòû ‚ RÑ-×Nîôçw÷'!ùä÷ýúÃ%‚èB·\Oø=w߃ü~b`@ÚO$U€'üYîšÓ—â÷û/D?‚´Ÿ Bõ‘&üüÎ=ùýÄÀ€´Ÿ ˆýš¨f‹Np (xIDATþP@²m×´Âïé:ùýÄÀƒ´Ÿ ˆýÝrE²m·"¬ˆùüž®“ßO < Ñ~ÆÛëVöJ!A…áw÷‘Ü´ÇùýĦ›5~)òÌûvÎôÆA·ˆ,¹“yÅöñíQ ˆ¡}E‘ÄQœ¦?²ûýšá†ƒ’f¸ä÷ý—\~¿§£}驧׎L­‚ ˆüñæô ¼™}jšD~?1€Ù«ñ~–$=&G|¶rzZoú©™£@Ç@JšÜFÑßI~AúÄ~÷˜ži¿¿“œ1–⎧xêÙâÓ½Ôýîâ?¹$¢_ã­Ý“ùEd§ä÷šÂ÷Œð­tIDATô-X­S{STOñW'^´`ü ¼«}cAñ/Vi›WõM]1€0à Áq3Éé÷šÞßÏ¿§sß«lF =_¿›#A0à ü¸WŠŠj¶X°'NmÛàØN¢"‡ডïþ ¬oW•ÌÂÀqn½,wi<íçO zö‡›®ó=é•2{—l¶ù#©ÏŸ ú#Bò£šÍ €mÛŽíá7núÜt]ßc˜?½ÛŸÆû‰̾m´f›Ùç…÷~ö~þyÓúôI Ÿ úœ˜átjN¯UVÄ‘ËæXŠ¢ÈŠ,+2Ufj¦áy¡úéÞ?÷˜\ÚïI&CgIDAT£Gn]Ì–>%>¥lòŸ^|CõÞ¥l¥0ô^Aý á÷Ç¢.2úý.T‘¸Ssrôù“ßO `ºïÏ(å6GúŒñ…åÊ'{JËÇ ‚ JŸ¨f+ŠÄ‹Ë¡úÈ4Ìoð@(hê< NEr’Fù§ñ~bÓûsý‚ zÊn=!¿QÍîlïØÚ¾ƒ™€šêÁµCU mok¶ê&\U m®óçýòËÖím"<®©yÓ¶­cÓušGRe&„÷Îö­»Tª¯­.é{ê÷{˜6 6 ˆÒ‡´Ÿ ˆ"1-ØÞÖºbù‡ápXÓ4q܈mfú IDATœ?5Úá¾ûÑgqÝ* ª«©­IˆwT³ßý`]k{'€ºaCGÕ×®kmït-S³Ý¸erÀ8Ü4¶vìúô½ ÆŒ—j«›ìÖíº¼ý~!ö,›:‰~i?A%Ak{lÉ’wTEŠD¢„œhh ¾®"‰I5®[;ZÚÚoE mþr‡kZ;¢IVdMÓ"šé|úÞ†áCG•A+.i¦cš–kêqÃÒmWéÎïOH¾ÍIï‰i?AŧÓpÞýt-]Ó¥€zê”#j£š½½¥ÝÔuåa)  Q_óïõMÃEÊ6·¬EuQH}Ýp[®ÃIDATÇvâºÕ‘Œ1MëíÕïLþê$ƒ\SïìŒ0Ü®AúŒãý~/€es‰Á%õ'¤ýA±Ô¾³ÍÒ>¨Jmh¨PV*|Cûcšêÿ±r'€Žè—g:–s¬O?Úlš–®8J,á‹iº®‹û`–®cÇi^§išaX↠@‡ä©óüýã÷L* ?1 ¡IªA”AÉíˆêQ}ËÖ Ÿzu{[kJ‚q6èº!þ­ýb .Þý`}GGÔ0¬!ƒ˜wMË0¬ŽH< ê¦Õ‰/_¶@Ô tƌΘáêQËqMÓFrY¿ãpÍpS&î á(ÌÔ£ëºIDATå(´ŽŸPßOD‘Ñ8Û­9'Àê·>1k>Þ°æã UU§ŸrÔÑ‘Ã׆BÁŽŽ¨nZ¾·q\Só¯Õ“óÇ6Žóù;¢zgÌpø¡c½´@dsË»ï*YqöDtÀnÍIéÞOAb‰#÷ òû ‚( j¯œu6€ŽH\7-Ý´¶ïlò[øÔ«¢šÕìñcvvD¬ùxƒ¡ëÖnhFD3G %ºáèŒjQ-X­sÄ8C· Ý~õooÆ4½£SïèÔ™ÖÁ„‹/¶è fòìe™‘êÒ~‚ ŠŒ•\@?¶¹Š"*VIDATîûß¹xæE'««¢ÑŒe«>üä“/Äþü?ÌÐí]í±-Ûwïhi{û½µBÚÇÐ@7Ü ³ZcŽnÚºi[qéØŽ‰ë[w´··E,Û¶l;fË4à ¶èAr½~ ¦¡So?1 !í'¢øìNîç_^>ᨃoýî¥×}ó,C·;:uC·ßÿh-—F¯ª¬ë¦‰ëËV½·akk$®GâúášDvƒìx§eÛ»#q!U™xô¡1ÍŒiæ›ï­è1‹'*õüþŒ¨ÁùýÄ€„´Ÿ ˆ"cgšFôćԔ[¶‰ë¦ízïå{ÐX¡ë¯¿ù‰Ðòqã„é¼IDATš%5¨'gê™–ÓÌHL×tÀ‰'L,«‘˜Þ²«3Ó#1ÝLN€ÏïÏùýÄ@e_ÍõëöÅ?}\N/V‘Oún_TÀ}õÁGAEÁ°\yé_‹_YqÌã›Ð ©ËV|ðѺm"ª°8ƒm;¶sÈ#^^‚–]-èTŠÄôÃ#’Å «,h³ÝH,±¾_2⦜qÖÔÇŸx@[D<(¬ë†c»1K¼Ã7±3ÆF€ðû%RbÀQ ö§¿‡·àrÒ³— Þ—Ná…Q‚&„ŸvÝùâ6mmûhíòAå«…x io¬¯' ¥5Ÿ“±{ÜÙm ëJ)6[!ùWáïêèöÞsÜTa•ú‹JwâÓKö—ãs&ˆ!j8üŸ«?Y×þɆ–Ï·ìP_WsPÓàæ¦‘"™Tkn—Ì8uÚ¤ñz`03v:€Î»Ü˜K/ÿÆù»ŒÕœ0ãÂIDAT(„ßâ8øÀ¦[n˜)TWÕ9¶£YnÔpºï'¿Ÿ¢ýž²"§Ød §ëVF5òGæ(![i~ÁË–¥GU¤Äøkì¶ðܦæYiŽrr éÕD©w%:Ê›BMÃض Àëç¯n(()ÏŸ&ÛT€lsý²‘ÃŒ<«ðÇfO·Éºý¬RRz1ùX›û~ ¢¸œqÜ”C8ÀãÚLRxÆ£íÚ,Xþ×9SO»~×Ö7oüâà¾ë/Áqºo ”‚‰¾q´/^åûIDAT nsÄ À¹~ÝFú•)Ï”ÝfÏQf¶ù˜‘g¹u=Ÿ”+Ê¿Òlá<­Í‘ ŠKmMymÍøôxÝrCɈj6s¬¥¯Ýùþ›ÏŠ4¯-ºSVþåG{Åá“®I/Êà ³ÄQ3\I º¦á?†ƒRÊ;|STòø‰½Ã— ˆ%üòï†Í™c»ï¿ùì´ÉgÔ—’~óg«^ÿçÂñG\-„\e¶É½Gœ¡u¡X1ŠØ@S„_çRˆuÅHjzû‰i?A%Š'ü¶í2Ç“ö…T××<~š—’»¦ßìmx÷-$…Ü'ü{`ê:B!S×Ußw_uøIDAT€€Øõ,”ØPHWJ ™Þ9@ýÒ~‚ ŠÌ®í/[r§wêº.I’X–-˲Œß3µ62[¸V ÀKææYoý¨³G6Ÿæé½ðî> ?1ð í'¢ÈÔVÈ“Ž98ÿôë×­ÀåpÆù·S§L̳K7 ÀÑãr¨ ¶% Âj(@Rƒ²BýüÄÀ„´Ÿ ˆ"ÃÔÚê¡Çõ$ÇS)çÜ5™\&Âùµs»âèqâ(+9T@Rƒj0ÑáOûúÒ~‚ ŠLËö //º¥§¹˜£qGKœpÛ‹úÿå[Tý¨YuMç ‘ª¯†Bá ÄÕ䫃h_?b€BÚODl9ãŠIDAT‘©yÌ7oúPÌäú MwLÓ䊃~¹@¶þé|®ö¥¿î$Ò~ìïzP·n D—êòë<íçO THû ‚(>±¨¦[®˜Ã¿«-†¤Þ›º‘’Rìüײí3×hK¹ôå¶-=­W ÃÕƒÓU_@~?1P!í'¢˜˜†eY¶~]3¢š ÀÑãéªïQSÔÒ¯d¼4²qJžõª¡ * UV©ÁP6m'¿Ÿ¨öQLL·kjYU‡„ƒºf \™¸Ê•Ù^@Ï8ç³–¶çªýlÇPeUY\ä½Ç/ã;|Éï'*¤ýA“а(åPn– ˆcT³¤tWIDAT+ÂJT³U‰›.ó‡0ÇârÀ`ÚPضí¢FÄH°]ÔpÛ`JMŠ„›vȯ÷_èG~?1P)ð­YA½KT³Õ`@·\¿ðW„OøEX$öôžËÓ’ÂoÚp}. Åq8ó-Ó—efÚ\–»ô\U˜wLÁ4ô@¦x‚èïöQdÄÜþа"6ñÕ-W„=Éj¶¢H"œž]H¾wLA–™ßãw®*{Ä?‡ßß·H¥i?AÅ$åe}âÕlV”Ä€h¤—àI¾ÿtü^>’®¿çè“ßOì‡öQL„ÆÃ÷Ö>Ïãmm»¹ý~ìÙð“2Ò/\ÿ”‘ÕK?(IDAT~òû‰ý Ò~‚ Љç÷{¾¾ðû½!ÛN$ÈßïOñþÉï'ˆHû ‚(~wiãý¢)ÿx?y¼ä÷D¤ýAÿ0?öï÷Æø½ñ~Ûvi¼Ÿ z Ò~‚ ŠCŠßŸ2Ñ϶]¢Ãß¶]òû ¢!í'¢8¤øýÞä>ÏãGOüþÜËüRNÉï'ösHû ‚(éãýž´§tx­$Û~rOôùý‘i?AÅ!}¼ßëÒ÷Oõ®¿—>Ü ü@~?A¤AÚOD_#´\àï÷wé É÷þSrùñwøƒü~‚ÈÒ~‚ ú¾¼ß?•Otõû'ü‹£×˜/IDATðHñøÉï'ˆnÙãWòØc ‹eAA}ÃÚ?{öŲƒ ¢?²zõíÅ6 zÌÚ¿iã–bÙAADß@ãýA±AÚOAû¤ýA±AÚOAû¤ýA±AÚOAû¤ýA±AÚOAû¤ýA±AÚOAû¤ýA±±·ÚßÔÜØ+v«üÞ­z_XÛÔܘ­Øôø>þ¸ŠøíA“ö¦ëîð?î7nø¢WÙW457–¾©ܧ–§(wéDAD¯Ð3íï"J䉸*é;%‚Øßèög †¨ØÖIDATÏ}ô®“ž ÿò=ÃÒ)…ô´®Ân-‡é6§˜nU>–çèü÷W×­Ìû“¥[˜£Ë‡Aýˆ÷ù§“®=ŠA!Ì¿üŒÌ˜½€ªóì¨ÏÓæŒñÝZžÎv5ÏÏ*w²|>F‚ ¢Äéí/ŒtÝí•÷µukg‰aº=m$å_Q)Ü/A‘?ÅÑþô.îþ¢ÝÚÙí|è3Jä~ ‚ ˆüéÁ¿”ß½'÷ì•ãÉOŸIQ;{ýƒÚúÀ’’º_‚ ¢[zæ÷çžð•žÆ¯Çþ˜näiCþýØ^CŽìÝ–œÏ­ùSz1¹3¦Ù£ÏQTŽÒº¥¶f¯IDATGŠNÞ?AD?‚Í™sÛÞ¾hÑÒ¥¯­¸õ‡×Û‚ ˆþÄÝ?ýÍ´S&_xá´ë¯›ÿÐCwÛ‚È ÚÓ— ‚ ö/Hû ‚ bÿ‚´Ÿ ‚ ö/Hû ‚ bÿ‚´Ÿ ‚ ö/Hû ‚ bÿ‚´Ÿ ‚ ö/ ßÓ÷µ¥K½ð)Ó¦õ†1AAìs Ñ~¡ú}°"%žZAQúôXû_[ºT¨þÿþâ7^ä-ß¹ÀìÙWlÚ¸%ŸB Øÿ•¶Œ-˜Ü[ï}á}ù½ÐŸÁ^B A(x¼ß/üâôŽ;nË‘¾©¹ÑûWX{CI½i&OczËfñ¬OyB)ºÍ¤=IDATÀ†‚ÍNù{ÛËrzô×»7ßr6›E¸¾D‚ ú;=óû…Óï ?c ç@eucçî/F75¦»þäjø)âGQ ßB)ØPžÙyþ1ï»Ûì§ A%Eásý„ð‹€ÿŒd{V¦¿h.Ÿ˜Œ¦¿$0ýI±ß;Ïó‰O©=¥^ÿÕ”pŽÚó±9Ûiz±­BÚ+øüög» d÷>s|øþºrØ™™r ù|n~2¾`0ÛLz ûú[Χjÿ=f»©Œß8ADáÚ¿—d›l1ŸãùødÙÞÉÛmSæ¾”QB¼¾w¯ç¶ÛÚ»½ýŒ÷ž#&c®Œ÷›û.ò,!£Íéw—O™2"zIDAT)ï,Α±[íiúnËéõo9¥í•1cîsî¿ÃÂî— ˆDáÚÏ9÷÷ùï=«H/ÖØm/E>äid‰?…S{SÔ¾ôÉm^ºpfLŸ»ý—.±¥ð-çß`"‚ðÓ3í«ønùÎ5bÈ߯ú»¿¨¬Î0ØŸ?Ý>ªr»æ=%ý¹™­v¹MýèѼ7¦Ö³]@û.}aYö2c·dëÀ(ñ6%A¥@!óüï¸ã¶ÎÝ{<ÑRNý¤ŒMæCŽô”ÖSú^’ûÑú`SûæSÍf^¶?›ô™½Û¾ÌǶŒtkÒ¾îJ!b`Óã>ÿS¦M«¬‰=õ¾²º@6§?ãÔ¤i³#ªIDATü¼ô,)ÂÜSÒ¤—ãO–mÊXîG·ͺ-3ãývk³?MÆÚ³‘ãóé6}¶O8GQyZ˜O™yþå䦰­° û–ó$Û_Bn ‚ °9sn{àÁÛ-Zºôµ·þðšüsŽné…÷¦«¿_S€ûUR[IãQšVõˆp DžÜýÓßL;eò…N»þºù=tG±Í!ˆ¼(|®ß~«÷{C‰HBï:¾½EiZU%ò-Ad£hkü}0Ël_P"f¤PšVÀ€¹‚ *ô_‚ ‚Ø¿ ¿Ÿèøç—˜;÷öbYB),}mÅÒ×V¸öÚ;Šm Adàá‡VðY©IDATçûO9ç¤ýD?C¨þ˜æÑƒUÖÖ)¶9A¥Kkë®H¤S<6ý-Ò~¢?1wîí‡å°“&uÈ!£È²\l‹‚ JÇq¬Y³ùõoÏ{»'ÿ¤ýD¿Aÿ´S'; !ÓLÓŠiN<®Û.‚ ˆR¤¬,\–U5pÈ!£Ô À“Ò~¢ßÐÜÜ(„¿eÛ®]­ºiš±bEQºTV–«ª:¤64î€`Rgd·ˆ'í'úsçÞ>íä“«*Ë?þxËŽí±hLÓ¬bEQÒìÚ¹;ìÚUÞÖ®2¨¹é€¹soè¡; ×þ×–.õÂâ?±O©o8ŒÃÙIDAT¼kWç›w´·“»OÄ~ÄÆí[Æ,ZØÓ\Ÿ_xEÓ°‘‘ˆ‰˜†n¼¾a°¸Tˆö Õÿèƒ)ñÔ ö5±XLÓ¬PH-¶!A}ÄÖÖ/Ç,ZxÉœ3yÓ0»±U€›x‹.RC”/ZÙÆíO-X¸óÊ9#jhš‹uyM=Öþ×–.ª/^ã+¸å;ט=ûŠ<7úíïÛà÷ úàëã/E ªí:Íí'b¿¢î‰çœ|¼CÇû›ÃÌ'‹üïmÎ9ÿøçŸX Ï»SDvì¶*kB"\`Ÿ¿_øÅiŽ×øbϘå%¹¥ÓnÈÓ˜ŒÉºÍ[Rwº/0lC ö ÃvIDAT°b[Aѧ8q›< ¶î¶*C<°%pÆO ¨q3Щ»6·tÙï™iØPö §?Eø•Õ»¿ÝÔ˜îúxAê{óQÐÇ(Ë<=²Š;n:ï®mk5Ët‚a^Y§ «—•úÞN‚ ˆ^Ä0\nÛ܉ˎ3cþøÝ­7s™Ù¶ë2æfÝ}€§¯Ÿëè†i¹Ìq‘å±¹Ïçùgþô—¶å“±À”dþ^8ã[Òó¬1Ÿø”ÚSêõ_M ç¨=Ýf¯ð”JÓMÊ³Š”’³rÜ`zv/qF;ó¼ëŒ·–‘a®Z?¸j`ÓöØÇ_vî0¸i:†ia|ôIDATîê´Öm6Q&\[__‘OQA¥‰cÚ¸e2K³—lÚ `úèO^u…L`—?¾P\ÚùÃïÃu\Îá:Ù ,Ú¿yNì<;½3*}Žêò´!wÊÜ—Ò^ØSÄ|î7‡øåcOî,`è!ã}åˆÏhgî»Îm!c I `bfKÈàƒƒÁ@EÐ…¬ÝV¨<`˜–išºaꆩiƺµѨ6õä1UU!00.²rXõƲ•+—½õöª .¸ô”ig2À‹/.úøãçÍ»£Û'#{™=Ï*>¹à‚ .yÑ•û¢ü7’ËÜ97O›v€G½ÿÕW?þÛg€6—•IDATá2M‹_õÍóO;íìo]}ãÌ‹§ßóó_=ÆË;óâéþø‡%ùW—Á%!úH+ 8c àœ3ŒñÄwãX.TÀ†#'ä~ɦ­ÓGxì¢oˆÓÙú³~¦mȰ\’, ®ã²ä7]Bëûýnb¶½Ûé^c·½ù§‘=*³·È]i·m AŽn˜|f$l¡Ä˜$1Y‘ ¦µÖtp×µw¶éQÅÑuK‹†i†©é¦¦ëšfÄucÍšŽ¡ÃÊNš<ÚÏÀÁ~þóì?núþàêšWþºx×ö­£FŒÔgá“ T—…:ÍBöØËì‚·ß~ó·W_¢ÄóaIDAT3ç¦ôK+Wþ}á“ >ò§aC‡q ²µddñ O?ñÄCO-|Ö¶Ìü2¤*'M~È¡‡¿úêb׈…ª«¶ïèpôGU•…|ïûßþíoþXQSë/¤G·OªSP¬D`<ééxSøa[ã GÚzóM#îû%<ù¿`Æì¿<í ÿÖ›oà0îœÛ6E–ÁÁçRRü{¦ýbß-ß¹&}È¿s÷•Õûó§[ÉÌG–ò'ÅÅDw=íþ”½BQï{½Rÿ—’cxEÏ'™ÃB&! r€%XJ™ªA HƒŒbY–aЦiZ†iɲPdˆ¦/·Ÿ+IDAT8ÀþõÖoýkÕÏrßàê‹ó)§ž’d`]oµ({õ†ë½Éþ³Ÿþ'€ÿ¸á»ZZ—Ý/î» À°¡ÃlÎ-îé<ñÄCÄÇòŸ·Þ¥0Æñã°s×Îúá#;:ZŒ;ÎÓŠüß ×Ï+¯¬ô—“¿a¤9¥µÀJ„äÏÜsrÀqÀ$Î%À°åÆGÞ?’òï ÿ–oì*Ëuá8’þŠì=á ypÜqÇm)³úsLòO÷͇é (­§eBט^iŠ„÷¨Õí„^±€$IŠ"+Š$+Ь(²"IžiÅ?¶è+Öw¾Ý¢m²åÖ`¸½¬ùõdøIDAT<:hVUm×ÖbØP¥axG¨FQdYQdE–EQ¤wÞù'€¦ÑÍ\—™¬È–[b²’X@¸è¹?wÞ´‡ü2ë”YVä•o,?ï¼iç7måËEŒ¬Èk>~ÿá¿)[¶éeàeÙüÅÆlÙELJø¼óûdL?gŠ—ÒKã]reæåZùÆò‡ü2›ç7ͳó…Å‹ÚÚw½°xQÊÝyÿÎüÚ¹–­XÊeæÊÌ”`Ih5Àú ë$™mÜô9€ ÞÃcêWO}ñÅ¿¨ŠœrûyþS‚PEQdE $~Þ1ñ³²\n9p¼›n¼NüÖ<áßtãuþà–åy¯:ØIDATrÉǦ$+Š$%~·=îó?eÚ´Êê‘ØSï+«dsúóÑ¿¥gIQ¦ÜSÒ¤—ãO–m–YîG޹iÙn!ŸûÍhs·äΕÞn Ì%Ï™}9¾ìy׫“ä=½I븖mm1"º¥F\74ÍÔt=®q]k†¦ëšnªª4cò7»6¿{ù¥çTWÕp¿^ù8eêi“'Ÿ|ùU3j*«¯¸rÎß—ÿíÞ{æÿâ®,/Ÿ}íe c“§žöþûoÿèÖ›çßqÏw®ûî+¯<ßÑÚÚÔØì•ðúëËî½gþ¯õø˜QÍo¾µZ„ƒŠ2ûÚË…Ë>îD/¥êÂSt®aIDAT (^ø¥—W~íÌ,y~9|—€¬—ÆŒ=ဃTH«Þ^•±¢Ýzóƒ<~Õ¬«gÎ:çÑGøÃS‹O?yúÌYçÈ`7Ü8ÏõÝø\²»µõ§÷Î?{Íûç^pñˆ‰¯ã’K®Zðè^pñ£pø¡GHEñÙyɬ+ï¾ë¶ºº¡ï¢¨»¹à$þ%@—’‘$wIDAT~ÆߌmYŽ—I®}ùOø‘ìüè̯¸ ›Ã¶,ª*{=Oü Ÿë·7Cûû-´ÕÁÞ I’`þ10Ge“w·¿ýyÛ?·îŽë¦¦éqMëF\34M× C7,Ý0¿=wªª4yåpàÜs/|î¹EŒn?àk¸–ýÆÿ0ýœ)"fÕê•pÝ^ø‹8UCðµaãzŸ­ý÷1Ç+)²È@¼FsÕê•pœ@¨Kqýfd §š·ç%QrÆŠRÒ¤Ý,ù‹ªª©šuùUC‡ ½ó®Û~ûØC?ýÙ}’,=À»¼  aøˆ@P‘|=&UU•·uÀoÏIDATÜòƒo\tv>–§ÀIüKFŽ àûÛÓéà:®ÍdàîuK^ô„ýœ9c,@Rþœ~– €Ãu=zªðº$i¯µŸ@ÏǶ÷+áïõ›•%ÈŠÂó`Á8ìŽÉGו¯ßÕÙÚ.ºúDW¿aê†iöñ“Æœ2퀪$LÎÃÑGûÜs‹>ß°~â±Gf«Nõu¶Ožáæy§+*¬–³Î>çλn[µz¥kڡʲƑ#,xôC놩Á€7p(Jhlù›O\3ç¡~ëIDATÊn-O…¤¿ X)À8‡èÕd`ÉåÈâ«q]æº.çœ1vãk¯x¿vöÕâ8þ±G‘”ÿûO9ƒsî8‰‚ª*s0±~nb‰ i?Ño$Pýoñáê°×œàDI’öÖ§[⚮醦›ºa†} cf_þÕ¦ÑuÞ€M:uòIS^|幃;¨ªºê™g•••MŸ~¦¿:5Øå—_vÙ+V,{ïƒwê‡=öØo.¸à“'Oñ"OûÚéÏ<³hÈ!“'':ª«j.ž5kõ¿V-|ò±'L˜1ã¢+–}¾a}Y{À™§=VÕ``ÆŒ™O?ýÇÝíq'ê¨< dIDAT¯wÊ”“—/ÿ{Š )¤\§+ʘ%[xÉ’—ׯ_wÝu7¶µµøá¼Û-à ~üãÿºóÎÛn¾a€PrøÀ_ÂQG}ë­·ß}÷üÜ–‘æwõY¢MÆè¶«0pÈ·¿¹ÔþO®ú–×vþäªoMxüK6m1¾yþq';NbÄ_M ê1€[f í'ú cÁ â[ûÊ_¯‰!¬œRšxPýÂçþµQÓ2ËöiøÍóNO=õ´ôŠ2fÉ>餓¶·´yä!'Ÿ|ʯ~õиQ« &L˜`ôè15uÕk0kÖe-Û¶¥›— i.Èí/ö\Ö·gK6wùüI cÍåW¥ä^sùU‡<ù8€ù“¦Ø.w’yƒj ¹º™9VâU@lΜÛxðöE‹–.}mÅ­?¼f_ÝAìwÿô7ß›7»²ºXrîÓHIDATÛ«Ä‹§ý\|»÷Á‹ö'ÀÇE´ÛZÔ ©TU.f½­ÿd€±F§„µ˜ÞщEâ•5ƒ×U‰7 j1=‰w¶G¼HË´6¯ÿ²nxmeuE´3¶}ë.Çz Ó0ÛvvÄ"ñºáµÂ‘Ñ4Ì/>ßæúñ—Ÿ~ ½¢lw”ž€ã8‘ŽXëööòAe•Õþö®[7¶Œhª÷üþŒ%´íÜ=¸®:ÛW™ ©N)@-°RÁû=xO*üíœ65¸–%I“©»ŸŒËÁÛu])øtã—§>ÿgï Ù¹»ãž{{è¡;Èï'ú ’ÄÄìñ„DK–ɉW(L…IDATÿ!û]­†ÄfYœ1ƹ˜×Ä88X82´&¥¢ ‡1¬ªªšA)‰EäˆQòeñN©<$UU5P1¨\„ý–ø3æ0/ý4cEÙî(Kp84´¾6ý‚ª*»«@ýˆºŒ–% iññ¼ÑC)žQb‚~Ìp) W’»ú¸®«¹ É>áþÐ\?¢ÿ!ɨ=WÁxÞ½˜+:ó·™½±÷x¼%Æÿ‰¢CšS Сðvóå¾îIñ_˳~¨jÁvsѹXp›x(JÉõ7¤ýD¿Ab,ů#9×^ <¹€yc,9o`|^D’á†IDATt§øp’’€¾†âãõJŠ3&üŽøõóʸ·eGje·ØN{üúyJ@OJÎPà~þQD*«+r¾«Æ ‚ ç>ñYÌ+{à^/†%—ì!§ ¿~Þy§Oô?6+«‹i?Ñoª­[hG)‚ ö;Θr0¦ü¶€Œºaø›µC›o’öý‰¯ÝQl‚ ú+'’öý‘uŸ­Ý°ag±­ ‚è47×x¡"LÚOô”€R]3¤ýO~x~±m!b@1P'þF5Û´á8üÇ?øÉÄ#'(ÉͶIû3ðÚÒ¥Å6 ‚ Ä“|Óæª’aif>ú`&ØIDATE±M Rh(¶A%MT³hFW'†ª0Óæá ”’’´?+7}çöb›@tq÷OSl‚ JÝrmÛ¾>Yfšá†ƒ’f¸ªÂœ´½Iû ‚ ¢_"$_„ýî¾ãp!ùÙüþÔs‚ ‚ JÝr=á7í=„€,3Óæâ˜Ñï'íï#ÞZýR±M ‚ ú=BõxÂ/å®9})~¿ÿ’ ð>ÿ¦æF/¼qÃyfÉ'eÆd¢:/>Ï¢z‹å>zÒ×ú¬j‚ ‚ÕGšðð;÷ûv¼¿§JÜ—jÝ»±kõK¤úADßÕlE‘lÛ­+b ŸÀqn½,wi|ŸŽÍ˜ÒäIDAT÷ ×Üëhjnÿü§/åNì±qÃé‘3z–ä¨{v]ôÑà?¦Ä{ÿ2f$‚ ˆ<Ñ-7£ðÃ×ÕŸâ÷çïïåyþ^€¿'@„=åN¿”ÞmAzßCŠéUôÖxAînï’?õô%Œ1|ïöëê•B‚ cwßvS„…úý{¥ýžßìIiþÿ…Õ˜ÞPÈ¿¨Œ …™!詊“ðï;Ûc&KKuJíùO“Â+–Z±"†öEGqš"üÈî÷÷ÅxŸeL!Å›ï›J æèI_#ùߤë(c¬Ïô2cí}iAoNŸÀ¶]E‘Lª’*X»*zIDATÿÅï/€:2ŽúVé^–SBþû¸R‚%IÉŸ­œžÖ›~êEæ(ÐߤHI“ÛH‚ ú;)Â/HŸØ/(‰ñ~¿B§å§\J‰ñN»õÔóoä°gïé‘¢“÷ßdìðÜñO=G|J9è¥î÷ôºò'·‘Aôk<Õ$1ÒŸê§;ýèûñþt;^yý1ÙÂÈ4ó Ç\„ž6ü‚"Þ9NE8G^bŸR°4î#áÏu¢¡Þñ®öIAÄ¿X¥m^Õ7uÅÀ 7ÇÍ@&§Eïï}¼A䦧æ}¯²-ôú hAô=f¸aø‘÷JQø€¼gIDATQÍ öÄ©mÛÛITäpÜ4ôÝ„õí=~A©÷“ð}F>ºÎ÷¤WÊì]²Ùæ¤!‚èÉj6s,¶m;¶#„ßt¸ésÓu}a~5Ía/­ñþþÎwÜGµ¿qÔÜ™±ã½§Uô(¥¿"íþÞ~~‚èKb†Ó©9Ã{£(áñW„•¨æXŠñŽí¨2CÒï÷#\ÿâ÷`fϾ¢Ø&=À“FLéSâS É&ÿé¥e,0EªS.õôfó¼S‚ Já÷Ç¢ä—Âï—<Õw¡2:5gDö>ÿRïïGlÚ¸¥Ø&=#£¦‹tîôã Ë•\('IDATOö•–A”>bö>s,žT}dæ7x 4uÐ §"û$ßOAû”ÝzB~£šÝÙÞ±µ}3%5Õƒk‡ ªÚÞÖmÕM¸ªÛ\çÏûå—­Û;ÚDx\Só¦mZÇ.¦ë4¥ÊLÿîí[;v¨T_[].Òç˜ë—Ñï÷0m@3R7 í'‚ ˆî‰˜–lok]±üÃp8¬iš8nÄ63Οípßý賸n•…ÕÕÇÔÖ$Ä;ªÙï~°®µ½@ݰ¡£êk×µ¶wº–©ÙnÜ29`n[;v}úÞcÆKµÕÍvëv]Þ~¿{ ‚,7IDAT–«ƒ´Ÿ ‚ ò¥µ=¶dÉ;ª"E"QBÎ44P_WĤ€×­-m í·¢†Î6¹Ã5-‡Ñ$+²¦i‘ŽÍt>}oÃð¡£Ê‚ ƒ—4Ó1MË5õ¸aé¶«tç÷'$ßæ¹õÞi?AAäE§á¼ûéZº¦KõÔ)G64ÔF5{{K»©ëÊ+ÂR@¢¾æß뛆+Š”mnY‹ê¢úºáŽíÄu«#cšÖÛ«ß™üÕI¸¦ÞÙ`¸]ƒôÙvò7}boÙ\bpóSÒ~‚ ‚è±Ô¾³ÍÒ>¨Jmh¨PV*|Cûcšêÿ±r'€ÝO‹IDATŽè—g:–s¬O?Úlš–®8J¬â‹iº®‹û`–®cÇi^§išaX↠@‡äNŠðûÇï%˜.Ô ?Šþ.‚ ‚èG%·#ªwDõ-[w.|êÕím­) ÆØ ë†ø·ö‹-¸x÷ƒõQð†4`:Ü5-ð:"ñP(¨›VG$¾|ÙjQ'Ð3:c†«G-Ç5Mɽ}‡k†›2qO@a.G@ÉwÏòû ‚ ¢{4ÎvkΉÇ°ú­EÌš7¬ùxCUUÅé§uôÄEä°Áµ¡P°£#ª›Ö‡ïm×ÔüÁÇkõä<Á±cÅ|þ”¡ÏJIDATލÞ3~èØE/­ÙÜòîûŸJVܰ-Qǰ[sRº÷SXâ˜ÿx?ùýA‘/ µWÎ:@G$®›–nZÛw¶?ù‡¿-|êUQÍŽjöø± ;;¢Ö|¼ÁÐuk·F4#¢#††‚ÝptFµÎ¨¬V9bœ¡Û†n¿ú·7cšÞÑ©wtêLëàNÂÅ[óP3yö²ÌòW}i?AAt•\@?¶¹îûß¹xæE'««¢ÑŒe«>üä“/Äþü?ÌÐí]í±-Ûwïhi{û½µBÚÇÐ@7Ü ³ZcŽnÚºi[qéØŽ‰ë[w´·rôÏñIDAT·E,Û¶l;fË4à ¶èAr½~ ¦¡çßÛ/ í'‚ ˆ¼Ø­%6à+¯ŸpÔÁ·~÷Òë¾y–¡Ûº¡Ûï´–Ë£‡WUV„uÓŽÄõe«ÞÛ°µ5×#qýð M"»Áv¼Ó²íÝ‘8€ªL<úИfÆ4óÍ÷Ö‰ô˜Å•z~FÔ`ˆü~‚ ‚è}ìLÓèžxàšr˶#qÝ´]ï½|c+týõ7?Z>n\³¤õäL=Órcš‰éšn8ñ„‰åa5Ó[vuFbz$¦›É)ðùý)Àï§¹~Ä~ÍÞ¼šo_”Ó‹U䓾ۗ p_}ðQDQ0,l©Y¶IDATÀ_^ú×âWVsĸÃ&4…Bê²|´n›H …*,Î`ÛŽírÀˆ—— eWg :•‡"1ý°CƈdqÃ* Úl7K¬ï—Œx€)gœ5õñ'žÐÑ ëºáØnÌïðMìÌŸ± ü~©'êOÚO dzë•wݾäw±O«(A‘.A“ÂO»î|ñÎG›¶¶}´vù òÕB¼…´7Öž6i¼÷Vž#¾2ÖË%’:a ’Â7,E7Ú"Ãe†bŽ{ìWÆ-*mjiÐÑbŽâUÚíx¿ eÜÏ?ÔçO X„xÛ‚ ú7b©ý§;:…–{^{$¦:¾áøš¨¿IDAT¿n› ‡)àˆ¯ØÑÄ¿CÇ7ÔV—»¦ nXôäf=Že9Ž+¦ôϼèLÞìÂ^ï'¿ŸØ¿ðzRZéñ)1»Çý‘Ý–±®”b³’þ®Žnï=ÇMV©¿¨t'>½d 9>g‚(¢†óÇÿ¹ú“uíŸlhù|ËNõu55 nn)˜Iµæ¦qÉŒS§M¯3c÷°¡ƒè¼Ëß¾ôòoœß¹ ÀˆQBø-Žƒlºå†™"AuUc;šåF §Ûñþžúý¤ýÄ€ÅSV䛌átÝʨFþÈ%d+Í/xÙ²ô¨Š”ÝžÛÔ<+ÍQNîßÇÓµIDAT$½:‚(5â®@GYcS¨±i8Û¶xýüBøuà %ƒj«µÕÃâ†%Ü}’7”Ðèú 6¢Ò[Á¯[nˆGVñ• c=w¿«dï'ˆüÉæV¦“Ã].˜ÊÜfô:ÝIÃöÄÆ¶]̱,ÎEø¹ißÝs!½~á ³ $ûùE±¦ãè6GëûÉï'ˆ\ô¥»Y@™ýB2»52[gAôktÛ™ ¥÷ ¿¹§èê†+„_Lëó ¿dÄãLe²d›6“%Óv»ks~Ëá™ù‰@Ìtrtø`r°GÂÒ~b¿%›8í Ѩ+årwÝïý-_WÿvIDATô‹دØÔ²ý‡¿ú¥ª8MÞ´Ýî%±`gû®áCê$˜Ü4˜ä¦aËŠ`ð€—ØÙ3/“ƒ¹ 'í',é üÒgxá”ø”˜ôIyþ4Ù¦d›ë—fäY…?¦0{ºMÖíg•’Ò‹ÉÇÚÜ÷KÅåŒã¦zÀþ×f’Â3m×`éÀò¿Î™zÚõ»¶~¸yãŸð] ŽÓ}k ,Lô%ˆ£m8t›+7¤ýÄ€¥ÛÙyþÓôÄ=šë—qF^·ã 9W‘[×óI™±¢ü+ÍÎÓÚÙ ¢¸ÔÖ”×ÖŒO×-7ü¨f3ÇZúÚï¿ù¬HóÚ¢;pLÖ}IDATE`å_.pÔ±W>éšô¢ 2K5ÕԠkþc8(¥¼Ã7IíÆãöADá„’_þð9sl÷ý7Ÿ6ùŒúáãRÒoþlÕëÿ\8þˆ«…«Ì6¹§Å†Öu„bÅL(bWqL~K!Ö#©Án{û¤ýAQ8žðÛ¶ËKLÚR]?|\óøi^Jîšn|³k´áÝ·rŸðï©ë…L]W}G^b{¾PbC!9\)1dzç@Hû ‚ ¢{vmÿxÙ’;½S×uH’À²lY–eüž©µ‰Ù ÀµbÞX27ÏzëG=²ù4Oï½€‡p÷ŽrßIDATó~öAD>ÔVÈ“Ž98ÿôë×­ÀåpÆù·S§L̳K7 ÀÑãr¨ ¶% Âj(@Rƒ²’W?¿Ò~‚ ‚è¦ÖV=®'9žJ9ç®Éä2ο¨ÛGGY È¡2’Tƒ‰Ú× ‚ zŸ–í^^tKOs1G㎖8á¶ÿôÿË·¨úQ³êšÎ"/T_ …ÂA‰«ÉWѾ~A±/¨yÌ7oúPÌäú MwLÓ䊃~¹@¶þé|®ö¥¿î$Ò~ìïzP·n D—êòë<íçOAûŠXTÓ-WÌáßÕCRïMÝHIBª; IDAT)vþkÙö™k´¥\úrÛ–žÖ«†‚áêÁéª/ ¿Ÿ ‚ zÓ°,˯kFT³8z<]õ=jêZºâ•Œ—F6Nɳ^5”Ce¡Ê*5ʦíä÷ADïcº]P˪:$Ô5áÊÄU®¨ÌöâxÆ9ÿ›µ´=Wíg;†*«‚Ìâê ï=~ßáK~?AAô>aPÊ Ü4,5ǨfW„•¨f«7]æ`ŽÅå€?À´¡*°mÛEˆ‘`»¨á¶Á”š 7í_ï3¾Ð¯¿¿À—AÄ~HT³Õ`@·\¿ðW„OøEX$öôžÿÿöî_WnãÞ8t߯$IDATO¬¸À…¡´:Ðу¤ÙóîUÀ@ü¶Ò$ãtœBµá7ÐqáÊ­áÞ¤>‚ ¹¾²Î-hG3äìì_.9Ÿ c—;þH®öË!¹gßùõ¯»îçàÿáu÷&{¿éîüøãíYô5ýwÞ9ûáõí;ïü’翹sþŸøáÿóë¡é²ÖëïíÿïÿºÓÿßÿüß›þqˆüýûõ;¿êç³÷‘þŸxç³xÄÿã·¿¹óÖ”~Ä_÷o´.²ÖH~¬¯ÿÿ¿þýº|çÎOÿﺮ?È{‘ßÇ.åw?ýÃ@߸ŽªÏø.úÕ¾0âïÙT÷êIDAT z¯_¿)û»·bÉ•þ~èŸ\é7î€# ãþ0ÖïÇýáÀë×?5¨÷'£ã~8 ñp¿Ë®÷÷‡õ×û»nøzgÜ'"¾Ìß½}½?\ã×û_¿~ãz?Ì[2îOnô{ýúM×uý ÿׯß÷Àì%ãþps_ñw›ŒûË_óKž÷Àòëý!Ú“á(¡ûù˜ V¾Ñ¯3_ï§ôã[ýû¡hŸ+Á¯3î€ÉõYÞ‹¯÷ǧôûÈþ“¹bñ ÿθNP|?¾ÞßÊןêoøïÿ‚dÄ?í¸ßïø1?××O¦.`Æd?ósuBdJ*IDATõpêæäë¯?ŽŸÊ~æçù³—S—0c®÷@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?M¸xp>ëþ÷»èCT{ñà|¬Û|ú‘7ׄ{N“ßòa™âûgß½˜°’zÎO¿ÔÁ"Zy’ܧ¿‰àôÉ~h!J¥~WÚ§°G²Ÿ¥ ‰0| ¯n1%oPß(,t²é²¶[µByÍIÙyU5•NþÇ‹[óq³¼ÂÂ)Гý´"Oˆ¦t#AXßÿEξŢ+OÔWÖ<8}måÉã±W+·U¹YÍf„–É~(Ésw¸29IDAT/:‡ÖÖy"A˜×¹éARý‚Na}áDÈ~•ŸâžK~¬­óÇ5ŽVÀ‰¬/œßñci’+¾{é0Ÿ¸Å"âø9ZêÜû†ÚÅ*9©õ…i÷³@å¾ò6qÇSÖ6¨¬¡þÿõSî_Ü«ïd‹ån: ½§77‡ÛzGÞ/Þ;²Mö³d<ú8yúøñG…ö}üÄ!T l1KXúv3Be1ûªùéÍÍåjuuõðþŽm‡öËî‡}bÆón½úù»·f–­›ÕÜ?Þ}'nýïˆÎù³@ý ? þÞ?_uÝ‹ûçÏŸ½Ìçº\­¦ýĹq//lý¦¨)f_5‡~ê}8ÛÕ°KÙñ¼[÷suõ°p}ý¤æÚÖŽ{y¬æû÷Na'R û¡ë¢àO>­®¯ŸôÂ'iЦ„“EÄÍâáq¿¸òŒcK¬™ž,=,7¯-y\XzMÍcdQIDATOãC?yUÉô¤þ±µèÆGŸƒ?ž=ôœ×Y¸{4Þ5ïœàêêažÖco˜üA,à¾ÏÃí傱 8¸Rƒ{œƒ’ýð“ÁaJ2ŠÏ äS‚üH"Ÿ±Ë†JñââJÊK,´,¬H\R?%ž±_ÊàKùúæ5'mòNë Sº(·Â\ýƒ|‹Ö"ÙæÉžMºŠgÜ#ƒ}&ï™xÖ¾sºLý&0æp{ùrµŠ'Ç]4ú·U¾RcVŠÝÉ~X#›ðRH]uɇrž[åÅù|yˤ«ÁãŒ9ù¹£ÁX8a;6¼Þ£µë{:v)5Þª(í§Etãåõo±öñ[´ðvÝú °Å¦[[R~ñËÈþDÈ~–érµz÷nÿ þ"L|÷îy7þá8voWÒ&>­Ú_ÑÌO´vYüçÍòú0%é'i6vËXÞ‚‡ï±IDAT26XäXmõë»¶æ¸ÍàÒǶÏÚöy©k;/܈WYÃà¦(”WŽÀ±ö[çèÞ÷rP.)Þ°õ{C“ý,ÖÏŸ•çÉ”‚äþ¦$Ïò6ñwÒg‰? Ë3&mïàëg¬e,9œú×ô™—ß½5VsÜ&_z8J¦Ä$É”·¬)5QÞªU•wRùÎÉ×"y/å«3¶î5Sö¾— %… oääP®ƒ’ý,ܦ' ÷7. 6+÷V?¥¦Ÿ-^*}ë2öXÿA7Å~=½¹‰«Ý¨ò­æÍ}­ç^ÿéý,PüS¡ÝÏ ±öSãH<,t¬ó|úÖeìR²qŽö7Õ+?Ê›õ{ùêêáý‹{k·ó #¬æ~æê'LøóûJvÉïä·Øšìg™Â+ quõðøŸ3úm’Iê¬ß>ƒÍú½œÿBÌIÙ®°±5Ê'Ö¬û‰lœPêŽõœÈêÌš¿éËÒÄ¿P’ü|xø]ݱßêÍça«áÝIDATMzŽgl\h“¿Úÿ´îØÆÄ Jä]åÅ ®u\IeWƒòþÃÖÛ8ymcKü Ù0qív,r¬qÍ”Áõl9XùÚ÷ÒØFË{+¿¥óêwnÍî[ÛU<%y¯þÉ$‹Ž7Ñåju}ýdÓŸ¨ !ûY òŠ÷ƒ†ð›¶ÉçHaÞøÇ[ûYòƃm = –_³È?æòŸr\£ÁNÆÖº{ûG~kº”÷æí§Äô=¾”\µ‰{Ž÷H\s|‰g¬Úä¥ÁÆå)cÔló0cÞ,I»08Ž·La;”ßÒÝ;·°ûjºÊ÷ã`©I·ÉFü÷èWˆv$ûiWü9Ò?CŠ|Ðß ñÄIDAT½=йqo°qÒ¦ÜÃXyËäc®_bþItµvq5?X<ØUÍãÆŸòÉÁJÞI^j¹¼òÄBµƒÇ‚k·Ûàûap}óÞ‹Ì+Œ“²ðK»c«œ³—レwïàÆÜtc‰/´üï‘]È~H fO>d̵)÷0(¨•‹Ü¥“z»tU3>Ûc©»÷–̾Ý濆\¹ˆ`ðTÓ~]_L/Ô³ÅVݺþü¬†þ~¹×%ëÇ áiÍè¡p51ÜYVhœ·)÷Pз¼¾~2¶Äš Ÿƒlg¬«}ÝA¹ÇRwï-™½ƒv{½Ë,YD8—“7Ûû¢×³c³d–]êwuÿ@Œûƒ¡°qIDATYšäÃ"¾ *?¡:&o6ø¹œ4.´{uð^¿¸å`Í5>óNÆ ‹~ÈÖ×3vëbÞI¹ÿdJ¹¼újó]W•Ï^X©µë8Xùà"Š^B*ôV¿A¶Û¹cͺlwç«?xa\Oá]‹«rþ/d?Ë”|â'—'“O¢xJá“e0AóKnî‹Û䝯OÃi°æÁ%Æí'Æ ¶É‹©éj¬žø´p²Äµäû()¾ïÖ¤†Êj“X¿è¤·Ê •W>¶ˆ¸}X£µ½%ëÞíoç®Ý}Éî^»éò%Úôÿ=:ÿ¿;ÙÏåç óOŠüÖ§š[ˆkn7|&®½m¬e¹!ÀuŸIDATøš‰cm¶ëª²ÛÂÓäc½¼Ö6(oçú~*=V@eÿåEÄëR_í!vîF» f–rƒO úÁõ~–iëˆËÕÊb;›nº~ÙÚ3uœ)ÉR¼göEö@[d?´Eö@[d?´Eö@[|Ç…+ÿ¾@ƒd?‹Õ§þ·ß|•Lw4Nö³LOonúÔÿäÓÏÂĽßuÝÕÕÃÊï_<8öÝ‹–»Å,;³S !ûY²8øû§ß¿*eÀŃóðøøiqRUYÌ`³µóžÔšBƒd? ÔúCðŸu]w{{ÛuÝ»wÏ¿õâþÅy>ôH±]6…Í'Nö³Â,QIDATp}ð÷úø4üáL@xµfÊ`‡I³¸AxÜ·)Ï8¶ÄšéÉÒ“åÆ¯& KÏk' ÍKª\DÒó؃ 泇ƃuV®õàªÁé“ýP’ÄsØ•'½“¾°¸ÊÊ-Ë/åÂãˆ5ë[¿šzÊ+¸Å¥‡Áõ*L¬³¼Ö[T'Eö³p···ñ9ÿÝÅÃıû ƒ|‰kÏRÔ¨,r£>÷¥¼ÐµÇ@½Âi˜š;v©Nœìgúoñ}øèýþ’œúß¿zñîÝ‹ýõÖFfM,ÕK†˜Ýº3íq˽˜dP»÷…Æ;¥py¥W³%õ™5×Åzüø£ä®þÂMþÉuß…0Ê€IDATö[ô¶©I¾†pä%æ M"|£c¬µ· ì¥B˜ã~–érµz÷î½îí¼÷îy7þãß5Ù·‰(Ÿ%I¦òŒI›¼Ÿ¸ÙØ]fåŽÂ½ic«P³¾ƒ5¯Už«PÏÚ˳TÞÙWØ5ÝÛk]_!œÙÏbõÿâ<™RPs?Ú`v®}¼vƱ)5ýlñÒ.}V®WaSt#Û³°‘»ªÜÚåJÊåÕô³#ûY¸].í7˽ë°l®÷ÃòmäMS+ =Ùm‘ýÐÙm‘ýÐÙm‘ýÐÙm‘ýÐÙm‘ýÐÙmñ[>0WOon¦.(¹ºzxš?^R¨½IDAT'&ûaƾýæ«©K†=~üÑÔ%Œ’ý0oŸ|úÙÔ%¾uº?éz?´Eö@[d?ð‹³³³©KNö³pÎÃõ³lÝ,YPýB÷âìmÇ\40#îõcùž}÷Ó7ÎÃãšö³s{{ÛuÝÙÙYÿ`ì§9ý@8CóøéàKåÆAÜy¼Ð|ÆÐ¸°ˆ®úePÿ?™Z&‡  `Ád?-Šƒ?‰ØÆùKy×GräIù"v‰üX9Å“£šY€¹“ý,_>’®ÌÔ­¯Öç »Üm°ãÀ¦).øañd?Ë·uvîëÂ2š?ÎB·–\–Ç}þ°Þ†qi°IDAT'µƒÝzä/ t?Çÿ‘ q?M‹zð–½ø¥dJ~›^ÍR¶®gw%ºÑ?,˜ìgáò­¿_o‹yã)c»¡; ÷"lzvÞ…§ýã¼Àb8çoÙ×Ýõ'KöÃ[?°xÎùÃŒ=~üÑ)ÿN(pšd?ÌÕÕÕéKfIöÃ\=örê€Yr½Ú"û -²Ú"û -²Ú"û -²Ú"û -²Ú"û -²ÚòÖßózs3UÀq¼•ý~Œ“õõ×O]ÀB¼•ý~ Ïõ~h‹ì€¶È~h‹ì€¶È~h‹ì€÷ •tIDAT¶È~h‹ì€¶È~h‹ì€¶ÜY߄øqoêëÃGïòégSW@JöOéûW/¦.áP>ÿâËþÁ‚×`¦dÿÄþùêlê®…u˜×û -²Ú"û -²Ÿ_<½¹™ºν~‹ùåjU9×ý‹{ÏŸ½j¿ºzØÿ7ëýâÿÀ‘÷/Aç£öð´)„Át>¥Ÿx"£í««‡××ON¤€eýó§~%}ïúúIÿ dghÙjŸñÉÀ:L<“ÿ†þ{$ûg,NîÁœ¾ºzØ?Cçøä?c’ñ}Ë“ þ˓ĹIDATÕ*İ;Ù?cýÀ½+Þ Ÿó¹ÞE§α,ž{ýæírµêo嫼›¯ЗÇôáât8Ø#ãþÙ{þìe?šÏÇëÉõþüäy<%ž7Ü pØÒ˜‚ì_ˆpÆôÉM|ýôüξxJÿ“_õwðp²QƾàWžO{<•S¨`a\È~h‹ì€¶È~h‹{ý¦ôù_N]ÂÁµ°Žó"û'óá£÷§.áàöºŽÿ³¿®š&û'óÁ£§.aNþü—Ϧ.`!\È~h‹ì€¶È~h‹ì€¶È~h‹ì€¶È~h‹ì€¶È~hËO¼.ÜIDAT[ÓןM€Åû%ûW—¿›°(»yúÕÔ%,ÄOÙÿÞ{«ië€2Ù°/wº®ûãþ4uÀ‘ÜùûßO]¬÷ûß?žº€…pŸ?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?`‚IDAT´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[d?´Eö@[îL]lìéÍÍÔ%̘ìg~®®N]Àœ|ýõÇñSÙÏNû+…IDATü<örêfÌõ~h‹ì€¶È~h‹ì€¶È~h‹ì€¶È~h‹ì€¶È~h‹ì€¶ø›¾@Éý‹{S—pX>zÿ“O?›ºŠÃúðÑûÿâËþA 똸½½=r%Góá£÷ÿú·äÓÜËcd?°Þ?_M]ÂÁµ°Ž‰Efa9Ü˃d?@»da›Üëm‘ýÐÙÌÌÓ››©K`?ZøºAão×û)ÅA~¹ZUÎuÿâÞóg/SÑÆúîð²‹çÉ·Ë 3V¶jOû—ÂÉ€p(Oé†#¦28Þ Ä~zÜ ^O®÷_®VÉp?žÏn8lé[‰s"9uÎüÝÓ·¼³âÁä÷¸í(¿±æ€ y3äïã“ýÀñ„#€0¦Onâë§çwöÅS’øŸüªÿà n]ö±>øÒàGÿŒr1/5¹Ù-™R³MNÜØ*>ÛÑ•_Œ<ÙÛØüÊã)c®÷@[d?´Eö@[\ïhÔç_|9u LØ<¯IDATCök´-¬câÃGïO]±5¸—ÇÈ~ ¤…„hasýÛ?¦.á¨ÚÜËcd?PòÁ£§.ý›Ë—é÷È;9æ^?h‹ì€¶È~h‹ì€¶È~h‹ì€¶È~h‹ì€¶È~h‹ì€¶ø›¾ÌÏŸÿòÙÔ%̘ìgfV—¿›º€y“ýÌÉ{ï­¦.`öd?³ñÇ?üiê–àìÍ›7S×ÏÿºîÝÏ­`ì(IEND®B`‚checkout-project-from-svn.png000066400000000000000000000375741203611042400341320ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images‰PNG  IHDRPÌeµw pHYsÄÄ•+tIMEÕ *Â|5tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíy˜ÔTÖÿOªRU½Ðìƒ"Í¢lꨣ¢`C³¨ãàÆèˆüdEesQtÐAô}EuTÜYd…EEÆmDD·WQšMº›î®JRUÉïT‡t–››¥ªRUçóôÓOêæ.'©Üo{ssˆ¢*&Mš‚ ~‚U¶d…êÙ£{YYë:fÍ"A–¤tjÒ¤Y¿<åäs+~5`Àñ ³j‚ ÈQXh©á#žÐ»k´)&ñ¦X2eÛ6AY§zôè&‹Ôþ}55‡8AŽiʶa‚ )ØI“f 6¬MëÒ-[ö8PÛÔØ‹Å³à±ŠIDATm‚ ÈQXèÒµ}M͑ݻÔÖ¢… ˆïHÍ£755Åbñ¢¢pv­AÑÃ@8®¯åð‚ þ$åOñ >b²k ‚ ˆ!) %ý¾6L¨}2$ ɾØvøŒ ÉH±ÔºÛ¹KqIi(³¦"R °f;:‹á.íÛB8´óç¦-?9ÀK‚䡿H|û.¾}G¶_ÿ]º´Ê¤­‚&,0 @ À0ÀHPÄKí#‘P«_T¯‹•†x!.Ç /Äbüömõ±Êa=Û´) $¹¨W]u¬Xþvv ¡ÄÀ‘F|I!Ï˰`˜@€à²º±IDAT ²A€ÚÕK¢˜8x˜kd“Ey^x^ˆqBŒãb1>Êñ›7×Ó¹äÜŠ^²NI €Ô|2Û–Ò¾ë³Ï>ùü³7N¸9Ý å1…|õç…û›Â€¢¢ˆÀ¤N‚8[Ž °¡@«²Pï;Æãq^ÿAˆóB< †Ø €$«›¬WJÕ!6nëçt/Ü>ýž!C†Ë‰ræÛ§ßóÍ7_N™r«ü.¸dèo®Mû©Ê[ ùúÏ% ù{b È@°¥ï#AüìýûÞÙÏ7pqŽç£‹ 1Ž‹Æø(ÇEc|Œãbœ®¨¸.åKèÏä]3þüôSK¯½úú1W_²è¹§–¿ôæùÃ.sõ%A`þ8õv%ðÕ-“n½`Ä…·L›tL‡N•çý÷¿ëç>tï3O.°ìøIãÊŠKÏ8{°RgÏc»÷ëÝ7 ·V¯ÿÍ…ƒàí×ׂÉé=„ƒUŽPT7UIDATÀ_ L ‡X †‘$ €dRú¤Ë/ZuKEIÅdRL&“IQL&’ÊGQEQ EBŒ$ø U¼%½ºõGäív¥elIÞ|ëµ›§Þ ]Ùpò©§@UÕ»#†ŸÿÎÛo@ÏãSWÿgå ÁL0¥¤={ô G6pTÙÒ"T)‡òÏtn¡ï]Có¸/Ä(“è 3uµŸýxø¿{뢜‹qÑåøhŒÅ8Žç9>ÎñÂ䉕a¶\©K2¹æÃ‘£ §¶Åx2RZt4=€ ׃(~üñ‡ê‚6®‡d2T2¬P]q€„B•#0ìP±D½T¹IDAT @e™æYpF‚ı­’‚Ô½Sé5GÕÊÃ=>5ÜãŽ>qÎÀž#†…Ù”:IÀ¡R…U#2òö9'ãÉŠŠÊuëª4‰fÍRZP¦r„BþE‘ý)&V?,…;‡¤X²Àà@ À2Ÿ~·'ãbãŽx>1hPÏñ¿RÞ½SjÝTóBÃ1t8²ÜþnÛ¨22R¾âŠ+×­«úqÇ%µEpáùGŠÃ†‡¶v횪É3Rë§"¤æŸ’ÀDNìm×ÅìˆÖE§õí²lå¦ê BŸ“«¨èsþyºvi rÂZ®InÂ"IDAThA$&oÏ{æÑ7W¯œ3ûáÓN:³´uéÈ‘ç;ÿ¡É7€Ç{ºoÏem[¼ùæ[×®ýà‚K†nÞü½—g¥ (àY£pÝ)`&L˜9ýöñ­Û¶WHÍU ZÊ ©Ôªó£HêÌ ý°uôê×ý‡­;å 0Üî}B9¼ýúÚÖíÊŽÔ6t>¶c«Ö¥rÅGš~Þ[¿èvLI«b9Q]‰ŒÀ »ܧIDlPÀWŽQÀ¿(©q_$Ì4;FòÃHÍ7ed‰:ª\ ¤–vJ ÃH’<ÑÇHÐï—½åÊa[æØã;{|guJûŽmÛwl«É(/€ïIDAT¦/‡ô‰’¸N!©æ–$•×ÄÈâ’$1 £¾©—r½˜–“R©ù*»DÂ8ž ÷ÚÏ5 ÙñMÍO…BAÙ‡j¾çŠZÔ<÷Ä(ã@Ù{J-œjám¥ÄŒöâ?|°fÓ†ÍbqaAv ùòÏ1 ÷«b uÛölö‚yž]qJ¶šF$'` íݳ'Û– ‚“šúvÛìÚ bFJ§¶¿mÇŽƒÙ5AÄØÛ¶]ÇÚϷΟo¶íAÑ’öPv‚ .ABÄï N!âwP§ñ;¨S‚øÔ)Aüê‚ ~u A¿ƒ:… 7`•]IDATˆßñR§†a˜Â = Hš°ˆN§Ñƒ÷óyÜJš*G$×!é”^>ÃW‰"‚¤‡Ñ~-ý,³ êt9QIA¯ ACìé”ZYÔÒ£ñ³Ì2èÓ%IÒ§#‚¨!锬 zÈ+P˜¡ÁŸÒxIj¿ÉòÖÞûCÄ,æÑ .¥7„î‚ žàÍú)g¾:\‚Ð`=?¥IŠy+³ št¥”:½0A4ؘŸ²LW'Ú*HHGÁçûñ;¨S‚øÔ)Aüê‚ ~u A¿ƒ:… ˆßABÄï N!âwP§ñ;¨S‚øÔ)AüêTFq"JdCñIDATÂAYŒHá7ðLÎp®SŒ gÅ7](-÷á¦É¤Ì©eh ,šA™M ´íµQ ©û¦þ,iºmºOÞ »8CÁF8ÈÝÏ]ËÁ7qý}Ø7ÝÛãD§ O„ò¦Í[dôqŠ5)fùÕ5î2 €¥É¬¶G³aV ù@È62›Ž&”³efr‹f§K}PäóæÌ`Ê#5k‚¦ËoÄÁÑeëÛW[KhHÉIsÆì¢n]_3m„cׂå Ô\¢šoß¡?eˆ¡(Û4)šmý‘“w‘ë1ðיˆrÝ:’¾fÊÃÑààx ?!ôõ˜•%Ly¤fU™gýÑœdú£3ù{ÍLIDAT4)3ß>¹!hÙ{ɮ٥k¥*Âåaˆ­¾LyšÙL8F/uÊì—Ê,…r/¹ Mf»_ýwIo¡-»æÙ²ÁYµžàò‹£—]oÉØ·ïò(PþÒ ¹!²yvPɯï^ê”a“2äß4}~ú‚”õ¤ƒlõ[68V@—¤é‹S~x鋤‰ì¶n÷ôºÁÁ‘zþ59¹ß§v,-±{½:隉Hgui³'†‘]Ó}){ˆbªò‹ªÏã‡_…œ8·f×XZû²›¯Ic°CJsxú‘³áÙ0zØO®Ê–UôçˆP„Ò0ý1ªJïZRZhy8–6æ$×c« Mú-}ƒy4IDAT[1ûu13Ærtc¶7Ãß¾¥…ô~¥ÙA:¦ m³¼êÈ!¹Ëâ|ܧÿæ-SÈ×™eºzdk·»BØåà$õü´Ëã5,¢O$Ì4ÛJÑ'’¿ËÌêÿ†9õ]ƾ}Êv)¿h»éŽ¿ gEÈמáGM§H×üT¾’Åié´âÀÍ!¼:º|ýöýO¡ë”ÝË.—©.}?Ø>ìºvë)(2s4­àó}‚øÔ)Aüê‚ ~u A¿ƒ:… ˆß)ôû}ˆ3&N¼'Û& êbY¡zöè^VÖºC‡ŽÙ6)P§LœxÏ/O9ùÜŠ_ p<ƒŸ%GjIDATÁl[„¨S-²H 9ð„Þ]£M1Aˆ7Å’Ñh,Ûv!ùêBKÝd‘Ú¿¯¦æ'‘#MÙ6 )P§*&N¼gø°amZ—nÙ²çÀڦƦX,žm£Bu ¡¥K×ö55Gvï:P[‹n’QP§455Åbñ¢¢p¶ A Ô)„–p$\_Ëá=>$ó N!6à| ”av‘<u ±A0h{¨ jŸ IB²‡/¶>$$ãB2R,µîÄvîR\RʼHž:…¸¢³îÒ¾-„C;nÚòÓ‘¼$I^jŽÄ·ïâÛwdûõïÐ¥K«l›‰ä6¨S-]’fðIDATrðÞ@€`€ ˆ—ÚG"¡V¾¨(^/* ñB\Ž8^ˆÅøíÛêc•Ãz¶iS 0H 0cÆ\ðàƒÏ”wï©T>æª `Åò·³ut%Y iŠ:…Ð`˜@€ ²A€ÚÕK¢˜8x˜kd“Ey^x^ˆqBŒãb1>Êñ›7×Ó¹äÜŠ^²NIòüÖwL^²pE«vÔM´-):"à²,_“•éIÔ)„&EE €Iý¦2!ˆ³%á0À ´* õ>±c<çùO„8/ăÁ`ˆ H²º)—ú‚çžøãM·—¶n­n%Äb¬!_ƒþâk¾ÄÌàIDATË¥£B# ðê!ENEQÅd0)N†Âb$™Hˆ¢˜Qd“b½$±ìÑøf™ƒÊ!#W­ú÷¸ß_ŸTµdƒ~øþ܇î€Û§ß3dÈð^X´bù²þñZ›6íêëkÇ]}™z{ÌU׌w}O’ u ¡%È@°¥³#AüìýûÞÙÏ7pqŽç£‹ 1Ž‹Æø(ÇEc|Œãbœ®¨¸.åK(zeÅðç_\üÚkÿºìò±J}T5÷¡{{d~ëÒÒñ“Ʊ 3¤bÄŠåË~üöÛ³Ulß¾ ÔÛ•çT†™@2€^X¦`²àQµÐ©Å‹—eÞ$ª IDATW`‚L8ÄJÊ[ìH&¥Oºü¢Ug±T”DQL&Åd2™Åd"©|EQÅP$ÄH’|3ª }ìÕ˜}ÿÌNŽQRÖ}¸úÐ7X€ªªwÿç¾¹ƒÎ©Xý΃*†¾óö› l:§¢g^Ápˆ મL‘3ÝB§Æ¿& & ¹ÀÆ÷6Ä(“è 3uµŸýxø¿{뢜‹qÑåøhŒÅ8Žç9>ÎñÂ䉕a¶\©JýsܦMë[o½ówW^¤¤|üñ‡pÁ%Cå6®Q¼rÌÿ»å–ɼÿöÇx׳îŸ3KÞž;çñ`(Žà° sHYå ê¨IDAT÷í¬Þ“y \!€ ËÊ« €‘ ql«¤ uïTúCÍ‘CµòpO ÷xãOœ3°çˆáBa6õC,Iêw§‡Cl·nÇ-\ðüþ §TTT®[Wõöëk•<Éxòä“N€ûçÌ:wð!ƒ†­üþýsf@ïò‹J‹ØêTɺ?… &V?,…;‡¤X²Àà@ À2Ÿ~·'ãbãŽx>1hPÏñ¿RÞ½SjÝTóB¥Šp$¿:ãŒ3î™=û^7îšu몾üêó.Ý:/^¼ð·¿ý]EÅP˜={Ÿ?ü7‘âð﮼ê£õþåE½ÞÝIDATö{JJJŠK‹}yêBK€a"¤æŸ’ÀDNìm×ÅìˆÖE§õí²lå¦ê BŸ“«¨èsþyºvi r𽱑HJø®¾zÜþ}ûàÜs+æ?³héÒÅ6®ÿÝcÊë)%Å¢’¢³Î: úœØ·¬m«ÓO?ú÷оs»¢¢H¦OD“—×£N!´LDö§$©y¢ "Ç…Ú×Nö•†==µBŠiyA3©ž³ýûê¶î€HøèÓ3fÌ8|°.9bÐ9ƒëkš¢­Û•µ*+ ƒåÝ»»eûÎí{[••´i[ösàÓdIDATÝ·?ToÛSVV‚ƒ¾Lƒã>ÄÏL$Ì4;FòÃHÍ7ed‰R–!0 ÈKÑAbF’äTýÙK?#ÛåØNòF8jÓ®L³7õûeïæOêm$ÏABh !]•šs’½&†‘Ý(I’¦Åªó”ëÅ0-îô¥æ«œ×£#¾&À0¡PPö¡šïù¢V 5Ï=1Ê2²÷”Z8ÕÂÛJ‰YV®yÄŽû?Óºm{ƒy"Ùu ¡%í݃+ì,€:…ØàÛm²mRˆ N!6Øþý¶;fÛ ¤à@BhaClÛvk?ß:þ½Ù¶),<ކQÞ£›NuÊûIDAT·"‚ØÓ©òÝ”?7­º—3oåAüŒq_ynÕ;v§Ï[øÇAÒÛù)Åч>]“"$—R»9úœÕ;v«ó«+4,¨¯\.åÀu {ôušŸI?‚ø:¥Ñ0ê¨fÛúiØ?õ5Xvi%f ÍS'ê+×´hv€f¥œGD=ʰ«æt6ã“áy"K±p („üú£CµBÜŽûÌzšƒ¨ñ8\™å„ñ › ±‹gë¼u¬üC:ÄE9'¹~r$3ػߧl+s@†óèútMŠfÚ[_Ê=d4™ í±¬l°Ù!€ {óè–‰vgžIDAT„ii[óèú†»ôÍ96À2¿û:i*,äpæ’ÿ‚º¤É0ßoáП’)Ìn†èѼI!M};|ÁâÖŸò'9dj —æ7‘æ¹hs€Ï!#iÄÒÏ2Ë N—•‚W¥/¥ß«®M³­Ù°e˜º¸þ¸— N!Þ£×ù£ÆÏ2Ë O—$IŸ®A]¹¾-ö«´lB“ L¤ qêâYAȾŒËú=ɦØIÐJ š½„&p̘VP§Ðô|3GÃ¯Ü ÏÝÃy7o›@(±¡SkÞ?}v ¹ y„EãæxbPµƒ ÙÌD GsYÁž?õÍWëÒdâ{ºº¯ÂrÎÈ¿ñL›IDAT0ƒ‡wÉsäê Ó€ræ ¶Ç}>¶0v >gâÄ{Ìvé;¿ÜÃ-ç­Ì2hÒÕÓCJºeUîÑFß„ÆN”*÷àüâf®‡aº:ÑVAB:yeë–óå–‡CÓ â㣫y÷Ù>é«AÂ!]:õî³}FN؈R… ˆ{Ò¢So=Ñ;O@<ž|k^ït4 Háàp~êã5 Ó{õümÕÝ¿¾þe¢Õ¿¾îe`àÕ¹å£o¯vl"‚ ŽCjJ2CÇîxÅËË:ÆÜøà?ÞŒ¹—P•ƒ»Î9ú˜« € 48÷‰’(Jâ³+6èÿ÷óK^‹IDATHÑj.–Ћ£Âñ60lË%”9i²)­Q6MS¡úpôOœéó HNàПŠqAö©¥koºvh Æ'AVùß³Gçž÷î_<£Ó„¹5š‚~s…4»Òç÷4öûíä#%ý)^à€oªO}lªWþßtíÐGŸzFLÞ )eÖOô¿ð4)`ä&hÒõyÈÇ¥ñDôÕší²›Y“‡¦]%a=(@HãP§’Nd¦L¾ôþ¹ÿP6¦L¾”™ûçþ#màDfí¦Í”µIÍ(]‘¢”bTOiiòZ±4†P­>ÒÁBeÛÐx½IäÃQ>Z¦ºrµm Z'MSAüƒÛ#ÙÛ}IDATõèÓ¦3Ûpã㉡ÍeAÊÌ–ÕfÆ!²;ÎE?àP§8>òòŠÕV¹"Î*êXBî{šãè *^’›æ¤q¨SS®¹PÙ~nQ‹÷;Üp½ilrâBÈï•T¹„ÒÊÁš3ÌN…ONb7ßšƒ²þ¿HêÔs‹‚D D¹XI+E›’Ï-*âñ©%EÅlÇ®Ÿ®)¨é®†gG3/c˜¢ÎIί©Ó–dØ(…êæÌ*qÐ.e)³‚–ÒËFýß…Ì ´Ü‡˜&“ÜTëP§FõÚýõáR(ÝU µ ì}úv“ÓáäöÆŽ•¾Ïë· ]Â69¿ãÜ(ñšIDATÂi¥/Kð)ÛÕWe¦ï¶ZÉ>ì„#w܇–;Ô©U?tSü©wpÜWÖn€o¾æ¢=šdjWm·*½³Ôr¯s€áéRü_õ´ÅÉÔ¤˜åW×l¸ËСÓdÖÜlÕ¯¯„| d› ™ÍGmþÄVHhÑìt©Š|ÞœLy¤ú&ê”z@wË-Ëï\¼Hùø§›ç9«Óÿ Hy‚¡¨OX¦€Q_¥ßE®Ç Ã^gv ’nQˆaëšš)Gƒƒã%ü„Ð×cV–<§Ls¤úâä=öØA÷• …ƒ™Ÿb–B¹×îJÃD³>le6OÝgÓ|–²õ39ÆÑIDATLs~ÒÏóÝgûœ7é;y{gõžô5„xH÷òã2Ùœ~`ö‹m˜Ÿ¾ e=éÀn¸¥ ŽÐ%”_\ãä7ãä4’¥v¯y¨oË*ƒŽôÝðrSÜÃ6Øú¾2LzâäÍÃ8y@Ë'uô}@½W­êÌJŠa~êlYEßí E( 3“GÓ«=éoŽk /¨x@nšCB&£qòˆ yÐä×€~>ÃsCfçg©œÃÛ8yðÜ¢nä8yšNbØÃÍf[ôEÔ³0fù5uÚòƒ ¥±PÝœY%Ú5Ãò”"HNãQœ<©„ŸÞŠ8yfóÍêmC/€°MhÅ©IDATÎï8…<ÑCY–fÜ®¾*J;É' Arâä}=§âäùa˜‰ ÆÉ³Š‚dŒ“‡ ˆßIcœ<5޾† H>áJ§6½1¾~ß‚€t&Ù¦ë 3/^â‘y‚ îtJä »nûY€°OâÅ#Ÿo|Ë+ãAÀ¥N5¼øÀ ¶m[³Á@ !jD»ö¿È+ãAÀ¥Ni};ôO•]ZDXµnÿ‘Ä.oL3‡iù°|I† ˆŒó8y/¼±6Á”xŒãAAŠñ£“`Ê^xc­a¦%štÃl†•(‘ºÈ1•Éœû’>w IDATS‡º–ÆøxQˆ¹è¯+ƒÁË0a6 Ãl ê»·Ù@€ Ÿ¼y¸º”Ý7£‘}%t£¤p®SuM‰6e%ñЭSû§DØ@Y$ض8õW ,~©Ê²E‰è‡oŒî]Fêt@ýBü¹N5qbQ$Ì'’Í»²?} 0a6Ãl0 «Wz"%–oãÀ+É'œë߃qQaFïç;}SŸçç—.p2îs&g8]… y‰sjUˆÆY¶mB@øE$Fbš} àg«JdeQô…Q½¤ìëúP’—8שŽe!†ßת} IúNZ»IDATˆÄa ÄHpT)$ˆ&–õN0)»œàpÜ—V/^–m¹Nuj9XsäÜSJžÝ*@$8ª34E0ìÎå̹JNU+”ÐK•ú•Ó(Rieüøk²mRX8שË/¨Xµ~Ë] ~( º&"ç_·Ñ WdØËø¤üòÖô/ÈÖäGyÊ „·[#H:pµ}Ôàþ£÷—7 3È"µ­&ê¦A œ4Æuvçò>±­&–¾&)Ò¨SÊœ‚ ˆœ?߇ ’\ùS_¼}KÍŽoíØãÂÓ.xÌI‚ -p¥S5;Vœ°øâœÞî~IDATá*ø¼ówÔ)A¼Ä•Nuìqáëž®N9þäKÜÙƒ ¢Å¹N}»³~[øÏ}Ç<Ú¯[j’kënñÛí»‹wÖ÷íÞÆ#ó<ì!H.â\§>ÝüC»öíNèÌ$b<½;‡Š¤²X¬ ÀX§ôÅ@ËGŽÉ«ÕõËÍõºC.Ž … ¹ˆs:XíwB÷(/j®ã›ª7öûR8СéÖ~ƒWÝdXÊlIº¡®D'?œŒö$ÿp¾.aÿ¡†V­Jjã5MâÁÆä[ªõRïNÝÙ9ë÷æSwÿÑC+ QÓ‡UPbkŠÂ#’uœëTYI¸¡)Ê'˜‹hÒIDAT('Æ„äOÿq^E¯7m^µq_yÿþÉ7>÷´Á Ü-AÉ—G ¬®iQj¥Êç”÷è–m,à\§º´+¹}l &$ã|<Ѱï_¯Þÿ‡ËZï?ðÝ;kwéwRÃWïéK)Š`V­KÉp&sèOyˆZJôÛ(4ˆœëTçŽmšêkNìxðø²CÇ·94àÊ‹W}úÕï%oUº¹ú«MÛíúþS Õ  ß4ã8²š!©ðÖNDCõŽÝÙ6É=œÏ£_<䤯ùâ‰ý ³pz¿žíO=ë•O>ìÿcÏÑ#„W×lë_1ZŸò °—‹”÷èV½c·Ú«’•«ÚzIDATKIQ>ÊÙ4{Õõèó§ß|$;¸ZçùÛ§œ¦|xÊ“Ï==/¶gû?W¿ÚˆË'ÿï“êàS2š¥fK @wKÎn < °—-}ÑÿWç‘74r*ÅÑo€jðˆªTPx/á†)Sàq0 >E'Ïšày`/·Ð ²™ ’—¤+® ŸBÈhDŠ XzÔƒAT¨B ]:…Á§ õ@O?ènêy. æ7iŒ“‡ Ô3Sš™u ú½úY-$¿ABÒ‚Ùä‘âdòÛýh˜‚äiÔ©wŸísÞ¤ïÒW?âOÈL((ˆ¼Ñ©…óžQ¶oœ:Þ}¶ÏÈ Q¨µIDATª T"Äs<ЩÅswõ(`Dv}»å›w.‘_8'ßš×û7S·»oA‚ŹN=>÷ñ’¢0„FÜðü‰XS"Ú/) •5øÒ)¯€­þõu/¯Î-}{µW#ôàòz$?p®SßþÅ v;¡­¦ž‡|¿üársãƒÿ\xH0væ^y—aœ< †]Ëeˆ;»/‹§o…&›YM`¨?¤0qþò“\¹ã¿ï&Qó·ecŤí|,!E«¹X⤋_P—²|âײï9ëœvÃ0x(¨&â·óS‚`Ð ·ŽULܾøÉÃÿ¸ãÈÏŸŠë@1{¹IDAT%EóÌbXɦTBwXß®e[ú]v3«Û23˜P–½=úg ”|5)&̤´gÍûïÛ²A,q¥SB"˜Lˆ†»~lä‡LúñÇF~ã{;N?«RI×tµîö+³úhœ&u×ÕT¥ôa‚Œš™AhQŸ“f@§9Ez…Õ$ˆ”¥ñfÇ;qâ=„CÓðÍWëè3#ˆ%®tŠ‹³I!i¶w‡“ó¨ åÆrNÊ=z7~¢ÊV+~åßÒB¯‚>úØBÃôWV,¸|ÌOš@ W:ظ‰?¥Îã fýÊ%Ž+¡/è¹Íž þ°´Ð®Oê)ÄÎçÑ ˜Q¯XIDATg“ñ$ù/·Ð)ýô‚z;P÷ÛtجÑ»^›ÙTTVxeÅ‚,¶Žä(îæ§’dÂ⢒-¤P'ϰûNc±ÑßË#ÔOߘYÍ÷Õü†•X¶«¹éXƒèOŽåyÖ¤ŸG'CïO}ôð@eûÜÛ6zÒ:’£¸Ò©¤xãUË èGuŠ0ª®BΩϠŸr²\¨e9Iï ¬Y%4“m ç$|´¬ßòè”[óè>”™lý{ê ¿÷½ÙG2Žïœ"¾Å•N=ÿ·Ñ^Ùá ^] >™Ï' õÈL¿>š=pÔÝ·ñ?Ïçê8Žã¸ºº#/úhö@užsg˜zXêi@²®ˆIDAT8$?È«¸.^‰KˆTV“æ7€‡ E] ¨9±¼òhäÅžšb«Eyƒ¼’Cñy¥SHž pû ûwm;L_Í7šcâJ÷"y‰ÙšxyêJýŸoàZµ`ɨ?M6¬°®®ný²—ÈÒˆ –ÿq«S«gœuáìÿš}DpÀÀª/š0Ví[)Ôq°~ÙK–Δ!Ö !ÙÅ•Nmzö’‘·LŽíž/Äx¡1Ê7q'¶éÙK$„_™§IDAT€3'¿î…‘Hþ@£²?µjÙêQ׌ŽÓg¨ƒ"3‘²\fhºQ>Ç•N‰I)T|N¨˜)n ÀÈÚ$õÌ@êZd6>uñÀ›ÞðÂN‡àϦO°µ ½¾!±jÙêQ×\({Uê -Á“¢Y¦OÄ‹Äç¸[ç™”€û)õ¡lÀ̇à¾1 a €À$Å_¿åòKH³²Ð`X ¯c7Ø}¦ï–W~Z2±ï‹O¿j–áºùߺ6 É%\éÔÞÝ?÷3@«>3W:¶-À̇*b“ÎóìÝõ³¦HÖ;|Ö (p(ã% !j\éÔ¾Ÿ~‚V}à®WCˆíËŠ`סعìyIDATðÑ÷½»b,ìû©‘\aÑá¿¥"6šfÍR°Ðt_ÅŸ²Õ{ —°8Xach›Ýw} #¡¥'e×ÎtãNݵøk ˜öeÅ©'Ÿí¨Vˆš?B¨|±IDATE¨M³a¹ª†~Á åJÂ9ݱaYÄ¡NMŸÿ% HŸyÌ'[÷viß>¾½ºÓ¿ÿà«”g³+X~XæîZåŒ?…¸Ä¡N>„¬~9Ï¿X{uÒ,·MkõjžaÉÌ2eB불ñ§ÒD>ý°éq¨S[w60§öê°aËÞsúwâqˆ×BýNˆ×&¸äª—Ÿ€Ko»]]0ëg“f5 }%#ëçÍ+0^â‡:eðò±|\HH±ûkwl[tÇå3ªiê!,¶\Åkè9›$¯QÖ׿À³ÙJò”–S럣Ôl›lfØ„ 3)m#C.‘ãIDATéO!ˆÖ%,¸£"OÔ7 ñDbå‹OŸ7é;‚H1ÍÈ•n£V ù6„’¨¹+¡Ï©é‡šg¨›&dÓ4G(ei*¹EF…ÚBúª” f9 çЖè“A‘BàÍú©%w [óéÞ%w »|FõË·¦f>ûÏÝŸýçnMNÃþC‚i:'Xõ}~³ vûžeÍJ67ÅÍT()žTîÒ0»`ü)Ä®Ö%(’Ë¡V(8õ¬!oÿã¦Ï~õëÿuÜ„-5a(;v h J&kyi sŒËÊ=ô•hÈ|ü© ßôp€ÿ-Ì:®têp´AÙÞ²f_ÿQmàË×zÚÉ Ï¦ïñýIDATùæE²Ni¦ZÈÙÜX›1Ü:³BúÎp&ãOѻޖõX^ž4”1r¨éq¥Sž=SÙ^4å3)Qwʰ^±¸ Åv®|ñi'ªü'Ϭ ³ªÌ¬¥©-+ÆÓœa9ËyôÌÇŸ‚ôßÒõ¤!„ÏžC¾þé_Í»qß(FÂÊŸV¦Ò}'Ϭ ´¼ wé \¬4BP úÚ ×7AsÆÔy&N¼ÇÐ6»ÐtioãOéÛet÷IÁÎ-]=’ù½Wr»úF5e5­«3h¾Y˲ »r/ã%L]xÎC×­¾d(@µœ’ÓqòÒq·+cä´ñÞÆŸ2ƒr^Ï–Ód¨J”y ·Í·{D$IDATRÔ’§™6±,›‹x×eú’¡Êv®ÇÉËÝ/|i¼¢š_uÏãO9ÖhOÄÝp ®—ÇõS¶›g`œ<$CèÇA2žÇŸJ뜔'•¤ãWć¿L‚qòßÑ V-x)JGŽãOyŽáOˆ²`:ŒÉu\éÔ'Ÿ­lŸ}Û'®Aòš.ä&þ¡]OnéªÑéïŸêó¦SEmµ›‹*æ\§ÞüsŸ‹þöÙGQã‡øSžÜÒ%4DH§¼ Mc×ñ}[C›ýCúäá³/œõD²þí$ÏóÑ˜ÐØxúU7©Ý+t²ðqü©Ü¾+ZH8÷§‚¡Ž A¸ÀÊ4ÞIDAT1]O¬ÉóÉÃgÓHU^ލC|ÊçWÏÍË$uJ%HX¯Š[žg³[¶Îl €Âç[0^â‡ñ’"€Poù—LŒ·1 Œ—€8À¡?•Lˆ Ô[gKŠä LJ0_ ybÀòYõ­ ³G rúHŽ‚þâ‡þT")pÄò/‘0³€GÊsÈúÆê]†öè3(Û†Õ* ›CÒúSˆúS‰„ñël:Šì¹ôBíC™=‹@P1KS‘ÌùøSHàtÜ—!ÞhMçO‘!¯I!ŒÑÈpX—]2 r02b‰SkðtÙ^%†Î‘AÆeeIDATfà¦Ïc9‚Ãû€Ù"cñ§ð+ÎKêÔ%s¾xmú©–Ù.{èKh'aí¿åzãä!…¦Û»‰?¥_”`÷F Þxñ!¨SH&Èbü)}¢å ;ËüH†ABÒŽoãO!¹ê’Q| ÉÜêTå¬*¨¨„ªY•˜·°Ç1IDATƒä;/q€Ãx G©‚kg¥Dª²²jiU!/ÓË·¶!þã% Èô¸Ïp†Òlq9ÞÎ?ПBàÊŸª¬¬‚òꥳ`iUU‹ík«*+«*+«®]Zå‘Hž€þâW:UUU Õå×΂k++ÕÛP ×΂ªªÊꥠ â°®À±JùK«IðÊô!Y÷‚«ìòŒìÆŸÂÙƒ<ÀSª„¥³àÚ*€òꥳʗBUùµpme¥ÝjðªÊ?² /§<À­NUUUÝV–&(@iIæãO)áäRË—w‚¢_ïp'â?þ”%†óY…ÊW N!™ ‹ñ§ÌÞbö|»‡q®Sã¦>  ƒ, °,²A–eÙ` Ù` îž:ÆCs‘\ãO!.q®SgžÑç¬SOJ&’Édrÿ¾íÚ·'ñdBLˆÉ¤˜EQwì&Ý]F ¿ÅŸB§)'p®S›>ý®þP#`&dÙŸ‚`0” X6€wv‘`¼ÄÎuêÔSN¸íÆÑòöƯ~xJO}ž‡šºî”hÖÚ wfÒIDAT¹¥?… j\Í£¯ÿüû€Hm7_ˆ`ŠÁî½¼œ H!p®S‰Drðé'ÈÛþwë³úéó¬Ýð…&ŸE(pПBà\§x!¾fý7 ¬YÿQž$¹Í+³õ+V U¯l6+kè»™å1Ë€xŽ­øSÊö¹·GG@ ç:ÅñˆÁ'ÉÛï­ÿFÙVóÞúÏ,ëÑ? ÔψÚ*«ñàôEÐÅKþ‰?¥Ž€®}áÆŸV¾·$©´¸tå{¿x‘ˆ¶~½Ã¢ÑB‹ú½ôe)+ÄK6Md1þ’8×)K\:2ué¬^û¥²­fÈ6mj˜þ+ÜBIDATʪ椂‘¯¡ôí¥)¢ ⵞE¼?eºÏ¹…sª«o7õ!åã?^~G½·]›Vwݱ­&¦¤˜=#šî–Oœš™‡xˆÙéõmü)Ä?¤Q§”9)±…çñ§Ì\'ãç ×ñŽ?…øÔ)$d1þ”>ãñç¨SHÚÁøSˆK<Щy÷Ì•7¦Þ{»ûÚüÆoñ§œÀ­NÍ»gî„á­ƒ€+aSIDATü>(9ã›Oÿï¤3~é‰YH¾‚!#p®S²µ§ò3E¸øÄàKØúÁï »ø|@ÁB q/Á“@ ï>Ûç¼IßiwVïqY-’>º—ntê•-åÏ/¹BÞ~}îÓÇþŠIÔ%?Ù4ÿwÊ+.7x(A\øSÞˆÔĆR…øç:Uõ¯ß}²aó¦ÿ¼{*ÿxÇ.1΋B›áñbÖ-š·@7ce¶"Ù%Î^…ä&PŸe‹¸ÐÙŒlùSoÍë-oÄãÉ·æõþÍÔ펫B2«ù©„ȼ²¥üÖG.ï®ÙQ1 öÊÔ–ÉfoÄuÝn @ rCúü©×ÌUË÷IDAT/}èÕwð·UwÿzüË F«åWç–¾½Ú²Ñòݪwì¶e§ƒ"þ¤¼G7ðɱ¸Ò©ùÏoxòÑ«üŸ¥ÿùê5Ï=©ÙÛçx˜8í‘ùL#Wb¬Ný‘2˜M=ÊPyô-ÖƒŠ¦!}þTS’Ty}i8åâPRR6Ê.ÿ犹åpùøÇ^Y| Œýë^ÃJäÎ)“±.j(m,¡”HšlÞª­æXÔ•ËÛMÔ·îJ§ê£‘½ßﮆêøëÿj%éî~„\el!ïz`aìï±bñ3Ù©òÝä?[) r"4{5ÕyÈ(g Tk¶ËnfMšv•<–Ga†âUâÁ:Ï>ôüSëÎì‘ L¿}R #Ž~f§‘NiEã›PÚàØyñÊëAôùS¼ÀÿåÆÊY­œ2ùR¾©äÿu÷<8cܳ_€+'o³ÖIDAT°Û®~„BHQPõùÉ­!T«ôs íšD>Í.MjRòN!®ü)™Ï߸ìó7/€p¦MýC09ä´iSÿn®»×è94õd×ñªut©È¸ô§ÿ’‘;f¿‹6À”É—Þ÷ð‹S&_z€OpÆ8X»i³ûC0s@Ô<‚) )µÑ˽kC“ÍåáÈ2Jö˜€èRyù|ß­Óµ³Qó™Ökô®ÙýÖc}ÑC«!ôÈ­«GvꂌnQ¡ô³4¸ô§ÿ¯xmÚ´qJ~e{Ú´q²ZM›6îÍ×^sc¼Œe§µå)¸iÈ}AÅrÓ\ðL§ ïëÉæF`IDAT"Us¸QH3Qmø‘2ÜM7e k£Ì†¤ïý}yyÅj«\³Ä…ê¹EA¢¢\¬¤ÕQmznQ·'ŸZRT Àv¼ázR\³ùfõ¶¡@Ø&çwœBèóôei&ÑÉíê«¢´“|Ò4`ü)$£¤ÏŸÕk÷ׇK tW-€TÂOï@ßnr:œÜaÓâIDATÞ¿S0.ñÃ03} N!%}þÔªº)þÔ;8îë9µ‡›à›¯¹h&ÙŸÚUÛí†Êt4ž}òX¤À½Nmzc|ý¾ D¤d›®ƒÎ¼x‰¶!yHúü)õ€î–[–ß¹x‘òñO7ÏKS£Hfp«S"hØuëÄØÏbãÿIüÁ xäóoyb’—¤ÏŸRóØcé3ËŽ?ãV§‚^|`PÛ¶­Ù ›µG¢]û_ä‰eH^‚ñ<ØÓ©Y³f©k1 >kØd¦} ¤&‚(dÆŸBò :5~ü5é³)èE꣇*ÛçÞ¶1=æàbºÜÀ†NaiÄ„g«—éIDATúÌdëßSOøí¼ïÍ>0Œ±¨G9®K@2¡™é×G³Žºû6þçù\ÇqWW7`äEͨÎsîŒtyXˆAB2 _ÃCŠN€¢.PÔœX^y•’ᣧ¦¸1@Þ0‹àŠøÔ)ÄÜ~Âþ]Û›íR‚²êÿuüXÄo N!BûTê ßTÿ瀫S ®zâošªÚthóïi§ÊÛ¿}äKgf 9ê’!ÌbÛëƒIñ ¼¢S«,õ'홺ººõË^rf’[ N!¾ƒxV-xiÔ„±jßJ¡ŽƒõË^2t¦Ô=ÃwsÈà(/‡@B2 á +ƒIDAT4ÈþÔªe«G]38NŸ¡ŠÌDʲuœGÏEP§L`+,z}CbÕ²Õ£®¹Pöª4ÔA[K‘R+9@+jSN€:…¤»ÊÜòÊOK&ö}ñéWÍ2\7ÿ[×F!¹ê’Q(ŸïC%BÔxð^,¡BF€:…dÇïïC ™ÿÈâ`j:°OGIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/checkout.jpg000066400000000000000000001662471203611042400307740ustar00rootroot00000000000000ÿØÿàJFIF``ÿþLEAD Technologies Inc. V1.01ÿÛ„    $.' "+"(6(+/1343&8<82<.231  1!!11111111111111111111111111111111111111111111111111ÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ÷ÿÚ ?½á½E»ð¦Ší é%ÚÂò5ŒEäc’ÌÄd’sÍtF1°‹røkÃðãÍÑ´xóÓu”C?¥Z‚{!´Ðáám €WCÒHõ1….Xö$?áÐÿè¤ÿà _üM±ÿ„WCÿ “ÿ€1ñ4rÄþ]þ€ZOþÅÿÄÑËøEt?úi?øÿG,@?áÐÿè¤ÿà _üM±ÿ„WCÿ “ÿ€1ñ4rÄþ]þ€ZOþÅÿÄÑËøEt?úi?øÿG,@?áÐÿè¤ÿà _üM±ÿ„WCÿ “ÿ€1ñ4rÄþ]þ€ZOþÅÿÄÑËøEt?úi?øÿG,@?áÐÿè¤ÿà _üM±ÿ„WCÿ “ÿ€1ñ4rÄþ]þ€ZOþÅÿÄÑËøEt?úi?øÿG,@?áÐÿè¤ÿà _üM±ÿ„WCÿ “ÿ€1ñ4rÄþ]þ€ZOþÅÿÄÑËøEt?úi?øÿG,@?áÐÿè¤ÿà _üM±ÿ„WCÿ “ÿ€1ñ4rÄþ]þ€ZOþÅÿÄÑËøEt?úi?øÿG,@?áÐÿè¤ÿà _üM±ÿ„WCÿ “ÿ€1ñ4rÄþ]þ€ZOþÅÿÄÑËøEt?úi?øÿG,@?áÐÿè¤ÿà _üM±ÿ„WCÿ “ÿ€1ñ4rÄþ]þ€ZOþÅÿÄÑËøEt?úi?øÿG,@?áÐÿè¤ÿà _üM±ÿ„WCÿ “ÿ€1ñ4rÄþ]þ€ZOþÅÿÄÑËøEt?úi?øÿG,@?áÐÿè¤ÿà _üM±ÿ„WCÿ “ÿ€1ñ4rÄþ]þ€ZOþÅÿÄÑËøEt?úi?øÿG,@?áÐÿè¤ÿà _üM±ÿ„WCÿ “ÿ€1ñ4rÄþ]þ€ZOþÅÿÄÑËøEt?úi?øÿG,@?áÐÿè¤ÿà _üM±ÿ„WCÿ “ÿ€1ñ4rÄþ]þ€ZOþÅÿÄÑËøEt?úi?øÿG,@?áÐÿè¤ÿà _üM±ÿ„WCÿ “ÿ€1ñ4rÄþ]þ€ZOþÅÿÄÑËøEt?úi?øÿG,@?áÐÿè¤ÿà _üM±ÿ„WCÿ “ÿ€1ñ4rÄþ]þ€ZOþÅÿÄÑËøEt?úi?øÿG,@Õð§‡4+Mmo&Ñ4¨VÙCÂâÆ Þnì†V*Souäºr¦²©e¢=&Þæ9Æc9ɨ (ð|&/è“mÎ4ëvǯîÖº!­áñ~(Ö-o¥Ý112 ¸YâÍ…zt©¸+#MßUý}Åχr ËkÈá’Ib…×ii#p  'Ðuõ®|R³L"îTÕM7Åoÿ j0XÜOÓîíçu·Lc1Ȫp77`r äšá¦õåߣOd¼×õç¥MÖÖ×Ë̬—7‚fð«]\}¼jž_›æ·›ö_õ»·g?wåÍŸ7'•ïÿnÿ×â÷y­ÖÖùÿ•™™ªëÚ…–‰â8îndŽ3{q ʹ«‚bݟч¥L$Ý:iîìýW5ŸÝ׺~L»%7Ûò÷n¾ÿÏÔë¾ ùÖ~ ºº·–h|œIp ˆç¡=*äÿyöæ1§wNýy_äcYk°é1kwñËsq¤Çqµ¢ÝÊá–r1"³K󢃌îéÎ%&£ý§§§ŸÜüËkV×E¯éo•¼¿Ì^3ºÛYÙÚ\ݛԴýÕöøô,¬$r8 ¼¨·&’ëÍÿ’ÿ˜ž—¿K~:á'],éª5uöo³ý£÷_s~ÿ3nvíçîçYu’0ã °óÎ:ÿ…99EIÛf×ÝþbŸ/šOï×õ¼š7ˆW»Ó-ím7vs>_þ=°ví ÊQq§M6Ü]ºÚÿ…ɵõ]íøØ‚ÛÆð¾…>©qmmFH–¼Ë¤ŒÅvÊËÆ2O##8¤åeï}Û_øÕù_×îó6|-¬Ã¯½ì1¬u“ª»[\ âpà «€3ܪNñRõ_p¶•Œ+7’ËÄ’Zx‰µ+ké§•ìf¿Ù.cÁ AÚp@9çœ9š¤×ÚIßÏ­×§áùh׿³uòòeMK«M/º‚Þ]Îú¤¦Þå'¸yVL†!€bv‘´}Ü{Ö•+ä]bßÍ$ÌþË—i[ñ±Ã]JïÄWÖ–×——Q¦ŸnÒy5ë— ¹oâEàc=zÕÃTçä—á«ùµ§èÇSÝ—'›üô_%¯üÓ>Æ})\ìgÒ‹€}ŒúQp±ŸJ.ö3éEÀ>Æ}(¸ØÏ¥ûô¢àc>”\ìgÒ‹€}ŒúQp±ŸJ.ö3éEÀ>Æ}(¸ØÏ¥ûô¢àc>”\ìgÒ‹€}ŒúQp±ŸJ.ö3éEÀ>Æ}(¸ØÏ¥ûô¢àc>”\ìgÒ‹Ë}šî n[™K—3*«’B;¶ÒA$Ž„zeN)n4z†ƒhÖÖh󊑚”PðÿNY~øwrä>—mŸÆ%ªNÀ´Ø¡®|'Ðõ™üéžî'-äHªë•5Õ \ଅ%Í«7´ éúœ–:d(Wž¹,}Iîk Õ”Ýä X¡ªøjwn×z¥ì–RJ“5ƒÌ[—ÁÛ¼ ¨8ÝŒç=H¨ƒåiïmPåªk¾…³àëøI] Âñm¾ÍÛiMÙÏ×=è‹åæ·[_×d&¯kôþ¿¯VP›áΗq¤êºeÉš[}Nå¢‘Žr‡`ôÈ>ù¤´Œ"¾Îß}ÊNÒo¿ù[ôûËúç„­õ­ ô›©%Hœ&^,ʰaÔÕES—¾§Ù܈ǖ<¾Vý íSáÆŸ¨Ý]ÎÓÜÁöÄŒL°Qæ¡ÊL¼d8Æ3ÐŽ Ô¯wn÷^O¯ßÔ§®ý­ê¿àtÿ#/Å^ÕßGKËËÉ¡ÔÖyîÏ”$‰62î ¼dpßɪ‹ýì^É)~?×ü0?‚_/Ášá­Ÿ”dkûé}«ícQù<ï3é·f6ü»vã³Í$ùmË¥¯øï÷ƒÖ÷ëoÃa“ü3·“Hm95[ø¢ŸÌ7EDmö£!™÷)ù²8+ŒdãŸ-”m¢¶žŸ¨Ói·Õÿ^ƒçøe¥Îšš<·>^¥o (aû¿(|Œ™F\ôªr¾½y¹¾d¥ky&¾LK߆ñÞniu{ñ4Ð}šêD©º‹$…p#+´àÒÒïM›^kúÔjêÖÝ^ÞWþ´4´ZhÚ…í噓7‰´GSË]ª¦8é¹µ·Õ¿¼J+O%oÏüÌx:M;RÖµK‹Y-£r^+yH- dœ¤¯,Xü¤ŽG½ýÝ%_ø ä¿ú„ýêŽ_×›ùš:ŸÍÖºu‹-Z÷Mºh»ù)« $Žœš˜¾^ku×îÐo[y.~ZÝê ©\ê7¯©‡G†ðlÌáTmÛ´ääcœœçŒTZƒ¼{¿ú?!5̬ûÁ¿©‘áχ—³›ô×®.âµþÕ–é,‡—äÌ7–G$ DZÚ[#µ*mB;î—Üõõ”×Gøè–økbâK{Ë»y¤¾7ñJ… [ÊFnT‚¤u (¾Uº_î}?­Aë{õ·á³§|:±°»ÓîÒâáîl¤šS#‘û÷—ÙøëÇlj¨ÉCm­oÆâjû÷¿áoÈ5o‡Æ­4·QUaY‚ˆ*WnsŸÂ”_%­Ñó|Ç/{îkäÌÿü?7ÖzÕŠÜ\Ý^GrÛ¤Éä÷|›”Œ‘žƒíS³òæMýÖù÷±[ú¤×ëòõ$øo¡jv ¨[ÞÙ=¦ž$Sf“à S›rÂ6`¶HÆO­kÍî+ï¯ÝÓúó3·¼í·ëý~G`4Ä!>¸¨¸Î}¼ ñkwšžŸ­_Y5ó£Ï G £P£ï! `v4Aò.^—oï½ízÚÃì¼ †£%Åž¡y ¬“µËØ«(‡Ìaóq»äíÜW'§JQ²#Õ%eäŸõý0–®ýzùÿ_^¥+O†v6é«mutßÙRM%²¹^|ÀAVàd ñÓß53o‘ÛWÊãýy”¬Û¿V™™àO‡—pèÚCx‚âðO§î1Ø¿—åÁ!ÈÜ ˜àðIldâ¶›[§­­~Újgm×KßñÐÐ…ÖW u&¡¨ßÞO§'ÓMÝ;îÕ¯äK_uïóiðÛO²µÒbµ¹ºŽm"V{{€WyV'toÆ œóÀíÒ«žÒRò·ªþ¿–©§ÕßÑù^§Oýš=*nýš=(¸öhô¢àÙ£Ò‹€fJ.ýš=(¸öhô¢àÙ£Ò‹€fJ.ýš=(¸öhô¢àÙ£Ò‹€fJ.ýš=(¸öhô¢àÙ£Ò‹€fJ.ýš=(¸öhô¢àÙ£Ò‹€fJ.ýš=(¸öhô¢àÙ£Ò‹€fJ.ýš=(¸d¾Ô4}xßçÔ ™±çŒÉ" ÚŒ>ö7HÄmT'`©ßÚ¼#¨=¨j(Ê~EsàÝ<¾£w ÁoH±/‘î§ûƶÑ% Ž£û*_ú j÷ÔüEv8,|ôßo­ÞÊ›ŠîI## àŽ¨ ƒô£MìDŸÙRÿÐ[Pÿ¾£ÿâ(Ó°öT¿ôÔ?ï¨ÿøŠ4ì'±û4/5Æ·{ Q‚Îï$jªRI^]ƒQÿÙrÿÐ[Pÿ¾£ÿâ(Ó°®ÙRÿÐ[Pÿ¾£ÿâ(Ó°Ãû*_ú j÷ÔüEvþÊ—þ‚Ú‡ýõÿF€?²¥ÿ ¶¡ÿ}GÿÄQ§`ì©è-¨ßQÿñiØû*_ú j÷ÔüEvþÊ—þ‚Ú‡ýõÿF€?²¥ÿ ¶¡ÿ}GÿÄQ§`ì©è-¨ßQÿñiØû*_ú j÷ÔüEvþÊ—þ‚Ú‡ýõÿF€ŽK)ãI5»Ôy[ljÒF œ€6òp ü m`$þÊ—þ‚Ú‡ýõÿF€?²¥ÿ ¶¡ÿ}GÿÄQ§`ì©è-¨ßQÿñiØû*_ú j÷ÔüEvþÊ—þ‚Ú‡ýõÿF€?²¥ÿ ¶¡ÿ}GÿÄQ§`ì©è-¨ßQÿñiØû*_ú j÷ÔüEvþÊ—þ‚Ú‡ýõÿF€?²¥ÿ ¶¡ÿ}GÿÄQ§`ì©è-¨ßQÿñiØû*_ú j÷ÔüEvþÊ—þ‚Ú‡ýõÿF€?²¥ÿ ¶¡ÿ}GÿÄQ§`#ŠÇÍi-nõÚ&Ù Y#%àü¼F–½ƒm ?²¥ÿ ¶¡ÿ}GÿÄQ§`ì©è-¨ßQÿñiØû*_ú j÷ÔüEvþÊ—þ‚Ú‡ýõÿF€lwNð.·zeC4bH÷(9Á#oàþF;'öT¿ôÔ?ï¨ÿøŠ4ìý•/ýµûê?þ";eKÿAmCþúÿˆ£NÀÙRÿÐ[Pÿ¾£ÿâ(Ó°öT¿ôÔ?ï¨ÿøŠ4ìý•/ýµûê?þ";eKÿAmCþúÿˆ£NÀÙRÿÐ[Pÿ¾£ÿâ(Ó°öT¿ôÔ?ï¨ÿøŠ4ìý•/ýµûê?þ";eKÿAmCþúÿˆ£NÀÙRÿÐ[Pÿ¾£ÿâ(Ó°öT¿ôÔ?ï¨ÿøŠ4ìý•/ýµûê?þ";eKÿAmCþúÿˆ£NÀÙRÿÐ[Pÿ¾£ÿâ(Ó°öT¿ôÔ?ï¨ÿøŠ4ìý•/ýµûê?þ";eKÿAmCþúÿˆ£NÀÙRÿÐ[Pÿ¾£ÿâ(Ó°öT¿ôÔ?ï¨ÿøŠ4ìíln­/"¹‡V»rŸ+G9!e-”]¿6åoá> •)Û°%ÏÚ­b˜Äð3¨fŠB»£$r§i##§Bk!“И| ÿ‘.×þ¹Áÿ¤ñVÝŒô6·ðþ³®¥¾„Yýƒ¾’çýd£™‹éǽgOÝ…5ß“m7qþ½u*^ôåóüˆ]Õìm-5M;I€Iq,/}t–épæê`ÊKDûÀÂåU‘†î¼Œ:Zò§ÑGO+/ø+~Ÿ|=›õ×îþ¶üX\àgöªÛSøš–Žºêévöæù·>©–Ü~æLnRÊ=9â³ÓÚkÙþq4בۺ9­P´‡A¼Ó­uí2ÎÀiÌöɤÁ Pj³8uPwýÜ(!?1$ò1¤næ¯ÒQ²òº×ï¿’±*Ézß_;mýo} MR|K£Oq¨›%j¤hÇì.†”å˜ œÇn½•KóŒtù;ý×ôWìL¾å/Ñ~g¡ÓÄkPÍ‹õ=VÌ;ËeaoæÄ¹>l,ÓoPV =×ë éJ§fÚø lþO&úš%yÁ-÷_~ß?ÎÝŒ 'Ä÷–ç@´²Ô’;ilæž ò‰2é”\®|ÆEƒŽz¥yV’îå꬟ݪº½ïóF7Jׯ®¿Ž­o“5îµmZX’Ýem2êÞÚçtEÄÍrXdaO–qŒy ñXó;)¥ßO5s[­¯¢ôf’IsFþ&×/á{ù¯¿:\¤++ø‰®§šÁ¤º·CmÓ§2Ä 1(Lj¥Ø&ü'ŠnÖj.ëÝ´½o-mµ¯­èõV~öžŸ×§]„·Õîõô»G]TKbHí¼°¼rlYs!‰Pä¶ÀB¨;»œ.ãi%«Œ´îÔ´]õK¦öº±/i+éx»ö]~ç÷l͇ºæ­«_·ö–­§OºòØ¥Ò4öÒnyB$hÀËœço=I¸¥Êìﵟõo˸OI[m^Ÿ×ü3;ª@yþ°ú]¿rt½WQ{¨-%ýÝõ¡Âa¢nKF>ùPrä±äVqn)òjýï]žò[YZÉÞåMhœ¶Vü÷^}<ßUc;Lñn®t뻫ýfÅ™ e´7°‰ìfirÈÐ%± dóÀëÞ”t{µ¯Nú¿>š^úo°þ'¦×Óü¼þvë±sÂZ浬jÑÙ¾²²Ãlgf’ØÅ0º äg” Þ0%Qx÷ù©Ýò9[T¶ó¼×ä—àöºr÷å¾ï~Ú/×üˆ ½—\¼Ðvø¥Î¥%Ó5ŬKo»Oo"]Èfå åy»¥8%Íî»®]þqù+öÞÚo¨æìšjÚíóþ¼ºí¡ÙøJêæïDW½˜Ï4sM ”¨Rá%t€É 3€{ ¼bû¤þô…kJK³d^=ðV´06Rðz”ÔI]ÅyÇÿJEÿò9È4OIÔlâ²k?Cª\¬Mk¥ªÈŠX¸/PìBƒòtAÖ´ÅÊÞš¿Æ*Þý^ÏS/²¥nËÖÿÖŸå E­ê7zÓÙ.´ÿi–{¨n4ôŠÖ0 o.` ç Ëe[Ìàt¬½/î¶ü×»ù«=]¯s[rÉ/4—šk×M:ºˆµ©/4Ëoí=.Å+A”÷Û›¨Ú$,R/$–$— ²EPT ps¼›æ›Zë-:é{yöwwÿ,öŠéçóþ—~½I¯µ!©øe.®E‚ ‘îÙåà‚Ç…ËlàõÎW’†‹T›K»æ7ÓEÞ夜û쟖ŸÖ¯m?øJ5ÛgŽ[õ0ˆ`‡P»‡ÊË…Ñ£ÏQ‡ó_×äÇN·?uË—[6½[Ö?ºþò ¹¢¬÷W¿’¿7Þ¬þgo¤}«û*Ïíï¾ïÉO9°_wß5¤ÒŒšŽÄÅó+÷2|v³6‹Û:G1¿´Øò!uSç¦ PA#Û#ëY+ûH[ÏÿI‘zrJý¿Trzþ¡¯húåé—Q°I&[Hæ½Dû$PF~ÐFYÄÁrÀ Ìù±€H4¢þÎÚ¿¿–:}×û¾Ckgåú•b×.áÕíä¾ñ-¢]¤\jV³C$l€]•ÄŽ7eT´ çµTmvž›¿¡¶ýßÈ—{]kþW;ßÞ]ßh1Ï{1¸o6UŠà¨_´D„r`>eð9ÈàÕkËՕןõ÷l/µ$ž—þ¾ç§ÈÙ¤0 € ( € ( € ( € ( € Šì\I…›F·%ÊiT²Ç€ ‘œgPGƒµ[¿3ì·‘˜å\Œ²±CܤŒŽ‡ÖEž 3ø<…¼jAQû¸:°òï­jÞˆGiå7÷“þû_ñ¥t)¿¼Ÿ÷ÚÿA`ò›ûÉÿ}¯øÑt)¿¼Ÿ÷ÚÿA`ò›ûÉÿ}¯øÑt)¿¼Ÿ÷ÚÿA`ò›ûÉÿ}¯øÑt)¿¼Ÿ÷ÚÿA`ò›ûÉÿ}¯øÑt)¿¼Ÿ÷ÚÿAc;NðýžŸw%ÔWžEÚd¸¾yÊ®s…óíö\è(‹QV@õwÕÍ)¿¼Ÿ÷ÚÿA`ò›ûÉÿ}¯øÑt)¿¼Ÿ÷ÚÿA`ò›ûÉÿ}¯øÑt)¿¼Ÿ÷ÚÿA`ò›ûÉÿ}¯øÑt)¿¼Ÿ÷ÚÿA`ò›ûÉÿ}¯øÑt)¿¼Ÿ÷ÚÿA`ò›ûÉÿ}¯øÑt+êlz…œ–· Â)ʹ163Ù‘ƒÀÔµhÇâî‰-¬ãµ·ŠÞÙaŠT""º€ªÕ¹s;²TTU‘'”ßÞOûíÆ•ÐìSy?ïµÿ.‚Áå7÷“þû_ñ¢è,Sy?ïµÿ.‚Áå7÷“þû_ñ¢è,Sy?ïµÿ.‚Áå7÷“þû_ñ¢è,Sy?ïµÿ.‚Áå7÷“þû_ñ¢è,Sy?ïµÿ.‚Áå7÷“þû_ñ¢è,Sy?ïµÿ.‚Áå7÷“þû_ñ¢è,Sy?ïµÿ.‚Ät7ÛM2£IjæHšÖ*Tž<1úКNÿ/Ëü‚ÚXŸÊoï'ýö¿ãEÐX<¦þòßkþ4]ƒÊoï'ýö¿ãEÐX<¦þòßkþ4]ƒÊoï'ýö¿ãEÐX<¦þòßkþ4]ƒÊoï'ýö¿ãEÐX<¦þòßkþ4]ƒÊoï'ýö¿ãEÐX<¦þòßkþ4]ƒÊoï'ýö¿ãEÐX<¦þòßkþ4]ƒÊoï'ýö¿ãEÐX<¦þòßkþ4]ƒÊoï'ýö¿ãEÐX<¦þòßkþ4]ƒÊoï'ýö¿ãEÐX<¦þòßkþ4]ƒÊoï'ýö¿ãEÐX<¦þòßkþ4]Œ]{ÄV:4/ºDº¹Y/³A"³«»çüƒiÜIíŒd•]?ÔuíVâY.n&dš# Û¬Œ!(Iʘó´õÆH'Š›±O€‘ãœnB)é)÷EywÂfø)›…†ÞoR¼=+It³©  »Š†€Œòéü+«Øv˜‚€î‘ã{ªç¦N(¾|?óÕ?ï¡@GWF =AÍ+0A–!@îx GGÎÇVÇ\Ш%a&VèS©,p(h¼wörN`Žî˜ud‡áR¥“%N-Ù2ÅQA@$Œ#‚i›…… ·©Ò€€"yÂ1_&å±Ý-äaùŠÊUcg¹ÿ‘J-ÿÉÊ<¢-“#•,ºd g€õ«>U{ú5ùƒ‹JäÕ©"3œÃÕ•Î:a³å@ @ –HᤙÖ4Q–f8ñ©””UÛ°ÒoDKɾEþòœŠ#%-˜4Öã¤aLÜ,(]½H•B€ ( € ( € ( € ( € ( € ( € ( € ­©ÛÉy¦Ý[C9·–x^4•s˜ÉH~4çU¯ç~º®½:zvHõ9“§ý]Kw4PI$p¼ìŠYbŒ¨g }Ѹ“Ó’¸¯\ç1ü#âdñ=¬÷0iZžŸ2˜sÄ]ÔÀÄü¤`är:ƒ€ ¯›|3¹  zñH 7:–ÞXÒ)Ã:»#’)ºêsþØÿÐVš Ÿ0•R&˜“âÿëP;ý¦`Ïåùƒ`ã‡=‰íE€’`V*pr88¦/¿ãÀÿ×Ä?úgx¶[ˆ|9{%¢–” àuÛ‘»ÿÍeVêÆ5ÛTÛG=­]éñø[G¤j²D­åCŽ=[ÓØŽkÏ•8EEÇFrÉÇ–*+WÑVv·z|fŽI¼¤2„`v±ç9ÍzP’ksÑöu!íOÌv­zÚv›=âYÜß‘jªÒ¸ï´8çÉÇ8b*ø[\OèÐêXÞYA?1-Ú*<‰ÙÀV?)íœg¯B нÿUÿý{·ô  h&/ôcw&ß#{(ß+wï'8݈³×?}úçîn•­¿®Þ§>Íÿ_ä>ÍÝîmYÝœ:\bûò„p|É;ç¸úzòÕ_½£ý<‘µ7î¿ë¹§L¢)?ä+/ý{Ãÿ³Po.¡²€Ë;\à “Ø ‰ÍA]•¶ìŒ™/ÒkŸ&û|E° îN[©À ‘éÎ85æbÕHÉT–©l·×õ}ºyo~ªI8òGKîü¿EÜÕ³‰ãó¤—‡žO0¨è¼Ó?Rk³ NtéÚ¦æ5¥/sa÷¿ò ¿ÿ¯vþ•Ôb>@Z6 pÄ¥UÒí]mçŽö`ìÙrNÒsɨúû †ì ¤5Ýæ«òdu8뚇aXíRpNp:ÕˆّK$ »v7 `ŒG¯^ÿÊ9†1ÔÅ"¡u}Àœ…ÛŒcÜúÓNâ4†(™Äo&Ѩ2OÒ¨ÚÊn-£ŸÊ’$e˜\Ò€%|É<Õh%wg9÷•-Ø‹x£ŠF3¡—vàÛvŒ` O§^ßÍsÄjw(8##8=EXˆ>Òßn[D¶™™†àà GRNxÇùê(ÅP@P@P@P@P@ô{©]U@’ ÚrlSžçæ,2BôÆ8ÜÒ¨ö €<£á‹…øu³k³Kk D,I6ðúV’èqRè×Zi°ZÜCx#XÃ$…ƒ`c<ŠË÷‘ŠŒRþ¾A˶Ê÷RÞ]Ü[ù¶ðER™Övfo‘” lûÞµœ)4ù¥¹môDõÒ@PlY&WT,pG·¯Ò|¹€€¬!]0]À@ÌxÏ=Nyï@X·âÒ3)]Í=þ”ÀŠfºŽmÖÁHeçÛ>ãÖ€çê?ÝOËÿ² V&·"n’Kc¦IÍ|ãìËW.óÄÀ*0$’8L@ ‚2Ph”ñO†7Ø3h6ˆ·R1W¸1²À;GQÿ×–­/©Ó—ÃF·<Õ´Ó®·EXø¡<@—Z·ËM’Ÿ3;€ ´}ö=XŸOLs˜¥ ªi½½OK[ *.4í~šzy¥vž Pƒ…ÓnÓk³K"BÄ“ô  è0ZÜ[Ü\{h&ÇÌ.~Îü3·XãÜy‘º±éž¤æIt_×âgì×qtÛ ˜ï./µ—–âV.!+4vè[;W8ÏA“ЮQ‹NìTé¸6Û4ªÍH‰5)݈¢L²ÙÆzþn×ÉŽãΘ3• ó“õÿ=ë–¥iQJOE²óîZ£dcÁ£Ç³5ïʱ+fÚÎ#Êà“ù¶@ÓJKßü)+Y•¹™ átÛ´ÚìÒÄȱ$ý(zŠxD¨Ë¥†ÓÆr=é5p±F‡+)ÂLÐO»©8*í¤dgZVÖà=#Hó±s×Àu“ÔÐ^4|oEltÈÍF–êŽÄÁ@ÀÎþ”¬¯q“SFpqž´P@P@P@P@P@­jؤ@ÝÅ˺˜Õ»:ïPØPAÇÌn‹¸1àR`tÚ}ÂÏn¬­ž)j€<»áü‰–¿õÎý'Š´—@:Ë‹¨-±çHžŠ9'è5 Aý©iýù?ïËÿ…Ú–Ÿß“þü¿øPý©iýù?ïËÿ…Ú–Ÿß“þü¿øPý©iýù?ïËÿ…Ú–Ÿß“þü¿øPý©iýù?ïËÿ…Ú–Ÿß“þü¿øPý©iýù?ïËÿ…Ú–Ÿß“þü¿øPý©iýù?ïËÿ…Ú–Ÿß“þü¿øPý©iýù?ïËÿ…,:¬À˜ZIà”…Î?JÛbþäÿø'øPöØ¿¹?þÉþ}¶/îOÿ€ò…m‹û“ÿà<Ÿá@Ûbþäÿø'øPöØ¿¹?þÉþ}¶/îOÿ€ò…m‹û“ÿà<Ÿá@Ûbþäÿø'øPöØ¿¹?þÉþ}¶/îOÿ€ò…'ÛàÜT ·’<‡È—± ûl_ÜŸÿäÿ >Û÷'ÿÀy?€¶ÅýÉÿðOð í±rü“ü(ûl_ÜŸÿäÿ >Û÷'ÿÀy?€¶ÅýÉÿðOð í±rü“ü(ûl_ÜŸÿäÿ >Û÷'ÿÀy?€Ô2¾ÅbØêU±ëƒƒŠ”OPq}å ’/fŽ&e?B m‹û“ÿà<Ÿá@Ûbþäÿø'øPöØ¿¹?þÉþ¿m‹û—ø'øPöعqÿ~$ÿâhûl?ܸÿ¿ñ4}¶î\߇ÿâhûl?ܸÿ¿ÿÄÐöØ?çÇýøþ&€í°Ï;ûðÿüMmƒþyÜÿ߇ÿâhûlóÎçþü?ÿ@ÛmÿçÏýùþ&€·[ÿÏ;ŸûòÿüMn·ÿžw?÷åÿøš_·[ÿÏ+ŸûòÿüMn·ÿžW?÷åÿøš>Ýmÿ<®ïËÿñ4â/æÆ`µ·˜ÞI4M*mÀRàíb9'®Ò2¼RŠ^j:Œ—Í,ÒÊå¾cÂÊ£ P8Àúœ’I@z„ ¹ŠØyùéÞ€:Jòï„_ò&Zÿ×8?ôž*Ò]³y%ì–žu’ ¯'t­ƒ÷˜ rTp¨¥NeÎ쉟2ºµ*G.ª·‹kvöðJI|¸›uëŠÇŽËðö\ÎNö²kO[«/Ì)QÅTו$_´yXþ4ÀÓ¦{ûëM:Õ®u ¨--Ó¥ž@ˆ¹8'Í&ÒO¡¾«§\[µÅ¾¡k,)•¤I••Pçæ$mù[žœJoMÿ¯êâZè‡C©ØM šëi"ù%ÒU+æg3Ÿ½’:æ‹mæD—7vÖ‚?µ\E› Š?1ÂïsÑFz“éG[ÊäÔPrMOI*#ÊÛcV` œ€;œGlÍ´/5ĉ Q‚ÎîÁU@êI=I@£ÿŒßõÆ?æôf€ ( € «©Í5½™’Üe÷ Ï”ÒmRà3m^N'Ò“…ÕýÌvÒÉoyçʈJEý‹r»Ø%¸Éã57c6jÄcØ>¿ycot¶§lñ,ƒm´drã7 ãžà}EØËfký8ý¨®Y!q±‘ÙAÀcÏÄu䊥°…oš¿ ,FW^Í€¼ųø{ÓýP@P@P@P@P'‰ô?íh¡x<´žÉ,¼º`ü€äc’NzÆr<5áËx£Yè=©ÕÇÆ¡T` }ywÂ/ù-ëœúOi.€_‚O" )ˆb±É¶Õ,B‡RN'ŒÖ|¼Úì2âÞ!àdº`,?6ÜõÎÜã=úWÁbi¨R¥ËÕê{Ôåzî/k³¬Ú½ì±0x¾E¼‚FrüE}U•›[ËüÏ7×%5ärVs]YI¥Ø¥ÑµŽÍ„/}dÐKm *Q¡×+ž9PKŠöÛisîÕšó·—ü6ûšsYõ½ü¯½¿¦iw÷–×϶—sÅ=Ò¼‰"RñyjÞû;ÔíìïË­­ó»“kñ·–ŒŸ‹âþ¬’¿Þ®M¶¡7„`Uµ’Úñµ/—,Eü¿ô­Ù*ÈžãœÑk:v{/ýµÿ^¡ü÷*ßC«Eoq}¦‰oÄ·³ÛZÌѼ{6£F#`øùSp ¸ç+ÖWÙ]þýþííÓkêSÝü­éþÒ)±º?iµû~µuz–hlŒPÝB…åÚdRN 3)ä œÕ+î·ºôµ£.÷BÑo¶¾¿çè[jây±&­þn~Òëŵ¼³ýÂÙòðæ?6{Ôé˦Ö×½î¾{_m-ç`WV¾÷_–·ÿƒ×È­öMJóN¿µX57¬î ’Ü~ùÀ‹i\:†ùI?Å‚A¦ö»ïø»í¿ç·GF’}ÿ/ëËñ-bóíƒìCZùñ}“ÍûG“ö|3~î7¬ûÿ6vãµ)_•÷Öÿv–ü6Ö÷¿QGeòûï­ü¿ lX‘5 'Ãeô3]Ë}„Y¢ºÉ‘å@€ÇŒ9CŒq†îNn¢¼ù#³ºôëÃî}ã³”ºkò]>çóv:« cke»Jó4HÉ#g rI=Íi¶Ñ1M-w,iz‡Ø/nfŽd¹Bᣉ׆ÞÏ‚ *É·f%`¢&š9µ¦„NRB&-YÔüË;Á ¹…DFo0JÈĔ܂L†$†”Í8®Y¥ÒÑ~Ž:ÛæÝ½-¾GmÕ×ÊZ7òvü_¥q£j–ÖóZÙÎRïWî„Ûx]&ǦΠô(z šZ:iío¹òY¯Ÿà×v:š©µéê¯ú?Á¾ÈÑñë—Éi¦YÄñÚ[4É5ÄÍ ¥ÃFÈB6æ]¬qÇÞÔÝź‰mk}üÏO;%÷®åhÒ‹ë{úZß«"œqê÷ÐO¬ãZ·»kûo*ÔÉ2,q2Cæ+¡É’AÁŒbEȽÝ~?»Þåý-×o$Lnô—D¾ý/ëùX¬µË-/Oxf×ek9QÌÒÉ a$;ö?$› ¸ †88É´—*¨×ÙºÿÛ»kkÚö鵕ùn·÷¿àyz_®ãÚÎy†Ÿu<:ܺu®­!µÜ÷Båa0 Œù¸óra§Ÿ”Ô¦âÓ·½gé~k«ôÙuÓ¾£•š’[{¿–¶ÿÖö3„Ö¥i¬Âñj†;Ý.gkVŽñ3†R±¬“9pX~ì*¶:À”’‡tœúîï§ÅúíÔ¯ùxº|KË]¼¿Ëî/ÚG¨·‰bd¿Ö-,ÖX~Æ“XßMæC…Ü®Åö)-¼28Û‹†÷{ë÷[O-­µÖºï“øZiøß_ëklwÑÿÈFoúãózE–h € ( € (¾—{ªØi––`²“ìФ[þØãvÕ8ò¸éSfiñKö€‹$“K)TbÁwÈÍŒ3Þ”Ö€W°ÿ˜ýzý§L ( € ( € ( € ( € ( €*¦±žµ§ÚbžHvåù8FÎx+Œ`çÔc”À频d@Êr @]ð‹þDË_úçþ“ÅZK –cý÷ùV`3ì0coï<½Ûü¯5ü¼ç9Ù½yéÖ¸žíxíëý|¶¶›{zË®ÓÅ b€°Æ²´« g 73€O¶OæhØb€ PŠlÇ)O64}¹w(;O¨ô4y‡ìPŠ1@(*Àx ÐÃ$öÃl¥HÜd`GOÖÀ°º“‰-dÝþÃ)©ô¢à;ûLϬÿøçÿ@ö˜ÿŸYÿñÏþ*€í1ÿ>³ÿãŸüUÚcþ}gÿÇ?øª?´ÇüúÏÿŽñTiùõŸÿÿâ¨þÓóë?þ9ÿÅP+}‹¹%û,ÛYG)œ‚ÇûÞâ€&þÓóë?þ9ÿÅPý¦?çÖüsÿŠ ûLϬÿøçÿ@ö˜ÿŸYÿñÏþ*€í1ÿ>³ÿãŸüUÚcþ}gÿÇ?øª?´ÇüúÏÿŽñTiùõŸÿÿâ¨þÓóë?þ9ÿÅPý¦?çÖüsÿŠ ûLϬÿøçÿ@Û;FºqHžSöSŸùgêE0-ý¦_ùòŸþúÿŠ í2ÿÏ”ÿ÷ÔüUi—þ|§ÿ¾£ÿâ¨ûL¿óå?ýõÿ@ÚeÿŸ)ÿï¨ÿøª>Ó/üùOÿ}GÿÅPö™çÊûê?þ*€´Ëÿ>SÿßQÿñT}¦_ùòŸþúÿŠ í2ÿÏ”ÿ÷ÔüUi—þ|§ÿ¾£ÿâ¨ûL¿óå?ýõÿ@ÚeÿŸ)ÿï¨ÿøª>Ó/üùOÿ}GÿÅPö™çÊûê?þ*€´Ëÿ>SÿßQÿñT}¦_ùòŸþúÿŠ í2ÿÏ”ÿ÷ÔüUi—þ|§ÿ¾£ÿâ¨ûL¿óå?ýõÿ@ÿŠ–æ[‹;‘g,QÀJ™L7ÁU$cåž{ då0;o±6IÏ€Ò .øEÿ"e¯ýsƒÿIâ­%ГCÿt_îä*½L€ ( € ( € ( € ( €!{…ŽgGáU=Écßc?Ë «+¨d!”Œ‚A´ÒØ#å8'n{Œãòê(‰Ä!åÉ#HÛBÆ2xRÄã¿ zdúXÕª©Zëwm>ÿÓÔ¸AÊþDˆë"+£V AµªjJëbZ¶Œu1®.š=ÞD-?”Ê%Ù’PIÁÎa“ŒŒñÖÅF“²×kù_ó}mÛå}aK™k¡42¤Ñ "mÊ z‚;jé„ãR*Qz(¸»1#bgIá2¾Ù/ŸýU’$óäžàc’I$€ÓJâo”ªÚ½ª©bé€3ÄÑùnªölŸh‹‘H’ x]FSj6,H°›qÎÙŠa±ó&€ó9¹û< HyóhÇ>€úóqxõ‡¨©òݵ}ì¿ShRæ1 ÞÉ–O³3Ê ±XIq´sœu;HŽO¸Ê†fªÅ¾G¿O_ÃÍéÞÕ*/rIäY,ÙÐä:`ƒœGbjõ#58óGcšve{ù‡ÿסÿÚub4h € ( € ( € ( € ( € dщ¡x˜®¥N:àо»D–}9ð³[í8,¹taÀ y”ldrd Úòï„_ò&Zÿ×8?ôž*Ò]é4?ùEþèþB  ÔÀ( € ( € ( € ( € (>ðN±Ë+¸VGQ Œ;a¾c’¹Çà2höK(::´rǾCŽ `r£Œg$ž;tÐÆ© vœp}(Zæ!p½°|7 €ppyçñçßëYë{ gÊÒ‚wLtü:¤š¡ÉjV5߇Fdþú†—ž9Œ9çŠÇ N“Œwÿƒ·ÏcJmFWdÞXXÝBí¢®žX°YÌp¨\#1åX‘À5ãÎ/iÊŸ/žŸ¡Ö¿y¢•þòÅ®é&šáPà Ä2DFyË‘ü;²>_lžIÔÂBq‹rÒý?®ý¿VÎj­h—@¼™áö#ìÜä…^ =²@\ú°ëÐÞ&³£$ºÿ_~ß?‘4à¤íý]Lé­î¤š?6V±7R|ËÁp­§kpåïÐG ^O¹Š¬¹´o·Tº=w·UéØêOÙÅÛ[Zy_¡¡cjÖ«.ùšg‘÷³0°QÀöQŸS“ÇAëa°ëï­Îj•=£½¬Iü|ݹó–ºLŠºÛ±rIJAϼoWOr*l_’M}dao¤i’DÈï¨:³/bG’p}²~¦´÷:ÉýßðNkO¤Wßÿ‚Ï…˜céqÿm²–çTvmÒãþ¾þ‹Ž¤¢°­õ{‡^Ú£7Ë»äw`²I8WW «âuv²üÛ5çä§óÿ"Ë+‹¦û]ÓŒ¹w“€ŸëU¹ ‘†>˜ßgÿ?pßÁþ4}¾Ïþ~àÿ¿ƒühû}ŸüýÁÿøÐöû?ùûƒþþñ íöó÷ýüã@Ûìÿçîûø?Æ€·ÙÿÏÜ÷ðo³ÿŸ¸?ïàÿ>ßgÿ?pßÁþ4}¾Ïþ~àÿ¿ƒühû}ŸüýÁÿøÐöû?ùûƒþþñ íöó÷ýüã@Ûìÿçîûø?Æ€·ÙÿÏÜ÷ðo³ÿŸ¸?ïàÿŠêâÆæ‰¯¢@H;’UAü¨Ð]ØÁ q%ä%cP£2®p(ÿo³ÿŸ¸?ïàÿC}bH&êß#¡óŠ_·ÙÿÏÜ÷ðo³ÿŸ¸?ïàÿd·:tÛ<éídòØ:îu;Xt#ÐûÔÊ1•®†›[û}ŸüýÁÿøÕI/,$FI.mÊΤèi4š³vÕ4øô»s Ü'%¶†‘q–ÜU@ÆO×§ Ç=-:r‚ÕÿV^F“«)¤ŸBçÛìÿçîûø?ƺL†¥íšË+ý²Þów{ÿµúP-Ý„±œQ ±ÉgŸÙíî"|…V\õÏqù M+‡üÃÿëÐÿí:Ñ € ( € ( € ( € ( € ä5ï æãídyG` mËYr@À’=Ž3À¥`.h^Žx!¹`á$PàH…3ʰb€ì,t{kTPd{PЍQÅyÂ/ù-ëœúOi.€v^ŸìÞ’}»¼¤/·8ÎVo@4.n¯­í¥í-ŠÄ…È œŸîR»~˜ŽnîIîumF6–UŽØ*Æwª+;“Ö¾_0ÄW†&Q„´Iu±ÝN1Tâí«,øBæââÆån\¹‚àÆ…˜± µO,y<“Ö½,¦´ëa¹ª;»²1pŒ&¹{5Zi$¼ÓõW1[CmÉ$vÒÈW{H¤*DWæl“ÍzÐ÷®ºó[ïJß6ÞþLä—»gäßÜU¾økg& §_9±Ôb²%-g`áöeÁHÞp£$àcï Q|Ê/½ÿo¿o•õØ%¥ü’}¿ÌѰñž…v–Ö×3‰$i ¶sDŽéè)aµ² çƒÇ6’rè•þ]×}ú—¾o¿o˜éüCŦ‹>‹$s¦¯:,.èÀ¶—vÇŠqž„ŒúUòµ5Ù·ém?—ÌM®V×§Îöü®þE;Ø«ˆo¥*MÓE‚ÖiÆÄ­#ª•MÒ+à ÆpMf¤¹ŸkùukæãgmõóEIZMZ%¹»>ÖâYiÚe…ݤË'ÛLÆ 26øXј3œJ0:äŽJ»8Ôä?ºM~(_aÉV,èfÕ'Iî\¼­·ŽÆv¸£, !<Á€A$¨2úŒ®Öõümùéêü¿]-LÍ'ÇÖnŽ5b"”ÎñC½¼òJø–uQ媰“Á'!²Œ‹á]ì¿(·ÿ¥}Úß{FûPø×@í’ ¹e7@òí&a.cR÷Gx+‡ÛÈ>†ø{ôÕ_}¶|«_?]7ÓrÞ“â=/Vºk{¥g æ){y#YS8ß2"ò>d$r9äSIµë_-Æý×gýXϾñ½Ÿ‰&Ñd·•/³bgŠo)ŒÎWÖ2 Œ dá‰##‰ƒR¿K6¾èßúòÔ'î$ü¯øØü6¹&öeLe$6SˆåÕ3ìÛ Üê2¤õ©­mòõÕ6´ßT»®Wgý[»¨¯ã}/Ú¤™ 9 V—J¨#Gf’1èð$\ä`dd‚p[/_MÚßåùÚé\_×ôm_X±ÑíRâúWT•Äq¬q<²HÇ¢ª ,Çœxô7³åëþAys-Œø|g M"¤WÄæßíLÞDb‹æËHÛq60;ˆÁ<ñCi&ú/òM}ééߦÌm¥ÕéøÛð{ö2Ó<¤†þå–î0©;Çg0·ów¬nB¥H0 v÷Æ [Qr÷6oO>ßNŽêÛ¢j7–š]ùi{zÛæO¨xÇCÓï$³žæf¹Œ²´PZM3|ªŒØ§8&HéŸcŒù•¯Óþ WôºjýýQ|®öþ¿áúÛ¶»êÞ,´±¸ÒÞ;ˆšÊî¹yB<ŒÑ|ªy,Ï*0Iäž–ÓŒÜ%Ó󾟂“ùv%4ि¥fÛùh¾h³oâ½{;»¤¹‘"²‡Î¸ÛKÄ™uåCg1¿Ï9[ó·ÍÛüÐúØÏÐ¥ömR(c¼»‚ú ö¥ÌSEåõ!Æä>Pùp'æ¡^6·Fíèï{ýîÏKy“e·ugòÙÿW)xsÂÚÈ­®^Û,V7×7vöðZ•1ÞP®Ïæ0+¶F!@dx9IZ*Ú>[zh¾ö­nÛéµ›Õ¾ÍÝùÛ_–¿2äšv· ä737öÆ™¥Hϵ"ûUÓž~Láxzà|ýzáNíMÃFÒKõ~—å}ôzmzŠWŠ–×mþŸƒe1àIÿâSåjÚ‹+xa–H­Ø]>ÂYÔN®¿#“Ê:º÷Æz\ã)%ð½òµ’}¾ÿ2"äâ¯ñný^­®ÏçúÞðªÑØ!×íOö\1Áe8à*KŠdýïÎrÆÑÎ@s>wQî÷í´—þÝÜVåé¯â^ƒÂ¥ñÕ¬õ‹dÖf’F¹šKkyÖ5Ú± C.1àï=9Ï {ºGoÖíßñkÑ÷W÷å¿OKZ߯¯–†[xWÓµ‹í'P¶’stÒK,Ö„Ç"é³°J¥²nà7Ï4CÜ÷VÖ·áÿ¶ßð {Êï{–“áüÑÞ[Κ¬1¸“ιž;FŽæViZYeYؘ¶<·0;ži(¥O³k|­mz>÷µõv¶–nï¯åÓNÎÚ^þ½nÿøO[\ťϣÚÊmšÞÚú í:mi$ß¶\`dm]Ägоgm|¯m¶úyþNkÛM«—uÏ Oªjæíu$ŠÞaköˆZܳ9‚S"•pãnwrlc¾|©Ý=ßß_Ëñ µ®©ZÿŽÞ§9¢øS]¼ÔlaÔ·Ziº,QÅhó[Ʋʩd 9G„V=ɬ’jŸ*zégÙ®©t×]4òí«~ú•´üúYùy?ó½Í+ÂÍc=­Ä·æâx­n"™Ì[LÒLèí'^9S…ç‚9âD¥ÅhšKÒ×üïwæL}Ö›ÖÎÿ¢û’HʶðmÓÙÝXÎÖŽZYØ[Iyh·ÍXwf‡wFbF76‚;R|íÏf啬µèÓm«wõ@½Ö—DŸÞÞ¿‚_‰øS}ݤ^#ûB×ì×oqjó¶ÐÒ2ùlÒîP<Â0åÎäPšìš~wVëçeÒþl6Õoªò³òþ——BVð ×p›-WUŽm:9n¦‚(-LR£ÏæY˰m¢WÀ ¼àž˜©I¨«?y$“ô³½¿íÕøüšÑÛ£wcõêÚ¤¶·¶³k<Öj>Ï`ÐïX¤ç2·$ÅŒŒ›§ÍEu'«ÿ)/ý»ðè”z/øäQÓ¼ ªÞh:lzíÞš÷6V m´ºo› `˜Ë¬ªe"Sû¥©@9#¶6¨Ó©)-ßüº§w{ߢó¼ÇD–ËWý|›ÒÝ}o†¹š ›‹­3T¹yR¶±¦åÀ‘|²òïLo+ó;ðÒ¦/–WôõºVßÏÓO¼ooêßwõ»ò·~”„••… a@P@Q×?ä7üÿBÎØÌ?þ½þÓªF€ ( € ( € ( € ( € ( /¢šk9¢µŸìó:¥wnÄŒŒlƒî:Ðø?TKËl#¬ˆ "º²È¹ù\$a†ç¡ç"¤–€<»áü‰–¿õÎý'Š´—@;È>£ÿAZÌ ª(#UÔͺÈeŽ‚;¨ ò´ŽÑ„ØË:ŒöëÇZC/Ù\I1™fcxdØB>à~UlçûÞ”!®¯îZêxlü¸Å¹ÅãÞYІàn\s“’OñUÄ¸ÍÆ=?®èÞ4Õ“}®Ìu¶°^{h.l¦·’s°èɸ)b ’0§œ®ž)NJ6i¿Oó©Y6žÞ¤^-Ö[AÒRùB•ûT>QŸäyU[y' pyÇ¥u'ïÆ/­ÿ&ÿ4eovMtDÞ3Юn-í๮.£H>Ç0•YJ†…7&7©%€À9éÍRWÛúÝ~i¯]7h–ùwþ´¿äøÏC¶3‹¹î­LC ‹â-¹Âoˆ\ŽG¨©Né[þÍ­7ÖÎÝímÊjÎÏÏÓK_]º 2Ñ ²Ì³]»4­·K †¸ ž`$•Ç̾¢Ÿku×îvüô/×_ËR–ã½6ò']J²N³\®ç¶–8vÄïǘÃnà‹¸®ìŽx/…?$ÿ+Û¾®Ú_]íYw²ý/Ûçbïü&š ˆ»Kx®cí§Ü-Ö°”ÞÀ…c¤|­ÏëîïÛu¿uÜ<ÿ®ß?‘³cu õœ7v¬^ ÐI*J‘‘ÁÁCM«; 2jC ( € ( € ( € ( € ( € (޹ÿ ¹¿à?ú vÃþaÿõèöP4P@P@P@P@P@r~9Ö£ŽÓ¬îÿÒ^]·ġʦÌç#fw!IŒ²¦ŸÃp¤0ÎÊ@z ýÑ@_ð‹þDË_úçþ“ÅZK ¿ƒ¿ä ŸQÿ ­fÕÌxŸÂÖzñ+ªivW±­ÔSÂò€]0b%9°¬c±ÕIij†kézlv±25¥¬¬¢¡H‘U*ð0ÁÀ`zPŒOLÔ—TºXlãO™‘Õ`x× F©±ƒ2à ™ÀÈ ž ù¬-iÔr‚ÑÔªÓPI½Q¿‡ÚîQš6Ÿ½4‘ÀÄE [æôϯ8ÁÊ–«—¿¢.xˆ¥î»ýæÖ»¡µö‡Ÿ¦ÜGdÖÒÁ$$Fe_)Õ”ܤ—xöãG^Ÿä×êp7Ì¥ÍÔ¡¢øJK jMbïPÞܬßh1@bFgò€( 1P« ŒI$œö§d à´OïÞMÿéZv·R[nJO§åm¿®æ&ðÄÚ_Ûݾ¡cæAåî’ ;Ë–çlÑ˾i Œdsåà±þñ8ìn•ßðZ-¤´_ö÷à)®küýu6fð­ì:ÝÆ±¤j[^Í3±†hü·Ž%(TH§9…H`GR0j#x+/?ý)µ÷]¯2¥i;¿/Ê߉ç’ÿCƒK½¿,‰=ÜÒ£ÿAZÌ ª(#UÔͺÈeŽ‚;¨ ò´ŽÑ„ØË:ŒöëÇZC/Ù\I1™fcxdØB>à~UlçûÞ”!®¯îZêxlü¸Å¹ÅãÞYІàn\s“’OñUÄ¸ÍÆ=?®èÞ4Õ“}®Ìu¶°^{h.l¦·’s°èɸ)b ’0§œ®ž)NJ6i¿Oó©Y6žÞ¢øŸW]Ã÷Ú«Àó‹8ZO)Ëã·‘õÇk©»4»´¾÷c8«•ÓÅ:gŸk ‚þ»Ú#iô눣ËtRìU‰ã AÎ=EVÍ®ßåËõìÌÓ÷T¿­íù•“Ç~mûo'Ú¨]ìSíœoTýÓlĹfP6ÎF3ImO]vÓ}“~…µggçøo©³¥ê6Ú¥’ÝÙ™ LYq,/‚¤©x"›V%>…ªC ( € ( € ( € ( € ( € ( € £®È.oøþ„(°ÿ˜ýzý§TP@P@P@P@P#ã»ý6D†Èm¸Ô#›å Iÿ(-æmaŒ«Œ)ÎIVÚB’{Àö0%°‘@-H¸ t  .øEÿ"e¯ýsƒÿIâ­%ÐßÁßòO¨ÿÐV³j€ æÝû÷û­¦øO_¿‘lµ­¡Ó´ë/±ÚiiñL&_66Ñ.IòÄ2vrAÒ®çyËâvü¾çwufþíÛ´d£µüvõù­¼ÙÝøkL›GÒ"²¹¾–úTfc4…ÏV'{3mÀË1ÀëM»Ûúþ¿¯Q%kÿKúþ´ØÒ©P@P@P@P@P@P@PsþAsÀô!@í‡üÃÿëÐÿí: 4h € ( € ( € ( € ( €8í_— 5弟hI§ 䀣 W'$á€%›±ÀÀ z«ÙxJÍ!Ó¡–=ád@À:`Ï*À}ˆRz€ òï„_ò&Zÿ×8?ôž*Ò]íüÿ dúýk06¨  Ksq,ÐÃo $¨Üòà’¿M‡Ô{ý) žÊâIŒË4kÃ&Â÷ò«g8Þô¡¥ur×SÃgåÆ-ÈF/òÌT7ràÜœ’x犮%Æn1éýwFñ¦¬›ëývc­µ‚óÛAse5¼“€—FMÁKl‘…<à~tñJrQ³Mú˜¥JÉ´öõÄúºè¾Õ^œYÂÒyH_¸®8ë]M٥ݥ÷»Å\¥iãMêVŠ9îRD’8¤YlgËw*r ¬w®ÁÁÏ@qI^Öëú^ÿuµ]4îŒïewýÀóê;Pñއ§ÞIg=ÌÍs`ÐÁi4Î6ª3pŠIH„‘Ç>Æ£™Zý?àµK¦¯þh¾W{h~-´Ôu‹S4o¾çe—‘±’/&) ¶3™1¸àr£©ÑE¥g¾·ùI¯Óç­‰r[­´üWõéÔé*FP@P@P@P@P@P@G\ÿ\ßðýP;aÿ0ÿúô?ûN¨ ( € ( € ( € ( € ( €3/|Bšv«mgƒ'/7ÊÆçp*ÄAÃp¤dLªÊé.a‡ƒH åß¿äLµÿ®péF+ Zu ´gu*´ÔoTGoáö»”E&‡ „gïM$p1ÑB–ù½3ÀëÎ0r¥ªåï苞"){®ÿyÐjÚ47þ¹Ñ#v¶†kV¶F_˜Æ ힸ÷¯iG•%-k|µG —½Ìõ2…/K¾ŠãT…¯®¯¢¾Yã´+I‹h1—$©1 Àòyjöååû7üoÍØÍ-}U¾í„Ѽ%ug­\ê×ú¤wW7K0q©‰‘aìp<žäýî¼s2Št¥Mu_¬ŸþÝøwΤú•ˆÊk¯-&/)³‘ †ÉÜœ~lHsBÓ®uÀó;Ë#¼Œ.{’Ÿ` =cE²6VÊ„ö  òï„_ò&Zÿ×8?ôž*Ò]íüÿ dúýk06¨ € ¯yq$†5‘æ“`û@ùY³œîúR`A ·6Òà ÖðªO+ É.H$3ôØ=¿Ö†I©Ýµ¤q,J ³Éå¡oº§‰>¸ xîp23‘z¾Ê7î]8s?BœzÜ,Ëqh×#‚²@> «9öç<ç Ç<ñÅÛâWô²ýM$övûÿÈѲ¹KË8.¡Ï—…8¼«-ö¯c£:N¥oåO#Zï–Ey§wHÈl!eÆæV ã‚* —"Œ¶M~ŠüZÛ>£»Œ”£¾¿/ërKφæðÞ¤º…´vÓ’éo ‰XüÕ‘^â3!Žf–ڌà ž˜ôoV­éç§KߣJúØIYmkyíe¯eÑ;þwé|+¢ O{a• y ‘¦X}Ž3À)½²Üuϧ¥[wI +6ÍŠ‘…P@P@P@P@P@uÏùÍÿÿÐ…s¶óÿ¯Cÿ´ê€Ñ € ( € ( € ( € ( € (Ž·©¦‘§=Ü‘´¸*«°‰8îGN§¾À=(ÁúýÓ]Kö™ZY.]]ÀÈER#RNÕ;wc'–cžj@ôH›rõ 1øEÿ"e¯ýsƒÿIâ­%ÐßÁßòO¨ÿÐV³j€ ( €"µb#ý㞘þ#ì?ÏsÔ¤´ÀÅT–[ë(ü›e¹ºµ’xc36L`ǸçËãÓŒóžøâuÜf­œÿi´†}»|ØÕöç8ÈÎ)¡1j·’ÅÜ1FðK‡X€ûC¼¶3Žq·ã?Å^zÆ6ù’Ó·üþž^gK¥î½ÿ¯/ëð/iú’ÞO4D°I «•¡ÈbÀµ÷MuR®ª¶’µŒ§O‘'s+Ä)‹A׬íoUþÉ=¤Ó3Cm,òFŒ–0H\;qØr+e%ï_¥¿Þÿr!ÅÙ[«±:x¿B{ø,¢¾ó$ŸfÇŽ'hrë¹Êb³ ¥9Š«Y´ú_ðÕúÛ­¶&ë•K£ý]—㡟yã:XSûáf“í6èLÐH‰$O2ÆÒFÌH£'æRW8õKxßDÿù%é{~c—ºšê¯ø4ŸÝs¡Òõ]VÉ/,$i-äÎÉ 2‡ûË2§¨aÁ‚E6šßúÿ ê×bÕ ( € ( € ( € ( € ( €(ëŸò ›þÿ¡ çl?æÿ^‡ÿiÕ£@P@P@P@P@PãT’}zpÓ0òCÛv.I\çåÉÈî9=`uðò[²ȿ7Z@uÈ¡Àåÿ¿äLµÿ®péíÑwÓúÐ|c¢4SIÅÄ« ÆÜùVs¹yA`QBda±‰ œ“Ífž‰®»Ÿ§ž×Ó}Ývþ¿_™©¦ßÛjvQÝÙHd†Là•(A  ‚ A©« 2Í!…P@P@P@PsþAsÀô!@í‡üÃÿëÐÿí: 4h € ( € ( € ( € ( €9ÏkéÑÛÚÚa$»|ÍêBíÎ;¹Ý÷€Àï‚V“§„n¬.Q—5N†5kéh²×ˆ4=FûT¶¿Òu+k"¶–ÙÄöm8e¡Èĉ‚6wÈç¥zn)©Eí$“ï¥ÿϱÉ{Y­Ó¹•oðüZ,Vº–4E–Þy-dƒtÌðª*âPÀ>Td¤ðpFx¹{÷æþõ¼¹¯ºîßȵ–›½ž·üvüŠòü77ÖÖÖzƧíŒQÛZÅöM‡ÈYcvYòˆ‰p 'Ó½åÏ-úôÙIiÙÞWû­a½£¢×ñÿ-WÏ[§†müˆ?µ–×T¼³Ü–—³Ú©žÿ„n9%€êÃ늉§8¾’jÍ÷ßüöÛ{Yh´l–Éè»_~Û½L Ÿ‡»iò+h÷rZØCc'ö¦’.Õ„yà ަ2wòAãÓy¿y)÷wóûþî‚·º—kþ>D¶ŸüG«Éwfæ;‰¦ó†.¤+®Çœ¹%T8 €ŠÉEr8>©¯½§wÝé¿›Ý5ѧ÷t]——ôáÿ„UM.m>/[,WéÒ±Ó‰c{‚ýîaÎâAŒ­9›—4»©?UoÃE¦¯}{mæ¾OõZëøu/Å{¡[iòOk4–—ÒÞÆo,„ð1‘ä%^"ÃpB2€}ª-gÙ[ðKäôOð¢’îoøMF“ŽÆ/+?-…¯Ù¡$ü±îm½yäääÕÉÜIXЩP@P@P@P@Q×?ä7üÿBÎØÌ?þ½þÓªF€ ( € ( € ( € ( € (–©¥Zj‹¼Œ±…‹FÊÅJ’íÔsÐädŽK¥ÞÁ¢!†ü40"îû[å³n?À¦K6æP ' tÊÀŽ -ywÂ/ù-ëœúOi.€vþÿ2}Gþ‚µ˜TP@¨ÛÇïôÇñaþ{ž¥ %¦,z¤²ßYGäÛ-ÍÕ¬“Ù²c=Ç>_.œgœ÷Ç®ã5lçûM¤3íÛæÆ¯·9ÆFqMÉ‹U¼–(®áŠ7‚\:ÀØz屜s¸Ïþ*óÖ1·Ì–¿àßôòó:](¯uïýy_{OÔ–òy ò%‚HU\¬…C¬ºkª•uU´•¬e:|‰;žqã ´Û?j2jÂId¸O$%£M#b=Ĉw|À_˜z¢ÖÆVêcix^Ýä_&Þ/²©bßceEò¶ಈãùAÈòÇ/ukÿ[Ûî¿]ƒ_ëÒÿã}á»u……¢F»C©{)AP¬ß'È¿ºL3`b0AÂŒ koëÓ×Ëqt¹ß|?[m?KÔ°±Z[%à òˆÐ(†ùTc€:·LdcjÄ·:í}7þ‚Ÿ÷ùƤaý¯¦ÿÐBÓþÿ/øÐý¯¦ÿÐBÓþÿ/øÐý¯¦ÿÐBÓþÿ/øÐý¯¦ÿÐBÓþÿ/øÐý¯¦ÿÐBÓþÿ/øÐý¯¦ÿÐBÓþÿ/øÐý¯¦ÿÐBÓþÿ/øÐý¯¦ÿÐBÓþÿ/øÐý¯¦ÿÐBÓþÿ/øÐý¯¦ÿÐBÓþÿ/øÐý¯¦ÿÐBÓþÿ/øÐý¯¦ÿÐBÓþÿ/øÐý¯¦ÿÐBÓþÿ/øÐý¯¦ÿÐBÓþÿ/øÐý¯¦ÿÐBÓþÿ/øÐý¯¦ÿÐBÓþÿ/øÐý¯¦ÿÐBÓþÿ/øÐý¯¦ÿÐBÓþÿ/øÐý¯¦ÿÐBÓþÿ/øÐý¯¦ÿÐBÓþÿ/øÐ=gSÓäÓeHï­™Ž0U'¨÷  +»eûëˆWe©VËŽÉÁüåT½P@P@P@P@P@^Þ[Ø[=ÍäÉ)€]ÎI©$;’gx7^[„ŠÞ!p"TP¢å·J:3nl·©ÉÏ\ÔÛ)È /øEÿ"e¯ýsƒÿIâ­%ÐßÁßòO¨ÿÐV³j€ ( €"µb#ý㞘þ#ì?ÏsÔ¤´ÀäGƒìN¹a«\hzdÚ¤ÌÞÃÊÛ#(ë倧9¶=¥] èìlc‚ÒÞ9b‰¥Ž5V`¹ÉyÏü!éM!…¶“ª¥´VúŽŽ÷bÝJáhŽÑà3‚IÆr@ `sŸàñ D¿ÓöÔ·NÆŽ‘áØäºŽæëL†ÁmÜ: HÄŽãIBp£Ó9'®ùº°¸9F\Õ:Õ¯¥¢Î/ƈ‘xÓR»ƒS³Ó®áq»íQ†W­ã$‘û³ÿ,X†ÜÜ# ðU=˜Ý]®¿ÒýN'µŽzûGµž­®¼Cd¶±µÄ‘¦ÕVŠG‡,ÛùUÄÜ`´ä¦©%yY/DÓûôµÿ_ñßîÿ=K^ê†ù¯tFu‹Ê•5 t¸ Èr¿:•#d¹ê>CýÓD}Ù7ç?¼_e.Çáô}Eá(Êuxd¯§£$*ylŒŒmX–ãJÊÇoR0 în ´·’âêhà‚%/$’0UEI'€)6–ãI½Øîí¤x’;ˆYæŒË«‚]8ù€î>aÏNG­SM6»š²k©5!…P@P@P@P@×U±meôsö‚[­Ñ·<7”ÌT8õ”ƒŽœg5¿ù_×¼Ÿú   [+¸¯!Àr†¨ è € ( € ( € ( € ( €9ïj6úrØ^,%ècDûH)†Þyhm€œî‚ ¤xÅ[÷½ =F(ËþÈ™kÿ\àÿÒx«It·ðwü“ê?ô¬ÀÚ € ( ­F؈Æ?xç¦?ˆûóÜõ)-01cÕ%–úÊ?&Ùnn­džÌÍ“1î9òøÁtã<ç¾8w«g?Úm!Ÿnß65}¹Î23ŠhFLZ­ä±Ew Q¼áÖ >ÃÐï-ŒãœmÆxÏñWž±¾d´íÿÿ§—™ÒéE{¯ëËúü Ú~¤·“Í‘,Bªåd(r°mcýÓ]T«ª­¤­c)ÓäIÜÆñLj®4?ìËkas¨Ü„ÆÆk´…U˜”‹‘ÔžŠkTï>]´oúûõ}>h‡¤½?ø,Øø³JºŽO*k™ž|âRÂqç  „mýêäŽSwQÏ#6ú´´üUö¿_ÀI4ù^ÿå¿ü6å[Ïé5¡†öh¯nžÙñe8’Ý–2çt~^àx8;ºStž»Y»ú4¿Îý¬]_~¥»ÍoN»ƒNK{íäÜÛŒ7Æ%-Èãï/šr÷$â÷_ðÉ‚Õ]”P'Ž`šçÁºÌÑ<ÓIg*¤q©fbTà:šV÷£þ(ÿéH¨éGù?ˆô¯izƒ[hÝ 8,¤6÷DÎb…ç€É ÊÅ•VB¡J¶Òœ¯z©wŠõKšÏMtºO­•ÝîJÙ5»»ùÛ_¿u}/¦ÈšÖË]û¤VZ®¯wÝÄ–níkwhÖ±¿–ÅÿÒ¤ùBI‰ 6ŽØm6ÔVš^únÒùÞÏ«I|·’èÖž©¯ÎÏÊÌë¼Úœºl×:È™.f›ýT€›c;Aè¬ÈÌ=wg½SiÅ4­{¿K¶Òù+—,œo{i~öëów7êJ ( € ( € ( € (‹Õ|º¯Å+ÝÝÉZm’CoÈÏ.ù .F>M®Ñ÷²AàÀF·ÿ kïú÷“ÿA4Èx3þ@±U¹@P@P@P@P@Áø“T‡YÔáƒO»‘ªœÇÌlÄg*Ým+È$usIÞøSO–Jq‚E 7¨˾È™kÿ\àÿÒx«It·ðwü“ê?ô¬ÀÚ € ( ­F؈Æ?xç¦?ˆûóÜõ)-09àû®Xj×™6£iÁ3w°ò¶ÈÇÊ'zù`)Î@-iWC:;à´·ŽX¢icU˜.r@^sÿ_ÈzSHG!m¤ê©m¾££½Ø·A…xZ#´cx à’qœçÀxn¬.Q—5N†5kéh³cVÒF£{¦ÎÒì3<¥6çÌÝnj翜óÒ½Gï~©¯½¯ò8綾tþã³ød–ZdÖÒh±#F±$ñhâ;‰][dî²5X.×.ìöéTÛi_}=Ëñ]éÐ:»yú«öÓ·Þ[Ó¼.›j‹gcm:j z«o§yVê%D$ã‚H;ºõÏu$¤”^Öiú7};yo§Amv·Óï_ŸŸè%¯„ï´¹´¹ï5hn Ó#ŠÊÚ(ìÌM°Ë ¶öËaHANWœ¹å»i¾Ú)ò]ÃmÚþ']6£c†)ï-â‘z«Ê Àšgö¾›ÿA Oûü¿ã@ö¾›ÿA Oûü¿ã@ö¾›ÿA Oûü¿ã@ö¾›ÿA Oûü¿ã@ö¾›ÿA Oûü¿ã@ö¾›ÿA Oûü¿ã@ö¾›ÿA Oûü¿ã@ö¾›ÿA Oûü¿ã@ö¾›ÿA Oûü¿ã@ö¾›ÿA Oûü¿ã@ö¾›ÿA Oûü¿ã@ö¾›ÿA Oûü¿ã@ö¾›ÿA Oûü¿ã@ö¾›ÿA Oûü¿ã@ö¾›ÿA Oûü¿ã@ö¾›ÿA Oûü¿ã@ö¾›ÿA Oûü¿ã@ö¾›ÿA Oûü¿ã@ö¾›ÿA Oûü¿ã@ö¾›ÿA Oûü¿ã@ö¾›ÿA Oûü¿ã@êWv×Z6¡ö[ˆ¦Ùnû¼· Œ©ëŠå¼ÿ Xª€Ü € ( € ( € ( € ( €9¿jBÏMŽÈÛ‰ù1oƒ%r¬­¼®â¥zm-ü8( ¯h­3ÄÒ3HP]€Ë{œ?!HS¶ˆE  ã€% .øEÿ"e¯ýsƒÿIâ­%ÐßÁßòO¨ÿÐV³j€ ( €"µb#ý㞘þ#ì?ÏsÔ¤´ÀÅT–[ë(ü›e¹ºµ’xc36L`ǸçËãÓŒóžøâuÜf­œÿi´†}»|ØÕöç8ÈÎ)¡1j·’ÅÜ1FðK‡X€ûC¼¶3Žq·ã?Å^zÆ6ù’Ó·üþž^gK¥î½ÿ¯/ëð/iú’ÞO4D°I «•¡ÈbÀµ÷MuR®ª¶’µŒ§O‘'sÇ"¸Ðÿ³-¬Q…Σpb®ÒTfbR,<GRz)­S¼ùvÑ¿ëïÕôù¢rôüà\³câÍ*ê9<©®fxaó‰K Çž€€^·÷«’9MÝG<ŒÛêÒÓñWÚý$Óå{ÿ–ÿðÛ•o*Õ5 k7NšÖpZY<÷/̘D›R „’¡Ô²œçÓšiFI·§2Zkt¤–Ý›ºý;×Kkoóÿ‡û¾[#Å¿ƒµ/Ãf‚ xe–Ô4¹iUòã»ä—$×*&wIwvôWjÏÏ{é§f÷$¥.^‹ïºßñÑw2u­SXð}½ž§w«É­Åp’‰­¤Š(”2Âò†‰‘UýÙ\6þs‘ͤ•Ogég×âK^{-P£yCŸþ^Ýà\·âïjv“Ie£[Ãöˆf°%æ›bºÍ3!_¸Øû˜Î:1#‘ƒ1»’õkî‡7õéæ\—ò¿ãaÿuùô]Ù!Ô¬ô}BúQwÈžT$)våÀaJ‚GVTN\²÷uµß­–ß7e§KšAiyy/½þŠïäV¶ñóÝíì!ºœKö«›“‘¶˜¢m…EÁ; +Ó<ãwí%·NíZ÷·kZý»m|Sjš“ß[öVóó{=¼ÎÚ³,( € ( € (  zßü¯¿ëÞOýÐ!àÏùÅTåP@P@P@P@WQÔlôÈV[ë„¶&ã˶ ÀIÀ'°'µq×Þ0Ô/YWM€ØÅÁË…yÜ8#•_ãRì‚*i\ƒÁ/q{L7]Ø–yP¡™,ÛUFI'Há3´f€<Ãáü‰–¿õÎý'Š´—@;È>£ÿAZÌ ª( € ŠÔmˆŒc÷Žzcø°ÿ=ÏRÓ=RYo¬£òm–æêÖIáŒÌÙ1ƒãŸ/ŒN3Î{ã‰×qš¶sý¦ÒöíócWÛœã#8¦„dŪÞKWpÅÁ.` ì=òØÎ9ÆÜgŒÿyëÛæKNßðoúyy.”Wº÷þ¼¿¯À½§êKy<ÐyÁ$*®VB‡!‹FÖ?Ý5ÕJºªÚJÖ2>Dȵ=f?Q°²‘[}á}¿»Œ*3 ¡RÜ}ÒT‘’3Œ“Õ®Êÿãò×m5!«$û»]Šö^*Ò/%Hc–â)že„Gsg4½•™r² ­‚x$xªJûyþ¿íÛ]‰nÛù~.ËñÐKŸiÑ$ÒKr`wxüøì§x£”mΨU`ybsŽiGÞi.¶·Ïo¼r÷So¥ïòßîÿ>ÌDZñ…¦©v7Nc¿mE¡@¶Ò¬OåÜãh…ö.J†ÏSD=覿•?Êöî“vü^ìšó·ü9Õ½ýš1W»YN2A§fhØÿÏå¿ýý_ñ¢ÌÉ}§ÉG%Õ«£ZE ƒÔIÆêÍ ;;£×Þ´hÌRea*aŽMJY#‡k«¨Dg*€^€N*•ÕŸ_Çf·ôd´×rkíÃ7³µÄ²¬w )˜Ïo$†(¨pèá€*‹•h8ÍJ¶þ®ïùêSwßú±߇ü/vîÓÜ9óaÌT™Vu ´y€H‡nlžœñM];®÷ò¾šÛnˆ],hÚÅ¡Ú=ãA5²‹çß:÷#¶0NÒp2:à õ94¹}ÞF´×ñßþºî·ÓðÛúôìfÛøsÂP\E24-Çszó¤Q°Ã$jîDjF…;;5߯]<÷ß]÷×pNÍ5Óîû¶ü;áT·º„Êdû_—æÉ.¥,’Ÿ-‹FDŒå”©9E ;[Îÿ=¿-=4I}Öùv51£}®Úé® yí"h¡‘î7VÛ»©ä£“Ï¿&ž·o¿ü?õòì‚Ú%ØÌ_xU.…Â:¡y¦5Ô$3y&Z-ûÄŒƒŽÝ(' %Óü­ù[_$9{׿_ëþ¾½ÙnÁö_)í×ì—2ÝÃþ’~Idß½¾÷9óƒÀÏ 8ÚݾZ’­ïÕ¦ýQgN:>™nÖö7ñDÒÉ)_??;±v<žìÄþ4Y¤—eo¸î]YkûFÇþ-ÿïêÿ`Ú6?óùoÿWüh³þѱÿŸËûú¿ãE˜öüþ[ÿßÕÿ,À?´lçòßþþ¯øÑfý£cÿ?–ÿ÷õÆ‹0íùü·ÿ¿«þ4Y€hØÿÏå¿ýý_ñ¢ÌûFÇþ-ÿïêÿ`VÕní§Ò/Ö ˆ¤am!Â8'O¥–ðgüb¦åP@P@P@P@ÃkÞÕd¿K£$š©’b ‚¨mѱ΀ &휳 í¥`7ü3áëSùUƒ+2èTåI‚:dpz‚24€ìm­!·P#P(ÇJòï„_ò&Zÿ×8?ôž*Ò]íüÿ dúýk06¨ € (+Q¶"1Þ9éâ>Ãü÷=J@KLDx>Ä떵Ƈ¦M¨ÚA°LÀì<­²1ò‰Þ¾X s cÚUÐÎŽÆÆ8--ã–(šXãUf œœÿÀWò”ÒÈ[i:ª[Eo¨èïv-ÐD¡^ˆíÞ8$œg$Æ9ð´Kñ=?mKtìhéŽK¨în´ÈlÝâŒHî9”' =3’zà›« ƒ”eÍS¡ZúZ,_éWúíý…ª\ZAšI5‘TFZ#  6ýà¸=ÇñgŠõ9näßkzë÷hï±ÉÍÊ•»¯ÂÿÒÜÏÒþý‚ÛRX®tëIï ÓôÁo¼°³2I³{n9#9<ã¯<\µ“ë½$Òíu¼„’z륿à·Ý=~Hgˆ¾G«E¼Wv‚Þ+$´O¶Øý©àÛŸÞDK¨Û#qÚIÚ9¡;TçKªzyt¿o/_“ו'¾·ó¾îÝË÷ûž’>Ù¿ì³]ÿªÆÿ6Wùzñ7¯9ÛÐg…-å_ý'_À‰®îæv¥ÿ!¯úìÿú­–À7N¶¦è™<Žo'÷Ö¾k0Ì14q§¢^_©ÛNœ9{²œS`Oæü‹ ,ätœqÞ½¯õ¬gXkúmýÊ[ÛM'™"—‹Í‚H„ª:”, 8ä©<hZßËúØWH»uu œj÷±YÖ0pOÌÄ*Ž=È£ª_×qì®Gªj6šU”——òù6ñãsm-Œœ'©¤ÚV@•Ë*Á”2AU5mšjèξ״í>ìÚÝI*Hª®ì¶ò2F¬HÜ)UI)'weéóÑ\Ò C ª&X°û™K°íÀÇ|`zuëé@ÇÐ6÷PÜIÃjÎÏ¥ÿ õØd2±¸×4ý:ÚÞõÖúdYMœëå²H¨UÔ§ÉÉ9-Œ`gï qWr]­øßü¿MÑ2vIùÛòÿ?Ô×ÕÿãÑ?ëâý”†y¿‹µ lµß*9i3O¸à0ëÈã® ž2rsŠóó,dð”Ó‚ÕßôÔàÆb'BÜoúxSNÒ¼ó«ÝFm¥1‰mÀ˜òqbC3AÆ =OÌWUh¾Z·“j÷õþ¾ó£/ËãËD¥y=}?_^ƒ¯í›VÒµ[x‹Cö±$híîsÇl×Ðd°’Áêºß_—ü1ëâä•e®Éz‚j:ΟŸs¡Kn‹,-34ñØ,ˆX&ÖÉ y p:dâ½çiMIí®þåëþGœ“„WoëúüLS“ý¥ã‡O‘´¥¸‘£´´[brE‡ 0(VAÙn8&³Qv´»?—¼ßäÖÝ‹z=<¿"Kíáí/`“FŸP¹šØGg};Àò[(.Æ%VÜ’€‚[5z¹v|׿•×Ïm-þl•d—km÷ÿ_ðÈ׵ѮAÕt¹£Ü\,ˆoIíE—‡`A8^0jðV[=ºhïøýýï»p÷ewýy|¾î½Êzå–¯¯ØGký”lZÞ9´³FVG12M¤¹lå‚ð¿{Úvé×tý:wÜPV\ïéþð.EªiwºÃÞ\\èLS6e-®ir1p0ÅAÚÄrFsJÖÕ«êßÉÆßž ¯km¥¾w¹«¯i·º—öuµ”vö¶±n’Qq˜ƒ µcØ®¹ûÄðp6Š'9;½,ÿ?+ýÿs‹åвíò¶¿Œ(tQn´³u¦›«‹%Š´LbxBG!ýâüÂHܨS•ÜpÀã‹‹¼ùÞï÷t~·ÓoK²\mUÒöù÷ôûôô¾åöƒ.£®^½ÅÅÌ6ÛCÇ [Œ7+ †t¯SÍLU¯~÷ü¿z)½­ØÍo ´:tlÚJ]“¨I5ݰdÝsi6X…`7+bµ1VäºÙ~6Zùöòé°5ñ[åéÛúýL™ty¦)ah±‹ø¬ßíBÑ™"ˆÏ¥»1ÕîP*yw&„¯æ—-üÚM=÷kG®ºw§•ù­ä¾]ßÝ"ý¯‡Í´6â]÷P°I%-§Ý 1±Ø&Ù¬[Fc®XœsU³Õ_M<µý|¶µºŠÝ´ýtþ¿¤møK]?XÕeR[}ªE’;„XÆåØ€¡ÁÝÁŽ1Žsš¨é¼ßÏVïøõø“·Eòòÿ†7©P_‰-㻲´¶Ÿ•6¥cìvFÁºˆ2Aç¨ ŠRØ ;ÛK­ù,53$¤‹KÂJ0, H e ¨£+ˆZ¡—tÏõ:—ýxËý*d!ž ÿ,UnP@P@P@P@P@¨ÌtÍF âµE†Lù“«…ù²0¥r2NIÈîœã)×X\‹ˆ׸¤›ü"ÿ‘2×þ¹Áÿ¤ñV’èoàïù'Ôè+Yµ@P@Z±Œ~ñÏLöç¹êRZ`r#Áö'\°Õ®4=2mFÒ ‚fïaåm‘”NõòÀSœ€[Ò®†tv61Áio±DÒÇ«0\䀼çþ¿ô¦ŽBÛIÕRÚ+}GG{±n‚% ð´GhÆðÁ$ã9 09Ï€ðx…¢_‰éûj[§cGHðìr]Gsu¦C`¶î$bGqÈ$¡8Q霓×|ÝX\£.j j×ÒÑf—ˆtyµGÓæµ»KYìn Êd„ÊŽ 22OG8 ð@ëÒ½GÞ»4ÓôvÛ³Ñwô8ïîÙo£^¨åôÿ†É§ióY[/†Ù kK.€,Š[·˜¹ Μá¸"©¶Ò¾þZ-š¿“ê¬ôô 9®¼ÿêÞŸy¯¤øZûM¹Ò®²n&³IâœÜDòù±ÈêûP´…—i@f~8æ©;7Ù¤Ÿ{«Ùþ.úk¦·ÕËZ|ïåµ­oë_- Í_þ=þ¾ ÿÑ©R3˜×|ý±xÓ]\ £ý롎‡è**Ñ¥Y%Q^Æ5(­¹ÖÂXx.m>ßÈ´hR K3;`ž¸È8«§R,‘T鯒åŽÅøFo¿ç¥¿ýôßáZs£@ÿ„fûþz[ÿßMþs øFo¿ç¥¿ýôßáG:ÿ„fûþz[ÿßMþs øFo¿ç¥¿ýôßáG:ÿ„fûþz[ÿßMþs øFo¿ç¥¿ýôßáG:ÿ„fûþz[ÿßMþs øFo¿ç¥¿ýôßáG:ÿ„fûþz[ÿßMþs øFo¿ç¥¿ýôßáG:ÿ„fûþz[ÿßMþs øFo¿ç¥¿ýôßáG:ÿ„fûþz[ÿßMþs øFo¿ç¥¿ýôßáG:ÿ„fûþz[ÿßMþs øFo¿ç¥¿ýôßáG:ÅÚTšF—m¨_ÜZÃkm©Ø<²4…B(»‡,I:’M'+ &ñF½w¬ØÉ¦C§Áb²^ÛFçT‰Øýš`Ëá#exÝ®"Œ‡L`ŸÃZÓ|'¬Aa Z…õ¥ÝÊ.uCúíç×鎕§8WG¹Óìµ§xŠ›9T$œã=ǵ'+™àÏùÅH Ê( € ( € ( € ( € ( Vñm•“Éšë„ݰ¬‹ÆÆn£œƒ€ØÚÙç 9ÍI»Õ5u3I$Î~i$%›™¶äôPY°½x§£Ú5¥ªÆÝ@ =øEÿ"e¯ýsƒÿIâ­%ÐßÁßòO¨ÿÐV³j€ ( €"µb#ý㞘þ#ì?ÏsÔ¤´ÀÅT–[ë(ü›e¹ºµ’xc36L`ǸçËãÓŒóžøâuÜf­œÿi´†}»|ØÕöç8ÈÎ)¡1j·’ÅÜ1FðK‡X€ûC¼¶3Žq·ã?Å^zÆ6ù’Ó·üþž^gK¥î½ÿ¯/ëð/iú’ÞO4D°I «•¡ÈbÀµ÷MuR®ª¶’µŒ§O‘'rIu Xo’ÎIvÜ×ö­íßåìÆÈc‹¦O_/?Ž;f¶œù¾÷ø¶ÿS5;›ÕõøôOúøƒÿF¥M{u•³O6v©êI >¤øÒ“QM±¥wd:Þe7(Ûƒ‚¤‚Gä}0ΕXÕ‡4JœˆõØ4Ý>æúñÊ[ÚÄÓJÀµTdœO®O• 1rj(çæñ¤v’ZkiwZ4ìiõa|¹6äv_ùg‚ nÓ7¢m7mÿøó~!;Çš:­?ÿ‘¬þ"Ñ#Eõ=F¡Å¡7(>ÓÈ»çç䎙ê(³æåë¸][›¡1Õtà 7ö ‘Ïï—…ŒâC×¢ž ìzÒÿøí÷ô*Îöù|û ¾Ö,tûˆã½¸†Ù3'›,Ñ¢€W°<—R WJ÷éÿüŸô’Õ&º\xKO]k–wQj66ѼŒöR$¡¶Œ¤øÓ•ãm7µ¾nߘãi;'ýnG§x–ÞàÞ&£kq£IeÏ2_4@,M»oGdÆQº¶FÞGJ”o~¶ùéþd­ZIo±#ø§ÃÑØÃ|úî––wRƒwŽFB¶pO°§gu¯aßFû¶¿£%åÅ›jÖ uk›<&åœ̹ʎG'ÔRZ«¯OŸ`ÚÞcïõ½'M,5 NÊШ„÷ Éä÷Úß÷Éô¡v_Ößæ¾õÜæñ‰äösk|wVñ™f…îP_.œgœ÷Ç®ã5lçûM¤3íÛæÆ¯·9ÆFqMÉ‹U¼–(®áŠ7‚\:ÀØz屜s¸Ïþ*óÖ1·Ì–¿àßôòó:](¯uïýy_{OÔ–òy ò%‚HU\¬…C¬ºkª•uU´•¬e:|‰;’K¨ZÃ|–rK¶ááyÕ6žQJ†9Æ8,¼uæµrII½–ÿù2,ô]Ìkøzâx¢†öVó^8Ö_²L" "«"´…6©`ë€H<Ö®Övõü/ºÌ–ì¯ýÃy• ñ½•Þ¸–öââÁlæ¸y’Ârd(ñ¨òŽÜJ¿3}ÀݹõQÙÉÿvß;ôߢ*JÍ.·‡êŸ‹l®G·²Žy´5¶c$ÂÐ2bB]ASòŒÆCddP··“sKüþëZ?&¿qÿu(4ÏÆo6­´÷ ŽI<ua‚9Ü‹×cÒ¸ñµgJ‹tãwé¼Î¤åÞœŸ†¼Sqâ;{ëm^c§M…â•‹‰sæxÃå ú`zŒð|š‹¢ÿ?ëm u'QóHî¬"¿›ÂÏÄo¥IG—v‡Ë,Y¸uü§<àž;šî’ºµ¯ýj8»;ìsúOƒïâÖ¬¯&¶Óôë+K••4Ûk©'†E2—Œ2(BZEʪòç$šÒ•Ý»»?•ùt¿m¥ì´&JêÉ[oÃúù½úçð.°ê6ÖÇMxµh¤·žIÕíPÜK xð‡yÛ7Ý%@ešš~êŒ_NGóŠJ߆¥Þ…IûÎK{G¶½ÿ^èµ}àK¹ïo¤ŽæŠk€"RH"ÞMæà6Þf•È•rG4S÷9[èõÿ |Ñ_&­ä‰’ºiom<¥eþå÷ÜÒñw…îuÍ_M¹ˆÛ}žÔ(‘&'æÅÄp0AùboĨ)ûµ9ߗি9!ËZ|‹Ïñ°ëÿ ]\hþ*³ŽHõ§v€î`t Ì@È9RxϤ—»¾Žÿù?7åø”¦ååoÂÆ^©àkÓo¨Yé· -µÙ‚áe¼¼œÜ$º°‹ÍåÌGi îÜ…˜€ÙÀzÝy;ö½ôwóKg­ì“Z]ÂZz«?øª*Üx+VòM6ÆÊÆýÌÁî_[¹ºuÞ±©$Í Tª`Æë•H`y híÓNžm½:ï{Ý=ÆŸWùýÚôüo×k àM^öÚM5¦Óá´Ž[ˈnã/çJó«¯Ü §$9ÎÅàvQ÷TZÞ)$º;I?•ùuÑêÛò’Ó£jþVVÓúÛO2üÖ¯|]k®ké$ò æ $w Z5ç3)è1ƒøÔ-ß{þ<«ò‹¿©-7ÖüÆj>ÖçÒoôh’Ãì’^èn¾Ù,SHþx˜#ª&Wœ®õ|€ŒVqVP¿Ùüw_'g~·—“-½eoµøioŸá¦…¨¼/pÞ Ö´¯²Agw©¬€îÔç¾WfŒ f’U ÐŒU$šŠèšù5ß­Â/–N^_¡SVø{h5[¯éúN™Aë#&Ùá“‹ÏËŽ{‘êM'{³ÿäf¿öäM½ÄºÿÃXxC^·Òd·_ìø»Yµ•ŸÚäž4òeó|æˆH¨ÝŸ3on8«rÕKv›û¬Öým~Þ»èÚNë£Oïvw·Mµ³üµƒRð6·¨ØÍ§Éý— %åÌS¤®d–K…qåÈ»0NX[bü£´Æ)r§öR^©I;ù]-µÕÞãæz¾í?M-§ô½Ý ¯èO¨ê:±È‘³4f8ÿwöQµÙôhãQìÍõ-ûngëóMrüÓw·Ur9mG—®ß&š+~*']H  € §­ÿÈûþ½äÿÐMr ÿ,U@nP@P@P@P@P@^¹ÿ #\´wùò0ýìQµ‹›ïçi€H( tO~ê5رƠU @ ;=#ÃÖö£4²¨aF(Ì>È™kÿ\àÿÒx«It·ðwü“ê?ô¬ÀÚ € ( ­F؈Æ?xç¦?ˆûóÜõ)-091àÛ&Ölu‹K›P³‡Ë6Ü»/l„˜‰Þ¾P sò†aÞ¥] èllc‚ÒÞ9b‰¥Ž5V`¹ÉyÏü!éM!…¶“ª¥´VúŽŽ÷bÝJáhŽÑà3‚IÆr@ `sŸàñ D¿ÓöÔ·NÆŽ‘áØäºŽæëL†ÁmÜ: HÄŽãIBp£Ó9'®ùº°¸9F\Õ:Õ¯¥¢Ëºþ‰{}¨Û_ézŒ6WA-³yÖÆuhä(NuÃ$uÈ5éÊÊQé%gò¾ß{9­néÜætOêqAq¤ßßÀ4eº·“`¶Ä×>LP€ÁÄ„"—ˆev€yäÒV¨¯.ò~—rûôwéÒýH³Ôz¤¯ùÿ‘4¿ï浆Ö}v ³´û²}„€bó#m³b_Þ" Àl àRmɹKwköÒý>wßF‘[h´Zúëçä>ËÁ £[ÚÈ.-”ìG|"²³ÐȰ”TÜØîÎÆÚµº&¾Mßó·ÈKK齿¹¤@P@P@P@P@P@õ¿ù_×¼Ÿú  CÁŸòЍ Ê( € ( € ( € ( € (+«xî­¤·˜1ŽU*Û\£`ú0 ƒèAv ]ë1h6¢Y÷Üçœôçž8»|Jþ–_©£¤žÎßù6W)ygÔ9òçd\õÁλa%8©.¦2+iô2Œt1u-¹¹˜ŸË2}’o(°‘c I·caØ‚qß5Q÷­n»~ŸN÷]Ñ2÷/~ŸåË[n‡Œt=>òK9îfk˜Ë+E¤Ó7ʨ̀Šs"dŽ™ö8žekôÿ‚Õý.š¿T>W{_ðýmÛ]‰Å:BMkšãeÚ£C8´˜ÀáÆW÷Ûvdö³’SU/qÉKK_ðW~ºv%;¥%³ý]¾Z÷3.þ!h«¢Þê{\^kCyfÖhÄè02ŒÉó \íÏ8¡¦ŸÍ/½Ù?ÎÝúnRWvõü7ù-Ôw¶q\²¢J»‚ÍÄãê®Ä mr»ur-_þ=þ¾ ÿÑ©H¢Û²¢v ª2I8R””S”’M»#ñw‰/­.-­ôs#^Îû-íR5c+}ìI‘•Ré·hÉfù|XãÞ"«…¬z[uÝöôÑÛÎéz40Ðޯ®ú«éë¿âÍJmÃ:ž¥l#3Z[I2 A)•RF@#ÄW³'kkk´¾ö‘çÁ]Øç4ÿ¥µŽ§{ªê:n§§Ù,%5 5|¨^I¯“–‘—p! %ÀA f©´’ÓVì¼ô½ÿ?»¾„Fí¯K¿/ø¿ïD–tÝMTi:n¡¨ND¥¡µ{y<¿/alÈ%òÏ)s×x¥'Ë'²Wùj¿NžªêökWË×úþµÿ"kˆz=½þ›m"È«©Å¶ò ‰Éû£'›×Œ„ ø‡?rS‹û7üÿ.öü„â¥ßüíÿkŒ°ø‰avÖùÒu[h§òÍš8¢Lq¶œ30# iµÊÚzZëî\ß—ù;0nËOë[~üÕÐÿüEÐ5û»ˆ,æÚ!®C´Ð¸x”€[ìÉŒŽ$ ÜôàâdùiÊ£é¿ãòéÜ«{ê víóþ¾E Çî¶pÅ}¤ê÷w’1¢†S#F' ¸åcn§å99êåî/{¢wÿ·]¤þý-t´Ÿ»³zz;òýÿ‡[#Ré×@m¬ï䳕¡ŒÞ„E†)%Uhãl°lè2€\G8§››KÎÛÛî{Úök—›Ñ¿$ݵý|µ ¿ézdw÷ qOng`ÁÊ>bÄ#rX*±rW“´lbH5 ¥·•¼ù“k%ø:gùÿä»þž·õ/øOÄÖ)Óä»ÓI ¦É›Xqº6d<0<1ëë‘VãdŸøbSÕ®ÆÍH€ ( € ( €)ëò¾ÿ¯y?ô@‡ƒ?ä P”P@P@P@P@PMSR´Ò­¼ûÉV5cµ#t‚v¨îp úz@.‹¦Üê×ís#É$Ï÷¤v,ØÜÍ·'¢‚Í…è3À zn‡§=”!]‰4¯@]ð‹þDË_úçþ“ÅZK ¿ƒ¿ä ŸQÿ ­fÕP@u{/¶ÃMîa,3ýÉ‘”©àäÝæ“Ã~±ÑËÓ´›8d¹–iÚ5äÜeÂ#\¢ù…W=3HeßXÝImo.“oÏ þc' YJºœgdÝ‚Fyç&¹qt¥R¡½Í¨N1—½±‰ý•pß4þ–âC÷¤˜Û³±õ$¿ÿXtå}OÛñGg¶§Ò_™Ñh4ZTr8Ž$žãQ íAŒá@ã8ÉäòsØ`c ‡T#æ÷8ªÕu’1`ðShjrÝßBlïãš7¶´¶kq!‘³æJ”yà8EcÜšÝ&©ò§®–}šê—MuÓO.Ù·ï©[OÏ¥Ÿ—“ÿ;ÜÒ¼,Ö3ÚÜK~n'ŠÖâ)œÅ´Í$ÎŽÒuã•8^x#ž)ÔJQœV‰¤½-Î÷~dÇÝi½lïú/¹$Žx|0"k2úœÂÐÚ”šm;}Êy!Èå2~î6ØNнXòsN~ó“Úüßù2k^ö¾›lƒ¥¿­ï§o?êÚóø%fÒmlP`-ôy4½ë-¼F<ÌgŒywž½j§')ÊkFÜ_£‹oç¿Cݲ}/ø-‚\Åg_M÷ ¸y!ˆÄŒ}B–b?3I´Þ„År«jÿñèŸõñþJE ×l®5 5í¬®’Òs$n²¼^b®¬A\®AŽ£­gV”jÁÂ[ ºræ‰CÂþ]¥º½º:Ž©0+%ÛG³ œìEÉÚ:É$òO >K ©­^ì߉•k%¢]?¯ëñ4õ:_J»Ó®YÒ¸š'hÈ  d ìêŸfŸÜîs'c/Sð••ü÷2‹›ËOµ2¥»ª©•1ÌS‰h`À %£ºïuäúýýVÛõmŠÊÉ>Öõ^~:¢k?y7‰wyªßj7Ã, %À…p’$b8ÔpPcŽç¯%(Ê?̬þWÿ1¦ÓO³¹“ÃË tŽ5=J;E{yZÙZ²É ¢£1ò÷trì)Ïß½úßåÌš›Þÿ¶Ûú³¿õoó.Eà½6("„KtR(¬â™yÎY3ò÷'æõíŠr|í·Õ·÷Ç•þµ•¼­øÜ¯?„.`Ðn4;Z½’Òh…´v·F3¼%€`¬±‰ ¹Fæ=²{‚÷qç×U;~ìþÿW³n:=mêöûž¦‡ü"Ö"÷íJó«}­®Â†]¡ŒF1»·Ÿ¯|qQ%ÍÕ5ÿ;¿Ä–·—á±FÏÀz}œ–Ë íÿÙ h$k6t1M$*«ònÜ6!²©* s§3ææómy_{}ï{Ú÷Bjêß/U{ÿÀôг7ƒôÙcÔ”Isê$æDÑ·©Œ HYðAÉfÎAÅB\ª)twûÿKinÅ=dÛê­ú}þ~H·k£ÏÙMη©Þ=´æmÒ£óB»FŠFwŒäž*¯g+Áõ&Ú5éøZއGò~Ëÿ-EþÍs-ÇÏ>|Ýûÿvür‹¿å^ÛWÒ’ÒÞJß–¾ºoæÆõ¿›Oþ˹§@P@P@õ¿ù_×¼Ÿú  CÁŸòЍ Ê( € ( € ( € ( € ¡®ê‘èÚ\·ÒÆdXÙ(`¹,ÁG$Žì=ý8‰¶±»ñ¤n® ;’vä’±‚@~è; u#''š=Ãz*éÐ š€7zP@]ð‹þDË_úçþ“ÅZK ¿ƒ¿ä ŸQÿ ­fÕP@ï.$€Â°Æ²<Òlßh+6sƒýßJL V¦gXÌQÂÐIu<ÒC•‘@ã£# ÷ëÏZ6sS»kHâX”g“ËBßuN }pñÜàdg#õ}”oܺpæ~…8õ;¸Y–âÑ®Gd€"}AVsíÎyÏAŽy㋷įéeúš:Iìí÷ÿ‘£er—–p]CŸ.xÖEÏ\‘üë¶SŠ’êc(ò¶ŸC øÇCRÛ›™‰ü³'Ù&ò‹ 2›v6€8'ñƒUzÖë·é÷ôïuÝ/r÷éþWüµ¶á¨xÇCÓï$³žæf¹Œ²´PZM3|ªŒØ§8&HéŸc‰æV¿Oø-_Òé«÷õCåw·õÿÖݵحÿ 5î¥q8ð¶›mª[Û*'š÷ÈW.ÕcÂ>ãµ”ÛGÌ9<ãNV›æÑ'o»òß{ú“tíÊõjÿå~½úi6‚HnN«²9a™ãX­¢–Y_÷Ó"©,vÂOÊ[£b.ð‹î—þ’›üÿ-n7¤šíþv-Kã¿Å׳«¾Û9›ÉB̹“ û°XøÁ8ªJîËÉykkk¶·Vïò`ôWõü7Ó}Eâ(uk½KOK{ˆŸMÔ „»Ã Iø›!Š…Î[ $àЊQÖ ^¿›_§Ë`zK—É3oSÕl4¨Dº•ä¨s·Íp¥°2Bޤûh FøáýRá­ÅÚYÊ(.e|Ìœq†<çøNÚ­Á¡&u ( € ( € ( € ( € (  zßü¯¿ëÞOýÐ!àÏùÅTåP@P@P@P@TÕѤÒo5,Í…P2IÚx  ߇A-²É#£€ÊÊr„;±ŽÔ´P—|"ÿ‘2×þ¹Áÿ¤ñV’èoàïù'Ôè+Yµ@P^Ëí°ÇAÄ{˜K ÿrDde*x9wB9¤ÀÅðß„ìtEòôí&ÆÎ.ešv@y7p„×(¾aUÏE ÒwÄÖ7R[[Ë¤ÛÆóÃ?˜É–R®§À$7`‘žyÉ®\])T§hosjŒeïlbe\7Í?‡%¸ýé&6ìì}I/ÿÖy_SÄvüQÙí©ô—ætZ•Ž#‰'¸Á”B»Pc8P8Î2y<œöØÃaÕù½Î*µ]GäŒX<ßÚœ·wЛ;øæí­-šÜHdlù’€å@8X÷&·Iª|©ë¥Ÿfº¥Ó]tÓ˶mûêVÓóégåäÿÎ÷4¯ 5Œö·ß›‰âµ¸Šg1m3I3£´xåNžçŠu”g¢i/K_ó½ß™1÷Zo[;þ‹îI"–™áWC·hìé$Gp.,LÀÈ‘¬~lx‘vª¹xÊŽ:çG+Éßk·æ¯¾¿ŽÛßÐVµšßð}¿«ìP»øeÃI$—¶·yâxÒòÀO|ÉØ‡Œ°Ü1pGH*{Vq\©.Úä±_ûjMÝ»õÿ;—íü"ÒµK1=¯öŠÙí°°û<0á¥;–=篛ÈÏPNy⯷””¾î]?ò_ÄKG&¾òKÍöÓT{Øu43êP]Imös¼¾Ô‹fümá[s‘Ö£•;'Ѷ¾wß¾ï°ÓåÛ²_qŽâIµ-:)A(Öóç©x ŽAÈÁ˜Ô•*JQviþúÿ=žÔ"¥+3‘¸Ñ-ä‚ëmÊ@γEM?Þ"HýäÊ2D…A qžp:¼"©Š¥’›Þý:?M´ÚæuêÂŒù,µþ»þ‡£C©¶£á¹oVm%Ù"´eÁhÝ•€e8<©ÁÒ»¥åäLw{›eo)&O5•aŠfó˜¶ c÷øõnÆVŸÕ„»‰§u …™cŽ2B»l-óo+ŽåéÁ9ô'ëÈ—ù‘Åy~ˆ‘G¶y$yH;2@VÆ9qž¾¼Æ’nÊÝ‘M$ß©­ê!rȨD,>O¯·Ÿj·n„«’Bå)`* ”ê( € ( € ( € (ž·ÿ kïú÷“ÿA4Èx3þ@±U¹@P@P@P@P@ejÐOk'ö–›½ÈdY£\“$c#€X(#vâpI ·íÂoÃúÌ:Œ«©dfFôe$0>à‚ìE 6Aô €<»áü‰–¿õÎý'Š´—@;È>£ÿAZÌ ª( €+Þ\I…ady¤Ø¾Ð>Vlçû¾”˜4­Lα˜£… ’êx ¤‡+"4Æ /FFïמ´l2æ§v֑ı(2Ï'–…¾êœ$úà)ã¹ÀÈÎF5êû(ß¹táÌý qêwp³-Å£\Ž ÉDú‚¬çÛœóžƒóÇo‰_ÒËõ4t“ÙÛïÿ#FÊå/,ງ>\ñ¬‹ž¸##ù×l$§%ÔÆQåm>†cø«DBᯂ”Žyß!ab²öìAã©ÁÆqU{nÉü¥·Þ+Y¥ÝÛçkþZñ^ˆ¡³|Øç•ò+'ìAã©ÁÆphZíÙ?¿o¼K§›·áËP>+Ñ6o€Ûò°1¾BÂÅd㈣ÿAZÌ ª( € ( € ( € (ž¯ÿ‰ÿ_èÔ  ϳ-õ°F*æÚP¸}§ýdàïNÀÿüz·"i¸éý~(ô¸U…-¤™<¹–TxÞP+O(?)zŽûOûÇ q^ïõþF›K_§õö¿O›.G§\?‡|U¤é2H’ù³EkæJ͵žo¼Ä‘–bsêI¬¼-k®ÝÕõ_5¡ÝN\³Mÿ^e-CS[¯ Çg¢hÚÍ„ÖÆ²¬z|ImxıÄå@fØ<¢ÙÛ•çmm6¥QM¿vúî½4Þ×µû#iÂlþû=o·§›ís\HºÄvÚ”þ*]Öíì"„ß}©”2ýî™v™;ž1PÔœ$¾Õ•»o;y^Ößçªfš)+m}oè¯çoN·èkØGâ8õ-JÔnçóµ X.oˆ¸; kõ `ð$- ¼Ÿ×®Y[hëëukz&¹—ÍXËh&ºÝ+ïkÞþ¼·MîŸ/©èu™a@P@P@P@O[ÿ5÷ý{Éÿ šä<ÿ Xª€Ü € ( € ( € ( € ( €41ÏŽhÒHÏUuÀÐ*,-t¿pžL^$ rƒ ’NNA9ã¨ã&@ôK`_,1@(˾È™kÿ\àÿÒx«It·ðwü“ê?ô¬ÀÚ € ( € ( € ( €)êÿñèŸõñþJuö›c¨öV÷B<íD¯·=q‘Åf ùE–ÏXÔìá.̰@Ñ,qä’B‚‡&€/húZéqΫsqr÷ù²I9]Ŷªÿ¢ŽÔ%`/ÐfMÂÜ£3¢”Y ʤ‚@=pH{ 6ò!àEœ¦Ã&Ñ»ns·=q“œQ·õýw`I@P@P@P@P=oþ@×ßõï'þ‚hðgübªr€ ( € ( € ( € ( € (ŒÕå[¿þá>hb.² Œž™ÀÁb8õ<Ò4ÀËhºâ¨˾È™kÿ\àÿÒx«It·ðwü“ê?ô¬ÀÚ € ( € ( € ( €)êÿñèŸõñþJ‹ÄZÄq©]#¼pï;3UV`2xæ¦rP‹“7ÃЖ"¬iGvq?ð¸4´†ØËa:˽–õ²-”upq󎞇ïÁåX¸;[þö§Ãø˜s·¢[>÷ìwzÖ£¤]êW #ÅiLëˆQ’Hú‘]mÚË»Kïv>}+³>ÇÅòK<:¥Ö‡,›‚5«D8gŽÉ€qŸ›###SÑ&ï³³ùí÷þh•«V[ì"ø³K’ö¶¼³ŸO–Ò{¦¿ŽåLH"dV‡ùÎNxÅ^úZßÿÈ}­®¶ü.%׌ü=l4Ù­e$œÍ ÜÆb,ªIù·c¨ÛÆy w¦“räêÕÿ¿_ÌM¥.ˆÑ°Öt½FæâÛOÔ¬îçµ;gŠ ÕÞ#’0À©È=})-W2ØoGg¹v€ ( € ( € ( € (ž·ÿ kïú÷“ÿA4Åx/G’m']>Èÿ=[ ú)­;¹ý…/ýôßûìÿñº.ý…/ýôßûìÿñº.ý…/ýôßûìÿñº.ý…/ýôßûìÿñº.ý…/ýôßûìÿñº.ý…/ýôßûìÿñº.ý…/ýôßûìÿñº.ý…/ýôßûìÿñº.ý…/ýôßûìÿñº.ý…/ýôßûìÿñº.ý…/ýôßûìÿñº.ý…/ýôßûìÿñº.ý…/ýôßûìÿñº.ý…/ýôßûìÿñº.ý…/ýôßûìÿñº.ý…/ýôßûìÿñº.[› ­¤!ô;fLàIÎ ~b€#†æŒ<:~œèz|ý˜ »ÓÕ¬Öíak™ Å)G\ŒeX&Aô#¥cx*Î%Ô] $ž[•§!°zj=25 €:€<»áü‰–¿õÎý'Š´—@;È>£ÿAZÌ ª( € ( € ( € (ž¯ÿ‰ÿ_èÔ  ¾/‚þëþ“ ÝÍ"E>68<0猕'ã8Ϩ¨¥Êùw:p®œkÁÕmFêöÜñÝÀ¾&Ó¥Ò/ì´üÍ,Ë$+pr°²ò­:‘•z–‡Ú+Ï¥†6¤ºŸ[ŽÎpø¸J”ôQÙ«ÝÿŸõÒç²x«NŸVðÖ¥§Z´k=ճšŠ2@$Àפït×FŸÜÓ>.-'©ÍxƒÂÚ߉¢óõ/°ØÜÚÆ©komw++‘,R±y‚£.|•Qµr¼¶O@íË.e½×–Šë~úßåk¾N–}­·ßë~†ußÃëû¸™ãŠÞÂbÙµî®ŒÒ mÝI™Õd\ˆ6åy_”Œô¡{­5å¦ßÍ}íëúî=ô~~}-·õ¡§mámJÚ 9í,ímîáÔêhäÕ®.„ÊЋyÒ&àÀ´—¨Ï Qæ\½kÒî÷]öòßpèß]-òèûø[ÂZ·‡­ØAmd÷Ö–/key>­w:9Êãu»±)Ú¤„cŒ`qWÍu}¯kõõ×~öõÔ,¹µÚíýÿ‡¯ÞuWŸÛŸéßaþÎÿeû¿ýÍ»ÌÇð}ÌcŸ½íSþ†ŸŽþ[zsv××ËÈÒ\í±œsŠ£{+î- ( € ( € ( €)ëò¾ÿ¯y?ô@·„5hí´ä·bŠ#‡Î‘öíROAƒŸºÞ½xæÄbcC–ýZtKØëZM«–àp2}ë¤ÈËÖuá¦\[ZÃaw¨ÝÜ«ºAk冨›w12:¨ºŽ¹ù¸pkkÛD>—ù~äV>-´[yä’Úò9 –šŒ ”)SŒôù°sŒoJ&Ô5ßV¾åwøkè$ŸàŸÞíùéê3Fñž«Ù闱ܠÔehR9‰„m&gŒªäc9Ü;·¥ËäßÜÒ4ôù1_Fû;}û~MãaÔçµ}6ü[ÛÝGi-ðVW ´c™É‘vc'Ó&¢õº^öù_ü˜åîßÉ_äi {J:„ÚxÔì¾Û–ßÏO25À;™s0G'Ö‹«9tC³º]Y_þï‹}ý½¥‹3'”.>Ù–_Û»8Î9ÇZvwK¾ÂZÞÝ ÍªY"»5庬r,NLŠ»c yàËבëI»këøo÷YßлäñV™¼“\ÓRÔH"3µÜa‘¸.ìã8çqCÓGý[¸ íõí*çPm>ÛS²šõ{[G:4Џ%AÎ0G>âž¾BºÓÌ­qâ[K{-béãœÇ£³,à(ËÈvóÏ :ãœÒZ¨¾îßù7/çøm\|¯ø\t~'Ò7ÁÆ¡ik=ÌMsyJ¹C´9ätބŠ]»_åý|‰½•ú,|wá»»½:Í…¼ÎÖìgº0á˜cïc¥‡¨æšÕE®»~Šº¹MY¸ö4dñ“ËÛIªY$ñ€^&¸@Ê P23‘˨ÿQB×EýtüÓ_"n’¿õµÿ-} Q^A,²Å Ѽ0YQX v8 óØŠKkm š•Ýì7V«jÖñÃ&àÍ2± ù]‰¸“vXn Œà`’ ÚƒjVñ˜£†7É–ÝÆécM­‡fVÚ2༒2sÁ €’úÉevžÜùwý¿¯_&R}þïëðФžº–™s=êÜ {5Žé¤ÎùçYcü‹!$ó´ê®oiËÖöòoFþë!GEôzú^é|šÓçó‹NðÍ•ç†îcž:|)ôc8•’]:ä‘îâµr^Òrèï÷¶¿4—Ü»²Z÷êŸá«ýtõayáK£ª^êÖӫݵú]Ám5Ä¿f•V4]²GÊ«eIBžqŠÊâVóü[Û³³ùêºÜ¹Úw^KðïÝçÁWF[Øî,ío¢™î¥ŠIµ‹µPÓÊ›p6õŒ¥”ƒƒ»∮X¥ÚËÕ&¾í}uòÛ—7{?M?ÃM ð爭æ[ìi·Wg-®®YÄQH±ûñiòñó©b§Ž2T£ÍEý¥fþ}¶~{j—`¢ÓZrµe÷ýÛé½µï£`ð޵c`ºE¬¶7_i´¸k©¦u—÷K•؃Ÿ+ îïŒwª«z—ÿ·­ÿo)oó—žÞdÇÝ^©|¬úyvìiZèZž“iá÷ÓaÓî.t»#i$LÐÆwË£„bSû¼†=*ç+Ô”–Í[ÒÏO——’ì {©>÷üÿÏóîA ø^ëO×…ÕݼSÄ—SÝG?öµÎciw±VFö]ÀŒŽp0Jåì­ëþ[+ï¯Nòwïgø~>^A¬xÏS‹Ä3\iú\ú†¢å­.f„3Ãû¤EË•%pÊOëSÈ£mÓ»ÿÀ¯ùh[w“¾Ö·àV·ð¦±i¨Å-©²‹tû§¸KÇö™%òÚŒ£ðã 2œá±ÕÓ÷lžÚ|í¾Z­ûZëB$®Ÿ}~WüýŸ~’k¶—kXt›£^ÇÜO"‡ŽâO3qÄgk)JŒ†ò½*9/Ö*?vÏÎýVš¥«4æJ|Þwü5ÿ€ýt-h¾M#Ã:¾›|ææ+¨Õ ©2º-¼qôÆwe g¨«­7ÈÜwM¿ÛOÍí÷J6š½º//5é¯Üjx.ÖêË@…õ"N£vMÍÙ#Ì~HÇm£ ôZÒiEòÇeþw‹dC¿É++ùÙ+ù—u»’êÙíÖ "qd™ˆ ù]€>}¸c´‘ÎAŒš,g—|·öòc•"[‡;e‘0ØFUP§ A ÆF9%‹£æSÄÚZÊÅ4n!¼ƒˆäl•*H,¬ ŒäU'# @,øKPàò ì‘>VR0Aô¤J( .øEÿ"e¯ýsƒÿIâ­%ÐßÁßòO¨ÿÐV³j€ ( € ( € ( € §«ÿÇ¢×Äú5(Ó:#"³*—;TÇà~ŸÂ“in;Ž£|$¾…Ùæ’é¦v³šÏd€Æó³9;À·c¶ÊðkÕ©*©ÇW«‹VzYíÓ×­þGt ”|ºßúû¿áÍ O]¹µð=ö·D.-í¥•<Å>[”Îk`0ç¡ëÞ½jeR”'-.ÒûݯúœÒ¦•Gëc#OñÊ[Xêwº®£¦êz}’ÂSPÓWʅ䑊ù9iw’\$Úk¥´’ÓVì¼ô½ÿ?»¾†»kÒïËþïûÑKTñìšÎŸ§ Å}þ‘|ö×RYÉg,°ìˆÉµ¤h‰#iÎX¸pØ2÷]ßÃfþçoÃñÒÚ\¥³K{¥÷ÿMz—®>%iV>Ÿ{{k{¿C%²]KkÍU&L¼ªƒï·!‰É šº–ŒÜ_¯§o?Í®¶z ¸ßåóþºí؇Yø‰oq£ê‡Ã°ÞK%µ—ž/#d€¼&XË!mø#; “Æsšq–»s%ëï$ÿ­<ºZvóWü×à÷µíÔé4=xj³ÝZ5…æŸulˆæ;µL²>í®63 ­Á Œr&Ÿ+k{µèìŸëÑ“²}Uý¯4`Cã;§]8JDØXõ °³ùs‘UÆÐYeä’@àô"”oͲ²|e/Á-tëЩ'×[¿¹4¿¦¼‡é_4 Rᡳó\ü… I›Ñ¤H÷•I E$H°ObßõÞö×n–Ó­»„ß#wéÃëÈÙÑ|Qa¬\G¢NÄÇçP6ˆÙO=HŒ¾ óŽ”£ïEImdþûþ:?¸%îÉdz·áý/Sn€ ( € ( € (ž·ÿ kïú÷“ÿA4Ëx*±"À_ûèQtï‘7¢ÿßcühºò&ô_ûì@DÞ‹ÿ}ñ¢èÈ›Ñï±þ4]yz/ýö?Æ‹ "oEÿ¾ÇøÑtäMè¿÷Øÿ.€<‰½þûãEÐñȈ]ö*¨É%Ô?:w@2ÛuÍ´Wa¢™ˆw•# àóÐÒºO"oEÿ¾ÇøÑtäMè¿÷Øÿ.€<‰½þûãEБ7¢ÿßcühºò&ô_ûì@DÞ‹ÿ}ñ¢èÈ›Ñï±þ4]yz/ýö?Æ‹ "oEÿ¾ÇøÑt¡j7~#¸Ÿ|2$’Ÿ-àudxóˆØf)´ç=ú/@éqÆ  Ð—|"ÿ‘2×þ¹Áÿ¤ñV’èoàïù'Ôè+Yµ@P@P@P@SÕÿãÑ?ëâý”µ§ÉwåËo±¥YHÅ”•'æ•`QH#Óñx¬<ª¤àì×ü»efmJj=Š~Žà¢ÜW°·0ª}šLîf y@Û“Ë}“Ï€§V7”´[[Ó¯éç÷WqÙ;¾æž±§C«éWzuË:CwDí€aƒŒƒÏá^§Tû4þçs™;zŸ„¬¯ç¹”\ÞZ}¨!•-ÝUL¨AŽ` œH»@Èà€a-×{¯'×ïê¶ß«lVVIö·ªóôéÕ'‡·‹C¨j·Ú„¶s<ÑË8…[æ£ÚDq¨Æž™Ï~ÔJ*I®é¯½§ú 6¾ôþâ <'ÚéqXjWú|ú]¿Ù¡¹€Ædh° «FCŠ~îr8Ç5R“ssï¿çø~¬”’/Ì©¬xÓZœI«jº•ØXÝ#Wò”^?-ÙXFwJƒ³'îôGÝ—2þµ½¼×­ôù[[úþ½-ø»ï[éÁªÜê(Ò®aŠRFб—#uùÎyô¤´Mwwüým¼•ŒçðŽ˜ÒßI™Ôß^Cy&`4eX(p¥$z»óIE(¨ô\ÏÿM?Á”ÝÛ}Ò_q·„#ƒJ¸Ò޳©Ë§I‚i $[/ð”qü¯,ÍÓœÑ%έ-^šõÓúÔ´®—}:k¹wHðå†{%Õ‘LEÂFÕT] Ž:þÈ«rmÉ÷wþ¼·ûÙø|•¿ýæµIA@P@P@SÖÿä }ÿ^òè&€<ÀëRèÚ.—å_éúr]\˜¤¹¿BÑÆnÝ7§$¨{ÒOÞå¿Fÿþc·ºß¡müyk¦höWÊ¡¸»2ùb)#&HÛoš¦gPVq8n25NI;ZÚ&ü¯Ó¿áê$·í{zÿ]öûÍ(|[§Ü[­ÒwÜЀA™VU Ž£?w‰ÎØÞœ•/ü®¾åË_·´þäþ÷kzßOøbxö tùšÞÚêY-­yîÊBÍš»¢ów€GOáϺյï[¥íø¥ý_ÖÏK‹ô¿õÿð-ÝøâÂÌO$öwÂÖ/9Rè"ys¼@—D·dm|dvœÆa;¤ûíèÚWüWµ°/ëËKÿ^zz>´º•ÍͳXÝØÏn¨æ;™d|íaµ˜`í<Ž@ª¶—ó·ÎÉúuè+ê¼ÕÍJC (¶¥ÿ ë¯úâÿÈÐuýüÚ_€ã¿¶Ó[iI* *Hˆ8ük5}êÒûÚE$¯©PëZ–s$:é´»Sh÷qKhŸfâ2¡Õ„²}HbàuÎ1ÍÝ%+î­÷?òkæLSvk¯çkþ%Hüt—˦M£ØËu Íä–· ²@æ=±—á„»cÄ`מÏÞÚÍßÑ¥þ…„ÞŽÛ¦—Þ®\ð×ôêe§92ÌÈ|ØŸÌ@@'ìÉÔpáO=88i6›íúþˆäùeoëC¤¤@Pˆ,&Ôô‰­-§û<’!òÀ`0%NÒzsÈ# €cø3ì–×÷²ÉOk)Š@§;[ÿ"ãR¢ÆAA·¥:€<»áü‰–¿õÎý'Š´—@;È>£ÿAZÌ ª( € ( € ( € (¶¥ ³Úì€!‘dÀv ®ã§¥QÔµMCOˆHÚlsÚ+‚Oê‚€3?á.¼ÿ ß÷÷ÿ± þëÏúMÿû?á.¼ÿ ß÷÷ÿ± þëÏúMÿû?á.¼ÿ ß÷÷ÿ± þëÏúMÿû?á.¼ÿ ß÷÷ÿ± þëÏúMÿû?á.¼ÿ ß÷÷ÿ± þëÏúMÿû?á.¼ÿ ß÷÷ÿ± þëÏúMÿû?á.¼ÿ ß÷÷ÿ± þëÏúMÿû?á.¼ÿ ß÷÷ÿ± þëÏúMÿû?á.¼ÿ ß÷÷ÿ± þëÏúMÿû?á.¼ÿ ß÷÷ÿ± þëÏúMÿûŽÝAHúûW®%á@.üu%íŒ é~Ó`‡Ü@#É?0àS'E]ö¶u¤ë"K)ZT fÛX”d ñÈÕn½­÷Ûü‡ÒÀ4˜á0›ñE‹[—æ+0ÞLoÑ(xØÊ‚®)§n¾^½¾îû÷¸;6þÿŸ_¿¯BìÃ.£mq§kÒÜÛÀaÜÖl‡o` À3ã{qÓ V|Ëù•¿á¿®ˆ×/“¹qዘ`‚æßÄòÛÛ@a‚'²_܃Œ•o/xÈ#vÒyÅ_?¿ÏÖÿ­ÿ«ÿ­¥º_ÖŸçy®´ +£2MiâSk!™£µû'îàyAéònÉÜü@Üp˜µyZÞ‰§oÁyÛK‡õø[úóÔÛ‚t‡S¸¿]+[ón"Ž&Éö€…ˆÇ~sŸÂšvMwwüým¼´-ÿl7ý5üð¢èaý°ßôÕÿðÿ‹ í†ÿ F¯ÿ€/þ]Þ§$Ö“DšN®De²|dŒzQt[™÷Ã1é:n²ìRÚW†Éò§`VÁ#¨91ÅBéäÓûµ);36}"+¸ŸûB/Þ\ü‚+©l—|]\UŒ'ÞPNT“œ€»ÛU£½ï÷ÿ›ûᄂÛK=­k_×⠤ƈÇâw¹ûgÛ ËYåÌ~Yòöm+Æ6÷ãR÷l•´Õz¦îÓùö°;ëço•¶.hqÉ£)âYìãO.YìAHW°V‡8 ÌxªçÓ]_pk[­ _í†ÿ F¯ÿ€/þ®€?¶þ¿þ¿øQtý°ßôÕÿðÿ‹ í†ÿ F¯ÿ€/þ]l7ý5üð¢èûa¿è«ÿà ÿ…@e@«¶îI´­Un¤»y"t²“r!TÆxÁ ÇצsS}@è<1­›œÛÎ¥%Œíea‚ê¦LP—ü"ÿ‘2×þ¹Áÿ¤ñV’èoàïù'Ôè+Yµ@P@P@P@…Aê3@ å§÷Gå@–ŸÝ•Zt~TyiýÑùPå§÷Gå@–ŸÝ•Zt~TyiýÑùPå§÷Gå@–ŸÝ•Zt~TyiýÑùPå§÷Gå@–ŸÝ•Zt~TyiýÑùPå§÷Gå@–ŸÝ•Zt~TyiýÑùPr4þË›åÃÛý¡@:LhgÒÁPA¶äïPP·€t†1ÿ D?óÉ?ï‘@‘üòOûäPäCÿ<“þùyÿÏ$ÿ¾ED?óÉ?ï‘@‘üòOûäPäCÿ<“þùyÿÏ$ÿ¾ED?óÉ?ï‘@ †ŠÄŸy¿„zš‘üòOûäPäCÿ<“þùyÿÏ$ÿ¾ED?óÉ?ï‘@‘üòOûäPäCÿ<“þùyÿÏ$ÿ¾ED?óÉ?ï‘@‘üòOûäP¼÷R`*ñ´zšä¼Q¥M¥ê®Ù2‹i6 ˆ²ÙWû»ÆN0FÁµ@Áó¸Òè÷‹whŽjóß„_ò&Zÿ×8?ôž*Ò]íüÿ dúýk06¨ € ( € ( € ( € ( € ( € ( € ( € ( € £®È.oøþ„(I8ŸK>–ݾ±ÕÔyËèÿ÷í¿Â¤Î_Gÿ¿mþyËèÿ÷í¿Â€9}þý·øPç/£ÿß¶ÿ <åôûößá@œ¾ÿ~Ûü(ó—ÑÿïÛ…rú?ýûoð Î_Gÿ¿mþÈeP‡‡ûÍüÔûPüåôûößá@œ¾ÿ~Ûü(ó—ÑÿïÛ…rú?ýûoð Î_Gÿ¿mþyËèÿ÷í¿Â€9}þý·øPç/£ÿß¶ÿ <åôûößá@ YWÏs‡û«üÔûPã]Z÷QןFƒ|VPlÞ¥6™\ÙÎyP €pcÈÚ@_áË#ibŠzâ€8O„_ò&Zÿ×8?ôž*Ò]íüÿ dúýk06¨ € ( € ( € ( € ( € ( € ( € ( € ( € £®È.oøþ„(Hÿ+þ½ÿ¬u@u• P@P@pÿ¾ßú  ( € ( € È×¼I§hk¶âO6çä?e…”͵˜€ûI_•ŽO÷H`²32o ‚€æä°^ƒÄ––WcT¹•$]±=ÉIlyË+°,Ç'?¼.(TOâ˶f6zœ0&'Èòî.9?2¾ðŠÛvðT+0< oñ×n“UHeÒeO`ênL º8-‚cù( †-– ä€éÞ+´»Õ$°žÖêÁ÷0·–è"Çt$”*Ç£vÖÚÅr@ù[h®™kªXÅya(– AÚØ ‚ ò¬ ©‚ @ /ìÍœ7‹wµŸg•0l“y6·C¸²Ž¹ë@¼º‚ÊÚK›©(bf=¿Ï¥x÷ˆ5k¿kRNèb…wov!P†`N7¶rH«óm @:o xne·yb‘­nIIEgPΛ¶ 2™bPœŸ­u:_Š4}Gì1%ô÷×Ñy±ØO*-Êãvå1ç;”£«Åv4¡¨_Ùé–r^jWpYÚÅóO $–< ’ã@OAÅX·Ñ-!Æ#•Núm³ ×ò ÿe[ b1ǵL–p¡È@1@ù)Œm$HŸu@ àP4a‚¢€#6ãå@ÛB±Åò¬*P@—Qžc˜m+ó!ã%NÒq’ƒ£Þ·¸µ6[GØ‹3cþ¬–$±ÛÓ$³ë“ë@—Âs>ûÍBêæÞbÛÎË"$»vùŠXS·+€ÁycŒ’HvÞ†ÞðH`ê ‰b@ª0E©X[êVoiwøŸ†*T‚ ²°ÁVA‚  }C¶w77B$YîÙZy€Ò•.ãß3Ð(8ü+Ò­´×ùílÛ}¼n7y' >Ryepà`q@ ±ð•½¼åÊ‚(f-&Ö>V5ü¨Y4ûw\Æ>”šM›ù{àš&-¡*T{¬ÃèHï@_ÃVm.ýƒò  ¶úM¬Ûö ÜhštòùÒYÀÓ ¸”Æ ¡Âó×$€¾Þ¦€*ÃáÛXæ/°Pïü7§ßD©4r!FÞ’C+Ã$m‚2®„2œÈ$t$P2KrºUÝóO5Å®Ïô§€F·Íò°*v–à†oÌ ØªÉ/ýæ¡}ü4rªyef2¡@ )Rx€Œ±ëÔ€zdžíµ‚ `â€5¨ € (…öcy7Ÿ5¤p1‰L`¸Àp9ëÀ’@?ßoS@àðå¤LNÁϵ6o éå.þÌg-æÏ>kIÞYv}ÜÉ qÓ¯BGC@õÜêM0¹¼žH§‹É’!:|ÙÊs¸ƒÇ#ä@©ð÷N6_cž3qmÀÜ1•GEUbB¨Ç 0`(ü¾W´‚ÞK‹™Ò܆âw™ÆNNYÉc×¹èèkéZ\VEP'´¸’Î ½:Ö;›ý>u¸·Gr¹à¤yq‰äUÝòî`N1…â9üM5À·Ó¯Îžƒiß1»’7dfE+´åxÚ+לP°Áâ„ûdöºŠ ®™]Ræ,P‘ÁÚ¡”€TØÈÎ2X°ÿlñ4W‰æ%¤ÖŤܪ¦7PNPƒó@À#9ÜÆÒ–š§ˆIÅí¼ ÂЇ§*ÀƒÜgp<îÆܰGˆïõ‹ÿ Ae8x.®›÷íÈXÜn?(`Èc>J;uÚ€4¼ ¦µ´ph¯ € ( € žÖ9¾úƒŠ’8ÄjF Ð0`ФۙüÒƒu]D0 P@P@P@P@P@P@P@PKÝ2Òö{{‹ˆCMm»ËpÅH ÊqÕN•9U8Ê‚3fðô^ ö€sšÚ†1^ Ð@P@P@Pf-’£4ðè(Ú=(<µþè 嵊A†A@†…p€@P@ÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/checkout.png000066400000000000000000000327171203611042400307720ustar00rootroot00000000000000‰PNG  IHDR(í%@tI pHYsÄÄ•+tIMEÕ  stc¯tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœí}œՙ¬ Æ1™¬Š  h2:²ŒBꂀŷkÄv1/³“Ä|BÖäÎL6dͺ$jââ ÄQn„¡YÇÍðAã(C2”дøB#SÌtOß?j¦(êåTUw:ÕÝ¿ï‡ÏPuêœSOuׯŸS§ÎsŽ”Ø³t|pà@gg'PD\tÑEÃÏ)ûù/Þrã¥CÊËäJiheùÉ'•\Y6lHùÉ'•nh}µ¥M’²‚ .`ÔϹ³³“ ={\ò˜eúwøRjú´i[Z['L¸$7óüÂÂãI¾ñûå{´]Õã=þ?èNf>$"¢¥£iØ凇¯ÈÆóÌÚUêÆWoœÇNÔ8ÿü‘Оï°eB*ˆH’$}Ò¿\µûýÓ¯õ)¯ývxwrèåsJ§×fûߣô¸?®˜{ 5tWÇ‚´5œ¨Ü’DâIDAT¿µßm\pÃÜ;‰èé§Vj)†Vc̘ó =;r“Pn~R OcçãUŸî˨Ûýó–qæuD”è|°öï2¯&‰ªOÈ?kÎm{Ãúõ³æÌÙ°~½vHMQéíŠçqQF´³û[­ž—<¦~Çvw€hÏ’p>ñÀVxªêþþækËκ&óé®cŸ¼öÆ3m{éÙ꫟¿`ì/2ü°¯·²R—ß—ÛÚN“~Uë;7̽ó» T±é%§9@Ð^)cÑÔ<¬|†ˆ>Ý—¹¨ö†þðL¯òBÏÑŠ#G+Ï;[zg_Fïä Í-+}ŠºýÂóÏ_3{ö Ï?ïXƒ¶}ÍìÙêá‚wIDAT†ZJÛÕRÌy )ÚU§j¨GÛÕrê-Ôo[rãMõšöT¾Û¸àÆ›êE4ÆŽí•&ïh¯LD}½åÙʾӯyR:å¬ÊÓžÌîýCæÿíz³×ö-‚z¿jÛ¤»ãï]–0¤˜óØÑRNÚv>væ ´WšX¯[BD}ÇÊ¥¾Já¾cåÚvÏQÙ B—^‚! ³ã¢]œ{rP‘–ßÓOÆÚ51Ãsú¼çÒé´W’X45ôÊêF¶²]Ø®×NHÝ0ìšÓU6nØ@D3gÍÒ§«‰vç5×#I’VVÜ2£»DOý~…¦:}犪½¹770Êê7n4´—¡íÀìÞIDAT½´ÃÂãõô !"åX…Ùã)ÇŽçïK³zDU6nØ0sÖ,³rÔt¯¥,Ïî>¿ìÐdfxÞs´—3…Øj!žÞtÅ7ðÐ5L·ñõ/œwéÇGu)ú[Ü“<¬ë¼ïõâѪ5¤˜ó˜‹è³ÙU›êo­æÜæÞÜó¯/´W:HË–­¼à‚óÍÞ{üæ«®›ö™±·ê;WÖ½~ú)“¿säõ'Ï»ôãž³Vo.͸æšM/¼Pg±ä/ù+ÆsreKkkCÃbm(³;0öòÃ/>ÛªOY÷úéc/?üÙ—aÎQª+.¸àüÎÎÎ-­­aD8aûœÖ}ÞÆ±4sXÏtIDATíâoj)}åp÷y±ŠE0ŽH”»SQÛ hv1½šGFm9J·KÄêà~sá…cIT¬8÷L\xá"êœ , ¼@•AE«© ÂÆøñcÕNÌÁXàÀã$šAìÚõ¦hì_'øqÜãU<á¼I~ðžh€Ç@È-­­çFÎ.ÄÊ…á ôjæÂ–ÖÖéÓ¦‰¶‚o?^KD£nU´!,’o}¯ï@‡º9Ö“9ÚsòØiÕcPSÞÚ4}ÌŒ-â¬sÂËuRT_´·wï;D4bÄyùWå‹`Þ~¼vêßÜúo>¼®xùH™¤ÐIDAT;Ã_ŒäVóÞ]·|yìéÙñו9#Û{0stWúÓ„ôñ_^ÙuˈñO¾µiú•wmß¼tb˜µáå‚^uù(pïÞwê.ŸØþÇí¾X•í§i÷¾Ùºxìè;rÔÞ_W]:ýGoQ&“}kU-™——Œk¦M²;ÔÑÚ–sµGûˆˆúÒ/³pëú¨ºÝ×—Ùµ>:~N<ç³pÂË Uu¹iOUƨ³êO»÷Í-‹Çžï]{^vÉô…Í™Ã/ÑÔ^ADG¼öòòK/œÿ§|¬zaõSv‡Ö¼—$¢›fÖy­ó芃ïüeØ'Wô½ÖäƒÞO^Uì;ýì­×ËÞIDAT[ûÃë¾µŽˆ²=‰óŸ"¢g=éÒ›rW8? ¼\Pe¦é-ííÝûÎßO¼¬¿?CD©÷˜386>ß\y©Ej¦'+ÑôE/þìKcïô&˜¾t–޼OÒP-eè©g]qó¼×ÿ0yÄÕ/yªÊÀ5w̵;Ä%›¡£&Wœ>¾¬òéäƒC¤ae• å£ß\=çO>8‹ˆn^ðóß?ö"úòþ´&|Â˃Ògç ’—IDATèic¼õ鈫ÝWcÍð“ò­Á‚Þ¡tâ¬@Úxï—ïØÞº´6{4¡ô¤§ÝÞþ!¼NÈMc[Z[Õ4¨=Dz{÷¾ó¥/]˜N÷²ÿ±+éÏP6}(›>”íKeÓ)JÊö¥¨/•í;D})J¤¾CWÿ…]˼­‰S{÷ëëV>×ð­t:[{÷ëϨÛ}ýž*±¤L²þǃiw½ºü7K¬:‚ÇóЦ1-E¯7m›íúÒ}ºräXo?õÔvÕ§;‰(;øWÝíU4óöãµj/¨Ö#:ñ;o¬½ÿbõhÝwÞX{ÿÅ_¾ggžÖQ¹sot$ê(AD»‰ˆ¨š¨š¨®ü‹ôÞ$ï`öIDATÛ/ÑuÛÞî˜Cà¬Q×ø}r€ð¼avkf/ÇV݈çíúóî±cFäcF6CÙ¾”¶§ûOÊJYÊ‘´îÿ~³öîוhoTí]qÏ/ßÿÅQ·¿ªWš/ª#¢ªY÷šSç\ᑌtÕÕ¬Ù܆Ÿ5žˆ^üC.S-„—¹½H1â¼7ßzgÔÈu(þ§mÛð³ŒïÍØ+µw¿þÌÏ¿x|ÐÓ}õžû²DR–žypÑ„o¿áhIoß±+.}ùáÚj¿ö«W[ËãÕù‘‹÷;ÿi¿’oµKVµQã¼IKVµþªGÇW;U!Ï3z±é™æ£ FŒ8ïí£IDAT=ïDÎ9ˆ†Ÿ56‡èf]mÿ÷/Rú0­}pñÄï8«Žˆ(£ªqW,\JD¤´ËUríÜoíÜøåsfþW{Ø”êœÍ==Ê牨çXú‡ ¢ê†ö7õÉÇÍKžmn¼.õÉÇ=UŸ÷ó¬þΕ|Éùíùˆç%ö}¬¾Qð…þþl6ÓóÔý?u©ºQ·¿Úºì~J¶“’Ôþɤ~¿Ç/“´·äR™õ¿œ9Ö{Œˆ~¸ Ú¼äY":väö—ˆš¯Hï=–ßðO$#Fœ§ó…l–Ö<ø€§§² ç¿¶áá/Q–²D³ïú6)‰ «ž­½Û·tB¦¾%÷÷~ô¬+©zIDATßoÙþ ýàg¿USš¯ûÁÏ~ûóùõ=¬¥Î óõ̾áå‹›W |¥©’[GHíÂ׉è”ÄÓ­ó«7EÏ «Ÿâ4K©ª4ö~cù“ëøœ9_ <0'Õå0"Ì Ê±“~½ÊÍôÊ<ÞÜû„—EÄCr\™õ•‹E›è\¹3}Ú´wû ±rá@xÂ@ÇŸñòì ü„g"àã›?ž@;€íÛÞç¯fûs×÷íßGåýélFéëëNŸZ3ºîÚ¾N@> /¾æ+“Î=Ø?vdydn¶çþCê=¸·loG|ÍW¢7ý]ö…IDAT·¿ç pñ¹seHw?•I”1ö;ôÒvEü]«H_›Ëš³ßjJy^>Øü±öxkŸ\jWàÆ[îbTwèý²¿õ¿Úåò¥-“Jö¼ßuä݃å;?ýì©^wJ’”ÍfÍÛbñů—žËçG)\£Û¦¦¥À‚TÉfè³rÆ„rù’²ªI:¥|èÞ²“÷ÑŽ| Žï7‡› KáŽ,…k4ãüŒçééÄ@¬-I¬´&‡Þh»Ú¶¾ebé7ÛZ)ËÅ\Ö|±zK uj'²Ìc®Ó|vFåž>78£¸ÝÇhYaþlaásçÊ€À²D$‘<üŠÕIDATt\xlÌ_˜þ“µÜvÿsà&§ù&`agvlLR,ïcFŒ«Óßî ¹©Öîbó,Îõƒ-,X+’$©ß–¶¡¢68õuEô{ý.…—n¾Þñ†ú¥Ar®áÖr+n‡ÙÙ’Ç5÷Vå€ïlx`y<󯦊úø§ÿ«Q&Ñ ˜³DeÚìRååÂ~Ÿ íÕêçô4èû%äYm|°ñ}¬¦4(æ QÙqasû‘rùûÇû;c<ΑOžÁÐîÊ¿BsµŽ­Avq°?ØÂÅùÏë'›íWgvì'*Ïm>E­Í“ÍfõÛäÔÇàØ ¯ÜPÖ.›Î ÷e —cgûŒ–:Õª—w´™IDATbôs8Ú¶à°žã›;R;wVœòéùÓLꓞ÷Þ<òîGå;úX¶ËoÙwâØ¹ÂHqÌ`H±¬Á|RKÛ\šÄ¾FíÌ85»Bö®Y./ÜÍE¹±Ä®Î|>ØÂÅZxì·ä >wápú ËœÞséɹUX pý!/&/QL875×>¹Ô½k¯[ÓþÜõûSJzíl¶¿¿÷sý½§ö“ošÏËL"rºuØ?Ï~Á¯n¼PεùH©ý.8 Ï«÷C Ž8÷jæü°°Ã‡x<ñùñx¸Á¹©éÉã…<Ïý¹‚E›ç‹àrIQüñxì\ÖoЮŸ„IDAT°KÌ÷†²æ£œ†ùZæ8øÃ_KÜŒ‡¥çRu†]; ±‡ðëƒò4Û|üu³¬0ðy¬fÎñx†Qçú]C„9§~ÛnÔ˜¡6ó(J»‘ï ™±¯ˆqÔq¼›þ’ uÚ}æ1h–ûm3>vߎ]Šù‹³¬Öð×mÅDñÇ㹩ÁͶ†vs¸1ÀëC7×ÅÉS‘͵RÌyìÌ`¤¾_X8Çã™Þ .Ï gøaÎ"ébÉ e ÷™>¿Kôõ˜Ý—#f1عAƒK·üÜÛìÞH†mEs<ž™ÂŠÇs‰ûßlv6_ÌÐ$gmîÏeH̹žÒQNž”J<^µFäãIDATJ6ÏT9`vV^ohË¡ý–õعb¯—äJ°Ôÿ™¤Ã—5…À1ÎÈÎf—“Q?#¿åÓŽ§B­Hž·¬vß3¬ÕRÌy,m¶ü .qâÇcWkyˆ½ëƆœmf·xó±ÄüÔg™ÍëÕ¹¬Š]¤ÔÜ!! O<ù7ù%˜O²°¾/_@<à‡@>ìð9:Á—‚=ðxÀÿg¼ ¶Ý?QÛžtOXË€>÷jæÈ÷ôÝçßðÐ_ívÙ˜‡5æÙ?foÉ8…þ ¸¡lü÷xžùÚ~6qÖî9öÁ()EQ%•åì¶ŸMÔç™ô/Ö>Ùj»IDATëØ|÷§(Á—¿ |öx^9Fi’kˆH®&mlK$z«–¡í‘oyª1¾ÌÃby4ŸkÀ=Ÿñ\ÑK¤$Ç÷¾õ‰Ý!Ë€–#¤Ì£"ív:žB“®V Apñxv‘&jUú¿ ))-ç†_ý»¡ªSO?õéïÕ¨Û7<Ða8êF<–ùÍF:aëÓ“pñxv7Ÿ9ïØácšð6,]1ëÛß´,˜J¥^^õ;¯fäf$ x&i¥÷‘B¤lXºbÖ]·‘’2ÿSUgvw~¡$w“¿ƒÇ€ï~ÆS=Þ†UgÍû*)Š9CŠd;Õ™;ñÝÇ€Ù=ZN»`W‰ˆa/IDAT8âÿ3ž'yèpzê³æÍ$²T]Ã×y ]sÜuŸ‡}Üà³Çóê×¾¿âëãþë×ÏØehø‹è> Žïñ\„´@ ‚èÆè„5€¢'Œ®=ðx ñx9ÈÚ7é¡5 ¨ˆïÕÔ2Ûò=/„¯¼ChàJˆ<^`|ÊaÍ!4 ð#,O›;ϯ@>—zvyô6ÊêOa—‡1ìÓ1zÐMýì ŒË¼ ‘ÇóF|–¸‰Ð³Ëc¹mHaÇ’*q†Œú-‹˜ €kH¸<žvó–ñ=}vsÌ«9'Ìe-Ç|š¥•çy=i„-IDAT•@{¢—dz›…!˜@>¯¡´^ɹ¬_Ê·t‰ŽK)„ñ=žü ä³üÉ×·úÍΜ÷Å}å:Q….§âæVÈ'¬¨ÜLb—Ç2ÝqY9G“,ë·Ã±~sô¬$DÏxbùìÒ]õYªÅ}Už2Û•µ«ÐÎHèM Ò²e+ÇKD'NtÌ*V|}ã¨Øh#tZ„“íÛ·Ñ®]o64Ü!Ö’y<¯ÃÈÕ6ˆN@aìÕDt(zàñ<ã{¼Äã¡gð#,½š%Jy¼Ç%EX<žž ãñ çU7رvnRùØ„ÈãyºÕ~ÒIDAT#¨x<¯±v–EàWpy¼Àâñ,ýÝ@dË06s »*hè —Ç ,Ï<Ù7Í-OCÒ؆È7À&ŒïñÜàK<ž]¸{×g¨]’áòx*ÄãéÏ¥z0÷±vf¹:†Þ¡gÑ3ž¨x<Çp5¯Árn2€ñx „@<ž!-P¸ :„±W“_wèú qI’8ýåd3(J ø/$Izîù­ª(ïOg3J__wúÔšÑu×®ËÕBŠŸŸñâk¾2é܃ýcG–Gæf{>ì;ô§Þƒ{ËövÄ×|%zÓçg*ŃÏïñ†t÷S™D™Cú¡—>ðf—Gô=þ¾ã²|‹ícý 4±öx9„Õ©z¿ìoýïŸv¹¬NWD_A¿áщ7.#Š\Ëí²ØùÝd¶;„!`F?û#KxîÃê4Ê$ì)Í••«éåå2hÛ –»ô«î-aäÁ›€óëHƒbΕ¶“³1(ÄÍd v0Û.-q ^0¯8?ãy½³ýQ–¨Ÿ¨\óx òì¢`éyïÍ#ï~T¾óð¡e»ü–w­ãpD÷ý1îSØuº©—X /爄Ï]8œ>°óé¹ôäÜ* (ñùuBíukÚŸ»þoJI¯½“Íö÷÷~®¿÷ÔþqòMóâþžHƒßð|84ÀŸ…GDDÀß{5Î@xÂ@€ð  Ž)2 ¼ xä¡G2¯ÝYq·û"æ °óÇÍ8;ßOš–C‹ìæ; È&Ÿðÿu0ðÈC|cÑèqTã¶§8#O#¿CëN«¼ÇT*ED´›ˆ"žœîšóIDATž³/2¤06ô»9¸57§¶´„NtSŒüîíaW°Çì0úI;É’ÔÖEÝ]´;OÓ·˜ö'ÕmEQ¨›ªjƬüžX«@À@x"þ~]$Eã"¹•º“Jw}” ýí퇿Ÿ=墭Á¦f ÈÝDD”Vˆ}ºÒ–b„(©ý”èH*”¢T‡’Š+ûÛS]]©ö¤\UåXöª™—{=]E@0 ©4UÕаUÕɪ¨’+’4¬‹^±È©—Í‹ÿŒyWͼ<°s•2^ð$e¹f°©ilsj@Å „3wL&"ÚL´¹‹ˆ”…÷ɖ߀ê4¨u“¢¯Ðâÿ}IDATpT"CÈž+^@ÌÜ1¹¦šä‘’ 9BòËRõ×_Ö‘˜ec©X½¢Ì2cœðÂãÈÌ“7NxIÝøÆ"jâ£?M‘R£Ë’Jw‡ú ÈÔ“Ó)»OÐd 'w ªKͨ“#uÆ× ^üžGQÙ¹A ¼NàË÷M®«#"êØœxô§‰MuJZÖ©n`H§|â ªO'bäÏ¡6Ëjí¶AÀãñEŽPÍ•‘ŽÍ‰övÚ8á%eÇ÷Sò°”,+J*©$J"I©ÔGòIN(hP‹¥ËÒçQ3˜Sô9Ùù uÂIrÂãNÇæ„¶]]SMI‹Õð”˪PmIDATN2%n}ƒ,óØe#ÒØgq¬Á®ð„ǵSã`å÷”j%ùJŠ:º(M”–)¡Ñò©_À@ÍÒÂ㎒ "ª©èä쩼—¾ Ø$ /'~Ö^0€Âã4ìÀëÇýì˜ðüG›I ;ÐÔ@@S“ X¦ ˜Á2]ÜÁ2]€ ššÂ@€ð„€ <á @xÂ@27Uêww¶ô‰²„#çÔ. Y&E©š«št|Æ1%A7U2´'I’~7›ÍæoŒ$I¾Ô|ÂãˆrÆÖ[à˜IDATŒºÙ5Ug(5Õ÷ÉUU¶ÉÊ~ºµy†zTÓž¥!’âÂãˆüÑ¦ŽØ&’åvY–+d¢ETAO4ßmŽTÓ¸hs„í÷ôèý•º­÷ŠúCú-§¶Kt8€ð8Òxe¢nÑ&}Jû}3¾×ÒwqSeÕ¤DÍ•‘ªI4á±J˲ iúÑ+Ð,EC ¨XH.< W“#IE&¢ˆ|üŸš²³¥/ÕF›5WFôóLëÉ¢OÉá9 b 'G”îjuC\OKQÑ/«J 459’Pªî[¸èÄ´*Cu‚w7˜Û“ù`Ù.%t~„Ç‘õ[/ErqS¥|¶ƒä }'šÌ%tâsú:NIDAT >Evº ^ШoÒ•ý¬<–²1o³³±wÝl~@xAƒ1+€Ð¹R¸À54€ð„€ <á @x/Ѓæåõsh2YAÕiR…º©ªf\íœ5¢íáÊ–5“£‘‹PäVêN*ÝôQ‚ö·oY3yúM/‰¶šš"wQZ1¤+mÉàÇ ”Ô~J¤“Õ“dY‰+©¤’ìRºR´;%WÕˆ6  „(rZ©º¨††EHŽÊUIª¨’å‘ WNÈÆˆîÉÚ… ;†5i`–XGã}D ¥-Šøð  „Ç3?¸IDAT5hÂc•Ú¤št<OvüôÞOÉŠYÆ t®ÁÅM•r„j®Œщ³{Y,Qg=Rõc3×§hôy ³ŒAu!;7UF›#d=µ‘<ð·ïJ '_.nªT§ŽÞ´ySªm Q>Û˜M±zÒE ššQ'5"¢$u¥ÚhgKß¹.>#ª›p…»Ç³Cÿˆh· øáñE}¢‹7'Ô.%M©ÎŽö¹5D¤¤âÊþöTWWª=™ÚŸÒ—ÒžÙØ•KƒègÓ§èÑŽúui  <î<ѼI›à¨ºf`BÛŽ{êõy”ËN˜oS?´yN1Cg‰aŽ0}Šy–1ËC˜ Œh(IDATe,xðŒÇÃ䙵sÖ¼¼~Nò•utQš(-S:B£å0P³´€ðø"GhÇ‚æó»bÎz_j†k*hÐÔ䈺8 f <¾`úZ` „€ <á @xïñ¸°|ù*Ñ&€Ð1þêAu*v‹032»¯V_››ç1¯6ÀõÙáq§ý•öh=Íh'"·ª3/¯ÅNw“‡±Á0Àe)†a SÙ67ü;IDATwúŽ…nx žñÀ%ë|„á @xÂ@€ð„€ ¼ ˜Ü´erÓÑV€áqgrÓJ$(‘€ö€„Ç—Õ©œ¨½#[Ïüñq!Vá@xQU‰FÔÝH4¢j/3¥òÈÖÇåæz¥½ýÈï@~v! %•#'‰E"«¦«{«¦S$òRËt"’›ë‰HV6ÉÿÙœVm('éÀLéD8#@tG^ZùÆ”–é™Ðèj–¤ûâÔÝA»ï«Z²ˆ–í0ä rÚ÷ñxÀ/ ¼ QFß*ÿS”Ú¥ÝD EÆ)“êOv*eþ«áIDAT˜×$ÏéÆôu2ÎhW!!”!oÐÔ š'DJ’6uкjå·2ÅÛ©;eΦ5ü,ubžuÓ¢­3аq¬ä<^ ,Ûº%KĨ*þŸÒævꎤ–ÜGêÌ1oÒ)‚‡=®@xÁ¡ªŽˆ"ÑHùÈé´àveÏ«§¬õZOéa®>Þ ©šê´~ÎT*0wXÎÀãŠ^ulu¹yNsœê‹Ý³b>…û‡Cà/8Ü«Ž=K{×r:07{¹Ÿ)ÌRÒ˜;Ì^p¸T]hÁl™>á•(9ˆzó/ÌCX@‰ƒ^MpÜãmß¾] ”ðx ‚ˆaˆZ3IDATvízS´” wˆ¶¡HX±bµh@Á€¦&€ðÞãq¤¥¥ÅœØÔÔ¼% l@x|iºó\ŠÔk»±X,­Çc áÂãŒNuªœ:u¤Þ–&w¢ÍÍ‘H$‰É¶´´Ô××Çb1Ë‚˜ã¤ˆAç wâÍͱúúÉ5uªS‰5Gëë‰tâ'P]ñáq'ÚÜ\‹Å'ìÆâqu·¾9NDíÙE©¦¾4O†‰0ðBMMîÄ››‰(‘ˆ¯Üv|WE}ÀK$âÍÍ1Çz,g rúMà#wôÏxD$µ´Üy"‘úhÔÇsisoB‡!ÂãÜ;ÚIDATŽÁãeÑ ¼ÈÁãåã²àî ;¹y<ì^æy£Õ ̃R @x|Ù¶mÛàæ`Ç£ëg<ǹÆ,Sàî /+V¬P7FŽ©nà„ÇÃp°––<ΠÿóŒ¥gƒ»+ ¼@Ñ (q ¼àÀxh !cÂ@€ð„€Ð«---[÷d)‘˜:u$º7<^¨ªki˜ÚÒÒ°uOÖrö1PRÀãq$‹Åbq5,!BÔÔ4ðö|k‚¶n­'¢úzëy@Ñáq$Çb‘ææDCCÞ={´ô‘#G65­ˆÅ"õõq¯4ð¸$ô#Å> !IDAT "Š×G”HE,‹¬}r©¶}ã-w¹9ËÚ'—ºÌ „Çh4¥8Q”Žÿ`08ÖMEPTQáq&A:½E›c‰‘#§ªGôO7hnP¯I}Šº«ß&× „Ç›¸Þ×9U?§mKKKKK‹Ë· hö„–N3œ@x¼‰[˜‘z5=V_¿uë"ÚºÕb5†Ó籕93oâ†ç:Ò¡«z³ìØ4(ÊàÄȪyÉ(Â^ ó&jPI--RKK},V‹%Æ£žp˜æúô>Ðn<oâæ$Ó´+1ÇZÔ‡:}Š¡-ªe¸ñ–»ô™áú –C7fIDAT„‰ÄÀ†ÔÒBDê\cÍ«™œ€¥ZìºR,SÜ…2…ᄦ:ÊÉã"ÂãH4UR©¯½ÇíòƒÒÂãH}}½¡Ç²¥¥ÅnJPR@x‚H< ‚× Â@€ð„€ <á @xAˆÅZ$)18f%ëwsF¿H:(,0r…;‰XleCCÓ”)- wQ$onn"Rw#VQ°zEå°Â+–A?ðxÜQUGDMD+âÍÍõÛ¶ÑS¦¬lh°+•n­(Ç ”&"Ú¶ˆS¦$ÜQµ§z0M„‡fNWSØ¥Òê@æIDAT€@ <î4e³-’¤­ªnÛ¶mM^” o@:n;æbAS3î\±B¿LI‚hÛ¶mwnÝêµi—énŽ!@xAÅô/ºmÛ”)SVN굞¬7énŽ! ©ÉX4Z¯{®‹‘úwÊ”IrlmZ¶íìÆ¤þYmQ±Àãqç]ê¶mÛW§uwBkjJP{Y ‰–éZ £ <wÔΕ)ºÞ”I¢)S+v 1·0íò”éò(”^ tlÞÖ†]P‚ ©™Au%„€ <á @xÂ@€ð„‚€k¹;qIDAT”äoÈRA@aÈXxÉsæsmúJÔ]ËSäú`Îì¾æ )Ý£ ^'„‘lóØzrw¾œ‘_UE <^H1wBèS=î+´ÌÀè8Ñj°3Æý¹/Ä\?[ϧv/¼°çJ±Ka¸;Çâ†> v l©³k¶›<&k]Ú6ÐÔ@^S /©Ãoa@xÂ@€ð„€}Û²àIDATð Ë—¯móçÏÓ¶!<.è?bÌ © € <á @xÂ@€ð„€ ¼0"éàT¿å6  )ÍT‹xp!@x…Ýtåvs¹[æ1×ÀžY¬€æº-8 ¼‚Ánºr÷S ë x‹ä„RÌÞÆ« ¼NxnÎíñ )ùßñ9/$¢ßÕ/|½šÅ×~KÄ–Àãnærw9ź¾k×aíñ #^g/Ï¡ˆùѱ gD/8ÐÔ@^1ïTp@xÂ@€ð„€ <á «R?IDAT uñðÖÅÃE[DáMëâáSø¦h+€` ¼@Ùü“3UÕe2Ù2üÅŸäë÷r›Ó=c5ƒcã??}asæðËD4õŸWÑѯmü?gÎüÉCN—ñ<âå ðxÁÑ—ÎÒ‘÷éØíßÐSϺâæy/-iΜD¸w‚êx×þÛGOïôÙ·Ï);mÌs?@D³oŸ3ô´1ÞúÔe vÑ@š_r?Šû¨ÆD/vÀx¼@¹á×­|®ÿà[étö†>~FÝîëwSV½­ nPÝÕg°Ì©OÑ4{TCöÙAÎ@x|Ñ^h¯nþå'k—?R¤BæIDAT›Éd‰è–_~²vù³·üò ¹ 6¯¦áîgô¦°sæ¯˳kž6ÏÊK #ê›M{WÜó†º}ÛÃo{x@lÚ†½w2$ZbçÔ qvà„Ç—Þ¾cW,\ªi¯ök¿òôêÜΙ¸×O¨8ödšçäDç§Wй™dŒªÆ]±p)‘Ò.Wɵs¿Õö›“¾¹×eÚ=eN£b.¢Ï™ÿ*îÏÜÇ‘i÷~кì~J¶“’Ôþɤ~¿‡]Ðpg›{DÌÙÌE,»R 22˜Û™Žõ;àñø2ó'>}Ï锥,Ñ컾MJbêgoxàÑvÁ@xܹáþ•\9BIDAT‰èw O#%ñôcëìzS@I¦fp@u@/ 9 @xÂ@@犟,_¾J´  0øÿâþ.êνIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/choose_url.png000066400000000000000000000337321203611042400313250ustar00rootroot00000000000000‰PNG  IHDRçf؃Å~ pHYsÄÄ•+tIMEÕ  ;Â[K!tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝy|Tå½?ðÏ3[ØÅ”$ ¡53Õn÷ªLPʽUfdW±*âUÔVg¦.7p VTP´¿*´EÊ"›z_½½·½s¢% !€×ºYf}~œ™ÉÉlYH2gÂçý¢qæ,Ïœò/Ïœó9BJ Ûnsƒˆˆ ãå—½ú§"^µµz=h`Ái§õ>ó̳²phDD¤óí·ß?~lï¾ýÐÕîhÕ¾í6÷¥—ü`è°ŸØíùÌfs”ˆˆ„ÃaªZ³sÇýíïÿ«n!¥ÔJöU×\VtQÿºÚú@ X[®««ÏöºzôèÞ³»Ùf³öèÙ½ê³ýF1IDAT/¶üùc­p[ 8@+Ù_þß7ß|ÛŽ«Íöêz÷îi³ÙÎ:³[ÑEýËŽ? @ÌšõðUÇ_YzÉ7ßÿê«#µ'jëëƒÙ>T"¢.å³C½½²µ{í½aê.Ô³WÏsÎ9㬳NÛþÁß·lÝjp^ÿ¾ß|sì@ÍWGްÅ&"jgßÖ~3èí•g–…熜‰>@$zˆ˜¾ƒåÀ·¢úŸk–®¬ž6ëÌžgù€<¯_mÐÚÚÚúú`·n¶å‹ÿÒª£™1ï§íöΈˆº¢³—,÷ó+ê¾kÀßö‡ý–ìbþôÿŒûùï®Xj·èÒbIDAT›ï©¯ÖÖF»j [ží»# ñóF>;ü©¿Ö$BÝm–n‹UÖ…zXÍyæ°?PBC(â†ëÃð÷êm=ÿ¼Ëx¶ Q³Âu 2 ­ÝºY öî&ó¬!¤Ö°Lx`« X5DB2ØÐ B~ÄNêûîh°÷Ýïµý!¿É*´Çµ'¤EæÕW´þàœÞçèmBÃ×ÇŽŸð‡BˆÔùë`DDü¦€ø^DD”Žß‘¡ ×™ÃáñÞ§¼ùàÝÒ,B¡HDˆøƒ›_`ݜ۠þ@0"ÂÄʬ?ätUÛln¼B2`Ê °Ž¾vÐM?ÿ‘ü²wøÌ^ÿYõÑñ˜AnôIDAT¿ï—õ2ÜPg=²‹ÔjM&SÂŽDD”R8‚I"XÚ¸ÿ€Q篚>5Û Ly}¥¶êë ŽH‰HIeÖ@0™ œvþé{÷u]õý·ü¸þKÜrÿ›GŽŸ8­OKϼ`Àjí ‘'C_6ˆ°`2™ $¤€ÀöEû(>öSžyzòö»ðÑâQ‹>ºòî·~yyG½ÂöE7vÞÛé|ü¼Íü÷lŽB@J)!ý‹F`B›£…zãþC£ Î_ærjOgV(ZÉùÍa„Í@0‚X™„#Z­¶0 a2 ³Å¬ýŸãkÏ;çÎßIDATaÃÔ}Ö#\‹_>[67ôï}Z¤!A+zØ … †ýÇÃõf‹Ъ¶0 %Þ Ê€msßsŸyñ³“Ïï˜ß!!˜zô°åÂÛŸ¹æÙƒSŸ]4u@{¾BÒÛyaÐÛw‹´çKdkAîà'l®2Ö ÇÏ €P0(¤°éÐÝw¿è9Ä ÷õãg¾³.^²Ý}€°a¿”¡‹Ù,…„”&!íµMèÖ-/þ©ð_ÿµ#ß|É%SfÜóÐæíùßË‹/‰øC!!#&“Éb±tëÖ=pº- Àj12vÖŠ)z€2R/‡]V‚í»ª¿¶YE"Q鮹|lnIDAT\°e¸0Û –ä›{Ù,yíùZ&“ö_©—úÔ|k5Ÿ#»È_¡.ò6Nü|ͱ¿S"ö º,†0IiÂÞqÇ/¼€X᎗ìƒwÜÑ8\$‚p€Åj`µ˜… ˆöÚ&“Åb–Ñâ‹yÞw„”¿ Šç^>rôO-f«”ÈH$‘2„!ƒÁ`}°>¸w÷F‹¥qÆEÄËœÉdñ.̳¨y}Îìå5€üI+Ê'B·P8iÉŠ‰ù _5ôþ P½fö´Õѭˬ÷â‰Ò…;µÇ3ÌõîP³|Ö¸åê}ïþ²T#l[8Ö½sèŒI5Ëßj IDATW×ÚÌ(_2=ñµÞ÷î/ÓýÄÞÉd>°c÷ ¤°@˜‚æmO4*å+V¯™=->~Íêi á-ŸT}#˜Q¾¤lWÓw4´éþ.%vž$VƒÜÀ?§œ 5¾2öÇ% ã­7€`DÚd0û*Àþ;f¼°@¼dï¿c¶~@!CÁˆ`±˜$íÛD ³€ÙbŠozøÝe—ºÂÔ«hë{ïœ~Úi§Y-!)#R#2Õ…GOÔ~×P±¡ŸÙlÒ}œ4j³yëîÀÐáWBD®¸}örÜ´òO Ä.÷¨…Óž,Øù@ @ÁÄK'ؾ°ô±ÙÓL¿çküIDAT}s–ý"¶qÍši³ž(ìºé€guÍÀÉå¯O€ík^/ˆˆ¿|ãÐm“ߨ%2pÊËýÐŽüK_œ^ fÅ­I#/³6n|á-³J×<øÁö??T6ØüÆÏÀMO\uË/d0«Ùkì­¶øC‹¹»eÿÇÛR`5(™1ùiê~íUËn׬~eûÎ}SoÇ®-Àð+K ¬Ö¼ÆÏB³ ñyml_Xzí¸«Þü›ÒèòÆ¡ªW¥zŇG”>¾õƒ[~eÙþæþùËßÜqË´ÿÛZƒ«ÞoIDAT¦– ðãÄw´?åïRòa7ù„=9lárEW™”ëâtÓ!ZÑBû£BÁ ¬Vk8 ‰ˆ0øÅß‹—lĦJ~;úgL2D(`³Yµj¯•íØ ‰UÄfa°ííÇ‹ òotÌüò뿾µlÉW·˜­ˆ)–µþà?OÔí=z¸{ýÑ3 ~b³4^e#ËçÞ¾ïójë5ßïi9X³Àª¹¥«toPF¢ïO˜LV« ÖèÕþê½Àðü|“%Ïb1G§\äÐÇVNÛ;uÅÖGF\öHᬕ+g"V©!ÌÖØÌŒ0Y¬æƒ5©FˆÈè6V[^ž0cðm3Ë^qïÚ›IDATºÆ¡ pòô+a±v×_5Öš×½§eÔm³ÞܵtÅ«UÃo7% uð@ÊW¼êªáø`ëÖGMÛ §½ñ`à¡Y;_-<¸WN‹uÔ•úw”îw)ñ°ÛdÙ΂Ív.Ðý! k´¡ëŽ"áHH˜@FfoÜ/ÙŸÏšuáÒ¥ˆî%£ÆDHDÂÑ/é´2+£gúi3$&˜-‚ÁÇàÿ{÷ÌÙŸ¾òÚŠý??xàïgY(Ì‘H¤!>Rï?|üÄ9Ç[­63«Í=*)…ˆUÒ¼ëž|lÇå¿\þØ#WϽxð…bkxÊ‹+&çëÞâ—ojŸLÂl¶Œ!4)IDATYͰ˜´§…aû¾š³õ'k¼4›Ìƒñ»]SO¨¯NžµféC/_=×›'«9^µ­VËà /ÄÖäâsîf›5ÚN1ÂýËå+WÜzƒJ//4÷ìÖݪ/‹æ&»ØW  Š„¡Ò¼¢yÔ5#Ü[7mß1pÚ”ƒÌ#ÞüòJ lb)òlÝ­–„wôXÊß%ÓîäÃn7,Ú9‚Ÿ¯9AH !¤”ÚD‰ö@$""‘ˆ”RqÇæ?ÅKöž™7k?/{ ±ÂýÂÕ×J)Ãá蜸ÕfÕÎ*D$„X¯-¬6[üµwlTNœ8ôý¡Ók¾üß+%{zœöéÁO%êÓ<½IDAT#æºþºcÇlG¾‘ 'NôéÛ@žÕ¦Íâ,%fôs 7Û¼ùÀÒïÞuíµƒ^-_µfûmÏ^ßãÀ’ñ÷áÉu³¬ÚùáÂlµåí{ùW¿Ý‡kžXXxxÔ /mßõùmÿòãƒË^ÞŒAÓ'–Á´å¡‡­ Žúé c­)G þn±ªm²ä ¾h6‡a²æY¿wíµƒ^-Oá£Æc˳FßêèÑ#~¹iÓ›¯ pÖ¯òÍÝzu³Y¡cÖï²iÛ&`à•%…ÂüuÂPi^ÑlÓÆÏ/+9ÏÜíÜ;qõË 6—•\¼^=ly,€þõ:rЫ/%þ.!/Åa©dÂIDAT‘ }Ã-¢·ÑÊÛŠX$Ìî¶ÄKö'Óo‰wOŸL¿åâ×_°qÿ¡ñƒz/Gg¶ó¢Í± ˆŸ¯—g‰Ÿe‰4üô_&ýè_ &übÖð þ㡨?øå±#u!ƒ_Ö8qÂ*‚@@^7 ´‰!!cý¬Ù’—gûÂó›ìw®˜>oð¿üÞ“{ì÷=4ô²‡€¢9ëÖöýÊo²šMÀÞ5Ó®^£ísíczà§î}þeþ{O~f¿oÊÐ50â‘]óÑû»Cû6=ÿãM€ o[6±PXŽÅ?"¬yÅwνöåùËg^Ž‹îüýïç½÷äžÄÎê8"jIDAT®?¶ØoìÏFš¿i# ®(¹ÀÖ£W¯¦E[ûÚå5B»—æè'¶Üÿ£–}l‰C]œòO˳ýlô¨ù¡N/°õèÕË6vÌè¡Ë¯D÷^§Ûò>«N|G}ÿõ½'?Kü]`IuØí„³¥¹‚­vNH8Ù¯ñAô/ZHBF¤÷²Rí©:ezÂê”éöU¯ð^VŠÈpì/h^žU«Ïá`Z¾ö}÷Îì}úéÚËÌø·×‹ª¼>çÿåƒu@Ÿ3{œ ›Bá° ¦Â!“~“÷éÝ£ ÿ5Ë?-z¬Ñ”º~òõ‰Þg_x~ѧèqîÅg÷:öõç‡êÖ¾ƒw°åVIDATúŸQ³xôu‹ƒW¼<±0vÌ=νøì^ÚÃÆÑëü‚s{þïì= ËÊ;}À >6ìýâ°?¶W|mmò‰ÇU/Œý|pÊ‹+fþ¤ÿ€³’›YíøãâG˜b¨Ç 8qhíi±§Ç¾þüxÏè^)Þ‘~kßAýÏÈKóZ킵 Wðó5gÄÿRIý_°?ÿ½Âþ‘`Ðd2 ³ÅÔÜ_½ˆ„ ‡"‘ˆÉjýGõ×¼»Nû8vô»'ŸZ!ɳYû`è+‹p¥—NmÉ1æÙ¬B)! Ñ;ÿÒÞºi¸>.í}xVÿ‹õ÷¶Fg8òÎËtnR™°1Ì6äÆIDATÛY^š°Èzî÷/:7Ý.É#èFWß:9ßÖ§o[Š^6Å.i—§xEè;ð¢¾)·IñŽZzØtŠaÕÎñîU›{Ñó¤Pë¦îˆ˜ÌMt‘H¤>b‚? Àf³h×í4~i2Ãj³jí¼òçÛØD:û2T@›Eׂįµoòÿ©èيͳF?o„Ù¬}ft¶<}eÙSÿøÞ½›V_©?ëüÞÙ8†¬b%ÈüGQNˆ_Ë.ˤŒÍnã˯çc B ÔÂË·£{AkŽ!a2ñym«Õ=\"v~a´vCŠø>±K×EìÛR@HÑøñÒÞ‚‚`_Œ*u‘IDATðáþ™¾¿}“ÙjÉFHwìêôq\zú)øMŸd1Èü£Ê±ù†è3¡õµB nν=ÊŸúò«3Z;f(|¤nνV«9–ôëµ{ŸÞ×’•›ô>ïÒaçeáusDt ø÷‘?ú¸·GùSñ%Ú8Ñ”©ô]nÝœ{ÿ}äâ7Ÿé}zìdy6롃;ò˜‰ˆNi×–£tyvlðûãõù̳ÎAü®Ÿîùª½Žˆˆ:B‰¾jVµgß¾¯³z"ÊaGñåá7ì\T(oL wŠ&öýcÏ¾ëÆ Ë<à)tGDÔɶ¼ÿñ¨‘Ã.¾ø¢f·¼ð“϶¼ÿá”Ie¶á·‘DD®%%»…›ux¯½óéËâ‡þÇÇ-Ú§fÅÜ'pß’iùÍoÚ2í> Q+…Âáf·iIüj+ªöÛk—¦[uÄY)—¿sGÑõ/T¥{JDtêð7›ÝÆÒ³]«6ÒTçtÕ|çã—ùÕøÿùrÃц††††£GO³þIDATí׌Ýùøeúm†>ز(Ç54ôOoøùØ··>a›ž=»5;NgH„²¹ÖøB·èvâRXvc|ƒå³Óï]½föð]5 '.Y>+æ>’ü××ì,[°Þ=`õŒ¹««µñ𮀒û·. `Û±Þ]€’IÓìzbø\ý5+æÎ~½&>H>jâÃæO‘Ó)DÔ®êë«öäI׸áçcßXýNkÇéÈyíÐðe†õ5{§_W¿dë­’>±¢ä~ æõšI[ß½0iù»“;½ãVo›8I·v§wÜê5CKwÍöâþ­ïÕF[1wuÂŒ8ÙIDATkfWO\¿µD[ûÄŠ’ûñäêÂë——»žðXµ‰¨ÕÕûµ³nž_8yÒõK_[ÓªqZ]µ…úñŽûíµKo˜0Kÿ³@ÃÑøŽž_”0TŸ3û¼sϵÇ×?ó?MÖå—•ä@þвüÕÕPˆü釯Ö6¶É@~a и6¿0@Í»0ý¾¡ú6ØÛŽÝ[]v ¿t^_8 Ö»Kîw·ö·…ˆ(³††€;çLÑž>_¾J{<ëæ‰Ï—¯jù8­®ÚZ™Nž!Ѧ¼õ?ýÇýñª½aéò1wÞžrÀ£GîZÙšššsgo+Y²õÅüèÉ!m”4 ¸gWÔIDATR²¾ ضpìð…([°Þ]ÒÖ‰ˆ’ƒÁ{æÍÔ?³xY0|fñ2mÉs¦<³xY ÇéÀóµ~ hذtù˜YÑp4ù—V²mšÛj†–&ÐX'^³s[MÊÝòKKæN-¿`@MÓ jV,\] ”-X¿|b~uMêq‰ˆÚHJùô¢×<½è5“°¤%ã´q^»%£k½ö†•3õçhhHÞà(º¥-Ù5¯Ïû: uÄe¨YѸ*ÚÄüáÚÚü¡eifŸ 'Þ?}îìáãľlªlÁ’ýñ ?ýÅ%X=cÜjÈŸ´üEÎjQÐÊtæ%™µ®jg8e—‰ JIDAT;ÙwÇCVþqÌÔÑ@Ê’}zÚ’?íÅõÓ—,i|VrÿÖw›îѸ6¾e “šÛX°¾,ã""ʾVTít—Ò¤3ïí/–ßöýÕK~—nƒ/Úª‰ˆ¨3$ÚY"ÍnƺLDÔ¾ÚXµ[ÛwÊöî«éÝ»GK6kv›ŽíµÛ€yÖDÔÅÜxãõË—¿Ù·oßf·üöÛÃoÔf؆½6QÇ:ãt›Õjëßï,ýÂp8b6'ž{}üø‰žy)NßÐ3\¯MDÔżôÛ·FŽÚ’ìì‚‚ÏV¿µ9ó]:¼×nK¾6Q×rñÅ54jk„Ãa@H»ÆÝ£N4XIDATáH$"„øñ.Ú²õÃÌC5_[õ:&`­Ïmoùñå‚è5ŠR$/k æku.)HÈÆb-DË ·1óµUïªÂ!_Ûî^ë±Û=>)}n»Ýí‹æ¬T{¼  ¸žâ )¥”>Z‘.¨(V+;ð-e™QóµõštÖvUE¥Ý³Ö©ÛÀ^\ K¸*d…³¢¢µïˆˆ(‡>_[õ:ŠÓ'}öèW”¨TU$L8+¤—.8+d…3õXDD9ÏÀùÚjl®Ãîoƒ E0IDATu¢p:ª²NÕoéuyUÀY!}{e¥š<QaÔ|m»Ûí.!쟻Øáv§ÓΊ Eh‹Ø=°#º ìŸßEQ×eÈ|m±Y)¾^¯S\B)¶ë·%"êÒr2_[q —¢=tVHNbÑ)$'óµÙZÑ)«ßF2:Šˆ(+ÚXµ[5ÁMDDí…½6Q.a¯MD”Kº\¾6#^‰¨Kc¾6Q.a¾6Qç’ºŸ€.°µE Ÿ¯ít¢Òî,öxg…Ïî7àZ3¾&ÀYìñ(à¬ű1—pU2l›ˆº˜È׆êQR¦Kò‹®•²Â©ÉÉÈIDATx½Ñä(Õëp¡B²dQW“ ùÚv;ÃUëñµÅöh‰V=óZ‰¨k2|¾vØ=NÅåRX·‰¨ëÉ…|íT £YÛi»}p9¼LÚ&¢®ÆðùÚN'âw®±»×z!Иµ–Âí¿Ž$¢.%'òµÙÝ>én²ÄçÓ­óé—0ˆº œÌ×&":eåd¾6Ñ)‹™DD¹$;™—?²ûòGvŸÌDD§¦,ôÚ—?²{ª±§š…›ˆ¨µ:»×Ž–l 7Q+uj¯­•ì¢Ñ…ÚӢхT¸U¯ƒ—Ü‘1H) ?1Y´&ö¯cóµ¡Ujࣇ†Àžj .\5iÈR$™IDAT嬰jÒË?öTCšì£zO¼È2R„ˆ(®󵡛¹ü|ôÐVMÒ¯]½{÷G I,Ù{,cUõ:&xU'/p$":4‡¤Ù)ìç_ª^½»¹é‘JU-.¶«^‡Ãëu !\  z"ÊáU£ ^Wt‘KÑöTb „k¬KØ q”èìIÒ""Ã騪ÝÂ)ì´…[õD+¨«2šÄªKÙ¶»}RSQìñ*ºµñ”íhÀvt«ñÉ(.‡êÖVûœÊ¯ªz'xŠ+¢£¦ ®""2€VWmÑT|¹6OÒø36…­­]5i6¶Þ´Rž®pÛ=>}IEÓ”íxWìRAîùdIDATPYÙd­–²­®SÐ4•;qƒÊÊx3îð¨ªZi/.†â.pVp"ˆ ªÕU[6_ž¯ýѪIÑo Ħ°æµWM/Üi_Ï^\œÙªzÅ©uŸ§íóÝñ­‡³BJ)Š~–…ˆÈ`:òd:éfB´ÂŸHIAQ»½8a¡Ý9ÞdHÙ¶w":w’š½¸XmºêuyUÀY!}»ÖÀNÓ£Ú@k¨' @ßtÇgQšP=á8+¤Û®zWÙÝîb¡­MŸ²­‹âœOÒÎ _ã°{|¾b8¢¯i÷ø|IFÈ×NZÀÎ|m"ê¹Ôkk˜¯MD§²ëµ5ñ«%Û[b"Ê%¯Ý6Ì×&¢.C ¡S”ÿO¢âIDAT‰ 2êŒ^û÷SÚƒ;¼÷¶í刈HÓá½ö î§fß:Ç¿“‡ÿù‚û)n"¢“ÑQ½v¼¿>X6÷^5ì¯ ûÂC¾wÔ÷—¿ØúÞû`ëMDÔzÕk¿]Y8ÿ™Ä–\ÚW¼ûÔk[ÿãîýi3ÖÝѶ×&":…µ¢jg¸2¹ˆoSœ÷ÌqÈìÛ~|¶x÷©§ãS%/=õô6%]£­zOÓsïìæ0­íµS¶Øéªy­ßzi_±þÙg´§Ëæ.¨”8Ø ǧP8U»ŠEõ:&`-«5‘N¯²i‰#uyá |»²°àæ{ n¾§ä¼+|€IDAT¿ßíšK{޾¬÷¿ ;C[Xpó=oW¶d´7Ñ-Ò–5 ×î¸7FD”=Xµ×wûóÿž(_<îƒÅK ¡@CÈÑM~õÆ9‡>Ù¦8[2šÝí“ñÈx@q9bYÚÚí µ;îeO«¿Mï/cjg•è©Ëó×…Â!Yë·ÖŸ]žo[øëEÉ._÷'/?sO3/¬Ÿî¶ÛU•vÏZ}Á·Ãã® Yᬨhíû""Ê ­®Ú2ÍõßÉ1Ùµ~ë+å_p×%Gêóꎂ €Åß•¼ï¼ŸkæUU¯Ã¡8}ÒgÎw£RU‘0ã­]›®¸„pÁÃÍuIDATY!+ZÔÃ唜!ùdãØO6Žu]—¸®[]m0Šˆgî{tÙÙƒ†Ý÷è²H ‡³G²ÕuŠ ÀétªÊ:ýìuŠpm""c9óÌÞçœsÆ9çœqÁg_tQ¿‹.ê×ÚÚx¾v«©Ë Ô‡µª}ÂíçòeËOú°×ùWüêÞ™Íaw»‹…CxØN;8+*”è"vìÅpDŸÛ=>O=!"ãùöÛc+×þ>aaÙ’–кªÝ¶[ØÔú­¯¿ò—w]àX]À£O-›1sF¯ó¯˜1sƱiºí¦ù×)¢ùâ‹—PŠíLï#"Ã;óÌÞwÏž¢_ò ”•IDAT¢VîÂ-¡U»Í9Ÿl«=ؼuõÁ];ÿ¬=½eæMêüÁ¶ ½­/8+$'±‰(tv¯}ò–¼øÛöŠ­5åœ4½v¨å#tjÕnþô>"¢.-M¯ÝŠ;½tv¯Ýª`îGožü«×VvÌužëµÑšÉñGožúÀ‚˜êÞ½íÁ±%¯ßÕ‘‡FDÔáº`¯}ûÌ[´Ç®yðg󾩖ß5œÞðmÿúÐGb«â^ZöjG(Qǘ4~,€ ?Üàð¹Ýkoü´ß¥×¼æº„Ož?ÆÅŸïXöîîþk ‘¡u൑)5{Æ÷ÞÝŠºÒIDATÔîz#á` ò‡ƒôË?º$èòðçÚ»û‘T(®hî_ì´À¶¬M³žˆ(Û:»j·d^ûÈÑ ¿.¨ •ö3—ö7•õCY”ö7—õ3—õ3—õ7•ö³'Þžr_ÅåB…–XéJ¬¼ª×]++àJNsU”èZéóTzöJDd¸ymÁ†Küµ¡ÑçýöÉÅ6ûãÇ›‘x6¡¢(NgØÇ;íJ¥ }ÄT¥ª:Úå8N§Ó¥T¢iUcT`¥ª;yM<áæµ5õµÁPÐ`ê¯2â½òÑgÒ®³«Iu•±B^l·W&u±@XF‘AN?׆IDATeg^;óÏcâ[ÿ‰@8½0ÿ­g—,RÐ Ú¯”u#‹‡¼õ첂n­}qg…Ï©Dowãð¨ÅÅ)ºiíî N…·Ã!"CÊμvæŸ'Žô ԇáèõê l ø°ûÙ5o-Zöjsçü©••v{qÂÂøq|{òÚFN§SåípˆÈ€ w‰&XÐ’]˜LÑŸ&À¢;^KŠcw:Š¢Z ·ÖL«^Gâ!ªw‚Z^·nm4 EÉTÔ‰ˆ²ÅˆóÚƒ~Úû—þ8¨û•ÚS›ˆý47ÙÌ&’öŒ¦nk7IKË ´{|É7×tÃY!ysx"2 #žCòѪÉÚƒ”©,ñIDATÛîÙÀf›ý.òåÁÝ3o¹eâwϼå«9åÞIQ€v·O¦]ÙÌZ""ƒ1b¯ÀjÆ7_ì6‡¿Ø àÉ_Ï|ò×3M@Ko]FDd(R@¬O¢ñqsŒØkë­|ôfýź×f7QC÷ÚÌ×&"J`Ü^›ùÚDDÉ ×k3_›ˆ(ÃõÚÌ×&"ÊÀp×Ff5_[·cHˆÈ ×k#–¯ Èæ‰ÆsãÕH Q˜9_Û Õëp¸”¦É}±|m' ¸„ÛâúH@q /˜ÒJDe¸ymd1_P½¯Ýç¿Î1¡å¨ó±×F–òµU¯cÖúÜm¯µIDATv¨ëZrDDùÚqê:EU=ŽèJÕãàÔ6óµ“×ikS¥e›áÎ!Ñd%_›ˆÈøŒ8¯­|m"¢N „„ó/b­ ‰6â9$YË×Ö/ô5÷Nˆˆ²Áˆ½vækű×Öc¾6‘ž¡{mæk%0t¯Í|m"¢Æíµ™¯MD”Ìp½6󵉈20\¯Í|m"¢ wm¤òµWcI|û̉ÜDD$;9$™iùÚºPi?siSY?”õGisY?sY?sYSi?1;s¾¶”>O¥+±ÎÆòµ¥”p¥ ‡R½Ž&åYQ¢ÛKŸ§ÒË4)"Ê:ÃÍk#«ùï}ëIDATÚv·OŽ÷6†k;+*÷-潈(ë 7¯­ÉJ¾vª×áð¨ÎЦ÷Å!"Ê æk7KKpu*¼•$óµ[Èétªje+v "ê†;‡Dc|mÕëŠõ׊¢´®Ì¥&c¿¢R¥N§gÄyí,ækksØÂã¬Åp8„':²d"7eÏ!Éb¾¶Ýí“nýê¤í‰ˆ²Êˆ½vækű×Öc¾6‘ž¡{mæk%0t¯Í|m"¢Æíµ™¯MD”Ìp½6󵉈20\¯Í|m"¢ wmd6óµU¯#¦Ëa¾6 óµu*ÕâhšvE±g‚We¾6Žáæ7<[IDATµ‘Å|íÆ4íb»=a óµ‰È 7¯­Ér¾¶ºNsmtóµ‰È@˜¯Lq9çÚxTóµ‰È@˜¯@q ¯=E 󵉨}H) ¦­ k5Ü9$šìäk«^GÓ’Í|m"2#Îkg+_[]§¨PÕX ¶Ýãó1_›ˆ ƈçd+_;)\Ì×&"£1b¯€ùÚDDqFìµõ˜¯MD¤gè^›ùÚDD Ýk3_›ˆ(q{mæk%3\¯Í|m"¢ ×k3_›ˆ(Ã]™Í|í´iÚJŠXW"¢l`¾¶~çiÚª×Á"‘qn^†È×nLÓ¶»}r¼×1¡EïŽÖU6IDATˆ¨£n^[“½|m¦iQ§úÿ¶":ƒùÚ ˜¦MD†Æ|픘¦MDe¸sH4YÉ×fš6Ÿçµ³•¯mO•¦­Íspg»‰(ëŒxI¶òµS¬MºMD”5Fìµ0_›ˆ(Έ½¶󵉈ô Ýk3_›ˆ(¡{mæk%0n¯Í|m"¢d†ëµ™¯MD”ázmæke`¸k#•¯­z±Ì%!"#`¾¶~ç¤|íJµ8º¤¢Ø3u›ˆ²ÎpóÚ0T¾¶=¾¤Øž" ˆ¨ DôR€¢åa­†›×Ö._[]§À¹–…›ˆNž”¤ÔE)µ"^›ùÚ‰RæÖ>nIDATk+.‡â\›7EDÔf¢5óµÓÐçk+.áµ§ˆ$"j©½ûjþ±ç‹ƒ‡ßøuŽ -zƒDDÊpóÚƒäk«^Ǭõ¹íP׵䰉ˆ:óµèÓ´ÕuŠªzÑÍUƒSÛD”mÌ×NIKÓŽo­mŸ*'ˆ¨sîAòµ‰ˆŒÆˆóÚÊ×&"2#žCb |mýf¾ÌGMDÔŒØk'`¾6Qœ{m=ækéº×f¾6QC÷ÚÌ×&"J`Ü^›ùÚDDÉ ×k3_›ˆ(ÃõÚÌ×&"ÊÀp×F,_[·„ÛDd†ëµË×äˆ ójÙV›IDATâ×½Ä/ª‘¢0s¾¶ª×áp)²Byd,_Û (.áð&^©åk;µ-'xU§Û šÿGDd†›×†Áòµ‰ˆ ň½6 “¯ @›$Ašè"¢NÆ|íú|mhÑ$Ú-ËŠ=8¯MDYÇ|í”´|mý’b;ûl"2#Îk#M¾6"ÑÇš4ùÚ.EÓ©åk»£ ÚÕÝäE-_Û—°VõºÖ¯pÛÍ×vG¿Ü¬pB7Q+tÏ«ÿòÛ¯7nØ5¸¨PJM’E% â?%þ±gßuã†õêÞ=ÀFœ×6R¾¶½Ò¡–r8"¢æmyÿãQ#‡]|ñEÍnyá'ŸmyÿÃ)“{ÂêlIDATÊ2lcÄ^Û@ùÚv·Oº3-Q³ZR²µÍ¶lý0ó6Fìµ0_›ˆº€P8Üì6sên´É6íq0­À|m":5ù‚Íncéi¼ªÍ|m":554šÝ¦gÏæÏh6t¯Í|m"ê2êë&OºþÕïè—'/É,;çk·„–¯ýÀ‚yÇ÷ÿä¼Ç–tèu¨ºzÿäIט<éúºz¿ö+aIKÆ1\¯Í|m"ê’BÏ—¯ºsγnž àùòU ¡Žc¸ymækQ— <³xÙ=ófˆ—ìg/ÓVµóµS®Õ­-cº6 óô¢×â Ÿ^ôš#ÁœÍIDATÔiÉ8Fœ×Öòµu¡Ò~æÒþ¦²~(ëÒþæ²~æ²~æ²þ¦Ò~bvæ|m)}žJWbeŽåkK)+àJ.ÃZ¾vto¯WÕ®¥Œ.c൭pëËwËn^FÊ×V¼•Ÿ²Q»k[Ɇçµ5ÆÈ×V\Šª(É$¼¥ eóµ¤É×N5áBDÔù˜¯RR¾¶}¼Së͉ˆZoレ޽{4ûkレf‡2â¼6Œ’¯í,vº¼ÚM™¯MDmuã×/_þfß¾}›ÝòÛoO¼i¨_òøo»úCDIDAT^ÑjuÚ^{æÌ©éVQ¶¤­Ú ežˆˆŒ ³¿$"¢“ÁªMD”KXµ‰ˆr «6Q.aÕ&"Ê%¬ÚDD¹„U›ˆ(—°jåVm"¢\ªMD”KXµ‰ˆr «6Q.aÕ&"Ê%¬ÚDD¹„U›ˆ(—töȈ¨… Èö!t¶ê}ôO /ÈÖ‘dÅüy·Þ5ÏÝìf¬ÚDÆ%¥Ìö!t’ùón]ô\Š[x;z ya—´î­-Ü’U›ÈÐN…²•¹`9*:íHr«6‘ѱl‘¿$"Ê%¬ÚDD¹„U›ˆ¨Mª¹¨ªÓ_–U›è”VõÜÕ…h¿F<·hZŒs›¨IDATþp{áÀsþÍ#l¸=þ6 ç¬ÏöÑœVm¢SWÕsWØ0vÓ¾ÕûTï{iðâ«£…;ºzш9{æ½ üºìb{¨zîêÂ9(¾Í娰!Û‡t2Xµ‰NYë/Ƽò»‹¢OÇ–¿?6D»ìªE#F®óþæyEi÷Ï{6lÀ¼÷_{>¦ü¥1Mþ‘qõâªè¿0ωöã±^¬Ÿ3P·¤jÑý.YªMtªªªÚS4vŒ¾( ®Ú³ÖÏî"%¨Ú°¡jpQÒ)ºk³ÖzW—^¼x=T=[5F[2vÃâEUسxäí(uè×­Ÿ3rÏ«=S~`Óu@U¼¾ ž÷þKU¯Í›îVckÝIDATÊÎl@»ˆ½ÍÑÉë^ª.‹¢Ú/ºnlš^{ð¼òù#F(Œ)?Pþ~Uü)Šæo*ïèOU›è”Vt׿ê»ݽéýø“±åûÆvò!u„ä·9¦ü@ÂG㻎ÿݽißݺMžêvéDœ!!"Ê%¬ÚDD¹„U›ˆ(—°jå~Idh-¿1"Xµ‰Œkþ¼[³}YÆ­d¬ÚDÆ•ò¸§~h¥ÄªMdPÕûºþ}~3»kž;Û‡`Dü6’ˆ(—°jåVm"¢\ªMD”KXµ‰ˆr «6Q.aÕ&"Ê%¬ÚDD¹„U›ˆ(—°jå’èíW¸ïÖ±5IDAT]=ìñß¼’ÝC!"¢t®ºz˜ö Zµo¸áªn¸*{ÇCDD-"fÍz8ÛÇ@DD-õÿ”­Çà ÅšŸIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/commit-unversioned.jpg000066400000000000000000001111411203611042400327750ustar00rootroot00000000000000ÿØÿàJFIF,,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀÊ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ì|kãfð„º|I§Cr.£c–eM›U çcg;«•OH¥“C¶`½H˜qÿißQdÔü<ŒÁU£”# ‘sÔ1Yצae¤yÐ¥½¥²ª©“pÎöËdç¶zc¿$úXl59ÒR”nýIæÕÝ—OÆ·Úåt;f(2@œg®;ÅQŽù—¢ÿ¿ëÿÆëƒÖìm-’Y ˜3° ÛÓ#žŸÒºÙF>$7ƒ4ø,,´é'´µ’Â&–0ëÍæmóä’rÙ<‚y«úµíËø¾†u'$ýÖjòпýþ_þ7J>6ÉÿBü_÷ùøÝG§|5ÐuMU!ŠmJ xõ»"ey‘ÞO.‘dVòÀ^SHn½F*¦“àmYÿ„wÉ:•¿öüwB÷ 'Ù^ ß3b5ó°¿(ØF'] ÖDÁ++Æß¿Á ¡T*ÀSœæ¯j:‡6¡ã-Oì×qZh×?²C:'˜ï;&U¼¼"8M¤ÿµUì(ixþ/üÅí*w5¿árÉÿ@¿ïêÿñºQñ’OúEÿWÿ×5ã Xøj[ûXWSšX/Ö$ºxÔ[yM!aÿ-Ao`@Îv–‘]é6zpya‚ßÁßÚ>Jùm Kýï-…rKåÆîàŽrMG65:›\ª>1Iÿ@(¿ïêÿñºpøÁ'ýâÿ¿«ÿÆëCÆ>Ðî»x–…Êä¤ éóþ ÒÏ00Ï-‹xj+xþ,Ÿk>çT>-Éÿ@H¿ïâÿñºQñjOúÅÿÿÖmï‡|-o­%…½Ö©y(Iÿ@ˆ¿ïµÿâ*Å¿…ô2çQ•mÖûN}"îh.Üs‡(Ê2§Ë[Œõù€-Á85ÆÙ˜í4ýCQ‰Y Œm-VFÉÃy‡8ˆOñÿ-Aàã.4hKhþ?ðDêT[³«äÿ D_÷Úÿñáñ6Cÿ0˜¿ïµÿâ)úÖ¢ÞxÏ]µÏeƒ]1¶Ù°•HÈÛÑÉÈÝÉî*¦Ÿá='Pºðÿ•5êÛj¯y»s uH‰ÙÛà õöÅJ§‡µÜ>×=KÚå‘ñ.Cÿ0˜¿ï¥ÿâ)áeIÿ@¨¿ï¥ÿâ*«øSM6ac{µºþÃ]TÈÒ+&{¦Í ã¯;¸ô5{â.•¾¡yªÈòM5ÌÉB6A¶4Èãï0åTcŽrzP©PrQåüÅÏR׏߸Y2Ð*/ûéøŠ_øXòÐ./ûéøŠÉƒLûUÜ:Q_ôm>ÕîïÍòʹPÒò±~HÊ€yCÀ$á×þ³¶ñ&e Ä’Zj)o.ìå•dm§¨ÏBA*:ŒŠ¯cBö·æ/iS¹ª>"Èæýô¿üE(ø‰'ý"ü×ÿˆ§Ùø7J¾¿Xã’ò(SRšÂ@Ò+3ìœ8;FÞW¦^µGNÐt{»XnÄ—ÒAq¨EaÊDÊJÎx`FO éÜÔûµ •½§üKtÛÛŸ²ÃvââêSÕG̱©îñ’¦%‚4ý…|?˜½¥Næ¨ñäŸô‹ó_þ"”xêOúEÿŽÿñÙ|3§ZE}qx×)om¼¨Öó¤þjHÄÕôÀôäò0+/TÓ¬ôË;%Äò]]ZGsæy€"î'åÛ·'uÝïíIQ Ý’þ¾ñº•ìØÿ„æOúÅÿŽÿñ£ÆòÐ>/üwÿˆ®@SÅiõZ]¿2=´ûhñ¬‡þ\"ÿÇøšpñ¤‡þ\"ÿÇøšäÅšÇï‹w-ž˜.o+¨ÁùGS€ø·O6²ùÖçJ>Tži“zù‰ƒ¼’[#œ’sÖ¹"ã'k~ætÉ4¯Èó»IâýMœäùÄ~ƒŠo‹¿ämÔÿë¹¢¤£¿ø¡áÝ[]ºÒLµy„8¤¨…7$`¸CùW|ã!k²éÛa„m„n„´kÔÞfNI$ç¹í^çsþµëšè"¡­aŠœ"¢’Ðuº<¾x°ùÌÚ|’<€šh@ƒýú·/…¾#O§ :c%ˆUAlúŠ˜‚®6¥ñÛ½¾ŠÑc¦º/ëæL©);¶x¬žø•5ÔSM©Iqo»É•õ5/á†Ú|ÌŒŽ:ÔPxGÇößeòò/²oû7—~‹äïûÛ0ÿ.{ã­{}}~}—õó'ØG»¡Íܪ»—©#É8ÉsÆIüêØÐ>"ý·í¾v£ö¿/Êóÿ´†ý™ÎÝÛóŒóŽ™¯a¢¯T쿯˜{÷g‹Kàÿ\C$3Áq$RLnõZR0\‚ü±úÔ£ÂÞ:þåßü{ý“þ?—ýOüóûÿsýž•ì”Qõú—õó«Ç»<Ž- â73ÜÇ6 “ϷΕuM£ ¸ïÉÀàg¥9|?ãƒÑÍo,þdrF­5Ú¹‹Ì`Ò2ÿ)|Ǹf­zÕ¾½>Ëúù‡°vx÷ü"*þÌ[¥¢Ä&31Y£ ì@wÍÈ\6ßMïëN»ðŠoZ&–ˆ°ÂƉ4aUTc»‚NXú³1ï^¿E?¯Ô쿯˜}^=Ï-m+âIs©3FÛ¶¢ S‚2>~ Bj ¼1âÉn-§[!í£!òn|½€`¯ÍÁ-–$uf'½z;»5Ñ_0öîÏ(ŸÃž3º¼Šòán¦¹‹\Ò^+:`äa‹ä`óIÿ¿‹ŠÜ«E9[¦ p ÚbbA›æ9$óÞ½bŠ>½S²«Ç»<¸è^5-rÌ×…®”-Á7«™€þ˜`ãžÕ"é8ñÛ‰¯„1íÙÛÆÕÚA\ ø cÓ½6Š>»>È=„{³Ì›Dñœ—±Þ»^5Ükµ'kÐ]G<ß9?™¤ºðï‰ïb…'²Ï—¼–óЙ˜³;e¹c ôU«Ó¨£ë³ìƒêñîÏ5þÅñ‰‰b-vcXŒ*†ð`Fp »îœ:p)Öz7Œ4øŒVmwmmÅ!¼ éœëÀü«Ò(¥õÙöAõx÷g› Åž—?ê>Ïÿkþ«þyýï»þÏJš-'ÅktÓÍ—>c£Í÷*é> ‰ï˜qÐסQG×gÙÕãÝžq‡üMἎ9’è’Æe¹Pù=NíÙÉÉüêÂi~)þÔ¶Ô'ŠK«‹gGF¸¸Wû­¸[8Ïozïè£ë³ìƒêñîÎîÓÅ÷ºÛ¤7 0wxö]€!ÝÔ'ÍòŒqJ¯g£xžÃØþÑm¿ü› ›±Ó8nzšô (úäík öîÎ!tÿ¦—Ÿ šÃ3›ñÊ¡ÚL`1;¸ p1ÄóHÖ,’h¦’kÆ–,ùn×`²d`àîã5ÜQKë“ìƒØG»8ìß–‹Ü–¸f&èf@o›ž8æœú_ˆQkèàh&$•0Ì«åŒ`*üÙôâ»j)ýr}}^=ÙÄ>•â)|ï7Ï?o›ºä3oÝÝósŽÙéN_ˆ~Çö?ßý—þxý l럻»y®ÖŠ>¹>È>¯ìá‡u_ùõÿÈ‹þ4ááíSþ}ò"ÿw4SúíNÈ_VÄ SÿŸoüˆ¿ãN§ÿ>ßùÆ»Z)}v§dVÆ RÿŸoü}Æœ4=Gþ}ÿñõÿìh£ëµ; ú´@hšüûÿãëþ4á¢êóïÿ¯ø×[E]©ÙÕ rƒF¿ÿžøúÿ8h÷ÿóÃÿ_ñ®¦Š>»S²«@æ“}ÿ­i÷_óËÿãN7?óÏÿ³E\ŸdVŽ,®?çŸþ<)ÂÎãþyþ¢µ¨£ë“ìƒêÐ2ŤÿÜýE·>È>­ †Oîþ´Ëˆõ³£²ºýüw.°˜T%¸²¶~ñþïë[ÔVj¥¶ŠüÌ· îÏ ñwüºŸýw4Qâïùu?úîh g¾\ÿ­_úæŸú¬ojÿØz4—û!}²Eïæò£äTÜσµF쓃À­›Ÿõ«ÿ\ÓÿA“­iÒêšoÙ ¸H&Yá$xÌŠ9VA• ¹¦:޵™E+_Âtø®¯ ³™Ù¼…Ò¤’üH‹€Ì6FŒ@'$ ÏÑÐB“œiƒÃ辋JŽHah¤IãhmÖ8–E”J¸qòoåÎHêÙùª­ï‡/õ¸êVÁ¯í•ùKFâLy@È|¶Ä® mã88 €Z>,Ñ–IQ®&_*GÙ­e61WmÅq±Ã>v®FHÈÈ|Y£,’£\L¾T³ZÊlb®ÛŠãb†|í\Œ‘‘šWûE¥ÌnÛç[j0nòsµÊ$ÏÞþ cúñEÇ„>ÑisÛ¶ùÖÚŒ¼œãír‰3÷¿ƒÇ~¼Q ¬ÞòKYfpÑ)i¤ò\Å ¸ù’±Ü1ã4´ÏK¥jr]ÁxŒ· )¸G„å”Í4¨†ùH3°$†ÜÀZÏÔ4ûùµ]SOK+ÆÒul­äª’ ±G3ª®A‰ŽCc Œi·Šô”Yžñ]¤,Âq1%Ylß´„›ùž âÍcWI¾Ak¬²<™VedURYG!À*vœІ?ÝI¬Ûj×÷ðËw ˆH‚ØÅ"G:*à»Ù¸bNp@’`°ð‡Ønô‰þÝ¿û:ÚÚ ¾N<Ï*+ˆó÷¸ÏÚ3Žq·çƒ@4‰´†åK—pUQ ‘ž]À•hÐ.é…bRˆ8S†7‹4d‘PÜLs•Ùme) –e̬`£ƒ¼®Ý­œ`ÖDžŠKK(¤¸¶¸k;KKxÖêÐK ´+2nx÷ À‰É#AÉéV“Á陪Y¥Ì1 ý;ìX‚ÕcŽ#ºf,¨¤ ¹œázáyf$š4퇉m.๒dšßȽk2^)63yæÚû@mÄ íÎÜàžõµYºMå”w[j=ßÚcÿG˨iŒ³#Ø`Û™A ƒüDfµèQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEá>.ÿ‘·Sÿ®æŠ<]ÿ#n§ÿ]Í¡¾\ÿ­_úæŸú¬wP“JÑ.¯¢Ew…7n‡‘Z×?ëWþ¹§þ‚+ñüŠ:—ýrþ¢³êQ¥ý‘ã?ùç ÿàDßüEÙ3ÿžzþMÿÄTsøŽû⩦¦­ªÇaiv$YŒ­m°-¬†Üâ?3s ä‹ ¤o!±Ò6¥|ž5ƒLšÒÎ[)ç†Hî7 4ïC*A…Ú䜌ãd+˜_Ù3ÿžzþMÿÄQý‘ã?ùç ÿàDßüEhÿÂSyÿ Gü#¿Ùhù¾vßµ¿ÙøÇÚsåýíÿ»òºîç;~j§Žî.uãi…w-ˆ½k#pܳ†Y LüAäì 'ÎáA8ÝòQd"þÈñŸüóÐð"oþ"ìÿÏ=ÿ&ÿâ)uk3Gmw§Û}ŸM]np“£Hà]‹yD‘W—·o›ßÌÎÎqŸ–‹ ¹ý‘ã?ùç ÿàDßüEÙ3ÿžzþMÿÄV¬> Õï&2ØèQÜéÿmk1(½ *ys¥‘ãe"ì®ÌØO”n;iÞøÃSµñ éÿØ;mÜvÿhžI£ù]Õw†ò ®U|íÍÂà9Ø ¹[û#ÆóÏAÿÀ‰¿øŠ?²YÀ¶š¿‰5™£¶»Óí¾Ï¦®· ‰¸IѤp.ż¢Hž<,dï‘ËçË8¶ÒÈ.'öGŒÿ瞃ÿñdxÏþyè?ø7ÿRÃ㻋xÚA¡]Ëb/ZÈÜ$7,á–C?y;‚Ió¸PN7|•¯âMfhí®ôûo³é«­Ãbnti ±o(’' ;ÀdrùòÎ-´² ‰ý‘ã?ùç ÿàDßüEÙ3ÿžzþMÿÄWs\\Þ<– xZ>‘!ÓÍêØý©<ç;ÚA9XLóó²AÁŽ‹ ¹öGŒÿ瞃ÿñdxÏþyè?ø7ÿ]ÍspøƒW¼˜Ëc¡Gs§ýµ¬Ä¢ô,©åÌb–G”‹²B6»3a>Q¸í,‚æWöGŒÿ瞃ÿñdxÏþyè?ø7ÿ[³ÜÝÅã­>Ñn¤ûÆ™s#ÛM¢Hå€+ƒÙĬÎ8ÉǛǒÁ¯ GÒ$:y½[µ'œç{H"+ ƒaÁv@È 81Ñd"þÈñŸüóÐð"oþ"ìÿÏ=ÿ&ÿâ*ÍïŒ5;_®Ÿýƒ¶ØÝÇoö‰äš?•ÝWxo ÀzåWÎÜÜ.€½ñ†§kâÓÿ°vÛ¸íþÑ<“Gò»ªï ä\ªùÛ›…Às°As+I‡ÅºÎcª[â,¶ñÜF²O(`®¡€8B3ƒêjçöGŒÿ瞃ÿñ³àOù'žÿ°U¯þŠZè(² œ7öGŒÿ瞃ÿñdxÏþyè?ø7ÿ]ÍYÎû#ÆóÏAÿÀ‰¿øŠ?².ÿ‘·Sÿ®æŠ<]ÿ#n§ÿ]Í¡'¾\ÿ­_úæŸú®wÆ?ò(ê_õËúŠè®Ö¯ýsOýW;ãùu/úåýEgÔ®‡w§è¶Z]åýÕªÎ&¿”Mpd¹’@Î2˜…àò¨è£î<1¦Üë‘ë2›ï·EÂ2jŠ>RTF&ÒQ \a±È5±EhIÿ¾“çùþLþwö‡ö—™ö¹w}£g—»;¾îÏ—gÜÛÆ1Gü#hÔ~Û¾†O7Î1Á¨\E |î$Ä®#99-òüÄ’rIÎÅÏßx+AÔe’K›YÛt¢uD¼™)CócEp±É»$ºÇsdüÍž‚Š(Ÿ¾ðVƒ¨Ë$—6³¶éDê‰y2$R†æÆŠác“vItŽæÉù›6?áÒ´~ÛäÏ»ÍóüµËö3;·ù¼½Û¾|íÎÿ›ïs[P?ü"úOöÛ|™÷y¾‘ö¹~Ïægvÿ#w—»wϹßó}îj8|#£Ázn’;²MÃ]y/};Áæ³™ ù,æ<ï;ÇËÃ`Œ nQ@s÷Þ Ðud’æÖvÝ(Q/&DŠPÁüØÑ\,rnÉ.€1ÜÙ?3g ¢€9ûè—_lóRøý²í/gÛ©\®é“î0ăn0¸äN>EÁ}à­Q–I.mgmÒ‰ÕòdH¥ ÍÂÇ&ì’èÍ“ó6z (®~ûÁZ£,’\ÚÎÛ¥ª%äÈ‘J?›+…ŽMÙ%Ð;›'ælôP?}à­Q–I.mgmÒ‰ÕòdH¥ ÍÂÇ&ì’èÍ“ó6Kïh:Œ²Isk;n”N¨—“"E(`þlh®97d—@îlŸ™³ÐQ@ÿðŒi£Qûlfú<ß8Ç¡q%󸓸Œää·ËóIÉ'5ï¼ ê2É%ͬíºQ:¢^L‰¡ƒù±¢¸XäÝ’]c¹²~fÏAEÏßx+AÔe’K›YÛt¢uD¼™)CócEp±É»$ºÇsdüÍž‚Š+þ}'ûGí¾Lû¼ß?Èû\¿gó3»‘»ËÝ»çÎÜïù¾÷5±EcÜxcM¹×#Öe7ßn‹„dÔ.|¤¨Œ8M¤¢¸Ãcj½÷‚´FY$¹µ·J'TKÉ‘"”064W ›²K  w6OÌÙè(  8|#£Ázn’;²MÃ]y/};Áæ³™ ù,æ<ï;ÇËÃ`Œ øGG‚ôÝ$wd›†ºò^úwƒÍg2òYÌyÞw—†Á Ü¢€1ü'cq¦x7C°¼ËºµÓíá™7µÖ5 288 ô­Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( gĉ®Iuiqií E.×RÈ­¸0©ãæõöÇLá‹_~çCçþ›Ê}?Ø÷þ^£=èýðãªúuëíïï×ß _¯¾ÿ?_~½óóËÍhšeö™c©@Ûù÷W«q‹w, Æ2@=TþëWjýÙÌ/Î~dïþÿ¿ù÷êhT±£Â|]ÿ#n§ÿ]Íx»þFÝOþ»š+BO|¹ÿZ¿õÍ?ô\ïŒäQÔ¿ë—õÑ\ÿ­_úæŸú®wÆ?ò(ê_õËúŠÏ©]K¢Š+BBŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  £÷ÃŽ«éׯ·¿¿_|5~¾ùüsüý}ú÷ÏÏbô~øqÕ}:õö÷÷ë×ß?ŽŸ¯¿^ùù匭vs óŸ™;ÿ¿ïþ}úš~ìæç?2wÿßüûõ4*XÑá>.ÿ‘·Sÿ®æŠ<]ÿ#n§ÿ]Í¡'¾\ÿ­_úæŸú®wÆ?ò(ê_õËúŠè®Ö¯ýsOýW;ãùu/úåýEgÔ®‡¥ÑE¡!EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP ÑûáÇUôë×Ûß߯¾¿_|þ9þ~¾ý{çç±z?|8ê¾zû{ûõ÷ÃWëïŸÇ?Ï×߯|üòÆV»9…ùÏÌÿß÷ÿ>ýM ¿vs óŸ™;ÿ¿ïþ}úš,hðŸÈÛ©ÿ×sE.ÿ‘·Sÿ®æŠÐ“ß.Ö¯ýsOýW;ãùu/úåýEtW?ëWþ¹§þ‚+ñüŠ:—ýrþ¢³êWCÒ袊ТŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(…èýðãªúuëíïï×ß _¯¾ÿ?_~½óóؽ¾u_N½}½ýúûá«õ÷ÏãŸçëï×¾~yc+]œÂüçæNÿïûÿŸ~¦…_»9…ùÏÌÿß÷ÿ>ýM –4xO‹¿ämÔÿë¹¢ÈÛ©ÿ×sEhIï—?ëWþ¹§þ‚+ñüŠ:—ýrþ¢º+Ÿõ«ÿ\ÓÿAÎøÇþEKþ¹QYõ+¡étQEhHQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEBô~øqÕ}:õö÷÷ë×ß?ŽŸ¯¿^ùùì^ß:¯§^¾Þþý}ðÕúûçñÏóõ÷ëß?<±•®Îa~só'÷ýÿÏ¿SB¯ÝœÂüçæNÿïûÿŸ~¦…K<'Åßò6êõÜÑG‹¿ämÔÿë¹¢´$÷ËŸõ«ÿ\ÓÿAÎøÇþEKþ¹Q]ÏúÕÿ®iÿ Šç|cÿ"Ž¥ÿ\¿¨¬ú•Ðôº(¢´$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š¡z?|8ê¾zû{ûõ÷ÃWëïŸÇ?Ï×߯|üö/Gï‡WÓ¯_o~¾øjý}óøçùúûõXÊ×g0¿9ù“¿ûþÿçß©¡WîÎa~só'÷ýÿÏ¿SB¥âïùu?úîh£Åßò6êõÜÑZ{åÏúÕÿ®iÿ Šç|cÿ"Ž¥ÿ\¿¨®Šçýjÿ×4ÿÐEs¾1ÿ‘GRÿ®_ÔV}Jèz]QZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEg_º,à3(;{Ÿ¯ÿ_×õÃV2ÇÎdO˜{ý}ý{õÏÎý^Y!¿çß©ÅÓµ»«éï -pÚB¬ÊX®ÝÄ žÇŽû{+…‹^#ñ­Ñ·Ž»ÇÂ6p4ËŽ¯áÇ\{ŒáF±”V°¶òƒòØ'ŽxQáâZã]f$“©ÈI=þD­ºMŒÈð¿˜ö:Ìïo< >§æ¢ÏŠ˜Ç8?CùV½L¿ñç/ýtOäÕ &„ø»þFÝOþ»š(ñwüºŸýw4V„žùsþµëšè"¹ÿÆóxWPŠ$g‘ã ¨£%‰#æº Ÿõ«ÿ\ÓÿA;#F*á³êQuâki]“û'W’=¡tù0Àt>õ‘¯êãQðíΟk¤jÊíÅk1…œ»_µÜÿÏÄ¿÷Ù£íw?óñ/ýöiÜ æXù̉ï󯿯~¹ùÃ,|æD÷ù‡¿×ß׿\üô>×sÿ?ÿßfµÜÿÏÄ¿÷Ù¢ábù–>s"{üÃßëïëß®~pË9‘=þaïõ÷õï×?=µÜÿÏÄ¿÷Ù£íw?óñ/ýöh¸X¾eœÈžÿ0÷úûú÷럜2ÇÎdO˜{ý}ý{õÏÏCíw?óñ/ýöhû]ÏüüKÿ}š./™cç2'¿Ì=þ¾þ½úçç ±ó™ßæÿ_^ýsóÐû]ÏüüKÿ}š>×sÿ?ÿßf‹…‹æXù̉ï󯿯~¹ùÃ,|æD÷ù‡¿×ß׿\üô>×sÿ?ÿßfµÜÿÏÄ¿÷Ù¢ábù–>s"{üÃßëïëß®~pË9‘=þaïõ÷õï×?=µÜÿÏÄ¿÷Ù£íw?óñ/ýöh¸X¾eœÈžÿ0÷úûú÷럜2ÇÎdO˜{ý}ý{õÏÏCíw?óñ/ýöhû]ÏüüKÿ}š./™cç2'¿Ì=þ¾þ½úçç ±ó™ßæÿ_^ýsóÐû]ÏüüKÿ}š>×sÿ?ÿßf‹…‹æXù̉ï󯿯~¹ùÃ,|æD÷ù‡¿×ß׿\üô>×sÿ?ÿßfµÜÿÏÄ¿÷Ù¢ábù–>s"{üÃßëïëß®~pË9‘=þaïõ÷õï×?=µÜÿÏÄ¿÷Ù£íw?óñ/ýöh¸X¾eœÈžÿ0÷úûú÷럜2ÇÎdO˜{ý}ý{õÏÏCíw?óñ/ýöhû]ÏüüKÿ}š./™cç2'¿Ì=þ¾þ½úçç ±ó™ßæÿ_^ýsóÐû]ÏüüKÿ}š>×sÿ?ÿßf‹…‹æXù̉ï󯿯~¹ùÃ,|æD÷ù‡¿×ß׿\üô>×sÿ?ÿßfµÜÿÏÄ¿÷Ù¢ábù–>s"{üÃßëïëß®~pË9‘=þaïõ÷õï×?=µÜÿÏÄ¿÷Ù£íw?óñ/ýöh¸X¾eœÈžÿ0÷úûú÷럜2ÇÎdO˜{ý}ý{õÏÏCíw?óñ/ýöhû]ÏüüKÿ}š./™cç2'¿Ì=þ¾þ½úçç ±ó™ßæÿ_^ýsóÐû]ÏüüKÿ}š>×sÿ?ÿßf‹…‹æXù̉ï󯿯~¹ùÃ,|æD÷ù‡¿×ß׿\üô>×sÿ?ÿßfµÜÿÏÄ¿÷Ù¢ábù–>s"{üÃßëïëß®~pË9‘=þaïõ÷õï×?=µÜÿÏÄ¿÷Ù£íw?óñ/ýöh¸X¾eœÈžÿ0÷úûú÷럜2ÇÎdO˜{ý}ý{õÏÏCíw?óñ/ýöhû]ÏüüKÿ}š./™cç2'¿Ì=þ¾þ½úçç ±ó™ßæÿ_^ýsóÐû]ÏüüKÿ}š>×sÿ?ÿßf‹…‹æXù̉ï󯿯~¹ùÃ,|æD÷ù‡¿×ß׿\üô>×sÿ?ÿßfµÜÿÏÄ¿÷Ù¢ábù–>s"{üÃßëïëß®~pË9‘=þaïõ÷õï×?=µÜÿÏÄ¿÷Ù£íw?óñ/ýöh¸X¾eœÈžÿ0÷úûú÷럜2ÇÎdO˜{ý}ý{õÏÏCíw?óñ/ýöhû]ÏüüKÿ}š./™cç2'¿Ì=þ¾þ½úçç ±ó™ßæÿ_^ýsóÐû]ÏüüKÿ}š>×sÿ?ÿßf‹…‹æXù̉ï󯿯~¹ùÃ,|æD÷ù‡¿×ß׿\üô>×sÿ?ÿßfµÜÿÏÄ¿÷Ù¢ábù–>s"{üÃßëïëß®~pË9‘=þaïõ÷õï×?=µÜÿÏÄ¿÷Ù£íw?óñ/ýöh¸X¾eœÈžÿ0÷úûú÷럜2ÇÎdO˜{ý}ý{õÏÏCíw?óñ/ýöhû]ÏüüKÿ}š./™cç2'¿Ì=þ¾þ½úçç ±ó™ßæÿ_^ýsóÐû]ÏüüKÿ}š>×sÿ?ÿßf‹…ŠºÞ¹ ƒˆ ­õË8WÍ­³J«‚Ã’23“Óñç œtñ4AäÇ£êè›ÚF `ÿ3“’ÇÔöú è¾×sÿ?ÿßfµÜÿÏÄ¿÷Ù¢àsžóuIÞÞx{÷•xŒlT¢sƒô?•nÔßk¹ÿŸ‰ï³GÚîçâ_ûìÒ_øó—þº'òj†¤yå•vÉ+¸ë†bj:xO‹¿ämÔÿë¹¢ÈÛ©ÿ×sEhAï—?ëWþ¹§þ‚+ÄsØèÒOùG̉$›ù1´Š²IÏbl@Û’¶nÖ¯ýsOýT5™G%«é a{¡.—u2\K¨œ=üóÞ"âÖãø^LŽ èGlç¨ÅZ›Zj3Æ–kým$÷JÑ3}«d³ÆB|ÃÊÏÙ˜äù˜Þ;~n’ÏAÑôçßc¤ØÚ¶àû ¶D;€e× ÃèÇÔÓåÑôɤ‚Itë9ÞFšx˜Ý›s2œpŹ$rO4„Þ ÕC­Ä6Ö×0Ü]ÝY[Y(1ÉæB&Á2–*CÆÁã“·æ¤|M®HðØY—Z‘iÀ[,Ûùb¡ŽK… |§zÈTŒ`0;‡Tú>™%ÕÅÓéÖmqs†yL ^T ¬q–\0xàSAÑåÓâÓäÒl^Ê&ß³[!žBãüÇó>´JïZ¹ÿ„vÂêÚ$]GPXþÏm¹Rå<ÆPw¢°®woPq‘žª5ýFoÅ~Ão¨5êY2Ì›Ñ[íBݘª¿Õ¶‡8é¸õ= Ý­ý«ÚÞ[CsnøßÈ# ðyþ¨xoN¿ðûh‰ ZYFÛEU+ “…*T‚ÃA'Ö€3-uÍbo&ˆÂÅš˜\܈Ý*-³‚‰¸à‘pS#vxØii¾)ñ嘽})íüíO1¢ tEYY¥bŽpÅc‚ä|ø‹áø4T ÃΨ¥!W·‚1±ÜÁ<¨ÓˆõÉQWmtÛ )î'´²¶·šå·Ï$Q*4­’rĘ䞾¦€9[¿^BÞh#‡ì÷~lVNÅðTÏkÊÊk©iÔ¼›0˹«CL×/åñ#h×bÙÚœK"Úw ®¹! äíê­µ{ùµ¡¥µº,ÐÏ+Üɱ‚}Ÿˆ©ÏÞbè9&)Àû¢®¦ƒ£Äò¼zMŠ4°}žF[dâÀ_,ñÊá@ÇLéS[ØEoyyvÞk¦RÌ䪪"ú(;›Þv=蟸ñ®¾$šÞÞÁM¶»†Òi\Æ ´‹ݽ¥RóW#mÄ[åÈŸ_×n4]Ëuf—¬v—pÉoÆ ÿI¶VGa2)àà§ GñqÛ¾›a.¡¡%•³ÞÄ»#¹h”ȋϱ>cùŸZ›`Ð$ÊØÂ5ºÆb]«ÀÇ B®GN¥sâ n=uíEœ2ÙÚÜÁgs>ÔäXÉ`Í6äÇš0›œ-òՋľ#¹ÒôF‚ÊÚKÝNѯH·ˆH±F«Æ$š,’eÎw|¿w ÷ëªMLŽêÞé4ë5¸¶ŒC¢@U8Ê® rh¹ÑôËˬ®´ë9í!Ç•°+F˜TŒ ŽÔÉ^êú޹aÀûµ¤Ž˜’ÀžîÎöÒåfW ´y }ÖÎÒAù†:9o/çñiö’[C ´ÜNÒÂÒ4«#È»W »NìîqÍ«L¼¾ŠöëN³žîySË´‰ƒ‘µˆÈÁ9ïOºÓl/g·žîÊÚâkfß’Ä®Ñ6AÊ’>S:z äŸÅ:À±Óg_°†Õà†âØÊóÛÆUþÞœ\FÎS§ÍÁ/ŠuˆÖ8ÇØL×3µ¼Oä>ØÚ+È­]™wüÁŒ¥Àvãi-÷«ª‹GÓ!’y"Ó¬ã{‰i™ PdumÊÌqËäÈ<ÓΛ`Å ²¶%I‰~V.$$qÁ.ªÇý Q@”Þ.Õma;­í®f¥‚ÝaŒ¡Y"ºŽÔ’ðÁš]ár˜icâk=kÄwÚ„c  · 3Ï”žA_ÝÇ9òÉž ±!AãvNÚmƒ£#Y[2²ÈŒ¦% ¬‡t€ñÑ-êzÑk¦ØX¤Iiemn°«$KJˆf À$qÔ@®ƒ¬êz•޹¬%ÕœísAæâ–îÖpH7I¸,rƒÉ9çÚU/ì}3þÖñíöOõ þ£þytûŸìôö«´QE (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠðŸÈÛ©ÿ×sE.ÿ‘·Sÿ®æŠÐƒß.Ö¯ýsOýW=âödðž¢ÊHaAr+¡¹ÿZ¿õÍ?ô\ïŒäQÔ¿ë—õŸRºü+Ï ÿÏŒÿø?ÿGü+Ï ÿÏŒÿø?ÿ]E¡'/ÿ óÃ?óã?þOÿÅÑÿ óÃ?óã?þOÿÅ×QErÿð¯<3ÿ>3ÿàtÿü]ð¯<3ÿ>3ÿàtÿü]uP/ÿ óÃ?óã?þOÿÅÑÿ óÃ?óã?þOÿÅ×QErÿð¯<3ÿ>3ÿàtÿü]ð¯<3ÿ>3ÿàtÿü]uP/ÿ óÃ?óã?þOÿÅÑÿ óÃ?óã?þOÿÅ×QErÿð¯<3ÿ>3ÿàtÿü]ð¯<3ÿ>3ÿàtÿü]uP/ÿ óÃ?óã?þOÿÅÑÿ óÃ?óã?þOÿÅ×QErÿð¯<3ÿ>3ÿàtÿü]ð¯<3ÿ>3ÿàtÿü]uP/ÿ óÃ?óã?þOÿÅÑÿ óÃ?óã?þOÿÅ×QErÿð¯<3ÿ>3ÿàtÿü]ð¯<3ÿ>3ÿàtÿü]uP/ÿ óÃ?óã?þOÿÅÑÿ óÃ?óã?þOÿÅ×QErÿð¯<3ÿ>3ÿàtÿü]ð¯<3ÿ>3ÿàtÿü]uP/ÿ óÃ?óã?þOÿÅÑÿ óÃ?óã?þOÿÅ×QErÿð¯<3ÿ>3ÿàtÿü]ð¯<3ÿ>3ÿàtÿü]uP/ÿ óÃ?óã?þOÿÅÑÿ óÃ?óã?þOÿÅ×QErÿð¯<3ÿ>3ÿàtÿü]ð¯<3ÿ>3ÿàtÿü]uP/ÿ óÃ?óã?þOÿÅÑÿ óÃ?óã?þOÿÅ×QErÿð¯<3ÿ>3ÿàtÿü]ð¯<3ÿ>3ÿàtÿü]uP/ÿ óÃ?óã?þOÿÅÑÿ óÃ?óã?þOÿÅ×QErÿð¯<3ÿ>3ÿàtÿü]ð¯<3ÿ>3ÿàtÿü]uP/ÿ óÃ?óã?þOÿÅÑÿ óÃ?óã?þOÿÅ×QErÿð¯<3ÿ>3ÿàtÿü]ð¯<3ÿ>3ÿàtÿü]uP/ÿ óÃ?óã?þOÿÅÑÿ óÃ?óã?þOÿÅ×QErÿð¯<3ÿ>3ÿàtÿü]ð¯<3ÿ>3ÿàtÿü]uP/ÿ óÃ?óã?þOÿÅÑÿ óÃ?óã?þOÿÅ×QErÿð¯<3ÿ>3ÿàtÿü]ð¯<3ÿ>3ÿàtÿü]uP/ÿ óÃ?óã?þOÿÅÑÿ óÃ?óã?þOÿÅ×QErÿð¯<3ÿ>3ÿàtÿü]ð¯<3ÿ>3ÿàtÿü]uP/ÿ óÃ?óã?þOÿÅÑÿ óÃ?óã?þOÿÅ×QEp÷þðå»’,î¶€¿*ßL9;½XúU/øD¼9ÿ>WŸø0—ükª×¡Šâ  ž4–ãu ¬¤8 ƒÔ^uá†Ú…µ«½RÑY¤cöa/ÍöT#•SÜ“‘¸ó·ûÅ¥±£cÂÐö»”Ž=LFœ¹ #˜’z“õ'¥lÖO†¿ÕxƒþÂçÿEŠÖ©cG„ø»þFÝOþ»š(ñwüºŸýw4V„žùsþµëšè"³õ-:[OšÆy8f]£°ÏïZ?ëWþ¹§þ‚+2çXÓ,ºÔlà»›TΫ#äàmRrrF;Öe/öÇû_ùÿ³£ûcý¯üƒÿÙÖ Üö6÷–¯æ[ÜF²Äø#r°È8<ŽzšØXØþØÿkÿ ÿötlµÿû:Áµ»‚ö–Ý÷¢É$Dà™£}Hü*j.ÂÆÇöÇû_ùÿ³£ûcý¯üƒÿÙÖ Üö6÷–¯æ[ÜF²Äø#r°È8<Žzš‹°±±ý±þ×þAÿìèþØÿkÿ ÿöuEaccûcý¯üƒÿÙÑý±þ×þAÿìëŠ.ÂÆÇöÇû_ùÿ³£ûcý¯üƒÿÙÖ=2i¢·‚Iç‘"†5.ò;UP2I' ‹°±·ý±þ×þAÿìèþØÿkÿ ÿöuÍYjÖ:…ÄðZÏæK|ÅØÃoï$¸ççŠAÿÏB3=Üö6÷–¯æ[ÜF²Äø#r°È8<Žz.ÂÆ÷öÇû_ùÿ³£ûcý¯üƒÿÙÖ=]…íö¿òÿgGöÇû_ùÿ³¬z(» ÛíäþÎíö¿òÿgX+yj÷Mj·0µÂçtAÁq€¤äuà:øúŠ|3EqsÁ"K Š$F ¬¤dGPEacoûcý¯üƒÿÙÑý±þ×þAÿìëêî (V[‡Ø$q‚~gpŠ8õfñ§‰¢iÞ"‘UÚ0Ãr©$G`J¶>‡Ò‹°±·ý±þ×þAÿìèþØÿkÿ ÿöuYé¯hòÝËi­b÷16É![”.¸& ç î`¿RSEØXê?¶?ÚÿÈ?ýÛíäþιөX-âY›ÛatìȰW{0PÄÎI ÊÇØƒÞ§Šh§BðÈ’(fBÈÀ€ÊJ°ã¸ ƒèA¢ì,mÿlµÿû:?¶?ÚÿÈ?ýcÑEØXØþØÿkÿ ÿötlµÿû:ÄDÓ¼D3"«´a†åRHŽÀ•l}¥>‹°±±ý±þ×þAÿìèþØÿkÿ ÿöuEaccûcý¯üƒÿÙÑý±þ×þAÿìëæŠ'‰$‘¥m‘«0Û°=NŸ >”ú.ÂÆÇöÇû_ùÿ³£ûcý¯üƒÿÙÖ ÝÀ÷ÒÙ«æâ(ÒWLË9éÉFü¾•5accûcý¯üƒÿÙÑý±þ×þAÿìëŠ.ÂÆÇöÇû_ùÿ³£ûcý¯üƒÿÙÖ=]…íö¿òÿgGöÇû_ùÿ³¬z(» ÛíäþÎíö¿òÿgXôQv6?¶?ÚÿÈ?ýÛíäþαè¢ì,llµÿû:?¶?ÚÿÈ?ýcÑEØXØþØÿkÿ ÿötlµÿû:Ç¢‹°±±ý±þ×þAÿìèþØÿkÿ ÿöuEaccûcý¯üƒÿÙÑý±þ×þAÿìëŠ.ÂÆÇöÇû_ùÿ³£ûcý¯üƒÿÙÖ=]…íö¿òÿgGöÇû_ùÿ³¬z(» ÛíäþÎíö¿òÿgXôQv­Z já%mcR³TP¾]¢¢«ry9É'Ÿ_ëYŸðGÿC.½ùÇþ­E+…Šúf™m£Ù\ÁÕÕËÜ\ ä’ä.âvíþ íV(¢€<'Åßò6êõÜÑG‹¿ämÔÿë¹¢´$÷ËŸõ«ÿ\ÓÿAÌé—#I¸žÆö Ãws{,¢x­%–9Uä>YiH]©±ò6ˆÿºžšçýjÿ×4ÿÐEa\x§D´¸’Þ}F(劺6råY”qðiÚΗáßM:Œ-6“½´Óy,¯l*–ÜŒ#kŒ$eXãååWmc¼Ž a©ÜëWFéʵ½½Ü2‡Ä^X»ÜmÿŽ\ã=±å×Eÿ ‡¿è+ëþÂcáïú Áúÿ…=@æž vÓL¾XÅâïn»C‘ FñÞRñ© ÌÑe•Ô‚GÊ›ƒ+íc¼Ž a©ÜëWFéʵ½½Ü2‡Ä^X»ÜmÿŽ\ã=±å×Eÿ ‡¿è+ëþÂcáïú Áúÿ…•ia~þðeŽëëL,1ÞˆKFê‚ÒL«žª7à‚FlIc׆µ#êwÖónºÈM>y’8pþKdò\å±§˜OÊå¡®‹þÐV×ü(ÿ„ÇÃßôƒõÿ 5µ a¨A­G¥œ4–ó_<³ÊB7Ûþ¾%#ÏTœ¶UŒ]k¶ö)i©.¢uK‹Ý>]ÐÂï@-„à¼`Æ‹¹'Êä q†Þÿ„ÇÃßôƒõÿ ?á1ð÷ý`ýÂ@Á´¶»·Ñ4¬M®Ë¶FKÓ\ÅÑX¶+xªJÆÜŒ¶\‚cXõá­_Èúõ¼Û®²OždŽ?’À™<— yGliæòŸùhk¢ÿ„ÇÃßôƒõÿ ?á1ð÷ý`ýÂ@£¦[j~Õ-mÅÍ­Ô«,V·77Œ`,¸›2Â7gäçr d1ÈÕá'¹Óî. ûd_j¶¸Ô"Ž?5d‡I@@û¯óÛ8Aÿ-b +¥ÿ„ÇÃßôƒõÿ ?á1ð÷ý`ýÂ@ÎðÕ¶¹¬I=´Ñ$›¶3¡Pßé·­Á=~WCô`{Šç´Ø5X<3eo¤ ^Ý“N‰5wÉòÜ<ùK! ÄiâLvWeÿ ‡¿è+ëþÂcáïú Áúÿ…GLXÁú µ¹¹¸½Û)ÓÚâÝá`ÞXÚ1;»ãÌÝ̇è6mª²ý—ýËÿ„û÷Þwüùÿhý×—ÿM¶móz|™ëóbµfñ_†n ’ õYa‘Jÿ ¬¯øQÿ ‡¿è+ëþj/¢Ãª]kn¥¯GªeT eY“lÒAdØezM»#Ë ì‚+ ûOè–1KªZAoE˜ogat© ‚'Wòñæà¡1qêT×_ÿ ‡¿è+ëþÂcáïú Áúÿ…Í]Á,–Ñê£WŸQ[Ý= )¢´F‘b&ÁÄäî$Œ 5©­Z^§ˆu Ë$¼Òé"-5â/åÓí‰ýßãÇ›ÆOæ´á1ð÷ý`ýÂøL|=ÿAX?_ð£P#ðîï·^ý—ûGû/Ë‹ÊþÐóüÏ;2y˜óÿy·o•þÎsŽwVD6w–siZ<·ÆÊ+BÖ¿ÚVn¶w²P…£VuwyŸê×'œ6ßü&>ÿ ¬¯øQÿ ‡¿è+ëþj;ý‰g©¤£<—ñK22y2™-üˆåÀù’‹ªòTH2rIÔÑ¡¿¿ð\oΟ{5ÝÍÜ]+DÊÆéåE”B·ÊªN:æ¯Âcáïú Áúÿ…ð˜ø{þ‚°~¿áF sºœzÕÌw’ÜßZÚÞ´×Ä–÷2´ˆÄ”ÖD>XrÃ%7—ÏTÄñZëÙšÄ÷Úž© Èkx‘³È˜mÌ¥a„ç,ÛÔ”c°î(Tî'oþÐV×ü(ÿ„ÇÃßôƒõÿ 5šˆê¦HMÍ®¯k¥à71Ess<7]ò¯6âßf$T¨`GÙu™-5k²Ú¸žÓN2éj&™w0–äÄ3‰ËùY1à0É9éá1ð÷ý`ýÂøL|=ÿAX?_ð£P#ñï·Y}«ûGû/Ë—ÍþÏóüÏ;1ùyò?y·o›þÎqžv×=«lýŸRû'ö¿ö·úw›³Îò¾ÏåÍö+þYoÏÙ¿ÕüùÎyß]/ü&>ÿ ¬¯øQÿ ‡¿è+ëþj­¥K³$jòhÖ²Atï÷ʬÑÝFÛ1”ò`TœœX™µüv}äÚ»Á.­r.Ò6—ÌŽÔ<þPcùÂî1®X©€±ÿ ‡¿è+ëþÂcáïú Áúÿ…• =ýž£ywyi},rAm ѳ9ˆÝܬ{·s•‰âgÝóËsšìkþÐV×ü(ÿ„ÇÃßôƒõÿ V`nQXð˜ø{þ‚°~¿áGü&>ÿ ¬¯øQfå‡ÿ ‡¿è+ëþÂcáïú Áúÿ…`nQXð˜ø{þ‚°~¿áGü&>ÿ ¬¯øQfå‡ÿ ‡¿è+ëþÂcáïú Áúÿ…`nQXð˜ø{þ‚°~¿áGü&>ÿ ¬¯øQfå‡ÿ ‡¿è+ëþÂcáïú Áúÿ…`nQXð˜ø{þ‚°~¿áGü&>ÿ ¬¯øQfå‡ÿ ‡¿è+ëþÂcáïú Áúÿ…`nQXð˜ø{þ‚°~¿áGü&>ÿ ¬¯øQfå‡ÿ ‡¿è+ëþÂcáïú Áúÿ…`nQXð˜ø{þ‚°~¿áGü&>ÿ ¬¯øQfå‡ÿ ‡¿è+ëþÂcáïú Áúÿ…`nQXð˜ø{þ‚°~¿áGü&>ÿ ¬¯øQfå‡ÿ ‡¿è+ëþ¹ƒ…$¹CFÈã·ZðŸÈÛ©ÿ×sE.ÿ‘·Sÿ®æŠÐ“ß.Ö¯ýsOýV7†å’(µ.GLêógkŸÝÅ[7?ëWþ¹§þ‚+žÑn`·‹VóçŽ-Ú¼øÞásû¸}j :µÜÿÏÄ¿÷Ù¬vêá›HCq)GÕ­)s†jžáSiØÏí·ýý_ñ¬ÝZòÚâãFHn!‘†­hHGãÌ”-ÁšZ¯ˆ.4±hw×s]OäE¼Š¶Çs˺€6£w¨×Åv‹¦G¨]êbÆ‘¡&îqÙU™Y 'FÒA#šÌ×!±Ö$ÒÁÔaHm®Ìò˜ï+äʃk!νÇú[!U,<›ë9ÍŠÍcU–ÍçI ne’H&MÈwC–/•?(íß]†-B->MUöUß³\#¯<…ÎHùOä})–ž#´¿$³Öa¹G ÐpÎqPAå¶‚q×5Ä>‚¾MÆ›iªXXi÷FÚáâº2‹ƒöq Ÿ%óåíÀ ¬„°@vr¶¥‚æçVMrK";Ø!¢ßÕáreØ “ö’q°ÿ«üß(`šì2N MUbÅkp ÁÏ\Ç'ýðÞ†ªÿÂ_¥ý‡í¿ð‘Yý“Ìò|ÿ¶¯—¿Û»v7cœuÅqözRA­}¾ÿKŠãR²šÙd†a)ƒÍžæF¤®&Ó%;`µ©ÅqªÏg<šlw6Ë4"Þß\šdsßçFŠÙç­ZþÓ°ÿŸÛoûú¿ãKP4>×sÿ?ÿßfµÜÿÏÄ¿÷Ù¬ÿí;ùý¶ÿ¿«þ4iØÏí·ýý_ñ£P4>×sÿ?ÿßfµÜÿÏÄ¿÷Ù¬ÿí;ùý¶ÿ¿«þ4iØÏí·ýý_ñ£P4>×sÿ?ÿßfµÜÿÏÄ¿÷Ù¬ÿí;ùý¶ÿ¿«þ4iØÏí·ýý_ñ£P4>×sÿ?ÿßfµÜÿÏÄ¿÷Ù¬ÿí;ùý¶ÿ¿«þ4iØÏí·ýý_ñ£P4>×sÿ?ÿßfµÜÿÏÄ¿÷Ù¬ÿí;ùý¶ÿ¿«þ4iØÏí·ýý_ñ£P![«†ñ¨Ýq)Ù¤ÈW.~Rg‹8ôÎåIªøžóK¼´¶¥Ùºo.'·– ¥ö»•ùäRÔcœcß5W…ÂßYÚùóÀ—— ‰ÞûÇY@HrÁF¯  |Gi G.³ oq#C ½ÐGVÚÊ£<°nƒÅqòøO“BÖ!:…³êŸnòZKçhb3´›HBJ£m“ªç–ë“™µ{¦ûu¾›u¥Çi¨iɦÈqÙQ|ÐT‡âcòåØ9瀪ÛÄv——ÒÙZë0Ïw|Ø"º "`àîPr0N{Ó"ñNŸ=¡»‡^¶’Ø3!™/ eRì7Œ… ô®XI®i—}ÕÕ…¢ÞêOærò¿š×1ŒÆU@\M¸ç!G6E›]ݵ++Û¹tÕ0ÝÇ3¤š¤·¬V8§CËÜ<À… 1‚w@nŸâ»MNIaƒSâ+™-žœyÑœch9äFì;•õ©îõñi`÷Ÿj–tY*°É¸¼¥ü°ƒœÞBò@©5É]±è÷PÅqg,Ñß›­:x§Ëù²ÎÏûÅÇÉ™ ¹V%£ß÷sŠ×ÿ@±ð÷öu¤¶¸Ëd½¹Uûí#l³e˜§q'=s@WÆ]õ¥ž¤.ô»‹Ï3ìéyqó ˜ÆI&AÔíol¾óÆ:}½Ìí¬$«i‘ †–3§Ãu¶h¤òwyLdæûv¨&Väc-žtK©µî®5; %·Œ:MRI>Ó*ÏÀùl»mÕ¼’MÁwŒ (Ð#×aš>-UÈžbÜ»œ)Aœõ`é]ÃEºì7³ÜAiª¥ÄÖͲxâ¸Ñ6HÃ~Szúãî`¹–yB\iMíý¥ýÃ㺈ùlùÆ á‰O½Ðc›¾_ì¨$‚ãP³ŠÍU#´²Kß´-º¨9Ä®ªä•³·oj€u¿k¹ÿŸ‰ï³GÚîçâ_ûìÖö‡üþÛßÕÿ?´ì?çöÛþþ¯øÒÔ µÜÿÏÄ¿÷Ù£íw?óñ/ýök?ûNÃþm¿ïêÿÚvóûmÿWühÔ µÜÿÏÄ¿÷Ù£íw?óñ/ýök?ûNÃþm¿ïêÿÚvóûmÿWühÔ µÜÿÏÄ¿÷ÙªÚ…íÚi·N—S+,.AAÁ¨?´ì?çöÛþþ¯øÕmCP²}6éòÝ™¡p•I'Þ€-è—§‡4…I¤U}¶bú¥«ßk¹ÿŸ‰ï³Xº]õ¤:“·P#>Û*ÒGîSµZþÓ°ÿŸÛoûú¿ãM¡ö»Ÿùø—þû4}®çþ~%ÿ¾ÍgÿiØÏí·ýý_ñ£ûNÃþm¿ïêÿ-@Ðû]ÏüüKÿ}š.Ö¯ýsOýVö‡üþÛßÕÿйÿZ¿õÍ?ô@âïùu?úîh£Åßò6êõÜÑZ{åÏúÕÿ®iÿ ŠäOèÞñGˆõÝ1/"´Õ 6ÛXe“ "P˜:eóÔw®¾çýjÿ×4ÿÐEyߌ?äøïþÂéÿ¡ÛTÇq³CþÿÑ,ñOþPV߆Wž.Ñu ë/-¡³¸’ÒXo´ÛxäYA …ÜPr zyÏÃoøóñçýŒú‡òJ¡“è•Äé“i—®«.««Á«øUµ ~Ñ}tðµ¼·e²ò|Ó¬{@ó”dÞ?>ʱuªiš]þ¤þ¹±³°›O°ŠÞòÎha´·ýýë34†9#E%Y3±²î«Ál€ËþßÿÐ#OÿÀ?øŠ?á ðÿý4ÿüƒÿˆ®7Iñ†¥q¡‹^ iZ“so,÷%n¤‹ÍtxÆû}‘†2C°Þ6À¿êö<%âs<³jº·Ûe·…®-ì³9EŽÝâ@ÿy2Ë–\¯$ìµÿo‡ÿè§ÿà üEð†øþþÁÿÄW#ªëWšmæ¹hš´v.ÚÁeÔ.f·³ˆ µ·o%åh$ ÿ½ù]Å"9“CG×õýPh±»F¯¬ÛÚj‹4j¡mࡹˆ!Éa¿Ë]ÄîÿKÈÏ”h{þßÿÐ#OÿÀ?øŠ?á ðÿý4ÿüƒÿˆ®wž*½Õ’58ž &Ök¸ìeóî#T´hã”Ï!£u_ßoó#)òò¿ëT†Uÿo‡ÿè§ÿà üEð†øþþÁÿÄW3¤ë^#»7²Ë­i«ŽŽ·HΟèóHÒ]¢I$ضÅ3"¨b&Ô$>ZxšýžÒxoçŸ\E.£:ÚÌ©Ú,Y š(ÕZI%mÌ nCæ/É´w_ð†øþþÁÿÄQÿo‡ÿè§ÿà üEs:v¥ªë~ ‡Kµñ=ÙÓU.Þ JÖ;gkÕAg‚XÄc!^y“(«÷9*IÏÒ|aâ=[VÒ¥–÷M´)dë§´ÛZæ)a‰å‘ ò^WÉ(%T_+æG,Ù xenÝ´í,NèΑ›872©ˆ2@, žÛ‡­Iÿo‡ÿè§ÿà üEr¾Õ­ã-âç[ûf¤ú%ÓÞéù„gJÒZ–‹j(tÃn\HY†Î¹>‘@?ð†øþþÁÿÄQÿo‡ÿè§ÿà üEoQ@?ð†øþþÁÿÄQÿo‡ÿè§ÿà üEoQ@?ð†øþþÁÿÄQÿo‡ÿè§ÿà üEoQ@?ð†øþþÁÿÄQÿo‡ÿè§ÿà üEoQ@?ð†øþþÁÿÄTkàýܺÿdiø§þ<¡î[ýjèªÿÉëš6  øC|?ÿ@?ÿ`ÿâ(ÿ„7ÃÿôÓÿðþ"·¨  øC|?ÿ@?ÿ`ÿâ(ÿ„7ÃÿôÓÿðþ"·¨  øC|?ÿ@?ÿ`ÿâ(ÿ„7ÃÿôÓÿðþ"·¨  øC|?ÿ@?ÿ`ÿâ(ÿ„7ÃÿôÓÿðþ"·¨  øC|?ÿ@?ÿ`ÿâ(ÿ„7ÃÿôÓÿðþ"·¨  øC|?ÿ@?ÿ`ÿâ(ÿ„7ÃÿôÓÿðþ"·¨  øC|?ÿ@?ÿ`ÿâ(ÿ„7ÃÿôÓÿðþ"·¨  øC|?ÿ@?ÿ`ÿâ(ÿ„7ÃÿôÓÿðþ"·¨  øC|?ÿ@?ÿ`ÿâ(ÿ„7ÃÿôÓÿðþ"·¨ vè'HÓþûøò‡³ýÊ“þßÿÐ#OÿÀ?øŠØ¶ÿTßõÑÿô#SRþßÿÐ#OÿÀ?øŠ?á ðÿý4ÿüƒÿˆ­ê)ƒÿo‡ÿè§ÿà üET¹ÿZ¿õÍ?ô]Mr×?ëWþ¹§þ‚*d4x‹¿ämÔÿë¹¢ÈÛ©ÿ×sEP|¹ÿZ¿õÍ?ô\º ø3Å¿ð“º.‡ý­þ’%?óÇoú²ïméü«¨¹ÿZ¿õÍ?ô^wãù#~;ÿ°ºèvÕ1ÜlÇÛðþzÅÿ~µþ*½+À+áOøDï¿á–#¥ùòyÀG8ý÷–»¿Ö¶ï»³Ûõ¬m[Ä^7ñ³}à7K“F»[‰ Æ´rcŠÀ±ò¤žeupNLw¾ÇŸ?ìgÔ?’S¿ugú•ã%¥ì²‰Löó´JͱqÇž¿Ã·µO£ZZ›‰.-žEºˆ42%Ä’HÑ‚A<`íOcY^&¾‚ÛHñ,SH§s Cæso{šÐÑcXo4”ò„rÿf¸mÁÈ0õýj}œ”UO?Ô9Ó—/‘¿¶çþzÅÿ~ÿFÛŸùëýú?üUs>8MJcáû}*öK[¹52P‰YFKiåD—o&"ñ aÜgà×?k­kVÚέ1’ìêµ½”ú~›Ñ`ÑiöÚòóäÏp"ãÎ’0àO«“9Á|’WR?êFÖa=¼pÜYÛýžìý™[PyDP¤@ºål;!Ù4 YC:í·?óÖ/ûôøª6ÜÿÏX¿ïÑÿâ«ÂzΣ«ZßÅ«Z}šúÂïìÒ Š›ór†Ú²H‰@Àvéž3´tF×OûžmÌJÓÊÓJÅ™Ü÷$¶N =UFXÛsÿ=bÿ¿GÿŠ©¨ vÜÿÏX¿ïÑÿâ¨Ûsÿ=bÿ¿GÿŠ©¨ vÜÿÏX¿ïÑÿâ¨Ûsÿ=bÿ¿GÿŠ©¨ vÜÿÏX¿ïÑÿâ¨Ûsÿ=bÿ¿GÿŠ©¨  ’­Ç™e‹;Î?vºßíT»nç¬_÷èÿñTMþ¶ßþºý«•×üC¬XëóÚÙ=ŠÚÀ"kwwi.î$[p‘@T*¬WnFåÎBªÛsÿ=bÿ¿GÿŠ£mÏüõ‹þýþ*¸Wñ¦°ö:­ÌIbŸØV’ÜÞ«BíöÏ.k˜ŠÆw'?dc“æc̹l¿kZ¬º|:×™h¶v·ºœpZ¬r,¡à´½sL²†1±Âª‘¸a²¹,NÛsÿ=bÿ¿GÿŠ£mÏüõ‹þýþ*¼ÇûVçÃVW~"’+K£6±©n ò%²_2¤²‡"PJªp‹Ð‹_ø ÝE¤_ZZYêWÇÄñ&Z)ä%­ã¹‘þŽT1‘r\à~ìîí¶ÜÿÏX¿ïÑÿâ¨Ûsÿ=bÿ¿GÿЬ —Ãr-Ä‘É8Ôõ#Æ…›í“d…$3Û'¦ºJ‡mÏüõ‹þýþ*·?óÖ/ûôøªšŠ‡mÏüõ‹þýþ*·?óÖ/ûôøªšŠ‡mÏüõ‹þýþ*·?óÖ/ûôøªšŠ‡mÏüõ‹þýþ*·?óÖ/ûôøªšŠ‡mÏüõ‹þýþ*·?óÖ/ûôøªšŠ‡mÏüõ‹þýþ*¢U¸û\Ÿ½‹;'Ë>­þÕ[¨Wþ?%ÿ®iüÚÛŸùëýú?üUnç¬_÷èÿñU5À‡mÏüõ‹þýþ*·?óÖ/ûôøªšŠ‡mÏüõ‹þýþ*·?óÖ/ûôøªšŠ‡mÏüõ‹þýþ*·?óÖ/ûôøªšŠ‡mÏüõ‹þýþ*·?óÖ/ûôøªšŠ‡mÏüõ‹þýþ*·?óÖ/ûôøªšŠ‡mÏüõ‹þýþ*·?óÖ/ûôøªšŠ‡mÏüõ‹þýþ*·?óÖ/ûôøªšŠ‡mÏüõ‹þýþ*·?óÖ/ûôøªšŠ©n·Yı½úƼکvÜÿÏX¿ïÑÿ⨶ÿTßõÑÿô#SR·?óÖ/ûôøª6ÜÿÏX¿ïÑÿâªj)ÛŸùëýú?üUs—?ëWþ¹§þ‚+©®Zçýjÿ×4ÿÐEL†ñwüºŸýw4Qâïùu?úîhªï—?ëWþ¹§þ‚+ŸÓ¼;‹|1âðÈ–—Z±ÞðÊA´BãVTvõ®‚çýjÿ×4ÿÐEEà/õZÿý…äÿÑqÔÇq³þuÏýþ3ÿÁáÿãU·á¿ ÇàíQ³µžêì]Ï%ÜóÞÜù’´Œ 1$"çîƒÏ9'šêê¿øóŸþ¹·ò¦#&ãDžkÉîRîh Î$dã*(\ÑÑGz}ž“qk|.Þæ[™6‰DÒ 1R~ìcŸ”VÍX ²Dóùm;qË&Ìò¯$v•µEQ±²M2Î;; >ÎÒÖ<ì†Ý¢ä’p¡p2I?XÝsÿ<¢ÿ¿§ÿ‰©¨ w\ÿÏ(¿ïéÿâhÝsÿ<¢ÿ¿§ÿ‰©¨ w\ÿÏ(¿ïéÿâhÝsÿ<¢ÿ¿§ÿ‰©¨ w\ÿÏ(¿ïéÿâhÝsÿ<¢ÿ¿§ÿ‰©¨ w\ÿÏ(¿ïéÿâhÝsÿ<¢ÿ¿§ÿ‰©¨ w\ÿÏ(¿ïéÿâhÝsÿ<¢ÿ¿§ÿ‰©¨ w\ÿÏ(¿ïéÿâj%kµÉû¨³±r<ÃêßìÕº…ãò_úæŸÍ©n¹ÿžQßÓÿÄѺçþyEÿOÿSQLw\ÿÏ(¿ïéÿâhÝsÿ<¢ÿ¿§ÿ‰©¨ w\ÿÏ(¿ïéÿâhÝsÿ<¢ÿ¿§ÿ‰©¨ w\ÿÏ(¿ïéÿâhÝsÿ<¢ÿ¿§ÿ‰©¨ w\ÿÏ(¿ïéÿâhÝsÿ<¢ÿ¿§ÿ‰©¨ w\ÿÏ(¿ïéÿâhÝsÿ<¢ÿ¿§ÿ‰©¨ w\ÿÏ(¿ïéÿâhÝsÿ<¢ÿ¿§ÿ‰©¨ w\ÿÏ(¿ïéÿâhÝsÿ<¢ÿ¿§ÿ‰©¨ w\ÿÏ(¿ïéÿâhÝsÿ<¢ÿ¿§ÿ‰©¨  –íqåœE߬‡ûÇýš—uÏüò‹þþŸþ&‹oõMÿ]ÿB55 !Ýsÿ<¢ÿ¿§ÿ‰£uÏüò‹þþŸþ&¦¢˜î¹ÿžQßÓÿÄ×9sþµëšè"ºšå®Ö¯ýsOýTÈhð?ÈÛ©ÿ×sE.ÿ‘·Sÿ®æŠ¡ùsþµëšè"«øFHõà°»íi9R¿óÎ?R*ÅÏúÕÿ®iÿ Š‹À_êµÿû Éÿ¢ã©ŽãgQçIÿ>ÒþkÿÅTWR¹´˜y@(Ü’¼qõ«u ßüyÏÿ\ÛùSyÒÏ´¿šÿñTyÒÏ´¿šÿñU5À‡Î“þ}¥ü×ÿŠ£Î“þ}¥ü×ÿŠ©¨ |é?çÚ_Íøª<é?çÚ_ÍøªšŠ‡Î“þ}¥ü×ÿŠ£Î“þ}¥ü×ÿŠ©¨ |é?çÚ_Íøª<é?çÚ_ÍøªšŠ‡Î“þ}¥ü×ÿŠ£Î“þ}¥ü×ÿŠ©¨ |é?çÚ_Íøª<é?çÚ_ÍøªšŠ‡Î“þ}¥ü×ÿŠ£Î“þ}¥ü×ÿŠ©¨ |é?çÚ_Íøª<é?çÚ_ÍøªšŠ©,®dƒýQ‡=ן•½ê_:Oùö—ó_þ*‰¿ÖÛÿ×Cÿ µMH|é?çÚ_Íøª<é?çÚ_ÍøªšŠ`CçIÿ>ÒþkÿÅQçIÿ>ÒþkÿÅTÔP>tŸóí/æ¿üUtŸóí/æ¿üUMECçIÿ>ÒþkÿÅQçIÿ>ÒþkÿÅTÔP>tŸóí/æ¿üUtŸóí/æ¿üUMECçIÿ>ÒþkÿÅQçIÿ>ÒþkÿÅTÔP>tŸóí/æ¿üUtŸóí/æ¿üUMECçIÿ>ÒþkÿÅQçIÿ>ÒþkÿÅTÔP>tŸóí/æ¿üUD²¿Úä?g—;Œ¯«{Õº…ãò_úæŸÍ©yÒÏ´¿šÿñTyÒÏ´¿šÿñU5À‡Î“þ}¥ü×ÿŠ£Î“þ}¥ü×ÿŠ©¨ |é?çÚ_Íøª<é?çÚ_ÍøªšŠ‡Î“þ}¥ü×ÿŠ£Î“þ}¥ü×ÿŠ©¨ |é?çÚ_Íøª<é?çÚ_ÍøªšŠ‡Î“þ}¥ü×ÿŠ£Î“þ}¥ü×ÿŠ©¨ |é?çÚ_Íøª<é?çÚ_ÍøªšŠ‡Î“þ}¥ü×ÿŠ£Î“þ}¥ü×ÿŠ©¨ |é?çÚ_Íøª<é?çÚ_ÍøªšŠ©o+ˆÎ-å?;ô+ýãïRùÒÏ´¿šÿñT[ªoúèÿú©©'üûKù¯ÿG'üûKù¯ÿSQL|é?çÚ_Íøªç.Ö¯ýsOýWS\µÏúÕÿ®iÿ Š™ âïùu?úîh£Åßò6êõÜÑT#ß.Ö¯ýsOýUL±Ç¯Oö´‡åFoùg «?ëWþ¹§þ‚*/ª×ÿì/'þ‹Ž¦;GÚcþì¿÷é¿Â¢º¸F´˜—%sßJ·PÝÿÇœÿõÍ¿•1Úcþì¿÷é¿Â´ÇýÙïÓ…ME0!ûLÝ—þý7øQö˜ÿ»/ýúo𩨠~Ó÷eÿ¿Mþ}¦?îËÿ~›ü*j(´ÇýÙïÓ…iû²ÿߦÿ šŠ‡í1ÿv_ûôßáGÚcþì¿÷é¿Â¦¢€!ûLÝ—þý7øQö˜ÿ»/ýúo𩨠~Ó÷eÿ¿Mþ}¦?îËÿ~›ü*j(´ÇýÙïÓ…iû²ÿߦÿ šŠ‡í1ÿv_ûôßáGÚcþì¿÷é¿Â¦¢€*Kp†HÙxrÕ7÷[Ú¥ûLÝ—þý7øQ7úÛúèô©©Úcþì¿÷é¿Â´ÇýÙïÓ…ME0!ûLÝ—þý7øQö˜ÿ»/ýúo𩨠~Ó÷eÿ¿Mþ}¦?îËÿ~›ü*j(´ÇýÙïÓ…iû²ÿߦÿ šŠ‡í1ÿv_ûôßáGÚcþì¿÷é¿Â¦¢€!ûLÝ—þý7øQö˜ÿ»/ýúo𩨠~Ó÷eÿ¿Mþ}¦?îËÿ~›ü*j(´ÇýÙïÓ…iû²ÿߦÿ šŠ‡í1ÿv_ûôßáQ-Â}®C¶\Qþ©½[Ú­Ô+ÿ’ÿ×4þmHí1ÿv_ûôßáGÚcþì¿÷é¿Â¦¢˜ý¦?îËÿ~›ü(ûLÝ—þý7øTÔP?iû²ÿߦÿ >Ó÷eÿ¿Mþ5Úcþì¿÷é¿Â´ÇýÙïÓ…MECö˜ÿ»/ýúoð£í1ÿv_ûôßáSQ@ý¦?îËÿ~›ü(ûLÝ—þý7øTÔP?iû²ÿߦÿ >Ó÷eÿ¿Mþ5Úcþì¿÷é¿Â´ÇýÙïÓ…MECö˜ÿ»/ýúoð£í1ÿv_ûôßáSQ@-îFAY~ûž"cüGÚ¥ûLÝ—þý7øQmþ©¿ë£ÿèF¦¤?iû²ÿߦÿ >Ó÷eÿ¿Mþ5À‡í1ÿv_ûôßá\åÏúÕÿ®iÿ Šêk–¹ÿZ¿õÍ?ôS!£Àü]ÿ#n§ÿ]Íx»þFÝOþ»š*„{åÏúÕÿ®iÿ ŠjLc@¨×ýRþ'¥:çýjÿ×4ÿÐE6IJmf*0X3Ðý+2‡}¦OîÅÿ~—ü(ûLŸÝ‹þý/øQ¶ÛþzËÿ~‡ÿFÛoùë/ýúüUi“û±ߥÿ >Ó'÷bÿ¿Kþm¶ÿž²ÿß¡ÿÅQ¶ÛþzËÿ~‡ÿ@Údþì_÷é´ÉýØ¿ïÒÿ…m¿ç¬¿÷èñTm¶ÿž²ÿß¡ÿÅPö™?»ýú_ð£í2v/ûô¿áFÛoùë/ýúüUm¿ç¬¿÷èñT}¦OîÅÿ~—ü(ûLŸÝ‹þý/øQ¶ÛþzËÿ~‡ÿT4kÔÖmâž5hÒIž5ÝÉÂÈPõÆqïÔõ  ÿi“û±ߥÿ >Ó'÷bÿ¿Kþm¶ÿž²ÿß¡ÿÅQ¶ÛþzËÿ~‡ÿ@Údþì_÷é´ÉýØ¿ïÒÿ…m¿ç¬¿÷èñTm¶ÿž²ÿß¡ÿÅPö™?»ýú_ð£í2v/ûô¿áFÛoùë/ýúüUm¿ç¬¿÷èñT}¦OîÅÿ~—ü(ûLŸÝ‹þý/øQ¶ÛþzËÿ~‡ÿFÛoùë/ýúüUi“û±ߥÿ >Ó'÷bÿ¿Kþm¶ÿž²ÿß¡ÿÅVu–¡ô÷É0K[“o¹¸,B©'¹b:öÏ|PÚdþì_÷é´ÉýØ¿ïÒÿ…CE&ûLŸÝ‹þý/øQö™?»ýú_ð¨h  ¾Ó'÷bÿ¿Kþ}¦OîÅÿ~—ü*(o´ÉýØ¿ïÒÿ…i“û±ߥÿ †Š›í2v/ûô¿áGÚdþì_÷é¡¢€&ûLŸÝ‹þý/øQö™?»ýú_ð¨h  ¾Ó'÷bÿ¿Kþ}¦OîÅÿ~—ü*(o´ÉýØ¿ïÒÿ…i“û±ߥÿ †Š›í2v/ûô¿áGÚdþì_÷é¡¢€&ûLŸÝ‹þý/øQö™?»ýú_ð¨h  ¾Ó'÷bÿ¿Kþ}¦OîÅÿ~—ü*(o´ÉýØ¿ïÒÿ…i“û±ߥÿ †Š›í2v/ûô¿áGÚdþì_÷é¡¢€&ûLŸÝ‹þý/øQö™?»ýú_ð¨h  ¾Ó'÷bÿ¿Kþ}¦OîÅÿ~—ü*(o´ÉýØ¿ïÒÿ…i“û±ߥÿ †Š›í2v/ûô¿áGÚdþì_÷é¡¢€&ûLŸÝ‹þý/øQö™?»ýú_ð¨h  ¾Ó'÷bÿ¿Kþ}¦OîÅÿ~—ü*(o´ÉýØ¿ïÒÿ…i“û±ߥÿ †Š›í2v/ûô¿áGÚdþì_÷é¡¢€&ûLŸÝ‹þý/øTrHÒ¾æ#<:qÚ›ExO‹¿ämÔÿë¹¢ÈÛ©ÿ×sEhAï—?ëWþ¹§þ‚(¶ÿZßõÍÿôEÏúÕÿ®iÿ Š-¿Ö·ýsýÖ}J!ªZµÍÕ¦™4öpù³®Ü ¥ö‚À3í¾ÐKl¶ÜH«µKVŽúm2hôÙ<»³·Ë1S0ÏÌÑÈþøuÎ}¼ik¥XÄÚä7W3HácŽ`P(\‡[™FoS‚ÀêB‘“PXZ½Ü³ÜyðOr¦ÅwÅaû5¼„î•u—8'wÍÓâÖáÝ@¼—³½–£¹›íÖ·I<“¬^ÝcQˆ¡jgäê2Û®Ÿ [Çp÷V—÷Ö·LÄùèë#…1ÅOÞ«dd“–È<òE«âô:.¡}¤ZMwµ“Ü ¢ª°£yr++2Èr¬‡åS÷ÀÈ ã^}TZh7:µåͺÛÁ$ò[¾Æ*OÝb¤2>nã8ª¯á›VkˆþÕyö;¸Ìwv†@éq˜Ä[™Ø7lU>è=I&{­GF]3R¸šö/29$yÖ<˲A V ¡Jü¡HÛÈ÷æ€9Mcĺ嗇$3Km¯i=ÌMj›¡f[)nfüœÝœr¤tëßW1uà vŸÈ·û O–ñÙ¢D‡÷sÇ»~öÛ‡çý•ô ôôVOäcÿ_2ÿè÷­jÉð/üìëæ_ýô 5«˜µÖõ5FÔ.ÚÎM=µ,`d–?ô“9rä?!r6¯ H?.Öéë×ÃpÛ\3=õåÅ·ÚdºK9¼¿)%y ›†Ô Øf$fàõU 2ˆþž™V|$1‰Pù±5Kªß/,è?{³¹ÆÖÛ6¥ã7F’µ8f³ãó¥Ši` {™Cæ|ùÚÇïn9 :V‹¯Zíµy¾Éf‘ˆ`h5)´Œc ˆÖʯ÷Us!f89'7m¼!ea Qi÷w–H#ò§̉ç®÷|—äù¤þëf7ñŒ.Ó@2×ÇÖZ4ZµÆéÅÍÑvßyp­Ì±¡ÚÌ¥ð##¾^FHΆ¥ây¡µšk 2æx⻊ØN|°“1¸HdD@Á.`+œ‘ŒÎ¾·ŠY$¶¿¾¶33›%Ô•¥’]„•%@idÁB­†êH=ü7 -ÄBúñmeΖãËÙ Þ`—ÍRSqo0nÃ^HÛŒ>«©Og¡¸ òîåòâ†)ðBM+* “iû¡ÜnÚOãÙÕ|ñ:Án#V nÜ(^6©Ÿ÷ŸÔ`¤¬?¯×?ì''þ€•¹X~ÿ_®ØNOý(rŠ( aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP„ø»þFÝOþ»š(ñwüºŸýw4V„ùsþµëšè"ªÜG$ÖòEĶìêWÍ‹n僌‚:dtïÇ5jçýjÿ×4ÿÐECY”aÿÂ9/ý ÏýþOþ"øG%ÿ¡ƒYÿ¿ÉÿÄVå\ ?øG%ÿ¡ƒYÿ¿ÉÿÄQÿä¿ô0k?÷ù?øŠÜ¢‹‡ÿä¿ô0k?÷ù?øŠ?á—þ† gþÿ'ÿ[”Qp0ÿá—þ† gþÿ'ÿGü#’ÿÐÁ¬ÿßäÿâ+rŠ.ü#’ÿÐÁ¬ÿßäÿâ+CMÓ—JÓ’ÎÖâa°»,Í´¸fbÙé· ŸL{UÊ(¸ðŽKÿC³ÿ“ÿˆ£þÉè`Öïòñ¹EþÉè`ÖïòñÂ9/ý ÏýþOþ"·(¢àaÿÂ9/ý ÏýþOþ"øG%ÿ¡ƒYÿ¿ÉÿÄVå\ ?øG%ÿ¡ƒYÿ¿ÉÿÄQÿä¿ô0k?÷ù?øŠÜ¢‹‡ÿä¿ô0k?÷ù?øŠ»¥iQé0Ήq<í4¦g’r  ÀtUú(¸Q@Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ñwüºŸýw4Qâïùu?úîh­=òçýjÿ×4ÿÐECS\ÿ­_úæŸú¨k2‚Š( aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPTµCû'D¿Ô¼¯7ì–ÒOåîÛ¿b–ÆpqœuÅ]¬_È“¯ÿØ:ãÿEµNçĨìa¡†S‚?µ'ëÿ€Ô›üGÿ>:þ çÿäZÚ»ÿÉÿë£:†{üGÿ>:þ çÿäZ7øþ|t?üÏÿȵ©Eeïñüøèø3Ÿÿ‘hßâ?ùñÐÿðg?ÿ"Ö}¾¹~övZÔ¢ØéWÍÅn±°ž%™•cf}ÛXå—r…ÜpÍ´o“Âzí׉t‹-SË…-d¶]ä™'ã~ÐOÊŠÁ—œ–9è.sˆÿçÇCÿÁœÿü‹FÿÿÏŽ‡ÿƒ9ÿùµ(  ½þ#ÿŸÿsÿò-ex‹ÄZφ´YõKÍ7I–(±û¸5)‹·Ó6àzžHé]Mq?ÿäB¼úäi ;¨cWÞ]Šª.ã…Éê¨õ§m¶ÿž²ÿß¡ÿÅQú«úæ?ô%¨i6Ûoùë/ýúüUm¿ç¬¿÷èñU gê·òÚ K{eCu{?Ùái(±Ü³ÉQŽ2p2¹Ü5¶ÛÏYïÐÿâ¨Ûmÿ=eÿ¿CÿŠ®rÿY›ÃzZÜëS[]3Ïå«[ˆí¤ûù°OÊz6yéÁ4ËoÙ]ͺ KDZó!‹íûPEºd£Kyœù±¹Ánp ¦Ûmÿ=eÿ¿CÿŠ£m·üõ—þýþ*¹Yügek¥¦¥qks ¤ì‹g,²CÝRÀ©iAµK~óaè1»Š“BñkºµËÚ;ÇìVòF¿)Û!–á$ù—!¹ˆ ‚WåÈ$›m·üõ—þýþ*¶ßóÖ_ûô?øª†ŠV¾¿‚ÒûO´A$y# ,¡BFbzœôþÜÙ¬=_þF_×YÿôKVå<'Åßò6êõÜÑG‹¿ämÔÿë¹¢´$÷ËŸõ«ÿ\ÓÿA Msþµëšè"¡¬Ê (¢…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@bøÃþDþÁ×ú-«jªêVjš]ÞŸ;:ÃuÀì„ ÊTã9ç€4.ÿãòúèßΡ®.O‡0K#I'‰<@îä³3\DI'©'˦ÿµµÿ¡‡^ÿ¿ññº4ÛQ\Oü+[_úuïûÿÿ£þ­¯ý :÷ýÿ‹ÿÑ ðø~ÞãÿI¹{(X< WÈ…Ê•w§•RÅW m]²iZ®ÙÉ2¤vÉnÊHÄ»U]†>øUÆF20v®Þsþ­¯ý :÷ýÿ‹ÿÑÿ Ö×þ†{þÿÅÿÆéèmEq?ð­mèa׿ïü_ünøV¶¿ô0ëß÷þ/þ7K@;jâ~+ÿÈ…yõÈÑÿ Ö×þ†{þÿÅÿÆê9þX\ÀðO¯k’Dãk+MߺjÀz?ê®?ë˜ÿЖ¡ª÷¶ò]Ú´Þ\Zn#sÛ• @9ÆX Óž>µ—ÿä¿ô0k?÷ù?øŠ@nU[û¯àTvxäFó!š2ÂàIÏ8$`‚$A æÿÂ9/ý ÏýþOþ"øG%ÿ¡ƒYÿ¿ÉÿÄP›Ãò¿•+kš‰¼‹z¥ÞØ<ÁíÝ<­›IE9Û»#®2)–^°±ÒÆŸ·&=¬û™—vèNÝ3õ8Ç_øG%ÿ¡ƒYÿ¿ÉÿÄQÿä¿ô0k?÷ù?øŠHü16ÛE©ß$v¬­c(›0ªÈf?˜lb¿¼ÞqÎsÍ]°Ò"°»–è\\Ï<°G ;†-±¤}Ý 2·  U?øG%ÿ¡ƒYÿ¿ÉÿÄQÿä¿ô0k?÷ù?øŠÜ¢°ÿá—þ† gþÿ'ÿGü#’ÿÐÁ¬ÿßäÿâ(Õÿäeð÷ýuŸÿDµnV5¿‡VBÚò]OPº{rÍÏ"2‚T©è ô>µ³@âïùu?úîh£Åßò6êõÜÑZ{åÏúÕÿ®iÿ Š†¾xmFùÜ»Þ\31É&V$ŸÎ“í÷Ÿó÷?ýü5<£¹ôEó¿Ûï?çîûøhû}çüýÏÿ ¡sèŠ+ç·ÞÏÜÿ÷ðÑöûÏùûŸþþ9BçÑWÎÿo¼ÿŸ¹ÿïá£í÷Ÿó÷?ýü4r…Ï¢(¯þßyÿ?sÿßÃGÛï?çîûøhå ŸDQ_;ý¾óþ~çÿ¿†·ÞÏÜÿ÷ðÑÊ>ˆ¢¾wû}çüýÏÿ o¼ÿŸ¹ÿïᣔ.}E|ïöûÏùûŸþþ>ßyÿ?sÿßÃG(\ú"Šùßí÷Ÿó÷?ýü4}¾óþ~çÿ¿†ŽP¹ôEó¿Ûï?çîûøhû}çüýÏÿ ¡sèŠ+ç·ÞÏÜÿ÷ðÑöûÏùûŸþþ9BçÑWÎÿo¼ÿŸ¹ÿïá£í÷Ÿó÷?ýü4r…Ï¢(¯þßyÿ?sÿßÃGÛï?çîûøhå ŸDQ_;ý¾óþ~çÿ¿†·ÞÏÜÿ÷ðÑÊ>ˆ¢¾wû}çüýÏÿ o¼ÿŸ¹ÿïᣔ.}E|ïöûÏùûŸþþ>ßyÿ?sÿßÃG(\ú"Šùßí÷Ÿó÷?ýü4}¾óþ~çÿ¿†ŽP¹ôEó¿Ûï?çîûøhû}çüýÏÿ ¡sèŠ+ç·ÞÏÜÿ÷ðÑöûÏùûŸþþ9BçÑWÎÿo¼ÿŸ¹ÿïá£í÷Ÿó÷?ýü4r…Ï¢(¯þßyÿ?sÿßÃGÛï?çîûøhå ŸDQ_;ý¾óþ~çÿ¿†·ÞÏÜÿ÷ðÑÊ>ˆ¢¾wû}çüýÏÿ o¼ÿŸ¹ÿïᣔ.}E|ïöûÏùûŸþþ>ßyÿ?sÿßÃG(\ú"Šùßí÷Ÿó÷?ýü4}¾óþ~çÿ¿†ŽP¹ôEó¿Ûï?çîûøhû}çüýÏÿ ¡sèŠ+ç·ÞÏÜÿ÷ðÑöûÏùûŸþþ9BçÑWÎÿo¼ÿŸ¹ÿïá£í÷Ÿó÷?ýü4r…Ï¢(¯þßyÿ?sÿßÃGÛï?çîûøhå ŸDQ_;ý¾óþ~çÿ¿†·ÞÏÜÿ÷ðÑÊ>ˆ¢¾wû}çüýÏÿ o¼ÿŸ¹ÿïᣔ.}E|ïöûÏùûŸþþ>ßyÿ?sÿßÃG(\ú"Šùßí÷Ÿó÷?ýü4}¾óþ~çÿ¿†ŽP¹¥âïùu?úîh¬w‘årò;;¬Ç$ÑT#ÿÙcommit-with-issuetracker.jpg000066400000000000000000000773741203611042400340550ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/imagesÿØÿàJFIF,,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀŸ‘"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?î|Qâ›SÒ4ë-.ɵU2¦Òª„ó±‰ÎãïÇzœÞø½F[ÚhÏ­òÿñšÂñ—ü”/×WÿÐ"ªž+×¢ŒåK9&Eþu×JŒgéù÷õ&û¶Í/x¿Ä>ÓÖ÷QðÕ˜…˜.cºVëÿl¿ÏàqËŽù—¢ÿ¿ëÿÆë;ZÕ%Ô>^Ãö‰n-­ïá;º°†Ê‚=0=éž1²Œ|HoiðXYiÒOik%„M,aÖ?›ÌÛæ1É$å²yó[ÃKiG¿WÒßæe9ÉlÍañºCÿ2ü_÷ùøÝ8|kÿÌ/ûü¿ün¢Ó¾h:¦ªÅ6¥¼zÝΓ2¼Èï'— H²+y`/)‚¤7^£SIð>…¬ÿÂ;äFßû~;¡û„“ì¯ï™±ùŠØ_”l#“ž²Ã/çþ~DóUîi2ù€Eÿ—ÿÒŒòù€Åÿ—ÿÖzø#Bû,JN£öáÔ×d´&Æäoˆ/—‘‘œ6N28l`ìhÞ Òí‚]!ym®G»K{˜¢”ªÏ>ל¦Hàò»2 RtðÉ|?˜)TîB>2Èæýý_þ7Nä?ó‹þþ¯ÿ®vâÛLo‹qY[XùvƒYÉŒ®ûüªLp繫ú†ƒ¢Mã Kì×qZè÷?²C:/˜ï;&U¼¼"8M¤ÿµUì(iîþ?ðEí*w5GÆüÀâÿ¿«ÿÆéGÅéüÁ"ÿ¿«ÿÆëœñw†,¼7-õ´+©Í,Ë]Ço|âêòb9Aó,HAû¼eƒtÄÀB‚v‚mn5iôˆeò/¥µŽçO‘ïVX'RÇyÜ#V?/@øXç¤èÐ[¯Ìê=™h|OÿÌ"/ûíøŠpø›!ÿ˜L_÷Úÿñ~ðìƒÍ‚]B{y5•Òâu¸ŒpUI“!a»v1ŒŒtª>Æ«ªE{öŸ±ØCu*H‰åý§Ém¤+@äŒýìt¤©aû~aÏW¹°>%Èæýô¿üE(ø“'ý¢ÿ¾—ÿˆ¬Ý#AÒoì¡¿‘/VN=>(VtÝå»6Ì7'€ýMu°ÙÿgølÙoó>ϦjÑoÆ7m™FqÛ¥LéÐŽœ¿‹GÔÆä?ó ‹þú_þ"œ>"Hæýô¿üEI¦xVÞÎê žVRÓîìÄ>o˜3#¯äP§xgèG½Tñ‡ë_j:|7Mruy­^õ¾a¾å‚Ž~¼STè7k~,9êZ÷,ˆRù†Eù¯ÿN$?ó ‹ó_þ"«7†4ãh7º[Ÿìa©™E)žé·h8ëÎî=êÜžÐôÍvÚÄÞ´·±][)†E,³+¼ØŒ™²8<ÑìèvüÅÏW¸ƒÇÒù†Åù¯ÿN<ÿÌ:/ÍøŠË¼µ±oß*[4vv²LóF\mm…ŽÐ@¨:à°ëÀ«gI´¾²Òï..n´5yÝI¦0þpRÄpGð:Ÿ@9*׿Ò§rØñÔ‡þañã¿üE8xÞCÿ0ø¿ñßþ"’/èWìZd7Ó™EıK%›j«ÛŒjÊà›¯™oáÛ›(5{”·k;‹†€º³æ&ö€3‘üQ~KÿÄÔ°xcOžæÄAp÷“±F¹ŠuÈalÛ•92p<š“D°·¶ÒZôù¬ntë¯5w²—Ž8õÍK§BÚ/ÏúèR•NäŲùr‹ò_þ&”x®Cÿ.qß+ÿÄÓeЬíí%¾fà[X'XC€Ù‘‚ØÁÆð÷öæüVÑ]xrÔ€U#³¼•r0ë€I_Ô`úb‡NEù‚NåAâ‰üºEÿ|¯ÿN&ÿˤ_÷Êÿñ4ëÝ Â /Ñ&ž!fð‡’B~§hŒgÔç+xzÐ]²Ÿ±ˆ%˜L³‡ c!>\gžÐRöt;~bæ«Üˆx’Cÿ.±ß+ÿÄÓ‡ˆ¤?òíýð¿üMTû5ˆÔÛÊgµH¼Ùwd`ÊnÀêpÀûÌփÅå–ÓÆ~Ñy4åMªNd'Žxeº:;F«ò>ÀØ Pt<q^y êºÆ¯¥C«êZŠhCýy*y/©0û‚áÃg¦JÍêr~SÒéÿñïâúúŸÿE¥s+;éù›»«jxÅQRQìÞ;Óõ™¼AáíKG°§†wV‘PR=¹ÜFzžª aîõçß©|8IÛ9Ýý¦ˆ5a]½ÏúÕÿ®iÿ Š†ª5å’[zÿ˜ržsâkOk‡@Ó<›i‚@©yäwûß\篜òÒx[â4úpÓ¦7òX…TϨ©ˆ*ãhÚ_°+Ûë>ë\Òì²'¾„0m…Tï`}ÀÉ+¢Ž"´½Úp¿É±Ç *Ò´oÈòi<;ñ*k¨.¦›R’âßw“+êj^-à ´ù™u¨íü%ãëo²ù yÙ7ý›Ë¿Eòwý혗=ñÖ½Auû«­†ÃD»•YwWcä´¼Mt±‰.,lÔüÌÑ!wtÃd}ÿêæ­ârÇÕþ‰·øÙRñf£êÕþåwød<'ãßî]ÿÇ·Ù?ãý?ÔÏ/¿÷?ÙéíIqᯥ‹ÅvnŸ—N²ê åìCò)ñ…'ÐÅzqðô÷+'Ûµ«éZN‰„HWÆÞEJžÑcuqb RÝ#ø‚phúÕ(üR¿¤ͯÈ>¥ƒÅU¿Hþ­¯ÈñíOLñ ë}«R¹ûdˆ¡˨G3…Ï|äã$þfž·Þ'7ÂðꚀº1ù?h7¼&s·vìíÏ8¯kM+NÕÒÂÕ]H*Ë ‚¨â­ÒþР´äoæ—èÄ©`cöfÿíä¿öÖx¤ºŠ'…á™oäŠIã‰J´§‚äË^µrÓÃþ+¹ržmúmöo™ÝG“ÿ<òÄ ¿ìôö¯_¢£ûJ=)¯½<*×Ù_ÖOô³üO/_ øÅZÕ…åèkE+nEÐÌ*FOŸåqÚ´.4ÿÜèÖúY’Xà‹Îó;Œ5ÇšÛ›Íýæ’{w=s^ECÌ[ÿ—qÿÉ¿ù!ûJóæ?|ÿù3̛Þ0hmák«ÆŠÙ• Ct ÄW…*7ü¤vÇJK¿ xŽö(x7y[Éo1s#³gl¿.r=¨í^EÚOþ}Çÿ&ÿäƒÚaÿçÄ~ùÿògšÉá϶ªú”QµµÁbPÛÌ©å `*|ù å<ŠAáÏý¿íþeÏÛçãí#Ìé½»=8úW¥ÑGö“ÿŸqÿÉ¿ù ö˜ùñ¾ü™æqxgÄðD‘D'Ž4”Nˆ— È8îß­@!ñ8š)âmæDÎÑ¿ïr…ùrbÙ9õ¯S¢šÌSø©¯•ÿVÛ Ö´Rôrý[<­î|Ga$·rÜê–ï9Q$Í$ˆd p ïœUh/µZÇ{:Eµ¢TóÊ W?2õÀã=½k×i“CÄF)£I#n¨ê?«Y…ñSûŸüÔžL·„—¤—ëùžqëî‘ZǪ³"”Dº’#hQ¿±ôy´ïIGú¯î}ï»íÒ¥}3ÅZ Iéí€ !k S Û»•nV·Y–»6ÓÊ-ÌbCœt.{gÐqéN7>#·pd°²»Bò˜Êž:—üzSçrø'÷¯ÎËñìÊrþTþ|¿úRKñ1eÓüIq ±ÜG$Í.ÐÒË8gÚ¹;2[îääUµBÚ¹$1BñHÑEŸ-e*™98ã5¼¾)µ`¿µ»±f\æxNÒF2ž¾•¯oykw»ì×0Í·¼· Œú⳩ýŽ~ͼUi{ Ó™nL$²¥ÍÆôÉR¹ÆïBj©°ñÝ%Ó½Ë\ Ú²›]G<»#©üë°¢¹þ·.ÈçöîÎN;_G4“,×K,¸ó]`¾8;¹Å6M+U’!6ª© u$ä±ç¯AŸE•×QG×'ÙÕãÝœ¼–zôòG$Ïq#Äs=ÆJPIã üªo/ÄFA!¸». €ßi䌌îö•tTQõ¹öAì#ÝœÚÚë‰p× $âwiÿ1pNsØ~Tÿ³kdÒNA 3õ rïsÉõ®†Š>·>È>¯ìȾ}oP¹ó¥Þ˜`ê‘Ë…F¨ÝÁÿˆÁ¬5ÂÎÒNfQ…ÍóèsÜþu¹E%Š’Ñ$„_Vc¼z¤±ºÌBûAw“s`díÎzdç RE§ ~\m*&àÛV\ އëÀü«fŠ[Ÿd/«Ç»2#‡RŠf•T‘³¹Ö\žNNjB𓼓1Þ&\üÀ`½qÞ´è¥õ¹öAõx÷fx]D:·™.ä$©óyõÇ=ûÒ´wLñ¸M†5P›[qÜs×<ýI«ôQõ©öAõx÷eOôã*ÊÒJdQ€æN@úçÞŸ¾ø’Zi‰8äÉèr;ö5bŠ>µ.È>¯ì®Ââ@Œì$nlàžµRö bUŽ;ømbL± mæ31Ç}ÃŽõü4è©–"RVi4]ÓfØ–¹ÿZ¿õÍ?ô\¾­âÛ;$u´’ ¤Q—•å CŒs…ê@ëÔã â®ø…ä¿Õ Ñ"i"Y`I®eBî¶ãhúœñªž%³ŠÓÀÚÍ¥£“%”±G¼,îîÈQxPI9#'ñ< ×DaNŒTê®fõK§«ëòVõ=B•*•W4ž©t·w×ä­ë¨Ø´›f§Ôuaqi óLI~a÷—{úçVÓHÓìvk8Q“;_n\gý£ÏZæ/&¾Ÿ^¸šÖmD¤–ÌñKök¨Æž¾FCyDyw,\çab“Œ¿#4‹«Í>{[»›mPiÊ·–k¹iܘ HapÒÆ>I€V.Ìw‚ÙÔÅUšå½—e¢û‘Lmj‘ä½£Ùh¾ävôÉfŠ4‰–T ì,Ä*Ž{’@¤Šó½/µÞ”÷·šŒsˆìöÄÖ³¾èü¨üï1üÅ…X·œ˜¦AÔdìwâ–³©Éae¦ÚLÉËý¢+É¢å•r¢v;Å0$翜óØå;xfŠâç‚D–:HŒYHÈ Ž ŠËÔ –ûÄœ··V‘]I2ÈöΈX‹ Žª;S4Ûô¹4«(¢¼…!²•DI;ÍoÍÊÎÿ1aÑ3”?¥Zoù¼3ÿ]n?ôCÓ[ƒ%“ÃL:¤:\¾3ÔÓP™7Åh×°‰]yåSfHù[;J/<1¤éÉ;ßxÏSµHfžö«±T-”à3=H Sµ½"þ_ýM›0ßjš¥êMc!T¼Y+q¸"åmÐö»îlð§rcÅáMRÏT×?µ/'ºŽKM:â[ý7NÙq4ñ\Ë oyÙ6‚Èü…Uk$ÖÓ|1¤ë6íq¥øÏS¾\£Ik{ ªà•B3‚=Å\ÿ„ ?úõïûÿÿ­/ Ü_\Ù\›¹.æn ÙÜ^ÛùÍÄ%¤jm"C"‘rª§;›r€9ø@£ÿ¡^ÿ¿ñÿñº?áþ†={þÿÇÿÆë®¢€9ø@£ÿ¡^ÿ¿ñÿñº?áþ†={þÿÇÿÆë®¢€9ø@£ÿ¡^ÿ¿ñÿñº?áþ†={þÿÇÿÆë®¢€9ø@£ÿ¡^ÿ¿ñÿñº?áþ†={þÿÇÿÆë®¢€9ø@£ÿ¡^ÿ¿ñÿñº?áþ†={þÿÇÿÆë®¢€9ø@£ÿ¡^ÿ¿ñÿñº?áþ†={þÿÇÿÆë®¢€9ø@£ÿ¡^ÿ¿ñÿñº?áþ†={þÿÇÿÆë®¢€9ø ˆÈþ!×YÊÓDA‡÷uŸ7ý#OŽFK›é%*9ZEVˆ«/+µ@ç=ÁöÅwõ›«ª?õÌÿèIZBµJZÓ“FÔqh»Ó“^ŒàŠëúJ†YV·U¡_.Q€zuÏn¹'Ó½iiÚÅŽª™µœ3ã-pëÓ¨üzŽ=êõdjú@ºSyf"yE²Öä—„;”UûzRøé¯“kü×àiõš3þ%%ÿn¶¿Í~Q¿¤Ü!tÔ ~ñ¶ɰkJ¹ðÆ<%ºÙ3]¤±ÊVGÎ1,ÁÌ[Ð*©òÁ@«„^6Ѻ©]h;äšÃDº·yíÑmC\G›;…gËÊD‡(Aˆü…θ9p²ÙÊ?$ÿ¯È-ƒ–ÎQù)~7äw”W›\xëeÌÑY“pæîçp‘¤ž9ÑŽàAѳùʱÏËн¼~y¾Ëšæîá™#ˆ;Ì%ÌM»#çpÌÊù,•dÑõzOj«æ¥ú&W¢þËæ¤¿$Îò BÚæîkXÙüøT;£ÆÈB–t2 ñŽ ЂmWa k6:â_®•c-Ì­2‹™¶·ÙG›4„ƒÀ9™€Û“·h`5OS™Ó\Ô-n$Ñß[º‹Ê¶¹[¸ÖâÑäËT‹{ ûûF2d$M/ª7´ã÷¯Ô_SoiÇÿKó²=&Šóéü5q-ü,¾³LŽHæm44^Kº¤ÈX¯ÝÜ|ÔçýÒûb¼-¨î±[½»x|™. –HÊ]N±Ì3‚H.æUbNOîÆIàƒêu;Çÿù‡Ôª÷þþHôz+Í[ºԖڵ›¬`7j’BÂîTYCÊêá•™ÙãbYXæ%äœyð¥ø†àcù·bÖwWÂÒÙ°y\‘«Ì6Mâ dÂ+uˆÏf"«A|Ub¾÷ù+~!õZkâ«ÿ?Ê6üMºŠ{˜-P=ÄÑ„à4ŽgÓšÉ Ã(Ùq©jsÅZ)n2­ƒœŠ’ hÐÊ$K,:fqùA£“ ·›~‹õoôaìð‘øª7éÕµù1.N89ï7ÈóþÉ/ÙüÌíÙçíò÷nù1»;þ_½Å¨.r_Û’Ð ^ÿÁlŸáGöäŸô׿ð['øWS7‹´x/E«ÉvI¸[_9,gx<ÖqO9PÇçaù¸lƒ‚­Ê9P\ó¯íÉ?è¯à¶Oð£ûrOúkßø-“ü+¡‡ÇÞ Z8ð쌓Fñ:²1¬ ‚˜Üà‘HvÚ¤ 5ÈÄ£DUN-Þv2C*Æ>F)±Çïì>Tà`äí9P\ã¿·$ÿ ½ÿ‚Ù?ÂíÉ?è¯à¶Oð®¦ohð^‹W’ì“p¶¾rXÎðy¬â0žr¡;ÎÃópÙDÞ.Ñ཯%Ù&ám|ä±àóYÄa<åCw‡æá²"ŽT9oíÉ?è¯à¶Oð£ûrOúkßø-“ü+±ä âQ¢*È'ï;!• c#Øã÷ƒv*p0rv×Åúº¤ÚjÝÈ.á¸û4Èöò¨ŠCب pÄ!8BÆŽT9oíÉ?è¯à¶Oð£ûrOúkßø-“ü+¥¾ñ®ƒ§K$w7S®ÙD ég3¤²– åFê…d“vAD%†ÖÈù[¨.y×öäŸô׿ð['øQý¹'ýµïüÉþ»«øÚËOº¶¶¶_´I&¡ “³‰"Œ—”FÂ9vå‘ æ0Ù$Î Zð”i?Ú?bó§ÝæùÙ%û?™»<ý¾^íß&7gË÷¸£•ÎKûrOúkßø-“ü(þÜ“þ€Z÷þ dÿ êfñ~‡oz-&»‘®Õ$6òùRLÎF’íØîUI+µó‰ÅJy›¦|­A4Ù3i(Ùpûv©ùxS½0ÿpî^yr ¹ÉnIÿ@-{ÿ²…Û’Ð ^ÿÁlŸá] >>ð¼èXjÑLJddš7‰Õ‘ˆeÆç|ŠC¶Õ ›Ÿð”i?Ú?bó§ÝæùÙ%û?™»<ý¾^íß&7gË÷¸£•ÎKûrOúkßø-“ü(þÜ“þ€Z÷þ dÿ êcñ~‡.©6š·r ¸n>Í2=¼ª"ã`v*‡Ü1 HN±¢ÃÅz~¡­Þi0Á©-Å¥Á·w}>a`Šäù›v†ÜFx#!”“•Î[ûrOúkßø-“ü(þÜ“þ€Z÷þ dÿ ëá(Ò´~ÅçO»Íò<ÿ²Kö3;vyû|½Û¾LnÎÿ—ïqQØx¯OÔ5»Í&5%¸´¸6îï§Ì",\Ÿ3nÀ0ÈÏd2’r ¹ËnIÿ@-{ÿ²…Û’Ð ^ÿÁlŸá]ˆ× oVA8·yØÉ ¨Sù¦Ç¼°ùSƒ“¶?øJ4Ÿí±yÓîó|?ì’ýŸÌÎÝž~ß/v¿åûÜQÊ‚ç%ý¹'ýµïüÉþ#[«x®-ô}nh%@ñÉŸ#+©0AæºØü_¡ËªM¦­Ü‚î³Lo*ˆ¤8ØŠ€¡÷ŒH„,j?É<ð×ý‚­ôRÑÊ‚ç5ý¹'ýµïüÉþnIÿ@-{ÿ²…z-r ¹ç_Û’Ð ^ÿÁlŸáGöäŸô׿ð['øW¢ÑG* žuý¹'ýµïüÉþnIÿ@-{ÿ²…z-r ¹ç_Û’Ð ^ÿÁlŸáGöäŸô׿ð['øW¢ÑG* žuý¹'ýµïüÉþnIÿ@-{ÿ²…z-r ¹ç_Û’Ð ^ÿÁlŸáGöäŸô׿ð['øW¢ÑG* žuý¹'ýµïüÉþnIÿ@-{ÿ²…z-r ¹ç_Û’Ð ^ÿÁlŸáGöäŸô׿ð['øW¢ÑG* žj|K±VÒ5 Gãô¤ÿ„ž/úë?øÿá]F©zlƒH× K½˜† }ö¬{XêÜÐÜÊñ´ —9iÈ"¤dö³­Ý…µäa„W1‰c ×iÎ ü³Qjò ¼ÿ®ÿ šn‰ÿ"¦…ÿ`ø¿‘§jò ¼ÿ®ÿ š]@ùæŠ(­ >–¹ÿZ¿õÍ?ô\ïŒäQÔ¿ë—õÑ\ÿ­_úæŸú®wÆ?ò(ê_õËúŠÏ©]¿HÐf°Öõ}JêâÒåïn<ØJZÞ)e7—mÀ¬1€¹*N:ŽïFÖ'ñm®±©c­´On¶Ï`ìæ9&“2yÀnÌ#ny ]¡'/ÿµçü%ð‘iÁý£æù;¾Èvÿgã?fÇ™÷·þóÍ뻌mùjœ>†Ó^:„x~D7­xdºÑ„·ažC#bq Á Ä)Ùò€¿{=¥ÇÿÂq7ˆµn®´¦]ùâê $E}°>R#p$åB…¾O™2 ÍvQ@øRžÂkkrÑŒöú¥¼žËòÞºÈHc‚’ ÷Êœp~jܻѵ‰ü[k¬EªXÇkmÛ­³Ø;9ŽF‰¤Ìžp³ÁÛžCWAEqÿð†\Mâí[«­)¤~xºƒI_l”ˆÜ 9P¡co“æLƒ‚sGü!—x‡ûVêëJißž. ÒDWÛå"7NT(XÛäù“ àœ×aEs÷z6±?‹muˆµKím¢{u¶{g1ÈÑ4™“Îva;p3Èjϼðž±sý«åëV1ý»U¶Ô“vœíåù>^Ô?¾³äE“Çññó ½…ç÷º&¼Ú¢èö‘κ*ê±êBvЬ~Ò·2+Éç+¸¸P°©ÜÚ· QEq÷ÞÕ&¶’ÊË]‚ÚÄjR†7°óÍûH¸+#yƒt{Ë`(F/ÌpÛ¬Â-y¿ìÚpchhyd?hó>Ñöœy¾fݾoo/;8Î~jê( ~ÏCÕ4û¦†×W‚=)®äº1}7É+Jëæ—Û´»0ÿW‡îùêž±áëë‹·°Öc³ŠæößQxä³ós<&  ëû¢°'Ê0Û¹ßõ”PþÔ§°šÚã\´c=¾©o#ǧ²ü·®²˜à¤ƒ=ò§š¬Càm5ã¨A‡äCz׆K­Kvä26' ÌBŸ( ÷±“ÚQ@}ç„õ‹Ÿí_/Z±íÚ­¶¤›´ço/Éòö¡ýðÝŸ",ž?˜mÔ]úß[ºº³Ôã‚Îöá.n¡6ÛågTHð’Ú¨V$cËá ®åÁꟚÿRkèotØîõ/ »›JY®·¬¢@’L\ˆ` UØB„]Ä) Ð.‹}o­Ý]YêqÁg{p—7P›mò³ª$xI mT+ 1åðÀWrŠçîômbÚëj–1ÚÛDöëlöÎc‘¢i3'œìÂ0vàgÕ_þkÍÿcþÓƒûûCûCÈû!ûG™ö´ãÍó6íó{yyÙÆsóWQEq÷žÖ.µ|½jÆ?·j¶Ú’nÓ¼¿'ËÚ‡÷Ãv|ˆ²xþ>>a·CÀŸòO<5ÿ`«_ýµÐQ@Q@Q@Q@Q@Q@Q@Q@Q@µ­Aý£%»èšÐ‚F\ÿf¼‘³n<®FÞûñÔV]Ʊ–öÞÔái£* zK&I*¿íλ¹Gïœcøÿë{úw}óøçùúûõFsºDo†tH¥FIÆ5da‚¤g ŽÆOþAWŸõÁÿôZw‡&#œå[œçøÛÜÿ3YšŸü‚¯?ëƒÿè&§¨Ïžh¢ŠÐ“ékŸõ«ÿ\ÓÿAÎøÇþEKþ¹Q]ÏúÕÿ®iÿ Šç|cÿ"Ž¥ÿ\¿¨¬ú•Ðôº(¢´$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢£žxmm常–8`‰ É$ŒQ@É$žœÐ”V]·‰tÛ‹k{MoMž{¤/oWHÍ2‚À”å€(à‘ýÓèkR€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€2¥¾qâ–¹ÿZ¿õÍ?ô\ïŒäQÔ¿ë—õÑ\ÿ­_úæŸú®wÆ?ò(ê_õËúŠÏ©]K¢Š+BBŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ©Gïœcøÿë{úw}óøçùúûõšXÄÒè>c‘‘ïÿ×íë×?; ±ó™ßæÿ_^ýsóÈÊw‡&#œå[œçøÛÜÿ3YšŸü‚¯?ëƒÿè&´g•'Ž b‘dвº¶àÀ³AÉÈ÷ɬíOþAWŸõÁÿôSÔgÏ4QEhIôµÏúÕÿ®iÿ Šç|cÿ"Ž¥ÿ\¿¨®Šçýjÿ×4ÿÐEs¾1ÿ‘GRÿ®_ÔV}Jèz]Úí¿çâ/ûìSd¿³†'–[¸4RÌí @êIì+BKS±œbD9éóoñ˜ KÆ$CžŸ0öÿùŠ}Á,g‘z|ÃÛüGæ(Æq‰ç§Ì=¿Ä~b€E0KÆ$CžŸ0öÿùбœbD9éóoñ˜ ÑLÆq‰ç§Ì=¿Ä~b,g‘z|ÃÛüGæ(ôS±œbD9éóoñ˜ KÆ$CžŸ0öÿùŠ}Á,g‘z|ÃÛüGæ(Æq‰ç§Ì=¿Ä~b€E0KÆ$CžŸ0öÿùбœbD9éóoñ˜ ÑLÆq‰ç§Ì=¿Ä~b,g‘z|ÃÛüGæ(ôS±œbD9éóoñ˜ KÆ$CžŸ0öÿùŠ}Á,g‘z|ÃÛüGæ(Æq‰ç§Ì=¿Ä~b€E0KÆ$CžŸ0öÿùбœbD9éóoñ˜ ÑLÆq‰ç§Ì=¿Ä~b,g‘z|ÃÛüGæ(ôS±œbD9éóoñ˜ KÆ$CžŸ0öÿùŠ}Á,g‘z|ÃÛüGæ(Æq‰ç§Ì=¿Ä~b€E0KÆ$CžŸ0öÿùбœbD9éóoñ˜ ÑLÆq‰ç§Ì=¿Ä~b,g‘z|ÃÛüGæ(ôS±œbD9éóoñ˜ KÆ$CžŸ0öÿùŠ}Á,g‘z|ÃÛüGæ(Æq‰ç§Ì=¿Ä~b€E0KÆ$CžŸ0öÿùбœbD9éóoñ˜ ÑLÆq‰ç§Ì=¿Ä~b,g‘z|ÃÛüGæ(ôT?k¶ÿŸˆ¿ï±GÚí¿çâ/ûìP=­j2iÈf_´4k¼²Ây{sŒŠÊ—T¸Ô¼;yr¿jKvŠDV•±æ|§89¦zTz—Šmí„ZÌjX,ÐY»Ç ,H*Æ=G·Ÿyâ5¹°’Ý4­\fcìFÜÀàTjèŸò*h_ö‹ùv§ÿ «Ïúàÿú £HáðΉ¨É"XƬŒ0TŒäØÑ©ÿÈ*óþ¸?þ‚iuçš(¢´$úZçýjÿ×4ÿÐEs¾1ÿ‘GRÿ®_ÔWEsþµëšè"¹ÿÆóxWPŠ$g‘ã ¨£%‰#æ³êWCkWÕ¤ÒíLÛæ*± TF8ÉQùzÄñmÕÄþ»ifvóm#‘†ãŒ°VéŸz}׉­¥vOì^Hö„9ÓäÃ<ÐûÖF¿«G÷:}®‘«+´ a¬dÆp{ `z?_|þ9þ~¾ý{çç:ûçñÏóõ÷ëß?; ±ó™ßæÿ_^ýsó†Xù̉ï󯿯~¹ù؇õ÷ÏãŸçëï×¾~s¯¾ÿ?_~½óó°Ë9‘=þaïõ÷õï×?8eœÈžÿ0÷úûú÷럜ý}óøçùúûõëïŸÇ?Ï×߯|üì2ÇÎdO˜{ý}ý{õÏÎcç2'¿Ì=þ¾þ½úçç_|þ9þ~¾ý{çç:ûçñÏóõ÷ëß?; ±ó™ßæÿ_^ýsó†Xù̉ï󯿯~¹ùÀ×ß?ŽŸ¯¿^ùùξùüsüý}ú÷ÏÎÃ,|æD÷ù‡¿×ß׿\üá–>s"{üÃßëïëß®~põ÷ÏãŸçëï×¾~s¯¾ÿ?_~½óó°Ë9‘=þaïõ÷õï×?8eœÈžÿ0÷úûú÷럜ý}óøçùúûõëïŸÇ?Ï×߯|üì2ÇÎdO˜{ý}ý{õÏÎcç2'¿Ì=þ¾þ½úçç_|þ9þ~¾ý{çç:ûçñÏóõ÷ëß?; ±ó™ßæÿ_^ýsó†Xù̉ï󯿯~¹ùÀ×ß?ŽŸ¯¿^ùùξùüsüý}ú÷ÏÎÃ,|æD÷ù‡¿×ß׿\üá–>s"{üÃßëïëß®~põ÷ÏãŸçëï×¾~s¯¾ÿ?_~½óó°Ë9‘=þaïõ÷õï×?8eœÈžÿ0÷úûú÷럜ý}óøçùúûõëïŸÇ?Ï×߯|üì2ÇÎdO˜{ý}ý{õÏÎcç2'¿Ì=þ¾þ½úçç_|þ9þ~¾ý{çç:ûçñÏóõ÷ëß?; ±ó™ßæÿ_^ýsó†Xù̉ï󯿯~¹ùÀ×ß?ŽŸ¯¿^ùùξùüsüý}ú÷ÏÎÃ,|æD÷ù‡¿×ß׿\üá–>s"{üÃßëïëß®~põ÷ÏãŸçëï×¾~s¯¾ÿ?_~½óó°Ë9‘=þaïõ÷õï×?8eœÈžÿ0÷úûú÷럜ý}óøçùúûõëïŸÇ?Ï×߯|üì2ÇÎdO˜{ý}ý{õÏÎcç2'¿Ì=þ¾þ½úçç_|þ9þ~¾ý{çç:ûçñÏóõ÷ëß?; ±ó™ßæÿ_^ýsó†Xù̉ï󯿯~¹ùÀ×ß?ŽŸ¯¿^ùùξùüsüý}ú÷ÏÎÃ,|æD÷ù‡¿×ß׿\üá–>s"{üÃßëïëß®~põ÷ÏãŸçëï×¾~s¯¾ÿ?_~½óó°Ë9‘=þaïõ÷õï×?8eœÈžÿ0÷úûú÷럜ý}óøçùúûõëïŸÇ?Ï×߯|üì2ÇÎdO˜{ý}ý{õÏÎcç2'¿Ì=þ¾þ½úçç_|þ9þ~¾ý{çç:ûçñÏóõ÷ëß?; ±ó™ßæÿ_^ýsó†Xù̉ï󯿯~¹ùÀ(j—³ÚX¼ÐÊÀ¤2Hc‚C1çúþ5™&©>£á«‹× H0äà8=÷¨uo[¥³}7UT×sÿ?ÿßf¸Í_Hk Ý t»©’â]Dáïçžñ·ÂòdpOB;g8Å@þ*ÔÚÓQž4³_ì{i'ºV‰›í[%ž2æV~ÌÇ'ÌÆð9Ûów_k¹ÿŸ‰ï³GÚîçâ_ûì×Þ ÕC­Ä6Ö×0Ü]ÝY[Y(1ÉæB&Á2–*CÆÁã“·æ¤|M®HðØY—Z‘iÀ[,Ûùb¡ŽK… |§zÈTŒ`0;€{ö»Ÿùø—þû4}®çþ~%ÿ¾Ís—zÕÏü#¶VÑ"ê:‚ÇöxmÊ—)æ2ƒ½€Es»zƒŒŒð Q¯ê3xF+ô†}A¯RÉ–dÞŠßjìÅUþ­´9ÇMÇ©ë~×sÿ?ÿßfµÜÿÏÄ¿÷Ù®>×\Ö&ñ"hŒ,Y¡i…ÍÈÐ2¢Û8(›Ž 0Xò7g†–›âŸ^Y‹×Ò‘ažÐ_ÁÔó Ñ—DU•šV(ç V0.GÏ€Þý®çþ~%ÿ¾Ík¹ÿŸ‰ï³\-߉¯F¡o4Ãö{¿6+'bø*gµee µÔ´ŽêGÞM˜eÜÕ¡¦k—òø‘´k±líÎ%ž(ÙŒ«lêUK6Ñ‹‚$ä¨9Åu_k¹ÿŸ‰ï³GÚîçâ_ûì×™j¾#Ôïü!;ßÇ ½þŠïÍ ºv´i_lñÓ¸muÉH''oUm«ßÍ­ -­Ñf†y^æMŒìøÌEN~óAÈÁ1NÝÑý®çþ~%ÿ¾Ík¹ÿŸ‰ï³\}Ljuuñ$ÖööÚmµÜ6“Jæ5¤XÎíí*Gš¸An rß.Dúþ»q¢èæ[«4¸Õc´»†Kx1úM²²8ó ‘HŸ8R?‹€Gû]ÏüüKÿ}š>×sÿ?ÿßf¸Æñ·ºö¢Îlín`³¹ŸjFŽò,d°f›rcÍMŽN –ùjÅâ_Üéz#Aem%î§hפ[Ä$X£UˆcMI2ç;¾_»†ûôÞý®çþ~%ÿ¾Ík¹ÿŸ‰ï³^{«ê:å„WìvÖj:bK{»;ÛK•™\.Ñæ÷[;Iæè弿ŸÄM§ÚIm 6ÐCq;K HÒ¬"í\2ì Dy;³¸qÇ ¿k¹ÿŸ‰ï³GÚîçâ_ûì×þ)ÖŽ›:ý„6¯7ÀÀø¶WžÞ2¯óþôâàr6r>n |S¬F±Æ>Âf¹­â!öÆÑ^EjìË¿æ e.+·Io½@ïÚîçâ_ûìÑö»Ÿùø—þû5ÁMâíVÖºÞÚæiÚX-ÖÊ’+¨íI!Ÿ ¥Þ)€6–9Þ&³Ö¼G}¨A¦0±±º pÓ<ð I äýÜsŸ,‘9à»7`vÿk¹ÿŸ‰ï³GÚîçâ_ûì×  ë:ž¥c®k ug»GÐAy¸¥»µœ ÒnD € òNyÅv”7Úîçâ_ûìÑö»Ÿùø—þû5  ›íw?óñ/ýöhû]ÏüüKÿ}š†Š›íw?óñ/ýöhû]ÏüüKÿ}š†Š›íw?óñ/ýöhû]ÏüüKÿ}š†Š›íw?óñ/ýöhû]ÏüüKÿ}š†Š›íw?óñ/ýöhû]ÏüüKÿ}š†Š›íw?óñ/ýöhû]ÏüüKÿ}š†Š›íw?óñ/ýöhû]ÏüüKÿ}š†Š›íw?óñ/ýöhû]ÏüüKÿ}š†Š›íw?óñ/ýöhû]ÏüüKÿ}š†Š›íw?óñ/ýöhû]ÏüüKÿ}š†ŠsÈò¶éœôËÕ=OþAWŸõÁÿôVª®§ÿ «Ïúàÿú  žh¢ŠÐƒékŸõ«ÿ\ÓÿA Msþµëšè"¹ï³'„õRC²<ƒ‘Y”[³Ðt}9÷Øé66­¸>è-‘àAàuÃ0ú1õ4ùt}2i ’]:ÎG·‘¦…ž&7fÜ̧1nI“Íj¼ðÏüøÏÿÓÿñt¼ðÏüøÏÿÓÿñu\¢¹–ú>™%ÕÅÓéÖmqs†yL ^T ¬q–\0xàSAÑåÓâÓäÒl^Ê&ß³[!žBãüÇó>µ¯ÿ óÃ?óã?þOÿÅÑÿ óÃ?óã?þOÿÅÑÊ)]ÙÚßÚ½­å´76ïñLѰr2áYÚ‡†ôëÿ¶ˆ¥¥‘da´Q…R² 8R¥H,9r}k{þç†çÆüŸÿ‹£þç†çÆüŸÿ‹£”.`较E@‘Ü<êŠR{x#+ÌÊ0€O\•v×M°²žâ{K+ky®[|òE£JÙ',@ùŽIëêkGþç†çÆüŸÿ‹£þç†çÆüŸÿ‹£”.g6Á H •±… kuŒÄ»V"1Ž…\ŽœJ…ô]>->M&Åì¢mñÛ5²ѹä.0Ì3ëZÿð¯<3ÿ>3ÿàtÿü]ð¯<3ÿ>3ÿàtÿü]¡s!4'•ãÒlQ¥ƒìò2Û /ùgŽW :`JšÞÂ+{Ë˰Îó]2–g íUP¡ÑAÜØþó±ïZ?ð¯<3ÿ>3ÿàtÿü]ð¯<3ÿ>3ÿàtÿü]¡s9ôÛ uµ ,­žö%ÙËD¦D^x ŒóÌúÐtÛ 6VÆ­Ö3íXˆÆ8Rr:p=+Gþç†çÆüŸÿ‹£þç†çÆüŸÿ‹£”.e¦¦GuotšušÜ[F!‚Q‡‰ *œeWŒ94\èúeåŒVWZuœöãÊ‚X£L ªFÀÇjÔÿ…yáŸùñŸÿ§ÿâèÿ…yáŸùñŸÿ§ÿâèå ™w:>™y}íÖg=Ü8ò§–i#k‘‚r1ÞŸu¦Ø^Ïo=Ý•µÄÖ; %‰]¢lƒ•$|§ tô£ÿ óÃ?óã?þOÿÅÑÿ óÃ?óã?þOÿÅÑÊ2âÑôÈdžH´ë8ÞâEšfH[r³rÁ¹ò4ó¦Ø1Bl­‰FgRb_•‹‰ pKª±ÿhÔVü+Ï ÿÏŒÿø?ÿGü+Ï ÿÏŒÿø?ÿG(\Îm6ÁÑ‘¬­™YdFSVCº@xèÇ–õ=hµÓl,R$´²¶·XU’%Š%@ŠÄ3Àà8ê@­øWžÿŸÿð:þ.øWžÿŸÿð:þ.ŽP¹—ý¦Ð:Ïþ=¾Éþ¡ÔÏ.ŸsýžžÕv§ÿ…yáŸùñŸÿ§ÿâèÿ…yáŸùñŸÿ§ÿâèå QSÿ¼ðÏüøÏÿÓÿñt¼ðÏüøÏÿÓÿñtr…È(©ÿá^xgþ|gÿÀéÿøº?á^xgþ|gÿÀéÿøº9BäTÿð¯<3ÿ>3ÿàtÿü]ð¯<3ÿ>3ÿàtÿü]¡r *øWžÿŸÿð:þ.øWžÿŸÿð:þ.ŽP¹?ü+Ï ÿÏŒÿø?ÿGü+Ï ÿÏŒÿø?ÿG(\‚ŠŸþç†çÆüŸÿ‹£þç†çÆüŸÿ‹£”.AEOÿ óÃ?óã?þOÿÅÑÿ óÃ?óã?þOÿÅÑÊ ¢§ÿ…yáŸùñŸÿ§ÿâèÿ…yáŸùñŸÿ§ÿâèå QSÿ¼ðÏüøÏÿÓÿñt¼ðÏüøÏÿÓÿñtr…È(©ÿá^xgþ|gÿÀéÿøº?á^xgþ|gÿÀéÿøº9BäV}σ<;»M¥ÙÉn—ò€b=O¥R½ðLJసš;+½ñÄÌ»¯å# dgšVC7j®§ÿ «Ïúàÿú ¦èŸò*èg»XÆÄú“’OÔ“šv§ÿ «Ïúàÿú ¥Ôžh¢ŠÐ“ékŸõ«ÿ\ÓÿAÎøÇþEKþ¹Q]ÏúÕÿ®iÿ ŠÏÔ´èum>käxá˜mvŒÀg/äiÚŸü‚¯?ëƒÿè&¬CvvVí#Ek­ ˆÆqUõ?ù^×ÿÐM. |óEV„ŸK\ÿ­_úæŸú¨jkŸõ«ÿ\ÓÿAÎXÝbW¿þÓ¹µ‚+¹`[HR"ޱJÑìÈX–(OÊW€9Že´W ¥x¶÷Lð®”ú­Ÿ<út2ÛIï3ÎI†<È6nV-4gå½Ô€NÓÄ÷÷þMµ¾åêy¬RîImâ)—–Vh·žfAÌ`d?<Å€éè®.ËÅog¦jM$3]5¥ìñ±vb夼x¡UP™BÀmÚ¡Èe[¶ž'¿¿òm­ôo/P“Íb—rKoHü¼²³E¼ó2c!ùà,OErºvµyká ²Û½ýæ£1fIöæÝ¤.Ìs‘”äòpIˆ Dñ”’jQ&‹}5¬ TAôP; ¥¥x¶÷Lð®”ú­Ÿ<út2ÛIï3ÎI†<È6nV-4gå½Ô€°Õ…iâBþ¿Õ¯´û›Qb²<±ùn7ª&òcóŒr«ó: ’M[XŽ{{¦Xÿhβ̨/ßÊFP_ÉÎíÒ.n0 ÝÚ€7h®JׯWZ“Æl4¸Z ™#†Õ§»1³;Û-ÏÎlDe†Ac¸Œ‚ׯWZ“Æl4¸Z ™#†Õ§»1³;Û-ÏÎlDe†Ac¸Œ‚Àu´W¦x¢ûXñªéÑ7•㺑Pª¬ä »PÀNß)8$Ÿ›@eŸ‹õH<;¡½Þž—Zý ¸&™ÕãTs°Š*Ť(R£Ÿ› %€íè®;Qñ ýý¼Mefö¶ÑߨEróÌÑ\FÒI”òÂFÙU[.:°Á›·úåæ›¯jŒñ¤ºUŽ—äÀ>$C›‚v.ßœ°F (ã©¢Àt”Vf›©]\_\Ø_ÚCowqÌD™£(åÂüÅîÌm‘Œcœ9¹µ=cM·¹›Q¼¾Šò>Ù$–æÞXb’6¸ò )|m%TJAýàÏ •íè®ïÄ:¬:ÚÞ­×üIâ’öY­ÌkŸ"‚ 8ÈØæyF2X½Njß[žßÃwz¥ÐóŵíÊÊrdܺàs²5ÎËmÇSE€è(®WPñŒ–óù6škܳÏ:BÃÍet„¢HÄEޤHå+ƒ°Ü¨/O]Mo¨\E¡^yVžR…l™YäŽ' cUf|Ó¿‚T/Ê’°=ÉAâÉ美 xìî®.£„@ ¾Z–&ä±óD{¾í¹ÉÁù°09b7Œ®¶ÞÊš\&ßN¶3ß3]ë²I£qùx|w ±Lås·œ­¢³5-JêÞúÚÂÂÒ‹¹ã’`'œÃD(æçvd\ cä`‘¨xÂ[ K›æÓ‘ì•®¡…ÁI, +0eÙ…SäHc÷~^N:ª+’½ñµ«a¦¥•œz¹C$"ì´2ÂðÜCå`Ѐ—žN,Çâ[ÉÓ÷:Z %¿šÂ×͹ڲ¼F]ìÄ+]°œpIbFÉ`:J+›ÐuiuOj%·Æ±ÚB˜YTžê9 ôÈ&>¸€¹ é(QEQEQEQEQEU]OþAWŸõÁÿôVª®§ÿ «Ïúàÿú  žh¢ŠÐƒékŸõ«ÿ\ÓÿA“.‹e. /¿ÒcŸr»y7RÄ’2ãÑX+œ>`r€k\ÿ­_úæŸú®_OÓßT—Sž}[U‹ÊÔ$‚8í§EUP¨ßÄŒz¹ïY”_>ÒšÖÖØÚþêÖÛì°#f8ò„`ç!Š2ï ‚ F|3¥˜1ʲ³7ž—“,ìHî”6ö* #ä_îŒ/ü#ñÿÐk^ÿÀ¸ÿøÕQÔô³iö‹YÖË\ÞÁlKÝFB«¸ãËã8÷õéL ¼=¥O Äö¼$’Ê¥deei»Àä|ä8ç†U#TˆÏ†t³F#¹VVfóÒòe‰Ò†ÞÀ…A‚Ä|‹ýÑ…ÿ„~?ú kßøÿ£þøÿè5¯à\üj€,ŤØÁo§AbÓ±öUÞÇËÄmïÏÈÌ9Ï\õ¨O‡ôÓu-ÀŠey7œ-ÌŠˆÎgE ¶7;›. 7ÌÜüÇ,ÿ„~?ú kßøÿ£þøÿè5¯à\üj€øgK0$b;•efo=/&YØÝ(mìT,GÈ¿Ý$ðΑ$ðÊ-ž!DëÉE£+°˜Ñ‚1]¨AáTtRÿÂ?ýµïü ÿQÿüô׿ð.?þ5@“ÃúkØÙÚ¦Š+8Ä6íÌ‘Hˆw£+ò®A8%A9 P|?¦›©nS+ɼándTFpC:(m±¹ÜÙu¾fçæ9gü#ñÿÐk^ÿÀ¸ÿøÕðÇÿA­{ÿãÿãTrÃO¶Ó`h­•ÀfÞï$#»` ³±,ÇIÀt«7‡´§±ŠÍ­so“Ø"yÄ2g9ä"ó׎½iŸðÇÿA­{ÿãÿãTÂ?ýµïü ÿP›-&ÇO¸ž{X<¹gÏ˜ÛØîýä’w<|òÈàXè)[xOF´µ6ÑÛÌÑÄH%º–S ‚–bcÁU?&9E=TbOøGãÿ Ö½ÿqÿñª?áþƒZ÷þÇÿƨeÒ-­ô»›+hЉՃµÞë1ŠíÌ››tƒ û  €2ì<,éE©Þ½ÉVÝ ¶ó]C*d Ëæ4îåNÔ;A •Î Á¿áþƒZ÷þÇÿƨÿ„~?ú kßøÿ  ¡ÐôËy#’ DˆÇ8ª®!òA ü¸éßæ™gáí*ÁmÖÖ×Ëò,±~ñŽÖX|€y<þìmçëךgü#ñÿÐk^ÿÀ¸ÿøÕðÇÿA­{ÿãÿãT–ÞÒ,ÄÖÙá0224sÈ­ò¢ RCd®Ø£NU¶A<Ð|3¥ù Gs£3Fa¼š6ˆDe`R?•v¤'Ê8àRÿÂ?ýµïü ÿQÿüô׿ð.?þ5@ '†t‰'†Qlñš'X žH¢-]„ÆŒŠí@2 £ ­\é67—Bââ ïå˜\o`’¡m‘AÛ"Í€À¸ã54²Þ!xÖu±²{–cubÂD@îø3g®xéŽoÂ?ýµïü ÿQ`,éúU¦™æq3<˜ß$óÉ4„ àov-´d3€Xžæ™a¢ÙiÓ´ðý¦IŠì\ÝKpʤ‚B™¶‚@Î1£9À¨áþƒZ÷þÇÿƨÿ„~?ú kßøÿ  6ºMŸØ¾Ïϱ[[ŽÈŽÌ¯'ŸõiÉÉãÜѤé6:™›¦ÁäZC»Ë{62Å,IêOz­ÿüô׿ð.?þ5Gü#ñÿÐk^ÿÀ¸ÿøÕ>Oé¯cgh"š(¬ãÛ´2E" mÞŒ¯Ê¹à•äO]OŽÒâÖ^Ú†Fqm3ÂAUD]¥*ƃ îjøGãÿ Ö½ÿqÿñª?áþƒZ÷þÇÿƨ†t‚„ gFÚ‹æÇ<‰ Ú\†0be“-ͽ·“RiKkul-uumöYÁ‘³$yrrs’ÄË!-÷‰bI&™ÿüô׿ð.?þ5Gü#ñÿÐk^ÿÀ¸ÿøÕYÔ4«MOË7exó²H'’8ÈÞŒiÀ$g¨=…UŸÃ:EËÜ™­ÖádWˆÏ'–<ÀC²¦í¨Ì²ÊÍÏÌr¿ðÇÿA­{ÿãÿãTÂ?ýµïü ÿPך&Ÿ<“Ï ùls´X ðö•ámqŸ'$ÈıŠC*s’Þc3ybNìÖdÿÂ?ýµïü ÿQÿüô׿ð.?þ5H j+'þøÿè5¯à\üjøGãÿ Ö½ÿqÿñª,€Ö¢²áþƒZ÷þÇÿƨÿ„~?ú kßøÿ¢È j+'þøÿè5¯à\üjøGãÿ Ö½ÿqÿñª,€Ö¢²áþƒZ÷þÇÿƨÿ„~?ú kßøÿ¢È j+'þøÿè5¯à\üjøGãÿ Ö½ÿqÿñª,€ÖªºŸü‚¯?ëƒÿè&²ÒÏû?Äú ¨ê— srÂD¹¸VBªŒØÂ¢ž¸ïŽÁÍjjò ¼ÿ®ÿ š,Ï4QEhIôµÏúÕÿ®iÿ ŠÃðÿú­_þÂóè¸krçýjÿ×4ÿÐEsZ&—«êM¬}ƒQKHcÕ%Èû"ÊYŒq÷2/Œzò{B(߬sýn‹ÿa{Oý*çü#%ÿ úÿà¶?þ;P\øK^&iõ´ZÌ—(­§(îÄÙÇÐ\Éñ¯ÛA·ûþýDÿ£^6"|[N~cµºc#å<Ó­aOªjn“¦ÙÁ}m¦&ë“t×)n-$Þ¬–¡Þ) ’ (Ü‘«) Áî¿áñ/ý×ÿ±ÿñÚ?áñ/ý×ÿ±ÿñÚ,+œ\Þ#Öbºyés~¶h´ý<+([ï?h…ÔN€Èp¸<å‚“óOˆ^ßR„ǯ%þ‡ñý£SÂQwEq˜ÚHÕQ@d·=›2I u¿ðŒx—þƒëÿ‚ØÿøíðŒx—þƒëÿ‚Øÿøí;Î.ÃÄΡý³yez—pÙÚOqkp«‹—ûEÚD/%vÅ–!Haón5=rx`³]3ÅV×6r4ÆmNâòÚ%IG¶1`xòC;m)¸ã;°=§ü#%ÿ úÿà¶?þ;Gü#%ÿ úÿà¶?þ;E‚á¦Ëq>—i5ØAs$Ò„FET…p ç†ù«UWþÿÐ}ð[ÿ£þÿÐ}ð[ÿ¥Ê;–¨ª¿ðŒx—þƒëÿ‚ØÿøíðŒx—þƒëÿ‚Øÿøí¡rÕWþÿÐ}ð[ÿ£þÿÐ}ð[ÿ£”.Z¢ªÿÂ1â_ú¯þ cÿã´Â1â_ú¯þ cÿã´r…ËTU_øF¿ø-ÿŽÑÿljè>¿ø-ÿŽÑÊ)§üŽ­ÿ`‡ÿÑñVw‰´}2ÿZðô—šu˽ëBí4 å[NÁI#•ÜÇLŒÖ·ü"ZôZ€»:Ú‰!6ÁŽœ¼)`ü63”ïØŸjŸþÿÐ}ð[ÿ§a\ãíõÍV_ÝÃw«YÚ[¬—),z™m¡Mû&òÌ9!Q·É#!ÓæP#¿¾¹½þιÔuGÓZÚü4®°¬"Ú#o:¤ÇÎ ) |Ù Hï«ÚÂ1â_ú¯þ cÿã´Â1â_ú¯þ cÿã´X.ax¾2_±KSÒ-vïëƲÁ.vå„lé—\<a›Œ].üØC­\–›Lžhà–-'÷Q‹dk{xüïš=Ê‘¶U›FÙBAÛÿÂ1â_ú¯þ cÿã´Â1â_ú¯þ cÿã´Xw8-U¸Ô¼Ca5îµ Åk%Åš^[O±Ý3}’E„É媳6\a[ È$Ì|Yw-†› ZÖ ºKI©}ªhâò'l§Ì;O”ã| ¸ÝŒ©Æ+·ÿ„cÄ¿ô_üÇÿÇhÿ„cÄ¿ô_üÇÿÇh°®VðõپЭ®KÞI¿vðD$q¸€uò eJðWœæ´ê¯ü#%ÿ úÿà¶?þ;Gü#%ÿ úÿà¶?þ;JùjŠ«ÿljè>¿ø-ÿŽÑÿljè>¿ø-ÿŽÑÊ-VO‡ÿÕjÿö›ÿEÃW?áñ/ý×ÿ±ÿñÚ‚ÛÂZõ¯Ÿ :Ú)–cs#g)%œ*ž³`ÝŽž§Ú‹ÎY^Yé:Ö½emcc5œú¬âúºâä«Ü*Ç"”hb­Ë0ýÒñýÝ}sTÔ´©'†]ceÔ6BâÎ1h5’Òf¬ 2±(T!Àe˜kªÿ„cÄ¿ô_üÇÿÇhÿ„cÄ¿ô_üÇÿÇiØW8øI5$ûd–§öž¤—:„m¥lü„‹Ïò›dj$há\³|Ìue Óõ}nò{;Hµë9⸽XMÕ´‰v@0Nî»ÖãÜ<¸È%IËeX)ì-|¯YBÑ[늈ÒI)ÙÈ~grìy›»1?Oÿljè>¿ø-ÿŽÑ`¹Éi÷Si6:ÐÔÅ–©qq}`â<ÁlÓÌK`.ð °˜gq`€/ Z÷qÉ7ƒÜëװؼ˜–f“ʇt›–Bº ˆ›‘¼g‘º¯Ýx7^½…b¸×ÑdŽP?³|ÈáÔñ7fP ŸþÿÐ}ð[ÿ¥aÜát“i½¦=¼ö:}”ms^iÇ ¶¡#V¡· ¶0¬X˜[`J÷_½Õ.%´:Š i+ÖAb”DQ]‹ ˜òÎN·z?ü#%ÿ úÿà¶?þ;Gü#%ÿ úÿà¶?þ;N¹ÊËâSkæÚf.$Ôlc±24^eÍ´ŸgèÕ‹Mó(À;±¼]ð†«q©ý³í7ßm–=…å¶’)lÃĬ.ŠŽ2²e—+ÉsnÿÂ1â_ú¯þ cÿã´Â1â_ú¯þ cÿã´¬;–¨ª¿ðŒx—þƒëÿ‚ØÿøíðŒx—þƒëÿ‚Øÿøí¡rçüŽ>ÿ¯™ôQ«šŸü‚¯?ëƒÿè&‹o j±kZn£¨j¢ålæÜ¨,Ö<–:‰¯¡éF§ÿ «Ïúàÿú  žh¢Š²O¥®Ö¯ýsOýWøÃþHߎÿì.Ÿúµz%ÏúÕÿ®iÿ Šãîô¯xÆ‹ÇÕÖ¬ <ÊþXÚ`s’ªÇ¢žÞ•1ÜlåuÍ#áli.—áÏ I©ø¡ïfÓ ÓMÝÀ+,lCI!ó0"æÎFGuÔí~XÛ隌ì,ãòím|C} )¸¨ªFO'µ^3â=¾¹s­Å§x5;˜–®…½î÷Eè ÇÓ>»Tí\møCÕ|=¢kÃ\{W¾Ôõ+A¾Ä’˜—ÌUÈÔÈ>¼cšb,êZ„\É=ÃÅ0Žéàû$Ç(  ÓvrÙ=›¥gxw^+ãÓ->mè¨[pT°eþîpr09=*ÏŠ|$Ú¼’ͧÌ#iŽd†XdU'x2Œƒøu$æ¥ð—„£Ð.Zúîgžì¡DTöDR $ã¯]4W|×MmÙœñ§&Ó’Õ=ûÿ_q»¯ëÖþK+‹É|«Y%LþI“–òÌÇ‚Àˆœ€ÙÆ1ÎFü&°˜´ð4‹æ»Ô·µ•¢Ïj^â$Uf•Må²á×€û$.ÐHÒÕ, ÕÎC=å¼Ör¼ÐI \«´REœ2p%b2:œŒƒ‡/‚t¹ô¹ôÙ®õ -onçQŒÚÄû¶Ü™‡ p‹Ì[~lîùªƒJçÆ:]žýÏŸ«]ÝZ³”ÎÃn'21“·ïŒdœ¯œaÇñ*ßR–Æ=ÆKÉÞôAqiöÒÉå´È¬Ž“Ý ÈgÎñÊ“zïÁúeôån.õ7ÓL·fù`C¾t•%;„~oÍçÊ~ÿ¸À áõš%koZžú)D¶÷¯€…tùPD"ådP“»“ò¦Ð?Œì“IÔõ3gv¶º}Ã[I$Í $‹3DÁYH¸à,A¦øÎËZ6ƒH³»¿"¼Í E¶ÕL]Œ€8Ý£1ïÎÂFARÎ}ËìÛAs¨[Ë ì÷Ð]G2C,¯#9¡šEÃ)àú€j¾á‹}*h§´ÕµtŸ{5Ô†ɼi&Û 1a@i¥ÿVáúð0›¥|D²ƒÀºN¯©É$òMomÜnŠî.š"ò"»² +µ‹UAù. ƺoˆ/aµÓ`»›Ì·2¢˜¢RòÆCH©!áeùKnÈ+¹C2ÕÁúe­®ŸÞ§g%„Q¤SC,^8¼•••£(dò‹FNÞU¹¤e54Ý2×M½šð\j[Ų\+1m+îû£´ÏÀ€(P1@º—Š'ÑüU©Eqiw>“k¦[]Ë,"-¶€½Ç™#î`ì6Ƨü‡'˜ído·dœ®Ó󜓄_Æ¢×QÓäH.àÑã½¹ŽóPdŒÅ"ÁopÒ"¨c.VHºìòÎ n¯sãÿìgQ:Õ•ÞŸn–ökkiu-ª3Ë#\–a'›å€Vãq÷,^»ð~™}9[‹½MôÓ-ÄßÙ¾Xï%INá›óyòŸ¿Án0ÿ„R¼’þ}sZŸR>W“xðBß˵V‡+q(;•¾÷ À£­|AŠãÁÚÿ‡mîî®#Ó&º3C䕳#ÍEw.û\†Oõ~`>Y<‚¥»Êäu Zj6sÛ_Z…®í ôȪïw.pÞdLYqå„~T/Qö˜ÿ»/ýúoð  ¨¨~Ó÷eÿ¿Mþ}¦?îËÿ~›ü(j*´ÇýÙïÓ…iû²ÿߦÿ šŠ‡í1ÿv_ûôßáGÚcþì¿÷é¿Â€&¨Wþ?%ÿ®iüÚ´ÇýÙïÓ…D· ö¹ÙpQGú¦õoj@[¢¡ûLÝ—þý7øQö˜ÿ»/ýúoð¦ÔT?iû²ÿߦÿ >Ó÷eÿ¿Mþ5Úcþì¿÷é¿Â´ÇýÙïÓ…MECö˜ÿ»/ýúoð£í1ÿv_ûôßá@QPý¦?îËÿ~›ü(ûLÝ—þý7øPÔT?iû²ÿߦÿ >Ó÷eÿ¿Mþ\ÿª_úèŸú®3SÿUçýpý×_<è誙2'Xؼ;‘\†§ÿ «Ïúàÿú ©{”žh¢Š¢O¥®Ö¯ýsOýT^ÿU¯ÿØ^OýKsþµëšè"«øx¢^Y%D?ÚÒ3ÿ,㩎ãgcPÝÿÇœÿõÍ¿•k¶ÿŸˆ¿ï±Q]][µ¤Ê³ÄIFñLEº*µÛÏÄ_÷Ø£ívßóñýö)5Úí¿çâ/ûìQö»oùø‹þû5Úí¿çâ/ûìQö»oùø‹þû5Úí¿çâ/ûìQö»oùø‹þû5Úí¿çâ/ûìQö»oùø‹þû5Úí¿çâ/ûìQö»oùø‹þû5Úí¿çâ/ûìQö»oùø‹þû5Úí¿çâ/ûìQö»oùø‹þû5Úí¿çâ/ûìQö»oùø‹þûMþ¶ßþºýªj©-Õ¹’'ˆ€äŸœqòµKö»oùø‹þû€šŠ‡ívßóñýö(û]·üüEÿ}Š`MECö»oùø‹þû}®Ûþ~"ÿ¾ÅMECö»oùø‹þû}®Ûþ~"ÿ¾ÅMECö»oùø‹þû}®Ûþ~"ÿ¾ÅMECö»oùø‹þû}®Ûþ~"ÿ¾ÅMP¯ü~Kÿ\Óùµk¶ÿŸˆ¿ï±Q-Õ¿Úäo>,PñêÔ€·ECö»oùø‹þû}®Ûþ~"ÿ¾Å0&¢¡û]·üüEÿ}Š>×mÿ?ßb€&¢¡û]·üüEÿ}Š>×mÿ?ßb€&¢¡û]·üüEÿ}Š>×mÿ?ßb€&¢¡û]·üüEÿ}Š>×mÿ?ßb€&¢¡û]·üüEÿ}Š>×mÿ?ßb€ ŸõKÿ]ÿBÆjò ¼ÿ®ÿ šëç¸ÑU&˜È˜?xW!©ÿÈ*óþ¸?þ‚j^å#çš(¢¨“ékŸõ«ÿ\ÓÿAÛI#±G[ktÌs$…YÁw=Xá¹<ÈÔëŸõ«ÿ\ÓÿAÈ£2¾ÐÁx'' gúVe´eôÿÈÿÅRBFR¬ ƒÁGçÿ¨¼˜ÿçæ/É¿øš<˜ÿçæ/É¿øš›ûF_OüˆÿüUÚ2úäGÿâª&?ùù‹òoþ&&?ùù‹òoþ&@›ûF_OüˆÿüUÚ2úäGÿâª&?ùù‹òoþ&&?ùù‹òoþ&@›ûF_OüˆÿüUÚ2úäGÿâª&?ùù‹òoþ&&?ùù‹òoþ&@›ûF_OüˆÿüUÚ2úäGÿâª&?ùù‹òoþ&©é·Qj±$¶¬Lo+ĬÃÚå3ô$g×j—öŒ¾Ÿùÿøª?´eôÿÈÿÅT>LóóäßüMLóóäßüM7öŒ¾Ÿùÿøª?´eôÿÈÿÅT>LóóäßüMLóóäßüM7öŒ¾Ÿùÿøª?´eôÿÈÿÅT>LóóäßüMLóóäßüM7öŒ¾Ÿùÿøª?´eôÿÈÿÅT>LóóäßüMLóóäßüM7öŒ¾Ÿùÿøª?´eôÿÈÿÅT>LóóäßüMQ·½‚îk¸àbÿf›ÈvÁ°UcŒó›P~´j™Ô$$ ‘ÈýãñÿRÿhËéÿ‘ÿŠªtQp.hËéÿ‘ÿŠ£ûF_OüˆÿüUS¢‹sûF_OüˆÿüUÚ2úäGÿâª\ ŸÚ2úäGÿâ¨þÑ—Óÿ"?ÿTè¢à\þÑ—Óÿ"?ÿGöŒ¾Ÿùÿøª§EçöŒ¾Ÿùÿøª?´eôÿÈÿÅU:(¸?´eôÿÈÿÅRhI¸¶Ñ“Á>cÿñURŠ.Ïí}?ò#ÿñThËéÿ‘ÿŠªtQp.hËéÿ‘ÿŠ£ûF_OüˆÿüUS¢‹sûF_OüˆÿüUÚ2úäGÿâª\ ŸÚ2úäGÿâ¨þÑ—Óÿ"?ÿTè¢à\þÑ—Óÿ"?ÿGöŒ¾Ÿùÿøª§EçöŒ¾Ÿùÿøª?´eôÿÈÿÅU:(¸?´eÈ%ÁÜŒødêò ¼ÿ®ÿ šµUu?ù^×ÿÐM|óEV„ŸK\ÿ­_úæŸú¢Ûýk×7ÿÐM?ëWþ¹§þ‚(¶ÿZßõÍÿôYõ(†©jÚ‡ö^™5ç•æy{F mU˹Ûj.w3`íPN1Wj–­%ô:dÒi±ù—co–žZ¾~aŸ•¤Œ3ücñèA™ö¾%„éñ]^g3³y ¥I%ø‘˜lŒ8'€NHÈKÿpsòÙŸÀVï'šc;#~î;ý=f‰PÃg÷jPÿGR àÌ6ô ÐF¦¥â½>ÊÂîâØ½ë[Ú=Ðò#v‰‚Æd fU(„®ÉÎNFt«hºDº¬†hm"呦‚HÝUs¸”e Øöçµd ²[^éÑ^¢éwðyW1ý˜ sä,9”ª Úˆq呜ã€.êEƱáöÓ5 Ä-3 ¸’Ú6‰dŒH å€dÍÜŸjÂÔ¼c¨Úxwí§Ãi©E%ÄWVrÉçY-e¸A½p!b'˜Ž£ŽÒ¸íCÀ0Ý}­mµ˜a¹RY'y.˜m瀾çrrVdü"¿“à_ùØÿ×Ì¿ú=ëZ²| ÿ {úù—ÿG½ jçí|Eu#5ÅÕ„0é¦öK$ž;’òoTºlVp Ä\ŒdŽ‚¹û_ÝFÍou Úh½’õ ŽØ¤›ÌÆeûÎU\ƒÂ©%W'Êx›H‘%qráQw«4(™r²¿¾²åîÉuÇÞ\âm.$‰¥’æ0ë½·Ù̦Éåt¹VÃ>ÐB“œk’Ñü/$(Ö#ÃvÖð´Þ9®ôËGR€«fãeÁy[ä\Ú7ÅOtæðS^{‹kɼÓj6‚íÂïwýËHÇaF™Â¦s´î4FÓÅV‚:„ž\«ssyPÈéqÏ$jò0F¤!;˜ò±è©xªÊÆ9š(înL3ņ;yJ|Ó$MµÂvRçäR[*Fsø Þ{—ÞÆf•¥óïOYÙç–Qån8FsX8;Tíàƒ¢þº0\Y¥ü"Í®Mä m‰‘'óÄà³oÃ&üü¡Tí nÈÉ4CPÕVÏEmB8^VeA. M$ŽBƇpÊfUù‡ËžqƒXW>-ºS¤máŒÝü—1>\Ã*ÝÛÛȆÚeg%AuÖÕ4C­ZX[ß]>Ø'Iî»<"fUl`«îP«ŽN ­dGâÉ¡2ÛÇsçÇ »æ)™­¦a½Ü“—·rO¬¤öä­¬?¯×?ì''þ€•¹X~ÿ_®ØNOý(o øeõßèÜëúÌrË$ªR( +(ÆPžŠ;ÖÒè©¢ÛËÞÞ^3²7™vá™xnqéý*O …Ðt}9ç†f¤bãxwgÇÝí»øíV/î’á ›‰_•rx½@õªv9Xµÿ´ë7ºU½·™skr‘ÉûÎ#ndc—ï•Uä±SÐ*ôñ6‘"Jâå¢ïVh$Q2ä(1e| eËÝ’ë¼¹dZÙµ›ÝVÞç˹º¹I$ýߎ41°ÏÍ÷ +pT±ê Å·øye„–xÓ„B8ãˆÇ¦¢¼~ÐÙ&\˜×pe¸ÉR³ Í¦ñ^’¾PßxòÉ¿Ça;Ê»6îßBÉþ±ÌC)OÔu¸­?²'Ž{cey; .ÆÁ·–]᳌~ìsÓúÖ,ÔôÍRÆM-ô»`°]yïœgk}ª±,ŠÙ""wn‡ *÷„­o47FûDÉie‡< ¼uèg8##§4dx›K0<†K•ee_!ìæYØHÛ]ìW9 GÈßÝ8†ÏĶÒ]_¥Ü©pψ|Äda·Šfy}À¦B ` eAäŒÀþ¿šðj“jVÇU£0È–Œ°E•@hÌ…‰Åļ‡ÃÇp|//™¨]‹»c~Ëç³Ú–‚TòR6ŽH‹üë”f_˜ÜFH,jÂþFš¹E ´‹‹i là»"‚G=qÊ­Vf…¤¾bð=Ïœ^C&Ô ±D0H‘™Š >]ÄN00 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ «©ÿÈ*óþ¸?þ‚jÕUÔÿäyÿ\ÿA4óÍQZ}-sþµëšè"ªÏöŸ"Ai4pÎÊUd’=ár0NÜŒðO~¾½*ÕÏúÕÿ®iÿ Š†³(ÃþÎñý à¼ñtgx‡þ†?ð^?øºÜ¢‹‡ýâú ÿÁxÿâèþÎñý à¼ñu¹Eû;Ä?ô0Aÿ‚ñÿÅÑýâú ÿÁxÿâërŠ.öwˆè`ƒÿãÿ‹£û;Ä?ô0Aÿ‚ñÿÅÖå\ ?ìïÿÐÁþ ÇÿWtk ´m.+hî#’xÙÝehˆ]Ìå†Wvp éžÝE_¢‹‡ýâú ÿÁxÿâèþÎñý à¼ñu¹Eû;Ä?ô0Aÿ‚ñÿÅÑýâú ÿÁxÿâërŠ.öwˆè`ƒÿãÿ‹£û;Ä?ô0Aÿ‚ñÿÅÖå\ ?ìïÿÐÁþ ÇÿGöwˆè`ƒÿãÿ‹­Ê(¸ÙÞ!ÿ¡‚üþ.­hÚdÚdW^}ÒÜËspgwX¼±’ª1ŒŸîçñ­*(¸Q@Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ªêò ¼ÿ®ÿ šµUu?ù^×ÿÐM|óEV„K\ÿ­_úæŸú¨jkŸõ«ÿ\ÓÿA fPQE (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¬M-¿ƒõ¹à‘âš; Ý$F*ÊÂ6 ‚:jyü3¥Eq$j5<+Öo{úí@ +/þÍ/ÓRÿÁÍïÿ£þÍ/ÓRÿÁÍïÿ  J+/þÍ/ÓRÿÁÍïÿ£þÍ/ÓRÿÁÍïÿ  J+/þÍ/ÓRÿÁÍïÿ£þÍ/ÓRÿÁÍïÿ  J+/þÍ/ÓRÿÁÍïÿ£þÍ/ÓRÿÁÍïÿ  J+ø{u=Õ–µçO<«©"D&å1§— Él ž¤õ®êâvK™QR ªäå/Lý(°h©¾Ó'÷bÿ¿Kþ}¦OîÅÿ~—ü( 7Údþì_÷é´ÉýØ¿ïÒÿ…CEMö™?»ýú_ð¦ð³¤íÄάë72‚ c .~£Ö ¢¦ûLŸÝ‹þý/øQö™?»ýú_ð d5WSÿUçýpýÕK[Éî¾ÃÐU½OþAWŸõÁÿô@žh¢ŠÐ“ékŸõ«ÿ\ÓÿA Msþµëšè"¡¬Ê (¢…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@¾0ÿ‘'_ÿ°uÇþ‹jè.ÿãòúèßιÿÈ“¯ÿØ:ãÿEµdÝ|Xð‹^NSP.†F*Áxaž¼œÑmvWÿ _Âóúßÿ?ákøOþ[òãE˜\èüAö¯ìi>Éçnó"ó|ŒùžO˜¾nÜ|Û¼½øÛógîóŠâõ¯²ý˜ÂýöO2ßÌû>>Éö¯¶[ù;¶q»fí¿6Ý»¿‚´ákøOþ[òãGü- ÿÏë~CüiÙÑè_eû ùwŸæµý£Ÿ3nÆÜcåÛ·gɶ´ë‰ÿ…¯á?ùýoÈðµü'ÿ?­ùñ¥f;j+‰ÿ…¯á?ùýoÈðµü'ÿ?­ùñ¢Ì. ãÇ]ÿ°¼Ÿú**ï.ÿãòúèßμÿátñ\éZÔðH²Dú¬Œ¬§ **é/ÿ ¬¯øQÿ ‡¿è+ëþ¹EaÿÂcáïú Áúÿ…ð˜ø{þ‚°~¿áJÌNÿ‘»\ÿ®V¿ÉëKSÿUçýpýÖ.ƒ}k¨ø—Z¹³&…¢¶Ôñ$Ímjò ¼ÿ®ÿ š}@ùæŠ(«$úZçýjÿ×4ÿÐEC\µÇį´ß,— ªîœ3úT_ð²DĈP‘=„€HXCHÈž»ß³tW×öþQçôí{îÂ%, ¤nª»«êyúéêúõS+2Æ@çžû5H‘"EŠ)f€Ë/¿8yˆbF±\²pÁ¼|¾­½½c¨–"EŠ)^'è¯TF7<¿ ¼Ò`”sÏýÚ_qø’¥Gzè~@ÙƒŠ¦H‘"EнJ)X·î…{ïyøOýÙ’ 2ÆX:YvÚ±ì?»^ ¢HÔU¯{Zá)R¤H±7"›Íg’©ÛIDATøâ8,ëgž]¿í¿À’ € æZ:Ù±½¿ Œ¢ht´¶§N‘"EŠ{/ÚÚ|Çq:Ú½öŸ pìheÐ9ç|uÙ[ÞrÒÉGô÷WvíªUkA ö´ª)R¤H‘boG&ÃüœßÕUêèÈß}×c¸ã =³Ëýý£›_Ø54”º&)R¤H±aãÎ- o¸æ¥¦ÚðÞÏïžS©D•JÄÃÀôÌ.µ—kµZÏs^aeS¤H‘"ÅÞŠ­ÛÞpÍÎy»™ß-ç¶C@7†ÿ"€ÖF0tóÚ¸óÚ+®éûÈ9½í³ D­ÖðF(8®32¦ã»R¤H‘YDTfIDATbŸBç]ñ®3¯„ð§MŠG3IBžÚï:óø›þë òÅoÚ“#â­äAì£pÉ1C¯ŽÎ)R¤H‘b/…ª‡&2ÌóØÖaÑæ—I !¦LKÀ©Gl4ÔÒˆ0D’@Ì\r€£bZÄ „Ú€¶k¦¹®FðÈ3ƒý\I!Ý ä;hO—ñÙkx×)R¤H‘â•çÚHiT(õ¾‹¿ÿ}áç ARjPø›oÿ~õÙsUÈ#¡‘Ò0qЩÄti§§T‡nÚY{bÛèÎPG‘äQÔ7"‚M¼½ƒ->¤½»Ç5ï4EŠ)R¼ºP‘lD„D oÛ´Θ×û³~X‰*ÃhIDAT6#H€]}½Ô÷¥ @+m h5inÀaŒ1Ác_ vê°œ£Û²Âu<ŸñHð( yrüÙgúÿøàæJ%²IˆýK°Åý÷ßýýï_|öÙoÿÕõ?ì'¿z¿_]ÿ³_]ÿ³WUÁxÕ-ÿóýï_üêåÏÃàì³ß~ç·Mzøj(™Œü’lørpýõ?»þúŸ½ÚIvaœ}öÛï¸ã¶=˜Û-·üÏ÷¿ñnD~ù†š¦@¾6¯ÒÞ\ì_ô7å[$&“¼R5ÌÔù Œ1!˜`„ ÂŒ Á „VF)!#É-+ܶi뇮¾FÔû‹é"É•Ê(%44Cí¸IDATj2Æ#0B#B @™Ò(-ûÃ*Ua(‚:çQÄy„Q†AÀë!|ÝHgwvÉÒE€ d€ôÝï|ýÃy”K¥[wsߎÍs{{¹Ò¯¹ Œ‚Û2nUȇZóÈÚ?uÎç&F›æÒLð³Ÿ_…Œ[2y¾%ÛÝ–²mÇ8ò°Ãó·&dËáËTòE#'mø¢ _RoÛC­Y»öÁsšÁ9^ÊMíF’ÝÆŽ[à¨ÃEÄí^n?ÿùPœÙ³HF~% 5Ö‚±½YÛ2î]kîY»ösv÷ÝiA\ðª¢uÞ[RhmÂÕÝÈpúÈ Y7IDATq±Ÿ¹¬i0å[$&“Lu=tÿK2þ´Ö@L³æ‡q Â[?ÿ¹ÞünÛ´õŒy½W¾ç}ÿõ¯b:ÙúùÏ€BFqc¤J0È€1!°Œ‚0xžk@34ë€e8—gûØ!„à‘ýEQ$x$(!ŒÓ`†üãꇺÿ;ßü×r©$9å´·»€~Õzý?ô¡Ox£ø»ßù |á³ÿšV›æÒÌbO“ínKYÿìÐÝ=Ë€a·¾L%_4rÒ†/š¤µÝtZ|§iÀhøà‡>‘AÈŒ5Ü$»gšf×䳪’IDAT`^¾¸—“BhæIlä—o¨ä;úlBùæCüÇ—óî´ÊBˆÒÖÁ¥I¡¯îF†ÓGŽ‹ýK•5)f¢|‹Äd’¤bÉ$»güI­Ñ|s€AÍ€R€°1@À–óΛó£A“Tb:ÙrÞycyi J@ÓF Â¶Õ cL)¡“Æ?#ü?p÷–ðžçFÞl’dÀÍ eýj>в½º»èìYÃ^‰RB(%”J)Ŭ}Ì[h02J$A’ BÉ}«ï\¾|ÙòåËî[}'¡„P²|ù²Ç×ýéò˸|ù²›Vþjp¨ÿ¦•¿Z¾|Ùå—ÿ°Ra„åË—½íÔ”IDATݧ‚–/_foömï>Åæÿ&^š¨ ¡äÚk¯¾öÚ«[ÒÚŸM~Ãÿ^×"=™íD)VD¬ÿ4‚®ºê?ÞñöwûY0NnݾõÚk¯N ³¶Òÿí²]¾|ÙÃkˆ3mxùå?ܱs[22$m8•Î;vn‹Õ¨V+”RJéêÕw¹|ٙ˗­^} g& bÏl”ҕ+o8sù²ùöW~qíÕëÖ='±^qù[’ìܹý×^}æòeW$thÁ¤*µä9•hJéÕ ³·È²‡6\­VÎ\¾ì×^m3¿ýöUÿòí¯œ¹|ÙÊ•7$›&·X«‰áø!ž¹|ÙÚ`Ê‘ZIDATµƹ­[÷Ø—ÿÐf²sçöddh±­=´ñW®¼ÁFžÔ€S=ĸ¾ãÝoI>DJ©-!«WßuyÓžö̤áÛo_õíoeyÂ8±ÎVúòåË6oÞØ"4YìcU§’’,ö-‹‹ýD‹ÅÅ^ghã'-6i±-0©ÅÆ“ªÚ"±%IK cÅ-ÿ-_¾,¾©•+oX¹ò†õ’æM‚PÊ(iíßF= ´#¨ø·é¼ÏØLb:ÙtÞg’À¡ 4‰J1Æ F!m ¥˜RbŽÛ±½úئmؼúégïz|Ýï}äæ?®ùŸ5w]×m?¿ý¦+Wýêòg­€BIDAT•¿¹úB0¥˜L &„®Zu#‹% $Y%?ôЗ^òË~tÕŠŸüüÒK¾±öÁ5„PøòEŸç_-ÿÅÏo¼rÅeÿØYo=õí¿øùM«VÝø‹ÿ¾Šbò¢nYuŸ½aGC¾í¦» Ié-—&U†Š0Æ ÐDJ±ÉO=åôk®úÕªU7Þ²ò×Ié6Û‰ ØÃó?ý…|ï'W®¸ì¾»ï˜TЦMà˜£3!:îpÅU?¹îºkn¸nU)_èß±bg›‘ ÿýg¾ðƒïýä›ßøÒºÇ!„>þç?}ù¢Ï÷—Çßú›»Ztàp2HÚp*¯º2Y)×tIDAT©Æ6Jн÷þáÒK.þÁ÷²â'?¿ô’‹ï»ûvÒ(Xc¿[n½7a:ÚÜxã/¯\ñãk®ºþ¼s?wÝu×lÚð,Ãc_å {÷{ï™g1€d’«®¼¬E‡q=¼æÒK.¾ìGWZ•Ö>¸ÚžoÉs*Ñ›^Ø0…Ù·Q‚–ž¼ 6<õ%hýsOÀ)'œl;þû.ýÂçþéš+yåŠß}Ço­bÓçkåh3i¸ùÿyݟ׊ü‘/_tþqÇı/™ Œ7T|¾ùlŸÎD¶<Ä{ï¾Ý¶¸oÜ4¦ü-«Æ"ÓÆ¶˜À‚ÞýÞ{æY >“¼‡Ô4ΊdåFIDAT?¾ëŽß<æÝsï.¹äâË~tåóŒ’B“ëÛ±`4½”ØbßøÆ??þØZLðŸÿüÈEû¡þ¾d&ßW2k±+~lMqeÂbV «³µØ%SX šŸk-ª¶Hœ4É©§œ~ÍUׯZuãÍ+o Œ]t¾­W¬øñÇ>öN;õŒ_üüÆU«n¼ö¿¯l¹Á–^J1!„ØžXàx¢–ô¸ßózã¬Î˜×ÛrUˆÃC(Á”J(!$îGA9Œ@È®m@©àþžY¹ník£µVJ+¥”ÖJªøPk­µf.CÆ €ÐX‹ˆãŽ[üÛÛVÀ§öIDAT¢y ‰çÀª[o:áÄ“ì¥ø$”sm$ëÀÍ«nüÜy_|ÑÄ«ÝD˜úÞTƒØ¨ïMª ¦äSŸü´Š0gòÔÅbÉJ¿öºk>öÑsÈÔ[8ò(¸óÎßžzêéíØþÌéKe”$»ºº ^­|üœÏh!1!(QhÜ)nߊ»çî;Ž~ó1«Wß Ç½ùxÌè;Ï|Ÿ0‰٬ÓgbunUƒ’»ïº9à’qàÎ;wê©g`6eëÍ3ÈOÿóß »½ËÚó?Wüø¬ÿsvlö… ö'Äßn0¦Ã¹ŸÑ‘Ätœ)à··þÍ[dƒqºƒIDATUZuëM',9 7ßÕ8Ï©DïØ¶¹av‡N”µøàÅÇ·dÕoWžpÒÉ¿½õ7Ç·dá‚ýI³—òEÒ=–~±ÜÆ?D6iøˆ£Ž€{îºãè£Y}ß]pÜÑÇc‡¾ó=ïÓBB˜’fbŸÎD5&{ˆ§cJvlo*Ïl³vó!únü.ØŸx¬åMZ–Jù"évšÆù€=ù_?_ñÿÿòšK¾ûo‹æ-"£'…vuu5T=çÓZ(LðÌŠý‘0I±'ï<ó½Z(_áNŸ‰5ÅD5î¾ë÷ ‹yl&›JŠëÐI“‹%’u`òƵEóZéPÎlü›WÝø¹óþq[/BëIDATªú 1ñݶy@ìäx)0Æ”aøÛU+cïšÍ_ÿñöw6HRpWüˆ4ûQ0Æ”¡dËštðÒ¡¡‡7 >¸u¸FAÖƒ°òzÀƒ 9¹yôésOqèüX°x÷»ß{ã7_¹¬Ys 8€û\ ‰¾zÇ{œ¦!ŒT/å¼ø|R"›ºjcŒLª Ë8Ó'l•.ó'—>ÕáT‚î¸ãw0§w.s(&8yøÉOþ-hý¡OœõÿxáÒ¥§”J婤L ß|ëŸ?ÿŸV®üµ=éf€ 78}&Vç¤K–¾¥ä—­ Ïx×É6INpÛIDAT²F3îTvKúãÐ,'»úvºm>œ}Ö‡u$lžnë‚@Ÿøä§›:\´dé)%¿Ü!~¬6íý®©©7¦’=?•è?4ÍN›TÖYÿÏ?þßÞqûo׬¹ç’ù!¦$©$kÖã3ÌmRËL ·ût&ª1ÙC4,C%%kaÆÆÉu&,Ú”Œ ;cÆi¼Ô6®€õO?õ—o>–0ãÞöÉO~´™ºØO.ņ›û{Òµe’µZlúL¬)&ª±fͽ»m±–ðTIb[M¨aöLX~,¾Ô,7¹8×ý‰ly²CT+-0ú3·ÝÓÉsçb2»IDATœ³èŠ+ I*—ñ t³öv(ƒfn7…` ”¢ÆH@äl_Gz^§ÿ\ÿèÀPXxƒNÂ0àQÈ£ˆËã[xÚ©‡1‡6ºôŒAÞüæcn¼ñ† ϯ?ò˜£“÷³dÉÉ÷Þ{8ŒÀqÇœ “„‘4Ö„g?M„™„'f5©2Ó$y©šLu8© ;¶ßwßÝ_øÜàyNË¡çu}鯾íôw|ösŸZsß=—~ï‡8ñIø¢Ê¨H¶ÜìK½#«swWBÕ÷\ú½Úlo»é®8¾–Êu¦äã–KçžûÙo¼áCŸ8 Îû»Ï/9æd7ë&ãL̪§»óK}õmg„móIDAT¼ã³ÿ©5«ïn1$ʘMk5Ÿ˜ç¤¢‡w­nš=“a™Ì$²?ì0øöw¿û/8 “óè Ï$·INN>Ä©,<}&Ö 8éCìK ;þ9lšÃ–3S…->ÿwÿôÀÃkþõ‡ßý‹£Ž>êÍoN{7ãveºÿù¢¯qÆ;þîï?µzõ=—~ïß’{Q)I‹M=“L¬Åºº[Õx9K†w#ÉË 2ld { 5ÒZcBçÝ~kL'Ï|üöïW®€&©üèÔ·c”²£±ÀqˆÆB %4{æ‘ë8ŽÃ\ÇqÇqY¶;ÏzürOÛ°fßIDAT‰‡ö<§¤µ¬a†A…<â\žpâ¢O|ôäyûu¸Ìqæ:Ôu™ã8'Ÿ|Ê’Oúͪ›êµšã²›o¹ñŽ;ç¸ì}ï; 6<¿þ©§Ÿ€·ŸþÎq4›h"ki.›>BKø¤“N‰Ã-¿ä¥I•q\öÓ?ù銟LL;s‰-‡qL+è-'6QmNÝoμ\17ñðº_þ÷ƒ\süÒ@)ÅkÜqÙûÞ÷~Ú¾ckR™qçÿÝàƒü<úØZû8îྉªN“‰ÕyœRñ*³Ý>¸õ[ßûÚ“ïœÓá8ì§?ýÉOúÇaö7&ÅaN¢ˆÿú××ê|CIDATÀÏVüò¶›îúëÓ—÷Λ“+øÉqñ™ë®ûï\sü’1ZÄ=Ö§uBž“ŠÞ¸1av‡M*«\.}ë[—À—þñ«~Ö÷²nKæqx&¹=Äí['ÍÄÞEëCtØÍ7ßxÿý÷M4ï4™4â5&}ˆ›6>+ï:Ôuh,ÅÆ™ÛCסñ½ìؾ%yuÒ°E±X:ûƒ<ñÄ“~vÍŠz¥Ò"ô—×ýü®>aÉ  ¥ŠªáL¤<ýÔº‰szËÍÿûÀý÷N¼—i2±›¨Æ -ö¢ªNL2•Ý^Táiâ'Žë8u]æ:Ìqg\—@(µTZ*¸ðÞ?ÄtòäéÊ IDATG?©4²¿'?úI{ò¶M[/¼÷RT:”œFåï¸óQ0B®K#• rèp‹5ÈÐÓ ÞQ‹g]sã7îàŒÀÁ‡ÏY²ô Óßzèìž Ðpl¬‡ã–KßúÖw~sÓÊe§çžû™Ó–¡"õÖ·žþ­ÿ÷’OîðÿýàÇ‹–/æÆ ‘h=p'4wL¡%|þù_¸ûî;Ïx×ÉëÖ=Û’CòҤʸ®Cá!ka¡Ü6Q‡™HœT»ì_o¾õÆùö¥GvL®ÍodýèýæÎÏøžë:-‡K—.}Ï{Þe-¹ìÄÓ1F®ëœ}ößlß¶íý^þµ¯ ð;”IDAT}³E±óÿî‹Ö%ÿÊ—/^rÌ)ÅÎÂÒEKÿã²+oºé‚/þýïÿÀG?ò)-uÆ÷.¸àB)ä“O¯›³è­ï®Eç‰j,]²ä?.ûéÕW_yÿƒ«ß÷Þ³æ÷.ÐBe|ÂVÃB9ç®iÇŸIšq`xÿYxÿû?pÐAi2áÓré’¥ïyïxS8,)î­§½õ[ßünó±þûâE‡ç þĆIE¯YÝ4{Öu6©,8ö˜càŇ•»ŠoܧeRÐLr;û͇øÕo´d2ö/úú’cßRì(,]¸ä?.ûéÊ›V^ðåÏ¿ÿ¬|ô#Ÿ²ÖD³£IDAT¾àŸ¾Ôxˆ O›¨Iã!~ëÒ£?&×–¨Æ$QªD t]—/Õã¢ÛüþHÈoL¼ÚŽ‘Éº^xÑ;ÞqÆ­«nÞ´åù¤ÐÉŠ=›FJ¢Ø}É1o)v–.JX¬QìUÆ÷.¸ i±E§µd­Å>;I±_:#‹½¨A&&™Ên“*Ûº.›ôZ '»U@0Ú\|l£5o݇>Úò°Ö}裇þìj¸øØ“¥6ª™ÖuXsæR"»ãÖ?}ñãmÅ¢cL,MbîÒ˜¨xps#2%u­RïÛ1¥öB®àÛßÊHm×¶~è™Óéç³ðÜ“›`p%ùIDATÑâyS…_4BK˜‡Ñ–ç·Ç‡I´\š¨ î€rW&`†“‡û0n»é®¶bnt¸Ú5»#_ð' êÛ>0:\]pà\ÛœÚrgXj/Êy;à‡Ñ`ßp½tö”­cÅâ3=å¶RÞŠ«×ÂÚhmt¸ÚVÌ•;‹6“ˆ‹]C¥Ž‚—qã;šJç15:ÆÔ¨×‘Ñz5h+eÛbCF[6l€E‡Ì€çžØÅnÿùõKùNzÿ‡—/9ñ¤Ë/ÿ©ë96‚ܰ|óLœUR‡q•‘Ú®­ýÐ3wì±&óèŸTôèPet¨ºà „Ù'È!ä Ïn\_î%IDATÝï€Þ¸:™yîÛ>ð¢¹ñ0Ü5\¯³Ê}Û“™Äg:gMxˆCÕ¤µ#.v•: ^Ö¥ï¿ó!–r£CÕ®ÞÄCœ ÆØC,æÊBIßöÁÑáê‚çÄíû<Œ¶<¿-Þž{ò…8Gì_ [cÆáäɈ‹Í¶wö”y%…ÆKímã‹ýäRÆû\Âbõf±/$Šýp©£Í˸±&û°`|±oOûV5êµpd°ò¢›Þ “Lj«ãO§Å¤ñ Â8Äíâº~ÿ®÷4¶cŒMŒÅ›Ú€QRk{zã¶Ónº>æˆÑá‘K.½s÷1;¤IDATÎWÿù‚O´w´[9–2 9r«9ø+VÈ6½58Ac¦AcgH"æ¥M¬~Ãb¿y½pÛMw-þ‹ý÷´.3Åk£óÿyùšÕ«¿òå¯/\´`íÚ‡—Ÿù®³Ïúðg?sÞܳ_=¡{\ôk†Ý}ˆ/iöê ûÍ› ‹-ÚÓº¼*ˆ¿úm{’­¥27Ÿ±|άnÈ`ÙŒÿÕBÀ–í;ÿêÖÿ…¦[1Ø7ðï® € 0‡]{"v`€u^J²[ÃAãý'›6Å8LlGÞû1•ίH­ó‘8ï¾ü• ï½ïî|ø#?üÁ^tDÖÏ8¯¾¡ö è×ìlüoIDAT/é¦Ò÷&kn}c ^Å$“ì?;vE=]Žr†Óò‘MZ¢A ˜Äý(Œ+±9Þ b^Ó†âV0Ô9€Ì8¦A;ûîÇNƒ}ý\³Ø+±ÌÃkƒÕÙ¼O¹\üØÇ>øž3—ôŒ U:»Kù‚_î(¼YïÅ¢_3 ô÷?´zÌ`4üx컜2Ð?ðÐêÇ€ÎlÌçëq’=BÖ0Pÿì³?¾tÇ®ÒKÍPª¡úg¿Hµ\aŒ­ëÕV,ÓtÇWÇ-=bO«ð’ñÚèL éê.wu·N+yc‹~Íðz,x{û¦Å–Ÿ~äÿ³?¾4>ƒš§ª?IDATƒaZ× þÙ/.?ýÈ$q´›û̻ۺeË”ISìPJim”ÒRjcŒ’ !dWFÐJkmÀcŒÖÚèø”TR*cÀh£ (¥Œ…6JkcgB%WS@a„ŒÑÚ2 B€©—uzf—K¥?>EНÞvò!pòU»‘0äÎæPÖGŽ‹3YêûØóˆçQÏ¥ŽÛæ:Ù¬ãzŒ±±±Ôq­×ïf+Ø8Zëˆói¹$‘f²sS’Çô´’¬´Ñøƒ)sA­ž&Æõséè@ÁiïIDATm`çÕÊÃ*ï’žö¶ö‚—ó!Fi¥ kÄ¥ e© `B‡0JFÇóœ|ó³YÏó EŠ{=ö^FQJ¬TÂZ))ŠZ]…uªââu*9‰ÖzFfDØÆÀ'Æå‚b ‰‘ ÛŽ)©¸ÐA¤ëB×"=™¾HW$H'+X6¢žÉøÄoÓ~<Ÿåó$—Ç®Çò¾›ÍÒ¬[ðœlÖcŒÒÊc40ö7±ÌE<&øô¸z}2R‰‡ŒÏØR3vA&å›1þˆfÜùašC‚ñ¬YÅY³Š±¬Z­Ö×W©m¯Ôõ@•)áSSôðÜ®¶Å¥x›IDAT³K~»¾ 1 5p¨spY­W+µPT!Ø®* G¸2SD˜BX!LÇÍf¼¬›ÍÐ\Îñý¤H‘bOc1ŠT²VFFxÈ9HVkQ­J´ ‚CPC¼Îdè!劰d‚ƒ}lrÄxXQ#A Ф‘ ¥*àªé WÛ¸áf8Ò!r„›U^^ºYíù¬PÄù¸žShóÚrÄ˺¯Ãw}ßsóŒyc¾…1@DQdíõþ·ÃŒ÷K`jïa"©Ì”KÆy hšðTþG#ÜyÞXÇŽÖjI;ëÀÔMdÆ“Ëå2™Œv뀔r``tõ®úí/ìGŠIDATTaÈ”ÈS]ÎâYEwnO±«ìg}–-9íÈȃA@4€Ò µà¢RåÕ‘Ña=Ò[¹RˆDšÔ"m¨ƒ×õýlÞoïðóy/õoR¤xÍðê2JµZï¨×ªa„X+Íë²^3õ€È ƒu¸Q«<Ãmä(8 HÈDÀ8DDš0"D¤B®ú¹®r=Âõ`¨*ŠT “nNg ¸P†\›t3¬­˜-I.K3™RÖkË{~ŽÁ˜_Ñ Æœ@ë0&¥ -T(žÈã0ñjŒÉ+ëÉâ@3jl“§ëýÆÉzHÆ„)('!aFi§Ï$ cÀ£”ÂXƒ›"çWIDAT“Tìš ¸££ØÞ>6G])54TydWý¡§àÃŽmT—²¸Ó'½]…r! v‚Š2 ÁPŒÊERn/.¶”  ‘ª×øÐhÿ® Á6ôB k2BL3dsN.ç—ò=]ùöö¶´{&EŠW¯£T«Õz]Vy}¤ÊkuQ«â(Ì;(‘|?—2$ÇŸÑ4«Áˆ8¡Â!ŠL$—Q¤ê\WB=d8Í*¿Í´•¥×å²´PÈ”‹ÙrÑÍe{]'›u=ñJ†cD­Å|$ƒ³Læv´0Ád0ÙÇ{k=5IÝ$û×LR}'ÉÆÆßHv­IDATœ"«Öl“šLÓx5™3ž!¦õE¦o³VÒZ#„¤”vv£‰gG‚i±¿1¦Pð ?¶­Rj`°úl½ºiHÖ¶ùHµ{0«Èö{Ú}ÇgÀn@ƒ2  ‚ærrA&‹³¾ßÛë7ÜM­A(D¥RéÞ±ýÉÑþ?á4á$+¼É·yÅbOO±³3ï¼A×tJ‘â5ÃK`cÌÈHe×®Z½Z ªuU¯CR%2(*eH‡«Û³¬Xd~' ¤@kDxaÕÐp7‡H(!E¤‚Pj 0ý’8`Y™i×meÒÞNK%V,’¬O=¯§-ÛÖæbbŒÖ¶²;ŽY†ÐHcÑ?IDAT:¨ÕÆê¦qäÑâŽLô!Æ“j­‹G-•r²¢)!á$ ˜Zc’8“ÓÉf F™&á‹6OMO0“š1 ÛómTbÌ™” ìÚ¢–Z´6âgšp@¡˜)3í`´ª<Þ<üLÈd%c„UÉÑ‹z˽Y¿Í! PÆhPä˜bŒ£AkŒu®æÛò æfÁhP ¸µþá-[ž¨îx@m4n•ä¢LÁëêž»pö‚ù®»÷ö2¦H±wbòw†s¾k×È®¾ZP­S£‰Ž#\yH–™YÜæ–zŸÀ €sCµ‹Ëˆâˆ#Á±ˆ Ò¸[IDATt$e¤ê¡T_]ï¬É*ɅټηC©Ï/Ѷ¢v½\[¶«õ}jÙÂ~ÉšF…#êõLZûÄÌ“v•71i ‰*»Yû7”&º‰Ï£ØEˆ©bæHÄtt2%7L#“Ð@’&Tý/êmL<3c§H"kL¢ÆØ­”ÖFk¥Ævî¼m³£Ý”nz3cŽŒç‘9srÆ4v—©×ëë¶×ï²N¢ÁÒž™•' ºs½9/Ï€"0Ê4'ýh@Ê ÐŒ2HjP3èn§=¥( RB8<:Ú·yÓŸŸÿ“¸ªÙv]în›3ë€ýgÏžý†ZJ2EŠŽo`IDATW êõúöí;wÖÛ#Q­B„ð,xÐ[ôzÛ³ímNÆa@hQaÁ  çšsÃC$8Š8 "!¹ªº¯®wTÕ®ˆTX.ô»e¾Dz;œö²_.–‹þÜ¢‹@7>TMü­ŒŽêæÚ ­»Iòdla‘üœo„›žÇ0¶L€ñع$KØóSFÌãòŒ 4¡«c44œ"ZòFšù&îp· ö¬ƘÆöàcZk„€Ñ„*¥ ˜˜ZŒn’al´Ýl(³ìbÆŠ‹!”ôÎÉÁœœ-œó‡vÖo¬‚Ãþ…YYXÐá0§ØYtˆ‹ (#Uƒ}—¨^IDAT²DNˆ£ŒQÚ€6Fj#iíyêÐYph1(ë»vö=þÄ:ñ§•™{ŠsÜýt0ÿàf•ËÙ½ÄÎ)Rìm %ìÜ´â×ûAôÕ÷ÿeo'ioë¤HxÁˆá‚sq…À9DŠB,8Ž8Ž"Åe5Ѓuµ¥¢v 6ÌÚê~Q»Hw»Û^*•ós‹YÏC–3ì'©Ñ¼24}˜Œ<¦Ö×<òè£-qü†7'ZãdûRKåŽj´Hw> ì4.ã1zJfcÅ5¨gZï!‘g#Ÿd´¼aªª±éTÆ.eà Ñc~g#¨µ6F¿ûݽeó6¥µVÊþ•R"„’îR‚IDAT+QZ²£žîlOwÖŠÛ9T]»¹Oo󜓅ƒ{²‡Ì+t(0c”2Jc´0€0 ˜¡Fk©´4ÊH #Û½è¤YÑq¢V û6=ñ§Çï_³nØoÿÙ±øè7-êîÎÁè‘¥HñòA¿ó·Ç5 8páˆæç&ŠLÄ! mÏâ!Š8‰Bˆ"ÍE50}5½iÔl ðh¶Cwô8s{2måÜÜ‚ÇèF‡ÖÆQá<^«v¬å fÐ05VÓ71„(¥Ï?÷X¢r7qcLÒ'0cY4XÄÄÙBKu€lä1Â4WuNDMxS ­bZ|б:v˜(þ¼}IDATÖùÂÎÏø¹lÖ·åHi¥¤TZÛ¿ZÙsZ)¥¶ƒcÀäÛ¼ƒò®Ín`°zýæ@=±µÉËô¸Š º˜ã(-¤QJƒ1 mP7FŽ! i„¥A‘B\˜HE]ŽXÖ%y4´}ós>vǵ7ÌÎ~ä!Çñ¦C{3ûôH‘b•»¶êˆa)¤ñ3<ÎPÄQñP×Íæ <=¤½Ž¨}™ÕÃ+K¹ƒ:2Ûm•RQ=ˆLMÇc¦“’‡¥Œ&_`Û$…ÀcŒÆ6L‰ÃcÏó(£_ºð›¸Ùzeö*´œOž™Ôe™àÁLPušžêrU “IDAT/ —e,;+Zë‘¡Í~.—ËçlayE58Å-¥Ôºõ¯½<Žc”.³…bÆák¸g ¬øQ=Î ‹róÛ1#J #¤c@)P”­A[¦‰!#5DE(!òœœ—UÑ·~͆{ïøý=¿éà“ŽZ¶d±ï³¸0ïi§H±g@åÎ­Ö 1ah87<BÄ—Ãux~?5‚v¹íª{¶s@ßÞ6»+—Íàæ{+ª5žlhq>ÆÚšíKÖÉÀ!@cL „Ä”“‡ àÄÿ$yžÇÍçó âI >„–”–6¬õ‡)^mL¬s[ÜVxÙl6ã„¥JIDATe®­6Ö3iíÛoz+R­µB)¥´’B*­”Tñ_­t&“9è`W+]©„·<3|óoûÉ™3òŸ…2ŽŠ¸‘R7VXÒþŒRJjiw‡±½8ZKe„4"-ù"TéaýÏ?1ððºÇþtÏ‘'¼ý¸“]HæÌ1oŠ{Ôlݬy¨ÃPñÐDaªUüÄyN凋½¨«£ã/»÷Ÿíjì§Ÿ”Õám£®K$*q[±78c‚ &I J)Bˆ‚ ÁcŒ1„ÄÌÑd“ÿ4;ϱ㸣¹\M†øÞ’„‘¾Þ{3Zc”1f—Ì´Ì4»X´Ö¦Ù¤ªµ·nÞ’IDAT6Öwi6ŽYFJ)©!…R*©¤RJRJûËL­Æ{bpíšÑòò]‹³‡wË,6õH¥@)#’RK)¥RKe$K-F+£µ I±â ÑÖ¬®?ôPýξ¾ÁÇ{ìâYÝyBHÒEN‘b­mÛ¦¢0 e_¯v­åª]sýCfÏSžßA-‹ÔƒQÓh§«À훌0ÂB0Áû^QJ±uC!Ö A؆p3dF¨I"­Îr†1v]7åŒ7*Ps5{ “˜&iwN±Å1敆‘h³•’R)ERJ)¥BDBJézÞ‰Çfwì¨Üÿðΰi$ŸIDAT Þ>G/‡»3Rk%„U*¡”TMFÑ_Sš1ÆD)EÚÕÐ ¸vÿFuÛ/¹ÔèôÓñ3!Ä’bÊ+)öо¾‘*îýƒÙ‡ë™Î£[¸¨ãàN¦•V*ÕvX¯úå¯\hßùÎ%±?ŽÉcL)µ/!„PJ0&”âñü,å$ÈcŒ0:䃞zòÙƒðÌÓÏ5È Á“6°uq’w¿´-mn0Ù€–3)örLühÀOC0c½/cŽ‹”R)E‰&²ÙlWwáÎ{7ÿçŸw‚,?@çˆFZ­•N¶w™ñ?ÐÍNc¤´¡ZÌÊpeǦGžx°a+÷aIDATÈ?d¿B[ÖqJRRI±^½>¿¹0o°ÝÑþŽ7ýEQkQ«EIéͳ¶Êÿö·¿ó¥/]ðýïý+ÆcœA ¡ŒRB !”1𠂉åŒ1!â0»Wl¢óÜV ÆƘ1ƶ‰½¤ÛH’jŽøj9‡_Aó¥ØShi(›H0É&2ûŸ´>‹’"BD™LæÀEáÕðÑj·‡î6íDc3¢CKì(µ±û¦dc€ð!,éê®í;ׯßÞÝg´ÖŽã0Ɔ”TR¼ñAom8í­[7>ó4ÂÐÄë‘ Äö€XÎ „PcL.—§”RJÿ惰ïÜ­¦mØIDAT·þŽrêio±i¸ÿ¡cŽ=zíò­\‡¾xÝãOaŒ^|€¹~ýóq‹•5Á\{iá¢y°`á~Ÿß ó̵ÝÀ¤^HL6»—gнÓLClÏK#5I=•o|ЮŽz>§…ˆ´VRˆf#¢£„0æPJcŽë0æ(¥J¥¥ô¯ßùW·ÿþë¤`LŽ=îÍ1… Œ´Ö™Lƾ?ÆÇqí?ÿù /@“?Zxbãó›íÉ—C!S!vPž¥ IDATÒÆ®}I‚1ÈX‚Œ¥”v´VÚU¶_E<Fª@LÙ'Žƒ4&@4"+ÜhzEñâÆþo ñoSfdhˆäPBdP¯VªÔμ±=‚V‡”QR¼±A´”²QçbL ecŒ9cpÿ2¦”*ŠŒQ¥Ô)o9鑵ÙNx­õ›Ž<üÙg6 Œâö+hVâ¶ÃcÁÂý^ªr3g—©ÞÕ‰ã¤ì²ï`Rv1Ô0Í”£"mÙQß¶a× ûã%û³“‚4Æ7‡$¾ì?Ú ¶CÅC–€FPv;ò½¢_,­Âjµ‚`„¡vHJê"§xÃBó•³£§Çq]×u\Þ“0ŒIDATÏó\×µgÇ¡”QJµÖù|žòøãObÔhÈZ¿þùçÖoDYΰ40ñµ™Šâ&/Øm7ebOI mLÚ­’bŸBÌ.ÆŒñð@pË­ >ýÜÛæÓS̔ۄFE¸±Ç—%cìÀ®æ ÌÄ¡6 4h£W»QgwæJûwä‹,%ê˜ʘã8Üq­ÕÞ¼ejНæ”PBhÆËär¹|._,‹¥R¡P,Šm…B>ŸÏår¹œo›³<Ïs˜ÃÛðÜ&c Áù‰3d‚˜B,lªøo2“–˜3AÚÆ•b&@=óìö_ÿrÍÆû}k¯ùÔ)ŃæP®—€ÙY•G!ÖmIDATRk¥´=,¥VR)©•4JÚq`FkƒµfZô™Âƒfn_GÏþ‡¶Ïîv””Í>šHˆH);j̤2Å(¥”2B¨ïû¹|.›Éz^Æó<Çit¢Ø’ZdŒ9àÀ…¶Ãæ»Ð“‡Éñù–8¯8âoÏ–3éËœ"ÆÖ­ýwßóô†GŸ>´óŽÎùe£B†Ê(J#%”²1LˆHˆHŠH ¡„PR*%µ”FK…¥TšâcÐùlqVçA³ö_äcÜfç­4V3)¤Ø'@Bv~2!4—Ëåü¼Ÿó=×s‡9ÌN4Œ±íZ·˜ØµÞ’ïLδ\zII&¢åß·÷IDATæNßí}Ï=·mÍšg7¼°È¾tZiA@Ä£z¨¸0‘ÁQŠ C< xFö'-£-…)‘ÔJÓçLùÔ[›3ë°ÃÊí%†±ëˆÚEÆfΧ£¼Rì #uŠ¥¬á£ø9?›ÉzžG)%”¤+ߥx`ddôáµ[žþósÙpô¨^vü_u¶û ¢0ªŠsC…†: y†¯[.±¿HŠH !¥ÐB(Ie Þ¥ kMϦҬ΃ºž›Í¸¡ðaB)e”1‡1æ¸.cÌ®!‘¾G)Þð l<¸vGƱëe9®ã¸®k[º0J߯cT*ÕGÝ›3ŒIDAT²eÃV94¸_N~êèö…³p¨×ø`¨Ã¢xa¨‚P„að àañG\D\F‘B*¡¤Ð %‘JiÒ§ éò¦Âlÿ€ž#æåòY»%Oc™Ê(cÌó¼L6“Éf<×u—RŠQ#Úž¶JН"è?̺oíCO‘ò†‘Q‘Ï[AkO«7%¾þõ¯Ž¿*ý1)^×0ÆlÝÚÿÄS۷áý èýçwõ Ä!ÄÐ CÃD¢ÃP„ ˆ‚€óPpE\ˆH !…PJh-(E¤ µ³Ã7¥s¼ù‡ÎËe=€äæ=QÆc®ãf³ÙœŸó³~&›u‘]FûIDAT]—9l7V‚H‘âuzD·<´cø…Zp¿óû+on;øÀ#ß¼øˆ#æ0‡i­“«õí=øøÇ?¼§UH±wa``艧û†vô‡C¾®6'ØQùr¾ ‡ZUô* 5ç:Eò€‡BÎÈsÑ ’H ¡”PJj k›ìUXï¶ó¹½…y¥#ºÅ>J)D4 PrÍIq2ŒŽFO>÷çgž~Àû£ÓáÍ_Ô»xÑÂݽ½Åô•H±Q«U7oݵs¨Ò7`j£e¦zóð–m]my Â:ÔvŠÍu†š‡&䚇"äQÈ£‡a†ìÀ-)„”‘’R+©­;‚”ÂÚ€¡C&÷‚Îìð»F::Yog¹;Û››37cÒ%”1f§g²­‹dIDATÙŒçe²YË%®ëÚ.i—dŠ}T)e÷"AkÀ ŒQ[Ö›SKH=RÛ껞¾ý¾guîÑâlSêÊôΞ¿pö¼yeÆÒ À)^]pΟß8°ù…¾úàõ"®<¡Ûï=Ôñœ,(AÝÔ¶ˆÁ@… ¹â¡â< £(ä<äœ û‹"ÙpD„’ÂNTÔFi¬V\·ß^€ìP±+êévº ÙYÙ±Eƈ7öe Œ2Jc×Äó<»ÎD&“q=ÏaŽ]Ê>á’bŸ­UC»ƒ¢ÝËNfT ‚ˆFtO^Ì+a uУ͛ÿãæ‡È^{o7…·£³£»}öQ35IDATìB©äïé{Iñúç|çÎÊÎ]£áhU×kDÔ|ˆòˆ/-¹sñ|‡‚QJ¨ïP[ë<°F’‡ÂRü‘¤©¤ÐJj¥´– ”ÆÚ`m0À°“Ûj2£¥®¨³Cw¶»¥ÌÜ’C°€±¦­ñDB(¡Ä¶Ëß5–*²‰l×Wµ]ñ{[‹qН*he¤Š›Û+Š Á„ZoB)Åu‚)%+J¥Oñ›ºÈ‘Ô0zd(x~Û“úùûå:’¯8m*_vÚ;²¥öÎrww[9å˜S£^¯÷õÕvõUª#•pdÂzFe¦ÈÜv¯£›`"A B¨ª­A„: %µ­šIDATç‚G‚GQÙqY DÈHHÙýO´RÖ 1 4Òkƒ  5ãõigÀmΕDW7é,:e¿#ï0*›zi»Ÿ°›ÂÙM~ì~?v[‡ÆD»Šj–Hc„ÆJ·N±O‚F•ˆa­±Œ4öc$ÛFbË1”PÊ0%Ä6 [Öñ9´Œë¦@@B¨ááàùOémë²\”)B‘ŠÙr1_,twå …ìž¾å¯5´ÖCC•;«£ÃÕúhE×k˜×²åP4?ÏfÝr{LÖ…f([C†’sÉ#K!œ Σ(’Qd·Ì”%íºYÊ¥b 6ò¢•IDATX€3¤ÙÉŽúåz[Iw–½ž’_ÌôzáxS-Ùð$ ÔpG Bpcû8ë”PÖØÙ¡eMn×auŒ¥œÎ N±Ï‚þxxÖü,õkÃ=Dt0ÑF„KB‰ `»“/%¸Á"˜RB(¦”2J(%$þK(e¤@IGÖN€F€Gj‘Ú12lú¶©ÁPï$™ÍN.rs*“7^\ÏË·e ¹B!çç˜ç²–~S¼î ¥¬Vyÿ`=¬ÖƒÑЍU¡^£Šgt'jÿ¢×U¦ÅYH€Œ€šá ÚΫ!!<Q$xE’saZ´SC¤TR(=ÆZ7\ƒA!hl;t:IDATÜ!ã âL=_Ô¨³•r´-ÛžeÝØnN €Û0ÆãµPcoQÔhþÅ„PÒpJhƒKìnŒv¼ÃcŒ69Æî‡0J¹$Å>:Üéö¼íÔ^ëú͇î7ÛÉÖFòÕѼ¬‘(íSî`±A ÆcD¦ãüÚü1J¥”Ê4C,Íø)P„ƒ…@պݡ"g›që†Hæ?Gsmàe¹nÞws¾ë0ßws9‡Òt,ÀÞ‚Z­6Zµºªµ°Rµ@ÖkXy¬‹®.Ñ‘%Yêç@‚âÀC¨Ñ¯…< ¹à‘Œ¢¨Av¯Š„”B ¿IDAT )•ÔªÙxeù´Fû€A`°Z7Ψ¡#Ø üBT(ËRJEÜæ»…lG†0¦ìñÖQª¡<hôbŒáÆþÕØ²H£ÜÂf»K(¥Œù"”Úý¯i#~sá»”HR¤ „Ðb1ÓUv† 怣çh=Ûh†hS-|®ÂQ­†+U·:š©W²A%¯Ã1> 2"ƈ6»õ)Æ W†°†[C)Å”5·¦·|CH†â<£óÚP4LWÁô‰øÔ„©lT#‘®+<lóó"Ä´“AžÌA®G3æyØaÔõ\ÏÉfX&C‡íi«¾†aÈjMÔªõ°UjÕ£IDAT ­ Là(ptäcYrÌ>-ei®HЈ¢‚P | ¹àBF‘ˆ,s4úÌKùZæZI%¥ÖÚh©Ö  hƒ´AÆö mhhH ØÆÜËñ\Q ¦TBÅ<)æ¨ï}‡a—ùµ#D46X+éˆ`Œl»¥$é‘X¡¤1„‹ÙîuʘÓ(» "iô;’Ô)I‘¢”17ßÖæyÆœl&£”ÖF;ŽÊå¨éö)Ù•z¥$Cu±«ÎÕhU*¸R¥Õ*«W\^ËkQ Ê'2ƒ Úb Ø~b„1ŒAÍád´ÙùO ±.ë°!´ÙmCÉPÒFñ¼,E(6ðýIDAT„%@ê`wÿ™ñ‚~*S‹TM˜ÑQC‡Ø‘ÄAŽ'0ÖÄEÌÅ®k(ÅŽ”RÇ¥®ƒ#Œ1J\‡8e ;Î>´H†"D¨jGœk)tÉ)¨–& ° ¨9b<¬:¨)eYÞA™¬A¾#@D ¬ÛÊηò‘0“ñݲ‹dc¥xm·T ¢HØ…¥BŒãv-;RËNHÄc‚cw„2jY„2Æ(%„Øí>ãj›€S"I‘bJPÇqËåêå7ÂIDAT²ŸË1æäÛÚ”TJ+%•6Z+¥”6`´ÖŒjÏe¦È`v  ‚("ÕPŽÑö(ÂahF+h¤B*£´Vea5£y+› Žl6›æJß²]5ˆŒ1&Œ ¦„`‚šƒÍ0nˆõ~°0v¦@p™`êB ¶Ò؉O#SGÒ€Ð(:&TšKÍ Vˆ†@êˆhB5ƈŽÂ(Âe0 „!˜RD(‚A„Ƙ’ÆZå¤ñåJ ¦Š0B„`BÆ0F˜ØÚí•iÑZ+¥…PJ!Ti¡ìîRIi”2B)µ&Š@ ‰d„µ¤:ËË2ÔIDATr@9Hw`•w‰ïŸ¡Œƒ°§ä("‚(ÎU-Š"ÁùÝ,„  !¤RH»(o£“ÃîÓ†Q±Ã¡Aƒ¥ mià ahhPUcN½:ue6§sy(–p±– $ŸÅ¾—uX J¥VZëFQ4:Œ"¨±+A¼Ï.!Ì8wÄRH<ê7nײ0 ™ šÀÔ•” ”¨ÀÞp£$öùàÊ65eÿÚæ¢}&ÜNQ¶Ao%¬ÙéA{zP ” WÛjÁ©íOmܲ©V(RJTÐú'Jt JI¤"#‘QÚˆ‰D…‘Ù♦6¡–H›H”6Ê"ªÕ1ª‰ÒRÓ¢D)£”‘ÀŽaT`¥DŒˆ%Tˆ IDAT2¢l°U"Òþ¶ýŸm5ir®ŒQÊN±¥£ºŠê¢g•^£´®+™kÔæg‚¹z0SS@êH͈h "©G¢C C ›Ò ›Íð¸n0<†¡ Í0 m` ÃP‡¡ ö®ª(Š´µÖ:y†J´#F1Êh¥ŠL°aÔši<§Õs&بÏê…%YÚœ²¬ç›sóji±¾¼4{êb07»­^››©ÕTSÇcTicDk½E& [÷dmØÆˆ ¢Tû\–ýÆÛ±ý‰d_$¾@R¯·OÀÚ~ñæY¯ÍÓYA{ã’Ä/¼sc§ÞhÌžvÚé‹‹ÛfgçO=õÔHë°øf£IDATÙŒ´ŽÂ0Š¢0 µÖaj£Û†¡cƒÓÚÿ[wψˆÌÎêÙY%R—S—Ä,Åû£RÊH}m]¯®‡ëaôƒõõèäš>¹l¬›“ÏégOª“'ëk«p­vòd½¹>§d.0³Ê4‚°®L]éZ»qVJ™v#l”Rm̓øi*¥اØçùµ¾¨Ä‘lüº¹Të›3ªõ¯õl›$˜Ôb;صf¶á¯½ˆxœ%%vðŒ`s@&Ý ""Zµâ‡jiÿi1FĈivÞðÜ´|KÔŠùQ¤£HŸ£02¶ÃE‘m¨£È´Ž"ųDƾÑvüôHmD?©ÄwIDATk£E´m¿d£´mT(*ÒjÃk¦¾®Õª=3gæ¢ùùhnN-m3‹ÛôÜœZZjœ²ÔضÐX˜Ÿis³Ùº¶'¼lÚ}ަ1Íæºn*±[’´#G<À³Š«´µ){( DÙ°Ǹ;R¯×í-X­Ó©APo4lï#PA½^Sj3†Äß)QèE½^o,--ÍÍÍ×j3ËËËQÔn’t¤£( #c´+Qµ"MÜj…QªÓUÌæQåæÿEÄ(ÕœmÈÜŒ©+Õµ-ñS€V4Øeu=\ß7šáS«ëzm]Ö7ä¹U³¶¦ÖÛÿÖÖÕúj­¹^‹Bµ±^š3Jf”4YÙIDAT”©)i¨°¦LMŒRF‰Ê(1b£¬Zÿ‰ÓŠLbccž²ÏˆUb_$þ*¥ŒRmüU;²s'§%íDª*¤ýû™ID”V?dËÓ:7­×­wF·>2’¬ÛÍ·b; í7Ò¢Ö(1¶Ÿ#FIkF±¿µ‘ȨШШ¦‘¦Që&hJÃ4f¢ZCÏÌš™Y™[P óÑÌœZX¨m[R ‹Áü\0?ÛXšŸo4‚F}n®ÞD©(µ%´ï¶ u¸þ\Ó­MëOëø#>yeW6nÐÅØ¨$qEÝFú îFØßl^ähŸ± ”ª×ëJ›×ÞkJFöåöé±Í-(TV«K2;IDAT‚Úüü¼hnnÞˆ1ÚDQß5E‘1Ú^±oE££0ÔÆÄÑ% CcL]lߥuøÜn_bö ¸I‡­[ÅQJD%KóJ-ÔEêbæâÖºµ³+ÑºÖ u¨Ms£Ù £õP6šz#ÔkëzcÃllMµ±ašf}]66Ts½†¦ÙTQ¤Â¦in¨( t¤tDQML]I]™ºHMLM™@Œýñt ¢” D%ªÕHo†Û*n}»Bì*i¢ÌÖyÄl™bZu%"Ê–@‹2fËßÈØé‰jš 4©@‚ZÔe¦!Y™™Q3³Ò˜133ffFÍÎÖæ‚ù9™8[CIDAT æç‚¹Ù`n6˜mÔgfçfëA½V¯×ffj¥¢Ö±Bëìgû¸¡9Ö£æZØ>Wµå[Ž&ÚѱýU·ãpÐÅíÿÅ‘c뉬šíUÚ€a;u{_Güˆ”Úæ‹v¤Õ÷H‡ÄF%õ}ëkÙ<µÕŠíY6CˆŠ?Ù’ÿæY²TÏ#¹.`t”{RÖÑ#Ç’o“»´íÄ9üÛŒ–1IDATp7 ;1nŒ1 q·faa¡uƒO› 0Ò¾ÈlžaÛ¼;¨0¶Ü/”˜¢[ý–vZkQj3GcŒ1ýèÇl[^^îÐÅÙ<‰”ûW$}-$ÿ¨¿°úÖáË:u}$Ûúçž=k¿O½ŒF*ZÄ£}{U«WJ‰1›—"‚ õŒw{i$1g|¶Í!ù6$N/A2׺6#‡=`¼ôúìÅTÇeÇÊvuvî:K¶F cÌÙçì‘Ç7Æœÿ‚slñØ£Gll?‘‡¿ýH;µbÈ¿øö#ÛËyÉK~¾ýêß}Íós?ÿÓ"¢”úÛ/}ù_úoDä/þ­ÖëÍGŸIDATúe^`“í¿ï¯.ºøe"òù{÷c^uÉËï¾ûóQ]õº+Dä/?{wSDÉ¥—þªë3Ÿþ߯˜Ë.ÿuûöSŸúŒ1æ5¯¹Ü¾ýä'þçk¯xˆ|âÎ?3Æ\yÕkíô쯻úJùØÇîcäꫯ´ÝqÇbÌÕ×\×Éý¸ˆh­û·ÿCüöêk®ºãŽ;m‚-MèÖ{:ý•¸#’ø1‡$ûöo;6¤&n°Ùoˆ§ÛX’ vé9¡!7f´J›èp¤×À*QâøaCE?$ZR½™ìÄäŒGÛ±²ýÈá1f箳=vT¤Õؽ{ÅF6pœøIDATëÜóvÛSj"rþ Îùö·c¾õ͇‘ýøù_ÿß‘ÿÄ ÿá¡oDQôÐC_c^òÓ?ùÿþ!cäg~ö§¾úw_‹¢hyÛrE_~ð«ícá–—þÒ/üÍÆËú·/û¥¿þ뿱˺ðÂ_¾ÿ_GQtßî‘‹_~á>¿ˆ¼ü~þÞýQÝ{Ï}"òªK^~Ï=_‘W½êåwßýùK.yÅÝwÞ®é%—¼âîÏÝEÑÝŸ»·5åW^ù¹¿¼'Š¢Ïýå=qKEÑé§Öª¦N§¿râôI¾ÞzÇA2`ÄŸf¤>ÝZ¡B’±jë븟‘.a˜PØLOIDAT=õòke翎_'J±çÓ$qÞÉžR³¯g3Zë™ÙYûv~~Þûb~n^D´ÖsíóóóZëÅ¥EcÌÒÒ¢lý„Özqq1ùviqɶŒZëmÛ¶Ùseömò…Öú”SN1ÆØp%"qÜzÅ+.Š×eÛ¶å(жm[¶o£(Z^>ÅþÓ|éo¾l_d›Ýä”lë¼åÔVü¾ófÉP”Jœ›~3óD¨HD´¦Ø8Ò5\ÅMU|—³´cO-h…œ8öÔëõä圙™™øE*µ´ãÊüü¼$¢—½ö#í°¤µžŸ_°WhlÊ8JÅoì%·¾õ­ɵˆ#Yü:9%¹¶‡=“IDAT+¢Ã•éЬçÅž8ê¤óÌQˆ ¡ˆKžL«,uà¡VJÄ¡$Šâש·FÃ¥oEDkÝŠ[›Ã®Ý;=v4ÉŒ13³³öo\{–¯ÔjœNTÐW¯£ˆÈÑ#Çìõl²xzêÂIvböÓl‚ÔGŽ”¥¸ éXVœr£TêEnq$3ÆÔ‚Ú‘ÃßI–$îiÀxQ×]w㭼鮻öï¿ïw¼ýÚa—0NÞõîÛ.ºø‚Ë/¿èú7¾3螀ˆ(?ˆ(?ˆ(?ˆ(?ˆ(?Jüå¾ýûûWÀÚ³çšÇ~·`âr¿pZ¿'ÄIDATüæ×(_ÀXÚ·ïÆRéK?…å}·ÜVvÀÐê‰åSžW«5 ¦òÉ'D¢R‹Åçzú¡Vk¬­ÜØX¢ÐÓnŒÑ:’ÄãqµO9åyKK§­¯?×X˜í–åD˜"«33sZk­£öPƒ’Þ]k=óÌñ¥¥Ó66V¥dDá^/˜"íÞIé%¥TÜsìšañ**>cå<{)Iî÷ŸMœ–Í)^_·/se%¿å"‹ð—TbOv9xð€ˆ:tH2û¦Öºl¾>¯£¤B³ååe?rÉæ¦—Ìar×r–Í¿«d‹“œ½`U¤á».Α‰{¡Ùª®¶¾I›ÚÞõø}9ê§HúÜz+Uòâß Ð?ñ .¥” 'Ö¡C‡eëÎkÌP#J\ÊÔa»êp,Ÿœžü(y´›:µ—›>5½`9‹çïÈ'·9Øú•l)OnUtª÷¢;µãîúïe}ã¹J56çÞcL×õ*ò}åæãHßiS)¸¥¹ËYv»‹ï}IDAT¼ˆ·ê¶SvïÞm_>|DJnÞ)þïõr%µ[–=@ëÔ‚'§rç,Û"w-[ïKn¤éT?‡Õæ.±Zù½–«QÛn1Íìþ÷NÎ9ç\¥Ô®]»ì[TÚWSJo“ü{¸Â1šÙ*wzñÆeztªŸNõé}éŽO{ù¾SþÞ±Ýb”cô9çœ+"çœsnûÔ–YYÙ!"++;*œìŠ :¢tÚm»S×=­Ç]±òìES Š,Ë{ËBS5šÜßK©ŽP\ûFŸ}öÙ6x˜ö á••ö–âÊÇgb2—=bÙé©Äq¿ÓôNùgãâRÇÝÕÊŸ=~¯ð;±íIDAT–Orz¼^Õ–OssO—¼ú—õã¨Ï\ª}™:ž1y®Æ=%÷µcYE–[d{(X?ŽåæÎRê{ñ¸Ý^£“݉¼®sÅnJõ_8vÚr§§ŠÛõu‘|º–Ä­÷¬âöÂåõª0=÷£R‰_V×)îy+/×KýTHéåûr—„ƒ>±¿™WʤŽ{âÞI"À”î%ûüÍ|ö(ƒDý»Q?€ˆœzêóŸyæ©DÿXÅWàí®¡u´¼|†ˆÌÌ”{¨—ø(ì¨ÃEý»Q?À±c¶o?oÛ¶Ó»¦|ôѯyænžfÈwÚi?tàÀWNž<Ea6ó®—¨ ¨-,,}öKVø:aXIDATWŸ-›?¦Âêú¼Vçýð‹~¨}3a-P*j(ØÓ`Jñ ±§5æËžfðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆ†0ÿIDATðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆÎŽ÷¸IDATðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆðƒˆð£>ìa~vuyy©VkL?;³ZvD˜µZcmí䯯j…Zkc´1FëHDŒ1ö¯Öá)§YYÙÿ$¥rÖD˜"qذÿÎ>ûlÙµk§½cØÞR\ù¬wÀt1F'»»víJöKzé¦Q`ŠØßÌ+eÚ’Öã¼âÞI¢¢ÊfND€)rê©Ïæ™§l8_·DëøçŽUIDAThyù ™™)÷P/!¢Àô8vìÀöíçmÛvz×”>úµ3ÏÜ-•ÊŸˆÓâ´Ó~èÀ¯œ[6ÿÒåøSO”eu}¾ì,‡ùÙÒ>qB‹œœŸûÑù¹íšøûß;!"§Zn¥#Êò)Ï+>˜ˆ<ùä³s%Òº*5£ˆ<ùdéÎ@¥#Šc0é0 ØìÂ)žK Ó­BS,2×ïRU¹ŽÒi0Iüv&9 Øü‚×"Ê7Åj4#JÞ`æàÁöýÙQÀ·©üÈ6Å<|î¹çµ;(é¦xnö´~©JLðÎIDATDÉvðày䑃»v튓ţ€QÀ»TSlÛáƒìÞ½;w@ƹÒ?/)­ZDÙ2˜] ÙµkWî(`µ€ˆž¥šâsÏ=϶Æ=öØ®];S‰+ ÈXAåߣ´NÕ%ÂÉÎx¢¿ÅN×Z«€çQ@?´Z]ûf×®]‡‘C‡ïܹ’jŠPšŠ}6âp²{÷n;ݾMv¸ŒÑ5 ø7Åö¼V6•R»wïŽÑJŒwRe@Æ *^G‰ly䑃ÒêdíR*v¹O¯4v:À£¸)¶oƒ fŒ~ôÑGí[N’MñŠTí¬—1FÛ8•C‡íÚµÛ,Ï™IDAT3îX%ã!æ 6›bI†“••ñ_ƒ,P•ÞCî€-"rèÐa/c¶ºJ5Åq8ñ5|V¯Ìgl9tèÐÖsv›c¶pÖ ú!ÙÛ+(‡Ïª ú/S¶ìܹÒiÌ~Þe›â;WÚ°‡á³*¨Q¶ˆ1[]`S\:¢°E6ÇløT¡)~ö™¾Ÿþ*Q Ø"©1[¾÷ý§{/( V¡)@©ÊE”}ûnÔá³gþð™"gInü Q“Æü Ö¦‡¥lS\vø¬ JD”={®é_9ã®DDyüèwûWÀ¸ã—"?ˆ(?m/›LIDATˆ(?ˆ(?ˆ(?ˆ(?z(;V¶{)Çx©µ©Â˜f¥#ÊŽ•íñ¿~h†» P±IZ••{ ËŽ•íGëSQo’Ö†®DDéNâãÓøÓ S² ù§¦'39zäX\Îì"’K/•²Ó*ä¾v¯`¶ep/]:p×mòm§$§W[¢50…*Žá˜Ô©™.8Eº5Í¥>ʾÈ1©HʲMdnžE¦\—ÔGQ%ÉæŸ;½ìº˜Z"J5نϑ²x¶Ž<ãÆ±Útn½î‹ûªŒG©+•ÛÇìŒE2ì½³ÒKn~\:·~Ó©\%Tr[Òdš¸ÿá¾VœMÐi‰)ŽëùŽO> L£Üáb{Ì“ˆS*B¼ŒöDD€ée‰¯Á‰(0Õ<ŽEKDøADøADøÁïQ`ZT{¢pqD˜ Æ;)«\DÙ·ïÆ²c¶FAÙ+(Qö칦医¥¯ã´Æ÷zü ¢ü ¢ü ¢ü ¢ü ¢ü ¢ü ¢ü ¢ü ¢ü ¢ü(Qv¬lïë,ò5vR+2¾ë?¡ÑIDAT5¾%)T#¦A÷ˆ²ce{üok#[EÙ W¹¨ÅgLm9Ù¥§6*¿µ7˜ïbd¿q`(º<{xÇÊö£G¥¨‘­«Álè[ÎÈ~ÀsE”NB|\ZdJ2CGúÜ2™17Ar’YuʰŠ$_¸›Ñ‚™\¯ø­}Ýuz2A§×¹eë´"f,ÅQiÙï.·:}›]¿âÜ2¬vÉTT×M ˜UFÎm£;M‰e[áN9T›17Anùs3,’ºÖ[nI:­WnHsLO•![GÙÜ+’[æ8¤Åé³mnYbLîš:fé½Ús§t*ÌлkÀÀøg¾ëÙäì¾Zª¦ÃÇ<¨eIDATÆX*^ÕÉ’ ¾J×Ö6’o/ÿ_»ë3‘J³¸8W$«!ôQ¤x°ŸÞw· ÛgG¡-…*]]ÝŒ(¯»ò2¹ü7~ícw~ºBV£ò›ù+Ûí¿NS²o“)S»ÎL¹®;Tœ¦`V¹Ù&?u,bDvÌ‚mˆ»™Êæ ÖÝ]’AVés«ëöŸ 'Ö뮼,žþÜêzÁ¬Fâ:J2Jǃ<&ãv6;Ÿj³S"»G$ÇW?rßœ›,»£×9±Ü6$».ٺʱÈÚB•®­…"òæë¯¶o?pëöõuo¸â·ÞQ*«!D”ÜÑR³µBÕ¸+ºTVÀdËî]Ïàǧ²Â6IDATÉâc3/ÆƒŠ»)/•CÌ1tz§z•6›ÍßݻǾ~ï-·7›Í÷Þr»òæë¯~ï-·Ïjh×QÜW “i¼lp£v( W¿¯Ei½ïæeõ¾Ð~{0UjŒyÏÍ~Û[ßðž›?lLë—óÙ)E í:J²¯—”ºíÁûré¬IÉóïöÊ¾šŒ£½®õV° èEµ¥¼çæwÒÕ0¯£ÄUœ=“˜z›MàÞôSésÏTS+wKîYɽ¦ÓÙéÔž˜ÚÑR Êýt”÷ÊÜF£k»”›ƒ{í&¬JQrÏn9¦ŸRê-0mŠï î+óîœÝ³ŒÔ^Y¶I©0K*wØüÂ…IDAT­½Ü‰cT¥2:wÆ]¡>Jü Ê z™@ìt¹z¬–øO{„°ÇÙûçð‘ï,//IV$·î冽×ÉÈû¼*`§ËEµäzík/ûÈG>~úé§wMùä“O]qÕoŠœt'ëãˆ["òøÑïžµãÇ*Ï ,vº\TKÖñ§ž8íÔ™FcæÌùWÉéQ¤kµô‘gžyvqv­kžÝ#ŠcHá"zœ@Yìt¹¨–”ååàOþû'_ùŠ_*2DÊYg=vç'ïó0âV/ã`ÀØérQ-YÇŸzBDÎ?÷ÚÚÆÉ“kÒ(¥¹­­7Ed}ccc#ÔÚ(¥^òS£4âÖnxêIDATgßÿ˹Óõ-_L]%"FÌæ˜óJ¥ÆŸw+Q”*4 f§Ÿì¿âé-½ûMŸ}ÿ/T`$(Dì+)=ˆò€~eŒ¤þÍ,ž±²óEº/€2FŒ1&HJôOD*œõr<5Ìщ £@gfœY[`²Áƒp21V×çgçÔëßpe ¢”RJÕ¥‚ ˆRj]S âþ{ßziþYwžU"JꀥÈ,Í(ˆ"óù¿}üÄê?þË3ÿô/'þè-—þÖý³ýþ¿³Ÿºg_dꘒ-j§ Ýoq—ܤS'¯»Rü6¹_$û+]çŪØG‰ûÂömׯw#R‘6ýüùñ”H›ÿñŸ_ic?uÌ›êng;àºäÂIêì°ã-0â|ÑuWÊæ+5/¦Gõ³^¥Žå7¢ Ôò#ï×Ú3Ï=ý{ð¡ÝýСïýáï}é£ÒyëIDATo³ŸV.†£xÕ®"T€"ȪQJõN¬¦´–|Ó;DD´¼þÊK^/"í«)¡öQRMŽd’èѧÞz/01ØAU±R°½Ž5£ Òæÿüñï?÷Üã'~ðØÓÇ;~ü;'~ðà¿ÿ¸ô§"™s¾ŽÒ&cdö-ºõˆU?ëUj #¥¼àùW¥¦·ú(Îë(©þP¶‡äè3e#_*1—å1µÜ»RÿæÅ+Qªm4M­ìEø\Žˆ’Û²w½£1Br§t˜ ñVíx‘Mœ|›»Ëpc1²ô¤ÈHyïv“SíGcŸB¦*<=0jJD”^@þà=Ÿ©¤S@öIDAT¯;A§LÜ…,ø©ãAŸù:²‰“o+lŸ˜NŒ¸Åˆ[à#n -ÀLFÜ& ;].ª%…·tÁN—‹jÉã·þês˜;ýe¿òŸS@¿ nÄ­_|ùÛRS½ûMõ¹?$¨ÀdÔˆ[º¦1FŒ1í2³xÆóÃÇ;u_ã¥ôY/ÇJŽNLÕµ‘ÿÅCëÍõõp£î½æ‚™Å3Däy'Þýç7_ré[ ðr‹,.›¦È”àÌ_l½ãn@×Q> æGIDATšQ-ŠäŠWÿ¤±¿=1i‰GÜ:|ÏŸÉ„­ Mì›°Q´Èþö‘0ÔÍpm=Œ;+o¼ò‚fX+’ ›,0šØ7a (¢lDµ(2þÜÙ­ŸË'DÚlD®bdu°Ó³rgÒ)Mr)E2ì4Ž Že™­Ãe_dçÍ~š-Xö\\§:é´¦´c-w3‹?í´)JáM®ÓDé¶i9v+Œ©AE”°ióÅ¿,ÛGù­×¼t£X%Ö©ÍíÔ:K纺>®±T†¹™dË™z]D§¾S,µ^EÖ¦ë¦X|“sÏâÞ´ØØ&ÌÀú(PËK_²;5݈DZ6¢†—¥íNÕéIDATì.d§tj|+lߎ^H6ÃxwÊ&ëí¤[×SÛ(.wSÌnÿÙ­´Â²l`}”šÖòåÈé£\sÙK ^Gq+x¤“û °Ü§W;tÊæŸÌg`M¼c½€‚ºvs«m`ll`Wæë‘6?ûâ]Ùº^Gé“TCß¿ã¦ÜÞFòœ@¶$¹U^tj‰@.ÇöÖiz;ÛääTD kÚÈ÷p²wrÅ¥¿`DD”£R|›ËnÜî)]/•—ͰkÙ²K/Î=o¶îu-F_C,¬Ú·éÞär?*²…gÓ°±M’¸U‹´ùÅŸ9ÏÞëeÿÚ!¸Œ˜0*q÷pö ’㜒ãö’د–IDATN³¸?-2%÷£TácÙ™«HÉ»®WÁ¬²•ÉÞ>¼oc>*µiuÊ ãkP#nEµOü¯{í–£rFÜê×Ã`*÷ @Õ(k@#nýÞ›/­6cÍÙè_3Ù%H”ň[À¤a§ËEµ¤0â€.ØérQ-YŒ¸]Œ¸ðƒ·~0âV¹Å%;Ñgœô¾¦“÷;äÉ[#tÂw=îq«„Êîwɇ^3˜rl°q @¯Ø7a1âV•·²g½Šd[$qîê§V¡`ÁÜé³ùwzÐYü6w²µÞ’_V‘ ñU'îZÊ]ñé‘;$Iüiîfßé;êô;fI-(›FÙ¯¦IDATœß5Æ #nU™*÷SG¶çîZŽb)˜û²Pò£Üf¥`mç¾èT†®Ëí½Nºæ0庞¿íc²_±{÷÷Â75aq«ûux_‹.ž¸ë3µÊîx/© á(Cî[¿…A)&ñxlGûîø‹ã»ž`Œ¸Õñ®­R‡N¥v­®‰Ý ÊÓ¥Öq0çÜõœ­öi>+5²ºvßswœ^²Å¸cÄ-‘ÄE¿ÙúMÜ#ëXŠ£žs‹Tüürœ í4½ÇŠ/tò0âV‰·Š,:>âNN1‰ËÚîĹº¦OæßuvGɳe+^*G¶ÙÄîêÊ]ÇâKÏ–aÊU« ÷ÆûQ‘í§Â(¼ŽôIDATw1ˆ[®vÓ‘¸k>Åç-[ ÷”ì‚*¯cn¶j»—·¦©ÞRç'[Á­±ø·Öu;qÌRvûGŸÌÏ®þó“ß¿ç³_:çì¶©H~7ÔJÄ9øÈ‘W_zÁÒü¼;OFÜÂÄâÛÜößû•W½ò‚óÏOß3•µëáÇößûàÕW¾ÌŒ·|.®F°H2ìR?Úï’ã®H8±Éößÿ`×dŒ¸Lvº\TKÊòrëäPE]×k…®M0â0QØérQ-YÇŸz¾X_kvM\_ôQ¼`Ä-Mkk]Ó,.ÎÉŠ·`ª­®nˆÈ뮼ìcw~:9=;¥+FÜå!ÚRIDAT€©öÜêú뮼LD^wåeÏ­®Û©)³*QLg޹ìˆ[ý?Ýv×Wo½óÁ÷ýéµ13‹g4Ïx^xôî?¿Ù½ÐÿžÀ±8¥TüiòõݧâµàG:6¡X[ ?pëöõuo¸bm-¼î WØ·¸õ޵µpm-,˜#n•ûhÕ²3öC/Ïì+òÛxnÃ…ÉXk6›"òÞ[nÿݽ{DäÍ×_m§¿÷–ÛíGÅ1â€^±o޵øë{ÏÍ~Û[ß¿®ðµ2â–ëÑ^'³*žm‘Ĺ«ŸZ…‚s§O埜îÎÜQ0wQs—ŽÈö­s¿»lÿ;w×ÈýÊ""ÒIDATÔ1KjAÙ4âÜþ1`6¨¼çæW›·¦zÄ-ÉkåÝ™—*X×Uðt=Û)Æd#{÷&ÁF2‚*‡aÄ-éöøt‹.ž¸ë©*\~/Ò_©–9&@ܲ»Û÷T_¶òÕ»ÊåĈcÄ­ô)©²æfÛcbw‚²Çt©uô›9&X×®mîŽÓK¶wŒ¸%’¸$ã7[¿‰{äk¹«gR9NvšÞãFŶ4 ùÎòòB‘dErcÄ­©q˽.]3ïš³ÇPʪ} Ù 5)÷#÷,Ò°‘ Ñk_{ÙG>òñÓO?½kÊ'Ÿ|ꊫ~Sä¤;™ºîºoýàMwݵÿ}¼ã펃âIDAT×&?»oÿþß¼ìÂžÊ ˜ ˧nO=Åù]ï¾í¢‹/¸üò‹®ã;]}”={®ésÙ“ÃQNPÜ€ž ˜xD€D€D€D€D€D€D€D€%žyÖŽë_9FÁ {¯}ËÞ›’S¦p• ²rÏ>ñô±>•cè>õéûs§Oá*@5¥Ÿfüé©{îô®2TÀu€C<£ì¾ýû»¦Ù³çžK ‹ˆ‚´o~ýǧûöÝ8°’/CŽ(;V¶=âóÒ·ÍÐ{¶}5‚•ð¾[nëôÑ`nU(Xøñú¢‰×ß÷ RIDATë(;V¶ÇÿzÌǽˆ^2¯Ì×Ú_œ»$(ƒ£¹¯L•>öQ¦áø1^ÁiXÙ"¨`š ú¬W|›jw²ÓSSìÛì\ñ§ÃmÈ’g™ ®‹L\%¤ P¼$³RÅ3I-ºSÝ€>FÛÈÆ¯ek‹ã~mÇ¥èº.“Z ]W3weݼ"u"£S)×ß>J¶½èt’}’N¾g×¥ÓÁ{×ÇZn=ôc)"€ôY¯N{{…VÀ6Oq#5:MInÇ"yÂj"+!ÛÈ–¤eK.×qnÀ í7ó^ŽÓ9ÿóT®Š:‰_ç–pÂ*!yž3©ß•Ôr‡^ÀÔê„E€IDATï½^ñëø2÷ÂivzjJüvÔ‹ìêä^=J¾¼JHŠ{ ]WǾp_H/˜‰T€ÑÐß+ó]'&â‚)Ý Ü§•ü*xòªøªH%ìÛwcÙŸ1æžì*rÖ«kºgqŸd0`<…[ìÙsͰ‹`\Q°Å I¯˜0<ÍàààG¹ë(S82ù®2TS"¢Ü°÷Úþ•c4Má*@e%"Ê[öÞÔ¿rŒ¦)\e¨Œë(?ˆ(?ˆ(?ˆ(?ˆ(?ˆ(?ˆ(?ˆ(?ˆ(?ˆ(?ˆ(?ˆ(?ˆ(?ˆ(?ˆ™?kIDAT(?ˆ(?ˆ(?ˆ(?ˆ(?ˆ(?êÃ.€‰²ceû°‹ÐwGK¾=kÇ «$ƒqÃÞkß²÷¦")‰(<3Æ »ýrÃÞko~ÿ‡²ÓO<},;q2|êÓ÷OLDàßD¶°î¶õøÓj`%YD}A ;…¸2ðƒˆðƒˆkÀ·ÞqÀ˜‰[Éø.Þ+Ûs_—dë?¦«@D0NÜÁc¬Ãɘ–<‰ˆ`l¤šÝ£GŽMLï$·ä©ÞXn'¦Sš¡TÀ$ßpâ –©)©µz|%¢Àˆªp]}¸OÁ!¢˜Ùöq—êpœk¸5²ñªäIDATÀÝÃÆ† ñÛÜË*Ã(W¯úQò¡T}ã$ÙøfÇÇ·§’ *G+fRµá®œ ¢3¹Äñé¸p¯—tXMGšÜ<ûг^?ˆ(?ˆ(?ˆ(?¸2À¿RCÉbbQxvÃÞk‡]„A#‚ZDžÝüþ »5…´" ŸÆ÷ç •½eïMÃ.¨àÊ<À" À" À" À" À" À" À" À" À" À-Oay×»oV9ãn3¢\tñC,`ܵ"Êå—_4Ürƺ]À$øÿe¢ÿÛIDATC;˜Ip‰uIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/commit.png000066400000000000000000000450501203611042400304470ustar00rootroot00000000000000‰PNG  IHDR ÏÔ pHYsÄÄ•+tIMEÕ 3;0óYtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝyœuøÿwUõ1“É59ˆÉdE÷'ºˆÃñÅ%j°‚H`uY9tEåÑäH@À„膈\Â"î"H9 $œäš>«~ÔL¥¦ªººªçÓ==ݯçcIwõ§>Ÿw}êxwUu÷G³,K\Î>û  ‚[o½ÊýTs2ŠK&vŒ2dèÈ‘£ú!4À±yó¦;¶¯\µF\y¥;£œ}öÿðÑL™úñøƒ"bF? ¨sÅbQD^ýïÏ=ûçÿ{õ¯vRÑ,˲ÓÉ´c>9yÒÞ»wuårù]]ÅÝ»»ú;`@=4¨µ­ÕH)½íIDAT¥’ƒÚZßZ¾nÑÿ¼h'•„ˆttŒ³ÓɆõ›6mÎär¹íÛwõwÀ€ú5th[*•5²eò¤½E>¹}Ç6Ñfͺ|Ú§?}đݴiÇ{ïmݵsWWW¾¿CÔ»ÖÖdÛà¶1cÚGòÌÓ¯.zòÉ„ˆìµ÷ˆM›¶¯ýû{[·rjMdõ»oOœwwܹVžtÆ„±ûîØ‘Û±#—ÍäD¬½ö!" ûå]»vuuå[ZRŠƒÔ«w6¯›8ïîSg}Κ0¶0n¤ 1»?þ«‰xèš¼/‰µ›µÕïÞwÛÝ¿:kŸ‘{‹HWW~׮„ˆ¤Ò©÷·fø|4•Lú³?IDATÑ¿ºíø>µûýŒüßšb6ecéz9þ„O=ü«ÛŒïþÀžøþ¶üÐöqÎQ²…¬žÔª3 Nwg¬œ•liI¾³-?´ÅJ' ºXš–,Zž©Ý¹äöŒY°ò™ŒVÈŠˆ“5²…¬ˆ+£†åiFÓ´¡’i&ͬ¹3'ys˦l±/¤[eȨÄ^{µ´¶%k¸Ôõ²YÓ*¬ân£X<ùªëDä×—\`Z¡`ššæ<øÊÕ7ˆÈCçž]ÌdsyS+š”8¥šc¦öj.©ÄšwwýmÝöw3f.WÈærßÏw­ÉŽ•<ðC#ÇîÕVÍ%TW1WÝÊç´|(§¸ÌIDATWá±5ïˆÈqã÷¹çkgz DN¿ënû¥_$fÑ´,1‹µé"¢i""º®éº®º®ëmymd"•œ2‡ʧS-mÉl.ŸÍå2Ù\&›íêʾõæ¦?½´vÇŽœ=‹aÿkè¶^xæú믚1ãs=xÏÖ-› ]¯ÞßCÞóЃ÷Tµ C×þáw×_UõêÏfºfÌøÜSO>ø´Aº ÇêþxðÁ{|ðžjÏR±L¦kÆŒÏ=ùäcýXÛþð»ë¯¿ª‚Â}ï¨ ²6»R=oöeÿ¢ïiÑ=‹ª#Léz4]× C7tM74ÝÐ ]7 ]DŠy³h‹ùB®µ~þ>=IDAT³ÂckÞ9ý®»ó»»ì?'ˆH®-æ E«XÌ›"Ò}D0öä‘„ˆèš¦ëš‘04MÓ¬ö÷¥h6nÉìL3™|×îl6—Ëfs]™\W&ÓÕ•Ýɾöúû£Çš2µSD4K,ÍÒD,Ñ~òãËD´=ï¢ííþñ‘ÖŽÛgŸlѬBrÑt-eèC[Ó;ó…—_^ò—W^:kÖùþb!/EqϽ·‰È°ÖôŽ|Á=ÝSmÅ­¬Ûð¶ˆ|ì  iMïÊ,;c¬»m/¿¼ä•W^šÕÓ!º®¥ }Xœ…ª`–ŠmØð¶ˆ|ÐG”4WYm÷Þ{›ˆ ¶.ž¢$IDATÜ…UtÔž+ë{¶À¡­é§—<ûÊ+/Ϊtßñp6¼yï÷ÞÜîò½ZA…á…Í>z[!¢ïiÑ=K©¥xùåbu~hoh–X=G~çc\RÈç5+! MŠú;œ¿Ï 7ŠÈckÞ9nü>sO›³ÿr¹\>›Ë' #™0D¬ž˜i/ýiñË/¿ðãütD{{Á²Ž:æsiM³jwýO?ýÌM‘dBÿÉ¿'"žû¯Ë›ÀB^ŠNÓ´dB£ý(äIDAT©¶âV–¿õ7;ö–XÉ„îyÚÇ Ëv÷aÙY¼×MCý¸§Cº,SDN;ýÌVM#r„ÌR±7{ºÝ«ïÍõ¥6MÓ¢Ïbî{G¹÷Ñ·\Á÷¬Äïôeßñ¶¥i‰„÷Ã¥îFý¯VPaxag³ÛV (Á{ZtÏâÌ=KeØ={®&bi=DDŠEÑtËÒEŠ"òöyçíû‹_HORqÒÉÛç·§.Ó”bQDzÎC$™04]ľê¥ëz"a$ºÑýŸ¦kúï6Ë3ogž]±ýϺ֌ÍéÖ­ƒÚvÒ5lxaäH;&±÷¶µ´'†‘H ÃH$ ý/¯¼»SœÌIDAT$"ã'Zºf%t#a ­`hFÂx~ñSÓ§O›>}Úó‹Ÿ2†‘0¦OŸöÚëÿwë­7NŸ>íámÙºéáMŸ>íÖ[oܱs{ÄÓ§Oûì—ŽÊÚôéÓì…ýì—Ž²ëwþü/ùƒ1Æ}÷Ýuß}wyæµÿìÙçý÷žÖÝÕú[±›pâièÎ;ù…Ï}©mP›èºûé;ë߹ᄏÜ:ÕúÛ­ÿüæŸNŸ>íϯ¼èTîôá­·Þ¸áÝuîÂ"âîÃR1oxwÆÎ;‰D"‘X¼øé¦O;aú´Å‹ŸN9ÁÕ!öӺ҉ĂóN˜>íGWïþûîzýQ„«IDATõWYì o»õFÏ,ï¾»þþûî:aú´Û\1x†ä©³TÓ‰Dâ.W·{Ú²ŸÚwîÜqÂôi÷ßw—]ùO,üÑÕß;aú´ æ¹ ©Í‰ÊÿØY‰'LŸöÊ+/9µ½þú«·Ýz£]É»ï®wOßÚOíò ̳ v`©•èl_øÒ§Ý+1‘HØ[ÈâÅOßÚÓŸö”ÀÇO<±ðê«¿7ÝÕ9NÌvëÓ§O[»vµ§Q÷fï„Zª÷fïé1g³÷÷˜³Ù Ý©Ð.ïî±ÀÍÞéÀÓt=0TO‹žYdئ ëºáTënÂýøÛç\xÃu·üàû¿þê_ #ñÚ_ÿï²K/8ô?õèïŸÙ¿s¿m›6¹+w–Šùιî0Ö% í¹ç]{ÍU7\Ëœ[î½öš«žæ £{ÃÚó÷‡GŸsuˆåqŸžtÂ)I÷,wνÙƒ§¹—ÿ¼äÚk®ºùsí^yi±=ÝSg©¦×ü}e‰n_—0´©GN‘•Kÿ–0´å+–ŠÈQ‡iØñ?åÝ×IDATqí…çÿÛÝs3wÎMÏ<ù¸XxmNT)Ó |ܳÿýõ¿¾b$ô×^ûËe—Î>ôg%ntW"½;ʙ޳o²×Ž¿=+ñ¹gž°¯¸¯^³'ø?,ܳ“¦e_1‘Ž}>xÒ §$Dœ)îWÇ¿èéœ9snzúÉÇ }ωгÏ-ºæš«nþÅÜýÆwºænÔÝc7¬3t-¼§Ç¾ÿýíÕWtCÿë_ÿr饳Í~ë¦îJDÄY.w%vÍ™s“Ýs]=f‡aÇl÷Ø5%zLzÞ®yBõ´8ËÑG{÷.\8ÿ‘ó _ç‹È¥—ζ‡sæÜôõ¯ÿ¿cŽ>î¶ÁšIDATþ{ç/\8ÿ¾_Ïõ, ç.J"¡†aØGxæ;ßA4 –˜½þŽ¿SÕqã÷ñ¼jºOxŒ„¡' #a$ Ãpî£h†–J&,Ñ4û·í5)»^ØëƒÇšm¦ešf±h‹Å¢i Eç©iš¦i&ÓIͲD4KDÓö\I¥{}¶øñLjHçø‰FKJD>úða‡a¿äL‘ƒ‡ƒÒ"òÈÂùçŸ÷ݲŒÔž#cÚõ8ÑÖRêCl‰¶–À`ô„qÖ7¾YÌåE$™ ž{øðv»õû¸ûë_›e”nÑóô£;XDžzêñ£>ÖßІõ‘}÷g$É„á~:fÌXÙ†ˆöyIDAT½sÇÌYç˜ù‚nšk£I—X|»¹gŸyòãŸ8dñâ§DäÐO|JO&¾xÂÉf¾ º¦»¾Í^‰³7Œ„ñÌÓOˆÈ‡&ÈhM‰ÈSOýñè£Ó“%¯$÷ê;nÿO;rŒÝŸ·Ï¹é”ÿ7Ãéö‰“ŒÖ”hâ¼w‘=1œ}Ž™+è‰^]!"?ú{éßi‡´ðч›r„Þ³¯:u–jzúµÝÝžJøÛ:ð€?uè”…/8ìˆ#ô÷‡:ebÇ$£g#o2Ü»§6½\m½Wb2ðñG>XDž}úÉüÅÏ?-"‡~üSz*ñÅO6óÑ4=aD¬Ä^Xîç¤IDAT;þ0‚Vâ±zÂØ°¾'ø¤}Y»g%¶¥•8±c’Ñ’ô¬£Àm©}Èpclª§sNµ'þêÞ9ÿõ›»¯ùÉÏ;Çw-É„¡»3fLw¨³¾i拺¡GÛì?&›½ñÅN2óEé}À ¯Äî Ï<ý?Ý=Ö’ŒÒc¥ZI§³ Þn JIð&m?è?Ñn]DF f—dáüóÏûN©ã¡ˆë‹ïö5/K4Mì/ÇòyI&“Å¢XbjºˆüËÂÎÙ‰ô\þúåç¾("ºeŠ&K ù¼ˆ¤R†sà׌žû(º®'’šûÊZ!¥OݺõÏ+·¼ôζݙ\WWfwWfw&»»û¨AëIDAT+ÛÕ•Éd³™l>“Í}óì£R‰ NÖȗ¾tÒüùóD$Ùûà²dɳöƒTKRD^xi±¸îÕ§Zöì©žŽ° Ų’ƒ[œéî“¥mɤL²5>£·õ|1ÙÜz©§¥zòÉ?ŠÈ¾ûŒK¦º¡»Ÿ~ãÿ"¦yú™§|ç;—LzT{ûˆR­ø?òèü fÿÛ‚¿µ'¦[S""¾ ¯ÄŽÙÆ”©Ÿnoa÷áqÇi¶‹%ZÓ¥úÍ}>.=ÛÉ{ßMm‘§œaæ ©A®þL{èÌo|³'†K§L=ª½m„§€³Zíy_xi±ÌDËžì饚^ÔÓí‰o !®IDATd2°­Sþù´ fÿË“O<¾dɳ×üèF=a¸ƒLöÇ#ÖØ3þÇž•˜²'á}Ç^‰½vüa­D+ÙšpmI÷Q8™ìÕnÊ÷£MîîÇ©=Ó½S¯\½\D–/[úŸø¤‘4¤×^üÆ7¾)¦Uz³nÅ~ÜÓc¿³'¦ím2éí±ðJì®ð‡±dÉs÷˜çq©Yœ¾òa\ýéêù=å frppsÒëö§fß/wß5‹fA3DD,óœÇqÒÉŠY³:o»Mz’ÊÍÇ}ÁKÌž£w*‘”žÚt½'£º‰„ÖýIÑ,)ìÝfæÌñ£ÛVlÚ¾ykfwW¶;d2]Ùfv¾ƒIDAT\&›Ëe Ÿ:tâ1G”L%ºoéY–¦É'>qÈüùóV®Zþ±C>î^ž)SŽ|î¹§E$•LˆÈ¡‡fº†»³|ë>¤@”Çþªƒ ™%n$¥ž6´aÃúçŸæÂó/‘––”çiK˘‹/¹ü³Ç~áÜóÏZòü³×^w£îzKX6˜b®àYظKdÇÝšÓ:öß/½â¸ã¾ð­oŸµxñ³×^÷sw•mÅÝcþ¦£Tb÷ؘ±Þ0úÒcîÇÌÒ—Ç"¢Y–Ø× 4Ñ,M4û‰ˆij¦iZ–¥iÚyO<ꤓ7gžiÿ»ßÜ9Ò“T~qôg-Ë*íOcI*eX¢‰e‰¦‰Yž;óZ:•J¥’éT*J¥ÒÉAc‡$÷j±×ÐÃ?¼Ïû¶›fawW¦+“éÊä2Ù\6[8ìðÎ3¿väøŽJ'SéT2J¤Ð*õ„IDATÓÉT*uä‘GM9üˆß/|x÷®]©tò‘?Ìò©?¦ÒÉ“O>EDV®Z¾tÙßDäsÇ~±Wšu]"ó\. /ày|ÄG9=î—ƒI¥“w̹åŽ9·øçÞ¢ç©SÒnèÓGãoȾœúÁ}Ç>Øÿôßüú¥?-ùÔÔÃD¤X,fweSéäÉ'YD¶mÛº~Ã;î`<ÍÍþÖwEä´Ó¾*"ÿûê+öêxáÅçý¡†TbÇÜ+ŒB1»3ëT»~Ë;?¼îŠ7V¾6zßQ©TòŽ;n¹ãŽ[R©¤ý·§•T2åÚÄûÛDäž9¿yìá§ÿéØéûŒßwð°6w§gÊü7e§DIDATú¥—–|jÊž<ÍíY­K]«ÕWg`Ó«W»º=• lkĈöþð¹ø;—· jk”öTî<ŽRÛž•¸þÀJì¥ð®ÄTò‘Gæ¿ðÂóþî ©¤{%úÂ\‰kV¯p‚O§éTÂiÅ~êTn?M§βlXÿ¶ûÕÀǶáÃÛgœvÚá‡qÏÝsvïØáiô7Üû§—6å01 ÅÜÎL”V–-}ÝßcéTâü÷‹/<ç_–Jìó‡±Çʆ꟥T¿• 8¤¼û/•N¥R‰t:™N%Séî)étBD2³P4 E¹ä¹EN:yãkß(ššý÷Æ×¾aO|lÍ;—<·¨ÖYþáIDATP”BÑÌLIuüSéTbÏ9Š®iétÂõIeKDKO•¾KZÇ k9øÀÜ=ÿO«7d“†ð‘}§LÝÿØÏ|xï½ÚEÓDºOlì3œôˆöþðÇ¿xÁ´c‘³Ï>ç˜iÇsÅÏ|æØþÇ5ß<ÿLùÙ 7ØyÐáƒ÷t„ëêAÚw¹#¤€çñìÙ>óÌSÇä믿å©ÁýR`0étÊ0Œl&›Ù•6b¨?†(-ðó›úÈ£ótõµtÈà¡mž†ìó莛ÐÚÖ’N§cúWüÀØìo}íÜ ³IDAT×>%ÿÞeWM9ä¨á£‡MíœúË›ç,xøá‹.»àË_>õk_=Ë,˜­m-]tI!_xcÙëûv~Æ¿tž˜ýaL2å—7ßq×]s_xiñÉ'2aŸ3_lmk1 #Û•ÍìÌ 1DDfŸßÓ!¯½éîÆqûŽûDAD¾|Ê©_þò©ûïÀžH|o-§N™zâI½»"•t7÷™c>óÃü¤gµþç2¬Íƒ!°é%‹{º}P:J¶%"Ÿ<äùÐ3¼µ¥×[KwCQj›qjÏJ¼üûžJö¬ÄK¯œòÉO5lêÄ)¿¼ùŽ/¸è² ¾|Ê©_ûêYvÌy38IDATo_ôow¯Ä‰Çø#é^‰?¼öà2xè +±Ptmét:Ù{«îµÓ=ï?\ä÷ý¯z;Z¥/¹äÒ/|á¸G>²æíUîFƒ6ûdH+®ÍþÊ)‡|zøèaS;]=Ö½Ù[ÛZ.º¨§Ç:ñT"ÞÍ~PÀf?5R•íÿ,¥ú-°óKõm: \@ï†Ý·UD¤`‰eZW}²ûjÞë§ͳ²^?ýk¾ç.¹ê“GL«Ø3o:•ìùæˆVÌçÄqëß¾;sèðáv3–å´,®/š8!tŸ.íiÊùpswa±Šs׎Ý7l‘ö‘Ãk³ßüîx×{ë{D NIDAT6‰È^ûŽn2HDV¼±FD:_êqÙžÇÙLîíUë§nž—üÁˆÈ–÷¶‰Èˆ1ÃÅ'b‹î§“&O‘Ç~zèðÁÛ·í³÷¨!ÃÚü m\¿yû¶û³/§zž:¶6lÄûÙLnËÆm»wvÞk„ÝÏN`ΔÑ{Ú>Änn÷®Ì®í»¶oÛ9tøà£‡Û•ä²ùÍïmm5¬¥5í,Q©˜÷„1jO»weÞß¼}÷ή¡í{ªõôa6“{{åzéüÐxYñ·5"2|lÛªå«Û‡Œ‘mÛ¶~ùŒéS?âÖ[ïH·¤ìváîžï™âTåŽÁÓÜŽ÷wn_S¯IDAT½÷Î&ÙkÜžÕê®sóæMMoߺcûÖû»ºÝ×–ˆäó…¿¿õÎ'ïã\§vWî<Þ¸~sÙÚ²™Ü–÷¶íÞÙ5ú#6®ßâ®Ä™2ú¾•¸u§»·sÙüæw·¶Ö2(í´>iRÏJl¼}ëÎ1û¸V¢/Œ=+qøà£‡ cãú-Û·íìØo_çú~6“{{Õé<ðƒ"²â¿;[6¾ß{ƒô–t»'æ²ùµ+×ÞkD6“s7ê´Ø>rhïÍ>¸•Þ›ý`WíîÙ쇹6ûmí£†¶´¦H&Mîè½ÙtmöÞ0vïʼ¿eGÙ ïÿ,}åéüRe<¡VIDAT]ê, ôâ|ÐÎ9VËÿòþö6óy]×5#áú,^0Ó«X0MSO&—­^wÌÃ:9bû¶÷¯¹v®6kÖåÿ~Ñ™#G´Û±S†ô|r«çÃ_N@ö¥·î£I÷×0-MÓ,Ëþ†¤f‰ï‹Õ ëƒã÷‘Ç~úÀ˜Ôß±DU›˜o»ýÖ%‹ï²+'vv¼òÊŸ§ŸpüŒSÎ8÷œóÆuì]½Fû½éš©t%ÆúöjCùàø}¥»Ç:û;–ªpÞõÛד죴¦Y7}ߌ‘VÝÔ“‘~ü×Ìç»L]DÞ^ÿîçýoé9­Ø²qó2'!"º!ÉT²÷§Ëœ3ûƒö(D§fIDATÉ‹¦¹³[÷éŒÖûüÉž½ø¯#׿R1+9ê|õŒ3†´ »ì{—<÷ü3_=ã«7Þð‹:?:¨­5UýŽêǦk/ÖB±ßJÐåÖÆàüþŠåº˜dÿ·á½Ü^cRyѤñkùš=—t%ºÓ‚nˆ8÷Q’IÃn±çó^âä±z>¦9WÁ´žOˆhV¯3˜î´Ó¼ovܶlÜô§%¯‹HRÅÏ<ÔFÙ˜-ž#†ýë§xÂôÍßëŽÑcÛ‡ k1j˜‚ªë¸éšÙ¼iÓË‹_—Ÿ†ï­ysÊæM›_^üšˆ$¢}æsÀq®!ÙÏ4û|À’Ýç~wÐM×nx¯=n……âséŸIDATÖÝç~7‘LعÂÒdÏïz >"ÁŽÕqèÔöw±Õ&æ„aŒ;bÌXï×J»éšˆ^ÿjΛ~ìÇþ[¾;è¦k)Zχ%ôÔ`÷¹ß~ìÇ܉cèðžqæÓ©ä;o¿]rV@ƒúì‘’#ï¬`ÆL6ëN#GgÄ­¥o¾§$8@:ÜQ–¿õæªUû5À€ÔÑ1úðÃ;£$’‰áí£¶¾òÆ%ŸÕß’«tûÇ>ÐþPCÕG14 2 @ 2 @ 2 @ 2 @ 2 @ 2 @ 2 @ 2 @ 2 @ 2 @ 2 @ ëæ“IDAT2 @ 2 @ 2 @ 2 @ 2 @ 2 @ 2 @ eeBǸ* 12Ê„Žqî¿Re¤D¨Ÿ,d¿¨ŸH /±J¯^µ¶êÁ€œxÅÏóþzBÇ8ûxmO÷»Ý2þ)þVçu?-Õ„gzÙ UµRƒ¿Œ'<XâeÿÁÑÜtðpOtÏh…=SÜ–zê<ö§Šð饂TÞVH S`àR|Õ«/õvBÜå"» úzÕK¡F=’6êr€G=~¥ÉOVuñ4¼ ÈêUk»Ðþ»Ó¥&ú_õð¼R2–ð UdÅòŠIDATµ¥†ðž€B›5ëò›n¾bÞ¼E‹žxö’‹ÏêïxÉÕ?º}ÚÑSO:iÚ¹ç\UW½     FŒï£<±hQõâÔ¡™3ÏX³ú툅ã}ÃñµWŸ`@ºòÊËc•ý»^?ýÙíqgô»­[Ö 6Ú0’ËoÞ¼N¤«‰:ú¥H@UF2“Ù•Ëu‹Ó4-Ë´,Ë4‹"bY–ý¯i† =xp{6»;9(«~2 4‘\®+•j1MÓ4‹–eÙ‰DÄêašfqÇŽ­ƒ·çr]3£ðY/h"=g'VO:”:ùØIDAT±³ˆ=ÅìI0""ÙlWÜÊ9G€&â:;Ù“?ì)NMÓD$ŸÏÆ­¼’s­‡çqôy+h´>yº¢lÉŠ›(õRV¬ÔzׂD)«ÝÊ¢;WHUþÚëo°-Ç4‹ö‰3eÙ²¥öÉJÏ_·B¡·òJ2ŠsÇóoôy˪ö>©¤~MÓœ3DzFï¢è3V\g_" \ïÎÕX×eÙ€ðªºÍ(™ËϽ–£4Qã•TľØe‰È²eKEdÅŠâÛ7MÓŒ[¯Êû(ž7¡þ—ßåù_ y'X^|o“ËÆ·þ²ÜG÷ì»Âó¾ls!•„7êïêÊ–×-â¡¶ïú¸¾B“òIDATú'JùÀ~‹yôõTsKÓ4;ØV¬X)½w^Ëê׌âDéyÛ®•x/ïžî~Éýn×si/°¼gzÄ8£×ROàá ÷*éO`W”êŸð¦KÇÃû¿/ËëÌëðg×Ü÷Sv¹¢¬¯ÀzBÊ—ÚT"niáqÆÝn%œ­zéÒ7ì)“&M²¬\¹JbnÞê?ëŠg·Œû­ÔÜ=½–;gÜ#rÙØú~p Ì4¥ú§‚7Èýu l±²ø•ÆI½m·hföþëœì·ßþš¦uvvÚOí¤Òs7%ö6ÙŸŸ®à=šÕ[àôè—æQªJõ§òÖC^íËúªMü}Çv‹z`n/?IDATbY–¹ß~û‹È~ûíßsiËêè˜ "*¸Øå¨uF)µÛ„ìNe÷´>îŠÏå­±§@”¶”Y8TÕ§ðõëÄ ˆ®ç=Œ9yòd;yX=„;:&Ø)®øýY…ßG±|·=þéžÂÎ9~©é¥ê÷¿s^ò¼ï®,~ÿû÷ÊêqOw–«²véNmáÓ%¨ÿ¥Dÿ„ôg ­ç6µ3£ûZMø”ÀÇ!mEi7Êö±BÚ œ%ÖzQ¸ÝJX–é>:u®ð4¥òo8–Ú§{Â-û8J=e# ×÷ªœãExý/WÓ_ŠU8DÈÊ*;%|ÞŠÛUÒ?”T²¾Â#!Á JerÿIDATìïÌkšåyß㜸Lì³d•ß™÷¿KE-Ñÿáè@D†³cÇ×ù±æÜ·w Ó,:RDR©x?ê%j3 ;jÿ¢ÿÃÑ?ÀÚµKÇ;`ÈeK¾õÖ+{ï=‰_³ko»té‹»vm/ …B>è~‰¦ëÆ Aƒ'O>¸«kgÜúÉ(к²­¦–½×Ac{>Lh蚦ë†.š¦Û—Á4Mw.ˆm{¿˜l—Tø5{€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€ø[á(IDATd€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€dìúÐðIDAT€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€d€‰þP ­é®¡CF2b$ëSÓIDATùtª+ndh†‘Ìdvår]ÅbÁ4MË2-Ë2Í¢ˆX–eÿkš…aÃFÜžÍîNJǪŸŒM$—ëJ¥ZLÓ4Í¢eYv"±z˜¦YܱcëàÁí¹\—ÄÌ(ÜG€&Òsvbõ¤;‹ØSÌž#"’ÍrÕ PšëìdOþ°§8e4M‘|>·r2 4Ó,š¦é™hŸ¬x& …¸•sÕ š%b-]ú†ý¤PÈÛédÅŠ•Òs‹^Dü‰§,2 4û—N–-[Z,4M³,ËN'ö¿6Ë"£J³OAößÿûéòåËEdåÊUöÓ‰;\‹ŒMÄù×vIDAT”×~ûíoO±“ŠˆLœØá”rýšŠå\Îr’ŠˆttLp¾’RqÕdh"NÚ°ÿ&Ož,"íO Û)®øªŸ€æbY¦ût¢³³Ó}^Ò—Ó2 4û;óšfõœ”tÿœ—svâ:GÑâVNF€&2|ø˜;¶ØéDDD4ç¼HL³8tèHI¥âý¨—Q y¬]»tܸ† Q¶ä[o½²÷Þ“Dбê'£@³ho»té‹»vm/ …B>è~‰¦ëÆ Aƒ'O>¸«kgÜúcg”­[ÖÅ¥+Ûw@ˆÖtìÞ¾ÝÙÕÚ²OkË>e o|oî!ivIDAT»ˆ´×DìŒ2tØèèC€‰ÈæÍëÒ-1ÊÊŠ5£ˆlÞûd ±3JÈ`Rb°ô aŠ£€æVÁ¡X¤¥ÚQUr¥Ô`âúîŒ{°ÖAJCÄ?kõ™Q‚†³–-[j¡ß? ˜ëcj5ü‡â¥KߨÿzNP¼‡â–t{µCª$£ø‡[¶l©ˆ¼ùæ²ÎÎN§˜3 ”óŠíãð²eK'Mš8 cK쯗ÄVYFé5˜½"ÒÙÙ8 ˜¡“Q@1Ï¡xÿý°ÆË—/ïìœè)\Á€Œ¨øû(Ý—ê\éd¢3ѿŞnš¦¦ó{”P ÝG4 É IDAT]ûIggçŠ+DdÅŠ•'vxÅ5ˆ¦Âs;m8édÒ¤Iötû©û„˲Lƒ„ª9‡bûºV¡×4mÒ¤IÎ Z®ñN*±ÞGqlyóÍeÒ}’Õ©iºôÄíúõJËžPÈ9ÛOuݰ,ó­·Þ²ŸÚéÄ}(®AH•]õ²,Ë´ó„“TV¬XÑÙ9Ñ9±rçCnÌ@ì9‹ˆ;ttLp>ñUË€*9{°EDV¬X©dÌ@YžC±“NT ŸU ïÌûlY±bEïkv{ÆláªTƒûPlßAQ8|V*ÿ†£gÀ–‰;JÙÂ÷Q@9ÿ¡xâÄŽžƒ°½©eIDAT‚á³*PIF °ETŒÙ(«ű3Jô[dϘ-•*8ïÜQõË_±3J„[Ä3fË{·õ=P€£‚Cq ¢Š—Q®¼òr³°sï½öÙ;JùBîý¤!ÉÖZ, 4³ qÅq‡Ïª@ŒŒ2sæÕ‹0ÐÅÈ(kV¿]½8ߨAF¨AF¨AF¨AF¨AF¨Ñ׌2¡cœ’8–ºZêº @3‹Q&tŒsþªP-õï"4@:iYT,Þ¯°Lè·zÕÚ*…R{´,Ðïbd”RéÄyê¼ZÁú=ÓÝ•¬^µÖ‰Óß„gÂôIDAT»õX%K-BàãðôwBH á­K á}ë~Z*÷ôÊ–…l 4¡ Çpt+u˜Ž8EÊšc½ä8£[”’q‘uF™qYëå\^W%ü®ŒBž;ý3F©°ï'+}©M­ˆ­óÑ/ 9Å;Gñ$•À#©»Œsþ~¯Ø_ T‹!÷óCêŒpÙ†"ÖRfõªµáå£DXªpô~Pµ,4 1h³f]~Óì&@IDATÍWÌ›·hÑÏ^rñYýO õð¢zˆúÑÕ?º}ÚÑSO:iÚ¹ç\ů°ÔÀ¥Nê!¨8£ê    FŒï£<±hQõâÔ¡™3ÏX³ú툅ã}ÃñµWŸ`@ºòÊËc•ý»^?ýÙíqgô»íÛâ}ÛáÊ+¿·‰~ûía@ õ7÷æÎ½»‚úÉ(ÐD¢ß©Ÿõ¨AF¨AF¨AF¨ÁyhF£öõñ÷Ô9G€f8\lë$£@“r§%£=‘Q yÙ‰DÕàdhj Ç¢%£œ=$^IDATÔ £Ô £Ôàû(Ð,*ûEáèÈ(Ð*ï$®xåÊ+/;f  Ä±12ÊÌ™gT/À@#£TuœÀ@Çg½jQjQjQjQjQjQjQjQjQjQjÄÎ(:ÆUu– ê¯7ö"xdà.×À¼®Ðhå3Ê„ŽqÎ_ Ðê¶‹üI®âP£ÏèÙrü­{6*µ½W›uQ·kèe~{xBǸի%ªºí«ÚÖï[NÝ®  …e”Rç}™ój”)î CÊÆeÆÀîEpWUªÂ8yIDAT Äý ü0±òˆËå<µ—î.Pêq`l¥¤ÔŒ±„tšÝöC©µYvƱÛÅ×Qe7- T2*pà1ºÔ‡ÿ(\ª†Êf ,`…QêýI©å Li!Ó=1øã ‰-|AcvRšSÞÌ«TŽ \ÒYúÞíSJÓï§k@ͨg¾ìÕdÿ¾½òð+Ø]£œFD©¿ïY§~®ÂW#’ˆ‡ÔR}˜BÒ[Ù†j€Ì&§&£”Ý‘<Ç…Šw<ÏŒþ«7}TíúÛëGõI¸ðÌ$Õ\YÊ û¬—ûÂED!åk«ø­qøÕð¾ ¯ß •\kì“’²lIDATGøéHôòR:ÎúÏ%õ³®åÊœ£xvõÀݵÔsÿ,îë¥ÊG &ðægÜš=åËÖßG{)J`•qêq×XH¿…Ïè_Ø>ÆØt`!›\Ä0*èvwoDhTÚ¬Y—ßtóóæ-Zôij—\|VÇH®þÑíÓŽžzÒIÓÎ=ç*~…      FØ÷QžX´¨fqêßÌ™g¬Yýv©WË|ÃñµWŸU`@ºòÊËà ”ÿ]¯ŸþìöÊÚ¾pöYÏ  ìtè¿ gŸõ½Ë¯Ú°eçc<¿ßä –%"–»€%¢9öH ƒIDATÿZ²ìÍUŸ?~jÙj#ýRäöm±Fâ¡ß>Yñ¼*ÀNˆnñsúdÑã/wìÔœTv–Î7–/z|Éé3Ž /õ·‡·nÓ"–T;/€ °Ó¢[ü¢¤»Ø¢'—”-¦æ×ìT¡X,[&aQª"£@SËfòeË$Úê2£T{\ž "îwQF¦);8P¿ª¢c,Eïjw$µïÒL&ç~zÒ ÿ4ïw¿÷”ikk‰RU?œ£0þ6PKÎ`?}ßÝlŸ­‡cQ=tiWמŒrÚŒEä¤þéÞÿúmUÕËwæ'tŒ³ÿJMñ?u—ôü[vv É•Ý¡œ2« ¬5ýt˜IDATÖýjHu²cF<†„¦ü5H‰e¤–]º»+kÿÙéÄvڌ黻²«ª‹û(î,í òèÎÛþáõT6;Ð$ü{„{|Uç¥ðñ›‹ùw´uM,ðâ__Îeéê¡K3™‚ˆ|ûÜÓí§?¿éûñ¬3OýùM÷Īª2Jàh©þŒZAׄwt¬ª€Ææß#Ê^ÁwŠ95„ŒÍ=Œ~L*á‡òX58B†N/ÕÃýÞ¥ù|þ_gÏ´_ÿ³¹ù|þúŸÍµ§|ûÜÓ¯ÿÙÜèUõÛ}”ð»…î2J6¸z{+ô¯jß‹ŽrT¾›ÇÕ÷F«vmºÔ²¬ën˜ó μî†ÝqÔ)IDAT9–ÕýÍyÿ”(úí>Šû\ÏÍó±åír²¸¹¯¿—Ú+«ª1Þí•í·ˆ§€JTÖÊu7Ì);¥¬þ¼ât±ÿJ¢ç©¿@ø¦ï)x¥hZ{œ{Ïrï5¥®N{öDÏŽæi(ðÕzÞ+eK5„/]ƒui­3JàÕ­éѧÄz 4›è;HøùðšÃg©«½2î!¥‚Y<ɸlïN@]*õóéaÀ@éÅù¡Ê ôe^`§ ÔÇn™3çW}„°³WÏÊU:tP”bQj+ŸQ.œ}V”Š”Ï  ìtè–@ÿüÏ'Þyç¯GŒQ¶äæÍ[NýÊÉ"»Â‹Uqú?ÀIDATÄ-Y³úíñö­xvq±Ó¢[ü¶nY×><•L¦öþÀ(÷ôbÑ4 ï ‘;v¶¥3eë,ŸQB†Ž¢³ˆ‹.Ýâ1t¨~Ë/ï?ö3S¢ ‘2~üòÿºÿ #nõ%±ó¾¨1vº@t‹ßÖ-ëDäÀ'e2¹]»2Ò3PJ>[Ìdó"’Íår¹‚iZš¦ü±zq둜þ…óŸ©M€2,MD,±öŒ9¯ižñçÃÅÈ(ši@ÍR_ÙÿÌ9ÞZ¼õèyÜxIê‚&b'û‘ÄD¹FßG)Xše‰ç/Õ6²câA¥N_5eYbY–åJ$1ÎOD*¸êz-VIDATò«a!'1…¢núfLµ‘ ?<ïúOŸô¯Á×4-Öï”õe.ÏNdïÝw+vÀd媿ïØa–zU×u]×Eá÷Q¢(»åM½P”!×üGfçî[¶ïÚ¼}äýwüè·ìWÿºì8%aPËÞµÝ;8Ù¢‘œú•ésï¸ß÷}Ë{½K“mÛ¶~ýŒÏ‹Ã+TQ¢Ü_É›š)òþw/‘¤Èp‘¢+)拱¯Ö¨ò 4Œ®lkºEûú™3tMÓ4M3tMÓuCMÓµî{*ºs„oã¶Á­;Ãë¬$£xÞ°D™%_Ô‹EëKþ¶u{×;›v¬ß´ýšóÿÆîP.4IDAT¸ã{_¶_ oÎ~ào4dŠ?ÔR†?:÷&í¹x²+9OÝû…û|¥ì¼hBž£8çÂöÓ²ß\Q+šÖ´OèL)šÖ­—žR4-ûÕy=§ÛþðR§ä¥Ò‰çêpÈS 189Àý ì®ä¯Ák^4ʯzÅz/Ÿ+êS>pãÕ™»·]öwÜûè_V¼÷¿+Þ{þîïØ¯VFHx•ÝE$©Q6àWIF‰uvbË›ºiÊ;ç]""bÊ×g|öë"Òs7¥`ªÏ(ž7M!ÅÄuFïyª<* a°ƒÀ¯Âs”ˆÇkG¾¨Më¯~½q÷î5Ûß_¾mëò­[ÿ¾ýý%_ýµ±=‹IDATTçE|×|C¢uçHÿS!8­‡£ò«^±¶¡BQ3-ùИ¯x¦wŸ£„ÞGñœùÏBΙü™ÏS˜ÛòhZá»RõæE‹Q*Ûhò¦fß„’Qìe?ÑèI!SÊÎ4g«yà/ì~¸ËðÁbøÕè—"‹¦~çõ§Ú›œÖóÓc–eÿ ™VÁ¯ÇêMŒŒÒ—7 ÿqÝï*ž0 0âÐhØéÑ-Ét›ò:q h(ìtè¿uë·*¯“·j0â@ Fܨ;£X¥…Ìe¸åùKµL¶´GÜ o´Á¾9å^œÀE«`yvQeU5Ø:‚ÿGˆ£“ïIDAT¯b6†¦Õh#nÅú⸪*Y'xÑ  #n!–fq‹}¨_ŒG,cÄ­ÀæÂ‡ýñüаg@ù:ýºŸZ¾1ˆÂ+»heg™â®30ÔÀ2þcDH¯† ß„úĈ[¨™0â–§Qç±JøOxy¦”&ÈRXaே\p OÃ!FÉ_OÄËe§‡ôjÄßuF=\e±¶RÏ*Ž»…£I ø·ª±í†"ýÍE/Ù÷¨ÊàÈŽš!mÀoÀ¸¥ür9(Ö»°*^€¤‚šaKƒ_㌸¥ö`j©ìAùQ>ü*V >Õ¸±åÀQï#nyîRø¯ízΖÛ(iKIDATÜ÷£Ü:ö×¥Âðª<%=õ”]´ÀhÃ+ôÜä¼ËÒ{Ï~¢”Äe#©Æ¼h`õ>â–GÈgTüeÜCnÚ{êŒXaÙ§áõø•š×gÄY¢P¶!ÿÄRH6u+ÊJôv?­`ƒDs`#nŽÓ_u@ª÷·ÂÏ ”è¯DBÐ`q h4ìtèFÜP;] ºÅ·õ‹·j0â@ FÜêîÅQ»hýØQ•5Ý`k¶‘ø¿}e±Z›#nŨPUÉ:¤¤¯BêÄUêWŠû7*Ô-FÜ‚}_ŒG,Œ¸U#n…æn+ðA`§•­­T¿ï®µIDATù£ 2J£žß€â'Âj,¤óËn¥þm»ÔæáŸMˆ·êbÄ­²Å:þ†·^*TOð¾ )ʺˆ’¡\`çÇÚJËn¼ÑDãaÄ­à:˾÷wD/YA¥b Ü{ãf>†‡&Ç&?FÜ ®0ðÊL¬wa},b 4ÄÛIô§˜ðcÄ­`–ºÁú˜]ƒ»ÏãöõÔIèGlp0âV]Œ¸XÜÝ5¼õÀñ÷U_(U'êJ”­´ó¢1âVð‡ÄÊVXöix=ÑcŽ^ôyà ”ª$<Ȉ¯†¬TI”Õá/ì~ZÁö‰æÄˆ[Œ¸j0âV¿%€È[@)›òIDAT£a§ D·x0â€2ØéÑ-~xÄ­§þ$púQŸ»¨6ª­v#nvÌw{ü!ÖøK¹Qšó—‰2¥ø3.¶Þ®F÷QòE£X”S?ÿÿYöwO,)šâŒ¸µò±[¢TÂÖÔ'öMØj—QL‘ÿYüf¡`æò…L¶àœ¬œ3cj¾`D©„M¨Oì›°Õ(£äŠF±h}úÉÝ_—w)šV®†P{ºÿgÇ×w\IDAT£Â‡r*)UÆÝJ” KM _„¶¬ÞÃùøçõ¿êÌ-®TŸ”ZRŽZàfæ¼ZjS”È›\©‰RnÓ Ù­0@Õ*£EÓzæååþs”oœrx.Ú9Š£Ô1·ÔÑYJÐUöçcUX‰?NÏã(Jíð¥²`¬åв¤h0e7Åè›\ø,á›[ƒ©Ù9J²`ÊáOòL·DЦäŠI%­D<]ðO)uð­`û9 ñWèìNþbe³”;uàÒ6¢ ÜýÛ¿+­ -ÒF«Ù9ŠašòÂÿœ£œqâá‹øN'ð‡Âu¸²·NþúÝõÔì²\@DeOs+Û\nÂPIDATÀØ XÍîÌ'Цõíô¿Tö>J•xôÕ{ßx¶á¾&à$𥊛ö´ ÙÞJMïãŽÃ6Ùxj•Q †iɳ/½á>;9õøOY""ZÈ9Jômοq‡O){«^Rj–ðW£L |ɼß2ýsE‰¼ìrE¬Êß™ìí @ù6Vê¥X›V©Ú0pÕjÄ­¢q߃Û[Ž0âVµ~ ¦âsÐuâªÑˆ[—}ûøÊfìãá¬þïÖm‹$’Dh»IDATq1âÐhØéÑ-Œ¸  vº@t‹#nê#nÔ`Ä-€Œ¸¯9÷ÏNTã7Nú¾¤÷=äÆ["”ºèq+†Š<¸Ú‘÷{ϠɱÂÆˆ[úŠ}6FܪdÄ-ÿU¯(ÕF)¸øžEˆXxyý¥~èÌyØ„ôî7÷ÊŠÒ!ªú$¼—¼yI⼸ٗZG¥VqÈ,ž†üe$t]c`aÄ­ G¦ |5¤Úˆ…w­0¢~[ÈýRàa%bo>(CÙvûÞ'ekhre¯ß–Ê1þU>KøzaM5FÜ*^UÓÑ —ýM­¸;^ø‰—*ž$3r˜IDATCàSµÁ ËõóØ!Ç÷5ëº1âVÉOmÅzëk×*[8¼@Ü÷tže¬ÍõŸð~öw{3_•ª[eOßwœ¾T‹Ž·D\7 ÔV«¶p)\ÆXBú90¤è×è VÈÒRÓû¸Q±B#nÅq+JÓÎ;n÷Ëu[;¼p ²åÝõ—=$rlÑ£ ©Ö_8¼»—1zëþš\e]¾1¾eû©`]caÄ­°ãfHá²õDŸ7náSü U¼ŒÕ–êí¾<­`J”îum°±EÜ£¯µ²ÛIÈ,q·TIkºkÃæ=òü~“'؇ ÷«ÎZ±,YöæªÏ¶,ÛIDAT?upkkxŒ¸…†ÅÚÂ-züÅãŽzàÞÏLùu¾±|ÑãKNŸqTx1FÜRÙ\5ÔaHÒßQE¿ZíH€.J:±‹-zrIÙbŒ¸4vº@t‹ÇС݇ ÅbÙ #Ò½ FÜ ;] ºÅoë–uöƒl&_¶p¢MQFQ‚· >e2¹²eÚÚZ¢Tň[ÐÔººr"rÚŒïý¯ßº§û§”ň[ÐÔvweO›q¢ˆœ6ãÄÝ]YûÏ3%bU±3ŠUZÈ\öˆ[w/øËíóþtÓ-ù鯞1-+Õ62Ù6rtaõ£ßÞh¿OÒœ¦iΫîÇ5hºJ58KÁ—à `ÿIDAT6ÐïØûE&SøùM÷Øgyj&S˜uæ©öÓŸßtO&SÈd «bÄ­Z5îŒÕЗßì‹òÝx>†‹pl$Z>Ÿ‘ë6÷_gÏ‘oŸ{º=ýúŸÍµ_ŠŽ·ôûæ€æ¬¾ën˜ó ÎtW°Zq+ì§½JvW½Ú(…ß³ /ï©ß==¼òÀÂC l5à?·\wþóïÀ]#ðÕY< ùËHèö³“Êu7Ì©lvFÜjê·$è(^y¬ÀÊ.úKÙë·¥rŒ?…ϾI°‘Ô¡ŠÓ‰0â–”ûùt…MG/\ö©*¸ýå|¥²ÊÑœ#{øŠ)øÝIDATñÝs.[ñÝ»ŠãDcÄ-ï%©¸VÛÇÂáâ¾§ó,£ÚÊÑÀÊžÚî8}©#n‰¸nɨ­Vmá>RµŒ|ª§Q…\ -5½ÛR=X¹êïC‡ŠR,JmŒ¸ÕÔ#n…/KÙÊËÖ¬0U£b•­ÿ†êøRø,¥Ê°‘ô£þçï¼ó×#FŒ([róæ-§~åd‘]áÅ´Y³.¿éæ+æÍ[´è‰g/¹ø,÷kO,Ztò‰ŸîS¼€2tø8ϯ8_ý£Û§=õ¤“¦{ÎUaç(3gžQåØ#,£0œ ºýR$ á‘QjQjQjQjŸã¶êIDATQjQjQjQjÄø¥Èñö­^õàÂÙg?û ÷”&\d¨X¼ßÞ¾mm•âèwýöÉÀéM¸ÈP™Ø¿f¿u[Óýît.2T€û(5úaðDÔ³'-*[fæÌ3ø]j~dx½öê³!¯^yåå5‹ÀÀÒÏeBǸիTÞú¶+T^mUÕa'üôg·—z©6UˆüÀZÑ@ëî}” 㜿>ÖÞD_*¯˜ª¥‹Þ\x$5ˆ!$€ÀÇšJÏQšáý£³€Í°°QÐ@3«õU/ç ¬ç¸ãŸî™b?õÏå¼Ú¿2÷U¦ˆË" × ž¢÷ƒ« øÏIDATø*z%ž¦Kõ-€¨bF±²Îcé}Ä ì?8”DÙeiÔN(»˜ ~’¥O¤žr*Ðäª{Žâ?^”ºÈÞHßýËRêÍ{Ù´À~¨F+¥2€«õU¯R{{Gûðä¤êçPxbá¾`Õà?ðGRØÜí†\Pýöy%ïÓW¯Zëü)Š«B¥®Æ8#l°Np_çt«öÉŠ§Ý~ï iU÷³^Îcç-dàSÿtÏçi½,ü‹x÷Èý´ñ:ÁÍ9c(»8öƒðé+’ Pª{g¾ìD÷8bÉðá—•ÔŠxñ*ú¢ÕI'\yååq¿Æxdz¤‚IDAT±+ÊU¯²}>KøE65Ư° —™3Ïèï TdôRËŸ€ä¬h0üš=@ 2 @ 2 @x÷Qšpdò&\d¨LŒŒrá쳪G}jÂE€ŠÅÈ(çϾ¢zqÔ§&\d¨÷QjQjQjQjQjQjQjQjQjQjQjQjQjQjQjQjQjQjQjQj$ú; eBǸþ¡êV¯Zë~:~¾ýIm\8û¬óg_¥$€b–eõwÕráì³n¸½GéIDATñÿôíÛÖú'6†‡~ûdôÂdê5ä6üغu›V³Hê@Up„mBÜ™¨AF¨AF€†UãÞqÀã%OñNèøx`qýè"Q $áÉc@§“¹À€á9ì®^µ¶aÎN#÷œžÄ”*Ó/]AFÐn: áO–ž)ž¥î÷üJF€:UÁ}õþý2 €FàÃ>ÐyN8"ÎÕ¿=À§‡ vÚpžÞVé¸úª‘÷KWpŽ` q|ýïÇ'©¬^µ6JšñôFxçÔÀ˜HB^(—KJ,fH™À:«Š«^Âcn·IDAT5È(5È(5È(5¸3@½XCÉ¢aQ(váì³ú;„Z#ƒÚÈ(»áÆ;ú;„šj Z €J÷ë ;öýB½àÎ<@ 2 @ 2 @ 2 @ 2 @ 2 @ 2 @ 2 @ 2 @ 2 @^¿Ârõnï¯8ÝžŒ2íè©ý` ëÎ('4­ã tÚ¬Y—÷w €FðÿßFm|©ìIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/compare_revision.png000066400000000000000000002231751203611042400325310ustar00rootroot00000000000000‰PNG  IHDRéxWœêº pHYsÄÄ•+tIMEÕ :ŸÄ/tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœì½{xW™àý–m ÆŽC—·mB+IWs} ÌJ,GfQ7ãè´6R3ðÀZ™´ýÍv˜ÙêÞb‡lå"+ hˆ“µu)0Yºر™‰ÄÆ0$\¦«2é ‘Ü"'¶“ز%ëVß§îuªºú~;¿ÇÜ}ú\ÞsêTÕ[ï9õ¾ÌÔä48ùÊ+ét( …D0¤— …RI‚Áà;¯ºÊ˜Âhº‹¦µ\}õ†*ˆF¡Pjž?üáþ`¿”P(J™8zì˜/;Šî‚—÷¿c…£P(õÂsÏMáT‰¡P(•áè±cÚ‡™šœ¦Š …B) ¬ÄP †B¡û¶äóIDATTM}a~ù˧¼(.ÿuǃÌÊU+W®¼ä’5«V½yÕª•+V®ºçëÿ©"ÒR(”šæ¹ç¦¨úB¡P*V_Vá/ Ã3Ý´kìѽ°øŽÐ}øò+/~èW­¾b­ÿvm»×©…Bi*üþMét:M 0 ¥"0CCýþMƤ›¾u VÊ™¥™×qÊ£{;º¢U»ËÚU«Þ„í.÷~ãS•—˜B¡Ô,’4IÕ …’/w÷Ç]~½=Ê¿=vl1ߣß|;ÀÛÁ`wùë'?¾ë¨1Ï/÷nøT‘âR(”ZæG>ˆ?|î¦[Ý1ØT}¡P(y²¯ÿ{ÄôÑìð+IDAT¯ØWmÁh¥œa˜wàÏ?¼+„?¼<·6\¢g{lnu¬eî½ vÜì«n£.b”Uªt¿êÔc¯kXf|AÙýÊç;¿?=¨¥¯--ï£ê …BÉ¢Žâ„Õîòùo¤ð_MkÁœ;÷.xë Ù’¢0qWè® åsë7RßhÍKâ’’îë;݃Þoß6L³Ã}}‡²¾îÁo¸–²ŒÕÍùË`Íœ—=U[ÎR”²R†ƒ²¯ÿ{øÊâôld„ª/ %_ò¶»ùá]!»â/Î_úíÛv˜Ó.Åÿeîëöíþñ±Â2q×]ÐZ5å%û‹qhm…‰‰pû¬ÛÐs uOø³{|Ý÷ (ÎÓXo×~¤µ°}ô¬3ß|P6 [úh™N–Q"õÝ¡#7¡¿ÐÔÌÎèWnBAµ }P4'Ôn@v‚4V–q3÷n—­ªÖn]`r—õÁ‡ìð¶½XRûZ‡ÝPíÄž°³FZwphbWwOkxbÚZ&&Æ[[w†Ôj³ßÞ3áëÁ‚¦SIDAT€Ï·!;q&&6´ú&& ­5›_y‚©f‡)’Ãîä¶ìð6óÏ=å¬ÇÚ6 Êà·îN&wg‡·…ÃÙÖ]cæîÆÜr(}‡lGJ+l=×¹aï£2œG Ë೜PZCU_(J9°ê.š—w¯½òª5+5W.nuø|ÖHÙì _÷­¾ÖVßö‰ñnøZÛ|àóù|Ê¥8NhmmƒálŒ£¾,àK¹Z3LŒ‡Ã{”–ZMWÛìÄ8´Þáðµ¶íÏv÷ê÷µ¶ú†³'|­`xOx/$w)&"S_Ô†ÀòLìËf³ã t*7Z=>Ÿéf`+#„ñEµ|IDATÞù«rì²>ø†lö!µ»71…·6ÑÖÚºgbbwkëøD¶§»•˜ÇУ‰=á½°Ë¢µ¶¶g³Y_k·ïÐðø²'|>y‚YŽj"òùLG<;|(申k÷Yçë¾?Ù {;Â&£aÌ͇2K:R*ÖÑË»Ï kÁé44Ë`)HâQþË:4ÞûâÅôT}¡P(eÀºf´êÕÔïúÙÊ•+W­|óª7½YsåâòJцìÄÄtÉœ€sþ2ÚgëÐsâÓ÷î™øä`ªÇÞ¶Çœ‡a_ÏýƒÝD àÄ/&²Ùì¶ð°"Ø/¦oiµKÒvGª `âÎPx—¸ž4IDAT´Þ‘ÚÝf— ðÇY {7M)`iTIÙàÛ=ä0V üµô.;Ÿ/{¯©Ÿ˜?ÑÚÖæ\\gb|Ü×ÖêÀqYKCÍ6²ãÙ¶Ý©Ÿ¤R?I¥~²»õÄø„±¸"IvøÎá,@ë©Á[|YÅÞ=‘µ×gÃ×Ú¶¦-³'¬›h%Œ•×ÞÛ%uÙçóeÇ'²Éí}1¢ »VmN1²ÃÛBfÉÉMøZÛ²ã{Ƴm­rŠm»S?Ií†=¡Ï¨õohmƒC‡²m­À×Úãã°Ág’Ði‚ùºï€=Û†³@<â–¾»kÇ™¸3úÌØJýd·Í~’«³@ÐzGª²ÃŽå³‡¶…’³{@/„S6´¶Úžt[ïÐk0>‰f'Æ¡G¿ƒ´¶µí94‘mÓë÷õÜ?Ø 0‡z?s`CÏàý>èîi Ý mhmPôuÛÄðõìÖ›nÛº£U-ØÓã;thÀwËàî àØYÒXe¹ôn7©ŸQ`{—ïØ=þ™ÞÐÿÖ$'ô…0ìzµ=ƒ÷{Ã"é¨mhmË:у÷*;ä±×Õ3˜ê‰;{‡}ƒÝ|>ÈÖ\ýY-IDAT6ø`||CÏ2Pެm÷îñPï6èñ™ŽøÄxî)g;Ö„Y—=Ô;Þ–Jݑπ˜iµ)3¦ÑsŸ>Xúh-â0JÖ‚)ñµC3±©¾Pë …B±cñœ›fhèàu×ùµï~oè–ï|ÿº·ÊÆLßìýÊ­_ùri´=ôßî„;îïqÛB)9%öñ=ÿåï»ut锫*Ï<#Ñ  ¥1H~\@såB¡ÿVÇžqðÝrÿnªPƒ=PJ¥$mÒk$û¶ìk˜žšœ>ÍôaQ¥Œ`zj œêëü¡¿¤¥O*?¥ü·ÅN ´ô÷'½JB©7¨úB¡ÀÒþ'/t—%Y^Z†ÅeX\ò¤»X/›þÑŽäØŒ¥R¡ñÒª¦·~Ñ"IDATz[)!ä÷ŒBÓ!Àk½Ð1856ýìßíp¨OJ¥`ç§_íhUIR’©MÉ>å‡p@ŸWþë •¤Œ_iÈßö÷§RÑð‡C~hñû[”JqœÐ Á~I€ýí[öIjå’wI(õ†,Ë ÃÐ7(ÍÌÂòŠEYfd]yY\†Y™™÷¦»€d½l†Bá¾Tr #œJe¢ÑAbíâIo+ô¶RB\ß3ꜚ UjпóˆºôhÒ¾ýþ)™*¡š*ío×V^‰K¹N’Pêj}¡49 ËÌÒ’¼¸,/ì.ò’ìá…Sâe³cGTJ¥ 9&…C~—V ·N*ŸXIDATz[) ä)Û®™õ$)£)§i{•š(%%ð‡B°¯ŒœÇšÙˆßß"Ù *„£Qèߢ-¬Bª¯7eÈ/%¥Ž§©0–JaeYU™ó”„R¯Põ…ÒÌ,.2K²üüÙ™ø?ýú¡Ÿÿ;N\Z‚ÅeyyIž_t-,eT[‚ý²Ù eÆúR™PÈï˜W²ŸÞVèm¥„8¬I½7õ@KôðQ?øwD;Ö÷mJöw„TK›ÇèæöMëû°… çØÙ¾eýF\ÏÀô@‡Z0zô@4iÎl$ûÊë¯mþ`ËîžÖ¥e™Yt°»ômZŸh‰ôûÉ—MG8ÓŸ‰´øw8^Zý¡´™ÞVˆ’P €:Ȳ׀ <»ù†ª-Oö·÷Á:Qšƒ›ÖßÅ0Œi9Ÿª/”ãè±cÚÕÛøYãÐ}7ßòõÇñåSx×Û@`dF~èÛí·ô=\a™ëz[©GÓÔ€Ò°0 £é1T_¡43‹Ë°,˲Ì\{Õ•Ìò²r^,€ ËKUŽBÉŸ&Ð]ü;Ž®¶ ”Šc±µP(Í̲Ì| ÝÝ IDATϧñ9!0ê_VÒ“%_èm¥Ú4îBi>´}-ØôBwºPšœ¿¼}¸Ú"P(¥„Æb¤4TM¡P(”Ɔê.”Fè¸LMNãÅ#úŽ4…B¡4 Tw¡4ÔâB¡P( Õ]( 5½P(JƒAu …B¡P(õ„é=££ÇŽUK ¥| Ħ—¡¡ƒt’S:É) IwùÒ—n­–˜Ñ¯ìëÿ^ue¨_èè¹@œÛ 6b Ö¦åµ3/¾|fæg©_´ø7Ê2(>XTŒÞYdžÍLvüYÛ“O7æ©ä•üÑ‘¸©ë«kŽÒ09Ï­þ]ξ^µ­Ž£?üyÕe¨  IDAT_èèåKƒXƒu§¹Yyìð/?½¥íºëÞŸ3ëÕÏ~ôGIKž5kª³Õ…¨£¸è4÷E»KE©Ç?7¿xaváÜù¹³ç/ž½0av¾ÿo>Ÿ[–K§¡Bww6–Æ­ñ`‰”[}QåÒéò·R6Ïsùwñï<29=59=u8œÚÒ›*ZÊ÷±¯v·îüò ûµÿ²÷ëvÏßÜ”·4,êd,«}0¦BD‘E6Æ!¶±<Ï€š’‚(jV–`LQåTf‰ð Š‚¥9û¯ö†\ÆÝdšÐüIDATà#L„@‰J,g•–Âæy.ÝEÚ§<]õ·(kÿ’”dŸbÒØ'I™ @(N¥’Je¢Ñò¯¦kÏ|}I$I’2þQãN¿¿Eµ)š#–4ýD8¾Í^0òt„B’·e#múù[”sDMñw„ýc©”1O…Q9 Å ‡üþ¿öA)NJ'NË PŠfaaá¯ú¾€?§ÿ¾Óÿøë_õ}aaaaa!÷&ÇòíÆ¼Æþ—Hêñß&ŸúÇÄÿÝ7tŒëÛù­–]î"D‘eÀÆT›‰bD!eŽƒ<ÂùÒ1«%Çý×<@ Y–eÄVÆêˆÂæ¨ËÄiIDAT¹·ý.‡wú÷0m ŤúÙ±#*¥R“¡r_·¤ýí[’¡ÃF+KÆv LNOM†Æ6UÞJ_ÃHRÆßÒb@ öãÛLHcIIQÙ{S .Õ)~‹Gõ+ïš›z’TY–ÿ~ÿüýþ!í&iI©¶ŒÅºñƒá?ùRäOw~ù†x´cß7óßìâžçYÔ‰A]ºå„:‡à²ìÂG‚±Ç±¬^Û‰Àœ¢¤+†a”'˜Uˆ¿`½Ä”Ó1–h½©i ›çÞÖŒü;Ž €²‘Åïo‘öõ[·|¶„B™±¾T&¤ª.ÆM0NŸ ƯhHÒXRÒó±-¨o‡IDAT´¿ïî @x`òhÔŸ‘šoÙƒD²o˾–è?Ø£<=oóI¥2¡õ®< .©º;aÄìÆPKJå_Eu&B¿a—}ª¯7U¼xÞ'IÚíJ ¾ˆ»§T‘"õ§Ôã¿tìé‡ýåÿeïàá;¾“Œþ7Ó ~uYˆÝ- BL]”Dšc%Ò11‚—z„–ã±ìyÕ*aâlÛXôzÔ²,7¢§({uYŽ (e»„€Õ²BüÕ*@.€ €RMG#uúRu¾óܳ—ŽÁ#ÑÍí›6K‡–Ú·¬ßˆÓýÊ{¤þŽp¦?(ÿ¶GÔ¿¾}Ó>Ú«˜ IDATÀo€ðÀ@jã–õýªHà÷Cÿæýøêf6aKûðXá—¶¢~° €G´c}ߦdôè‘Ã;íÇ·YR)Øy@[Üé…úö§àèèæöMëûˆ#Ö°Lû°á L†AÚ_±Xðß~ô(Ât NA8T¬xaëE`€Ø¶aRÑ-/…—ס½ºñƒ–d¹´ÌißPZM4~âúëÍí¯"£„Y³äwI·¤plªÜ›³¶åE£ÀêgR5 34te¯AxöK_ºõìëÓÕr(~ôرôïÇ÷õ¯(Æz7¦B•ó`Q3”fôš‰±ëN3³C§rñIDATnÝŠáGŽömÿ¯ŸÊm1þâ8ðÐêKäÍ7Ü€SŽ;Võ¨ºÞI=þûù…Å s‹çgçgfçÏÏΟ¿0a~¡íºvšÆ½[=òÚ™ ˜çšºÒ ~uSºç’ðÀdÓ). …RŠŒ#]¸ÝÅ MãÞ­ ±ê.Z4Ú*R€ —ÜtpHSÓ;ZZêŠZ8‚õEƒXƒu§ ùÜŸßÏOf×­{kÎÌÏOfË/‘Å(.JÁóÜ´f”þýxY¤£P(Š7þö¿Ç—á²üàÐW\‘3óéÓgnîé<ü“dµÖŒ ³»<=-ô?>tfæµ33¯_þÖuW®»2zã—?ºž+ÐK5IDAT®í4¯y±€yN^3Ú×ÿ½r‰é™Sܰñ½Õ–¢^¡£—/ 6b Öæäµ3/^þ¶7¿éMo~Ï»ßnL_ZZ^¹Òúfè¹s3kÞ2WA鬠¸ü±{ú»còmxÏ{ßð.xãÂìWØýgÒþß;n+ƒŒ”Zdöâê·\"ÿå—{V¨î W®`˜+V®†Y2Ì Ííá+¯¾n,nÒ]NLý±Rb»Q#bÔ)tôò¥ÁF¬ÁºÓ„¬[·bðþG¶´·^wÝûsfÞ°á¹áGŽ®®N@F€üí.ÿcìÞÇþ5µõO>ö¡õ¼bíÛW­Xµ¸¼øü«Ï½ë²Ëú—;é˜ëIDATQ ê Å &Ý?±Ñk…B¡T—ë®{ÿÜÜüùós°´´óóŠsô‹óóóóKËËË Ã|ô#ï?öó'«(g^ŠËÓÓÂOwìÓüpÛ5ŸüÏþµô¶«?u4sxayþÿè{Ï~(Y„¸cÐgç…[6Tå¬J-mðן— ÖÌùwÙSµuFÎxF¥pƒK©/Æz ]LÙÚG‡îÃýZ¿‡-œS3IDAT¤Ô28R•Ÿ 22#+:Œ ÀTÙ…ÏM]_µÿËYêÔÌ™7.ÌÊò[à¯>èÿþè7S™G=öWï¸óÇßžzå…¹‹óÓ§_ÊCa”„€­ôM˜åÒ¹ƒ ñ £Ç––ÀóZé‚­#UërmᬻHûÛ7­oïÏ€¿Eê3G‘ü¶è†¥»7oÄÙl§4¾ú{It_,6©7‹¤†Öí¿&WèÚJ¥…!æ,bUõ§RI€¿ß²ÑrdG@/KΦðs"en8¢²NG­iQbûݪw~eÄ*®b:Í7Ó5ÍMf—+ŒZ¤¶±¼ô]=RöÒ ÉÆÔIDAT#3ŒÌ0øÔ§ÕÓç^{þå—ߘ»/;õôääSÏ?ÿÔóÏÿË3¯''“záµ3§Ïžö^¡0ÊâP@0ÜɵÐÌŠUAûÎãñ.I€ F"Á`<Qì!z6ݦ¡ÛL"¼¡ ÉZ1±ÚV°t±´îÆ_ò¬Ù<ÌÂáô¸©*k»„.ë=Ž æCµ‘HйZG1j7²£³îâßqdrú@KFRBÛãpkÉ>9Ö˜s¬·½?ƒS“Óc½Æ«$ávBLtAÚßÞ—ÿÎ#“G£~Hõ™¯¹zë¤_‰+to¥ÂÂs±*—ú3’ Å¸éœšœÆÝQÒËæIDATœÛʺeÑ2§• cûTà ‘"üY&Ç£Fñ·Ì™þþŒ¿ÒQœç›ýj`˜rRo¿äz…©òî{eĪ W^zùšÕ«_~ý4l¸â½—¯½ôò5k/_³ö¯Ã½»þlûûÞuõê·¬¾rÝ•žëFy@,BH¿“ ";‚3C¬+.ñ®X[>A–‰±l,-ËiŽ!& % 4Ë©a¡X+3ºÍ$Ì­‚àzd9ø¸ªÚ£¼°12ÂG‚‡H#¾ ë&–ª,íÚ»ÌG‚jU;­/ú°È ÄG"¼©ZÑY ‡øØ5@»ËöL‹ß¿ÓŸÒkv™IDAT“Ódû’$´´´@‹¿E©¡/ê0g&&º‚£ßùC!?´„B-`í›J%  ƒú«9ò"A`b…î­TX·qÎbU.Ç1•’pp Ncž¿ßu e=ާ¹éýýcþQƒBƒ¸•{•mòÒŠ4ÛAÉÖ ÇzkýYßD8äß×? ¥Rþ°I)4®À­c˜aXì5¬58Ì7ÂÕ < dÃÖ;Ãd¿ÂŽ. `µ¾h&C‡ 9Êì2¬ék…N}·7Q|ß­§[­Ã˜ÑÒñ®û_Xå»W2ÌKg¦ÏÎ[ÿ¶÷üíÖè6þüc_øØçÚÔël¤IDAT¯ýä›`iÍ[.iy÷Õ^%PîãFåEÌÌv"VD6>ÂDx£ÙCƒqZ’f{ˆð Š‚0ʃáWw´z¬9vp“_5ÓN0&àðÑNU9uYEÖ&§¥/†a„˜cM»‹Q«ä°»‰¶€”ñ¸†¹ïØõã˜ëÛû3þèÑÈô÷í“:Lň‰E¯eXiPÚªöLVS†4–” ÜaÐR}x}åί¬êº€Åø/e$P&á–P†ÉC? kOùd’ÛëmïK(N¥’©þ}-ƸÑÒþö¾¤?zÍißvݤ¡ö‘8 nÁZ׊Y¬Á~žIDAT¯0j¿ð¥ ó´ËTø–ÖïZï‘Ñ#õov´»MbÅö=ÕGX3ªMd3Z:Þøbÿ ÿß§¿úâ™3f÷þd¿ôêó›¯i»ï¿~kÇ _yéìÉïÿâÁ…¥ùßO=ÿ—ê5’‘0Ê J„ç‚ÔeYF¼e=ÇZW<äQÚd½(6pJÏKëC˜ÛÈá©Ëô%O1j\{uý;ޏh-)•’üá” two¿¤=B©I‰Eâ¿}/glÄ»sªJM S™T*þcÌ_¼‚3Бì˱¡„PÖ†¶ZdX„R‘¤ àÛá‘h ¾úo?:59×ÃÝIDAT}äö–rL"ã™3RKÔiU«f騕zû$³Yk,)Hý›5URÊhV4¥@·‚z&·Qr; Òþv¼È‚¯*¤+Lü¤e1Rð_ãó†·É@lÂÖV¾} 4òšÑ5W½¯»íó™^xjJ¼sìïÿöÇߺógßùÛëŽÅÿõ¿{þ•W»Û>ïùia”¾YîäÂ(/ „„x$. „œŽ±ª½›,¨– a”€íD ¬·*5WÍq1ˆu…‰˜•'6lMûŠÛ%uÙ !)’Ûûb„çyÍ£˜X<‹QK” cªŸŠt ŒõnƒîßIDATìK¦RûýR Ó·)Ù‡3õnÜ’ =Q:rxGq‹ï-ÑÃÓQ,Ißú¾±–P‡ëݳ¼Ô”0‘$ðGCö#ÒÒÒcW3’cY-¡PK?®P"¿¿ #e2-ÆÏ¸òTŠ0yÊnƒq"‡ŠV›h“ÓzýÑ£Gn7tHÚà©Ö‚ÖŸ]j Ð#‡wøÇzUƒ\xàð?ù “ÈgÝÙƒ<¥¦°¾WH¸jßýjlí%k2óS 0°¸¸ü‡—þ¸õcøWO£<ÄFô}°Eâ£"!dbl,F< ,pb" Ã" êI,ÇœE/:q#±`?´ÜfIDATPY C 9Ô‚±X ã•*,Ädd¹t´:PBÑ%ÒzÀÆÒ#äZ Ûº,¤ ‹®HNè èÃ(!s¬±ÚX:íEŒR³ú-³—]¶öÞû]ӲјNôýlfêÖ[¶SJ »à»¾š(Î-¡èÀ| |%êœ sàïûû÷I©”t;¤R€–PG‹t÷fl=Ö/ŠuwGÔ„_sUèB¢]ÎÊ“Ïð—”±T Z¢ªÒÝ›·Ãà‘Û[Ô«-´ø[ü~ÍeÉýëm—v*4w¶#‚dJ’$€Œú¼«žªšŠý·ãôZ>¸ÝhUÚ­ŒnIDAT ZZê'y¢èˆýûS·;Úˆ⥠+º–o> ûÛ±ââß©ÝËIW˜¢M(îS ƒe% ìªÑ¥,Ëd ÷]º{s»rºÕ9]¹¸ß¾õC7î;ðÊkgV¬X±¼¼üÞ+ßý_Ù™ŸK:kŒh”p2g·¶w²IÄD–K›kÓópÆtƒ$ªTZŠ­0e°ýl¯ÊI`­ËÀZ¶&q`cö·² Õ²Žb”“büGç«»$ûôÝpûÚ7í LÜ~t ³¾o¬wã¦^€ŽRŸ~þG2ûöµoÚ¡£Q?®/‘ÊIàB…¤VÆ2-Ѩe?]°’°ÿIDAT„!æ,løˆU‘ëO¥’àßi´œHý›7ö+ŸUˆÛÊ’ $K…– 4áÃRf‹Rokîví\ŽÃQþÛ£©Íý9™ŽÁ©Ã-í[öi6ôèóL#± ã‰Ÿÿ|–”c þG»_aÂÑèþT²oS²Âžz}$šiïW*T7Ðìˆú“ýZ».}Ï<úŽÏŽ3§_(¸±ÊP|ìè®gùÿæåPQœ‚ýG›âHãè£4&€J¦Ëæ~¿'ãPCìÛÔ›òf +iYJ½éß‚wm×ÕFŸÒP¹¾¯[·bø‘£}Û¿@¸¦_\€‹æç——e†a>ú‘«’: ÷IDAT<´ú¹Zq¤)”ÂxíÌ‹–y¾¸´ —”y>?oŸçä8ÒR*%µD›çf,I™œ{TËQ–Rë,Ð=ÜTŠK3÷B©,2²æ<°ÿh²ÆZŒ#]+øw™ÜQm!*H1ým¶±j.“áfµï7sß+M¾!©) ÃÈ€ÕÍ[³ÿhBéêrbêµ FBG/_lĬ;ÍÉkg^´&Ɇ¿†K{CAŠwhi …B¡TŸbÞ]¢4Tw¡¨ä½ÎC¨—’œCQ³ce¬vDµK¢:.ðæÏ•¤Zí65awÉcÖ ñ ó<¨‘ó¨FÄ(9u>¢¨Å ŠIDATõÜjҔɒf(E© ìGÄš¢ÊÐC§ª§%OˆJȯýj¨Á:Uì•U#…vµ¤/#Æ:ms²Æ¨è5Eˆ;E¿u)Q#£§KÂG""v]ž@ÆÏÕV` m×EüÙ»¸¸zë˜bì.OÿÕ÷¾?´gÏOÿ•–¸òÓ—ÚÿyªÎìS‚ü¡öö-ÏÿAº÷Þ{•æ—{nfznf–~v€yǽŸ&rÏ:>SC5Z‚2µøˆH wÝ©Ÿ°ø11À¢ßUºGŠ"ÕºœF|Ðóí¾¤W7Ý…åÒäHN†ø–B<gMò8–¢T û!#žçÖkU„@€åy!|†v"V?Šó;ýꀵrã'©*=?1¦*®!åÀj÷g>  ‚ž‹…x0‰µÄr´0IDAT(Ý dµ ñ`0¬=¼^‰ñçQ£YIl"ä,-Â(ˆCƸpZg‚1«U§žêâk˜ñ©ËöÌçœY4¥~}\Íý&J|$°e. êŸÍXLqÖ±â]1Ê.‰$±”²õBÁ(ƒñéÓRÐþœ@|BE)'Œ(8. }É÷ø6 …Ù]R©ÔÛ.»tõêÕ333333k×®Y·n]2•yN¾0³s2ÌÎʳs2Ì9è.ùÎ:cT {Uäiénsд"|Õ3èÊc%`oÿ¹#9LŲ4Êô@Ùö“ÝdŒ×-R8cÑrá}¿ Ë¥9‹äчï;]0r+ÍIDATR#g”¢Ð5P§,vqÓ¢9¿íWuõ‡t²:TîX.¤F~'TçÕ@ó|’ ñ¸ã:]ûë‚ ²#Ø@ÜøC<.`…O³á3Yˆ Ȱz ăHÈi. V¢šy=³^¡©9cΣŒBZ°:>Œ)-E…µ§h¥-b;ç$g8íù¬+.¨GVåxDXýòçX?J¤c,~ÚK§Óúgíê£ÔívÖ±e¹¥ ZŽXÊáH™dÄ š&6aÚ¨X|ŸD`øQ€ç›×f]˜ÝåÈ¿€ÙÙ 'O¾|òäËsssðø¿¸ n;Ëo;|ïÄ ŒIDAT9~Û9yv‰TGÞ³DQW]”ÀÎÄÛ)@îBˆ·(ÚUP}¬T$J€‡Ëi*–¥QžW/¿ö“ã:÷ e±Í›Ì™<öêª&ýtŒÅA' ḃ1AˆÕÊ9%̪¾Þ"ÞùAÁ®ºÐŒl =öÊY.-çÔ~ùˆª.ë¨×‹ v?„ Æ\ 5¾&XVû ´¨>UDxÀÏȬb3Vä œv±Ð.l!EÑÙbB²ä,ù)¤©}šò"ˆ¢Qr ¥èâ™ÅvÉI̬ía ÆAUcƒ(ÇŠ<‚(aÜëwë¦^íD,¾fæ[r)‡#å½ )§mÚ5ãI9IDAT¨°„Q,XDD±È}4u ¶»xùkäíW\633óª×_ý—¯8¿üqnÍõܸž{ëõÜ8Oºe<ë0–5#KÍÖS€ŒrÑD¼®ÿ „x|†˜®µˆ³¯·DòÒÂÕÔ5mÙ…ÔS¥2žuØ@øÉ-Ÿ+žuü,‹¯YÅÄx\П(d¬R L½"ˆ"k|øãbŒ-)?!ÍåÚo«Ü±*>ÂX–%À¸àjúq1œÕª‚âAmm˜¸$ÊÆæý@5‚á #ƒϞ¢_yÛe=À‚ ò¼ÈØN$ò¼(¸ºW¸O6àµÇqÔ‡IDAT`;ˆ‚(@ó^D±ÝÅË_#¸výÂÂâºu—­]{éÚµ—®[w™,/¯Û0»|nF>;³ ggàìŒ,_ Ú]ʉ‹fc%d9¡Z+B¢Èò–3„åF-„4ªØŸb¬ñ*nï)âb"ÏÏ‹F«9V™Š=ë=ë.l ¨&Oa”J´aR Vd„xD{ßçY6 ©Î†Ã®ç'ýª­|Øæ‰­rã~bCñ QqqåÒE¿âP³:D£<ñþàÒÚ¾a¼.nÕ I¸¬ Ž0Ê šLN Ø€¶õEé‹=Å ÃÊSnŒ -­A<.¢N/®ó¦£<$qSf‰ÏIDATnKå‹új[ÓÕÖµTÁÍ™rºL„‹xØð]q¼ØY÷¶ßeëÖ­S/Ÿ››]½ú’Õ«/yã7¦^º°uëVç–Ÿyàâ3Ì3W®|æŸyà"CÜï’ÿ¬3”șϾWÄô^™’ ¿£?¹!ˆE[÷XŽƒXÌræBŽ;sé5$¥ÁrOÙN$ò³ê¢ÜÊ©»ñ ²Ä0%Ò11¢™éoæREŠG)ö#bI1n&a Z#Hs,^ëĆÀÞ:kÌoÿ¬:O´${åFˆ †Åäj®I²Péõv”HðÚ©àÒQ3ÞU4¹EIDATs€0ʃÁz¬hXLc_ì)Nè9õ}¾.™µ‹†vüب»Ùð"kV×¼KâØ–>ïìcËr2¾>O*UpsvrM›« þB¾õÈ ÈŒ)¬ Óˆ®u ~Ϩÿ®o¾óï’¦NIS§|>_ÿ]ßÄéòé%ýß™%ùôÒòi¢Ý%ÿYçU‰' ‚ù1…íDZ&ãú8BˆlEÖÞb@‰4âƒzQç;s µ÷/ˆ=ÅÊ ˜ÖðÕÛAFŒ±ŒÜýGâHWêÔ¼ =>â¾u¶ØüµLYæ›÷Mì¥Þî^ÑÓ§ÆçAݾJà_wþââÅyGzqa~qiy™i¬8ÒõωbcIDATHˆ›v¸åAUNœÚ;[íó|iQ—®Îóùù§8ÒÔ¯.Åußm òS ݽ`ò1TP(9¨#ÅXn$&F X\°îƒ­Ui´¬Ôbé£NÉô>ñ¿&?SRÖ—Ýï­ã *–(½0µØhY¡q¤ :zùÒ`#Ö`ÝiNq¤›ƒºR\(U¦I| …B¡Ô4Ž4Å;Tw¡¨Ð8ÒS¿q¤‰¸‡ÒÍ·¬—Ÿj™Êœu:8%…Ú](Þ)2Ž4),°æ[¯ÙÏÄš¢FâH; c+h $ã•KÝIDAT¹†Ñ£É˜KÑ8ÒJ+‹=”.!€fé„ô¦åWm1#\ÂDõoP» Å;ÅÅ‘¶‡æ#Œ 8·§wJe¨¡8ÒM+8D™¶*W q¤½6Tè°ØCé–If–S#ÅÐ×–ššš°»TYÑt»@V[¶Ú£¸8Ò¶°ÀãXÂ1Mð >î(!#PT%?²ý VT扖ä,Œá¦Nhºv`9.À(3Ù^zRA‰Ïƒ7uÅå†$ĪÑid8•£”Hð¸‡.´•Å':ç\Ù~²5­Î‰ #$ÒÎ-ÛÊ^)?Ëqˆ; ¥¬IDAT‰0ŒÅ`ç±G¬V!Ö9¿‡Ñ3Jb+HÑÀv/|àÚõ“““W\qÅòò2¬X±âÌ™ÓÁëÞWYÙ+‹‡9­ƒ²ÌGž :.ò£|¥Mr#(-Ý„45Z††?~üøñãCCå`jrºÚ"Ô1…^é[TÊ‘¿–)Ë|Ó6·–0§7öô)õ@Õ2gN¿pßÀƒ²,ÏÎ^òÝ Þþõ¿ûîwï䑇yäá{î¹çö¯ÿ]ž$jèHÇXP7ä¶€štIDAT¢„š¢}Ò6­?g©R¥­ËLÖk7HaŸí¦úõ:Í9ÌÆštŒÕ]U˜ÓŠ›J Uf=• ¶þÙ[£ZÍ•8Îó¬2ÏÓ‰ßüæ–y®©+nvJsÀó ¸ÖwÛm[ó¬ F¬ƒEâ£BNƒ ÉL¢ °ª5§w"Ñ”IÝA‹!(‘@L×/j&pe…l9öÖ¨› ³p˜¡¡ƒ,{ ³›o¸¡TõR( ¥Ö­[1üÈѾí_˜››?~—–`~~ñâŘ¿¸8?¿°´,3 óÑ\=pà¡Õ—.TAŠIDATÈÚÕûè±c_úÒ­U”¿`ê-Ž´ /NrU`|[1øˆÝ©EÙ)®Ñ×μHžç/Î/ÀÅ‹‹ ó‹KËËÆy®©+4ŽtCAG/_lĬ;Í #Ý´°ÜH,d"‰|ëæÛŠP•F5èš…B¡PªOÝÛ]X.Î+Wr^ÛX.]ùeüª4ªAãHSThé‚i°8Òå£IÆÁèÆÐkÞf—Ô·âB©,¥Ž#me@© j<ŽtÎÈÒöÊkÕ œG*Gº©ÎÈ6Ï ½”ü>…Ë?Ë¥Ü64Ž4Å;¥Ž#- õ}¯Üþà)¡ÆãH»NµWî$LýQ—feIDAT¹8ÒÚK‰ˆÖõy#ÿ-äBç:oËÀ0 xM—dÆÑWzýBí.¯±/JGÚR°?xJ‰©é8Òn‘¥í•çÝ\Þ4`i6 ;´˜„xÐdÙR¯8÷×wÙ9ÀŠn´ˆŒÚÆÁm` cb4 ¹·hˆ…k­ÄÁxà ¹Ð¹”¢ µ»P¼SÚ8Ò næ)u@­Ä‘vÀT¹CJ©h¸8Ò z [<–ãÔØê‘%ÅLÑú+Ä»Ôð/‰€ ºXQE¹NÂ88,!n³s,kN¶g"Ï ¥t4ŽÝ¥Iöuåë²TãRò8Òj^ÓiO©uªGÚŽ5²tŹ­åIDATi°8ÒZP·8«,¦â¡h©x^Œqˆ3Eë¨æ”H —+Â(æ&öqpX[ÜfµZ!]œÀ=¨J>:J))Æîòäñ_}ïûC{öÜùäñ_i‰+?}©ý_áòY5!,è^ì¤Ù˜v§,Ž%lÂKAcŸJ¤„é;¥ÛKRŽ8Ò|D¿LRê‚Z‹#íA@¢Èå£~ãHkn¹Óé q1‘ççEU—r ­ŒÕSC¼µ‚ã0çXÂÅ®L‘Ÿó¸ÐQJLÁv—»ï¹7{bò#þP{û–çÿ Ý{ï½ÊóË=73=73K?;‡?À¼ãþ‰¼Fy@”œyâzxIDATà²%Ëà2_ÄÛ§Ë€ÎÁ© ‚ÇÔ'ÄÅ€÷4JGkmTq©7ªGš Œ¶ßÅ^9©9SAUwpú\ õG:ÊFrØd¶‰|DU]œB+c”Y‚܈"8gf;QÎKU®„`¾C¸‹W /tvœ¦Y¹§eQ˜Ý%•J½í²KW¯^=33333³víšuëÖ%SIçä s0;'Àì¬<;'܃î’{C•ïŠ BL3K£<  SS_‰)57ÏåÜ’ÍÙš™´ À´«Œ7‹ªgVËêUg!a‚qpàYËÙEÚ”FÞHÍte+ÙNÅ\æYÍ´IDATï•!ˆð(‘މu8@lT{tiŽÅWÍHM­«5ù8RŒ{“ìÇ%ÁçcoY4æ·ÿ V'ZR±WNh®2°P¦KpÔÇP"ˆƒqÃI Œ¢3Þs‰rã‚á\6œ¥l'yà8Ö˜›|&볯 »df¹ý'¼Wׄ§Åãj¸+¸‹—'\èl¥Šhž¢R˜ÝåÈ¿€ÙÙ 'O¾|òäËsssðø¿¸ n;Ëo;|ï9~Û9yv‰T‡— U,7¢„Ls¬v4èÕöJ7Ï)¸lÉÛ–>}“–]6ó®2dUÔ¤ÒßÍÔx]ÂÖIDAT«2ìtãyqÖËQ"iS±k„h‚(ÊJµSÑͯ®ÍßÍãJȲ{Jõ±K HZ¶cjOCþ<'ANaÌÓÌ. A>CE¹>çDóŒiûÀÚÖ}hêþ4QB–AˆE³ñÑèpSýœNñüÂÙç‹Ùѧa¨IÇÈ2P¶c¨*Ÿƒnù‰3¤{X­A>ÂðÖ¥EãðZ*!~-èBçPŠ Ni¦es€ýêzùk,õö+.›™™9w²´´üŽËל_þ8·†8?=÷VΓ]E66BÚP¥~G¢%Š 0ÊaX-€¢­ÐlŠ,˲†¸ÕÜIDATÊÓ¯Î[²ìh™í² Àƒ­i[רNÄÆxžcMû½BžJˆ]%æ"âbñ®¸0¢Õ£„¢`YÁ©k¤q³š),6¼¼'g—]¡~u)®ûnKŸB)ƒA*jo+lNóêWW»-45X)ñò×È®]¿°°¸nÝek×^ºví¥ëÖ]&ËËÁë6Ì.Ÿ›‘ÏÎ,ÀÙ8;#ËHv—ü7T £¼ XL#<ùïyñ€Ë–¾Rnö ñ¶«:Ë >Ž ¥^6¥y—M÷3P&»Ë‰©?]a ¨1ê”üGïÿkò0õÇåÊ_ë”~¾­ùr* ž†È{NÏ4äéó±oOtêIDATO}[ýRûsoÍ—S“_Æs޵_üéÔñÇ?ž˜X·®I) ‹g´uëÖè7¾õÖ·®¾ì²Ëà•W^zéB4ºä¹åg¸Ì+A`€ìÑ©¶ÓÂF$Îs6Eðæ¤Lä#L|TàA©Då(RÃVV XÕ¢c—íD´J‹E5dFyqDKˆ‹Åƒˆ¥­6#Ž&"°1˦4箑ÆÕ toYÐ8Ò ½|i°k°î4'ö8Ҍջ¨ììn´Ž)ø=£þ»¾ùØcýÛ¿OÀ®õÝvÛVœ.Ÿ&în±ƒ ž 21üá UÁdË{IDAT ºøvYŽCL„aX„À¸F£¨>i­¡í BL•‚¥eŽ t²áøÓŒò³œ@ª¨±tZÏŒ2Á® u"–Âk(‘@LoJS†'W×HãfR …Q^”b‘œ:Ȳ׀ <û¥/ÝZ|EB/¾Å@G/_lĬ;ÍÉkg^~ähßö/ÌÍÍŸ??KKK0?¿87·çççç—–——†ùèG®8ðÐêKäÍ7Ü€‹=v¬®äPq¤ùHÓ9 ,¿W!®z¿2´eŸç‹K˰0¿ Îó…ù…Åå%Ó<×Ô•&5NRÐ8ÒS¿q¤í‚yµÜìÖ¨IDATݱׯnx‰ðæÏ%l¢´ù)ùSEÅ¥þ6T•ü‚QY½šèoFÄX‰œÖ–:Ž´½¥&¨Ù8ÒžâBã0A–IWßS¬¢÷ÂB€V}ˆøHDÄ;Èø¹˜:K(žkãô¶xÉ0Õ@•£jÆ3Ò|—ÒÏa oÜ)#ÚKÖ%3ï”:Ž´µ¥úÔri/q¡ùu‘•0ª#ƒúv€XIw™;­.Ú ¢ê› ÆÏµË¥ÓØÓvË¡^Bq(¶S?(4\#Å3¢”ŸRÇ‘v)E©5GšT\÷« ø›q)–çÅXºœ G:·P÷ípØóèƒæùY.õøj#ò·°IDATjî1Á-©ˆQÀÖ¶`0¨6؃½ºø´ºFu”Ùèý–Ôepu]ꈦuáÓÌ ¼(M #MñNÙâHSꋪǑ&y[âÁ.1˜'xž×½6—˸×hq¤½8õâW”ä6ToÄùÙªZ9¾Â(@Àó `|WÒ©~”PL²œN§õÏ«•WŸfרÎѪU+ K—s¹.%€â-º®6ëÕG‡¦†Ú](Þ)SiJQ“q¤ þŸ°óõ`\Ô*w½KE£Å‘V#4å…–9g f{S/l‘Ÿ­qžB¢(€(ÇŠ<‚(o×îõ»CnC‰nI (‡ ϳæÞÚe(’œ®QYçüÊlt‰uv]ª¡+z8/IDATN÷ #$d‰&iÔm»¸X NŸ>ûàÈc–ÄOýéÌc$ê„‚í.wßsï»ÞyÕG>ü!xöÙgý¯¿¼í¶Ûæ—{¾¸ü‹³·>°\.™¸ùÂ"$ÆãâX¼Ž‘‡Uº ðñ@‹ÒùêÊ;tiåáU®A—âKß0À³(ÀwÅ;Kô‚åÐÐÁãÇ?~|hè \LMNW[„:¦°ÑK £{ƒÒç¯eÊ2ß´ý¤%Ìé zú4gN¿pßÀƒ²,ÏÎ^Âð< ¡8~‡.mªAÁø(úîmÞ… @׌( ¥¦éî ww†Ñg?óÙ-7~vËô=##[·nzéüÜÜìêÕ—¬^}Éo¼1õÒ…­[·€<·üÌŸy`ž¹rå3?¸øÌ™9’ÝÅà·Q!¯—Ôì/šÙ+Ô3siã,ö†”W=QBNÇXQäÍ_EÛ ^„·Ô)ßã.¼ IDATês…<¶wA=¾C§±XÎÆÝ¡º E…FÖ-˜ú#m§xQ‹¬Á©¸÷j=æ,íA¡§OÑüžQÿ]ß|ç;ß%M’¦Nù|¾þ»¾‰ÓåÓKú¿3Kòé¥åÓÄý.(‘(›>”å”H+‘uá,Ç!õÕf“o=s0H$©B'l ±ˆØ#ËWŽS+î¬Gá-u²$Ç£x¢ ˜Ý9°HËdt»°õ…8àÅn™Ì#Ž´áýmmOO1„)UÁsikØpŠ^Pi§Àãä_IS··n.«=÷ 9¨Ì­ËÒJ™´Šr”²W3ÊC@è*awJB-ÈÐ(ãߢÎåIDATeëÖ­ó¯ýÍ7¾†-.y£;GJÔ)ƒkLmw®òŠL"aõyhØ@‹ˆÚc¯j)Ö†ôvÒ Ö¯†8·‰DÚ’ä(¼µÄÅ ç AaqŠ£xøm ÎVÆ6XÊ(h®ÆÍ ¡D!‡É€÷8Ò&éXpøY–e“O.Ç”ª_iQPö£kýIÑ¡°8ÒU9ýj›r†UZí}=mî)î”VÛ}B.*Gº!(ÛJ­RE¿ºúcSŠ7 ”£Â’·År#11R€ÛN·¤ 8ÒB<Î#ŽAs!ICÔ0…Æ‘V=ú“¢…GÚ^•qå”ÜhSŽtëÒX=ŸÁIDATç‹Ô¨¼|œ°Èê‰FŒ#íÒG½Q[Àd›Î)rr®(ÓDœmu‘Q0¤iD<ÏĆÄ(Ö…7ä6ʘÚ>MK㜓”FÑ(y…eh‹åÒEûàÒåèR¾q» ÙïÂÇc „ÓnVV¿qåC˜RuìN[ Ô ¬!²táq¤Ý“5L9{¸Ž‚ä>!-Ž´sõF î(lýµDNÎ'Ê´ »3 A·àÊr8m0q]îN…Èc[PCÆñ©@`j›ãf†Æ3jfòõcä€ ~N°¬îŸ%Ô•7à#Lé¼ÿRÊ ÏóÈ´‰}<«nËå|/zIDATÒ2|„ Šé4Çjù‰·Z÷9`©ŠKËœó¯`œr4Wúø>ѵÍ}B(»ÐX–e•J‹f· `#m\Ü5F‡Ž‹"ë-Žt\\üH”K£¼Í¿úkðaóú`w2áɆ)pØSŸŸÇ”8¶5¤VHš9}]SçpûÁ,Ž7š»ïJóààLj¸· »‹é X{4KÇØbbSªŒ%ˆ3aâ,a;†¶òõÍ dÙk@žýÒ—n-¯t NÍ‹¡°Ñã#Ž[gK’¿–)Ë|ó~Ú—úá©;¿*I#Í7/¼væÅáGŽömÿÂÜÜüùós°¸¸ óó /.ÀÅù…ù…¥å¥e†a>ú‘«<´úyó 7àâG«…+y³ßåÉã¿J§ÿíÔ«'?õŸoüÄõÉ+?}©=çÒÏÎÙ=¡8œAøyѰ·Š0±ˆ°E#ăA“91hz1%Òl¼ FF +¯>¶Ç±±tºsÔ0DB<Øâ#1Ðz,Ä_{÷WŒóüÊ+×Y«OÌÏ/./ËÆy³†<ÉIDAT®©+ùïÕ¥4¶}º%ÎO¡oÍBÁŠËÝ÷Üû®w^õ‘ž}öÙ_ÿë/o»í6€ùåž/®€ÿâì­¬€C—K&n¾(¨ÇÖ‚*>®X´ã„àGé|×.ñ»rZÙ4 ׉ kTàXVYó Ï¢ïøO¾vGºÑ q¤ó¥éâH—¡ÑrÒhó-'–8ÒÍCav—T*õ¶Ë.]½zõÌÌ ¬]»fqq1™J†CayN¾0 È0;+@Œg–·ê”WÕõ{WL ÈÄëƒzfÕ´b©påeTàX–Ç(&ò–²ŠaI§¯šÒ‘[x[#Çê9ùIDAT<ϳˆ#®Qb«Òˆ½kîQµ­gÊ sºò" €8Fq £`œçŒ¨ÝaX¸¸4§Øç]â¥Ó8Ò ½|i°k°î4'–8ÒÍCav—#Oüö#ÿgvöÂìì-ññ'~…á‚<ºí,Ná{ÏÀŠû/!Õ¡øÝI#åÎ ª/E éŠw¦9n$ÆÖŒˆÅ…x0áåØ*À¨˜8ßÉÆÅØ]<©¡èR‹ò‘ˆ(ÄãÆ¯Hs+ÁG˜8ÏÚÊU'ˆ"V]ŒÛѯ™»f¡‘Øb/°<ÏP`WŸà™ŸW$k2MªàS( ¥¦ÀïŸåžIDATyùkäíW\633óª×_ý—¯8¿üqnÍõܸž{ëõÜ8O²»¢ÈšÝ0¨¾|Èî^ã ÅÙNÄòóƒ‹Ï_ÿ]ßÄéòé%ýß™%ùôÒòi¢y”HbAue§¤cbÄüäÄrRãv 1ƒ¬gƉ"Uè„­!6jIpÈò•ãÔŠ»„ëQxK,Iãñ(€(f7šl'Ò2©-à#D/ç„•«¼:xüøñãÇ ”í(ç¹-ѺROÑlS=059!Š‚ãèÙ‡5Åpì<•Áù‰GÜ^•“0¤âé ù²GFIDATÄ9gH,tvÙ±ŽX:ƪ¾ÕPBq†íJ;Wqð½ËÆbH͈åI ìgž58hC cfSJ:mËYÚîh}Š¥È0¬F7ÿú°;¥¨åìyr š­Ãw„¬cbúÝ01ÌÚå"´d¯Ç2²Lœ¨Æ•zðØi“@O%•4McâlÑd" nêÌéîxP–åÙÙ‹§N½qêÔ'Ož9yòÌôô+Òs/HϽ¦žþÍs¿~JzêéçdY¾oàÁ¡¡ƒS“ÓøùJ^Œ>òÝj‹ûêUý KÔ–ý6^ŽV\°Ïó—Ožyùä™éì«’ô¢$½HœçšºRdiÇsTaJÍ“#Ž´<†Æ(IDAT-¥ð8Ò¸O»0å£ÑâH+cgxвÇ|&¦ä)ºú—-a®-õAñór¥6 yž×ã  DŒá•r<±wÜ>ÌCa8L^jCRE¿ºú`J`(C…%o‹åFbb¤¶uóm É'nW1q¤í)TW©WrÅ‘¶¦G:ÖÈÒDaÊIƒÅ‘ÆŽ¡X¡H|TàX°EH)yEŠ®©ÀËöz€|­Uf*a˜ˆjFD(ÂóP®ÏªŽ‰¸X¼+.hN/ÜCC:î<”"úa‚3.U72UŒ#­]³j¶Â2´E¸Ôz,V ®"‹‹#íå‹üJ)9ãH[RŠ#uoÎIDATK§ Ö•¥nãH £¼ ¬ÍGxð´Ä­P’˜ÉÕ ¼œw•ù¼áe£cž7¦Â;RçÐxFïGÚ”BŠ*L©}\ãH“R Œ#mƒTܸ‡ÝÞ´[/âAífæô¹ê1Ž4~ïAßSŠ~T°G3þÿÙ{÷89Šóî÷éZ$­lN­¥Ä³†é!€ØØÂDzä“Ý ŠñÖ(Ç8ö±b!¬°?†„÷uÏœ71ˆ`´ ¯ˆ/2’/`M¯Á;Š-! óBÀ8N LÖŽÍ.+I ´«½L¿ô­º«º§»ç>ó|?ú¬fzª«žª®®®®Ëóã «m;¥òÂËlÌû— LIDATl<ü² ³9B[ )% ³-9·åÒ-ã´¢°]&§5'¨#ø§4iFæ—£*ŒÔšu¤wçH8iŽ1ž†#jMy»6³S TGZ–šs!Ú´Q†Ñ|&œ#”¢ùTExÙ„/sm¯WFí‰ JJ•HÖfµ9‚;ÉDR)"$µ¤2°r$¥B6I‡td|p°…û|\Ë€ã.ˆPGº©@é ´¢Ž4Rß°:Òsss0==«ë¼œaõu[\Gi8Â饛Ýô«‹°[†ÊA¤8Øq©.ž®²êÞO4êH7¨#”–Ó‘FêÔ‘Á3Ï>—ɼøúkGW®ú¥)êIDATðû¯xoy Ó1GIC —j“•Ô$·âYOaæ £{²1A ú($•“´Ž´ïèlòÖ}ÃT)ÉØzˆO€™c% ÿ×gJ±u¤› ,½ 4Y‰5YvZÔ‘Ê}÷o½ð‚?¸ü²KààÁƒÿñóŸÝ|óÍe5­ˆ„d“I…H"€’Lfì¬rR_ªšÔ¢Q¿‘ €Ç=^lš‹êŒ¾Y# RõÊ$®‹vEAÖ\TõšáB‹vðAÊYºÍF¸}Fétú­‹µ··çóù|>¿pá‚ŽŽŽ‘ôH°Xhq>m®Ä:b|_ŸÐö±sæR:YÜA4…9 ¼IDATä$µ‘Í™ó€ëWÛ~Loã™»³ELT.˜[J5ÿ”¾†.7Ú–ðŠƒ}Ä Ét}«I«éH#H7î²÷Éç`ròÌÑ£GŽ=255?ùB8üø•vøAæŸîê¢Ú£[I&³ ©Ï<מÃs4ãHšqðíÃx&%›µº.–6ë3‰ç!šCXÕ%P’Ž4ÈÑ'k|™ßf÷Ž4÷WÃétÉ:ÒÔOîõ—ªN.QÙê"%ìU'ëŒæÖ‘¶]  s‹%\Y•±„ͨBÄÙp5³vhã.~þÒœ¿dq>ŸâĉoÛ‚ +Ù¬h÷¯jxFA²s‹ºIDATˆ%o}êt±ˆ²,³êBäx,•(7ŸŽ„ÄhdÍW?I¥ˆã+P7W\†lVñc< ‡Eßå {'¢}FêÞ»œDJd“üúHs´$ií¸’`ù{h™ß&"˜Ž4û«7%séŽ0:Ò²lhïfÜꯣ:¹Fe‰Bþàôéd=‡µžN.FÓëH›(Cä˜ï[,Õ,«JÐX5³vhã.~þÒ\rÑÒ™™ÙŽŽÅ .Z¸pQGÇbU-Ä.^ á¬Â¹3Jq ͈”ÒÊ|M\³`ÿÊ:øöe| Þ¨•CPÕ%àÕw¥ ßý9åKWIÆ~O]Þf‘IDATÏBj{Ex×ÈØsü*ËÙD†­²Zxk¿´ØGX7§N¬>VÑÜèÒ^tyÕ©8„ýmÀe:9J2‹Çcf;aÝëÎif%‹%“ŽqRíZ¶"¡¦G¨´7x…²¼(Ã2‰Ð~ìÍ̘ Mì¦@, Ù)pÎì¾Ò±9ÊÐ6\§5ÍÌ?=ìálÓ/[zöÕ ìrŽIõ²ÐÁëZ65áÖ»¬[·nüðé©©ÉööùííóOž<9~øÌºuëDAé”êr Íúqf#´KºÀ&äð-Û¿fß~Œg¼Qû‘µp/{« !]TMÜ›’t¤ËíX ©®N[dW]ÛöIDATY¶¦C)/è¡u¤µö™ãÜÎ¥:‘¤V’IÙ¸UxÓÉÁAinX”˜–eã1'Š’d¼£Ùj_,š]Uà^ª~e¥ëq¡C€kÛ\„Þg4¸ùŽ .¸07þznüõÎÎÎÁÍwŒ€¤RQ½•Óûî$•Idãö>¨(IĘñ³5ŠVàX"šJ^„îI;£`œ)“]q|•$#âõJTôi¼#N‘×ãñi@VQì }Å>b2RÐ\TsŸ+œ™« ”¢#­ ËŠå° ƒÆÚmaiÃ)’ŒÅⲚ"%éHkâ¥r\ˆe3É’2åW'רLWú†R€–4!ñxL&)U±ˆb&IDAT„@{ühQGÚŽÃBÙŸÄ´ãpe¥uÙfBd9›hWÍ!­$“v#uuh©˜83“;§¬´m âGøÚˆÇY3Ù„D¢åúø±A·››Rü»¬[l¨Å ÝhÉQø*Ë®ŠÍl`G„"Éd˜S2üs퉈Ž496ø0ž9‰H‰d,)K)ÉÍ07ó@–õ.€í®$5¥È!Ú")(Í@):ÒÔ˜LBdöˆ#ƒ?ÕokZ¨tik¦ÇŒÝ³:1QYË)ìž Øéä²Ð‚:Ò8¦À=fÜ3 ‘¾ÎìÜ9‘YYYÎÒ/r‹æR— %ØLÔЯ®µ) ¥ T"²§¬Q@vIDAT%J»ÙxˆÛ˹ø¶F”¬#4ö-Fv1ãM­ç°:Òú¬+€5‘ÀÌœÚ Imà˜N.#-¥#ía!a¦À½g÷S 7ü¹s±d帽ë¢0süöÓ½Ô¡m¹/&+]— Šf«Y©¡Ž´u”©õ({„HK”2a¬%ÎúÇêS¢Ž´Ÿ³Êi.‚@:Òœð©LVWî™ ¡f!  Ž4¥lˆ&{xJRW•–Ó‘ö²ÐCbZ;b;]×TŽ%2ެ´ÖyI(¶1h‡XttX¦"²*›·ëO?²ÒTÆ Ë‹i_Û®lÊCøšS¼r¡Òs}üØo½òÕ¼ žâÔ‘n*PGG¸.«IDAT:(¨#]„ 6nå(»åa#äèHÏ:ÒÓšŽôìôô êH# M8½tÔ‘FLPG)•jÎî——†Xè    @/¶šQ;.ˆPGºÙ@é  Ž´þ,|ï݇Æï6¾4TÝ(»å¥Gˆ:ÒRÔ‘n*°ô‚Òd%ÖdÙiMPG© J2KDëiQªJýðÖmÑ>‚ RW”²Ïè™gŸûú7¶ßyç—žyö9óà¼,bÿ…·¯¹d­tWˆÚÞ ‡ó¹2ÊŠ9bp$TØwA PG:4¨#][Œ5&õç^ @èq—ûîß:ñÊØå—]ºfÍÚ—Ûºu«þÃtẠÂuÚwóIDAT„¹ŸœÒ>ÀtíÜ×—¬•é©MŽ›ž«h/Ö,¥ÊŠùNÈ%êHódyšÃH­©i&r_=qŽ,yÍßZJ¥¹u¤ýP¶ãñ¬æå-Øàws½F7áÆ]Òéô[/jooÏçóù|~áÂ#éP§Ô3S09¥Àä¤:9¥Â”Kߥþd­Ì®_=ÔÄŠÅi÷&eºÎÒ\õS9Ç-Õ6K‚ó3³áH¨$JÓ‘fe]4‡‘RG:ÒläYEQSÑÄz—6Ái*£5Ý€4½ŽtQÊUJ6 þü–—úzn»ì}òy˜œÿʼn'Þþ¶§ ï“\!-€+¤ó®ÀiÞ¸‹’ÍÒÚd`©Méw׫2ït±ˆ²,³êBäx,5Ó³ ‰Ñ¨q7‘TŠ8¾Ucâ2d³ŠãÙHh›´n‡››‡ˆ˜kf™Ì{'ýl^IDAT’t¤À(HÍ“‹æ0RÿTOGÚ/]*T¤ËQGÚ~>'ãÆŒ 4û¶J•RÔ¡ÙÀ$•Ñß©×á†~n]´q?i.¹héÌÌlGÇâ… -\¸¨£c±ªb/˜,œÊ«oæ ðfÞÌ«êÞ¸K]ÊZOxûWVXÍ—ñ>ÂHJUSæ ]–Ìò1 šŽƒà}§¤‘vëYNk©…é<ýÍq®©¯ð.Ó@Üôã¦rº(e\ç)aÁXBQY2¢¥FEÑü 'nÝVGZ‘ø:ÒÙl–yYq$g†,{~ÌN¡Ùyᾨy¼9±70å¬thîÛªßz–uIDAT3÷å}g÷²âæÜȯц5;áÖ»¬[·nüðé©©ÉööùííóOž<9~øŒ&*­N^Úqö¥ÓÂïÏ{éÁ³/í8+p×»Ô¥¬•.æ%3Ú^a5?Æ;âT(3%3Ô´ž®÷=BÃÏ,£TÇ$ä3z7JÑ‘¦ad}N! uAõu¤iä¸às¨vÒå-«#íqVÚëmµ¥Õ¡ý¾F{ Ðÿ×n¿LŽÏhpó\panüõÜøëƒ›ïÐŽ«Çæ¬ÇçÔcs…cÜõ.$•Šê£Ëúœ)IeYsÓö%‰k²mƒÑVàX"šJ^„n0 ‰Q0ΔÉ.J'É‘IDAT‰8¾J’ñzE›ä÷a¼#NúMFì#fPêÒÊiq¸™Í*Š]Z–IÈGÌ^”¤#ÍÈó4‡‘ú§Z:Ò¼¤“1GÇÅ[YºHTôêÞçRhYi¯ŒÛU ÝÞVu[JV‡ö¸¡_£[˜Rü»¬[·îÜvÓÿ¸í&mÄ%0Ö`1ÑW~Ó›SŒöI •I¥œý`jæp#dW¦›Gœ Y÷kFÁù•Ú‘Je‡\wF@¤$’2?ŸtNÍcšÁtFÌϬ²l›ž—-’t¤9²ÀŒæ0RsêGGš\ÊÊ (ŠQ‹ÄD&ÓWÄøÚв:ÒÅ2nWf´‘wÑAKW‡f»«?uÉ̱IDAThýÉÆú«•‹×«¡†~u¥æP.Åú²GXö´DiW"âehUY”l¶Ò¢w¨#ÝT ŽtPPGºÉ©uhÿ°úº³†¾îÙ³30}vvzzfu¤‘FƵžŸ=kè¥ÏLÏÎ êH#ŸÏ/\¸ ££c$=,–†/nŸâĉoÛ‚ 7´ð¸ã=k¯Þ^Ó©úMîôìO$+AüÕg’*µWLGšs©[ª¥#m¾2d¢W‚tåá«L{È#s¤}K§eu¤YñgV;Ú¥ìèJ8Ug?ªË”™S-lƒ—Ç&޾ú›ßÿÍo9zòÈÑ“ÇçOŸž§”¿ÒIDAT>}zzv¶ÐÖÖvÎ9çÌ›7ï屉ÊÛR%´q?i.¹héÌÌlGÇâ… -\¸¨£c±ªb/pC û2ÞGí%)UMƒª„lV–ó‹ÈÉá@ezéåÕ‘æA€jëH+Éõ ja°9#ËTVeÚ²˜‘G6tHû–‹ÖÔ‘vÈ +àÔŽæ@¤$bÔ££Oç-7mKyýq\®åWŠ.d}ˆÅŸ1¬¶a›k*Qæñ¡ƒ­(°áº¿þÁ~ò 'ÿá<ðŸ¿øá£{®ý›ÕŬo ­wY·nÝøáÓSS“ííóÛÛçŸ}m€6ð?¯MÚÚæµ ´i' B›`˜ü»×Nð,núâ/À%uÞ|sŽ @ƒ û1ž¹‹E­)D±dmAe»„ð:×$•"BR³<£ÒÍdÜDೊ"R>`«qIDATO­‰üÖ½XŠƒ:ÒMêHu¤›Ÿr²ßT¦ûêá7Îÿÿ}—ÿÛPGº<4 ðx¸´”¤m…^q±*œ^:êH#&¨# Hí©aÇ¥¡…ÇÃ¥%J»ÙxÖn9Wü– Û¸‹ÙsGAjÂ[Î]€ã.HÓS⸠êH7XzAi²k²ì´&¯~£Ö&Ôì¸ þÁ9#A¤ö Ž4âì» ¨#Ô‘®MV!ëܼ:Ç]ÿTNGºþ¼tµ4¥èHóu¡ÃèHÑ…ö­#m«‹†.Œ½ÒÕ\¦µM¯#šÊ•ŒŸ˜Y½!ºú”ØÕ>—®¤Ýbภâ=±+IDATŸ2ëH»¨ #µ¤Ti®.tpébºÐt¤MÇ‘¦?¸ú’i-FSëH70¢”Éh²5)R‚Ä.*i‡Ç]ª ÷9PÖè+ÙM/¯Žt Ua¤J”¨#íBiž.t :ÒFœ¦~@É"Òš=¨#í,‡Â3]VQè>:­Ò¢rã^ªEÕz‡]“f{YiÇ`_;Ú»ÔÃIì–¤¤íeNSSʸË3Ï>÷õol¿óÎ/=óìsæÁyYÄþ o}í‚>•ëo`X×gÔ|•†\tBð^ÞÑzé•Б‡ª0R÷qÚÂèB‡Ô‘6pU!ð¯#mž4Å'Ê " €:ÒŒƒÃrF@V8¾IDAT¥Ö¸ôʰ%ÚCV»"¿T‹©õr’.&Øë*øìÐŽfôœ9„•Ø-MIÛã´æ&ô¸Ë}÷oxeìòË.]³fíË¿ÎmݺUÿaºpÝẠÂÜONi`ºvÅ[_Ãæc<üàb)©Çc¼›.ˆ^z%t¤‘Æ#¨.t(i+5K:¼Ž´¦/(ÄdB —," ¨#Íà°œ#±KÉfÈ*Q"‰YM€Öñìæ–jQµ^6颂½~ŸÙx\²^b·%íV%ܸK:~ëâEíííù|>ŸÏ/\¸ ££c$=ê”zf &§T˜œT'§T˜ryÒKè¸c̈ ËéÌp õƒBMIDATç20ÌŒ²Crü¯¦!ÅgØÔÓ .º#;ÍÇýþð§—^1iÊÄH}àójYñ:ÒnºÐvŠëH[ë]ì¿TDD …u¤y0»Q”¬,gŨØG²²œUüÎÙ•¢Ö˧‚ÏA%v+§¤ÝÔ„wÙûäó09yæèÑ#G™šš€ÇŸ|àŒ:|Ûò §@ÞxJ¾á”:9Ç‹ƒ;é9"èrºëp ð†™„‡Ì8"3ìÃx&%›5º.aÝpŒFó!„è…ÖK/¯Ž4OU©¼t¤yºÐ¡u¤Y]è:ÒîTHDZUGš…'±+öH&³¤OÔ]µ~IDAT^ÚdðõâH­×^ìe-ç_31³ñp“ -±[F%íVBwñó—æü%‹óùük'NœxûÛœ.¼OZp…´®Î»BZ§yoóÜ‘HïA—Ó]‡u˜a6!ÇÀ!;Žèöc¼ç`døÁE.þ†IJ…ÒôÒË­#ͪ #µ¦TiF:´Ž´2ÌèBS«RèHWŸ–Õ‘æÀ•Ø‚¢W 1 ²,úËI1µ^ÝÃ;{ iŽðµ_;Ú^IÚ””*…•Ø-“’v‹¡»øùKsÉEKÇÆÆ–,YR( ­­íøñc±‹ÿ`²p*¯j‹&ÞÌ€ªžá»¿ÔWOIDATdÅYÓJkn¸€60,+„˜]&!¢ªÚ’Á¸&RM͈ɘL2jFMìÓ§ñŽ89o$¥ªr\e !Imp1c‹VÚEbÉáò<Ù'϶—¤—¾}ûÎgŸ}öÙgŸÝ¾}§ZŒªµ L¸ÒKk‰J%Â×3©oú&Û²†ôÞ>MÀo_=þúñS¯¿‘?þFþ§Oœ–Òy'©põÜì®x» ­,Ë„¤*A¤8¡÷ n¾ãÑG}ñ—‡à’‹:o¾yv\=Æ]ÝÂb;ˆ‰â#‚¶Õ”Çp ¡{Ò΄ì‡$è¯bTv û1žŒµ!XIûÂ.’T&£ÒÍdˆËÎ笢ˆÔÈ>€ØG²1€ãîÅRÔ‘F©#PGº–ÈqÖEC}EX¦´”¤mgdq±êÕÃo„¨ç¨#Ýœ`é¥ÉJ¬É²Óš ŽtõѦvxÛIDAT²”k¥fÙ#,{Z¢´+‹ ñT¥»/οeçŒAÚSÃq’*³OÀ²GX´D)£Jå6†›L%– Ž4bàíÔ5ä<@é aìô¬?¿9Hù©ý„Ò8”¨#í ƒ:ÒõŠiVœû«Õh B¸?Í_]+X¨F³ Ž4 ¿4äx<«íN¨¢ï6öN1Žóî ÆÑi ­i„u¤ÿ”¦#í £ º¨*¥î‹Ôš`:Ò¬˜3õk0ÕhÐÜâ‚«ËúWnÓitÕhÔ‘.Š’ÍBU\zéêºÜ5’ƒiNpÜñOi:ÒÎ0YÅtQɈ µ"˜Ž4+ælýX'ñH>ïIDAT\IÆlnqiÕhöWê4»fEyU£¹£Ž4S$V¾é1·,p3å|±•W)FŽÇŠ6Ú¡¥âzº»©¶ÑÁ¸ÌÕĦðRPçß哃impÜñOé:ÒÌZTôópC꛸"#æJ5ZIÆÖÃ.·Á_=*XùU£9i Ž4}¶›,3Sb¶Ì:ް‚/téq•bHÊôm•‰&½Nw1U”$C°ÂªÀnWÁ_IòDÎË-ÓÂà¸KÉx –'úXR©úÒu¤iH*Cdëõ {çÄ)æJ5šŒ%%‹%K5š÷«~¯‚UN5šu¤mæùeædÖ~DæéÃÙ9wIDAT6û—MæÊ>³§3¦šj[²œ5Îw¹ ¾àŠœ—[¦…)eÜå™gŸûú7¶ßyç—žyö9óà¼,bÿ…·ÏtdWà•:-ßý½÷®É¾„XƒåHË-i’r6öµ \:ÒæËi&!¢ŽtÃÀÕ‘6§g©FSËWt¯ØtÃõW~«²j4KëêHW@–¹R0¦)‘•eålE.]¦ÃƒjM# ¡Ç]î»ëÄ+c—_véš5k_þunëÖ­úÓ…ë6×mæ~rJûÓeڹ̮À«Æ™mgå×`)5ž-IGÚ+Üú„‡21R_P:Ò<1簪ќ„lë]¸üU0ƒºãÞIDATÊ©FsÒjIi‡,sL‘gN9°™ÕŽºÍËã|Ë>3 ÒbÉÊñ°]jÅ ç¾0ÄԚvM1„¥ÍA¸q—t:ýÖÅ‹ÚÛÛóù|>Ÿ_¸pAGGÇHzÔ)õÌLN©09©NN©0åÒw¡‡Rœƒ+ÆwΪ,£+ëX€ÅYžå±Œ]?G¥3ƒ=zúζ¤|k°økË|®x¬ ÅöÅôÔ¯Àzç;±3Œ±òÁ6´Ôæ::P]£0¦F •‘DÛ¯$•‚¸6ÏÕ'¢bV¿ææ¡,e*X½ JRT/˜õŠk¤RQmúKq”¢;þC†@–éÕ§43¢²;IDATé¼°G ¬ “É.‰H»ú·B²Yp!©Œ~¿šˆ’D30°Ô©ÂK;΀°c¨Ü(!ñä°"Y» ÄhT‰'eÉÙ§P”,@‘6u®2,+D"Mš¿Ê²,‰D•8/~·´X{”d|¸/%‘”šIÆÖg Ѩ¢eBIƒьԾKˆ'HʹâG”$⊘ь@_Á(‰à泿£š ŽtS¥”&+±&ËNk‚:ÒAÜ|Ç£>úâ/À%uÞ|ó:í¸zŒ»º……¤R²Ú71¡MâÄb‚`Éd$Q”$"ÄA$ijCŸKR*% Jˆž¤TIpƿˇ3-Öž(Äô(ÅD&#ˆf¬dr%4QIDATmA©5Xà¶KHj–gcT9d2”${‚Õ±©Âöí;Eñ] (?õ©OÔÐ l|KK/(MVbM–ÖäÕÃoœ;ÿ- mÚdÒ¼6Ahk›×‚Ц=“¡M0žN¿{íÄÿíG«¯ºJûºoÿþzhÉCPCi 9îô>X:Þn:Ëšídª‚Èqï=áê¹Ù]Áõ.ˆAP‰8””3i\išVmnˆ‹ÒJÔ°ãb->ŠCãnµ]€•¾å¸Ï&vÕx#q‰:ÒaT…ƒã­MíóWfã}kµÓŵ¾½u¤}èNû¯ÅE­­ãލœªB Kuœ¶êî^Ñæ0ƃ”oÕIDAT¦”’ëÆRlöH»MË/LoIDATé‹éáÓ³hNK‡›„CóÙÃŒòz å$äðXÊ80 ááñAƒ»4ü‚ëbK Cã!MV>JÑ‘.YUؼTl³ã†e¦ruQõ×–tá–§§Ž4K•¥9‘Së]ب”dÌ­ãB× ·Ï¥Ð:Ò¢”I¾{’’ev lÏ©ØGX½{­'äSáÙÄt¾Î)LFóÙ¦tÅfnFx Ùô¨eûW`J£_íƒpØÔ”2îò̳Ï}ýÛï¼óKÏ<ûœypÞG±ÿ8'{õBûÖ5߸ÅißéjiJ—1 ¿g¯ODSjŠð|±1ûOޤª0ïrŽÇoJ2K($¥¦ˆ&ó›1ïÙÄÁIDAT.’JÉå=¢¢éÐÏ8T*œThä¸ù.Ä>ÐDË÷ áΜ¹hzœ×‘)OeX²K+;^‰9c²Vø u€©TÌú1ÏD¥ Ë (Ša!÷¢WQ’¢ºãM‘÷Ó”,Äb E¶•"ß7%ëp³Rèž9c‰L†ã3Ô ÆÉ©(í²Â“”š"†ÓÏD&úå`Ü¥ &2)QnaŠ}$›P¤”¹âÖ&¼·P*otF —„ìKI6.ÐLE(êá´(¢{¶0¡Ç]î»ë…üÁå—] üŸÿìæ›o˜.\wý<øÖ'ßüÄŽøîÎç|QÊd\¢V†e £¿¿;IDATd›b€<â4ï8%‹ ñ”š"î+…œÔƒúö½ŒþÞé®yà‘#"%’±"¢%‚:ÒÍD%t¤K_Ï Ž4Ro´¸ŽtPFFFvìxðÑG=pàÀ~øÃGvìØñ£‘©ª*\Ñþ±õ=°PUÕ¾m ûXØvÅyœ(ŒÛКœ4îJí—¡æ "Ò™„htÀIŠšt¤D˜ÆóÛ:îHÚØzvXCMïšié?[ß,™h#*MÌÚŒALd¬ÿyÍ93!V;NQô½ø²¹/Ìz`»ìL4¢uÙ`¨áØ\¶ïÿùjFÍfšŸYs±IDAT{¯¬,`ߥUAÕh.-’M6¿~J  ¥TÏ¢Ö­VIªEè}Fƒ›ï¸à‚ sã¯çÆ_ïììÜ|‡v\=6gý;>§›+sw£ ûqŒÉd—vO†úš¤RQ-Ôz%¬Ó]¤3nþ§I*“ÈÆé½ËºJ´u_ˆ’D4W*Q3p,åë`‹}D¤|0˜±˜‘š?­˜ýTs«L„˜é• l^R\)¶Ï(EèµÂ¦×Pûúá¡\`1‡Û?ÁÛ(a^ îš¿ÓÖÃÆò&êZtåÅéé‹À¹×‹gª±hœÍ³<=rí^U¬êÄ„´­Àwh¿†*Yg‰y,Ž/÷žB¦IDAT Jà²Ï(“]ʇ͔Ÿl†+ KvÀ¾'‚ƒmc‡3[vÇ…LB´må('w«ˆÿ¤é;†—î3BÊsKѻʙЧûlRÁ}FN¯{r\0–9ÓÓpr\H‚1­U™ßòêH€¥ë2'êRt•ÇÕT]ºŽ½^.¦†QöεKU±U'ëÉbäB$ļ J2™­ˆ2c“`ù¨¨µ%¢¤o u{çôµöp Àk„2,ƒÆ—à#ÝAô¢•dL°6‹¨)hi æW·¡06YèÃ8åؤN!•" Ç…x6Q!̓:Ò²œMdœ-…’ŒÙ¼œ–_æ·b:Ò¯ôóDIDATUL”[tUÁÍTV5Z¿^.¦†QæDEûÌåUgub±r!šOc9Éq«Z*¬v0_ûס)mMs0Î*iÿ¾r¼ò>³­¬ Ë@$¥&¥MãÌ1^#¦©l+ Ê[(_lÙ^€ô‰Î¢³‰Z+Ee–ÊÕ]k®08!D¯ÁY%*IQó åžÛ‡l8W/š-eXú¦Ðo”’Ô3ª$ìþ!]O§Ï%ǸæÇ¦Ò/éþ׻ȲlMÓ™­ózØÅ·±2¿eÓ‘¢r\†D9EWEx¦².ZôëåbjÕhß¹6ªŠWu2Ã&“¦PAT’¢‰¤¬$“ÙD¹×ÿ³ÎÞ¿r¼8½¤tIDAT02È/ UÁ îGù^Àïév§6EG‹ZG“<Ç”WuZ£[óŠÁ†ç»ßˆŠZßWÉ‚%$*+V§ž»l8?#L±ð×ðÒjIpÜñO µºÄš ‰ÇeP†eEoFb EIPë×*)óë0)°ŽtéJ×%$ZíÆ‰o*Ó¡¯ÇÔ°ªÑLT6hGÒÕÉz\ÅdBòâ¾P¿¼•–¹¿²^XÝiCý©ªÞýÌ·³óBi[9b8òȆ tº‡…Ae–Ù9#Ú+'<_\ì# dA–!*BT%kêQÕÇvȆs3Â-1vBŠIË£¨š›šŒ»ü(ý„P âIDAT ø·úK¼p¡öéÖ‹¥áØXÒ_¹*$ó[>ið;«UÞDý̵”Ž©Ž,¹\/ËÔ’U£]sM'íV´Ìe•63‰”¡2ÝïEE—\ðeµÎKµ».F—0.o/£þ—•˜ ‹áN¯b4*ËrV‰¢õd²JV‹]üȆ³ÅBí°EXj2îruïªÇFþ­þßRðßw!Äôhì±ûÉCæ7$åÖ‘æ¨Ó«0*‘¨¿¢«,´©ÔtžózñL ©ÍŠ*é²TQr]ïY nJËŒ7ÏH8ºÓ/ •ÇŸ þ‡{ wϬƒïôOP™å`á !Ùd2V-ôèIDAT«õVÄ(Èë“ºŠµxø²áŽè="% £&cãq™IË;‹MLMÆ]Jˆ"5¡Ø>£˜¾¼..SÓ1™¸¬<Õd~Î5~%AR)ðعn¬µ°M&X;ö…8¤2’õÝìVtYEksÊ›¨Ÿ¢«Œ©¶® s½XSéðœbá”§Žw®+QUÊë\ïMÁÕtQ’ —6?/ •Fñ飂wÄ™GϬƒÏŒÇczÃRtþ”w\QBø¨ŠY¹£"Xëù}Å£eÛ½êrü^ˆR†.˜88MK­Æ]`bçM7îœ(”lüáW]}×AN1~ê]uµõïï.‘L> IDATnA…ñYe9«d„íÛwŠâ»@Q~êSŸ¨ºNjàÔ\ŽÛò62~J/hv›¨x8T»¾UlBU£öšÍ]]B¤X^=üƹó߂Рuqæµ B[Û¼6„6m€ ´™+~÷Ú‰ÿÛV_u•öußþýõÐ’‡€Õ*òÏ3Ï>—ɼøúkGW®úðû¯x¯ÿ”~&vÞt|aÛõÞAyÁ&ú»›&®ìÚWnºqõü^yÛ¶eß_¸îv‹ÙÛøÃ7&áö7¸Y0±ÓŒ¿óÚ¿rí2¾Í>3$ƒ•: à=ï¾4D=7»+çxDÝ"ËóZ™§ÆUÆðˆîv¼IDAT²,)Uƒ9à #[~"HJm»©X,Ýq¹ïþ­^ð—_v)¾âʲNý”•·ÝãßµcbnêÝÑyåJ˜X¶¢sÇÃOÙ{Vtîxø)€·¸íJÛÈ ÛÍ¢øÆUOOPv²eÂ)%~'ú»›ó켉2ì·¯Z 4¨#ÝT`é¥ÉJ¬É²Óš´¸ŽtPö>ùüåÑ?šœ<39yÆ<øø“/øì»Pã.Ol¾qÇÒÛ|åJ˜xèïnºë‰Çn_öðI¸ýÀcWÀÄΛžÒ;%·<¸`â©ñÎ+NÀÄŽ›zw±®¼mÛ2*‘'6ß8¾aä€þà¿kçŠ`3,+¯¼2¹¹÷ ¸Rzìö•óqIDAT°lÃíŸ|Z›©Ñz ×xìv€‰ÆèGžJ^ýÐΉ+ßñ°‘5Í~W&Æ;·¸MëvܵsÅ6ëD£LÀYJ׺çñÚõ_ŸJ^ýЮµ x #‚ R{´}F~þÒœ¿dq>Ÿâĉo›ß±+kŸÑÄ+‡:?¹áJ€Î+Wv>õÓ§'~ú4èGŒ0;nºq|=Ø`ÒùɯŒxLÿg0ñÊ!xb³¶&÷Æã‡|g°âöxìÊŸ^ÝË[Üi7’>Ò¹¬Óžµ"t®\Ñ  •ÀÄø!N™0G<òh®G¾ë ˜xeÂnXÀ2p‚}—Vu¤ËHÑ›žP\IDATÁÒkðZW mÜÅÏ_šK.Z:33ÛѱxáÂE .êèX¬ª…ØÅË}&zuïª&v~ò¶kÇ7»í*ò<ѵgãŸ+¥ÇF¤fwÁ?ãÕØäÈãÄΛn|bŶxlÛ'C.v§hßE¶y00]eêÇd‡|/LéðR ü«ówÿ ß ¿|ìš ÔUfdxìáÙØ¨v)P~Qsr‰Š…¡5ka™FºšÕyÂ5¨PŽŸÂiÊ.‚’ŒÅJKo\ÂùwY·nÝøáÓSS“ííóÛÛçŸx$µe¥ý5ÃIDATË&žúiñn³Æ¾q•±L´)˜'ŒÏ¯ê\¶Tÿì{üæÊ­˜xâi§¡LBF °eÂÑNàæÑÅ™xꉲwžJÒ‘æ¨ W@0¹:Ò.bÅMH1iö*»È;‡Ñ‘¢æ'äUóéH.-OÅf¤®¥LFªµ5#ô>£ÁÍw\pÁ…¹ñ×sã¯wvvn¾Ãÿ¹Ô¸ËÊÛ¶}òÐ]«®î]uÓCËn»}¥¶¬D;ruïªÍƃyÅíÒRm*¿OÀbÅ|u磌‹xCŸ˜X¶âÊeÖέ˜Hç>±âöë; óú W>±¹×µóá4àöeßhL¶œœIDATè¸%ÚªUW÷®ºé©•_¹}%¯LØ#.yì¼~C§ÛÝËÊ>îâµGZ”2j_2¶^ÿ*ËÙD&Cµ€ÖîY±ˆrVÈ:Ô'ªÅ·ë$Çå¬íWÍ™š2ª=Bu±â¾a3kÍ‹[ùȲÕKÕ~•©£}ükὯgQëžò3’è–P1ô\ˆzçeX‘DQN&¢$‘-ËÀ‚’Œ­W¢ Ë TFLÆŠ.Áª$c¦ƒ±D&#A2¶H4‘I*c ` ñl"Eä¤ h ®Q€á¸“Í#ÉØzص Ö¯·‡¬\Ã-kQë8m›ž55E¬œ›_M)Ão‰Æ,~1'¤¿E<ÛIDAT–•Àú„¢@LHˆ‰Ì.XOÍÌPa2}Ã6 mÙ¶ö)ëYsäÅ™ºÓ@Ñ‘}º_mqi¤áWÏÍî úÕm5ül1*%<‚ |,ß‹úä(ç͙ɳ¿öøøµ×œ™<«ýs©~.*GÍ:.>ýòƒ9=d•3Q›‹Î²:-ݶÒÎ WÏQGºÙ@é ”¿¾-øtzÄŸn°ÿ¾ œ Ø€pae¥¹BÓú+åÔÔìýCßþûþ¿€Ï~zƒùîú{õÂ%IDATöÔÔlõL¯ ¥Œ»<óìs™Ì‹¯¿vt媿ÿŠ÷jç}drî'§Â›È ï©g@õ SÙJ2¶$"Ç`Î.*¦‡'jÔÓ{T´Ÿìi–Ý•ȹ>Æ\ÃÕsÔ‘n*°ô‚Òd%ÖdÙiMÌ5Œ333ðåÁo~nàS`6è_ü¦öS“ºãrßý[/¼à.¿ìR8xðàüüg7ß|3ÀtáºëçÀ·>ùæ'vtÀwwÊf.€œL@"C _jFß¿©Àz}!¶¶Æ0 ²H¢²ÝûCE`Œqó» J™LE-ñE¸zŽsF‚ õˆ¹ûž-Û̓÷lÙ®R ™³IDATÔм²NÏ(N¿uñ¢ööö|>ŸÏç.\ÐÑÑ1’uJ=3“S*LNª“S*Ly–Gÿ‹šÖêX,©èûò ¿šÑ¨þ¤RDÛä&+” ˆšCÍ"YR’±X2/Å/€ÃÍu"&±xÜŠ\›¾±’£rNOQyM ™áb¦B‹³ ‹©ª…«çØwiUPGšK‹d³¡šQgùj{Ï)±2”µ.iÍ:ݸ7áÆ]ö>ù<LNž9zôÈÑ£G¦¦¦àñ'_8£ßð¦|Ã)7ž’o8¥NzxÄa]!Ûý2k¾L÷Ù"(Ù¬Ñu!„ȎΆé{\–e³+ÁèˆêIDAT$•~ >»ƒÁCû¡9‘;}[»z|fìÔ]rgXo;‘u'íðLÍÏ=¤#ÍÊüºi8ËYD¤&X}^Û%at¡Íkè­;HGÚ[bšùÕEº^t¤±[c³ÙGê1r<žMdjª N¨rnîŽ ã.~þÒœ¿dq>ŸâĉoÛ€Ó…÷I ®ÀÒyWH à´û¸‹’ÍN–Å>"ʲ¬ Ë@ùÎÍ}¶Ãµ˜Ž®"K;5$„Ȳ J6kÛî@$5Y´§Ž1Þ‘;¼KSEQ£ï&öQQ²œ2dŽh'²ê>>ëyi»Ì/_£¸Â«®‘¬fAIDAT@(Éõ†7X›,´1ŠÉèl»©v‡Õ‘ö’˜vþê"a ÐŒ:ÒÕ·¶ëF¹…¯Šºu ”lV¯CÛ²¢»øùKsÉEKgff;:/\¸háÂE‹Uµ»x9ÀdáT^}3_€7óðf^Uϔ扸¨ûl’RÕ”¡÷EÉfåa9ꃓv99Ì œØŒ B1Ïõ€WßE”2žãEvbC™¯ØYH°ùÙ7F1‰¹13«(Ѩh툶‹:háÝ~õ’Œy XƸ+K[5M$ÆcYN&¢e߯í¯¢&Œ“ŠóWÞ„13Ф$cf§^ŽWi‹#gÒÝi=¹ÎÙi t™K¢¹IDATöŸ]FôìÇ•d,Ç#vòá"Çc Å¢‹%zˆÍ¬NŒ)Åms¿pÔ ~Âf[Tî4œ‘£Ïò%‹% ý»Ž4­³Í| ¥#œ\;IDATÍý‰Ö‘v;Ñ&a­SMi€"*Á>ÅÝiÑЃ‚â:ÞåCO4jMº{ bðõ–¸)HöíßOk`Kî‡R.+â jõ6SQIDATÜì®ØÆ]ŽÏÿ$ýtWd™¦õÈž©h/ª GǺ¯þ :Ž·Ïÿ½ F ‚Ô9ÇONvu½cù²ÎÐ19öZÐFõ¼sÎ œž(¶äž”~Yկ綾Ëþ=?ûÈÚ^|ñ;ýœù§/ýjÿžg೟Ùð–·š{Bifff¿öõ‡—/GèB4ª½Ý«B':Qh¥–¼ôËŠ8¨~=wÖTŸik!÷xÞò–sühX#‚4óçÿ”ìÁ3D£Z:Ø’{P–ËŠ8¨r=çô²gçœ+±?¼jÕã8Ïœ7Ïü|úôT‰v ‚ÔÚCN°ÖÒ†ÄѨr[T°—‘IDAT7ª¥ƒ-¹庬ˆƒjÖsN×óìÔ ýïëViF8Ž—ž6‚øä÷¿ƒûAª€PZ ~ZÔ²7ªuÛ’×Éí\ÊeEhEZÍzÎw¡‡ ?öÑ^íÃ÷q '.X0ßü<77§€*BU´Áª“HSuÊ«‘¡’æ[»Ýtãß:þ^Û×[©ôªrùñ~©W ö“Îk+5otãùýGF´vµç/×~ÿÛÞfºQ-2·äì_¥â ¤µ^·3o9)ëeET³žsú.““zò¿öíÃwúyA¤¥ÚJ]áh?¿óдÖõcíýÎC?(1ò¢‰bKÎ¥ôËŠ`L”ßIDAT8¨f=çô]ÎLž€Ï~zƒöõkÛÖŽx0== ª ‚Z¥ ÄæyY­Î€Hu©3gKS'qG­ÊõÇû%0Õº_TU0ÓšWò3ŽmB¿¶ýa­ýøµ×|mûÃ¥&àžhÙZòâcœ«èri·3{ë•јò^VÄA5ë9wÎhîúöß÷ÿ-|öÓîú¶w,Ú)jÓ>$æÐ7™:[¹Ùúª<‹›ó²4>ÚýbLUB©O9£…´ÐZW¸èÛì¯e¡.Zò -q;3·^y)ßeET³žs.ÞŒÁ—¿i&?ÃPF#AêAÿOÃÑxš ú—¿Y¹F[r¤VçRIDAToJ¹¬ø¯æõœ3î¢R«™îÙ²ýó›> ŸøÔ=[¶»ÅrvºÊs¨ÍóºÚD“LGɾÂý[õŠ× àýŒ²×cºQÕZT¸gËv•Q˜©P¢åhÉ‹—½¹PËq;—ˤœT³ž÷¢¨UzêÓÓs*¶U܎Шí$/ ¡*y©dVV~`ÅôôÜʬ˜žž]ù˜+•^•J ï— Të~¡Ò)ï䂟µ”½%ç]qçYœ–Gð¾9§”ϘŠ]VÄA¥ë¹/ÐE“/4Q¥æiˆ ¹²ÓLy©XbAi¦³åE(wG¶úŸélÉý Q+ÂU¤ºŒÊIDATÀÆ”ý²"*ZÏË£^•A¤ÑÁ–iœ}——Ç&::|©;¾<6¡}Èýjl— Òtä~5¶hÑÂ# Ѩ–¶ä”å²"ª\Ïm}—¿ù›k|ð»K–,ñsæ±cÇ7\×·àÜ©Ÿÿâào~s¬tSAêŠeï8ÿ¯zÞ÷»×N„Ž!D£:wöLèäB'ÚR-yé—qPýz.lß¾Sߊr°”ˆAZ±úª«´ûöﯭ%R9ÌîŠ5îbV}A¤AÁ–ibŽý­ö7‰!‚ ÒH`ßAAFš3ÂYRAAêm½ 8öáD)‚ ‚9ùkZIDAT u=‚sF‚ ‚4ØwAADgßþýïXöǵ¶¢ØwAA¤‘(ž‚ ‚ ¡{é»Â/¿øºÒ# ˯¿ûóóŸ^÷‹ã ö]A¤Æ Â…ú‚Û¯‡ö}©ãÝGͯ“/þQ ÈÏNÏ­ê¾Íqðß¿'P$~ýÝ÷¬ºí¿@UAáÀÝ—„ë¾üú»ïYõàÀïòö]A¤ÆÌªóàü·ð=o]ðAí멹W‚Æ_Pá¹_üÚüúÞ÷üi`í¨¯¯>ùÕwÞ}Õž‡Ù3 ¨«¾ð_û7_öÎÿ§Ÿ±ï‚ ‚ ìrUÀIDAT5f®Ð‚ýà‹÷\—|þè‰':Úý‘=§úZ«jÎÅœ8qBUá/Þý'z"ª sÁóì"¨ªªÎM€ ¨ª*T5h £ßzχ?@;‚ *¨«n=°ïžww}¢x÷ÅïZÝW¼ºçñŸ<ôð·^=òª“×.]¶|é²µ[r>ð ·eÍò¥Ë–/]¶|éšûFK¯»7.3’[Ö?RñäA–gVﻨæ¿ï¹@›L@}íõ£Ð&œ£ý››W4Bs.^{ýhAUÿýç¿zæç¿~æç¹.WPÕ9µx$ *Ìåa6¯Îžfó…¹`}—_î¸òÒü!IDAT|õ-ßWgÞ€éãêôquæÌ‡™7Vßòƒ_îxwÑÓ}õ]~øØ#¯Œ]~Ù¥kÖ¬}ù×¹Ç~ôH±3ºößskÄOìEé_;Ò³çÐøØ¡ñ±ºF+ÛwÉÝ·zY? iÉ‚tº¢é!‚ ÀìÜ9Ð&èÿþën½ã2W€ç7_xÑ™Ÿ~ðáW¶~zžpî<áÜ™B‘nÇè·Þ­^˜ƒÜ·ÞsÑ™?ó/XØÿ¡\6ûËæV\>W(¨~:@Ì@ÍÃÜ)˜Í«sù@sF/}óò÷¦©Ó¯Ãô1˜>¦õ``úuuúØšþ¯e¿y¹w ÅçŒ2Ê o]¼¨©×:IDAT½½=ŸÏÀÂ… fgg_Tž¿D¼Ì§•¹ûV¯Ôú]{ö À–5kGÆèé_žî{ ËÆÖëéŠè_{‡†´·¬Y{oN;2ö@OnËš~ضgSDû©¶ ÁýйwpwïÐØ=0Ò¿|£Ö é:41Ow¤5šNÃÀÍ0-ð.ÉvÁH:=Cû"ƒ«sF´Æq=¡n^ÞiÃrn– ‚ -„ÖiƒüìŸ/üðÿx¦0÷:\uûÓt°½ÿôèçdïnÇK^¾Æ8}Õ?X§«3¯ïçúúÜ¿úó¯ÍΕä$¥0§Âì›æ`Ë\¾ËìüxðÿPÓOã7IDAT„ܸT€ÝC·óXEFqŠ÷]ö>ùüåÑ?šœ<39yÆ<øø“/øï»DnÙ7~ ìÞ¸lpd`hÓ@÷ÒÝ»èéØNw÷ €3L¯qvow÷Æþå#ýÝŒëGú×ÞÛ5th¯Ö3èéग़»77ph|F×n„¡CãÝ Ÿ¾|t`ìPh-=Z§rét®‹é@ð’ËFöÏm\Ö¿q@û0¸e`È8ؽqYÿÆî±zù  é_ëb ‚ ÒJÌÌ΀6þwâÂ|þêÔËÜ`³³…ymó=Æ]2_¿ì#Ÿßîvú‰ßýJû0§ªÓsa˼1IDAT¼¾ð¯— ‚Öë˜=ev2æ ê ÿz™üÙÿ÷¼w$—|æ¿ôؾz™0{RôhÔ‚zI±s5Š›~þ’Åù|þÔ©S摹¹ÂÛß¶ÀOì:Öè@¤+ÐÓÓÛŸêîM§Gà†1Ÿâ=C‡z@[†²ºÈFnÝÖ éî ¦Ó]œD#·h•\: zx€\nFÒËGúõï½£TZérÆ•ã%éí‰@W$Ò¥ÐO׎t÷ôÀ–\œù¢ ó´AifõqõC‰Ã#w\Ð;ðÏü`3ê[„ù³³®ÏîØgžOßyYÏÀ?q~›þ[ÿàÚÇÑK.IDATBA˜)„é» Ð;`l®ž= ¨Ðý÷÷*¨#ƒŸ Û¬ªÎÖ>«s¾Í7ý’‹–Ž-Y²¤P(@[[ÛñãÇbÿ‰_Ór[Ö¬éÙsh ¢OètoÜ’ØëÕ³at?0>ÖÓ¿Ü¥§ˆÈ­{¹#‘HWnK:·©ls7¹-kú=óåf ‚ ÒJÌhë]@€µÿ|䇷]ðןÿÒ~–ûëÿºûkùñ_]váÿÔ¾~uǾ®Yá?òí?ò™Ï|öÀS}jÕ•±G~øÈº_ÉÞ·ÿ§>õ‰WÆS4Úg¾|IߦÏÀð–/¿ÿs;.t ÞñìÛ¿ßì® _]A©1š«Ü6—½Á ð«6A— (øó«KŸ^PÕ­ˆ¨ÚÊ™‚ª–¸GÞÿ¹å{.€|>LÇ…ŽAÃ<Øw)‘M{÷ÔÚA¤)ÚÒßù¾›7Ô9˜ÿTúÿ~ ?kfXIDAT7ëvÌÁü‡výúŠ_}C2¸ˆ'!t¯¥Ä°ï‚ ‚ 5&þÿ¼¯r‘_×û•‹¼&”:d„ ‚ HÓ°úª«ü,v©-ØwAA¤‘À¾ ‚ ‚ ö]Ai$°ï‚ ‚ H#aÛg´oÿþZÙ ‚ â[ߥïšUµ²Azfø*Ý>T! A”á ¿:ý»¼qB¨¢1‚4Uh° B¤(¸ÞAAFû.‚ ‚4ØwAA¤‘(wß%·eÍÚ-¹2GêÉîË–/]¶|iÿîr¤^}û¹‰z˜QQ k’}i\°ý©¨%âÄ_>pIDAT¿ïbU Ü–5ËWê_Fú—otS¹¬#ýý£{ï¹ut0\¥\»tY &ô f;qtpíÒeË}$m4ŽË–/]Ö?ÆgààYöm%ÏBZŒ5f·ÚŸr`V¿òÔClBŒíRø}—®Üè(äv@rÚ¥ÎåF#]]U3͹Ü(tE"‘M{÷lŠ„‰!†ÞIW»:wiMž·Í¹ûV/뇡±Cãc‡ÆÇ AZï;†Î/Ô0ËPšåHë¹u¯Ví÷ô¦×–ï•©¼ÕÛŸ`ûƒ”~ߥ»{T믌Žv tæFr£ÐÓm0Fë‰oLƒÞ“BØ!ÙIDATì7¾jìÞ¨½0åî[­÷Ù×nÉ嶬Y»±íRk”¨¶ž¥¶‘XþØHÿÚ{sf`º7Ížb@²ÈížMÝ‘ÑôîQã˜ñFb„·eFûïÍåî]³|éšþtÆ‹e„:ñ¾Q§é~[±h–¤Ó0°çã{Ïñ™~}¤µ®…•3]N–ÍHÖÞ«—–#/œ gÖÕ ûSG{‡[»%ÇM ¬ðñŠi1"ë}‰S͜퉳u¶ ²ßŶÚË6h£ƒkÍ[r¤ßV±ýÁö©.ã.]Þ= 0šƒ®®îž®t:NtEº´;¶kèÐøØ¡½£ýÚ(bîÞq£å­IDAT\Ï¡ñ1ªf÷ÃÐØ¾Ørã`—ÖmŠŒŽ@n42th|ìÐøPoºc rË>­S?>Ô5880:¸v# =ýî‘þµ£æX?=Ü×;´çÖˆö~f{ð8ÅÁh: =Ý]==½¹´ñ`X¸wû·ärŽ,t é‰îè¢3^,#Ô‰·0£Wz<‡Æ‡zÓæàs.ÎuE¼Þx9uFåH—ͲuAÍbdòÂ^8:ÚQw3¬† û×$"›ºGvkíæîtº»‡W¤Hë±;Ö‡{¹µÝQ-™ÖÉyÿj8j¯GƒÖ50ЛNè–to°îGl°ýAj¿ïéî…ÑQÈ¥·…MÊIDATÓ‰@WFGa4—ëíîÖfŽnèÖƒEv§Ó`ÈÝ»fíè€Vi"‘.£«÷Ù#½=ZÝéîéÑ\Žêt÷@.—Ë¥Ó@Ç–µÞlîÍåF9¯ ¸§D6íÛ7ีÑË@wOOÎÃ4,Œt÷Fr££ll%E›ê™oÌx"]6½'éø9u‰Ê-ËÔ¥‚Ùó¼ çÓ WãIôôè‰tzt` —oÒ"äîÕ/ý`—>Èϯföj¹›i¼ï_ðÑ u÷ôìN§Ò鑞ž^–cûËÊ-ËØþ ¡pÙg‰tíN§s£]=½]==ËæÀßb—È­Cæë ôEµôkIDATëÙ½œ¾ÓÈmY³v¤g­ÓÍF¸×˜puö£ÝmðsJn÷HNo"7¦¶¥)–ÿ J$Ò•+6+°p|e9D^‚^#nÝ›ré4ŒìÎõöD*S¤H£`ŽgЯ+!šŸ÷¯g ÝÝ#»wìÞÝÛí»+€íßLl2á¶Gº·»{tppT0ŒD Ý¿eT[ì‰tåîÔ–ªìÉu÷°¥ë–}C°Q›†ì¿o whlß@ÄÞYÞNk]i£CÛ=’€HOèñƒ=9¿pOáÌ7¦Ó£=Ƙêø5l Tî¸Yàÿxgx'æF=[†Þ¤*j³lEñS_.IDATrÊEO——eª…Ò-góBc^83Ú¢fØæ’MãÙ$ºzzFw÷§õšæmÒ D6í}{£w5Óªe7Ó:y4ALíukÐzníß8:°Éß‹¶? Øþ 審gdÒÕ¹œQE"]Ó»@ïОܚµK—iŸÇz!·…=½gèÝËW¯[»W/ˆ ìÛI§s÷®Y~¯ÏئÀ@d©v$ÒÝЦ¢ø¡gè•@äV«Ä{}’K§áÖmôÈpÿ–t®L #·îÝÓ 0¶,À¦î¥ýËG»{Œ¡¨È¦âé6N¸µkðÞ´fÏà ë-ûöÂ3ï9IDATê5Ë—öëF>0¹Aœqc¡ f³¼oh(½líÒAÓrN^˜ gE;°oïž[‹›á0‰M ÒÝ;:8:0Ôåi-ºØ;°zÍòÕ¹=û8µ©–ÎÖÉyÿZ;exµ×¥A‹ôôDF Ûç&Kl±`ûƒ”aûö¢ø.P”ƒ}׬ª¬ZnËš~؆[ÔŽ2^¸Ý­ Hã°oÿþJ·“¨Z{‚•¶¶`ûƒìÛ¿ÌîŠë¸ ‚”mÉ¡öª‡ C:=Ò3p+mƒƒíOSQÝqA“zwA¤epŒ» #‚ ‚ „mÎhøje‚ uNÚl‚©¼LIDATñƒ­ï²úª«è¯ûöïÿÔ§>Q]{©G¾ùÍo9Ú‡²ƒ ‚4"lãÐÑÑväxþ'é§»"ËTTúW@0ÿªppt¬ûêžwÎyEÒ¦4p­.‚ ‚ ådÿžŸ}dí/¾øECþéK¿Ú¿ç™ÞîUâÇõ.‚ ‚”?ÿÁภ‚ ‚ ågvn®h˜sæÍ 3ö]A)?g§fІ9gA˜¾ Ε9.B\®µ‚ þ‘ã‚N,©$cZ¦$cæ1î)Üã•ÃÛÿ$cÅãHÆœ¬"²7ñl9”ËÎ&cjjšþ×ó—kG¦¦¦ÃÅŒ}—2@Rƒ KûIDATjŠÈ2v^i万”ªªªªfˆKèO\QʨªšIˆÜ³HJÍHüŸüct“|ám¤ŒZ$9žˆJ¶Ì)Éd6¡¤ˆõ [岳ɘœœ6ÿ}죽ð±öÒ''±ï‚ Òoø‚‹ÅbI †bI…þ¢Äb1ÇØ’LBÊ|kÏ]úÙÌâ:®@MÄ’¶Ð¼tc‚P¬sJ¯¶ÊÁ =žÄ¥(Öi¶³’I™b‹$–P”„#kÇW¸åã°ß¸ŽápË/S>r\„X,®•µßcIÅí¸»ýöëëaۙɳڿ_{yðã×^c?3y6\®±ï‚ Ò0ñ±1IDAT(ɘL2úH@TÑž/$¥f¢˜Èd$QÖF@”2™„¨€vF&‘MjO¤¬b4Pº.ã rܽQÕ ‘õÇ›[º¢”QÕ„HR¼ÁŒ@$c‚Yj âÆcÕ1ž”àw04èÄeE¡».@RªV¦FÞ$ÏrpÃ¥|\®cÜòË+’RSDQ ¥ª©h".“ŒšI€<u9®ø¼¾æMMÍNMÍ~öÓ´¯÷}[ûðÙOoÐ~ššš —qì»”’JAÕg‚i5DIŠ&bÆÛ4IYÏT)šHj Éd6!ÑÏa}*DŒë¯G–eúµ?¡€¢Xƒ•KWIÊÑ”5kCR©¨œT@‡P0 IDAT–³ÿ‡½÷qãº=Oµa8Ú,ü€Œ²€ã¨Dcf×êf}™ÖÂØ<–F¤ƒgd8„F~E?RŠ»éÈkƒ!0ó!d¦T ~CïM°^;¶Ü¢"‘1+îxfà@"1€±êO¬nywñÂ.%1+»Á?(qóÖ­sϽEV:÷Ü{„V’}nGŠ‘8“IÙÞ±Šà5>n×±ïûë:>~¡Ä,øý\ë™cyo×׃üûï~›üýŸþó›<øOÿùMòñß÷Û×±÷apí¯ëøŒLÿ¾ ÆŠwI¿ í‚ 2C(‚l ¥–×`Žç¤§‹"2Œ HQ**¥¢’"èÏL®¤q’]y¡Ö'A1š±…y:”ß(-šS/wo¬Ù’¨-`Ø÷vß²©OE×ç\\ú"C‘X7¥8IDAT‰ø¦Úƒm9¿¿e­¨È´ÆêêÍŽh|<¯£$Iþî¨gÆG¿zÌŠ¤›pŠÀP.匨ôr}{ÑsäP—/çýþ'@Q>À\Œƒ!E©¨Äuû"È ƒ¹‘Ž¥$nîâ$Ìv†"s1~rã»Éoÿ·ÿ¯®§ÿ'ÿû®ÿ¸—|F7nÞ4Íô»Œ®4í³¼‚ ˆ\Ih™g™Š()=Áz0'‚ ‚ßhLZ²XhÒ:Œˆÿò+õÑGÿ›^ª mAAFÉ¿ûwg76®å+_éZó÷¿ÿbçþíçŸþ}ÉGÛA ã{âùã;ßYš¬&+8´”IDAT‚ LóWwÉ{ŸyäKZâ;çæHˆïCs57÷ÐPÔÙ‰—¢æ(cOÞß}ô‡îù¦[AÛAÉC¶yøù/j“VAþøË¿å™`ä`¬.‚ ‚ ³Ú.‚ ‚Ìh» ‚Ì$j!‘*4{/GÚ.Ó…ä’ÐÑž‡¼mí±&€V¾¡wTjý{X¥†HIß'#”oOU¯ˆÌð;mÛxÚ¿gÃ_(d¼ÔŠ_,îë¹Üª ‡"áP$œ(ª²!³µ”(& 9SG-E’ù}h©žuµ ûŸÖ$i4'½‰}î—´]&€Çc‹sL計â¶à˜'Æ?IDAT ˹þ¸õé®Ôüú–Ãä?\iè]üZ¶0î3%}ߌJ~[ªzF˜øX&¶ñÔ·Yô ÜnqÚQ ù»ñ¥@Ïå6‚éLŽo”+1€åË•jŒöÅâÁÔˆ­WcôçíÁt…÷‡‘ȸß(Wªk^¦ä°“b½£ÑZì”ãÁ>ôË´]†ƒ¼•3 ãôª*2¯°ŠÈP” X¯·Vr —÷{)ÚšV£ƒýýÞÊøe{¥¶Né_~¹ƒ3îú8ËQ¬f{rØ]¶­D #*†¼Á½ ãТ'#ŠQ½wŠ(Ú2·{È4 :äG%B$Se·ò}OdºØ9WQHIDATé´Ô&“æ{³6ž¾ÅdH÷Ä„­‡)LšÆ wûsÎ|×™îœÖWs9íÚýõ¬M”šO…C‘d"Õ¡§~(êÅñ ; ¦ª–ï¤/=;šîÁeÃ9DE‰‘ iž¢Ô|**ª¦#­µË–>6=¯‹·œ©m—áðó†àW€khš¦5l{J“œí)Îý|CÓ¿•VÜ|€¹½ßs%Mk~¿áwiðÞõÛÞï­×{Ž+­r’áié_×~¹ŒØŸªQÉï7Ò¥ºéã,GŠ2f³%èžÙTŠš£ i N2;¡i%NFâˆ0i '·ó8Øõlp’NxÚ¯IDAT ù…Fƒ÷ö~ç<µNr¸’VâJšVZ¢×ÐH?]p)WÆ?žÈt1„ÓŬº PSÁwL¾Eþ g“¡:»Q®TË•j99cÎ%¶^-g‚j!‘’ƒäìðx ¦+Õ2ñv°§Ó™*‘æ³ÐMŽc»vÿA S-g‚ºzim}™V!°^-WªkñfQ ×rÉ),WxÈvq$ÄÖ«1ºY,@𴻬¾‡¾ô€f1k4m“ãB-—5­TרZ$™×Ej2ÕrÆG¤­Å¡.7]ÅÐKk•jŒš¢Ò¬u°^¨uŒËuñ”3 í2 ŒìVuE”JÖl W*0êHIDAT-Hû’)C’¶…Ö÷{C e[4lˆÁç+¼ûÕ9z-§é.}:åHÒ¶ð–Ñ,Wê:…#I’Ýý$( (ödz_hèVà`sXnã I’™ŠÄÏ¿Õu¦Éc<ýB‰XðûÛr›¸•u<‘éb8§ ÐÇ€|ë.ËÓP³ÞìÕ|æ­‰–OÓ5û{?ß(¯/釬Ç[³˜ ¥ä`Ù>G£î³úK|§ç ]N·va—ÈL M'Ê·îÆycú&˜^_îe:+1Ô¦—¾oÚm²¾ô d6ô¦;ä´#ߪ[QG¡T¡ jS·uèå4 @ûh£wcêct¹.3Ú.‡û{ö£C¦úäT·IDATHËbê´›ö ËVXðƒôÓq65®ñœ¦˜bDgNÒÐÌɵc´/ÀB½pë.}|•lÐzú´ú?&ÑÖdÙ¾Êaù²áä(›Îª±3C×¥ h»Œ?ϵN›HÛœí-y{ÛŠQí£ã[„н…Ý#>×þbÞ³>]úÕútÀq ‚h*&‰ÝNàJÂö!ÄUÓÃynãÀqœdÎAI–~žw¼.³2žÈ1´ÓE§yW ²,ÐläWsz) æm¯ã5Y öðöï£ã|9¹–øãY®æ_éºųݻj“ÈIu] Åž>VÈ›:Ô Wzð,4‹Yk-R]Qš²IDATö±Ó%^zÚä¨ùW žrX>¦Š£‹)iªD%YìŒCêÀãºô%gÂ`N€áPD†*ZÒ8‰,f Ñàýü[ÃP‚Q‘+Y¹Ay~Ò™K<¤¨õÈ$ÇôC"£OP-g¸ÖçJÚ6C™  p¼ 2úžÍ~ŽóKQ*j´Ý—>Îýr‡·à9³¸QÛø¸è³à6ž\©$QæžÓÇ)Å€ÖXpÕ³QŠRöMªI¹Ù/©­Ã.ô9Т'ÇY¢]®‹£½QŠí-ò©Ôðƒ"èõ:Ëh¼%l`€š |K¹+µ\LÏÄ[3Í—Øzµœ ª…DJ–+ÕrdÙ«¼˜ ÕÙ COÈu“£fý4Ýô~ʧHÛ?lˆ>Ò.€éwÑ=dÎãæŽZ‹°¼f¶¨îªàu]-¸7Ý(àt׺a¶@¥…’å¥çJ%‰•}ðÀKÒ¶ 5ôgŽß¾;½²-F©¨©ò`â½ûÕ9z-ã.E³Ü½§7IDATCŸN9’´-¼Uòò󜧞’$$ÙÓHÂdkÅ/4ô^p¥’§$¿-Ë6W"ÚM¾#öq (FWÁeFØ®WïÜÆAÙÞv>™<3w »£u¹£oÕ!˜6&)>e™€K¹ËT…*×T5kÏo u¹‹û@Í“ÔÍ„–Ü…ªû€¦¡¨6|®ªË·êP«‡k¶¢fÀœ£ãFÂd–OÛ*µ—«ù:Í[Æ˧åDQ]2S*vÊ¡ãKÇÂ$“3Ó¯ìEFæ,™}á1nNдÔ+)’šåËëAð¾.‡3›Ú.‡ÝoA2*¢ÛdÃÒ§%*fH3g€5IDATAšþ§¥Qw} #Ÿ+5FÜð{ŒÃPí*ÛÛ–‹ 9°øtsa”iƒéΨ5ŸJ^øF9îh“‰ç í;Ö»x–÷¶¼,F’yä‹t|£E›ÞãæË—+<Èb$[YŒ$w×t=®Ë!çŒÆƒŸçZ§M¤mÎætÙÞ¶bP†^vÓÇ-¶È{ DE|Nh aéYŸ.ýê }:à¸A4“Än'p%a»ûÄRdV§-h©5P„Ä©t‘ßu<%Qôp‡ÚµË.ÎÖ¿ÐjøŒôKŠ G½`…›äd_,ötj9#6¢žëdYp-wf—§ÍNIDATƒ´­>‰MIš 6Uêoùr~ðÙ –©âÖIÑKÕ®FMVƒ1O®}’…>>´=Ðÿ¸Õ³¡T¡ ,¯GûªÍ»×Åö1âÁsð ._ÎûýO€¢|ðͧŸ¶»qóæ /m] åíýjõb£-e­ão?ä(ßy<[Ç À6Yãv]úk·£ã·ëè=zÇÞêÒ›oîµÝFˆï‰à i™IDATcš¦ÀÏQScö!_¾[Ч!s­JÓöx¶¿£;–×rí/¾Ø:™Šj=D/¯­/Ñõ¬±6›]Ž©WŠ*Ë—Ù[z0)½œfk¹BºÏ­´5MTj×Çè—[yû\L×úÅdÈf:ŒÜ‡Ñ1žÞã–·ñ·êÛ š0äƒÞDO=k>#Š¢š¿ºKþ~ø‘/?ò¥‡¢æHŒßCs57÷ÐPÔ™ô¦¨9ʘþþÝGxðéÇ]›¸qó¦i® í‚ ˆR”’8ÓxyóÍ«h» ÈôQË…ó´eâxqlœ3BÄ ®Ôº\ A)$˜®ôd¸00VAgøFcÒj›i IDAT* ‚8€~AAf ô» ‚ ÈÁgLñdc £qý.‚ ‚Ìh» ‚ 2K í‚ ‚ È,¶ ‚ ‚ ³Æê"‚Ì ­û®¶¤²¶Žeƒ՗΀±ól0]áÖF´>šnªª¾®•w^&)~Úå¸çýAÚ0Ó¶Ë­¹²µòU—ìY¢ô/‰mïÝVj¹°xw°Ô’Sú]Af†@¦Z®T×â>:¾¡§¼µ¨³åJµ\©¦¡Vzi­Âèå2yŽÒKk•jŒ¦+këÕ4ë9_'y×—iÃpqcPLŠÝS QTLVÏ@¦Z¶oÏ ü&IDATO/­UªcµîªÍN<[ ¦Ç¬Ò>€~AE S-ëY:”“—ô7~Y¬³K1³ ¹lÍ#«³%ÇôÙ„kæ!SfÄÈhe2r©OÜäoâ°'?²ü=´†àZ7Cý©Ô³w,˜ ÏüPf’#1ÚÓt׳¡T«Æj¢=¡w³%]e×tß67ž¦ýªKÇÆÚ.‚ 3ß$C‘ù ;Q _.jÀ .7ö§ ˧ ‰¢Œu•C/­U–ŠI‘^ïHøÇžNgø€‘ï0GWÓ¬k}:¾±‰"Q,S-ËbÊxXêþž¸È”G·”ËÎõ§OϾ ãåxÊíEýIDAT_gÓ•`=Ê“©¡^QãÕr¦YL&^)œ&i¢ž åÚêÄ",¯U–hbßÈ»*€{¦Z.Y ¬W×hu2ù«ÑvA9ÄÖ«Ä Q ‰HL³# %_Tƒk­£@Z¤È¿Òî3p¬oÄ–ªù”€-Á@÷ên—úS¤ç>pŒö6‹ÉP§ç¦êÙPªÐ–×ÀÕæ]ë`-ÙGØÓù–ñ±6ˆÒCƒ~A™Á¶F:)Øc*›ÅdÈp'øbëvK0Ïß…¥@›9To¬ÅƒéÌ-cÄKN,î‹è‡Ì5ÀÁX<Ÿ ‡Håë«gC9#<Ö©>Ðl’dÎÅ‹‹…D Èœˆ½]›oÃ×úS¦çØ¡ãKÚó'^IDAT°«K/¯Å} ‹©BàJ* 1úJQ1Uð­Å}­á½ùØúFÌð®¨s.Ì[ßðœV ¦3·"úx‚¦ cèV¨Ë—ó~ÿ“ (|óé§íÇnܼù Ïï¿N‚Lo¾yµíþ0B|OÓ4 Æ–+Aöµ(Òû¸¸• H.FŠ¢š¿Ò5?òåG¾ô0PÔEQE=4GQssÍEÍQ?(RÿwýáÁ§wmèÆÍ›¦¹‚~A õl(â¼7Ýdõ=æZqòâ±Ï í‚ ‚ #À!Ø–^ZéZ¤éÁ\60VAAYmAAL¤4¯IDATf ´]A™%ÐvAAd–@ÛAAYmAAf ´]¦)Jé0¢"2Q @³ÌñÇòñá­OïˆLw"Ó^Á"Š"ãc–·U•ž2…Ô³¡HØøgÛ±~´´ïµ\¸-çÕB¢_ÝôéǃZHŒjÄÆªçL`æ¤Æm—iAŠRQ(iš¦iZƒ“Aâúù†¦i ÁïxWÒ¼ó¡Þ1̤žðÖ§wø†ÖE†ø–Î)¢¸-h%Î:Ò9£ÒóÐ×õEfYÌÉÁt¥Z&ÿôœ£o¥H/ÅZÒñÓ•jï9õ|@ýÈô!¿?d1%Éa>¡pIDATˆ¥A4ò* È`zª…DKV >)&û;·ßú}AÇ7Êý|FÚ.#Àxç(†alîFTìtoÃ0m¾E¡d>És×þlîÄÕ¯`wM0bKm§vŠëœažrÖ8´Š±û“:])ŠuZËY¢(q×"„EhëZßþÇñiÓß¸ŽƒáÖߎñ‘¢E1L”T•ÈqFTÜÊÝõß—ë‹LÍb’¸ Hz<{†¼f1ixb’y[nEÝÓ`¸jÚ\)® µ4?:;-d‘4W'G[ÛÍÉF…\}½Ç[ÊØþyŸX—›±Œ¾G\ ¾|W¶ëCF©§‘Ðß æSáPJ–Í ‘»IDATývݱ]ÇD*™7O/ªæEY¶—9Âv•\êåÉßäû`ï…C»S Ú.∌Ä5tOÀ‚Bž/\Ik~¿Ðhð~àJZ‰#žðó†àW€œÑ¶EòDÚVÀ¿ÐW».~)jzo4­ÁIúãÍ­]?ßÐ4ÁÏ•œœ}!2”9Z ¢ÆcµÍŸ$8D{ã’¢ØMàJS£o¼ç8¸á2>.×qÜúë4>\I+qŠ%M+-Q‰kh ¤Ÿ.¸”+¼¾Ètà‹­G‹éw!ÏÂZ.œ(Ò¼îW ¯¤t›&˜®TÓ¬åªY‹C±Pë¡¡šªíy§É{v{F–'éýdàË•!È© IDAT\1R4í²|Ρ¾ÞãIå¶ýùÔÝ>*w4ÝW[Åd(’¬Ö«åõî쪅DÝ0®cS·¦è¥µJ5F[Î6ëB°§Ó½0 't›Æ¥>ß05dZ.Šs»S æ?Ï/P %O\Iãmå¢Ä—8QÜÞ²?‡õ©ÿÂlTI’@’ŒW° pãnW¥…’5kÕJ#*<ï—¤mAkØüI|ËiC ~Ak-P¶G« Žûø¸]Ǿpì¯ëøø… øýÇûAù©!ɱ|R×™rä[u¦GQ â,óËÔ02ìÄ7ʽTwïöÞºêckÑXIDATã> i(ªM_阮ZHtº=ìæ>W:h¢'ß(÷¬_:6ó9Ó]ó ¨»Ål(g|êêÔY»“m—ááJf&*)J1¢áàxA%à *,ðš·_`ÁâOaèÈ]Ùy¹æ8N’ëé»MºÛuœ2fêú"Ó{zà§Zwhß±ñ wl°3mPwšª `†ïÐÇG«’#DÏb2”‚Þí*›!%‹‘dÞÓ[SË%kõê @²U®l_íNœ3–öŽkêÇÏó Š¢¸-ðÝ6~ž_l‚¤è`¡ \IØŽöâö¶KѶ|§· ?ÏÓäDi›ãýU—d[IDATÀq^ýòûù’V‚hgþ…þ¦ÐzÄ}|<®cïÃàÚ_×ñ™þž¸\ß>ú…L7ìéÔrFLI=+Ö¡eƧoèãÛ#ÇhŸñg³˜œðœ@|ŒØázáÊ1[(µ3¦¦cëÕ€œè1ž¦}mW‹ÕTÉ!Y´Å9ùhb©ùWÚGر¾C­æS¶ $ÏvIÜÌ#ý.ãæTp%Ín¦p<Ç0ŠÍ颈 #(T´¤q•$ ÞÏ•´m†² *q@Â'Œg i†q+¾QŠRöITáÚ.ØfKº¾Ô»·ûÇXã\I3ÿpêˆ %(~LƒD)J2*ŸéIDATúýQI3äEd(;Bµh:¢ñ𸎒$ø» žýu]IŠí-ò©Ôð[zt–3ÐhŒîúöÕ/d:¨åŒGH.\ —×Ö—h¦+¾b2 “ø-c†H¤ ˆ‘°ØÏ¬J¦Ûf̦ÅH8[߈Ѳ˜*4®¤’fk¤¡TÁGZ¡ãK°¨«D/{6mõ €Ì\غ0è%Zés",_¶vu¹L÷äfPÏØz5¦æSÉP‘^îæÏh“!Ã}Ò2™‹û"ú!³Ñ`,žO…Cà °¾z6”ËèÑ-Nõfƒ$šûbñ`±0|B®ív¸¾ÜmFuùFIyYIDATrÞïåƒo>ý´ýØ›7_xáùý× A¤(%qÓ0?BÂl‡_‹>môÕ¯7ß¼Úv!¾'Žiš?ÿEmLM }#‹ùô¸`Oµ\8OS ˆ¿ü‹ PÕü•%õð#_~äKEÍŽÍQÔÜÜCs@QsäÝ‹¢æÌ·°ß}ô‡Ÿ~ܵ¡7ošæ Î!Ó WZæY&„"J Ç8ÃåÀö ,Só=.¨že‚é .³Î!Ó ßhLZ²XhÒ:ŒƒƒÚ/dtÄÖ7&­‚8ƒ~AAf g¿‹ï =Æü;ß™êUR‚ì3æ”6‚ Ȥa)åIDATp3ÂÐ9ALÌp¼I+‚ ‚sF‚ ‚Ìh» ‚ 2K í‚ ‚ È,¶Ëh0òË÷”í}`Ú·m†Z®ŸTìj!ѯnõìwò¶Ù=bcÕZ¯¯•}Þ©]³ScÒgÜòÝÝ·¶)ÀõÆ2Ø®ãÆ5u?«ömïn,j>Õq;$kþo¨½ù‹É[v놯¬ã8¸cõ«õ¢˜÷. —cPƒLËíÔvÓ¦+§å‚/mÞ Y~-žx¥ÐTåDQµ¾ º@z¹œû…¬JÞgÐv_l½“ÅHZɵ\X¬³|y=Äñn¦+|‚éJ°ž åd1Át…?VH¤ µX÷¤!5UmI KÞ¿ëÙPÎ^‹å×âÍ”\“/W ˜L¼R8½÷Ù.t1YÚä÷ø~?PJúVÔÝÁÎÀQL†Šª/f$Ž÷&©–Õ|* mwº>Û­å²®èïpj!I‚iÕÙr†¸ŽPIDATÜäÖ0 kÝE>½´¶©d-°^]£A-$^)4q@-g’Û¥qƒö­U–Fû:‹ÌÎ7×]WÚo\Î_xzÉõ‹ÇžNgô”Åd(GWÓ¬k}:¾±ºG$©–e1eü úý¡ÈÁéöCsÿÁöù,&Cf¿@#É<¹±èwûJt3bg¶Ž,æØÓiÛš B¡Ë,× Ç׌GF SMgj| h°ßX&Ú.ãA¾U‡`Úºä| Ü–”ÕøÒÄ7ʽTwûØLõ±$+ Eµ àëýÔÁÀïâIsa½Cô¤ãÆO}ßoÕ¡V7Þ¥ YÐñ¥cᄞמ+IDATÞ‚én~ ~å°Kä}‹¦} õÙ¥4¹éÐKߋׯ7…j:n\}áÕÝ¢ÍؤÍ­_Ü~hÞ?ØÞQóuš·n³,Ÿ–Eu)F×du™¼9ƒÃ»e³H2Zwz) ŠuªÉP–ËëÇe5˜6ãÆ2Ðv™ìé1¾×Ò¾cãîØà ~—¦ª˜_}úøhUr„èYL†Œ´ïûˆë$ÍP³½6N~w,›AÆN__x›ß`¸(“ýІ å‡6ÄÈPÐéAM‡¬Ëö×›Óì­:ͧ’*׀怦›ªZSa9M׊rðî¾Ü¨{×ötj9ú» IDATc:³žëÐâ8íúøðæÈ1ÚgüÙ,&÷u¡J'ø2±Ãõ•cV°‹TŸÌ©éØz5 'Ü‚íÇËÇTÑqaBûŒ–[C-×cÌ¿»|—ú§ò-C¬õE5hªº{Fœ‰ÈôÒqãòüÂ;~ñ|4yB«ùWÚoYÎ_T}Q‚šOپ؞펊Ž¬Û­Ë¶ç ½hÉõ]“Õ`Œ€ K_±Ýák¹–…Q>:Η3³„cñfμåÊbªà‹Å}`}jáÖ]öt€õÕ µ–õDA¿Ë˜1°F›LW|ÅdBŒµ‡PÉä++FÂb?³*Ašn›u²‡ßæõ°V‘yIDATYLšWRIH³5ÒPªà#­Ðñ¥@؈ե—=›®Ù¾ÖÄÑ:ê…Tô-‡t.Ë—m†]]®Ó=½ ¨gl½Só)â8õlÈŒƒÓcuõ·%·v]õ‰­ó¹p(b ¶Çt‡ŠVap°þ:Ë7Bÿ"Y(³·"Ù@-kñ`:s+‘ªÖûQ,î‹è*éÂÕBþâWžŠ!§‹ë®+7.×/|ç ‹çSúÕ`}õl(g„¯:Õš B’ü4|±x°XHNÖÑüÐúÄõ‡æ~Cpê—Ø+›]€@ – ¦’öªù‡š4n°¶˜_=ÚO¿ÍB.¬Ç“P!ý.Mƒ¢IDATgï,í»+×ë> OË6M;Ò~c¿°úµoP—/çýþ'@Q>øæÓO“RßÇ0ŸÑÔ!‹ùô0nÆ¡– çéÞÖ^!#A-$^ÞÛŒ6ó##Þp2³pãÒ§`zv÷[ß<«ëmé¼9<üÈ—ùÒÃ@QsEQõÐEÍÍ=45G²¢QÔœ™íwýáÁ§wmèÆÍ›¦¹‚~—Ùåc…DQw `ƨ‹´a[2º\^÷MVäÀ2#7®z6éŹb¸ˆÛ£ð‡6Ðv™%bë¸E22bëU§e“2b¦ÿÆÕÇjzi­Ï5JøC«‹ ‚ Îö²JIDATÈ,~AúÀ÷Ä>/ÀG¤?þrÁ³û Ú.‚ôÁ˜buG.A Î!‚ 2K í‚ ‚ È,¶ ‚ ‚ ³Ú.‡‹zÖ9@=Š„õöªÝê[Ÿ^!ÙˆÎö¿‡¢–³e$P "v²)z¤ßëÛŽ1†‘s b ‘öôȸÀX݈G õ@¦êP®æ‹ªsNQçúãÖ§wX~-Þ46¸äˈȧûÝ첃`º¹ä.ù@6~P ‰éÉ´<ÂëÛË—+|=›P㸯1‚ôÇ]#A² í2Ý=i­6U€¶œÖvf¹±ç#ÙÕÍ4j!AÞù×T‘IDATÈÛ’(Õ³ú‹¸žÉÂÈïãVß~ ÐË1¨AFO¥d¾sX§ô¯W¿\ÆÁ}嘪2¼·ì6ù`KŠD”§ãß’[ÊSÕ‰]_=] 9]?·[j'}þp<~P?ëÓ>‚kîßvó×dÇ3ýœ= ”БøŒåÓ@2Ùùbët!”“è`jucË]#?”=•’/Ö’…j+<¤ í2ÝÐKkë2²À«…Ä+…f î€b2Tg7Êä·d¦t§—Ö*KŽïånþƒ@¦ZVó©,´ý’Ýê׳¡ðåJô_8è[F²§Ó=ãZ1ÊÑÕ4 èãÚ/—q}3oS¬ÑvIÑ#IDAT 7}œåÔrF¡~ƒ —]. ¡–ËBº¢;9ÔB"’rŽ­Wc²É&Rôr¹²DRoÜ\A»¾ÁtæVJ]"v߈É"† 2vúþḕ;ÿ@Ü娅„Y¿ž åš( æ_ieéYŸ.ýê }:`O+äMÅê…+že–©bÿ šj¹×ïìÏõeù˜š/Ä:»„÷Jd?ð‡ÓAÿ7Šb2Q´¾œŸ@IDATÿªéãC+ÑÎ1ÚgüÙ,&{_™X+5i6HC-gÆÉbË G² ÐXyÈ¡._ÎûýO€¢|ðͧŸ&¥¾'Žiš?ÿEm‚Ê!Vl&Ë—Ù[$ÆMw]ÚbKÁ>oöh8Ó„·Çý-Þ :BÌ:êCë)±¢¾ u¹iŸÊé]ç~¹ŒƒŽL5 ¢}|œõ¡ÝÇÓBÈr­N/—×»C[Hy{¿Z®‹~Ô)@x¿¯¯]XúØ¡¥éÚ_þ…E)'Þp }ýpÜPÎ?×ú­?„1ù6l­›±·Ž‹š†9ŒÅ›ÅBÓùÞkÅð’¸ûž4Ÿzމ]IDATH>#ûÍááG¾üÈ—Šš (Š¢¨‡æ(jnî¡9 ¨9Š"õç(òÀï>úÃO?îÚÄ›7Msm9ÄÈbJ]êeŸÜ ÑvA QË…ótoq»‡ÁvÁx9ŒX Ý¡¦/ÂBdzÁ@ÝÐvAÃH SõXï€ 2Í`¬.‚ ‚ ³„«ßÅœˆBAdVØç¸±Îðš#ìý«õßþ¯kןü|öòÏ?ÿ⡇Ú=&üŸÍçÏÿùƒOûkÔÙv!77nÞ|á…çû“‡ ÈAäÍ7¯š±ü‚ Þüo¯þäÏÿgv~þOºÖ<~üÿ.üäFø[¡¾äc¼ ‚ ¼F2IDAT‚ #f~þO>ùäþÇŸþ9Ü¿ÿÙ'Ÿ|ŸÞ¿ÿþç_|ñEQ‹ú'7«ÿܯp´]A#šþª³l0ÐvAAdœhh Y& E c¾à:£ E)ŠŠJ“VAäPQÏ:o½_φ"aýŸ=[ýqëÓ+d×¢³ýål™ÔB‚ˆë8tBQEi@þ€†~—IÕ´R”’$à¸I«‚ r°(&EzÝy#ü@¦êP®æ‹êrÙ)S´sýqëÓ;,¿oÙOùr"òé¡÷ ¦+Kî’$ͤZH¼2¤ÔIƒ¶ ‚ ²/$D´V›“MWZIDAT*@[^![Ê¡Žìfá9Й@­5Iµat$|€^&ù¢ÝêÛOz95ÈlÄh—Îrj9£POîH/»\B-—…tEw©…D$ Ä|‰­Wc²É&Rôr¹²²˜“!0¶"¾'Ž9–w¦QCÛe4p¥‚eµ@IDAT’DQŒÐhðþIë‚ 2ŰK$¡ Mû€xÔ|æ-w˧åDQ]ê%ïàpÔdu¹¼$ˆý¡£î³¡œñi@Oƒw¿:Ç´eæÊ–Å”Yî¡O§ùÖÝ8ŸÖG/˜^ßMe=õ”oÕ¡V7œIЬÛZ±<=,ŸîÒç}m—Ñ E£PÒï‚ 2óØý Å¯Ë—3Á‘K ÍÆë¶Å?®3BA& ½PóEË÷P“Õ ÍéÒTuw‚ ‹õQ6dé+¶7µœµ®ÇGÔü+íKrzÖ§K¿úÂCŸØÓÇ yS±záŠêU€åcªØÿ‚¦Z.Š„Åžêj· µfIDAT`_m¬5ô» ‚ û‚@ÉB™½ÉÖj)ØX‹ûb™`*2Ý LÕ<)÷EôCf h-g ‰HÁ:dÆê±ºº;Áµ~ SU“¡HÁj7Í@0ϧÂd—z_€õÕ³¡œ1•Ó—>Îýr#6”ËTÓ ÚÆÇEÚm<ƒéÌ­HØØeŸ Ô+‘$”×»ê¹ÎçÂVœQnö«F†ÈšÏš4ÔåËy¿ÿIP”Úò•`>£‘¢TTâJZ §ŒƒÊXóùž8F¼ÄûœCAá!¹)Š2#j}t®ð“ßM~ÛÊ ð™‘àþøôÓÏîßðÅEQ‹úÁ’ IDATÇ?\ÿ1ÉgDbu;çŒÌ‹¦¹‚~—À•†ÛdAAžÁxAAf ´]A™%œçŒþñŸþüñ£ýh•Adz1o ðoþü[ÔAú‚d „$¶WP0T.Fgۅܘ0VAB[¬î?þÓ? ù‚ ȤÀ9#Aúæßüù·ìnAýmAAf ´]t½ 2)…í"E)ŠŠJc“ÿ‘ø7BôŸ{©©D£é£FT¬R”ÒaDEdH‘1Ë:%HQçò!1µ`zÛ(zÌŒ©¿^("3@ß‘q¹d²ÏÔ³¡á·ÞCD IDATW ‰H8 ‡"ÙÚH´ri&Ÿ ‡R]÷ÈG‡ÂváJZ‰“¤±/¿S~ÝcM©ô]áë6#E…ÞLS-E©(”4MÓ4­ÁIŒ ?öü|CÓ´†àœÎš+iÃgº6Ì$ ?ßh~¿ÐÐt…\šú˜Œ¤¿ýáçù¡_KYù©´°ÿª º^$L5ÍÖä¾³Û´@Ç7Ê•±ï¯Êµc™ª•¨™r(û‡ÚÒõPØ.}òë(óßßÔÓeBµ9NþY¢¢’ ý@?d9`œåpÀˆ¢ÄqFÖEÁJB@ìï”®þË{cs–Ú c¸SŒg±"2%(Ö9‡Â¿PIDATi)ʈàç ÞÞjT2²Ú·û,—’“>DQ´;šºèãá²9‰ZúåÐ_Ç 8^اÂí„ ã‡$ä#ÿÅ.Iÿ YLšõí^™~å ‡´]Úøuù›pßÕJ‚VJßøõGÛþRI …ÚßA*‰Ä×ò N+q÷ׂuŠ—Eúˆk“ÓIQ,Ó¶ð/ôÕ1Œ5½7šÖà$ý1L) p âFÙ‰àçš&ø9ó»Á¤LûSŸÈ¿`ÁïàJºs¡Íod¸œõášàWÁîhŠJžú¸ùŸD†’8Ã?T‚¨w]q7½í…E:Õ‰¤×IDAT$ó?èz9Ô¨ùTX„Lµ\©–+ÕrÆWLv1;Ô‚X„åµJµ\©®Å} îªÉA9‡%ŸW*IÅ.nyåŸåëÁ÷Uý´ÿÉw¿JŒEú¡ÍMòU+rÀÏ9øúWà#å.@³HÊöv÷Jý#IHeOG¾ èãô)*ÿÂôм_h4øí(ÓZÕÏ7À0”~¡¡Ã/IÛ‚Ö°ùøîúp%ËÑô–ÀˆpÞW¡E”JÖw€+•$FTŒ™¸Þûë=nÀùýQe ·) )JE·­ÑOGdœ2¼¥âÞÓ1ª\SÔ¬=ÿ0ÔåfÌý,šöm.yIDATz%e&y^&êÙPN].¯wë r9,¶ yMnôû¨ƒopÚ7tÄ¿ø¯ŸJŸ/Õ†œQ±àñ§0’ðˆ'ÀæJÏàm…L»õô8wÕÇß§§iÌŒnܸ’Ö™¨Äc"rdJ¨gEÈT×zŠV ¦+| wÑ,_®ð ‹‘l d1’Ü][_D@ S]+$ròÒ¸£j)çŒZñÃïÿuMl‰Yù¡økØþõGð ÿuIªµZ.ÿÿëíõÝä ®ØB˃ÛÏó ‚-’Cж’Š+ ÛÑþOÜÞ¶bSœÏ6ãg‘1&‡J`­úá8Gý½ôQ„ç¬y™ŸJ 6§K=ó IDATw}tü<×2$IÛÜ `—q“eÊ,­q‚ÓF‡š ÒPË™1+²é¶ê§ž ¥ M`ùr¥ZÎAmÞH2kP¥h-~ë¾9,~—žùz°ñ÷Àü@ý@/ðsßå¿ðו¨–€ã‚~¨ #(M¢[¾Ês~êú)z}p–#ýà‡Â¯¤2\jüà‡â1rŠ'œß•l³$\IÛf(J°>–8 óÆ#•¡óˆ[9ðR”²‰¸’Vâ‘a€Š–4N"¡¶ è3n<¿@†£:cêÀ•¬rE’€I!r\ôwчŒà‚džà¦—Ÿ‹ûIDAT§S÷qþ-ޱ©É•4KQÇþ:â®'€²½íçJ3¶fAú‡^Z«Ï…ÅHØx¯ —¿÷ÔrÖ*krÔ[߈ÑdùtòÅÖ7^rÄêòå¼ßÿ$(Êö|%p€òIQ**xjdHQJâf½#2 ¼5‹ˆ¹PŠÈ0tÇšmùŒÚ2½‘ï‰cš¦ÀÏQX2*êÙPNî{g2¨ùTò t‹ËÁ\ŒûEQÍ_Ý%?úè\á'7¾›üö'ŸÜÿøãOà³Ï¿€÷|òÉgðéý÷|öÅç_Pµø§üÃõ‡¿ßÇ€Ü L s®¿IDAT±@$߸yÓ4W…ß…+iC-$Ÿ¸’ 2¢2ÐÇŒ#2”îÖñ Y}=µ(¢¸-ôYe…+#È„ dªåIëÐ+ôÒZeiÒJ àPØ.¾qH×¢Ì҃ݯ yÁÌÒ‚ì«‹ ‚ È,~Aä ƒqTc¥—p"ª=€6\Jô» 2 p¥4‚ ûú]AôG¶•(Û»CÊDÛAAqñûßÿËÕ·þ÷¶Âà¿j >Ú.‚ ‚Œ‹?ú£Gÿ:ùm{‰²½{ÿþçÃÈÄx—éB²vÍo/7±oEïVÜúôq¾©³ýïa•¢Ì¼ÍŠÈ±ö[ßIDATc‡‘È7…XØóNOŽÑ~0äÙgô Nå‘°þ/'w¯?n}zE-íE-E’yòA-$ˆØýL¹ðûßÿËÖlÿ÷Oµ_)ý.@d¢ çmW¹’æP®ˆâ¶ 9mqâ\ÜúôWjŒ¨K/i¥(%qCï Ì•´’™­šlꦈÌsCJua$òI.íçÌǧ®c¼¾2~ŠI‘^wÞä7©:”«ù¢º\vڳιþ¸õé–_‹7‹ôFš¾œˆ|zèL“ÁtrI=¾„Žo”ã ¯ )µ\ü.Ÿ #ý.ÃA^¨Æx­nñ)Ø^¶rEd(JP,7ÚmTIDATŠy‚Ûû½¥(FP¡í}ÝÃ`IgD‘1ŽÛ\7Ö)ýëãÑ/·qpÆ]g96ßEOž»«Êæä RQ1ä îr‡=QŒv  eDðó ²;°] ]a«z×ëhö‹Œi®EÈè®ï ƒ„ 6Ô|*Š$)Ý)bæ<(&Mg‰Q®æSáPQ­å:œ(nþƒz6I^QÕ+º¨ü –“&™/&E,·GË)ýëãÑ/·qpÆ]g9äPïž›|sÐLåS…¦ÑÁTí`~´]†ÃÏ7‚_®¡išÖ¬$Å"CI¤”dP&?ßÐ4ÁÏ•4ãgIÒ4­!´oøÏ5#IDAT•4­!øý‚~‚±#¾[})j¤mÖ´' 惉ãJF«œddyî_×~¹ŒØŸ¶QÉJ¯ì¦³)ʘ͖ {êk)jŽ‚¦58É|Ìó M+qŠÀ0G„I/Îã`׳ÁI‚ä·¥(R¦ÝT"ý¿`ÁïàJzu—ëèÜ/¾¡ ~El'ÝõdŒ¤ zim}™V!°^-WªkñfÑx “¡:»Q®TË•j99òø¤—Ö*ÕL“òJÕtBÐñr¥Ú™Æ(©–×—izYµ¾ä]¿ž å€'•רšn¸{:Ñ È ýñß¿>®ýr°ÛRÙMÝôqy7Æ™IDAT–SË%k¤°\á!ÛÕà¨å²`vj­™æKl½ZÎÕB"%Iäþç°ˆßÅþïσÖ·”VpÎhp€OïßÇx—©ÄÏs­Ó&Ò¶=ÿóö¶»0ô²›8nA°E0ØXX (âsB[ˆCÏútéW_xèÓÇ-¢©˜$v;+ ÛÝ'–: ³[=œç6ÇIæ”ä¡hÌ’)"cL•ÀDÂ^IDATZõãr½ú¥ÏYàO¥›Óe"×Az†^ ¨yk¾j²´9]šªƒ2H¼…;A–¾b‹P©å¬èMPó¯´‡°ô¬O—~õ…‡>°§ò¦bõÂÕ«6ËÇT±ÿM$îg2/ÂèwEdA ¢%“HÈ%ïçß↌Š\ÉJÞÀó ”~È|‰–¢ÖC…Ó‰ EÔTË®õ¹’¶ÍPfÃF/ˆŒ>×àç8¿¥¢FÛ}éãÜ/—qx ž3‹Kµ‹> nãÉ•JeΕp§ZcÁUÏF)JÙ'WH¹Ù/©­Ã.ô9Т'g˜ÆðØN®¦'½IDATd•+’ ¼òýq¹Žný?· ™'ø+›õH®/ÀÄ =¡æSÉ+*@$ eöV$[¨¥`c-î‹e‚©dÈt'2Uó¤XÜÑÓ²À§–³Œ†D¤`*&CÄVˆ„¯˜î×úLUM†"«Ý4 ÁX<Ÿ ‡À`}õl(gLåô¥s¿\Æá{ ¦ M€P.SMƒh}h·ñ ¦3·"z}6P¯D’P^?îªç:Ÿ ‡"Ö¥"åf¿jdˆ¬ù¬~Ñ(ГBŠ‚!rQ—/çýþ'@Q>øæÓOÛݸyó…žX4‚rѶ.z̈ 3Ö¦Þû2¶IDAT|ójÛýÁæŒ|OÓ4 0g‚Ì $#EQÍ_Ý%%>:WøÉï&¿ýÉ'÷?þøøì³/àþýŸêsFî?øü‹Ï¿ (jñOÿø‡ë?+¾'Ž¹È›‘|ãæMÓ\Á9#1Ö"i‰Û/Ã…E`¦bË;Ü¡AqƒsF2bì«»j‹‚ ý.‚ ‚ÌÎ~Óåû£ýh•Adz!·\ÿŒ˜@Ù\猞£tiáêÕ«“VAÙƒ¢4 K‹ÌE’Úà‹ŒçŒ9®‹ ÈXAÛAAY¢?ÛeW_’?ì½%~óZIDATAAd´ôµFúö5ùkç3õ\Žô 1þNyuåĤU×ÞxùÚ=8qòÔ½ÇVÎÀKoTvN®d^>dÃéc2’þêÜyýÚÑðÀ† †¼Ì.L5ÍÖä¾³Û ÈþÑ»ß.£Àô1do“‚_˽ÊKY›C §Åq–ÿ[øÑKò‡‡ÀV_/9ñâ»gN‚é¨ðp }Ž>vüÞ‡míÂןyGWҔзüVNyõ]ýÏ“vôåÕ;a½ïw^ïDø¼Yí¬¾s›4aêy ^4K޳ü»Ýrj¸úcœúå:Þ× àöê®\¿vÀVÿÔ™WW€4ôØù ºëÂî7:·u—†ë8?vžýÚ5™2„¸ëãáêüžx]wó,ùö)ö¹«jIDATÅ.£Œ Ò šíÿlˤWÛeW®¨ìÿââtq(Gœ9~-¾öÆëÇ/´?*à=ùöù ¯¾vveñ?Èžb€ó^=çõgÞ_:~7†;¯¯ÞS'àÚ/¿w‚—<¥î¼þÌ•w/„ÏŸ ¿'?öšñŒ?uæÕ•wÄ]Öݰ8~í¼ôÆíSííÞ^}V2¯%weñ™7`ùÇYþÔ/?#ëÍ™VÎ)6|M¾ 'NÀ{w~{Êþ¸=ñâŠ,^»wÒ´fàÞ‡pÔfÊô±oveñ?´;÷Ëu<¯×®,>#µußsü(c3\àÅw3'ñ±IDATA·3༻>ç/¼ o¼|Mþš~è^å¥7^?žyñ”»>.ýuþž¸_wk vïü3ËJ»  ?îò‚ ÈÄéÑvA§Ë~pÊxÎ?ú5¸×rÈz™>ñâ Ü«¼wôEëõúÄ‹+wÄk÷Âç†OÝ{ý=8¹ûÆË× üî…Ç~yïäJW·ÿ‰p{»w¶ÞƒÛï/÷ðá{§’þÂ«Ä ±l8>u(•k÷N¾Ö*ä{òÚ;•ógºiÞ/ný"vŽƒ'ÇYþ5ö·«o´¾¼v^zãåkðØù ¯s.·y/üî…¿‘§>§ÎÊÑðß²âµ;pªßp(×ïI·¼ÀJIDATþÞûPµ¼³E¬L0¬–."3D ÃËáP*¾±÷MZq 'Û.3Äñ£¿Ý½w{Â+Go_»sR=:¨eyâÅ–Y›QÈ?ΆOÉ[æ³ù<ûµ—î|x nÓlG6ž£á¿=!®Þ18úÈ·ÁÓÁÓ+.ý”“+:Êô‰˜wït7ÝôyìøÉ’p4_*õ¬™êZ·™Y™½ÄêÞ¾&í¼C [9Ò•ßîêîןɺÆ]zq4|ê^åšõ®|û—÷N’wèS'¾¶+o©'Nž:ñµ÷äÛô‰žÓ'^<ïu=8£•>åß^ÍŠ–ž÷>TO,ZÆî‰EZ_ý ÏØIDAT’¿ögNî„ãldýp4|þhŶ´çöjöeGõºàÞ/Oº_/3~vWŸyV2¯¾›yÞyÙÐùäŸ9êï¥Ï‡×Þ©˜Þ»c¥ž¿?îß“.}Œ¶<1Hà †ë"2” ·:Ýý.èt9çÙ¯=óÆË×ÌI#ÐòåU+ÆóöKÀ¿ÆþvU8Ý&!#flæù3'_Ò…èåú_GSïÜ>uá18ºH¿óÛ.ïîFìç3ïÀ»'¶lí>vþ‹«Ù—Ÿ±ªáœ}Éøðš¥çcç/Ø],'ϳ¬Ejz4ë—ßcùר“+g¶ž1;œ:óê®7cÃíUëá-> f&IDAT#›zº•ƒs¿ÜǼ®—øŒl“c•øË;/ž‚­÷@‰ý]ôxìÔÑÛÏduóå8Ë›Ñ?ú¸ƒË÷ij¿DãG_ÿå=f©Ðõ‚ Hh€=T€ªµ ?¨Ë—ó~ÿ“ (|óé§Ié?þÓ?ùŒn¯f+Ç/tîñàVŽ È˜üÞ*w^æÎbÛ|ÖÕ«WíÆJWÛ¥GãÆ÷Ä1MÓà翨 ¨-2:zßßs1"&E5u—üýè£s…ŸÜønòÛŸ|rÿã?€Ï>ÿîúÙ§÷À§Ÿ~öàþgŸñEQ‹úÇ?\ÿqø[¡®MܸyÓ4WºcqôIDATú]N®d'ÜÊ}Uó/_›à–w'^xCCÜ›AA±BéÿÓ(Ð4j¨|F‡Ò¯2ÈIDATÂï‚ ÈXñyÁ€9ìhhš¦Ù¶qÜn8<¶ W*A”bDeÒŠ ‚ ÞЙ„ 4 †3[àðÌIÑ(”´7i=A†ohÈôó_~¥þ×ÿú…Ûѹ¹¹¹¹9Rmá‡ÅvAAdˆ;óæ?ùÊW¾ÒZ¬Y{ë(øÃþßÄóßú—Ñ­œó¡í‚ ÈØÁŒÓrxØûôÈ#_¢߉ÏPEQÔCs57÷ÐPÔÉ]FQsf³ß}ô€Á)o‘‡"ÞEŠRQ‰ãÐ¿Š cr÷ ¼¡!È¡ð»p%m¡A‚ SÞÐäPø]A9ÓƒIDAT0 í‚ È~€“J‚ŒŠC1g„ È>0p@®iÓüèG?µR‚ŒòÞÏ`|´]™<Ï?ÿü¤U@dpz\Û<*pÎAAYmAö yAd$ í‚ ‚ È,ñ.‚ ³ÅûïY»wñï.¬<ÞvàιçßÙ4>œMe®?Õ‹¸ÕÅE¸¾µ2?RGÅÎêâ9ØÚZ™´È~àæ—íŒFÛA‘Ñu©&OÙsŠ‹Ü\{gó©3{©} Û«çH²èpÀé“ν¯²R,ýF^|>kO®´ó³7Zr-™ÌS: j,þìÎê÷;?FÓ¦„ä·röúž‘¼úì³ó—,‹`óÜÛÏ^4·ö}öY8×f-ì¬^+ÿ6±W¼÷võÇlžsp–ÚºßÇ–jguñÈ‘K;Ö9íV lž[\…ù•-Ÿ¹µ¢IDATÒ/£Õs›fCVûv¿Ñê¢Qî¤ÑfuU?äÕϱ¶ ‚ BxêÌÞÕ3gΦ2{W3{W3ן²îüìÞ³W3{ÇÂÏÞYýMKý͵w6Ÿ:³wõÂE/‘”ß—çu!gæöÆ‘µ;óuáúSOÙú«{çžÏžû »•:pâúß±nn³© xÿ¤ZÚÝùÙGÖàúUCÉÇåÅïËп|€ù•-+i¤mbåìÅ‹;FŽÊÍ·wž=kqöúuhÍ¢°³ }æ¹vñÇlž3½7{{[Ͼ­«D);@k«ugó7ìÊ òÍ4;«‹GAw½Ì¯<»³¸ºsvV/í<»Õjcœ½øìâ¹Õ•ëÝ4ï—Í·7as³Å“±½ pÖh•ØóóóЃ'iþâÖÖÊιÅÖªó+[[°¸xäÌ_ÜÚ3&¬6ßÞ¹¸·eó­t×çìõI¦™šÛEŠF¡¤5¸¨œŸIDATIë ‚ôËÙ§NôTï©g×äKïÃÙÔøÙK¿¹wö¯ºŸ8ÿøQ'QºµÔÂãƒÈ7ÛY¹xöÒÛæ³yåâüâæÎYx{þbGF¥ù•ëÏ.žÛ|Öø¸—6aÅ-v?œ½Þe¶©_qÙ v¶wþÿöÎ(6Šã ÀÿØ&`Üø˜¾à6DIw»OnE )’I#¢$4ŠÏ™-ÆÀCHyRTh_*,Ý®d”<F÷bPL e'6TJRaã‡D(´áéö.NPhSGŠâ¥QÃ}6Û‡¹ÛÝ;ßÞí®ïv×øÿt:ïíÎüóÏúþÿûgvÇøS1[d«OÄe¦©Êà˜‚ 5PÖ³IDAT§ë.QZ¢FBå«Ûöž9RÆ.‚ n|»9A*b7‘ßIà‹]¿á¶QŒ]A©>sóóË4Ô×{Œ± ‚ ‚ Õg&“­X¦¡ cAAÂA&3[±LSÓ*’qMAjÈ2\€I„‰ÕLþ”rH–ÍÐ$I&’8<•¤IDAT,²)O )¢¨hæG&‘¢¢)"ˆÆ¾…˜Tzÿ"15•ª·âõ·š"z軦ˆ6ÿ²ê’NϦӳ;ø†ñ²îñ&cAjBU]¥ŒÕ,xùF›tXRPÕr«Çf˜$GãqÁøD$Pu]×u=A™(ç.{B<¡ëzBJÊ ªžˆ—>äœ|˜d"Ä Y䄞SȦùÚ°Pƒªô×B<•ÝFÊÚ»,ꋪ÷Ò3»wÅ`÷®Ø½ô íñ&cA™%™¯C】2!E‰“ŒHŒ°¾Ü!3SZÇCFQ¥ùeZ4EsÕ¯”_ÃÅ6ðž¹IDATcfo,É^Zóé”üµXSDBdͬ³à"Í$Q!žHÄ­­JÌhÈlßš72SJ¥ôáÚ(Š5ÑTAŸ2ù'K’¨ _%ú[†’ç h\N*¡H;-$“™;ÙžoïßוÉÌíß×Å?žì?ŸÉÌe2sÞ$cì‚ “ãâ¡q tUÖUYÝ 09•TUæ;õãíÀT…çZ6S]¥€”Í*åählŠÉ©Ó43t¤BÔUÇlò1L2²7ºž ,wæ‰ h‚§Q’ „xB×eU¬“&‹ÅW}.! ªæ’ Ey£|Ú¨´>ñ„. š,[M+«×4×?IDAT]þI £ùü RùþÚbsÞrmG£óy¨Ê!Ùl6›Í;q–|ãÀ¾qìÄÙlo’1vA©2TUÁÉÔ톦µ¶_¢ksÕ~.@ëZ$h¬¿Tŵh;€ÖµQ˜Òþí¨Z2Y¹{cÖô‡¬¦™ÁÍ Q QGq’ 'Jd„x"A™HˆÈhÂ8ÌXR.Ì%âB}¨jV¸$'½ j ‹ªæÐ UÕ¨%ÈpÞßòç ¨ hšã“ˆÈ¨?KçÃ-ýh߀±óh߀nÁ›dŒ]Aª ÿ™ì~>Áfªo4Ö/2çò.®§%äåT‹¨ìÝêˆ2sY…óIIDAT 3)žÄñÑ"+I»9ºœÛê#¸Ì4Õ˜ê7ªê Êj8™Ü¾Xƒ˜Å€± ‚ µeÞjäa³ LŽ+sVú•IHNNÁæöx+cEy— ­ÅåíäxW¬0 ÄãQÙ’Fb’·;©¨*'%÷“IsnJéÚÆüYMóƒCÖÔ¥%õ/§&ÿÚ—y—EÍ4úäâ´`8ˆ±$õ2A¶Âycš²Hˆj.€ÏwA ŽÖöÄqɤ/·C â­)•¹Á€ÒvÆåC²vÏnY§éËUÉ•‡ÒrX_¿< ÀúEh²q}ýÊx•²PAã‚9ª”6IDATMU=)"›U |Iþ’*Ù8b·â U"„XRu•jŠ(Ê‘T2>ÕV„O\ÅãQÂeä…ä‹‹†>T5÷kŒÆ@¹ýmôág0ÊŒ ‚œHäK,ÔÇþ<@ü-jRU0-Ùß’Øë  %“Uý½½)pÈÀÀÛ‚ðhÚDÑ’¸¼‚ »%KâdEÆÆá0‰HÌriY¢0‰0ºÔ;áEá’ß÷;{ÃË?JSDQ¹\´äœ…Ρ¹¹îŸ¯x}Ï?>ù¼bõŸþäÉþ?žw²ãµ±1#\Á¼ ‚ H5¡ª×ù‡¡‚ª²"*š§1Ž%Ž"’\ZG¢°ÂÝIDATõ…óiB…¦(I9á6Ââ ½æýúâΗÍÍ«ó cA¤qsœdyáÇ…½Z!ý/íÜ;wnhÍš5KNOßíê~e~æž+ùåÆŒ ¹ÙõdÞùû8ÿ©ÌlveÐ*,_W¦ÝVùî»ûµÐ¤t8AöˆpBëÀÕ˜Ñ×wÿwõý6<¹^× DTೇt&>»óÂK[õ,LLü³qÕCU×y0¸ûßô† >¶þÇA+²|ùzzÊ­]¯n¨œû­‚bèp|í±ZçPD…Øelôãç¶oDžp"ëñÔí±Ñ°ÿ7]+VàhRšlvîôŸ.>öØ£AQ4þIDAT+²|ñ`×NfÒ-t8þƒöˆX ­s(¢²Á;ì/9vý¬XÑàdåkdy²jÕC€O víèp|í)"´ÎÁŠ£+sóóE{žÝ¶íoׯ˪¯7¶¿ÿ>³HÍî+ U€A‘]—4j(´k@‡ã'hÈBBë̦šÉ¬–ôâóÛàÙmÛÞÿëh¬¦ÀºBy¤yzú»…ïAëÐWŽÕ®íŒ‚°ëÀá,9óG{D¬„Ö9˜M;)dÍÇvvìà×ß+ÊÓ65­2¶çççuÐ !ŽŸtàæ‘z­ Í©\â@ÝÁK9øúž¢÷]¯ì(WÇMB­IDATÇ–Þ¹µ<ö¢¾}eÀXíwøò{Ü´_|~ûðå÷¬Å¬ví¿bUs8v»½| K×)ò ŽÌߦyŸzöˆØZç`à(vI§sÝØ½+Æ7Þ¹0bìD:a˜"~çÂ7ðÎŽï\ H)t8A€öˆX ­s0p»ÜKÏÀþ}]üãé‹|Ofgç@':è.2‘®r΋ºù9áÃOìLñX¾ÝUÏ–Ú¹ÕubT©GW4 ­øôÀEnæ»wÅN\ B)€9w‰ °ýz/ÆK™¿½ûÓ ´GÄŽÐ:‡cFsp²ÿüöÀþ}]'ûÏ;© ûT‘KɲôIDATš—df²e»‰2–â¹Í'à Ag0y#5á'ûÏ/<êaw8‹ð Ì߯Þ}ëÚ#RŠÐ:Gß×lžc'Îò=oØ“]@-õD4ÁW`/N‘ý¾é؉³ÁÚ5:ÿ ü;‰¯¼8¡uŽò.ºeJ×ѾßÜ¿ûí«GûìªÌÌzœ®Éo WB«8´¢%ÿUòÝÓ™Y§ U#""¢<¼ýö[ï¿üpßÈúõX~Ûm®O|ücË.ù´Å²€^¯/cE‰ˆˆ(‹H$ 8ðÒþ÷ïÿ uê‚(ŠRw~Ùç?g:áÐÉá±±ðÉáÈÐÐp¹+LD =²•IDATDDJsæÌž;[_Qaœ3wvèϯïýÍ¿Kº@MM•Ô¿ñ?o½õöÈØØØñã'Ë]a"""R7oÞÜŠŠŠsΞe:!ð¹ãï¿ @X¿þžËV¬¸tùÇßzëý¿ýíØÉ'‡‡Ãå®*Ñ)áϯ .yöÉB×:|Í ;ÉÜÓæž{îYçœsú‹/ü~ï¾}·pþ[oøÛ±cšM‘·O¾µäÙ'׬¿R¬þàxÕÙ8ˆÆ®Wå€÷`|[èÿë®GŸì¿qýÙsÏÄ¿[8€A*ôäÉ“ÃÃáY³*v´ý¶ ÚÜÜü™IÛ3""¢Sɶ>z,'iðIDATÕ—.zoÿ}$2:–Ï*ú?þ€«¾tÑsOy267¨¨¬xïØHâúö?¿óÇÑ“:a|v…a–Á`‡Æçõ•úÈèØð8FÆ££áÈp£§Í3~èï>ǫ≈ˆŠÇDã¬YÆ×Þ Ï›%VÇuÁ*†ÆŒÇG¢ãbxdDEü‹i~wÖ,$Æè£ã£:£ =>yB4ˆ•ÃoV‡;wÞ«æé0òæñ÷OŒŽ#:4:<6Ž ÑQÝ8€ÄZDDDT¨ÑѨ8>.F†ô‘È*ÏüóÝ-¢^F!ñàËßk°Ûy[ddt,ÜLóIDAT"QÄ»àÑñQ@Ö£ëõÉ;Çé*ÇW^±äË_ú¤øÆ¼ÈÙ§ýßÐ+ïÿþˆ8,FF†ŒïŽWÔétЉˆˆ¨ ‘±qèÄð˜þÈk._ü¡7Ý0_`¸þñ'¥YoÞu¢‘¨("AZl  Ó €àôyøÈ»M—}´þÖO ¿[ïüçcïŸ8ýŒ9†¹•á1£q.„Jqü!"Ðét ˆ€(GŸúÇÜyT*þÂo=Ó|i{xt÷ú¯ï>,vüðÑï¾¼õ•K[~ñ­ ‹j¬B¼Øzíw_Iüöáëúáu.é¶ŠmŸ„WÚ.o•–™IDATÅ¥¾òâ+éóJ[ÿòàçG*o¤’E‚ˆ¢(boh‘pÀ8"úX'þü‘×._ü¡íMé×uí>©;06>ª ¢ÂQÄ»àh$*õã:AÐé½A/½ ?lœ{ÉŠª¡?ωœÄ·¶´Gô# ç‰D„°s* b82ú~dx €Þ ¤]ñåû½Pµzǯ¾¼D‡þ§nwu¼¹òªÑÂöýå{¿¾ûÈÅߨïºDĽ:º9s**Ç"%þ^N°ÔóüuÀþï^åúú—<ÛrIµ/d[úŠ3g½…^yK¿qï=wFÃ:ûn°VBIDAT¿{•ëÅE7?ú“›KóÅè‰p¤4õ/¾çR)ñ#•Ž BŒ ×°Àx8,ˆDt¯µlúPëÃHtêW¯Z÷/»Ýùk-›D12*Šãã z½(ˆE 6F×aÖ¬ÊÄ'†ÿüÏ—é?þñëoþú·»_üí.¬ýxtt|\£u:Á`˜5köØ™c z@Œ_]ÿÂz‹núö——@Œ‹U×üh‡Q' Š‚z⃯¼Ô­¸Dˆˆ‘1}sï/}Ä1ƒnZ5]lbtX¬ZX ¼mÔŸ+–âï<¾-A0½__|uw]‚ˆ(ŽG#ãÒQ 1³IDATG£Q©#×t3éÚE¾ãRéðó"•Nü½KD!þ 6- Epôk_ûðŒx§žèÎ~íkÉâ¢QD" F=£A/è€Ø]§3ôb¬cF³ç_Qü×°0çƒ6\ùƒÞ(ŠQˆÑh4*ŠQ 1‡‡Ã‡=o0$â ^8\²ææÅ@XëH¢tzýÀãÎ;Ëî|áŽeö?`waYÝûÕk·>±fÜ¿üÁƒö÷ªåËî|aéåPwG‡g™NÿÚÓ7:ŸîOìÔ²;_¸cÙþì®Ë<¿¼³ÀÀÓ7:ŸÆÚ­O¬Y$M<‘WIDAT¿yíÀާiY5­}»¶:µÍu±?iN?øÒ¡A`iõbAÖï¿?­¨÷KKÖ<Óúwm¼ñ騆oön½i‘´­ƒ®Ë¿åÂ*•”­.5àÀË/`™§}å ^ºøµzJ­¤hFõMhßu©TøÚ¢‘Ìbü%&@L Ù„£b…ŽÄ/kpäkÿx+€Dw~äkå âx8*0t"Ò•mzzÙ0ñç¶_xùEºÓLû~ù/gž~úéFÄqQŒŠb8*ŽEƇÆÇÞ=qò½‘¡hèõºÄG#GÕÕUõ|ØydûW7¥ëIDATîÀ—ŸüõêÅ»n\ÿrᮃw]ª€—jéøNu´ï©ÛoܹÑ]ÓyßòoÔwé÷Ô}ë9Ï¥€xÉS¯m¸î©¢‚á·óéþKîzñŸ._|`ùwVÙo¼D'Q}D/èu ꣂQ§اßúүŽ/‰uO|%^ á ëònüÁâw]*ÿ+Ž÷²_\ò_c9tz>­(è—ë`]d\Å‹,ÿîFwMç}Kõ=Z*ìýþ•ß~iñºG~ycµˆ¸ñ•#ë–,Ñ bGÈû“ $Û*QÉ/ºŸ¨¹ÎûøõUxq×ã‹£‚Á¨”>q"IDAT±÷Ð\rgtzA/¤ôè‚N¯—žf¨ÔóÀ·Ó›ñõÁÇÕ6¡=‚+E3_\T‚į6ƒë2EH§Ö :. ©onòÑùå‹?ô¨ý*ùÜèxla]ìÄ· OœGôB…Ñ BJÔ-½â¿†f¡òýïÆ‘¡c•§QQŒˆbâx#‘ñ·ç ‡G‡ŒoöþÎXiDé㌱û‚¾Â`”õèý/ï@Íõ-ÖUTžwëúå»î~áÅß|»Î¨PU] ½~îGëVÔì|¢oà°¸â£!VŽ^?×(@¯¥;tp/°âÒ‹D¡rÖe+W~÷`÷âE+túãóu•z£>ðV6IDATÖXz£^`éÍ×}XÔ;â2DúwîOTCßаüý/¼Øýíº+ôÉFÒ*Òyt¼øÀò+®ºìžîï/‡²(zÃKw¯üNw|E©æzõ=úÛþ—€K¯½±Z0èç.ûÎ3âè¨hˆ-¼XgÐÏN.¼ä?ö©Ur Ðý”Ó]Óuÿe·~U Ãh^Øÿ.û§‹!•Yý:c…!öJyAYOZ3Ö^ö*7‘åZ.Z¬Í%9¿F”rˆ]êÐAz¹ ÆÃaÆH"¢‚ÀWõËDwŽøá÷Ÿ^ù:1 ã"ÆÃaF铀ԥǺ…ø‘}ìö{µ‹âˆ²IDAT]k]÷Æ›¿ûÅö­]ºÂ 7 ‹êÂñähø¯'†¿ûÎìáwÏ^¼øÓ†äYÚó—œüæÈ  ·èe“qtà0°bÑ"¡Ò`ÐÇFïbTŒu?z}…QoŒ /E.Ñ… z£^Ÿè¥ ,Y²/ì{éà}Ÿ·éû€šÅU¢.qZÐz£NÚ !y˜ÀXQY©ôGØyûò²v£¢Ñ˜èÒ«TΞk¸ü¶õÿ|ðÑ'~Z±AYöÝyéwº«o|ê‘kªŽìºqý.©æ:Õ=ª ýìÊ £TΜä¶ Q«ä²ï>yãážØwoýçî­^ÿä“ë«}/u^þ=IDATcù½—À`œ¸ËOâܼΠ} Q«gMZ3^ðƒ':›Ð ‘]:•ŒÀA:•†ì…%ñ:d#”h$:.i£Ÿ÷'ºó¿¬_Þ£"Þ©o½Ü "¿âYê‚ÅØ·Õ¤£î:è !vXUVóËÿïкüÙcO9ú—£ƒ¿?çìjAFGÆ"džGßyÿĹï¿o4Vè+ ±Z‰¢pùå+]¿é>°W~1ÖuÌç‡}}zã§ ÆDèÿtú £!>¶ôC|l(Œ#ôúø¯ç¯ð–}×<öÀÒÀe÷¸nŒú å¤LW#rýOž¸n‘­š IDAT¬¥ãs$ǸÒÄÁ¾~`1"‘° (ªo°¨¹ä³Uú¹§½ù×~ &}‹‰šœ·ä< ëÈ Þø C…âx@ÚÂK–œ‡ý*•4õ_Þp"ðóëÖïzôÛ¬xúö£/îÊo]ŠÊŠÙéõtF£AŸ¡žçÝòà-ûӛѶ‰ ´xI;t*~^¤D‚ Š"ñ¯z‹ñ‘{4*D£QQAøZ÷¯ÝypÝ-Ò¿æí!Þ©ÿxå¢(F"±sðÆ £ôÍ8DÇ£ ÆŠŠÄ¶_zÞwâÄk]vÓÀ¸Ôº48çô?ý£ˆá¨~èÄèÐñãÇÞGNœ8cþ•Æ ézjdIDATÌÀ¶á¶mݸÜÝ_hûR%ðçGV}ñðm®¸bÉϽ/üËmŸýÔÑítcÉMkê {%Ù¥Uñ~[_‘8ê®3T+¿Ä :Ë>ÖšëžøiS5 Ryö9§ÏÖë öÑé?SydÿÞ¿5ôòž¾Òà#W\±äçÞ»^¼mËÕs·®ú&~°{ã’”fOY¥kPséÒjAÿ¦¢(£^úŽ êg}öè@?€¾#ƒÐV¯¾G—_YOW×®Çú®úÇWÆÛ¤^}áóê¯X²=½’ÏßqxàòÏ\c[²Ë‰Ž<ßÕz÷çPyÚœŠÊ´ú :c¥ÑSæÒGIDAT©žÇU›1m£º³æi±O'"šnù@]ˆ}|ŒõÊ#ãQƒz×+{Ýù«7ÝšÁ¼zÓ­<þsÏym•¹ÆsáŠH$v&½26¨Ãc$¾^YiH|S.ùÌg×~ò/^ýÕõ+>¶bŧ–aøèÇ ŽŒŠC'ÆOœ8aÂcc•³ N"D\ðµ_?¾üš{?õ©{¥š\q뙿=QÕüË-ß¼~Ù.¨¿÷àšE˜wÎìøagCeeEü¤­ ¯¨ˆŸƒ×++*‘8ª®3~ô#çãù??uãåOISLÎëÜxþÚ¶üÚ²yÇúúñæ¥sùòòx“òEIDATà©ß^ö¹o&çîgæÿmTWuºìh‚Aà ëòzàÊû÷ÞùɆ9gT(Šºà~ôÕ=?}`Ù²p¹óöïOŽ ü% C†=úB[ z»åoZºÀùÎ_îüÄ['Âþ¨Z%Gûûº~ô©.Ày·m_Sýbë¬üþE˜}Ú™²=QA_QYaÌTϫԚÊMceeò‚VðL'•‡èT"Š/¬%ÄÞÐÆEˆQÑó¹åÒ¯ëoR¸þ&ËÎÇx>·|<*Fâo„••F©ïŽ„Ç å£óëæy¦´™›¿øø;B¨òŒýö…ÝÀgÏù`4¢DtæñùIDATÐE0®Æ€Q9cޜŠ?¿ãßnŒÕ5þqÇÞúŸÁ7_AŸ3É™gUqüÍ¿¼6$M:íC‹?8ÀÐ__}óļœ÷¡9ÆÞz}ðMÌ_²ð¬JœxíÈ_Ïùà8 ÂÇ¿þÎèœ^ðîöÖÿúÒÿ{ îóâÒûþã‘ëΪ„¼p€qþ’…gU¦”“\RZFÑnC}õÍÉ_uH/Jªœö3ÇÞ|XXuN8ÓÉK®øÀªsŒYv_¥’£ï ~7–ËSyfÕ’3Æ^;òW¤îZ¢ž•gV-9£"c=Oþë΀J3B¹‰ hßs©tøy‘SvÅŸIDATJ(ñæ%ÊßÈ~sÕªT/Œ†Ã:NÐt¹Þâ¢"ÄÈx4ÕêýóÏí–>÷½<¸=vÔ½²Â€ø‡†ù¢ ïbù'nÈ§Ž•FˆAÅÄ—ì*.¾`aÚ¢ç,¼àŤ3ª>qFâùZókΟŸ\ÌøÁžÿA Øöåm ¾Zõ§ÇÖž†àso@äwF?¸ø4µÂ•åg®F®UÔ§Çj³0Vh¦=R+!ãî«T²âœó>‘:)¥‰ ¨g°mE†fLÛÑ©…=:•DbÔ+ÏDľ\& NŽFÝlDuúäà;‹h4:Õa4 ¢Â ݳ&yeœNc…Q8×ÛIDAT: àûÍÈîÑ¿0O€tÖ^þé"qÚ”¿ƒØ7îJácß|©kèÂú»>²è.@ã–¾úé¾²B{‡5lZ7#ßq©txˆJ$qÿWQv0;~6oümìïέC@¾w­iP ¤{ºÅΣúØ×ÝEÄ¿#ë×! ‰›ÛÄo÷*įÜQHn#Ñí—ê÷Ó÷ýÇk_ýsÏà¨ôëÈÙUŸ5Ï+Ѷf°éÛŒ"ßt©„øò¢’HÖ~¤ñ°AÀós¼¾ñ·³ -sïÌùý´¹ªù´ê\X]îJLlF"¢²ûû†Oþ|c ØªIDATŽ÷ÁÄéæ3±D—Ì£ã!ç7þ¾á“úxß=ïÌùzôÊ ãkG–²ÎDDD¤âŠåµX¾#÷riFFG}÷Ùçœ Äo ÿÇàß&«rDDD4•–Ê{ô?‡‚}}o–µ>DDDT°šš,½Ø ©G7 ¿ûÝ«wßõ•r׊ˆˆˆ ó½ïÿì–[ t9%"""ícNDD4°G'""𠨣ÍìщˆˆföèDDD3{t""¢™€=:ÑLÀˆˆh&(g$v÷Þ½eÜ:‘ö­[wÑþ¼ÒÔÊÙ£èùýKå­‘f¹Ý÷ä¿p™{t›š]宑6eÎ%´= IDATHOÃóèDDD3{t""¢™@K=z¨µ¾¡5T¢ó)<ç2“^C-˜àNiªaK´/“ø¼—ô%4#_ŸD”7-õèª í•å«vvÀf3¥=žÌ*MJ9“Ò)]‹‰µŒ¦6V™Én« ícç†êšªØ³#^b!5T.lk¨ªžø²û'šqòíÑSþø¥÷‚Pk}â­ªfe[H6«-B0[£9ýñD™Zºö´LN–“¾Ñ¸ ¶Œ¦v2+3ņ^Yí„·o°¿o°¿oÐ ¿_š1‘= ùý°ÛÐá×ÈŸiÆÄÆè¦Í]Ò»Õ»¿aƒ2*äwÆ>%8;Ûœ[B¡-X+TIDATõ5Uõw$;7Ô7lp6È—B­õ‰ÐÑÙi6™R‡^û"}"QýÛR?£ ÃY“¶¡ØêÊ:¤”«’¢´„`êî(–OÖ°ÍYU]³Á¯¡rrÉÕ7øãõŒ­ž^xj+)[¦&ñlv8ã[os¦¶ƒæVªŒ²a ˜º!Õ’ÖÉzÛDA¿Í{¶Ùâ¥Ú¼ñÇòÃ3òQ+Dö'Dì€AK£)èï *Ÿ÷†-±ÏÕ‰ª&‹U4ij±«19ÔD45&騻ɔq£ìh³ m Ùûûû½v[kæfïf“isWß`×&{òq³¡ É_Ò©ö¾Óé÷7Ú¨°aIDATÚlòÇ¡ÖmfiÀä5ƒé«‰b»šÑæl !ØÖ°Þø«Q}áX”åw8‚͉Ow òÍÅ+“ö’K¾<ä«Ë‡€±—V°­!ÏÌÕà•5‘¿r³ìcú‹91¥°­LäÙO}îr¿‡Èþ`U^´ñŒQyIDAT¿bÅ‘ýE%¯¿sC½²ÌÌïf…ËÑ2“´šI2öèΚªjgG|B‡³!ØÜ'}–´û‰7 ôéÁ¶† ðJãûAo£¹ÙûìÙµÉ,+m‹Ù+} :¥­„¶„lƒý}ƒý^»¿­5”q‹ÙWßf“ïF(hòö{í~çxå%gY=ËvíÞÄçè=¦¶ôBRëÖ¿g³)SÓ%6jÝØföJme’ ‘µ[³9­q`ÚÔ-µp¿×ÜÖÖ‘²ü&Ùüìû%µO_¬‰üÙ—WV5Ë~%ê©Z«ì»–¥ý“îjF›¢%UÚ$½>Šgú€N¿¿ÑfK­|ZáéO´ì¹k¶ûýñ¢„‚IDATZšMj/¹LL&s(BæFtv†`6絃¹|S0KMòØÇ¬{×VŠ~öÏ]>ï!ò?Øœõ—¿Ì²¼¨RëŸZfæš.Ÿ–™øVhf1dšaóÚ ]T²Ûú›CAtøk:œ±ùö Ì€tP+uz~lÞšýs(4Å–15ÚMm~³¦ÍÍÒZ&³IµdÀ”Ïêr&»ÍÀl2™cr®že»9w!uzrÉô¦Kî¬ÉŒ-Πo›Í»-c‹)Ò'ôø Éd©VR¾¢z5¤öm6´†BYÛÁdK©j¨µ-Û~™ó=™ÿóŽÄ*µy0e‹jm’V¸_ùâT«°üƒüBIDATßßa³¥=ŠÂCP>Ñr6›Óï‡RQ¡VõW‹:{cck(ÍÍæ¶¶˜BA“É”Ïæ”þº…=ù!8ç>¦¿¼‹ØŠ\õ©Ï]>ï!Y+–MÖ•²äâj’Sî–™Œ­ÐÌ’ëZ÷Æmý}Ûl~?€ø9éäzòï3Óô‰+]ÉS¼ÝlÚ½}ƒý}¶Nµ£ …Zë:djP|–O«j‰ž âŠ-®MTC¡´K%Ò ³‰ìöÆÂ¯ 4› ut†Ìf“ÍòûCA³Í>y;˜A©ËÏSIÿêsÝd³!mÉPêÅu²µB¡F›Ê«3Óó\=‹ì«gÙn>…˜LæP‡?Ÿž³ÀP«óá `÷öu7›‚!åå™/JŒVc[ɽ|Öjtúý‰ñz¦åUE~ •©V™ªš_û«?ïªm’²€Ú‹SY´ßYS$ê©(¼Ñf‹?ѪlÍ›ƒÎ Áæ2¼Zâ%§×ÖÔhG[kÐf3Ál³¡ÓØ'Œœ;¨¨súÄ/þÔòÕ_Ì©SŠØJ¦"û_}êsWÜ›€ê³–ù‰òøC˳&É«"Š’çûÚ2um¨®Ù07ïé6Þ=¡ú†ªji¶is—WzdWNßÓÒnÙGÏIDATìÝœ˜bóz[š«œ5mÍÝñs{òµìÞ>;B­iUP)Ù¤2+ÓêYd_=Ëvó)Äîõú«ªÚ¤CpªzeŘLh[Yݦæî®”>5Þnv õ ­©¥ÙTU_³É­È–O¶s¦ Ç«Ú"ؽ}-¦í ¨ªYö+}/äµÊ²kÙÛ?QaÓæ®=©Oœj›(™S^œÍ›Ó—uvÀ¶-½I›M+S O>ÑR}ÒvÜf3u 1à ØÚ¼²¾¦Ê©Z[“ ¡ØÅö&ü~s— @>;˜«Á›»»ölVÔ$sª½˜•S2l:ÓVPô³oV¾±ó&ö¬™Z²>YÿÐbõ¤”mIDATŸàÛQž²¾„õëïñnu97zî¾ë+å® M­Pk½['ý+=ÓœßYÕi+ðfªý¶~¯]9±Í<ùߘ¢É¢ú¬MCßûþϤ~<ãè”ÔÑÙioÌoôãw&¾2”6 •.¯kdw®5ÙŸ5¢i=ú)ÌÔÒµ§ÜuМÞåcß)j.• ŸšÁ˜ÔBDD4”#©e â1²—3•·•žŽ7Ÿy JaxÌTnn:ƨiU=z‰ÞàfvW7]önjú &[h*e¤|&â™.óè%:ÛÊ“¸Z0ÅÏŸô ak6Å¥YsB¡ Ì&%xaðÅ™…âiIDATF§žÌw˜Id¤äF(s)ü¹S"$Êx Ù'è´YŽÅ¥ä4ä‘1CBe+™SâwH›’#§$©ø, µÝLSÉ3^%‘yùø³#÷¥°ÈœÔÍM4ÙbÊSFfjx cT&5F…Hƒ²ä£+‚OÔòJ‰@ZÄrÌ µÖ;áíën–}õ'ŒŠ, 9ó9Ò³Ò¦ä“SS|‰Ún¦‡©dWIȲ|¦í*R7 ŠÌQln‚ÉSž22SÃc£2‰1*Dš”ù¨»"øD5á kN@èá•ÒÇ|S£™²[Ò“3B[êìÞô»çáÈœÁ3Ÿ#=k!dVNñæÌ)ÉMï¿IDAT••’O‰Ên¦‡©dWQ ȼ|æíʪThdŽbséOG±ÉS“2‚Ÿ²é“\‹1* 8¡™)ïkÝ M8}|îÊ3•¾Úfozܤ&ò&/§$ÓŠåÚÍœÛÕ~DD©›n&„ÇLƨiXÞ=z®\Фô †,ñj³Ì›º½Ø <Ÿ;„#s†DÎ|Žô¬…ô)…æ”—D’e7ÓÃT²Æ«¨„F¤/Ÿ}»i©Yö%ÇæŠH¶›Ê”‘¬»™­ŽšaŒJ©bTˆ´!ÿ{ÆåÊ¥ˆMW É¡>ËæÝÖY³²ñBò áÈ’!‘3ŸC%H#mJGŽœù¼‹Ë¢PÝÍ*ÿâlIDATô0•|ãUâ¡ٖϼ]õÔ Åžæ±9•Ö(0ÙbŠSFfjx cTJ£B¤ E%µ0á`ʤ‡©¯2Åq,L)I ™F¦{ý‰¦P1I-L8 *‡I Ѿé^¢ò* GgÂA¤ß%£Ðûfð2ÓÞ¤…Çhßt¯?Qy1©…ˆˆh&`NDD4°G'""𠨣ͯŒëÞ»w*ëADDD9­[wÑþ£ª³²]ëÞóû—JS"""*˜Û}O–¹9¾½¶¥íg“Z"""€cï¼þÆ;'ž÷4›ªE€(Ÿ+Bâ_ ö5^uIö ø>úD¼òÜ߇ ý“&€IDATŽ‹‘‘pøÄøÿëü ¯ú?S³u""" Ú»çß/o¸ä‚ ÎϹäy¯þyïž—¯_[—e™©èÑ÷û.]¶øXô#5úêUâð›á÷~7vl@7ð_û}—Ö9^œ‚ iS>ݹ´ØÞ}/g_f*®u¯8…N@dX1ý½—þª¾BÀcµz“Xyùžs™I¯¡Lp§Ø°DDEDrþäSNcôgŸy4Ó¬kV¯Ï²â{¯ëþ'úúYͪ9y÷á×ÿxòÈ1ýŽÏ;ãcùou5žéqYóYu·Žg,i'ªÀjä.'Ÿ'k£éO¬e´Ø°DDÓÁèH8ç2µp”IDAT†¹úÜË´UÕž;KO/#˜gýhÅ9ŸÕÏú¤îÌ7!œ®Ÿ3 ›;ˆÿ(hãÅë Àïä'Êâê陜’ (pÒ77Á–ÑtÃiØÈȘü×k¾dö_;ËÌ;+g9Eu¡€…S6"&.çQmñ˜ÝM‚¤É àYíÜVA°z|ÉÇMMVkS“U¾$ðXù¡[ŸÏW[kIyðÄ×±zêÇä‹$æùâ5švËxÒëR¾ÊïrÔÝQ,Ÿ¬¡§I„&_¼†Ù‹L©Ž|õôÂS[IÙ2ñF|Mñ­{RžÍ6,Ñô0<<–ø¹æKv×|É.Ÿ8<ŸÏápÈ<«ÝµíÒJµ^õ ÄŠíqýÚ@Àcm‚´Ž(¶¯R_8Veù¾&kÀ%­Ùãð­Vt=–”Ý_“5¾~Û’Ò í±ɶ ÉÕ{ܽ±&I®®Vx¦–±¸\ŸÏ—ڌʧF³ KD4= J?×­½:1ñºµW'¦ æSNÁ=º4 ’?HÇÞåÿÊV‘ÿÍ«G·¸]RßUkÉq$×âX%-áp8ÐÛ,®1y6½C‡¥¶VqŽöx™¡X¸MIDATË*‡%è ìö!^¥œu@jùÞÞÄ0Ôê2tu Þ^KÚ¶S²ì‚luË*‡Eê‘««ž¹eŽX—îóõÆ Uyj¦GÃiÒÈÈøÈÈøú[ÖH¿þÈ»Sz°þ–5Ò¬‘‘ñ|Ê)¸G—FDòé»üßä6„ĆD@ÄNïëõytíèíµXjí¢(ŠŸâÈñ¤I+ßâî2tu ½<ÆšÅî‚zá™[Æár÷ú|ðùzãkA«O²‰5,‘&…Ãáp^/=~¨m{8~¨m»ôë?8¯‡ÃápîKç0UI-Bü¼ K^ŽWÀ¹x€|–> óù|ÒðVHÀIDATN~=°Û‡xW”xð4y€£]ìq[z{{“¥vû^`·/àp8,«p{röQRZ>jki릜¢N݇ÃðíÎÞ«+v! +Ð’Ü\¬òòU ÏÔ2–UŽ^_Sö]K KD4݈¢øÃÖÇü°õ±ÄE1%ŸrмÃLž¥'—J7³‹úĽ0—Ë!4 ‚ÅÝÓãŠ?v8ðY7ÀÑ.*/¶VÿÞš¥ÖØJwOòÊmµ ‹Ã‘8o-_€ë™øB€ÃíNÝŒ;µ¾”ò-ô$×…ÅÝ£ø^–E¶;°ŽövŸ/–ÔmÅ&¦î‚Hv˜Žöä-¬ÏIDATæí¢lM•Â3¶Lüðx¯;àjÏÞ¡k²a‰ˆ¦© Ï>%;aýú{¼[]Ξ»ïúŠ|F÷Þ½=¿I~_÷¢¿ÞõýKMgÿñœ‹WT},òî;ïýéä‘·ôxÿwoWÛùcAÕUÊõÅe_“àsÄŽÆÊO¦’~yºT•N)|‚™– KDTnÇÞyýé_t;7^ÿÛÿ å\ø3Ÿ6y·î¼~mݼ3«ÙkßûþϤ~¼€1zön;‹ùµÄ_UzîáOÍ-®À¼ù|>‡£=ý±ÖÅ®þbƒìÒ>Á–™N KD4ƒyÔýÙgÍ¿ƒÿô}¯<÷÷ÿó»w…ÿwX£ ȨüIDATѱùѱ3¢å¸aq[OÊq+yw8ù]c~u(†£½À³*|‚-3–ˆh+²G/t¼Î˜5""¢t‡ûæÍ›“Ïb9—™Š1zº ï=à•o_\t DDDÓݵ×^½cÇ?ÏŸ??ç’o¿ýΚ/¯NfYfŠÆèrÞ{Á~ÞËNˆˆN]gYa4V,\pŽ|b$Õë•ß-ÿýs+G²—6ÕcôDwÁ~vêDDtÊÚöÓ_4Ô/Ë'"}ñâ??ý‹îë×ÖeYfJÇèRwnº²:ô«~Òƒ©èÔù=(""Ò¤ .8ddìäÉ‘HÀØX춯£cccc‘û^;tIDATh4*§>yþÞ}/g/ªäùè)§Ìƒý0Wï\{ñ…¿ê°síÅþö©=zÀcµºwLq´óöžDD4óžˆ$ éÓòQÚ|tÅ)óWv®•Ï}úСW¾}±²;—$îÿðXW{“–¼MDD¤U¢@”ÅŽCòïÔKx_÷´Sæ‡ üh[ÿÓ‡”•zÚZKj·,à;®Ú­LÝÞ­X -Z›YÛDDTF‚ ‚(€>)äî$¥êѧ̥_MWVÖ©ܱ޵)â) ·¸â[íµñLEhwZê¶r´hí|²½‰ˆˆ´ªÈ|ô„Äte>zü”¹4wç©] -IDATÚ‹a®NÙHÝ|¦N=‘’)u·H OŒ¦›|ˆ%„¥†v§§n+H‹ÖÎ'Û›ˆˆH«ŠÌGOHLW䣿²s­ü v锹â<úε':õŒÛ³ÔÖ*‚S«Õç:üwñçוÑÚ¥Îö&""*¡©ÉGÏxt]êÔçUø|>‹¥V1Ñ ëNOÝŽ/+uÛ’­­ NDD4mù}ô"Hñµ_ @>XO™O¡Æ–'|[\®ÚXÀw2u[É’-u[*V­­ NDD4]Ö£gù¢ZvÒÍdäz6WèRN‘Åp¥G“%ç&–TâʵPÊÀ3""¢ÒšŠ|t;7N¨‚IDAT×^|= uê¹{t"""*P‘çÑ‹¬ç>eNDDDÅ*ù}ÝsŸ2'""¢ ›º1úDV¼ðÞCéw§!""¢„"{ô¢Ï©±bìn²j·œ#"""‰ÖÇè9oODDDÐø=ϛѶÇèyܾ”|MÙBزÏ%""šRš£+n¨„¬—HÀcÍrw÷ìs‰ˆˆ¦ž¶Çè…KÉ8x¬É~××$4ùÔ“ÔUX\=Yb`2Ïõ5¥Ä­sODDyã?1B–eÓizŒ® ž¤.§È8·¸\ŸOê¶}>ŸÃá@zPúär´÷¸áöøð¬ö9zz\¼?<M‰òŒÑ³ÿ›I¦·¤´—dóÎIDATŒs‡#Ö¥û|½±€tEPú¤³¸žq÷6 VŸãvçDD4eÊ3FÏþo¹:õ´Œs‡ËÝëóÁçë°NK­2ý•ˆˆ¨Ô¦ÓytéklÙ:u•ŒsË*G¯¯iÂzÊ)ùìs}MMhÛkÝ«yˆˆ¦Ìt:.e½ K§n©…[º2.yÐÛ²ÊÑ냫À#àU°º·êEí™çúš„&´·;àho¯u[y=<M‘"“Zž}æÑâúæ¢W”äJeMON—.L—=NORW“ž.+$Û\YÔêBDDT"ÓiŒ.‘Fêÿ°¡z‚åÄùâßeKàWΈˆhú™NçÑv®½Xm€^ö—dãIDATéb:9~匈ˆ¦Ÿ’ç£OÊŠSsŸ8""¢ékzŒÑ™NDD”Ý48Î|t""¢œ´>Fg>:Q>4=Fg>:Qž´=F×f>z2ß_t#""­Ðô]£ùè½X¾oõJDDš¡í1zá¦"]ŠuÔâÛ˜NDDå¡é1º‚æòÑ»}P$À0ˆˆŠ$ Èo .@Èuæ£ÍפšÎ|t""*æ£Ç×$x,†àÌG'"¢©7Õcô‰ÐJ>zÀcUtçÌG'"¢r›ê1úDh$=°Û@ÀmUýóщˆ¨<¦:}‚´ž6 €…ùèDDT^ÓiŒ.a>:ŒÛá±IDATQºi6F—$î"78”&"¢™`ªóÑ‹Ã|t""¢ì¦bŒþc׃҃¯y¾QÜæˆˆˆ(»’ÑìzpãWðþ{â;ý±ëAvêDDD¥Pª1zb\~´îöo"£C‘Ñ‘ÈÅy·ç·ÿ `ß/÷€Cv""¢ÉSª1ú³½Õ›ºÀâø”OÌž{ð±}€«¾ñ7Þ¼ûkÅm›ˆˆˆÒУg¹O\z¿ßçøúæŸ\¼ñ¶O}@ñ܃?L~ßöà÷û2 ЫÕúý1‹›™'DDDÙ6FWšgêéOŽ?1_èØòôëѺÛïèÇF#á‘Ș9’8,åᛚJQIDAT÷ø\ëj<Þœˆˆ(EÞa&dž*#añÙÞêÅ·|}ñ-__z^å¥õùO̽òsó¾xÉYÒÄÅ·|ýÙÞê|JKŸ'î#›$MK G/ÝŽiO {ôw†gýæ'¼mW½Ð¶uld|ldÜzR~æáÜ×^ÝïsäSšÅÕ#бäs·Çøš¬ñ,ô·iáè¥Û1""¢Òäÿ/àh_')éëbü†kÒÕïò UŽGÆÅ“£Æáã.ªxà;­éîØýk<ôõ–Ÿ^·XôZÜÏÈ? XjkánšÚÅvG{{¡ûEDD4­Ü£‹ßÛZ'IDATs~rÔø3ï¿xÓÇ W ´}oSúºÍw?œc«Õêsôˆ=–ØùuôPœa—îçêk„&8ÚÅö¼ÆþDDD3B º¿ú¼ýÕçíM‹Þš5t2ˆXrIøæ}Û?°ä’oÞ·=šgq–XÂy`·/Àáp|»ågËUÂщˆˆN%ìÑŽ UŽ G¤ýÄ(¤wlßqâµ—wlß!MÉÁârÕÆÉWj-bäÒupîÔÃщˆˆN…uÏò•ô,NŽÿÙok6}Àñ¡(€ûÜ~óº›OûÐE7¯»ùø‰ £ôÔür•ˆ´Ä$_“àq|¬ÌIDAT«µ0EˆˆNaôèEç­½ú¼]zÐÝ¡áðÁ¿‘~½uÝ— †‹+Ö×$4ù¤‡Žv‘'͉ˆè”Vä]`‹¶õ'?¬¢8$'""J˜Ò=÷WÔˆˆˆ¨(S=F/(Xý¾[nH<þ§Çž,Mˆˆˆf‚©îÑ êÎïºãZº!Dí¿Û¾ô{KY5""¢iLscô ën•ÿüÝ_x¾ò­~ñ½‘3GÞ^8<~ѱø¬„mÛ^ªŠM+š£?ÿÇŸ¸ºáó§Nþð1àªÄï/mîÿú] *HDD4-MÅfär~£ýð¡{O|j|,‹„Ç"㣑ð˜À”ßIDATÇGcS£‘ð˜øÎ_~}øÐ½jøšbùkñ¯¶37Ã|"""­šê=ŸóèÇÞ EƆƗ/Ð/_¨«[€º…X¾P_·@_·@_·P·|°qÍÕu}MMh—òØz›”½rÀcÍÛÑ”ž¸êóÅæŠ=î^Y‰ˆhÑÜytᑞ¿ò‚ÊŸþ -Ëb¿ú÷n(¿çóùŽv°¬rX|½Èã\z‡CºÃáhòõ"5ì%ÙÖÔ:xY""š>4w]2|2<®pÃ?eû û“÷=”qž¥¶6Ög£7ÞÉ×Z,½Š@<´•ÑmDD4Í”ç@ŠQ—áUyåzÀ³Ú )o]67°>Ÿ/[‡ODD¤5Z<¾ä3óþeÛ¯–̾TúµBˆÿ«OY¬BíP„£½Ý'H)ÔÙâymwOOÖˆ±†IDATZ‚º¥V«àŽ•#2aˆˆ¦-^ëþÊÎ뤷}ýy:¨ÐcÁ‡/~ãè¡u·ÞºæÚ–u·ÞjÔ«®Éfqõˆgæ˜KDD4MhqŒ®`Ôã­×é€w^?àßY÷ƒï¬ÓÑTˆˆhšÒâ]îÉûbæQNš£3Oˆˆ(Oš£3ˆˆ(OÚ£3ˆˆ(š£3ˆˆ¨š£3ˆˆ¨š»g\YóÑe ñ¶îDD4­hnŒŽx>: ÖŸW) qÏ—Ä eDBuö|t«µÉ—š ÏGw¾&ÁêQ¹oàk<`’*M3š;Ž2æ£ãÙÈIDATÕcééYµÛº:ÿ}"""*?-ŽÑQ¦|ô€ÇºÏô¸,ìΧ’DDDÚÁ|ô„Àn_ à¶ÆfÜVžJ'"¢)$@”k ¢´棧ϓ檥³i•æ®u—”%ˆˆhúÒâyôrå£M_Z¼Ö½lùèò‰=¹ö„ˆˆHK´8FW`>:QNZ£Ë1ˆˆ(š£3ˆˆ(Oš£3ˆˆ(OÚ£3ˆˆ(š£3ˆˆ¨š£3ˆˆ¨š»gœòÑ}MÉ;º'–Ïž¨NDD4!gŸ=ïÜsÏ:÷ܳ>üáœþ‚óÏ_Ph 𣣬ùèúü¹IDATÕêÀâvÅŠóÅ–GÀc]í 8x£9""*…·ß>þä3ÿ¦˜XwñÒüKÐÜyt”5ÝâêWy’áèŽöö亵vçDDTgŸ=¯eãõò)Þ#cc‘üKÐâeÊGÏ@·;ÚSÇûDDD“hâctæ£ç$¥¬:|óÒ‰ˆ¨T¤1ºü§¡îÒ‚J(ϽÐ|tyº”¾æÚEnºRÆ|t ‡rn6ÓM† cô‹UV¥ÅóèÈŽhì±$C>z“χCÊGwÅЭWÊ1s)½'Ã\ùrM»Wµ»,|>ŸÅâÊw7‰ˆˆ ’á<úxþ%hñ:Q>Ø©“‚æÆèÌG'"Ê;u’c>ºLÀc‡¡ÇïáÎ|t"Ò4©S/w-H¦ºGÏ?}lh|ùýò…ºº¨[ˆå õu ôu ôu u˳磋b»·IÙÇóÑEQlGSzðJo Vš+¶×ºW{ñ|ôXy&/]RIDATµ‘±S'‰æÎ££ŒùèÉ4ôZ‹E1…ùèD¤]<üNÐàytI™óÑ»}p<›Å|t"Ò.ùèœú)Žùèé|MVŸã™D, óщHsä¹(SÆ*QÙ•çú*å܀ǚÚ÷y'""-c>º|å´|ôÞ@mlJ{­{5ût""Ò,ÍG‡¦òÑ-‰)µ• 6"""­ÐÜyt‰æòÑ»}p<ÃNˆˆ´Šùè ªùè¾&«ÏñLZ´ ‘f0]•<Ý×$x,*QmDDD¢¹kÝ%ZÉGx¬ìΉˆhjˆñŸµÔðÌ´x­»”þ¯‘~Mä£Wèaí]¦|t4IGÕkÛÓÃÌc_O³ú,¿45IDATêùèîØ1ù&´÷¸,ìöˆOä؈ˆH»´x­»vòÑŽNDDÓ…F¯u—c>:QNZ£Ë1ˆˆ(š£3ˆˆ(Oš£3ˆˆ(OÚ£3ˆˆ(š£3ˆˆ¨š£3ˆˆ¨š»gœ¶òÑU¦i‘ï§¡|ôô)DDDš¤¹óèÐh>z| ‘&iî<ºDKùèÓ‰ˆˆ´„ùè éù誉éDDDÚÂ|tUò|ôLSˆˆˆ4Ds׺K4’®’˜NDDT¢Q€<T($"]‹çÑ¥|ô%³/•~Mä£#5>5S>ºO顨–Þä`qÒHS-IDAT«ç£[­‚;VŽè²½iSˆˆˆ4I‹×ºk']e ‘&iqŒ®À|t""¢œ´8F—c>:Q>4=Fg>:Qž4=Fg>:Qž´;Fg>:Qþ47Fg>:Q47Fg>:Q4wÏ8å£Ëfð¶îDD¤aÌG—¯¬ž†îk<`’*išæÎ£CSùè@ÀcõXzzVí¶®Îk‰ˆˆÊBsçÑ%ÉGx¬«ñLË‚Àî|ªMDDT.ÌGW§¡vû·5¶xÀmå©t""Ò*棫’ÒÐKKË«åµiƒæ®u—h$ˆˆhºÐâyt å£M1Dº×ûIDATAþÿ"½µx­»†òÑå‹õd¯5Q9iqŒ®À|t""¢œ´8F—c>:Q>4=Fg>:Qž4=Fg>:Qž´;Fg>:Qþ47Fg>:Q47Fg>:Q4wÏ8å£Ë¦0 ˆˆ4LsctÄóѱþ¼J!y»œÄ eDBuö|t«µÉ'¶ËoÏGw¾&ÁêQÞ7NÊGwHK®ö. €X‘–iî<:4–NDD4-hqŒÍ䣼#Ã­à‰ˆˆ4‚ùè ò|tH·zEQÛkÝ«yˆˆ4‹ù誤|tù”Z ÇçDD¤aš»Ö]¢ÅÓÒIDAT•|t_S|^¢8"""-Òâyt-å£[z­RiªÅM"!öŸ(QòH×âµîÊG·¸zDWöÚMQ вk¾½9 Í1ºóщˆè"B!=yœÇèrÌG'"¢ìpßÀûïg¢êt:N'-–³(MÑ™NDD3Øš/ÿýöŸÿbþüù©“Eédz’€wß=vó @$Kiš£3ˆˆfªáÑÙ•³„›oY«¤;¥èu‚ ÓéutU¶ èbW{{óÝÓfŸÈR vÇèÌG'""ÊŸæÆèÌG'""*‚æÆèÌG'""*‚æî§±|ôä4¦£›^ 3IDAT‘–inŒMå£÷6 ñ5ˆˆˆ´LsçÑ¡¥|tŸ§×ÝÓÃˆ´O‹cth%Ý×ä ø|É;½·³o'""­b>ºB†|ôwo“ê©w"""M`>ºª´|tË*‡4¦'""Ò$Í]ë.ÑF>ºÃáðy¤IÌG'""mÓâyt 壷÷ôÆ&Yx‰i™¯u×P>:Ò‰ˆhšÐâ]ùèDDD9iqŒ.Ç|t""¢|hzŒÎ|t""¢ú/ýû‹®U¡¾`«›²måC»ctæ£åOsctæ£Asctæ£AscôÇîmøÒmãŸÿœôÍpA„(è«vDèIDAT B@T”n)#‚î¿üúð¡GÔ Øÿ€Ýsêîèp--r.°ÌõÜuOß|ûÓýÉùË\ÏÝY—Ç^M5ÍÑ1±|ôƒ÷{pç¾ç–aàé›o¿jÜ¿kcl.x®ÚøÄO¶Þ¸H¾òbsÑ¿k£g×@Ýšµ;ž[›(yÅ®EÕyî&ÑÓÜÊGßà@ݲ;`ѲºE÷d}vÿÀ@ݲe€eË—ÞÿÂ`Ê\`™ëŽä’ÕËäóžØu nMGuöš•‹Ç蘔|ôE‹«Òúlô `é"Õ‹=œ²À®7ïP“?øôãX»#í(= êIDAT‘VœRùèuwl­;¸qÅUöWÙoÞ5P½HÙ¨^³ußsËØoÞ5Ÿ& Ð×V±¿DDDScææ£\T]¥˜¸èÆŸtì{®cßs[oZ”>7©nÙ²þx~ðéDZöFЉˆHË´xòÑ=–¨å£×-[æ9pÀµtìXtã"Oܾ±MÊQôþ]÷?Že;sžö\æZ³ÀþªI×Äñ :•ÀìÊá7Þ~óyÿA³©Z¤¤Š€øWÄŸ‚}W]rÚìÙY Ôâyô‰ä£/½ÓuÀ¾â*¨»££N9û€çªû÷X´vÇOÒŽ¤èŠIDAT¢/Z„Û7®Ø+gßšEˆõý<ƒNDD%°wÏ¿_ÞpÉœŸsÉó^ýóÞ=/_¿¶.Ë2Z£O,=­#_tãO:â—¹žëp0Õk¶î[“½ºDDDÅʧ;—Û»ïåìËhqŒ®À|t""šÁÆ#‘œËôê£Ø”e&£2`>:‘ÜèH8ç2†¹ÚëÑ™NDD$722–s™¹ssc[Ócô‚òÑ™YNDDÓÑðð€ëÖ^ýÔÓÿ"Ÿž>%»ò|=R>ú]w\û­¯]{ç§ÿîn;¯7'"¢hhxôºµW¸níÕCãÒbJ>åhnŒÎ|t"":¥ŒŒŒÿÈ»ó6sPIDATœ×XËšÄc?òîϳÍGg>:RÂá0€‡Ú¶½y€DwþPÛviVžÊs_÷,º÷äÁ§ÆÇ"á±Hx,2> ‰áQq|46%< ‰ïüåׇÝ«V€¯I4ù ž_Æê d\>Ÿˆˆˆò%Æý°õ±ÄĶ>&ÊäSŽÏ£KùècCãËè—/ÔÕ-@ÝB,_¨¯[ ¯[ ¯[¨[¾@ؘ!Ý×Ô„vQÅwo“²Ï x¬±¹b;dÝvÊò®:½´¬åMˆÔ©Ë»öüiî<:&”îóùŽv°¬rX|½À’œÛ8€Ãáhòõ¦º·êIDATÌ‹«G\å±®ÎTZöò‰ˆˆ&ª¸î<.™„|tKmm ½ÏîwµKor¬´Ú\å•Ç)•îhïqø¬ÒYp«;P[ËÞ˜ˆˆfŠ™›èíµXj-®éƒ·%}nA¥©–ODDTˆÃ}óæÍÉùs¸o gQZ<ŽâóÑG“χݾ@­Ë à±Z.±Ý‘\,àY톣'ÃÜ,¥©•ODDT”k¯½zÇŽž?~Î%ß~û5_^œÌ²Œ°~ý=Þ­.çFÏÝw}E>£{ïÞUW¯˜he‰ˆˆhòÌ;³êHÿQù”ï}ÿgR?žqŒ¾nÝ ™f<ÌÄIDAT‘ÖdìшˆˆH˦úÊ8"""*öèDDD3{t""¢™€=:ÑLÀˆˆh&`NDD4°G'""š ½ l°­ae[(e’©¹»k“yòªDDDD+´G77ïlj­wbëžS)*EDDDšœ£î¡‡WV×TU×TU×ÄGð¡ÖúØ”ªê†ÖPlŠr|ODDD“"ã½{ïÞô‰+/»LuaÓ¦îþM€Î ÕmÍ^8¶˜½ƒ]±Ñ|þ› ""¢LÖ­»!ÓmÚ³uOkÉx³÷Pk}ÖØðÛd…4mÞÚ˜ºŒ©¥«¯%{ùDDD”ÉöíOf™›ã#àñø.—EeG{»CzÔÔÖª¬LDD4É&pÔÝd2'‡Zëå÷Pk}M¢³ïpÖlðLJ㡇WƆø ­¡Ä=¹ú?bc÷6gì`@,•5ÔZ_ÐQóyÜp»çK‡ç}±=ó2DDD“f=z§ßo2›ÄÕ“ŽIDAT ÃÙlN Ü­!SKscGgg|±F[,Y5Ôº±Íìíìïôš‚ÁXAΆ-fï`ß`WsÐéì€Ð–m°¿o°ßk÷·iïȼl€žtxÞá¬<êNDDS ð=´%6žn3ÇŽ™‡BAt8c#ï-¡P0Ølv¿¿€ßln¶ÇÖ5™ÌÒ°y·Å»ùPд¹¹LvS§ß >&sì°¼©¥«¯»YÇès ÐG Ð[ú Ñ)¯Øóè{6›B‰A¶ìäzß`ß6€Æ–æßŽÎÝ–ì†íÞ¾Áþ>[gâût”k€ð4ÅÇå>ŸOºxŽˆˆ¨´Š=쫪IDAT=ênjéòBmÃd2‡¶´u*–0ÛlÁN§?h“uè¡VçÃAÀîíën6CÒÁtÙê¡ÎŽPâ½B™Î£,ÝÍèF¸h#›\2šrúÖß"˜''Ë™-qÈŸ˜K/"ÓvמLÃ]DDÜzMjU{yq6µÑyôüUKΣ„uq;ŽGÃñ¨5 {¨ÖxÔ*x¥s o4Z:¥\à„Kv ^i¯Gì6aIDATívßv£3ã™ÚB Úm÷ 1(Ox~ÃŒåTš¥†nMïëF6wų2´ˆ¨‚¥DÄPʈnˆˆÖt¼ãN)Z­ˆ(Uî ËÏØ…­ðƒåóÞfµ?©ŠˆøõÌYVܶí¢;1E¢½OxY›^ë®Ê?Yf<žëXݰò®¨V¬ôÂ}8 ¯¬ 7¿¶m»®+"â_»Qî×3‹©ûõ5±ß/ÌõëÅi]îºîôí:àulþé5uQ–f\—‡¹è›Î}éJú²y3?ñ ŸG·Ûm)†£ê'íöR]}<-ãÚýþRH›'R‹Æä‹ÒçûõÀKÝ]IDATœA¼Šç|¯{¡Õò¼¦ˆ*;ê0{|)"*_¸·F/´º:›;< ï©J¯[~ ¦ß1»=™ÌM0«ýÉÚ™Ì Óðžœè½nâœwþj”Q­±µ¸˜ˆˆ¨òŠ gÍ÷â<:oß@褿>§VûÄ0ö‰>svöq×]`C$úÌ?GÿÚuØçÑH€4 ÑH€4àÊ8ûíÛ£ovÝ…'¨8ß_8|4^‰>s{w·ë.xÀÙÙÇå¥ìË×H\ÿöû®»€4#Ñçôÿüc×]°V­öiݬÿu°Ížo‰¾è1~ˆIDAT²ùó®»`µ}©ÅàÊ8Ò€D HôGðë™LÝßZS.óRýyÁýÚæ¶^µÛÛ<&ð¢^'Ñu#›kèWizÝð¯]±ß›/ñ¿>jêÙ]yì™vÆ-„ŠîŠ¥97šï×3IÓ•žµã‰Ìzñ¤Ý_\دgžŸÜÄÿÛ¤Ùããé_éf×ý¶åɉžx©œ67HË8e_/õ_ºåÿb)ü‚M‰Yí÷«Ïi+ìŒ[,J{2™LúµAq1µýz&š;iKq9½\7š;é×õº/fµ?™jÛbš'ÉmmÐI¿ž9˜va2™´ÅºøœÝ÷¯]±mq¯Iã´R•Þ¥zN£IDATp<ŽGÝJÐ|Õ°O¯Ñg/•‚—;÷6Þ²*÷ºeµñêÛãºîɉé×?Ô|¿–v‰JtšrÉâ4S÷“fA65?+YçÍnÇ‹Äóf…jñ:±°_ÏdŠÅi{a"/nzUW¦q]×¶mó½mó7ðýh®Ø¶íûƒ…cc·Ûv¼äÉI2`ýzݵ«Qæ®ÙñYÅ튮_Ïdêõ¹1ÿÚ•Zº‘äãcµ°w«I>vQ£vÕ>ñg‘>;Þµ¥Ç3nvá8Ï7»¶+Ç6°-:ÐJ)ÝÈæÍÒáÑñ¹'É"~z7.3Â)4s瞈þ|0³žQϯì£îJ$.…SIDATñí5OôÙë!š4K—Z_f³¥ól®¡g/!é”_oó/ÝÈæÎK¹¹Á´û6Ñ DÄ+;éFöI¯Æ(òÌê¯5Ó¬õ'“~ÕœU¢í“ZÝq‹™ÚI;*VM ÿÛGÚ'Ó ›Z9k?0 “Ú‡0.f…jûýê…'mÛ-ÝÅöÝbƯF…´í~ˆß!ÄQ>ežœ,g¶Ä!b.~¸ùzæààÀµ'ídkn½&µª}ÏŽ›ÕªíFwÜ¿æÛÓ}©×}ÿÚ]x£°ôð¬Ø»…Fæ»ø €mÛÓH_zøD–â¥ã<×ì`}7æ ¶D_FÿCJãÂ)Ú†W–t²‚NIDATJ¹K£5 Ç='(•:¢”¡ƒ@DßtŒ¼Ü܈H Å0tãǦÑŽGÃqKtJ¹À‰ë™¥?Þœg$úç)ÑõOtuq; §·Œf³#b8­ŠR•ÞpÜs Uvò››iƒy˺ÿe£Õ ,x¥sïÁMD/ãñ¨Uð6|[>‘DWte0ðýÁÀŒãKDDÌ““°îL”•Ó÷+f-2£!jó½múþÀ¿ve¾ýU ‹mÛ2È|ûþ`×÷™š?ÍìÕûµÈn÷mwV½® ×0ûl790W ¯ÝqÛŽ"ÝuÑîŇñÄŒVŽîWZ¹wËÌ­2=¥GúòÃ'K±,.”iIDATçä››û»íK%†ÿCTÅÉ‹ˆˆÖÁô¶ÊÔçI!Ÿ´– 0òŽxÑ:PJ)eLË «ueiH§•ì—ZÁ.÷Xá鉿ùmѰù=Oô¸Ú.uDë•jYÏ눈çŽS¸¯5Q+©Ï[–Z?´‰øe¬Œh„_•{Ã[ç±Ãýþ`°)~=“qí~¢¤øKµ«Ýž„97 Ÿ6µ<ëe-µoÖf'·£’qå~­˜6«Uû5ó¾p”Ÿ+ÐïÙq»Z¸®¸î`ÍIvó$94¾Úн»í†CåEWÖ´¾ü?è‰ÝÀ–Lëïû†hݹц¡,K{ž £&IDAT« Rh Ç£¡uÏÇo†a¹¼-›žGïVTòu²ò‰®Ù\ÇêF×§¬ÍÐ|ÙÑž'=MëÇ¿l¹‰-\¢gÖ´\ó¯]_ÕÞlÅz±î‹ØíI¿VÇM-ÌÌšZ›ß¾oÛ¶ùÞ–hè÷>®ëšö{™o_NNü¥ugû×É2áž;Ã=ÝŸµhÄÜhW¦Û޾@_»ã¾ˆ˜ïí[\è"vµ&µÌ¬3îÂÅ{檽[):ÈþµëÛ³ ílß½öïfÁÂCœg3Ñìã»-› %N)eèËfxÎó–%¢òi6ËRbX–Üx¢”ˆn”>"…Öð»«IDATÖQ–ÙŠ3Éó†ënÛ²é·Àªr¯u~t|.Ã+K)CŸ7oÊ­üòbQH뛎–B4QH"} Ë š% ¬²’ðõ¶¦µ¤ÏS…žïQ›HˆÞ<ªL÷¯]±ÿV«öAñàÀ¬õ«'™ÌAMDLÛ6EDìvÛ='‰ˆYóD¢EĬõû¦øõiS ³ló}-“98H´&â×’KˆHõ×éB"v­6ßËéÂb·'USÜùM›ÒŸ­+f­ß¯Jb¿ìvÛ=çÚíÉRm “‡ë-ÆnbW¢mGÙ_ëÇ ÍŽáÒ1‘0Òk~µ½¶ 6«ý¾Ìº/v{"ƒúl¾Ý^Ø»_W·=v¶-R¶Ý IDATûuv¡më×~?~ø¢‡À¬VOæâåã<÷”è?¦Ø}™=¾‘BkXVº‘˜Whuu6wxÍ-ˆˆ(%Z¬¼Þô<£§DDIóô¨)"¢œÛž2d¶¢ˆªìɵ½øŠüðçÖOÕÒõÿûßï“3nïîVþÆQ6×øiú<ÖŸO³Mqº·Ž4²¹ËhÄ[Uz-ù±$?uËA)ºMå ¢pE¯tXº™›"º‘ÍÎ\qŸh-~Ù$§K¡5¼²¦­=j%ù©[Vëýöî®ÿçÉïuw‹KW|=hÍ:›4õ~=óA~}âç¸^«3»ÞÖ+Úè8ãÅýç¯ñý÷áÂÿ¥o"L9PIDAT¾ùÏ_ã½ø¥–🠿¦Š­Œæ¿ýýç0ÇŸ\£÷ºåø¶º¸]„7˽ay~1Õ/™[ËU¹7\¸[–•–Þ¯hmÝ&º5¾Èu]Ûn?nÑb½Öÿó{æÖjŸ6í ØÐ†ŸGOþˆø‚m|/züc篾%öÃVΣëFöøðhúWºÙÆ6øªlëÊ8Ué Ç£áxÔ­͆ÞÒVøZlýZwh¥”ndsféðèøÜÑŸO§üiS‹Ìæ&kúNi¾Ê÷àëµ­D×—ÑÀ{)pœB8E[ãÑðÊQ·£°‚oÍf'1wÑ^êˆÖss•¡DD{ž$–_^€¯ÛÖGÝ•2t$§èF6×±ºÑYv†l=ÑoþåË/[ëx޵‰ÎwðGÖ&:ß Àá<:i@¢$:i@¢$:i@¢$:i@¢$:i@¢$òC›¯IDAT:i@¢$:i@¢$:i°ö÷ѼMß}³ë.lUÅùþ©&§pŽŽwÕ™] ÇÉ»<V"ÑýóŸ¿Æ/” ׿ý¾r:G`2™l¹'»Rq¾o|þÇòtžËHt`/ýû¯ƒ]waÇ8_C¤Ýf<è°¯ˆ4$qei@¢$:€ ÝÞÝíº [¡Ù\CïºØ';zÎèDDnïî6Hèýþ‘nd¦¥›ZHoØëϧñÁÉ~Dæ÷÷æ|ÃöÖܜǻyTêìº7ÏB¢˜Ùï„Þ€ªô†ãÑp<êV‚R*òé…èϧYîï£IDAT¯œá•Ñ‹O†5Ï™í"Ñ,š¡uðîIDATèñÝåš{Ý’{Y éÂyt+,×Ü÷Tá{Y ©C¢XíÁý‘³l‰@pöÒõo¿ïº x[Ht`ÿð¯œ#Pq¾ßuvŒçÀ2Ø3ü+çˆHãó?vÝ…]â9°‰ì™ §ºë.ìG`4ïº ;Æs`%®Œ HtÒ€D HtÒ€D HtÒ€D HtÒ€D HtÒ úØw§ÿó·¿ÿ¼Û®€§zwú?á(Ñ¿ûîÝwß½Û]À³üðç]÷<×ÿmh.@IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/configure_tags2.png000066400000000000000000000604071203611042400322430ustar00rootroot00000000000000‰PNG  IHDR›%0¤6 pHYsÄÄ•+tIMEÕ ¿Ï«htEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœìÝy|Tõ½?þ×™%T h[k͆NZ2ér»\iP3‘ÞZ&.R¢5`[Ñ^™ºT´’h V« `ášÁÞß×fb…µßÛÛß½½™Ø›i͆ÕÖ ²Ír¾œ3“3û’Lfæäõ|Dœœås>ç3“yÏûœ3ç-ˆ¢…›o¶€ˆˆˆ²ÞSOÙ”¿ ˆ.Åò¹%Eg5óì³ÏÉ@׈ˆˆ(ï¿ÿÞ'Ÿ|üfOq]Žè7ßlùÊ—¿T±àëFc!­V›ÁŽQ ^¯€ÓÙßqì?ÿûOÿ#uAE)œ_ö­‹ ž7xzhtÔ}zÈ;88”éQ¨Ž´=IDAT3¦Ÿ1]›—§ŸqÆt×_þvèw¿—‚º@IIÎßyû½÷ÞýøãÓ™î0E6sæyyyçœ=ÍpáyÀEr€°~ý½—-^¼pÑ—ß{ï“üãÃÓ§N ¹3ÝU""¢)á/o Ì}qw²k½ùݾtáÜ3Î<ã3ŸùÔ9çœuôÈŸ>¬pîysÞ{ïãþ|ø!Ss""¢Iòþé÷澸{åú+ÅâÏz ÎÆ,À'_¯.¡4>‚nà}¡÷ïûžÞÝ»zýÙgœ32< ˆçž7€NjôôéÓCCîiÓòv6þ!©Þ¬©ÿÆ„íÑTòéíO/ûÎ%µe½IDATƒ ã¿û¼#£‰¬¢ýóÛ–}ç’—v=·Ù:4ä>}ZÎÆuòòó>úp8p}û_>øóÈià™ž§›¦ÓéÅAÏ ½6_ëò`Øãq{‡¼9s¦þóç^ī≈ˆRæGEý´iú·NºgNóõ DAÐ{Åyƒ£ú‡}Ñ=<,xFàÿbÚG'Ý3?5 }Ä3¢Ñ ÒãÓ§D˜?ônþ[ÿ¥ÏÌülÁL †ßýø“S#|ƒ#C££nŸàÑxÖ"""¢dŒøDGôj½Þå¶ŸøÕÝ›D­àñø|‚xpíƒ ö×Ýìuû¯þ<â”ÀÓ5IDAT]«»sܨ&t@ås¯ýÎ?‰ïÌôž}æÿu½þÉŸúÄ!Ñ;<¨?éÉûØ78zZ£Ñ„¬HDDDIñŽz Ý£‚{ÈóJß[./úüžoðøð×?·[šõî]wÂçõ‰"|^„…`AFg}~ö›}'k/ûbÕº¯ ½ƒu[~õá'§Îš5CwF¾{T¯?B¾èygXðŠ4 "D ŠÀ‰çðƒ='¤æ/þñ õ SØÃû×ß±¿(2ÿìéó÷_ÞðúÂMÿöã‹S¬dm¸æ×¿ý£?»îü´n+Õñ x½ñò,¼øõ£¯‡ÏK¼¾ ŠIDAToÿ3ƒŸ)}x¼‘ÒF! Š¢@D@ßмnò¼Z9ˆ¿Ò÷ÖåEŸßQk–~]Ûl—Â9€QÏˆÖ ¯pûàÁ>¯OŠã:AÐh­N+½ Ïן±`qÁà_fxOãÇÛš½Úáófžåöz·3ò ¢Û;ò‰wh€V§¤ˆ. €øÚýæG¬Øùòµs5è}þVKË»K–}Ηܾ¿vßûû.ýa»eˆ‡443fäåzÓü½:`¾í•;+ö–YîøùÜ7-H²÷ÉlK›7{šþcOÊ[8òúë˜ÿÃûîÝâsk4z´?°Ìr´pÍÓOÜX$Í=âšIDAT}§ÜÞôô?3øžKéÄOŒ”>‚ÑŸA®aÛ-ˆ:èx5omºýó !Ô¯^¾ö×ûáü­M·ð ¢wD=:­VDˆ¢F çèL›–øÄðŸÿy¬Pûå/_¿æŽ{ÚŽþá..û²oÄãDDF£Óé¦M›>:;oT½N ˆþ«ë<üèÞxϵs!ú†Ä‚ï>¾S¯àCR‘øøëG€ÊÅ ¯èqÉýFÐæAÕi&`TcÑÈ}CbÁyÀ@ÿûzígÄtüû·%ú”÷ëøÑ×Py×xEÑãóz¤£0 Žø|R ×ê4jºv‘︼—ŨIDAT”>ü¼HéãïQð?§y½4¢¨¼NÜvÛù?ÿ9üA=ÎOÜvÛXs>¼^:½€^§4€œ£k4:V”3êm¿DñßÝÂŒÏ^¼ôÊoè´zQôAôù|>Qô^ˆn·{È=ä~óÕWtº±£øBÇ‘W+×n­H|4Zmÿsuwö*¶¹³@ûÖ **;:ÚÅ«¶ïZYˆŽ‡=r@ûËUl92¿cÑÖ•w¶Ø*4Ú·ö®®ÛÛØ©Š-Gî¬hßZc騰ýfK%€þ½«ëöbÕö]+ ¥ékVõïÜÛH (ºQ¸jWÓªâà1×ÈäÝ<IDATÒvàØ«Àüâ"AãÖ¶?ÖTÇCRÇÆzm½û6®Þ+oxMÓö ¥m·\þm„.¡“ŠÕ¥¡t¼v¶JÀ#åÀßÿ—Hý”F)d#o"ûð]—Ò…¯-J)aý/1b eàö‰y¢Û뿬 @ßm‹~¾@ œ÷ݶQÙ  zÜ>€N§@®lÓÐ Ð*ÒÄ^Úqñå—hÎ4þͯgŸuÖYzD(úDÑíG½žAÏèÉS§?ôåásZ­&ðQ£ïDP\\Q«Ó(Óξ·l܉kwÿvEQÿ¾ÕëZ$Üuü®…8Ö_òT¼¼ÿ1IDATËOŠ}=ÏߺzÏFkIëý‹~|\ûÀü;*ü’m! .xþ­ ×=ßOнn­Ûۻணÿz‰xt뢎ôµëh"ò õj­FD­OÐk4€ŽÃÚíÇ~+:&Væõïúž¿ÂqËå[W?\Ôq×Bå_±?Ê^Xð“ßþp4Z6¬)hýøx¥×£ñáèÖEl´–´Þ?_ˆ¼Gó…C?½òžcEkŸúÍêbG·®~½oíܹ€|„¼wláþ±± tòÚëÞþ’ëšž»¾G÷=Wätz­ˆC¯v`Á–Jh´‚VŠè‚F«•žfDègÇ=áÃø·ç"<¼)qIDATm"ûÙØ)R ¾¸(=ð_mQ™"¤SëàóˆBð››2;¿¼èóO×,SÎõyä…5ò‰oA8.h…<½N„ µ¨™Å éK…ü¯þsõðà‡yùg>QôŠ¢¢Ç‡a¯çý™Cî‘Aý»]ÔçëQú¸½|xWÐæéôŠˆÞûÚá~”\I‘&/ÿ‚uëí»ûÈÑßÝS©×((.†V{Æ+—ìÙÕÓÿ¦¸xž^'·£Õž¡ ÕÊMi^=~X¼ðQÈŸvÙ’%o+*\¬ÑõÏ×äçiõZy°´z­Àü5×/j¦_q¼½{ÚÝÐ.]ºhkû‘£m÷T^_ÿË»IDAT¡û`$­"GÇÑ­‹®XvÙ½m?]„ЦDhuÇî^ò“6ÿŠRϵ‘÷èíÇ€…׬.tÚºË~ò‚82"êä…‹4:íô±…çþÇáHœ ´=_g-9øÐeënÝèu‘öc¸ì_/… ×çëý hôy:ù•r$´ŸšHÃX¢; ÝDŒWh¦dcŸH-Òr~(è»ÐAz¹ Aà–—çð~ÿÅ•WЈ>ðˆð¸ÝòòôÒ')¤ûºëÿ‘}´¿ø`YQá5åkßy÷ÿ¶cû% ë´z£>Û+žqÿýÔà›'?˜>tò쌵\lIDAT¢¢¯çéÆÎÒ^8÷àw}‚Ö¨ULƉþ7Å……]¾N§•³wÑ'ÊáG«ÍÓkõrz)j4.hõZm JA˜;w.Ž>vüþo™´=@IQ¨ œ…4z½V¯‘öB;L ÏËÏ×ÚoØsë¢=Šq}¢^éUò§Ÿ¡»üæõ¿:þô®g\‹7„6…Ã[þ¤­xõóO}· oßêõû¤žk"îQ¿ÔUh§ççé¥vfŒm+dá¾H¬x`÷ê7oØuø¾ª‹î+^¿{÷úbàð±6,ºotúé»üÎÍktÒšHý,)‰4ŒóÞ}²‰,$2¤SÚLÒ›ÒÁIDAT)=/,Að'èPd(>¯Ï#i}_qÂù_ׯ¿àé§áêÛ/7ùˆðù¯x–B°([M:ê®V§äÃú((/}íÿuíÆ?ÿòÙ]}'þzbàOçœ],h}>ßð¨÷á‘>9õ™O>Ñëó´ôy:¹W¢(\~ùËïÚ:áÊoË¡ PzÁ8ÜÓ߯Õ]§Dè@üÓhóô:n-hu:n(èô:=´Zÿ¯®ä¦Ãß}vëüÅ[à²{;®+„>O¥ éþnx¯b×u…Š‘öÏ0–ãJzz"x½n!¤©ž dÁ7 ´gœùîß{’ð-zrÁÜÑ6IDAT €ƒ}ZýWty!Çž;÷´Gèdé-ÿ~ü†SÎg®[¿ïé{žZ¼÷ÖGcñ"?ozxÿ^¯ÓFéç7=rS{ø0êÂ61//©c@§´áçEJA!¢(B€àÿª·èÏÜ}>Áçó‰¢(Âmm¿ „óîµ7Iÿ–îxþ þó%Wˆ¢èõÊçàõyzé›qðyàÏÑ}^^`ÛÇ^±Ÿ:õÖ+nìç–ÏïžqÖŸOüYÄO;xjdðãó>|O>ujÖœòõyÒ™€iÃÍO¶=e±¶]Õø|à/O-ÿö›7;·^qÅÜgšŽÿëÍßüÚ‰Oµ=k¤{IDATaî++¡y},¤åëõþ¸­Í u×èòõyð_âîèÓÏö¢äº]¿¨-xóÏ>ç¬éZ €Þ>öù}í‡þ ”Ð*#}¾À®¸bî3M{ö½yÛÕ3¶/ÿÞ¿qnа­r°ý P²p~± }7¤)½Vzú´Ó¾y¢¿@Oß´ßÔFޣ˯¬º÷àÁ}Ïö,ûÁ—óýcRyá ª®˜»#¼“¯Üy'¶n½üß5ÍÝ×äõ¿r° UÖ‹挼ü°þ }¾^­ŸGưMŒh>53c:Q®”‰º |”£ò°Ç§ BkyýP œ¿qãº@²›6ÊIDATóÆëæ=÷ €WúÞZ^Zb»x±×+ŸIÏ—“jÑ=êEàûèùùºÀ7å|¾áo|sÕ?ýsÑŠ[Ö/þÒâÅ_«ÀЉw>þpÐ32<"žòœ:uJ/¸GG½ò§é Dˆ˜wÛo_t_þÝû¾öµû¤ž\±nöNÔÿæán㮯ØU÷_Yˆ™çL÷vÖåççùOÚ Ú¼<ÿ9x>?/£êý¿p!^ùËó«/^šb¨û?­/¼ªqÛo›w®¯Úé.Q:—¯læIݸ§â¢{CÝþæücDSp–âh‚Nà¸åò* àʇmù§Sº³òBšš÷ýöÀ¾6IDATÇo9Pý‹­[qyÝ­%MOôõÿÕ]”=ºªÑé»ÕøƒçïpaÝoö|å½Sî( 1R'Gz{>þµƒ€ nÞ±²øhÃ,ùé%˜~ælE@t@Ðæåçé£õsY¤aDè&>?ìB¶à™NJ¦è”&!_X{ ¿¡yDˆ>ÑvÑ"éWçõ7†4à¼þFãžçØ.Zäñ‰^ÿa~¾^ŠÝ^÷(¤úè?úáÚ™³gK›Yóíç>\ù³>ÿ‡#ûYgÏø¬Ï«ñx½h|ðBðh„Q`D#xgÍœQtÞ·vþŸÕr_ý7qô½·Þ |}Æœ¹³?•¯ÇÇïþõ­Mž"NIDATAiÒ™Ÿ/úìLƒãÝS3?}Áçg}ïoïbÎÜó>•SoõýýãŸ÷é3Àýá›û`dÆgçÜÑð_ß¹âŸGé0GçßÿO]÷©|(èçÌ=ïSùAíËÆ–”– ·Á¿¿ñ_}oJêœùéÙ£ïžÄ§Ï+8Çm”-ç}ú¼‚sô1v?B'G>xó¤\—'vÁÜY£oõýÁ»ègþ삹³ò¢öóô¿ïqFF„n"ه﹔>ü¼Hixó•od¿[¶ü ÅçùÜnF#hušxoq>¢×ãóù4zýÿöþí[/í—>||ò£‡@Çþ6IDATÙ!uÏÏÓÁÿ¡aŽhÀI,úÊ ‰ô1?O¢ ¢ø’]ÞyEóÎ [ôœóæ2iVÁWf~Q®5§äÂ9c‹é?ûÅ ? t7^ûøöî7 þ÷ÙUg¢û¥wÀûÁ#Ÿ-:3Rã¡íGïF¼U"O—{%;On4ÚEj!êîGèdÞ9|%xRÐ%ÑÏîÆÅQ†1lDS #:¥E 땎g "ä/—‰€Ó#^@3>v,ùŽÁçó ù4ñÈËÓI÷¬»2N£…>O/°ÿn÷h÷_˜'@:k¯üt¸?mÐßü»tøÒ޼¸ê®/Þ¨Þvä–¯’Pš¹IDATk´ùyÙwp8‹åô0ò—Ò‡€(M÷³ýgÓñÎ?FÏýLž½#¸¼¤¤" H÷t“Ï£ëõZùëî"üß‘“ã:D!psÿí^ÿ•{€ cÛ„ýt½ñ~ýþÿxë–¿tŒH¿Ÿ]ðÍÒ™iÚ–Šåî0Š|Ó¥4âË‹Ò"p [úMòa‚€ÁºÎhzä|*Ù6=Þë~¨×k¥ª*c÷uŸ9{ŽN›3W5ŸYü…‹‹3݉ÜÇa$"ʸYúOÿ~8£é‘Àéæ3rE—èÙñ`Ýÿeé?iý±{æì9"z~žþ­'ÒÙg"""ŠàŠEeX´3þrÍÕèIDATa†GF±ûìs>øo ÿçîLT爈ˆh2ÍWFô¿¸º{zÞÍhˆˆˆ(i%%Ÿži9¤ˆ®ÓëþøÇ7î¾ë{™î%çÁŸþò¦u:š¸‹QöcD'""RFt"""5`D'""RFt"""5`D'""RFt"""5`D'""RFt"""5ÈdIì¶C‡2¸u""¢ì·ví }½ USËdDÐù§c™íQÖ²ZïM|á Gt·×[2Ý""¢ì½FzžG'""RFt"""5Ȧˆîj¨ZÚàJSƒ‰4w™ ïa6çNeÕÀ¦i_&ðyOëKH•¯OœË«,IDAT"JX6Eôˆ’ÊÊU[[`2ÂOd—&¤ Š)÷b|#“U+wf¢Çj\ûغ¡¸¤@þ©kñ·˜LCîn\ZP<þdø'RD#zпô^àj¨ ¼U•,it)f¥¡£)èº4üñx6<°ibbXâ NøFýÆ92Y5°Ù™‰hÖõØ’â:4õ ôö ôö 4ÁáfŒgO]jLhqdÉŸeñåè†Í¥w«5Ž¥Ñ!Gü)¡®@wcÝ6—k[UIAÕc-cë6T-ÝP·T¹$àj¨ |°€–ÖÖRƒ!è±ë±%òGéI„ì¿»qiðg´Ô…&ÍIDAT•„mH^=´AíË] i- ;xwB–ëac]Aqɇ¿‡¡›P[}ƒÃßOyõðƃG)tdJÏfKëuÁãu+u&t`C0xCwJJ¬Çú™êu;¨?ð¤Éߪ©ÉÿXyxF¹#‘Qü tC>`°©ÚÐíhí}Þ—n“?Wº:ÖlÈ7µóGMD“c‚Žº QS˜Ð@“k›Ë4ÐÛ3ÐÛTãhlp¡´¾i³Á°ù`ÏÀÁÛkÆ×—ÂÕmhò/Yé}§Õá¨6™”] K¥„©ÉÐݾ hö`=ë\èn\ºMþ«:òÂrBÛo©[Ú]DD0IDATøÄS€KƒvZê–n+•<°Ù4 c‘ ú.Œ­~°¾»N:À;¶z¤Æ£ŒaS}uKkkð0†>5Ù7°rWƒ6dC{i§\ Uuhêi«7Œoˆ\‡+ð™2¢H;ëO Tú”`ª.5™j\)KðÌno“¶·©´±±%Â5Û½Qƈ²ÒEôV‡ÃP:‡; ›ë¥7wCi¼£Ð5ò‰Íj“ Ý.`Øt0ð. 8-&SMÐcƒ¡TJ§”ÙR”f Õ5Ww·ËဿKqû€àö]®î@ºt›Ë%Ô¸\݆°m…L‰± ŠÕ Õ5†V‡C¹zÄÆ£ŒÉx7¡IDATTãp´p8ºëëk‚z¢xj²j`•ÏxÔŒ67°S®mUK»ë‘l\Cû"âŽÄþ¹€j“ÉÕâpEyf9w] \.Wø*?]ÆîåŽñEt×6ù£±4êyÁà@;Yº]céQàqMSÏ@o©µ$M‡ÃÚœ•èI Ýqu'p #Õ]ˆÜxô‘©ÞTïr8ÐÒꪉ~IXV ¬òÃæ¦ÀŽ f“"ƒ¡ÔïlwR¯ÀÕÚâ’ÿè68 8ð´PCÕÒÓ°ã1× "ÊNqýÀfCÜt<”‡o¨Õáòåáý@*£|ìj¨{¬¨iêi«7t»\cà$ËIDAT­¹Z[BÞx]­-®j“É`2a[c+âú€àöa(u…­tþ5xwYW¬¡ßƒ†±ÍÉW®±ñ#ƒR“©»µÎÑãïìXÅ3ŽH¯Äê•RéímMØ ´ßÕÔ×£Qq}Ièé!C¤‰Hîy·ÃÑmòŸªèmªq9.Å熱ýògäö4ð÷h6ñnQvKô.°¥®‡kS}àm°Éÿ{…aÓÁ¦ Å%ñÓ½œ1¤š¦6ÕWÔ•´4Ö·¼Ýÿ¸º®–ª’m€š¦žÐî֘ž4„<6и¤¸ õm«KMõKªJ ê¤CÁòšÛäf ›Ç”xIDAT¨Pß´¹jiA1ÀT¿9x3Û‚ûÐÔ¾¡\uaØzàØ”5MMŽâ¥þå#Fð.€±7욦±ÍÕ4õÔÀÕ X3BãQGÆx¼»±»¾)úÙ4°P<ãa+OÜÞ«(LMO¶–,©BÛvŒkˆ ··„¼Q¨~²®Æ±ùʧ 0l>رåîlÞ8^m2Õ58\mgVÞ/æzC4€Æ?ð÷¢üË:°9~7ˆ(ë ë×ßÛ´ÝR·Ñv÷]ß‹µ «¡Ê%­œ\ UuØîR®Ç–T5¢¾©ÆQç_ 5M=Oš¢Gô¶C‡:ÿt,•ûºo:œ?öIDAT£® Õ$_o¥|<‘âõa\Z7;L½Mag…'´ñqŽLV lš:“®}œdi}­Q:}j¶8svAìÚkþô—RO¸R‹aÓÁžM¡S(~»½­÷v¨_,dJÚµ´¶ÖT7…?ÎvŽºÀw¨jšz&8œ‡5>ΑɪMSg²j‰ˆâH8GOƒÔst""¢) ©=ëïKDDD Èp}t«õÞ¤Š¿QD™Œèk×ÞÁ­©I&#zìDDD”8žG'""RFt"""5`D'""RFt"""5`D'""RFt"""5`D'""RFt"""5`D'""RFt""""×P¨IDAT5`D'""RƒqDtWCÕÒ×Äu%g´n(.)(.)¨k ž> 5D*ê¤vmÂÇ!Fƒ*óÔ¤ãå=9ƒí6›ñåG)‰Ñ] U%Ò_BÕcÝãÚˆª^-uuÝõz{šªÓ¼©dÇ-;Ç9b¯²³« ®Ö˜L†¬ïgð·2©£êÿƒ=°¹»q‚6èÿÄìHwãRù6ðSÕ8¾·\šª¢Fôº¥-¦½=½=O–vóååçru£Ô`Èt7(ͺ»aª.Ít/hܰ†Mlšà?܉i³TÊzl66ìèí8XÏ×¥"ÆQ÷@ܪijª”Yûû7/ IDAT’FåçÒÓ[êü6ëZ»ë¶¹\ÛªBrý±µ68 Úm¬+:>m‹±VßàP.³tCÝR7–Fl9ÒêQ·ÛR·t›KÚ»¥ ®FÂû¶t›+âoÎõØù³yÐç}Ÿ5vpÎØZr'#sìýRŒÜl¼qíjÔý ô3â³g×b=ïc MÌ‘ŒÚŸ'"lZZ[K † Î‡ xÐq¬Ðçn©rsþ΄½äÆ^ÊÕ•) üÒên\šàÆðǺC{¢|寨Çðs`Jr[ϳüÜÅQüÁFxÑúÿŠCžˆØ/*eÿë6T…¶ýÝ,yqFf‚¶Bj£¯="IDAT5¢WW·Ô•×µø'´Ô-í®ï‘>KÖ8êo@áÓ»—n@“”ß4U—Ö7ÉŸ=Þ^ªhm[i“ôi´»NÚŠk›Ë4ÐÛ3ÐÛTãhlpEÝbìÕŸ4)wÃÕmhèmªqÔm@“²å«ÇØnMSàsôCcx#Á}ë=°Ùmè›s5ll,m’ÆÊ <¢·úÒ°Ááö6i„{›J[‚–¿]ñ?ö~IãÓ#‘#öò¡]±_~FìUì]‹1þc>XÆ‘Œ0&áý yq†/hu8ªM¦à·5þD+ž»ú‡£ÅßÔ¦zC¤—\4C©«»pµ¶”V£µ@ÿö7IDAT· ¥¥ í`¼¿½;FOØÇ˜{ÐVR~öCž»DÞC”°qû¯|™ÅxQ÷?¸Íè=I^"#3þ­ºè¢Í05 ˜ ]T²ÕOöÖ»ºÑâ(i©“ç×t£jOwÁÍÛcŸcv¹º ò2†êC£ÃQ_ Ãæzi-C©!bË€!‘Õ• 5&€Rƒ¡T~wõÛ» ÁÓÇ– º±5”b[] Ðó¤©éɨ#28>¡û“$C©+b'•+Fî†4>@µÉ„—+æ8LA]u54ÆÚ¯ÒDF&þ¼#ð„JcÞ´ÅHcÖ¸#ôÅ©ÃG‹Éö\„4îBè­Tm2Õ –†ÌIDAT9¨Ô”«!ò«%²šêê— è.­®/mllÁÕm0ÙÁ¸Â_·¨ûwÃ_Þ)lE)‰¿úàç.‘÷˜‹%æ‹*´åÔzWü‘™ˆ­ºÄ»Ö½úÉÞž'M­ÿ9éäúØßg´éã—¾–'y»±¬iêèí1µF: •«¡*p¡CŒT#‰n$²|XWÓô¥ÖljcA·Ëv©Dxã®î˜)QMuuKkkKkkMuòWP––Âåjiu•–L&—Ãáê.5ÕLÜF‘îö”Ö¿ú8ÏZøòÙ1&’L½RîˆÑ«Ê\®nCi©ÁPêÚÖ~ª&|ºÁdBØ’xÊ0ñIDAT®à‹ëk¹Z[\Õ¦¯Îh[Lpõb¯c»‰4b0”ºZ.ÿô¸ ºêëjšzÚê Ý®ÐË¢_”èÏVå­Ä_>f7ZŽ@¾mù®"±ŠÖ«h]Mlü#?ïÇ$hH/ÎЦ(†"ÐÏÆ«M&ÿ‘©~sw݆îúM&Dyµø[ï­¡º Ý&“¥&Z?aÄÝÁ>‡OŒóân?ò‹9xJ [‰ÖCÄþ«~îR{ˆø¬E"€þÐìÉØU)Ið}‰¦¶èGÝ]ŠK6Jë´€¦®ª¥ÅÒlÃæƒMÒ£šÐé6Õ7mL15 4UoÞR)ÂIDATª¯.¨+ii¬oóŸÛS®UÓÔSWCX"´lˆ0+Úê1Ä^=Ævi¤¦©ÉQ¼´ Q:±Á&E3—7€¡¾í`PLõ[u |Ö°©ÞPPU² c[Q,?6ÎÑ:ìï†k›ÔPÓÔ³ÉgBºZŠû¾Ê^ÅØµØãè°aóÁÁO\Ä1 Uôâ¬ß¾„«µ¦'Ç´Þ°$¸ñ±'ZêOØŽ›L†TGyÁÛë—T•ÔEì­Á—|±½Á‡£ô @";oÀëÛØÒ“èéÅ:%ʦ£m)?û¥¡o,©¼ „=k†M1Ÿˆ˜hrÿÇùv” ÓñÃIDAT˜o#Daýú{›¶[ê6Úî¾ë{™î M.WCU¶OøWzrœ£® Õ”äÍZ7;L½M5¡K'þS4Q">kD9èÁŸþRŠãQst¢)©¥µµ¦:±ìÇQøÊPX*]^W?Àpžmb?kD9} 3l:x Ó}È:I¼ËËßIi.e ŸR1Vj!""RƒLTj™„ò±Û™ÌÛJçâÁÕ'©*#,3™›ËÅ2*DÙ*ˆž¦78u‡º\ٻɉã¬l‘UUF2g¼ÅcXF…Hí8ž¦³­<‰› &ùYà“>ÝÝ0Õ—©¥9ë¸\Ý(­6Hà ƒ/6šz¢ßŶÇ?IDATa&P« ¨nDh] Gü*’ÐòŠOÐa³ ‹ ªÓPލ5$"l%zÿ] ¦ĩS2&õZ‘v3¼˜J‚åUE#¢/ïâÔ}I®dNðæÆ[ÙbÒ«Œ¨µx ˨Lh¢,£>zHá“Hª° ˆ3ËÕPU‡¦ž¶zÅW¨Q£CÜúᵦ$R§D–z%’H»^L%vy•ð¢1–¶ÝªI•Ì ÙÜ8+[Lz•µa• ,£B”•¢u)|±ÂAÌ:®Ç–Hó Õ5ˆV»%¼r†k[ÕÒš¦ð»Ç/½CÜúáµ\¥¡Sš•ÎÂIDATâÖ)‰W+%‘J$v3¼˜JÌò*ŠFD_>úv]J¶dNÈæÂŸŽT+[LN•$ù”åJñ˜±µXF…NH¾Ö=Ù ŠÏc•™ _msSx¹É¬¨—0quJ¢­˜©ÝŒ»Ýì/‘î¡SCñ˜‰À2*DY,ሯ.Řð 1ÊcDšUz{[6„ž‰_„#z ‰¸õ9Âk-„OI¶NIj•Hbìfx1•˜åU"_>övênÄØ—8›K¡²…ÒdV‰¹›±ú˜õÅcXF%]eTˆ²Câ÷Œ‹W—Bž±XHŒò‘g™šžl-YR# áˆQC"n}Ž…4¦´Ä(»«–IDAT©S¢¼ƒwjµ("îfx1•DË«ø‹FÄZ>úv#WÝÙÓ6a4’¬l1ÉUFÔZ<†eTÒXF…(+¤T©…&Mx1•dË«Lr9VIƒ +“Cr½ÿD“(•J-¬p@” V<&ûåzÿ‰2+‰ˆÎ ~—Œdï›Á{Èä¼ +“ýr½ÿD™ÅJ-DDDjÀˆNDD¤ŒèDDDjÀˆNDD¤Q¯Œk;th2ûADDDq­]{C_³b]ëÞù§céé%Íj½7ÆÜ8ß^ÛÖøËˆÓ_|áéï®XŸBo&E""¢,ôá{çƒS¯8Ž—ŠE€¨œ+Bà_òá¿tIDATÿÛÝS½lAì“ø>ºRÊÁuòW$""ÊN‡üþò¥ æÍ»0î’¼ñ—C^»~UeŒeR¼2îŞΕ‰ˆˆ²V"á<ÁÅT˜£wüì¢ÀãŠü>µÍ¥Èi+_:-Æœkœˆˆ2ÄãõÆ]F§ÕÆ_&µÍOÎéðyy´F~}›áꟻ¢ý:ñìµB­]~ln-’ ½¡ ;mååVX;ǹþ‰ˆrÄȰ;î2º3ÒÑ'-G¸|´HßñàE¦ýÁÈߟ>9<<<<|ò¤ñ[5^¤\¦âî ËÚ¶òrkY³(šöÚZ;Œ`´tv¦Üè~;ÌfØ÷;-FFc"„‚Ž…IDAT¢)`xxTùëw¿Sóâ¿·„,sÆÓâ¶“3çÑ1¦}Ó¾:íÜ‹gWžûÕ)®¼æ›u~Fà‰¶®ÓV.HÊmN§­|,õ¶× µv§­¼Üf«•©µCнÖÎf³¿s³ÿ±ÓV^ns†6*OiĶÂêtZËå%¤€n1—9íû¡=+·:Cº:Ölmmyôf£v#°DD”1CC£Ÿï~§Àw¿S£œ844·¤ѳô’õQ`ø?ýÝD^Ñi[a-kEQ›Ëœ]F‹Ål·KáÎn·›ÍfN«Ó,-a¶ÛlNç~»³¬,Vm¯-wZDQE±Ól_!Eìàÿ#"<IDATF`´¼`5­¢Øi1Ê}¹Ñl6ûCº½¶Üß³N«´5£¥SjUl.³Úìàì2¾ào¶¶ÖÔlWônŒ}!"¢L‘~®[uu`âu«®LI¤ÈÑ…`!M)ÿ0|2ðãxØò3ëìY¿¾ã«ÒOÐ6ŒeeþSâRªm6Ë!Ýnï²ZÌ`”ÿ2ÿáp£±,F¿]]°×Òk§³+b#A«H„tgWW`•±Åü9w­]]NFór©9³Ù,OJ¬DD”iÃÞáaÏú›VJ¿>Þ´Gz°þ¦•Ò¬áᨘ•r Gƒ…4¥üwä“‘±pþxƒéû"þÌJêE{IDAT¿aeØFÌÍ¢(Šf{ีÙbí²Ûa·wùƒec™òÐxdFkçXÇã'ÄÎývéP¹ ÔÚ¥u§­¼Ünî ÊÚãH²DD4™Ün÷÷ë®—?Ú¸Ãív?Ú¸Cúõûu×»Ýn·;þ¥sȉ=qã#À00ìxz§iýJe¾ø9yòäñÝû®~ô¿‚ÖtÚjmNÀÜ,vZrÚ»ÜÜe¯Ð³Å kùØ©h{mðiicY™S>(‡”7ùßî”>YH‘×ißïT|npî·ËÞŸ‘M °Ûí|]NÇîe‚(Š?kxÀÏž ¤_!Si'Û¯uOŠ”£;v¿lºá;.ö‰ÑIDAT_à$¦EçŒe(/¬`´vvJW¬/7wY–æ¨i°ÑÒÙ‰òòÀ‰s³ˆ.ÛØ|ss§ul¶ÑÚùBäV,f¡VŒf3`}aìB;³¹Ö¶ßÙÙÜlÊ+`4›ÒòeÒÿN«Ü{˜›E‹QÙ¬µ³3‘nQFI!<ö”زúûèH2§ÿèc÷˦®”N©‡8‰Ù‘Ã9 uf´tŠŠÇ-òwÐý¤Yòa³#6iÛÒdéü}èìÐ NŒ¾¿®hÖµDD¤Y£'»•úÿ¶óæ/îÝþïÑXóÔŸ“jˆˆ(Wd{ŽžìŠS1fç†6DDŽÏÖIDAT¤Y£OÈŠDDDYëÍžþ™3g$²XÜeÔ–£OàŠqýÆÑžŽf\eªLSËDD”=®¹æê;5gΜ¸K¾ÿþ+¯]œŽ±Œúst&÷DD”…†F¦çO×Üt­Æ/5­F4­‚ ‘¾¡$šÀ­ÕþñîÉØ æÌ÷ѳóðDDDY‚9ú˜LV'""užGŸÜÂêí[klÇ òÎËü™ý»nÝø\?¯Ü¾sea2ë%Lµ9ú¤V?þ [¿Tþ½kn}¨ý¥-•Š™½ûjŸ¿ýð…@‡mÙC»æo_]˜èº²;vÇÞS’¬]{C¦»@D”IêkõYÅIDATÌÑ•Aˆ{G\¹°:0í\jÊW^X £ic”UÛ;:*+¶@aEeáC}ý@h.),›žèºŒUqñs‘jsôäH…Õ£‹ZX]©°¨ ÿÈ@PT.^¹}õÖšÅËäÇ;#ûÈë%AÍ׺ê©§±°z<òqõ–+ {÷ímOvˆˆˆ¤æ]:Ø~Ô=jau€ãé¦ïoˆØ T‰5êöúû ‹ ‚¦ìÚ×ã* %èØhÛ×_vq\”u‰ˆˆ’¡æ=q©VGeEE{Gôw´÷èßu«t{aQAÿsû:ýGŽ÷*æF\—RõÉ'Ÿ ·?, IDAT ¹ÝnŸÏ—`-a""5QsŽ.IäÍ=õÂêÀü-–ùLyå-•Á3+ïÜÞwëÆ±óèó“X7ýœ¶òxAY†5|Jº·8qÞ~ûí3fÌœ9súôé:]Š/l"¢Ü¥ÚkÝ'«°:"ãÂÕO´(¯Ž:w2¹ÓV^nE„ê ®êôÿfn›ÍÛ·‰är¹Î>ûìóÏ?_§ÓiµZå•DDS:stVãÜo‡Ù û~§Å˜BjlôpÚÊW؜津ïãööÛo˜3gάY³2Ý"¢ PÿyôW\óÔŸcü¤¶élàÜo‡Ùb.sÚ÷û“m§­\ºú?‡O ×åt–•+& ÚIDAT¶òr›­V„Z»b=A(·9¥œ^š+ÈK€Ý?A¨ÝûC˜§OŸöx<¢(ò<:MA)Fô,ÏÑ'dEUpî·Ã¼Üh6›ý!Ý^[n-kEQ;­ÆÈS” Xå ]Ûeµ˜¥)N³(ŠÍfÀhé”§Ø\fµÙsE±Ùl·ÙœpÚÊkÑì_jyøFº ޱœˆ¦,æèª&t Ò]]F94û— ›¢d´ÊA»Ól_asP.HÒkíèê š[f4Ênº¿…}+ƒ ­N£¥³Sù»¹Y4€±9ôê1sØ”@ ¢%F›áëÍ ,Òˆ%l""šêü>z´å³­>:€þ½knÝÛ‹ÂW&³wDDD!Ô™£+eq}t(\µó¥Š]·>»ƒDDDq¨6GONÆë£š¯ug}t""š:Ôœ£çR}ôüÆÑžâš÷TÀûIDATªv•©2Ó] "Ê jÎÑ—¡úèI›®ÆåÏxžt""•QsŽ.Éæúè\ëÜZóÜü-‡ï¬ˆÛY""¢T{­{ŽÔGGáª/­J¼§ªïÙu?Å=¿¸©(Æ""ÊêÌÑY]¡gÏ-«vcÝ3IÇéž=·¬ÚÝ4©èº½Ï\[2‹­êÊK¾üÚ¤mŽˆ(§©6GOvÅ\ŽÙ1õ:‚Ë¢íhßM×'ÒK®ÿÅk×#É;ƒ:Q‚Ô™£OÈŠêÐ×ц,ê[µ»£çú¢è{vÝ-ÏȹwѺÈSb4ø«Uëžï”Üð‹½×…®žüÁ€XDQAˆ(îîäQIDAT.õ_ë>…k¯è9z ‹*J.¸¬ïØ¡>8tß-ÏÝýÚÁ—_;ø‹uE‘§ÄRtíÞƒ/¿vðå×Þ]²ûW‡’]=¢(V]yI&"RÖ^Sµ¾CG°da°`ɾ¶£}@_O_Ѻ(— ›§Íg×]yIÕ•—T=xý=}É®žu"¢¸˜£«Y_G[_ß3뮼¤êÊEÏ‘Žžq·øìº[ÚýB‘‘÷¿Ùw­‰À NDsô1j«Žž£ÇzJÇÃ_~íàÝ—õ;ÔWTR$%ëR¼>%¶¢% ‹ ²ÿôcP'"ŠA׺çL}ô±¹(\µó‰Uʼn•K§QIDATm11}‡Ž`Ý=ãá –,|ð™£}{ï¹»­ê–KvE .+€Ë¦DWtÓ …—¬»òDZˆaÝ8ñB9"R Ý´üs÷®ç~žàò«o¼í¢y³c5˜Z?²9ÕŽ±|ÖÕGïï-Ørø‰ H öU„…üñ(ºé™_(¿ìž—/€¢¾¼ä‚°)ÑÛYx÷kC¬~ìÇUÇJÒý%7u"R]ÏýüÇõ?š7ï¸K¾ñÆ_h|ø¢­÷ÄXF9ºRV×G¯°ÜéßZaÎVZ=úà%÷“ú?4¤ƒ:©Æ¼yŠ"‡F=n¯Çã0<â04äq{}¯®üIDAT> |ãëñ£¾jsôäd¼>zÿ‘ã¨üQnõY{úIAý¥–Ó¾e"¢‰'(O…¨‹F§ækÝs§>zûÖíó·¬ÎÍ€>Ù?Ëjgº;DD@è‚A”á=™È®æ=Gꣷo­ÙU~Ñ\$CÞ…d¦åóÈÔœˆTƸEù?A”& ” PÿyôDøë£Ãñô>¹>z˜“ÈRÝÖÑa™_!ÕG_-×Gߨ»²Å2¿°¨ ß¶¯cõr}ô•…йò’íó çW™*Ç¿§9JyˆS{(ˆˆ¢QsŽ.Éæúèýíýèí߸XJü'þ lªÈÎ¥ÒôDöåâqIDATžV"¢)Eµ9zNÔGO°8úŽ»ã/¤R‚ <ûì®ð˜ÊcBD‘:st5ÕG_»ö察|òÉÛo¿ír¹Þ~ûíÓ§Oû|¾LulrlÛ¶í£Þ]¯×‡\ID4E¨6GOvÅ\©®Óéf̘qöÙgV÷Ág»ÝcnAAÐeˆÓ§O?ûì³g̘¡ÕjÓÜ/"¢l¤Î}BVÌN:næÌ™çŸþœ9s<º#z¸ÎÎNešÞÙÙ˜¥×ëg̘1sæL)MÏ`'‰ˆ2‚9zŽÑjµÓ§O×ét³fÍšjá<œ2MA§Óét:æèD45ÀŽñÆIDAT1GÏ1RÜ’‚ÖÔŒèGJÁ=rzànBû¶ÑT æ{ÆsÅì$]ö¥Ñh4vª’Žº‡L”Æ„—ÅQ.#ý"IÝ4Ž9úeYôŠD®´FDD”Ôy=g꣭m""¢„¨6GÏúè@äÏDDDIRgŽ®”Õõщˆˆ&ˆjsôäd²>zûÖšvð¦îDD4>jÎÑ׺Ÿãñ†¦¤úèÒãè7xÀL¾w߯5ûö¶¯ :&Å=áÛ·ÖØöUð<:¥HÍ9zŽÔG—2–Ñ8¨ÿûè‰ð×Gv<½S®ö#…óHõÑÛ$ «ÔIDAT;:©4ja‘\]º‚½°¨ ÿ¹}äúè……Š¹:l[CæÑT$DbÐ7ÐE$q'15çè’l®ŽÂây.æo9Ì+Þ‰ˆ(eª=žõÑ#Ì%""J‰:st5ÕG'""J„jsôdWdÌ&"¢œ–â•qYž£OÈŠDDD9Dý׺«¬öQDÌщˆˆÔ€9:‘¨óZ÷ÔVd}t""Ê$Añ/€dn/µ^ëž;õÑ¥*«í`¥""Õæè¹Q½Ã¶ì!ÜÙ»ÅÑx©3GWÊæúèÇ;z#Ü–ˆˆ(yªÍÑ““™úèí½Ç;KÕÜæo9|gEÒ'í²ÐIDAT""’¨ùZwA¤Êèʦ”ÿÊõÑý?އ-!?R}té'©>ÈÇä[v®,ìÝ··=l~å-‡_j9üÒöòd#""Jžšsô\ª^¸h~a{?æ³ *¥DÍ9zâ2T½²¢¢}ßÞÞ ¹DDD)QsŽ.Éæúèó·ìì߸fÙÞÈs‰ˆhJE€(*¾ˆ.‰+]µ×ºçF}t¯Ü~xeâ%""ŠB9:ë£ÑT£Ú=Ù³‰ˆ(§±ö‘¨ÿZwÖ^#"¢©€9:‘0G'""Ru^ëžÚЬNDD¹K׺gQ}ô8sýËlì[Rh•ˆˆ¦²®ÕÛIDATA @üµH¸IZ€jsôl©¾Qž‹Û²»ž Ûý{×ܺ·…7ò>3DD4ê?®¬º\}ÚW§{ñìâÊs¿ú/Å•×|³îñÀÏzôŸ„룇ÇìÞ~9ÈM0užG—²séA d‹Ô”ò_¹>ºŸãñ†¦¤úèÒãè7x'WjÙø•É8E2kÖô)Î𻱨ö<:²¡>:•ZúwÝúBç>úhhǯö‡L\xqU9Õ~Ÿc¦IDAT=éª>¦wßCÏ¡bQ”¹DD4ÕÍš5}ÓÆë•?U‹*“jAÍ9º$£õÑÛ²‡Ú®ÚùĪâðÕåkÝ[kž›¿åðq;KDD*4þ]µçѳ¥>z…å¥KÔ¹Òµî«ï)©“”£+§t:FF܉· Îõщˆ(·DÉÑ+€Do2£Ú=Ù³‰ˆ(ƒ¢äèÑî†:sô Y‘ˆˆhÒDÏÑÅ=ýÆÑ2å*SeúADD“hõ5ß0<ìrI*GWÿ=ãr.œ¥@ýßGg}t""š x} ë£QîRçyô\®X¨°×f%gÈ/IDAT""ŠJµ9z®ÖGï8"/Þ}mûú+W²¸ ‘ÚI…ÅD¡“ã×£þóè9V½Ââ¿loq!Ã9%Fý׺'$»ê£÷îÛ¸xYÍ‘Š¨G鉈ˆB©ó<º$g룯Ü~x%Ú·Ö¬éß¾“G݉ˆ(ª=Žœ¯^YQaëèщˆ(ê?žˆì©Þ¿×¶O>2ßÞÑÁóèDD”(5çè’«^ˆÀQúù[ó;%HµçÑs¶>zØòDDD PgŽÎúèDD4Õ¨6GOvEÆl""ÊQðßcFúO€À‰ãõµ×ˆˆh*Pÿµî¬½FDDSsL—«èIDATt"""5`ŽNDD¤ê¼Ö=µYˆˆr—:¯uÏ™úèý»nÝøœt8ÿ-hXˆˆR¡Ú=7ê£÷÷l9üD¤@¾¯bçÊ~ÖG'"¢T¨3GW ¯ÔN®L;Óü‹+¯ ,ÐÑ´1ʪí•[©>úC}Á¥U‚ë£?td ¤ðJ…åNÿÖä[¸Méíï/®`8'"š ÄE‚çÅ¢þkÝ’ñúèýGŽ£r¾¿Yˆˆ’¦æ=wꣷoÝØ>ûNÿLÖG'"¢¤©ö<:r¦>zûÖš]…"7ë£QÔÿ}ôDd¬>zÿ®[ƒÃ9ë£QjÔœ£KåüYnIDAT²¹>zG{?zûý‡å Wí|‚õщˆ(%ª=žõÑÊ£ƒõщˆ(5êÌÑYˆˆ¦ÕæèɮȘMDD9M9ú„¬HDD4™ÿ=eÄ„o/ƒ©p­{.Ö^»ÊTò“éQ¶Sÿ=㘣ÑTÀˆˆH x} ë£QîRçµî9SÕЉˆh‚¨6GÏú謆NDDC9ºRŽÔGg5t""õ_ëžLÖGg5t""þY_F‡ºsô©ÎjèDD4T{9S]ÂjèDD4.êÿ>z"2UÕЉˆh¢¨9G—ds}ôBVC'"¢ ¢ÚóqA SIDATè9Q=Â\""¢”¨3Gg}t""šjT›£'»"c6å4õµ×ˆˆh*Pÿµî¬½FDDYO Š‚( ¢ˆþ»ËBìÕ”Ôy}BV$""š$RäD‚ò¾q |]+€9:Q† Ò-ѤH.(£8sô”Vd}t""šd®¿öŽ G‹ÅB~¾>°XܦÔy­{îÔG—hñÖþCk­‘ªÝ²z•íá_8öªÍÑs£>ºÜÂâ}¨d,'"šR<Ãóæ}ã±­ßÔ‚ ‚ Õ‚F£Õ@4ò‰uA¨:öwO§b4¨þóèB Êõѧ}uÚ¹Ï.®<÷«ÿº{9èIDATR\yÍ7ëüŒÀeÕö޹zaEea_p¹Ôàúèj­¢ïš}…nKDD”õ=!ªÞ¿wÍð0œÑø©ó<º$ëë£÷ïèíï_³l¯üû­ÁSéDD”ÕžGGÔG/^¹ýðJyÝ]·>„1œQªÔ=™ªNDD4QÔœ£K²¹>:ÑDQíyôܨ®œ¸=ñþ…RgŽÎúèDD4Õ¨6GOc6å4~ˆˆH ˜£§î*Se¦»@DD$cŽNDD¤ü>:‘¨ðZw–9'"¢)(«Ï£On™óôpÚÊWà…N‹1“ ""õËû#” IDATö}Òʜ崜9žæ2çpÚÊ¥‚óB¹Íé´• µvy޽V¨µ;måå6[­¼ˆ4ol¡Üæ",ã´­°:Öry ""¢tÉ™kÝ’r™s§m…µ¬YEQl.sv-³Ý.…t»Ýn6›8­N³´„Ùn³9£¥Såu¬6)ȇ,c´¼`5­¢ÈãîDD”VY}]2eÎee°Ö µÍb³¹¹ÌæZ»f³ÝÞeµ˜ŒV‹Pf”ƒ³ÓV^n•So£Ñ DX†ˆˆhRdûytLR™ss³(öZA¨…¹Yl6›-V›ÍØ»Ì#~ÈÜi+/·›;ÅN£|û”äÑIDATùQåÌyôD¤^æÜi«µ9s³Øi5vu9—›»ìµö.óò¨Ù¶QžçÜou’ÜéìšÝ#""Š.rtIzËœËP^.XÀhíì4RH·:-ÍQºÑb)¤uŒfsô¨o±˜…ZA0Z;y*ˆˆÒ'ÛÏ£OV™sé¨{0£¥ST<î }l ['|™(MM°¬ÎÑY月ˆ(AÙž£'‹1›ˆˆ¦&u}ˆˆhªRÕµîDDDSst"""5`ŽNDD¤Ù{­ûd—9gÙS""Êe“q­û¤–9g`&"¢)i’rt–9'""J«Éþ>zxÁ•pr™s`Ú¹˜æŸXÏ ÞëIDAT\yM`ަQV•ê‘£\°ÍftÍeV«ÝÜÜi´w)‰+VÀ\fµÚÀÜ,6—ùÛ°× µ]¼g+å–ɾÖ=!)—9©G.W+o6G\6¬Þ98måµhf5s""Ê5“—£OF™ójå±çŽÕ;·–—››£} ""Êb“w­û¤”9£µÙl¯­µ3¦QΙìï£'"õ2ç’ˆõÈýc×2/³t6£¶Ü«Ü9Qšì·Ì9õÈÍfÀ˜ø‚µ¼\»–9ÀÜÜlÊËÁK㈈(—LÒyôÉ*sD©Gn´tŠ– )áµÌýSXМˆˆrÏdäc ÊIDATè,sNDD”n“ý}ô1f%%+¿NDDDIÊ̵îß÷êÅ÷½:žˆˆˆH)9úÅ÷½Šî^t÷2¨M”ÉÎÑåp.aP'""š “š£KáÜpe±ô«áÊâI êN[9ïCDDª–ĵî)”9‡Å×ﹺ{QZ¼gÕ¥¿Ü `ϪK/þ+ÐÝ \´ŽÓV^n `Þiˆˆ(®ä¾½–T™s(ޱ_|^¿çÒ×÷¬RÎÝûꫯßsih8—ýåL¶ò6§™÷o#""Š%Å£îBj1Ä=eþø“½{_wȽËé,+3:måå6[­ µvÀi+då6§|¯CBœIDATPÝV+OªµKkÚý„Úý°?d±Vä#òaˆˆˆrFŠ=®O™G êN«]k»ä¢§ŠbçFK§(i.³Ú승bçrsy©åá ØkËiv§Ù¾ÂætÚVXËšåV#Õz!""ÊbIGt)Î*H¤cïcÿúO™Ks÷¬º¥Åc);)ÌG êFk§2Ü"¸Øy ›®µ£«+h®Tìܹߎàâè¡ tu’ør«Óéì2–•Á^+ÔÚs3OÜQŽI:¢KqVù@Ræüõ=«ä«áøO™‡œGß³êÒ@Pº=cYYHuT§­¼Ün–~§5õóë Ræs³(Š­ì1ßIDAT¢Ù®ò³v{´=¸::EmU"""Š(õÑOè¿2GhÙö¨ôë‰Ê[ïìGG¼îaïh©7pX¡‡ßýw~qÚÊWàFr""¢¤ñ¾îæ{Ýâ‹]ÅE7ÝQtÓó/È_øÅißúÊW^4óÛ >%M, §ÌIDATºéŽ»Ši-´&zð¤@t8'"¢©)ýƒ¡i¿ûŸSMËŽ4nöŒ{Êg!èg&>óÖíö„*—†ÕD·×–ûë™KØXàœˆˆ¦°¤¯ŒSÖD‡¢d‹tõ»òßóG=^xzD?tÊsqaÞÖŸ4„7¸sÿo<õèq6¬<½n4:è2Z_ª€^Vk­PÛ,6›››“Ý/""¢œ–tDVu-¤>:€Ó#ú_6ýþüÛ¿üáPþàÇ£îQ€Æo_·þîÇâlÕ_½Ó(Ÿ_G—Ó‰3ìR{­ ÔÂÜ,6'”û©Bº¿ñJͯÔÔV~08m§Èº%IDATð´Ûëñ🞻ÀüèþŸž»àG÷ïð%Ø\HMt³Ùì´ïWž-gs""šÂÒÑ>ÌòJýÔ¤wîØyê­×vîØ)M‰Ãh±”Y¥ËÞV8ËŒ`nnöO’ŽÆËàÿÝn~—ÈÑ”2õÑOèŸûåJnÿ2€}îdÇšµkÎüü%kÖ®ùøT”,=^Mô±IöZÁ^fŒ´Ñ1õÑßx¥FzÐÖ†Á!÷ñŽßI¿®[{-€ÁwjÍÚk…Z»ôÐÜ,ò¤9Mi)Þ6eÛŸøÅD5Å”œˆˆ(`R#zü¯¨QJ&;GOª°úý7Ýxü4sIDAT¯ÏîNOˆˆˆÔ`²#zRáü®;¯ „÷Õö»kæ?Ør<]#""ÊaY—£oX»Nzðñ·î¾ê•ü÷zņg¿Þç’ý³žÜñLº:JDD”S².GåÏŸûÊÕK¿U}iðä/_–~?¶ã¥ÿûêÓÐA""¢œ4w˜QŠûö7_½ïôñç=£^÷¨×=êõŒxÝ£¢{DôŒÈSÜ#^÷¨øÁ_ûæ«÷EjÀ^+×_óµ-•¹Qæe«ÉŽè‰œGÿð¤{dÐ;:èYô9í¢ó4•ŸCåyXtž¶òsÚÊÏi+ÏÓ,úœ°q冈ëÚkkÑ,Õcëª ÊN[àÒ¡IDAT¹:©ÞÐÐ(€ëV]ýüÞ_+§‡O‰-ïë.‘ê£ßuç5?¾íš-_?÷îšùiíQF \·êj×­ºzphDú ™’H;Y—£³>:M)ÃÞǛö|¿îzëoZx àñ¦=ÃÞ#Ô¿–IDATÛɺóè¬NDDSŠÛíðhãŽ;êׄóGwH³ÄúèQâm݉ˆhRˆ~?kx60ñg ÏŠ ‰´“çÑ3V]nA°•T‰ˆ(¤ ® í‰ËºóèÈ`}tÀi+·;;—ï/_‘ø>M˜ÔÂ9²ð<º$#õѶòx¡Ób„s"$""ʬàÜow:­åòL§µœ§Ò‰ˆ(w°>zø‰¹›ÊôÆuCV‹ÏÈ…ñ0ͽΣ§ƒêyºW._¯œù®\—¦ä×9æNôJâ¦üίw˱WV¬tK¦µçâ<:L³H^©’Ólcõœ7ÆéW¯¯8í)ß %ðûè·¼òsãt‘D¿Ñxt‚D¿á$=Ýå<:”@¢@ $:”@¢@ \wÃ÷ÆÃêÛÙyæ"Vh$Ñoùã÷ßÚ0ÕÁÁ«¶‡«K¢WíßÁ* IDAT~j{À4¾ ¦rJ Ñ J Ñ s'úùÅE~——;¾`,X£¯÷Ö§€V,r÷ÚÎγñød8ä©XíùlœNý+=cKåÑ€¹,~?úzo-ÿæ¦á`‹õöñçÆãìzo-NÄð®ô¬?0—}8TÊôü„z:C:¥ul¯ôü|ùE÷t¯ïŒKÉ]©¼ï^+Öî t¸Åï^‹ezšÕöŒÁ{ŽÇ'±¿ æàžæ{Ý+é>cÏXÖWŽÌ ˜;ÑósÞéH{e:ïÖ8Q9Ñî<:ÜÓ"5z^LO›Îg¶.0ß êz‹IDAT%ðûè·¼òÌt‘D¿Ñx[t‚D¿á\>Ýå<:”@¢@ $:”@¢@ \t[þm•«oô|oôSÛ£ Lý†ŒÕ·³ó¬~[Êþ¼je0óúù—_Û%“è·üñûom˜êààÕ´Eÿþó‡eŽVD¯r@ V˜¯t„©\%èP‰%øV‰¾"ׯÈ0€e:¿¸HÿÚ ,Ï܉>û®Òx“h¾Ö7ÚÙ*Û­{U±³ó,þê|?©Ñ﹫¤ˆß(n¥8ðùòK¼s}½·ÿX¥?Y•²äî‰JO¥?+kÁ»×Ò7<¬÷Öâtz—¸IDAT‹ƒ¼g½}<>‰³çéÿÔ9NõÑòEwIåDœÙŸ²|"ï™:WV„Õñ0÷£§]%ÔÞèõögii\”v¡PÛ‹ê»MZ=-ºû)êý+Ï”§¾ãÇ–Jl‡ì^ü;Vù›S)ò¢ÂŸVÍ"‰^ÿðjoô»ÛóÝ íB•b=_«²ÛTŽ|õ)*ý}²†ïA=³¿À©Æˆ³©¦ÿ¹Ë«X5‹$z|OÇ'yÖ6¾Ñ+µûY)ÖgßmfŠœOÖ@’—æ•2=Öç•ù)ÂÆ3zÎî±|‹ŸG¯žª¼Ñ£YLÕjÚ£5uŽË™IDATš÷Ø—= Š×x(1µ4.­ŠÏÿåaŸZê§Þ%¸×yôt¨¼þFOÓ•º9µÔw³ôÛD•]q®§¨?PžÊ}4õsmy‡ôg'_zG·YV wþýodîDoÜ1â“¿Ñw‰JËïþún“ääëûØ,OaOƒâÕ?²O»§±%Mõq¦­ØØ¾©Ejôi;ÆŒíÓ}u»cѼOaO 0û^÷á` Œ Îï£ßrpðÊ0ÐEý†;Mè.‰~Ãñ|訟ùµí!@û$:Ðmû£çmV‚DºmoôSÛC€•бkÝ€FJ Ñ J Ñ“Â]IDAT s_ëž~^ð;;ÏÜÛ Ë´ÈÝküþÛK^-:`A Þ~ç  Ëø^ôø»ìKx"è„%}ÃL~¬þ¡’8þ.ûƒ<tÝò¾3.ýÊx|¢¼€‡µÔoM%õzo-æz:xžŠøÊlÈjúJŸñø¤Ò¾[ËKôzÇ8ÏãDÈ*øJMŸ:§Tô@ÒæQ÷Ø ÷¼(O±×ô¡éÄyÞÁ9u¾g­uÏ[òú;•òÀìVå×TÙpmžGO†ƒÁWK󼳿P±H¢¼š÷kd*µÅKáîè/MÓyŸÆðÝš;ÑÓnóªTŸv™[}”çaIDAT6M766>8|WæNtÙ +ȯ©@ $:”@¢@ $:”@¢@ $:”@¢@ îºݦ@WLMô…¿X¾©‰î»á CœG€Ht(D€Ht(D€Ht(D€Ht(D€Ht(D€Ht(D€Ht(D€Lý}t`5­÷ÖÚÂRížï~Ê[¼½ÇÚL[.?]å³Þ$:tÏþ¼úz§"üü˯í^¿þúkÉ#iËþèùá›ÕÛ½ê$:tÒ¿ÿü¡í!´Ì+ð=DÚÝaæ=P!ѺJ¤‘se”@ž4IDAT¢@ $:° ó‹‹¶‡°$ßÏ–ò0&‡›O'KZ‰„ÂùÅŹÕõ›ˆâVϲí[ZvÒOÞ {Å›o>†p;¨Þ½è=~´û®Í>Œw/ÒfövOÛͽHtàF×z;;Ïâ¿Åâ¹ÔWlòf¸y¶ýáÓÕå§«ËOo7ކס~½øps÷ãèýÕñÓö†ø&o†½Ýp|½™WÇáì¬í!݇kÝp~q1 Ö{kãñÉp0·«Ïi-ùºõéù|ù%„0 ÒøÓÆV6§Þ>Ÿ„ÚKÔÅá¶Ó££0zÿ²=»}ü~²¹{6‰ù=9Ü|rºõþ|ÔŸþÝðñì,ÒZÀJIDATŒÞ¿Ýú{~ëømˆŸfŽâÇ—ÑûóQ8ÜÜ [ý×GïbŸø9æt÷ñ‹³ðwKÿpóÉëÉÍ*íè@!¬÷Öb°¥‰gqQŠùzKeÝÊt¥5±øÎ·4}î Ó_“úZ4™|ìoß ì~crö1l„pú_OBqÂäìl²QßþÞùå^!„w/zG§£Q“דÑÕåql9=Ý:{ò"_]^¢8Ý}üqôéj+Ä£‡[ÇËÜŒ˜*Ïéi-ÃÁ XG ôFù‰ü¸zc{zM*K;ýÉfªIØmínÝTð]Öߨ¨7NRÁBcBèïž^ÏöC“³?KVIDAT³°ÿ¿éŒÃdò1œž=>ݽžßþu $:|ïbÅ£ÇaÑú2Æ[11–*ïÛgYÚ%ýþÆäðlòò¦~L>ö7F!„þöÖÞË­0ÜÜí_o·8ÆPßÌÎ)\ú±àžñ¡ö?äq&‡G;ÔÙ¸2¸¹:,fÒ¼W{¥2ýÛŒnI*Ç>_~ù|ùe<>©|F™Ö>ËÒîØÂÑnºÿêt÷Éë°µ•«¿÷v4yqëZ¹NÚÂÑ“éj¸³Ýg!„þvÜÔɻӿ;Ðú[[áú´zñ“A6Û5:Bvè8IU{å*°0åʯŽèùFÅMˆPòÆ4]iO-ÃÁ í®IDAT¾´‹¯FÒß;ÿ†›_ÇÙ­ã«OC˜¤ìÛ½;y<Ü çöÚ9Âü þÞÌG×¥øÓ·—ýíÐ7¼ÿt{Ê™…Ññþæ“G½B¼2îý$͆þþçÑVTâ9ÍæÇ+×ÊÅ–®_ânvÈ>Öäíù–VÚó–Ø­~r½»n.»izùá}šÙ>þÔñ£î!„¦ÍÜ:¾ÚºÝçf«Ó+ÐùáÓˬKe6[e‰$:PŸ4[¥i=»[’Nöb¯IG_Êà<:Р^sßQ…w´@‡ÂHt ÙW ôË!Ñ ΣtÒÏ¿üÚöX-ºÇŸr¯ÀþèyÛCh™÷@B„FŽIDATD‡Žñ§Ü+B8|󯶇Ð&ïF:foôSÛCh™WàòÓUÛCh™÷@#WÆ@ $:”@¢@ $:”@¢@ $:”@¢@ $:”@¢@ $:”àú[`Ãü÷ÿü_»Cæ5þ#N\'ú?~üqÐÞx€{ùáŸÿ|Õö€ûúÊÚÎtTVÌRIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/copy-branch-tag.png000066400000000000000000000351551203611042400321420ustar00rootroot00000000000000‰PNG  IHDRA3¾LØ pHYsÄÄ•+tIMEÕ  ,"ÛtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝyœuÿñOõ5G&“™Ë$CfrE`]9$áØ(Eˆ8J@ø±Öè‚n2ìÏÅ]uEAåÈ*êþV— €Šèf@³€x fA —! GÈE2Ó=ÝU¿?j¦R©««jªïÌëùȺ«¿ý­oÕÌÔ»¿Uß®¯f†Ø\qÅJ .}ã7ÙŸjV†™é5³kÆØ±­‡2¡MÀÇŽ¯ïÝ»gÓæ­bK²Á »âŠ•o?úm§Ìû«£Ž:TDÒét  €C©T‘gžùóÿ¬ýÝ×ý¯cšaf€-8ãø9³§îß×W( ìë+íßßWë "ÒÜÜáWè IDAT4¦)Ëe›Ç4=ÿÂK½ÿý¤céêê0ì//¿þúŽþB¡°gϾZ7€Z[Çär¹ ‡4Ι=Uäø={w‰ˆ¶téŠóçŸzÚѯ¿¾÷ÕWwî{s__ß@­› €SSSvL˘I“Ú'LûË_¬ë}䑌ˆL™:þõ×÷lûó«;wÒýTЖW^œ¹úž¨ïÚtÁ’ÎÉÓ÷î-ìÝ[È÷DŒ)SÇ‹HÆ|yß¾}}}¹„ Àí;^š¹úž.]dtN.v"ãDôÁÁñšˆóAJ“Ý’Ù¶CÛòÊÿ»ãž×>¼tÚ!SE¤¯o`ß¾ÁWFDr ¹Ý;û‹!ëYþIDAT¨¨‰ßºcñ{OÜ¿»_þ¸µ”/„yKzýË"²ø½'>ð­;ÒËÿ¯¹p÷®ÖöF±úaùb>•Õ*Óf•ö÷#ÛØ˜Ý¾k µÑhÈSbhZ¶d8äö²{úõ¢1Ð߯ó"båT¾˜±eX:m¸×4NËŽ/eBio^~ÿÜ; ¥B©¡Éh˜™<¥©yL¶Z› !òyÝ(Òþt©táM_‘ïÞx‘ÖŠE]×4ëÁ‡n¾EDî½úŠR¾0 k%]¼¢*ã·šÉznÊø6Ée·¾²ïO/íy5o ¥|¡ðúžþœ?!sÄ‘‡L™ÒRÉ-íúúö75¶‰–ËIDAT5׺¤R¡()c   ôÞº]DΞ1íÛ—-)(Š\úÍ{Ì—^»áS¢—týäY[FD4MD$•ÒD4ójZcÞßÐmiÈ76ìh“Í …B¾ÐŸ/ôõå_xn÷›oö>æ¸q¢‰fˆa¾ÕyâñG{ìÑßþî‰óÏ¿xá‚E&LªÄŽxùåíßùÎË—÷\ô³­…gžyΑG¼í¤“N¯ÄM?þñê?ýé—/ïq¿Ô×·ÿ²¼÷Š¥×}ãŽ[<ßû½ÿ|8üоvû¯¹êïÇŒ×ÎòèÔc”áÊĨg¢išˆašˆhš1økQÐô×ôIDAT%'R”Rz0¶ÞºýìÓV½ÿ}æÓîïÿ—`"R(æÓ%)¥EtI¥Sbˆh¢—t3¹2"’Ò´TJKgÒšˆ9$¤}·¡ëÅ×Þè3SêïèÛŸÏ ù|¡¯¿Ð×ßß×—ßߟæ™Ý“&7Ÿ2o–ˆ™a†&bˆö/ÿò"Úß]û©ñmí?ýÙ^eû¡Ó¦÷—¼#t8¾ówsô±m̓{á_ˆÈ³þ´lùÇ÷¿¹û¬wŸøM÷|ûiknÜSp~‘_‘cŽzÛC÷?šÒ49{ñiVÛLîwù9ê­oÿú·Üð÷ŸÍW`ïUÇ/ðIf2 õ’¬!‡RÁ VìIDATÐŒŒd4)¥¶_wí´[¾"VŒa÷}÷Z¶ýºkE¤¤¥¼a‹"’I§ÅC3Ä0ÌclFD´”466"ÚÐj²2iÎõ‰&šd²©–±ÙÙ‡MÈÌ…Ba _H§ÓÙLZÌXCDûÍoÿíožø—ÏÞ2¾­}À0N;cQc*mˆ‘ÕRÉî›-[6þö7_òþKí(}z©sÎ\¹sÕíœwQ¿Oß3)ÙŒs£žþO"2eò[ ‘¾ƒ×n=u¿ËÏ‘G¾õ[ßúú³Ïüaî[ß>ìÆVG/ð9CÇMİ:H""¥’h)ÃH‰”DäÅk®™~ë­2cV€½xX¼`6IDATÍ5êÒu)•Dd¨¯%ÙLÚL•Œˆ¤R©L&mÈPOOŒ”¤~°Ct½_×uÝÐõRºÔÐTÊæô†R±¨ëzIt=SÒwF&sà›&ÆSOýZD:gt)1DKKz@DDK§Ò¿üeï>“ˆ,ÿäÊSO]`¾å=çœ&"‹ÞuîC?¹ÿ£»ú¼óÞ/"?üá÷ï¾ë¶ï|÷‡ãƵïÞ½ó’wÑ–\rÉGí{gûK/ŠÈ!ã1l‰Î¤×­{JDÎYt®&’ΤÍú—råÓOÿ᪫®‘ÛoÿÒC?¹_D>ú±«çÏ?sܸv³×üíò_?ùø“O>f_¾nÝSÿó?>ô“lMM¯IDATû½ëÜsÏ}ß´iÖºVßÿý;î¾mÑ»ÎýЇ>b‘ÿ÷¯½{ѹÍÍÍ¥”¤å ï*¤3ƒO=`nòñÇŸÜÙ5ëè£=úèãDdâ¤I"²qó o?æ8ÕnÂl´ã7`”3;EÆÐ/‚&ÆP·Lt#g ”l£1¶^sÕŒ[o+À¶^s•½6Í(膈d2imðš•–J¥Ä̰´&éƒ;† œð——ö—üÞþþ|~¾¯¯Ð×ß¿¿/¿¿¿_¾¯¿¿¯¿Ë¥.œ÷‘_HÍ<:·k7¬c¶ˆˆüú×}áó7}í«ßlÈdº¯¼dlÓ˜wœp²õê²+¯?Ê.â„IDAT{á¢ewå¤C&Î;ýÌN˜w÷]·mZ¿þ'Í{á…çDäÄ¿:1§¥J©|æ™?ŠÈ¤‰“ôàŽ0ÏÚ™Þý7çJ*•N–Ÿ9mƳÏIª”N]sÍ'—]õ‰];w\téy}o¾¹äÃKu¹õß¾ð½ï>X(ô_ú‘÷¥E;ÿ‚þþ¿ûô×ÝÔóùeW}â§?}`÷Ž]úПæÂÓÏœ7oþ¥—]ØÞÚfV²yÓ "rü;N”TJÒ)Ç·íÒCít7`õ}ÿy÷]·}û›÷JI¿ô£ï×ÒúWÇüµ®iS¦L‘;î¾í‚ó?N%Ü‘­,žØ¨Ç¯Àè¦i"Cãex1IDAT$Ä ë—B/ÚÁG {ììÓî8g±ýU½8X8=xæO4CK[×ô´–Ëf Ñ4s&MJ%ãWSÞÒ2Y£º®—Jz©T*éz©X²žêº®ëz¶!«fÀнMÙÜA#öðDdæ¡]é¦yè§÷Ÿtò<-}à¸ü¶cŽ‘GýùÂgÍìêzÏ9çÿú·Oœ4ï´ßýöW"2££3ËdlÇñŸüø‡Ž™×œþ°î©O}æºçžvΑGfRƒ3³kVº©Aɤ´GùyoïÏü—"òÿù­|x©UCÛØÖLóD¹ã®¯¾ï‹ìQ9á¸ãÓ¹Ì9ïìôöIDAT½Ð(–DÓ¬6·kÏ47Ø+yùåm"2}Úôt.“I;#§ah-îÜyç­"2iüD³BsíÙ¬-KzƒZ·PáC8 Blt;зŒ0m¨Ul6[*‰!º–‘+zÐ 0:©øõEï‘”¡‹&ECŠ"’Ë¥­¨1Clè\bV³Ÿ¯,å´y»vþnÓ¿Þ¾k¡¯¯_ÿþþüþ¾|__>ߟèÏ>~Åé¹L§µbCäÜs/¸ÿþÕ"rÐ!XÄï‚´í%s½ßûÞwo»í–»îøö?þÃÍg,:EDôb؆µ %^xðÁûßk¶3ë¼ÉÂņ1 <òs™6µ#›Kk®n“ÙNϘ;íÕ×^ilm‘‹/Z¢šsî·«Â ÄF=ŽØèfûñkÚÁ0ÑKzQK‹ˆúUÿØ °K—κãбÛÏ~·."†è%ó|™ä2Y«K—J eX:%éLF:Y©RœÖR*3&ŽÙøúž;ÍSˆùÁSˆùB¾PÈO<~æÂGes™ÁO݆¡iòŽw¼óþûWoÚ¼ñØwgßžyóN_SU®nIDAT»öQÉe3"râñ'—JæãÁ–¼üÈ#Ž8ï¼ —~|‰ˆ}Ô1-¹œ÷WÙÜ•˜ ûóãÆ4:^ºí¶[D¤cÊ¡M-Mekp´9xÕ;ßxý±Ç~ñ‰ëþ^D<úL ¸òŠ«ï¿õ¥}¿ˆüí5ןüÎSš+õkC"ÂF=>ÇŒršaˆyfOmè«Wæo…®kº®†¡iÚ5k~jØsÝ5ÿ{ت»e(Æn]ø7†a”JƒÃ5r¹´1x¡M½(Cý0-›³vÜä¬ÑWj99•Je´ßnxq__¾¯¿ÐŸ/äóÅ“NšÙ}é©3&Zç;ÍfŸ~úéó®P~•IDATN9íÇ?½ÿð·>®mÜ~°º¹¹ùì³]xáû×®}tÓæÍ;EdÑYïihÊåôÃ6<÷'9ýÔ3¬å‹½ë‡?¼WDfvÍjÓ˜9ø þ±]y×]_{%¹†ìÃ?$"×ýŸåî—DäsŸûâ 7|b×îÙ9¸×víÞ9qúG1Ó%—,Y»öÑ?¬{êÌwõƒ¬ž0a¼y.¹9 oÙºID¦O1¶½Å¾ûùw}|ûÄ6{È|¼xñ¹zI¿èÒó¾úÕ¯ÿóÍ_üû?±oß›ÙLÆQÌtÊ)ó¾ñµ»|àO}溋.úà)'S¤q‰IDAT.5Jzcs£gáÇ_+"3::›šs^ý°€LŸ>]DÌ~˜ˆ\tÑ/ºèâ¹sùå—DdÆ¡]­íc=ûvõ‹k! 6Ê<œþàD“¢!†nÜtü`¯à™K/s¼û™K/;êÛß‘›Ž?­¨¥¡÷6˜• M+ Äœó“Ë»[ÛÚÌÕ ~¥zh½« ¶»qˆµØ^XDŒRIß··ïµ—wˆHû„qcÇÉæ²"òæž}¯l]DÞÒ1©¹¥IDfÏ鑇øEkûØ=;÷Nž6¡¥uŒYñK/½têi'­úúwŽûëc­…–Í›7ŸyÖü¯}eÕü3OÍd3ŸÝj½4flöÞÛIDATsKk³õó¥YG̰ ˜ÍxKÇ$]×_Ùþú¡³¦fsY{1ûã¾}ýoîÝ¿gçÞÖö±ã'Ž3ïîïYøµ¿¼±gçÞ®¹©ƒ/†•m@K{ömÛÛ[&ˆÈ®Ý;/ºô¼y§œö¯ß¹ióÆsÞ³ÈoÔ5Ž_às ¬tÿ^|áÜΩúÀ@*•ÒÒÖÀ;_º!F©¨ëz*›Ý°å¥3ø/+•öìÚýù/¬<—hŽšìP ®Q3D†*Z 2 [ªi28âßÐ4Í0l_Кš'Ljw´fü„¶ñÚ<:íÐÉÓl==tÆ4¹øâK¦Míh;f¨ÿxÀܹ‡]üÁý»IèÔIDAT~ÝïÎ8ûô\.{ÄÛgûí÷KöfXìÅìs¹ì¸ö±ö¶ùvlBøÜy×O<ñø?|ze×Ì®§~ÿ”ˆtL›±ëõ=OþúWüÀ‡üöPßȰQÍêÙ˜géÌ\0îË—DRM¢§Ò:Xt]ïÓS’/ÉйD³ët`LG*-Ù\öà‘VoËRbvÐ4Íž§Ö]°úm¼>UƒkÈÆuÿgù ÇŸÊYw™²ß=Ãüß_^-Le?DIDAT™”MŠz¸Ê4ó]2˜ƒAd~ wðzX6›6×846Q¬$chÄ¢f[ԆƜˆhÆA½´Á  {{ãµ×óÄ3"’=è+уË;gMmo›Éx+˔ɷõÖíÛ^ËúPÅøö¶Ë.»ô½çž·cÇî]oì4yüØÖæñÆÝò¯ÿºuÓËÓ:&úíºep)6ºYgæÌgšÙç1dÿÕË›oûÂ_^už¥+«XÚ¹ÿêå™lÆL'C“÷KlmŸ©Ý$Î'Ì;:Òr»t&=ó°éI·¨Ò™ôÄ)ã'NïX>2¶Lçuìeyóm_°–hCCå%°û³ÿêåç³¼3ˆIDATu¬=ªZÛÆ‹™a ¹ìö_¬X›ô7§)§ý{Œ7öçóö¨:dÂ$±æÀ\ÿÜ«‰4€*8Ùža/<ÿÜæÍ¯Õ´=„ÒÕ5ñä“Þ*f†e²™¶ö ;ŸzöÆ.¯uÃróçî<ö¸#Ì›7)5£6d@Ud@Ud@Ud@Ud@Ud@U13¬³«Ãú—lƒÌ ¯0ò8g< oËæmæƒÎ®ëñð%X`d‹Ÿaž¬þ“Eöî”=ó–X‰h.tÔc=µJÚ4Ù4Ô¹  [ÓÛë^¸pÁ¿òžqâXâ.ã<žÉdO¸à¸òl<˜òœ¾IDAT@-ÝÝK¶nñY¥L?¬»{‰c‰U—»;%q¯cÅè?Yå=;dâÕr€ZV­º'¸@ùs‰~è>[(±®f¹Ï&" ·#ÃpÇÖ› ÷ò¨²á¤WÀ IÀ–À˜+Bìyæ7‚Ã]Æóœ¤U̯Zbf˜#KìW§‚K¼7 ªà·Ð €Ñ‰ûtTUÙ «N÷ˆNŒNôê"ê"ê"ê"ê"ê"êŠsŸŽáßç×]¡ãæ÷ŽÛ02CÀ-™{MUÑ̹D³Ïdõœ:»:Ìî§öå ®0 Å쇹Oôyΰì˜Í9®:HdIDATü,Ì”•عÄJdR˜)WÈBµêz\¢9yX­[¨Sua&¿©¢M\€Q+yœbL»ì7’ÞQ `ÞgÀ('Æ?5sìéž«s Î%à‰ ¨Š ¨Š ¨Š ¨Š ¨*ÎØú5½½‰·`éî^²uË‹µn…b~Çùéuk“mÀÔÓ³¢ÖMPFüût\»le‚í 1jÝep=  *2  ª$çqNн6wÍá×Uý[Ús#ïüJlQRô¬G‰=¨+ùûÖ›á.ïYçA9ÞçG«ðÛuÆØœQ»a$¸ê² ÿSö,éxáÔƒºÈ°¤ çèéyÊn8Íèô‹‘ ûº c×So‡­zkO€¨ŸT†¹®–êD]|?,ñî±+ôìâÄãÙ…Š]Cp=žýH‰¾ Ã9„UáðmEløžYõO……o^Rì}ñ²g ÅüÞÂ50¨¢Rý0ë/Ù~¦ÎÑiðüËñì69j^cp1¿’õ”÷°œ#¥IDAT»l¦vÃ?ÔZ£€ÖZK@ dæó›»€Ê©Ô<Îe…™1–,¨Ù¸Ds>õZ­0Ôxl½cŒ¢×Ã’9—h"÷|¾ž#鬱Ž~ÅpˆŸaáçž÷Ì-÷ӲŰã>U‘aU‘aU‘aU‘aU‘aUÕì^S€ŠšÑ9½ÖMˆàúe—_»leÔwÅɰ5½½1Þ¨œîî%[·¼èX¸g—ß²½÷¾Gâ½1f?ìéuk㽸žž~/íÜ¥U³%Uÿ\â—¾|¡é°IDATg‚혢vžzzþ±B-©É\{ðÇ&R€ú´øœù†aÔº£Hk[Ø;ž¯ZuOE[RçÓõÈ}q nÉŒ­_|ÎüDêq׿®9üº’mUÖXýWš[”T#=ëQbêªT?lñ9óøÑ#îÇï-ê«~Å̃‹½‘æϪ<_þvùµÓݰàVùNøÑ# n £©‰üJØ+ ^…õ8`9Â&ñŸlå~XVýŽí­Ðï'”<–ŠF¹Äæxê—Fî¿ü²GÃJðƒ‚gµ‰Hü`ü3Š× ëÇZ逩 ž¬è²&nTZb÷éX|Î|óŸc‰ã±Uwö«šIDATÌï„¡_œ¸k³?õkƒ»÷Ó€- xÕ]ƒ»µÖ&;êôÛ ÖÛÍÑî:C¶Í½ü~:~KÜ?8Ïjÿu´­lï9LÍž¯&xt¨-x=÷ª½@Ù¦úýû­ÚïÇPðŠÊþ¹·#Ù3³úg]æ?û«~%íO«&±~˜;x콞#ŒÊÖæ±Åú³ Ó+QB–³]ê?‰Ï¶œer/)ÛNëqÈÆ{îÀ5—ýQú­ÂÚ(ûNˆôs,»áßÜ«¹]~»Úýv÷ö†l[pÉÄ?ƒg0ÄîBYµ¹;döžYp/Íñjø7&®.Î%V⢋çr¿cºýãn[dÝ IDATUø£€}ŽNUÔëîòžõx”ã}pŽq´ ¿Qw`ŒÍ u±›F‚«.Û€ð?eÏ’~¾¨š-›·9bl8!ᛲµ™%rK|‚¶ ê"Ã’2œ£§ç)»á4c±ÿXŒÙ×åX»žz;lÕ[{Dý¤2ÌuÕ°$ªÌcõpËê·YkÕªº¸o}â'ÜcWèÙʼndz »†àz<û‘}†s«ÂáÛŠØð=³êŸ ß¼¤ØûâeÏ:Šù½…k`u¨&Qaï~¹»bžq_9 x<|•ê‡YÉö3uŽNƒç_Žg·ÉQCðƒ‹ù• ¨? ¼ße›0Ͱþ¡Ö:ôÀ£dIDAT´ÖZâyyÆÝfÏ¢„Û.¿OŽ”­ÙóUGN¸Ÿú5ÉQ&ün”Lî_×€=à¹$¸‘~•(‰ZI$Àúsá{{Žb5ì&jK—®¸íö•«W÷ö®Y{ã —Û_[ÓÛëy#ä5½½O¯[k¿_bø{MŸª¬„a¶6Æe¶Ä+¦€¡u«¢Tb„·˜{MUÑž]ÛZÛ:BÞ§Ã< ÷ô¬p¿eFçô=»¶)qÏ_s+Üs¯xÆÐÍŸ»sÁÂy\°àê«nª‹s‰Ä̹Ä÷¼ûô%ƒ?ÊÙ_UëCß0[òíñÖR=éX‹?¾Š6R‰=ÞÛŒ#j\"Œ £ð;ÞVIDATünôá‘aP_Fó|`QÅ̰žžªLq j ˜”q2¬»{Iâí$îÞûFÎàXOq2Œ™Ù þ]¿ìòò…Çõ0™Ü_·yø~@Ud@Ud@Ud@Ud@Ud@UdXµšu»:»:FÒæU*’aæa1öÁ±&‡Ô²+­Ÿ½Ù’DÚcÎÊZS›@ ÉÇÙ1Yµ*j³BM€ŠJ8Ã<Ì\h½äž²Úo‰_y{Íö—üžÚ—ØWa¯Ðj¤ã-îՅߊ0›ï¹ÆàÊUùUk• Øj{%!Ûií¥€: :âdØšÞ^÷Â… ¼Å~dtL”&„IDATûÂ,ŸÔñ|\O°€·ØŸ:Š•Í‰ð›ï.ã×øà½r“=÷a@;ËÖïùëÁº»—ĸoÌ~˜ûÖõÁëv(¯_ÚIðB”g×$)í Þü•Gm°U>üVÇÛ'Žw1­€¨bÏùÿ\bì»×ûõQÄçø®Êyª¨ý¼¨5;ÎàÕ-¦5P5 Kt\R µG’H‡¬B0»íŒº9ÃisE·º~Flm’—<2Âþªu•Åq´p—÷«Ê³dÀxØÛåwi*̺Â4Ò]Ƴæ{)žÄ+€J¨ÈüaC!ÜOË. Ž„¨5^¯ý SðÂa62ä Hê{tIDAThmÀ [¿bQWZvàҸO@U#9ÃÊö<êAuÚSo[ ‰ÉÙÈ0€ªÈ0€ªÈ0€ªÈ0€ª*òý0“ýÞ¯Áw †Šd˜™^O¯[ëXN’”|†­éí5ÓëK_¾ÓZxý²Ë%î­õG6&߀Ø*u.Ñ`æÓ=»¼Ôe碟¹1åà»Í? &ð~=ì³B*7 TAÂfv¬Ó4MD ÑֶŽ=»¶ÍèìÙ‹:•ÉðÄIÝ×C¡z†,Vö-e<ë´_ ~c@=›ãYÌo»ÊnQÈý²žO鄨ÓÁ-9Å}ëGŽêt脨d@Ud@Ud@Ud@Ud@Ud@Uuqßz >Íèœ^ë&„uý²Ë¯]¶²Ö­ª ‚$r«ÏJ»÷¾GjÝ 6È0TÛšÞÞZ7Á[w÷Ï›ËìÜ•Ì$®G†¡ž^·¶ÖMpêéYQë&ˆ¬‚fÿ¸mÎ+XêïâM™™ZÔ¡Šd˜™^îÏÚ$ AÉgØšÞ^3½Ì©œMxP” IDAT×/»\ü¯7$h$ÍPÌ,'JXÓÛˇ3 V*õý0{€™O®7tvuXÿâ­Î|£yÐwLö˜ÏÚb¬¢ì[’möpX»´Ö ©;kz{­æ’áÁ¯Ûq.@K¸fvÂfjmëØ³kÛŒÎGW,‘ÞF˜Ù “­?Þ*êW)ÔÔj2{]•øÞØŒÎéL¹DUãíŸý­#©µÐs‰„Ö¹DÇ9ø l¾êWÆ«%Þîn¿£6¿rðéÐà­ö¬9|“¢îR¿åXµ$ô¹¤n¹ÃfÕª{ÌÖIE«_e.±Î7ºøqÔ ’¼Ô>ÃìÇtëÀç!žKµÙŸLíÇ„cÜÌIDATè_ÏW=ß^¶Â€ö§e÷Cø-þ.õ¬vdǕ۠܉ÕݽÄ|°jÕ= ,°÷ÕÌ%bK>÷7w Ž%tÚSí3LBñ¥fÝ2ÇK~‡õš²öCÀ…¯<êÖÙ?vgáˆáÎ'±Å|Éž1Ö‰G3‡ìï à®ÜÜÎ0óóúe—»/‰íÙµ­µÍy1,¼ŠCVî>·V}‘𣿑4°³rÜù’•FÉ· •*2.±§g…ã.s Þt®¢#åa JB¨ÒN“Z­€d•™?ÌaËæmÃ,@R¢e˜›£ÐÙÕaƘ¹Üiö…Ö­2î%îµXïݲy›c]îš*÷\»£pÙvúm ß{íOýVáØoá7;gF‡hæ™%Ž—ìì áá¨Êñv÷Kö2îW*÷{K¼vÚßå¨Ês‹^Pƒçm>—8‘.í8ҢͩF副<0ª ÷\b‚â:FÃWÑÊà “ @=~?Œ±vn!÷ »À¨óz˜ˆlټ̓àà`C¸IDAT›à·Ðýªg€—üÚ¾rq]]³Úé®<`u޵”]iYajÞ«0²iK—®¸íö•«W÷ö®Y{㠗׺=µo8ƒ únþÜ λà‚W_uS]SÅ0{W€¤a"Óˆè€:Qc:ƒ ¨Š ¨Š ¨*˜Ž5½½•k"Òݽdë–CŽ6.ñéuk£·€PzzVD*ylý—¾|gÔ·F¡o¼Ô:nb: Y~ÇŽ—DJ‘VÁ÷Õ’Ngûû÷ }¥RQ×uÃÐ ÃÐõ’ˆ†aþW׋ãÆMliiÏç÷g›"ÕO†*¨1à«8IDATPèËåu]×õ’aft‰Ct]/íÝ»³¥¥½P蓈ƸD@ õÀŒ¡3sË\¢EšˆH>ßµrúa€ ²õÀ$–¹Ä*£išˆ ä£VN? PAº^2{]Ö’ Ö›²¡ƒŠÅbÔÊÉ0@¥™§ Ù°a½ˆlܸQlÃ:ÌBº®G­— TuÚPÓ43ÀL7n[€‰ˆaa€zbu¶Ö¯Ö\2{ölóÁ¦M›eh„b¼ÊÉ0@™eõÀ;l®¦i³fÍ2Ÿš16tU,r’‘a€Š2 C?ì°¹"rØas‡N]]"ÒÕÕ㢅±õ€ ¯IµîIDAT:U¨Ï™3ÇŒ+ëòXWW§9à>ö¹D2 PY†¡ÛOû9BËüêX¼šÉ0@™÷éÐ4Ãü"³5ÄÃêÙ"M‹Z9¨ ¶¶I{÷¾a˜ˆˆhÖØ 3ºt½ÔÚzˆˆärÑn–(d r¶m[ßÑqøØ±ãË–|þù§¦NÍÜ+€zÑÞ>yýú'÷íÛS*‹Å¯ë^Z*•nnn™3績¾7£ÖO†*¢/ߤkÙ‰SÞ:YDÓ4MÓÒ)MK¥Ò)Ñ´”yrQÓRÖiÆ]»KÙ¦h1Æ÷ê"ê"ê"ê"ê"ê"ê"ê"ê"ïŸÓ¿IDATê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"Ã\ ÷ÐIDATª"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ê"ÃçÇñ¶IDATª"ê"ê"êÊÔº€‘©©¡¯µµ%Ά,ß닺 2 P)ét¶¿_¡ÐW*u]7 Ý0 ]/‰ˆaæu½8nÜÄ––ö|~¶¹!Rýd ‚ …¾\®Q×u]/†aF—ˆ1D×õÒÞ½;[ZÚ …>‰˜a\TÐPÌ 03·Ì%úP¤‰ˆäóœKÔ[ì@b™K¬2š¦‰ÈÀ@>jåd ‚t½¤ëºc¡Ù!s,,‹Q+ç\" Ò cýúgÍ'Åâ€`7n’¡Á"⎺²È0@™§ ÍÛ°a}©TÔ4Í0 3ÀÌÿš ƒ =|EIDATÔ³›5wîáæÓ^xAD6mÚl>9³Ë6X122 PAÖˆÄÛk.1cLDfÎì²JÙþ¨(Ã:IhŘˆtuuZ_‹]5¨ +¨ÌsæÌ‘Y³fšãéÍ÷±Ï%2¶PY†¡Û»L³fͲ÷½†Ó#ÃdÞ§CÓŒ¡Ž×àm­˜­¦E­œ TP[Û¤½{ß0LDD4kì†]º^jm=DDr¹h7K2 P9Û¶­ïè8|ìØñeK>ÿüSS§Î)EªŸ TJ{ûäõëŸÜ·oO©T,¼®{i©Tº¹¹eΜãúúÞŒZä ÛùÆ$ÍÒVIDATKQßÒ—oŠú@]ijˆ|Sù={t‘}MÓš§•-üÚ«{D¤½-Ú*"gX븉á'å‘;^jhŒPP‡"ÍÈ,";vDîðÄ9Ã&åŸy9šÇ%Üj@uÅ8ø‹4VºUq®‡ùMÊ)¶ï²ÙçåljN´É€Zˆzð×ê3ü&å46lXoÞDÄ=/§mH%@UîƒÿúõÏÎ{øP'Ìyðolh¯t“âd˜{RÎ Ö‹ÈsÏm˜5k–UÌš—“ €Àqð7ü6¬Ÿ={¶ç¤Ì‘¿îY¼ ;hRNs3DdÖ¬Yžór¦Sd(ÏqðŸ;÷póøÿ /Ìš&ÍtIDAT5ÓQ8ƤÌ1Äþ~Øà P[€Í´šó›™Ëu]×RÜYF†Áã¼ùdÖ¬Y7n‘7ÍœÙå8øW¡51ûafPY6{öls¹ùÔÞ©4 =M„€ú¬ƒ¿y¶°XÐ4möìÙÖ´–¶ùÀâLÊCÌëaÖ„fÏ=·A;’³4-%Cí¶Ý‡Ø0—”füͧ©TÚ0ôçŸÞ|j˜ýà_…&Å;—h†n&“c7nœ5k¦Õy´'0C:`D8pð{€uuuZ£«Ù 8=$Ï ÍDdãÆM‰Ìi¨CŽƒ¿`IMhCÌ1î Í6nÜxð™Ðsšq.FûÖ†âIDATÁß¼–à„–1Äÿ޳cB³™3»üæ4ãûa0¸þ3gv ö˜Ð2†80¡™$1§ ÕáÁ?r†…ŸÐLÌiP[Œƒÿ›{+~R1r†…˜ÐLsš½úÚ®á7PC1þUhU´ ëéY¡ßœ:eªÈÔ0å‹…ÝÙ´d›ª±%€ÊÑ‹õàuBË"dXw÷’ʵ€¨"dØÖ-/V®DÅ7·ª"ê"ê"ê"ê"ên†uvu$ÒµÔÕV×Uc š"gXgW‡õ¯ ª¦ÚnÂØ–‘´-í^S][6o«PS4Iô¤IDATªo$m ŒB2Ì/À¬ÏàÖ«1–¸ ÔïXn¯dËæmV;Ý«°¯=RI¿Mð|¼îІോà}kê×ûòxÛÂçUsg;¿`¹DÊ…A¤—Ü<ßh¦dÔƒ²ga–„ÜÇ’€¦´Ä]¿çò¨ÛU“@†Åã>Ô” _m@Öá8^/Á3A*Œz‰È]>äþ©‚¨k'ÏTGm2Ì~J*øS|@‡#äZánpâk._ÛT “Ô§ã­Ë$I ¾º– Ç•žØGd÷ÃT8üÙpjKVȵ3L@uDë‡9bÌóØm/cõ±‚G¸ ø­Ñ!`$H@ÜTÉòIDAT‘\vE!ë (³eó¶àòaZèW8ü~Hj[b¬âÑ–.]qÛí+W¯îí]³öÆ.¯u{"¨‡ÁoõÐUnþÜ λà‚W_u÷š¨Já «‡P=´F-…3 0Ê‘aU‘aU‘aUEø~ØšÞÞʵéî^²uË‹! GûŽóÓëÖFo¡ôô¬ˆT>òý¿ôå;£¾0 íÙíÛG==ÿu5»o=`Äkm {÷ÔU«î‰Q?¨ ð·b`\"@Ud@Ud@Ud@UŒéTƒç̽Üýƒ~ <'©fëMfIDATd Jì¡•Èü‹d zÌèJja2 PUI˜au‘aU‘aUñý0@¥Ä»}xd "bÌU´ ëéYuN3ÀèuRæ"dXw÷’ʵ€¨"dXEç1 *Æ%TE†TE†TE†TE†TE†TE†TE†TE†TE†TE†TE†TE†TE†TE†TE†TE†TE†TE†TE†T•©u`X:»:jÝ„ŠÛ²y›ýéŒÎéµjIu\¿ìòk—­ S’  <Ã0jÝ„J¹~Ùål,pÈIDAT·|å.÷ò=»¶¹Ž ÷Þ÷HøÂd€‘`DÓƒæ;wiUkIÝ"ÃŒÓG!ÆtTE†TE†Såa¢\€2¬ã²5ƽ³«Ãó±Zìy£è&a$8®”0E[nG†€/Ç~Ëæm#¦æÙrGÓ³£æW¦&»‚ €8Ô °îxv,qluÍ  Š1"£¶÷ú"à w§DuŽNUÈwÕv0¶|™Ae=õ¼‡º½1GŒmÙ¼-L°9öFðΩ2 ÊðŒ®€WU¼]â³™e<ë¬(Î%TE†ša°IDATTE†TE†TŘ#A¤ ì1ba”wý²ËkÝ„j#³MdåÝò•»jÝ„ª…™í‡  6u¿žÛµËVÖº õ‚1U‘aU‘aU‘aU‘aU‘aU‘aU‘aU‘aU‘aUt¯©›?wg­Ú@T2lÁÂy5lQ fØ,¨m;ˆJ[ºtE­Û@ÿ‰Žì¸n^¨·IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/copy-folder-selection.png000066400000000000000000000273141203611042400333700ustar00rootroot00000000000000‰PNG  IHDR^»Àj| pHYsÄÄ•+tIMEÕ Á]{»tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝ{œÔä½?ðoæ¶» Ü亀¢°ç´´=ç .,u­JÁ"^ÀKa­hápT*ú“Ó¸U±GÛ—UÑâª+ÒWáàQ)œV—›–öУžÕr]Àº²\v'“™$¿?2²É“Lf&3™d>ï׾֙̓'Ϭä›ï}{|õÕ©CÍÇOœ@²àUŽòÆŠL×Úwý핽ûŸ>-œ>-ÄxHîÓ·…”—ÛÚÚ¢ÑxyyÄáÁ@AiùbÈ+¦Ï¾Z®ìГºIɳ‘þA€£“:ÔÂ8¶ªaÅ—?˜Ý¯g_"ŠFãmmÉü DD‘²ÈÉ<ÎJx×y¯6Lþþèö“ÒïR.—…’9.,ʺ‘v!|Š—rœç¹DŒˆÔÝ?–ˆiBC0(·Ô• ÷ò žŽÑÿ~þu‹ Ʊ¬Bîr^¨wŸŠNÃ…zË^,&ɉ„,¶EqZýωè7 \"!I§>¸eÉSDôúÜ»D>&Ä%N”ˆBf›é-EúôèF‘ðÁcm»¾8u<& ‚„¯NÅ÷4Çzô ѳOŸsòùN ¢ €¸x4±áà"ºjP¿_ϼ=‘j ºŠ"ïìIDATmù å¥/z$Q’e’Dfo!"â8"¢@€#â”™Šò˜Ü£¬,|NY¬¼<Þ/ïŽ qAø˜ÀÇ„h4¶çó“gÎDÇOÒµk9qÄÉ$+«ÊtóÍWé¶±ú?7˜½™uëÞØµëÿ,xØær›>ü°iÛ¶¦ÿÙñÑ]³ï›8ñ»-sÜbõk¯ÑM7þÀf{F†)øX›Ž,ÇqD²,sDÄqrò¯&Æ%Š%H &£Á†ƒG®Ô¯ñÆ”§u¯ý—ˆHHÄ‚"‰A¢¸DD`€d"Ž$QRBˆˆpÁP#Rf1»Ÿ”%)ñå×ü™Èóñh{,&±˜å…(Ϭƒ_QIDATG£±v>¶sçÉó{w3v(‘dŽHNýŸÝðö&í»9%°¯•Xñë"êÖ©\×Àl¹ï¾óú«¯.[µâ­D\x¾áéòHhÌx}´ÊqC;vüáÏ;¶ß9ûå)”];•Ÿ¶× þõ[BäL‹“INÓÕ“”ˆÇ99D!ŽÄÀ‘ûîé÷ÔÓ¤F‡©ÓêÖ¼®Æ…#÷ÝCD"'‹1YN$ˆ( ’L2'“,8Ž’YC€ÊËËd".µ™0ÅC"Q∣P8pÎ¹á ‡õŠÇã1Aù!âÁ`0 ’mHN8)ªIT¡€õ{5kvE£W_]FD=ºuËòO>â8tu›²IDAT™ˆ7Éš²ÛÐÏÿ ýø_ïWÞãm·Ö•‚ö;Á¿} ˆ›i¥þýpD²z8'"Eâ² ‰èð¼yýŸ}–RÑA ‡çÍ;Û—$‘(Q*3 p(Ȉ’YC  eJå%$(ðf I/I’$K’Ë*ÄpD* I’D’¤(”åPèìôG²¬ù? u8ºyóûO>QOD X\S3Q÷n•Æo½õÚË/=wõ5S´Ë™+~oÒ8eÉ_þòñœ9óµ]]}Í”õï­mÚòþeã&ÊDÊiœ`€ÝOÚ }ú韷nmZÿÞÚ«¯™2eÊ ýú P6MDWM÷λ›Ô§4x‚ñIDATï¼»Él+ß›4nÞ¿-øãö·oßvÇçN˜PÛµkw„krÇÓ’ã’‘ã¢fñà¼9ƒž}žˆÔ¸ppÞmoœœˆK2…BAŽ”ë ¸@ @Jhrìx¸“)~éÑ¿o<;ÍÇùX¬E£B”çÛ£±vžoÆ¢<å…H$0m쬳Rhþ·^59¹Ã¼·~ýñÛž|¢þWK——…BuwßznE纴Z»Å`0´iÓï^~é¹_þbÙð‹†¯o­²|ëÖ¦'Ÿ¨ÿå/^èÒ¹sÝÝ·†8nìø+Õµ†ô4üÂK"ƒgÇ?uêôÖ––ÇŸ¬Ÿ´ó“)Soîµ Q IDAT×omÚô;‹~Ì6ôÉ';þ}á}õ?qïœûûÛ·O¶´TüÞúm×\]Mʇ&‰Ô§‰>úßífoóÙgž\ý›w¿mÖ Aâ¦N»Y²øÿ_ÊSYâ8¢ÔÔÉÉ}Oý›I ™ã:üµùÂUƒú5Lš¬}UJ$“é?q2Tç¸  ‡dâ8åmŽDQþCŸ Îé-u–dI’DQEQ”$1!ªO%I’$)\æd%nw¶øƒf®!žu.߸á]"2pp°¢ŒˆÖÿvíeÕc9Íþ\ mÙü{"~Ñð`ÅÙ‹2S /Q65ý÷åk¹T>2dðÐ`EG ôñ ‰IDATœJC^¸°þÝwÞ|ᥥï¾÷Và ¿zá0ë~Ì6ôá¶&"ºôÛ£‚‘ФïO“"qœvØ¡ÎåÚs<Öo³Û¹]BÎ#¢†—–ÞpÃŒpט±Èˆ –Ή“‘Kîñ8…ÃaQ$™$.@Dw¯G ”úd±ìêïQ@–ˆ£„L‰xœˆ"‘`rF“H‰ ©aNû¡EŒpc[OìØ÷õ´¶óB4Ê·Gùv>ÖE£<‹ñ±8~t×øH¨RݰÜ1¬èÖY}üᇛ•‘²}´}‰b¸üì•ápPÓ&¬[QÍA>Ú¾$)>;”uºvïzËm3Ïï²tö§IDAT}þ#-z¥qÙã?{*m?Ìï¼³&¹e¨†Y·{§›‘äh¥XGÄ’Ÿ#b„Xbô¨!—O¬ GBÉ€ ËGÚà ŸÝiÇŽ¿eK“ºpô¨j1.jDÂ!]íŠÚóÆÍþˆ×NšüÈc‹>Ú¾Miûa6`IK·ÜÎÛT—E50Șm°ÄÉr2?çˆK]2 üÑ$‰“$I–eŽãæýþ·jDêѪIDAT\ø¼îå÷°Æ—)ž½ü»²,‹bò€‰åä$GR‚RYŽho¬’#½ÃrTìNTBÜÿ|v¸=ÊGùX”ø˜‹%.»lHÝm5•ƒÎS?ô(ÃÖ†0íÁÚ´·liÚ·o§åDtuí÷Ê*"‘²ð¸q6mú@i|Í5“¶liÚýÙ®šþ5ꊷÞzû–-Múç>z76¾8uê cÇŽÓþ¥´[Qlذ~ïÞ=sæÌûú믉衋㱸Y?ê˜ Ô…W^Sûæ›oôêÕK·–nëfo“9ÚH—“B:ìe©+d"âRˆ#™‚‹ÿð¾vÏü¡zÀÞ=óÁÔHHIDAT‡Ã—¿DD™6lpý¥D19Ûú×ÈÉqA$õº†²²æD©LÄ• ;¯½{U„.ïRþ­Kú¬Xû§Q>¤‹ÿ±ÿر×^YÕ·O÷Ô”qO\•• 7W\qå’ÇžøÑ=uDôô/Ÿ¿dHÕ¹ÝÎ)+‹<ðÀC‰¸¸û³]ý‡^1yò”cGÞ»àG7L»I]q̘±/üêååË?Ú¾í†i7Uö"‹Ry§ræVR«Œ9vôè·¿]5aÂåK—.»hàð½»÷ÊîGÀ•×\al lý·ß~ð'÷ÝtÓô1£g+kÝsÏüM›>¸jò¸;ÿ¦Ý´ÙÛd޶ r¢•«IDAT¡ IƒµŽç+; JÈ$Krý¨äásçm3ukï¼mfÕ¯—Qý¨q ISë–E©+81.RÊåu]ºuS6“¼Â*uÓ0„Ô5*õܪæÜçÞÝÍD4tø ݰΜj;vä+"º`ÀùΩPÆ…xËñÖn=»”W”Që×§ZŽèÒýÜS'N«DÛø“'N·nïÒýÜçuUnÝ»û s+D$Šâé“m-ÇNt>·S—nç¨Ûbö£³A´?sºýÔ‰ÓÚ…BL8´ïïê´ƒa¾Mmƒä㌑¦!mPÃçÙù½ßMžvqe_)\P;/Ï&É$‹ I’µ¢§éIDATáðg¾¸âíÿRwöS­'Ÿx²‘›={Ñÿ{ðŽž½z¥ÿÉ-rrªªlj+JT8,8JžR•9Ž“eÍ9VD~ÈBƒõ8¬¤êÊîÆqòº«®ëAo"ªH°­„TŠÇ£R€ˆÿýØ5¿}‹Rú¯¿lùÙ¼"¢@‘pÇs"jn Ì‚*éÇiÔz w‡ÿ™É¹°€ûð¯Çšz‰´öEå?G }Îĉ£„Í‹f8e-"*KžO‰¸@Hk‡ƒÊSg)H $§æ8õ—š&%âä9E2~à¿ÿü­à¯cEMÏ•gœr„–©}î‚NÏ=yôxãc7çIDATÆWÙ&Äís„Â!e§—9:{E—n=B(ñàe×Õ~ë-ZÐé¹'Õ%\ê\$Y¬Ûç.¸®ö[ÚÐ¥[ª6dY$|äðá¼ á»ãFиW²X‘Å´ g¯óI-åò×Ï;28ðºjmhØó·Ï÷ïÿÒÕñ€û>¯ú² %4„¡nÝ{øóî…ÝéöÀÀ5Kñ[ß ‡ˆ(ãB)P €¡€¡€¡€¡€¡€¡€¡€¡€Áôk¦™*P؈ ÒzIDAT(Çmk{s¤CpJ¡¡rðg÷^¥7Ç»€ÜÙ f;°zäW÷sõ%ãžo' è:WdöB‡¹Ûgìt…—÷iÈû)‰vuÁ `°Ôƒ”u‘2xHs ºèp`ÿ!íínIv›@(pQfÓÆÝÕÎë”A÷"@1À\08˜Ç|$žƒ¬€¡€¡€¡€¡€¡€¡€¡€¡€¡€¡€ÁîW &iàIDATÔüþý÷ó:(€ººÛ8l§eß^õ—O·d;pßÃ/²ß8³/¶»çÞÅЇl¿)怡€ÁЀ“þã@h¸|âD§¢Cs󾿿}ÅÖ@ r&k¸|âDõqÖý47ï»tô¨ÜÇ£ºtô(D€ì89נĈ좃ãqAèÌ®k`RR5wP¢ƒšGØÑܼï_Fý“$‰DÔÚ²ßØ`àÀ!i{Ð-imÙO4Šˆ.=êmOÛh9¨ãg Ê0:47ïûÎwFЉDrÝÚïÛìØñ±Å¾m’qœ]‚è)BƒÔ—Oœh3þIDAT:47ïûæ7G$BŽcˆ 1ëßùÎHëøZ9…%óÝc둈爈žÉ½PåŒ“ŽÆ9Hë¸0pà»ö\ÊÓ·nêÝïbcëöî×OC;òÙ?ÿKrº¡ùH+â@Fr Úp ý(a|Õ‚²oWèID½û]œÅnl5I‰¸9‡ï¡È.q ¢‡8Ô¢œ¿tâ@vŠèöª‡4iu°CÄ€¬99×@9ßjåàžŒ ‹"Ê x¸†Š²`@h†Ì>P ÛLËçIDATªìŸ§q¨†ßñ«Ý/ÿ(ß[(A§ZÙoŒ¬>yiǧkª¿1uIái:4|òÆÂo^¿Dóô¡o^ÿxÁ¶Îqœò@–3ø®f?Ƙ m®›E?9nÅf'ʃܻÏÉ>4¼±ºÁì¥ëoš­[òüOŸ ""ùλ/Š%ÑηŸj‹¶žªˆÄžÿéÌYôàu‹_{«þƬcŸú¯Ü‘'ŠaxÊÔ%%§¬ÁÈ$dœB‰ó«ÎL–f—SEäKÃÆ}v¸%—‘øëqJœ3(Òâxtþç/%¡Ò¬Á#3' ¿ãWDôàÍÕf›Pèe¸5 ŠIDATêSY–ÕaØÌ„•fꊺN´Ýª«è:ÔnQ»–ÚØØsxÌ%f›¶þSX Æ©¿”‚ÂÍ5œlp’ýÚ¿™6ö–ic/1[WzÌö7æ^jñ¯Ü¬O‹–i;·óAÀ¸ÿÛß´?…Ù`œú»A)È54¨Çõ¬<}cuÃõ7ÍÖþ>͇I8ED3—”q2qê÷öÊD×(ËÄÉq2½òb]¦#Ñí¹¬n‡ÅΓïýʸÃçÒ›ƒ]ŸäŒ…2 ¡ý}&^Fñ/‰hù‚Ó×?rÁ½Ei9y@‚Ïݹz­ò´ªzÄÔçèȨòÊìh¯ÍÌó1 cÿn™¨ ÷¢‘ÄJÉIDATMSü ÕÖWýðáëø3qâ”ÄÛ¹zí°YMáϧPóÉ«v­ùõ­Nm4¯p‹Ïºi‚peÛ Aæˆ#å#E™þµ3dº§ÖÓö©k“Ñ^mìD·i³}ج sòBûRÚuµ{u>þnP"r —6ÅâÁ‘¹cnõ™V8Y™` Y¶ˆµÛš¶Oû½sxëS6Çf±‰´«[¿Ù|üÝ d˜5Xøä½)ïz÷ù§?Ò-ŸwumÖcÈBþfü³’¥Ì™Ê9ˆ´Ívo˜ÄX*;ð56å)"äu:£¬7̸IDAT« +ðgBC¦„NUõˆõã•ǵÓG80 ÈMA³6.B£›jG;2p†3õr̠ظ5 ^@ñ+ô\ƒ[õp @FŠ¢^CǶܜEèV×EÃNoÅR¯A±dy$t|›qu³;5 Oœ™†L{mÌÎo9ð'NZÿ´øÓη¿EíoÝrU¦C*–z Ú6¶9UaŒŠ§^É2qš9»Ñf½+,€ŽûõŒ–ÿûÊGe6TD›Š¢^ƒ¦•üÒâ·6¾æX½D›Š ^ƒòQ‚#"zñ‰¾yS[ϴ¢€µ"¨×*«ßoOIDATùòÒm¯»Þ¢cQ;O™ì 4¹_¯Aµ{Ô¬Î*‚z P|pç%082št°¦|‡¸ Y0 ^0ø¤^ƒS_ õ×XÚiæÈõÖà‹$À)EQ¯a΢¯[üÚ[õ7ÚߺqñÊ=TyžÒ­îkl²V,õ>;ܒѦ‹yç·æ¹‚÷Pš tÅÎÿñü¥$Tš5xdæåÜă7W_5ÞXm'¯V›WQ—¨«èz3ûjyµ±ÙÒëzc.1Û´õwØYŒ WƒãŠ£^ÿ™6ö–ic/qj[ÚÄ©²vö½ŒvWëÆ(3îr¬^ƒ"µk<ÙIDAT‡z šÛ)lÕk°ÉÁ²ùÞEÑ!Û°æL½#ûõ–ß\ÉêÀ±Ð)³£½6ÉÏG€0öL\äÌ%Ov$ë5ÄÏÔþdÐMÝÈŸ‰óm ¾-Î bPî”{®Þ´VyÀÇÅ‚ŠÉâ.ï|ï®Ìþ‘>@á.4$ë5,9ýžkÚNgN m­±¶B{,±rs£Úl忯6>¡[WÙW™e`ÔÆŽt¢ýÀ¯]ÂìÍN³Æë§3z/Yp¿^Ã>1£¦N‰+77Ψ©kçãÆÕ­ 4˜5ᬃÅ) ›C²ØDÚÕm¾G;2å~½.W"‚ú{äÐq̬åoÀë¨DIDATCD€S wò’Lê5 é#Ψ9;é8£¦Ž2žkðÜuDYôlg•Œà ‚†¦„(nß³›ˆ†öíöX ÉåÐðÆê†æ/ywÇF…;CÁ„BÅÉåÐà`y(pË(ìg [>J}<æþíù$¹?×`':¬™wÑÔgÿföÔ)fw4áî&(Aȶ.uíOî{oåyžç[[«®˜´uÉ(m›1 ó˜G .@ ò@Ö£•$¢ò>TžZX9þfµÁÖçæØÜœ‚ºWµåÔ~Œ,úð"d $ñG-^oþük;Û²SÁx]³–E…%"à£ø‹q­ôIDATFQd Ö¿y"â[ÕUÖ=ó”®“®=»®ùñHåñÔ_|l±¹D@t(ЬÁúwìtL ë^¹öß~¤<.8‹Ïݹz­ò´ªzÄš×[õÐ(@A„|×t(\×À 1"žˆ_×ðʵ³§ßšü!Ú¹zí°YMUÕ]«ÐÆU»˜)ƒY*‹69BP(ЬÁš’5¬[±þÚÛ¿O|öWUë&µ3‹º%²,k›uh¬ø‚9Hð d 'O'Ö­XííW+¹ƒæÇm}…ö%æÝc‹J]Æ<ÊYýo|ñÊ]—¬|þMÝòYËêó3¨ M¿*Š3i›Ízo94{IDATᯌ¥²àü€2„ˆ~å¬ÁBUõˆõã•ǵÓG80 "×CCF_±­ÇEhtS-ê¿äê5ƒÎP@áyf®Á‘z ¸ŠÀ&BƒE¦`) S¯Tîd Ì`2\¯×P‚\þ@a'Ãϱ^óª$³J Ôñ)³§fÝø†ûßC‘^õÌBEåãZÆÊ˜³ßs-4¨G]Ý]Ly­×`ܺv‰ut°nà3®…5Q×í`öë5è´¶¶n[±ÊΦՙtuÒVv@]ð=| HÕk u «’õ ZyÚ¶b•Í”ÁŒ±¤u²Àlà.‡;‡Ü´õ€Ðú÷IDATZ©Ü,.‹2k—¶žt4v‚9Hð=wBCFAv¬× ×Jݬó³: fmŒOí4ðBC¦÷M˜ÕkP±oÙ€xãÎKìü†;/€w^²`@Ö >¯×Ýå̸ äê5`·°õ€Á÷P8^¯A½-Jûî•Ðò@hÈ¥^J3ëÒiõ%|ÜP¸_¯AQàz `Íåz Föë5LŸþ˜qõ©ù+@éqùº;Rõøu ¯$ë5ð­Ä·ò‚”{åž«7­UðqÑíÁø„BC²^Cêd½†ÔO{,±rs£Úl忯6>‘¶7eÆ%'$#IDATX¬y¸^Ã>1£¦N‰+77Ψ©kçãºu­‹5˜=ÀL$€‡ë5´ÇâJDP:ιa”4×kx¤Oç5uêÓ5u¼€¹gxæ £„(nß³›ˆ†öí܈€ÈõÐ`3k`®Øü%£T$8«õPè ¯¼Z¯…òÊ«s ù.ô`­`·Zàžp‹Ï³†5ó.sÿvõgͼ‹²Û@©ñsÖ€BYóðŠ´+æ©Ðƒ¶ñŽo³¯Àcöcö5y¸Ž\çç¬ÁÙBÆï×¶³–u?ÄŠ/67WÞάçXè!ín©îÆ9îÌØÿ¡y;k°þmVè¡là÷MÙIIDAT,:»”oŸ¡HÛŒYèd!‹-”?g ªªGl¬¯<®>"—®|ÉçY¡ÑMµ&õ_ÞY×”e·ù÷½kÇ»=(¨× ~>CYóÖ°õç£ÔŸì¶5yÒ„¬_uv[ãó¬!¯õ°ƒùù E¾ë5ÆóhœIDAT¼ýîY¯ Päüœ5$ë5”,ïsi·Êñ}F^W9þæžûŒú#«/›÷!dÍÛYƒµ\ê5wN§vWm?Á¹¸ËÛs Öm:ÖkȘq·Ô-Q3å©qOÖ>5{l¿@!ù9k@½€¬ù9k ÂÖkÀAüÄÏYƒÔk°æó¬Í²^j"ë)DžùIDAT'/Q¯ 8ùùºÈšÿç´eÆÜŸÁ}–Ê—A Ü;”&Ÿg Y×kP¾“ qJ–Ÿ³†|×kð1?Ÿ¡HÖk *ïCå©…•ãoVl}nŽÅêںŽßO‰äüÇÏYC.õÈä;é”Ù}#6€‡x;k(X½ìÿPj¼5dW¯aúôÇŒN5ßr(A~>CaV¯Ä Ü3(÷\½i­ò€‹Ù À¯ü|5d²^Cêd½†ÔO{,±rs£Úl忯6Þª~¬2¹ 0[à3~Î:Ök8ûs†Ǫ©S¢ÃÊÍ3jêÚù¸n]ÝIYC·$»ñ9oÏ5X3×>cIDAT«×Ћ+Aý=rè¸ì†àWÞ>C‘¶³^Ã#}:Ϩ©SŸÎ¨©ã…ìç8€/ù9k0“Åí{vÑо&7f”0_5vhÖÒ8T|Ö€ìø9k0«×0kY½MÏæ.}䃷ÏP¤mƬ×@²`gùØ{À+üœ5X¨ª±±~¼ò¸vúˆ\ºð%Ÿg l\„F7Õ¢Œ €9Ôk?Ÿ¡€¬ù®¡Äë5dÇçYCÖõpÉ”8?g ¹ÔkÀYF(q~>C‘K½]Í3¥ø>IDATãuÐÖ%´÷MY¯Pœüœ5äR¯A¥+”`¬Ô`§ƒ± @‘óvÖPàz Zv&#ŒmÀ+¼5dW¯aúôÇŒNÍdë6‹)oˆ"“ê ÅÆÏg(Ìê5ð‚”{åž«7­Uðñì¿óÒfH€bæç«!“õV%ë5¤~Úc‰•›Õf+77¶ñ‰Œ¶®L(ì,QóíS€bæç¬Á¬^Ã>1£¦N‰+77Ψ©kçãºuusÌ6‹/X4(ZÞžk°fV¯¡=W"‚ú{äÐqÙ C '&ÁO¼}†"m3f½†GútžQS§>QSÇ Ì5 "€Ÿø9k0“qHNMIDATÅí{vÑо¸1€ÍÏs fš¿ä?Y÷àK~>CY+ŬÒòÿ\Cžê5à¢Fð7Ÿg Y×k°¦\¶„¸>æç¬!—z %ÎÏ×58R¯ÁºòóUëu™÷S˜µAbnñsÖc½c2¯×`¶ŠuuwU0W(0og y­× Û]-c|Õþº6;(0og «×`}èÎåU§Vp–ŸÏPä£^C¦éƒýWZÀ~¾Ò©z ÆÊ N½jlcs€|ósÖ{½íS]åG^5+å€Êà:oÏ5X+p½?ñöŠ´Í Y¯ÀOüœ5˜A½€´ü<×`äñIDATõÒòó ÈZ)f –ÿçòW¯Áúä"®JOóyÖ§z öárFð(?g ÅP¯‰x”Ÿ¯kÈ¥^u,š`vçµÚÀ¸Š¶1j4€çø9kÈ¥^ƒ™ë² 5F(6Þžk°þ¬×úY÷Äb姬÷ågÖòý›È÷4®Ý·é¸ËÛYCvõ†^q·±Ã½¿[¦}ªMòóq 7öLŠŠWçìHÕk u «’õRö¾·DÛrÔ-O0{ÐM8ŽÙ?>P@1ðjÖ`G²^ÊõÉz q‰P}òøðÖ§^ÐG·®nRÐl6kcÜ·­'­×(<¯Î5CÁIDATØaV¯ˆbbòïÙ´”•ý/Эk¬˜ kŸ×Ò}LH[‘5 ¨ø9k0«×@4žOˆè/ï?á¸9ùýsƒúéC@‰óó\™ÔkxôŠ»ùDpÇÆe±„¼ã¿—ýÃåw/}üÁüð<ÈÏYƒÕvïþé€ zîßw`¿ –>þ`ýϦÕ>íÊHŠ“Ï³&ÝyJ"B\Ðñj½È+?Ÿ¡€¬yf®!Oe€É…Ð`‘)˜EŠ5ó.šúìßÌžZÀ•…Ùq'k`†³‘KÙÄ€ì¸üÂÎQ=—² fµÌžRÇ»§uKJ‡Ë¡Á–Ê.(ìGȨßÚ«KIDATø€ï¹Ôc²îÆgåJíïdÙ…”uÏ<¥ëªkÏ®k~ŠŸ²†\ê5X`^õ”Ñ-UvnÐD8ò@ÖK½ÒìÀÌ#¹5m¹‡´;9nå?ñ@Ö{½¦ÂÜ%Á,PüŠ"k°þ{½æñ<»Õ: 7„pUYƒõoWê5P* hKÎàëj¡txຆT½~]Ã+Éz ÊOª^CUuת´qÕ.‹OÙíÒ̯ÃN» J<€EÖ`-÷z L¹Ï¨iR ðd ë5hÒ3î´j9fF`1MÀìJ]]·"Š>€×y k@½€Â+Š3i›¡^@y k°€|:©+IDATz y⬠õòõ€Ág( ð<3×€z …äBh°ÈÌ"EÖõ ;îd Ì`2òT¯,¸üÂÎUÆ9ÖkÐÕbÒÞ‰o¯0ã¯ÃÍ¥^ƒ1ôdT d¹´7;“æ¸íx½PÈ‚k¡ÁìÐíl½íû<ð"U¯Ö5¬JÖkHQê5„?ŸBÍ'7®Ú5õ™ãÌPC S.‡;Gò\ê5XL4jã wBCFAv¬×ëš ˆf\ ™Þ7z …ç¹B½€‚óFh0ƒz yâåЀz y“AhxøáE§ZåoÖIDAT(P<솆ººÛó:(*vCÃÁ‡ó:(*.Wy€â„Ð  À€Ð  À€Ð  À€Ð  À€Ð  À€Ð  À€Ð  À€Ð  À€Ð  À€Ð  À€Ð  À€Ð  À€Ð  À€Ð  À€Ð  À€Ð  À€Ð  À€Ð  À€Ð  Àr{P¼*p{yw`ÿ!íÓA•ýÝIaÌ¿÷Î{î]l§%BX‘eÙí!äËü{ï|êI¯Í¥IDATé—ŒËOµ2.ô‡××|`¿1B¤áË]Åz'9ÑÊl$E ¡ÒîR‚0  À€Ðà >a„¹p“úÏ]=‰X9xó±·hwc¾„puðt\ðèȵÀºýçÀþC¾É˜#×åG̴¬+ „(:Þ ŒQO·D÷®]” …Å$¢»ª#4@Ñ1B½N—Ø\ËÝ¿N^‚;”ý_}Êœzpc\¹ÊÇÈ]ùS k×h÷"ãÒ»¹ƒ.:ØÈN¼Ðý5¬ÿ8€ÐnbF‹W½Âú}‘ÉÛ´hÃì3¯ð€¡€ø°f“IDATÓFFUÃÀ7ÀÊü{ït{…†P¨@h+̪>V‚¡Ð B˜òîeY³Yˆ½`€¡€¡€¡€¡€¡Ã…ÒKÑ­q@Q9&^>ÖÅq@QI††ë¯Ÿèî8 ¨p³g/r{ Ptþ?õ&U£uIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/create-patch.png000066400000000000000000000366251203611042400315270ustar00rootroot00000000000000‰PNG  IHDRý1®Y¯ pHYsÄÄ•+tIMEÕ 8%)öñtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝyœu½ïÿÏ·ª»§g23™l$d1 ‚€¸ãQ¼ÀYä ¨q ^ár‰xУçœôº½?—ŸÎq99Š?×esÁß!ˆ(‚"‚ ILBBÈ2™¥÷ªïý£fjjª«kª{¾Ý3Óóz>ò€îêªo}«»§Þýý~kQZk xï{¯ûÒ—® >U~®x‰rÌê•==½ ,œ‚ªf”ƒ <µ}§Òe$WÞûÞk_ü¢ž¶æä“NzŽˆØ¶=…ÌŽãˆÈcýõ÷<ø»G~ïE‹ÒZ{¡²ö¬WwìÒÜp¾T*ç\.?ÕL_]]¥idIDATs:íL&Ý5§ó‰'ŸÞöŸ÷{Ñ’‘Õ«Wx¡²oï ¥Ri``xª+ ˜îz{çd2™… ²Ç»T䕃ý"¢.»lóÚW¿úô3^tàÀàþý‡‡‡†óùòTW03tv¦çtÏ9ê¨y öüüîG¶ÝuWJD–,àÀÀ®¿î?|˜f Ì:;žÙ}ÌM7Ö»ÔSo\¿jñòÁÁÒà`©X(‰è%Kç‹HÊ{yxx8Ÿ/g³ÕLo{>}ÌM7¾å²óôªÅ• d®ˆ;r ° ?°”‘Ô®ƒjÇ3ßúòϾó²e –ŠH>_i™¤D$Ó‘9r¸À1`0Û—úIDAT -úú—/xý«rG ò»N±”dûO{Eä‚׿êÖ¯Ù¾æcÞÄ#ýåÞyYñÛ+ÅJÑJ«æÔ0­9¹‚.ét6›ÞÓ_îÍêŽtÅ­TÚÑ¡™\)=Pp+º\(¨JQDüì(VŠ"\±mZRªWR Ü´[t‡JòÛÇ(:•r¥£Sz¦–,ÉvÎI·p«ÍR,ººRÑNÎvœ‹¯û_"òͼ_ÛªRq]¥üoûÄçDä{W¼×)KeW9®DÅGªÖjŽr3KæõI&µó™á?<=ðLÁ-•*ÅRéÙ#åüÎ₅響`ñ’9ÍÜR@+8¥ŠXº\Rå|压œÀùIDAT{D䜕˾qéúÊè ‘w|íFï¥g?ü!qWkqÈÒR"¢”ˆˆe)åÎtõ‚l&Ý)f³åþrvNºX*—J¥B±T(–òùâÊñêcæÎÍŠ¥E{‹j‘{ïýÙ/y׃Þ÷†×¿uݺó.<ªéïJÀ%o>Ç{pòɧœü²S^üâ“'_Ûo¿é|äƒ×\7ñ¬í.üËí…Þ𶦵(¥D´ÖJD”Ò#¹Sv%#Rlj’;vî9gå²­oú[ïé†ï|× )Uж#Ž-RvEIJ-Ñ"J\ÇõÒ$%"–R–¥ì”­DD”RzÞqÜʳ‡ CZÔÞIDAT)§P(çsÅb©T,–ò…R¾PÈ狹BñÑÇŽ,ZÜuÚšçŠx¹¢•ˆõÏŸúGõ+?4Þ¼Ÿüÿ?|v߮˖w2oÆüê·ýzãeW%_äŽ[ïÎ ÷ûߺ⿿ã_®ÿúÂÅË&Sø7þ¿/‹ÈÜÎŽÁr%f¶Ù€ýN»ã—C{SZôhkÂ?ÔK*å²Ò)I)q¬=ï¿jÙç¾ ~´¼áâ ßÿž*{Þ•ˆ8J;E­+IÙ¶hÑJ‹Ö–R2Ò^±$›íÐ"J´ˆ(e¥¥œêÊäE‰’TÚêîIû¼…år¹Xòþ•J¥r±TNÙv:e‹U¢EÔ¯sïÜ÷´7Ö§IDAT©}vþ¼y­Ï<ë¼e‰ˆ;¹½Ñ?êŸDäê+>PÐu䓕;öµ¯ÿÖw¾qûmß¿ü}›Ê:ú&yáJ©tÊJ^¶Ä^§½ñ»¡½þý*­Fˆˆ8Ž(KkKÄ‘ÝW^¹ü‹_”ÑhñCe÷•WŽ•åºâ8"2Ú&‘tÊV–ÈH{ŲR)[Ëh‹H´¥¬×-¸®ëj×ul§£ÓIgܧRq]××M9n¿Ö©ÔØýÛ‡~-"«W£-¥•²E¼Ÿ÷¶Ø¯û¯gˆÈ5ÜüèïwùW‹ÈÏ~çg>ýQoâ駯ó ¹áúÏþøÇ·ˆÈ†w_þêWŸÝ×7Ï[PD 8ÆÓIDATνðÌÛn¿»Ö‚Õì”Ý·pˆ<ô¬­,×NTøï~÷Ð/ñ³ÿø–óλð‹þvÙ²~7Ýüí/o½á¼ó.|ëÛÞÕ×7/ÑÇØ†Øó´3>Ý6æ5ô臬D6_¤ìêŒ.;÷W^¾ò‹7ˆˆ*;¯¼ý,Qʶí è±ßýã?¼ÿºÍŸºêŠüä'·õ8°rÅ*=º!ëÎ<û´5k׿ëâ¾Þ¹ëßy™ŽÚÀö§h±´5>Þö¥”ÈèX¸è‘·ÿ»­Æÿu[*ç¬\öåÿzAðU·22³=Òk%J+Û_Q¶Ê¤SZ”ò®š¯Äqò÷-9º{±;ÇÕ®ë:Žë8ŽãºNÅñŸº®ëºnº#­´z¬S¦#ú(äcVkg3¢äçwÿ§ˆ<ÿ¸ílFD~ö³Ÿ®[w¶•²ïºë§wÞùÓ_ýêùÖ·¿þ®K7Ú™±1H” IDATMÍÉÖZ°z]•rá–›¿õªWö7/?ÅÎ¤Ò ¿÷ÞŸ‰È)/••N½îõ»åŠXÊ=c´¯ožÝÕ!"ßúöïºô²à²³È¬ ÓY¤Fw1ÚÁX`$VÔhC£R.K:vÑâ*KDþÛoóCEF;Äþõ¼×‰ˆ¥]QRÑR)—E$“±ýÝ¿,£ý`iìk«d¬5‡?øÔ¡_ïéÏJù|!—/ä Å\¾˜Ï Åb¡X.Kï{ï™™Ô*ÅZä ßxË-7‰H:]óìýL6-"ÞÎýœ Fº¡îûõ½â¸ß¿õ;×_ÿù¯|éý§O¾æµ§‰ˆ.;é9YÙtÚŽ\n#ˆ,IDAT0ݾ7Ã5×üÃE¯»¸§§7“Mç;ßœ°ðÛnû¾÷¸Ã+°j+2£YZvöÐK[S4XÚWà£Uj|cED\Ç­([DD»—ßñC?TþrÙeÏýò—e4Zn8ç|WD´¸£GceRi¿écY£¹b[b§Rj´£Mi©,ã–Ü•‹æüåÀÀÁÃ^÷Wq¤û«X*K¥båU§sÖº¤3©‘_°Z+%/ù+n¹å¦§¶?ùÒWœ\kÛ2锈œvÚ¿øÅÝwÜz÷ØVUœë¯ÿ¼ˆ<çèçtõt†æ÷G.œÇãÏÐÙÝ™êHY–•¼ðÐôêÊW?žEˆ•¶Æï†6¦´¯WJÀÂø!IDAT‰=5ÄûÄ]W¹®«µVJ]yçOüPy|û½ÿ>oë¿Éh´|qݹZkÇ’Ïdl=2p£Ä­Èh{E¥3Áßû:³8+¸óEjYVJ=ðçݹ|!_(æ ¥B±T,VN=õ¹ïzÇš•ÏYè÷ÕyÕ>ãŒ3O;õôÛ|ëñ'Ð7¿ï?ø^WW×9ç¼6¸m^ÙÛßþÎ_üâî‡yhñòÅ[·~ù oøÛÓO?ó“Ÿü̇?|Mÿ὇F¶ª¿ÿð¢å O?ýÌŸÿügÞ²‘ F¾‰‹–»›r]…¿æµgÿàß[°`a¨ð`ÿ^­¾>˜–T°‰¢F~Fh)TÜ”-öµ÷îçF¾IDATmóCå—¾Çÿ!ùÇKßsâ×¾*"wìÜsñóV_wÊ«gd„%“Iûå•KŽøç¯tt¤Ç4kÕqÜÂŽ¾aéL57û²¾ñ–ßìØWLÛr —Ÿ¶æø³_sÒÒ%óF‡DFΔŽùó>þñOÝ~ëmkÏ:UDÞûÞËÏZ{ŽSr‚M„ŽŽŒˆ¬Y³æ_oø·¯}íßîûõ½¿ñ’UËV»÷‚ .r+î%ë/úâÿ哟øÌ‡?rÍÐðP*eoÚtõÏþ³s.8ã±Çžˆ\°3ªKÊ[‘/yá·Ýzë‡þñý—\ò–Kß¹1Tx°ÌPù³ýïíæJhñø”‘ŠíÄ:¥IDATêë^92ÄðØ;. -ýØ;.=é_‘ë^yFÅÕÎè²™ôè™&Ê)—Ä»¯×¯ÙÐÛ×ç­fä4ÌÑŽ«ª8«^üÉÁ™ED;wx0÷ì¾C"2oÁÜî¹s¼ŸöùãNyî‰+ý¥sÃ…#‡rCùÞ¾îù‹úì”-"ƒG†÷?}`ÉòE®«÷?}`Å1K3éb¡´{û^ñÈ}Õ+ò%,|x`x (Xx°Ì˜òÛûöÆï†6çÿû{lùÏ .>~ÕR·\¶,KÙ)k¢¿qW‹v*®ëZéôŸw<}Ö­ßõ“b ÿȧ?³u¤¬#“mxŒ¬Qi‘ÑÄü iH%ðß#IDAT#G?k¥”Öc‡CgTgWváâù¡ÚœøâcCS2™tß¼žÐÄ‹ú,êóûs\0fE ¾l|jgˆ)˜áÈ•¶å·¼&¥Å; XD†‹ŽˆÕ)®e5Db¸®›w-):2Úæ51ÆÆí-[Ò™ôø#ÐüV‰wØ€×Q*˜qþfÆ}GÆ[ЮØë´7þzÛ˜—àYðÞÿöí/-9*S%•„×4QÞR"Ò1rô–Q–-⯤Ӷ·ÆÑcÂÄOÑ£GŠ)¿_LW ¢ô¸ÖÌHø°ói[šO›ãn[~¯’÷Lym-¹+®éºþ3ûö×} ‘Šs8wÅ5©tÊ÷ 3uIDATK ­dìú`½}óSÜ,f¥‹Î~éÍrM×õŸñ§¨ÑÆ%¶™»âš‹Î~i0>zûFïoß‘IïÙ½»iuLkçžñ|9ãßX°P,ãcÁ£Ŀ¯×Ÿßo¤r€YëÔ`®<ùÄãÛ·?;¥õÌ`«W/:õ¿¼@¼\I¥S}ó~è_ú÷CLLk);ºTvKe]vôæ¿ÿŸ/}Ù‰©tJbîo@ˆëJÅÑ…²[©èrS]ÈÀ´–rEW]vt¹âÆßYž\ÔTqtÅÑ®+®Ö¥²®$8Ÿ\„i-Ž«ËGkKdd(%áïÖijf¬ßüwkÔ±xæIDAT>þ‚ßüwÉ)Ut¡T)•µÖ–«u¡ä–Ê ¯ï"B{f¢¡ÜàÝßñðŽûööœ–xÒò—žõ‚×·äùÁÙ>~óßÝ¿çÞóÏ|Ëî'~Ÿ¤XÇqËŽ¸®x­o4¥Þº‘+0“ å¿qï 7=øÍ‹œ¸â¸ç­>Þ›þØŽ‡oûÿsÌüã¯:w³—.^¨¼éÂ>¸wÂb]WJ× „Hc¡"ä Ì OìûÃßÿŸËæ=÷Ò‹ß>·§GDŽ Šˆ›™Ê‚r²üy×£ïûú›ßÎæ‡wÜç…J·NŽ-Ó;ÖËqñGJôƒ\€™á‰}¸ê?ÞöˆºIDATšSÏ8võñÛ÷î{rÇ“ þõ§ÿÒ™Z´pÅÒË^¸è’¾ôÃÏŠÈ›.ü€÷Z·]sWïî¥õ¸ )–ݤcôQf^®(¥DD·õ¥øým m¬÷ÔŸzÚš*µxÙ ‹õU¿]@;Ê ¾ïëo>ÿ̵‹.}ð÷¿Í•s¹¢s$_ñ^UÒ;Б{æÏOöv<ý¼ç¿ð¬ó¯šŸJ‰È}üö¬þM&ê-­¥Tqµ–êP™äßP\®„þn…¿X‰ÚIÔ®3” 2>x'#3fJ>‘é°ûÖ¡ú‹ ´Ÿ¿ÿÎÆ—½øE‹.}ä‰G9<ωȑ|vôõ!‘§;»WˆÈ¿½#À:XIDATÿå/}eÎU<úP­Ò¼fJh¢ÖÖäCE’´W‚;²Ævˆí$2?š÷ž´Ç»Ýì­hw ˆñàöûž:ôç·®yË#O<²sß<Ô_*;¹ü ˆØé9)«˜Y9\Ø+rtOw÷ã9ú«³êÖZZ¤\ÖÕéá…Š‘Ú6ØVë·sÌôÈ‚óÄÿÀOX¥ê•Ƭ¨z["Û"“çmT|Encõ{âz³HüvÕõæ„©U~õ6ùzD¾|7"߇˜B€ä»}í/þ›'w<¹sßžüp±RÌ¿îEo~ÅsÏ8yõ){ûw?´ã¾?ü½‡vÜß»ø/QºSi)ÉH`ÿK¸IDAT¸®”ˆ‰ÖV©¡C¿"5e|ÅßÙÕÚ™'†æ©^¶ÖC¨ÀÐ<~!ÉÛ[Õ…$i‹x3„’£Þž¢ ·1ô>L8–,¡ÖvÕzÓ&ÜÞøì™°œÉ|=jÕ¡º„ÈMžpë€ééç¿¿ãoÏ»ð;žÈçÙ}ŸÚð£û–{/Ý·üü—\üðŽû.úëYç]šµÒ<úP0T|‘}_2*ÿ>&Εø_Ž‘î‹[6†¿ïð 1¾+ñó#8¥®[³w«+ÒBoZc’—3ù€YåÁí÷uuöì=|à™‡Óeëúw}»»«'8ƒwžÊYç_å…Š7Ñ •ŽìØN>2T¼ÓVÌV8ÑÚ×ð\IDATøŠñqZã­~%“4n‚»ø˜~ž˜ugîOƒ‘3ÝvŽ1m I~¾¦Êñ™úzÿšS%“¶sE'74ôþs6G†ÊÅlØ;xð®.廳vGGÇPÊ‘¹Ê:úåo‘ªPYïŽ lY–ˆØöH3ÃuœNÁzVD:æôÈðÁý»îÏ,z©eÕ<¸9¼ ½3€ÆYJʧâ:Ž«]=òOD*•rÙqËe§T.çòÅJ¥ì:Žw›`/:ž¶*åtqÐv }]"¢öÜ_:²;rµú¾”w±I×u]×u×qÜr¹â8Ãþ*:uIDºúÿ4øôÉ·Žö ´HQaxcIDAT±ìxmY¶dá²% CC¶h=ÚK¦‚ %"¢]í í7•vìì~§Ç±óR|f÷ã+æŽÜŽÅkíI+!¸–îî®îîq}_þl–R…'ïö+ìØÙ|×¢îÜîܾdù© 7“\€mCx K”ˆˆ;Ž(Ñ¢´«•­-¥´%ZÙ–¥”®äæçŸp–Ÿ¶«ãø¿vÜŸ«äúˇOíŸËRë¸//·ÂUÒZ¼)Ñ®Û}ø±rGÏùçîS†œ#Ïé/¬>Æy¶/ñ&šÉ•V^,ÖìeØÍ>¡Uë9ùk$gðšA_ž)ú$ÙÉ|mZóF5{-R;>kIDAT­ÿ¸®ÑÛã?µsïþƒƒÙt*52Q©¸"R©8åŠë8ZDºçdŽZÐ;¿wN÷œl¦#•J¥Šk>«ÒÙù¥¢uøÀálzÿþ®á®|ù`ä*ªûÒ¢,¥öç‡\×qDDÄ–ÑQYÒuÜðÊ·vv¤Ònvèp§½¯k «04ü}h$W&sA_SûÆD.5™/_芹Á¢TC÷úUã¯`?ÉêaJLòÿMXxuhê/¶É”éiÍoÁfÿ¹*ºk´ßiù’y}sÇ®âeG]¹+•²²™t&m§R–¥”Jg-K‰H6›¿`‰muˆÈ =(θ\ÉUÜù±Ç}õuwt Y=oIDATuŒ\·³Ôšy–JY¶¥Ò–è\YD†êØÌFrÅÿ=Ë÷wÍxfù[Úšú!ζoH‹`µ¤•&"¢,Õ5§«kNÕé)•àÄ‘Ù{ÿlGÚÛã¸E9´wl¾ìŒ®(jÌF”(QéL*I©ñ«®^…¥”Èœ¹ úD¤ŽÖŠÁñÿ—Eð{šâOþ$_0æ—ZuOQäº" œ-I}¼a¡­ 5þBoKL?X¨V1Okm]u[*²„Èyb6$¾>ÕR=säzõ÷!~ÕuU;~Õ ·(ØT_$fsj}E#ÿ ªç—¨¯Ph½Õ_ˆÿ‚•ÙØÈw¬ÞûX=IDATÖXüõ„_†˜ ûïILå#ßÀ˜/Xô&XJD†s¥á\Þk¦øÇøú%yõMÛv&cgÒéLG*mûש™©«³Ó­Ì‘Cááùëž½_ÿÉÍ¡‰ï¹ð¢•G/‘Ýû÷òŠJ§íÐl–e¥Svow¶gNgg6Ý3·Çq‹*Û#‰Ë•êþŸ˜ïJõ‡¹`]k¬ž!²‘s'&ßà÷Ï/¼®­>a•"ŒßÒê·:~zÌ”˜ÚVoï„¥ÅÌ\׎f·"¦Úñ«ŽŸ3~‹^D|E}ñoTäK‘z‘k™Ì‡R«õ–0ùbL”Ö ¤Ðü1üfÄÞ}ö¯8Ž«CÚIDATµ®_é±»¼\;…Þëëêv*cש÷k’w m*´ê§ö^µt¹ëê_=ôäžgÅTrÙâùÇ>gѲ%ó–,ìÍf³½=‰®™ïkâñ`1oqä®à”z¿s“ùš&)¼ÖK ¿µuååT©÷7WSK«kñZ?áÌÏ”äŶLõjàÛØ¤w þ×X]­ÏzÅÿ˜Hø‹¤.ŲÓ=Ú©uܪ%Ç­Z""Ú²üô,¥F×E»"Jk¥”m[¶¥,K…BÅR’IÛº3ãMt]]qôpёՋ—~äíW7*²¸o¡RbÛê g¿ÌuÇêoJ%®«]W§RVG&•²­”­Üð݈IDAT®è»¹ÔÒÄ\©·Ù|Ù_B]‹Ôešçõþæjviõþ´ ~úÉ—­®g­ï’Ù÷Ç V~9k­K†Äô¼PQ-û jµÏ&¿Ò±•”­”òGSDâTÆ.Ê¢l¥\=íÑVbwtJåJeäÌJ.¹]Ù“_pŒŒ}:#kñÊéèHW¯BªCÖhu2U}eñZqþJBz|g ,R¯$RëçO ª×–’w¹iøÆ”6͵²AÓÝ$ íy[ß ®±z퓯LL þ¾{÷ÞƒÕ×q)—ŠëÌŸÛ½daïÜÞ9ÖøE,K‰¸Ö¸—LjìÈ.¿2vΣhM/ÂùÿNIDATâ‘áÁ¡¼3:·=-sº²s{:³~ꌮĶêûL›•+ºjì!ál¡§µþÂýé1+ª·µúµk¬X‹÷_¡Z%ÜÒIÖ$fž˜ú$ó¡Ç|¦ —MXíÈÒbælÌ„u‹ÿ6†4üW?[½µÄta5¼×ŽÇ&ÿ‡àKþ}®ë»‘«¸~áé”NÛéÔXSÀö.IéŒ?¸F"XÕ¢¶G+ãO5¾%l ¥lËNÙ–X£5î • hg•Œ?î«#êÓáŒ?kÈV’ɤ­¢êUÄ W E†*N½'Ò'Qrt¹TÑÚ‘BiìÈ­Z«˜7·kÞÜ®µtÆ^IDATºWã´¤DÄÑáCìñ‡H“+ÐRJÙZ;Oí:°ÿà@:eû#.®«Çuµîíîá˜ÅF Ì—ÝâpÁJ§Ò™Tp%.:ªTi ¥ìŒˆX¶­­´²m;•Qí˜ CE§×MñX¶JûíÃë¨TÊnÉ+c‹H*Ûa¥3©ŽNe¥B¡"ä ´R<'IIDAT“ÎG옓Me³©tjt-ÍX‰X;“íJe;­´m§ºªÅC®@Ó9Ž;80840|ã~d¼ðžÎŽ9=sDDD‹È£O<~£é•ì9x8ÛۓΤ$õ:¾j…Š+ÐZk•ξãÜ×”+á›Í¸‰o?ãT]ú+m+•îxýë´RZ‹hýâçŸôž?V¸]¸£ýƒÐ"®'V=mÝËÏ-vLœøÈhºTÊžÛmKw‡-Á(ñsEoP/Z´øÏ¼éÞ*Z[ÁýàÐct`‘‘B÷Z-’›>®#%»þƒàÝšÇ-#ÑÁÑ3fÁ½1Éh‘„¿÷«©G'˜Â`IDATä ´J£é ë½Ê”"W h¦ÌPä Lo3-‘ƶuëSU@{—+6¬Ÿªzf®ûï¿Ö<.WvîØÝòÊÚ ã+“È€Iä À$r`¹0‰\˜D®L"W&‘+“È€I߇øÎmÛüÇëÖ®5QÀŒ×H®x‰òè#÷„¦“.€ºsåÎmÛ¼Dùìç¿âO¼zÓFÙ°aýŒ¸råªÕ+vlßÕØ«f×í§Á~°`¨xOúãöÔþãÉïdƒ¥%,0²ìñ ê˯±â‡ŠRJD´Ö"ÒÛ·b ×ÊU+BMãB®2ØIDAT»o¯´äÅÖš“P€fh|ÜÞ ï®ó6™~¢:$üÇ¡yê*08½ÖâÞKµš2õNñK Uf›Æs%¡à¾Ûß)OØ™4µÔ5sd Cˆ¦D–„‘1YWe`¦kˆ ® Ç/5;ñ ©·Ÿ§ÖZl¶_Ϙ†˜5Ûs`¹0‰\˜D®L"W&‘+“È€IŸéÝåÞÃížFrÅKï.÷A¤  î\ñnE,ãoqõ¦"²aÃúéqnkMÕ`?X0T¼§1—Ê¿œp½^ç¸Ö­ÃêZÅ„kñç'«ÀS_®x•P¨xzûV ôïZ¹*|k/ãûÜä ÑØ5† ˜Œ¦ßß>R¨Íyù$í’º¡ÀH~—$ÕóžÆ¼$û²[ÚXÓs%ò¦[Õ»éÈ]y­òkÍ“:1å'¹¥™ ôIDATXõº"Kó‡â“&€6ÖŠöJÌ}ï%³÷¯k&¦Âµª“:Vf¼úrÅ;’øêM«‡Xúwõö…W"% fÿ¢ŸLùÕ}_¦J€™®‘óí·lÙ:ú+æ`°„bFã›ýó?Iù‘ÕK203©šÀ Tw?غµk{û–Ëø,éí[!5îL\=ÈÀ¨%fÛ>É!Š Ë|©zžÐùfñ‹@kd|ÅË•«V„¦DŠÜ·&™Xk§cO¾xp=aù¾ê±ý„µŠ\#y 5>n?ýO­´×3N„$D®L"W&‘+“È€Iä ÄZ‘}IDATÀ$r`¹0‰\˜D®L"W&‘+“¦æþöÐNV®Z>ÕUh®«7m¼jÓµ g&WÀ€ÉßÞpÚúÞ÷ïªkþ:råÎmÛê¬ ´¡ ÖGÞ(äp¿j}e¦¡úÚ+>rO“ê3–-›§º Ó]Ýý`ɻؠé©®ÀtÇñ`“È€I­<jÝÚµSX“æ!W ¥6lXï=غõƶŒúÁ ÕvîØí©¼rÕr¯ã·cîܶÍûç?yš3øt Ñ^€–ÚºõFïßX¹sÛ¶uk×®\µÜkÁxgïû­™•«–û!ä?ÎéϽ MIDATZpª+ÐRÕý`Þ”PxHàò0^ð„Û|ê?Òzä ´ZurLÞœþü~ûFFÛ=~\M9ÆW`ú 6SBM–;vûeþ”;voÝz£—RÁL­ÇÍ@{Zªz|Åç%Gõ«¡Î±;vûÙŒJõLÌcãÈhà`»Ú‘3x»þà þãÈÙ’,(Í?o†\€–ªn(„¦ÄÏà?ž°œZ FÎiã+“È€IõõƒmÙ²™kDbÔ‘+ÓçàhÀ´UG®LáÙ›0ÍÕ{ø6Æñ`0YWoÚ8ÕU˜FȘ,nÐÄñ`“È€I(â7XIDATä À$r`¹0‰\˜D®L"W&‘+“È€I_ÇÅ¿»²4ÿ®–€™¢‘\ñåÑGî M']uçÊÛ¶y‰òÙÏÅŸè]ËsÆõíq-ýU«WìØ¾kªk3Rƒý`ÁPñžô×ܯZ½Â<ùýµ_Z|QÁl¨õ`\}¹â5VB¡âéí[1пk媡&‹ñýøŽí»È˜¶¦æþ+¡6Gd{"I»d2-¡È:„+²2‘+­®muùÕf–¦çJpGìïR'ì•JÞsUk6?$ªÿ[«ü˜P U zÙДZEM¸90Óµ¢½Óñg{Š™|IDAT¨Þ‡æie=¥vÆÔ2am[¿90%êËïHâ«7m¬bèßÕÛ\‰”0<¦öG}0ä‚Y˜¤uU«ÀfÕ¦“Fη߲esè诘ƒÁŠoø—~(ê퀪5”2I4\´·ºûÁÖ­]ÛÛ·\ÆgIoß ‰l¬TïšCûëH‘£2Á'9JS~­Ù¤ö˜|õ…ÊO¸:hŒ¯xù±rՊДH‘»Ñ$kíCƒóÉËŒ/¿ábN!NÌÛ·Ç©õ³¸žqÝhy@ r`¹0‰\˜D®L"W&‘+“È€Iä À$ùҼ‹*=jÊ+IDAT®Z½¢VáÕ ½(d½Õ½™3t«LOõ劷?ŠÙÅ'/§Þù½«7Nf¥¦*3MŠšLvúo&‰À¸:®Æ[©5o5(ã&{¿Èø«ÙKíkËGÞ&+æbòÁù'\i­#o³‘OÀL1Ù&häJIDAT~°$wßJ(á}ïëbdÿÕÔ`ó o ää‹Ôõa‘"À¬bì8c³ ãŒT£ÞB&l¬L¦ðäšÝpi Øiò­Ð õæ?öûÓ#Gz«§ï¨q¿÷ZKÅH²Òø9kXkx#ù­éã‹’ªìº o^µX$á‡ÕXMÌhê²Ë6_õ7Ý´mÛ÷|äçº>m¥úh+v¬ÚÒ'>ù•µëÖ¼ñk¯¸ü:®ã0‰\i¢ºA€ö@®L"W&‘+“È€Iuœ¿rç¶mÍ«`ÚÚ°aýλÎ\ßu\}äžúë˜Á¶lÙ\×üu_ìªM×Ö»RFd²IDAT`&ÓuÍÍø À¤É^ϸ1GºÁ<÷e—OIÍ0¹Òÿà /~ã'ü§¿»éÃ}'_Ñ‚õ>pÿ^þÊ×¶`E0›M*W¸ÿGµ^ªÞƒÿðÆÿ½ñ¿WÞÿï•\!70œïèÌxã7ÇÏ«Î_ÿÖøu‘0=M¶½¹Ì›¡RªrÔ©¹´ä=Mg¥sþÈKÏ;cl¶O|-“ÚÿËZ+¢ÍÓ\Óïëå»ä=o:¸ã7R:ÿïàŽß\òž7%Y£—^Áÿ†¦ûÿ"4CKÇWŽä2R:2ñ<‰Å7_ü—‚³Ñ…2+¡›ËúWƒ÷öàÁÿÒR—èIDAT‘K?Ñ¡´ˆ(ÿ°h-¢”h-JR×~â§JË–8{ÂU×›„ 4›\ñ‚¤úfˆÞ<øß¡r‡”Ÿ‘¯]3øÆýÎÿù¶Ze~íþcò«æ'\3 H‹Ï‹.¥¥<$塳ÿqå%~Sa¨\®†½ÿúÿÊÿûï¾û¹Ù¤:xÑÒ¤ÂÆÆW’Ü 1W²¥Rø/›OÙøÁ× .i%J¼.0ÑZ”ùʧú­ÏZïÚëJ Z-Ð<“Í•º~ûËöK>|Ú»¯8u¨¿$JUD+Qúßþ÷/o¹þ•1%à  1Oƒ}q‘3L™T®Ô»w¾õ†“Ï}ïÃio ±IDAT7|áWµføÉ—NžL}SÎX?Xž¥Ÿ|é%¦Ö˜†ŒÛÓ³ƒ¹bê «•«–Ÿû±ÛV®Zn¤4@‹Ñ^˜Ôêñ÷_€ve,W’‡JäýWèø€ö0]î¿rùæ]tíwn¾.Ñ•ŒýµÓùÓÍ4ºÿÊŸwœüªSkÚÜEäc—¾úÄwÿˉïþ—½9â:.‘wX1Uy€)Óæþ+Oóâ5o»xÍ Þ³;v·®Zs¦ÕýW¶.–èþ+€éfvÝÐl-í¹ÿŠÈÙ×ôž-†Ê¢ÔÈ…òÇè¯^{óW>}f++0eÆÜ…ûo¾ IDATqÀŒ0“î¿ÃÀtÀýW&µt|E¸ÿ ´;cçE ä À,r`¹0‰\˜D®L"W&‘+“È€Iä À$r`¹0‰\˜D®L"W&‘+“È€Iä À$r`¹0‰\˜D®L"W&‘+“È€Iä À$r`¹0‰\˜D®L"W&‘+“È€Iä À$r`¹0‰\˜D®L"W&‘+“È€Iä À$r`¹0‰\˜D®L†§GIDAT"W&‘+“È€Iä À$r`¹0‰\˜D®L"W&‘+“È€Iä À$r`¹0‰\˜D®L"W&‘+“È€Iä À$r`¹0‰\˜D®L"W&‘+“È€Iä À$r`¹0‰\˜D®L"W&‘+“È€Iä À$r`¹0‰\˜D®L"W&‘+“È€Iä À$r`¹0‰\˜D®L"W&‘+“È€Iä À$r;uSWIDAT`¹0‰\˜D®L"W&‘+“È€Iä À$r`¹0‰\˜D®L"W&¥êš{Ë–Í"ºIU´:reÆõÍ« =Ô‘+;wìn^=íñ€Iä À$r`¹0‰\˜D®L"W&‘+“È€Iõ]lš»sÛ¶©®´¡ Ö'¿äJ[劈<úÈ=S]h+[¶l®kþv˹jÓµS]h'õ]Æžñ€Iä À$¹²jõŠÉhuŒ¯„òcÇö]«V¯Ø±}—é*f°úÆíC)B¨2CIDATB&uõך³z½€é£¾\‰Lÿ¥˜ý~õKµ¦øO½ñŦ›Iõƒ…Ô5€Ÿ|æê9I˜¶Lž™|wj…˜*0åšrþJ“Ž<ö‹åÈf˜¶ŒµWüñvIÐÂÎl°XÀ”«#Wªwë¡øZûýàôZ3WO)–€€i‹ë¸L"W&µÛuò·lÙ\ï%µU®lذ~ª«³][åJòÛdš„ñ€Iä À$r`¹0‰\˜D®L"W&‘+“È€Iä À$r`¹0‰\g€î…IDAT˜D®L"W&‘+“È€Iä À$r`¹0‰\˜D®L"W&‘+“È€Iä À$r`¹0‰\˜D®L"W&‘+“È€Iä À$r`¹0‰\˜D®L"W&‘+“È€Iä À$r`¹0‰\˜D®L"W&‘+“È€Iä À$r`¹0‰\˜D®L"W&¥‚OîܶmªêhãreÆõSUÀÌuÿý×úÇåÊλ[^@[a|`‰ |[IDAT¹0‰\˜D®L"W&‘+“È€Iä À$r`¹0)5ñ,@3­\µ|ª«Ð\WoÚøÙÏeªkÑ\WoÚxÕ¦kƒSV­^1U•i™ÛwŸÎ†orèS®…\ÁÔèß5ñL3Ó÷¾—÷`6lcˆÖºÅ5i™«7müܾZ=}~Ê‘ÈL ‡ûÕTW¡éfÃ6†´å~6~; ?åjä €&b?; 1n0‰\˜D®aÜ»m̆ÃÒ’hñûÀø Ú\0$Ö­]›p©•«–OŸÛ§z;ÿ¨ÖU«W„ŽpY0áœÓVh‡¸cû®ZÕë nò ÝSwIŽIDAT"ríæÎmÛBù±aÃzïÁÖ­7&–66³vÁ¡ªÖªù Ú¢3룩…\Aûðš&ëÖ®­nmøO½—üFŒ3ÕS$*¢¦Jäïtÿ‡­7=8ƒÿ8ÔÖ –V=}Fð6­úG}h“ƒÓƒO§³˜¦˜÷ ´E2¾9Ï”l5¹‚vL ¤ˆgëÖ½~Høsz-/?BçKû§O‡XPuŠøÙ|)þ×ýŒH—ZýB‘ƒÕ»æú§›êMM mZüÒä f¼`*Df@u?XpÐÅ[0”ÞœÓ*T"wÎ3a™2íw¸õÖmšoNuŸÚÈÌx^ƒCb‡åƒý`~f æ(IDATH )²aÃúé?3ù½çŒh¯ÔeµÃ 5>.5µÛÎqÆhë֮ݰaýÛ¶%Bã >bõØC-«V¯ð{Ï ×r˜¡•ð³«Ë”4\h¯ MìܱÛk…T·3Bã+ëÖ® 5S‚S‚ËúC/Í­zC‚û Pw–ßVk|¾ýzŠ|3h”>Rõ! IÂ&ôe¨þn´¹‚¶â§‹ß È{Ó«GéƒSBÑ2å£,‘ƒÕRµËˆ|)r·2ƒö¹ÕU \‡¦$yO¦¹Z›ù´Öðàì&!WІjd?18¥Öcb|`¹0‰\˜Äø €-GEû´IDATf©ëæµhä ¦ÞlØû̆m ¹zÓÆ©®B«ÍÂO9¹‚)6ö>³a«}î _ê*´Ôìü”#‘+˜bWmºvª«ófÊÉ"ñMö1n0‰\˜D®L"W&‘+“È€Iä À$r`¹0‰\˜4î:.ŸøäW¦ª€ö0–+k×­™ÂzÚÃH®¼ñk§¶€ö .»lóT×Ð>þ/£¦·AÀS8­IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/create-remote-folder.jpg000066400000000000000000000716631203611042400331710ustar00rootroot00000000000000ÿØÿàJFIF,,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀMŒ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ì|kãfð„º|I§Cr.£c–eM›U çcg;«•OH¥“C¶`½H˜qÿißQdÔü<ŒÁU£”# ‘sÔ1Yצae¤yÐ¥½¥²ª©“pÎöËdç¶zc¿$úXl59ÒR”nýIæÕÝ—OÆ·Úåt;f(2@œg®;ÅQŽù—¢ÿ¿ëÿÆëƒÖìm-’Y ˜3° ÛÓ#žŸÒ½Tм%â;ýr=*8t½R˜ô¹¬ÄJQsyksã(!€ÇÞÁÆrõ*#kÇñæg9Jþë+Òù—âÿ¿ËÿÆéÃã\‡þ`ßåÿãuE<੼]k¡Ç®\¤ßÚZO “-µQ¶0‘¡EVó)A¿;†¢×<¥èÞ¼Õ ó›«x-b1‹¸]Eéb.!!Fr‹´œõ98á{,5ÒåßÔŽzÍQñ¦Cÿ0¿ïòÿñºQñžOúÅÿ—ÿ×?ká-oxby.ï£ÔµÙžÞ0¨ 2Ü${!€Oä‘ÊÎÍ¿‚|#yâûm ÛV»7ö{{ˆ‹6ÄÈ}í *É‚£xç†â‡G ¾Ï~ýž§rÈøË!ÿ˜_÷õøÝ8|cÿÌ /ûú¿ün³ô¯hzÇü#þQÔmÿ·cºo¸I>Ìðîå¿v<ÀØ^Ò0y9áƒÁ:oöo—çÝý¿þïí¿;zù]Õy{sÓÛúóŽÔ{,5íoÏüÞ§sT|aÿÌ/ûú¿ünœ>/Hæ ýý_þ7F¹á Qø‰­Y¬O§[iÖ-y8…•cp±Æ@UXÏ–>l“‡'œk›·°ÑÇ:¾—uöû®-¼Õ• ÅÀxÉe]ãßhÈ8Ç”hÐjü½/Ôê'¹Ó‹’ù‚EÿÿÒ‹Rù‚ÅÿÿÓµ=Ë[Öï5 N}Je—Ä?ØÐF.FaRI, !Êäð€ ç­Z½ðż¾Òìnç•àÑàÕ¦o+ÓyS…¸.NFô÷©öx}/Ň5NåQñbCÿ0h¿ïâÿñºpø«!ÿ˜4_÷ñøÝZÖt=/T²´Ôï'–ÞÎÃA±Ù—÷Žànuc„ä‘ÐV ߇ü7oáûÝ^ßQ¾¹ošÖÕÒ0æë¸0aŽ w ÂŒä8Ò þÏæuSX|SÿÌ/ûíøŠpø£!ÿ˜D_÷Úÿñç"¤¯Õ(öüYÚ}ÏCä?ó‹þû_þ"œ>&Hæýô¿üEyòÔ‚ªQíø±{i÷;ññ*Cÿ0¨¿ï¥ÿâ)ÃâD‡þaQßKÿÄW*AGÕ(öüX{i÷;±ñCÿ0¸¿ï¥ÿâ)Ãâ$‡þa‘~kÿÄW *E¥õZ=¿0öÓîwâ‡þa‘~kÿÄS‡ä?ó ‹ó_þ"¸‘O}V—oÌ=´û¨ñì‡þaÑ~kÿÄS‡Žä?ó‹ÿÿâ+ŒZx¥õZ]¿0öÓîv#Ç2ù‡ÅÿŽÿñáãyüÃâÿÇøŠäH(ú­.ߘ{i÷:ÑãIü¸EÿŽÿñ4áã)ü¸Åù/ÿ\ ©/ªÒíù‡¶Ÿs©0ÿË”_’ÿñ4áâéü¹Eù/ÿ\ºÔ‚ªÒíù‡¶Ÿs¥,ÿËœ_’ÿñ4áâ©ü¹Åÿ|¯ÿ\Ø©V¥Ûóm>çDÁíêw4¢¼šy$P–9<¢ƒ=H©÷]Ï;_Î*¥aÿ?öÎOý×â½KW³ñ ÂxVâòîìÛ©Ú¬hŽÑ?‚XÕBÌFqÈp2G<µ£r²_Ÿùœ§·ùƒu¨µœG?ÙUçr‘*ˆØ± Xðì=?1^=ñ*W—Åò9Ä( v«¯‚KG„ŸM¿šþÑŒÆ;©æid—÷M’ÌÜîÎr8ÁãoÄoù¥ÿ®Iü«7gÒ¶ÿ¡¢½Úlì>&øcZñÖ’ÚEŒ·"Þ'˜T¦ôŒ)ˆô?•q‡À^;±Û.*ÃÛÄE£^¤nó2rI'=ÏjúLÿ[7ýs‹ÿA­*Öž&P‚ŠHv³º>\o…þ5>s6s#Èùž  ÿ~•¾|@y.d}*ížë?hf¹BeË;Žï›æóÜ_QQZ,lÖ‰/ëæD©©;³æÛ |R¼ò~Ôº¼þL‹4^n cŽŒ¹~dàŽj |ñ â ŸO¾–'7Ý++JF „åˆþ.µôÍ,l×Eý|Éö1îÏ™_áç&µ‚Ú].ííí÷y15ÂqËm°2y8ëZoῊr·S²aÈ…µÏúKùñ§ ëô—ôÿõÊ(úÝNÈ=„O&Ö‡üÃåý?Æž<5¬ÿÐ>_Ò½ZŠ>·S²aÊLJ5ùð—ô§êÿóá/é^£E/­Ï²«Äóáý[þ|eü…8h¨ÿ—*ôÊ(úÔüƒêñ<ØhZ§üùKùSƉ©ÿÏ”¿•z5}j~Aõxžx4]Kþ|åü©ÃGÔçÎ_û潊>µ? ú¼Ni€ÿ—9ïšxÒ¯ÇüºKÿ|×wE/­OÈ>¯‡]÷üúKÿ|ÓÆ›{ÿ>²ÿß&»Z(úÔüƒêñ8§±ÕR'û$måJ¬’B\.F ÆFx'¿_^•™ý‹âßú /þ û:ôŠ+9Ôçw’_ù—|ªÉžhž×¥Ô¬îïîÍÂÚ³2¢Ùyd–R½w_NÕæÿ¿än—þ¹'ò¯¤ëæÏˆßò7Kÿ\“ùT9^ÊŨÛ[Ÿ@éŸëfÿ®qè5Æø9|EªxŸQÔïµ)g°ñÅ­²%üÑD‘E³byHáõÊÙ9Îk²Ó?ÖÍÿ\âÿÐi³xkA¹Õ©>‰¦Ë¨Woj(eÆÓ¼Œä``çŒ •°Ùæv_|Y?4}z]3JiµB:Ím÷±e™]™”tWÌ’Å€ùFä¾0ñE­–Ÿ§êdvž$¿½ž+;t·IÅͼi¼É·í*‘˜ä§öýý‘ý•cý™ÿ>_gO'ïnû˜Û÷¹éך¯ÿŸ†ÿ³¿³¿áÒ¾Ãæùÿfû~_™»öã±Æzâ˜gàÏëÞ2ñî‹x—QÙAqáÃ=Õ“–d¼h‘w¨G`¼1Ý´ÝksÀž4ñw‹eÓõ)t@¾ûF颛m¬Dxo5š\í*w ÈÈ®Ñ|5 ªY"èšhK/f¢Õ1nŃ!,ÈÇ#4Cá­ÛT:¤&› ]œÝ¥ª,¥›;Žð3“““žrh‡ñ×Ä‹ï^ê‡H·Žö -[R‰í°Ìÿ*ùÆe •#bFOP7'—M½Ñ#µH^ÆæxÅ´Ó´6O7r—Cµ„O…:ð{z$ÞðÝŵœÞÒ¤µµÝöx^Ê2‘n9mªF'“޵cû Gÿ Uüz}‡þ=Óþ=ÿçOõìôö oˆõ·ÀÑãYìm"ÕŠ+ˆXеÀNÒÛ°P†w9¥ÏŒa$®ÆH3¸1ƒèÃZ ·¸·:&›ä\$I<eM²¬`à `…¦8ÅIq¡h÷lûN•c7Û¶}¯Ì·FûFϹæd|Û{g8í@N¾/ñ&½ã¿éðÞÁeukªêúmÃ$rk¯"$ev€HFà8<çµtW<]­ø¢ö-;A‚mÇ[“L¸l¢²F€—Ì2‚X`ˆ¼nÏ5ÚIá­m..]M}>ߣZ¡‰žU1€~fäçÖ‰¼5 ÜêƒTŸDÓeÔ«‹·µF”2ãiÞFr00sÆyß‹®¾Íñ}ï®mཱུÑ|)6©¥ÊoD˜Ñ“ÄR©óàœ.1ÐŽ_Çž4Ö5__é:²XÉöÿØëqËi Ååoº‰LD3¾î îz9ãÞ>Ágý£ý£öH>ÝåyiòÇ™åçvÍÝvçœtÍgÃá? ÛÙÜÙÃáý*;[­¿h…,£ .Ó•Ü a°yé@Wâoj^%Õ4©%iúomôØ X˜ÊÍü´i7c-ò„ã˜ã 'â75O Oâdðý ÑÍ•õÂÈv¨·hƒ˜>qy)µ¿w'#Šô‰¼5 ÜêƒTŸDÓeÔ«‹·µF”2ãiÞFr00sÆF|'á¶¼šðøJ7Soóf6Qï“x!÷62w`s×'=h¿ƒ5=cZðͦ«¬Ãc —‘EqY³°´Hß6áÃ.p2Ú2Äz Ž!µ·ŠÞÞ(á‚$ q¨UE81RPEPEPEPEPEPEPEPEPEPEPHN;çäñÏ„‘™Å(`Ju麶Tž$š#æE ¬Œ °<‚ê1üéØ ‹t?…4»vVüª"?é›ÿŸÂšAÿžRŸÂ„K½ÿ¸ÿçð¤ÞßÜ’«°?óÂ_óøTlüûÏùÿõ©ØW-™r_óøWο¿än—þ¹'ò¯|*ßóíqùÿõ«Àþ#ÈÝ/ýrOåS$4}¦­›þ¹Åÿ Ö•féŸëfÿ®qè5¥R¶ (¢˜Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@qúË˪ø²ëD¹Æ—ŸòÛ \$”ãq\D¿( Ì08®Â¸«ÆÛñR?õ ²ÿÑ×UQÜOcotóÊ?ûäV4ú4Ë,‡KÖot¨¤‘¥xm’BíË0FÛry!p ,q’I«©ê÷ tºN’©&§"îfq˜íc…DúLÿ[7ýs‹ÿA­*ÍÓ?ÖÍÿ\âÿÐkJ¡lS (¢˜Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@y_õôÐü}4Mqmi5ö—jÜÞ8Hc -Æö$‘¸®õù$°è2ÃÕ(¦ÄÕÏ0Ò¼Mà­ÐÉtée‘¼Éî$ºC$ò®Ç×€1Ð+sÀº…¦¦|KycsÍ´š¨Ù,M¹[–ààBå]‰\ú“\Ö‚Bëž+ÿ°ªwÿ§+j¦î$¬VƒÆ¶Z…•µí…•íÕ…ÅÊÛÇs–—Ë Fü…òHàf©iž9²ÖtýZî ØŸKíç¶—Ê™øWA9àr2k–°ðE妹¥ëZVŸyáýBIÒm^îÑìåLæDÚŽIc·jóÐàÖÄÞ¹‡â<ºÝ¬Á4Ûëtkè?¿q[~\ñÝN~õ]•ɾ†”ž&ˆk·:9°½qZ‹¨ÁòÂÎpˆÛñ¿*à ºÇ Íej:šk~Òõ­çŠ+»ý>Xã—ný­w\í,9={ŒàäTzΙ¨_øƒTžÞÍ¡’;;fÓï¥t1ý¢™±€ÅÀ>vÓ•ÁÁàÑ}’kørÆæ2³Á6“ ¨:Ïa‘yqG@;³j?çÒçþúÿìkÂþ#ÈÝ/ýrOå^ømGüûÍÿ}õ«Àþ#ÈÝ/ýrOåYÉ—è3ýlßõÎ/ý´«”¼Š%_6Þ qc͉_(éqUþÍiÿ>?ø ÿY¦UŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽÎ¹™´ j[R»Òõ{!¿n+­9æeqqpË2 b%8ÇRyª_f´ÿŸ üÿ‰£ìÖŸóácÿ€‘ÿñ4ù‚ŶÑüXyþÞÑ _þI¨›BñQÿ˜þÿ‚yù&¡û5§üøXÿà$üMf´ÿŸ üÿ‰£œ\£‡]¿ê?×|˜ÏmôÖÑX¾¶ºŽ Éï&¼y¥½¹ — qBy<°‹ÙvAä@ÎРr[u·Ó]RmDÅö˜þר¼W¡ç]’¶×rÉÅŸ$í;»*²( ­Ü}-š¾n"%tÁá\°Sžœ”oËéSWšKi¯)ßçß^ d¸º6sïhCÞ#“Î$ƒ83:¸­}1nÒòÅu‰µy¡Çö'Š+ˆÁ:Lù«1 ³Èÿ^IÆsóy‚‹×}²×ì?mûL?dòüï?xòöc;·tÛŽsÓ-Ü}-š¾n"%tÁá\°Sžœ”oËé\ޤÍÿ ¶ïF·‚óûCû9íd†åäÿ$)T2lÏ¡Ù×ê­Îžîu}KJ]id·Ñãk’K¥w^å¶²¹Ì¤6ß•ÃpÃŒ7 õÅéqk?ð—I%Õåçü|ÏæAöY¼¯³åü¯Þ4žOO(þí7ç†ÿ–†§Ôn¯íï¯mê&[ZÎ[V†^1n ¸PUä›*Hà“Œ7 ;]À—ÑY³ââXÞTLU †9éÁuüþ´ù¦ŠÞ 'žDŠÔ»ÈìU@É$ž€ ä|7a þ¸½ké§mcu-ÙbÉ+_çîœ)à¬N[q9šì:¥Å†«Qê’ê2-ú\Ƕf­Œs`þè±ÿGÿWóõÏñÐ}iuíª\D³*>p&…â~9W‡N⦮oı¦—áEŠ)¯–»µFt¸šIÊ5ÌaÀpL„ÄpsÎbÝ÷°hc:¤:[]³ÚÜÉ쳪ã#tŸ #Nw9ÀØ0É€úŠóë8¼IsáÍBúâãQMBO²/—"8Æa¶7 ‘®Ö-þ·…!V µ‰ÌúN™}{}gíæ¯.ž#ºtpn¬ù͸Ps)”òfǘÙûØBš,n“E+ʑȎÑ6ÉX€Ø>‡ ÐZ‚×P¶¼žâ+vw6í±ßË`›²A ämb í'i85Ìx6µº¸»Õ£¾MNö'më"ÄÃìð+’£÷k'˜®1€ø6Ô1éóÙé¦W]Q ¸Ö.Þý ’rþG›pc1¢Ê ˜‰òÀÜNW4Ø­Ü}-š¾n"%tÁá\°Sžœ”oËéE­Ü°´¶ï½I"'|ÈåsèÊGá\ Pê‹~ÓÝǪ 9ÖšH–o=­„—¦!”ýéaºÛv>~~~­T¢´Ö’ÒÖ}RÎÛuÃØ)³¹–F•®§l¿ïTÂÒ2§>›òXQ¢±|9mu“ÞMxóK{r.â8„òya²í ƒÉ ¡@»¥ÿǤŸñùÿ3ÿÇßßÿZý?ØþçûhvŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¼oâ7üÒÿ×$þUì•ã¿än—þ¹'ò§ÄÏj¹ÿZ¿õÍ?ôTî® ±¶{›™pÆ2ÎzW.Ö¯ýsOýW;ãùu/úåýE. ð˜ø{þ‚°~¿áGü&>ÿ ¬¯øSµmbk=oJÓa~×¾G“ìÒOò£F¥p˜ÙŸ3ýc«·sÅ-3Æ÷PÏ5Ï É·ŽÎ gwF·†RÛUw•\n* eAž@-ÿÂcáïú Áúÿ…ð˜ø{þ‚°~¿áW$×4È๜ݣCmh·²È€ºˆ9W¸ôÏOqYñk·VÞOö¬pÁöm$Þê»?gs¡pNTì¸é¸üƒžF@$ÿ„ÇÃßôƒõÿ ?á1ð÷ý`ýÂe¯Æ±ÙÚê‡ÉÔÞ8–éc‰ÚgeË2 ¢±$¥²w.3¸e÷šÒýžÕ´öI¦¸¿h®¤RB'ôåR9ˆ= QŒäü&>ÿ ¬¯øQÿ ‡¿è+ëþfÛÄmÜÑG ³:O*ki9ŽÇ|£• ë¶6;”‘ŒsÈÌâÍ;‡„ÜLL{¼×[YZ8‚Èñ’îj(häbžœÐá1ð÷ý`ýÂøL|=ÿAX?_ð¤µñU”Ö÷2ÏÌ-ܶ»ÞY ¬’:/ ûÂDeˆMÛFsК´ž Ód’Þ8¥šgŸX­¤sÌW÷Tù_0aóíÁVÂp[þÐV×ü(ÿ„ÇÃßôƒõÿ ¯k⃩è:Mõ³Çs¨Okñ:˜ %ÚX.à± qò’¼dðsí<ö½3Iœi›nïnbŽ{o??g‰Ú $Ý·ÅŹÚ0yál06?á1ð÷ý`ýÂøL|=ÿAX?_ð«öºµçؾÏ>ÿ¶Û«‘†ø†Ì·#õ‰ÁÁçØÕYüEd’¼Q3»$ñÂÒ42ˆw4«Q(B¬Á›Aê;pÄ +Ëâ¿ Î&ÔmdPÊá]I”†SÈêz)ÿð˜ø{þ‚°~¿áN³ñfö"âl\mòÚKYc7Ü$²€É“€ä¹ Š«/‹ì®,`ŸMwvš{P‚æÚX„‘Kÿ ¬¯øRj^+Óì¬.î-‹Þµ½£Ý"7h˜,f@¦eRˆJàŒœá”àäg^Òê;ÛT¸‰fT|àM Äür®ÅdÿÂcáïú Áúÿ…ð˜ø{þ‚°~¿á[”Q ð˜ø{þ‚°~¿áGü&>ÿ ¬¯øVåhü&>ÿ ¬¯øQÿ ‡¿è+ëþ¹E‡ÿ ‡¿è+ëþÂcáïú Áúÿ…nQF€aÿÂcáïú Áúÿ…ð˜ø{þ‚°~¿á[”Q ð˜ø{þ‚°~¿áGü&>ÿ ¬¯øVåhü&>ÿ ¬¯øQÿ ‡¿è+ëþ¹E‡ÿ ‡¿è+ëþÂcáïú Áúÿ…nQF€aÿÂcáïú Áúÿ…ð˜ø{þ‚°~¿á[”Q ð˜ø{þ‚°~¿áGü&>ÿ ¬¯øVåhü&>ÿ ¬¯øQÿ ‡¿è+ëþ¹E‡ÿ ‡¿è+ëþ{MÖ4ý`Ì4û•¸òT4…‚p2ÏJ½SCþªãþ¹ý hñ¿ˆßò7Kÿ\“ùW²WüFÿ‘º_úäŸÊœw{UÏúÕÿ®iÿ Šç|cÿ"Ž¥ÿ\¿¨®Šçýjÿ×4ÿÐEW’X¡O2cE æP ƒž:ñ׺R]?ÌÖíu/7E´Ðy{~÷˜Ñ6sž1åtÇ9öç•‹áÜPÛ[©žÆîhQ~ß§‰âÛäA;7›6êAÝÀf=k³þÜ´ÿŸËü‡Göå§üþXÿä:ÃÔôk¶Ð¦Òí¦óm&¶‚ÃÉÇŽ2Å&Ýå6B€c8¨5M&úÿû{0ÇÿÙôåÚê3gÇ™ ÉáÇŸqŒÿq~Sü]öå§üþXÿä:?·-?çòÇÿ!ÓŸŸÂ6òø‘õm¶$ËXî%$˜–A*¼/C$>‚ÆÍfÿH·ŽÆ'¸Úx¶² mÎNï¦îø¹ý¹iÿ?–?ùíËOùü±ÿÈt“ é?a¸Ô¯$ƒÉ–êåöÇ¿vÈ„ŽÃœó¹ÞI}G›·¢Š¤þyu îMä0$—1Î ´£ÊΓ•w•yO–ÌN È<ÑÿnZÏåþC£ûrÓþ,òs–þû=¥´nÝäÛiÐnòqŸ²JdÏÞþ<ãºóT´Ÿ j2hÚ*êץƟmmqC<°’A+«ì³¨eÚXàäØnZÏåþC£ûrÓþ,ò09ÿxFßó†…lBÇÙâh,V)]29šL“#|£‘´X•BØÙJ¢ ¨‡YÎ0zÑn’Õòhf¸ÞðÄcCÏRÌGî¥;ûrÓþ,òÛ–Ÿóùcÿé%öå§üþXÿä:?·-?çòÇÿ!ДTÛ–ŸóùcÿèþÜ´ÿŸËü‡@QQÿnZÏåþC£ûrÓþ,òIEGý¹iÿ?–?ùíËOùü±ÿÈt%öå§üþXÿä:?·-?çòÇÿ!ДTÛ–ŸóùcÿèþÜ´ÿŸËü‡@QQÿnZÏåþC£ûrÓþ,òIEGý¹iÿ?–?ùíËOùü±ÿÈt%öå§üþXÿä:?·-?çòÇÿ!ДTÛ–ŸóùcÿèþÜ´ÿŸËü‡@QQÿnZÏåþC£ûrÓþ,òISCþªãþ¹ý j¯öå§üþXÿä:’-J;°ñÁ=¼Ÿ.\D8ÈëŽÙÅã¿än—þ¹'ò¯d¯øÿ#t¿õÉ?•8î ö«Ÿõ«ÿ\ÓÿAÎøÇþEKþ¹Q]ÏúÕÿ®iÿ Šç|cÿ"Ž¥ÿ\¿¨¥Ô:%Ðt8¢yFÓðŠXÿ£F:}F(M A»¤iùÚiµ@@=2Èè*»xdmŽ%“{`à pN;žGgš¡ê’Û«Æ j]eÈ2Býá»$AqŽ0'ü#Ú'ýôÿüOð£þíÌOÿÀdÿ »m$“[G$±yN븦s·Øð9«–o\”gs=3ïý?ýTÿö‰È:5€ àƒjƒ¥ðhŸôÓÿð?·™ôæ‘Ù‘÷%¹~¹çõªK£=qÍgÂ=¢ÐOÿÀdÿ Ž=@”°M"À•$Ú(èHî9g§Ò¯+Ù,ÓA.ËoQ‡ÎÆÍ£þyñÛºóøb§ž}=ô˜RÀ7šO³gvàÛŽýÛ¹Û»ïgÛí®Ybm;Û*Z\Îÿ„{Dÿ >Ÿÿ€ÉþÂ=¢ÐOÿÀdÿ Ò¢ºŒŒßøG´Oúéÿø ŸáGü#Ú'ýôÿüOð­*(7þíþ€úþ'øQÿö‰ÿ@}?ÿ“ü+JŠÍÿ„{Dÿ >Ÿÿ€ÉþÂ=¢ÐOÿÀdÿ Ò¢€3áÑ?è§ÿà2…ðhŸôÓÿð?´¨  ßøG´Oúéÿø ŸáGü#Ú'ýôÿüOð­*(7þíþ€úþ'øQÿö‰ÿ@}?ÿ“ü+JŠÍÿ„{Dÿ >Ÿÿ€ÉþÂ=¢ÐOÿÀdÿ Ò¢€3áÑ?è§ÿà2…ðhŸôÓÿð?´¨  ßøG´Oúéÿø ŸáGü#Ú'ýôÿüOð­*(7þíþ€úþ'øQÿö‰ÿ@}?ÿ“ü+JŠÍÿ„{Dÿ >Ÿÿ€ÉþÂ=¢ÐOÿÀdÿ Ò¢€3áÑ?è§ÿà2…ðhŸôÓÿð?´¨  ßøG´Oúéÿø ŸáGü#Ú'ýôÿüOð­*(7þíþ€úþ'øQÿö‰ÿ@}?ÿ“ü+JŠÍÿ„{Dÿ >Ÿÿ€ÉþÂ=¢ÐOÿÀdÿ Ò¢€3áÑ?è§ÿà2…ðhŸôÓÿð?´¨  ßøG´Oúéÿø ŸáGü#Ú'ýôÿüOð­*(7þíþ€úþ'øUý;N²°ŠïìvvöÛ㼘•7a†3ÏSO©¡ÿUqÿ\Çþ„´†¼oâ7üÒÿ×$þUì•ã¿än—þ¹'ò§ÁžÕsþµëšè"¹ßÿÈ£©×/ê+¢¹ÿZ¿õÍ?ô\ïŒäQÔ¿ë—õº‡C¢û%ÏüûËÿ|¥w©-á”u E䟔 œ÷û‚·µ­Wû2XŒ·ö6¾SÉ-Íèù êLÏ¥WÒ¼A ýÜ~F³¥j6nŽ<ë"6¬ŠÑ€¥„Œ2|ÁÇ^G­W(®Vû%ÏüûËÿ|>ÉpåÞ_ûàÖΣv¡ßÏk:9Kw`ñ°l›‡èAú\wˆ,£Ó´”šÛ '“æ‡òÓp!r>m»âI=ó“žLN!P¶—:(Qu]¯c\YÜÿóß—ì—?óï/ýðk©¯3±ñ†±&…¡\\=Ü7z»ÛÜ•ž ùosdŽ"(Çl[n(pdç%”¨Ý×ÊsÜèþÉsÿ>òÿß¡‡J{v‘¢´”³¬y$žýI8éÉõ¤Ò¾$hšßÛFœ³ÝIoi%äPÛ´SIsc;²±Ü€$–Æ2mÍ[_m3Y¾•ÚC§é<—×±*©i 1òŠg¸[yÁó¯_á\‰»™‘}’çþ}åÿ¾ d¹ÿŸyïƒU%ñ߇Ì]¾†™£Âú£(E[‹©äXâ(Ä(Qº)Á-±G˜¤ð ]MÅö µ‚}>)åY.ÚÒ_(Ç2Û¸ˆË—xÙ“i]£*Íó:©ÁÈ”W+}’çþ}åÿ¾ d¹ÿŸyïƒPCâó äѼSßM}¨\ŦYBaI|«`±MÌŒŠq*ÈÀn,UÁƹã]7N²¸¸– ¶{wº[¢)–5·Fvv]Ü#(B¤õóáé¼QÊ"û%ÏüûËÿ|>Ésÿ>òÿß ¾ñ¥ÔÚ}œZ òßKv±Ïa)€ÌaxnKåòÐ0åó…n9RFø—ḵ‹Í>kŸ/ì¾xy|Èß- ³J<¥s0Ú#“–@§oî]Ç(\Ÿì—?óï/ýðhû%ÏüûËÿ|d.¼»Öth!ÐîŦ£o<Ù2Û»V· 0d˜¡‹6pK uë(å œ·Ù.çÞ_ûàÑöKŸù÷—þø5ÔÑG(\å¾Ésÿ>òÿß²\ÿϼ¿÷Á®¦Š9Bç-öKŸù÷—þø4}’çþ}åÿ¾ u4QÊ9o²\ÿϼ¿÷Á£ì—?óï/ýðk©¢ŽP¹Ë}’çþ}åÿ¾ d¹ÿŸyïƒ]Mr…Î[ì—?óï/ýðhû%ÏüûËÿ|êh£”.rßd¹ÿŸyïƒGÙ.çÞ_ûà×SE¡s–û%ÏüûËÿ|>Ésÿ>òÿߺš(å œ·Ù.çÞ_ûàÑöKŸù÷—þø5ÔÑG(\å¾Ésÿ>òÿß²\ÿϼ¿÷Á®¦Š9Bç-öKŸù÷—þø4}’çþ}åÿ¾ u4QÊ9o²\ÿϼ¿÷Á£ì—?óï/ýðk©¢ŽP¹Ë}’çþ}åÿ¾ d¹ÿŸyïƒ]Mr…Î[ì—?óï/ýðhû%ÏüûËÿ|êh£”.rßd¹ÿŸyïƒOH¤Š)üÈÝ3”ŒüË]5fêßêýs?úPÕ‚æxßÄoù¥ÿ®Iü«Ù+Æþ#ÈÝ/ýrOåJ;žÕsþµëšè"¹ßÿÈ£©×/ê+¢¹ÿZ¿õÍ?ô\ïŒäQÔ¿ë—õº‡C½¼³¹–ò «[ˆ¢x£xÈ– !Š̸ûŸ­CcÕÅž£qu‹övTH¡ÛÔl“½û£§õ­J¯`ÛôëfÝ»1)Ý»vxçsgþú?SÖ´$MFºÓ.íÓïK  ú•"¹=^ËSÕí£ÓÓNx¦XBHÏ¥imæ4~û/šZ5_8ëå±q· Î{s×ÃB·ÄmJ¼©;Äí«›> ÓM®‰oçÝìÑíâ··;×,±Ëo(/òòw[F1ÁoPF½æ©mkiq2Í nÞXeІ8ÿÇþù>†²§Õ'ÓÞ9'Ôm˜¾wGq"ÄÇ;0¹8ê[Ž'"êW…6”ˆ7-‡ZøQ,ôéì"Ö5Uµ6gj‹2§Ø¢#Ê* –Pkɽ†Þ-º–§¢É~ÚòËwfN¥5µ± &?â^›<Ø[†;îðG?¼_˜`mÖÒ¼Ai©I$>}¢Ü,›8®ùƒhl¯‘É;áµÿ]i>1¼·’×ÎÓ"¶Y‘iÌîÓlQÈ]­ä”©w@>÷©+ÄN..Ìê¤Ñ­¯ï5™¯ï"Ýw-¿Ù%†Pà ñpFÝË9•ÆC¸ÈùEËk`ÆMvòæXn ÃÉ-Â<˜Ú0®ª ª£r†99'€Ò|Y(Ñæ}j$²Ì]-ì¸džHv@åÛr Ǭ±ÿx ×Õ5¸tË«KAo5ÕåÞó´-»„±FU8Èã9ç `0¬h/…íoü'e£jú¢”d/ªA‰¢½™ØI)%вƒ!v ÝÆ0¸ÐÔ©dl¦hÝUe*μpì»'9Ä1ò âÓÆ0¬Ó@ÖW“˜¤dibHÑ7Áa¤Éfx¶ƒÓNÀN×·Œ­”®Ÿ|ÐÛAçÞJ{mT<ˆûÁ|±V†Lì ¼g#%ØXìu- MÔ5FÕ§-­øHV)à’2a1ùÀ2‡VRJÜJ§p#`¢-ÖÚâw¶×¯ Þic¶ŽX¼¸f”±ySsÎí¶Bè }ß•vùòøúÃKF‹V¸Ý8¹º.ÛâO.¹–4;Y”¾da7ËÈÉèu-dØ_[Yŧ^_\\G$ª–Æ!µP bLŽ£¬‹Ó4s‹ é:mÄw–º¤±ßý¢Iî.”ÂçÌ1ùŠê åE’Š­òg9f-Ò}®Ûþ~"ÿ¾Åy´>1Ó®c¸–ÚÉ ‡ÉQÔ•¦Xš$RÄ|Íæ¨çpwmIŽçÅÖöÞCÜÛÜÚF“Ëà–5sKvŸklsÉ@Þ0 œÁv=7ívßóñýö(û]·üüEÿ}Šòû麌l¶Í=Ø‘cKHe‚WrÊì0é!Œ|±Èp\“§+›ºF³w¨jº¤útÐEk"*JLx\ØÛIpdn@Û€9'©Ì=&Š(ªQEQEQEQEQEQEQEQEQEQEQEQEVn­þ¨ÿ×3ÿ¡%iVn­þ¨ÿ×3ÿ¡%'°# ¼oâ7üÒÿ×$þUì•ã¿än—þ¹'ò©Žå3Ú®Ö¯ýsOýW;ãùu/úåýEtW?ëWþ¹§þ‚+ñüŠ:—ýrþ¢—Pèz]W°múu³nݘ”îÝ»<s¹³ÿ}©ëV*½ƒoÓ­›vìħvíÙàsÍŸûèýOZпµûnsi¿gŸG»Û¸œ~5‹>‘wu{¨wf·VqÛÏ*Û6LY—hÎ8ÁyqÎzœ`ljW/g¥^]F¼0<Š¡!Iü«“—Æ&±©iÐkúDú•¥·˜Ðûì¾ihÕ|âw¯–ÅÆÜ€W9ìÖê6†ÿL»³yfx^ øÎÝÊFqß­shúì;¢ÓÞgÆ÷ûSŒú<¾ì?™$ûÍRÚÖÒâeš)ݼ± Ë qÿŽ7ýò} eOªO§¼rO¨Û1|îŽâE‰Žvar0qÔ·NG*4\—´7¢æ“å.iº\‘H.¯Ìmr¹¢1dˆt$XŽøäâ]è+.¹{~öÒÊÓˆ«Ç¹•#º0êÉϰÆ1[ZWˆ-5)$‡Ï´[…“bÇÀ0m •à9#§cYÞ$ñö‰ámF;-F]²„òŸ6$ò¢$€Û]Õ¤û¯òƾ^™+©FŸ"Tö"n\Þöæü"2-ýÌö¶ÓÜݱ‘3#K$ž`_»ƒffÇ]ÑÄyÛVu¿ ¾½j-.þÖ,Û‰í’$)8È8bÈXc*Fr@#GUñDïnN›iw ©ÛZA„^T‡í±Á4j¥‹ç™%ùIî“ãÈ5_O¾û;}–)u.$„Mm»âI=ó“žLN+Ø[K0þÕÚö;FÐßé—vbO,Ï ÄÛ¹HÎ;õ®r ]‡s´Z{ÌøÞÿjqŸ@—À‡ó$“ÖW§x²ö9‹ëRG»Ãöjé²Ã,RK4qq4²á¤ž5ÁʰÆT*ááU§#8U”‘½¦érE º¿1µÊäFˆÅ’!ÐHb;à`p;’ÝCÃé}¨›Øõ ë)%‰`¹Ž«öˆ”±U,T²c̓挣|眅Æ=÷‹.£ñ¤ze†}}\Çso¥¤Qg"8i~P·uÎ[¡Yñ¨ŸÂúÅï‡à»™-ôÉnRTŒE†ÛÏŒ2ÈÁÉÚÑž‡ÎèÀiNœiÇ–$ÊNNìÔo ÀÏ" Fùl^í/VÈy^ZL.à°b›þi’ ‡`ùq—¢øi’͚ܚZ\ZÉod {_ìð@‘¼å‡ÞØV v®G, ‰ãÈ#{Õ—O¾ž:[˸c‰#¶….'‹s+K½°-܉!A;E‰¼w¦A©vÐÏýŸ¦ÊÖÒÞùˆÍÀuÉÁ26ö.ª˜ù·m!’ à‹UžkæÔ¯›W–XåþÓÙÌ¥ã_•b¶Y,Œpý~TÛ^oËu«^5Ƴ|ÚmÖŸ Ì[ÑžóNÒ‰KFJ©`yE1–( MÅšV½£\ê\G½«²\´“FË Us"3FFÖVʱ88 síÿÚz?Úô »¯7ˆn<Ï2½µ›)÷¶üß(#$mܹȦþ¶ûvÐ]ÝÛË ì÷Ð]FPÉ ²¼ŒäR„bi §ƒê¬ù< ×vÊÓȶֶó˜83½Ô·Ü4ÄmØ¥d…\ %ÈÚª¸m ê÷:µ•Ë]ùm%½Á‡Ì[w¶2 ˆùh$%â?>6¹É8ù]kr€9÷ð±o&u×uUÔ¢óö†èZFGÙ¹64f%SåG÷QyLç,å´4Ý%4¹nü‹™Í½Ä­2Û>Ò»³<…NÝß3³1ÜÍŽ‹´qZPEPEPEPEPEPEPEPEPEPEPEPEPEPEPYº·ú£ÿ\Ïþ„•¥Yº·ú£ÿ\Ïþ„”žÀŒ*ñ¿ˆßò7Kÿ\“ùW²WüFÿ‘º_úäŸÊ¦;”Ïj¹ÿZ¿õÍ?ô\ïŒäQÔ¿ë—õÑ\ÿ­_úæŸú®wÆ?ò(ê_õËúŠ]C¡ÞÞYÜËyÕ­ÄQ@H9l×Ò¾$hšßÛFœ³ÝIoi%äPÛ´SIsc;²±Ü€$–Æ2mÍ[_m3Y¾•ÚC§é<—×±*©i 1òŠg¸[yÁó¯_áÏ> «êdêwqé7öþ]Ŭf<ÜožæiQÉŒ•OôªQ•°O9օσ,¯µ+FöòîâòD o3,JÖŠ²¬È¬cpY 7ýßF}Ô×[Ôt›«;mVãíXéPh,(¿éw—¬PùdŒ¼Sv(óž2WSMñ(Ô%h[IÔ­§ŽôÙM«y-ä ùÙB*ÏÞ`1Íhi¶ §Û´r_]ÞÊî]çºe,Ç  ŠaT¤ä’L—Ö¿m³’Ü\OnÍ‚³@û]AŽTô ‚Aåí¼Yt5˜—N¾ÔþÕwuö(m¼„ha¶1A.ó# æbì9bU‡N€_‰~—X³Óá¹ó>Õä—Ì0Ó*´CÊgÂHùT*7rFÖÚÐi:JiQOþ“=ÕÅ̾uÅÌûwÊûU!TaåQ÷rrI'B¹{oè÷P[KŸý"+)QMßé.ˆªF>lLãøVT<î§7ÄÍ MÔå¶»†=I –‘Ý<Í$aP³ƒ4ˆ¸Õq»-Ë(dù¨´¢¹{OX_NÞÊùôÓ-¼?Ú[cï"x†ÒþoÍçÄ>ç¹Àˆäøƒ¥[Øû»{»[I-ÅÕœÓyao".ˆÿšõ¾^<ÀNb e^Æâ[»8çšÊ{)9‚r…ÓŽJ3/=x'¯¯b€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÍÕ¿Õúæô$­*ÍÕ¿Õúæô$¤öaWüFÿ‘º_úäŸÊ½’¼oâ7üÒÿ×$þU1ܦ{UÏúÕÿ®iÿ Šç|cÿ"Ž¥ÿ\¿¨®Šçýjÿ×4ÿÐEs¾1ÿ‘GRÿ®_ÔRêöòÎæ[È.­n"‰âã"XL€†({2ãî~µWJÑ_LûBh>Ëchm-áŠ]©òc,ÎÄàFlQZVÔ`k­2îÝ>ô°º©R+•Ö4ý[V²ŠÍt¹aq”ò¼±˜ÁÛ‚FqŸ(>»:+ž¾¾#jUåIÞ!\ÙðVšmtK>ïfo½¹Þ¹eŽ[yA—“ºÚ0qŽ z‚:J+ Äçí|(–ztökªÚ›F³µE™SìQåPK( µäÞÃo–Ý_RðÝæ£ý»æIiËmmËÿôÙæÂp8c¾ïsûÅù†Þ¢Šæï<;5ëëט为x ƒ,¦3À«$!ŽÖ­Á•òUø``6ˆü7áÍFÅ$¹Õµ9ä¾›P7Ò¥R­þŽ »,q‰ „L0^»rÝEÏè>þ΃J¹¼“~§mi4w ~îY®9g|2!#1—àÛmZÅc©jQZB‰-–D pñF‘£»ß±Æ «*¸*C0n’Šçíü£Û}ˇd»{¤ùSæÝ÷co—˜Ól_áûÕ²N¶nÖ¯ýsOýVf©§ÿiZG›å칂}ÛsŸ*T“{ìÆ{g<Ò2ËÅv’؉î&³™ÚFDM"Y5 … I;# 1¸gåÀܼüÀQŠ­ ÷âY<Ø£¹Xí~Ç —,fd/¶0Ä®eÆà1ÊŽ¤fÝ\_[_Ø]ÃowrB ð£(å |¡ÐîÌkƒœc<‚2,|."M¤ê(“F¾LfîÜÊ¢/&Þ2WL¶mîȰÛЀ Z7Š­/´Ý-®¤Ùwum’˜á“ÉŽIX!“QŽá…fÉܽw ݶñ•w¢K¬Áu¿NŠ3+N#lm ¸‘ÆNÁz‚à+}>âÊMö3ß|Óiê÷áyr|µ"58ÚÄe°ÀW_ûþ(ŸøG>Óÿ0ï°}£Ëÿ¦{7íÏãŒþ4­¡ÝØ[lN›ÈÁTr9'ÒµîÖ¯ýsOýT4€·âM7Oñ>•áÙJ%Ë´›û³+¨ûÇ3ïŒæÅ•¦§éÑX[ið%¬^QT-dÄFÄ–%™Di†9#bóÀ¬Ê)ó8lô+yne‡H±ŽK©V{‡HáY·«±æ`ß0'yëR\Ť^ÛÜÛÝéÖ“Átáî#•ae™€P ‚pÄ@ þèô‘EÁcm[NO/mœ åJóÇ(l‘÷nqÏ w¾OS¹½MXþÑ‹Óÿ"'ÿ\åsŽûF/OüˆŸüUÚ1zäDÿ⫝̸¢Ž`±ÑÿhÅéÿ‘ÿŠ£ûF/OüˆŸüUs”QÌ:?í½?ò"ñThÅéÿ‘ÿŠ®rŠ9‚ÇGý£§þDOþ*í½?ò"ñUÎQG0Xèÿ´bôÿȉÿÅQý£§þDOþ*¹Ê(æ öŒ^Ÿù?øª?´bôÿȉÿÅW9EÁc£þÑ‹Óÿ"'ÿGöŒ^Ÿù?øªç(£˜,tÚ1zäDÿâ¨þÑ‹Óÿ"'ÿ\åsŽûF/OüˆŸüUÚ1zäDÿ⫝̸¢Ž`±ÑÿhÅéÿ‘ÿŠ£ûF/OüˆŸüUs”QÌ:?í½?ò"ñThÅéÿ‘ÿŠ®rŠ9‚ÇGý£§þDOþ*í½?ò"ñUÎQG0Xèÿ´bôÿȉÿÅQý£§þDOþ*¹Ê(æ öŒ^Ÿù?øª?´bôÿȉÿÅW9EÁc£þÑ‹Óÿ"'ÿGöŒ^Ÿù?øªç(£˜,tÚ1zäDÿâ¨þÑ‹Óÿ"'ÿ\åsŽûF/OüˆŸüUÚ1zäDÿ⫝̸¢Ž`±ÑÿhÅéÿ‘ÿŠ£ûF/OüˆŸüUs”QÌ:?í½?ò"ñThÅéÿ‘ÿŠ®rŠ9‚ÇGý£§þDOþ*ªj)<,T„#Ô’K/¡>†±è¢á`¯øÿ#t¿õÉ?•{%xßÄoù¥ÿ®Iü¨ŽàÏj¹ÿZ¿õÍ?ôPÔ×?ëWþ¹§þ‚*@QE (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ñ¿ˆßò7Kÿ\“ùW²WüFÿ‘º_úäŸÊœw=ªçýjÿ×4ÿÐECS\ÿ­_úæŸú¨iQE (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Æþ#ÈÝ/ýrOå^É^7ñþFéë’*qÜLö«Ÿõ«ÿ\ÓÿA Iy’U̳LjÓýQAŸ”uÜ­ý*¿ÙÓþ~ï¿ï¸¿øÝ $¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¢£û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün€$¯øÿ#t¿õÉ?•{ÙÓþ~ï¿ï¸¿øÝxÿÄoù¥ÿ®Iü©Çpgµ\ÿ­_úæŸú¨jkŸõ«ÿ\ÓÿA (¢…Q@Q@HÞVÛ3ž¸Qš“ì—?óï/ýðh‡ýUÇýsúÔ4›ì—?óï/ýðhû%ÏüûËÿ|†ŠMöKŸù÷—þø4}’çþ}åÿ¾ TkˆÕcaºO4â1 pOAÏšz:È»—8äF#‚=Ésÿ>òÿß²\ÿϼ¿÷Áªîû6pIwHÀ¬ÁGêiÔ7Ù.çÞ_ûàÑöKŸù÷—þø5 UÔÿäyÿ\ÿA4v¤¸†9¡äŠEŽŠJ²žAuŸöKŸù÷—þø5›£ÿȽ¤Ø>ÛÿE-\  ¾Ésÿ>òÿß²\ÿϼ¿÷Á¬Í[V±Ðôɵ-J"Ò¾d›±– 8POR;TëwßKf¯›ˆ£I]0xW,ç§%òúPϲ\ÿϼ¿÷Á£ì—?óï/ýðj†Öî ØZ[wÞ‹$‘‚>drŒ9ôe#ð  Ÿd¹ÿŸyïƒGÙ.çÞ_ûàÕh¦Št/ ‰"†d,Œ ¤«;‚>„}MöKŸù÷—þø5€Ã*E()#©eFà°É¸˜¤¬7ÿ‘îûIÿ£R€,Ýø“B°º{[ÍkN¶¸LoŠk¤G\ŒŒ‚r8 þ5ü&ÿ¡HÿÀè¿øª³¡K$W^ òätΫÎÖ#?è–µ¯ö»Ÿùø—þû4ÏÿÂaáúôü‹ÿŠ£þ ÐǤàt_üUtk¹ÿŸ‰ï³Ymâ¨F§&œ'Ôd¸ŽEŠC¬ï3*° "©AÃ)9<Î(Ÿü&ÿ¡HÿÀè¿øª?á0ðÇý zGþEÿÅVì:„óÁÉ=ÀY0¹3Êœ}ˆÈª·šóYh—´’Ý›x-šå— ²mUÜFÖÁ Ð㞸  ÏøL<1ÿC‘ÿÑñTÂaáúôü‹ÿŠ®ƒíw?óñ/ýöhû]ÏüüKÿ}š4Ÿÿ„ÃÃô1éøÿSÚx“B¿ºK[=kN¹¸|스wl œrxþ³ö»Ÿùø—þû5ÃøŠâi¾'xM%šGU• Ä€L2gü¨¶H%•wG¸é•Rißd¹ÿŸyïƒCÇœ_õÑÿ’Ô47Ù.çÞ_ûàÑöKŸù÷—þø5 gË­YE¨ ô™'ܨÞM¬²¤lØÀwU*‡˜Œ àƒ@ßd¹ÿŸyïƒGÙ.çÞ_ûàÔ4P2o²\ÿϼ¿÷Á£ì—?óï/ýðk?R¿‹KÒîõ ÕÚXwT±URÇÇ8j}’çþ}åÿ¾ G4oo™:4I¸.çFI žä¹¦Ö‰ÿÔiŸö¶ÿÐÅnWüFÿ‘º_úäŸÊ½’¼oâ7üÒÿ×$þTã¸3Ú®Ö¯ýsOýT55ÏúÕÿ®iÿ Š†Q@Š( Š(  ¡ÿUqÿ\Çþ„µ Cuw=œ­me%ä®ãtLrIb8ãÜò>£'û_Zÿ¡fü ‡ÿŠ FåWšÜË*¹J cÉŸ>Y9êqéוnƒu¬¿í}kþ…™ÿð.þ*í}kþ…™ÿð.þ*€4¯åíf¹.òY~б˜˜»zÉ€Ý2*´=ݘ[.gH¤y@ÞK³³Îù䜩ÝÇwJ®šÎ¸Œ<7p¬:y?ú:Ms^—g‡nŸ7^ÄqÿS@i=™óÙ!#oµ†kÀb,WÏ 6–%¾TÛÔcåïÝöêÉn¨Ñ¢lù~C÷û–ä“É99ïžOZÇþ×Ö¿èYŸÿáÿâ¨þ×Ö¿èYŸÿáÿâ¨rªêò ¼ÿ®ÿ šÍþ×Ö¿èYŸÿáÿâª+GZ¸µšøFç_17}ªŒŒz•€ÕÑÿä^Ò?ìmÿ¢–®W=i¬ÚiÖV£Ã·ö{Xaf7PŒ²FªxÜxÈ8©µõ¯úgÿÀ¸øªlx¨¢è«$’à Q^ÙË$“J±¢ªÜÆÌK1 ?^ƒšàc²M[P»Ó´ûÛkí>Ñm£Š+«Y¤¸µíW˲â6žÌ|½Àî Wyý¯­г?þÃÿÅQý¯­г?þÃÿÅPµÿû ÿí¥­jWwyâ/VÕ#Ó<7öÛk‹±r—ê% Ç¥Á1½sùÅý½ã¯ú×ÿáÿã”ìm\X—A±ñF³>­­Ãgroc–(N°aE¼ ˆHå[ï/#F)¿ÛÞ:ÿ¡=ð.þ9Gö÷Ž¿èO_ü ‡ÿŽQ`*h~»²Òbž]2õˆît퓃š°ÇªLƒ¸Iäg¨niÂ)«cý™4¯2ïûì²Kx -þÉåˆí¤WÞ™só\‚3óloxëþ„õÿÀ¸øåÛÞ:ÿ¡=ð.þ9@šVšN·|,¬á´Ó$¶ƒËŽTŒÌ_0ì^´Ä Ç Î8Ú®'û{Ç_ô'¯þÃÿÇ(þÞñ×ý ëÿpÿñÊ,m\N½ÿ%G¿IÿôL´oxëþ„õÿÀ¸øåT··ñ>¯ã}SÔôc‘”I ¸‰Æ'QÀrs–èíÿq×GþKPÕ-GQ½¶Ha³Ò&¼ÁggY£EÀæl“Ǧ:~?µõ¯úgÿÀ¸øª@nV€½Ñå{ìË›¨%»–u»…â‹,­!Þ¬áRä|¡²#’T/ö¾µÿBÌÿøÿGö¾µÿBÌÿøÿE€ä…õ[EŒú[ùw-êJRÕ-§]ÀìP&×jÎG›–ÁÇV êMáç·Ô¦h)¡Ç<ŸgÓ#”]Ñ[âEŽFTP.fÌ„€C[Úú×ý 3ÿà\?üUÚú×ý 3ÿà\?üU09MCÂZœÓkn^KyqèYüËdŠd‘$E»oœø Úä )pˆ£Öö¾µÿBÌÿøÿGö¾µÿBÌÿøÿH ÊÃñ?ú3þÂvßú£û_Zÿ¡fü ‡ÿŠª—Ϭj¯cèRÛ¤WÌÒ5ÌL«‚x ž™¡Ó×üFÿ‘º_úäŸÊ½’¼oâ7üÒÿ×$þTã¸3Ú®Ö¯ýsOýT5æ|W¾–RÃL·UÀb@ŸÂ™ÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©Q^[ÿ NÿþÖß÷ÓQÿ NÿþÖß÷ÓQÊÂç©WüFÿ‘º_úäŸÊ´¿áißÿÐ:Ûþújå5ýjM{S7Ò±; Rªr8¦•„ÙÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/disconnect.png000066400000000000000000000237331203611042400313140ustar00rootroot00000000000000‰PNG  IHDR¹´†ßÅ pHYsÄÄ•+tIMEÕ ;¢]á…tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝyœÕ¹7ðß©¥«—Ù7–a`f#ÐÄŒÀ ¢FÅ}Á€FÂuI¸^1Q¹‰šèÍ›p FÇ]scâp!‰ "(q7A#ÂȳÏôVÕUçý£º‹¢»§«§§‡n†çûá£ÕÕ§ÎyNUõÓ§ªzªç6W_}!ä÷ÀKí/™•+Í,Y_7ª°°¨¼¼"¡BHhmméîîújs3l3š+¯¾ú¶c9zRÃñG5€(Š9 ”BrH×u7~ýöÚ>ùôïfºdœs3Q6žrâ˜Ã†üAUÕüA=æ:`B9м^Ï#º\²×çù÷—;ÞøëòjWIDAT3]JêêjÌD¹kgKKkHUÕ®.®&„Ü(*ò¹\®Šr÷˜Ã†'vuw` ÜÚ8uêÉ“iiéÞ³§Ýßãµ\‡J!Yðåö­õÏ=Ñ×¥¾:÷²£«÷øªªJ+* ßZóéo¾):¼¬¥¥kë×{ÚÛi8I$Zý-õÏ=qá‚3xíHM9Š#z-›ñC'¤­­lËî§šžØrù‚r_E8¤|èð2’Y©ßï5·Û•‹BHöUÞ×4cÖIÎ>iÖÃj:‹ˆÿÜ `Ƭ“^z¼ÉuãíÁ æ÷GG—âêlѵoBÈ £B\å²ÛØPIDAT-oïЊÜ\‘#8c²Îã&\Uî ®…B,Fìç@ZQ©Ö¸2 2³·Q"Hå\æa½GÅG_´µªº¦ê./,—«†x¼>ù€÷šBú&6x$Âõ€¨ës–þ€ÿ[rY$bŒYßù+Ï.¼Z…UÍ`ºÀL‰áH°åJQÜï¯w†®¡¥%pÉÍ»ýŸíìÚ檪‡Uµ¥K ~.«ÆY>thÁî6!„ô‰®F pMeZ0²ªy;€é£ªŸ¼â²H¬@¸ô±'Ì·öÞ| Ýà†Ž„¬(`  î/S¹@ »ÝZ‡æöÉaUSU5“ÅyIDATVCa5 ùEgOwpê´ú¢"700ÎÀα~ýêõëV¿ÿÁ;³g_4­ñŒŠŠª zøòËÏ=ñdÓìÙÍ=ÿò?>ý8€¹ç_žáÚŠ™{Átsâ„ãOš8qÊ„ S¬·²ÕD®X«ëüéÂúõ«×­[ýÁï,XpCcãé~øÞ¿üeå£>ïñxƒÁÀ•WÎ:õÔ³®ºjÑLÿÅ/~;jT½µìLð‡?¬ˆÀòs.Bç`Œœs€1°è]3à"ÐÅhz\Õ¼}ú¨êGÎ?Ï|9ïégÌD @„EºhAÀ`膙!%c‚ÀDIdÀJCNâo´IDAT†aDö¶…z$=Ò‚pXUÃa5Rƒ¡P0„Â?ë¬êm˜TÏÌ\Éðó_Üð^wSYIék^Ù²{ûÈê!]ïS××­{ó‰'›žxèé!UC8ÀA…b¯»[Í™V½´&<üøýÞ}ë‡ÿû륬61>øàÝ?Ø0Áu‰oÅ­®žlwaÅŠgüþ§žx!¢©÷5-󸤆)Ó¿ùÍcÿò—•<ì÷”ïÙÓ à„ãŽ/ñºÜtÓ÷{ð¥åöJJóxÝf w.B ãà±QŸu}"𯏉A¶ßp]õ¯–ÁJ—³çÌûÓ³V¢Ü~ÃuRFIDATtÆõ0ç‘I9ãà\` Ñq¥·[±r± Còº‚``d¡ P>ìð MÓªùOUU-¬j¢(J²yÏÍ+ïï¿ÿîûï­ÿÅÏ~UVRªq>ù”3Ü‚ÈÁe&ô©ß¿þÕ†T ‰p®qãÒKæ¹€,õ­žÞ0·röŒ9WÿÒ7¬=qâdYo"ë~~×üð? ñ_<öÕ¥rCÌvü~æ6ýñ’;$Æ8pؘoØÛ²wȰ­ÆŒce‹úß,\ì-*²×“õÀò +s(¶ã1€³ØDtž®ƒ œ €`Û¢E#î½±ti%Êm‹í«Î0 ëm¯êIDAT$ÙÌ ¢™À‚ H’(I‚hþÂó­xk[hí¦®v›#b«âi÷úz ƒÅ%‘òr ©’†ët—Š’(I¢(I¢$Š’ôá‡ÔŽªã¸ÈDIÔD&JâºõkfÎlœ9³qÝú5¢$šÿfÎl|ýWïºë'3g6®Xù\¿Ëœi<}ÆdCdæR§Ï˜¬ 0ß5+y i™ùrãgŸ<д̬¡­½eÅÊçfÎl| i™Y›ýŸµ*DI^3Àßÿñ±[íMìÚ½ã©?<WƒÕÄMËvíÞaÎL¿G)æ'­$±9û:‰ëTÜê’$iÖÌÆY3ׯ_ÓÔ´L’$I’Ö¯_¥ø”ÑIDATcÍ4çÌšÙøÙgŸ65-›5³qåÊçÚÛ[W®|nÖÌÆ¦¦e~·´¿3Î<ÀêµopQ0DA˜&°‘#klÚü¥( ÍÍ_¨^!š1¦œ|ÊË/ÿI‘$I’¬Õ.2DI’%16iþ×ütH4ƒƒk:të_ó¢kÍÒJ”Í‹®µ×4ƒ$A”Q’A€9®Ù~ßùøÎ®Þîi¡p8 ƒj0 ÃP( C¡`Hu¹„sO¾’ñ}Iü•W^PR\Êí™ øÛßÖÝs÷Òßþæ1E’æ]sI¡ÇwÂw&šoÝû¿÷üñÿV¨jèÒ+ÏÁfŸ{á+¯®·|•IDAT;óŒ‰V½´¬—.zt‹úêQc;ÂÀ-Kn¸oùcW\|ÕÜ‹g<üÐò?<µò´©Óç^çœs_|ñ9ö|`ýú·Ì —"xgÃ:èºìÞ÷ɱr«¡jŠw_披ÇþÒ¬*éË}µiºâs'®[YÛÛÛ\4÷²¸j¿÷½ïƒóK¯:ñâOš4¹ÔWºbÅŸ¢M˜Ëb¿zd›oV2}ÆdsÎ;ÖÁ0’6×ÛJH|‹ÛΛ™ßV¨æËw6¬CĈ+c’äè´¡é.ŸÇ^sQIÉE—\QU5ä§wüäÑGî¿ëç¿f¢`†ô醫–\²`;œ(**¾áÆÿ:ÿü³öÕ/õ–äF˱­wÆbƒJØÎ ºa"pãÚU/[‰rÓ‚£›šK—÷Mÿ®€|$quIDATÃУ—$šµ B,WŠDIbÑkI0ª t•ªômjéjm7½ÃÑCï° «j8rÒ‰õ§N;J–%°XTœŸp·^|ñ¹¯6o÷íñöÎ44LY»v5—,8éĉº¦»l’éLgöV\1kæÞ=;{ô8Å«ØË ©ª\ró­§ŸvæÂÿ˜¿~ý[ÿs÷²¸à³Ø#³’U/­±æèšž´¹Þzšä-Û%Å%ÚC5_žtâD]‹Ä•I=mùîÙgÿôŽŸ¼³a¡jÞbïÈšjM/PU9DqGOëX5Œ9âÁŸ?ÿòuœ®îäãæ1‹ýt‘ÇF›†Á Ãç_+IDATàœ3ƽþš•(¿˜w•ùßÃy±tyï´Ó9çºnžX„ì’Íß#Áˆ 6®d²Ëö—àCd#¨—2LAbïÿk[  †ÂÁ «ápd„úy—<ª¦2z݉Á kʔƆI“_~íÅ#Ž>¢¸¤øùçŸóz½Ó§Ÿ1gÎùk×®þjó&o»À§­x\.ÛQ^:Ó™½WÌÔãï~òwλrÁqÇŒ÷øÜöãͧŸùý¨Qµ “=]rÉek×®þøÓO=ó´çŸ®¢¢¢¡arVzdÕ<´fÈ#<8{öy ““6`òä©kÖ¼Ù[’¯— i¨qeRO¯tHxÉIDATZõê¦M_^{í¢¶¶67/¾M kfŸüä¿úÓ[oøÁbn·’ØúñÇŸ°dÉmwÞ¹4®NB²‡Ù—,ú½Íw¡ˆ!1pˆ·½û†•(?¿â{Ö¸óó+¾7ö±‡¬jÞ>çðº¥ß™ªëÑ3–ŠK2ëÓTÖï+E²ý>‰+‡WJ{à–¦¹Ç1ô‰ßÛ É"¾ñÍ '~Ú©GV+oFW\%wü쮕+VNmœàškž2uº®é§œrêwÜýýëæXöëûލ?ª°¤@Qö}bÓ™Îì­¸b¦Ï˜k0úÈ}Åzºü»·µ62ª½LoÓ=¢wwú[w·û ½E¥Vg„‚áí›wU× uÇ.¯%­¡moGYe 1º¶“KÖ7·kýuÆœoÔ74M&JKºì>×#†a²ü¯-;NyéY3ûuutÞ}Ï#lÁ‚[ÿ릫Ê+ÊÍv`R›)Ĺ­q3MîËž±?Ù7¯†3ðè ú’ŠEÅ IDAT%‡Ê•¹aÔÌ£[3ÿ0ÆÁÙ˧Ÿ3bØÁä´k M €m;wŸùÚ æP°moëÏñ°@!»äý¯¼[£GóÒ’9àdÌž·­¿¾Üo7‰ž¿$9AŸ×\¡>Wø~g£™3vÖ»ö¨C«\˜ýç)E—Bô¬˜ ÖùJY£?ߌ~´2&xì 9³ŽÉYìÚÀø~£ÎhB¥ÏlnpúÈæ ­úܰŽhÍWÌÃq0†ÀÂÅÞå÷ìÚSÚ×:#z{`ábYÍû\ìû{ð¢’2‰nôK\fž6î,ö.¿ÇšcþL=v »× Ï¡AåÁ(­ó•ªŽeÅçUƒ_…¦ÃàÐ9ºü‘gVþ CFµììøÝ ïW—Éßz4 …#À||éÃ=ítøÑA‰Wt¹\ ⨺Ú÷7~ÕÚÚšqèq»xÒÓ@Ög©?»u>„[‰›™“ó_Ñbf}1‡l‰k&±X:5€F‰ò •Ö¸2 A8DEv¹™,ô„¡s0ƒ ªf´g˜ÄIDAT÷pH^ððß6îi`xu%¼.p@ñtù#-á‘I7Ðá|ðÈ]~¹Ç.«9lóæÍ………Š¢¤h=îœ}Ò]m€v¾¾úàÏ@oã¾ÖÏ#âÔÕ’ŸÒW¶ƒ&È’"…4hè4ŠÇ5ÿÒS3âäS§ž|â—ˆn ºE”%Í@„#A›Ld‚ì’$±°¸dOK[Gg§cÖØ!#âÄeûùMžÁ²Ù þlÿ»“-C?ó~o«(Í¡å@ˇmG2Ö¸2ðk®B&H¢ªA7Àà` ‹çO™;#¨(®!eR(‚O?ÿaAñ(\¬ô IDATlÝ %çà ¢(—ƒ; wÑ®]»†TUõ§‰'­úT8ÅG(ý’F:•8–±‡dŸ™"ìÞêOyê ÓìKêjãNzØkH³­ÌâÉ`Á¤ò䫎ô[°àÖå÷ݶðÚ¥Knžß[¡Ï·î),,¨¨R\Rlà€a Ügà‚I„ÁÁ¶ïî™uåòÝíò·¦Ö ^xxe™G‹D«28$ aUmÝÛÖÞѶcË¿ôö³fœ3p=Ì“]3O „ôÉw=hfÈ´Æ•ŒCÓyDç'Á¢CEƒÂ8àVð×·¿ÜÑ7mÂùß;á(±¸PfüoªIDAT«0—À9¸HšaˆLdímíÚUBé¿´r¥fpIçƒkF4?Ñ 3 šüa£éŒ¨YpÞ˜ÉßR8g¡¸D :":ô"z¤§ÛîûßðôIžŒæò$ BHfÒÊ•þ!+†ªšÎóÞ8Ì+8fÞ”$4ïð7ïðÏ›{Âô†¡]=Ð ˜… –X ް¦ë†ÞÙÞ³c«úópBH¾K/Wjº;î ]>ÍårE‡“±ÿ"6´GDGíȲ#ÆT…5h:8ÀØ Ò,ÃÀ îCápgOO sou\š$„ÔÒÊ•¥Þ®ž.&y\Þ‚"ÑÅ­¡blœÈ8±ÌÖIDAT @W1|X᣿<ßëýÁ识 DÀyìêy(¨öø===;·m74uDõˆè!„dQZ¹rX‰û½=-’Ü-vxDÙív»u;µd ‚€·ßùò‹o>¬|„#—hèÑ åÖÀS×õîî®@OO{Ohgó—C }•••ÜGB鯴reE,IJWw·Á$0¡´¢Jv)æÁuôº ‡$aåªO–ÞòKDTÒ̼å¦93¥ÆŽÓuÃèîhïjo÷÷toÛÙÖ¾å㓦ŸRVV> =$„þKëïvdY>n„oOG¨«³½µµeïÞ½ ªŽˆýžp/¿¶R1Ô@ IDAT*ŽCAõê·?ݶ+:‡Î¡jFG[{{kkWWûžŽàgo=3bhå‘c***èNBH?¥{Ÿ¡¡•ec‡÷lÜÞY¦óˆ-b–”)ŸÀ˜uM¼¸¬†»¸bxï0Áhw)’ÁÁ „Õ°¿»³»£-ÐÝÑÖøì½· Œž††S«««EQÈBH¤›+A8fôЖöέ¡r£MÕ4¿?è-,öø $—[@¸ä¢SÚÛÂÅC릜<Î-uú|®°jhª øþîP +ÔÓÓÖ­~ñÉ»úÎOOž2å˜cŽI}× BÉ}¸×¯¢¸ŽýöûŸlÜÞU^. ÿ[UIDAT»»»\nŸäRd—âòxK‹ÝKnž%²Ë-1æîì ôtw~5è×Ô`ww[çÖÞP;&Mœ8qbQQñÀuŒB²¨oOU,((8ùÛãJ>ûç;Ÿ5·W—øB.¹L4$E”\.Yr+_a±¯¸T×#­-=]mwD‹´ùÕ_~âoþ¸ªX™|ÖŒqãÆ—––f|—_B9ÀúüZ¯×{ü±G)/ýøï?ùÇnÃSV\>Äã+Àd—«0Ò!¬»§gÏÞ¶];·u·îîúך²"_÷Æs̱õõ£}>ß@t†BH&Oë–e¹¶¶¶ªªê¸£÷47oÙÜ)?ï2IDAT¼©u «’·¸¬flÀ¯x‹T—K ‡C›?|=¸íï#FŒøÖ”†ñ㎯®®öz½ôˆpBÈA'ôÅóù|µµµÃ‡?>ÜÓãoiÙv´ÆCá°ìö… ‘õì>óÌïŽ|AAÏç„LGN!9ׯ!cLQÜŠâ.,,ª¬¬4 à ?óQ›äïñø ƒ˜Òƒ!µì ôc²,+ŠRZ\8i¤´}Ç.W‡Î1tY–9§; BnY>(fŒ}cÔÐ㇛·íâÍgâBÈÁ.û'%Ištì˜qÅÍ)( !ƒÁ€\’VwÃø#+¼Ÿo)DmlÜIDAT<º¨¨˜.éBvõó·Û=î¸qãŽ7@õBÈD#>BqF¹’BœQ®$„g”+ !ÄåJBqF¹’BœQ®$„g”+ !ÄåJBqF¹’BœQ®$„g”+ !ÄYîñúoXÓÓû_!!„ä›~åJ3KþãÓµqó)cB™Ìsåëo¼afÉÿ÷ë­™7^?À¼y—5oÙ–N%µu5[6oÍ,€Þ–íOWU¾©­«W½ˆúºãbÄ;é«þž¯´'Jóåí·ßš¢|m]¹;xi¶ÛŸðÌÞY}´WeÍIœ™YCý)f¦€¬g%ÇvS/Tq>5IDATž­ú³V­h/ÍÕÎOú/Ãq¥9¨ŒK”¦¢’š®Ž­£jkÒZy8ÉU<ù¶20º@²k î‹ž”•MÓŠõ}÷­ž¸Ë&~3÷V8q¾ý˱‰ÞŠ¥X0[6oMqöÀ^&u£éôÅlȾÆÒYÜZʾlŸB²o踚#‰ë¾½éÔ•$†”XUŠ8Ó‰!n~ŠE—JÆ]#¹r@seo÷ËÞNŽ•¢pÒiÇ’&û˸b)ŒË,Hö±w÷]’¢ÑAöVmú«Â>3iH©ëLQsš«=i$q•¤øêÍl &v!EGz«!ŲIãék×H®äE®D¿/òôi~:ïD©¶IDATf¶ cβŠõµ¿Ô—Þ¤Û€žzБÙéÔoÙ¿WÒÉÈý‰„äJ†¹ÒüUÐ×ÏOrÒh¶d}K±ë¦.@cƃH¿®ƒß~û­]ûm츗q¶lÞjýKún‚A> 0-½ !·ì1»’4ek€™x*&Cû>EBÛ=ç2?ŸÖØXT2ûçÇ¢’}½žô4Ÿ}Ž%1ÅôV¸·³‡ˆ¥lÇ&zKè½-˜úÂE¤ß—¬TÞ×¥âæÄöµæþ‡—ñÌ Ǫ2Û Ib ܺü¾Û^Ó‚X IDAT»tÉÍó3«bTíkúPû!qèjÌ sç]š2 ×v(?B=ºÏ!ÙDƒÊÁŠr%!„8£\I!Î(WBˆ3Ê•„âŒr%!„8£\I!Î(WBˆ3z6!„8£g“Bˆ³?›l õöǹYü£ÝAü÷¿ùykîƒk…§mþô+"É+îÙdµû?·++²~£ª4+ìO»µôü²”í:ÖõÌæH?ž[$Í’ý¼sÕ`•g“1ÆpΑòÙdiÞ6|ËÃŽç*ž|X‡ÚæÈ·Î\²pmÇL”æ„™.Ùï‡Ú§ÛA&Nzœ˜ø­˜þýí¦¸½`êbýx±YûIDAT¼/aЇLØkŽë{f}±žy`oÝqqû“2 ©· Åm@ãÖIꕜÅÛ‰¦ØHØ"‰‚ôãDŠMsKK¥Yaê.šrü¼¤û–%î­¤…“f±¸= ·VRW˜fliÆi•ìm§L×´Ò_9Žƒú¾® ṳ̂!¥®3EÍé¤Þ:‰û@RýßéË,Τ빷ØÒßRiVHe!WrÎíÇàù©·Lêó2ŸµIýù´Ê¤ØA3؃¨/½I3•d·Ñ¬WÞÿÍ‘ñfJ½TÒtf’Ž'çPºL-;Ï&³gÉÞžM–[½íéï¯Yin@¥h4ÍqVv t£ùðÙN<A"îMIDATNs‘ ZÉ¢¤ÃÒ>õât@ŸMfÉá—Xþ 0-½Y¶dz9ò€eÃO¥ÐÛÙ¥¸e÷éÞZI]aŠØ’¶ëØÒÛ53“~_²Ry_—Š›ÓŸ ®wIL³¿ýß½­óeúgŠ-‹ý7nê6E…‰‹Ð!y"z69˜dð¦}h¥YèÙdä Ô§+ÔÖ"Ô`C‰2©ÿfˆ¾¸K(ÄD«.)º'!„8£\I!Î(WBˆ3Ê•„âŒr%!„8£\I!Î(WBˆ3Ê•„âŒr%!„8£\I!Î(WHÕ^ßIDATBˆ3Ê•„âŒr%!„8£û Ò‡ÂMÂãî3d¿Aí tãõó¯»þ6Çb”+ é›|~_?Ýxýü_-{(q~šÏ†9=û§7Ó,I¹’>”¹#uÖhï`,’üD¹’LPî8ÔеBqF¹’BœQ®$„g”+ É=ûO‘…Ÿ%Yjëj–¾S®$„gtœÜ³ž{n6wâ#ÎåCÏ“>ó={J¹’|—4“&”Á*±ï¹ÇDÇà„ä…ÄlhžË;XNçõ‡Ù÷\Gá€Æ•„䩸ñ”ùÒÌ)y2Ô:¤Ð¸’|gs Ö,™ÿCKW’ì¹Ã>¢ÄàM—/·•öIDAT–ľçÊ•„䋤ݽ½ìêm:OÐ18!„8£\I!Î(WBˆ3Ê•„⌮íÒgé?x€ ”+ 雯ŸŸë4únåJBú*éÓ»±Cð»!)Ê•„ôAþîo ¥ó<ØC]Û!„g”+ !ÄåJBqF¹’BœQ®$„g”+ !ÄåJBqF¹’BœQ®$„g”+ !ÄåJBqF¹’BœQ®$„g”+ !ÄåJBq½eã´†;ïz0·¡BH¾iœÖ`NDså¹ç6ž{ncîâ!„¼Æ,¸5×1BH¾ûÿ‘K—ð’Á‰øIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/eclipse-file-menu.jpg000066400000000000000000000667271203611042400324740ustar00rootroot00000000000000ÿØÿàJFIF``ÿþLEAD Technologies Inc. V1.01ÿÛ„    $.' "+"(6(+/1343&8<82<.231  1!!11111111111111111111111111111111111111111111111111ÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀÅGÿÚ ?öKÓäÒlžKVv 3B¤“´rx  Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…Ùoýí?ïÊÿ…G-† ‘G-¥Œo3Z4Î ÀÎ?@hòOì7þöŸ÷å€ì7þöŸ÷å€#·°Ñî#ó-í,e@Ì»’4aH##¸ ƒî(ó"ž˜Ó ébüÇæ‹\Gæìþöθ÷Å [Û¦àôµú–ÿ²4ßúÚß•ÿ ?²4ßúÚß•ÿ ?²4ßúÚß•ÿ ?²4ßúÚß•ÿ Ž+ Wš8m,]à}’ªÆ„ÆÛCmaØíe8=ˆ=è7ÅšuŒº’ ;x¤]˜d‰A8î4¶‰ÿ kú÷ÿA€¹@y"Çq¦i±K<¶zŸˆ2Ê2|«…¿8>Êê¸'¦Twjˆ7ÓK¤n¿ð[ºûõ_ö÷êYº’ù?½YþåÙÐ|Wâ 쮯îõí1¼ uwaÌr\Z„• ©äùѨO1Hvvny:^0Š–êëUç¦úwOe³B’nN1ÑûÖ_—ãçfû?ƒµ}fÿUû.¦øò-ÍĪcU$M±¡6þõ=öääóMEÅ5-ãdüÞ··Ë•üÉ”“’åÚZ¯M•ý^¿#±©(( € ( € ( € ( € ( € (  êRé>½º´F’ïg—mõyœ…Œø ÎiÉr/µ§ß»ù+¿‘pi>ilµû¿Ïcδ8ç±½°ðËÚÞé­i{$¶‰9‰¦Ki?Íò3©>bËÜöȪ©ûÈMÇu«ÛÑq_sKäDoœº¸¿žÏüß©~ÚÿSµø3ºäZ‰‡Ma=Ä·‚ lÙc"¢9e9b¬02Omª»Õ‹[6¬ûÞ_užÚ}¤­Ìžêúvþ·ãm† /Ìw’ÑÜíÂŒƒÉ*ЧwÖZÿàkñÑ~] ~ò•—Ù_çþléö«dÕþ}~Z\,üw«]Kªxe㻹œEœ÷ð01Èùß-º1#Ë97 Ò©+»/?Âß=oÛuÛT®­~š~?‡âO­x‹Q¹ðDz…„sØß=ôv«E+‚.DN#i@Cœ¨Î*w•;m%ü•²–ŠwÞ7üÌGYÕ¬$Óí/f×ay®#›÷³W(.m”Œ[ !Ørë# IFW{/þFoôü¶&Iò»uÿ€ox7Æsø’óch·Vv²Áöˆ.)•ȹx‘CÀ€Œã†ç€Mr´ôkúõÓÐ$Ò•–ÚeH€ ( € ( € ( € ( € ( € ( € ( € Çñ—ü‹wðý i .hŸò±ÿ¯xÿôH ”P%ׄ´[«ç»žÖFid˸”A+ŒažÞ[·–Rx‚ˆû5Óo/Nß.ºî÷·þ¿­½4Ø©¥xJ³óžôI¨I4—Vâi; 1E;X©* ŸR*TW"‡’_u¾kkÛÓ²o››ÎåÝ;ÂÚ^Ÿ$¼‘­Ÿ|?i¿žqØÉò‰€]†­9ï×_Æß䉲µ‹#DÓ…’Ù‹|[¥ÇÚ‚on%ó<ÝÙÎ~ÿ8éÛ§+N[tÑ}Öü†õ¿žá¨èzv¥wÕí¿›5¶<¦ÞÃn 8?4hyôô&’I;ÿ[5ù7÷ƒÕY”aðv‰ ¥ÕœpÝ ;¸ž-MôæÕR2ûSÛhíŠ{$»[ðØwj\Ëó-ÞxK½ûwÚmwÿh[-¥Ïïy‘.ì/¾ÜŒhÿ;üôÿ$(û¶·Eeèi( ¡G ¸¢”RHZP@P@P@P@P@P@P@cøËþE»¿øþ†´Ði°É6§ùwRÛâÝ3å„9ùG]Êi7Ø®?è'wÿ|ÅÿÄPö+ú Ýÿß1ñ}Šãþ‚w÷Ì_üEb¸ÿ ßýóÿ@Ø®?è'wÿ|ÅÿÄPö+ú Ýÿß1ñ}Šãþ‚w÷Ì_üEb¸ÿ ßýóÿ@Ø®?è'wÿ|ÅÿÄPö+ú Ýÿß1ñ}Šãþ‚w÷Ì_üEb¸ÿ ßýóÿ@Ø®?è'wÿ|ÅÿÄPö+ú Ýÿß1ñ}Šãþ‚w÷Ì_üEb¸ÿ ßýóÿ@Ø®?è'wÿ|ÅÿÄPö+ú Ýÿß1ñ}Šãþ‚w÷Ì_üEb¸ÿ ßýóÿ@Ø®?è'wÿ|ÅÿÄPö+ú Ýÿß1ñ}Šãþ‚w÷Ì_üEb¸ÿ ßýóÿ@Ø®?è'wÿ|ÅÿÄPö+ú Ýÿß1ñ}Šãþ‚w÷Ì_üEb¸ÿ ßýóÿ@Ø®?è'wÿ|ÅÿÄPö+ú Ýÿß1ñ}Šãþ‚w÷Ì_üEb¸ÿ ßýóÿ@Ø®?è'wÿ|ÅÿÄPö+ú Ýÿß1ñ}Šãþ‚w÷Ì_üEb¸ÿ ßýóÿ@Ø®?è'wÿ|ÅÿÄPö+ú Ýÿß1ñ}Šãþ‚w÷Ì_üEgxª'‹Ã‹$òNICº@ xù@Ð:'ü¬ëÞ?ýRåQ¯‡˜Ë¼Ò"6Ö‘@Ú~§' —++ŽÚØu½ì2¬¤&™ˆ‹Ø#=;Õu°‡}ºÓc¸ºƒlg|Á…>þ”®­qÛ¡,n’"¼ld2œ‚)ˆuP@P@P@P@P@ó%¼-,„…_A“ø MØiŸQH#ßw ¶«¹TJàäã¨$qÞ‹¥¸‡ý¾š(á’9L´ìpvðNxúQÖß×õ¨l‡Ïw 1l“ oeQÎ9ü;.; ÑòÞIà’Ùg29úm&‹Ùu¥ÂÝ@%Ed‘‡#ÒŸ@& € (  È·wÿÿÐÖšæ‰ÿ kú÷ÿA€¹@QŽ »}ð°4,åƒ3ÊäŒcž§œŠ†Ÿ/(ï­ÊÐé—¢BL&2Ñ»>NàT€1Èùzäu4Ú¿ãø‹úþ¿­Æ *ëbݨ„®È–wÆ áÀ ÍÀæ‹;ÜfŒ?g¶XöÈ$•äœýãɪØDôP@P@P@P@P@PÐ5ŹD`Že$d#>ÜR}Ð×fA4w·éo+£¢¬ŒÀÙ9;F:z5Ñ‹ÈK{)#[}ÞX1Ìò>Ò‹wN=Å ZËÊß=nCq£‡7%OÞÄ7Ï!çœç'‘Èõ¥Ëùÿï©hé–~^Ä·H†C~ç÷g#§+ƒÞí6×ìvæ"Ä’ìܹn¤‘×Ú…¢H:²Í0 ( €1üeÿ"ÝßüÿCZh š'ü¬ëÞ?ýRå —vÑJ!’â$”ôBà1ü)]Ä‘H²Ä’FrŽ)õžÂ@W’öÚ8–V™Lmœ2üÀàz} +…‹À( € ( € ( € ( € ( € dœFÀCå¬ÊZ˜d€J¸8'  ¼©¢1ÃHp£N3ü…@?§Z6¼w¶²²ˆn#³m78'tàl>kˆ`Wi €$gÀçšW°Xt2¤Ëº3õG±‘øÓ'¸†ÙC\M*Nv 3øÒºAaæž³Faÿž†ßΘÐ@þ2ÿ‘nïþÿ¡­4Íþ@Ö?õïþ‚)r€ Ì„ky­åi^fmËe|žà001צ+7ðr•ö®T¶[¤.Û¥™| ƒ #í³ü9ûÝyÎ*îþð éýwþ¾D`^y;U®¶n_2VYrxoàÈaÎ3´ãõ¿/ëæQ£ûôÑŠÄÏ<Ì £22NCdŒg©ôÍ9+« :;™··QÂößf!T³ ‹. Øc8Çê(W¿õÝ0ØèÇATJØ(P@P@P@P@P@UÕ#il™Q ˜*Yñ¨ ‘øŠO£ìU¿hï-‰Ž‘å¼eˆãbsŽ„àdñIî˜-¬6Ö ZÈßhcç¹>acµpáx=:ŠjÞŸä'ÔI-îÍÅßÚ'…U„p\|Ü/Íן~¢•´wïþE_Ua‚9nnaCç4(ã÷Æ&†Lm~ŽG ´Ö®ïÏôþ¿à²²#û=ÄÈÑN.YXöå˜ œÿ»Ž~†”UíëOóÒö.YÛ´7‰ ‘$g]ò!\/©Á={æš½¬îV‚Öô‹e’SÈs;Y~ÿ?1#>éE==?ÈRmZÆæK6 qç°’E¹™¹äm g°â›Néú4ã CXHúU2Vèã/ùîÿàúÓ@M¦ÝÛZèÚÚ®"ƒuºmó.~QÓ4€›û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ û_Mÿ …§ýþ_ñ  ï\Asá‹Ç¶š9£`Ã;׎) 4tOùXÿ×¼ú¤Ê( € ( € ( € ( € ( € ( € ( € ( € ( € (  È·wÿÿÐÖš†F‹Â¶E“r[!*H8f@y8&šWbz"-:[!üÙ§,&|×R:· .PNÎI 'Ñ  Ì´5–fGKŒ‰&y>䪫÷‰ìOÖªÚ] ocRÞõæžEH“ʉŠ1eÔŒõLwÇúViésF¬ìIõ¼Œ3« µãd9 ‘ÁÐÕ!l#j6©ÖF#œ•F!pHÉ p2'Ž)&˜ZŪ`P@P@P@P@P@PWS‹h Œ¥°@ :±'~f“vØh­5ìö±o»¶ ª)ÚLäàÿ<}9¢ö²«¨Ç,Ð¥¹,¯!G,Œ1€Ç8ç"„îÿ¯ z"Y®Ò/k‰7Kr£h-’-².àF7g§=€è+‹”è¸È4)& ðÆÒÛåC±Q”’2sùÑmhñ´‘º vÙŒ‹ˆœ„r0y§k;…ô4é€P@P@P@P@P@P@ÝÀ. 1(r ²õRAüÅ&» Iku4,³\ÆX2²„€ œò7çê(·Qy ‰`Ý(c!ÂãvíÜuãïQk}ÖƒI¶Žy&‚("vP#+ þí†~aùþ”’¶ÃzîKgjÐÍ4Ò¼m$¸ åǰqžq““Ï_¥4¬¬'¹j˜P@cøËþE»¿øþ†´Ðt™ÊI]cE¶Œ–c€>QÞþÕÓ¼¿3ûB×fq»Î\uÇ\úÑa]¢‘&d‰ÖDa•e9èhê( € ( € ( € ( € ( € ( € ( € ( € ( € Çñ—ü‹wðý i !ü¿ X¿ ´ÿÐ㪊»±2ÑR½BÀ²Ê}œ\bM¤ãoÞÛ·v{nëÇZ~ÎIî¿_ÌžeoëüŽÃ¯æi›ýgŸÿF½L•Š‹ÐAq4Lo&xWslVUò™@$|Àd ò}p+$ìµßúþ»—mtÛUi[ìê±ËgæPzŒtïTŸëKˆdš»«(ŽÑäÊï;C1ÚITò@Î:õ¤ž£jÄÚÍÙ¶¶Qéo$­µ^B^2zñÛ);l×R4ÕKý˜¤KåΪÛÝöŒ“ªq‚G¦Aô«ûVKštP@P@P@P@P@P@P@P@cøËþE»¿øþ†´Ð¶²PðÍ¥´Ìè­Gr ã¨ã't&®¬cßøSÊ©o>¥t†àohPB o2`§Í†Ï'dVѨ›»ýÌÍÂÊËô4¼0/­­¡³¹Ó&¶ÊiZYn#‰ZF%Ìgƒ» cEMGÛOú±PºÒƉӭK1dfÝ»*Ò1Qž¸ÀêzzÖ©hip]>ÙRTØì%\¼ŒÄÓ’sÞ‹+XKAÒÙA#«•te] Ç#'Ÿ)úÜ6V%1!•e+ó !O 8Ïò j8FîÚ$m¤äžW8<šI%°2E´6mLynÒ/'†9ÉýM Xà @›"]«¸¶3ÜœŸÔÓZ+˜ú( € ( € ( € ( € ( € ( € ( € (Æ_ò-ÝÿÀ?ô5¦€šÂám<=e+«0D¡W%‚€9ã©Ä?ð‘ZùnÞY ßC<”g¿ï8èh±<Æ••ܶÉqm xÜdz{CíKb“& € (†XÄ‚3"‡=<÷íøÊ€@P@P@P@P@P@…•J†` ('­-!eR¡˜Ç ë@ #¤H^FTE,Ç MØ7Iô8ë -¬Lºx—ûÕDãøhO”/>ÔÚÒßÖ÷£¹n ë‰YYÀäªíðɦJÐu ( € ( € ( € ( € ( € ( € ( € (  È·wÿÿÐÖšm5®WFÓþË R£¦ï2R˜ùGL)Í &ó5/ùô´ÿÀ¦ÿãtyš—üúZàSñº<ÍKþ}-?ð)¿øÝf¥ÿ>–Ÿøßün€3RÿŸKOü oþ7@™©Ï¥§þ7ÿ ÌÔ¿çÒÓÿ›ÿÐæj_óéiÿMÿÆèó5/ùô´ÿÀ¦ÿãtyš—üúZàSñº<ÍKþ}-?ð)¿øÝf¥ÿ>–Ÿøßün€3RÿŸKOü oþ7@™©Ï¥§þ7ÿ ÌÔ¿çÒÓÿ›ÿÐæj_óéiÿMÿÆèó5/ùô´ÿÀ¦ÿãtyš—üúZàSñº<ÍKþ}-?ð)¿øÝf¥ÿ>–Ÿøßün€3RÿŸKOü oþ7@™©Ï¥§þ7ÿ ÌÔ¿çÒÓÿ›ÿÐæj_óéiÿMÿÆèó5/ùô´ÿÀ¦ÿãtyš—üúZàSñº<ÍKþ}-?ð)¿øÝf¥ÿ>–Ÿøßün€3RÿŸKOü oþ7@™©Ï¥§þ7ÿ ÌÔ¿çÒÓÿ›ÿÐæj_óéiÿMÿÆèó5/ùô´ÿÀ¦ÿãtyš—üúZàSñº<ÍKþ}-?ð)¿øÝf¥ÿ>–Ÿøßün€3RÿŸKOü oþ7@™©Ï¥§þ7ÿ ÌÔ¿çÒÓÿ›ÿÐwŠšvðÅṎ8ß)…Æ7¯r4މÿ kú÷ÿA€¹@RþØÒþÉqwý¥gökW1Ï7ž»"ppU›8R É÷ÛϦŸ0ê×oørïÒ€ ( € ( € ( € ( € ( € ( € ( € ( € (  È·wÿÿÐÖšæ‰ÿ kú÷ÿA€¹@y.¡àÝR}W–5uµŸí³Íaå7›=ÂÍ/ÀcU÷1ÆGzT½Ïg~œ–ò~ê•þKní²¥¬¥o?»uoŸÞ´4­mu{ÍtÚ<Úõ½ÜÓÝÇ}+<Ék©V´'ýXaûœlùþþîô¢›§£³åë¿=×á¾Þï-¯©)òÙµÕ[ÒÚßþ¼Ö¶„z·ü%7šDw“¾¡dæ+k¤†äeŽ8Ü4«.’á¦n¨À•T<®A¦Ó’{)]Û¶ÖNÞIù]ëÜqN;¸Ù_¾º¿š·¥µß©ðÜöÚe…Óê:Œ Òý²[`+€–R\6¸’ÁI&œådݶKç§KuÓUÒâŠü_ÝÿÌÒ±ÕþÖö+ýÛ-Îf‡hƒw'?+üÿwý–ô¦Õ›]¿öþ»ô¿¿àú5# ( € ( € ( € ( € ( € ( € ( € (  È·wÿÿÐÖšæ‰ÿ kú÷ÿA€¹@P@P@P@P@P@P@P@P@P@ã/ùîÿàúÓ@\Ñ?ä cÿ^ñÿè"( 1ðÕí×ü$vŒÍ«Àòß_ù“Ýß4–ב#Ê0Æd`®ÂÔ;c|dg1rRæííÕ»-}7¾½UÖ£¨½æ¿¼•ú/_]¿[¢Kø¾ïLƒQE¬6—æm4ª#2L‰´ìÚO•Éݶ>W‘μIA½_ÿ"ÝíòV×^ëqI¥ÌÖÊÿƒ·ü>šy–o¼Yâqu§[ý’ëW³¸”7‘`LrB‘ÆåÈ’áx2¨9‘‰ê\dçhs­’mü¤Ò×ÎÏ£ÿ;Q÷¹_[[æµÓþ ±ñ§‰5co-‚éVÐ^J°F³A$E¸,HprWAÏ7W÷|ÞJOÿ•¿Ã}v3ƒæå¿÷oóíèþý´Ü›BñŸ‰uÝFÝ´íÅ>Ì.€òÎß2$‘Ÿ{L¬¡Dœ)³·¯?.œ©IßkÉ}×_>·ûå¶¢­½¯øÿÀó×ÐîSQ±+˼·o:V†žš~„±ë‡P¶•®I·´°×îîe»r˜T>Çõ;AÚ0Xœd‡;»(üVðÿ.ïkúÒíè´×ïþ´Õ½ŸÃÐ^ÚèV6ú¤ÿh½ŠYäÎw8œ÷ç¿zÒ£NNß×õ؈íý|—È¿PPP@P@cøËþE»¿øþ†´Ð4OùXÿ×¼ú¤Ê(¤š^Ÿ%ºÛÉclð¬¾rÆÐ©Q&íÛÀÆ7n9Ï\óBÒÖé·—OÈ·]÷ó+Cá­Þò[È4M6+©›|“%¬jîÛƒd°'p> #î«GOêߨ=ucïü?¢ê-»PÒ,.È“ÍÌöÈÿ>ÝÈë…=p¥+-<¿]0ò%ƒIÓmÕ >Ò!n@ªí;6d`pv|¿N:Szïçøêþ÷« ˆ$ðÞ…%ÕµÔš.œ÷Š©o+Z¡xU~èCŒ¨±Òšm7%»®¬ö-&c•åÙ[§“+M"Q²FÎçpÇsdõ;­%¦Ý­òíè[ß©%µ´‘˜íaŽ,ÎV5 1%ŽrI$÷&Ž–·% € ( € ( € ( € ( € Žx!¸EKˆ£•U•Àu )È<÷¨£gpò*êÚ6—¬Ä‘kmž¡gr%Ô (SêƒJÊ÷ݬX²³¶°µŽÖÆÞ†#†ˆ= ¦ÛÜ”’ؚ€ ( € (Æ_ò-ÝÿÀ?ô5¦€¹¢ÈÇþ½ãÿÐE .P@&ãÛýu-ZÿH»V»¹‚k+X™n,£ŒÈYÌaƒ±G(¼È0{ /gÏ-¹o~‰é§âüô×,š]ínÿÖÿ‡TCuñON½Ñµ‰<=\^ÚXÉun¾t$Q¼ªÈY,¤«„lg@d㦚¥éw÷~zÚúXÔJ[køtîYÒüjšf|úä:ÏüKGsu¨ 8ÿzÛ6F NŸ1p~èy…Tœlšë¢óÕß~Öô}.îe.»ÚïÉ[úÓÀ}·ÄÝ"ò;q§Ú]ÞÝNò µ¶–ÞGÌj¬Øa.Ç;]NÔfnO ]éÚþšÛ×§Dÿw·Þ—ß·’ùÛRo x¶k©b³Ô¬ï·ÜÞÝ[ÁxÑÆ°¹ŽI@nÈDêWiäšP÷£ü©úíÅùwZX$ìÛé{zvþ¾ó¯ a@P@P@P@P@Põ{­A7–>X˜ÜC/n÷CȨO–„3à’joïF=ïù7ú -ìŒK¯ë±h¶×IçÉ%÷“4ÿð_'‘”Í»ìåüÆù‚Àíù½©É¨µ}›þ»|ĺù[óütèuš5нÒm.…Ô7bh•ÄðFQ$ÈÎUI$bN*çYX˜½ •%P@P?Œ¿ä[»ÿ€èkMsDÿ5ý{Çÿ Š@\ €0‡…,£Ko"{¨&µ¸–dw‘+—’6Êà£ÐŽÊs .UdºY/T•µÿ5gÛFÆÝïæïèüˆ ð|pé:CkœºdÖím¬†-Ðð7—¼àp73q×5WnÍêÓNþŸçÔ[;­7üKW^²¸´Ô`i®Sí÷ tdGá•d8ã5<äg9È8©Û–ÝkæÛ›^€’Wô·èRÕ|u;ì:¯ˆ5[¸r̲%®&RT…eí+Ê žza«)'Úß…þk~–mlÿ¯ë½ËÖ~²³KŠKŒX]Muæ-'™¸9½lwàr{´ìÓòåùiþDò¤š]îlÒP@P@P@P@P@OUÓaÕ-â†á¤UŠx§tnAã*3íBÒJ]¯ø¦¿P{5ÜYÓeÔbmõKí1ãb|ËCXF‘Hç=3‘Ö¥Æÿu¿¯óõv&Ò¬ Ò´Ûm>ÍY`µbŒ1ÉÀä÷>õ¤¥ÌîJV-TŒ( € ( €1üeÿ"ÝßüÿCZh š'ü¬ëÞ?ýRå„r· #\–¹…Ьn?¿®@ÃÚ)ûªÏÏïoðóZ¯KŽ~öÞ_rw·Ÿ—UÓmuî´¹¦ñ-®¢®‹VSÛ°Éß¹Þ2ãÂþ•7ŒãüÉ/»›üLJÉÜÄð‡†u=.úÅõc:VžÚ|ÑØ›•,§Ì‘J€‡>P[–n}væ¿4žï—NŠ×ÛïÓ²îL–©-“oÏ_ë^îÌì*P@P@P@P@P@úw†4½?Äz§ˆ!ƒv§ªlNü•DEP‹ýÕù>§©á@Ûqÿ@Ë¿ûê/þ.€¶ÜÐ2ïþú‹ÿ‹ í·ô »ÿ¾¢ÿâèûmÇý.ÿ憎øº>Ûqÿ@Ë¿ûê/þ.€¶ÜÐ2ïþú‹ÿ‹ í·ô »ÿ¾¢ÿâèûmÇý.ÿ憎øº>Ûqÿ@Ë¿ûê/þ.€¶ÜÐ2ïþú‹ÿ‹ í·ô »ÿ¾¢ÿâèûmÇý.ÿ憎øº>Ûqÿ@Ë¿ûê/þ.€¶ÜÐ2ïþú‹ÿ‹ í·ô »ÿ¾¢ÿâèûmÇý.ÿ憎øº>Ûqÿ@Ë¿ûê/þ.€¶ÜÐ2ïþú‹ÿ‹ í·ô »ÿ¾¢ÿâèûmÇý.ÿ憎øº>Ûqÿ@Ë¿ûê/þ.€¶ÜÐ2ïþú‹ÿ‹ í·ô »ÿ¾¢ÿâèûmÇý.ÿ憎øº>Ûqÿ@Ë¿ûê/þ.€¶ÜÐ2ïþú‹ÿ‹ í·ô »ÿ¾¢ÿâèûmÇý.ÿ憎øº>Ûqÿ@Ë¿ûê/þ.€¶ÜÐ2ïþú‹ÿ‹ í·ô »ÿ¾¢ÿâèûmÇý.ÿ憎øº>Ûqÿ@Ë¿ûê/þ.€¶ÜÐ2ïþú‹ÿ‹ í·ô »ÿ¾¢ÿâèûmÇý.ÿ憎øº>Ûqÿ@Ë¿ûê/þ.€¶ÜÐ2ïþú‹ÿ‹  ïJòøbñ¤‚H(6ÈT“ó¯?)"šGDÿ5ý{Çÿ Š@Mö«3Ëóâß»wŒçÓ<ñ½®;2j¡P@P@P@P@P@P@P@P@P@cøËþE»¿øþ†´Ð¶º6^²™P;yP"©m£-µFN>”ãga7da^ê³›V€‹mÅÜÉU¶òp IÇLéZ,<%YlG´’wFƃ¨3ȶžZq+A"Ì\”GÇÞäð*=’„tèR؉s’`ÓÎ#i|Äh¢ª“­´dðSÞ±‹v_/жµ±e¯îé`û:™\.ÍùW!Ï]¹þñi»Ûúéþbép‚öæ{ÈcE‘üÅ/ЫqÇ?§Zqwû= *`P@P@P@P@P@P}Bg‚Ø´XYQK €X“ùÒ}×rµßÚìà Á¸f’5]«Œ¶*½óéF©¤¿­ÑŽîyæ¶fŒB†gL,„îÀ`r08ȤŸ_/ò¢±Þ­…»H–d1ÂÛ¸ ó×#àu¥Ïüе™kM’gyC<ÒB1±æËbyÈÆ9ÇsV¶$»@P@cøËþE»¿øþ†´ÐOiq{àëxlŠ "BWk~¸Å]9(Îïbf›VG9öÿÐ9?ï¨ÿøåvsPïý}Ç=ªv6<+c­Iîõ˜£#…¢˜±RO Ã/ëXÖ•>[@Òœdätf‡ìïÏݾw.O99?ι-²ìl!µ„Ü Ê~ñq†ÉìÿÙ;X<†ýŠÜ20B  ‡#ïœóÈ'±¥Ê¶ù㣴‚?/bcÊËNO Ç ¡«ßÌ[†$‚$Š!µQž€SôP@P@P@P@P@ÉbI¢håPèÃOCI«; >ÜFèDŒ-+±9$äséE…±$vƱ„Cˆ˜²å‰Á9É÷êi€²[C'›½3æ¨GäòxýM+-0 ( € (Æ_ò-ÝÿÀ?ô5¦€›Mk•Ñ´ÿ²ÃŸèé»Ì”¦>QÓ sH ¼ÍKþ}-?ð)¿øÝf¥ÿ>–Ÿøßün€3RÿŸKOü oþ7@™©Ï¥§þ7ÿ ÌÔ¿çÒÓÿ›ÿÐæj_óéiÿMÿÆèó5/ùô´ÿÀ¦ÿãtyš—üúZàSñº<ÍKþ}-?ð)¿øÝf¥ÿ>–Ÿøßün€3RÿŸKOü oþ7@™©Ï¥§þ7ÿ ÌÔ¿çÒÓÿ›ÿÐæj_óéiÿMÿÆèó5/ùô´ÿÀ¦ÿãtyš—üúZàSñº<ÍKþ}-?ð)¿øÝf¥ÿ>–Ÿøßün€3RÿŸKOü oþ7@™©Ï¥§þ7ÿ ÌÔ¿çÒÓÿ›ÿÐæj_óéiÿMÿÆèó5/ùô´ÿÀ¦ÿãtyš—üúZàSñº<ÍKþ}-?ð)¿øÝf¥ÿ>–Ÿøßün€3RÿŸKOü oþ7@™©Ï¥§þ7ÿ ÌÔ¿çÒÓÿ›ÿÐæj_óéiÿMÿÆèó5/ùô´ÿÀ¦ÿãtyš—üúZàSñº<ÍKþ}-?ð)¿øÝf¥ÿ>–Ÿøßün€3RÿŸKOü oþ7@™©Ï¥§þ7ÿ ÌÔ¿çÒÓÿ›ÿÐæj_óéiÿMÿÆèó5/ùô´ÿÀ¦ÿãt⦼1xncŽ7Ê`G!qëÜM£¢ÈÇþ½ãÿÐE .P@[ÒdÕ[JMRɵkAp†eÎJg=zQy6º÷mrÝÄðÚÁ$÷2¤0Æ¥žI*¨I'  ˆfi£‘¡m’`J6Áô8 ãЊ:\í/­î幊ÞMïi/“0ÚFÇÚ­ŽzðÊxõ¡j“þ´vüÐ=‚{û;a9¸»‚m–mòòç Ù<”òxàúR¿_—Ïúc³½‡Çs“cž6•Qd(® lílz§¾¥U¿SVMu¨^Ûé¶3ÞÞIå[Û¡’GÚNÕ$àr ]Rïe÷èRW,‘‘Ò‚Sºº P@P@P@P@P@P@P@cøËþE»¿øþ†´Ð4OùXÿ×¼ú¤Ê(ÎÚ ·¾ºÒ´!©Æ—3^I/Û4÷‹ì22ˉ ¹ åØq—b‚ P›Tî¾ÊÓ¾>Vº¯N×mè^Š¢o«Wôµ¯å§ùY2ãø¶ëM¹™WU·{Ëi¯Ò4óÂÁ$aãî’ ×pc×&¶IFitM?ü Qvÿ·W2~V3WI_Óÿ[ÿÛÏnè–êÊk sV/ˆÚçSI®ÚÑ®Û}±pc(O>h„8Q»YÂÉ(½—7ßv×ÊϦœÖ¸Ý÷[Ù“ùúëkµ¨ý?H¸Š[½SK:ôyÖm|„š[•ßnV‘ž99~7夽F*áxò'ýëú{Öò]÷»Õì)Ù©[²·­ÿ­6¶Æ×‹ô¹îüCcV=ž«¶¾`›•)«¼öL«ÉêÃÖ²äRrƒÙëóIþ-¸ü—‘nN1RŽëOü ×û’üL {]R=9.uuˆ [Ȭ¯ œr%ËÛA*²ˆÿy±¦%²œ•>™­9ùÚœþ×4ší'd“·’~WjúËËÍ}›%évôù4¾O­Šë¥ëÚ†­¶ u™ zI[%y¿y¹®oLüòy~VàÙ9Á#w4•Ò‹4oÙi í¥¯}´ÑÚÊ÷jÜö_½ù»Àòµî.µýµ)Áñ º„M1¸‚Ø^$RžYŠxA(Sò«+&wùz!ñ+~=õzèþvVjÖÕ$¶×Ëî¶ŠË_[k~ë–ì°¼Õ}³I__êP]ßÈ'–åmž3þïvï(/,0{R¾ÖÎ*ï[ÝÛU×»ÓuæÕÚÞÏGum¾wéß~¶è&”u¸¾Ñ ÜÚõƈg·yä†×P†p¥e #ó]çÀu‹vÂ8è$›ÓNm¯+}Ê×¶¶ø·ën„ëºÞËó×}/g÷m©rÞ-Qü[G©kVv)4Å%Óõ Äm]Ë#™6)-ægBã9Î6áÒ½ï-õû­§–ÖÚÎé§­îNܾîÖünïçú[c»‡Xó~ËÿÝF?´\ËoóÁ+fÿÞ?<#lù[¾åõ©ZÛÒÿ–žºíäÆô¿“Kïíåܵ§^}ºÝ¦û5ŶÙdeÂlcµŠîÇ÷N2pA£¢}×õó£k±f€ ( € ( € ( € ( € ( € (  È·wÿÿÐÖšm6îÚ×FÓþÕq­Óo˜ásòŽ™¤ßÚúoý-?ïòÿÚúoý-?ïòÿÚúoý-?ïòÿÚúoý-?ïòÿÚúoý-?ïòÿÚúoý-?ïòÿÚúoý-?ïòÿÚúoý-?ïòÿÚúoý-?ïòÿÚúoý-?ïòÿGo£ÛGåÛÝØÂ›™¶¤ˆ£,I'¹$“îhòOí}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€í}7þ‚Ÿ÷ùÆ€3¼Uqφ/Úhæ@Pƒ ï^8¦€-µ›};MÓáš9Y¬m”Æ;Ÿjj7ßð“ÙÿÏûåÆŸ#ÿ„žÏþxÜß+þ4r0øIìÿçÇýò¿ãG#ÿ„žÏþxÜß+þ4r0øIìÿçÇýò¿ãG#ÿ„žÏþxÜß+þ4r0øIìÿçÇýò¿ãG#ÿ„žÏþxÜß+þ4r0øIìÿçÇýò¿ãG#ÿ„žÏþxÜß+þ4r0øIìÿçÇýò¿ãG#ÿ„žÏþxÜß+þ4r0øIìÿçÇýò¿ãG#ÿ„žÏþxÜß+þ4r0øIìÿçÇýò¿ãG#ÿ„žÏþxÜß+þ4r0øIìÿçÇýò¿ãG#ÿ„žÏþxÜß+þ4r0øIìÿçÇýò¿ãG#ÿ„žÏþxÜß+þ4r0øIìÿçÇýò¿ãG#ÿ„žÏþxÜß+þ4r0øIìÿçÇýò¿ãG#ÿ„žÏþxÜß+þ4r0øIìÿçÇýò¿ãG#ÿ„žÏþxÜß+þ4r0øIìÿçÇýò¿ãG#ÿ„žÏþxÜß+þ4r0øIìÿçÇýò¿ãG#ÿ„žÏþxÜß+þ4r0øIìÿçÇýò¿ãG#ÿ„žÏþxÜß+þ4r0øIìÿçÇýò¿ãG#ÿ„žÏþxÜß+þ4r0øIìÿçÇýò¿ãG#ÿ„žÏþxÜß+þ4r0øIìÿçÇýò¿ãG#ÿ„žÏþxÜß+þ4r0øIìÿçÇýò¿ãG#¦¿ªC©xnÿÈIËòó¼ÕÇ¡>”­`2u¹;M;̘@ 0pzgŒÖ”Ó{!6–æLZ„q”ŠòDI˜¨B>ìÙ OÄŒŽÝøÁ;:më¿/R}¤S³e”ž‘£IQz¨`Hü*ZW±wOC|L–óÞ.« [GÏÙ¡04“¼Í³ÜTÈùH=ûúsš’åMùþÏúìSOšËËñØ•|Y¢²†ŽêI70TXí¥f“*XP¹`B¶È85[;Z[ü×ËRS_×õý=èÁaoµ±ÙÈ|±»ndùv7>|r¡¡j켿¾þÀÝ“o¥ÿ ȯ¼UaojóÛ­ÅÒÇr–ÏåÛÊ@bûS¸Œ°î))'ËmŸù_úùöcj×ò6ãpè® €À¹H?ˆ<Ц¬ì$î:€ ( € ( € ( € (3K´Ôä—^Ô­ÞkÛ{[õ†K07Ô[kyÀ(@#‘´c9>¦—3/Eð­úër @N ŠÛÈ–é¦V7¬ˆ%XÉäü³3…Ë,{2¢’m¿ÿÅŸüö¸ÿ¾—ü*¹Øü#óÚãþú_ð£€Â1gÿ=®?ï¥ÿ 9Øü#óÚãþú_ð£€Â1gÿ=®?ï¥ÿ 9Øü#óÚãþú_ð£€Â1gÿ=®?ï¥ÿ 9Øü#óÚãþú_ð£€Â1gÿ=®?ï¥ÿ 9Øü#óÚãþú_ð£€Â1gÿ=®?ï¥ÿ 9Øü#óÚãþú_ð£€Â1gÿ=®?ï¥ÿ 9Øü#óÚãþú_ð£S_ÒáÓ|7ä<æyyÞGqè­+Ü cV‡Gðî›=ÄrH¯h{r?v['qSÞªsvDÊJ(–mEu 8`±…&–ú&É×rE½ GP9bÌ­C•Ýôþ´þ´üß2²1¼›£Ï¢i¦éÀ¸’Ró„ê»#a•> º8?žØ‡)¥9PŒiÞ(ønûÄw÷—,ÚÜñ¥ÍÒD®l#±}’H¨„…3òœžyÅÕ%+]ò§¯š[[ð¿Ìé’\î;+ôÿ‚MgãËÍQm¢Ç)¹¹6X¹¼0ùs¬nò©Ämò¡]»†rs€ ´¹µŽÍ6ŸtšWò½öûÄýÛ§ºv~¿Ö¾žzˆw-mwT½]ºvWWwôLm4Üůåu¯Ÿ§¨ýCÅ:íΆoô½:Öݵc³„Ëxs2‹Ÿ)ò<£°Ü€Äõ$ozwûZÛþÝoúùwiKjÒk¢ßîý?®§msUVBåVÜîÀÈ÷À¦í}^ÚŽ¤0 € ( € ( € ( € ( € ( € ( € ( € Çñ—ü‹wðý i 3µïZðž—obЫªFÍæ¹Q´ÄÊp@<üõmF¢§+³:‘rVDÙþ9ÿ µŸýô¿üb¯š‡ò¿ëæO-NäþÐõ›MzmGX¸·˜Ë )hÜ–,|°8Ø  GJ¥H8(Á’•Ùri0M,6§šÒ;G«t±åÉ,B 6Œ–'€0y5Éʹy:Zß#fîùŠ—þÒn.,¤µXGm";¥¤òÂd Ä€u(@a– €1w|ÎO­þö×ùm·Q=­ýnßæ÷ܳ/‚|?"Û«X°è¸•D«»~%Ã~ôn%™»$±=NDù]×—¦›i¶; «¦Ÿ[þ;ë¾¥Éü?¦M¤¾˜öì-S1U•Õ„†O3r¸;”ïäF;TÛD»Zß-?-<ú•}_žÿ1¿ðŽi^Tѵ³2ÏsÜ…¦rZXölbIÎG–Ÿ\sœœÕìÓ].×Î÷üÙ6Ñ®êß"垟ke=ÜÖÑl’ò_:s¸ïµS<ž>UQÇ¥%¢Q[›¸Þ®ÿ/¸³@P@P@P@P@P@P@P@ã/ùîÿàúÓ@M¦µÊèÚÙaŠOôtÝæJS(é…9¤Þf¥ÿ>–Ÿøßün€3RÿŸKOü oþ7@™©Ï¥§þ7ÿ ÌÔ¿çÒÓÿ›ÿÐæj_óéiÿMÿÆèó5/ùô´ÿÀ¦ÿãtyš—üúZàSñº<ÍKþ}-?ð)¿øÝf¥ÿ>–Ÿøßün€3RÿŸKOü oþ7@™©Ï¥§þ7ÿ ÌÔ¿çÒÓÿ›ÿÐæj_óéiÿMÿÆèó5/ùô´ÿÀ¦ÿãtyš—üúZàSñº<ÍKþ}-?ð)¿øÝf¥ÿ>–Ÿøßün€3RÿŸKOü oþ7@™©Ï¥§þ7ÿ ÌÔ¿çÒÓÿ›ÿÐæj_óéiÿMÿÆèó5/ùô´ÿÀ¦ÿãtyš—üúZàSñº<ÍKþ}-?ð)¿øÝf¥ÿ>–Ÿøßün€3RÿŸKOü oþ7@™©Ï¥§þ7ÿ ÌÔ¿çÒÓÿ›ÿÐæj_óéiÿMÿÆèó5/ùô´ÿÀ¦ÿãtyš—üúZàSñº<ÍKþ}-?ð)¿øÝf¥ÿ>–Ÿøßün€3RÿŸKOü oþ7@™©Ï¥§þ7ÿ ÌÔ¿çÒÓÿ›ÿÐæj_óéiÿMÿÆèó5/ùô´ÿÀ¦ÿãtyš—üúZàSñºÎñSNÞ¼71Çå0#¸Æõî@¦€ÑÑ?ä cÿ^ñÿè"(  ë-F¿Ô%Óìuk ›Ø3æÛÃr$x8;”Œƒš¼¹–Àý×fhÐ@Wö~w’.àó|Ï+g˜7oÛ¿n=vüØëŽhZíý[OÏ@z( € ( € ( € ( € ( € (£`(&·¦H– ô3G{#G‘6ô‘•Y˜n\Ž7SÛh½¾ëü´×ñAþvù— š+ˆ#žÞD–:HŒYO ‚:Šm4ìÂæv©â]G¹Ú¶·¦ØNÊEswLW× AÇ¥;»!Ù­M êSx`SÝž1ëN^í籠½í„‚h® Ž{yXdPé"0ee<‚ê)´Ó³ ¤@P?Œ¿ä[»ÿ€èkMsDÿ5ý{Çÿ Š@\ €<Êk²øbú鮤…ìfÔgÓímm;‘#¼Ê¬d,K®H «œ©ÉÇ* ѧÞÐ^Šñ½þízouÚœäº^ÿrÓúßÏroYêv/oc'ˆeu³C¤¼\K»21=#ÇÄ¿ ]Àc‘Uï¿Xúrõýo{kjGØN]í½í¥¿Ki{ÜËŽ]rîeðÕη.¶—:‚Îәͧ– ˧™û’Áü »yàç€k5¤"ÖܪýïîíÖö¾Öõ»Eý«K{«[o;ùo¾»X³¡iÚ¥ÝÕ»êúô¶S])¹ìº…“D¾DÄæYäw ¶Àv°Œçd’—’Oó¼ûµ}õ[]]òùéývû¿Èn«a¬ØøƒXÿ„~-a5 ‹É¦‹NöΆȄ9cågÍ`òQÓŒn©Ûµïÿ§§ýºÞß™µ’šÿ·Éßðß¡qj‘é ¶5ù¢7;Ûej°· !(d2<ÊíËFJ©Q•!ˆ:KFºïåÛçÝ®m»4Œã{k£²üþï'k}Ç¥xlÎ|?§}ª)áŸìé¾;‰|Ùí äÇÔ îTô“þ¿->í; ;}ÿÖºýú÷4j ( € ( € ( € ( € (ÆßEá«ÕÒ!y¯æO"Ü(?+¹ çq=€5=¡ßGé×ð¿Ì¸IAóv×ü¿…Ò´=ZÇT¶Ñnt¦¶²Ží® 6sI,1G%¤Ñ²ùÛzç Ç˜¼ôª©zŸ{MvÞQ’·Þ×ȈûÛ¿†Žÿ+?¼œiš©ø@,4c<ǧ´WVº…Äó¼‚0 EºE*30zmë¥YsTŒ–×Mwø·}}o­º…5ËÌžúúmÓ×Ëó$u]?Å—sjú¾¯ne³·U›DÐÞHeÚÒåX4sàÃø‡ÞéSµ_Þùl¿á·èMŸ,}>kúô%°ÒõF{©'ÖÞKÛëènR[‰‚-¹ù! F8k#žk)Eû7®ù7»øî¼õ½õfŠK››´•½=jÎËX†ÇJµ†÷^Ò- °‰¶Ÿ¨Ý4wJH”ŽEà|˜­ÛÆìô))Uréuo5ç;Þþõ­ÒÖÎܱ·­ÿKy[ku½õ=ÁWPY]\ê_Éuqw>EÔ²¨&“ËŒp£n1ÈÇ$Y­!ä¯ëeëç½ØõælèhP@cøËþE»¿øþ†´Ði·vÖº6Ÿö«ˆ Ýn›|Ç Ÿ”tÍ &þ×Óè!iÿ—ühþ×Óè!iÿ—ühþ×Óè!iÿ—ühþ×Óè!iÿ—üh;{ýÚ?.ÞîÆÜ͵$EbI8É$ŸsGké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4ké¿ô´ÿ¿Ëþ4⫈.|1xöÓG2€´lgzñÅ4މÿ kú÷ÿA€¹@P@P@P@P@P@P@P@P@P@ã/ùîÿàúÓ@\Ñ?ä cÿ^ñÿè"(  )o5üqmb×>k ¦¬8pêñ —ÉÈÜ|çŒמý9mó¿ù]Ih£n·9}GÅí—ˆ5›œÎ·WcÓ?r6Ú̱FìXÈÚîÿ6ÕÜ ÉÉû/=]ü“iùh’·võ-¤§~šiæöù7£í¥Šrü@šÖãÃëX´u¥¬ºŒ´k%Ѹ«×ä9s·JêåO(-¯Ê¼›ÿäWÍö1mÆ—3ßWòM/Å_æ¼Ëvþ(Ö¡„Å{u–»Õ„vsˆ~è^y2BxÆBàƒŒÇºæ±¦¹Ô"÷jïÍ87“ß§ÃÝ—SÝskeùÿÁ[|üŠ–úŸ‰d¸±µU×oÌÆýŸìQië(N±&|ÔTÛŒç’Þœò¿÷`þrM¿øžúµ÷"þyâ;Ýzê&ñ/Ùínb„ì]0FƒÊ‰˜M‘¼¶Xîòò9ùi­cÌ­ö»ÛFÒ󶞤ËMeë¯àK¥I®];Yêúþ±¥jÍn÷j--L)\˜$òÝJØÚÌÏ‚¤íï—-)J=ß}žý5òÑZ×4K÷–{7e÷éó·Gæìmx1¯ßÂVº†¡ªÝj–‘Üç}_]³Ñ÷.èÞ6›UñØ!Ñn…‰šXðE9£Ü bb%HJÇ•È 8.hÝé¥ÿ­µ³¿_R¶Þ_§bOCª.½¤¥—ˆµ5 †…á†+fT ¾T¼LÙ%Rzž•0^óO³Š_©rÒ7]Ò(AãÛ£ys¿‡õ+ûko>4¸Š Œ“Ò´‰ ÙÅpXÅ䯟w4þ\||ˆ$fØ8.:AN^ô\_]üþ{õa³Mtþ¶Øœh:h·Ó Ø‹KÿEÞß»ýÙן•ˆç=}hŸ¾Û—TÓô{þ@½Õeë÷j+hšsiVÚ[[æÎ×Êò£Þß/–ANs“‚£©çÑ?}Þ^Šiþ „}ÕdY°³ƒO±‚ÎÑ<»{hÖ(“$íU'“ÀïU)96Ø’KDgø‡I»ÔfÓn,/ ´žÂàÌ öædpct+€èGyÏn• %+½¬Ó^M§ú ëëB OènZ '22+\JËÇ*Æ¥ˆCv®àdp*“qµº“_‚nÝ®÷¯?ÆÍýö(êÞ :Š"ÕMêÛÛ,ÑO-¼"uiž</‰¼¦åW“8g€B§î;úÛæ¬ÿ¥oÎäýèÛåøßúÜ¿sàýâ…íçHÕ¦b±^M5÷ÈkêÍÎÖÈöÅ$¹mn–_vÚy ¶Û}_õòùÜx×#Ke)W2(]̱!‘Y\¤aö¡`Í’ rsךkOëÍ?Í/¸_×áoȘx;E’[˜._Ì‘e3½ìípF‰‹ùƒaÁ>§'o+þ*ÏðÓÓЗþ¶×ó×Ô¥©øH»€,æÞc4r=Áº™å`¯0Þ_p$Bƒvr1Ÿ\‹FŸoò—ë&üú‡F‹Oà áXš ¼åØ_Ü›~7 [~ejŒ9a€N(Ùßþ«ÛmÛûØ^}·Ý|‹¾Ò¬ïä¼´ŽæÝåfg†+É–Ì0ÇÉ åäõÎÞ¼õæ“W‹ƒÙþ¿—È6i®Ÿ¡bßDÓ­­ôÛxmöE¥-{+Pwçåb9ÏçVäÜœžïOËü¬­o;üÊoáî.¥]F/7™¡Šúxárã ÞR¸@Ç9ÜsÎsÍBVŠŠÙmå­ôí¯b›»¿õÛ^úwþýì«CrÛgû@™¯g3ù›vgÍ/¼ü§n7ct¡¤ÒOÏñÞýïçåÙ ¿Ÿé·§Ëõ/ Oe®öôK3†=íòydç98*:žqÎjÜ›—;ßüÕ¿Q$’qèÊ—þÓ®uÕ"„&£Ã£´’Lª¤$ º«•ãóÀÁ…x/wú¾ŽÝ®´Ð§ii-¿ÉßóÔn‡á›m6w¹oµ_D“«\cΓÌÉÉzäq/"ÚÉ|’°®ïwÞÿ?øbQáû[;{_ìxâµ¹°´6vrJT†3·‚»Áaò/Sž:õ§6åÌ﫵þ_ðì[>íüÙ7†ôâè6:cN.ÒŒÊ`r]¹8údÕIßo/Á ^í¾­¿½ÜÑ©P@P@P?Œ¿ä[»ÿ€èkM6› “hÚ—u-¾-Ó>XCŸ”uܦ}Šãþ‚w÷Ì_üEb¸ÿ ßýóÿ@Ø®?è'wÿ|ÅÿÄPö+ú Ýÿß1ñ}Šãþ‚w÷Ì_üEb¸ÿ ßýóÿ@Ø®?è'wÿ|ÅÿÄPö+ú Ýÿß1ñ}Šãþ‚w÷Ì_üEb¸ÿ ßýóÿ@Ø®?è'wÿ|ÅÿÄPö+ú Ýÿß1ñ}Šãþ‚w÷Ì_üEb¸ÿ ßýóÿ@Ø®?è'wÿ|ÅÿÄPö+ú Ýÿß1ñ}Šãþ‚w÷Ì_üEb¸ÿ ßýóÿ@Ø®?è'wÿ|ÅÿÄPö+ú Ýÿß1ñ}Šãþ‚w÷Ì_üEb¸ÿ ßýóÿ@Ø®?è'wÿ|ÅÿÄPö+ú Ýÿß1ñ}Šãþ‚w÷Ì_üEb¸ÿ ßýóÿ@Ø®?è'wÿ|ÅÿÄPö+ú Ýÿß1ñ}Šãþ‚w÷Ì_üEb¸ÿ ßýóÿ@Ø®?è'wÿ|ÅÿÄPö+ú Ýÿß1ñ}Šãþ‚w÷Ì_üEb¸ÿ ßýóÿ@Ø®?è'wÿ|ÅÿÄPö+ú Ýÿß1ñ}Šãþ‚w÷Ì_üEb¸ÿ ßýóÿ@Ø®?è'wÿ|ÅÿÄPwŠ¢x¼1x²O$ä”;¤ ù×”M£¢ÈÇþ½ãÿÐE .P@õŠÅÛË'ö6¡o§C$©&£<–ÉÙ•˜þ÷x\©ço¿JI®U'¥Òzùì6š—*Õì]¼ñ™i$Q½å»O4ââ0R=ŒáÈ, R°@= è o‘I¿³¿ÊÚzëýh\Ö·]‡øw\°ñ‘o©éS¤Öó¨o•ÕŠ*ÛI†pFx­%b“ØÑ©(( € ( € ( € ( € ( € ( € ( € ( € (Æ_ò-ÝÿÀ?ô5¦€¹¢ÈÇþ½ãÿÐE .P@.‡ákÝþâá|1á©®Z{™SQ7,·,$we þŽH႟˜ñž½*Rj’‚ÓD¼žŸÓµŸ7ýhÔ4™¬ák‹ImmîÑ ÖïŒ.1± ]Ÿ7 Çð圢œ\/ÒQ¿WvßžŽÿ!_Þæ¶í;vÕ»/-~û¾§Má +í/Ö:v¤¶âk8VÖò3«ª¨¹U œgãÔÖ“—;æê÷þ¿á‰K–ë§C^   € ( € ( € ( € ( € ( € ( € ( € (  È·wÿÿÐÖšÇÆŸe²‚ßû?“¦ï;ÀÆq¶‹7ü'õ ÿÈÿýÿ„ïþ¡¿ùÿ±¢ÀðÿÔ7ÿ#ÿö4Xþ¿ú†ÿäþÆ‹ÂwÿPßüÿØÑ`øNÿêÿ‘ÿû,ÿ ßýCò?ÿcE€?á;ÿ¨oþGÿìh°ü'õ ÿÈÿýÿ„ïþ¡¿ùÿ±¢ÀðÿÔ7ÿ#ÿö4Xþ¿ú†ÿäþÆ‹ÂwÿPßüÿØÑ`øNÿêÿ‘ÿû,ÿ ßýCò?ÿcE€?á;ÿ¨oþGÿìh°ü'õ ÿÈÿýÿ„ïþ¡¿ùÿ±¢ÀðÿÔ7ÿ#ÿö4Xþ¿ú†ÿäþÆ‹ÂwÿPßüÿØÑ`øNÿêÿ‘ÿû,ÿ ßýCò?ÿcE€?á;ÿ¨oþGÿìh°ü'õ ÿÈÿýÿ„ïþ¡¿ùÿ±¢ÀðÿÔ7ÿ#ÿö4Xþ¿ú†ÿäþÆ‹ÂwÿPßüÿØÑ`øNÿêÿ‘ÿû,ÿ ßýCò?ÿcE€?á;ÿ¨oþGÿìh°ü'õ ÿÈÿýÿ„ïþ¡¿ùÿ±¢ÀðÿÔ7ÿ#ÿö4Xþ¿ú†ÿäþÆ‹ÂwÿPßüÿØÑ`øNÿêÿ‘ÿû,ÿ ßýCò?ÿcE€§¬ø³ûOM–Ïì^W™ŸÍÝŒzcÚ‹ÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/eclipse-import-project.jpg000066400000000000000000001320031203611042400335460ustar00rootroot00000000000000ÿØÿàJFIF``ÿþLEAD Technologies Inc. V1.01ÿÛ„    $.' "+"(6(+/1343&8<82<.231  1!!11111111111111111111111111111111111111111111111111ÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ&ÖÿÚ ?ô »Û-V1{«$·©9ó-í +1ó´•È<žz8â·Qka6hô/ÛÿãßãUiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p#‘ü=‹ü#Ñ<Œ TŽ9ˆõÂä㚉ÉSø¥cJt§Rü«aÛt_úæÿÀ)ÿ²úÅ?ç4úµO/½˜ÇDWí0+»¤·š1Ï[ª5¡'e!<5E+h»4ÿ&jEâ;O F³n»—K”ykmþ±íä`)f&ÐxíŒs›plÀÍÓb'K³lqöxÿôWpJîÅoNÖðGý˜ÁÜýîTâºiS¿Æ”ˆ©áËû»é%·½¶òÞ1¹\c ? U ¡¬HRLž}R;m}´ÉÑ",Û\”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀÃÔek=q¶ü¤ÛÆñç¯7ñ#貸ތ“ïú#\Ûj¬-އ#êö·GdsKµÆYgÚrCÓŒ·~^ÉJÎûUGš5×¼»u1üO2Aosm£& &3"¢o#æ…sÓ$Ÿö¢J*V‰èa!5O𢳾6ŒÇ¢§h_ýëÛOSäλ@ÓÌþÓÛÝk?ðY7f5£¹Äø»Á~&3;èÖÖ÷HÇî²Ä~/Ö½Xšv´´H¦ïKáÇõM#Ͼ×E²ÝÌ»("Aå®rrÊIÀöâ°Äb#?v;ØoŒ|)«_kWòØÙ™bŸC–Ö6£3$/'Ž;ž=ëÏ’n3]Ü©´ZNWüR3/<¬I¨éœÜh1ZÂ7 ÌË»+׎ܞ+JÚû^^²‹^ˆš~ï%úE§êÌø¬5©ü[¢[éÝÜ]-¼-!dÀÆŸ'w~U=*¥jj:.y;üÓ?w%åZ}åÛÏë±A¨i_a{£¨\ÛϦ6Â&íÀۆÌ÷ºŽiÆWœ^Ö“—Éë÷ô'–Ñ~qKç·ücIðuÿöŠlî- ›û«¦·v †Y Ùþ±XÍ?«Æ+t¿[ÿ‘´ZUyžÚ~Kþ µà½:í<9ek§ÏeqiBé6øª¸büsí]5&¥'%Ô ÅY›_Ù§Ò²¹aýš}(¸öiô¢àÙ§Ò‹€fŸJ.ýš}(¸öiô¢àÙ§Ò‹€fŸJ.ýš}(¸öiô¢àÙ§Ò‹ŠÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»G0X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓýÚ9‚Áýš»G0X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓýÚ9‚Áýš}(¸Xà*ÒŒ­ßôE˜µÍ;BŒYiqE©Å0ÿ‰ÅÄXû` ƒS÷P8÷ÎrŧCHì5ƒ{λ³éåýZíâ°ÀÓ&“s$ÖRE¾1("HI1±?{a²rH,s’5âvaý²ƒUw_‰ÔüMµû>…Æ7\¯þ‚ÕëAê|y½áÝ^ítÛ; -îšÚÊÝ݃¢ã|yy‡¡üªVíŒÓþÑÖ¿è_“þÿEÿÅÒ²î0þÑÖ¿è_“þÿEÿÅÑeÜûGZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À¯_ÛÝÏw…ÄWó¤I! &oŸ’4$’åO@{ܱý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²î þÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´u¯úäÿ¿ññtYwþÑÖ¿è_“þÿÅÿÅÑeÜaý£­п'ýÿ‹ÿ‹¢Ë¸ö޵ÿBüŸ÷þ/þ.‹.àÚ:×ý òßø¿øº,»€hë_ô/Éÿâÿâè²îý£­п'ýÿ‹ÿ‹¢Ë¸ö޵ÿBüŸ÷þ/þ.‹.àÚ:×ý òßø¿øº,»€hë_ô/Éÿâÿâè²îý£­п'ýÿ‹ÿ‹¢Ë¸ö޵ÿBüŸ÷þ/þ.‹.àÚ:×ý òßø¿øº,»€hë_ô/Éÿâÿâè²îý£­п'ýÿ‹ÿ‹¢Ë¸ö޵ÿBüŸ÷þ/þ.‹.àÚ:×ý òßø¿øº,»€hë_ô/Éÿâÿâè²î#ÄÚLj§Š{½ö ¢]‚K{˜T•Îprǹ52„^ìꡊ©‡¿.Æ?ü+çÿŸ gÿ-ê=Œ;_Úu»/ÇüÇCàE‚d’m/TPäÅ-å¹Vö qU1Or'˜Ö”\t^ƒ¾#ê¨èMÖk5ìhÊX½·bGLVð+<ã øÿ3ÿØ7OÿÑmQ?óv5˜Â€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €˜-;³ÂñT¢Kef$œ“Zóoˆê5û [é3U-ÆŽ§áÿü|Ïÿ`Ý?ÿEµe?ó8¯j×ÚÄývk;Ûé!°ðûêqYÍ};[™Ãã&=àmÁû½=«žq§R]¥½%kþzv5œS•5Ý;ü”­ù/RÿŠþ+±·»gƒFwƒH¶Õ†-å2©‹ýg_œÞÄm9ÈÖv§)§öd£ëuÃñò3‡½ËýäßÝòüwÓ[ú§ÄÏ(ñEÖ›”–š — ðÈÒJ³ b¥ƒ€ÉÁÇlc½)þí9KT¦ãøÛúßðÔ¿Ê–Ç›ð¸û¯Š:ÝÕ—ˆu}&ÊÆßOÐÙ¤¶»ÚkŸ3—ëãålõö¢º\ÒÕs¸ýÎ×û¼j+GËÍ÷«¤hi¾6ñ>¿ã[ýBµÒb²µ†ÒäËx%,R¢»Œ)Ã?ÍÀùGšK¿…µÿ¥[ñK¯ç¤ó+A¥¬£Çúþ´à%xfk½_V[èÜñ…š9pÁ‡üµiÛ× ·ZµocM÷_«ß»óÐrº«4º?ÑmÛñ9/ßëW~3ñņ™{â)/íÅ Ò Óæ¹òâv »pC媑×~\sXÒæt®Ö»Þú]®iS•M)mÊþûi¶§OiãOÿÂO©è†×H•t;[[‹Ù_ÌYLjÓ Hf'vߺ|ÕÊqä©U|1oî÷­¿¢ÿ.ÑË÷pûR_íýHIø‰â ¸|3ys˜–ž)–x-㎠–l ³¶üJ8ù€ ìj?ؽÜo~›&Õ½š“ι]E²’^z¶¿5æs¾ñÜÚU†› ém­„×··,°Ù]^F‹u…]¤ffëóaGnj!.zp¶‰A?¾M%ÿ—5É9·«rk¶É6ÿà#¤Ó¾"x—R¿Ð´ìˆtcP’>kûY–!C;㉙îì qŽýª+饢›êîÛVû×Üüµ™>DﯽeÓ³¿ÜþþÄZ…ߌã¦>·g ɦÍ#G¼ÆÕðï†0ùÃ,Twp}h¡g*—è—æ¯oŸ^ÝSHÃͿ˯õçä\Óü¬¿‹—JÖ’×B3j&ÚÖÒóN¸Ýyð^;€ÞY$ôqÈäç4¨þñ+ïfÚê´mzþ?!U¼/ÛK>Ží}ß´¿SÓ(P@P@P@P@P@P@P@P@P@RÔï$·òaµE{«†Ûsò¨³7°™ w¬ªÍÆÊ;²£êö Ù¬ÐBÃÿ_ÿŽÖ\Õ?™}Ïÿ’+Ýìþÿø·YÿŸûüþ;Kš¯ó/¹ÿòAîöüài·’JòÛ]ª%Ô8-³!]OG\öê1؃ZÒ¨åxËt)FÚ­‹løáktŒÈdn­!š¡ ¦#; ¨Õÿì%mÿ¤ÍT·)OÃÿøùŸþÁºþ‹jÊæ4YÔ¾xkSÔîµëK©®¯"h&s¨\€ñ·Xð$ÀOö@Àì+%“]õùÿ[äÛO°\ü;ð­Êʳé[„¶QØ?úD£0!R©Ãv*¼õã­9{ÜÍõw~¨Q÷mn‰¥è÷üÌ+/…¶rø«_¼Ö¢K&ûì¢ÒÒ;¹” c !_1»wZpm+ËYs9yjÿ®‚’Ö*:%~GEªxÃz¥ì×wºné.btŽy#ŠàFrždjÁ$ÇmÀúR^ëºïŸq½’ì­òì_±ðî•a­Þë6v‚+ûäHç”;aÕm'hÀ€¦Ÿ*q]]þzÿ˜šZy+/B-º>wqq¤[Íjn]ä’%º”ÂYˆ,Â"Ûð9 =:R»²½és=ɬb¨Â¤í€RI(8-ž¯ñÿ0z´ú­“‚4mD¿Ð4ˆ^ú×Ìk8nof[x ‡/±Nõ‹<ýÄö¢òŠ´7µ¯ä )?{׿dø/᥶Ÿá‹[?®µ(.¥»[›9d… y"9T«Œg¦}8VŒcÃì«zïþ¨6å)Éý§{}ßänMàOO 5¥ÃÉm;\ErogûBHÉ·ùœ€8ÝŽ ¤´i­,­÷Ý¿ÍýáÝ>¿¥¿É /€ü=#Y9µ¹Iì|Ï"â;û„|Æ,ù•\;d’~bzŸZiòË™vKä¶VØ:[çú³ðFgo{¤òMhí%¸¸¼žhàfêɹU<õR¹·k|»~pš¾ýïóît4 ( € ( € ( € ( € ( € ( € ( € ( € ( €9/ Ç iV·ÛK\Mß#1$å¹ëô•x‹Ý³êuËv7Hßïÿ}G0jˆ$Óí$ûèÇþÚ0þµ>èîÈF‹¦¬žgKã2¹8üérÅ;…Øÿì«ùàïã=¨ž*$Õa"8/"’NÑäÄØçÜ“ø×©ø¯èŒ+-W¡ªÌzï±vVÏ8ñé;¬ê%mÿ¤íMhÊ[_ÃÿøùŸþÁºþ‹jÊæ4v5˜Ê ­é2j­¥&©dÚŠ µ ¸C2Œg%3ž‡=(¼›]û¶¹=Íõ½­Å¬ɲK¹ p®Òw0RÄqÓåRyô¡jì»_òÿ4ErÅF³Â×n²ÆfCÅ<2¼© ±»BÛ$ À”lƒèpAÇ¡t¸m¡%¼ðÜGæ[˨—r0aH##¸ ƒî(ó"J(  ú…í¾›c=íäžU½º$}¤íP2N'ð£ª]ì¾ý•Ëädt ”~³c¨Þ][Y<²=£”•ü‰[ÁU®Æ ä¤àŒQc̶þ¿=†ô|¯ëüËôPrÏ 2E²ÇÌÅcV` œ@Îò¼u {»èYºÕllº¹ŽçRñ«ðUëÓ;@É'Š­¥ýoþO.P@³Ã ‘G,±Æó1XÕ˜çs€O£È6Ô’€#Yák‡·Yc3F¡ž0Ãrƒœ:€pqô4Ä”P@P@P@P@W…o†ì¤û1¯ž©+;…µcá6÷FK»‹h.<ò4aÂÆ¤Àìr~€TûEݤÛïÛþ(]Û°¦>Úu‚ý-cÿ Í×}—ܿȿf¼þñ†ÚÈÿËŸámþ•>Õö_rÿ"¹ôÆ5‰ëej>¨þ•<þKîAʆÿgiÿóåoÿ~Å.o/Á”v…cnÚ¤×pAQÛ%6(˜òÇðà~uìeto'Uú#‹;ZÞ5ï'žxïþ=uoû [é;QÔ¥±Õü?ÿ™ÿì§ÿ趬gþe#±¬ÆyµáÕmf¿³ðœƒÌò^Oå_é…E¤Ì²‘$Us°ùIrCõP¬Õýº$½muxô¾—Û[«Ýè^Š¢o«^›Zþ^u“2c³ñ ¶Ž]&÷T½ºäxc¹Óo û4¦ÖpuÔ»,PpÛûÜé?vöÚÏ_.h]-žÉµ×{lD:swWü~^¶-é±êQXf}K_ºÓ^æ#{ Z~£oq l~Q¥‘å`_ËÜ"núšvM'¶¿}•¯ÖÛÚým} \Ö¿[/Ï_+útÛ[Þ±¶ƒÇ^C´!¹Ó Ò\µÙC´ÊIæ©LI“Dn”—[ßåhþ7ZÛ^úV÷óûïùk§OÀÏÓ¦Ößâ3lÔ`·’êx®mšÆ…"ûÍ‘ü˜ª#AØ'®fÂïÙüÖšêúê´ùXuwÓ£_5o-?[üÈüYoys¯\,ðë“\¦¥fö+n.>ȶêc,Çgî‹ó3¿,8#€+%u­ýûÿà.Öü6Ö÷¹R¶Ïk/¾úßþ–·Rµ…—‰¿áÔ/^}hjè±™çb°ùVær‘RÍþ³•!ó¸) kz–M%³“¿¥åmºm·Mî’DÆ÷~KO[[é{ÙGw ½¢jº‡ˆo´c,Å¥–£mýon¶µ¯Òýl-u·}~î—ümù\eÍŒ–:Ö¤D^%K;N9®šÕ¯½©·P¥ ’sæ€'ï?-(éh˧7ßvÖÝ,ÞÞííq¾ñì­é¢{õõÖ×¶¦ƒ4ÍZþîf×.5¨ ŽÍVÐIq4_+I8RüŒÊ"ò³»$ósIźm7i===ØÞÖÓ{ù^öÑ»—Jk—á»üúùvòµÍO‡²êwÐ]_j³¼[RÉ!‡+$Àgy7ó× ¿J¶Ô¡Ïks{ÖìšZ/-Úïq[–N héë®ïÎÖO³Lä`±—M­n"ñ\Viq|gmzÌf2“nT©$¡BÇ(vn#8¬—7³J;¨¤¿Ä¬žÿ+_ݵìjíí{7¯¥¿«Û]º‰¶?á Ñ>ß5ôwãÊk䱆wóœDK#5·ï#¿ã ƒŠÒ¯/µ|»kmüºþIèýleJþÎÏþ ×óïoÈÁÓ“Äo¯YÉw«éÅ>ÌmíÚÒòí^?-7¤“FâżÀÍ,{†wp1^.Owïiµûw]¾«ï%ª²Ñ}ý_Ïäúyܧj†¯‹l¤huí>åÚYöÛiüjÝվúüŠ‘ D[ùuØo“r™`‰åU·û$¾SlcJÆr_q²®]o»½íµù£·÷m{[]ú¡+'¦ªúz]ïçëÒ×ê"XÜÏg¦\^[x ²Õ÷É=ù‘ÔÛߢ™0 Árß1Rjj^ÜÑѸÉ/[¦¿'½¼ú +Fž«Ý¿Þïó³[oÑ^äÚ%‡ˆN‘£q6¹ý§åŠGÓÎË1À%ÝpÃ&MÅÁðA­*]?swÏÿ·òùv³ôÖÖé§Ù~zÿÃl\ð-ÄãĶ6÷SkŸom2Y5(õ¸Ä‘cû¼\Ë‚=©Ç–ÓäøW-¯¿ÚÞúëm|ÂwM_{Ëm­ååø÷ ÒdÕ,ìõ+kïÇ©¯šÚÊM+›ÚIYœ`ÆCdÆH8¬Wðb¿»ôjÉ^Ûkk¤híí]ö¿õ.å[Èeû~uáØ¼Kˆã q-òÞyŠMűa™º¡²åÀozu*›Z/òŒþ{Ú×ëæDnÒ¾ÿðÝ´ï±OOmJóB±¸Òµ¤ré±Nâh/'Ý+âã¤a~úýßÝ©‘¦Øxž? ê7Z¼úÓjk%´2¤3¾áÈ æiõŸ2‚ÙÝ´äÖóq¼{6ï÷ÊÞi^ÛkË䕳Ýù{i×ÎÝô¿Ì†ðëq[Bú5Æ­’Þ]Å¥G{4ÂY#û#°ób be%Lƒ c+'{k¿+½»)«mוô³ï©¢åæ¿KÇïk_–Ÿ}ì.›¥†gÔµû­5îb7°Å§ê6÷¦ÇåYVü½Â&à/¡9ÑÙ4žÚýöV¿[okõµô3\Ö¿[/Ï_+útÛ[Ötñ§{s§ÉâkE»°´[k”†þàíYH² `àí+Ô‡‹/9¨WWO½üšåVÕlîµ¶¿Ì­rô÷Zì×£ùúé};kc¬ðUõÀÓl¬î´íN•g”=Ì’ÎVL(i% &X0*®¡°zs£×î_§n¿+ërŸ}¿ íÑ_×]´±ÓTP@P@P@ævE|5§ÚDÅfºR‘ÕG%›ð\Ÿ®+åj>jªVW5C*ª¤jU€?XJ|Îå¥eawÒ¸ìè¸X7Ñp±Zöé¢lCt®B"ú±àUA9µÔ™5s{O‚;­‘³å¯'ûǹüNM} j5Ðñ§')6N•¹žøïþ=uoû [é;QÔ¥±Õü?ÿ™ÿì§ÿ趬gþe#±¬ÆP@P@PvðCk Ãmpă ‘¨U_ y%P@P@P@4ÍIÒ$šM+K²°{‚ Ímn‘Î7=O_SBÒ<«`z¾g¹~€€AM&¬Á; ‚­ Ž x’bP‰(UEè*›mÝ…¬>˜!7 pbŒÎŠQd*7*’ õÁ qì(Ø (±Ó쎢5gno–?(\˜—Í œíÝŒã<㥠KÛ¨=m~…š( € ( € ( € ( €™PeˆQï@-áífÅX›ëÈ`kUû4QÈáHç.qîp?à5òU®¤Ò[žÄVˆÛ!ÒOMFÛþþ æ´»(×´³Òþßþþ ,û¿ÛšwkØOÑÅ+0#“]³丈ÿÀ©¤+Иê:‰¸Ož+~ö.{þù×µ•Ðæ›¨ö_™Çˆ—)Ô°0BeœàÝÍ}$UÏ:M!ÚeÈ»µ.bqJÑǕ؄î®pÞ;ÿ][þÂVßúNÕ=K[_ÃÿøùŸþÁºþ‹jÆæR;Ìa@P@P@P@P@P@P@P@P@P@P@P@×Ea†P~¢€!6ÐÏÿï‘T ´óÆ?ûäP!†Úùãýò*€a·„Ë$ÿ¾E1\a·‡þy'ýò)Šå{Ùítëw¸›dHƒ9àUÆ-»"[¶çšx£â,W1µ­œ20'h =½k¶GvsJnZw€æóü7ç<𯲴Íiü'9ã¿øõÕ¿ì%mÿ¤íXõ6[_ÃÿøùŸþÁºþ‹jÆæR;Ìa@P@P@P@P@P@P@P@P@P@P@P@†€iˆi¦¨C 1š`A<Í:(äÇMê*“kbZ*¾—§·Þ°µ?XWü*ùåÜ\«±$ðÚÇåÛC1ƒ±¨Qù opµ¶8ÿÇ®­ÿa+oý'j]K[^Š).[͆)q¦ØãÌ[»n™”ŠF÷Ù­çÎÓÿÓü*fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…pž6UK-UcDF¥o…E ú;v´:ßð·ü|·ýƒlô[THÐÔ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € à€#3D³¬T2—XË ÅA=Gæ( ‰( € (5š&àYPˆhà ÊpHìäh ‰( € (޹zúv•qw«´+¸+t<Ò`?ì'þæ‘ÿeÿâi]€}ƒÄÿÜÒ?ïì¿üM``ñ?÷4ûû/ÿEØØÐçœ_÷À¢Þ`h?óÎ/ûàQo03f–šþ´×Ï~–ûÌït›íþÖ¦÷‰umsJÕ`°M~ÎÑVÙfŽãR¸ŠÕn¤.Û”þáƒFÕ(À7$䡬ÚìÒ·V»ôÕ붗躟a>÷ùmÿ¯ß ÍoP“SÑLj ’0# A“`ëülOcJ±q¨éÇwt¿ÅÑún¾í÷,×3Ùkò[þü´Z›º4·êc}«ý®æ[³„Úä¸2︌mí·ÞŸºù¹v¿Ý¦ß©:Ú<Ú6ŸõòØ“Åÿò-_×?ê*Å'fºñ£Ü^\YØÝÇ<ŒmçhyfØÃ®p]°¬ ÙÜdTÅsIߢºûìßËõ¿aÉòÂë«Kóüßùu'¶mîm´x/í®´ù!¸ÇwtÓ]±‰%•w2±bHùFiJ*ª”eµº}Úþž{‚n›N;ßô¾ž}}6ÒÇgªk¶réÐX^[3éš]ä2Ú\‚âKy#@KïURFÜ1›ûÜW<ªsT{ÉGï|ÉÛÒWÓ­’¿P匆ÉIÿà6Mä¿ç©§kã-JÊŸ[û4‘Á$°\¤vr[K¢‘«;ƒœ:åY•‹&ÓC×HjÚ÷|å}­ººw×kyè’kM›òNêÿ}¾÷t¬:øš9žKѤ¬6š…­…Ä1Á&÷iVÌ®_ µ¥8[ vëU(önKÿæ³ùÛoÇ[)mò·k4“ûú|»þ&µ¼ûTÚE¼’Ëm¥]\É-…¶¤öWÅ!Ictd#vÏ1—k2®HÉàV)¥O™í˧Km§[ÆÏï²w±¤¾&–í§ë{ßÿ&¿á²,ÚxÁåðÄ·¬²D·––P5Î|׎Xà$¿<ɉXñÇzĦâÓëÏ·—>ßr?vZtIþ6þ¿37Cñ6µ¡h-”ßÙ× w¥@ö®±: R^˜ï;×÷ älÎÒ;äoRò­(uº××›KwÒË][èf­©t÷´ë¦·ô咽d^#Öu ø’öæilï/–Ò6ÝRÁÛã¨(%lò£9$w•7{ÅwüýšüŸô´4’Ù¾ßækê%ñMާ6’N¼¸E†v¹¶´säÄâ]ÃÈ3•—Êûˆl…8ÁI­|›»ù.5z½m§{‹¢}Ö‹çßÓmµLEñˆõ­R%Ó4è/l!kx5Emñ£´€É2º! LNÜg'師êôZþk~´wõR|ªËuþm|¶îõ¿bMRÔìí›NÍ}%¼žD©p¾ÕÌÈoß çIÁÎ\ëÙº–Ò)¶»ÚM|–›ë®…rÚjíòº{ùéuµÖ¤šOŠõ-kQ±Këkk-'T8ž•¦/oæ2ùÈø8Ù".à2¬z 'IKžœ¼×m—ìúÝn¾ZÄfâ£8ô·ßËfž©é{\Å}o]Òmí>Ã}l¤ÞÇ5µÄNë3ÛÉvºŒ‘´†ÁÀ-ýî9T“›û\Ÿ{mJÛÚҿ܇ÉÚ D›û­uÿ’%ÿ‰u]*Ó^ϧËs¦i±Þ#GÆ…ÜË… ¹$|Š:Œœôέ§ø”~þ]ßæÖ×ê›ûŽÅ^#×.<){-àÓÍÿÛìÒau•<¥›k—.AÏ•‚»G\çµL7…÷|²ÿÉ¡§ãåmµÝ¸½Úé§ÞŸõÔ×›U¹»Ó4ÿÜy}ƒRÖà{hŸ0²JIåÁpÇÀna¾F¥½Ó]–º¥ÿ$›~wKeÖ?Ëgç¦ïçíäÓ¸ÍÆÔúÖ§ë e ÷².ûe·thQ¢™ÆÙ|ÆŽ`|µÃ¡þð*§qŽ®=“¿MSZ[¦ï½ú=5s|º­¯§¥÷¿ü7ÎæBx›XÞ!ñ‹é¾]•ªbx¾Ð‘Ü\¢ª0qµŠ¯R$Ž*i|oiJ?ù4aù_NýËš÷ùV–Rü;þ½-{SÕu],ß4¶péñkÀ–‚ûB´wH¹i7àd©;Bpç½fß,c7ÕI¯ü_ðÏmoØKÞR[mÁþ¾zzé_Fñ†¾tHu3ýšl`žÊÑ­™%iå󣄖´‡eÏ*Ä…äçšÞ§»-z¹.ÛsYþöWdtvè¯ÿü¼ÚVþŸFÚKijukÉ"X­R×@u•ò§\#2J½N@#i‹;ò-ÕïÓkim×~º'ê[²»éÓïJ÷ùìÒÖÝÎïוֺݘ²¾;„‘½˜€ØVp28ÜØÎ2qš©[K]ÉWÖæH€ †ïýK}þ‚iu@eÇÿ³}WúÕ=ÐSÊõ5´_ê3$ÚSj)ªÀc·[pu_.,²É»"02XlÆ Œñ”[…>hôçÛ§Å¿ôº|êjîÏ´5·›ØÑ“YÔm´MmWÄòiñßÙ½Ô—Í »¤+¹ €rí‚ §t­jû“œcºZ.îÿ¦ŠË]wv¸¡ïY½›·¢×óï·–£¿á'×mÞ9oÔÄ!‚Bî(.DFLõ5ý~LtêOG.]lÜ}[Ö?ºþòcïEkº½ü•ù¾õgó*Ýx“]±¾’ÔÖ÷PŠÛ)al±7ï¶óçE´J2ü†Œ²ž z©4¹¬ô»×¢WµüŸ]S]·H¨Ú\¯kÛNº¿Å[NZîöf·ƒ¼C!¶¹ŸV×´íFÜÉq5µÒÜÉÈÛB¿— aA%q•Èù²qÓKZÑëwù_¼Í7»è®ÿá·:IuÍ:/?}Æ>Ïs¤Ÿ#|²¾Ý«Óœù‹È㟭BÖÖë{|¯É–ýÛߢ¿ÈÑ  ÿȵ}ÿ\ÿ¨¤ö^˜Ž?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕt5²:©Uv z€x4Ú( € ( € ( €+ÞY[Þˆ–ê1"Ã*Ì€’uåO¾<÷Å FŸoÕ[òaÑ®ÿð助«ØONšÈJ°ùÀ)v…8i=€ÖÔ£Òõ[SkªZZ^Û’ †â/1 H©jý†ÙÛi"ÜYXÙ[ ThàBÊV ²®å€HqNò½ÿ­6’V)Ë¢è7S^ÙZÞý¦o<¥ÌBUÌkxʨϯ4’²JÛ_ñÕ¯¿Q·­ý? Ÿ¯OD‹6–Z%•’ÙYé¶ö‹ •`ŠÜ$aÁ0P¸È õÈï-<¶þ¾b²Õw܆œÛ÷[[2U™óÞ‘qµÏËË «ƒÔ`zP®­nŸ®ÿ›ûÀÍÔ´꺣ê®g+Ä‘lºeE X‚)Áùˆ'¸Ò”Sì¼ÿ¯¹}ÈmÞß×õmmêû–gÓt ‹ä¾ŸJÓe»@ª·l­"…å@b¹Ç”Yë翘º%Ûa–ZO‡,-®m¬t}2Ö µÛq6ª‹0ç‡pÓ×Ö†›\¯a­2Ü­uῠͤÜiÐivPÏFM­²FÈ0%p˜ý¿ˆúšn×éþiýÎÊà½×tJ4 ;û8h:GؼÏ;ìÿcO/ÌÆ7íÙØã=i»»_ ¢¹v&›Kðü÷–÷“i:l—V¡V žÙKÂî…b¹P;c¥’“—VVåè=-tèõéu¥Uûl¶ëlÏàV,1òärÜóÎ¥¼SK®¿§õÿ[_§õýz³;Rð·…¯ÖmúFŸÜJ’ÜIª+O¶A&×;>e,£ õ¤—-¬´]:l×á}Ýïܹ&á¹tØ´Ùtm-ì bñZµ¢˜£cœ•M¸“ÈÍ?zê]P–—K©2Yh‘ê§TM:Áu]¦ì@Äcß·8À¯Jã{u -m¼Š²èº ÅÍÌ×¶V·¦âo?eÌBUö*€¯Ë•AŸZQN6·KÛÊîïñÔo_ÃðÙúôôH±©XhZ¤ÑM©éš}ì°‚±½Å¸‘ SM]>e¸º[¡$¶úD¶âÞ['…YØFЂ ¾wmÆNæÏ®ãëFªÞ_ð?É}Èõ -*úÏQ¶’c”f;™"]¯ Û´Ûy t'¦K‹jÞwù÷_+¿ËåÛÓr´:…áÓä°MIû,¬¯,?c@’°èÌ¡0O¾*ßM¶òôUºëø¿Që¢xen-îCÒDö¸ò$iº/˜·Êvåy$ñÜ“BrNëé~Aekt$—Kðôº‹j2ékß9®ZÕL¬F1–Ûž0?!I+&’þžãzîUÓ|;áÍ;T›S·Ó¬¾Ù#†IŒ ¾#XÂFÁ2«µzg¹õ§ª/{ßÎîú÷WzÿV&‹DðÌ63ØÅ¡é1Ú\0i [4ÊGBË·zM6’ì;êßV_°þÏÓmÓN·¶³¶;!‚?-'' “M¹=Ä’[ýº/ï/ëþjö迼¿¯øQ¨Û¢þòþ¿áF 2{¸ž6‡CŒgÐûQf=î©c¦Ú·Û®cƒÌ`1屜àž¢‡Ð ïøIô_úEúÿ…; øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐÞ%×ô«½ ò {ØžWL*ŒóÍ&Õ€ê*€àßgÿ?pßÁþ4}¾Ïþ~àÿ¿ƒühû}ŸüýÁÿøÐöû?ùûƒþþñ íöó÷ýüã@Ûìÿçîûø?Æ€·ÙÿÏÜ÷ðo³ÿŸ¸?ïàÿ>ßgÿ?pßÁþ4}¾Ïþ~àÿ¿ƒühû}ŸüýÁÿøÐöû?ùûƒþþñ íöó÷ýüã@Ûìÿçîûø?Æ€·ÙÿÏÜ÷ðo³ÿŸ¸?ïàÿ>ßgÿ?pßÁþ4}¾Ïþ~àÿ¿ƒühû}ŸüýÁÿøÐöû?ùûƒþþñ íöó÷ýüã@Ûìÿçîûø?Æ€·ÙÿÏÜ÷ð>+»iœG ÄR9Î\ëÒ€-Euc¹T.3»Þ“v|ÿ=âüÏøQp Ïx¿3þ\ÈóÞ/Ìÿ…òü÷‹ó?áEÀ<ÿ=âüÏøQp Ïx¿3þ\ÈóÞ/Ìÿ…òü÷‹ó?áEÀ¯©Ma5äó!Ž,Bd“ì8ëJà>¨ÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰7§•a†IX±©cޏ5*iz-èÜjÓÁ4è%†8ˆ‘O(HËFy²fì ïÛ"G,žk„œ.7Á8íÈŸ?Êå£â­$[¤¢K–g‘£-”Í8`9„&ñ€AÉ\a‡¨ÉÿøÛóÐ;ŽÑ á)ô0lí|èd‹u•§“nÏ+㎿Þäæ©»´û4þ昣îÜÊÕü§w{<·ˆEÉ.±½°tVýÁ8eÌŽ2ŒŒf¡+[ÖÿŒŸþÝoÄ<¼­øXÒÑ´*ÞÞY´Ë$K“,ñéÚh·Žt)¥K¶pwü b®ú®Öb¶ýô7© (#Åÿò-_×?ê)=€×¦@P@P@P@P@P@P@-¯Þ“þ¹·ò¤úGÿ³}WúÐ÷@EL’ÁæýËL³„|±P¸·cAÛÖ€ "Û¬S0À ÜÑîÂ猎ê;úÐ œJŒ±1Q"ÊÒ¡Fÿr|¸øéÁõ4Kc Œà./,Æ©íf]›æÏÍÈã¯ã@ESEÝ„ëGRI ‘’xô¤¶ò°Ì€ð£„ùr× Ï¿µ0@/ÿ‘jûþ¹ÿQIì½08Çž«ÿa+ý'jÚox[þ>[þÁ¶?ú-ª$èjP@P@P@P@ÆA!N#pdtë@ý¦_Uÿ¾øRå@i—Õïþr ´Ëê¿÷Àÿ 9PÚeõ_ûà…¨í2ú¯ýð?ÂŽTö™}WþøáG*ûL¾«ÿ|ð£•}¦_Uÿ¾øQÊ€>Ó/ªÿßü(å@i—Õïþr ´Ëê¿÷Àÿ 9PÚeõ_ûà…¨í2ú¯ýð?ÂŽTö™}WþøáG*ûL¾«ÿ|ð£•}¦_Uÿ¾øQÊ€>Ó/ªÿßü(å@i—Õïþr ´Ëê¿÷Àÿ 9PÚeõ_ûà…¨í2ú¯ýð?ÂŽTö™}WþøáG*ûL¾«ÿ|ð£•}¦_Uÿ¾øQÊ€>Ó/ªÿßü(å@i—Õïþr ´Ëê¿÷Àÿ 9PÚeõ_ûà…¨ÜÊA#(YFý/¤„Gcw®N]š0œt‘Ž¿ËñØu¯ú Eÿ€CÿŠ£P°ë_ô‹ÿ‡ÿF aÖ¿è5þþ*@>íÐj/üüU€}‡Zÿ Ô_ø?øª5ûµÿA¨¿ðñTjökþƒQàÿâ¨Ôì:×ý¢ÿÀ!ÿÅQ¨Þèú­í¤–×ÄM£kfþÍE˜´Àà)ÖfÑ$ŸO"ïK}Frƒ)\Æì²X‡:íÁSÁ«å´”_G ùó>ŸuúÝt§÷—ÝýkÙØ³‹µí÷÷룉t‹6¹F#ËR¾Và 4±É_»å nêq“ ¾E'¥Ò·m__%Õé¶ÂJíEy~_Õ»–u9|E΀_WÓC\]6|›I7_!ÛiýñÜ8<úà㌗¹6»'å³Üüõ°¯ÍeÕ¯ÆÿNÃtŸk7L·òévWŠmßɸ‰âXÒI H’\„d#æà¨éM-Ró³èöÚÝþõkö ;^ÛYÛåmoÛ]vggHa@P@P@P@P@P@P@P@P@P@P@P@P@p8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[TH½4QÌ&$PÁ‚º‚2 ýAqP›[ CFuœÄ†dR‹!Q¸) ¡Àü…“ám2æÞæ hSN¯ºñ¬âŽ7ºå]¶’AÉäa½¥vÖÙknšà ½ß]®[&’5#¨.ËíÄ`Ý}<ÓÆ>þ3ÓŽ½(²³]ÅÛÈŠ/ èPÚµ¬:.»H%1-ª.:61Œ^´ûy=ÇÚè5œ¦‘ao޲Ð]Ís¦€`š2Ò1åÏ8Œä€xÉ«¶Ú[T¾mGð÷¾âWk÷q£øâH­™u];R•šâñ-î8¶\žB"@ÛಀvžIë ISRz{©¿Âïñ½·¶È¤¯&–×·¥öþ¼õ/ë>?Ñt˜|é™äŒˆ|·i#J¬ê¡äuPB.㸆\HRN2p{¦×Ýkþh˜¾h©-š¿Þì¾ý~íHl¾#i7¶ÒÝZZßMkohnîn#XÚ8‡;Žè˜|›àƒŽh—ºœºiø¤Öþ½vëm/Q\ÒQ[¿ëúêú<{n<™¦Óï­âš’LqJ÷$´+ŽHåd!ŒÀÙÎJíåÙ©8õÑ[Öÿ¢¿’ïÒT“J]5ü?_-ü‰?á;§û$:&­6 žof‹™—°¶æ2äHŒ0Ç úñPä”\º%ůÁ§§Í]jRNü½à_úôksÛǷךÖmìÆ»·Š4“Ls±ÆÛšë”Œ<Ä#'uaV—#÷ÿ½ûw›nûtý oKDzüZû¿­Íˆþ iÆ,š~¥ ËÍd$Ý~ŒêŠbÉgNaÂp2Ag~[k¦UîõéÑß]-¨Ý—¦ºôÓøúäñÚÛ[/!s ÄO¥2FnåZª0ÅOÉ!l‡Ú䑃… omv·ß$þë–êä½Õ®–ÿ$×ß²óÐíÔ’ •*HèzŠoA-P´†P@P@P@P@P@P@P@Cwþ¥¾‡ÿA4º 2ãÿY¾«ýjžè©‰âvM.öÂÆÖ Y.o‹ˆþ×uöxÉ]¿(`¬Kà  7¥MÛm%Òÿð߯a»(ó>öûœĶP:[]y^Q"žH¡‘”J«°7#NF:Š*JÊNÚöó°EmÍåþE}Å–WVzp¼¥ÝÔ0´ž]¼†ä‘C2`ª“¸aY³ÊúŒë8¥7Òÿ‡æBvWÖ¶¨øÓN¶´ûM´W—q‹ˆ ßœû{íÜŒ‰äü¹Ïušwqóÿ&öù~¥µkùÃçüö@p´rëÄþÕ´_Gâ4ä½K«I.b…]f‰c KðA¸ÁéƒÖ˜ž¢xŸEð–· xáWØWXŠhå¸}~ÞWÕ•A$UaW>¼ä’@=+BÐoSÁÓ¦¾½Ò/´û+t‘­6!Ö Œ‡rº0Î{@ Ò¶·Kî>YIm<jº¥ºÞBb½1‹¯OQ;ï×]}z—bæ—á m>þ+–Ô/®ã·šk‹kiÌ^TJX³.ÔV'çp73`1¥u[Êß-4üõq5¾ÿ1©à»4èíl®¯m%†èÝCu©–'ÚP¹J•J‘´üÒW\¶{+z§½ý^¾¥=\›êïÿ ýu}ËVþ Ç}WPšîòÙmžíŒi"….U—b*†aíŽrúYi­þz/ÓóTÙ“Ã)Zyžòùîîä{‘åDþk4N%4U9ÛÏ;ƒf…¥­ø_ðwi­­ó«÷µÿ+Vë÷#GJð•žzׯîîêòT•fžr›¦2yyf ª$Q€¡<Ò”S„¡²jß›ü\˜îù”º¯ò·õçr–Ÿà+.Ôõ),Hek >T"£1‡ãËC€À:cŠ©>kók¿Ëš÷üÞäÛ¶Ãý9a1I¨jS,Q,6EåMÖ®®¢"†Då÷œ # —w½õÓ^®×ß§W}5¾£v}4×Nšïÿ·AáÓ]žk‹Ëéïdó¯£Y|Æ1‘(Ú€+/”pÀäšKO‡M¿ßãÌïÝi°=_½¯ü2Vü.ºß]Φ%)#HÒ2€ ¶2Þç ý¦ÝÝÄ•êC ( € ( € ( € ( € ( € ( € ( €!»ÿRßCÿ š]PqÿǬßUþµOtTÀÊ×ôëýF! ÝœP·²¿Ž{s¦Nа‚÷ÚhžáLh©˜åÞ»xPy$zUOÞR[^þºþzÿ‘+KKîéØM;áô:}ì©Ò®‚,"G»ÒÄ“†3›ÁL„'Ú©Ú\Éìï믟õ¦‚íý/¸¼¾Ô—EM(êÖÆF…¬ŸìG|~S†Q'ï0ü(=i7&ԟľíšzyß¾ŒvZ¥³¿õò/jþ]fæÂKû©„vaÛe¬’[—•€]û‘ƒñŒÿ^)8Ç™¿+~:úì¿­‹¾TŒ­ÁJÔm.Q2Cd@†&ˆäFáP±cœ €ÏûüT[[ïoÒ+ÿmüE%}»ßñ¿æÎºÌÿȵ}ÿ\ÿ¨¤ö^˜Ž?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕZñü‹WßõÏúŠÍì3¶¤XnaŽ6OîNç Íî{)ü àyÇÅû¢þ)ð›øƒTÑ´¹£Ô¥¾ŸL¹hŸl0¬™;AÎ ž0O$iÊx¾ÞÇL–]?@ñçumAtËEÞ-gÌ‚Ú$¤äe^ŽÁŽŒ®àE±ÖõK_†¾¼·/=ÅÝ¥¨¹»šÞ[Ã0îi]‡|9-’p Mý䛲ïýmêôCKFÒ»íó_Õºš>.¶M&öâîâ A´ûAw5Κ‚hËHÇ—<â3Nã&®ÛimRùµÃÞû‰]¯ÝýÆvã‰"¶eÕtíJVk‹Ä·¸HâÙpby‰pwlC‚ÊÚy'¬)%MIéî¦ÿ ¿ÆöÞÛ"’¼š[^Þ—ÛúóÔ¿¬øÿEÒaó¦g’2!òÜd^Âۘȑ"0ÃëÅC’Qrè•ÿ¿žŸ5u©I;òõÿëÑ­Ì{oß^kY´x?³îÞ(ÒM2uÌRÇnk­þR0óŒœÕ…Z\ßþõÿíÞm»íÓô%½/Ëñkîþ·6#ø§L²iú”+,K5x“uú3ª)ˆ$e8}‡ ÀÉùm®šuW»×§G}t¶£v^šëÓMÿàwèS“Çh”ɸ{•hJ¨Ã?$…²hS’F5½µÚß|“û­þ[«’÷Vº[ü“_~ËÏB 'Æ·¯5ÕÞ¯t–Ú}¬·^lK Ýü‘ÄÎ3ö­æ"p™8Ÿ”sI4©©>©>Ú»wõývMÏ•i¯¯åý"åŸÄÍóK¾¾‚6"ÀÇçGöÛ>É ÞgŸåA.Û‘–ýÔŸwoÂÿÕ®%«²íëþ ˆføëÛ=6æïHŸO¸¼–XŒ%ã1:©ë@ dƒ·vr¥I¦—¼âÿ»oûzöóíÓMn.‰®í}ß×Üljþ.µÓudÒÖÂþòòO/ËŽÝSæ.²°å™@âÉ8?yÙyþ·ÿÒ—äµ²oE.åm?â‰âìw?i2É · Ý"¹v2.6·,N8'#$=õxö¿Ëú}u½Íü¾Wþº_Sª a@P@P@P@P@P@P7ê[èôKª¿Ké!ØÝÇk“—f‡Ì'äc¯òüi (ý‡Zÿ Ô_ø?øª5ûµÿA¨¿ðñTjökþƒQàÿâ¨Ôì:×ý¢ÿÀ!ÿÅQ¨Øu¯ú Eÿ€CÿŠ£P°ë_ô‹ÿ‡ÿF aÖ¿è5þþ*@>íÐj/üüU îªÞÚImq¬DÑJ6°`ìÔY»LÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰-x¿þE«ïúçýEföÛR+S˜9ý㎹þ#îÏaÐ$ñKH×.¼Oá}[Eðô~ ƒNKÔº´’æ(UÖh–0¤¿»Œ˜=iÉéÚ'‰ô_ kz‡þ}…uˆ¦Ž[‡×íåq½YT@%P6sëÎI$Ò´-õ<áí:këÝ"ûO²·IÑãbbÈw+£ ç±ä +kqô±^ãáõ”–ÓÁ«ª[­ä&+ÓÅ›¼»¹gÌgiÝ#Ÿ“hçÆR÷Z¶ÊÎÞjÖóèºôõ¾ýu××§ùv.i~¶Óïâ¹mBúî;y¦¸¶¶œÅåA$¥‹2íEb~ws6Q÷U¼­òÓOÁWWûïóž °ƒNŽÖÊêöÒXnÔ7Q:™b}¥”©QØ©@ïÍ%uËg²·ª{ßÕëêSÕɾ®ÿðß×WܵoáѼwÕu ®ï-–ÙîØÆ’(RåYv"¨aæØàq×/¥–šßç¢ý?1uM™1ü9Ò•§™ï/žîážG¹TOæ³DâP#EPá¡C¼ó¸6h^êJ:Zß…ÿvšÚß0z¿{_ò·õn¿r4t¯ Yé×­|nîî¯%IViç)ºc'—–`ª "E:Í)E8J&­ù¿ÅÉŽï™Kªÿ+^w)iþ²±òáMOR’Ád†V±ÃåHñ"*3~<´8 #¦8ª“æ¿6»ü¹¯ÍîM»hü?Ó–š†¥2ÅÃd^TÝ`Šêê"!8dN_yÂr2 w{ß]5êí}úuwÓ[ê7gÓMté®ÿð;tþ5Ùæ¸¼¾žöO1šñÚ5—Ìc¨²ùH Aɤ´øtÛðmþ<ÎýÖ›ÕûÚÿÃ%oÂë­õÜÕµðíœ>ŸE™æºµ¹ó¼æ•€wóY™ùP1Ë` R’æJ+KZÖém¿!Ÿ˘¡/„dšu¹ñ¯<Ö’‰­n$[S$ ã÷;NUŽw>„U7ïsu×î}?á­÷hJI.^š~2x O’ÆF¿Ôv¤w1Jþbn¸Iß|Šçg÷°A]¤c¯Z[ZÚY%ÿ€ü/Õ}Ϫe'm_{ÿŸÉÿÃXžÇÁÐ[k1j×Z®¥¨^ÄÊCÜ€ùRD ŒbVéßùiòÞÝoøòÿò(Ž]íúôß3P’{=Zý-$•æ:yòšîIb O0Ķã'ÓŠQ÷b£½´^_ÖÚô*Z»›4P@P@P@P@P@P@ ßú–úýÒê€Ì€„‚WÚ¤‚¸Ü3ëM€Ÿh?óÎ/ûàS·˜Úüó‹þø[ÌíþyÅÿ| -æ&¾ŽÝCNmâV`€¸U‰À÷$€)[[\ý ÿÏ8¿ïNÞ`h?óÎ/ûàQo0´ùçýð(·˜[j¶×.ém-¤ÏßXö±^Hç9VP})%¥Óþ· Š~)½š_IȤœ:(sDZ÷¡« /UÀxãþ<õ_û [ÿé;VÐè#{Âßñòßö ±ÿÑmQ E¯ÿȵ}ÿ\ÿ¨¬ÞÃ;j@U†æãa$ñ©äîqÀÜÞ粟Èð1€®œ|_º/⟠ٿˆ5MKš=J[éôË–‰öà ɓ´à©ãò@昧‹íìtÉeÓôx×VÔL¸Ô]âÖ|È-¢HHÞFUèìáÁÈÊîõkÍgðÿÃ7Iw©__XÛ*E 5Ä­f;€Î1,áç4¯ªŠþ­ý}í!ÛK¿ëúþ´%ÛEwäÜéZ•º$±Áq;ˆŒvÓ8bb$$±Üƒ(Aq’9Àä”yºko;+»zY­l›N× ?ë¢n×ý}5e+ωzM–—cwgwlº‚™-b¹–Ú–0ªKƒ$ª |à`Ç’šr÷$âúoúyëåªëg %uu¶ß?øöìuzeõ¾§§[_Ù?™ouÍcVò5S‹„œ_B#%%tY©(( € ( € ( € ( € ( € ( € ( € ( € ( €!»ÿRßCÿ š]PqÿǬßUþµOt-ñìð'ö—‘ö?¶ÚùÿhÇ—³ÏLîÏÇ\ÒÓÚC›ÏÿIc×–Vìr·úˆÒZáü=¥žƒ<Ð#]¤«¬2”¹ÌrF ‘ ’®âG Ir²Œ´Wv¿¢Ó^—»^ŽÁe«Žö×ïüí¿•›Ð•|KªGw¥¥Çˆl®|ÕŒ,ZdÐL÷$Ì˸‡Eój€ÍR¬í#£mÝÙkmº|7õ×£Õ}Ì—ðÞýÿày]vÝ÷»E=wWÕ!€ê¦pÍqjòØ%Ò4öò‹˜þ_(D ‡g9ÛÏRO†Î:ïgÿnKÓEÔsûKmÿ5ývdúWŠuÙln.nu­7q‰MÌ p’O§“"+¿“ä¡@ŠÏåðB䑜»+-tmkë~»k¢ÛMnº“²Õ_OOÅüž½:ÐOlþ-Ðî"ñ\—ÖòÛ\EûíŠ\?™ò·$`GeÃ|¿\¸i)+n—ÎÜ×//˜¥ð­zýÚ->×B¯Œ¯n¿á%:­…ÜðxwË-±¬2TŒ‚;ÿ¥]S¦­E'åÿ¤@™´ê]yþgEâÿù¯¿ëŸõžÃ5éÀxãþ<õ_û [ÿé;VÐè#{Âßñòßö ±ÿÑmQ E¯ÿȵ}ÿ\ÿ¨¬ÞÃ;j@Ejsç?¼q×?Ä}Ïùì:€à>)iå׉ü/«h¾ÄiÉz—V’\Å ºÍÆ—à‚7qƒÓ­09=;Dñ>‹á-o@ðÿ¯°®±ÑËpúý¼®7«*‚Hª®}yÉ$€z>á©dð?‡4ëén4íGK´·Ä¶Ì†H%H‚0†F,§ ‚ÐÒµ¤¤¿«ÿ_zCèÓþ ¶–ïιÕu)ÑåŽ{ˆÄ#¹™ +!†Ô8BªJ ƒÎGãËÓ[y]YÛÖíët›v°]ÿ]Rw·éé£'“Âp-®—†¥§Ï¥Ûýš˜ fF‹ °td9اîç#ŒsU)77>ûþ‡êÉI(òüÍËxÚ(#æyÙ)–@¡œŽçh'ØíCw`•‰) ( € ( € ( € ( € ( € ( € ( € ( € ( €!»ÿRßCÿ š]Pº¥Ž›jßn¹Ž1€@Ç–ÆsþzŠo ßð“è¿ô‹õÿ w@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ 3¼K¯éWzä÷±<®˜UçšM«ÔUÀxãþ<õ_û [ÿé;VÐè#{Âßñòßö ±ÿÑmQ E¯ÿȵ}ÿ\ÿ¨¬ÞÃ;j@U†æãa$ñ©äîqÀÜÞ粟Èð1€®œ|_º/⟠ٿˆ5MKš=J[éôË–‰öà ɓ´à©ãò@昧‹íìtÉeÓôx×VÔL¸Ô]âÖ|È-¢HHÞFUèìáÁÈÊîï›\Õ¬þøvòÈ]]ê7ÖÖ´èѼ Ê# &e`¬Ç'²7O©ÕÎ1ïú&ÿOºýl=e.ȳ üAÒn5(ô#-Ô÷˾-óÍiæÉ,`—FHß*FÖŠ*¼&®œ\ã²Wõ]þ{ëoD+8´¥ßî¿õm.Bß`½Ó$¸Ð¬$º¸·½¶·–Ýg¶”í•Âä4sÉä ¶AÆF9¦“¼{6×Ýÿ—ãÔœÉî•ÿ·ž8Ó¬´Hµ[‹[ÔŠI."ò‚!‘Z!p@lË&Æ Ï´ºKªOäÚ_ûrO_'bž³ñ'GÐå‚ZÞâÎi"<3MoÃbŠ´ ¶v“µ70@$â¹§É×Eó}4üöóÙæ_/?ëÎÌìA9¥-„šjèZP@P@P@P@P@P@P@P@ ßú–úýÒê€ÊŠ"êÇr¨\gw½Sv|ÿ=âüÏøQp Ïx¿3þ\ÈóÞ/Ìÿ…òü÷‹ó?áEÀ<ÿ=âüÏøQp Ïx¿3þ\ÈóÞ/Ìÿ…òü÷‹ó?áEÀ¯©Ma5äó!Ž,Bd“ì8ëJà>¨ÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰-x¿þE«ïúçýEföÛR+S˜9ý㎹þ#îÏaÐ$ñKH×.¼Oá}[Eðô~ ƒNKÔº´’æ(UÖh–0¤¿»Œ˜=iÉéÚ'‰ô_ kz‡þ}…uˆ¦Ž[‡×íåq½YT@%P6sëÎI$Óf-øÉéŽ*R÷T{måguëo;èW5¥Ì¿áúV±ðL ×ÚuNââçìø¹s ¼&/EX Щ¸«»é½ï6¬ÿ ?à’JÝ-o‘ÏÃÛ;¨Œ¾«%¨i-ËÂeq##É'ÌcÉ ÀŠ#î´×K[É&š_‚Zën½Fï÷ïëk_úÓÈÕÔ|=öLj6Z­þ—rbXe6¾S ‘I*dG›‘ƒól(û­önöþµõôB·º—cj…P@P@P@P@P@P@P@P@ ßú–úýÒê€Ëþ=fú¯õª{ "¦{P:N‹{¨¼ãk J#-·~qœ}pi6ôK«Kïv**æu§ˆÞ)o¡×m¡²–Î8¥&Úv¸VY *ò+,¤m s•ÆsŠzZþvüýHWÓÍ_îïýwìQ×üeÖCIóD·w-<ºmĦßjmШWÎ1€qÃnäRÞ¾VoîÓóß·ÍÑ÷Ñ}ÿð ðx¿H“O‚í'¹&ŒÃa;4€Kª,Pn7 sW;Eöÿ/7ù>»­ Úþ·þºnº•µßé¶zmäš|â{ˆ­ÚXÛÈ‘ -åùZ@6WœnÞ“ÑÙ÷Iýé?»úÙ”µû¿á½55´nÇV2¥”’ ÚdI`’³µ€p Sƒ‚88<Ó¶—ùK¦ä'²ùš4Š2<_ÿ"Õ÷ýsþ¢“Ø z`p8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THkÅÿò-_×?ê+7°ÎÚa¹†8ØI—¿~×)«6ºëø§ÄhÒ辨ݭ–ù.g‚Ñ ˆK${ˆirqåíÉ=BŒà÷”|ùWͤ×ççn½.ž—·›·§õó;0r2:P$…P@P@P@P@P@P@P@Cwþ¥¾‡ÿA4º 2ãÿY¾«ýjžè©G^Ó†¯¢Þé¦O(]ÂÑ+»náŒãŒÒi;_£Oîw*/—S÷À¶¯iya§=µ–›vRf³û"¼K:!Âä §h ˜ÁÇI$šé~Žëõ^šéÕ>»%+OºÏϳõüú¢ÆŸáAkšƒ¦[[—œ®§ýš7ÝGÊïn~lç=€ÇzS\É®ñkïiþ€´wóOî+ê>ŠîÇF‡}…ĺU·Ù‡ö…€¹†E* Ÿ/p*Ù@A ÜŽsW'ÍRSïþðà´/È/¼ 5ÛÊ#Ô,ìa–%–ÆÄÀ\y^XWÄ›]’ªÊJô ê'i_Îÿõóéuo0éoëåë×{ëån–ÛMò5›­CÍÏÚ Š/n6ì.sœóÿ¥%¢k»¿à—è+mä¬_ fG‹ÿäZ¾ÿ®ÔR{¯LÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰-x¿þE«ïúçýEföÛR+S˜9ý㎹þ#îÏaÐ$ñKH×.¼Oá}[Eðô~ ƒNKÔº´’æ(UÖh–0¤¿»Œ˜=iÉéÚ'‰ô_ kz‡þ}…uˆ¦Ž[‡×íåq½YT@%P6sëÎI$Óf-øÉéŽ*R÷T{måguëo;èW5¥Ì¿áúV±ðL ×ÚuNââçìø¹s ¼&/EX Щ¸«»é½ï6¬ÿ ?à’JÝ-o‘ÏÃÛ;¨Œ¾«%¨i-ËÂeq##É'ÌcÉ ÀŠ#î´×K[É&š_‚Zën½Fï÷ïëk_úÓÈÕÔ|=öLj6Z­þ—rbXe6¾S ‘I*dG›‘ƒól(û­önöþµõôB·º—až'Ñ.õ{%ìµ 4óerÓ<Ñ2bt‡FRrÃ93Þ’VŸ7“_{OôØåóEü§ÛÈ·z†£kz¬² ´h̆LÊYÈd*Kùòg+ŽFàS^î‘Ñ~–Jßù*}ïÔ·¾¿ð÷ÿÚÆF³ðþýa6^¾–o"hoîgºMò«HîwGä0ly¯çðp÷d¿•r»†ß¢J÷ùi©+Ùµñkøþ—énöÜ߇ÁZl6z­²ÏvST‰¡˜—\¨g•Îß—ƒ™›®xñKEÙ§÷$—þ’hïëøÔ ++ @€ ( € ( € ( € ( € ( € ( € ( €!»ÿRßCÿ š]Píú_IŽÆî;\œ»4>a8è#—ãMGì:×ý¢ÿÀ!ÿÅQ¨Øu¯ú Eÿ€CÿŠ£P°ë_ô‹ÿ‡ÿF aÖ¿è5þþ*@>íÐj/üüU€}‡Zÿ Ô_ø?øª5ûµÿA¨¿ðñTjökþƒQàÿâ¨Ôot}VöÒKkb&ŠQµ€³ÿf¢Ì Ú`p8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THkÅÿò-_×?ê+7°ÎÚa¹†8ØIçRrN7 Ä’4GY¨÷¿à›þ½- ="åØX¾"é{}fÐΓXs2¬öòíO0FÎ|¹X¨RÀØlgàŠ)ûé5Õ¥ó–Þ[é§ÏMB~ãiôMýÚ¿Ãbνã}?EµžæâÞg‚ £jd3Û¬á¦YP62Wœ«qÆjy’I÷¿àí¶ÿסJ.ív·ã¯åo¿ÖÙzwŽŒ“_ÈÖ×·|—qEkx‘Æ"„K F5l°s–~¡[†H¢ª”)µ´½ý|âåú/GërbÓi­­o[]ËúOŒ´ø´ êz„j·VÖ¯-ºI˜™v/˜cÈ!rÙ$ šÞ¤WµpGoO_]ók¹ Ú<ÒóuÿÉýÂOã½=¡·kU¸V–/æ„6KdㄨÊyàäŽ6œ9—*ŸK_ð“·¯ºþVrTíýykoR]/Å­®Æ°éºuÕÍÝ‘»±“P|©Wå°Ž[‚ëv“ž=jå®¶³Wôw×îOMôvÒ·g½tÿƒoK•,5­z÷M¾j:=¯ö}à ®îl&ˆ„A‰kv”nNº~¿~Ûí«í¯GáëËCB±¼¾·û5ÍÄ $‘ üŒFHçŸÏšÖ¤TdÒ".ëú×Ïç¹~   € ( € ( € ( € ( € ( € ( € ( €!»ÿRßCÿ š]PÕ`P@P@PãøóÕì%oÿ¤í[C ï ÇËØ6ÇÿEµD¼_ÿ"Õ÷ýsþ¢³{ í©©ÌGœþñÇ\ÿ÷?ç°è€ø¥¤k—^'ð¾­¢øz?A§%ê]ZIs*ë4KR_‚ÝÆL´ÀäôíÄú/„µ½Ãÿ ¾ÂºÄSG-Ãëöò¸Þ¬ª ¨ ¹õç$’ßYøU“Á~Ñ%†Þg ™¿2LKÆÐˆØ¢*‚%H'p¨ÝSÊœ—6Úþ)¯Ôwj--ÿà–ô¯ÙiûQïï¯ ŽÉì"·ŸÊÅíÊ€ˆ¤ýÑÉ$ú“U+Ê2Mêí¯]/o%¿`O–JK£¿Þ+ø*ÔA`–š–¡i5”RÃö˜Ú&–e†“yta–a’T)ÎqŠS\÷¾ÍY¯%·Ÿõ¯AGÜI.ŽëËúü‡Yx'M³ÑŽ—÷f> ÷3©mЬj£;zçŽç§gS÷›ÿ{ÿ&½ÿô§`»{y~ó ZŸ ¯‡üÉ…ªZ‹U0óÀ`qÃçGJ*þõÞ]ïøÜ!î]Ê à'-åµÄJE° Œ /T®8ï±õ 1Š'ï¹7Õ·÷¦¿ ¶¼Ø--ä­øßï&_ ÛEmeµíí³ØØ&‰Ô:¡(wr¸-ûµí޹œ¤å)K«³û›®¢I$—¯ãýhS»ðZéé«¿C¤²‚KkXášêk·Aƒ4Á¿¹ª¿ÛV&¤0 € ( € ( € ( € ( € ( € ( € ( €!»ÿRßCÿ š]PÕ`P@P@PãøóÕì%oÿ¤í[C ï ÇËØ6ÇÿEµD¼_ÿ"Õ÷ýsþ¢³{ í©V˜c„“Ƥ;“¹Çs{žÊ#ÀƸqñ~迊|'fþ Õ4m.hõ)o§Ó.Z'Û +&NÐs‚§ŒÉš`rž/·±Ó%—OÐô¹WM_—ë÷‘MZ<Þvþº}æ_Šªý?äœoóü7ütóé¡f_ÙGn³3Q)-é°¶'ÉŒ\ÌÔªþ¬òÅsO•ß-–êÿ+^ÿÖ½vÔWI7}õúúwÔjxá<É¢]+SººÄYEn‰4(±Dî\¼›N ª:‚IÀSŒ’éGšú+¶úZízôÛW£v[ÏšÞ‹çý|¼õ$¶ñæŸw:}’ÇPšÉ§†Üߪ …ZUF«‡ ùŠ8S‚yÅZ‹æåzn¾q½ÿ-Ͻïhæ´oèý/ýj·/xÄöú味»¾»½Y-¼°ì±€X|«–<àpjcïK•tÕù~¿wùÕ£Íçoë§Þeø£ÆQÚøJâÿOÜKö¨mØÆ¤¤°¬„’ <~é±×¨È¥}açÊþMÅ[×Þë->v,' %¤ÚF§¦­Ç`Ë›8pÅYH“f1“¹†6óŒÖú/?•’zôê¶êìBvJý¯~ý==Œ˜!YÇt¶'HÕ?µ ’FÚ~ .ÄW$fMòº™ˆ'Ž}í¶ëå­½~ëþ(»¿—ã·—KkmItïˆ:¡âoì+y ¸2I 7 Ý"Y|°æUÆÖå)ÇäeCßW]¯òþŸ¨¤ùm/ÇúûÉÎÞº'úõ¶ža-W{þm[!…P@P@~>žk_ø†âÖY ž2åã’6*ÈÂ& ‚9s@i÷×W‘éZÄždÏ‘ixT(»U€ÀY€• uHÀ6( € ( €!»ÿRßCÿ š]PÕ`P@P@PãøóÕì%oÿ¤í[C ï ÇËØ6ÇÿEµD¼_ÿ"Õ÷ýsþ¢³{ í©©ÌGœþñÇ\ÿ÷?ç°è€ø¥¤k—^'ð¾­¢øz?A§%ê]ZIs*ë4KR_‚ÝÆL´ÀäôíÄú/„µ½Ãÿ ¾ÂºÄSG-Ãëöò¸Þ¬ª ¨ ¹õç$’èÚ?†d“ÁÓ凉Óu*Ößl¶Î†H%X‚0 Œ0YNA?CJÖ—2þ“þ¾ô>2[é¶zf£k–è_Ú}žežP¾iÌŒX²®C3JÄ8ãc¤½ÎXék5äÒIwÚË¿Çi©?;üÞ¿ånÚ¼5ámb9/.uýZãíµ°Cor®Á!báK¬1±l韘ç.’ó»zKþNµÎÝ:Zß×àYÖ<c¨Ý^\Ë=Ô©rÏ+Y4а´­„¶í…×*GC€@ zçg¾]úyj¥§Í_[ýÚ'ï&ü¯çoøÝ.Š~ð†¥¯ý¯â[ù./!hþΫ:J¤r§Ìë YÏœÜmÈÀùŽp4MFínïŸ/ÿ#åéÔÎÛ.Šß›.Kà[)e·ó5 öµ‚ëíbѼ¦ŒË漡Á1ïC—#(Ë9ç3q§ÙY}É~›m~…KÞR]÷þ¿§çµ¥Ö<¯§ ½_SkWiLÑ;E(™]÷ío1O W £¡¥fŸk~{Ýõ¶ã»»kKþ¥½oø²¥çÃË ¸šÝõMQl÷NñZ¬‘l…¦WW*J?ëÌØ>ÜSWV}U­ä“M~Kä%e¢Ûþ‹Ëá v³¿ŽóQ¿¼º¿XÑïe1¬ÑˆÉ1ìØŠ«µ‰aòõ<æ”’k—Îþ»~ŠÞž¬#î¿•¾_×õ é|+\Á>“©_èï²Z‘iå2Ég`a*8ã-ÈÁääž1|Ï™ÉõwkÏúíÙ /u.Ýzÿ_×Qn|+ š7ödí¬M4Ò»F"s(•œº2ÈŒŒ‡yà¯aÍfâšIì’_u¿7);6ú·s>‡šu”šV£©iÒ (&‚HËyf8ã)†F]¤D‡¦AÒª^õÓÙÝ5Þí¿^¯[ÞÏqGÝwë¿Ïò×¶ÞEû_é–v cjf†ßíP]*+‘¡„Q‘÷qç9=yªæ|ÊO¥ßþ{þnĨÙ5Ý[úóîE¬x6_N6z¾¦Ö®Ò™¢vŠQ2»ïÚÞb6ž®GCQfŸk~{Ýõ¶åÝݵ¥ÿÒÞ·üYRóáå…ÜMnú¦¨¶{§x­VH¶BÓ+«•% õŒFæln)««>ªÖòI¦¿%ò²Ñmÿœีĺ¾¥&©æFé©$O@ÁU@ŒG·ãwœöÁ¶«MþwV×î_r{ŠÚYÿÃkëîØÏÕ¾ý ý¦ÓV¼:‹ÜG+ÝLbà,ÀöîźàmÆIÈÇB>ëVÑ/ò—ë-|¶Õ;–o¼i}g=µÖ­©J·ŒÍ|Î o¶“° êb*»B(RHÆsžhVM[e­¼îÝûÝß[>ÝîÓnúþ»}éõîÍ7ÃcK»‘¬umF+)äû14*Ï’Ä1C ù‰loÆO§š¼9ky¯øm—’Qi¯/ÀŠûÁö—ÖöPÜßj [G²‘ÚUgº‰Â‡1Rrv¹v¶zr÷¤Þ×íå³õOoÆãNÖòwÿéÐlÞ¸ŸNk+ŸëÆÜfD´l¦ÖRŒ¾N×RÀž#œ“\ûÿ[~VÒÖ}Í¿¯ëúÔŸHð½¦yo>supÙÇf`ܦ9R=Û erÜßtÏ#TäÛ“ïù÷ï²K[ýú‹—EåÇ_MõÓòÐÜ©P@P@ÏüGÿ’yâ_û]覠 ÿx›N–ÇS±ŠÏííkå2ÈÖðß„’DœGÙÎG@|£·ÀàsÃ#ZM-cñ´7‘¹PöÓ‰ü,Ä¢øàáB’2ƒ´jP@P@Ýÿ©o¡ÿÐM.¨ j° ( € ( € (€ñÇüyê¿ö·ÿÒv­¡ÐF÷…¿ãå¿ìcÿ¢Ú¢@‹^/ÿ‘jûþ¹ÿQY½†vÔ€« Ì1ÆÂIãRÉÜã¹½Ïe?‘àc\8ø¿t_Å>³jš6—4z”·Óé—-톓'h9ÁSÆ äÍ09OÛØé’˧è<ñ®­¨.™q¨»Å¬ù[D4‘¼Œ«ÑØ Ñ•ÜêžÖvxCÁâý縺Õ, _5ŽâÒ}ŸÌfrNNvžy94-]¼¯ø¥úƒÑ\¹ xŠkS¾‚ÜH©j£åx‚œù²ÆNàÇ ˜Žsœ:ß¿ëÿ_ëvKÝ—)¹@P@P@P@P@P@P@P@õ+}ON¹°¾Íµ»‰á™7ÜŒa‘ÈÈ'¥cø“CI4ë3¦XA#iß"Y„UŽ{V%·Úp ˜ùT$&ôˆ· @<+ õ·‡ìàÕ †â$)™dó%( ù¬ .Í»È%KîÇ  J( € (¿õ-ô?ú ¥ÕV@P@P@p8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THkÅÿò-_×?ê+7°ÎÚZœÄyÏïuÏñsþ{ 8ŠZF¹uâ êÚ/‡£ñr^¥Õ¤—1B®³D±…%ø Ü`ôÁëLONÑ¿o+êÊ ’*°«Ÿ^rI £øbi<á›ÙîtÍKI´€ mš6xeX|·2º0ÁaÐŽã±¥k;¯O—ôú8²ÿ†¼/iáÙ'’ÖâêâK… #\:±?¼’Lð£Ò·éT£Ê¶ÿ$—ä‘-]ó=ͺC ( € ( € ( € ( € ( € ( € ( € ( € ( € †ïýK}þ‚iu@cU€P@P@P@Ž?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕZñü‹WßõÏúŠÍì3¶¤XnaŽ6OîNç Íî{)ü àyÇÅû¢þ)ð›øƒTÑ´¹£Ô¥¾ŸL¹hŸl0¬™;AÎ ž0O$iÊx¾ÞÇL–]?@ñçumAtËEÞ-gÌ‚Ú$¤äe^ŽÁŽŒ®àTð~³³Âï=ÅÖ©eù¬w“ìþc3’rs´óÉÉ¡jíåÅ/ÔŠä3üA²ŒÞ4ZN«q ‚4—sD‘mI#,s $f'8PN1ÇjQjI=“·â“_š¿a¸´ùV¯]=?¯˜Éü_-Ö¹¦C¥ÙÞg½äÐÉvÂ!ÉŽ DËoáÓïPvžqÔN×”¶ånß5¯ÝÞÛÜZ4¹{¯ÇúèUo‰0^é’\hV]\[ÞÛ[Ën³ÛJvÊár9Šdò[ ã#Õ$ï͵÷Fÿåøõ§2{¥ÆÅÝ;â6…{¯ÿc«˜gÝ${¤ž‡ŒêQd.¸Úß1P§o‚ Q³‹’z%—ø{?-ÁÞ-&µÓïÕ´¾¤­ãÝ"}M,4bÚ˘„Ï.Ÿ,2¤H_fãûÀX×`m½ñ‘S&Ôe-’ëýÃyèìôÓÏôþ¶ßÈ͋⠶3\jvR6=:Òè]¨Š ^mÀS´áHbÍŒ5\—+’{©Y}Éþ­ôÓÏA-mnÍ¿“שÑxOÄÖ)Óä»ÓI ¦É›Xqº6d<0<1ëë‘MÆÉ>ÿðÂOV»5# ( € ( € ( € ( € ( € ( € ( € ( nÿÔ·Ðÿè&—T5XP@P@Àxãþ<õ_û [ÿé;VÐè#{Âßñòßö ±ÿÑmQ E¯ÿȵ}ÿ\ÿ¨¬ÞÃ;j@ç´rëÄþÕ´_Gâ4ä½K«I.b…]f‰c KðA¸ÁéƒÖ€9=;Dñ>‹á-o@ðÿ¯°®±ÑËpúý¼®7«*‚Hª®}yÉ$€z6ቤð_†log¹Ó5-&Ò%¶hÙá•aòÜ|ÊèÇB;ŽÆ•¬î½>_ÒCèâÊ6ß<«ËÈŽ³~4»¨)¡ {¬É3È$cBŸ7aS‚}8Ù+5¢j˦Š)yôôüDÛ½Ó×]zëÛ§ùîþi·{âšÿPûyÝ,CÆ!‰¦GY ü›¹ó€X€OR¶žv²}µM}Ö[ßa­šmø+_~ä£Á04W_iÖ5;‹‹Ÿ³âåÌ*ð˜¼ec0OB¤âªï¦÷½üÚ³ü4ÿ‚JI+tµ¾EÝ#äÞ-uDÚ´+Y8„Ä]òY³åïb[€ðâ„ì¹z-¼—ü •ï 5ׯçýy ñ…-õëØ&¾¾¼ò xä‹å¼Ä$«‚È]œer8õ¨åZßÏåuoémäUô·õý~>{$ð%†(¢¿Ô H­ µÄn™>I- ™(Hucž0pGnMÍÏ­ïèözѧuo=I²²^¿séú®¾fî•g=¹ŠçRºÔœ¶ï6åbVÓ÷hƒ†yëCabå!…P@P@P@P@P@P@P@P7ê[èôKª¬€ ( € ( € à[þÁ¶?ú-ª$µâÿù¯¿ëŸõ›ØgmH€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (¿õ-ô?ú ¥ÕV@P@P@p8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THkÅÿò-_×?ê+7°ÎÚP@P@P@P@P@P@P@P@P@P@P7ê[èôKª¬€ ( € ( € àÝ'÷Wóoñ£•}ºOî¯æßãG*ûtŸÝ_ͿƎTöé?º¿›¨íÒu6ÿ9PÛ¤þêþmþ4r ·IýÕüÛühå@n“û«ù·øÑÊ€>Ý'÷Wóoñ£•}ºOî¯æßãG*ûtŸÝ_ͿƎTöé?º¿›¨íÒu6ÿ9PÛ¤þêþmþ4r ·IýÕüÛühå@n“û«ù·øÑÊ€>Ý'÷Wóoñ£•}ºOî¯æßãG*ûtŸÝ_ͿƎTöé?º¿›¨íÒu6ÿ9PÛ¤þêþmþ4r ·IýÕüÛühå@n“û«ù·øÑÊ€>Ý'÷Wóoñ£•}ºOî¯æßãG*ûtŸÝ_ͿƎTöé?º¿›¨íÒu6ÿ9PÛ¤þêþmþ4r ·IýÕüÛühå@n“û«ù·øÑÊ€>Ý'÷Wóoñ£•}ºOî¯æßãG*ûtŸÝ_ͿƎTöé?º¿›¨íÒu6ÿ9PÛ¤þêþmþ4r ·IýÕüÛühå@n“û«ù·øÑÊ€>Ý'÷Wóoñ£•y#)R«È#©ÿ,ê€( € ( € ( ÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰:…P@P@P@P@P@P@P@P@P@P@P@P@P@P@Ž?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕt5 ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €8Çž«ÿa+ý'jÚox[þ>[þÁ¶?ú-ª$èjP@P@P@P@P@P@P@P@P@P@P@P@P@P@p8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÐÔ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € à„©8§Ë¥Åu{šòdRÍ+ML­Ûè4®ìˆìµC}g Ý­Ã<¢É`ÊFAÁç¥\¡ÊìÄö%ûTÿóÕ©Y}ªùêÔYáû‰¶j®erçRpI98ÆMµ£ö©ÿç«UY>Õ?üõj,€bj ꬗!•Ά1öüåG*ÿjŸþzµ@'Û%ÜTLw’3Èä,€_µOÿ=Z‹ µOÿ=Z‹ µOÿ=Z‹ 2°2çgÚmm¢ßޏÜzŠZ^×´¹=–ƒàËè¼Ûønæ1žr@î?B*œZÑ$^ðŒ­"Åá¯;DÛ$ §ÀJ6Áùx8 þ"•´¸yÙxÁ÷Э|3 Éw?Ù‘™X«W±Qmï¯Þ6»ÿÂ'áútüÃÿÄÑ`øDü/ÿB®ƒÿ‚Øøš,'ñgÃÚ—u¬|?£ÚL#8– ‘×å'† ‘È(jÀzM«óJœœõ0íSÿÏV§dö©ÿç«QdMO_µÒ"Yu]RÞÆ7mª÷3,A\ÄsKDì;;\³ ûÍK Ç™ŠÀò=Å7;1&šºö©ÿç«Qdö©ÿç«QdZ·Û 3ZÜ4‘‡xó‚>eb¬9ô ŠVVO¾¿xlÚìOö©ÿç«S² Fòátû–YXDÄpG‹ )èòÓ¿ëÚ?ýP¶ŽñÇüyê¿ö·ÿÒv­áÐF÷…¿ãå¿ìcÿ¢Ú¢@ކ a@P@P@P@%·ü|EþøþtÙ?Ö7ÔÒ[Ú`gëÐêsiìš5Äv÷93à=`§§%u㜉wþ¿¯ëºÜjß×õýyìaj…¼¬ÛÚi÷ð]<‡ŠrgžI pwå¼ÌŒcàaxÆÐçou­®¾^ò¿Öûë¸CI;ïømòý= +·‘y,Y¹·ºkx›Q¹³¸†x¶‰ ºÅ# ÊŒ€d9$.äôÕ¿]×·]ôÓk´Ü­É|µéúüµìý%µ‚Õ8ì§ qmmÉx°¤ÈŒ£8'¦xúÒŠ³—ý»ÿ·_1Ëh¯7ùé¥ê·ž$»µ¾¼ÖšÆ5˜¤©< Gnîhëæ.wqÔTJþÊMom=y§ú[åo!í8®~ãFñ iñI|ÚëÍŒ‹hÒê/9ͼýl@˜ÈräoR„îdníí4îÿô©kÙémKYÚäGEg¶Ÿ—ßóZþ»ë2èiÆóê7‚æ%ı3.cûƒ„62sÔæ¢í—÷ßîýÚ][ïÖâwi¾·_ð}Næ‚‚€8ÏŒòOõúæßú R{Ü[ýÙ¿ë™þb†TÀ(™Ô%þÊñ{jW¶wsÛMd°A5µ«ÜX;R±©a¸9ÆÌ`eEÛ™=ݾîß'wóò•Ô_kþ6×ð·—Ìçu[VMvÚm.×RÓãŠ[tŽÕ-®Ê<,s6×G€Ä*Ì ç#ŒE¤”»ûß/uÚÏ®¶·/_˜ÛOð~ºÝÿO§ÈQe­Øéš|Í­Ê×:j¾£ºYd0xwì’lipqÜ[O•T’û7þÝ;^×·M­¡ öMo¯ü/KüÈõXïd¿ˆi—ú톘 ÚYlu™ÛÛ~á½[¦Ì UŽŸÅ™§~m{«z~[Þ÷ÖÖék7n]<ïø|þî·¹Ùx> ­ôfŽâ7þ×rØu*pgrb#ëBø ¼—ä…ö¥êlÐ2¶¥ÿ ë¯úâÿÈÐZü€tïúöÿA–ÀqÞ8ÿ=WþÂVÿúNÕ¼:Þð·ü|·ýƒlô[THÐÔ ( € ( € ( € ( €$XXJû¶ÆwªXàzÉú ÈoFX‘¦êœŸùóz”ì€OíøÿèªàÓ¸öüô Õ?ð è¸öüô Õ?ð è¸öüô Õ?ð è¸öüô Õ?ð è¸öüô Õ?ð è¸öüô Õ?ð è¸öüô Õ?ð 踴­TYÁx$°ÔK\^¼ÊÑøRˆxõò©ê2Ïöüô Õ?ð ê® þßþº§þ½þßþº§þ½þßþº§þ½þßþº§þ½þßþº§þ½þßþº§þ½þßþº§þ½ž¥~u²† A ^C!i-™TÃ'4›?j’hž$ÓµÓ5 øÍ…ݹû³Í±šKf¶ƒ€B7åMOþé?èX׿ð]?ÿ¢àðŸIÿBƽÿ‚éÿøÝÿ„úOú5ïüOÿÆè¸ü'Òб¯àºþ7EÀ?á>“þ…{ÿÓÿñº.ÿ ôŸô,kßø.ŸÿÑpøO¤ÿ¡c^ÿÁtÿün‹€Â}'ý ÷þ §ÿãt\ xŠëÄ>½Óm¼9®¤ÒÆÛ3§O‚vÜ÷¤ÀôÛ‹Ô°·’I"ž]˱RŒŒI#°éÐòi°3?·ãÿ n©ÿ€oEÀ?·ãÿ n©ÿ€oEÀ?·ãÿ n©ÿ€oEÀ?·ãÿ n©ÿ€oEÀ?·ãÿ n©ÿ€oEÀ?·ãÿ n©ÿ€oEÀ?·ãÿ n©ÿ€oEÀ?·ãÿ n©ÿ€oEÀŠïZY­&‰4íL4ˆÊ3høÉ¢à_ÐÑâÑl#‘Y-ãVV …P¶ñÇüyê¿ö·ÿÒv­áÐF÷…¿ãå¿ìcÿ¢Ú¢@ކ a@P@P@P@P@P@P@P@P@P@P@P@P@P@PãøóÕì%oÿ¤í[C ˆ-|K§À¼Wº¬ÂÖ%X­au&4ÛY½séÖŽP'ÿ„¾ßþƒÇþÛž@ð—ÛÿÐcXÿÀoñ£“Èþûú kømþ4ryÂ_oÿAcÿm¿ÆŽO øKíÿè1¬à ·øÑÉäÿ }¿ý5ü¶ÿ9<€?á/·ÿ Æ±ÿ€6ßãG'ü%öÿôÖ?ðÛühäòÿ„¾ßþƒÇþÛž@ð—ÛÿÐcXÿÀoñ£“Èþûú kømþ4ryÂ_oÿAcÿm¿ÆŽO øKíÿè1¬à ·øÑÉäÿ }¿ý5ü¶ÿ9<€?á/·ÿ Æ±ÿ€6ßãG'ü%öÿôÖ?ðÛühäòÿ„¾ßþƒÇþÛž@ð—ÛÿÐcXÿÀoñ£“Èþûú kømþ4ryÂ_oÿAcÿm¿ÆŽO øKíÿè1¬à ·øÑÉäÿ }¿ý5ü¶ÿ9<€?á/·ÿ Æ±ÿ€6ßãG'ü%öÿôÖ?ðÛühäòÿ„¾ßþƒÇþÛž@ð—ÛÿÐcXÿÀoñ£“Èþûú kømþ4ryÂ_oÿAcÿm¿ÆŽO øKíÿè1¬à ·øÑÉäÿ }¿ý5ü¶ÿ9<€?á/·ÿ Æ±ÿ€6ßãG'ü%öÿôÖ?ðÛühäòÿ„¾ßþƒÇþÛž@ð—ÛÿÐcXÿÀoñ£“Èþûú kømþ4ryÂ_oÿAcÿm¿ÆŽO øKíÿè1¬à ·øÑÉäÿ }¿ý5ü¶ÿ9<€?á/·ÿ Æ±ÿ€6ßãG'ü%öÿôÖ?ðÛühäòÿ„¾ßþƒÇþÛž@ð—ÛÿÐcXÿÀoñ£“Èþûú kømþ4ryÂ_oÿAcÿm¿ÆŽO øKíÿè1¬à ·øÑÉäÿ }¿ý5ü¶ÿ9<€?á/·ÿ Æ±ÿ€6ßãG'ü%öÿôÖ?ðÛühäòÿ„¾ßþƒÇþÛž@ð—ÛÿÐcXÿÀoñ£“Èþûú kømþ4ryÂ_oÿAcÿm¿ÆŽO øKíÿè1¬à ·øÑÉäÿ }¿ý5ü¶ÿ9<€?á/·ÿ Æ±ÿ€6ßãG'ü%öÿôÖ?ðÛühäòÿ„¾ßþƒÇþÛž@ekúÕî—4ó^Ü\Ouï%Ä1Æ0¨É•¨íÚšVÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/eclipse-import.jpg000066400000000000000000001252431203611042400321120ustar00rootroot00000000000000ÿØÿàJFIF``ÿþLEAD Technologies Inc. V1.01ÿÛ„    $.' "+"(6(+/1343&8<82<.231  1!!11111111111111111111111111111111111111111111111111ÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ&ÖÿÚ ?ô »Û-V1{«$·©9ó-í +1ó´•È<žz8â·Qka6hô/ÛÿãßãUiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p#‘ü=‹ü#Ñ<Œ TŽ9ˆõÂä㚉ÉSø¥cJt§Rü«aÛt_úæÿÀ)ÿ²úÅ?ç4úµO/½˜ÇDWí0+»¤·š1Ï[ª5¡'e!<5E+h»4ÿ&jEâ;O F³n»—K”ykmþ±íä`)f&ÐxíŒs›plÀÍÓb'K³lqöxÿôWpJîÅoNÖðGý˜ÁÜýîTâºiS¿Æ”ˆ©áËû»é%·½¶òÞ1¹\c ? U ¡¬HRLž}R;m}´ÉÑ",Û\”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀÃÔek=q¶ü¤ÛÆñç¯7ñ#貸ތ“ïú#\Ûj¬-އ#êö·GdsKµÆYgÚrCÓŒ·~^ÉJÎûUGš5×¼»u1üO2Aosm£& &3"¢o#æ…sÓ$Ÿö¢J*V‰èa!5O𢳾6ŒÇ¢§h_ýëÛOSäλ@ÓÌþÓÛÝk?ðY7f5£¹Äø»Á~&3;èÖÖ÷HÇî²Ä~/Ö½Xšv´´H¦ïKáÇõM#Ͼ×E²ÝÌ»("Aå®rrÊIÀöâ°Äb#?v;ØoŒ|)«_kWòØÙ™bŸC–Ö6£3$/'Ž;ž=ëÏ’n3]Ü©´ZNWüR3/<¬I¨éœÜh1ZÂ7 ÌË»+׎ܞ+JÚû^^²‹^ˆš~ï%úE§êÌø¬5©ü[¢[éÝÜ]-¼-!dÀÆŸ'w~U=*¥jj:.y;üÓ?w%åZ}åÛÏë±A¨i_a{£¨\ÛϦ6Â&íÀۆÌ÷ºŽiÆWœ^Ö“—Éë÷ô'–Ñ~qKç·ücIðuÿöŠlî- ›û«¦·v †Y Ùþ±XÍ?«Æ+t¿[ÿ‘´ZUyžÚ~Kþ µà½:í<9ek§ÏeqiBé6øª¸büsí]5&¥'%Ô ÅY›_Ù§Ò²¹aýš}(¸öiô¢àÙ§Ò‹€fŸJ.ýš}(¸öiô¢àÙ§Ò‹€fŸJ.ýš}(¸öiô¢àÙ§Ò‹ŠÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»G0X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓýÚ9‚Áýš»G0X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓýÚ9‚Áýš}(¸Xà*ÒŒ­ßôE˜µÍ;BŒYiqE©Å0ÿ‰ÅÄXû` ƒS÷P8÷ÎrŧCHì5ƒ{λ³éåýZíâ°ÀÓ&“s$ÖRE¾1("HI1±?{a²rH,s’5âvaý²ƒUw_‰ÔüMµû>…Æ7\¯þ‚ÕëAê|y½áÝ^ítÛ; -îšÚÊÝ݃¢ã|yy‡¡üªVíŒÓþÑÖ¿è_“þÿEÿÅÒ²î0þÑÖ¿è_“þÿEÿÅÑeÜûGZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À¯_ÛÝÏw…ÄWó¤I! &oŸ’4$’åO@{ܱý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²î þÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´u¯úäÿ¿ññtYwþÑÖ¿è_“þÿÅÿÅÑeÜaý£­п'ýÿ‹ÿ‹¢Ë¸ö޵ÿBüŸ÷þ/þ.‹.àÚ:×ý òßø¿øº,»€hë_ô/Éÿâÿâè²îý£­п'ýÿ‹ÿ‹¢Ë¸ö޵ÿBüŸ÷þ/þ.‹.àÚ:×ý òßø¿øº,»€hë_ô/Éÿâÿâè²îý£­п'ýÿ‹ÿ‹¢Ë¸ö޵ÿBüŸ÷þ/þ.‹.àÚ:×ý òßø¿øº,»€hë_ô/Éÿâÿâè²îý£­п'ýÿ‹ÿ‹¢Ë¸ö޵ÿBüŸ÷þ/þ.‹.àÚ:×ý òßø¿øº,»€hë_ô/Éÿâÿâè²î#ÄÚLj§Š{½ö ¢]‚K{˜T•Îprǹ52„^ìꡊ©‡¿.Æ?ü+çÿŸ gÿ-ê=Œ;_Úu»/ÇüÇCàE‚d’m/TPäÅ-å¹Vö qU1Or'˜Ö”\t^ƒ¾#ê¨èMÖk5ìhÊX½·bGLVð+<ã øÿ3ÿØ7OÿÑmQ?óv5˜Â€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €˜-;³‹ÅR‰7+1$òkAmñýF¯ÿa+oý&j¥¸ÑÔü?ÿ™ÿì§ÿ趬§þcGã½O^Ò|G¬ê>!ƒ]¹ðË¾ÁµNKDŒ6þ “€F9àW<,Z“´¯£Ýo¢íú¿ÄÖKÞ\º¥ºëµßŸšéf[oŠÕÜš”~µ:ŠiPÛ„S¥\Ï&¢ì»˜ï‹åƒ#¦àÙëÓ¦ÒºnVÓ™«y'g©Œ²õåNïÍi§æs–~8¹Ð>"ø™íl^+ínóO‰V{y&û(h‹>è“ìÀA‚OÓ©«GÙ'§5GGúŽ«÷•F¾ÊÓͨÿ]Ϊo‰^#aÓeÑÖJ÷UŽÆÊúêÆ{[icn|ß*B q·wSœö$<¡›æ¿]#mW­ôôû‰>E)n•­ÓWÓäÖ¯þO]øÆËÅÞ´mnλ¿‘Ú[ÍR®Ô#Í‹Îù°K|»½FqJ–µ­ýÙzuý-èûަ”›óãýkÜõKe™mã[©#’p Hñ¡EfîB’HÙ?SMÚú _©%!…P@P@P@P@P@P@P@P@P@P@PÈ9´PñÂÓHD268i„Õm1mñýF¯ÿa+oý&j¥¹Hê~ÿÇÌÿö Óÿô[VSÿ1¢î¡à?jWSÝØÊÂòUšæ»™ ×g„8F?(ÎTç沊Q²]þl¦Ûû­ò%½ð^ƒw}%鵚ÖâhÖ)^ÆîkO5W…"u ÀÎx↯túî ÚÖé·‘]¾øQšé›I]÷M I'&ðÑ FÈÛ²ŒR­Sn÷óoæõm‰²ÛÊß-‰'ð'‡®lå¶¼´¸»YdIL—7³Í*º}ÆIË¡?tާ֖ÖkK;üôÿ%÷¿š·Ë_ób\xÃ×ñÅqks+Esö¸ç{û†%Úp˜¾ñÂØàzQ³Mtºû÷ûã]íøltÐ%µ¼pFd)…S$#=Y‰,}É$ÓnîâJÄ”†P@P@P@P@P@P@P@P@P@P@PFFJæof¼ðÝñ¸b÷DÍó÷ksþÿìk¦*5U¶fM¸;ô:('ŽxVXÀR””UØã&’!Òµ5K$»´[…‰þïŸo$ õÛ"«cßÕ8¸îJ’{é ( € ¯s}okqkòl’îC+´Ì±tùTž}(Z».×ü¿ÍÑ\‘g…®ÝeŒÍ†xà ÊpHêÁÇÐÐPgX²Ñ-VãP‘ÑÄh±Bò»±áQf8ð:z —$´Õ†“×È]+V±Õâ’]6ágŽ6UfP@ÉEqŒŽ~WSÇ­hâ㿟àìÿJi—jF[P¿¶Ó Y¯%FÒ$Aˆ'æv £RG4®“·õ¢¿ä‚Ú\𠢏‚9íäIa‘C¤ˆÁ•”ò#¨ªi§fHâž^T†XÝ¡m’`J6Áô8 ãЊ:\6Ð’€ ÌÕ¼G¡èÓ$:¾³§iòºîTººH™—¦@b2)]^óµÉ4kLÖ!š}*ö¸`-剷&v†áº†ŒŠoÝ3Ñ jì‹MÄÏo"K Š$F ¬§AE6švar+ëë}>$–îO-T…NÒrîÁTqêH–ê=ÿÊÿ’ “}‹P@Go<7ù–òÇ*eÜŒdÈî ûŠ<ÃÈ’€ (œš­ŒwQZ›˜ÌòÌ`T_˜‰ œ}Ó°gœqQB×o7÷;?Ç@zoý\¹@fj÷÷6·VvÖqÂò\—æV  Õ¤bšmô"M¦’2µ}sXÓ-e¸’ 5Ò!’«+î?A¶´§NvÔ‰JQW:0âØ YdO™HÈ ŽEsM¸ìlµ9+‹›_ ý¶(µŽÔŒ¤r7ú–îþ]ûv®¸ÅÕ³hçmSºLgíGûEu)³ÆôÇ=ÍW‰+H(»ÜŸû_Zº¼¾K4Ñ ­Á€5ÄάÄ*œà)Ä*y!¯r¹¤Û°–z¾¦uÔÓu¬€’”5´ŽØÁëMÂ<¼Ñ“½™²Õ 4ÀóÏÿÇ®­ÿa+oý'j:”¶:¿‡ÿñó?ýƒtÿýÕŒÿ̤v5˜Î#J¸M$jZ^£¤jß\ê2Ì%ŠÁåŠà<™ŠC*®ÅÚ»ÌA_/霥wC–;¤þýÛ^¯UnößBôU\žÎßu­oÓ]:ìÌ-CO×-ô£ßëQE=©“P”Ç{w2Ü”he‚T•ð>Lýá’ oRÞÖI=ß~¾]šº¶éYhD~õ¿á­¿àÛ]¼Ç\KâøH4ÆŽ]Q¤·–Î'ag|©y æÌÃx‚/¼À£#8*NGq³¨î¬›•×E£¶½u³÷mù‘-)ÙvVûöûº½þℚn§eY[K®ØZ­åé»q¡uûÃ)hJù2«•(Xå LŸœnÁÂü±Wµ¢’õZKôµÕ·åë}¥ñI®¯ð·ùïmvèvº••ýõŸ…í^÷R–6 ë‹q-£Ê¢Ýùp¤4`¾Þ2$µ¬’už–Vzt½ãm¾ð×FQº§¦÷_v½ÿ®§uoâo>.µ=fÂÖ‘-'[ÛÇÜ·€_É‘I;Dƒ«ŸÅ•IÝÅËwòWòÞ÷Ñ=~ëšJémyÀóôÿ†5oáñB^_Eo&¤aŠg³Ž@\ï[‚ì%_h‹B20iRû<Ý]Ÿ’‹½ÿíèÝy» M¤Úè¹½[I[ï»·küq<)âM6Öö}qmÆå¼­(ÜïyD·‘óp rxçžµ›¼½¢ŽöVõ|ß/¿O¸¤¹c×ÖþŸÝ©‘¦Øxž? ê7Z¼úÓjk%´2¤3¾áÈ æiõŸ2‚ÙÝ´äÖóq¼{6ï÷ÊÞi^ÛkË䕳Ýù{i×ÎÝô¿Ì†ðëq[Bú5Æ­’Þ]Å¥G{4ÂY#û#°ób be%Lƒ c+'{k¿+½»)«mוô³ï©¢åæ¿KÇïk_–Ÿ}ì.›¥†gÔµû­5îb7°Å§ê6÷¦ÇåYVü½Â&à/¡9ÑÙ4žÚýöV¿[okõµô3\Ö¿[/Ï_+útÛ[Ötñ§{s§ÉâkE»°´[k”†þàíYH² `àí+Ô‡‹/9¨WWO½üšåVÕlîµ¶¿Ì­rô÷Zì×£ùúé};kcZæÎëTøI©ZÍe¨¤òÛÎ#‚K™å¾f(78YHU¹œ¤A”³¬åH|î CÞ¥“Iläïéy[n›mÓ{¤‘1½ß’ÓÖßÖú^ĶQÝÃohš®¡âíË1cie¨ÛO›còÕf¸hÿÖÛŠä€zKKëÛO¿[Û­­kô¿[ ]mß_»¥ÿ~Wsc%޵©‰RÎãSŽk¦µkÆ/jmÔ)B¤œù  ûÀËJ:Z2éÍ÷ݵ·K7·»{\o¼{+zhžý}uµí©£àÍ3V¿»™µËj(#³U´\MÊÒN¿#2ˆ¼¬îÉüÜÒqn›MÚOOOv7µ´ÞþW½´nåÒšåønÿ>¾]¼­r߃µOì3êzªÝÞ2͘‰lLŠÆ7òä¸Ûœd.Ku ƒÓjJIJÖç÷¼–š/M]î‰k‘¸­ ­æõüíeäÓùìøÊ ®4ÛT·ŠIYuG!± ³¡cÇ`$ú ˜éR/×ÿI‘Oà’òýQÌêF¡£¬j–gUŽäë6þRC,«ÂR‘¼±ò¸Æì±x#–±¦’ßßÿÛíé­š{Ý­v-ÙÉúGôþ­±SÂÛKâ $ßræF†2Î. ŽØ a»vs À¹9ÎÙ¿½Œ­9§m®ÿ=¿'ú­Ìe~UýußîèþVЗÅ÷—>#•f‡Zšå5;7±XDÿb[uhË3lýÑ!¼ÌïËà ç‡2WÅï^ÿá|¶¾¶ë{šTµš{YmÞúÿOK[©˜?á'þÍ“û5µõ¹ûk›Äñ?œ›þÎ¥”“ÏâvÛjß.–ø/o}ï×~[ôÞ×W{ÿ{Þôòò¿kùÜKȵht«q¥â IUç1ÛGc©Yb# ¦bÏ*K2™wÆwÆÜŠ_ùvîõí¦ŠÒég}X•¬û_Ϸ߯÷v$v^!Ó®õMzÆ›T‚Étû‡Z\É2î‹`gŒŽ~öyç¨ÍcRéTqÝ%o_{oÃOK«Øtö‚}õû—õs˜ÒÛÄR]éÍ{ý»ý®ÒY÷,Ëiöo-<ÿ0݇Ïÿ>í»{WKåu¶¼¯égËoÂÖÖ÷¾†m5NÞJÝï~¿­þÎÚ›²¼Ó<'¯[i1jjñÍvbm+©c$†#”” ‚§+Á'æç5Ï/àAvI;o¢JVý:v6VöÒ¿Wò×oø=*óÉò­>Íÿ §ö_•7Ÿí´ý«jyyÏï6ãÌûŸ»ÝŒö«ï.Míîö½õßånm-~·&ŸNnêþšöÓ}ùuÛ¡WJ—Z¹¼x®n5·ñ$ÖjË\}Š4ò iÃã÷Á”àó’6òEZårN? åKÉ+_åkkßE¦nê >ÊÝïÒÿ…ï¦çQá©Iâ BÞîêimtRö±1œ¿žÒ0ç’‘˜×-ÎKzÔSþ3ÝÙà7MÿÛÝ{4ÑsÒ|«×ïÙ|½í;8½L üàHæ©&åË×O½ì½|·ò&éG›¦¿†­ù¯5 ÏøL´¸Úåg3î‚áàCgq,Çb©f1ˆ÷7˜¸e;¾lT¦¹T»ëé«ZöÛ­ºö)¦¤×k~?ŸÈž_i+/•o-Åãù"lÚZM:+¹w:)U$r GŠSn Nß þô¯k„R•¼ÿá¶þºöd:w‹-ï¼-a®y/l—m ˜îRXöFS-÷¸ moP9TJœ¬Þšþ ½¾[?ò¼Åó'n…K¿ˆZ*è·º†ž×†ÚÐÞGµš1: £2|Ã$W;sÎ*ZiüÒûÝ“üíߦå%wo_Ù~è³^Ãf'¸K‰Š®Ù,æŒFì2¨ìÈnGEbä`r2Ò»Óú²»õ²Ýtë³"þê“þµ·Ý}/ÔËñÏ‹ ðåÛ…°2ß.™qs ɶ’EM¥>Fe^œK6®zŠ˜µÌÖÚÆþ¿Ë[zšr辑¥ŒôG†GÜï‘ ?aœLå+²-›Ü¬APFŽp 7§å祷]7[÷".ë^×ý4ï©*Þè2%¿ˆ¼¸7˶Ò;¶¶"eÝ&Á%w¯ÎpTã®)¥Êì¾×ã¥ÿ ½Ö¿fÿ.ÿ×a$ñv…©¹mAD#ÍäFäŸ-ÕŒ“¹Ô9mÃnsRÒk­­ç}¿_¹•k6ŸM–—üˆG4I<˜à¸®n ‹Îa d*:lܘܤîƒÓššÆqè¯ùþ©¯]7h"•õïo×òw+i^9Ó%Ѭ®/æ¶M &X­-f›÷²G¿bV$…Ë!pN¶¨”f㯻ôèÞ×ÓrUíwýke÷þ%˜Ã$9ÒØ¦R'VUeÞ~bœàt¢­êê÷Öþ­5òßÌ#îÝ-Ÿù܆¬ÚM­ƒê ¾&—½b巈ǙŒñ/îó×­\äå9MhÛ‹ôqmü÷ò{¶O¥ÿƒÁú„·{¯u‹y-'»†úê슚 »v1ìBcŒ•!g…¢×•Úù§•ÛkñnÄÛÝåî¬ýüí£ûÒE¿ø^}}ÃÚêÙ³žÊQ%¹”4rí$Œ2áAÏ#“ÇzQ÷g~—‹ÿÀ]×ër糧~ªÌ©âůj {$ö­"ù8o,…ÌŒJô,7&= ¨9íI+;ù¿Å%÷èþB_ eoÆæŠøs}ÆÍÊ6ǰ³ò!‰÷nWX·a°q»’­:—¬ík~Z7ºÑÞþ[ò3€bD˜Zê ùvÿfcÿ&XŠç'æ b‹+ÇÝ<ää;Ú\ÑÓ[ù[]?òi}þBµíÍÙ§æÛ½ýv,hþ–ËX›V¼ÔRâöé';s3IåUK±P« ŒrI9*%éÊšê¿Y7ÿ¥~]󩾟•¿áßÌÌ‹áäöZ5¶“§jVBÊÜFëÞže 0B­,eeFˆ’C ­•ly5snRoÖÝÒ}/ýhí²VKKùïçê¿>öO½Û¥ø/W&÷OÔµ@ÚS^Á9gˆµÕÑŠ8pþo˜v‚ñŒ‚…¸<óš4i=šæµº]Ê߃¾–×îÑ»uIš_–·ÐŠËá‹[Mö¨Ù%Ôp„Žâ 7d’H²Ç*Ë; ™·GÎqÇ¢-ÇU£ÓÓDÓÓÍ6·¸ä”ž»k믟—M š§.5]M5=J_ßÞ˜Dý³Có¢Ú¬ÅLjÓnFùˆ?1Ž9!h;®­?;ù?Kw×^¶ÛVíý^§[eÔ]5ÅØž9% b žBmQ³#ï|Á›'ûØíK¦»ëùÿHV¶ÛY¨P@P@P@P@P@P@P@P‰´[ÍNêÂëO¼ŽÖk#!H˃½vžã¶kjuMng8·fŒ·ðÿˆÏÛøßüUkí)ÿ)<’îEÿçˆÁÏöͧýøoþ*Ÿµ§ü¢ä—qN…âM¸þسÿ¿ ÿÅQí)ÿ(rK¹ÐÔNª”yR"ã+¶t±[¤#“êk¬hØóTIçž;ÿ][þÂVßúNÔu)luÿãæûéÿú-«ÿ™Hìk1…P@P@P@P@P@P@P@P@P@P@P@P`0Ð!¦˜ j¡ jb#4Àa¦!T!†˜yã¿øõÕ¿ì%mÿ¤íGR–Æ×†bŠK–óaŠ\i¶8ó#VÇîÛ¦Ee"‘½ök_ùó´ÿÀtÿ ‡Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@'•RËUXÑ#Q©[áQBþŽÝ…m‚7ü-ÿ-ÿ`ÛýÕnÜO ¬Os*C JYä‘‚ªÔ’x³m-ÊI½¨ÙjvßhÓo-ï É_6ÞU‘r:ŒƒŠ«4$×AÖ×]Kqn{Y<©FÚÛCcž¼0€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € àµy®¶“ýŸm´ºŒ3Þ´’E Ûv˜Å¶LmaÌ{@'Á¨†®>‰?^hßõ×k_£+kß¿éýyš÷–¿bÖ`·¼“\’Í`ShðKu 3—bþsFIþæü€d sC¿½ÉñinÖ¶›é¾÷òó%|*ûuïÓúVë#ÃñêËc¨¾­¨kpl$6¶ö7I(—Œ´2ÈíqómSœãbŸ*‡»µãëøëë¯BõöŸ§ùzu=ßýDî¿÷ºw÷ª—ÄÌáð¯×rJ’‚€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( ÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰7.®"´·yîGrÌ{T Íÿ„ŸEÿ „_¯øRºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@2è¼7–òÅ *èë¹X ‚9] ü$ú'ý"ý‹¡X?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ &³×tËÛ¨í­.Òi¤8DPI?¥@hÓ€ñÇüyê¿ö·ÿÒv­¡ÐF÷…¿ãå¿ìcÿ¢Ú¢@‹^/ÿ‘jûþ¹ÿQY½†mkz¼ú}ÅÆÙmá‚Þäv’2Ä—v_ï¨t~u~äaÍ/ë`§ •ªû*{ÿÃÿÍ;Wºž]9žkgŽôòÖ’"´nêOθGçM(J-ÄŠŠTªºRjéÛóÿ#föò×Oµ{›ë˜mmãÆùfpˆ¹8'ɬº¤Y7Ò€ ÏÕ5ÝG–µmVÆÂIóå-ÍÂDdÿt1ê:zнér­Á蹞Ěv«c©y‚Ææ9š&eu2ì‡*yr0¡ÁÅ T¤¶ª¿äÐ=‹”SÃ+ÊË´-²@¬ FÀ8>‡zGK†ÚbÖt¹šñaÔ¬ä6ûXYÔ›|g;ùùz¸èi]rótî;>n^¤7þ%ÐtèmæÔ5½6Ò+¥ßÏu,ËÇ*Iù‡#‘ê)í.^½„µW[®.­í¬ä»ždŽÚ(Ì+•P –Ϧ)Iòn8.v”z™ÚG‰´^e‚ÆâC3+·•-¼¸ ³vUÔÿX‡œd0#"«•ÿ^­~i“Ì¿¯¼×¤0 € ( € ( € ( € ( € ( € ( € ( € ( € ( € (²}ÑõΓ ¬ÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰-x¿þE«ïúçýEfö£¯[jGVšK+{Ó@¶­AG”²î½C¯¨þTT§íi(©ò´ïùy©8Tr康—Ÿ™žb};[:ÅÝ¥å”Oq%ܲÄS/df9iÁÇAÆÚâ¹”]ÛõUJŽ£M.··gçæ/ŒïÅ:~k¥iÉye|¿l¸34ùa>EgT|1gV÷Ö¹ªS|òŽÖOïzißKúiäw¢äR]Zû·ýùœˆ¹Õî#¹ÓïŸÄkÖš\0ZEdn„?jW™¬Pö¹D9“å+Ï­iÍí%í#»’zì•¢ÚíßMûo¬¨ªv„¾žÛµÒÝooMwÛMo Ë}w«ØËos­Í{£vº‹N×?cû8iT*oýÑ!¼°6|Üð *v²káq[ï}-úê´·›ÕJé5/ŠëoÇÊÛïÖÖ6šâ=Ä:ûêÚUýØÔŒm¶Ör³D" ä’Švნ>ó3ž¸Pøy:Ýüï³¾Ûiån̹i(Îú[î³×Ï[ßON‡%-·‰`Žæ§e§›ÍÓyv×FžðåII„Ÿ-³‚¤ås™‡Ã.Þ{òCÿ¶ò¾úƒÑË•~]þí¿ Øºšf·.•©Íý©¯ÝËe¦£éî‰ug¾`óyNÅÝ€©[pÁ9ÎkE£MïͺѾ›k­ûkkjM“Ó¥ŸßÓ]ý?᎛ÂvKeâ4±j)5ÅÊÌ+NÐwÔÜ“}—ù;ÿÁùu15¶Ô5»ýOûJ»–HYÙ“{ÖhUY&Ü]7*”!wm —ÀÉ¥ô¿ó9|”coü™m×^š•=.ºòÛæÝ¿­ý ZVâë{È쬭mlîtËkØ#kˆe¸¶’7xdŠ4—äìvî ÿ«o–•¹©´ûE>Û™6¯åg¯WÐz)¯Vü•×ß½þ]ÍíKOŽ÷á Ηcg© N6ñÛLÆä\!q¸äcåÊ·lƒZU÷êF]¢þW_5§}VäÑn7¾úýúíÓÒÇ5ªé~ ±ÔµÒWV0À²Gò™î]`f³.™Ã·lpÜ6Ò¨‹º÷ºµü ¥¶×ùoåÝ +$—oÇ—îý.vߢ¸‡G™n5 »á籌ÝY\Ût³d€X¨$’Ê’M\!ÌL¥ÊféÚµŸ‰.¦Òõ=%X¾hY¡i#àí?} 3Ó ÷¤¥Ë¬]Ÿª¿àØšRÒJÿך:(bŽR#H¢B¢ Tt-¶îÊI%d"Á \<ëk4Šä 0À'©'SKmGØí$[8<ˆÃʰ¦·Í—`£¯ÌÜŸV÷¡v]-òíùh}ËPMCTÓô± Ô¯­¬Äò¢3̱ùŽz*䌟aBÖJ+vEÌöDöóÃq™o,r f]ÈÁ†A ŒŽà‚¸£Ì<‰( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (²}ÑõΓ ¬ÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰-x¿þE«ïúçýEföoƲˆ5MFÈX– ÂÍœÔíV8œ袯/ëfeSFŒûf;ÝmÒÝgQlÆv’XÞ$Ž/8’û™€£FÜŸ ã9a’ŠmkÓæ5SWm‹ƒê6¶^†ÊîøjÒ\EhccÎde_õ†>§Ö¹š”¥îî“~hþ.ëÐÞ-A]õi~¯ðVù™ˆ¼A¨Z^]$ò‹#JF“M#y·jgŽEs‚Änˆ)ÀçjÊ.2ª“zy&¢Ûóµßã{éléÂÎ4ŸOÆÏO-W®äv²_ÄVM£xæmEÓM¹y.à[I3º³ Õä†RÞâ¦¥éÆ¬£Òß?‹®Í/+o½´*/™ÁK«Û·ë÷ßï¡x§V‡Lmr_.T–eŽkx Eó&’Ò‰²âLŸ''þZA*FÏÙÃKó%äùݾV»~‹­ï1ï/³fý-gú?¿Ð•uÏ[øÆ-*ó_Ó-ÚÚ[x|‹Ë˜íÚù|‰Yرp»$P €G*Ÿ,¤ÚÚòÓª¶ÝºYõ[ü”;_Ê÷Û®;õêIñBÞãûcíjÁömöE„E ‘¾,†Y² eÇ9ŠZToΚûäÿáןÈÑë¯_ý$ÂOkV-•–¯¦hÐ .f…õ ´¶ŽæCw0e%¡“x&UnëÈã¯*}4òå]7×U{ôÛ¼=}ï¯ÝòóÛ_‘ìk£8Î;PÂ7i\ZP@P@P@P@P@P@P@P@P@P@P@ “î¨þt˜U`p8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THkÅÿò-_×?ê+7°ÍïXéÚ̓i·÷ßgBÊÌÐ?óŽÝ9ü3N•)\R‡2±â IºÑãÓm^á"ožeÓ43mÝ!TÆ~SÀ-ôÊıþÂ\És?›²þ¶îôîKÃ*±ånÈë-æŽâ–ÜÐãìAˆ<y”&¦¹£±£M;2J¡P@P@P@P@P@P@P@P@P@P@P@P@Ù>èúçI…VãøóÕì%oÿ¤í[C ï ÇËØ6ÇÿEµD¼_ÿ"Õ÷ýsþ¢³{ ÓÕçkiïY¥µ€³(‰ö®èÑU÷ƒƒ‘ŒŽ¹ê5(S‹”šK̉^öFr¬Ô°»o½‹%ãŸ,»üÈÜòÜ‚IÉpÖ5iÐÅÃtíÙ¯ŸÞU9Λйâ %×ôM îf°Ó®b™¶ÚÌÖí3ÆdAÓ £ifÂNÎàU«µÙh¾v¿ËM<ý ›jîìßÞÿýjs·s_ø{W×î´Ø.m´Ý:eû{Iu$d¸&!&ðA͸ŒA«¦ï¾Îi}ê ðôwën¤£ªK{?óüwßNšZÖ#ñ¯ˆŒº–¢º›E²k¤b¾Z²w€KùÅŽY+ä®7u e¡7ìÔž—Jݵik¾‹[½6Û±kË–>_•ü¾]þd:Æ©­é^%Ò./n´Ë™®¬¦.¢µxí­Uäƒç™sÀ ¨$Œía¤ciÎáÿÛ´·w²×~îÉÃ’tÔújíòïÙnôÙ7èíWÇ:Îi>¡6Kf–öÚu‰üØ^Ý\ï‘·à©òŽT(#züǼÁ©r_í$ý”U¼Ý¥¾š«X·®»;zé}?§îê\ñ–·©µÜú~—yofÖÓé¬%(Îs4쬬וxÈÈ$wMÍŠKî…ÿ_È›¯g~ñ¿â/ä¾!ÒìÖ Züµ…ôZUù²Ì¢Û÷©òÇŒ±èjlܧɦ־ÊüÛþ:~XÇ›¾¾z]H`ñ‰¬4»ã¨M¥É-„ÖÚw˜Ñ¸ <‹3;`iXí 3Ç+Zi9G—NfÒôN_‹µ’ïÕÞË4¹O¢¿á·Ë«õЭ«xÃXÓU§¼[K£¥]ÝA0·Ia[†KV™YxB€>VV22 V|Ús.©üššý:ô¶ªæœ¾÷/šûš½½4ÑrËÄ~,)omake-ýÄqZ^Ï °Qݳwá¼\—qΜ¾÷&Ï_Âß÷ÞÉ6f¥îóôÓñ}û|·Ó©þ¡â»j«kya,VvAm|ƒ³¼’)d8Px'i#vw dÄ^üVïou7ê·Ñm¾»ÕœoÙüõÓô×üôµ¬ê·ú½bò èVõ-îϤ°m*YHòƒ£àc’pyäu*EK‘tn>wM¥ÿ½W™T¤ã7}×ù_ú¶ŒÎÒïõoi:½¼^·¶Óï"°m¬^Ú?2_'¸ó ¾iȶ>òÕÝÔä_ÌÚô³–Þ¶Ñwêï¦1J ù+ù½?«¾Ý4¨x×Äv’ê±®•,ÚDw2ÜL`‘RäD!`¨<ÂP‘6ÒIlÏ=*aïY­¯÷ÊQý/øyš5gËý|7×Ïôiù‹®ë áŸK2[K©i>jDÖѲ¤„B²)ØKøÆNq´©©^׺oµ¤Õþå~£¥ïTI­4võ[~—Ыu¦%¯‡SÑ5ÍJöý­>×}JIVóaI ,e¶€ØÆ*áñŒ&Õ)j¬“Wë¦ÏÏküì÷±$êÇÍÝvÕ§e÷üì½oIÍö½³Tµ»žóN¸šâu±·Õ^Îi ]‘Ç$L¤d|¬ÛK*“(%¸œ—³çÚïÊí´ÿðoµ“m”¥Ïðù[äµ^¼ÏðJö;_\Åy é×VÏ<Ím£Ü­e*/þׯ½mU56Ÿ~„ÇbýfPP@P@P@P@P@P@P@P@Pdû£ê?&XŽ?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕZñü‹WßõÏúŠÍì3CÄz5«ß­òÝÏo|]$Œ­¿œ£a^ª£8è:Ž¿…pb£­§¾Íín†»Ø‹GÑmï59u ­F[»Ô•$8µòQµ?Âyò¬ð±§6Ú›n÷{¯ëb¦¥ÕއRÓl5[SkªY[^Û’ †â%‘ ^‹I™&Ѿ‰¤ÚÚ½­¶—e ³Çå41Û¢£&IÚT –n:r}j®ÿ¯+[ò_rVØoöŒ5Cª "ÃûDŒ¿³'œxÛ÷ñžœuéSd“]áÛÈŽÏÃŒrÇe¡é–É:4r¬V‘ ‘[•€ƒzàSz®^³æêI£[ÝÉw“a̱y2L–È®ñà …€É\1ÓCÕ4ö{ùú‚ÒÖé·—¡¿†t k)ì­´=6[€h#´cH  `òIçÖ‡ª³ØŽè¿´oÇo <1˜£e@ !ÇÊ=Ê8éÀô¦Û»}Ä’I%Ðlš}”°ÜÃ-¤Þ~Е› )Þ1ópç°-&­Óúž¥&Óº3cð¾팶«ö[M<9·ÓíãŽ;tv öªƒ’†3·œã<Óï}n­¯m4üºYi­ÇCá?Ag=¤>Ò£¶¹*f…,ã )S•ܸÁÁéž”=RO u¸éü-áëˆb†ãBÒ劼˜Ñí#eHó€Âçœ(z»½ÿË`Zh¿«ï÷—"Ó,!Ó† •´v! fX”E´õ]˜Æ=±M¶Ýßõm¾àK—adÓ줆æ,íÞ+¼ý¡%+6@S¸cæàÏ`KI«=¿§ùê GtAƒ£ÛÚ­­¾•c²Æñ,)nŠåÔ(Á :Uw¿§á·ÝÓ°%m‹ÛÃHÐÃm+o¢€]°O©À>€Ré`)iÚ¥ÝMu¦éw3‚%šÞÙ#y2rw0žyæ’IG‘mÛ =_3Üm÷‡4=BÚÞÚÿFÓ®­íFØ"šÕ! ÂðOJk›¨ïÐÒU¡TP0Snú²RIY Ha@P@P@P@P@P@P@P@P@ “î¨þt˜U`p8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THkÅÿò-_×?ê+7°Í/º›Ḛ́Cqö;341Ê—Ì;úŽÿtw¦éÒ”/U+/+èC””­ Ì›Iµí1nnãÓ ¶SçHíÐ!Ú8[þÁ¶?ú-ª$µâÿù¯¿ëŸõ›ØgC®ZXKó^ÞýˆËˆ·˜‹½}>`}zŽy¬ªÎœcj$üì8Å·x•ol'¿Ò.JÖé¤Cïx¼¼‘ƒ–XÉè{sî:ÑJ«ã¼zÚÀÓ†Ë_™Ÿ…Z÷O²\\MªÛ‰”ÜY_Ïoò¼›¶æ6BFðF8­êrs· ·áý3:|ê 3ÜÐO iK§ßXµ»Ë ».LÓÉ#Ê6åÙ‹}Ð9Ï¿^jÉvwùÞ÷ü‹Z;ü¾]½5bÿÂ7¥ kh³*Z\5Ô,³8xäfbÌÜ–lŒà‚AãŠw³MtVùvôÿ€+.WúûüÉu=OÕÚþßÍ/o%«|칉ʖ^ëµyëÅ%£ºòsº*ÿשJOh­*K6Ò¦ÿÞZÞÏnÌËÅ™ˆ dã¢>îÞ_†‹OAt·õ¯ü1»@P@P@P@P@P@P@P@P@P@P@P@Ù>èúçI…VãøóÕì%oÿ¤í[C ï ÇËØ6ÇÿEµD¼_ÿ"Õ÷ýsþ¢³{ ÛÕDsêâ+ƒ"Ç—Ë‘£$³FTƒqô©žhûË_V¿!*’ƒÐÇмOao«ÿg$nÝÈ r4…ÛqÀRsÎ1œœöãÃÔ£Ó§køùÜì©F|¼òzþ„Þ2ñ£¥ëZ}…„±À—óLît›A²$,¥GÎy†MÏŽ¯<­%fÕ4MYíî>Ôú„LëöˆdXÚ4jc’Ç«IÊ÷”ô‹K«½ôùZÛn¶»Wéäþk]Ííc_ÔlþO¯&œñê+§ý£ìŒÅ!Lá·áIäpp⪲å—$í+ú»]/äm'ym¯Îßæswî4{¹Gˆo/½œS ’ú+Xåósmå‚Ñ7—ß6Tß7ÝÝNñ³·•¾ùß(þob"¥eW÷'§õs³ðŸ‰¬tmœ”ZK㔣³ý/oÌÊ7PŒeº"Õ|=§k åêÞ'¼»ŒBñ¢4¶È#fŒÆÒ ‘‚X†n¹\±ùzaZÎëø)þiž‰]ÌÐÑm,4»‹‹©µÇÔo.#{‹©a 3µU@˜ôÎXäž04ùl´ëóÛôôµ^Z_×c6O è7’´ºÞ®ÚË<±É"Þ¼$"2"*•Fn™''¡FÖÓ»ù´•þåeþz»ßîù^ÿ˜û xVÂîæKi-ÒÖâ9c6âȲÃ…@òÆz³zðYò¸¿ø:6Õ½ví ^ÒRZ[ü­ùšÇL“ÃShW:Ô—0K @fšá`„c±ÉŒIÇ$ži»¶›Ý4ýZwþ­aFн¶üŒûï øzòöêñõI#žà— Ê)ÿrC¯A·B3‘× ƒŠ˜§½?ý¹§ä=6}­ø[úó6ô©`±·1\ëí©9mÞmËÀ¬§îÕ? óÖ©ú¹ý£cÿ?–ÿ÷õÆ•˜ÃûFÇþ-ÿïêÿ`Ú6?óùoÿWüh³þѱÿŸËûú¿ãE˜öüþ[ÿßÕÿ,À?´lçòßþþ¯øÑfý£cÿ?–ÿ÷õÆ‹0íùü·ÿ¿«þ4Y€hØÿÏå¿ýý_ñ¢ÌûFÇþ-ÿïêÿ`Ú6?óùoÿWüh³þѱÿŸËûú¿ãE˜AsÆ|‰£—o]Œ•-€¡©kö:f³§é—$rê #C&ßÝ‚ífþÍ*…ϹÉP@5( € ( € ( € ( € ( € ( € ( € ( É÷GÔ:L *°8Çž«ÿa+ý'jÚox[þ>[þÁ¶?ú-ª$µâÿù¯¿ëŸõ›Øfωo/-Ý ‚UŠ)Ðüê§x óƒÐg+ï×âªL™;7÷Jª’½Åͱ%‚Dçx|åNI'1ÎÁÁ×>"”´²ºíçßü»={8Ý9®º?ëúóüsÆ~#ŸJÕ­aº}7κ·´×—Ÿe!S€v¶OÍíМ•­'$¹dõ_­ÿËËÑ’Ý ¿eå4Ñ‹€#ÊC¾Ebà•(ÛFõ8?0àç5¬Ÿ*?Á]¿¯¾ßÒ#·ñ6Ÿ2FÝåhƒ‘ 2ºd¦ý»öc;yÁÃtãšU"“íÃúþ¬4®Òþ·±ZÃÆ:}ż2Î%·3G,^DÍ!g v…Ø7 !ÁÎN3nɵýioóûµþ¿¯ë±j_hñB’µÄ¬Œ†CåÛJæ5‚\*’œ‚>lr¡¤µv^_ŽßxÁü7«ê·v—°ÚØZ[Ü3Á$ìÓܘUU Ž¡ûÝñÒ¡Ë—™½—üò)+ÚÝHí;ؘˆže‹÷ÈñKì ©]Àç±ê:ÐÚ¯ýhßéýl [ùn<_¦ 6æîÌËpa·7žD‰æ¯©+ÈÉ#8Ï4=>ô¾÷ý[¸ÒÖÞ¿j/i’]El%•%ªáíä@ŒÃ*¬J€Œ{+`œŽ9Ö®ËúëÿØ›éë{~cuMi¬%»‰m ÒEK ‰0ffb›zqƒ·ž~õD¥Ê›ío¹õüÜZZ¯;þðäkâ[0KÊ ÃåÂÈÈG‘ä v*($ ;jÑû²qìÚû’wüHW²~WôÖß™¥â«ôùäÓ¥óîRÔÜF† †Æþ>^TŒF:ÔõIwKï·èôïòe/??Ãþ foépg|ò±RÊ|«y$û¸Þ~U?*“‚ÝàœÐš{_×Ný¯ý}ã­üG¥Ïr-ášRåýž@®ÉʬW ÀIâ„î®»_äèúçI…VãøóÕì%oÿ¤í[C ï ÇËØ6ÇÿEµD¼_ÿ"Õ÷ýsþ¢³{ Üñ•u¨Íjö¦å+«yŒGÞ+Ó {éÛð¸IF÷&JæPðæ«Æãf=|ÇÓ?Áîß§©­}¤¯ëúüã‘ÿ_×õùs^&Ñõõ»Y¬ï-mç´´[gÛ™‘²±äŒ2c”ýz ÍnÚÙþ—ÿ3N‰v2î4 ›­J Jâú/¶[¨Ž3¹TGïRÄÙàçåÂõçt¸é/5géÓîzùìÛËUëÿ §ãé›áil®í¤ш co&ÜÅ$ÁcŒPIT—75úßñý|ôóÖ·OøøêÆ•ái¬¯,î'Ôo±¤q¢­¾Ìª$ˆ2wq''Û§<4ÝÛ{»þ6ÿ k¢þµ¹«xT¶[›m#tÃQã¸w‰ hGaÉ•YH¯œ3ÅLœbö\¯î·ù-?¤÷’ßS¡Ôt=KR¶º¿‚ ¤·‰ãX¦„8Ë;†z·;ÓZIË®Ÿ…ÿÌŸ²¢2çB2Á|‰uåÉst—Q¿—‘ M¹ù†Pg§u¡&”mÑ¿Å¿ÑØzkæ¬dÞxnâîakuºe¹–[‹»ÈÕcæ…¢ˆY› m<äpyíSË}6²{’wõæ;Û_5÷"{? Ëg=¬šU­Ô2,‘Ëk¦yJØVR$Q'ÍÇ¡\½ouçé¯ô‰²µŸü{ýòòId{Ë7ÅñÍaæÄå°!KðãÁ$ô Š›võùÚßðÝ»±ßo™2è2>k÷•ãf38fÎ$´nbqÆX=hœy’^OñM~¿Öá/æE/†Dš|v@‹N{Â>NàŸ?_ö:{õª“nR’ëg÷6ÿP»o+þ#‡nÞã7:ŒOo-ÄwSÄ–ÅKJ›qµ·ªv! †<Fx#£^W·Ïþµú“ovÞVùÃhhjZBßjV†c´,Z=¹ƒ‚ôÃ*ŸÂ’V•ÿ®«òoïÖ6þ¿­Œø|3-­² [õK¨nÍÄ2<‘Wg– aŒ‚F}©E8¨ù+?;ÿKî³ro¯á×ó¿Þ6 ´ýFÙ¯7¶¡oåHþWËHÌØÏBd?/`:š|©EG¢iýÖÿ/Ä.ù¹ºëý|†]øRâHã·µÔ!†Ú ÂÛu³­•±Är««.0@탂+Þíÿ¿_ö¾÷ºZ+/øþ¾í|­ ¿†u «#o|-âŠ{‰mÖÊÊŒæ@®Ò ðäà<Žx©å÷U÷²^]/ëµ·ÚãNÍÛkÿ_ˆ¶>’Ævº´¹±¶º F-ì<¸T¨u;“~[+!çp9éV®¶óüm÷l˜­Ü<,ÃYþÒ˜éWHé,­.›¹Ã¨1¾ü Â‚݃“íJ Co?]àþ½å©é^ ÿ—ÏøþÍS!¡|A¦ê÷^*Ò®t¶ŽÞ²»·¸»b Aæ=»ˆA äDÀgåNìhËäé¿ð’ÁŠ´ûMYíÑ4‰'ÔaYÜ(-%œûœt‘^H¤âUTphÓ( € ( € ( € ( € ( € ( € ( € (²}ÑõΓ ¬ÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰-x¿þE«ïúçýEföÑk;.­íšc o“9 T…, |ù8# íxñãõÿÚÆÔÒ³“ècÅâ$µ¶¸•oÁ2¸²Êp®[ø°qœž¼`b•wWe6µõû®ßùù›…wî¯ë¿õcSY×ÛMÔm¬-ô›ýNæâ'˜%©…v¢“$ˆ:¸éšëNí¥ÒßÿÈÅ«$û–!Ö¬L,×3Ãe,F4ž ç}»¾6#íbŒ œäc5Ztwéóê¾Dúé×åßÐαñφnô÷¾:ÞŸmwnÍ=ÔI‡Va½ŽB–Èæ’ÕE®«OÃñWW)¦¤ãØ¿7ˆtKyžõ>)c唼Oyï¡ëCÓåÿüŸÜû kku"“Å~ŽÂ+ù5ý),ær‘Ü5äb7aÔÎ ”lÒï°.¶èBþ'‚vökw0hÎU¼¦ Ó(‰$ÊçŸÏn´µQ‹¶­Úßö÷(Ö²²}/ø\’¤v“Ýë–3ø~Ö¿¾Ô§·TlœpÉ+Î:ã¨Æi»-Ù*ïdK/‰4(M˜—ZÓ£7ÀP×Q´p sód‘Ó4ìù¹zö ¥n„ZwŠ´]CW¼Ò­õ q}g9 i“{°@Īƒ’HéÕ[Ò”}èóGÏðv½×Êÿ«–—\Òé-WT±7 ¸MìWvì.rq±³þéô4®­~›ü´ÿ5÷®àÕˆÅ>}>MA5í-¬¢qÜ‹ÈÌH碖Îö¦ôµú‡V»VóÅssÛJ“C*‡I#`ÊêyÁ›M;1&ž¨’€ ( € ( €3ï4M:÷Q‚þæß}ÄpC°WÚw&õkìbYwµ‰+‚s@P@P@P@P@P@P@P@Ù>èúçI…VãøóÕì%oÿ¤í[C ï ÇËØ6ÇÿEµD¼_ÿ"Õ÷ýsþ¢³{ ÞÖ<=§x—m4‘OL)I‚2y=ˆü+ju5Ëm åMIÜÁ]Õ­µÍι5½…”1„–A‚XÊJÐ0sŽùmæ¹qØ®8BM}u¶Ÿž¥Ñ©ì¥/#=t„ñE®«ØhzF¯a 7P­¶¯ M¤Ì0ãl.¹ýÙì>÷SÔ¬t·Ñk׫Ÿà5_ÛÁMi«ÿ#I¼/¨¿ˆôÝe-´Ë/°$P-Œ2³Dñí`Ä‹ó&ò#ùznÎ7üºÅòÎRn÷¿ËÍy½Ÿ÷}%x(¥kšÑùiñzkŸuà½i®!-¬ék5àU¹²2Ç<¾fYâ\©RíùƒuÈ Ê1´m/åQÿÀtOÎê÷];²äõmw¿á¯ÝÑúè]³ðD–úLöi”).¡gr"¼ª±B  ²åˆò›Žr3Œœl¥iAör7Ígëªû¼ŒÚÒKºKúò#Ö¼'®O%”еíÌ“5ºêÙ˜¢Evx”³ccü™ wNG87O'ò¼›Û®oµ¼Íy­.eåó²ïÐ~•àÝFÓÀº¾‡q5«Üß@±#b™ÑÄw¹Æä=úVõ›]¹¯òçrü¿:k‘ßÊß…‰uÿØý’ÐøkLÓôùí®VwŽÙßO#¦ ° ê@p{Œ`š‹µ4úkøÛ_Á|‚+ܳßOÏúùÙ™¿õ˽(éökµ¬–î«nu˲–ó3»<„„ q»rœI€¤“—&ŸDãòJÚ[n›ïéa½Ÿïç}/Óo¼Ö»ðö½½%þžšmÄi¨ è–{™"g&ÛÈdlFÛq÷ƒ ç¦ZP¼òošÿ'¥º­n¶WVò_zÿ5÷>å]+À·ãOסԦ³Ž}^ÎKq-¾çòËËpç¨RW÷Ëßœœ—RPŽéÅúò¨¯Í?DËRýê›óüY ø7UXá4ËHõ8åÒàøŽögRE ¯$m·Còu`ÌÞÛ³¼4ßñ·ß¢³ÑthˆÅ%Êõ_×ÝÞéé·™Ûèv·:5•­ä±Ëq(’èúçI…VãøóÕì%oÿ¤í[C ï ÇËØ6ÇÿEµD¼_ÿ"Õ÷ýsþ¢³{ ØÕ¼M ÜöD^ò5ÊïeXó·w'9éíùu®Št’“ØÊU,ùVåkOÉon§RDq¸ ’6T9‡!ˆòÍŽr:€y8¬dpÕ¥ -4µ¼ÕÿÏ_øs¦•'R ßSOXñŸ£ÜÁmyö·žtgŽ;[)®Xª‘6,:ú×bz´º~¿ðÄZÊåûK„º¶Žx–EI2‰bhÜê¬)ö ¦­¡)Üe…õ¾¡ng³“̈HñîÚGÌŒU‡>Œ¤RèŸu¼{6»(  ¶ñŒvúµÄæH`ҥ˲Ò5• ’FvÎsÅ+ûª]ôümùŽÏ›”­iâí*òòÚÒßí^}ÄÞO—5¬–ïòÚ@Ì’m¤#ÀHÇcŠJî˳u´õÕ|‰m%OÇþݤ2;‰–Þ &9XÔ±£;`z*‚Iö4%PMcQ‡HÒ®õ•v†Ò&•Ö0 N2G?RîÒû݆•ʺ¿ˆ´ý"â {¿µ´÷ÒG­”×,UH‘6,½}i_V»_ —Â¥ÜѶ.mãž1"¤ŠD‘´lõV©ö TÕ„É) (  ú…í¾›c=íäžU½º$}¤íP2N'ð£ª]ì¾ý•Ëädt ”…P@P@P@P@P@P@P@Pdû£ê?&XŽ?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕZñü‹WßõÏúŠÍì3¡ñ­ýí¨¶²ŠÂXeL—{ùé»~˜­¨Êw•ü¬4 Õ¤sZCÝÙË|–Ö†Ù¡R¦iã„ä–/#6Ð>ã¼rª:×6:›Œ£*¼å»û’ùyo¿St©Â 7¢!Õ7øŽïFÖí´ÍWQ³[[˜\éWÿdq'˜ƒ93DÅ–øôÈ¥(Nœ¤ª-m¶ëÍÊq©áµßù 7‡ï§ñ-ž£YÝ-¾¯šò’ûÇî¤ü¾[ßúÜÏñJ\6 ú߈ôak¢‡µŽkBòÕ ÐE¸àæ_,áäFÚ̓Œõ¤¹bï-nåo&ã?Á®ê÷¤à’ÒÉ_ïÕÁùu,éšæ­ð½ÓG–ëOŽxï ¾›Û¬R¤’Èc•l ¤`£‚0Hæ­§SæÖÜ—ùZþwõí°E«ÊÚjÿËÐlþž=>9àÒYu).uµMmKyto²zîK½´ßKü›ÿ?Óaº—‚µìëËI|2º ki Ó’šqóæe ; ™F‹#`4Û\­ïî]ù$®»égäî\­wm½í=vÖÝ7;]oçVñ>qqö´´·²ž6’ÖöKfÏPLn¬A ÞÜ}(Š´¦ûÚßù5ÿ4Jº„cÛüŒk¿ Oogâ)m4¨î®ï.#Џòîf’×Ë…\)™ˆ-ò1C‚Ê f§ìE>í»[ù›^]Ÿ•ݵ+í6»i¾ö×ü¿ ŽR}2 ÛFÞ*Ó#—Eóî~ɦßÏa+2BVAt€VQ…äÈq4§¬\~Ó‹Kwoy¿]SŽÝ­Øq^õÖ×WóÒÞ:ï¾èÐðç€d¸²ÓgÔôHÙãóüí»Œ`TÀœãÎQòžàqšÓ¾5í?½ÎëðÕvòdR’j2[{¿v·üŸu ºw‚õuÔì®u‹MV{˜ãµò®m^Å„"ExÝäýòêû„lUƒžäÒ«ï{N]ß7Î÷·Ÿ[k³K¦ÄU”WEo•ŸÝçøt,Ÿ‡òÅáØí-4{hç¸ðü–×€”ýí×îŒ{ÎNâ|1È¢ª£\ói]^-.öm¿›]÷¾¯r¡ö[ßÞ×ɯËË¡gCðÜÖÞ3¶Ô-<*tÛpà³]-©È!ÚŠMé–'1èrH*zv½ß_%æ­míkhÝ‘›WŠV×OMîß®ú­ïªÕÛÑêK ( € ( € ( € ( € ( € ( € ( € ( É÷GÔ:L *°8Çž«ÿa+ý'jÚox[þ>[þÁ¶?ú-ª$µâÿù¯¿ëŸõ›ØgIqys%ÌÑY˜£[rŒ‘—,ÅCp7.s“’OðÔÄ57éo+þ¨Þ4Õ“}®Ì†êú9¬Ù5]%;ÜÌÊ– $ãvHÏÝÏ3N8ÕZkîÿ;þt´ºc®õOx^-¯/´½ÝäÅ,ÑÛ©ç-´SÎ=k±ÏšZ»³ÁEh¬‰¬õÝ*öê;kø.¥–#2yæ)A°“¸qÒD=y âž¾_ðWèþàº4) ( $9$Òm%v \lEqsÛÈ’Ã"‡Iƒ+)äGQTÓNÌ.>P@P@P@P@P@P@P@P@P@P@P@6Oº>£ùÒ`aUÀxãþ<õ_û [ÿé;VÐè#{Âßñòßö ±ÿÑmQ E¯ÿȵ}ÿ\ÿ¨¬ÞÃ4¯ežÏT½ÝmrÉ4‹"4P<€-ªƒŽTðyüëÂÅӭ후[OüB“ƒ‚»Ø©}sqwe=´6—¦I£hÐ5¬Š2FIPÔñ\¾Ï-9Yªtâït¼ºÿŠ4ËÍT¼´´K+¤7–QÄÊÌ%ˆlÌ‘ºòUˆÀçnAÅ}:ƒ„¦žŸþÝý|Ï'™J1¶º³—׬üO¯©=›ê“˜QâK¶…Œ$Ùy…lä…”â2¤Ûpj#¶º&Õ÷þj–ó²÷~^EK}5ÑÛmí÷ÁÜè´(¯¡ð>¬««jwbSo1Óncž`$wÒIƒ’2Ç$àcª§ÁýoåªÓçmw zT¿áÿ§èbCu¬éžþѲ]Cη¾ûš7mÑ<:~£oâ¥Óžã] iK¸#…¶ oɆ`Îsœ¤ŠÝØ&§ï!QEZüß’×åªßªÝ•ãÈ徟ÛüôjÖÚÚ6vZÄ6:U¬7ºö‘m„H…´ýF飺RD ¬r/äÀuhˆÎÞ7ge%*®].­æ¼ïç{ßÞµºZÑnXÛÖÿ¥¼­µºÞúšWzgˆ<‹»˜î¼Cöƒ¡:ªÏ8_6;öp8¡8Aá°+:^ï-ÿéÞþá¿ß¾¥=n¿Ä»im?ºôÛCÕ;Fzâ›&7²¸´Š ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( É÷GÔ:L *°8Çž«ÿa+ý'jÚox[þ>[þÁ¶?ú-ª$µâÿù¯¿ëŸõ›ØfÖ·®]é÷ÆÞ×M7j°¬¬áœmÉa–6ÃÜŠ¨Å5¹-ØÍÔµ«Û½:âïOögCæ…šTÊõ<ˆÁמ•qJ.é‘-Uš:='M´Ñôø¬tè¼›h³±7ÆIcÉ$õ&¢s”åÍ-Ë„#òÇbÝAEmKQ±Ò­ïS¼·²¶BMq*Æ€“–$´›Hi>ƒÚ+{´†GH§Ta,L@`8e>¸=G­SN/]×ü7üSMi³ÿ‡&¤0 € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € lŸt}Gó¤À«€ñÇüyê¿ö·ÿÒv­¡ÐF÷…¿ãå¿ìcÿ¢Ú¢@‹^/ÿ‘jûþ¹ÿQY½†hëÒ<:´äÛ\H¯iFŽÙäƒI‘•°yרü4ŽÄ=Ê·³¤ö71yooºlö²D‰òžK˜ªŠwVþ¿=Œo ëš<ö>—«Ã-…æÄÕNÄM²Ä›ÆÎr8¢°•)Fu"ôvŽ«u~m¶üѤj)B[]üÿ¯F2KÏhº´ë­ÉvÚD°X#K""lƒÌ¸wØíÛ'p\’Á±D¥ÍË-¹›ò²¼’òÖÉ7¶ÛjÙò·Ñ^ß-½E¾›DÚž¸<<Óxš §‹U˜Eq¥\ÛÝg®À;ù ›ÁÜ8@6·s‚x>tµP“ò~òùë³ôÒÂÞ.7Òñù[”ôŸxšö-â=1..$·ŽkXî"šæÍÞâ4aäyc3©ÎAÛÏRj1M¤Óê»rÉï·Em4kUÐ&ùy¶¾×OêöiéÐÓ¿×µë_¾šuí>Õ-e†(àÔ.â†[èÊ)i~FdbK€RD]ÊÞqæ|’Ÿø´],¿G­ô¿ÊÜlÒô×çý.ýz‘.¿â +Mº¹Ö丞”—SË%´Al¿y¼¨G ’³û†T™¼ÒISnÉ8ëëͧk6’WÛ«d&ÜT’×ÞÓ½¶óõ¶ý-¡±âFFmÆzd–b,ú…ý´1ÝÈ]ƒ¡d·ep¸@U l7rNANîZ®«Në½¾õtí¦Ýܬ££ïòÛO×]þFß„µûËßßX]k }³Ï" C Án« UWVh¤ ‡Ü­Ô7`©ûÔï鯯oòzýÍŠwM]5ù_f´òÕÕ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( É÷GÔ:L *°8Çž«ÿa+ý'jÚox[þ>[þÁ¶?ú-ª$µâÿù¯¿ëŸõ›ØgQ©êÖºvÔ•¼ÉÛ Œƒ#ߌ'ŽÝp(³µÒ :»zè%½Î›®XíÿGº†@7ÂûdÁ8aÈàâ„ÜuA(ôh³gkoen–öVñ[@™ÛHW''p9$Ñ)9;¶(ÅEY+RP@P@P@P@P@P@P@P@P@P@P@P@P@ “î¨þt˜U`p8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THkÅÿò-_×?ê+7°ÍÚ]c¼³…¥Hö­Ìp«™fRê¡p£, <\u§âåË'þFUSå÷Niµ!µV„O†11•!,ªÄ³a›Îåú¿»œçÖ›p~ï*^š~D.uö›õÔÝñÝ¥½å¥ä×ѿۭíY¬õáR¦áRE+žYIÆGá\‘ªE>·ÿÒ[GC»“]?Í¢×5ÛͤèÚd—:N—Òz-~Vô½ÿ þòQå÷a½¯÷¿ë®þ†wü'~ 7iVö¾V "“O¸žÓÊVî#qEÝYA„gŽœñPŒ›ä–’Òÿ8Éíÿn÷î´Ü&Ôo%¶¿…¿Ï·fmøKÄZÍþ­®¬, sErTÛDèU ˜DÄîcÙÜðôËu¢”oåÿ'§áýn)^2·›_vß×ÏÈæ ½×l¬ïõÝ>G62êO=þ e´¹DyDqǘÅH`œ…La“œ§uy¨­w»qÖúùýëGÒ䓜—gÓ¢Ko?éß¾æ¹âmI7jÒé.ÚUŠ_Ý/‘ 7*îàGó>BcyÝ–aòŽ•Q³——4c÷Û_-ôZìõ!]Åtm7䬿«½,­¡FëÅ>#·Öîô2Ò+»×»™•Ö-ÀF‘@Bˆå¹@ïFJ¾>\ìù‰ ¸éÑ;ÿàR^©içk¥ÚôÚ½ûÚÞWWûþëêmiú¯ˆuy/B› #ì1¤w³B×y­ ¹!ÖEP ¸†ÎÓÈÏ µ•)Î/Ozß/×®Û[¸S¿XØû‰-•èrI'×&ŽÞVü6ûº™ö¦j×úu¥ÔöºÞI Wh[ å S:z [;­péËÐ΃ÂI³šßV5¿>àÜÊú”1JZM¡Cm a@ 8æ•’¶×ü]ßâ6ÝÛïú‡ôQymv4}<\Ú ŽÞo³&øTtTle@ÉÀ´îÓrêɲ²AÃBÒ.œ4«c3’Ø[§”ìNI)Œ‘žEM•”z-¼Š»M¾¬ŠO x~M6=6M L{\¼v­i‰ç,“Î;šoV›è%¥íÔ³‘¦ÅqoqŸh“ÚÅäÁ"¡¡ûŠq•_aÅ;»·Õïæ++%عHa@P@P@P@P@P@P@P@P@P@Pdû£ê?&XŽ?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕZñü‹WßõÏúŠÍì3w_Ë{cmsÉnÁåde]»ô#MS„âÔ’~¤¹8µckvú$¨F¶ÚLµ¬ 󺞎8ÜQñ¥J4UO«ÅZ_qƒ­>UQêŸNß×cSÅÚÅÖ‡sk:Iþ-½Äb" îœ'™=z$ƒ®j,äÜíiäî—ã̾ã­Y%'²zúYßò_ygâ{û K‰µk¯0hštï~Æ4A<ÂVHÛýœˆœà`|ãÚ‰ËÜrŽ—åKüN÷û…¾ewmù+&¿ø–>4¼»Ò¬­¦ñ’ϦÖ×—Ú=¼wM*TÚ«ƒáNø{š¹r¦ŸKKÿ%’W~©ß¶¤¦Úzkîü¯ºù;®çoáCP»ðrj2]\èúçI…VãøóÕì%oÿ¤í[C ï ÇËØ6ÇÿEµD¼_ÿ"Õ÷ýsþ¢³{ êõK£ml,›‰Ï•\‚s’Xðx‚x5Ýë²&NÈó^÷Qtºd}¢âi -TRÀ ª r8Óp9Ævï*n£U4¢·ßúþ¶99cV™Õ_k7¾µÓ—Pº>V™Ø’Æâ8Հݜ`'ä+Ýó(ïm>ôµùµo™Þ’÷oµìý,ÝþV3¢ñÔ–VQÜë‹mÚÚ¹Ô<¡´-Çž!EFv ªÌ²rÇHš¦ãÓ¯-½ZmýÖþ®ˆIõÑë÷+?½¦ŠößSRÕm¤Ñ¬ïu U·¹ûE¥«[Jë"HmâM„“¢¹Îìc#øT¥-¬Ÿ¦²OòóòíEoÓOëCs]ñ ãÃÚ~§ ®ø/Ú3ö–´–àA!o1¢Œ†aÀ^£²N¢i§$·×§üW§Þ|ÑrK^Ýw·Þ»#*ëâ^¢Ái­¨Y_O$^t—:|ð¤>YvUuY%ÜÙÚr±ù„Gq–—4ùR¶ËæÒùÛ]ík|ÃUm÷ü?-÷5ì¼_mvÈÃO¿†ÖKÓb—R,b63¯÷÷mÜ›sŽK/¾}î_5u÷_ò¿Ýæ®›I6µµ¿—ꊩã‹g»–8-o.Y¼µµ¶ŽY',ó ÊÍ R¥ag¶áFrIÀQ|É5×ð\©ë÷¯›µ»Ô—+³éùÞßžŸŽÚŒ“â6»wÖ·$pɳÛî†IÚ…¥Ûï/ÌŠÊ3×ƒŠ‚çvŸá¿êµ·—BeîFïúWþŸ{}!…P@P@P@P@P@P@P@P@P@P@Pdû£ê?&XŽ?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕZñü‹WßõÏúŠÍì3k^ð×öÅü7GZÕì|”Ø!³c¹É$9'§^‚µ§W‘[•?Re™^ŽÊú=fËPÖî®íI ¢ÝD©!é´–^ŒçœàœVËä¹I?&gìÔ=èî_‹F¹ñ§Fö×Ð]¢º¤;m\Œ¥ÓÎH'œ×=EÕR§²Ûúõ×Õ" ç*N3Òú?¼’éóUŒ÷k&¥,sYkwŒîCaòØ9“œƒŠÊ+–).¿¿—OFjõ“oª·é÷í÷"ŸÍq,3Ëâ}gí1G$>x[UfÊCˆpP`€'šNé­“]íóé`M«yj¿¯ó4.4$þ˲°Òï¯4ˆìB¬-fÈHUR¡H‘YX`÷Z©7)s6LRбŸƒ"²•'Ó5RÂà¡[‰¢0±º%ÚBÎ6Pw;œ¨_¼GLEòè¶ÓNš+zí¾ºë¾ýÿ¯M Íá»C O£‰®¤’_5X #wɹN0 ±Èã°ëPâœc²²û¿Ï¨Ó³o½ÿ —> °ycšÒæîÂx#‚;ymÙ3ˆ8]¡•ÊÈÊw=3Í[o™Ë«mýé&½4OÔ”­­—ë{ú’ZxfK-@Þ[ëÚ¢´¬u-Ê]:€»˜¾RUT›G3Í|ºtÿ=ü÷×µïÓ@jþ¿×ü7¡¿Ha@P@P@P@P@P@P@P@P@P@P@Ù>èúçI…VãøóÕì%oÿ¤í[C ï ÇËØ6ÇÿEµD¼_ÿ"Õ÷ýsþ¢³{ ÔÕá‚mjàMoÌ–±•ß|dÍÓ*ÝÀíØuèqTªÜÒz-ýYNn1V}ÊÚí¶›¨ùSD-…ØHQ•UUÜ3žÁz†PÑŸÖˆB ¬½šKE¢þ¼ÿÌÍÖÒ1—_ëúü ]g\M&ö(§‡0Ék<þh|Ñ;6÷%KçøM[nÒ²Õ+¥ß§æ×Þh£w7oÁ¿Ñ˜7>û6• ܺjÇ!¶in#{ «k ™! ï·…ÜÏ—Ç2pzU;'£ÓÝ×o‰7ú|Þ„EÝ^ßÍ÷Güô·©f_ë0(K£éÌ5 Ú1$:›<{FQ"'çU†^@ìsJo’÷è›'k~+ñì8ûÊëºKæoh:‡ö¶‰a¨ù^OÛ-ãŸËÝ»fåÀÎ3×¥HrIDZ1wW.ÔP@P@P@P@P@P@P@P@P@P@P@P@ “î¨þt˜U`p8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THkÅÿò-_×?ê+7°Î‹QÑ#¾¼7?k¸š5‰–5Œ©¶8toï°üjuNéØ4êrÚ§ƒnì.ÓSÓ¤ŸT–݃[Y±TUaʳ1`è'ÀätAÁÊí$ífúØçö~Ê‚¿[] O@¹ñƒ¤E©Îmo h¦¹Â«o; ËÁÆ3 ŒÔ ÉòƪœvOõºüR+F·kîïú¯˜Cá«Ë+½^ïLÕ ‹écx<ËPé«d+¸o Ï!$?7^*#xÁGÍ¿“Ù|ºìçÌû~6Jÿ;+úðx&úÞ{iáÔôø]oä¾¹H´ÖHäg‹Ê!Kò|¤’Il±ÝìSŠåäéÊã÷»ýËK.ÁwvúÝ?»¿wÝú.†×„´­OEÓ!Óõ BÒöXc†›@ÁTcæ&G H ÿ g.vä÷d%m¶6ª ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( É÷GÔ:L *°8Çž«ÿa+ý'jÚox[þ>[þÁ¶?ú-ª$µâÿù¯¿ëŸõ›ØgmH€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €'ÝQüé00ªÀà[þÁ¶?ú-ª$µâÿù¯¿ëŸõ›ØgmH€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €'ÝQüé00ªÀà[þÁ¶?ú-ª$µâÿù¯¿ëŸõ›ØgmH€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €'ÝQüé00ªÀà[þÁ¶?ú-ª$èjP@P@P@P@P@P@P@P@P@P@P@P@P@P@p8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÐÔ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € à[þÁ¶?ú-ª$èjP@P@P@P@[ÇÄ_ïç@{™ƒ°6©KAûTÿóÕ©Ù>Õ?üõj,€F¼•³LUTd’p¢Èè4˺‘"ƒŒ£3G*ÿjŸþzµ@$w²É:JÛ]C)éFE+ íSÿÏV§dö©ÿç«Qd¡éZnµãÏK­i¶Z›Â–‚3yn“l®ÆàqÂŽžƒÒ§­†t?ð‰ø_þ…]ÿ°ÿñ4ì >ð°Ÿ h ¤é°ÿñ4;%vÆWƒCðMÄVòÛè>–;’D–Vì%8'å sÀ'CO•§oŸõ÷ŠåøDü/ÿB®ƒÿ‚ØøšV‡Ã^YÖᯠ™K¬gOƒqP@$ ½Gæ(°l?þ? ÿЫ ÿà¶þ&‹Â'áútüÃÿÄÑ`øDü/ÿB®ƒÿ‚Øøš,-ãÍEÓ®|=&›¢iv2kÚþòÚÊ8Ÿý|cï(ž(µ€ôx£·••9^Ÿ ýªùêÔì€>Õ?üõj,€ŽmHÁ:ébÝÓ{š9PŽúIcŸpõSžÙþDQÊ€Qy)$,Ä•8 ‡¯õ¢È/euܲ¶2Fzr õ• ö©ÿç«S²ûTÿóÕ¨²'Å÷SÿÂ3~Î3‚)5 ö¬SÍ*pBpGÔPÀOµOÿ=ZÚ§ÿž­E5=~×H‰eÕuK{ݶ«Ü̱=p Í-°ìírÌ7ï4I,7dr(dt`CÈ ÷ÜlìÄšjèwÚ§ÿž­EÚ§ÿž­EYjßn€ÍkpÒFãÎù•аçЂ)YY>úýá³k±?Ú§ÿž­NÈ5Ë…ÓîYfuaAÁ,€§ ÈNÿ¯hÿôBØ;ÇñçªÿØJßÿIÚ·‡AÞÿ–ÿ°mþ‹j‰:…P@P@P@P–ßññûãùÐdÿXßSIliÂÊÈ.²2IÇ\~GúÐ(—pÛÉ(ãkÌÍ·»dî8Çn:P®Wyœý¥ÑÚ4óf‰Ä˜ÉT)#•âëHµŽ@Ñý¦;—$~évH¿òÑÆXG?¼OSך[–8"Žt}þDd6UP€mÇb ç=@À³@r^ ÿ‘ÛÆ?îÙÿèW5@ëjÀŽào $¡ÀJʲnœ’숒G™ÿcëºf‘¡Ç¢ÚN­šu]œÚ\ý‘Ô†¦æ*yãplýêÚ«÷çmµ·£”[_›]u²Øˆ%dßu•ìý-£ô]ÙbÂYt‰Í†£ªÜ_ kH§±¾#—œù;¹hˆûÀ6ÑŽâ2¥unM]ߥ­¯ÿk}oózóvüzyo½´¶ú´Û7:߇¯ï¢Ö¼Ãk26ª,g.]šV¿e}üõ[ë}‚Wå\Û§­¿O-?Ï©³âKk™ïaþÈ·»MD'ü}Ç0†Ó=$Èa'ñav9çäÜ¢7æÓNÿðßðݯЧn]~_ðý?GcvÜL°F.]$˜(ñ¡EfîB’HÙ?Z§kè%~¤”€ã>%­ðïý…­ô|T˜Äñë7Õ­tTÀ(/.Cz®’ÍH_-哌È ,O5̆srñ.ò JË“¶W­úÒ —FÞ2éq3’ÉEÞLQãf olõé<6æ9!Ú® Ë9|;Û™HÀ'd/8ïï@)€PG‹ÿäZ¾ÿ®ÔR{¹o÷fÿ®gùŠS gP—û+Åí©^ÙÝÏm5’ÁÖÖ¯pa`ì]JÆ¥†àPç;0q•nd÷vû»|ßÏÈrWQ}¯øÛ_ÂÞ_3Õn5Y5Ûi´»]KOŽ)mÒ;T¶»(ð°]ÌÛ\AT«0+œŽ1’Rïï|½×k>ºÚܽ~cm?Áúëwý>Ÿ!E–·c¦iòC6·+\éªúŽée’@Ááß°vI±¥ÀP Çrm>URKìÞ?ûuüí{^Ý6¶„+Ù5¾¿ð<½/ó#Õc½’þ!¦_ë¶`€ie±Ôndomû†õn›0%VB:fùµî­éùo{ß[[¥¬Ý¹tó¿áóûºÞçeàø&·Ñš;ˆÞ7û]ËaÔ©ÁÈ8=ˆ ­ à‚ò_’Ú—©³@ÊÚ—üƒ®¿ë‹ÿ#@hòÓ¿ëÚ?ýR[Çxãþ<õ_û [ÿé;Vðè#{Âßñòßö ±ÿÑmQ GCP0 € ( € ( € ( € T‘aa+îÛÜv©cè'è(!¼AbF›ªrçÍêS²?·ãÿ n©ÿ€oNàÛñÿÐ7TÿÀ7¢àÛñÿÐ7TÿÀ7¢àÛñÿÐ7TÿÀ7¢àÛñÿÐ7TÿÀ7¢àÛñÿÐ7TÿÀ7¢àÛñÿÐ7TÿÀ7¢àÛñÿÐ7TÿÀ7¢àr6:ÝÆƒâ~éôfâ-I-Œ-„¬Ƙ°$)Áù×zž iÂ}'ý ÷þ §ÿãuWÿ„úOú5ïüOÿÆè¸ü'Òб¯àºþ7EÀ?á>“þ…{ÿÓÿñº.ÿ ôŸô,kßø.ŸÿÑpøO¤ÿ¡c^ÿÁtÿün‹€Â}'ý ÷þ §ÿãt\þé?èX׿ð]?ÿ¢àcøƒ[¹ñî‰ ³n`Ôí¤f–ÂeP¢d,K<ÒÑouì-ˆx.fia`…¤#É8éÔœÓ`goÇÿ@ÝSÿÞ‹€oÇÿ@ÝSÿÞ‹€oÇÿ@ÝSÿÞ‹€oÇÿ@ÝSÿÞ‹€oÇÿ@ÝSÿÞ‹€oÇÿ@ÝSÿÞ‹€oÇÿ@ÝSÿÞ‹€oÇÿ@ÝSÿÞ‹C_ÔÍþuk© %L.ëG?•&ô¢¸½K y$’)åÜ»!ˆÈÄ’;&›3û~?úêŸøô\û~?úêŸøô\û~?úêŸøô\û~?úêŸøô\û~?úêŸøô\û~?úêŸøô\û~?úêŸøô\û~?úêŸøô\®õ¥šÒh“NÔÃHŒ£6Œ‘Š.ý -Â9‘ÒÞ5ea‚QE `8ßÇž«ÿa+ý'jÞox[þ>[þÁ¶?ú-ª$èjP@P@P@P@P@P@P@P@P@P@P@P@P@P@p8ÿ=WþÂVÿúNÕ´:‚×ĺ| Å{©ÚÌ-a‚UŠÖRcM¹›×>håøKíÿè1¬à ·øÑÉäÿ }¿ý5ü¶ÿ9<€?á/·ÿ Æ±ÿ€6ßãG'ü%öÿôÖ?ðÛühäòÿ„¾ßþƒÇþÛž@ð—ÛÿÐcXÿÀoñ£“Èþûú kømþ4ryÂ_oÿAcÿm¿ÆŽO øKíÿè1¬à ·øÑÉäÿ }¿ý5ü¶ÿ9<€?á/·ÿ Æ±ÿ€6ßãG'ü%öÿôÖ?ðÛühäòÿ„¾ßþƒÇþÛž@ð—ÛÿÐcXÿÀoñ£“Èþûú kømþ4ryÂ_oÿAcÿm¿ÆŽO øKíÿè1¬à ·øÑÉäÿ }¿ý5ü¶ÿ9<€?á/·ÿ Æ±ÿ€6ßãG'ü%öÿôÖ?ðÛühäòÿ„¾ßþƒÇþÛž@ð—ÛÿÐcXÿÀoñ£“Èþûú kømþ4ryÂ_oÿAcÿm¿ÆŽO øKíÿè1¬à ·øÑÉäÿ }¿ý5ü¶ÿ9<€?á/·ÿ Æ±ÿ€6ßãG'ü%öÿôÖ?ðÛühäòÿ„¾ßþƒÇþÛž@ð—ÛÿÐcXÿÀoñ£“Èþûú kømþ4ryÂ_oÿAcÿm¿ÆŽO øKíÿè1¬à ·øÑÉäÿ }¿ý5ü¶ÿ9<€?á/·ÿ Æ±ÿ€6ßãG'ü%öÿôÖ?ðÛühäòÿ„¾ßþƒÇþÛž@ð—ÛÿÐcXÿÀoñ£“Èþûú kømþ4ryÂ_oÿAcÿm¿ÆŽO øKíÿè1¬à ·øÑÉäÿ }¿ý5ü¶ÿ9<€?á/·ÿ Æ±ÿ€6ßãG'ü%öÿôÖ?ðÛühäòÿ„¾ßþƒÇþÛž@ð—ÛÿÐcXÿÀoñ£“Èþûú kømþ4ryÂ_oÿAcÿm¿ÆŽO øKíÿè1¬à ·øÑÉäÿ }¿ý5ü¶ÿ9<€?á/·ÿ Æ±ÿ€6ßãG'ü%öÿôÖ?ðÛühäòÿ„¾ßþƒÇþÛž@ð—ÛÿÐcXÿÀoñ£“Èþûú kømþ4ryÂ_oÿAcÿm¿ÆŽO øKíÿè1¬à ·øÑÉäV¿­XÞésAo5íÅÄ÷QÎò\Cc Œ˜ùXúŽÝ©¥aÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/edit-conflict.png000066400000000000000000001731031203611042400317040ustar00rootroot00000000000000‰PNG  IHDR}cHG½»sBIT|dˆ pHYsttk$³Ö%tEXtSoftwareMacromedia Fireworks MX 2004‡v¬ÏtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ' 8prVWxœí[]ˆ$W>ݵ½™ê:U5S]7mOwÖ|Äê6g¾4½ŠÂ4AŒzÆ nÜ{iBF¨Ým?ÿ(5wÚ÷|jnzFÚØ.=ªwMj?É ÍSf^*÷?Òl‚§-Ç:òæ}øÑ 5åúzx+*Ô$²cÁùNšóÿzôˆcëŒ7?% Uö¡ªÿ‚°¦ÿ€.Z8 3ÃF[ L‚h妊ã¬|¤Z‘´/`uõ°¤aˆ¢{,ànT®¿Çbo sàqK4h€C±ëqNH>KT y ¸LþóºxÙOp»@Dß•ÆvùŠw7G­[Iø¬3ž^Ru¼QÜqê¾ÜåñƒºAQƒ*øK®H§ÇU£µuîbŽÙ²bêbˆ"•¬X; ±ÖØ ‡ˆ‰~¹ñ’GE/Ópxw:²†/É„F¹¸ýLÌrîÞµá{‰éˆ/²|¨‡^dgôÚ>Ñ%¹hc¯¶ÿ%ï.©Gè[ñ¶›öì×ÙdfI ëS; EÒ‹„ºz`MMuH8šÔW4ä!‰ÄUÿS3$Íñ,†¡Û‡Äº¶[c\ƒ ð)’Ã9ø´È_nWÛ…6í]ÌÚŠ nΆ9[àúdÙÐ]ŠKÊÍ2 ;#ѺñEtD£^ \¨^ȳX»°×w:ËU(?Ê Ò Ú*ñ#á_ñ?·¿t ö¶ö©>­º;¤7ýOÑJ© 0˜B¤Ø ›¶Þ/+6 ¤ú  ³Ð©êI-ú4ÜG"#'.£s^A,Ðfñ,äÔêÁ eq#†Ž/äø µ|Ü$/Ù!«ã˜ö€¼0ÛbLªLw¦•¹&LËeHaóžÎÊ)È‹AA’\?9Jÿ“E쯫^±q7 ž‰¼S2Nо±°ýSò@-þ ù¿66î?9Á¿Ò,Ä¢‡É|†krv.ܲcdŽ}ábÚ"²<ß›?Šæ‚¸«â€Ö¡óDzVe§Sy(„Ì(@Ùô¦žÕ¬2ÿrýé”甩 èŽ(T½¬µ‡ÎÙ_²œo®QÌÚ9[æ[ÖÅœÓì|Êò)G°°ûcü¿ñÇSwÓõ#ϼ;ÿxc£~ô;ª~ÛûFeç<á’T¶#œjÆq{§cï×ññáx ø_¸ÿ,lÃU¨ÿžé³‰F&íõ5šˆå¨©^D|¹{1z—d§¶¨–´ë5>ŽgØÒé GfÈ"¤&lö)øN‡#:ú£ÝIú›e'ш’”¿94£éà±z£A¤›±iâöÃåÍ`ÄÅR3¼{hR3à'ÍpÓð¤»ÿ(¤_L[ÅH;ŸõJv{Š9OÏ|⸾ÛábÂf…µT¶agàþ×àOóßv5X:‚t=¢ß ÿòâGÓ1P§6¦ÑØ=Ãþ#ôV:þóxÚˆ'¨Å¿·ÀøÏÂç°Yý øŸ á]´Ÿ§þ7¯ßÍ›ïÍÿ›Wß ñÿ3ì¡þ‹nȵøÇ Õ¯H3YÔªÚÿÂýo,^‰>I^ŸÇ€,{¡úgÎÿnɃµö¿Hý‹àOÕ¯­#_„{áCÁ=ÝW[k­Eì_דÛ?/ȤåìÈ®ïH,Ä3³æÞRPÖé4·„–óÕÅsâ±üºõ7á•XÔhª¡þ¬¸°Í 잯á¾[«p¬ÁZ>°U×´¿zéÜâa¦ãM™yóú§Ò"öO~´ñü§ùä*ø/lÿ ·Í+ XeZÌþšûYæ¨Á?Ó]§½˜eÝJ&Hà–…Ýb±.À´dñ‡³Ç¡[HmÿCû’Í`6¡uU£ª²N…¹ˆÌ$¢×{y9$S]- –=ÁN¡%ŸêhX×€ÒÒüNÿßxýëýŸh“.f›€%8°ç¶ï6~£¢oˆH¤à·‹[·=ÅæÈᪧk&åúU}Ê0Xè«<§8Ö¡ ä%ˆ§•!îøä…7˜æA÷þ§Ú캗nÙË·¤ø2Rmí“¶I_'p™V÷×ÝKìNc„ ÕÞ¾¨ŽdÎ ¿$¦Lãö¨—†…_/êE¡2M凮·¢e Åò.J½ïß{ôÛ¿ùíÆK<ñ­_=÷7^µR,y(b»üˆ|‹±'ß½­hùH±äïµÊXòZÆò < 7åËÓóò}âYe_ÑrbÉasKCKŽ}ËÇ ¹íl`EËFŠ%£UÆ’ý®Æ±Œ*/¹ž'·íW?gÅ>Ÿ”o V´¤XrœSÆ2}xêÈvù1‰`¯¯üê’’bÉ /–âØ|ÝÇ—§ÉÙ2–ì+RR,ù£é2–ÕØç”Ä;üß’mù_ÆŠ–‹K^ãùýàåW^ùÊÚƒ?ûÉ«Ï}îµ·þœÏI\ìó0Yå5Añ‚wnc»WT%Å’-ï;÷ü4½¯uïCß|óÊÏ}is¼Þ*—Øo}ØÏnÁC„ë]]¹Í_QËu¨bé½XÆò´õ­[d¡{b›7%âÙæ6E·Wcèm%Å’‘úji¼ä1´Œåž]uÿk\­É.)–<{,cÉql>¿l5þ|oEÿmR,ùã£2–Ç®°¼“H±d/úÖ W?øÂ/μüÄ_ü<öËÇò8ÖùØa_VÖ5æ)~÷¼¢e Å’?Š(c™¯¸÷—:'¹$q,¯¯Ÿ–÷ÒäØþ»‚ð/´ûúx[õ<HmkBFúÞÊþ)¤3¡ŒmkTSxœí][sÛF–ÆdÆq$˲leöEU[[ûîEQ”SCR¶œ67²”Ñ-ñ°øß÷œÓ[£EJ$[ ¢tã;§¿séxø¦q;iuwÆmÚýåh<©¹C«nÛÚô´½ãOÔé{V¼;húÛ¨M÷úþݬiw·µ×µ:þL»½¼Fc.åÓÏ´ÓnßNø³³Ý¿š(kÊ@ñ”JG)ç°5VΦG‡P³5çP£)?AíXùŽ8›v›Çhº± Ý¢7ž#gÚhPK‡‡Ð°Û6z»tP¯Eu½}*mÚÙxCÅοÀn‹>wûtP«AŸZ]*ŽØÎ^g<©ÛÓFŸUöÙÕû=ÖÈ!»+¶±—GØ+uÚ<ÖÆ /Ó<6¨hÁN ÓBÈü§ eKÙ†½×ðù'Ø:ƒÒU® f¸LÌ´;b¦ÝfÏ8f{Ê%àò»ò ꮕQ.6&Ãf”ƒ*ÅÆóب9ØxÃÆÐK££™ —Áã2xÃàq¦½Î¯ÐÊ`Úëñ²s ¨Y.ìàÅ|ÅÜQ.@¹.FP-Pºø‘q0ᄦnå¡é@Sд<4Ms;: BÛ–@Øë4XM•qH¿ã6h<Žú‚Ú0}ÐÅ-¥ [7°o8sÔJ±Ô|s±ãÖðæ·nÙq›…ÑÇhö_’ºµ¡öü¾Æm ;Põ~°y‘ÂæŽú³`K¹z„6R#lníÇVýYñØ (½Iè|"ÝHjP¬&bJúe má(½”¢Ô¤±6S˜¯M'}á8mJqâìT£•óuž&Y !‹!dÝi¼íCé*·Ê—Giñµ¤/j1˜,“Ë`rLrO³è€ëƒÁq¬ÎXø€[ qºãv½D§1×÷Ì9-›Ê Q4*ƒFeШ 5͇fã¬{þÞ H ï8@Å,Š4†m2€¨~&@Ž™Åv1ˆ†wôŒt†Î2B&CÈdŠ5ñámP¸;Ê`ÄÍ}P¯?AÉnXà—¤t æ©Õ9”ú /x¡,>Ï ¦^/æ&sîŒR0Ãt×BJY2,A9ZiTóL£>ç€Õ"–h-ÐgؾP.ò3Xœ×4£p4£©fyb³T1&åç¥æAŠ”Ípx¢ÁІs+×/0NÇxT9ÓbÐiº û§2è¼¼Šw=:"Äx67 „Ù=(Yºp Î«]¨þçQ­¾Ø1ºØpñ~Æè·£w` ®¥èÔ¼Ž¼hOM࣯ÊïQµ‘"ýg!^Ÿ(Öñ@cÜ0mhÓÙMd´|?_ÀKÓ=)bŸÕ¼ò*eò\©Ë13†faÛ9ÿ l™SΤå‘ì἞=$ é› ƒô' r’|’Åãˆðõoɹ%Á"Ëü’`£[â§É„YxÉfÌŒ'HKã;â†OF€)Ë¿P€»€«>1ÌD£‘Ù<²œi¦$:O/?ÆC÷ØÒt ÃbØi£ÂÔ*žîKƒ×² _ȖΛ%C3 æÌXȺý J ¢eè2´l†–ÍвÙPfˆ_Êhcºû%p|z+®òیԈÃP¬3ÉE‹¡¨ÞE“¡ÈTL #Î "ŽzŽO€[ÅR$uŽ$W<›kžmfÎÌ`úòÌS¶RöizØS~+3Š ie1ïY®–4˜ÑPÎd`h @vã–†Ùžlõ ²E p¢¥¹:Ibø”tK9ä[#岈–X³FER2rWhAÞ£š‚o™l÷1»}rÃ?qwü¹?—Òùv²¤žjb¸3ë’îÒÈ„ŒxѰؽWìŠCd×Û!DÙŠ&F)ž4a¥ç)‘'3‡Ë}ozg¿È߯ñLþ¶3*çÓž/v>¹`ºO]Ì:¢Ã4K\ó-ëX²D­As”ÌšpçxGΟ“!àÀ` )tÊüjœ>ÜK3,Ýa‚ìÁ6™5R>\ƒöÁÄ’‚®™¾Šaˆ~5.dèÑ<Ëg5òm„+ C @Šþ~NËs¨:ÕÓ…(dÈ=iñ̰ຠV‡ãê0`=¾\ËãÀzŽèÕàF7ØH/<ê†ÞérËÝí`/ÔÈDñ, ÿ–¿1,¿È„èç&_3 erjŠùê]h¯Ë©™F 5_JÉÏ9Ðïh¼xzƒx AQ±u ÂÜ_èu›gÆ4EIg d"”;¥6¤Kgü[¬“'ltcJ­2¬… Å1.xêŽ4}DáÑâN#ÈYÅ–{\†,î¤e³Y kËÁXÆeõ9·úInõÝ qÆîÉUT—!È|Ö¸ìâ$bûèrûs¡|Œ?®ï>W|œØÁ‡ dj–É0´“º% ´¥z¨Ê dé£yÖKZ˜\!¯s5¤Ò ’^›ßâ =UâKpò¹!´ÂT«*ÅJ-n{ˆoÓX ÌÙ‰·Ð’ ‰7$X‹mlƒY(™õÁN€a/pŒºG² ¦ÁÜb ¼ Ñ™p=í+ã{æ> AÊšrïˆcjÈ0õ¹9¯óسÎÃu›ÅQd´ƒ<[#2âAÞMÈeƒùšÿ]ò”òÕÓšw»„EaQ,2-1“Þ“T=q‹ïo±ý!”d­kÜXט†’‚î3Ç©Ü`Oxæ[—¤….4÷XH7“£} ]j'ø™Rë’å¶geÙ“³¸\ÉŸÌXOvP“¡¾¡`'pâ7B3ó‰fÃ1ó4J­±á´çM›hÅ™¡CiØågk=ëY¬ýÀ¿ÙOû7³ {ã-ï)›)‘'9 -o rœš4Vš‰T‰+uy´Qñ`R¤KÝ‘§ŸÈìtÃ|GÚÊÌ‚ô ‡ÔPšsLØÖÊ@—§FÒါÉÂÆb))pûÌc,ƒÓz„(Ý9Ýä#&uw mIô¤îN kIÓ¬­²cØMó6³©¾Ly:aË1‹*¶”M’Š-Ø/Jµ¥¹¤”Í7xŽÈàAI\ÂÅw:\8‰d&I+–Hv’ydô÷§­vóvÒŠ?ë“Xz”ÇQòIGô€Ï$¨“Ì.ޤŏ¡Åphí’·ºM:¤Ûeuû¬8ÅbÚŠGq¬Cü_ŒØ„.ÅkN2kæë’κÅ^Ø£WÐ/|Åkãuì} W!{|FMŸ§ü<¼®¢µ÷€?Úa?€í½¾Š¥Å^±¢ÒÏ4V¥Uüý+X÷ëÔ»_G›óAþ´âË|¾.kL¹ÝºQn]Ž^Z•â5óÉÍ`r3*¹•‘Û&—[ñàn1oòQÞf(#Ù1'Ž™O¢.“¨[I´ŒD×шsèËÄã?6OÔäÔÍ'9“Iά$7ÏXd¸&ÿç2ÀK‹òcN s'vÕ´J¤eDùV.½Ý+Z¬ìó°ÿ$cÿ|Ⲙ¸¬JZóH«CN¤{ÝçÙ`ÿIÆþù¤UcÒªUÒšGZ-BdâH%Ú’±>i9LZN%­2ÒzÎ¥µËŸKýø-îœ<çò‘q2óˆùdYg²¬W²,#˧\– šL½ §Xýð©°ËpÔ‰{ç““ÇääUr*#§µ0¸Ã±Â^¿#äQG5óÉlÈd6¬d6U{Gë5G)«í?ÉØ?Ÿ´FLZ£JZóÛhž+ôñ×Cï0^w’S7Ÿä|&9?ѱPFÊ@i’(>Ñ4\°”#P±þdFý|Ôx¦˦C´ÕÔŸŒÄ'3ñ©WN÷(]©i¾šÎÐ&kô‘kZ¢‹VâÙò~ö?VõZw¢Z½îÖ’µ¦Õlñ\;ïÔZΩšØ#Q2¯û«Rˆµ˜B ;€ ©)ëM½fÚš›¼]#ÔñÁÐñ¬d¥ÖÚž>ÒléŒüáÀ¦E¹š.¬J/¹8viõMžÒR²=Z$ gÍ£ºjxɾŕ\ÔkÚ Kɵ‘é›V†’ÛîÈSµ,%O_X{ThŒ>èî¯J)Ö¹RÄ^®u3nÙ¶í,$ÕQE>‹´mf¨¤Hâ‰5? IÖp†ù«Á¿‚Šð »¿jEèÒ£ui«-íkVÞŸ:'½ cSì:«‚æEš.% ÅnN}³àø?³Û2ä¾Yµ›Ð£7Þ n‚t×:èEÖ6uüÍÁk` ´ŒlÛijˆFðp„¿R5œ¢–èAwUjð,Tƒßù:|!íçÙ¶(­øz¼2ÅåQ‡u7Çï‡ 8zq&ÏŒÃ8 Å ÑCíûª©—ñ]Ð"×Ê1hþãl{¤×Uתg™X©«x‡ë¬ ¤ 梜Älƒ-º/é^3ØE®³êH‡hn¸ß“sËž`˜a²§CjMsœø‘*Ù}5²*€_ Ǡ彎:1s³îèCu²².ž™ ó‚ZDòw·Õ¼ì¶bóš#ü€5cLÞ€¿·ô†Ó`^lΨNw;½ÛIsgÿ¼úÿ…Xþ7e ´Èw)\rR8†3Δ/ {qÆg0«$ØKØ·«øô¨7šÙ8þˆ=“7mî¼%Sõh+Ö§i¬å‰k@ðÈ–^ùw£°+ýƒ›ñQâÜg‰séõ?J“Ÿó?ÊD©Q­­hð«*ºòl{°·pß¾Ï}5¨Qé×¢#kðWƒü4M´ºÝ òÝ Þâß5qäzìÈwôÀݵò‰û ö(qôóØÑÁ²©KN‡çÔK8g® ^Y@éBIk 2úôœ¾åï#I9ø^£s:ï*<ÃHœ±AoA»ýÈ:^l!zƒZ“¿VÅ¥µ)N'iˆXEg…=Œow¾½9£„à(%KаèÈCZzÍ¿dL1Bp–&œÅ¼JŒ¦ˆÂøYO•ÿü}®9É;Ú¤§úÿàŽ¿aêü58_ýŠ/`¹O£0ÿ ~ìW¼Â3ºÂ˲þÇÎÎìÑ3¶Cº Ù™±ž§Æ4{ó>h pŠKcnÖ½§5¢GºüHb üåüÜ'Ð[Ì;^¥¡AR»¦ñÓ#ͻΟ¯‚'ù‘—™+ž¹ž)Žk:)º;¯…ì|Cr@ͯºb诗¡íŠ¡+†~„ ÝÔø®CW ý3´ÈµCW ýúû4Cóãi&Ha_oXqvÅÙ_/gëgWœýˆ8{sö¯4~…¶?‚W]qô×ËÑfÅÑG?"Ž21Ž®ºb诘¡Š¡+†~D ¬íÀ×úB+v®Øù+fg‘+*v®Øyõì,ѧ¯¼‹zô×`g­bçÀÎÕÊ»Š;¯rå]ÅÐCW+ï*†®ºC¯bå]ÅÐCW+ï*†®:¡ÖÊ»Š³+ήVÞUœ]qvg¯vå]ÅÑGW+ï*Ž®8ºHæc+ï*†®ºZyW1tÅÐEÖv,{å]ÅÎ;W+ï*v®Øù\ù’´0†ªÀÎ||-ƒm%ú´$Žª´oYÚç ò^œö™¥µïoJíκ·Éu/Îþ¢'ú×>œuö^ÛmD-‚ÆÅzø{£† 1ÙÞ¨8/ôx}Qñ>*_´òEËû¢š0¶¿_´ Cw¡Ý1ÝÕrúyÔ¢2üËp´èT]qtÅÑå|Á‹Ž[teö­ug±(n#ñTóòã·ìö—ÇÕg`Ÿ¸º¿&pµ[øÍœØ·@kbwŸâ>dì»Ep–DoWL÷ֲꖣwò¶—§s:é“z¦Á¶A¾€¿êt®ˆ%·M›meÅU$EíS¿Þû™‚n€¦½oèº[±2Ýû6¾^wI:—l³œ¾ A7,;jK|Gäª!ÈSô'SËņðm|]Зÿ‚–p>Ý%“鸟K’+z)ÀçëÔý‡wó„ZÞ¿%±ÿZ½ ½.®oÊ?EU^ãï’dS®Oådg€ý`fUê -1Ö±~WAÙHvuòW‡ w' ¼‚£Óýý@÷tÈŸ‡c>í—zÂ=9kUº²þyÀ2WKÕYËeǬ ’Á1(uæWhÐOK2fõ‚cvú‚’º$ßöçÃðù£2È”xòœO\o’gýF´CÒ¬ë‚-=_¼•5¨Gä?Ã_ñúZÁ»eFžywUüî³[ʺûüVÄ»_?y÷/3îþ£|uV¼‘…€x¦¬›fµøBŠD‘Öž%ÐH·#FËrD û*5yïD£&Ï“õï¹üÖ6¥XÌni=„؆ö ØùÔßPÔ»gË¥ÍýÉ[¿ Kk!K›KW,]±tÅÒž¥_)ûôe£ÿ„ˆó’7ᨯËô©‹ôä.±Õ0Œ­ô;ÄVë ûºçÙqŽÚô9ó%eÇËÇopÆërôDž£^]·CèÜÒ=.7‚K·|í…ÚeÜI»Èvöʘ"ñ«é^Ýëôo'§íü‚Ü÷¬˜FûtËb{q#}Mœí\ä57"^_èuŸ,¹Ð«®J»×£=PËô÷li9lYÛIË{Ÿ9ì!i¸Ij2×.Í_×…6Ž71ÇMó…´^n$ŒŽ'™s…²\òS@ïwšçC,¿„v:=Ï»›ËD†&=„ÌŸÀUñ£˜”[¤§l=›ù^V”#o»œ¤|Zg ‚$wŒg|ضb3\*Å8(¢1Î}¸4ú/y6x»Æù¶áÊ¿ã<Ó’$1»夢“_t¿,Œ×‚Ïpô!!µ¬5T²–ï‚»þ¨p©ìAonÈ#ÓœäVˆÇ2ý×Ùý¸K¦K 3]ÆdòÿÆûDÁ—”'Aß`Œõ¼ßÃÕ^“%ÊþµW"õ åWßæôyEÒÎn¿œ”ëüIœ¶ÃøD§‘‡O) àìŸ(.±Éw@9"olH¶È ûro#/ÿ›ßq\gÒð7Ð'1ê–ù/(]å,á ~ƒš©I6À'Î÷–¢ ߇¶ïº,üyvQNxÊW¬]ÒzÝóð‰ÊäÞåh€Øj9™{d»1ºÃ5f,Öc«ÌÓ±^mÅž—õäÞ¥{¿Ùí—“®ÔÓé¿Å×lÕÉ2×RþV°Æï¡Iâ sNkûYÍV¸Zp™Œ8«w‰L̇™$Xí&qßh–銞´]„gw}ëZëþ˜sþuÞs!B¾çˆ²À8_ŒÿmòF·¢š%{âYí'½W—ŽúíGÃm¶ŽŽHÛTZé; ,GzhÝöx̆-zF%X;Œžûˆü´çSAÚ²þÞð2œKZÑ,ÒS…=Q–\!¼Ñ`Ÿúr±´\Óò׃/ûy±äªîÅ¿aÆN3û‰1M8cÖcèÇ•]Í.®¨žc«ªgƾžgÆAûŠ?5!gáཌGÄ hã—5ÃY1ñ"˜¸ü³»÷ÏÄé·ÔT\\qñ×ÇÅÅŸ`Ÿ¡üžæû¿@ÿqÕ {‚ò l›ü®qÍó.gè8`Æ!¸Ì˜)¯åø³“e¤þŒ”OÏ=ù+›fÅ ÊVã_öË:Íq-'kRFFkĈ—ÌF-y\ºååÊdHûžL^³.}B[\n~+¿Ë–®éZެ~ µ3c…eY{€í˜o¡uiM$­ï¢õOK•OºÝûH äP£yšÍ×à_›|L‹ò”÷(‘éaD2íl÷o'öxâû*ýL[ìS~¦­N(¹ï(ƒÊÞ5‰†,ç§b…“Ìšnóx0Vú1»-*z‡ã‰Ÿúã‰6mu›tH·ËêöYqŠÅ´Ú¸°†Ÿ€ieÃænçÍíä]ŽqÔé>/û½_ázpOý¸‹þAs<©ùCÓ§|dÿ´µ˜ MwO;·“Öaoa§ÝÅ¢Ó¦;élÈí#ìz«àb>ÿ@hÓíN›=*¶wXѤ¢WÁ‘M¬Ûko»ê0Øoºžl;#ÃWuL+ô·A…ñçí`ý–XgÁüèÛ%cŒKÉ´ÀZ>À³Ñx#kÀò#`Ó­¨1ÖVH’©†¦{ÝæídïøŸwüžŠ|2l(ß³’£¦â/œÑC´×¤Æöšoƒâø´Mì5ßbCÇ="ºãÞ6)ìÿpÂdLôV0¾mkBSxœ]ŽÍ‚0„{ó5|ÀðãQÊ_ÃV ÔÞÀØ„«&MÌfßÝЃ{ù&;;›‘uj°hø„>uÀ5zÔ/¸ŠLcFT ¥ÑjòV£c{™ìAZÚ”^‡ ƒpè ¦u9ZûÒ€å ن؛=Ø“m™O²M6Äs—äµ[ä YìNÅ\fÁ_µsgûzUN wRímÂÄ#%ì+%² c½ŸVÆãðÕC°‹~:LB¢L Ò:‘\õ:¡m!mkBTúÎÊþJÊxœíœAOAGùbÄï'=èDHôê8â™D<舊©p „b¢k3q™ÎîÌn—ÙÙþÞK^ÒvÛºóìZƒÛ,ë!««o²ÃoƒNÍ÷ºþÚÐ_úkCmè¯ ýµ¡¿6ô׆þÚÐ_úkCmè¯ ýµ¡¿6ô׆þÚô½ÿ½Ќ¾÷Ï¡sRë_<žËŽmóxñyeÛ˶¹ÞG‘ÔúçØMÊnûžúeRí_vß××>öËÎðyìïƒþÿé{ÿó¿Mès~NRëïúlçj\õ9±êüïû»¡ø<RëŸ*Ç~ý§QiŸCmè¯ ýµ¡¿6ô׆þÚÐ_úkCmè¯ ýµ¡¿6ô׆þÚÐ_úkCmè¯ ýµ¡¿6ô׆þÚÐ_ú?!×µùg5¥Ïýc\§1K¿º×%vAŸûÇ¢þe÷«Î!×±û®a,»NÒÜN¥¿ïZÎÐu‡|¿G¹›ûMhû:ö:ת†|çEJýCçúxÓYµù]!¾þuŽïª}ýYQê_5+ßõáuÞ¯ŠºÇÝ÷«zœþn|s¬þ¡kj²ó|þ¯{.¯zÜ·-tn!„œ»}ç¡:ŸSB>'¹Þ?ÅþöÜëÌæ±æÖô®5¤Úf'ä”Jÿy8¾úH*ý¡è¯ ýµ¡¿6ô׆þÚÐ_úkCmè¯ ýµ¡¿6ô׆þÚÐ_ú·ÇÑñ0ªÃÓ£™íº½±µÄž¿íÉð2ª»{ÙókÙææûlc#w«Ôõâíõ­lùÙëû×wÝÝØÆZbÏʳQT_¾z›íî4:Wå¯Ë_ßuwck‰=Ûadó5ÏBjýg]KìùÛž_EÕÌlrw7å“ÅEçãÆTû—íoÕzÌZbÏßöüâWTÍÌF£ñóYímÆTû»öÕ·³–Øó·½¼GÕÌìääbÊâÌ\ÛSí_wŵĞ¿íèê&ªffƒÁO§ÅÙÙÛRíºÿ®µÄž¿íxW3³½ý¥gX|<Õþ¾ýviÖ{þ¶×ד¨š™}ú|è´8C{[ªýC÷ßµ–Øó·½¹‰«™ÙÎǃ)‹³smOµÝu×{þ]kföagÿÅ™ÙÛŒ©öwí«o=©ô¿½ýUßÌÊÚ÷­¿o=f-±ço;™ü‰ªofóÔ?d-±çßµô§ÿ—¯ß½ÿ>r™¿.µþ³®¥ëÑß|:Ê––W²Õµwµ}º´’ ŽO;ïnlc-]ÿþ?ÿ,¨ëöö6"ŠÚõù;5ÿ+DDDDDDDDDDDDDDDDDDDDDDDDDDDDLÇ¿E°ÙÏ[ûàýmkBTúÎÊþTÉxœíÛ[ªÛ0Ðì9¥ÿ]ÚmoKÀ=fôpìæôZ¶4ž±ä@ñ×À ÇßvgÇ{…üÌÎß»þÝ÷—uv¼»ç{>c¥gíµ/Käúç±Vÿèü½ëÇ"98Æ»jüHü¯cEç/õÏiÕ£uÎHü­þZL‘ø²s·j”=wvüˆ™üdâk=Ã3²ûÿkü3{ÐìóÉïÙù©ßÕ×íïs¯®ÿH ÙüdòÙ«fŸ‡ìxW®dýDbÈÈä'º¾k{X©¿tÎÈ=DÆ­íQ£ûéúV_+_µüôö×U±—þîÅ7;?ù>e¿+ç¸ô]ÓŠ1[ß¶ÝÉÝãÿV‹ö[ÖÖ9+ꕼ¯Ž#ó äŠyZýµc3±­úžxÅ·¯­ïu3ßÈΌ߻§õ]Çј£ÇÏ®$¿­ÜöÎÿØ¿ãÝsÕ;aõ=”öÆÌÑúŒ^‰-›ï¹ì=¶ú²ë•ëôú™µïyl×û?»ž³ûÛ*W¨dÿÏÌÝ×Væ8ô·ÑYvþþkå¿ôû/ZÃÑ÷ÖY®ü·¾ß¹ÚǶ?iš¦iš¦U[ëÿ?Žý»çwÎÈoéï3æöGþýŽïÞ^ïïì|FŸ·Ú9½½ ´o”æn]ß§so}EãËäjeýGî»w}+Ï#õÏì ‘×νÿÌx‘z쨩6#uŠÖ,RË‘±zÏo6¿³ïĻ׿—¿Èø»×ÿÎü¶bÍñê¿bìÖñUïÿHýG×ÿl>VÕ¿–«ûÓõoÍÕ§V»×}¥ô>/¹¾7ÖL.JcFÞ‹­<ÌÖ©õl­Øÿgž¥»·O¿ÿOmžMÓ´íÏF¨}r¢~°9X¬“G?c µmkBTúÎÊþWºxœí‘Û8 FSHI!)$¤’FRHn›wóî HÉY¯Ûx3žÕꇤ¢úùs†a†a†a†axI¾ÿþÛïÇÿ»'UŽ{—áÙùðáÃo¿¯_¿þª÷Ú¾gýW9ª Ãû¼Ïâöð–þ¹»¶ŽÕo'®GW {>~üØÖÕJþîÿlúôé×ßoß¾ýüòåËú¢öµ¯ò)*/Îåç‘Ný\®ÚϱÚoù“v[iZ_Õ±aÏJÎþ/:ùþüù×6õOÿ-¹” 92b?çTþÈ™×þlôkÎ%?·Úåöìä_2òø¯èäÏ1äBµ ‘sµ÷YäÇ5à>¾:†>Êc=1ìÙÉÿ¬þOùwï èyä^«- ×Ú¶,ýÌXÉßzèû•žuÃÐsMù#×’U]ë>H_÷˜ÀyøY’Çvº!Û‰õŒå_mÄi ÿRuâþs´]ÍXœm§_gû)YYÞ)úmæ]×y,—²¬mÚ z†1Éêša†a†axEÇß“G°×§ÿóo/ïYòÝú\êkº6õ®x„ËèíjÏægHð–ö¾»–÷óüÏØñ|†yž÷u¾Ä.½•üÿ†þó\þô³aÏæŽM&ýwéÛÃäké#Ïú$?Î]ùMço¤Œ\ýȾ,Û/íßÚ¥—ò·âQÛ@Êß~6s?)}‰Î,¹ l¾ìçœô ØgX #ìvçQç´“ög·Ú ÷Bž™òîìÙ™^Êßuô¨ã®ÿuh½à¾m?Ž}{]ŒÐ.~È}Ðv_÷ÿJ;ëxçoÌgJöëôY]’Þ³ë@¶é.ì«)™áoqC–ü¿“?}ß>@ÇûXŸÀÎߘò'-üäÓÉÿ(½W‘?Ïöú›²±¼‹ôÅÛçúÞéô‰Û ºÅºvþÆ”¿ÏëäOœÊ™ôRþœ×ùÃþvì[K?[A}¥?-ýwöíåµÔmÑÕ‘ý}¿g\=ö€c¿¶}ñ³M¾‹ ½ÃüÃgggÓêüàÖ èÇ„çÜÀô-B^ëók_g?Ìò ¯F?œ£³« ÿ•Ý×v0||ØŽÐØ=ǧH¿PÆîÛgçsì·ã/ÇhØ‘ñI ÇtýÜ~×{‘òçún^§}¶ïZæøºyDžë—óÏì·ó5èˆéÿçXÉ¥ÿWvðô¥§O)í"û±c0ÎËvYà“ØÅ ÿçZòï|~à¹_%/Ï,Îôp\€ËɹyΰçZò/ÐÉé;/x†ÖáÎsõü_é·9?ÿ«PÌܯ5Ý»\í[½ãy|ÞÙÃçõÄ8ÔÏÝøŸgäû¿ËʱL{ä? Ã0 Ã0 ç_àk3¾Àç†>´’ãøŸÛÜÆøzä«Éø_ƒüÇøü\Sþã |<®)ÿb|ÅÊç7¾Àa†a†axn.µ•të†a?lÄ÷^Cã•ßvk­¬Ø½#®àýÜ~eûî)ÿ´3<3^×Û¶¹Âkð¬dlùcÁ&·jK+›œåo"eòú<.ãÊž`›Áê^(3zÌòÏöèu ŸÁ¦lÛ+6»úßv´î›<™†×ï‡ ¾k7]ÿ/lÓc[`ýOÚöùÐn}½×çòš„«ï ‘GÊß뎱š×Äzt¸^vßä2)?;WmÆrõ5üoäcö³ŸþIzì?ú¾˜‘Oî÷zx÷Œ{¹&ØÇ!û…e¹z.þ©ü»ýüÓÔÅ"ѯÑí¤ô ¹Ý1üÖóäÁñGg×ÿí{+Ò·’×lûw<ý=}GݽìÚFƨ^ú)õ¶ìzIpäG¿•ü ¯ãKì¬ÖœÎ{Í{ÙÉßeÈï ûšG•‘12éÇÛ­¯Ïq¯§™iumf—“>¿.¿ÕþÝ}¬®Íëòœ®~žaì? Ã0 Ã0 °š[u´¿›+ð7øSvq¬ÃïìæÖ­öyÎ…ç ½?Þ‚‘}¶¡åœXùçwíŶ‘ÚvÌ?ßå°ß©ð÷DðÿùZÛ“ð-q/–?ß³ñ=¿ê<ËÌ~¶Œ›‡#ýßÙæ­ÿÙæ»>¶ÓÙFkÿŒÛ"qþøz°r­¿Qèo 9ÆÄr¦,øˆî­§nÍY[;í§oæ:)@¸-`×§-Ø7‹ü({α߯›SÒí§Ýú»@¯ÂµåßõŸKäï9èîüÖ ¿É¸“>:ŸnÁ3éç _[ÿ_*ëmt°cmìÃC>äq¤ÿSþ´L“øÇ<²?ç=÷çÝ<ò¼6Ç;ùãÇ«ôsü÷èþÜa†a†a†{àxËŒ™\ÅÞŠÝûêpxç¶?0׋¼#ÿ5žßàøzæÇÑ™ƒc¿]¦³²¡x^úêl‡ò¼ •ÐÇ(×fù±ÿ:~Ÿ¦ËÓÙ£^l iÅnç59¯³©žWÇÏ~·\;Û?vþnŽ—í»öç’6eÌr¥ßÑý¿óUbS~vù§þ£^¹÷U O7O(é|;+ùSÏéGôü4|?Øfí´ÿÐ÷¶*?ÇrŽ—÷W~Ï2ÏoÅNþ–ÙŸÊ¥ÿSþ9ÿ×~dŽa«ç˜çòîÖ‡ÜÉßmH‹6öìmÀXÿ[ÿÝJþ…ý~Îs.ãÚyœÑÿmƒ4Ù¶OÜíï|Bÿ­düžò÷ø/çøÙ˜þÁb5þÛÉ¿ÈyþÝøïUä? Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0¼.ÄP—~þ*ÖÎ1@G\⟿äÜKÊðÞßrKXÿ˜µs2â±(ߥò纎Jëì·º8”ŽŒ'>â’X@â–¼ÎQ¬ûQýb£àÚqôŽòwx‰ ìb÷)“¿ëî¸_ÊK|•‘vÎ ÞÜ1çŽÕM¼6keŸe-2Ç›ïú5ùŸ9—ó?K^ŽEº¤~‰9òϱQï±®Y®×F¹8–ëN?å~;:=J<—ïÛßþ¡-ìtñºÄ’yNAÞÇég»þCþŽ \áûNýâXÊKê—s)'é^Kÿg\~âç2}›6í}Ô³¿·áï)¹Ün]O»ûrÞ^Ì÷³j‡~†"·î{pæ¹âù29w€6”Õ/Ð.Ÿz-ví:û+ýÇÿ£ó²M{ÞW—ýûJY¹¯Z÷­Êêµ¢`%·Œ íÒ¤l9…¼ç•íž¶™Õ¯Ï#OÏUz+èÁUÿ?;îýùsŽçÜdš~vñàN·›‡Dç7*.Yç«+v:Óye;ôø8Ë}¦~éÿÝ|…·²+ÑޅNþ9£àÝÀ}•{BÆž#t¯é˜×xîãÕ­sXÉ¿k¯ŒS¬Ví›ü/Õç»uJ=oê Gý¿ð<‹Õ»L'ÿ£²óL¬ò:äD]²6Üj¬f™ògL˜ëz/¯+ؽ[{Ž™ßºrðÝCôM®Y×q¦~áè[»{y‹¼£®òÍy cÈzA¿§Þô»ô‘Þ;Óîwï„«±€Ç9—¬zÉszW¿”ûH®œóìóV‡ax3ÿ ‚ú à¿%£”mkBTúÎÊþx¹xœíœYŠ1E½ÿ=ôG¶òŸßÞEYˆƒ›„¢7IOCÕ½v OÃ)©d©éçÇÇ·ççççWz}þýëÏéuœÜúdžþ±¡lèúdžþ±¡lèúÇæNþÇWZ™×ªü2h•wµÿÑö²î_ácf«Û'ê¿|î[yÕçÊkê{£uõÜ_æk•/#ÿ:ÆÕÚ'â_‹×:/µÏžç[*“UþÑ2\±}¢þµgÌSöÕã›Õ¿2ýKyxËî½fäþ‘ñ?ãÝ»ÛYý?ÛËiþ­ñ­ç×û}µOÿßÝ>£ó¿èü§¾¦OÞÒu#ã¿çý!•AŠ©_O9­²Ýé÷?‰CÿØÐ?6ô ýcCÿØÐ?6ô ýcÓãtÿd”]ùÖeŽKk'Ò³þ[²«~#k£3ó¿³ïþ•¶î^ÇÑ®±öY#ù·ÎIû1ž±Í³äyFv³rÿOò+]£åéÙKk‹:ä_§½¯[Ÿµ<=}W´ò{÷Oñ7ÊÝü[ôŒéw&sþwEÿžñ:›«ŽÿozæOõ1ëýï?:Ç‹Æ/¯ëá$÷/N[ÿ9©mfpZýNòïùÝEr9É?YýcCÿØÐ?6ô ýcCÿØÌðŸõ;~åZ€gÍ2#þnêµÍlÿ‘ý¶žx3‰îöÄ?…wY2ý[kå­õmý¾Ó³ö¯Å÷”_Û›’¾kûR;DöO2êתëJÿu¬û[í½'‚åÏún=Öø2»~­¸;üGî—ÞÇZéEê«Z|«¯k±Z×ͬ_+ÎÕü÷–Áà þ#ea†ÿVù"ÏoÏøoňàk­ù€ö¹gü·ÊØË,ÿïØÚüÅ;ÿ)¿{bxâGÊl•QËSºFkŸ™õ“bpýúdžþ±¡l4ÿÏ×ü‚éÖÉôÿï?~2Ý0Ñ?v¢ìDÿØ)â_ÚŸx¥ÝõÈJe}"u»j;Dý—õm}Îhÿq¢þ3Û¡çþÑ<{Ç)_m\¨Iß3Æ•ÿžRýêzXÏ–ÕF‘üµö¯óžáßsÌjßú¿ç>=~£ç¬öl=Ùþ=}XkƒÑ>?s~bÅŠ>ÿÑü<ùkuo}žÝÿ£í¸»ÿÄÎôŸÕÿ¥ó»üGÇÿŒq|Ö3àÛ£õyÿ¯òïÛ­9ˆV׌q{¶ÿ:ŸÈÜN;?ZO)é;×°ýc'úÇNôø÷؉ÿ… ýcCÿØÐ?6ô ýcÓóÿßëT¢«¯!û‰øo9+YçËcô£ý¿Dúûr.£ï«ÿ“³™=þ·à¸pQÿÖØî’3XýûîÏ‚¿ÿ±¡lèúdžþ±¡lèúdžþ±¡lèúdžþ±¡lèúdžþ±¡lèúdžþ±¡lèúdžþ±¡lèúdžþ±¡lèúdžþ±¡lèúdžþ±¡lèúdžþ¡ù %àŒ¦Ð¸ÏmkBTúÎÊþŽ3xœíœÏOA€ùÿžôˆ‰^MôHð G{âAH´•h°@m!€Ð6ºîb°Ùyó«[3ß—|ÙþØyóvßÌl2ü×lllh]7Ö5/ ±òNuý‹qW}Ÿ¥ýå\ÿ”×®bëÆÁâ¼³}fбøÚÔÖt¶M¹é>·åïz¯]ò÷%uýM¹Û>“´ÑÝo[¦˜¦þ¤÷Ý–‹4×öë^ÿº>lµ³Í×÷®9ÖµwŸ1æ¾Ë˜Ú›~{Ù~£IÛ»ä®{†HÚÛH½þÇh÷¬ú^Æê1àGèüŽÑ?€Mí‡h"éþ5õ^÷k®®ûálçûä!Ù?—š˜ûmcçaÛj:Ç¥Ïý¬’×’lñ}÷_Jú–î”ìßô+¦ñ.‰ZÿÅ6¦x©æ‰­þ!ãÓ§Ý÷.ãÜwn]<—½»)ê/۱ƾëý]EýMïCž}º˜¾óÝ·oÓZë“[Sõwɱ®é÷¾Ï9[Òú…ŽwSÛgPH¶úKò‰Yßß?¾Ä~þ™ú®¥¾ýÅ®ÿÃ\$ó#t˜®Ý–GÈúo‹o»~—g³¤­äÚLãÈ÷Ù§Ú?<†Ä€¼{†Ã£QVžž~ÇGY¹·ÿ©xùj»ØÚz‹¥ÃñeV>~ò¼˜NgM/»kè¼'9YÕ¿âúz‚¥ã³«¬TõϱôìügV®KýU¦ãª¼¸¸ÎJUÿããQ1¨Œo_/9Ð;8vq¼¤Š_ñhž‹î¨rÓ3ßË«IVRÿmú÷ǪUõï÷OŠ~ï´èõNþ¾^´§·§³¯Ww®­þ*71ó½¹™e¥ª§s4÷°èty×Dz¶úßå¦3bŽ“É,+©?õ¯ø¸÷Õâ7±{õçß÷QÕ¹îè¦_¾Ó鯬Tõoï~)ííó£Ðݲݲ]­·±Ý5©éO×>r¾³Ùï¬Tõ¿ÓÁÒ¦ëÑTýwÚ]lç9ÿ?wŠw­},múïñ«vôã°Ø~ý¦Ø|ú+7ŸaƶZ-DÌÔ¦×lÔêŸy!"""""""""""""""""""""""""""âúø()hîmbx×mkBTúÎÊþ’xœí‘) …ˆq ĉ8âDÈ^éê>×»gI@ÏÏþX¯jjg»iЃž——Á`0 ƒÁ`0 ƒÁà?üúõëåçÏŸ|â:÷ªçâs¥¬eø÷ÁÿQéùŠþ3|ÿþýåÓ§O|â:÷2|ùòåßÏ.¾}ûö;ï°7eôûGFÔû´ž•žOõ¿6Ñþ®ö_õQúv•¦“×íßù]Tò¬ä]½^¥Ë®gí¼{>pjç«zëìåkßu¹´o{šyªþ¯yeõŽûŸ?þ÷{è-Òýøñã÷½x†º¨/ D:½é3Dþž&òˆ¼¹e«^H×õyê i#/OGôzüϪÿÇ߯_¿þ~î :ûsMeÑò#M”Ï3YŸ#=÷2û» QžÛ›ÇßЙ¦‰ïŒ[\s=Eó8´}E>¤GÈ©éTîø  Ú²Ê×Tªg-Ÿñ}×þú̬üVfÖÿé¼Ìþêo¨SVwìzV}Ñ.âƒ/Ð>¨~Ê!?÷UýùÏËßÿï1¸Åþè<ú#õîä¥þ•ý}âÀ¶Ø=þF[ þ÷~†¬ôQÚ‹Bó¡N™.ð·.+푹^edÔç½üLo+[\Å-ö§k»ïä döW‡ïÍú(}Ýýê6îqÝý$¾#³?zÐ6–éBÓ©ÍiÈïöÇ?òLüåÍ7®!ã3ìO_Q}Пuõïêoßš™é[ú=ž¥tk¥È‹ûøMÀÿ‘Æï!'}/õƇdºÐr2ùÉ_ÇCú‡ÿﲨü:—©ôéº ƒÁ`0 :8÷—ÝÍòoÁ=¸„+8-ó4}ÅÛžÂcåÄ¥XÏdq{bUþêÙŸÖq˜Â©Î®è¸âmï!«Æ¶«g*ΪòU\z·ü[ù´GAåÖ=^§+ruñü{µëLVåÕüþ çU¥?)ÿV>­Ò“ó†Î)úçx…|œYé¬ÒÆ»giôãœ\ÅyiÜ^cæUúÓòoáÓ*=£ À³Âó!óÊþÄíT•³ÓY¥µ?rfògþÿÊšûWœ—sÖʽVÙnùÔõ*ŸVÙîXù#å=ÿÌFÈÜýªÏ«’—+[¡«àFô~ÅyH«\L—~·ü[ù´ÎOÒ‡£Œhô5žÝµ¿ŽžöT§ö¿êoà”w¯|Sf®ûÜÁÓŸ”+ŸÖé)³·Î;´ìÌFå³´;:x ûëØÉÇ÷â)/ˆOSÎ y²ëUú“òoáÓ2ÞÎeÊ)Ve3'w®”ç‘gGg™Ž=ïJþ®^ƒÁ`0 ƒÁ ľˆùœ‚u k˜U,ªKsÛþçØ‘5€nYæ®,÷çbXw{ ⬿wÖ&Ýúõ™û3®Q×”øN¬ðQev× ]¨¯Æ·ºö¯gcH¯úËžçîi½÷Š{î—ôÌA¦3žéôIó8†Çh³òwòÊdÌÒu×wËÈô¸ƒUI÷äWçq”ƒð8­îÕ×çI£>+—£ñ@åì”p™ôQÅŸáóÈGcþZ—ªüò\ƪÌêú޼ÄUƬìß·]ÌÒù/ø:íÿèÊÏ3dç;É«:gB9ÈRÈôï|GW~•—î×w«2«ë;òfz†áŸt|éø+—i5þ«Ünÿ€žá«ÎŸgºZÍY|<õ1NyŬ|E7þkúªÌêú޼÷°?õ®Öÿz/k›Ü×>ä<šÏÿ=Α}NŸÍå»Î…ùžü>åuåWy­d¬Ê¬®¯Òdz ƒÁ`0 *èÜ\?W8ÀG£’Ë×ÏâY»ûÌÕ:‚ýÒÏDg«öc¾g<‹ Ìö2+²¸€îÙÕýÿ'ëWµ±6½žqnØŸ{žrèuç"w¸<ÒTkôÎ.™ô\ r¤•¾nåOàûïÕ>Uì˜~c‡#T?£ñ+®ëžyöï{¼QùÂ,,^qF/XÅûv8º.Ö©gá×3}íȸâOPùì ~n%ãhUÞG4§çø(_û…sn|W}Tg&x^cëô“,Fíý…¶Çù°ÃÑ­¸ò«ôµ+㊠<ÁÊÿ#+}/ãUw8BÎRh_ÏÊïäÑ|»33!m–r\7U9Œmêß({ÅÑp™¾veÜåwÐé[û¬úx¯ëG¨ïµÌú¿Žß]ÿß±?g;õ,çnßÒ½Úow8º]®³Òוþ¯Ïßb÷ÿÈîã?úÇOVé¼=ù¸ZÙ_óÎÆÿû£#¿veü?áèv¹ÎN_WÆÿ³Žªõ¿rÞYL€ëÚo;Žù°ŸÎ1³g²9pV^•Gµ~>™[_áèv¸NO·S÷Ÿ3 ƒÁ`0¼ÀçèÚïQ¸’·¾[ãï¾×ØÀ veO\k^8Ö”¨v<ëZbzº¯²Û\ŽáOìp¥Ž¯b¾n$~ð}¬¾Çoèz•3ñј mKã è«ãvUÆÎþ]^»i´NºÞå¸WAö»#´÷xŽë”«é‘æjßÊtÄõì q ³:£¿ÏE=Ð z%Ö…ßqù)CcñÕYµEÅÑí¤q™´®ÊyRGý-¡+u (K\ûh¬PÓ'¥Ü*^Ø¡²¿^¯ì¯ñqÚ=m=y|KóòøvÅ«eü‰Û\ý˜rÈŠ4µŸÇ=Ž›ñ{Wê¸úÝ1Òûû;=Ý·åòxÚëpû;o@>ú›”ȘéT\ÔŽý+C±“=*ï™É«|˜¿GðJO¸CÊåW]ù–xŽ1.³™ïµ 9_EŸÐ±©â ½ýVýqÇþõÊã)vÒ(ç¨ã Ê‘}Ïì¿[Gåñùw¨œŸîǺÛôã{-âƒoô½ÜSdו_ËžïÎ׃Êþø2åÔ;iT&Ÿw*ßÎwú‡·™“:Ôº§ÇÇg×­¶“SþO¡ãsÌìÞjÝêºï%Z[~_˯déÖ®·¤ñ²+œÖñô¹Ìw]Ùÿ7 ƒÁ`0ø» ë]ÏÜkÙíIŒu¾+e§L]«ïÎÖ‚ïoA^ç°î;=GR¡³?œév쯱Ö;<÷ôy‚· o$Nî1ç´ˆ=:ߥPîVãžuŸ£<´Ç <&«ü¿ê3K«yC©¸/ù4–£rÇ)i=µþ*/|ÎŽ^]ËQ¹NÐ1qŽG¹¥w>ù{å•á ?ÓKvÏå:A¶þó}E:·ÈÎ_«n+{ÑþuÿÃ=ì¯ó¿êÜr ³›÷qÍ“¾Ì³]>>ÿËdÑ}+½øüÏå|L¼…õâàõ0öÿ»1üþ`0 î…lý·Še€·ô®ùŽg:…®×ºñ¶Šž`W×÷,3ËOã?«½‘]—¾\9ûPø×î~Í[°£kOÿûWùiìGc~Æ)ãÄ-<žw¦¼.ý3qÌ}•ãž'vªuðw$V±’¬n“Ñváò(²r²ºÂÿ¸®5Žï2©½ˆS;W¸‹ÊÿkŒ_ÏKÑÏ”ó­8B/ÝÁhùèEÏÕ —'‹9êw?K;Òx:òxðº<–ì|@¶Ûc³ÄϽ®‡§ùVúàyâÆ»c÷ÿ@Û–ŽSwÍ8B•òq®Ãîÿ]û£=é2ôlBÓe6V}eö÷¹ˆž­«òRý(·ØéÃËáÞ VþßeÊöZT¡ë„4Ýûïad¢­e2Þ’ý+nñYöÏæøBõ—ºŸTq„®Sü×ÿ»þß”é<›Ãïø­[&Ï=üfÿŽ[|†ÿ÷õ÷s°zîPç)GèåèÙÁª}{Z×…Î3«³™n7ÅjþpûWó¿Îwfåtöï¸E¿wÏùß[ǽ×;ƒ÷…±ÿ`l? ƒÁ`0 ƒÁ`0 ƒÁ`ð÷á{ÑÙûô‘Á~ÿ¬ö½³ÇÒßi`oLöy„>uo©Ãßi\q‰ìKó|}ÿïÒû7žÉSvu9ÍG÷íñ©ì¯¿c¾#öÙé>·,Ïjoð­òw{õÕ†ú‡Öݲ‡Lûù=«mWèêòÈ2u_¤ö¬ÿ8د–åéŸjož?»Ú²kÞËDúøßß±¡öm¼†ýýwÔ>ôÃì#® }©ÛË×õ·E:¬ìOÛ¡O;<ÿ¬ÿsüy—›î¡Ô}›Ú›¾k‰}~úŒî±Õ|µM’†ï'8CTþ®¡¬o+¨[Wžú‚ÌöŒ½ø†U™ä©ïïQ™õýr'ö÷½î\ç­'ç’tœTY¸ÏwôŠÌz.Dó¥=¨ÜW|ÓÉ~q=_¡¾yª¾M»ÜñçÙÙÍÇ÷–¯äÇkþt§ïbS=2æû|¥Ò±Ïy´NÚ_}O¯îe×ù”摽ÛöàýðtLàœS6Ÿq`CÿíÌjfý´3–#Ëéܰ³?zÕ1 ÿéíHí¯þ]÷š“ç‰ýõ\"íWËÌÞ]åó¬ÊþüO;¾2'@¾ìã@~tGÎü:º«üªç{åÝuÊþê7m1‹è™Q]ßPWVç2ûS®Žåz]Ï¥zŸÒsý‘ÉÛ×3ÐÅ]vç‘îªÜÝxwÒžôÝ:Ú—>ÚyŠÁ`ð¡ñˆ$j¢ëw½:mkBTúÎÊþ’×xœíœ_OAGûýŸ4ÑGbô#˜&<^yôAy)FlSZ ¤ ‚cw d3ÌÎÎìŸÒÙß9ÉM°»÷Þ™9é­Æ@'lm½5Gß'Obz<7³ùÂÌÎ.Í|gçWæüâY,®ÍåÕÒ\_/ÍÍÍY.ÿÇíí½¹»ûûY¾«®/²±ìîîæ±úy°ÞC@Gà_ükƒmð¯ þµÁ¿6ø×ÿÚôÙÿ`0Èc]¬»_ôÙƺ}<·ÿØþ)ù/ŸíùÚ¯û®—]óÕ¯ÂÎw]÷Õ¶¯Çôɵ¯§äß·®Åµ/»·l=Bë‡àëYÕ?d|!ýc®¥è?f~öúV푦çwU½þuÏW?×õÔ÷ÌÜ«öWìúÅæ7ÝßìÿúþCÎÿ˜õ !Æϧ¶û§ä?öù¦lËj4yöòõ.ëa¯iÿ²¾k)ù‡öÁ¿6ø×ÿÚà_ükƒmð¯ þµÁ¿6ø×ÿÚà_ükƒmð¯ þµÁ¿6ø×ÿÚà_ükƒmð¯ þµÁ¿6øïަß%÷Õ ùŽXHÿ¾úo{ÝëÒÕ8Bëâ?>¯ê»ùö}eù®q4­_5¿ªþvüûsª¾³soÓúmµ¯þ]Ÿ1ŸÁ¡kZ7?dlmŽ5¤^ŸüÇÌ;4§mÿuÆP§Wh=üûsšø9ÿCÆzŸúù_µ>¡y!Ïv¡ÿ¿†ë=PV#¶~èó§«Ç}õnì÷ þµÁ¿6ø×&ÿÙçÑil²ÿ÷âƒxÿ’íÀ¿vàßÅߣ=·#ü¯×ß§ìßþÝ·í­øZìþ-ûûYß=eýëœvŽ«F“ù»j§äßµ–®5hº—ËrBû79?|ãocþöøðß¾ÿºî×å¿øgüo–ÿbÚø÷ïeÿeÏ©ú/ÎÉçÖõœºîm<ÿÕyö‹yÖ¿k|©ùW‰6ΑÀÿfEgþ ü}òŸè66Ú?tB2ÿþ :ÿÚà_ükƒmð¯ þµÁ¿6ø×ÿÚà_ükƒmð¯ þµÁ¿6ø×ÿÚà_ükƒmð¯ þµÁ¿6ø×ÿÚà_ükƒmð¯ þµÁ¿6ø×ÿÚà_ükƒmð¯ þµÁ¿6ø×ÿÚà_ükƒmÊüÏOÍýý­yñòÙÞÞyÃáçëYd9Y>þ7ŸÿW¯ß™ƒƒQtÍ,'ËÅÿæSå?#;ëg³‹ÂÒ6tÓðIIC^„@-YR•ZÐÒvi ²I ™gæa{fÊYŸ;Øõ8ûú•‰sΑ~òøÚ¾>÷þìë;ãNœèfgrãÆÏ»æ—7 ¯3;”f×û§…ý`ÿô°^ìŸ&Æ5Àþ·ž}MŠ8ëaÿ­õï²þÃÔ£_ì?áþÃŒ#ì¿uþ£ÿùþ§ û§ û§ û§ û§ û§ ÿcÂÀþiÃþiÃþiÃþiÃþiÃþiÃþic÷ßê¿Qf¶œÿׯ_gÁþiÃã?Mšùoõ|„Ù’9û' ûÖg;¥Ø?ûwóåâG¡ð:ÿµ©)Wâjw˜¼ƒú»mAêõò?9þ1Ü)€'߀—Þl`òÂÇR9×j5Gâôùj•š#qøÇ¶hZÙ‚iû°®JEø©×Ëÿ¥±6áwMuÇð?“2¹t¾M*ïjµó K `YÜþ­S?ÞkË’æëQ•RµŽlÝ^þ/žû§ðÿDÝÌä‡/ ðs÷~áÿnæ¬ +ëß £ ¸œºr5t?ùâgÌ·¬ÖtªÏ¨™\w·‚úWÊA¹´!–QøÇ:Š…¬#2õ{ù?ö3á]}ÚöãÓ?²b‰ëím¯ÿ÷³c&çG>—Ê¿R©Âƒ‡ ðp~Q,,³úWôk{êjðkÀš/®c¾E¥ —˜…ÉîêÌÂåk³¢ Ǽ8üñãUg.³f’Í<†lºŽQæu/ÿ#ÃG„ÿ´öÔd⃽¢/‘‰^„¿¯#–{ÅòAnBpF?V¦ šV|>mrgúŒ~-Àí¸Ä皪–õuÿ×ÀÄûæ+r5òÕÛ1¡V ·M6J¸0z8ÿ¹ìÈ[ã]_[¸âY÷¸ž‡L¾íƒ1I4ü2ÿÖþü¦S¿OÀ²(¾â±Kówˆjþ×Ý{Bø/èÏcäìþ=P]ép÷Y+þºOuIå^VÔ†ûûfeé^SüôÕèþçÝóÕ¿§Xïÿõ|úú;#ó¿º<'EXÿ ÿ»Õ@Tþõôÿ¥JÅdhßsfÿ 럇÷íiX¦Ê³‚c=ÝR¹—Ê är)|þéã‚ÛqĽÁ°%ß!‘çs0ôÖ3ßB~ÚäqV…žÞã‘ø7Ú÷hqÖ•(æqùÿW×)á_©j ô¿QïÓ7v‹õW^{UÌÿsê¼IÇÉSR¹Ke˜¾s¦oÿ –YçÿAÝô¿¹[ä‹yã:滚Ñàôø/pzìW_Xv¬ûddþü—Þv$ªï€qùo?Þ'ükUu}¯ïà翽ýá¿ ­˜|¡+ëßJ¡XÚä?Š~2òÅϘjCËŽ.÷ë6èü/¨£Vú?|´_ø¯ÔTWÞ=ø…ð_®¬›à±2¹Še¸5=Ó–Åùûæ»´®õgoÖ­/±ìóc§#÷o÷õo¿qùoëþk5Å•Úû„µš39¤+“{~£…’XZ‰Ó?æ»ðDÑQëË5åÙº‡¾ˆÅ¿ÑÞ8ßýø­ßËÿ'ÃRhq,÷›÷V½ÿÃ|"GFàÀ‘úòà³2Ü—ÿí¿ÿÖg;¥Ø?mØ?mØ?mØ?mØ?mÜü·úÿR˜ÖþÿO>»Äì`¼ü·zlbâûÙ?]Ø?mØ?mØ?mØ?mØ?mØ?mØ?mØ?mØ?mØ?mØ?mØ?mØ?mØ?mØ?m¼ü·úï’˜­¡™ŽxûÜé~̤W`fîþ¬ .\øÆÇ‘ÉMŒÙ—c“Ðvè¸86ÈÀþ·6Üüùòk˜™™ó]'ƒÇ²ÿí^þƒûOFÈø¯Öj¾À`ÿÉÿŢ⠫·ùûo]ÈøO¥ò›xù¥—Ë »صË`ÿ­ ÿËËë  {û6ƒý'#düß»ÿÈÄêÞÀºÁ`ÿÉÿ·~[X;­`°ÿd„Œÿ›?Ï5¸Æu§r öŸŒñÿŸ›÷èØølÅ^ŽÁþ“~üË‚aõïì¿u±þù÷ŸíìŸv$Ñÿ.}Þ`&¢¨#Èùš×¾Ý+·fuø /ÿ.nú~ï—{û¢¸¶2¬ç“ñç–_ÜþSé"|ÚÖ 'º†|ñɧ°¼š6Ê ã¿YÛŒrë=Óì²—»mo¶M¶þfÛì{•{m³·£™ÿ•Õ ¤2He‹ÑÉæJË—¡PP XÒ@Q4PÕ*hZJå¨VŸšàñQßÿ2}á6nºùlV¿×1nû6;^¦~¯ñŸý;·7Ìxétïú}ÞÈ<ãìËäáçÀþåŽõ³Ûþì?ÞùŸŸ~‘ÿ½êðÚæ–_˜ùÅñßž¿ß¹—Ó±N×@³:dž ~¶»å×óß^oýsÔCfüðÚÎþ“AüÛƒýÓöO;Ø?í`ÿ´ƒýÓöO;Ø?í æßïol~¿Oo÷°·šk?D¹ßv ¿íJš™ß×íûùé'§÷Q†WýaÚäýA’ü˾/ ú/h]²äý£ßœvòýït}˾/•é§(~O÷{N§}´o§û—mWýZí_öþsû~ì¿y™×{z¿áuN™óûõï5ÿI’kŸÿÈŒ¯Nó,?ÜÂO~öóËÎïü´?iþ[QÏ [ìß_ì$÷ìŸv°ÚÁþiû§ìŸv°ÚÁþiû§ìŸv°ÚÁþiû§ìŸv°Ú‘ÿÿvÔâºÈ¤ï3ymkBTúÎÊþ¢6xœíš‰më0]HI!)$¤’FRˆ?6øc>>~Úsm£®+ŒvÁu…Õ‘øνYšuÌ8³´ú³uNÒ?¤WP>Ê1Js¤ŠWiVÿçü‘ý_uKðEÿ‰Ï¸ˆ/rœÌù£Âˆ_âšgK•W]×±ž™ÍEYòclÊó,[¦ŸTœYH»T¾Ïàÿ¶›ùÿíííðŽˆ}x¦÷ÇL#}A› ¼ÒâœöGüžVË7¼—‘^÷}>“iÒžº²-çøèþŸiæÿì;}žLJø°ìXí&ÇTÊP÷3ýTÞ#¯ôߨgÿ®ðJÖùl eäý'ï=ŠÖø?…͘oéçùn€í±aöëì›ô½|7ù>šý?ÇôU–%Ë;«ï¢­ü/ñmöµžN/èãI޵Ù÷fóQÖƒüz{Èñ<ÓdÌé6éd™nù;è¯ÚÊÿ¥²Q¾–mû{{÷5í$ýÀûiѦxæÿg<Æ$ò"Í^¾%=êü¯”RJ)¥žS—ÚçÍtïe/ùÖ”ë —°a};kú÷Ô_µöyµ?¬9ÔšÉlÍzÒÿ}m#¿óGßüKk!¬›ôók(Ë9êGüã1»¿”Þèz–×,­Q¿&îlÍiV濊ý²Üû#_Ö<òœöÂ3¹Îžm$÷^9g —{9&°w³&¼Û:Ë™ë‰uõfÖšúºR…÷:Ö½L+mWÇôW^£§Äz%÷I—½î¥2Ÿ£î—lo£þÏZ¶f?¾k4öW¼ÜÇ-è#¬ó­ ?V/ì—c^ÿ·!÷!{u̵ʴU¦ÙóÙ·ÿAœÑý‘ÿGe>G}þ?Åÿöþv✽Žø3ÿÉX~j½úœ—{øzT§ôA·O^ÏòʰÑ>÷³?syÊ|®¶ðßG)ŸP¦ü¯¿çùkßîWvUð£zåä¼êú®¦NÌ^þ-(Í~tt´Iš±Ö í­³O¤ó×ÿΆõµ%ª®0þ ×›ìµ^Ûù€_PMÒée÷GäÎll¬IzÝCéZ;žÝZç=»Ü(nªsÝ–-ƼÒí'>òö;î2Û€ø§÷{¨Îö'·Õùϯþ× nŠÍÄ&á–æÚÊ<(cŽ@}Í›¿mlMëßÄ^ë±':r‰!Ÿv‹æoò—'ʸhþããã¹IûÄ>±z‰ 4SºÉTÆÖNHLÐØÚÌ–£¦gãÁ|fó!þé¿ïo¹¯³é?dPÇ‹Ù5òåï¢úŠÍw_þéûûççšîñ}ø9&¾ücÆ£¯ÐÞ`jŸ:Ÿ!þ jXÿ÷v6ÝãgËûHû§æ%×¾é/“ÿd,CcŠÝWJûé<[ýäâoº¿Oîñcðwéc‘ü©å]øçÙWŒ;ÆßtŸÜãÇâŸÄ‘”c¬0¦|,VÊSújcÅ£$O󟜜léþ>¹ÇÏ–µ® þØý½VÙ1‹òå/â#ÍjjJÄTŸ·„?oiþÓÓÓ"¦þ¼%üy+Í¿ÿ"*AiþúÿD|$üyKøó–ðç-áÏ[Tþ_¶UÙýåÏ¿vyÔé¡§e´¨¨ü¿øtŸZ©­©ÕÚú†ÖRß×ÕO_¾¨ÎÈhIQùŸܯ.­®©îãߨƒNªWßU{º¿RËiç¦÷×çÀé¡íå^Gýutt4É'nJ½~Ú]TþCý]jéÒšº¸¼¦––¯|^ܼNkèã®hüBê ï¸ü?:vH-nð>~òŒêûüõþ'ß7í‹ÿ®ÕËùòƒÖj¶\r­kÊÜ€ü¤Ó°|(&Sܘ*ˆÊÿhß[j~ér] ›ŸŽö½íÅ»6¥ËÜ¢Ì'ªoÌ6\æhÕø÷yWÍ-ÖÐõ¯óu9_þ¶5æË8oþPÜ®ý«:ÿwz{Õ 5uÞ $O—óå«|‘ü]Ó«&*ÿC=GÔïãë_çÞ(ƒÈþåW…Uæ•ÿÝ}ê×¹U«t9þIšËï¦m5í·6?&þ”¿ÿLüM~Ë•ÿ¾ÃÇÔÌ_«àºŸùsE­kµ^®ì>å¡*1+ƒÿž7ûÕÏçWêúøL¾¿|°¿ô> ÿøüwT»»´Ô®W¿_»¸Rfã{Ù}Åç/jO Þþ¼%üyKøó–ðç­,?¥ùÿsá7#AüËÞ“DåíÿŸ—„?o Þjþ1ß½Åh«Þbü±³­ÀŸz.#f<®g<ÊžKíÊŸzþ+f<>g¼ªÎûLÏÊy=êY,¬|è|¡žãÂÒ)çmùй2J̶¸\ÏÐ…ð·õÉæß÷ìd(ÿX°ùíËß§oX\е©…?Öå7–2÷]êck"„?%h~çÍßuœ±Cù»Œq¬ú”ñòáOm«ÈõOK×uçÃ?¤OEïÿ>sËgÿ·ÍŸß@—6]Æ-tÿÇÚÍîE¶ýÚV+ï:\~[(±ø¶AŒ¹iÿ7ù¦Î¡2žÿøòÅ×¢ø‡®eQkóUSŸ·²üEüd;ÿ©ÓÅÚÓ„?oþ¼Møó6áÏÛ„?oþ¼Møó6áÏÛ„?oþ¼Møó6áÏÛ„?oþ¼Í…ö|a‘V†OæºþÓ |x„0þñ-„¿éÚ´Gdó ž¶úÙ2.õ)1„ìqPÛ.m¤ËûŽÔCLþ¦x±k[^¶ýÿ¡ùEX¶¡ãk‹?ïõïVŸÚßõký†î!¦kJûéµµ—µV[ÿ!ù6ŸE¯uÈ\Ç×T¿þÔ½ÀV†ZßuÿwÝ?„øýŸéo¬ ¥¾)ÍÅ?eoÝ¿CŒÒOjÒŸ˜ÉóÞ&üy›ðçmŸ· Þ&üy›ðçmŸ· Þ‹ÑÏÊ|Œúl¯ì¾ÄzöHi#æú¯:mÔ÷QeõÅå}™O{YóyÿCy÷H}¾nËÇÞøŒM(—øMþlãgŠ…òÄÕ¿ëûlœl}¢ÔɧX×ø w7.õMe¨1Sü‡®W>!ëªëßR—ºþ)ü¨ñSù»Ä Í<×H¾­O>û½«?¬œïú ÍÉ?k!ü¡ùë²ÿÇÚ¡:.û:µ\ñÛ~Ÿ\øç½ÿg¯¡4(F¨,Ô–­¾­ŒÍ7d.¿O¯˜ñc¾}ÆjCžÿð6áÏÛ„?oþ¼Møó6áÏÛ„?oþ¼Møó6áÏÛ„?oþ¼Møó6áÏÛ„?oþ¬íöpñ¬èXaimkBTúÎÊþ°(xœíáoÓF‡ó¡ýkû°}`[A Mš4´/ÀøTø¸JФL¤M m¼v-IݲJ¶[Þ+—æî|g;²/ïï'=ªcÇîÙO|qâ׎È\²²rGì¼N¾ =Úß}W>çìì\ŒFo%‡©d0x#zý=É‹î®èt¶Å³õžXo÷å<4¯i¹.¨-kkk’épkº2§À?ïöŸ\ùïJÿ}ø0!þmÿxºÿ3g¢½þ?ÆT±ÿÓû¿Ë¿hµœÀ}©lÿwÿÁsSÍþ¿ÿ‘¦ºýß~üÿÍMeû?Žÿ¢ Žÿy'Ôÿáa*Iýû¿gÿÿÍ üóN°ÿƒT’d¾ÿ‡ÿ8ÿ¼ƒó¼ÿ¼ƒó¿¼ÿ¼îÿX"?ÿõö%yçÿ࿹ ö?=ö'ƒáçþñþe ûO†™Ïðcòüo¿ÚÏ_AóÀqù?:ùG,-ÿ VnÝ3ð«yüí{âúåüðßüØüïí§b”žŠÑñX¤SŽOÞ‰“·ïÅé陿;—ï >LÄùù%ÿŠÉä¿4?ü7?ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;ðÏ;‹â¿ÕjIÊD-#KS2v-е}Ê&»Œ&ù§èí©¢m±ùwíêq™}D_†mºëÿÛÚÎþ¿Ðö¹»Ö?;=&ÿ¶õ1mÿ2Û×µíòƹ^w>¯ŸöÙûlŸlbóïzöuæ³}ËøÏ[¶kØ·}¶åä¿,ÚþïÚ6¡Û6ïù1øÍ¢ù¯¢ÿ™V§ÿÐu½ÿWë`êß\Ç^!Û6o¾¾ÕÖ7›ÚÚ¾¼cŒ¼6ÄØÿ#ÕþyÇuÿ¯ÍÞKqãÛ[âáÃÇâÁbõ îgÿÞ_Ë×’óÂó“wÿ¿ÍÍ^ð2iÜÿ/ŽøÜÿ³Hà?ŽøøŸ|üþãˆÿñø, üÇÿêÞϾPà?ŽøøO’¡ä«k×fÃ:Ùñø#>þ_ný%+è±Â4žÿqÄÇÿó?w$ºkÓcþãˆú]…î\¡O'(ðG|ü?}¶õºûì4‚ÿq¤ˆõ0‡ÿ¸RÔ¿ üÇøçøç<ÿô[^úç}ðû_ñÄåt4KË7?ýÖ—?_/ÝÉþQ¥þ‡Ã¿P½ 7ÈQYBÍ—ÿGžùù—ßÅÓv÷²V‰>õ9Ù:²5:uù·åâb"ßk¨NEës(EktêòOõ†&(´é§:EN”©ÏQÛ­nç¾þóÎ5S}*7\õ9ôýÜFÿëí¾øçáÿµM#[½WâÎÝßjwQ—ÿ"õej4êòo«5X]}"Ïc×}.¾ŠÖg”©Ñ¨ÍÿtX|lþÕxÀøç úöèþ@³ø3v½(‚mkBTúÎÊþµÙxœíœOOA‡ùbÄï'=èDHôj¢à€ œIă&6FÄTð@)Š¥-ººM‡íîì;³kwìûü’'éÎìüÙyf—¢®Éêê‹dwwwBúùèKgŠ´œÌgð¯;ø×üëþuÿºƒÝÁ¿îà_wð¯;ø×üëþuÿºƒÝÁ¿îà_wð¯;Mú_XX˜KÌ|²Ä–:çÕôýÛúfç3ëùIÇkÊ¿ëÞ°ËŠöh¶mQÒþëö#™—´Ìw}¤Ïž²9Í-¯ÜǑϢ9dë}Ε¶©;®µ/+«º>E}õ麿\íìc_ÿe{Ôu,Y?ßþëŽkm³å’û×g}\ãJçèjŸWWõþ/Ã׿oÿu§¬ÿºîݪ}ø<£\uMú—<ÿ%×wNè>‘øY{iÿu—[õû_Ñó;ïØuŽoÿ>?礑<¿óæ\ÖGÙµ»~ޏÊ]Çes7uMÿþWwªÜû3þIq²Ï‡yóOü‚ÝÁ¿îà_wð¯;ø×üëþuÿºƒÝÁ¿îà_wð¯;ø×üëþuÿºƒÝÁ¿îà_wð¯;ø×üëþu§)ÿ³xOÃç] ÞšÕæùý¯l|ÖsVkßôìqª¼ÿig?ççµÏ«sçû~cˆÿÐ÷/%ýKæoŸ[ÖGHì1ª¼ÿ]´F®cI¹O›ì~“ö%;ôú\cøÌÁu}!ãÛmªúÏ+«Ã¿kÞ®{¨êúÔy}>cHû/»~ß9üþ]™…»¬ÊÚKëËöwHì½ó/Ÿÿ¾ÏrWyYt~eí%û·Nÿ>ÇuøÏöQÇ÷¿¼1Š¾Ç”=¿%ß\çäÍO²nymªìEÉXÒ¹û®‘t\ßû¿¨O™—ë®â¿Êwÿ5óvÍóþç?ÄüëþuÿºƒÝÁ¿îà_wð¯;ø×üëþuÿºƒÝÁ¿îà_wð¯;ÿ)½³ãÊŸô NO¿Oúoµ÷“ÇOÖ’ÍÍdc#e»uûóúv²üèù¤}·w‘𩵟¼~³%öÿôÙˤÕj=cÒviûîy"!õ1½üWIÚ¾÷g\ˆãÓ×ÿøö6—‹‹…uÆÿùÅ5DB¨ÿ~0EêÞWoü_\þ€Hõßí^ÞÃvŸ­3ÿWWˆ„PÿÎé¶{»<‹ñß¿B$„úß?ø6ÁvoÊŠ0þƒ!DB¨ÿî°÷€]žÅø¿¹C$„úß{ß¾‡½²uã8C$„ú·w0…½òêñuú7{ ¨Îø~B$Ôíß…ñ?ÿ‚HÀ¿nBü>üZú»^i;üÇEêã }(öß=ë'KË+ÉêÚ+o.­$“³ÆÿÎþ’þ{Œ­·;SþAÆ?èÿºiúÙ’þ'V¿ÎÃîÊ%ëo*mkBTúÎÊþÔðxœí}+¸ì(Öö’H,‰Ä"‘H$‰Ä"#‘X$‰ŒŒŒ,™QûœîžžéùÔÿÔˆZsé>U{× °.ï».Tæç}6žÚ³‘-Æ×F`‡£Ãp]Åkß…~Ãóbà ¶ О$Áwݓٱ„ÁñÍ|süñCo•›ÝA+Õq3¶¾lOàx@á(é0ða¹¯+?÷  ÜT,¤_¯7¸s\ÛÞϘ^Bl1)üCó•Ò+ÔkÛ(îFyN"8õ–dPCÌ_9ÈÒ>O0&l«4¸Im+þîënwîÛGrŰø™à»ø)/tih“f˜õÕ Ñ¸X†>ÊʨËEËÅòã)–Ô<,é6ös4ÅáÀÖ5›zàbð?¤¢Jðàö\<OM%O#(7ä6à:§= ªêýÓ‹YA£÷ƒH ¶«L s6›ÎMƒXêÈùBcX&ǘJ½te».Êöü¨Ï 3.je(”Ï?Ô?õèÉLÚjï³=€ÝÚ%wƒZˆizFTxô„$¯kPö8›E·mòø jAO™ñÔ×úÞ€«ž>~þ’†åÜàØ†‘ºéB9úµâ † Ö¤8U­«KCÃv´jbëL èåçC¼ï€y¯¡ ç;¤mj P.Ô —øãïDkñÂêwþ¡UÿE€3ôܨÁ”‘•’8xëUÀ…JÊü¹s£‰ž\„³èÉŸŽ+;}s­FãQ(KI­î÷¦XÝ›„ƨ ¹1 Ëúþ+Kú¨èdXŒ];JÄ£Žïcˆx$§DÑ×·Þž¢X`i× ì¨ëÑ@lÌûrn°m$¨Æ^×9΄ïzBGÏž Q=Ænfäk„Dêö¬e; <¨ýøaÓü>,µâ¢ž›jÆïk‡0BŸ[p(õâ$¿º‡Ç ‘ÛöÌpý4 nËËq`”XÆ“ù úvϵöèÙ.xõHnŒûorŸJ¾€Ï5¬ñÁàÿHàu©‰ñê뇗 fà§ í××a앆‰[Z:><ÇM@J£9óý¬â$Óq]¡}=H… kÐþ3ÆÊºã¯ù鲺t¿Q“=‚, 7ÆÇµß»ýìêçs Ä>ã¢3ø¶ïÞÜ6[¦Ñg•¨— RLت¨ù­?·( &wÝ.7C#~B{‚]¯Ó ×â—UÔW² 7™Ò1jk~‚e”cG»¿rËÇùÐãDØ.=ôËK´ÜîëÅ@ÝWÝDZMû0å€ãûíèä¼0Î\Úòxó®vÏqßNZ¢ >#Æ ƒ„ŒàBE— ™¥)•‚º&yØA}tå?Bûê Yìm(ÂWIpáɱò€ñ ¸|½2—+èýà\2·ö íÞ)lÜ8·ÖtlÁ@Z.B½€£ï•eñ…‹ƒRSßôƃm>d˜Iéþlþôò'N a†dÄ¢G3¹%†¼#«)?è¼Ï$sß _5=²íYÇBR#-k"qGP-Ðeþ"çf­ÁÂá%Ö©-Ï“37êÐäÌÈ8ÔM9™ÏŠŠ,¬èä_*n;H‚ÁúÆEBƱ†Öcl¿~øÎî±ç Ë[ƒŽ/saŸg¸IE2å,zÒ1Út:’kLÆÓçÎÁ¡ÍíÈ™壋G)æÔ{7ÊoðËÅnd¨ø¤è·ðá•{@rõP˜>ÆkÂwŒk×½¾¡ #¸kXfy‘ÖEÇ÷šÈA©ÍBÂ9ÂuM°ÛÞ4P=¹_Ól’ÆgW®Ø‡ÝN•Õ#–_n™‡Gï¤pp ,Z…ÿUu›6È“÷ÃV¦›Ó°¸å0EK‘7*|·ý]¯{ü75F\éÔ¶»úzQØ z!á‚Ç uH€>îÿó¦upš²ÚöõTÙ£»o3P)ˆø´[à^Õ6ãÖÚóã` -šd&á*=¶%ÄÀÊfY’<¿^’ƒØ·`_6¨ßÈ|h¸Ìë3Ø¡>€„2 Pºúqÿ×7ÏŽ³ ýÕü,Ns¾j»F™=BµŠü` ¨í³•C§òöiŽU’)Ré@LÅßÒ®„‹ÿ‰·Ç§mb<2FH“Rq°²ùF½åãø÷Xºi䎲õOm¬GAýÝ·ôÒ}:¶*¾Ëu ÄfØ:@Ê«RH™.òÙ6Âñ¼±Ã6Žjå§cæGOpO- ú­6HÒýúÜÊKÉJæÛUÀÎì:ºJǃ¾ŠýÉvÆ,¡•¸¯3ÿ‹DìZ‹¹EñÊÆ®ÒqqðìØ7p?¸ƒÈŒÞK¬÷Å%ȧ$;â¼?ýQ¬r6³pP7`¼a™†¸é^=„„ýÉRç¶_†õ™³)m£„Ç>ÀD3#£ ¼_' çIþÂÉ­uÍ‹CÁÊ-Rne㯄³²Ïóss•ÀîLÏÌ<È­/µàR)|Lt_1»éòÁ¨L¿kÇ=‹rr 4ùìê§ü/gýšEÀrþÀ~P†¦nBß[ ®\g[{¡«‡’g£ãYÛvRŸW'†‡ {Fe°m1ïÞŒ{ Ýw¾LÿÕ;7¨&$‘çþxúcÚøÃÐ0Ÿ ŽžnÝö‰óí&úÚuÅ@5sCèCÕ±mœñ8Hƒãefñï¹Æt ’Îx{q(a¿²ÛÑ‚a¡?€ŽÐþQ“%ò§ÌlÁ¬ö4ô‚¤Ï‚xmWI׆€Gí¯¦CèÒôì1ê’Ûk×QÖýŒ3iJhÜ,Çÿ€úãú‰KºšRˆ÷ÅÄð¢ÄÂÈöÈO`úÈç…ʲ»†½þ4á)ú%ˆùÔb6îB8ý\ ³pµõšÉì«e<êºíS鹂ØìÚ+ÓjsðÄpŒ„¸ß%<&t{3?Œ£¬|N)p7b™Ôîãé?Ôa¤iäDµWl’¡½ðˆX—ŸÀZÚ>;uø)¤ko)#WáÈÍSšn®cR½xô”{[ÀsXv1¤¬95‰_¬¬0KéõÁжՙ7Ú>žTp¡5‡‹¸Ù´¤l3¥Sü"ØêLXê…ç«[á5mö¡ø º¿Q="u}ö‘ÆpϘ*xböÕ‰ºîã—ã#iM+³ù@»Z! þ·Ï®~jàÒY”ݬ‘¡´Ò$?5Š• mtêuˆ] ‡%Ž@Ž÷Ý…:4h8Ûƒ¸˜¡»tuì3À;ú ΑO¤1A/r‹¿¾™ ÆÏR*5ÀÇûÿËìiÜ&j#Y2:º$Z(a­dæ@ß>'z ž„×L¬¯³¬Û뇶©½6ZÑÀ8|`Æ6Ý"åŒX1ß_€z' îF-©÷»Ñû?°úX^ò A:?1¢;ØÌh/KžVB'õ üvOnÏFSò‚¼É õƤê°ïÌÞQ{=kh7™ÀMå¯ÀwXQùpü\vïÍ“ÎO/ÿ¶.ÅöÚñ¹ ôN3·ÍHKRðÉlŠK–"›qò”‰^Wܳh¼1wtùã  h@§¬Ñ3ðe6þN|–’¶Á©‹I;yîó?8t[ƒ[é!‘ ú¥µ$,ήL­·e–"z¦å%IÞ†AêkÜÌRäl!3uú8àÚyßë?_žWÅé½)ƒAbCÒõéõOù!rz¿„a¢¤5S±ÍnÖ—£³ˆ#Â<ý43yÜ6"ª ÒRýêÑô߃C‚Qå¿&>¸[¼# BHÍǽß{v¡eà×kOÃ×TÉlq(UHð͵h »Ý”8º,@t°µöÈÃÕ‚LÛ{p´•ü‰/Ø*ËL"d_y ïŸk,4î GÌ–ýÑbD>,ÁÏ.ok"ýD;†|7–[.µDÖCíAœŸä#‰iÇæélÿü¯‰ÏŸ¡IÖ¬ÐòâóÞD¿q½]+ÞeE •ò–_«-- ™ƒ¦ Ú°c©›³èç€^ø¿¥Lô˜q±1~ëCßC“ÿ”øžC“9¡ŽgNäóýÿû“õHÈ8Bkhêç«JÁŽ#Z¤-`úVo§™MËa 9r$îÕºZ-¼hókhò ?C“$· û^–ñtÄ÷¿9d(‘8PÝ…]Ú¶š£×w[¢wléÏ;µŒd•Ôn—׆ôoÎK«èdù H¦Þ„(Dú¯…¯Ÿ¡InüIÌ Mïãü_(ù¼ðœ’îð5)6H/öõÌYÍ1‡¸ ±QRæŒk,nËÖûXH½­ʉð‘ƒÊË?>ÿšdf“ç&6³üü½^EJ–m‹ªétÞÈ{¥C—µ›½ÌC¬c`½îÙ0Ê…v5ÃÂx<äƒó\9Y·Ýÿcáû×Ðä}1Ú06"×´!ÖóŸë9êdl:'– û1H"Áz'7ùQ‡q›„¹Ž¾¹ÉŒí#KâR.ò/C“»VÖÜgÇQ×Ȭ¨åéãó\ âì`¸·?dÜÛ1y³”åuMÛ6Ƶ8ZX]8Ãø^p…ªwQëE¾ç &­1frRšÁKiûñçÐ$G¤ÎÓðÔÝœÛÇЕŒ¯ðh3'À®Âø”·“Ç{¼±š;;Ö~F öKî37Ðkš–Ìu<pöµdÊŽåèˆ+C¨š¤™ Rá‘÷Mz¹Æç¿7)nÒ€©æöÔ lEGyÍl½‡:Ì‘ÿIÞí’o±BìÞÿ—S%|ë‚ÎЕïsTuÆleÁõ’bšA}A¸ëæížÍ´þ1ãý0ÀA{ÉKù“ʘÓº¼tjÑòÇÐdLI=rž ¢PRgóûÇó_Lb¸R³£é Åžël?«â”ž)!°Ö[«‰FÂæoÖç wi&k^”CV(t@püW2Ó÷²ó{hÒxH—GRn²͉ŒeCbúxÔ‰°ªé6GÁ³©÷‘¬Q…Öd27\ÌØ«dœS‘É=\»F§f*¼0é‘Û£ÜOPúÇ5(r„Zß™xQ‘Z>¥~G AeN-õãùÿjYôÜ7—Ò¾n;ún?Ó¹"P·¯xÒ}‡·•/àNäöÞW:ÝŠ&´—×¾†Ù:x" ꭥу;†ÄRç펔¹ ®cä›…Ñ™õ±ñÜýüýElmG§a= hò¨BG_æu…³×YnZì«­FYs ôUéµ"zM&Ë:ËÝGn¸Ïuí.õDX‰ƒÉ5XnšÁ¡ö›;Þ}¶Ô«%XO?½~2&ùÝØî¸Frjj¢¢…8ˆ› yAÊÆä*±W ¡³‰€©ÒIÒ˜÷“9/¹§u‚b)õZ³l:ë sá¼¹ 8²5ÀÀJõš>~ÿi´œÐó˜I¿þ3YÏÔ•;ç:#hEL¬×[ROd‹Ê^GéšAË©fß~Y!ýËÐäEåêñn·ôü0¯~Åà/«AÝò –Kåm÷‚±>^ÿÝWY¢q†"µ¥â<цFвÎë*c¹½:xÛw„|¤Ížw­—%ýehRg°åØúæÜæd¿9ç´üÌ•ªËÃvž3Àv Dg™hç>>?ÿò3é‰hŸYDkgCã(ʹƒªÔ•ô×SÉ·†¬Ôœ|è 2QÁü94©(ñ½?OG•Q34… fëcc³¶PopT€Yaƒ–W(£>Çÿ@­tãX4ˆ`ðLG¦Ùžp•‹É„ãaïãšÅ°l\¤[9‚cû26óâU M6f,ºŠò¼Ë'›¤…žCÐÖñ4øi¥?W~p¯sÏ ?žÿk³ÞA÷×KÃrŵÄÅÎk@–Ið|>^xðs¸?ý\Õð`,DèäõÌ’©Œ°Žû5¯éWÛüÉ^£èøçw €DÓµMˆáøXf_8<%|8_왉pPó1†…ãî„WþÀlm߃˜“Šf?4žý¼»:½òÌ“_£Ô”v ûûMà;kž:pÍÖ²â_ÖùásjØŽqw]$F‡£}ÿ¢»y« ××û,b'Õè°N‡Îþ=Ôo¹öÖôÔ0, õ¨Çÿº»â~–ÆM‹ƒÄû Y•R´‰¥4â6+!”}@~u‡j°ctCÔúàõP.ÅY(ýxÿ׎ ½×zµ?70ÆWXFÜ£¾oŒ½·¯‹3z‹Š€0°®Ác8¨R£êG±¢g›0àö ¦T—Uëøò„½»‹w­"/4³ÞÖ÷¿¾îC¾Q`[{O³“ºcÈn¯]•¶+•{Û{­ç¼ÞÕÎ N!3•<®ÞÇVí‚ìyxé,!C æ™b². êlfÖ×åÁø'„ÒÁ\ ןÎÏíãëgu,μ·¸šw-/ôß3Û¥ùºñíN°íâX(›c ƒŽÓâoõMDð‘sÊ¢a·#ü#0{c ÁÈÀð%µuDWCB¥Z€AéÍZ6»,Øçûxý (Z%‡±µØçw€ÑÀáŠHbhTb2ùþ<$÷Æ*cÀ¼ænk÷³”_÷וð«Ð÷¿#{D+B<™!âÇüS/¼gÿÃ`ø9”­.^]ŸÃŸ™ÆCíÌ+>™ì3ïƒ+•ý5Æë]¤q‡„Äp¦j' r¯9µ¼FDȬ)~: ã躟—9GmÜì“x2’¥ù-?s–raG"yvU³pa;R«çãø÷ăœ ÌAŸ\&ú¹“ ÿ?#Äìn Ûí0Úee½´“d~o’qå¶­¯!!DzP^H)>¾oµëÈ‘.®Ä¼‘Ô¶=Hy»7´S´-M½ á?Þÿô8y£c¶Î™ß§q„|Ü#Þ5"ù2Б ‡lµm#—ýU‰ÑÊ»ìýeüΤÎV†ÎÈbMƒ¤Í˜÷jAÌc7¾Z ä]> 4½gbö Äýñõs 2WRsKgí6Þæç 's8qzñTT[”R›[wÄÍ)I‹—9ø5x¥ŽÜWjýÚ #”!nN+zP’ÄÚ”â ÁKgâ²ÁÞTEŒ,ÂÁùÇë?³¥{é^R¨DÝ¥=´R¥u^zîc¯’§³Ì¥&D¼‰'i74øSËJ½ß”í&H¥æU©Gà»[û‚ácrÃͦŠ<ú’‹¡׿~þ‰4}Ú…žíh¢°Î;¯üòlpAZð´%’XÔZ;t®Q?„±÷÷žóy™ïk1+Ƴu6Â[«©ÌÖè† áDõ™c4¿ÆœÚóÐÝ*d„•B#!}Þÿe>Çsamh¡¹ÿêG3c^çæ—8u9󼵕⸈߂ÏUéy‡‡B;f "Yi=ÖD§ =Êâ‚Á4‘íŠ&¡Ž’Þ×|¾Cý“Ò3»Ä÷šg]Ø~üþ›WgjhSIXU“‘"1A5Fr4×{üáÜëAä—éljŸw¸TðÎá–Ýt6<ï/NÁ  \û¤õó«R¥tÇû˜a| Æi¨ÌÍ>‰T.šWo>>ÿxŒ•ϯ¼Y¼æÈ{ç··m,J²{gg}Év~)ê]Ñæs!?wøè÷X›‰æè˜G—F°¥l!7ކUœÖ|Cnáfï³…:.@mq%®Á臔±ÜÿÓRu?.–:¯èaBë¼ÖºÌÌE#Gƒg'yX«Dåÿu‡SWºä™ÇŠD)Œ˜21×ѵ‰VµˆagW¬àP޳²q½ç«ÏÈ’Ï Ís”?¶•@åg")ªíªç©s\ÖTòâô{Þê«f3g÷‰oÑþÏ^w:^ë¼"•Ý{¹ªd#³!φtà}©,nÆyWFKv„X”4–ƒ|<ûB+ è®Â8ˆi=-;´³X 5l=/xlêóŽw•–å÷n³]ì à+SÛÓ¼,{Õž¯/ДâV¡û»+<< ØÌ¤®Ào ŸâÞçèÔ‡eNpù^Oÿþ¼ÙùŽOv qR¶ £wHF3ûÝß=oý;ü`~k’RÏwCßÏí²”u¦ãk¡jE˜|û‰qÏ©ŽÔ‚KV,Ï àÏ*?ÞÿþxkáÜ}QxÁU¹éœ/MÛüÞÄÂá= ¤Õ°pý¾Êæ=çŠÎ^xúBË÷ÞÚKx«§Ó@ð[òÎI™¾ÔYB]Tª¦âž™çÿúÑKqÉ.á½€PÖÛwÿ¼ÃÓAG\ôšWÂÏ‹Øâ9ùãÏ2S³—åA\è“Y\œßy=ǨðGj÷¾ÌéÇõÕ¢ÂMî@âŒtÔ‚¶„vD¾üƒzÎ+²ÙÌBĺ\·Ÿ¬ü¼ÃÕ¬…÷Ùë6ËÛk™6Lþ¸Ê¦ÚRß_rýnl|UAϯ< ¢¹Ë|¦²!‚¸;ºÁ8™_1ÜgésÞùÆCŸ‡ÿ¿ä >êVB‰~æ,¶¹® Ë˜_ÿ&f™äÕjpñ/WÙÔÊwaùO ¼š°H 3ÉÛûþ¾I`˜ÈòuØù»õ¸1êͤÉû·ÈÏ÷ÿå+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò€ÿÝš™w)¦÷mkBTúÎÊþ€Uxœí›_nÛ0 ‡s‚¡‡Üû°õa7é¿4éÃΰa;À°tH†JŠ”l…¶ôý€‹%™’HŠÉâôõööÛ+ŒËÝÝݰÌýðòòýõçßí0j.ÜßßCÂHyíë-3BDûxëô^ ÀA¯9í×kðõËçwJúFÈÇÇÇî¹ÄvÒåµÕž£·H÷÷éæ&<^-ã?ÅZjóÚë)Fˆ¿”µ±ï-žžžÞ¸Ä}úwbêKÑÆ¤íóëùXé¾’¹•­äÂù|†`"ÿ½wˆ#úïO –èÏŸ'úïO –¿~ÁÀD׈áp8¼“kƒþâKÌÇA‹?90¹8“}’¾Ï{ÇB¤1M?ëñÙ /¢± „B!„B!„B!„êSóß{NxúZÌ?]_[kí¯•¬ù´yKâ§õ¥íkîO²}íø¯½¿Èõk9Pj'×.Õëz~¶Kκt¯Ô¯Ù·díÙcÛÚSîü•Ú×úK®5å|aÕ˜¥×žVk?'OÎçòɪ_^yík÷{ì·ªÿkçckûž±V s}Zýóž_ÉÞšç/7§½f>o½¿†}ËVÚ¾4þµkðŽßRü­õÔ¾ñ/­áÖ|¹±kÆ¿ô¼{ÆKýZ±jW:.}íÝ‹çý¿öý+·&iŽÜÜÖú¤¹–ø·´?·6Ë­U;÷Òú…bµ$÷¼ç>:·B!„B¡žÄÿ±?ªä;¶½O±ö½økßSJß[{Ÿ“¤6¤g0Ú÷ÝÚý5Ϭ{¥5yî—l¬íŸ5dÙ÷>CðÌcµiöµk¯ÍÚ5iÏer±¸¶–Ȳ¿Ô¿Ö¸¿Ô<ê]“õZ:­ýÓ2þÚ˜ZÿZãÖˆÿ’ñkÄßÒžã¿…ýåÞÿkêSÉý[‹î ÖäEÉþ¥y¬ÚgÍ%ÙÈÑ^{ïÏù.·7i^<ëó¼h똩UÉú–jÍÚ…þk­Ø\C{Yçž„OB!„B!„B!„B•ú}ŽÊeXgœRmkBTúÎÊþ€¢xœíÛ[®Û лÿåTýïÒn[©·"f;n|Ž„”øc°•Çç'ÀËÿâêñ^=¾/GƸZ÷èü£ë_=ÿÊùœóÑüïí{Þÿõ¾Wÿj|­cÕQ­ÿ•ñÍÄ0#:¯w=­ýQ¯È̯(¦QüÿC|Õ¶gÇPo_4Æ2m½¾Vçø+ãˬ¿Õ¶wæ¿:ÿ+ug­öoåø»ã[mûÈügæf>®ÄVy?sze|U;î™õñq{k ŒÖ®Ï'•Ø¢øZñ_)¾™VÎà>FŸÝ=¿æ½Èÿ{Ê~>œù(3F¸ŽÊ÷Còÿ~*¿/¿÷#§÷vVþ­ÿ×uôú/÷÷&÷ÿœùYIæ¿P;êµÕÿO©•‹uŽþ›Ű£í«¸J,•Ï×G1g®i”ÿçzzã#ª«wþã±Ñ5Žþ9ª#côÛ„LŒ+f~_Sé¿L½Ñ\ÏÕ×£õ%3æw®ƒ+ÛVb˜Ç•õ9³=“‹jþ+uµŽÍ¿]ëvvþï”­s×=¡z WÈ%ÆÙzŽxN¨®û½}Õù_‰+³^Wó_]ÿG1Îzåúß«£:ŸwÝ[k^æ#Z¯£c¢¶ZqDñ¬¬Ï;êßyoÈŽÿLÿ±Vqùàt¿ï=ÊmË·ï?EQE¹iùú\éùuå¼w-Ñ÷S3ýµš›«äÿqÿjl3çïìÙkÝÙg^ïJ>[cãyÜ´öWŽÅÙ:®5/[mG×Xi¿·½_Ô?£úgÖè^2ùïmÆÄ®þ­ÆÕ­ñi¿Ò£þõO¯?w¬—•:F¹Ë^ßl{™ö£{s¯ï*ã¹:£üöÖ€ìùÕܯæ£zí+ííšÿÑþê¼Ü‘ÿ™þ‰ÞÏæg™µ½šÿÊýa¦îÌë÷ÿLþgçözÌ«®ÞsÅóö™üeû»ÕFô~¦?2×7Š#s/Ž™~SîUäÿžeõùQQ”÷+¿åÎÈú ð~B%®fmkBTúÎÊþ€:xœíš]Žœ0çþw؇\!Ê{Ž’H9ÈFD‰E¶»m7Ðæ«’Z~l ËöæósA>>¾}þþõçÖØÎîÿÚà_ükƒmð¯ þµÁ¿6ø×ÿkòz½þÅ,øÿJT^½Çº³üÆŠþÏÎÛhý=åÞílÖ>µãÕök•¯ËèÿxέkêuåÍû~_«Žc¹žséÙVrèÙÖÚ'›ÿZ;õæÍƒ§ÿ×rëÉkôyX}ØÓFkå³ûÉÛly«ŸÕòzWÿm“ø÷m÷Žñ³þ­ñ|vü/ÿÖµEæÝZŽ~6ðŽáûåãïZ=­ñ•û¿Z¾Gïÿ¬òµœ{óºýÃuà_ükƒmð¯ þµÁ¿6ø×ÿÚ¨ú_ý½]ªþ7Κ·]‰Œþ­9‹÷ïýúÚ>#óuÞ9÷'Œ!Ùü[ó­ù°Ò>µ:=Ǫ­[Ýùžý÷ü®ÕÙ:–ÕÇñÿlÿøÇo™¬dó¿aÝÿyÿÿ=ßÕŒÞãqÿwžÿYVwr%Oóÿ”~yOó}à_ükƒmð¯ þµÁÿyôÌÞõÌšÕÔs|†wÞã㿜‡ˆ6p=ó ïõµwØÇ}Î"›+‡¥÷ÿ­÷÷¥:=ïþ[õ÷âý¦ÿ¾>Ôʉ•×£xçÿýþkxæ=ó‘à?—‹;ü3þ·sÓZ¶ö½ËÏwµs={LÈè¿”›Òzï·µ¼–êðÔW;«¸ükƒmðÈö½p\íýîëŽï?~.û¶{‹ÿÿÜÕÀ¿và_;ð¯£þ#î!÷þ_‹Þ?­Sþ Ï?üGÕ5SÏûÝññ÷ÌöÚ>¥m¥r¥òYü{¯ë¸®¶ÜÊËYþ=ç:³Ý:·‘ºöà´ïuY×9Ûo£ýG.·úˆÕ–j‘­ÿ[×5Ú7zzÏánÿmwÊ]!"ü÷xŠö?SOvÿÖøõ\w¶ÿÞñ´=ŒøoÝ‹Ôö÷ÜÛyÊÜfóo]—µ\ªcÄýL»™é£WGFÿO«ýE´Oüø'ðŸ#jÏD«Ä-þŸ Â÷_Úà_ükƒmð¯ þµÉèÿøî¿DkøÉæ¿ä´¶ÿódô_ 8‡Œþá:VõϸC6ÿÖøû82ú·À}+ú‡8ð¯ þµÁ¿6ø×ÿÚà_ükƒmð¯ þµÁ¿6ø×ÿÚà_ükƒmð¯ þµÁ¿6ø×ÿÚà_ükƒmð¯ þµÁ¿6ø×ÿÚà_ükƒmð¯ þµÁ¿6ø×ÿÚà_ükƒÿ0þªœò{UÃÄ݉mkBTúÎÊþ€j xœíœÑoÒ@Çùÿ|ÒGL¶ÄÄÄÄG÷´ìQø >. aÂ@ØÂ&¢'éïz×ëµ§|>É'…´w÷ë}×k—¥S ÀJ¥T?P,yäFöùÍåî|ÆßwÍÒŸ®­k~äŸûÙëöÛô•WŸ¦ã@6öç2Ïk_êÃ%?²Ï—´ùt½þ]ûôѶø^ÿ]ŽóÕ¶äùìgÚù‡CÑsÉïÿ‡ ¹¸±ÿÞV^ï‡%µIK7†´ßæ½Ci<Ó¶.¸Ô^Ò»àiÇØôoÛŸô~jÚ{«ºtßmÚfÁe|ߘ^¶möÕe—tŒI¶5è¾K×f–uC_j›6¾TƒnͶ­ÏæÝ]ù›Ì­kþ¦s•tÿq©Ãö½h“59iŸôó`‹ÍõaÓ—T[Q׿”Úó‡kºós½Þò¸?ºŒoÓWZþ¶uÙÖe­Ì3ÿ¬ýç¿íúfúŒu-3¯¬üóXÿmö‘Òœèž?²ÎSÒzj³þÚÖ¡«ow+õ­»Ÿf½ÿ¥µÓ{Ú½IW/ü ‡ß± {—ãà<99CϾxùF½«7Õh< NðÏb±TOŸ«Ñä68g³9z6"ʼšïÐnгqþ“ë»à,{nLæN·ýŒó¿¾ùœƒÁXõ#û“‡Ï¢}Ùþ «Ñx܈'«¹“¶ú[ƒd)çµï7ùO§³à$ÿâò¿½›g·{¥º¡êt®þ~–ìÈvtveµã­MË?ª=VWGçÖ‰jê7ù—ýšd«u¹¶§Zí‚ÝŒ-›–ÿãã{²eÛêsœÿýý28É¿¸üçóep~l~5ô[&›õm·cG9ë¶îú=·ó¯7¾¬l«ú‡õ6ƒU²mч1%’šZ´ý•pnëšãü‹_Áùþ¼…žó_.çy½ž 9ÿ·µOèÙÏ­ utüºô¬“¬>…ž===Sã½ÒÿÖŸdµz„l­VCĵìõK5úÇpˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆˆŽyüAa0ä'mkBTúÎÊþ€unxœí›MjA†s7Yt¡Q²%*¨‚q£ÜéÄ#è=²ðãOt5·ˆ(!B Á´VëL&M×õÔ×ó=/<ÌØÕÕ]]OUM§glö÷ß7 —o‡?`$Ôþý1Ôe:€Rj¯?P—Ú÷à¦öÿ?ºü>û>:$´[BJP{ýI]³j·]B´"¡ï%´A+ú^B´’Ó÷&_÷¶/¼â\¤ö½É—ÝÍÙ»·ÍÁ“ó×”1Ú†µµµêýµj¤ø79xx·9yý¦åôå«ù{³=v tÛ`ï}ã"íþçc`ãjëúôÙ‹9æßþnÏýüOñïº_°­.Ƕ}ð>&ë—ÿ9ÿÿ:Y¿Rôþ?uþÇ”³þçýý?¹´qáµdJ®ÿ%}®ÒÈ}ö2sžê¾„ÿÙ{ßýŸkß”1 ñï¿UmƒV$ô½„6hEBßKhƒV$ô½„6”ºÐËcÚ-aÞ:Á¿îà_wð¯;ø×üëþuÿºƒÝÁ¿îà_wð¯;ø×üëþ—óÁmËŽ&ÿ³ßjyü˜2ü§ùÏé·þcÇE·|È6Kôßýmµ«Ì6¯\õ»ûÄÔmCß9cËÏ5T¤ùY'sÖYט­o+bþiþM|ó+tÎôÕ_1k¯]ø—5ÿsÊ]çäó¿¼ÿùïò×7Gsëw3ÔçÿÐîM¤ù_¼îkŸú¶m¡õûŽê§ô¸)‰þW1)þ—üëþuÿºƒÝÁ¿îà_wð¯;ø—›˜gM)ß“˜Hò¿Œç¹I}þg;ÖûÍ̵ÖLH?ûž5ÇÎmÛöîyBëÎ"ÕèóùòÐïoCcóòÝ•ë81û…žkŒþc¾Ÿ+]’ÿ1ljÙ/gÛb$ú÷]CÎüî«›âß¶¦»Úí»®˜ý´úÏýµÄý…ëó8µ]1ǵÕ]ÿ1ë¿oúêÛâZ|÷c‹ï}kL©û[›}÷RüÛ®Å×/)ý³ïÜ’²þHñOÊ'dŒâ_wð¯;ø×üëþuÿºƒÝÁ¿îà_wð¯;ø×üëþuÿºƒÿbùãÌבØÓ}mkBTúÎÊþ>‘xœí›ýoEÇù”¿È‰‰&&j4ÑÄD¢ýE4bHÔ‚€ ´”+*½^9ZJ¥HË›¡M4hÔµ`KÁr\Û{+÷VggïŽë±;/»{·Çí÷›|2»;;Ï<;ß™Ù;®POÏÁåæ9À#‚ß üezzPüÞ€¿øýù‚ޱò; ÎÄöMÝ:ø__ž|?LO}0HÏ|¡g·ÑsGé…O†éÅÏFèåígèµÏÇèõ/ÏÒ›;ÏÑÛ»ÎÓæ=ôÎÞIjÛwAËûÿV—„þ‹êuý¿|é’+üö¤‘¼rè'j›¥-çæé£É;´ýÊ휊Qçq ]_¤¿,ÓðïË4þg‚.Ï$iúf’®Í¥¨­ã¢RüñOŸàÞÇçãÛ6ñ’³Í,«ïñÂÿë?ÿ°†é©Ë´œÎH šÿåõÿtÕúÞXÿÛNÓKlý¿ÊÖÿíæúËXÿ_ŸW^ÿg¶>N«‰«%¦h5ÉÊä”y^]&Kõ¥{GY;/üÿçÖ_ÊþßÏå…Íÿ c_ÐÕÙwéêœF;•ø'ßÛ@ÅÛ‡9Ñ-(ÊÎOnÙÈÊæ9£úãXSÕÿ¹Û34;ÿ7grâlÅÿÑSG9÷³9Ó÷r@ÿ϶sÿ‹Gƒ%ìŽËçÞNµ¶Ç¸·á¶õ–õáJýcJñTý¿uûF…áSƒ¦ÿÌëÓÑ#”ÏgyɽgdKó hþìäþÏ,M0&-ÊIËóñ‘¯´úéß¼ž£[çÆÿ; sŒY9Ùû†ÿ#C½Üû2AóôÔîÿ|ꚣÑݾå¬êÿBlž†#!ÊdBŒ{²ù`útpÿã÷gh±D¼ÄbUY9^11ÚÉbŸœâ…ÿ±ø¿ ÷PüÞ¼Û#ŒûrùàùØÏýOgïR:g3Kã<[{^®g×Ã'öKcÏ>#üš"K„u§wxâÿâRŒ†N¢ùÙ?„÷ä NÐüïëïæþç‹)FºT–«Ï×^?v¼[ÛxG~ÞË3rÊ8CVç…ÿ‰ä"'òm÷C”½7ŽËÞÑÿÃGCŒÃ¼ì)Ó*]Àî‘ÅŽ„÷qó#®ûÆÿÓ™$¥Ò N¨·—þ/‹4ØßŽ7Ê;/ ‚æÿPŸí>| tTP×'Ýw¼‹ß›`ž& %ò&²:/üϬ¤+ „ÃÿŽàǵÍÿŽî~îÃB–ènÎ$–3÷âŽCý´ÄüX.ù“d¤™¢Y'‹Ýêå±SE³]ªð ”Õyá6»Â¾Ó¯ðrì»ñ’ÿ ß •ëAó÷Á0÷ánÖôÝ ž7Ù}p â}ªÊû•U¢]¬,öÞ.sn­MŒ¶™‚‰°®[<·TýÏçsì3}–sáâ•*ÿ U¾¯-ƒæÿŽý[Ú :Í’_ë4Ê¡J4vç #ÌËv~\‹}[ÿñû_ë‚ßÿ@#ðûÿŸI,Í‚ã÷þ€Æ³nݺ¦ˆZÓ£®L£òiV¬žMw|%ÿk¯«ôÕªþ[yìd|ê•—]~*׫뭮Y=£Ý³«¬¼¬îÕw»ö¢eÏ(êËÿuýQy^7þ;É_”—Õ¹J*1EsF§m³ìÿvkG6ΪsÝ ÿíòÒÝ_¬G•wµêûÐoïøà÷úWñTuÿu³«ìÿ:c×ìþ«î³ªïY/âËîw²ÿ«ÌaÝçv:ÿüô¿|l·¯ª®3Ñg%«}¼úº(G»ýß®o7óRÖŠÿ*ù5Ã|h%0žÁþ€=~ÿýð‚ ‚ ‚ ‚ ‚ ‚ ‚ j%Yý-¦J]=ú/ŸC—ݸ×^÷Ò«ØößÍü¶Z:1jç½U[Ql«µãt øo·_¨æ'ËS6>nŸßn¼)«1å"[Nóù/WÝ|DŠæ¿Óø"yµ~Ýî!vç*ñk×R=ü¯çy½ûÓéËÉüWm߬þëæVïø²XV+ù/{GØíýNû“Å—åU]çtÿv#•Ï/*ù¹ñ^_ul¬žÁ.G»¼eï™7²ºfXëA–×û’Wñ¡úÊ;ªºî±¾!‚ ‚ ‚ ùýýÑ«ï°õ~ŽVþŽí׳¹ùýJ%ž—òcŒÕ§êï¢z«8¢ö²ß\d¿ xѿʿÁËrµëßî÷Q~N~ûµµÊIõùd×Dã餽Ý=ª9ëö/‹/j§Kt®ÓiNVó[µßÚvsL$«¶NüÅ—µ•­!ÕýUgÌD÷èìO²>tÖ—î¼Ó¯šŸJ½—þËä·ÿnîo´ÿ^íï²>dy¹ÉOCç>ÝýÛéûIOÔ^õX¶?Ú½G¬Ú[å£sÛ¶²ütž½¶»ë²övù©ö¯3¾*ã¢:硵¸[ð‚ ‚ ‚ ‚ ‚ ‚ ‚ &ÔÿüTfP¨W IDATxœíÝ{¼eçñouŸ„@€€À(„{ä2„$ HèÈÕÄÑÖË8»ë¾fð6 Œ³îìK , êÈE¢##'Š"‚àƒ IˆÜÉŠséîÚ?Ω>ÕuêòÔ½ºëó~½NÎéº<ÏSOUýò맪»¬Í›ž×3Ï>k¯[·nÚtTÛ¡‡ª=vßÝòNr¿p'{ûí7¿ ¦åxì±Ç»Ož %¶€lÜ9<¬u’íMþ,g¤ÏIøHöPG$€€AsçðpϨŸµyÓÝ„oÿý”Ü< |6l–DòèîÄϺ÷Þb'|ï¼ä:YÍ!5›MÍš5GCCÛih¨©FsHŸûàñùµ(І ›Iü}ÏIü†¢°ê#ßÑMŸ8E’ÔzÍ ¹âí²ë¨þxÝ5{Þ:à5¯êÃõ/¹5(Úþû/кuë´NŒú’ùç«þ§Ñrÿåâÿ‘{9CëÖ­Ó,œ6ãÌËŸ—$5íGÕþÃVI‰ßÍŸ\®¡çÖè—×WÍfS?µƒ††ftGú,kÚ‡E€¾åœëÖ­“Hü |æª/†Î¿ôâ‹r-gÙÒ¥ºsx8|¤ïæî&i7IÒ™þ¶nþärIÒe'nÒ›?|ç´åïýä2I'D·(Ð7n¾®û÷égžo<Ï퀒øJeš’ä;:×´•e½¦ûú–O­èþýôÈlIÒüY½ëÜ:2;p¤oÅ©§jÍm·¥jl˜§ž*IZsÛm¹×•¥,ÚÚOÛ[çÝÑ¥_¤3V½K’tËM×öL¥>ðÀ}Iü±¥MÖiG }GúÎøÐšîow²çxùå=%IÛ7lßénÞ„Äïµ[’ä%(é K†ÊH”²ØÖ4ušÔ7è äg®úb÷¤ˆ:yüø∺W¯H¾Iß-ŸZ˜ðIÒSc;êÓs‰Ïœ§MqFÞ¤è0kUJ^ÊJ2‹ìïª:cÕ»téÅu“ÿ‘¥Æø%QÂ’“éQåùµÅ$ Û&S~ëÕ• Å­;ª=IÛ¶¬iòï7/«m̉ Ÿø&}îïáû£vÕîsš©¿‹¯*ÿQ‡©RB!MEŒZ¶¨¶µ+NLF{Ãê»ÞÍ7þ_ß{øœ{ü’ŒöI$~€þá{y×ý=|CÍí44c»\¾‹/¬ï<çuÒé~u¹§}gÍćWNY±¢çuš6EM‹*ׯ Ae}gͲbEÏ:AuÆíK7o§¬X!˲û/ªo¢Ž%ï|“ýäuÓׯéIø¼äp¿UïxwdY~>x?@î2ùʯ ïᓜïâ[–ªRÉ?I©§]y”™f[MÖw×ãWgÒ6ÄYÏ´ÿœ2“¶1é~r'w~÷ø%EâÈSŸöMú‚¾‡Ošø.¾¬øýÇíNXÜÓ²¬Ç[‡I}iÛ´­qÚlÒ¿ÄÏoÙ ¤ÉÛ/&Û!)°¿éîÄ.,!ökÒ}à¼;ræ­zÇ»3ûî$‰ÄPmÖêÕ×Ú‹Ð3ñº/®Ö¹W~I‹¶·§­ðÑ¿¾Hç_taQíC{ëòåú÷o»ìfîá‡óz•ø¶àïá“ü¾‹À”E‹кuë´N"ùT†ïH€l0ꨂîH_VŸÆÐëõ¯?Q?@%ø^Þ׿þ@Iê&  x$}@AœäO"Ë»@ 9ä îß0Ҕ̇‡Z¯FÙ@þzFúzh}Yí@ÆÜW“¦]Þ]¶ti¡@öîîyÍå]€ é Dwkþ‚½Ên& òþ é ¦Çnx£»á±çeâ+[ã=ÿz–¥fÃR£a©Ùhh¨ÑP³ii¨ÑÔPsrZsrúär†¥KVìoTÇc7¼QK>²^k?üuKÎüýÎy õ6mÙ²1Õúûì³oà¼Mߪ셋ΠÕö°¶¥µ]QíN»­Yo›S~šr“¾2:€8v?p_½æµ»k»¡¦f54kFC³†Ú~¨¡ÙC–f54{Hš5divÓÒv i»¦¥k¿i–œ­¿v±þì¿=*Ijµl=zíbÙ–%˶'°$Mþ¹ä#ëõÿp z×ÏRo׎»4{^¾ÒÑÁ‡E&>øÀý¡ó;K{ÿÁÈrž¸óãš»ø™žiÛ~õºÈõ$é˜cõþã»ï6Z?‰Ñ±¶–,ÿ½ß»"óú¶lÙ¨7ý&×K÷þä¾Ì¿-[6êè?y³$é'÷Ü›¸ÜX#}Çœx™ïôßüûßhÓÃ7øJõì£õüo6MŽòMŒêMö54Ô´4£Ù˜šÞ”VCFô“©úÒôÖ~Kö–déÄKo•dI¶-Y®ß²eÿáI¶N¼äV}çÓoСïùyêm›7oÏîß¿{å)IÒÌ3R•Ù²'’ÉÝ"Šybò÷ÎsŽëN{¹ý¸Q¶-=ùÛ§z¦íõº×·1©Ž-Ý÷Àc=ÓŽzã~¹×›µ-[6ꨣŽT§Ý–,é¨7©ûî½?Qâgœôµ:Mul[ÖäÛ[šü[ÚnήÚý•ÇIü¥úè 5óЧ¤˜OýÕk%…_Þ=ä=?×­ÿðÇ:íÒ‰‘¢Û>{™dkr¤Ošøg"Éq–ùÖg.Óâ÷ÿ2îføj4²'G_}õÕîô;¿ó5IÒ²·þ…'ùŒÖîLÜÚï·ô¯®ØC’tØeÏhëÖ­š+©aM¥ mÛücaIÞ–-ewlÍ_.!sî£ÜuëVÙ¶ô¦ÅNb4±…¶-µ;ùûÄKü½n±Nüû‰övÚÒo®{£¶¤{þéµ²mKÇ]:õÅãÛ8Y«Õ;ÀhË–ZtðBúNŽæ.:h^¿Ñ8ñ‹•ôu$}ïǪÕêhl¼¥‘ÑVϨßûÎ>Nã­äé™ Jݯå½É]TÂT{š·ì°Qðvûµ×¯Í€ôÆ;ÿ­ÍÚ%Þzíxß`–Ðeì9†~òƒ;tâ)gL›7>>*IZöÖÓõÝÛnÐɧ#Eôu·†:’¤{/ßS'þý=ê´Ÿ—$-ýðô[üÇ?£×ÿí±Fúøå½Ý׋;R ö=صÄÝö/~ãúÙ¿0Nü¾æ ú3W{—|¤·½öøóúÚO§>¸qê‘_P+æ¾6ÕngZÞÃl’$½ôüF½é¨ÞÃüô¾»µËn9ÞÓ7ÖnªÝ¶µä¨¦ Ž;Ú[cídß”ܹ'ï2Y\v¿öK4ýæ›NúÛï5 =gàaÖÐÎÝQï…]÷ôÉÛð4nðWš¯7Éâ~÷F£©N§£‘m]î˜ã–é;ß¼^Ëßv^d™N5,é‡ÛS'_ö%Ù#á—º[­ŽšYæ#}²µõ¥»¯Ûíqµ·'H¸@<²Aó„ßc¹î‹GèäËVG¶w볦궓ç)^î¯hyúÉGtðAó{æ?ýä#=¯ã\†õ.Ûò$”»ì¶o¾äk ©Ý±u×ýGúÞóŽc5–ÑHŸ›_ÂW%aí6Y 'y›ií0™ÝM¦zöäßνIÝìÏ’li¼ýßa«ÓÐkÿ¯¾óžúÁ?Ïû~6_Òl4ÕéØy5<éûɨSÏ|—Q™­îHŸ­ã?ö;ÝþÑ=´òâËÃ×·5Ú¥–AŸIW"wÞe^÷u»5®ñ±ÑÀåÛôtdÂ'I‡^ô ­ùÄZqñ?/4k7í¼ûTYŽÕ ÎÂþû¾¶û»5Þ›˜ýé[–vÿÞ°±÷ÓËqu2º_0ÆHß µ:Ò±‹ýw„­‰kÿcíä¯jRÆo/H?nô“Ñɤo»¡Ùšþiúuª‰é&£?£ãÿ¿í1S=· Z’6…Í3LŽ¢4›M¸ü ýÇš›§Íû“cß"Iºçî»tÚª¿4.ÓI’“ýrÒåOë›ÚCo»ìã’¤[¯ø;yï<áòO¬Û1»LjÛ¶~T÷õoŸxL¿þÕÄ'š÷xÝAzæ·ëuÌŸ/i"á‹3‚uÄû~¡[¯8\>ÙÞo^ñw­t>Q-[oûØ]Ýå_étR݆æ¶Ï>ûjÃÆÚwÁî¡ËmÜüln_BWŒ‘¾¦:é'¿é;ÿŒc3ëL¿K£¦£}U”¸¼ yo é‘ï¡GtÓTzgM]Æ dEÿw82™Ø5&Ë”ëwø¼íLš©Ùšø¤î©ïÐM7}C§¯z»v˜5SßøúÕ’¤ÿèzÛ;.ÑÍ|“œ{®Zùé§uó¥{êÌ\í–­Ó>ó´þÓ_¿Oõßçèõ»_Ò]®ãƒOüöyWþ½“Nùósõ³ûÚ“ ÅMøG~àAÝü©Ãtæ‡>¡vK:úÒõß/ÿ˜>ùéÿ­üø!Ý~WKNåÇk¥º"éµÏ>ûjãæZ°÷®¾ó7?ñBe>)Ö9&.ï¾éðà›+ÓÜÓçþð„óZš~ïœ÷^?÷²aå9Ó‚ê1á·ž_=~ÒÔ 03ÖÒq«Îõ÷Û®×q«üïsûáM_Ž,{ÛdòÖ”¦ †ÏK÷ÊËjt¿~oûí·ïNït:úÑ]kuæ;ßã,i\fÛuy×íôÏüN7^¼gwÞÜv“´MMk*ñ)Ø… öéþí÷U2I>ÇÑ—üJ7~|êÕswÚMŽ­ãŽ~½k)[Ž­V†—w¥‰Äoó–Úçu;÷LßòÛ­•Jø¤8I_«©Ž-ý𾇧ðuÚŸL.–ñH_P¢5-Î9‚æGÕcòwœò¢ÖdÃù?h·SßOlMþŒ·‡ôÚ™Ói M¼6H`¶M$<ÆÄÈ¡=¹®m8/­f£Ñ½ÈºãŽ;MNµ]ÉžºÓ&|e‹ó=}>‹®úç§»ï²ëë$mèIúÚÆ—w¥›6÷LÛwá‚îßY%FîOMï²ëëÔ±¥µ?Z71aò õ’?=4³r¸í³Ï¾ÚâJüª˜ðIq’¾NS펭cŽ‘£Óéhá‚ù=#|NÇhݤæì¸›:¶­ã=Tîîtl;·¯lq?çï<ÊuOKÂ8ék·›úêwÈùVkËš: ¦7èœJƒ‡Q:¨¾V§¡oyú$ÉVS_øâÍ=âí>+×àÿ®ÑÖ }ûúå<¿¢wp,|^Z/¿ÔÖOîùI÷uÓ’|àþÔåv: ­ùòÍZ±\[³ô£5oÑô=×T³ÿïùó·/©¶fé+ÿönÞÝß’ì öG¼F÷²*×8é;ï´Å™T@^ÞþÖ7çWö)GçVv˜IÎë<ãñ°\~Û·€´B“¾~VFððÖ9È èóì¥ï¿åX¼ËÞjmzjjÆó$4k}ÿ-Çê„»îNœø9çyÚs>Ï„xX¿7ôÊ™ômÞôD÷`tÿvø½Sñ.ï]λ¬wšßòqD<&ušLw×åW§_ßùµ1jôÔ´]a}l\‚ö§_ý@?X{ä‘Z¸ÃêlyVæ¨óÊ«’mK’š´‡Ú¿{F vš¡µG©}oúfæõlj+~±6íyH<ì]6ïxè·a튔j¤/êÄ ;ÉÂÖZ>+¦u/ï2Y¶'i{Ö ¶nA—NègKî¿_ïÿcí»û.ÚaÇÙÒγeÉž±¤¶¶íÔÑÆg_ÒÒ_ÿ2Õ%Þ qâ[X -«}ÄC³mŒÛÄYÅ(é ;9‚2Ó8iB—ÇèSœ¶y’µ+N¢\Tý$ô«Ç7?©¥¿þ¥†.Ò¾ó¥¹{ì%i;Y’~ÿÌ“zìñg´lÓù$|a¢âMœ„ƒxX­xH‡ªJ}O_Úƒ5éúyœ$qÊL4âõ4½’VQõyz|ó“Zºéa}ïö×þ’[ÿ¤ö;h/mXÿ[ø»ßžðIñã|û3’ð¡hÆ_Ùb:¤FV—qýîŸÈ£-îzüêLóNÒTœÕ 6fYPUo~R'þnƒ6¬{\Ë&—•ðyåyýËÌ2&é_>”!ÕHŸ÷¤ :€ƒ‚NÐúY©¸7Κ¶Åï¶÷^¿eMú èž¿õâÜdíwC±I]¦ûèo~R'>¿©çwâž[iÏCâa¹ñ0ì>vo@ž¬Õ«¯µ9ä IÒC­×ª3–äþqÞáäƒ~EÜ9<\HœªzŽxˆº»sxX’äÎñ ûž>FŒÊSXÒG¢—?ú&éúâÙ»HgÚHßM·¬-£`¬ qª m€8¦%}Ë–.¶ÐÃúà‚ó i„¹úêë|ãT‘ˆ‰‚Ũ¹szúÅ?è»kîÖ,˜|¤=m9[’åþmKëݤ姧퇶ÕçÃŽÂî騳á;îÕÉ'§E‹öµÞ~oÐð÷håò%©êçž>€‚ÄMø’®ã‡‘>€µÚíXË5›™ÔKÒP Ñ‘ñXËÍéMú¼÷ê¹]pÁùO"é(ÐÈÈØ´igž¾R7ãvßåçÌ™5mھ˿ð™qO@¶mëù9óô•’&?ï¼mÛ¦'ˆI‘ôèÕm£ÝŸsÏ>£gÞ¹gŸÑ3ÿÕm£™ÕKÒP ‘‘–FFZzï…gu§}îó×wÿ~ï…gu—ieV/I@ÆÇÇõ÷Ÿ×}}åUWk||\W^uuwÚÞžÆÇÇ5>ïCaHú dÛ¶®øìjIÒŸ]-Û¶»?~Ó³BÒP'Á3î¸à‚ó'žÏæ÷‚¯lè#AßÃ…‘>€ é¨X—w-ËêyåÍ…¦uYgy÷±4Õçaóò¨ß¶mY–Uø>÷¶!m9Eµ?êüŒ»ÿüú¾ŒýQgĽb÷ˆ{îåóŽ{7mÑܹÛÇ^' ±’>ïÁ˜¤#’vžS7ò¶oý‚Q–'ƒ_ÙEËrûŠ>f£Îϼ÷‚÷ª¸GÜ+Ê;ßy†®¹æÍ›7/Öz/¼ð¢Î:g•Ú£¯†>w×mÙÒ¥Ó¦¥ú GPgz—ñÎ {Ga2š˜fý¨¬?ÍhfÐnZ†ûRл%“þõ–§ ixÛôÚ´}AÛÔ?i·?*àûÕÕ¿:¼å‡m_XùaõxÛWÐz&eÖqtЏ7q¸ç7?hÝ:Ľm£³5s–­w_xŽ“ëX–¥fÃ’Õh¨Ù,«!gs'þžÚögŸÛª¶ü“9S™~z7jX4ªãL†UÃ^G­4?NýaÒ§‚Ú·Óüa‚NL¿“ÖïuT{ÝüÊꓼ·ß¯~·¨7@¦ûÏ´|¿:LýŸâ #î÷ˆ{Ľ~‘iÒçwðf½~ØÎŠZ?êä’Ò ­§}Çk²¼iûòzްÿŒ²,;¨ü²OØ8ÿúÀ¤å›¿¦ír·'ëþ,{ÿ¸GÜ˲ì òË>¯ˆ{æåWY!#}UZ?êäJ³ãŠØéýr`q¿ ÍëÄ˳ü´²q«â6Ö q¸…¸GÜ«ŠT_ÙÕñ&+l¿yqƒaÒu‘^Üþv†øóTOÐ;Ô¤Á%ëmIÒŸeÆ¢öcU÷ê¸GÜ«²D_Ùâüö~ö»—!ìþ“{#¢î—ˆS¿É½^E@îþu·ÅymÒ¾´ïøÜå{÷³wÿ{ëv×ïþÛoT!¨maûׯae$½T~ÔöGQûϤÎߨóÓ¤ü´‚êdĽtˆ{Ľ¨í#îe'öW¶Ä]&èà,cý$í/RÚm÷.“ôäO2/h¹8m0mwÖ— Lçgqü§éß¼ç{—õûÄä?•~|Y#î%GÜ#î%iWVó½ËzÜãÙ»(Tšáoï@Öå#½~ |@‘ˆ{ƒ­ŸâI •æä¨úˆÅ I:â q¯ zÜãÙ»5@ÒP$}5@ÒP$}5@ÒP™%}ýð§îŸ°åÊÕ¾¸åä¥êû» ¦Ç˜{ÙA’vûû­?úa÷²Uõý]âžÙ¶WAfI_?|û›ÏMïS4÷£k‚ÚgªöI\U?¡œýæý;hÙ~Õÿƒ¾ý^ý° ĽþGÜ+WܸWe±¿œ9ìx~Ëø=Î$lý¨`dRžâ´ßï‘.QÏô{|÷™”Þ T~Ô¾ Z7¬ü°¶úÕï^.è™–aýã·|’ãË»mîéqö»Œ 6„Éóù~åg¹}Y<Ã2jÝ Ç õâÞÔ<âq/¨}uŒ{U+éó;àý:7èuÔúAóãÔŸ§¸í÷hiÛï”a'MýQåG19ÑüNΨöy—j[Øöy·Í/–Ý?iå½ÿÓ&dyo™ˆ{Ľ ú‰{õŽ{U+éó¬AË$]ßo~Ô;š$’fì&Ûï]>¬î¤â˸õgupÇ-Çdÿ§å./éþɲòL|¼í4­¯¨à–÷ö‰¸×»|XÝI÷’#îU'î•-“‘¾,×zG˜ÅŽÉj¤Â™VDÝY)»þ(eŽhøÕ?H²8~q¯üóªìú£÷òCÜë•êƒ~7 LºnT¹EìT“:â¾C6š6U…;¬ Yìÿ*lcRAmÏòøÓÿY—ŸçºUCÜ‹¿Œƒ¸GÜs¦×!î•-VÒç¾öí½§Ã{¯€ß5ò°õîùQëÇ=Hœe£÷rÞK"aí÷k_Üö‡õŸ·]¦ë†µÏÛ÷aåG‰Ú~ï2q÷Tÿ„Õï·ï£ú/Iÿ¤9~¼m‰+îñÔ7aÛÖÿYn*[âqÏdû½Ë÷?îUYìOïúŒQ˘®o²ÃÓ,“EùQÛwý8Ë$Y7NûâœpÎIwû½Ë$¹„•dL»´ý“öøI0ÒÔŸgÿ›Ô/Y+4çqÏ|â^ôrĽjŽ«¯¾Î¨Ì2ðD bú%é)} &Îíbô!1NÒìÕ½Oë¾ý¨>ŽÑìѧÅ!騒>€ 騒>€ 騒>€ 騒>€ 騒>€ 騒>€ 騒>€ 騒>€ 騒>€ 騒>€ 騒>€ 騡²%˲$I¶mVWQõe¡ÈþI¢êíó*º½ýÖ?^ýÞþª"î…«úqWõöy÷ú[á#}î ‘õúE„¶mw².;¯õ³hkÕÛW¤¢Û[…þI³ÿ«Ðþ² ÂyCÜËgý~;/ˆ{ý-vÒgYVÏOØ|çµ{žß2qê6]ߤ}Iêjà ÷OÕÛgÚ†¨}ÖÆ¨ºÓ–w;âÔï7?Ný&m7-;h9Óþ«š~>¯Mê'îU·ÑäNÛ­IDAT}¦m î•÷ª VÒgY½ïôlÛžvòÍ“¦2ö¤ïM×w·#¬}~mŒª?¬ ƒÞ?Uo_Óíó.´¾_pKS~’íˆÓ?~óãˆÚqö·,“õ«ðŽßO¿Ÿ×&õ÷ªÛ¾(Ľâã^•e>ÒçVV„Õ™gFîlýÚ?qÛŸ—²öŸIýQË™´/í>Oºÿüægyü™?auWáøK«jçµDÜsê š^…㎸—¬}ý÷ª"vÒçÍh«žÕzåÙþ~Ëø½ú¡ýU?þÊlŸÉþK3bEýN‚T}ÿö+â^°~hÕÏ â^u÷WîäˆêÜ´_å¬Ú¤mUîŸ,ÚŸ÷úeªzÛý.Ãä]‡é¼¬oÕTù¼Îq/›:ªªêm¯rÜ«‚XIŸß0¦÷Ú}Ô0ªw™¸YqØúN[‚~Gµ?Š{y“íwÚV•ûÇÛþªµ/îþ‹êÿ°}ÖvÓöE•%‹ýuüE ÛQõûm¯»Lû¯júí¼&î÷ˆ{ùǽªŠý=}Qd²Ái;Åô²QÐ0oÖõÆiC¿õOÖ}¶~™u›–fÿfÝö¸û/«`gÃê»yW_}Q;‹ÔoçuõÆiC¿õq/|âžù¼ªá‰5@ÒP$}5@ÒP$}5@ÒP$}5@ÒP‰’¾¤ß ž•²êõ¶!hº÷È ­*ÄâÐßb'}ÎcFœŸ2¤©—` ÷¤ë1lAÏLô.ã7ßûœ<÷ô eüÊ7icPû¼Ïì‹Óþ8¢“tÛTq¸ôƒØÏÞ ã—ºGÝ$ö †Þe‚ÊLR¿·®$ë€q@¿È4é3aò ä2/c¤]?ïíЈ{Ä=  Oúò–6°˜®OPÄ=&b}Ã}yÂÑï7×õÓÇꋸÔSì‘>oâçÖº¡Ùä¾Ó޽7ûÕÕÆ¨öûµ!¬íQ¸™,ĽhÄ= ]Þ ;qMïç»$Iù¦óÓ–w¹¬×P=Ľ|×J=‘Ãï« €q@Q*õA€º!î(J¥Fú’>€ 騒>€ 騒>TÖ …ø!î!O¹|eKØ7Ë')§ˆ¯4ðksVÛá.«ì¯g0ýæýªÉªÿÜåTeŸ$•GûãýÞY#î—_ö1BÜ#î™”é6¨q/ó‘>ç1=ÎOšw-Evª_]îÇåQ~œýâý»,ALJ÷qO&í,òrÞç±ïâe;UBÜ3/¿ Ľl÷ªsL'•éHŸßsè}‡ôn2ê]fÐ3.ÝóÂÊânoPÝÞwÄ~ÛöœMÓglæ±}QLÞñdñN'M&Ï5=i‹>Óî߲ϓõúýp\Ä=â^Üzˆ{Ľ²úD§ÓÂKÐŽö›ïU~Ví÷{í­Û4šÊ¢¶/*PçYéü°þ“Ú—eK»Ë>?¢ê‡¿ªïWÓöû½&Çt>q¸—•RÃfÚñÞ`#™uxÚƒ>ì]oœºýÖ*³ˆí +7ìSÚú³x'”äØ Ú'qÛv,f¹Oª~~„ÕŸeùƒ¦êû•¸^qoúkâ^öåç­RÏÞ5Ñ/›TÙÛöŽ)«²ã¼£M*w¼aï´«¢ŠmBzƒ¾_ËÞ>â^0âÞ`ÉôƒAxÚwHeÊæÝ’´¯ÊCæms†Ê“r·Çe²Oª˜²Vö±TÚã£ß÷¢Uùx îõ—²¥~{™ôùÝÿáp¦ÍºwÄ9˜£†U£Êã^7l ûYÜåø½³ó®ã×¾<·ÏÝ>ïßa÷+äyIÅ©Ïô°³^ØñUå u© çGØñU¿ß:uAÜ#î™ îMMsTáü¨SÜËåònІ›tˆw™¨×q˳®Év$Y&é6dq@eQ~–v’:Ó_YIZWÚþÏûüˆZƤ¾~|y î÷L÷â•IÜËOä@eôËIƒ`ìC Ιþ×Oû¤ Húj ôž¾ù ÷–$] I¾«€æ@¸ \?¾é‰Bë&&ˆRfŒŠýAŽÉkÕ·­ù~ÎM€h§®8aâ²¾˜ Dé1*—wj€¤ Húj Ö—3Ÿ¶rIà¼oݾ6ucªÀÙÆoݾ¶çï8ë ª¨ýŸw z»û×ÝŸÎk¤ã|Ã+éÖ§­\20û…¸Œ¸—bZùbô}ëöµÝåþ;+a'Xå˜Ö“E?$is–ÛiRVØþÏû$ô áîW¿ßÈ€m÷þTq/ÿuÒ”EÜKÏy“”GÞs±Fú‚v”{º÷ò›çL z]ö»“:,èµßïÝ´{™8 êoÝîé¦õ›ìÿ¤íókcXaå1IKsü!Év›®ÕÿIæ-Ô~¿}ä]¿*ß~OÜóŸçOÜ«wÜs—$.˜ÄÓúóØ~¿öU%FùÉôÙ»~—;‚N.‡7ÐôÃ%“°6úý'åÝþ°õý‚’iýaýï­;(šÔ%(¸šQëøµÛ„ß¶&iŸ·¼)z¨Ü{âåYw’wÞ`ìW^XY&õ˜.“ä–Iÿ›´#Í~ ì&Á"ª¾¼ŽŸ~&É̪ÿÓÌOòŸE˜8÷ãeqO_PÄ=âq/_UßϑyÒW憽Ó̺ü"2z¿:LêϪ]ylcÐ;ª¸â¾Óô[·_FW¼Ò´7«þO£ôþÎéËR‰{Ù î«sÜK«îÛïVøW¶x‡ÝM–¯÷p®WÚöš ‡ÕŸV‘ÃÔEŒZå)¨þ¼öMÖêÖÆÇ7=áûSâ^8âž™*ǽºè÷í·V¯¾Ö>äƒ$I=´^Ë–.íΜ¿poßG…]>ðë aú áê$—'¼Š<½—‚ÚÖ7î²’ÔUGÐ= IÞ™l_P?DµÃ´Íaí0v‰[Ø2A—‚Ò^† ÛQÇIÙîõÂúÔ¯ì°ù&m39¢ÖïÞ$mYå<{7"&:ˆ{SËz÷/î…ÕéÇô¼Oó¼mÉzûýÚ£fÌœ£™³fH–¥†$˲dY–š KV£¡fC²¬F÷‚ÄÄßSW'ž}n«ÆG_‰µÍwËã%Jú€~W÷!þ QýR…~s?ײ*IЪpþ–©¨íŠQUHú2¿§¨²~šÏ“Ó7Qï†ëþÐoê÷ê¾ýn$}¨’•`Q}Cßý©îçnÝ·ßgïÔ@ôHßäõäSón ôb"€>šô97 Þ9<¬ .8¿@˜«¯¾®çgE"&ˆRfŒŠÂå]€ 騒>€ 騒>€ˆýåÌîG‚8ºÏ™ó™ïžç]Æoôâ€~+é³,kZÀr» ù9ƒŠ¸ _ÄJúlÛŽ|Gë7èW â€~ûònÔ;Z€º!îè±>ÈaònÖ´œ¬Ê€~@ÜP¶ÔäðŽò™~ЃwÆq@¿ˆ}O_QË@¿ îè…O@Ý÷T_Î P$}5@ÒP$}5@ÒP$}5@ÒP$}5@ÒP$}5@ÒP$}5@ÒP$}5@ÒP$}5@ÒP$}5@ÒP$}5@ÒP$}5@ÒP$}5@ÒP$}5@ÒP$}5@ÒP$}5@ÒPCe7`ÐÍž¹M;í´ƒþåÝ ƒ\0m~»ÝQ³é?·þÑÍ:ÿÜ“4>š® $}ø×ÿó5ôgªE‹öµÞüùô•¯Ý©•Ë—¤ªŸ¤  ‹í¯‘‘1½òʈ$©ÝnK’ÆÆZiI’FÇÆ46ÖV§Ó‘eYZü†ý5¼öžÔu“ô”ÄîþaÍÉ I@Y&“=[¶z=ËRÖ‰I@I,Ëžü-É=Øgg?ÒÇW¶Ô#}e±=¿%õùe‡‘>€`¤ $·v½wðYÊþƒŒôÔI@Ù,ïŸ|OÀ@Øu×¹¾Óýë-¹ÔGÒP‚^ø½®û·[}çpì±âË™À®»ÎÕ%ï;oÚô‡~½Ecã­Àõæ/Ü;´ÜÇ7=á;¤ ¡#}Ç›y}$}%é{\ccíÌë#é(AøHß1™×GÒP‚Б¾ñ¶‚>ÈtÏ^’>€Dz7[$}%9gÕJIÒØXK#£ã’¤ÑÑqz7)žÈPŒô”Åöü–ÔóL¶ 1ÒPŒô”ÄžÔó~N×’å35Fúj€¤ l–÷ÏlGù¤’/ïZÖäfÙÙoXN{¼ªÒ>GÕú-˲2iwVåE«ÚùKÜËqUQêH_Õ^§=¶mwŠ€ÝªÖoE#ð¡ŸUíØ%îõâÞ ³äÜÁ'Û’lK¶$Û༈+öHŸ÷ät„îwbAïÊÜëûÀqË*'-çsÊö«/jš·mQýãL3é#§Œ¸ýãîm‡_ðÓ¿aÛﮓà…AAÜ#î÷J÷—ç8Ìáp‰•ôù´îiÎížô·ó:mùy Þz½ÓÒöOÚÀÕ?aÁ2¬ý¦¢¶DÄ=âq™°$Yù7©Gúü˜ìÞwfY—Ÿ”_»ÜÓÓ‹"Úoº\Ð;à¸e9âË$¦¨*â^tùy"î¡_lÜ´E/¿Ü‰\®Ñh¨Ñht×ÉB줯*'nÞÒ¼ë,B^A&í;Ö¢þcªÊqd¡*Ç3qoªâòpÖ9oÓÕ_úšæÍ›ç3×–ï“8,iëÖ—ôîó—ë÷¿NÃTâÓ»y•›Å ti#«òãÖõ:nÙauÈq/~ýÄ= ‚m£³5s–¥w_x¶R÷¶„fÃ’Õh¨Ù,«!çø{êx}ö¹­’^IÕ†XI_ØðÿD§nÈu/ë¾9ØoX=h~XùÞyAëÄáW~iûǯ ¿{Q‚Öê“Ëi.sDm?0ˆˆ{Ä=âúE¦—w½óü–Z&Nù~Ò¼‹ŽsOHóâî4}—¤}ID•‘Å»j.u Jˆ{Ä=âúÅ@>{—“"XÚ–«¢_Û ä…s"q˜0pI'E¸²û§ìúAÄy®ìþ)»~ÀÁ³wj€¤ Húj€¤ Húj€¤ Húj€¤ Húj€¤ Húj€¤ Húj€¤ Húj€¤ Húj€¤ Húj€¤ Húj€¤ Húj`¨¬Š-Ë’mÛ¹×!ɨž8Ëæ¥¨6„ÕãÌsæ»÷“{ž{™8uº×ñ«ËOXýqÚV_ÔúY웨í+›·}y¶«ˆó¿Šˆ{嵸GÜóSdÜ«‚ÒFúŠèØ8uµ£ÓžÀYªÇ tÎOÐɶLœ:Ýå•ï·Žw9Saõ%i\&ÛW&oûL÷mšºê†¸W^ˆ{Ä=?Eƽ*ˆôY–Õýq¿öþí÷Úo}¿ya˹§‡•‘fǙԤ®8ë™l_Òmt‚\Ôúyœ ¦'•ß;Ì ¶dÙF“þÍꓦ·=¬þ°cÏû··ž$üöUœó/îùo²]U ÈÄ=âž)âÞTÒàǽ*‹•ô9'7#zçõŽÅož_=Aõ{wNPû²ØF¿íŒóŽÉ»|X?¸Û¶}Y¿+qÊ+ûà-¢Þ 7ª³:Æ‚¦‡Õv~xç9û/Ëc$îù÷ü_ÊFÜ#îe‰¸7¸q¯JR]ÞÍkãÂÊsr&i_vXVÛŸ´î¨“Û]Ò>k{™û ª³h[Ú2ÂÖwÏË£ÃúÇï?Ï4m¨Â¹X$âq¯,Ľpqã^•õݧw½'gÑ'ŠûÄMûŸZÒú³Øþ4f}_V,êøªÂ²IDõOž#2uFÜ#î剸.nÜ«²TI_Ô TvÀÏr:/eÔ6LE{LG#Lê*ûòªZ{ò÷?÷¬û¦_ûºìv÷üë#î%Wµöä©ì¸—·XIŸwÓ¯c¼×Õ¥é7Xºß1zç¹§› £z¯ýûµ/ÎIgÓ ñû•ïÞ~¿ßQÛoºA¿ã¶/“u£öípï;ïö…õoœãÃdûÂÚfÒÿaçŽwZ’öùm›ÉñÖ~÷|ïß~åû­[UĽpÄ=â^â^•Åé3ÂtÏ÷.6Lj2Äg˜Õ¯þ8mÎsˆ;NÛãö‘i½~¯ã´/ªž¨uM¶-êH»½AeGIësîDõaXßùµ7nû‚Ö)úüõ›WUÄ=³ºˆ{Ľ¨úMÚæWvUã^•¤úrfw†\õ ÍJÕ³x ŸùrUq@³gnÓÓ/<§ï®¹[°@áÃ' —d¹ÛÒúG7iùiÇiû¡íSµ!UÒW—€çVÇmŠÒOçW?µ5­:m+§á;îÕÉ'§E‹öµÞ~oÐð÷håò%©êï»Oïô«¸ _Òuü”öì]€:jµÛ±–j63©—¤ @£#ã±–šCÒÐwFFÆb-?gάLêåž>€mÛ6¦mÛÆtæé+»»¼Ó³BÒP W·êܳÏ${özuÛh÷ÇozVHú 42ÒÒç>}÷õ{/÷ùë52ÒÒÈH+³zIú 4>>®ññq]yÕÕÝixÿyÝ¿¯¼êêî2ããñ>ô†¤ @îǶ]ñÙÕ=ó®øìêÜíFÒP"'ñó&€Y#é(YÞ ŸDÒP $}5À9 ²qÓÍ»}ìu²@ÒP€w¾ó ]sÍ š7o^¬õ^xáEuÎ*µG_MU¿QÒ·léR½ôâS©*’¤m£³S—ll7#»oø†™±ñ™e7¡t³gnK]Ʋ¥K3hIú6ûq/ž:Ƭ*\13f idd¬ìf ¼Y“£ ÿÒÆ‘*!&öâ^´ºÇ¬AŠQ^±ßî´Úmßé'.Y¢ï­]ë_I³)I²,Ëw>ÊóÊ+#e7aà9”ãŠ_ ‹!ÒT©bbÿ!î…#f VŒr‹ôŽLðïŠSN’4Ñ!k¾sÇôJæàÌ®»ÎÕ /ü>ðw?áøŸâ#Q1DšŠ#UCLD\ý×ê||RŒr‹ôy‡ÅÏ<}e÷q»ï°ùœ9³$IÍF} ªj·Û·©Ú–,+ä¡Îa³ïÖà-W…×ýÛ­ºä}çùþ>{ÕÔñÖR¶ÍólŽÿ)Þ8qó7nïÆ’§œ¤›¿qû´uœ8R5ÄÄþ÷bB¼x0}áXq- ²\ÛKÌê¤å;éÛ¶mª#ÎuÝ„üå¯ÜÒ3ÏÕ¨ëÇ¿›_¬øòWn鯔3O_©/å–¢›•1ƒªÎÇç Å(·ØIß«Û&¾ç轞Õö…Õ_íNÓ¬ïñSYcc-ɶdËVèH~²²°Á¼°YÆÆG§î»°CZRƶٶճ Çÿ” xñ…Õ_íÆ–sÏ>C_XýÕ"›•1±ÿDƽ ‘3¿‰q M|mƳ<ÛKÌš2H1Ê-ÁåÝ–$ésŸ¿^xÿy’&‚Ýç>}亖Uã#¨¢œý)ÙÙdaq$¿vÚ52ê¾ï"$E+kÛ\—b8þ§Lw½œ˜"MĘ åª„˜Ø ‰{)âÛD\ ˆgy·—˜%i°b”[ì=:>>Þý¹òª«»Ó?ðþózæ¹–ÅOU~P¼²÷y~~qÂL¯¼êêÀ8R5ÄÄþùA¹eÊJ˜þØao½]«p̱kOþné„cŽéù=Õ°òJØ6ÏlŽÿ`¦1¤_«-iÜóé_<ŠׂâYží%f”•Ù³hL:¢ÎßùSUNgò¯4ïZ’®›õ;¥<Þye·mÿáú=˜z«+yÜ‹³|Úx”Eäƒ$I=´^Ë–.õ]p‡¹»èšknмyóbWò /ê¬sV©Qø÷f Èì™ÛôÓÖëÉ'_(»)oÁüÝô†#Ô¶ÑÙe7¥t3gn—:Ž´G_Í¡eñûqÏLcÖ Å(IºsxXîoZÒ€ÁàÎñ†üf`°ðyl€’¸¬ 0èþ?±œ˜P¿ ®ŽIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/export-console-output.png000066400000000000000000001364431203611042400335050ustar00rootroot00000000000000‰PNG  IHDRbqv‹ÏúsBIT|dˆ pHYsttk$³Ö%tEXtSoftwareMacromedia Fireworks MX 2004‡v¬ÏtEXtCommentöÌ–¿tEXtTitle¨îÒ'tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëØprVWxœíWy8U]Û?ŽŽ}D8Ž„DB‘yž % …’9‰Ì2•$Sæ!sf=Tæyɹ'ó<ËL2;ßÞ礧÷}ŸïzŸwøþù®ó;kïu¯{ýÖº×}¯u¯}¦ýÊ%˜ì(B3øÃ4ƒï¨fl£û4ƒÍfãæ(HÝ…‰‚ê) ‚±qT³1Ta@iǾëļŠIŸËòܬmšóGCCç–­¹¡J)õiK­Õ¯ÅãmY[+¡ÕOÆÛ¢·]FbU˜ò\‘ë®Û–CKëL$wû†ë¶…-…±[†Žínº¾2UŸÎfå ¼Õ«Yg.vKõ×IJ"› %gb_,§9§Û.I˜ˆòþ^>(ßÚì´3a(# têy%{õ˜X»}ÀŒvY}ȱ°ù„Õãô¶³;wÊ,¶»N\³nâu=3×Ò/!bèÀ(:ÏÄ6ïÆ)2T«7ów§é+µS¶­¶åÊÓͯRHŽÙ)ÚFмl&¹³Æÿ¬Ez+ÃÅÃÜÀ(ÉÉ7èû$3•b añfS‹NŠÂZKÓjò ê„EÁ*:ÑFa Ås–YÆü£ésƒ|`ó6¥Åæq{鈖k}Žïùf9 ÿÄÓt}^—3îL’…Qï”G f.y~tˆ5•S4AF‘2…2¶Æí[Þ¿~td.¶úX:*lb›Hê(ì%ôÖýI¹«ÇîEkã^™O€šùÃ3ëÁšðËmÆ×:×ß¼.ò}²åù´„¾Áà–Ö$öøÓýk\amôío^^s{ÜÆXrçžK×=yý¾îëê’_bÍÌ_“^#¼Ðé@Òv{Ë?UŽTIîxäG.wY¡zRÑ~ƒåÃkN_ÕÞ)Ú×Ì<Üþî¼JºÖY‚ 3žÇùÁ'µ%Ÿ+Ñ89¡ÖÝ͹búh%+x1V1CvýVaÏ-;²“Ðßx5›ó»¬'ï—\¶°þîÐÁÑŽR³öð&–Wˆ×ñºÞœ1¯¯Ÿ-¢Ý[ š•:¼Rz2fˆÐ‡`âY[…O¦„bЦœ0ôÔi ·ÏÜjÆOe¦¬›ýsnj9h$„-KZÓeÜkbîe[­"àŽ”í"1½*ÕkªBuˆwBŒ†„~XPø¿ìbÍÎÞ`»mö‰0ª Ÿ%9ì' À‰àH!ðo½‘HBhÀ½±ÁŠþ‡g·D1Á‰"ô0osº4gjrJr$† H—@„ec 8-68À_•! „Dä yrj"p5H8N""%‡2Hñäô ²ck’<µ´nÿd£ô5€<Š]¸È&€5 NGÇ.†óíŸÈ8ó0Èøab²­ :Cî-Ø@`ãŠDjñŸZ|KU6v Á—{L6ìè1ì%„!À~HpqûwøQÿo“¤ç)'ÖK®gD«fãB")‰lßç`õ‹c„ØUýtN„;  ŽàÀm\Ž `Ûà$D,í'6‡2´ßõt-)KM¼ÚS50b4X» ;:;P:@mÜ(\ Íucy!Žè~,yp‚±ò`8OùKf=.&‘^3yÿ:Ê]áÇIg"úi:+Ø‘Dë!€+XvŸÁì†Cû r ¡¡Ø™°‹ÛȃÍm졆²‰,z5é#B¦ä'C—1Wk5^ü™y0ðì¦@z0Xƒ'ꃤǦ–‹DÀ pz8ö• 8. ø9 @l‚§Â\^>{Ñü( µ¨N—+ÀDS£)#¤(””h(¡„@CŒ|!‘¤H¨ql¸” }„×"‡´hbJbh<%–ôC…&EçE"s/qÜ 3?VPl§ìóñE ëò¯×ø¯ D?D‚?T¿Ž"€ÿªDþAÂêP€ ¤Ø3»QàzÙ”jj­î®%«ý¯,àÇó÷ŒøƒÔÀ?°q}«ü¥…]¥"‰™-d¡vù`kK[ÈûÃ> ÀÎ(ðC¶†Þ ¶ …‚a õ€Òâè8; Ny0# ·èFÒâj•sÒâ=UÜ{«=/8ö'þD:pÒáe¼Ñž0’h.£u.Ó½_ÜåIîÆy¶×s˜nb¤Èiìµ¶*cxâ*-qˆÔÊ0•€ªµ˜ÆêÑ8åRU.Ç^Ëì‹>©O[”4›QÈ9þ£J60‡g%ŠÜd¯’sƒ:»ËÇ0|î¿?ÔqŸlß·õK™9Ø·Â:óÉæÕ1t’€ýæ\Ìí>&Ê‘oBtGP™=5ZNr3[ÔùSÏxO“ÈšeM[4•r_‰±CÿÞéyk~S]6-y¶Í\âú>ÉòFÉKÂŽgk¦QY=1~}ï\Æ»n¤uDzÅO©5V=eÜA--{/.Ç«‡fíåôÉ*?`x},7:'‚¤çIJÔ"B Î7œ*R”±dæc¥ñ ¦aÇ|2y·»å‡ £bÎ7ûýé¾0‹“PTÈŠ¸p\“’®Ñå,-Ž,öVóœ Œ²Jn§Œÿ0ZJÓ…¿u„vIƾ7³Mòñ·ZwD÷X³=Ù¤Joõµý0žƒ/r©ÚÛÍïo©é÷¼ÞÒ>š$µøT‡Ï¶¥AóH¬¥ÝWׯ¶¥ƒcÚ4oj&:Ù<€ 5NÓ~É»Ïãm¯Óúüý/ó·ólZZYïÒJIxnóÖx&:Q³¥ýEt¢98])Lν¶ï‰3À½rwÒ ãS³ïiÐÒ+`ò.:o=:ϼõ­H™çãó]WDÎï¶6dZON‰e+sÀ)ýË|9Áüí¥òÌÞ­w­­Á¶CÏâª*ãä,árÝbØ%—"åÜ_€bÀС€·C_èull£hê»sÖÞO+ß™~4­ÓÒ* éóÐE1tÈ ¢AN¢°Rlm¬hB¤ljžWc½;8£|gØ. §@:øDí &g…t8¦Ft[î¸%:u1òÎHQÄÝš6šEîgoÖRµÂd4³ ÑÇò"¸·^ôÔQ3é *ME‹H\²I!@jmœr~"¾pÚ05kÁqêv¦‹]nE’Ô§P²ü¬D$÷êÎïžJÚ·—¼»fn7†=ç®jë¡`9ÝO}Ôµ»›òèNÎ¥ü!£]Ö[IÑç‹Ì•øcNI"¼]/†÷è4Ͻ˜Ä‹ÚyÐN€{`€ød4SJ8;~;À-š¦Nçë±%½%·~û±ßõ‚ª®¼ù¬w8ÿÉø{Ky®Q…#Qtïôiç•Oò >,S‘d\]/çO‘k¡š¿Øi¯ öÍ”úœÕº„\Ä–w-°ynH£gçRšN\÷N†ÆÊ‰{æÆ– Ê™±Ê=w£÷æ*ñ¾ i„@ø³ÇZê]•l”TÔ+¯©|N©8‡I3ïÑw bæUëaÜ -ºúçž~n|–k «é„Ô‚•_JßÕ“L’Ì>µîðµ‚Ä0—œñEïÅ5?œšQÖ³”-”Ûud @/Ž-…pî1‹¯ŸýFV"¶+—?–°’w8þ¾¦¡’¹sâÊç"ǹÄ5FùÅx ‡¢†À„iögå³é¹ž_°¶`îT½Ì-ç',ñI|tñâ½7J…î,‘ɘýx‹žFÏK‚> û~J+)wä’üK|^¢·–ò  &feÒ–¸ÖÎ0xøïɸ ]˜Ž-þ¤ÁYøØ@´Õðå 'ŠÜ•³BSÚV§ï)D8Ïß|ß#L´.Ô8k8Øî²“qÅlQ·|6£ïî(æ<Ø_/U¹áź6ýàæüY·—é‹>9^FC6låJKÉÒçÖßÎÝÍŸnB­O2ŽLßáŸC_"–n:‰tJ’¥ê ›qwbRRt—sô²RÛ•‡ó[L¨ÔϽSvxõÑùìܳòÈ0´“¡NçÆÆ¦Ûîe·œ«¥×Æs×Ðu7>^–;¬®oÖ5Æ?€×~ˆ)_½¢"úÛy^}‹Û†²]âgUX¿f\8^ŒÉø@x‡WÓ÷ÝâÝâɧ–¬2û¹_³òP_e/ÑX•Ô96óNIòfË8³ÐÎٺǰhÆp†Š•l¬yyÚó>½wi0”ebÝe=dÙµfs7…Å{¥À–˜Â¹ts'!¨´içCtƒPC ‹¾Â–ru^+cÄIÄ97QbÚW¨ZvµŽÖf\ûw¼:š‚zøDÅü²èE£ŽÕ*rö†Åõ¯¬#´aúm\bÛm©~»r•‘3¾ö$z^é}!šŸKúè+ˆ&\H ÇÅ´ù»Û¨«zN‘\ZþˆmîØÆÔì·¶1Õê–ã¦ÅÃöëoH0óºï,YâeŸg >õqhÐ0ªNºû [(7c)sº†Ñ{%‰º<5£G nN×Ë(ÎÁvü||ÿ¥:æôÒu_Šn‘Ôð[·7OaÌ*Ϥç–++Z_ïKKòPà5 êZ/¼ªÎ‰šS΋+èˆ1½x!ػ׌ÉÒe[OVJª±ñP«“ŸÌZTÄt³ÈE•ix~XL5bà8C¹ÍTص ³¥K'$6\}9KÔ·–bQmâT" iÄÔqÌr;¿ 4ú~óYßæ¼™ –ÀºC×2XÓ×’¯u¡¡Dر¶¥ÿ=gjTl5[Ëí¨VýÌœz.'[çå³¥q#gÓldíËåUBåqΟ£Ú01½Báû1;LÚî CüÎk”M…óãöÂ\â£øfb_[ ë;û6ÊDRNŠ~í·ý<5(óÜ—”ˆsÉ›õO¹^‘¥É|5ù+¹žõ×ÖăNÅœ¿<ç-•›mß:²TÐ0Èq{ÕÇÍfÍ*'ˆ×ŽÎ-Z?à—r¬Š³Sñê©Üc(NŽÿ¶œb/|³þ|—–ز±-!6¿—"çCè%ÝH¦!<ßv›ÅˆÆÝ|):?G+9éÆhNoˆ*Õ£ç—}ô¾’ŒgíXºrñ÷í•QÉg§íUT–5K>K7›Úä)0•”²}¤õf:Ö SÿR["¨«Ü³GdùuÑŒGT–ÉjGí–§ûŒ$„ulÍqì¬ÛÝ®>.­|E×áûy K“esQófö•›I9ŽR*–iUúY¼:-10×±·ó.£¡‘JDdAºVZdcH:ÝÙÙRú»ý]©V +p6+c.Å1?“àSùn–"J¹ÇpÕŸ°¼mŸ¤Yr†À ÖýÉÀQ ©û•‰Î½ºy–¸yepF^†Î9èÖªÌZ­Ì´½½ãwº¢ÆøŠÄO,å ;…8ÔµÕW€{¶ï³EçÛkÉĸ{²êÝ— {œ|ÈEmL‹qöœÀ^ËÖÄþ'K!,!x S#„QÀ`ŠÃ °ÇGÿ­ÿvxàxü†‚î[<ðÀ<ðÀ<ðÀ<ðÀ<ðÀ<ðÀ<ðÀ<ðÀ<ðøÿ€ÿ¡*ޱZ"äHmkBFúÞÊþ)¤3¡smkTSxœí][sÛÆ’ÆæÇ‘,Ëv²•}ØUmmíS|pååQEI1%1$Ëyq aóD–|tK|XøïÛÝ3Áà*Š”H¶Ę™¯{ú6=àá›Öí¬Óß™Î4¯ÿËÑt渆ÞiwÇ©Þ;V¼=h»³š¦zûCw¦i†×߸3£þºÞį?8ÁG´öàI.ýx½n÷vÖêÁŸíáÕLYSFŠ£¼WzÊD9‡£©ræBÍ:ÔœC¦üµSåO¸âÌë·GÐtkz…Å`:3& ¯Õ> –¡%(à´íµ»tÑ Cuƒ}*Z]:ÙzCÅÎÀn‡>÷‡tQ§EŸ:}*ŽØÉAo:kÖ¼ÖUÙÓ‡ÖÈ!{+¶±—GØ+ÕkkÓY Ó>6¨èÀI ^.dþK†Œ²¥lÃÙkøüAi+WP3^&fÚ1Óî ³g³=åpù¬|„ºke’ŠÉ°™¤`£J±qœ6j 6Nƒacè…ÑÑLÍà±< OƒÁÓð½ß •‘7ð²w ¨Y6œàù|ÅÜQ.€¹.F`-`ºð•a0áÁ„¦n¥¡iç@Sà´44N³;; ÂZMá ×b5V†!ýŽCÚ¢ù8Uè èÀt·”>ÝÀ¹q欕b©¹æbç­á”œ·vÑy›„ÑF £.Ôž—™·":¹xíq ³ç/i2–F'T+ % `£Þ6/bØÜqv-ØŽXB¾HoBiôQŒB5$Ó0Ò¨ÒŽÒK)Jm⦨ÂôÙöPqÒŽÓ¦'>ÿŠc´r‰”ÆICÈbYwšoûPÚÊ­òåQj|-j‹Z &‹Ád3˜l“ÜÒÌ;á†ÀFS0Üë„3>áÖœ.À4º^¢Ñ˜j‚;fI»HeШ •A£2hTfƒC³ Œq ¾o$Ðw | I§f2€¨> †™ùv!ˆÆwÔý:CHg™ !“!d2‡Éñøpä®À‰"ú~óØëO`²æø¥#)ƒé@jM¥>JsžE( ¹Ï¥ÁÔ›ùÀÜä`îÃQæCnø"ÌZdÊOp|¡\¤hø´ÕŒÜ樦šÅç­¥2$I ’nš÷¹z#7–Fƒûц6.Œ]ú„®t ‡!7YY¡¦™zIa—²¢}Ëz sôZ N]`+A¤ùÈxk=›«J;ÉyYªÅƒ[­R“Ñg¨_@®Mñªf¦Å0ÓFh~´Te¨9i‚ §Qö\$­ƕ(MÂ{Nœ‹`++ÐúP;"vž:-µæbçå*ø.ŒÑ³£äë8€€„M}tvHo¢ÈO·ó…y©éŽtf ¿î‡Èä±R›cdŒÍܺ³<“µüÈ)W5ù‘|A‘&h¦±KXŠhLäD±6ájoF)½Pûž>™ÀA+>CÓ1+c½É5…ñ“¡sôâ Øn–ΠcæÃN›äÖÌZCÆsKLÜÙ×Ù‹ÂÄu͆šk–à8_5ðyK0.~ÚâløÆ/êfû`é /™ÑkĨ5¾n(ã›E]3rJÆdó «7¸Ö%§$'¶†.öư­1lk [&ñ`ä Ø¢-Óß±j6ŽCZÑt”ß‹0i. ó0r$‰7Q·Œ.‰I‰} ûaneü[ѧ=c+¿g› Î&ƒ“Œ¸œê]ùÒdh2¹(eL\eE@õ@-XËšœ79¦5jÍLbÏ`­ÓÓµ¥’´C‰¸L7ÄX$0| n)‡üh¢\æ··jÖ$OHFn -ÈZ¬Å–à[~D&c÷42½Ï»l•3æ¢.&™£VÄxƒV<=!£í“Ÿò‘û+Iy_J“Èn!Á¨Ff2³vb3Yê–Ïd±ï¼üPùKÝ¢äY)†itOOqàæ–u ÿäÞ-,ØæÎ‰ÏzZcÁó[Žç±$E­Ekh%f­NØe—–QfgêÂ×¾¾…H4Š) -‡]gi…‚ç7˜º%}°Mú€ðÄÔ&–dgbø*„!Ú߸T? u›¯j¤ë[êéå€]ª”€Œc3Puª£ ŽÞ˜;+ÌÒÏ0j@j2X×ÖáéZÖiˆ:úþA<ñ¨øvx¯ÏÍ ~ß·Ìq¿QFŠg‡½øq.ø_1@?5:`ÿ˜Üþ1ö†Ã°§Ò ’f(J‘&%Ž£÷ãç…w=€÷šŒNLE¹Êcÿø¡IJ³'w]’âÃ$FTÖ¢ªGpµpkf1p}à470Ë @=[Rü fðE«|ò·^Rþ沸¹îÚÂJ ‡ÓEį)¿>œ¢œ°ø:¨ÅB¡Œ.M1ǧÏô¹hæŸhÍ•Šäçè·4ß'< B ž¥ïÝè¼wí wµFåF‚.CÙSaýxæâ `~VÌ—2#,C6}¾”‡Ìè»Dr"Ýv§@¦4‹;ˆÉÍãFäTúýã|UÙ´’‘ý°GŸëŸ å“ ü1¿û\qq7ÈÖ,“!\‹ò©]€MkRxU¼,ØQ&_ŸéÑ yOu* *d5Ž™È˜É =UÂ)8éÊÜ FaéPê`j~ÝCLÇjdf‡‰M.„‰« /v`°¦}ÀGbÚz>†ß0êûŒÉ\‚|˜ÎͤŠ·Iɧ#k•]P,0Ç™29UÖy@ñK‘Åó~¾ÃΓ7å§™hu>¹ë \_¥¶ûLçãÓw„gºò‰*ð\ë>žyö½pFI³ÄIª|’,Τpftq#±H\2|~ZEmNx#3â ù±ˆ;”ŠMkYDXn°sø 3: ¹…Ùä’&_«hÖæÌØ÷C¿­9ú¡à„|²ìœù 9;¾ÿ„Ci(í«õ<¹xybLFÔŒŒÂóMb¨çs*õ†$R²ÏTvœÖç8ƒ³GfÐéˆIL¾ôE2-{â:R£Mdœ§-²À‚ùH‰÷œÄÒQDØje#rZþ°o` µâ ‹¾˜µÍoßwOöãîItÏçä‚,™ÊgÙ;ç—m6MÒ,;t5C<§ O$ñÓƒ¸ ˜…àfÁ?ÉOÞ"G¦0†” P _6ÀÑ̶¤Ko^FS9’oâÔ%kÚ´F'ü?6Ñ㠇Ȣ•! -†Õ²¨ð#§Â¯rhÎíŒÆµ ܨºE ¸K.=ƒHºÈÁ²±ò2¶‘ÍØ‚0¥hFòý F÷ŒòZÇpþšø:kÇç",+ÜSÀ°™mÒû¹3‚Ÿ¾ »ÀçÁ`âß?Ærf¤²Àh6¢kL®Ô•/Û ÙGŽ\Ȭzñ…óÕ%nÖ‡ÃÇŒ]a€u‹‰d (ynûvÖ ïÂu‰ ØMC[”\‚þˆ^ð‰ˆr’XÉÐat˜qÐaCïì’ëôÛtI¿ÏêöYqŠ…× ûr¬C|C4º½B—Â5'‰5庤³.A±ôèôÇ ^@1æêè:ô>…«ÀsøŠ(r¨£ü†„ÿºŠÎÞ¯üÑ{øïõðU,öŠ•~¼P•æWñ÷¯`Ý;¬Sïþ­ä#ü*üé„3\ž’5¥Øï _¤[Ÿ£g¥pM9ºŒnFE·"tÛätë2Œ£'êm4’]s’ãšrµE튢E(ºÌD\ @g&l~¸¡u¿î$¥®åLF9³¢\™¹È(pMÐ¥—0å×œä¸æNÒUÓ*’!éܶ²éí^óÌo—¯“øçOΗ#—ÅÈeUÔ*C­‘Nh/ºËÿüIÂùrÔª3jÕ+j•¡V‡xøT™Ÿ?I8_ŽZ F­FE­"ÔzΩµË÷¢~&ù6NžsúÈ®8ɼ¢-›Œ–ÍŠ–Ehù”Ó²E+ÒWÁ:µì » fx¶F'§¢S:­ÎÎöúÑ!Ÿ×ˆù¼¦ÍÆŒfãŠfe´Ú[J’›Ä´ÚüüIÂùrÔš0jM*j•q¶{ópt`ã¯Öa¸î$¥®å\F97Ò±€&ÊHi)>R´Ü_o÷ÙF¬?ɨ/×IGz±lk!D;m=òɈ|2#Ÿ†øTÏÛ£vŦélZ   >%çïQþ^Û¢%À0H†¬g¬áž©¯­yßðb·eÞW#«‚wÃ; ÖÜÒ|šCZ“õ¦i4Õ¦0Z½áך:þFkÍŒ‘52FZ´¶æWÖè'ZYnOðW BCÅß8±_÷WÅÏ6øÌÃåøÞ¶OY¬ c|=\‰ÜrÞaÝ+k^â”Q_7¼LJW…<|ðpû¾jQ‹é.”ív­ó½e²õ‘ÞTm«™0¸º##Ìž³*|…¨é¹êÎÈצi½ÊP¾ç¬  —!‹4WÜï(’¥f¨lÎêHÁ–—8kÃÆŠ”Éî«‘UüJ8m–UôzÞ‰1;iücª£•MñÎT˜ÜЪ ÞäPc̓z”íYª`TÕhˆjbnh€iÚõ$C˜³–¢bâ·ÖSnÕÄåÒºû«6—±æ3ÙJasÙ”õ¦Y7kš0Œ`ŒÆ Ǭ… ¶æè­&ÈÄœqœ”«éªuÍ.åçS–å„nbÖÕUÉ“k£f]%1¹61]ÓJ`òš=qT-‰ÉãÖÄ嚣ºû«bŠuΡWíA]¦'wÞæH¢s8j5Ñ !‰7ÖÝ$$YÃI¶.üËíÌ<à˜×Ú Æur¸Í(RäÏYDðw·Ó¾ívBëšè€˜Q,¶àï-½rÒ_›iô¶rííö·³öÎ.þyõÿâôw0x:š·sɽc¸óLù¢°g|xA„¸„s»ŠK[½1~p×±S^{çWŠ1Ì{´ê“jùEä0ÙÞ‹)ÿnö¤¿óøÄ$rï³È½‡ôúŸ¥Íïù_e¦Ô©¶¦hð«*ºò;pðܘ¾¯çêP£Ò¯EWÖá¯5øÉ‹´º6 òmÞâ(jäÊõЕoióµò‘_û ö(rõóÐÕ~ÚÔ%“hÁ=uÅîÙ…§‚«N¯… ÎPRnABŸžÓ·ü} *ûߊuN÷]w‘;6èÅ^WÀI׋-Ì_ Öæ¯U±)7ÅÇéoD «ù]AC×ÂÈ× 7gd“M2¨ð"tå!¥ƒ^ó/™’5çߥ w±ý‘Ù49ü®§Êÿþ.çœh»›´«ÿ¹Æù7ŽÝ¿÷«¡_Cq,÷i¦?Á ýŠOxFO8ãsYÖÿÐÝÂÚ9¦QÈî õ<6§ÙW—€L±iÎe=Îâå?€#åŸl–ó{Ÿ@oÑô»ŠI„QíšæÏ€8ï:‘3^ùûbù•—‰+Þ¹Ü)ÎkºEt éܧ®•t®¤óW,­J:WÒùIçµ@:ßó+ ]Iè¯WB×* ]IèG(¡€ÿH%¡+ ýKhQÖVº’ÐYB—ÐüzJ@TØ—ÏV2»’Ù_¯ÌÖ+™]ÉìG$³×¹ÌþfÀoÐöàáJFW2úë•Ñf%£+ýˆd´ùÉèJBWú+–ÐF%¡+ ýà$´„ŸVœy7ïÑ_C:k•t~ҹʼ«¤óc”ÎË쫤s%«Ì»J:WÒ9M:¯2ó®’Е„®2ï* ]Iè<z™w•„®$t•yWIèJB§I臕yWÉìJfW™w•Ì®dvšÌ^mæ]%£+]eÞU2º’Ñy"«È¼«$t%¡«Ì»JBWú=<ù’¸0„jðrs&¡ç_´ñ>rÕ²¤µßíHëË“Ö6È·¦bÂïž×Xˆ´Nçb‘mÁ_Ü•g¾–½Òq.]LA6„¯Mâ¹zÊHâ2Ҭ¼ççqÙ^ñÚÒx­&¬¡.Ž×…y ­ýÎܶɹ-,ýEkô;Îo×é½4ŽÛ˜·<êáWlÏ$[£bäññÚ¢â8Vm‹VyÆÑÕ„¹ýµØ¢E$tÚÒ¨–#¡ŸÏ[TÆ-Ú›•Œ®dt%£ÿÊñ‚·èÉì‹CÎB~ÛzdW³_·I-o{y2Z§/szé7õ"ŸûŒdè QyqO]wÿ­^>×äÊ?Dk`©|_¬Ow™N0#´;̈Wpu¼¿ïiL€üy`MŽ.GSž»V' »ý¶lIo¹¨FRò¸©Îl úiI4’žS#mB_.HB;4Rfi¾gò1‘âÑ{>r¾‰Þõ7ÒŸ¢Ý=&κÎÙÒóÐõù[YƒzDþüŸ¯åý$1®’6úù]ùGŸÜRÒèÓ[G~~tô/FèœDo: ñNYÿ6%(dµøBŠDžÖžEЈ·#Æ‚äˆpm™Ð;Çy£÷Éú÷\‚Fzk›R,²[Z !¶¡=éü êo(¦³––K[Û–·~)­RÚ¬¤t%¥+)]IéG/¥_)ûä;þCPÔý†ä+¶ƒ~À2mê<=¹‹o5|+ýNцÜ×Îö‹pÖÆG’çΗ´öSÜÛ€;ÎèZǧ³À'ò˜Uqßúü Ô2~:[Úú‰¬í¨lºÏ¨õ˜8̤ȬC«&6­_7…¨5r¬Yã¦õBʘ›Üù$q­P¶ŽñÐûLë|ˆå—@’Å×y×Bk™Èƒã¨¬ŒÐü <w OBTîPTŠå°•ïeÙò¶‹QÊ¥<(¸£Åç±Z_PÉ DzäµïkÆÅÑÉãTþþí-noÓ?ãÊÀ’(‘ÝbTщ:Í"›dº¥IY¤aÛÜ¢už|9"÷E•¿ë:Œ&óÏËÁ~Þ^QÎ× Î%+Ë ü?r_ÎÿYÆkþg¸úZV•¬å»à®?*Ü_*{Л²Y¦´6¹à±L{2»w‰¨A,À¸Mþ“<„p}?á’­ˆÚÉí£r“ïEÀµáZàè4ópŸÂîþ‰ü‚Ùn#('dI¤_îmæE|„ó‡y&î#|}ýÙÿ‚ÒVÎ"¶à7ÈÉ”ß$}ïf5ÔOïC1°¯Y5¢îOt=Ë0I »d«£MáÀÕMòkåhÐvÌ.¿xE´žû•a.ˆfy|ƒ½$OÒ½c%ioJ6'ô¹ÄB>Z'¤õ¡¨ÄG-lP† ÓÂ:=»Aœ€k´qÊu—xaL6©I:À%™ï,…¾tŽº¨<ø!ñî¼2á)Ï1º¤|Ýó`W[ôìr8@lµÍÒÝèÝa~#óõX–yÜ׫¯Øò’£¾=»të7¹ýb”ÀÜ<þ[(R:Ôi¦Në5ø·F6¦EqÊ{¤ˆw8’x½íáí¬µÓÎ\W¥¯Ã>5éÇëôÊ}GTö¾?¤à8rnÌW8I¬é·G3heØšb±Û¡bp8éði8i^§ß¦Kú}V·ÏŠS,¼áiëvÆ~ª•M›sΛÛÙÛ\ÓP½}^¿Áó`LÃÅð =ÕݱéRîçA‹píöèqƒ.~êN°h³¢; èÞQoºƒŽbxˆ7ì‡Wþû'4[þ ’rã¼Óuçôú:ìŽØXœ¶·±8:4ogðg:«yT¸¬ÐX¡ ”¼8Äò¨Înwéù½·tÉá\rxÔ†ŽÁl龸»Ûßìá8NúlŒ<£³¥°w¤b~?‹ØŽqà%‡;T´hà;]äú]|ÚÎ<¿Û=f9Ü»wh_2+¢»”‰môšÎø¦®1¾iDÙÆiê¶GÇ Õ¹cÏ?ï4lÿذǚÜÑ»n'áϯ0ä_Y?aÈI£} RÔ&ˆ]ZdœZú8³Ñx#k l' Զ汆´\€ÆòöúíÛÙÞñ)¢¹wüŽŠ|2jP¾c%“OšŠ¿pGôÁ^›Ûk¿a‚ ÿç}hb¯ý+6t< ys<Ø&¾ù>ȺM‘r¾mkBSxœ]ŽÍ‚0„{ó5|ÀðãQÊ_ÃV ÔÞÀØ„«&MÌfßÝЃ{ù&;;›‘uj°hø„>uÀ5zÔ/¸ŠLcFT ¥ÑjòV£c{™ìAZÚ”^‡ ƒpè ¦u9ZûÒ€å ن؛=Ø“m™O²M6Äs—äµ[ä YìNÅ\fÁ_µsgûzUN wRímÂÄ#%ì+%² c½ŸVÆãðÕC°‹~:LB¢L Ò:‘\õ:¡m mkBTúÎÊþ:ÑxœíœÙOUGÇùúЗ&¦i“¾5M“6}òÉ6iš¸`L´ &->Xc±.q!´Zq)Ap » ¨¸Tj](.­T«­íE´È~¹û½üzfà*^Ï2sîs/çûM>™™3sfûÎoîŒTZz€€sis=`!ìne²{“æSKu±{~ðüýêܩÿ6î3P±w¡)’ÁÿÉðý¯éDù!ò ¡1ù0µ6®¡»Êh:™eºÿÃÅ‹¨¥'¤ ó;¶<‘þ§N¥JæÒ¡ëë-ó>Yü¿XŸMˆŠkoЮòßhë¾K”Wü y•gmW ø¸S¿.Õ-3Õÿþ¢ÅÜÓŽ¿&…Û—ñ6_d¤sÍ.^žPÿ3?¦Ì†Ïií©YÂg ™<Ö£ñø ô„Èí Ñ w$u–ÇÒxl…©þK ¿çÞvöú5Yµ~#o3è ó9°òDùÏbŸy=ìp’ÿgkWQ¿âwíù»Tyæ/:x¢åµ» (Dg¬2Õme÷öY@“…Ëw¾†þO[^MŸ­¨¡²ÏÑÔW(mïMÊ=ÙJÕ×;h_E÷œ¥ ~¾~ŸŸ3þ'ãÝÏ8Yµ–zƒœÞÑTæ eæÎ×éJjŠÐ€Ûcé¾`ñò tøøU:\×Ìae+üÿrïï´¤áÍmxFYWºiÏj|ä¡û½î=‹uæ{ô,Ȭ+Ù|ÖâXùzêRbP-þ«Nߢû®.ò"ÔÝõÈTÿ—¯üL×6ÓŲO8·.–Ð/Ìéq9ÛKÊ©ý?Ÿ‚ŸÚXÙ ÿyü¯ÿÜË”V¢Äÿ©VªQâŸÇ{ê{ü °ôBÃ&KüO¶; æP®ò §* z”™™Iéé锕5ò3+§¥¥ñT¤ÿKÕYÔ|øSr÷´sXþö¯?‘G9S öÙ³¥¨œ\Ï|œŸùiËnkügž6¹†Tyóôg€Å¿ÿíöÎ ÊäSG·zü_¸öæÏŸOùùù”ÍÛ³s——ÇŸõý÷zjØù.=h©¥¨îÿyž?{ÒÖB¾`„ÜÊ=»«œGxÚääÔÿçA¢çI˜÷Ñ|§ú°ìjïò«âõGxœÏ›7ŸæyNN/‹ÄÓñµT‘ó¿ÿYžÁòìËBå³%L«¬ Õ[+h c4o…ÿ§ë¶qÿ{CDʱIGó'îõÜY6R7<Ìùf͈ÿ~åû€?8LéJÙ ÿ·WrÿýÃD>–*i/Ó1ùÅU–xžlþÁüž>}ú‹ïÿK—.åg‚¥FïÖl˜Býÿl£pG1ÝküŽÃòžÖM¼îȹÛTTÕL9»ÎÒü••¯`…ÿ› Ja÷^O6¢ßÿÔ`ufûM”¿ÿ{€ÿ€DÇî ìÅîó€ø±ûß{ ‚ J6¥¤¤Ø=…¤Û?µ=ÔzÛÆnMôDö%Ù¤µ»Ö):n¢Ï/Ñe6¾£1 RÛfì3½z£1´æûžZ?²óSk£×ÞŒÖo4?­5ʼ»+ëEž©í‰Ì¸Fmôú33?½ö"s—Y¿Ñû²{)óL¶ÈÙÕ‹ѲìÜbãÂŒÿFc›½ÿDÆ3º?Dç&3­¾dëÍôkfÿEêÇÓ‘v¢ýÇÿFc™™OéCkî"kYŸ™µ‰¬Gïî­7SÖ?ÑýKT%ûü™ì\ÃdØ¿d–^ÜBAAMf%úA‰>¿dWìþ²²‰0?™÷&ëÙ±j]jýŒ}¦•Ÿ(Å;f2ø¯±ùØz½¸]£ýÑ{O­ïع«õc´>Ùñõú‘¿V½¬"ucç§×F«^K¢û fúÒòE«ìüŒöJf®jÏÆ»>Z6Šq™²ÚxñƾV£ï²y½qdæO[™ø5SoÆ?™²‘̾oæÞ°Â+î7™¶²~èÕ‹ž/™ñdÊVŒ/Ó—^ýDøŸè÷¿Qü«ÝŸjŸzw”Ös3wQÿzch•µÖlv~jãˆÌOtüxêEöAïÝñ–cÊÌÁÌüaM˜¬8ûvÇAAAAAAAAAAÎÖ“Î^à`º{ÝÀÉô Ó M_¿8˜þ/p0n·8˜!O8Ÿ8¿?L p*Á`8˜Ph€±ûïÏÀ^Ú\¥´ôp.ì/üüªI£Î*í µmkBTúÎÊþWºxœí‘Û8 FSHI!)$¤’FRHn›wóî HÉY¯Ûx3žÕꇤ¢úùs†a†a†a†axI¾ÿþÛïÇÿ»'UŽ{—áÙùðáÃo¿¯_¿þª÷Ú¾gýW9ª Ãû¼Ïâöð–þ¹»¶ŽÕo'®GW {>~üØÖÕJþîÿlúôé×ßoß¾ýüòåËú¢öµ¯ò)*/Îåç‘Ný\®ÚϱÚoù“v[iZ_Õ±aÏJÎþ/:ùþüù×6õOÿ-¹” 92b?çTþÈ™×þlôkÎ%?·Úåöìä_2òø¯èäÏ1äBµ ‘sµ÷YäÇ5à>¾:†>Êc=1ìÙÉÿ¬þOùwï èyä^«- ×Ú¶,ýÌXÉßzèû•žuÃÐsMù#×’U]ë>H_÷˜ÀyøY’Çvº!Û‰õŒå_mÄi ÿRuâþs´]ÍXœm§_gû)YYÞ)úmæ]×y,—²¬mÚ z†1Éêša†a†axEÇß“G°×§ÿóo/ïYòÝú\êkº6õ®x„ËèíjÏægHð–ö¾»–÷óüÏØñ|†yž÷u¾Ä.½•üÿ†þó\þô³aÏæŽM&ýwéÛÃäké#Ïú$?Î]ùMço¤Œ\ýȾ,Û/íßÚ¥—ò·âQÛ@Êß~6s?)}‰Î,¹ l¾ìçœô ØgX #ìvçQç´“ög·Ú ÷Bž™òîìÙ™^Êßuô¨ã®ÿuh½à¾m?Ž}{]ŒÐ.~È}Ðv_÷ÿJ;ëxçoÌgJöëôY]’Þ³ë@¶é.ì«)™áoqC–ü¿“?}ß>@ÇûXŸÀÎߘò'-üäÓÉÿ(½W‘?Ïöú›²±¼‹ôÅÛçúÞéô‰Û ºÅºvþÆ”¿ÏëäOœÊ™ôRþœ×ùÃþvì[K?[A}¥?-ýwöíåµÔmÑÕ‘ý}¿g\=ö€c¿¶}ñ³M¾‹ ½ÃüÃgggÓêüàÖ èÇ„çÜÀô-B^ëók_g?Ìò ¯F?œ£³« ÿ•Ý×v0||ØŽÐØ=ǧH¿PÆîÛgçsì·ã/ÇhØ‘ñI ÇtýÜ~×{‘òçún^§}¶ïZæøºyDžë—óÏì·ó5èˆéÿçXÉ¥ÿWvðô¥§O)í"û±c0ÎËvYà“ØÅ ÿçZòï|~à¹_%/Ï,Îôp\€ËɹyΰçZò/ÐÉé;/x†ÖáÎsõü_é·9?ÿ«PÌܯ5Ý»\í[½ãy|ÞÙÃçõÄ8ÔÏÝøŸgäû¿ËʱL{ä? Ã0 Ã0 ç_àk3¾Àç†>´’ãøŸÛÜÆøzä«Éø_ƒüÇøü\Sþã |<®)ÿb|ÅÊç7¾Àa†a†axn.µ•të†a?lÄ÷^Cã•ßvk­¬Ø½#®àýÜ~eûî)ÿ´3<3^×Û¶¹Âkð¬dlùcÁ&·jK+›œåo"eòú<.ãÊž`›Áê^(3zÌòÏöèu ŸÁ¦lÛ+6»úßv´î›<™†×ï‡ ¾k7]ÿ/lÓc[`ýOÚöùÐn}½×çòš„«ï ‘GÊß뎱š×Äzt¸^vßä2)?;WmÆrõ5üoäcö³ŸþIzì?ú¾˜‘Oî÷zx÷Œ{¹&ØÇ!û…e¹z.þ©ü»ýüÓÔÅ"ѯÑí¤ô ¹Ý1üÖóäÁñGg×ÿí{+Ò·’×lûw<ý=}GݽìÚFƨ^ú)õ¶ìzIpäG¿•ü ¯ãKì¬ÖœÎ{Í{ÙÉßeÈï ûšG•‘12éÇÛ­¯Ïq¯§™iumf—“>¿.¿ÕþÝ}¬®Íëòœ®~žaì? Ã0 Ã0 °š[u´¿›+ð7øSvq¬ÃïìæÖ­öyÎ…ç ½?Þ‚‘}¶¡åœXùçwíŶ‘ÚvÌ?ßå°ß©ð÷DðÿùZÛ“ð-q/–?ß³ñ=¿ê<ËÌ~¶Œ›‡#ýßÙæ­ÿÙæ»>¶ÓÙFkÿŒÛ"qþøz°r­¿Qèo 9ÆÄr¦,øˆî­§nÍY[;í§oæ:)@¸-`×§-Ø7‹ü({α߯›SÒí§Ýú»@¯ÂµåßõŸKäï9èîüÖ ¿É¸“>:ŸnÁ3éç _[ÿ_*ëmt°cmìÃC>äq¤ÿSþ´L“øÇ<²?ç=÷çÝ<ò¼6Ç;ùãÇ«ôsü÷èþÜa†a†a†{àxËŒ™\ÅÞŠÝûêpxç¶?0׋¼#ÿ5žßàøzæÇÑ™ƒc¿]¦³²¡x^úêl‡ò¼ •ÐÇ(×fù±ÿ:~Ÿ¦ËÓÙ£^l iÅnç59¯³©žWÇÏ~·\;Û?vþnŽ—í»öç’6eÌr¥ßÑý¿óUbS~vù§þ£^¹÷U O7O(é|;+ùSÏéGôü4|?Øfí´ÿÐ÷¶*?ÇrŽ—÷W~Ï2ÏoÅNþ–ÙŸÊ¥ÿSþ9ÿ×~dŽa«ç˜çòîÖ‡ÜÉßmH‹6öìmÀXÿ[ÿÝJþ…ý~Îs.ãÚyœÑÿmƒ4Ù¶OÜíï|Bÿ­düžò÷ø/çøÙ˜þÁb5þÛÉ¿ÈyþÝøïUä? Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0¼.ÄP—~þ*ÖÎ1@G\⟿äÜKÊðÞßrKXÿ˜µs2â±(ߥò纎Jëì·º8”ŽŒ'>â’X@â–¼ÎQ¬ûQýb£àÚqôŽòwx‰ ìb÷)“¿ëî¸_ÊK|•‘vÎ ÞÜ1çŽÕM¼6keŸe-2Ç›ïú5ùŸ9—ó?K^ŽEº¤~‰9òϱQï±®Y®×F¹8–ëN?å~;:=J<—ïÛßþ¡-ìtñºÄ’yNAÞÇég»þCþŽ \áûNýâXÊKê—s)'é^Kÿg\~âç2}›6í}Ô³¿·áï)¹Ün]O»ûrÞ^Ì÷³j‡~†"·î{pæ¹âù29w€6”Õ/Ð.Ÿz-ví:û+ýÇÿ£ó²M{ÞW—ýûJY¹¯Z÷­Êêµ¢`%·Œ íÒ¤l9…¼ç•íž¶™Õ¯Ï#OÏUz+èÁUÿ?;îýùsŽçÜdš~vñàN·›‡Dç7*.Yç«+v:Óye;ôø8Ë}¦~éÿÝ|…·²+ÑޅNþ9£àÝÀ}•{BÆž#t¯é˜×xîãÕ­sXÉ¿k¯ŒS¬Ví›ü/Õç»uJ=oê Gý¿ð<‹Õ»L'ÿ£²óL¬ò:äD]²6Üj¬f™ògL˜ëz/¯+ؽ[{Ž™ßºrðÝCôM®Y×q¦~áè[»{y‹¼£®òÍy cÈzA¿§Þô»ô‘Þ;Óîwï„«±€Ç9—¬zÉszW¿”ûH®œóìóV‡ax3ÿ ‚ú à¿%£×mkBTúÎÊþ’xœí‘) …ˆq ĉ8âDÈ^éê>×»gI@ÏÏþX¯jjg»iЃž——Á`0 ƒÁ`0 ƒÁà?üúõëåçÏŸ|â:÷ªçâs¥¬eø÷ÁÿQéùŠþ3|ÿþýåÓ§O|â:÷2|ùòåßÏ.¾}ûö;ï°7eôûGFÔû´ž•žOõ¿6Ñþ®ö_õQúv•¦“×íßù]Tò¬ä]½^¥Ë®gí¼{>pjç«zëìåkßu¹´o{šyªþ¯yeõŽûŸ?þ÷{è-Òýøñã÷½x†º¨/ D:½é3Dþž&òˆ¼¹e«^H×õyê i#/OGôzüϪÿÇ߯_¿þ~î :ûsMeÑò#M”Ï3YŸ#=÷2û» QžÛ›ÇßЙ¦‰ïŒ[\s=Eó8´}E>¤GÈ©éTîø  Ú²Ê×Tªg-Ÿñ}×þú̬üVfÖÿé¼Ìþêo¨SVwìzV}Ñ.âƒ/Ð>¨~Ê!?÷UýùÏËßÿï1¸Åþè<ú#õîä¥þ•ý}âÀ¶Ø=þF[ þ÷~†¬ôQÚ‹Bó¡N™.ð·.+푹^edÔç½üLo+[\Å-ö§k»ïä döW‡ïÍú(}Ýýê6îqÝý$¾#³?zÐ6–éBÓ©ÍiÈïöÇ?òLüåÍ7®!ã3ìO_Q}Пuõïêoßš™é[ú=ž¥tk¥È‹ûøMÀÿ‘Æï!'}/õƇdºÐr2ùÉ_ÇCú‡ÿﲨü:—©ôéº ƒÁ`0 :8÷—ÝÍòoÁ=¸„+8-ó4}ÅÛžÂcåÄ¥XÏdq{bUþêÙŸÖq˜Â©Î®è¸âmï!«Æ¶«g*ΪòU\z·ü[ù´GAåÖ=^§+ruñü{µëLVåÕüþ çU¥?)ÿV>­Ò“ó†Î)úçx…|œYé¬ÒÆ»giôãœ\ÅyiÜ^cæUúÓòoáÓ*=£ À³Âó!óÊþÄíT•³ÓY¥µ?rfògþÿÊšûWœ—sÖʽVÙnùÔõ*ŸVÙîXù#å=ÿÌFÈÜýªÏ«’—+[¡«àFô~ÅyH«\L—~·ü[ù´ÎOÒ‡£Œhô5žÝµ¿ŽžöT§ö¿êoà”w¯|Sf®ûÜÁÓŸ”+ŸÖé)³·Î;´ìÌFå³´;:x ûëØÉÇ÷â)/ˆOSÎ y²ëUú“òoáÓ2ÞÎeÊ)Ve3'w®”ç‘gGg™Ž=ïJþ®^ƒÁ`0 ƒÁ ľˆùœ‚u k˜U,ªKsÛþçØ‘5€nYæ®,÷çbXw{ ⬿wÖ&Ýúõ™û3®Q×”øN¬ðQev× ]¨¯Æ·ºö¯gcH¯úËžçîi½÷Š{î—ôÌA¦3žéôIó8†Çh³òwòÊdÌÒu×wËÈô¸ƒUI÷äWçq”ƒð8­îÕ×çI£>+—£ñ@åì”p™ôQÅŸáóÈGcþZ—ªüò\ƪÌêú޼ÄUƬìß·]ÌÒù/ø:íÿèÊÏ3dç;É«:gB9ÈRÈôï|GW~•—î×w«2«ë;òfz†áŸt|éø+—i5þ«Ünÿ€žá«ÎŸgºZÍY|<õ1NyŬ|E7þkúªÌêú޼÷°?õ®Öÿz/k›Ü×>ä<šÏÿ=Α}NŸÍå»Î…ùžü>åuåWy­d¬Ê¬®¯Òdz ƒÁ`0 *èÜ\?W8ÀG£’Ë×ÏâY»ûÌÕ:‚ýÒÏDg«öc¾g<‹ Ìö2+²¸€îÙÕýÿ'ëWµ±6½žqnØŸ{žrèuç"w¸<ÒTkôÎ.™ô\ r¤•¾nåOàûïÕ>Uì˜~c‡#T?£ñ+®ëžyöï{¼QùÂ,,^qF/XÅûv8º.Ö©gá×3}íȸâOPùì ~n%ãhUÞG4§çø(_û…sn|W}Tg&x^cëô“,Fíý…¶Çù°ÃÑ­¸ò«ôµ+㊠<ÁÊÿ#+}/ãUw8BÎRh_ÏÊïäÑ|»33!m–r\7U9Œmêß({ÅÑp™¾veÜåwÐé[û¬úx¯ëG¨ïµÌú¿Žß]ÿß±?g;õ,çnßÒ½Úow8º]®³Òוþ¯Ïßb÷ÿÈîã?úÇOVé¼=ù¸ZÙ_óÎÆÿû£#¿veü?áèv¹ÎN_WÆÿ³Žªõ¿rÞYL€ëÚo;Žù°ŸÎ1³g²9pV^•Gµ~>™[_áèv¸NO·S÷Ÿ3 ƒÁ`0¼ÀçèÚïQ¸’·¾[ãï¾×ØÀ veO\k^8Ö”¨v<ëZbzº¯²Û\ŽáOìp¥Ž¯b¾n$~ð}¬¾Çoèz•3ñј mKã è«ãvUÆÎþ]^»i´NºÞå¸WAö»#´÷xŽë”«é‘æjßÊtÄõì q ³:£¿ÏE=Ð z%Ö…ßqù)CcñÕYµEÅÑí¤q™´®ÊyRGý-¡+u (K\ûh¬PÓ'¥Ü*^Ø¡²¿^¯ì¯ñqÚ=m=y|KóòøvÅ«eü‰Û\ý˜rÈŠ4µŸÇ=Ž›ñ{Wê¸úÝ1Òûû;=Ý·åòxÚëpû;o@>ú›”ȘéT\ÔŽý+C±“=*ï™É«|˜¿GðJO¸CÊåW]ù–xŽ1.³™ïµ 9_EŸÐ±©â ½ýVýqÇþõÊã)vÒ(ç¨ã Ê‘}Ïì¿[Gåñùw¨œŸîǺÛôã{-âƒoô½ÜSdו_ËžïÎ׃Êþø2åÔ;iT&Ÿw*ßÎwú‡·™“:Ôº§ÇÇg×­¶“SþO¡ãsÌìÞjÝêºï%Z[~_˯déÖ®·¤ñ²+œÖñô¹Ìw]Ùÿ7 ƒÁ`0ø» ë]ÏÜkÙíIŒu¾+e§L]«ïÎÖ‚ïoA^ç°î;=GR¡³?œév쯱Ö;<÷ôy‚· o$Nî1ç´ˆ=:ߥPîVãžuŸ£<´Ç <&«ü¿ê3K«yC©¸/ù4–£rÇ)i=µþ*/|ÎŽ^]ËQ¹NÐ1qŽG¹¥w>ù{å•á ?ÓKvÏå:A¶þó}E:·ÈÎ_«n+{ÑþuÿÃ=ì¯ó¿êÜr ³›÷qÍ“¾Ì³]>>ÿËdÑ}+½øüÏå|L¼…õâàõ0öÿ»1üþ`0 î…lý·Še€·ô®ùŽg:…®×ºñ¶Šž`W×÷,3ËOã?«½‘]—¾\9ûPø×î~Í[°£kOÿûWùiìGc~Æ)ãÄ-<žw¦¼.ý3qÌ}•ãž'vªuðw$V±’¬n“Ñváò(²r²ºÂÿ¸®5Žï2©½ˆS;W¸‹ÊÿkŒ_ÏKÑÏ”ó­8B/ÝÁhùèEÏÕ —'‹9êw?K;Òx:òxðº<–ì|@¶Ûc³ÄϽ®‡§ùVúàyâÆ»c÷ÿ@Û–ŽSwÍ8B•òq®Ãîÿ]û£=é2ôlBÓe6V}eö÷¹ˆž­«òRý(·ØéÃËáÞ VþßeÊöZT¡ë„4Ýûïad¢­e2Þ’ý+nñYöÏæøBõ—ºŸTq„®Sü×ÿ»þß”é<›Ãïø­[&Ï=üfÿŽ[|†ÿ÷õ÷s°zîPç)GèåèÙÁª}{Z×…Î3«³™n7ÅjþpûWó¿Îwfåtöï¸E¿wÏùß[ǽ×;ƒ÷…±ÿ`l? ƒÁ`0 ƒÁ`0 ƒÁ`ð÷á{ÑÙûô‘Á~ÿ¬ö½³ÇÒßi`oLöy„>uo©Ãßi\q‰ìKó|}ÿïÒû7žÉSvu9ÍG÷íñ©ì¯¿c¾#öÙé>·,Ïjoð­òw{õÕ†ú‡Öݲ‡Lûù=«mWèêòÈ2u_¤ö¬ÿ8د–åéŸjož?»Ú²kÞËDúøßß±¡öm¼†ýýwÔ>ôÃì#® }©ÛË×õ·E:¬ìOÛ¡O;<ÿ¬ÿsüy—›î¡Ô}›Ú›¾k‰}~úŒî±Õ|µM’†ï'8CTþ®¡¬o+¨[Wžú‚ÌöŒ½ø†U™ä©ïïQ™õýr'ö÷½î\ç­'ç’tœTY¸ÏwôŠÌz.Dó¥=¨ÜW|ÓÉ~q=_¡¾yª¾M»ÜñçÙÙÍÇ÷–¯äÇkþt§ïbS=2æû|¥Ò±Ïy´NÚ_}O¯îe×ù”摽ÛöàýðtLàœS6Ÿq`CÿíÌjfý´3–#Ëéܰ³?zÕ1 ÿéíHí¯þ]÷š“ç‰ýõ\"íWËÌÞ]åó¬ÊþüO;¾2'@¾ìã@~tGÎü:º«üªç{åÝuÊþê7m1‹è™Q]ßPWVç2ûS®Žåz]Ï¥zŸÒsý‘ÉÛ×3ÐÅ]vç‘îªÜÝxwÒžôÝ:Ú—>ÚyŠÁ`ð¡ñˆ$j¢ëw½ËmkBTúÎÊþ›ØxœíÛkUÇóWøÐ þÅ)‚ˆˆ¢ }P/h½Tú"5}(M[Û[{KB«M«/i(-ô†)½%jƒí¦í&ëÆl²ÙÜv»ÙËÌÏó;É”ÉÙ3×ìîÌ™óû‡ÉÎäÌLö3gv²û›³ÐÛ;Dû¸qãvGúq¦ˆ`Û&ÚˆÓq@þõB<È¿~Øò¯'Ö1•ûµIÔÏ…ÅÅïŸkËv¶ò®/Z¹ž8ùÃ1€îMc¾-Ç:ñŠ_ÿY{Þ#?ÿ·Úÿ ;aëWgàÅgaë—¿Àk»†à£#Wa÷é;pù¯iÎp÷fîÙÌýãQÅÿFÎ#:øh>ž„Ï/d`Çù ìýý?øqd.¤– ½Pߺž£8Fi Ä¦ÅQÆ]>¿•þ›uþ§þ ÿÁúç|xøt²þõ^®ÿ3?unâÀôœbÓSßljiÿoæqDþݹ|ü%¸· RÆK&Ì× X¬Õ oç3wñéÔ•O#w›tÿ–ó þeïkzµ¹xôeî:Wi$_5a‰¹/ÖW`¥šce'Ô«)È^ýÌ×þttt4@þƒõ˫߿ÙîÞŠÛïŸ;ü ÷?Ã|ÏTfÙtvmšgÓåzÊF ªìÚÒ»Á¬>‚›ƒoûÞŸ¨Üëêßú}?î‘_{^åþ Ìõ\uuj‹õ*TŒ%¨›³le{ VŸ‚KýÛíOîuöøqüüíëÜÿb `¡¶~Š”˜ÿš¹f= 0Ñ•Z»ßˆÄgÿªþÿ×®÷ú»Þäþ‹u9U³ †™Èbÿÿgà‰að6Q»mqéÿ­äèž·¸ÿ²Á¨¯²b¬R1ë`@ {L˜bÇB…ÏÇ6Q»Iºÿv½÷Ûݹ Ƙÿª±† ì|o‚Qg×{9v‘ëgîgØë?{X[Žm¢v“tÿíúì}s¢çøãú Ó=ÌùIöÀiÈeoµÁí|ùž¯ßYGÔnÈ?Aþ òO"iþ£®‡&¨ÿkù×ò¯7ä_oȿ޽!ÿzCþõ†üë ù×ò¯7ä_oȿ޽!ÿzCþõ†ê?ô$þ)áR˜ËÂXê><ÔÃ×áÜ9äRCâtèì?p’·%ÿêýwøKn‹m°-ùW7–ÿ°!ÿjÇî¿V¯ÿxÏ|+Óêõo4a÷Ïî¿X,“ÿ~ÚŠ¿cÑÑêøÝN3üçó‹ <¿e‹t>‚‰‹ÿVÆé¹õzΛu|´r;vÿ™Ìì:н…¸ ÁÄÕ¿ØodýÈ>ÖŽ[¼ü{­Ûm_ÄùA¶ï¶\܆Ó>ÚýßðïSìî-ìËL\ýËž—0ϯ×27~Û:ÍÞ?Y;»ÿÑ?Ó»sÙc ŒîþÃlO\æuhÖþ‰ËÄþëvjk|l!›I²ÿ çÝvûßÈu¬ÿß¼õ€ƒŽ­Ÿíˆó1ªø÷s. òüÉ–ygÿ~ÁÄÙ¿õw:]§y]£ùY¯Ÿk,·íÊö±Ùûçtì‹çÿ$ú¯ç7ê4kÿÈ¿Þ!ÿzÇòÿðÑDÃÿ÷^`ò¯vÐ~®ûöƒÞ¾3èÚw 2Ssä_ád§ /,C~¾ÆüB ŸÀòrŠ¥ ”ËXY©A¥²Jµj@­f>Û“uCþõù×;ä_ïàõŸaTáPw?œ?¥¬õ”ÍG° ¶O¢|{¥oµk;N¡úOçxyi–·8øÇà¹ÞªíÉå œLfR©)Îß÷ÒpçîCþÙßí;ã¼M\ü‹ýÈzlÍû‰ØV\&".³¯CüY¶(âäš¹G2“³‚ÿñXú—Eæ,Hd^ý®Ovì9µ‰¥ÿéyÎä$öÿ,‡û‰gÿ—¥þîÏé¸QÅ¿j秸õ;¯èì:7ÏYïB©þñòïvMÔ¿çÊøŸ.p&×½þOĶÿû틲eNNü\?º]ÿy½þ»]C¶+žþ3Ìÿx–gÿn‰y)G¤±þ;2ú8qÿü7Ê~¥JÐÿÜÂìÛzûÎJ8#Ÿß<‘Ø÷ÿt ½ÿ¯wÈ¿Þ!ÿz‡ÆÑ;ôùŸÞ¡ñ_ôNRÆ¡„KRÆ¡„‹×ø/n`ȿڑÿâ4Þ‹8CþÕŽ8þ‹Óx/²ùò¯v’<þ Å;âø/²ñ^dãÁ¨0þ Å;n÷ÛÝÓýßÉŒ×ýÿNîÉ2Bã?èò¯wȿޡñ_ôNRÆÁ:Ý@w%)ßÿÅk˜4ÃOÝŽX¿ãT»£¼ÿù¢v„­ÛÁˆµ;ªû/¬Õ/êÄFêv0Iòu«ºáV·ƒïÛ©ÝQÝ?Ö,ë†SÝŽý}{¿µ;ªûÇzuÝðúÞ& ?µ;ªûÇ{tÃé{›ü|SÒüã}*º!ûÞ&§zž¤ùÇ{”tC¬ÛqªÛ‘Õî¨îߺ?M'du;nß×äV»CþÕ#lÝŽì³;Õýã}©º¶n'‰þí÷$ëBØÏíÉ2 ÿä?L݆¬vCuÿQaë6dµªûoæßAB-ÿlÛDôDåŸ ‚ ‚ ‚ ‚ ‚ ‚ ‚HÿWW¿ÇymkBTúÎÊþ¢6xœíš‰më0]HI!)$¤’FRˆ?6øc>>~Úsm£®+ŒvÁu…Õ‘øνYšuÌ8³´ú³uNÒ?¤WP>Ê1Js¤ŠWiVÿçü‘ý_uKðEÿ‰Ï¸ˆ/rœÌù£Âˆ_âšgK•W]×±ž™ÍEYòclÊó,[¦ŸTœYH»T¾Ïàÿ¶›ùÿíííðŽˆ}x¦÷ÇL#}A› ¼ÒâœöGüžVË7¼—‘^÷}>“iÒžº²-çøèþŸiæÿì;}žLJø°ìXí&ÇTÊP÷3ýTÞ#¯ôߨgÿ®ðJÖùl eäý'ï=ŠÖø?…͘oéçùn€í±aöëì›ô½|7ù>šý?ÇôU–%Ë;«ï¢­ü/ñmöµžN/èãI޵Ù÷fóQÖƒüz{Èñ<ÓdÌé6éd™nù;è¯ÚÊÿ¥²Q¾–mû{{÷5í$ýÀûiѦxæÿg<Æ$ò"Í^¾%=êü¯”RJ)¥žS—ÚçÍtïe/ùÖ”ë —°a};kú÷Ô_µöyµ?¬9ÔšÉlÍzÒÿ}m#¿óGßüKk!¬›ôók(Ë9êGüã1»¿”Þèz–×,­Q¿&îlÍiV濊ý²Üû#_Ö<òœöÂ3¹Îžm$÷^9g —{9&°w³&¼Û:Ë™ë‰uõfÖšúºR…÷:Ö½L+mWÇôW^£§Äz%÷I—½î¥2Ÿ£î—lo£þÏZ¶f?¾k4öW¼ÜÇ-è#¬ó­ ?V/ì—c^ÿ·!÷!{u̵ʴU¦ÙóÙ·ÿAœÑý‘ÿGe>G}þ?Åÿöþv✽Žø3ÿÉX~j½úœ—{øzT§ôA·O^ÏòʰÑ>÷³?syÊ|®¶ðßG)ŸP¦ø˜(°Á\‘ Âv¢¸¼Ÿ ËŠlÇîã¬mžæ+ÇêÂcU¹¬N–C¼—¨Æ#uÿ×̓áÊ€qLçgjh{åûpÏÉ€{zªÛ {OVË+e+û'+í£y`¾±r¬.<–•óÇQmeõºè>ÿÕ“;Ä…5c˜šš®á¹ß³¶_dªÛp?ÓQ=îxRí±<8Ð)eå&mMraˆŸó¢Êë¥ÑkÎ?9‘$X² ðòÁàX§_ˆxÆÊù2±¯¬­NY?üw<&uõÐÈ5çžÈM¡,;ïfmížl*Ÿ÷Ú»ƒ-íd9=µà¼ãc„4âw#8ߨhŽpˆµ\p®‘‘qÂ1Öê^çÎŽŽ’ôߘAÞìÐ(‘’X kp`˜H6ÿ|­ž5 ÷ ÿ~Cþý†üû ù÷Ñ¿ø;MX&¶áÛbuD:àýËÜ‘ÿæ%®±žü§ Õý_åœü7ªç?ײgÂmÈ¿ßèú×=&ÿéB|þ“½ÿ“ÿ愾ÿñòï7äßoxÿü?:¢„þ)ü òïw¿ƒüûä?^À÷]i_ý‹ßuÆÉ“DÞµŠ4ú;¯˜3›ãàË]_˜ÕËTDzk@7?ÖFìk:¿ºíurëø—«Æ/ÖÕ3ߪ5ÈçýËÆ#;Vߤ½ªT{“°åߤÎäõëÌET~Õzûbþu®1ÕüÄyý²6&õIõÕÍcÓœüؾèUçú—ÁWÿ¦ãsÍ?õøã3 ÿqŸâÞßTõºçÒ­ÇÚÛôÏçÄîÿQÇXìõÈêuÞ{Ävõ„n~¬\7¯ÎØMçŸlÎÄ},Ÿÿl½ÇºÍöÚlû{]R¬m¤ñû {Aþýòïw¿ƒüûäßï ÿñ"ís]õóšä܆ùãžGìk+ïZ…«þ!’š?Ì™‹“_µöLüëžK·kßLþ±gŸ¤îQŽu\¨òFåÖyþÓŸØ^çyÐõû¿«a{6:È¿ßAþýòïw¿ƒüûäßï ÿ~ù÷;\ó}—Õlß¹ðÑè×皈¤¿ÿ.þ&Uo¸ì_çwÕq=߯Gýö so2©—½NYèü6";?VæªÝßßt×HT{Uÿ¨öQuQ¿š^ÿ¦¿MªÎïª~+k£;õø×Ÿj\ªkÐ$Ÿíó‹ý]öÕÆUÿ¦}mû7éŸÿ6}&á?*TßµöÏŸ×5ÿ:÷OÕ1–#êQç§ÎkPõ5Y:ã3iãšaz=ùÍæ?꺥XÍæŸÂ,È¿ßAþýÞÿt~$6““cDŠàý÷öÝaº{Ø… WÙùóÀ)çøýsWØþ/ýo÷Þa?œ½Ä.^ü™H¼ÿC‡¿a½½}uÝG ôJ¥²å»ER!ú¡ˆBa‘H˜ÿòÒÊÓëÖIëDÿSS‰€ùŸŸ/ÔîC°zòŸN0ÿbÞ½,è?—›fãÀøL°o•qûŒçÒÀŒU`.1ÿÙìä ¼{¾\„ü7ÿ;w‡x÷a™ Ñ6;Á²C“lhhbyß&Cö²MÖ>Öç±æÿ¯¿Và×_."úïë­2Âúú +¬Ì©=0ÿ×oô­‚_b]ùoÿ\¿[¿°zÑÿ?·dÐyn'€ýqhû×€¬NôóÖ½ ýìæŸÕ­ãܪŒ×.ýÖ æÒ&•qšøW!ú—½On‘”ÿ7û‰ ú¿w0ò³ô ýßí»Ï~û½—H¼ÿ©ü<Û·ÿ(;ÑsƘ/öeÙÑ|ð7—._­+Ñ8ÿ„¿ÿ„·À_ÉAAAAAAAéçtW´‹ƒÝ ›mkBTúÎÊþÌŠxœíœAoÓ0@ûÿÏp,R'!!!qd§iG`-Ê6VuZÒMÝèÚ BÃEŽíÏNêš¾'=‘ıýÙŸQ‘¶Û׋ó"""""""""""""""""""""Fbèß#¿ÿFDDDDDDDDDDDDDDD?Cÿþà P¦Õj…Á‹ØãMyþ²ó*‹å.mK㲩/W„ê·Ü¿éÝ5›ã&i*þ¦Q­É]RwUÿ.ó[¼^Õ¶iíÛîK×øtåå>uçªMÏBé˜Mתžoºº¶ó`Â4›û|bñY’vus\U_úœ)æLÍüHö´ëÞ—Ô•æßöÝ2ÿ’v¥{Aw¿ÍüHçÅõ}ÔTþmñY»’úû–俾ø¥ûKUªž{¾ù/—ûä^÷ýaú±ù†q)÷¿\^uì3~iÿºØ¥skj_²ÿö‘ØãAìŽ=þДç/;¯²XîÒ¶4.›úºøU羨æ$VTñ¯Ù7‰©Ÿªr×õê×¾¯Ýø}æW×¶iØî¡&ò_ÇóAõÌQõo;?ªøLcÑ­A]ûUuTØÌ¯é>×kºë¶eUã7›ÐÕ—{™¾éöÓY²ÀȬƒõz“>z|”Îæ·™ËåÊÛŒ,ÿɶ=ŒËÙìÆÛ<ÿóë;ŒÌ:ó}ó#sò-qtžN&É_óü/KŒÌ:ó{·Âȼ}wr”ýy9ÝOÿ忎oIÜ­ƒáØÍÁÕƒÛã<ÿ÷÷ŒÌ:ó¿Zm02ûý/N¾/Hþãµ×:Ù}÷)íöÌó¿^ÿÂÈ|{6ð6Ïÿfó#ó¬;ô–üÇë«×¼ý8øœvŽ^ Êm?yîíÉÉišüÿ·l”{q>BĵÝîàášý‡ˆˆˆˆˆˆˆˆˆˆˆˆˆˆ¿q¾»¼/5M‚*mkBTúÎÊþÔðxœí}+¸ì(Öö’H,‰Ä"‘H$‰Ä"#‘X$‰ŒŒŒ,™QûœîžžéùÔÿÔˆZsé>U{× °.ï».Tæç}6žÚ³‘-Æ×F`‡£Ãp]Åkß…~Ãóbà ¶ О$Áwݓٱ„ÁñÍ|süñCo•›ÝA+Õq3¶¾lOàx@á(é0ða¹¯+?÷  ÜT,¤_¯7¸s\ÛÞϘ^Bl1)üCó•Ò+ÔkÛ(îFyN"8õ–dPCÌ_9ÈÒ>O0&l«4¸Im+þîënwîÛGrŰø™à»ø)/tih“f˜õÕ Ñ¸X†>ÊʨËEËÅòã)–Ô<,é6ös4ÅáÀÖ5›zàbð?¤¢Jðàö\<OM%O#(7ä6à:§= ªêýÓ‹YA£÷ƒH ¶«L s6›ÎMƒXêÈùBcX&ǘJ½te».Êöü¨Ï 3.je(”Ï?Ô?õèÉLÚjï³=€ÝÚ%wƒZˆizFTxô„$¯kPö8›E·mòø jAO™ñÔ×úÞ€«ž>~þ’†åÜàØ†‘ºéB9úµâ † Ö¤8U­«KCÃv´jbëL èåçC¼ï€y¯¡ ç;¤mj P.Ô —øãïDkñÂêwþ¡UÿE€3ôܨÁ”‘•’8xëUÀ…JÊü¹s£‰ž\„³èÉŸŽ+;}s­FãQ(KI­î÷¦XÝ›„ƨ ¹1 Ëúþ+Kú¨èdXŒ];JÄ£Žïcˆx$§DÑ×·Þž¢X`i× ì¨ëÑ@lÌûrn°m$¨Æ^×9΄ïzBGÏž Q=Ænfäk„Dêö¬e; <¨ýøaÓü>,µâ¢ž›jÆïk‡0BŸ[p(õâ$¿º‡Ç ‘ÛöÌpý4 nËËq`”XÆ“ù úvϵöèÙ.xõHnŒûorŸJ¾€Ï5¬ñÁàÿHàu©‰ñê뇗 fà§ í××a앆‰[Z:><ÇM@J£9óý¬â$Óq]¡}=H… kÐþ3ÆÊºã¯ù鲺t¿Q“=‚, 7ÆÇµß»ýìêçs Ä>ã¢3ø¶ïÞÜ6[¦Ñg•¨— RLت¨ù­?·( &wÝ.7C#~B{‚]¯Ó ×â—UÔW² 7™Ò1jk~‚e”cG»¿rËÇùÐãDØ.=ôËK´ÜîëÅ@ÝWÝDZMû0å€ãûíèä¼0Î\Úòxó®vÏqßNZ¢ >#Æ ƒ„ŒàBE— ™¥)•‚º&yØA}tå?Bûê Yìm(ÂWIpáɱò€ñ ¸|½2—+èýà\2·ö íÞ)lÜ8·ÖtlÁ@Z.B½€£ï•eñ…‹ƒRSßôƃm>d˜Iéþlþôò'N a†dÄ¢G3¹%†¼#«)?è¼Ï$sß _5=²íYÇBR#-k"qGP-Ðeþ"çf­ÁÂá%Ö©-Ï“37êÐäÌÈ8ÔM9™ÏŠŠ,¬èä_*n;H‚ÁúÆEBƱ†Öcl¿~øÎî±ç Ë[ƒŽ/saŸg¸IE2å,zÒ1Út:’kLÆÓçÎÁ¡ÍíÈ™壋G)æÔ{7ÊoðËÅnd¨ø¤è·ðá•{@rõP˜>ÆkÂwŒk×½¾¡ #¸kXfy‘ÖEÇ÷šÈA©ÍBÂ9ÂuM°ÛÞ4P=¹_Ól’ÆgW®Ø‡ÝN•Õ#–_n™‡Gï¤pp ,Z…ÿUu›6È“÷ÃV¦›Ó°¸å0EK‘7*|·ý]¯{ü75F\éÔ¶»úzQØ z!á‚Ç uH€>îÿó¦upš²ÚöõTÙ£»o3P)ˆø´[à^Õ6ãÖÚóã` -šd&á*=¶%ÄÀÊfY’<¿^’ƒØ·`_6¨ßÈ|h¸Ìë3Ø¡>€„2 Pºúqÿ×7ÏŽ³ ýÕü,Ns¾j»F™=BµŠü` ¨í³•C§òöiŽU’)Ré@LÅßÒ®„‹ÿ‰·Ç§mb<2FH“Rq°²ùF½åãø÷Xºi䎲õOm¬GAýÝ·ôÒ}:¶*¾Ëu ÄfØ:@Ê«RH™.òÙ6Âñ¼±Ã6Žjå§cæGOpO- ú­6HÒýúÜÊKÉJæÛUÀÎì:ºJǃ¾ŠýÉvÆ,¡•¸¯3ÿ‹DìZ‹¹EñÊÆ®ÒqqðìØ7p?¸ƒÈŒÞK¬÷Å%ȧ$;â¼?ýQ¬r6³pP7`¼a™†¸é^=„„ýÉRç¶_†õ™³)m£„Ç>ÀD3#£ ¼_' çIþÂÉ­uÍ‹CÁÊ-Rne㯄³²Ïóss•ÀîLÏÌ<È­/µàR)|Lt_1»éòÁ¨L¿kÇ=‹rr 4ùìê§ü/gýšEÀrþÀ~P†¦nBß[ ®\g[{¡«‡’g£ãYÛvRŸW'†‡ {Fe°m1ïÞŒ{ Ýw¾LÿÕ;7¨&$‘çþxúcÚøÃÐ0Ÿ ŽžnÝö‰óí&úÚuÅ@5sCèCÕ±mœñ8Hƒãefñï¹Æt ’Îx{q(a¿²ÛÑ‚a¡?€ŽÐþQ“%ò§ÌlÁ¬ö4ô‚¤Ï‚xmWI׆€Gí¯¦CèÒôì1ê’Ûk×QÖýŒ3iJhÜ,Çÿ€úãú‰KºšRˆ÷ÅÄð¢ÄÂÈöÈO`úÈç…ʲ»†½þ4á)ú%ˆùÔb6îB8ý\ ³pµõšÉì«e<êºíS鹂ØìÚ+ÓjsðÄpŒ„¸ß%<&t{3?Œ£¬|N)p7b™Ôîãé?Ôa¤iäDµWl’¡½ðˆX—ŸÀZÚ>;uø)¤ko)#WáÈÍSšn®cR½xô”{[ÀsXv1¤¬95‰_¬¬0KéõÁжՙ7Ú>žTp¡5‡‹¸Ù´¤l3¥Sü"ØêLXê…ç«[á5mö¡ø º¿Q="u}ö‘ÆpϘ*xböÕ‰ºîã—ã#iM+³ù@»Z! þ·Ï®~jàÒY”ݬ‘¡´Ò$?5Š• mtêuˆ] ‡%Ž@Ž÷Ý…:4h8Ûƒ¸˜¡»tuì3À;ú ΑO¤1A/r‹¿¾™ ÆÏR*5ÀÇûÿËìiÜ&j#Y2:º$Z(a­dæ@ß>'z ž„×L¬¯³¬Û뇶©½6ZÑÀ8|`Æ6Ý"åŒX1ß_€z' îF-©÷»Ñû?°úX^ò A:?1¢;ØÌh/KžVB'õ üvOnÏFSò‚¼É õƤê°ïÌÞQ{=kh7™ÀMå¯ÀwXQùpü\vïÍ“ÎO/ÿ¶.ÅöÚñ¹ ôN3·ÍHKRðÉlŠK–"›qò”‰^Wܳh¼1wtùã  h@§¬Ñ3ðe6þN|–’¶Á©‹I;yîó?8t[ƒ[é!‘ ú¥µ$,ήL­·e–"z¦å%IÞ†AêkÜÌRäl!3uú8àÚyßë?_žWÅé½)ƒAbCÒõéõOù!rz¿„a¢¤5S±ÍnÖ—£³ˆ#Â<ý43yÜ6"ª ÒRýêÑô߃C‚Qå¿&>¸[¼# BHÍǽß{v¡eà×kOÃ×TÉlq(UHð͵h »Ý”8º,@t°µöÈÃÕ‚LÛ{p´•ü‰/Ø*ËL"d_y ïŸk,4î GÌ–ýÑbD>,ÁÏ.ok"ýD;†|7–[.µDÖCíAœŸä#‰iÇæélÿü¯‰ÏŸ¡IÖ¬ÐòâóÞD¿q½]+ÞeE •ò–_«-- ™ƒ¦ Ú°c©›³èç€^ø¿¥Lô˜q±1~ëCßC“ÿ”øžC“9¡ŽgNäóýÿû“õHÈ8Bkhêç«JÁŽ#Z¤-`úVo§™MËa 9r$îÕºZ-¼hókhò ?C“$· û^–ñtÄ÷¿9d(‘8PÝ…]Ú¶š£×w[¢wléÏ;µŒd•Ôn—׆ôoÎK«èdù H¦Þ„(Dú¯…¯Ÿ¡InüIÌ Mïãü_(ù¼ðœ’îð5)6H/öõÌYÍ1‡¸ ±QRæŒk,nËÖûXH½­ʉð‘ƒÊË?>ÿšdf“ç&6³üü½^EJ–m‹ªétÞÈ{¥C—µ›½ÌC¬c`½îÙ0Ê…v5ÃÂx<äƒó\9Y·Ýÿcáû×Ðä}1Ú06"×´!ÖóŸë9êdl:'– û1H"Áz'7ùQ‡q›„¹Ž¾¹ÉŒí#KâR.ò/C“»VÖÜgÇQ×Ȭ¨åéãó\ âì`¸·?dÜÛ1y³”åuMÛ6Ƶ8ZX]8Ãø^p…ªwQëE¾ç &­1frRšÁKiûñçÐ$G¤ÎÓðÔÝœÛÇЕŒ¯ðh3'À®Âø”·“Ç{¼±š;;Ö~F öKî37Ðkš–Ìu<pöµdÊŽåèˆ+C¨š¤™ Rá‘÷Mz¹Æç¿7)nÒ€©æöÔ lEGyÍl½‡:Ì‘ÿIÞí’o±BìÞÿ—S%|ë‚ÎЕïsTuÆleÁõ’bšA}A¸ëæížÍ´þ1ãý0ÀA{ÉKù“ʘÓº¼tjÑòÇÐdLI=rž ¢PRgóûÇó_Lb¸R³£é Åžël?«â”ž)!°Ö[«‰FÂæoÖç wi&k^”CV(t@püW2Ó÷²ó{hÒxH—GRn²͉ŒeCbúxÔ‰°ªé6GÁ³©÷‘¬Q…Öd27\ÌØ«dœS‘É=\»F§f*¼0é‘Û£ÜOPúÇ5(r„Zß™xQ‘Z>¥~G AeN-õãùÿjYôÜ7—Ò¾n;ún?Ó¹"P·¯xÒ}‡·•/àNäöÞW:ÝŠ&´—×¾†Ù:x" ꭥу;†ÄRç펔¹ ®cä›…Ñ™õ±ñÜýüýElmG§a= hò¨BG_æu…³×YnZì«­FYs ôUéµ"zM&Ë:ËÝGn¸Ïuí.õDX‰ƒÉ5XnšÁ¡ö›;Þ}¶Ô«%XO?½~2&ùÝØî¸Frjj¢¢…8ˆ› yAÊÆä*±W ¡³‰€©ÒIÒ˜÷“9/¹§u‚b)õZ³l:ë sá¼¹ 8²5ÀÀJõš>~ÿi´œÐó˜I¿þ3YÏÔ•;ç:#hEL¬×[ROd‹Ê^GéšAË©fß~Y!ýËÐäEåêñn·ôü0¯~Åà/«AÝò –Kåm÷‚±>^ÿÝWY¢q†"µ¥â<цFвÎë*c¹½:xÛw„|¤Ížw­—%ýehRg°åØúæÜæd¿9ç´üÌ•ªËÃvž3Àv Dg™hç>>?ÿò3é‰hŸYDkgCã(ʹƒªÔ•ô×SÉ·†¬Ôœ|è 2QÁü94©(ñ½?OG•Q34… fëcc³¶PopT€Yaƒ–W(£>Çÿ@­tãX4ˆ`ðLG¦Ùžp•‹É„ãaïãšÅ°l\¤[9‚cû26óâU M6f,ºŠò¼Ë'›¤…žCÐÖñ4øi¥?W~p¯sÏ ?žÿk³ÞA÷×KÃrŵÄÅÎk@–Ið|>^xðs¸?ý\Õð`,DèäõÌ’©Œ°Žû5¯éWÛüÉ^£èøçw €DÓµMˆáøXf_8<%|8_왉pPó1†…ãî„WþÀlm߃˜“Šf?4žý¼»:½òÌ“_£Ô”v ûûMà;kž:pÍÖ²â_ÖùásjØŽqw]$F‡£}ÿ¢»y« ××û,b'Õè°N‡Îþ=Ôo¹öÖôÔ0, õ¨Çÿº»â~–ÆM‹ƒÄû Y•R´‰¥4â6+!”}@~u‡j°ctCÔúàõP.ÅY(ýxÿ׎ ½×zµ?70ÆWXFÜ£¾oŒ½·¯‹3z‹Š€0°®Ác8¨R£êG±¢g›0àö ¦T—Uëøò„½»‹w­"/4³ÞÖ÷¿¾îC¾Q`[{O³“ºcÈn¯]•¶+•{Û{­ç¼ÞÕÎ N!3•<®ÞÇVí‚ìyxé,!C æ™b². êlfÖ×åÁø'„ÒÁ\ ןÎÏíãëgu,μ·¸šw-/ôß3Û¥ùºñíN°íâX(›c ƒŽÓâoõMDð‘sÊ¢a·#ü#0{c ÁÈÀð%µuDWCB¥Z€AéÍZ6»,Øçûxý (Z%‡±µØçw€ÑÀáŠHbhTb2ùþ<$÷Æ*cÀ¼ænk÷³”_÷וð«Ð÷¿#{D+B<™!âÇüS/¼gÿÃ`ø9”­.^]ŸÃŸ™ÆCíÌ+>™ì3ïƒ+•ý5Æë]¤q‡„Äp¦j' r¯9µ¼FDȬ)~: ã躟—9GmÜì“x2’¥ù-?s–raG"yvU³pa;R«çãø÷ăœ ÌAŸ\&ú¹“ ÿ?#Äìn Ûí0Úee½´“d~o’qå¶­¯!!DzP^H)>¾oµëÈ‘.®Ä¼‘Ô¶=Hy»7´S´-M½ á?Þÿô8y£c¶Î™ß§q„|Ü#Þ5"ù2Б ‡lµm#—ýU‰ÑÊ»ìýeüΤÎV†ÎÈbMƒ¤Í˜÷jAÌc7¾Z ä]> 4½gbö Äýñõs 2WRsKgí6Þæç 's8qzñTT[”R›[wÄÍ)I‹—9ø5x¥ŽÜWjýÚ #”!nN+zP’ÄÚ”â ÁKgâ²ÁÞTEŒ,ÂÁùÇë?³¥{é^R¨DÝ¥=´R¥u^zîc¯’§³Ì¥&D¼‰'i74øSËJ½ß”í&H¥æU©Gà»[û‚ácrÃͦŠ<ú’‹¡׿~þ‰4}Ú…žíh¢°Î;¯üòlpAZð´%’XÔZ;t®Q?„±÷÷žóy™ïk1+Ƴu6Â[«©ÌÖè† áDõ™c4¿ÆœÚóÐÝ*d„•B#!}Þÿe>Çsamh¡¹ÿêG3c^çæ—8u9󼵕⸈߂ÏUéy‡‡B;f "Yi=ÖD§ =Êâ‚Á4‘íŠ&¡Ž’Þ×|¾Cý“Ò3»Ä÷šg]Ø~üþ›WgjhSIXU“‘"1A5Fr4×{üáÜëAä—éljŸw¸TðÎá–Ýt6<ï/NÁ  \û¤õó«R¥tÇû˜a| Æi¨ÌÍ>‰T.šWo>>ÿxŒ•ϯ¼Y¼æÈ{ç··m,J²{gg}Év~)ê]Ñæs!?wøè÷X›‰æè˜G—F°¥l!7ކUœÖ|Cnáfï³…:.@mq%®Á臔±ÜÿÓRu?.–:¯èaBë¼ÖºÌÌE#Gƒg'yX«Dåÿu‡SWºä™ÇŠD)Œ˜21×ѵ‰VµˆagW¬àP޳²q½ç«ÏÈ’Ï Ís”?¶•@åg")ªíªç©s\ÖTòâô{Þê«f3g÷‰oÑþÏ^w:^ë¼"•Ý{¹ªd#³!φtà}©,nÆyWFKv„X”4–ƒ|<ûB+ è®Â8ˆi=-;´³X 5l=/xlêóŽw•–å÷n³]ì à+SÛÓ¼,{Õž¯/ДâV¡û»+<< ØÌ¤®Ào ŸâÞçèÔ‡eNpù^Oÿþ¼ÙùŽOv qR¶ £wHF3ûÝß=oý;ü`~k’RÏwCßÏí²”u¦ãk¡jE˜|û‰qÏ©ŽÔ‚KV,Ï àÏ*?ÞÿþxkáÜ}QxÁU¹éœ/MÛüÞÄÂá= ¤Õ°pý¾Êæ=çŠÎ^xúBË÷ÞÚKx«§Ó@ð[òÎI™¾ÔYB]Tª¦âž™çÿúÑKqÉ.á½€PÖÛwÿ¼ÃÓAG\ôšWÂÏ‹Øâ9ùãÏ2S³—åA\è“Y\œßy=ǨðGj÷¾ÌéÇõÕ¢ÂMî@âŒtÔ‚¶„vD¾üƒzÎ+²ÙÌBĺ\·Ÿ¬ü¼ÃÕ¬…÷Ùë6ËÛk™6Lþ¸Ê¦ÚRß_rýnl|UAϯ< ¢¹Ë|¦²!‚¸;ºÁ8™_1ÜgésÞùÆCŸ‡ÿ¿ä >êVB‰~æ,¶¹® Ë˜_ÿ&f™äÕjpñ/WÙÔÊwaùO ¼š°H 3ÉÛûþ¾I`˜ÈòuØù»õ¸1êͤÉû·ÈÏ÷ÿå+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò€ÿÝš™w)¦÷ÇmkBTúÎÊþ€Kýxœí›MoÓ@†óÿÜ8©\ù=r„ý8P.IÕ H› Ä©âTšJÅڙȎ÷y¥G‰â™õ;ïÆvÓÇùüäÚeuÓÀ‘0ôïß@Cÿþ†!„B¡)i6›=ãÉÙç•æGi¨ýj«¯œJüöc½çO”ŸCKª7Uû˹‘;6–ÍS.Wó×ÏOÕ¨í;Ÿw{Êj[ÿ½”ßÓŽO*¾¿=§œ«,ù’¿¨ù+õÏâOßêCò—ŠóôRóï©Ï;÷Sù%~jÏ¿œÉÛý—üYâ¥ÞÔö_¯4vlý/‰÷l×â]Íz½þ×ÎÿÒ5HÛŸ§ÿÞùÑÿÒõ?wí`]C´µÑ¢œ«?)ß²o©>k–5Ö3¾·þÜØhú¢Ïm‰9ŽB!„B¨5ínKo÷9û¼¡n¡Çzë>V_9•øíÇzÏŸ(?‡–Toªö—s#wl,1š§\®æ¯ŸŸªQÛw„?ïö”ÿÔ¶þ{)¿§ŸT|{N9?VYò%QóWêŸÅŸ6¾Õ‡ä/ç饿ßSŸwî§òKüÔž9?’·!ú/ù³ÄK½©í¿6^iìØú_ïٮźþšõ zý¯ÿ¥k¶?Oÿ½ó)¢ÿ¥ëîÚÁº†hk£E9VR¾eßR}Ö-k¬g|oý¹±ÑôEŸÛs!„B!„P‰"Ÿ›!˳·ÚgwÜcOZo¥Ï,Ïæ§ÔoËóc)§äo¹üÔ¶þ{<ý¯?FYÿÎTòYM~ê|ô¨Æ¿÷ü=6•žûûÏ-õ×ôßêQRÄ÷·eßÇ|ÔÖ.ŵÿ%qS¦!×Ëøš<½óx)ýþ»¤õѲv–\j׎žïÙÿZ¾e|)!„B¡1i»ý szúµ­‡‡?Ð0÷÷¿\ì$½Âø¹½ýéf§W¯ßf_7O1Õl~…RSo–M,!ÇÍýo»ÿ]wçFë·ÞV³^ß…RSo–u,Ñ5?Ó¥Y,¾»Ñú_3ö?¾Å²„ÿ ÿMóùjUÅ®ÏÒk|=WÎ/®YÆsyË!<sñt,ãY&ùt¶€†9;_BÃ|øøfþæ4ÌꦀF™ÏO ]vÿ¡ÇÏ_|‡§|Vt IDATxœí{œåîŸêî†p†‹‚ r3ñw³1ºlÑPÃeˆìn]B.ucVO’£ ‹ëæ„8Š€fEbÆœäõdwM£"0ˆB`¸Lß»ÎÝÕTW¿UõÖ¥»«gžïçÓõ^ﵞ~ß·«”}íÂÈLJ«;wî,r'„B!Î;v,¤Ý#ú ½›?n™L«.V¯~"ÿ9W©´†B!ÕÀö¶6ìT£ S´1M„Í›7§bFVk֬ͦ(#„BˆÛÛÚ VÇ”}íæEØ_ÿõìJÛWµ<þø“(È!¤§³½­ óçÏÅû>ª´)$ èÅXDasç¶BU3•¶­j™;·ðÄëŠ1Bñ…?ýq©¥ÿyŸ\\&Kñ ãÇc{[0v¬š?#¦ªjA ¿ùþf¼qb t¢Ÿêÿû¾›ý³²J™3g&֮݀àê!„øÁ•×ÿHèþþËwáO\êIŒ½ºýû®â}vÂ}®ó,ÛÛÚ¤ÃN?¾„–ȳëå sãö’çó/Ë ÷‹¾[òt";wîĬY3É ±7Ž7ã’®W¤2€7ÔÏ¥ÑS™5k`ݺ§¸:F!ÈdBȨ*(T¨@î3P[ߌÆ38ðör ½d‘«ôÓ™.™þ/–aÞÝt>1õÑ‚ër2üÅYøtíÜ}y Æ œ/ljÓÂWZŒízy&.|ÛV~¦,bléòŸZú/^tgIÓÑVÅ"@ñj “B8Æ·ðM[#º÷G@&%N§J¹÷Û_ÍþÁCÿ*í§§µõ‹X¿þiŠ1BqIJUQu/¼x"‰x<…D2…EsÇ¡¶¾ÐïÌQìs.¼ìnçégB€H›†ùíéÀ?=°ÿ0sŽå®ËÆžÆMìÄ®#¿°ZZŒr+]NE›S¾ôãWR„B 2©êëqÞ  nnÄ5Ÿˆ¶]ƒœ¾F2™ÆÛÏ_‹KnùUIíò YÁfFVˆ‰V²Ô‘l½¸/¹ï#%÷!ûÝ$ CɤÄéTˆ>õuè:õ”†¦r/ºßÿAöÛÐ}÷ÞUànWæ™3îÀ†§~N1F!.HeÂH§™“¯ÈÝq¨@:4_vöKñÇ[þÉUúÉtö„N¨èéNg9ÐÙ°á¡V*~µµ¿«¼Ü0üÅYX<±K·u`ñÄf¬øÃ;7±lÙû¨qŸAMHAmDA84÷`HC-Õ×`ÄÀ^øï•cðù/?( ”ظqþ³2xîßþWÞþKf—W¥áue-Á!}%DM¯l]ôƒíŠâTçIœ:y Ñ®.lyê¨P ¨*"‘0ÔxR˜ŽFß¾õ×§OŸ±4̬ìqÂÒå?ÍW¤±ÂeòøâoÃÓO?C1F!I¥ÂÈØöÛ]H¥2H$SˆÅS«c_n‡T&ì*ýsš‡BJìØ™üäáë\üYÓVЧû¡ñœ>6¸.>·/Æ êƒ3{~ˆy¿{ k>}Ð ,ž,ý÷ÀŸ»»wW½Ê¹ ¹û7¯Ÿ]K¦ÐÐXs›1x@zŠÁ·þO-½кðâé•÷*põÜ×Kf“ÝÙ¯rbº5©f’¨©É ±‡¾‘=„Ÿÿ6 ™Îº¨*PS5ßšlhè‹S§N¦_†mL/y<ø½åX¼èμð2 °Å‹îăß[.ÇwLÇϾ‘bŒBL‡‘N«¸î/FŸÝ•1Ψhlå*ý†~ç¡©Wu!Ožý’A'®ºúz@ÉæþÚŽm®ò22hÌ 2M¨ÅÐÆÆô¯Á¨ÆÎïÁÅO½†O·ŒÀ[ýÞÇ¥£±t[öÝ¿Ùu^•<ÿuï¨Ç1xæ B¿^!͵*ÆÞó6Þ?ˆ¶#MáÆI­H”ÙÎJaº5©¤S¨©­|{I¶ñ±8ºººpúÔiD»ºűéñog[&!L§±_Nvž2ÝÂkìwö›ÅÉÎSEnzw™ðú°Zžfþv<ðà²1¦±xÑxàÁeŽ·bo¿mþý™g)Æ!D’d:‚tFůÿswÑŠØ sêqÅ'ÎÃCš1ú’‰p³ÑÒ§¡‡~½ûmô¹#ÿbúÔ†OeÅØ¨Ñ#1î³—P 8z¸Ý—²ÞµGw·ãpªö¯ÃáÁõ82¤/.Ø'»ù³7€›>…¥/mÁ+_šçKž^WÆDçÉìÒÐÎá ¨-ö +@„”4Zx 8øÌ}`>þí‹ ~ÑEn¢W7™ÜÖ¤è°~55Ù¥ÞïÞuSþ[ˆöA[KeÔìŠX:)NÇ,}ýû7âĉ“ùëÆ~ ùk‘»1|FU-Ó°ó÷‚Y™ì˜>}*6nÜD1F!¤Òa¤2À5W¯xÕ÷ 㟿ó-tvv¢ÿþ¸ë«‹°âÑe8r䈻ïúšmúêÁ—‘I¼‰+?ÿ4`çK_Â^5Ž‘Ÿý{ô® #™Ê ™2¹sÑ*$Sþ”í¾k÷¢¶å«B¿u7‹¿,ýÙXsû ®Ò $37ÙûưÚë­^›Hg…˜’ûOÑDöÐ9%ƒ°’F(\ @Aa<ÜÃìíÙ×þa«6XÖÏ$‰d…X2£BQuµ§;¨¹±¤é ‘ÕÊ‘ÑO»6sïß¿Çu:J£ÿFi{ô<øÀ×…‡ð´3c÷÷©tŒL›ú<»éc„bC2F&¼öûâ±±#ãèÑ£hiiAGG@Q´´´àÝwßµM»ëè8}è9Œ÷ú6]hûØóë¿CóðkÐ4ä2„C âIàDMçæ¶&ã)‹“ý.3´¾àìÏØ«æbçkÙ÷ß“;˜¿sÛþæéMŒÉˆ0ˆç„X$'­ú´k(!’A:Ô'Ϥ!û$SMŒU£ògÄD‡õˆD"ذòI(¹oššU5!–ûõd8ÒIÓ'ó[=±ßè§]‹ÜuœÓÔò×vihádìÑø~³@„ëkbì;÷‹4hÇÔ/ÜŠM¿ø%Å!„XJ‡‘Ψøôe#‹ü6Öàùðæ›oâ²Ë.Ãýß½ÇÇ[o½…óÎ;Ï6íã~‡Î£1tüi>þà~@¤¶/:ưï÷ÏbÀÐËÑ„‚gÖν÷=\ ~½>;íÖ[¦à—Ï¿@1F!Ò錊«ÿü+)jîߊG—!N£OŸ>Ø»w/.¼ðBttt`Å£ËlÅX:•rÎU@ú4þkÇsh{;®¿ã Ò© BP²«Q9Q =Ð5æÓÏùNåÄU8„Â× ­Ã»‡¢øÄ¹u8éPˆÏ‚¹9dïñ´Nˆån™Úö¤¢¤V¢|êùw ¥6#¤†òqzæOÖ0û‡ÿ|˜]‡U²ë±Ù‡é)øè£qí]kCÏ¿O~ës–þøhÁµ–§Þ]醴I»…•IÃ,ž÷Üûi+?7Ü2åf<ÿÂfŠ1B1QCØöÜÊ"÷!CÎÇ¥—^½{÷bذa‡ÃX¾ìQ¬xt.¸àìÙ³Ç6ít2 „C¼…7ß|péUïbðÀº¬Ÿ’ÛÌÎ߸dOoöçùV§b½ä¶ìÓ)ÎK†Ô*p:îÿŠ˜Þ¿”¢,ž A²eS²¿? e::úK¨C¦!£ö‡¢Ö ¤dãô²[“ñ™©'¾1N:!³4ˆ7O¾ ›_|‰/ '„7Þ0ÍÒĈؽ{7F ûåxÿþý1b„mÚé4pêÀ nî‹¿™ß Ü\ƒøéÃH§_lÛ‰#ÇÏàüÁç`Ù6z/ŒX²¿yq+~#ºÆqú•~w¤FM¯:üêßbG] ÆþÙµ¸tè!Ô×õB 8œú$Þݱo·ÿg’ºX‘ŠÙ[n”U«W'ßtc¥í :^|éeŠ1B)1þ°ûÿ{ÐïÂ+çaèå ]¥«ý¢Pö é¹ä_úíåÀ9ñŸo¼/¿¼…«c„RB†^¾ÐµØ"Ä/ÌŸ#F*Ê “&¶lÝŠ97Š2B >Æçj‘Æò°>©<“®¿>ÿyëüE!„Ò°<¬O‚ÅÄ òŸ·mßže„B©N¸"V¥å×0„BqÇö¶6ôœuB!„ 1B!„ A!F!„R!(Ä!„B*D‘~Ñÿ47c}X‘!„B±¦àeNÃ/ºûÚ?¬”-„B!= Ï[“ûÚ?ä*!„Bˆ „˜&ªŒ[Žz±ÅU3B!„(ZÛ×þaþŸìJWÅ!„BœÃ_MB!„Ti!¦­z™mKrUŒB!ÄE¿šÔó`„B!¥£@ˆÙ /£¿Ý5!„B1‡gÄ!„B*…!„BH…(ØšÜÞÖV);!„BzÆÏ.bóçÏ-»1„B!ÕÂñcqèØilÙ¼cF‡ª€ZN èÿªÀ{»Ú1ùÖqá"E1 !„Bˆ)m[_Ç “Æ¡¥e”£x#ßÙ¶­¯bÊäëòn<#F!„â§"Ì,WÄ!„B\J§…„ÃÅn~ÓSQªZ¼7LHw ÚûwµÛO¬aûz£Ôõôöñþx,é(|¤¾XˆõØ­IEQ þ=]â7í`l¿Jµcû±‹êJÖn/ås;¾ìì/•ž#ìÊ.c[ûg©á¼~/ã¯Ô”³b±DÑ¿›oš$tÅÂ4ªRˆy­`Mkÿ¼¦£G»ÖÒ¶šÊä´}}ÃídãÅ_£Òß$;-êÇq 9±ÙKùd⺱¿øÑÇüÌ_„L”ªÞœùr·]¥Ç¤Ÿx­?»¸V÷G»x^ñ2?8%Mü›>u `úÔ)E~Ѩ!fõmÉèfum÷mË.}Q+?d;‡_ŠZ4ÑÊ~­ÈÈÖ·¨Îdò·k?™ú÷ºÚàÅ>;Ûœ"ºYÙÙgeƒÓú3ó3~¶ŠoÖgÜÔ““·ÛöñÒwì°³ßÍüædþ3›ÌÊlçæfþtssåá¦ýü˜_œØæwýÉ”Ój|9¿²ãÛI|+ìú¿(·8m³2û9GÈ´¿ñº+Ïÿ›Ý:­Àovë´ÿ®h\˜o‘ÓªÙ76³o˜ÆÏútD]úÆpF?V´¼ šÐœÄ3+¿ÑߨèV“¨±î´N¤OÇMý‹üÍê_”¾Ÿõã´9¤V7E'ö™•_¦ÿʬT8-¿Ù¸2ËÇmÿÙ!êÃvùz]1rk¿H‘Ÿ¬Êo—·Ù|'Ê×éüé^ÚÏëübÌGd›Õ_?ëÏh«Yú¢8nïvó›ìø±«?³kcyͰnÚßXw¢û›,vå7kQ¼X,…X,…… fæÝV<¶6ÿyá‚™ù0±XJhã1ÍX}%ˆð:øýž<Üä_iÜÚ!ê¼zd¾1¹-»¾oØõÙø^ìs{3¶›ìüúVè·å÷Ú>~Û'"õk‡]ù¼Ž Qû”rüúAPìóÒwd„†¨mdÇ—Õ}ÓIÿÝºÃø‘[ª~d'"õ$“IÜý•9ùëG–¯F2™Ä#ËWçÝîþÊ$“I$“âƒýB!f¼A‰RݼÊE©ÛWæ™^WÔÊAµ¡YÉ2y­ßJÛ_j‚ÞÿJm_Ú×*ÿJÏvõ_êú BûXáÕ>‘ø^²l`ɲUõ.ráê°¾›e÷Râij(M?ÊæG§´²#hõï·=^Ós³d]î2”² eú:1Çïú’¾2;~çd‚j_9êR&½rΕ 6È ‰.Yw=EÏ3WÚ„ »ß,Ú÷5K_ï¯ù™Å¥áfëÎm|™½oý_;Ûaìüaô“¶ÈF³IÞˆ±}µxÆkQVm/ò·B”¶þ¦dgŸ]|·6˜ùÉ„qÚEÂV¶}ÌÊo–¾1Ùzõ ûìÊ'S¿võãÅ~£ VýÏÊ6/ãÇ 'ã×,}/ýÏοÔó‹LûjñõÍÊnV6»öÕc6FEñEéØÍúþçæþa´M¶þDùmw:þ¼´¿Ù\âtþtrÿÖÇÕÛv¬ã€in>ÐÕÊPÑ öš†¬Ÿ›pnã»M_&žy;‡“0¥l_¯íbgƒŒ}²e°ÊÛkõÒÆ^ÛÇñe‡lû;µÏœä!;vDþnÇI%çÏR¶_õc‡Õ8ö³ìnç/uTîñáe>µJ×*-§óº“1êÄ>³0Çt‡ߟ¬oõM³;ÐËDº^W$«™j·ŸXSíí[éûc©ó zûÕ>ß…XP JHOc`±ٽØÛ¾}Ç1ÂwMB!„8`ÆŒiX³fšššÅëè8†™³nC:Þ•w£#„B‘$¯C¯Þ*æ-˜…ÎþÚ>R „B‡E A;%’ý|öÈÈá#'Ö¥W•ïš$„BéPˆB!„T 1B!„ Á3bQ€?„!Ý•jïßÕnw'èítûHe¨ëE¿~}ñè¿®ÃÅc†ù§Ó„Ãâu®÷víÃÜÙ“ŒŸu ¬Óε•j>ìW>¥J—¸ÃM?Ò·¡ªVn2âM@ðÐî·óƒ¨mõ×^áø÷†]ÿªJ}ÿ *å*wê÷Çÿë)Lºþ/ÑÒ2ÊQ¼aÃvcýSÛ1eòuy·À 1ã$é'Æ€Û|D7ã;ˆ7S¯TS™œö#?ú†]ýÈÖ_¥ëØÌNQßÖOŒ²uæ¥|2ùXO?m¥Ïñï>«þUN¼”³”÷¯ ãv\–"ŸrÐÒ2 ±XgÎÄétö·‰D ±X O$H¤‘Éd ( ®üÔ(´½òjA:bZcù=‘™M΢pf~N•Áî[³ÕŠŒÑ.Ñ Ðîf`•¿YzF«•¯7:/öÙÙæ«¾aeŸ™ NëÏÌÏIùÍúŒY¬0 çd ÙµO%W•ü^1ãø‡1C¦™Ù/S~™ñc‡Ýør_Ï®þœúÛµ¯>ŒŸýßiÿ‘í¿A&o¦jl$ëVˆ·CÏé¤i5(J¡ˆÕ»› [½›1 3³²›¥/‹Wû¼®h‰¾iÓ“±Ïê†b×wì“›ò[Mj¢|¼N~V6Y•Ï®~Ýä/Â8&Dî¢k¯pü›‡“ÁÊ~™òÛ•ÏÎ>»ñåÅ~+»ø²é‹Ê¯Ç¯þï¦ÿÈ´_àÉ 0* Ä—¢^ 3!(îÆÑMOŒ8q[~;!ã&¾Y8?Ó³JÛ«¸+nËïµ}dñ*âH–ž6þe°³ß®üVîNq3¿8MÏX§þfù”/éË´_PQ5÷ô¯u¼@ ± NÈU£ÎM(÷ tR_^WÔÊA5·= '4+YF¯yËÚ/³jYéº(•ÿ^ë´ÔöWºÍíêÏËŠšlþݹÿ—¢ÊV tÖÈçˆé—‘ËñÃléÜ|ýèÈVvA¤—ÆK•v9âûÕîNl(eÊôuR:8þ»7AŸ+JÕ~ΓݪÏäD‹j<#Vm+bZ£÷‰ýTæ¢í'öY…×Û+JÛëÒ³1Œ~_]d£èÛ”¨ãëÃëã‰êß®þüÜš4;7`vmß­ f~2aìú€Ý™}·å7Kߘ¿l=™K™þcU>™úµ«Ùñi5¿¸] àø/mÿ²²ß¬¯‰ò3³ßÎ>§ãK¦;?ô«ùÓ,}}rÀ™üu ëB!„ô(Ä!„B*·& !„B$©ëÅ¡Ž#زyÆŒžÛÎ-ÞÓÕNŠåÿªÀ{»Ú1ùÖqèé“G!F!„‶­¯ã†IãÐÒ2ÊQ¼‘ïìFÛÖW1eòuy7nMB!„8Ä©3‹Ã1B!„¤ÒiGá#áp±›_Æø…Ù3LºëOjûd`x›ŸoCð3'O®–‰oŽBH÷&K: ©¯!&zµBÐ0WÊ×- ¯e¬”8±ªO³Wf˜½RÃ˃ !„tob±„£ðõõ½‹Ü}FL´Z$z¯šÙµÑÏFä/Š/z·•Y|»ôíâÚagŸUþ^ܬҷÊ_&¾]ùœ¢ª¥}E!„ÑhÑhÓ§NÉÖÿ3º‹¬s²E)z•¶’a\qÒ»‹üEñEé‹üdÒ7ú;vöYå/z¢™›™ ¥/²ÑI|»ú¯ÄŠ¡þE¹VþA]Í$„Rzº¢qÌn˜Ý: ]ÑxþŸÈ]D`…˜Ý‹Qín”•ÜV³[ó#«xVù› C'ùÓ/Å*R©V¦Dö›…3VB’BHÏ!KaÅckó× ÌD,–ÂÂ3ón+[‹X,…X,%L#°B ¨Þm"ãºÜå(uþÕ.D*Ù6„BºÉdÉd,_w»û+sòŸY¾:&™ì´Ó# ’ðbC%ì—YQ4#õí'N"[~n[BH÷GUÕü¿%ËVø-Y¶ªÀ_5¹áNˆÉD7‹ct‰ »­5™ÃøÆ4ìÒ7žÅurƒ·²Ï.Ù<¬ÌÛmMZÅwRÿ¢¿^í·³Ýªmeì'„ÒsÑĘQ”YÈÇW8ñwsFÌ­Ÿ_iÈ–ÁMÚ~„ñZ?NËoåçFäTÒ~'a!„t?œˆ0 €+b^q³‚B!„R ·"æ®DB!¤ZèvBŒB!¤Ôìm߯Æ>Žã¡#„BqÀŒÓ°fÍ:4559Š×Ñq 3g݆t¼+ïV ÄŽ;èÙ¸t¦Û;#„HHöª´ „bI]¯¨ç4NžÌ8ŽÛ§Ov_/ƒ;tì4¶lÞ1£‡çÎZ™¸RhçáUxoW;&ß:jxï½}¨ë]ëÊ@BHuq¬3Š1c†á¢áVÚB±äPÇÏ:§OÄÙv¤B¬mëë¸aÒ8´´ŒrœÐÈwv£më«€…wÎDM w= é $“)¬üé\tѰJ›B!–ø¡s¦L¾ÎW›ŠÔ’ã´xm¯d…XMM±˜ø-ã„îEïÜê7%Bª?tŽŸ—­Ré´0ðÄë®Ã¶W^'\Ÿ9óh!¤Є˜Â‡÷Bª‘αÒ8@±Îñ ¡‹ÇŠ_LyóM“d ÝüÒÖâ„êKc .ÍÍèè8iú—ô,(Ä!Õ‚QçØi t:G(ČۊӧNÉÞ¸éá¶c}}ï‚ët:=§*PŸŸ²Z‚‡¶ªUqñ×HŇŠ|âéçðµ/Ïþm½mŠ}vøÜ0¾÷EÀ÷þX5}Ñðôäp¨* '„"³qÓ y­sóM“°qÓ EqŒ:Ç/„B,=kàìÖiùÏO®¶ÀB4”O‰Bª‘–yrý³yÍ3}ê<¹þÙ²Ø"b]Ñ8`á‚™y·•«6äÝeH$R€ª@…êÿ{ƒ¿¨á÷âU©’,)ɸø¬¡TŸ[¦$»gÁ_ðõ½ó(TU)H7LF©ÌôÌÊUòÚgvë4¬\µ¡ä¶˜lM¦+[‹»¿2@V”­xl­tÂZ€Z} "¨TÇžUžX¼ø¬¡s|–%ÕU…ÁE닺­^E¡#„Tg5J!šæ²È,œŸ…X2yöúÈòÕøú¢ù²>²|uÉ"„T<«O©ô:GCÓ:@VûˆÂ”¡S ‡p—,[…o|m€¬¡K–­²M8ž(åY²àÏøU°æ9Å·ÿøåßÒö ÑóúcI¶O !¤Luަq€¬æ1ú—éÇßkbLF„@"‘Fv[²ø×UAD©‚[•ê÷’ƒ&^{õ5H$Ò¹¿)\{õÕ=ã{™{b_ü%É­IBHµâTãø‰£é¬;ðÑIDAT÷910“Éä>ÿÆ—¥ì¬ý†e&Å6ò9b„j¦" p(ÄœÀI™B!Äš"!¶·}?¿Y|oûþüç÷w·#ÑcÎÒ³yw;úVÚ B‘Âã'BlÆŒiX³fššš'ÔÑq 3g݆ú^1üî¿ÞÃGuøf$!$¸ 6·Üü>r¢Ò¦Bˆ%~èœt¼ËW›”U«W'Œïk¢„B!ÄšímmàÏœ!„B*DÈ*2B!„R^þ?»KÄÇrkŽ8IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/export-remote-folder.png000066400000000000000000000202561203611042400332430ustar00rootroot00000000000000‰PNG  IHDR˜ð:Eù pHYsÄÄ•+tIMEÕ  7,—¡tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝ{”ÕðßíªîžŒ¼AÌðЈ¨Ñ5YP‘„h CrT¢AËQ’c²†<4ctP'„ìž$t£Q Ù08AP“ÕD0>˜ap¦ŸUwÿ¨žš¢^]ýîÛýý§ººêÖíšéïܺ]}/㜓ÁM7­"€Ò¶víjãC¦™a'Ô\7|øˆ"T •#G?Þóþî=dˆ³dÝtӪϜ}Ö…çMú)"’$©ˆp¢( íÜùÁ‹Û^}ý¿kYÆ8çZŠ…fO;uò)}½áX,ÞVúúÂÅ®0À jjªk«¥@À_S[ýÓódòIDATλ¶ÿñ-Ëd"š0a¼–b>:|øH$‹õôô»Â6êêjÀˆáU§N>…hZÏñn"b‹¯ ÍšuÑ̳>~èPWï'½áp¼ØU€ò÷îþ½ŸÜî^ï_µð¬ÉkÕŽ5tĈÁêx£}ëV™ˆÆœ2ìðáž½êêBC áHïá‰OnøêâKyÃèÄøát‘šüä‘™|ŒŽ‘¼÷ë<øËu:¿¶xxíˆh$FÄÇœ2Œˆd­ÐÞÞÞp8^U(Æ+€Š3òáuó®8¿ïX„^ߣDc^v‘þùÍ»âüg~¾.°¼5Ž÷ö&Û^2‚cÁ/×/IDAT]|R …¤ôExŒû«ªüû»ãuU<èOøˆ3æW¸i!Ðó÷DÔG",¥þ;+ŽuÇë†V‘Þ"‹&¢>?+âK€Jª<‘àJŸ¤(óWßKDÿõíÛ¸Ä UeL_¸æ®ŸÑÆ[oR"ÑX\eŠJDZ^EQ"CI·æ$æ¦øyL9¥¿¾}ôHL‰Ç”`5¯)S]Së/Ø €ò£Ääãñ‹‡›÷ì'¢¹õcqýÂDÿ ¢ëÖoОúøÎo‘ª¨œ“ª%²d§cŒVc† ¡€ÏÁÞ]öŠòXL‰Æb‡{âï~6BžrÆð1cw‘$ß‚郀´IDATsk~ý«Í9yÁÞ-øÊ@.¹äòéÓÏœzNë`e¬•ÆåÌ<÷Ü“»vý}ÅŠVëúvë!{¸ÉΉ1FÄ9gDÄ'bÉ.|%®R€(AŠ”Ì®Í{öÏ­Ûö嫵‡-ÿý-ň(–ˆJ )Q\%"ŸÏGŒTEeŒH 2mÉçcDLûœ *ʇƒþAÁhUU¼;^UëÆâ±X,E¢±p8úîÛÇ>ù$|ñ¬‰'TEŒ'ÎH’|ÉÚ<Ó¡¿ŽžX^næxõÕ—_{õ•E‹—Ú>«Uà•¿¼´ò{ßúÖ+?;ý¢B݉ñ´ó™Ùð‹uD4¤¦Ê´¶~hMÕñüœÒó UŽIDATÊfsE9Â8ñþ˜Ñ?$"JÄãŒË$3R|ûo[:ö'žeWÎoyj£žbûo[JD ãJ”óD‚ˆdIâŒç>ÆH 2c>“d‰%Á‡㪚øøhäY‰Dâá¾h4‹FcáH,‰„ÃѾHtçÎc£F×\Ø8)YSÆey }VmÁ/ûòqn~x÷¿Ñíÿv‡~ “°ªœ}Þ¿Ñîýî¦g:¢›åéèNŒÛ§<3NHù9¥• -²üéÿÁˆ¸ž0ÉuŠBÌǹH!¢}K–Œ{ðAêÏ2=Åö-Y2Pœª’¢‘ì—ˆÈ/KÌGDä#"棪ª ,˲,ɲO–ew«ÊóIDAT?‘\#F²ß7h°òi#N;}äégŒ:ãÌ“ÏúÌ)çž;î¼ÏÖK’ä—%¿ì“ý’_–dÃL’%íß–öMÍÍ¡?”déÀÁ››C[Ú7I²ÔÜjn­]÷@ssèwÏ>©o¿}G‡öÔöúJ}ÍÚuhµ£Ì7SßFûgª?m†È¶äææÐÎ]¯ëu8ÚuøwÏ>©Õê“Þ§úXn[g—Z¹¿XÓÆz•ôõ²,ïØÑqEsèŠæÐŽr?}ͺuÈ%@’e¿,õ/jÿk¿ç2ÅUN<®¢ÿÛ³äÚ/¹žb{–|øñx\åD$Ë>IöI²ìóù(D:QnIDATÙ"óùdYÒšZ†úÈ÷?GHU#ªªª\UI V+þ€T UURUYQq.Ë}nú sçÍ$¢ç7m'¢K/mÞýî;?o{dÅŠUëöè.k¾|öåÄ’[.»yùܦK—Ý~ó¨á#/¾äÏÞ¾æžÕüt}P–[n¾vpuíg§ÏÐßÀÇÖO™|z€|ÏoÚ~Ù¥3H»XSIñÛôôI’üúë¯Qó瓽øâÖ5÷¬¾ÿÇkëjk[n¾Vf¬ñâKˆè;ß¾íá‡Ö_Í×\3ï‰ÇúÕ/Ÿ3kî‚kæIÄþmÉŠ—íêc:zûŽlK¶ÒN‹~fÜ_¬ö::äõÓIDATþøÄãÝÿãG§œ:eÓóOkë_ÜÞ¾æžÕ÷ß÷h]Í ägÍ>á,úé#EBÃÍ3\YæcDœ8#FZƒŒi×™ÉF°šàŒpöm±¹õc×]>Ïø¬šHnì“%"bœIz™ÄÌW+œâÓ|ô‡Ñã‘x$í‹DÃáX8é Gû"‘¾p4‰„#±@À7¿ñ½©&ã)ÙOȵUDtÍu7|õ«_ºrþ"úÏõOúü’/0ð‰çYçœKD/¼ð¿M¡9Øü,MüÔ©:HD›~ÿô3Yÿrâ„IRuɾK¹¶Êczd|ÿ{÷žsö¿Hÿ¶?m!´£IDAT¢)§ž.UôÃiÛLŸ< ­,׉èÙç»tÉîõÑŽn[2“mnÊè#‹'äÚª”…ráS´Â5Û:Ú‰hÊä)Gl8âÄ “¤óY‚8’,? בZŽ1¦lFD‰xœü~¿¢'•ùˆèæM¿ÓSŒú¯1½ô‹Däã*1JpJÄãDøµÔ’LÖ–~™cÚ >Œ…¿<æäA£ÕZ•«ªª(ª¢(Šª* E¨ªªªªþ ŸqNÄ8‘lx÷V©Õ—ÇŽ»jåV÷;w®X5r؈@uÞc~¿DD/½²TuÇŽ?i+A9¹RQüU©§­7Òv7ö'mpIDATÙüLÇ›oíZ¶â–ÞžãÚ*É/i%ë§ζX ¹¬Æ•”õñ;”ì÷ÛGÂxZ¼ND ß´ã GT¸\e| ¸3&= M²ü0œVÆú›cdè”T5¡]Ÿqõ›ŸÓSì½Å‹'­[GýYöðÜ/¨DÄIU’oÛ€,i¥ù|zg¿Ï'û™±N °Æî®Wß?úçýÝ}‘X8é Gú"Ѿp4ŽD¢ÑH4‰Æn¹éâ€Ü ×4x/ —{]]GW÷;Dt÷šÕçϘqRð$ãKÕ¶<Ú %®46^¼mÛ ¦•Æ¢–«HëÍô Ï_rëmw¯Y}ÖÙgOœ™ýß[ûú‘p$ŽÄ"ÑX4š¸à‚‰-×]ÔP?RïÇë/šÈpÕ³sç;›6=·qã¯þÄ/ëê—ß±âê«›?÷¹ió$ox{ð‘ûžÝôôïº÷Ü3?W[W;{ö%wýàž[–¶Ñ÷?|úÄ©ƒ‡ ê¦//]º¼£cŠEÉ5IDATëÜy3wî|Çöüƒ`pØw~ç —Ïùͯõµ–Ö>òÄúõm/½²ýêù ÆMäŠj-Ö´ìTãÑ/¼°ÑZrUM•S­RþÍoÞ™ˆ+o¾µkܤÙóæ}éàËVÜrõüúŽθÐ|Ä„ZU8 ‚,]hå‰éŽ‹…dº%8q•¯žÖŸ×]o*`çu×OýÅz"Z=mfBåJ*ƒ~íS%#m<²Ûo¿¡fP­áž5-/yßǽ]Ý=ÝÑ£Çû6<ý—ÎGb‰øÄI£?=ç’©§ŒÚÿ™1b<Ñ{oî1ÖcÒ”úOzzî?<~âÉ` Ûg<ªIDATí}ÿ£ÑcGœsÞT"ÚüLGÝÐÁ=]ÇG1¨.Ù¤mOD'U3¨Z[©;iJ½^²V”i¥uËx,þÁ{ŽŸI©?šR9q%¡ªªÏï«óÃÙÏlÔB±§ûØ=kÚØâÅ+¿¹¢¥nÈíˆÉ/ô߇aÉÒäUî •äɃA?OÞÆ›úܧêÇÑæg:¦|frêSÙæÇBIDAT_²¼ÐsDkëháÀ'Ξûü—Æ<šˆª}ªÏïéBÇêˆö}tð²ßÿVËž£ùážH^ZjW…ɦ%ïôàýs“ôÇ’–aÑÆ(™[œ1ƹßï§þKMï‚û~q°Â»-Ope™'ú—“Œ·©ö÷”ÑC±1£qb”PÝËé—Ü‹’ý'œˆù$"­L–YMmUò6µþ+ÅþHÒîfKV£¿…Æú?Œ bü„˜ãÉ/ˆ¦¬ÑÑÿå¥Dä·»å lq¼áòg6/ç†{[Ó®ø81F}·®¨yhÍCCÓ-3¡tõݺÂï—ˆ3Îhà»–uC†ÉÅUqzãÙ…?×L›¬IDAT(”‚æ9çþ–VÔ<´F_£Ý+;ÐQï ïÖÍsÎÕ»¡ë†ôu ø÷ïÛ—Ï:˜}~æ4ógì‰FõÈ>béã‘ýóíC¹ª@ÁÌ0ٻ]{÷ÇE­@z&L9ã‚3)ÙÙï—_{íÍoß¹¨ØµHÃ]w?öõeÒÆ#‚ „‡ á!È@x2‚ „‡ áed Æëÿr[­Àœ å-Ã!t:wïÕ&Œ×—³—â rär,0½%¥å‘±ae >—5z,j+Måèõ-1šÛH8Ù–övëʦPÈi{ÛL1­±öl<IDATnã”>¶ñdŒ9÷̲­<­¥eážNûqzÜZd-- MkôR¬ +Ê´o+ƒ–”¾½mÓŒìjBkkÛàòlŠKK§ü³^ÝmŠ2ü,ò •Êý5È0ü,èD 2‚ „‡ á!È@xiß~±¥½=õ€\iiY¸§s_±kQP™ÜGö7¶å¼­­+‹]…"Èð»–K—­Êm= Gx±+Pè#á!È@x9²Üá>êZóä¬N9bù«!Ä+ÊUqèIDAT%mËÉæÒ’—bmG^ÍIié>ë´™i2÷10lŸÍÓ@²¶s¯•ÓÙÔÁe|ÝÌ Ô—sR²õµ»Â: Ù`|ˆ¯¦ §C]ç–Ç3=tŠ$ë{,å[¢ˆò4áK>b1¯z9„û6å\t¹é#sŸLÄ8ý‡û¬qN™’rºÛ:X˱>tyE.ÏZK°ÖÖi§“`bÛZ¦ÇºYÏÓOÇiõg[¬éSÝR¶£½”lûl³Æ¥4÷h{VåÇ—ÖÀvp‘›™ûd"¶ËiýF¦,Á˲NÿåðRt_ôòºòÔ’"‡×nZcÝÆ©î§ÔcåmO Çvc¸IDAT’Sþ(Ñi™o!ƒA4Ý_`Z¿o¦?H)9ÿÅ({Å¿´ÌGGŒíz§7v§ÝðÜÞMmhj^¥Û1dÝÞ¶ÛwffÃ3xçxéžÀ ^ŽÇ¼Ë¸^¬µVŲ\Éæ-d{—M5 2ã‰m‡]-dÓUjõq‘îŸ+÷¢¨T"¥©ø÷‘å¼ ãm;™±mLe\‚{9¶-JJÿ%dó†Éá{؉þ®öÞF+|£Æ{õ<––«¢Ê^^Zdv|˜š)»LW.¶»Xè¾™Ó–.å»lïÔ•ã¥FÙ¿ßô7­Kmõ5ÖmlëlûC$o¯ËéO‚©)Kvê_3ß½+IDAT•i=„m•LÛx?íiÅ“õ×Õº»õu™Ödð[Tárd¦ß~—•äðËêýÖ¢lŸrè¥×Ùý 7›šX{Íl7K÷Õy,Ê}/=SN+½ÿàÒÚÆý(énŸò×Éöo€ËÑÓý•wÅ¿´ÈRAƒ,åEŸÇ-KMö†ù;JaΤÇ&RIÉk%…8å$“KËÖÖ••9T”¦´ƒ¬¥ea>ê±´ƒ¬Ò†Ð€Ò‡Î~‚ „‡ á!È@x2‚ „'FaœLp‘v5ùÍU¾x,'ƒÃ!*A&_Q*Ö÷Èðý5°•ãy-õº¬M¶sLw[ŒIDATXKvÚÅ´£ûœ6¶-ÐTx' ,“™í˜p'ÈiEËvÐDÛíG±œÏ©§aãmÇó²-•›KKÛÉ œ vÌÕ˜Ôîq ¥LøÉG5³ zÓ×<r2’©]‰>2!dÕGF'¾ùË)'¼0²Î×`ÚÅIÊI:³˜AD‘vyœ4!ã /Rn“rGïÓŽ¤œAy 1îìp‘— ´!#hµ-2‚ „‡ á!È@xÂßÙ)Õ7Œ+vÒ°|Ù¢¥ËV¥µ ‚  "ôt‹ñ¡üƧ¶f°WÚA¶¥½=ƒÃ@Á´´,´H»Ê”`zIDAT«›¾2…‘I‹ìolËy= 'Z[W» Eá¥å}÷?–Ûz@Nˆr ™[øÔ„‡ ááSK€JdŒ«ˆ5É @…²ÎBP¸´¢Tó“¹/¸ÌUVh‘T(ë€É.ó“¹b¾( =@…²&NÊܱt±fº@@æŒstxLÃ|@¤æ4Íþ¬ukošËr–Ð"¨P^&6³}Ö¥bÍU† ¨DéÎsF’¥,ÇiGÛ-3†KK‚ „‡ áeÒGÖÚº²2‡ €Ò”vµ´,ÌG=2–vÙ¡ %.³±ðEÛ/ÊßòeþõÅIDAT‹Š]…üB”¿tgW>µá!È@x2‚ „‡ á¹}jÙÖ¶¡`õȘcá~…cá~úÈ@x2‚ „‡ á!È@x2‚ „—I5L¯ÿKwG+¼Ëp`E}fMÓÌé÷J¹À»\Žkš*ݘqÚ²¾Æ¸¥íJ:±¥†°ŽA¶¥½Ýº²)rÚÞ[^¶tßݶ@ÛŠ@ÙkiYèôÕI·™õ{ãz)¦Ö“i¥þ”©!fÜ2ãF¾ÍPÜãIqié”Ö«?ò|hÜ7ƒ8÷ÙÀ$«Û/´Ö–u½ØqIDATm˜ußl  Ë¶³_*c¨¹‡”ífÞw0É$ÈLA£?LÙò2uá»ïnÝÀîìá!È@x2‚ „‡ á!È@x2^¶7Ä¿Âíò•r€üÉ<È´ûÇÛLëgP`Ù–öv-Âî»ÿ1}åòe‹Èu¨,e3f”±¬.-)¦=ìé¶Så$’2y1å€h –L‚LkŽé)Æ#"Î9Õ ßÓ½·¾a|aÛÁˆÛ@Ùwök)¦-hY–ëˆ.k2+#n”½\ŽÙïΚG^†·6mãå(…qJG¶AÆ97^Zº°äáâïIDATÛ6ݼ½ˆ#n@éÈ$È´,–/[¤u“#¬§{oÝ4:È\’ÅK¢qÄm(™ßÙßÚºÒô¥ÓG–^d3M/Fܨp^Z6…BuCÆÑ‰áU7d<¥39ˆuxkk$9…”mQq 2eÞG¦V}ÃxÓ[ÞGÇö²&Ý2É’VÞwLjۥ/ÛÎ~LÎE‡Ñ/@x2‚ „‡ á!È@x2‚ „W¸Ñ/ 3õ ãŠ]¯–/[´tÙªb×*‚LÙ|‰µ`6>µµØU€ÊU¡Afœü©¤8ÍxÐÕÍ _QTh‘ÝüOE×Úº²ØURZ£üIDATEÏkYz:i„y-  ˆ4¯%8ÙÒÞŽ¿PÉ 7¯¥¾Œ9(³g½¢¯o—åߤ!ˆ+óZ¹Ìk‰9(sEKœ|Ü_–}E‘?µÄ”™±&N[ÛmAoUé­6mÞà².81•@‚¶e¬˜A†9(3Ó Yc«¥e¡¶ÐÖ¶¡)2¶Ú´5dˆ?ë‚•µÓ4ß ta‚^ÌA™=kH‘aØqí)cÐèסZ÷ra-á¥)óZ¹Ìk‰9(sËRé‘”û:I¡çµÄ”Åblˆyo”¡óZbÊ,yéq·íG#ËÕ¢Ë'ÖŒkJJÉÍk?·ÆHIDATIvSIbJ#Ó½{:÷£J_6n¦ýhl7s/ÖZ‚Þ7—»-Ìk)$ëi7®Ñ—=næ}õ† €RP¹£_@¬m4€R€ ƒô ¿ Unµ¶®Ä°9å¡BƒL¿Ê@…™X×GÀ]…™@´QÞÀ‚¬Ô•ÞxÜ%ô€ðd <AÂC€ðÜ>µÄ Ç Ã½ï Ç ëÞw¨dè#á!È@x2‚ „‡ á!È@x2‚ „‡ á!È@x2‚ „‡ á!È@x2浄òу%ÛIDAT0a|±«w»÷Ö7Œ+VM cù²E^¦vEAY᜻ ù²|Ù¢Ÿ<ð¸u}O÷^ëÊò°ñ©­·DA¹)Ë7¶û[º«›¬&¥ AeoìJƒÎ~‚ „‡ €¼(ä‡È2€4lio×þר.‹¥aÂxý_±ë’ töxµ¥½½)ÒnÝjkÛÐ iëëÆíéܧ?+Üœ° Æ›nO‚ ÀSN5…BÚÛgâ”bzÓL{ÖØRÓ·wڦ𱈠ðÊšSÆÖ™ˆ)æÂ˜VÚ²i) ßÄCä@™¥eÔU_Äþ5@¶ZZ»ÌÊ€©yåq¿ivIIDAT¯"v´áSKOšB¡¶¶ úCcõw™£^ÙÒ.s[fá›fh‘xeL+k§˜©û_ ¦,ëܽ×Kº·1í‚Î~€’¦ß~ADúÇ—¦gEì,³Fiñ¡¾ì²m™ùƒ H5§ŒkDL±2€>2‚ „‡ á¡ Ê÷ñ‘¡l È ¬,_¶¨ØU(47!È ÌØNÏQÆ*0¸m!È |ˆ>M¼L•V ÐÙÂC€ðd <AÂC€ðd <AÂC€ð’_Q 55Þu÷cÅ­ @ZBMÚB2È®º*tÕUâMš@Ç5_ IDATDlñâ•Å®@Vþ¿;{ur;5ÄIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/export-select-target.png000066400000000000000000000270531203611042400332440ustar00rootroot00000000000000‰PNG  IHDRtBn"±´ pHYsÄÄ•+tIMEÕ  :²‘VtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝy˜Õ½7ð_õ:=3h[`Øñ"Äë•EQ@‰"1‚â«ÑÀÅ÷¹É·<Ñ\Ñ ¢h‚W0b¢‰ wQа¹„¸D@PÙF¶a¦—ªSçý£ºkŠêªš^ª¦»«¿ŸÇîÓ§Nî®úΩê®Óçœ4n¹åÈÜþpŸö® †‹+½jzœrJUÇŽòÐ5(N‡jl<¾³¶Ž4“—[n¹çœÿvÁˆs øy½Þ¥ÏëX,žN Þ¯öѤ+‡®úãï¼ß(…ÇĪSËH¹Ä¤˜Ç/dú” @tíÒ>I+tK‘ºï³æ(sY™oƒXUƃ~ÉC\üŒënšãþãQYâb4*H1m#1)F¤ ¯—¬ŠÄú†ŠŠ`jù˜±•«ßy-õѦ¦ivÿXLæ’ÄY³—±)÷=LDúåÜ+H’, ‚zãÚÑŠÙ·°h,.Ê“É(C|¨1Q”IDAT¶=9È#$‰‘æ´Ÿð£ñ—NUn;ñÍ7^I]J‹Å%òp1.ˆéíº½D4®G×å7\/%+HDÓŸyVyèàý_’™Ì9Ḛ́G>"""G Ô® D?¹fœ¶ê /¼-qNœHH=Û#pâÊ¢Éem¡ë€ê//¼mÓ †ŽYÀ‘¼J‰ÉÚl¹üò+•dytÑ·ß¶pü¥SÇOøÑ«¯¾œ|Ù¸²y=¥Œ‰2ˆ$bÞDž¼]·w\®K¯þ±rwÆ__T’…ˆâRÌˈy‰D™ˆ<^q"d&+‘â#" x<‚×爒kéâÛ«>PŸÀñ¸(š™IDAT¨r"".DJ¸pˆ·,žÍ›?üçænžy»®üÅïVüD4nÒÈÔžd´ŠÂ‡ý$+ÈäGEu„AgŸý5Y¾ür·š/Ú:Dä÷ûˆÈëó( $Š÷‘O æÙ{çí]Ÿ'Y&hv5Œ”LÆ~÷àÿ#¢¹ÿùóHÊøJW¢Þõ·ôÄ%°—d‰¬’e®Ûˆ]t}ùeõëw~òøˆ§,E>Ÿ/QÎ Î=DŒˆöÌ™Óí±Ç(™/j²ì™3GÛ@)¯µIDAT1FDÉÑ ù}^ÁC”¹x<>Ÿ—·Œ8”c›–7Îçó)ÔÕï¼¾hÑC¿ÿÃs]»þ`ïÞïn½åÚÛnûر/Ÿx!M˜ð£7Þx妟ξ⊫•ÿþ÷5óºˆæýâž /­^>q¤Ròå—ŸÍšu—r—ˆÆMùêk-cCÞägø†-9ì)ÃK¦bL–XË_âÏ>ߩ޾úÇSÕQŒ¶œˆˆ"²n¹X »d¯Y“eI4x9¦M›¦&Ë?þñ­îQAP>èñ¨KÊNÞµc–q=º.™8Iû¨,%*{}ÞÄy.xÕs.‚Wø}œA™€!q‚6‰3qæ«,㜦M¿qÚÔM¾j=÷Ì ÁïõZâàìAƒˆèý÷W__ò#fõ¬l˶ ø•ÓÀD‘†#÷ßÿ+"zp`F‘1IDATþ}C†¯*k§­ø‰hèùÙÈFŒµnÝû”L¥0 9ê ¤¥–Vhµå¢„lÉY%Jr,fðê¤+F‘áCDD‚—ˆ‚~ŸòJʲ Ë2ç\„9ï½¥&ËŽ7)ÿö[ú4%ó屋/åœ3–8Wx9 Ä9 É%G.‚? ½dQÿ× ð%‹„¥Oÿ~äÈ‹~zýÏžXòèSX|ïý¿õhŽG¶oßBD£.¼$ L™rõºuïï¬ý¶üh{y0µ#—Äí‘#/úàƒµÚ3J…V[(5’Ä”/ÑéÌùÏ[‰è±Ço¸”WbD”½>*É>87÷ZIDATyïùpš,Ûnø©ú§oÛ ?íÿÌÿÑÛu{§ô«¹oÈEŒ%κ( åèGŒ3R¿ç ú_Œ#å8¶å{.Ê ]"ÚòåŽ7ß|}ÅŠ¿üñéç{ôìq×ÜŸÿøê+Ï;ï?¦$¿`óØ“ÿóÚ›¯ü}^EUÅ%—Œyà·ýìöDôèÂ'Îì5à”ö•Á`KŠ©·o¿ý®>X;nÒÈ-[¾¶~•EZm¹(áôA0pIbLŽÇ’ßaI~ê{ùåç¿tê›o=ßòÐÉ|~™ˆ‚–?Ì'.óûÎOîõÓoÐ-²eú –?CD÷?R’9Kn¶Á€?ù‰qR&‹úÅ‘ø#‰IDAT¼UíÛ+}âœ'O¾ÿvÛnm»½û÷8ÑØT¿çP÷^A<&~·s¸k§Aç ¢·W}Puê)Ç6†»vª¬ªP9q¼©~ï!"êÜýôòÊRøí¶:¥5µåx,þÝÎýºB­ÔE [.bØO²€D&"¢ûzæ²KFGššèäï°N¾r¨r㥗7éRî–WT¼þîš{~q#½;iÊ=»È¢èñx¯öƒc2'Î$Y–=~ÿö]û.Yõ¢:(9Þpì¡ùK‡Eʧ0œ(ñÉÎ:§·¦Ctlß¡c;ån08kPoíQT×§wûÁéÚ#áÚwèÔ^×­ÏâIDATþçôÑ•þÔBëE [†ƒpI$ë‡'/üe]+K9~åcž¦#ò„Höx[†$dYŽÈŠ1J)WµœÐõxÉðk®w:é:¡Ä÷ý•“<ÚðK r´_Õ¥€ß'àOpV°—d›šê__î ŸV•éR;ëvQ øríïãÕ§DH’Ók@P–¢Ä×D áñ©ç\ü~¯2ZI~bDjÄh.UT¿ç/<ñ \ :rèÐ'·‘_ùLƒÕÌesÝ ^ˆˆhð9g}úùV¢šLÜw¨vð9gùý>âÔ<{^ùâù¾?5ÓF$v´yö<Ÿß§Ä¨åÚ Ñ'ÝIDAT¢ªö|9OC7dÄÀ[€ì\:ò,"úôó­j‰òXå¢gnþÇ~ð9g]:ò,e÷¿bìà¿Ñ¼òÅó5$>Y&ËCóìyWŒ¬ÍªöÉ9tƒÿÞ={²~bw—ŽeK;à£Gö8râí×7ôëÛ“s"âÚG9‘ þËiûŽÚ “Fä¸F{ ߚw>7vDÿþ}Z­Ù{Û7kÞÙ4}Ú¨\Vç’pÙ¼ä<ι,˲,W_ö·p8 …òÝ)€‚“N²(Õ֬ݔãºÜ.›—œwîÌOԻ먺tàÀÈ€Tc­Öñy½¹¯¨èÃ%™,KÔ’wlY3¿ßúµŒ1&˲ÌeÆØ97nª®®.++s¢‚ pÎ[¯PbQ±Õ:¾ „ 眢‹è¤0^0zÞm—^¹råäÉ“kjjt‹ ‚hÄ讥ZKl•Ú¸ax!Ñ ;ÑÄžÁIDATh\{÷ª+'®|ù5]Š þ }¸È²L'N(m\±BS¼ŒˆDQ”$I’¤€?pFÓ‚-ËׯïÙ³gŽklƒ½Zvœs„Ø(i —ë¦M&¢«®œøÜŸ_²}E®—¦æ«V ›ó…i¥ý÷S统»«råÊ•sçÎÕ=È9Wöaõ_:9AÒOm;ºíêÔ‡t%Öͦ.¢Ž³ ר-O]Wúk—iŽÄ”3ošª^7mò’§Ÿ·wE®—'‚Á ö´‹N¬¶6Øy c¬®®.÷5jÃB»gZgáΟ΂í[/¥M‹µC©‰F%"ºmötåî¢ÅË•Û3ošºhñr«I0IDATWTô×1Æ(Mì*Ѩá‘H„ˆdY6Û£R÷7Ã!ŒöQ…š2ÚjÖ˪„$‹‡r‰]ðéÖe¸^(¢(ªÉòÈÂ¥¢(>²p©r÷¶ÙÓEQÅÖÏø¦£èÃE–e"ŠÇãDD'Nþ§†‹sÝÐû¤¹ˆÊì!»§mSMFDL âœ?¼ài"zxÁÓêV¡+±eEEXÄ#5\šš ë477“.æYj¸‡g4vÐÖÏhÙ¶\ÂápýØW¯^]°Þ¸†'qfiÈð˜1cÚ²o¥¬èÃ% 80+Ç>Ö5Ãápú-ÛõIMŽMØhgíòtªå¾®¢" …B¹ïÀõ®¹fò²eêСC«5>2õÚ)DM¹¬Î á­ŠÄBÁ2~ãM×z’ß{òzÁãñzH<Ê)~Að¨'û¿?Øã‹þ{.P˜\2rÁdQ…Æ á‚É¢ Pч &‹²WÖWQè}¸ð˜,*ëvrï›î‹¿¸¢ÒWô¸ï&þIDATáR “EåØˆ]±·Yp=W„‹Û'‹2«o}ÅÅÄ1M¥ùÓï”,W„K LÕê„Oé7hÝTjÊX¦a*°Pôᢟ,ÊH$ *“E‘ñvŸºWè†3©õ•†³½Y/«²,˜…—Y}‹ †Éèêpë°0 #ä ÂE?Y”‘H$Ò¾µù\r”ÅíV‡9©'S³n0ëš™6¥í9"¦Ä}¸¸x²(³FZmÙl–þª³€i¨@Ç%áâÖÉ¢ÔSëëJÒlÐpÕY¿2©Mál.¨Š>\\?Y”v8fM³^åÞÒäQš-CÉ*úpÁdQ…©èÓE¦¢ÂdQ…¡°ŠIDATÉ áBDcÇŽ•¥8“âL’$‰‰ŒI%&1&IL¹@ÅM›6õêÕ+ß( .™,J–âï®yŸIÒß7~,2öÉæÏD‰}¹e«$±o¾ùF’¤={öH’ôÖ[oå»§¥Â #—ÍKÎc’ÿÂaÿ!Iì¼sI;{ÀYc}úô‘$©[·n¢(vìØQ’¤¯¿þ:ß(E?rQæsa’´~àÇþp³$±Ï‡þk눭’Äv^òÍîKw‰¢xðÊú£?>,IR¾; PB tä²ø‰å©…³gMO-äœSt‘$±{'ýu]âÆÒ·$寣/&nüvYÛ… ®¯(ÄpYüÄrÃ"üÔIDAT1,W®Š»¤v ]r«”s«Äý%I:n•ôÏîœøÊ_öÞQ}›YL…KÒQ ‡Eê7kAPnDc¢YMjj–$6lÎÿn6ç‹ÙŒas¾Ø>ò®m³ã~YûÏæ3'Þ½§¡!ןJ0ƒdHUˆ#"’#"Y&"Š‹L¥¦h̰fbä"±Ç¿Q–ùÂ…×˲<þTY–|ðDz,ÿæ7WJGŽÜÿz0f˜¥ºI ²˜,*u&íCêZÒ/p Æxy(¨Ü•ˆh×¾ƒ&5E£ÏÜVþï· 5›Ï¥aÃÆö^6ç-[jfÓµ¤N˜Òê?˜úÏIDAT´L8¤+Ðp‘I>ÞØÌ¸|jUå¡£qQŒD͋ҟÏÅD¦“E¥/«‘/àJ.Ç#1QEFD‡%I6‹†ÌæsisiÎð„Ù•À} 4\ŽknŽFãÛðéöC œsÉ!MFó¹X¬1£É¢²Ñ´:Ã.fW—)Äp™=kzúßsé}õê7þ4*ù\^Ý{Ùˆëvj@´:Ãál.¸W!† ™äˆ¡êêê¿°~ýúýû÷ëóœôQûˆ/¸à]•,&‹J]0ýùœRK)àV.é+//4hPuuõ “c"UeeeuuuÛô Š>\ˆ¨¼¼Ü‰‰ žIDAT0¦ÈE~CŠÂpG¸áœ m^rç\ùÔ¹ú²¿…ÃáP(”ïN”47„‹2_”zwÝÂõC—8ùGE.ÉdY¢–Œ¸cËšùýÖ¯M|•Næ2cìœ7UWW—••屫캼—)Aá(úpQf¢#Æ4e FÏÛ¡­óò¯Ã+W®œW„ˉÁ`P{ÚE'V[켄1VWW—û-¦zÑ–¤yv¦‡-­‘™µŒi« }¸(3Ñ%ö “™è"‘HH–eN­ RK2ÚåÒ¯™Î fù•æ*²èòlTôá’ÙLt…ñÁÔ 1^ÐáÓV]Š>\2›‰Î<\œž,*;m³“ëŽæ0mØÂ%á’æLtm¶Û¨ëâœ[O"•]³†%™ž»Á´Uਢ—¾×¼÷Æò Ó™‰nÕž C†œ®[ÜÆÉ¢,fÊtÊ(‹úÖM™õ*©­)`¯¢—p8\?öÅÕ«W׬7®‘œ‡§tIDATnÈð˜1cÚ²o¥¬èÃ% 80+Ç>Ö5Ãápú-ã/9@.Š>\ˆ( 9ñ½[ÈEa|6›¯¾þ¾ Žþ›ï§On¹ѧË{«·Û _]]]]^^n½È¤‰­zm-9ô契áÀ J™ÂåÓå½OÿV½»é©.¬4hu¾()à§Û(pE.›žê2ôæ}DO«%CoÞ·é©.Ÿo9©ZøâõºáŒ:rqF.PPBÁH»v•=þ§3úõÔ–3&{½úÓ#Ûwìºþº±9®±@Ã%ý_\$":ñ4Qƒæþ#CoÞ§}|ÓS]Þ_:âÌ /j‡3¹@Šã=oIDAT©yò÷/ŒsAÿþ}Z­Ù£Ç7~á½éÓF岺B —ÅO,7̳rŠønë?ölÿHSôˆ®Jÿüàú)ŸÑŠaÆ)%ÊÈeÒÄ‹´ÕlLŒ\ õïß'75E©åÒ)•ˆ(ÇãL–eA~8¸Ïšµ›r\W!† %/GÔŠ‹Ì°&Ñ!Ú³ý£N}¯ê;ê1"")J¾“§³<ð[ªþÕ³÷tùjýz5\´ç_8DÂÈ \ò›ÚBj™- 4\$ƈHMQ”š¢1³Ê²|ˆˆºîž8ó’úœvm“:<g¤ý=i‹@Q‡3jô¨w•Ûºr2ŠŒ\ Ðqˆ8ñ–L<éIDATó¥@Ã…1^ jKví;hVyïÎyeeíºQô¨a…‘èþuË£']Öh‘,êCº«Õ»ºr2Š*Œ\ À ‚rÁ*‘:v±õÏa†‹LòñÆfÆeâœÉÅHT4«|øèwUÕ=ˆ"t¢Áàa‰Ê¤†è®ký¤oßÎjq:#—\`ä%®@Ãåxc$&J¢Èˆˆs.IrêYU$z¢æìaD&3ÑIt4JÛê"4hZl1²°eБ :®ù—H3€±G†ËÑcÍÍÑh\JœÄåœ{̯T<žv]{ÑWŸ™U¨Û¿¯,ÚXYYY]]­¦s7—½¹@‰+Äp™=kߢyIDATzúßs _¼þÃ'íüùÖm*ÇD•••j‰Yjh?ŸN'}ÌjbäNù˜HûP 8¡kú}¹ÕÕÕ='¿µ~ýzí'A©úöí|Á˜\¬ÏŦV3[P #(‚öÿKà„núÊËË T]]}ÂdŽK…rL¤ýú?¾¡ ¥¬cÇ*]ÉÖ­»í]Eч •——÷êÕ+Ó¥rÿâœõâ¹@!;|øø³yEW8jøp/¥;Ÿ‹znÅ¡1rBÖ±cÕ³¦kÿ;j¤½«pÃÈ%;—_6*u k{ÿ(XÆ#—aÃm\Eé† @)SF.Ú’-[ëâqó+ø2Wêá²yÉyœ'ÔËIDATsåçGª/û[8…Bùî€ãLF.Ãl\EI‡Ëæ%ç;óõê‡.8p ò\Ïxä"2÷Ï¥ $“e‰Z2âŽ-kæ÷[¿6ñ›j2—cçܸ©ººº¬¬Ì¢)€¢cþi‘mJ7\8ç]DL{¹`ô¼Ú:/ÿ:¼råÊÉ“'×ÔÔ6¢ýqÕ9‰Û6?b .p픉¤L‰(ãqÉÆöK7\dY¦'H”6®X¡)^FD¢(J’$IRÀ8£iÁ–å „ë×§þ4vc ¥.MÍW­6ç ÓJûï§Îw?wWåÊ•+çΫ}Ä,Y,~Ý]ýiz2ò˜-}˜f)IDAT›]ü¼<´¢4¯ŠnÊÈ% jO»èÄjkƒ—0ÆêêêÒiS›8êmu'×ÝÐÕ´X6£:†%m¯tÃ…1FÑhbß3œ†(‰‰dYæ¶^Е íP%ÍúÈ0T¢WE·eö©xY2ÖnIDAT¾°æJ;\r˜,ŠŒf?H½–ÇúêÝ,-Ö‹[Œ2šÊpº)Ý…H­+i—JíIú¯¸Xi‡K“EévõÔ’4/›ND*£Å餤VH½:ɰKfk4k<Ó§îSºáR “EþÙ×–dqª5¿A¤– _JSé†KNe8¦ÈèÓœ¼Ï•ûS×(ÝpÉq²(GiÿÚg1ÕS!Ì•ãS(õpÉz²¨ÔÂÔÉ™2š®)µ²Ek† Ú5ÝTÖZ} PRJ7\rŸ,ªÕÙž K,µ¾kQ!£Ù¡ ç—ʨµÔ¥Ò™Ë JMé†KÛOe8üɽY§×ØöÝw(ÝpiûÉ.NUIDAT¢Ú~Ÿ´eˆÈNé† a²('a>pÂQÒ‡E„É¢SÒá‚É¢œã¶pYüÄòÔÂÙ³¦§º`²(€BæªpYüÄrÃ1,wÍdQ…ÉUáBÉˉÈëõ&®{“EAI #|ûõ ýúöT¾V­}Tùí¢Ä¿œ¶ï¨0iDençÜ.cD¤$L\d¢(5Ec†5ó2Y®µù‰\<÷Qêk(Y^yéÈ̛Ƨ½DNÉB¹‡ËŒ×çØ¸R®áR·k-ý—Á÷\ÀpÂpG \ÀpÂpG \ÀpÂpG¸v>— ›?Íw\bø¹ƒ³XʵáBhùëIDATDÓ®º<ß](z^ùjv â°pG \Àp„›Oèê‚ ½‹¹ûUBᢤ ~ m8{XÔ³¦{«%ù%$¥Þ5,× ÀLö#]Lìª-¾ñÑŽbÔÛºŽ®œ0öHON‡EÅ(:‰8Äæs.êpF—;ÇGJÍž5ÝwÕ~§ü«Þµ·o†0pHNᢠm4ÐÉé »möh›Š!ìØ+o‡E©cmkm6lQ‹ZM–ôkåñ£è| RtÑ`v×â¤#ÿßÐ5üpºÐ>±€LÙ9rQN»¨· Ë­k, [2•}¸†‚®P½›Z¸mz®IDATÙ¬¦EãPDòX®„pG \Àp„›§\ÈzbaÈkÃ%»C»à°pG \ÀpÂpG \ÀpÂpG \ÀpDö.ÆãÑHã1ÆbœË6vȱè‰|w!!XV©Ü x=_è”v@Y~{åœ6Þ*}£Ó|ïJð)§)ûp‰4;åÏ¿ôõ;›w×8žu;%¢S»²KwÿÝ Ã¢±8¹7\\¹UX¿w%ø”Ó”}¸È²ôß/}u¤Ù³ìW׎Ô+ëvJÄÖ]õ÷.}çÁ7Ï<<ß}rI1‚IDATq²U¼¿qïÊ%¿Îw_ì4uæfï+w[6לæsygóœæšÔQgõ Ϻr茞ÿÕ´1²\p’6zgóî§üù‘Ñ|wÄN‹¼óæ{6{ïÜ·#ز¹f.œ³ÚÇG îíî]ÅF£÷©=p< D"Ñ|÷Å)ÊV!s>æìr×lgõ—³÷έ;Bî›köŸ ‚7ëeK™ÇãæOè”­‚1·ý†œÌ8™¼wîÞrÙ\ݼ¡(!ßpžûÂ…)£’xïôrxÊ6Ì¡+æ¼!•ù¼Q‰åÞ{¥ö*Ç~sîR±`2';6Œ$’äÖŸL¡=ß¼o®6ýÛ°¬IDAT„‹,——‡¼DÔa†wÓl¤Õ6ÍL§Uú½J³ŸÆÜ<|>‰ÄdÊñµ2¡¾q†Û@ÖÛC+¼$Š­ŸOÉåùj7HŸB~7W;ÂÅòe×=jV9£saÚÊYŸD;ÑÔò¦ß+w³sŠÄ89ðZUVxÕw­<Ôr[Y‘ò¨CoKcä’õªµÏ+—vRåwsµ!\$Éôuo8&UVxŽIíÛù”•ÊíÛùÔ ÚF”j†RÛÔ-¨­¯mGwâÛ½Ò-e¸ºÔU”,I’ÉrÃÈ‚òòªmj7IâºGm'¥q)»µ›õ£°ý51{Ët{EUIDAT”¸´–õóM]Ðp1Û>U…¶YÚ.¢i:*mß±_­£ÜÐ.¢–lß±¿WM§í;ök+œÑ¯³R’Úf¯šN© *õÕ¦´Íêú™ÚmÃ^Y”k»gñ"” å ÂÞ×D»yPò•7ÜxœÀÒ8y‘Ýó5ë¹ÅVgXB…·Yæá·¢·ïØF¿Îi+¤³¹dZ?£FR{kËêÜÍ¡/ÑY¿òêÆãĪÓ¹dM·)ÍöÃ¥t‹ÈfiC¸0“Oå·nÛ¯{H-Ùº­åÉ3vRMå¶ZÁ¬µ]ƒºvZ퉮PÛˆYo-j‚BùàÖ‰×$Ó7Ú.é|‰.—U[lcd²Ñv¨»°ÆKÒIDAT›ßÍÒŽ¢ãر2 ”ÀwÈ•o›¸iÃPÆ-Ö¯*—ÍÕÙs.Jð¸?\”]ÑM†,sjí½sÓóUå²¹f.§S»²÷?ü$(Ÿ’u#%åÍ5k:µ+óûòpž«Í([=ôÒ^"¾»cwëö‘Ù{çÖ!÷Í5û%½¾ÀèAÝçÿõ£['êTÖ)ëvJD\8²è•M8¿ÆpÉ.gHÙ*–>óÇ~ƒ.èæÿ·|wÇ6k>yÒì½såŽ`Ëæš}¸Bå 6æ6ÜþäZ×LêœNíÊ.Úûñ;¯7©[Åë~ðêWóÝ{X¿w®ÜlÙ\³—²²”'ÚþIDAT ¯?øà-WΟíõ¨p¦»ðz ådÆ)¯‹ q™=z,ßrPo޾Ñi¾w%ø”u¾Úò>‘|æ€Ñºò\&è–#Í‘H³«¦J…•àVQ‚OÙ€@=zv«ÛµG[ææ“‹ÐÎ0ªGÏn©åÈ•nÌ¢Àº±¯¶¼ÿÕ–5©·µ.Zކ´·“pXÓžgÁ9°“ö< ι@öÌÎ³àœ äÌì< ι@ÖÌÎ³àœ äÊì<‹á9—“ÂåŸr®[PRZÂeôÅ#òØp™D¸\u•þŠF€\3gÞï>€ ý¨'éDˆhIEND®B`‚history-with-issuetracker-link.jpg000066400000000000000000001411261203611042400352040ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/imagesÿØÿàJFIF,,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ F"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ïí® :M‚"îšX‘cRp ÛžO 58¶¹n^þPǨ/à'õª¶ó ÿ¯&ÿÚuÌèÞ:y,-o/®,ïâžÚ)fT ^ÎGx‘buÞ嘙NÊtØV< Ê;²ÍÿA Ÿûæ?þ"²ÍÿA Ÿûæ?þ"³Ï‰![¡–7ˆ‹$PO1òÊ[Í B‘6±oÞF2¡—ç7V^,½ŸÃZ1¸ŠæÛQº[<ÙV"·(Ó@“2„-´bQÃ?8Ààà­û,ßô¹ÿ¾cÿâ(û,ßô¹ÿ¾cÿâ+œ·ø‰£^,ŸdI®\yfá’yÃÈ‘‚“äù¤N$ØyéÃfOéÖöóOw ͪ"±S7–Œ’,R !ˆR²º¡,Urr PXj]EqJëpI‘•£8ø}êo²ÍÿA Ÿûæ?þ"¡–y.tØe–ÖkWiâÌ3.¿½QÎÆe÷àžµ‘¨kzœž6ÚkYÛãN7ò\\ÀÓnýà@UÓÎrsè;€ný–oú\ÿß1ÿñ}–oú\ÿß1ÿñÏê9°Ñ§»¶½Žæs¦­¸Ô®íâUŠ”áNÖ}ä¸Pø©4EãÝ:M@Û5ôPQ´Ÿµ:Ç囑œ.—ÁÇn9Ç4Ð}–oú\ÿß1ÿñ}–oú\ÿß1ÿñÌAñ'D¸Òu Z8îNb¥žpb%ŽýˆaÌŠ\ýÝ꣒*–·ãyæcb·:}ìzåý½ÂFÍä̬Õ,¸`:ƒ‘ŽÝÀ;O²ÍÿA Ÿûæ?þ"˜¶—wqÙÛêùÎ –uj ?/=@ÀëžÃ$sú/Äm ^Õíôë6›}Ï›öwb„IåõùU‹¦@,7ªäºýök¼pÿìôÐcð訓U¼gn*±O| ‡™§Â=ýï¿òÿªÃZ#ZžÉˇWA \(‘J‚Ì äã-Ðÿ=kCûB)Œ3hÙ~` 8Èu£%&Õ¶š³ ÿ„z?ú ßä/þ7Gü#ÑÿÐNûÿ!ñºÇñ½©iú„qC4^Ps{q§ÍwlÁŒn¢@—s‚¶Æ¬Ý_Æú†| †Õµ;'Ô$žVÚCIçv "K<€sûÖà`í½u_ðGÿA;ïü…ÿÆèÿ„z?ú ßä/þ7XúO‰îï5M?NºŽ¹6·_oTR6\Bð'Ê È„¥×w%3Æy££xÆòÿ_ûÞéw;¯îí^ÆÚ2.,㉥ 4§Ìl©òÑ~âŒÊ¼ô hMÿôô¾ÿÈ_ünøG£ÿ ÷þBÿãuÌÛüUðåÄ7S-Æ#†!2:óº <9ò²ÒF?}åãw8ÚÛt®|e’3\éZ„F>Õz¤ÂMœ9p$|HC#sˆ÷¶ €jÂ=ýï¿òÿ£þèÿè'}ÿ¿øÝeßøßOÓôƒ©K ÓB'»ƒj*–Ýn³3Ÿ½ŒnøçºçâxüP'¼‚ÖßKÔ$•Õe”Ž3o»*HáÝH ±ÎÐ €¿2©À£@.ÿÂ=ýï¿òÿ£þèÿè'}ÿ¿øÝdxÇÚ7‰oä³°—t‚#ÖWH²UB²2IÞ %K1 ±Ç#Èñû¤š3‰"u‹r}FßסíR}–oú\ÿß1ÿñ¹¨ZÇå¼¹£ÉŠP2TÿP{ŽÿPÈŽFó “˸ï&rìÀ÷×ðê*XȾË7ý.ï˜ÿøŠ>Ë7ý.ï˜ÿøŠf­sui¦M=œ>lë·i} ° ûG/´Û-·’+ Ih!ŸS½¶’È­Àšd±–Ýâ‘dTh™Á1¬ÏÈqÔn@te›þ‚?÷ÌüEe›þ‚?÷ÌüEqëâýjÒ×Z:¥¥œ7–EíÕíûJZ¤ÒÆçq™2¡NJÇ!ÏË“­â=v]/TÓí©¥éÜAÍ*Dò6#»‘ÙJH@È@É<®07nWÙfÿ …ÏýóÿGÙfÿ …ÏýóÿY‡Äñ£›ytËèõȱط”d0v0Æ"”òàü‡ŽW/:Ô÷~—Q°²™gY# Èâ))ŽF*ŒwíÚ͵N[nÉ¡öY¿è!sÿ|ÇÿÄQöY¿è!sÿ|ÇÿÄW?‰¤´Ï©ÞÛIdVàM2XËnñHˆ²*4NÌà˜Ögä €¸ê7g¯‹õ«K]hê––pÜZY·TS·í)j“KÄdÊ…9+‡?.HaöY¿è!sÿ|ÇÿÄQöY¿è!sÿ|ÇÿÄUmJöéo­´Ë wwÉ0št/i@ß( ³"€2 9à+g'‰æŽðéo¦\ÞêQ4‰(²òÕE‰‹2EÀ"xþ\’á’âµöY¿è!sÿ|ÇÿÄQöY¿è!sÿ|ÇÿÄVøûB“S¶²ŠãÚ<’oEæUVŒylÂSéÈBîHÃaïã;$ðí¶¸Ö·1Ú\²¬BâHmÙƒ&ìþöEê:äã à ¯²ÍÿA Ÿûæ?þ"²ÍÿA Ÿûæ?þ"¤³»‚þÆÞòÕüË{ˆÖXŸnV‘ÁïSPd~p³šâ[ë¼DÒdG;¬G ’p:IéTlµÝ3PžÆ]ziþžÔùjeS† Æ<^éø©j-„ñ¤¯ 4³¨‘,„»r2È÷{W7uáÝÃ6vú¥ä·2ÛiÍçç‘JËtìíÒ’@íµs‘´ €Ÿì³ÐBçþùÿˆ£ì³ÐBçþùÿˆ¬ÿ kŸðhÆñ¤³yVæx\ZKæF»$`¸nù@­œ †+j€*ý–oú\ÿß1ÿñ}–oú\ÿß1ÿñjŠUû,ßô¹ÿ¾cÿâ(û,ßô¹ÿ¾cÿâ*ÕWì³ÐBçþùÿˆ£ì³ÐBçþùÿˆ«TP,šž ¯¾%‰$F*ÈÓ@ ‘Ô·ƒVmZ;茶šËÜFixš'úd/^EMom}gÅi­ßA K$¢%Ž ]˶ FN2Ç©4û[W·’æYn¦¹šâQ,’ÊB*Tc;SJêêÒÆQÞ¾-ä+¸$²B„\éÁ¤¶¼·¼Çc¯Es2ÛE Æy$(úŽÕ¡¥ij>&Ô¼ù.Ó˳¶ÇÙîåƒ9yúùl3Ó¿OÆWLƒNñ6›äIvþeÎ~Ñw,øÃÁÓÌc޽ºþ[K…͏3G]³DvÈ äŒð{‚h¦Gÿ![úáþ…%†U°ÿ˜_ýy7þÓ¥M Õ4+ I7Ùì¾Ïå±#yò2qŽJ ð;ã´+:ijåÀDüŽÈåŸpE6ÎûAÔ_e޳ Ón ¶ H¹ÜC0?\+¢ŸC@‡Ïáûyõ¹77+ ³Çs5ª•òåš=»’»Á\|+v ƒ–Í+_Ú[ÛÚA.¡}t¶K v¦c0¤rG Q± ˜cÉlœ/dçB&Ò§»6êeÈVs _1pªÅí œO¡u¦\Üh¶v1^Ýj©¤Øò§—Peò26±|‘ŽÔ ^·ŠÞ+S|ö¶í ¶B@±H’* (Ü3 ¾æÀ8#$— Ã,–·×–Ó§ÚvK–Jùó,ÏÃ!W#€OS‚.ÃkiqsÁq4°È¡ÒD»‘•”Œ‚nAÿìø¿sÿ2ñTJ *×EÐí´û4ÛSÆ@À-0f8’IÀ à0)š‡†á¼ÖãÖ`¾¼°ÔØÚ™­¼³¾"Á¶‘"0àŒäyïWÛM·q†7 2 ̇r?Š—û>ïÜÿàLŸüUsú‡€´íN{¹.o/™oÖÝuÃFðÂ~Rÿ&Tð3唟ÿ.™ÿ=ï?ä5ý·÷×ý÷~ïÜöëï[¿Ùðÿ~çÿdÿâ©kiÄ’\L+lZî@]°[æäáIúé@ÜŸ ´K“©½ì—73ê0y2ÌDQ0üÍÀDˆ¥‹…bÌ tÈ3·€´éoõÍåõÅé¿·¿{‡hÃHð©XÔ…@¡@' ç­m,z{Ý5ªÞ;\.wD/\¸ÀRr7g€èàkê)âÖѧxÄÆdUvŒ]ɹT’#w•l}¥gèžÃ齆§|ºtLí‹ùM†,ØÝåù„Ù|ð2Mkéï³X¿÷Žýž£þχû÷?ø'ÿRAk³»Ç¿s€žFrqœu'ÔÑp9=sÃþ,¼Kûm>ëMK[™$`&ž@HbHÜ‘œN+¬I·‡Y“Rñ$’;²ù1½ž7*†={“ïÏ4}²·}ŒI›/Í(;W8žƒ'8Ï]­Œí8eæ¥i§¦ë«„ˆ.sÔ *ÈK.æè ä9¬éÒ…;¸-÷%AGaÚ¶”uñM©ÞEc,Fìâys!È`ÌP¸È8;XqÓšŽÿÃú~ ú£Ë½R³6s2mUVeã†a°s‘c(«™>´dúÖ—*ÅuÑ­Å ¯¤“-Ë[fˆ0²“!Îò#EÝŸºŠ; !Ñ­-Ö “$ÐÜÍr“Ç›)’HÏ(Äãi”ýåV2}hÉõ¢áb…®‚lm µ¦µ©Ãq,6ª­±‚>T2…UÝ v8 ’MDð^™ˆ²µžæÚÖH µÜPùanâ,ìU†Ï,¿ê¶cy.ݬŸZ2}iÜ,bê³ÔD°Ë©_¥“µÄ‚Î3–:H’0% äùÒ6  tÀµn4á.¬š”×6³mHçX|²·ŒÌªÛÕˆ»ò¥OÌyàb\ŸZ2}i\,WÒt”Ñö$W÷’ÛC†ÚÚW_.Þ1Œ*…P[TrÌëËdþÆ´þÍû™7•öï·çpÝæ}§íé÷wñëŽùæ¬dúÑ“ëEÂÆ(ð^˜ðÙÛÞOs{ieflí ›Ë$1y.C¢+å“9±“œl÷>Žñnu[ùLð}–õ’ ä9rñ ‘ÆcØØnI §“ëFO­;…Šº0o\iVrãí-3K+|Ñy“™]Ðîæ1œpÊ„ôÍlAäÛAF‘C„Ž8Ô*¢€j­“ëFO­+…†\iñÜßKp÷3ˆç‰!žØòæT,T7±—l€@#‚È%¾ŸµôW s9Žž-‰_.r¥‚ñ»EÀ$€8 üŸZ2}iÜ,]ó½êµä)vŠwl™9Ž@2TÿP{ë‚#Éõ£'Ö•ÂÆmä®mÞÞæéôÙ›naÚËëò³©\ðFÏ\v5XøfÊ{‚æYnÞk…¹šâP›å`p@P¡Z5e ÷‰;y>µSû:ÔÇB;ˆdhÁü@š¯„ì5{ NÒync„âw–&Pñ°"; ¢m=r‡CŠÓ’Â)5K}@³ùÐA,  ¥ddcŸ|Ƹúš?³áþýÏþÉÿÅQýŸ÷îð&Oþ*€+M¡ZÍ ¦I½¹Žè¸#1Ê‹F^1Á‰ œç â²ß— «ÛÞ[ë¿—?Ún€ˆÍ3¿*c(, pª~Uë–'wû>ïÜÿàLŸüUÙðÿ~çÿdÿâ¨>×Ã6¶Gö«Ë[EòËYÅ òä1¢¢b œ* 0/ å²ø5,UI*Yq½ùB­óuàbÂé¶èÜ*¨Àæ@ÿ¾©³áþýÏþÉÿÅP|þÓ®¬RÎãÎ’Ýnnn ãyœJI¸ñŒÏ­+¯Ûj ;ꮣw,ÑùFGòTªùsÇ€5.$<ƒÎ; ßìø¿sÿ2ñTgÃýûŸü “ÿŠ  ÍgAk©åÔ¬]×T ÀÆaÆPÊ2 ÆJÏ(9VŒyÒ´k»/‹ 5£»y$šK¨DeÕ¤•¤`7&Ó÷Šç`ÏP«ÐhgÃýûŸü “ÿŠ£û>ïÜÿàLŸüUg·†l¦±’ÞêI®ž[•¹šy‚o•€UÁB…1¨€Q”,Þ$³Uð†¯a©ÚO-ÌcPœNòÄÊ6¤Ga àM§®C°èqZÙðÿ~çÿdÿâ¨þχû÷?ø'ÿ@ Ô4Ô¾òäY浺‹>UÌ|Ä‡Ì •8 Ȫ©xboíK+›MNæ×Ë‚án.SËiç’F„å·ÆËŒEØ aU@QµýŸ÷îð&Oþ*ìø¿sÿ2ñTŸká›[ £û Õå­¢ùe¬âyrÑQ 1NrÙ†á†ÇM·³¾¼´—O¶û,71ym!‹ °te9òГ´¯ƒ¡ýŸ÷îð&Oþ*ìø¿sÿ2ñTJßÃñZigO‚úù!ûvË0 ¢²‰‰n[ý•ãŠÑ[m·ÒÝyÓ24Ê-ûµÚXî³ø'¸Uô¨ÿ³áþýÏþÉÿÅQýŸ÷îð&Oþ*€ ?þ=Ÿþ»Íÿ£­UEÓmÐaMÂŒ“s 䜟â¥þχû÷?ø'ÿ@ZÚAe En›¤’R2OÌî]>¬Äþ55Uþχû÷?ø'ÿGö|?ß¹ÿÀ™?øªµEUþχû÷?ø'ÿGö|?ß¹ÿÀ™?øªZ¢ªÿgÃýûŸü “ÿŠ£û>ïÜÿàLŸüUZ¢ªÿgÃýûŸü “ÿŠ£û>ïÜÿàLŸüUZ¢ªÿgÃýûŸü “ÿŠ£û>ïÜÿàLŸüU%Ö•§_J%»°µ¸.Ðò®@ôÉ94ZéZuŒ¦[K [y í/*„LÓH–v²nÙ4í´ím·RCóu§gÃýûŸü “ÿŠ¡4À#ÿ­Çýp‹ÿB’ŠŽÚƒR¸T.A†#ó»9êýÉ4P{Ãmq¥ÛÁyËk&—*M+32Œ0~bHÏN}+%›Q¸µžî'Ôo¢Ód†îÚk»?&áØ$~ZnÌ'jåyiÍ‘òôó ÿ¯&ÿÚu©@ŽÿH¿mH@òߨØ[M3ÀŒEÛ´—/v‰ÀÜX¹uA¿ÊÈV ±Ôdž¼ ª}žîÛÊóLöÍ ‡r©Þ”ŽNÞHÁ#é]¥\>½µÕb°°¶i/-#I.žý ¶¹”5ÓºÈ<¿³ºHb;å*rT ǘx‰n¤=õî¦,Ft’Õ-eü6Ó–”ôÉ([«*üõ\"nmµ(n¬F´t('¥[„¹’RÆ+…’@euË[pPyˆ,_¼þÙ¼‚]Q&[IßMŠà4hÓ5Åß–JÈ! XVà„ŽŽúŠ.©Ç$Y.çZ·Ó7LnâßPšS6#òƤÛvùœƒåç¨ÝŠ×Ôlu+Ë_ Æ÷7‘ÝÇræê(£óý–`ÌˇrÄÔe°C]=çsXëz¶­Ô5E‚F•šðÙ¼¦O’À’™$ P2a” ‚¤ÓàµÔ–K‹èlµ]Jm$Ǧ©ºžt3+\‘æ³àr6Q8Ý´Tè4Qp8U¶»»Õm Ó¦×aÑ^æ1#Ì× .|›Ÿ4›÷ú8Ï•!òFµŠ_ÉâI¬ÍÛ½•„ïrd1giW+ ž„&ù[g_³y®’˜ÅÊñƈҶùT퀹>§ ÐJånþÕö½åyÆí/lnG•“'Ø‹pä®cºýØä’Üã5a¿’msT¾Ôøx|AvÒ-å´«–"³ë¨ã"| sóã95ÚbiÒs‘YB£r© `J®~ƒÒ‰aŠt 4i"†W ê ¤2ž{‚„ ¥ Åy‡tÈuæö;H–à»ïc @-““œóžkBŠ(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEUgº¶[ˆLì’Zí/"†#¬ÃûsøgŒÔÓD³Á$,HY©#®ÅTye’{ˆ Š¥Ì»$Q³lÈ-ó`Œ)ä œï猚åÄÊirÅnkI+݌Ӯba 6æá¡0‡Q:¨dmÉ^ ñþëz`]›vÁµYÔ]¶³/pcþr:‰(­)Òq§ÈÝÉ”ï.dŒÉî„×7·#˵Œ¨lL¨Ø×¢ùLF3Ô]´Íi†E“pÎåéý2ô+>òÎém®]'Â1°›/ÇC¶P2}€Ý«D7Ÿs%ÊB ŽNŠisœ—aØŸÏyáyè*©Ë$ÿ¯ÀÒ§+Ñò¸ÿ®èRQDò¸ÿ®èRQ]Æ}66šM&$`¬öeC òùÆFj÷“7üÿGÿ€gÿŽÕ]þ?4Oúöþ±VO‹ž_ø’ÅwÓ,×å$†ÆäÁ$ª-ælnÞœ¡¾ðû½úSÐy3ÏôøøíLßóýþŸþ;\dZæ³›¥Zé°=ÕÍÒÜÎ Š²É 1ʪ±H¯,¼Q"+ä†F1%†…·ˆµ™­-þÇ Ü^ýžâæÄ¶ì¦ÌŠpÌ¥]C(Û™`Ïß4Ñù3ÏôøøíLßóýþŸþ;^~þ'Õ"ð¼W¥¬èþm¶èæÝÈ- ­‰Ö]ÑA˜„%\’vèjž*Ôì4ÛMÍ­Ì—¶ð@bmèöé;g݆V6çå ¤o1ÛÈaäÍÿ?Ñÿàÿã´y3Ïôøøífi——ÿÚ—šf¡%´óA7kxZ%+#H»v–~AˆœçØÀÆN½ #òfÿŸèÿð ÿñÚ<™¿çú?ü?üv¤¢‹“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿãµ%\ü™¿çú?ü?üv&oùþÿÏÿ©(¢àGäÍÿ?Ñÿàÿã´y3ÏôøøíIE?&oùþÿÏÿª:ÅܺNu~n’_"2â?²Ü{ ùœsßñ­*ÃñüŠ:—ýrþ¢„Ô–ÓÅ+Æ×ñåIS‹3ÛþÚÓ|™¿çú?ü?üv³üj_ì2"K4^n£k42´oµî£V”‚2 õ6¡u¤]^ézt“\‘ä-˜›7/簑䈳șÄq‰0îßÔ‚‹L§É›þ£ÿÀ3ÿÇhòfÿŸèÿð ÿñÚálüKª¼º¶¯0D‡NÒüË›S—’)nД!ÊÆIˆgýg8Éè|=¨ê÷SÝÛk©Ьr!4fV,9f—á‹ ä€>RHÏ“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿãµ%®~LßóýþŸþ;G“7üÿGÿ€gÿŽÔ”Qp#òfÿŸèÿð ÿñÚ<™¿çú?ü?üv¤¢‹“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿãµ%\ü™¿çú?ü?üv&oùþÿÏÿ©(¢àGäÍÿ?Ñÿàÿã´y3ÏôøøíIE¼þe½¼“=ò ,Žpç­G`ךmÛÝÅ\[Ç9AjX.ô Œùƒ8Ï¥;SÿUçýpýÕk;¸,<#aytþ]½¾—²¾ Ú« ’p9<ÔúÉ›þ£ÿÀ3ÿÇhòfÿŸèÿð ÿñÚóýÄ—¶[¡¸Æêõ¬îY5yG$× ÌQ÷q‡hà¿Ví¯ý¥©ÞxøYAq ö¾z:4lâT dý€38 Èô94Ôù3ÏôøøíLßóýþŸþ;\‰­êz?†|=k#YÏöÝ:ß쬰2y{xFñ¼ùŸñð­ÆÌì#Ù]{]sX›Ä‰¢0±f…¦7"7@Ê‹là¢n8$\ÁcÈÝž6›É›þ£ÿÀ3ÿÇhòfÿŸèÿð ÿñÚ’ŠW?&oùþÿÏÿ£É›þ£ÿÀ3ÿÇjJ(¸ù3ÏôøøíLßóýþŸþ;RQEÀÉ›þ£ÿÀ3ÿÇhòfÿŸèÿð ÿñÚ’Š.~LßóýþŸþ;G“7üÿGÿ€gÿŽÔ”Qp#òfÿŸèÿð ÿñÚ<™¿çú?ü?üv¤¢‹CK¸›RÓb½ûTq¬¯ Uû!' # '÷NÜã¶zžµoÉ›þ£ÿÀ3ÿÇk7Âßò*Ø}gÿÒ‰k"Öa…›Å—Oy>¡ ”—SÛý¶T‰dT;áòØ»H)Ê’ äå%°:Ÿ&oùþÿÏÿ£É›þ£ÿÀ3ÿÇk–¹Ö5Û}fßCûFœ×sIûWØÜFã¹m¾_›ÀÛuߌ?N9«mâbþM2Ú°Ã6¤¶÷)#Àî°Å47ʇ™M¾7åAÝ÷F9ìü™¿çú?ü?üv&oùþÿÏÿ®%|c«Íog½”3]ê1Û\[ˆ“>RMÒlei;(· ¶ôvv¸gÿÂO®}žþ飱…t»µÜÛ´~cÌË$êÊ%+"Ÿ¼ÚXƒ»o Ÿ“7üÿGÿ€gÿŽÑäÍÿ?Ñÿàÿãµáy/æµ½–îé&„ßݤ ±·Æ«q*ᘱÜ0 €1ÍnÒ?&oùþÿÏÿ£É›þ£ÿÀ3ÿÇjJ(¸ù3ÏôøøíLßóýþŸþ;RQEÀÉ›þ£ÿÀ3ÿÇhòfÿŸèÿð ÿñÚ’Š.~LßóýþŸþ;G“7üÿGÿ€gÿŽÔ”Qp#òfÿŸèÿð ÿñÚ<™¿çú?ü?üv¤¢‹€Ï²^íV:…š†ÉPÖÏœdŽÌ}*„º¶¶–vÔ,ÙcBåVÚLœ àeª/]ê¶ZI¢é¿ÚlQIfù˜³”zOŽHÃЮüEsá;¸üO¦ý“P†S*É%ÀÚ~l#­ê8Ç\¶‘t×Â;ÇP­=¼¥G@[yÇëEWð×üƒ¬¿ìküšŠL ZcH’é/ +ʶd¢³ w€HôèiKñT¯Ék¡»DÛãfûA(Ø+‘û®¡>µ.‹ÿš'ý{X«¡Öï/­uß ÅoqZ]ÞËÔf,´ƒìÓH¸lü 4yѹ”@'ÊäÍ©õ§ý‡ÅÿóÇFÿ¾®?øÝwôQ`¹À}‡ÅÿóÇFÿ¾®?øÝañüñÑ¿ï«þ7]ýX.pañüñÑ¿ï«þ7GØ|_ÿÃâÿùã£ßWünº{=~×Zˆ¦“$þd¶‹qos6Ÿ8€«¨dmÄ*¿ÞRT0n£‚9tÖõ»ÿxKɸ¾’ïPÒ…íÏöj[ ™$9aç$G™Nà0ÙdÚ6‡Á`¸¿añüñÑ¿ï«þ7GØ|_ÿÕíàŽ4? E s‹„!™Ue@\0úÕý âú‹ipG£ß\Ç$V‰sp#–GY&Š93˜à•T,KÆF„ÀPÖ-üu|ÖñZi6?kº»[xìîoä†{pbš\ÜÆ`-m‡€ÎC’Ás8øÄ @tϘR·XÊOµb W B®GN¥¾ñŠD–šg‡mÖd‰bIÐ"± Áq ÇR]¸ø,s,ú ÝÔð£5ìvé4ÅJÍ,%b1ÄÁÉh%ǘbmäe¶\—Æ—‰¦\ß d1êØÇ4·ÊýÔ’«Í+"1Š#9 Ī„°\¡öÿÏþú¸ÿãt}‡ÅÿóÇFÿ¾®?øÝ[‹Æš•ÕçÙí4­6q%Ävvó&¦Æ9fkUº'p„þëË.Œ–!~P•ê4JgF±Õ-ÖE‚öÞ;ˆÖ@u Á#8>¦‹Î3ì>/ÿž:7ýõqÿÆèû‹ÿçŽÿ}\ñºïè¢Ás€û‹ÿçŽÿ}\ñº>Ãâÿùã£ßWün»ú(°\à>Ãâÿùã£ßWün°ø¿þxèß÷ÕÇÿ®þŠ,8°ø¿þxèß÷ÕÇÿ£ì>/ÿž:7ýõqÿÆë¿¢‹Îì>/ÿž:7ýõqÿÆèû‹ÿçŽÿ}\ñºïè¢ÁsÍôýÅ6t60E¤•€¸,òNK‘¤í|Ã=ê?øFuÏí?í?ì ÿhÏו7›÷výÿ+=8ëÓŠôhÖÜ×Aÿ ­s>Öæ¸×® —ÌtÔ./åˆ4„‹e´’]Š;‡`ÒqŒ#ïQ`9ûO ë–¤vzG†í‘$3"ÃÈÊí,‹†ÚHÏ\Sãðÿˆ"x^=3èЪ¤L©81ª†U û®àc fõ5fÃÅW%²Ó¼¯>ɯõ[0˜7’‚Î+æAµT•`­É?}Žq„-ü{yvÖñÁ£@×WWkm“Þ˜îm÷E4¡®bxÁ‡ˆ‡~Ab›ð¡Ë̹<3®KjÖ²i{v!14S(„”\yXÚ¤’Až)ãÃþ X¦xtBð-»F}­Èò¹P°:r}k¡ŸÅ7‘húæ´ºd ¦i±]˜ØÝ‘4Ò[³#)O/j)hß ½Ž6¼+Ùë—š4PéÓGöû]2[M*÷P–r³Ëq"ÂÖ2¬Iš2ÄÈËðp7 ™1h¾%†ê{¨¬4î.6ùÒ œ<›Fqò²p8éSý‡ÅÿóÇFÿ¾®?øÝ_Ó|_ªjúv‘-¦…wš¥£_CÕþÄXE¸³¤oó™v®9^IVù=÷еMF=7UÒÿÑdþÏÓ'û#͘æ7×q®Ö;N6,.»ö“‰‰É`¹gì>/ÿž:7ýõqÿÆèû‹ÿçŽÿ}\ñº¿‰õI5«ÍßO‚mM%bcž÷d¢AjÎE„±ùîW”çæ9_•*‡Žîõ-ocÒ¤´·lm2Ý#kŸ²¾À €· ¼ÚrÄÆX.3ì>/ÿž:7ýõqÿÆèû‹ÿçŽÿ}\ñº}ÏŠîu¿ j‰qé·=½”H·./lÍÔ‚’hŠ!‰×xpØ;[crO¼z¥Í«ØAÅw²C=ËGváîc·ó„&<rå•ÕØ6à’°\¡öÿÏþú¸ÿãt}‡ÅÿóÇFÿ¾®?øÝOw¯ëOÒm —ìq]Ã$W7Ï ráld|±¿Ì<ò c¡c‘œUË/C¨ U‚ÆA=óÙ½œHKo<~gšHTªÇsòg'Èàüë’Ás3ì>/ÿž:7ýõqÿÆèû‹ÿçŽÿ}\ñºKO‰sÝØ‹Øü7|öó}í ¤±ù‹,ÑD¡šXÒ1!†ÔíoœØ×|iy¦¦§m5œsZéòÌYï rM"Û™[ìá):©À,yR dÆ }‡ÅÿóÇFÿ¾®?øÝañüñÑ¿ï«þ7Võ?ͦY]êM¥Fúz=ìÌ.ˆ–I­’fp鳇ìò€Á˜ý̨ÉÚk:ö¥&“ªéVñéÚ£¥¬ 5•ÛJ±-äÆÝ%W(½;mÀû«†äí,)K¥øŠ@/ˆ,mŽÞ![pœœ€IÉç<œ}J©{¥k)apÓxšÑâ1t]8å†9æεõ-^¹Ô'xµè!ˆ»yqgîØ $ ïÉ<ŽqßʃJ_ ëÓDñ?ˆàdu*Göp䤞㧯Wr·†¿äeÿ`Ë_äÔU­6ÌiÒ‹'˜-¬à‡~1»nñœdã8õ4T±Ñóö½hý—€N;Å]F¡£Åª^X]]@Æk LÖæ;éc äc%W¸$|ÀðÌ:1Ï1¢ÿÇæ‰ÿ^ßÖ*Ññ]Í·Š|×7‘Ã;jr¤Q½ÆÀá­f_¹œ1ÜѨ8$c~ !3JÒßT:Œvj'ÞÒ*¹LQ»gs¤GäG;›,ª Þù?3f?øFl¿³¾ÅöFÛæùþÛæûG™»üÿõ›¶ü™ÝŸ/Ýâ¹]ZËN¿ñWÙ4;ø-u[¯µ[ÝËlŒ5 vhfiœ¶ö· ålBwy,¯´"œ¸.´[[}BæÿJðüËÛ[ØÛZ^ìË›°'ggf# )MÌUÆbP»¤@‚„zu§öuœv¶¶ÑG d€ff$’K31³I,I$’I$Õ×?óÊ/ûúøšÍð´VpørÑ,55 Q¼¤öÌ <»‘€HXÔårvª…ÉÆkb€!Ýsÿ<¢ÿ¿§ÿ‰£uÏüò‹þþŸþ&¦¢€!Ýsÿ<¢ÿ¿§ÿ‰£uÏüò‹þþŸþ&¦¢€!Ýsÿ<¢ÿ¿§ÿ‰£uÏüò‹þþŸþ&¦¢€!Ýsÿ<¢ÿ¿§ÿ‰£uÏüò‹þþŸþ&¦¢€!Ýsÿ<¢ÿ¿§ÿ‰£uÏüò‹þþŸþ&¦¢€!Ýsÿ<¢ÿ¿§ÿ‰£uÏüò‹þþŸþ&¦¢€3$³޶—6ÑI¢ËfV`«U† €AT„ì ºD-eGGgûLzÂ\1`Ý8"F* 3„Aü ˆüSÿ"l{ÿãßϲûV~çÙüø¼íý¼¿/~üñ·vxÍp·w‡îo¥½þµÐ »ž-0jV q§2<6…ü–ó5a,rð$ÍÆU°€ôé´ÈgÒÆ˜ÖËf¨¨‘E!ŒF6mPP©©\ ‚gŸ ØtˆZÊŽŽÏö˜õ;„¸bÀºpDŒTf#ƒøºÎ¥?ƒ-Lú%¦—£²iï,vß&X ñK‰UbX̪ÙlmS•9»‡³kém­õ ËÁ¯w;Ûµì]2VXm¢$hx×Lq]é#m,›•ê_dÛ§}‚+h µy*–ó4^Zc!@ `tÛŒvÅe¯„ìK²Ó¢µ–(,PÇlñjw ,hq”©³…ùKcå^>UìõýCI7zÍ„V™6ž³Êí$sÀZ0]\yiåíËáò6ƒž88äÓo|à_µÞèÑéãGÚ×¼kqb&Ev.ƒÏâ@§~T$ÃiÉ*èWú¦£egg-šÃ“‡µ[K¹mŒ$# ÚbÚ@Ú̸5^O ØL¤Ö²Ê#O-¼ÍNáŒé¸¶É‰9™2Í…“p˜‚AÅñ©øxÚ“ÝڹІñyrË8”Ä6¤ò–røR‰ ŽqYþ2‡E“YþÞ’OêO6™Ù4ýBÀN×ÁWT´”¸äóáUÈÌdƒ¹Aï­í>É=ÜÐ[D’]Ê&œùÌw¸EŒG*(ãÓ×5^ÏF·°þÏû5”QÿgÚ+_ô‡>\'fW‘Ïú¤ääü½y9Áñ.«¢Ãi¨G®\Ú_Â54·†Î÷[Ç)·GÊíò:ZmÌ€¡PW¬C¦Çj¶©¦Þ¤zfý6BÍÄÆYËE¦߸•b ¾iQöq·äÀ={uÏüò‹þþŸþ&×?óÊ/ûúøššŠ‡uÏüò‹þþŸþ&×?óÊ/ûúøššŠ‡uÏüò‹þþŸþ&×?óÊ/ûúøššŠ‡uÏüò‹þþŸþ&«·5”Ëj-Òbd¼¥™U²pJŒ푟QWêªÆÓYMM$æUYc Y có ÀŒŽ¼‚=A¤Ÿàí?NŠÁ#µgûPÆ¡ï$ )‰URI#P#yDÃ•ÈØ¸ÆÕÅ{¿ÚÜ5—–ncò.ÅIJNå甥PN[ÌURÀÇÞùÉ®GÃ^%׿—@·ûv›k·ÓÒ;u®ax!i$Kt€»^P$H×Ëù”|É‹®äKA{âß²Ç. Þjv“YÉ`€ÛÜIåÛÊÑñó$a–P]r s0;i<%¦J£iê4Øê—³(¸RňŸëÁfrD›²]ÉÎö͉t%°ûÃ,}¢K“ö]FxÈîÎä²Äv;sŽG p7ž,ñ.ûq©cmÄíe5Ü«ö¡"‚ ÆèãöÁå“ç ¼:mÔºÖõ‹Üêw>!´¶õ‹›Q漯O:„…¥VGœìQóáJ®>VÌ„ªƒÃö6²Å%¾™m Šà\ƱÌÊ© ƒìà…¾]¸Ç|gš¹aiý™§[XYÛE­¬I )ç1ÚŠQ’2pë\-–«­ê”Q kUµ†ëPŠÁbžÚÙ&³’è¹#‰‹‚¬T`¤vžÔ¦Ö|+¤j— Ï{e Ä‹!C: d“ŒŸS@·\ÿÏ(¿ïéÿâhÝsÿ<¢ÿ¿§ÿ‰©¨ w\ÿÏ(¿ïéÿâhÝsÿ<¢ÿ¿§ÿ‰©¨ w\ÿÏ(¿ïéÿâhÝsÿ<¢ÿ¿§ÿ‰©¨ w\ÿÏ(¿ïéÿâhÝsÿ<¢ÿ¿§ÿ‰©¨ w\ÿÏ(¿ïéÿâhÝsÿ<¢ÿ¿§ÿ‰©¨  ‘5Ç™>"‹;Æxº¿ìÖ%·…"]M°» -Åœ[öÞî[Y¥vÁ•ËÆC~ñÆöŽ[ä€k ‡ýmÇýtú ×’éúÞ­c<Þ&´ðõð¸ñ¥ä±K/•"ÞHˆÓX/—¥ÆÛxÝP¤±Ü~`€í´ÿ XéšÝ¯örÛD–V䵉¸ifH¡Šo›%JÅnñƒŽC??{64íL⻵…n¥‚á™nfÔf¹u‘HŠ—rÄ…ß*ì' YŽÉ®%5¨añEô–~3ûe„ÑXÃy­y–­ö4Åó½c.]b_OúÜu+Œû/k6v‰—­Ø­¯›y=¥ÅÝÂ'öœ­}r Hgác; òÛ÷£ç]¬ûTðݤ¥£IÍõ „^Ê`¸A4±ˆ òó"Ç b$3“œ¶n6§ßk^ùIu ¨g/¤òüÕUdi"#HË!™K# ü«ŽWûPßøÛBŽï[ÿO[»C¢æò"H.’9vmó~dÙf*|Ì€\XiotÝ{Ä:¥¶£:Æ]­¼ò\\±œ"Ä9"™„cÈb«N“Iðt:f›s§JòÞD·†&–R%Š(b#Pê]PWn×äñ6šþ»«Ú[NþÆm÷zt×6pÎ%’Æ·[~é•aO'pRW‘ÉN ØäôñÖ¯ý•Ÿm}«JûV¡þ ý†ã÷[cýÒ®ÍÛæù_$ù\ckdKUð{\Ú¥˜¬¯ ¢G»–æéä`"HÈß±ÉÈŠ,åÈ% ·"æ›áK3F‹KŠÑdÚBÒ\¶ç’ÝbXœà ‹€;zrsƾ§¨hÚMô6zÜpNúíмK¹átÈ^k™#ræ1‰HUpÛÀ]»‘x‡TeƒO¬ÀLÑ7Ûn`‡ÍKKq#„»QÞ]̾[­UÅ ` ¯øE"Š{'· ¶µ¸ŸíWrÝ=ÀDFŒòv£¸‘G!Yr'4A¤hÚ¤ºŒ±yWò4¯îu9g6ÒÈ„“ä0`„ÚAD<\Cà€"Í»êRKpšÛ¾žæ0mîfd;B‡E!Árr0W¹½òm'Á¾·½ñDúf›u¥,í¨Mödò¤À#¶Vxöm*Ò° Ÿ/ï`é‡ôµq*Áx³ïw3®µv%bë¶éî`D1 @Ø1ZŸd³³¼ÓäÖvóEÙY"ÌP`®Ñ¢â8€‡¬_jZîµ%õæ±7“å}ž?ìõ·ù2=¥¼²n'-û§e²[åÙÍÛÛI-þŸ`šýݽàñEëµ¼b%Šº_º­ H¤6dÝr¸ÙEá-2•ÓÔ…xÚ%{Ù`Ù"È«œˆ4q‰µNÅ  /ü3eªOs-õ£\}¦'…ã–þfUÆÅ#û±±B˹l3sóð·¾,ñ(¸XbÕ,m~ÏçEn÷r¬GP–;©áÛåˆ$i›l1H|¶Ì¼}ô ÖkÚ¶›£xëD¸Õ5 KL¾E’êe‰Ky¶‡±8ãØÐ«Ÿ i—otÓéë"]$«$&öo(yŠVFHþâ;|º€Ç{ó󚎑 çˆ,.Y­£»“KL[íQ@$60’Ü,›°pÁ;í#™½ñN³o=ãØ^}·WIoÑ´)ÈŠ$œÁ.Äa¼ÇoË1VóþP7&#¸Ô$}{K›Eñšò +õžú"ymãó,·ùi *;¨Á A?18“ vògÍ}À“9þžþúüíëïŸÇ?Ï×߯|üíIâ¼AqjÞ}¼¿sŸâ“Üÿ3EEouî¡-Ü^íâ’6 ÊÅÈ8<ô=è©c£ŒÝè  µê;s/‰¼ká[ë{mBîD7+І$o,ØW1+¹r>a–é©s£;*ÚäŸlÅVµ Zk‚]]i­,Ü¥Ì2e`ñ–1’F {`>cÅ0Þ5·MNÃL}Ceõüf[{w„¬…B–%”®S€~ö9u¡ÿ…ƒaý§ýŸý§ûÿ´ý“wÙÛÊóöîò¼Ý»7ãøwgY ‡Æ tß´ëÉÄ6ú“Ê̲´Em­Àˆáü¦Ù‰HôBÄö©¬Ða¸±’ò÷ÝûÄ8ÿõWáOx“NÖô).´©bþÏûwÛ'fV‚O1¾O³F ò»„Œƒ×§ðLJµ{mwĺ¾¥a,7…èH•pQ­â]±>Hb ÎOn‚€:ßíKÏùíÿŽð£ûRóþ{ã£ü*²\ÿϼ¿÷Á£ì—?óï/ýðijßÚ—ŸóÛÿáGö¥çüöÿÇGøT?d¹ÿŸyïƒGÙ.çÞ_ûàѨj^Ïoüt…Ú—ŸóÛÿáPý’çþ}åÿ¾ d¹ÿŸyïƒF Mý©yÿ=¿ñÑþj^Ïoüt…CöKŸù÷—þø4}’çþ}åÿ¾ 7ö¥çüöÿÇGøQý©yÿ=¿ñÑþÙ.çÞ_ûàÑöKŸù÷—þø4jßÚ—ŸóÛÿáGö¥çüöÿÇGøT?d¹ÿŸyïƒGÙ.çÞ_ûàѨ_xŒhºd·—·©ogl™yFt²O@ä’æ³_â6Ÿ}6¤ðÃ`È·K-£¤—ÆÍÑ”ƒ¸`ãŸCT¼}á½SÄÔ´Ë fk©U5pT1WWÆ{#iÆdMIäi§’Ý ŽÑÞ1]LA7‚ dåF2=FlÿÂmiÿ÷ö÷ö¬?Ù~_›ö£éŒc;³ÆÜgÉsÿ>òÿß– Mý©yÿ=¿ñÑþj^Ïoüt…CöKŸù÷—þø4}’çþ}åÿ¾ 7ö¥çüöÿÇGøT2ÝÜMk-»O"Ç*²±¶0ݜ˂§ž ‚;QöKŸù÷—þø5—âM'P¿ð¶¯gki,—SEmÆæd ž'½­ìÖ¶ñ[Û˜á‚$ qƪ¨ `ÀqŠŽâi.ç´švß%¤¦h1±Ê4dñ×åvúú⼤|6Õ–€xu/áe£ ÖÔ€ 1æ@±'¹ù¹¨|AàßjZ|[ô›‰µ,,VÎæoæ$Ɇ›ÍšCæ† ’¦6ÁÈÏSOP=CÄ>1 hW:½ãM%½¾Ýë h\î`£àuaÞµ?µ/?ç·þ:?¼‡Qøo­ÜxkÅå4{‡ÕoµIžÍLß+[¼Ð¹ nؤùy9Ã| z }ÿ|Bö0Ãw KªÞG¯C{{{˜ÿâcnÿ °ÛµHO,áGð’ Ñï¼böJÓOÎòY#B‹å¨fÜzŽð«¿Û×nû'™7›åù»¾Î|¼gß·nïösœsŒW•é¿5¹5ÝMGA £Ç¨êWc˜#¥¬ªùHS%~ò“„Èϰ¥øoãyôo6q%ÈÐÖÈ™ ·ÂEL–è"ŽÀ:ñLG¼j^Ïoüt…Ú—ŸóÛÿá\_„<7ªiºÎ¿vtyt½2òH †ÕYXöÈû#%qÇC“·žÕ×}’çþ}åÿ¾ -FMý©yÿ=¿ñÑþj^Ïoüt…R,ý,X0ºxša€€OæÀSÒ§û,ßÜÏЃþ{~cÔRÔ ¿µ/?ç·þ:?ÂíKÏùíÿŽð¨~Ë7÷3ô ÿžß˜õ}–oîgèAÿ=¿1ê(Ô ¿µ/?ç·þ:?ÂíKÏùíÿŽð¨~Ë7÷3ô ÿžß˜õ}–oîgèAÿ=¿1ê(Ô ¿µ/?ç·þ:?ÂíKÏùíÿŽð¨~Ë7÷3ô ÿžß˜õ}–oîgèAÿ=¿1ê(Ô R»RÄKËŸ”uÆ==«6ÛÜø†çA‹PÝ©ÛF%š$ªvœîÛ´ýõè{Õï²ÍýÌý?ç·æ=Ey>‘à_Yê7ˆ&·¶7­¬\]^X¨\@—$®Í!€TBª9q÷¸«éWÞ1{ wJÒ%iƧçy,‘¡EòÔ3n=GŒøQÿ ‹ÿÂSÿöé¾×ö/¶ïòÓËÙ¿f3×v}±Žõåv|SÚB¦—äjvÑêIw¬ ˆ¿$Èâ7«[–•ÈÜ8桇~&–Òxôí û2SáÈìda< ö›…•NcsèËc9àLG·j^Ïoüt…bÙxò;ÛbóΚ}&æk{—–%ëÙBä•Á㿵pSxQ]<¦Ÿ¥jžAÕ-.ï4û¹lÖ;˜“!–8áaOÈHm¡°N3ÐxÂךv—®Úê:ZÛ_j—Cfæ'_³º¨U*ŒËŒ múv#(fïü,ú ÿÌ;ûWþ=Ûþ=ç§ÝÿÇ~÷µ[Ñ5$MNM*\iËkµå–ѳï ýÜuçÖ¼ƒþw‹ÿ³<¶^Ÿ´ÿdyÂXŠÿenÝ¿·}ì|»³´…Æ­ø]ºÕ5‘§éHæålG¼ŽXÕtÕ‰†ð2Áãdy`çpîqLG¡ø‡Æ/á­ çW¼i¤··Û½a Ì`¬;Ö§ö¥çüöÿÇGøWê?5› x¼¦˜ïªßj“=’ý­v½»Í ä û>X<áŽwQV®ü ®MáíBÂêÒò}RME.S¶6òAFJy‘K"Š6¯•÷AØWp&ÏTþÔ¼ÿžßøèÿ ?µ/?ç·þ:?¼^ãÀ^#•c{ï YÝJÞ’ÉVÌ[,p]´ŽÊÁY”,ƒŸåÈ"§ñ7‚¼g{j#ûÛ/­¬¬ã±¾´{}þjÊÒM.& »•(@;—<±É¨Ãý©yÿ=¿ñÑþKVñPÐôɵ-J÷È´‡o™'•»`£…õ#µp¶¾Ö"»ñ(—Hߪ_ÜÝI§ë‚HÙÑâÛïÝæ®ß»…RF25ÍÉðßXÿ„2öÎÏGÕ#Õ'°·‚Hžk$¶•ÒXØ"`Y‡Í‡|’ %†@=oLñzjïsã™­˜,ðËnÐÉ#+¹CGCŒqÐÓî|T,õ;6{Ý—wÞgÙ£ò³¿bîn@ÀÀ=È®?[ðN¡o§ßI¦£ê—šÝ³jOt-ÞImãÀÄHÊ!Üܼç©%k˜Ó¼¯Cq¦Üj ßiÖZ¥ó®,–Îÿgš5òÈM ‚J‚0XŠõ Æ/®h}•¦O°ÞÉe/› ºc%qŸ—ž3ƒíPÙ|A°Ô²þË©ùŸÚžoØÿÑØy¾Vwõ_—=qžÙ®ëÑjQ·Ò6Þ5ẉ“y°9 óƒ’§')œœž*Æ‹à-wCñV½©íQck Í¢%ÒbÞ›çbª˜•HØpàIé@ÇŠu-KOÑ…þŸ¦j\"{a7–ì»›%~S–ÿgŒóŽp…¯ê>%ðÞ§y£fA, m•®<Ç•vŸŸWjž1ëצ ]XÖO†td‘ü»TºOjÇh$ª…<Ž;•bçQÖ®-fƒþ¹×ÌFMßj„ã#Þ  |5ÿ ë/ûZÿ&¢¥Ð­å´‚ÞÚuÙ,Z}´n¹ ‚2=è¤À}‡üÂÿëÉ¿öd|Tñ>§ámæïK²yf’fŒÝ`2ZäðÌ;’xmÏ^ÊÚ¶ŒR-9Ö6‘–ÁˆEÆ[ý_$ ýH¨nõMVôN“øRI!ŸpxžêVVê'‘ƒŠ`'ÿQ¦ØNÛÿCÑ]ÿÇäÿõÑ¿qúœÚÖ¤¶ˆ|?½úó¼ûT'øúúƒÿ×õ>½úó¼n¾ùüsüý}ú÷ÏÎu÷ÏãŸçëï×¾~x~Õ þ>¾ ÿõýO¯~¼ï>Õ þ>¾ ÿõýO¯~¼ï›¯¾ÿ?_~½óó}óøçùúûõµB¯¨?ýSë߯;ϵB¯¨?ýSë߯;À&ëïŸÇ?Ï×߯|üç_|þ9þ~¾ý{çç‡íPŸãëêÿ_Ôú÷ëÎóíPŸãëêÿ_Ôú÷ëÎð ºûçñÏóõ÷ëß?9×ß?ŽŸ¯¿^ùùáûT'øúúƒÿ×õ>½úó¼ûT'øúúƒÿ×õ>½úó¼n¾ùüsüý}ú÷ÏÎu÷ÏãŸçëï×¾~x~Õ þ>¾ ÿõýO¯~¼ï>Õ þ>¾ ÿõýO¯~¼ï›¯¾ÿ?_~½óó}óøçùúûõµB¯¨?ýSë߯;ϵB¯¨?ýSë߯;À&ëïŸÇ?Ï×߯|üç_|þ9þ~¾ý{çç‡íPŸãëêÿ_Ôú÷ëÎóíPŸãëêÿ_Ôú÷ëÎð /^Ocá}JöÖM—X\Kà6wyÈ<ŽùükA×/ñß²[ϼ_÷À®ßYÕucÀÚÍí¤pjï$ñYÛÉ$N‘5¤’luÞVàåþójm*0¿¼ùK}gUÔuj77¶‘Á«¼“Ågo$‘:DÖ’I±×y[€—ûÍ©´¨Âþóå¡÷Ù-¿çÞ/ûàQöKoù÷‹þøÆøWÄž*×'Ó¯n´O/HÔ"Ùyɽñpí'ð¯ú¨ó»qÛ¦¾³ªê:ǵ›ÛHàÕÞIâ³·’H"kI$Øë¼­ÀËýæÔÚTayò€wßd¶ÿŸx¿ïGÙ-¿çÞ/ûàTÕÉèšÆ½¨Ã¡jSÏ£&Ÿ«¢Î *ñÏ´-"Ä„³ Ÿ¡-„ÂÆçiÏÊÓ}’Ûþ}âÿ¾d¶ÿŸx¿ï\.ã]fç^Ña¿´€Xk{Í“¤h™AJ[Ïi$\(41}ðHCò‚ĺxû[‹Ï¡m>ÆaÌ̈åîUŠ©8LˆÓ;@Î2yæ€6¾Émÿ>ñß²[ϼ_÷À¬[éãín/>v…´û„O32#—¹V*¤á2#Lí8Éçšè(²[ϼ_÷À£ì–ßóïýð+™ð•þµÉmÿ>ñ߸Ý3Ä>%Ÿ^ÓVú+´«ù]b•!WI‡”ò(†d¸rù ¸3Åeü¬UOq@ý’Ûþ}âÿ¾d¶ÿŸx¿ïXºeÍÿü&ZÍ•ìÐKv–ÓÀaI#Ú%À ÊÒ2–X˨]Ùä` eè¾"×¥¸Óÿµšð]êwzZ‹X´&sçÌÁAå|¿›¨mÿÀ:ï²[ϼ_÷À£ì–ßóïýð*jãü;o¡k¡ë÷ú­ôZµÏÍ5·ÛaiÌN$·ò lYò…Þ 9bHb@:¯²[ϼ_÷À£ì–ßóïýð+‰ðƧªØ›[‰#¸ÓîuCNƒÍ–InŽK—Wy]Ž@X|°˜'mÿÀ$ð¯‰ÇgxÆÙ™ÆBG#„‘ñ‘’¨ÌÀg’^”†ZÒuû]sL‡RÓeŠ{I·yr}œ.pÅO  õµA§ß\Kâ m‘’´XÐÆ»Wp”œ c$“×è+'Mµ×4½CU’á-¯Öò{iÕàO³€ÇKÃ;œ$q£û’@ö½¦ÈÅ⥟þƒ5_¹×ílõ;6ybK»ï3ìÑýœûsr÷"©?‹Toòtù§ÍËZÛùpÂ>Ó*ïó70ÆÏ.L—Úß—vFyýsDñ íö³}g-šmû7Ù-ä·.n>Î|ôùüÕ ºWt9z#ðŒ2ýíZ=œžfµuu{æGy±µyLÿßÇ™$g¶;¯´ÉýØ¿ïÒÿ…@Ú¢%ôVlÑ ‰cyQ<…åP¨cœc‚ëùýkÏäð®¬úž§4y¡7ÚÌwþlÄVED»ÑMÃmÝÊÄ*˜ò Ø€èC¡Ûjiw±xE--­šdû1ŠØ4R»BVàr¸Qƒ¿¦Š@vÿi“û±ߥÿ «k¬ »‹è#CYÎ ´)‚Æ4“Ž:bAøæ¼óNð–§ki(x/ãˉo¼Ù-–=@¬±´Dj]ê’¨iØIƒ÷Ü‹²éæÃÀÞ4+¤ÿe[ÜGq,¸ˆm_²"ˆÙ”e‘_~ôÀô´ÉýØ¿ïÒÿ…gê#·Ó Ôd—kµ…§Û& ]Þ^È“å¿íÎ3\|ÚÌ–·©g }ƒK¸ò]5cµ21C#4ˆ„´‰h.rV6ã!3…uì›ñ>Ž÷w]Å”’›2Óç¹(¬C@É,JyQ‚U€=Gí2v/ûô¿áGÚdþì_÷é¸-_Ã>T÷PéúK5–ÞHììã·ò$™Lṵ̂Èʬ¸0çÇj`‚¹^·M†[}.Ò ã¶ŠhàDxíT¬JÁ@!è ôöÅ 4>Ó'÷bÿ¿Kþ}¦OîÅÿ~—ü*(7Údþì_÷é´ÉýØ¿ïÒÿ…CEMö™?»ýú_ð£í2v/ûô¿áPÑ@}¦OîÅÿ~—ü(ûLŸÝ‹þý/øT4Pßi“û±ߥÿ >Ó'÷bÿ¿Kþ YNíZäœdÃàcø¤¢’?ù Ü׿ô)( ô_øüÑ?ëÛúÅ],>ðÝ¿ÙüéQ}šS<,£_*C·.¸+|‹Èç傹­þ?4Oúöþ±UÝ?Æ߈íôËìÍ,‘ù“I2:mGa÷àX¤o—b•û°,ªZ­ÍÁá­nátM4N÷ tò TÜÓ)%d'. 1 Ôn>´ h+p÷ ¢i¢w¸[§Z¦æ™I+!8ÉpYˆn£qõ®Ã^"ÔómgªE%ÄSjwºt:„’F%™â’r¤ÆŠ'— ]Ùxû˜;ªæ—â›ËæÑî.4È Óu¬}‚XîÌ“|Ñ4ËæÆcPŸ"6v»á°9pb5!ðÖƒmªR M‹P.ÎnÒÕRÍÇxÉÉÉÏ94 h+p÷ ¢i¢w¸[§Z¦æ™I+!8ÉpYˆn£qõ¬»Þ\ÿbùúd}¿P»ÓçÙv_É’;sÞ­öväí##ƒÎ.Y\ÝÿÂk¬YIu$¶‰egq ,¨,í:8R$)OÌO9ƹYöºc¨Ï¨ÙéV6÷Óîó®a·D’MÇsn`2r@'=Mrðø“YÔu_ Þ%·Ù4ZW1ùs¤¾tMk,¨&VŒ4r|ˆ@™~øc÷sÜPXðÖ‚·pº&š'{…ºyªni”’²Œ—˜†ê7Z!ðÖƒmªR M‹P.ÎnÒÕRÍÇxÉÉÉÏ95£øºúúâÑ/ôhìâ¹½¸Ó’Hï<ÜÏ ”±bþè¬ó6î6cç6+ԯ· zM º¾{{ ¾oô5‚A¤+bŒ±K.\té:l:¤Ú¤Z}¢j&ÉnÖºñÃ>2GʼØzTvºc¨Ï¨ÙéV6÷Óîó®a·D’MÇsn`2r@'=Ms~ñÝLj/ìÔhWqX_!x.D7?*”.¦Bð$JÊHÿ1P7¸XÑü]}}qh—ú4vq\ÞÜiÉ$wžng„ÊX±tVùŽw1ó²©Ç¤é°ê“j‘iö‰¨L›%»XTJëÇ øÉ*ðOaéXþÖ5íb)¦Õ4í6Þ¸¹^ÖñäbÑNñà£F£Cónçí\ázJLJÂ~·û?‘áý*/³Jgƒe”kåHvå×åo‘yü£ÐTøkA¶Õ©‰¦Å¨g7ij‹)fÎã¼ äää眚ÇÑü]}}qh—ú4vq\ÞÜiÉ$wžng„ÊX±tVùŽw1óšþñÝLj/ìÔhWqX_!x.D7?*”.¦Bð$JÊHÿ1P7¸to†´á®4½M±£Ikj‘1\ƒ‚TŒ€qì+R¹}/Å7—Í£Ü\iA¦ëXû±Ý™&ù¢i—͌ơ>DlíwÃ`ráâëëë‹D¿Ñ£³ŠæöãNI#¼ós<&RÄ ‹û¢°?ÌpÛ¸Ùœ€nZèZ=Ž£>£g¥XÛßO»Î¹†ÝI7͹€ÉÉœõ5>ÐmµCªA¢i±jÙÍÚZ¢ÊY³¸ï9999ç&«Ù\ÝÿÂk¬YIu$¶‰egq ,¨,í:8R$)OÌO9ÆáÏÜx‚þÍF…w…ò‚äCsò©Bêd/D Œ¤óp;€@<5 ­ÃÜ.‰¦‰ÞánžAj›še$¬„ã%Áf!ºÇÖ7ÃZp×^‰¦ØÎÈQ¤µµH˜®AÁ*Æ@8ö©\^‹{â½SÅצôZZéú}ÇÙ¥¶µ½+n’C[s™G!ãm8%À: 7ÃZp×^‰¦ØÎÈQ¤µµH˜®AÁ*Æ@8ö©\߇õÝk[>lÚ-¥¥¤wÓÈo˱x¤xÉDCrP2ÅÞùpjö^+Ô¯!Ó.¿²mÓYBtÆûsf0¼È&_+‚ˆÙ*Ò`àÚ؇ÃZ ¶¨uH4M6-@»9»KTYK6wàg'''<äÔpøOÃvÿgòUàžÃÒ¹»_ê—M Jša×e_²ÏöþcˆÄófUòþY6'¥”ÀºàÞ;¸ñýš î+ ä/ȆçåR…ÔÈ^‰AIæ*àw È|'ỳùÒ¢û4¦x6YF¾T‡n]p>Vù‘ÏÊ=I†´mPêhšlZvsv–¨²–lî;ÀÎNNNyɬÿ kö±Ójšv›o\\À¯kxò1h§xðQ£QŒ!ù·s€v®p§…5{XŠiµM;M·..`Wµ¼y´S¼x(ѨÆüÛ¹À;W8P K] G±ÔgÔlô«{é÷y×0Û¢I&ã¹·09 ž¦£_ h*–Hº&šÁËÙ¨µL[±`ÄÇÇÈKr1ÈÍWÓu+éüU«i×G[[ÛÍ•qæ+£¼êƒ•såò70éƒÔœýÅ××׉£GgÍíÆœ’GyææxL¥ˆ÷E`˜á·q³9ܵд{F}FÏJ±·¾Ÿws º$’n;›s“’9êh—BÑç¼kÉt«.šXçižÝ ™#Få±Ê õâ¹û_ê—M Jša×e_²ÏöþcˆÄófUòþY6'¥”Àºàì(œzN›©6©Ÿhš„ɲ[µ…D®¼pÏŒ‘ò¯ö••£Ûém0<òI{w%ÜòO)vglz*ªª(G|“OMÔ¯§ñV­§^AImoo4Uǘ®Žó¨b jUÏ—ÈÜæRsô__\Z%þœW7·rIç›™á2– l_Ýþc†ÝÆÌ|䬪qé:l:¤Ú¤Z}¢j&ÉnÖºñÃ>2GʼØzV?…5{XŠiµM;M·..`Wµ¼y´S¼x(ѨÆüÛ¹À;W8Xô¿Þ_6qq¦A›­cìÇvd›æ‰¦_63„ù³µß È;€¦›á­F¸k/DÓlgd(ÒZÚ¤LW à•ã { !ðÖƒmªR M‹P.ÎnÒÕRÍÇxÉÉÉÏ95©\^‘ãÉunÊÊ}"H-¯Ý’Òá|æ B4ƒsV #s²q·rå€@<5 ­ÃÜ.‰¦‰ÞánžAj›še$¬„ã%Áf!ºÇÖ¬G¤é°ê“j‘iö‰¨L›%»XTJëÇ øÉ*ðOaéW+“Ñü]}}qh—ú4vq\ÞÜiÉ$wžng„ÊX±tVùŽw1ó ˆ|5 Ûj‡TƒDÓbÔ ³›´µE”³gqÞrrrsÎMjW7áýwZÖÏ›6‹iiiÅÅ´òòì^)2cQÜ…” ±C÷¾\Z½—‰oµ8tÉ%³ŽÊÃ]Bº}Õ½×™p…¡y‘ž7‹bˆÇ†ÀÃH¿qá­ÛK0èºlV†o8À–¨±ïÛÛ@8ã=qÜu†4s¡éžÿè‘ûûNý1òEá]_]Ö<1¤^êvpG ÅŒ2›“r<éd(¤±‰P"©;˜aÉnBìÚéíÃËÓÛ§l|‰ŒÉmLÓÇ›e¦Ú[J~Vx`T$rpHŒŽœtöÂÁ¨ø3Ã6ójœ©o;¥¹¹¾8Ë3MŽI{šÔ½¹toN}½½º{aiøÂ×RÕ/ô}6ÓJ´Ô,÷Ëuyô¬–òª&ʼnñ‚KL$ްg¨ÈHßøWZüû7þÜñÚoü+ý f,‹¹€º¸Ãàg÷¼ãscÓ'Öµ<u/øDì!Ö#‘u dkYÙÝœÌÑ1ÍÜÀfðHèïZÖoøü‹þ¹¿óZb8»ŸøNÎö ;’°ÏpŒñ+Ý\€ÀÍÿ7üv«Ûø#Ã7sÝÃlòZJ!œ}¢älr‹ ËÏÊêxõõÍQ³†ïľ3¹{ƒâtV{—‡2]Ø ˆ¬xÊ0¾Ñ€x'yÍSðåî±¥Csâ/¥ôV?¹¹¼Û£¤ÆÂÙ^i#Q™#H¸Q„`IVÆè@6¬üáBšÖ6’5–HIûEÈÃÆíŽeìÊÃßqEï‚<3§À³]FÑÆÒÇ?h¹9ycAĽٔ{gž+6ÎÇVÓ¥ð­¬Ñß\\%¥·Ú¬¢kˆ9˸¸’æ/ÜÌÄä´R“»†Ëáòõ9uKí@Ó®íüA#ØY[®¯²Úë&d»±,Ë"¯ï\*NCÆXà1œ»þÖƒÿ>Íÿ7üv©Øø?Âz‘•lÊÊ𻤈.®C)Y3•2çãÐí8ÍQ_´ùãíŸð‘ÿÂ-æÏö_+í¿kݲßfýŸé;wý³ïü¿w·—Xò}ºÇZŠ KûrßIŸU—1Ùý¥MÓjÒ|‚œä v;z®ÂxÅv_ð®´ùöoü ¸ÿã´ºÐçÙ¿ð&ãÿŽÖ-¿ö×ö¦çÿjݧšDmö»*ßí2žY×ä‘„=ÐÏó¼ìUòí;Õž÷TÔ¿´®4ƶ‘ÖâMFR‘ÄYedϘì[ªÅÎâT覰ðG†u=:ÚþÎ6’Öê$šûEÈÜŒSƒ.FAj8üá9®- „¬¯yn×Væ;«–Y"R€¸a.1ûÄïÎî3Í6ö[Ý.âïI¶·Ô£ë{iëim+Aš›U‘C¢”‰—>P•ã'aœ½4jwš×Þ_[ÞZhšeŒ× i5ÌðÜÞÜÇå¡ît{}섇vèþP‹þÖƒÿ>Íÿ7üv«Þø#Ã:| 5Ômm,pƒö‹“—‘Ö4KÝ™G¶yâ³l-|I<•ͬZ­Ä: m6Îké'®™î»<à36ÓÙ&6‡@ë”]ºý‚êû@ÓôßíW‡ûB[Ûˆu_µohâ„ßé?1UšKbãv «kþÖƒÿ>Íÿ7üvøWZüû7þÜñÚæR?Ígc¬Þ ‚ùÒÕu¹XLv]«mÍš {ý¨Ÿ(¶ãp+¶®k†m;VÏ>¹ɪé°é¯×M´2[£‰]I˜±œ4—9AJ½ƒü'sqaSwnå$„Ý\†$np ¼€³E’2ð:ñV ð†î­â¸·Eš P¡pèÃæ!LeÊmÜ…Æ<[P>ž Ðc¼µºKYÄÖr‰mOÛ&ű±.üG5 !F: ( _Ã^4²Ýjo¾k¹îcu󒌬ÌÛ!y]²î7(kz±m Ãnƒ+É`o—~òÉ6¡q:eÛ{6É—ql’ØÏ'žMlQ@ö>ÓtÛÈîm ô^^Dp BàÀ€‚6¬%ü° .`U‹MN±Ö5ZÚßeö¥å}®]ì|Ï-v§à`p{Ö…cá7M¼ŽæÐßEåäGÔ. #jÂ_Ë áBáp0W·ð^‰kö?)/‡ØîÞö Ú•Ëm™þûÈwg-r>wãçlôP\>Ó-õC¨Ç‚}í"¡žCnÙÜémˆçse•A;ß'ælêQErþðxÑ¥–ëP»û}ó]Ïs¯œÄeffÙ Êè—q¹@;XƒÕ‹hXøcMÓo#¹´7ÑyyÀ5 ƒÚ°—ò€xP¸\ [P=…ô:ò;›xg |ˆ¤»–H`È#÷Q3 JŠ0¤¨À$V†¼4ieºÔ.þß|×sÜÆëç$1Y™¶Bòº#eÜnPÖ õbÝEoá6Û\“Yˆß}º^ŸP¸taó¦2å6‚îBã ž¢ÇÃn›yÍ¡¾‹ËÈŽ¨\FÕ„¿–Â…Âà` Ø¢€ ÃÓ|%¥i7í{hÚܼžn©s*ÈÛeÕä*Çh6A[”P>á7A•ä°7Ë¿yd›P¸2í½›dŽË¸¶Ilg“Ï&£‡Â:=»–Š;µ"íÓ”· ¥r›öÂB’ Æ¨$ ŠÜ¢€9û_h6kÃk8X"‚Õï&p|è ç;‘žƒåû¼WAEÇéþž#·Ô亭쥒Kx¢˜pÈñˆÔÉ3ªG±ùHÒ0J!à(ZØ±ðÆ›¦ÞGsho¢òò#€jµa/å…ð¡p¸¶(  ¸|=¦[ê‡QŽ ûÚEC<†(ݳ¹Ò"ÛÎæË*‚w¾OÌÙ!ðö™oªF8$ïi ò£vÎçH‹lG;›,ª Þù?3gRŠÇ·ðÆ›m®I¬Äo¾Ý/Ϩ\:0ùˆSr›Aw!q…ÏU{è–¿cò’ø}Žíï`Ý©\¶ÙŸï±Ì‡vrÙ#ç~>vÏAEqú…§ˆíõ9. k{)d’ÆÞ(¦Ü2wãçlôP\>Ó-õC¨Ç‚}í"¡žCnÙÜémˆçse•A;ß'ælÇcá}'N¼ŽæÞÃEŸ").å’2ýÔLÅ#Â’£bŒ)*0 ±Eϧ‚´ï-n’Öq5œ¢[Söɱl@#lK¿ÆAÁ@B‚QŽ‚Š+—ð׃Æ,·Z…ßÛïšî{˜Ý|ä†#+36È^WDl»ÊÚĬ[¨¢€1ô iº ¯%¾]ûË$Ú…Äé—mìÛ$v]ŲKc<žy5>ÑíÜ´QݨÉnœ¥¸e+û”ß¶•0¥A `VåÏYøcIðô1®•öТ’Ü]ÊaUäD_`lŒ–q%‰9%ª×Ol~þ^žÝ;cä½zqç7¯×ßüûuz{cðÇòôöéÛ"cEkÑû‘ÇFôé×ÛÛÛ§¶Úžµ§é:æ“¥\¥ç™©yž\Ë!ò¢Ù°~ñ‹ »šDEà嘤SoGîGÓ§_oonžØXuÍÛ\Õ –[È£µ]>êÕž9@š9$’ŽHÎ †Áº† G²@ËÖ´ÿE}-’^$v—mj^YáUÖHÈcº6WVVî=+M­ÓíqÒà£õ­ê¾õ™¡ØÛh÷:¿—-œv·Wi-´P°8ÖÚ‚ã€0b8Œcè4Úêßíq·Ÿ0'xõZb05sJðΤVxY ™{Û¤Ÿo’Í,6ñ4¹ aƒ7ÌÇîÀØÎÞ5#Õ4Ivyz½³ù›vm¾ÎíÞ^Ü|Üç΋¾bxgŸ¾±}gV×nc–($Š]>+e™°—e]ÝÙY¥1mòÉùÊÐxµ«·}2-JÿP²¿]“nìënD-&Ðvï†@iÀ}ÛrJÑ —ú燴§Ù¨ë¶vn¦Û@FwV#æaÎ×CFSÜTq]iú¥Î«¥^Æ¢8®ÿ³Äs\[­’fO_•Øç„'§L}I¿‹Å÷þ¥.™ŸöŒÁmvÓmß’/ÌÈ™ÿW'Ëלcèúÿ‚t{^³Ôu+[H“ìQÌÄ\G¥¼l±¤¤…à$mRm 3´ÆhYcâ *âÖÒkËȬ^úâX¬cšûéVRˆñäá×c¹âEÁ9š×ˆ4­I·ÔZò) à(Æûj˜dš(Ú`Ù ¢‰U‰éÈäg5káÛ.ãBMÔ-¡VV¶Wz€»!®!„’b6ÅY0Ù8pêë¼àl¹|3­ý›FµŽMÇ¡ÚCmm#_¸7^]ͤ|£åemO¾ È£@;I5ÏC¥ÃªK®Ù¦Ÿ3ìŠíµ"vç…}Ø'ånì}+.h«Ük[iÿb»–8¥¼¿@¬·¥˜2³,2ƒ†` a±N /U´ÖäñM¤I¨\<Â[¾eŠ5‘-“+7”KöE81¯úÂ3òå±äе]Ķ:§ö}ëÉ©Èê†å‘IÔäÌŽ#m£mÔc89n;‚Mï%Õ4H~ÃæêöÑÿhcì[¯±öœã_ÍóçrôÏÞµ^øzý/Qµ+;„Óœ=â›ÀâÕ‘‹'Íòd''+žÕÍÙx~þÇTµºµ½³µšYZkû¨¯™÷#ÜËpÖÞCG±ÔYD¹G$2Ž<%.•áÉì ŠfmÿÝÃsþª^ŸóÍÿºqŸ>³¢O®§¥Om«L×qéñ=­ç˜ÃÌtóB²“÷Py¬£øcÉÀñøVâö `ë:½œ÷Ú–ˆ4Á{µHw=Ã0ùU(Ä2ï1äªñZq¨ëÚ jVöv¿d–âøÉit×ü±y+f6³}¥Û¡â×'i êš%Ä·1C«ÛI%¬«Â%öLR3lT`åbß(’xëYóÍàÆ×4ëË‹Ý êóDŸ`šK¤óäòÊbÛŠ¶æo'Ö¹·ð}Íî¤é·óii¤[Áb€Îd°­Å¬ŽÒ!@#%-q³. “€2k¦ê/ɦÙEÔ:¦«c©É6e_!bx®áˆü¶Å¾i¾l'nã@6-D²ZK3àû©YBI•†Æ9PXdkb€ +ÇÅN£yµ¼Ó–—>D²ZK3àû©YBI•†Æ9PXdj=/Åú³p¶öWr4Œï$·–,J„P )o,áöØÛÍnQXzŠôÿ™Î J3ʤÝióB¿»Æpì¡s‘÷s¸s Icâ'Q¼ŽÚÞiËKŸ"Y-%Žð ýÔ¬¡$Ê‚Ãc¨,24±Eaé~.Ñõ«…ƒO’îg.ñ±3ªÄèHd‘Š¿uÈ<¯2æKi:ävÖóNZ\ùÉi,pÏ€Oî¥e &TåAa   Š+—ÿ„ÚÊ}{HÓlWÏP–HÄÒ !ÈXžA$;“lñ˜.½!…uQXö>(ÒuÈí­æœ´¹ò%’ÒX៟ÝJÊL¨,61ʂà Z“™–ÞV·Ž9'Li#”Vlp HïƒC@Q\߆ük¦xŽËM–3$SÞÛ¤ª¦) [Ênh’b¡$uùU9 ml\µñF“yýäÍ?üL%š }ö’¦d‹w˜¹FÆ[ðØ'iÆq@W>ž5Ðd¼µµK©Ì×’ˆ­GØæÅÉ Ñ6ÌI&E%*I†z (¬» r CYÔ4èVE{$ŒÉæÃ,LK4‹dýÙë0<ôÀ&¾—âýY¸[{+¹Fw[Ë%BwDK¨P·–pûFìmæ€7(¢¸¿xÓR×õ™¬•¦iq$ÿfÔÚY-v´È¬ÊР!š ¸V @¥‡mâýîþÚʹ<û·+k¾ÞT[œ#9h™”,ˆIÞ¤¯+Ï̹±kªÍ7‰u-&[hÑ-míî"™e,dYL‹†]£i t-Aã¥jQYv䆳¨iЬŠöI“͆X˜–i :Éû³‡V`yé€M}/Åú³p¶öWr4Œï$·–,J„P )o,áöØÛÍnQXvÞ.Ñï/í¬á’ì½Ó”¶•¬gX'!þIŠØV`C@ÈÍIcâ'Q¼ŽÚÞiËKŸ"Y-%Žð ýÔ¬¡$Ê‚Ãc¨,24±E‡ ø¯Oñ‘làÔ£1¼ªMÖŸ4+û¹ gÊ9w;‡9‚åcâ'Q¼ŽÚÞiËKŸ"Y-%Žð ýÔ¬¡$Ê‚Ãc¨,25±@ÍøÆšÉû-ÀŽÛR[‹‹i žX„±HêPJQT¹Tó6pûí¸æ¬CâíáÊÅ%ÛŒñIöÂ\Rß¹}›f%A`#,XF@ÍnQXqx»GšßG¸ŽK¶‹X}–,,gýáÆyù>@T° ‚ÀMIcâ'Q¼ŽÚÞiËKŸ"Y-%Žð ýÔ¬¡$Ê‚Ãc¨,24±E‡ ø¯Oñ‘làÔ£1¼ªMÖŸ4+û¹ gÊ9w;‡9‚åÍøÆšÉû-ÀŽÛR[‹‹i žX„±HêPJQT¹Tó6pûí¸æ¬CâíáÊÅ%ÛŒñIöÂ\Rß¹}›f%A`#,XF@ÍnQ\ý‡Ž<5©ý›ìz¼­††ƒ`+`ޱî(ÒuÈí­æœ´¹ò%’ÒX៟ÝJÊL¨,61ʂà @ïN!ãæõúûÿŸn¢Ol~þ^žÝ;cä«kâ+]-2[‰™„™µ–1!!‘ÙÕBHÎÆ!±ƒ€jœH8ûƒþÚ§=ÿàéÆÙcD7£÷#ŽéÓ¯···Ol-x’óDñGi’Å<ú„ޤÉhðÆNB…Vœ3–à"±íÌWºœÚ1i˜?hhZã‚¥B‚«ÔwËtÝôÚ½æ™o¨Åyug,»-'³0¿–ÑÉÆ2ᔞÕ(ôÁ9°”|®jZä:£êv±Ú¼» „FÈé ÃщC‰BÊÀ êw›þ?"ÿ®oüÖ©ÙY­Ö£q%ïîÄ¡™0EX^zmO9䟠¥µÆ~Ï.v7_U÷¦#šñ?‰5+X §ÇçÇk¯ÚmŠ®fk«¸áa$|Ác¸êʹt'#;n[ ‹˜$Óu(žÖâÚÖà¼i¶9g0„MÁÈcûñ¤ãcgªolš—÷šÌ×ñKºî[²K ¨x#€+ÅÁùw,æW à#åÂ; Y_A)Ô%’öâ·¸f„:ÏD©"€äðT©9ãiÛLÝxÂ(µ¹t{M#RÔ/"yÒßÉP$[2H£¹Œzçw5ü7âØu½cR··šKÈÄR[ã µ{H%W|à€Îì±$àa¬ÚO†SKÖ$ÕžãS½¾“Íß-É€nóÑ|.ò*#´Ç@x,[åÒ¸º†ûW‹T.í.¤¦ØË(uYYJ€Ä0•ýØç–ÝŸwàw¥¥î—u¨ZJ/ZâyƒBΪ~ØøŒ2²ç}㘔zŒ koÙ_jVÚu•ÝÅäˆ^âh•­eh\¸ià²#©1ïû¾Œ›³ì¾(x{P·Ô§¶y$K+)oÀŽHdi ŒÌ$%+òʾnœ6ÛGÂVÎtô™µ ­¬®>Ø-äådºóS9m»Õ˹8FUþ»IS^ãÂs&ˆúU¥Î¡-›¤Vkis,b(l· š%Ø10©@ÎYÇfRX Ú~¾ÖZ0‹Vi'Ô,.,ôÛébUÛ-Ì«Î>MÓ©<ÁÀ霵ñº$zµÍÎÍ6- Û¥hÖ/6[§U·Û¹ˆNc˜Î|ÅË .•ÿ†RûQk•¸Ôíá–î Û‹HL9æ„ÆQ˜²—E!YF¦I&¾á›*ÖòÚ‹È?ukeew …¦ŽÖ”*°u([Ì3’vž$ê0€Zo[[ÜOþ›©Y=µ—Ûî̱£­´”nvØû“…RXî´½Öµ môØc°»Ò¯/u8­ÑnÌ/˜Ô¥'Ëw4QJƒ¾â:˜C§x7HÓl/,"±¹kKË!c<%£Edß3± í,×d.à(P1RE£ê+¬i“]Þ^jV¶~|ÀÝù "ÎÊ‘ÆG”¨ „kÏy\  ·Ä 6+Xîç±Ô£·¸Hå³q ÈnáybŒI#3àâ;X+ü) bEop±6‘©2-Ž¥Ô«äíµžcØß÷™$yÑ’P:üÜƒŠ±x2Î5¶äÔå†ËÊ[ÝáÒ(åŠQe&.Y°œ0$“_Yðæ©}âå²2Ûi“]Û__/Ú#>lкû³nV—+*Œí8!ÀcâN_-ªÚIy§ÞÜ^¬"1Éj–ÏonÌÛ™AO4ÎÜob0:¨’ÃÇ\éÚuÊé÷×PÏö8®/!Ž(ã†kEdiKŽ&Œ»À ㉴¯Íka£IpnaÕ­Úê{VŒ¬ï3¬·*C‚6I*†à)JŒŠÇ_Ú\i¶SÜÁ¢ÀöS]y—3M%±Œ)1ùY$¬.VTØpC€z“„‘ý›÷Ú›yrÝ|Ó©ó<Ï3÷oÏ1¯™ò¯m‰ýÚ±g–p4[o'Ý,’ïžEfÝŸh9û«»jŽÊí@Ôÿò0ßÿ¸Ÿú”RLsâ âA¢p{|òQY²ŠÚ/ü~hŸõíýb«6 ÕlüAºúݤšƒÜH×’ )ψǔ¨g)4ÀÜ|¸óœ6úÚ/ü~hŸõíýb®—Gñ_‡üA+ŤkV7³&òÑC:³€­´¶Üçnq†ÆA‚ ´&W´Ñµˆ<[u¬KªXÉks[µ²X:¸Ž6•£Äžq³1ÉÛƒŽÖ~‰àË;XƒR¼ºÒžê=Í5Ο¤‹93¸‘ƒ©,\¨Qóª7pv4_Økj#¾Í}ûÒöÉž‚9ZbªÍòïB7G½X²Ö¬5-FöÊÊê ‰,¶‰Ì3Æþ[’À£*±ea°çpx$ƒ†#Kðµå‹hö÷œéº.>Áv†9¾Xšód20‘Û;Q2Ø<´õ—‰tPépkzlº€vCh—HÒ†\îÎFF8Á­Jâü9à|9g%¼0Z!Ž9SF zWaPZàI‚ä}æØ7|Ü ñ%Ÿ„õ‹oì¯3Z±“ì:­Î¤ûtç_3Îó7 ýñÛ>\ƒ”îè-õÝîòK;mVÆk¨¥ò$†;„gI0ÇaPrç~Fô4Zëº=ö£>gªØÜ_A»Î¶†áHö­¹AÈÁ ô4OLÑo´Ë×Xõ8ÿ²ÍÄ÷+l-±)y]ƒÊX‚¤b¢ž8mØþð >¿³’Þ˜-Ç©£½+°¨-p$Ár>ól¾nxé,uÝS–8¬5[¹$ˆÎ‰ÂHZ0Å €*ÏLŒu¢Ç]Ñõ9cŠÃU±»’HŒè\$…£ P¸ò¡\ôÈÇZÏðÖ¬h«,º¥Ý«Ë=ÀXlK+Jß1™ÆÐ]€ÏNxç/އ×ör[Ááó¢ã•4`—¥v®˜.GÞmƒwÍÀÏ%®»£ßj3éÖz­Åô¼ëhnäiÚÛ”ŒÏCUôøÄ¼ZFµc{2o-3«8 ÛKmÎvçl`äH {_j–­ DšìaÐ¥_²ÁödˆDðâVó>i6?¡TÄ£dì(¬}ĶÚˆão³_~ô½„òGç ŽV…˜ª³|»ÐÀ‘ï@ݗæ±ÖôÍNÝ5gÓî ‚eÒ”\]£#Æÿh›~é%!³¼m²Y /q8™­å[y#Žr„Fò!uVǨ ‘žÙõN×]Ñïµôë=VÆâú Þu´7òG´ímÊF ç¡¢Ç]Ñõ9cŠÃU±»’HŒè\$…£ P¸ò¡\ôÈÇZÃÑ<#}¦C¡Z^k1ÞÙè¨¦Ô ?*Râ‡çpåJ‘ð¡Aû™f –?á¾T±žßY,ìµ9µížÏqs7›æ‡}à“™ŸaBƒó ܱ×t}NXâ°Õlnä’#:$ !hÃ.<¨`W=21Ö‹]wG¾ÔgÓ¬õ[‹è7yÖÐÜ#ÉÓµ·(9$ž†€8ý'D×¢Ö´; cž=@•…³Ë(&‰`’,Ë4ŽòaЃ²%ÆòFv¨ô ϱ×t}NXâ°Õlnä’#:$ !hÃ.<¨`W=21Ö´(Ÿ´Ñµˆ<[u¬KªXÉks[µ²X:¸Ž6•£Äžq³1ÉÛƒŽÖ}Ÿ„õ‹oì¯3Z±“ì:­Î¤ûtç_3Îó7 ýñÛ>\ƒ”îì( ¹=Ã:Ö‘z’K¬é²@×Or ÒŒRÎ$y¤™WÂ,“3xÆylõ”P?¡èz¦•Õà“I°‰a·†;=“:*ìA,…Ø6 Ú‰–ð2¤´Ñµˆ<[u¬KªXÉks[µ²X:¸Ž6•£Äžq³1ÉÛƒŽ×AEsöš6±‹nµ‰uK-nbKv¶KWÆÒ´x“Î#vf9;pqÀZÇ𶉬Í,w:Ìa·³Õo/­,Ú$ó³3M‚ò¤Î¬».å ¤02ÝÅÇèž ¸Óµˆ5+Ë­)î£ÜÓ\éúH³žñÙHc;‰:’ÅÊ…:£q·?x_ÙÉo‡ÌˆcŽTÑ‚^•ØT¸`¹y¶ ß7Sº—æ±ÖôÍNÝ5gÓî ‚eÒ”\]£#Æÿh›~é%!³¼m²Y /yEsúW†?³|C{©Ï6ÝüϱZù[~Éç8’ãçÎ_Ì‘Uù.0¸—áÏÃáËû9-àðù‚Ñ qÊš0KÒ» ‚×L#ï6Á»æàgŽÒŠ+LÑo´Ë×Xõ8ÿ²ÍÄ÷+l-±)y]ƒÊX‚¤b¢ž8mÛ”Pgá=bÛû+ÌÖ¬dû«s©>Ý9×Ìó¼ÍÈ?|vãÏ—Ÿàãå;«èžÿ„zxNO'Ùbh­î‡þ–>BªÏ0˜nnFòw|ÃåÏÅÃØx òÒÚÊÞ]f c·´Ó­›e‘Bÿb¹3FÀù‡”•#ž~aò×qEÏèz©£Åe`ux$Òl"XmáŽÏdΊ»K!v ‚v¢e€< ©Ã²øtÖ:Þ™©Ã{¦¬ú}ÁLºR‹‹´dxßíoÝ$¤6w£vK#dï( _MÑõ-M6÷z¥Ú=ÅåÃlÚºbòàfFà3H=Á^›Ih+£ÔÔøþ€ÕÎTH¤a¿üpÿØ2Oý•¯âéõ+h·|·l,¬¯/e²˜‹µG¶VCûïåÉ!Œ~óg8Íd?üpÿØ2Oý•ÜÏ-´:¥š\]éé¨L’%ªÈ€Jëò´2Ù#åRÀzz hLÅð:jPŸ[ê·²]]Ç©‚äÊΑ³ÛA+¤[¹‘ÂŽÃç&ºfÿÈ¿ë›ÿ5ªvÛ\½ãé÷z|®. ]µº"eUR ÷Â…<€ô©Ùn>×ïbÎÆÁòϪÿµLGã ¯ÄNÖw?eº°‹MŽÚP éz‚,›À ²âÙÐW!œr1qüE¯[Üj+0Ó^ NÃNÞ‘:´Í9µóib;ã–ÎW8Ø|Í)!Ó´ûûë;ÛËbú㛉 º‹1ÈAlTdã1.ÒIbçè4#Ñí¡²šÊ+M=-&M’À¶€#®Ás‚6*®`ALvM^¾ñÖƒ§M¦Ú¤9ó®-rU"³p0²§%®ŸŸE^:“Ÿà¯ͪëWs}ž;85Kˆo3)/½›Nµo"207€w’ØÊ©Ú­ó˜úí?ÃöF?³tý2˱ök%¶îû¤uØ™õÚ¾‚³î4=#\ÑuŸGœv§—qÁfË&2„gʆ"§T‡¬êVZO‡f)®›ª$W“ݽ«\,—W“ᡤ»«¯Ì œž¾¹â-KVðß…E¤3êÖöZƒ¹‰™c˜^XmÂî¦flŒäà|»+{M;V½Mj(4ùï-Þ[T¼k?ÞÆQÞ7EbwxビÔ§¨x{Ökqw{¤h£íÒÇ Ä¦+ÞYP(|d¶d(yï‚zf€(Á¯ë×zÜžŠm6=BÝæ2ß5£´R,iløX|ÐTŸµ¨É‘¿Õ“› ÏèúÖ«¹&¦Ii Ýjw ç]G$Ê®µY# Ïú:ŒŒNwa@î¤ðÆ•6——.“¤>Ÿ ïŠÑ¬ÄÏ*™À?3rsëYrh~ñD¨<½2ãìwo,Ð}q#«\D|ÔnY|Ǹ`{¸fó ±x¯X{‹q–kkïE£Î— töþZªÈ Ûpè<À¥²£~}ŸŽ¼E/‡¯õ‹­* x_DŸV°ùkˆ¬©…ÞUî_lXÀÈÀ^ÉM€Hòr8dÃãmOÈÕ/¬o¬t­)¯îZÍi$²+Ý!„G!c lU¾S¼ÔÕ£Ô˜hZn­wiro5ˆËKilÐmXc{”4Ï™n œò¬@üÕ½m§%žß²ÅgØ’å[mÄi‰Áû«¹°: œu¬q¡éºµÔ­ã³Ócu¢Åif#ÞæX©üE£‰sØž9/ã]z-;I¼X4Ùß[·‚îηW¸µŒÇ#îmçmÐù® gcgBï_× ¸™’m7ȰÔìtÛ¤kG-pÓ}ò#y¸Œbã…!ñ³–9ãzØ[Ës,:~™—R¬÷–J ²+oWbÌÁ¾`O óÖ³õ_Úë>!²Öod‰æ³òÌiöH¾ò9t>a_4aˆ8W q‚,‘&¥qã8n-/c€_\j²ÞC$lñȶ÷Ö«µC®×òâqÝ‚ÏÆ=ÅšÝ߇´íB±ŠÖt»;ˆ&ŠY¤”Ü%³3¬¦\®Îàä”Éc»Ž‹L±ÒÖËË5äš•1ÝÀHÞ£+ É`²Æw¨à¸Н7ƒtgQÒ5˜ä³{{8¡6ioi—µøŠHÌ p¤ `‚À€tËfþ^۸͕à¾Dݹ« ‘ÔmoCRC<7(^ c•²F +aÇpÀ‚;EU]9ËÛšùR¼ñâÛ$}ÛœsÃï“ÔîoSRCjöÈR³D…ÙʤAfbÌxn¥‰$÷$šå§ÿ‘†ÿýÄÿÐ䢒lÿÂA}¸‚v&Hþ9(¬ÙEmþ?4Oúöþ±Vî§ë]Ô–x±:a»¹ºûG˜í4žt¯.Ï/hTÚÒcvöÈOº7|¸Z/ü~hŸõíýb®–ßÄúmι&¾ût\º¾Ÿpˆ£æŒ…m%ÎV„ÎoMðÖ½fú[µ†Å®Ýê—ã’ë2Ê£¹Vr9Ç(ÏÍòlYÙëÑøÖûRžÏM]>æÞ+PÉzí*¬M;+ì0–ó@+»åÁ嫤¢˜ŽAð¾­m©é×¶¶6ki—uµÔî.¡bcdÙ ¨KuËd9U]ƒåf®âŠ(“ÐtJÀh¶Wº~Œðh¶ÿg¶Ô7´·¢1ULj!,-‡~Þs¸aÛøSUѯôKû‰ì"´Ò.œój·\èÑ<&D…‡“nFðDJçhtæï5MJßGÓ'¿»,!…rÛFI$à=I ~5Âi÷2ø«Z¶}y'ò~Ý,VÚZF¦5òâ ÒÈÙË"±ò›#‰[aÆJ×E**Qö•¢¾÷ä¿«#ª†J>Ö«å‚ûÛì—Áué|­}Ré!:F‰o=Í®³yªIqo!ò&i’P »¤d²‹€#$D1Áùt ð?‰"¹„5åŠÚ˩Ϩ\‹Y Æòç2Fâ"ÌØ‘× GÊwsòúDqÇ IH©(UE @aN«úÌa¥%æõŽŸrFzP‚›÷ŸÞô_$7Ó~Ü›Ë8ua¶6jH·²9–5FUbò×É\²¾¾ÝFA-VìþA¢ÐÝiÖ2Ø,²H.~Õ7œèÅŠEåŒ*mÜ«¿snò ¾WªÓ¼A¦ê· ¤îϳÌBð¼k2d ñ3(§+ó!aó/?0Ë,¼K¥êimo,å¥Ï“$–²ÇøýÔ¬¡$Ê‚Ãi9PXdi¼V/ùä­æÑ?Ú8¾•d½_‚(¿ð¿ý?òb_þ*¹(>kñ}™ {[:„·‹mJVHP¡DhÁ„”+m$‘¹SþNòÏÄšuþ ÖVÂöIY!2}‚qxË+4¦Î °ûÝF5­IâñQÒS=0YŽ+­Fý]ÿ;žcgàïèzøUÔã±»’H-£ÔeET1ÉŸ*5 ùÚ‹•û í¨<'pfÖà³Ô-¬ty­µ‹½P£ÈÂ{©'ª+)@;ngs1ò€Ûƒ‘굟¬h–í›[_@®6’7ÆN9SØð>¸ç"…Z•M*ÆÞqÓðÙü¬RÄP«¥x[Î:?»gò·©ÅøCN½¿¸K–ÓcÓìí5Ûý@K,rÅqtÒÑ7Äñ&—:û›„ €rdž|w¢]i1\ÚG<blŠíµë¹DM‘m]|¤$1CaC ÀÍû;Ëÿ êÑiZ¬Ó^i×r첿|³«“ÄRçÐÿL…ëk*Ô]6µº{>ÿ×Ta^ƒ¤Ö·OT×_ëªèpzo†µë7Òݬ4hž-vïT¼h¯—Y–UýÈÜ곑Î8‰F~o“¬´þØþØÔ~ÛöìÏÝ}ƒÉßç}ßÞy¹ù~ö6ííÖ´(¬LŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  zúÿÿйÊèõõþÿ 5s•)oÿ#Ü?ö “ÿF¥mø«F¼Õfít8ôe=ÅGÖŸª\êºUìj#ŠïûÙÿ ü"Þlÿeò¾Ûö½Û-öoÙþ“·Û>ÿË÷{yu'Û¬u¨ Ô¿·-ô™õYsŸÚQ¤Ý6­'È!ùÎ@·c·ªì'ŒW£I®xz.R]vÍ4ùŸdWm¨·<+îÁ?+pcéYpø“@^ãXšÛOûܱÅ-åúe¸€,Á•™aô3[ € [í¯íMÏþÕ»O4ˆ,ÛívþU¿Úd)<³¯É#{¡Ÿç;y!Ø«åÚ7‰m|?«=î©©i\im"5­Ä*šŒ¥#ˆ$²ÊÉŸ1Ø·U‹Ä¨×£Kªhý‡ÍÕí£þÐÇØ·_cí9Æ<¿›çÎå韼=j6½ðõú^£jVw §8{Å7Å«#O›ä*ÈNN0W=¨½–÷K¸»Òm­õ(ĺƞÚzÚ[JÐEf¦ÕdPè¥"AåÏ”%xÉÆg/Mæ‡5Ä÷—Ö÷–š&™c5ÃZMs<7÷·1ùhD»ß{!¡Ýº?—¶Òõ[íÖö쵌in›u´Ò* ä‚2 €NáÇ"©ÛjÚ`¼‰â‰`·»ÓÛU¼ºûXÄ Õ ¬ŒTîMø}Ä`29Û _O¥sk«cqˆM³šúIãk¦{°®Ï8 Í´ÄvI¡Ð:ån„?`º¾Ð4ý7ûUáþЖöâWí[Ú8¡#wúOÌUf’Ø€8݆*ÄtVš¦‰äýW¶¹óÿÕy7ÛüÏ¿÷pÜÿª—§üóîœgϬè“Ák©éSÛjÓ5Üz|Okyæ0ó<Ь¤ýÔk(þòp@"‘ø†k;­fñΖ«­ÊÂc²èÝ[nh|ÐcØíDù@Å·]µs\3iÚ°ŽyõÈæMWM‡Mxæºh ¡’ÝJêLlÅŒàù¤¹Èê We©¢\Ks:½´’Zʰ\"_dÅ#6ÅF¾V-ò€y'޵Ÿ<Þ msN¼¸½Ò¯4Iö ¤ºO>Hß!|¦-¸«n`6ðr}hÒ¬EÖ© ë÷ß=­Ôº„ÑÜÚ´Û¤3ÜÄö†_+æǫ̀ýàØªŠ­ŒYvÓê–Ú^Œúܾ ‹V7:[¶ë¥ˆÂßeY„Ûu¼Ènüç tÙ]u§ˆôK=a4 a•í4÷ûNÈgò–)#æ1Œ"瘜pF*Oµx:}SIÔ/&ÒáÖ®mãk#quºÙ&Bª0rH%˜|„‚IÁ9  ¨õ_3ìßèËçÝËkóC/Ëó?xüñy+wÞŸÞ«w_l¥û<ðm–H¶N›XìvMÀu¶îSÝH=éßfûÒÿßÖÿ>Í÷¥ÿ¿­þ4ÉOÿ# ÿû‰ÿ¡ÉE$Ãoˆ/€Î äçøä¢³e´_øüÑ?ëÛúÅZ¶/©Â}¨ÜË¡_Ecqiª]¼¶å3 Ü1b¥ö°•1òçÔ-eh¿ñù¢×·õŠ»Ú´&yŸ†¼',^'Óõi<;warÄDáWîÅkÑkÍïâ¸ñF»¬Ú®}i0‹E3A3ˆ¤DKé¤vYðp€°dsÏ >Ýâ_ +ÜÞI=æ™oýÕÄw*®b¶‚P!Xå^|Æ…·þô¹s L³ ç7'v3Ð(¢Š(ë:dZÎu§Ìp³¦ÐÜü­Õ[Œà€qß[ÂÚœºÇ†lo§šD*ç™”•-ÀÉÇlÖ•ÍÄV–³\ÎÛ!… ŽØ' IÀö¬?[ËmàÍ69—kiÈ?+;2ž=AºV¸g~’Vù§É~duÁÊý$­óNÿ”oò:(¢¹Ž0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š('Ä^Üié…ÚÚÎdÿXmüï—kdÜ9#¿ÿ¬rßðø“þƒëøi'ÿ‹úþžøìõõþÿ 5yF¡âÿÚxº= }£ÏËÁv/ŠÄÑ2ì|³·nFG$ÎW2Ƹ4©ì|Iº†°—W¦ÍÕ fåïL¶w21Û9ö tZæm®jÐK-äQÚ®ŸujÏ M’IÇ$gC `ÝC#Ûšùáÿ°dŸú5+£ñ'‰/4Oèð$p6™,SϨHêL‘F aÔä(UiÃ9n+܈kC±¶Ñîu.[8ín®Ò[h¡`q­´1Ç`ÄpÇÐiµÕ¿Úão>,`NñêµàýsR×!ÕSµŽÕà½Ù"6GH^¦ŒJœJPS¼ßñùýsæ´Äq÷Ö/¬êÚíÌrÅ‘K§Ål³6ãì²  Û»+4¦"@m¾Y?1ù@úϵvï¦E©_êWë²mÀýmÈ…¤ÚÝðÈm8»nIZ›Äþ$Ôt­`.ŸŸ¬V¿i¶*¹™®®ã†=„‘óŽã«*åМŒí¸ã‰ã»šÆâÚïR»{Ù ‚X¢FÇÚ/‚åÞERv˜èå‹|  ²ðýýŽ©kuk{gk4²´×÷Q_3îG¹–á­¼†c¨2²‰rŽ2HexJ]+ÓØÌÚxÐâ¸MJâéÌs¼Q<â'; UP$1®àvãz…ËvVÞ3²¾Ô­´ë+;»‹É½Ä*Ñ+Z*ÊйpÒ ÁdGRcß÷}7gÙ|Pðö¡o©OlòH–VRßÈÓA˜*HJWå”#|Ý8m  Ôô›ùu´³—L’ÆûU³Ô¦šk¶ŽH|“o¹0|‹pA,¼¾1ÆN^“ Iýyaw´ÓÙÙišdqµì–±ÎÖª&óÒt]êÌ@Âõ‡¯$/M§ëíe£µf’}BÂâÏM¾–%]²Üʰ|éÓäÝ:“À<™Ë_¢Ag«\ÜìÓbÑ ½ºVbóeºu[}»˜„æ9ÜáWÌ\±²€C…n/`Ö³«ÙÏ}©hƒL»Q¤‡sÜ3•P2,C .óJ¯ ÷ú޽ ¦¥ogköIn/Œ–—MqË’±–hÓk7Ú]º!=rvÚo[[ÜOþ›©Y=µ—Ûî̱£­´”nvØû“…RXî´½Öµ môØc°»Ò¯/u8­ÑnÌ/˜Ô¥'Ëw4QJƒ¾â:˜s/àû›Ý;IÓoæÒÓH·‚ÅœÈ/a[‹Y¤B€FJZãf\& 2d×MÔ^!“M²Š+¨uMVÇS’lʾBÄð]Â3ùm‹|Ò#|Ø NÝÛMñMŠÖ;¹ìu(íî9lÜB²¸^X£FˆÌøxŽÖ ä? H XŸÆ[Ü,M¤jL‹qoiu*ù;mg˜Ç¶7ýæItd”¿7àà'@²¹Ž- ZCl“È—r]YÝJbku¼.´–xÊìÚBîä’˜Åsöúv¡ Ûéž-¯MÅÆ—wqqL³‹dòŒDbÔ·Í"1Ý€¤íÝÓXø£S—ÅKj¶’^i÷·«ŒF²Z¥³ÛÛ³6æPSÍ3·؆Lª$°ñä:vrº}õÔ3ýŽ+‹ÈcŠ8ášàDQYR㉣'nðcq àj;»ÿôo6ãLÿ¹~ѵÛþ=ÿyålÿ¦Ÿêwg¿ŽÕbÎíü†ûuÅŸæÉ·È—ËÞÞ^sü[6îí»8ãzŠâæ!¼A|ÊA‚;üòQK?üŒ7ÿî'þ‡%›(§¤:¥ÎŒìp«k’}³w?iû²ÿߦÿ à¬?æÿ^Mÿ´ë#⧉õ? h—7z]“Ë4“4fë’×'†aÜ“ÀãnzöViˆôËÍ^ÆÂ4’îV…$‘bBñ7Ììp qêjÇÚcþì¿÷é¿Â¼ëÄÿê4Ïû Ûèbº+¿øüŸþº7ó§Ì:?´ÇýÙïÓ…iû²ÿߦÿ 娥Ì;ž!²þ×ÓvîðÞA*ÜZÊй *œ‚F9G õÎ*¶‰âØ/¤~£Ùë)•–Ô£|Ä î^¹sޏÏQÉ©Tµ-.ßS‰mèñ°xåŒít>Çüþ‚º©Vƒ²ª´èú¯ó^_wŸ]”Ü=mº5ºÿ5Ý|×[ößiû²ÿߦÿ >Ó÷eÿ¿MþæÁµý%J´i«[ª’7—(Àzç¿L“ëÚ¬Aâm:IŒ´–sƒ.é6ÆrOAøšrÂÕ·5?yyk÷­×ÍY}[sR÷×xë÷­×̓ö˜ÿ»/ýúoð£í1ÿv_ûôßá\…½å­Þï³\Ã6ÜnòÜ63늚¹¥x»5c’Pqv’³%ðÝ­®“â KO29‰ÍÛrî´ì"Pp?s$².p±É$š³ãcæøVïM\™u\iÑ…aç|Œê£–Ø…ä*?†6ä ‘‡}¤ÚêÜJ÷qO :$–·rÛ°V*X) ”Sƒè+5¡Ð­.㹟U¹šk7gDºÕçŸË}¬„ˆÞF¶³™äÕB2ž‘W)NnÐWô='í1ÿv_ûôßáM’úbye.‘¢–ghØ©' ó¿øI>Ôû4­>æ÷æÛæc˦OÌzœ?–Xº>¡ªáõ«½°œ±Û©ü' {òûéXW k¾UøýÛýö;Ã\D¹oµÿ€ï÷ÙWÚñïöeŠ–Ð¡‘Mí×–ÄNT†ò“úe¸ü±»¯ûLÝ—þý7øW' 1[Ä"†4Ž5舠ø }cZº£h­¿Vüßüõc;B ÑŽß«~oü—C©ûLÝ—þý7øQö˜ÿ»/ýúoð®ZŠÃ˜ç±Ôý¦?îËÿ~›ü(ûLÝ—þý7øW-EÁc©ûLÝ—þý7øQö˜ÿ»/ýúoð®ZŠ9‚ÇSö˜ÿ»/ýúoð¨­b·ébÓíºxša#° r:e‡ëèqÎÖe©ÇĹÇüJ¤ïÿMSßüûu 1Xï>Õ÷ñõžÿ‘ô4}ªïãêÿ=ÿ#èk;§¶? /On±ò=±øcùz{tí‘Ü,hýªïãêÿ=ÿ#èhûT?ßÇÔþ{þGÐÖwOl~þ^žÝ;cä:{cðÇòôöéÛ!p±£ö¨¿¨#ü÷ü¡£íPÿPGùïùCYÝ=±øcùz{tíéíÃËÓÛ§l|…ÂÆÚ¡þþ> óßò>†µCýü}Aç¿ä} gtöÇáåéíÓ¶>C§¶? /On±ò ?j‡ûøú‚?ÏÈú>Õ÷ñõžÿ‘ô5ÓÛ†?—§·NØùžØü1ü½=ºvÇÈ\,hýªïãêÿ=ÿ#èhûT?ßÇÔþ{þGÐÖwOl~þ^žÝ;cä:{cðÇòôöéÛ!p±£ö¨¿¨#ü÷ü¡£íPÿPGùïùCYÝ=±øcùz{tíéíÃËÓÛ§l|…ÂÆÚ¡þþ> óßò>†µCýü}Aç¿ä} gtöÇáåéíÓ¶>C§¶? /On±ò ?j‡ûøú‚?ÏÈú>Õ÷ñõžÿ‘ô5ÓÛ†?—§·NØùžØü1ü½=ºvÇÈ\,h¸AsxÀBOòúþGÐÒý¦?îËÿ~›ü+.AÇNŠýº|íííÓÛ ç7Þ'Ôì¾(Yø~'»°º°YŸË5»opd$ãåÀPA>˜ç†W ä´Xí-m¥¼¿uiÙHŒùx*\—Àäý ¿ö¾µÿBÌÿøÿCÿÈ÷ýƒ$ÿÑ©[”›ÏØ®¥wâu¿»Ó$³‰,Þžd|±u#î“ØÊ»;«{-FþÛ‹+©‚ÚOhbh•¢’)ŒeÃ×ýRL{fVG޵ËÏørëS±ÓÞöxaB}ØÆÑ—qœ•^§ýX ÓýªÃ@][T/"Šæawpò Ú„E\c¶#^99'Ô ¿öÝóG*ÚÜ”GõÎþUæ7·sßü(ŠòéüË‹6e|¹™T“Àäö®Öçýjÿ×4ÿÐE;ŠÃ$Òþßy¬ÍÖë¹mþÉ,)‡‚8¼\·rÎeqÀî²>Q'ö=³Y_A/ö¬²^ÜCv÷ ˆg‰"T‘@P¹|*NxÚvÔRæ‡é:^±&¬ók7·Òy»å¹Ž!»ÌXñ(à[FvÎsÆxðªiZðx}µ+}Z8€²½•T˜ÝmâU¾R l Œ²•<À¨Vís‡Íáû ¿² 0êCMÒ¼“k§ùQ´jñ«}ì¦PÃŽŽ2 °9òx2ÕÖÞ1}â†Î%†Â5Ž Y¢Ë ª˜òØ6ñÞàäœÕÚ(æ <=n.¡¼×"Õ »K©,P™e±«+)ŒÄ!„|¨îÇ<¶ìû¿ªZ^éw­¤¢õ®'˜$lê§íˆÃ#.wÞ0ùùG¨ÉÑ¢Ž`±^ßHÒ/¤·ˆ\ê0iW¾t–Ï;Zô9˜Ê[`pûäɲ¯;và•)qáÝš#éV—š„Ön‘Y¥¥Äˆ"ŠËz bM€3 ”VrÎ20ÊX“ƒÇ:ïuY;uýÜ~Þþý}ðÝ/_|þ9þ~¾ý{ççw•¡Úßj-r·z¼2ÝÁ{qi’c¸šFbÊÎ8Š!…eÆ[&¾¡¶•kym Ý亵²²»‡Êi£µ‚% ¬J24Ç;ND£Ÿºï_|þ9þ~¾ý{çç:ûçñÏóõ÷ëß?9p1´ï èZm…å„V—/iyd,g‡(ªé¾gbmÚY®…ÀP¡FIÚëd×W÷š•­ŸŸ07BNÊ‘ÆWÊDB4ãžò¯_—½}óøçùúûõëïŸÇ?Ï×߯|üåÀ‹ÂÚj-´o>§46^RØÆÍ-bŽX¥!U”˜!¹vÂŒ0,I¯¬è××Þ!Ž[%¶Ó&»¶¾½Q4mçM ¡»19Xa\¬¨:§£ô½}óøçùúûõëïŸÇ?Ï×߯|üåÀÆÒ´²ØhÒO%ÌZµ¢;\ÏjQ–áæu–ápà’J|¡HùB•ü)qkq¦Øi3\âÀöS\ïž7iä¶1…&?(’Y`…r² èvØõ÷ÏãŸçëï×¾~s¯¾ÿ?_~½óó—(£UÅfÕå]Ísá„›üÏݱz5ó>Uí±9ùjkk”Ó­% BDK;KsÉPÎÎF{*îÀ•@í\ߌ/'±ð¾¥{k&ˈ,.%‰ð »È<äG|þ5‡ ë—ž"ðööžöSÍlä¡û² §ƒ9 ÝFyúŒ1.ÂÆäWpßêsÞ[±h. ŠXØŒeY¤ ãèh¬ï È:ËþÁ–¿É¨©c&´b‘iα´Œ¶ B.2ßêø gêECwªj·¢tŸÂ’I ûƒÄ÷P²²·PA<ŒVN½ÿ ­þ¸ì©X5I çM©Í­jKh‡ÃóÄ!»Šv?i…² ÜVŒºÖµ,Ï'ü#ì[l‡ŒÿÀ«ˆ¢‚çiý¯­г?þÃÿÅQý¯­г?þÃÿÅWE.P¹Úkë_ô,ÏÿpÿñTkë_ô,ÏÿpÿñUÅÑG(\í?µõ¯úgÿÀ¸øªŠ{íNé\xMæ@rK˜gד\…ÕÓº“‹º7ç±k‡þ p@Çîï"Aù+Qeú'ÿÁ‚ñu‹Et,^%+*’ûßù+ŠŠ²«/ü ›_ÙCþ„Éÿð`Ÿü]Z†aˆFž GBóÀçó$“\Ý¥ŠÄIZUù¿ó±Ø™«J¤ŸÍ§ö¾µÿBÌÿøÿGö¾µÿBÌÿøÿ\]ÏÊs\í?µõ¯úgÿÀ¸øª?µõ¯úgÿÀ¸øªâ裔.vŸÚú×ý 3ÿà\?üUÚú×ý 3ÿà\?üUqtQÊ;Oí}kþ…™ÿð.þ*í}kþ…™ÿð.þ*¸º(å §ö¾µÿBÌÿøÿGö¾µÿBÌÿøÿ\]r…ÎÓû_Zÿ¡fü ‡ÿЧhí¨MⱨÞé²YB–/ZT|±ta÷[=åÔuMì=‹íPãéèÿ[ÐzvéÆÃíPãéèÿ[ÐzvéÆÏ¢‹ÏbûT#øúzÿÖôºq°ûT#øúzÿÖôºq³Çh¢ÁsؾÕþ>ž€ÿõ½§nœl>Õþ>ž€ÿõ½§nœlñÚ(°\ö/µB?§ ?ýoAéÛ§µB?§ ?ýoAéÛ§ž€ÿõ½§nœl>Õþ>ž€ÿõ½§nœlñÚ(°\ö/µB?§ ?ýoAéÛ§µB?§ ?ýoAéÛ§µÇQJÁs°±]JïÄëw¦IgY¼?<ÈùbêGÝ'°?•tåôQÊ=B±çÖµ‰%%<5q´ ›¸A 3÷½«‡¢ŽP¹ÑjŸÚ÷¾ŸJ¶ðËÛFЈ£ qTàqŠÖŸZÖ$””ðÕÆÐ‚ná€ÏÞö®Šv §ö¾µÿBÌÿøÿGö¾µÿBÌÿøÿ\]¹Bçiý¯­г?þÃÿÅQý¯­г?þÃÿÅWE¡s´þ×Ö¿èYŸÿáÿâ¨þ×Ö¿èYŸÿáÿâ«‹¢ŽP¹Úkë_ô,ÏÿpÿñTkë_ô,ÏÿpÿñUÅÑG(\ô/ ¬ö¶ú”—öæÖK«æcfW!J ä®GP߯› ûT'øúúƒÿ×õ>½úó¿Çh§`¹ì_j„ÿ_Púþ§×¿^wŸj„ÿ_Púþ§×¿^wøíX.{Ú¡?Ç×Ôþ¿©õï×çÚ¡?Ç×Ôþ¿©õï×þ;E žÅö¨Oñõõÿ¯ê}{õçyö¨Oñõõÿ¯ê}{õçŽÑE‚ç±}ªü}}AÿëúŸ^ýyÞ}ªü}}AÿëúŸ^ýyßã´Q`¹ÝêÚž¡s$Ö£ÃRÝÚÑ$ðí™I9ʳzÝjΣ­\ZÍü#s¯˜Œ›¾Õ ÆF?½\…¬; Þ[H-í§]’ŧÛFëpÀ8##ÞŠÎðü¾ÿÀ?öj*^ãGÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/import-folder.png000066400000000000000000000243001203611042400317350ustar00rootroot00000000000000‰PNG  IHDR˜ÑØ8¦ pHYsÄÄ•+tIMEÕ  74ã-4ŠtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝ}´uçñﯟîcnró<˜ûVw÷ bxHW#£(;ÍâU‚Âp@Ü£»'„=gpŽÌ(A³,ž=3;£Ž:*ì `dgegà&7!!OÜÛU¿ý£º+•U}ûé×÷ý:99ÝÕ¿úÕ¯ûvúW¿ªþ•ÒZ‹Çµ×Þ*ÐÙ¾ñÛ¼w•dN„®Y°`hÉ’¥mhÌæÈ‘Ã'OžØà xâ¬d×^{ë[ßòæwoü·çœóI&“ml(±,KDžzê7?ßóëyâ_,SZk'Å6]|«f¦³…Bq:kÍÌdÛÝ`ÉÉ*IDAT8Mß@_2“I÷ô=÷üK»ú˜“e)]í¤ØË¿=|øH®P(œ81Ý¡L&³tIﺵ«DÎ=qò˜ˆ¨mÛ¶oºè¢ó/xËáÃ'_yåèôëÓÙl±ÝMÐýžñÐØwï»Öþm}óÚ±Á厗.]ð³GžØýÐC)Y¹jñáÃ'ýæ•£Géˆh…#ӇǾ{ÿn»L¬(­^" Eìò‘G%R}#¡ä¸¤QS¿ûË{îŸúOÛ– ,Íç "zåªÅ"’r*žžÎf‹½½™v<#óβ»ïÙòïœ9ž“9hå QVIîý­ˆlùƒwþðŒÝºIDATÞ“¹yG6[œž.÷½R"’éÉ?šãH%€V²frº Ó½½é‡zuOº”­TÚÒU723…ô‰œ]ÒÅ\N•òR9³âø±âÐp¯¸=²|)ŸH«6>%óM>oëRI[3I˺â¶?‘ÿõ…Ïè¤*•l[)÷ÆU·ED¾sýµV._(ÚʲEÄÉ«|)/â ²dR×nf¡J/¶Òº`ÌËÿ{öµ#«X°zúôвԊ•}ýé–=aÝÇ*”$¡‹UÌ–<ø¢ˆ\ºæŒo_½µT)PùØ}÷;½úùÿ,¶ek-¶%5‘• ÚÆ ;³rñ"ɤþnúé—N¼’×…‚•/mÓ%<IDATŸ(>ÿ›ü⥩³ß¸dåÊAï*ÉdâÊ+/‘ÿýW6ö Çuå¼´jIH“~üãï>ýô¿ÞrËŽˆËÛÈçÛÀÎHÓh-J)­µ¥´ˆ*¿“­¢-‘’XÉrv=xðÅKל±ó#vîNüõß8)&"…R>i‰•)Ú"’H$D‰mÙJ‰8AæÜJ$”ˆrŽôæõâžžô`O¾··x¬Ø;Ί…B!—/äò…l6ÿü³Ç_={áEc öŠ¥E+I&Î&õ÷ž(4ýŽ_ÿú—ÿú±k¶ÝTàÁ>â½Ô¤û¿}øµ9hyñyk¾#šGiÑ•˜qFŠˆ”—6HIDATŠE¥S’Rb%^üÌg|å«âfÙ¯˜øÞwÜ{ñ37Šˆ¥´•׺T‘T2©•­J‰d ¥ •L%Uyzø¸¶íÒ«¯å^OY¹\1;“Ï ù|!›+ds¹l6?“Ë?õÔñå+úß½q¼ÜR¥S©Sý»t*Ñì—çO¿ø_Eä³ôÇYÛ *ã}hÖ&hÁs‰ˆO[“ð Ñ<•7­Ñn”—Y–¨„Ö KD^¸á†3¿ö5©d™›b/Üpéêl[,KDR餈¤SI•)÷ÈÒÛÛãéñ©´Sý™¬(Q’J'¤×®_Z,óç_¡P(æ Åd2™N%E´Ó¸”çtIDATùå›þäö¯üüç?ð“|â“ןwÞ>úÈ·¾y×eïýÀUW}|áÂayÿû.‘ËÞû§Ìå—ÄY÷g?Û}Ç—n‘[>wëùçor:…oùÜ­O>ùÏ×]w³sWD.ÝrÁßýè´ž—W2uÚ¡Xßš« ÿûí´Ó»s÷]÷]}Õ'º€¡IDAT®¼jË·¾y×_ýå.¹èÒ+¯Ú’õG7ÜbWŠÝô©›/Ý|ÙMŸýÔò%Ë6^øž_ýêÑ;¾tÛ×ÿû}=©Ôħ>º oàß½ã<·Î±3Öœ½ö¬Œ$~òÀ£ï½ìƒ}—n)‡ÝOxTDÂk‘d2õÈ#?ýÖ7ïºóÏÿâìug?ð“8Ëþó‡ïøÒmwþù7†&>õÑ”R/|Om“¬dó;nŠ>Ysðº6‡R"Z´%N‡L‹“nªmvI«ÓßÕ޾إkθç}[¼Ú¥ráD*)"J«¤;F–T’<}ïIKñ/ÿö^ΟÌsùüL.ŸÍ²¹ÜLª&+IDAT6?“ËÍdóÙ\.›+d2‰+6~Üí*fzªÏD_=šìëqn,Hõ÷ˆÈ~òýoøãtæÔAÏ7ÿ›·‰ÈÃÿŸÍ›.ù‡$"co(¯øÀßÿà]çmT•ŒOöõ(‘TâÔ—hj ×÷˜Å©1²b)5Ð^³ˆôdR{~¶KDÎ^wv²ïÔ¹Á•…g9 vªJ_Ï·IÍBÏ¡I4IÖžýH'Ç”r^l%"¥bQÒé´e‰[%DäSü›bRÙÇü‹ËÞ/" m‹’’–R±("™LÚ @'ÉRέL:¥E)gR%–¥¹ò÷Wض¶mÛ²l˲,Û¶J–{×¶m۶Ӯь»IDAT=i¥î¢¤R>§Ôfz<g™òm»hõ ôžZžNŠÈ/{TlûÿñgÞñØ£bYéÞ´o…ÞÕ}õ-poÏZs:ô”IW­èöïœv¦Ó§’®¶IM¢I²æPtÉšÃó²*U鎉çÙ¶ì’JŠˆhûºì¦Øä¶mã÷Ü#•,»ûÒÿ`‹ˆÛ*ïËeRI§¶DÂìO$Ri凳2jã±£¿ÞÿÚ¯^<6“+d³¹™ln&—ŸÉæ³Ù\.ŸÏ勹|áÓ×^˜I¸-Íd|>ÏÏN_øíwž{žU´6n¼pÏž‡«­´Ä÷¡(5W•ñ®è=:k“š…k¾!šDi-N¨²ÐIDATNÿH‰rö0;¢EĶ•mÛZk¥Ô »þÞM±g'>áü¿~ç·¤’e_ÛüûZkË*€¥3içÔ±KRÞµLH2•RåA8QZJg Z½fÙÀäáGŽ:{”ùòe¾Ë ùÒ;ÏÛ¼éœt&UþxiÉøüTÓÛµ º½ïÙ§EäÂó/îéË\qÅGöìyxÿÉþ£½"rÙ%ïïéËø®xÁ=òÈCUU…l=¨fo=ï}ïûöìyø™}OŸæùîŠýèÖ={þç'_¹zÅÎ÷~ðƒÞ¸ñ‚ ­ðPÞn™*g”Ã(W²SJ´$oýån7Åž¹ú“î7ö3Wòìû¾/ðIDAT)"|ñŠõ£·½ã"Ë*’õ”“G –Tzd*}ZéÌŠ´ÎZÃ"ç%‰”ú¿û^˜Éæ²¹|6WÈå ù|é]ï›øØù#k–¹ãx•ª«õôdÂoíë_þÑ?øÓÛÿìmoú÷C_üžÛÿäKŸ¾qBD¾zçÝg³`Ñ ïŠ7Þxó#ûÙ÷xÎY+ŸN1óêôÑ©c'Žå_;9sÿþiêå#…Rql|ùÆ.yÏ9«VWŽIˆˆ¥{2™|æ ˆŒŸ½Æ½á]è½½v݈ˆ<øÃG††œ8zrÅK‡ÊCZ¯Ÿ˜þÝ‹‡Eä÷V/ïìsz+qò…Cû[µ0¨pHÍÅBñÈ+Ç-êíë‘c¯8ò»£N«ÜJ²Ó¹ãGONŸœ^°xÙBçmÐVš…Ï[“ð ÑDî»V{ßÁ?Ýrņ‘Uv±˜H$TröCe¶m•lÛN¤Óû¦^ºø‡ßqBñıã_ºc§³«RGIIDATk©œ Uù!(é93=|æ°SzÓ¾½Üuú_Ý=ÍMtOOJ‹¼ñ­ãΈÃÙo]ë– ºí8ã +Îxà ï’ÅK-^º¨ªX튙LºvaPáš3™ôÀ`¿{wùÊ%ËW.qæ-³pxAÄ­À4YS”£Á¹©´ÒâTtBc:o‰$úÄN$OuµBضµ’·D$“I9ÙãìWÎ^a¹k%å3=tåÚ$•¬t2ìTïPIùì6­”Ò:NKeW3ß}RÔâÓÖ$ôt›Äýq’÷4ÕÊH™¼üJaåòLQ””ìðz*Êk‰HO&íäT")âY*¥úz˧©Uö+‘äœÍV”RÁÖIDATn†® ×UFˆ(}ZÌéòD£4êµWÿÓ/ž‘´ßy¨¥ùÀ5 ¯lS(­=ç¶(åìñiQJf®¿¥ÿ®;^~e8n%ëèÌõ·¤ÓIÑJ+9õ[Ë¡E‹SmšUñßÒ–íh¯Ë/yÛ÷å–þ»îp—8çÊž¨0sý-—_ò6÷wDC‹*S]÷dÒ/¾ðB3Û Õ~ÿ‚7Êÿ£Žsù¼YK–.w>²½Ï¾Ò¨Æ@Ëœç ²çŸ{öÀWÛÚˆgttÙyïz“”ûÓ©Çæ Ÿ¿¦Ý­€nÿ⽟ødJD:eÊ@¨AÀxãdŒG0AÀgâIDATxãÕd#£«ÝmSaëÐÝêœ?gêÀ!çÆÈèj÷öÜ5°*óG#'s{RNy;VÞà YâÆ¢³°ª÷®[Ò£T ²]»w×.ܼ©úêÜ.ßL©ZR[&(}|ãÉsá™åÛxF›˜ØzpÊžž°ÙÄÄÖª%n-µ+©wl«Žž”[Þ·k&~-`´;ïyt–]Ë ü«Ýy”ºF¸jw$"¨ÙºÒœN¿pºBµËãvÍæa!û§æ‰¹ö»9â µ ¡ýÚ2¾»¨n± jÀ«ž « ïˆUxÉuCª _…îÎì`¼&Yk:JtÇeó0IDATÐ#`<‚ €ñ2Æ#È `<‚ €ñ:%Èš1M#€y"vUÅ;§k휱уÉý‘SÜÆÄÂô³@·jØÄŠ?Áag¶ Àܵg×Ò·ûÔ×ó]%¨²¤jÝ jk7]µî\Ÿ<€FkäT×…Ï%ë[²£¦ŸÐid͘l§§Ÿ%ã€Ôà1²æíyuÎô³:MƒÇÈ‚æŒm öN?ËÐb÷Ȫ¢ÊwêĪ«ºIÍD‰q÷C™~@ˆÌ[»$dü>¤|Ü2m™~–¼:P§œÙu35Ș~€ËÔ AÀxãdŒûô‹]»w7£ei\½IDATbbëÁ©ÚÝŠ–ªç<²'ŸØÓðvhˆ;¶·» mPço-o¼éÖÆ¶@ƒèv7  #`<‚ €ñd"|ÖÿX×hX›Z²Åî›WÈgÔ¨FúÖ3—70biÊ ±¾3¯6¤¶¸«š¤,| ßG›4‘¬oÃÂ[T`.m™_·¾ ÝÛ ©¹ö¹‡l¢v.ñ›À{—Ÿ¦§ S]7VÄ«ºIµŸ±Y?mÔ¤ ¾4#›Za”M„—a–sÓ5fŒ,üb"ÞË„_5.(Sf½\ˆoj멽òŒB­­¡¶µAW0 zª¦Ø®­3bÛj_Ÿ ¿NÐ’Ú?œo³é£IDATµUÿWµmÖ~t”š}m`Ö„Ôþ}_Uo©ùóÅúø@ˆÆôÈÂ/&â{;Ö;rÖ¢Üv¹oŽ( ˆ;ùb”çÕ¤ž”<÷ª%µe‚šþ’Fl¼ï ±æYÿ”A›˜ª¹ÞB“h†?ÁXï·ª/¤Yÿ ct½öïZ6c ÆwyÐ{ÊozîèoSß-Vu¯â Õ–÷­Ç÷“YßwxŸœèÏ1î XÇÓ‰˜wu7#Š–õQ«ýAÖ(sùùîÁÍ¥#-¹â‰ï€]me›ãê´ö„ˆûu^•tê_¤3µÿ<²†Ô]¡og§>¾©ºk¯Ç·G)ñŸÂ\>0 ü Lô IDATq?ÕÑûh­ïÔDo^ÄÚUU×kJlÊïU݇Y‡ªö\|W©Ýbx± ’!õ‡”Ê‰Ò ¯¹ÞÜmHkÝ%µe|ÛìûG”hÏ+è+¡ª³Ö4¾VUgí&|›TU&úË+žjß®µ«×>¯ª%u¼‹æ¹YÕ»?d¡¼Y£o¢¶*߇ÂïFiCÝmßÃKKjGÍ|‹Å}v« _%ÊÈTÐÂè¸Xe··ü¬o'ßÇ}Ë!\ûw-`ŽZd³îôE,Ùiæ¾cؼ­´æ•ŒØEê(Mm¤¯@7©g×rÇŽíósª)vMLlmF; n±ƒl¾M¡’\þ!IDAT  ó1ØÀxãdŒG0AÀxã™dÌ“ Dì kÆ ¼k«c£$ 0IJÚßú· ¿_àkN»–#§_±Â;©tmÇm$Â5&Bê¯Z¥v[!kö­°ªòú^­4×ùÈªæ¨ šßwÒĪÙ«j™¯5hFÃ)¿IA}çóò­€¡Ú9gÝ â]±QsR»!¯:ñ!k˜qúE ¹RÕž&cd€b÷Ȫ®»^L‚/xáU{½†ªU‚Ìz‡©9\A€)bYø¥F¢_£îkL̺bôËŽÌz ò0B÷ìZ˜·šd†vd m_9IDAT6zdŒG0AÀxãf?€Y­9³ÝMˆáæ›®¹ñ¦[c­Bó‰cf”ÿÎ÷ªc­ØA¶k÷î:6 e&&¶ú^Hûè1ÕúÆ´F==²'ŸØÓðvhˆ;¶·» mPç®å—ï¼·±íЦìB6VŽZ*ÕµýUFàô Æã¨%0yçÈê‚_dÀ<å{9 C±k @d¶ë“…ß¹VYkÐ#æ©Ú “C®ORIÕìðméèdÀ²/ßyoÐC>mÕ•Û^gøºÍh-0Ô3F¦” zhdtµûo­ªS[6Ú@u´BmîIDAT?ú*¦¿8@ˆØ3Ƥ˜ÃíYÐˈ«©/ t±ÙƒL)å^¹rÖ âv¼1ç.ñFžsÛûíêµµUm(h­ð:k#ØÛ‹‰¸é gþ"DîA¯Æ¬O9z…€q"õÈœ,sS,îyƒr*âZU…}3Âå½ë%!±Þì :Ã+ñm[í‹à›h¾í yÊAéþêÑqFˆºk=Å|¿Þë  ‰‰º‡{šú‰m`"4äÉÖVT!YÓÍdqûbµ;e2·©ÝêÀO]m#ó*l^Ë–‰tÔÒɯX{”Î>KíòÆv¦:íH\³{|Í«ƒÑ¢îZÆϘ·7ÔÜ€—ùdIDAT.•wIPê9Â×­Ýbíò ¶U[[fV³Ö±L¬vz_:ß×9J…Œô£ ¨mÛ¶ßu÷­×_wÛ>ÚµˆwíÞ}Å/ _yhÑêyò%F‘€tûïuâ‹©®ÃÐ[ŒÀT×aÈ/ÀLãÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãÅ»®e[&GfRCáb 3E ²‹?:7j'€ºplÕ´úA5Ô–ñ½P#ÄÛµ¬â{EØ Káú.©Áw ÔšS5DÜ«œjª´?È&sõô‹Xy¬Omb1çIDATÄú;í¢¼Ú.F¬*Ë"^6z³^S–¾_ñv-k£¤öZß¾7‚–‡ÔT†8P…3û `<‚ €ñ2Æ#È `¼¨§_ìÚ½»©í€*[N½¥dŒóÈž|bO½í€xvìØ½p¼b¿|ç½1rôµ—†.K&ÓË9ò’ˆ½þöÿhÀ|L¦s¹éB!kY%Û¶µ¶µÖ¶m‰ˆÖÚùß¶K .ÎçgÒý=Ñ+'È´H¡ÍdzmÛ¶mKkíä—ˆ®°mÛ:yòèààp¡•8AÆQK-Ré‹éJŠ9áå,±+¹&"’ÏgcÕLMÔ€IDAT @‹xúb§bËYâ–QJ‰H±˜U3=2-bÛ–Óÿr—ìÛ·×éšUþ••J¥X5dZÉÙ£Ô"²oß^™œœÏx¿SȶíX•dZÄÝ‹TJ9)昜Ü/ž­ 2ÉívíÝûŒ³díÚµÎýûHåøe5dZÄÉ)·/¶~ý¥Ôøø¸s×ɲÊHY¼8#È´ŒÖÚ^¿~ƒˆ¬_¿¡²ÿ¨GGGDdtt$Ó/´HeÏÑ^·n“YîÙèèˆsNF}»–€ÖÑÚöîV%—sŠYÕdZÄ9³_)íœõêŽý»}1O®©X5dZdÑ¢å'O¾¸8ÍMIDAT椘ˆˆ(wPßÉ/Û¶††–ˆH&㇖BhC‡ö®^}Ö‚‹g-ùÜs¯Zµ–i|tœáá{÷>6=}²J¥RÑo,L%ÉþþÁuëޞ;«r‚ @Óeó}¶J/[ù¦"J)¥T2¡T"‘LˆR g_S©„»×y츕eœGÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀx¯[ØËIDATãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãvª%…IDATdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒ—jwt¿¾žìÐÐ`2™ŽX¾'“U?A ’Ét.7](d-«dÛ¶Ö¶ÖÚ¶-ÑZ;ÿÛviáÂeƒƒÃùüLº¿'zå€)²™L¯mÛ¶mi­üѶm['O.²'È#Ð"•¾˜®¤˜^λ’k""ù<»–:’§/v*¶œ%n¥”ˆ‹ùX5dó9îIDATZĶ-Û¶«:]³ª…¥R)VÍìZh%-¢÷î}ƹS*›œÜ/•Q©Í»p€qö"Û·o¯e•”RZk'ÅœÿZd:’ÓáÚ°á,çîóÏ?/"û÷pîŽzeÆCh÷xåúõœ%N–‰ÈØØ¨[ÊóT€–Ñî>£›e"2::âžJV_½€qÓÊù·nÝ:sN¹pÎɨo×’Ó/´ŽÖ¶·ÿ4>>îí…ÕÝ)#È´ˆsf¿RºÒ+ÿÄÒí‹yzd*VÍ€Y´hùÉ“¯9)&""ÊÔwò˶­¡¡%"’ÉÄø¡¥dZãÐæŸ¹'IDAT¡½«WŸµ`ÁâYK>÷Üã«V­±¢WNh…áá{÷>6=}²J¥RÑo,L%ÉþþÁuëޞ;«òxAvôµ—b•‘l¾/î*:Y_O¼©)DäÄ [dº¯÷Œ¾Þ3f-üê+'DdxQŒúãÙÐÂeÑçx‘#G^êéQ@ç‹5׫ˆ9»W¼ ™ãQ¦yìé_ØøVhŸ:r@¤·©MŠ=F4Ç£xÎvóNóØ×ßè&h·¸9 :-ÈüæxÔûöíu~pP;Í£çP+€.Q›{÷>³aÃY•îXuôö 7µ=±ƒ¬vŽÇ}ûöŠÈ³Ïîw‹¹Ó<ª =WIDATd@÷©Ê'öíÛ»víZßé^{ã[AvÚΑññqßi“ ‚ è6U9°aÃYN<ÿüóããcU…ãN÷Z‡úÎ#+ï {RlÌ]èÌ”æ,·m[%ø]:ЕÊyçÎøøøä䤈LNî­Êf7¥ž™“VnŠ­]»ÖYîÜõv,µ¶“äÐuÜpvK¥¢RjíÚµî\‰žùÅbO÷Z‡zÆÈܩў}vŸ”;“ãJ%¤ÒbÏOص³@7qsÀ¹›H$µ¶Ÿ{î9箓bÞhv{êØµÔZÛN<¹Y6999>>æv ½ÌX?ÐN倈xSlttÄ=vÙ²ÖÄ ò»÷IDATî.ùN&"““ûç>;#T倛b ™%±õ ö×N699yú.ñ©ÙÑØµº’7œÑ±FÍ’X‡:Oˆ­š­rùŸÙÑ8 è>µ9066ZI€¹Î’X‡ØA25šÌyv4Fè´ˆdѧF“S³£è*uäÀë'›»/È"L&U³£½ò걆4@‡¨#šÝ¤A¶cÇv»ôúª•«DVE)_*O'%Ý×ôç •ì’ÄÍX³$Ö!jMLlmj; nQƒìàÔ MmÔ“¼ `<‚ €ñ2Æ#È `¼9ÙÈèêFµÃ õ¬;ª1@»ÄÖ¤äÔIDAT ²‘ÑÕî¿&5¨eÚûºàtuÓs¡büDidtõÔCÍkJ‹uÓs湨A”bî·±ûhKj „Ô_µÜ[ÉÔCn;k7áÝz¬’AOÁ÷vø¬}BÚ¾u þÚzï5À»¼¾ç—Z¬¾ËÁ”—Èl‰ë¡Ú¾+zE)÷“é[g”%ŸKÕ’¦†´¤¶~ßåqŸ Ðs ²úÔ~ÞBJF¯6¤N÷3Y_Á7FC*Œ;lT[>âëÓq·N¨¡õÚdÞ=”ðïó®GÄ­4Dmƒ¾õðòí‚ /êQKwè¤QÂGܨjô§îeíŠQ*œ{×l.µÏ²IDAT5VÄ­s­£GV•e¾`o··>ü\[ h‹UB„Ô«Á³n(b!e¦ /¥…A…£¿z.ul˜;µmÛö»î¾õúënûÂç¯iwcbè„CcÐ`>»ý‹÷:ñÅO”ÏÔ ë„®P'´€˜dà"È `<‚ €ñ¢žG¶k÷ªLLlx!Ê'Ä>ùÄžzÛñìØ±=záx¿µüò÷Æl ȉcñÎUÚ±ã¿Å*ßžÙ/Ì7C‹¢þwçÎûãVNh‘ˆ^uà¨%ãdŒG0AÀx öh5ß™Aç2 =2­æ’|•!IDAT;ò\*$È´7¹æ>µA =xQT‚ @Û4jše‚ €ñ2Æ#ÈóÈ´BsZDGhº¸ó‹Å#ÈvìØwv4˜Ó½Ö!jMLlmj; nQƒ¬y3¢ÀqÔ€ñ2Æ#È `<‚ €ñ2Æ#È `<‚ €ñ2Æ#È `<‚ €ñ2Æ#È `<‚ €ñ2Æ#È `<®k‰î12ººÝMhº©§]’qÍÈ™íjIkÜ|Ó57Þtë¬Å2t­u»›Ð,7ßtÍW¾úÍÚå]|µÙï|% 2t›®d7T¤IDATü`‡¤S-kIg"ÈÐ…ø`Ï7 ö0AÀx€¦håAd‚ ˆa×îÝÎ?ïßÛf]íþkw[êÁ`?ծݻ7oÚ䜺µsçý›7mr–¯9óàÔ î£§^hk3c]]uzšq2 ’ªœÚ¼i“³Ä÷Qƒ¥˜Û5sõöÔÜòAeZ‹UmNy{g&¦XoZ9·«–T% ÷në»xÐ]–bR×P}Ç×2`®&&¶z‡Ìº@U÷*âZmhã¨%ÉæM›vî¼ß½ë “ÊY;Ú5WÎNbcël}׌•7­jŪ†ÿ R•eSEI7o²ý›ÏIDAT™ªUì:š{ú…ˆ¸‡/«5q°¬6zª–xﺷCÊøÖÙ<OmNy—˜˜b]€12Æ#È `<ÆÈÐm¢ÏŒ®A¡«Ü|Ó5ínB«ÜB¡Ëø^ž£‹ÍÃàöE¡{˜>M¢\*m>`°€ñ2Æ#È `<‚ €ñ2Æ#È `<‚ €ñ2Æ+ÿDiÓæ·ñÞö6bÙ´y£s£dúЦ}ȼ‹&€ˆ¨mÛ¶·» 0'ÿ’¬¨ge¼“IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/lock-dialog.jpg000066400000000000000000000541141203611042400313410ustar00rootroot00000000000000ÿØÿàJFIF,,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ\K"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?î|Qâ›SÒ4ë-.ɵU2¦Òª„ó±‰ÎãïÇzœÞø½F[ÚhÏ­òÿñšÂñ—ü”/×WÿÐ"ªž+×¢ŒåK9&Eþu×JŒgéù÷õ&û¶Í/x¿Ä>ÓÖ÷QðÕ˜…˜.cºVëÿl¿ÏàqËòù—¢ÿ¿ëÿÆë;ZÕ%Ô>^Ãö‰n-­ïá;º°†Ê‚=0=ê]sÂvÇÇY|; ¦Ÿc#FJÚĪEºÈÁ@àƒÎ:œàô­ãBŠºœv¿~–óó2œçu—ÇÆÙüËñßåÿãtáñªCÿ0¿ïòÿñºÊ±ð.¤Yë±ÉŒš]õô–m*<…­Ü&Ñ.ÀmÀýÃŒ¹ã[Ú‡‰>Io ¹¶²‹\{ƒoæ,×3*Z‚ÑÅ…Pò78<ã‘ÒÃ¥~_Å’§S¸£ã<‡þ`1ßåÿãtáñ–Cÿ0(¿ïêÿñºòÙ M<†tˆ±(®á™W<@8ïô-mõ:?Ëø²=´ûž¨>1Hæýý_þ7Oä?ó‹þþ¯ÿ¯-Z•húß‹m>ç§‹’ù‚EÿÿӇũüÁbÿ¿‹ÿÆëÌ–¤¾©G·âÃÛO¹éc⼇þ`ÑßÅÿãtññVCÿ0h¿ïµÿãuæËR-T£Ûñaí§ÜôqñJCÿ0x¿ïµÿâ)Ãâ|‡þaßkÿÄW­J´¾©G·âÅí§Üô!ñ2Cÿ0˜¿ï¥ÿâ)ÃâL‡þaQßKÿÄWŸ­J(ú¥ß‹m>çz>#Èæýô¿üE8|DÿÌ./ûéøŠá¤Z_U£Ûóm>çr> Èææ¿üEçX#ñnžmeó­Î”|©<Ó&õóy$¶G9$ç­yw‹¿ämÔÿ빨v²i¯v›=3Çz~³7ˆ<=©höñôðÎêÒ*JG·;ˆÏCÓÓµA¬=Þ¼ûõ/‡ ;g;¿´Ñæ¬+·¹ÿZ¿õÍ?ôPÑòŠI-½Ì®SÎ|Miâ cÂÐègƒ"Óm#H/"<Žÿ{ëœõãÓžjãßï<ŸµM©OäȳEæêjÞ\ƒ£.dá†x#šöº+Xã'd—õó"TSÝž(Þø‰.££!¿{è—dw-¨©‘žoÈ1ãÜúÓäðÏÄ)Ü<ÆúF-ÀgÔT‘*€«'/÷€Ô+Ú(ªúôû/ëæ/aìðé|âë‰äž}=å–F.ò=ÌlÌÄä’KrI¤¼P?æÿ“ñUîTSþЫÙ_1}^'ˆxœÌ3ÿ#ÅÿÅSÇ€¼L?æÿ‘ãÿâ«Úè£ûB¯eý|Ãêñ<`xăþa¿ù?þ*ž< â?úäxÿøªöJ)}~§eý|Ãêñ½S²«@à†õaÿ.Ÿù?Æž<;ªùuÿÈ‹þ5ÞQG×jvAõh0ðþ¨?å×ÿ"/øÔƒAÔÇü»äEÿíh¥õÚ}Z4=DË·þ>¿ãR Pòïÿ¯ø×]E]©ÙÕ rƒF¿òÃÿ_ñ§"øËü}ƺŠ(úíNÈ>­›Uèÿ–?øðÿxÓ/ü±ÿLJø×CE\©ÙÕ `:ëþyãÃüjAar?å—þ<+jŠ_\©ÙÕ d +ÿ,ÿñáO“àýEjQG×'ÙÕ g‹i‡ð~¢ž ê*í}n}}Zˆµ³.ÿ‘·Sÿ®æ—?7A¨Ø÷ËŸõ«ÿ\ÓÿAâ _ûF’ÿd/¶H£ýüÞTc|Š›™ðv¨Ý’px³sþµëšè"²u­:]SMû4 Ë<3¤‘CG*È2¡— ”ÇQÖ³,϶ñU¸µ·’óÉwºóÜi&]A¨fÜ‘ a˜Æ:sØ>ÛÅz|÷Š1q £&ˈãy#^8vº®ÒÄÊ %›‚ÍMk¦_ÿj[j…í´óAð·¶h”¬w‘ù#õÝÛäÁàŸ'D}!¯ašÒHí™Ök]Û§…bU$nÁˆˆtxÉË|ã#€kGâm"Ií­ÅË­ÅË2EÁ"JYJn †RˆÜòßtV®u[K[è¬ÜÌ÷ã K°€\ªŠH8-€v·¡ÆfátÒo »W³B‘Î ’ÛÄL†UA$`B3¸±% ¢ìÚmÐÖÿ´¬îá‹ÍŽ(ncš&ô†Âv7ï$†wŽ@ ohË ’›‰¶.ݤZÊ|àΨ _/ïT³ Ên:úŒâÍa’V¸˜ÛÇÙeÜåS »rì•(%X€ØLrïnq'Ý’qƒ[µÍé>¼Ñ4ɬ¬µDA%¢F%kmΗ B²Œ¶6íNÂ9ù±Åt”QE (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Â|]ÿ#n§ÿ]Í{µxO‹¿ämÔÿë¹§Yï—?ëWþ¹§þ‚+']Ô$Ò´K«è‘]áMÁ[¡äVµÏúÕÿ®iÿ Šç|cÿ"Ž¥ÿ\¿¨¥Ôf—öGŒÿ瞃ÿñdxÏþyè?ø7ÿZº%ìñêÞ$þÑÕ¤–Þ N+[d¸"Ä]QJª’KÏ´n$œ(ë’sáñÝÅμm Юå±­dn–pË!‰Ÿˆ<Á$ùÜ('¾J»!\‹û#ÆóÏAÿÀ‰¿øŠ?²`Ï̸É6Ü·IE\ῲw Æï’¤½ñ†§kâÓÿ°vÛ¸íþÑ<“Gò»ªï ä\ªùÛ›…Às°Ar·öGŒÿ瞃ÿñdxÏþyè?ø7ÿ]ÍYÎû#ÆóÏAÿÀ‰¿øŠ?²õ‘O ŠG\mwˆ6Çqµp̤‰ƒò®5(¢€9µð‡–ÜÛ›k·Œ¥Ê0“P¸}Ëpœ .I @ló 75sþ4j?mŒßC'›çàÔ."„¾wbWœœ–ù~bI9$çbŠ+›_øym͹¶»xÊ\£ 5 ‡Ü·yÀ’äÄÁèß0Ãs]%Ïßx+AÔe’K›YÛt¢uD¼™)CócEp±É»$ºÇsdüÍ™'ðŽr%ߨy/MûKôé œÇån®FÏ—h!@à Ü¢€1ÿáÓF£öØÍô2y¾qŽ Bâ(Kçq&%qÉÉo—æ$“’Nv(¢€9µð‡–ÜÛ›k·Œ¥Ê0“P¸}Ëpœ .I @ló 75`è3KãÖî.-mÚ( [B$ q‡y ÅA˜.p&qŸ˜çrŠ+þ}'ûGí¾Lû¼ß?Èû\¿gó3»‘»ËÝ»çÎÜïù¾÷5±Es÷ Ñ.¾Ùæ¥ñûeÚ^Ï·R¹]Ó'Üa‰ÜapÈœ|‹‚ûÁZ£,’\ÚÎÛ¥ª%äÈ‘J?›+…ŽMÙ%Ð;›'ælôP?qà½ëížj_¶]¥ìûu+•Ý2}ÆmÆ`|‰ÇȸϽð0½ñ Þ½Ô `—qÞ%ªÅ1d•dÞ™˜ÄŒÎ fXƒwË=…ÿÆš5¶Æo¡“ÍóŒpjB_;‰1+ˆÎNK|¿1$œ’s>Ñà½7IÙ&ᮼ—¾àóYÌ…ü–swãåá°F·(  {M ñF£¯Ï?Ú.®¢ŠÚÑ(û42cV's³9$óòŒ|£;Q@½ƒÄ~#Õ5}JïíŸk»K˜-ÓΊ(Š"¢îÍhä`#Œ†(eÈþºÓnuÈõ™M÷Û¢á5 „E)*#i(„®0ØäØ¢€1ÿáÓF£öØÍô2y¾qŽ Bâ(Kçq&%qÉÉo—æ$“’Nkßx+AÔe’K›YÛt¢uD¼™)CócEp±É»$ºÇsdüÍž‚ŠÃ‡Â:<¦é#»$Ü5×’÷Ó¼k9¿’ÎcÎó¼|¼6ÁÔŸðŒi£Qûlfú<ß8Ç¡q%󸓸Œää·ËóIÉ';Pfk„œ™7¢2$`¸b Êçü£ŒŽqŒœÉEQEW3âD×$º4¸´ö„¢—k©dVÜ Tñózûc¦zj¡z?|8ê¾zû{ûõ÷Ã&㯋Ž?s¡óÿMå>Ÿì{ÿ/Q™´M2ûL±ÔŽ müû«Õ¸Å»–P c ª u®—¯¾ÿ?_~½óóÖ»9…ùÏÌÿß÷ÿ>ýL”P¯ ñwüºŸýw5îÕá>.ÿ‘·Sÿ®æˆ‰žùsþµëšè"¹ßÿÈ£©×/ê+¢¹ÿZ¿õÍ?ô\ïŒäQÔ¿ë—õº¡étQEhHQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU ÑûáÇUôë×Ûß߯¾ýP½¾u_N½}½ýúûá“WëïŸÇ?Ï×߯|üõ®Îa~só'÷ýÿÏ¿Sg¯¾ÿ?_~½óóÖ»9…ùÏÌÿß÷ÿ>ýL±”+Â|]ÿ#n§ÿ]Í{µxO‹¿ämÔÿë¹¢ Ï|¹ÿZ¿õÍ?ô\ïŒäQÔ¿ë—õÑ\ÿ­_úæŸú®wÆ?ò(ê_õËúŠ]GÐôº(¢´$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*…èýðãªúuëíïï×ß ~¨^ß:¯§^¾Þþý}ðÉ‚+õ÷ÏãŸçëï×¾~z×g0¿9ù“¿ûþÿçß©³×ß?ŽŸ¯¿^ùùë]œÂüçæNÿïûÿŸ~¦XÊá>.ÿ‘·Sÿ®æ½Ú¼'Åßò6êõÜÑg¾\ÿ­_úæŸú®wÆ?ò(ê_õËúŠè®Ö¯ýsOýW;ãùu/úåýE.£èz]QZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE|ØŸîŒ%”wqÏÐúõôÈ:5­n(á „Á# Ÿµ&4!s÷ýµNzûÿS×Ù©©A¨¥úÁ¼ý–émä,8,±Ç'#æëëž½Nv›ý«3Î÷ëo‹±Ii[ùyéÈ$Ÿ§\⿆¿ÕxƒþÂçÿEŠ‘šÕá>.ÿ‘·Sÿ®æ½Ú¼'Åßò6êõÜÑ3ß.Ö¯ýsOýW;ãùu/úåýEtW?ëWþ¹§þ‚+ñüŠ:—ýrþ¢—Qô;ÿí° B2ÁtþUu?Yé:mÅýʹ†.Â6Fcì®Iw«½”aæ&êÑ’síüúOÈ…9$’Ö13rI*¤ŸÌÕ\V=^Æqò¿>Àúòõìg+óì§øÿ/Qš=}óøçùúûõëïŸÇ?Ï×߯|üåÀ¼/c8ù_Ÿ`}?ÇùzŒ‚ö3•ùöÓü—¨Í¾ùüsüý}ú÷ÏÎu÷ÏãŸçëï×¾~rà^±œ|¯Ï°>Ÿãü½FA{ÇÊüûéþ?ËÔf_|þ9þ~¾ý{çç:ûçñÏóõ÷ëß?9p/ ØÎ>WçØOñþ^£ ½Œãå~}ôÿåê3G¯¾ÿ?_~½óó}óøçùúûõ¸…ìg+óì§øÿ/Q^Æqò¿>Àúòõ£×ß?ŽŸ¯¿^ùùξùüsüý}ú÷ÏÎ\ Âö3•ùöÓü—¨È/c8ù_Ÿ`}?ÇùzŒÑëïŸÇ?Ï×߯|üç_|þ9þ~¾ý{çç.á{ÇÊüûéþ?ËÔd±œ|¯Ï°>Ÿãü½Fhõ÷ÏãŸçëï×¾~s¯¾ÿ?_~½óó—ð½Œãå~}ôÿåê2 ØÎ>WçØOñþ^£4zûçñÏóõ÷ëß?9×ß?ŽŸ¯¿^ùùËx^Æqò¿>Àúòõìg+óì§øÿ/Qš=}óøçùúûõëïŸÇ?Ï×߯|üåÀ¼/c8ù_Ÿ`}?ÇùzŒ‚ö3•ùöÓü—¨Í¾ùüsüý}ú÷ÏÎu÷ÏãŸçëï×¾~rà^±œ|¯Ï°>Ÿãü½FA{ÇÊüûéþ?ËÔf_|þ9þ~¾ý{çç:ûçñÏóõ÷ëß?9p/ ØÎ>WçØOñþ^£ ½Œãå~}ôÿåê3G¯¾ÿ?_~½óó}óøçùúûõ¸…ìg+óì§øÿ/Q^Æqò¿>Àúòõ£×ß?ŽŸ¯¿^ùùξùüsüý}ú÷ÏÎ\ Âö3•ùöÓü—¨È/c8ù_Ÿ`}?ÇùzŒÑëïŸÇ?Ï×߯|üç_|þ9þ~¾ý{çç.á{ÇÊüûéþ?ËÔd±œ|¯Ï°>Ÿãü½Fhõ÷ÏãŸçëï×¾~s¯¾ÿ?_~½óó—ð½Œãå~}ôÿåê2Ó¨G“ò62K(ôê}ÿª©õ÷ÏãŸçëï×¾~z×g0¿9ù“¿ûþÿçß©.5?´bôÿȉÿÅW!«kºŽ©{q‰›Em ‚w»‘”™gå Û‡ëžN{ ˜ô¡!½’àh·°;“¹ðÇ!Gu½ºsÚŸ‡?×ëŸö“ÿ@Jßâ¯ùá£ßéøš¹áû Ë?R{ï#ι¾â, Æ2@=TÖ…L¿ñç/ýtOäÕ7 xO‹¿ämÔÿ빯v¯ ñwüºŸýw4â&{åÏúÕÿ®iÿ ŠÈ×´éõmîÂÛ`štئF £‘É>•¯sþµëšè"¡¤32dñl²–h*¸zÄ€;}ªŽ«¥x¯WÓ.,f]RdØYo#ÓªûUëoè·³Ež«gtòÉå(¶˜KólwíÎ>XÜó»Ztî©s÷ýµNzûÿS×Ás÷ýµNzûÿS×ÙTR¸XÕ2~áÿ¶©Ï_ñêzó¸2~áÿ¶©Ï_ñêzó»*Š.5LƒŸ¸íªs×ßüzž¼î ƒŸ¸íªs×ßüzž¼îÊ¢‹…S çîûjœõ÷ÿ§¯;ƒ çîûjœõ÷ÿ§¯;±ÌÑ,é‘άëa¹” ¸—?QëO§p±ªdýÃÿmSž¾ÿãÔõçpdýÃÿmSž¾ÿãÔõçv%åÜ7—OåÛÛÆÒÊø'j¨É8žjš‹…S çîûjœõ÷ÿ§¯;ƒ çîûjœõ÷ÿ§¯;²©’Íi5,¨ØYˆU÷$€=I\,l?pÿÛT篿øõ=yÜ?pÿÛT篿øõ=yÝ•E+…S çîûjœõ÷ÿ§¯;ƒ çîûjœõ÷ÿ§¯;±.®à²…e¸}ˆÒG8'æw£V`?šÂÆ©s÷ýµNzûÿS×Ás÷ýµNzûÿS×ÙTR¸XÕ2~áÿ¶©Ï_ñêzó¸2~áÿ¶©Ï_ñêzó»*Š.5LƒŸ¸íªs×ßüzž¼î ƒŸ¸íªs×ßüzž¼îÇI¢•åHäGh›dЬ FÀlC†èG­>ÂÆ©s÷ýµNzûÿS×Ás÷ýµNzûÿS×ÙTR¸XÕ2~áÿ¶©Ï_ñêzó¸2~áÿ¶©Ï_ñêzó»*Š.5LƒŸ¸íªs×ßüzž¼î ƒŸ¸íªs×ßüzž¼îÊ¢‹…S çîûjœõ÷ÿ§¯;ƒ çîûjœõ÷ÿ§¯;²¨¢ácTÈ9û‡þÚ§=}ÿÇ©ëÎìaµ¹$TÒãÓvºº*Û=çŽsœ÷öÉu\,e¼^@=ÀÿL~?J—AÑõ ï^ù¬ü뛦Ÿ\P ¨ÆNU5¡Eo³Iýè¿ïêÿ9ÅhêÌ™gR¸n½½W¢€ ðŸÈÛ©ÿ×s^í^âïùu?úîiÄL÷ËŸõ«ÿ\ÓÿAâ Iï´i <ÓæDòC<èÖEi#烽. îÁ [7?ëWþ¹§þ‚*ÕÔ6Ïss ŽÆYÏ@) æõ9 ñ%Ö0ê‹ 7åæsosfȦÞprãvÁîëÎDÿÛ" ¤—û_íÇ4Z1‹ÎÁ™gPÊW†]‚ÛæŸ*Ã''.k¥ÿ„ÇÃßôƒõÿ ?á1ð÷ý`ýž bHuAy1Š}RßQóîþÓ7“4ÐGm¶_!£Cû§aþŽvÇóžAþ:Ï–=]ìmT6£i§‰&ß6/îdÀˆFþXu¸‰Oï¾BJ¿Å¹õð˜ø{þ‚°~¿áGü&>ÿ ¬¯øQ¨õc¨¯„ìâ”ܵċ]ܤRy‘¹/åÛ¸bK€¥cl ää¨9Ì’êõ>Ã%ü×Ë ¿Š‘#šÚ¶ª .|ÐZ,u%Îy$œ¿øL|=ÿAX?_ð¨nüKáKûWµ¼¼²¹·|oŠdÞƒ‘F Â@ÍÒí¯î|ClÚ¼z,h’3J¥Àû.Õ”ÉûÏõžyˆ$9CƒKD²ñÄ3‰u+Á¨}˜I2Moÿ ¬¯øQÿ ‡¿è+ëþj•ª·‰¡xo5í„–ÿc‰­n_u¶Äßæ;H±+æƒæ©”u;U’ÏZþú¢¬–žeôÌò‹‚‘R°:H  þîF[.CWQÿ ‡¿è+ëþÂcáïú Áúÿ…Í]Á,–Ñê£WŸQ[Ý= )¢´F‘b&ÁÄäî$Œ 5Ðßîÿ„¦¶ÿhý“ˇìdóü¿;{ùžo•ÆÜy?ë>\gÅRÂcáïú Áúÿ…ð˜ø{þ‚°~¿áF rë¯=­¤*u¡<‹nºÁg19¸· å1 Ûöœ˜NÀ½xÛOš×Yµ*âæH®šlˆ£¿†8ˆlå3nd%”‚ã,ňÍt¿ð˜ø{þ‚°~¿áGü&>ÿ ¬¯øQ¨ÕÄ> †ÙÖÎMEL¿jIž_6]±EyFTnÜìæB6ò}ì—ÃTúN™}{}gíæ¯.ž#ºtpn¬ù͸Ps)”òfǘÙûØBšÞÿ„ÇÃßôƒõÿ ?á1ð÷ý`ýÂ@çtXn×NÕîõhõ¤Ôïlvû*ȬÃì«”QûµŸÌW`?µßVü&>ÿ ¬¯øQÿ ‡¿è+ëþµrŠÃÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý‹07(¬?øL|=ÿAX?_ð£þÐV×ü(³rŠÃÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý‹07(¬?øL|=ÿAX?_ð£þÐV×ü(³rŠÃÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý‹07(¬?øL|=ÿAX?_ð£þÐV×ü(³rŠÃÿ„ÇÃßôƒõÿ ÒÓµ+=ZÞIìgYá‚3¨8 FqÏ|žh°«Â|]ÿ#n§ÿ]Í{µxO‹¿ämÔÿë¹§3ß.Ö¯ýsOýW;ãùu/úåýEtW?ëWþ¹§þ‚+ñüŠ:—ýrþ¢—Qô;û-Jë­FÞ%=…À·”°,bŽ\¯=6È£œrÔåÜxßÃvö¶—ŸÛ62ØÜÝ›?¶EuC‚&“û°¼&=rËÇ5Ÿ{áíbòOéÛ,SL×·ÿ¥ý¡ÌÐn´Žõ>^Öù£ÏúÁÁöªv¾Õ-®¢Õã¶´MBÞâ9Þ}^êìL«ñá®%RP´³XÏ*rNÿ“BNÂóVÓtû‹[{ÝBÒÚ{·ÙmÓ*4Í0€œ±Ëê=j¼ž%ÐaÒáÕ%ÖôÔÓæ}‘]µÒ¹á_8'ånì}+/Åž¼×¾ÑöY O3DÔ4ñæ±¼ŸÉØxå[dõä`ËÕ|¨Oâ+½bÆK‰;uÔî,NÇ‚Õ 4°©l†µ?&!ÁÈ+Šì5-[MÑ­ÖãTÔ-,`g²]L±)l€Xœqìj7×txìî¯$ÕlRÖÒSÌÍp! ;g Ù `óȬñáç‚ß¶ÖíãJ¥Â†PPZË cÖEá˜ð$õçí¼­ÙiÖqCuht­:Æhb»–Ûí8qç"ïwK†Q–ØT€ÐQˆ¬çÕ§µÁöT´´¹ŠìL Mö‰%DUíÉpA;·€=îYêÚn¡quoe¨Z\Ïhû.c†ev…²F•9R0}¥púu]&ìê%§Û¡BÖðµÌ“ÆY®.äewuÜIK•Q67ƒ»‚¥–Mx:ãÃׯácaceög:ÍÃL¹L°ŽBÜ)IDÝÔÀ/ÌÐè-pöë­é¦t¸[WŒ]&噉 ÈrU€^§iô«‹fþ^۸͕à¾Dݹ« ‘ÔmoC\]+:öÝ'´=–·n¤»`5åÂË?/@£ èzg­jiš7üUú•áIÒÆÖRÖÐÊ1Ú% ÒÆ¸ÆÜ`ï–ë9Ý@•b?è3isj‘kzkéð¾ÉnÖé HÜpÏœó/÷µ‡¬x{X¸·ñE…’X½®½¤Ï5ÃÆðHÖ«®Á\Ƥ¶àFãò¿4šç‡µ[ÍfòþÆxÄS[ÚÂÖâîKfœD×%”Í/ÌѰ+’|²¤ÄÐÃø—AŽâÒÝõ½5g½D{XÚéN®p…rÁŒçµIý»£ÿldjØÿiÿÏ—ÚÎû»¾æw}Þzt渽?Àº­¿‡|Gc,–‹>«¦KkûL“Ýç¼o‘Ô3.P ’CtÍ=WBÔõ[ãá(àň»Ô.¤Ô¼©†Åº†ç³F±¶Öº „•˜íÎÑómï#ñ.ƒ6—6©·¦¾Ÿ ì–ínÄÇ ùÀ?2ðOqëZO Õ¼WòÇ4 xäƒ+©ÁsšàÿáÔDR^%„ ©ù±4|Cy+ÂcY@M"6×0ö±bÛ¶Ž£H—T[ɬo›í0ÚZ[FoŒQ¹¹Ã™ˆ\ãn<¢6Œ̹%HP úŸŒt{=;Y–ÏP±¾¾Ò­'¹šÆ´2(ÊÀd¯ )$pMjG«i³j“iqj¨B›å´Y”Ê‹Ç,™È2òGqë^7…õïx~ÿM{{K(÷W–ÖYf2f˜ÝÄ›ãòÀDÅÆðÁ›!FÍÆ„> Ô Õ.%‚â8H¸¼»´¿kÛ‰ŒRÏæà­™")ç»-¸)ùArT¨Äº Ú\Ú¤ZÞšú|/²[µºC73çüËÁ=Ç­Hšî%å­œz­‹Ý]Ä'¶…n¼ÑHt\å—œŽ85ç‚õ¥¼º¿p-Ñû1´Ïˆîåx1p ¢Y!bxœVCódàÜÁ:€ÖÖæòâ=@Mqkwqv÷·6‰Iû$dDä´ƒK•‚À†™©CªÚ½Ä "¢\OnC€è¥h˜ðO‘íŽ*ågèÚöeŒ–øÆû»›õ›ÿÖÌòuÚ¿ßéŽ:e±¸èPEPEPEPEPEPEPXÚÜëi·,›„h¤â/1±ó“…’xèMlÖ½wmlÛg¸Š"Û ‡p¹Æüã?QùÒcG¢üFð÷ˆua¥_-ÍÉRûVÁÀ :’JAÉê@êEZðó´‰âs“ý­ü„¸Ë(¼?§]^\Ù›'½“͹tuFÆ2yúŸ©'©$že{}}у+jÙ‚<±R3^¼'Åßò6êõÜ×»W„ø»þFÝOþ»š"&{åÏúÕÿ®iÿ Š­4\Äb¹'…±º93µ»óê*ÍÏúÕÿ®iÿ ŠÂ¸ñN‰iq%¼úŒQËtläÊÎûF_OüˆÿüUÚ2úäGÿâ«MÖ4ý`Ì4û•¸òT4…‚p2ÏJ½F \þÑ—Óÿ"?ÿGöŒ¾Ÿùÿøª§EçöŒ¾Ÿùÿøª?´eôÿÈÿÅU:(¸?´eôÿÈÿÅQý£/§þDþ*©ÑEÀ¹ý£/§þDþ*í}?ò#ÿñUNŠ.Ïí}?ò#ÿñThËéÿ‘ÿŠªtQp.hËéÿ‘ÿŠ£ûF_OüˆÿüUS¢‹sûF_OüˆÿüUÚ2úäGÿâª\ ŸÚ2úäGÿâ¨þÑ—Óÿ"?ÿTè¢à\þÑ—Óÿ"?ÿGöŒ¾Ÿùÿøª§EçöŒ¾Ÿùÿøª?´eôÿÈÿÅU:(¸?´eôÿÈÿÅQý£/§þDþ*©ÑEÀ¹ý£/§þDþ*í}?ò#ÿñUNŠ.Ïí}?ò#ÿñThËéÿ‘ÿŠªtQp.hËéÿ‘ÿŠ£ûF_OüˆÿüUS¢‹sûF_OüˆÿüUÚ2úäGÿâª\ ŸÚ2úäGÿâ¨þÑ—Óÿ"?ÿTè¢à\þÑ—Óÿ"?ÿT/m4íJa5þ•eu*®ÀóÆ]‚òq’zr:}\ Øšý ºWþе6–vÍoecmi>öXh-Œgê(¸xO‹¿ämÔÿ빯v¯ ñwüºŸýw4â&{åÏúÕÿ®iÿ Š‹À_êµÿû Éÿ¢ã©nÖ¯ýsOýSm$ŽÅm­Ò?1Ì’gÜõc†äð? ;P†lêßêýs?úWø¦ ˜|ÍRVšm2ÖØÉ40jZIMÌì¾_úÖeÀ Å@)ÁùŽ; o^TeeŒd³AîO ¬›L¼¾ŠöëN³žîySË´‰ƒ‘µˆÈÁ9ïCzÊǬk–zi0¾šóX»µ´O+s©-ÃÛåQ ÛÊmÞÆ }âí^ßIûTV)%Í”ϨۢÆáQÔâp#-åI¾qB 7uSèúeÏÚ¼ý:Î_µìûO™·³îïÈù±Û=)—Z{¼zMÄ6˲å¶GX—aA(À= 9¿ù”¿îcÿÜ­ â­Mm4éäK6þضŽ{UX™~˾X#þcæãí*r<¼ì#ß/]ö;_'Éû4>W™çlØ1¿~ýØþöÿ›=sÏZ‚=L‹íž^fŸmÏÚ¶À£ÏÎs¿›;›®zŸZæÖòþÃÆ’Cu%³É=¥”s^Z8W÷×8P»˜†nIm¹ï’¨ÝR‡GÓ-­^Ö :Î+y#ò^$U2Çi`®]Î:|ÇÔÕÚ(¢ŠQEQEQEQEQEQEQEQEQEQEQEQEQEQEá>.ÿ‘·Sÿ®æ½Ú¼'Åßò6êõÜÓ‰,÷ËŸõ«ÿ\ÓÿAÊê>,{Õcþľ-§Z=ÛÈòB#dB‡!ËaŒLË‘Æ@®ªçýjÿ×4ÿÐEs:Æ…u¨ÂAåI ÿhé)eòF×-Ç ûÕé“ÁãÕ ÐM{G—O—PV±{(›d—+r†4n8-œóÌzÓäÖ4È¾Çæj6iöÜ}—tê<üã9ù³¹zg¨õ¬-{Ã7z–´u]mÌq ©-ÙÙʰ2F7 ÅÀ ŒçisL³ðÕýå”–^M™àÝΗ²Ê]<ç•¢1Ȭ$Évie|± òŽ×R°½žâ KÛk‰­›dñÅ*»DÙ# ùNAëèi’ëdÍ4ºœqA9Þu?œ§ÌsÇά¼÷R:ŠÂð¿…çÑ'€Î…¥§Ù"˜ßO;J¹L°G;!Ë¢îê /ÌÉü'1Ó"X~Ó­s¨²Åq%·æ4¡CKÞ¬EÉçfÞ‡4ÐI¬i‘}ÌÔlÓí¸û.éÔyùÆ6sógrôÏQëDZÆ™4“Ç£g#ÛȰ̩:“³mUaž·Iâ¹û? _ØÞYIeäÙž Üé{,¥ÓÎyZ#ŠÂL—aæ–WË!<+©µ¦f¿ØöÑÁjË+7Ú¶K€¿Ê<¬ý™F™äó·æêŸR°ŽsÞÛ,Á‚ÚU ”c=s$÷ÚúŠ„ëÚ:¥Û¶­bÍ‚\±¹L@ÄíùùNA÷¬]3Ã×ÿð”¶¹©Áb¬ZwHâ•¥13Çm*̋Π“<rjðÞ¨ú—¦È–Ähí·x¯æ…®•bx²Ìˆ† …/œÎh¤“XÓ"û™¨Ù§Ûqö]Ó¨óóŒlçæÎå鞣֧’òÖ)9.aG]™VpÞÅSö˜=HÀ®bÏÃWö7–RYy6gƒw:^Ë)tóžVˆÇ"°“%Øy¥•òÄ€ÈnêþþÖÕþÐ×SCo-°Žo&M®7ù,¼ò™¤|žC¤D}ÓõïÛèñ;à ^Y¶\(¤WG î¶e9dœU€»©øŠÃGÕ,í5 ‹kXn`šAqq:Æ¡‘£yêHž¿Ãùr·ÞÔî­äÄöbyíŸÎ˶Ñ<‘Þù›~\ìó.×çh9äsÓê¶šŸöÝŽ¥¦Ág?‘m<GspÐÿ¬h˜U?êÏhAõ+µ´ù/m’öUß³J¢G^y œ‘òŸÈúUiµË[MJöÞòHmmí- îf”"~õä@p1ŽsÎïÏ›Óü>qmôº¶Fµ‘¦{Éâ ÐGôu;“`ÌÜ ÓÔô;ù|HºÍ¡¶v`1A,Œ‚FU¹F Á[hÅÀ €rTŒ æ€5äÖ4È¾Çæj6iöÜ}—tê<üã9ù³¹zg¨õª¶>"°¸ÐmuK»‹k%–Ò©VYÔVQòî' ÆH5Ÿ¥hšž¨5Ôkg?ÛãéZvO#3Í1Øv3þ>yÙ€ñ» ™‚¯ìô]*Ê)a˜ZysÈ¢î[wiÖ 2 ûl‚FFÀŸq€Œ ×Õµw‡ø³•ä÷…mWqáMR 'PµÓâ±fÔìÒešî` bó>àì®Ò’nIÛ’¹ãv±ƒí^uÏÚ<Ÿ+Ìgòó›;óü[÷ôã{æ€&¢Š(QEQEQEQEQEQEQEQEQEW„ø»þFÝOþ»š÷jðŸÈÛ©ÿ×sN$³ß.Ö¯ýsOýW?±©\Ïv¶Z#ÜEm;[´¿kŠ0XNz0üë ¹ÿZ¿õÍ?ôX~ÿU«ÿØ^oý ¶ëßô-·þ mÿøº>Û¯Ð¶ßø1·ÿâë#Iñ=Õî·öF»Ó®7^ÜÛ=º=ªFÒ–C½²§ËQ÷TfUç $ü?<72¬øHc¡ób>j—T‡>^YÐ~÷f7s­´_íº÷ý mÿƒþ.¶ëßô-·þ mÿøº‚ãÄñÚ#5Æ™}†´Þ)ò‰´‡,¾$;¹Âo8^€ {âË ,êÅraÝAµUwnfgïЈQœs€ þÛ¯Ð¶ßø1·ÿâèûn½ÿBÛàÆßÿ‹¤^ÝÃm›}$Ž«$€ª!‚'fTwÀá¶1Ú`̪p*¶…ã-'Ä7Ïic&癣>dmæF°ŒÌŸyx+sÓ†À¯¶ëßô-·þ mÿøº>Û¯Ð¶ßø1·ÿâëZŠW@dý·^ÿ¡m¿ðcoÿÅÑöÝ{þ…¶ÿÁ¿ÿZÔQtOÛuïúÛÿ6ÿü]m׿è[oüÛÿñu­E@dý·^ÿ¡m¿ðcoÿÅÑöÝ{þ…¶ÿÁ¿ÿZÔQtOÛuïúÛÿ6ÿü]m׿è[oüÛÿñu­E@dý·^ÿ¡m¿ðcoÿÅÑöÝ{þ…¶ÿÁ¿ÿZÔQtOÛuïúÛÿ6ÿü]m׿è[oüÛÿñu­E@dý·^ÿ¡m¿ðcoÿÅÑöÝ{þ…¶ÿÁ¿ÿZÔQtOÛuïúÛÿ6ÿü]m׿è[oüÛÿñu­E@dý·^ÿ¡m¿ðcoÿÅÑöÝ{þ…¶ÿÁ¿ÿZÔQtOÛuïúÛÿ6ÿü]m׿è[oüÛÿñu­E@dý·^ÿ¡m¿ðcoÿÅÑöÝ{þ…¶ÿÁ¿ÿZÔQtOÛuïúÛÿ6ÿü]m׿è[oüÛÿñu­E@dý·^ÿ¡m¿ðcoÿÅÑöÝ{þ…¶ÿÁ¿ÿZÔQtOÛuïúÛÿ6ÿü]m׿è[oüÛÿñu­E@dý·^ÿ¡m¿ðcoÿÅԚƯag5ÝχÌpB…Ý¿´-Îö “ôÖíaøÇþEKþ¹QO@7™=¡ñ¸¢±ä@8ýkÁü]ÿ#n§ÿ]Í{åÏúÕÿ®iÿ Šð?ÈÛ©ÿ×sN;‰žùsþµëšè"¹]/Sû!Õ¢]?RºoíY˜›K7•Tâ,3Áã9üÅuW?ëWþ¹§þ‚*¿ ŠXõæ’$sý­ Ë(?òÎ:HËÂ!b1h¾$Ib¹–á&{ïl†Iü¸(ÄãvS÷”0†Ú)l­M½¬>/Š$ŒCj£NȵŒò¨1á¸P¹;œI'­–à[éz\ÒÝ\µÆ£²8ÄpA´Hɸg)Âñ[úaŽî Å”1\@þ\ªª –Ú#؆Nœõ¤ítÕÇÞÏcÊSF±†ÌYÛi'·¶x ½ÔQi¤-ÔeаÙòe—ý^Ìo `Á¤A¨ "’ÇÅ©fí<‚Ñ4ï‘d‘$`Leò|éˆôÀ½ xŸ@ÚÑn^E–hš+}:K—_.Wˆ³Uö«4o´¶7`ã@ÔÕ§°Ñ´kíRâÕZ +y.$XãRÅQK3œQWa\óÉçyuDÔ!Ó¼Ok6ÔŽe‹M%gDbÊ­½~Wiù< G¥¤íHôÿKobkylË‚1Œ*…@[(Ë0¯-ŸSû%·üûÅÿ| Ï´½Ó¯5;ÛíMg)ŠF6ÿ!"8¤á†@âdÀ8' €B“E‚ç!ý¹'ýµïüÉþnIÿ@-{ÿ²…wÿd¶ÿŸx¿ïGÙ-¿çÞ/ûàRå œöäŸô׿ð['øQý¹'ýµïüÉþÛ£éÒj3X,q¨bŽiÊû¨åœã˜ßò÷cì–ßóïýð(å œöäŸô׿ð['øQý¹'ýµïüÉþÛÛ¾w=Ü0GÉi(†qåcc”Yäsòºž=}sQé3Øk:5Ž©oj«í¼w¬‘¨`®¡€8ÈΩ£”.qŸÛ’Ð ^ÿÁlŸáGöäŸô׿ð['øWöKoù÷‹þø—¨êºF•©YØÞB¨÷hZ7‚¹óaˆ)Ç9/qc©$bŽP¹ÊnIÿ@-{ÿ²…Û’Ð ^ÿÁlŸá]ÜqZJó"Û(1>ÆÝPNÐß)# 0Ñ‘œŽ €M¤픂êŸ$ÎY‚ŽŒžO@2N&ŽP¹ÂnIÿ@-{ÿ²…Û’Ð ^ÿÁlŸá]ž­=†£_j—ªÐY[Éq"Ç–*ŠXœ àzйöKoù÷‹þør…ÎûrOúkßø-“ü(þÜ“þ€Z÷þ dÿ ìäžÂ-fÛKkUóî-æ¸F®Ð±´jÀ÷Îe\qØôîjÓØhÚ5ö©qj­•¼—,q©b¨¥ˆÀΨ£”.qŸÛ’Ð ^ÿÁlŸáGöäŸô׿ð['øWw V“¡t¶P²|ð9V*x`28=Á“ì–ßóïýð(å œöäŸô׿ð['øQý¹'ýµïüÉþÙêsØiV©q=ª²=Äà$jNéeX”óŽ78'Û=zT–§jzuµýœqIkuM ùXÜŒS‚22ëG(\â?·$ÿ ½ÿ‚Ù?ÂíÉ?è¯à¶Oð®Þýôí3N¹¿¼Ž(ímby¦+;QA,pN=*ž·ªé† õU •äS"ÂF&f`9ÆØ› '8âŽP¹ÊnIÿ@-{ÿ²…Û’Ð ^ÿÁlŸá]\:¾‡pšsÂQ¨Û‹«]–®ÆH‹F»ð*š<ç“€ Ÿd¶ÿŸx¿ïG(\à?·$ÿ ½ÿ‚Ù?ÂíÉ?è¯à¶Oð®¿S¿Òt(]BÍ$¹) µ›ÜHÀc-²5fÚ2 ¶0 ('$dÒïtí]¯½£'ÙeHŸÎ·òÉ-r”üÃå•A Ž(å œ‡öäŸô׿ð['øQý¹'ýµïüÉþßý’Ûþ}âÿ¾d¶ÿŸx¿ïG(\à?·$ÿ ½ÿ‚Ù?ÂíÉ?è¯à¶Oð®î­'Bél dùà(r¬TðÀdpz‚25'Ù-¿çÞ/ûàQÊ8íÉ?è¯à¶Oð£ûrOúkßø-“ü+¿û%·üûÅÿ| >Émÿ>ñߎP¹ÀnIÿ@-{ÿ²…fx‚öëSÐ/l­ô-sÍ–=«»N” þUê_d¶ÿŸx¿ïGÙ-¿çÞ/ûàQ`¹Î\ÿ­_úæŸú¯ñwüºŸýw5ï—?ëWþ¹§þ‚+Àü]ÿ#n§ÿ]ÍÜï—?ëWþ¹§þ‚*/ª×ÿì/'þ‹Ž¥¹ÿZ¿õÍ?ôUü ɼX¸?ÚÒ•Ùåœ~†ˆî Æ[¸o£ðú¾©¦CkbÎûço˜¨F͹ÀëøWIk­ÚYi"Ö‹ý¢ÒÑÞá͹YRÞ6`¼àžëÖº³GýéïëfûÒÿßÖÿ¦ÛI>„¨¤Ûîp³h‡‡´2ËM¾mnÓJ†Ò=VÊñb¶ŽdM¨fS"´±£å¶´n0Í…%™Nˆ¼=¯^h³hvÚ4ò²Ýê·Kv&„BââÏ-F\>í×§*!¹ÀúWÙ£þô¿÷õ¿Æ³Gýéïë<õü53În-¼)ö]KŸÃø¶_µK€Ï嫘NZ[có0'ÈÎ2©œxvê ©¯¤ðþÝ&[»dKܫˤ¢Ã³vÎL¦3·åë‚ õ¯³GýéïëfûÒÿßÖÿó[ï ßÏkþ‰áí°µÜ’XiqZËah­)þ‘ÿ—çI]Z̾c fF¹¦øGQ‹Æ77ò¶¥ ÃÜ]HÚŒmf#hdó<¤ å´ò É/îÁ#![¾û4Þ—þþ·øÑöhÿ½/ýýoñ 'Tð¦ Ú¥ôñ /õ ÙXëSù)-ŒÃí{2(ÎE%'å;€ÆN<~ž æ8t}gÈ{ˆ]téLòätY2e·d-Ü™;üÆ(˜Ùå«W§}š?ïKÿ[ühû4Þ—þþ·øÐšÞø~]/EñWš-ŒZ†³i „7ö1¢Á M ½¢À2D«”ÀR¡0yo–¶5öOrº_›u&¡kqi«îýÕ>l‹y«¿ËŸåE*|îHÜøì¾Í÷¥ÿ¿­þ4}š?ïKÿ[ühÌeÑ´ÿ xWÂíâ .ÒâÊ/"úÊîâÜî½d‡l„ÜH±±EŠT1*¤*™Äz6‡q¬x]íÞÃÌk=?C²º±¹@¯#Ûº–=­ÇÌ“ªÄ|ÛƒmŸRû4Þ—þþ·øÑöhÿ½/ýýoñ 1Ôì-4[Éu={D´ÿ„~[‚°éwRÚ"«µ­¢ÆÁe‘bÊy Ãdn;ARMð}ô^†y´ÙP{ÐLød‚±2ü¬~BÜ0¼µÎpµéßfûÒÿßÖÿ>Í÷¥ÿ¿­þ4æ¶:-ÖŸsé¿eþÐÕlD‘@/gh®¥{™ fY2°Fá‹1Ü9.lOáIõNêÛIÜ¿kŽìÜÞ¥¿Û. wqMåC2?0숅Y‚•>XÝ·„ô/³GýéïëfûÒÿßÖÿóY´;»ïO¬êÞŸP±š[’–s›9^2ÐØ¢¹ .ÎL‘è3DÞÕ†…ªYj:?öÆ·q¥5½®±¾)<–û ÄÑù’²Ê»¥Y[…Ú|ì’ lzWÙ£þô¿÷õ¿Æ³Gýéïëy,žº›]×ìO‡þÑ«KhïcûƒýœÓ__¼Sofœ2>c ÃoL€+SPð¦«uw¯K #Žå÷Kyu±½¸_´Fí 2†`ð‘ÔG:Œe’™ èßfûÒÿßÖÿ>Í÷¥ÿ¿­þ4Àèz<šv£ i‚ »m—·:ªAvÐ)oövP–ê"Œ™.‚®Aذf+Ymàk„ðö…§6ƒ:[éñ<¶Ö1X?Û.vB¢è,ù”„om²üÀ W©}š?ïKÿ[ühû4Þ—þþ·øÐšßø/V¼’æÖ;O>â})ìäÔµvŠãËchbÚuÄÃ.Ù}ñílÈÀ)8{¦–uX/ô½DþË’ÛÃW°®œÂð÷oˆÂùlc6Òó o^å¶úÙ£þô¿÷õ¿Æ³Gýéïëyî¯ámdøºegæéÊ·qËæ¢ùo%ý¤óG‚wyK»þšlmדÂWrøfÒÁ´ ẂXN¯< fﬕŠE.<ÒË/ïYdýøSü@o¯Jû4Þ—þþ·øÑöhÿ½/ýýoñ 7DÒu/ ª^G¦ßj =¢[5¨žßÏ· ,òGžc‹nÙö•B{WzüËŸ¬xTÕ$ÔëEž]>óP[ϳÇ”×*ÂÒÞ58¸-PVulÙ ´•$ŸBû4Þ—þþ·øÑöhÿ½/ýýoñ 5°ðηæ[M{a}-÷öRE{;[=ÌN-elgó7Ç!’|Á°’ìsóôž±Ô4]6+_ì+KX&½l¬1Cm$Pˆ¸–dˆ´o)t |² § ‚£¦û4Þ—þþ·øÑöhÿ½/ýýoñ !»ðÞ£¨xX.¥ÈðDú„š,štVjawº™£}óà¤E|†  ãqÏÜ5Ú7‡µH5‹Ç²h ­¯Ÿ¥¥ÀýؽX6ò§~Õc3Ä]àå-u_fûÒÿßÖÿ>Í÷¥ÿ¿­þ4Æø C»ÑuT ë6X­Ì0Ý¥œy”|Æ iò ©ˆn#qÀ!F;ЇìÑÿz_ûúßãGÙ£þô¿÷õ¿Æ€&¢¡û4Þ—þþ·øÑöhÿ½/ýýoñ rçýjÿ×4ÿÐEx‹¿ämÔÿ빯|¹ÿZ¿õÍ?ô^âïùu?úîjc¸Ùï—?ëWþ¹§þ‚)<;Ñb¿<2ËǺÇÌ6eUBýÓŸ»ŸÇÛ%nÖ¯ýsOýT57°Íßíhýbÿ¾›ÿ‰£ûZ?X¿ï¦ÿâk Š|Ì,nÿkGëýôßüMÚÑúÅÿ}7ÿXTQÌÂÆïö´~±ßMÿÄÑý­¬_÷Óñ5…EÌ,nÿkGëýôßüMÚÑúÅÿ}7ÿXTQÌÂÆïö´~±ßMÿÄÑý­¬_÷Óñ5…EÌ,nÿkGëýôßüMÚÑúÅÿ}7ÿXTQÌÂÆïö´~±ßMÿÄÑý­¬_÷Óñ5…EÌ,nÿkGëýôßüMÚÑúÅÿ}7ÿXTQÌÂÆïö´~±ßMÿÄÑý­¬_÷Óñ5…EÌ,nÿkGëýôßüMÚÑúÅÿ}7ÿXTQÌÂÆïö´~±ßMÿÄÑý­¬_÷Óñ5…EÌ,nÿkGëýôßüMÚÑúÅÿ}7ÿXTQÌÂÆïö´~±ßMÿÄÑý­¬_÷Óñ5…EÌ,nÿkGëýôßüMÚÑúÅÿ}7ÿXTQÌÂÆïö´~±ßMÿÄÑý­¬_÷Óñ5…EÌ,nÿkGëýôßüMÚÑúÅÿ}7ÿXTQÌÂÆïö´~±ßMÿÄÑý­¬_÷Óñ5…EÌ,nÿkGëýôßüMÚÑúÅÿ}7ÿXTQÌÂÆïö´~±ßMÿÄÑý­¬_÷Óñ5…EÌ,KpÊÒü¬UÈï…½x'‹¿ämÔÿ빯v¯ ñwüºŸýw4â&{åÏúÕÿ®iÿ Š†¦¹ÿZ¿õÍ?ôPÔŒ(¢ŠQEQEQEQEQEQEQEQEd¯ˆ¬Ý¤Ûj³¬rÍ'÷¢ÿ¿«þ5…wâ+£Ú\[^M ܳÅêZ–e‹æ8 ’pzí#Š×  ¾Í'÷¢ÿ¿«þ5^âHí%·Šic\9H•\1b±à{ÏOÌS«Wÿ‘—ÃßõÖýÔ¹^âïùu?úîkÝ«Â|]ÿ#n§ÿ]Í8‰žùsþµëšè"¡©®Ö¯ýsOýT4†QE (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€2ü9ÿ 1ÿ_·ÿú[=jWtÿÚ<ÐiÓh‹f.n%‡Ì’Måd™åù¿vF~|pqÅ'Ùþ$Ï΃ÿÿSÛQ\OÙþ$Ï΃ÿÿQö‰óó ÿßÇÿãT¬•¾‡~–vZ,¦ØiV-Ep²1žU…•£VM»TåWs9Úp«¸l“Âz׆´‹-/Ì…íc¶]à˜çã~ÒǦśœ9ê “ö‰óó ÿßÇÿãT}ŸâGüüè?÷ñÿøÕ0;j+‰û?ÄùùÐïãÿñª>Ïñ#þ~tûøÿüj•€í«‰·ÿ’Ëqÿ`‡ÿÐá£ìÿ?ççAÿ¿ÿÆ©úâ(¼a&¹®I§6ë&¶ÿE‘Ø’]$Pþ”ÀîfÿUoÿ\Ïþ„Õ gjk­:-…¾›öxÓhiæpÌrI8 ×OL÷À©¿Å_óÃFÿ¿Òÿñ4€Ü®~ÓOÖ¬4ÔÑm œv[{m@ÊZhÀLFÆ›Y‡ÊÎ`œ íoñWüðÑ¿ïô¿üMüUÿ<4oûý/ÿ@úo…µ(|E§:à QÉÎ¥=ã±]!!åPG3§ËÓ†=zÝÒ´MOGÕ'º‰lîòG£1'Úg•Y~C½ŠÏ‚Ð õ9È·¿Å_óÃFÿ¿Òÿñ4oñWüðÑ¿ïô¿üM00l|wkœ'ÉÍÙ£Žg¾¸˜Ê‘Ï ŒB?ÉD?qC 7¿7uX{üUÿ<4oûý/ÿFÿÏ þÿKÿÄÒr°õù|=ÿ]gÿÑ-FÿÏ þÿKÿÄÔkc®]ë:uÝúi飻~âW,w!^…Gr;ÐA^âïùu?úîkÝ«Â|]ÿ#n§ÿ]Í8‰žùsþµëšè"¡¯—âWˆ¥¹–Üg€#¦ÂÆñüöƒþüŠ9Xî{%ãð±¼Cÿ= ÿ¿"øXÞ!ÿžÐß‘G+ žÉExßü,oÿÏh?ïÈ£þ7ˆç´÷äQÊÂç²Q^7ÿ Ä?óÚûò(ÿ…âùíýùr°¹ì”WÿÂÆñüöƒþüŠ?ácx‡þ{Aÿ~E¬.{%ãð±¼Cÿ= ÿ¿"øXÞ!ÿžÐß‘G+ žÉExßü,oÿÏh?ïÈ£þ7ˆç´÷äQÊÂç²Q^7ÿ Ä?óÚûò(ÿ…âùíýùr°¹ì”WÿÂÆñüöƒþüŠ?ácx‡þ{Aÿ~E¬.{%ãð±¼Cÿ= ÿ¿"øXÞ!ÿžÐß‘G+ žÉExßü,oÿÏh?ïÈ£þ7ˆç´÷äQÊÂç²Q^7ÿ Ä?óÚûò(ÿ…âùíýùr°¹ì”WÿÂÆñüöƒþüŠ?ácx‡þ{Aÿ~E¬.{%ãð±¼Cÿ= ÿ¿"øXÞ!ÿžÐß‘G+ žÉExßü,oÿÏh?ïÈ£þ7ˆç´÷äQÊÂç²Q^7ÿ Ä?óÚûò(ÿ…âùíýùr°¹ì”WÿÂÆñüöƒþüŠ?ácx‡þ{Aÿ~E¬.{%ãð±¼Cÿ= ÿ¿"øXÞ!ÿžÐß‘G+ žÉExßü,oÿÏh?ïÈ£þ7ˆç´÷äQÊÂç²Q^7ÿ Ä?óÚûò(ÿ…âùíýùr°¹ì•á>.ÿ‘·Sÿ®æ´¿ácx‡þ{Aÿ~Esw÷³j7Ó^O·Í•·>ÑšiXMŸÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/lock-dialog.png000066400000000000000000000237071203611042400313510ustar00rootroot00000000000000‰PNG  IHDR˜˜ðYc pHYsÄÄ•+tIMEÕ 4(C°¢%tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝ{œ%e}çñßsnÝ=×î¹0ãŒ#ÓÝsItÁPð’`¢ëª³l¯ „|…¸š¼`Ø}-®’——eÕ‘(¾ÜlVÑ5‚/YGšh"™[ÏÅT`˜KÓ}®UÏþQ}ªkªêÔ©ªsëçôçýâ5œSç©§žªSõí§êÔyŽÒZ‹Çu×Ý&0¿}úÓ·{Ÿ*7Èœ=séÒe+W®êAÓ ™cÇžš:uðÐñÄÙl]wÝm/}Éo¿rÛËÎ9çE"’Íf{ØPhIJ,yì±_~o÷O~öè¿:Y¦´ÖNŠ]úšó7oZ73]¬TªÓEkf¦ØëÀiŠÜ!KIDAT-Z<”-ò‹í?ðÔ®oÿÈɲœˆŒŽnpRì׿zöÙc¥J¥rêÔt¯ !–-[\(V­ܼiÈù§¦NˆˆÚ±ãÖK/¹äU¿äÙg§ž~úøôóÓÅbµ×M€†††ò‹—,>㌑U«–~÷ÿ=ºë;ßɉÈÚu+ž}öÔÑ_>}ü81Ýpø7OŒÝ_Ò¹^µ}ãšNMU¦¦*åRED¯]·BDrÎËÓÓÓÅbup°ÐæÆ@À“Çž»ÿ¾·ïx½Þ¸¦¶a¥,±gïŸP"þ%'%wô˜:ü›¿½û¾gþýŽõ+׉H±Xžží{åD¤0P8y¼Ä'•[-ÈåIDATºcõçî¾òÍÌœ,ÉÏŽXåJœY²{~%"W¾ù‚>wwö–ÿêL*"_ºá:«T®TmeÙ–W¹F‹YcÖ®–BþÈo¦ñÔ©§ËºR±Ê•ʳ§ª~Y^±*wö‹W®]»¤“k  oY•šdtµ¢ªÅÚCG ç[KIDATž‘+Î\ÿùk¶×êj"ïúì}ÎKϼÿ}b[¶Öb[¡µåDD)‘LF‰(ç Û`Y¯È/(VOTçË•j¥R)•+¥r¥X,Øwòù狯¾dlùòAQ¢´h%Jämo»BDþî?”nݾñûñ‹½å–éfï{!Ýf´WU:FkQJ‰h­•ˆ(¥g7·Uµ¥ R+;›]yòŠ3×ßûÖ?tžNüŸ/:)&"•Z9k‰•©Ú"’ÉfD‹(±-Û‰¯œˆd”ÊdT6—U"Îg#'µmמy®ô|Î*•ªÅ™r¹R)—+ÅR¥X*‹å™Rù±ÇNž±fÑ+·iAûIDAT‹8A¦Ý½axÑà©Jš›ÑîûüÝ­ÌÞ÷8Þ:†¿£´èzÉý@RjÕªÒ9É)±2OÞüžõý¸¸Yö–«'¾ü%7Åž¼ù="b)m•µ®ÕD$—ÍŠ­´hQJf{dÐ"ª¾˜¼Ts‹ EQ¢$—Ï,Yšß´eUµZ-Wœÿ*•Jµ\©f³Ù|.+N6Šöhù\¦•Uoqö~ÅÑÖ!ü…èœúN«D´ÛU±,Q­3"–ˆJ,Kÿpí –¬±ÛÚ¶m˲-˲lÛªYîSÛ¶mÛÎä•vRV¼m(ÌÙ·úºˆŒ½h4;4 "ß|ð«^´íßDD^qÞùÙBî÷Þ|µ®YRO«Ï}á3ÿëïî»óCw9³¨ )VÇ–èM’uÆ\/g6ÇT½+U«V%ŸÏ[–h±UFDþè›_sSLêç˜õúß‘Œ¶EIMK­Z‘B!ëæ“dõS˼òž¾ZµíÄñŸ|îÇOž˜)ðtIDAT)UŠÅÒL±4S*ÏËÅb©T.—ÊÕR¹òÇ×½ºÛè.Ø»/äós§–?øÁw…œˆüþ/–õµ¯}yvâ`^DÄSþÐáIÙ¿oÏË_þ»™ß7˜£I²ÎPtÉ:óY•:½;&"¶e×TVDDÛ×?ô 7Å&wì¿ûn©gÙ'¯x£-"ZlËv ry·s—ÉÔƒ,›‘l.§êç®JKmý«¢Ï\½xòÙSÇŽ;g”åÙ3Êr¥T®Tʵ λìÒsò…Ül?Akïù_!?×#Û¶íÕ»w?âN¼àü‹¬ªå›èuÓŸÜrÑ…Ûþò£ÿýÜsÏ;÷e/kiCör¬3ø Ñ$ÊÒIDAT!JkqNô”(ç SÏ^2³meÛ¶ÖZ)uãú)¶oâ?:ÿn¹÷3Rϲ».{ÖÚ²f¯ã Y={ñM‰]“zLå Þ¯‹ëš¼.Z#"e2™œú§½OÌKÅR¹Xª”Ê•r¹vá…cïzÕÆ3W»§¿N³Ý* s÷ý_}õ[wï~äà¡ÉEÇEäõ—ÿþÀPáïܾ{÷#ÿòèO_û†Ë¿ò•ûW­ZµmÛÅNùáå#ÿöïøÑ?þÃ}Ÿ¿wëÙg,ïÔfÐYÊÛ S³3´ˆ”jvN‰–ìm?Ü妨ã׼ۑǯy÷ÙŸýkyèÈ“Wo½ý—XÖìU²B!Ps›ÚIDATïÖW­XâÞG60óÜê¡EÔÀ–Õ3#Ó2”»lÙà¹g­½ï«ÿx¸XÊgeëo¿pÛ¶­—¿öœukGê—òDÄíωˆ\qåÅnÓ{lÿk^óÚ;þÛ‡ÿø="òñ}ò¬±s–/yå+·}úSŸùÚ¼ï/n~ÛÛÞþÊ vèz¿QD††ÿóûÿüo¼üÁ¿ÿúök®á2Ù,.åtûW‡œ~ÇÅé±&5-ÚÖ·Ÿ?½ëßܽëšs>ÿY¹ýü‹k¶¶êóòõ;¾”U­ˆ3°âŸÝ2±lxØYÌìý·õû0M˜íÎ-ʽ;¤~÷ÆäãG|­?ûLyþÔôožU¤5ÿIDAT|VD^°áŒEK†œ—ŠÓ¥ç§fNŸZ6²tÅêåÙl֙ݙ¥Z©þrò©Õ/X¹l˜ïB‰Ç[Çð¢ƒÜ½vîVÓo_yõÖëìj5“ɨl®iGÅÖ¢­šmÛ™|~ïá§^óÀÝh:uâä‡ï¼wöÔÒùq¶k5»D¥ë¿MR_Š“asѦdö¦­”ÒÚ¹dúâ—Ž‡^qX±jxŪaßÄB!¿|déú­q§œýÒMÞW½OŽ!È:Âíã8'mJ‹sw„ˆL—-‘ÌØ™ì\W+‚mÛE;#eKê§–N'jîb&+ùBþôÏIÝ~—óYƒÓUS§Ý¿ï~yê´½`öš:£­ö…bIDATCØe;Äýr’÷~{ç¿~º²öŒBU”Ôì¨*æ(g.™½»k62Y÷Y>Ÿu–XÿäRÜ8]¿þ¥ÜSMUÿ0Bdî+–³_ UŠŽz§h¸NaËv„{¢æfÿ@!ÿäOt¬Íà÷º‹_,ÿMŠKå²7¯V®:CÜ÷ì{º-€nºÈdöï;t虞¶’]}Ñ…¿%Nåò¹á‘UÇúøÞm¯±Üñ_ƨOIDATÁ{Î=ïì\>'"Œ_ÀxãdŒG0AÀxãdŒG0AÀxãdŒG0žÿ7%#lÝà}zøÐÑÐ2¡ÓçSÚ ŽA&  z+YùxûhnÆ9§n÷éáCGƒ½¡`±FOUîQCD;ÉhÀ\É‚Ìrz.8ƒS¼CSÌ;%t.ß¼ÑÓ#jÀt=µô]VKQC:ÁåF#Ô£µtjÙT¯‚`”.Ý~‘´‹ÔååöªyÚ"å52iÐëñ^ww7*ì›%Ñ\âÔü|€¹Yð˜÷N ^þÎ+qžúà¶ IDAT4š]aœv0 wö0AÀxãdŒG0AÀx n¿xx׮ε¼&&¶9üDÌÂÉnˆýù£»“·’Ù¹óÖDå×ò#»'é,²ãÏ=µlùêl6³ü±cO‰X‰ÑÙ/€ˆd³ùRiºR)ZVͶm­m­µm["¢µvþµíÚòå«—,)—gò‹ÕOè†J¥X( Ú¶mÛ–ÖÚÉ/]gÛ¶55u|É’‘J¥( ƒŒO-tC½/¦ë)æ„—3Ů皈H¹\LZ9=2Ýàé‹ÍÅ–3Å-£”‘jµœ´ò”=2uºt•´¢WË£Óm›Ï|>º~IDATëÞMM·C»¶R£ý<´þ.¼;1ëŸoû‰m[Nÿ˲wï§kVÿoV­VKZyÊ sOq=çº]s¡=y#;½Az²ÁÓic”'6ÝmÙPJ)ÏÙPóú»ðî‘nûÄ×¾ãÈ9£Ô"²wœÏõ~§mÛIëíÆ©¥³´ÖîßKŽDÓã¼INáÐYÕÝx§¤û i=ÁWã/×Wƒ·Á¶E¯Wœíï{5ÎûÒtÚ²ý£ëñˆ³Ÿ¤hhm‰öCIµ¾âyS$ð¾W6Ýö‘°ý$ôqÒUrÎ"~âž=»Ó''Žz«Õ:quãb¿÷ø÷¾7Þ¿uI§ÇùQÈWrIDATáí3úÞÅÐú›6ÞyÜYšÖãm@Òå6]ßøÛ3Îö÷í¸qÞ—èÆK›¶D=¶ƒx¶yhÉøío´è˜5„.7þúúþm´Ü¤Û'z?iô8þvkº^nŠmÚ´Éypðà¡FkS÷>µ m¢òˆ3=º¶ÎñîIÞ‰ítS/81b½"à«*t‡Ž¨?z‹Åi§¯þ.¿ÄoFÛŸî}Oº“„š'o“Ô÷açŒRD¶lÙª”wž:YV¿R–¸Í=¾ýBŸ®éôy%ú/|h³;º^I{â¼/m9̺¬Wí7bî<­µ½eËVÙ²ekýüQŽn‘ÑÑ)Î(]¦ÞG–b/»øèIDATìèŽZy{–Žþ1S¾ÅuiצH]‰É›B[V3¢’Ôõ×cÜÞ¼y³“Yº~)ctt£sOFê”Oy±ß{¾-ͺ¯ÊsEÉû8xœëúYtÓéÚsÅ*bÑ:ì€\O‰Ùxöøïn¢Fë§ñÞÂq¶g°=qʇ.7¸è8­6z½’ÖÓh½¤ñþ™h¹¾JBëiT¿wzÒ÷ÝÅý·Q“íŠÞ2M;_Û­Ù{|…ÖŸ‚Ö¶·óÖßOÙ)Kd‰VÆ×Ö8õÄ™³ ¡Åâ·?t‰ÁM'&]nDù˜õ·Òž7Z'ª Î’t½Ú²ñ£_J:½éÒãï?­oßK-îºA2êIDATÎýJi_Ê»}1O®%îôqgÿ‚–´g¤6<|ÆÔÔsž]N¹õ}϶­eËVŠH¡ì‹–B-p„ºãèÑ=6œµt銦%÷ïÿéºu›ÆÀ¼32²fÏžMOŸ²¬Z­V »¦2™ì¢EK6o>¯X|>iý°€ôäÀbyÈVùÕkkMý–ºlF©L&›¥2ι¦R÷¬óÄI+?”,ËL½ý\ãdŒG0ž‘AÖÍïš$ý¢ï<1¯šâûÒ`‹%bduóc—ö.«k»fÌfw¡=Þ¯²wzYý„Í•HšÛ/}AOÜ)îýöV°pD%Ñ/ùÚãýÿ½@IDATšXDS£÷ˆ;Ý#Ýh}CÇÿÎZt=M×·ézE´§ÑvHôÁFßUlô¾‡.×[ØsÓ…VÜn-îÏq¶[¢vÆ,º 1ëé?i‚Ì»WEìa¾2Áý/zz°~ Û½‚õ„¶'fŠ…¶¿Ñãèõõ¶-¸^qD×g}£×«Q{•NoÚþà\ÁöG/×[8j¡bÛ!ÅþÜ´|ÒvÆ/Ÿ®ž¾ÔÒ ±IËDÓ“Š®Ç)ÊÌÃ=#þúÆYwŸÐò¾zZÜ&‰f÷ý%kZ8b};º¿µe;G,1fOyš§wö»»ùç%iÃ)Ö+Î_yû—?Ýú¶eK:o+åƒgÕq IDAT* ™‘ûShñOeêP‹˜1QíúSßJ{LLvÛÜHºuq΂ÛÞ˜ù&ýxdÁ¿`º¾ªÁEåFÓ}‹ðNô^pgqëqོÚ¶ˆ•ò>nt‰*z}½/ù®§„Ö§IÁëJÑíñ–¸¾g½$ð–Ål¿ïÍ’Àû½Üà›+§wCi´¾öoÉÐ71t#Dïoq6QœíìÝÏ¥ÁöOºÜ¾”þÔÒ=‚CKÆŸÞt¡ã´'fý­¬šœ¾Ÿµ¥IIÛçqœz¢'FHñ¾_ myœ,‹ž+æºtsK´Ü¶¼ÔOæé5²vu†Ûxqzþö&Т…pòÕßæiµëíËF b˜IDATC½/Wª·Ø¤¦[(ûô1‚ X@úµïI0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀxãdŒG0AÀx¹^7f ™IDAT@Ÿ(.[¶$›ÍÇ,?P(&]A ã²Ù|©4]©-«fÛ¶Ö¶ÖÚ¶-ÑZ;ÿÚvmùòÕK–Œ”Ë3ùE‰ê'ÈtC¥R,mÛ¶mKkíä—ˆ®³mÛšš:¾dÉH¥R”„AÆ52ÝPï‹ézŠ9áåL±ë¹&"R.sj `^òôÅæbË™â–QJ‰HµZNZ9A lÛ²mÛ7Ñéšù&Öjµ¤•sj  k´ˆÞ³çqçI­VuRlrò Ô¯ú‹H0ïš"Ètƒsé¤ØÞ½{,«¦”ÒZ;)æüëК 0/9®­[Ïrž8p@D<ä<õ|”™A ÜD§‰ñIDATÏ+·lÙêLq²LDÆÆFÝRž Èt‡vÏÝ,‘ÑÑî­d©«&Ètƒ›VΛ7o‘ññ1ç– çžŒÔ§–Ü~ K´¶½§ññqo/¬•NA œ;û•Òõ.ØìW,ݾ˜§G¦’VNè†áá3¦¦žsRLDD”{QßÉ/Û¶–-[)"…B²/Z A  ŽݳaÃYK—®hZrÿþŸ®[·IÄJT?A ãFFÖìÙó£ééS–U«Õªa×ÂT&“]´hÉæÍç‹Ï'­?q³ËCIg0? $šâÔ)[dzhpýÐàú¦…Ÿyú”ˆŒ '[Dâ [ꎿ~IDAT¶|uü‘E䨱§”0Ÿ%ëUDŽKÜõI!qEŒô( {X´¼Í­Ð#)@d°Ó­Js¬ÑHâ¹çÍ;ØãТ¶6@O%M5?ƒ,l¤G½wïçkÁÁ=¸0^0öìy|ëÖ³êÝ1 ŒtºIi‚,8ÒãÞ½{Ddß¾½ãããn1w°G‚ è'¾pÿ½{÷lÚ´)t¸×ÁÄ·…%–.ÈNéÑY ì1›!È€þáK€­[ÏrBàÀããc¾Â)†{M!õ}d³çÞs':ã¥9ÓmÛV¾šô™ÙƒÝy2>>>99)"““ÇÆF}µp@öIDAT Ð…Ö¤ì‘9i妨¦M›œéÎSo÷Rk;KŽ}ÄMçä±V«*¥6mÚ䎕è_,Íp¯)¤¼Fæ¶oß^™íRŽ+•‘z»=_d×ÎtýÁMçi&“ÕÚÞ¿¿óÔI1ot¡IéN-µÖ¶On–MNN޹ÝHo s­è/s "ÞÝè~vÙÍ¥é+…&"““Û2F€ùÌ—nеk”ÄR^ì699yú‰ñÜiœZ}Æ›ÎÕ±6Ž’˜Búb}¤Õ%dŒ4î#úI0ÆÆFëÇ~FIL!ME &í# À|6 qÅ MæÆHÏ/ÁŠIDATÐ'R$ÀóS?ÇLd1HßiO?s¢õ†˜R$@Z•,Èvî¼Õ®=¿ní:‘uqÊ×*'óYÉucMt]“¤ t”ÄÙÄÄöεRKdG?ѹv@jÜáÀxãdŒG0AÀxãµdG7´¥f™Wk=¯ôDâ Û8ºÁý¯ ê¦Þ®Bl@W?­ L”ì+JG7>t´CMé¾~Z`!KdRÌýk쾚bJ°@Dý¾éÞJ:ê¶3¸ïÒ•l´ ¡£W0¸"Ú½ti zÛzŸ6j€wzºuáº)õÏÁÍi1P2©IDAT”1§H³DHôRðAèŒ^qJ&=2CëŒ3%æºø¦D45¢%ÁúC§'] ûÚdé·ˆ’ñ«¨Ó=&ÓõBc4¢Â¤—‚åcnŸ.HºtB ]Ö› óž¡Dÿ=èzÄ\J[Üö¥G—ïm4L˜ç|jé^:i—è+nmä»ú“ú° ΧÂÖ»f­ÔÖ^1—·˜è²d=2_–…ÀÞ2no+úòs°@£%úD|DQg¢7]PÌ:#Ê>t4º|œ6*;´k]R,h‘Ú±ãÖO|ò¶ûïßµëáÝxÿµ½nOóᣱùÐ`aºãƒ÷\zÙ¶«®ºô†ëoç+Jï—p¡IDATŒgp͇®Ð|hƒƒ ãdŒG0^‚ûÈÞµ«sí¯‰‰íñ‚2Ù ±?twòö@2;wÞš¨|âïZ~äc÷$ÀBvêD²»”vîü/IѳÑ/,ˆã~ýöÞ{ïKQ?A â_ðJO- `<‚ €ñ2Æãb?€® ´Ådè‘èªÐ1[¬“ ÐmÞäjË ~€hïÏ¡dz£,dŒG0AÀxÜG ãÒiA ³RŒ/–T² Û¹óÖ¤c¤Xà’÷šB‚ ›˜ØÞ¹v@j ‚¬£ã¢@j|j®®TIDATj ÀxãdŒG0AÀxãdŒG0AÀxãE}Eéá]»šÎ?1±¯.è­&ßµüù£»#^í—Ú ©æ_ÿÈÇîiôR‡†ôÙ8ºÁû«¾§1ç°ptd`Eï/ >t”ˆÐQí2b @—ui¨k§æœÛ_só.8%¢’¦3’¤ÀBÓþ sÎ%ÝǾÞ”q‡¾êœ1´0),@é‘E“÷ Z£)ébÀÂÔƒ_Qòe¯«ÕbÍd°õòÎþvuļ¼'¶ˆŽ|jé>v/¹ûƒWÐbFOôŒÞ^ý2`¡id)~È24Aµ­båIDAT|A=K£§Ñ3F/@‹ 2~È€¢‚Œoƒ0Ãø0AÀxãdŒG0AÀxãdŒ—,Èø>¶³|Û!Ñf‰Y¸uý*êÎ~ßá±À¿ÀÈÑy+*ÈÜ‘©9€eÁç80Ÿ%Æ'ÎÀù¾)†ä÷X´žFƒ_7ª0éÿ¾Ñžâ‡R´§Qy`Kdç‡ð¡ƒô_m±žè ãÔߢ¦›¥Q;£ÛsûhXàÚ0°bèü¾i4ot±Y§Ó§þÖîõp‰¿® A:¢÷÷ßbfAÓz:ÝÎöj½N_’r‘h¤÷‘0zbIDAT¹Ž(ÐJ=-Š®ßm9m¥':xD…ôÚ°0µÚ# œsdýÖë‰ìßW¾iý-JºÖ)~‚ Ýo Ú±ãÖO|ò¶ûïßµëáÝxÿµ½nÄrÇï¹ô²mW]ué ×ßÎW” `<‚ €ñ2Æ#È `¼¨ûÈÞµ«kí€Û#~2¼É ±?tw»ÛÉìÜyktæwöäc÷´©1À{oºÖÉŸS'š|ý&ÖW”šÖíõ¥/Çy'â~×òø •¾EÐI|j Àxã¥ƧÓã…@")Ç#‹3|>tG†ºvuÿVí0`IDATg@ÚdÝÿ¤vµ€éRY£_` ëèÏ €´xÌ—,]þ$p´tûE£ß¿èæÏ @{~E)ÎϵýgÀ‘&ÈBO!#¦ÇŸ’è)8¸³€ñbõÈܯ¡@—}éËß¹ú-—D—idi_íÐNþ´!ÈX@¯9üÄ™_؆#ÆÉ€N;rø‰‘á&ešÙ™_Øžæ@Bmë‘ù<òÍ…Nõëß—´*h‹4÷‘]øš?õMÙÿà|óCd€žH|YÍÎÚZk-Zëú),^yFíH£ÎtTâYÍÊÙZ¾ðõ.Wªår­R­Ý´}[çXû˜IDATañJY=}øÁ>úº+oöÍ¢”ÒZ·ÞÖÐzbV,Ö®Vè¹ÄAVµ²–%oÿÑ"JD´X¶¬|ÉŸ8¯|èSfTê´ßaêDˆ8‹HTsüVyK6]) tSš ³E¾ýƒ}µš]©ÖJåšÛ5»þßm«Ö²ftìùv„ÇlÕ|k6¯ÄAV±²–¥/ùÝÍJÄwd[¶®Xþ #"ÀyÉû¯oº[²ÑYap®àÄàB›®£[&:æB‹y›lyp.ß”àZ‡®#¯äAVËY¶þî?öÈÞýÖ‹*{d¡¢ÌÐ8þÁL´èŒKº¬è m4c0¯}%}B³€WŠY¾f±¾[ IDATËEçmòM×"–-+Ÿ¨¶¤Gæ¼:˜ƒQóc‡à”èI1 ZŠYÖ¶å‡ÿÒ#Ûþ–‹"®‘µE£CÚíp¹O;}ØÇéÜÅ™+ú<@).öç,[¿ü%ãÁ—B¯‘µ]£,óN‰Ÿ,­,1¾˜}®èÙé”$²ZÖÖ²ûÇ{ûbo¿ò-"¢|=²øÇ^ô‘ܨpÒtˆ³oï/ßeøèªµ08WôµñlC² h$yÙYËÖþÎYΧ–ο¶Ñ¢kV“SKïqØè"w£’¾)kF\q ‚è–Ĭªiûc.+f=\‰ƒÌ²²ûÅo9Ç”R³÷`h-J‰hÅØÙ!òPtIDATº/qýź2~áŽö ú²{Ò—+t+˜×X€Ùb¬È%-Æ#È `<‚ €ñ2Æ#È `<‚ €ñ2Æ#È `<‚ €ñ2Æ#È `<V0¯1°"³1°"€…‚ `<‚ €ñ2Æ#È `<‚ €ñ2Æ#È `<‚ €ñ2Æ#È `<‚ €ñXÀ¼ÆÀŠÌÆÀŠŠ&=²;omš…Ð!#Ã'‚¢‚lbb{ûÚd\æ`®‘0AÀxãdŒG0AÀx«ì+_IDATãdŒG0AÀxãdŒG0AÀxã5³0ÂÆÑ ½nBÇ>tÚX©}ÿ{ï½éÚ÷Üt[œ’ú‡Öº×Mè”÷ÞtíG?þ×Áé}<ý—¾üø… 2ô•¾<°£éã'T×Z2odè7Ø û `<‚ @ûuùCd®‘q¹§{ÄÆÑ ¡Íâ CW b‰Î,£SÌЖ{d@s¾£ýð¡£}Ó m¹¯ïÚekT¦'›‚ ZbnŠEf´oŠo­{ë¿—ê{û1‚ hI°{b:_÷*æ\½ÝÜ~4礕û4¿%®(âIDATô’Y/ÚÕªN´¼'›‚‹÷˜ö>Ìí—ù²ìð¡£qÒÍ·5¢7Nd@\¡ùñª)¢×K¬fD™Ð:;ŠSKÆ#È `<‚ €ñ¸Ø¾’h|dô ‚ ýã½7]Ûë&tÁí ÈÐ?Bž£-Ààn„ CŸ0÷6®ÔbþTÚBÀÅ~Æ#È `<‚ €ñ2Æ#È `<‚ €ñ2Æ#Èï´¯(ÝñÁ{zÕHm.È.½l[Û©ÍÙUW]ÚÛv@jjÇŽ[{ÝhÉÿ¡ÛÚÅò=“wIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/locked-marker.jpg000066400000000000000000000243031203611042400316710ustar00rootroot00000000000000ÿØÿàJFIF,,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀF+"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ö}kUþÌ–#-ý…¯”òKsz>EÃF gz“'séUô¯Cw‘¬éZ›£:È«"´`)a# Ÿ0qבëZW–w2ÞAukqOoÂd1CÙ—sõ¦Áeyý£ÝÝÔyq©êRÚO¥Ï rD²E"Jíär„íu©ÊÓ£@5˜¶­“[ßÛÚ´hÈDLó›$)°7mÆéÛXòA×½íÓ¹P|ÒTí¿SwÃ2Ç6ϱ>ë™ä"9VM›åi’¤À8Î ¬=;Å—±Ì_Z’8Þ¿³WM–b’Y£‹‰¤}— ñ®U†2 îx^Õít(–X R»»°eÚÇæ;sßî…ôÕNOÅtL𖝩jm§›ÉF¶"D—rãU'|Q7Î|€c¨Tö‘Sµ¯­½E(r7ïm wÞ,ºÆ‘é–uõôpEsͼB–‘Eœˆá¤uùBÜ×9n„j=gÆ¢ 뾂îd·Ó%¸MIR1o>0Ë#'kFxF8£b?ù7í¨ÅâMe5yZK ¶¥œH!R¦€m0 õ俤Ø-…Ö›g{}e¦]ÚYì¡hÙyÛÃÕÃòAËf„WOAÞ¬º}ôðØyÒÞ]ÃI´)q<[™Z]ínäì H Ú,Mã½25K¶†ìý6V¶–÷Ì„Fn¬~N ‘·°uTÇÍ»i iŸ†Õõ2u;¸ô›û.âÖ3n7Ïs4¨äÆJ§úFÕ(ÊØ'œ€kBçÁ–WڕΣ{ywqy"·™–%kEYVdV1¸,ˆŒ›þï£>àGñ߇µ‹xd]JÒÚY® ¬pMu g”;£²Hq$gäfÆà@Ƕø•oká]RÖìdµ¼Ô­ÖT…§¶…ežDi& 2( Ì$çîà; 6Á´ûvŽKë»Ù]˼÷L¥˜à€¡Q@ *Ôœ’IÇÁñ[[ÚEe«êV¯d¤±ù,Ð[°OÜ ñ°(<¨Îæ ÿ/ßää?Pøƒm&‘«Üè6ò_0ß5ÁرDZ4BDgYpË·•\sŒ‚­·C_ÔµøE¢¸nô‹¹ïm-Èq Ë ÉuLx2G’¬HëÔwâ‹ßiº¥ÔrjSÝÞÛÃo%¼Óº‘ É•!…1d-Ò6IÏP¤I¬èÚdž£²¶»ûuô7v×+-û¬^o•p’•cx^h!=3žMc¦½©ZkšœWßIiawg¦¤Í »C+Kö\³€VO8™Û•0¸;K ¦¿‡þ%é’Úè:~¥sæjwV–bâ_2ÅÄÑ#(ò·‰ã"rˆPnä­·¤†æÞå®Ì‘O{{m¨Ü$R‡Tš¨%3g “Ó#ô¿ÛhÂÖ+KRŠÒ„Il² [‡Š4Ø&üíŽ0UYTíÁRƒI©ë›šOiuyª‹DûD@|‘;¼¤ƒŸ•â‚]„w¡ùs‘Ÿý·¨ÜÿǽÆÏ·øƒìV[‘w ¿ü|+ñü_fºÚy?¼NWøu?°æþÙÓf{©.,ìÞîç\Jß»*@û‰“ Rp/€E='Ãw–¿ðý¶H$û SÜÝìcûÍB\n™x)ó.¸à0ax@+é_4Moí£NY´’ò(mÚ)¤¹‰1ˆŽYXî@@ŒKc ¶Æ·âtÑu©ä¹ŸÊÓtý=eºFÚ<Ég˜Goµ›`Å0%™ToRN2Vů…ÏNžÂ-cU[ShÖv¨³*}Š"0<¢ª ev¼›ØmàòÛ¤]îKýjíï䵞ñáŽÚæÔ!’+xЄ:2gÌyÎH'x@#›ÅYÁp×úuõÄV‚émeòŒ“åÙqlvW“pŒm¬Ñ­Š,]›eÎrsžØù¤ñ Ýý•˜žÒîÆÎæYî­ä¸$’#H‘”³1l 6r…bß,“è¢Ùëo»Gµ·’Ým”Gå:ÈT±l¡|å#<0ûƒÕ³NóÂÆê[9£×u[y­%¸–7V†S™˜“ı¸(„U®pN@)êž2ZLAÐø^ËíZ2]G,ðùÓBŽ¿yF@—Ž%IàÑ/Ä-ÛÄh—"H/áŠD’h7C4¡JFPI½Îƒtjè7}ì+ܽÒSPÑ×Oº¹žF_-…ÏÊ$ÆÊé/ ·puVÆÝ¤ŒÇN/ oþÔº¶¤·P«F«u2" ‘Ê `HŽ<ª2¡Û‚¸,;xòKÈt‹ÍG»¼±¿½0E"¼ºÉ÷Eûá´†ˆdI´€HÆî©x£S³ñKEgi%õŸÛaÓZÒ1—Íû,×2:e\kqó7ð88&âx"Õgšùµ+æÕå–9´ö@³)Dx×åX„m„–EË#?_•6É…Úkyä»»’ Mõ9¯£¼´*Y dR™Û# ©O-óP–~.³½¼ŠÞ;;äYu ´äšH‚£M˜¾>l•óGΣ¨p´ßÇÖK5à]3R’ÞÁ$’öéD[-ãI¦…; ÛÈØEc€8ÉÅh?…í¾Á´wvòÃ{=ôQ”2C,¯#9”¡šEÃ)àú€j¿l Ó5k'½¾ŸûVÒK[™¤hÃòO#0ÚCn¹“¶8^89“ºûjÂòÚF’â{kÛØ¦™UBBæDŠ&#?–à@¶7©n’±ì<7g¦Ý-ͬ“¤ÞlòJÛ‡ï–Yd”£Œrªò1_â^@8g ±@Q@u+—³Ò¯.£ ^E ФŒþUÍÜx–n/!ƒÄú Æ¥rn±C™ F™vyÄ‚0Ùã—|·’EƒNÙœÎæà‘æ ŒrÝŸ®õf`¢œ¿í¤°Ôš;R‚âÊÊ{©¼Ût‘mÄOÞÒÒhg][4ÙXíâ(P–àÈØà0:'ƒ%hb¾Ö­¥°°´’ÎÚÆ[¨U-#1<2/)Àîr>F8ʧ2 3kÃ0ÓÓµKÛ ,縷ŽFV)¶MÈ­½6»„“€Ä7Y7v¾ž[¨ø©naÓ¥>EÍÕ»¸¥9˜®ô`É/Ê€DË´(e­ &ó@ðþöñ ³ÚÛeaIî¡ÿF‰ U2rû›ä|±Úps ³:*+5üE¢E¿ÌÖ4ôÙ»~ë¤vïÝžxÇ•.}<·þéÀþ"Ñ"ßækzlÝ¿uÒ »wîÏž[ÿtàæAfiQY¯â--þf±§¦ÍÛ÷] Û·~ìóÆ<©séå¿÷Nñ‰ÿ3XÓÓfíû®mÛ¿vyãT¹ôòßû§2 3JŠÍh‘oó5=6nߺéÝ»÷gž1åKŸO-ÿºp?ˆ´H·ùšÆž›7oÝtƒnÝû³Ïò¥Ï§–ÿÝ89YšTVkø‹D‹™¬ié³vý×H6íß»<ñ*\úyoýÓüE¢E¿ÌÖ4ôÙ»~ë¤vïÝžxÇ•.}<·þéÁÌ‚ÌÒ¢³_ÄZ$[üÍcOM›·îºA·nýÙçŒyRçÓËîœâ--þf±§¦ÍÛ÷] Û·~ìóÆ<©séå¿÷Ndf•šþ"Ñ"ßækzlÝ¿uÒ »wîÏž[ÿtàh‘oó5=6nߺéÝ»÷gž1åKŸO-ÿºps ³4¨ª1ëZT× o§dó³ìXÖu,[.0sœÇ Çû ýÓ‹Ô&˜‚Š(¦EPEP\ˆ|U‹$¿oÕ´û…ä6ð¤Ã>|¬¾L©•S(-ŽŠsÒµ5ïYhJ±Iº{éWýÒ KÊIÀ=Ï¡ÆHÅs·~×õ[V›VÕâ±ÝC1µ´Œ² Ї{09 àÊ‚¹8®˜a›=Gʺ_¯¢þ—™×OÜ=¥Y(Eí{ëè–þ»y —ˆ-<™ûTÓ¶·F“!2åŽ~øäJ§¨jþ»Õ¬üûý2xV ³¾hÙU‹GާÆZn‹à=KVk‹k{É˾HÉP0¿ÂÌÃ9çÜÅG®xfÑç‡ìz/A4rh¡VF%6·Ì@ÈÃsÎ?SŽÖnOä»ö»+ýŽ;9?’_«üÌÝZ¶{¦¸·¸ÓíeûwÙÒO(}¹äበ==2+ã^—ýªšE¼´Fº–I„[ŠF‘yŽË÷Š¡Âùˆq¹/^xb+]+ìÐèó5ÃÂ3Û¬¿|™,È ¯ÞNãŒzq›ã϶•w¦]xWC’êá‹Ç* ÒF¼¬0ÛÀ`Í ü¥w²ÆxYW”`Ü,ÖëN¾z}Ì©ÐÃJš½F›î¯÷Ùßðg-Ž«ÈßÙ‘M§Am–îâþïÏDMÊŠq!¾óà7Þ&§O^´É]ÙÆ÷¬V!™ÿÓ]‘DxS·+,G÷›?Ö ã ·zmRÒ4˜îWÂÆÖ9—ì÷PÞ‰T]«yr¨c¼ÚB‘·aʰ9!–¤´´ñÅÁ¶ºÂ­8WŽ}:F†@,ÎÈ<0 ˆï7ݱ?vJö*?f”¹—+ÙßGóüÏ6¾ ¥9+§³[?ë³³îŒ}OGÒ4˜í¯îíîe¶¹‚Ý"·µœFÞgÙ`–Wgu| Ì0 s“Ê…„ðºkRiQé½¹¸Óä»pé5Ë]KÏ•í3µWŽÄó¨º'nš5¼ðt—¶æ(;{˜eDŒ¬PÄ® º²±Sî@;[pý×ÈøôMm œ¾ 3iáUc´–)•ù"Â@à¯ÚÙylcvàLlWm |jþ¨çä}Žz_ê–ëw&on®ZÖÖÍ÷žE—Ê`®Ä0ùsƒÆz'/VÓ†•|ÖŸl†åÓ"Cr§–àQ„ˆŒcž;ýk¹—NñÅâÞøC¤Oí[•¸¾Äs¨¹Ì©(GS&CJ£ +(W†Ù*­öã}\/…'›Hìí£h$o²Æ7]#S—–'j´‹ÀB£ˆõ’ûÐ7Ñ3:/_j:Í––é;A´ŠQ'‘f2ÄHqå¦À3‚N VDÚÔ³]<ýž;hnPNÉ|Â0\àŽÞL¿Ý5Þ-Ÿ‹ãÔìæ¶ðl÷PÙµ»Ø›è$F‰Ò+xÄ„#® „•bÁv°ÏÉ!¬{Oü@‚×M‚ÛCÔ#ûÊÝ[»Br˜Ê ÆÔi GÊd›= 8ˆÿ2ûÐ:o³0|CámCÃfkÁ˜®7äòe‹%q¸m•¸Ü¼ã<A÷‰<9e¤Ø¼¶Í6ø.E»3Î’ùÙó²( lß'ú©2ÇqòÍ«CPðÇ‹uK+(<%…¼2¼¨E7ÌòˆA,ev#/Ó|ýÇÛ&£ xßY£o O]Η7RÇŠ×30hCþÄ…çÈýÙØÕxiy¯½#×CšÒì¬?²¯5MF;™á‚xmÄó,,ZE‘·od~ˆŒmçvr1ƒ¿«xSLÒ¬îa…fÔ¯mþÒ“<:œ´oÒ&M±V”¨DYBN@¤Ò¼)âûH$¶“ÂÞÚ\´R4QH‹¼²ŒŒ‘‚p2ù¶Ú/Žn<ùŸÂr>£wæ¿kVŽP'Æð@!9K)* Œ+äR­ é5÷‚ƒ¶Æ ^þʱ»½ñ›©EäË IiŸ²ÈÞh”‡Üèß(òXco$õÁ½¬x(èÖwŸ7ÛnYÄ&+˜£dŠž6v€“#çËrváP –o˜,ÚW…<_i–ÒxB{ÛK–ŠF‚ê)w€6Q‘r0N_#1¶Û­¦xúõçð¼òßL²Æ·Ò[ºKNs"…F7/’ÊJî~G–v¼o¤×ßÿ¶g7aá¹WS¸±Öí¯ôù—O¹»†7€£;Gºçv0¤¡äœcŒäZ²ðå•LJíÚo´Im5ÀN‹³Ëß„äy’©òù•NÕÜsþ­êî…áOé7¦å®T”ª&ôÿ3zI¨êQEsQ@Q@¿…”ÝêÚö¥s#Kr·ÒYF[Ž(ÎB¯›Ÿ\ך‡Ä>*ƒE’_·êÚ}ŒBòxRa‰>V_&TÊ©”ÇE9éIz/<%ª^êvv2]é¿»D—ç‚Mß;ªž ƒ’=¹*«‹k¿ ×:…•Å”÷0Ý0³–?-“%dR1£m#Ø×f*.MUÂíòÓgØïÆÁͪñÖÉyY-o×t]ÒµdºIL×¶s1D@v¤ÈÉ+.Y³“"ŒƒÎG­2ú;Kí[Oóc†æµ™Ór‡SóE‚;t=}êí…¤ÖÆåî&ŽYn%óÇE"®,»ëÞ³µëkÉníäµ·¸‘~Ï<,öîŠñ–1FöÝ5Ã$š³ò8SkTršŠ´«K«›‰5MMš óg%¢È‘ "ÜÊ[¨œûzdWSâböÏÂßoÐÆ{¹æµŠÑî hΚ8Ç%pùÈýkÌí AŠ}KþÏjýµåÂCk=œ¯nÎfvK’UJ’€ù[’2ûõèÚ&ößø~Âý'à·±™Ó]d„Ç Vqó uëÐÕrF-¸è‰M´¹Œ©ü{f×È·j°éÙÅ4Ë5±y#ÌW¯4r€ß)O²`€† ¤s•¡¤øÚÓÂú1´ÕZàÈ·³ÛÚÛÜ\[Ç"EL†’I2TºŒ'Ÿ”RD:þ‰£Mâ+è´¸numFü³Ïb— –ÖàC<. Ünef.ÄäótZw‚>Åk«¬êj›ä»‰¢vÌ‹šƒÌVh‘²Al¼"»9]<;SûV²ô¾¾_©èr:8Y*šsY¥×Këm×o2[mnÿÄí,¾½±·±ƒË{Ë9&3™"Že*¢Hö(IS’I$°ÂíËgŸZèZTw:ì¹Yu B!7›~\PÝ:‘Yðx]Ž:Fw&ðÐMÕµ-1Ê*ÌÖí¦}ªYüä“.¿†`bÛW÷ž²¹µ¾·ƒSÔ¬ÓPIã¼0‰ž9e–R‡|m´+O(vœ7$àÆpMã½25K¶†ìý6V¶–÷Ì„Fn¬~N ‘·°uTÇÍ»i w!½ž],ݾ™w á¾Ä픑œ.UÊd㛌‘Î2ߪúµÖ­ý­|º”±xn–;pöЙ˜Ó÷XeÈ÷ÈçÄɧxvÂÚ É‹;yÒ+V”EÒHë!g ¸S¹N6®;\` »oˆ:bÿÂ?ëí›W´¶ž97ÃZny&V—–ÀùC¨Ï-€ÄhEâû ¬Öâ8§8Óä¿™ƆØ!Ç1f ›·®˜¤É gØx -;N³]^ùa¶û—±,wS[‚HÛ‘r ŒW êI:’xSMtÔ‚‰#{ëˆîL‘í ‘²ºãƒ.Ö È䃸‚N¦µàÝ_Xðü_i¼³Š`–ÙYó:ǽS0³+çr}Æ?{ <1ª]j_jš„G°ˆWJžÂHÁÏÌÉ3³2¶ V$XÓ<>š}®¥º…õ욌¦[‹‰c“Eò˜U6ác\œæ¤Ò´Q¦Ü\]Íw¨^\"F÷7B0ÞZ(€Fˆ¸ÜçùŽIâOjZmƬÖBÐA£i‹©\¤Ñ3µÊ±›÷hÁ”Dqùˆ¾>_—毦ø›P:ÍÊk7Öšu¤7J!¹Òn Ým&Æ[§DÄÆ¢C´”7FƱá{mbâid»».­Å¥ìP”Ûw-ˆßr’£÷’ ¡FùÏ<.$_§öÄwój×Á+Ïoi3«G¬¬¬Êvù‡‡g*àíÃÕ¼c1MJ÷BºÓntý+L”®œ^)iŽ7G2>ÎÃqË}ß”†±§øÊ ½fø\ÜGc§Û¼ð'Ú­%ÌxY„Ž.6H|µÜv¡bà «¡¬x^ÛX¸šY.îàK«qi{%6ÝÀ b7ܤ¨ýäƒ(Q¾sÏ ‚ßÂöÖÚ¢]‹»·‚‰nà²bžT3ɿ̑HPäŸ6^Šçav€Gsâ/6ûí¤Ëc{¦jwrÛÉuÛñ¶\lÛòŸš" 'Œc9\û_Üø¡l¤X>Ë-Üö¢!m"ùb1&\–ò¦cåó é½³þ©ësTÑF©¥]›û»s§\„ŽÙX¡Br1Æ×uùHûäõŠöþ¶¶Õì]ݼÜKw“ò¡žMþdŠB‡$ù²ðÌTo8 ´Iµ;ȼee¤ù0}†ãOžçÍÜL†Hä…vã ‰sœ’O÷qógÁ­ë·šŠßC¡¥£ÜK——¶Ën 7ïäe$ŒÈÚ¤¨­jO¢‰üKg­ý¾íÖÞKu¶Q”ë!RŲ…ó”ŒðÃîVÎ~á)4í.ãN_ë2ÛËo$#q6~LË"D®eÉ's’Äœžhž§ã»;Oi¾ŠâÅYîŽážà,ŠÏÉÆ™ÉÉ‚Çå˪Ì[f†“¨kë“Ù_ãH·ÊlãuR¥agf>kbÙ „RT µ/tØo®´ë‰Z@öâ ¤`±ŠH°ÜtÛ#1ÈCŸ xvMÖõ+ÛuB7K7Ü\²D®ÎNI,Ç%‰9'4x¾ÿRÒ|+¨êš\¶‰=¼—L·P4«"¢3l] ’@ù²qϲÛâ_†âÖ/4ù®|¿²ùáåó#|´*Í(ò•ÌÃhŽNY¼¹wnkz(×-þÉ5ýÜnÍ´"=·1°Ã#–BÀc#(TüÇœàŠñxh[\NöÚ¶¥óK´m— Ò–/ Ênc¹Ý¶È]o»ò®Ð iã'—ì+‡5Y¦¾ŠKˆ#ŠkFÝ yY“pŸaRf\a‰<œc×_‰~—X³Óá¹ó>Õä—Ì0Ó*´CÊgÂHùT*7rFÖÛxKMfÚóNÖ.ìÉK·¼º‰ ÜM3[òTÂbòUT’ä–'RËÂ6zdñ :òúÎÅ<¢ö0Ê<¹Z$Hг2p±Æ‚|ÀîmÀ<=®Câ= VÚÖî k„W‡íQ„gR ä.IÆI=v’2¥XêU='M‡FѬt»v‘ ²·ŽÞ6‚ÅQB‚pΠ«”QEQEQEW9uà{‘uj“i×A²&±Ä@Æ0ÝŽ¸õ4QZS­R“¼¨â*ÑmÓ“Wþµî@šgŒ4ÿ(Zë–Z‚ØVú›qŒ¦Y^IüûKÿÇýKßùŠ+× £Všœâ®ü’ëäw W¤ªTŠ»òK¯’ñ©•­ ,e†æU™ˆÈ>Ùø>ëQsý»â Ûè~QäD¢Þ6竜óŽxûúÇ,Ms† |há„Ö²îôÖç=ž¶QÌÃäNÄÊIƒ®¢‚‰™Üù±µ"è¥ÔCÀ=w\{ûÂÈ¡âëÚMÀSSŠî¼õÿ¶¦&Ú8­%óg24TFƒ>GaSZ³œ ¬5N{¬’í­²ÚÁ$­ Ìk-Ê3‚þÊZÔCž:wuzæÊ±SǾÿ.Œzh×ÔÚMw­½&\Ô*ʰIø;º œH«+hƒG CO‰NcHl45‚ÙM¼ÚQt³² ðBâ,-íqK £6mJ´Ö ؗ阡 …-¶f½…É©7*êÚ“ùêæøIDAT›8`ãÊ€ÓòÌºÂæ_Ô9!h†,ê!§Ï^š8ùçáãçŽÏØuÈÊ4%mj)VÇ™ÖjJ+íc-L†Ð% š˜ÒÊÐw±€IÅÚ5BX´;â÷k!ljgÚg‡èèæQn7Ù/ÑÍzÈžø{mDD/¡›õâýwvxxìSÐ,0\ÉôùEŒn¿t"špf{ù[ÎöW5¿²FD,,,È0Õ‚fÈXA#ÖCFDôC=dà?"yÿY©£oT9Á•FÐîMœÅ\Y/è—“ùJƒydÊho½­%í°Úq%c’ÇN±®C‰Úi=Cv¨² žôFHIDATð»)Ì·Uø·ª37É$Ò[”€ 7&±ÊÑŒÚg–Æb¨‡”ƒóU;» ‹Q|­¨`;Zï¸;ÕŠH ï¸Éw•lãçW W]Éx¸“?M’Ê\k×¶ÂO7¥r@ZÇÅPI-¯•%­´c#4LöMÞ™Ìeûõ.T­âÊ!pJñðn;zßǹAkÓ}\iÚÃʯUNåz^Z’I¬rLl3J¾âÌcÅh©ýZ)ßÂ_‰¼¤\'“´Ï.!º8ÐF>ÑF0L;·É§SÚœloí”ÕŽiúG€ž*ùsg ¥Ýu²ôw=$ýµ@Å$Yãã"ÃïúµIDATí«¢ñNl¬NCGl45‚ÙM¼Ú#è×zHüd/u:€1%ùO°´wå®I’ÙüŒ ¤š³| {¤9`ãʳ"-ï4G|xØÄäüGôÚѯõJÂÄù h/pî5·,¦´kIb>&S8󛌘dè»ÚM)ϧ'Úñûµ6‰‰Àäµ-¸Gr»É¾b=dDD!ÖCQq«ë \9÷c7º}Øõb=dDDá?ûÀ›£·Ð¶7IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/mark-resolved.png000066400000000000000000000041071203611042400317300ustar00rootroot00000000000000‰PNG  IHDR"B|_L pHYsÄÄ•+tIMEÕ ,$Ú)tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíOhUÇ“Ms‰t›"zA<õP(XðÐh¥ÖÄ“‡`:ùÓüÒ‡?üî½ù3ïù:²eÍøØ§à¡BXúÈnª1“§dÂÕXÖ8M‰“˜ÌašS‘¡µì®L'Ì®©Þ\ B}´=07÷ø;òéOî|ˆÎ-¼šþùÀä+ù?ÿÏ©ìÆo´ƒCþ9PÛž9*jsȶI9Í¥‹–ž’áyÕcè+µâ¸ÕöÅÞA§.ó£ÛcYε©#ü=ܲÃÎÍZqC:óý¥ln–îß>}ˆ(]ÑàÑ%KûÌ›¥ ¼çCØÍù¡íÞ˜)Uhο¥½_ªA{׸Yª.IDAT2$o̹|ífþGJ¹mêà×ÿM¶M4Ù’̧šm«½ð0Qce{ ¶Ú¬T+‹­Å¡)7mÚÌ“Xje:ª5sm{NJÚmí§ödœö|j™Î#é® '¯4Æ !é«åŸ³5ÆŸÝœyåÚ?éX–ˆÄd«íma[.'??CNçL·\­L øûBð»kPþ‘äì±_<o&‰›¼7]iLŸ„Dÿúçß’$Q$D]GyªÃç ˜?ší{ó­Îç£("’óŸ%¢‰»î$""qýÊUR–@0ºý%zaiQ»ÒÀ€v4PèÑ z3z3mY}?IDATºôfz3}› #¥Rf 7ëo  Ãôfý¡7S£äý«q-®@÷Þ¬$?mm1›r+}¥˜ÖÞ´¯&¹¾© º@·õf·ßº.ûÙÑñ—o¥­Ê¯05béìÈTc&ÿå·ÖUå3[àG·õfwÜ6¶~ßù{‰¨¹wë_»ïÓä½™Y}\Øpíè aWS½Ù©³—N._øôÔùãŸÿHD7ö,6÷n•bWZl*’!¸*`iŸŸÌF¡ªF»uúdwX¸Sp2´ƒ­ç„^iM„|hãÝùRì"¢hâÀ-/l1š¦õ¦6rU¤÷gwwmµª Ë ¦¬L<:IDATˆ±“³i"§]Aé| ªÖèè͈(™1=1f˜–hm…X¬˜&~~8†œ,ε&…üoKÐ[z 7£Õ €!!ìh–$÷?XÊëÍvOo'¢hd†6¬—WŸñˆ^g0€-X 8aW½]z3‚½ÁÞLߦˆP¿(ÇŒµz³¾D­±Áè× ½YßèÍò©z¼ö zôf%±ø9hh‹Ù”›=U Sý ôfF伿_‰5Ö¿@oÖgz3N2(Ⱥ½YGγvs54Ó&`ƒôf}©7‹Vÿ¬½ã &@oæé‡cÈÉÁâÜ’vi\P,ÝuÎÊIDAT+ 7 8ЛU † «Rz3‚½ÁÞ €à@o@p 7Ó·©0b Ô/Ê+?V * 7ëKÔŒ~ *Л ‚Þ uUs 7+‰ÅÏAÛ@[̦Üì©r:‚¡¬ž@oÖiDÎûû•¨Pcý ôfƒ 7³„uz³Žœg!ìæjh¦7æq@ÕèÍAoFk %W7 7óôÃ1ää`qnI»4 P+ 7 8ЛU F Sg‚3Š2 4> ú'þïL”eíµÄIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/menu-ball.png000066400000000000000000000005461203611042400310340ustar00rootroot00000000000000‰PNG  IHDR*º† pHYsÄÄ•+tIMEÕ QþM“tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'1IDATxœcüÿÿ?q€‰Hu4SÊ‚Ægdd„³Ñ¼Á„K&wÀ½…¢Íh\Æ![d*R¸¿IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/menu-tick.png000066400000000000000000000005671203611042400310570ustar00rootroot00000000000000‰PNG  IHDR ù|£ pHYsÄÄ•+tIMEÕ ý¬º²tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'BIDATxœcüÿÿ?Ñ€‰x¥ÔVÍÈÈH¬j4¥èª‘¥1•b1¢®-ݸ—RtÕÈÒXãÝlˆ"\QÆ8hâÈ£p~³IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/merge-dialog.jpg000066400000000000000000001501321203611042400315050ustar00rootroot00000000000000ÿØÿàJFIF``ÿþLEAD Technologies Inc. V1.01ÿÛ„    $.' "+"(6(+/1343&8<82<.231  1!!11111111111111111111111111111111111111111111111111ÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀÝ?ÿÚ ?ô »Û-V1{«$·©9ó-í +1ó´•È<žz8â·Qka6hô/ÛÿãßãUiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiw9ßÃÐ('ÃÐ33mU\å Éÿ8©œ½œy¤Í)R•YrÁ-®žÊ ø><GïâÿãµËõ¸wqÐðrN×_ù %¾ÆuÄññÚ>·ïîpR“²kñÿ"݆»a¢Ú¦£§}¦=5~K‹_fIÃF¾S¸àŽœžøÇE¹ÕÑÉ8Jœœd¬ÑONˆ &ÎGû¢Þ2~›Ejž¶B‚¼¬bxŸR„ȧN¾‚QÈ2íæ»iS²÷‘2šéùø>úMRÞxæžÞy-ØÐȃœg±¯F¬Jw"»ñ V~%¿Ó'¬VšÚ÷‚H$²ÿß;Oç\^ÑòM­ãk}ßæÒùšrûÐ]ÿ¯Ñ‹¤x’Òé×úƒywˆÄÁ/#n\‡Â(fÀ#“Û½k9(½ú&Do/¾ß×È´þ Ñ–Xb[¦•ç…n#X`’]Ñ“€ß*ž3ùw¢ï›—®ŸŽßðûýÞnšþ‡ü$:7Ûã²ûSy²ÊУyylëÕD›v’;óS§ªó%×Ðm8ïéódÚv¯¥êWBÚÎ༌¬é˜U£€{©5IßoêàôÜÓû/µû/µû/µû/µû/µû/µû/µû/µû/µû/µû/µû/µû/µû/µû/µû/µû)ô¢àe>”\ì§Ò‹€}”úQp²ŸJ.öSéEÀ>Ê}(¸ÙO¥û)ô¢àe>”\ì§Ò‹€}”úQp²ŸJ.öSéEÀ>Ê}(¸ÙO¥û)ô¢àe>”\ì§Ò‹€}”úQp²ŸJ.öSéEÀ>ËíEÀ>ËíEÀ>ËíEÀ>ËíEÀ>ËíEÀ>ËíEÀ>ËíEÀ>ËíEÀ>ËíEÀ>ËíEÀ>ËíEÀ>ËíEÀ>ËíEÀ>ËíEÀ>ËíEÀ>ËíEÀ>ËíEÀ>ËíEÀ>ËíEÀ>ËíEÀ>ËíEÀ>Ê}(¸>%ŒÛÅfãôŒä7®\SýÙêå_Æ~Ÿª$°U¾µÛ¦\I° ÿF–s²õ@'†8I@w÷“†Œãe¹ß‰æ¡WÚKX?Àfª`²akƽÕ"æH¦o³ÃŽ *½ ränÈ=Ê¥E®U¹x8ΤW¤^Ëõ(J„ø&æ_ï;èúô°ÿÊ$Û}“H³ñþ–þC’¹ëë¦U¥géú£žÓu¨4­1Í‚¿öµÎäšíð<˜³ÂEéœÇ©#Ùvó)rÆÑÜõ§†uksÕwŠÙŸõ¯à7\ÕíuXa¼hš[;.]òîP.Èí ÀG¢…R’’Õj:yP¨ù¸úv×õÔÑxâÔ›Ñݹÿ·ƒ]ø}"‘àãÿÞ%òü‘Ñè:ž©ý•ko§Åkå[[À„ÊåI&sÑO÷ëF•õ8‹ÿÚ!ÿžZýýoþ"¦Ñhxƒþyiÿ÷õ¿øŠ-íÏ-?þþ·ÿE¢ý¡âùå§ÿßÖÿâ(´@?´ÿÿvßÿI`©–à†Øx¦ÖêµOkq§éï› õÛDʤ€!É\î O§§eïhû}ï𶽇ozËú¶…¦ñ„– ~úÖœ¶R?–—élßÝ œÁâš]ĵ½º§â'L>]Ö¡h— –;v¹$•yåC0àóœqÖ…¬¹VáÒý ëÙßxšëH†}8-«ù,ZùDï.ÐHH±ÈÁ;‡ ŒqD=õ»åý7è®|­/$þÿé}æž©®Xiš=Þ©4èö¶a¼Ó©Ã)Á^¸Ýž0O^)]+yÛñM»[\£¤x¿GÔïfµP± ü«`.‘ÈØ­¹¼GéT“iw×O$Ú¿árn—¦ŸðÆ–­§_ÜOoc¨ZÜÍlvÍ3+´G$a€9ƒ×Ò’Õs-†ôv{‘I¯èÑGpòjÖ–¤ Ù®PI%Fî~\G=Á¥ukÿ[_ò×Ðvw±,z®$/4Wö¯B'gY”ªÆs‡'<)ÚyéÁô¦Õ„µ²Eqâ-) Iqim4îé 2ÜÄR¬WåŽy:އŠMéò¿Ê×þžÞaù·×´¹dµ¯íbº»„M³\Fee#91Ü0##ƒÍ7î¶»oä$Óõ/R–HtíJÎîH€gH'YèHŒÑmüƒgb9¼C¢@“¼ÚÆŸÛ°Y‹Ü H¹à’çÐÒºµÿ­¯ùkè;=„“ÄZ$^G™¬ééö€¦×H<Àßt¯<çëNÎü½á¿Í}èWV¿BOí½'ûHé¿Úv_o^¶¿hO4qŸ¹œôç§JI«6¶CzY1ún­§j¼Úf¡k{gk½¼Ë"©ë‚A84Þ‹™ì.¶ê ªØšD½¶p#I%^UÎõèÄ`ýªj7·m¿áì8«´¿¯?¸ÍÒË„vˎܦ9ÇZˆ´ý-{üÒ·Îå4ש®º“X¥êÞ[›I)8•|¶ÉÀÃg$€*ši¥ßõj×D7ÚÞ“§«µþ©ej#q®6¹‚œž ãÓšK[%Ôv'7Ö€17P’,MûÁò»cjŸs¹p:ò=hþ¾ïøf+õ ¯­ ‘£šêÝJ¯ ;SöÔô¡k·õ×òÔ…{wHµž(.u[e™ÊE—¬ìi ä†ã¿-]–àýÕv4øƒFó¦u[ži$…nº*çq#9`çÒ¥É(¹tZÿ_‡ÞRO™G«25cB×< ú¼·’ 1WNö× ’£Fé MÁ¾WÜ A<pjæ¹O«·ão¸˜û÷·C?[ºÐ„¶±iš¢Eh,v@Nñ‰–Òâ8-"Å*°ØƒHK|©JÎí.‚º²gHšõ•¼6©¬ÝYéwòÀ²Ég5ÚnŒ•Ë än ÈààšWEY’I¯hÑ­£I«X"ÞÿDZk”~ƒäçæê:zÓ³¿/Q][› I¯èÑGpòjÖ–¤ Ù®PI%Fî~\G=Á¥ukÿ[_ò×Ðvw°ßøH´@–¯ý³§„¼%m›íI‰È8!9ù¹ãŽôìïËÔWV¿Bô70M$±Ã4r< ¶UFÆØ ;yõ¡mpÙØ–€ ( € ( € ( € ( € ( € ( € ( € ( € ( € å¼ÿ ùÿëÍÿô¢Ú®eï ǃ»oÿ¤°R–ãG-©xwX†(çƒKÓ­ñ5¾ë+ ‰M½Ìž|ledòÀ‹NX8nIÚ*aîÊ6ï¢íî˯Íid¯æÂz©z={ü¿àߦÄ×~ Õ'ÔßXu·7WHf²‡R¸µ’%fC1ýÈ$îÿd**)Çtÿͽ»kúõ°Ûmßµ¿ÿtòаþÕm´½KKÓmtå´ÔmÕ7Iy&ûb!ìÆLŠ6ŒTòx«½Ú¿I_×TöïÓ}­ØKMWk~ç÷–õ"êßG×e‰L·3]%å’Â¥ØH‹LŽ?Ž>yÆÓ×­CºQQÝ?ÎOð³×¶¡µæÚß’éç}¼ì^›@øB¦Ðà™DÒZ<^sŽF.qêÄ“õª®¹6V·¤meøn:o[Ï­ïóßó3×Ãw÷·t–P]]êV÷äÊÎcò²7ROÈØã¸©qN*+ûßù2—ù¯¸•tû%÷ à¿ ÜhSÄ.íãsklm¢ºÄÅ—+Ò Èó´Ž1ÅiÍtÞÍÛÏñßÐ$µù·÷Œ½ð•ÛèÖÐÀaûE¶¥5îĺ–ØJ$i8ócÕ¶È9ôÇ æ³K—“Ê6üê¾wîS×›Íßúþ»_ Iö}>8¢‚Íxï¡ûT—"HŒžiGœ–;€âGöÍ­&ŸK/¾?É]úèKW‹]uûžïVù¯RŸü":¼7í ”^d¥¦¸ûC’Ñý¢IB4-GáÆe9ÁÇ\¹_³äòK梗ËUºék­ oVý~WüýŸ~²ðf­mkžZÀÛ´–—\‰L h»vᔘÆ•Àfà÷ºžýÒï&¼ù“ZýþwI"VŸ‚ûôý<õ6´M¦K¢³}œ.Ÿ¦5œ‚<òäÆr¼tù®#ŠÒRNskgk|¯þdÛD»6þò´ÞÕ ÐÒÎÂHƒ›ù®n#ŽêK_=Ý€ó‘K©œv‘œVIYAtJß;o÷ßO;–÷“îÌý3ÁöÚ.¯k;ÚלּMæ¼› –gÁvˆýâóÉ$µî¨®Î/ÿQ_£·¨¾ÕýëS>çFÔ5·ðÜvå-VâögÔ<™Ðþö9G;£Tl@ÊHI8ã8¦â¿º¬¼í$ýUíwo=v»¿#õiúiúl¾GWá-}1®e½´Ž‰’4iT¸½2ÝÇï”lqÀëZÊÍ5Ñ¿ë^¤(ÚÞKúÐɳðUݼ<vVPHgM†éÉS“Ønlf²q|–ëm|ågþç÷¤hß½Íç§£w’ù¿ÀY<wömžÖ?ìËh¡˜©#%e…É_—þ™·\rG½i;J¤¥Ñÿ”—þ܈ÚõülXÓ4 V/ì;KÛ}8Zh²îI£™Ùæ'@Æ3 Ù`OÌyÏ4'ïs½­§Ëo--é Ih⺻þ7/Á¢ˆ<)}¦_ñÌn™…¸,Ûdwa´c;°Ãñ¬§xÒVÞ)}é-¾kCH¾õóïú˜¶^Öc±Óõ$ŽÎçU– þÙë4Kº}„U[B*mÇ#¸Ç:T‚÷©­š·âÛ·tÛnÚt"›µ¤ï£Oä••üíoŲ𞱧[E¦[Éeqd.­.æY]eýÊÄ¥B çÊÈ;»ãêù¯5'ÑÉý÷ÿ?Àž[E¥»Izzyvìiø—Ã2ë¤sÇ2E ·hæþùpÊ#á2;gÔ w¬•âÜ–ú5å%×îÐÓF’{uôv¿ä¿Yð†»{§}. u–Øïþ{tŠáÝžGÚ‹ûàK  täÕFÑš¶Ë–Þ‘·M®í{ùù¯-Ÿ[ßççä´·ôµìü1<éÊZÝZÚþêêV\üË(” qÉýâç>‡š‡×ûœ¿=?É;]ù§÷A¢jx ô£kг6‰$n΄ڬr Œõ#œzšÒ¤œššÞéÛÍ;Úÿ­¾C…¢Ú{k÷2ü#ºÌ÷Ì×éÐÁu{o}<±Îí,MAå®PË1+€Ì0qÉ E¯&߯2{ú_~©- >[ui/¹î¿?'®¥ÍkÃSj´÷cìÅ$kç8†f‘ûwcßÒ”=ÖŸ›ù-—âTýåo+~71%ð5êÜÊí°Ü¬‘Ëö¥Í’ª™åªR—XpGæ•5È’}9~ô’Ûåu°äîÛ^õ©oPÒn4MÆâ8b¸žËSšóÈH¥‘eó ¸Ï—¸`²»iïšIò8yG—ðWkæ¾wbåMIy§÷[Oë²2´ÿêWÖë}ubŽ/â‘g²“Tº²òÔÏ,ƒ>ZüିuÕHÇl*övn_½$ž›inÿ 996×wýwÿc¼Óm§·»¿y ³Š9¥V‰­Ô‡u£2“ղРÃo7éýw¬ô쿯NÅúP@P@P@P@P@P@P@P@P@ËxÿþAóÿ×›ÿéEµ\ËÞÿÿvßÿI`¥-ƺ3`ñ‰q¨gÛë|·¡Š}™.Q¥Ü3‘´ä`çéD}åxƒ÷wÐÒ € «i¨[]Ü]Am!w´q¸F ¬FvîÆ ÁœgœPµW_Õ¿¯êÁ³·õý]I¢š)ZEŠTv‰¶H(ØÐàƒøŠ:\<‡’$œÔšM¤®ÆCöË_³Åqö˜|‰¶ùro_vàô9ÈÇ®i´Ó·Qt¹_QÖ´­/?ÚZ•–6çí¤xÎqÔŽ»[CéJëúþ¼ÇfOo}gr!6×PL'Í‹Ë7˜œ|ËŽ£‘ÈõVkA])P y_GdÒbâHÚULUJ‚sÓ«/çBÖöéúßüébz(8g†hŒË‘‚ÊY$Ÿb?JM¤®ö[ ±Ï M‰,R(dt`UèAE6švb@&ÒW`gXkšuõ”·–ó²ÚCÓÍÅø•œËþÐÈ÷§mïýl\{­o-ŽÞMím'•(Áls׆Z×þ´v¶' € ( àš)Ó|¤¨®ä`FAÁw~”y‡‘%P@F¡mý¤tÿ0­Ð‹ÎØÈÃrgŒgã#8È¡k{t¥¯Ôµ@P@P@P@P@P@P@P@P@P@·ÿä?ýy¿þ”[UÀL½á/øðo÷mÿô– RÜhÓµšÚÞW¹¸gx’B>@¹*1³8çÖ¤-4b jÓÛjz´3–½hlcŠ%2I´¯îüÎra½;qSÔi¯ð|¶¿Ýçó+Ny?Q¾%µÔ,® 95Ùmé ³È†è»ó˜1÷8“ä 1ÍT>?šôåëúÞþöÖÔ°¹»;÷½´ÿm/{”®tíwȹ¸[pNa¾™Q'›oš“þàÎ1´œ/FAÀ¥ON_û‡¿þMøo÷ï¨Þ·¿žÞš~;=úm¡Ûèùû~©Ÿíùëÿ_ê¿Õ¯úŸö=ÚÝM|7ë¿åÛÈZß^ËÓþ¿Èá.¾Ôº=¼v‡Si฽[‹[Apžtæ\‚ÓC“a·.õ(ÀóŽ¢iíðÅ|ö~OUª~åÊ×ÿšÿ.‹½¬ÖÛ}Äú½Å•î±vÚÄR^ß#µÂ›écŠ#ê°0Üw©L+23ò€(ZEG³}û¶¾M;ßkïïXw{Ù“ù¯½ôÒå¯Xê׿s­Ë« §• É$Ð+“$븩l–Ù³ïFTç84T‹teݯý¶7òÞÿ;Ú×wqvšívÿ<ÿànI§YÉý2(-u-”¶²\A:ÊÒƒˆd ¯É)À^>\Ö³’ö‘šÛ_]SZõÝõÖÄF/–që¯õÛúõ!¾‹RÕ¼[oªhÍm’(Ö{ë B‚°Ün&6(Ûx£qÀÉã8Åg(ÞÝoÿ¶}Ú§÷lTši.ÖüØh³¶©ØI¨iúšþ¥Å«'çýyýßädévºôÖ ©ÝI«®¤·–j±4’¤b2‰sÝ#&L’=1[T÷_¹×Ÿÿnåý-òÖÖ2_ O¢_~—ÿ‚OàØ'>!²¸¹‹Y7k§J—Òß ¼±9x‰TßòÃcËùHÅ8ò¥.]½Ûwë½õí=‡;Ý_{¿O/ë~äZ–³†'KUãS”]“ö‰š8Ê#Ùn®>_1HÆr£’ÑA?å×ÖËÅv¾úê[Þm|½.¿¯¾Ý Ûk1ØÙEo¨Þ.£´’v†kv·Ä„‰6ÈK¡™s±XòI"µ_OmݺÓù´Ó¦¾dmeÒëïÙùò¿ÁùÒÿl®£ës¸Ö;uûLJ«ö™?yæ®ca°(Ù(\maœ5özoʾ^êé³ÖÿÞ¿} i'n—>Þk×nýD±þÞÿBóÿ·?µsiäîó¾Íäyiçy˜ù7çÍÎÿŸvÜv­*ý®_ï_ÒÏ–ß…­­ï} [kåo^n¿¯N]µ7<#e¨Y]i/q6©/Út²÷ŸkšIN xᎹ~3ƒœâµ•”¦–Ú[ÿ&¿éåÚÄëh¾·wBŒjsë ŸÛ?h’{¥½ÞÓ-¯ÙŠ·•åû°ßê°SçûÙï\­7E¯î»÷æºÿƒ¶–µõ5nÓOÍ[ÒÚßþ_"Äz Åð•ôØ!½7i ˜yL‚O,|ƒseyØ0;cšè®×=ú&¾äïêôùö"Š×Öÿ©GOÒî"[­GK:Üoý«oä$ò\®èJ®^7åÆ7eœ1Á¨|Ê1¶þ÷þÝo-ìï½Þ¤«4ïÙ}ýᶶů‡ÑêË~Ï«jïp`"æÖ{¤A.á–YdvˆãæÀˆ*sŒ‹\ª/—m?­uõ× å~o›þ»zu#¼ƒQƒ@‘ä:«Oy¨J²Ê^îCmÉ!B±BÊåH >R2HVKá‚}“~¶ÛúÓOæw-ï&¾^Ÿ×ÏägXYë÷Z6¡=ÜúâÝY؃dç‡|‹,ûNÍĹ*#ÈbÙg9Íh´å“Þñû­ùw¿ÎÖÔ›]¸ô÷¿[yú~"ê3êé|Ú]aßgÿ?pßÁþ4}¾Ïþ~àÿ¿ƒüh(¦ÒḚx¤³ŽiñæÈ¬¡¤ÀÀÜzœ™¡h¬¿o³ÿŸ¸?ïàÿ>ßgÿ?pßÁþ4}¾Ïþ~àÿ¿ƒühû}ŸüýÁÿøÐöû?ùûƒþþñ íöó÷ýüã@Ûìÿçîûø?Æ€·ÙÿÏÜ÷ðo³ÿŸ¸?ïàÿ>ßgÿ?pßÁþ4}¾Ïþ~àÿ¿ƒühû}ŸüýÁÿøÐöû?ùûƒþþñ íöó÷ýüã@Ûìÿçîûø?Æ€·ÙÿÏÜ÷ðo³ÿŸ¸?ïàÿ>ßgÿ?pßÁþ4}¾Ïþ~àÿ¿ƒüh½¿‡íu u htÈofIqƲ>y9aÉè?*º¬êîËŸo³ÿŸ¸?ïàÿ>ßgÿ?pßÁþ4}¾Ïþ~àÿ¿ƒühû}ŸüýÁÿøÐe»Ó壖âÙãpU•H`z‚)4š³m;¢¾™‡¤ÀÐii§XÂͽ£¶ –é’ð?*«½‰²½ÉVm-.žé$³[‰#ÊC²Œàԓǹ¤´Øl—íöó÷ýüã@Ûìÿçîûø?Æ€·ÙÿÏÜ÷ðo³ÿŸ¸?ïàÿ>ßgÿ?pßÁþ4}¾Ïþ~àÿ¿ƒühû}ŸüýÁÿøÐöû?ùûƒþþñ íöó÷ýüã@Ûìÿçîûø?Æ€·ÙÿÏÜ÷ðo³ÿŸ¸?ïàÿ>ßgÿ?pßÁþ4}¾Ïþ~àÿ¿ƒühû}ŸüýÁÿøÐöû?ùûƒþþñ íöó÷ýüã@Ûìÿçîûø?Æ€·ÙÿÏÜ÷ðo³ÿŸ¸?ïàÿ>ßgÿ?pßÁþ4}¾Ïþ~àÿ¿ƒühû}ŸüýÁÿøÐöû?ùûƒþþñ íöó÷ýüã@Ûìÿçîûø?Æ€·ÙÿÏÜ÷ð>+»iœG ÄR9Î\ëÒ€,ÇÈ @8ë’+Ø}š_Eÿ¾ÇøÑÌ€>Í/¢ÿßcühæ@f—Ñï±þ4s ³Kè¿÷Øÿ9Ù¥ô_ûìÈìÒú/ýö?ÆŽd7elãW¹tYÖ5ù%˜à¹¢èßþ>íßýôÀæüÿ ùÿëÍÿô¢Ú®eï ǃ»oÿ¤°R–ãFµ§üxÚ×¼_ú©M>›àÛ]KPÒ¬n —žL’Ï ¡îJn,AáAÏáÚ³Ó™'Öÿ‚oô›] ·ZŸ€­ÆœøÐ¤ƒR™ ‚â? ŹT“–Î;Æy`;Õ(ûܶիþ6þ½›´\º"+wáÕիܼ;l©+ÄË;[¡X®zô8ÈõzÒVqRïoÅ_ïMIDZ»—á™§0Ca¤É*Ʋ˜Ö‹lílc¡ÁÁïƒM®[ߦþ^¢OkuØÂ‚÷Æ×L¹¹Ðô›K{ôšàË(‰Rté)%qÎèøí¿©Ç*É|Zh›ònÚzêþæ6š½º6¾ëÝþ­´^ º´{«Xôí£Íy£²*dŇe[ŸöO¥>[tþ¿¦¾ñ'}Š^¸ð–µ$–Éc¢G¨E,ÈÖ`DÒªÇ#&ò¸€zw¤¬à§ÒÉ¿+«ƒv•¾ï2¯ö¿ƒ%Õ­í4ë-P†TbóÛ=»,L$‰žÙ>nzçŒI$ÛÙ[_“…¿‹QËÝÓ¯cB ü qÌ–òørXí=Ã#@Â=غ=Í $®öÛæmÔ_7À¢;I<Ͼ%m[0bàƒ‚ÿ'gš|¾÷-µôæè;ÄIáOXÇy«iÚe¼7km¾‰<ÊJ#û90á\å9ÿ–l8ðxÀ$-,ßK_òý}­ê‡®‹¹gJ³ðž¯nn4‹mþm†[dŠU é•ÈÏ#ó¦ãn„ß¡7‚í[‡›ìnçGîœî’A=ÅNœ¼Ý?à_ò×Ы4ùzˆÒx.mm™ü:³Þ*½´DÀuoºPu`{Ö©GWµDÞÊý óÜøFËR¼¶Ôìô=> gŽ%žçÉŒK+.ò€0…(z󻧨¥-·»IwµµûݽQR÷~ëþ-~…ù-|#°¹’  .ñ‰Y! Y7n\ôÈÚÙ¶ŸCE–‹¿õú¡wò+ƒàÙtËíBÊ ö v­’{T’ z™;Cž*ý¼ü—õÔ¨.i¨u§Iàû–óÁáø5%D3Ù…¤ÛhÚFûÌàd‘ëZ¸.f£ªNßuÿÉýÆq•â›Òêä¥ïƒ´­j+ B×Bµ‰¢‘žâs k©œ¼D€õÎNj#g—Î÷ü¬[M$;Ä×~ðý”ï5¦„שl×Ù?’’N$mÉCBW’‚ZÝ/K¿ÓpZ®n„‹uà„1Çxš”ò¹!­ƒ±S€ ÎJœ½ˆJM%×þù¢oew¡9 [›«b<>'²C%ÌGÉߎ¬ãª‘Éõ©ÒÜÝ ³NÝHoO…ÓÃï«ézn©Ã¹c„À±–FpŠ¡À#ï;Õ8ÙÅ5»_wWòW!&¬ßdßÜ®VÒuojqn„远ÐyRpå•öt¹Á¡‡­%nU._ð¿å¿£x·ÐÓšßÂðÅ4ðèqE4bXÝÖWB@Ü ê2Ê3þÐõ¡¥§Óþù?¹k±œ·¾’ö·´Ð¦Ó䵚å¯ÓÉ1F#dR ãäçŒSK{ék|îÚüл[ÏðW%Ô$𦩛{í?EµµŽÙg–îqh›ÛlkÈÁݵùÏð÷Ï É6ž–²ùëuò·â]oø[üËŸfð›YµÔº,°©U‰RÌUÈã-¹p;îµ5?wíµÿ ßòc¼ír‡‡¯<­hë}¾‚²\]¦6€®â$8ùqÏ$†´©û'k“ÛK¯b½¶­àÛR[{{-k(ãGÑ=¹‹æ–ñ÷D'8$óÈIFêïMùÖVýo Ûµ¬^[µŒ·«7†Í¤#–pÐyq¹è¬Ýö4´I>û«]‰•|×–Öjºº»ŒKoï™$2/VÈô§Ë«µ[ù öIô*Ï7„ì¯oãÕ,tM>ÒÍã‡íW>Ljò²o)ó‚©ëÎzqR­kùµ÷[_½Ûä6švò¿â×èYð„›™í‡ü#þ}¼^tÑ~çtQàì:…Á'ŽEW/—[|ö·­ôöóÒx±wðê‹·1Û’`sÚU?¼Aã¿’M¤½~L²mô5?áÑ?è§ÿà2…@ðhŸôÓÿð?‹ øG´Oúéÿø ŸáEü#Ú'ýôÿüOð¢Èþíþ€úþ'øQdÿö‰ÿ@}?ÿ“ü(²ÿ„{Dÿ >Ÿÿ€ÉþYÂ=¢ÐOÿÀdÿ ,€?áÑ?è§ÿà2…@ðhŸôÓÿð?‹ øG´Oúéÿø ŸáEü#Ú'ýôÿüOð¢Èþíþ€úþ'øQdÿö‰ÿ@}?ÿ“ü(²ÿ„{Dÿ >Ÿÿ€ÉþYÂ=¢ÐOÿÀdÿ ,€?áÑ?è§ÿà2…@ðhŸôÓÿð?‹ øG´Oúéÿø ŸáEü#Ú'ýôÿüOð¢È ÷š‹e—GÓø>̃¸ö¥eq”³4Ÿúé¿øµ\ˆ –p[[ø´%¥¥½ªfÊJÃLëÉÇ^•6I«³üzÍõ_ëV÷B9¹¼S :œ¶¯§_yÜ¥¤—Ÿºò–G Tc~ÿã^B÷ô¢-;7¥ïø^ÿ“—/áø–äñ&…¯Ú¤Ö´ä·ó<¯5®£ ¿Ûœã8ç”ú¥×ú_˜‹Ÿo³óD_kƒÌ2yA<Á’ûwmǮߛœÑý}Ú0¾—þµØ5Í%ï#³MRÉ®eO28EÂtÆwÎHÀÎi_-üé¡&™ªiÚ¬M.—k{6Ö{y–@§Ð•'švv¸u±n€2íßýôÀæüÿ ùÿëÍÿô¢Ú®eï ǃ»oÿ¤°R–ãFµ§üxÚ×¼_ú©?JÒ_Yð-…ªyD%úÎâ_ºV;²ì:p§õ1Òq—fÿ&—âÁëGº±5LJ58ufÔl~Ç# \Þ¬RÈц­„, 8`rz}Fx)û¼©ö’9s]–ž¡?{šßÝü ˆ´oiž%-4½6ú4‹P1O5Ì‘¦Ù§I|BÛ[’6‚wNGJ…jr¦ô÷c’ºù÷k¦š²¤Ò’’ïÃú³/>…©hšÂÂ+k‚º\t0ÂÂé¤ÉB[#]á€Ï6xæ´©j­Åí&¿ðoÎ×ÿ‡& Ój}W3ùî’ò¾Ÿpš—‡%Ônoà‚Á-,죸š[T`Œ²»$±ÊGîÀenLv8¥):\¿Ÿß)h÷_&(ÅAFŸEÏF¾è¯¾å<%â¡§jpyÚ]Ôú½ŸÙç–iŒf¾Vyp)"\Û#89¡Y4º))}Ö¾Ÿ.ývCëÌ»5ú-wûý/ÔtžÕ¯í³o …¬_OÍ´Ï$²™Äª!E —' ÙÚ½EŸ*ºhâõò|»[¯ÞÓ³òm?=;yùö'Õü7âbk ‹Ûm*Ëì1ªyv×RJ  “€b\q9ê9ôUµçžºßÿIšù»ÈPVQ‡oøäfiþÖu_诨izu»iÚtPAköÙây x\—uZ_(7Ìyºö} ¤ð&µ4¦ãRû>ª×v樵n,lŽ2`Œ,ÙwF¼Œÿ¨…¢þißÏ®›tMkÿ»î¼ÿN»ôóÒ˦½N½¦ëŽq `ßí½Å’—u‘´nVFÁÃWàmàóI6œeÕ7øÝ~Nþ¢Ir¸tµ¾å±ÂëZ6·£A¨ZAc¡y®ÚÉnË\2Ûïžg]²¬1ûîC˜À+œàðRI8ÓèœÿÃeú]k}^›^¤ízŸâÓÕ~}6³Ó³:+¿ÝK Áb#°•’îöâXäwXæY–p •³ûÕŽF3”•¹|¢—moí÷7ëÐ#¥üÚf‡t¿éðùwRÙùs]*šy!€EµUf؆F æ· ³*.x8·ºzù½¼¶ßnš—+¼Vֲ龿ž‹o¾Æ Õ¤]. Ñ¥¤DPÛE仟µF—HÎêP8‹…†ço˜VŠ_¼UúiÚÑ’VùËNÉu «ÅÁ{×[hÿ^îÁ­Ûj1x®}:ÊÄÝC¨ê–—ÒܘgC Çåî]þQ‰€df@~l`ž¹Ò|¶Oh¹?[§øëm/²ó³«³kªKñþž¾~A'†uKM·ÔlmáµÔ¯ Ô²Ms;Ã%¸™— c1ºJ¾Zª”‘GÝ*y Ö/²¿^®R_{vi¯[ß½'ç§M—*wé¢ó½þûúׂ®¯Ž¯sZ›{«i~Í‚\Ê$r0p¸^1“ûÇüD—^êßáæRkÍ·ù"cîÛÓ_TœS_'bOh7-¨Ê°B­kªýŠÍÄJO—M#È[Œ+…÷Ç .-ó«ÿ3—Ü•¾|É|¾v—S²é_½ÛðM²…ǃµÓ}<–ŸÙöֱݸmÍÔ’¤Òý¡%ÏÍè7ÃgLœ…ÏY§x(·ºÒß&ž½µºM>×EÎÒºï×妟®ïÑSÃ^'\ºÖ>Ç¢M=ظVï% È(Ãy$¿ú“‘…ÎE.DéÊ÷V¿ÎOn¿ëÐ|ÞòŸf¿mÿà~ Ö´ÍQÐtßìûË[ûD„ÝÜÜÉk<— åa¹L)1.I3/ì}³œW+]n×çÃÝw.÷·KÁ.ê×5 CûeìôÛ}A1Á ¾£4bˉD¢_2‘±£d*9Î)ëÚz»¿ÉyÞö×n–ÛXœc´Kõ¿ÊÖV·Ÿqšoµ=R9¯’ßS‰ä¶¸–EÔî,ÄrFˆ¤‹h×Ê“0Ã!}0âã º^Ýwòé»Z7§žä“’ׯù·¿]ûo¯RÖ•£ë öYZ[I3ÝK5¥ü¯oµfe*Cr¬«. ôÈã¥é¥î«ù;ó?•Ûû—b¥i7þ/Á.Uø+üßrŽ©à]kQ³›OoìÈ­ÖKÛ˜§Y\É+Ü+’.ÌS––Ø¿(ìF)r§öR^©I;ù]-µÕÞáÌõ}Ú~š[Oé{º(ðmÆ¡¬µÕ½´7–sÙGi-«j·6 ¡ÈÿR‘Hr6°Ç“N.Ón]Zwÿ·DÑ)ZK¢kòþ¾ã¶Q…ÐRad´ ( € ( € ( € ( € (  ºú†úQGP<ËTøUá½KÆQø†âßÕç³y7äaØ~{‡F8'ø·;ÓÁÿ#ˆÿ°d¿úÒ{¡šÑÿǬßUþ´ÞèG {á»]Þ%–”†âò;„Ô·ŸµÄŠˆ `y}açÆðzå|œ»|_;ß¿Ïb¤õ¿§ÊÝËÌ›þ­JÇOÑF›=ÆŸ§½”Îí_:¦]X#©Óo!"´ª¹å4¶’·§ü-6B‡»o'Ïú¿©[þ‹ÛeAey5µ¤"ÝäÊ–¹@Š]°¤J¼dá›Ú‰ûîO»vòMZ_~þ¢Š²IöüUÜ~I·òHeï‚/åk‹¶±Ó§„Ç$‚g‘¥ÿGò”˜YpŒ?¼Ž¤Ž=”›•ß›iyÞûî¼÷òÜq÷yo¾—~šüü¯·Ë]=FÕ4Äšhí- ½™ I$—Uº½D¬w¬PP€Í´ Œžjî¶[]·÷wû¾D(Ùy¥§ü7cb_íßù_`ÿ˜üÛÿÔ|»÷·÷ñŽ>î{Ô®—ó¿ãk~ù”úÛ¶ž¿äCâ_õVõÿþ…I¤ÿñ÷kþûÿ触7ãÿùÏÿ^oÿ¥Õp/xKþ<ýÛý%‚”·5­?ãÆÓþ½âÿÐHtÖ‡M²ŽÒÒ7X£É¾I$’ONä“S`,ÿhŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹hŸî·ýô?‹GU‚ÏVHÒþc$¨[†ŒdúíÆ9|ÀÏÿ„wCÿŸ)ÿð2_ñ£—Ìe?LÓ4ÙÞ{+Y#•£h÷5ÿá‰ô•¢ éuƒËÓc¶ffÌîÊ€ž¿§¿ Cwˆ¿ç–—ÿdÿâhÔwˆ¿ç–—ÿdÿâhÔwˆ¿ç–—ÿdÿâhÔwˆ¿ç–—ÿdÿâhÔwˆ¿ç–—ÿdÿâhÔwˆ¿ç–—ÿdÿâhÔnm5«×¶[¥ÓÒ(n#˜˜ärß+ÝhÔ ‡ÿ»_÷ßÿE=09¿ÿÈ>úóý(¶«€™{Â_ñàßîÛÿé,¥¸Ñ­iÿ6Ÿõïþ€*@–€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( Ÿþ>íßýôÍøÿþAóÿ×›ÿéEµ\ËÞÿÿvßÿI`¥-ÆkOøñ´ÿ¯x¿ôRmrñ´ý"êê5ËD„¨Î9éIj?Y‹u2ÝÞ5øQºõfer{¹*8ÆüÔWÅ·²hÚ&¥}lªÒZۼȮ  š|Ûyµø´ŠŠ»±Ï_xòÆÎôc¹†Í-^YæÎ[f/æFˆªf¸%ÎIàpI핾wÿ"VËçø!OÄ=#ûûQ#g…g6ò(»´.ìo3l‚ÊÌ#Dš¯Öÿ†›o÷*í¥ÒßõÔ5ý¥m†‡ow$/uh’Þ„ŒD‚VC°îmÄ”q÷Tãpä–¢ÕEµä½lžß?ɑ̹—kúx£Å7š^·ugm{¥ÄÐZÇ<6SÄÍq|ì\yq‘ Á;VåºTS÷¼ío-5ü_Ü\’Vé£Ô»{ã­"Ë_]f?i2$,D°’8Waq#}ååTžO}æÔ|þvþºØ–ùb¥-4¿ ùü]j`±{xçSuå– $–"Ž 6âÂq±8Á.¯åküœ[_‚íåÔoDþkîvן©RYOmo| º¶Óå.ÂâHÒE™9í)!*G–rÝÐÈãºÖ×·]Ò^]à÷vÖ˽‹ðšB%KWÑõHïäuD²e‹Í!‘["M¡HÇ,0G8§ml¼ÿ š~{-t&ê×éþ×ÈÙѵ(µm=/!ŽXC3#G(Ñ•Š²œ2#‚G½;hšê“ûÕÇÕ®ÅÚ@P@P@P@P@P@P@P@P@P@P@P@P@P@P@?ü}Úÿ¾ÿú)è›ñÿüƒçÿ¯7ÿÒ‹j¸ —¼%ÿ þí¿þ’ÁJ[ÖŸñãiÿ^ñè¤ËËFã(੠иîÄVë Q*"(UEáT€L{Ôò›¬YG«i×VW,ëÔm²8ãü)õO³Oîwv(ë^´Ö%Ž[‰n"’(Œq¼N¡ÞŽp~`Ñ©ºä6|Ë}? þwi‰|*= Óø]î¦×u6º…dŒ\í·c}»“ˆ¶òŽ@ ïIÅ4×ugçýyXiµòw^_×™  ³¶ñÁ¨jÛBðHmÃDzY! Û)»8EÆqžkNgÍÍæß¥ïÍýäÛKy[ñ¹£áû+é¯d¹óI¼Š8›kmòü²ÌŽ„r¬ g9àŠ‹YYw¿ÎÉ~Ÿô*úü­ò!µðëÚ_«}kRC!G¹”¹uP»˜ò¤…ì*8ìyªNÚt×O_ø:ú“m¼-`^éÃέusËaÇÊQ÷…^8Rû˜÷Ë·=1 Z*+¥ÿ×àž¬SÕ·Ý%÷€´Ù'’{û»Ûù¥$’c´‹å¼`1vFùÍÓž1NÚ;iÿû-Wùô êŸoëú¿ù–ì<)ok ü÷÷×׸a=ÃG¸ªÆè¨v¢Œ#ž™$òMRvm÷¿ãoò^DÛD»[ðþµùš^Ÿ™jmàgd2É.\‚rî\ô2Ç–‰.É/»Aõo¹n€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( Ÿþ>íßýôÍøÿþAóÿ×›ÿéEµ\ËÞÿÿvßÿI`¥-ÆkOøñ´ÿ¯x¿ôR´P@P@6Y(ÚG8D‰ô€2¿á'Ñè!ëþ®€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐH“AñÇ*îFÆ7Z``é—‰u]"ÇRƒIÑc†öÞ;ˆÖ]ZPÁ]CqlFp{Sp-oñGýtüÍÿÈÔ\Š?è ÿàÞoþF¢àüQÿ@Ýÿóò5ßâúè?ø7›ÿ‘¨¸ÿÐ7AÿÁ¼ßüEÀl³øš(žI4í")f?ÚÓÿnÔ\xGZhjR[-«ÈòÆÑ,ž`R’26s·=Zh z`P@P@P@P@P@P@P@P@P@P@P@?ü}Úÿ¾ÿú)è›ñÿüƒçÿ¯7ÿÒ‹j¸ —¼%ÿ þí¿þ’ÁJ[ÖŸñãiÿ^ñè¤ ÚåãiúEÕÔk–‰ QœsÒ“™ŽêÌ|H_˧ëM~,ÅÃk‹+(',•ãäßÏÍòã?5H7‹¯dÑ´=NúÔGæZÛ¼È$¨!r3È8üEZ.—i}í"¢®ìs–>2K{=FïR¿Óõ5ˆ­öž¾\NîÅ|¬´Œ»ÚI.3€3VÚK]ïeç¥ïùýÝô"7oåwåÿ÷ý軣øßIÕñ¡2«9x£Ur¥ãvRJ6á‚FÉb”Ÿ,\¼¯òNÏñ·ß Ö­Eot¾ôÚü™Uúóý(¶«€™{Â_ñàßîÛÿé,¥¸Ñ­iÿ6Ÿõïþ€*@|±¬±´n2Ž ‘ê [ŽìEn°Å¢"…T^@èôǽO(ºÅ”z¶uerαÝFÑ»!€aƒŽ1ŸÂŸTû4þçq§c7Qð½¥ì× ‹«o´„2,ª¦T ¤Üƒ‡]£ž„0Vw]î¼»ýýVß6غ%åoUÿ§T-ׇûLZ¦£{|ÂQ,žR>1‚Ÿ»EJ–SÆpÇŸG´£.ßÖ¿×DïýhVÕ¼i©‹´–úò(/¤2\Û¯”ÑËò¢à‡FÆ<°A`IÁé…Ëo/óoׯAÞÚ­õýjG'ôòW—ðÃ0d¹‰$B·1™M•'wR­ƒ‚M8éo+}ëgø+ôvØV²ÓMÿFÛÃö–âÌFóbÎæ[¨òG-&ýÀñÓ÷ ¡io%o–Ÿä n¼î]Ô¿äuÿ\_ù½¦Ep|!gk ±ÚÝýŠ8Áž2â6ØÜ›”œzdVŠœo¹Q|²¹¾ÖWÃ6ú ñžmVÌÙO4’ñíÚ æo•öädî\àíµ$ªÉ¹lÿÏ£éÓÍZé“ Ó³Žéÿ–ÿ;öÜ~¯á9µ¥[WW†]"Æ(c¶Ùp¹‰£Á›yíÑó´Š•gªåoÐo[[FŒ‹ŸC‹­µÍÕÔðD±Ø-Ìê‚Ì+«€Ž#'‚©Ë‡?(Œå·-Öúkéué³wÓ[ëähô{k§¯õ§n…J¿Òô-Qµk‘qyxòO#WÛû° nTŒs±zûdÖŠ*+¥ÿßëÿ ±:ó6ü¿"…ò$Û×Íßþ”ËR¶ÕS € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ‰ÿãî×ý÷ÿÑO@ßÿä?ýy¿þ”[UÀL½á/øðo÷mÿô– RÜhÖ´ÿOú÷‹ÿ@ K@P@P pGB(O>oùêÿ÷Ñ Ï›þz¿ýôhóæÿž¯ÿ}<ù¿ç«ÿßF€>oùêÿ÷Ñ Ï›þz¿ýôhŽìç.Å©9 &‡ÁPEâ]|G kje€íUTs@…+ïøW‘ÿÐͯßÈ?øÕÿ…yý Ú÷ýüƒÿQ`øW‘ÿÐͯßÈ?øÕÿ…yý Ú÷ýüƒÿQ`øW‘ÿÐͯßÈ?øÕÿ…yý Ú÷ýüƒÿQ`:hÐxG‹Mµši£‰¤2b¥Ø»³¶v€:±è¥L€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ('ÿ»_÷ßÿE=s~?ÿ|ÿõæÿúQmW2÷„¿ãÁ¿Ý·ÿÒX)Kq£NÞFK[tk{°É jÃìÒpB€‡Ö ùÇþ}îÿðOþ&˜œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Rò][í‚áB3³Ôå¸êF:‘HsÇÿòŸþ¼ßÿJ-«H —¼%ÿ þí¿þ’ÁJ[u P7wVöVí=Üñ[˜Ý$®FNIã©£ª@M@H’pRi6’»Ø%ŽxRh$Ib‘C#£¬Bê)´Ó³ú( €#Y¢iÞ• ±¨fŒ0Ü çŽÀàþF€Ø’€ ( €˜"–b@É'€)6’»M»"¾Ÿg©[ 6î Ëv$ `‘dBGQqUf„šèKÑN›à•%@Åw#2㸠ƒô¥æD”P@P@P0][Ï$ÑÁ×c¶b=SìñÉ™$|<BóòŒã+ærx­­ï%o´ÒóV¾þ·Õi§©•ôoû·~OÓôòó6üO†Ö«ü2{íÚÚz®‚›åævµ¯§Ïúëªùïu›ë[Ùô½OÄrÙYÁ4È5Ž–fÂÉ%6dùŽx\£p›æ¤ûÙéßÞkðI+.÷-.Y.×_-?ϹnÞâ ø&úòT·´·XÌÓÈv¤A­]AbxPX“ÜÞºª´±¿T×âŸèÌ`›¥§uù˜7‘&±âkËËNñ¼¢êkt¹qåÊ-T´Gc;QÐuù…s¨µžšoÕ^SÖÞšùécfÓ’³ëòÙ~Ö´{]d[É®ÛLòé¶PE%Ä¢9.ZU#kÛ³Á^ œk{óó[¬›ùrÇ_ø&? WÒÉüµÛåù ñÄך=ï—§_¥œ¶ÖâàÅ<ñF·9c…D1;È~S¬˜sÎFtõ¨—K¥oW«ôó¿M´f’V‡ß¯õù[ô!¸ÖµûKÔáÔ$»yî/¡K&·Ë11T9oÝ÷¹³ÍMíw¼So¶±»û›zþZ {ÒÓºVïå÷—|wƵ­Ok®l +cö¯Ý`6fùG–ª¸‰Á4ê· 3qÒÍÛÿ_×baïNíú™wÚÞ½k¢h2K®Ãoý¥ln&½»’HÒM¨V%c ŠËœ¸àါ¨¹jJ §ã®¿vš'{=o¸GXóyýÛþ}öô¹®º®³çÛXKyÒßG Ò\[*¼K¦g qÊ’ª<þøz ζŠi/†ï^Íh½y¯òA²ûéó¾¯ÿÕtºûùI|K|ºHõ86š¥,-â·dAöPçÎ…2Ç!²cª÷ÙëVÛûßûr^©úüžªÉh¯·ôþõnÛyêhêž)Õ­þÚÖº¸kä7‹.›äÇþ…jÆ)±·%cå‰Vó8+8^J>v»ìÜ’·âÕ·Ò÷‹ð·šå¿üÃs­ÐåÔ Öu->îþ]Ea·‚xÚXãFVs *6(~AŒäòy4¤íNN+TÚ_r¯K oõ_©ÅÝë7ú¿†õ[vÖ¤»3hòÍ}qćN˜<œʆÔ‡Ëa2ëTâ’wW…Ÿ{½|»;tÙÜ´ÜfžÏÞÓÓgýo{­Ž›ÆV¯iáT—V¹m¯-žKÆXC* —æo“` œçh(ÏÉ'ûضí¿ä×âôù™ÓV¤Ò]?ÈÀ²¿Õôí+Q“P7:‚ÅjÐÆÑ¹_=ÕEÜX²‡8©mÆ)==Ôý>ø&÷¿#D““Þûÿ¯+¾Õo¯í¯ÞçZÓµD£6בÜI!²dQ ¤ýìŸGZð¥&·W×äE=f“ûŒ‹ýwT´ðÎŒókÏö£oö£s<–ö°‘t¹…òrÀ… “ó|À(¯îNQDþ~‹­½V–»mܨj®ú»zo»éýh‡išö»{§®²Ú“€·–p‹$†1¬±Â\Wvs!# 1ß5U#Ñ_ãü9­óÑ–íÄuŽ®ÖK_ºåñv¨¶©-¦¾—·RY¯m˜B«¦¿¶BÆ]6+¿ßß¹ àŠ/dî½ß{ÕKå«KÒûõ-荒÷´ôþ¾}»ÂwWº—‡o>Ó«Yê½Ò+› ”¸*6Ž–4Rà“ÆÎ›sžó^7¢ìµ³ùïÿ ݪyhqšoˆn¬4 (m|FÁíôè^ÒÝ’on3†¶?&~\"í\8ß’O»|õZê¾q{ËóÕh¹uD%ËžŸßfº~¾wÐê|u©j¶SìÛö²i׌‚$q#ÆÑíVÜËóãÜVQøÚó‚ûÛLµ¬Uônÿ•ÿ3W×õÛ§ÓÛZ‚Þ®eûFîX­rDpºÆ\Âéÿ- £žRw]´?y¯¬¶¶ÿp»ú|®¿Ï½ûYÖÿ²5-B}f,A5½¹{hã{xÒ$áŠå‚ïv rA‹vN7Ñ6þI7eêì•ß—[·*úÛ[+úéý;#2ëÅ:˜‘à±ñ5´–êTMVâæÞb±ÂËš xú¼‡A;zðA…v•ôv?y¯ž–Ù­þêÑ^ÚíòÓúþ™ÕhòHþ'´•å·–âçGW»{Wݰq±”÷t˜>•¥’•D–—þÝú%DF¶ƒÞû½ßëæÎ“ÊŸþ~ãÿÀSÿÇ*J*ùûÿOÿ ÊŸþ~ãÿÀSÿÇ(ò§ÿŸ¸ÿðÿñÊ<©ÿçî?ü?ür€*ùûÿOÿ ÊŸþ~ãÿÀSÿÇ(ò§ÿŸ¸ÿðÿñÊ<©ÿçî?ü?ür€*ùûÿOÿ ÊŸþ~ãÿÀSÿÇ(ò§ÿŸ¸ÿðÿñÊ<©ÿçî?ü?ür€*ùûÿOÿ ÊŸþ~ãÿÀSÿÇ(ò§ÿŸ¸ÿðÿñÊ<©ÿçî?ü?ür€*ùûÿOÿ ÊŸþ~ãÿÀSÿÇ(ò§ÿŸ¸ÿðÿñÊ<©ÿçî?ü?ür€*ùûÿOÿ ÊŸþ~ãÿÀSÿÇ(ò§ÿŸ¸ÿðÿñÊ<©ÿçî?ü?ür€*ùûÿOÿ ÊŸþ~ãÿÀSÿÇ(ò§ÿŸ¸ÿðÿñÊ<©ÿçî?ü?ür€*ùûÿOÿ ÊŸþ~ãÿÀSÿÇ(ò§ÿŸ¸ÿðÿñÊ<©ÿçî?ü?ür€*ùûÿOÿ ÊŸþ~ãÿÀSÿÇ(ò§ÿŸ¸ÿðÿñÊ<©ÿçî?ü?ür€*ùûÿOÿ j\B:H²J„fë¸÷_Jç<ÿ ùÿëÍÿô¢Ú®eï ǃ»oÿ¤°R–ãFµ§üxÚ×¼_ú©Z(®£§ÛjVâ ÈË u‘v»#+)È`ÊAÔ6iö¨ € ( € ( € ( € ( €3´ýËO»’êpóÈ»KÜ]K9UÎp¾c£=—àz º¬êïýjhÐ@ å²]Û=¼­*£Œ­£) ?I«;izm®—l`³W Ì]šIZWv=K;’ÌzIàÐU_ ­«bÛiöÖ·w7PÆD÷EL®ÎÌNÑ€OsÀÀÉ'©4–ŠËÔ®ÿ"ÕP@P@P@P@P@P@P@P@P@ÿÇݯûïÿ¢ž€9¿ÿÈ>úóý(¶«€™{Â_ñàßîÛÿé,¥¸Ñ­iÿ6Ÿõïþ€*@‹R¿N…$•%}òÕb]ÌXôw¥°¿¶þ¿þ¿øQt¡V\]­€JžÙÅ%0 ¯yg`í·p[y‡ çHqöÏZöþ»~m/˜l¯ýwü‘b€ (½åý€O¶ÝÁmæ' MÇÛ=h[Ûúíù´¾a²¿õßòEŠ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ('ÿ»_÷ßÿE=s~?ÿ|ÿõæÿúQmW2÷„¿ãÁ¿Ý·ÿÒX)Kq£ZÓþúóý(¶«€™{Â_ñàßîÛÿé,¥¸Ñ­iÿ6Ÿõïþ€*@™N× –^A*>™¤Ÿi—Õïþr #wgbÌrO¶)€”P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÇݯûïÿ¢ž€9¿ÿÈ>úóý(¶«€™{Â_ñàßîÛÿé,¥¸Ñ­iÿ6Ÿõïþ€*@–€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( Ÿþ>íßýôÍøÿþAóÿ×›ÿéEµ\ËÞÿÿvßÿI`¥-ÆkOøñ´ÿ¯x¿ôR´P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@Dÿñ÷kþûÿè§ oÇÿòŸþ¼ßÿJ-ªà&^ð—üx7û¶ÿúK)n4kZǧý{Åÿ  % € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ('ÿ»_÷ßÿE=s~?ÿ|ÿõæÿúQmW2÷„¿ãÁ¿Ý·ÿÒX)Kq£ZÓþRì.$$Y‘c‘ŽÒ’¤yg ÝQœÞ;­m{uÝ%å×þwml»Ø±ÿ ¤"Tµ}TŽþGTK&X¼ÒÕ²$ÚˆÜrÃsŠvÖËÏð·ù§ç²×Bn­~Ÿçý|R‹VÓÒòå„324r€X«)Á# ‚8${Ó¶‰®©?½\}Zì]¤@P@P@P@P@P@P@P@P@P@P@P@P@P@ÿÇݯûïÿ¢ž€9¿ÿÈ>úóý(¶«€™{Â_ñàßîÛÿé,¥¸Ñ­iÿ6Ÿõïþ€*@|±¬±´n2Ž ‘ê [ŽìEn°Å¢"…T^@èôǽO(ºÅ”z¶uerαÝFÑ»!€aƒŽ1ŸÂŸTû4þçq§b޵áÛMbX帖â)"ˆÇÄáJèáÇæ ‘Û®A£gÌ·Óð¿çv˜—£Э?…ÞáášmwSk¨VHÅÎÛpæ7Û¹8‹h(äÞôœSMwV~ו†›_'uåýyÁà›;ao†¡´/†Ü<{%’¡]²›³„P@ gæ´æ|ÜÞmú^÷üßÞM´·•¿š7þ²¾šöKŸ4›È£‰¶¶ß/Ë,ÈèG*À¶sž¨µ•—{üì—éùßB¯¯Êß"_½¥ñº·Öµ$2{˜ñ K—U ¹*HP£ŽÇš¤í§Mtõÿƒ¯©6ÐÂÖîœ<ê×W1ܶ|¥xUã…/¹|»sÓ•¢¢º_ñM~ éÚÅ=[}Ò_q@x M’y'¿»½¿šQ²I&1«H¾[ÆÑwado˜üÝ9ãí£¶Ÿðéß²ÕŸ@¾©öþ¿«ÿ™nÖö·ðßÏ}}y †Ü4{ЬnЇj(À9é’O$Õ'fß{þ6ÿ%äM´Kµ¿ë_‘©¥éñi–¦ÞvC,’åÈ'.åÏAÓ,qIh’ì’û´Vû–è € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ‰ÿãî×ý÷ÿÑO@ßÿä?ýy¿þ”[UÀL½á/øðo÷mÿô– RÜhÖ´ÿOú÷‹ÿ@ K@P@Pe‘b¤s„@XŸ@(+þ}þ‚~¿áJèþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]©‰4ÏÌr®älcpõ¦©!†7(Ó6AÇÜÿëÔßÈìƒþ{7ýñÿ×§wØdóÙ¿ïþ½}€6Aÿ=›þøÿëÑwØdóÙ¿ïþ½}€6Aÿ=›þøÿëÑwØdóÙ¿ïþ½}€¡¦^®¡f.cBˆÎ꡺áX®Oסj˜P@P@P@P@P@P@P@P@P@P@POÿv¿ï¿þŠzæüÿ ùÿëÍÿô¢Ú®eï ǃ»oÿ¤°R–ãFµ§üxÚ×¼_ú©¶¹xÚ~‘uuå¢BTgô¤Àæcº³ÁréúÓ_‹1pÚâÊÊ ÆKåDxù7óó|¸ÏÍRMâëÙ4mS¾µù–¶ï2 *\Œò?C–‹¥Ú_{H¨«»匒ÞÏQ»Ô¯ôýFÆÍb+}§¯—»±_+-#.àv’K€Œà Õ¶’×{Ùyé{þw}Ûù]ùÃýÿz.èþ7ÒuDG‡|hLªÎ^'DhÕ\©xÝ”’¸`‘€rA¥'Ë/+ü“³üm÷è5«Q[Ý/½6¿&UO[‰–°_Os;Ÿ&Ñ"Ž9B¬QÈÀî“ ÀH8_›®à“V×—µïòm~/òºAuk­´üÏÎăÆÖÑE#Ikyp¶æGº–UÖ1+ÆÃ>OÜo»¸áIÚ2(ûÖó¶¾m-?ä®®Áõ·žtþ¾e½?Åv÷·ðÛ-…ôQO4¶ñ\Ȩ"’H÷nQ†-ü A+ƒŽ¹âˆû˶—ùiþå 6—ßc[Rÿu×ýqähþpÖž °¸ŽÚ[¦ŠÆ&ÄT;üƒ¸ù‘XÎ|rìTcÌìeê>/¼·ð曬Ûi¶í²Ìc¸¿òœ»(e† #c,‡$^6”y*ºo½¼ß}<·zþ¤ÇÞ×ã²õ}?Êóhþ0ƒWñ-ΕhÚp[VxäWÔí{×ïbåãq`rÁ* ™9-¼½m¯kôß§}viw¶ún¯o??ŸcKAÖ[V“RG±–ɬ.±Y]Y›äFÝò’;øÆîçO·3Ü+(U´›A` l_™¶‚[häã•ío_ëúù”–þò9[ߦ¥l¢HõÈž †dÒ¡XÈ(bûë,Ÿ»eÜÀ©|ò8Ïœ”T›Ù$ïÓyj»ì¶¿[irRnÉo{~ O/À҇ƖË ‚ÖöKI$7E’¨dFËÉ܃… #œT“‹kÕ/;oo¹ïkÚÂOÝ¿ÏÓ[kým¨û_é·&1W!¤HU|ÖU תïBðaÖ„®Ú]íø^þ–Oî÷t~ƒ·ç±~ßQ‘üA`ákxfVÁÝ—2žz|ƒõ¨æJ“èÿDÿQµªKªýL¤ñÅ„É%Ž¡ Ë–Ìÿ ?õÒ_ýÔôÀ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €"øûµÿ}ÿôSÐ7ãÿùÏÿ^oÿ¥Õp/xKþ<ýÛý%‚”·5­?ãÆÓþ½âÿÐH–5–6ÆQÁR=A  q݈­Ö¢TDPª‹Â¨˜÷©å7X²VÓ®¬®YÖ;¨Ú7d 0 0qÆ3øSêŸfŸÜî4ìfê>´½šâAqumö†EÕTÊ„›pë´sЀ`JÎë½×—¿ªÛæÛD¼­ê¿àtê…ºðâ_i‚ËTÔoo€˜J%“ÊGÆ0S÷h£iRÊxÎóèö”eÛú×ú胣]ÿ­ Ú·ƒ­51v’ß^Eô†K›uòš9~T\èØÇ–# 8=0¢¹måþmúõè;ÛU£þ¿­Häð>žQãŠòþf —1$ˆVæ3#I±ò¤ã.ã*U°pI§-åo½lÿ~ŽÛ ÖZi¿âhÛx~ÒÜYˆÞlYÜËuHå¤ß¸:~ñ±ô--ä­òÓü­×˺—üƒ®¿ë‹ÿ#@´È®„,ía–;[¿±G3Æ\FÛ;“r“LŠÂqSƒ÷*/–W2ÃZÊøfßA> Óͪٛ)ó¦’^=»A\Íò¾ÜŒËœ£¡Ö¤•Y7-Ÿùô}:y«]2azvqÝ?òßç~Û’éþ6Z…¦ÝQL²º’òÞÜÃûå•Õƒn—w)™ãh<˜‚Ôõæ{Ù¥èßé²ünõ'–Ñå^Wÿ·moÉ_çÜ¿áí.ûLÔ5[‹ÝNÎê;û=c†Õ¡1¶ÕLn26áµ°ç?A1iAEî¿VÛü^Ÿ©RÖ|Ëúìmù‰ýõüèºóûëùÑt^¡ÌÊG¡ÿÐ8ì-zѯDÐGwqfåÃ,Öì©7LAPÌ;Ã6ÖWÏ|÷wwWr$‰,ÓMþXÉ ª$ çšSƒ‡Gÿþ¬.î¥Ø«ià«W·^_}– µ¡t1M$J¾]ÙPáH¨Èë9Ÿ77›kÊûÛï{÷%­-ýoëËBŧ„´ÛKˆ'ˆÍ¾©.FXr_øOtap?Ø^µ1÷Rû*Ëúïºôc—½{õiýßðu~d÷:—ZmNNöÕ¤Ž8æ‚!ŽeBĹ ¼Àí"¥EYÅêŸù[ôÖÖÑ£"çÁÇbëmsuu<,v s: ³ êà#ˆÉàªráÏÊã9mËu¾šú]zlÝôÖúù=ÚéëýiÛ¡£á *ÿK´ºmZä\^^\ä`Êû~UP7*F9ؽ}²kEÒÿ‹oõÿ†Øy›~_‘/„¿äýt—ÿF5J¯L€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ('ÿ»_÷ßÿE=s~?ÿ|ÿõæÿúQmW2÷„¿ãÁ¿Ý·ÿÒX)Kq£ZÓþoùêÿ÷Ñ Ï›þz¿ýôhóæÿž¯ÿ}<ù¿ç«ÿßF€>oùêÿ÷Ñ ;³œ»>¤æ€2¥Ñæ–F‘õ­OsN$@? ¼R° þÓþƒ:§ýýOþ&‹aÉÿASþþ§ÿE€?°äÿ Î©ÿSÿ‰¢ÀØrÐgTÿ¿©ÿÄÑ`ì9?è3ªßÔÿâh°öŸôÕ?ïêñ4X Úe”zu’ZÂîè…ŽçÆI,IèêhZf˜P@P@P@P@P@P@P@P@P@P@POÿv¿ï¿þŠzæüÿ ùÿëÍÿô¢Ú®eï ǃ»oÿ¤°R–ãF¼Œ–¶èÖ÷a’Õ‡Ù¤à…ÿ­@óüûÝÿà,ŸüM08ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@¥äº·Û„gf/¨ËqÔŒu"çÿä?ýy¿þ”[V/xKþ<ýÛý%‚”·6ê@( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (–ñÿüƒçÿ¯7ÿÒ‹j¸ —¼%ÿ þí¿þ’ÁJ[vëq%¼2µÌJd_h·'ã;ýê@•?üýÇÿ€§ÿŽPåOÿ?qÿà)ÿã”ySÿÏÜø øåTÿó÷þŸþ9@•?üýÇÿ€§ÿŽPåOÿ?qÿà)ÿã”ySÿÏÜø øåTÿó÷þŸþ9@•?üýÇÿ€§ÿŽPåOÿ?qÿà)ÿã”ySÿÏÜø øåTÿó÷þŸþ9@•?üýÇÿ€§ÿŽPåOÿ?qÿà)ÿã”ySÿÏÜø øåTÿó÷þŸþ9@•?üýÇÿ€§ÿŽPåOÿ?qÿà)ÿã”ySÿÏÜø øåTÿó÷þŸþ9@•?üýÇÿ€§ÿŽPåOÿ?qÿà)ÿã”ySÿÏÜø øåTÿó÷þŸþ9@•?üýÇÿ€§ÿŽPåOÿ?qÿà)ÿã”ySÿÏÜø øåTÿó÷þŸþ9@•?üýÇÿ€§ÿŽPåOÿ?qÿà)ÿã”ySÿÏÜø øåTÿó÷þŸþ9@•?üýÇÿ€§ÿŽPåOÿ?qÿà)ÿã”ySÿÏÜø øåTÿó÷þŸþ9@•?üýÇÿ€§ÿŽPåOÿ?qÿà)ÿã”ySÿÏÜø øåTÿó÷þŸþ9@•?üýÇÿ€§ÿŽPåOÿ?qÿà)ÿã”ySÿÏÜø øåTÿó÷þŸþ9@•?üýÇÿ€§ÿŽPåOÿ?qÿà)ÿã”ySÿÏÜø øåTÿó÷þŸþ9@•?üýÇÿ€§ÿŽPåOÿ?qÿà)ÿã”ySÿÏÜø øåTÿó÷þŸþ9@•?üýÇÿ€§ÿŽPåOÿ?qÿà)ÿã”ySÿÏÜø øåTÿó÷þŸþ9@•?üýÇÿ€§ÿŽPåOÿ?qÿà)ÿã”ySÿÏÜø øåTÿó÷þŸþ9@•?üýÇÿ€§ÿŽPåOÿ?qÿà)ÿã”ySÿÏÜø øåTÿó÷þŸþ9@•?üýÇÿ€§ÿŽPåOÿ?qÿà)ÿã”ySÿÏÜø øåTÿó÷þŸþ9@<Ô¸…t‘d,”#Í×qî¾”ÎxÿþAóÿ×›ÿéEµ\ËÞÿÿvßÿI`¥-ÆkOøñ´ÿ¯x¿ôR´P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@Dÿñ÷kþûÿè§ oÇÿòŸþ¼ßÿJ-ªà&^ð—üx7û¶ÿúK)n4kZǧý{Åÿ  !Ôõ=?IgÕ/­¬afز\J±©lŒ±8j‹J×4­^YcÒµ {Ó «;[¸u‰æ ã=©ÙÚáu{€( /®àÓ즻».É#àªIÀæŽË¾ŸxÒðÌÒ,2£˜›k…`J6Áô8 ãÜP+…ÌñZ[Kqs"Å (]ÝŽ¨$þ¤ÔUØâœ‘ZÏU³º²ŽñH`‘‚!¹‰íÉ$à ²<’ãœñTÓM"SM]Y^A}šÖO20ïpG̬U‡>„K¢}õûdzk±=P@GÑN›à•%@Åw#2㸠ƒô£Ì<‰(8&Štß©*+¹pGÁ¥aäI@ÌK1À&¦RQM¾ƒJîÈ­m¨Ú\ÛZ\Cpž]ꆷ,v™]Ãó¹8ëÁ«qqn/rSÒåªC*G©YKw¬7 $²$Ž¡>`B0WäqÄ:þF…®Þ_Žß= tP@\^Am=´3I¶K§1Ä0Næ Xnž}([Ûçù˜l®>)¢•¤X¥Gh›dX€p}?ˆ£¥ÃÈ’€ ( €#3D³¬T2—XË ÅA=Gæ( ‰( € ( € ( € ( € ( € ( € ( € ( € ( Ÿþ>íßýôÍøÿþAóÿ×›ÿéEµ\ËÞÿÿvßÿI`¥-ÆkOøñ´ÿ¯x¿ôRgŒ¡–ãÂz´6ñ¼²Ék"¢"–f%N©¥ö£ë;ò0S‘ÏNiÃÝwþúû½Ûÿ^Z[RRºŠÊþò-=`ø½äÔµ èœ\L ±±º0ÉÍå.ó»B«d`òNJZC]í¯­üÿM,þå;éòü¼¿^¿"MjÓXò`:b¥ó*-Gu¾í¯ÁôÒûê%ñ&û/ø??S–{=SPеW\–I4™ —Fqºïp*!ÏÞdEò´ÕV‹µ¾ÂÝ÷Öývµï¥õEÝ©yûÞ–éÿ­¯}N£ÅÚDká[{hSQš+[«yXEq<“ì©c¸1‘° 8‘Ž@¥'ûÈÉì¯ù5ÓÎ߯R ­M¥Øç¡Òõ‹ê©}<÷Ê#šIJ*3DLnv©,†` '“Í'xÅ'üªþ·ín¶ºI[ïÔµg+ù«zyþ·6¼ Üv׿]Bþä2!X®¬nà168k‡vlñœ {òë]R’ŽúÛîûþò)ük›çým÷Ún®ÛÇi8¸ÖÞdO¬ÓÌÊdw+q¹IÁ@Êž®9ªÔ¤¡ÞVôäÓÿ&üt]ƒu¯oÊ_å÷­îUÓ-¼A,*·:ž°.åxò³»‹ióÓÌe™Ý£ÀÿÕRq€0EFé/‡îû2ùïdõÑÚÎúŽm®g×_Ïîôüz—õ“qa¬¤›ZŽu¿³‡O+-Ë[4Œ0v#1>f|ÂXñíQ'·Åïé.ÖéÙéÖ÷ ¤“íe÷ß_ëkXµðú=YoÙõmBýî \ÚÏctˆ%Ü2Ë,ŽÑ|ØRq€1¢åQ|»iýk¯®½+ó|ßõÛÓ©Hl fѧ:Ôçí,Ü ˜‘WíR~óÍ\ÆÃ`QåÊÛ¬3ƒz_²ù{ªþO[ÿzýôM¥o;yöôü¿WÄÿn-²h©<¹ o¸Š%ýáß'š™¸1Êg§¬šðÊßsõZúèø4óù¿Í~]ú˜PYɧÆÖÓÇâXí{Ó0´k¶c)˜*I*P±Êü»ˆßÎ*7³´wQI‰oúZþí¯bôöô¾¾ŸÖö×n…´´ñ7ü#Ú¥ÝÔÚ€ÕwÁ*´Œ‹—˜Ç²†9ó9B9 A­'dÕ¶mß}®íçm¼í½ÒHÎü4õ·_?ÂäQEx–ÖñßÞë×Úa3à[Z_[J²â?-s4Å?ÖŶäàôqjÚòé÷»ß¥öJý.Ttwéu»§ën¥­Zfh0i©¨Cu™IRÜ8‘µpÈ!öã?ÅŽõµ_z»³Óÿ¶é•ɧ¤?¯3 Ð,®4ísQ·óo¥²0A$mu4“0™íg'ÊŽ ÍJ·+^nÞ–_=î-}×寭ÎKDðé}`Àé®[y æ?Ú.cRÍ:´{dÏ ¯Í„<‘ÎNkUÖê1KÕ'[t鮆®ÞÓ^ÿ‡éçÔ]%|C.±a&­¨jV’jQ>Áu*HžZyŠåD¤¿˜˜›†sœmÇJ·´“ó—ÝÒÝ6¶ÖÕ}ø´ùòüo÷þ–ù›Þ+‡Zm]SI’écž&äfÆðï`:ofŒüAO¥cÊÛ{FÏףݪó5k™(í{«ö½¬þVz15/í¶ŒÌÿÛ‹u=¿¦$pHîWm“àSÄ¿(PØïUË$º§öµ—7–üÞ{X‹©FíY{Þ¾_ð:^÷y¥ë­iesh÷Ï©6¥tÌg‘ÈŠ ' 6V<©XŒd®r0*º£}¹uîþ¯_-6{6äVºß{éÛþ ¿õÐ].ÊûUÕ¥IÄ6ÚXŽV…ežæÈŽÜ f$6sæwäîëÍMS“ëm>ùþ–Ñù]^Á%ӯݯãÛå¡R+J3a&·.·¤÷6 ß´%¹Œˆ¼Àûqc(`üôíŠßOkeÞWô³µºZÖzu¹›MAö²·{ÞÚÿ[[¹Ók¥¿á$Œ_ÿk}“ÈO±ý„\y~vã¿Íò}¼¼oùq»Þ°\Þ÷/ÅÓ¶ßvûߥ¼Í%k+í­ûÿžÛ[üŽJiõK{8Y¼A"ÕšSq»Ï7‚ õL£ü¸+ßk—™%ðénÿ ¯~½¯ç·QJöo®¾–º·—§•îiÉ6­¦éÓjZlšƒ[¥ÿ•co¨K(’T–5ŒüüLw üíSi57¬®½5º~©/¹ë°ïܺ+?»uóOÿ6|Q ݆¬l`{ÉÎäŠkÄûL²Æ“æ„’á€ù²x§Q©TÓE¯üÿöïaBêêÿ«ÿÃ/ÈÅÐíoû@½ÖcÕÚXíîíĪ.äL¾_˜¡‰ '2I PôRî㻤ïå}tóØ;vRsÛÎߦçgáÏùØÿÇÿú•ÿ‡ü|tÿ–ŸízÕÏòëêÿ?Ë·‘£R0 € ( € ( € ( € ( € ( € ( € ( € ('ÿ»_÷ßÿE=s~?ÿ|ÿõæÿúQmW2÷„¿ãÁ¿Ý·ÿÒX)Kq£ZÓþ:òQ yÛ¸ç  ð“è¿ô‹õÿ W@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(º“_øIµ5ÔØiÇPQ…º04 c‡ÆzqÖ„Ôon õÑ—á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ )5ÿ„›S]M†œu[£ó@Æ8|g§hMFöê]wþ}þ‚~¿áEÐ ›Ä>BÏyo"«× 09‘Ô¢ê÷ —Ä>˜¡šòÞO-ƒ¦åÎÖõpy<Ñu{‡ÿøIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€Ô‚Dšçˆæ9Wr61¸zÓôP@P@ÿÇݯûïÿ¢ž€9¿ÿÈ>úóý(¶«€™{Â_ñàßîÛÿé,¥¸Ñ­iÿ6Ÿõïþ€*@Íñ/ú«úÿƒÿB¤ÀÑ’gùPÆ®Àn;›hò4®ú rJ¤ìo–EP̾™÷§u¯ˆíî‘Ñ7° Ç`úd~˜¡>ÿ×p]ÀX(sÎ0vœsÈç±¥t; ±—R§÷EIÎÓ’r1^´\Èœ³ qƒÎ8ãžhæAa~×Íãyà¸ÆE;¤ÝB‰ã$…$דÐQq ö¸qœ¸9Æß-·~XÍ@#ܪ¼!HÚã9 ôàÔŠ/­ƒ KyBÒ)ß´€8àÒæV¸íÐòÁrÀäQ€ö'SM±L€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (  n>ì?õÌ3I0 ( € ( €"øûµÿ}ÿôSÐ7ãÿùÏÿ^oÿ¥Õp/xKþ<ýÛý%‚”·5­?ãÆÓþ½âÿÐHþ!åK‰Ûíжdà6Iü&“BKi¼ß6±ˆÚÁ°#·qS~Ìcf·¹1:‚ϹBãn0{ŸóéC¶À´[wf]Ë•FߺGÐPìï¨-m=óµI Wg9Ƨ‡gÔ€töÄ8,Ú­·¡ãŸÓ§½7kÞáÒÄri÷îB7 Q÷ÉäþF§m˜ &›$„³•fbKˆ•èÀÏÞ†—p¸åÓåHšߺu ÀÇÏLdñÓÞ›³Òà´4Ù{U`Sr¶øõô=}Åõ²”‰÷çb¢9¢¥KPñž—$1êZµ­›ÎqÏ:Æd<}ÐHÏQÓÖ„“|«pz+½‰lµo·@fµ¸i#ñç|ÊÅXsèAYY>úýá³k±?Ú§ÿž­NÈÝÌ&RêI¤ÒJìc ¿yáI ¹Å"†GFX„ÔSq³³ÇýªùêÔY‘â{™ÚÞÅ ¯µ¯  3ÁùÁçñ•¬×ÿ»_÷ßÿE=Pßÿä?ýy¿þ”[UÀL½á/øðo÷mÿô– RÜhÖ´ÿOú÷‹ÿ@ LŽÈrŒTúƒŠŸ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐÙÎ]‹Rs@ @ÛýÙ¿ë™þb“‰ñi’ÛUžãNŠúMBkE„@tö¹³»]ψݕ~C–<–P7CŠ!ñYwWü5Oþm®î9ZÊý/ý[ååë¹”t½nÇNK­ êI¨Ou~ FW1*Ÿ=£>[|‹–CÉ#œ…îÂ+§*¿}ã·gk«/Ì{É·üßתîux ¹¹Ð†¸ö<>LWæ:I]$È—æ( ÄÇøAV#¡­d®ùvMµuÑ4µù5¥õµüˆ‹¶¯t“~©ìº]«í¦ÇCá¨58×Q‹P’êEµAi ˜±óB—"@OÞ%]nåO¥g[ߣ'm]ÿ$¿wèÑP\µomoë¯á±‹oy,¾Ьž¹6bõ%‚Îæ ‚ˆ˜aHPì<À¹òòqìMmQ©Uæé¯ßÒý{ù^×&7ŒZëú__ëµí©“©ÏªÛè—k2ëЬv,tÇ®T†ó$Úg1òg“þ´ã¯}Õ¿4Sø¯ öé{tÞ÷ù[A»ko‡Þõÿ;vòÜï|GŸ#NÏ_·Aÿ¡R£²¹¦ÿñ÷kþûÿ触3›ñÿüƒçÿ¯7ÿÒ‹j¸ —¼%ÿ þí¿þ’ÁJ[ÖŸñãiÿ^ñè¤ ÏkhV1^,hð‰JÍ»9 ±öãË„‰¥ýÕ»Ñzù”’Ýì­K¤þå©Ë\jÚÆ««hТÙÛ]Úݤw™qÀ“åÜ \*2>÷Zq³“”v³ÿÛü]¾Wò!»FÒZÝ?¾öü5 ëê·:‡Ù³ŠöyØNâF^ä3y{ûˆxƒ–åŽ({é[Këÿ’ÅÙ|ßÜ›µ÷r÷[¿Oó²þ»éÔ}…æµ¥ê:œÏ>Ÿ4W‚ …î­#IYò ÀàîÏ<ŠtìÔGÍø9;ýënÝE;§'Õ%ý}Ýÿ‰µÝbÂëVm=´õ¶Ò¬c»t¸‰Ùæ$É” â>“Ò¦/«Û™/¿—üËå»Q]S~Ÿð;ö2µoꋦÏvRÓì— wo² xs¹äW|³‘¹~cÞ¢µŠ}lü¾$­ç¿¥Õ¬JwW]?UëËRõ¶½®NmÞGÓÒÞöæêÒ%HdߌKµËoëå@zÖSoٷד›Óoóò·žíÃâ]“Kúþ™KE×õûm?DûeÍœ–rÛZ´—fÚI ´„ŽVRѶ?å£)F'½L’ö®>võëòÝi¿g®™ê¡uçò·ôöÛ¶†—‹µMGI×㺵¸‹ì¶Ú]ÕÌ–®Œ|ÝpÀÈÃm8¸9ãÚæÿ·~Wm_Ó¿#[_•y¿Ëú±£áÍOP¸Ô/týRK;‰mâ†užÎ6Ž2²ùpÌÜ„ç<† Õ­º6¿ÿ]¿4ö}Õÿêß3’Ñ¥ñ Ú½¼©©XK:Ũ…’ki"­Ê ¤y¹<€#h㊓…'/îÁúèÿ¦õô4’N§/÷ŸËEý[OSGFñoˆ5›ø †fŸg ygo™;6ó2²€å¶võçùR“¾×kîþ¼·ûóm¨®ö¿ãÿï4õÍ{QÓõ Y¡KW²Ò´õ»xÙÍ™ˆ—å ¸ 9 ÷ã¸ÇšÑm÷²ùÛWéŸumuQ¼£ÿçýÁ3­ußÉ-µÅ¥›^ΩàR¥|©â8î8ؼ—ÝÓŽtå|ܯF¯ø5þoóò2R÷y–Ú~?×b°ñ¦²Ö·ÒªéÈtˆž[•1¹û`Y¤÷?8؈òwòÀvÉPjJ2èÜUºûÖ×ñÑ[^å´Óp뮽4W×õìKuâmTjioz¶ðE5â-¼+ž1q{ÄÉ!FáŽP…`x*GUOW×ò÷[ù­µÛÑí3v‹’Ûú¿£þ®E¤ë> HRÑu5æšKé–{«yU†b¥1æóË ª¸Ãu¨æµ>göb›óºü6wzêÖ†œ·¨×y[Ó¯ü2õ/i>$×5}'QÕm-í;h‘á´h¥‘Œ1ÊAmÀtvQÇRlgjjòÚîþŠM7ënž]oeœ/6¢··Êíiò¿^ƦâºÐõ nI#M¤kiV6bbA‚äóeƒŒdcëS4áüÏõvÞ¬÷ëÐp´¥¦Ú~WvÞ©úÍLj<Ô{t+&°ÜçæbyîIïJÊÉvÿ†ü´Ýî>ÛIÓmm…µ®ŸiÖApª¨eÆÖÀÈÚ0{`zU]éä+$UŸÃzMζu{Ë(.®ÂF‘´ñ#ù; P‘•9n¹ì)Gܽºÿ’_ KÞVdí¢iMw=Ûi–Msrž\Ótß*qò³c$p8>‚…¢²õùƒ×rÂYZGåìµ…<§i#Ä`lfÎæ„îlžù>´mù|»J h0]Gs‰¦ÇqŽTµŒ:ç ã 䓸ÑwáлúüË—Vw’Ã%ݤÉnÛ¡ic c>ªOCô¥eú}ûÈf›¥éúT-—cmc6öKxV5-Ó$(ð)ÝÚ¶· 'N·»šîßOµŠæ|ù³$*¯&qÌNp:ú V\®=úß©è3ÜÛܾ‘`ÓÚª¬›d-_ºã*lt¦›’݉««t.‹xD¯(Š1$ŠßhÜÊ3€Op23JÊÖè>·0çðO†åòTh¶C¾sC¬k­µ”o]¿67’= ?ë­¿ÈLÑ—DÒeû'›¥Ù?Øqö]Öè~ÏŒcg.0:c ª»ææêVåè$Z‘ Ì·0éV1Ï;‰%•mÐ<Œpf8É;¹ÉïÍ%î«/ëú¸=uc.|;¢] EÖ§Î&“Γ̵FÞøÆã‘Ë`žzóI{¶·O×qܸ֑§H[5ÆKÉ…mØÛ»§$99è)J<Ñqþµû­4¶e§[YéqiÑFÖ(„!æÜ c=r:úÕÍó·u¹1¼vex<=¢[ÚMio£éñ[NË ["¤€€Ê$õõ¤õV{ hî‰o´}3PµŽ×PÓ­.­¢ Ç Ð+¢``aHÀ㊯™î ÝV[Åag †ÒÔÆ°•XÀ5ÎÔÿtdàtäÑ/zéõîÚÝ vþЭnÒêÛEÓ¡¹v¤ÑÚ¢º»p Ž>œQÝwBÚÞííaŽbP©jP€À6Þá±%P@P@P@P@P@P@P@P@P@P@P@?ü}Úÿ¾ÿú)è›ñÿüƒçÿ¯7ÿÒ‹j¸ —¼%ÿ þí¿þ’ÁJ[ÖŸñãiÿ^ñè¤ ¿"Ékgçd—°£`H-‚29èi0áÝ$Êш&Ê€OúL½óþ×µ$€Cáýg1J6°Cþ‘/Sö½ÅÿøFt¯ùá/þËÿÅS° “úL{sÇs\ËÿÅR°~Ò_vØ&72óÿP¾ÒbPZ °X/2÷8þõßðŒé_óÂ_ü —ÿЧ`‡ô‰A+ãŽn%ìHþ÷µ%f®ÿ„gJÿžÿàL¿üU;Â3¥Ï ð&_þ*‹Óáí9O&mÃâS×§ñR²ßðŒé_óÂ_ü —ÿЧ`xoI$ÜÇÄ£ÿf¢À/ü#:Wüð—ÿeÿ⨰ü#:Wüð—ÿeÿ⨰ÞÒQK42€OúL¿üU'd®5¨'†ô¦Eo³Ì23ƒs.Gþ=NÖ¿ðŒé_óÂ_ü —ÿŠ¢À5¼;¤£¢yeóŒ\ËÆ?àT­­€wü#:Wüð—ÿeÿâ©ØÅáÝ&DܰLHææ^ÇÞ¤–—ÃúBJ±˜'Ë Œ\J{ýïz4½€ü#:Wüð—ÿeÿâ©Øþ+þxKÿ2ÿñTXŸAÑÒâ8M¼åŸ8"âL¯ÍíKKØ} áÒ¿ç„¿ø/ÿNÂøFt¯ùá/þËÿÅQ`á­(|‰xÿ§™øªNÉ\cbðî“$jëÀ0fæ_þ*„;þ+þxKÿ2ÿñTXÿÂ;¤ù¾_‘6vîÏÚeÀÿÇ©X i@äKÇý<ËÿÅPì•Æ6/é2F®°LFneÿâ©ØBéq‹ÈŸpÿÇĸç?í{RVÿðŒé_óÂ_ü —ÿЧ`øFt¯ùá/þËÿÅQ`/‡ôx€/üœ³ÌÇò IÙ A häǶ˜IÊ‘q/O_½NÚØDŸðŒé_óÂ_ü —ÿŠ¢ÀðŒé_óÂ_ü —ÿŠ¢ÀðŒé_óÂ_ü —ÿŠ¢ÀðŒé_óÂ_ü —ÿŠ¢ÀðŒé_óÂ_ü —ÿŠ¢ÀðŒé_óÂ_ü —ÿŠ¢ÀðŒé_óÂ_ü —ÿŠ¢ÀðŒé_óÂ_ü —ÿŠ¢ÀðŒé_óÂ_ü —ÿŠ¢ÀðŒé_óÂ_ü —ÿŠ¢ÀðŒé_óÂ_ü —ÿŠ¢ÀðŒé_óÂ_ü —ÿŠ¢ÀðŒé_óÂ_ü —ÿŠ¢ÀðŒé_óÂ_ü —ÿŠ¢ÀðŒé_óÂ_ü —ÿŠ¢ÀðŒé_óÂ_ü —ÿŠ¢ÀðŒé_óÂ_ü —ÿŠ¢ÀðŒé_óÂ_ü —ÿŠ¢ÀðŒé_óÂ_ü —ÿŠ¢Àly[[[Cl"G^çóúЀJ`P@P@Dÿñ÷kþûÿè§ oÇÿòŸþ¼ßÿJ-ªà&^ð—üx7û¶ÿúK)n4kZǧý{Åÿ  3|KþªÃþ¿àÿЩ0-]Z™^wòÃ7–dãƒÏONÕ6ëæ29m2Ó£+“"¸8_˜q‘õëE­ÐÚC¹‘ã·òÊ»–~á’6ðséùRKO—Þ ˜”<µ‚"å3½‡?6íwÙº›Y7DÂ-Í€K6 ƒœŸp~”œm ^úˆðLé µ»a¹~lÎ9ö=i½]íýjh=m™H-k¾ÌD/ÉÓÇcùЕ·AèDmÚ9cómË«? òó÷Ï®;ŠIYëýlƒ–ÒExȇxÝ´¬cq8äí‘G+>ÎÞK}ÏåHeAÉ@®~£ŸÄÕ%e =Ç\Û3]KlÃñòàóïÒ—+¾ŸÖ} °Ä“H‰JY²²ÇpÉ$cÖ”RoE§ü8= ®-slƒpÜv/˰p£‘‘ŽG4ìÿ¯P,\¤’*†ƒz#ò›‡Î1ïîzJo}h¬A£¬r³(Fâ2OÜûÜg¶56´uR8LOæ-¼B4—dxR¤¤ýÒ{S_¨¶%[F2ˈ¶ç$;c;³‘‚#ŽãŠI4€x´2Hx•·+qù t×pLŒÂòÆQÕØÅ! FsÁ=x=ºÓz¶Ái ‚ ÒP[æ¦Ð… Éê3Ç^Ù¢Ï`i.O—“ .L¹09Ààç¸ü©r»|€Ù²†+_ /Þ(Ï̧±ö4Inÿ® ˆâ¶2[ÆÉnè¾X ´¨2r}C×Ö›Z윇o™åXB ‡$ÿqÛ¡¡-@–X¼éL¦2‰6•ã w8êMënÿ×àA¤‘‰Ä¥Âb0Ü…å¸üˆr´ƒ©Mæ€ð‘àJ¸AÙáxô¡G¿õ°KfB–ÞjŒ„)òþcê}1ÓÒ•¬ZÅÖGµ¼ $ÚFXäqï߯Ú×M€F³a„‚FÁl,ž^ÐN;1õõ¢À>hŒûßË2bM¡FƒÔÉ4­}®Á¶‚,¬^W‘ÕѲ¬6€Èäçµ ;[ÔÇi Œl·1b0².GïNFz@zúÓ·–€6êÝ‚HéoäÆîü£7¡÷šþ¾á{RrÉjÈ™ºHÏ$gr;æ‹y V’ Ñ¥ò6í1ì€üÀuéëM+0{åWD+‰§ …•Jý:SkK[ʑЩšT*0ä0)[¯§õýv%¶-Ÿ.ÓfWýÑå6zð~9⋲Y·æ2p»rÃ'x=G—.ˆ;–í#ò­Õ0㟗 ‰¨ € ( € ( € ( € –ãîÃÿ\Çó4S € ( € ('ÿ»_÷ßÿE=s~?ÿ|ÿõæÿúQmW2÷„¿ãÁ¿Ý·ÿÒX)Kq£ZÓþÍ'(ø}jœçÞïÿdÿâi€yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øš<ãÿ>÷ø 'ÿ@œçÞïÿdÿâhóüûÝÿà,ŸüMqÿŸ{¿ü“ÿ‰ Î?óïwÿ€²ñ4yÇþ}îÿðOþ&€8ÿϽßþÉÿÄÐçù÷»ÿÀY?øšE/%Õ¾Ø.#;1x@[ޤc©€ç<ÿ ùÿëÍÿô¢Ú´€™{Â_ñàßîÛÿé,¥¸Ñ·R@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@·ÿä?ýy¿þ”[UÀL½á/øðo÷mÿô– RÜhÛ© € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( [ÇÿòŸþ¼ßÿJ-ªà&^ð—üx7û¶ÿúK)n4mÔ€P@P@P@P@P@P@P@<ÑÛÊÈJœ¯OÆ¥€ßµOÿ=Z_ëéÖ­s¨_Ein˜Ý,òEÉÀÉ<i;!¤ú §ë0êVÂçMÔ!¼·$,¬ˆHê28§Ëa&º>Õ?üõj,€ |M§Oû0ë6cPÎ>Ëö„ósŒýÌç§=:RŠRØ»¹íSÿÏV§dö©ÿç«Qdö©ÿç«QdO‹î§ÿ„fü œf"8'Rk@5íX§šTà„ਡ€†î` 2RM $®ÆBº²:[²^ÆËsþ ‰ñ»åõàÇaO–ÎÝE}.>MDÄñ¤·!V+³\àœS€OÐVH Z?‰­uŸ7û:òI|¬Ý¦AÎw¹Ndj:s]êIrÿ]‹WÚ¯ö}”×ww !’GÁ;T “Í+-}>ñ¢¾§â[ #ËþÕÖ-,<ܘþÓp‘oÇ\n#=EW°–×è-çˆm¬­¥ž{õ #°C½°ç …\“¸ð09< ÐãggÞß>ÀµW]¯ò"±ñE½õá´¶šį̀ÃZJ‚<Œ€å”lv± ‚)¨Þöþ¿«ü¾Lµ¼ÿàÿ‘oQ¼¸]>å–gV1Á¢È|)Æ“¦‘Çú"èº_deßµOÿ=ZƒíSÿÏV¢Ènud´hVêö8 ò¢HÈ碮zŸaI$ݖᲸ±ê‚K‰mã¼Gž¦H•Ád¦GQœf‹ Ø—íSÿÏV§dö©ÿç«Qdö©ÿç«Qdö©ÿç«Qdö©ÿç«QdOƒ]¤ÓmžF,íq)fc’OšÜšÀl=ÌÁØ ÒKAûTÿóÕ©ÙŽçRû%¼—Wk)g’G ¨RIà NËq¤ÞÄZn¹©oö3Q‚öÅ|ËyVEÈê2 æŸ-„š,ýªùêÔY}ªùêÔYz·™{5š\1¸…GL‹9éÎÖü©$šºôýPzýªùêÔì€>Õ?üõj,€ÆÐ¤yn5g‘ÙÛíÌ2Ç'„@?J^?ÿ|ÿõæÿúQmZ@L½á/øðo÷mÿô– RÜhÛ© € ( € ( € ( € ( € ( € ( € (XÿãÖoªÿZOtTÀÂñ¦ñ£Å"C<ÂÛiY`‰¥}«2!Tp< IÚq~¿úKCjñ’]Œ ¬îuoGye§a¥^ÍNcYmb‘M¹Ø|®£&%Ë`’£`—Mrï¶­/üóÕÛïÑ´)»­7Ñ^Ÿ¯thÚ-ùñ¤ÚwÚfkSöýÞy'÷‹±ans´0•ðxû¾œömôºõ»½þKOF˜MZÉu³û´üt~o›ÐÍÔ,uUÔu9å…¤ÑÆ­ İÃjÍrÁ#ˆ‰#lá”:®T.pž)S÷Tºs|®ÞþZþ].9«ó(ö_>öóþ·±SY¾ÖäÒ~Ãg¶·ñÏzï"A0 ÌaĘÃu‚àŒQÛ’IúóFþ½uÚ×èÁ´›ózz[ðôÜêt +;\Ô-üÛélÌI]M$ÃÌ&@ûYÉÇ2£è3T¾¼Ý½,¾o[îF¾ëò×Öæý"Œÿȵ}ÿ\ÿ¨¤örßîÍÿ\Ïó0+Ì¥átYHbåNIuL¨»I3Íõ¨\x[JÓ´ë-R KI´“Îak,~[­³Æ69\ïa…³×¥m'ÏWlíøÊ/gäúw%.UÊûÿŸõÜиÓuo­¼º¼ºdª­#=ÄÎ2ÐÜùÉÊò#àÛ€ ŒÕá5n’·þIo^»ß¯˜ã£ƒë¥þöaækzf“gkfÚµµ‘¶²7@‹«ƒÙ(pˆ’,ƒ åec#dc"¶›½Fº]Ûî¾[ïurb¬®·ÿí¿;~dºÅµüº,ö×ÓkÚš¶žË`mínà)y7 S%¸_,8ÀÉ&”~5Þñô¶—}¯»}VƒZ//{Öÿ»tÜëu«•Ó¼O§]ÜÛ^Ëoöâf·³–ã ^"«c!O_J/4ÖöÿÛ¾]D“䇗ù¸Ðu ¬ÞÆêÖþAug5½´RH‚7r±Q圑²gåžÀÕEkgªÓÿ)¯×Kú÷ŸÅ˳Oóýwù?„t8ôÍ[\Eòù—xŒÜ]M"ºyQ|Øv!ŽAºñŒàbˆ»SK×ÿJ§ß¸¤½ûù#wRÿu×ýqähxSþAoýz'þ‹©û#,Õ(™ñ¾“&²ÚM²,€}¢F3"“ä7‘&Ç>˜}¸Ï|T«©óGt½o¿/ºåiËgµÕý5¹Ê_éþŸupæIÄ—f“R»´‚yçî"dª±ˆapP¹ÈÎZ²÷V×}¢ï§wÍå}=']úÛõüíúõ/éöZáµÔ&‚ÿT»¸¶ÓGØTžÕRfÇ)%˜ ƒ÷…³…'¨4KH»÷^¶´nÕº½}ÖÔqW’]5ûï¥ßoÐ̸–òK‹›}ë^Kû)»û\wÒ΀‰²BIpXGŸ,ŽÀ"žï]®í÷FÞ}÷î½I[.ö_ŸÝ÷yØïü&“G [-ÅÜ׎7~ö{y`r7’’ã,I8ÎNj¥ÓÑ =Mj’‚€3<ÿ «_úï'þjK`5dÿXßSBØÓÆÈWLºû,—–ÖW«=Ä'˜åB° «mb­ÏËÆH’|³R~&úþkçqµxJ+þ[µýzu0¼W.§CK´Õl¢‘ܽÚÙ^£¼Šª|¸š7ç8ä(ØG=j&¤®×m<ßä¶ëù\¤×_/’׿þ]û•ô«]zkÔîäÕ×R[Ë5XšIR1HD¹‹î‘“&I˜­§îËÜêçÿ·rþ–ë¶¶±’øZ}ûô¿ü ‘¨>n!—_†üÌ¿Úï,7²*ðÙò•2¾fßõ|¸ê¹]rü6ë½í¥ú÷¿KÛȽu¾ÿ…¯÷móµú›¾¶»‡Pº’ê{«µkH.n-e·/‰'ùvÊKåAQóOžjÖ‘kÏÿmŽ¿×R>Òùþg]RPPG‡¿Öêßõþÿú R@føÿþAóÿ×›ÿéEµi2÷„¿ãÁ¿Ý·ÿÒX)Kq£n¤€ ( € ( € ( € ( € ( € ( € ( ouì-ˆx.fia`…¤#É8éÔœÒ`goÇÿ@ÝSÿÞ‹€oÇÿ@ÝSÿÞ‹€oÇÿ@ÝSÿÞ‹€ÄÖ-£–IcÒu’\qdÀ¾N9â‹Û@ý¿ýuOüz.ý¿ýuOüz.ý¿ýuOüz.ý¿ýuOüz. S7ú5Õ¬v¤$•0»­ þT›ÐŠâõ,-ä’H§—rìT†##Hì:t<šl ÏíøÿèªàÑpíøÿèªàÑpíøÿèªàÑpíøÿèªàÑpíøÿèªàÑpíøÿèªàÑpíøÿèªàÑpíøÿèªàÑp"»Ö–kI¢M;S "2ŒÚ>2F(¸ôY¿³´;9."›0Ú hÒ2Ï€chç9ÿëÒû#*ÿoÇÿ@ÝSÿÞÄÛñÿÐ7TÿÀ7¢àÛñÿÐ7TÿÀ7¢àÛñÿÐ7TÿÀ7¢à6]n chåÒõ'ÁVV²b ŠNÍY6Ñ_L»Òô˜ /Ã÷V0³ohí´ã–é’x•W7A[[–¿·ãÿ n©ÿ€oJàÛñÿÐ7TÿÀ7¢àÛñÿÐ7TÿÀ7¢à?Â{­4hæ9bòä‘ÙLm¸1ÝÆzvÆh[Öñe‰n©ÉÿŸ7¤ ý¿ýuOüzwþßþº§þ½þßþº§þ½þßþº§þ½þßþº§þ½þßþº§þ½þßþº§þ½þßþº§þ½ðÖòº„¯ Љ¯DYc(Ä^p¾?ÿ|ÿõæÿúQmZ@L½á/øðo÷mÿô– RÜhÛ© € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( [ÇÿòŸþ¼ßÿJ-ªà&svž1[[xã†Þî±Æå\ǵÙSv&#!G­›þ©=5üƒÿŒRä ‡ü'Rzjøÿ£.ðIé¨àDübŽ@¸Âu'¦¡ÿñŠ9áÿ Ôžš‡þAÿÆ(ä ‡ü'Rzjøÿ£.ðIé¨àDübŽ@¸Âu'¦¡ÿñŠ9áÿ Ôžš‡þAÿÆ(ä ‡ü'Rzjøÿ£.ðIé¨àDübŽ@¸Âu'¦¡ÿñŠ9áÿ Ôžš‡þAÿÆ(ä ‡ü'Rzjøÿ£.ðIé¨àDübŽ@¸Âu'¦¡ÿñŠ9áÿ Ôžš‡þAÿÆ(ä ‡ü'Rzjøÿ£.ðIé¨àDübŽ@¸Âu'¦¡ÿñŠ9áÿ Ôžš‡þAÿÆ(ä ‡ü'Rzjøÿ£.ðIé¨àDübŽ@¸Âu'¦¡ÿñŠ9áÿ Ôžš‡þAÿÆ(ä ‡ü'Rzjøÿ£.ðIé¨àDübŽ@¸Âu'¦¡ÿñŠ9áÿ Ôžš‡þAÿÆ(ä ‡ü'Rzjøÿ£.ðIé¨àDübŽ@¸Âu'¦¡ÿñŠ9áÿ Ôžš‡þAÿÆ(ä ‡ü'Rzjøÿ£.ðIé¨àDübŽ@¸Âu'¦¡ÿñŠ9áÿ Ôžš‡þAÿÆ(ä ‡ü'Rzjøÿ£.ðIé¨àDübŽ@¸Âu'¦¡ÿñŠ9áÿ Ôžš‡þAÿÆ(ä ‡ü'Rzjøÿ£.ðIé¨àDübŽ@¸Âu'¦¡ÿñŠ9áÿ Ôžš‡þAÿÆ(ä ‡ü'Rzjøÿ£.ðIé¨àDübŽ@¸Âu'¦¡ÿñŠ9áÿ Ôžš‡þAÿÆ(ä ‡ü'Rzjøÿ£.ðIé¨àDübŽ@¸Âu'¦¡ÿñŠ9áÿ Ôžš‡þAÿÆ(ä ‡ü'Rzjøÿ£.ðIé¨àDübŽ@¸Âu'¦¡ÿñŠ9áÿ Ôžš‡þAÿÆ(ä ‡ü'Rzjøÿ£.ðIé¨àDübŽ@¸Âu'¦¡ÿñŠ9áÿ Ôžš‡þAÿÆ(ä ‡ü'Rzjøÿ£.ðIé¨àDübŽ@¸Âu'¦¡ÿñŠ9áÿ Ôžš‡þAÿÆ(ä ‡ü'Rzjøÿ£.ðIé¨àDübŽ@¸Âu'¦¡ÿñŠ9áÿ Ôžš‡þAÿÆ(ä ‡ü'Rzjøÿ£.SÕ¼Tº…ÄoròËdšâ6èçc\ç`êi¨ØÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/merge-dialog.png000066400000000000000000000323121203611042400315100ustar00rootroot00000000000000‰PNG  IHDR?Ý}ªt pHYsÄÄ•+tIMEÕ " }>ÿtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝg}çñoÏ]Y’×+ù—bkÙ]á‚~æ—lH€€Á&®$X8 ’9»|Þ¨ŠÜArÒú®Ê®‚;c޳/X ã캺*"L€„»hèøa¯èLcÐ*kóöÐj´;³;Ó÷Gï¶Zýt?ÓÝÓ¿ž™÷«Tª™žî§Ÿç™Ýç3OwoeÛ¶xÜ|ó^ d>úÑ;¼O-7½œÜÚ2>zî¹CçŸAU@qüø3Ï>;ÿ“£ÇÄ“a+éuóÍ{ëʾzëK^ð‚çˆHµZ-°¢¸Z­–ˆ|ï{ÿò럎ü?'À,Û¶èÚö;Wýúe—œ>µÐl9ݼ/IDAT.Zh>½Pt…ýníÚsÖS¨¯]wÎÿéô?<âXMDÆÇGœèúùÏžyæøb³ÙœŸ?Ut…Z700pÁùk~ý²KD®švND¬]»öl{ík¯¾æÊgžyö©§NœúÕ©……¥¢« èA?9»åSÄÝê'×íxáe[Ö­_wÑE.¸àÜ/éÈô¡C5ÙtÉÆgž™Ÿý—§Nœ`ÊÈÄñSÏlùÔ´ë÷í±‹—GΗóDÚ+× Z"þKNJmö¸5ó‹ÿuÿ3ïÜuþº ‹M{Ó%E¤æzêÔ©……¥5kŠh ÷]xßýo~ 0‰ZIDATë+NŸ\”:Öj4£lRýÁÏDäÍo}ÅgþÇý»§–NZ™eÕDd`pàä‰E®3dªuzÑnÚõ5kêOÎ- ­±ë˱-«Þ²}N7ëó‹íe{iqÑZnÈêÅð'ç–†6¬wîÕXnTê–wÕÚùvÝn´~Õ”ï<öËãÍÖR³5pŽ}îùõ‹.>gíºzî­˜­ÑhÛËËvëtµÕºþŽÿ$"ÿóýfW­ååvÛ²Ürç‡DäÀ­7·Í¥¶Õj‹ˆR冈'½ªÕ³î¸qq{`Ó†a¨ûÅ©þÙüS »Ùl5šÍgæ—þ¥±ñ‚Ú¿qþ¦+sòIDATMësn6Àh­æ²T쥦µ´°ü…cOŠÈëG/}ð¦Ë«+,‹Üø‰œ—ž~ß¿•v«mÛÒn‰’S5±,‘JűĒ5‹öÆÁÁúúÁÆš5KsKkÖÕÍ¥f³¹Øh.6š Ç;ù«g^»}ËÐÐK,[lK,‘Ï~öS[·n?ohØ)}~~îðáƒo|ãuùô JÂî¼ z–Õyô6Û˲DlÛ¶DIJlkeXh-µe@dYZÕ•Àú±'_?zéþ?|»ótâ“íD—ˆ4—Õ–´ª"Km©T*bI»Õv2«&"˪T¬j­j‰ˆXÛíöòÓ¿\üU­µçõ?IDAT¸¸´pºÑh6æÂbsaqqa¡qz±ñ½>yѦµ[_½Å¶,'½lKäÁï¿lt|ÓK^ÞhµDäÇGôÀƒ÷ÿÑõò«%®Âï#Œ_ýO/°l±WgF""ËKK–]“š%­Ê“vû¥ú°¸ö¶ë':àFדv»ˆ´,»Õ°íåe©U«¶e‹mW,KVæ^Y³fÐMǺ´kkÄKjõÊúsë—]~ÁÒÒR£éük6›KæRµZ­ÕöêUŽ–ˆüã·¾þ²—½¢mUDä»ßù†ˆT,©×*¹u ÇèÕÏøì‚ÕÀ±­Õ+ËZ-±*¶]i‰È·I¨/HIDATݶù#‘Õs£ë‰Ûn;S\»-­–ˆÔêU©×ªVEdeîU©ÔjU{5~*Òþ›ãÒn/¶Ûí¶Ýn·ª­ÁsZõö`ky¹Ýn·¤Ý®µÚ'mÛ™®¹CÕ3Oÿ\D>ûwßø'ºvxÃÉ“'þþï?#"O=ý‹á‹/‘/yúƒ¸CDÞûç{¯¾z›³Õ¼égÉ£~÷–[v‹È§?ýÉìÞ«®zÕØøs¯¼òEW^ùâ°mQVŒ`ý‹÷¾Ï9!{õÁÛŠ‰ÈRÛ°—Z«—\ˆÈ±ÛnýÈ}"âF×±ÛnñhÙËKm[DjµŠ-"bU*qÒ«jIÕ37²E^þÂûã‘IDATóŸýïŸ7ž]\Zl4N/6š ‹‹§§O/4›•ë®þSË>«ÕjMDÞôûoùáð²Wn}üñÇÞøÆk?÷¹O‹H½Z;ô¥øàî¸ç?thݺ‰÷¼£fY[_ó»îN·\:zÅeÏʇ?ùñÝûà'H«}ã»þð¼õC/ùíuèË5Û¢t,f_}Œ7¿¿Y–Èê•b¯Äƒ-Ω0‘ö²m=Dxg]¯½ôþ7½Ùûj{yeåJ­*"–mUÝó^VÕ¨×l±,˶miµì¯oúµõ·×µív»Ýjµ[­V«Ýn-·Ü§ív»ÝnÔkÎF¹,íXIDATÎpõÔÓ?‘—½ôßøö×_¹õšo}óë¯xù«?÷¹OÿôgO^2úœÃ_>("Wüúó«ç ˆÈ¿ø¶o{U[ù#³-ãÏ­ž3h‰ìÛ÷¹hã…µµƒ"rÿÇþëÛ¯ÿcý¶(>~÷3›øêož#rNxY–óCa‰ÈòÒ’ÔëõVKlqN0½çïþÖ.Y=„øW¿ÿ"R±Ûbɲ-ËKK"20PwRω¯Õ#‡uË=:Ù°¶ÎøÖO~ù'çN/6O/,ž^lœ^h,,,.6‹¥ÅFó=7¿f >æ­³ó§dÏ»üù{þã¿{ó›Þö·ûÐMïx×ÊKë«_ýDÄçÈIDAT²ˆ¼þÍ×8K¾öÈW¤Ý®×ÏÜÝc`°&"oyËu?ü©§žþÅš¡µ"òÇ7ìh7—:n‹R±‰¯>f1ùêož·ß²V'^âùLÛnµ—­ªˆˆÝ¾å Ÿs£ëÇ»v=÷þûe5Àî{ýÛ"bK»ÕvV¨UÒ*•ÕôªV¤Z«Y+‡&¥}éúVÓ½pÝŸ™?~Â9`ØX9`Øh.6šÍÆò+®Úò»Û_P¯×ÄZ­•mÏ}\D†ÏÛðÖkß¾ë_ï¸öÚëן³^D~|ôñW]½uëÖ×>üÅ/|æKnËZK­ú™£ŸÎã÷Ü|ëÃêÆwý¡ˆü›Ûv¿êeW®ì¸-Ê…{H .IDATðêc|vés–m‹sÏË9€è±ÿk|åí×ß0¶y‹Ýj¯Y»Æmäàà€ˆ<ç9#"â̽Dä†þè†þ¸ã¶(Î|ô3¦^}Îw‘ü™+ò-v۾㪕È÷n¼ÉWÀ÷n¼é~BDî¸êšå¶ÝZNëNî´–šâ|¿×Ÿ¿wbhxØÙÍÊG¯üÚJV¦göã^Ð/¶ˆõãkòûIDATç^1Újµf{bìòÍÕjÕ](" §OžxöÔ³§‡6œ»ñÂóœéšw…ãÇýÉ̆õˆÈÜÉ7ÜxíÖW_óÑ¿Ú708¸-ʈñ«ŸñÙg†Û;üÛ¯ÞØ%í¥¥J¥bUk•NEÛ»µÜn·+õúg~ú;Ÿ9àäÑüÜÉ|pÿÊ‘ÃÁš³q:w÷°mÏÎà:“g«·ÙÛ¹òÐ’+~û¹–íÌëWüÖeÎf·á\_½+|ösŸùÚ×¾úïÿbïø–ñoçÛ"2réèÜ3ó›Ç-p[%Czõ5w6ã“sÁrn'(rªÑ©œ#íJâ}¿IDATõ̤J£Ýn/´+Òh‰ÈÀ@Í™.¹j£R•ú@ýì«Ý–sш3)³,o’º÷°:ë§uåò¼-W®]Ž“¯0£W?câÝçì³Î*­dÙêÙ/ùùSÍM ,‰%Ëíhå­l%"ƒu'‚*U÷¼W½^]ùs²ÕÓXn†‰m¹(½z$ÑZ½ªDIJϚ™­D\òákã†á›nºñ­o¹öøñ“s¿|ö¢‹7ž;´vãç%.ù³Àúo_sŽÃ¹7‹²œyŽ-–%§o}ïÚ{?øó§6Ä-s¹uâô­ï­×«ÎuÏÜçphxc¡AtIDAT­L窵ꅛ6^¸icѤæÚ×½èÓòÞµ÷~Ð]âü!óêõ‚¡ž¾õ½×¾îEîµCÃÅI¯Áú“O<‘eß»æ7äšÿž`ÃÅFÃÍ©ó/¸HÜo§üÁcO¥U9²ó*oz=þ£ÇŽ}ºÐúÐÁøø…¯zåoŠ“^µzíÛßþþûß·³èZ sç]ûÞõð¥‘ó^ó^ó^ó^ó^óä”^cã#cã#±ÖÏ®2F‹Ø3t €Þ¦K/'râ¯çÿ™£³3Gg£¬œƒÀ™;ÜTóëy ýÚ'rº,½û²7;îØIDATX«rV5 sk‰ÅøÒ,ïgdwÄt.q#ÐYè]"Aé®Ö±dßVê¾¼åøö¸¦fsµÕ÷«é.M3}ø °a+9J™¢¼M±*Ö±Þw_×9}Ø«Þú¨µÒì"•Ïjòš^î!ž_ò°\â+-Jm¼«uÜ—wCu$ \-p“°…îã(û \Mß„Xµõ ÜDÝ;=®ž <[‘z6>ðU}ÉÑ+¸Zâú{7Œ¾N7Ý¥)e—êÓzQŠí„þ| ú³Õ@¹ó®}Nfu{Þ ±ð©?ô9Гb¤WZ¿üý<ˆ”¤í%©F>úª±@ÿà.½ó^ó^ó^ó^ó^ó”4½zãÎ=enŘöKGË\óœÑ@9%I¯˜P—ÅIDAT1Ïw.gñ»vO„èû \Ó·Ðý¾ µ!%°¢´"qÉ3Ê·]—¤Õ>…×*ÁM³ä á½6zé/@KûmO%¿­0(;Eù¾íÉwoß½ÞEa_¥~¡‰ú’Z‡ÔÇú°¦ù¶­¾—|ݸfÇN– V«wK ìM÷.‰Ø.}…í.b­Ôº©?c¾ÖV³‹²ÝJ€hÒëàô´ºpû¶m΃Àßù°QX¿Ž†ºšïÞä¾Õ¼ëg4Ö„5M”aQ‚bLßK_Õt²º‰~åÀÖul—æ3G‚.ÒøRØj¾Ü$ì]è¸ Gீ,LLì86óDàKº¹×ÄÄß ¿óIDAT·”À¯¢HP³Ž[iFv5’Õ!Ö]\»<8­t_R\wÍ2|ð×´]Ó®î ïRÜŸ“Ž5Q/daÿþ4¯v8rzùÐÔOqïE/ÅJä¬Íô@h,q§Ë±º(»¦Å-¹ãúÅþRp|Å|”.Ÿ!{¦¸KËOkù”aîåÊ´£òœ„UÝKÿû½fºûîZÍùÿ™/áÕÔÁw"Giƒf×%èw}µˆ²ÂjÒ±“#®Øi‰ ‰XŸŽ…‡½éÑg®šM"Ö¤$Gnx…~·òÁéiÍé²L1Xôò¼×ú3¬%©$ÐWc¨Ôß­¬9€†ÞÐÍì<çšð£}I¹¼IDAT”SÓKJ0¨!Såy£wͧ&b)é}Ð ½æ!½æ!½æ)éU€nŒŽm.º 1ìžÜyûäÞX›ÄN/nQ eøç¹ósf\1{à¡C ¶J2÷zôÈá[²05µ'ì¥sVž5ÉSÂ#‡wß³/Ýz$þ„ijê?dT“’ã¼”ËÐpÔ;Dë¿C¤·‘^P:|OG)\1oYiWõ–±äŽ«¥[Ã2è²E¥êØî ,¡ÇÚÀ'“¹—eY¶m«‹•JMâ6­<ÍÏNê[B%¯…þ+¢ŒÓGGS}¢ØCmLÑKßZ—ν6¬UN¯ÞIDAT¾%¾Ç–‡wMïãÀ™w«ÀmÃ* ®VµÂaG{ÔšøÊTÿ×—©î]Sx¬ž kly:V­LXêw¤V»Ìm [ÙWɰfiqfcîœll|Äùç}5ìoMïÓ|¤3÷R#ÇûY5ð±ùPL”5}Åê7ѯlu:6è[â[?pCM}w§>³Gގņ5¶ËÍsëØX;ÒlRª6FY9ì­gò×·#!ñ´IóÕáÞÙ˜~fæ{5ú†é*þ>‡Q~-³þøé+¿ûϼÃh7›‡ñë ¦ó“AôZ%¸cãÖúÏ±ŠŠ+Ý_¼1÷‚ÝÄÃÌÑYç_ôoˆuÉ¢êSSz½÷IDATç^™r?ŠJ6§Ôò3:C–zº,¶:Ö»/Í|ÎÐ62ß‚#VØäÀ«¹ ©Uñs¯ˆ-³þM,ßwB"Å]¤øÚw`6îQ¦b;6Ý…kz™~¡pRÓݵï¨``eÔ3dšÇ]ÊdîåŽ#¶m{‹ç÷PŠ"ð|ûÙ6ð PØ:šƒxUÒoëkNX}ô{ ,°ã«nQa=E©:Ö[µc}Ë£P )gåì_Àé_EJ%º4s¸è3<ßjEM SH/ßgÍB ù-^~à’ÀÔÖ-b•ômô•š]ë Ô?U‡Ýˆ Ò¨(5 +³›Ž |5b‡¨%:LÁIDATŸJÛÆO.u<…¦_Á}åT\Ø,-Åx3à¼Wùeú™à Ê5½¢,Ín¤Î¢äLs%ÝÏã¥êØŒ*ÓmÀÜ Ê¥Ÿïé%Ò·ß×W’ôššÚcÊN€Y4_” ¯Øé51±#‹zÒuà¡CEW!C±Ó‹ïL€òÛ=¹³è*d‹ó^ЃnŸÜ[t²Uü¢ˆ‹ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜'å;Eœžvoß¶-ÝÂp¤–^Nn=zä°o9H]:éupzÚÉ­»ïÙç.tîp<1±#£Y0ãNIDATÛÒÌåkÆ ¥yäÐ]ÎÓ°/±ôO*946>â>ŽUZàÞ‰F(³ÒË™xù¢Ë14<2?7;:6’Ï·‚¹y+{×$º ÌÊõý^îüÉ›CaK’•é 6类ĻfàBéb†HQa饆š+¢L§|ëDÙKÄ YÇã‡aUêX@ê K/ßy/ßõ¥(Ô‰šZ‚jöF`ŠÒ˹&~÷äNõÔ×üÜìÐpŒ“^š8‰cêÁ=µÌ(Û’aPr©Ýkcjjï 𠣈{rËË™WiÊ œx¹/%Þ/ 7é9ܾmÛÐðf9;±††GD$ÖÄËwèHmÃIDATOÍ¡°d ,jæè¬Zf˜ÀÕ¢oÈSj罜”ñ- äK÷©šQ–Ä-S”ˆŠ¾¹º! )_µ‘Ïßuú÷˜˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜§\ß‚ŽFÇ6]…¨vOî¼}roѵЛH/ótsÉÜxèPÑUÐËH/‘ƒÓÓEW!ØÄÄŽÀÛ—œ˜³ò¯ ”éµâÑ#‡‹®‚ßÔÔž¢«%•rzy'1Î÷~Dý~²bq„ ‘Zz9¹¥Î`ŒË0@ù¥“^§§ÜòN_vOî”ð37ÈNØwo@ÏHóÈ¡ïÈÛÝ™IDAT÷ì ;öåý†ÉXãlà¸Ì`¸?õeöy¯(³ÒË™x¹ÑeY–ˆØ¶-"CÃ#ós³£c#êôËc’¿j2]–e9 qŸ:Ü…Q–d˜ЇR¾jû}ã~DîÂ޽ã²óØ]â]3p¡t=#qÛâ>õF”mÛQ–ÄÝiZ|]¡.ñvšÚÛq˾i@¾JtżšUQÖÔožl†çpÒÈûT]!VqòÛ}ì{àK}I:WÓ|’³c rrz¹#~Ç‘]pEÝ!Rp‹:\¦¶.b{3•8™ÂºJ.…ôr®‰ß=¹Ó9õåÇççf‡†NzIÐÁ=‰|ôÉ»„ýê8IDATmÎîÓ:ïQAu k©Ýc~jjï Ã(lë=êåxZKÝ6QM!rvÇ2ý`œtŽnß¶mhx³œXCÃ#"Òñ½Ü¡3ðüM ÀÕ¢ožŒ:»*É|+Ê¥É:Ç»‰ZBØ'ÈAj罜”ñ- ä@Õk ÂVö]‹¡ß\Ý0ç„–QÞ‹8¢/ÉÚ´À†G\-Ùb @ÎR¾j£—n«å"ÃÒ^ˆ˜L'» Q¢+æaB @QR»j€Ü0÷Z¡^3 (-ÒKDdbbGÑUÄ@z‰˜v±É‡](éeç[Ó Ï‘^†¹}roÑU€âqÍó=µ¾IDAT!À<¤À<¤À<¤À<¤À<¤À<¤À<¤À<¤À<¤À<º;Eíßÿ@nõ ºÐôâKC¥š^f}i ¯pÞ `Ò `Ò `Ò `Ò `Ò `žÒkl|$·­RTx4ÆÆG4Õ+sÍsFW=#Iz9c¥û/î¶3GgìT-G}X«’ XÕH¥nN—úzµ$­ö)¼V3Gg ¯€TèîÆ(ÓÊ¡t¹U*[õ+Sª€A’¤W ÷#­&?|K|›x?{ I«†ªn*à´Åm‘Z”¯×Ôl®Ö$¬Úî’Àé‚fÌDIDATW`ùK"¶KßEa»‹X+µn¾¦ö³Z[Í.¼ë0WhzœžVnß¶-peu°î¸ãÀMÂF|É&ƺ¬€wÐŒØüÀW£tEÄ•[×±]š ºH_xàKa«ùz8p“°w¡ã.?çJbbbGØm us/õF½±n~Ø1ò$ͧþÔ+8t_R\wÍ2|ð×´]Ó®î ï’Z²¾3;Ö„»Q¥¥ÿž“G3½Woƒ¸z)Lº»ˆmñV¯Ø K0?N·ðdâ–Üq}îF *Ã+æ£w©T/ðÒ²ÀÓZ>e˜{¹ò9³XxÉ\jô˜t®Úð¦…fhöèQ6Ñ&XÃ\IDAT„ï%µÍ¥ µŽDn~”št ¶X]¶NÜB"Ö§cáÞZÅju”jG¬IIŽÜè’µkמ{ïÛ{ë-w¼ÿ};½/œžÖœ.KŒ±£‡•çÍÕÔ¤<• CwÞµÏɬԮ˜ˆë•{OÜ)T5ágèy§—”`ŒCºÊó†F9îšOMd»ôÌCzÌCzÌCzÌCzÌCzÌCzÌCzÌCzÌCzÌÓí¢¢|5mwûô³îsøè‘ÚW§¦öt¿ ¼Ò¹KïÝ÷ì {i~.ýû¢:w Ïî~áY—èR†ç½,Ë {É÷ ¸ÉæIDAT-‚Ý|ïíØøˆ÷_âr¢ìH}¸k¾Æ²–Õ7¤h¢+uÅÎøÒ^È_jéeY–mÛîãd…ø¾]PóóêBo!Þã~š2Ýo©÷nر|@áÒœ{9æF—fùæ.Þ§úi÷HQ¾¢„Sà:#¤|ä0qt9Ô‹²•š=ÉÒ(ÙV¿ºÔÒ«›Y—Ã{dÏ cw¾’€¤yÍ¡Zɢ˘XùdC7{qÏ¢rò‘ÈÑåë/¯ð®“x–J!jQ¥i.¤+…ôššÚ“àO’£œ¬Š2ôwÜ*ì©æA—û"± kݦ×ÄÄŽTê@tݦê¥Ú•IDAT·ßäoH˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜§–nq§§ÝÇÛ·mK·p©¥—“[m‹qIDAT9ì[N†R—Nzœžvrëî{ö¹ wO‰ÇfžHe/>cã#3Gg³(Pri9ôF—ót~.8]|Á“J¸c•¸w¢Ê,…ôr&^¾èr ÌÏÍŽŽd4ýòqó&Vö®It@™¥|ÕF—Üù“7‡Â–$+ÓlÎcw‰wÍÀ…ÒÅ ¢ÂÒK !5WD™NùÖ‰²—ˆ²ŽÇêԱ€Ô–^¾ó^¾êKQ¨5µ7Õì!À)¤—sMüîÉꩯù¹Ù¡á'½4q%ÆÔƒ{j™Q¶%àäR»×ÆÔÔ߆aF÷ä–m™3fIDAT—3¯Ò”8ñr_J¼_@nÒ9r¸}Û¶¡áÍrvb ˆH¬‰—ïПšCaÉXÔÌÑYµÌ0«Eß§ÔÎ{9)5:6â[È—îS5!¢,‰[¦(}suC@þR¾j#Ÿ¿ëô9î10é0é0é0é0é0é0O¹¾!Žm.º QížÜyûäÞ¢k 7‘^æéæ’¹9ðС¢« —‘^""§§‹®B°‰‰·/91gå_(ÒkÅ£G]¿©©=EWJ*åôòNbœïý2ˆúýdÅ2â!"µôrrKÁœ£µTIDAT—a€òK'½NO;¹å¾ìžÜ)ágn°ïÞ€ž‘æ‘Cß‘·»ïÙvìËû “±ÆÙÀq™Á:qêËìó^Pf)¤—3ñr£Ë²,±m[D††GæçfGÇFÔé—;2Æ%;~Õdº,Ërâ>u¨ }K¼O³FÌèC)_µáŽïÉFpwá ÇÞqÙyì.ñ®¸Pºž‘¸mqŸº-r«ÍômU_W¨K¼¦övÜ2…oš¯]1¯fU”5õ›'›á9lÛöF‘Æ íÛ*N~»}|©/IçjšOrvŒ@RN/wìî8ñR\QAwˆTÜ¢—ùZxþûbIDAT,1‰“)¬{ äRH/çšøÝ“;S_Þq|~nvh8गÜ“ÈGŸ¼Ûæ<ìúªÇ9HíóSS{|WFùc[ïQ/¯ÀÓZ궉j ‘³;–éã¤säpû¶mCÛåìÄ‘Žìåço®}ódJ;»ŠréD²Îñn¢–öÉrÚy/'¥FÇF|KùPõZƒ°•}×bè7W7ŒÅ9§å=Hè;Ë¥.Q·ÊÚ´À†G\-Ùb @ÎR¾j£—n«x=a‚%=,ÓÉ.h”èŠy‡ÐP”Ô®Ú 7̽V¨×LJ‹ô™˜ØQt›™F>IDAT1^"¦]lrà¡CEW FzÆùÖ4ès¤—anŸÜ[t x\s0é0é0é0é0é0é0é0é0é0îNQû÷?[=ˆ.4½øÒ@i…¦—Y_è+œ÷˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜'ôNQ§§ó¬>;Ân[¨»Ç<7êEÿ='ºôîÕ (%Î{ÌCzÌCzÌCzÌCzÌCzÌCzÌCzÌCzÌ" ·DIDATCzÌCzÌCzÌCzÌCzÌCzÌCzÌ“~z¤^fZûÑl’gÍK«›NÈ¡y8ºM/'Ü©Ô)A"®6stvæèl‚m «n5¤c±Åv` ß¾V èIµ.·wÂÀ †4êƒ3ÊÐ¥e¨ƒFÉ« ;ݦW ÷ã§;¸¨KÜå3GgÝðÓoèÍH_^:«…Í«|¥®¥a…ûŠõmÖFÍN}mŒR}C¢÷³»¡¯Îj5t ï£OXõ|•÷U,¬zš:ö›úÔW_µÃJS;„ˆ²Izù~Õ;þò‡Ñó‡Tu§¥yÆ*Ž0IDATªyàà¸IXÃêÖýòÀr:ÖA­³º¯°Â}/©«ul¾]uŽÒvM‹4E©?'QêñÇ @º2I/•æd€:…òmXìXà4†º‰¾ QÎ-E 0 }?gG¿¯ˆSôÑ•5ï$/lê©Ù6˪ý+§ôJ6…Rˆå/Á~ãneàV;¡›Îɳ3SßW¬IyÖ¢L[d!ï¿÷Šø®?ÑRˆT&a‰×ë„.;§ÀI˜7„â’ï\WG&‘d$¹—w¬Ñüþ««ùž†Y3Êu vvJ,J!Ñ7Q›Ðq/Ùð6$zôEθZ¬W}åî.z5ohI>u•ó<ÔIDAT½ÊÚµkϽ÷í½õ–;Þÿ¾ÞNOOLì86óDQ5ëyå9üÕÛâös¬kgd'0†î¼kŸ“Y9÷‚+î\ÉÐÏ@o#½òÆ`šÄýv´»êHw阇ô˜‡ô˜‡ô˜§Û«6NO§R@ þx)P ×>zäp÷…TSS{Š®BI¥sÅüí“{S)p6»è ”ç½æ!½æ),½¾ùÈç‹ÚuÊÓº°šD¯¡wÍnÚUž>вºS”w¨zéUoèrµL}ó‘Ïç°ëŽ-õV#ìq*{R(¹LÒ+Ö8˜î0]NÝ4-•>q ÑW£õó@¬IDATW;@OJ?½Â†ÈŽó‰—^õw¹;Wðn¢®æå{5lC ™y7Qw·œˆÂÚè-ßmlÇÝV^Wa+kz@]S¿­[yoQ+ëØñÝ$z~SÆ{̆SÇá)p< ŒÌ(KÂÊ×låÛ—o[M®¨JÐpÜqwqgxTÆ-0p[Mtù ÕÃ]V€éòK¯OkÅ]?lîØM5‡õn ”ÅI2ý¾:î1,oÔ§ j• €ÆèØæ¢«ÕîÉqÿn¸Œs¯t%˜ŽøŽ=Šò1?ÿŠE/P­|²r²àM»ŽµÒçÌ·½ù9¾šîÀC‡l•þó¾s®(Ÿ£3ŒÞ…IDAT¢§NÎcbºˆ+¯É oŽH'‹ M™„aNÌY%ÿ—¬]™Ì½ô#”zøÈ·šz–È·$, õ5ÑœÐò^"¸r”=jÖQ{CÓFo5ƒ»º»X—lD)6ÖQ>Ͷúš‡]‘¡6PócÀ$ è7Ö®]{î½oï­·Üñþ÷íô¾ppz:ÊNO?zäp¬ã•œ`O]`—¦ÛÏ9ÌŒù©T†í¡á‘d÷˜Û2stÖù7EÜʨbq‘^ó^ï¡?ßaÀqÞ úE”K'ÏE/ÙwXÒ›yÉê†ô€~¡¦‘w‰z‡~µdKÊ~ÕFÄú•ç`fÕÊcl|Äù—ÖQÇüÎ{e1ô‡•e_Æå«S“ŒêX¬o¡[÷Ÿ~sp¹×:¦U`~G³8ËW†3‡¹)Oc»ü[è^·é¥ùlÍ_kû–{ŸzKvëÿ\³f”]è×鸚¦pïÅ9a­ÖË K½IDATå]â+JÓÉQþä0l_Fß÷ @ÿÈpî8tªƒZô—4å¨Ë£ÌâÖ0V•¼KWëXTXÍõÕŽšú@ù¥“^úѶp™VLsÊÇ»Ódg†ÔÜ{Õæ}éæLU”«iËù“ô›*º Yéý+æÕ£mY”ŸÖjê&YÔ¼Ë{Ž©?”ÐîÉEW!CݦW9ÿ[•Ãí¹"¶=nuSóLß}á¥ýIúÇí“{‹®B†òž{Åú+nÍ_kë·u×Ôlâ]'âj‰›¸ZÇÖ–±Úzj"63ìŠß /{€Ô¥^5¨ 5/©#.Q/7P÷ñÜL”Õ:¶´cä©PIDATUc- {ª©vØe#«¸$z%#–iá.½ó”7½zûÃ{>­ëí>ÐÏÊ›^„!½æ!½æ!½æéöŠùƒÓÓ©ÔhbbDZ™'Š®Eé¤ð÷^9Ü}!ÕÔÔž¢«PRéÜk£·ïGű‹®@IqÞ `Ò `žôÓë›|>£Ò"–ÜqµtkX]¶¨TÛ}!%ôXä1÷J@9H}ŠR`yšŸ~ß3ª^É[ ”Jÿ9|éUoÈ¿ÀÔwZB´±lÅ=)“ï÷r?Bº¿Îç©ûØûIÓ»f”ÇîVë„U@ÝQX¼KÔmÕÆzkî7PIDATâ+ÓÝQà:j™êÞ5…Çê™(®Ù<¬ LÖ±jeÂ:P¿#µÚ%lc`[0 ¢LÒKýEõþN>Žþ{eÍXƒ‚~å° lŽº~à†šú„§šQ8J±aíróÜ:6ÖŽ4›”­+Ý‘Ã(¿áYŸð•ÿÍG>ïüK\ f‚•ló0ê´Ob~2ˆ^«wlÜq_ÿù VQq¥þà P&s¯Lù?æP~ê{ɨ ]ÛëÝ—f>×mú\éæ^?¥f=(hNqIJŸß}‡˜º/P-6Á©”b;6Ý…Û3múYs/wyéUoð>–N/t¼²@B)Í:šƒxsÉÉËIDATUÒoëkNX}ô{ ,°ã«nQš‹ :*UÇz+£v¬oyj!ål#€¬]»öÜ{ßÞ[o¹ãýïÛé}áàôt”œž~ôÈád÷9ÔO ò9ãé¹ô ïr¥êØŒ*ÓmDÛ0l ôç=æcèλö9™eÞy¯òK0*Iá`Š"ÓK?þúÎßR‡ò”Vx—û*UÇfT™~h#ЇRH¯©©=ÜçnÓkbbG*õ ºnÓ«?Ï%ŠUº¿÷ #Ò `Ò `Ò `Ò `Ò `Ò `Ò `Ò `Ò `Ý¢öï ·zyÑKIDAT]hzqû]@i…¦·ß”ç½æ!½æ!½æ!½æ!½æ!½æ!½æ!½æ!½æ!½æ!½æ!½æ!½æ!½æ!½æÑ}·2`´Ñ±ÍEW![»'wÞ>¹×»¤›<6>RTer3stÖû´ßå@¤zÙüÜlç•Ìtà¡CËû°É¶mç\“ÜìžÜù¡L]އﲊôB;1g]…¼õa“{r4×ã}ø.û^z£y¿áª €yH/€yH/¡ÆÆG¢_Ôëò?oɱö‚2Ëó}ä¼pﯟïJåL·ÍÇØDé¦IDATøˆ·b¾§¾åÞWÃÖÔïË}ì+§Ë’SçTÕ[%)ë;˜¢òÿ¸ê‘^€_7k©åÄÔš'k‹ÚæöI1úçÓAz¡ÜY‚ú¿³B”!@]¿lŸyÕú¸uvg!¾%¢ÌTôÔÞóÎoÊ0×Qßeg¹¯½­ð­à}ZNš9·ó ¬ušuòo/éD’îgÕ²MÑÂêã«[`ÇŠ±À’ËÐ?©¨dµíe;"—f®¬¾ÝRt{I/ ÷73pæ2â£w7zøòŠÀ÷Tm¯þ5ºT¾Àö’^@šÔC.=¦WS9LâŸÆI6.°½\1„ ;6ñò­eÕŠ÷úx#†u¬–¯7IDATM%㾡eþÈâç3ÿö2÷üR9úç&\©’¬ËkF¼›»çE4­3ý8ªÚÞ°W£¬_*êOB”T_‹m/éœ%l²å}ª™“> [¶»L鯆÷ž«¬gô‹é5]T¶K64Ò¼wÞ§¦„–WÇ·2Ê€þi¦H/HÈÄÐê¤Cü$ˆ«6æ!½æáÈ!ãEÿ:yô Ò ½¬µ>lòîÉEW!o}ø.«H/ô¬>Ôú°É"ò¡¬è*äª?ßeé…žuûäÞ¢«·>lr^õׇïr ®Ú˜‡ô˜‡ô˜‡ô˜‡ô˜‡ô˜‡¤Çl‰IIDATô˜‡ô˜‡ô˜‡ô˜gåNQÛ¶o½ó®}ÅV½mÛ·:VÒëºë¶]wݶâê@ Ö®]{Š®ñü¤œ„E²T"IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/move-or-rename-resource.jpg000066400000000000000000000764271203611042400336450ustar00rootroot00000000000000ÿØÿàJFIF,,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀP¶"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ì|kãfð„º|I§Cr.£c–eM›U çcg;«•OH¥“C¶`½H˜qÿißQdÔü<ŒÁU£”# ‘sÔ1Yצae¤yÐ¥½¥²ª©“pÎöËdç¶zc¿$úXl59ÒR”nýIæÕÝ—OÆ·Úåt;f(2@œg®;ÅQŽù—¢ÿ¿ëÿÆëƒÖìm-’Y ˜3° ÛÓ#žŸÒ½é~Üü@·#Lx¯âÕ?³dÒ#@¶Ò°”"Ü…É(>ó`ÌÕ,=ýŸÅÿ™œå+û¬ˆ|nÿÌ¿ýþ_þ7J>6Hæ_‹þÿ/ÿ¤Ÿáî{â;{W{˜fÖõ Q-͹D†ÍmÝ‚/iÞ2½&³XƒÂü!_ð”ÿhMöO±y>GœžöŽìmÛ·V>|g~Þi*Xgö?ë¡õ;›ÃãT‡þ`ßåÿãtáñ¢Cÿ0¿ïòÿñºÁñ…<5á¨ïl#Ö&}fÓÉÄL„û”ãË 7¼~4–¾Ñæð÷†g’îú=K]™íã ˆð£-ÂG¸ò 㜒9P9j†Éòïëê.z—µÎ€|f“þ€1ßÕÿãtáñ’Cÿ0(¿ïêÿñº«oàŸ ^xºßB¶Õ®ÍÀ½žÞâbͱ#r{BФ2`¨Þ9Ḩô¯hz¿ü#þQÔmÿ·cºo¸I>Ìðîå¿v<ÀØ^Ò0y9â}–}ŸÏÏÏÈ|õ;—ÇÆ)üÀ¢ÿ¿«ÿÆéÃã‡þ`qßÕÿãu”<¦ÿfù~}ßÛÿáþÛ󷯕×ýW—·=8Ý¿¯8í[ç†4-Gâ&µf±>m§XµäâUÂÇUc>Xù²Nžp9£Ùaïn_Ì9êw|^ÿÌ/ûú¿ün”|\ÿÌ/ûø¿ün¹WÒtKéZ~—¨Kscy$ÊØ!¢f`®¡™v:†Ú:Ž8­Äð—‡~Ñâ7׫i£2Ã!œˆ÷JÓ:™C´*÷2IÏÊ8¦èa×ÙüĪT}MñjCÿ0X¿ïâÿñºQñfCÿ0X¿ïâÿñº¡¥xKÃÚ¼ú”z^¨úŒÑÍþ‡jÓ‹I&abAxÛ{g+Œ(KƒÁºwövÏ:ëí¿Ø?Û>våòúÿ«Ù·=8Ý»¯8íKÙaö·æõ{šC⼇þ`ÑßÅÿãtáñVCÿ0h¿ïµÿãuð–ºîµb./<«›b;×q²‡ÏËÔdã÷ÍQŸÃzð\$ºŒðh̼lÉI#LÉÃa†Ð vÉ9?/JJ–ì¿>¿ðãç©ÜÓä?ó‹þû_þ"œ>(Hæýö¿üEfÚøwë¡XjZ–£=šê-qää—0„;TXϘsŒœÇÁàW *㇡-£ù’êÔ]OC¤?ó‹þû_þ"”|LÿÌ&/ûéøŠóáR ¯ªQíø²}´ûøø•!ÿ˜T_÷Òÿñ£âLŸô ‹þú_þ"¸!O}RoҶŸs¼ä?ó ‹þú_þ"œ>"Èæýô¿üEp‚ž)}VoÌ=´ûÈø‡!ÿ˜d_šÿñáñCÿ0È¿5ÿâ+ˆñGÕivüÃÛO¹ÛÈææ¿üE(ñì‡þaÑ~kÿÄW)â—ÕivüÃÛO¹ÙÈæþ;ÿÄRÈæþ;ÿÄW)âªÒíù‡¶Ÿs¯7ÿÌ>/üwÿˆ§ÈåÂ/üwÿ‰®DT‚—ÕivüÃÛO¹ÕÈåÆ/ÉøšpñŒ‡þ\bü—ÿ‰®TSÅU¥Ûóm>çR<_!ÿ—(¿%ÿâiG‹d?òåä¿üMs"ž(ú­.ߘ{i÷:Qâ¹ü¹Åù/ÿJž4ù Õ$² ¨-žô®6¥ñL ‚O‡¾<šÚ itË···ÝäÄ×V=Ç-´nÀÉäã­}1E/®Ô]õócçÏῊRøŒñÎŽº£%Æ|å7¹åBß??(žÀ `ð?³¿³þËö/ùöûHòúîû»±×Ÿ­}E/®O²cìðeðçÄ1o¸]PAß.?¶|©´‚¸°0@Ǧ2ßÂ~:µ»’î [øneÏ™4w!]òrrÁ²ry¯|¢­Ï²±vx]¿‡~ ZùžBêqy®e“˻۽ÏV8nIõª#À^(ÿ D¿÷Ú}E?®MtBöîxð‰ÿè/ýö¿ãNñ7ýeÿ¾×ükßh£ëµ;/ëæÂ'‚x—þ2ÿßKþ4áàÐ*_ûéƽâŠ>¹S²þ¾bö<$x'ÄŸô —þú_ñ§xþRÿßKþ5îtQõÊ—õó°‰áÃÁ~"ÿ \¿÷Òÿ·S²aÉdžuŸúËú8xoXÿ |¿¥zµ}n§dÂ'•kóá/éOÕÿçÂ_Ò½FŠ_[ŸdW‰æ#Ãú·üøËù pÐ5_ùñ—ò¯L¢­OÈ>¯͆…ªÏ”¿•8hzŸüùKùW£ÑGÖ§äW‰çCDÔ¿çÊ_Êž4mKþ|åü«Ð¨£ëSò«Äóñ£ê?óç/ýóON¡ÿ>’ÿß5ÞÑKëSò«Äá•ÿ>’ÿß4ñ¥ßϤ¿÷ÍwQõ©ùÕâq#M½ÿŸYï“OuçüúËÿ|šìè£ë3ò«Äó©´¯Í<’ÿiF›Ø¶ÕÓx=_5RûÃ&Ôlf³¹ÔƒC*í`4ü}wרQXÝ*üÌÖÏ¿åþG‡üSâÓtä‘J°•²ÁéE]øÑÖÓþºŸýQRÝÛcJÊǨéŸëfÿ®qè5ç:T_µ5Oì­F ­'UÔ/Q.¯[{èíËÇ”Bx¥åAò†Æv€wú6™þ¶oúçþƒW¡‚d)QÄ…ÙÊ¢…™‹1ã¹bI=É&’Ølð¿|Cñ"x:ÒÖˆ'º´ðýî·qw©,—/qåÜÈ‹¥x_¼Kvãž‚÷âg‰óO²³Ñ 7^"´²¹Ð•$Ǽp·'`%²‹Â[­zÞðÝŵœÞÒ¤µµÝöx^Ê2‘n9mªF'“޵¡5…ÅåµäÖIuk»ìó<`¼[†kW#ƒŽ´Àóý+Æž.ÖüQ{ Á6c­É¦\6QY#@KæA, °DFÞ7gš±ãkWˆo´%,cû‡æÖä–î—ÍØûD@+¦Þ„î%ºŽ8笛ÃZ Ψ5IôM6]@:¸»{TiC.6äg#<`Tšž…£ë~Wö¶•cäçËû]ºK³8Î7ŒàtôÅø?Ç÷‹|SuoŽ›“mocu)iΫqjeؼmr¨ÜváAà“]øã^·ñOŒ-â±ÓeÒ|7oÔ¥¤tžEkW—bðT’ê£qÆÕ†'#¼†ÂÎÞòæòH#ººÛö‰’0]£ ¹‡-ÀÏJ!°³·¼¹¼†Òî®¶ý¢dŒ—hÂîaË`p3Ò€<žçâ/Žtÿ]ø–ïC±§O¶ºµ¹t†I%E(cYÝ™JI¸1(FÞWšÔ¸ø‡©i·úö‡~Ö’j–W¶6v3ÚÙ1[™.Sr¡‰¦þc(=0Ý„~ ð¬)2Eá­dÙ*­„@:î †ùy•Npj¹q¡h÷lûN•c7Û¶}¯Ì·FûFϹæd|Û{g8í@g¥|Hñ6³­éZ[é¶7“êzŽŸs4öÍ ÙE"5› H}¤yŽ228¨ì~-kIе‹Û ­um?P¸Їâ’Î2ÍûÂÌ\£`mw[oÍé–~ÐtçìtM6ÕàwxZ TC:…r¸P#¨’ßBÑí>Çöm*ưïû'—n‹ö}ÿfË»¾1žôËøÄ>.×¼‹kG‚2ïOŠê È‚EûÆÁ)°M#2•`C‡å ¯"²õ‰Öþ,·‚ÂÞ;½µØô9¤ko(Ç;/ÌO8³cŸõ!HèOq¦økAÑ®ãKÑ4ÛÙ 4–¶©È8%@8ȉ¼5 ÜêƒTŸDÓeÔ«‹·µF”2ãiÞFr00sÆsú‰uáñBßÂÚe¾šÖ‡LPž[’êê¿hÙ&ݹ vgÉÉl §—Ò~#xÓTðÔþ&OÚ Ù_\,‡j‹vˆ9ˆç˜›[÷qòr8¯TûŸööÙ ûw•ä}§Ëg—Û7uÛžqÓ5ž|'á¶¼šðøJ7Soóf6Qï“x!÷62w`s×'=hÎÇÄ?}Õ›F3Ÿ ¯‰Å”¡Bà’IÛ‰21ƒòœñïÅ­`éÚÆ³gacŽ‘i¥ÜÍi0y$¸ûXVeYC(h`(Ù#=ð=Cû Gÿ Uüz}‡þ=Óþ=ÿçOõìôö¨ßÃZ ——¢i­=’"ZÈÖ¨ZC”q• yc¨ËíÉn‘oÆq g=}My}—ÄßOàM^—LÒšmgP‡N³[}ìC™fWfGe#EUó$±`>Q¡­xÛÇ:‡­ïµ y;nç[»¨ ^]º¦èä0$ÿ.îC) å““¹Ezöýý‘ý•cý™ÿ>_gO'ïnû˜Û÷¹éך¦|áV·KvðÖŒ`GgHÍ„[U˜Ä ¸…PO}£Ò€<ÿTø§ªÛ[뚀Ón´ýßLšMÖò#_‹ ¬Y Ü ¬0d#¹íW?ácëóícÿ#¯ü#ßqÿãßûß{ýg¿OökÐ.´-ûQƒQ¼Ò¬n/ ÛäÜÍn${NåÚÄd`’F:Žo h7: Õ'Ñ4ÙuêâííQ¥ ¸Úw‘œŒ ñ@o¥üIñUïƒ4-fâÏF‰õÍN 6Õãó\DÍ,«$# *(U×,[¢MÅž1±ñ4>Ò,¬uMt§Ôd™-¶¤‡Í(ŠîËQ–Þäç…à×qý…£ÿcÿdeXÿfÏ—ÙÓÉûÛ¾æ6ýîzuæ«Íá? ÜYÛYÍáý*K[]ßg…ì£)ã–Ú¤ary8ë@\\iÖÓ^Zý’êH‘æ·óžS &áÃ`äduÅX¨à‚­íâŽ"@‘Ç…TP0€ã%QEQEQEQEQEQEQEQEQEQXú‡Šü;¥]µ®¡¯i–—*hn/#À=2ƒ@ùö4…e5FÃS°Õí~Ó¦^[ÞÛî+æÛL²&GQ•ÈÏøÔäÿ,ßüþì+’ï?ÝoÊ›½ÿ¸ÿçð¨H?óÊOóøSùã/ùü)Ø.XÞÙû’ŸÂ“Ìoùç'ëU?óï7çÿÖ¦?óíqùÿõ©ØW<¿ã!%,É4õë÷EÏ‹Ü[ØåYzÜ7QòŠ* =_Lÿ[7ýs‹ÿA­*ÍÓ?ÖÍÿ\âÿÐkJ’ØQEÀ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šç|Y{iýmetÖ­}¨}žI‘™PC,œnrcä Æ[+[M>Ñ-­àQdåòìÌI,ÌÇ%˜’I$’I$òj¯/<.ê,ßúIsUuMf.Ý‘æžVòíí¢æIœôU™$ð$5¤Ñz–oôÑs?Ú¬ï'Óo b&¸µT%Ð…eue8$à‘‘¹°FãšØúÁÿ™ËWÿÀ{?þ1XwzV–eŠoÚ WTºVxí¢±’ímã\ecDF!AuÜä ÄŒãåQY´Ÿù“®ýËW?üfž©Óè3_ǯêšMÝõÎ¥½µµÄsJ‘«ƒ#L¥vŠ1û¥#ŒäžOè3ÿ>Óþýjó&Ò|ÿB„ãþåËŸþ3YÚ¦á…cÓ¼!žVÙçKáëîÃ˱ÙGS€H ²î¬´Gþ}n??þÆ£0Ÿùóºüÿûãt+ß øoJK 3ZDÜ^F=Ê™$?yÈ“è8`+ªµh/ì༵·¸šÞâ5–)¸taGËÜLGüZ]¶–c§ï[å~£åŠO‹+²ÎÁv:bVù_¨ùG°¢±4=kLÿ[7ýs‹ÿA­*ÍÓ?ÖÍÿ\âÿÐkJ’ØQEÀ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šá¾'jqhÖ:§p¬a·Õ2ØÀµ´è¹'AfQ’@äŠç´oø^ÞvÕ5Oéj²®ß’éLvÈyòãÏn™n¬FNzÕ!õªR²±-\óí_Òu¿ˆ6GKÔ­o<&óÌò%³2Úã8éœÊ·®Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™}gE¿½Õ,µ-3P¶´¹¶‚kr.mZtt‘£cÂÈ„b^ç©âª6‘âÆë¯h¿ø&—ÿ’jŸÙ­?çÂÇÿ#ÿâhû5§üøXÿà$üM>på'mÅdÈ{GúcËÿÉ5xwÅM×_ÑÿðQ'ÿ$Ó>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâió‹”CáŸùiø(—ÿ’k{FÑSGдý-\ʶVÑÛ‰Â(\ãÙ¬/³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš= rœgÆEØ–KŒbSÿ Š*¯Å%DÓtåŽ8ãQ+ac@ª8ìR@z=ÏúÕÿ®iÿ Š§wykaj÷W—0Û[¦7Ë3„EÉÀÉ<H\¹ÿZ¿õÍ?ô\çŒ#–_Úw-ݤ…­¢2ÈŠ·³2¨VÉŒ AF†¥aª@Óé÷¶×p«l2[ʲ(lŒ‚yÁN“E+ʑȎÑ6ÉX€Ø>‡ ÐZåcµKM‰®µÙlⶺó¦”Obï.ø nرgågŒ7R bÙÁ¬ÿdêR Fnú;Iä.o/Éò­–s±Q(Û(Ú»eÀùqòУÑ\F‡gªKªië=þ©&ž‹s -Öêøk}ŠâWyq»Í#{8`3 kÄÿoûuדý£æý‰²¾ÉæùkÌ™óv|»Ô®ù1žÛè­¢±|9mu“ÞMxóK{r.â8„òya²í ƒÉ ¡@ä¶ëo¦º¤Ú‰‹í1ý¯Qx¯Cλ$'m®å’,9‹>IÚwvUdPA[¸ú[5|ÜEJéƒÂ¹`§=9(ß—Ò¦¯4–Ó^S¿Ï¾¼ÉqtlçÞЇ¼*G'œH-pþf2uqZúbÝ¥åŠëjóB#ìOW‚þt™óV6bg‘þ¼“Œçæó®ûe¯Ø~Ûö˜~ÉåùÞ~ñåìÆwné·ç¦([¸ú[5|ÜEJéƒÂ¹`§=9(ß—Ò¹;I›þmÞoçö‡ösÚÉ ËÉÿHR¨d8ÙžC³®;Õ[=Üêú–”ºÒÉo£ÆÖ $—Jï:½Ëmes™Hm¿+†á‡n@;ê+‹ÒâÖá.’K«ËÏøùŸÌƒì³y_gËù_¼i<žžQýÚoÏ ÿ- O¨Ý_Ûß^ÚÔL·µœ¶­ 2¼bÜq . ª/É6T‘Á'n@:v»/¢³gÅı¼¨˜<ª sÓ‚ëùýióM¼O<‰1©w‘Ø*ª’I=ÈønÂþü9qz×ÓNÚ<Æê[²Å’V6¿!ÏÝ8R1Á;Xœ¶âs5ØuK‹ V£Õ%Ôd[ô¹lÍ[æÁýÑcþþ¯çëŸã úÒê;ÛT¸‰fT|àM Äür®Å]Ás5ÌQ>ç¶E0ÁX¢¾=þWSÇ­eê¶³YxtÛéíxÁ$Ì"i%›É2©› IrÞY|`îé·œWÖ·¢{³e&¯k£Ë{#ù“[_K3¿‘l©®“íâq’J|¸#;0ésM¼O<‰1©w‘Ø*ª’I= ¢iÞ"‘UÚ0Ãr©$G`J¶>‡Ò¼ûR³Ö±·j7séo Þ%´Kw6Är6ó‘»¡n¬«”´Ö³Þë¶ö­®®ŒþNã$×Q? z[s1>arçŸm´Xê¡[ËVòöÜÂ|ÉÙ×vå¬66GQ´úóífm~=(ˆ¿´a¸³ûWؤK{«‡¸+4‹0€á"`á÷çœ6f–ÓV²·¸‹HME5VÔoe`L† snÊe<™±æ6~öЦ¬ø6µº¸»Õ£¾MNö'më"ÄÃìð+’£÷k'˜®1€ø6ÐOk¨[^Oq»;›vØïå°MÙ …r6±v“´Œ‘nà{élÕóqi+¦ 傜ôä£~_Jã£Óç³ÓL®º¢Aq¬]½úA$åü6àÆcD;”1帜®j”Pê‹~ÓÝǪ 9ÖšH–o=­„—¦!”ýéaºÛv>~~~­E€ï­nཅ¥·}è²I8#æG(ßFR? š¼º+Mi!-gÕ,í·\=‚›;™diZêvËþñ%L'ý#*sé¿=¿‡-®£‚ò{ɯionB¥ÃGžO,"ö]¤y$3´(TU-/þ=$ÿÏøùŸþ>þÿú×éþÇ÷?ØÛWhQEQEQEQEQEQEQEQEQEQEçÿ?ä§×VþTQñSþAÚwýuoåEZØ–z5ÏúÕÿ®iÿ Š§uu³ÜÜÈ#†1–sÐ ¹sþµëšè"¹ßÿÈ£©×/ê*:Œ?á1ð÷ý`ýÂøL|=ÿAX?_ð§jÚÄÖzÞ•¦Â6ý¯|'Ù¤ŸåFJá1³>gúÆ;Wo çŠZgŒ-kžA’1oœÎîo ¥¶ªï* ¸ÜU@Ê‚<€[ÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý®I®i‘Ás9»F†ÚÑoe‘u0r®p"7éžžâ³â×n­¼ŸíXáƒìÚI½Õv~ÎçBàœ©ÙqÓqù<Œ€Iÿ ‡¿è+ëþÂcáïú Áúÿ…:Ë_c³µÕ“©¼q-ÒÇ´0ÎÊ–dEbHKdî\gpËï5¥û=«iì“Mq~,Ñ]H¤„Oéʤsz£È/øL|=ÿAX?_ð£þÐV×ü*Í·ˆ4Û¹¢Žf>tžT.ÖÒ,sŽùG*×llw)#瑘Åš4w ¸˜˜÷y®¶²´q‘ã%Ü.ÔPÑÈ2Ä )=9 ÿÂcáïú Áúÿ…ð˜ø{þ‚°~¿áIkâ«)­îež;˜Z ¹mv-¼²Y$t^÷„ˆË›¶Œç¡5i0±[Hæ?˜¯ï©ò¾`ÃçÛ‚¬?„à·ü&>ÿ ¬¯øQÿ ‡¿è+ëþ^×ÅSÐt›ë;gŽçPžÖ âu0K´°]Ábãå%xÉàÝOi$®.\*.õf‚E.BƒW÷À–P<½Ù.¸ûË¿á1ð÷ý`ýÂøL|=ÿAX?_ðª’øÂÞßSOû=m£›|ðK£åºgù çm^2r~Pt‰´³Èd¹VVUòÎe‰±ÞÀ…s¤|ýÓ€¿á1ð÷ý`ýÂøL|=ÿAX?_ð«#ÄiºŠÜË2¼›ZÚEDgª;ÛË„bæ^>aš±øËB’Ïíxð[GYnmå]•C©u—.™a7HPÿÂcáïú Áúÿ…ð˜ø{þ‚°~¿áVGˆ4Óu¹–ey6 µ´ŠˆÎTv+¶7;—Ä7̼|Ã5`ñn–öé4²ºi7m‚b!E‘“t¹Aå £d¸P ·$)4¿ð˜ø{þ‚°~¿áGü&>ÿ ¬¯øRj^*²±ŽfŠ;›“ ñE!ŽÞRŸ4Émp…]”¹ù–Ê‘€AÆÔ2¬ðG2 "†УFyRØŒŠÆÿ„ÇÃßôƒõÿ d¾+ðÌèmFÖE ®ÔHe<Ž €G¡·è£@0ÿá1ð÷ý`ýÂøL|=ÿAX?_ð­Ê(Ð ?øL|=ÿAX?_ð£þÐV×ü+rŠ4þÐV×ü(ÿ„ÇÃßôƒõÿ Ü¢Ãÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý·(£@0ÿá1ð÷ý`ýÂøL|=ÿAX?_ð­Ê(Ð ?øL|=ÿAX?_ð£þÐV×ü+rŠ4þÐV×ü(ÿ„ÇÃßôƒõÿ Ü¢Ãÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý·(£@0ÿá1ð÷ý`ýÂøL|=ÿAX?_ð­Ê(Ð ?øL|=ÿAX?_ð£þÐV×ü+rŠ4þÐV×ü(ÿ„ÇÃßôƒõÿ Ü¢Ãÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý·(£@0ÿá1ð÷ý`ýÂøL|=ÿAX?_ð­Ê(Ð ?øL|=ÿAX?_ð£þÐV×ü+rŠ4*ËÄš>£yüs\JÛR4’*Õ©­?ãòúè¿Î¡ ?ø©ÿ í;þº·ò¢ŠŸòÓ¿ë«**ÖÂg£\ÿ­_úæŸú®wÆ?ò(ê_õËúŠè®Ö¯ýsOýUy%Šó&1Re¨9ã¯qQÔeItÿ3[µÔ¼ÜyÓAåíûÞcDÙÎxÇ•ÓçÛžV/‡qCmn¦{¹ UEû~ž'‹o‘DìÞ>lÛ©w˜`õ®ÏûrÓþ,òÛ–ŸóùcÿèSÑ®ÛB›K¶›Í´šÚ $Gf8Ëš@@w”Ù Œ`â Õ4›ëÿíìÁÿÿgÓ—k¨ÍŸdƒ'‡}Æ3ýÅùOñtÛ–ŸóùcÿèþÜ´ÿŸËü‡L~ÛËâGÕ¶Ø“,ñÜ;Íb²\+¢ª¤ü‹„^6“ËÀVÔš}ôº¾˜neóííd¹ºó‚ªs”Š23ʈåg&5$ŒàënZÏåþC£ûrÓþ,ò 9Ëo <:eõ±¼†'ŸËkt´¢¶µ’6Þ’$%Ø߆`VÚ2>ñ3ÏáHÇR³µ›ìö÷zLz\I´¿’¨%²N[‰zîõçÏíËOùü±ÿÈtnZÏåþC¦9{á¶Zµ«Ïg5¼w¯{mÝŸœä2£x.eb¸ØW ’Øä‹Â>MÆœðÏgl–¸.Övg•±#HcVGBIÁ•²2I,wûrÓþ,òÛ–ŸóùcÿéÏÙhw–w%“È“iÚZÈðJ‰±Ô¬k Hùc¸”’bXªð½ +[Ø[ù0=Œ&‰m¥ƒOT‘Œr$ˆg|æSº4ÎÒ€å¸ÉR½oöå§üþXÿä:?·-?çòÇÿ!Óñ„µRÎòíï!¸ÔÉ¢X¡ƒÊICtŠç;sö‘ÔŸ¹ïÅÛ¿ ^ßù×wšt×ÒyJ$kòâXü¬Š&Þ’ƒ+~ð?ó]öå§üþXÿä:?·-?çòÇÿ!Ð3‚máÕ¢¼ó-®hd{‹Ë5žì¼Hˆ ÌOÊIùIÉr$«¤øKQ“FÑWV¼….4ûkhãŠ1å„’ ]\ï`í˜C.Ð2Ç ÃûrÓþ,òÛ–ŸóùcÿèãÃÒϨLëx‹esw ìð˜IË—·kî¯îcÈ*OÞädmÅÀÂ÷ý.î+žá¦2¥å’]<1½Ä²¨Œ“µ$bêJ¯›³þÜ´ÿŸËü‡Göå§üþXÿä:ÃÝ.,Òþf×&ò6ÄÈ“ùâpY·á“~~Pªv7ddîÂ%X#º<Á@vD*¬Øä€IÀÏlŸ©¤þÜ´ÿŸËü‡Göå§üþXÿä:@IEGý¹iÿ?–?ùíËOùü±ÿÈt%öå§üþXÿä:?·-?çòÇÿ!ДTÛ–ŸóùcÿèþÜ´ÿŸËü‡@QQÿnZÏåþC£ûrÓþ,òIEGý¹iÿ?–?ùíËOùü±ÿÈt%öå§üþXÿä:?·-?çòÇÿ!ДTÛ–ŸóùcÿèþÜ´ÿŸËü‡@QQÿnZÏåþC£ûrÓþ,òIEGý¹iÿ?–?ùíËOùü±ÿÈt%öå§üþXÿä:?·-?çòÇÿ!ДTÛ–ŸóùcÿèþÜ´ÿŸËü‡@QQÿnZÏåþC£ûrÓþ,òIEGý¹iÿ?–?ùíËOùü±ÿÈt%öå§üþXÿä:?·-?çòÇÿ!ДTÛ–ŸóùcÿèþÜ´ÿŸËü‡@­?ãòúè¿Î¡¤‹YæD†êÍ¥fËÛïK@ñSþAÚwýuoåE?ä§×VþTU­„ÏF¹ÿZ¿õÍ?ô\ïŒäQÔ¿ë—õÑ\ÿ­_úæŸú®wÆ?ò(ê_õËúŠŽ£èX—AÐâ‰ämOÂ)cþéõ¡4-þî‘§çhm¦ÕôÈ##¡üªíáA¶8–Mìƒ € Á8îyqžj„bCªKn¯1©u— ÈI ÷†ìy` Æ8ÀŸðhŸôÓÿð?ÂøG´Aÿ0}?ÿ“ü*í´’Mm’Åå;®â™ÎßcÀæ®Y¼IpQœ}ÌôÏ¿ôÿõP7ü#Ú' èÖƒ‚ ª ~”Â=¢ÐOÿÀdÿ ÞgÓšGfGÜX–åúçŸÖ©.vŒõÇ4ÿö‰ÿ@}?ÿ“ü*8ôMRÁ4‹Tsh£¡#¸ädžœJ¼¯d³N5»-¼yF;6ùçÆwnëÏኞyô÷ÒaKÞhi>ÍÛƒn;÷nçn⦅ls¶¹e‰´íÿl©is;þíþ€úþ'øQÿö‰ÿ@}?ÿ“ü+JŠê23áÑ?è§ÿà2…ðhŸôÓÿð?´¨  ßøG´Oúéÿø ŸáGü#Ú'ýôÿüOð­*(7þíþ€úþ'øQÿö‰ÿ@}?ÿ“ü+JŠÍÿ„{Dÿ >Ÿÿ€ÉþÂ=¢ÐOÿÀdÿ Ò¢€3áÑ?è§ÿà2…ðhŸôÓÿð?´¨  ßøG´Oúéÿø ŸáGü#Ú'ýôÿüOð­*(7þíþ€úþ'øQÿö‰ÿ@}?ÿ“ü+JŠÍÿ„{Dÿ >Ÿÿ€ÉþÂ=¢ÐOÿÀdÿ Ò¢€3áÑ?è§ÿà2…ðhŸôÓÿð?´¨  ßøG´Oúéÿø ŸáGü#Ú'ýôÿüOð­*(7þíþ€úþ'øQÿö‰ÿ@}?ÿ“ü+JŠÍÿ„{Dÿ >Ÿÿ€ÉþÂ=¢ÐOÿÀdÿ Ò¢€3áÑ?è§ÿà2…ðhŸôÓÿð?´¨  ßøG´Oúéÿø ŸáGü#Ú'ýôÿüOð­*(7þíþ€úþ'øQÿö‰ÿ@}?ÿ“ü+JŠÍÿ„{Dÿ >Ÿÿ€ÉþÂ=¢ÐOÿÀdÿ Ò¢€3áÑ?è§ÿà2…ðhŸôÓÿð?´¨  ßøG´Oúéÿø ŸáGü#Ú'ýôÿüOð­*(7þíþ€úþ'øQÿö‰ÿ@}?ÿ“ü+JŠÍÿ„{Dÿ >Ÿÿ€ÉþÂ=¢ÐOÿÀdÿ Ò¢€+éš6—i©ÛOm¦ÙÃ*È6É ¬3ÇJ±SZÇäõÑC@?ø©ÿ í;þº·ò¢ŠŸòÓ¿ë«**ÖÂg£\ÿ­_úæŸú®wÆ?ò(ê_õËúŠè®Ö¯ýsOýW;ãùu/úåýEGQô:/²\ÿϼ¿÷ÁªQè×qê’Þ)GR^IùI ϸ+{ZÕ³%ˆËcakå<’ÜÞ‘pѨÞ dÉÜúU}+ÄßÝÇäk:V£fèãβ#jÈ­ XHÃ'ÌuäzÕrŠåo²\ÿϼ¿÷Á£ì—þ]åÿ¾ lê7húüö³£”·vÁÙ¸~„¡Çx‚Ê=;II­°’y>h-7#æÛ¸þ$“ß99äÄâ is¢…UÚö5ÅÀñï7ýði~Ésÿ>òÿߺšó;khZÅÃÝÃw«½½ÉYု–÷6Hâ"ŒvŶá‡NrYJÝ|§=Îì—?óï/ýðjt§·i+IA‘‹1*Ç’IïÐd“ŽœŸZM+âF‰­ý´iË=Ô–ö’^E »E4—1&3±Ë+ÈH‰lc!¶ÜÕµöÓ5›é]¤:~‘£É}{ª–³(¦{…·œH:õþÈ›¸ù™Ù.çÞ_ûàÑöKŸù÷—þø5R_Ýø|À5ÛèØiš/0ÞMÅ=ô×Ú…ÌZe”&—ʶ ÜÈȧ¬ŒâÅ\`0[—þ5Ótë+‹‰`»g·{¡5º"™c[tggeÝÂ2„*O_>›Å¡r/²\ÿϼ¿÷Á£ì—?óï/ýðj ï]A}§ÙÅ ß-ô·kö˜ ƆáÑÑ„¾_-_8Vã•$o‰~‹X¼Óæ¹òþË燗ÌòЫ4£ÊW3 ¢99d vðNåÜr…ÉþÉsÿ>òÿß²\ÿϼ¿÷Á¦Aâë˽gF‚ìZj6óÍ“-»°Ekp³Iб3g±ÀÀÇ^²ŽP¹Ë}’çþ}åÿ¾ d¹ÿŸyïƒ]Mr…Î[ì—?óï/ýðhû%ÏüûËÿ|êh£”.rßd¹ÿŸyïƒGÙ.çÞ_ûà×SE¡s–û%ÏüûËÿ|>Ésÿ>òÿߺš(å œ·Ù.çÞ_ûàÑöKŸù÷—þø5ÔÑG(\å¾Ésÿ>òÿß²\ÿϼ¿÷Á®¦Š9Bç-öKŸù÷—þø4}’çþ}åÿ¾ u4QÊ9o²\ÿϼ¿÷Á£ì—?óï/ýðk©¢ŽP¹Ë}’çþ}åÿ¾ d¹ÿŸyïƒ]Mr…Î[ì—?óï/ýðhû%ÏüûËÿ|êh£”.rßd¹ÿŸyïƒGÙ.çÞ_ûà×SE¡s–û%ÏüûËÿ|>Ésÿ>òÿߺš(å œ·Ù.çÞ_ûàÑöKŸù÷—þø5ÔÑG(\å¾Ésÿ>òÿß²\ÿϼ¿÷Á®¦Š9Bç-öKŸù÷—þø4}’çþ}åÿ¾ u4QÊ9o²\ÿϼ¿÷Á£ì—?óï/ýðk©¢ŽP¹Ë}’çþ}åÿ¾ d¹ÿŸyïƒ]Mr…ÎjÞÞtº…žD‹’TÔUZênÕ/ýtOýW-I« ñSþAÚwýuoåE?ä§×VþTU-„ÏF¹ÿZ¿õÍ?ô\ïŒäQÔ¿ë—õÑ\ÿ­_úæŸú®wÆ?ò(ê_õËúŠŽ£èw·–w2ÞAukqOoÂd1CÙ—sõ¨l`º¸¸·Ôn. ‘~Îʉ;xr’w°?ttãžµ©Uì~lÛ·f%;·nÏœîlÿßGêzÖ„‰¨À×Zeݺ}éatR¤W'«Ùjz½´zziÏËI爢äÝÃnÛqò‚qÐsޝR¹{=*òê0¥áäPÝ HÏå\œ¾05KNƒ_Ò'Ô­-¼Æ€/ßeóKF«ç½|¶.6ä¹ÏnzøhVø©W•'xµsgÁZiµÑ-üû½š=¼Vöçzå–9måþ^NëhÁÆ8-ê×¼Õ-­m.&Y¢‘áÛË ±PÇøãß'ÐÖTú¤ú{Ç$ú³Îèî$X‘¸çf#KqÁää]Jð¦Ò‘¦å°ë_ %ž=„Zƪ¶¦Ñ¬íQfTûD`yETÊíy7°ÛÁå·WÔ¼7y¨ÿnù’@ßÚrÛ[rÄĽ6y°œï»Áþñ~a·GJñ¦¥$ùö‹p²lXâ¸æ ¡²¼G$tìkYñuæ‹âÙíe³óôˆtøåo³ÄZàÜHÓyj>`»[È(S$‘¨ûÜ\'«ÄR‹‹³4$ðßÛï5™¯äù®å·û$°¶à ñpFÝË9•ÆC¸ÈùEËm ÆMWR¹–ƒpòK*<˜Ú0®ª¡À…UQ¹Cœ“Ïè¾5˜hWâ#]RÑ'2%ŠÓGs,-öç}ÉǬÑã·5ŸA£ÞXØ‹Yï/ï¼Ãoiį" È2º)ÆåàÜäD™kàÁá;-W¼£!}R6Šöga$¤—Œ²ƒ!v ÝÆ0¸ÐÔ<)¦êO«¼¢D}RÈÙLÑíU”«:ñòìœäCÇÈ+.?@·í§ß\´2´o41Ĉ¬×S[C\–g‡ho»ÈfØ #xúÉLìºf¤ðZ[ý¢þum²Q$±¸pdÜÅ så‡Îß—vF@45/ Ûj£j‚îîÖü$+ð&œ(ue$­Äªw0F "ðж¸íµmJæ–;hÚ?.¥,^A”ÜÇs»mºßwå]¼ÚüKÓ4hÞ nçuÀ»¼.Þd1ùVéw4Q¬êÒab#‡—‘–]ÝF­¯3Q´°ƒJ¾Ôn®¢–eKCÚ‘˜Ãe‘YW¦{Ð;Yi·ÞZÞ]Çö‰'¸ºUˆ5ϘcóÔFò¢ÉEVù3œ³é+—ƒÇš]äWSZ[ßOou‡jLó¬-!b2Ïç¨çpw”KGwã‹kCn÷v×v1¥ÄÐ߉âI ±ŽÙ®6±I&0 ¤+:Ê+Ó¾#i:¬N¶0Oq|%H’Ê íæy +¸Ã¤¦!òÅ)Ã8?'O™whhzõî©­jöWTöðÙÊŠ“1 Zd1>$$È ­Ê˜æ'¨AEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP7?ê—þº'þ„+–®¦çýRÿ×DÿÐ…rÕ2)ñSþAÚwýuoåE?ä§×VþTS[ žsþµëšè"¹ßÿÈ£©×/ê+¢¹ÿZ¿õÍ?ô\ïŒäQÔ¿ë—õGÐôº¯`ÛôëfÝ»1)Ý»vxçsgþú?SÖ¬U{ß§[6íÙ‰NíÛ³Àç;›?÷Ñúžµ¡!köÝ:æÓ~Ï>&v3·p#8ük}"îê÷PîÍn.¬ã·žU¶l˜³.Мq‚òãœõ8ÀØÔ®^ÏJ¼ºŒ)x`y7BB’3ùW'/Œ McRÓ ×ô‰õ+Ko1  ÷Ù|ÒѪùÄï_-‹¹®sØ­Ôm þ™wf$òÌð¼Añ»”Œã¿Zç ÑõØw;E§¼Ïïö§ôy|Ø2I;÷𥵭¥ÄË4R<1»ybA–*ãÿoûäúÊŸTŸOxäŸQ¶bùÝÄ‹7ìÂä`ã©n8<œŽe’ù. ÃŽùÛóQ'5&[k›Ë;{ÉnM­µ¬¢Q%Ä›#u û¼&á4xó [ ·Ô×óþðCÛ?å=ðéÞ´šymüVÖ&G˜ÞùW°©™ ×23Y³]ÈQ€VËe2²kc}â ø|]m¥Çeiw ÏÄL³¡Æ%G]£ì³nèAŒö [—îb}ÙŠ¯>‰¢jW6ºtºÕµúËw<×í5Òy÷r5´¶¢=±… ò +´³ž ,Ëà—¾ ¾Ó'jWvÖ6ʱ²Ý\G:«—.lòüÐO•/Þ@>Lçwkø{E¶Ó~#xU-îRäÎm.dƒc3ÂÍrÙˆ®2Ä‚¹À²¸Lð¼±rR½•öÿ‚R«wküþ3D­q®ê³ßE(–ÞõÚð®Ÿ*Ä\¬’Jwr~TÛsOÑFŸ5Ú_ÝÈnMÌröÍ0DO8áV5\) ÆvƒÍjQ\†¡EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP7?ê—þº'þ„+–®¦çýRÿ×DÿÐ…rÕ2)ñSþAÚwýuoåE?ä§×VþTS[ žsþµëšè"¹ßÿÈ£©×/ê+¢¹ÿZ¿õÍ?ô\ïŒäQÔ¿ë—õGÐôº¯`ÛôëfÝ»1)Ý»vxçsgþú?SÖ³õ­Wû2XŒ·ö6¾SÉ-Íèù êLÏ¥føcÄðk6º}ž¥gseqm»)ÄÈ<¬G!óçýèœã®kBNŠþ×íºuͦýž|MìgnàFqøÖMƇys%ì­wf³^Û-¬Ò-«äƻʀ ¸2¿8ïÎp*ö£v¡ßÏk:9Kw`ñ°l›‡èAú\wˆ,£Ó´”šÛ '“æ‡òÓp!r>m»âI=ó“žLN+Ø[K0þÕÚö;FÐßé—vbO,Ï ÄÛ¹HÎ;õ®r ]‡s´Z{ÌøÞÿjqŸ@—À‡ó$“ÖW§x²ö9‹ëRG»Ãöjé²Ã,RK4qq4²á¤ž5ÁʰÆT*ááU§#8U”‘½¦érE º¿1µÊäFˆÅ’!ÐHb;à`p;“â^'ѼY?Šõu‹ÂÒj6ÇP’k9n¡v;yK½xU”+‡Ü˜Cò WUõ;ï]GãHôË :úú8"¹ŽæÞ!KH¢ÎDpÒ:ü¡n뜷B5³ãQ?…õ‹ßÁw2[é’Ü&¤©Š ·Ÿe‘ƒ“µ£<#œÑ€ßûá£:Ÿ¼ø‹Dñ«,<!¼û1´û[Ã*ÈÑ<V ©2 í%³²JÑÔìü_ªÅo4^ ž=Jh'Žk¶‚EdûDÎî¨ í ²è).»—2r<²WÖ“ÇF÷«.Ÿ}<6t·—pÇGm \OæV—{`[¹;B‚v‹xïL‚ Rí¡Ÿû?M•­¥½ó!›€ë“ƒ dmì]U1ónÚC—‹¨ú/ÇüÌý”OwŽ&†ÞÍ<"ib#Óš9ü¢$x\åšO1>%ˆ |‰j{}7ÅQi–Kmà‰þ纷‘­¤D´Ü–Ë@À…-æ†û¤¶JËqÐüY¥kÚ5ΩÄq[Ú»%ËI4l°•Pç2#4dmel«3ƒ‚>ßý§£ý¯@»±ºóx†ãÌó!ûÛY²Ÿ{oÍò‚2FÝËœƒëSì¿óeçt½éžO O4wYËo,*I,7Á”äDĆ*ùÀWìg¬¬ž½7sÁ˜šÜ¬)ny 'v w;I$2„c¸°ržëá}^çV²¹k¿-¤·¸0ù‹nöÆA±-„¼GçÆ×9 +­nPñuEøÿ˜½”O™!Ð|ZÛ¡ÿ„M„þQMɸÆ×,HX}¡³½Îpp"Â^ðχ|O/‹¼9y©øjxRÒXD·onáž5,{Ô‡PQZ00ŠxbYJ3§Ñ´R–*rM4µõÿ1ªQNáEW9 QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE Ïú¥ÿ®‰ÿ¡ å«©¹ÿT¿õÑ?ô!\µLŠGŸüTÿvÿ][ùQGÅOùißõÕ¿•ÖÂg£\ÿ­_úæŸú®wÆ?ò(ê_õËúŠè®Ö¯ýsOýW;ãùu/úåýEGQô;ÛË;™o ºµ¸Š'Š7Œ‰a2¡ì˹úÕ KkK}5’X­·¶†(ÈÙ Œ±‘÷` ÉÏ©©5­Wû2XŒ·ö6¾SÉ-Íèù êLÏ¥føcÄðk6º}ž¥gseqm»)ÄÈ<¬G!óçýèœã®kBN‡Q®´Ë»tûÒÂè>¥H®WXÓõmZÊ+5Òå…Ä^SÊòÆcn mÄz| û èõ´}þ{YÑÊ[»ƒ`ìÜ?BЊã¼Ae¤¤ÖØI<Ÿ4?–› ‘ómÜIù™ƒ‚·:oæw`ÔÛ÷Yè5ÍÉàø®‰“RÕõ-Bá-´óy(ÖÄH’îAj¤ïŠ&ùà `°=%yŒ5‰4- âáîá»ÕÞÞä¬ðÀWË{›$qF;bÛpáCƒ'9,¥FïLá:üäß¶£‰5”Ôåi.‚Ú–q"@…J˜v´Xƒדš‘ü `¶Zmíõ–™whmg²…£dqäntg #T È -šúWÄ[ûhÓ–{©-í$¼ŠvŠi.bLgb#–V;#ØÆCm¹«kí¦k7Ò»Htý#G’úö%U-!f>QL÷ o8 >uëü çÀ!µ}LNî=&þß˸µŒÇ›óÜÍ*91’©þ‘µJ2¶ ç йðe•ö¥s¨ÞÞ]Ü^H-æe‰ZÑVU™Œn "#&ÿ»èϺšëzŽ“ugmªÜ}¢k*í…ý.òâUŠ,1—ŠaÎÅbÆJêi¾%„­ i:•´ñÞ›)£•co%¼8w1»(B¥@9ûÌ9  6Á´ûvŽKë»Ù]˼÷L¥˜à€¡Q@ *Ôœ’I’ú×í¶r[‹‰íÙ°Vhk£#±Á‚ ž„H<½·‹.†£sé×ÚŸÚ®î¾Å · 6Æ(%ÞdtÌ]‡,J°éÐ ñ/Ãrëz|7>gÚ¼€’ù‘¦eVˆyLâc¸I*…FîHÚÛ@: 'IM*)ÿÒgº¸¹—θ¹Ÿnù_j $"ªŒ""üª>îNI$èW/mãÝê icÿ¤Ee*! »ý%ÑHÝ÷“͉œ ʇÃ4æø™£A£iºœ¶×pÇ©!’Ò;§‚Ù¤Œ*pf‘º®7e¹e Ÿ5v”W/iã« éÃ[Ù_>še·‡ûKlbó¤OÚ_Íù¼ø‡Üà·8‘Ÿt«{wowki%¸º³šo,-äEÑ¡ßòÓCþ·Ëǘ À T¬¢«ØÜKwgóYOe#g0NPº`‘ÉFeç¯õõâ¬PEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP7?ê—þº'þ„+–®¦çýRÿ×DÿÐ…rÕ2)ñSþAÚwýuoåE?ä§×VþTS[ žsþµëšè"¹ßÿÈ£©×/ê+¢¹ÿZ¿õÍ?ô\ïŒäQÔ¿ë—õGÐïo,îe¼‚êÖâ(ž(Þ2%„Èb‡³.>çëUt­ôϱD&ƒì¶6†ÒÞ¡eÚŸ&2ÌìN`VÅ¡%mFºÓ.íÓïK  ú•"¹]cOÕµk(¬×K–yO+ËŒ¸$a·éòƒì+³¢¹ëá¡[â6¥^TâÍŸi¦×D·óîöhöñ[Ûë–Xå·”ùy;­£à·¨#¤¢º N~׉g§Oa±ª­©´k;TY•>ÅQU²€»^Mì6ðymÕõ/ Þj?Û¾d7öœ¶Öܱñ/Mžl'†;îðG?¼_˜`mê( nóó^¾½q9ŽK‹§€Ø2Êc1, ²Bí` Ü_%_††hÃ~ÔlRK[SžKéµ} ŠU*ßèâ²Ç‘p¡øDÃë·-ÔQ@þƒá¿ìè4«›É7êvÖ“GpÑ7îåšáã–wÁó"1€Àé~ ¶Ñ…¬V:–¥¤)’Ùd@·i;°MùÛ`ª²©Û‚¤3é( ~ßÁº=·Øü¸qöK·ºO•>mßv6ùy1Åþ³ÃýÁ@ðœiÚMµŽ£}e6—h, »‡Êi 8@Uƒ£!ÉŠ2NÐr¼  ¢€9;?²j×ó\êWo§Ë{Ô6"Eus 0*<ŽÈe.$„7`í\ç, ‹_Åbжº¾¥··û%‹$› !1ǘÈ`DqŒÉ½°¼I'¤¢€3ôMÏÃú<e‚l·‡qe™‹1€£,Äá@QœhQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECsþ©ë¢èB¹jênÕ/ýtOýW-S"‘çÿ?ä§×VþTQñSþAÚwýuoåE5°™è×?ëWþ¹§þ‚+ñüŠ:—ýrþ¢º+Ÿõ«ÿ\ÓÿAÎøÇþEKþ¹QQÔ}K¢Š+BBŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( nÕ/ýtOýW-]MÏú¥ÿ®‰ÿ¡ åªdR<ÿâ§üƒ´ïúêßÊŠ>*È;Nÿ®­ü¨¦¶=çýjÿ×4ÿÐEs¾1ÿ‘GRÿ®_ÔWEsþµëšè"¹ßÿÈ£©×/ê*:¡étQEhHQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE Ïú¥ÿ®‰ÿ¡ å«©¹ÿT¿õÑ?ô!\µLŠGŸüTÿvÿ][ùQGÅOùißõÕ¿•ÖÂg£\ÿ­_úæŸú®wÆ?ò(ê_õËúŠè®Ö¯ýsOýW;ãùu/úåýEGQô=.Š(­ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€!¹ÿT¿õÑ?ô!\µu7?ê—þº'þ„+–©‘HóÿŠŸòÓ¿ë«*(ø©ÿ í;þº·ò¢šØLôkŸõ«ÿ\ÓÿAÎøÇþEKþ¹Q]ÏúÕÿ®iÿ Šç|cÿ"Ž¥ÿ\¿¨¨ê>‡¥ÑE¡!EPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP7?ê—þº'þ„+–®¦çýRÿ×DÿÐ…rÕ2)ñSþAÚwýuoåE?ä§×VþTS[ žsþµëšè"¹ßÿÈ£©×/ê+¢¹ÿZ¿õÍ?ô\ïŒäQÔ¿ë—õGÐôº(¢´$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š†çýRÿ×DÿÐ…rÕÔÜÿª_úèŸú®Z¦E#Ïþ*È;Nÿ®­ü¨£â§üƒ´ïúêßÊŠka3Ѯ֯ýsOýW;ãùu/úåýEtW?ëWþ¹§þ‚+ñüŠ:—ýrþ¢£¨ú—EV„…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Üÿª_úèŸú®Zº›ŸõKÿ]ÿBËTȤyÿÅOùißõÕ¿•|Tÿvÿ][ùQMl&z5ÏúÕÿ®iÿ Šç|cÿ"Ž¥ÿ\¿¨®Šçýjÿ×4ÿÐEs¾1ÿ‘GRÿ®_ÔTuCÒ袊ТŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ŸõKÿ]ÿBËWSsþ©ë¢èB¹j™?ø©ÿ í;þº·ò¢ŠŸòÓ¿ë«*)­„ÏF¹ÿZ¿õÍ?ô\ïŒäQÔ¿ë—õÑ\ÿ­_úæŸú®wÆ?ò(ê_õËúŠŽ£èz]QZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQECsþ©ë¢èB¹jênÕ/ýtOýW-S"‘çÿ?ä§×VþTQñSþAÚwýuoåE5°™è×?ëWþ¹§þ‚+ñüŠ:—ýrþ¢º+Ÿõ«ÿ\ÓÿAÎøÇþEKþ¹QQÔ}K¢Š+BBŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( nÕ/ýtOýW-]MÏú¥ÿ®‰ÿ¡ åªdR<ÿâ§üƒ´ïúêßÊŠ>*È;Nÿ®­ü¨¦¶=çýjÿ×4ÿÐEs¾1ÿ‘GRÿ®_ÔWEsþµëšè"¹ßÿÈ£©×/ê*:¡étQEhHQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE Ïú¥ÿ®‰ÿ¡ å«©¹ÿT¿õÑ?ô!\µLŠGŸüTÿvÿ][ùQGÅOùißõÕ¿•ÖÂg£\ÿ­_úæŸú®wÆ?ò(ê_õËúŠè®Ö¯ýsOýW;ãùu/úåýEGQô=.Š(­ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€!¹ÿT¿õÑ?ô!\µu7?ê—þº'þ„+–©‘HóÿŠŸòÓ¿ë«*(ø©ÿ í;þº·ò¢šØLôkŸõ«ÿ\ÓÿAÎøÇþEKþ¹Q]ÏúÕÿ®iÿ ŠÈ×´éõmîÂÛ`štئF £‘É>•GÐô *ŸöŒ^Ÿù?øª?´bôÿȉÿÅUÜ’åOûF/OüˆŸüUÚ1zäDÿ⨸(ªÚ1zäDÿâ¨þÑ‹Óÿ"'ÿEÀ¹ESþÑ‹Óÿ"'ÿGöŒ^Ÿù?øª.Ê*ŸöŒ^Ÿù?øª?´bôÿȉÿÅQp.QTÿ´bôÿȉÿÅQý£§þDOþ*‹rЧý£§þDOþ*í½?ò"ñT\ ”U?í½?ò"ñThÅéÿ‘ÿŠ¢à\¢©ÿhÅéÿ‘ÿŠ£ûF/OüˆŸüUåOûF/OüˆŸüUÚ1zäDÿ⨸(ªÚ1zäDÿâ¨þÑ‹Óÿ"'ÿEÀ¹ESþÑ‹Óÿ"'ÿGöŒ^Ÿù?øª.Ê*ŸöŒ^Ÿù?øª?´bôÿȉÿÅQp.QTÿ´bôÿȉÿÅQý£§þDOþ*‹rЧý£§þDOþ*í½?ò"ñT\ ”U?í½?ò"ñThÅéÿ‘ÿŠ¢à\¢©ÿhÅéÿ‘ÿŠ£ûF/OüˆŸüUåOûF/OüˆŸüUÚ1zäDÿ⨸(ªÚ1zäDÿâ¨þÑ‹Óÿ"'ÿEÀ¹ESþÑ‹Óÿ"'ÿGöŒ^Ÿù?øª.Ê*ŸöŒ^Ÿù?øª?´bôÿȉÿÅQp.QTÿ´bôÿȉÿÅQý£§þDOþ*‹rЧý£§þDOþ*í½?ò"ñT\ ”U?í½?ò"ñThÅéÿ‘ÿŠ¢à\¢©ÿhÅéÿ‘ÿŠ£ûF/OüˆŸüUkŸõKÿ]ÿBËWA%ìRª¨ÂüêrdLï{W?S"‘çÿ?ä§×VþTQñSþAÚwýuoåERØLôkŸõ«ÿ\ÓÿANîòÖÂÕî¯.a¶·Lo–g‹“’x?¹sþµëšè"¹ÿAus¢¬vc7m³d&3 ]·1’ÅA¨“ÈàGZš–—–·ö©ugs Í»çd°¸tlÁäøTÕÂêºÌ6w1´“Es>¢'Ô.--¦hÞ$¤f%‰Ä½b„2«îVÜNc#%ºê©y£,Ój7ämÍ Dó˜ù­"³+b0¿º˜—!FHv*ŀ>ƒûdAjñký¢8á—YùØ3,ð3ˆƒp˰\ü°eX``å]ÓÚÿVñƒÎdÕáÒ„“H‰$rÀ¶;=ŠUÀ!w‰HÃŽT°%€í(¯>‘uÐ-•&Õá¿2Eý´òÅy Ë}ÞR£)+æíÿr1Ÿ“ŠÚ ©§‚bS5äÓ‰ÌqG1¶ó†ü.æ7“œre韟Šè`»‚æk˜¢}Ïm Ša‚6±E|{ü®§Z|ÓEo“Ï"E j]äv ª d’O@y£ZÞ‰îÍ”š½®-ìæMm},ÎþE²¦BºO·‰ÆI)òàŒìÅ­JÏ[¾ŽîÅþݨÝÏ¥¼'x–Ñ-ÜÛÈÛÌZFìr…º²®P°‚&‰§xˆfEWhà ʤ *ØúJ}p­k=î»aojÚêèÏäî2Muð·¥·3ãæç'þyöÛTµ™µøô¢"þцâÏí_b‘-î®à¬Ò,HÂ6„Hˆyƒ‡ßžpÙ, ­å«y{na>d aÇÌë»rV#¨Ú} M^}-¦­eoqšŠj­¨ÞÊÀ™ xîÞ7þëifˆœq¸®ïš§[Yïu[K{6×WC{˜üÃ4×QK¼Cr_,äJ"Û¾Ìôçuº¢¹YbÔfð¶c|&¢Á”yo³ Рï><‘Ëç$e‰9&³õ(õVëN ¨Ç§Åz|‹¼^\ÈɈ„ýˬ®¬ï1ÞXª”ÛýÜwTWŸi6ºÎ lçÕWInîaŠì ¦„,_`I…Ré ‚ÊÎW8$i¿ð’ÜêZuÆ¡w} Ë-£E”ÅZ3fmä:À‡œt.?‡Ÿ,Q`=Š¥/ü†íãóþ=¦ûŸê>ô_ý¿îûy•v…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ñSþAÚwýuoåE?ä§×VþTU­‰g£\ÿ­_úæŸúªwWPXÛ=ÍÌ‚8cg=«—?ëWþ¹§þ‚+ñüŠ:—ýrþ¢£¨ÃþÐV×ü(ÿ„ÇÃßôƒõÿ îõ=jËHò…ÓNÒK’Û[Iq#Œ¶ÈÕ›hÊ‚ØÀ, œ‘œ=ÇZ~§¨ÞBÏ ·7­È´™b’9má‘7ÊWb»4¤%IÊ dŒ×*ÌøL|=ÿAX?_ð£þÐV×ü+«oxv8$¸›Pò-ÓaÏ ‘G"³ª #vP²G¹Ó.¤¨¤5OþX"\’àÇØÝÚÖ9"–6h’ΆiFÖtË‚vq”\ 1Ê‚æü&>ÿ ¬¯øQÿ ‡¿è+ëþÙÙx£I¿ÔZÆ §ó„²@[IcŽI#,FPŽÀ£ð¤œ+€‘±G* žiÿ ‡¿è+ëþÂcáïú Áúÿ…z]r ¹æŸð˜ø{þ‚°~¿áGü&>ÿ ¬¯øW¥ÑG* žiÿ ‡¿è+ëþÂcáïú Áúÿ…z]r ¹æŸð˜ø{þ‚°~¿áGü&>ÿ ¬¯øW¥ÑG* žiÿ ‡¿è+ëþÂcáïú Áúÿ…z]r ¹æŸð˜ø{þ‚°~¿áGü&>ÿ ¬¯øW¥ÑG* žiÿ ‡¿è+ëþÂcáïú Áúÿ…z]r ¹æŸð˜ø{þ‚°~¿áGü&>ÿ ¬¯øW¥ÑG* žiÿ ‡¿è+ëþÂcáïú Áúÿ…z]r ¹æŸð˜ø{þ‚°~¿áGü&>ÿ ¬¯øW¥ÑG* žiÿ ‡¿è+ëþÂcáïú Áúÿ…z]r ¹æŸð˜ø{þ‚°~¿áGü&>ÿ ¬¯øW¥ÑG* žiÿ ‡¿è+ëþÂcáïú Áúÿ…z]r ¹æŸð˜ø{þ‚°~¿áGü&>ÿ ¬¯øW¥ÑG* žiÿ ‡¿è+ëþÂcáïú Áúÿ…z]r ¹æŸð˜ø{þ‚°~¿áGü&>ÿ ¬¯øW¥ÑG* žiÿ ‡¿è+ëþÂcáïú Áúÿ…z]r ¹æŸð˜ø{þ‚°~¿áGü&>ÿ ¬¯øW¥ÑG* žiÿ ‡¿è+ëþÂcáïú Áúÿ…z]r ¹æŸð˜ø{þ‚°~¿áGü&>ÿ ¬¯øW¥ÑG* žiÿ ‡¿è+ëþÂcáïú Áúÿ…z]r ¹æŸð˜ø{þ‚°~¿áGü&>ÿ ¬¯øW¥ÑG* žweâMQ¼ŠÎÎþ9®%m©I?•j×Ssþ©ë¢èB¹jMXhóÿŠŸòÓ¿ë«*(ø©ÿ í;þº·ò¢©l&z5ÏúÕÿ®iÿ Šç|cÿ"Ž¥ÿ\¿¨®Šçýjÿ×4ÿÐEB1J«`‚(a‘ÓƒQÔe¿ZêqÜYjú$2O¨[¤¶ÞX†9WÊ”£1*óCÈhS?sòœåsô/ͧxV.âú3?Ú4ë©8ÉUkT¶Rƒ$Û}ì oéÇ6þÓ'÷bÿ¿Kþ}¦OîÅÿ~—ü*¹…c3Møim¦E0I¦Â–ïl!–ÛKH§‘!ž)&âdsä¨Ü»Y˜©ùBÜÕü ý ž"’×Qû%Þµ˜å—ÈÞ¾K[¤&7]Ã~63«df8ùK‡Ÿí2v/ûô¿áGÚdþì_÷éÂŽ`±fßÃgþÍÿLÝö-VïRÿUþÚ>N¼mûG^s³ Ïrßi“û±ߥÿ >Ó'÷bÿ¿KþsަŠå¾Ó'÷bÿ¿Kþ}¦OîÅÿ~—ü(æ MË}¦OîÅÿ~—ü(ûLŸÝ‹þý/øQÌ:š+–ûLŸÝ‹þý/øQö™?»ýú_ð£˜,u4W-ö™?»ýú_ð£í2v/ûô¿áG0Xêh®[í2v/ûô¿áGÚdþì_÷éÂŽ`±ÔÑ\·Údþì_÷é´ÉýØ¿ïÒÿ…Ác©¢¹o´ÉýØ¿ïÒÿ…i“û±ߥÿ 9‚ÇSErßi“û±ߥÿ >Ó'÷bÿ¿KþsަŠå¾Ó'÷bÿ¿Kþ}¦OîÅÿ~—ü(æ MË}¦OîÅÿ~—ü(ûLŸÝ‹þý/øQÌ:š+–ûLŸÝ‹þý/øQö™?»ýú_ð£˜,u4W-ö™?»ýú_ð£í2v/ûô¿áG0Xêh®[í2v/ûô¿áGÚdþì_÷éÂŽ`±ÔÑ\·Údþì_÷é´ÉýØ¿ïÒÿ…Ác©¢¹o´ÉýØ¿ïÒÿ…i“û±ߥÿ 9‚ÇSErßi“û±ߥÿ >Ó'÷bÿ¿KþsަŠå¾Ó'÷bÿ¿Kþ}¦OîÅÿ~—ü(æ MË}¦OîÅÿ~—ü(ûLŸÝ‹þý/øQÌ:š+–ûLŸÝ‹þý/øQö™?»ýú_ð£˜,u4W-ö™?»ýú_ð£í2v/ûô¿áG0Xêh®[í2v/ûô¿áGÚdþì_÷éÂŽ`±ÔÑ\·Údþì_÷é´ÉýØ¿ïÒÿ…Ác£¹ÿT¿õÑ?ô!\µN.åV ¢ G ˆ—Ò ¤ÝÆ?ø©ÿ í;þº·ò¢ŠŸòÓ¿ë«**–Âg£\ÿ­_úæŸú¨jkŸõ«ÿ\ÓÿA @Š( aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPŸüTÿvÿ][ùQGÅOùißõÕ¿•kbYè×?ëWþ¹§þ‚*šçýjÿ×4ÿÐECP0¢Š(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEçÿ?ä§×VþTQñSþAÚwýuoåEZØ–z5ÏúÕÿ®iÿ Š†¤¼2‰WË¥ýÚg"ãåÞaúU|ÝÏŒŸ÷þþ9Qa’QQæëþ|dÿ¿ðñÊ3uÿ>2ßø?øåJ*<ÝÏŒŸ÷þþ9Fn¿çÆOûÿÿ¢ÀIEG›¯ùñ“þÿÁÿÇ(Í×üøÉÿàÿã”X (¨óuÿ>2ßø?øåºÿŸ?ïüür‹%n¿çÆOûÿÿ£7_óã'ýÿƒÿŽQ`$¢£Í×üøÉÿàÿã”fëþ|dÿ¿ðñÊ,”TyºÿŸ?ïüürŒÝÏŒŸ÷þþ9E€’Š7_óã'ýÿƒÿŽQ›¯ùñ“þÿÁÿÇ(°QQæëþ|dÿ¿ðñÊ3uÿ>2ßø?øåJ*<ÝÏŒŸ÷þþ9Fn¿çÆOûÿÿ¢ÀIEG›¯ùñ“þÿÁÿÇ(Í×üøÉÿàÿã”X (¨óuÿ>2ßø?øåºÿŸ?ïüür‹%n¿çÆOûÿÿ£7_óã'ýÿƒÿŽQ`$¢£Í×üøÉÿàÿã”fëþ|dÿ¿ðñÊ,”TyºÿŸ?ïüürŒÝÏŒŸ÷þþ9E€’Š7_óã'ýÿƒÿŽQ›¯ùñ“þÿÁÿÇ(°QQæëþ|dÿ¿ðñÊ3uÿ>2ßø?øåJ*<ÝÏŒŸ÷þþ9Fn¿çÆOûÿÿ¢ÀIEG›¯ùñ“þÿÁÿÇ(Í×üøÉÿàÿã”X (¨óuÿ>2ßø?øåºÿŸ?ïüür‹%n¿çÆOûÿÿ£7_óã'ýÿƒÿŽQ`$¢£Í×üøÉÿàÿã”fëþ|dÿ¿ðñÊ,”TyºÿŸ?ïüürŒÝÏŒŸ÷þþ9E€’Š7_óã'ýÿƒÿŽQ›¯ùñ“þÿÁÿÇ(°QQæëþ|dÿ¿ðñÊ3uÿ>2ßø?øåJ*<ÝÏŒŸ÷þþ9Fn¿çÆOûÿÿ¢Àp?ä§×VþTR|RÝý›§oŒ£y­•,­Ž=T‘úÑV¶=çýjÿ×4ÿÐECS\ÿ­_úæŸú¨jQE (¢€ (¢€ (¢€ (¢€ (©-Ñ^æ$a•glÐtTÞtóíæßüUtóíæßüUCEMçGÿ>Ñ~mÿÅQçGÿ>Ñ~mÿÅP4TÞtóíæßüUtóíæßüUCEMçGÿ>Ñ~mÿÅQçGÿ>Ñ~mÿÅP4TÞtóíæßüUgiív57š›ÊÔ$‚5€TXã uç–cϯ§XEº*o:?ùö‹óoþ*:?ùö‹óoþ*ÑSyÑÿÏ´_›ñTyÑÿÏ´_›ñT 7üûEù·ÿGüûEù·ÿ@ÑSyÑÿÏ´_›ñTyÑÿÏ´_›ñT C^Ô¤´·³ûævß,¶ÑÈí€2ÅA'ÞgÅOùißõÕ¿•|Tÿvÿ][ùQV¶=çýjÿ×4ÿÐECS\ÿ­_úæŸú¨jQE (¢€ (¢€ (¢€ (¢€ šÓþ? ÿ®‹üêšÓþ? ÿ®‹üè*¯ö‡üþÛßÕÿ?´ì?çöÛþþ¯øÐ³É$h q°\N3ßåþ@ÿZ‚ê@4k™b»¿”ì&ˆmP@þIíÔœçÒý§aÿ?¶ß÷õÆ›-þŸ,RFomG˜c½ <ÎzðçÒu’ÞââÙlÛ£TŽ9uó e¤*s„=¹ÎN)m^{†ËºB‘ãî÷³~òDã …ÿTOVê:õ¨VçGHZ!wnÑ¸ÄÆÜFO•T\ž;Óþߥæ#æé¿¹ˆm‹ Îx<ñO@N“}Œ @Œ¥¼ E›XùÉéƒÛ‡8< UWûKNH»³PF¸tùTcé÷GåGö‡üþÛßÕÿL U“áÿõZ¿ý…æÿÑpÕÏí;ùý¶ÿ¿«þ5›¡^[Eoª<—¢¾­1BÎaåÃÓÖ˜”U_í;ùý¶ÿ¿«þ4iØÏí·ýý_ñ¤3Î,üE¢xsA7—7r,RF–vÝw²žWFs÷ŠÊ=Uhs“]$ Öí­o$Õ,áG´ò¥1íD–trë±#I¥ÃîQ´“‡'` ÷ƒàÒ, º°œø‘äûèñÙàŠVUH;Hâ´í!ðí„iœz]²$†dXV4 åv–tm¤ŒõÁÅ1úUÖ§y♯ìÞÐéÖÓ¼P«Io{¦'Ü@ ¶Ó¼(8^µ¯jwLðÍå³´ŠUté‘‹ÎAäÄcV|€Ùo‘ÆpœµYØBxgÙ¾t #Å'ɺ6åʞʼn9Ç\óS‹Í-gyÅ͘™ÕQ¤.æPIžàl}O­ -Bí,Èñ<,ÊÆäBGC‚FG±#ÞŸU´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ€3|Oþ£Lÿ°·þ†*ÃÿÈãgÿ`«ÏýiT|CymqšÜC# JØŽ ÆñéRjz•–—â«)ï®c·ˆé—hFÆ[δ8§ŸÀÓzŠÃÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý•˜|K í߈´«K@ò+Z]Jñ Jk%%^´@–#q˜Õ[=CYmz]ÒK;Vyw¹ó¯1åÁgò†ižgnxÎ2FKcQ×téàžµŒÑ+ ’Þ8™Š±RFd°2£¦3Žs‡Ùk޳īÁswóo»–4Y_vÜä¢(èˆ8sÒ˜Px»Q¸Ó§Õ!·KK"É=ÅÓÇ%ÚÚ¡´·ub ‘¾drWæft Ëû)aŽI-¥²¾Ö5 xãXYd‰„·n/¸†»#Wïxæ_í?oñ¤î·`ð·Ù×10  ¯ËÁqÙWÐU¥ñ/…ËÛyd<¹dÂ}×mÛ˜qÃí“Ôî>¦€:*+þÐV×ü(ÿ„ÇÃßôƒõÿ V`büWÿ‘ óê?‘®òõWõÌèK^cñ#ÄN§à«Ë{+ø¦—ïlSÎ5ék,pÛ\É+ª Œe˜à{Ó”U_í;ùý¶ÿ¿«þ4iØÏí·ýý_ñ¤32ò3©øŠM6êk˜mc´Iá[{‡¦rî®w! Á€p<ߘ¦)_k—šf©­Œs¦ÛÏoct9$dQ™Z]Ä…–6ÿVùÎ I]kÿì-RƒPþÍ»…[xŽãdŠg<àŸÎ¡{? <öÓ½¾ÓZª¥¼…"- ©Ê„?Â鎔¶ñN±›¥MwöfÕí"žÛ³Ë0.Þ`à }Â?‹+6­¯øƒM»{Xm­¯ZÎÑnîæHÒÙY¤s$ãÊDrÿ¼êN0wOö@ìÓ @ÖëÙµb ”…\ŽœJ„YøaRÑßH fÅí”$X‰ÜJtäÇz<-ÿ ‰ÿì#}ÿ¥RÖÕRŠóK Csg–g*’(˜–cÇrI'Ô“OþÓ°ÿŸÛoûú¿ã@§ÿ «Ïúàÿú ªþÿ‘gJÿ¯8ôI¨jO¦Ý"^[³4.©$àûÒø{þE+þ¼áÿÐä~*È;Nÿ®­ü¨£â§üƒ´ïúêßÊŠµ°™è×?ëWþ¹§þ‚*ɹñ—‡|ì ZÜíURA$d(œsÒ¡ÿ„ÇÃßôƒõÿ ‹1›”Vü&>ÿ ¬¯øQÿ ‡¿è+ëþY¹EaÿÂcáïú Áúÿ…ð˜ø{þ‚°~¿áE˜”Vü&>ÿ ¬¯øQÿ ‡¿è+ëþY¹EaÿÂcáïú Áúÿ…ð˜ø{þ‚°~¿áE˜”Vü&>ÿ ¬¯øQÿ ‡¿è+ëþY¹M’4š'ŠTWÔ«# †¨#¸¬_øL|=ÿAX?_ð£þÐV×ü(³×ü#Ú'ýôÿüOð£þíþ€úþ'øU_øL|=ÿAX?_ð£þÐV×ü(Ô _ðhŸôÓÿð?ÂøG´Oúéÿø ŸáUá1ð÷ý`ýÂøL|=ÿAX?_ð£P-Â=¢ÐOÿÀdÿ ?áÑ?è§ÿà2…Uÿ„ÇÃßôƒõÿ ?á1ð÷ý`ýÂ@µÿö‰ÿ@}?ÿ“ü(ÿ„{Dÿ >Ÿÿ€ÉþWþÐV×ü(ÿ„ÇÃßôƒõÿ 5×ü#Ú'ýôÿüOð£þíþ€úþ'øU_øL|=ÿAX?_ð£þÐV×ü(Ô _ðhŸôÓÿð?ÂøG´Oúéÿø ŸáUá1ð÷ý`ýÂøL|=ÿAX?_ð£P-Â=¢ÐOÿÀdÿ ?áÑ?è§ÿà2…Uÿ„ÇÃßôƒõÿ ?á1ð÷ý`ýÂ@µÿö‰ÿ@}?ÿ“ü(ÿ„{Dÿ >Ÿÿ€ÉþWþÐV×ü(ÿ„ÇÃßôƒõÿ 5×ü#Ú'ýôÿüOð£þíþ€úþ'øU_øL|=ÿAX?_ð£þÐV×ü(Ô ‘èZ<2¤±iV)"0eu·@TŽ„piú†¦jÞ_ö–gyågËûL &Ìã8Ü3ùUøL|=ÿAX?_ð£þÐV×ü(³ßð‡øcþ…Í#ÿbÿâhÿ„?Ãô.iøÿMÿ„ÇÃßôƒõÿ ?á1ð÷ý`ýÂ@wü!þÿ¡sHÿÀ¿øš?áðÇý šGþÅÿÄÓá1ð÷ý`ýÂøL|=ÿAX?_ð£Pÿ†?è\Ò?ð/þ&øCü1ÿBæ‘ÿ€1ñ4ßøL|=ÿAX?_ð£þÐV×ü(ÔÂáú4ü‹ÿ‰£þÿ й¤à _üM7þÐV×ü(ÿ„ÇÃßôƒõÿ 5ßð‡øcþ…Í#ÿbÿâkNêÎÖú!Ý´7†ÜXÀ}p{òk+þÐV×ü(ÿ„ÇÃßôƒõÿ ,Àµÿö‰ÿ@}?ÿ“ü(ÿ„{Dÿ >Ÿÿ€ÉþWþÐV×ü(ÿ„ÇÃßôƒõÿ 5×ü#Ú'ýôÿüOð£þíþ€úþ'øU_øL|=ÿAX?_ð£þÐV×ü(Ô _ðhŸôÓÿð?ÂøG´Oúéÿø ŸáUá1ð÷ý`ýÂøL|=ÿAX?_ð£P-Â=¢ÐOÿÀdÿ ?áÑ?è§ÿà2…Uÿ„ÇÃßôƒõÿ ?á1ð÷ý`ýÂ@µÿö‰ÿ@}?ÿ“ü+B8Ò’(‘R4PªŠ0€±á1ð÷ý`ýÂøL|=ÿAX?_ð¢Ìoâ§üƒ´ïúêßÊŠ¡ñZÓuk %°¼ŽvŽV,òU­„ÏÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/move-or-rename-resource.png000066400000000000000000000426701203611042400336420ustar00rootroot00000000000000‰PNG  IHDR¶V»Ç58 pHYsÄÄ•+tIMEÕ '_[þ”tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝy¼U6ð_uU/wÉJBBB’›BE%ˆÀ ‚ 2Â0.D T†^‘ñeygdpPÆÁâˆ3ƒ‹"àHXtØ KȾïwéÛݵ×ûÇé[©[U§nuwuWußçû¹ŸNuõ©S§zyrjéÓ‚eYäpùå7ÀHuç79ï vD²pœ5sƨQ£:hB MˆÏ¾}{óùþõ6‘#(Ëyùå7|øØcNYpüQGM'"Qcl(@ã†AD«Wo~~å+o¼ùKIÁ²,–ÝgÌ;ü°)ÅBIUµBÉ(Kq7 AÚÛÛ:ÚÄL&ÝÞÑöÁÚ©–ãIDATí+þø2KI‰ˆfΜÆòq玽{÷ɪªö÷ân0@CÝ‘Éd&”;ü°)Dóúó½D$,[v}÷é§âÔc÷îÍïÞÝS(”JZÜMˆA[[º£³ãàƒÇM˜0ê¹gß\ñôÓMž2~ïÞþ-›w÷ô óÍmã®­³¼§Ò¥Ö_°¤kÒ¡ù¼šÏ«Š¬Y“§Œ'"‰=\(J%-—ËDÜX€Ú¶oû¬ïùܲO[]“ôiÑ"³|ÕŽ@äžH ÔGÒ–}ÂÆ]÷-¿gÏ—–M=h •JZ¡Pî/JD”ÉfúzdœÅ€f7ñ—ËÏ=o~±O¦76Šfñ½áé˜ IDATDtîyóùårñš¿c3ûzµÑãrd÷"]I¥…ú´ qŒ¢l©V:—KoëÕFç¬lZO‘%iÃrMdŠjº_6uK“eAWˆÈŽAEWˆ)Š–wMc„ôx#m©F^¡×Öìß§šjd۬ѥI“ÛÚ;ÒÚd€°Å´tÝ2Š¢a,¾é‡DôŸ×}Ã]7MA°'¾póˆè+.7dEÕLÁ0É/ %Þj&™™ÉãÇR&½iWáíý»KU EU÷ökk7+ã'HG~è É“;ë¹¥3TR–¦ ZIrÓ6":kÆÔ{/Y¢Љ.¾ûöОï~‡Lô,2 £$M%IDATßÚ$""¢TJ ̜ؑbÏfÓY%—Ózµ\GZQ5UUeE•µTRÖ®é(vú¬1cr$`‘ŵè±ÇüÄ‚…£Ge+èïï]¹ò©³Ï¾ ÞÏ øì@ýáøTL,‹A ²,K "A°Ê/†¡™”!ÒÉË©øä¦mg͘z×_^Èî.ýïûY>‘ª+¢A†H¤™D”Sd d& F‰ˆR‚J ¢$ Dìlϸ>Ë4õ=ûåÉe­TTUUµ$«%Y.•”¢¬¬^Ýwð¤öSÌ&bi D ÷Þ»ü°³&?O1 "Z·áƒ{î]þ¹Å_КérËW#À+åIDAT^yéÕW^¾lÙUq7¤ø¬Æÿ7ÅE°ÈìãÙ'«I×4Á’HÈHmûÆUSt;Ù)yþâ¥=`çã¶o\ED†`Šeé:I¢HY‚E–•*÷"S”Ëe-"ap5iÒ¤öL‰HJ§:G¥›3AÓ4EeªªjŠª‰¢˜–Db©KÖ`‹éϯ¼x 'šBŠˆ^íOD”(-¥úìÕæÿð="úÖ_»Äé~'>©±ÀÿLq|à D–ݽ#"2 R–•"2ˆhë•Wú“ŸÐ`JÚù¸õÊ+ÔešdD4ØS¤´$ )"¢¥R)I%)%J’(I¢”JQê7û²½v®IDATè¹­òÊuý¯ì,mÒÅ}Ù¶žöŽQ£JcÆêD“–¦Ò—'I¢(I¢$Š’$I©žž}Dô»ÇÛßß+Jâ@¡ÿ‰'!¢Ý{v‰’(Jâ «ž]´¨{Ñ¢îV=ËæÜ÷«»-ê(ô³ò‹uß÷«»}KºþìGï\~;¯òE‹ºW¿óÆËo_´¨ûÑß=¸¿g{pÑ¢î;—ßÎÖÈ[Š=og{*¯LÙ¹k;ÛØàµÛµñ¦k±·îÎå·ïÚµC’$I’V­zö¼EÝç-ê^µêY  ‰’”–ÄÁIv+Š’HDši‘¥dØ›®ü:ûDÛù¸éʯ; ¥i¦EÕ6!àIDATDƒI˜%)•JëEЉC»xi'îÜñ‡J^ÖdE)ÊJ©¤–d¹XRв\,)%Y.Éj&“Z¼àË.Ä$AE":çÓñþûïpÒ‚µkל}ö¢Ç{˜ˆÒ¢ôÒŸ^¸õ–›þõ_îÎJÒÒ¯~qT[ÇÇN<ù þúW÷¬¯\žˆN›Úª•OßzËM?þ§;Gwt,ýê%AXpÚ'}ÿ'™5uÆ‘‡ÍÍPjÅó+|ùÛë¾ñÓ;î¾ä —^ô…sþïwüê¾ßyúY}á\‘„¿¾òß&ýþñ>ó铉èÉGž%“V¬z&’ÆÜý‹{é¥çsÿ÷?ð_{wîÒ¥’€IDATœ0~¢ïÚíÚ2&iÉ;m¯åÕ·_ûÛë¾qÓ·\ýõo?ñÄ#}ûötMŸñôs¼õ–›~|Û¿nï,¯úô3|[ Ñ@ï=‚@4x „¬rÙ/…©[‚0ä…qöÏš1uù9ç:5õra±¼[L‚%ˆö±HA2iÉ"A`C£ dÖK“éœdv˜–iš†a†a˜¦¡ö]Ó4MÓLgÓ‚Åv±I¬]»·Ñ ›ÿ§W_:iÁ©¯üïKóO<å±ÇÞ¾cÛ”ÓÿðäïˆhÖô™b[–ˆâ·'¼`îܹ'Í_ðø=iÁ©xòw'Í_0kæì{õ ":òð¹b[†‰˜éIDATˆžyævŸ)H>·Ïš9[lË D+Ÿ{Ê»+3{ZyD4®c”Ôž%¢ßýþá«®ü¶o“ñÀRGηæ*3qâÁD4Ðßé²+LU¤Ô°kÏf$ï´½–U/»‚ˆŽ<ìÈ«^èßZˆ†…ŒŒÃžY9!¡üRèšFétÚ0È"v¸ï«?jç# îqÿÛ§?KD)Ë$t‹tM#¢LF,Ÿù!b)ÛÑN Îy##,èíyeýþ?më-Êj©$KrQVŠ%¥T’eE‘MVÔ¯]~ZFê²Wl¥%‘ˆŽ˜3÷ú¿»öÜsÎôчèß"IDAT.ùâ¥ìQ1%¬Zõ›Îd%"zñåÈ0Ò¹ô_^ôù«¯þÚÓ+ž\µê¹[p»˜W½¸’ˆÎ:÷TVþÅ—_ ÓL§ý¿Éjc•»q•aÒƒYcj¯I §Eßš«hÌW¾ò5²¬‹/ýËk®ùÞ)§œ:®c\˜µûN³ò>úPùn.MDVš³jÃ’rÜ«» Fº‘qp<é‚0´ ID¦aê‚HDd™_ò1;×-[6{ùrLÉŸžu¶ID™F9+2RÚî¦Rƒ)¦H”$aðd‹`‘>µÓP­;Öííß×Ãö¯•òþµ¢ÊŠª*úüy³v•ÎHåÖ–%´aÃ:"óŒNµIDAT;fÜy‹.\öµ%‹-îlë$¢uÖžü‰ œ¶rå3D”IKD4ÞɆfdÒÒ1GKDßÿÁDtXל\GŽ•|ò‘gímf%}Ÿ,6ßwWï4¯IÎÂQ5fÒÁ¯ûîõŸ:ó3WüÍe«V=÷Ã[n³ö€i×âìuð[µÞ™A/²^,œ°‰ƒ`YÄv{/9d¯…i ¦iZ–%•O=aç㚥—²Û9wýœSò' ?eY–a”¯ÊdD‹vA™: ö"…tÆÙ'²2“ÒVÉGtr*•’„ÿ}k±$—d¥$«²¢*Š~ÒI³–^ü‰®íƒ¬ÙâàNâi§Ÿ°Î›ÍIDATþ›‡ïÿè1këÌ•7‰hñâ¿\¹ò™õÖµ÷äˆèÓg~6Û–ÉdÓ™ìØ›o¾õºë®ùî57´···uä¾øÅ%+W>óú›¯Nž6é®»~vþù.Xp*ïÉÊdÓD¼+ãæ5éÔSOöÙ§Yá¨óÿñË3ºØ²¦n(E™·öÅ‹/zà_÷öõ€M°×òÉÏœù›ß<8a„ N­¨µMKpv…òÿUɺ) d‘xÃK+ì||÷’¯ØW¼{ÉW޼û߉èÉMÛÏ™yÓ‰§Fùhd&“¶ëÓTƒìë"³YÉq‘E$dçL,Ž+P›´pt“ïùíŸ%Ì©XIDAT7–ä´HGsè‚GœùÉ£¦L7xÈ”¨|ù8ÝvÛ-¬ýèG‰èˆ9s;FµÑòŸßqéÒ¯œqÆ'oþþ-_»j)ÝþãŸÎuÔ¨±Ùl†ˆN8á"úÐÜ£ÆO—ËeO9eÁÿúó»ï¾ëÅ—_¸pñE]‡Î² 3מó}ªX ¾‹¸Êx§yMºêªo>ûìÓg{êêÕDÕ˜SNYpþùŸ%¢¯~õŠÓOþd*•â­ýóŸÿâÎ;/ºxÑ7þ}À&°µ<úÈ#ßùÞ7.ºès§Ì¿ÌÒÍSN>ŽjÝ̵g}[ @'2C¯ó˜¤[d™ÖMóʃÕ_âZzõÅÙ½xIDAT—uïÝDtÓ¼SuÓ2—ÍfÒƒW0 †¦R÷ÿ\³tôرl5å+ÕË/»åiÂàwhlö5Iå´îÝMD4ûȆal\³µkΡ¢(Ú3‰h ¿°kÛ^":dÚÁím¶JÓ7­Ý6ã°©Òàe© ÷õä ùâèq£ÆOã‹ÈY-ogÞ´o“TEݲ~‡]&’ÆØuŽ›0fÌøQ¬ÞÚ÷ïé+ä‹9hÏŽ}¾Í¶×2/ö÷äËk‘Äòª÷;VÓ5õƒÓ5±±ÿw²ìé?ž»øˆ®)¦¦¥R)A”RÃýfZdºiš©túýÛÏxä~;ôú{ûn¹õ.aÙ²ë¯ýÎá¯EIDAT¥M8ˆh°;X^£` þú×àZX:MÊW‹[‚ X;p-X8:# "2v¿Œí²Øë±³zÈ$"jK™©t¨¡vLM+™)"Úºc×gžx˜;~û÷ìûÁ?þ\"¢”HéLzè9t»¯ÈÎ±î¥ 8ãÚþjä÷HùØ$4>©±ÀÛ=öW­™Tޟݹ[|pF#t3¨Š¶•/­+ç\J$²E¦Ó"[ãàYm²ƒ’¬ÁsÝ‚½ã- žN"¬!}ÌrŽâÓ Öxày½ÛÊî ¬ÇfQñŠkÚï¸uçîq•V¨=Å+®‘Ò ?K ßÑ=v¼„+ÙþIDAT!Ç ù-:ó¸‡éšö;nµçƒ×ðP`ç­xÅ5‹Î<Ι„£ÇþvM6“Þ¶ukÝÚ Ð8Ÿ:õCtê/ªXPVg4á`²‡Ô}oÍîHÐNvFäÚÖlذ'Öö$ÅÌ™O>éhb)¥¥±ã&ô¼úîwÞwà éZõtì@ÉÐtK7¬ÿ{íß÷Ñ#ÙÚÝF4;UÝÊHîë‘0 ” "*)ŽñÀ$AÕ­öìÁs‘0‚(šIDšn±ž#I¢PTÌölª¨˜IÐ!Çšé÷dª¦h&ë9eÓÎG"²ó±=›Rukð×kÊЋ€gÁûIDAT÷‰¨(›Däì*²ž£óÖ¹,z‘вÍtæ#»Õ wW‘uí[çCˆHhM,ih>2vW‘e¢½£ÍG:+AD@«(ŠfÚÉÈþÈ“ŒlŽkGÛU"ZÛ³NK‚¦[m¢ŽŒ½­å‹{œû×Þ½lBD@ËpvLK»&ÜYÀy*†M³ž£ë¤¶s‘ 3Ú‚p`ðÜà™Ð,ØË‡×ZŒ}Ø‘ˆØ®þ#c÷"%Q8©í\½HhnÎ|d|ó‘½Hו=ûÚÃ\ɆØïÕ²QÉË‹—9§i°{âêª8ïú–w ®Ó·äûh˜zˆÓG¨Ä»`˜òÀ°ßIDAT­¼–M¨¢IöÌŠ^‘ð ãmcEo’aWWéÓ­Í›4ô䵓·éüjMôg´í71CžwmåƒË„©?d=ÞùöLߥó? gOB@åÕmBM²CÄ;?’†¹æWôü„_]-ÕB+±¯ytÒt«(›iωi¦8ølgw²Ö3ÚöûÏîKÆÈù‘¨ôQWÉ3£²òð›Ð`áÉÑê€Õ%ðÉÆóí<’ß%NöÎîdðíº|Ñrìž{÷‹ù¿}E몥aÃ.[uå xºª[…w)o¯ö¶UÚ xùÈú¼|trõ"]ûÚÎ’¡"’½õ£zÇ7²~]¾‡Æ¢ZVTAIDATQ-•7àéªn]<;(ëÝxô(“,¿çÍçúÞöõ/wŒ=xÌø™a‘K¦VÚ~Úçî˜Ü5ŸW¦ºþ#ÃB*9£]¯a,ìŽ$¾¹óÞ°uÕoE Ø„êVaï1°e­¡çôÂ,^{ “p lûw¼ýè¿7ïSמ}ù#¼2¦1;McÀ9³gÇÛOßÿÍκnú‡Îq•gá˜M§|A²‰à^¤½£í=£ÍëE†=]Üe“†Þò¾ïéJë¬e]ÁëpEÕU^é&¬Î^ÐùPÕ«à-eÿ¿è¬œ×˜ðǸ]5øVþÉÆxñ‘ëŽö'X »ÃæÖdIDATuþŸ|øÙ_¼ãùß~×L@>jº5ì^¶ó ˆöDõßÑ>+âœö=¸<3àØ¿o™às¾†©'`[ì¢ï²!Ÿ^cx­­tªh’omß0×üð…kvuÃV ±Û·õ¥üþ­'œõ"r"ûvñܸéÇÍÿ«§}•=Ç>y­hf6=$µ\ùÈ;—Í8¿€hOà;ÚÐP/=vóÇ>u­i ˜ê6Ë”«ø;â¤Kúz¶m~çw®šy½H;‡=É&\ƒ¡1ªn±?çL © (íyí­Wÿ@D‚’Ïïß:û˜…Faµ¡+‚¥YÊ>Cí(©y"Ê{ûK"ª¬éŠÁöŒIDAT¢º’'¢bi€ˆŠ%"’äíZÚTûŸþõUGž´:ÌÚ;'5ýÈOS…Ç"í4 X xü¿¿;fÜÔÃ?rž$o9üøŵ¦© –¦i¥ÆZi½F Ö@‘&d;ÉTKéLNTå‘¡¶kºÒÑ1VÑÑcIWòD;´<Ñ4"2J[¬ý…_ßvÈ÷¶…¹âÇîH†¹6ˆ‘•lnÊ´9óµ1Ddš*‘˜I‹d™–ˆÈ2Gu»K†JbÆ"4Ë´ˆè…ßßk‹ôÍ>×yjUQ2Ùl˜”DD@,m0L Õõ@DÆàD¹ ‰™ra{‚Sw¥BšˆtU¶ð˜;xIDATçxSÏެLÈ|$D$DB./cGaUùHD‚¥©²BDrÁçºHo8’£ÿò{88£ ‘P$I"¥—ˆHë+ÏsM˜ÊÛ€ba&«ÊRV)ô+Š^~ýÌ¡búæ#e²Y"IG/g O,* ‘Ö'c,ê#"ï²}ë|”ôVÛd¶¸ï‚þU‰9SØGDrQ×tË‹ÉgL Çå“i £)†’/w-±ÏwbÏÎuìªb½¦, ÈÅ\»´sÓŸŠe;ÉvN±O阺2ý‘tV$"ÃØk™ºo·^}vû–µc­¨ÚbAnïȱ ç|U-DZü qIDAT¬D4çä³^ýŸ[\ËŠú€©ïdÓ¦wÔgþV¢ ¥)±k}L•R÷-Ñæ7Vžuå㣧×c6 N^Ô¶ …!çp4M&"’wÔcZ2™JZÈ úüíA‡ýEyYô" ñX/’ˆìLtÞ¾õú‹Ó>Ò1zª¥ïÓw½nudŒží¬¸!ïI[{5kTZÈ‘®¥,©#-äÙ©½”˲ËXƒe4Å`²‡œ·¦bPf,}°æÍÜè©“ç|¶ÜNô" ñX/’ˆHÞM™±–^¤6pZ¾wÍ[Ïun¹%ï*¬û´×zG‘ڛΊšb¤³¢®¥Òé…ÛIDAT¼¦B*m™«MH¥ÒB^sVž±'F‘ÚKƒ¡¬)F:›×ƒ¨WËŒ%µW#RiIÈ ú–Ý{gÎûÖvVØ‹ÄE?CµRYK/‘¥—¬T–ÔÞ][Þè;er×üÒÆGIíÕƒÔ^!•f™ÈRO×Rv>²`µL(+lÏglAûQm°Ïh—a‹oÜøŸq¦Ý@Ö‹LIé„^$DI0Ýýñç—ýÌ÷ô]ÏýþÝÃÚÚŽ)•Jmmm¥R‰=ú©®§,S{b㢬µçÒŸ=â–¡ìÑ?nþô¾ž~"š8éàãxvË){vïM¥3…’|ñqbñÊ‚õ—+gf°4IDATѬ9³Œ{€-«êÖú­Û§õyv-dy¦¢d²Yô" ¡Ø±H¡´Ó5ëÚ7ÌöÎÙÇ,ü¯Š®ùü€®ûzú‹²V”µƒ&ŒgÅŠ²FDùÂza©sñÍÛwçûòù¾< ¾R©T(*ù¾|a@þåËÇÙÅVö,.©F߀l:¾ŒÈº‡õ%g…ì«5èE@C•êE×üW_YyÌißzæÅmD¤ê&?÷9ßò}y"ZýÞúi]å9k¥K ¯:Ëe­o ‚ªª=ôÞ'Xm¦*÷÷‘b–»}²\ôv! Ç" åë"‰HÞKìÖ?xýS¦‡}¬¿·—u‰È4,‹¦¹IDATUï߬®É}r߀¼fÝv6‡ˆÞ{o£ªjýý‡2žÍ,”dYVØ__ßÀÚu[Y…¥RIQ4EÑŠŠnšª,wïÙIž.$U~, `½HÁT(7¡œ’ÚÀ»ï¿=ó¤/[û^‘ÒY–€[·íyxÍÞÅÍü‡}ë3ˈÈ4Õ×Þ\××7 (Úgfý3UMQ´¾|1—Ëʪ֗/þóSGÑ€‘î/(ýÅ”TU'¢wÖmèi®.$©Š2Ø‹  `½ÈT*[ÎG¢=;wôööÌ™{‚^ø`Áćì\ýΆï?<û_žþðšTù°# µ\.ËâïÍ·×Ñ;Ö—e+7âIDATUcöZúäþ‚¢j懞/)ù’²vóÎ?îZœÒŠŠ®)º6@Y"Ú¼u“*ç»>¾ÌÛÎJE"" Š\$"¥ÐoÏùÓ‹/Îúð9Rqµeê†ZøÒ_}ŠˆúòE–z»öôÜû«?>¼æ C-¤%²L}Îì){úˆhõ;,S_óÁ‚Ó¦l¨"b·ý¥þR{GÛÇ?r¸"늬ÿÏ_*”ä¾~¹¯_J}ri`ýÖí“ûl¶sŠ·Žc‘¡ " )!KDis2òÖMë7nÚtüÉ_Ôzß3u…ˆÆïùþ7¾ò¹ Nš8Že_¾¤<óâ[;ÇþSWL]9òän×IDATÃÇ(²¾·§°uWïöΫ^y} KÀY‡u‘¡ Êî+²ªËª.kÖ '@Dù¢¼mwOÏþ¼¦ëš®tq÷¾}¼.$áX$ÄÂúë¯ÿûÒŸÿø9RÑýã\Ghÿòµ“W}ýËg+²Þ×/+²þÆÛ°‡¦ìºatg›¬êù¢üÌ‹olض/_”óEùôq¿dDRôb¿¦ë½ù"Íêù»ã>vt¡¤JêK¯¯e$ì.¤©kÎ?UQØŸe¨ì–ýo""͵“©YZ?õìÙ¼mÇŽÃ>Më}Ï·ðlù'Æuhºž/ÊìJ òü¹³Yü=ÿÒ»,ò?|¦sAU3 åY²ÑIDAT%5_K²JD—óû޶L¾ ïÜÛŸ/Èù‚¬ªš*ç=v‰ª(ºa:ÿªÛ.D$D@‘‹”J‘¥õÿùÏïLšyÒ¡£—|ºçKߺoÖ¯Þ=k5]¾.wåÏÿ|êÛkw°Lå:íbG6•ˆvîíÿ`ón"ÊäcŽšå\Ë~ÝÌíSgŸV~(_""YVFM8VÌL0U%ø-% ÷kb¸t"ÀŽEQooï[o®ÿäEçhýtµOÊŒ!¢×_}{Ó¶ýo¯yvTÇË,ãFuäòyÚäñgOþOVÌÐåÛ~F4–ÕÊýÅÔûØ£ìV’…Š)‘¡ËŸëúï;Ænq?ÆÿIDATÚÙCDûó¥‚!M=úb2øgcÄ4¥2Y ‘„^$DE7vѪßî7eö!Žùjßû»ûYäÙ}À|A>zΔÿwýåv1ËTˆècš¾?_bGÏ9pJÚ0 "’Õò ’†¦‘®÷÷ö/ÿÊfg3ÚÆ~HÕ4ןa˜ªVÎÍðùHèE@$ÒY1UÌï߯¿ñÚÚs–|SÐ{•ÒþlÛxv{Ç…oí™pý»v­ßº‡ˆ&O7·k|×À­Ö–«u"!•µ _û™7¯9S¡rb¾¦;Q—?ñ…çõï%¢©Ó§)}û %]1„©ßü믰2cÇL$"½T’ÚÚØ-›¯¥s9SM^¯IDATµu‘$¦RR?ïþ]³råí£&9{\iï&QuµÝфݻ ƒ1¸@?Ùe™Š«°Kù!­x²pC!'udõÂN½×°ˆÈÔÙ ¥^¿u»™2çˆïë¥ ¦$[<“N“`¥Ú:1#’ž’ÒøŽ64T:+ÊEåÕ›O<ñ°ÒÞ×Ù~±÷6€«°KQPU½PÒÉ”÷öªD¤ë–®[ªAšªæó…Bï®q‡,Ô5MÜ¡ÖK%1%frí©¶ÎL[[&›MKë?b¤h(M1Ö®YGD3gŒå壒¦i¤ÓMSS)Ñ9í,fšåºnilÔ]"Í(w=KŠB"£`IDATÉ‘Ýݶkk:×>nê"’ÒiÖ̤ө¶N¶[} øíh$Ó( X鬸×Ö1ãrÿûŠÏµiÉg‡52³­mB©´×[Ìw¾¦˜J¦ %¥hjJ*ôîž=ïFÌG1%Š™l¦­ÍÛ[Äo×@ãôîïSJê@I?ü„ó{ööÑš DD¢$Øe$G>Úó¥´à¬G’RD²®·gÛDçü\›(ïWˆFå†Î%‘t"ê  Ñøé³&vuÛá˜Êd½cü0èE@ƒÈ%YSÙ¶ 5oñœãUZƒ2xýb6MŠæs[ïnµz‘Ð ¹¶\®-7l1E3³é”óv dtøÀIDAT¶‰ö-‹-×Ršn•ì÷ù^££šTu+# ö-›éœvV‹QÇ 6Šfºn–qšn)š™–v;P2ì‡\œ±è-`‡£$ D”‘†ì¶³»Þ|$Œô1bD"b·N,;‡RLKBZØ„«|@ç‘“‘… ª[’(¨ºÕžM¹:’^/bÃv¥i°ÿèܳf¡éìW’£{èŠBdî.# ºaÙ·EÅ´w·ÉÓµdЋ€Ø¸z‘,YçÑMgy;]è¼ë›•Eå@Ô².$ëW’ã¤o_½Hˆ«É’ÑîEÚ‡#ÓlAo/’÷µÛ×TÚ]H¶£Ífúv!JáQkIDAT ½Hˆ‘«iŸÅfYÉnís5ÄïEÚ3yÇ"íÓ56¶»mßåŽD/bãêEÚì™vÿ‘»ŠáÈØ»Õ6–‰Îc‘¾Ð‹€Ø8{‘ö4 v*ÙLWÏ‘wQdpÓy,’±/ô±Eú%z‘»ɦÙeŒoçäuðE‘4ôX¤ÍuÅ®‹€dqöÙ—gh0+í“Ú¶0½HÞ¥?ÎKÇíë"íncÀE?•ö"‡|ç®»î ¹ÀH0$"—.]W;âå—o°§‡Dä¦[Þ€ä±H.D$"€  À…ˆàBDp!"¸‘\ˆ\ƒÿIDATH.D$"€«u"²kæ´DÕ²ª®™ÓŠEؘ¦ð,yçãIƒU‘ìmjÿñÊDÔ°zñma\Íîš9mã†-7l©½ßéz,UW¼W'’g   ÒðEð6M¾ê^#¼²¾*‹HçÿùögŒÍdwíöݶ°[ßz*-æZµo1Þ‚¾KñjX—³ŒÝloãƒÛÆÛ„*6Ên€½lÀV¸–âUËÛöaWáz6ÂT^Å«ãmO˜Æ8‹áà©,"½ïNW@øÎqN¿ACã-å;í­Ê÷óàœPC˜S@><]¼bUoT˜—&Ìk°ía û¾¦á›Ä[Qð4ïÐcèIDATQ¤!Tª¾;ÚÞÿØCÖ0lÄøV<¿ÕY¡o©ö—#rÁ¯xƒx†|û!4!@M;ÚÊðÍçÝGæU^w|ìŸ"ßî›ï>)·Ÿ¹aWÑà§1öW Z@ƒ.ú‰ê3|€¯N+­wU7 y# öîdøGa„«òX$ñ÷Yì®ó¤AÀ‡9d1WÞRÞù®9Îú6»¢ºNŒ«â á-ÈÛÆêªuYÓB[ÀSÜ€€=€à óºW·-¾„eË®¿ã§7<øàŠO­¼î»—ÅÝh8õ­êæøY÷Â\Ð}Å×ojo×D UBFD$"&— ªIDAT€  À…ˆàªàºÈ§V¬¨_;céÒ%›6n Y¸²KÇß~seåíHŠo¼¾¢òGûª«o¨t€Ä°**c‘\ˆH®š"2Ú!Rœµ…¬yØb­7ˆK[”¨'¶öJ|khºm´Ç®±~{º+ð7ã "÷"«ˆ¹ˆü½þ}ßÚ”uU¿±5ë´ê.üZ¤FÄŽväo—0Ž„÷(¶1iÕBäjuÜ;$Ÿs¼?{Úw Éð¿CbWâûk$¾ ð®ˆ×çœà›ã*ïœïúy™€:½k¨¼¢g&̰8ïiô­°º'ÖÛÞ¼"o³¸¾^€)IDATÛÜ`ï3ãÜ–€gÀ¹Tð6z+¯Z#Òûnp tPrXaJòÞyUæÅ´ïæxËû.ÐÞ‡6à“¦ZÞÆÖ¸xÞ؊V°HÒ¶1Œ0Ÿ&ßw¯žàf'üGBĹ£æmTïWÑU×Ìi]µêè*V·8·Kþ÷¾UU¨ú‰­4\‚ÿª¨ªJEþ橇d¶ª‰Ô÷ç½jäÜS¨Ç·þÈ×R§M¨±Úxbë è™¶Æ6V }ÆÚÅÙ‹ ùšÕûç[¿sÇ9ÚUDøNuíOUºïíŠxÕ¶Ì6B\"îE:%»Ž+{ÛxÇq\‹ø~Êìóú6)x­TïIDATYïaò€O&o¾û¨]ï™ #QO¬³1Þ'Ö5? o%ÉÜFoÁG?Cö‚yõx×[ѳ TÑÏ{=µbÅÛo®¬î;ÚÁo…Huר†äW^ã*õÄÖ©1M·Q5¸ºzêú¦M¬qc­Ñc§ôãüy¯D‹L¾*zs ©ÂhPDÈ}¯Qhp’S'¯òו¨'¶NiºmŒªÁÕÕƒÿzè,"o¼ñúJ‡h^DäÒ¥Kê×€ª "ÃeÐFÄ0ÕADp!"¸‘\ømYð;Úþð;Úð;ÚADp!"¸¢w IDAT‰Hœì€–MD.ìîŽ*%7o^¿yóúHªZ÷ŸÇ¯ûÏã#© F¦Èz‘ »»íéªëÙ¼yý‰óçEÒ$"²L:ý»ï¯½) UŠøX$ËÊêR2Ú|¤ÁsûÝûþHI¨J4£Ž³.¤Ý—d)i÷+ÃØ¼yý ó>fšõîÛà-0}ú¬àÞÿåG}æ%K …×¾þ?7øˆ/½¾=á3¸2±¢”ܼyýñÇÄÐõò²gžç-óÊ+¯¤ä»¿8î¬k_ "Ȳ"K‹,2òDdYÂßyþ7wäÒ×*Ù&颉H; í]ì…ÝÝ!Sróæõþð‡tƒerIDAT]­¥¦A–ÞGDD–E‚PÞ˶,œ$áÌk~ÿÄ-Çu)Rª5"Y&zû®éà Ôµšò‘ˆÕ$­Ç¾[E"‹I¤Êf+€¥Öˆôžœñž« ÎÇéÓg­~gís¦×Ò Ë Këµï9þ,Á"‹ˆ„‡oùÚñW¾QËZ`¤‰øGb+:Ec›>}ÖûkÖÏž9™Ý]õü³“¦á-PÃñW¾ñ›<öÀýÁÞãyßþE$Xô›Û®ýøß¼YEÛ`$‹ "±èÜÅö>`úôYë6¬ïšvMšzİ篽¼ øòŽ%=ODÞöýyß@>@Å¢ÿŽvuI"„ª¡àIDATš>}ÖÆ-ûØu?‘0MË2Jüðï‘Pd c1}ú¬ÍÛz‡/ŽeÑý·ýÓüo½U…0ÒD|,’jÒ¢Š]lž“¾p€š$« (‰8£ LèEp!"¸*ÞÑžÑuh=ÚÐý½[**ýí^zd‘¶u I¢©[†¬iú˜vâ¹ÇÕ¯x"ò™û?qÊŒóˆ™b×b«´Gë{UíÙœÚüú3÷â´ Ÿ‹¥I^ñ‹Ì ˜”È(¹æ÷­ÜÅ[D„à¬-dÍ˶…IPã%ꉭ½ßZlÁ«¦^䃿^Î{è‚‹–,Ø·=, µÆIDATµÃÜ>n~.#?oôî,m¯°©G|«ô˜c¯]˲¼ÓñФ%•nZr6¿~"b¨NÍKøV'\­;Ú¾QŒeÐè£çf&|\Ì—»‡„QbûæTÇús͉_äïÅ0Ž„¶1iÕŽñ‹†ìß[ö‚ôZÚûΖ}מvînøöŦí¥|Ëðà]¯ Î9Þe½ël‰«N{E¾e¼uz×PyEÏL˜'<`qÞÓè[auO¬·1¼'0xEÞf'p}·)Yµ˜"’E¡ED "2˜÷Ýà|á}§Ã¿9”¬è\xØ]iÞÇ’€:¶ÎûY T¬IDATò­󼳿÷me×r¯,˲ÜÛ{Ôç<ó#ÀÈÔÄ×E†Ñàñ" Å4e/’©÷x‘Nìàcðh=ñGdbÇ‹t¤öž³Æ®7@Ë‹?"1^$$VüÙãEâ¢H€VÿéŒô‰Õú½È*`ÌG`ЋàŠ?"1^$$Vü;ÚI/²5àǸªD&v¼È0œéÛ®ºÂ¨J@ÕâÈ–/áÐâÈ$i)Dޱ3œwièhCö4k›wñ0uz+¤¡#wØPÒµ"¨Nü™Øñ"];ÎÞ9lÚÓÞÈv•®Ó[‰wuÎòûîDTiIDATøÞ@âÈf/Òµêt‡½« _jD6Åx‘®UGÈ»Ël«¨'ˆ£ŸõÐÄ×E†Q¿ñ"£íµEpèND¨){‘L½Ç‹toqͱDÚ@çt@›]u†©0¸*WIW=P‹ø#2±ãE’ßÙá€2Îé€39¾§Â‡­pØ»Áõ@uâÈ$ŒU«GP'ñGd’Ç‹¬GŠ!šHü§k0Ò$Vü‰‘~ ±âHô" ±âHô" ±â?]ƒñ" ±âÈÄŽ‰ þˆLìx‘ÈGˆ?";^¤kÌGï÷ ƒ‡hvGD0@òÅ‘‰T!±IDAT/ÒæXÈ;Rd˜± ½e ùâÈæ/Ò·•AJ4‘ø#²¹Æ‹´…ÌÑwà‰a€„hâë"èßx‘•òýH¸¦ìE2õ/rصŒ&éÃ;{ID&v¼H×9™€ ×"ÄB$#@s‰?"“<^d¥ÐIh1ñGd’Ç‹¬’ Åĺ#ý@bÅ‘é+þˆD/+þˆD/+þÓ5Í;^$¾$ÐòâÈÄŽ _µ âÈÄŽ D&¼Èà‘} ^Ö÷ûÚøª"@Å‘I/Ò;F$ñÇ‹ä-fYWÜû.D&çAqIDATy¼HWl…iRˆ¬/þˆl–ñ"ƒ»rµ<Õ"¹&¾.2ŒzŒYiw2ü£Q-QiÊ^$ÓÈñ"½#?Fõ¨o™0‹@Ä‘ /²Þwy£O"’ þˆl¥ñ" ÅÄ‘U_Bªÿé Ø‰DbÀH¬ø#½HH¬ø#½HH¬øO×Ä>ì#O<ÙÈa1 T-¶^dÆ}D>@ÕâßÑn̰4Ü€ŒaÆp€‘&þˆ ¥¶aÉÄUŒá#PœÙ°aki!R`$‹3"cö±Šæv´FªæØÑö‘[~_yØG€=0ñIDAT^™*ö1$ç¸d0ÒÄ‘ö±Šq®b‹ÈÆûXéŽHFˆ'"1ì#4…øw´Cމ€Æ‹ Œô‰Db¤H¬ø#½HH¬ø#½HH¬øO×`¼HH¬Ö/ j­?^$@ÕâßÑ®÷x‘4ô«„®Îð-CD†RÃx‘Þvæ#’Œˆñ"]QˆX€Z¼H ûUkŽíÚNjİP…ø#²ÞãEœ 3j$Œd#h¼È0wœ0^$Wü;Ú!! ñâÆ ±‘\ˆH.D$"€  f_ ÉIDATÀ…ˆàBDp!"¸‘\ˆH.D$"€  À…ˆàBDp!"¸‘\ˆH.D$"€  À…ˆàBDp!"¸‘\ˆH.D$"€  À…ˆàBDp!"¸‘\ˆH.D$"€  À…ˆàBDp!"¸‘\ˆH.D$"€  À…ˆàBDp!"¸‘\ˆH.D$"€  À…ˆàBDp!"¸‘\ˆb &IDATH.D$"€  À…ˆàBDp!"¸‘\ˆH.D$"€  À…ˆàBDp!"¸‘\ˆH.D$"€  À…ˆàBDp!"¸‘\ˆH.D$"€  À…ˆà’**}ã×÷÷n©SS’¦‚ˆ\ºtIýÚ@Dä¦[ë×€±H.D$"€  À…ˆàBDpµHDvÍœw U‘]3§ÙõkP]9[~+ª[ Z@e_@ܸ¡üíî^á~DIDAT™Óìé&U]û›}« "•E¤/»cå Pçï]WÔ:o‡]ÜwÕ•6ƹR{YÞ"Þ¥émg˜U8ïÚëâ5ÆY3" ®jH^Þ®'ü⮇Â4†ü‚Æ[Àœ€VlføU¸ž‡ÏÔIeéÛ£ñíÊUúa(_Ñá¿HÓ€ŽÕ uAbÔ[5Ç"]Zß“ko±UR{c¼ÓÈU´ ä @Œª¹èÇuÏp<.Uw'[#e¼@Ty,Ò>LæŒKßóÞ¼„uÖlO{÷-é»l@cB3 Z{©€V…ü ðJ¶FÐ4aÙ²ëïøé >¸bÅSõ#JÅIDAT+¯ûîeq· f7ÿÃϺ.¸à‚î+¾~S‹|» ‘\ˆH.D$"€  ÀUÁu‘O­XQ¿v4ÆÒ¥KÂÿäue—Ž¿ýæÊÊÛ7Þx}Eå+þvÍm?þY¥‹$DoeßRñȈ ‚w 2ˆH®fŠÈ;há¯nEè?´žš"Ò ±o¥‘7ñ02EÖ‹´,+ªªj—¨Æ@óªõ·kX÷ʲ,AØ­ýSöLor¹ ^%[Xs¥‰«©¼–7Ñh®-Ø>%IDAT—†™P¬Ã¸°»Û۴ﲇ쮥˜Þ9ä—¶qñí=ÙÝ 6ßYÀžvõ@µyç7¶iÞ®–k“ów“, ƒÌ&\[DC÷-|ËIJՈÈÄq†#y~sí®»îavÞÙ%Y¿’E¡ëÛöÌäìq;yÑŽQçCÁ}®¦JÞŽ§ï‘oÊTq€"i¼›àšãÚ´à'¤‘Éâ 8ß8óîh;P²]QÈJ&*}? Ö¶NJ|vTÚ¶„oNª8Ùïy*Dd²°n žqîhÛñGަËÒ¥K’à²ö hŠ^dEš¨w’«Kr©x·ý$ÎÂîî¥K—<µbEÈEêN¿IDATëuX÷0¸‡h'or¸ŽÁÙì™Þãt<]3§Ù»ç·2št£B¾v‰¥;‰^dmÚ¸•õ ½½?ױȅÝݮΣsŽsYû0e}›^çÇɵ¿lïnóNË´Þ®¨­‰NÎøòž‰ “›®7ƒ÷½Ñ`ˆÈ䲃Òî!ºÎðùÞ“3Î9®”Œýˆ¤ï9 ò¼û}òý„4Q|x›ê:_ášæ9I8Þ&ûÞå½Ð!¯”ªDdÒñ®ø žéœÃ›€aáX$"€  À…c‘¡T4š?´ DdÄFÂi$l£Ë7¯¾,î&4Ú|•}!"£4>H#a½|«…ÌWÙ"2†Gâ&wIDATJ!všK³\„!¼“m8]À…ˆàBDp!"¸‘\ˆH.D$"€  À…ˆàòÄ›ÿágqµ Dd÷Â1¶ ÊyÁIüa<€x Ë–]wêÿ€½"ÌpùAIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/nav-back.png000066400000000000000000000011751203611042400306410ustar00rootroot00000000000000‰PNG  IHDR¤R pHYsÄÄ•+tIMEÕ  tZ£tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœÕ”?KÃPÅÏ•|q°>¤è¦¨¸êæ$΢Ð*þiW…Šù ÚÒI¥N‚»®JZD‚ÜA¨öµï:Ä &5 ¼©‡;=îýqîáòˆ™¡'Û®^_Þ4Acšó£Ei×E».´(Ï51{à²ÒðòTs%@Ê+0âOn%»PtXuˆ¡»•l¤a|ínåÑ6‹·Üû1€ù½13@Dx».›ë÷ÿRNÍ¥Ý+È÷`Ì p5€ê'nÔýT^…Cñh¾ºÑÌÿ¤kn8—G«>¤Ç=Ògé!,–þO%{ 6Æqf¹Pf kÿ×U¨©­æJÐtqŒgs´:×à{Éå›çÖ!÷;J¥º˜^Mo·Î¬É4ˆ$ €™VJʨü éeØvUŸò :‰NZAŸgIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/nav-collapse.png000066400000000000000000000007601203611042400315420ustar00rootroot00000000000000‰PNG  IHDR¤R pHYsÄÄ•+tIMEÕ  1…åð tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'»IDATxœcüÿÿ?e`Þ¼E, <¡Ð & õ>SXÐøG/=À¯ÁZO°) N6¸Œ¸°ïQn€m‹×à2hõÓ ¡ž„Ma``ðŠ Á%…iNSÄÙñHm #5La&Ö¼¦xWc ~ØÚJš)_··Þÿ†.øä‰naf`PáÂ#×xÒb$:{ ›Ià¤E|Ãé£m‹×l£Ð´N ªòeÞ¼E”›üÑ*O*¨IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/nav-getall.png000066400000000000000000000011531203611042400312050ustar00rootroot00000000000000‰PNG  IHDR¤R pHYsÄÄ•+tIMEÕ .ýëk{tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœÍ”±j„@†wu_aµµK j‚y}@RjHz±XË,î=r•ÕÁ]áB ©HeouãnŠ jΧZØù¿ýg†Y,¥DË¢,7!ôýõ³¤-Ô¯BÎOÝvý(n®oOyyz~¼¸ûø|Ÿù¾oYVUU3^š¦±m›1F) ‚àòâê›B\×Ƙa–”cÏèÈ@ÖBpΕR‡ýû Å6?MÓ;»W mÛ)ù*Bˆ¦iº®Ë²ìß+}ßsΓ$™u»Cå+?NO¶±¥?½%ÅÍs¿q(h¡nIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/nav-refresh.png000066400000000000000000000013021203611042400313670ustar00rootroot00000000000000‰PNG  IHDR¤R pHYsÄÄ•+tIMEÕ   ïEKtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœ½“?HaÆŸÂAlHZ£©%Z$¿!Q¤)hŒ–¢Á¡ î á–¶V¡) BñªGM% Ã¥ì‚ ÁBL\‚Ä:ÿÜ} ¡=¼Ã»¼?~ð|ߥæÂó‚ÀK¹b4jòþß)¥)Eˆ)J)B¼{O¦\ž§ŠeZHQèodÑA<†ç™}¹‘àÝ=ðYÏexç¬ïÞ€K§KѬ¢Uׯ6>éYÝx½^0@ql=\Ÿ(•4šoÉ— pJ%m›¨? PVŒŸ'•÷b·K +^¨{G@ÑÕÚ÷ç£|B–)—?å.A¢–ª<\^ÝÝ\ÁÍ=£²²IDATý\j‹žK»Óò0A DÖõß›šž¦kg°Ïx˜ HY«ÝJV¶ Wî©¥[Ê/—éµ»›ðjYH5m¬Õ/c.³¾\êÈ ,oî@*§„aóú”>MF$¬Øn)ʱP| ¢?EK,ïÛHoþüGCÞv>žÌS¾ $²ìž†f­IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/new-checkout-from-svn.png000066400000000000000000000325641203611042400333260ustar00rootroot00000000000000‰PNG  IHDRlvŰ5 pHYsÄÄ•+tIMEÕ 75Ö&¾ˆtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝyœe7ðßSG3“™äˆI ÀÕH C`P „(AÃ/Š"«òî 쮈 ,,ˆJ€ A9vñˆ.øCëîz!‘$I&ÇL×ù<ïÕS©ôY=UÝÓ=óû~0ÖT×ñTwÕ¯Ÿzªêi¡”BÄùç_"¢ên½õªèŸ" ‘ >˜5cܸÞI“ö¢Q{Ûºõ]»v¾°a"QR ‘óÏ¿âoÛ1óßyØao ëú”ˆÚ“ïûž~úÅ'Ÿøïßþî÷AŽ¥T ‹Þ;÷-í;8Ppw àFºÀDÔFººòÝy=“1»ºóðÆËIDATzþ•µÿo]#€Y³¦ òê_Þxc«å8ÎÎ#]`"j;½½Ý™LfŸI¹·´/0wç®~bÅŠ/.Z¸ðØãÞþÆ»¶lÙ>°{ PpGº¨DÔ¦òy³»§{Ê” ûì3îñŸýní£¦í;ñ7v¾ôâ–íÛY!ý6¾¶ù€ûW7:× §/›9uÿ]»œ]»Ûr5m߉ŒàåBÁÍå2)–ˆÚÌË[_9àþÕKV¼OÍœêMŸ„>@¯Ñ  t@Ø㥭bãk÷¬\ýúGWì7i_…‚;0P¬s2ÙÌŽí¯È“¿µò”5¸ÃÂo7ù¶g÷/PIDATýÙ¿8åƒGýà[+õËþ)¹£ßíCX±=[3EsÊLDíÅ´”£Ì\Î|¹ßíÍ©¬éiPB˜¾*È :æNKzʵ,áÙ °=ˆ„ˆ®«ò5õ s¢o*Çßeã×oÛêø®ãgóªw²1uZ¾«ÛlÕ&Qšl[*ÏSþ îûg\u€ï\þi¥ Ï“Rˆpàì«oðÝ‹Î÷-Ûq¥ð%*e…Qm5SefÚÄñȘ›^øã+;·ØÊq|ÛqÞØé>ÿ¢=qcΡ“¦Mëiæ–QSøŽM¹Žp ÞC›^pâŒýîúØ2oh8盫ƒ—^ÿÂç }©¤_qi?æIDAT!@Ó ‚•œ­&f³fOÖÎåÜ~7×mÚŽë8Že;–í öóëwìÞ]X°ð€¾¾„‚ÀG>râW¾òõ™3Wð‘3Opß½5ó=é`j€TO¹¡„€RJBßAß•È|½˜mzùÄû­úð‡‚?—ÿû Àñl݇¯® é }D‡@BÓ„nèÚe'ìPRz¯o³v¾e¹…AÛvÛv –S°¬BÁ´ì§ŸÞ1ej×1ó‚QÁü¹Ï]pçm÷õL˜Ýšñ]¹o?©€GEƒ˜º  j¨ž^xçºB0|íå…F/IDATOj¿þ aŽœvÆò¾&ÈËŸþ_(ßVÊóº%”Ò„@±&¢!—Ë*@ ­Æ„kte 0L­gœyÐÁû¸®k;ÁŽã¸¶ãêºn:‚\‚ ˆ•·ßô.º¬»·7º5¦¡5ÿ-ë<<&ÂÌmÈÐÞ%VÀ÷!4¥4À°ùâ‹÷¿ùf åH˜ ›/¾xϲ¤„ïªmÀ4t¡Åšˆ¦†®ö¤€Ò }o+¤´¤”RIéë~6ï›™õ=OJéCJ×;”2Œ=Í,C„ǾwÍš–žs^ôJ7ôÇ_{í¿\ಿ»âØc}ûÛwÜwïêoçÁ¾"nIDAT¾ ;vl_zö©Ñ᜹léÒóR}KÛ‹ðÍŠ/¨¨¡÷L@ ULàJ•Q®iÝtñ…3nþ€0A6]|atiBy®T Cî+š¦!]@ß»š à¾çÕ¿<üª½Ër-Û´ìBÁ)XÖ`Á´¬Á‚]°¬‚åd2ÚóÏÝscÊPqÌ_ô­»W=øàœzú’p™O>ùصÿrÕ×ßÚÛݽüo—B;ñ}÷®~áÙgß=oþóϯ^pÔ‚ŒÐ|m´×_ë"à»›ÀPc%Tñ( ß?é)±÷¾­ƒœ8c¿•'Ÿ}UzʼnõâÉ„zØ&"t‘1 ýdèIDAT!‚Ž|_ýrÚ›z¦Ên©¤”¾/}ß÷¥ô=?üSJ)¥4³¦PAÂ!Z¦%gôê/}qòä)á˜'Àœ·¢ç3{ì§ÿô×Î;jþOþá¼ùÇ=üЄÃóŽšÀ¬õŒih£ý»g´o_ÊS$¶=ßîÅ CUÏuaš¦ïCA Àßþä‡a‚`è¼æïûš’ð<×ÉèᱤÈÐéŒ)¢§L~FÌïßþß/lûÕËýƒ–S(Xƒkв v¡`Y¶mÙ®e;œ¿ cÌ Wýxûúz?ó™ÏèÃ'‡c~þóÇœxÊqÁŸ¿X÷¤üðGκ䒿ÙÙ€IDAT ]ûÐÏþøÿýü•_ºæÊ`øÚkþM7õL¶êèQC1E!X‰-òN ±w5€ô¥'tPò‡ք òç+\¹C9òµO’¤/ƒ 2†Vj4m(Dt ºaˆ¡ó%¡àí×ã;jÆäî?¿±sëöà,Æ.žÅØŽe;Ží5÷€Å‹33FñËT)92¦1}úþ·­üÖ'V|43þ‚'žxì¡ü,œÆwý·½õí¾tÍ•Ç}ì±óþìèµ_ºæJÍ<8×3ÌÑ"̆0sãJ!8¹ÁY*6‘H)¤”J)!ÄÅüg˜ ë—Ÿü{ðª;0”#7UljLIDAT/þk¥”ïÛL3][¤‡¡šˆ03ÑGïTfª© þàhMÓ ñëç6¬‚e,DzÛöæÍ;`ù9ÇΜ19<å Š."“5¼ó¯þêò˯¸úê«,]ºì‰'ûÍïþgÚô©«VÝvÚiš?ÿ8W_}íå—_v¢÷gó™}øÌ'Ÿzü —]ÑÕÕ•ïÎ Á=†hØD´ò!ЬXž4ô+~¹6Lg>öñð~æcŸóÍÛ<´éå3žuÕ{ú~±U$“1Ã幎ð>‘lÖˆ\NV€ÈtÆGfî€òe®+÷îw¿Àìƒ7¾çÈ#pè!‡Mœ:!—Ë6ë½m+<Éo¿VâÛûªîÞ‘OAIuÕÜbóÂÓç|¬dî§ÏùØaw}ÀUsó¤ò‡æÍfÌ¡;:„ï::Ù &"†îmƒÝßœ°ÿ„`Í‹–Y¼f$öÞïÃ+ÐP€xþOÿü̦⚆\~ùåÛ^ïÏfÌÅï]<﨣wlß5°k°w¸žq]º®Ïœ1ãÙ?>¿éù—{Æuõ÷ܳÞ¸~ó¸q]câ\<*ÄÌmLl<ÀDIDAT¸{©’]Mº.4MêÆoÏþXµ™ƒ—¤‚ò])¥fš²Y3 $;lÑ4‘ÍÀP•¢¸F¡†úqZy{’M xáY !” Z½}Çå'®Óö› d2fß„q%¯f2æœw4ôWt˜¨C$®ð»=8Q ÁX¶hyHMßSŨAJYlC§3AåaOê¦Ã̘{_ ëA»nPE{Ý—Þ¿×[l#¡˜xL4„ûV|á ïÑûHƒÿ{u‹3mJÆ…€'ã-Lsȯ¥(@h:¶‰˜¦¬qè Â(jïáýíb¨ázd¦XO)& ¸‹Æðý#þñIDATŠ+<9þÁ·¾ÂàE—uÝrí«[&4º@Ïß>xÑe†iñ ö<;Ó;~¢Án͈ƆSO8âA\Öu˵á1tÅ5+ƒ]vê GD³¢wüP«ÙŒùòæÍM+3µ—¿>îPwç0f´l;š“ö™‚°S¢g×oI¥pD4v ‘çÿ´~Æ×G´ýãè˜àŽõ’ï»Tµk"åß´C?oÕa:±ÌDÃö‹ï¾°{Ë´æåòãàUjïÎbRYÝ0¤²n ¥Úå#£Õê#qÖUc¸d ~ÁJf¯[¢·yïzºþô“·*%†~Ç!´¤¦µÆGÉIDATÆB$øJk(D‚ Pm‚’ñ%5pâAõ§Úº-tQqVQ>\q Dmâñïœû®…çÍ~û‚?>±rGÿ&B@Búâ $ŸVˆ„GT“¾{cnFÝÉjYÅYÊó«ÆÂÔ)žY÷ƒæŸtˆÑ=í] ÏüÍÃ×ЄØSqãôïÞˆ:WgJDD¤M¤n¦¤:©‡Wy¾ðÜ„šêWëÖ½±ukZKËd2Ùl6›Ïçs™Œ™Íæ²ù\ÀæßÝõܺէ]pÈOÕúg¼õÔ—~tÍoý›cμ¥·ïÍÁïFx¾Ê—Ê÷‘ä²nT†ÕÚ_ѵÊ·wÉ_¹ûæIDATûh \c²j ?‰õ† i-*—Õ˜FñÇá Ã0MóÙ§¾ñòïçü3–\zro"@ïÝoñ²›¶=÷ãŸÞþ¡Éo~÷{Nùg#Ó£kB*!„Єp}¥”ð§éÜ'R;nªMPw®øÂ–’‘åk¬8~˜5_oooò…˜†–Ëwg3™|w>¬€xÎÖŸ­:å 9Gà£×ä'âj݆ë)ì×÷\Lœ¹àŒ \ÿëüð«'¼ëýW¾ùÐ…”|¡ !<_ ©T³n6+?2ƒÃ/}©ä°¬6AÉøh“D8¾î¢’+)XüU””“9B1mÙ’BG躮wu äÑmuÒIDATóùîBw¾§»ÐÝ5íˆ÷^òë_cíÜrèÜ“òã”Ù}´ìÒÞîÛo¸þÀKÏÿòžzpöÜeo:à]šð}¡„Ò5¡$„)ü|Zm"uÇGG64cñµ_йöº ¨u7'ÎZˆªI%DÝÝݽ½½½½½;»»»óÝ=}ÝãÞtü·áï~tÍmoû«ãžû1­kj¡ðª½íÙüôïýÓÉo~÷û/üaßÄ7Pð ž„ô„RÊ—†JV Ÿ!j×_Oí§‚EMž @ïêÐmjT¶€išòº` 5dönC1ó]ÕÛÑsº`hÁ¿š¡ù†ÐM¡<å𥂖E~ª0î`(%Ó¼O’!BÔt®ëî”Õ\ƒºr¦Ð€‚ëäM˜v?aŒIDATÈŽ «YY 3›`{0Œâ¡ªë{³€Ìß Mz€P0\%†ŽnWå¦8صãgTéµÒ0DˆšÎóýºcŠ0rJ3!¡ €’²©5×Vã)Þ˜³wèþ³äm¸M*Rk¶´nomø†‡|ß×»úLÓÔ›ùà·š.$ž W3IDAT]øDÐÄ¢Ibü×rúë÷Nõ¥á+!¥JKúøÝ°C¤?°fëÜ ïÜ’£U`5OpE¦I!¢ Ó6mÏ­«Å( )ÏFVõÞŠªT:z‡"5¾Êû+ï1¬dLµé£K®øRŪPÉÄÑò” T[Hí ©]æWÛœÚߥXcÕÞ®èFÕ~߆Wà˜[ZmqÖR÷ÞÖµÆÀÀ€¼.*?¬’Œ&ŠÙT¡d ʳÅîg1þ ºòu%¡”J±©¦âǃJRü—†W¹­xHTÛp7­±——/9ææ”ÆöÆìA®örªÍ[£À1·´oy»¹IDATÚ¢ª½Ïå[çMŽ¿u-fd³ZÖ_±vD‰aèRÂø3•×Dv¸gOmÎéß•Í6)D†DpYW(ºR“š¦ # #‹þgdþmÊÓ¥,VCF²&ÒÐ~ÙèœÖ_R+F3§„‹M¥`µÏ5:èÛ»ä\²bÉU§upÛÝÝÝ'»¼±h·YIDATÞ&…ˆ)œ¡f€šWƒ&’Bññÿñs”Ò”2}%R¬†`Ø5‘j-Xå¯FàŠÓDj/ª¡RÅ?fj̳`åÛݨòJYÌÖÝœºe¨8eíå4´Š’i⯱îZªEµÂÔx3Û$qô\—¦ëMº:,ÖJByúÐ=#¦ïˆÂzŒ© Ï3=_ó}MÊÔª!Hr:S»}«FsWÅ1µw‚ºãÃáa¬¥Ñ ©ñÒ0ÞÄn°L¸½g)Y±mbcÊGÖþ êNý·â”åÄÙºVÒ ÓlÚúM1ÔÛ€¾ÒLÍSý¿‡9QegÀ³…‘õ•áËbkˆ—b„ð¶÷FuÐyAC¼×ÔáIDATÄn]3èºÞez¦)k7LQ\²)  \ëEß¡`æ…´¤2”¯K©û¾H½ƒ¤±~Û{£{U3öÂv8nÛ¡ Í3â[<ïojz3n{7„ À> ¥‚&ÌŒ¬R9Ï˺^ÖñtOj©¿c=DˆšL·››¦™Ñdê÷‰h‡‚¡I(á)1ø’0sÅž3}<™OddúiìŒéÄKzDa—…ÅßvHûÙ%¡I(WO*OÛñ_0Æ#3µ¸z_¹®¡„éx¦ëé~±)$å$kQˆÄ<Ù›‹J®7U¼Ürš¼ü`„«iB £é0cü:IDAT5‘òµ| éŠ'qîËˆŽ¬±"ì}h¡Ò±Tí0+¿ß©âÁY[œ²UÜöÚ+ªXæÛHíAWªKˆ…)S&º¡÷k*„ff²š®ë†¦ ¥wh˜¡eá[0²J ßž/|OJß/  ;]Þø:Ë ®„n*BÿãU©ÎÄ?ÌZ³¢a æ×xœ£½öŠjoØW‡‘zÔLº9À÷ÛoB6gº®+}¿¡( RchØÐôb‡Í ³°^tí«Ìñã‹eH_H)„B(ß·=¿`è=¾[ëWo„¦Ðt€¦ ˆ @ë¯ÎŒìÎ]ñê&Æ–Ö8¡£&ØK¶IDATÎd=&M¾/tÓð]Ïõ$”/}@y ±×ýŸ™l·avIéèššÒt@ÇnQØ£K¹–È(¥ç¤)…”š’—JúîŽ[ó¹ÍËÈHˆ„»•š&‚ìÐuÝ0¡e…hì4#v‰·#¾-«}««FÇhtKZxÅy+žýÑH€ôìØ±«o¼¡ëÊ×uSêRe¤/•Bðà åÏ aˆb‡ ¦Ð_¥iЄ„k!;™>H!•é9žTBúRúžç»Òs”’Ê+(•ñ}ÝU®Ó]²|M74M€Ð4ÝÌêºÍö®2üîƒÚXy{ÄðZ«¨ÆŠâÌR¢bN \pIDATÃç°U,[ím/Ÿ dQÑ÷'•BRK耶iÓsºÞdÊ0¥RJ)) W¿û+¨#HM(@ bèÞveŽW®í ˜f&çy»¤¥|ß÷JN—¬Â€ÐŒ®ì^§3FÖ gLÝ4uÃÔuBO²3%mXógí—êÎ[rDÅ™·| nÙ⌯Q’ºeÆ,·¢ö,1ª©µÄ3Ïþé€Y“=C×tÝЕ®+¡ÁÐ%€àÇ_¢ýž(~Sˆ¡Çê”J ©¤ïéžô•@ƒP»w¾æùžëzÊ+”¯x``—¡õ¸=Åñ4Œ‘53¹œfšº™5͌ЄJü«­8ašÆ,)•ëº/),í#IDAT¾øâ÷X0ÍL6“éî×Ý“ëíÍçs]¹,ºz²º‘Éf„ahš¦iZñHñ}å¹Ò—šm\Ûw]ϲQ°-ËswpÐsAÛ¶-ÛöªÿZøŽƒoš’ †M#“éÊgºòÁù‹nÚ_šÃ씨©ÓJ­yøV·¥”ã¸ËÜe4k¶ë8ð`{°wíÚaoÛ2˜ÍîÎä|>—ÍšavåD6“53š®k¾/]G°{ÐRÒsmÛó=鸎SðlÛv\×uYSd«•aŸñ=ãzz‚ H.Ÿ×²YÃÌtƳ3D'Ìs3+ÞsÔQ¼½o‡|nÏŒž_£¡`¯?ÃnÜuM(Ý0³9Cס隦G_MC„¨)4Md³™l6ƒ¡#<¨'†—bJ.¦*…° Ñà_Yl/¾$K§Q J©Òvw¥Š+R{/9E씈¨¹¢ 2ŒÛC„¨‰†¾ÿ;$†…!BÔL£9=Š"DÍ2ª!`ˆ5Ñ(O"†QSŒöúÇ ¢öÒqé³×}"«V­©rQ‡Ú+D–/_6Rå ¢²nÝáð^!²iãæ–†ˆ:ÛDˆ(†%Â!¢D"D”C„ˆaˆQ" "J„!BD‰0Dˆ(†%Â!¢DÚ%DfÎCK!öIDATš>ÒE ¢áh D¢Çyù0S€hlJ­&²qÃKi-Šˆ:Hj?^5sÖô^ŠÖG‚X Ç„“•¼]Nùôi’ˆR×@ˆ„ù¿Ñi‚’,@$Ê9'bdu–¦üŒfy:DÕŽ‰j©DDí)ý)IiR.zŽÃø ê5¬FÏ_ÊÏeÒùHt ¼èCÔæšR 6nx©¤©µDù«å-)DÔæ‘j aõ¤ÆôþYq µ•v¹c•ˆ:C„ˆaˆQ" "J„!BD‰0Dˆ(‘.ñ>²vmóÊAD-³|ù²x»±ûDþð»'ÒZ1ˆ+¯übº løf÷Dç–IDAT³½ñ¶Šãï¿oåéY‘¸ªeʿ崛ÿTíÏ„áp’#³îÖŠZ†QElË­;ÑÝ~!‚*aQ-\ž¼zîIÿYûµ[­~˲,«¿ÿ°÷žüäÕs£ÓsyÕºIx¨$9lâ̘ʊˆZɲœèŸ§ðäû¿÷£!ÉÕ$IDAT’iº»sÍXuj§3qŽ7r‡ÈMC¸53œNðä-&Yo8\£6L³ºLY²ÌðÏë-_iɼ%kN G^{Þp$ón,+ö„ÈÒ³NpúOþöÝ´`ÕMécµ*°^­ñú‹ë·%_IÉá]m²†ª##æ4‡«‰æQ4ÂâÌKcÙ`ÁVœ·$¹ô¬ÓVÞqO³WBˆ„jÉ÷apçHô_ €Õθæ¦JÕ7©ïK†O»þ7ÕVÔè13ì+.$\TÅã|ØË¹^¢Š,ËðɋΠþ¼é–»‚áç-¹é–»šºêB¤¼zšK¢ÿÚýËèžIDAT»ì0DÖ¬¼ó¤O^PqýýýO­®ŸMmIe!ͨ°–Aq¸®{é%˃áëo\åºîõ7® Æ|ò¢s®¿qUóVÝÒð,Ç,ÀZ³òΓV,Õ_þ_ åÕQñÌ¥¤ý¢Ú©M3 “ú2iÔPJ]wî»á5¤dL“VZ›Hœ"5‘5«rÒ²²Ê'èG®Ñ)i%­8¦Qå§?ÑeVÛÒjÓTó «¡õ²ÎBAjÔ“º¤!ÒЪ;vykVÿä¤eï*&Èø R~„Dðj/•§IyKdÉì5ŽÕº#«ýY£„Õ¦¬6oÅ’3>h% ‘FŸ—¹äþWî<ž´(5IDATÿ»¿ö½jœ{ë³IÊJ¥%•ˆâHít&æS¼iÅDmmžm^<¢†ð)^¢Ž÷†{{»âLÖŒµ·º&BDé:óÌÓî¼ó;'N¬;åÖ­Û–œ}0nX!ê`;ŸÍ©sÏ;[„B]BÓt BhAÛ ZØJ¸åõþZ‹ö'BD‰tp"DÔ:¦?t`ODcAÇô'®=ˆÚSg÷'R±Ñט¾¡õQ¨cú)ФZLTK„F§'¢8:©?‘Ú=˜•L³¿&QBÔŸHµU7ZT"JQKOg†úÁš•÷û)Óoaý‰T<+©Ýß…(œØ·IDATÓŸHùõÝ8}m””O÷¥®ƒû)¿ÛŽË$¢†ŒÎþDˆ¨eFg"DÔ2©=€Ç§x‰Æ&>ÅKD‰°&BD‰°&BD‰Œ¡þDxƒQ3tp" ¢vÐÁý‰0AˆÚA÷'>¤üYòk’5ºAãÍïD)êàþD¢/¡R!å]Ô&¢áéìþD˜ˆ’ëìþD’˜ˆR1JúžÎ%×Áý‰ÔU± …½Š¥«ƒû)i=­1P{<%ÁþDˆ(‘QÛŸ«D­Á§x‰(>ÅKD‰°&BD‰°&BD‰Œ¡þDˆ¨FI"Ñ'zù|Q+up"DÔZúìLºæƒs§IDATý‰TÄψZ¬ƒû ó‚©A4‚ÒìO$0âý‰0VˆZ)µþDʵm"D”¢ÎîO¤Z¥#zîCDMÕÚ†ÕÖö'BD-ÐÁý‰”¯6LDÍÃþDˆ(‘QÛŸµŸâ%¢DZ]IqƨŸ~cöñû\ÉÈ®y,áb©yþæ¤#]JÇÈ×DÒIó×ýô³.‡ˆ†aäûIØÉo>Èu}®ëÿøæƒ’,Šˆ†aúitÆŸ?R9e<äègûû¿^þ]rpc0ð½kg~ð²uWzÊÉ ð£G*ç0fiO§œ¼ÀèØÊg }}=7õ;³žïûR×K«Ï[¦U+IDAT­ß¸lé ©—¡ÚD|1oÁyÝmÐrtåÌp`Üéÿ~ßµ3œ¾üÆûW]`É?¼\q!Á‘hÙñS1w†Q’˜ùg²t£°d[¢ †KkÔq[ùú7î=áøcæÌ©_ Ÿ1ãù»ï}䜳¤[€¨‰¸é[øÂ'|ù¶Ç>uÎÑ+ÿ}Ý%ËŽùòm}á –üÃËw^>U³Ÿ³ Þ¹W¿VqövÛw=¨Úªð¡v{WDz9s²,g`Ààû>Çñ,Ë`;ŽãøRJ!Ä‘G´öÑ_¤¾öh)X“|ò£Ç8€Òô‚í/}ù¶Ç¼:ë¾U_¿±Ñ9N¹è¯IDATåä…Á Aäë·äÕ’£ÓÔÞÀ`‚‹­öR£—Lg½á4u·¢š°>B­¡@‰½Ç5QÔDlÇþÂ'\yã÷/¼àöÀÁ¿ý¯oþÊåK?wõ·|ø‚†óµ¼â]cL(Y>}íµÔVc±áA§„©ö攼T²Ìh:„Ó×xë¨E” †Â„hjŽ´KM¤Æ¿»üìç®þvap€ /øÀ?^w÷…|`‹]œý+—/ð³ÿz:ù&TûêŽNʱ®(\Zü¬‰_)ˆ3YÂÍ 2®n]ƒ•‘VB ¡„‚ÿ4ù9²v©‰ÔøwÕ}^zéÒpúpøÒK—QoQš}IDATré¥KôàƒI ¨{D¥õ;ì%ÄŸ1¬;$Yu$ù ’&ù«3uYvö»÷ý¤ÞTÙj/ ãȯ}.Ðuõø-²-®T{Xi™ 1$Z÷hîéÌÈ×DêºpÙûÂáÛï˜}éãç½g %{pÅïÚ~ù,Ñ3ÿjÓ—,³¡DÅ•Æ)atuÕ2ŒõV3"WÍ©¶I“zKÆ<ýÇ›½R±bÅoùÚ÷ß¿ví#O\þ…OÔ˜ô‘µkÿð»'þõÆÛ*¾Ú¼šÈíwü ¼7 Z…®žÃà¸ýŽéƒ»OíÊåÀØçãçý]ÉŒ£æÙ™v¨û¤ŽÏΤbû¶Wî¾÷‘n×”ÀIDAT‹.<'¼Ä»ú¾ï—L³pÞ<_*!Ä‘GxË×î:笽ã§oÚ¸9Éz¯þòm‹Ï?ýôE]xUÔDN:ð¥ßoët¿¸PýœW~ àéÁx¼mb¬*I'• BM2iRï§/<':æé?¾è¸^gœÎ4¯&²æÏÓÃšÈ ,ë÷×lß6à¿·g 5‘·Oÿø‚f¬|ä1A(¾­[w–×DÌ;º©+퀚Hô<å’Kîýüª;Â??ù©››´R¢NT©&²Éq¼¦®´j"Q7Þøzü‰yÖMcMåšÈÑGwÆé {6#q¬‰Q"UÚDæ5u¥#Pyòº¹áð1ª…IDATŸ]—VJð—4il:ûô“<Åë¸lÛs·©kL"5ž—©–)\ü–ÓnþSµ?kˆ†Bµa"ê¼;V+†Eµpyòê¹'ýýgí×nµú-˲¬þþÃÞ{ò“WÏNsÌåͪ›!"úÿò^œ ¹Ãä¦!74ræ‚3à ž¼åÂ$¢•”’1Dc€(þ¯Ø'T“»héoñ¬Wk¼þâúmÕ^ »»ü_T9Áá)EÅ?òðn“÷ýB$üÂÂÃ5¸^ý×`õ‡3®¹é†’EõMê{àÒÃáj?Ê[·Dˆ}q¦"åu@yç ö.; ‘5+|rµ~IDATï<é“T\`ÿS«ï^1ˆÆ 6¼¸k—¬öª¦iš¦“5cí-=±°¬YyÏI+–Dk%¡~ O­¾§b5$zþ.Á“S–œ}êªÛï8qâÞ£UiwDýýÛÏ]ö~ÀO·©…Hœã6¨‰¬Yý““–}–U>A?rÕ¤îÚÙ°JcPÁÎgsâÜóÎÒ!„BׄÐ4]ƒZp¡…Ç–×û{ò»Ó-CÒi¨kÕ»¼5«rÒ²÷õ‘ý_7A¢qP µÿ$¢&I"Þç~Éý¯Üyþ!wí{Õ&8÷Ög“”‡ˆZ¯ÕÏÎ0&ˆF™Ô~2‚OßãsõIDATM#ÿ»3DÔÑX!¢DØŸQËg ¯n}ý¡5Oü–™ÁTÑWƒ{EŠÿ*<·~ÃûO™ß“ϧ[ö'BÔÙÖ>¼îÄæÏ™sPÝ)|æùµÿ✳¤[€1ÚŸHôA›áÍ΄¢ö'A‚ÉÖ>ú‹Ô×>ûILj7ž_ÿfvC×›±jö'RyöŠ”Œ¯8W’2 ›mÕïÑèn=ú)Цâìuc±d‚YCÔl–åÔ¦»;Wwša£ý‰TŒŒjÓT¬’Ä,s„Z£Pp,=ë´oßý@t|ù˜Ô±?‘tf¯¸h<1J¨© öŠó–XzÖi+ï(^«_IDAT>åcš!µ›ÍâêOÄZ³òÎb"eÿ ’°?‘$…¬8{£ç& ¯þ5ʲ¼›n¹+^qÞËò‚pÓ-wY–gYÍú «ÔB¤þDVÞSìO¤ì¿=Õ]»=U)S2¾$’*Ns¥2Œe 뺮ë^ãªàÏO^Tü¼ëo\åiÒªÇb"_ª;{ÅU³OjáÎvÝ w|öÓç…Ã-Ø ÙŸÑhäÈu7ÜÑšÕ±?¢Q¨e >ÅKD ±?"Jdžâ%¢t½°áÅÞÞ®8“5cíìO„¨³yæiwÞù²ß©`ëÖmKÎ>H·…È•W~–”†IDATqgÿK_:þÄ÷U{‰ˆšD× cÛŠóÞ{Ž” …ÈòåËR_=uºBdÓÆÍÍ+u¨–>;CD£C„ˆaˆQ" "J„!BD‰0Dˆ(†%Â!¢D"D£Ê#k×>²vm+×È! ÂàX¼hÑâE‹JF6C„h4ƒ£îÈÔ1Dˆ:[´ºœË”œÑ4»>Â!êlÑ“—à\&=Áij"D£DkN^Ê1Dˆ:XÅS•`d4SšzFÃ!UʤÙ"D,æE™¦f C„hTi}ËC„¨³•´w”7ð/ÕR·êÁK¼DT_Å»BxÛ;Žå¬1IDATe·™Rû<"jlX%¢Ã!¢D"D”C„ˆaˆQ" "J„!BD‰0Dˆ(†%Â!¢D"D”C„ˆaˆQ" "J„!BD‰0Dˆ(†%Â!¢D"D”C„ˆaˆQ" "J„!BD‰0Dˆ(†%Â!¢D"D”C„ˆaˆQ" "J„!BD‰0Dˆ(†%Â!¢D"D”C„ˆaˆQ" "J„!BD‰0Dˆ(†%Â!¢D"D”C„ˆaˆQ" "J„!BD‰0Dˆ(†%Â!¢D"D”C„ˆaˆQã÷IDAT" "JĈþñÈÚµ#U"êP{…ÈòåËFªDÔAÖ­»"Þ+D6mÜÜòÂQgc›%Â!¢D"D”C„ˆaˆQ" "J„!BD‰0Dˆ(†%Â!¢DŒú“¤jÆÌý[¼ÆûÌ%Ÿ¸áßnéR4ÝÆ /Eÿ ë§.¹":f nr5­;û_ª?QgúîJ©‘-IóTKɱð±–ƒ›\Ñ„€íýbDÖÛJ£r«½o…µÄÜär#"c÷0 ذJD‰0Dˆ(†;…=øQfΚÞÊÕ¶6‘èn´xÑ¢˜s͘¹ûôêìáö®’IDAT5Ô™³¦—\O­1cÌ)ÛVI ,^´è‘µk+~ŽÕÆ·ÕGGô€ïЯãC¤|g {Š]µjuüÅ:+\J:ú]¼hQÅ\¨6¾³tÖGSM‡Hð­Uqg ÿ ^ ¿ßÂL)ƒê_n­·qÃKå»Wø•ŒN—Ôb¢K+ß¶¢Ÿfð¡”W0ëä£\µjuôÏvV-AÊ?èð¥è'^qšùˆ;2D¢ñ²þ¥Ëw£pÊ nì%w†#ÛóË­<2 ‰¾Tmª1í&üø0ô ŸTysÆÌýƒáèG9 ê¡åß %cJÒ§â×I+u^ˆD# â_¾E¿Ç‚KÂ"ˆF³IDATÜÛ'A*î+u§©»L´}ºÆï–D+˜áÈòúcI=´ el®a4‹¶¸%µDç…HX¹­ñ=Ý¢_VÑo¹¨åË—µÿWò#¿#j"hä§K‚O6øXÛüã‹©¤Zs®‘ýL;òïâE‹–/_öÈÚµ1/éßHµwÍ’ïv¶e”G†•Ûº‹š9kzx”r)GÚ¦›£g=$ægש’t^M$ì:aE#úRI›ÈâE‹J* Ñ1Ñyk\PqÑ®ä¬$<©©Ö€Úæç/ITl ï %9ýcÎU2 VFIXË(if Æ—7£FÇ”äȈŸHG÷ƒjÃÕ^ª¸u€,îôóIDATP‚”gAøMPqLôs «$ÕÕžÊ?a|еÿl¶Î‘@µë»µGFÇT¦Ö«öI•Fåã+NFÍÖ‘m"DÔ>"D”C„ˆ m"í©¡æˆ:ׄÈX8º>sÉ'Fº­6>Öcp“+juˆŒ‘£k,tø5F>Ö¨1¸ÉÕ´:DbvBßÑÆÂ6–à&elX%¢D"D”C„ˆaˆQ" "J„!BD‰0Dˆ(†%Â!¢D"D”È^·½_ýåÛFªDÔ¡ö„È¢ÅóG°DÔ¡Š!rúéÑ«-µ±bÅGº DÔÁþ?k„éCoÛIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/new-location.jpg000066400000000000000000000315351203611042400315550ustar00rootroot00000000000000ÿØÿàJFIF``ÿþLEAD Technologies Inc. V1.01ÿÛ„    $.' "+"(6(+/1343&8<82<.231  1!!11111111111111111111111111111111111111111111111111ÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀãvÿÚ ?õ;½EaÅ~lƒïs…_©õü*€ƒûRùõþÿþ&•À?µ'ÿŸXÿïñÿâh¸ö¤ÿóëýþ?üMþÔŸþ}cÿ¿Çÿ‰¢àÚ“ÿϬ÷øÿñ4\ûRùõþÿþ&‹€jOÿ>±ÿßãÿÄÑpíIÿçÖ?ûüøš.ý©?üúÇÿÿEÀ?µ'ÿŸXÿïñÿâh¸ö¤ÿóëýþ?üMþÔŸþ}cÿ¿Çÿ‰¢àÚ“ÿϬ÷øÿñ4\Ç«ÈN%·Žúé)Çæøš`]^‘¹õÜÿño¼ÿŸx?ïñÿâ(ßyÿ>ðßãÿÄP¾óþ}àÿ¿Çÿˆ }çüûÁÿÿ@ûÏù÷ƒþÿþ"€ ÷Ÿóïýþ?üEï?çÞûüøŠ7Þϼ÷øÿño¼ÿŸx?ïñÿâ(ßyÿ>ðßãÿÄPÅÙ™¢ðîE |q‚Hþï± ï¼ÿŸx?ïñÿâ(ßyÿ>ðßãÿÄP¾óþ}àÿ¿Çÿˆ }çüûÁÿÿ@ûÏù÷ƒþÿþ"€ ÷Ÿóïýþ?üEï?çÞûüøŠ7Þϼ÷øÿño¼ÿŸx?ïñÿâ(ßyÿ>ðßãÿÄP.$€º„F¤€_räö<?,{ÐÓJÆ]Îã’O ´’í¹[hÔvM†üpýhßyÿ>ðßãÿÄP¾óþ}àÿ¿Çÿˆ }çüûÁÿÿ@ ¾óþ}íÿïñÿâ(ó/çÞßþÿþ"€2÷þ}íÿïñÿâ(ó/çÞßþÿþ"€9Ù­d¾°†Þ+†¶’âH‡š¹È,ëž„rzÖˆÔTä¤Õü‰”\£dìg­¬6Ò£I%ű$ ’ÆÞÌíˆ?AÇ5äâxŠšIP¦·Õ´žžKG¯ŸÝÛ¢–WSþ^Iü¯ùìjÛDÖÒÍfÍ#y-ÒN“ŽIéÐrxÅk„ÇO9©¤œl´Vü5ì(*1Ó3!ñR[‹¦Óp­Ë*lufU ÃÌÌÆxà× “ºOG§ãý[Õ£¥ü¯øn>OÙG¬¦˜ñβ;˜Ä¥G—¸8ÎsÉu:ñJ>ößÖÿäþà—»ýwÿ‡_y$ÚÜéfú;{‰—Ïû:ÄC³ùž_`1»ÔŽ)-ºÿ•ÿ ÚþBÛëvkq=é:hµG:ݺ'–Ä2ÁŠòOõõ§¢IßpÖöúÞ‘„>©b†p @Ü óèWžsÛìïËÔWV¿BQ©X¹mí±¹…wÉ•w¢ñÉ\äG>õ7Vo¢µH£sâm& 9o#¼‚æÞžF’ ãqòí~÷_˜{r2FF^Ûù~.ÀµØµ³¥M,1E©Y¼³¦ø‘gRÒ/<¨Ï#ƒÈô4=/ä$ôL’×RÓî˜-­õ´ìIG*±8ž‡° þ"‡§õòüDZ<Åq M‰,N7+¡ ¬=AhjÀ-µ½ÝÄ·.WŒ‚– m‘ãÀË«3m8bA``ç  sCy42M ËPZ ,™;“$üÛx県{YÞ͆74=Ó®ßuÿòjàlFë"+ÆÁ•†AéKYÕK†m纚âQ 0@|‚ØŠ¨Â«’:zàQföCèÛþºω­â‚åîì¯m$¶µ7M ¨»Ê†e!pÄ•ìqó)æO%ÿmþ^©‰t¾›þÿ™—‹ôû»y¥H®ch/ÍâuPÁšO,7\-žsØñ‘Š#¯+]Ë›ò׿„ݯ~šÿ_2߈5û=môJEÔë ù`™êí’0£¹÷¡k%×þü[KÕé.ßðÿ’oäM&·¤Å~¶jvIxÇh·k„ŒãnsÐæ•×õýy?¸oAxƒE¸[†·Õì%[Tó')rŒ"^»›åæ›Ñ7ÛO˜ºÛ©^ëÅš²éÎÚ£A¨ÊÑA:N†2T~lãxÏ$ô$ù¹:Úÿ—ù‰´¢åÑç‹4;m?P¼MNÒå4ä-p–ó£²vÁà“ÀÒº²}Jþ¥Yß—®¿bh³Ïoo¯a$×I¾–å J¼ò ‘Áäz«;µØ›«\³ü„fÿ®1ÿ7¤2ÍP@WS†iìÌvç½<Ö‹r‡—rò2´˜.¬.d¶–;{?"VB_í«–ØÄpØ+Î8©³³V#/FðíÝæetÚˆÝ=¼rÆäžTq8ç°AY«Œ“J…Ž-µË™¶Í<,Ä· JëÜ“ŒäŸzµ°‚Ô™[Oi9?g2z|ØQŸÉçL ( € ( €9ÈD‹kk$*¬ñ4Rf*ÖVÆpqœzRÒú‡¡×¶íà´°YãûpQÙ÷3wLmëøúsÒ¾*t£³×üúÝ7jÎokoò,aåÔ.®Y i&ЪÄg<œ}ké0YЕG?´ïý_ð|ÚÕ£®ˆç,ü;rææ;»{=>Ú{g†HlfvŽWl~óaUÑ’sÉàW§´Z•¼­ý/#žþò{÷óõõÿ€>ÓÃ2²À5ŠFki–é£$,޹xè œ£©õåÓkz«»ýîä¥k_]þjÖü…Ã×oᨴ۹ãyÅØžYbwrùþaÁ©Ç§Cß½^/²ÿÛmýyÜÞek¯ Þˆ„ÏÑAwö¨îæŠiw++,’®[ 7’HHîe_Fú]Áõ¾ýõz õ·[~§äT_ên£§[éÖ°AydË,·rÍåîyKfLÈ~mØ%y#ëMj­Ñ5ø(ÿ•“ òµ%½Ÿõþh±/…ož3fée-¤R\Í´Žs*°Ù òœåƒvŽú+~)ßËo¿PK—Eåø+^Z¾ÕfŽïíSÛ©šÖ{xÔÈe1ï…ö)p6XnéËu§{k×G÷6ÿ¯Ë¸’Mv_×ô‰¥Ð5[‰ä%ŒQ]\Ãw,‰3´‘4aFÅùàvI\<ðãîò®œßŠ{ýûõIl EòKî×£©h—ø_J°µÊ^ÛáY \ªeJHݰ6³žøúUÎÓ©ä¶ü¼ì¼"ßUªõ¾Ÿð|®t¶ð%¼Á …Ž%ª;0““m“ò¤¶ÒÞ[Kp`òáy té< ¢«.Ñ––ç#$¡34·“M$0À²%abCI“½ðGË»—'œœ’I"ø¦í¦{G%Ah˜åÐuãúŽÿ^­šý³jÚlika§jiæ†xoØ¢`È!«ƒáõéÖ†¿®ÞÕ†Œ¡áKÙ`ÑþÕv¯%´¯ö±$¯1h ‚QvùŸk$k¹¹+»¹ÅRÒiù/›[?“»%«Å¯?Áè×Í~6ì†Má ¦‚Å¡žî`Ô Ó±Y`7&m½>ðãuÜ;æ•?rP}’OÕE¤ÿò~ƒŸ¼¥ç·Î×ü¾ô‹^&ð´þ"Ô$3jRÙÙ‹'¶D·XÙœÈy»z61·¯"£•ûÍo¥¾Zúïù/•)måòü¯÷•-ü-©¾“qóÙ5ýÍõ­Ô’!m­å¬A¹Ûœæ6ÇÔUTJJÑÓâÿÉ”¿Í}ÄÁrÝ>É}ß×ÞEsàËÆÓtx k!&›b”lùrJ’C îzŒƒƒÒ®Rý먻«|¹—ÊÉéæ…os•ùþ?Ö¥ˆü?¬G"j ö¾mM¯^ØLþR+Ba¾̓Œ7*2r8ëP—*I>_µß5ÒënÝwÓa½nß—áß׿¡ŸƒµÉÅΌ‡Î¸Óf´išþ{6G*Cìe ü§åN{нÔìºÅÛü-½÷×ÓÎÃûJûk÷?-¿Ì³…õ×^þþÒÚd¹¸†æDMbæ5Ð â0%ÆÀÀ°_CШZ?+þ>_6½5± 7y[úþ·:Øÿä#7ýqù½"‹4P@P@RÖÚòÒÚ+k}bõ"…h» 8P0L~•6[;qk—æ<¤»ÈÎøË31bxu' ¦•€©aÿ0ÿúô?ûN˜4P@P@béðI%”%#b޾Â>É7÷?QJÀd›ûŸ¨¢Àd›ûŸ¨¢Àd›ûŸ¨¢Àd›ûŸ¨¢Àd›ûŸ¨¢Àd›ûŸ¨¢Àd›ûŸ¨¢Àd›ûŸ¨¢Àd›ûŸ¨¢Àd›ûŸ¨¢Àd›ûŸ¨¢Àd›ûŸ¨¢Àd›ûŸ¨¢Àd›ûŸ¨¢Àd›ûŸ¨¢À3ì‡.ŠÑ¹êÈûIúúþ4À•F¤ƒãqêè ý¥;:Ÿý0ÿ¿gÿŠ :Ÿý0ÿ¿gÿŠ :Ÿý0ÿ¿gÿŠ :Ÿý0ÿ¿gÿŠ :Ÿý0ÿ¿gÿŠ :Ÿý0ÿ¿gÿŠ :Ÿý0ÿ¿gÿŠ Äzˆ™¥Ì¡OÈq€Iþ÷¹  3©ÿÓûöøª3©ÿÓûöøª3©ÿÓûöøª3©ÿÓûöøª3©ÿÓûöøª3©ÿÓûöøª3©ÿÓûöøª3©ÿÓûöøª3©ÿÓûöøª3©ÿÓûöøªkɨƥ˜Àÿ¦gÿŠ í„¥tï%Ñì§—Rû÷À·²óþ{Áÿ~ÿ@ËÏùïýø?ü]/?ç¼÷àÿñtl¼ÿžð߃ÿÅвóþ{Áÿ~ÿ@ËÏùïýø?ü]/?ç¼÷àÿñtl¼ÿžð߃ÿÅÐZüƒ¢ÿt!H ÔÀ( € ( € ( € ( € (´²ÉÎÕ]Ál\Ž[''Ø2yê1ÏheY  á”õSèhôŒ²ÒUBcfÇÊ¥‰'sFrH8\dKzcŸ+ŒtçÈ´µŸ¯ü×Ó^ªT“Wj÷ü?¯Èµip'FÊì’6Ù"ƒ§ð{ŒG±íÒ»pøˆâ!Ïpv/øùºÿrç-tŒ¾œÛżÜXíÝÀRÜ OZ¨«²dùPÆþÓÚJYÈN8ÿ‘*ù#ÜÏÚ2{y|è÷ìhÈfR­Œ‚ §¸¬Ú¶†©Ý mÒãþ¾þ‹ŽÆ2ãP6Ë$‘*D$-\œ–ùô¯‰­N¼iÓvV¿Kþ'E8G‘É”'¾{WhdºUÚ¬þd˓³ò)ùyèqœdôäÃæ5¥ÎÖ{ylí¦¿•í®ÛJ„th»$-†öC`>Sõ÷çóú€x¯¡„œ ¤ÕŽ)+;" ù‡ÿסÿÚu ( € ( €(èò‹ýÑü… /S € ( € ( € ( € (  íBŠÒá· dCó66ËÁ$ÉéŽMIc ´6s¡d s׌‘ŒãžÝèã(e*à ŒF¸¸Rˆ¤dž\®F0}:Ÿç¤rê1I‘Ü4¬ P@ÀÇ\{ûU%aà‘ÁÁ}ÁÍst…ðàœ¨sÐûúâ¥Ç°Åù™‹Èräcè=?Z¤¬"½ÿ˜#FC&ÅlÈ"ûûpy¸;N;€Fpy±^Ó’ôúvßåó³·]¼irÞÒ3mã¶¼žÛ÷¯zêï#–WŒÄC’ ÊÊaà•ó0Òuê¨Í^Í·¿ºü¿+y_¹ÓQ8Eµ§ëýw5mm¡´ŒÇmƤäëÿêÀ€8ìÓ§ JÐVG¥);É‹ü|ݹó–´$­­û¬ªX*Iœc€caŸÖ®̉«¢I9$gOM±È‰ZЄöŒœrMiÌ—ØüÌ97ä:ÅÕâ‘ѕէ˜†SG˜ÜŠÊ[1Ø}·Kúø?ú.:‘•fǨO4qÈÿè ¨@ìX‰@T “‡ã ç’Hæú¼jVæšÒÉ~e¹¸ÂËúزön.ˆþÉóT̉wËæ0 “Œ€# ž762M!…¡ùU¯ÿ—Ror­¼²M¤ &C‡;‘³”;ºsÏ9­-Ë “ºÃþaÿõèö04h € ( € ¡¢%ÃiÑ-%™v™ŽXR÷•{ÿ@éÿ︿øº<«ßúOÿ}ÅÿÅÐå^ÿÐ:ûî/þ.€*÷þÓÿßqñtyW¿ôŸþû‹ÿ‹ ʽÿ tÿ÷Ü_ü]Uïý§ÿ¾âÿâèò¯è?ý÷ÿ@•{ÿ@éÿ︿øº<«ßúOÿ}ÅÿÅÐå^ÿÐ:ûî/þ.€*÷þÓÿßqñtyW¿ôŸþû‹ÿ‹ ʽÿ tÿ÷Ü_ü]Uïý§ÿ¾âÿâèò¯è?ý÷ÿ@•{ÿ@éÿ︿øº<«ßúOÿ}ÅÿÅÐd¶º• K¥Ìèz«4Düz€`¼E šdʪ0x€þû ò¯è?ý÷ÿ@•{ÿ@éÿ︿øº<«ßúOÿ}ÅÿÅÐå^ÿÐ:ûî/þ.€*÷þÓÿßqñtyW¿ôŸþû‹ÿ‹ ʽÿ tÿ÷Ü_ü]2+Kˆwù:L‘ùŒ]¶˜†æ=Iù¹>ô£ÆöVmî?ʽÿ tÿ÷Ü_ü]1 ¼Vflà¸üñóŒãøÿÚ4¾Uïý§ÿ¾âÿâèò¯è?ý÷ÿ@•{ÿ@éÿ︿øºE‚ñ7mÓg›qùãë€?¿è2k9æÇ¤I&Þ›ÌGøõ4í°Xû,ÿÐô‡ÿЧÌûŠÈ. ž6_ìù-â^ùjóèÿ*–ÆW°ÿ˜ýzý§L ( € ( €%ðwü“ê?ô©j€ (Ÿö¶æ .k%-¤apy ƒÈ4iÛÿÏ;¿ü—ÿ‰ ûNßþyÝÿà$¿üMÚvÿóÎïÿ%ÿâhþÓ·ÿžwø /ÿ@ö¿üó»ÿÀIøš?´íÿçßþKÿÄÐý§oÿ<îÿð_þ&€í;ùçwÿ€’ÿñ4iÛÿÏ;¿ü—ÿ‰ ûNßþyÝÿà$¿üMÚvÿóÎïÿ%ÿâhþÓ·ÿžwø /ÿ@ö¿üó»ÿÀIøš?´íÿçßþKÿÄÐWVµbÁVè”8`-eàã8?/¡;ûNßþyÝÿà$¿üMÚvÿóÎïÿ%ÿâhþÓ·ÿžwø /ÿ@ö¿üó»ÿÀIøš?´íÿçßþKÿÄÐý§oÿ<îÿð_þ&€í;ùçwÿ€’ÿñ4iÛÿÏ;¿ü—ÿ‰ ûNßþyÝÿà$¿üMÚvÿóÎïÿ%ÿâhþÓ·ÿžwø /ÿ@ö¿üó»ÿÀIøš?´íÿçßþKÿÄÐý§oÿ<îÿð_þ&€í;ùçwÿ€’ÿñ4iÛÿÏ;¿ü—ÿ‰ ûNßþyÝÿà$¿üMTÕocžÂX¡†í±öIGqþÍcZ cûû[±å[”oôi8o“ŽžÆ¨ žqÿŸ{¿ü“ÿ‰ fS Œ¤¨ÄH™23Œê(Z( € (_È>£ÿAZ6¨ €9MVâh-`ò&’-×YØåsûÓéWoÛï?çòãþþ·øÕÙ}¾óþ.?ïë@g·ŠâG¿FÕg §×#|™ŒœûñéšJÍ]w·ÎöüÇk;þðŒ‹ËûúßãO• jo¼ÿŸËûúßãEÛï?çòãþþ·øÑdöûÏùü¸ÿ¿­þ4Y}¾óþ.?ïë@o¼ÿŸËûúßãEÛï?çòãþþ·øÑdöûÏùü¸ÿ¿­þ4Y}¾óþ.?ïë@o¼ÿŸËûúßãEÍâµÄ+¡É¨ÜG|öââ4iX ,SžHÚIœŒàಽ€ÛŠêát9¥Yå5î ‡;ˆò‡ÀTÙs—V0‰’K¶ˆôq?–ìד,ß“—+·{/ó¿àn¨JöêAý¥w>Ùp2̃2·, zÃóö5ßOF¤ù"ÿ®«Õuÿ€í›§(«±ßo¼ÿŸËûúßã]6DÛï?çòãþþ·øÑdöûÏùü¸ÿ¿­þ4Y}¾óþ.?ïë@o¼ÿŸËûúßãEÛï?çòãþþ·øÑdöûÏùü¸ÿ¿­þ4Y}¾óþ.?ïë@o¼ÿŸËûúßãEÛï?çòãþþ·øÑdöûÏùü¸ÿ¿­þ4Y}¾óþ.?ïë@o¼ÿŸËûúßãEÛï?çòãþþ·øÑdöûÏùü¸ÿ¿­þ4Y}¾óþ.?ïë@o¼ÿŸËûúßãEÛï?çòãþþ·øÑdË­Gìöú<·,Ò4Âh÷1ÉÎõÿ ÍèÀÑS -P@Kàïù'Ôè+RÕP!­ÿǵ¿ý|]èÓZ@ š±…qúç‡ïî-µ©¬¢îi\B¥ÀDñF¬¤öår3ŽTv51\¼¾ºús]?—äÚê7«~š}߯ù>…H<+<Ú­á¿‚øÉp× ö¤6ÞS£† °& Ó ŒpJN4ß/ÅoÆ÷¿Þ¯¨—Ä›ÛOËoÓMÍ HÔÓR¶ºÔ#Ø$-u:‡dØd ן‘ÔdqòVªÉ»mÓÕ´ßÉYýäYÙ}ÏÑm÷½N®‘a@P@…wá[ ïÁâ ÑçMkn±[ÄÃåƒ3yžçæôÆy8¶·ªþEù?ëûÿi _hE)¼ÝÖ£yhCÜÛð¸°õ¯™†RêÑN-+ë{|ιWP¨Ìé-Z+E/«-ÄHË‹ug,ŠËò‘Œarãž«KéIJZÚÝt¾×·éÓî¶R¬¥¢<ÿŶfã[ÔämµÇ—g7MÌö`´™’% KûØ §åÍz´[“ÓÞßä¿>—»Ð‡­’WÑè>ãÄòø„Çi«éÐÚ«ÅäE5Ò/Ú¢eR]TÆK’KV@2#ƒ”Ü”dúë§k-4ûŸUúBµ¢—–¿?éw)ÛøPk y­uÑ~%´G¾‘c‰ÆžÅã¾EùZC‡ÏÜÏ@kGe7û·Zýúv×OO˜kk­õÓú×OÇ ëßÞÅS]V´IfXnc0 ï ‚—Ë“k3) ´œ x3î¯÷|ÚNÛÙ¥ÓõCÓTžškòÕ_ñ×Ó£-íÌ[_ÅtÐN ÔV(Õg‘gÈM»rIÆH1ÛõÌß•o¼c÷kwÿnÞý¾@µµûþ›|ö-Ùê×÷º½ŽŸ¯½åœ³"›ôŽÙ1HÏÂíÈØ‡¡#vkT½æº+üíËþm]oë©7²O®Ÿ-ÿ¯+y›0^jGÄ­¥¼åBÍrÒì_š "të¼·Npžõ0Ö÷éuêÛºü.½PåîÙ.¿¦ÿ¾OȦ5˜l&ñ$6×íª šX-Á’B-ÐŒ&w7CÓÒ£›÷JÏ«¿—¼õùn]¿y¯‘F=~ž8õÿ?L2B²kaýÁerÉ»*ƒ,<ÌqV÷³Ñ]ÛÎÉuÛ¾«{Yjf›µÖöW]µûþ]7z qâ9Ó[´†ÃX[˜x!u–â ×!È̈‰Já‡ÌFAãŽH]ÊÏÏå¦þWß­ïæ‚zGOë]¿O/“(Zêé­,vú™yck‘;ILöJn3à(#åbÿ6GCŒ ŠoÝŠ¾žêoäôíº¶»\©é'mõÓåýzÚÆžŸ¨êz•ûZ[kr›4[†Šö(¡f¹ å`çfÞÝrß^h“’„¥³Kõ—æ’üÖš [™EmÑiýw±¹¥ø‚Ù´Xîoç 461]Ýa ¬¤îà²Ü ž+z–Rim{_yM¤žÿäjE{o-ä–‘É™âduÁáX§=9Ú*ŽþZëGܯ©ÜßEw¦[i–ÑÝKyrÑ4Lû *Ã,„)<ýß°BW;‚nÃ-ZÜEs–%I †R¬¤e<« €AL h ñüƒü=ÿ]¥ÿЫ'¸ŽŽ?¸¿JuP@Kàïù'Ôè+RÕP –V×VJ÷Fàînù\ó+uÚ©;[û/Kþö§ÿ€¯ÿÆéó0ì½/ûÚŸþ¿ÿ£™€eéÞÔÿðÿøÝÌû/Kþö§ÿ€¯ÿÆèæ`Ùz_÷µ?üþ7G3þËÒÿ½©ÿà+ÿñº9˜ö^—ýíOÿ_ÿÑÌÀ?²ô¿ïjø ÿünŽfý—¥ÿ{SÿÀWÿãts0ì½/ûÚŸþ¿ÿ£™€eéÞÔÿðÿøÝÌû/Kþö§ÿ€¯ÿÆèæ`Ùz_÷µ?üþ7G3þËÒÿ½©ÿà+ÿñº9˜Íiÿˈlc¸•Rô6)s‘€G'Ò„õ»¬jF±=˜"4iº)~U-¿€rÌ<xª\±VZ!5wq.íïnP+éI×­´ŠT… ÎÚ cãÖ×qX‹ìŸóçqÿ~›ü(º(FÓ®ÙJµÁ`þé¿Â”¹d¬ÆÈí4‰ìíb¶·±¸Ha@ˆ¾[(&©ÊîìJÈ—ìŸóçqÿ~›ü)]}‚óþ|î?ïÓ…@`¼ÿŸ;ûôßáEÐÅ¢ÍÔ×1Ø\ § $-‰!z`2zzšIYzþKô«¹7Ø/?çÎãþý7øQtö Ïùó¸ÿ¿Mþ]}‚óþ|î?ïÓ…@`¼ÿŸ;ûôßáEÐØ/?çÎãþý7øQtö Ïùó¸ÿ¿Mþ]}‚óþ|î?ïÓ…@V×ø³ÂÍ4ƧP”eÐ¨ÏØî}jdÕ€›ÇSiÖwqê:SMs¨Ü‰|Û;+in~Ø!+‡÷jÁ%BU76áŒ+G)ØK¹¡IRÊì+¨`ÝÑ€>ª@ ûkK ö Ïùó¸ÿ¿Mþ]‰cx¬¼>’£Fâir¬0G>•›Ü†?¸¿JuP@Kàïù'Ôè+RÕP=#þ=þ¾'ÿѯ@( € ( € ( € (  ½fÎ4±¿»‰çŠ)¤Ýî£pL€qØví@®§kz‚Ü6·v7vó iÂ=­Ðrïþþš?áÖ¿è9wÿMðk_ô»ÿ¿¦€øGµ¯ú]ÿßÓ@ü#Ú×ý.ÿïé þíkþƒ—÷ôÐÿöµÿAË¿ûúhÿ„{Zÿ åßýý4Â=­Ðrïþþš?áÖ¿è9wÿMðk_ô»ÿ¿¦€øGµ¯ú]ÿßÓ@ü#Ú×ý.ÿïé þíkþƒ—÷ôÐÿöµÿAË¿ûúh†«à½cQ’Ɉo"û$Í.UÎâ)#!Oð’$?0äv à€w^Ñî<cäZÝ›5Œ›­1á>_Íò­Å’ãù«¶Hâ_¿*3º(NÚ×Ä}—:õßï`2œõùƘ¿³uïúÝÿßÃ@ þÂÔ'¸…ïõ)®VÜ¢FεtJ0 zSh € (_È>£ÿAZ6¨ €)éñèÿõñ?þz£®_Eˆ›¶e ³¢8,c8ÚÄw‹®â=³òî¯;U¨®K5»]mßÓ¿ù\é£ ]ô}=Ì­á+÷*ÍVá­Å²Ë4i… ^`r;ü¬H g€«RþÊKD“O˦ßðú2±KÞës"ãÆÑøªëN†ûIÁ¨CjšP‰¾Ù,n±–”0“€»Ùîñ„<Ž£Õ¥ï¥~¼×òµí¹vÜä©î^Ý“õò_ÓîZOˆú4Úäú=¢½ÅÜfhãTž Í$a‹ O3zŸ•€gUSޏ œÜ›¤êG¢¿Ë¿ëmíЧY(¾é}ÿ×C3Á¾6¸þÌyüC®d[4Ôn§š;aom #0)å¶â¿!0géŸZÚiA5ü®Úï}4í­úhºµ¡*òžv^Wý:þKv¿´;¸Ñ¡š[–¸ŽÝ-¢¸µ»H¦$YŒC;†pÙÇ#*ÏDºßðµýwéÁŠé&ÞÉ_ñ·õ{Ò|i1ÔoSPÓu5¶kømã•¢VÓÌŠ"±È7'{œäâˆ.eß›^örýe÷Ü'î¶û%þWÿ†é®Æ‡‰ÉVú2þZà¾[a[’Jwyœœ5âý[ªò¯^nÛþ:½÷Ôìç‡%ïòþ¿?#«¯tá0îü-er.˜OsÅÅØ½Kˆ™D–ò„TÌd‚Ú¸ ‚f â’÷R·Kþ.ízkù=ÒczÞýRü6ù†Ÿá¿ìë©^ÛWÔEœ¯$bÞI‡sä±Ǽe‰lÀ'Ž)8§Míkz/ø+ß@M©)uüÿ®¶°ÛOé–ö3Ù±žh.4ø´éGÅpT‡9#Û«›s¿K»ú=6û£î´×Oó¹Þ¸ŸNk+ŸëÆÜfD´l¦ÖRŒ¾N×RÀž#œ©®}ÿ­¿+ik}Í¿¯ëúÔ];Ázf¥:ÕîVÜ\ÁrpHhDa@ãîþér=Î1Æ)ÉÝ>×üoþçrytk¿õýt4umÏU»Ó®n„žf?ŸÖÀc‚0Þ£;[ª§µL}Ùs­ì×ÞSÖ<¾î2âðlV—&çJÕõ=6gßç4óƒJòÂHØ|­#à€ 4CÜItÓOEoÅo`—¼ï×_Ä’çÁš]ÅÝÕÌ8’êê+—!‡ÊPchã…l¾áÔïnFx!îr¥Ñ·óäõ^h%ï&ŸUgýwéè‘ÐÐ@O[ÿ5÷ý{Éÿ šËð'ü€b ‚€ ( € ( € ( € (  :çü‚æÿ€ÿèB€9Ûù‡ÿסÿÚu@hÐ@P@/ƒ¿ä ŸQÿ ­HTP@± BÊ)U-í¥O6IóÙI åºl>¾´“'Šïcr¿ØrœdKÇþƒ@ ÿ„ºóþ€SßßþÆ€øK¯?è7ýýÿìhÿ„ºóþ€SßßþÆ€øK¯?è7ýýÿìhÿ„ºóþ€SßßþÆ€øK¯?è7ýýÿìhÿ„ºóþ€SßßþÆ€øK¯?è7ýýÿìhÿ„ºóþ€SßßþÆ€øK¯?è7ýýÿìhÿ„ºóþ€SßßþÆ€øK¯?è7ýýÿìhÿ„ºóþ€SßßþÆ€!¾ñ5åÕ”öÿØ“'&ï38ÈÆqŠÔðm¼–Ú4qÌ¥v4¹@P@P@P@PsþAsÀô!@í‡üÃÿëÐÿí: 4h € ( € —ÁßòO¨ÿÐV¤ ª( €å§÷Gå@–ŸÝ•Zt~TyiýÑùPå§÷Gå@–ŸÝ•Zt~TyiýÑùPå§÷Gå@–ŸÝ•Zt~TyiýÑùPå§÷Gå@–ŸÝ•Zt~T è1@ @P@P@P@PsþAsÀô!@í‡üÃÿëÐÿí: 4h € ( € —ÁßòO¨ÿÐV¤ ª( € ( € ( € ( € ( € ( € ( € ( € ( €(ëŸò ›þÿ¡ çl?æÿ^‡ÿiÕ£@P@P¾ÿ2}Gþ‚µ mP@P@P@P@P@P@P@P@P@G\ÿ\ßðýP;aÿ0ÿúô?ûN¨ ( € ( €%ðwü“ê?ô©j€ ( € ( € ( € ( € ( € ( € ( € ( € (  :çü‚æÿ€ÿèB€9Ûù‡ÿסÿÚu@hÐ@P@/ƒ¿ä ŸQÿ ­HTP@P@P@P@P@P@P@P@P@Q×?ä7üÿBÎØÌ?þ½þÓªF€ ( € (  |ÿ dúýj@Ú € ( € ( € ( € ( € ( € ( € ( € ( € (޹ÿ ¹¿à?ú vÃþaÿõèöP4P@P@Kàïù'Ôè+RÕP@P@P@P@P@P@P@P@P@uÏùÍÿÿÐ…s¶óÿ¯Cÿ´ê€Ñ € ( € (_È>£ÿAZ6¨ € ( € ( € ( € ( € ( € ( € ( € ( € £®È.oøþ„(°ÿ˜ýzý§TP@P@ø;þ@Éõú Ôµ@P@P@P@P@P@P@P@P@PsþAsÀô!@í‡üÃÿëÐÿí: 4h € ( € —ÁßòO¨ÿÐV¤ ª( € ( € ( € ( € ( € ( € ( € ( € ( €(ëŸò ›þÿ¡ çl?æÿ^‡ÿiÕ£@P@P¾ÿ2}Gþ‚µ mP@P@P@P@P@P@P@P@P@G\ÿ\ßðýP;aÿ0ÿúô?ûN¨ ( € ( €%ðwü“ê?ô©j€ ( € ( € ( € ( € ( € ( € ( € ( € (  :çü‚æÿ€ÿèB€9Ûù‡ÿסÿÚu@hÐ@P@/ƒ¿ä ŸQÿ ­HTP@P@P@P@P@P@P@P@P@Q×?ä7üÿBÎØÌ?þ½þÓªF€ ( € (  |ÿ dúýj@Ú € ( € ( € ( € ( € ( € ( € ( € ( € (޹ÿ ¹¿à?ú vÃþaÿõèöP4P@P@ÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/new-location.png000066400000000000000000001276201203611042400315620ustar00rootroot00000000000000‰PNG  IHDR ÌöÁ\sBIT|dˆ pHYsttk$³Ö%tEXtSoftwareMacromedia Fireworks MX 2004‡v¬ÏtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'ôprVWxœíYi–£6–†eBÉ;ÁA“ÎÌØ™É8G®Áï\‡ËäyÜ%7ˆSU6f±éîÎ{­O Í@éS-øïÿúGü)þ8Ú㱡¬m-Vêc[›Š:¨«¡nVê¶­¨lš¶©Û¦jŽôsCíŠú5uÝVu+¨Š¦ª©¨ëª®QUµh„‡ÇÿÛb6i(á»b,^•EYÌ]žï ÌÒ2 Y˜Œë˜BØ.¬€mSFØ<›”;½Ù* bK24Ë.T©r(žD–pª§øÌLb ÐÌ2ˆŠÂ+2ÆñFe²ÁnJ¾õþÃFíõá õ“ÖŸL¹ƒ<µ÷ Í$$®’ÄÉŒ{˜8 ICA²qT4.¥‰‡ŸhØ8½‘¾ËÎÆXýï~Ü {Å/Ÿ±„À.‡\‘ŒÀˆK‰->›ŸÆ#1ƒ›¹NÅŠÆ@Áü³ˆç¥ÛÊl7p6=i’Ùþ¶Î-3 0x…àYQ!ŠOé';#Aïž‘üÜØYO ³ú-KuÓ²—¡Í?N«ÀƒF/ì§LК™LBÌDžÙÞA7¤½:%n&ÄæZû vS{;²¿‘G:ň¹ªø1•­:€]Û &v¾g¤ j(ßòïÂ#œÜaöü¾ü­ý¥y P^ÂÕt(¥%ÈÑ“ÇKËDo6âo#"…ûô·B“ÿcàÏ/Ë’®ÑßpNß…-Q5t§¦¾ò Pê=M‰3í^ º#mX¿]È?}ŽþŸ…Ë{gýŸøcê´üÎ Oiݳ×>§ÁÍWô;åE!dé8§pMÿ_â ØøPÿœ;4vгÄ×ìæø xzzˆIaÖ\ö*°¯71¯à?ëÿb÷»Šá´ íœÿ”õõâ€?oS—Â…þƒÞÞûtâ¶;3eÖïw¡ò¿ìRº éR¾—ý/ƬÿS+ß ðÇ™þa—.|† ý'ÑÏ¿~MMä7ß ®<äåòç㟌ÕSh\]s ˜wþO Ðû¨¿¸ÌÇbú§l)/ú_}œðg7>Ã…ÿ#õòB¼à‰É½ÃÉú'# ¶~³¯zg¸Ñÿ&6åiç;ënì©öÝøÿíÿÜê^ÇYÓ*pçÿ¼û‚îÅš+&è€?tƒûÖ!N¯cùŽü1ÜèŸ_ì;ÃìåâoÅÿ>µn;&}Ïû1Àuý;Ç-ÿ_ô%ç5ƒ½îÿ—_´^!f7ýŸ_ºº¯3pÀ­ÐWüÿ¼ò?¹M–.ì-Ìê-Ü™ÿüûÿJðú`]þ³þ¿¼þ¸»ÿ¯*ÿÞüߺþ'üUù÷æÿÖõ?æOxèR­–V¥ëáááááááááááááááááááááááññ)àÕ¡ÑާHmkBFúÞÊþ)¤3¡ymkTSxœí][sÛÆ’ÆæÇ‘|O¶²û¢ª­­}ŠîEQ”ë”-çÅ‚„ÍYÊÑ-ñañ¿owÏ   @Q¤ä@²5 À ¾îù¦»§¼iÜŒ[­Ñؘt~9]3°êΰ69Ùß Çúä=+Þí5ñm¸“ݽ^86=wÒÙî†c«öºVÇŸI§{Œ×hìÀ¥Bú™´÷÷oÆ6üÙÚì]޵5­¯Ú­­ µ3Øi§“½Ã¨Y‡š3¨1´Ÿ v¤ý GœN:Í£>4ÝØ„naÑ­¡7i4÷¨¥ƒh ØíOÝm:¨Û¢ºî.}ÚÙxCÅÖ!¿Àv‹>wztP«AŸZ*ÙÎn{4®»“FUöØÕ{]ÖÈ»+ö6±—‡Ø+}Ò<2Fc /Ó<²¨hÁN ““BÈü— mCÛ„½Wðù'Ø:…Ò×.¡f°LÌŒ[bfÜfO8f;Úàò»ö ê®´a.66Ãf˜ƒ®Ä&Øè9ØÃÆ2K£cØ ŸÁã3x<Çàñ&Ýö¯ÐJÒíò²}¨9>ìàÅ|ÅÜÒÎA¹ÎFP-Pºø‘q0ᄦéä¡é@SÒ´<4%Mó;: B×U@Øm7XM—•qH¿ã6h<Ž´€ú‚Ú0CÐÅ ­[×°o0sÔ*±4B{±ãÖ æ·~Ùq›…ÑÓFûP{6ϸ•Ñ)¤k]ØAƒqntаZ‰Y²6úÝ`ó"…Í-Gׂíˆå!$(½I}¢»Ob«I ™‡‘yOÈX8J/•(5I›ú0æ¶ûŠ“¹pœž+qâ㯃Ég0©-Í¢®j4Ãý¡8kán-ÂéL£«%¹&x`Ïié A£3htΠÑÐ<åÐl‚b\À ߀¿×è;P± EÃǵ@T? ÏΈ|»Dƒ[Îý&CÈdÙ !›!d3‡Åšðøð6È]e0~sÔëOP²kæøå#©ƒù@u¥ÙÏsže(K¹ÏsƒiÖ‹ùœƒ¹ wJ!˜Q¸á‹4jQ)?Ãö¹vž áÃÖ° ›£†n—·ŽÎ$B@$Ã<ï99rM¯0––ÇýhË”Æ.@× :/`È dVèyf…9'Ùƒl^€~q:£ÙÈèKº%¢:Ã(Ȩ¨³u‹1†“Ë'Rª;*­[Ñ@w€v ¶Oô,WÍŒúbõl±Á†»Ñ³o9Fï`.¸R¢S“TL²:òb1xjsåøP|‚¨é?‰ðúD¾NãGaS¡M[4o"åçÛù^†(“¿”W)›ÇJ}Ž™5° Ïóʆˆœò©¦<’m"ÿ«Ù«A’¡]`æ Å̉öDA #nã@’M²x¾®°FܘY"6Yf—ˆNiˆ'íeà¥9c¦?Aê\ß!·Lðd˜¢ü ¸¸šÃ!ÃLž4ò1›Ç@V“"­”dC˜åÇxd;&ƒŽaX ;cX˜#Å3C¥óºE3ÈšKçñÍ’®¹sÆd‹ dÓãV 9%ѲLZ.CËeh¹l(3Ä~( eœc:»%p|Y+¾öیЈÇP¬3ÉD‹¡¨ßE›¡ÈTL #® "ŽfŽ€YÅB$uŽ$W<—kžkg­Ì 0Cuä)[){´<h¿•Å…´²˜õ¬VKÌ8Q÷Î4ÁÐ@vâ3 ›{²ÕS0d‹p™®‡±:E`ø”tC;à[Cí¢ˆÂ–Øp†EB2jShAÖ£›Z‚oˆˆL¶ù¨ÆîqB#Ï»lU0æ¢/&™£V¤ÝF:=¡˜¢í’Ïò‰û.ŸÈV¼P&'ФJcYOp#›ŠSܨtãÈâ)dñï¼âP‰¥ˆý¢ìQ)»t2ºgæxtS³oÿäÎ->UL¡z†7Làù-ÇóH‘¢Ö µ tJf­Nøó.-#çÏÎ’&`1a‡„d”š~Fî¥ Ÿé±‚æƒMšÖOLÁùÁÆ’œ®™¾Šaˆv5.ÕwiÇç«ùs„¯tC @Šö~N+ð¨&50%/dÀ-iæñ̘‡5¬ÇÕcÀ<]+àÀžlÕàFGl¤:ц0ÃÛ>sw:Â즕(žDîßà·…à—™ýÜèt†Eis‹ÒfØ[ÞJ‹JBš¡¨Dš&q˜½Ã¿(¼ë¼Wdyb*ÊeûG„þÅ’”áo»$ÅÑ#ɵ8Õ#¸F¸®]\œF–$hÎfŠÔž6_´*Æ¿µ9ù·…ĠЗVR8œv?A¿¶Š~œ2O8|Ôá ¡P&—¦˜­Þa€v;œšùgÚ•”üŒýŽÆû‡7(Ás.§Èô”¡ 2Ýgi,)JúD–ˆk Ù+ŸÈRùD”Ò™•ôYÆ2–|ÈÇ}˜÷¡¿ Cá¶Ö¨ÚH0U2{*>EΤ¼X\‹¥ÌHËБM_,å¡„2 —(šœhn»U”M™Å…€§q#r*ÅFç(Ư:öR2²ˆ}tøüs®}–&Ìï>ÓB\ØÁ‡ TŽÍv“zê—PSW ¯®‚—…æÉ—#=™!oò¡N¥E%ƒÌå˜ÉŠ™ Úc-ž‚“?™[*b”–Z•¦¥Ÿ{HÉÓXõíÙ·h&—o¨Õ„Û°Ø›}ÀGb³n´†]au„b2— ¦S3é_0Åû4Éç#ëÌ»[bŒ³É<æT•X„€‰_‰,îoñý-¶Ÿ¼)‘fbÔøà®1pÅ”NØî²9¿œž¾'<ó'Ÿä^hÙLàYä¹®¨}e–˜d")'Ÿ,‹3+@œ\€DÜÇn*— ŸXîn¡Í©¯o'¼!AˆeÜ¡\ìhX«bìjƒÃg©”1ðÔfHê|­¢îN•±#B¿©ŠPpF>Ù1vFù59;ˆM3Ÿh5ƒSÃTŽ…¬“î¼a£xl.šÅ-·üê˜Åg=‹µ+lÈÝ´ 9 ºg‘yNÓÍ'pÓùRxþ:ÅâRb•øñ°“§L…B ¦’fÒôQ§]1»é‰z‚ÏcþIÎÌY›¥1¤åëIŽölsgî'LÑž) ƒd@5ÅÂ#-Sб!È6gM¼ERŠÑ¨û˜%…¹Þ’ÏЃ—ôø*ìñi JòÀG™òs”‘h–2ST±­ÙŠ$M*r9ÓÑT»Tè‰ûJOù†’æ*.]eVNÂÊ'iÅœ}/éë—ääG\ –Öœ#m¡V$?º¸JËl ¹ÑÎât£Êà´>Å Tt‡\Ó?òSýÅRÊdÆlc*PýÆPe K…ìUd9RJjÙè¾z­éöøQ²[,¼ï+C!Á"PÙžR"(u'ŠÑ§=£¢Zxû¯ˆ2g=ñ¹-tŠÇ=% ë³Mz‘;#ùé ÖÁhN¹{L¥y(§«î%טB%õ©—í¤ì£@=ŽUV½üB€éê7ëãác¦®pƒ5‡ÍöPš´ö›7ãVü)ÜDÐ¥€Ý(öˆRHÐÒ >“PŽ3k¸Z ‚›/ZìÖ[Ûd!µ:M:¤Óau»¬8ÁbÒŠûr¬Cüht{¥.ÅkŽ3kæë’ɺÅNÔ£WП zÅ€[:W±÷)\Fv~ÀWDQCí7°QÅë*Z;oøÃ-vñ=ØÞiã«XZì+:ýLbU†¨âï_Áº÷X§ßþ:Æœ—UøÓŠg,„‰úL¢~%Ñ2]F"® Ÿ7?ÂØ:¨;Ω›Or6“œ]Inž±È$pE¾õ…ÀK‹êcŽ s+v5ŒJ¤eD:µ­|z»×4Y9äë$bÿqÆþùÄå0q9•´æ‘V›ŒÈ ö,zȱÿ8cÿ|Òª1iÕ*iÍ#­!2ˆðR™î?ÎØ?Ÿ´<&-¯’Vi=ãÒÚæÏ¥þNü7Nžqù¨Ž8žyÄ|²¬3YÖ+Y–‘åc.Ë­H_FëÔaôTØE4êä½óÉ)`r *9•‘ÓZäÜáXa¯ß‘òiìOkæ“Ù€ÉlPÉlžYí%É S³ÚtÿqÆþù¤5dÒVÒšÇÙnOÃÑ‘¿Y‡ñºãœºù$2É…‰Ž=Ôh¨õµ&‰âEËE*‡P¹þxFý|4x¤˦C´Õ4Ÿ¬Ä';ñ©‡WLv(€]©i¾šÎÐKÐ6e÷ÐB -ûíP&œƒÉUõÍÔ­ Ù7ýµé‰Z£_¯ýd­íDµC;„O‰ZWTºþ0ÐdeÍɾ°!÷H–ÎÃëþª”b+EìåP7Cà–]\nR#é鞎ª®FÒuÙ@P"‰'ÖÂ,$YÃëÿ *½îþª¡Cî4(-`&q²fÕý©ëzß,HœÅ®³*h^$ ‰èR’Uìæô×δoø?³Ûª©ç®Yõ¼Äáä0¿'*b™<3*¢¼÷Õ‚åìqW¬ àWÀ1hgéðëi'úºéûY÷?¡:YY—ÏÌ…yÁ ­ êçj¬é“…uEAÊ +ç%]·Iœ{@¯ÿÙÓšüœÿÕÆZj]Í€_]3µŸ`;€=¸…ûôxì«AN¿Yƒ¿Ôà§I¢Õµé"_šy‹ÿ¡é‰#×cG¾£‡®´OüØo°G‰£ŸÅŽiS,ÜSÓéœm¸*°½‚žt†’r 2úôŒ¾åï#IY|+Öwa%ÎxJ/öºýÈ:^naúR°&­ŠO¹)§¿‘4d¬¦gE=ŒoIw¾½9%cu8C /bGP:èÿ"ÙUâ,C:‹=‘MSâág=Öþð¹æ$Û}NOõÿÁ08þ©ó×à|=öki¡„å.Âü+„±_ù Oè §|,«ú;[:³KÏØè.TgÆzžÓì« @K€S|s³î=­]Òå?@}íŸl”ósAoÑk½L1Bƒ¤vEã§Kšw•©¯Ä3XüÈ‹L•Ï\‹Î”Ç5‰=;w(‡ëcÅÎ;ÅììTì\±ób絈¯I¨ùCW ýõ2´[1tÅС»€µMÅÐCÅ -smÅÐCßg†þ>ÍÐüxZÛÔØ—ÏVœ]qö×ËÙfÅÙg? Î^çœý+€_¡í ÃGWýõr´]qtÅш£Eä#ÆÑCW ý3´U1tÅÐ÷Ž¡ú´âÌ»iþìlTì|عʼ«Øù!²ó²3ï*v®Ø¹Ê¼«Ø¹bç6áW8÷á1ˆ¢ÐX=$™zRšM]‰Sf3¼VT”#²tün4ОKŸ&´`ùñªìö—§‰·BšýÑF¨Á¯ Çϯ‰e#VŽ‚nÄê)7ö¾¦ëoÄîŸiÝÐÏ‹hæçãMû‡d”;rÏþë¤5i _’¤.ȾúÀçƒðù£ÖÏ”xòœO\o’gý ZvR³ã€4ëª`KÏbÇoe êùÏðW¾¾QðÞOÞÝOÏ*~÷Ù-eÝ}~+òÝǯŸ¼û—wÿQßUžeóf! Ÿ©êßs ³Z|¡D¢HkOh¤Û‘=65"}}·¨ºw2ŽÓ&ÏSõï™üÖž+±˜ÝÒz ¹ ã^°ó¨¿&Ïk#ΖK[R·~–6"–¶+–®Xºb銥 Oø‚b%8G°ž÷ã{¸Úk{Ù¿îJ¤þTûUÃ÷V|^‘´³Û/'å:ωG»Î|“FæË÷áìŸÈÂsɆèC9$«`@3’E³Ì¼„üo~ÇqI{Áß@ŸdÏ[uæ¿ ôµÓ„Mò jò É?'…ÿ¾éç÷¡œ8€—Gv‚KÒý‰Žgv¾M,’͈–EG×ÉwuÉßóè?eÞ¼"YO#'q-Hf|ƒ½”˜'ëÜ–õŒÄlMèpÆB=Z•&äõ¡,ãã,lQ¦†Mv¦I×öH0 Á!M@^IdÙ4„ÄùÁR4áûh®À».Ë?dž=/'¬E¸o²KË£Vµ|Û˼׶×cžctAùºgÑ•Çô´¨Ùˆ2õ–9gõâ6R±ï›T£é:qßh…ã’žk]„E—w}Õhw¤ÑþcÎùWyyñ4ïirïÒGvûå´ óMúïðX_¬ÂZJÛDfã}ãyïrð—[-‡z@#c ˜ãÌ" ìI“td¡¶bÔÁŸkì !¡û›älLk–ìeµŸô|:ê´#Ž*Ƴå7$Iè”ÛÛ§xP@2²È^ ¸¯ŒzFEä­£Ç4$¿ í¨‰Ävªþ^ó2ZÇ[Ñ Þc=Q–Ì O•ïR_ΗkZþ³Ë~^,™•½ø7̸©sf?1fHgÌzb íç²ORÈ9Õ3c,ó¤zfìëyfÌ“´¯ø;joþ:$EwY+œ/‚‰Ë?»{÷Lœ~SHÅÅ}\\üéIù ¶ïieù ô³Nس“_`ÛæwùæÛCP?ˆÿ–œß–n¹ßbؠȿǟG éÉÆ~ÂWu)Á¢UüË>c9 }ËñUËÈä…´’Ò#D±ÅåÆó{±lYa¾Ðý“U|Å•Æ@Ë”S^–+£:­Í/GF?PæÒHcÆ.à:â[8Ï"Ç¥ôÝ4Óf©²I·{©j´>V£u2üë’éPœþ%29è‚H&íÍÞ͸±µ?‡¡N?“ûT§ŸI«Iî;Š(²÷ý¡ÑL¦|…ãÌšNó¨?†VzÛ-*º£± Ÿz£±1iuštH§ÃêvYq‚ŤwÒ¸³†ÁÔʨí nçÍÍø]ŽñôÉ./{Ý_ázpO½=¸‹Þ^s4®…;¤x|蘆˜ M¶OÚ7ãÖAoak¿ƒE{Ÿî¤½I ïb×ÛXk÷øG˜l¶÷YÑ¥bs‹M*ºp•!ÙÄvðšúäçö/£±ƒe—}9jQ–8+’9ã¤6†ÏõÆ0†Lq¼¸ÞxºS«¾my5KlÛ}ÃpÝ êÚخ9ú :^B±ß­yüÜÚÐ×b;èa ¶ë5ÛVm;ÃZÈ¥· ê‰?o÷Ç·ìæÇ,5û4ÁⱑÏÈov#od |L¹1mŒ5d’Rª¡ÉN§y3Þ9:Aí½§¢ Ÿ,Ê÷¬d¤gèø g4a’ÙiRc;Í7Œñ?|Ú…&všo±¡£.‘ØQw“”ñÿ@X®O×]c¾mkBSxœ]ŽÍ‚0„{ó5|ÀðãQÊ_ÃV ÔÞÀØ„«&MÌfßÝЃ{ù&;;›‘uj°hø„>uÀ5zÔ/¸ŠLcFT ¥ÑjòV£c{™ìAZÚ”^‡ ƒpè ¦u9ZûÒ€å ن؛=Ø“m™O²M6Äs—äµ[ä YìNÅ\fÁ_µsgûzUN wRímÂÄ#%ì+%² c½ŸVÆãðÕC°‹~:LB¢L Ò:‘\õ:¡m2mkBTúÎÊþ~ ÓxœíÑ1 1ÄÀçÏ!ų9VIvaKSl½{Í̳ÖÿÝRÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿Rÿk õ¿RÿkmSºÞêÏ µmkBTúÎÊþWºxœí‘Û8 FSHI!)$¤’FRHn›wóî HÉY¯Ûx3žÕꇤ¢úùs†a†a†a†axI¾ÿþÛïÇÿ»'UŽ{—áÙùðáÃo¿¯_¿þª÷Ú¾gýW9ª Ãû¼Ïâöð–þ¹»¶ŽÕo'®GW {>~üØÖÕJþîÿlúôé×ßoß¾ýüòåËú¢öµ¯ò)*/Îåç‘Ný\®ÚϱÚoù“v[iZ_Õ±aÏJÎþ/:ùþüù×6õOÿ-¹” 92b?çTþÈ™×þlôkÎ%?·Úåöìä_2òø¯èäÏ1äBµ ‘sµ÷YäÇ5à>¾:†>Êc=1ìÙÉÿ¬þOùwï èyä^«- ×Ú¶,ýÌXÉßzèû•žuÃÐsMù#×’U]ë>H_÷˜ÀyøY’Çvº!Û‰õŒå_mÄi ÿRuâþs´]ÍXœm§_gû)YYÞ)úmæ]×y,—²¬mÚ z†1Éêša†a†axEÇß“G°×§ÿóo/ïYòÝú\êkº6õ®x„ËèíjÏægHð–ö¾»–÷óüÏØñ|†yž÷u¾Ä.½•üÿ†þó\þô³aÏæŽM&ýwéÛÃäké#Ïú$?Î]ùMço¤Œ\ýȾ,Û/íßÚ¥—ò·âQÛ@Êß~6s?)}‰Î,¹ l¾ìçœô ØgX #ìvçQç´“ög·Ú ÷Bž™òîìÙ™^Êßuô¨ã®ÿuh½à¾m?Ž}{]ŒÐ.~È}Ðv_÷ÿJ;ëxçoÌgJöëôY]’Þ³ë@¶é.ì«)™áoqC–ü¿“?}ß>@ÇûXŸÀÎߘò'-üäÓÉÿ(½W‘?Ïöú›²±¼‹ôÅÛçúÞéô‰Û ºÅºvþÆ”¿ÏëäOœÊ™ôRþœ×ùÃþvì[K?[A}¥?-ýwöíåµÔmÑÕ‘ý}¿g\=ö€c¿¶}ñ³M¾‹ ½ÃüÃgggÓêüàÖ èÇ„çÜÀô-B^ëók_g?Ìò ¯F?œ£³« ÿ•Ý×v0||ØŽÐØ=ǧH¿PÆîÛgçsì·ã/ÇhØ‘ñI ÇtýÜ~×{‘òçún^§}¶ïZæøºyDžë—óÏì·ó5èˆéÿçXÉ¥ÿWvðô¥§O)í"û±c0ÎËvYà“ØÅ ÿçZòï|~à¹_%/Ï,Îôp\€ËɹyΰçZò/ÐÉé;/x†ÖáÎsõü_é·9?ÿ«PÌܯ5Ý»\í[½ãy|ÞÙÃçõÄ8ÔÏÝøŸgäû¿ËʱL{ä? Ã0 Ã0 ç_àk3¾Àç†>´’ãøŸÛÜÆøzä«Éø_ƒüÇøü\Sþã |<®)ÿb|ÅÊç7¾Àa†a†axn.µ•të†a?lÄ÷^Cã•ßvk­¬Ø½#®àýÜ~eûî)ÿ´3<3^×Û¶¹Âkð¬dlùcÁ&·jK+›œåo"eòú<.ãÊž`›Áê^(3zÌòÏöèu ŸÁ¦lÛ+6»úßv´î›<™†×ï‡ ¾k7]ÿ/lÓc[`ýOÚöùÐn}½×çòš„«ï ‘GÊß뎱š×Äzt¸^vßä2)?;WmÆrõ5üoäcö³ŸþIzì?ú¾˜‘Oî÷zx÷Œ{¹&ØÇ!û…e¹z.þ©ü»ýüÓÔÅ"ѯÑí¤ô ¹Ý1üÖóäÁñGg×ÿí{+Ò·’×lûw<ý=}GݽìÚFƨ^ú)õ¶ìzIpäG¿•ü ¯ãKì¬ÖœÎ{Í{ÙÉßeÈï ûšG•‘12éÇÛ­¯Ïq¯§™iumf—“>¿.¿ÕþÝ}¬®Íëòœ®~žaì? Ã0 Ã0 °š[u´¿›+ð7øSvq¬ÃïìæÖ­öyÎ…ç ½?Þ‚‘}¶¡åœXùçwíŶ‘ÚvÌ?ßå°ß©ð÷DðÿùZÛ“ð-q/–?ß³ñ=¿ê<ËÌ~¶Œ›‡#ýßÙæ­ÿÙæ»>¶ÓÙFkÿŒÛ"qþøz°r­¿Qèo 9ÆÄr¦,øˆî­§nÍY[;í§oæ:)@¸-`×§-Ø7‹ü({α߯›SÒí§Ýú»@¯ÂµåßõŸKäï9èîüÖ ¿É¸“>:ŸnÁ3éç _[ÿ_*ëmt°cmìÃC>äq¤ÿSþ´L“øÇ<²?ç=÷çÝ<ò¼6Ç;ùãÇ«ôsü÷èþÜa†a†a†{àxËŒ™\ÅÞŠÝûêpxç¶?0׋¼#ÿ5žßàøzæÇÑ™ƒc¿]¦³²¡x^úêl‡ò¼ •ÐÇ(×fù±ÿ:~Ÿ¦ËÓÙ£^l iÅnç59¯³©žWÇÏ~·\;Û?vþnŽ—í»öç’6eÌr¥ßÑý¿óUbS~vù§þ£^¹÷U O7O(é|;+ùSÏéGôü4|?Øfí´ÿÐ÷¶*?ÇrŽ—÷W~Ï2ÏoÅNþ–ÙŸÊ¥ÿSþ9ÿ×~dŽa«ç˜çòîÖ‡ÜÉßmH‹6öìmÀXÿ[ÿÝJþ…ý~Îs.ãÚyœÑÿmƒ4Ù¶OÜíï|Bÿ­düžò÷ø/çøÙ˜þÁb5þÛÉ¿ÈyþÝøïUä? Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0¼.ÄP—~þ*ÖÎ1@G\⟿äÜKÊðÞßrKXÿ˜µs2â±(ߥò纎Jëì·º8”ŽŒ'>â’X@â–¼ÎQ¬ûQýb£àÚqôŽòwx‰ ìb÷)“¿ëî¸_ÊK|•‘vÎ ÞÜ1çŽÕM¼6keŸe-2Ç›ïú5ùŸ9—ó?K^ŽEº¤~‰9òϱQï±®Y®×F¹8–ëN?å~;:=J<—ïÛßþ¡-ìtñºÄ’yNAÞÇég»þCþŽ \áûNýâXÊKê—s)'é^Kÿg\~âç2}›6í}Ô³¿·áï)¹Ün]O»ûrÞ^Ì÷³j‡~†"·î{pæ¹âù29w€6”Õ/Ð.Ÿz-ví:û+ýÇÿ£ó²M{ÞW—ýûJY¹¯Z÷­Êêµ¢`%·Œ íÒ¤l9…¼ç•íž¶™Õ¯Ï#OÏUz+èÁUÿ?;îýùsŽçÜdš~vñàN·›‡Dç7*.Yç«+v:Óye;ôø8Ë}¦~éÿÝ|…·²+ÑޅNþ9£àÝÀ}•{BÆž#t¯é˜×xîãÕ­sXÉ¿k¯ŒS¬Ví›ü/Õç»uJ=oê Gý¿ð<‹Õ»L'ÿ£²óL¬ò:äD]²6Üj¬f™ògL˜ëz/¯+ؽ[{Ž™ßºrðÝCôM®Y×q¦~áè[»{y‹¼£®òÍy cÈzA¿§Þô»ô‘Þ;Óîwï„«±€Ç9—¬zÉszW¿”ûH®œóìóV‡ax3ÿ ‚ú à¿%£mkBTúÎÊþ^{xœíÑ» QAåŸÃÊæeuúJ¡Te¬¹ô};ç|]×óñ>é$ÓF2ýg$ÓF2ýg$ÓF2ýg$ÓF2ýg$ÓF2ýg$ÓF2ýg$ÓF2ýg$ÓF2ýg$ÓF2ýg$ÓF2ýg$ÓF2ýg$ÓF2ýg$ÓF2ýgüZôÏéÿß> Jõÿ@çÒ¿wÁ(ÕY•mkBTúÎÊþgƒxœíÑÁ 1 Áþ›v®Šs;zë±ç°ÊÌ\»éߦ›þmú·éߦ›þmú·éߦ›þmú·éߦ›þmú·éߦ›þmú·éߦ›þmú·éߦ›þmú·éߦ›þmú·éߦ›þmú·éߦ›þmú·éߦ›þmú·éߦ›þmú·éߦ›þmú·éߦ›þmú·éߦ›þmú·éߦ›þmú·éߦ›þmú·éߦ›þmú·éߦ›þmú·éߦ›þmú·éߦÛëþ·ÿl×ôoOÿöôoOÿöôoOÿöôoOÿöôoOÿöôoOÿöôoOÿöôoOÿöôoOÿöôoOÿöôoOÿöôoOÿöôoOÿöôoOÿöôoø­axË«¥Ã"XmkBTúÎÊþu xœí›½kA†Säð+V )-S¦Li™^{ÅÂXˆDQŒ ©D4`@ ‰A%¤ˆÚ¨HŠ¢)DP,£ˆFIq!zãÍ^rl6ó½_“}ß^îfvwö.ÏÎÞœ÷SܹsW,..&i·Û¥Dž#Ëòýañ÷ç„øû}\½ØŸdyr0Ù&Ÿ|꣺‘χºûèèëë3¶]ŽÉC‘cUI½þÇÿ2kïGzþ%ÒuÚ}^ÿ²½Õ>ªí¦ãBûb£Vÿ›îå} íhª_L´%‘þÓóîÞ)åû0ù×mË>ê¶›°¡kÇBmþok_Žõòãé Xºx(Ù¶õy ÊÒõÁcIÒsÍ4‡ÓÛCý›Æ²36êò/yýp´—çS#;¶/Ouîg{ùñfÈè_õ\ÕÎöûøwÝ7VßYêôo#½Fì­:÷ UÝÿCýû\ŸU^;Ñûß\d×Yl®ÊZÿ©ú]Æôi—Éîð¯þŽ@òµÿmkÄÑmkDR 1û—ÌN‹çÓÝÌMª?ûI8±û'åBÿØÐ?6ô ýcCÿØÐ?6ôMÌþ_LLBÊ#VÿÒ{ûß/ú/™ý?»<¸—Yè<_¸|0IU›±[~ïÏ›ÿùñb}冨Xۖߟ®ˆù ÚãBjmª®ÿÌSgV±ùrn¿Xÿ|^l|›Þ‘߯ÄËÛG”Çí†úßk„bó/ytfŸX{\l|¹šJf6Û3§÷(÷ÏSÿ•î9Îv~Û>uhMóŸ^ßg¿ïÝ?¹'Iº­Ã4ÿtµ¸>÷ Õ\·«{Ùíº{ˆî¾T亡NÿÙïxò±ÕZ úÎçS_麟íïës-eû]æ¿n{“üKß­Õǽ¹/Û«_g¼¯¢îÿ>mŸ±\Æ yy©Ýÿ×k‰ÿlV?^¯nv~¶ÏdÛºÊ4†mÝè:–˾¦Ï0×ñ}¨ûóþÂÑúxN´VnmO§Oþ[)—ºýKu¿ãÍvÒêÌûÖ»öÞŠþØÄà ¹¾—îMë|R,±ù§ûj‰É?©údžþ±¡lèúdžþ±¡ÿâp© ˆ¦ø·ýþ_eû/ã}5É¿©]Uû/‚¦úO÷¹üvëó¯n¿ß ó¼&Ÿýu×’ÿÐù™­ÏÒRâ{þ"úÓ ùwýœPÍ2ꃊ8?ýûÿí}î Uû/Ê3²Ó}:ÝGÿÍñoZ_e÷ÑkOçʴƲ­Ñ|ΟîwÉ? ƒþ±¡lèúdžþ±¡lè›:üË6O8ÿq¡lèúdžþ±¡lèúdžþ±¡lšâßV‡WÅùMíXi’S»êóïšîß§VÖ·>7ûèS›kê¯ÿ.5Ñ!ýEŽ[MòRïêÙöBŽáh’—þ¢æi踪qxÿÏOUþCæ¿íuÒ~\ýoõµþSí—Ýn;_4Å^êöPôß…þ±ý£BÿØÐ?6ô ýcS•&ޔ퟉7ôúÇýc‡þ±CÿØ¡ìÐ?vè;ôúÇýc‡þ±CÿØ¡ìÐ?vè;ôúÇýc‡þ±CÿØ¡ìÐ?vè;ôúÇýc‡þ±CÿØIû'xÐ?6ô ýcCÿØÐ?6ô ýcCÿØÐ?6ô ýcCÿØÐ?4ÿÔ窧mç’Ü×mkBTúÎÊþ’xœí‘) …ˆq ĉ8âDÈ^éê>×»gI@ÏÏþX¯jjg»iЃž——Á`0 ƒÁ`0 ƒÁà?üúõëåçÏŸ|â:÷ªçâs¥¬eø÷ÁÿQéùŠþ3|ÿþýåÓ§O|â:÷2|ùòåßÏ.¾}ûö;ï°7eôûGFÔû´ž•žOõ¿6Ñþ®ö_õQúv•¦“×íßù]Tò¬ä]½^¥Ë®gí¼{>pjç«zëìåkßu¹´o{šyªþ¯yeõŽûŸ?þ÷{è-Òýøñã÷½x†º¨/ D:½é3Dþž&òˆ¼¹e«^H×õyê i#/OGôzüϪÿÇ߯_¿þ~î :ûsMeÑò#M”Ï3YŸ#=÷2û» QžÛ›ÇßЙ¦‰ïŒ[\s=Eó8´}E>¤GÈ©éTîø  Ú²Ê×Tªg-Ÿñ}×þú̬üVfÖÿé¼Ìþêo¨SVwìzV}Ñ.âƒ/Ð>¨~Ê!?÷UýùÏËßÿï1¸Åþè<ú#õîä¥þ•ý}âÀ¶Ø=þF[ þ÷~†¬ôQÚ‹Bó¡N™.ð·.+푹^edÔç½üLo+[\Å-ö§k»ïä döW‡ïÍú(}Ýýê6îqÝý$¾#³?zÐ6–éBÓ©ÍiÈïöÇ?òLüåÍ7®!ã3ìO_Q}Пuõïêoßš™é[ú=ž¥tk¥È‹ûøMÀÿ‘Æï!'}/õƇdºÐr2ùÉ_ÇCú‡ÿﲨü:—©ôéº ƒÁ`0 :8÷—ÝÍòoÁ=¸„+8-ó4}ÅÛžÂcåÄ¥XÏdq{bUþêÙŸÖq˜Â©Î®è¸âmï!«Æ¶«g*ΪòU\z·ü[ù´GAåÖ=^§+ruñü{µëLVåÕüþ çU¥?)ÿV>­Ò“ó†Î)úçx…|œYé¬ÒÆ»giôãœ\ÅyiÜ^cæUúÓòoáÓ*=£ À³Âó!óÊþÄíT•³ÓY¥µ?rfògþÿÊšûWœ—sÖʽVÙnùÔõ*ŸVÙîXù#å=ÿÌFÈÜýªÏ«’—+[¡«àFô~ÅyH«\L—~·ü[ù´ÎOÒ‡£Œhô5žÝµ¿ŽžöT§ö¿êoà”w¯|Sf®ûÜÁÓŸ”+ŸÖé)³·Î;´ìÌFå³´;:x ûëØÉÇ÷â)/ˆOSÎ y²ëUú“òoáÓ2ÞÎeÊ)Ve3'w®”ç‘gGg™Ž=ïJþ®^ƒÁ`0 ƒÁ ľˆùœ‚u k˜U,ªKsÛþçØ‘5€nYæ®,÷çbXw{ ⬿wÖ&Ýúõ™û3®Q×”øN¬ðQev× ]¨¯Æ·ºö¯gcH¯úËžçîi½÷Š{î—ôÌA¦3žéôIó8†Çh³òwòÊdÌÒu×wËÈô¸ƒUI÷äWçq”ƒð8­îÕ×çI£>+—£ñ@åì”p™ôQÅŸáóÈGcþZ—ªüò\ƪÌêú޼ÄUƬìß·]ÌÒù/ø:íÿèÊÏ3dç;É«:gB9ÈRÈôï|GW~•—î×w«2«ë;òfz†áŸt|éø+—i5þ«Ünÿ€žá«ÎŸgºZÍY|<õ1NyŬ|E7þkúªÌêú޼÷°?õ®Öÿz/k›Ü×>ä<šÏÿ=Α}NŸÍå»Î…ùžü>åuåWy­d¬Ê¬®¯Òdz ƒÁ`0 *èÜ\?W8ÀG£’Ë×ÏâY»ûÌÕ:‚ýÒÏDg«öc¾g<‹ Ìö2+²¸€îÙÕýÿ'ëWµ±6½žqnØŸ{žrèuç"w¸<ÒTkôÎ.™ô\ r¤•¾nåOàûïÕ>Uì˜~c‡#T?£ñ+®ëžyöï{¼QùÂ,,^qF/XÅûv8º.Ö©gá×3}íȸâOPùì ~n%ãhUÞG4§çø(_û…sn|W}Tg&x^cëô“,Fíý…¶Çù°ÃÑ­¸ò«ôµ+㊠<ÁÊÿ#+}/ãUw8BÎRh_ÏÊïäÑ|»33!m–r\7U9Œmêß({ÅÑp™¾veÜåwÐé[û¬úx¯ëG¨ïµÌú¿Žß]ÿß±?g;õ,çnßÒ½Úow8º]®³Òוþ¯Ïßb÷ÿÈîã?úÇOVé¼=ù¸ZÙ_óÎÆÿû£#¿veü?áèv¹ÎN_WÆÿ³Žªõ¿rÞYL€ëÚo;Žù°ŸÎ1³g²9pV^•Gµ~>™[_áèv¸NO·S÷Ÿ3 ƒÁ`0¼ÀçèÚïQ¸’·¾[ãï¾×ØÀ veO\k^8Ö”¨v<ëZbzº¯²Û\ŽáOìp¥Ž¯b¾n$~ð}¬¾Çoèz•3ñј mKã è«ãvUÆÎþ]^»i´NºÞå¸WAö»#´÷xŽë”«é‘æjßÊtÄõì q ³:£¿ÏE=Ð z%Ö…ßqù)CcñÕYµEÅÑí¤q™´®ÊyRGý-¡+u (K\ûh¬PÓ'¥Ü*^Ø¡²¿^¯ì¯ñqÚ=m=y|KóòøvÅ«eü‰Û\ý˜rÈŠ4µŸÇ=Ž›ñ{Wê¸úÝ1Òûû;=Ý·åòxÚëpû;o@>ú›”ȘéT\ÔŽý+C±“=*ï™É«|˜¿GðJO¸CÊåW]ù–xŽ1.³™ïµ 9_EŸÐ±©â ½ýVýqÇþõÊã)vÒ(ç¨ã Ê‘}Ïì¿[Gåñùw¨œŸîǺÛôã{-âƒoô½ÜSdו_ËžïÎ׃Êþø2åÔ;iT&Ÿw*ßÎwú‡·™“:Ôº§ÇÇg×­¶“SþO¡ãsÌìÞjÝêºï%Z[~_˯déÖ®·¤ñ²+œÖñô¹Ìw]Ùÿ7 ƒÁ`0ø» ë]ÏÜkÙíIŒu¾+e§L]«ïÎÖ‚ïoA^ç°î;=GR¡³?œév쯱Ö;<÷ôy‚· o$Nî1ç´ˆ=:ߥPîVãžuŸ£<´Ç <&«ü¿ê3K«yC©¸/ù4–£rÇ)i=µþ*/|ÎŽ^]ËQ¹NÐ1qŽG¹¥w>ù{å•á ?ÓKvÏå:A¶þó}E:·ÈÎ_«n+{ÑþuÿÃ=ì¯ó¿êÜr ³›÷qÍ“¾Ì³]>>ÿËdÑ}+½øüÏå|L¼…õâàõ0öÿ»1üþ`0 î…lý·Še€·ô®ùŽg:…®×ºñ¶Šž`W×÷,3ËOã?«½‘]—¾\9ûPø×î~Í[°£kOÿûWùiìGc~Æ)ãÄ-<žw¦¼.ý3qÌ}•ãž'vªuðw$V±’¬n“Ñváò(²r²ºÂÿ¸®5Žï2©½ˆS;W¸‹ÊÿkŒ_ÏKÑÏ”ó­8B/ÝÁhùèEÏÕ —'‹9êw?K;Òx:òxðº<–ì|@¶Ûc³ÄϽ®‡§ùVúàyâÆ»c÷ÿ@Û–ŽSwÍ8B•òq®Ãîÿ]û£=é2ôlBÓe6V}eö÷¹ˆž­«òRý(·ØéÃËáÞ VþßeÊöZT¡ë„4Ýûïad¢­e2Þ’ý+nñYöÏæøBõ—ºŸTq„®Sü×ÿ»þß”é<›Ãïø­[&Ï=üfÿŽ[|†ÿ÷õ÷s°zîPç)GèåèÙÁª}{Z×…Î3«³™n7ÅjþpûWó¿Îwfåtöï¸E¿wÏùß[ǽ×;ƒ÷…±ÿ`l? ƒÁ`0 ƒÁ`0 ƒÁ`ð÷á{ÑÙûô‘Á~ÿ¬ö½³ÇÒßi`oLöy„>uo©Ãßi\q‰ìKó|}ÿïÒû7žÉSvu9ÍG÷íñ©ì¯¿c¾#öÙé>·,Ïjoð­òw{õÕ†ú‡Öݲ‡Lûù=«mWèêòÈ2u_¤ö¬ÿ8د–åéŸjož?»Ú²kÞËDúøßß±¡öm¼†ýýwÔ>ôÃì#® }©ÛË×õ·E:¬ìOÛ¡O;<ÿ¬ÿsüy—›î¡Ô}›Ú›¾k‰}~úŒî±Õ|µM’†ï'8CTþ®¡¬o+¨[Wžú‚ÌöŒ½ø†U™ä©ïïQ™õýr'ö÷½î\ç­'ç’tœTY¸ÏwôŠÌz.Dó¥=¨ÜW|ÓÉ~q=_¡¾yª¾M»ÜñçÙÙÍÇ÷–¯äÇkþt§ïbS=2æû|¥Ò±Ïy´NÚ_}O¯îe×ù”摽ÛöàýðtLàœS6Ÿq`CÿíÌjfý´3–#Ëéܰ³?zÕ1 ÿéíHí¯þ]÷š“ç‰ýõ\"íWËÌÞ]åó¬ÊþüO;¾2'@¾ìã@~tGÎü:º«üªç{åÝuÊþê7m1‹è™Q]ßPWVç2ûS®Žåz]Ï¥zŸÒsý‘ÉÛ×3ÐÅ]vç‘îªÜÝxwÒžôÝ:Ú—>ÚyŠÁ`ð¡ñˆ$j¢ëw½»mkBTúÎÊþ—DxœíÕA Aü{è7çªà’Î&£a»%I’$I’$I’$I’$I’$I’$I_–ªj3׺ €WdªöžÃ´ymkBTúÎÊþ¢6xœíš‰më0]HI!)$¤’FRˆ?6øc>>~Úsm£®+ŒvÁu…Õ‘øνYšuÌ8³´ú³uNÒ?¤WP>Ê1Js¤ŠWiVÿçü‘ý_uKðEÿ‰Ï¸ˆ/rœÌù£Âˆ_âšgK•W]×±ž™ÍEYòclÊó,[¦ŸTœYH»T¾Ïàÿ¶›ùÿíííðŽˆ}x¦÷ÇL#}A› ¼ÒâœöGüžVË7¼—‘^÷}>“iÒžº²-çøèþŸiæÿì;}žLJø°ìXí&ÇTÊP÷3ýTÞ#¯ôߨgÿ®ðJÖùl eäý'ï=ŠÖø?…͘oéçùn€í±aöëì›ô½|7ù>šý?ÇôU–%Ë;«ï¢­ü/ñmöµžN/èãI޵Ù÷fóQÖƒüz{Èñ<ÓdÌé6éd™nù;è¯ÚÊÿ¥²Q¾–mû{{÷5í$ýÀûiѦxæÿg<Æ$ò"Í^¾%=êü¯”RJ)¥žS—ÚçÍtïe/ùÖ”ë —°a};kú÷Ô_µöyµ?¬9ÔšÉlÍzÒÿ}m#¿óGßüKk!¬›ôók(Ë9êGüã1»¿”Þèz–×,­Q¿&îlÍiV濊ý²Üû#_Ö<òœöÂ3¹Îžm$÷^9g —{9&°w³&¼Û:Ë™ë‰uõfÖšúºR…÷:Ö½L+mWÇôW^£§Äz%÷I—½î¥2Ÿ£î—lo£þÏZ¶f?¾k4öW¼ÜÇ-è#¬ó­ ?V/ì—c^ÿ·!÷!{u̵ʴU¦ÙóÙ·ÿAœÑý‘ÿGe>G}þ?Åÿöþv✽Žø3ÿÉX~j½úœ—{øzT§ôA·O^ÏòʰÑ>÷³?syÊ|®¶ðßG)ŸP¦U{× °.ï».Tæç}6žÚ³‘-Æ×F`‡£Ãp]Åkß…~Ãóbà ¶ О$Áwݓٱ„ÁñÍ|süñCo•›ÝA+Õq3¶¾lOàx@á(é0ða¹¯+?÷  ÜT,¤_¯7¸s\ÛÞϘ^Bl1)üCó•Ò+ÔkÛ(îFyN"8õ–dPCÌ_9ÈÒ>O0&l«4¸Im+þîënwîÛGrŰø™à»ø)/tih“f˜õÕ Ñ¸X†>ÊʨËEËÅòã)–Ô<,é6ös4ÅáÀÖ5›zàbð?¤¢Jðàö\<OM%O#(7ä6à:§= ªêýÓ‹YA£÷ƒH ¶«L s6›ÎMƒXêÈùBcX&ǘJ½te».Êöü¨Ï 3.je(”Ï?Ô?õèÉLÚjï³=€ÝÚ%wƒZˆizFTxô„$¯kPö8›E·mòø jAO™ñÔ×úÞ€«ž>~þ’†åÜàØ†‘ºéB9úµâ † Ö¤8U­«KCÃv´jbëL èåçC¼ï€y¯¡ ç;¤mj P.Ô —øãïDkñÂêwþ¡UÿE€3ôܨÁ”‘•’8xëUÀ…JÊü¹s£‰ž\„³èÉŸŽ+;}s­FãQ(KI­î÷¦XÝ›„ƨ ¹1 Ëúþ+Kú¨èdXŒ];JÄ£Žïcˆx$§DÑ×·Þž¢X`i× ì¨ëÑ@lÌûrn°m$¨Æ^×9΄ïzBGÏž Q=Ænfäk„Dêö¬e; <¨ýøaÓü>,µâ¢ž›jÆïk‡0BŸ[p(õâ$¿º‡Ç ‘ÛöÌpý4 nËËq`”XÆ“ù úvϵöèÙ.xõHnŒûorŸJ¾€Ï5¬ñÁàÿHàu©‰ñê뇗 fà§ í××a앆‰[Z:><ÇM@J£9óý¬â$Óq]¡}=H… kÐþ3ÆÊºã¯ù鲺t¿Q“=‚, 7ÆÇµß»ýìêçs Ä>ã¢3ø¶ïÞÜ6[¦Ñg•¨— RLت¨ù­?·( &wÝ.7C#~B{‚]¯Ó ×â—UÔW² 7™Ò1jk~‚e”cG»¿rËÇùÐãDØ.=ôËK´ÜîëÅ@ÝWÝDZMû0å€ãûíèä¼0Î\Úòxó®vÏqßNZ¢ >#Æ ƒ„ŒàBE— ™¥)•‚º&yØA}tå?Bûê Yìm(ÂWIpáɱò€ñ ¸|½2—+èýà\2·ö íÞ)lÜ8·ÖtlÁ@Z.B½€£ï•eñ…‹ƒRSßôƃm>d˜Iéþlþôò'N a†dÄ¢G3¹%†¼#«)?è¼Ï$sß _5=²íYÇBR#-k"qGP-Ðeþ"çf­ÁÂá%Ö©-Ï“37êÐäÌÈ8ÔM9™ÏŠŠ,¬èä_*n;H‚ÁúÆEBƱ†Öcl¿~øÎî±ç Ë[ƒŽ/saŸg¸IE2å,zÒ1Út:’kLÆÓçÎÁ¡ÍíÈ™壋G)æÔ{7ÊoðËÅnd¨ø¤è·ðá•{@rõP˜>ÆkÂwŒk×½¾¡ #¸kXfy‘ÖEÇ÷šÈA©ÍBÂ9ÂuM°ÛÞ4P=¹_Ól’ÆgW®Ø‡ÝN•Õ#–_n™‡Gï¤pp ,Z…ÿUu›6È“÷ÃV¦›Ó°¸å0EK‘7*|·ý]¯{ü75F\éÔ¶»úzQØ z!á‚Ç uH€>îÿó¦upš²ÚöõTÙ£»o3P)ˆø´[à^Õ6ãÖÚóã` -šd&á*=¶%ÄÀÊfY’<¿^’ƒØ·`_6¨ßÈ|h¸Ìë3Ø¡>€„2 Pºúqÿ×7ÏŽ³ ýÕü,Ns¾j»F™=BµŠü` ¨í³•C§òöiŽU’)Ré@LÅßÒ®„‹ÿ‰·Ç§mb<2FH“Rq°²ùF½åãø÷Xºi䎲õOm¬GAýÝ·ôÒ}:¶*¾Ëu ÄfØ:@Ê«RH™.òÙ6Âñ¼±Ã6Žjå§cæGOpO- ú­6HÒýúÜÊKÉJæÛUÀÎì:ºJǃ¾ŠýÉvÆ,¡•¸¯3ÿ‹DìZ‹¹EñÊÆ®ÒqqðìØ7p?¸ƒÈŒÞK¬÷Å%ȧ$;â¼?ýQ¬r6³pP7`¼a™†¸é^=„„ýÉRç¶_†õ™³)m£„Ç>ÀD3#£ ¼_' çIþÂÉ­uÍ‹CÁÊ-Rne㯄³²Ïóss•ÀîLÏÌ<È­/µàR)|Lt_1»éòÁ¨L¿kÇ=‹rr 4ùìê§ü/gýšEÀrþÀ~P†¦nBß[ ®\g[{¡«‡’g£ãYÛvRŸW'†‡ {Fe°m1ïÞŒ{ Ýw¾LÿÕ;7¨&$‘çþxúcÚøÃÐ0Ÿ ŽžnÝö‰óí&úÚuÅ@5sCèCÕ±mœñ8Hƒãefñï¹Æt ’Îx{q(a¿²ÛÑ‚a¡?€ŽÐþQ“%ò§ÌlÁ¬ö4ô‚¤Ï‚xmWI׆€Gí¯¦CèÒôì1ê’Ûk×QÖýŒ3iJhÜ,Çÿ€úãú‰KºšRˆ÷ÅÄð¢ÄÂÈöÈO`úÈç…ʲ»†½þ4á)ú%ˆùÔb6îB8ý\ ³pµõšÉì«e<êºíS鹂ØìÚ+ÓjsðÄpŒ„¸ß%<&t{3?Œ£¬|N)p7b™Ôîãé?Ôa¤iäDµWl’¡½ðˆX—ŸÀZÚ>;uø)¤ko)#WáÈÍSšn®cR½xô”{[ÀsXv1¤¬95‰_¬¬0KéõÁжՙ7Ú>žTp¡5‡‹¸Ù´¤l3¥Sü"ØêLXê…ç«[á5mö¡ø º¿Q="u}ö‘ÆpϘ*xböÕ‰ºîã—ã#iM+³ù@»Z! þ·Ï®~jàÒY”ݬ‘¡´Ò$?5Š• mtêuˆ] ‡%Ž@Ž÷Ý…:4h8Ûƒ¸˜¡»tuì3À;ú ΑO¤1A/r‹¿¾™ ÆÏR*5ÀÇûÿËìiÜ&j#Y2:º$Z(a­dæ@ß>'z ž„×L¬¯³¬Û뇶©½6ZÑÀ8|`Æ6Ý"åŒX1ß_€z' îF-©÷»Ñû?°úX^ò A:?1¢;ØÌh/KžVB'õ üvOnÏFSò‚¼É õƤê°ïÌÞQ{=kh7™ÀMå¯ÀwXQùpü\vïÍ“ÎO/ÿ¶.ÅöÚñ¹ ôN3·ÍHKRðÉlŠK–"›qò”‰^Wܳh¼1wtùã  h@§¬Ñ3ðe6þN|–’¶Á©‹I;yîó?8t[ƒ[é!‘ ú¥µ$,ήL­·e–"z¦å%IÞ†AêkÜÌRäl!3uú8àÚyßë?_žWÅé½)ƒAbCÒõéõOù!rz¿„a¢¤5S±ÍnÖ—£³ˆ#Â<ý43yÜ6"ª ÒRýêÑô߃C‚Qå¿&>¸[¼# BHÍǽß{v¡eà×kOÃ×TÉlq(UHð͵h »Ý”8º,@t°µöÈÃÕ‚LÛ{p´•ü‰/Ø*ËL"d_y ïŸk,4î GÌ–ýÑbD>,ÁÏ.ok"ýD;†|7–[.µDÖCíAœŸä#‰iÇæélÿü¯‰ÏŸ¡IÖ¬ÐòâóÞD¿q½]+ÞeE •ò–_«-- ™ƒ¦ Ú°c©›³èç€^ø¿¥Lô˜q±1~ëCßC“ÿ”øžC“9¡ŽgNäóýÿû“õHÈ8Bkhêç«JÁŽ#Z¤-`úVo§™MËa 9r$îÕºZ-¼hókhò ?C“$· û^–ñtÄ÷¿9d(‘8PÝ…]Ú¶š£×w[¢wléÏ;µŒd•Ôn—׆ôoÎK«èdù H¦Þ„(Dú¯…¯Ÿ¡InüIÌ Mïãü_(ù¼ðœ’îð5)6H/öõÌYÍ1‡¸ ±QRæŒk,nËÖûXH½­ʉð‘ƒÊË?>ÿšdf“ç&6³üü½^EJ–m‹ªétÞÈ{¥C—µ›½ÌC¬c`½îÙ0Ê…v5ÃÂx<äƒó\9Y·Ýÿcáû×Ðä}1Ú06"×´!ÖóŸë9êdl:'– û1H"Áz'7ùQ‡q›„¹Ž¾¹ÉŒí#KâR.ò/C“»VÖÜgÇQ×Ȭ¨åéãó\ âì`¸·?dÜÛ1y³”åuMÛ6Ƶ8ZX]8Ãø^p…ªwQëE¾ç &­1frRšÁKiûñçÐ$G¤ÎÓðÔÝœÛÇЕŒ¯ðh3'À®Âø”·“Ç{¼±š;;Ö~F öKî37Ðkš–Ìu<pöµdÊŽåèˆ+C¨š¤™ Rá‘÷Mz¹Æç¿7)nÒ€©æöÔ lEGyÍl½‡:Ì‘ÿIÞí’o±BìÞÿ—S%|ë‚ÎЕïsTuÆleÁõ’bšA}A¸ëæížÍ´þ1ãý0ÀA{ÉKù“ʘÓº¼tjÑòÇÐdLI=rž ¢PRgóûÇó_Lb¸R³£é Åžël?«â”ž)!°Ö[«‰FÂæoÖç wi&k^”CV(t@püW2Ó÷²ó{hÒxH—GRn²͉ŒeCbúxÔ‰°ªé6GÁ³©÷‘¬Q…Öd27\ÌØ«dœS‘É=\»F§f*¼0é‘Û£ÜOPúÇ5(r„Zß™xQ‘Z>¥~G AeN-õãùÿjYôÜ7—Ò¾n;ún?Ó¹"P·¯xÒ}‡·•/àNäöÞW:ÝŠ&´—×¾†Ù:x" ꭥу;†ÄRç펔¹ ®cä›…Ñ™õ±ñÜýüýElmG§a= hò¨BG_æu…³×YnZì«­FYs ôUéµ"zM&Ë:ËÝGn¸Ïuí.õDX‰ƒÉ5XnšÁ¡ö›;Þ}¶Ô«%XO?½~2&ùÝØî¸Frjj¢¢…8ˆ› yAÊÆä*±W ¡³‰€©ÒIÒ˜÷“9/¹§u‚b)õZ³l:ë sá¼¹ 8²5ÀÀJõš>~ÿi´œÐó˜I¿þ3YÏÔ•;ç:#hEL¬×[ROd‹Ê^GéšAË©fß~Y!ýËÐäEåêñn·ôü0¯~Åà/«AÝò –Kåm÷‚±>^ÿÝWY¢q†"µ¥â<цFвÎë*c¹½:xÛw„|¤Ížw­—%ýehRg°åØúæÜæd¿9ç´üÌ•ªËÃvž3Àv Dg™hç>>?ÿò3é‰hŸYDkgCã(ʹƒªÔ•ô×SÉ·†¬Ôœ|è 2QÁü94©(ñ½?OG•Q34… fëcc³¶PopT€Yaƒ–W(£>Çÿ@­tãX4ˆ`ðLG¦Ùžp•‹É„ãaïãšÅ°l\¤[9‚cû26óâU M6f,ºŠò¼Ë'›¤…žCÐÖñ4øi¥?W~p¯sÏ ?žÿk³ÞA÷×KÃrŵÄÅÎk@–Ið|>^xðs¸?ý\Õð`,DèäõÌ’©Œ°Žû5¯éWÛüÉ^£èøçw €DÓµMˆáøXf_8<%|8_왉pPó1†…ãî„WþÀlm߃˜“Šf?4žý¼»:½òÌ“_£Ô”v ûûMà;kž:pÍÖ²â_ÖùásjØŽqw]$F‡£}ÿ¢»y« ××û,b'Õè°N‡Îþ=Ôo¹öÖôÔ0, õ¨Çÿº»â~–ÆM‹ƒÄû Y•R´‰¥4â6+!”}@~u‡j°ctCÔúàõP.ÅY(ýxÿ׎ ½×zµ?70ÆWXFÜ£¾oŒ½·¯‹3z‹Š€0°®Ác8¨R£êG±¢g›0àö ¦T—Uëøò„½»‹w­"/4³ÞÖ÷¿¾îC¾Q`[{O³“ºcÈn¯]•¶+•{Û{­ç¼ÞÕÎ N!3•<®ÞÇVí‚ìyxé,!C æ™b². êlfÖ×åÁø'„ÒÁ\ ןÎÏíãëgu,μ·¸šw-/ôß3Û¥ùºñíN°íâX(›c ƒŽÓâoõMDð‘sÊ¢a·#ü#0{c ÁÈÀð%µuDWCB¥Z€AéÍZ6»,Øçûxý (Z%‡±µØçw€ÑÀáŠHbhTb2ùþ<$÷Æ*cÀ¼ænk÷³”_÷וð«Ð÷¿#{D+B<™!âÇüS/¼gÿÃ`ø9”­.^]ŸÃŸ™ÆCíÌ+>™ì3ïƒ+•ý5Æë]¤q‡„Äp¦j' r¯9µ¼FDȬ)~: ã躟—9GmÜì“x2’¥ù-?s–raG"yvU³pa;R«çãø÷ăœ ÌAŸ\&ú¹“ ÿ?#Äìn Ûí0Úee½´“d~o’qå¶­¯!!DzP^H)>¾oµëÈ‘.®Ä¼‘Ô¶=Hy»7´S´-M½ á?Þÿô8y£c¶Î™ß§q„|Ü#Þ5"ù2Б ‡lµm#—ýU‰ÑÊ»ìýeüΤÎV†ÎÈbMƒ¤Í˜÷jAÌc7¾Z ä]> 4½gbö Äýñõs 2WRsKgí6Þæç 's8qzñTT[”R›[wÄÍ)I‹—9ø5x¥ŽÜWjýÚ #”!nN+zP’ÄÚ”â ÁKgâ²ÁÞTEŒ,ÂÁùÇë?³¥{é^R¨DÝ¥=´R¥u^zîc¯’§³Ì¥&D¼‰'i74øSËJ½ß”í&H¥æU©Gà»[û‚ácrÃͦŠ<ú’‹¡׿~þ‰4}Ú…žíh¢°Î;¯üòlpAZð´%’XÔZ;t®Q?„±÷÷žóy™ïk1+Ƴu6Â[«©ÌÖè† áDõ™c4¿ÆœÚóÐÝ*d„•B#!}Þÿe>Çsamh¡¹ÿêG3c^çæ—8u9󼵕⸈߂ÏUéy‡‡B;f "Yi=ÖD§ =Êâ‚Á4‘íŠ&¡Ž’Þ×|¾Cý“Ò3»Ä÷šg]Ø~üþ›WgjhSIXU“‘"1A5Fr4×{üáÜëAä—éljŸw¸TðÎá–Ýt6<ï/NÁ  \û¤õó«R¥tÇû˜a| Æi¨ÌÍ>‰T.šWo>>ÿxŒ•ϯ¼Y¼æÈ{ç··m,J²{gg}Év~)ê]Ñæs!?wøè÷X›‰æè˜G—F°¥l!7ކUœÖ|Cnáfï³…:.@mq%®Á臔±ÜÿÓRu?.–:¯èaBë¼ÖºÌÌE#Gƒg'yX«Dåÿu‡SWºä™ÇŠD)Œ˜21×ѵ‰VµˆagW¬àP޳²q½ç«ÏÈ’Ï Ís”?¶•@åg")ªíªç©s\ÖTòâô{Þê«f3g÷‰oÑþÏ^w:^ë¼"•Ý{¹ªd#³!φtà}©,nÆyWFKv„X”4–ƒ|<ûB+ è®Â8ˆi=-;´³X 5l=/xlêóŽw•–å÷n³]ì à+SÛÓ¼,{Õž¯/ДâV¡û»+<< ØÌ¤®Ào ŸâÞçèÔ‡eNpù^Oÿþ¼ÙùŽOv qR¶ £wHF3ûÝß=oý;ü`~k’RÏwCßÏí²”u¦ãk¡jE˜|û‰qÏ©ŽÔ‚KV,Ï àÏ*?ÞÿþxkáÜ}QxÁU¹éœ/MÛüÞÄÂá= ¤Õ°pý¾Êæ=çŠÎ^xúBË÷ÞÚKx«§Ó@ð[òÎI™¾ÔYB]Tª¦âž™çÿúÑKqÉ.á½€PÖÛwÿ¼ÃÓAG\ôšWÂÏ‹Øâ9ùãÏ2S³—åA\è“Y\œßy=ǨðGj÷¾ÌéÇõÕ¢ÂMî@âŒtÔ‚¶„vD¾üƒzÎ+²ÙÌBĺ\·Ÿ¬ü¼ÃÕ¬…÷Ùë6ËÛk™6Lþ¸Ê¦ÚRß_rýnl|UAϯ< ¢¹Ë|¦²!‚¸;ºÁ8™_1ÜgésÞùÆCŸ‡ÿ¿ä >êVB‰~æ,¶¹® Ë˜_ÿ&f™äÕjpñ/WÙÔÊwaùO ¼š°H 3ÉÛûþ¾I`˜ÈòuØù»õ¸1êͤÉû·ÈÏ÷ÿå+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò€ÿÝš™w)¦÷cmkBTúÎÊþ€0ÏxœíÛ± € EÁý‡°pQ0†Î ¾»ä÷À«™3êºîÝG`#ýÛôoÓ¿Mÿ6ýÛôoÓ¿Mÿ6ýÛôoÓ¿Mÿ6ýÛôoÓ¿Mÿ6ýÛôoÓ¿Mÿ6ýÛôoÓ¿Mÿ6ýÛôoÓ¿Mÿ6ýÛôoÓ¿Mÿ6ýÛôoÓ¿Mÿ6ýÛôoÓ¿Mÿ6ýÛôoÓ¿Mÿ6ýÛôoÓ¿Mÿ6ýÛôoÓ¿Mÿ6ýÛôoÓ¿Mÿå}‡Ê¾÷¦Kÿ6ýÛôoÓ¿Mÿ6ýÛôoÓ¿Mÿ6ýÛôoÓ¿Mÿ6ýÛôoÓ¿Mÿ6ýÛôoÓ¿Mÿ6ýÛôoÓ¿Mÿe÷ŸœSþU1ÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌÌì¿ñmõùš5~üCmkBTúÎÊþ€8sxœíœÛoEÇû?h| 1> ¼¢‚|ôÝWã«Ï¾ø`%$A¼5ˆ¥ö¦4Õ¦),k¹¤¶ô5ŰX¬4Xކ–¶ØûÏ3{Ü“ívfvvÏ.¿9;ßoòÉîÙ3³=g?¿3= ––VîrsâOÀ æe ëèï÷à~Ÿ Ú}Úµ ¼///¿¥}ûûiÕ€ïþí'íq@ø^\\(súäqû‘ý}‚h÷•Ö€p¿0?» q>Ô€]„Çÿðwµqk@¸Ÿ)HD X‚ì;yÕçœïï…ÿ SR„Ô€=¨q7ëëë Gp¯?¼¸WÞ'"ü«sº»/÷À¿:ç{Frü«ÃíþyÃíþyÃí&-jjj2õ®~{ WÛ¾p{KÓ¿ª¢ü|øìÂî××îæ²¸½¥í_V:ÿg^Ûì4xìì‘­töèVÏ¿Ø ònoYø׀ʿ¸×Wg¾õXšî¢{ô÷/Í45z„Æ{öÓÉ£µùŸJÌýOq_Çÿ¹ác¶‡Ûçýïõ ?¨Y)ЗooñX½ÝFíÅmû-ÒsÁ¿þeÏ©üz†hv@Ïâúlï#´rã ·ùã{é¹|×Açáýp˜ìG_vÎà1U]ê®W5’dþ?ð~ÑáL4sרáõ‡¼­×'¦Õ¸׿®é9Ãý¸½=Tþûî"šúŒٟ½mß;»¤çÒ]ëðÜDö¼Î‘Ê·îœðíÿüþDÇbáõIà_×'©Óס;7·Nÿ=o>EtýP,zö=yÝýÇQãR¯ºÇðoî¿{ïD¿î‹…×ÇÐOÔ\ÍÄ«îxÒ9eçIüwí)º¼\‹®=;¤çªÖp»áô/rªvG,òîµXÿdøw;ðïvà_îõçXçŽd m¸°îßGmÂ…À?üûø¾ÿÑÞ—èRÛö2ß5?J>ì¶k?¹]Á²¨üt?O«¿½H+·jimù"­ÎEKwÐÂø+tì9ïyß½¿þ—ÛüÇÊÿpçÓ%ÿ“¯Jýß¿Þ^^ó\ÿËí þãEåÿÂ'»©Ðû8ý;ù2­,|DKÓµ4wõ*ôo£õ­×ÿÇÃ×Q·þ8KüŸ•ôgºq¯ ÷²ûþjgiÍopýoÕãUð¿9‘þï“þ¼Ík\ÿkzýeÃcƒnÌ0=Üêί/\H¥þbýoœûOvÍ£Æì¸ÇMúÈÚŸs!:ÿCŒøëÖ• eLîYÙ½ÇÜ>Qí\ˆÎÿ¹ÞÆØç}t÷¿é\ —²ñþå1ñ¸õ’‡¿/ÛúûQþ³ÿumá_ÿ®®SÞñ÷ûÊmü}ûÖá¯=ü}Ñ'Ê¿¬*ÿéæs²Ï‡¨öð¿›:Ot”Ÿ :Vm¢l<‹ ë¯]ˆîûÿ–ŽÒýÿÆ»m~tû¢üWOLüÇ:_JþmÀ…èü×µ~“noðoüýþýÀ?üw×"îþÝ÷¿=±WSW÷)÷K@S_ßÄýÆ44´p¿„1MMŸs¿„1ÍÍǹ_‚õ þŸQYöáˆËsß,ÿÕ—à:‘ð1]ÙqU;Ûÿ¥È|†÷UmdŽm÷îþK1õFÖWuÌÆÀ)IîU_][Ûÿ¥`üGts;“6QsGÿѱÝa%}òì^þÝü»øw;ðïvàßíÀ¿Û·ÿnþKá^εÖþÝü»øw;ðïvàßíÀ¿Û·ÿnþÝü»øw;ðïvàßíÀ¿—ÿИí—l–mkBTúÎÊþ€KxœíßkEÇãÐi„¢ í ¨>øæ«ø¦‚o…ŠÆJ-µ"*J¦Øb†3‰µ)1’´¡&A¢¢ÒZbK“FíMâ].wãÍÄ]/×ݽٽ™›Û~¿_ø°3“Ý»ýÌlf/'Nô ‚ËÜ•?!yß“A;7qï€þÍ1ñz‡"MtÏ=3ö¸˜îÛíóå‡;ÅÄÑvÕ^½ßøû»c¿†çž}ÆÇæ{šœTØr_.Ý´êÿãáimLž{jäa±þÛc¢xuŸ(­Mˆõå!Q¸Ñ%V.?-V¿}PýÜs/¯AÜ1 ½{±ím-o| œíÚ¡Þ·zï•òxW‡Â†ÿ_n‰º˜öÿõÀþç÷ú_½Ô/>?zŸB^¯ÜªþMŽÑ—ÛEaá˜(fG6‘»tHŒÜaÅÿÛ݃ژ8÷¹c‰¥±ûÅ?óOˆâÊ;¢°¸OܺðˆXšÜ%ʳ½âÔ[÷ˆÒò÷·!Ûuý{x÷èZâzâÌ©|ÿ¦ÆÀðþí¢0{@OÞFî§N1Õs¯ÿ:÷“þå\—îƒæÿò…ÑÿÚÝŠõë}~9Éõ\Y΢ëªzŽë`b |úü6QøîIQüý°*Wׇ:·YóÿçZ4Æýßìþýÿî.µßÉ—:DqöÚ&½–¹ìR qü‡¡FÇVŸìݪœË­¬gþ«gön±æÿïb4Íö/éya{C×ñ¯¥kÄñvŒF-©^ß×>ïõïÙ¢¨®ë3©ÿ\1“þ¿:×£ÅÂÕŸ7Õãú_¼~%8þ¯ÍÿªM\÷ÕÏxr›Ï/$zæ3áÿ®G„bÚÿøØq7²OÜkasý7Ø_y=—ô‰{\Ïw>{ÚŸû²žË44’ú_-5oýçù?Ò;­ðÊA[¯œÄ¿M”ï„î}ÿso*ÿµd/¾*¦»w6Õ¡IÿÃß©ýÞ8~Þw약í+GN+¼²ìãÚyÿFÖ{£ÛEþâ~‘_ø`3•6ùY€mÿÏe‰‰Iÿƒß{µã°­Döqí¼Ö¿‘ç½Îg¼¡ ùʼÏÿðT¥¾5ññâ~þïù_јò¯öËlÌÿ÷)¼D•e×Îm"×÷Ò½î:ߤÿf~þWí?Nü7ê>‰“èžû½ÞÑD¸v”ÒàŸBlãúûÇÄ-333„P†ÁM¹\&@Ð?6ô ýcCÿØÐ?6ô ýcCÿØÐ?6ô ýcCÿØÔÆõ÷OÈfšíŸiÐ?vè;ôúÇýc‡þ±CÿØI£ÿ¶¶6E½}ⴣƥÿ$.tûп^è;®ý×Þ˃ڒô û¹n?”qâÂØ5®WÓ§Þ9¢ÚQÜË´šÿ°¹ZÛ·^]×sí¹ÜË´šÿz±5ÿ㼆;)­ìßÕý)®Ÿÿ“¬ÿÂŽarý‡×þ·¡ìÐ?vè;ôúÇýcÇ…ÿ3#ç‰c\ú?ûÅ7Ä!ô ýcCÿØÐ?6ôMüË¿ÃÚxïµÇµužV†þÝ;@ö¯3Ã4>5&裗h ?¢¡& UÀZIü¨ÒD­„FÓÔ”†Rºl• ”hÒ \?¨K{g{‡»³÷svºs;çü“væÜ™{gæwîíÌÎ]h¹ðó¯-Ñ#ßÁŽ‘³o%÷EžŒãèà:öiŸ¹©¹PÃ~rr’œÛæ±Ï¶M9 âÿðSýUw†~¨gï-¯ÚWã´Ï“¬ÏU°øÁƒë̘nÜÿl™¼ ÛŠ×àýoÿ„áÁç§þ}çf¡xé&œ¾\;%­ƒì—e9 âíûbÿÿ~Ïý0µý¾³XÚç—e¿°¶'´K™)ØúÔÔT?ýàyéø'ËÞåß·ÂÍÙ (ÿ; åÒ±0du‘7cËÅ–MqŰábx ¶Ü^c»6ölàƒ¿wÝS $uݹtiy,º¸­¬ÌTg3¬:þfòç¬e1Ûúx˜øsö³çž úú™upýôaÌÌLÁ‹Oü÷÷? ¼^¦xþ6í,t¤™qÙ‹9À\(êüÞöƒzgÖÇ{÷¸°m)œÚ´ ޽vw°ÎÊ¢ü£õ°ë$«?çëÑOUªýÅunYÌf{Y\üÔÕos^ºë£²,XÌ¥Ñ*þý½AÝ—ÀÕ‰§+Œ¿‚Ù+?V"½0w1ÿ Þ”™ø›®­Šu#ümÚ‰wáÍÛ¼õ…ߦ׃ºÇzï ú¿Œ?+ùùÆ#Æö\X›8ØôYYßuáïºO#9‡}£9Àø:t¨Î¯nx+ä¯êÿ2þ²ºD³sŽ.ËbªrÝvªuÓv¦ýy¸îc:vÕqÊl{ÿg[·ŠÿšÞ Î‘—–+û?+ù±áQ'þ®×Þv?WÎ6ù“$WöQþ"gU¼QþϽòv`ÆXÕÿEþŸ­{³‰?{Ægœ£üYŒ•¥}ü‹ñºûr6üyì\yo{²šÿôô4©‰?nÜfü>LFjâÛÄ·EþIjnn.Q“FÄ·DþI3#ûoâÛÄ·‰?nÜ&þ¸Müq›øã6ñÇmâÛÄ·‰?nÜnþC²ÆÍàOòSÄ·šÍdt‚ì‘Óà¿ïëi²'&þ¸Müq›øãvVø·´´ŽÆÒ¾¾¾›øãv–øG™G—£9b³œucைöøËøŠ}_LŸŒ…¿nâŸ-þ|Ý4þ›Ê0qÝÄ›ø/NþdâO&þdâOö›?ÙÓü/Ü"þ¸Eüq+ þiÏw'ÓüRUÄ·ˆ?nÜ"þ¸Eüq‹øãñÇ-â[ø³9]>ÔᣲÆ?:ϛǒ¨×µý¤êu©ÏUY⯺FÍâÝ&Î>ªmˆ¿^ºë#deº¸X.kË”{ªÜ0ºv]Ç™°ð—­ÛÆMe6q—¶Tõšr0ްó·½_0õ³4ø'‘ØùÛÖ•Fÿ—å§êo@\e…?“-›FÆÿ8í¸¶¥kÇõØLëYâÏÏÏ4žËÆQ—û?Ùº©>Õ±‰qÙöª˜î¸]ֳƟä&â[Ä·ˆ?nÜ"þ¸Eüq‹øã–¯ü #Px'z| ÆûÚáØH×\¼ò‘ÿøî<”¶CùL'”g‡¡|e+”~é†Òñ<”FVå¤dä#ÿÂÐ<ÿ“þÖñ]Ó¶@WŸ|ä?Ú—‡³ƒË t2å™ÕP:ß —‹mpiç2¸ÔÛ ãësNõ%ñž4©÷í¾ÉWþ—‹•>ßS;þí¨Žÿþ¶ïó]e[‡ëœ›íâ¼ãÕ½3å/ÿÊø?ó²0þwUøçµü]ßͻȖS£û¨¶‰Ãߦßø·öµÖ¹îþOÂße…ªL7½ÿodþ‡Ž¯éݾí»ãèqðOŸø3Ö¹ÁVÈUÍ—YÜÔÿ“˜ÿc3ÿ£™ó¢å6sPTåÑ|ãJ“?ã*.¯žk ö}Éó_¡/9þ¶÷ ¦18 þqÆ<Ÿæpþ2ö¬¯×þýolü—­»ôå4ú¿,?U\‡+mþ|ŒgÜùX?¾¹zÿÏžýnñïÑö—sndüÓŽk[ºv‰Éâió²g ŸÿOTžÿ¯÷Ì?ÿ·‡Ïÿ£+ÕßÿØŒç²qÔåþÏt}u}R5&»ru¹oÔÅ}àÏÍù³ïøuü÷º}ÿCR+mþâý¾x?¼ÿÊCáã|õspþ]Ð}÷Ÿ¤|à/ZÌÒÂ+mþ*“š#Ÿ¾ÿ!5_Ä·ˆ?nÜ"þ¸Eüq+ þiþ_dúÿH·Düq‹øãñÇ-â[Ä·ˆ?nÜ"þ¸åq.iá•&ÿ³cóî ™¿9×šÍ l__Íq™”œÒâvwJç» |¾»Ž»èŽ3Uîü3I™~{ƒAiñÿi(Wý}OÅœ?ãË÷'òçóƒuüu¿‘Ñí“”i.ýê,S6r IDATxœíÝ{˜åïñ_3ØAr2.«p›9# ¨%ŽFÍC@]®b/Y…Ü£!LòĘËõ˜¬ÇI\ÍÇÑ îÆ;¹¬ÈÄ!‰FTðB{QóŒ(:á2Ó3ÝMŸ?zº©®©ê®ê®î·§ûûyžy¦ê­·Þzgê×oÕÛ]¡È»ïÉîÃ={’Û¶mëS€_'t’†sLÈ^^o]±ÏÈ‘ÿ½L]C1vîüÏÌrïÙ`o ¯ mmÚ&%íAJ€ÒáCðô_„€J¶¡­-k4мû^&|Fj6Ü=åw"’"ÀnC[›æÏŸ«ÿŒ¼_SǮ֪#|ªÓ¨QÍ5ªYÛ¶mÓ‡{ö˜îH’¦Lžœ>/%ëÝ*]÷¯/¥~6S– ÿÍá G|.«þ}— ¶—D:„¶‰ÑP±¡­MS&O6ÝŠ·ó‘IÒÈË_6Ü“àµïøŽb{¶fÖÝ]JtvéÈ1“5lô™òë¦hôÔ ¾Úþù’›<ÕûÖ¢Ÿ”¼úmÛ¶é¸ãŽí³!yôɺô¢S5p@ ! j #¨Ó‘ uåd½qÿ5eáb%öo’$}å[©½{^ѦÖSuâü?} »5=‘·Îã´K’.ž6¾èãuî©×§»ÞÔàŽT}ì:ø¡z>yYÑ=ïiÈßýH+ž¼Q³¯[!IJvE4u~ª+ï=K§^ì- ‹ Ž´bGR®# «×iÔ¾÷™õ:õƆ[ÔtÌlIRdÛ]jùo ½Ü.iXßýgÌš•µ¾zÕ*͘5K«W­Êª“.O×±oË×f9XûY®cÚݵdYæ›ï€B¨²¥ƒÆ:A„ÐîÝ»ô¥3NÓ¡C©ÿË{ßu­ë',Ò—ÚìRí§Â.¨ŠÅ“ÒÁ¿H¡AYåƒ>7\/™«WŸ=[Mç½PÔ1œL¿rNÞ:^‚Ê«A#ÏVý±ªkø¢BG~ª¡Áªkˆ(úñ}:oÖízô®’¤KÜ¦Ç–Ý I:óJo#Ú|÷vÊ)o¥ÃçK—œ¯ºáÓ•Ø·]ÝŸ¼¢×žÞ¨ÝZ©aç=£ÆÜ®Ä‹)ÖÓ Ûþ¥~öiõDר«³^;4âïBÚõ^¢Ï€Ç©-·ËBöòôúšgžÑô™3µæ™g|µk]Ÿ>sff9ÝŽµÌZîVß©ÜÚ¯ô(Ì©}k™u?ûÏe_Ï墋¯Î ¡´o/Z ‹.¾ÚSVcÆŒ$„*5d6´µeʧLž\PíÞ½K§œr¢âñžÀû*I±žnÏu[ZÆy7×6¾ùªVÜ}².¸ê|ÅãIqýkzúî“õÕ«ÎWø×Ô¶Þï’´xÑl-^²2kŸþÄõÜÜ N“$}ðÈ@×Pwt þÔöÿtðÕv8u¯º†?${KëÖ¬qÜ×m{¾õ\åÖ2?ûyiÏË1¼¶1uúô¼¿»‹/_жBœpÂq„PkjáúÞ <òéuâüW´úžS¤¤””4óš’¢­^¾R-ß|-¸Ž:H¼NúM¦åÊŸQ3Ó†-©Ïâ¼á§gÊ/š­~ú°nûÁ’¤®ÎýYåûƒËÔÃàä½f6fÂ~­_Ù¦ó¿wYVùŠW‡hÌ„ý:Ð4Aÿ¥i‚JÿZå”!>ÄÔ¼ F?V¥ü ¸ Ñ²ðUIÒîø‚è©e+J>áÀnÍCOÈßKÆ`¤ÃÆiݾÜú芲õ+(yèÀˆµ£izòÖk³ÊOúò~±¶d+¿£ŽR©”~äs ÇIâCLQ9L„O¯ãW´ûÝ»ÜïùµÜï”-žë%8«ƒ#×騑¶2©Ïå6T§OÍhÈËpX¹ƒÇ¤_þBþJU tÿý¿NžxâhÓý@?ñÆ;2Ë„€Bå|àÄúb%=*’#þyº8;öð›­a^0B ¬aùlßþvÙ¦¶%ktÆÁ=)1™LÖ–ÄeB¨[¶~p# €Y#  G-Aªä¾@PiW’Œ €F@# €À`0‚AŒ €F@# €ey Ý)¡²ú÷Þ|Çø¬/»õ¿£s®ÙB32 (•s§MÐúµ/z®ÿÌõc4óî·]ËÖüb”J•Çb ­ùå(Mÿæ;õ·¿ …R¿œd2™³ŽÓv·rÔŽªIÒúµ/º¾ N¬Û½,£ÿñú÷Û|ÇxM[ü %þúêÙó[í<ª½Ûîש—}C;×ݤ§ooÖÔÿñ„¦ÎBÉΈ¦ÎK-?}{sŸ¶B¡Pædl-ë/ ék:@ª&F@öWÅ~_%£ñó·Ðð·½ß¥ƒ%sxÛÈs¾¡ûÙ)’¤KÜ¦Ç–Ý %¥¯ýóAv¨YU5’ÜGAN# ë¶\£'ô~ÂçС¤ïtÿê|Sÿð½­êîŠ+ÙQ´+®éW¯tm/™LºŽ$Ò#$ëv/Ëö2{=§6­en#³\åùê³O¾c;ýúÓHþÔÄHòwbBÿä÷oœ8$©ç¯¹+õlѼ¼ ¥7©k~ò½pÏ•:ûû[|Ç~¯£Ð{ÖýrµéT'½ìe??}ö³Óz¾zÜ'ªnU7’rß ’ß#H×KŸ¸ìëè? ù›%â‡R”ïkßuÍ'íû£‰C9ÛtåXÃ!_Û^Û B©Û÷r,§ºÕÄÈH $)žHJ=û¼UþdcjŸxa'ÄRœHK}r.çÉŸ ©MU@öPÉ·î·ªO<ž”bûýí“g$å¾$eϳ_ âò\)”óR—ÝjGÕàW"qHŠð·O# { qr-´M·ý¬åÖpôÓ~¾}Ü‚¹¿ôjVâ¤xÔç>Î'G§“m®õbëy)ó²\H_‚êS!m¡º@¨YçÿË+Zñ½q¾ö¹ào-Qo€Úc$€ºþ^u¥B æ”=€f͘TîC¢Æµ¶.7ݪò}@€ÊGŒ0rˆK"#4þ\‡E²¾àYµúysÔò}q¦a£æ|f@ØtIÌæÀ`—àPÓ>[w·b{¿5ÑÝ¥Dg—Ž3Yû]Ÿ)OF®R¨ù×zT/5ëˆÄwtÚ¨!JŽ­ºc¦*Ùó©ÛßQhï›zé£ï¨{ÀJF®Ò9×lÑsKÏ!‡Kp¨Yõ±Ô¡NÇí§^¨ž?_¡X,!IŠÅêùóåêPõ Ô¬Î=õút×›Šk¯Å^Qâàõìý½:?بðß^«u+nÔÔùOhêü'”ìŠd–÷¿~YŸ¶Î6!ë«\ÒÇ*å1KÕ¶½ÝrþÞP¸‡š6häÙª2Vu _TèÈO504Xu E?¾Oçͺ]Þ5C’tÉ‚Ûôز$IGŸþ¤c[Ö‡–ëÑîÕôÅjúYàMMPOXä)U¬gÔзøOk¨£ORïýßÙJvFíŠëó_^YÐ!œ oÅo0/åÖ KosjßZfÝÏ”~‚Ók½ÔuûYÜÚ°·ƒþ©êÈþÄÅr‡†ß';z 6ë“*Q~ŸÿòJµÞ7S#¦Â¿%Ë7jÉò™e§ïöe7éÑ„›bOÀAO©G?åoF¡W™ªfT(û=£|u+éd_iý麢G§¾wÇuã‚I™eë÷ŽOöjñ’•Z¼h¶:>Ù«®Æ£5h`îv­'u{ å»aïV?×%>ë>ùŽY{[ní;•»²½ÏNåAô•«æÈÏ ÜéRZ)YGdÖ2먇 Åéîé–$ݸ`R&dºþ5µ­÷»$-^4[‹—¬Ììc |7ÞÝN¢~ÊýÃk~&7Zî¥n¾ßW®Ÿ/ßÏNˆU¦ª¹g½„V(/û»Ç©<ˆ°²^fsjË顟õZ–y—ö'Ž$ÝðÓ‡ÕÕ¹_R*lnøéÃZ¼h¶$e•wuîÏì 8U5r \`¯Ÿ®ëVnßÏ­Üi?/Áå'¬˜€¬Û~p…ëº}¹õѳR^•WJ?P{ª*€$瓱SP䪟o?û³O®Ÿ%è~תh÷ºwùZŸ{1‚Puø1ú˜£Lw¨YUsп0BÍéJDMw€ Ô˜Y3&™î€^\‚Á5¡µu¹é.°!€PõæÏŸÛ§ìÞ{ÿ®»î ôpWko“¨ØÚ´j–ô~{f=J¤ÆqÇ«eÖã{†jPW7Àt€šW‘´áñ³5©¹C:¾Yj¾L:Юè­ÒÇéýÍÚðøÙšrñ ¦»‰~¬®ŽÛŸ€iù¿0| w!•ÔwÊltc{Ÿ2À0¯"G@ïK‘x»†V¸c«¢"ж¿¥h¤CÚÖ¡pã8_íñ¡ <ú ºð¡¬€y@’ÔxÒ8ip³Ô8^áúf©¾Qáúvið[ÒKîûùù0ÒRðû!¡^‚­Ø+õ»¯Ÿ¾± `^_‡hW8ܨ×àœ/ÇYÙŸj"|œž°jJ±}éA ÿª¸PÃ- ©…ç$=÷–$)ºð_$…sö6ß+o·‘‰ßr·cåz<ƒÓã¬ë¹F8öz^ûèÆ©?NíØûäç÷ÄCòxQQÔpKƒÆ “ÂÍ©õh$µ¾çûê¸ú)^xÛN'·PÈf¥¸ÄT®ËcNûºý¬£&¿¿'‚€F¨á–Å~Ë,ÿÏ5g¶ýêE$IÑ«”Në†ÝÛÛp€½ösiªÒîo:ê+4ð H1r ŸŽ©ãn/ÇiØEŒ„ìüœŒóŽ‚fXˬ÷·r]î ²Ÿ•¼ªƒñ:}YƒÆO-o}.¢Í›¥uõã‡Î Ÿðá%‡^^öÏ÷8n·û<…rº×ätÜrª´‘ €þÉx…›¥qç4gÂ'öã˜Vßr¶:¶mUxp‡Âᨢ튶G´KÛ:Ôñqر-§“q¾Gd;]¦r+·ïçVî´Ÿ[PXË f]LäûYsÕq*/ôçP{Œ”ùX 7Lj˵~ô´F×m^.Ey¹’k?û³O®ŸÅËHÍo›ålŒPz¦›UˬǵiÕ,µ¿Ô!m}+5û-–âÍÒ¨°.šÇçÀ•—Ù”šñ’R!$I㆞7qÖ*£}ªu„€R3@[>WÔ:=PŒ!µ«‚? PÍ €À`0ÂÈ,¸ÖÖå&‹7þ\Ó]`a$€8¸0‚AŒ €F@# €À`„ñÒÙ¾¬!³üÇ~º†Ö¬°ÂÿÜo²‚'mê9Sõ|ó:}á' v…¤Áö! )™LÛ(Àc= …7g•ýfñ:5ž%E#Ù#¡tY.¡P(k½ÜÁB˜€?æ&!„ÃR}£¤°¢ï§Âç7Ízáܘ¢ïKÏ¿³N[¬Sã0)Üì­Éd2™ù² ²ž•$m]ø}mž3)SúúM1µ?œZîhÏ?úñ" e¾ülw*ÏW×ë1 –™  xï÷úpVñéËtÙâ©78uÎ:ZýÐ7}&}yÌmtä¶Ý^žæÖ–µ^¾c@­37 ®£CÑ[3«ÑHDÑŽÔˆ(}IÎɰvçrI}ÂÀm[±¼¶Eè€;c4öÚ×µéñ‹3ëÑŽfM¹i½¤ÃS­·?pºŽŸ9)S§ãçÙØáÚ¦uôá¶­XöɹB†I àÎèû€&^üxî é‰ ñÔÈ(<¸QáÁѼí¦/y¹€‰kÖc:…X®u¨F÷I}Ä£Ù÷ˆ¢ùHÊ!§{5NuíÛÝîñ¸°Òå^Ž µ®òH’=qÀïv/ûå*/´a TveMTgMTôo@c¯}]OÞ}¶SëÑŽ°fÜôg³¢¢H’.ºþÓ]”ÏAŒ €F@# €À`DEPÛ­CÕvëPÓÝ”@ÅPÛ­Cõ•ß6Ý @‰Td=wó1™ðI$’ZóP­¿¹4#¡ ™ÍÃçÀŸŠû(žµ?>ZS.Vbÿ&IÒW¾õ€$©sÏ+ZûÏÇhÚÍ{÷³€—O”.÷swÜžûÃóÔ¢ŠÅâIéà_¤î=Y_ƒ>7\/™«–ëºoú9€.ßñÜž¦ÊÈ @Vq# IºðνZñëßêЧ;'uá{õtz=vÈw{Ö'£º=åÔ^7×~ör{[^žšê¹ú ÕÆxY§Y[§]_òóOôdëJ%©“ô¥½ë—þüS×¶Ò ÜNî^&xݯT᫟ÖôwF(=ÕÚB¿ûZfýk÷|ª¯Ýs8p¬ËNì#§m¹êxÝÏ:B : í'ô7ÆG@=±nM\¸4+„Z®øEQo@Í7J(44 ™igçgÖ›Óý)¿m@¥2? ¡ýA©ñxM\¸4µݬpcX-s®ÓÆûštÖµ» jÖz’vºïã§ û~…N6(ôxPŒŽ€&ÿðCµÝ‡Ô¾Yжg}…Õþ¿tynËédí6AÀm·6rM6ðÓ–—ºn—ßü´ýñд›?ÒSß"%¥¤¤™×ü“hõò•ºðÎOLwP"ÆH’.¼c¯$éß%E#zjÙŠ¼ý›ñIv„Ô†Š¥<P;*n¨ À`0‚AŒ €äö@_U@Öçè”ëÙ=åV­?€ÚTQoD-–Û“M«õƒ;«õçPª*€¬¬c°?fÛZÇoY®öòq{Ô‚ŸG>¸=#(_övÀ´ª 'nêÎ÷(û‰Þi9½îõØNaæåøNuÝÚÎÕ˜VS$y? »…I¹NàÜßPíj*€ì—¦ÜÂÄÏȦLÊ¡jfÁÙåép Ì«ªÛû\ÛÓ÷a¬åö27^ë¹Çïñ­åöÇxçûÙ ÒTMå:éæ›Žo€ß2·íÅ?W{^Ú ˜T’ª½¨lÀ`0‚AŒ €FyPkër‡E›?®é.°0@œ\‚AŒ €F@# €À`0‚Q5 …²¾L?×: ›‘â)•d2™Y…BYë&û諪ÈI:ˆ¬d8•YËsÕwk×Ëñr•@-¨ú’Ô' ÜFJNå¹êÛ·9…ˆÛþ¦Gh`ZUÛˆ¢Ø½Ûý¯íºíO¨eU@¥:™Û®ÓþN—í –TÍ,¸r)vv[®{MPKªjäEúþ‹u=Í©æ1©©®úÖ·:ÓïùÔÑßÖ\ו€‹.ºZ`²ºñÆkƒ?j~Dzá¸dñ!Ó¦Mßo¿9)t Ò³k×Îþuë7J (G"ò¢‹®~íkŽ}óÒã9f¡ˆäóù; ígÛ¶ˆ<õÔ¦{×<üØãOx)©¹®ëåã²3N<ü°ƒ†‡*Õª9T±‡‡+iwÚdÊ”îžî|©TœÒÓýü-È¡IDAT /­þýC^JDdñâ^>n{yçÎ]zµZíïJ»ÃÐVÓ§÷”J¥9ûu~ØA"'öôŠˆ¶råUËÞò–SO{Íί¼²ghp¨R1Óî*¤ »»Ø3µç€fÍ™3íž»_}ç™wÐì;û7ozeÏŠGmÃö-Kn½¹ÞµÖ½çÂEs¨ T ½*âÎ;h¶ˆ¼‡‡††*³««ÔäÎ@mÝõÒ’[o~ÿÊ·¹‹æZ ö“"ÎÈ];šHx"§IŸ6ïÒ6l¿eÕÍ;>¼rþ~‰H¥b Ô‹)•K}{t®bètûÕ9ï:i¸O—Ç6Úí$?IDATF5É*ùg_‘sÞuÒÏ¿¿*ùßy3ûzÍ鳺į" ËȵÖôÚÇÖݪ[ìê*ní5§w¹å¢•WÓŠ¶š( W‹ýºc¹¦®k–!"~ –!ˆÈ|Þni†Vœmݪ=`ÈŸÖîÞUµÍª]îv§ï_˜;¯{JO±]» I†ãZ–kçmû¼kÿQDþýÊO»yͲGÓü‰\ÿUùɧ.²u£j:šíH­$,¨63×)Í›=SJÅÛ‡ž~©ÿíVm£ZÝÙo¾°É˜=§pô«ö›7oj+÷êfW-ɹfU3+Öo7n‘³™ÿƒ\h.`‰|è{7{#*|ÎIDATíøüçı×Ç®ÙZAD4MD$—ÓD4ïLf—áÎ.—‹SËFW—ÙkvõªY­Vu£ªÕJÅxamßà`åô·,™1£K4Ñ\q5ÑD.¸à¬ø‡]tȼï,ùÑÛÊç$·ß~ëÍ?XõîwÿÅïý°j§Ÿ~âò˯I8œj õ8?•×MÓD\×ÕDDÓÜ‘ÿ Ût¤$b‰IÅßnÜzÖ!óozïùÞ+þóÇ^>ŠHÕ2ò¶ØyÓ‘\>'®ˆ&ŽíxÁX‘œ¦årZ¾×D¼«=³ú\DZvìÖ ¶®›•aèV £ZÑ«]¯TŒaÝxê©ó¾S&IDAT¾æNyóÒCE¼ˆt½ß•Ï}îßýÖ¦ÎÚ/¸73§tõW3}»åÃ?øÈÃ}|å% —¿ï¾;oþÁª›¿ýŸs˜ëŠ ÔÚ»›°Jjí»jþ8ñZM ›Ò¢¹âŽÖxþÅj±LSs RÐÄÎmýô%ó¿úuñSòÝç­øéOü|ÜúéKDÄÖ\Ûp]Ë‘B>/®¸š+®›Ó4©"sÒÕUvE´ÑÍÅ,L)UDM ÅÜÔiÅÃŽ˜cš¦Qõ¾ªÕªiTÍ|>_,äÅK]qýéªoÿó_êòžéÓƒ{S,äZÿ”5î‹ÿùÌ_¶¢¨·C¾öÕëDdîs-×5]'~c_IDATT6÷9ᕚ þ2¥eô^qýòNDĶE˹nNÄ‘-_|ð7¾!£)éçã–‹/ÞÛ–ãˆm‹Èh¥(ÅB^ˉˆäD$—Ë ùB!—/ò…B¾ËIî¿vÉ=[ô5/ö?¼­²ÑÊï*wï™Ò38mZeÆLk¿ýdî…ƒìëšU(äó…B¾Ï …Ñüé§žqûí?-òùÂÞ‰ò…ü}÷ß}î¹ËÎ=wÙ}÷ß/äoùá÷Î=wÙàP¾êMßòÃïå ùà—¿î«¾îÍ 5è-óÔÓݸêë瞻쿼u÷ž¿øå­çž»ìÆU_÷W­åuò¬sNS-¿’IDATꉿ¼“×TË÷=_Èû=‰yNT{šä«LùB¡8ò;ïyÑ™Ž+®i‹ím¼ø“Þ+ÎÏÇ2¸€¸¦é¸"2š„¹|¡ËåÄ«"óšä÷-g\1ß´íåßm3tS7ŒaݨTª]®ú>\1*º^Ñ«¥Rî¼¥Ý{#æèÔÓ—.ûþÜtÛm?>÷=ï÷Û¼÷Þ»¾ü¥k¿öO7NïéYñW,hÚ©K—ÿè‡7¯{öÙN^ú kE$8}úI§—´œ ×YKærôaG•$·úÞÕ¡—žþg"ò·W~ú›7|ï#øØ8ç;߾ᇷüòÌ·œuÁÎɋ֡ÔÚIDATö×_þàîûò—®ý×ù^¹PXñWœÖÝó†7ò«_ß÷ö·""¿ýùÝâÈêûÃ]õZö…–àOEÛ .ŸÏî¾û÷ßùö _û§;úð£ý«Ÿ©ž“à†ü=µóÉŠM:2 <ëiÐ4‘ÑK âŽdÿ_áX®¶ïË!X?žuÈüUï8'ø¨c,œ9,ÍÕòþ¹H-¯•ŠW4ÍMÛvœwàÔ¹Nã:ŽcÛŽmÛ¶ãØ–íÿè8Žã8ÅrQs]ïÕìÓû?ðá믻jÿýð笹ç9úð£òÝ%¹ë®ÿþ»ÿóå“OZúëßýâ䥧ýî·¿úäM^IDAT“–.Y|h¾T,äÂÇ1Kšï.kµ\¾ìLo™C,Îw—½éY=Ó SÊ"òË_ÝvÉÅŸõ6´dáÈ¿þÍÏN>e©È BOWÍ–µBí[ë =]c¶Y.FÛ<ÚkSõœ7äïiôI¨C¾T¸ddöVf# ©i#ÿ–iJ±X´mqÅÑr"òW¿þ…Ÿ2zÄýoo{§ˆä\G4±\±LSDJ¥¼Ÿd^FÄ;Ð.jÁƒy»¤-íÝóðºÝØÚ;¬W+}¸¢ëÆpŨTtÝ0tÃÔê'.:½TXäo8ø›2cÆôË.»âü÷¾ÃŸsÿý÷ˆÈYçœæýøÀC÷‰ã¼÷‚¿¸öC›IDATôÒOܹú·÷ßÏß^qÍu_¼Æ›þò¿ž/æKåÚ÷$yók6ZÆS,L;¦í­å/ðÀC÷‰m»öÞãY,æk¶\,Ö~w¦¿|’6E¤TÞ;Ì ©žš\22 edOº¦í[BŠˆc;––qOþöv?_\¹òÐU«d4%¿yÖÙŽˆ¸âØ#ÑQ*ý‚4—È|Nò…‚6ryH4W¬ùSíª{Èþ=/îìßµÇ;¾6FޝªnT«†uÒ‰K–/;¦X*ŒT/®«^¡¥baÁ‚ƒ¿µêû_9rCÌÒ¥§¯Ys×o~·¿ŒmÚǾú5"rݯyó)§žzò[î>e.ûß½IDATõu_¼FD[tDWOW¡¨ˆÈbAÕ`h™è´·–?ó¤O±M;´pÍ–KêÎ$o³fgb6¤Úhm$døË” ÍuÅ;ìÕDóŽ·½DGsÇu]MÓ.¾ã7~>®]ñ1ïû7}GFSòËß꺮m\m.•ò®hÞ EâX2ZEjÅR°DrKs‹nÅž%rJ.—+hÿóÜ–áŠ^ÑŠ^ÕªaX'Ÿ¼dŇN]tÈþþɯÛ~^­tüÞpå•W_ýµ"òÁ^¸fÍ]>þȼsoºé[ï~÷ùK—ž&"×_ÿå+¯¼üÌeo/w—Îïûî½ïžÏ_~õ”)Sº{º4­ö/=׿ IDATŸ×¸ªÁà2ÑéóÎ{ïš5w­[ÿâ”=]"ò¶3ßYî.•ÊÅÓN{ËÝwßé-ßr´3IÚ|ûÛß±fÍ]Ï<÷ô©Ÿê¯;憂=  Gmäo•+"ºå4q%õƒ«ý||æ#éÔ3ùË£¿÷mùíÆ­ç±øÚ7½Å¶GÎF–JE¿=³j‹_d¹\Ü`äŠhå#öž5$Ý…åÓ»Ž;jÞÍ?ûㆊ^ÌˑǼté‘gþÙ1Í›5zÊTDütD¹<’¹øÀ·½ü²ˆ¼ùÍKoü×ï|ï{7=ðÐ}çŸwÁ¢ƒ—¸¶Ó5¥ë„N‘#8jÚÌ©¯ýëEäUR§Š^IDATG3{®²ê¹ñ¯Ù`´¡é3Îø³ë¯ûÒ'.Y!"_ÿÚ7ZrÌ´™SËåÒ%—\v÷ÝwžuÎiO=õ¼ª«ªÎ¨Úü›¿ù¼eÚÏ<÷ôÁ‡žqÎ9¾}Û¶K/ÿÄùç]à¯;憂='ÅRA™Š}ïóÙ70ÅrÅuÜkO)8žúÐGBk?õ¡óƒï‰Èµ'žf9®=ºn¹T½ƒQ³ÍªxCêþÍå+¦ÏœémfäNõ‘ÿv7Ò…‘‚vï¦ü{’Fï‹|ñ™"rèч;´{GïìýgŠHeHïÛ3040<}Ö´ÙûÏð†²Lkã [qp>Ÿ·m{ÃÚ-‡6¿<èdIDATæQv´ñhƒÁeTÓƒýCÛ·î‘0ej·×TÕ¨n^÷²¿LÍ®Æt¦f›fÕÜõJïÌý¦wu—E¤wwÿ®í{¦ÏšÖ¿g ~C5ŸÆ1ðZM™RãÿÆï½)û÷çœw䢃ÓÌårZ~ì+Ž+®m9Ž“+ŸÛðÒ?ÿ±zý½}_úòMÚÊ•W]ñ¹í7g?‘Ñrpd‹š;úé_£[ñÒqohj2r»«išëz'®5—³3˜TˆÈøu™wëÅŽ¦¹·ŸuîÁΑ+&:Oå˜fÅɉȖ—·¿ý7·Éhá·{Ç®/þÃw "’ËK±TÜ÷º_+zW‹¼òRÛçì„ùIDAT=4þ[#÷ù97‰ö㕚 ~ÝSá¿õÐÝ›I#dzÛ^©Î; dŠ&–×Ä^š·–ˆ”G®?»"Z./⟋,óÞG¯j‹”⎞gÔüomôr’Èè[³GjÌ‘åÕš—k:xÞSà¶z?i^ÅæÊð§.Ÿr×·½2«Þ-{Ïð§./ ^ø¹šì}öô™³ 9 ó{æq·ÉåSnø²?G½‡Gb‹·áO]~î™Ç“púÌÑÏ®)—Š[·liYŸ }ÞzÚ«ä´ï6°¢nÁ$ÜoÎâ©ûìÚWšÒ9˜N Fä ϯ]¿~Gªý€¬X¼xÿSN~µx¤Û|ÌIDATY(fΚ³ç‘gn¼ñÚ´; ë&êåØÁŠmZ®e»ÿûŠÿ{ÜëönÍ®ç-À0áøÉXµÜR!| `2¬Ø"R1ôªåN)ï3<+ `1LGDLËõ*G)äµaÙRÎ N© Yö>ç2ýy2Ð,†éx•ã°îøù("~>N)窖;úé5#¨"Lp~å("ú#"ÁRÑ«ƒßƒëRE˜° Ó æ£÷ݲå¢W<ú߃‘&&/eß|ôø¥¢—‰þ¶w:2Ø `¢¬Ø†éøÉè}I$½9¡íPSD$€‰Ã;².4Ór§vçýpôøÇ×– fLSIDAT=rsOðø:z”-DäD¢Š_ ù| ³O; šwOxpà¥oÚ«Cµƒ«ŒqE;ôÊq›÷Î#¯å&68a4öÌð|b2óO;Šˆ7äc¨~ôøUd!¯Å\Ô®WEú¯:µ€¬ 棧f>J Š ÝÙs¬ÝÈ}‘~t+—˜z3øPhá„-D·®Z&Ô·à25Ûv :ÝÀŽGgÖÕŸšs¯½‰zW‰Ÿz6¨U‘5Ñ|”}/^E«Èà[kšpE[|¡zS"/ÚÐ|¿èüh A5[‹YÌ_&aûI$ÜñÐÞ%ìOcÏLp­$«DH²;C Sü{ƒLËÖbä´ŸüúIDATgxôÙÁr²UW´£/0Õb o¢áÖ’o4>AT«$Ùñ‰gÒî82¨fñ(µn ò‡¨–“ñW´›ùDUÝ7În­é«·¹Ù6o"•m På£W?ªò1(TE†ŽµƒKÖ‘þ©®š¢…ʱ1_{ñJ½­ÕÕ¾ê,Þ8›m–vÖnÔ‰hŠßóÓ/¼´î¡ž™̘½8É*zÅ1+/þþæ-:IµLcõ£Ç A©çŠv«†±ˆÓö´°}·Ö•ú†7Ýên7}ñÚ°;˜v¿üä/þí]'¾õг/ú¹jÇÌå§:ö`pæž—Ÿ¼óÇ—pÖ• _õŽÐò^8–‹ð£IDAT¹š§ ½‰ø*Ò?ÐŽ^ÑVU‘qç"ýªÊsz®æ’¡ùªUn+¦µ1%ß—ö4Ý—è%—äÏLòÆ£ jѳ„IèŸ_yôÉ+:éãþÇô¾\k—÷¥¹†÷=ø5{Þágð†{öùPtzbòÑ´Ü1²ƒo@ô'Æõmw_Á™I–ŒÎ¯ùP| 1[Qu£æ1+޹wõîxòé˜þ4ðÌÔÛ+wô/Yü¶b¶ DíÚòàÀî-'œõ9 ¢÷5æê]³wÒûîüÑ%þÿâµa:åâ>©ÊGÕµlOð ˆþïÑÐVÞ~ýÞz…c:Õ­®£7ðuäÉéÛ³uÓ7vIDATÓ¿ µ¬ª"ýdó\¤7 ÍSµ\ï+8“!u4AeÇŸžxäw"¢»·zìr{è)Û24×t]vµ§R‘²½³¿’»ª›–aX¶e ˆÈpePD‡+"RÐ_4‹NµÿÎ]rôÉO%ÙúÔýYxôÛ¤Îs‘~ƬBDh‚_ÿççgÌšøëÞUÐ7~ü?ÚÃ/8NUsMÓ´%7Ó-ZÝ2Ms‡eNyª8ÕJ±Ô•¯ê]"vuŠi==3 Ëž>S,c@dÿs@dˆØ•ÍI¶~ß¾rà¶&¹ãÇ/$“Ü$D$€f)w´àˆ“ÌÁ"â8U‘|©˜×q¦EÈIDATµœ&"®3mªˆˆx?Š]•|©öDb®ãŠÈ}¿ú.²fö…®SW £T.'II"@¸æh˜ØÕÐCšˆØ£#ˈˆH¾4²°?¡hA¹Q­("VU÷çDS/ŽÞ2 óQˆHM¡Wìº×ñ£°¡|Í5«º!"úPû"£á(ú1áûp¸¢  )ŒB¡ F¯ˆˆÙ72/4á{¿Ç,–db´©²”¡~ðFô>æÐpj棈”ÊeÉ‹E  }ûòÆ!"böiö WúD$:!¶î>*Ö6·{ž·zÍk7•ïr´]"¢[¦åc±T¨1&EàöÉ¢MDhÓ°‘ò_ú ÐIDATÐÍ÷՜رmClÛØ®£kƒúpה¶ŒY¬<õÀòÔƒüK:Že&L?"@Ëy±í®cÕ\à‰Gî~ió =3®«Ùá!}JO—7œ_­ŽÄ±^µEäˆSÎzä¿¿Z7o :Ö6ozÎüãŽyû·eôd%U$€¶2 [¼{}œªäJáï"›[sÖÅ¿î™>?¾whãèäèéEó%mhŸk8¦©‹ˆè/Ǵ㸺8FQ²~óûŸíwØŸ¬K  ý¼*RDüL ~âѦ.x]Ïôù®µËÚþ¨ÛS²÷¼ä-në;ŠîNÓVÔDÄ2sn¡§¨ xRí•ÒLïÝ?´PIDAT!wtÓ°½G½‡‚ßÖÒLy~íã]ÓçÏ;â#ý¤ŠÐ~^)"¢¿"¥™®UÑ Ý^À™½kŸ¸gÙûW¹úö¡ÿ_Q0{§Iµ·XΛ†],ç-3W,˜†­åŠ®cz­i¹\Q0ƒ—ü‰iRí•ÑP6 »X0 [¤×,Í”j¯)¢åŠm`hÈÚüÊÎÅ'~fo?ë¬"¹é@óØU7Wv­Šˆ¸VÅÍ•¥Ú»}ócSg4oÑI• ¿j¯iØRíÕrE/½Ô³ÌœŸ^°ºŽé¨·°?ß›ðVô5GkFoõ ž‘Ù‡œéwЫ"s…b¢ŠÐLšÑÔ¹mIDATîì±?>ôš·ÁÚ~ϯž9¬»ûØJ¥ÒÝÝ]©T¼Gߺè×1³aù°nNé*¾óÈ»¼ õýý¦·íÚÓ/"ûÏ=`鬟ܽùÍ;^Ù™+–†*ú‡Žûƒ¯^°~ÍbYrÄ¡KgýÄ[·j¹ë¶¼tÐ1áÝ 92Ó0Jå2U$€¶òÎEj•m¡ù[^xÌ™2õÐc—ÿÇjòìA˲wíéÖÍaÝÜoÎlo±aÝ‘Á¡uÚŠàê›^ze o` oÀ ¾J¥24l ô êßè8±5{ΫTí¾AÝ ¼Ñ+!<æÃÁ½·ÖPEh«‘³„Öphþ#¯9öôÏã¾, IDATÜõÀV©ZŽˆ¼û¨{j¶0Ð7 "O=»nÁ¢‘9/>24øHp™aÝì ÁjÕüé³§z­9U½¿PD g¤ìÓõáh )œ‹Š‘û"EDß)Þw[þÑ»]9ì ý½½^1("ŽS~-Y4¯oPïÔ×¾ø’7GDž}vCµjö÷|àloæPE×uÃûêë|áÅ-^ƒ•JÅ0LÃ0‡ Ëqªº>üÊŽm)!¥þs‘D$€&ðªHÍ1¤kÎHJšƒÏ<÷äâ“?êîz¸P,{ ¸eëŽÛÖž]ý5¥ÿçgߺÒJqœêŸ±¯oÐ0Ì·/ù·˜S5 Ãìîê*ëÓ~!IDATU³o`øŸï8ZDíbÿÑ?d8ú`µj‰ÈÓ/®Ÿ}ðé¡RDª†1ZE&BDh¯ŠÌåÊ#ù(²cÛ˽½{Ž8êkèù¥ûÿÔOÀ§ž^Ým‡þ˯]›9íè…ZWWÙ‹¿ÇŸ\'"O»Õ«¦÷åo¥oPï2ª¦óÚW:P1*Æ ›¶ý~ûy9sذLÃ2¥,"›¶l¬ê‹Þ¸2ÚÏzÏE‘šÀЇEÄê÷çüá–¼ö…á§\Dz«C~ß[E¤o`ØK½í;öüà‡¿¿mívu¨X×±Ž8ô }ƒ"òÔÓë]ÇZûüf/Ì?À®‰ˆ÷½°Ò?1XîËIDATX™ÒÓýÆ×nè–¡[ÿýû‡*z_¿Þׯk•>½2¸nËKó{gyêAÑ~ÎE&BDh‚œV‘¢³Cl]l}ËÆu6n<þ”š½Ï:–!"³w\÷éå¿ÿüås÷Ÿåeß@Ÿë'¶ÍüÇ2Ë8úµÇºµsÏЖí½/M½äáG×z ¸ä°E"bW‡l)ï²õª¥W-ÝtO8ùÖ·¾²gÏîÓ²L˲ò¯ìÚ¥*!…s‘Ráìûé¯ÿóàã; Ãáç:Òü—Oœrÿ'?z¶¡[}ýº¡[=ù¼÷ÐAÛ¯ž>µ[¯ZÃú]<¶~ë®a}`XˬlÄ1ÐIDATï{ äۆûMËê‘%{þî¸7¼z¨RªT|ôoBô!¿„t,3øU5 ï˵«Þwï+~¿ˆHMPîš"Žéšý"²gǦ­/¿|ø«O7{Ÿ­¹ð¡ú7æÌê1-k`X÷î™Ô¡^üÝûà3^ä~øâàŠUÓªT†ôŠ^‘û«žîÒÀ¾mgÿÀ>0¤W«fU8ø5V òàWcûEDhC–\QD\³ÿ|zîⓞ¾÷¼ä{>ü™[–ü𙳞’‹^ìºø;<íÉ^öB0×5Õ_ì˜Ãæ‹È¶ýÏozED†ôcYÜÊnËØwT´·N¸gªIDATž}úÈCÑucÚœ×äKsœªÿå­¥õibÜ:  ¼s‘"ÒÛÛûÄãëþì‚w˜ýë­j_¡4CD}äÉ[w?¹öîi=y7­§k`H_0oöÙóþÝ[̶ô7uKd¦×Ž·ØŸÏ¿Å{Ôû^Ð / GÛÒß¿è?o홹qÛÙ=P² ó_ý!±ÕWcòEɕʒ …*@³Xö6¹ÿ'{ftèùÕ¾ç^é÷"ϯ†ôWqÐÿ¹ê"1×1Dä ¯Z¸{ â}½úˆ½—¤mÛ½:2ˆ¤mš"b™Ã»{ûWýå¦`7ºg¾ªjš¡/ÛvªæHn&¨} IDATÏG¡ŠÐÅr>7<°{·õØŸ^xÇ…—iV¯QÙ]îží}¿áü'v̹ê™õÛ×mÙ!"óöŸuÔ¢Ù‹¿ìn¾ÔÑreá+Þþøåg2’˜²‚Ÿhéñ¡óßÕ¿SDæ/\`ôíªX†­å¤zÙ_ÿ¥·ÌÌû‹ˆU©º»½ïÞ|³ØÕåTsÝSE¤Ïå E>Þ @ûxï®Y³æ±)Óæ}è¬ÊÎù|ÞªöyßEdÎ+»´G–9ºB¿øå:FhᑇÌáS´«‡º =ekh›Õk»"âX†nË› ÿ¼nËKZé #Ž¼ÎªTd4%½ÕKÅ¢hn®{ª–/åÅÊмGßy•IDATG@[Ëy}Øxú©MozÓa•zÇÅÑï1B ‡ôkÕª5T±ÄÑwöVEIJ\Ër«¶˜ÕêÀÀÐPïöY.·LÓ= ¶*•|._êš’ëžZêî.•ËÅ‚æÕŒô ­LÃ~aí‹"²ø™ª|ôSÒqìb±dšÕ\.œ.æ8# [–kz£îŠ˜öHéY1/½·nßRìš2kþR)‹^ýX*sÝS½Ãê½ýä³k´“c ºÅr~÷ö-3fuýÏÃ5î…,j°ËûÌìîžS©ìŒ.Vs¾i8FiŠØFÎ0«¹ÂPï+‡žxŒæc>—Ï—Ê¥îîhµÈg×h¸NSIDATŸÞÝ}F¥:X±?áÝ{vö‹ÈÚõ""ù‚æ/Sä£?¿PÔ‚í 9ݲ¦”»óÁù]Ýy}·!2­kßùùB^,é‘’ˆÈì…Kö_´ÌÇ\©ãÇC  MôŠžÏçÊÝ%9æÄóŽ8þÜz[0Fï_,Å0k|¯Kô°:Š*@›tuwuuw¹˜a:åb.ø}°bOíÎûß½Ø ­eZîÌ‚&£u_Í{t¬ÑS“UË-4ÿ»738l–QǤÆ0Ðw—q¦å¦S,hÞ÷ÁŠí?ŒÅè~8òšˆ” û¶{?FóQé@м"QD¼ïA^,NÝ÷”b±  š7%Y£ÜIDATZ>¦x”ÑdôB°j¹…¼VµÜ)å\¨Œb¼H©ñ¥e´~ Y{¡¬+%P†¢Ð ²17W*h–íú߇ Ç?Ü–Hi顊šPé%£W<ú¡\ÞÏÁP ¬™•ÃÆÞ¨õJH¯®”À)Èšµ$U$€Ô„ªH/ý*Ò?œöVŒV‘{¬=%pO¥_BzÚÞÌš%¤PEHQ¨Šô¯b{Yé}÷¯ÕˆºŠôgªÎEú—k|Þá¶ÿ£êt$U$€Ô„ªHŸ?Ó¯%¶TŒ GXíó21x.²&ªH© V‘þ´Œ•ÞÌP娺)2¾À ž‹ôø7úøç"k%U$€Ôø‹ñí)IDATU¤7íÝöè©™ƒ¢¸xS¤ì{.Òºã‡û"dK°rôÞ<#£Yé_Ôö%©"U·þo÷ï‹ôËÆ˜›~ê­"÷y ÎM7Ýœp5˜ ö‰È+.L«=tµ?½ODnܰ¥í€ìâ\$(‘ DD€ JD$(‘ DD€ JD$(‘ DD€ÒĉÈE‹dª„M-Z¼ ‰[¬WÌÖ£óSì'–ÂØ‹Œ ½B6¬ß\s™šó³£fÓêvÛ¶›©½:H)ŠX€‰ª¾ˆ Ö•~zz3½ýü7¬ß-^^,´éš‹©V¬¹–ªå«59[IDAT˜m—ñ»­*ÐT-ŽyVEñ©ž™ø ¹×Ñþ$éLÍ'èPõEdôU ˆšs‚Óñ/¤„‹©Öª9mªæë683¦…$/û˜|Œyºjv&æY­ù\Å,ŸpCñÓªGICLT­=ÐŽ [Hr¢3ùu†ñ««ÍV„Eü3Ùæ ) ÿ[ MLã:ÐS_$ÑcdUã­xe¦ûj–r!mîهɣM7ý4«Ì‰?Á×¢¶ºÍ&J½œLþ(Ð<)êc+¿Ðó§U ‡V‰_,´Œj­èüМ`kv»®SÂ=•Øm¬ÙøŒi$ºéä{LÚÊ•WÝðÍ«o½uõêªÝGÝIDAT;Ö\ùù§ÝpéHÙõÿ­eË—¾ç=Ë>õÉk'λk éˆÈÌ¡„²ƒˆ%"”ˆHP""@©Žû"ïX½ºuý€öX±â¶$\¸¾[ÇŸ||Mýý€¬¸æš«êZ¾î÷h_réÕõ®™áÖµ4ç"@‰ˆ¥qEds‡r ¶–°å1›xƒÍŒs2õÄŽ¿‘š-tÜ>úc·¨}ŒG“«Èb® šþ»žü÷~bËHP¶T‹ºÇ¯P§˜ÚM×s’'Ã[­ÙǬ5‹¦ï¨ãñŸWåO«>p*áç¥øÔüÔ”šˆn(áÇf…ˆîì†ZŸ«œúÄïqÕËIDAT›˜6ã?'+ÚáäÏL’'ÖÜ—øGŸ™à¾DŸ´Èx#2úÛ5fÉ1%YRõ›×Àª˜®¹;Ñåk®ÓÕ‹6æ•“¤YÕÎŽsõ¶=±um(f•¬ícI^M5CÐ:ih'ùnõé˜Pû‹/ð¾n0¦Tllu•h+uþùIÞ«4üÄÖû²ÿ#TWSõjú/2¨µï5NÁã—VüÁŒ¶ßô­´hÆÙìxbƒÛŠ©L'Æ>"EiV‘ ÿÞ¶ú7¯fûÁçæn¢‰UFè(¬Þ#¯tŸØænHÕì„ÙG¤¥ÉUdð\rè¼rÒwånIDATüU‹˜³øø+]ó¬œj™˜cÞš]Š_7zš<æ•©ÚbÍÇ|Ôo*æ¼þ˜2õÄ;}bCó“ˆ6’Í}Œ¶ö“+3©«ãã½îX½úÉÇ×4öíø_…¦œêg²ßø87‘©'¶Eé¸}ä’KûÍšéNŸ¹ ~¤ŸàÇ{eú\dö5PÍe¤qI´)"ã_äÑ;Ú߇촩j|œÛÊÔÛ¢ÎtÜ>òÇ/ûê‹Èk®¹ªÞ¡„ sÕ‘+V\غ~@Õ‘ɇ2€‰aR c!"@‰ˆ%"”øm“ Ÿ£ µñ9ÚƒÏÑ€&!"@‰ˆ¥æD$š–*UIDAT»LH͉ÈåË–5+%7mZ·iÓº¦4õâ¿ÿâ¿ß”¦LNM«"—/[æO7ÜΦMëÞtÒ‰Mé’ˆ¸Ž¼åóϽðR@ƒš|.ÒËÊÆR²¹ù(£×ö—ýísÏ“’ÒœQǽÒ¯%½”ôëÊ$6mZw‰op[Dzw­.°pá’øžûþëk̵+®&˯xô¿¯í‘~$y@šøÁ ¡L¬+%7mZwüñ¯³-kdÝ3ß]æá‡IÉg¾{ÜYWÜ'"¢‰ëj"®¦i®¸bˆˆëjg|îÞß]ÜÑ+þTÏ>˜ìš‘~ú‡ØË—-K˜’›6­{ík_eYÕFIª!IDATñtÀ±ÅµúDDÄuEÓF޲]WF'E;óò_ýæKÇó1R@RãH/£õch:>(-s\ù("FÕsÿãH(ЏÈH‘ªîŒsC&•ñFdôâLôZM|>.\¸ä©§_8òˆ…ãé†k‹köú?þÑ\ÍWD´Û¾ô‰ã/~l<[0Ù4ùCbëºDã[¸pÉsk׺xž÷ãý÷Þ=wþ‘ÑebZ8þâÇþë^³÷çÑêñ]Ÿý¢+¢¹ò__¹âÿëñú`2kBDc1xˆ}4ÆÂ…K^\¿nÑ‚ýDdîü#Ǽ~MÀ‡¾ú±DäÖ¯\wâ§ÉGukþ{´+$’: 8IDATEdáÂ%6ïòîûi Çq]»ò“ü¿ä#€Ædk‹… —lÚÚ;örɸ®üø+ÿtÒgžhVƒ&›&Ÿ‹”qiÑÀ!¶ÊÉŸ%ŒK¶ªHÈ”L\Ñ€l¢Š%"”ê>Ð>dÑÁ­è´Aïæº–oþí„üù¹æ–ÍRÈ;–kë¦9hÍxÝao:ç¶´úQéDä]?>õ͇ìqŽ\œ_tž[Ùaö=Rݳ)·éÑ»~|êéçß“J— *s‘¥AGršØ•Ðü¾5ÛU«hšÖÄ[KØò˜‹5·‡Y0Î=ÊÔ;þFj¶0ÁöQãª"oýÑ*ÕCï¹`eÌŠ}/¬¦øIDATå^v^šuRWI¿×îÝVyéÙ¡{òOôOŸqlò­kšæºnt:]MéI½»–Ýo¦?±Ô¢îe|¯3n¼Ú5£0&:=®-Ó_}TiÎó]ÇåfîmZ~ʦ\Ïfùã8»“¾¦ÿ.&ip2¼ØÇ¬5;I¤s.RÛçøÞõGxÔ´¸ÿKÿ8"Xaù?úÓÁÚµXÌ´¿VÍeTˆnHÕ‡àœèºÑ ö$Ô¦¿¡šËDÛŒn=¦ñºž™$OxÌꪧ±fƒ=±ÑΨžÀø E»Á}¬¹/¤dÃRŠH/ ]ÑDÛ‘ñ¢¿ ÁÿøšÓÉ9’,Y×o^üÂcJ«^–xyÄ´c _3IDAT³wÑ×RÍÆ“4«ÚÙq®Þ¶'¶® Ŭ’µ}D5ár¶/¾w¸üX%ø““0"Ç#ɯQ«Ïv‡Ú>cõŠ)[]%ZÀJ~’÷ª ?±õ†Kü¡ºšªWÓyPªHÕ/wš2øÝ—Ód4]‘œHÞ›ŸÏ§ö÷0t´Þ†ö›¾•íÂ8›Olp[1•éÄØG„¤õDm4m‘ÜÞ¤nÙÅ„o[ý›sÚQšT‰„ŽÈÆß`´ÙNo¥ûÄ6wCªf'Ì>"(µw׸Ž÷Ñ„ŽHÞ¯"ëkaô—ÕuÝà´ŒuÕ"æ,¾þJ×<+§Z&昷f—â× íŽª?ñ=ltºIDAT[¬Ùà˜úMÅ\US¦žØ`g¢Olh~ÑF²¹hŠñFä˜÷÷¨ô>ñDaZ©«ßîÝ]ÙúÜÐÆù'úvu©–U113E‘ñýs•š-D7Z³o »¿¡d̦ãŒÿ1úêJ¸ãIv*IOTmŽç‰­ùhÂ'$Ú‰ÄPf÷1Ɉ7®ˆŒ¿?<ÆìWÍ•íÏFçW^ß3žþLl Tsiè\éhÿç?~ðçç¾üH¯ö§u®ë8ÕÙNu†sT×ùÞ5þÆ“ÿm]´¢å–†WsëŽL=±-êÌdØGHŠç"Ô@ö¥?¤nÃg3 ÕÒȆOh@«¥‘T‘+b>ØIDAT2+µs‘¾äUä½ÿx¢?ýæÏ>ÔšîÀ^éDdMþôâÃßýçU?6KÌå\4&¡ÔªÈºš¼÷úÏþÂgí7꽺®ëzoï1g¼ãÞëO .óæ+[XW’Àä”þv’ÍKº^'"]óÄÿÍ¢Óßç/pï ŸL¾9oBõVÅèÝÀ¨‚~;5ߎ¢j@‡J?"©ŠèÛbß´vw’f’Œ»—ðítÑüê" @ö¥‘¡nüd¹õG«ÞsÁÊàw]Dô^ÅÛÿù«¡¦fì7ã§Ÿy7ýîz4~£¡”ïnŒµ +͈ŒRâ‰4i ~DÞ¾ê»gb!m„IDATÿ¯OÔl°··÷¾›oI²EºéYÝ€ÎÕÚzÕÑEäöU·œ½òýÁŠÒ׫Ë}7ßR³„ ¥°j¬ª&&RCú™$˜¼*òö›}ö…ï].Ð+]ª| sÜ=W=¥ªóÑ‘“K-"ëzSM߀uûÍ¿>û·yµdH¯ÌŒÏGÕ0|cÎ ­?ž#×ÀÄ“NDÖû¾ìKo}é»õßü/Õ½±Æè“íAÙL`éh{׬Ç\,ÅŒG2XúÃX0Ò€ÌJ?"é@f¥‘T‘2+ýˆ¤ŠYé_®a¼H™5ñÇ‹¬ù©ðÑ[¾kΩÙBÕRä6IDAT´qÙ÷žsÿ¡˜6t„I=^dÍOF­ëˆ¡Á~’l@Iÿ@» ãE|¬÷ÝÓ~÷’ô3Ibè éGd"M/2¤=oŒ©9/€Ž0YÆ‹¬Yß5XñÁݱt®É5^d½üÄý½€š¸ YÖÚã/ÒÓX´50D9ƒEFúÙÎñ"CÆ–Ï«&¶‰?^¤jDHU¨ÅœFL8¸dpšè:ãE€RúÚ>^$€ ,ýa,é@fuLÙ€¶4¥CÜ”vtªHPJ?"/@f¥ Ýêñ"-^°aýæz{ÕØZ&˜‰?^dñ ¡I¨”¥zIDAT=^$ÄKÿ@;‰q޹hñoÂ/½9Öo>äÏljßt°ÎˆÈqŽLFo:˜ƒÞ´ÿ‡á|™/ÒÓÒñ" é•ñ"Lrq Ý”ñ" ^‘Í/’+3šøãEF¯Ì$™ =ãE@Œô´/@f¥?Œ#ýÈ¬Ž©"X‘qŒSW‘”ŸZ-ýˆlx¼HšÐjéh·¡Šll Éxmûìl>¤HQúY×¹Ètš0Ù¤‘õV‘ 4  mÒȆ¯h'9ç@“þXDþ†B£ûàO‡Ö ®m§æ*Ñ HEúÙÚ ÓãhiÑÄäIDAT2¡@L¸V|;R+gn@«¥‘ T‘~jx­hrÌxòãlœ¡FÙ”~D6PEú§¡íæ4ÙXê5¶׬lêàû"“hR¿}ÕwGšŒ|yùØð@“Ñçñ œ2¥#«HO’TÏ@“^öÅÏI²Vü2®ë†~LØ€6H?"ë=Ù¶&¥V ×ÌåÐ̘ýéøUTÐféGd]ùÈ@“Ú)ýˆlÝH?B@ÃÒ¿\ÃH?2+ýˆd¤™•~DREȬô#’*@f¥¹¦#Æ‹Œ¿9¼¹C:2@$éGdGIœ[úÙÑãE’ÀÄ–~DvÄ‘Œí–IDATx‘Ñ9Ñ¡4bÆ4«9m'f4©H?"3;^dÍ1{jb½Tñ’@Ö¤‘Y/2fÓQ5ÇŽE…XsõÐ*cv@«¥‘™/2ªmƒ7w€5 ëàû"“hÃx‘A¡h þXoê1YEz²9^dÑ"c£–R”~Dvôx‘5?½Kµ¼j:ùbÚ,ýˆd¼H™•~DN¤ñ")ú€ &ýË5Œô ³ÒHFúYéG$U$€ÌJ?"©"dVú—k²<^dè Ž&›ô#2³ãErÛ6€ô#²£Ç‹0±¥‘Ù/²æ²ïHÔ›À„”~Dfv¼HQ¼0:L;²IDAT¸ãMUúÙ)ãE’ƒÀ$”~DvÄx‘ÔŒÀäÔÁ÷E&Ñæñ"L0YEzZ=^dh[-;@–¥‘™/2fHÇв˜¨ÒHÆ‹YéGä/’›"‰*ýË5Œô ³ÒHFúYéG$U$€ÌJ?"©"dVú—k²<^äÄÀ¨n@ÃÒÈÌŽ™Dè‰1¨Ý@ƒÍZ@ÃÒÈ 9^$áL éGdöÇ‹ôÄ|Ô*­æ€’c¶3Heh¶äÃYhLú™Ùñ"££ûÔ<”®9¦dtŽj”ÉhÐÇ RZ>柡‰€¦H?";e¼ÈЦ›(¦Žn.ùçÆLÅIDAT’Æ/ýˆìˆñ"C›n¢è!³¯®J³Ÿ@+tð}‘I´n¼ÈæVmM 8ÊI ‰:²Šô´z¼Èø1"ý‘~œŽés¨Í$ Æ7Z2Ô€ñH?"3;^¤Ôº:sA&8s%§æ¥ð1óÇøv4&ýˆÌòx‘1ÉØ°V´  EÒÈ,ÙŠ#’þåFúYéG$#ýȬô#’*@f¥‘T‘2+ýË5Œ ³ÒÈÌŽÉ€ŒÒÈÌŽI>H?"3;^dhÌÇèû ã‡hsG"Ⱦô#2³ãEúB EGŠL2dtÙ—~DvÖx‘5»Q×2¤$mð`’IDATÐAÒÈÎ/Ò—p0ÇšOŒ9 €Œèàû"“hÝx‘õªù962®#«HO«Ç‹së1£IF種ÞȲô#2³ãE†®ÉÄL„Vu’Œ@gI?"³<^d½( &ýˆÌòx‘õ" &ýË5Œô ³ÒHFúYéG$U$€ÌJ?"©"dVú—k:w¼HÞ$LxéGdfÇ‹ŒÇ[­É ýˆÌìx‘~Df¼Èø‘k>¿nÍ÷kóVE ƒÒÈ,#RÔãEªVI²n(îk® ýÒÈ,Š­$]j`Ý„ h¿ô#²SÆ‹Œ/åÆóh³VÐt|_dDîêÛIDAT­/²Þr2ù£ÍZ@³tdéiçx‘Ñ‘›õhÍe’¬  ÒÈŒÙêU£O’Œ@¤‘i¼HLúÙð}‘ ‚–þåìYéG$öȬô#’*@f¥‘T‘2+ýË5©û*éDd;‡}d K­ŠlÛ°ä#€†¥ Ýžae¬“Œá`²I?"ß° âÆp0 ¥‘möq<=$%É,͈LeØÇº'h“Ughû(·¯ºedØÇˆ^]êö1¡à¸d&›ô#²=Ã>60 #×j¤‘íö±Þ1IFéD$Ã$€×äIDAT>èéh'/’Ð~écÁH?2+ýˆd¤™•~DREȬô#’*@f¥¹†ñ"dÖÄ/6ñÇ‹€†¥ Ýêñ"eß·†:ã]†b¤‘‰Œc¼Èhó‘dcRŒŠBb@B¼H†}аÎ8Ðÿx‘ û éGd«Ç‹Œ¹ “dÔH“Ù$/2ÉÄx‘ ”þvB„ €öK È,"”ˆHP""@‰ˆ%"”ˆHP""@‰ˆ%"”ˆHP""@‰ˆ%"”ˆHP""@‰ˆ%"”ˆHP¡57yIDAT""@‰ˆ%"”ˆHP""@‰ˆ%"”ˆHP""@‰ˆ%"”ˆHP""@‰ˆ%"”ˆHP""@‰ˆ%"”ˆHP""@‰ˆ%"”ˆHP""@‰ˆ%"”ˆHP""@‰ˆ%"”ˆHP""@‰ˆ%"”ˆHP""@‰ˆ%"”ˆHP""@‰ˆ%"”ˆHP""@‰ˆ%"”ˆHP""@‰ˆ%"”ˆHP""@‰ˆ%"”ˆHP""@‰ˆ%"”ˆHP"ɵ€åIDAT"@‰ˆ%"”ˆHP""@‰ˆ%"”ˆHP*Ôµô5×\Õß»¹E]€¬©#"W¬¸°uý€ ª#"7nØÒº~@q.”ˆHP""@‰ˆ%"”ˆHPjrD.Z¼`Ì9Ð)ê¸/2vÖó6\}o@$L*õEd”_Z†Ò3æˆÛ[rÑâÖoö¾×\ËŸ]ÑÿÑ›V-Ú:ù ^õEd(‚¹3­z´flESÍ µ£ê4¬}ÚѺ2akÉ/øÄ,IbhÀx´“k,¤¢iÓ7*)ÜÙ†Û€¸÷@SŒ«Šô/˜È¾\pQÒIDAT~ü’um¢±Î@ÃêˆÈš¹šéÿs&akª¦¢óc6¿9ˆÇ@‰ˆ%"”ˆHP""@‰ˆ¥:nú¹cõêÖõÚcÅŠ “äu}·Ž?ùøšúûYqÍ5WÕµ|Ýï®ùÊ×¾Uï*ý½õ½‹¤cÎEjš–vL:‘Ð~YŒH FÑ’ˆ$ãL -‰H×u[Ñ,´Ù¸"Ò¯CþwŸÿhèÇкÁGk΀vjá3øµ¤ŸqÁ9ÞttBÑI5 ]M8Ðö²LUë…²/TƇ õ#€tµöã½Bù­+cøÕ¥pr@JÆUEzÅ£—_v%ºÌIDATÁiOSŽ” G)jyéM¸®s0.£ «Z·u=€ãÈ`~ùÓ~]³p½?@ûeñÝ5‘•Ú¯¾ík®¹ªÞ¡„ sÕ‘+V\غ~@Õ‘ɇ2€‰¡cÎE@û‘ DD€ JD$(‘ DD€ JD$(‘ DD€ JD$(‘ DD€ JD$(‘ DD€ JD$(‘ DD€ JD$(‘ DD€ JD$(‘ DD€ JD$(‘ DD€ JD$­Ã…nIDAT(‘ DD€ JD$(‘ DD€ JD$(‘ DD€ JD$(‘ TþpÇêÕiõ2hŸˆ\±â´úñÐCWûÓûDäÆ [ÚÞÈ.ÎE€ JD$(‘ DD€ JD$(‘ DD€ J…±Ab‡,:8í.´Öe—~ü+_ûVÚ½h­Ë.ýø%—^œ³hñ‚´:Ó6Öoþ8~“CÿË*Dd“õ÷n{¡Îô“ŸÞéML†} q]·Í=i›Ë.ýøW¿þíèüIø¿\Ù|{zµ´»Ðr“aC&ddÄŸ‹.lIDAT‡Å$ü_Ž""¤ˆŒIˆË5 DD€9ÁñaÆd¸°žD›ŸÎEv’`Þ-_¶,áZ‡,:8;ãÉ{¿ßþ-&‹/Ýn³bÂ%3+ôÚÞ°~³j§&ÀÎz‚»Ü¡{DDfÚ«W‡¢Ðÿ|¡›nº9yJN`•&¡®ªzÞA{£³þkTˆÈŒò ÆåË–Ek@ÿGï!¿´ô3:Gj¥mZjVO~¹áÍ.àO‡*Ð`kÑùÁÛµh©ÚåàüàYS {¡=’}-j.“Ê^‘™ G‰|æÚM7ÝìMøyç/éÕ•^†ÞáÏÌÎwP4ý >_suDPª¢] ]¯ÍIòœdœj—kþ¨úNx§T‹‘Y§ºã'~fpŽjÀ˜8 JD$(‘ Ä¹H ‘ºFóÇ„AD6Ùdx!M†} ¹ìÒ§Ý…v›„ÿË5‘Í4^H“a£j~Ö69ÿ—k""›)áÇN¢³tÊMˆMÄo²Ë5 DD€ JD$(‘ DD€ JD$(‘ DD€Ò>o@¼þï¿•V? ƒöFä²åKSìdÐHD¾ç=Yü`<H—¶råUi÷2êÿû‚wtÇ%uIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/new-remote-folder-2.png000066400000000000000000000360271203611042400326550ustar00rootroot00000000000000‰PNG  IHDR¶V»Ç58 pHYsÄÄ•+tIMEÕ  ¬®ÂtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝyœde}ïñß©µ·Yz˜a†Fz™4¨p0 ¨$FE3 CÔðIˆJrY’ ÉM4 &€r×]12,#›”}f˜•Y˜}º»ººÎ~îO×™Ó§ê©®îªîªîþ¼_ýª×©§žóœçÔòíç,uÊ‚@"®ºê&€™êÎ;o‰Þ5ˆTáØÓ}¬Y³9f~ºsèÐÁ\n`ë¶ Êáˆ¼êª›Þø†Sß¶êÍ'Ÿü:I&“ ì(L>ÏóDäÅ_ýåú§Ÿ}îy•’F*W¿ãŒåËå ¶íä ÞÐP¡Ñ€IÒÖÖÚÞšÌdÒmz×´UIDATí­¯lÞ³îO©”L‰Hw÷R•{_;xðiÛöÀ@¾Ñ€I5{v{&“™LËòe‹EÎÈõ‰ˆ±ví«ßþösÎ}ÃÁƒ¹ýûäó…‚Óè®@´¶¦Û;Ú=¶sþüY>òܺ‡J‰È¢ÅóØùêþ#G<˜Ú¶ïÛÕsÿ}ckë®èZx|.gçr¶eÚ"Á¢ÅóD$¥Îçó…‚ÓÒ’©sg`í>´§çþû>´ö]A×Bwé12GÄ>kljO$ é—ÔÎCÆö}ß¼ë¾[»ä˜Å"R(8ùüðx1%"™l¦ÿˆÉQlSÝ‚¯ßuñûÎê7åÙžê=Î IDATeW3KrÃk"rñûÎüÁ×ïJ^ÿ·ª°¿Ï™ÝÙ"á(Òr­DÚ˜˜>Àäñ†ÌÀÒ--éÝ}Îì– ›vFÚ b™!;=`únà˜¦áZ"Æ åZ"‘ˆL&ƒÒ%Í1Òó¼t`{9K~³éð!Ûsl/ÛÌ^Z¸¨µ­==Y« Õ²,?pÝÀJzÞ¥·ü½ˆüß>$ ×õ}Ã'>|Û?ŠÈw>u•gZ¶ãž/å’0¥[ÌB?³hÞ\ɤwìË¿´g`¿ضgÙöÁgó«Ö¼ù©“^Ì¢E¹¦0fžíJ"plÃ)¸ìØ-"ž°ä¿Â-VpE>zï}ê¡Ì~þóIDATŸûŒøžâ{e[K‰ˆaˆˆ$†ˆ¡öd¶XÁ¼l6Ý‘µZZœ>§¥=mÙŽmÛ¦e›–](X›7õÎ{{Ïœ9-bˆH`ˆ!rùåþÝßýk× =á.ÿƒ EäÛßz`"Ÿ“Æøñï¿ïw½ÿýxù?¦«ðÒKÏ_ýÍU–ר̆&û§$Ä0 ‘  1Œ`øÅð_2"®xÉáT|`Çî OXrÏ/Sw×üǪ|Ûµ’žxIÇ‘D2!ˆ!¾ç«`L‰HÂ0 #™J"êhOgàûîÃæ`Ê3M§0dY¶mYvÁ´ ¦Y(XC¦õâ‹ýÇ.l{Œ.ÓŽIDATÛª^‘z¯|æ3Ÿøßw»£ó˜èÚÌmk°›út˧Ÿ~ò™§Ÿºrí5UÖ챇îûÆ]÷}õ?»0É•[»û¾q—”[w]yø¬6ÿ›Å$(ŽñƒÕâ:ޤ$eˆ—Øýék–üã—%LÉ÷_ºæ»ß óq÷§¯Ï<+\WDRɤAÂ0dx™––l b“'Õ–)ˆ!†¤Ò‰ŽYée+æ;ŽcÙê϶mDzd2™N%E¥®á‡ô®¯þÓŸ}êúöÙ³£k“N%&þ)¿/|þ¯EäÏÿì/ šñvÌ—þñVYxìB7œÀ¯¼vºGëûœðóŒc®IDATImþ35Jñ oˆáðNDÄóÄHABÄ‘]W_}ü?ÿ³S2ÌÇ]W_}´-ßÏ‘âHQÒ©¤‘IˆH"‘H¥’©T"™J%S©d*‘Äÿ;$î2×oxzoa‡›<”m=ÒÖ>8kVaÎ\÷˜cdᱩÅÇõ·t¦RÉd*•L%“©Tªø?ïœwüøÇßͤ’ÉÔщ’©äc?rÉ%«/¹dõc?’L%¿ù­{/¹dõ`~ ™JæbÓßüÖ½ÉT2úÎ{ç]_V%±U_zöλ¾|É%«ø£û9øÃÝÉ%«ï¼ë˪qÝ\ª“^|®®N¬'a}?iœµvIDATèêG×=™J†=©ðœèÖ´š¿0c$S©ôð{>¼þÐ9~ ã‰þí¸ú“êæãŽ«?­ ãøˆ“0‘L¥‰„¨QdÒäÈáL Î[÷¾öó½VÎtLË2­BÁ.˜æPÁ2Í¡‚U0Í‚ig2‰KWýÑÑ1‹ÿPÏ[µúëÿ~Ï÷¾÷Ÿ—|àCa›¿üå÷ñ–/ý¯;g··¯ùÓ¤ ãœUçû[÷mݰáô³VmÞ¼ID¢Óçy^ÆHx‰ø8«gÉ '-;1#‰u¿\kpÕy¿'"uç¿rǽÿð_þá‹¿öÕ;¾õÍ]ðö /ÿðÅI1þìêëŸüÕg—yIDATc·ñ–ý—{³©Ôš?ýȬÖö·¼õìŸüô±‹Þu¶ˆ<ðƒGÄ—uÇ»ªZÅê?ñ›§JÛŒÖO&S<ò‹¯}õŽ/ý¯;iùI?ýÉ÷uÏItAášzÉê›ãÈFàYoÃ)‘`8ƒÂ—ÂwcäÇ!:~¼ð„%w½çâ裾;\99¼Y,F`$Ã}‘FÒȤS†º4š!ž<¹è¸Ž…~»ø¾ïy¾çyžï{®Þõ}ß÷ýt6mútFûô¡ì¶[o\°àذdý£ŠÈIËOL¶fDäá‡ÿëoÿæö³Î\õÓŸÿð¬Uçþü‰H8}Ö™«zº{“™t*•ì2IDATߎééîM¶fr ž¿úU§wiw²5«¦;Ûg¥Ú²"ò£Ÿ|ïš«ÿB-¨çuÃ~ú³ïŸuö*#’A©ö–²-©ò§Ö§Ú[Fm3›IÛ{ó­_¸YMßþ…/'ÓÉL¶ü9Iª¼lƒ±:J:3<í;žš+¬ðÄS‰ç¥[Žžã™N'˶œN—ÿvfX¿š6E$“=Z>ê‚tÏ@YÙÃÈFˆ<é†1r)"¾ç»FRD$ð?ùÀÃ|ܲvmï]wI1%¿rá»} Ä÷†£#“J‡ÒD¢‘É„$S)cøð¸K:<;8aAû–ƒ‡Ž¨íkkxûÚ²M˶-÷Ì3zÎ_}r:“½ù„fÒ©¥K¿û®¯_¹vø„˜U«Î[¿þá~ðHXÇs¼SOyƒˆÜú…›ßvö9çœõöGÎ^wën‘e]+ZÚ[RiD@mÃIDATMD¦SºcuJ§Õ\aá™gœí9^¬rÙ–3úÎTßfÙÎTXn¡å‘À¦†0‚@Ôf¯!†ÚÞVwD|ßð}?Ã0®~ðga>nZóÇêvÅ=_“bJþóùï ‚Àó†6g2É@ uB‘ø®G‘F:"™…é àuŠœH$RÆoÜ5T0 ¦U0mÓ²-Ë=묞5=§ë„áÎÕí° 5Vzó[Þrà 7ÝvÛ-"ò‘\±~ýÿ}î™EKÞsÏÝïÿe«V+"·Ývû 7\Áꋲ­™Ë>ø¿|ìÑÏ]S[[[k{‹a”ó©Æu Fë”N_zéׯx\‹IDATë¶-mGZDä]¼7ÛšÉdÓçžûöGyHU®Ürigªió¢‹Þ³~ýÃ/o|éœãÏ çuAÑžˆ0¢GcøU "¦ë§ $yÓ“ëÂ||ùãÔËÿ““îýªˆ<°c÷¥+ºoyëÛ=oxod&“ÛslOÂó"³ÙTä£@ÄÈ®X0Ô™—ÖÔù³[N;qÑ}ßÿõö‚™NÊÊS_µjå¿wòâEÅ]¦"ŽA‡e³Ã™ûádïk¯‰ÈÛÞ¶êÎýÚ½÷ÞóÄS]véå]Ç÷žßÒÖrúé§‹ÈÊ'ΚÛñ¦7½ID^âÉóv¶´duÏj¼lƒ¥ˆMy4%ÿIDAT¿ã¿wÛ­_üÄ5kDäË_úʉ='ÏšÛ‘Íf®¹æºGyè‹Ï}ñÅWt]ÕuF׿_þåç\Ç{yãKÇ÷¾ãâ‹ßÞ½×^ÿ‰Ë.½<œwÔE{>:vŠ5ƒÈ†yžÏÈÀ7Àn9cxÀñâG?›ûÅ~üäoÜ+"·œq®ë^qÞl&]<ƒÑð[Ô%uÿòú5³çÎU‹>S}øeJº0< =º¨ðœ¤ây‘[^Þ!"½'íÐá}óÌ‘BÞì?’Ëç†fwΚ·`Žº¼ë¸;6ïîZq|2™ô­ ðam ž÷7[Õ=CØúÔõmwܾwçXt½#CŸº>•N©ð 9úíÙs祸ä8€©ï’ Nûž\ßvÇía‰Q<‡G*Þ†>uý%œMÂÙs‹¿]“ͤwïÚ5a}€ÉóÎs_/çþïqÌhZV4 ™¬„—Ôݰi]:ÓÃÙшÜüʦmÛ4´?Ð,º»œ}Ö)¢"2•NÍíœä™—ï¼ó–Fw @³›®‡c ö¿àPIDATžã®üÏþÏÓÞt’:5{,_€i'LFÛ 2©øù D$€™h°à‰HÁŠ\,eØnЖqyV"À b9¾ˆ8n FŽ"’JC–ß–M Y~&e¸ÞˆýMý{2P/–ã«‘ãé‡ù("a>¶e¶½f£HÓ\8r‘!Ó‘èPQ£·ÑyE˜¶,Çæ£ºu½øPQ ÃÛèCD$€éI…£ŒÌG%*ªL 7´ÕîÈh#D$€éf°àYŽ&£ú“’dT%± íXSD$€éCmY§S†ã­É0•pûÚõ†Oî‰n_—neK³E¤aºß«€Ê¢»Ó)Ç—Ó±IDATC­=£¦ÕÈ1vP;:Ë(G´cLâ7Ô¢'s‰¦¨p·£ˆ¨K>ÆÆJ8ŠL% µ£³TE†!šè!žZÊ„.À4ÍG¥l>Jd;³§Â¶ö8Ï‹,;º,- KÆT!ZÎX@¥ù(#^G•Ž"£_­©ÃíX…ƒ¾höE ÇWA"™È¸@Yá9QŽ ™~ºäÀ´2TüFvt8ÉmÓMÙÁ£”;2*¼DEt89•ŽhÀ¨tùXaüEŽÿˆvŒÚ4Ó,f¦Üçýî_ïÙúTûÜcçÌë®f³à;…=ç}èŽE]gêêŒoü¨¨”±ƽWIDATÑæ2êïðk/üðßÞwÆ;?ûî«~ «ã{ƒ‰d‡ï F ¼öÂCÿyÝéÞðº×¿'V_…c6(» RM¨“ÆuK 7´KhGØDª´¡H ©’X¹LÌçèRêÞ8€ õÄn8鬵'žyeXâ{ƒê/p©?#°ÔmôoÞ¢åïþÈ¿üþçbÑ©TÈGÇ *磌üb8QÓw´ƒ‘*—:=¦ 2ò 9€©âЮ's‡w~ágD$ˆêoÔÙ[:_wÚ™ðз¯ KƒזãgÓ#R+–•÷EF¿€NpDÀ¤zòÇ·½åŸõ½AßÞøæ8þVžõñþ#»_ÛF6IDAT}éG±–u£È0GÝ©&bCSl7PÑBöE¨ƒÂß<ÿÌÏEİr¹Ã»zO=ß˿蹖8uÈ³Û vND²ÞÁBRD<Ût\Ër=×ʉÈPaPD‡ "’2÷ :ißxèÛלtÖ‹Õ,½cÁɯ;é]2Æ}‘aV˜…ˆP?ýÏÍé\²üwÞ—2w.óß{C›}ß6ÇqŠH&›‘¤¸Œ"LžÁþäe‰ˆ8ý†7'~)Ï o£Š»7h]¤f/;cù¦’-¾qHDÌ!×qƒh,fRe®I9}2í‘&cyVnxx$û>F¶IDATËNØ»½bûƱ\ß4Í¡–¶ÔÞ¿®P-Ûq\¶cqxHÇw*ÓˆPélRD<ï`à»e+<ÿÌ#{vnnŸsü˜šÊ›mí-j"ZnÛÃqlÚžˆ¬8ûÂgþ닱y“î ïîUÓó—œvòE_•âÎJF‘&•cy¢ÎõñmIdâ·"¯>»þ«Ú>{Iåv‚üŽâdq÷¢³ÇÈ8†ã8¦ˆˆùZ…vüÀßJ¹|ÞýÙ/¾̲ßž—Q$€É§F‘"fbôöùß>ѱôwÚg/ ÜCî¾ßíïÈUÝ3¤ƒƒN0+mäDÄuAª=mäÔ„Ø}’™« ëÅ:Ž½ß ËIDATå©GÕCÑ[ßò$3WD^Ùô\Ëì%‹V¼w¸Ÿ“0Ьæg›áÊ’ªÍÐ`ÚS£Hs¿dænÁHµª€sr}›žtõ‡î Ì}ù-ÿ'm䜾Yb÷¥³IÇòÒÙ¤ë$ÒéœcyF"øŽjÍH$ÒFΉ6ž 'f‰Ý'ÅPv,/Í9–'ÒçdæŠÝ爉tÊÈåóîÎý»Ïøó£ýã(rœ'ý”½üO³iæ¾Ó“g‰làD$p A"+vß¾ÏvÌ]¼¨ëÌÂöŠÝçXžØ}F"­2Q¥žë$Â|TÁøŽ PU9,WjÆðQ§8f ë¨Ù·oß "óN¸ ì E& .ÜIDATRé*W¨>Ú±_ïŠÆ~½+úÃ^¥ã;Ý/&–ÞÕ5+ýYÙÅ-tL½Ò=¥u€éÊðã—;{ö×O½á¢¿v÷=ú“——µ¶žZ(Z[[ …‚zô]¾ó³íç™N[Kú½+VªýÅ«ï:td@D,FG¦eç ïVYëIial–Ò…VèUÙ/­PvE€iFí‹4 {cå»6?ë·uôžzþ¿¯³\×Ëå]A«ôIDAT×;td`Èt†Lç˜ùóTµ!Ó‘Á\~«±&:û«{öçús¹þœ ¾B¡²rý¹ü ùõ§N «­?riÁöúM?òeD5„<îäET_­™ðQäXGC¥Ñдã©Ò®ÆÒ¼ôî8Ú¦™á½„îP¬ü™§×ŸzÞŸ?üÄn±]_DÞâ£e[ÈõçDäÅ [—v —lN}ù²Š¼åË»£3ÚŽŸ/ع¼Y0mùãSÒÞšÉåͽry3—7mÛ±ÍÜño¸Â¶,×ó£ã[/"@Xæ$Ò"8¿þõK »Ï:~öÑý’ùØŸ³ç[/_ø¢\µ¥åê¯ýúÜ6¿¦B0ÑÒV;yÙÙ{pà•W÷‹H.ožzrOt)‡]?7òªhï|÷yÃå "bšÖ¬ùoHfæû¶UùOÍeŒökb\é@¨}‘"Ò×®†ž IDAT×÷üs[ïò÷8Û\»?•™#"¿}æ…»¿°é‘YíO©Œ›ÕÞ’Ë›KÍ{÷¢ÿ«ªy®ùÖÖ»EæªvTµß_òMõ¨ºM™–ŠBË7DÄsÍuýÇýíswì=""‡s…¼—ZrÊGÅÓI¦E$‘ÉJù(Œ"Ô‹ëí‘ÇŸx¡½sqïq‘r»ãþyá0—7OY±øon¼*¬ø–ˆ¼åõ¯;œ+¨¿SV=$íyžˆ˜öðE$=Ç×:Ü7pן¼íFëÜ×ÛŽûó<ßv†s³ú|F‘ê"M&†r‡»Ïþfó{®¸Îpû¬Âálëa®.Ôô}/Î8ŽH$£ÓÑj¾?\ÙuG]uWÄñ†‡žËWá¨îîÞ·+ÝÒÖ¹d•ˆ¤Òi5~̤ӉÖµY}´Ÿüv €Éä{ƒùÁ MÞ·kNgË?]æ\ÈtªÌk:;¢°µu~¡p°´ZÙrÇò­L›xVÂrìD*ß·¿÷Œ›¥˜ÉD2™ÉfZ[KG‹ü"€ÉÓw¸ß*؃wùéï?rp@D6mI¦Ž^8&Éǰ<•qe™T*!bºn[¶5-{‚·IDAToiMš‡-‘Y-#Ë“©¤¸"Ò.‘y¯ëYе: ÇD&[z…Q$€IbÌd2‘m͈ÈÉg\ºâÍ—Œµ«xþb6-–SævLJ7«K1Š0IZZ[ZZ[F­f9~6ˆÞ¼ŽÖdx«b+6—ãsS†Ç}eÏÑq‹»&m7ȤŒðVF§£Í6ãUÇÌ–ãÇn•qŽXŽŸNêv°à…ÅDc±´BŽ©¤!"™ÔˆÍvu·4…+ýh 5Hu¥b±cä.ÅtÊH§ 5«_að(ÅdT!h»A*iØnЖMÄ’¥¸^$€†Q›ÒR?F·¬UhFǕƢ~¦þIDATPÙ¨‹Ë¤ × ÂÛ!Ë7·¥dh©0ŠÐ0±Q¤JF5x C3Z?ÌÁX Fï–ÍÊ!ëhÔª!¤WJddÙ±$£H Eªd G‘áîÈè´š±t)·µÛ"çT†CHµ¡­ Ë!…Q$€Š"ãØ*+Õmx¬Fô£È°P·/2<\R›Ûá]ÝîHF‘&6Š ……áøQ*+„£nV‡T&F÷E–Å(@ÃDG‘á´•ª06rÔYy€Ý©„'ú„û"Ë%£H Ž"Õ´:íQ)›ƒ¢9x]ù¤H¹/2;ã‡ó"4—èÈQ}yFŠYÔU3ŠÔT­M‡IDATú=u<0%Ôg_¤ˆlß¶3<4SzÈBWXúhi…ØCjŽIåNÖkYÕ´Pù™0™Œµko¼ã+7Ýÿºu®¿ásW6º?Ð`·}þîÕç¯úÀVê“·L mh"´ˆHÐ""@‹ˆ-"´Æ^äƒëÖÕ±0AÖ¬¹bÇö]ã›·¦SÇ_xn}-³ÀD»ùæk™½Öïhÿ×¨Ò‘Ã{fÏYL¦«¬èЯ–%6ïe, T2™6ͼmªXT%~11ED,«Pã²E˜b"ãÇ£¨JÂ:†aˆˆãX5.«ÖQ¤QTönÝ•m|â‡:ªï£úÖÆ·Ü:öV÷¡(Ûþ„~|*÷g ñ}OÃ’7¨ádño˜ëº5.«ÖˆŒöR"»Kkl¶ÊÅU(¬‹F½&áC2¡í—UáeGªÑÇ÷ö¨×›Ê0ŒÈöà苘¸7ó¨ý™jÔöu "7n‘-[¶HIù¾_ãbê•wÁIDAT³¡zêcåÑ·~øhX¨æŠ=Z–®ZÙrUX¶ñ²ý)í’zHVXDÙÆK—;Öõër+ˆEO}×ký‰5½[öI‹½5~ªcËkÿcÏC•õ¥ÜS]åÛ~Ô~–}}kéOiaõÒɤ¶©ÕXxÆ—Ãò-[¶öôtGûµF䮉þ¿*}¢Ko«i§ô=¡ûç\úßR×]ûaßbK©¼^¥ËëúŽu¹ÕT}dŒ:]ýBkŸe¬Ë‡ÚQ¹r]ÖkÜý)ûuÔÊ¥5.·^ï‡z52¦ò±¾ßêò&oêÛ5†Äþ—„ãÇHbÖ:ÖæÛ5“a&oM Ù›Œ²æÎ=6—;ùXáaõêø¾7{ö1"’ÉÔôm!"'ªi€±IìܹaéÒgÍš7jÍW^yfñâe\ À ÒÙ¹pƧòùÏs]×)·ÏÑH$’mmË—¿©P¬qqDäôÄö ¦Ä!‡IDAT¥‚Õêé‹NYX<]4™0ŒD"™ÃH¨-oÃH„Ûà}ý^ºµ¦”äbh ED€ ZD$hMFDNη9÷@ÝMFDN¡UŽÞ˜u8é'öêpZô_ðÓwNÃïUø®kõ_XÛSû±EÄV¹úúÚÓrK0ê‘јˆEF,(csÉÈÓ÷J/Um³ôD?]6Uîg镪i?zW·ÜjêGg©¾¼r;&N=OÓ•lJë—^Ѥt– Vã¸rAõ­éþ”êÊÇÚ€‰Ó°o×T3j›ôNÕªšü-eW.¯¦¤1'ýŒº<Ö|l`ž»¨ŒÿIDATŽºh]…ú®#Çô‰Pç_@¬þÒ§¥ŸçØ“pÿ îÒžºú•»ª;&S¹ýq”—."V¨+G;&HÝ6´ÃC¥…ºÊ•ËGÝêÔÕ¯¦ŸÕt¦Ê~ŽZ>޽Ÿcj§šGŒÏ úvMl´£šACcœ`¬fÐ(ÆŠˆœž2uAD€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZDöÆçIDAT$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$ÉN3IDATh‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$ TIDATh‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$hxk nIDAT‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h‘ ED€ ZD$h¥Ý¨Vk¶0{vG2™®²~6S¨q‰D$€©$™L›fÞ¶ žçú¾~¾ï‰HêÖ÷Ý9stttZÖPº-[ËâˆHSŒm2™ß÷}ß ‚@%£HPäû¾—Ëéèè´í‚Ô‘ì‹0ÅÇA1U,ª¿óTðIDAT˜˜""–ņ6€&2~<ˆª$¬c†ˆ8ŽU㲈HSŒï{¾ïÇ Õp2VèºnËbCÀTˆ6¼¬î¸®£òqË–­RG#‘H¶µu,_þ¦Ba°ÆÅÕ‘Gïë,«µÆ…˜Z³c¾ ÏÀ€/’omYÒÚ²dÔÊöˆHçÜñô-TkDΞ³ ú+‹È¡C{²-c¨`ºÓõÃEäС1ÈjWkDV¸°h.œm›Sk¯L}ãH‘–IîdöEê®,‘3<£nm«}™¦ƒ±¦‡1#²Ü€ƒ7¨/•^8r¨ÀŒVš6¼¼rå‰EågXIDATÅ!d<=Z²“ÜÃ:Ddé€7nÜ "›6mìíí «…&"(±ôPѱqã†eË–•½„xK­§9ŽY]"rÄ€ÕJŠHoooÙ‹'D$‘’ôX¹òD ›7oîíí‰U®ýâãP¯ó"‡÷Dò±',TW»Tå¾ï ® 4êNooï–-[DdË–­==ݱô˜üÎÕg©r0ÌÇeË–©ru7:`?IB‘Hz¨Mi×u ÃX¶lYx•ÜÈõëp ñq¨Ï¾Èðò–›6m”áAr¯a$¤¸V‘ oªÂôPw‰dø¯¼òŠº«ò1š“ßúlhAà«à8÷ËUIDAT SrË–-½½=áÀ8ÿ­Pt4=D$šÝÝ]áqíFuNêrIݲ—·‘-[¶NÄ.L±ôóq‚®;õ9\SzyË-[¶ŒÜ‰pô —lhEÓCí…œ¸ëãŽCÝN]Þ²ø#de®pÉy‘”Òôèéé.æFý¯;uˆÈ —·” ¸Â%€i£ùÓ£Öˆ¬þò–rô —0žôÌMöw­YÅå-%v…Ëýúj\(€i`é1Ù]¬1"o¾ùFß\¼h±Èâjê»v:)éÖ¬'€fã»2Öô¨ñú¸ã0þˆ\³æŠ:öšÐø#rÇö]uì4!NQ-Kj’IDAT"´ˆHÐ""@‹ˆ-"´ê‘]ÝKëÛà”ÐTkÝT¦ºZ#²«{iøW—5PcWa<¡é´.˜ájúbW÷ÒíÛvÖ«+ 7Ö@]Œ?"uùŽ ÂGÇQRZ¡Bû±òh#Û·í ûYºˆèÒÇTS· e§+¯`é“P¡•—.•ŸÛè]]¢åã[þý`Šª×Ä¥Ë*Kd´¬ÓC¥egŒª¦æX?óeÛ¬¦¤Êu‰•Tèj…ž”¶_¶|¬ëLiõÈñ)ý$W¨Y}³Ú ?íãã” è Žu÷\iý*ŸŸI0Ö¥—˜ºš""£Ûk•Ç †KUÌ1? IDAT.¥.J;\÷¥W®ßØÐ!ò0sŒÿˆv¸‹ª^*ïÙ¬£Ø^¶qàKg¬¦ÁÚ‡“µ´V_U.ܘºjEÆR²l4Dë„#ÄÊJ+è–Sá O…6ÇÔáQTe›êlß¶³rýjz¨«\ýóP¯uÇ"€æa¬]{ã_¹éþû×­{pý Ÿ»²Ñý¿f8lÚ }P£Û>÷êóW}à«?õÉ[ø"hMŸˆl†á[3ô@MŸˆ€º#"@‹ˆ-"´Æ^äƒëÖÕ±0AÖ¬¹bÜ?j]Ó©ã/<·¾–Ù`¢Ý|óµÌ^ëw´ÿáKwרTi olçÕÝ)‰!jIDAT|óßԸĦ¸ŒTiöÜj¿òÏ=÷Õ¾8"À3î‹ãÀmÐ""@‹ˆ-"´8\`ª*{%éú^p‹Q$€©ªì5ùë»"ÀÍĉ¸`+ `j›ÐŸn'"LywÁ"´ˆHÐ""@‹ó"L%u¹~OõˆHSFí׫š"òæ›oë.`Üj¼„ø8Œ?"׬¹¢Žý€&4þˆœÌ«Z@CpD´ˆHÐ""@‹ˆ-"´ˆHÐ""@‹ˆ-"´ˆHÐ""@‹ˆ-"´ˆHÐ""@‹ˆ-"´ˆHÐ""p01IDAT@‹ˆ-"´ˆHÐ""@‹ˆ-"´ˆHÐ""@‹ˆ-"´ˆHÐ""@‹ˆ-"´ˆHÐ""@‹ˆ-"´ˆHÐ""@‹ˆ-"´ˆHÐ""@‹ˆ-"´ˆHÐ""@‹ˆ-"´ˆHÐ""@‹ˆ-"´ˆHÐ""@+½óàºuê4¡¹fÍê4‰§žº)œ‘;¶ïšôÎ@ób_$h‘ ED€ ZD$h‘ ED€ ZD$h‘ •½ ªvB×ñîÂĺîÚaÓêŒIDAT+ÿáKw7ºëºk¯¼æÚ›¢%]ÝKÕ™I³}ÛÎèÝ™ðN޽Ê:Dd ôí½ÒÔôï>¤&fÂ:ÆA0É=™4×]{å?~ù«¥å3ðU.‹ˆ¬¿#}F£»0áfÂ:ÆLËȨ3ðU.EDÕ"2f ×€ ZDä47ŽÆÎ¼”Ê$?시J¢oŽØYS…ú}¤óW¯ï†Ó£ÎXeͦûloß¶³«{iÙ×QW>åLƒw,ÙÔJ?*áÝ)ý):¡ëøðW@¢ÓÕÏšZÑ©{5+W›¢¦ô[4DD6)õï·šwXø:šž±i¦÷ëš5WÜsÏ}±\ }SaÀ IDAT•Gƒ/œ¾çžû$2 ëÇF¦SˆzQJ‡Zá‹{)˾²Í©ÂYMÄÖHôoàÆ®5Ùt*‡céÛ%6®,ûÖlž| E‡„*Õ7:Tzªà oÕCá/tÆÆ’ªBÙm6º ϲÓr¢t*¿+?!“€ˆl.£¾ Jß.£î½nÂÓù«WÇ’ÑßpWéÍÇ0u›äª¾ ÊfNɱ¾MøÚÕh[{œŠˆl.áfW•ŒØÿØ m6á'-úE`Ýo¸W¿§2ÜÜ®~–&ýØ„/ß8Tóv-ÕØu'"›ÎD|0š0%Õ@2Z¢r-Üó¨&ªFÃQ¦ÝÏÁÇvVN ØØIDATñ–cCGÅvÛ‡bû"K??Ñ’ØÞ®fKÉP4.£ÛË'tnn‡uJóL×pœBgÊ*=UMÜÇÞÀº÷ó¤!"›Z5爔–= ›}’E.Œ¶Øt¸cQE^8]6 §Ð–µî•*}JËËVk~•ßœ¢Y©ÊoûI^w"“-gºiÝCe£pJä#¦(¾€ZD$h‘ Å¾H *cºš?¦ "²ÎfÂi&¬cÌu×^Ùè.L¶ø*—EDÖÓLø Í„u,Uö°¦±™ù*—EDÖS•?;‰©eªœ„XG¼“C®-"´ˆHÐ""@‹ˆ-"´ˆHÐ"ƒ°kBIDAT"@‹ˆ-"´F|ñ¶Ïßݨ~@:‘«Ï_ÕÀ~@ŽÈ| yÅX»öÆF÷šÔÿ™RòšõÁIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/new-repos-list.jpg000066400000000000000000001632531203611042400320510ustar00rootroot00000000000000ÿØÿàJFIF``ÿþLEAD Technologies Inc. V1.01ÿÛ„    $.' "+"(6(+/1343&8<82<.231  1!!11111111111111111111111111111111111111111111111111ÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀSöÿÚ ?ô »Û-V1{«$·©9ó-í +1ó´•È<žz8â·Qka6hô/ÛÿãßãUiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p'ü#Ñ€[@· IèÏ&‹K¸‰¾Ç¥ÿС7þMþ¾`#ZiJ¥›Â2€9$ÚMÇéGÌü:þ_• A!—„XÕØ¿Ð“Nϸ\±ö=3þ… ¿ðoð¥ÿoÉ`ÑछÂj2ÎöÓ*¨õ$ô£^ár“èèƒÃðÈî2©r;ë…ÉÇ#š™ÉSø¥cZt§Rü‹aût_úæÿÀ)ÿ²úÅ?ç4úµO/½˜ÇDWí0+»¤·š1Ï[ª5¡'e!<5E+h»4ÿ&jEâ;O F³n»—K”ykmþ±íä`)f&ÐxíŒs›plÀÍÓb'K³lqöxÿôWpJîÅoNÖðGý˜ÁÜýîTâºiS¿Æ”ˆ©áËû»é%·½¶òÞ1¹\c ? U ¡¬HRL5 Væ=jM'L±†êê+o´²ÍqäîRp|­“‘Îpó\Ñ““}“Kï-«ZýFMâ¶·ÖÞæ×Ë—HlÃçÍ  ¡n'ù©ç|‰­ïkyÞߪ`—½g¦—ÿ?¸d>$ˆßjz}Ͱ‚ûO·˜·äH<°ì`t'=ЕD¡)­yoøuþ¶¦åô½¿¯ëϱqu=ÞïÙ† —ÚüÿìnÛ»†qUZ^ÊþB§ï´ŠÚ.µ5íü6wÖ1ÚÉqd·°´S™TÆH1*¸a‘Øz¦ù\“û;þ?äÄÔZÙ—ãÕ´‰-eºT°kxHJ·Q è ÎO5•ÇÖÄ–×úuÕ¤·V·ö“[CŸ2hæVDÀÉËÅ7++½jì†OJ[¾:•´fØ'3§–[Óvqš­kõ®Ý W¾!²´¹—t¶i ™»y’ê2ØÈÚyÉ Ãtäõ2Ÿ/5ú[ï}?/¼i^Éu'µ×tyô˜5#¨ZAk6ygE Äga9À`:ŒÕÉò»6L_2º,]jm›*]êvìÊD“ª’Œž†•ìíÔ:_¡"ÝY40Ì—vÆ)ßˉī¶GçåSžOéEúkù5}BêÏX°Ó,¬¡¸šñ$pÓNbU ŒôF'9©RnN+¢¿ãa½}Ý¿ –Òêã_Ogöèåà0„„’î@¦ä–·ÿ‡žÄm«èér¶ÏªØ,ìT,F娯sÎF>´ÓÖËql¯Ð†×VŽ][X²ž4·J³Îò¬7dä  }jc;Ùé«E4ÓIuW,GL6‰v5#lí±f®Ænx œÁãÚ©ÊÛ‰k±V-jÎmKÈ·¸±–ÕmZáîRò3°+œíÇ;ºqKš×¿K~?Òõ¸v·Rå¥þzfwö—™|©•ü¿÷°xèzÓr²¿@[Ùn}þ›©3®›ixÈ2 –B£ßŠÒâ¿BçÙÏ¥‰u¨ßÂC&‘§Ø[Lñ[-ÃI=ËD0X®·¥LdåÍn/½\oKyßð/Íygkq­íÝ¥½ÜÀl¦˜ž>PpO&—ss§Gœ—ÍbÓ¥ÁgF ´3!P“ŽŒHÏJTçÌ¡}9¶ÿ/À$¹y­öwþ¾aŠ~Ñz,-l·Í}-ªÅæàã#t¬vü£ž˜9•Wû9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€B†SO|‰›ÿE½º¤ûkÿxÔXaö×þñ¢ÀsZ#µÆ`gí}¿é²Õ½‰[‘ͪøÖ{»³¥&•-œW3CH»X„‘ä‡9SØf¥(Ûr‹~ÕüA&¡{câ(í#xá†X¾Î8ev‘N~v˜ÿ .€r©3ZÝ[•8&Êú½pc>4}T¯A§ßôFù¶ÕX[GÕínŽÈæ—j<Œ²Ï´ä†§'nü}’•œ62öª4k¯yvêcøžd‚ÞæÚFM@,LfEDÞGÌ# >ç¦I?í D”T­ÐÂBjŸ5Efÿ!|mEN0>пú ×¶ž§Év§™ü=§¶1ºÖ>à"²nÌkGs‰ñw‚üLfwÑ­­î‘Ýeˆ0ü_­z4±4íih*‘MÞ&—ÃêšGŸ}®‹e»™v,PDƒË\äå” “íÅaˆÄF~ìv&1°¿<9>¨|›mê[Èã eªÛʈmåÉûÇpp£ƒÀläàdW®WŽ¿—_Õ[üÍtJÏUÛÏ¡³àmJóÄ:5Þíð:"ê˜À4G|gíœûV±iU”–Û¯]¿'øÙû%¾ß'«ü¿=OÀš†§ªø• £Üù2i÷YçX¶0î@9*A‚kŸ±ioy|Ó¶Ÿ?ÁÙš¦”Õö²ûÓoðÿ€j[økP ÿ²ÚØ@ifßÉ,?Öyeqœã¯|âµÅ>{òùCÜ’æïúœËx [ƒO’ÖÚ e¦”¶Ï,Óo{•~æX“å9Ï ¶(­¯$Ô.b’þÎ8¥›ÃÒÙI"mTYØð Žœz zSª•ª(õå·Ëø;r9t“¿ û= [¶%ô¾»¸ûƒØMf^ÛŠ®$S¿iS´©ç8íUYóJ£_iYyj÷õ¿KìDQŠÛ•ßðéèKà¿jšVµ§¶¥j²C‘ös/,žk6ÌuàÎ1ÇáVš\ÿöí¾Jߘ·KN²ù^ÖýQáÛ…ø‘q¦ÿâY¦;jc8L£åü÷«:E·ö}Õèõü‘UwKù¬ßÊëñzü?xn{Ÿè×­ ¾³amë<(±1¶í;de¡¥j’mtVõ¸Þ±Iwý ßxwZ×ï¬îtÿ´XD$h®äUkϘ ìr¡FÜüÙ±Û&ª-Ƨ´zíÿꯧÏÈM'E¦ÿ//Ÿ_#:[kíOPñ–—g¢\Í5ñ>vŒ%±hW™>lü¹Ïʧ15.TþÓ׿¿È®nZœÏùVŸybûÀÚ÷Û5m–¦á\ØO.¡n¼Ærx'gŽœÕ©ÚJVÚmüŸoB9}ÅîÛçÔ}Ç„u›ýPêÙ2[Ã>³mrÖ’²oŽ8ã*Ò0©$àáI=?’äq¿÷ߥöü‡?{›Ñ/[;¿ÃO‘¥â¿ j—^"»šÂË}¼ÚöˆÊÊ Ìĸ'Œúž=ë&ã5ß–ß#DÕàû6Ùâ êèö÷3Úù[øzKk‡ó’=’ ¥P’zeO·çZW’ç¨ÖÏ–Þ¼ß×äE%hA>—¿þoëï/ø—Å7#W‰íõ‰tøXF #hA )#äç¹##­ÿˆÖüÚýÚWfV·'¦‡m…q¡%ÃjBãÕ’?-:rPÝ»±ê}«4ìÊkž¸ÇŸÚ“ønmbÏìQÇİ3E*»#®8#‘J›åsÓVÕ¾áÍ]Gçqöº6§a¯ê“>…%ü´°ÍÌè (%äÆFÐÀç¨ëUOÝ\¤›¿®ºyýß!KWÌ»Zß×G×òfDþ×U.c]9É%]AHtÃ@NK{w}ªi{ª•þÍÓüm÷ßüÇ=yíÕ+~-3LÔ5­;QÒltÉŽ5ù$7åGYwíû¸Àù@ç­~ z(«úïþaSz±ï§à‹W~ ×å›UÓ4«;«->ò+œ‹·‰ãYS ).ªøÉVàd÷¨³ö\½­e×Gv»[¢ùy—uí»Þý¶µýMÏxbú=BMGRƒQ·œZÇk²í Áç €x NNOŒô9%Ì×Úwó0I®Tú"¿‹<5y¨k±M¦èwVz•¼ñù:¼RF#x¾RáÀmÇË´©íÈÖTôš–Úëæ¿àéý"毼´òf|^×®-n´9t™m¡ŸW{·¼wC‡ÌÞíbÛŽPçžÔéh©_NOÏ]?©öíö¿É_òcàmoGÕõXYHú‡ö¤¬öÞjwhçøyÀa÷†{Ž{ TwG£Ò^]ŸËõc¨¹Ûî­o»Uóÿ/SÒÓO, ì##8#U7bVÂÿfŸîÒ¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓýÚ9‚Áýš»G0X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓýÚ9‚Áýš»G0X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓýÚ9‚Æ^½oö3c.1‹‚?ò•pwbjÒø”_7ö;iOfQ Ý7ä ,ïW£dtÖ©%Ô VZ…ÏØàûzÇ×–¾rFAU||ÀH#9î~´ìao ÚÜtó>Ùÿ£ÖŽ­Žõ )¯b]5çF½¹•$Žò×k£Ìî¤n”Œ:R¶([{›“¬=ÕÅ£Z£ÚC42e’f'÷nØ‘zã¿¥4„s¾ Ým6žPÏ¥ÀÊ À'ç¯;¬Ï¢Êt íßôF´Zæ¡F,´¸¢Ôâ˜ÄÆââ,}°AŒ)û¨{ç9bÑΡ¤v)`ç^ó®ìúy_Ö»`x‡ì04ɤÜÉ5”‘oŒJ’AÌlOÞÇlœƒƒ’ ä£Íx˜l Õ]×âu?m~Ï¡@q×+ÿ µzÐzŸmhZìöúm•…¦š÷-oenìÁÕ~ü`ޤzʥǭÆhnê_ô“þþÇÿÅRä]Âáý»©ÐOûûÿG"îíÝKþ€rߨÿøº9p¸nê_ô“þþÇÿÅÑÈ»…ÃûwRÿ Ÿ÷ö?þ.ŽEÜ.Ûº—ýäÿ¿±ÿñtr.ápþÝÔ¿è'ýýÿ‹£‘w __ÜjÍm}á±sLr¼L¹ à·PFhäWNûý —[ÔUB®‡ `~ö?þ.Ž_1 ý»©ÐOûûÿG"îíÝKþ€rߨÿøº9p¸nê_ô“þþÇÿÅÑÈ»…ÃûwRÿ Ÿ÷ö?þ.ŽEÜ.U²»–Áæ{/ ­¹Ì’yMïsÕŽ©î{Уd¢žˆÖå¯íÝKþ€rߨÿøº9p¸nê_ô“þþÇÿÅÑÈ»…Êð_Oow=Ü\\cΑ Ò``ù¹ q“BŠK•=½nXþÝÔ¿è'ýýÿ‹£‘w ‡öî¥ÿ@9?ïìü]‹¸\?·u/úÉÿcÿâèä]ÂâI¬êFÑÉ »£ZHˆ õn¤é¦¬ØÔšwFv‘:+HÚG„!±2rþA‰üU[K_Ai{š_Ûº—ýäÿ¿±ÿñt¹p¸nê_ô“þþÇÿÅÑÈ»…ÃûwRÿ Ÿ÷ö?þ.ŽEÜ.Ûº—ýäÿ¿±ÿñtr.ár½ôö>oؼ4-ÄÎdFñ(g=X€ÝOsÞ…’ôA}nXþÝÔ¿è'ýýÿ‹£‘w ‡öî¥ÿ@9?ïìü]‹¸\?·u/úÉÿcÿâèä]Âáý»©ÐOûûÿG"îíÝKþ€rߨÿøº9p¸nê_ô“þþÇÿÅÑÈ»…ÃûwRÿ Ÿ÷ö?þ.ŽEÜ.Ûº—ýäÿ¿±ÿñtr.ápþÝÔ¿è'ýýÿ‹£‘w ‡öî¥ÿ@9?ïìü]‹¸\?·u/úÉÿcÿâèä]Âáý»©ÐOûûÿG"îíÝKþ€rߨÿøº9p¸nê_ô“þþÇÿÅÑÈ»…ÃûwRÿ Ÿ÷ö?þ.ŽEÜ.Ûº—ýäÿ¿±ÿñtr.ápþÝÔ¿è'ýýÿ‹£‘w ‡öî¥ÿ@9?ïìü]‹¸\?·u/úÉÿcÿâèä]Âáý»©ÐOûûÿG"îíÝKþ€rߨÿøº9p¸nê_ô“þþÇÿÅÑÈ»…ÃûwRÿ Ÿ÷ö?þ.ŽEÜ.Ûº—ýäÿ¿±ÿñtr.ápþÝÔ¿è'ýýÿ‹£‘w ‡öî¥ÿ@9?ïìü]‹¸\?·u/úÉÿcÿâèä]Âáý»©ÐOûûÿG"îíÝKþ€rߨÿøº9p¸nê_ô“þþÇÿÅÑÈ»…ÃûwRÿ Ÿ÷ö?þ.ŽEÜ.Ûº—ýäÿ¿±ÿñtr.ápþÝÔ¿è'ýýÿ‹£‘w ‡öî¥ÿ@9?ïìü]‹¸\?·u/úÉÿcÿâèä]Âáý»©ÐOûûÿG"îíÝKþ€rߨÿøº9p¸nê_ô“þþÇÿÅÑÈ»…ÃûwRÿ Ÿ÷ö?þ.ŽEÜ.Ûº—ýäÿ¿±ÿñtr.ápþÝÔ¿è'ýýÿ‹£‘w ‡öî¥ÿ@9?ïìü]‹¸\?·u/úÉÿcÿâèä]Âáý»©ÐOûûÿG"îíÝKþ€rߨÿøº9p¸nê_ô“þþÇÿÅÑÈ»…ÃûwRÿ Ÿ÷ö?þ.ŽEÜ.Ûº—ýäÿ¿±ÿñtr.ápþÝÔ¿è'ýýÿ‹£‘w ‡öî¥ÿ@9?ïìü]‹¸\?·u/úÉÿcÿâèä]Âáý»©ÐOûûÿG"îíÝKþ€rߨÿøº9p¸nê_ô“þþÇÿÅÑÈ»…ÃûwRÿ Ÿ÷ö?þ.ŽEÜ.Ûº—ýäÿ¿±ÿñtr.ápþÝÔ¿è'ýýÿ‹£‘w ”u©îµ›1mu¢\*«‡WŽxƒ+ ò>osUÊ‡ý'üújßøoZ{GÜVì ?çÓVÿÀ›z=£î/]Ø5Æid4[¸VÓw•$w¹l’ÄŸj”Úw¸ìŠ?ØϦ­ÿ6õ^Ñ÷ƒþ÷þ+=Y‡pn`æhû…‰õí5¡kæè·¶Ík…Þâ%;E9'ŠÂTÔ·g^S~MŒ¯øB¢ÿŸMgÿíê=„{_Ú•»/ÇüÉ-üoé$šn«p¨A1KuFö8ÁÅ5F)ÞäÏ2­(¸è½ ufÔôŽ[F¶–Òö4e$½·bGLVÐ+<ãKŸñòÿö ±ÿÑmCBOjGÄwÖk:Emir°„]êಔF$ÎŽ#CóÈã‚k+AÍÿ{ðoïÛô*JÎËËñ)YüEµ³µ’}Zo9®%Ú0a¶Ä~D.ßë$UûÒtÞÍÏ‘rj:=Õïÿ4¿.ˆVmùhvúuä…½í£ï·¹e±Œ« ƒù¹EÁ¸²c.es7Æ:¥Î¢«-‚S<1ð<áCȪO–„3šÍ·Íßü›ý KFû¶þ'ºŠÕc–Rú1¢ŠÛL{D@»™–æAÀ,¼çœàƒSQµ˺W¿nßÖ»W¼¯ÞÅ Æ:ŒÖz(û$š„·S$8ã6«)#2NNs€0ÆpNí/iʶ÷¿ [úëùÞÑo®ŸÎê £ñˆ.t}rÂO§¼2Mväñ"²(qÎ0 å¸è íʃ¼Ü^Ú/›½¿+|îô•£u¿è·ÿ?•·e¼{k¦YA>³A5Äñ‡ŽhPŽfLíy±Àì ôè(ƒæqV¢þÿÇëp—º¤ú+þíSŶ¶šuÄ©ëlƒŒŒsM^ñ¶Íµ÷+ÿ_>¢zs'ºWül]Ó|w¤júèÑnK–wˆnš|IJ”W.1µ¹*ã‚r2ái¦ãëòþ»Ùù½Íü¿ë¥Îž€9Ÿëz†Ÿª¥¼3ÙiÖ¾Hqu}o#Ã,…ˆò̊ʱ-’wŒŽT5Ÿu§WÞÞ~[õØrÒ7^-·ÿ1-¼y£Üëï£ÀÅîäHšã²ìß½~ërʪqב™Œ” äº+ü¿/¾Ã’åi?/Çúér ˆzn Dv6ww7-0…míå·˜’QœÉ)@0ÕçÍZÖÖóü-ÏôßB^—¿—ãòþº÷ŠçŽÜɦi÷í W±@×j±å>r¤‘ª–ÜO,¹ÚAÁïSyG³¿ÏGoNúÛMvÒ/º_wõåswDÕ“UŠsö[‹9­¦0ÍÆÍèØ Õ”ä0<Ö«ì©.¿£kôÍ¢ôÌc…ÜuU$f³©'9.ˆ¨«É#‚Ðü}4A=äÖzºOoºéÖ’»¢,O™Kœr¤ln=5jÒqZë£èôoôïmUìµ%÷Û{®¾¿Òô¹¾þ-‚;Áo.›¬‘Á4ÄGåÁ4€‰ˆ|–ù”eC(,>n¸”ï·¼í½¿íªË_øe{_õïmL™>%i61D50ñNÅÚXÙ ‰ Q+§*ÒäloõeÉÆp2jM%ÖߊOׯ˸4Õôïø~ýgÅ“A¤ê·šV•usŒrºo(@îœ0È€r À)Áñ­­¯l¬Eæ³` 2pÍÊþVµ²µ›û¿¦¼ˆz7ÛOÇ É|uduå麔ÑÙ©{™cHö‚GŒ±Ë‚yŽ'⦚ϣ²ûÒkóé·^—©.V×]¨#"˜“¾¦v³.Ÿ%ƒ¨ìó],3³•VV F:|û=‰©ºNÏk?Á_òOð½ÖÖú~-/Ôæ/¿²üù"·Ždi¦”,M [u„HŒá–ýä@òÉéÙÆþê–¯¯2¿ƒZ»m}=,Ýÿiئd¹²¿¶´ : ¹#O-šÅÀ‹ôF íÁÇ\ñK›K÷W]ÞËï»[Û¾Ú‚]<íèUƒÅ÷+¬ÝEu¥jQïŽÝm, ÁçHïæ–`Cíjdîa§¹æ•õ[»¿’I|·ŠkF¶·ê\7Òü+Cvƒ ¹Y(YÝz¡÷z‘ž(Vm%Õ¤¾jéú=½tî¦ßKþ /Õ[É›šuìwöí4*ê‹,‘|À ”r„l©Å dû«ýá³h­âmB]'ÃÚ†¡£Kknò¢¸$yš–íoT¾ö‘QWv0o¼{cez ±ÜÃf–4sg-³ó#DU3\ç$ð8$E핾wÿ"V©|ÿTâ­Íõ¼ök<Ö¾\‘Im †W3ù*aÕÊ%ìøçžG7»óµ¿òkÿé>€ì—¦þ–þ¼Î§DÖ#Õ–åEµÅŤ¾Lö÷wÆÛCU™H*À‚ ëMk%çø;ÎÌÑ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €<ÿÇ_ñ髨JßÿIÚ®=Þð§ü|¿ýƒlô[R`kZé°Ú½óÆÒ}/›&â8;8ã¦zóšÊQR§ìúkø¶ÿR“´¹½?×Á– Óu-FÊâ•n#h™Êùq¡R DH~îr8#¥[ní÷¿æßàÛ·‘:ÑB‘¼¯3"€dp9õ8dû)·¨- šæ–š½Ù^â{b$ŽT– »Ñ‘ƒ)•‡P:ƒSmS]?ɯÔwÑ®ætÞ’s“kú«\ÆÀêþ[íÝApJƒœnpE'Ó]ÕŸŸü6»[pM¯–¿×õÑÚx2ÊÊÖÞ;ËØ^Útž9ƒ!pV9R(9ÈêIãÍï)zþ.í}ÿ?2m£^ŸÑÒN}2Þ}J;éw3Ç–û 29Rr1þÀýj\SRO­¯ò¿ùŽïKt9Õø{§Ei%­¦£©[A4-ÊP»¸™ pdn„duÍRºi¾–5k?ÁyynËÏñèj_x^Âö}BiZukûcm&Ö eáˆTœýÅüRVÛºvß/óaµ¼•Œ¼wyªÉÔÞN‚âD¶K…–•[ ä©OõŒÜÈàtcegÑYyjšû¬´iúé¨Ýšåî›û¿_—W¹ª< Gsç꺌óÜy¸c¼F/P±…'¡Rz¯Mï{ùµoËOø"I%n–·È·¥è ¥Ý-µkólÎÒ5£ù&"í’Ç>^ñ–%° žP´VéÓËþmo =uþ™±@Öý­$‚MRþÞÚh„SÚDÑùS/9r\‚A*T‘JIYßÎÿ×Ýý]Žím£+?„àh¯-F¥~ºuà—̰#2gq¡qÉ-ØÏlqK—Ýåí·•×Ýç}>Wu§õoêÁcá(-µXµ)õûÛ¨Š•iÌ@aRDj"€1+tžù´ìÛïÆßüŠ&Ú%Ño Åç¶ÝJý- ÊÝ‹!åyK IJo°É±ÉÆ*`¹-å·â¿슗½=ÍK>+)ïe‰œµäÞ|ˆÀmŠœqÓ?ZkH¨ö¿âÛýDõw,ÈÑô`AÅLâ§ÔiÙÜͨѬt¿2o"ÄÀclÇÊ*W`Ç äd’$“)ríý.Þ|¶Zh6ï{õ·á³õéçÔe§ƒ,-´ýBÌ\ÞHº„&¤‘Ô¾ Èä‚Ì­ÛÒ©Y$—FŸÝd¿$wæë¯ât@`é@’²±G]Ò Ö´©´û§–8æÇÏ èA ’ ™EKëþgäTdã±BóÂz}Ô×’<— ö»/±FcNåA1A<ýÑÅUÝÛîÔ¾kôîJ\ª)tVþ¿z„þÓ®4ø¬giÞåž\o±˜HOÞ¶1ƒÀæ§—ktVû­gë¢_/ßr¸ðdFfº“YÕd¿3ã4"H¶FäHÀ‚§9õæ«gu¦ÿŠKô_4$´·Oé’ÇàÝ-Ô?'Ù¢š2]óŒ¹ÞïÇ-ó?L½¸ôžUªZ]%è–Öóó)I¦¥Õ;ÿ^[}˱¯¦YG¦éðYÂÎé!Ë7©'ÔžM[w"1åVBjÖjšeÍ…Ã:ÅsDå 8Îy©¶©öiýÎå'b–·áËMbX帖â)"ˆÇÂáLgz8qÁùƒF¤vëhµ¥Ì·Óð¿çv˜—£ÐÌÖ¼#s}»jökØ$M·ˆU‘<ؤlˆ)#Êã*FIϰ•¤šùýÒ_ûwÝæ7ð´mèÚLzTsây®®.dóg¸Ÿnù[Fv…Q…P=riì’[žâëv_ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €<ÿÇ_ñ髨JßÿIÚ®=ßð›”¹}»yÓl:¨?òͽj$4t~{ú'ýð¿áP0óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€+œ(ޤ¢€?Jž±ñµ$o]€/òÍ'Úÿé„÷Åkÿ¦ß}¯þ˜Aÿ|P«D’4gRÈpÛ-Ý€8ÏP= þØ‹þ}OþÉþlEÿ>§ÿdÿ ?¶"ÿŸSÿ€²…ÛÏ©ÿÀY?€툿çÔÿà,Ÿá@öÄ_óêðOð ûb/ùõ?ø 'øPý±üúŸü“ü(þØ‹þ}OþÉþlEÿ>§ÿdÿ ?¶"ÿŸSÿ€²…ÛÏ©ÿÀY?€%‡P+2[ @;ádëŸ\g¥?íôÂû‵ÿÓ?ïŠ>×ÿL ÿ¾(μzûíµfÚ«JÛ…ñîÕ´:è<H½rÒìðGýqj‰ìÔÓäkÿ\Sù ™«­^µì¦•#D’2 €”ƒ‚Fx½k¦4!(ó)ÿ_yË*òŒœ\K3êCtQÀFˆ°}ÒÈ;qÎÎ9Æ7n ôñ*â¥N¿%¼­Õ߯oMm½ìöô!MJß×õý#J½#  ¾h£ÜȈ%qž„÷úR{kHå·ŠF¸˜@Ä ¼d»@“#gÎÌ$›œôÔ yq7̰v繦—qNmä•ö‚XIÁÇ<0\v4µ¨êã(Á‡¨9¦o ]þ?ÑÛúPo.ÒÒk™s²ipM&ì®)>TÙ æ©wáïíë[µ1#7™ ¢ì@;óÉ÷äW«Y.~Ÿ‘ʧQÇžæÖ“zºŽ Ú®ß0Bê vÂ\ѹÑN|ñR-Õ–%¹"Lƒ‚°Gû¦€)i¿òµÿ®)ü…W2,º”±?ï hÄEÌŒqåvŽBßòÐÿË>ã$q¹Ê„f“wûÚïèˆöŽ-¥úÂÜ[•‚ksçìù¦¸`àÇ!é"¨ê£¦øNŠ¥(8·¿vú?6i ¹&™£[ŽäŸ¶ÙŒð-åãþ´%SšðI#ÛÙ2ËpŠY•YI@:ðHÏ=úâ¸18—ÝÓz¾½ü/éôS¦­Ï-»wNyüÙc–F”"'Îvœ?;”8ã°ëU…¬ê¹kt¿¯é]Š­>D®­sFÜ‘&AÁ Ø#ýÓ]¦-7þAÖ¿õÅ? i—s$ —Xöîqþz¯­+Ø íå«Iˆq–Ìlý(¸S Èbi#RU In@8Ó×ÿ¯…{›°@*ëž›¯ó¢à:˜!88˜ú*’!@ ‘ÌæFXœ*pÈA9Îqž¸ÀãÞ•À@Aƒz`-P@P@P@P@P@P@P@P@ ¸Uã>½¨Ò°ËŒüƒ¯¹õ è kKñ-õëÂF’!2o_õÄ‘ŽÄĸçv9ë]S£Æñý-¯¦§4kÉ»8ØÔ±¾iî{–MÊY‚+$‡eÁÜ£—üÙÏéâa±3«QůøZ¥þw¾–ÛÐ5ÝÚOßúl¿úÿŸó‘è~ÓysäÑÜφg‰%+Ï̤öŸA_'ŠÌqP©QEÙEÙh¿]OB4i¥Öþ¥ýò[í*+‰Ô,„ºœq÷X®ñÜñǧO—è05¥_ “ݜ؊j•G± ω4Ë]Oû>Ig7 èŒcµ•ã›î«È«±ñ€ÄW¦F:ÿàþ ï×NÆ-Zßב ÷‹´->ÆÖòêüGouš¹ÊeW8#—QÎ1í•ÛÞåëþ~{tbésJ=BÕŽPe‚$™ÀvÓž‡î7ONÜmR|±r{-þëþ µ²]v(è¾'Òµ©V+ §Þñyщíe·ócÈÓÌUÞ¯LŽœm®V¯ä+Ø×éíóý?NØùPç¶?Ïôý;cådÓ, Ãà°Q±ˆ$àpÔð2q”ë`#±½·¾€Ïi&øÃ¼yÚW ŒU‡8èTÃÛå:'ß_¼6mv'éíóý?NØù@žØÿ?Óô픑ˆÛŒr¿û7ùÿ€µ0 ó›j­öO.ÞÏQß©½œdG_íXÇYm·7Ëåÿ|Æpq ¤þ8ÿ=WþÂVÿúNÕ¼:è¼ÿÿ`»?ýÕji¿òµÿ®)ü…@Ë^¸·{YbóâóRâmɼn_Þ62+(Ô…8Ù»jÿ6)AÊZ/êÈf·©Ù„Q^ۙı ˆJ7œÈ™ùsž•Ë+UššÙšÿ#XûŠßÖë¼Ìçü7à½ÃZ•ýþ`–óß6\Ž‘¯D¤ØÏ P7‹mšèçÿA4€©3Çm*‚fQ'œßÛŠ,„[$} … €=94 Ž[ˆíåi!d““Î)€Æº³f,Y÷üÞHÏ=yÛE„Kës$ҡʳúc¢@ĽÿUÿý{·ô žî ’”ùÿq¿ô@´ßùZÿ×þB€)]\EôÐÝ]A I[‰ÕÿªÁÃ;á|+±åz¾ª¤"•Ý¿¯—æc(É·¡[O™.5Ao§ÛBöö²‰f½“k±ˆìE ‚çžÜç°œÝI+l¿ÈšR’›ú£ Šãþ?¬ÿëÞOý hím-áû4NÐï4ª@*¼gç§ë\¸‰ÔV…5«ëÙu4‡*Ö]QÓîc×"Ó­œ²Á²_9>]‘äŒp†\ö4ã^’é¥Ñ¤_#ç:ãX£ …Uèu§«$c)9;½É ûçýÆÿÐMY%-7þAÖ¿õÅ?  ‰hÉdÎ,óçÿ¯]††/Ÿ, K ׿Hê9ïBˆUˆašhcXâäd$g=áßü˜qÔc˜Ë!_5Ô…9Wã¾ôÒ°•]J° ¤`‚2ª+;K{(<«h‚e‹3Y½}ã'ή&ÀÈÏáI«€ ›±!BÀ‚)uÎyúTò»ŒUF2O$’{“Ö¬DØÚÜ\E5Ä++DrèÞ€úŒóñ4`œ’}}( € ( € ( € ( € ( € ( € ( € ( €&l@›GúÆ1þïµ !¦@`hzµ‘·Òþ ±· bA¼jÑŸÝü¯¸°Ï^ᬡe«ì‰jíéÔ»g=¬Úåñ±¿Žý ³ÊŒŒ7fA‚Pœ*õçö¢1JnK­¿Rïî¤hél2äí®iK“•hùRO³[¿.mÖºj.½£—K§ê»|ŸMîvZskšfŠ-e±…ÕŽŸɾÒíwHtç•åWæ?Þí·åÞ¤”¤Úïøi¯ç§‘•8ò¨§§éÙyúš°Ït×òÃ%Ÿ•l‘#G?š÷%·.ÞÛµyïžÛ~XïëøwnËñòr1qŽWÿfÿ?áÐ+S €8Çž«ÿa+ý'jÚnxeCÌêK(:m*ÅOú¶î9¨#¡Š5Š5Ž1„@G @P]ÆCB3@ ò!ÿžIÿ|ŠrF‘çb*ç®(tWu =Í7ȇþy'ýò(ê¡° O OŽMÛ‚ÊäzGµI@ š(牢š4’6dp?QI¤Õ™Q“ƒ¼]™Z'M‚U’>Ò9åY!PAö8©TàµIߘ aöüŪÿßB€aõ_ûèP°ú¯ýô(òϪÿßB€,ú¯ýô(òÛÕï¡@–Þ«ÿ} _)½SþûyMêŸ÷Øÿ<¦õOûìSz§ýö?Æ€)½Sþû_ñ ÉoTÿ¾×ühò[Õ?ïµÿ_%½Sþþ/øÐä‘÷ž5ïgùf€zEþ¨e‡ñŸè(*( € (ÖÞ]¹‘”IºVÜÄ0à8öV»Òô{ÉÚ{½&ÖyŸ¤’ÙŽ%}8ü¥hVDGBðÿýìð/þ#Þßp²5>н•ÇчøœAR0ûBöWFáþp=h^ÊãèÃü?Π í Ù\}‡ùÀô}¡{+£ðÿ8‚€´/eqôaþçÐPö…ì®>Œ?Ãüàz >н•ÇчøœA@Ú²¸ú0ÿóè(ûBöWFáþp=2YUª©rHíŸ@=iPãøóÕì%oÿ¤í[C ï ÇËØ6ÇÿEµD5]D¢ÎD ½¸&G^§'ì=¹ÍJNMEn ¤®ÌÈõHäÿVÚ£}!¸ÿ ÛêÕ{~+üÌ~±O¿æX·ŸÏÞkµ1¶ÖYDe8Ø=?e:r¦í#HMM]üÿóÞûüÿãYܰùÿç¼ÿ÷ùÿÆ‹€|ÿóÞûüÿãEÀ>ùï?ýþñ¢à?ü÷Ÿþÿ?øÑpŸþ{ÏÿŸüh¸Ïÿ=çÿ¿Ïþ4\çÿžóÿßçÿ.óÿÏyÿïóÿùÿç¼ÿ÷ùÿÆ‹€|ÿóÞûüÿãEÀb‰‘‹ æáy_ô Œ~´î…™¶¸; \G((n$ýy¦Ÿ±Eýùÿð"Oñ ìQ~ü“ühû_ߟÿ$ÿ>Å÷çÿÀ‰?Æ€±Eýùÿð"Oñ ìQ~ü“ühû_ߟÿ$ÿ>Å÷çÿÀ‰?Æ€±Eýùÿð"Oñ ìQ~ü“ühµA{bIÂ4nÄyïÔÇs@}Š/ïÏÿb‹ûóÿàDŸã@Ø¢þüÿø'øÐö(¿¿?þIþ4}Š/ïÏÿb‹ûóÿàDŸã@ ¸‚ÚÞ 'šIÖ8”»·Ÿ!À$õ 7[ÿÏ _þü]…+ '·‚Úâç†IÚ9T:7Ÿ È# õ¦q%£òÓS+2Ž;—\‚Aƒ‚â•Ð[í”HÖ2Ü$¶ÇŽà8çà‡ÈõïB`Lo3k±ÆKÊBª77p~˜9ú`(³ÝÌóM#÷+# @¤Sï@Ø¢þüÿø'øÐö(¿¿?þIþ4}Š/ïÏÿb‹ûóÿàDŸã@Ø¢þüÿø'øÐö(¿¿?þIþ4}Š/ïÏÿb‹ûóÿàDŸã@Ø¢þüÿø'øÐö(¿¿?þIþ4}Š/ïÏÿb‹ûóÿàDŸã@Ø¢þüÿø'øÐö(¿¿?þIþ4}Š/ïÏÿb‹ûóÿàDŸã@Ø¢þüÿø'øÐö(¿¿?þIþ4}Š/ïÏÿb‹ûóÿàDŸã@Ø¢þüÿø'øÐö(¿¿?þIþ4}Š/ïÏÿb‹ûóÿàDŸã@Ø¢þüÿø'øÐö(¿¿?þIþ4}Š/ïÏÿb‹ûóÿàDŸã@Ø¢þüÿø'øÐö(¿¿?þIþ4}Š/ïÏÿb‹ûóÿàDŸã@Ø¢þüÿø'øÐö(¿¿?þIþ4}Š/ïÏÿb‹ûóÿàDŸã@Ø¢þüÿø'øÐö(¿¿?þIþ4}Š/ïÏÿb‹ûóÿàDŸã@Ø¢þüÿø'øÐö(¿¿?þIþ4}Š/ïÏÿb‹ûóÿàDŸã@Ø¢þüÿø'øÐö(¿¿?þIþ4}Š/ïÏÿb‹ûóÿàDŸã@Y­i"UÔehˆWòRâ@¤€q•ÈÎ?+¤íŭįÔ’5 É)ž#ƒœ62>SùP˜Àµ·•"czòH¥•!3Êp1“…ÎÌ?:/`­jeŽ/ø™@ò’±´©p€¶ êãÀ'Ò‹n 'kyŽæ ¹Ü3üÇ|zŽ™Å08Çž«ÿa+ý'jÚox[þ>[þÁ¶?ú-ª$P l¯¼Å Ÿ¾ÜÈ#-XÊö|»N¡y£Ã/Ûn¬ì,-’ÒwTÁ{B¼á l÷€9Å|®eÅÎ矸¥kzm~ýõ{ôØôðøz”-yõ·žŸp‰·íVΊ¨.-RˆŠª ÛØê}ël­¿¬Ê=9Wãgú“‰KÙ_Í£IµQ¨O ÷×vsÎó%œfÞ'·b…XÁ€ˆr3ó`c§Ò7h·ZW·Ïòéß®‡Ÿ§2¾Ú~_çòÛr¤Úæ­}=œúT#‘£S"âGò^WL‘‘Ÿ‘{`­V‘“{­ZóK•]}ïæ‰×–ÏGúë§á÷?BãksÏáý~þÖv_³n6ÍåŒÆ<”lcA'ƒŸJMZ1×wÓ·5´ùd×—ãbM~[;mBàÍy©[ÀÐÅÚmü©¼÷8(QcVÚFs°Ÿ˜ãwJËÍ»z[þþµ%~—¥½®¤ö¾$Ô®åŽÞßD rË#‘q,! ³•/cøåG ýiIÚ.]•ÿ?ò[1,ü\×qÃwŸ=¤†%i±"É RL`€]A;‡S€qÍ5gë{yÛüìŲ}Öÿ}¿à‘Ûxžêòxbû"ZÌÌ@€Ü~ñO—#™0É÷ボ‚G%u×Dß—OÇ^¿ðÕ´’óeâ}J="îì!˜ÁeÝä«sݶpUv ¶‰^àsZÉ%6¶W·Íþš­cv´ß_Àу_¸{F½–Á#³gç屿˕ۀ3·¿Bzc˜_fú_ü®¾÷§ÝèÝ®Ÿ×å¯ÈÒÒ/£`—~W–’–1ÙÜ™;[§qƒz-d¯Ù«]´û‹vVvÓêryñ!Ce¹8V³UÜV@ç“AûÃÙX{gmo©Çöx ƒ0ÜŒ3^+m-!qÁÁÀ}ÑìÊ€FLà‚U”åXuÖ˜Vžwî¦ÂÌxèãÔ…Px‰µÑç:2³^|¡BlÝ·pÞWy ¸.â7qœgŠ_ÖŸðFºüþûiøœÒx‚}24¹›Q¼½·‰ç‚æ;ËdŠhe‰Q[j¨?u€*6ã“Á*Mòûº¶¼Ýì—Îû>Ý5­uÓU$ôüí¯¯m3ßÄ> Ò´ýeµ+Ï5¢ŒÃ ¾J"ámÒL Å›Ï*qZ+^1]e§šS³^¶×ÿì‰Wzµm5]®®¿>ï3ÇÚÜšF[jVÚmÝì¢8®nY#—bwñÈ\sÝ…e9rËN—vïnŸ7eèU5xÞ^_ù+¿‘Eöë .+›Xtøo®$k¿,…}û•T!ÜÃaê@>¢¶qJvéÌ—ßk?Ç_פFü«½Ÿá¿üI+‚J²Ÿ—È'¥U½ä–º´þQ¿õ·boî·åu÷Ûúõ&1¸me´Ä±÷ù‘Åq ³4~r!b…Ì!:«µ˜‚9^¸ÎRýÜ¥‰µæ“·ë~«Ì´­(§Ý'åëÉ™¶>:Õ`Ó´ä¹Ñžþñ¬¡º¸kQ<»•ÁÁQC¬J±EÇœo$½£ŽÉ;^I5çåß5~[úþnÇ:„¦a“¯Õ*ÕË4 ( € (;ˆc¸‚H&]ÑÊ¥sŒ‚0EAöÿŸ­CÿçÿâéY=¼1ÛÁ®ØâPˆ¹Î˜tøEþË'ö§ö?ÚþÓqæ}£Êó?×>3»ž˜ü+=;KûÚµ?쿳ý“í#Ëû>ß/ýLyÆÞ:çñªˆ„‹þ]¿ëîoý©TP@P@P@P@P@P@P@P@P@P@P@P@Um>4’¬—Q4¤3ù7RÆà áX àøR²Ööq[Êò£LòH¡Yå™å8ÀËó΄¬{Ÿì¿íËOí¯±ýŸìÓíû^Ý›·EŒnã8ÏëI€ÛïøG~ݦbÿeý£í-»ìž^ý¾L™ÎÞqœ~”•¯ Ë2ÈFúã'óJ±OŽ?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕ=âI’â)Qä•XtÈ,sYìÆ2&½µ±º²…"™'fa4³6õÜrr0wrO9ýkÀÅå•kÆQMk+ÿÀÛúíÐ„\dïtÖ‚iFŽ%…K`mP:>•èáðp¡.uñ4“ù^™ÏR´¦­Ò÷+A¡ØÁ|o#IŒ»ÙÀ{‰›;Š¡bªNO §Ö»®Ñ‹CàÑì-ü¯"Ùcò¦{„ÚO>íÍ×¾æöæ’ÒÉtVùÖþzˆ4m=m¯mÖÙV+çg¸U$of1ëÆqÚ…¢K¶ß}ÿ0ëë°—º{,’\Ûîyc9˹AÊçr õˆ¢Ö×çó3xRÎ[¸dk‹ï*(äM†ú}ì\§ñïÝ—îôæŽ÷òý~ýÃkXµÿæ”.ã¹[@Ü";,yQ…&0v’‘‘è(zÞýoøï÷ŠÖIvÿ‡üijðæ™g,rÅ ­$Dli®$”¨ ÊÜÇ Ütæ÷óþ¿A‘ hábQm.Ø€U_´Ë‚ ä# ß2ÑNTsÍ ÙÝVÙúùî ]5ÞÿŽÿyb÷F†mëL·?gŠä8cøÞI~ ï“ôÏáRÒi'²·Üº 6›kÔ¿) IjB¨€éTÛ“»&)E$†5´m1”ïÉ `­´’¹\àà’FG•† mÌ%òØªî ¶8 É¢ÀKŠFLã©S•aÕO¨ ]<7ÖogªÇ+DåO™n·*C ÊAäÔîm¡è³i¦Î8ÅÕ¹nÉ;Ìí"ÊÌìʼnW©èéÅ;ÙÅ®›~?æ+h×}Ëš™{i}kuh²Á¨8’ᎀP^½1Ó=hZZÝ×­ïù•}[î­ú^ÆÙïa¼x¸·FŽ7$üªØÝÓ£ž´-}ÿ¯ëþ­¢]Š1økHŠèc´Ûú”¸_1ðà³±Ÿ—™ñŽ¿JKÝJ+¥ŸÝk~Hw×›©#h[ÛGo%š¼1É,‹±eÝ `ùò‘ø]½<¶ëþ¯™~Ñ¢#¼€Â¾Z47÷°Lä&UÁ(;)àdà šºïýiß¿«¯ãøïèj¿ü„`ÿ®24  4P@P@P@ÑË·ý}Íÿµ(F€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €+Iÿ!?댟Í(‰ñÇüyê¿ö·ÿÒv­¡ÐF÷…¿ãå¿ìcÿ¢Ú¢@‹Ö0,Í>âF&~Ÿïµf2ר£þóþb‹}Š?ï?æ(°Ø£þóþb‹}Š?ï?æ(°Ø£þóþb‹}Š?ï?æ(°Ø£þóþb‹}Š?ï?æ(°Ø£þóþb‹}Š?ï?æ(°Ø£þóþb‹}Š?ï?æ(°Ø£þóþb‹}Š?ï?æ(°Ø£þóþb‹}Š?ï?æ(°Ø£þóþb‹É4ËidMç¦Xý(°ÿeX† å b2ÕÎ?/q@þȳÿž+ÿ|ð û"Ïþx¯ýò?€ì‹?ùâ¿÷Èÿ ?²,ÿçŠÿß#ü(þȳÿž+ÿ|ð û"Ïþx¯ýò?€ì‹?ùâ¿÷Èÿ ?²,ÿçŠÿß#ü(“iº|™&X£EêÎøâ¦RŒ4Ô[vCÿ²,ÿçŠÿß#ü*„4iV^o—ä®vû«ÐŸí wöEŸüñ_ûä…ÙóÅï‘þdYÿÏÿ¾GøPWJ²g‘+˜Â“ò¯ñnÇoöM$ºnŸ î•bze‚üª'8SW›²óMè†Ge¥ÈŽñ´ ©÷™J¿_J˜Ö¥4Üdš[ê7-$“J³XÙ„+ û£ü+RH-¢í,¢xÕ£ûLƒiòÓµ0/}‚Ïþ} ÿ¿cü(ûŸüúAÿ~ÇøPö ?ùôƒþýð ìóéýûá@Ø,ÿçÒûö?€°YÿϤ÷ì…`³ÿŸH?ïØÿ >Ágÿ>ß±þ}‚Ïþ} ÿ¿cü(ûŸüúAÿ~ÇøPö ?ùôƒþýð ìóéýûá@Ø,ÿçÒûö?€°YÿϤ÷ì…`³ÿŸH?ïØÿ >Ágÿ>ß±þ}‚Ïþ} ÿ¿cü(ûŸüúAÿ~ÇøPö ?ùôƒþýð ìóéýûá@Ø,ÿçÒûö?€°YÿϤ÷ì…`³ÿŸH?ïØÿ >Ágÿ>ß±þ}‚Ïþ} ÿ¿cü(ûŸüúAÿ~ÇøPö ?ùôƒþýð ìóéýûá@Ø,ÿçÒûö?€°YÿϤ÷ì…`³ÿŸH?ïØÿ >Ágÿ>ß±þ}‚Ïþ} ÿ¿cü(ûŸüúAÿ~ÇøPö ?ùôƒþýð ìóéýûá@Ø,ÿçÒûö?€°YÿϤ÷ì…`³ÿŸH?ïØÿ >Ágÿ>ß±þ}‚Ïþ} ÿ¿cü(ûŸüúAÿ~ÇøPö ?ùôƒþýð ìóéýûá@Ø,ÿçÒûö?€°YÿϤ÷ì…`³ÿŸH?ïØÿ >Ágÿ>ß±þ}‚Ïþ} ÿ¿cü(ûŸüúAÿ~ÇøPö ?ùôƒþýð ìóéýûá@Ø,ÿçÒûö?€#[x`Ôbò!Ž-ÐÉŠyOJã|qÿz¯ý„­ÿô«ht½áoøùoûØÿ趨#OJû×?õÙÿô6¬Æ^¦@P@P@P@P@oeQ#2— l…Üã…uõlaÎ}gv¾\dï1JÅ"có6A#ÏBwzuõ ¨RžÛqp®ÄÈÈLôõãßža±‰"4E3"¾æÛ€›qÁ>§Òš`6FÙ>3´Š¡ý•X¨{˜ÙCWÊêÎ:ÔsÃeTŽm‘¶ä##Õ}ôÿërÓ²,H]Îã’Ià;’xÇz'5Í-†“nÈÊ¿½|îB! †0r /%H6àê +‘ÙyÉJ£ýÓæImëÕwÑ­¶¿™×F<«ÞÓÏúÛõùtÃ8’h¥ŠHãLmó¿ÍÎàòË÷H'ûÄqŒ¬¯hUÙm×ñíÿ e[“GÐÿáÿ^ïÿ¡Ç]æ](hÕXS$`ƒÐü⪑?…™PÜhQÁÔnµ„Õ™ÓtMü|ݹ󖠲'pºÅ%ðRC„RÄà¯` xù•U%—‘ÑI¨ÆD7Ðݶ¡Öö“L#a'Ï.ì2£§<3òäsØ>†¼*JN>kÎÏm>þÝú[gR‰\u”Oo§42œH‹†@øû£wͯ¯a€=ü4:J-Þ߇–ºÿ_#’£æ•Ñ Ÿú›/úù—ùI]$”P@P@P@P@P@P@P@P@P@P@P@P@P@ZOùÁÿ\dþi@OŽ?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕié_zçþ»?þ†Õ˜ËÔÀ( € ( € ( € ( € (¸ØÛOä LÑ•R89ÁÇ?S@ØG µí(VEf`·•É8çèq@¨)aqÀ‚ÀŒƒƒŸéI ‘Ƈ(Š§Ô Sô –ѲáQ£ŒÒjàHŠ`~$÷¡+ÛˆDÑbËÈ`ËÕX‚>„QVš«TdâîŒø ½yÚ+ˆ­âŠ9ÄÂxce8ÀÉ “Äõ¹UHUÕû©ÞëK¿ë~çLªÃ—MÞžŸ×CR½“ŒöÀØãÈqŸ}ññúÊ€XüÄÛ¸® Œdr:ý)§f&®¬%…Í奌Íem!†0›ÁÀôÙTÞ» $"C5ÄÒÇfiF,«×û¾•-–•…ˆqpHÀ)® ™þcó¤2 Ø7Ë¢6“jÉQŒmt#$esÎ:Þ¥As©õ_ð?È|¼£ A•CÇyœG’‹|©v6¸Û‘ãw'¯oÍý}ÿæG(ZC$0^y†Fó%yJ1 Ï;IsÓò+9Zú´!³ÿSeÿ_2ÿ)) Ô € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (  ÒÈFúã'óJâ|qÿz¯ý„­ÿô«ht½áoøùoûØÿ趨#cB²ûc]ÿ¤KÉ›ý^Þrí× úVc,ù:wýýý‡ÿ‰¥Ì‚ŤÑÑÑ]5¦V <¢õû”în¡¶¾[8.§’S˜|É#@$‘œô?¥y˜ÌÆ8Z‘¦ã{ëÙÓ¢ç+è&ˆ©©½ÄFîæ9­Šïñºá³Ž|±ÏŒzUàqñÆFM+Xu¨:6¿RãÙ[&¡ƒjwbæXšdM©Ê)PÇ;1Õ×ó¯A;ÞÝ-øÞß“9Þ– ¬ìíüÿ;Z’/³Æ%›{¾Rá›åà|§“è}(¿ù|û~( Ø£¶¡wùGÿÄQp+êVÚm”×—ºÜPB»¶¡ÀúÉú /ª]Ú_7¢†ÎÚkÙìâÔîÚ{uG•v§Ê;yÙŒü§Ž¿˜¡;«®öùèÿT[ï BÊÛM±žöóS»ŠÞÝ ’>Ô;T “€™?…+ê—{/¿A¥rÀÑA÷xúGÿÄS%;«¢´V7³ÙA¬Î×VìRH–ŽN@'#˜PÕ×õ«_špގ̹ýŠ?çþïòÿˆ¢àØ£þîÿ(ÿøŠ.{›;;2EÖµ$ciH‘á\"ãsr½FOA‘Eúz~;}ý±ýŠ;j”üE5Ó k‡·]Vs4jã-ÊpHÛ>†‹†ÄŸØ£þîÿ(ÿøŠ.ýŠ?çþïòÿˆ¢àØ£þîÿ(ÿøŠ.}>ÊÛP¶6zÜ–e µJ±SŒ§LƒÏCÚ‹èŸtŸÉêƒf×bÇö(ÿŸû¿Ê?þ"‹^öÊÚÁ"k­Nî1,© |¨K;(ÀO_Ë©â„õQïú&ÿ$&ûÃ?±GüÿÝþQÿñ\ ö–V×rÜÅo©Ý»ÚKäÌ6 ØûU±ÊsÃ)ãÖ„î“þ´vüÐ=ˆõl4³ö†±=°™Q¤òÂåQœäìÀUŽN'wÊ·ÿ‚—æÐt¹sûvÔ.ÿ(ÿøŠ.ýŠ?çþïòÿˆ¢àØ£þîÿ(ÿøŠ.ýŠ?çþïòÿˆ¢àØ£þîÿ(ÿøŠ.ýŠ?çþïòÿˆ¢àØ£þîÿ(ÿøŠ.ýŠ?çþïòÿˆ¢àØ£þîÿ(ÿøŠ.ýŠ?çþïòÿˆ¢àGu¤­¥“í·M± maC…¢àbYÿ©²ÿ¯™””ÀÔ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (  ÒÈFúã'óJâ|qÿz¯ý„­ÿô«ht½áoøùoûØÿ趨#¢ð§Þ¾ÿ®Íÿ¡½dÆU±º¿_±˜µýŽ-ÖÒÚ3LUܾgž$çgs)« ÙÒoì»2²FÉ‚‡8Ú½óþ÷æ=9k`3¯™WÅL‚“d˜ÉÿjJùÌÕ¨â!wÑ”“ö/Ô‡ÂN«j»[ psŽd§ü5=Q¦15|È|O£>«â«fÔ"·‹N¹KI¤ƒç/Õ.„Äã<ã¾+Þ•Ôj5½•½}ï¿ò×mŽ׸Ÿ}}F÷F¾¾°Ô^þ×[“SÔ<7ncÜ*I:¤žb0R_;~VÆKZ·©Ê§;l¦Ÿý»xíç£Û[yXŠw÷ì×çkýû½>côÙd¹Ô®bÑnÙ’y†0ß¿ »ÈÎÌ8ÝT­u͵ݾåkõµù­~¶¾„+Ùrïe¿§KÛ{tÛS'Q7¶—3Z·ˆ-4yï#̘ºY¤V{þ!æ3•óuo¼zPû1ŸõüGÓäßɲ¥³qíþ]ÿ…I5tIÎOK¦yÓ6ŸhÿnI¦"4Ë™bÄža_9YHÎp0C…î”·ùläìû7k]=•µÝ ÚîÛi[kçg¦ÝSò5¼8šàñŒ“꺆¥‹q>ë3§Ý¼2Ãóy`Mæaòì9TVÈÁ䜨>Zm料·éÂÚYýÒÓm-¶üºÛñ¿_+ ñÚ\ßÍc­ÙÙkÖóÍ£Ü-ºÛ‹…’ÛËdI#òŸ½ÜeFN@§ÉU®î>–Móylÿ;u)´â¼›ü´ù]!ŸVŽG‰'ñZüóß.ØÚè[´BŒ" ?rH26üùÎyÍM%~T»+÷¿­g·BÚæ+y¤€lŠ w9ÚAPó†ÈÈàô¡rÊ\Ö²i»vÖ6^ªÍüÚwWœ#ʵ岿}îþjËË[k©«©Ïam¦Iq¨Çq§E¨]‰v4× ä†Ü€Çt‡k9m ç5rJO¤`Ÿ¬­w¦ÚFIÛU}5-Z2·G'÷-m¯›¿Êä^¾Ôô»±5ͯˆ$ÓÌw£”½¸ó¥Ä;Ê•L±‰0*§vƒEKºrKFÖž__šÞÏ䉊JQwÑ=á¿ËO$îgørÛXG„ªx‚-zK»9 ™nVÙ¢ò!IS Ý—Ü9­e£ýßG?Måk|Úz~D½Sæì­ëê÷ÒÛj¤:„ÚE¤¶ø•üA™ïT»Ø“i†aÏî€Þp¾W+íJSN –ûüPÞúí{ôùX·ÕK{ôÛ¯ü __ÇÃ.¥w ’é7Þ$‚\ß­äÛ.e eO-;«y[V?›‚=k8üìâ¯Þï—çÞít»Þ׳Õjš·ë~÷ën„RG¯Imo›[³ÒÄҫܘµ;—•ÂE±ü°ésŸÞ|¥g–Ê‘OWw¦šuë®»v·2ïóKE¦»_ñé÷^Þ^gªh‚eÑì…ÍÃÝL MóÉ …¤m£,c<¡=vžGJº–ævV"D¹PXP@P@_ÿÇÇýroäh“³ÿSeÿ_2ÿ)*€Ô € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (  ÒÈFúã'óJâ|qÿz¯ý„­ÿô«ht½áoøùoûØÿ趨#¢ð§Þ¾ÿ®Íÿ¡½dÆoP@zÌzk6û¹"K”Œùy›Ëbo¼¹Î>•Ë_ B»N¤nѤ*J Ñdš=¾—n²(ÂwÒ“y'¶NIõýj¨aéaÓT•‚u'?‰–n¯!µ(%.YòU#ˆNÕàdsÓ‘ëZÎq†ÿçù¹l>Þxî"ÂÛäz`ƒ‚ìAySŒ”•Кqve{¹¬t{;ÍBq´* ÷,|œ(ŽIÀ¹À[Z>vûßù°µÙ9‚.(ÚdVD¨ÜªØ$Ôµr=‡¥ n»’жðCko½´I 1(DŽ5 ¨£ p6ÛÕŒ’í/­î幊ÞMïi/“0ÚFÇÚ­ŽzðÊxõ¡j“þ´vüÐ=‰'‚„T¸Š9UY\PÀ2œƒÏp@ úŠ6w"J(  Ú&“i©M©ZévP_Ζê;tYd‚w8<Ôö¡{ªË`z»²ýPeŸ‡t;;ìZ6mçºÉ/•j‰æ2¶åfÀä†äÐóB÷RKe·äVÛþ¯¹§@F°B·p±F'uÒ™A$z 6¹õ£`$ € ŽÞm£òíâŽÜ͵(ËIÀîI$ûš<€’€ ( € ( € ¿ÿúäßÈÐ'gþ¦Ëþ¾eþRU©@P@P@P@P@P@P@P@P@P@P@P@P@P@¤ÿŒõÆOæ”Äøãþ<õ_û [ÿé;VÐè#{Âßñòßö ±ÿÑmQ GEáO½}ÿ]›ÿCzɌޠ€9?I´Íb P·±Ô%°Û —†s¶`6Þ›q\9$/¡©½˜Í-K©g—Ì¿²»¹XPI5´%b't¸<Æ#\üÇ8=3Á×@(ë¦ÛÄÀU&íb)0ß/'®ã'ò W‘ŽŸ%U~ß«;hCš?ò3n ‘JN_OŽD‘^;¼°`@>NH“œ âKÉr¥C{Y[[zš¾*‹Q»ø{«Eqëùl¦U²$v€£v[àgž™¯ 5¢ç½ã{‰~‡ž¹Tß.ÚþG/ga¨_kÖðØOâXü=-ÄaÍÌ×P˸A1“æ“,dù>ƒwÝ®ˆhß7¿òK_ç{_]ï£×¤U·Òÿ{Û¦ÛÛMºíŸâ |Lú¶¡.˜ºÍ¼’ ¸ZÞoQDOåH²»˜IfT`"@Fà3×1Jî×ëkù>xÝk½•ü­}-cIY=:~+•ÿ]ïó6uKCKÕ&¶Y|A6„Ím%ÓE5Äóò&岓 Ä;–3À=&œm{=®í¿òÆ×êÖö¿Úµú¯dÖöWûõò½¿ µ±–‘u^êšA×cs¬Zý'–åwÀVv’99qÙi#oQŠ^ôc·÷ûzÞK[;ïw«ØnÏ›Ñ}÷×þkšt þË»kýo\‚õáE»…4{÷Û'š›™[Í*F7ômŸ+åo•%˪ºîº7göµÒû«¥}»wç?étÓu}~g ø®Ãp«{»gß&#»žY¤Û½¶ÒªÉ‚1€à0®]=?­¿®ú܈îÿ¯ømàicv   € ( € ( € ( € ( € ( € ¿ÿúäßÈÐ'gþ¦Ëþ¾eþRU©@P@P@P@P@P@P@P@P@P@P@P@P@P@¤ÿŒõÆOæ”Äøãþ<õ_û [ÿé;VÐè#{Âßñòßö ±ÿÑmQ GEáO½}ÿ]›ÿCzɌޠ€*jvðC$rÜÅ­*­ V=qŽGóQI°&·º·¹Ýöiâ›o_-Ãcò¢àTÕâÒå1 NÒ+¦ŒhÖþsÆâ@û¹=:{VU}žœêÿ+šCŸì»|ì&¦èêRïOÓìâq²Gn¨ÊytÈ=AzƒN§ñE/¸%)ü2f!A$€$šÑ´•ÙšWÑ\Aöò$°È¡ÒD`ÊÊyÔU4Ó³ ¤@P@P@P@P@P@P@ÿüxÜ×&þF€9;?õ6_õó/ò’¨ J( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ­'ü„`ÿ®24 'ÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰:/ }ëïúìßúÖLfõÉøðêM¦khz…½Ž¡-†ØL¼3³±¶ôØûŠáÉ!} MìÆihò]K<¾eý•ÝÊ‚I­¡+;¥À æ1Êçæ9Á鞺GX½6Þ ž©4ïkHñ€Fùy=p?ɼŒtù*«öýYÛBÐùÿ‘›qŠRrú|r$ˆêñØåƒùòr@œàWj^K•+úÚÊÚÛÔêâŽîëExµT¹š7WX¦3œAÈ8Ç ðsƒÞ½é)΋R^óLóÓŒj'‘ä²®±ká½6ÓH·×ì®l,—|:”Í5Èûñà:ÆŠ¥F ‡B 09ìæR¬¤¶ºÿÀo«wùèýë/ð˜rÚ?âûúZßz{_æhêWŒzˆŽ[¯ZëSÜß+˜’æKq†c’œBä|䃞sXÁ^)w^÷æŠ~vÕ«Ç¥­©¥ìî×UoK^Þ½ïÖý¿á×ÚF™v·1ߪ­Æ#–òK–3‹—U¸l`œüŒXœ1Ö¯X§·—üó³ùXÉ+;o·õùm£òw:š‚€ ( € ( € ( € ( € ( € ( € ¿ÿúäßÈÐ'gþ¦Ëþ¾eþRU©@P@P@P@P@P@P@P@P@P@P@P@P@P@¤ÿŒõÆOæ”Äøãþ<õ_û [ÿé;VÐè#{Âßñòßö ±ÿÑmQ GEáO½}ÿ]›ÿCzɌޠ€*jvðC$rÜÅ­*­ V=qŽGóQI°&·º·¹Ýöiâ›o_-Ãcò¢àTÕâÒå1 NÒ+¦ŒhÖþsÆâ@û¹=:{VU}žœêÿ+šCŸì»|ì&¦èêRïOÓìâq²Gn¨ÊytÈ=AzƒN§ñE/¸%)ü2a¬ÝOnm"´žÞ n¥xƒÎÔ Žß1 Á@H\’à ºèÚJìÍ+Oí;˜<û-ONxeRðÈ-Ô©ó ‰~aÌ=1Œo)¦˜"œ^k]JçR°‹D¶¿¸ét¼JÀ—#{‰n|œò3å¿Mãb^ê²Ø®ìŸíòßÝXÛêV"æÄ…ÆC±\Ì#$ù€‘çÏ–ý7®Áj®»Ûò¨=,‹šMÓ^Z¼®ñ¹[‰âÊmÆW@>Vasœª¨¹@P@P@P@P@P@P@_ÿÇÇýroäh“³ÿSeÿ_2ÿ)*€Ô € ( € ( € ÀÔ´çÔ|o¥Gou%¥ÄZeìʹ*Kj0é$8ëU‚°L K ƙ嵻‡ì·öØóíËnÛœíul ѶÖÀÎ!YYUn€ ( € ( € ( € ( € ( € ( € ( € ( € ( € (  ÒÈFúã'óJâ|qÿz¯ý„­ÿô«ht½áoøùoûØÿ趨#¢ð§Þ¾ÿ®Íÿ¡½dÆoP@Ÿ¤Úf±‡¨[ØêØm„ËÃ9Û0 oM¸®’ÐÔÞÌf–%Ô³Ëæ_Ù]ܬ($šÚ±º\žcŒ®~cœ™àë u‹Ómâ à*“Nö±o—“×q“ù +ÈÇO’ª¿oÕ´!ÍŸù·H¥'/§Ç"HޝÞX0 Ÿ'$ÉÎqF¥ä¹R¿¡½¬­­½M»ñw=–—¢Ë ÍÌÒFé¦,æ ˆQ‰Tç<ÌHoOzJs¢Ô—¼Ó<ôã‰ÇdpžÒ5AáÛå²ÿ„ŠÞ{-í­æ¸¹ˆ ½²¬C.1•)uÎkZ9—¯/ºÞ›÷ß^‹w|£yAùú^úký.æ­Ìº‡ˆ¼]n¶ÿðZèÌЬ§eÍ8Šä¿P¬£w– ã¼ô©„u—6ÚÛÿ$·ëoŸKÞnÔ#mô¿ß¯áý\ÏÑí5Û]y§¿W}.&ŽŠ ~Ñ"­ÅÈ„—4ˆ ¡`>b ’Jî RzG›wo¿’7oñ]“Ýu‹ª·Qóû¯}<ÿ]-mEÐdó,do3ÌÅÝÊç~übwÎ÷éŒc#ÆÔÆÅC4( € ( € ( € ( € ( € ( € ( ÿøñ¸ÿ®Mürvêl¿ëæ_å%P”P@P@P@:†©o¤xãJšpò;é—±Ã@'ËjB $ à’@$($&GRÕ|M©éOc-Ž*Ú£imžæQ4sï-÷,ˆ jÂ%9RÊr”¬¦@P@P@P@P@P@P@P@P@P@ZOùÁÿ\dþi@OŽ?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕt^û×ßõÙ¿ô7¬˜Íê( €+^éÖWû>Ýgosåço¾ÜõÆGD¡|JåFRŽÎÄvÚ6—i:Ík¦ÙÁ*gkÇ« Œ=)*P‹ºŠ©6¬Ù-å¯Ú¼‚.' •eV…öîÇXrH$G|Œ0VW‹NºM›µ›é6íÎäƒçÇ—œâ1×cgÿZøÆ`t›7k7ÒmÛÉÏ/9Äc®ÆÎ1þµñŒ&À-:é6nÖo¤Û·;’Ÿ^sˆÇ]œcýkãM€4û_±YÇnn'¹eÉi§}ÎìI$žÃ$ž :(,P@P@P@P@P@P@Pÿñãqÿ\›ùäìÿÔÙ×Ì¿ÊJ 5( € ( € ( €#0ÄgIÚ$3F¬‹!Q¹Uˆ,ê*¹ð=(ûDºmag²hR .á½vv;à™Æì«‚Í„ˆˆ%Bcx 7é€P@P@P@P@P@P@P@P@P@P@V“þB0×?šPãøóÕì%oÿ¤í[C ï ÇËØ6ÇÿEµD…>õ÷ývoý ë&3z€ ( € ( € ( € ( € ( € ( € ( € ( € ( /ÿãÆãþ¹7ò4ÉÙÿ©²ÿ¯™”•@jP@P@P@P@P@P@P@P@P@P@P@P@P@Pi?ä#ýq“ù¥q>8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÑxSï_×fÿÐÞ²c7¨ € ( € ( € ( € ( € ( € ( € ( € ( € ‚ÿþõ÷ývoý ë&3z€ ( € ( € ( € ( € ( € ( € ( € ( € ( /ÿãÆãþ¹7ò4ÉÙÿ©²ÿ¯™”•@jP@P@P@P@P@P@P@P@P@P@P@P@P@Pi?ä#ýq“ù¥q>8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÑxSï_×fÿÐÞ²c7¨ € ( € ( € ( € ( € ( € ( € ( € ( € ‚ÿþõ÷ývoý ë&3z€ ( € ( € ( € ( € ( € ( € ( € ( € ( /ÿãÆãþ¹7ò4ÉÙÿ©²ÿ¯™”•@jP@P@P@P@P@P@P@P@P@P@P@P@P@Pi?ä#ýq“ù¥q>8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÑxSï_×fÿÐÞ²c7¨ € ( € ( € ( € ( € ( € ( € ( € ( € ‚ÿþõ÷ývoý ë&3z€ ( € ( € ( € ( € ( € ( € ( € ( € ( /ÿãÆãþ¹7ò4ÉÙÿ©²ÿ¯™”•@jP@P@P@P@P@P@P@P@P@P@P@P@P@Pi?ä#ýq“ù¥q>8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÑxSï_×fÿÐÞ²c7¨ € ( € ( € ( € ( € ( € ( € ( € ( € ‚ÿþõ÷ývoý ë&3z€ ( € ( € ( € ( € ( € ( € ( € ( € ( /ÿãÆãþ¹7ò4ÉÙÿ©²ÿ¯™”•@jP@P@P@P@P@P@P@P@P@P@P@P@P@Pi?ä#ýq“ù¥q>8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÑxSï_×fÿÐÞ²c7¨ € ( € ( € ( € ( € ( € ( € ( € ( € ‚ÿþõ÷ývoý ë&3z€ ( € ( € ( € ( € ( € ( € ( € ( € ( /ÿãÆãþ¹7ò4ÉÙÿ©²ÿ¯™”•@jP@P@P@P@P@P@P@P@P@P@P@P@P@Pi?ä#ýq“ù¥q>8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÑxSï_×fÿÐÞ²c7¨ € ( € ( € ( € ( € ( € ( € ( € ( € ‚ÿþõ÷ývoý ë&3z€ ( € ( € ( € ( € ( € ( € ( € ( € ( /ÿãÆãþ¹7ò4ÉÙÿ©²ÿ¯™”•@jP@P@P@P@P@P@P@P@P@P@P@P@P@Pi?ä#ýq“ù¥q>8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÑxSï_×fÿÐÞ²c7¨ € ( € ( € ( € ( € ( € ( € ( € ( € ‚ÿþõ÷ývoý ë&3z€ ( € ( € ( € ( € ( € ( € ( € ( € ( /ÿãÆãþ¹7ò4ÉÙÿ©²ÿ¯™”•@jP@P@P@P@P@P@P@P@P@P@P@P@P@Pi?ä#ýq“ù¥q>8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÑxSï_×fÿÐÞ²c7¨ € ( € ( € ( € ( € ( € ( € ( € ( € ‚ÿþõ÷ývoý ë&3z€ ( € ( € ( € ( € ( € ( € ( € ( € ( /ÿãÆãþ¹7ò4ÉÙÿ©²ÿ¯™”•@jP@P@P@P@P@P@P@P@P@P@P@P@P@Pi?ä#ýq“ù¥q>8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÑxSï_×fÿÐÞ²c7¨ € ( € ( € ( € ( € ( € ( € ( € ( € ‚ÿþõ÷ývoý ë&3z€ ( € ( € ( € ( € ( € ( € ( € ( € ( /ÿãÆãþ¹7ò4ÉÙÿ©²ÿ¯™”•@jP@P@P@P@P@P@P@P@P@P@P@P@P@Pi?ä#ýq“ù¥q>8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÑxSï_×fÿÐÞ²c7¨ € ( € ( € ( € ( € ( € ( € ( € ( € ‚ÿþõ÷ývoý ë&3z€ ( € ( € ( € ( € ( € ( € ( € ( € ( /ÿãÆãþ¹7ò4ÉÙÿ©²ÿ¯™”•@jP@P@P@P@P@P@P@P@P@P@P@P@P@Pi?ä#ýq“ù¥q>8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÑxSï_×fÿÐÞ²c7¨ € ( € ( € ( € ( € ( € ( € ( € ( € ‚ÿþõ÷ývoý ë&3z€ ( € ( € ( € ( € ( € ( € ( € ( € ( /ÿãÆãþ¹7ò4ÉÙÿ©²ÿ¯™”•@jP@P@P@P@P@P@P@P@P@P@P@P@P@Pi?ä#ýq“ù¥q>8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÑxSï_×fÿÐÞ²c7¨ € ( € ( € ( € ( € ( € ( € ( € ( € ‚ÿþõ÷ývoý ë&3z€ ( € ( € ( € ( € ( € ( € ( € ( € ( /ÿãÆãþ¹7ò4ÉÙÿ©²ÿ¯™”•@jP@P@P@P@P@P@P@P@P@P@P@P@P@Pi?ä#ýq“ù¥q>8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÑxSï_×fÿÐÞ²c7¨ € ( € ( € ( € ( € ( € ( € ( € ( € ‚ÿþõ÷ývoý ë&3z€ ( € ( € ( € ( € ( € ( € ( € ( € ( /ÿãÆãþ¹7ò4ÉÙÿ©²ÿ¯™”•@jP@P@P@P@P@P@P@P@P@P@P@P@P@Pi?ä#ýq“ù¥q>8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÑxSï_×fÿÐÞ²c7¨ € ( € ( € ( € ( € ( € ( € ( € ( € ‚ÿþÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ íŸõ°ÿ¾û:>ÙÿQ;ûçÿ³ [²ÄÔ¬I<¯þ?@ÇßiY¦–6ÚŒ $ez}O¥q>8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÑxSï_×fÿÐÞ²c7¨ € ( € ( € ( € ( € ( € ( € ( € ( € ‚ÿþß×ä\®ã­ÄÓùM-¬{ã†EYBå¾`(œI=±ŽNqÃ[ÈýÍ“Wûõµ»uûµÖÛ•þ!ÑÝÄò*mš6nÍ…ã zà'œ{JÚž&•IrÅëè׿ˆ•9E]–+ ÌË—VÛws¥Áä8L]ßy.ÙUl…Øxù±×±©nÃ%ÓµµÜÏû9<¤Gó-.|ä;‹ ´`½=Å ÜA¨ßÍksöÞsJŽç‰Ð¥GDG?Åè ØSQ¸k˜-î¬BGrÆ2JNÜfÿ–‘(?wÎ}¨L p©·»òˆ] ¢ÿt‚NF×Ú¨+ÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰:/ }ëïúìßúÖLfõP@P@P@P@P@P@P@P@P@_ÿÇÇýroäh—ÒÎß°úy—ùIL|M« =bØÅqR[BÌë6B2¹Àà œæ3ÀSלwò³ô`£J£µõÚö·u¾¾Añ¥$¤¯rã(ÖÞØÚ6ø¦• í”Ȳ<{ŽdCÀCŸÒ»põJQ’½­×˜ss¾m®Mñ lfÒmTÔ4û+qv­J=ö³ˆä”cø†N7*ðNo¶¶O×ôóù=/¡Kf¿Ú¯ønž§1•’ÂÁt½>; M~)4ë™!\LX:6(b7 § 1´ÐU%y¨K¯,µþêÕ?6¹cò"ü±æŽêëNòÙü¥¿›:ðE.—§Û˜šÃQ׆åPH†d¾8>Êȸ=²£»R¤õ¥ü·_øºýWý½äJ£^ŸŠ³ý˳-xêÈÝø“X™t‹;¯+O¶ùÁk<›3B¡ b£æÀe?(ÆMM6£y=6þŠ/_.—é{µkš;»$¯£Ó£×úõîM7Šõ;ˆlµÝ*ÞÄK·†{Ä_¶Âʤº'’ZRIp J£*‰´¥'ºæÓµ–šoÙõº½¼²ÑE(¾‹^îÿÒ}QCNñ†¡,*—^(š¼ÔàÒÛZ†Y÷o°lË*)&W=[!ªÒWI»-~m%¥ök®šém.Š•Óv_.ÊëuºzëÑ¢tñÝí®‰©É¨ê±Cptýúd’"#]°’e¢ãæ,«p8ѾTÕ¤Ün»&£;_›ÓU}E'¯»ïkéý[Ï~¥ÿí½R=/µ ~KKk½N[inŒPªXÄ’J‚TŒ±TBÏ‘ÈàjU½ÄÞêþ®ËO.þm4­t¯ï4¶ÿ¯ËþöeXÃZÔ¯õKm;Lñ+ßXͺ_ËWùöéo2ñ6©¡eε¼‰|o€\\0¹’=Ï(Ü…Pb`Täí#¦Q“qºZÙiÓáM߯]õ^–eMrÝ_fÿà[£·mïª+zûP[ßSþÓi$µžò-û>quá@eÎ\aÉoÝç=j¾xkmŸrWý4é{0žÍ=7ÓÊë_ë{Ýllü>×5mVý¿´µm:}ЖÅ.‘§¶“pãÊ#FH!ÙÎvóÔ›Ir»kµŸõþ]Å+©[m^Ÿ×ü3;?ýC×iô6©f€ ( € ( € ( € (  Ww),‘ZÄ"ŽŽ „äq’…Èôol?‹• r¥ÓO_ø_×Ë]éÓRWoúþ¿"¤v3‹·†;æ„[!Ù Sæ# Œò˜R6F[îšá¥…¥ˆsåv·Eµû¯'Û§Üo*® ]_úÛ×ÌÓµ…m­¢™b@€±É sï^Ý8*pP[-9>fÙ—â·Êâ8ç‘ ÈûJ†ç{*†ù@ë’3ÁÀÛæã¡J.5%ß_;w»KúÙÛNšNñ_ðÄ{[ýª{Ý2;màˆ cV„1q'zº¼1óÈÆkš8¨F¯=8¥j¬¯×f¾Z=–æ’§'Y·Ÿêo#Eadd#Ò½Ôî®pµmSPc4¶zŽÚZMsÛËJ 4d}æ|¦¥€ºôÚ•Å‚®un°\]åh°”ëü.Nrõ$Ÿòƒþ¸ÉüÒ¨'ÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰:/ }ëïúìßúÖLfõP@P@P@P@P@P@P@P@P@_ÿÇÇýroäh”±;c²?ôó/ò’¨×|3£kÓ,º­³Ìê›[‰#ùy8ùg©üëЧQ©J)´'÷-iVŸ£iQiš}¸ŽÎ-Á#fi1¹‹7,I9,O'½j’Z!—üÊ`eeeeeeeeeeeeWÓím´ëUµ²ŒE BäžI$’O$’IÉõ£d—d—Ý uo¾¿ycÌ Ì Ì Ì  ’Û•v–Ñ„nÄ–FÉG?NÇÜzœƒ@ ûL‘œ\[ºÿµïôù¿J>Û÷'ÿÀy?€¶ÅýÉÿðOð í±rü“ü(ûl_ÜŸÿäÿ †Îå#‰•ãœ#·ú‡è\‘ÛÐÐßm‹û“ÿà<Ÿá@Ûbþäÿø'øPöØ¿¹?þÉþ}¶/îOÿ€ò…m‹û“ÿà<Ÿá@Ûbþäÿø'øPöØ¿¹?þÉþ}¶/îOÿ€ò…m‹û“ÿà<Ÿá@Ûbþäÿø'øPöØ¿¹?þÉþ}¶/îOÿ€ò…m‹û“ÿà<Ÿá@Ûbþäÿø'øPöØ¿¹?þÉþ}¶/îOÿ€ò…WÔ>ǨZ=½Ì328 ³9*H#pÊðFzÖUiF¬\d‹„Üâ>ÖK{X¶"ܱ's»@å½OËÿÖ€¥FŒ(C’ @œÜÝÙ/Ûbþäÿø'øVÄÛbþäÿø'øPYÖKïµ8º'j¯—ä>ÂT’¬FÞH,{ã¡Æ@#žXxJªª÷FŠ£QåE¯¶ÅýÉÿðOð®ƒ0ûl_ÜŸÿäÿ >Û÷'ÿÀy?€¶ÅýÉÿðOð í±rü“ü(5™&ÔbØ$†O¿/tõ€8ßÇž«ÿa+ý'jÚox[þ>[þÁ¶?ú-ª$è¼)÷¯¿ë³èoY1›ÔP@P@P@P@P@P@P@P@P@Aÿ7õÉ¿‘ NÏýM—ý|Ëü¤ªK]ÕítX¤¸»P°«ª –í+b@U’IQÙwˆô­r×Uå² Do±Ò[v‰ãl†G”àƒÈèAïUÊí{ŠúØ·öƒÿ<âÿ¾ó8o„± h ž ‚3ۃߨ¤ôW[ èš•"P®¡€xv0ÕHb3MŧkˆÚüó‹þø[ÌíþyÅÿ| -æöƒÿ<âÿ¾óûAÿžqß‹y€} ÿÏ8¿ïE¼ÀÏðõäáø.n Èîó3»('‰_ôŒ{T7Ê›oD4®ìˆ4éz´ñÃdÄI,~lB{) óS™<Å]ã‘÷sÔzÖœ¯_-ÄÚF…î© ŒI%Њ4y%>VrÎÁTp;’JZ¥}ÿÊÿ l›ìOöƒÿ<âÿ¾;y€} ÿÏ8¿ïE¼À>Ðçœ_÷À¢Þ`h?óÎ/ûàQo0´ùçýð(·˜Úüó‹þø[ÌíþyÅÿ| -æ :îY5­]_iHRÜF›FÕϘN©õö•=l1÷zõ•–£garðÇu}»ÈÊÎý£'0?SJí¤öÑ]–Úëb–hâ ŸR“QM·°Ò»²(iž"µÔî+4WÞ+•IJI»n3Î~SÔ¢­Á«ß£·àŸê+­<Í´ùçýð)[ÌíþyÅÿ| -æöƒÿ<âÿ¾óûAÿžqß‹y€} ÿÏ8¿ïE¼À>Ðçœ_÷À¢Þ`P¼»—ûwGv¤R<ÅÕT؉ˆÏ¨Ï8úzT½Çjºõ¦“m{±L­²(â·idã$* ,Øœ€3O­‚Ú\—NÕ¡ÔmæÕÆÄÞ[˜ØH «A¦â×Q&XûAÿžqß‹y€} ÿÏ8¿ïE¼À>Ðçœ_÷À¢Þ`A{ªCcIt"D‰O•œ³°UäI-R¾ÿåÐ6Mö'ûAÿžqß¼À>Ðçœ_÷À¢Þ`h?óÎ/ûàQo0´ùçýð(·˜Úüó‹þø[ÌíþyÅÿ| -æöƒÿ<âÿ¾óûAÿžqß‹y€} ÿÏ8¿ïE¼À>Ðçœ_÷À¢Þ`h?óÎ/ûàQo0´ùçýð(·˜Úüó‹þø[ÌíþyÅÿ| -æöƒÿ<âÿ¾óûAÿžqß‹yNfÝ©ÂØ0ÉÀR˜?Ž?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕt^û×ßõÙ¿ô7¬˜Íê( € ( € ( € ( € ( € ( € ( € ( € ( € ¿ÿúäßÈÐ'gþ¦Ëþ¾eþRU¾:Óîµ;?³Ø³Ç/Û-äó#)º5YU™†àF@àƒÓ¡©Š÷¢û_òhoá’ò9 _Ãz¼¶RÙOÍú@]\\FÖůã(UAŽQå†L&T¨R0;¸_ Ö×ûÞ·×¾¾jú]Ñ»=íøtý|úîX‡Â×1ØÙ[Ù[ÝGÜFÎý/"Aæò¾L2"„è$0kEñ«í£ùÇo¿NgÙz´n·×ÿ&ݯM×ÌΗÂÚÔ`”h¦âeÊÉ9†H!Cs$›—çG&Ò§+¸€ËÇr¿gËו/º)hýn¬ôóWe»_Êîß>ÿæµ_uÒǺ¬_bItŸôô6§æÆ~Ëq¢ÉÞÜ2VA…O™’zÖ•}în_ïÛ×NߦEk¢V‹_/“æ½ÿ_=Ïøa´K­&X¬#µa¥˜o åæÌxÞAË‘‡Áç¼Ö²kšvÙÚßù5þz«¾¤ÛH·½ßÝý}ÇaY”P@~Rþ¶U'íß׬*EÊK³ýKƒ´“g/޽q é6‰£;ØœÞɥ̉QDnÙRX’X¯A×'}ùJ}jÝujþ[-<üˆ‡»hùïèïëÿæ]§ƒîÓOÔ!m I- öwÙÝ%’$>nÔ‡‚S“ÈàŸCEÊÚ½›ûœm龺zî-uèÚ·Î÷õ4|3á››/ýºîÇQŠQ4®³Çö!‰Ù•q ¥WnJ‚£E?v6o[kæï¿Ï{½wê×e¦–òÓoÓC¿¤0 € (  í+þCzçû–¿ÊJ—¸ÎgÄú¿©j·º•“ZÇöO$ÙC$[¤˜Æ|õüÀ#Üġܵ:~ãR}ÿ rþNOç¿bK™r­4ü^¿…£ýnÛm+T–k>ëGu¶·½»ž[‰%‰¢t•fÚ†,ÖAQߨæ¡Âðåþç/ÏÝ×ÓK÷òkJýÚ×™‘§x΋|’xr[È´È`µÏ“ÍÊy›¥B¬B’Jç ôæ¶æÕMiï'è½Û¯ÁÝ-ɲ¿+ÚÏçÛúèIªøSU¹7Éo¤”¾Þµ/:?ôؤVÃÛøÜœ0 ¾_¥geôJ×ó|ÉßîMß}lŠ¿ßÓËݵ¿OÇsÑ4ë+m:Î;[+xíáN‘Æ¡@$䟩$’{“VÝÙV^eŠEPu×üŒº'ûóÿè–©–Ã)ë°_A­iúµ›ê o°KoŠ’åtÞUI0A#ƒÇL½Ù?5÷[ôš@Õâ—gÓúùœï‰4SZ¹’êMÌóÛ,V/$ñÒå7ïOÍÁ £f=ÇäÇ¥8.Y|Ó¿—Uß¾›;êÁ»ÇUug§}?¯5¿VŠw>¸x.e\mw$7Ïæo@Í;OºÝ³Ÿ¼±Sü9=3JŸ¹Ëm-ìÿ‹úê´ØO[ók¿Ü×ùënú…Ïî$‚æQ¥Fnå†ù÷ïMÍ;OºÝ³Ÿ¼¶Óü9=3E?s–Ý=Ÿáñ]V›÷·óûšÿ?ÇR+ßjRÜjï%¦¥5õÀºÜÆök ÊêÛŸ‰È¨ÚI¨ÇaSVŒW¥þRMµoKÝë¿]ÛzÝÿZyýÚo¹§¬ø:57ÑØhvÓX³X檱…™ã•Œ¼1yB-ÙÁ4Ö–ºÑIéäâ–7éäJNÞ|¶ùÞúÿ™ÜÛ*­¼Jù Ø1÷x㎜qU-Þ·ì´±%!…P@P@P@ZOùÁÿ\dþi@OŽ?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕt^û×ßõÙ¿ô7¬˜Íê( € ( € ( € ( € ( € ( € ( € ( € ( € ¿ÿúäßÈÐ'gþ¦Ëþ¾eþRU¤þ Ò¤vy"vv9fk‰É'Ôþò¦À'ü!z?üðoûÿ7ÿ þ½þx7ýÿ›ÿŽPÿ^ÿ<þÿÍÿÇ(ÿ„/Gÿž ÿæÿ㔣ÿÏÿ¿óñÊ?á Ñÿçƒßù¿øåð…èÿóÁ¿ïüßür€øBôùàß÷þoþ9@ü!z?üðoûÿ7ÿ §ƒ´–Ê_lgjƒq6?1ÇÏÇ$Ÿ©4X£ÿÏÿ¿óñÊ?á Ñÿçƒßù¿øåð…èÿóÁ¿ïüßür€øBôùàß÷þoþ9@ü!z?üðoûÿ7ÿ þ½þx7ýÿ›ÿŽPÿ^ÿ<þÿÍÿÇ(ÿ„/Gÿž ÿæÿ㔣ÿÏÿ¿óñÊoü!ÚJ¿–!p®70`‘Ó??mÇó4X£ÿÏÿ¿óñÊ?á Ñÿçƒßù¿øåð…èÿóÁ¿ïüßür€øBôùàß÷þoþ9@ü!z?üðoûÿ7ÿ þ½þx7ýÿ›ÿŽPÿ^ÿ<þÿÍÿÇ(ÿ„/Gÿž ÿæÿ㔣ÿÏÿ¿óñÊkø;I‹º°;AƒòŸãî Bh°ÿ„/Gÿž ÿæÿ㔣ÿÏÿ¿óñÊ?á Ñÿçƒßù¿øåð…èÿóÁ¿ïüßür€øBôùàß÷þoþ9@ü!z?üðoûÿ7ÿ þ½þx7ýÿ›ÿŽPÿ^ÿ<þÿÍÿÇ(ÿ„/Gÿž ÿæÿ㔣ÿÏÿ¿óñÊ?á Ñÿçƒßù¿øåð…èÿóÁ¿ïüßür€øBôùàß÷þoþ9@ü!z?üðoûÿ7ÿ þ½þx7ýÿ›ÿŽPÿ^ÿ<þÿÍÿÇ(ÿ„/Gÿž ÿæÿ㔣ÿÏÿ¿óñÊ?á Ñÿçƒßù¿øåð…èÿóÁ¿ïüßür€øBôùàß÷þoþ9@ü!z?üðoûÿ7ÿ ZÊ;P‚ÖÙvÅ2m™º²¬IïëMÄøãþ<õ_û [ÿé;Vðè#{Âßñòßö ±ÿÑmQ GEáO½}ÿ]›ÿCzɌޠ€ ( € ( € ( € ( € ( € ( € ( € ( € ( ÿøñ¸ÿ®Mürvêl¿ëæ_å%PHP@P@Gß—ýÿý”P”P@P@ǸßÌP”P@P@ÿp¾¿ú  ( € ( € ( € ( € ( € ( Tÿê×ÿÚtÐŽ?ãÏUÿ°•¿þ“µo‚7¼-ÿ-ÿ`ÛýÕt^û×ßõÙ¿ô7¬˜Íê( € ( € ( € ( € ( € ( € ( € ( € ( € ¿ÿúäßÈÐ'gþ¦Ëþ¾eþRU×ù+êÿ÷ñ¿Æ¤É_Wÿ¿þ4y+êÿ÷ñ¿Æ€%}_þþ7øÐ䯫ÿ߯ÿ<•õûøßã@’¾¯ÿühòWÕÿïãJú¿ýüoñ É_Wÿ¿þ4Èâ]òòü7÷Ï ÷ ù+êÿ÷ñ¿Æ€%}_þþ7øÐ䯫ÿ߯ÿ<•õûøßã@’¾¯ÿühòWÕÿïãJú¿ýüoñ É_Wÿ¿þ4y+êÿ÷ñ¿Æ€b_=_î·ñŸQï@òWÕÿïãJú¿ýüoñ É_Wÿ¿þ4y+êÿ÷ñ¿Æ€%}_þþ7øÐ䯫ÿ߯ÿ<•õûøßã@’¾¯ÿühòWÕÿïã2h” Á¼¿Æ}G½?É_Wÿ¿þ4y+êÿ÷ñ¿Æ€%}_þþ7øÐ䯫ÿ߯ÿ<•õûøßã@’¾¯ÿühòWÕÿïãJú¿ýüoñ É_Wÿ¿þ4y+êÿ÷ñ¿Æ€%}_þþ7øÐ䯫ÿ߯ÿ<•õûøßã@’¾¯ÿühòWÕÿïãJú¿ýüoñ É_Wÿ¿þ4y+êÿ÷ñ¿Æ€%}_þþ7øÐ䯫ÿ߯ÿ<•õûøßã@’¾¯ÿüh RPºÚœ_©ÏxéÁxãþ<õ_û [ÿé;Vðè#{Âßñòßö ±ÿÑmQ GEáO½}ÿ]›ÿCzɌޠ€ ( € ( € ( € ( € ( € ( € ( € ( € ( ÿøñ¸ÿ®Mürvêl¿ëæ_å%PŸüõOûèT€yðÿÏTÿ¾…|?óÕ?ï¡@ŸüõOûèPçÃÿ=SþúyðÿÏTÿ¾…|?óÕ?ï¡@ŸüõOûèPçÃÿ=SþúyðÿÏTÿ¾…29¢.eA–ãæ‚€çÃÿ=SþúyðÿÏTÿ¾…|?óÕ?ï¡@ŸüõOûèPçÃÿ=SþúyðÿÏTÿ¾…|?óÕ?ï¡@ŸüõOûèPçÃÿ=SþúÃ4^z50¹Ü=E?χþz§ýô(óáÿž©ÿ} <øçªßB€>ùêŸ÷Рχþz§ýô(óáÿž©ÿ} <øçªßB€>ùêŸ÷Рχþz§ýô(“MA‰Sï/ñQ@óáÿž©ÿ} <øçªßB€>ùêŸ÷Рχþz§ýô(óáÿž©ÿ} <øçªßB€>ùêŸ÷Рχþz§ýô(óáÿž©ÿ} <øçªßB€>ùêŸ÷Рχþz§ýô(óáÿž©ÿ} <øçªßB€>ùêŸ÷Рχþz§ýô(óáÿž©ÿ} <øçªßB€>ùêŸ÷Рχþz§ýô(óáÿž©ÿ} <øçªßB€0µ& ­¡Rò_}ã¦ãøóÕì%oÿ¤í[àï ÇËØ6ÇÿEµD…>õ÷ývoý ë&3z€ ( € ( € ( € ( € ( € ( € ( € ( € ( /ÿãÆãþ¹7ò4ÉÙÿ©²ÿ¯™”•@vu P@P@_~_÷ÿöQ@P@P@Pmÿ þã1@P@P@PsýÁþúÿèB€$ € ( € ( € ( € ( € ( €9ýSþC©ÿ\_ÿiÓ@p>8ÿ=WþÂVÿúNÕ¼:Þð·ü|·ýƒlô[THÑxSï_×fÿÐÞ²c7¨ € ( € ( € ( € ( € ( € ( € ( € ( € ‚ÿþØç¥ûcÏJvûcÏJ,öÆÿž”Xí‡þzQ`¶ùéE„l?óÒ‹}°ÿÏJ,öÃÿ=)Xí‡þzQ`¶ùéE€>Øç¥;}°ÿÏJ,öÃÿ=(°Ûüô¢Àl?óÒ‹ >Øç¥ûaÿž”XO¨46ÓL•É´gj“Ò‹„ë ö‘Â?zcÜ_ѦéÿLñïj,,ý°ÿÏJ,0ûaÿž”Xí‡þzQ`¶ŸùéE€>Úç¥ûiÿž”Xí§þzQ`¶ùéJÀl?óÒ‹}°ÿÏJ,öÃÿ=(°ÛþzS°ÛþzQ`¶7üô¢Àl?óÒ‹}°ÿÏJ, ûaÿž”Xí‡þzQ`¶ùéJÀl?óÒ‹}°ÿÏJ,öÃÿ=(°@Lڤ͜ÿ£EÏüZ{sʤåPu¥Ñ¶°–8Z8æig*Λ€o5À$28é‘õ§k‡àŸÜßµÞ“¬ª6©¦“OÍ Ã `G Þªqß`…I ¹ ¨a@=Ðvýð ;ÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰:/ }ëïúìßúÖLfõP@P@P@P@P@P@P@P@P@_ÿÇÇýroäh“³ÿSeÿ_2ÿ)*€¯yko{§ ûi$ˆÀËBäeT‚¨È úW¥„;D‚ ÚÎÚ!vðÚ…¼R;?Ó§aF–°²i¬´ë[Yb™d‰`ˆ\rìzŒŽ„P¬¿kùçqÿ~_ü)èö·ÿžw÷åÿÂ>ÖÿóÎãþü¿øQ ÚßþyÜß—ÿ 4û[ÿÏ;ûòÿáF€kùçqÿ~_ü(Ðíoÿ<î?ïËÿ…}­ÿçÇýùð£@µ¿üó¸ÿ¿/þhö·ÿžw÷åÿÂ>ÖÿóÎãþü¿øQ ÚßþyÜ߇ÿ 4û[ÿÏ;ûðÿáF€kùçqÿ~ü(Ðíoÿ<î?ïÃÿ…}­ÿçÇýùð£@µ¿üó¸ÿ¿/þhö·ÿžw÷åÿÂ>ÖÿóÎãþü¿øQ ÚßþyÜß—ÿ 4û[ÿÏ;ûòÿáF€6Kƒ$oErUÔ«%ÆA#¥Àê$ó<«­Û·dÅ'\±ÏOößó£@±/ÚßþyÜß—ÿ 4û[ÿÏ;ûòÿáF€kùçqÿ~_ü(Ðíoÿ<î?ïËÿ…}­ÿçÇýùð£@µ¿üó¸ÿ¿/þhö·ÿžw÷åÿÂ>ÖÿóÎãþü¿øQ ÚßþyÜß—ÿ 4û[ÿÏ;ûòÿáF€kùçqÿ~_ü(Ðíoÿ<î?ïËÿ…}­ÿçÇýùð£@µ¿üó¸ÿ¿/þhö·ÿžw÷åÿÂ>ÖÿóÎãþü¿øQ ÚßþyÜß—ÿ 4û[ÿÏ;ûòÿáF€kùçqÿ~ü(Ðíoÿ<î?ïÃÿ…}­ÿçÇýøð£@µ¿üó¸ÿ¿þh¦2ù²M(dS Þ¥I!¤'޽T05>Óüô‘¥a‡Ú`ÿžƒò4Xb÷k‰`uœÒ‚cGèÒ;G0äƒî*ÐŒýL²Ñ4øì¬!™"NI0>çnìÇo$ÿõº dß#•e}¢@`á¤V¸#ŠœwŽ?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕt^û×ßõÙ¿ô7¬˜Íê( € ( € ( € ( € ( € ( € ( € ( € ( € ¿ÿúäßÈÐ'gþ¦Ëþ¾eþRUÕýŠßþyÿãÆ¦àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àb·ÿžøñ¢àA,FH:ñ’}¿½&ìhÞ݈vàãæ 3ïÖ—3U®ölBç?ÝÍ;è—ö66ïqyä[@˜Ý$²ìUÉÇ$œië°É|Ø¿çÝï£NÌE-ìÝhÐ]\Ä$¯.pH X>€I\dñê2ÜMmóÛíóbYrÑädnÈÈéš:^ú m ¸¼c¡Mäù)q'žå!ÙipÞn1—\/̃#ç/#ži¤ÛI^½·ëú0—»{ôÓóûö{^l_óî¿÷Ñ¢Ì-Ý«Nð*DeC4bC¹AÎ àÈÒÔ6ÓŠY PÉùš”Ÿ*m½†•Ý‘•ý¥õœ7v±+Á:,‘¶XnR2=*åEÙ‰4ö%óbÿŸuÿ¾+0*¾¯¦Çs±òŒÒÊaTWf!Â*qÐíç½E%w·¯Üìÿz]Ë^l_óî¿÷ѧfæÅÿ>ëÿ},À<Ø¿çÝï£E˜®®Êë:]¬q"Gpòùœ’X,L@öçð¤î†&©¯èšAŒj×v\ìûMЋ~:ãqê(¾¶¸[K—Rx$Et…Xd0rA½iµ$ìÄšjè_6/ù÷_ûèÑf'»µ¶…æ¸H¡Š0YÝä*ªRI< ZŒyš¹0 œî?ãCÑ]±-v!·Ôl.N-¼ÇbÉû¹w|­Áèpp{àÓ´hMæÅÿ>ëÿ},À<Ø¿çÝï£E˜›üû¯ýôh³óbÿŸuÿ¾`l_óî¿÷Ñ¢Ì su8J®ÑäÉÀ>éLÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰:/ }ëïúìßúÖLfõP@P@P@P@P@P@P@P@P@_ÿÇÇýroäh“³ÿSeÿ_2ÿ)*€ìê@( € ( € ( € ( € ( € ( €)Ü¢™™œãä§aéRÀ«I»a¸;Ng`ÒÐR¿m ^ç=W={õªèÀã|sg}«}‡K³°Žî ¦¹ÊÐűW ¥Â6 fR?€Ò”\›[Y?½éù_ÓO"Ô¹UÖ÷_†¿¢_2 _Þ¦•§Øê¶7k{$҈ϖZ& ÷Ž3¿ï/ŒšÚ¤Ô¯Q.‰Û×uò¡”#ÉhyÛåÑý߉Ã'³<ðÓôÿ®ÏY^×eœf“a­¦®5í0Á¶—ÜgΡ²ð—P‹å•UÙÇ– L¢Õ)S{òßþÞWoïæ~¶¶¥_÷Šk£ü4_¢6ý+[øZî×OÒ¦Ó"Õ"Ô Ðe1ﻟ\b-¨UŸhç?!œr08Ú«´ª8íîý×wõÓæºY‘Ÿ*—vI§¦¡–fÔ5»=î"û\QØßÁ[þÁ¶?ú-ª$è¼)÷¯¿ë³èoY1›ÔP@P@P@P@P@P@P@P@P@Aÿ7õÉ¿‘ NÏýM—ý|Ëü¤ª¬i™N:ãÑúõ‰u¸¨†èvñüé\­ÔŒ¡€L‘Áÿ´´¿h—Ñ?#þ4ìö‰}ò?ãE€>Ñ/¢~Güh°Ú%ôOÈÿûD¾‰ùñ¢Àh—Ñ?#þ4Xíú'䯋}¢_DüøÑ`´K蟑ÿ,ö‰}ò?ãE€>Ñ/¢~Güh°Ú%ôOÈÿûD¾‰ùñ¢Àh—Ñ?#þ4Xíú'䯋}¢_DüøÑ`´K蟑ÿ,ö‰}ò?ãE€>Ñ/¢~Güh°32œg—ÿ¯PôÑwÀ ðyÈ_þ½+Fîy îöí$p ûwÍ;\|É¿ç±ÿ¿iÿÄÑʃHm˜E$‘Ë!XÕâ*­–!G$:ã8àtíUË¥€§7†® @ÓkWQ©e@^õ@ÜÄ꺒@¤Ò׸jz%Ö™f×wž¢ÐÆFÿ.éK œ Ï$w¡'Ü £ðµÌ0¤ê·QGv¢Ü¨,Xô‹Ôš-`þ«¿ú ^àXÿãTY€Â5wÿA‹Ïü üj‹0øF®ÿè1yÿcÿQfÿÕßý/?ð,ñª,À?á»ÿ Åçþþ5E˜ “ÂsHñ¼š¥Ë¼Mº6k•%Èý×ÄÑfµÿð]ÿÐbóÿÇÿ¢Ìþ«¿ú ^àXÿãTY€Â5wÿA‹Ïü üj‹0øF®ÿè1yÿcÿQfÿÕßý/?ð,ñª,ÀAá{R ƒ˜Ç÷…4¼ÀŸþ§ÿ Þ«ÿSÿ‰§a\?áú ê¿÷õ?øš,øFŸþƒz¯ýýOþ&‹Èm¼;wr$:¦ #Y½Ò‚v’¤àFqÈ=êZk¨ÇAá««ˆRh5«©b‘C£¥ê•e# ‚"ä>`ÑÍo¼®ñ¤ÈÍ+†mÁÔ@p8ÅVÀr^8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÑxSï_×fÿÐÞ²c7¨ € ( € ( € ( € ( € ( € ( € ( € ( € ‚ÿþRíBFïHe›4Òëÿ*Ò;!yb¨Ëyb€,PåŠ<±@–(òÅX Ëyb€,PåŠ<±@–(òÅX Ëyb€+ÜEa•dc9àv¬Þàg؆TrX˜Õºóþ}äc¤ÿ]/ýtýÖ‘ØBU Ïü°ÿ¯˜ôbÐãG¹›ÄzeÖµ —þÔ hT‘Ç…i“ ÉÀÇ®1θÙÕk×oq¡_#t‡ÿ"%U¬#Vâì-Ä«ÇG_zIhl£ó¢Àl£ó¢Àl£ó¢Àl£ó¢Àl£ó¢Àl£ó¢Àlß;»Ãö+‘æÎwm8Æ;çX ¿m˜ÞÞLSÎ'v6î¸ý0cÿÇh°‹ßl£ó¢Ã¶QùÓ°Û¨üéXíƒÔ~tXíƒÔ~tXíƒÔ~tXíƒÔ~tXíƒÔ~tXÛ8ŸQ¶>‘Oüâ¤ôSˆX ËÏ\\¤6E<~l ×d{7ï_6L¸;²;cš¤®#“øm-ý­½Ü m´)ܽ…¥Áß$jNKÙOP§>¹îˆ΢/ùŸ÷î¿ôp©ŽñÇüyê¿ö·ÿÒv­¡ÐF÷…¿ãå¿ìcÿ¢Ú¢@M/Qm1îCZM&ùXðŒnb9ç­f2÷ü$‡þóÿßÿÄÒ°ü$‡þóÿßÿÄÑ`øIýçÿ¾ÿ‰¢Àð’úÏÿ|?ÿE€?á$?ôŸþøþ&‹ÂHè?ýðÿüMÿ„ÿÐ>ûáÿøš,ÿ !ÿ |ÿ÷Ãÿñ4XþCÿ@ùÿï‡ÿâh°ü$‡þóÿßÿÄÑ`øIýçÿ¾ÿ‰¢Àð’úÏÿ|?ÿE€?á$?ôŸþøþ&‹ÂHè?ýðÿüMÿ„ÿÐ>ûáÿøš,ÿ !ÿ |ÿ÷Ãÿñ4XþCÿ@ùÿï‡ÿâh°ü$‡þóÿßÿÄÑ`øIýçÿ¾ÿ‰¢Àð’úÏÿ|?ÿE€?á$?ôŸþøþ&‹ÂHè?ýðÿüMÿ„ÿÐ>ûáÿøš,ÿ !ÿ |ÿ÷Ãÿñ4XþCÿ@ùÿï‡ÿâh°ü$‡þóÿßÿÄÑ`øIýçÿ¾ÿ‰¢Àð’úÏÿ|?ÿE€?á$?ôŸþøþ&‹ÂHè?ýðÿüMÿ„ÿÐ>ûáÿøš,ÿ !ÿ |ÿ÷Ãÿñ4XþCÿ@ùÿï‡ÿâh°ü$‡þóÿßÿÄÑ`øIýçÿ¾ÿ‰¢Àð’úÏÿ|?ÿE€eLj ÐIØg]êW;Œ÷h°¶û£µ´wŽPy߃Œg¸üꀾú ,H¹õ¶—?¦*9@DÔ¸&6ãÒÖ\þ¹£” ãÖ’4TXe  þ'OÊ©+ïíÑÿ<¥ÿÀy?˜öèÿžRÿà<Ÿá@öèÿžRÿà<Ÿá@öèÿžRÿà<Ÿá@öèÿžRÿà<Ÿá@öèÿžRÿà<Ÿá@öèÿžRÿà<Ÿá@öèÿžRÿà<Ÿá@öèÿžRÿà<Ÿá@öèÿžRÿà<Ÿá@öèÿžRÿà<Ÿá@öèÿžRÿà<Ÿá@öèÿžRÿà<Ÿá@öèÿžRÿà<Ÿá@öèÿžRÿà<Ÿá@öèÿžRÿà<Ÿá@öèÿžRÿà<Ÿá@öèÿžRÿà<Ÿá@öèÿžRÿà<Ÿá@Kª‡rÂ7çÖÚ_銇ý§Ï1ÿn³ #_BX—$“û‡êà5IXûl_ÜŸÿäÿ `2{˜ä 'FVWVû;œ2FF9€*忾ð _ñªæ†Ê‚x^ ä“Éâ;9ˆ‚sŽ@íG0X|¯,’»™ß,I?è2QÌûÏùîÿø'øÑÌÞÏwÿÀ?ÆŽ`°~óþ{¿þÉþ4sƒ÷ŸóÝÿðOñ£˜,¼ÿžïÿ€2Á`ýçü÷ü“ühæ ï?ç»ÿà ŸãG0X?yÿ=ßÿdÿ9‚ÁûÏùîÿø'øÑÌÞÏwÿÀ?ÆŽ`°~óþ{¿þÉþ4sƒ÷ŸóÝÿðOñ£˜,¼ÿžïÿ€2Á`ýçü÷ü“ühæ ï?ç»ÿà ŸãG0X?yÿ=ßÿdÿ9‚ÁûÏùîÿø'øÑÌ-é÷_d”I!–FPʸµ‘@ ·=÷E&î3CûtÏ)ðOð¤ýº?甿ø'øPýº?甿ø'øPL²‘Š;„,Ì¡¬å$nbÇ‘Žì{U'aXf[ûçÿ¥ÿ9‚Äö§uÜdy¬BJÒ;DÈ73«dz犑œŽ?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕjú $¯(!Ý@Iˆ=*,vjÁË­Ä`9UÍÓÀó`7$Žyâ€ö(¿¿?þIþ4}Š/ïÏÿb‹ûóÿàDŸã@Ø¢þüÿø'øÐw0­­´³Äóo‰ Ò³œN(íP@P@P@P@P@P@P@P@P@P@P@P@P@ă3<@ý Š  ( € ( € ( € ( € ( € ( € ( € ( €8Çž«ÿa+ý'jÚox[þ>[þÁ¶?ú-ª$ØÓÿÔ7ýv—ÿCj’[&Å”ù-ó3e¤ÜÒp£wS´q€8éÓš@KL€ (¶¥ÿ ë¯úâÿÈК( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ()úÁÿ_ÿèÅ  h € ( € ( € ( € ( € ( € ( € ( €8Çž«ÿa+ý'jÚkhÖ–W?é—P[ïÓlvù²݈ÎqŸ­L“`;kJXX6§f§Íàν ±ê9_a’G«è±òõ+ ]˱7@’H¹à`r°ý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀA¨kZSØ\ªjvlÆ& Ô’p}èå}€ŸûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`íÍ'þ‚–_øŸãG+ìý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`íÍ'þ‚–_øŸãG+ìý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`íÍ'þ‚–_øŸãG+ìý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`íÍ'þ‚–_øŸãG+ìý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`íÍ'þ‚–_øŸãG+ìý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`íÍ'þ‚–_øŸãG+ìý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`íÍ'þ‚–_øŸãG+ìý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•ö9µ­(˜q©ÙO?¿N‘I=hå}€“ûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`íÍ'þ‚–_øŸãG+ìý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`íÍ'þ‚–_øŸãG+ìý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`íÍ'þ‚–_øŸãG+ìý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`íÍ'þ‚–_øŸãG+ìý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾Àq~1ž;T–ÞTš&Ô­ðèÁ”ÿ£°ê+Xéaqx§WŠâY ),kºÖ&!TJäðW*ïøK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr øK5ùëmÿ€Pÿñr +ê:ö£¨Ú‹k¹b0‡mH#æ€rª;1üé¤ÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/new-repository-folders.png000066400000000000000000001203241203611042400336170ustar00rootroot00000000000000‰PNG  IHDRL³âÝ%'sBIT|dˆ pHYsttk$³Ö%tEXtSoftwareMacromedia Fireworks MX 2004‡v¬Ï tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ ñprVWxœíY[vÛ6mBt’KÉ-E8/±iþõÝíè»ÛÑfº€í¥;¨zï (Ǧb9ªìöœb( œ÷`ýñ×ïšß̯{Ân¿ßî÷Ö»Ý~·ÝïÐ^ï·Ûýv³ß®Ù¹w»ín·ÙíÖ¬·ÛÝv³Ã„­Áv Kîívƒk»Ùl¶»i—,e¬ŒPÑNX[`?Õ¢££áÕbœSþ{J*Õ»Ô¤äçy\cNVgêi6ö[]E}K]}7Ú¢“1Ï<« ÿÞKùâÑ«„«è$Š•ªg(U±ŠÊ©Ï<Ö$ݹƉùÂÓ°¦ÃE[È›ë¢iŽñ¯’Sß¶_D­V®,Š}å*Fö`žz~"D?›e3±¶y³ð9ÐÕ¥Q/ô³¢™Û#üףϨ›D·ŽÂôÊoéT ±/¹º¸-Àˆ0ÁÏàϽ/œpUå`¿s¢/ÑÊë¥<úr=F9 ¯1ªRË*ŽH¦í¢j¬F>X8õÐ43±;„þÚÔÄK©ŒúÿÎGSQ çfd3JfŒn¥ÄØáîm3;X£››Hf-ñB…F2œŸê?B­òÑæóáèÜzÚ¬õî'òÏj”àjæ}>äYiM™–Y^š¼B˜ÂôkçÃ_•óW+¿Ã éå:¼B~^\Oø‡B2cÑø¡xƒéL‘ÝÊÜ,Fêì°ÎÝWœâóÃë´ÛEìî~b~?þ%þ yÅõ-¯b  »ö?lˆ,œYy2Á5櫓lQÍ;ŽŒ÷XOü9váÚpɘîÅ7è¾ì¼>¹ˆÆ nÚ.hî¢]ÜÅÝÃõœøñ8ÿ´r4š›ÛL4P³d< "FRb«‚* ˜8×¹£…j-¾„E0.†1èojc#ó°‚:Æv‰=ð]6šÛ£7¢G³žÃ…AS´²ÂaèÞé¨(÷m´Ìsð{j˜P\Ýbx ºA° þ< ¿ ÃÇ· iX‘&RÇB¨û¼¿üîVÑ#ÁêêNòQ2Ýß­dæÏ˜„9èêïž%ÿéþ3/%úƒ½‹ã½$›T½&RS©VR-¸:²¬.~V¡¹ìÇ9\qÿ}øœ=žpY8f b…ÙŒ^hÚeGc"þø=Ò˜öÊ7 c–íÅm'«Î…cù÷¡á¬ñ‹¢h¬†øøùáû#YóÙðuþ3:¡kæT@ŒI.ÆæË‰ÿ ü¯OàWË·%j+aúáÖÿE}¾@Žœ?<Ü6l‡w5ó 1þ ‰@¼†¸­Çïâs˜ðß?røwYHᑬ› »ú <Ë÷y'Õeð?ꨰå»h¾oŒÑ-Ýh2Dщ>œƒþ´þluÖÛOÂþ?bf‘¿X>%~x!š¹7C½ãõø3Épg¾Xx#Éã@Ó|iüš}"ç4ö¶h M*cì.´œô~º˜ _²Œ¹_ÂIÿa8¥dƒ†ñ×ff<,9/Ð};~ìè¯üߢ£ö/‡þ¤ÿça‰hÁà †úËp2þ2ô0þrÌLü¢z=ü/ Oà>íÁxpqôOø¿œM!ò1ÿ 1<@x±ø{ðìñ<„)Š…-ÒãÞżà‰üSŽQÞ4…×Céñ=‘pŠ'÷¿é?4—„Óûÿ ÃØÿþŸøã‘Õ+GÎ_݃Ӽއ>È?¿/Ó79ÿJ A‚ $H A‚ $H A‚ $H A‚ $HðÏàoˆ`*³;éáÜHmkBFúÞÊþ)¤3¡hmkTSxœí]ÝSÛÈ–×ν™ „dfköa_¨ÚÚÚ§ÉÕ·íGŒ101à±MBæ%%ËVâ¹|Íd]þß÷œÓݲÔjÉ’16ä ZVKêîß9}¾ú´|ø¦~;nvvFccÒùíh4¶Ýaàæä´µŒõÉ{V¼;hcË2'û½`lTj“ÎnÎT^Wjø3étOðõ=xR@?“v«u;®·áÏÎvïj¬­i}Í×>hmm¨ÃÑH;›BÍ:ÔœC¡ýµ#í/¸âlÒi÷¡éú6ô ‹îhl «“zã€Z:<„– €ÓÞ¤ÞÝ¥‹ºMªëîSQoÑÉú*vŽøv›ô¹Ó£‹šuúÔìPqÄNvÛ£qÍÔ{¬²ÇžÞë²FÙóXq°½<Â^铯±1W¡0ñ1c‹Š&œ4¡0Yaa1Ʌ̨Ѷ´m8{ Ÿ£3(=í jËÄ̸#fÆ}aöŒc¶§]._´OPw­ 3±±6à lt%6¾ÃFÏÀƯ2l,³0:†Íàñ<ƒ§Êà©2xª“nûwh¥?évyÙ>ÔNðƒ|¾âîhÀ\#°0]ôÊ(˜ð`BÓt²Ðôr )qZš§y‹¡ë* ì¶ë¬¦ËÊ(¤?pHë4GšÏ}Áí˜ðâ–Ö£87˜9k•X½ØykùsÎ[¯è¼MÃh#Q jÏç™·2:¹xíq ³ç/i2ÎN©V@KÀF¿l^$°¹ãìZ°±<„„HoBŸhôqŒ"51$³02¨2ŽÒK%J â¦>¨ÂìÙöPq2ŽÓ¦'>ÿŠc´r‰”ÅICÈa9wšoûPzÚ­öõQj|#n‹: &‡Áä1˜<“ÚÒÌ;ázÀF#0Ü넳>áÖBœ.À4º^¢Ñ˜i‚ûöœv‘ΠÑ4:ƒFgÐè =͇fã4|þÞ H 8@ù4’4‚k3€¨~&@U; òí" î¨ûM†É²B6CÈf’5æñá0È]E0~sØë/`²æøe#©œƒÙ@5¥ÙÏrže( ¹ÏsƒiÖò¹ÉÁ܆;£ÌÇ0ÜðUšµÈ”ŸáøB»ÈÐðikX¹ÍQC·‹Ï[GgH’@@$ƒ,ï9>sÍjn,­*÷£-cP»ì ]0èª>Cn¸ ³BÏ2+Ì9…]>Èæè7˜§#¼*í0€Œ¾Ä["ú§3Œü¬‰Šl1›·H Fpr¹R ¦º ’¼NÔy'hjû4AÏ3Ų̀-–Ïl¸>ûžcôtÁµŠÄb’Õ‘‹Á[cø˜+LJâ{D­'„þ³¯OäëøÀ1^6Ü´CzE~¶/áe˜¾1IàWüâ,eóX©Ç1³vnÝ9ÿ¤¬‹È)W5Å‘l“𿞽$!Ø94g 4'Ú9 e’l’Åãˆðu…5‚™%â‘ev‰8è†øi<ÜZ^Ò3ý bçÂø¹e‚7#Àå_(ÀÀÕf²ÒÈÆlY-i¥$:ß,>ÇCóØ1t Ã|ØÃÜ¢1d<3P:¯;¤A¾’.Ç7‹»fä"Ì“Í3‘Í*·RÈ)ɉ–eªÐrZ.CËeS™ @<èÒTFÓÙ/€ãÓÐZñ´?f„Fª ÅC‘L´Šú]Q´ŠŒÅ”0âš âhfàèð0˜U,DRãHrÆs9ç¹v˜áÊœ3PGžÒ™²GËþöG‘Yœ‹+óYÏj¶¤ÉŒŠº¿pùG †æ°²Õ4L÷¤³§MJDÀeºÆêáK`Ò-í µË< [`Ãæ ɨM¡Ynb ¾."2鿣»§1Ž<_ì²UΘ‹¾˜dŽXvëÉô„|Œ¶O>Ë'î»|"[ñR™œ@J•沓L'd£Ò#‹'oÅ»WðòC%–"Z!Dé³Rvé|etÏÌðè¦fßþɽ1ZTULÁzFuÃó{Žç±"E­Nkè”ÌZðæ]ZF™? 8KRÀBa‡„h”P¿F£ÏÒ ‡Ï¬2 Aú`›Ôá‰)0¨l,É隉᫆hWãR}—Öy<¾ª‘­#<¥’R´÷3X¾Ç@59¨¾)y!nI3g†©É`­r\« XŸ§kùX¿*[5xÐÉÄ£Nx Ìðv‡kîNG8‚ݤS£"ųÐý[üÖ ü’#¢ŸN±(mnQÚ {ËgØSiQIH3•H“G€‰Ñ;Œñó»Â{M–'¦¢\å±Dè_,IÞð®KR\b8’ĈËZTõ®‘®kWg¡%Iš³%ÅOjO›/Zå“¿•9åo. ‰;@'­¤p8í~LüÚ*ñ+à”å„Ã×A¾ e|iŠÙêh·ÃE3ÿŒ@R$?ç@¿£ù>äá JðœË)2«ÊЙî³8ƒ}"KÄ5Ðì¿“Od©|"JéLKú,cK>àó>ˆÏûÀ[¡pWkTm$˜*™=Õ_¡3)¯ægÅ|)3Ò2thÓçKy(ÀŒÂ% •é¶;EÙ”YÜax7"§RtŽ#òUgÓ^JF±×?ÚgIùc~÷¹àÂn&P!l86CØó©W€M]%¼º ^>š'_BÌôx†¼É§:•• 2—c&3f:hOµh N¶2·T‚QZjU:˜–ž_÷“'±êÛ³o¡&—oÈÕ„;°ØÓ>à#1íƒmaWFÁ˜Ì%ȇéÔLú'¨x”|6²Î¼ °æ8S槪À"(~%²x¾ÉÏ7Ùyò¦Dš‰Qá“»ÂÀ*°Ýg:¿Ÿ¾'<³•O\çZ6xæÙ÷µ¯Ì“L$¥òI³8ÓÄñHÄpì&"qéð‰åî&Úœ*ðúv̱ˆ;”‰MkUŒ]m°sø,3úUµ…Yã’_«¨¹SfìˆÐo}Ê„"œ’Ov€“"¿!gGñ¡šùD«áœ&r,džtç ›ùcs¡·Üâ«?B‹ÏÚ‹µ/lÈý¤ 9 :!áü57gmõ0”:'_F£ˆÔ9ùž83b^̬¹,Í$]UD›ö™ÙS0ZÂŒí,ZR:3ÑK¬ïXÊèF­.Ji¨Ž×IËŽ¾Zª¦³¼pVâó9ê7’JGÔ+“–’%9 üç¡¿sAÆÑ'ž'ndóì⸕<˃¤Ueâz¯ÄÍ"4®ej§›4+g!¸Að/r½·È7*Œ!%[HÁ q´gçsï‡Fë;‡Ä$wǯ(–ÉiQNˆîhsCdЈҗ#u³¨ð3§Â[Š0ù´íçŠ6[£ƽ¯[SS\œ°¯¼Œ­”&qÆöãH’²Ä.(åž½Å7(@I²„“‡¯0€'擵"¡©j<2UЂx bi9’l*Et_9â*%7Xìs£½(í·>Å Xt)Þ»¹`Ì6|¥‹j U¶«±TÈ^…vþ%P]‹šÃ`È…¥fFìOmp ó‡ëeë_‰ ˜ÔpE‰ûñ“f«q;nFwál—v£È¥€=¢|&¨ORk8´M6´&›MÆÍ]Ò9ÍNƒ.étXÝ>+N±˜4£¾ëßn¯Ô¥hÍIjÍ|]2Y— Ø {ô úã‡/ pÝqyŸÂUh9ù|EùÎ×þ­/^WÑÜ{ Àí°‡Àñ^_ÅÒd¯XÑég©2Dÿ Ö½Ç:ýîÏ1æ|„¨ÂŸf4c!àyY#ŠýÞÐøeºu8zIVŠÖÌG7‹ÑÍ*éV„n›œn@ƇÑbôä£D½ÍFªkNr\3E=FQ¯¤hŠ®‡3×ÐóˆšAd@ÔdÔÍG9›QÎ.)7Ï\d¸&oåRà%ÍEõ5'9®¹“t5Œ’¤EH:µ­j µ†%µæq¶ÛÓ sh㯇Öa´î$£n>ÊŒrA¬c! µ¾Ö R|¢¸Hål#ן̨Ÿ¯“ôbÙ0"ˆ6fì“ûdÇ>õð©“ɰK6ÍfÓ;Â2…j@¢÷Y½ÊP¾ç¬  uP‡v/Ôi­i&ï°fÕý©ézßÌ Mžç¬ š1hö(÷¯M‚dåœþÚ™ö ÿ§v[5ûî«‘UÁ»ÆáíÒË¡nIO!uU½©Y5à‹øhͪ¨µMü×Ú!}§oõx­+*]ú‰WVÂ[CüU‚PÕñ7I¬Ç×ýU±Á³ ¾ð¥|çßçY¬ b|3Z¹å´Ã¦'Wº“Ô)£¿®N›:ŸDwrñÁÃíûªE-æ5]PîµvÌ÷%~œ­Ìšî9µ”ÁUüܪ:ßsVÒˈ±ú‡ë¥÷”µÌòifh$¡S•Ê"CÃÃûjdU¿’Ž@;K鿞v¢sÔKÿ €êxeM¾3æ7´*¨79ÔXÓÇx'åC'AVÊO]·ª²œêQ‘5¯’¦G9Ý š¼µ’q«!÷(—øÐÝ_µ5ˆ5_ȈZƒ¶ª7µŠíÒ°Â ÐT}GR†a­ë›CÃUd úþ IÊÕtaÕºf—vÅPZ"% †^Ь9jê–Ÿ°qB&7úµŠÑOcrch¶“Âä®7ôu#É“6ä嚣ºû«ŽD^z u3 õ¤o2EÝ„µÂáºrè$‚$ÞX Òd §™rð/·­þ€»¿ˆàïn³q;ÞmFÖ5‡Ä”–Œs¿oé §b]l&&{Úõd·Ý½7vvñϨÿ€Vo’c?¤èÛ%¾ÃgÚW½8ã3ú b»K8·«´Õ}À¸þˆíÉ›4vÞ’Ÿ8íÑV¤O“HË/bÏ8&e%Fü»QØ“þÎ}ÌaìÞg±{éõ?ZƒßóßÚX«P­«ð«k¦ö ûpðÜ€¾¯ ç*P£Ó¯CWVà¯5øikum:@ä+*>Þâ¿izìÊõÈ•ï(üZûįý{»úyäj‘6uɦmxOEs¤{vá©ànÑk!h§3””[Ò§çô-‰Êâ[±Î龫ð+vǽØë ø#íz¹…éKÁüµ*妜þFÔ±šÞö0r½%| zsF†Çp^D®<¤tÐkþE #2YÄ]†tÛ&›MSËïzªýàpΉ·»I»úÿäÑGœƒÄýkp¿ùµ´@ÂrŸfaö‚ȯü„gô„3>—UýÜ-ÝÙ¥=¶…êÎHÏsš}5p ÈæÜ¬±'9¢K¼ü'P¢¯ý/›åüÞ'Ð[´o®¡NT»¦ùÓ%λNåŒWbW ¿ò2•cå;×Â;åyMW¢ˆžC:w(‡ëc)Kéü Kg§”Î¥t~DÒy-”Î7DäüRB—úÛ•Ðn)¡K ý%tPã/ )%t)¡¿a -ËÚRB—ú!K蓚_OIdûòÙRf—2ûÛ•Ùf)³K™ýˆdö:—Ù¿Ó øÚþ<\ÊèRF»2Ú.et)£‘Œ‘ˆŒ.%t)¡¿a m•º”ÐNB+øiÅ™wÓýkHg£”Î@:—™w¥t~ŒÒyÙ™w¥t.¥s™yWJçR:gIçUfÞ•º”Ðeæ])¡K GB¯"ó®”Ð¥„.3ïJ ]Jè, ý°2ïJ™]Êì2ó®”Ù¥ÌΒ٫ͼ+et)£ËÌ»RF—2:Oäc™w¥„.%t™yWJèRB€'_FP _PÍ$ôô‹6>Ä®Z–´=ÜŠµ¾D«êOø|Òçêÿ…è>¡‘náß‚¼²6¢àô«¥r„ªåbtG9aC}@TgºÍ€~: ?¤JÒuÒµßþëÄ5I‹\¥.ɾúÀçäøüQë§R<~Ï'Î7ñ»þ-; 5 κÎÙÒóÈõù[YƒzDþ3ü•Ÿoäý0ÕûÉýô®ü£Oo)môÙ­È£>?>ú—)£ÿ¨‰ï\K³yÓïTõoS¬_(‘ÈÓÚ³ÉvdMH_cß©îŒã´‡ñûTý{®@#»µM%³[Z!!·a<éü êoÈóÚŠJË¥­@©[¿‹”6B)m—Rº”Ò¥”.¥ô£—Ò¯´}úºê€×‡±±’¯ØúË´©óôä.¾Õ ô­Ì;øVë@ûól¿gmr$yî|IÚâþÛÜqF×ú‚Ο¨ã¤«óàv[ãr=¸dËwá®aÈ]Ö¸‹t'a¡È¿šìµнvïv|ÚÚÁ/i}ÏŠÉôœé8ì,$Ÿ‰+n‹|æÆT®/ô¹Ï„”\èSWÅÝßGw7.‰¯ãmµvQ‡Ùù¬qk9ÕUX»zNkwUدOÏ@-Ãøli1lUÛq«ç>cØ’.6E¨}Š\{´~]“bØ(­¼Ø7­RÆÜP¢ã“ÔµBU,ù) ÷…Öù˯¡”\ç]‹¬e¢vÄ­°ÍŸÀSq×ð0¤òKƒ;ˆ·¸Ç· Ïü‚+K¢øì~£ Î? þ"=²W|(mÊcŒÎD‡Öòe)Ü×LLReÐ=çY,aY~¿ºíbè”ý¡ B:€c'²î¨ú8Kòzý÷…þßÕE†ýôórðž¶Wcêòßì0²"ì¨ù"+ËÂx“2™p7ÚÒ[¢v©ökvŠê ¤…E+Æ6I“žÒƦµ(‡t"Žs ®Fö/R' jø÷G‹ÈS$tĨ…O}©ô¾ƒÆuÍO©wÿJO;‹i«ïïfpÂZˆû!{¹´l:UËw™æ£š/µ=èÍ ùÅ#Z^Í,œÝ»Ä›õ0ÞlÝ&ÿNQ¨h£œ/fÄM˜Yð#<í5i¿ô_w%TßÐ~×ðÍ1ŸWDíôö‹Q¹Æw¥ gå†Q“fîXéÃÝ¿å’߇rHvù€lB‹ì¼eÈÛ—p qQYûJyç¼rv“p´Uiܬ>ã𪒥îu¡ë™§m“Hã¤YàŒ¹q©Ò^ÂC»xE´žÆ.£\Ï8û{)Iž´{ZÚ.%™žòŒµKÊ×=wTžÐnQ³fK-“#fõâ.úØ~hú8fGÝÄÆýV8®h_ë"ôIÖóU²Ç‘øîçŒû¯³òâspž|v9œ&·ZŒ³|âô`1»‘ù³lCÒŸ­¬ØÒS£¾?»tk;½ýb”ÀQ“þ;<ÂZ#K ’˜ã"»tu”x\hl‡ Â6Ù [Óš%Û_iíÇm®ú툫òÉÙô%tÊôíS<È'Y¤·}n©ã_‡ö¨ˆÜa´×†dõ¡=‘¤ª¿7¼ ×ñV´‚÷Tc;ÊââbWù>õåbi±¦åçƒ/{¿X<«{ño˜q÷ÌÞ1fHwÌÚ1†}Ñlv9G£Ü3Æ2OÊ=cßΞ±ªÄ}ùwM¨¥°xó×IP´q—µÂYJâEHââ{wï_'ßRÊâR{²8ÿ6yå´²üúY'låW8¶ù¨1ß|7”ЇÔ’KÎoK¶\LÞâúŸAqÇ*ßÐ>Ç~,jàR‚E1IüË>c9 sËñU‹Ðä…Çí¢Øârc‡Ù½X6­0_èáÑ*ªG1âÎ$Ð2é”ÕƒåÒ¨F+ƒË¡ÑO”¹4â±®.à:âG¨gQG©ôÃ4Óf©´I¶{©*”Q¡ üë’éPœþ)29ìI&ííÞí¸¾Óƒ@§ŸI“}ªÑϤÙ)÷ÅvÙûþ‚ƒP _á$µ¦Ó8î¡•^}„Ån“Šîáhl§ÞhlLš]Òé°º}Vœb1éÖoǬá' Z™h;‡á¼¹¿kÃ5U}²ÏË^÷wxŒ©w£è4FãJ0°ŠÇ÷N›‹yÐd÷´};nöp;­í¤½M ·Ž°ëm¬‚‡µ{ü#aL¶Û-Vt©ØÞaEƒŠ.ùµýÛhì`ÙeYÑFÌöšXüÚÅk<(wÙÇ>î×npmµéqÝ~juO°h°¢Õ%èÞSoZÝ.Žb¿wˆ7ì÷zWâý‹Cš-RI™‰“Ó&uçôúÚëöÙXœ6¶±8:´oÇðg4v'T¬0X¡K”M¼8Ä™PœÛÛnÑóÛïè’Ã#¸äð¨ƒÙÒzp·¶ßK¿ÙÃqœtØyî`]cïHÅ s±à<ÀKw¨hÐÀwZÈõ»ø´7x~·uÌr¸w;>=nR–8+â9ãÄ6†í3¾é[Œoªq¶qjžh`Å °Ãc»Z³&ü/°úüxèV*áùêpˆùž½mà*üy{ÃËú ÃOùS¨éEÌé1bc6²Ç<»ƒ7²‚wnkÚkÈÈn¢¡É^§q;Þ;>Ed÷ŽßSÑ…O– å{V2Yeèø w4@7ì5¨±½Æ&Ôð?|Ú‡&öo±¡ã.Éžãî6ñÐÿ(B'óu4¾mkBSxœ]ŽÍ‚0„{ó5|ÀðãQÊ_ÃV ÔÞÀØ„«&MÌfßÝЃ{ù&;;›‘uj°hø„>uÀ5zÔ/¸ŠLcFT ¥ÑjòV£c{™ìAZÚ”^‡ ƒpè ¦u9ZûÒ€å ن؛=Ø“m™O²M6Äs—äµ[ä YìNÅ\fÁ_µsgûzUN wRímÂÄ#%ì+%² c½ŸVÆãðÕC°‹~:LB¢L Ò:‘\õ:¡mÀmkBTúÎÊþ~gsxœíÕA 1ü{è7çªàÍÎDÃvK’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’$I’¤ç’CUmæZw?9}³â‡« µmkBTúÎÊþWºxœí‘Û8 FSHI!)$¤’FRHn›wóî HÉY¯Ûx3žÕꇤ¢úùs†a†a†a†axI¾ÿþÛïÇÿ»'UŽ{—áÙùðáÃo¿¯_¿þª÷Ú¾gýW9ª Ãû¼Ïâöð–þ¹»¶ŽÕo'®GW {>~üØÖÕJþîÿlúôé×ßoß¾ýüòåËú¢öµ¯ò)*/Îåç‘Ný\®ÚϱÚoù“v[iZ_Õ±aÏJÎþ/:ùþüù×6õOÿ-¹” 92b?çTþÈ™×þlôkÎ%?·Úåöìä_2òø¯èäÏ1äBµ ‘sµ÷YäÇ5à>¾:†>Êc=1ìÙÉÿ¬þOùwï èyä^«- ×Ú¶,ýÌXÉßzèû•žuÃÐsMù#×’U]ë>H_÷˜ÀyøY’Çvº!Û‰õŒå_mÄi ÿRuâþs´]ÍXœm§_gû)YYÞ)úmæ]×y,—²¬mÚ z†1Éêša†a†axEÇß“G°×§ÿóo/ïYòÝú\êkº6õ®x„ËèíjÏægHð–ö¾»–÷óüÏØñ|†yž÷u¾Ä.½•üÿ†þó\þô³aÏæŽM&ýwéÛÃäké#Ïú$?Î]ùMço¤Œ\ýȾ,Û/íßÚ¥—ò·âQÛ@Êß~6s?)}‰Î,¹ l¾ìçœô ØgX #ìvçQç´“ög·Ú ÷Bž™òîìÙ™^Êßuô¨ã®ÿuh½à¾m?Ž}{]ŒÐ.~È}Ðv_÷ÿJ;ëxçoÌgJöëôY]’Þ³ë@¶é.ì«)™áoqC–ü¿“?}ß>@ÇûXŸÀÎߘò'-üäÓÉÿ(½W‘?Ïöú›²±¼‹ôÅÛçúÞéô‰Û ºÅºvþÆ”¿ÏëäOœÊ™ôRþœ×ùÃþvì[K?[A}¥?-ýwöíåµÔmÑÕ‘ý}¿g\=ö€c¿¶}ñ³M¾‹ ½ÃüÃgggÓêüàÖ èÇ„çÜÀô-B^ëók_g?Ìò ¯F?œ£³« ÿ•Ý×v0||ØŽÐØ=ǧH¿PÆîÛgçsì·ã/ÇhØ‘ñI ÇtýÜ~×{‘òçún^§}¶ïZæøºyDžë—óÏì·ó5èˆéÿçXÉ¥ÿWvðô¥§O)í"û±c0ÎËvYà“ØÅ ÿçZòï|~à¹_%/Ï,Îôp\€ËɹyΰçZò/ÐÉé;/x†ÖáÎsõü_é·9?ÿ«PÌܯ5Ý»\í[½ãy|ÞÙÃçõÄ8ÔÏÝøŸgäû¿ËʱL{ä? Ã0 Ã0 ç_àk3¾Àç†>´’ãøŸÛÜÆøzä«Éø_ƒüÇøü\Sþã |<®)ÿb|ÅÊç7¾Àa†a†axn.µ•të†a?lÄ÷^Cã•ßvk­¬Ø½#®àýÜ~eûî)ÿ´3<3^×Û¶¹Âkð¬dlùcÁ&·jK+›œåo"eòú<.ãÊž`›Áê^(3zÌòÏöèu ŸÁ¦lÛ+6»úßv´î›<™†×ï‡ ¾k7]ÿ/lÓc[`ýOÚöùÐn}½×çòš„«ï ‘GÊß뎱š×Äzt¸^vßä2)?;WmÆrõ5üoäcö³ŸþIzì?ú¾˜‘Oî÷zx÷Œ{¹&ØÇ!û…e¹z.þ©ü»ýüÓÔÅ"ѯÑí¤ô ¹Ý1üÖóäÁñGg×ÿí{+Ò·’×lûw<ý=}GݽìÚFƨ^ú)õ¶ìzIpäG¿•ü ¯ãKì¬ÖœÎ{Í{ÙÉßeÈï ûšG•‘12éÇÛ­¯Ïq¯§™iumf—“>¿.¿ÕþÝ}¬®Íëòœ®~žaì? Ã0 Ã0 °š[u´¿›+ð7øSvq¬ÃïìæÖ­öyÎ…ç ½?Þ‚‘}¶¡åœXùçwíŶ‘ÚvÌ?ßå°ß©ð÷DðÿùZÛ“ð-q/–?ß³ñ=¿ê<ËÌ~¶Œ›‡#ýßÙæ­ÿÙæ»>¶ÓÙFkÿŒÛ"qþøz°r­¿Qèo 9ÆÄr¦,øˆî­§nÍY[;í§oæ:)@¸-`×§-Ø7‹ü({α߯›SÒí§Ýú»@¯ÂµåßõŸKäï9èîüÖ ¿É¸“>:ŸnÁ3éç _[ÿ_*ëmt°cmìÃC>äq¤ÿSþ´L“øÇ<²?ç=÷çÝ<ò¼6Ç;ùãÇ«ôsü÷èþÜa†a†a†{àxËŒ™\ÅÞŠÝûêpxç¶?0׋¼#ÿ5žßàøzæÇÑ™ƒc¿]¦³²¡x^úêl‡ò¼ •ÐÇ(×fù±ÿ:~Ÿ¦ËÓÙ£^l iÅnç59¯³©žWÇÏ~·\;Û?vþnŽ—í»öç’6eÌr¥ßÑý¿óUbS~vù§þ£^¹÷U O7O(é|;+ùSÏéGôü4|?Øfí´ÿÐ÷¶*?ÇrŽ—÷W~Ï2ÏoÅNþ–ÙŸÊ¥ÿSþ9ÿ×~dŽa«ç˜çòîÖ‡ÜÉßmH‹6öìmÀXÿ[ÿÝJþ…ý~Îs.ãÚyœÑÿmƒ4Ù¶OÜíï|Bÿ­düžò÷ø/çøÙ˜þÁb5þÛÉ¿ÈyþÝøïUä? Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0¼.ÄP—~þ*ÖÎ1@G\⟿äÜKÊðÞßrKXÿ˜µs2â±(ߥò纎Jëì·º8”ŽŒ'>â’X@â–¼ÎQ¬ûQýb£àÚqôŽòwx‰ ìb÷)“¿ëî¸_ÊK|•‘vÎ ÞÜ1çŽÕM¼6keŸe-2Ç›ïú5ùŸ9—ó?K^ŽEº¤~‰9òϱQï±®Y®×F¹8–ëN?å~;:=J<—ïÛßþ¡-ìtñºÄ’yNAÞÇég»þCþŽ \áûNýâXÊKê—s)'é^Kÿg\~âç2}›6í}Ô³¿·áï)¹Ün]O»ûrÞ^Ì÷³j‡~†"·î{pæ¹âù29w€6”Õ/Ð.Ÿz-ví:û+ýÇÿ£ó²M{ÞW—ýûJY¹¯Z÷­Êêµ¢`%·Œ íÒ¤l9…¼ç•íž¶™Õ¯Ï#OÏUz+èÁUÿ?;îýùsŽçÜdš~vñàN·›‡Dç7*.Yç«+v:Óye;ôø8Ë}¦~éÿÝ|…·²+ÑޅNþ9£àÝÀ}•{BÆž#t¯é˜×xîãÕ­sXÉ¿k¯ŒS¬Ví›ü/Õç»uJ=oê Gý¿ð<‹Õ»L'ÿ£²óL¬ò:äD]²6Üj¬f™ògL˜ëz/¯+ؽ[{Ž™ßºrðÝCôM®Y×q¦~áè[»{y‹¼£®òÍy cÈzA¿§Þô»ô‘Þ;Óîwï„«±€Ç9—¬zÉszW¿”ûH®œóìóV‡ax3ÿ ‚ú à¿%£ ¸mkBTúÎÊþY xœí}hWUÇ÷WTJ™ $ eV&¢©A:¤èþ1!¢RBL +Í tºt9Ò¹H¤Í—‘¦"¾Ð45Ñrs¿½‰–Ë÷8ím º¡e{³§{îv·û»;/Ϲ¯¿sÏyàË~÷œsŸsîùœç¾=WÌk¹ôkžGpêÔ°uë6£ô‹É½ººÚH¹y~„£„±OúxŒb] YìOž™ £³DÊ’>¾4ëÝÅ ú%S'Zd;“É ÒÎÍoÍ~úz¸Í»çÏup»« z:v@Ïßgú×Í—Qp¶Ž‘ߢržÜkÃÿÜŽ!P»æî,‘²öcsm5­Ÿ·vì=P|Ý;th–œ2ow[ZÈgb?NþkZÖŸ³Düö]çØ±Þyu9Üh~¾ \½šÎË/ØüO”ŒaΗ¨ÜL?Q¯ƒ$×€_öî5@T[[;He–Ú~ gã|y´”… EÃà̇#ìmRçåïõCæ‰æß[îl{ÿ²|°öwo;¢•aÚÓÊÝyþ1ÇÅ›–hk€”Éøp‹Å}Ií»ªp´UͶ®ë?[%ðßåÉнé.»NÄ_4·,ÖAøcúñS.ÃÑ»N°ë6WøR´Òö}¬à>;þiüI›ÿáUã…ýɰqÀÄ,-veøËîd ùat þuuuƒôÁŠâ~þ¬ø§ñ§ùr‹³÷7­ŒUÏkÇÚµíï¬Ù}Dcg“&ìýÖŸ#ÿw ÖÛ>¾7œÿ¤ÎÍ¿rÅD)þ²sÝO–3fý„É_–½—¿›3«<(ÿ7ÞÿÂaÌŠ7ÿý˧ÚÏÿ´ãtËÏzÀìG[Þ}ycµçõm”¿#™: ÿúúz¦ö.zÿ¤îèî’~öª7N†J&ÀÑÂqv¹±d,.þU{ò¡ûÔÐÙ<z:¶AwÛ:¸Õ2ÚÏN‡FÙõÆâ·¸ø×ULƒîÓã¡óüsTþ•o?"ô‘——éYýøéWfŸ¸Ž‹f<þûv— …µ#«óáÊ–ûáæù)ÐÙþ:ܺ4®Õ+»†ÁïËï€=)ôÁš§0x…íÏÿ(×ë˜Düy&Ãÿpa>´7NƒÎ¿–PãßðÖX}Èð÷úŠÿU^þk-þ³®ÿOBƒ[´rѶˆ-fÛë›Ö^Ô'͇Ÿ}Ye^cõÿïVOïåßJøo‡îöÏ,þ¯Jó§ma¤­Ÿ1ñ|Ù—7F^; ïztöuêYÝv´ÈË¿ØâÿJâü±}8¿±¾£âÏ;ðÎa\ÿƒÄÿ±O ÿü>þÛúâàú_³r¢ÐGÒüÝe²œÃàéŸeÉó'×ÿgúøWXüÉýßÜþ…Éð÷»V’äm‹9θîÿ ÿ¶úg-þ‹-þ[,þ¥ÿù¡ðw~³¶yçGÙµ€9cú¤Å°h_¬?ÑøÝuq=ÿþ—Ê€›¿L¶žÿç[ìgYÏÿö=ÿß ß.‹ö%kAÏ‘q[œýÆõþïLåK\þ{ÊÄ÷~Íðg› ™x§ÉóÔo› ÛgXó¡vóÓP³ñ)¨¶ÊŒ%c&ÿ«·Åÿ~íà¡*£ˆ¤Bþ?é9J³âŠÿ ùÿ¤ç(ÍR!ÿÜÇ1'Þ~XýúO\Ç”®äÿe9_–¿°Ö­žUFë“VÎÚWÔ— ùÕøûññíwý¹·½}ÅÅ?HþŸ¶¦iÇäæÄÚÍ!fîD~yûÐêYe²\ýS\üƒäÿƒÆ%vÞÂj+—ˆ9f]aÆÖùß;çýd\ùÿ(ùû1,_Kl½ÌÚð{üñåÿüçÿUæéC¶ÙòÜàï?ÿ%ÿ$ÏÿAø‡uL*äÿ±ÇÌÚæ3ýÌ» _Ìuœå‹5Þ0öwÊUÈÿ{UV¼ó=6NÒ*òÿ†¿úü‰ùÍÿ'=Gi– ùÿ¤ç(ÍJŠRßË6âßXtfâ_oS-þ3k§fÉX0‹‹ïö¿õ0ª k´œ†ó7l£õ…ƒ¨}‹“úLÑTèh-³ÕÞü9´6CKõ2h®\b×y%2ÖÜEÁ_¶/ÿ(Ʀ ÿï‹&AG{#J¤­ÈxsÏ‹QïþØv²c mkÍ…Å¿µ¥Šy£QcÂðâ±Àì'bÆ:—ó®aû‰ÅÍß{ýrŽCô-Á!¿å«,í_:%Œa®½¢vAï'Dç^{¿¦Jüï_::¬ë¾#µ£¥Œ+r'ž_™1ðúñë›eªðßiÝçw4Û²Ù÷ýfI†=±°ùcï°>0íý˜*ü+愎¦e½ì›Vr…aÏ{Ž’¹ÿcùÄô'z–]cÂ0UžÿK_ÑÇ~W²q¯»©ôþ¯báX”Œáͼÿ×ÛTŠcá[âßœKü›‰½ÍĿަsü«ô-ATyiã?×¾%ˆâ½ ­(LÅøÏõo âü† ¨©ÿnóÎM.|K ûþX¦½èLÎØù†ø—æò·<þ²ù#Qy˜þˆTŽÿ\ù–@ÄŸ›4F¢ïürfùÓ1þÃþ–@&þEmXíÊo½Êñï˜,ÿ°¿%ÉýûÝŽêz’†ø—­ó[o=­Ó>m÷I>ÿ§ñ[¿Ï‡*Æ–¶o TãoÞÿç†éÿÆzÍÄ¿Þfâ_o3ñ¯·éÿIæÿ£ÊçÉšŠñŸ†ü¿îüƒXòÿºóOsþ_æý+«^¶\Ö‡ciˆiþçÿ1ùQ~†Õ&‡€É=:¦rü³rÛIäÿ1ñÇÊç³ögí'Ó‡h èÿQæÿÈgŒÚZbY.žÿuÏÿûÍÛmëµ4Ä¿l}ù^Y÷´ë«­È¯ÛT“ÿÇTŒÿ0,mùŸö?ý6`Ü÷´W'mkBTúÎÊþŽêxœíѱ €@EAûïÁÀn®+ÁTÍ„{óa‚ —·ïöº1Æe]·å×»gI@ÏÏþX¯jjg»iЃž——Á`0 ƒÁ`0 ƒÁà?üúõëåçÏŸ|â:÷ªçâs¥¬eø÷ÁÿQéùŠþ3|ÿþýåÓ§O|â:÷2|ùòåßÏ.¾}ûö;ï°7eôûGFÔû´ž•žOõ¿6Ñþ®ö_õQúv•¦“×íßù]Tò¬ä]½^¥Ë®gí¼{>pjç«zëìåkßu¹´o{šyªþ¯yeõŽûŸ?þ÷{è-Òýøñã÷½x†º¨/ D:½é3Dþž&òˆ¼¹e«^H×õyê i#/OGôzüϪÿÇ߯_¿þ~î :ûsMeÑò#M”Ï3YŸ#=÷2û» QžÛ›ÇßЙ¦‰ïŒ[\s=Eó8´}E>¤GÈ©éTîø  Ú²Ê×Tªg-Ÿñ}×þú̬üVfÖÿé¼Ìþêo¨SVwìzV}Ñ.âƒ/Ð>¨~Ê!?÷UýùÏËßÿï1¸Åþè<ú#õîä¥þ•ý}âÀ¶Ø=þF[ þ÷~†¬ôQÚ‹Bó¡N™.ð·.+푹^edÔç½üLo+[\Å-ö§k»ïä döW‡ïÍú(}Ýýê6îqÝý$¾#³?zÐ6–éBÓ©ÍiÈïöÇ?òLüåÍ7®!ã3ìO_Q}Пuõïêoßš™é[ú=ž¥tk¥È‹ûøMÀÿ‘Æï!'}/õƇdºÐr2ùÉ_ÇCú‡ÿﲨü:—©ôéº ƒÁ`0 :8÷—ÝÍòoÁ=¸„+8-ó4}ÅÛžÂcåÄ¥XÏdq{bUþêÙŸÖq˜Â©Î®è¸âmï!«Æ¶«g*ΪòU\z·ü[ù´GAåÖ=^§+ruñü{µëLVåÕüþ çU¥?)ÿV>­Ò“ó†Î)úçx…|œYé¬ÒÆ»giôãœ\ÅyiÜ^cæUúÓòoáÓ*=£ À³Âó!óÊþÄíT•³ÓY¥µ?rfògþÿÊšûWœ—sÖʽVÙnùÔõ*ŸVÙîXù#å=ÿÌFÈÜýªÏ«’—+[¡«àFô~ÅyH«\L—~·ü[ù´ÎOÒ‡£Œhô5žÝµ¿ŽžöT§ö¿êoà”w¯|Sf®ûÜÁÓŸ”+ŸÖé)³·Î;´ìÌFå³´;:x ûëØÉÇ÷â)/ˆOSÎ y²ëUú“òoáÓ2ÞÎeÊ)Ve3'w®”ç‘gGg™Ž=ïJþ®^ƒÁ`0 ƒÁ ľˆùœ‚u k˜U,ªKsÛþçØ‘5€nYæ®,÷çbXw{ ⬿wÖ&Ýúõ™û3®Q×”øN¬ðQev× ]¨¯Æ·ºö¯gcH¯úËžçîi½÷Š{î—ôÌA¦3žéôIó8†Çh³òwòÊdÌÒu×wËÈô¸ƒUI÷äWçq”ƒð8­îÕ×çI£>+—£ñ@åì”p™ôQÅŸáóÈGcþZ—ªüò\ƪÌêú޼ÄUƬìß·]ÌÒù/ø:íÿèÊÏ3dç;É«:gB9ÈRÈôï|GW~•—î×w«2«ë;òfz†áŸt|éø+—i5þ«Ünÿ€žá«ÎŸgºZÍY|<õ1NyŬ|E7þkúªÌêú޼÷°?õ®Öÿz/k›Ü×>ä<šÏÿ=Α}NŸÍå»Î…ùžü>åuåWy­d¬Ê¬®¯Òdz ƒÁ`0 *èÜ\?W8ÀG£’Ë×ÏâY»ûÌÕ:‚ýÒÏDg«öc¾g<‹ Ìö2+²¸€îÙÕýÿ'ëWµ±6½žqnØŸ{žrèuç"w¸<ÒTkôÎ.™ô\ r¤•¾nåOàûïÕ>Uì˜~c‡#T?£ñ+®ëžyöï{¼QùÂ,,^qF/XÅûv8º.Ö©gá×3}íȸâOPùì ~n%ãhUÞG4§çø(_û…sn|W}Tg&x^cëô“,Fíý…¶Çù°ÃÑ­¸ò«ôµ+㊠<ÁÊÿ#+}/ãUw8BÎRh_ÏÊïäÑ|»33!m–r\7U9Œmêß({ÅÑp™¾veÜåwÐé[û¬úx¯ëG¨ïµÌú¿Žß]ÿß±?g;õ,çnßÒ½Úow8º]®³Òוþ¯Ïßb÷ÿÈîã?úÇOVé¼=ù¸ZÙ_óÎÆÿû£#¿veü?áèv¹ÎN_WÆÿ³Žªõ¿rÞYL€ëÚo;Žù°ŸÎ1³g²9pV^•Gµ~>™[_áèv¸NO·S÷Ÿ3 ƒÁ`0¼ÀçèÚïQ¸’·¾[ãï¾×ØÀ veO\k^8Ö”¨v<ëZbzº¯²Û\ŽáOìp¥Ž¯b¾n$~ð}¬¾Çoèz•3ñј mKã è«ãvUÆÎþ]^»i´NºÞå¸WAö»#´÷xŽë”«é‘æjßÊtÄõì q ³:£¿ÏE=Ð z%Ö…ßqù)CcñÕYµEÅÑí¤q™´®ÊyRGý-¡+u (K\ûh¬PÓ'¥Ü*^Ø¡²¿^¯ì¯ñqÚ=m=y|KóòøvÅ«eü‰Û\ý˜rÈŠ4µŸÇ=Ž›ñ{Wê¸úÝ1Òûû;=Ý·åòxÚëpû;o@>ú›”ȘéT\ÔŽý+C±“=*ï™É«|˜¿GðJO¸CÊåW]ù–xŽ1.³™ïµ 9_EŸÐ±©â ½ýVýqÇþõÊã)vÒ(ç¨ã Ê‘}Ïì¿[Gåñùw¨œŸîǺÛôã{-âƒoô½ÜSdו_ËžïÎ׃Êþø2åÔ;iT&Ÿw*ßÎwú‡·™“:Ôº§ÇÇg×­¶“SþO¡ãsÌìÞjÝêºï%Z[~_˯déÖ®·¤ñ²+œÖñô¹Ìw]Ùÿ7 ƒÁ`0ø» ë]ÏÜkÙíIŒu¾+e§L]«ïÎÖ‚ïoA^ç°î;=GR¡³?œév쯱Ö;<÷ôy‚· o$Nî1ç´ˆ=:ߥPîVãžuŸ£<´Ç <&«ü¿ê3K«yC©¸/ù4–£rÇ)i=µþ*/|ÎŽ^]ËQ¹NÐ1qŽG¹¥w>ù{å•á ?ÓKvÏå:A¶þó}E:·ÈÎ_«n+{ÑþuÿÃ=ì¯ó¿êÜr ³›÷qÍ“¾Ì³]>>ÿËdÑ}+½øüÏå|L¼…õâàõ0öÿ»1üþ`0 î…lý·Še€·ô®ùŽg:…®×ºñ¶Šž`W×÷,3ËOã?«½‘]—¾\9ûPø×î~Í[°£kOÿûWùiìGc~Æ)ãÄ-<žw¦¼.ý3qÌ}•ãž'vªuðw$V±’¬n“Ñváò(²r²ºÂÿ¸®5Žï2©½ˆS;W¸‹ÊÿkŒ_ÏKÑÏ”ó­8B/ÝÁhùèEÏÕ —'‹9êw?K;Òx:òxðº<–ì|@¶Ûc³ÄϽ®‡§ùVúàyâÆ»c÷ÿ@Û–ŽSwÍ8B•òq®Ãîÿ]û£=é2ôlBÓe6V}eö÷¹ˆž­«òRý(·ØéÃËáÞ VþßeÊöZT¡ë„4Ýûïad¢­e2Þ’ý+nñYöÏæøBõ—ºŸTq„®Sü×ÿ»þß”é<›Ãïø­[&Ï=üfÿŽ[|†ÿ÷õ÷s°zîPç)GèåèÙÁª}{Z×…Î3«³™n7ÅjþpûWó¿Îwfåtöï¸E¿wÏùß[ǽ×;ƒ÷…±ÿ`l? ƒÁ`0 ƒÁ`0 ƒÁ`ð÷á{ÑÙûô‘Á~ÿ¬ö½³ÇÒßi`oLöy„>uo©Ãßi\q‰ìKó|}ÿïÒû7žÉSvu9ÍG÷íñ©ì¯¿c¾#öÙé>·,Ïjoð­òw{õÕ†ú‡Öݲ‡Lûù=«mWèêòÈ2u_¤ö¬ÿ8د–åéŸjož?»Ú²kÞËDúøßß±¡öm¼†ýýwÔ>ôÃì#® }©ÛË×õ·E:¬ìOÛ¡O;<ÿ¬ÿsüy—›î¡Ô}›Ú›¾k‰}~úŒî±Õ|µM’†ï'8CTþ®¡¬o+¨[Wžú‚ÌöŒ½ø†U™ä©ïïQ™õýr'ö÷½î\ç­'ç’tœTY¸ÏwôŠÌz.Dó¥=¨ÜW|ÓÉ~q=_¡¾yª¾M»ÜñçÙÙÍÇ÷–¯äÇkþt§ïbS=2æû|¥Ò±Ïy´NÚ_}O¯îe×ù”摽ÛöàýðtLàœS6Ÿq`CÿíÌjfý´3–#Ëéܰ³?zÕ1 ÿéíHí¯þ]÷š“ç‰ýõ\"íWËÌÞ]åó¬ÊþüO;¾2'@¾ìã@~tGÎü:º«üªç{åÝuÊþê7m1‹è™Q]ßPWVç2ûS®Žåz]Ï¥zŸÒsý‘ÉÛ×3ÐÅ]vç‘îªÜÝxwÒžôÝ:Ú—>ÚyŠÁ`ð¡ñˆ$j¢ëw½ymkBTúÎÊþ¢6xœíš‰më0]HI!)$¤’FRˆ?6øc>>~Úsm£®+ŒvÁu…Õ‘øνYšuÌ8³´ú³uNÒ?¤WP>Ê1Js¤ŠWiVÿçü‘ý_uKðEÿ‰Ï¸ˆ/rœÌù£Âˆ_âšgK•W]×±ž™ÍEYòclÊó,[¦ŸTœYH»T¾Ïàÿ¶›ùÿíííðŽˆ}x¦÷ÇL#}A› ¼ÒâœöGüžVË7¼—‘^÷}>“iÒžº²-çøèþŸiæÿì;}žLJø°ìXí&ÇTÊP÷3ýTÞ#¯ôߨgÿ®ðJÖùl eäý'ï=ŠÖø?…͘oéçùn€í±aöëì›ô½|7ù>šý?ÇôU–%Ë;«ï¢­ü/ñmöµžN/èãI޵Ù÷fóQÖƒüz{Èñ<ÓdÌé6éd™nù;è¯ÚÊÿ¥²Q¾–mû{{÷5í$ýÀûiѦxæÿg<Æ$ò"Í^¾%=êü¯”RJ)¥žS—ÚçÍtïe/ùÖ”ë —°a};kú÷Ô_µöyµ?¬9ÔšÉlÍzÒÿ}m#¿óGßüKk!¬›ôók(Ë9êGüã1»¿”Þèz–×,­Q¿&îlÍiV濊ý²Üû#_Ö<òœöÂ3¹Îžm$÷^9g —{9&°w³&¼Û:Ë™ë‰uõfÖšúºR…÷:Ö½L+mWÇôW^£§Äz%÷I—½î¥2Ÿ£î—lo£þÏZ¶f?¾k4öW¼ÜÇ-è#¬ó­ ?V/ì—c^ÿ·!÷!{u̵ʴU¦ÙóÙ·ÿAœÑý‘ÿGe>G}þ?Åÿöþv✽Žø3ÿÉX~j½úœ—{øzT§ôA·O^ÏòʰÑ>÷³?syÊ|®¶ðßG)ŸP¦mÿgݲµµõà?cŒó_ß7%•“wϳ®ËIÝÓ¢ÙäþWIªßÔúÙþv5½:œ¹¾øR]T—÷ª‹Ó÷³µE¹)Ý×&÷¿êüßÏâï)uì?û¯«éõ$K}ÛÜ,>ŽùåůMëM¯mß—Ì&Ìïþ?ÜôušåxçYöãj귫ÜçEÓzÉŒyþÛÞwçëm_×ý_~ûÏÉî«,]ië1u9õºð‰8ÿ'»/«éÍûþ\Ýëôò°Sýá1úoZ/™1Ïÿ<}ûÿqó9zq03ëþîû69Ý7=ŽRý7ݦT6aþû®ï<­¦ç{·ÝŸì”Û}Tßóë߯ú>/Jf¬ó¿ÊßÿŸß<¹ë~¯SŸîÇš1Ή¿}‘eÓ3Æù—r‰:ÿró;æ?vÌìŒmþ×}Ï~lªÿuܳoºœ»G×¶×3Ä9û’²ÿUÖKïÙ¯zÎmˆs³Cä±ú_‡=û¾ç_›{ªû¶}ýÅó¿më]¯3©Ûç<—GÓÿ@{ö÷¯ëZëºê¶©ÿñèû´ÊkÙÐý¯ûž}ßë‡î¿ÏþQ×1çËü?Äž}Ÿ9ïs]ÛÚªý/3ç›Òé=ûe÷êsŽ•:Æý§ûX>ÿ—Þ³_¦ÿeþþK}.kë¿ÏÏKÿöìóÒÕWécéü_”={ýËPÑìè?vô;úýÇŽþcGÿ±£ÿØÑìè?vô;úýÇŽþcGÿ±s¿âÑluÿ„UÿsÀ&ù”²—«*mkBTúÎÊþÔðxœí}+¸ì(Öö’H,‰Ä"‘H$‰Ä"#‘X$‰ŒŒŒ,™QûœîžžéùÔÿÔˆZsé>U{× °.ï».Tæç}6žÚ³‘-Æ×F`‡£Ãp]Åkß…~Ãóbà ¶ О$Áwݓٱ„ÁñÍ|süñCo•›ÝA+Õq3¶¾lOàx@á(é0ða¹¯+?÷  ÜT,¤_¯7¸s\ÛÞϘ^Bl1)üCó•Ò+ÔkÛ(îFyN"8õ–dPCÌ_9ÈÒ>O0&l«4¸Im+þîënwîÛGrŰø™à»ø)/tih“f˜õÕ Ñ¸X†>ÊʨËEËÅòã)–Ô<,é6ös4ÅáÀÖ5›zàbð?¤¢Jðàö\<OM%O#(7ä6à:§= ªêýÓ‹YA£÷ƒH ¶«L s6›ÎMƒXêÈùBcX&ǘJ½te».Êöü¨Ï 3.je(”Ï?Ô?õèÉLÚjï³=€ÝÚ%wƒZˆizFTxô„$¯kPö8›E·mòø jAO™ñÔ×úÞ€«ž>~þ’†åÜàØ†‘ºéB9úµâ † Ö¤8U­«KCÃv´jbëL èåçC¼ï€y¯¡ ç;¤mj P.Ô —øãïDkñÂêwþ¡UÿE€3ôܨÁ”‘•’8xëUÀ…JÊü¹s£‰ž\„³èÉŸŽ+;}s­FãQ(KI­î÷¦XÝ›„ƨ ¹1 Ëúþ+Kú¨èdXŒ];JÄ£Žïcˆx$§DÑ×·Þž¢X`i× ì¨ëÑ@lÌûrn°m$¨Æ^×9΄ïzBGÏž Q=Ænfäk„Dêö¬e; <¨ýøaÓü>,µâ¢ž›jÆïk‡0BŸ[p(õâ$¿º‡Ç ‘ÛöÌpý4 nËËq`”XÆ“ù úvϵöèÙ.xõHnŒûorŸJ¾€Ï5¬ñÁàÿHàu©‰ñê뇗 fà§ í××a앆‰[Z:><ÇM@J£9óý¬â$Óq]¡}=H… kÐþ3ÆÊºã¯ù鲺t¿Q“=‚, 7ÆÇµß»ýìêçs Ä>ã¢3ø¶ïÞÜ6[¦Ñg•¨— RLت¨ù­?·( &wÝ.7C#~B{‚]¯Ó ×â—UÔW² 7™Ò1jk~‚e”cG»¿rËÇùÐãDØ.=ôËK´ÜîëÅ@ÝWÝDZMû0å€ãûíèä¼0Î\Úòxó®vÏqßNZ¢ >#Æ ƒ„ŒàBE— ™¥)•‚º&yØA}tå?Bûê Yìm(ÂWIpáɱò€ñ ¸|½2—+èýà\2·ö íÞ)lÜ8·ÖtlÁ@Z.B½€£ï•eñ…‹ƒRSßôƃm>d˜Iéþlþôò'N a†dÄ¢G3¹%†¼#«)?è¼Ï$sß _5=²íYÇBR#-k"qGP-Ðeþ"çf­ÁÂá%Ö©-Ï“37êÐäÌÈ8ÔM9™ÏŠŠ,¬èä_*n;H‚ÁúÆEBƱ†Öcl¿~øÎî±ç Ë[ƒŽ/saŸg¸IE2å,zÒ1Út:’kLÆÓçÎÁ¡ÍíÈ™壋G)æÔ{7ÊoðËÅnd¨ø¤è·ðá•{@rõP˜>ÆkÂwŒk×½¾¡ #¸kXfy‘ÖEÇ÷šÈA©ÍBÂ9ÂuM°ÛÞ4P=¹_Ól’ÆgW®Ø‡ÝN•Õ#–_n™‡Gï¤pp ,Z…ÿUu›6È“÷ÃV¦›Ó°¸å0EK‘7*|·ý]¯{ü75F\éÔ¶»úzQØ z!á‚Ç uH€>îÿó¦upš²ÚöõTÙ£»o3P)ˆø´[à^Õ6ãÖÚóã` -šd&á*=¶%ÄÀÊfY’<¿^’ƒØ·`_6¨ßÈ|h¸Ìë3Ø¡>€„2 Pºúqÿ×7ÏŽ³ ýÕü,Ns¾j»F™=BµŠü` ¨í³•C§òöiŽU’)Ré@LÅßÒ®„‹ÿ‰·Ç§mb<2FH“Rq°²ùF½åãø÷Xºi䎲õOm¬GAýÝ·ôÒ}:¶*¾Ëu ÄfØ:@Ê«RH™.òÙ6Âñ¼±Ã6Žjå§cæGOpO- ú­6HÒýúÜÊKÉJæÛUÀÎì:ºJǃ¾ŠýÉvÆ,¡•¸¯3ÿ‹DìZ‹¹EñÊÆ®ÒqqðìØ7p?¸ƒÈŒÞK¬÷Å%ȧ$;â¼?ýQ¬r6³pP7`¼a™†¸é^=„„ýÉRç¶_†õ™³)m£„Ç>ÀD3#£ ¼_' çIþÂÉ­uÍ‹CÁÊ-Rne㯄³²Ïóss•ÀîLÏÌ<È­/µàR)|Lt_1»éòÁ¨L¿kÇ=‹rr 4ùìê§ü/gýšEÀrþÀ~P†¦nBß[ ®\g[{¡«‡’g£ãYÛvRŸW'†‡ {Fe°m1ïÞŒ{ Ýw¾LÿÕ;7¨&$‘çþxúcÚøÃÐ0Ÿ ŽžnÝö‰óí&úÚuÅ@5sCèCÕ±mœñ8Hƒãefñï¹Æt ’Îx{q(a¿²ÛÑ‚a¡?€ŽÐþQ“%ò§ÌlÁ¬ö4ô‚¤Ï‚xmWI׆€Gí¯¦CèÒôì1ê’Ûk×QÖýŒ3iJhÜ,Çÿ€úãú‰KºšRˆ÷ÅÄð¢ÄÂÈöÈO`úÈç…ʲ»†½þ4á)ú%ˆùÔb6îB8ý\ ³pµõšÉì«e<êºíS鹂ØìÚ+ÓjsðÄpŒ„¸ß%<&t{3?Œ£¬|N)p7b™Ôîãé?Ôa¤iäDµWl’¡½ðˆX—ŸÀZÚ>;uø)¤ko)#WáÈÍSšn®cR½xô”{[ÀsXv1¤¬95‰_¬¬0KéõÁжՙ7Ú>žTp¡5‡‹¸Ù´¤l3¥Sü"ØêLXê…ç«[á5mö¡ø º¿Q="u}ö‘ÆpϘ*xböÕ‰ºîã—ã#iM+³ù@»Z! þ·Ï®~jàÒY”ݬ‘¡´Ò$?5Š• mtêuˆ] ‡%Ž@Ž÷Ý…:4h8Ûƒ¸˜¡»tuì3À;ú ΑO¤1A/r‹¿¾™ ÆÏR*5ÀÇûÿËìiÜ&j#Y2:º$Z(a­dæ@ß>'z ž„×L¬¯³¬Û뇶©½6ZÑÀ8|`Æ6Ý"åŒX1ß_€z' îF-©÷»Ñû?°úX^ò A:?1¢;ØÌh/KžVB'õ üvOnÏFSò‚¼É õƤê°ïÌÞQ{=kh7™ÀMå¯ÀwXQùpü\vïÍ“ÎO/ÿ¶.ÅöÚñ¹ ôN3·ÍHKRðÉlŠK–"›qò”‰^Wܳh¼1wtùã  h@§¬Ñ3ðe6þN|–’¶Á©‹I;yîó?8t[ƒ[é!‘ ú¥µ$,ήL­·e–"z¦å%IÞ†AêkÜÌRäl!3uú8àÚyßë?_žWÅé½)ƒAbCÒõéõOù!rz¿„a¢¤5S±ÍnÖ—£³ˆ#Â<ý43yÜ6"ª ÒRýêÑô߃C‚Qå¿&>¸[¼# BHÍǽß{v¡eà×kOÃ×TÉlq(UHð͵h »Ý”8º,@t°µöÈÃÕ‚LÛ{p´•ü‰/Ø*ËL"d_y ïŸk,4î GÌ–ýÑbD>,ÁÏ.ok"ýD;†|7–[.µDÖCíAœŸä#‰iÇæélÿü¯‰ÏŸ¡IÖ¬ÐòâóÞD¿q½]+ÞeE •ò–_«-- ™ƒ¦ Ú°c©›³èç€^ø¿¥Lô˜q±1~ëCßC“ÿ”øžC“9¡ŽgNäóýÿû“õHÈ8Bkhêç«JÁŽ#Z¤-`úVo§™MËa 9r$îÕºZ-¼hókhò ?C“$· û^–ñtÄ÷¿9d(‘8PÝ…]Ú¶š£×w[¢wléÏ;µŒd•Ôn—׆ôoÎK«èdù H¦Þ„(Dú¯…¯Ÿ¡InüIÌ Mïãü_(ù¼ðœ’îð5)6H/öõÌYÍ1‡¸ ±QRæŒk,nËÖûXH½­ʉð‘ƒÊË?>ÿšdf“ç&6³üü½^EJ–m‹ªétÞÈ{¥C—µ›½ÌC¬c`½îÙ0Ê…v5ÃÂx<äƒó\9Y·Ýÿcáû×Ðä}1Ú06"×´!ÖóŸë9êdl:'– û1H"Áz'7ùQ‡q›„¹Ž¾¹ÉŒí#KâR.ò/C“»VÖÜgÇQ×Ȭ¨åéãó\ âì`¸·?dÜÛ1y³”åuMÛ6Ƶ8ZX]8Ãø^p…ªwQëE¾ç &­1frRšÁKiûñçÐ$G¤ÎÓðÔÝœÛÇЕŒ¯ðh3'À®Âø”·“Ç{¼±š;;Ö~F öKî37Ðkš–Ìu<pöµdÊŽåèˆ+C¨š¤™ Rá‘÷Mz¹Æç¿7)nÒ€©æöÔ lEGyÍl½‡:Ì‘ÿIÞí’o±BìÞÿ—S%|ë‚ÎЕïsTuÆleÁõ’bšA}A¸ëæížÍ´þ1ãý0ÀA{ÉKù“ʘÓº¼tjÑòÇÐdLI=rž ¢PRgóûÇó_Lb¸R³£é Åžël?«â”ž)!°Ö[«‰FÂæoÖç wi&k^”CV(t@püW2Ó÷²ó{hÒxH—GRn²͉ŒeCbúxÔ‰°ªé6GÁ³©÷‘¬Q…Öd27\ÌØ«dœS‘É=\»F§f*¼0é‘Û£ÜOPúÇ5(r„Zß™xQ‘Z>¥~G AeN-õãùÿjYôÜ7—Ò¾n;ún?Ó¹"P·¯xÒ}‡·•/àNäöÞW:ÝŠ&´—×¾†Ù:x" ꭥу;†ÄRç펔¹ ®cä›…Ñ™õ±ñÜýüýElmG§a= hò¨BG_æu…³×YnZì«­FYs ôUéµ"zM&Ë:ËÝGn¸Ïuí.õDX‰ƒÉ5XnšÁ¡ö›;Þ}¶Ô«%XO?½~2&ùÝØî¸Frjj¢¢…8ˆ› yAÊÆä*±W ¡³‰€©ÒIÒ˜÷“9/¹§u‚b)õZ³l:ë sá¼¹ 8²5ÀÀJõš>~ÿi´œÐó˜I¿þ3YÏÔ•;ç:#hEL¬×[ROd‹Ê^GéšAË©fß~Y!ýËÐäEåêñn·ôü0¯~Åà/«AÝò –Kåm÷‚±>^ÿÝWY¢q†"µ¥â<цFвÎë*c¹½:xÛw„|¤Ížw­—%ýehRg°åØúæÜæd¿9ç´üÌ•ªËÃvž3Àv Dg™hç>>?ÿò3é‰hŸYDkgCã(ʹƒªÔ•ô×SÉ·†¬Ôœ|è 2QÁü94©(ñ½?OG•Q34… fëcc³¶PopT€Yaƒ–W(£>Çÿ@­tãX4ˆ`ðLG¦Ùžp•‹É„ãaïãšÅ°l\¤[9‚cû26óâU M6f,ºŠò¼Ë'›¤…žCÐÖñ4øi¥?W~p¯sÏ ?žÿk³ÞA÷×KÃrŵÄÅÎk@–Ið|>^xðs¸?ý\Õð`,DèäõÌ’©Œ°Žû5¯éWÛüÉ^£èøçw €DÓµMˆáøXf_8<%|8_왉pPó1†…ãî„WþÀlm߃˜“Šf?4žý¼»:½òÌ“_£Ô”v ûûMà;kž:pÍÖ²â_ÖùásjØŽqw]$F‡£}ÿ¢»y« ××û,b'Õè°N‡Îþ=Ôo¹öÖôÔ0, õ¨Çÿº»â~–ÆM‹ƒÄû Y•R´‰¥4â6+!”}@~u‡j°ctCÔúàõP.ÅY(ýxÿ׎ ½×zµ?70ÆWXFÜ£¾oŒ½·¯‹3z‹Š€0°®Ác8¨R£êG±¢g›0àö ¦T—Uëøò„½»‹w­"/4³ÞÖ÷¿¾îC¾Q`[{O³“ºcÈn¯]•¶+•{Û{­ç¼ÞÕÎ N!3•<®ÞÇVí‚ìyxé,!C æ™b². êlfÖ×åÁø'„ÒÁ\ ןÎÏíãëgu,μ·¸šw-/ôß3Û¥ùºñíN°íâX(›c ƒŽÓâoõMDð‘sÊ¢a·#ü#0{c ÁÈÀð%µuDWCB¥Z€AéÍZ6»,Øçûxý (Z%‡±µØçw€ÑÀáŠHbhTb2ùþ<$÷Æ*cÀ¼ænk÷³”_÷וð«Ð÷¿#{D+B<™!âÇüS/¼gÿÃ`ø9”­.^]ŸÃŸ™ÆCíÌ+>™ì3ïƒ+•ý5Æë]¤q‡„Äp¦j' r¯9µ¼FDȬ)~: ã躟—9GmÜì“x2’¥ù-?s–raG"yvU³pa;R«çãø÷ăœ ÌAŸ\&ú¹“ ÿ?#Äìn Ûí0Úee½´“d~o’qå¶­¯!!DzP^H)>¾oµëÈ‘.®Ä¼‘Ô¶=Hy»7´S´-M½ á?Þÿô8y£c¶Î™ß§q„|Ü#Þ5"ù2Б ‡lµm#—ýU‰ÑÊ»ìýeüΤÎV†ÎÈbMƒ¤Í˜÷jAÌc7¾Z ä]> 4½gbö Äýñõs 2WRsKgí6Þæç 's8qzñTT[”R›[wÄÍ)I‹—9ø5x¥ŽÜWjýÚ #”!nN+zP’ÄÚ”â ÁKgâ²ÁÞTEŒ,ÂÁùÇë?³¥{é^R¨DÝ¥=´R¥u^zîc¯’§³Ì¥&D¼‰'i74øSËJ½ß”í&H¥æU©Gà»[û‚ácrÃͦŠ<ú’‹¡׿~þ‰4}Ú…žíh¢°Î;¯üòlpAZð´%’XÔZ;t®Q?„±÷÷žóy™ïk1+Ƴu6Â[«©ÌÖè† áDõ™c4¿ÆœÚóÐÝ*d„•B#!}Þÿe>Çsamh¡¹ÿêG3c^çæ—8u9󼵕⸈߂ÏUéy‡‡B;f "Yi=ÖD§ =Êâ‚Á4‘íŠ&¡Ž’Þ×|¾Cý“Ò3»Ä÷šg]Ø~üþ›WgjhSIXU“‘"1A5Fr4×{üáÜëAä—éljŸw¸TðÎá–Ýt6<ï/NÁ  \û¤õó«R¥tÇû˜a| Æi¨ÌÍ>‰T.šWo>>ÿxŒ•ϯ¼Y¼æÈ{ç··m,J²{gg}Év~)ê]Ñæs!?wøè÷X›‰æè˜G—F°¥l!7ކUœÖ|Cnáfï³…:.@mq%®Á臔±ÜÿÓRu?.–:¯èaBë¼ÖºÌÌE#Gƒg'yX«Dåÿu‡SWºä™ÇŠD)Œ˜21×ѵ‰VµˆagW¬àP޳²q½ç«ÏÈ’Ï Ís”?¶•@åg")ªíªç©s\ÖTòâô{Þê«f3g÷‰oÑþÏ^w:^ë¼"•Ý{¹ªd#³!φtà}©,nÆyWFKv„X”4–ƒ|<ûB+ è®Â8ˆi=-;´³X 5l=/xlêóŽw•–å÷n³]ì à+SÛÓ¼,{Õž¯/ДâV¡û»+<< ØÌ¤®Ào ŸâÞçèÔ‡eNpù^Oÿþ¼ÙùŽOv qR¶ £wHF3ûÝß=oý;ü`~k’RÏwCßÏí²”u¦ãk¡jE˜|û‰qÏ©ŽÔ‚KV,Ï àÏ*?ÞÿþxkáÜ}QxÁU¹éœ/MÛüÞÄÂá= ¤Õ°pý¾Êæ=çŠÎ^xúBË÷ÞÚKx«§Ó@ð[òÎI™¾ÔYB]Tª¦âž™çÿúÑKqÉ.á½€PÖÛwÿ¼ÃÓAG\ôšWÂÏ‹Øâ9ùãÏ2S³—åA\è“Y\œßy=ǨðGj÷¾ÌéÇõÕ¢ÂMî@âŒtÔ‚¶„vD¾üƒzÎ+²ÙÌBĺ\·Ÿ¬ü¼ÃÕ¬…÷Ùë6ËÛk™6Lþ¸Ê¦ÚRß_rýnl|UAϯ< ¢¹Ë|¦²!‚¸;ºÁ8™_1ÜgésÞùÆCŸ‡ÿ¿ä >êVB‰~æ,¶¹® Ë˜_ÿ&f™äÕjpñ/WÙÔÊwaùO ¼š°H 3ÉÛûþ¾I`˜ÈòuØù»õ¸1êͤÉû·ÈÏ÷ÿå+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò€ÿÝš™w)¦÷ÍmkBTúÎÊþ€H“xœíÛÛKQpû¬Ì‡ ºüAõØCo½Foô&eE]* ¢ #‘Äì*” (]¤Ð‡è¡"°¬¨ ÌÈD3twûµsb¶ÍÝ™9³{ÎÌ:ßï¾ìÌì\vçsfœB¥¹¹UØÂ =­zÿîcAE$I•ìwb‹ÔkT€ý#ùc Ìèã¨3úÇ8*À Î×ÎZµ¹úÇë]ÿrö“q{Ñ¿Lÿrî#ôÏßÔý¿œqDÿù]úÓŸþô§?ýéOúãùó߸þå–þØ¥?vé]úc—þØ¥?véÝ$úÇý{Öó¬q{÷d5Kì&Ñ?ó¡ôÇ.ý ë<Å5~¢>6ýã7 ¿ÿþ㵪•nPʱ{¶È@Ûš\\Y&ýçkÔòüõz/­õÿ·êµk@»&ýèîI¿Þ,©O{%3Û/é©2óõˆü|³]¦‡Ö©÷]{çø¤û÷Y’m­ª ÿ—“XÓþO:×þõÿPWÔz¸]î_©êœwÍ?õãn®ÃǤûÐ+þ§¯k×ıû.¬—±žUòëÃVIý<#3£{eòÕF{¸Z~´Ê­SË%3õ¬ Îr(ÿÑ–ÿ:ñ¼A5­°â¯s0éï\ëŽ}±ëêU§´]ªšþÜ–›†»þßž›»©Î<ݦæo4,²æÿmÖ¿ÆýÇ‹ÿü?»Z­×²¿VR#ÇÔ«×¾’ìï˜_«_¨¾gGöՙ隷¶æÿ=åߨý6íY컯$û·×U«ºß5Ú†ÿDÊ¿&ý÷5iõ˧ÿÍ#ùëX›ô_°é€gMû÷ö\–°q¶¡¿=ÿéLtÏ®ÿ¹ÖUwºØ«;æ?и,Rÿ™ŒMúwuÝVë¼|?gìN»¯‡ÏÝQu§mü»ÖX÷wêúgñ}kÒ¿ózGÎ=ߨëÕ©³ ’¿íû¿[×?-þ5å¯Öëø{ýï;ѦêÆoÚÙ†þvü£üÿ¿|ÿ0¡¿“Õ=öÅÖî’Jÿdø›*ý±KìÒ»Iö¯€¿©©ø&ÙŸ ý±Cì$Ý¿ªÊ{(ø½gb›Röõ¾é.¥øÛAûÔ=&ýÃ…×ÿ¼iÁyòšvçÝz½?w=Ý}”²­×2ïQl¹WPüÜC¿õÜo¯qfÛ ÏKÿ`ÿ ótåÏÛò÷»»/„ýœ^Að÷;Os—…u6á¯s|¯íè¯çtÞ‚Î_þºëÒ¿4w^çÙkîr›ÏaŸ çÆësê$éþÅ¢{nLÇÄqMvúGúW†?ó/ôÇý±CìÐ;ôÇý±CìÐ;ôÇý±CìÐ;ôÇý±CìÐ;ôÇý±CìÐ;ôÇý±CìÐ;ôÇý±CìÐ;ôÇý±CìÐ;ôÇý±CìÐ;ôÇý±CìÐ;ôÇý±CìÐ;ôÇý±CìÐ;ôÇý±CìÐ;ôÇý±CìÐ;ôÇý±CìÐ;ôÇý±Cì$Øÿ …yP±;ªmkBTúÎÊþ€ß@xœí›[E†ù °.ü=½× Q4x¸ð‚K/Ä£7AP ‡ÕÌMH4ñ‚5"Ü !.F`vgfÛ®f{¶·­êþª»ª«§ûy’7=SSýÕ×õ~Uݳ‡èÔ©/"Ô_­Ý¾‹B!„B!„:¬••Ás@á¤~H ôWóóóÔ@¥ü§ú«………‰¨þ)ë?5Ð?åý§ú¥ÅÅE­¨~ÈäZÔA·Uä?{A÷µ´´${A7%õ?_ÔB7dë?µÐ--//;Qè¿cFÕäÊ„Ðô)ôý!„BÈ•Ôw›Ð9 n×Àׯ'ò9Æ÷Iä+vhšòÞu-(ß··Þýÿîý#ÑÎøïäè2îÜ{‡“¸¡}jÂÿôµ«H½oÂÿ¹]ÿ•æÕÀ•c³ÑÖúÇÑpóRpŸš¬5 ü OtñÂç“û@^6q¯?lÔÎöýh<¼ŸÕûºsòíÑ碭[oEÃÏ‚ûÓ¤÷uk@yúøßGbIkà껳ÑΓÕgzºŸüK½ŽOwÛÒöøxõÙÚssþµ™hëÆóÁ=jÂûìï;ªÖ€òòÑæ+Iý¿üöl4þç§]­D£Éëgï÷Ž+“öËÇê×ÀÙ—÷ɇï¦=_×.­ååÃ÷¬$õÿ›3Ñøáµ‰FsÇôõ×öç$ûœïóûD[dò¹î³€òsã¯ÛbIýW{ñhýlFgrŠÛ6ö^«þ6Þ«gÇÔsu Ö;]R_«<(OïÝYèÜéO<ÿ{õÐ~½²wýy2ÆÝ=™´ÙÄMýl~3YûêýæÚ™N×@Þg›½^Rwþø5‘ïïê=Z; cU¹_'~¯}”øŸ×æÍãÁ½iÊÿìÑU ¬ýþ‹wÿ¿|é`4¼õAr¬ãJü}apóh4Xÿd¿â¶ÐÞL«ÿi øöÿô‹Õsþõ™ä¹á«XƒxÝ~~!~ß½ç“ÿ.÷ÿi–ª%彋ššáÿ~ÿûä=B!„þ¯Ðÿ‚  m8p 1mÎñ‘s±Û8ö4ûï3÷uÐ$Óì¿|ù¯âe¥+;f¾oYÌ¢üucçûèâé>/Šç3fÙ¼IÏ5µås³ñª,—²¾ºö2lcš®ÑÔ¯lŒ¦bŨs®mîÒy-;OšwY Tñ&ÿ^Wï¦qªÖ”4_þíEžÚÌcY.u¼2ÕkÿMcÖñ_³Iÿ%ãK¯#„ÿE9ùòß6†mÌþKûúò?=æ÷Iß²1‹ö0]¿²:-«Á²¼%1MùHúëÆ3+§Ë=Û¯ìs‰§emM!ÙëÆnãúνh}ùFZï.Æ Á4øýäâ¥Pµ…ÐóÐWµ…ÐóÐWµ…lNê9ÓõuúˆÙµ…¦üO¿ãå?+3ÿsŒ¦üÉæÿaý÷£Íø]õßäiä}5ùkZO¦£©¿4OIN’vÝõ•i“w[(òJ²%žûòßöi»mýek¢¬ß´ø/[ÿmjÄf-K÷*‰wUý—ÖPÛý7ÕA(ÿ¥kªê¾ »^ü—Íyÿ}Ä—x&©—þµ·…¢u`óPe®«ø¯«Ý>%¹g”µå?—öŸvÿ]¨JLWyø¸×y´üÇÔ¼ÚBèy諦 õw±Ð.òÿ3á{,hyO|z„ÿí!õÂä¿îsÝ>Q´äÛmú–µƒLž”͹´~tŸÕ‰n±õO·¦mÎ7õ5Ŧüb»&¥ýê¬ÝyÔÚè¿ä\pCÑý_Ò·È»:}Mm=ç?µ!‘ çÃeÕIDATxœíÝ}tåðï$S@Ai….‘·ñ•´Å÷Å T HUÄîZiõ,zêÑ–Z÷X_ÎY{v¥ëV)Û{Š)TêAEP¸º¤¶5g‹€$*C¥€E.oÉMnnfÿ¸™›¹“yfžy½3“ï眜Üy{žçÎÍýå7/÷w•æ÷Áèà¡Cjccc¯ùDD}Áyç‡agž©ç—é'ôrôèsBy±gÏ'ùÇÝ/rGC” ëëѨÆÀ©h¦,(ã‹Á“È_ëë ²M¥ùã}ù`9fÌÈ"ü²{w3N"¯ôASihØÂ`™`»w73hy¤Í2Ñ ÷üê/¹ýOÍÏSËÏèYá”ÁëÿzNGH¾3f$Ñf›Oÿ½èÇRë}þ¿ÞNYcc#ÆŽ=·×õKàÖ›'¡i Êû)ЯO)ÁÀ~%Ô¿O)ÅJ7þxE• …O{}MŠ¡…‹ž±\~ÿüy¶3µ¦ëëŦòÙ{xáÙ æi抯?ˆ²ø¬{þâ1À ƒ¥8>l©Ô É¹Õ«–çßxó\éezcǞˠI}šl`)Eéu»¾v7þù_žî5ësÃpâÀ\:û^(C«¡v} tŽÇÛKgãTÜÃëi@$¦ýw¼þ<Ü4ûÛ€—_ZV0ßìµÔ7nƒ&ÅŽ×@§ñš© 3L½+†àؾl~ZA+Þßøï¨8s ¹q!ªÿ!‹- ï½}íÌ™Óuk×¢væLÔ­][°Ž6_[Ǹ̮Í0èÇVŸF =“aíþÌ0hRœØ› “mÀÔ‚å׿܀’Ó‘=Ö„öÏ·â½Õ›Ð‚W0|Ú:L¨ü)²o†LG?ô3ld`± ªA÷¦›f÷ÏŸ—Æ@©Ï:e0h9'<$?žþàØ¾,Ϋ¾ }5:ÒëÑÖZ†“­ý0ê,{÷e{%”fm‰óµéõëÖaúŒX¿n£võÓÓgÌÈ?ÖÚÑÏÓÏ­o6_?.-Ë5k_?O¿ñy§­Ü|Ëw ‚¦æþùópó-ß‘jC¯²r4ƒ&‘ ³µ£é(…Ú/ƒ¡ÓWB9uú¾jËëÈþOvvØßJ¤ ý´~¾YñÊ*(™Í­o7.«À§Ÿöûùù‰A“Hž0`žHç‚a¦½JÆx ü2½¶Ör˜…P7•LÀe…Æe^øìôÛ{ùG±êÅßšž³ÔÎiºÉ2M"YÂCò“Ý&¨ý2Ò Ú]¥5®£=6›'Z®ÙPW¸¾¶¶×rm™ÝøDí+ŠRо¾M«mdÚ¶[f楖KãE-hΞs‡T{FãÇaФÄóå¶"3m™\®˜n/f˜éöÂÍ3RÝó6ÔÕáúÚZapÓ–{mÇj™“qúÅn¼vôÑ윦[ š”d~\mF¸ŽÎ2|÷Á_`:ä2Ì Û¿ŒQ“£Õ0ßh¼.ËþuAÈàô}šÍ­/jø]Ÿ~Ñþ;ê³ÈÙsîðí5€A“ÈŠ²dÉ2u„±Â>]1×ΪÁ*¿Ùë¢ÏšíCqê•?ÀÉí+1jÒa´ø]ˆCwîºéÓñÚúõÅFdÆaåƒ>âgωt6Ö×£Än¥ÊKãWê{Í_³}(*/=ŽÓ*.Å—g.Š|°$g&L‹ÆÆFl¬¯ÇÁC‡Š=¢H°Í0`ÐÞëÑø§!óλ*…£696Šf›Dè)¾aw¥öäè×pîhÃ<r×w)î&NÇqDü,9Ñĉã 8Oê{0É-p žÔ÷H’™©ªªÌ?ÖO¢¤b†I¾ÐO¢$jjÚi[åd˜Ã‡(Ö8ˆˆ"éÀÁOó™aIbÀ$"Ç6Ö×㜑gõ¹¾0‰ˆ$ñ*9%ÒÆúzL­©)ö0"oÏŠjÀèÛ¶y$þ;°ë‡ÈÚ–ŸÎ¶·!ÛÚ†•5>î©üü]¯MŸë6JµÉ€I‰4µ¦&ð ÙÒ²PQ1*°>‚ h{VTãê‡vâ? î–°Íï5K¯{ù#}ë·¥éV\V9jÕ,”œyÔŽ#ȶ6¡óX3”Ãà/M·¢¢j%v½6×ÜÕ€ÿ]:ÑÞÑdŽÌÓÎ]*ÝÃ¼Ž´|PÛ³¢:•]Õ}òÞê'ÏϯwI÷ôeìpõ"\–ª{Ü×¾Nf\;MîU‡¨¼ñºõWV3`Râùu;QEÅ(ìܵ£ÏžŸ÷Ö¦?bØóûe/úTß·«Ÿ¸ p¦.­¼ñÿÌMªÀê…?ÂW¿÷ž£qwdÚqù½‹±ù—Õ=}~ëçØò\uè7¬ŸÜð8>6¿ÓMÓç¢å¹«Þóç^EË7™þÖÖ«nÕ&%1@ÅEëɨ¨…=ïÅȳ‡†¨ôåÆuQløÙ@gî¢Ïª…còœKÀßCÆãò{ç¦Óï |H9ªg߃.ÃÙ׿årÔΕ3Àv5_´¥¿”ûÝÞ‰‡æMÉ?ÖÿN}~-zÍŸ…Ôç‡Ñ6äK–mò¢õ ~Þ´^Q1 Íûço- RW— 5Û†—žüWÁrôm[P¿äIàÀ;@ú@ÁO9Ò8¾¿-€QÒß”®”Xÿø©½£ðм)xlÑ+¹y'ü€ÇæÏêYÞ½3L"**Få?$U^\ø”§s‹ïÜŠº_^tŸq×÷€t3ê–¿‚êû\d¬hwÔnJ+CSû66üðà‚çòó›? .xO<ü-@[ëñ‚ùdzƒ,ÛeÀ¤>ÁémD2‚ü ¹Æ¯‹0Õ÷æ.½õäù@º/?³&ð ”SQ: %÷ÿ'ÝTb…ùã´¯¤½AƒÆýåL1ö—›>Ãôò_ wé&úÊÒŠ"×®>Í6fLúyúicjn•iÉLëÛ±Zßn¬¢±Ø×8_Ôž‘qŸ˜mo\nü-ÛŸhœ2}ë×µ'ÚïN_k™6­žsX¯¥hìv¯•ìXDÏ9 ûËjøžaú%»ËìC) ˜²D;ÅøÄ­¦Ý~§Ûyy‘d·ur¨m÷Ѧ­Ú’¿ÝIæ é´O=™ý‘´×ÒËXdÚˆûþò‹ÔEEQòÌúÇíÐÜø»° ãœ.¸ ˜~sºƒ‹}Ƭí5ñ{l2Ù£_mÚeÁÚ2·ÿ‹ÉÏ×Òk ýGXLaþí‹He˜¢Œ@£ç4þÖË}…¦ŸÕîÇ=ß!WZZüàiÇìp? ý‡9Žbìƒ úäkÙ{<2m_ß_!~–\AO|Îvw]V¸¸Üüg*ÖµLÿÆCê°ÆÆx³Ó,^ÃâòZ†Áì¢Ù:ÅTìýåè¦×¥vi߮܅\véÏ·ë_hUU{Mò*dN´ëÛ°ú#“Y_æ°×ê9ȶg¶OìÆ/;.«¾œ¬§ïCæBq~-c½–f˵”ýå•mÀtrëÔŽ(;õú—C6õ9Ú>݉“Ÿü¥;ŽãèárÛíÍ2 ™efÓvó¬+ú£•mÇìðÂI›²óE훽1dÆ(Û—ì<ѵ›}i·mÜ^K«õÜìkÑXµi««ÕNûq:† ÷—Ómõ,¦ìMé2Θ8 8ø¡pyÛ¤¾õEÎø‘Áűo"§’¯Z¹Øu­žõ"ÞyõøÛ»)([÷BU»ÐÕqº:£k|9n™û¦«ve¸ý/T¬7pØý3PùõŸßM?að£ßbŒûËœ£€é5ãdE""гÐ2L/ÖÖ½zŸDAšY;¥ØC BÍ0Y“ˆâ,´ “õ0‰(îݸî%Ãô£æ 3®vÝ¿Æ~DýºOXÏé ÆÕçJäF"êaÞ0ãj¼ºîÂi¿È¶ë¦³m´`c|n«>¬Ö jÿX±z.²ÏÃn]?iû¨ûŠ¢‹õ0à&XšÍ³ t¢7³ÕzqÌøÂøghÕ'‘&´Ï’ûUó†WçÌæ›Më·±;ܶ J¢~ŒóìÆ+j_4ÏŽl µ+zžú}h֟ݾշ©el¢þÜ<Ñþ·û;±›/ú[²êÓì·ÓçCÑ»z˜¢`f VÓ^²'í:Ö“=ôÑËöN÷O12@³¾D¢ÃkÙÃnÙׇïÉ'0Í>ã«¿›^»znü]؆±…hÔà úÜ.³0f)Voxc Ôs˜­Æe–z=¯'ÚÞª}»ó±~ð#ر¿(ZÕÃé+õ0Ýp›¹ÈnãùÎb¿Ù­Î¿ú1¶¨=_Š®>_3ÌsK~öewÐVY Ÿíʶo•aÞ÷ß’Ùeò„v®¦þdMM;Y“ˆH–e†é·w^ýÔT Š‚îz˜ÙÜÏ rü£E=LV+¢¤a†Ò¦ßX‘ˆˆâ,Ô€©ç¤òÿQ„x[Q¡b"&"ò¢hÓÏo£$" CÑÉÝf˜›ž,¼0uÅ ~ ‡ˆÈVhÓ{:_¾o,núÅG¶ód™}÷²ñKàý"úžg™1è§e¿/šˆüj†é¥¶æ¦“Qûèh?ø¤Si¤Ói¤S)T]3›ô¾ꊇ­3Ï £“¾œŽ!Ì1QoE;$wª@ùE€òá@¹nÙÈ)ß,XwÓ¯îñÔ—–Å™euúyÆlÐj="Š¿ØLtHZµe×ç¶ëhÁN?möØîðXe¥h ú@¬oÇjÌD¼Ð¦ÛÚšiH§ ¶«ûùÏLûd6§c&¢p„0½|ºçèñÎî`y=´LÓL C¤2K«`c\f¶®ì<·ëËŽƒˆÂZÀôúÙñù«öcéÝãñû§WÛ®{‡ 1‘±¨V¤a $¢bbµ"""I‰¨VÄÊGD†Dd˜ÌV‰( Ì0‰ˆ$Å®¦ŸmÅ©¶f’nbOÒs¡¾%VWÉõÛÚ ³¶fn(OÂs Zl3Ì(ÕÖ’Q# Ï(H±Ì0œ¾¹ƒ®­é¦N¦Ýúz¢öŒc°[_æóêNê~:í_v]«ùDaŠm†é‰Ïµ5­8­“i·¾Õ´Ù|ÙzžÚ´ÆªO/ý[µ!+³]ŠŠXg˜ú7¸±Jº¾0jkÊŽS#*,Zß Q{VŸU Æ'Ó6ƒ&EA¬3L»¯ˆJmM¯…‰½ò³½ ƒ»U6jöO‘(L‰¸Ó©žÚšé\°Ôjk ~´`)›]ZeCÆÃ^™Ct?™úWî)jbajœ¾‘ü®­ ˆÏÿ9ý»õ­–[}?Lÿnê~ÚqÒ¿h]^𡨈í9̸ÔÖ´[î¦Ö¦U0sÛ‡—míÚ³ëËî¹1HRT(K–,S«ª*“'÷¾1©–Þ=^j½¸””ãE¢`44äîÃnjÚß Ók[q „²,‰‚ÇjEDD’q•œÕŠˆ( Ì0‰ˆ$1Ã$"’”ˆû0ãX“Wµ‰â'–WÉY“ˆŠ!¶&ëaQØb™aE­¦Ùø4²õ-ÎgI¢àÅ6Ãô$Bõ0½Ö·´jƒ™.‘¿baF©¦U&gW¬Âª¤h¾l šDþ‰u†¥z˜¢¯jÐ/³ÛVOTwRT’u$‰‚—ˆû0 ²¦]ù3·Ù¦Y?²m0Pù#Ö¦& õ0ãÑ2D·õ-E×IÍK^ð!òWlÏaF½¦“^kQ:]—ˆÜa=LI+GDΰ&‰È9V+""’”ˆ«ä¬VDDa`†ID$‰&‘¤D܇Çz˜2ø±F¢h‰åUò¨×Ãx$QÅ6ÃŒR=L»Ï´Q2Ä2Ã4Šj=Lc™5«2lz2Å8ˆ(|±Í0=)b=L'53‰¨8baF©¦ˆ×@Ç`I±Î0£T3(¬œN‰¸Ó© ëaÁ®Æ&…#Ö¦&jõ0E¼>fšDÅÛs˜Qª‡©1+l·ŽÕv2íQxXÓËÀõm‰«‡é!9•ˆjEDDaè“WɉˆÜ`†ID$‰&‘¤ØÝ‡õ–D”\¡Ì(Ö°U’©(ô.˜!ZFDÉj†¥–N ±ð$Qòí¼Ø5,Eu*­êWšÝîyè«~ã8DËõóeÚ3Îg™8"ÿ-`:@ K7ŸÏv²¾UÀ2 jf˽Î'"ÿ„0ãRÃ2ªAÇIñ™l™ˆä…0£TÃÒi0)vÐ1ËX‰(<±9$ï©a Ô-~¾§†¥@* ËJC¢ó–"¢åQÏÞ¢>>¢8)ZÀŒK K=ÑÅÑ™ç;=W*Ó…'Ô€¥–vµ&Ö¢-·«)óØI{Æif—Dþ -`zýìøüUû±ôîñøýÓ«m×eé6" BlÎa}'ú™2»$òOÑŠoÅ &‘$L""I ˜DD’0‰ˆ$1`IbÀ$"’Ä€ID$‰“ˆH&‘$L""I ˜DD’0‰ˆ$1`IbÀ$"’TP³¡¡¡Xã "ŠÏî>w·{/Ï~?“ѽ½g÷ž„|ïyn/÷{BëÖ½@ ©j"jjº¶ÔÝ¿Äb-ø÷ ¬X¬¥ªÔ}U[[·í*]7ÀÕæ_¢”ªàÌÒd†„È —ÇŒ™çyrž¶gÇzr(^&|ÆÌóÌ¿d^ýÂ8ñŸyÇÊzã˼¿íÙ±ÓíEÈ¥QíÞ*ÊŒ™çµm˹͚3û§IDATk·Žõø‡ìÍןM!"¢T*óúïG_ró'~ö´xB¡išÆ½Ë²ŸÝSÑ<ž¥·m‹Fô±ÝØï°žpþyv¬¬ŸÙüTæ‹¿ö~µ;þR×þu?˜ÓÁÖå¯<møéƆ¦Zo¼á† M_y4j>0 éQ1núÔA‚Ð+ShsâûnRD†(œëyHøL"¦ÓjˆFîõ¹§à;ﯴ±Ã¸e 7vr|(k¼4J÷r¾z?øñ'úÒZo\íK_rýöXMÓØ‘3t’qÓnÃ|Ó|¯åpã&;kàî±-ù*ëIDAT»7§fv'·|%Ÿ¹äª¯Ã1nÈ:3@Ôÿÿ¾þ½7ܳ{Íò-ºÿŸ»WÿdÊ]{]Ïf~Õ*þ ÖhÉ=Ür—¾áÐÒµ®Í,Ûv÷VâKt_Þ-³œõú½úï¢y $øc̤¨ÿ Û¯ão/Zöw:þv&3À=œƹ£¢K»“8ž¯ÎãpŠ‹7a 7§I.éŒFýÇZm'¢tZô·¹Àß{¯bãyü*1Ï,/n°Ý¶È½à«tZ£T·{3›1œl^“骵yÇÔ½@žÏ¥+qrnÀûá“É PªÇ½™ØnN{1?œmiì1žV\Ïc׌ž¶¾ZIDAT}Î*ðû*HxàdˆÒª@3믵%Üí\ïu¸é°!ø@ù=œà• œËywóu®Í.ÿ]g:~ËJx_Æý©$€ôÇ©„7^:µtÝ¿Äb-¥î”>= 3$@fY¯Ã1£LVÂQX[>Ƴ6jéŠqY ï–jé„ùM1¼ 3ÌÒƒè«U§þÑKæD_¦·ïŒ±uܪïÑâ×…¢X¯RHxàœž¹mâèáÚøÙU#´þc™Þ÷ÓÇã¡®Þùü¶CViñë¦/Ú»cÍr9`–8Õ½)"¢^Ëþ‰c–ô¼ •ÊQ*•éÿ×"8ƒIDATxAñûžC§÷põ±¦®Ô»™/÷öw½Ùûi»ræâÖÍw74mlhÚ¨õÅõî}óÍõö<¯®§ŸÐ“Ó~Éjþc–DCÏ™R=||Uøû¡3Žª© ÇÕ#Ï\ÜøèK]JDWéµV‰FLÚd9Ч²¹e[¤l;&Î÷„çQ£¢KjTŒþ¡ÎÚñ¯í÷Ž˜´é¿ÿ˜­×Z=ûN­U.K•.ó¸g~FpØc<_•ü¸§5ZæT¢Ûù¡°sþË“÷ ÷»rHå ‡ç£*ˆç“ÃÙl‰=3ëÛÓ^lÏ ›eÛÆ.–ÜÜšc–kœDÚ¡ÿâßcN=ÛŽIDAT½*&î÷ð›_í^°èŒ×SœˆôE‹j‰j‰ê‡œKCé="š½ô̓öè-{SçšäÕÌïÅjÁ0Úsó¼IðbÛ— ·‹;êŠìaOh¹iTù³+mMÌXmW¦›}h¹}™ ͸x¡CƒQg'¢¶¿­µÔ[d稔×4•“—Še|.aO|RŒkéÚIæZóv{Œ£ ¢—ªâ>t@<ÑÒþDK»¾aù¯yƒå\_\!Ù.ÃJûváKûÄQšké®eë‹9àl¿OAD}'Òw/œªoÿMíj~bKóÒÙÉ£]}‘COãŸÁ·¾eÛ†;Û7šÙVù@öâDbÕIDAT<–=쳕¹–=yt¦äBëÖ½àÕ‡F¹Qa§Ðl3îlܵ·¥Ý±Ä{Z±LÔ¥Ìy,Ö¢ÿûnݶKÿlYèà¯ŽŽºeî•óˆH3÷¿D4þëê°šoæúˆÅZËm/+}Uÿôh,Öâå,Ýa;íKXS^c¯fbÙÏí’ÝvEÓÎy¬;s:ÝùЋ}½ÝDÔ¼tö½Ø¼t6{úz»õfPÑ<ž¥[BÈM Ci{Ë!ìhÌméð\àúÀËl†ßÞ³€Ý6oÄ^ÚœÇi‹3´bäýëp‡á1Òö®uêÅ›q;VHO*—zâô§[¶ 4Ä^ñðW«A4fä°Rw¬ïÈ×IDATŠŸ<ÆðÁš6„„Ö´ &ÌÒd†1\~Xè"ÈpÉYþ`ñé§ÿpã?/Ug øD¾gk#JèÛªªREêÆMhÜà[ÇÀUUCJÝ(*¡„¿±aÊÔh’ÆE):ŸzjO'‰Ó¡Ž76L™6w·ß]UUáÊK°ý{+=DD”V‰²ÞnQÛ>t |„„Оû›8©×?OjO§~œ’ïßËTD6n© ÁzÕ7€ÙfÔïdC½­·¾[–ËHn滽ÆkÜ4.p§Íy?:†h(ü„OZ®¯'"êÜïè Öêz5­(§â­ þ/ûèr(O¶c¸'"ª«¼´>¹qkÑúT‰o(Oü„wf¢Äxÿ * 'á3€4ðYB™!á2CÂd†„È YÖµtÖ–•¥¦2GVÂñ{ ÌÒd†„È  3$@fH8€Ìp™!á2s¯x>imXßx{!>7Pa8 ?Øè†œçIDATÖHDDÊüøf"ºüg úþ)mád;í[ž26Š×MÈ‹5á7LªUH©ß±Þȶ®azîhëwï×. jÏÿ!Q´ h¬ W{H©‰7×7·FÎ'5~j$×ora]a<5䄹Ҧ(T!RÔC´¾¹u}$º{FJ=D»>iíìiÔfUYfmé_Á½–®Qç’»:®œªßÞ·<•x‘ˆ(™°À„NrÝoÙc×Àù´`à%\_o°úÔŠE“Ö†ç77ÔÕ4÷ýñf‘0´ ìì~ó½ { y-AÌ\1×Ò“Iµ§SßTãq5©‘>c·4¬MX÷Ía húIDAT2`y'Ðù@À•5áãïÛ³a®¾­&£Ó–· ¾1öþs“ÆÍšªß•üdW¼=ɞμX¯eg®,ËŒÚ=8à¼>yî~[ý"\Z%"¥&¢Ô¨üföË ût1Ü8­ÝÚøåþ7mYÒê©×çªmÂÉr畃ÍûíVáeq8-˜å˜p""uðRÃn ]Áý-¹{ Y¢ rIø©‹pŠqÊY ¿xߦǧD"DDjR¹tùÇ~u <’Û,ýŠ[wûÔð> 3$@fH8€Ìp™!á2CÂd†„È,‡„ï|pÔÎGù×ðœhÂw>ôx´IDAT8ê»?ôµ+à9¡„ïX1Rw&£µ­Õ¶¢Ð‘<¿êK(ù+÷¿ZݾlÄ´%Í™î=Dtá-ÏQïáw·ß7ræŠÃ––‚µVýø´6ûip|&€DÆðTZ£/?£‡¯¡_;kòU×î^ó-¶qùÔNC¼Hd ¿ìá#/ß6|Ö5UÃÆ¼ºzͺ¦qè°1‡?:.øl©£ƒe¼µkIL}(×Û“-ƒÑ$&ô:|Ϊ®Í/¼:pì£tZ›³ªë};5 r,·(ª¹ ª%i¹V_5ö›q~t€àà'ÜxWÌx‡ìª'nŠmÉd4"š÷äÑM±-óž<ÆhÔÃNJIDAT0·ÄÌáÒšsËÂcÉ}tcîPàÉÊ'áúcFÈ'ßþž¾}õêcW¯Lµ±aao-;¹w9·4ÆÞB¢(þèòááý©“—¬1B>aÁS9ý­‹Ýð(TÁËòìƒ:_÷4Ã%wžÍ•¶Äó7yÉ""µC‰(®¼±ý™oœ¿ø?‚çÕÜj­ÚbnYx5UñGg ¿èÞÿí\·’¤&Œ/…ÔîÏúœÏe‰{yŒmƽ®æz CvŠîziðÇð™+>ùöᤑF4kÑ/IokÙ2gÕÑ"w dû~øœ•]Dôç%ÃH¿¼v³Ý¥5(gîï‡#»8ˆEIDATÞ•ËåoÚm€Š† 2CÂd†„È  3$@f–pöC ¥ê @Eð2á!óNÂ+åßCOä¶~¸+©ÜRþí(ÿäÍã„4·l®7¹ÇÚÉ£Àûqq»CÏP±üJ¸·|š¹;øs+%Ú–°.r~Kö$Ü£*K‘Nn!a£ëm¢ðb‚©H 7Ï{Ù躎Òòûüe˯w˸#6&ºEæñnWͲ_cj§; ­Î÷²g9¿±Ç\ì Ý@>^&Ü¡všëxžÓMv®ççëp2ªÂþ¦ r‚„È  3$Q’ŒƒIDAT@fH8€Ìp™e½‹µ”ª૦¦kKÝ(¬„ã÷@2˜¥È  3$@fH8€Ìp™!á2CÂd†„ÈÌ÷U¼=?wìø¾ª‘OP8 @„¿õÒ6¢ì§Kö çäî,ßWD°[œˆ»l·y§ëRDX~ÀÌ÷z鹿-×åØö9€Á¯×áE;·È¹ÝòIAS¾ï–åzµ‹°Š·ö(wÙ çÕˆìÎà°.³˜ù»ª‘øÒB‚‡ä´”ï, WÊ„c¼ðÆp™!á2CÂd†„Ȭš°Ô €¼þNŠÆÊ×ôIEND®B`‚new-repository-location-url.png000066400000000000000000000330251203611042400345130ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images‰PNG  IHDR¶Ÿ¼È`Ù pHYsÄÄ•+tIMEÕ (Y5»îtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝwœÕ½6ðgŠFÚ^\vÝØuÀÔÐM1!„Ð %Ä$Ôp!Ü×ÉÞ{!„”{!7åB  ¹i¤ á°CuÀtSŒ lÖÝ»ZIÓçýãH³³#­¶¯íçûñg=Íœ9’W3g4£A€ˆK.¹DD;«;î¸!úP #R„ãŒémuuõãÆ…®žÍ›7¥Ó]«V¯A$(óyÉ%×ï=w¯Ãçí¿Ç»Ð4m;JD4ò<ϰlÙûO?µôÕ×^)©A òqþ'š=kr6“³m'“ó²ÙÜhw˜ˆh„TWWÕTi†‘¨®©zwź'þ¶D¤¤ÊÏÆðIDAT`úôi";>Ú´i³iÛvWWf´;LD4¢êëk Ã?.5{Ödà ®ô6ÊÅ_7ÿè£8rî¦Mé ¶fº3¹œ3Ú]%"UU‰šÚš‰›Æ¯ûÇâמxòI@ëäæM›º>xÃÖ­,‰hûöÞúgüþþþ®µê´ Ú[¦¦Óv:m[¦ ­“›èâéL&“Ë9©”1Ä%"Ak7¯›ñûûϹø„ ½Å6 €Ÿ?kG⪂NèlVÞ[ÿ«;ïßøù‹§Œ› —s2™|½¨0’FçV“£ØD´½›pß'öl§‰W×x–]É*ÚÛ8ù³‡ó溮 V`ÛžeÛ›ºœï[Íãõ9×ÚZ;œ¯”ˆ¨ß<Û…8¶âäÜÇÖ¬p|Û”Ÿ_x[XÀο÷~ñÔÆ¯ ¾ç|¯dk:EUUEÉLYRgá IDATAs2™¨MZ©”³ÍIÕ$,Û±mÛ´lÓ²s9kÅòÎîîÜQGÏhhHA «°âÝ·þí߯þÖ?œ={NÉ­þùÏ¿óÍ×.üF…óŸ}vÑ3Ï,zqés—\ü•ùó? à®»oyüñGîýÙ«ªªs¹ì…_øì±ÇžôÅ‹®<ëìãoúÏÛÚÚf„ëžuöñ~óëÇ¢ Š™Â±ÇžtðÁóöÜcÙ;>x¿ùí}Î:óó÷ Ž@Óãñ©QP‚@ (AþÃs|€ O˧âckÖß6åž3Ïüö‘l×Òo& "2P€ |¸î}›×¯Ýw¯}²®‹"÷ÿüNÕ©.Ûésþ#ÿî¾ûnÿÕýºŽý“;”2ôÃ:~=÷~üñG|+“jlX¿¡ÀûìßPðÕ¯]ö³Ÿþ¦¶i\´åâmxì¡Å–¼ðÜu7~íkÿçº>¢ÿFST5©© Õ©´í,]úüKK—|é⫆~+CÞ"U„ÿ7%@P¨ñÂÁj¸Ž£:tžºö+WMùÁ¦ä©§/øÃïÂ|\û•«xJàYAàºtû*ÛŒIDATMC€@ ª¢ _EªH¥’ 6“€£W9(P 'ÔںĬ]Ç;ŽcÙâmÛŽe;š¦%t "u䣸ý¶ïøÁo>þ¸“ºZæ%ʞοï¾Û4769Aðo×~[W”Øuön6nÚØ:ijgçf³gÎUï¼ë¿¿|Åšúú>·•ó½¹ûà?¿÷ÍGZlIŠíA:ÿ¼)U}øïþ€ýòÿÉ õ¶øIüŸi´~á Ë;ð<(j¨€àÃ+¯œzË-(¤d˜^yeO[¾ÏP¨‘Ð5EòU¤ªêº P§"P¡þq3|ßô}ß|ßK8CÓIDATÓ¼d•—0ü¤çº¾ï{ð}Ýó;ƒ@×{o*(7®pÒ ŸyäÑ?mܸ¾±¥%ìÆƒþöî»n=áÄÏ„s4]+3_8áÄÏ<ú—?-zê‰CœbÚ.mV®^±÷>û½·f€)“§ù… <êˆOüùÏ8ïü‹¢!m³xæ!¦š®ýãOÜ|Ó ~õú#Ž˜/žýôIG†=¹è‹WœrÊ™b~ñÂk×~ðä“ýͯï?áÄÏœ{îšÄº~dñ)'ç<þä#~dqÉÂÍ-üêõo¼ñÊå—_#ÞŸ_üσ M[Ï;÷”³Î¾à¼ó.*z5ü´„%™ßIDAT޾é£"(Žx¨J4ŽãEZÖ\yyÛ-?æãš+/¶¦®ãt]SòÇ UU!"RS õ®°8w|ô×+m:¦eeM+—³s¦™ÍYYÓÌæ¬œiæLÛ0ÔÓç}¡çDL(6¬ÿÀ¼ÃŽzäÑ?­ûhí„ÉS|ÀâÅ»û®[ø_·Ï™=çÑ¿üI¬ iºl~Ø™SO=gÛæÍß½ù†“–½ú™SÏž2eš˜Î9Þy÷­§zöÝwÝú¹³? (¬uÔ¼ù÷ýòž|à”ÓÎ Û‰¶ùê«KœòéÓ¡*O?ýäÍ7ÝðÃÿº£¾¦fÁ¥çéŠ2ï¨Ç oºIDATcÃ…¯¾ôšã9áê½t⸠óŽ:öŸÿ|ææ›n¸íÇ÷&u}Á¥çÕUÕpða÷þìöçŸúüï¿û妎ŽñÍþòè3'žpÃG8ýØC‹áã¹——·nnÆ”¶9³v7 |ð¼»ïºuÕÛoxè¼+–8dÿC EõÔÞu±Â:r4ð] І@ä3(ü§ðÝ@éýqˆÖÇ·M¹ó¤“£Ïún~a-¿[ %P´ðX¤¢)FB (âÒh sÖ®ößÿã¿úÕ½«V¼ `ï=÷QºYëœs?ÿo_7aÂÄ’mæß©“óõÝ·nüÞ>s÷ÓŒD¡3»‹Î,Zôø1óS"åç^ûìÎÿëc˜±Ët­* àÑÿýÓ¡‡Í[ìîêºèâ+|ÛUtU‰Y´zMªd âí0cúL­*©3¦OÿôI§þóÅçwäÒŸÐ6­]3t=‘ Q0#GCOe–OH¥Pþ¹ŽƒD"áyà+*€K}8ÌGö¸o?áÓÔÀ‡7€ë8 CËü"#+]€IDAT ;Ú %º3ïʼm[—®Úòϵ۲¦Ë™Ùœ™5­lÎÊåLÓ²LË1-û²KŽ2ôöpÃbGý¿ø€Æ†&¿üÍý]ti"¡xöوŌdÏ •‰„&›}7šÎ=ÿ‰-oüöu?»çöïþÇTMmkkðòkKLž4%‘ÔÕH–54Ô_sÍÿ=ãÌ“dmxì¡Åo½óæÕ /Ët¥š”VèLÏ-y¾ŸH±FÄüHÏõüLÏûâ/CœÑ™ þÛá‡ÙTÓÝb´½_{O ‰TÏû æøì©g,XpÎÉ'Ÿöðøìâ©®®6ŒD,fähPâ]`IDATXFŽ†È›®(½KH¾ç»ŠùcóqåÅϼóNRò'ÇÊÀ÷ľ. =¤ªZˆHM…¦ëJaO^ àN©õì mBÍÊM]›·Šýk+¿mÙ¦eÛ–{ÈA3Ž™¿GÂÐóÕK( Þÿ}±¥0eÖ¬Zõ±½÷0oÞQO=µ€‘詤Œ„.›_ü¦|ꤓoüöuÏ-yÆ·ÝT}õ´©SÜy÷­&Nh1’ 5RU }Ú´©?½ó¾/]üù2m|ø!W^ñ•ïÞ|Ã^sçΘ5StFŒt žãwìƒó/Ös1³eâ„k¿~Ý';ñŠùÒ³Ïþã{7ýHÖ8öØIDATQ•Øê²×.Z(ù>|lΜSN9ýâË.0w}Rµ)£¨(fBŽ þÏ4*” Èï·*P §Š ßW|ß‚@Q”+ÿþ¿a>._p‘ø¹ë=w£’·óÉ øàï̘>³ª&¥—J|¢†-Ã3˜®¯+ ]ÿüa>¾uáÃ"â­ ¿8çÞ»<¶fíé»N¿áà£=/4Ò0a{Ží!æÇ?¾}ö.sš[šÄsæÌÐÖ6£iBct•h çž{^ÇGÅÚŒ.–L6ýëÿïS'÷Ào~ýù_¸ã¶»ï½÷žç–ìXUU£ÛM&«®ºfñâ'?ùÈeËÞ-ÙBlùpzŸ}öðõ…ר©­.~-<(6:XDŽŠÞçùôL¸KáƒwIDAT?¸á |}³ìü ck/;ÿÂ=~~/€:Òõ¯°nR¿ Eñâ’º_]¸ ¾±Ql&¦zá쟢.D¾CƒpvtalìØÜµµ{únÓTUõ}õ;Ô7ÕMhm‹oÛÒµyýÖú¦º®­i3ç´•Ÿ/xž—îÌl^¿µ¦®º¾±¶º¶*|ÊÌYkßë˜ÒÞV‘+ßZSÜ–ۚ'4FçÄslçý•ë&LWßX›Ë˜[Ó™t¶¾©®yBƒ¦i³f·xì¡Å¢‡-SÆ×Ö׈»»2ë×n0iÚDÑ1Û²?Xõ€¦ñ ÍuâJÑÍ… ˆ‡Å-”|ëÖ­;âÈCﹿ9fIDATýû}|ßpë½ð³:*ø?Ó¨ ãÃñ·“Oß­}²ï8ªª*š®öõ¡ðžëû¾šH¼óÞºO<ô@z]Û:oºùžü޶iÍ—ƒù-*Aáî_…­ˆtì MùS‘EQ‚@¸žºKK°Kk؃9{ÏŠvhb븉­ãLÙ¥¥’ù‰ªª”X Æ0õ½7Û¢Ð:eBlNl1ÃH„s #ÑÐTWª˜²KK¬‡Íã›Ç÷ ßhS%7[ ¸…âîíÒ6Àç>wÞ”ÉÓjëj »40"GAX—‰]X%€8'@Æòµ ¾ªõ”‡eø¾ŸóUX ;Ú¢ðë®Q5$ŒDïÝ•NIDAT1ô°V£E¢¼T”h\‡_ìõ;’?6¹£*>shÄ|åË >è°ñëêªJ.ÀOê¨Ø‘Ýǰð«‡Ñ(¿:6Ø­  \¿²Æ±òð|Ω‹L$4±Å¨6 DPëVÂo¥0œ(A¯3Ÿ£;Ú§uËÆM/<· @¢ÔWtF¬í3'75Õé’>ü°Ž¾ï£ ÜmQ±È^±°úÖ›;64•]»×Ûš½b¡žÐEø z¾£]ߨ¬ó’ã}9xÞܼDcß)Çíû Vßzs8G)œÃƒ²Å[öŠ…§·o4 ë ÷®I‰µ~8l}&"9Ÿ#Õ…IDAT<òc8ògXÑ´¬hŽ?á%uß^¾aH:GD´c8,‘+Þ]¾zõÆQíÑX1}ú„ÃÝ""õ„ÞØ4~ëKoÝqÇ £Ý1"ëÆÂhlwÆ®­1º3½îqè¾jíFƲpfá ·÷HwÖr«“zÖê¹ø÷-7ý÷¾ûÍ_`+w½["¢1Hä£i•¸£úÊǘâ|ŒaDÑö$V?꺊Hýåx~B‹G\¬„L»÷ºNH"Únx¹.‘º®Š°s]ßõ|]SEJÆP䬄´=ßKÔÅV‰¥*#’ˆ¶9?M™T²ç{nÑ|Ô 7PpJÕ•Ñ4ÌZ®¡©®ëµZŠ»IDATWGšr<ŸU$m—ÂCº®Æj„°´Œîb—,!mϯNêžÙ z ²xÇœ×$¢íCt»gG»Ô(6JU‘ÑòÓ‰:”Û‰bDѰ6¿X]þæw|+-æøë^jýTÔNÓÚøÝ£N?Fm™ÖD •Ô»];ÌÇp/»¤’%¤ÅFïúQžÅ)Ɉ$¢!bw»üÍÿà%gÃ[Jz5’@R ª TåsFUÀOÖúé—ƒì1Ó}a+tù‚©G%'ÏGÝdÙF¢c5(T‘áÃhÆEó1ZBÊÎòëz½S’IDƒ–^g/½Ý]ùÔ«Á”&ì_¯Ô·‹g¸ÈÞIDATT+ @±¬ ™$«U~s“b$Ûå-õ¨1Ô-[üm>¶ÏyÃWE*ŠqƒÊæÓâ›L£È]ù ½è[AK GMGs•b$ø¶£ºYÅÊ*–% '‚dþ¶"Š‘7ŒAÆö“µJµAs ¶d”Üëï_ÕgžhõMUªiZjì($*.!C¶çšŠ¢”,yR¨("Å';Ö‡0|Q‚xiÅYÎ)~ ÷—¶‰ÑxÇ—4¢ÒëìEßÂþ“P—BMþVKA!ÅÃp"HV‹ TÀh¶Y¥€8ÄæIDATÛ]ùÔN2¸ÌQ󩥉•á(v™ÒÐÔ0‹ó±¸„ÄN{ÒO˜#¡ât°°M” ÍánŽh„ùéµH"¨K@2±E¥pãŲÂ|Œ l§x¦Rm gõjÝ á Ã]lô>2ÜÅÏj”•b"¶‹]|¢OTß­Jbx%¢’ùÅ-—Y,œ_¼ŒÒ[lù2Óƒ4ÈÔ+ßí _&J½oÑFbs*Ü.ŠÞ¨!|ßhgAyi qûôŽ¿p·‘r‘€CµºYáÝž­|µ=Kϻغ®&ƒLt­’£4¡W‘JïB¬ÏùÅ«WRm…‹…Ë·2šÍžIDAT?$ŸdÑT¬A%òßà •ïvå/36?öÚîÆÖ*³ÝÁ¿4ÚÙ%‘ TeÑj,[‹-9DâO Ñ„‚dulNž8i¸³”-Ye½‰ FŸy¢®©Ý»×)žû.Mì+1²}ÄO×õ-¥ç¢%¾ÄÝ;*û8ÍñTŠÀ L…T¾­’Ý“e\¸ðúÓç›0°f+Y,º‰h¦wÏi𲪻v׺;ÕðQ¶fÑjAK*h®QUJ²§ µ}½ºçC’±•´lN[²ŠåYu•¶É‰éŸ…cÙ[ßK™–[|rx™dŒ-\]ª…äDŸ¨þ × ¡A¶9ø.Å’I¨ŽIDAT4:Ñô@ˆ„Ål|0ÂÆ‡°Â¶,Þ‡!oœvxvmbëœi݉†TÉ­Ùª¬ŽMA¦Û³3ç(Õ $U ¹UÖ¥(Zþ¾¬ù§ê&ª5ÓÔ†ÝÖűHÇóK–‡±(,)¢‰Ž†—¾ßïÿy‘Ñ1ÜJ–ïSì8€fûÜ…/ßì`jáâ ´Ì2±­ a%ƒŒÆ¯¾Á·KhLè‰D“žhR=Ïß´<èZؾ™•Qì ÚRÐLXYXÙÀ²‘Ý*Zª½hƒ9Ûƒ$ =³SK5„ Xæ§]tì2ü.M´„Œå#ÊGdq)!ûä—9’X¦ý¡+cϧ-ÁIDATmØßFÊDØÀÒ­ü‹¤hú3yi¨øš†ºÉJ²N±Ò•ÑŒîÀΈ D‰‹Q^*œ4mOäZ˜†’AÆRjª“º¥ÔÀr“A&kÕ rÀ1ú3|¶ä‰žçkš:Øí’b§èžiÉù²u³ÝpÎÀ‰ÍÌêe ‡bÊt»x¾lùئËfís»Dc‘fFÙž¯9i‘†(ä#"çîD‡_B¾Õ­&k£ÏÆ®èS|:¤]ªP-‘%?K±¢²_Ó}6^fJÚ¬|±<[É.sùµ*ìvŸË÷·oýmœÃÜ4Ê"U$Ä™‘,ˆâ§i»)C`ÚùL…èO´x”ÒÜIO;¡3IDAT'îeÓèë]EÆøVwt·ºMÛÉh+)‹b:\Å´Ý\ÎF!Kž+^|R`DÑÓ»ŠD †iè[Ýa "R0Æž/þ(šjÚnBSš*G!ÅbeFÅ‘£,<£{Œký¡Q¡Št<#eh¢NôôjÓvÀ?Ã"1Z- Aa÷9Èm r0ÜÝ“1ÜÑ–•`DјS¨"~Æ´=[I)âLb‰XÌm Âî3]¥ªQL+š*bÑ´Ýâ}¢%¤iõ:ߌH"k«ðïêüuÈ‹3Q“Q©j™˜3]/Ù˜3ݪ”žOI…!ìè¸;W<•Ô¼ÞJ¸6IDAT{ÝŒH"[zNwz®ú­s¦›3]¦Rëú0•ZñPütìži!ܳ.y®¸ªæŸ%¤Óû;<ŒH"cІkÂ:QTˆ COÝÑ@LÝÅͤ*"ù˜o»è,ñ°ŠL%5ÓòR…Kº ¼1-=;Úᜪž}gŽí:J¯{™J‰[ƒ)šj¦ªÕ¢ä ‹¾Ž-ò1v8’U$-A2›ÍGqµ‹ðú»¢„ôôjH®+®W~ŒH"cb_@týTBÍ™n|o:·E74#ß,Ôô•Ï5UÓTÙÅ]¿×× ÃÊ‘#ÚD4æ•:uE{ÓŽÑÀ´\Mן MA¡„ŒÝ[ÎIDATʦ̵*Â㱑¦ˆ,þ’/¿ö;Fð‚¶E_@4¿*Õkà$¬5]óÜ^¥_UJW4µøüžPì(¤¨£?£uc†±üyS"Pên±þÇ^Klõ¡íXñæÓÔP-&[wÇxß±üÛ¾£é]EªªŽ_ ¢fLhŠçza>z®—Jêš®"òEš>KÈèvq ‰uD{`—bŒ‰^ñwh/î=TM ·émÂBðÓ›jMvJž¬nN[œñ͉Âmcßß lþ  V3µ.¦fJÍ_cÒPÝÂD¯ð*­ç"”Þ¸½6ì÷Ýè³¢„TUU’Ñ!ìâŽH%rKø[—IDATeï2/óoôú’²UŠ[Žm´d7*'.üÕ¯‹{Ògocs”ÞEµ}9ÑŸa;%ß®’T¾X™+±}½¾üâ·]ÖÂPý6îØZ“­{Îon®—.™®-{¥ª—õµjÕ+}ûYÛq´DÂsmã‹(ªE2†;Úá‰>ŧûCVEgeùô,ó±—ýj–\¸¤Ø%~ùP æ×·dOúì­l‹%_T?få)^¬’G—ÜÁÞÆÊ›íWç©OVÃsŸ:cæ´Ö±kkŒîL¾ZŒÝ06Å3Ïr–!»îuå¯+.„ùhàÞ5á_GvJ.<€ONÉÅd ÈŠ9dÌòIDAT‹Ê»ëj¿V —’T*¯Ì‹ÚaÞÆ2›.Ùl™·}¿4„D2Fó1ŽÈß ÑW‘]W¼¸x´}ßP{Ð $"cGÊðkQ¾À,6*¿vÅû€ëIñþàX3¬½kocÉúº_ÍŽÍÄAwÆÖ#'|—,£wIÜf%ŒÈêe. ™Jj]9ÇPUCU‡¦Š|E00Jä>0±]¿>ו-ݬ|­þþÇP~+•¬;ŸÌJ¶²ý¾e6]²Ù>ßöÁü6î„L?ÿ™îŒÝN¸n“xØX_ÕØ<~|suGÇæîîŒã+ 5˜5k—躛;6lÓ³fN[Ó‘ÎunàzA[ûº†rIDATÔðF4›6nÞ´©@]ó„qÕ±”ùº¡iy¢x´ûuÄ~)þ%+óÛܯ_ôâ#b}*yøÀÂßû’=)y´.:§dçÃÅdÍVÞ±>‰.V¦‘âv¼·±Âfû|ýZ…l°ëRª £cóÓϾ^UU•ËåÄOÀªÓO=ª»;óÊk«²¦SJˆÐëvgì¥/¯Ø¼µ À„–‰S§ºï-_±qÃ&9×ÏåìÝçÌàzÁ¦Mo.[`Æ®Á¸Æv›íš$I ÛÑ.ÎG ,"KîªÏ/9§Ï§b€JZ®|»²µúl¡_¯Q¶n™¦Ê¯R¦0)ÿ**Üh%W²Ñ±ü6ʦ›IDAT6]>æ†ä·‘T/ŸA›¶dÿúÄK†®¦ÓÝDê˜6µ@ë¤Öîg^WFw:óQÇÆñÍm¼\—iéï¯ÛàÛ€¹{ÎÐu5—Ëe²€œí½¹lÅÄ)Sêk ¦äl϶ß6£÷;â犋S ûÌGì¨çEÑØákùS²_c3gª ã¸ùûµ¶ŽëÎØu8¾ ¶ÆPFº3 à·WOo›¤ë*Ôê?\“éΟÔ2©Åuý¬étæØ¶³tÉKóŽ8€o›]]Ý,¿×‹íöœUò,ŸFä ŒLɰÃ&;ü ÜÉ©ž×å¦tmÛ&°®Áhm ¶Æ—ÏÈÅIDATˆvœÑÞúg6èì^÷ÉÂPÌÛo¿gÛŽiZÛmñµëLÎ4ÍüÕv-Ë1Mkæì“'Ïår–å pËì´­£0Š-ò±äYâ²ú1ßù¡zˆˆJU¤é'ôD²³Ûìì6?\»ñþ_>Þѱ9¶ä¬“MÓV¬ü@Ì|ùµ•Ý–å´´Nàx¾o;–åt¦³©TÒ´Îtvñ¢%º½DWÆêÊX¾Ùž”ÉØá‘†9ËÎY¶íûbÂsÜØŸh—XEÑð Eî¿ï¬%/¾)¦—½¹zÙ›«j;fÿöÛMÌlm—J%;;»MÛyíU³fN{ãÍU¦ÿ~aûŒn^¬IDAT6|ÝfWư÷ž3ÿ—g¤ßïxùÕ媓µ\@7’â\È5UF·’r¥¾K“нC‘U$ /_Ór¾ µuÜç 35mÇ´õ·þü×»ÿ—Cœ ”±w9ycg7€eo®6-wù»¤sV:gM›2QŒ±ˆ}ä®î\Ww®º¦êãû̶L×2ÝÇÿö|&gvv™]¦’ë okYn%dgDÑðR=¯ªpɉY³vùê5çžsÆ1-šDö¥sÖ¢ç^ýÍ5b9{ïe™î¦­™×oû¨cãÒW–‹œ1«€iyº®nÎx¦íš¶k:Á‡ 5×n;£,IDATغuKÚq]Çu3® ÛÖ˜¶Wü'ÖÃdRG©ŒH" %)½2EÈ×´mvMø°¶Æ8øã»_»ðs—áS–évv™–é.{c…x¶­µ®¾¶Ê´ÝtÖ|ú¹×V¯ÝœÎšé¬9w·±€ëún¶ËqÝmé,€”¡ï{Àž™œÉÙÏ¿²BLÀÌ8e‡cAiY®ÈG-¡Çb’ID§ŒÛ­Z™P.wWq,ÒRjbóØo·ñM5Žë¦³føíi×ógî>SÄßÓÏ¿%"oöìéZª¡çFÇÏäìtÆÌ™6€ÃÝ·¦ÊHgÌŽM]錙Θ¶Ýsy4Ûñ29'çeÅt8?eh"%“OÔ™IDATI½¦6)‚16VF$ Rò¯OYž3ºã·- ùš–à~aÁ•ß¿í~öõ_zç{?zà‰TSµ®ç‹kRì1k €ŽM]﾿@:cîµÇ Ñ”8›g‹ë§3ùó"}«ÛÐÕO~ê(ñpK:À4-ÏõÓŽ¶Ö¬ÐUÍOŠ| š¶—2´dRëǪ¤Q¼§Ím"­}¾qàÕ“ÿùÃÍ»'ÜÉ Å ˆ*Rõ²¯¼ôÆšµ[ÞX¾¸®f‰È¸ºšT:cNkm>òÐ=à Rì3·çšib±=ç̵Üꤞµ\Ý´DZ¾âéÕðüçÎþ}MjMÇV[Ò¹Œ—ø€·IDATO¶)©®M® Ñû†‡FB‹å#$'H²Š$¢ÁÒ÷:/yÌMãÞÏÕ¿°´zÍG±g}Mëò _«~gC—ˆ¼°LgÌ=wüÍë.©2òßÀ§õì3w·-éœø³ç®“Ç5V{f§®«¢Š4íüî°ç8žç‹Áë³Î:>¶[û5_>K,ÐØ0šŽŸ º=¥vN¡…Øm$tUì_‡ƒ3}æ#‘D4´RI-mzã×=-¼$xç‹¿Öý¬¶†<ÃùžÙ·•”¨ £ùˆÂ-¶E>Šp´½^ËÇJÂQ`DÑÐK%õn×Ö5U×ò9%ýÇh>ö¾•BO8Š‘™h>úV·­¤¸¶«hªíú^䎈{ÆŠ‡"3…›ÍÖT%ÌL@IDAT Áˆ$¢aR[c r“™gž}ù¥wÆGPl30Rá„b—»ñ¡’ë ª¢ÓJ®³JWsòû-dÖ/ïòšÛ«ý:øÈ$¢‘ð‡¥@GñüÝêt“ º›_¯Ù]žQ¯Å/BQƒ^{ÐIÝ`¹ÉF#³Í®i42Ñg'CC]2¹.¾5MŸ‘D4ŒÄÝ\¿}ñqÅOy®§éZβ M³=OüO)f:HÕ…v6ã))ÅÚf¢6…nË—ÞÖÅszÁ®%UUšÇõŸIDë¶Æøøœ‰±Cá=¹P8™€sÃDç™^¢Îu’AÆR&p¼Fž×¶½é«×3øSÌ|bIDATâëÙý-C À+”‚¸©aôÖ†®F$œTRß\­ëjìtñ(Ûë9;2ôŒP—HU¿W ‰¢[ccõ£Àˆ$¢‘ÖXŸš4¡6y²2<î›—)!£ÂíœèÕkDûž{îpCDD;ž^¹`Á£Õ"¢1bÉ’ëÃé^¹æ½G¼3'±!<IDATDDcEI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH""©¡‰ÈöéÓ†°…Á·FD4$ÆbùÞêF» DDÀðÝ$6¬ü‹Í‘-ðÞêÚ§O+¹L´ºdŒÑèGDþý‰'Šg3~ñÌ0ãÂéè!¶ŠR¯¸‘’kÉ:FDTÒ‚T~mÜþU‘Å—%ðUx‡ð€#/–NDêïígú½£=$W&UˆƒlK'¢a2‡kˆˆÆˆ!®‰­ˆƒáCaJ.Î ‡kbsÀÁ"%C‘ÅÖçœ2 O?‹F&ÁIDATdhÑàŽ6‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤†ë2ýÂ/YÑë×w±eÆDDxãµ§F» D´ãøÆ7®’vÆJDøþ:Ú] ¢±¨k[ÿ¾*òo|s¨6=†"’¨ EQ‚ í^Ш©o¬ôz7ý½–OyŒH"Ú>ŒÊ5½Æèˆ¶¢(ÃÔZqË•okh{5[ùí`F""‡äê¹åcn0­õ÷YÙbŠ¢Ä:›S¼pq •l·¿Jv¬|¯†¼'¢AF6mw† "c ¸Ü¿°’c^ÅéA¸bø0‚’ukñ³c$>Êt{ÍakD#fŒîh£T},çc]IDATN—,|bӱ䒵VœV²’*6tPáHBùÐ)n¡¸·ÅµXù7!\=Œ¼X›ö­øý‘ýëÈæÿÕl6ö³’¾ «a¼bñ]½ŠoòUFq®EC¤ät…QUa •L‡Âq%ˆÖhfkŸ‹ ìM¨DÉ×›S¼Œ¬åßÒ!ï<íJîªÓ5d‡±ŠìW ­¡ú˜•©"cÅNlÿTLÄÖ­p7\Ö“h;Å%aŸŠcKVZ ±2¹äûPyŸ+ïd™¾ •\Ã{¨ cDŽäË&ADñL”ÍââÙ„Ô€·Urf¿^ÎHö™vB#v‚±{,r0†üc9àeÇþ ¸ìoþQ,£’IDAT–̾’íÈÊÛþ¾„Áü1°×H;ð¾Xú•ÈÁ vGK’XyRrß0|ªäÁ¯J œèÎrùjÉ%ˬ([‘ êsç·¼Á‡KɃ²./S²Ï%ÿ™ƒ4`#°c:Ã5±ÛI§cŸ«23!)Ž*ßDqS%Ÿ*ÿ°’> ¸Ï²œ|OŠ#¬äbý}u6U~F'#qDÙ ‰ˆÆ¸íþXdŸ»À.9Ö ~7yø¶22ïdù“hdð2D´Úë÷TŽIDcÝ^ÿ±¿ÆJD~ã×õ÷ª™D´“ªKˆÀ˜ˆÈ .í.•0&"rT®”IDÔ§í~D›ˆhø´z FIDAT0"‰ˆ¤‘DDRŒH"")F$‘TÿF´Gëw"¢QшäÙ‹D´³éGDòìE"ÚÙðX$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠI>è¡öIDATD$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDR'K¶IDATŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$‘êÅ–IDAT"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"") G"IDATF$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")=úàïO<1Zý "ƒzE䂌V?ˆˆÆˆ%K®§{Eäš÷>ñÎ]<ID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘#’ˆHŠID$ň$"’Òû^„hçÖ>}Úhwaؽ·úƒèöö©£Õ“‘qÍÕ_ºêêëû^ŽIT‰ F» Ãåš«¿ôƒÝU<¿kÛÅ3w ¿ûÓ•/̈$ªÈåÃbë6eÄz2f1"‰*ÅÈØ q¸†ˆHŠID$ň$Ú>ì ë•á÷Ç"H!c]IDAT‰FHì³ýÞêÚ§O‹m.Yrþv'ú’·ÓWĈ$9±˜¥Ævš&1;FÐ3"‰F‘âR+ —ð©’Dz2²˜ˆ½"D^Ô˜zÕŒH¢‘#ÛñŒ¦CÉé2‹m_Š_BlN쥕CF#’häô÷¾ýF¡Ì[FwœŠI4FEw3wŒ Œ•„®5º¯'ýiÛi8ÆŽ±‰Q)'YEQÛÑàLIÅ#Q•äft™Ø*®!Ú‘Âcã±9eÎÚ^BSö’K> §ËŸ5¯;ÚDDRŒH"")F$‘#’ˆHŠÃ5Dé×Õüi‡Áˆ$êÛ5Wi´»0Òø_‚·˜FˆIDATÀˆ$ê[É`íÀvÂÿd‘D}Ø^NBBÞ@ugÀá"")F$‘#’ˆHŠID$ň$"’bDI1"‰ˆ¤‘DDRŒH"")F$‘T¯/ ~ç»?­~A=9ÿ˜y£Ø"¢1(‘§6tûAD4)_|Ýh÷ˆhŒúÿ9Ê}gôIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/newlocation_wiz.gif000066400000000000000000000006161203611042400323520ustar00rootroot00000000000000GIF89a…™tȹVº¹šÀœüÛMü磦‚†š¿ùéuèäÔÂŽ%û݃ª«¨ë¹$ôתƪ5ûð–½–6v…£¨¯ýôÏöÉ8ã&÷âXµ’#•¡¶ûõŒ½’ûâköÚ¦üô¬þýïžyż™õÜaûï–®Š¡Ãùê±±¯ëÁ%´:¼”9°ó×Bç+º—&ûäuþÝ¡ýú½ÿÿÿÿÿÿ!ù3,«gH°àÀØ`  ‚)¼ˆáÁ„ˆ )f¸øðPà(Z¬Ð†&ªhpA(` @“&‰*DhyÑ~ª1‚g3@,10gÑŠ‘Î@PEˆ«X³&ÀŠS€Œ¯`Ã~ÐUF‰fÓ¢5KVÅ ¾Æ»b…Œ'p2øj·ïÝ»+œ C‚„¯‡ #ž0X¬cŒgd˜L¹rå€;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/password.jpg000066400000000000000000000420521203611042400310140ustar00rootroot00000000000000ÿØÿàJFIF``ÿþLEAD Technologies Inc. V1.01ÿÛ„    $.' "+"(6(+/1343&8<82<.231  1!!11111111111111111111111111111111111111111111111111ÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀ¯…ÿÚ ?ô »Û-V1{«$·©9ó-í +1ó´•È<žz8â·Qka6hô/ÛÿãßãUiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p"gмõ‚ C4¤gj¸2K0¯céYUª©|L裆dÜv]I¾ÉaÿBt÷þ/þ;X}rßÜiõGüËñÿ"+…ÑmT5ÿ…OÞJ‡hõ;d'…TqP“µÇõ*Ž-Ç[zþ¨Õ/µðØÞÉ{{i?ÏlpXùùÕ™˜2F:žO°¸6qšt@i6r?Ýñ“ôÚ+Dõ²åcÄú”&E:uô"ŽA—o5ÛJ—¼‰”×OÈ—Á÷Òj–óÇ4öóÉnÀ†@Üã8èx5xr5bS¹V VêëÅ:†’ºŽ—fmeDŠ¡/4à bGï§=®ZrrWózy"§î»y/ÄÑ]Gkϲ‹—öƒm¸Á ŒJ 7•Û»Ž™çŒuã>dšê÷o~…M/Å6‘jRÜG5œV¼%åŠ@ÎÑóq³–ö¥Þ—ézü¶V“oëúîZèÑÛ‰¤ºh×ÏÛ A) P®àHé‘Í>m­Öÿ†ÿ?!wòýIµÁ†îõ[%'É·’XÄÑ2r œ8aÈö¨«7Ýy~%S\ÒH¡&¯âê×b˜ÖtÍ×)$²Âö°´ò$öÒDÞZõe  °ìç·­O´\¼ÞŸŽÅYÝG¸XëZUô%Y!óÏ _ßÀܾã"›•“o¦â]-Ô£câõÚØX){9íãÍ’ÞHËÊRÀRPÖˆ¶Ü“è—âÂZ%n­¯¹ «^ê«â)´Í5¬£éÿlÍÄ.åÛy]¹08àÖn£QœÞÑ·årÔnã÷ý?Ì–ÏÄvh¶:•âMiÜK!o"GŽ,œ|ÒÚ£=ɵ´¥ËéøìeÜoëø­¦AìVfi£m®Ë ˜Ñ¶îÁ“ÛÎ ¨çVo¢ý7+·õ¾Ä0x‡Gš™'•awI-¥Dbä„ ²€A#¯O~j“Õ.¯þ‰¾Å‡Õ4Ä`¦éI7_d«æã%x‡$ô´”Öžwü7ü«_Êߎߙ^貉Š^|°Äó–hCƹÜÈHÃŽ«š\é+ú~;h;;¨÷5ý!¬à¸A¹ÛÈ<Òÿt +—Ïû9ªr¶Ÿ!-1žÔ¤Ö¦Õdv—^L@Äñ¹]ª~enAÉ=…(¶à¤û¿Á„´Ÿ/’üM¿²ŸJwû)ô¢àe>”\ì§Ò‹€}—Ú‹€}—Ú‹€}—Ú‹€}—Ú‹€}—Ú‹€}—Ú‹€}—Ú‹€}—Ú‹€}—Ú‹€}—Ú‹€}—Ú‹€}—Ú‹€}—Ú‹€}”úQp05fk]q‚¤ÛÆñç¯7ñ#èò¥z/×ôFšZ5Ôboê1Áf‹›Èï® ¶œ0I‘™ŽçŒ…b2s‘Œ…Ï—Î55ކ©,+t꫾¹âIìÖ ˜´Ç¹’-Ĭí3`åðxPº Ø â²—+—ºzXZS§O÷›½}<ˆü{Ž;Ó™?öJöÓ>Dîô-0]xfÀ€ö±ÿè"²æåe-Î7Ä_ |Iup[HÖR(˜ò²Ë"•ú`×|1pKÞDJoÝGOàÏKáí0Ãu{-õÔ§t³HÄŒú(=®ZÕ½¤¯k ŒyJ6þ×ô¿ê÷¶–7–šŒ±:—¼hž0¨ü¾[x=ë O–»ySÕó.É}×)Kà Y´»ëuka$ÚØÔcËœy^`m½>öNžôCÝT¯öwüvûÇ-T×ó%ù/ò+Þü:ÖfµÖ,#6Â+­CûJÖãí¬rŸ-ÕT¹X‘ÁÅLtŒò?½k×£³ jåýåoMê‰GÃÛö[[¥·†Þíu8nîïe¹-jʘü³sè£vÉÒ FQ}7Þÿ­Iz§òüÿÌìuKI¼°f1‹¨àd®å#8ük:‹ž6.–Iö9]?Áºì·zê±Xʼn*´´Ÿi%6 ‚£`Ç8ùªå.w)½ÚjÝ5ßòìB\±PODÖ½tØÈ? õÙ¬níPÛi¶ÿº–ÚÎÉe€NŽY˜D­ž‹œuì)mg½škÒÖµÿ¯Ä§fÚZ]5óèìh‡·ì¶·Ko ½ÚêpÝÜ+ÞËrZ8Õ”1ùfçÑF8í“Pj2‹è¹¾÷ýjKÕ?—àïþfÅÿ„/gñ]Æ¥„[M¥0 ÂMŲF>ï#ßÚ²iºu!ÖV·ÜѤZRƒíÓüŽ>ûáf½>•›®tÃMŽÒ6žFÿC‘I,ñ§!¸çå#ß77yI®®.þ‹oOó&ê^Wü^þ«úf¥ÇÃÝjx50M¢Éwqg:1°< ›Áã©ÚqøgjIJ/´Ü¾Oõ#—Üqï¾hn­ðßV¹ÕîõßoK¨b2A½< Ž¥ÐnFã ŒÌÖp÷õ—Ý+[òØÒ^ó~‘ûÑÓxsÂo¦h“[„·7,òÈRg›lü[œîcÓž3ŒàgêkH¾–þ¾b†’æk¯õøUà zmÐi‘HÚmÅ”³Ç+¸‘Ç9ØIêHíœàL•ã$´ºJÝ4kóÿ!­%õ³nýuÿ#bóáÞ£|–K4PG&3¡,Êì+Ǩ5U½ùÔ’ûV·ÉßRaîB µÿ+hM¡øSÄ)â-2óU¶°Š ´f¶¸góI+óm(»GËÓ'­iΜç7ö­ù·ú’ãhÆ £ý,YÕüÚ·‹Íýác§>ŸöVŽ+‰"vmäÁHܤ`“ô¬¡eÍ~­5ò-¿†Ý/øÛüŒ|7ÔµK«…Ó Óåµ’Ém­…Ãû )É(»Hù†F÷Æ Õ¹7»ißÓ§ÏõcM.[tM[ׯ¯õrÊø'[OZßÛÛYÙ.Sí’CtçíH#Û²HJí'q8lä qš¶×4­³æÓ£ogåçmÝû“QŠê­¯§æV±øs«6Ÿ«éÓ¥µ…ݨH-`º’x¢œÞjîPc°vŒÿ*—~M©¦¼­ÒýnZ·=í¦·ó¿—¡>›ð¾KmFÎynwD¶Ž—*§®X3r‡åNJ6œ#¢jËËdÿ(þ$ŵÊÞéÝùõ_›ü>U¿á]ë×6Ö7FÆ4Ó4û‹;Yc‘žÒ&ÀÎ6ü€8¹Ï>ªmÍJOv’ûßüÂÐ’Kdïùÿ™±¨ø/S—Ãú Z5¸Ô4i"—Ê•ˆŠb«µ—pŽ àý=4œÿíc¶¿‰©{7åø~…xkT±ºÖ.uhmá}BëÏHà˜Êm ‚ÅWÓÒ¦-Fš›{¸å¬ù¼’ûŽ“û7Ú‹ŽÁý›íEÂÁý›íEÂÁý›íEÂÁý›íJá`þÍö¢á`þÍö¢á`þÍö¢á`þÍö¢á`þÍö¢á`þÍö¢á`þÍö¢á`þÍö¢á`þÍö¢á`þÍö¢á`þÍö¢á`þÍö¢á`þÌö§p±ç‘­üœâ¸±ÉE•iFVïú!ëâ•ÒEµ·†Ñíí o2FŸK¹Ã4¸ëÇ1… £VQÑC¤¥*îò‡§õåë‡â9ÞgÒ"{[Ybɶ|m†CÊ„LÜ€&V”®‘ч…JP䛿oC⽿ÙÛM\c"Sÿ W­|‰Òh:ž©ý•ko§Åkå[[À„ÊåI&sÑO÷êWÔ ÿÚ!ÿžZýýoþ"¦Ñhxƒþyiÿ÷õ¿øŠ-íÏ-?þþ·ÿE¢ý¡âùå§ÿßÖÿâ(´@?´Ã­Ðj/üüU€É­õ[u >¿o³íAbp-Ô’£[Ø+}VV‘b×íÝ¢m’´RQ°ÍÁÁñkk‡ÿ°ë_ô‹ÿ‡ÿF aÖ¿è5þþ*@d–ú¬OI¯Û£ÊÛcV´P\àœ»“€Oàh×`ØØu¯ú Eÿ€CÿŠ£P°ë_ô‹ÿ‡ÿF aÖ¿è5þþ*@>íÐj/üüU€}‡Zÿ Ô_ø?øª5ûµÿA¨¿ðñTjökþƒQàÿâ¨Ôì:×ý¢ÿÀ!ÿÅQ¨Øu¯ú Eÿ€CÿŠ£P°ë_ô‹ÿ‡ÿF aÖ¿è5þþ*@¡%Ë[Gâ;F¸Lî‰m”¸Æ3‘¿Ã­Ðj/üüU€}‡Zÿ Ô_ø?øª5ûµÿA¨¿ðñTjökþƒQàÿâ¨Ôì:×ý¢ÿÀ!ÿÅQ¨Øu¯ú Eÿ€CÿŠ£P°ë_ô‹ÿ‡ÿF aÖ¿è5þþ*@>íÐj/üüU€}‡Zÿ Ô_ø?øª5ûµÿA¨¿ðñTjökþƒQàÿâ¨Ô >Úæ9öì]JdYb…«O-Q–¬ú\ g/ŠäÓ¡Í4Ò%¾èeYIŽ#”Âï Ï‚2ØùH“öjÚµeÝÙ&¿íÝ–ºêhÒöÍýÉëŸ}´înhwž$Õ´­Võ®ä·¾…`±Æ$ò"«¥¹feëÀcÜ5©®mìßܤôõkKúm«yÃßj7鿪ßõ·È·¥ë7é§êjOeo©_°µ¶{`ÆXDmµ ÆW%L™?Ojyd¢õvoü¾åm;ÜM»7µ¬¾}¯•üÍ_ÿª°ÿ¯ø?ô*–Px–}RÞÚ3¥ÄJÄòÆ‚Yb_TŒã=ÉGÎ)=õÑ_ÖÏÓªkm7þ¿­×¯~>îk˜'Öµ=Z»ÏL†bÒFŒó¸yÉYC®WAUW ÛŒ †žœéyY¨-ú鳿ßÑ5{/'úÿ^}dæ×ĺýÅ«G¬Z\ì±U6¡)I«(¯ÅÿÀ朣ʷnßs¿àùQo¬ßXÞéåµ!ö“%ߨ`ò|ùi˜üÉ"åã µs\d©ì’”=Ë]¥kt½¯+õZ·®Þ–a&šsZ'}{¥¤mòKM¾T‰¤ñC 9Š1©]H©< =­¼ZküÌÊå¢vAò”ùÃ@óC¶Š.ë¿}?7½·Ó}önêÖéóµÿàí®Ú¡þñ«{ky¨M$m‰•¡´Ž&7 $7ndâ5<ÀIÚ›—§•¯¶Þö³}vW½ô±y¨¯?ÏOÃO>–1¢ñÅÞ¥g©âkX­íîÒDÔbº·˜E¾ Á_3ÉHó••8ÉäöqJú»|K×à×ÝæKziåòÕÿ[·‡õioô(m/®ÜêPÜ<¬AZhQö,Àch$261ƒ»ŠÎ²r¤ÕµåW^mm÷ßMÑpj3½ôæ²×çÔâü=­=ŒëË£[YEu¨´vûìþIÉŒ¶Ì 2*0n=Îky5)7}•ŸóiyuoMíb,â¶Õtíï[úõ¾ÅË}gTÔ´]nvÖå­•Œ0@ésûË„ ÿ&ÛœǦAˆíIjÜ?ÿ§oºÕöœSïøš?ŠwSþÕÖEŵ¬wɰŽHm£GUQ4rœ«nVê§° ï ú}ïk“Õ|›&Îé/»å¯ü:ÓËTLjo ñÐêys¥Ü[é^Z¤ÀÊ¥æÉÎ2ç*B/u¬Ûj õ÷¯ådíújôw²+F“[Y5çw·éå¾ÄÛ:„V‡&¯âwÓâÔ,Úê[çŽÞ1æíM°©d*ÜÍÈ,pp@«­îJio¢îîï÷h¬µ×V¤û»zoùýÚl®%î«%÷…\ßjfw—K²š{snE½þi¤`>hÏ; ·L檤R¨ãÑM-v^O¿ùÙ]쟔½_§f¿¤ö2,Œ‹åë­¥Éáåšïd¨]=åÙ—ä©$+móxüûðsÓ9_“¯7+·‰Þß…ºÛm.ÊÅî÷ûZϯò¾§OÎ¥o£è¿g¸¾}lØÅæÙù>tr|£&]ÅDgïa·¡$óíÛ[Tþ,­µõíòäžšÛ©œ9}š¶Ý;Û¦t·oUrçŒ\ÿfé‡XE‹O7)ý¦¨ìñ*ln°3ý‰c¨Æk7Ëί¶»÷éÆÞvêiïrJÛþ—Öß/Âæ%ö­¢ië^Öl´-O9å¼±HŒ-p«ØÔ°1Œ©$€2JðsšRrWòWK¾¿{ô]ǯU-ÿ7ÒÝÑ‹k¬ÝÛj7šê=•ä¶íældÈ‘ÒÄÌá‚('’AÀÏ©¥ã¥ÿöúŸðÞob½›×O¿Míøùu OÍq©$š§ŠmìÚ+¸b¿ŠX$ÿÇ»ª†h•ﺀ8õ2ÛQ“ŽöZwiÍ-7û·ü VæIí»Eýk¶ÂÎÚŠøsÄZÍÌ.“]Æ!ÔmŸ‘šÖ"®±Wb³ýÚÒÊ2„VÎ_sSšÓÍòù“Þ½RûÕ¿§÷õfΙ¬ë:‡ˆ®¬¦Õì-Ç™q ÓÍÒ „E ’íØ Ù22IÇ $œèÉîÜ_Éöòê»í¯R¢ùei·ÏOë·b]7ìsü)µŠç^AŠ常Uxá ¦a‘SoÉŸ‘ƒpNã[×iÍ4Õ¯tú=þ^žvë¼ÓMs.º¯5ýoÿδ›Dw´MFÓK¶ðÚM:¼–Ìq>ȶ9ÎT0m9Pêy-‚e[G-4Ñ?W{yöÛFì¬é5êöôÒÿ;_~ƒâ²x‚{Ïý›dv°ÀžSŠI'ËØ„pÁ @ê)E;5-v}Òå‹Myô^½†ÚVkt®»7}¾}|ֺܔؤ á°ŠÞ+´MXB°Ü·É(Äa΃Üàý ¤íÑé >i¯õ¡]õ+ L¸´±k-wÔñsl%C§Dc”v”$Œ€ïòöæF\É ;ò«é¯ß¿/]“vïk­†Õœ´è­æº¾ž·]†KâmMa¸Y|Yd/b±Il¡³x']BRò€ ˜Á¨¤ ^IÆ*•ºVò´oçm[½ô]–ºöý4í×BÔ¾'ÕVæ}º¼1ß»Yôé£_/OŒs6Õó1•L±%O™ÀéSöt{­û>d­å»Zö¾×Ýs.«Nú]ÿžŸáÜ͹Õ.µ}/T‡ûFkÒšeàûJ¥´»Šˆ KèrßÂ­Ï 1Z|[+Ãîæz¾šwÛñß™Gw¯ßoÃÓñi£OþK¤¿XìüGöÙâ­m6À~ÛnÊ Ï•@[n\å0£ËÁsmE¾¾õü¬›O磻ÑÞȘەz/›½­úw[²òêÚΛá-'\žòmM§E{ˆ|˜Ô$`F*‚1&Á×øØžÆ•bãQÓŽîé‹£ôÝ}Ûî8Y®g²×ä·ü5ùhµ; 6;ˆtûxï§ûEÊF¢Yv…Þøäà4çËÌùv&7·½¹b¤  €%ñæßõÐ#K¨gñýpÿ¯ÉôEµo3¬ð—üx7û¶ÿúKg-ƺ ¸³‚â{i¦t–®dˆä¬T©>ü1úдwù~_ä,O@ÉâIá’)"•` `ò92Š’q{1Ÿ´ÐÛ[xm-¢¶¶b† /EP0ü*å'&Û&)EY ¼²†ôÀ'wD†e›ä’Tä{f¥Œ»‹oïKÿ|ñ£P [z_ûä€bÛûÒÿß#ühÔ,¬´û 6«,q—y1׿f,Ǔܒij’]´ûƒ«dWZN•u%ËÏÌ÷Vÿf”† ˜þo”`ñ÷#§ ¥Ë£]ÿ¯ém«îÊM¦šé·áþH·v‘Æ©˜¨ FSrní’Š²ßÞ—þùãF£ [z_ûä€bÛûÒÿß#ühÔßÞ—þùãF VÔl,uo"yoQ26ó¼ ÿ}#øf“Lw°ë -?O³ŽÖÑeކ˜ú’I9$’I'’I&›m‰+âÛûÒÿß#ühÔßÞ—þùãF RÕt7U‰c»’ýQsŽÌg>¾[®G±©åïý|ŠM­‹pÃe) ãŠ5 ˆ¨P8 ôªnMݲQVC±mýéï‘þ4j0Å·÷¥ÿ¾GøÑ¨-¿½/ýò?Æ@1mýéï‘þ4j‹oïKÿ|ñ£P [z_ûä€bÛûÒÿß#ühÔßÞ—þùãF ¶þô¿÷Èÿ5Å·÷¥ÿ¾GøÑ¨-¿½/ýò?Æ@1mýéï‘þ4j‹oïKÿ|ñ£P ŽËOŽökÄYEÄÈ‘»úª–*1œq¹¿:JéYzþŸ 2|[z_ûä=@1mýéï‘þ4j‹oïKÿ|ñ£P ¼±Ó¯DKt’Ȱʳ #:ò§¯8<óß•ÓO·ê­ù0è×ør|[z_ûä=@1mýéï‘þ4j‹oïKÿ|ñ£P [z_û䀮ñ<¸Ëœ°?0±¡ <Ëâ/úáÿ_’ÿè‹jÞgYá/øðo÷mÿô– Î[u P@Pv¹5ÌQZ¥œÂ..¢ƒy@ÁCgúÒzج5I5›-uÕÚÛÃpìtõÚVF‘T¿9ÌMž;޽– \ÿ„{Zÿ¡‚/üü]€Â=­ÐÁþþ.@?áÖ¿è`‹ÿÿF ðk_ô0Eÿ€ÿ‹£PøGµ¯ú"ÿÀÿÅѨü#Ú×ý àÿâèÔþíkþ†¿ðñtjÿöµÿC_ø?øº5ÿ„{Zÿ¡‚/üü]€Â=­ÐÁþþ.@?áÖ¿è`‹ÿÿF ðk_ô0Eÿ€ÿ‹£PøGµ¯ú"ÿÀÿÅѨü#Ú×ý àÿâèÔþíkþ†¿ðñtjÿöµÿC_ø?øº5ÿ„{Zÿ¡‚/üü]€Â=­ÐÁþþ.@?áÖ¿è`‹ÿÿF ðk_ô0Eÿ€ÿ‹£PøGµ¯ú"ÿÀÿÅѨü#Ú×ý àÿâèÔþíkþ†¿ðñtjÿöµÿC_ø?øº5ÿ„{Zÿ¡‚/üü]€Â=­ÐÁþþ.@?áÖ¿è`‹ÿÿF ðk_ô0Eÿ€ÿ‹£PøGµ¯ú"ÿÀÿÅѨü#Ú×ý àÿâèÔþíkþ†¿ðñtjÿöµÿC_ø?øº5ÿ„{Zÿ¡‚/üü]€Â=­ÐÁþþ.@?áÖ¿è`‹ÿÿF ðk_ô0Eÿ€ÿ‹£PøGµ¯ú"ÿÀÿÅѨÃ§ÜØÛ¿ÛoEä¬ãk," £Œdþyÿë‰êœ|Eÿ\?ëò_ým]:Ï ǃ»oÿ¤°VrÜhãÿ¶ oxzßLÔ-RÒ­îÎï±”µt&edÈ"•YsT”âôk~šÊ=v¿oÇDÂ+•rÉk}½/ýâ´ž+ÕšÞ ×¢Ž–U}JêêÚ8KªFBG:ÂñºÎFQãH2õzi¦—ë­¾vÓgÿZ.û^ß?»ç{|Ñ©§¯ÏcstuÈÖE½´³Akr@‚[;ÛiÎ0z1V¼¢¶»—ܹ¿?¦÷›Ù?$Ÿõÿï+ë^ Ôôï´é‡\x® º‘b½º–ÞØH‚(›c †|ɪ@<ñÎNO•In“ùûÍ+.»kªüMRJV{iòÓ¿E÷Ó5½Wû,ãY’ÑnæXLQ[ÄDcìk9e,¤çvG9'Œà‹«îs[¢›û¥eÿôz‘ mîþ;ÿšóî´IñF¹¬X-Æ«¦X‰©·) ºGÙ#1rK8d*ê’ö’^rVím¿G­ÿÊj Ó~îÿ×õc¸ðíÏÚ¬¦íí ·S'™äù[6ÈG—Žûq·=ñšÍ|}Öýüü‹zJKúZ ×>þ—ÿa+ý R{¥cÿ%Yÿ°U‡þ¼¤A@P@P@P@P@P@P@P@P@P@uOõŠÿZày?Ä_õÃþ¿%ÿÑÕÑ3¬ð—üx7û¶ÿúKg-ƺ ( € (‹H®¤¶3;¢ÛΓ€JœôÏùïI /Æö‘ê3_¤l.§Š8d|™¹QØ2?çì)YcûE?Úÿ¾?úôY€h§û_÷Çÿ^‹0íÿkþøÿëÑfý¢Ÿíßýz,À?´Sý¯ûãÿ¯E˜öеÿ|õè³þÑOö¿ïþ½`Ú)þ×ýñÿ×¢ÌûE?Úÿ¾?úôY€h§û_÷Çÿ^‹0íÿkþøÿëÑfý¢Ÿíßýz,À?´Sý¯ûãÿ¯E˜öеÿ|õè³þÑOö¿ïþ½`Ú)þ×ýñÿ×¢ÌûE?Úÿ¾?úôY€h§û_÷Çÿ^‹0íÿkþøÿëÑfý¢Ÿíßýz,À?´Sý¯ûãÿ¯E˜öеÿ|õè³þÑOö¿ïþ½`Ú)þ×ýñÿ×¢ÌûE?Úÿ¾?úôY€h§û_÷Çÿ^‹0íÿkþøÿëÑfý¢Ÿíßýz,À?´Sý¯ûãÿ¯E˜öеÿ|õè³þÑOö¿ïþ½`Ú)þ×ýñÿ×¢ÌûE?Úÿ¾?úôY€h§û_÷Çÿ^‹0íÿkþøÿëÑfý¢Ÿíßýz,À?´Sý¯ûãÿ¯E˜]ܬɜäuõ÷÷¡+åß×úü—ÿD[WDγÂ_ñàßîÛÿé,œ·6ê@( € ŒÍΰPLÊ]c,7@ô˜ 6$  írk˜¢µK9„2\]Eò‚†8Î;õ¤ô×ü#Ú×ý àÿâéjÿöµÿC_ø?øº5ÿ„{Zÿ¡‚/üü]€Â=­ÐÁþþ.@?áÖ¿è`‹ÿÿF ðk_ô0Eÿ€ÿ‹£PøGµ¯ú"ÿÀÿÅѨü#Ú×ý àÿâèÔþíkþ†¿ðñtjÿöµÿC_ø?øº5ÿ„{Zÿ¡‚/üü]€Â=­ÐÁþþ.@?áÖ¿è`‹ÿÿF ðk_ô0Eÿ€ÿ‹£PøGµ¯ú"ÿÀÿÅѨü#Ú×ý àÿâèÔþíkþ†¿ðñtjÿöµÿC_ø?øº5ÿ„{Zÿ¡‚/üü]€Â=­ÐÁþþ.@?áÖ¿è`‹ÿÿF ðk_ô0Eÿ€ÿ‹£PøGµ¯ú"ÿÀÿÅѨü#Ú×ý àÿâèÔþíkþ†¿ðñtjÿöµÿC_ø?øº5ÿ„{Zÿ¡‚/üü]€Â=­ÐÁþþ.@?áÖ¿è`‹ÿÿF ðk_ô0Eÿ€ÿ‹£PøGµ¯ú"ÿÀÿÅѨü#Ú×ý àÿâèÔþíkþ†¿ðñtjÿöµÿC_ø?øº5ÿ„{Zÿ¡‚/üü]€Â=­ÐÁþþ.@?áÖ¿è`‹ÿÿF ðk_ô0Eÿ€ÿ‹£P'‡O¹±·¶Þ‹ÉYÆÖXDAFÉüóÿ×Ô8ø‹þ¸×ä¿ú"Úº &užÿÿvßÿI`¬å¸ÑÅhVsè>·×#µ²Ñãm:(wXJ ÎòÛ<ìñ„M¼ä•|s“Е}Ù8ív½¯ùí·eÚÊ+›]íWåúïúÞâýQl3?ˆmÕ`ždZÍo$×XH™<¢ñ$ràÈrªˆÆ #•\/ûy­·µ—O»UgÝzkåmUöNýý:2úøŸQ]CQ?Û^Ù ÜI ºÂñCs&åuÚ%ŠMÁ ¸å[Œ‹J*O]¯óÓGå{Ù맨¬Þ‹v´]on«ÍõÛ_4K/ˆµä³˜Oqöf‚4–âc“S¼E_ÇîÔÌ9ãäËgš¤¬Ôfíf¢ßž·ô¿»ä¹†ÝÝã­ÓkÓeþ}ô±6ƒ«jºž¹¥¾µ%Î ¸x®ãŽo• 8ù‚íÀgt%@ÎÞÇš›ÉBR¶©mó’_zIýÍi£¯Êžý{hŸõën†nŸ¬µÍßö„þ&?kMæK–Fë¥Éº"WËUÝ•?Âå›å÷ªÒ*\¯Os^ûüµü.VòI®²ÓúþŸCÒíÛt¶ÿ3*ücwqÚªJÒjÖ3ƒ¼S½ÊçßÒÿì%oÿ¡Š‡±GeH€ ( € ( € ( € ( € ( € ( € ( € ( € ( €(êŸêÿþ´-Àòˆ¿ë‡ý~Kÿ¢-«¢gYá/øðo÷mÿô– Î[u P@P7‘]IlfwE·'$•9éŸóÞ“@kÿh§û_÷Çÿ^•˜öеÿ|õè³þÑOö¿ïþ½`Ú)þ×ýñÿ×¢ÌûE?Úÿ¾?úôY€h§û_÷Çÿ^‹0íÿkþøÿëÑfý¢Ÿíßýz,À?´Sý¯ûãÿ¯E˜öеÿ|õ賋«Û™Þ‘LѪ»Fܪą$g ­ƒßÒ‹0ý¢Ÿíßýz,À?´Sý¯ûãÿ¯E˜öеÿ|õè³þÑOö¿ïþ½`Ú)þ×ýñÿ×¢ÌûE?Úÿ¾?úôY€h§û_÷Çÿ^‹0íÿkþøÿëÑfý¢Ÿíßýz,À?´Sý¯ûãÿ¯E˜öеÿ|õè³þÑOö¿ïþ½`Ú)þ×ýñÿ×¢ÌûE?Úÿ¾?úôY€h§û_÷Çÿ^‹0íÿkþøÿëÑfý¢Ÿíßýz,À?´Sý¯ûãÿ¯E˜öеÿ|õè³þÑOö¿ïþ½`Ú)þ×ýñÿ×¢ÌûE?Úÿ¾?úôY€h§û_÷Çÿ^‹0íÿkþøÿëÑfý¢Ÿíßýz,À?´Sý¯ûãÿ¯E˜öеÿ|õè³ »•™03œŽ£¾þô%`<»â/úáÿ_’ÿè‹j耙ÖxKþ<ýÛý%‚³–ãDºQñ«b—–±i‹³ª‰$7ÊÅN@SÜzÖwRÞÛP‚ÝÛTû0—p ¶åŠã’XçÃL éüA¦ÛêcOyf3ïDc¼lØÚ¯"©E'#† ò=E8ûÛyþ°~îæCWÕìôt…¯Lùü¸’ y'wlÀTRzzv¥}mýZŽÚ\ŸO½·Ôl㺳“̆AÁÁR0pAAyjš°“,R € ©¥êjV¦âuA,‘aÀ(åCÓ*qBÙ>é?¿Pٵط@P@`C£¦§ã}^Xeû-ý¶™dm®BîÙ™n²¬¹£l Ë‘œ ²«*RÂñ¦ymnáû-ý¶<ûrÛ¶ç;][tmƒµ°3‚VVU`[ € ( € ( € ( € ( € ( € ( € óˆ¿ë‡ý~Kÿ¢-«h g„¿ãÁ¿Ý·ÿÒX+9n4t·šÇöÐ]DñJF(T䑘~„VWæ¦s@ nF=i­ÀൠMM[uG=âïß8Km.Âk¡o{[´¦_´3³»I$ß:å°ÃÊ’ybaîÔOk8úr¯Å½ü½nÊ’¼ZzÞ÷õjÞ‰~=¶Dw~¼’óS?ØWMË;K6û_´Í™Ñ¶£–Û${W;&N˸ƒVŠVÚß}žëg¯]]Á¶ÝúÿÀ¶SòØš jÏol‰cm§,‘;J–àF±mEvãy+üZ~_…——BÛxUàÒây´T¿wÔæžúÕL{îâ//—Ì‚—FÄÏ~*b”y´Q·£²×Ϫ¿M-¢¾öºþ—Wô¾ÿðåÿ hÓií¦‰ô5µhVól‹:j¯6åŒ"œËŽGM¸ïW7zòÅ_»_åߨŸ’Òíúi¿éc®¤0 € ( jMNþÇÆÔ-¢\jWUŸn7-¼X’ïæ•À'# >f'ŒÌ¨¢–oø¢F]VþÒ$D»ÓíV8ЬsÁ!(\ºÊŒ%@Ä)hº0DUL€ ( € ( € ( € ( € ( € ( € óˆ¿ë‡ý~Kÿ¢-«h g„¿ãÁ¿Ý·ÿÒX+9n4mÔ€P@P@P@P@P@ÑèF-e.⺠kÒ\, d‘È¡ó$)·&Q¼·j@lÓ € ( € ( € ( € ( € ( € ( €<ãâ/úáÿ_’ÿè‹jÚgYá/øðo÷mÿô– Î[u P@P@P@P@P@P@P@P@P@P@P@Pœ|Eÿ\?ëò_ým[@Lë<%ÿ þí¿þ’ÁYËq£n¤€ ( € ( € ( € ( € ( € ( €15U»»ñ-†©w§@ö7W2T„³²Inª3"8·@;RnÀIý…sÿCV½ÿ|Yò=-@?°®èj׿ï‹/þG£Pì+ŸúµïûâËÿ‘èÔû çþ†­{þø²ÿäz5þ¹ÿ¡«^ÿ¾,¿ù@?°®èj׿ï‹/þG£Pì+ŸúµïûâËÿ‘èÔû çþ†­{þø²ÿäz5Ÿøý§áÏ ^êz‰µ‰.aBPM™L€O @ éê(ÕÞ[ªŸ0ºî ™8î)°6/ù÷_ûèÑfæÅÿ>ëÿ},À<Ø¿çÝï£E˜›üû¯ýôh³óbÿŸuÿ¾`l_óî¿÷Ñ¢ÌÍ‹þ}×þú4Y€y±ϺÿßF‹0"¼¹Hm&•-Ótq³ ³c }hÔ š<Ò\i6SÌÛ¤–wlc$¨$жƒø‹þ¸×ä¿ú"Ú·€™ÖxKþ<ýÛý%‚³–ãFÝHP@P@P@P@P@P@dIÿ#Οÿ`›ïýiRÀת € *²\´r–ˆ¬ˆ®Sy$ääN08ÞçµVÝåÄÒ0Ñz ùäU°.;½¸äŠÐ<’@ǰ € ã>1ÿÉ?Ôë›è-Iìqo÷fÿ®gùŠS kPŒj¾.}.öòêÞÚ$žm®žÝ¦bì®Å« (Æqó䎔¢¯ÌûY|»üöùNÊ+½ÿ iúÿÃwÞ'½Óo­ ÓûCJ‚X,渒 N÷ ßs†Vùb`sשæìäúó[ä›ü×—–ÚŽ*:.–¿ßoëw}÷‹5È,¬&½k6©d“ÃåÄè¶ÎÒDŸ9.w¨óAãoÝÇ|Ö®6¨éõºüy¾÷¥–×}7ÓŸ¦¿‡õ¯o2}O\ñU¦­ý—cim©ÜÁn—´6ëȘK€S>ðó9=0fóòM'ùßîén^Í«%Ýßúþ¼ÿÈ ²0~ÙwÇý¼IBø!þþH_jWînÐ2¶¥ÿ ë¯úâÿÈÐZü€tïúöÿA–Àpß×úü—ÿD[Vð:Ï ǃ»oÿ¤°VrÜhÛ© € ( € ( € ( € ( € ( € (  Nþ×Nñ–5ìégJ½P\ã$ÍiÀõ?áRÀ±ÿ >‹ÿA¿_ð§tÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐ è2%¼¶7 ý¢è?‰ôI‡¿„€Êõ8:rx÷¢è>(ÑI'ûB}ÿ .€OøIô_úEúÿ…@ð“è¿ô‹õÿ .€å~*ëZmÿµ(lîã–O)›hÎq´Òmè‘ÈÅ;Êëùf8‘MOíöó÷ýüãLíöó÷ýüã@õ84Z4U‹M¾HÎä[•Ž@§ÔÎ)Y^ã¾–"m;à r—-e¤ˆÕU%1E½Bãh`cÓú·ß1tK±;Ç¡¼"M9¢XLB¢3Œ¦?ºp8éÀ¡ë{õ¦Å7Ñ|$ðCéš#C&(ÌŒžIQŒ àg'fšÜ:XÓ‚ãM·Ë·šÒ$Ém¨Ê£$äœä’Ûìÿçîûø?Æ€ Ô/mÂåRêc€’phÚü€tïúöÿA–Àpß×úü—ÿD[Vð:Ï ǃ»oÿ¤°VrÜhÛ© € ( € ( € ( € ( € ( € (  :¦‹¥jþ_ö¶™gäçËûL .Ìã8Ü3ù £ÿ_…èYÑ¿ð/þ&€øBü+ÿBÎÿ€ñ4Âá_útoü‹ÿ‰ þ¿ ÿг£à_üMð…øWþ…ÿ"ÿâhÿ„/¿ô,èßøÿ@ü!~ÿ¡gFÿÀ¿øš?á ð¯ý :7þEÿÄÐÿ_…èYÑ¿ð/þ&€5®mmîãÝAèಠ`® +ÿbé_ô ²ÿ¿ þYbé_ô ²ÿ¿ þYbé_ô ²ÿ¿ þYbé_ô ²ÿ¿ þYbé_ô ²ÿ¿ þYbé_ô ²ÿ¿ þYbé_ô ²ÿ¿ þYbé_ô ²ÿ¿ þYbé_ô ²ÿ¿ þYr4H£XãUD@UF ˜uñýpÿ¯ÉôEµm3KIñ5……¤k壗Šë)™a ü±0<§\÷¤âØ?á5´ÿžúýý¸ÿã†eYâré¥× ˜›o¾ÎýÔp"±ƒZ¼hæÌYsçÎÓ05JmëÖçwîÜñÔÆÍâŠÇ“‘øÒK¯=üÕ¯:néQ¯|å‰HµZÕ8QJ©ÛíŠÈcýú{ü×ÃüÌƆeYv>ñGzÈã»&Z­ö®‰îøø„î P{í *TIDAT5}ÆôêÈH}¯ÓùäoÖÿûCv0®‰ÈâÅ í0üìoŸ~k£ÕjíØ±K÷„(›Y³fŒŒŒÌ›;íÐC9zÇÎí"b¬Xq͉'œðúã_ýüó;Ÿ{nÛ®?욘hëž*å4}z}ÆKfì·ßìyóf~÷;¬ß°¡&"û0çùçwlùõsÛ¶‘ rjîþ# ÙΚ5cë³-çé¦ß=ýÛßm;ÈKçÏ›¿À=ÈAën;ÈSg_46Áέ;[ÍFKÄÚÿ€9"R³_Þµk×ÄD{Ú´‘¸ãûÈŽ»Žù“×,X0¯R©DÙÄ4ͧŸ~þ‡?úéÜý{1QIDATgìÚ."òß›Ÿúíï¶¾ûígþšEµZ¤k“;îÃ?Ýü™½[D^¾è yfëoZwëy+ÞdÍï,œ+{‹˜“·!"ÞC^”Ú–­Æ¦ß}iÍ­¿ÿóÎ=@D&&Ú»vMþVQ‘‘Ñ‘·5¸^[;vì8æO^3göÌñ]Íè[Í™=ó˜?yÍôÓ‘ê,ùíï¶^zÁ9ccó&ÆÛ"QOÅvØ—^pÎÍŸ¿ã•*"û~nÍ™g½vüņ<¼¹ÛlõÜ\Dªÿý[9ó¬×Þý¹5Õ«ÿ·Ýøâöö¬ÙÓÄɉ›f¥nDodª%sçÌêtºq·›;g#}NIDAT–ˆ81îÀö™˜ˆ>Ý<`÷ Ýñ†Õ²êÓ¦ÕŸÙÞž5Í­w*bF½kyŒŒ·ê;fÇj7F§é¤ÙiЏ"qµjùw¼·QŸÓ­[­îΦü䉶¶ºíVwtº5kßÚüý§ï5£÷Ø‹;vE<¤ì¶k¼!®0÷ìï¶Ï˜1{]M÷ ͦiu:Vw¼ÚížsÝõ"ò…÷_iUNÇ4 ÃyðÎÞ "w¬¼´Ûh¶Ú¦Ñ5%(àÖÂö:ßÙÎ>2Rßü»]?ÿÍŽçšV«Õm¶ZÏïh?ùëæœyµ%¯˜»ÿþ/‰ûfHÌ4Í´Cb'Ö†Èi§¿UÝ÷žr,ÕIDATo~ÕÙÊ­ÛêHÅj·ŒöDçÞÍψȩ‹¼í]u¦:tD.üì­öK¿ÿ»¿³kZ–˜Á }MD CD¤R1D û,ó´¦5gt´þ’Ñæ´iíííi3êÍV»Õj5š­F³51Ñ|ò‰ÿð‡‰7œpÐÞ{OC K,C ‘sÏ=Õ÷OŽzíQGóêW9oÞ~q?¥o|cÝ­·­Y¶ìüsßþçq·E9¢bâ|[ù†aš±¿ Ã‘êÔE^†atº¦ˆñ²—½ôM§§Øðžo}©Óµì/¤Ýƒ""ݶ)#"éV'ƒï½›Ÿ9uÑkßþ6ûéòýІE¤ÕiV»Ò­Šhÿ_IDAT´M©T+b‰bvM;þÖD¤b•ŠQ­U û‚¯Ù/Z¦Ùùý ?ÔºF{b¼ÙlµšÍÖD£5ÑhLL4ÇÍÇ{q¿ù{·ô`;[οû{ïþÎøøøWîúÒÊ¿¼ð“7Ý6wþK£d>¸áÖÛÖÜúé¿ß|Kdg‹››‡ß¡è~£+!{µÈXjµšˆTk“‘¸R1ÚíŽr‹ÝÚíÉT¯;ƒ"Òi· «&5Cº•g®¼âÀ>*N0^vÎò;ïpÂð3W^!"]Ãê6-«Ó‘Zµ*–X†%–U1 ™Ì‰+2mÚ¨%bL]t]—vm¯‘ 1ÄZ½ò’™õC›×n¨Ð›¸IDAT·›-ûO«Õj7[íjµZ¯UÅî“?'ÓFßüæ³¾xû­_ÿú—½÷Ê–õxÂ7üƒˆÌßo~DzږY¯EºT%Ã7(Òã÷¹ò1MÓ0b=Ø´̦i9ß1÷|ëKO<ñP؆÷ö%§§‹×jµÉ–nWŒŠeUDº"òôå—/øøÇe*;aøéË/wÏCº]™Ê{¥^«‘Éœ¸R©ÕªÖîPjU¤r×V1͆iš¦ešÝjwtz·>bŽv;Ó4»bšµ®ù¢eÕj»O=®ïÏj­:kÎÙúÂóÕŠQ5ªo9ãx¹úo®}ôÑŸ^vÙU"òÝï®ÿð‡®³_–IDATÿúEÄî#"§žyü×¾þªTý}œnê¡ìn—¿ïêÿxèû=ôàÅïYy 'ï½÷lyä‘ï{÷ßóͯ¾éô·¾õ­o;ðÀ…#<óÌ– ¾}û—o}Óéo}ç;ßmo‹¬ð-Š´ø7T>¦iy*ùFao;3‘n×ì¸ëŸ>üTàV¯9ü qõ¬ˆÈT¬”¶iXí®ëZ«Í—_¶èãŸ' o¾ü²=¦auÚ“á¼jˆý6 ûÆèšˆTÝi»Í’ö1ÏþöÛÏ6w6Úfs¼Ñœ˜hM4ãÍñFc|¢9ÑhL4Z##•s–¾{÷ Ì®ùÕjm||—ˆ¼áõoÃþŽ¥IDATpnV>èÀEKyùˆTÖoý‡?tݹyÖŒËß{AÍ0–¾áäoÞóàéozˆÜ{÷wÄ”õß¿ßßÇÙ…z(»ÏÇ?öáÛ¿ðµV«qá»ßVcÙÙçýäáÿúÀû¯¼nõ‡V]ö×ßúÖÝ/nÝ:¶pñ†ïþ»„Ï~æ“?üá÷îúÊ·¾rÇŸöÙysöM}"‹ÿk/àÅ?¢Ò1M+Á[•Š%öÙYéšf§½û‡û±ŸóªaØ—=WœÞfÇò$èîløÔE®9ãÌ=&ß™ì\<–,†eTóÄFÕ©×,1 »F¢!Ý®õÃý_ú’ùæ Ó2M³Û5»Ýn×4»Á?KñIDAT®óÔ4MÓ4ë£uòì/N÷œºæ¿Ýõåc}ýÿ8ê˜j½æ8hñÁÕ飆Èß½OD–úòêô¹ÿþÿwÒ‰§®ËÓk3¦©ûDjŸ™³j{í+"k>ýßvÎùßð~9æÈ£«#µ3Î:ÇêtÅ0GØwßýDä;v\¼b¥Ù굊mUôé Ò‹ŸQ‡šú 0[í¯}íÎÉm§ÕEDêÕ°Þóž¿˺ðâ·_}õßwÜñ³gpt:;¡©$Å¥Óívë°dê’+{v{wôm·T—€í~µnÞ}8Ú욣*"b™—Ýû ' ÿjÅŠƒ×¬‘©`ü‰SßlŠˆ%fwòwˆ‘ZÝž’5y×’}tº"ÕZ;ID K:¾¤Û²í;ãWÏïØºÍ>(Ýœ<(2ÕIDATÝl5š­V³óÚ£:éÄWÖGj“¿?X–1õåyïÝß±LŸ9½>R7*{|«ŽÔk"²téxà~§§ˆtÛÝ‘zÍÝ-JŸˆC9íΞæï·ïûÿîšÓN9}åû.ùþ÷¿{ý‡>êy# >i¤ÆïsåÓíšöyâ%/ÿ£›nºÅßáÄ“Nö7Ú7 ÕG&W£jwÌfs÷]9îÇ~»_5ª"2Z¯Ùÿ®LÓ0MÓ²,Ã0.¿ï[N~bùÅöÏÃÖÞ"SÁøã'fYV·;™nŒT-1IJÄ0ÄìÈTNlÔGܵ¬‘ùuk¢;[äu•J¥füèñ§Ç'æD£Õh¶šÍαÇY²‰¬IDAT´üÂ×-Úwò>âÝK^OÚwÁ¼°762Z‘ .¸èîÿé#?Þáüµk?µlÙÛ–.=ÞÓ-JŸˆC9Î'Ÿ~Ê]w­›7oÞҥǎðùÏnÑ¢1{(³ÓmŽ7fÍ¥ø  T×4eêNœCþcÏ«OþêQ3pé £"®£ÓN×½d¦zùLçÕj§+"#£#v¼ktÌš!–T¯ýáz' ÿâ]ïqâà/Þõž%Ÿý´ˆÜ»ù™s[|Ý1't»“gŠG&'0D,;çž¼Ÿxt´&ÖÔ–%bŒ¶ïøì]2½vÒ¬iG¼|ÿ[¿úŸ›&õª¼ìU –.}Ù)'¿ò€}Ë&XIDATýg‹aˆL&ÒSõ¤ÑÑвNöKÇ·ôæ¹å³Ÿ]ûƒ‡|Û9çŽ-8ÈêšÓöšæî¥OÄ¡œÇvç¯Ý}÷ßþý•çž{Þq¯]auÍÀŽ;né²eo‘÷¾wå ¯;¹R©(ÞúŒ3|H”¸tÌ®¥¾d«Û xÕ>œ9:•’u»f«¹û~âËÿò½Šžµº)"£#»óºŽ%–i]wôdâ÷Ø…ïòlûØ…ïzåmŸ‘ëŽ>¾cZÝ©oµÑ‘úÔ¿F·Ý’©£ÓƨbYÖÔ c]PŸ½`¶ÿO<ïÈÉÙÆžß’†Èä’–ˆñä/7ýê›=Óµù_:é'ûÚÛmþIDAT×½¸mç®ã³fÏ|É̽ªÕª§[”>Qº¹Û?ðþkwlÛ9kædgÿ¯~Õ«~þè[žú­ˆÌž·÷ÞsfR®*;|‡"=~Ÿ+³ÛuV»<õ´£=¯ž*Gÿä'¿ôoe_îìÄ‹V»ÛîLÆWÅÍĶ;ïúˆX"µvW\á\DÌv[*³Z{øï ÛÜ~É´Äê¶MÓ¬ÔëSƒL^•ÕtÎW*†¶O&·2«-‘©‹©mvÞ]uÑ{y-± ð,û‰W~pØé™%‡âi©ï={¦º[”>Qº¹Ûü£ùêFFêþ("qÙtL˾îé?ôxô­*“ggˆ]=PIDAT'ƒh§cµZùòíÄØõ¨eb_ô¼«Ù©L³RÝì*˜¦9aV¤Ùufb§±»¯ØªT¥>Rß}Wðä¹ßÉûŽ ;¶OL»/ðžLŸ cï“ç4øEz|•eZÍVÔ…*ÓFíóÄ“‘øgnš¿oì‹~žÚ¼IDFF&—Çzö¹Öþû´Å ãáA {+™sjœ䨒C‘-OÿÆiq¦Uä °äÐkÕŠˆœvü+Dä'ÿ|÷ †1•DŠb)Í#ÅiǿŽ•vÊÿ&WïuÓ‡]ƒLÞ”$ÊTt|åÕvÊî€;kŸ9"b¬XqÍG?ú­Ï?þ.@ÿÍ·ßWüÃäýUÿý‘€L½nÞ~"Su$žüå7þ^ë|"‹ïûºcÿXìH\«×ö™=oÛqóÍ×éž k×Þº|ùE›7=­{"0(üÇOqäû:2Š  ‘ˆÄè°õJ®IDATD$@'"1:‰ЩֳÇÚµ·f0Èòåéž”GïH,">£tÊmõêktOJ%R$‘¾ñS´Ø±}K¬þ«Wÿ¯Í†VÔHŒ²šµÏˆ=9Oƒ@$†°®$h¤ÿÚiÃ0ìÂÎS“äÖ¯¾pÔ¯¾pT–{¼oýúûÖ¯ô^’Dâ>K»D³]œ9e<Ž» !ÉŒ-^8¶8ê!}ýòämGðw[fÖû=éÄŒsttÚŽÇ@,ž ¸ic¼kÐÂ/o;ê¤<."ZℌO:ñÄŸ0Û ¥eYvRë4Ú-N7÷KžõÅîIDATPîvÿæÎŽ<£õÜÄ=OO‘†ÝÑwlñB‚1P2îÈ“ßÿ°eN–˜¦õøçŽôtxÙŸÿ¸/;Rä¾ Æ #±:zùc³? ö*pwõo¨ØÄ™†û%b°GàAׂ¶À\Ù‰ÜΫλs÷l” ‚Œ´_¬=â”÷?huþ †%"oüÛïb†aÙ9ò½ÿtÄ’wÿ$åŽzÚÁã´G§#œ_Ê“²þÍ{ÑÀMÔ“„;D9-º&“Œ'âÚö™]÷S§›ýØß?°Ñ“p÷ì ¥Çn9â´¿ù¦´_´K[bˆX–2y˜Ú1DÄìªéã×ZÏ`ìɪ#†nSbIDAT팮¶\²Ù<凖ûßhYƒJØûò'Êôj5Lio³ÚÛ¬övio·ÚÛìŸV{›´·I{»´·I{[³¥ºŽ+˯5wè]¾ü¢Ec ¢lÕ‡H+×ì{r}ÿil²ÿ¥U4òäµ±¶µ7ájj`ŽXùð¿ýÃyvĵ:Û¦‚ñ䫽}ò2'–þ}­E9:mw°×ç¸ZC’£ÓN< ‹¾ž«¥Üñ/bÀvï"âæêMœßœßz¾‹aVÜ0œøø°û°v¬AŠûY…pÔåßõ^}ÖUÿdbˆÜuýÿÃ9,=éOß÷HÏqzþ§v·’z£Ÿ$¶»E_4©WlE¹&»áIDAT«çeYâ Ûa/%Mý16'ôúÏ”'@ýéûY÷áW/»ê"bšrô•½ãn2þ@ëÄæ¸×jÅZ»0G÷qÙÓÙsX»zœ¸ƒÄÝ €Ä޾ò‘;®Õ9Wþ•ijÈ z3±ô%GLXA ~íþP«Ä­ Âkÿêg_¹þUÙïwÐaXȉA…%Eqì_ÿ,ã=:ÛˆÄCzà]¤H¼zõ5qKÊ£V¯¾F÷`ØõŽÄöMQ`ô×'`˜‰ЉH €NDbt" ‘XÙ±í…ß<ûÂîýƃ‡:f—öp¿ÁH8IDATj—Q™üiÉãOl<ýÌ¥K9ÌÝ'°( ”‘ƒ²þÛzÊÒ%KéÙóà_<¹þÛ?ðDbndPb=t­ó˜HŒŠ†ínë7üÀÓ«¦Wy"±¿L2ò ÓíöìS«V3˜ äSìH¼îö5a/}— Ãp/‡J³ÑîÙ§6ƒH `x%ɉ#®"B“­³F£å~zöYg¬»ëëž>3fLËpF/©îbrgºŠ>aؘâyêÓßǽSäÐÄDËùsöYgˆÈÙgánœ˜hõJLÏýÄvx¶9¡ÔÓØÇ×ý¯"‡Æ'šöŸ Î_æ4^pþ2§1ïIDAT}|¢©qz ]ÂHì$£ž¬Ô>Fx¤:, î¹—°sÌäÄ…ÐhtΊ‹Ï³Ÿ~ì¦Ûì+.>Ï~©Ñèè›è—0ÛɨûÍ>…x"ÙÓÓrQï%°;cNöv»ý¾•Ú?rãÚv»ý‘×ÚOß·òÂv»Ýn÷¾¤ JlàG§{=Žx²¹3B¦,˺þ†[Däúnq~yò´èž#è”ê~âˆß¡þ`ì9=Üs+N‹zÕ-0œ’DbÅ KaCiØS÷5Y7 Üù;+–ïq¥:Oœ 9 alñBÝSÉÍ4 TªóÄäÇP{jã¯ÖÜèIDATgÍÚ+J·4{q‡«M·¤*ÖNcí+nÿApÏ!ì1€ì¥ŠÄën_C0F˜w¼cÙg>ó…9sæôì¹uë ç½óœd{!ФÇèENŒA™½ÏH½>rÀKç¹»]³ZõžÙ¹ó3F v†,Ù~50iëã0¬Ýy)póÀŒÓÝ¿çT{vÛ´q‹ÿí÷Í?ggõ§Ôs†#'Æ üË'¿|ÊÉÇE)Q¼hÑ“_üò}+/»°/û Œ‚žO ‹rØÖöÝÜáÍy)0–'žF`î9š»ƒ>ŠOÉÀœ´dÉ!Fk×®†ˆt»]iµ&—·l¶Z­V×c(#$IDAT4MÃ0Ž<âõ~ñÜ"•ˆ×Lù»æ¬}v0ÀŒû¾_‚1Ðw™Ö'Np˯AEŲ˜ºIÜð·eOq¸8°gÄõò¿©¾Ï*úç º,ê"“1Økw6Œ”Á8eÞé99ª=‡VŸÊ´À7Õßi¸wAŠ ¤—êètÄ„Õéæ~`¿ä,ZéŒã_áÒÝÁóª=`à°a£AðÿŽDœ¬¸)þKÜ-aAÂÓ!lÅPÎK{tŸ—uŸ9VŸ`±ÞTàœúƒ:—kƒ*§áÍNq'»ƒ¢%pCOŽl Å•Gþ§a‡mÃ6Qªè{ J±¡bÛ(Cõlñ ›?çjIDAT®žsXØ&$éeWŸ8ÖÈaÕü¯ª+S%HclñBûœ„9±?µùë;ÛyªÈS=YoØ~#në>dMr $@20ðúÄ"b¹ôkÌèÉ.1gYÔ'Ž5 RÉØäŠ+°üÛr¹ ÿ^Ÿ8°Š°ÿ«°šÄž*J†úÄèĺÓ@‘,[ { ƒuÕªK®Xu­îY™bÝi `vl/íõÌwܹA÷ ȉâÙ¶åòHua€”REbª>91:å¥>1ÕÉúÄ@Z*½sbEù(€üÐ\ŸXBêÑyêkœ) ý¢IDAT‰Í˜ §h¡¹>±Õ!¢ËœËùôh—0»«Š+ˆÚwsŸ1²†,Ù~ÕýÔ]ñ>¬]1B`Ÿ(“Tàn!rÃ&_õ‰ôÜÁÌyìTÏu»¢Å³—(S@†VG§Ý¡7z]a@£ ®l Ü ñBy©Oì®Cܯ1dä»ÉwˆöúÄ¢¬L ¨yŽñ—ÿð8€áA}b›ÿb(wK²¨æ3AŸ(H?Oå@-&ž?ŒyZœ§žaíŠ}Ô{8!BÔ'úÌ“+ç*¸æj2läÄ@ŸíÄB-&t¢>1:qž(˜;îÜ {•Ut“IDAT úiàõ‰Ë.vã~â’³\?EDXm-‰«V]¢{ ú,‹úÄþ²K’¹bÕµº§ ÏR'Ž»ˆ´³¤¥½­Í=šâUJ)§õ‰I£C"aNì$¬žÌÕ>FåšjuÖKN ¯OȽ¡?ܪ_ L2=:Í¡f ¥Ec tOa°®Zu W¥aØdQŸØÉkÝ=É®»>±ÿUŽÛK»š&·Jc8e]ŸXÑxÅ¿mÛùU(ê ëN µ˜Ð‰œ¨Å ‘±Å ½‹MK{i70 äÄ(°±Å Ý¡Åó!¬Aþ[^Îs1ô+b³IDAT`8eQŸØ}s0Ël¡¿6mÜ2¶x¡û§ÝîŒRõ‰Œ¹¤;Nv°)úÛØ?æ ß€!‘ꊭ4 ® LÙó5©3"òZ º4IŒ£œ`ö÷!H/‹ =«-Q™}˜òÚ¡tÓÆ-ž§þ 8ʘÐYÔ'¶\<#p¡úB#ý§{£l¥æ? ‰é©O,|Æ ¹/ÝŠr}–»¿„°1 /2­Oˆ£ÐHÌuú«ØÐߢÀŠɈò%‹úÄ^±%!WrÂ÷%@–2.Ó{J#ëúÄÎÓˆí€Â@ã A ߈Y`IDAT@6¨O €NùZwš„0l¨ÅÌwnÐ=ý”*¯»} ÁÈÒU«.Ñ=}FN É«®Õ=}–¯óÄ(1ËËØ£€­Á­ŸúÄQ8ëkzZ€vYÔ'¶D¹.:Ùz[},Ì‚_€Œ ¼>±½œá €@™Ö',?ìIší§îÇ’O«÷®Þ—¿›§O” Ù[4¶@÷ëªU—pU†MÖ <å‡ýÑ´µŠû ÀöãÀ’Ö#?vl/í2œÜ*á”0;‘ÌAÊÔƱî3V¹ ®«Rï‚ »OÛ¶ó/(mõ‰=ãHPQ&ÅQå¾»…JÒIDATè¹ ò`À ¥º‹©_òðHŽ2ðúÄÎMÀaW]¹‡rê[–å®a¸¡»b”kÁü*Z<Èÿï €‚Ê´>±ÿ±?Â…õWl½1n 0hÔ'†ÈØâ…ƒÞŦ¥½´¢Öbê™­’ÎO\!D1Ðÿ0¸žH€ZL(6¢/€¢£JÅÎ’ý?íöOÉä°-"'F±9ÔIŽÇ/ô?îÙº£Ø6mÜbÿq·>Ü6bOœ"Õ' |4×'îoeê4 1ŽTÐ…úÄ(6÷•VŠPºiãÿeȃ¼Ô'¬ì®fe=K )&kÜdíIDAT²òÇTÅ©ßXOKŒ[~¼Ñ\Ÿ8°Åýس¾´ûÕÀþÄà!1EZ|&@%¼bË0 §´ƒ;[µQ'¾¦Ú˜â´¨#«¿?†œs)5!@Qh®O8ìàú7¹¨Oì7Í%-”æúÄiêûû»G‹ú€¢¹ãÎ º§ Ÿ4×'Vtˆ»mX P&W­ºD÷ôõ‰"¹bÕµº§ ÏXwXwȉ‘-ÃýÿœÔrb´"'@§T÷“C¯ûÖ¯ïÙgùò‹6oz:ƒÉ@2¯O,A–Ÿ:þ–ÀSÞ:¬.$X^9ôè#(^]½úšÌ nd IDATfÉ ¼>±ìq#PÊUäËÕdà÷Ï7~*ì¥Û#Õ[¼ŠaròáädÀ ¤:Oœ`µçôQÍŽßîÔÙp k‘ ÂM›ø_ ëq/ÐBýW0¶x¡ó§;õ ëÜiñ7ÆÝEúþ=Iù± èãí¹SÏã,÷¤‘u}b‡'9¶(ZÔz–=÷ÌÔÕ#ø÷z†áAdWJÚ:Ïü|9™ГžúÄžˆeMQ´ Z¿rY²a-<‡%ŒàÏá<-бlÚ¸E±aØN=ûugØÑû{^Rg®žaÕŽ»=0þùçåÛEÄl;l¨~ýUý¢¡>qšÄѸ¸/:UaIDATÑ:0AOÀ}Fœä8cÎa û©âówÇB'l8ìXâŽ(“<ÿ°Î8Gˆ¸Sw{Üþa/ù7Wì%î‡Ø_1fØ&ŠÇþi'ø«2–õÑéô±Ó½y>PÿåßÈFô“‰¿šÕ‘5â°Ñcsn "‰ŒþûJ‚‘ÃvWô¿”CFõ‰%è°ÝÈÖ’’º˜qà­SžÔ6J¾÷ô6ú%nqk¤Ô÷èeh‡Lõà vM¬EÎeZŸØÿ4b‹z4ÿ…W Š+^ A½_dlÐW̹ó§è¹TXOõÙâ ;Dœl´XKàuõÞíW•¤ÈЂúÄ(ˆaØý]¯8·ê?—œ~Xµ°`Â)3IDAT3Í}ÜIdôþqgv^ñáxæàD¾°þ6ÅñGzõP±f äAª£Óën_C`†^«W_qùG`ðð?ŽØMÑ¢ÞJ}¦9îl´D'â‡kþ1£o}× þ* ÕЂu§Q`Ë—_¤{ 91 lÈK;Àå@}bt¢>1:‘÷_ز,÷ðË"'ö,éöÔiô·ø‡ŠÕ"ö ìæÙQ¬ýE×N÷·>±ó({ Ÿ²>OÜ÷¸è¯ áO¸_RwvOØÿ;DÄÑ<“Œ¾-`xh»ŸØè_}bg(ÂGZÂÑKP¦¨Qf}¸ŸLù÷÷IDAT8ì§bCÃWŸØÓA™üA:bKœqö=XúgB0Næ¾õë{öY¾ü¢!¿í@Îõ!'û&eÔI¼m~B]`.nPÕ8‘Gy@ñêêÕ×d6H&ë5¶òü%˜Ã€æìž Uûç?öRÜ%©áHP7@2¿ŸØ¹É}r4ðR)uKv0óì.ì%w‹ûi²yF l Û6lÎHCñW9¶x¡ó'ðÕ»óŒéÄiñ7ÆÝEúþqªÆÚc¬]p <'h}â(ã§Ù6JÑâã'¾R õüJQ6Aø¡¨-€4J¾Æ‰æ0Âï‹ÂȺSX"«H¦{ò}\ÇçIDATöÌÁ=r`íιcõ÷ï(p§ÝžOÈ¿’×b" ç‰1ù?ËKÄ2 ‘~^‘î>×®þ«÷—ŽW$ÇöKîž/z-z§ÄtÙ3x¬RÇû«7Tp^ ÜDÑ¢~ƒa{윬(ê£<"†a‰ÅŽÄŠúKa™xåË/Êrw¤_!INqÚ½®2ÐG—vÈOÎÏL¤—ꊭdÁÕ³dàš ëDP>©Î'ã©Î›¸%0'vVOæj£V©_¾ëÜ jU‰H6=Š"aNìœúõ$¬=ë{Âmâ>”CªóÄýb§Å… ¡T牣ÄNÏ-LîU Ã’ †D’H¬> ì±ü0%{Ã)v$f]-ú(ÕyâXÉ1ð£:‘ 91:‘¡±l†IDAT “†œ8ÿ÷ 熀Òx}bwTKs—pÏE¸úµ£Ì°¬@²¬O,ébO” ©à(œT«]¦ xž2NI §ƒgd»OÄÄ×½µg¹Mõ~ý;õlëÙ»¿¢”¿v…â­y6 ! õ‰ÃD,Á+ñ Œ»û>kquOA‹žÛ†Yõ‰bÃqO_ªë*‡L‰e@YÔ'è¹á¾ 2ˆÜ”|E.ê÷]`þíI‹ÃŽTb2}P¯O¬ØÖ¢Ò—%ö_xå3l¶a}Û{Ž–`¿dÏ0ÌtÖ'V¼äÉþKœ"–4NP9Ê Ãz†m8ó¡2ÒdIDATŠÁ†xÞ¬åm€¡”¯úÄ3NJ#_ëN[Sú;l¿ävb€â¢:å+'`Ø 91:#'Îíâ¹ (ž.iö•Œ±§ì'€Zª5¶"æÄzËsë Ï´'öç©=[ÜO{n«Ø¯ÿqÄ)ÒkÒn@2YäÄ~F„ò½FP¹âèÅ€Ýûroëôw÷ŒXu8°§â1=õ!'ûépòEwˆŠ’G§ØÖ¿n—¿SúŒ–œLrâ°Ÿ'­ô7:3àèÒ¤¡)w~€a–Ýyâ°¢‡ýÍ##ž*N_1ÍpdzžØ9,ì/ßwÏÃ}IDAT›¦\±º°{÷qéÀÉô¸£(Õˆ4ðœXQÐ×úÖÓèiQ,âdíI|4åŽzNµb¬±@Y±ît ¤¼€¾#'@'rbt"'@'rbtÊ{Nk¡ VÕNì•=yp``ö,¬ww}€J²ÆV`ÄUDè¾Ô)¢ØQ¡Í;ËÓòØÏ7k™ äMªÕ.EÁÀ¬7p|÷Š•þ5&Ãê'º“agoëÖ·ÞþUOãŽ}–É@®¤ŠÄý7ëRä¸çVé§(æÎuåeº[ûùæV««k> #±ÃìNl[wûoüÖIDATš³Ï]aÿôwî{J(- rb“0ûýÚ¢×'î Ž-91„Éîè´ûünƒpWÎ…äÄÇj™ äJªH7øÅ* ì ®þCÜUûXö}’wtÍò#I$޵´–'Zû+ûúŸ^/kpu#WleœÂÄŽÄ%XkzpWAáüsΑv³Ûh¶E¤Ùj‘€äyÝéÁ…IkÊ€Æ º¼¯; @¹å7'` 91:‘ ÓÀë µ7ðúĬC €Bª£Ó‰×¨2¦¸ÇqÿôŒ¯è@¡ ¼„uèÀºÂŠÔ9nG‚ ŸIDAT $aNìd¨îTU¦ŽQ{ŽT;kZ…å¸T×Á€ÃúPhYÔ'Û<îî(ŸTç‰Ó <׫¨d̹a@É ¼>±ÿr`]aõ^¨ž(«¬ë6ö,H¥1E4Œõ‰ÈÖ@'Ö@'rbt"'@'rbt"'@§×'ö¬ŠÅ­À¸ ¼>1¥“PxUÄ@þÕ+ý•§öc9 ”4DâÀzÃa-$.ËK,‘©¿GÃØý†UªúÄþ²Áõ‰›+Z©êû%«OìÉ’“M €"Êc}b†‡†óÄþzÃî—æ”ÜIDAT†ÊÀëÛ$ö? L¨O €N¬; €N¬; €Nzrb’ilzrb’iläÄèDN €N©VöXwûšè15nac›{Å{­OŸˆó RE⸩m¬ÂÆ­þ5š…¦ç¢7'ûÑ óQò]@Štž8Œ'm +lܯñè£\Ÿ'Vp‡[òê/l¬îïÙ*Aÿäï0Üò›ÆWw»â²cö?õï+M(Þ[”I~sb†91:‘ 91:‘ 9±kwôÉoN¬qÙç-kjIDATµH&¿9±ÞbGβcÀ@å7'öð䩊jÁîŠÂâ:òܳô9(ö蟀2Šþ)g(œb¬;mìY-Ø~à©lUö?ëwž;¨Çé¹¹b@iäº>qzžP=¿t:«GH­*‚k_ÆKëÇ+¿tÒVÅî>}I^=> ‡ sž¸¢'šaWl¹#=> ?ò{žØ¹¸)â5ÌÑ+;WeG ÉÎùZÿŠ£ìÂÓ¿çø€RÊoNœ¸ºp`ÿ«î–ÀÃÂQÆ0lê)õP>ù͉=H¥”ߜ؃PJù]c €;NIDATaP˜œ€R"'@'rbt"'O™ö­YS¦ÆK;!(…üæÄ†K²½¨7ì¹xVÏÍ=3ìo N9Ú ?=@¿äú~b瞥dU‰Ô›ô0n‡¼Ýa5ÐOÐ/ù͉V+r·ø“TO‹»§bEÅÜ¢O50ù›IÏ·%U¿)ÿ|o?pÛ(søå:'ö0âTvs–qö<ÜÄó4lLQÖiè9Uõ»óŒ8aÅ›ê¹ õ' x#aÛFÙ; P®ë;¹—û«ßŸŸy6‰;™ÄÉ\زÕÎ°Š©ZSõü¡.l’s_ÿ&î…¬ïÅ?Ÿè“! @b¹®OÏIDATìÿ~Ì© ¾ž§Qf’`“ˆÔS;“\è%î@ì<±C‘å*hIøTYGÉGû;=õ|tM†G‘Î[½*øzžFáÙÄÙ…ûˆn‚a{N5ÖL’Í!Öô¢ôŒ»- ŠüæÄa‡pÝçe{>•=cª¿Ý¢×y6lØôÔ[ùñ$ Š™„½µÀêé)vçéãßuÏÉ`-tÊoN\z¤’!'@/rbt"'@'rbt"'@§T+{¬»}Mô˜ªÈƒÃñ/Ôì\oì”UÔåÿÐ(Ó5¶û‡EhÂ*`è9OÜGþå(=牣 gKÎIDAT°C¬»úž§r…uNlìÉ3”g@g}cuÖKZ (®¬k1…å²õ‰(½‚'¶Bjè’ JO}â(<·0 nGh”ÝýÄ3‡‹¾5týȳìrbÎàW°óÄ”L~ï'`,'VïÑ0Œ¯}ã~]?³ú ¥b¬XqÍMŸ¸vݺõëï{àæ›¯Ó=ŸT4†Ã3Ï8KÆÜ¶½ð›/~ù¾•—]Øh´víjˆH§Û‘V³ÓlµE¤Ùì´[®i†qäßô‰ÛV^v¡½íÚµ·._~ÑæMOkœ? ÔÿñS'ž´ôì³O\yÙu¥Ê‰Ï©›êßIDAT<ã„Ìfâq÷×7èÚ5 Ð vžX½ÇA‡CE¤×øK ÐJ›ŸyÆ ÎŸÁÏ‹œP~רJ°G'žyÆ ‡FÎ’Ét­ôÔ{´pXv’cûUw®ìá}<úÛɉÉ”3'ös‡gç±§ÅÂ7 {LN H¦ç‰Ã~¦?%qÿhrb@2…̉Ã~¦ ‡î#Òê¡ü¯’’)dNÆ ¢i’ãXá<ìD22'ã¾~ÊsèØÝ5=Â6 l''$SÂk§íÇþpëiñ×X›ôì @D¬±Õ¬±H¦„牵 '$S¶œØ¥U•©IDATƺ~W©Î¿åÍo°/›Òõ€¸J•P8¥:O @á ]Nl†aþÇöÓ”ƒW sbÃÅÝhÿ´,Ë>§ë~ìß<ì)ýUª5¶N|µÃ­pE ¯J˜»Y–ådÃvKØÑi'f{¶r‡pOª8²|Rj€B9sbwd•(»£²óØÿ@ö<îß·BæÄa?ûÈN‹=áÓŸãªã+91 §BæÄa?-n^K è©9qti +6Œ›æ’Â2'îɉ|Ãp”€í\Æ8¬ûÕ(ý°•0'¶\Üír­À(ë9°gàNoYŽ7Ü­IDATÀQΜX 2`@%̉èKì$$0tëNC3ÃýÿüÖäÄhEN €NäÄè4Œ9q”u6X‹æÄƒ¢5±—ÀÇ€ã~â¨2.¬ÄÝP0$J˜ûùÓÙ(-aÜËXö'bIcÏæŠ>Ù9EŸ ¸†"'ö§³ž–dµ„ý[y¶ Öݨ˜˜bõNÅRÈœ8n}â()c²´2ÁVžPÝ—\–lŠ«9q¬úÄž´2¬[²´2M2qbç`@r …S°œ8=ƒbàÑ`íY)1 ª`9qD†«,’¿r°§ƒD«%ìïàßÊÓ’¸¤±bW×›IDATQ&(æÄþúÄž–°ÆQjÇ­IwX÷${Žày;q?(@l-J¦„91BN €NäÄèDN €NäÄèT°œx  hh_0„ž{J³;õ^"vë9O)$jàkl9«"çd鉞ÓÈÉ<CBÏyâ°š»ÎcO{àr•žö°L¦ç€äÍ€~Ѱî´^s×ðñõ÷´…6¾{ïî‘Ôæ'ËZrâ¸Õ‚¥uy{žë {µ_«4†}чœ8Vµ`[Ê0¦Hdû2>™Ñ|?ñ Oµr*sÎ[jî:0ºNIDAT{ZÊʾêñÝz:'€42ʉÕe}ÕÂz†Uöõoåßo`gÏ•_Š‰Ç€~ÑcX“ÿ³ ±D,ÃáwÃ.×ëN“z–Še‰eY–ë\½@NŒ¬"vK‰×ݾ†` …§6þzçN3ìÕJ¥R©TìnN ò…œƒrÞ;ÿlí§¿oIDATj3rÈùÞwGåÀ+žœýc†½ê)úha-žvõ€Zô¼N¯Ø‘X‘æÀÚ ¢#Lú÷nLtr…Áú­Ùh÷ìS›A$Æ »+¬=°EÝ9,ºDl5 z ºÂ[ÄÏVÑSËí$9q`ÄåH55­ž}f̘–ÁL„å²ÙÏd@ ºÚWª£Ó}ÉÚô6–¡qX•ˆ°úŒîF*LôÝÄDKD.8Ùç¿x§»Ýß`ÐÊtE|ƒêÛ¬û7¨R]±…ÞܡΉ…ö›;ÊzZÜ£©;» › Gž³4>Ѽàüe"rÁùËÆ'šöO‹î9€Nüï¾ÉIDAT #±S€ÁS‰!b}bÿP“ÑX#"<T£ÑùØM·ÙW\|^£ÑYqñyöÓÝt[£Ñi4:úfú%ŒÄNÒéÉ>£Ô'*,‹uSç»Qp:{ív»Ýn䯵öÓ÷­¼Ð~ð‘×¶§è›è—êcG§ЉH €NDbt" Wl@^ÜqçÝS•åÝe£IDAT€DbÈ…«V]¢{ Yã7‘rá†~Z÷25„¿y„!€~Ž7±+V]«{ yÁ[èD$@'"1:‰ЉH €NDbt" ‘ˆÄèD$@§=V»üà?~J×<N»#ñ‰'-Õ8†Ód$>ûìõ΀ád¬Xqî90¼þ?z_JÜ<IEND®B`‚preferences-svn-dec-general.png000066400000000000000000000072671203611042400343610ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images‰PNG  IHDR«Ô­p›š pHYsÄÄ•+tIMEÖ. {Šz¥tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝOnÜ8ÇqÕ ë ˆ‘ò~07˜Å87hÌÚ Y·‘L÷Ìéu_¡Ñ7põ"7²wÎ>F.Y °ùçéQ¤H–ß÷ƒ,Y")VégJª¢vÇû‡ Lú[ï@7$ »H@v‘€ì"ØE°‹` À.€]$ »H@v‘€òÜw‡ÃÓ¨±~î//ö—Û­ßÝÙ5¨èîpx}uÕ¾Þ×WW[„à3ÍJ§¾å,2aÄtœÃ¦ýîcê'§¬ÛUö2‡ÎiØ5H Ò  1/}ÂY­lÆzÕC°4ÝÁš ó¯Ü sWÐGÉŽ$MìIDATñþÁ ÁT9ÑÆDWž‡uÞø.,a^ÝDSøb ñy¹Í *Ù´XHÝ,J@w\æ ÓÜ´:ýfͺa]ªœpùb¥^~Ew',d±%ú qjE›ûß’CP_WÑáî~lkp ¸yͺmN•  ܺ¹¹~µ9B]¥cÀ›lZÎÖeºæa ·Vp^jxžÊ¹¹¹ž¦éÓñóêr4QÖµ>…+h‚Z‡}õøX·;¹Ü …œãŒx!½Y¡‰ÈÓ:B$¥>õâV­Ì⟦¾÷‚õ š¢å ˜/s“Ü›$À¹ðBpõpqô–‘§·EÕ;ŽCYN#²–9¸]$ »˜€]$ »H@v‘€ì"ØE°‹` À.€]Ï?ó Æ±ûöí[ï6@ÏJæ)€³Æu@v‘€ì"ØE°‹` À.€]$ »H@v‘€ì"ØE°K›€ûË‹ùßé¿î¯æ¼…©Í7²Eá©ÚtG´ñL³ÒþòâxÿPXÓ\B•Òº{»@•€JÇûMº¹«Í#)7Ý%á5›k¶É5FËœËqG‚á–/»IDAT.È-‘{ @ªtõÓ¡ëFÀêƒÙÝ6ZZ¸‚·0ümt¤Ý6\-µ•»B¸³Â.Ì×È;`LÚ1 ò67W\Mókõ¶n!%ejxUˆÀ jž¯P’áhkuÜóÜêñV`ë? “îyWÇBÑ­úÞZM 7ª‚ûÈÀ ´÷‚çŸK®úy%¤./ÎKÂ\aÔÎK·MµJh’[æâuyÇ bÇa¹îƒë|ðIbМ Æ€ìâ{Áì"ØE°‹`÷‚U^í_ön‚ïÓñsï&g\öjÿòëãpwÌ}÷¿oêÝ à¼e¦ýhÈìÑ>åàIDATt‹}}|øò¸k_¯ìîpøøá=!”Èv ̓.µ?Áwx'+#OÔ~4ô÷üó×wÿýåÝo]jþ¢q…Úá^ðè˜HØwBŠT™5@/$àzLýœ»¢ §çSnU%8úNÁ’Ú‹Ôs—&§¹°‘¢ìûä³Âç4mA~ÐRôQJšÇ?ØHý³`áÉÞ0§îá½ø˜ÍyÍÔX¬n½šMÂ&)KPEå ó.ú\ÍêC›¬‡^–?çÓµâÔUžµ¿üñO”êfyqú7/ðtõ¤$b4„Ú´ÊÕ? 0é¢ÊÏÇ…G5 eæ>þ Àv6ü4+fjèIDATŒw™Ìa`aâD#,õßÔE€¬ÿ¨¨r†÷2œ{ep*>¶O…xeNêGeò¡P?„©{'dõHÊ»1À,¾ À.€]$ »T×ç™™Ÿ¿¸h?_ÞÍÍõ4]÷ª}p>ÀÖÛÛ7Þ´êÚ;!>(£/»inŠüiš^_]½¾º2ûº¹~ÿãÏpaƽàŸ•^ ×ØE°‹` À.€]$ »žxžû\{Þ\³[”¿]áÀø*$à<)têp²s˜¹{Z¾×óÄ_ár·ÃÃJ½×¢}ÿÛyÅqîJgÇsÞÓlÔ-t8PÑ&sD‡“7¸IDATF§D Ÿß¶õÃv£5 ›¯n€Ü¤T#•ý¦!OÊŽÑ™Ûín˳¶%âÑRi “B»?GOå¼£¥ÍÃv…Íë6 º›B0)û-ìðcìi|MÏkž½'w{ô…ûh¯æÑá_õ\랯櫹•ær4ëö‹)?¯¦¯¨°ßr7OÅë´jÀ ¬¶ÉYðê7±fCapt³…ܽ‹Î×_åI)•´¤¤ÛÇì Ø±í§aËm@ôªb©áÞ1ÿIx]zµp¬Vá^ðü³{Y*ºÄ;ÙñÞëá†!yÍ¯Üø obxbžø÷‚@@°‹` À.€]¥÷‚ï‡Åunn®??VÕUø4ÌÇï…ßþüóÊ«€-Ôù<à/ï~KýêëãÙ|¤Žo€,Z1…°IØáå/Aa™[4©V!^ic¾]Çl•`Ã뀻Ý·èöKÓë—ù öíg+KP–¿OÌÚ_w“ÂáW؇+6¯Òçú­F~×Ûnï¶úNˆ&þÎëoEGtT¹Â>¬þ¬žÕ¢n¨–€»ÝîÛ·oóÏòÊÂ<ɧÂilt2IDATTÜ“©p~”ÔDÄÑ¢R•¦š!4L.0·m©ÖÎg=a¥BK¢mNõFV_ÉŒ6C.yñ%ð –ãUí•™Úvñµv7_÷ݵ¸/Þò ×›†GsÈÝ’zÓ†»9)^Áhúöh:SxjŽO!8Ç߈JÑN¾¦¿öKj÷¢ë„Ýäuq¸²Ð°ÅsÛ&— 7Ì-?¬Z(GÙW‹«E÷w±deȵxR=£Ù#ùåÓ¿ÓRŸ+÷%—þ‰viªI¢TiîÂÜ·¨üb *Ÿ¯Ž¿­…ïά•³6„<^7\WcŃYN“’à‡Šíi†uÕSòD(v®WŽxÁŠŽ-y]„ãwÚIDATVwQµ,ý5ÕAëþ˜ Å=Yð¿øžagåƒsJìš²ØyÛÕ‡w-%ûÒ^áA¤×òu©y/ø|šø;æÏÞ^‹©Á`áA5ÂΦÚP²k£eMô/®{ö·Ý0Pn•pF¬/g„w‘ òY°~ôw ®+ÅéÔ=Þša¤uµ F ÿ4 æ¶-UBŠð‡$Õ¹Fý«õbÉ›äö€Üó©>n]-k¿„—ÀíÕÔæ¹}XB¨KójÖ=ˆä«¼E']÷–Î’w8üû‡É›?qQ÷[q]þ$6h@ÅË[6õí„‘_‚‘Û¶‘p—7™%ÿææº°” Z"Æ×å„‘—à¬$J.IDAT•&`—)º¿Õê6à)]Òê®Ëõ²Æ5®p¬K¹ËÌŽÀ.€]$ »H@v‘€ì"ØE°‹` À.€]$ »H@v‘€ì"ØE°‹` À.€]$ »H@v‘€ì"ØE°‹` À.€]$ »H@v‘€ì"ØE°‹` À.€]$ »H@v‘€ì"ØE°‹` À.€]$ »H@v‘€ì"ØE°‹` À.€]$ »H@v‘€ìz¦\ï÷?þ›tÆIDATÜ´О*ßÞ¾ÙºÐÞîxÿл ÐרE°‹` À.í§a€³öjÿ²w†óööÍ·?¹Kž|/…»LН|ìá»Ô'|Ÿp/Ew™„!_w½›pLõרE°‹` Œky±¿¼Ð¯¼ich¿ Ü QîÁ¦ÿvüþò¢ü«ôʪ×ÕU¥…UœvsƤ€°k>8Û§FǪá"¿˜hnH¹KÜ¡Mø«ãýÃjaQ!yýźæÕÜ*„­šqwÊkIØ6¯y®UGß…Ç^xFÎèŸuG×w·Ò—6ìSØÁ^M%aWA’¡còIDATt|^ŒÏ:8墔íYñ[a«¡BPcþÃÓ ñ$ ì ÏŦàl1<óÍ-¿ÊúÞ1«Àöw$N5Îí9…ù4 ¬;5ÂåënG ™M‡º é’>Çû‡ùߺÍÛä&c@àûñæ¦aôN¼Btå°ÌÔoÃ_éKK-ñ–Ëv±x—©=F¥îo¤–G—È+§Žjåò¬–L±]è+ʾÖlvâÌY0»H@-,•¿ª‹` À.€]Ü †©'cÀe­—H@˜ðööMï&œƒ½´䣒ÐרE°‹` À®ÿ¯Ÿ2yZùIEND®B`‚preferences-svn-dec-icons.png000066400000000000000000000064621203611042400340530ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images‰PNG  IHDR«ëX\.â pHYsÄÄ•+tIMEÖ*â„FÛtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝ=nÜHàî…cðàV¾Øl°ò ;àx `gv0ðÄs…ÁÜ@=o`8— 9·à xƒ84ŠÅ¶¾ç‰]¬*6À×Õd‹ßþîö~ÒßÖžÀj$ —â’€@\ˆKqI@ . Ä%¸$ —â’€@?7ÇãÍñø8Fœ>—‡Ë‹ùÚ¯îì& º9_^]-?îË««9BðIN£Ó ¿äSdê³â3l–?|ئµâïä‚ÓN +×R„ÎiÙµ‘ ÚÈ4`a•ô©¯È¦Ê¦ÄZoò›€åÅZ%Š—ÊAVn%w·÷ålÂXœMIDATë§q2‹e]e}Wï¡ØÒ¸KNç3„í«äNcM’ML‚£°¼.«,ÓÊiuú¹ž5ÖumýÔ·wZɯÆÃ©wÒ9“üw@r¦Š¶ò¯c:ì Áü±FÝ IœÀ«ŸÛ98\ÑrÚ9·õV_B庾~õâð| c].°Ë¬ýÌÝgY± tk…ó2ÕÏS?×ׯv»Ý§»ÏƒûÉ™LæXÃ0q-aªÓ~òøv8}•/úÌ©„`ãÍŠœˆ<µIDRÛ·^ÊCgfqçX»uïçG@zÑÔØÏó¥˜Rù& œ‹J^v®þê=™Øw)Ú9V¬ÜÇ'ë°IDAT,îÏæ4Þ•îçV¶çXüÐØOe{ßA‡S~©¼{ß#ªßÖ:Íñ¼|s ½w½œVdKæà|#J@ .OFâ’€@\ˆKqI@ . Ä%¸$ —âz²pÍ'€íØûömí9¬ãɘçœ5׸$ —â’€@\ˆKqI@ . Ä%¸$ —â’€@\¹ x¸¼(þ~-¿T4¨llÛ}&stÞvP³°Œ'9—w·÷#G*z˜¤·Õ=‚C²0ÓÝí}Nº•›+©r>–·ÔÍÙ=gßBzÄÆ>‹~Ê+Áú!¤g’~—€«lsiIDATd%`ùT?ºå|2—÷mì­Þ ²±þjãJ³qßz³¶½Ê ê›8„âú€¼ƒmÊ]f~†í›‰®¦Ukð¾åNÆô™£2„@„˜òSðc² ¾Ú<òçÜÉã©>°ÿ Ó¶Ü«\«kÜkÝ[«mkÙ†p6"÷^pñó˜«~•Ú./[ê ÊêQ[léÜ·mV‰)•ûì¼>p`#öNËù¸·òuÀGɢ΅5 —¿ â’€@\ˆKqͽà‡ç+ŽþéîóŠ£39|qxþõaÍ{Ö¿¾ûßo~ZqÀzf•µØ×‡û/ûåÇ#úßIDAT-Ü?¼ÿåÝo+Ρ`A Sé·\e-öôÙVþŠvÝuhÁ‚¦Ò#Oñ·üZìé³…lµî:´ð÷üó×wÿ‚0ž{Á@\çq'¤‘?¿F:ã5àL4Ý„ùŒZÖÏ—¹×±ÕYb©hÙV•iÌ c:Ö2*·Sù¬WÁ£ñ5žÎÎôו!+U.W© ÝU¶Ÿ~È_{v–f2qÖó®±®æÎí9²¸ïÚ3³(0“×€…I>rΤ³®S§Ä¢¯s—ò4¯3™>Kºr=ò^%–Ê»'dðÑ5]¹i| P ӌ߬|Ä›|Xé-ÿ×IéGaòIDAT¾FÓyD9ǻ٥11qÖ_åËa•õÚ¹Ÿü‰r»ö£ë[˜Ï ØwñUos¾#¬í×¶Ãïõ+0¡3þ›€‘$ —âʺX<ú鳋í<­oyëÖ*)\_¿Úí^­= 8?oß¼®gôâðüëÃ}ãóAoŽÇÿð¯ôîOŸ]ù«¸1]”„YÝ?¼ø”ü6×× V´.'çÞilYÜ¥ ¡ IDAT/Á+òt, . Ä%¸$ —â’€@\ˆK¥$ .•’€¸"VJò¸ÀIÄJI[pFS…G,b¥$€“ˆ•’;¦·ìjõ=ó©<}zðTù­”Ô¹câZa9þÚú©´I´ìœ*0ŸÐ•’Ò°6D¯ÑÄ­””î*³ŽÒTë5ë>XEôJIi½2tØ3õäˆ[))=bξÃ*"Uª/õ*0!•’€TJøŽJI@\žŽÄ%¸$ —â’€@\ˆKq©”Ä¥RWÄJIcÔç“3íp±R’'P'+%YŽ'+%µõVŸRâÔ‰_ÆÓ-IDAT-é'WÛ´RRÛÆÌùtnI°¡+%µ…à°ÀspvâVJj«…4xíæò"œè•’æˆ-‹A8q+%µ½šè6sK¥°Y*%!¨”ð•’€¸< ˆKqI@ . Ä%¸$ —âR) ˆK¥$ .•’€¸TJâR) ˆK¥¤jƒô|ŠÛ~(‘(} mUGòß ‡JI½ç“™2áXï0gª‰ówêTJʳ¶ÝOºNì> ªí]Ù„aTJªVJJ4¬qéš9ô€þL*%õËŽ"¶ÊŸ»‡­%i‚Õ©””µs«¡¾{¢¦RN•¥Äû`1ÀÁ×”IDAT½¨”„ RÀwTJâòt, . Ä%¸$ —â’€@\ˆKqI@ . Ä%¸$ —â’€@\ˆKqI@ . Ä%¸$ —â’€@\ˆKqI@ . Ä%¸$ —â’€@\ˆëIf»ßÿøsÖy,/+ß¾y=÷<–·¿»½_{ëpˆKqI@ . Ä•ûm8k/Ï×žÂæ¼}óúÇ7?•·<úw©~È(¾>øÚÃ_Ú¾áûˆß¥ÆC–€òåa¿öÎ@¨wÉu@ . Ä%¸$ l×áòâpy‘ßc´ éIDATxÖÉ,`ùCp'„ Ê'[þ_Ç./Æÿ)}æÐÃÆšd†“8æF&ÓFWqr.Ÿ+M™„ï ´rH•·”—6õ—înï‹P«wU—nß9VѬ8û Ä%%t.3_š–â’€@\ˆË½`¢h«ŒAY´wIÂÛ7¯×žÂø.í7òUI€å¹Ä%¸$ —âú?W’R‚\¦ËRIEND®B`‚preferences-svn-dec-text.png000066400000000000000000000475161203611042400337310ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images‰PNG  IHDR𦑠pHYsÄÄ•+tIMEÖ#DAÍtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíݘ%U}àÿOußî˜aø˜Ît#¢hâÏ<_1*A ÁƒÂ¬6‚®¬2ò,»Ï&y†f¿ÏfŸ'þ¸îFP4£&ˆÔøã»Ì¨ø‹Ý$*‹šÃô8ƒ¢20 Ît÷½}o}ÿ¨îš3çT:õ»êÞ÷ëÁ±î¹§N{oßúÜOÕ©:žïû¢xË[nP“}è&õ¡Æé BŸ1³å¸ãÖŸx⦺ÀÛ¿ÿ‘'ž8øàî=¢Dë•8ý–·Üø¬gþæ9[Ÿ÷ŒgüºˆŒ×ØQFP¿ß‘üà'߸ç¾ßÿ Bµçû~¤Ïûíç?åÌÓZèv¶!šîIDAT{‡ú‡/ÔÝaFűdzî˜ñÉɉc×ó/?þéÎÿuoª;"233é‡öÈ#û»ÝîÁƒ‡êî0£eýúu“““›N\û”3OyþÁ'ˆˆwÍ5;Î;÷Ü—¼ô™<òÄ/~ñØ¡_ZXèÕÝUFÑ1ÇL¬{Òº“OÞ°iÓq_ÿÚ};wíêˆÈ©§m|䑃{ò‹Ç#´Ò‰§Nf8¼~ýºýwÇó?ß÷³ŸïOÛȯrâô)›ÕFÎøÌíiyðÒmÓ§l~â‰îOt—»"þ©§m‘Nðô¡C‡zk×N¦m€Ú­;A<ô‚ßzö÷IþIDATæÍ›ÆÆÆ\V ûö=ò¿ÿÞ‰§®;t@DäŸö<ø³ŸïÓï_ü¬goétœÆS//÷¿ÿ½=ýë»Däi[Α‡öÿôŒÏÜ~ù5¯ô§OYž:Qެ\Xå‰è cž<.½û½ùŸò–Ûùo®9ýÄÓDda¡wèÐÊoŽŽˆL®™|ü±EÆxZêàÁƒ/ø­goÜpÜáCKîkmÜpÜ ~ëÙßùûïMޝ‘Ÿý|ÿ[®¸lzzÓÂឈë)à³Î:í-W\ö¡¿¼ãgüóëÖ­IÝÈ¡%µ‘¥¥¿¼ì÷÷û—ÝônùľÓ÷–—Ï Þð'ï‘;®}Kq©ÛxýD…ãNÜVOLžºñ™œØóóC?üéÁ_,ùÝn©Û}ä`ïÇ?YÚÏl1IDAT¸©söÓO<õÔ'¥}1”d0äm“ )÷D^ñªWÛë~ñïþ6\KÕï.˘ßëz½…å/ïyHD.ÜrúÇ߸myµÂ²È•»=xê—ÿé?Ê ?ð}D 興版Œy"^pv{í’¿qÍš‰'­YZ»¶w ·vÝÄR·×ív—º‹KÝ……¥?ðø¯~µð²sÏ8þøµâ‰ç‹ï‰'òº×]´û[Ï{áóž÷‚g>ó¹›6œö]úÂ>sûÇo¹ä’׿î÷ÿMÚu1|"õ™pno¸yž7¤Þaxž'"ã«CÏ<Ï[îD¼§>õ×^ùŠË-+~ñKŸ\îûÁ.êH#¦ÖDßIDATžˆH¿7I‘e鯄æ/ïyèÂ-§ßöû¯ ÎþõßAZDºËKã}é‹ô"26>&¾ˆ'ƒþ ˆÎó¼±1o¼3î‰ÃÐ6<îË¿|tñWþâboáðÒR·»´Ô]Xì.,..,,^\úÁ?ù”cÏÙúd‘ NûáwàËw}íðáÃóÙO^ûï®üó~üÄS~Íý-ûæ7wÝþñ[nÿð_Ÿrò)¾È].æuì[Q~õ ¹à¾›©t:ï¬Äé±1¯×[¶®qD¯·¡&&ÂF<Yîõ<¿#Oúc½óºÓß÷~ Cõ%—ÍÞyG¤zçu"Ò÷üþ[a `IDAT’ï//‹Hg|\|ñ=_|Ìód%Ÿ“µk×ø"Þê@ñ éuŽ\O<éLŒ=鸉3ÏÚÔëõ–ºÁÝn··ÔíOtÆ%ý+ÿ®ðÖ®ùßyÍ_}úöÏþŽ·½õ]ßõXÄÍïû/"rÊɧ,û~ÏLtœ†×cˆ±gEQøÍ7܃ç¥Þa‡ÊÃÛƒîu¾ø¥O>ðÀ½q+~ñ¬O†5ƒ<¾Ó鬔ôûâùþ˜H_Dö½ýí›?ðY ÕaÞ÷ö·«ý~_DVsf™èŒ{c"+ùôØX§3î ´þ˜Œ}v¿ ‹ƒÁ`àýñþšcú“ƒ5ýååÁ`ЗÁ*Ü,šIDAT Ó<îûΑSÞž²G߸QDö?úÈø˜7îÿîE/‘þÃ÷ßÿ½·½ízùú×w¾ëOo _ò’óD$¨#"^üÒÏ}þkã2nÖ «Ù› ª½ý7üï{¿uï½ß¼êÍמ{îË?~ƒˆÜwß?~ã_ýâßýí+_õêW¿úµ§Ÿ>ÙÂCíݵë+ŸþÔí¯|Õ«ßð†7ë¢ì]Q þ’†Û`àk35»B{U‹H¿?XV’òï}ÿÁȵžý¬3DD©9&"«‘TzÒïõ•`{Þþ¶-øï"é=oÛQÝð—{+Á~Ü“àexÁ…à÷ޤü²Žð×IDAT_z/xøg_yxé‰ÅÞâÒÒáÅ¥……îÂââᅥË‹‡–»““c—m}Ó‘ ¶•oÁøxçðáC"ò²—ü¶x^xqö§o9û̧MÊØÎoì|ןÞtó{>´~ݺٷ^Ññ¼­/{ùß}ñ›¯zå‹EäËw}M²ó[_5ë„›°7ÔùÀŸ½ëÓŸø\·»xå›^;.Þ%—^þÝïÿÃýá;ošûÓíoû÷_úÒ]ïß?=5³ëëÿËlácýóï|çŸý›/ýÍõÈÃoÚxRîñ È$ýd JCm0ð3 #ó%8+,""ýÁ`¹wäE]6…Ïz^0To³ÁIDAT{,¬=Xöµä^ͤ/Ürú-]|Tç—W*¯¥Ï÷ÆÃóÓÞ¸79ÑñÅó‚Y.=é÷ýïœúkO:e°nàƒ~Ðï÷ûƒA¹> ƒÁ`bÍ„çûÁ®TíSyé~öS/zÑKþŸç½`|¢R8cæÉãǬñDîùúÝ"röSž6~̤ˆ|õ«ÿßùç]à)Cê;ëÖÚë86uÂqë;Çž$"·|ø¿½ö²×ë›_‘<÷ùã“‹^s™¿ÜÏ‹lᤓN‘_­.‹h'x¥ïûÔ2bIDAT÷WJzc"2¹¦ü‰-÷z211Ñï‹/oLDÞúÅÏ…AZV€ÿù+WDÆüx²ìËr¯'"““ãa8 õêqï /D&"ýIoëÇþáÁGÿ÷C/v/,^\:¼°´°°¸¸´´¸Ô[\êþÛ·¼l²3­ö?páÅ/‘ÿpÿæâK;î¸Éµ“ê ›\Ó‘o}ëëaMùö½ß”Á`bâÈK'&Æë¸6µú º½Ï}îΕu×NˆˆLŒÇµðæ7ÿ[ñý+¯úýnøãsÎyé†u÷®‡O FA<ê¡Öï÷33ñeu XÐH¯w$6÷º¶iGžŽ{Ò rIDAT9Ð=è–½qð¶/! ÒÿzÍ5O¾åY ÕÿýÂ߈ˆ/ƒþÊ/ŒÉÎDÐ%å:¬à¸÷˜Œw:ÁÕU"âù²|ú“ú]ËIëþõ‘ƒû w/­î^ê..u»KË/|þçŸ÷Œ‰ÉÎʯ ß÷Vw§_¾ëkÁÂ1Ç319ᵟœèˆÈÖ­/»çž¯†5E¤ßëONtÔj.u› —ƒÊ‘…Z §œ|Òþ§¯¸àU×¾ãêo}ëëïþÓ÷k/á]GAøÍ7ÜúýAp~úì§ýú?ø³Âyç¿Ü, .©š˜\¹sWoy°´tä:#uÙtäYo\DÖLt‚¿±Á€LIDATÀ ¾ï{ž÷ö»¿éf¯ þ=ë¶Èj¨þÀù¯ð}¿ß_IÕ''Ç}ñÄ÷Åód°,«ù´71©ÎÀáOž2á/ô7ˆ¼xll¬ãýý?ï;¼°¸°¸´°Ø]\ê.--¿èEgÌ^ù’é-'­\7}äÖâ+NÚ¼)î…M®™‘+®ØvÏ=_ýÞ}ÿxêÔ)·Ývë%—¼vëÖ—jÕ\ê86.‡•_þª >ûÙÏlÚ´iëÖ—F¶ð—ù[¶LM –ûK‡ן¸ÞòjÔ dõÚ¢3ŸüÚ³?þ×û‘7ñÆD9î½¼ÜWo>j¿iøìør_D&×LÑpqyÐñÄ—ñ«G}ëIDAT¿³3 Ò?zã›Ã(ù£7¾ùì}XD¾¼ç¡ËΚ¹éçöû+g¨'W~1x"~¯¯\?½fMGüÕ;žø¾ˆ·æ¬“o8$ÇtÎ_¿ö9O;õö¿ý?ó ‹ãòÔßܼuëS/xù3N;uƒxžÈJ¾š¯X³&vê­à©sÎÙú¡ÿñ‘}ì¶oßûÍ×^öºéÍgøýÁÚcתÕ\ê86.•?w×]ÿñßùº×]~Î ¯ñûƒÈÎ9gë%—ü®ˆ¼õ­×žûâ—Y^JÄ9E…tz¨ ú¾} Y9âÙà@éšÕt®ßt—Ž\?ýö÷VKƒaÍÎÄ@DÖLÉ —}×»£{IDATñþMÏ_IpåµupåŸññ‰ÈMÏéòÀï¯îçÖLN¬^éìõ{]Y=îí­ òiO|ß_=Q-k6Olؼ!øupÞåÏ]9î½ßôDVnpâ‹x?þ—ùýÑ­»ó©óûü½ðÅ?öÄ¡'¯ßpÜ“Ž;v||\«æRÇ¥šºTþ£?¼ñàcO¬?n¥²ÙÂ3ó7xÿ{ü™ˆlØtüñcJ±z°oEQøÍ7Ôý~xßÐ _ñ|íÙ åùßýkC´ÃhÒíõ{Ë+Ñ×rñtàÎÏ~[D|‘N¯/J°‘A¯'ccƒñÎ÷ßðƸՃ§¾øýÞ`'Fä9IDAT0›˜Xmde¬ØRx~zlÌ Rþ•ÄXV"¹/²:<„è#ófzÜŠL|Ïó|?¤ñôg=9î$ÐÙÏ:S+™œœ8~Ãqöj.u\ª©ËAåÓý{ ““憴qz˜-ü`4Öÿùûv_klå¬ðJˆ]^ö»ÝeùÔ§ïI±é5~ÐH0PûÐR_dìŒI”-ƒÁÂ`L–úaO‚øÈ8²±q™˜œ8rôÊ9ç•묽 Nˆ«ƒÒWRoÏ;êoå|5Pö¬( û¦áæü¥®ë-?Ck×ç§Wâôÿ½þ”“REzpϼˆLN®ÜJìá_tO=y²'žDæ}áIDATiâkÉÊ™ò•`;6.žŸž˜rèÕ1ßFkñWÏ={á BƒìyåÂ飲í•`ή…ñÙ¹¢0ü1 ­©Í§=¸g÷¦ )¦“üôáÝS›OëLtDä9Ïzúw¿ÿC‘™Ô<²û9ÏzúÄDG|9|í Ç~ð]ÿ"õ¥¼ËýÇ_{Cg¢D`ß“#÷÷^ÂÆg^­uöSN‘½û~–¨€-¹ãÔæÓÎ~Êéñ1yÅKŸ."ßýþ4ây« ¨XnJúœg=ý/}zIï‚çüO¹áؾKidå2+±¦±‡¯½á÷.xŽŽ×Ÿ°QD¼k®Ùñþ÷ÿÑþG~Æ&.'IDATÿ*@ÕNÜtòu×ý—•+Æþéâ4 òâM'‹¬Îæñãy`÷î_ÖÚ°bf椿è7$ˆÓ‰Î 6=ö?úЇnª»c€ÜvÛí³³ÛöÌï«»#P?ù¯·>ç¹g£Û˜ €æ"NÐ\Äiš‹8 @s§h.â4ÍÕI¬qÛm·WдÈì춺»£"9N‹Èý÷¥˜Þ ÃmnnGÝ]€â§Eä½7ßZj?P‹ƒö¦ª?7÷ŸKê ’kœV}î _-º5ûÝßyYÝ]¨Íú¦krª—%NcÈp‡Nh¬úÇ{_|ѹì—™›IDAT_t®ú°ÆÎZêî;ïÞ¹sø¶˜%NJ/¾èÜ»>¿ë®ÏïҚͰ‰´«ðƒ`ÔLÏLMϸäÏP¿v­ë0P »wî<ÿ¼óªßîùçWv¨nÐqï Zî‚°4¿;Ýh¸ü[TU¹uMõ/h¦º‚t Õåu cœ’Ñ»>¿+HˆÃ $¬¦>¥•Ø›RËÍÕà i­%®¢öS«¸ CcÂ6$R6¤@Å´if·EEPKÞ\j¨Î§í±ÍŒÜfŒLl*r5Äš+ZV »¡>E„ÖD5méÞ_}-ÚKŸRíZÁý%ÏïÞ«†ê¸v";Y9L‘µ\Ùl!,‰\Å¥ñ ½‰èIDATÄͧEÇÈHYHMl¤¼P÷¸wdü3å<l®žb#W±wê<,©«3y¨9®–òª15X6#b¶9®³Áœ8Í–ÃÈöLyª¬½A×OÙhc•Ã1Ø.•E³­•»o1\ˆlG+O»QËËQŸRWOûŠ´ðÜ´Ÿ@¢²¯`¶+{ÓYâ´6k…ïû–‡@y,±Í½rªú‰¯Œö{·W˜Xh‘ î ©‚ßäÓ£ŽY° ‡êóéj¶HœiÌ' ç§çæv<Àa±!47·£î.l’ãtp™¨^ýóO€8Äiš‹8 @s·r˜IDAT§h.â4ÍEœ ¹rÝçä3Ÿ¾åÒ×]STW0L{ô§?ú«/á›g=eÚ÷Eäè›ËŠx῾üó»_uñֳϹé ÚÎ]ßÖ óÌÖCƒ|åZî÷ëtÆÇ+è ´Qê8ý™Oß÷”%l{ž'™¦¼ô<‰2[mi±—X§³Ž8 ѲäÓ‘ñØ¿1Ê»êÃK_sÑg>ûy­Îºuk+ì´I®ë²‚,Ù¥šïû¾ï‡õ½Uá²Z9²$òÙ°ûºŽý-ªMƒIDATDºá—¾æ"¹ô5©… ÝÄF`dÕvýt¹µî¯ÒJD‰÷ZÈŒkϪõ«~yXuxa)øïŠ×_^ñúKÂòà K5v.cœŽË†ƒ£ßyŽÛ3`óY5GæÓ™{‚B,../.._sÕåÁÃ?ûàǃ…k®ºþh%u÷š+×õÓ…ïaÕÏZ‰yÒ:q]KnqýIDATeT,Ìö€)KœNuúY‹‘áÑríYs!²…ÈÖÐ:©ã4÷  2¹ÎOsoJÅý½Q¢wÿdýúc]ªeÞÄôÌT¸<¿{ïôÌÔüî½áSAIð”Z·zæn$v²ðÆÍWZÞ¶Ôˆù²P–?øƒK>úÑOlܸ1±æþý^þ†Ë2l¢˜4dn^ù4J±°tÌšµþ›®zÃØêÕóãcž766>&ž7ŒÄ÷¼±pLþ/~y ¼Îhy¶Kµ0ÏV£¸Zb>tYÝeÝ}‹‘m†íD'0 #{b—TŒ|-¦¤ À¨*sȉ}ö™‹‹ÝC‡E¤ßï‹H·»¼¸¸,"KÝn·Û žç=÷9gîÜõíšûšOõ9}˜Ç×~D!Ä¡  äÓ¨Èê°~Ï,Õçôa_<æe…IDATû…PÐ%B5P,òiTÅ÷DÄÿHxö¼a ÕP†Ò矎œ+²×O7Ï î5+þE”ö‰›ÓU9®Å54MóO›Sc¥ Â-q·T¼½@5ª˜:ÜT›‚:rþióY 'mºe5̄ˉ³8gØP- ™™@4tþiRpËŒÊó»÷ êS…„4­Íê‘éÃ$cœVç©%¬#À]ÆÛ§Ü`BN;i-UT3|(ʯ„<yÜ+ʰ]íwLŽ#¨ôù§#©+š!Ùþ,M-ÑE‹š‘Ûµ’2~:¤Ý®›Íƒ äë@•*=îÍAl4„u é’%”ƒgIDATN\%¤ýÈÈÙ%äŠÓŽA× (Óš ¡›Ï9ñ8\–£ÓJõŒµÔ}\·¨mV[êhÙvæ^H«êù§-å‘ãȀ̴¨cyXì8²B¨?,2¬èqóÔP æŸ ÄW-Gó¡euK…DfŒwÙ®½Næß râþÞ@ÁÜóx‰J닺6̽Wq‡R=P}&àTÒ”*WœNu¢¤E> @sq~(À–éÍoqvv›È6YÂÔú*Þx´°KR¹~ûÕ–‰Û›2ÿ4·@AKÞyçŸwÞÁ ªÅwî²W¨bþi51”;ÀyÿyIDAT”¢Šù§@6•Î?­­,hÙv¸LÚ @óp$ΈÅÌÓDÊx]–çyAô ÁÑoí¸¯ÐZ`¾ ,ê™Z8¬ €ƒ\÷9))5qrÅéÌ9q0Ãt@k$®(\Q@¥mgzfªš¹§2lH[¥À—f–×5×Lüåþ&g«ƒF©zþéð¡c9™º?Ê3¹SädÌ™gh.cjç¢z¨®’sõáæøJ ù\Fç]EæŸÆpbï–ïžoªÔ¬û{“L£Ta†­ígÍr­$x¹–ZÁÒ‚ãŠÁÏ‹ðßð)­q›s¡ÈU´§,/Çý=ÑšŠk\ë›Ë¦#Âõ¡õIDAT?/m-—cÅ.Hõ¹gû\Âj–F"7çX×U~4SSîï K‹sP×\6wX‘û/µÐÒ‚¥µ¸rX¨•„ æZö&nÈþJ݇;¾Ãárb߃‡å ‰üDWì@°þiåÿˉk\k*Õîø§HTn‘fåÓ@âòS#k2·éxâ3[ãi7TìÝ×RùÄ®Þ=Ç7'ÿv#_»{Í3pLÛ a»±È§1BâöDeì¡ÊÛëÙSÃ’”ºOÌ-~¥¦7$ÿmÉÓ‚ã ·äôö7 ‘ëº,æÞ@ þê+ê¼n¾‰u3…/§Ê÷*òLy£˜Xk£ ”xÜ¢3®¡IDATð-¢mʧ=Ï .¼ÎðÌ+¢-ÌÁAæëpY+×Jæa\j¸dÅeô“c5ËZ.ɼ¡<«»¼Û.§}³Õ±lÅÒ½ü9f êifít¸½oq¯%®ÿyþP±*æŸ\âb¶ðé7Å5ñ{hØÇïh‡SÙ[‹<ÉçxŒÝòÐlʽé6dÙºËP¦´[LÕU÷Ÿ‰-¸ŒÆryh*Ûûlʲ•´›㓵¯‹&(}þi-0ê-Ü„QÊMèFJ¥óO{QÓKk wðP]–˜\ܾuû¶ÌjZ—#«®@Õ„iT¬Šù§UÚ©e3Ö8µe[‘á9XŽgY‰IDATÜ(‡µ¨bþéĦì[±TÈϾ‰ :€EmóOkíˆql92ý-Vâ&È¡õªþiiC8$¥Ô"×ùiÇK­$þü®vž88‹,„ËqͪSaºŒP3´”hhþ/ h¦-Ó›ëîB#\¿ýêë¶ß˜aÅJçŸ6—ÍøWß²Š{aÚÂ3äwðÀ¨’¿ãÎ]™×eþiMt÷ÎuwYÌÎnÛ3¿Ï,ìg3jë|Y‰™.©0Ðv÷ßwOÝ]@:ss;êîÂjÓý½Œš÷Þ|kÝ]@ ß.óeÐ\¹â4ù4 p–yÀZº¡<ȧ1Zø%DZ.÷3°ÜG¿IDATÌ?[ËêMÛ±·–­oî-¯ŸÅšž™Êü}TWti¤Õ_|ÎOc8ENrì2ƒ‚¹b]b ‡üj¹Ù~æ)Ì-M¥ª\c?Û¨Õ_½šçŸ.öOaÈþ°“û,ÂöjŒÔî+üÙªþ~Íy:¬¬¶¬þkÖ‰,‰+«Y6æŸÆ¨ÐÒÙT_9û÷?|*X¶|«Õ ¤×ùÅÍKY'ÕZqÛRweövÜoר> w˜án3Ü®ã ~…÷Óån…0¶%„›XŽþ¢Å}ËÌ:fIär_ئÌ?9ß³öW·n\kqêÛü¥ù…Œ\1²²¹w0Ÿ²ìPˆÄ¹kKâf¼µlË}´‡·÷IDATëv–úÞÑ÷ENlªÔ~š-D–4™|›ß8÷=2¹¯å+\óüÓ‘%êräßkä_›å®¢Möo”åëêòUÌpª;C PY2Å íÕ;uÊ÷,"îFÈæ®¯®~æ|Ãt9|˜ÿë`?~î^'™ˆkÇ̪QÿüÓf³îÇdÌú€£ùÝ{ÃÿÊh?Ø#”×þÒfÇ ÂU C;VT9n=¬fö¿eô3ó;¯Êÿ¬ìXtÜ‘¹¸1ç…-¯yþéÈfË«˜ê:–ÅùéÚ5꘭‹ Ét‹¨£=âJR­îX'r¨Š6ô$®Z5ª>îí(ÃaýÛEÌ/aQ•#×ÒJÏ…0s¾´% ©´IDATaú˜!ÇuÙVÚ,u2ïßò÷ӥʹâÆv™_ û—Å~M‡w]VÉVÓ²\ˆšçŸVÿ ÍïOâÖã¾oÄlÄ}©,{Kyªï¿ãN‡hŸeÌTÎKsÄŒùTÚñYêÃȰY{WËè§c›(OÍóO[*¤]7®À0©àد½7§e‘ý,°ÿmé'rbþi-SvðÈsÙ¥²Û/ª‚tC´uþiConnó$Üß@ÍÎn«» @#O£"¾'"¢GóÄ;º8bÏü¾º»€ÂÜq箺»ÐbäÓ€]¿ý꺻ÐnäÓ€]·ýƺ»Ðnï HPªÒç· MñIDATŸ–¨kõ"†…fIdƒ9¯°_9É+}þi9:;NrÕ¨¸Ø¨ÎFJ¥óOK1ÏœòÒœ_+rÆ-ó¦¤j^nyÖÜPª­Ymóph‰u°9ÚYrtÇɪ³|{ Ùæ…çî;ëî²˜ÝÆ5uÅʧÕ)`E WÁðÄqàZŒ,7wmf9»¿ò¨ŸŽY÷ÎG®¥}¸q+¦Êà#³äl½í+ºüLḬ훞߽W}[‡¨¯ù4†–¶Ÿ v4á¿êS¢ì}´TF+kvÂþ«l‰!'òSP?nË߀E!®=pæ¯ïÒZb¦ŽbþÃÅ*IDATi ­ÈýuÜY½ÌÌØVÏýs4ÿ,mFþ©d r©Nrk«äߢDýMÛ¸û[‡b‘Octr®ŽÝV”ý) ÙQûÉlÉý£ÅâütñânrÂÍOjó,©qmÕKüÿ OÕÿUdþƒ NNÿ™OÓ9¤QE>íÅL3•aþé ÷?q¼Zd5íV'Ü´]ÌQ0Ú‰êT1;òd¡Ú»°ºØ?…ðYûß@ç€#l›´?kQÚ†ߢ^&*VÅùébçŸ6WwÙ:F=ˆCd–»×´l…0?AÇO!²š}Y܇hÿp‹}6ÕxoÇw m;ÚûìÒ7.×qeó£áIDATïT7& 5=cfŽ€ú0ò){eµÃæ/ ÇÖ´Nº¯ @ ¶ñÞ^qóO‡M™Ézd”õbæŠvÿ aoÍn]z‚¦!{@yÒk TÀùé¸-+z9æŸ6C¸û‰j—j¦ÂC©ÙB5`š›ÛÁ<‰@ùtÜ¿qrƤÌë6'Fæñ RT³³ÛêîÐU_?Ý„Ä1CJê³Úf­T{æ÷ÕÝ J??m9÷,Q—få™Ú2E´eþi9z jÇ1ä–ÖÌ:öuSŒŒ”ÒÇ{û«´‡a¡K‰ÚšÙ¾esö§"ûæ¸9Kk‘/Ö²®¥Ï€7ä÷#kÂav2«úúéŠV:IDAT¤ÇSÿŸO0_ D[¦7×Ý…F¸~ûÕ×m¿1Ê̗(×Á£~S—;îÜ•y]òiMt÷ÎuwYÌÎn‹¼¦î±\wšù4€†ºÿ¾{êîÒ™›ÛQw†ù4€æzïÍ·ÖݤÀñí2¤ŽÓ–1Þqa›ûxM–|:2[â·oÜb €8Ó3SÚ|bfI»6”G®ë§³…^—yš™˜ž™J,AÕµg°l7Ü_¹÷-®¦K ‘sîeÞ¢ÚwÓ3S™¿qêŠ.´ú«ëüt6¾r£ï¸#á.u íkYÒ/ñ’6ÑÀ_ôÍ‘jŸPÍ$ÛVü¨ skÙž$<²IDATãØÿÆjõ*cœÖ²áð£r™:r¾ í#'“F~|3[ýåjþU•æ<ÄVV[Vÿ5ëD–Ä•ÇÕ,[Æ8žrÖ~L%Î?íŒ Ø(Iâ2®¦öUwß„¶§Ÿ –-ßµéusê9óPœšKDÖÿ ›5÷?‰Y£9ÛžËT©^Dí-%©ö¢eô?-3`[B¸€åè¯OÜwǬc–D.×ø5¬á¸·©]ÇOÐê[ûšY–ãžü–ºlÂܘOYöˆcFåȃs‘'ÑÔ(n©é~Î2·^æã…‰-$–¸o·ŒþWÏüÁmÿΦm­®P+NgøIèÇÌʬ5Ë!èIDATÛØ¿´Hžo”ËÞq.uìûbvÀ’ó…ì?ú#ë'n1—u}eÚ{—WWÔv‹j'sŠþ æÿ#·?w¯ŠLĵ#aÕȧSM“eù™f)$·F½ªü¦ÚwŒ2KœªGy2HÇuÍ×™è§Úz!;Ï ýOKýŠeû³¯ìX´vH,òçEÜr!RÇiîA†‘Ò„sÃMèCÃiá-1~ŒÂ‰¶Ö½F5Æ•¤ZݱNä°m@I\µjpoŒ ó‹g–ÛkfÞ„ûZZ áÙB=A¦å a¨V'›õÝÛÏÓ·l­¹´`/q?Õ˜mëyÄí2ÿàí_¸v̇q›°lѽ¦e¹(ÏåIDATÜßÃÉåt²ûÞÁýätª=…cˆÖq,çË"»Ô[×|˜j]µ$í8²ÂK, ì?Š’ë~d©NT@~µ3õ iW4Ï@‡*xu¥öe ŸÐ2õ†‡Ì[Ï—¡ìþ£pœŸÐPss;˜'¨!ŸnþÑ’æ÷z³³ÛêîÐ¥Ï?­žüÈü\.´(dC•á×`±g~_Ý]@aî¸sWÝ]h±ê柖|‘Éñ:ŠüèúíW×Ý…vËuÜ;O8Ôîw +h-‡·/ˆ« Rotw…eävÍjëj[W+„—i:®ò“À»nûuw¡Ý1GÀñNu©W¥1IDAT’æÈ¨ìX'r9®Är;¤Äuˆ“ñúéðª;íò»àè·v \»ê.íVr^M¨5&¾Z(Í¿!ûvÈ Šù§K=']H#eäµäÊ€ürݬ±"sw-¥Ž;^Fg o0"JŸÚ²®Wô}ÞÍá`.wÞ«YžØZ†í’y¦»w Èbvv×Ô«Îù§SÝçÝx•ç&|öu]zWÓåþ–ö‡š·ò?ß_Ä÷<‘‘zÎý÷ÝSwÎÜÜŽº»0„š5ÿ´c¶ `DpIOÛ°ë.^³æËòWÛlQÛ1À°Ê§™„€R5+ŸÚbzfªî.Œ¢é™L%®IDAT©¸wÞ,ç3Âp`þi 'm=¿›é[ozfŠÏ#ˆù§1´Ø§íȧ;ÿUc;“š…ËaÚm> –µr1¿ւö•)òC‰ûDÌ’pÅàóåcB+”žO×;-´y+•Š;€i{çp׬î ÍàªîÊÍr‰‰÷Bx®DªO!øˆû}Ƈ…¶¨"Ÿ®wZhbóÈ2wÄf•¨‘Ù iøŒÐjµŸv¹%§– »OölßnâüÓq²à-mdæ^°Ço>>#´Z=×O2 F8µD­®Vˆ«iÞpÔe^˸ÎhЬ™Ø4GxÜ»¤Æµ4  Ú¨€ë§ãþ  IDAT…‘R¸æôÌy&l¶¬ì;S`P—àZÛðŠ[õLs8I­àØššœ©-´U)î7?S>#´]ç§ãþ ™%긱eŽDyŽ6çÜtþ  ‘'§Íe­šYî^Ó²i"î#Ð&~"|@h—êîGwL¸ØÔ¥µ 0—”û’R TéõÓqg|%*Š»‡R³5•6ø+Ìž#;“(rCö`¨Kéã½µ¸¥ݲ×tY×ÒšK›q«»o(±2››ÛÁ<‰@;îG`ÔÌÎn«» @#pïHšÊì™ßWw€F`þiš‹ù§h.òiš‹|€æjúÏjIDATxïTSlÕ2ÀbËô溻Ð×o¿úºí7fX1uœ¶äБaÛ2Ç”»BÔâàQ¿SÐwîʼn–|:2[â·z÷ìÌQ¶F´ÅÝ;wÖÝd1;»-òšºÇpOåŒr÷Î2ÍI #3æÈöÕ{&NbmŸmZÈλÿ¾{êîÒ™›ÛQw†P®8]¬´sd Nl¤Ù±Tã½7ßZwÇ·Ëq¼w8ײ6é²ûüÓ…`ÖgÀp˧ƒi¦Ô…@ÜüÓ%^öe´¨ÞôÌTbI»6”G®ë§S)jÊçȼœ”ºù<ñ½£æ>ò™ Ù˜ß÷÷êÁ”õŠIDATÂÌý)¼W.Û2.ºtÀ±“e¼–险ÌAQ]Ñ¥‘F_w¹ÎO§ÍbSMù¬ÅcsÈXä¬ÏNkVS¿–޳GOÏL¹ÔŒ¬¦í œ¯Ú±W£ÃrÍ|*íé¶l§çÔÁ­9›Ê¶­ð© :ÐR­þe‰Ó©nCæ8asä´Ð–’ÄF\Z#`·ð›éêr~“[½#„¥ ¿•ê×3çQè°²Ú²ú¯Y'²$®<®fÙRÇé!¸§·™…cØ¿®ÁCÇo²ZÙ¾Em-u¯>¥µ·us§ó0o˜nj×aji¨=)—£w–ãvâ°‰»èT-QjÈ¿¿2_¸ö%öÜ~lQ;ÞIDATR3`[B¸€%ê§¹ù}1ëDþ 7—küê5wþéò‚(áydÅý„Ÿß½7Œ—.ßÏȯ«v¤=ò;oîŞ,û¨¼øk,Õ§2œž‹+1Ûã19—+Hµ[>Dn«À}—KŽ;`éæ«g&߉§¨RµVW¨núý½ÌÌÄÔýDu†ÍuhݾõQŽÙîÙ[Ü)°lÆ%«y°K?ÝOº™57áÒ´÷¨(Vø›8|˜ÿÛ~üܽN(ò׹㱴b57ŸrÊü]ª1¦ÚŒ-㬆cölfðŽãÝväå-.18ç¥5ÈÜNõ[–ù—q5 ®v,òçEÜr!ȧX *Ä IDAT<ÜÀ.µH3Ö:ª¥çU^ £†À¸’T«;Ö‰¦ "‰«V òiŒ"óKhyJ+1G~¥Ý„ãZZ áYãBB§ÚJþÐåÞBäÕ§åmN•¸Ý<ïmÜ€ó<ñ[æø0n–-º×´,‚|Ã)ñ où.eX7²µT{ Ç]ÑZ9ÐÉr¹¦ãcm9çµ.mšå™ÇÁ%ö!®KVi鑉Ö)}þia~*´ǓۢÀcבC´R­h9\Ò1v÷+ÊRu ó[ ”>ÿt{Ïa¤¤[$Ïà*Û)c×—j[î`/ÝdµÍ?,˜W F^/h©Ÿ§ÿšlnnó$¥ÏØÎ‹bIDAT?mŽƒˆ‹ÄŽ×0Ôrm€ŠÍÎn«» @#dŒÓaèÕΈ#Àµqà–üج—XÇÕ0”öÌï«» (Ìw -–1NÇ%µ‘óOÇ­žvs€Ö¹~ûÕuw¡ÝJ?îm—vœ$‡» ]®Û~cÝ]h·ÒçŸ6/ÊJ{å~!WúÐFUÏ?Yh¹€c}†Ò(Î? @[ŒåY9Ub ÒâþÞšèî;ëî²˜ÝÆ5uÅb¾, uÿ}÷Ôݤ37·£î. !òiÍÅ%=mà ßâq~€æ"ŸFNmR÷ìá²vP},›™‡™¦håÍɽ†^ðVÛ?Íȧì•ã¶%«Ú¿ZgÂUâ2Z³Ãj7ÊxEZÇÐ.yçŸØçŸN\=²Ã$&Ÿ~Q©Õv[‘ûV3¸š{Rµ\b⽞kb~Rárœ"£©öa%~9å$IDATvjûgêÏ#ò·c5¯m‘kþiS¶ù§µ ;[—Ðd1ùôr©5÷Sæî,’a¶Àþ±¥•hÃ-[Zvïaä™—¸Ó4…¼"ó¬6Z„ù§1œ"÷zærÜÐË‚½<²…H|«]ÆveXW«`_Ñü3‹ûa—¶µ¸þ¸÷´sÙIDAT-Åý½ §üéãôÌT£†k•7íuÁŽû{ÉHGÚ(ç§VÒ‡ž'Í-ªKü=·K=óO3q5€Dss;˜'¨'Ÿ&H°›ÝVw€F ŸÐD{æ÷ÕÝ r##Ÿ TÕåÓi'®¨÷? n‡bÎØ¡ÕqìÍWéùéTW‹Û]E¹ó(`ˆÕsý´Ë]B À´ìúéðз:Mµv·pCàî;ëî²˜ÝÆÀbU=Þ;Œ©ÁBÚ‰«#™g¬ ûï»§î. ¹¹uwaUO‡#¿´€ê8q5€‘òÞ›o­» HáàîtV¼æÞß;n²KmÔ7C¬²Ä5…IDATžóÓŽQV Õ‘kqQ`ˆUz~:ÿÄÕf!±Ù¸L=d©ÓØ©|íó(hêòiÎ=£J£vj·3¼„’^uÚf[úæÍTÏùi&®µ7Ôµ·ç@1_FEp@X”(âR׈{³æÃùÝ{ÃŒ3nuKµf?ÕãÞöMǽ„Èœ>²ÙÄ ™ýŒ\—¸X0_F…{´’ÄcÎZ³ÄŒ‚q1/,´ôÊÒ‚¥Ÿ‘OEnÚRÍåݳ¼ qk™ëHD>Qá2 «h<íêy40sm`—€F!ŸÆHpÌä2ÄŒØ7žÍq‘ãæì½hÓõÓZ†í­2«ÅÝaT­ï)´:Ùê#bzf*ø/CˆÍ³.0šO[Ž]«ÁØ%{ެïRâXyB,áH«ÎóÓqÿ†ÕìQ°ìD–D¨×ÜÜæIȩ̂ãþuTv.K® Ôhvv[Ý]¡¹ã½Ýiǽ Ÿ šQi@õöÌï«» @#4úü´…:PŸIDAT5µD͉«íõµµ2ÔÏþJˆ×ÜñÞ‘ÑW-÷WÅ­®U0šÛÊS€Âµï~dŒŽææÓ ­ç§ ·»w Èbvvc‹5 ã½ ¥ûï»§î. ¹¹uwa‘Oh®÷Þ|kÝ]@ Ü—¦ œŸ ¹ï-Â-BMÕÜ|:n:¬ DN…!ã2²¥NcçQf£*°µÄ—µdÖÜ|ºÞ ©Â›œª[ª¥¡Bív†—ÌÉœTÀ0in>­Ñr\ËlÐêŒÑ¢ÓN¬ïÞË͘±ÔÏÙC Â-iËxoïèÙ ƒm6h/jÆhs!®~Ú>˜³¶ÝÅŽIDAT}DvÀÒNâê–FA˜ž†ñÏ¥$®÷f͇ó»÷ÿZV·ÔQû`ö3\=qÓ./!Û WëðkÈ©ÑóOç§B÷Í_‘-d¥–ú…´8j8 –µ5¨D­‚YbFÁÈ6ÕBK¯,-XúùTä¦ãVI|™‰/¼¥'€fjñüÓi¥ xaÊkiA­SH4-»ýWÒ¨ «h<íêyDf·Ùúà²É4ß(ÞÌ=I;ø¬–1Ö¬ìöGc¶—!®ä EMÈA3÷ T£¹ã½Õ!WA¬²¨RëÄÍH­>ëÒ¦(aÒlÁÒ Ë&´gÛG•ªI¬‡C¯^Z¤¹ùtä£!F¬IDATA`‰:9EtâÃÈûŠLÕ¥Äö‘Š:Ð)8j© «C·ÔÙˆ¹ŠVboÓÒ z;qt[$Çí/Ê¥Ä|á ÔŽñÞ3° ˆc-WÁ¥N†’Tåè¸JÎm%ö¡ðiµæúéðÆ#Ù¶@5÷ü4hîùi#nnnó$­9? `¤ÌÎn«» @#Oh¢=óûêîМŸ.Øß“$çKó<ßó|Ï þF@’æŽ÷öÙ¶b_1òYï蹪»§Þ’¥(¹ƒb¹ï >?í2ý”ËêžÍP¡i׌•úîªÑÜ|:’™#j%f‚«•¨m„IDAT5--X*XúæÞÕÈÄ=®'‰/Ó%÷µ¿(³?–—¹®Ki5:ŸÖxif€V%ÎEmVNlSŽŽL–µ"»juZ›‘¶¼¨ÄMØßË ‰[×eë@*wïÜYwÅìì6Æ«ÑóO‡P *ÇPm‘9Æ$Æ]ˆÂÈí23d«æ»gépd[VWOÛ= Ñý÷ÝSwÎÜÜŽº»0„=ÿ´ã´ÞêÌ&l.oŽç´“IÛ+4ê3Q•yïÍ·ÖݤÀ}iÊвóÓ!Ë1çF…4‰ïjdòš!—-Šc2]Mg6Ÿ§‚–£³Ï¸‡.´UÔÙ¦ã6ZHWSõ$[.ëõoIDATRuÏ¥fÚuù57ŸŽ;8¬Îš•øPŽŽ¸f¹¶JX¢Õ×êDvϾ–Ùˆ–¼Zz÷Ò"ìݳlN«cn:±3íâ2Y²¥NcçZžž™jlß ïÐ4Ü Ã©¥Á@ív†—0=35¿{oá³>·ô͆Csóé¡×Ò4•)<Üh£6Ÿò“Â0þ¹”Ä5âÞ¬ùp~÷Þà_Ëê–:jÌ~†«'n:î%¨´>$6Ù·¸wÕì óeaT˜±G+‰ŒO*­‚YbFÁ¸˜ZzeiÁÒÏȧ"7WM º–~fxEf òiŒŠœÇ \E äiWÏ#2Lš}ˆL»íõ-¤YIDAT{ÄlÀù4F‚™ GÊ9òÇ^•-íKHU¿!¯h/Æ{ªI¬›&| æÉf{ýœ›`Q]>mã׈v'/óVØÚ=I˜ *uøRdÔÑÆ7©u"SF³s­ÄÞ¦¥Aõtoâè¶HŽ+šÕÔóÊêk—Wdo@•žŸŽ¬¿ ºÈ#2(Ú+¸ÔÉP’ê¡¡Wɹ-÷ö7š¸®¥@¤z®Ÿ.ycK†F=ç§]8 –©6`dT=ÞÛœÔAmJkÐñijŸ~¢'Í77·ƒyª¯ŸŽ‹¦‘óOY³³ÛêîÐõ\?Y\êÌYj`Èì™ßWwåˆó IDAT€F¨ç~d.´‹²ÊÛUi>j|x\lŽœ#ÙR€öª.ŸæÜ3iµþúi†Xs¯Ÿ-˧Éà#¥¹ã½²EÆWþá::HF> @sµìüt½ù4·RTlhóiOQj—(ÏpžŸfZÀpÂ|:.HkéudÂWÇÞ%Î|Ú¤ïpY+Ñ|ä*–e ×Ê|:îßüSdòi@5Z™OÇý›SÑמ%“CªÑÊ|Ú.ç\Ô©b0)5 T­Ì§i¡Ú÷}µ$.kâVqi €B a>ðZIøP­lV°¬bÖ  Üó@BxIDAT €æÚ|€!@> @s‘OÐ\äÓ4ù4Í5rù´9͆úTÎÆ(ÖæÓqaÉê´áýA#¯ŽœA«˜ÞÒÐÞ,X0§Æ E†0ŸV…÷øŒ<Ö­-«·Sóï°5svj³e—é«p4œù´…y»PG‘ÓN› rô1vs]ܵ2Ÿ.oþéPRkÁÕÌíÑ—|S+óé’æŸN”6'&‡äÔÊ|Ú]žΖӦȤԀlZ™O'J;?´K8·O;­ÍxXC˜O›3O‹2ôV¹z\‰ekóÙÈRÎ|ºdπ äzIDAT a>A!‘•ìP8òiTÄ÷DDÔ_1žxGt¹âôg>}KÅÓ¾Å=óûªìL“m™Þ\w¹ù²hÎOÐ\£˜OOÏLR€² a>]Fˆž™ ÿ+¼qu+‘Ë€‘ÅxoWó»÷ Ó3Sár›Œ²¡ï'ÌMÕX›Xg~÷Þ0T'¶c>tYÝRGͳ3tÐ.#‘O›©°V¢¦Èîé²¹–¶nd³j¡¥c–ì “VžŸN;ÿ´Ë©ål§Ÿ3¬¥òBÎys2†U+óéTóOk)i\µl)ižDÖ±cŽ}˜gnÐ@-˧+2##ž[IDAT3מÑ¡`(µ,Ÿv¤Ž« ÎàZ*Èê¸-µÄÞf¸`oÇÞ¬Ù±°Ä² —ކFËÆ{»ˆŒˆö ‰uâB`Úm%6k1³¬9ô 0LZv?2F ç§h.òišk¨ÎO3é2`ÈOÐ\œŸ ¹Z–O{ž×ÒÆÈ ô|Ú;ZžÍÙ·âX-±3A91Ð¥ßÌ÷}ñŒ,7³[³<®Á IlœPîï­æÖá²–vkåbdäq-ĵ¯n]mA«¬Ö´7Øœ#€!V@>v6hI™ïfhÁò¬¿*ó¦Ãv²g¯›IDATr¶@¢òéT³Ar9K\Hû4DÍ×O—}Š—SÈ€V«áü´ïûÚIb‹Èšj ZIpLÛÒ¾º¢V9[ƒ”§¢|Z oÚIbûB\M󩸵ÌíFVÖÆ£Y$ZªÑ²û‘¡õ<õÿù¹ }oÒVÀˆ#Ÿ ¹O0âȧh.òiš«ù´}ŠIFVóOG.ÛkÕ&­Öˆ|:í*,®Ý ±FÌ?Æ=k™mÚ2EtþY¹¨Wé÷÷nŽþ ‘óC›saYf›Ž\K«Ã\Ñ€–jÇüÓdÆ€ÑTÃüÓ‰³Gç¬À+Qb1IDATШâü´vÐ8ªyþi—gí³M›uøA5Ï?­øJœ[:r¶i—)¢‰Ü€–jÐõÓ@“ë¸÷g>} ¡õºãÎ]uwJTÃùi (×o¿ºî.@¹È§Ñb×m¿±î.@¹8? @s1ÿ4ÍÕ¸|ºÀ;Žqó2@Û¥>?mÉ¡#Ãvä RÇÜæÖµ›¥„¹{ !²Œ#‹ŒÇ€´¶Lo®» sýö«µ!¢Cÿ.™/Y•k¼w!ygää•ZI\eõÈvâ\q3lª…*P±ƒöÖÝ…‰»#¿K‰7ȧ]˜P”içN¬lŸ\‹cÚë„IDATè±dÉFö]Ê8Ž,œ Z›Úqþi³)ÇD¶Œ‰¨ Þ€ÆÊ˜O›ÙpÀeþéȦ\䟈Ú̹h²\×e9RC£%L–}nXëƒÖÃR7 @6¹âtþð„Ì€š+k%fe—ót¬Œì#Ï .}óÄ÷|Ÿ·h§é™©é™)÷Ê¥v¦õ¾„,ǽ3\‚e™ ÚþÐÒN\³q-˜•Íšqå(ÀÊ{«ÄfÞfÀ †„ùÝ®ƒœ§g¦Ü+çÜt¶mÒÃB/³!q‘:NsOoäâ‰xÄgÀ& !ÕǶ78Ì—…=¸û'O<1ˆ{vlllll,¨Va§€V “]5”ª%j2ÖÌ)IDATšh>5¿{ozͦLöú‰Û «©›°¬UõEi=1û¦uÏòÒJÅüÓ(Ëåoø½Û>ü©7]ì‹}ZÚ“{Ó¶WUØ5 eÌaƉÈ–R›ÈúêZî­56Y·¼À&t•|eùù/ÖétN=ecpbZ}*ˆÕ+ÿúòØ£~ôW6Æ4Œ˜È\ÓÊ”*„Ø›rìO†g-kÕÿÒ UÜyòi”eçWî½ð‚­gŸ}fbÍ'ÿèÇ;¿òí³Ï<«‚^Íg}ãø°y¬;mû…ÔײíT V?ž+ØbØÏ¶üV`þi”È%H»WFJ·™åÙ„G²DÖÈVÕ(IDATìåIµÄÈùÝ{Ãÿ²­^}to\>Í͆Ìr¿ŸX§3>^AO€Ö £‚³#Ça…"+›mÆ=k>åÞZ\‰Vno°‰côêÕ²ù§½¨ ²R­Î€Š--öëtÖ§q£ÃâÊ#Kì•ãbcyªžHÔK¨+ø9¾·–šµ*oÓüÓù£,Aºz‹‹ÝÄ:ëÖ­­ 'ÐF¹ÎOr[Mó©îÙ©UöVgñÒº§•˜kåé,º ÝK_sQ°þ§–ÔÝG£+1™v|ª<¥ÏÃNzá­ÎU%Jf, h–¨MiñÕ¬œ˜v«kE6¢U@‡–®xý%"rÅë/9¼°äiõªIDATü§•ÔÝGh®–Í?•µÕÕ}k? Üû@&]”ÅÅå?ûàǃåk®º|qqùš«.þÙ?¾¸¸¼¸¸\_ï é2Æé0×Ô’ÎlóOçI^s®ÙHøS€h_¯×ëõzï¹ù¶àá;®½2XxÏÍ·õVÕ×;hº\×e9òçŸÎk#W·l.±óÀ;2ßÏw¿ï#ÿþW…ËœSwܹ«î.´À(¿K¹âtþ]­vZ:X0K´òð©ÈÕÓnÔl$C›p„êw¿ï#uwhŠë·_]wZ`Äߥ6Í?ùTâê‘›ÎÜäDT×m¿±î.´Àˆ¿KÌ? @s•~]•J$IDATȬŠqdYîþÉúõǺT« 3ÐFÄi”åþà’~ô7&O+½ÿ£—¿á² º­sTœ¾í¶Ûëê†ÒÆ kÅ?œXíÄk¿òÅÏ«%ü)@à¨8=;»­®~€À½÷â~TœÞ3¿¯ò΀XŒ÷ ¹ˆÓ4q€æ"NÐ\Äiš‹8 @s§h.â4ÍEœ ¹ˆÓ4óe@ÓMÏLÕÝ…ÒÍïÞ«>Ü2½¹®žTãúíW_·ýÆäzÄihß÷ëîBY®ß~õûÞÿa³üà½fáp¸ãÎ]ÓÐC·ìë±"ÔGIDAT^e=i,â4´qk1Ž €æ"NÐ\ÄiR¨xø=ç§GbOx}ÔôÌTär»¨1µ¥/8 £Î’[¤[ÚsqFšÌæwïšL:²çÚ‘ƒÈ„;®N-oq­½AÚÂü ¢•h¯ºö_-ÄiÀÉ0 ¬Þû¶§ÑÌä²í´äØq­z߮ˀ‘ãðaäéê:ú•W=¯å­ Ÿ€Q§†43wloV­…êùÝ{]‚·önØßœ §ÑáÙòl[Ø_—ļLKÈ6KÅqoš‹8 @s§h.â4ÍÅ82h‡;îÜUwPâ4ásdw¡IDAT´ÀõÛ¯®» UãwI€8 -ð¾÷¸î.Tj—Ä!N@Óµ÷òåÌ®Û~cÝ]h Æ‘Ð\Äiš‹8 @s§h.â4ÍEœ ¹ˆÓ4q€æ"NÐ\Äišë¨û†þɽµ®~Ó‘8}Þù[kì0­ÄéK/=¯Þ~“wÍ5;êîˆöÿ'EÒËŠM*çIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/preferences-svn-diff.png000066400000000000000000000423131203611042400331710ustar00rootroot00000000000000‰PNG  IHDR𦑠pHYsÄÄ•+tIMEÖk˜×®tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝ{¼eyèñgÖeï@dC.„ìfÖ ÒsP$"IEÄr±ªA¢8¥=Õ~ œói{NÅ‚õÐSP£†z¡riQ«xÊЍœÓV¡ ‘$•˜½×uæü1{OÞÌ;ó®™Ys[ký¾ÜΚyçw­$ëÙÏ\ÞÇrGï{ßu rË-׫/-/N»ú˜•+9dbÉ’¥ €¶sç³{÷îyrëvQ¢õ\œ~ßû®{Õ+_qòê^þòß‘jµZà@AÝnWD{ì§ßzà_~äßÜPm9Žãé5¿}â‹=jfßl«ÕÞ7Û™™-zÀç¶óIDATŒŠƒ>háAÕ±±úÁ úñ?›þ§‡ÜP]‘•+'Ý ýÌÏŸ}vg£ÕjíÙ³¯è0Z&&Ž-]²àÅÇ%râž½»EÄZ¿þÚ5§žú†S^ùì³{ùË]û~½ov¶]ôPET_ø‚…G±héÒC¾ùG¦·l©‰È‘G-~öÙ=;~úË]»H£iÉ‘c NOL,ÜùLË{¹íOýü;ãvòÂeK¦–-W;9æÎÍq;yòÜ‹§–-ß»·µwo«Ùh‰8GµXDjîæ}ûöÍζ,‹Û/…[x˜ìٳﵿõêåË—V*•(»Ø¶ýÔSσ*0wIDAT~÷Ÿ¿¿äÈ…ûv‹ˆüûö'þ‹ïùݳ^õêµZ¤û©;îÃßßþ©¿»GD^ºâyzçÏŽ¹sóùëßâL-ëL.‘CE칫,ÿBŒ祶c§µíŸ¿uó¯~ýÑKŽ‘ÙÙö¾}s¿sÔDdl|ìù] îñ ¨={ö¼ö·^½xÑ!3ûšÑ÷Z¼è×þÖ«¿ûÏß«NˆÈϱó}ž75µtv¦-õðqÇõ¾ Ï»åoïxù1/‘Ã?sëYg¿næù†<¼½ÛlõÜ]Dªÿþs9ëì×Ýó™[«×üwwåó»Û‹ˆ—O7;ÍJÝŠþÞ(‘–,Y<hNvIDATÑétãî·dñ„ˆxð裛\UGu˜ÚIw¦á´œú‚õ§w·'8ãõNE˪wßÂØL«¾§awœv£aušj'ÍNSD‰ÓÕª£øP«¾¸[wZݽMùÞãÏíluÛ­îøAÎÄáµeGtðÂzÜw@Fžß³/âÉjÕ¾™†(Að™_ì^¸p]‘ ÆkþFñº´kÍŠ%–Ô¯(ñIDATê•R?ö¸¥ív»ÙrÿkµZíf«]­V뵪¸¡îçkÁø[ßzöçnßüå/ßqÙû¯j9QÏEÜt㟊Ȳ#–u§íØõZ¤Ûë1ÄøfEZøo¸Ù¶mY±¿0ÜSåÞ…mÛv¼o¯~íó?þPØŽ_=îó^K7¯Õjskº]±*ŽSéŠÈSW\±üc“ùPíé§®¸B‡t»"2Ÿ3K½Vµ*"sùt¥R«UýÖ©HåîbÛ Û¶mǶ»ÕîøAÝú˜=ÞítlÛîŠm׺öóŽS«í¿äm)ߨÕZubñbÙùܳՊUµªo;󹿝{ôÑï_vÙÕ"šçý]IDATòÍoNø/®wW¾á kDÄm#"§ŸuÊ—¾üªTõ6^3sWn³+>pÍÿ}èÛ=ôà%ï½üÔSßtè¡‹Dä‘Gþõ[ߺÿ«ÿøo9ãíoû;Ž>z2°‡§ŸÞ±eË×oÿÂæ·œñöw½ë=î¾(ß®H“†›m;¾JÍQ¸¡ÝͪE¤Ûµ;JRþý‡Ÿ ÜëÕ¯:FD”–™¤Ò¶1§ÝUîÛ~Åe+>ö×"âéíW\vÀ0œN{.ØW-q߆å>^‘ªµ?åw9Ò~í3?ÿú3ͽv£Ùœi4gg[³ÆÌls¦Ñ˜™mÎ6³ÖØXå¼ÕïÙÿÀ¶ò¯ Z¸óŒ"IDAT­ÍÌì‘7¾á·Å²¼‡³9zŪc_:&•éoMø/®¿é#·L,\¸îýÖ,kõßô_}ðŒ·¼^Dî½çbËô·ï×Ûx‡0wå¶ùØ_}øöÏ~©Õj\ôžwTÅ:çÜó¿÷ð¿|èƒW]¿ñ/6\ö_ûÚ=ÏïÜ95¹rË7ÿIïáÓŸú›ï~÷[wñk_¼ãsÏ>óÌÒŇ÷}‰ÿ 2Œ¿JCͶ·‘U*ޏW…ED¤kÛöþ¿(ê²ÎÛjYî­Ú¯µÝq|ɽšIŸ¾âè[Ï<ë€ÁwæWçÎR‹åXUïú´UµÆê5G,Ë­riI·ë|÷Ⱦ`™½Ðv&æhÓIDATlÛîvín·Ûµín§ë½´mÛ¶íúxÝr÷«TS·Óüû»¿pÒIoø'¼¶Z¯y§ŽYù¢êAã–Èß¼ODV½ø¥ÕƒÆDäþûÿÏÚ5§YÊ-õµ… Ìm"vuØ!µƒ‘[?ñ¿ÞqÞß~ð~yíkN¬ŽÕÎ<û<§ÓË ìáðÑ_ïÙsÉúËíVǪU¬hsÜ e$AHKüd ¤kÛŽÄÔîUÙñ±¹Ü·Ý¶»Îþ|Z]ñ]à•®Ó[Ó®ˆÈØxÍý+Öi·¥^¯w»âˆmUDäý_ý’¤eþøß¼åm"Rql±¤ãH§Ý‘±±ªNÝ@=Þ»ny7eì’íIDAT‘‰HwÌZ½{׿<ùÜÿ}z÷L£5;Û˜™mÌ4š3³ÍÙÙF£Ùl4Ûfë?½ïcµ)uü®ÓÏ:EDþðš?9û¬s9ä±cꯉȷ¿ýM¯¥ˆ|ç¡Ŷëõý—ÖëÕžm¢v5ÿ`·Ú_úÒ]sû.¨‹ˆÔ«a=¼÷½ÿIç¢K~÷škþää“OY´óÞÅpÔH‰EB=ÔºÝn¢s&ŽÌßævÒnïÍí–鯴ý[ëîyïý'ºí®Ý±ª""Ž}Ù½_ñ‚ôO֯ѭ·Ê|¨þëÓßj‹ˆ#vwî7Œ±ZÝ’3÷–{Þ»"ÕZÍ}ºJD,G:G¿ ÛrV4+µºIDAT¾ð'ÏîÙ¹Ë=ÝÝœ;ÝÝl5š­V³óºY»æåõ±ÚÜoŽcÍÞ{Ï7Ü…ƒ9¨>V·*|ÏŽÕk"²zõxà~¯¥ˆtÛݱzMm¥MÄ®¼e·qàJ_ËŽ8üƒ|í›O;ãò\úíoó†¿ø¨ï '|êH ¿ó ·n×v¯O¯zéoÜ|ó'õkÖ¾I_é>RU››¹«Ý±›Íýϩ˺ý[­ªˆŒ×kîß1Û¶lÛvDz¬+îûš¤_w‰ûó¸MŸ”ùPý±µov§ÛKÕÇÆªŽXâ8bYbwd>Ÿ¶êcjglYÝ™í.y}¥R©Yÿü£§ffÅáIDAT³æl£Õh¶šÍÎI'³î¢7L­8|î¹éýS‹Ï9|ùÒ°766^‘ /¼øîÿþ#ÿzää²M›>~Î9ïX½ú_³(m"vå-{ßtÆiwß}çÒ¥KW¯>%°‡¿ýÛϬX1åvewºÍ™ÆÄ’ à@]Û–ùg‹Ž}Ñoú¶>ñ“GíÀ‰D¬Š(ç½;®:ù¨y"RokµÓ‘±ñ176:vÍGª×}wÚ Ò?|÷{½(ùÃw¿wÕ§?!"÷nú¼ãV^ÿÚS»Ý¹+Ôcs¿1X"Ž›¯Ï=?=>^g~ÆÇ±Æ;|fÑ>9¨¶vbÁñ/=ró?ü¿m³zÄ¡e*IDATU^òŠå«W¿ä´7½ü¨#‰e‰Ì%áóÙøœññÐÒ[O^}Ëÿþä§?½é;=øŽóÞ9µü§k/8xÚ,J›ˆ]yËnã/ÝsÏýÉUï|çù'¿n½Óµ{8ùäÕçœó6yÿû/?õõoªT*†7… qMi!jv×1ßHÖíluO”ŽÏ§sÝ®Ýjî~úŠÿü~C‡^ËZÝ‘ñ±ý9aÇÇv®?q.i|ì¢wûö}ì¢w¿ü¶O‹Èõ'žÒ±îü÷ÜøX}þIg«ÛnÉüyokÜͧ-qgþBµŒ/¯/Z¾Èýí`Íù¯™»€nø½i‰ÌMpâˆXOüxÛªoûwIDATO~¸Ý7\—¾iío¯=éu¯~×Þ}{g&ò‚C®V«¾fQÚDi¦.»?ôÁëöìÚ;qÈ\c½‡W¾â?xôñOþ\D-=ôÐŇPR¬|·"-üÎ7Ôìn×›7ôô7ŸèÛzºœø½ïýXß˽EÛ‹&­v·Ý™‹¾†‡§]wÝýqDjí®(Á^Dìv[*»Z{ø]ïÛÝÝd;âtÛ¶mWêõùNæîkz×§+ËMùçc™‹äŽÈü à.7Dﯛi‰;™8–e9Ž{“ÆË^õ¢°‹@«^u¬oÍØXýÐE‡˜›Ei¥™ºì6>ú7–™{«ë0°ˆÓì =%IDATc;îÝXÿïŸ}¯ÊÜUá¹Ûé8­VGD¾pû1=7jïkvE*‰]©îO” lÛžµ+Òìz#qSàý÷‘UªR«ï zîšóÜsÖ–›F»ÄÕ›ÒçRoË:àïþÜõj -|³"-|7 7Çvš­¨S~zŒ»×§çâô¿=ºmÙá±oEzrû6››Jì™_¶Žä¤Ç¿êeo>åen$ýÓŽÿ{¹æà›?¬t2÷˜•ÓØ™Ë¯ùÓŽWÃñÄa‹EÄZ¿þÚ~ôC;Ÿýeø»y[²ôˆ+¯üÓ¹'Æþýqâ4%òú¥GˆÌWóxâÇoÝú«BÇæ¬\yøëOúMqãt­^;lÑÒ]ÿúÃ[n¹¾è²iÓæuë.Þ¾í©¢Åø³?ÿøñ¯YåÞ³‚¶èIDATÝF(Ê‹8 @y§(/â4åEœ ¼ˆÓ”W­g‹M›6ç0 uë..z0*zÇiyô‘å½0Ü6n¼¶è!À‰§Eä/oúx¦ã@!öìÞ«ýÆÿ-£‘EÓV‡MFlÉÈq PZÅßïmY–[ÚÓ{Yà`ê'Ÿ=á'Ÿ=!Ï#Þ7=}ßôtÖGI§S ¥n n·øvŸÑ:î.üB0ܦVNN­œô½ôÖø^ªÍò"€ô: ­†-í]îw½5–õ¯þfËtwYž_zêMgîÌQ‹MṬXyjê‰uô]ôËç”øúîàJœÈ†Ý7žgÀÈ:þò‡ÿþOÏ—öniïr:»¤½Ûiï’ùÿœöî¹ÿŒù´¤÷¥å¼·Û z–dù´íÂb³ï.5:F çê!"înÞÅûMÂû­¢ç»e#¤ÍÜßµÃ>þ?(>j '\ñðÝÿó•g_ý?K,‘»oø¯û3ë>GÉIDATyÿáôì§ç¿Ä°ç¯¼Àýâ´Û,úS)ÜGåÖ°ž7‹‰ÔÃ6%èͼ‰=dœ –ônóŽÒ9oæú4ÀøÀ#w~ø•ç\ý!±m9ñªÞQ9= {‘;îd±f,ÑóÓ@2jðË"Îö©^º6Úw‘[½±f'^õÈ7¼â¼«þ‹m}eú𴤧#&»@ê MÝäk曺$, Çí6îJÃzq½î¿üÛoxEþÇÍ:H ù4¨‚•5Îfù8éþ-ç#f¡]Äé‘F=é"èP>• 7‘âôÆ×îÙÍ7ËÚ¸ñÚ¢‡0Ìë§ÝÇ)ôËIDAT¼@þН? §(/â4åEœ ¼ˆÓ”q€òbždb×s?{æ¹_ßû•{ñ”[`EÝê¨ÅbùÑã[Ï8kõªcSÛ–¦€QCœFV¦¿þÐé§­^µêØž-_ôÃ'¦¿þ_œæÁ}#롇®ó–‰ÓÈP” í6›ÞòßÊXuß`X OœÖË`£ :ÝnÏ6µj5‡‘À Чï¼ýÖ°Mç¾s}Ø&˲¼e¢éHi6Ú=ÛÔ§ X’|:0â7™î(k4ZêËsÏ>óλ¿ìk³pá‚Gƒ¤¯ç²Ô,ÙÐ&0H[ó|/Õ>õ6êA‹qŸIDATõö(¡ÙÙ–÷ß¹gŸ)"çž}¦ºrv¶Õ³YÅMn ³'·þtbâà(Ír ¢¾âô·ßJ¨F˜ßû½s>õ©Ï.^¼¸gË;Ÿ;ÿ]çå0$8äÓÈÊ¢ÃÆêõ±£^¸T]ÙíÚÕªÿjËÞ½¿^8ÞÈqh00ȧ‘•ÿý7_8íM'G)A½bÅŸûÂ}—_vQ£€ÁB> ­Zul£ÑÚ·¯!"ÝnWDZ­¹‰B›­V«ÕµmÛ²¬×ìô–ïW¨ÚÀ·Õí0°Û°ÞPËrÿŒD¼Œ:ß?”m[wL­œTºë½7½VÛ¨[ÕêKO`ËÀ®|i}àð¦¶Ô`(õ§û¡Gn¯—ÛÀ°&pG½%çÌGÍ}ÓÓúʵkÖvñ‚¢º¬/È|˜ lï‰Þ•E‰ÁêJ½7CŸï@9­[wñömOElœ0N«e¤E îàýÜ·¸–¯"µÞžP=RÖ­»Ø·FýÇà‹Ž.5©õš¡·7ˆ›òªícHãÊiӦͱÚ'ŒÓz.ëÒëO»±Së†Àé˘Îqb¬+¦IDAT_õd8ÑztDÿ-ÕÕO(ÍN`¶m÷]™×ŸG‘VŸÑ‹Z¡¡2DÙXùk‚ö@õ§cuV©Ú ó±*RszRo(ÓC¸º5Jûˆ]y› ‘Þ¼Àèȼþt`•hýί°šÓ¾5T¤F23p“áÖ°°®zîÛs ÷o‡½ 9€¡DýiÀ$Jx.gç†ó{&Ñ#h‚XKxÐS_÷‘¤ÈT_qš¹BÈù4åE> @y‘OP^e©?ÍDÜÈZ²Â\¥ GýiŒ7B?úȾõDk¥Upýi ©3 ¤î¾éi7BÿåM÷V^½áR‰Ö\¦IDATYcN§×à€´\Z‚êLÙQƒ´ûrÏîà«N¯†Íå¨Íë Š„÷‘Y–å¬T“c÷ì7çÀQ6n2íiõïíÄa“{vïX1µ\ßkÛÖîa%1¢`‚4€~$ŒÓ^‘J_µJCýi_!j (j5ôX;ªÑÚ]öÅï©•“zD÷Zzÿ%3€‘•Çyo5§1@âÖÉ07ëy†te©?­Ö™N«O Pô¿l‰#+…°¤¥àúÓb¬< ¤Å}òêê —º—¨Õ¿l{vï˜8l²Ÿû½u„gi¡þ4FÈÆ×ºQÙ[v³7”õ§1*Ö®Y3qØr906»1;,™ö`:ò…IDAT¾6Üø­n%™¢¾â4AƒÅÇ+¦&}k†[ßJ/~÷ÜEÝD ù4FNº—¢ SÔË ¼¨? @y‘OP^™×Ÿ,،秇œ£üaf:è-úÓzi,E_ç½ãNÖíÍ×(ó•9ÔÔ—úVFPIëO“‚ ‰ã´¯2 JÝ'ª£ð>2 ujféÖ¥ý_*rD ¡þ4FŠ¡õ´rÔ¢5€B½,ŒŠû¦§Ýý—7}Ü[yõ†K%üXΦVNRò€õ§1ZÔ í¾ »wtjå¤ú20‚Y ý•,òiŒ7™öi×Äa“{vïX15©§ÔÄ`` ¬[w±»°iÓæá ÕÔË¢R3loyjå¤oY}©þômÕÛHlû¶§Ü_µWL-w3l/ϾozÚýÏ{iXðµT_…|åEP7±Þ¶u‡{¢[=Ýí-¨+½esËÀ}ĵiÓfwÁK¦ï›ž^»fÍŠ©ån†íÎbæeÛ+\wëIDAT¦–{AÝ[P[z};¢,×§™%¤ÇN_öÑ3csô%“R¡Ÿ÷v×ø‚±(ÓŽºÜ€Ý•êKoYí$gyÔŸV0ñ…pÿí]½áRýõžÝ;& ¸8@¬œØ—÷t`”鑸ç?j·¥×ÞË¿eþà ÿÅÊ£þ4P7^ëFeoM܉‚õóÞ†f G KjíK©·o{jíš5÷MOû‚½—g« wØrêú:ïÝOr¬O&*VÝ íFºÖ®Y3qØr906»1;ì÷n5ÍUó·ì.¸k¼e‰–X«íôC¿>íq#±¾Õw2|û¶§¼³Üj÷Öè—´ ËéÊ£G¼YëÞIDATÏŠXTžF>æÿ™MúÖ ¼8­/®4o Ü7ðˆzRoþ’ùœ8¬ûO^mà-6‹²£düÜvõ§3f*m (e˜z @ŠôÔ¾5æÞrÏ~Âv l™–bêO §µˆ ¯yNRAb @˜<êOîx™„Ü_ 7^K¡@`àä]Ú{q=€T”äIPqQ Ü=‡¡qÇ][ŠB®Ê5¿7É4ÀÀ­?RÊ2¿7=]¹áº¢‡·¾î÷f®P2EýiÊ‹|9q,q¬ž ²„Gç ‡AʧÝG«ÕyQÏ‘Âä*€Gýiw!ʽÜÉjo¤XE¬IDATâšâPfjÉò»zÃ¥ýßø–yýiwê1‚ qËÆ%­ç¼s­?X^Ú—p«¸Ì¹¸ùèæcéÍ|m¢  ^m]`€¬[wqà=»vеË<êO«|å¥õX›b-jñó»xPN `<úÈEˆaãÆk‹B)äQºgWa!0‡»½Ì‡àv3 ™œ#ƒŒìH¤ÀúÓ¾~$¨p–á|u*z‚P¬âëOË „Ckú…ßÛÑWœŽø¨•„Ç9kžwmØ}©.ÂjK_Šعzq:lokù“€Q¦FÓ(‘ÕÐFô«Ø‡Ár­?­/뇃IDATñ/¬½a—è+ã®!ÅêÄ<Âè]™[ö—å–·R\QêO÷ɼ‹Ü餎 IDATÞB²~‡ä{/ xU¿Ò ‹’ð™ÏÇ:œ~…;BžÚŠ›X»ú º¿a$î på}Þ»ÿtSݽœáP¿eÃD½9+ÖwºyGõ~¨°–¾•ÑGñÐÛŽ9îA ïÅÜ•™~Ð(là"=ñß ¢œêOKеg ¿!+ð­>‡j…«|ÌwJ?Jyln">a¨g›(- /7†XóHôû°Ì/㆜ÀþÃq¨±^÷þ™'[ÄM@D¹ÖŸÖ_F\cîM¿Ô XµakXæã¤gxæNf (ÔŸÐ;íK7Hòè˜ß€ò¢^åE> @ysÊçIDAT‘OP^äÓ”ùtúÂ&9aò@\yäÓÖ<óKu6Pß½«è1/bËÀf¾1!(r˜Ò«Xe>DF#ñu¢&ʦþñíò–Ó•ø;Å£“õ…ýÝ.êS øYeô"|Z7ÛRfÒVgïòM¯­¯ñõ}nNæAêO‘âÔ¢)Ž$ú JwÒ•´ÞrvŸ[v“Ì ÄwD…LœϘ÷õéÔ£¦u`AŽÀd=p“¹±:`ᄅÅ{öædô}1dú/í0µr2•¯ƒ›`$Ý·Ÿ©T>Ûz¿µO©¯ù½û¹>m¥WÚëÊÒJDFY+¤Vt¢ÔŒ=IDATôß!̽™Ãm”‘ œôú†¾¤6l–lwGõgX量£aTéŽD6¯x`©ÇèkôóöûÙ½ßd#IñÛ×sví}û&û”²dÖy$‡û½­yêEYOô5Q¸¡Îw¸°Mêõe²ùz \¶oؘ1¢\ÍŠÒ2Ï‘d$ðÞ¨²~ûæ£ç¦ÿ÷› ™줟ÝÍâ¾5Cûìþ€Rd2ϧ3­?¥ÿ~öR”:Aÿ‰ï_CÔ/Gó™.okXéu+“Þ,ì«9·‘øv ü ÃËV}_j†}¾ýLîë$qlK÷„‘¶IDATýöì\ÿ‘î{7¿G}Hq‡íOô5Ètv¿w>HR‘5f›WŠò\oiXã­4¥>’X Ã6´Iëí§uôXôÏVýT£ü)„!Ê·¾µgçYüqÌ/Í‘²ç‰ó·"ŸAæ`Èç÷&H—‰%â^c°Ä±‡ëñIe÷{}Ûú—îÛ/ÿ[‚?î©•“îÙ®ÿO)Á óù‡<ŸÒRàWy”¬1ÓcåsèX‡Kq e{Ëæ÷›îHr{ï©€Yü­H°{>1†<Ÿ` Q/ €ò"Ÿ ¼È§(¯Ø÷‘rè°°mÅ)ªÛ·=Uô e ï#óÊKøêL¸g¿Í÷Ö«-±Ž^€a•0ŸÖOY»zÖŸöãÄm}=—•7¥æü6>}]ŸŽY}w„yg¹ÍÝ’F Éât¬iÈ"–—¦$3ºØqš9ÈÈ ó{P^Ìï @y‘OP^äÓ”ù4åU@>]þg£Ë?BÀˆÈ¼þ´óúy*ºç„ei(7LÁè)¿úÓÒ_dв#U¶C¦€úÓú¾zÙiѳÛ&bÒ¬°Ö\IDATNÞO¹k}_ßÑõª_zÃ[óí€Oõ§ÃD,“+iŒÊÛ.‡­QC¾¯¬HÏ}“Gýi¯˜tܰ”Jê¢Ê]SBп<êOgzM:•N²ÈkÉ•ý+EýéÔæî¾”:ìxƒI½OÀˆÈ¼þ´a__ë¿ì´~;˜ÚgØhÃÚ®ïÙ[‚ã’yÂYÚ°IØúWKV'(we„a-Ãö ùHEhK|oÖñ¯hÊU:b¶ Àˆ(×üÞμt»MKiVÔË ¼Ê•Où4åE> @y F>]Ú©BJ;0ÀpÈ<Ÿ¶ýo®ßàIDAT+ë@ù€~ô5YÄ|ºØ²ÐöÓãåšj‹’OGgØWŸãL¯—Õ6L> ÈB ùtØO—’ê+=Ùstý¤°}ºÿ&¿ëÓae+ÓÍA#^¢î¿†f? ¢\¯O{'œõòÌý”£6{V;QÏx¦§ÀE©6 @™çÓ†‚ÍúecßJßs±çÀB[ÎD‹¯}¨çèÇ`ÌGÀhb~ïH—9#Ÿ ¼¹-µDIDATȧ(/òiÊ‹|€ò*{>kÚæ ™ØóœrèÀ°í›f$îáR쀓d>²Àxlˆß©Ô’¢ Õ@[²d·æ±l/d$0Xúš74qÈÔ AfÌý«sê³u†UÀT—ÉÎó·sçžÍ·ÿƒoåOz}!ƒ€ÒWœNWÜŒ9Jëž{õ?lD±dÉÄU—]¤®yìÛ[­nQã€A‘0N{Î]ð"ß·ßzî;×»?õÆ©'¯ÚAA> É$ŒÓúYeWôúÓ©à¬õ  Ÿ€dò;ï­^WîG`'Ü\Vr!ùôI… H_q:nhŒUòÙzõ“çË×¶¯IDATUŸS,k…äӢƃ"IœŽ5 ™/–ë•›õ—÷xÇêܼ’ûÈòG> ÉÄŽÓC0§wv÷µÁà‚óΑv³Ûh¶E¤Ùj‘O@Oåß;» êÌ˨ÒRöù½eåͧù4åE> @y‘OP^™×ŸêSTæõ§™Ñ€Äú:ïx>/kžÚúÓ׿¡=C,ó:ú,Üu£ iwÜö „ù´—ݪi®ÌŸýö÷æÿ Ë%¨º†/<‡µ`ˆåQ:l÷¸‡`Ôôu}ºט •ª¹& )™×ŸÖOVÖ6… W|¾¾áIDAT€Ñ”wýéÀ•= NG©3 ÀðÅúÓ æ÷ ¼˜ß€ò"Ÿ ¼È§(/òiÊ‹|€òʼþ´o1} ºÌëOSÞ €Ä2¯kHŸT¯}é½t— ó€T@œ¬'¶†‚ÓÃñDÄGdþÏѲö/‚ôUZ/ XÚ°»a è«þ´.Yýi_†lH Ÿ2ÖŸ®®Oëõ¤Õ5À“yýiWâ‚Óú£ƒúÓ”ó{P^Ìï @y“O“ˆE1ù4‰8QOP^äÓ”W_óœÜyû­Ñ#nÜÂÕîÔåNIDAT.uþw:½b‡¯MÄñP~}Åé¸iq¬ÂÕ­Fu´C¬˜ëÓQf %0`ÏO{3«eª©‰ VyçÓ^@MV¸:3P 2¹^Ÿ–ùû¼ôsÚ W0RÊ;¿wX~ì»ë€!–w>íŠe}¡:p/Ê ±üžŸ–4 Wë+‰Í€!–_>͵gâb~oÊ‹ù½(/òiÊ‹|€ò"Ÿ ¼/ŸfrPÀè(o>mHbFhß¾w‰Þ‚öÄUÌ|dwôÍa}J&-!Ër§vñ~½áÏz)o>­óå¯aérXöµØÛzIDATL¸Dl@êJOæîVƒq”ì9°}”5Û…"óé°ŸG¡w÷òs\Y÷@OEæÓa?#Ê:—%Wn®O‡ñ¥¼a…«Óê€Ü”úú´ŒõÄW/\mnïÛ+Aûäï€påͧ£¯ºÞpéZ‚®më/õcõÓ€Ô Þ|dŒŽòæÓ€|€ò"Ÿ ¼È§(/òiÊ‹|Z„™LeUÞ|ºÀéµÔ® åͧ‹-HåMrB¨¨¼ù´/Ç5TƒV+F‹rN»gûèc0Q€>Cû>G2ƒ1¿·u`5hwÁW Ú ªL,`vIDAT­/„µ;_ ÌýôÜÝÐ `D”ºþtÿ|0znê56÷ Ó5„ÞTú “®?W¬ÜÔKy =¨mRI|³î0pæútŠ¢'©a÷‘©+³ˆ Y÷å½>íÝrñ¾ë詽;É£lï:±Þƒ¡Ã(‡ðµïÙ?`•7ŸN\=:°¾U]xÂ9Jÿa†Â<¤žýFMyói’KÀ*o>íCr Aå L> À"Ÿ ¼È§(/òé” ñLŸý¾5gþ¿ùþúŒ€òæÓ–"ÙQÌ;öœh¬ç¡ûì-ëOR?ìÈY'IDAT?í=…•¬r”y—žÆmP¶gÆ2ýôù(o>(°¢”ºFOp}kÔ–† c‹>ÔÀÄ=l$=ßf”Ü×ü¦ôñÞ~à¾Qƈ«Ôù´§´Ê›.Û·¸‹ïeXŸb¬–Ñs¨æwçë3pÀ†7ÕóæOÀðFÂört@¥®?íåmj`Ðs;ß.q“8 ›ÜëÖ0Tg¾ê†Ã1oÖwQ' 7¼}<ÑC€Œ”ºþ´þí˜qZóš}/£Œ$Á.™‡w$¥ºÀLT€Ü Øõi!™+UH“𡞠’˦;<óxŠ À5H×§^š}/£ðíÍÏIDATâB=Wœ ÛžC5’dcˆ5¼(-ãî è_yóé°“Ãêõàž/åÀˆ«¯×/0{/ú žy/½_òjIØ[ \0Ïp8_ýÐ=Hó‘P^åͧ‡i( 'òiÊ‹|€ò"Ÿ ¼È§(/òiÊ«¯yNî¼ýÖè×C‡u¢OˆíÝ#í·¾ 8PZ¹ÎGØ>,~t(æútŠô‰-Å\ŸŽÂ ÀjýD'NíE†@Þù´u _W¾½y¤Í3)5`Xå]/+,¬? Àˆ°ëÓNHdRjÀP*¦þt¾‡²²;ë;jÁIDAT¥•ßóÓ3ÿ‹Í5’ í\ùåÓ\{ ®»> ÀH)ïóÓ`Àòi2xÀH)ïýÞ%9"ÒâX""êÍ~–X®ø‘OP^v}ºØ|š©T9Ú|:pqËp^Ÿ¦ `8 a>¤}éu`ÂÖÆÜÎ|Z§ooÙ·Æàw1,ºÌ§Ã~ö/bŠL> ÈÇ@æÓa?ûäfÆnô5gÉäЀ| d>mÖg-êX1˜”©Ì§{ò…jÇqÔ5a‘Ø× l—(]Š!̧]ŽÂ·Æ{©6ÖvÑ[æ# ¼†6Ÿ)Üg¢IDAT`OP^C•O[–õ¥¯Ü_òŸ¹}V€!`­_íÍ}ÝwNOß÷À-·\_ôxúò¥¯Ü_ôz{Û[ßXôò°ë¹Ÿ}î ÷]~ÙEFkß¾†ˆtº]i5;ÍV[DšÍN»ÕéÚ¶eY¯9þE7ÿõm—_v‘»ï¦M›×­»xû¶§ ?èÏþüãkÖ®>÷Ü5—_výPåÓgyjn#I¦ü#”ÊP]Ÿ¾çË[zöpÖ™§zÁR]–\‚h”àÂ|Ú¾1ø¬3O½çË[Ü`©.û:ñí˜bü&ŸÄ2Tó‘yA×[pƒ±”&‘-É0ƒbóiÕ=_Þâ¸o @IDATeÒ^›°e5Ì«ù·Ú¿o½g½ÿœO­†ÉpæÓÛÄÊnÕ˜í-ë rà9v_{òi@,™O‡ýL1[uSj_XÕócsÜ%Ÿôi óé°ŸYg«qû×Û“ObÈ|:Œž­ê9qt†ã¦Å¾KÚD4ùtßb‰œ¿F çÞÍeݪ[ íɧ±ô§ï¼ýÖœCµùˆaDË|€Œr™ádµoSØKC8?ëÌS©Z ˆn8óéBDIâɧ± ùõéˆR Ÿn*ßóðþÃ6¿·:÷H ’O‹¥þ?— ‡¡º>ý¶·¾Ñ½ú[æŸD7Tù4…$¾ŠIDATCf¨®O0dF1Ÿ¶,+•6dmóé,B¬¥H½sõ(Ë€‘5TÏOgÊ» ̲¬îã¦3€ e>­ÓSá(kÂ8Žã5ëÙþR”\9lwC›ÀÌ>‡\Pˆ‘ȧõTØ·FM‘£§Ëú^¾}»UWfèÁ|PÀ0È|:ìg˜(éf²”4Á^¾@žJL& Ãj óé°Ÿ|)iX³d)i?‰lÄEƒÛ‰5 ™˧sÐ3džg.<£%BÀP°|:"/j:Ž£ÞöØ@¼5,,àé ô½|kÌÝêóÖe`€¡1„ù´£\£7PWz/Í}îMgÛŽIDATØO¬nÕAöìÁ÷vâ~P€ò°ùÈ)C˜O04ȧ(/òiÊ‹|€ò"Ÿ ¼,ŸÎt:‘Âç*À'ó|Ú:P?‡3%b³žƒñ•« @™ÏGæÍ>]’‰8z£$ã@Šº>VSÙ[ö­œøÓ·>¬ÃƒéÙ!97 Ìïm…×T¶´"ÍzKWXaý«GW{0­2wXž3€!–B>·´¤Qw¹ç5æ°­i͆Mä …|:V5hWŸAΧÒ?%QðóÓY_âå2` p}Ú‰PSÙØÒ1Vn6÷¯îèkœ¬C²“S>m'0bIDAT.Ûl^kV¹YßK?n`cßýh†‰Ö€|OcTYsÿs,qDËá70)õüÞ¤­CÅqÄqG¹ÊÀ/ôB>|Y"ñ¢ê+Nßyû­„j<¹õ§{÷Úa[+•J¥Rq›å8($äÓÈÊùïúMŸøÂâÅ‹\í¸©÷³d÷î]ï¹øŒ‡ƒ|™˜m4¾ÀzÏ%T槇«V,«R©VIJ*îcn–Uñxûå¯v/*r¼PR¥¨?m.1 ÀÈÊ£þtಹeZ}0ÐJt}:ÙSX<»`p­˜Z^ôJçê —^¹á:uÍÐJú[Vs}:¬¿Ù§IDATpNµddÏöÞ¤žú^z'Är¥µg÷Ž¢‡P"wܵ%pýJaoÙ“y>í…RµÈU`ig}M`xöÍ¯ µ¢”Ù®Ý\¿ëmd?¥Á¨?ݽjQõ§{Vî³=C#ù½}'½@D‘š°’׬“ZÃH¦³ã}¶7ÜøÉ?¸êo™ÏpÝq×–¢‡0FùSê+N÷ÿUë»Òì.„ÝG%N+]6܈ÄÜP}ß,z @Y\½áÒ¢‡0FüSJ§<‚eH^Í/ ý„uÖƒÞ8¬¬5±9;i@uå†ëŠÂñO)vœfNorÃüÞ”Wéæ÷Æ0yrëO'&ŽÒ,‡Áüï©sIDATÀ ¢þ4²ò{¿wΧ>õÙÅ‹÷l¹sçsç¿ë¼†ç€8½iÓæ˜»/ˆ¿ FÈâE Ä™éÙlÉâ_ÿê—Õ5ü½×qzݺ‹‹p=ôÐþ[܈ÓÛ·=•û`@¨Ìëp€ÄˆÓ”q€ò"NP^ÄiÊ‹8 @y§(/â4åEœ ¼ˆÓ”W_õ²9˜Z9Yô2·mëõ助åE$Wo¸ôÊ ×õnGœ€à8NÑCÈÊÕ.½ñ£ŸÐ×ïÙ½C_9î¸kKôÆÄi C·Ìk×n+·‘”qqkqtMÖ9IDATåEœ ¼ˆÓÄóí÷\Ÿì=ÞóQS+'—‹Sô-§`Ô™Cò@鹊8 #Í̶mÝ14™tàÈ}gî°6…|Äi@°Á Òú¯ ¾5¾w]øo-ÄiÀIpX±ó¶§ÁôärÐù’ãˆ{û ð\Œ47{//W1®~e1òB> òiujHÓsÇÁͪ}¡zÛÖQ‚·ïÓ089 N‚óaë 0¿/ y›†6}fŠóÞ”q€ò"NP^ÄiÊ‹ûÈ`0Üq×–¢‡€§`\½áÒ¢‡7~+õéü–IDAT/q§`ÜøÑO=„\àï%aˆÓPvƒûørbWn¸®è!”÷‘P^ÄiÊ‹8 @y§(/â4åEœ ¼ˆÓ”q€ò"NP^ÄiÊë€yCÿìÏ?^Ô8€nœ^³vu㺹8}î¹kŠÐYë×_[ô@°ÿÞý&u©ºXIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/preferences-svn.png000066400000000000000000000456661203611042400323010ustar00rootroot00000000000000‰PNG  IHDRƒîo±" pHYsÄÄ•+tIMEÖ'õî©ÎtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝ{œ%e}àÿoõ9Ý30Ò΋0éADÑxA²‹Fd&‚‚1„‰6‚®,rÙl4¯¡Ýß/ÙýEŒ?w#è¨CŒ¹$^¢¸;Ѝì&Q& ‘éqEeœapúrnµTwÍÓõT=ç©{s>ïרžSõÔSOη¿uy¾Žëº¢xç;¯›~ôýê[ÇÄ^ >qÃú£Ž]³fm C ¯íÛ÷äÓO|l×nQâñB$~ç;¯ñ‹^xÆÆÓ^ð‚ß‘Z­Vâ@èKív[D~ø'ß¼ïŸÜù¯^0v\×õÂð¦ß>ý9'?sh¶ÑhšmÏÌÌ‹^ÞÙIDAT–=`úÇ‘G±âˆÚÈÈð‘+ŽøÑ£?ú_xÁ¸."6Œyaø‰Ÿ=ùä¾¹F£qðࡲ @¿]122²vÍòçœt¼ÈéŸ> "Îå—oÝtÖY¯:óEO>ùô/~±ÿЯÍÎ6Ë*ýéˆ#†W/"Ï[¢ˆ<¾ï§'Þ¹ýÂË_çŽÛ[#Ïé,<†äˆ_ 9ò”Ô÷ìs¦þ™[¶ÿò/?aÍñ"2;ÛóÔœ<¸»=ß躹ˆÔþíg"rÞ_þùOÝR»îÿñ>u 9ºj¹ø9ñ|k~hر?6OIDAT Õ5«G[­vÜíÖ¬?ÆpüÊÙY«ð©:áø•j'í™9·á/_>üøæèrwÙpkH\Çn»#3áƒs–Ûœ›sZój'ó­y%×j®¾ãg:ëÛÃn£ýô¼|÷‘_ík´›ö²#ÜÑ£ëÇwÄ‘+†ã ‰=uðå)eÕ¡™9QÂÜ??°bŲØšW;™Ÿï¸­–Ûž©µÛ¼ÿùô{¯qkN«Õé8Žÿâ­q“ˆÜqÅ;ÛsófÇiw$,àÖ£özlgä¸Õ+edx÷Ï}ÿ§1ï6íùFãɃÍG2¿zmý”ç¯9î¸gÄ=žAUIDATët:i»pÄK¬‘×¾þ æ¶_þÇð·Rµ-r› §9Ûºg÷ã"rÎún{Û–Öbƒ–È%ŸÜî­úåŸþ‰tÚוNxB_ÇrDï*óòywõ²eÃÏX6¿|yó@sùŠáùF³ÑhÌÍ7ææ³³ó>òÔ¯=ûê³N|æ3—‹#Ž+®#ŽÈ[ÞrŽ×ïoöòÓN{Ù‹^ôÒµk‰û)}éKwn¿í–óÏ¿è-¿ÿ‡q·E9EÄÄõ¶þã8N§ûëÁq©-Þäå8N«ÝqžûÜg½îµ6üòW>Ój»ÞÒáN‘v³##"-iׂï=»?Ã.ÏmIDATgý Û~ÿÍÞÛ‰¿ûœ†E¤Ñ𝵥]ivDd¨6$®ˆ#vÇ‹¿urœ¡!§V¯9"Þ _«žr;Ö/5÷ëz{n®9;3?ßhÌÏ7fç³ss³³ó3só?üÔ1ÇyÆÆg‹x‘ØõÿÝßóù¯ÏÌÌ|îîÏ\ñ/ùëܶæØgÙd÷ßïöÛnÙþ±¿;ö˜c]‘§<Ü<ˆøEø®y³EÆR¯×E¤V_ˆÄCCN³Ù2nqX³¹ƒ†‡ýNi5›Ž[—º#í¡Ç¯¹ê„›>$~0>ÿ‚‰»îðÃðã×\%"mÇmÏ»n«%"õZM\qW\wÈqd!'’€˜°JIDATåË—¹"ÎâM×ÃÒ¬92+Ž8RzÆQÃ'¼¶ÙlÎ7¼?F£9ßhÖjµázM¼à¾ðs³|ÙïüÎÿööí_üâï~×5 ×ö|ÂÍ7ý¹ˆ{̱-×mºáºÕ­êè3|ƒ"=~Ÿë?NÇqb=x'´ý ÌŽëÇ|ù+Ÿyä‘¢6üòÉŸñ[z¹x½^_XÒn‹3äºC"mÙ{å•ë>üaY Æ~Þ{å•ê8¤Ý‘żW†ë5gHd!'ª×kîáPêÉÐÝû¤Ó™ët:·Ói×ÚËŽht–µ[­N§Ó–N§Þî<åºõúáKÏŽòýY«×FW¯‘}¿A@ÑœIDATz²6äÔœÚïž{¦ˆ\÷Ç×?ôÐ÷ÞýîkEäߘúÀ_¾ß[øªWm¯ˆœsÞ™_øâ×kRÓÛøÍÌ]yÍ®|Ïuÿûo=ðÀý—¾ãгÎzÍ3Ÿ¹JDvîü—o~ók_þÇxÝëßð†7¼ù„ÆB{xüñ=÷ÞûÕÛ?»ýu¯Ã[ßúvo[…oQ¤Å¿¡þÓé¸J¾6¼àíeÆ"ÒnwZJbý½ Ýê%/>QD”–C"²+¥ÙqGÜf[¹×j÷•ï^ÿáÿ."~Þ}å»— Ãm5ÂyÍï0ïÁ躈ԜÃi»Ç•æËžøÙWŸ˜z®97??37?;Û˜››eN¢IDAT™Ÿ™››™Ÿ››kŒŒ ]°ñí‡`Vþå×jõ™™C"òêWý¶8Žÿ°ò‰'¬?å¤çÈÐÔ7§>ð—ï¿ùƒ]±bâ]×gã«_ó_¾ÿõ¯{¥ˆÜóù¯KG¦¾õ5½¿ sW^›ÿÕnÿô¹KÞþæš8ç¿éÂï>øÏï{ï5ïŸüË«ßýG_ùÊçŸÚ·o|lÃ½ßø_zŸüÄ_ç;ß¼ûs_ùÜûäO¬]}têû`-þ¯½@ÿˆúN§ã&¸akhÈï꬈ˆ´;Vóð?õµÎ_ë8ÞmÏC~ëNË $èj6|Îún9÷¼%ƒo-4®-œK;0)IDATÇujþub§æŒ ×]q¯F¢#í¶ûãžõŒc;+:n§Ói·;ív»Ýé´[mÿm§Óét:È×õ¾8Õ1µ[ó÷g_ñŠWýûÓ^V®û§NÜðìÚË‘û¾±CDNyÎójGŒˆÈ×¾ö?7o:ÛQnO¯¯XnncÙÕÊ£FëG-"·|ìÿó}ëþ¯‰ÈË^zzm¤~î/p[mqœÐŽ>úùõÁƒ—^~E§ÑrêCŽÝ¬.Èé Ò‹Ÿ<¡âÚŽ+±C±wutÙÈBþÚlvÚîáœX}-¸Ð*m·½°¤9$"#ËêÞ?«V³)ÃÃÃí¶¸Òq†Dä]_þ‚Žq=kIDAT†eñ4õ_¿îwEdÈíˆ#-WZͦˆŒŒÔü€é…âųÓÃŽ»–ˆ´Gœöÿóc¿úߘ™kÌÎÎÍÌÎÍÌÍÏÌÎÏÎÎÍÍÏÏÍ7çæÿᯩ«ã÷œsÞ™"òÇ×ýÙÏ{ÓQG5²|D=°‘euùÖ·¾á·‘o?p¿t:ÃǧÛ®umcÛÕâ_@§ÑüÂîZØvù°ˆÈp-ª‡w¼ã?ˆë^réï_wÝŸqÆ™«Vpvº8.¡©9$Å}§Ýn':×áÊâ-W^'ÍæáèÛl˜n;¼vØ;;}øtt§Ýi95·óî{¾ä‡á_~ù³o¹Eƒñ?™H„IDATçw:"âJ§½ð;ÄH}Ø’»ðÔ’wvzHjõº÷,’ˆ8®´NxF»á®?zÅŸ<¸o¿wRz~á¤ô|cn¾Ñ˜o½üô7ozÁðH}á÷×u¿<ïùü×½GuÄðȰ3´ä[ud¸."7¾ú¾û¾æ·‘v³=2\W›Ù´±ìÊí5]èáØcŽ~ïŸn}íÙ¯¿â=—}ë[߸á/?8äˆO©ñû\ÿi·;ÞuâSž÷ùÈÇõ›6¿F_è=€4<²0U³Õ™Ÿ?üTŽúZwx­S‘eÃuïßU§ãt:×uǹrÇWü0üÈÄ¥ÞÏ“·}\ƒñ‡7¿ÖuÝzëÁIDATv{!Ý©¹âˆëŠãH§%‹9±3<¢Ö~pGŽvgÛ«D^944Twþé‡{gfçfçægçsóùùÖ+^qâÄ%¯_ôÂsć§¼^pôºµQ6²lXD.¾xË}÷}í{;ÿ帱c·m»õüóß¼qã™f6m,»ò_û_óú³ï¾ûεk×nÜxfhó7ŸZ¿~ÜëªÓjÏÏÌ®5ü…rÕîtdñIœ“žý›µþø¡NèÔÎ(g§[­¶:e¦yúLm­Õ‘‘e#^¼›kuꎸR»þ;S~þÁÛÞáÇÁ¼í§|òc"rÏîÇ/8yÃû_vV»½p¥xÁ‰ÀIDATdáwGÄõrî…牗-«‹»8LJëŠ8ËN>zfÕ!9¢¾ytù©Ï;nû?üŸéÙ¹áš<÷…ë6n|îÙ¯yÁñÇ­ÇYH¤3êË–E–uòVqÆÆþò“Û¾ýÀýo¾à-ãëNtÛåG.W›Ù´±ìÊí5þÂç?ÿ'vÍ[Þrá/¿ÜmwB{8ãŒçŸÿ»"ò®w]qÖ+_344d8(dŒ+|H”¸ïtÚ®ù–­v+d­w:sÙbJÖnwó‡Ÿ'¾ò?¾ËС߲>Ü‘e#‡óº–+nÇ}ÿé ‰ß×¼-°í×¼í·}RDÞú™­ŽÛ^üV[62¼øä2%^“IDAT¯Ón6dñì´³Ìˉq]wñ‚±,[7¼jÝ*/þoºð¥ ²¥ß’ŽÈ”®ˆóè¦üƒÝázôU›{ó+^þʧö?}èé™ÑUG=ã¨#kµZ ™M›fêk¯ñûÞ{ýÁýOµÐXïáE/|á÷zdÏc?‘UkŸùÌÕGQ®ª8|‡"=~Ÿë;vÛŸíòœ×žX{ŽœþÝïþHßÊ»ÝÙf»ÙZˆ¯†‡‰=wÝýmqEêͶ(á\D:ͦ ujõßú¶¨Í½UWÜv³Óé /v²pWÖ¼xhÈñÒö…äVbµ+²x3µÇ ‡«.:âM¯%®ã%A}IDAT8®ëÝ ñü?;êòÌ)/>)°dddø™«Ž27³icÓL}í5>á7Ž5÷022¬ï@ ÷›VÇõî{ú?ÿôCû­†®Î.ÑVËm4Z"òÙÛëe®×‰wÓó¡ù¶ÈÐÒªNv :ÎlgHæÛþH¼4öð[C5>üTðµ߅çŽ/ö.L«7x/¤Ï޳äßûÂuc ¾A‘ßDýÇí¸ó Û‰*}Ë—y׉"ñ¿>4}ìѱoúyl÷´ˆŒŒ,LõÄ/Ç3ÒG·‡q¼­dáŠõB8ª‰ø×‰‡‡k^¼xÿ´øñXÜÅkÀŽ?­¥—/±klÝñõẈœúâç÷Áï‹lˆÝÉ“»N}ñó‡‡ëâÊÌ×ù‘<ñ‹Ø¶¶Úûg®¸®>\÷b¬ëÈáy§GW®®sPa§<çÙ³÷§þõ4­!ÿü)Ï9¡^‘מù|ùîƒß?܉ã,&‘b˜JóÔ?ÿµg>ß‹•¿wö©/×ù‘(,<”$ÆTtæŠë~ïìSÕ€;ºrµˆ8—_¾õCzß¾'} {kÖsÕU¾ð|Õ¿=B$ P¯\{ŒÈb‰GôÈ®]¿,u<È“IDAT Ž~å+~S¼H\®¯\µvÿ¿üà£}ÙdÛ¶í[vOï-{ —¿ø¯·žúÒS¼ûÈ(.@™ˆÄ”‰H @™ˆÄ”‰H @™ˆÄ”©ÞµÅ¶mÛ zÈÄÄ–²‡ý£{$‘‡vÆ(…þ69¹µì!@_±ŠÄ"rãÍ·æ:”âà=±ÚONþ—œFË6£_®³lÉu È‘¼’P¢òïvÇ+ é¿-q0€Êúñ§Oûñ§O+r;¦¦vLMå½—$‘8Ã`é•höŠ3§ŒÇq7!ä@yô¶ÓÎúÓº¢÷»yÓ¦¼pM,IDATƒq…ÎN{ñˆe|Ã’ëÜÓ»öø ½×j³é]{üöþÚñ cjKô£ÛNÛü¾ŠH)q ƛ7mÊ©ÿ„‘ØK(]×õ’Z¡·Äo¦® ,1w¥.×7÷wè­ë&ê8íÑ‹B#.aè3?üÔK_óÞÝάãJ§ãþðS/ 4xîþK&;2侹ㄑؽôجGÁ®]…n¢Q}CÃ&þ0ÔUÄà€@~éé¿ÀæeÆÄl 'ü`Û©g¿÷~·õkq\ùí?ù¦#Þ׸ã8®—#ßóßN=åíßM¹£®6¿`œöìth„Ó¥¼(«oÞ5ˆ†nb$Ô“·þ’²“Œ7à@¬¸>¯IDATÕSg=ááŸúÚ?þGi>å–vÅq]qdá4µ+âˆH§mê$ïµ®Á8U[†í‚îvÅlžrKý7ZýÐåZÿOÜ s€Ôsiîw›ûÝæip›û½Ÿns¿4÷Kó€4÷Ksÿ|ÃtW‘_kjè˜Ø²~|ÍVDâX¹fæÉ±ý&úel„òÓʲbez×ÿ(ÁU ÒÒ;‡@uêþýŸ_èE\·µ1/üq›þsbÉîkÍæì´×À›Ÿßr¶†$g§ýx}wK©ñÏ2`«»°Üܼ‰ÿ»‚ÿ{C×£d½·Ò\ëõÏ`g;$Ù:íÊZp4IDATïþÿ^ôÆkÿ›ëˆ#r÷ ÿYÿ´ô‚÷ž]ûéú]õ´’zí/{Íì'MÊàŽ-››°ºÞ–%JØŽZ• 7ó*bpó/{÷Ê/Bý»÷ì¼ó/:ÿÚ÷‰H§#§_Ó=î&£Z?6ǽW+ÖÜ…åϱ$æçµÉÎB¡^qú5;ï¸áÿuÛ³N T®K&3{X&¬@ÌÑT_XB0zÅËÿÓ¿~߼ðTjŽ-”‚ KzÅ+þè_ ÞcÞ1ØC$hÔ€ÒYEâÉÉ­qKÊ£'LNn-{0èºGbï¡(î LDbÊD$ L+£ƒÆIDATDbÊD$ LDbÊÄÌÈÅþ_ýô‰_ýúž/ÝòsƽÒêZ¯ŒÊÂOW~øÈ®×Ÿ·ñ”“NVÛ„E€þC$F^¦¾úÀ9go<唓º¶|öúê·‘˜Ùô±¸ÞM$FŽl°×lêÞoƪ)½«"±^&UÐj·»¶©×jŒª)v$¾óö[¢V½é-—G­rÇM¼(ósÍ®mê+ˆÄW’œ84â"4Ùê ››k¨oßôÆsï¼û‹6+V,/pDP-©žbR3]C›Ð0ì, ¼UûÔÛ¨;ÕÛ£‚fgþŸ7½ñ\yÓÏUÎÊ-IDATÎ6ºv}¬œç‰½ðìñCi`Ih5®ëkQA3³óÞŸ‹/:ß_xñEçûËgfçK”.a$ö“Ñ@Vê£=S•wÝKÔ5frâž07ך›k]~é…ÞÛ¿úÈmÞ‹Ë/½Ð[57×*otP¾„‘ØKFÕïrè…ä@KWaÞKh5cNv(F³Ù|Ï—x¯?xó¶f³ùÁ›·yoßsÅ%Íf³Ùì~Kô±ÜÏNw={ly±9»¡P®ëÞpÓÇE䆛>îÿòXRö L©ž'¶üÕƒqàòp×­ô6\î-^è5/€Á”$XŠJ£Þª÷dYnº '„ÃnIDATª/v$6LßâJu8Ar ô¢ñ ce@ßJu˜üfíúÉèè‘6ÍÒìE “Ó»ö¤é*ñNÇ7Œù»ö^{  cõºmÜ~T_ªH|çí·ŒåþàüO|âÓ«W¯îÚrß¾_]øÖ ’í¥”ÈTb8$ ý‡œyYµrdxxäøg­U¶ÛZ-xMäé§½bÙ\‚]DED?aõÖ†&Íz5µ ¬M&+[20Bu­ß¡ùˆ¢ú$Ÿª‰œyùýÙ³_s†M‰âõëýÛÏî¸âÝ—d²ßÐs¹ú©c½ºÐ|6X…~ÿzÏ–ƒì:f û…À|DQ#®ùcIDATPAäÄÈÑ)§œ47×8thNDÚí¶ˆ4 Ó[Î7F»Óé8ŽóÒSOšº÷ÛivdH‚»nâ „Fóæ–n ±YÆ]ÇW`f š ­Oœà‘_‡ŠŠýbñ!qG_–^‚Sʆ6z~™¹À9góx²Ú€j*¢>1 ²ƒ]q`ÇIŒ»ž ¶9C›ÕYܨÁ.ëv]•íYeuœ¯ª)ÕÙiË„Õo¦¾ðVù“Vúýè3\ª k½C»ê eqïïHÄÏŠ³øKу™~×¼U¬ØéIÿÜTèeæÐ%Ó»öèÏDéô1grÓ€¤ŠÄiè±Ù/îä50, ÝPoÉ™íªÃ”¢IDATa¸›I«ß“•þ­yG6#ìº$0lóE…mB2PMÅÕ'ŽÕsTu‡¸‹©Á1¾aÌûCÄzKœXÏG=z}b?`ûo yj ëÚ¯å¶ê)k’cô=0Уr¯O,"®"«>í“]b0 ÊЍO«Ã¨JÆ^ U±˜ÛµÕ—{}âÐ*Âú=VQ5‰K¨X è3Ô' LÔ' L©"1ù1)‘P&rbÊDN @™È‰(SUêS­é혚êÚfbbËîé½ ,QŸ}å¡÷ÖNNn-l$`©äúÄQ‡HìÆ›oZuð€UÊõiôf–IDAT4ó_¹¨ "*@„òkB¨³C†Q ¿ž WÙ·¬1X.¬ˆÌÇ–m‡Uþ耀ÊÕ' æ%IþŸ²†ºë*go™-Û«üÑÕªO T„ŸQù_è%þINý…ß~z×umèææ–†Íýé!'ªqhÿæ>C‡ÝõкUÿxÕÎí-t•Ú›aÃ_qhÿ@~R]'¶¤†^ûºÂ@1Ôoÿû7*LŠq Bƒt‚«˜¡›GuhxØVžÍ^ïNÂ>ÌP†ÏÊæ¨!9tÃoBz@ÞªRŸX­CœUŸ€¥QVmµU TVEm[©[Šô˜dþEÁ¾Ûdǘ FVQ}%×"×ÒIDAT'ceb oXõ„jéñØ&ML0àÄǘ m%ÓEO >1„šÎÚœqõÙl¸\Z} ÜsÇä'ÕÙé;o¿…ÀŒ^gsŸNèµd{ö›‡6‹µ÷@ãXÛZÚKÃ&Q»KüIƵÊf¹ýÁ9I‰ èšÉÉ­–Ówøôxˆ‚±šE-éz!9ps“yïiv­÷iyŒ6N¶IÔÚ®Ûì×r¹º„Œ‚‘£LLl){勺s]¥9í¤ANŒþAiIE?|( õ‰(õ‰(Sîõ‰CË.…6ãyâ>ç*?ED˜m DŠ©O¬Ö=$Ü Juv:î$Òj(ÜŽFIDAT Dg‘Ú›a-}©ˆ ¡ôD9t LÒh@+­>±9ë%' ˆÜë‡R7Ôíy-eÇÔT×6[xì@¥zvšSÍÈÛC;ï3¬œÜZØHÀRõ‰ý¼V-€HvÕúÄúZÀÞ7ßµ*î”Ô¾JÕ ÎÏ€&P5E×'6,½c (€M9&Ë~J‰dDÐÂx58²E}b º>øVíõñ÷>jäZL@ˆ¨²<úòÀï­º•éýŒÊ_ëohÚ³š©k ›vd>ýC0tnØ]ÔA™;ìÚ¿:°®‡ÙµqèÇh³<ê/HŒZLtzÑøÐ¸úZϧ-¿Õ¹·IDATšCûTEÅf}„æM ]Õg×cú l:´é?Öa†66o«Ìü™ƒ‘!rb ä{Ü&æ4›¸hˆ1öbB`zWqÇ`hŸIÿ@/"'BD€"ƒa_iNfUÀ8ó“´y÷Tõ‰“Â’cóùبMÒì1ñ!du«yYýUS•œ˜I?Pý{_¿rì¿,, ÜÝ£oe/j 1›‡gÓ­åðB¯¦GõcÓsÔGլôßK2¡Ñ@bEÔ'VC,¹šœÜwúŽÐ/Ó¨û°ôÆ6wlÚn²ÜÊ0¼ÐMºB‚ñX.IóÖ²eâ1^Ø/Ò+¢>1PŒ‰‰Eq§‘IDAT-e!„ùÆ+Huv:M‚«O)Kë=:#®j–v î0+¢D×jKT& ¬"껊@Tz ¸rê 'Ÿ‘”Ïg‚´0ÈŠ¨Oºaè[q'ýªèúÄþ[Ëåô7êP¦jÕb"!F;¦¦º¶™˜ØRÍÇŽ ¬ªÌ; dâ¡÷ÖNNn-l$`©Z91Þ7ßµ*î”Ô6âÖÐU+äQE eMßJç½ ª£çcÐæ…ŽªK˜É—»ÚO¬>s.„. \äÄ(ˆëˆˆ¨78â,]Pâ€õRNìMée˜³:nW™Ž}E¯CXSuIDATb«ŸUŽz·Ÿ¨NB÷ÒµqÔ =ÇIÔÑ…î+t$æÍõê¿6;JP¨ˆ"ê{/l"_²™a d"ô` |³‡žC6œU޵*´˜®¾G˽è E ÇbUÔ¹ëXŸ’>BÃæþ[›Û|@Åå^Ÿ8Åd“À%cßO¬=¦^ÜÍsºœÓ‡ôœB뇖$ÍÞ[õµDäÓæ½›÷¥7 ´±úX÷ge¸Ç¬î޶‰pùÝæmÙù.ú^Ñ üòˆ~QÅ@ÁDýµ:Iu¶û Ý…ß@mO™ŠUüW‘ɱ½¼Ÿ;ʯs úæÄ~dR3HY¼›:Ö=Õ†Ô¶€øgÂ-°?IDATÞx0ùw ÉbRï!Ò×Úô“x†À¼£®õ;¤ ›Æly€q7·ùí?j ‚J«OèGŠ2Î*g¢ë.8)Ýs&'·Æ¾#4 è Cïi2¼]bhœfÛÐ%±ûKô½Ø÷w„Q›^v”kÖä*Õuâ¬Tÿô/7õ„‰‰-eb˽>±z6j­ß•’»^U; ´ŒºLïаD¿xÜõHQ:J;èÈê+´>±þZpQí ›Ø/Œ»„ Èõ‰(Sª§˜b%ÇÙêš­’ÎzBªHL~ @J½šÐȉ(91eê¥úÄ€Ùœ®û#IDATŽ©©®m&&¶ðØ1€J)¹>q¶sW1ÚyŸaíääÖÂF–¨OŒ~sãÍ·F­²œ’:§r¼ýÈ\ªëÄq'‹v…jÿþϨm£z,oóÿdØg¥úÉoG¡æ4l .¡/]B:0{e 2’^î)°6´=É7âªx’Wå±yŠaõ? „9±ŸzrPïuâ{ªõ×Yõö@&ô9°Äð"°I× mün Y»ß jœþ[óu°ÍG¡÷`Ø$0rý3ÔW™; }T_Éõ‰C»Í¯=  -Yï¿ð2f5o¶Ï¡CËè†vhÓ­aþ’ÐqVŽ(t¸}‰ïIDATúî2i–æTD²¿ ²*QŸX§ÇølÛªÄ_ëzT3´´ìÍ~ï>u«¯OÇ¿úKOÔÇhX•¬[þu•Rr}â4õ€õöjo¶ÇäOÏ€u~¦(鮆f„âö“Õøcíè%×'64ˆ»mÔ jî•a¦ž*O)«!ÅÍtŒßðvýl½µ9ýuÅ >19¢¾¾C¯%›ù›øq"ªÃÀ0R&Ä–ýè-£l9žl{3˼C \©ÎNßyû-fTÊääVËé;|úWyèV–ÍìÎW~ 0weùÖðÂrÀQmôví-êŽ3Ë=&±„]–è[ŸBo†J9TC1ãÐG§©­Mùdn×ÄUh}bý­åsoàÇÜIDATúW ŠÖFõ`Þ/6¨O @™˜w€21ï4e"' LäÄ”‰œ€2‘g/jZ¦ûèŠÈ‰S:G½ Ìe:tÔróÞ7 ì(“‰©P¥šcË2'ζ>±¾¹ÍÞ¨¦¢¯gõšzºÊÜX°þ;„eoAÚo EäÄ¡œìêû]é whu"j Ûÿ–`îÍPmFäÄQ? œõ‰ýôÑ0¡tÔN“å™ËМ8«Î½%ƒœ8êg””Q-ñ¶ÕÉ;Csq‡ªÆ@ïÛ15UöÂMLlÙ=½·ìQ \ªH|çí·Ä=JmÙÐIDATA]…3± ÆÓ˜™=™1ÐÚy_ÙCšœÜZö`’ûubÃ5`Yšš—Ø0”6Ô'–¥%Š-ïÇ6ô¦·1oë¢8€ê»ñæ[ËÂì){0ÉýÞéÀ_w)Ë%jozÿ†Ý™W…ŽÍrw†ÞBÖ°­aÌ€¾×çslUád8}>ï4a¸Jï€#®ãЏå]ß06¾a̾qNcȶ·@‡9 »,¥Ž7õ'•Òž'2§~?N06¾a̰6Û­ŠQå±eB=@ÿoÙæ»þ“0|tÞ¶¡k§wí‰õ™GÝ¢.Ä +úÞi Wê÷u§ÁÉæ¿â0[íñIDATŠüÐ'ó¢/–"'FR³=‹RÓÀZÃw½ž$é)—¾¹Ú ‡¨zÓ#Šùˆ {‰:œdC5¼ú¬Ì}ú 3<‡aùÑ©ÿxR¦Å]tENŒ>YÕ/Pû+ê¹ëæït}zÄ5D‚®Gdnz¦×±³È{ëÿzHŽ=ÈÊø†1ïO‘'ÀÓì4ñyïœTöÚzTœX?±ìéZŸ8ô>þm$VJI¹ÓJ?;Ÿ!IDATE¾J } „³Ó:/-æt €>09¹•*„ˆ%U$¶‰N·:¾¡Ý’ èE[ÊzO’H«S׊¡ Éô¢ÝÓ{ËzOìH̼Zd¨ÏëPq©"1ù1)‘P&rbÊDN @™Jȉ«ÿ¬põGè¹×'!‰»;µóæYí¨0L+"ëKºØc³!œ=§„úÄú¶zYbÑB¯×Æ2ñU'²NSYß6°w½¢”^»ÂphM¨ <–%˜b%¾¡qײMèë¨%jP´èº-`QŸØ/67ðdR¥¸¬rÈ”XØq®×†3é$Ü”|`#ÕSL•šÒâ¨3Õy &ó>}#÷úĆm!*}YbýÆ+µÏ¨ÑFµ ]Þµ·û%{€AVf}bÃ*=$ë·8Y–4NPÙf„Q-£¶ ù@Å`GëÀ@ªV}bËŒ€¾Q­y§ÝEÙv›•Ê л¨Å@™ª•0hȉ(91eꜸ²“cTv`€^‘{Nì(Òì+g©â€Yª9¶,sârËóèªc|؈LïÚSö@THi׉õ<µëõm×m ûÕ_[îÈ^“vWßø†1ÿ,E•ß °µOIDAT0êm×å¡-§wí! ("'Ö9å{°rÅöÅ€Õ}©ÛúíÕ––U‡C[^£:¼(˜¦"(€œdGýôùù¢¢lrb{†mõy»ôZLé3Zrâþ0½k9÷ $Öþ*ÿm`m ÿ6´ ÝÖœ¦èäÄQ?}~Z©/ô…fÀöÒ¤¡)w~ÈÊŽ©)}áæM›diˆõ²[o‰ÿÓ~/~cC}‰úZ]¨î(Ð20ŒÐ®lŽ@LLlÙ=½×²qªH|çí·ØŸ Žª œíé\›Þô³Óâìt¹&&¶–øÿ1t l~³4§²õ´5ª«® n×®ôƒPÛ¶mÕ¾ÐëÄ~ü@ HIDATÓË÷¦)Wl.¬v¢àÐÁtº#›jÄ(Œýï¡y° á”7YWå)€¬ä~ï´¡ ¯~ù6°0°Ä\ 8´ˆ“»”h4厺U•þ®ÛËðšnàª3€>SνÓ@ÁÔ–í]Ð~ØöžP \îºUè’X]èuÅ]'½+*˜…ÞBÚ>ps–úÚ°¡åªd ô‡Þ˜w€~E-&ÊDN @™È‰(SÕsâX“^1Ù$ çľwÚ‡æÀÄqw—a'TP’§˜B#®!B«³:'Ž£™t‚²¬Y3Xòð÷w—2¨šTÏ'ŠzÁЬ7´u'GëIDATÆJ}ŽÉ¨ú‰êk2ìâíÛwpûíÿXøêW¼²”Á¨…¼úP¢T‘8[q³ÞÐ(Ûµ“L*/!®5kF¯y÷%ê’‡¿¿»Ñh< /?´ó¾Àrâ1€%ŒÄ~ ó^ø±Í›u+0÷V~Õ¥½¢ 9ñŽ©)/ßxó­þÂk¯¾LbÖ/Ë[²JPiêG(WÂH¬ŸûõØ×'Îç–{EErbY†½·D°ô3?‡V6DÍÐMêÔÖ~ü)‹9(Qqg§ÝŒJP䙋ȉ_Qؼ„ØÃ깜ѕcìY?>¦§Å^`+«R×½}þ*Ç ~±J‚«˜† IDAT~ŠÛ « œaÙcd("'n•2õÚJ¬Ã9¿gæg˜»Æ]3У’DâXSk¾éôʾúÛÐû¥cun^È[Å+='΄wmÚPT€YìHÜsMçw .ºà\iÎ·çæ›"2ßh”•ûçEâþ­(ÈDõ¸¸NœdÄÚÓt jª;ït~aÒ]”Sÿ¨ Í›6ýæ‹6zwJËâ¿ïõÁ{FW†\$ðB ÷'M¨ú¼Ó@†&'·î”6Ü8m£ø$U½e@HuÇVà¹a Ê6oÚ4ºr,¾£+ÇD$4!Ü{eíÃdè]j\·¹óËk£néqÊKIDATB.ô¢T‘˜0ŒÞâEÜõãc%¡ô¨ç mÞÚÄKC?þkâ.Ъ{ÈÉîé½þŸ²Ç”øä3 1л¸N TK²€JzWîõ‰…ÚGD˽>1óP`êìtâ9ªœEj?êÏ@ÿ†öô´Ü+@è³C‡Ö6¤ÎqÛÐCæÄ~†ª¦ª²xŽ:p¦ÚŸÓ**Ç•°ºÕ€žVD}â¨Íãî€þ“ê:qz¡×z •Œ¹6 è3¹×'ÖO)‡Ö6ï…êIÈÐŽ©)ÿõæM›J Hñõ‰Cv-HlS‡èÊ‹Áí¼/°œx  DƒXŸƒiÇÔ”Òø.IDATƒo¼ùV¡W'qbbKg¾TUs2ËjŽ è9ÔbÂ`Qð÷ÖPѦ RWê<Ò*ŠÞk¯A`a ‡@¦”C ,qWÅ…úµ˜0¼„8†=£+Çس~|LO‹õøWæÊ°“uEµc tÔbloóþøoÕU¡m,J0™#®>õg¬ñ$;ºÄÅ£øÈ‰[6ùh ¨üâÄþIéœÎëªg³ísèG—ÙˆÁÆubÀV ù ©z‚h½,c³ÍÅ]u•}šìè¤GNŒà=§tíÕ—é—ŠØ3º2ä"q€M@* hÅÍD-ÛWäè€Á”{}âÀ¬X†à©IDAT< ŒMNnõ⮿Äpã´d'™£¶Êõšk†ã­ÜëS: ±yӦѕëdiôõ¢rhBz}×¼ ½MúçŽÌáÐ<*ý*µ>°4G'\0²{UÄPúì•zåDÿ­÷š@Žô¼ˆ»~|,°$ThÎÚµ™ùmèò¨×6CÊd‰;‰"qh½á¨%$î®#"®¸"‹Žsøu*>–®²g‰«9* ç¤ªO¬— ­OlØÜ°€¯š¯š£zNªúĺdõ‰Yr²!ЋªXŸ€ÁQÂub½Þ°º€’{}bOâ‚Äú ú õ‰(µ˜(SªHL~[za¯IDAT @JåÔb¢ˆr²mÛö²‡ñ”S‹‰0ŒÛï§ü¤ŠÄ}3ï4Ç7ßx;9¹5´e öäмrIqgÉj$êÞó ´jÏ„s TÏäÄ@^Bì‡aõ¹íÑ•cìÉ;-®¸bæ cV2 TÏ\'²¢N/šàzG`ÒiÃÔz ¨7V‹#é=«ÍÔþ%•l¨CèÇï?´™Í!>Ã^,w ô·êÖb*Hˆ†`E¡CkºÒ…Fý®3ï=t̆½x¯õ¡ÆÝKÔØ€ÁANœ±>ž,:í¡¹ÊO‘Ò&òôÝNv8mÓiIDAT¡é©ý¶‰×öŠþ8  HÕ͉ÓÏ3eŽ¡kõ2 6Ój8¦ì-ïO¯çxÏ)]{õeÞ¥bõÐØ3ºrl÷ô^›~Ô³©¡ ŸÍ桺æ£=¡?Ž(X¥ïöŸ\JVÁHº†›†Y;J—ë§×£&'·<°$ÞZ2_@µA”à«nNJŸßÃ0C¤³X[P]¢¶Ô7¥âBTÃØÔ框&ßQ#éz˜]ÇæïŰ¯Àxô–Q‡æôH ÇÍ›6®\'K£ïèÊ1 Mˆ½‹ ê[Ñn5RÛè—KáÖиkûÐåkÌjçæ}E‰Ú£á ûm²±}¬—®¢…Þ^ bIDAT@¥‡^Ã)èÀ[C€1œî:TóÑú °á ºî"ÖIøÀoQ¿CT< {¼ˆ»~|,°$Jh¼ìºÄ¾±ù­¡AèNí;7Ü,unÙ°kû£ˆê$t$Àà¨t}bg‘úÕïQÛ6‰;˜d'o%zÚj¿[ÃPý\VuQƒ ôÖ•þé‚eèxìÓaØ·{z¯ÿ§ì±TŽ7ë70Eªt}býû=4kôOÏê'u»J°‰%óPãŽ$ÁØò‹Ž½w (^¯Î±eHÈ*´$z¨¡§¬mòÑl‡gOYƒ€ÁÑK׉Ýn|-o­R6Ño€ÒwšÉPc$Ùb ϦeÜm6Înl8IDATª›GÂU¯Ëv}+Kcª¾\¿Ðë¿ê6jxæ­ôN ¨a$Q‡úÂ<<Ãîmô]w J?O @ß«nNÜ÷H%BN @¹ª8ÇÖ¾ôµóÎ=ëó_¼7ÍÏßýW'?0@Iz«XøµW_vÕÕק줊÷N{¡TDÿ<ïܳ8÷ =*Ù„ðÅ»ã®{3é§Š9±PÓHß0PvLM•= ¨‰‰-¡³Ýí?0@ÓT:'NŒœˆë¡÷•= œÉÉ­e¡ŠË‰ ÷K:ñÃðy瞥.T#´I8Ð^=M „Ró?¯n1<é/w1‘2‰œ‡¶×#´zã{;-»IDATU²‘#”ƒõäx  Då\'6‹€Cc691t;¦¦¼|ãÍ·ú ¯½ú2‰¾R•J0(ç:±™Yý“ϲô¦h›t™œQÔ0콺K3>ÓGÓ=€+JEϱå,èÊûéGY/«!9”Þ€œ^BÞѕcì)àFb*ØÄÄïO_Þç_ô[îR®¼Ÿæ¸k#}@”ñ cޟз斟¡›‡öoßaàuÔ çìžÞë]EZ?¾Î‹Ç~TÞ15åýñß^ZªoËÒc׉£NMÒbrbäÄpÊÚ¼*´}sýtthÿ¡=}lÛ¶íÞ ÿìæWéÐIDATôŽ©©Í›6­_·mÛvï…×Ìk°~|¶ýjK¿q`ÃRT÷:qšÈÊubäG¸q{H¹yhW~ÍDkôº‰‰-Þ ?dzKáV”É2½P±ÞBõ­ÿZí¤`…æÄ–וÍÏ«Ëm^²ø{ôµW_¦_*>x`ÏèÊ1ËÿýLÔ2È#Kz¬íúŸ­×Òoïçвøàør—Û7fŽ-ädrr«wý%ɦ·õRÏÀ”'ŠÓŸgŽJˆ3éè!j*H‹wOïݼiÓŽ©©@8÷se5iŽz¹»N\Xè?›7m]¹N–F_/*‡þf·j6,JBXµŸz“§IDATy(}óÀÿ­úZßÐ÷ôëÄ>/Öêk§¬wOïõÏE«AÚ_¢_Z6¼ÎV¥¯§ùIN Ýâfc%Ql.¸‚bè½WQ7d™·êºJŒ‰/‘=M½ÍJóÚ¨ÞÔjÿuh3› %ç瘫˜{A4ôç·ßbXø „*ë¦ ‰éÿÙ–˜ø¯»öµahˬT1'®Ô‘×Y:Ý»#ó¿gˆÄèQEϱ•Rñ{ WäÄ18ŽÃyoô«ÉÉ­œ¢JQÅëÄ™ìQÔšð ˜Uä©J`0õgNLò ÄÂ]l¨”;î¬'Qû0'Ž Ã~–ì­ Mš£Ú:ŒZH%ªªýIDATÉ«>Pú3'Ö©áÙXá¡›^Ò»êêëËBÑzòÞ騟驉²¹Y ¾2ÉôdNõ3%õŒ´9Ó%d¥'sb3ï|ž‹‰¢ô"rbô&ŠЋúö:1=!U$&' %rbÊ4p9±:Ke`ÆJ¦é¯sbG¡.”Å‚ þ¬–¡Ïë¡ùéÏ{§ e—¨”>̉UþÌ”¡g¤¯Õ)´ÔÚï-j‡Ž&ttIDATö¬÷OJ 0èÏœØ@ŸäÒRhYbý…,=®o €ª'sâüêû¼´8>õ×_ɉ]õdNœS}â®âæµäÁ€®z2'¶—æ´°aøi.i1 JOæÄ]Å­l°Íe‰‘»¶ÀÓ‡9±^™X” Ä%¡›G-1T8Ö׆.  ?sâRèÜ8Lb'0 ›w%sÔÿç· ' TäÄ”‰œ€2 bNl3ÏsqŠÑ‡9qA4´æq{ } èc ?v.IDAT@XOgK’ÕÖ· lÚ­ºÐ00CæzKOæÄqëÛ¤ŒÉÒÊ[Bu&¹,Ù0ô®žÌ‰cÕ'¤•QÍ’¥•i’QËYŽÁëäzNåÄèCÏ—ž•ƒ GõXNlÉQÊ"镃 Ä®–°Þ@ß*°$qIcÃ.lè!}˜ëõ‰K¢ ÛÔŽ[“8n·ê »ö8œ¸  zlŽ-úLæÄôrbÊDN @™È‰(91e걜8× 4JŸ0€rω¥ÒìμËf](…@®rŸcËŸ¹"SOt ?“&IDATFEÆ å\'Žª¹ë¿,®2°<ªÃƒéÚ!y3 +%Ì;íD×Üu´"¾zKOTQý«{W{0D2wX,ÐÓ2ȉãV –,êòv½Öµ6«Yš ÀLdǪìIÆ ‰l&ýP˜’Ÿ'ÎûR+—rWÂub×¢æ®/´¥k¬ìkî_Ý0Ð8Y‡¤QPNl.ëk~Õ2ª²¯¾•¾ßÐÆ;¿ Y)!'Æ rþç:"⊸Ž#Âï4]¥ç&õì+®+®ëºÊµþz€œEsD"0–*ßyû-c<¶ë'O?݉Z;44444 Î{<IDATä5+pPP-äÄÈË…oý½mûìêÕ«—.v½‹Å‡9ràÀþ·oy}C€ !'F.fçX¶Üyû¥ -NyVrœ¡¡Ú8Î÷P˜ã ù‡ýâ—V•9^(M%ê› ÐÇŠ¨OúÚÜ2«>¨¸ ]'NöÌO:¨²õãëÊBå\{õeW]}½º¤ï?%ýUå\'¤4¾al|Ø}ã\S€r¡ {§õúÄú[Cõ_Ã’¨­Ô·ÄfÕ¡~éOï²½ax|Ø}ã”»N¶¯LF˜ ï0+2zž„$Š^%îQ˜w*ÁOXÕ`©.QS=}Õô®=~pÕ»Ò™ÛwÝ—ßLÝ…a«Â¨‰>¶Àð ‡–+rb(ŸôH$BO¬pÚ^Ýʾ·Ê&܆¬ÂPɉ‘‹#–Í>±ï—÷|éþ“Ÿ3îÝ ®õ*#.ütå‡ìzýyª1aP„æ‹úMC±‚„¹+Ëñ$XkتôÞæ IDAT—ÿ PÁƒ''F^¦¾úÀ9go<唓º¶|öúê·O9éäFT~ŽT´³¸úé¸ýgÒ>1Çê°ø;§¼=úãì•ߊxžË& Û7úŒ—{éË“Ý\Ê;C£T¶ó”§wíñÿ$Û¼øø]¹œ8Ây¶¸ Zív×6õZ­€‘äï«Q9ôŽ'¿Ahc½Ï¨µú*ûÞ¢––›;,E×»áÊ;òàÐÀZ›AÊ“úÞÅ‚NþBaF°¬ÍÏ5»¶©¯ c€D݇µ^ö@€â\{õee¡ ø§”$'x`É€šßú‰ê6ª½qTÙc¢o~Ã4W]}}ÙCèþ)ÅŽÄÌ5 @†˜w€2UnÞiô“ÇvýdtôH›f ª‰úÄÈËüÁùŸøÄ§W¯^ݵå¾}¿ºð­0$¨ %‘xÛ¶í17_ Õ«–‹;ÓµÙšÕË¿úå/ªKøw`p,‰Ä[ʃãß.¾$ïžÞ[ø`h¹W·«œIDAT€DbÊD$ LDbÊD$ LDbÊD$ LDbÊD$ LDbÊ”ª ãÆÊBî¦wíQß®_WÖHŠqíÕ—]uõõÝÛ‰ "\×-{y¹öêËnúÐÇôåìÑö‡;îº×¾1‘ª¢/#“9&í?à6’Ê"@…™wlP&"1e"°DÁ·²s‚]ü§‰Æ7Œ…¾î-jÔìÑC @ÿ3ÝžÃ=:r‘ú\ \MïÚÓ7ÙpèÈÙhÒÕ¦”‚H ƒ«wðþKF`Ià¨Kÿ½„HäŽI(IDAT è+ î·*w¶Q"1 .=Aìu×r«r?žb€>ç…[ÿmèeã2Æ•V#/å£ '€þ§-=ÿëÝÌ8Œ§wí± ÏOÃüá€H !4Öö óqIÄaÚ„ö™+ÎNP&"1e"P&"1eâŽ-¨Š;ì! Db¨„k¯¾¬ì!ß<ô±²‡P¨üÍ# ‘Ê×»ó&vÕÕ×—=„ªàŽ-ÊD$ LDbÊD$ LDbÊD$ LDbÊD$ LDbÊD$ LKf»ü‹ÿzkYãn]ÀG-IDAT`0ŽÄ›6o,q ¦…Hü¦7m*w &çòË·–=×ÿ*ÖÚ’>½ŒƒIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/properties-lock.png000066400000000000000000000305171203611042400323030ustar00rootroot00000000000000‰PNG  IHDR%äZ pHYsÄÄ•+tIMEÕ )ÂqÚtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝi´g}çñõv¯¶+KÖbd Ý+Y^Â’™a±eÙ2` Áa109`.Ø„gœéúÅ@‡a3à“IBp ,0ƒe„Æ“IÿynzÑsžól)—Ë960ÔLÓ‘ûïÿå?ïùÙ¿ÝûÿœÈ1lÛvÂfËË_¼ñì5³'ë­VûdÝœ­çÝíw¨óIDAT`ÀðY¸pÁ¢åZ­ºpÑ‚‡þÕ®ÜãDNED¦¦Ö:aóدy¢ÑjµŽ?™wƒÃjbbQ­V[qúøÆ³×ˆ¼øø‰c"b\sÍŽ-—\rÑæç9râñÇž|úd½Þλ©€ðð£‡×ÿÃmIçÚÿÆ­Ï;{ý¢Å‹V­Z¶bÅ’í¾w×]wUDäŒ5Ë9~ø—=ʰ0牓GÖÿÃmtÍåöäêÎÚÓe©ˆ5wŽ™!âP2ä)©~Â8ø›¿½ù¶ƒ|Íé‹V4-ûŒ5ËE¤âTzòäÉz½=>^Ëcƒhågn¾âõ/}ª!ÿvÈl¶âÌRÒÂLÄIDATÞûk¹âõ/ýÖ—o®Ý0S¯·OžœÉTD¤6V{êhƒsÒ>ælÃnÙÕññê£ÇÚãöXµSÛ0ª¦í{P›mU7¬ŽÝn4ŒNSæOu~êX{bÙ¸¸ã›f§Yª9®`5›–Ý騿lÙ4¯¼éc"ò?>ø>»lt:–e~èã"rûuï6ÍVÛ2LKDœXivš"ž¼)—íàb–ÕåfÕn™'šò|ò‰–Ùn™c 쉕•Õg,X¸¨ªm…¹0[)Ùí–Ñ®wî8ô¨ˆ\¶î̯¼}kg¾@Gäª[os^úíþ«X¦eÛb™H–JÔ2V[µ3–Ÿ&µ¬ä¬¿IDATê¡ßœü÷_¼i·Zf³Õ:r¼ýð/›ËWTÎÿÓÏ8c±[¾T.ý§·\æ<þý½ôE/zÉóŸÿÂ+Ve»æ‰|õï¿,"oyóçØ† ù†‚Âa§Çh°m1 CĶmCD Ã1æþÆÍ¶%5‘Ž˜å¹ˆ¹ãУ—­;ó–7¿Éy:ý÷_sÂFDZfÙ³,Ò¶D¤T*‰!–i†ˆ“7ΣRÉ1œS Æ›öò±±êâ±æøxûX{|QµÙj·Z­F³Õh¶êõæÃ>õôÓõ‹/Y¿té¸bØR*—æšò­Ý³³³_ûÆß^÷'W}îÓ_9}õ³tm2ùÙÏ~úóŸÝsõ5Û¥)–¡IDATœ§F©4V.-]8~¢ÅÞÙ£' |¯†-ö|¸ç‰ˆtÚmîHųôèû¶ùñOŠ9o¸rúë·»aóèû¶‰ˆiØfÓ¶;©”˶a‹m— Cœ¼)F©d”+ecnö²§lËêüöÉÆÓ³Ñh×g›ÍV«ÙlÕ­z£Q¯7gÍûïjÕê…nÚà´´R)jøøØk^óú¿ùêmßùÎíï½ö}-ÛÒ³ÁþüÃ&"ïÿ“ÿR·L¹êmÓ㥲ˆT=mCVè‡Fß*FÄüŸ³!b»A07Í4Å(ÙvIÄ‘G®¿þ¬O}Jæ#Ç ›G®¿þTu–%¦)"•ªÓûh nIDAT—’ÈÜø¦$ããcžñ“Q•vea­.†R©–/©ž}Ίv»Ýl9ÿZ­V»Ùj—Ëåj¥,b‹åÊ©ÓÛÊ•òÄòå"òÄ“GÊ%£l”_û›EäÆ?Ýyß}ÿúÞ÷Þ "?úÑ®~ä&gâEmqftŠ]þê?üî?}óïºîu¯{³3]QØ­Óy*"—]±ùÛßÙí>ýöwv—Kå` >zø®»¾ÿÕ¿»íòWÿá[ßúŽ¥K—õòn$ú¢âã=NçoϿۆØîpGDÚ–]³Û¦çàË¡ëß»îSŸ7l]ÿ^o…†Ýi[¶ˆT*%[DÄ(•J27¾)•*•²[»ˆ]’‚%£IDATÒ7žËjX–eÙ–e–ͱfµf™ŽeY¦XVÅ´ž²íJeîxP¥|j Q.WfgOŠÈŽ\ Ã=Ózý™ëÎ?û¼š”îþÙÝýÈMŸýï·ŽU*Ó×¾mÉ‚E¿ÿ’ ÜÙ·_{Ãe—^¾ýý×®:}妋_±{÷>ú‘›>ñŸŸX´húÚ·U cÓůp »uþÓwüêË/‘;¾µ[,qŸÖ,Ùõ“k¸õ¯>÷ÓŸþó7¾ö½¯Ýþ7G{lÅò•šFa…a0¼É#À0Dl± 1ÄÞØâ„1—@VÇ6žù÷îÙ\¶îÌ›ÿà ï«Vg®p©RÃ6Êîñ›²! q™IDATågîq²¥ý’Ç~ýýÇš'íF³9ÛhÖë­z£1[oÎ6³õf½Ñ¨7ZµZéÊMïp^ÕÚ©ÓÕÌNó¿ñw/{ÙEÿñE/)W+•ù¡Ïú© åc†È÷ïøŽˆ¬öTyÁ˜ˆ|÷{ß|Ù› Ob=ï÷^ "?üáÿºtË+÷üèN9ãyå5w¢¨³R:õU¬²hÜ{"Dh +W®‘§ç5×Y­ŽQ)%v»%ÁWßQ`8#À³ó̉ÃpÞyCD:í¶T«UÓ[,£$"×~÷ÛnØÈü޵Ï]þZ)Ù–Ò±¥Ón‹H­VurÊ œŠó¨V­ØbÎÝ 1Mû[afIDAT§g}é‹/0Ûf­Zñs¦;…ÝjE$´pp)®ÐV¯ZùÁìxÕ+_}ݾú'?ùÑÇ>òI_SÑ[kð­b¶-ÎhÃÃÙ­æ<[D,˰,˶mÃ0®¿ó{nØ<8ýNçÿsnù’ÌGΧ.}•mÛ¦9wt¦Z«:çZ‹Õ‘¹ýi%)W*ÆÜ"1l霹ØlÙëV.ÚwäøGÝh͹ÝhÍV£Ùj5;/}ñúK·<§Z«8õŽÕNuñ+ÏŠ¼=hm¬*"W^ùæ={~¸ÿÀ¾…GÇEäòW¾vlAÍyÉñÀƒÿ."_ôò±µä£÷$IDAT·½mëž=?ü×{~ÆÚÕ·Üò…7¼áM›6mÖ)"›7_²{÷]Þ)ŽÐþú¯¿¼nݤS•Õ1›³‰Ó'R½Y0Ô ï ǘûž1—ŽU1Ä–òΟîrÃæo—û•óo×ù·~QDî8ôè•çLÝô’KLsîÎØ\@Øí–)óã£Zó^©Ó®­®Úus™È¥R©büŸ™­7êf½Ñj4[Ífçe/[?}ÕE“ëVºÇ˜Æ<]üØXäu?—^þòW|è¿}ä=Û¦E䓟øÌy럳ä´Åî\Ÿúì_~ç»ßüó}ìÏý‹&]xá¦ÏöK·ÞzËÝ÷üøMõGß,IDATW¾eò¬õ¶i/.nÛ¶vï¾ë²+6ßÿCÞ…†Öpá…›Þð†×ŠÈµ×^wɯ(•JŠf#{öGÛQà;úÔƒ¹¿ñŽ-¶eßôâ¹/ú÷_õv_÷_õöç|åV¹éÅ›;–mÎ÷ ccUçijÝçþ7ïÿ;.^äù­köìoO=xìø±æ“'foûæ¿|ì‰V§½~êM›Î}å+ž³æŒeó§5ˆˆ16V1öýâˆl8]p‚/=}üäo=""ÏZ»jáâ"röÆI¹ã[»'–-9~ôÄê3W,žX䮟lßó÷lß”å+N[¾â´ÐFŸùìÕg>{µwJ­V]ºlI×:kµªw¢÷q°_aäMñÍýÆyhØNn¶Ó·Ÿlš"¥b•ʧ. –eÕ­’4M©Õ*NDxÏ0œ£/Îùo†Ìzm‹ÌŸ°æ¶êÔA¤¹Ña‹-¶aÌ\i•ÕIDATŸ/0·­GÞ£ALôC£€Aì(p¯dãýæüQyìñÖ«jm1¤ó7Šss‰ÈX­êÄI©,âäM¥b,\4>÷óž¹Ýc2Ÿί€æšaÏJš?ŸAİŸ‘FöÜEßÒ­ö“¿=ò/wß/"Õ »¶MW4x›‹Ï°mÏ™ï†áìæ²Å0döº~ú£=žøç"óèìu7V«e± ÛS×O›8mye`]¼dÓóón@Däu¯|Á?Ê ?ýQwŠóSÐSÇú#Ì^wãë^ù÷ øÄió÷“«U}ä‘~¶0”^µùwdó_¥˜±ÑlºÉrúŠUâÞÿfïƒg¼ÈIDATÕ8¼.ðæÍÃ=xàÀosm €¦¦V^ð²çÊÜùÕÊÏþ‹~àê¼[(š}ø ï|WED¸"2@ò yмè@Þt o:ô%o&§ÖNN­íGÍ€!•&oœ8‰J”É©µ>xàpo ó×ú0,Òä“%Ù&JÒ¥†K¯·™ñŽ6Ü$p&:OÝîÓƒ»ÿ»/yg Îå­Ó™7´æÐ–O0"óæÎ]»‚/ݲ%81ع‡v÷Þœp'ú¦(jðÅFhÍ]c&t¥Y™žÞzè`ø Tã›éé­¾)Qµ$gÀ‘ÕAß²‚§¥R-IDATkÈÊ-·Ü¦xµËþ´L&)ߨ%ÚsY€þ÷7œÌ"ÍùN'çP¼ï¤€˜õ{çòMñøIQ3 /iòÆÛ¿ûzÅSßY¡âŽS3 _ߟä @ò yмè@ÞtèõzèWuœâš`ˆ¼÷Ý»'ï&73³#ï&y3(¶mß™w„²ón@Apüfm¾ä¥y72FÞt oQ¶—}ó^ü4xÁìø—ÐÖ±í—X¼«ƒÅeÕÈÐzbVÞËçý“øøï²Ð¾;C ÷rîÐû™fR[ÒW£ÆçÛFIDATŠu½#¸oÞà«}úÀ„6Lݪ¨½´Á{+ôL*tgRspÝ‹ÞÓ][,x‰÷^š§hs¢š5´ ™/@ÌFа†~ })êÕùúÙ§q?Ò«¯ÆY„ºLðæñƒ f«­Ù…¡uÚ€ô)Carj­óÏ7Å÷Ø-µÓ,ªëÖæ}Õ†`=Á§Š5R¼¬!ØZw•}uFm„àÝ’¢n«n[pûD½;QS‚o\hµ¾ÿ}më:*Ssè«ö­ŠÚÔ+ºU½$ðöô€ †„ú¶C’ðï¤k q»Ü¿Õ8 Hz¯¼8ëÕ¿áuèºû6`‚IDAT¦ËD5C½Ic6>tƬ¹ë[µw¥¼!ÑûØuãÞºV®þz¡˜‹¤é«Ìò&Î'÷R~$Õÿ Ü¡5X&øXÝß`%éA‹`ùÐzB?ÆêoÇqÚ¿‘ж…–ŒQÞ†%jŒ:–R7# `2>~“î/ƒ©—ž®ë÷ʤ͘L~p¸Çeù&¦®gÐzÌAkBTâ÷ÑJ²Œß„~±u‘Fzd¾SWg‡FL¡C“Ô5¨ë‰ú']…^:Át똈‡ñG<ú{ö¨æ9Ãh矞%¢w‰Ç7#Î~öð}OäÛGÜÍîÝ[Õu#Gí¹òÕ ^¢ºXTIܤ²IDATEýŠòQ‡â4ë÷nÑý+ZëN – msè›(ñÖ+*¹} èZsè«Á?jõßxT3âoöD}zœkhq–µAb¶ ‰¤ÙŸú!>íZ Q&§Öî¾ënçqèß@Ôã¨)AŠj£þêOã´!u›Õ»õziIðˆNh±¤k³*õ,qŽšDMŒÿÆ%*£^JÒò]?N¡Q­ž7æç*æÊ"s\_ y3ˆÜÁMW]÷0Ä,9hzßÖ¿¥èÙ’Ãø¼¯Š-5~3ffvpÍsÅFÞäozzkÞM€¾#oòÇ}jŒŽßt o:7È€œ/¿;wÜ'7ŸIDATíÊ» T¦§·r^OïÈ›pß½{òn€p33;ònBA7ƒbÛöy7@(~‹ Žßt o: DÞè¹»QKê[0 uãCâ¼IÚs uO7ÔoDV@¾b|ƒ|q¥wdp~Z×»í†Þ ¶ëýw£ „–‰SO×–‡Þ}Y}çæÐBoŠœ”·æ`ÃÔ[#jÝ}u›¬²’A޻®·ŠR”q_ê:%xG÷Ð~Y.C-ÍøÆ{0ÀwœY‡ |‡¦Ý—‚·½‚ÕÆ)¬VQzvß”®Ì6 RTgu G‰ó&Øv=; ª³V?VT,£è ]vœÂ¡í‰ÓHõ¢Õ2ÙbŠöøøN7è¥åe¸¯×Ù§á sÃ7Ä ‹á˘™ÙÁ5Ïy“¿éé­y7ú޼É÷©0 ¸^'@ò yмèÀùù»s×®¼›³éé­œ4y3î»wOÞMÈÍÌÌŽ¼›@òfPlÛ¾3ï&ä…º#á±+UIDATã7È€‘7znÓÂÍ` G‰ó&i¯]˜^>tEú·v“Sk}ª4ã|¸ºÞ-CÞ[GsiÅAÞozæ›zKæÐ2]+‰*§ž`³;.‡ÎìñCK*fm-É`de7Qýr°€KQÆ}©ë_$ˆ2$$,x¼i3B_ ½—˜qZî>N4/ ¦,Ç7Þ)½÷’é]$šËÛHߌnV×%õÚÅŸ‹ýiЧ׼  ûÐz©6¦ÔKŒ9c&k#¨_çCçÞ§>³+ôðŒOºµãd3£,ÍøÆÛ#{4_Ï¡oÝõøD°Ú8e‚ÕÆ©.KysIDAT'N{\¡Å2?ÜÂñÅ“8o‚Ý_׳ºB+ª –QôÎQýu×f‡.4j®D­ƒ˜P0Ãýû0,†;oˆÃ7…13³ƒËò(6ò&ÓÓ[ónôy“?n¥ ` Äý…GÞt o:78_ wîÚ•w¨LOo弞ޑ7á¾{÷äÝáffväÝ„‚ oŶí;ón€Pü;¿è@Þtˆ¼Ñs#2ÅRŠt'´"­ €"I|ü&ê–—Y•(y5Þw;íÐljjs§¾3ipÆ¨Æø¦w½gD¢òÁW£Ê+îÅ:»Èó}¡IDATºÅâ|SÔ£Œó ®÷È 0E¢‚7{U‡e¢òÁWÕå7ßs »!¡ԨŅ6€ŒBe71¿ñ©¿9&úÚúå´k=Š–w]Eåy €‚-I=»zzËð¨uG #‚³GU®(Ÿá¦öEET™¬@2ÉÅ7>_—¢L°s‰šâûj)1¾FµA$î׊Ïmyðÿ¤«éíУfZÍP©÷éeµÅB¿¾(JÆ,¬®'é>äL– L–ãï”ÞÿÒÒ÷îñh¹zöà«yu(‰V3˜%Ym¥˜o´¯XÒúÕÄ©S=<ÊäÝIúaö‹"rW¯yüf­Ø‡ÖKµC†äÄIDAT1õòçÝu¡ƒÓwôØ’^fO:ÈÓ0t”yå¡~û_i?zŸ`åý[Šw/™â`C_Çs½‹sŽ@œJºÎ˜b—W×ò©÷&iÆ7ÞÝÓ¡“ÝWÅsüÀ·GE½;Îaä`™`µŠzÔ³û¦øÖ4ß4M´šÁ£÷¡+¢Xµà±1…Ði¾(Ê«7²¢å]ÃØ·#1æ;è«A½åã¬0ÊçMh/¨@pbècEµÁ2êN*¸ôø…Õôì) .(~Kºn|õì=Öœè­3¥—OºŽ©71„îßßðE†Åpç 1“ 6# †;o cff×<PläMþ¦™A¹ÎIDAT§·æÝè;ò&ܧÀ(ˆû ¼è@Þt o:p¾@þîܵ+ï&P™žÞÊy=½#oÂ}÷îÉ» ÂÍÌìÈ» AÞ ŠmÛwæÝ¡ø-v68~мèÐ÷¼áöSÚ°© ²ÄyC§6àxƒ &ö§tÈ o&§Ö:ÿS$ì{·¯XÔ·˜bnɨe —ø«|ì–ÔÓTˆ©×ó¡}wªwnÞz›zßÄàŒŠ¥(á>îZÉp ®`ŠÍƒCÇïo%"´|Å|SÔw¹/†,†šŽ¼‰“)ḛ̂¶ÁçÒåÛHAÓùNäÄ)㯾Ó3IDATî;ŠQ¡ÕÒ#À I3¾q{óƒ{ƒÄÞ)îco„D‹£—y‡…b«ºÓCcÕ^Ô-`H%Λ`/¦ž¢8¬sÆ®ãÔÎÈ&ÄÐW½ŽoÔ_C‹u¢þ ©˜Ú†aW/C‰ýNåB±ÿ-iØøªòÆmü•MºeR,A:ö§Åüë = ˜ÿÕ`ý£)Çè9< ÝCåŸùvîEí. ós˜4lbâ #oR|•V|¥ í4ù#c·RÌqmV׿’IDAT  4ýþ&x^PLIçŠX{DÄô»võ£r4=½õÐÁGòn .Íï=ï»wOæí—™™y7#!åõÓ¶mß™m;dbb¢4±te¹\Yþ‰xQ IDAT'~%böµI€CÇõ:èT.W“­VÝ4;–eÙ¶eÛ¶e™"bÛ¶ó¿eu–.]¹xñ²fs¶ºp,ï&c$7@µZõZmܲ,Ë2mÛvbFÄžgY–yâÄÑÅ‹—µZu!o ÅàžŸ–îâÍ^:E&§Öz犹”Ô—©Ö?cüª¸öv¾æG6ö|Ø8ãL±æãGD¤Ù¬çØNŒ” òÆé1ûÝ¿èé¿ÔKéúªs¡ë®%Cgɤ…ƒ þº÷ø±„¸XÎÈÆ²LÛ¶Ü€±,ÓÍ!1 CDÚífÎmÅÈÈ oFç>Íñ×q¶F”˜ë>:›\X–éæŠãö:ùs:N%k›“IDAT Ä(ê×ñïWH·O ÞŸF1%ªNß"ªÃг, »×µb)nᨥ»óúªU´¶ëâµ0βB§øV0¸e¼ë®Þñ×=È·Ê]×ηÁƒ[LÑH ¼S¡•ôx[¦\Í "<°WDöíÛ·aÃzÛ¶ Ãp£È²¬›ˆ‘ÒÇóBÿŒMQW|ìR×Z,¸”DK ΫhLü•JÚÂ8!ýxêþTQIÌí:Kœ7QýÕAñ’º%Š6tmÿ€pN0 Ã0Œ½{áNß·oÿúõSÞqm“7ÐDëùiŠï×úõÒ}$7õj¦ha¢eù ‡|å¯öÞ DHhºÎØ#uìªIDAT†‚{Þ³3²‘³Ï>ûᇑýû8‘ãM@­y£þª®YÒ~Ó;£lœ‰SS“"255Én4è—ÁøÆù;ìÚy;wo·5%jöƒgL±,oIwŠw)êõU—Q7&“b1W<ô¥¨)™S´§ëÇ&8oÔ{šhM½Ÿßg)QûÜüî2kãÆN´¸ç@OMM:gH³? šâá<•IDATe7Q_ðqœýiê®¶k±˜ËRTZƒÛÁÅYt°dÌC1i+Z¨˜+ô¥à”˜Hâo¥D‡[’n¨¥t]Ó8E;‡‚m[Þ¾€q~ø™G»0º¸ž P@Îï: Ãv~Ôéž>àŽl<ñcäÚRŒòÏ0¼_çáuÚi«NœxÒ 1ÜóÜk LLœ."µOƒ&ä P4‡ï]»ö¼%K–w-ùÐC?_³ælîG=2ΛáúM\!ñ`Ù²Õ{÷ÞsòäqÓìt:í°ã4F©T^¸pñÆ/¬×ŸÎ¡‰IÙœŸ6,Ü 4uÚ€«7XFuåÏ]-â\_ \2Œ¾*@}IDATR©\Ã(9;Ø £äîj;ö”Y]@ä@‡Á½AQ6FS6ûÓ¼?ƒèzEß\ê¡Ñr ø~~õs`oK‚ź^±Qý»ußZ„Î¥ØV]—5 ä+›¼ ý5C×+H ‡N‰Zœï¢Š¡ RLQ7#þU#P,Tqu™DK þŽ’=xŽóÓúzÉÔ RKÔAw½¬d.=þ°]@ÁéÈ›ø]mWÌë[|è Í{ÅïÓ¼ZùÒz¾@¶WÌ|A½S€É±÷w[ň@޲¹~Zº+HJô{iFTKMU̬ö`ÄÅå™#›¨§qÚ¯nƒºIQÍFÑM*IDAT€|e|¾@艊þ®ëu%pð#XmÔ‚â7F=éÚÈOÕm OÒ&ÅœÚp=›ˆ@å™71{Õ~w¾ƒÓ¹NK s\_ yмè@Þt o:7È€ä @ò yмè@Þt o:7È€ä @ò yмè@Þt o:7È€ä @ò yмè@Þt o:7È€ä @ò yмè@Þt o:7$\ÚIDATÈ€ä @ò yмè@Þt o:7È€ä @ò yмè@Þt o:7È€ä @ò C%ïÈÒ‚±úÄÄâr¹³üX­Þ×ö.ò(šr¹Úhœlµê¦Ù±,˶-Û¶-ËÛ¶ÿ-«³téÊÅ‹—5›³Õ…cy7#¼ ¨Õª×jã–eY–iÛ¶3"ö<˲Ì'Ž.^¼¬Õª y-8~ÐüÈÆž'cœ)Ö|üˆˆ4›ìOƒ&Œo€òŒlN¥‹3Å-c†ˆ´ÛÍ|šˆÑCº[bIDATÞdY¦eY¾‰Î@Ç7±ÓéèjFûÓ€¢²Eì½{á<étÚNØìÛ·_æO‘`,}BÞäì:sÂæöšfÇ0 Û¶°qþwØ6yMÈ €œá˹çžç<}øá‡EdÿþÎÓõë§<'­š7@¹g¦sιÎ'rDdýú)·”ç ïÈ lwG™9"255éþ'Ÿva„‘7@¹¡âüÛ¸q£ˆlذÞ9Ú9IšýiÐŒó¡b²mËû…rÆ Þ1 CèGÞä\_À0ìùÍÜeÓÜ‘g|cäÚRŒò( ÓN[uâÄ“N؈ˆˆážàÄŒ6­ÖIDATe™§‹H­ÆÅÓ  yÍáÃ{×®=oÉ’å]K>ôÐÏ׬9[ÄÔÐ*€¼ŠfÙ²Õ{÷ÞsòäqÓìt:í°ã4F©T^¸pñÆ/¬×ŸÎ¡‰IiòfffçìƒÊ´:O¯9cÈš®E;­§ªe MDRäÍôôÖ~´Pl‰óæÐÁGúÑ@±ñ{O€ä @ò yмè :?í–[nÓÖ@±Eæ ¿³d(2oø C¿è@Þt o:7È€ä @ò Cš¼™œZëþ˼ANý¡Ã+Íý¤EäàÃ΃ÉÍËSýIDAT©µîã~èkåm²ÙŸæŒBܱˆoô: – Ö ¨3ªÀ`ŠßܹkWpâ¥[¶D•w:ÞûØ7%´Œw¢oX,ßu\Ú~@_MOoºšjZð’n-î`"*!º GÔ5Ëû"Ç7;×ÍÔwèrü&*¦z?¬’´_ywHU×€’ÿùÐI»xË{“†ã70ÈRžŸ¦à\q;|SBËkðî¬ó•WÌ@iò&4!è:Kð°PŠEGþûÓ£@GÞ0ò0¾è@Þt o:7Ÿ½nò¬~´=ºaûÕ–”´=IDATù‰/äÝ C)]’ô2.i~süç› –Û¿~—ó€·@R=t F¢Ò)¯/pôX²Å@Þ©õµáø @òfÔqSzd7¡·ïÌbj¾Û¡æØÈæúÐÁ›uàÕ—ýiÎWi÷ µoô: – Ö |aÏBè`4tÃöuØ `Ôdÿ‡;ÐñŽxÜǾ)¡e¼3¥ãnÛЩŒ†¾)Z6y¼ûYÒî)ø%:´†Ð‰Ä¯0²¡ŒßäXâðZÔ…ySdhà·ŽÓ 2¸‰/“ÍÅ@@ïúuüÆåôwîcçoJh™` dLï¼›Z=]ýKÖ IDAT¦@RäMhB$*ÐuïS7IÅܶqÞ&Hmàö§ )ÍøÆ½˜h:_úÒ—ïܵ+¯Ù‹­Ç·À(KÚ\ºeK¢ò‰óæ†íW'zðÖH-EÒ÷¼á¦^ëÐÁG¸€tRt }¿ßZÒ@'Þ©õ»á~ÒÅÁø@jÆ7œŸмè@Þt o:7È€ä @ò yмè@Þt o:p}èBáÝׇF\\@j\Pä @ò yмè@Þt o:7È€ä ‚{bâIDAT@ò yÐëC ï€Ô¸>4ââúÐRãúЀ‚ o:7È€ä @ò yмè@Þt o:7È€\ºPxw¤Æõ¡ׇׇyмè@Þt o:7È€ä @ò yмè@ÞtàúЅ» 5®¸¸>4€Ô¸>4  È€ä @ò yмè@Þt o:7È€ä @ò ׇ.Þ©q}hÄïäŒIDATÅõ¡¤Æõ¡AÞt o:7È€ä @ò yмè@Þt o:7¸>t¡ðîHëC#.® 5® (ò yмè@Þt o:7È€ä @ò yмèÀõ¡ …w@jýî@ßt o:7È€ä @ò ƒê|è[n¹M[;Å™7ÓÓ[u¶Pl‘yÃ/âø @ò yмè@Þt o:7È€¨¿ìIDATä @ò yмè@Þt o:7T÷÷€ÌMN­Í» }wðÀaïÓu“gåÕ=nØ~õ¶í;»#oèfÛvÞMè—¶_ýñO~18ýø±ÃÁ‰Åpû×ïŠY’¼ƒBö¿êž÷è1C[Ky ô¿£†ó:7È]:Oäø €¢qûP÷¼äÉ©µ¡‡‹7†qÈ…¢Ž–¡›!m¹‹¼P¾NùàÃ…Ù„¶Ü7’ E•Ñ¿)È#axÃF!¥¾)¾µÎ7}ÉV)Žöçx=!òÀH~Ùv¾ÁJ̹rÜ+Nÿ>þIDATœ  8œPqŸ†ÎÉ£]½êGËõo Æ7 ÅÛ5¿Ëï(Ç9ŽB¾­¡Þ8ýFÞ(šÐ˜Q¼:,Ôë%«©(Zgÿ°?  yмè@Þtà|9ˆby@·¶_wt#_…¼ ßÇ?ùż› Õæk(ò€VÃûó—Ô¶mß™wç t o:7È€ä @ò yмè@Þt o:Ì]ÏfË¥›>ôá/äÛ@ñl¹t“ó`.oÞøÆ-o|ã–üÚ(8ãškväÝ@ñýžÂWÊE:%IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/properties.png000066400000000000000000000214051203611042400313510ustar00rootroot00000000000000‰PNG  IHDR%`ëržþ pHYsÄÄ•+tIMEÕ  5¹}ÛtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝ{´u}÷ñïìÛ9ÉÉ…Ü#!最VJ¥µ´åz$\D+U@ºZ!Å$¥‰ñ¡ÏÒåJÂÅ.ð©²x¼¡¦û´µR­ÈSŒ$„TÀ§Å¶”ÔŠHC!!7ÎÙ×™ésÎd2·={öìßì=ûýZYY³gÿæ·3sÎï³3sf4Ó4Åá¶Û6 mûÂîv¾Ôì¼±’fùȲ™3gÍ›7?…¦2áСƒÇ{iÏ>q¤ÎdÞÜvÛ¦_?ûížsÖYo‘|>ŸbC=M×uÙ½ûgÿ´ëÙî?¬ÈÑLÓ´Âfåeç¾åŒS'ÆËµZ}¼¬OL”Ón0 ìtùöIDAT÷LŸ>mhZ¾T*Nšö“¾ý{?°"§ "##K­°yåªÔjµcÇÆÓn0 WÍš5T*•æÏ|Ë§Šœ{ìøÑÖ¬Ù¸òÒK/^qöÁƒÇ_}õðøãår=í¦ºÂ‹ö/ÿû­­.õÒµ«ß~Æò¡C Ι?æ“;ŸÛ¾cGADŸ:÷àÁcûöêáà k“\þ÷[ÿ`ÍUæð¢ÆÒy2[ƼÆLqOä49*…ý‡´½¿ü›·îý£5ó†æW+5sñ©sE¤`U:>>^.×Ki¬ -øìƒW¿ïü‰£ù÷}zµe‘üýBD®~e륱IDATßù|åÁÒ†Íår}||r$S‘Ò@éèá פ\ô‰ŠY3‹ƒƒÅGê³Íb#'¦¦uÓ5Qš¨UŒ†Y¯T´FU¦.u>z¤>kΠØã›j£š+j)®  U«†Ùh˜úD^ׯ»û“"ò>öa3¯5†¡iöÄîù”ˆ<¼ö6½R­Õ M7DÄŠ•j£*âÈ›|Þô~Ìl­8W/š5ýxUþõ…×ÕôzM˜fÎZPX´xÚô¡¢²¤B¯5$gÖkZ½Üض\¹lÉWoZݘ*йñ¡­Ö[¯}ôŠ¡¦)†.žd)}Æ"£´xî)R*îûåøþüØluFÂIDAT«U³VÓ«µÚÁcõV;¿pæ¯Î[¼x†s‘?ü묉ß:çüsÎ9ïì³sþü… ®v«¾öw_‘ß¿þRlC†ù|CAæpУ?˜¦hš&bš¦&"šfŠh“¿ãzÝ’HCôüdÄlÛwàÊeK¶\ÿ~ëåØß}Ý ©5ªy]ô¼HÝ‘\.'šº¡i"VÞXS¹œ&¢Y— V͹ÅÕÁÁú‘úàP±Z«×jµJµV©ÖÊåê‹/}ãò%—.Ÿ={P4ÑL1§~0·=²sbbâëßü›µ|ãç?óÕy‹Þ¤h‹‰<ûì3?|ö·®Yg½Ôr¹|nöôÁã5®0¿pKIDATðN=Qà{EŸÐL1§ÒÀ¾îLD¤Q¯kfA šè¹^·äS÷‹9×\7ö‡í°9ðáu"¢k¦^5ÍFCD ù¼©™bš9M+orš–ËiùB^›ü sÎQÓ0¯½^y£ W*õòDµZ«U«µr¥V®TÊåêD¥º{÷Ñ…‹¦_4zúdKµ?—ÚàÀ»ßý¾¿þÚÖG}øŽÛ?\3 5ìÏ?ñqùÈÿ²¡‹È7Œ æò"R,äÔ4 ¯Ðõ¾Uô‰©_gM&ÇÚ‰yº.ZÎ4s"ºˆ¼|ç§=ð€LEŽ6/ßyç‰ê Ct]D E«Îk9‘ÉñMNã'‡ŸîºIDAT­(õÂôRY4ѤPÌ͘Y<ã­óëõzµfý«Õjõj­žÏç‹…¼ˆyRãDò…ü¬¹sEäÐëó9-¯åßó»+Dä®?ÝôüóÿvÇDäÉ'·ßwïÝÖÌ‹/^i-h»ê]¿÷Ø?~ëæ[Ö¾÷½×[óC ÛuZ/EäÊ«W|ûÑöËo?º3ŸË{k8p`ÿŽßýÚßn½ê]¿÷|pöì9íì­¾D_”}ìã~`uþæÔÞÖÄ´‡;"R7Ì’Y×'_öÝyDz>+"vØì»óg…šÙ¨¦ˆ 9SDDËår29¾Éå …¼]»ˆ™“Ü7‰aT Ã0LÃÐóúÀ4½X2IÇ&âIDATôFÃ0 ] £ GM³Pð¹Ò Ÿ/LLŒ‹È%_&šf_i½|ɲ3Ïx[IrO?ûô}÷Þý¹ÿýÐ@¡0vû 3§ ýÖyÚ‹¯¿}Õ«®Zÿ‘ÛÎ[0zÉå;w~ï¾{ïþôÿú¬¡¡±Ûo(hÚè%—Û…í:ÿñ±ï¿ëª EdÛ#;ÅûeÉíO=á­á¡¿üü3ÏüÓ7¿þ¯?ü×_yeþÜŠFa™¡1Âéìä> i"¦˜šhb oL±BH›L £aj'ÿ¾;G6W.[òàï^í|×hLÎò"¢™ZÞ>“×$ò'Sêç½ò‹ï¾R=^©WªÕ‰Jµ\®•+•‰`U°·IDATru¢R™(WË•J¹R+•r×~ð䱈ˆÞ¨þÃ7ÿö‚ .þsÎË …ÂTÞŒœžŸ6 ‰|wÛ£"²üÍ#ùi"òØw¾uÁ…£ZþDÞþï‘'žø«V^±ëÉÇEäÌ·¼-?­dÏÔtÛ%¥Â°«éÛÙiML›9­X*j¹“z¥R± "££—ìÚõ„ýòüs/Ôëº5í,fÍ· ÛÕŠˆo#q]ÜIDATaï§Ø|kX´pÁÇ>ºñW¼kíŸÜúÔSO~òÞû]MEl­>À·Š~ ™¦X£ M4ë°šõBL1 Í0 Ó45M»óñïØaóÂØÍÖÿoÝòe™ŠœV½Ó4M]Ÿ<;S,­k­ÅhÈäñ´œä mò‘h¦4–ÌÐkæ²C?=xìÐaë0Zuò0ZµV©ÖjÕÆùç._µò¬b©0Ùñ8ÆÝ N |ÇälûÀ@à}?­·.»ìò{þìÞ­‘û?ýÙ·-?kæ)3ì¥øÜ_<úØ·þüžO¾ã×~{hÖÐE~ás_~è¡-Oÿàûï¿î÷‡O[nêÆàôAïÇ­[·açÎW^½b÷îŸ8?Ô·†‹.½æš÷ˆÈí·¯½ôÂËs¹\H³á†[v¿IDATƒ#ûý€áM?p]}bbòw¼aŠi˜wŸ;ùE÷7¹*Ø}ãMg}õ!¹ûÜ ÃÔ§ú†¢uá^¯‰õü›|äƒÓg 9þÖgòúæ‰×Æï=rìHõõã[¿õÏ{_9TkÔ—Ÿ¾ptôW®¸ü¬SÏ™º¬AD4ÑÌRé§?Ú'"§Ÿ¹Ì»FÞ·Þ86þËEäMKNŸ1MDÎx˰ˆl{dç¬93>¾hÉü³†¬ÂåñÊÑÃÇÇOÌš3sî‚ÙÖ5oÞ:kÕÚþ—~aÏtðÖ`ž3öì¹3¹cikè‰úß*ú…ýûl:·¿wõu¿2|ªQ¯çr9-_hzÁ$ú»IDATÎÁ0ÅÔ†aäŠÅïýùeÍ4W¾kš5–0EÓdbí]Ó?sß+¯¶üç" ýðÄÚ»ŠÅ¼˜š©É‰û§Í:en¡kN]œ7zvÚMˆˆ¼÷ŠwüƒÜ5ý3÷Ùs¬?=q®?ÀÄÚ»Þ{Å;ì“â³N™zžô@©xàå—;Ùf@OzçŠ_•cÁJµj'˼ù Å~þͽðjRÀéBgÞ¼ø“öìy-Õö2hddÁ…üšL]ŸVøáô±Þšv«YsÏ'¾xó-áŽÈÈû½^ÐIDAT€ ä @ò yP¼¨Ð‘¼Y:<²´5zTœ¼±â$(Q†G–îݳïžýí5Ì]§ï4 WÄÉ+K’M”V?Ð[Ú}ÌŒs´a'5Ózi°_îݳßþß~˹ˆw)gÖ²¾5û¶„|€n˜7oßî¹jåJïLoçîÛÝ;sžéšRƒ+6|kn3¾+HÊØØê}{ý86¾[íšTKK¢ 8’:Iãú,ï’²eËÖw›OK$`Zå»$Xs*«Ìÿý ³@—ˆs½€Õ‰G9ïº( býÎ¥\sœ'~bÔ HKjµz‹IDATœ¼qöïÞiWïòÒuÕ€ïD”ÂQj¤+ãÇÓ]‚¼¨@ÞT o*7È€ íÞ¯íã®n@— ¹'¢#oºÂóÏíJ» ümÞ¼1í&dyÓ-Ö­ß”vø2Ón@Fpþ¦­¸ôü´› #o*7Ý(ÙÛ¾9o~ê½avô[h«¿Ùv›Ÿ˜½»ƒ÷Ä%ÕHßzzb HËço\·…v=Zx–sgø>Ï4‘ÚZ}7¨XÓ'‚»–õ¾Û¡߆…·*¨@;mp> =‘ íéDjö®{ÈGxŸé.ž-æ½Å{;ÍkÚÚè zËÓS)“ØõÄLfÄxÀlU†IDAT«ï·ß·‚Þí’ï­ú1îDzu´Â(^ÆûðødÅÛStMéRz<­Kú”ž0<²Ôúçšãš¶‹4 êú½µ9_µÁ[÷eÈ…¼þ­ÓÙïšmïÓ’‚Þ6ïö Ú;As¼;ηZ×ÿ®¶5•F©Ù÷Ý{áÚÂWÐw«: DijÈ^hº|§‘,®‡îRÞì´Øq4­!Ê´ÍþýŒÒ€VŸ•e½:7¼ö]w×o™ f„oÒˆ÷Ý€knº+ƒ>Â^)çFhi?6]Áè?oM+÷Ý/!ÍàðŒ‰åM”ŸÃ84KÚéé|¿W¶Ó 5½€ïqŒUÙæVu[{B4MÜx{*|ïôÐöé9 Ÿ¿ñýbk#ÔH|;Ç®0è€F ¾C“Ø5„×ôcÜê*´ÓsÅ[Ç–ØnôúÃMáÍkgO‘+êµ<¾Ùpõ³«€ëÛ»¶Möfw­jº‘ƒŽ\¹jÿÄðbA%Cê)tš!J3œÚïíãÖÚs¼e|Ûì»%Úz%·«Mkö}×ûKþ;ÔŒè›=zÈI³×=Õ4B¶]V'Ä9žÖImlIDATtjïŦ Â×ðÈÒ;ž¶¦‚] h:hŽWHµ¾o…¿ŒÒ†Øm?¬×NK¼gt|‹µºv« _$ÊY“ ™Ñw\KeÂ?¥ÕòMœ|£:|Ùð}í[sÓv"A\Ÿ ³8ÄÒUÈ›ndnšjz¤+bÉnÓþѰÎ}Šš-qÀÑU:ÚÈnÞYˆˆ¼é ›7oäžç²¼IߨØê´›GÞ¤çÔè< yP¼¨@ÞTàzô=¾}{ÚMfll5×õ´¼é Ï?·+í&ð·yóÆ´›äM·X·~SÚMà‹¿ÅNço*7º"oÔIDAT‡­ÍOéé‡ÅõtãdCËyÓjÏÕÓ=]O7>º>YMéêŠñ ÒÅ=Û(ÀõiMŸ¶ëû|Ö¦Ïß *à[&J=M[îûôåð'7ûÖàûPäV9kö6,|k­»«No³½u@RÈoWØôQQ!eì·šÎñ>ÑÝ·_ ž ç 5>¼òö3Æ¥’ÛG<Éô@åDÖœ’ß8ç$Òçvz©Nœ·HꑚÎmh‡Gø†å4 €nÖnÞx¿D‡Ck§Úˆ¢bìP Æ6ìæÕéÜõ©é†>·Í6¸†JãÐÓâŒoœ'\ç™ÅsªÀujÚ~Ë{rÛÉ[m”2Þj‰ðmIDATCê _Ü5§i#“M‚ÕFYHQËyãí›^ÔY‡O‡Të-ÒA‡tÙQ û¶'J#Ã?:\"[,¤=® ×åí´‚ôöý:;4¼$®·ó†˜€^ÑÛy“›7oäžç²¼IߨØê´›GÞ¤çÔèܯ yP¼¨@ÞTàzô=¾}{ÚMHÙØØj.š2¼é Ï?·+í&¤fóæi7€ äM·X·~SÚMH è ôÎßT o*tEÞ¨yL ƒ€µœ7­öÚ™éå}W¤sk7<²Ôúסú@1®ˆªé3Ðä|t4qÙ¬øIDAT‘ ä÷¡g®9¾dö-Ó´’ 2Qêñ6Ûzâ²ï‚Þß·dÈâ¾­%9ô­ò&¨_ö°…”±ßj:Ç â<δˆ˜ ¾ïú.ÞNÌX-·§[ZºS’ãçœö{Éx§.ZZÊÙHׂvVy×%öÚE_Šãi²§Ý¼ñ BŽ¡µSmD±?1₉¬ô¡N]z_ûÊ.ßÓ3.ñÖŽ‹Íô³8ãgì<Óà}W§"œ}tÓóÞj£”ñV¥ž(í±ùKüt çodOËyãíþš^Ðtˆà;R­·LHïÔ_7m¶ï‡-ÕRk£ fdLoÿý ƒižIDATè½7Ä ôŠÞÎ›ÌØ¼y#·åmäMúÆÆV§Ýè8ò&}3¢¥òÞwƒÊ‡<‹ÏwñðJB>Î5'¼B Ÿq½@Ƶ™¾¦ Q”÷a¯áaÙRyï»áåC¾g¶C"ηd à+¼%æIDAT‰ø/ü›cK_}¿œ6­'¤åM×%¤ò´@Þ–Ä^<|äûÈð u #¼‹UR>ÁM튊 2I}I$oB¾ñ¹ ØBÊx;— 9®¯–á iPB‚$ÁãZÑÙ-÷þßêj:;ô ÅƒVÓWìczIm1߯/!%#¯§Õcȉ|.1IŽoœsÚÿM‹w޻ͳåá‹{ßM«Cii5½Y’ÔVЏ£]ÅZÝh¾_M¬:ÇG‰ìV˜]碈ÀÖnÞx¿Y‡Ck§ÚˆÚùõnú¡ÝÓw´Ù’vou§`,hPâ•@‚:u=tê¿¥è}¼•wîSœGÉBN6ttΠäIDAT<×¾(×D©¤é‚1y5-ûÈa«‹}"ÎøÆyxÚ÷d²ý®8Î¸Ž¨„ãŽrÙ[Æ[mH=á‹»æ¸Ö4Ý4mi5½gï}W$dÕ¼çÆBøžHs5 ¤|øFiyÓ0vHŒ¸]5„où(«ô³–óÆ·h©€w¦ïtHµÞ2á”÷Ó£?ñ æH‘÷ƒ¢·¤éÆ_¼Íš[ÚõQ洳⭮cìMG̾zûïoø" ½¢·ó†˜I›€½7™±yóFîy ÛÈ›ô­N» ÐqäMúxN-€~ÐÏ#dyP¼¨@ÞT o*„]Ÿ¶eËVûÙZIDATeíd[`ÞðG!€æ Hço*7È€ ä @ò yP¼¨'o†G–ÚÿoU¿ï4 wÅ|ÞšýÄûá‘¥öt't´r€2ÉO³F!öXÄ5úñyËxk©3¨@w ß<¾}»w檕+ƒÊÛçˆÇžvÍñ-ãœéÖxË7Wù¶ÐQcc«ƒn‡v<Í{ËN»{0”My‡#á5xË»"ǵ8÷ÅŸ*ÐäüMPLµZ¥Õ\åí!QPUÜoºJú×C·zÞÅYÞ™4œ¿€nóú´ÖÉ{Úšpͦì/IDATñ-ã­Áy°ÎU>dq@Š“7¾ ÑR¦‹xO Åø@÷Hÿx ¨ÈFÆ7È€ ä @ò BË×C/>­í@›6¬¿õ/>ýÅ´[ 'Åë@Z½Kœ¿¿9v„ëͺËÃߨaM°k´ªDk©tÌû >ÒÚÇ@v €Ø:Úpþ yÓï¸Ï)5ÈßÇw&ˆ16×ãPSl $shïÃ:pêÈñ4ë«´ý…Ú5úñyËxk¾°'Áw0ê»a;:lÐo’þÅè8G<ö´kŽoçLÆLñØÛÖwc†F}w Ä–LÞì³\€IDATxŸ~Öj÷äýí[ƒoŠ–D¯0² „ÏߤX¢pZ ³S$¨ë®‡ŽÒ 2¸‰.‘ÍÅ@@û:uþÆfõwö´5ášã[Æ[Ó>禟¾S U äoB´T é"Η nZqÛFÙM[×OdRœñ}3Ñx¾üå¯<¾}{Z‹g[›»@?kµYµreKå[Λ ëomu¨Á®[Œ¤ãyÃC½ºÖ¾½/ó4<ñÄè@:þ¼µV?*±wÄÖé„çIgã±)ßp}@ò yP¼¨@ÞT o*7È€ 䜛º;IDAT @ò yP¼¨Àý¡3…½ 6?4€Ø¸?4 #È€ ä @ò yP¼¨@ÞT o*7È€ ä @ò ÷‡Îö€Ø¸?4¢âþÐbãþЀŒ o*7È€ ä @ò yP¼¨@ÞT o*7È€ Ü:SØ;bãþЈŠûCˆûC2‚¼¨@ÞT o*7È€ ä @ò yP¼¨@ÞT o*pèLaï˜ä!–IDATˆûC#*î 6î Èò yP¼¨@ÞT o*7È€ ä @ò yP¼¨Àý¡3…½ 6?4€Ø¸?4 #È€ ä @ò yP¼¨@ÞT o*7È€ ä @ò ÷‡Îö€Ø¸?4¢âþÐbãþЀŒ o*7È€ ä @ò yP¼¨@ÞT o*7È€ Ü:SØ;bëtÂø yP¼¨@Þª>3 IDATT o*7®‡Þ²e«²v²-0oÆÆV«l Ûó†¿$ˆó7È€ ä @ò yP¼¨@ÞT o*7È€ ä @ò yP¼¨@ÞT{¾'$nxdiÚM踽{ö;_.>-­–¨±aý­ëÖojZŒ¼ šiši7¡S6¬¿õS÷É;ÿØ‘ýÞ™Ùðð7vD,IÞHA&ûßðž÷ðMYKºy ô¿ý†ë*7Èè_*/äü €¬±ûPûºäá‘¥¾Ó½Å™ ½¸ ä €LÓˆwIDAT –ž›m¹¼®Nyïžý™Ùø¶Ü5’ó•Q¿)È}¡wÃ&„7J]s\knú’7ЫbœíOñ~Bä €¾àý²ßë\ƒ•ˆK¥¸¸@vX¡b¿ô=“F»ÚÕ‰–«ßŒodгkö~—ïÝQŽ+röîÙ%„\[#|ãty k|c&äÝ^¾^°š!e|ëìާT o*7È€ \/ ÑBŒÌ o¨¶aý­i7A5òUÈê}êþ/¥Ý¥ú0_}‘7”êÝ?‰mÝúMi7¡+p½@ò yP¼¨@Þ<Â8ÌPIDATT o*7È€ ä @ò ÂäýlV®½ç_L·)€ìY¹jÔš˜Ì›k¯]yíµ+Ók ã´5k6¦Ý@öý7¼‘Ví×ûa°IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/quickdiff-preference.jpg000066400000000000000000001354141203611042400332400ustar00rootroot00000000000000ÿØÿàJFIF,,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀÕ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ì|kãfð„º|I§Cr.£c–eM›U çcg;«•OH¥“C¶`½H˜qÿißQdÔü<ŒÁU£”# ‘sÔ1Yצae¤yÐ¥½¥²ª©“pÎöËdç¶zc¿$úXl59ÒR”nýIæÕÝ—OÆ·Úåt;f(2@œg®;ÅQŽù—¢ÿ¿ëÿÆëƒÖìm-’Y ˜3° ÛÓ#žŸÒ½+ÅVo_xjx¬#šëPÓá°‡O²Íh­·ÎgF¡ƒ+p2ü‘ÀÇ*bÒåüYœå$ýÖR¤?ó/Åÿ—ÿÓ‡ÆÙüËñßåÿãu”ž ðÇÚ¼K!Ô/ÖÏBe‚SpD[åiÝ܉!ÚT}̳üƒŠÖµÓ´Äð\úo‡õK–¶ÔüKŸ¡1;Dð¯Ë*àw¸Ûò‚~n:X~‘üÈç©ÜƹüÀ"ÿ¿ËÿÆéÃãL‡þ`ßåÿãuVßÀþ½ñ…¶ƒm«Þ{qoq±gØ‘»ÞТ«LÇ<7CJðÇ„çÐä×/5;è´ß·Çb†_Ý8>Py’ä’NÕà9lš=Žù_âõ;›Cã<Ÿô‹þÿ/ÿ¥¤?ó‹þþ¯ÿªzg€ôôÐ-ã¼¾š]e¯’+ÄeHÐ@[cùE7ÀWp#žk.çÂÚe´þÒ÷]µþµok?Ú¼ÕCçIŒy[rØ÷ŒžxéB£†nÜ¿ŸõÐ\õ;øÉ!ÿ˜_÷õøÝ(øÅ!ÿ˜_÷õøÝe^øgÁkði¿ðMlSP{[µ“t›cÃo1"¡Ü»Oßplpü[¡'‡õh­¢Ën“Å »[•™[8u`‰ÇÁ^Ää‚)ƆNÜ¿˜:•S³d?ó‹þþ¯ÿ¥äÿ _÷õøÝyx§ŠÓêt{~,Ÿm>ç§‹²Ð/ûø¿ünœ>-Éÿ@H¿ïâÿñºó!O¾©G·âÃÛO¹écâÔ‡þ`±ßÅÿãtáñbCÿ0X¿ïâÿñºóAO}RoÅ‹ÛO¹é#â´Ÿô‹þþ/ÿ¥d?ó‹þû_þ7^p)âªQíø±ûi÷=|S“þ€ñßkÿÄRŠ2Ð/ûíøŠó±O¾©G·âÃÛO¹ècâ|Ÿô‹þû_þ"”|N“þ1ßkÿÄWŸ x£ê”{~,^Ú}Ï@$?ó ‹þú_þ"”|JÿÌ*/ûéøŠàE«K·æÚ}μxâCÿ0ø¿ñßþ"”xÚCÿ.ã¿üEr"ž(ú­.ߘ{i÷:ÑãIü¸EÿŽÿñ4£ÆRùq‹ò_þ&¹AO¾«K·æÚ}ΨxÂCÿ.1~KÿÄÒÉÿ>Q~KÿÄ×.)âªÒíù‡¶Ÿs¦-ÿË”_’ÿñ4£Å’Ïœ_’ÿñ5ÍŠp£êÔ»~aí§ÜéФÿŸ8¿ï•ÿâiGŠ$?òéýò¿üMs¢ž)}Z—oÌ=¼ûñ4‡þ]"ÿ¾Wÿ‰¥$ÿˬ_÷Êÿñ5€)â«Ríù‡·©ÜÞ#“þ}bÿ¾Wÿ‰¥!ÿË´_÷Âÿñ5†)â«Ríù‡·©ÜÛü‡þ]¢ÿ¾ÿ‰¥ôŸóïýð¿üMbŠx¥õj]¿0öÓîl rOù÷‹þø_þ&œ5©ü°‹þø_þ&²¿ùÆ»Ê(úíNÈ>­†Õ?ç×ÿ"/øÓ†©ÿÏ·þD_ñ®ÞŠ_]©ÙÕ qCAÔÿçÛÿ"/øÓ†…©Ï·þ>¿ã]}v§dVÇ QÿŸü}Æž4]Cþ}ÿñõÿ먣ëµ; ú´HhÚ‡üûÿãëþ4á£ßÿÏü}ƺº(úíNÈ>­—E÷üðÿÇ×üiÃI½ÿžøúÿtÔQõÚ}Z64«ßùãÿñ§ 2óþxÿãÃük¢¢®TìƒêÐ9ñ¦ÝÿÏ/üx8i×_óËÿã[ÔRúåNÈ>­i÷_óËÿãN7?óÏÿ³E\ŸdV,®?çŸþ<)ÂÎùçúŠÕ¢®O²«@Ì“ÿsõák7÷?QZ4QõÉöAõh¼¿ÜýEµ½{o®O*ý—R‚Ú]«´z’I%ùäžÃŒ}kZŠ=®–å_ù‡&·»ü °x“þƒàÿâꆫ¦¾“ðÿP´’Q+*; ´Î[¦N:ú×]X~1ÿ‘GRÿ®_ÔQí4²I'VΊçýjÿ×4ÿÐEbk³Ýà ”vS¬ÜÞÃmæ4a‡m¹Ç|g=GJÛ¹ÿZ¿õÍ?ôXzçúÝþÂöŸú0Vkrú_ðˆø‡þ†˜?ðX?øåðˆø‡þ†˜?ðX?øåjë–ïs¨Ú¬VwÓ-´Í7²2w -±ÈàŸá>œg5_Mµ¹¶Õíšm#L°¸h&;)Ë£ xy,bC‘–ãœóÅÙRÿ„GÄ?ô4Áÿ‚ÁÿÇ(ÿ„GÄ?ô4Áÿ‚ÁÿÇ*_K¨éƒO×´ûx¥Ô"Žk*FÌ[§UòÇ𓛈í“<®Äà|ËÎÛhévÒ…ÿGÑG¢År6±Š ncó%|åw%¢ZÍ»wÜT²wþÿÐÓþ ÿªé j²Ek,~3±xîñög["l©q°ùŸ7Ê qØҢѵ[SñE®Ÿm¯}«H_µH·Â¯£ŒY‘‡E Ä“Me\mV\oÇ/cª|;àHuoûoÙšÚPaTHŸ0óVIT«33pÃäʼ¬’@v¿ðˆø‡þ†˜?ðX?øåðˆø‡þ†˜?ðX?øåsWž,ñ.ûq©cmÄíe5Ü«ö¡"‚ ÆèãöÁå“ç ¼:mй×|E§éϪÛ^ϨÜ\꥜t¶ñ´kä ¶ˆ BÙ·EåŽC7 ‚È ámnݼ]h'tgHΜ»™T€Ä3$Ê í¸zÔŸðˆø‡þ†˜?ðX?øågB‰¬ø«H_®ï‚Ùj¯íZÎV=ŸîŽØJcßww#œq]‡†µ)µŸ é¥ÂƳÞÙCq"ÆPΈ$ã'ÔÑdü">!ÿ¡¦üþ9Gü">!ÿ¡¦üþ9]YÆÂ#âú`ÿÁ`ÿã”Â#âú`ÿÁ`ÿã•ÙÑEgü">!ÿ¡¦üþ9Gü">!ÿ¡¦üþ9]YÆÂ#âú`ÿÁ`ÿã”Â#âú`ÿÁ`ÿã•ÙÑE5dž•Oû#]ÿ¡¦ÏÿÇük¹ÔÔøþ€Õ冯ãxü]ؼ5æèf93s–l‘ûÅËü¸Ç z‚s‚FÔÆ½?ûF&{ªÇ{YKsû«o(¤2I'©=º¼ŠÙ¬˜ä Eÿ`‰ÿô%­j–0¨§ÜDH’4fI⌲ÕN2èMKQËþ²×þ¾àÿÑ«B_þ¤ÿ ÷åÿGü#IÿA;ïÊ/þ"²õ?ëüC‹ÂšKØÚãJ:”—Wvïq»÷¢0DÇs’Nr9Çð¿Å«=_AŠçQ°ž+äÑ&Ö.ÜŒÇ ¯%ÜJðÆã֮ȓ¬ÿ„i?è'}ùEÿÄQÿÒÐNûò‹ÿˆ®^×â¶›-ÕÙhîåG}6;D´T•介ÌDÞe(Ç$Ÿ,.Ëpj¾¥ñ}â"Ûj©wi§¾„."Òš8¤¸–ìܘÑSË-¹ÙG Œœ`YØÂ4Ÿô¾ü¢ÿâ(ÿ„i?è'}ùEÿÄV_ƒ¥Y%ŠŒHÆáãÛ…TV Ï$“ÇLv <ò’©¿œ·Ó<0ÆìbA—%Ç™‡<ã¹À$àÊ+?RÔÿ±ôCS½‡ýÊÞK†¶çe@Ì@ wêHí“åvº†«á;9ío`»ðüú’YÞ]ÞË%³©º7QE8;T2ÏP£i!W€{%åÿð”;kö—^7ûþ•öm_u¢ý»bÚó¼f6ÚÓNŸ"õx9*I,ÆKšC“,‘DÓ:Û˜ZVÚÏ*†ª©‹çG,êW‘·µÉµV¶±Õ­¼x¤Ž ¥Šâ}?uí´^TФq˜ÎÙÝYݲ¸¥K6ƹâmCIñVŸc«\YÙKm}s rÞù®ŠÓLJsŒH~e‘h µ²1‘Ï¿?ÔrÙïý 6ø.?ã]Σþ Àÿô®r¥±£Lµ»µñÌky©G})Ò®xíü £rñÔç¿o϶õdÃÿ%/ûOÿ¡-kRc Ž_õ–¿õ÷þZ’šñ¬C4‹µÕÃF@`T†dÔ¢’_xJïQ½}{Ãú¬šW‰ɬâ¸(’E${Ä‘[p?2àÜî DZøS¦¦‰imæ]é7 ¦K¥\}†ínÖò9vVibêX³eQ.@à ný²ëþ‚7ßùÿQö˯úßäþ5Wt+Q|&Ða ÑÝêK8{ !ŸÌBÐIg—¨)´’¹Ü09à1cRøi¥kZ’êz­þ¥w¨%³Šéž8䈉L©2Ñvʬp```ƒ“›¿lºÿ ÷þ@ÿãT}²ëþ‚7ßùÿQt'×ü'ˆôí.ÚóQ¾I´Û¸¯a»‡Ê4Ñ‚˜(y$ öÇžß4y>Ï,÷7ÓßGªÅ«K}#¡šæh÷lYÜyjhE c'6~ÙuÿAïüÿƨûe×ýo¿òÿ¢è,VÑþhú'ü#_f¹¾øG¾ÕöO1ÐïûFwù˜QœgŒcß5ØW1ö˯úßäþ5GÛ.¿è#}ÿ?øÕAc§¢¹¶]ÐFûÿ ñª>ÙuÿAïüÿƨº =Ì}²ëþ‚7ßùÿQö˯úßäþ5EÐXéè®cí—_ô¾ÿÈüj¶]ÐFûÿ ñª.‚ÇOEslºÿ ÷þ@ÿãT}²ëþ‚7ßùÿQt:z+˜ûe×ýo¿òÿ£í—_ô¾ÿÈüj‹ ±ÓÑ\ÇÛ.¿è#}ÿ?øÕlºÿ ÷þ@ÿãT]ŽžŠæ>ÙuÿAïüÿƨûe×ýo¿òÿ¢è,tôW1ö˯úßäþ5GÛ.¿è#}ÿ?øÕAc§¢¹¶]ÐFûÿ ñªOµÜÿÐBûÿ ñª.‚ÇNXSKW5ö»Ÿú_äþ5GÚîè!}ÿ?øÕÈVgFXÓ çþÕsÿ?÷¿ùÿR}ªãþïòÿ§Ì‚ÌÞbOza¬O´ÜÏýïþ@ÿãT}¢ùþ½ü ÿãU\è\¬Ø4ÓY?hŸþ¯?(?øÕ'Ÿ7üþÞ~Pñª~Ñ+5 4ÖoŸ7üþÞ~Pñª<éçöïòƒÿSö¨\ŒÔ‡ý|ïç\æ™ÿ «?úàŸú«âyȽ¼{Aÿƪ¼1$Ç {¶F¡WqÉÀ¬êIKb¢¬>°ücÿ"Ž¥ÿ\¿¨­ÊÃñüŠ:—ýrþ¢³[”tW?ëWþ¹§þ‚+\ÿ[¢ÿØ^ÓÿF ܹÿZ¿õÍ?ôXzçúÝþÂöŸú0S[‡CÑj½‚ìÓ­—nÜD£nݸàq«ûä}J±Uìfl»vâ%víÇŒm\ß#è:U’Xªè¸Ôfm½bŒnÛ×—ã;}ÿ¼zôËXªoç-ôÏ 1»eÉ@qæ`d!Ï8îp 8Är«ÞØÛê,7Qù‘¬±Ìâ0ñºÈ‡FU>øçЧ­\è¯ödq®£öI~ÄUÃ6ÖÙà(ça猒'—þ Ó,5 ¯5u…·Ù4´k{gUi.Õ¤PŒU¤iUŠí%”‘‚Ú=¼šŒ7ín¡ŠHc}ÇåG(Xc§&4ü½ÍX¯#Ó¼esw –©ã[M:Î'»A¨ÚÝÚH·,‰fè ¯ £ö‰Fî€rT“roë+¨è/q<}ÔßÙðÝéWS¤/3Îcâ— m#DN ³…Ú©Ü;¤|À‘Í`Üø ÞgÔ¶=ŒBñnvÎ4õ7!çt¤üÊ €œˆu¯øGþO3÷öcͶ6ÿé–hò3»ç‡ç_-ÎîO9Ø6òhÛmw,ú…Üy){5ªGåÊÜ´1¨ÉÆæ!FI'' šëÚ\%®·6wí0y4ñÈ ‰7lR<‘‚ ã' µñè1 m>Y݃ÝËv²  Ñ»NÓ¡È%X޹o#™.‹©êWòU‘ç…Q쯭¢ m’9v´fB匑.îv”Aµ‘‹PLjôûmBKY'@aWóF¸q䪡NòDñðIe1'Ûx’µ‰-˜ÛkW6ðjûcmÖ¯6›çO¹D|¯2˜.Õò¾`v¶v4mgVÔüQk§ÛkßjÒíR-ð†'kèãdaÑBq$ÓFYWU—ÆðèWà]jëWûÚõ/í ¢òËÍi,XmÄ¥¼‘ª¿–\²åy`w7&Þ4Ö.µV³¶Öc/ž',ðMw§½¶ˆÆñù !}“º•ÊC'ÞùI`\¨àž«x®-åŽh%@ñÉWR2#‚ç5çóë·–ºµÆ‘©øšM7O´¸–#¬J-ã’GÚËNÏ•“ö‰°DCÑËSm7û_À ,|»<ß³ü·ö¿i„ãO˜üÑî]Ý8ä`àöÅz…æú¥íï… —M‹P±Ó¤³ÓþѦYØYÇm©tÏ10,O½›î ÄÁ³19Ë.)ë÷šåÏ…u/îïΫq¬ii``ˆª,iyåù{9Ü"üÌÙÜÜd‚=RŠóù<@ñëZ%µ¯Šµln6þÃqi%ÝË4̬òGå€Öê¡Ú赃 ‚ÉèQEOQÿP?àúW9]£þ Àÿô®r¢E#&ù(Ø"ý kZ²aÿ’ý‚'ÿЖµ©0 (¢…Îj³Z¯ˆ•5=nëJÓc²ó$šæhã]Ä©fNOêH¤Ò[L›Çóhš~­­êÙ‘‰/¦’dkhå2*¬ UæÁrFF6cŸ˜+åÍú+Äš÷ö½œ›lÿÒn|÷—_gŠ?Ý»åŸksc©ÈüSeB—î‰;À·Ö‹-ͼq1`’„aUHRrØ°Í 7h¬-{ÄéVŸ”^ÛZK4"{y)c.9\àU[8 èpÉüUh'°IåE%ËGuöÈd·x£M }²!s7ŽuKOÕm5?0[™•ãÆøç‚Hdçc¨m§Œ¤v5IGPUƒÀÈ#vŠÅ¹ñfij.d¸™¢™\Åk,¦‚d ¤Ç‚¬>|rŒ:©Æ…ýü:t 4érê[höÒNÙÁ?v5$:ã-QY÷šÞŸeiku$Ï,7lÜÛBó™IRãhŒ1#j“ž˜ø›H"srå]w³,0…rT™p¿¹«æmÁFÏÝlkÑY’x‡JŠ%{¬$qÜÊçËnÝÂLz =ûf¦Ô5[M3Ëfy3²8 ’iÉØŠ[hÈã°Å]¢¹ýOÅV–ën–}ªY®mcó#†Ia ,‘ƒ™lVØû€,:©Áf=+Æ6Wñ]I2É}©gÝÉf«H­å‚É&¼@Ê_l`Ê734cË;Á«W“Auâ {HñD÷ë§x~ ¥~Í$w¥%½`²AR¿»ØqžsÈõ (¢€ (¢€)ê?êüÿ@jç+£ÔÔøþ€ÕÎTH¤dÃÿ%/ûOÿ¡-kVL?òP"ÿ°DÿúÖµ&EP2„Ú†©¨\Kª¥½ÍŒö-g%¬¡¾}ί» q£r Œ ÒðÞ—£xWB·Ñ´¨¢†Ú&Ww,Í$¯YÜì˜ãØÀ ÍC]Ó4©V+ëÈàw]Ê<ŠŠËÄš>£yüs\JÛR4’*wbЯâ{}BH´ë2'–êÒïÎUX’@AŠHÎCK~ÍœãƒÍR‡GÔ5­?XmO}Ö£`4ö (P<Ò$ ³IÆ&Æ g(}F:ª)Åê¾þÒ»¸—íviæý ùícºèù±IÖ›xÜ‹æü«´aQ]bG›VÔQæ‘|™ ¥¹‰L^MÄ`Îølܹݒ8Q·©=U\ ]@Mí #Ó£yö‚º}‚ÚÇ…Î f-óKcÀ“Š|%¨‹Í6ÐÞBú}…“Ei*Áµâhæ¶x„¿9ó3äó´'Fû»†;J(¸‘ðmÕÅô×÷z¤/vò”ÃhR0àڔʙ•Ñr2 pW«¿ðŽÝI©>­5ü#Uû4pG<Åv<ŒARìYH¡”Ÿà m¥z (¸þ½áÛ­Síÿc¿†×ûBËìW>u±›äf a×k~õóÀü¼ ÀÏ*H™¹-Îô·9éåç’ÍžžŠrºŸ‚âÔ5)ïËXÍ4“´‹ýˆ¸‰¢…˹~lÀ¤6F0ÁëV¢ð²Ac=¤wXI/m.”ù*»D …çÈì¸sÐQEÄak—SžìÅxCh,¯á.Í/,î¿$0û¼ps—„ï5+;‹MZå#²7wòà bP&iÐ1³)&bÐA+ž„ÆŠ.1¦øA,nínÓ x.DÅ4ý9m£p"–0ÜÍ»÷Ää±PŒ’K?}—[Rûví—/?—äã;ší±ßô÷×òÏý®:z(¸.³áV Kë]!¼÷Õ㸂åä…Lq+Ë4‹É•Yqö‡‚É í ×ôí¯³ÖmäîMý¯Ú`mØùŒ{—çp<q›ª(¸¶ºÙ´ÿZý§wö>Ï›ËǶ‡¦~_¿»¿L{ÖDþ·žåçw±™¥i|Æ»ÓÖvDyå”y[އœÀ–Õ;x ö4P1uà›¯¶î|}¦äH8o’#¿Íïs¿Ïºùº¯ÇÜ\Zñ†â×'´¸)bó[,ˆ©f.bÚåI;7.(¸9à9ãvŠ.0Þž-¶öz„1صͭÌÑÉh ŒÐy@ddDR N6Øã2ËÁòØécO‹QC[Y75¹ÝöˆGûÿêÈ2y8qÆ:ª(¸Zw‡¥µÖ¿µ®ok©a0Ž38APYŠ€¶ëÁ'%‰Èé[´Q@Š( Š( Š( Š( °ücÿ"Ž¥ÿ\¿¨­ÊÃñüŠ:—ýrþ¢…¸ŽŠçýjÿ×4ÿÐEaëŸët_û ÚèÁ[—?ëWþ¹§þ‚+\ÿ[¢ÿØ^ÓÿF kpèz-W°]šu²íÛˆ”mÛ·1µqÿ| éV*½‚ìÓ­—nÜD£nݸàq«ûä}J²K]ŒÍ·¬QÛzòügo¿÷^ƒ9júïü‹ÚŸýzKÿ çu=6å-µþÐa²H')sÁ3¶7—äq‘¿ŽpN9쨮oÆæcðÿÅdqªÿe]m*å‰ýÛõãiú’;dòöwš6•¦ Ñõ¿ [G=êÇ©êz¬ëi•+F_sJ€™ gàù„ƒ@‘ ðÜ¡x%ŽTÈY0 ¬U‡ÃìAØÛɨÃ~Ñæê¤†7Ü~Tr…†:rcOËÜ×‹é— %ý¬¿ÛŸg°¶Ôáõ¤[pU^}]!C×%dmÌŸ(« ×‘Èè²ßºHªÄ_³NØ>£*ÔJ¾Öõ=:÷[’6Ùcé3ÞK\¥ª [v å+«í%˜’¹ ‚HÁ,:MkI[Ó͔ӼP³p±E p9¬¨ëŒàôÎ@æ©iÞÓìR˜%êÛ6ûE¸´·QjÙÜL~\k´“‚}À©KNñ¯y¯ä°DÒ仸´ŽF1©Ýn æ–rLGäò—“’-‰¯/ïtOG–ÑYXÚOo$m 4’±µn¸¼[îžyã§M6Â-B]B;+d½•vIr±(‘׎ c$|£ò”ËL½ºWzuœ÷3–XŸaÉÚC0#§'Ö€0®µÍVÆ{*G¶¹Õ ÀöohBÈd2’ž[ÌBÁ#n2(9Æ20Ði>,¿»–æ[ø­¬ì´ûC=ë2³H%¸‰°ªXûÜÆ ûƒ/Ou¦Ø_$©wemp³*¤«,JáÕIe ‘È’3ГEž›a§&Ë+kUÚl*  ³Àé–cõcêh•¶ñ&¼×ë£ÝÚÃk¨M$B)æ€UtòbIßwü{°Ï˜¿§ËóªkZkx‚àÍ ï•{mišHí—rî—3!o/#$œ¸É5ÐÅá½ YíbÑtèíî6ùÑ%ª“iÊîÁÁäg¥Mý¦Ð:Ïþ=¾Éþ¡ÔÏ.ŸsýžžÔÏéºö½u«Úi—¶pKûö¹gÆð±ýœ‚$p¬DÅv—=Ÿ§Èt<=ªßßÏw¦©oyÇ#Y vV·W-ŒË½’`vœ2c~Q§k¦ØX¤Iiemn°«$KJˆf À$qÔE†›a¥ÀÐiöVÖ³o1Ûı©lœ9À•rº¡®Í¢xzÏíÖowy§}³íSÛ<˜DXFÖ_4reÉ}Àq÷yÈÔ—ZÔn¼-¦êºu—Ï{SKòyÿf“ym‘¥Ç …!ŽrÆÓ¡6ƒ£ÜA$é62Ã$æáã{deiHÁ‚9b;õ©¯ôÛ RƒP²¶»…[xŽâ%‘C`ŒàƒÎ üèÒµkØçÔuh.¬îtûFÉE«Æò™ µA"±s±x­´©<žr&OjqÚiד%›A¨ÛG|¡beû$lMìX‡Ûå·áòÉ#®k;Vó7[B|ÉgÊ™×nÖ>¬6.Q´z ‚=L‹íž^fŸmÏÚ¶À£ÏÎs¿›;›®zŸZÈѼA©j‘ÚOböãÈ–yVHY´Mrx%Õ³ÕâÖ~¯w©êz<·)=œ6ãV‚Þ»3£Ç~‘‡fÞ)(NЪyw=ˆ†%ç ™ÕQ¤ 72‚H÷³cê}j«húc_IzÚu™»“nùÌ æ6Ò¥rØÉÁE#ШôÏϯêá§Ó-–bÞåù6¹IbXâvp:Áž5ÿXÄõíƒNñV§¨[Weœzy¹²ƒìžSÒ#·9ówcå76rg#§»ÑôËøÞ;Í:ÎåA3¬Ð+†p»CG-´ž¸§Ç¦ØC‘•²C¹ËX”.ä ãT"cÓhÇA@|¾-Ö¡´Óï<«9ÓU²[‹kx +$,òÛÆŠÌÒm“hçý^Jõ\ñ4¾$× Ó^[»XlÖÖIíá€\T":–‚)Ù—;Ï!ßåuí<%¥Úê—úƒD“Íz²G"¼ªì‘·:ˆ»Á rûylÝŽ©h‹¤Ø…³böÊ-“1;‰N>Sè NòÿûRÏLÓä¶‚iàšàÍq J¡ch×nÐÉÉ2ƒœñ·9ÈÂÓ¼U©êãUÙgžnl û'”Æ_ôˆíÎ|ÝØùMÇMœ…ÇÈê¯ôÛ RƒP²¶»…[xŽâ%‘C`ŒàƒÎ üêF³µo3u´'Ì‘f| ùvícêÃbàõG  Å:ÅÆ‡â[ÛËdF‘l"`˜.RBA¬7  àäwêukšmçö@ŠÚûQ•¡1Koo±BºÎÄyo0Ü@¶n|Åûý>\7Oq¦Ø]»=Í•´Ì˱šH•‰\2àätÄŽ>ŽÞ¦‹­6Âù%K»+k…™U%YbWªK(lŽ@$‘ž„šÅ“ZÔÿá†ôEm¢÷qZ0|JˆÍr°–*ŽyÁ'`s´ü¤œF™®_ËâFѮų´ 8–x£d2­³©U,ÛF. “’ äg¼,íE¬V¢ÚoÏ. ƒbl ¦A´€G¦* ½L¿ã¼Ó¬îQä:͸g ´1rÛ@ëŠä´Ÿkº´Vn¯§CöÉ!·@m]¼·k$ºg?¼—ï ^È;Ž1èšåüŸm×#Ée{b$´hÙ¤ =½ªäK¸ /˜6s´ò3Çi›an#Y[D#`è%]¬Ë`pB|¿îñÒ¡‡AÑíï#¼ƒI±Šê5“¥²+ª…Ú`2_—éÅr6þ1ñ¶6÷m¥Û"ß-¼¶‹;¤cl“›r²»8Û7ߨ›HS»hÚñwæo $76É{öò ÏnÍï²Ï¸ì8¸Èäãx´}2'’-:Î7¸‘f™’GVܬǰnA<ƒÍ>ÿM°Õ X5 +k¸U·ˆî"Y6Î<àŸÎ€9+ÿjpi²\ÚZ¥ÌÚrÏ&¡B6”ŠY# ¥_,9†C€%+Ü Ýƒ©Gyqv¶É ]ÏoÄqXætÜÄô$(„çæÚ³Ýh:=ìð]é67Û.È#–Ùb\…|£tôv(b CF¥™Ê¢€ 1,ÇŽä’O©&€EP0¢Š(¬?ÿÈ£©×/ê+r°ücÿ"Ž¥ÿ\¿¨¡n#¢¹ÿZ¿õÍ?ôXzçúÝþÂöŸú0VåÏúÕÿ®iÿ ŠÃ×?Öè¿ö´ÿÑ‚šÜ:‹Uìfl»vâ%víÇŒm\ß#è:UН`»4ëeÛ·(Û·n8cjãþùAÒ¬’i#IchäEtpU•†A¨"²×CÒ¾Ù**Ï`f\g-ŸáöÏnS­UÑq¨ÌÛzÅÝ·¯/Ævûÿxõè3–±QÍ#D•wê¸ç¡` à™Ï§©‘%W¼]Ð(Û»÷±œmÏGSŸº—«ÔX¢««Þ» €tÎ&'w?Ãîÿé“·Íü]¨Ý^ëqh××Pø_ÈòîâxÛä o~V‘Kï¶xÔeNm?1õ +ËõëÚ_‡¯u˜µ™å’k½^Ö8%†.Ü@—m&1aöd;0 ¶FpF†§«jZ6°ú=ψgKôin5{”·I-REºþ/,Dª^Þó+ ä®Ð@¢¼ÏGÕçOÜê÷÷÷o3m¥¼Å»YH'½ÚÑ‚¹‘ü¯*OÝÍS¬¢±ã×ï5-FÖïZ=6ö —Ö,¯mîE°–Þò2_!"PYcP2s/Þ%”(²Q^W'‰u H50šœvÛ=ìºeªC Rä^Ý/‘´®d?»„W&bI%”­k––ãRÔnnõ=NÉ!ÔR$´¶XEÛFå‘Àg@Å™¾Rügz%Íø+R“TѦšK˻җ Úfx$Ž\*äÃ$ «$Y$*!ƒ#hé(¢Š(ž£þ Àÿô®rº=Gý@ÿÿè \åDŠFL?òP"ÿ°DÿúÖµdÃÿ%/ûOÿ¡-kR`QE2çŸW¸ñzV•‹9µk–k§u €TïÞµ~ÛJñ:ÝBu¤-¡uydgÁ8àõüúQ¥[N¾6‚ChºsÂeT$o2#ãÙIÿõŠê¦™eUUYs½1°èÀ÷I+rú…¶›ËrÎ6ÄHãiÛáQAf8ð' 5 †³m¨ÝËow*ÑÁçÏ¢;]¤Qò¸ bn pAÍ3]…&±@Úmåñ«g2Ã,gçW.…xÊ­’Ž„×)/†5 »}ZêêÅ&ÔF–#Òæ™‘æ‚A%ËF¢BIY^_<°ÎæÆjFwÔW uák½Bk«F´û5ÅÄ—‚çWýÛyöò¤Ë\7˜Û<È~VG“ÁásvÃDÕ[Y°¿¼;²6£sù3ùo‹ üß»•pãý8Ì„€Žþþ-:Ý'™]•§ŠwI"ƽ{e†}³YïâkUóÙ-o(|´gòÂfi6ypír9ócêܰ ‹¬h—Ü“6‹öÙßQ³¸¶Ô?t~Ém t˰uå%l ùž¤ã?KðdÉá׆ûH¶kÙ'ÓRBâ6f·‰-¨['* R|¹ç‘A…ÚX#‘âxY”1È,„އŒbG½>¸‰¼/:øµn£·¹¤ð5¤–æÙ"¶‹s)™A+'ÉÈÁðHÜäR“ÁÓÇáßÛ=Ì©oi‹ÛX>Í3µÁH€söŒÆÁB:TUùr¢Q\E¯…nmÄ÷mfª­ý‰Žõ¤Y'0"[$ß½!X‚`rvOËó`Õ“ÃW2hÖm£MÄ2Du9¡[V}P¬n¥Ç˜JÉûÆWýðSÜ|€=˜%S;ÂîUV$¡ ‚Hl`Ÿ”䑯zŒñþ¼‚óF+a4æßo:·šXüæs³nÖŠ`¥@òÔÆ6¢ò:ÝÖ<;&«ã k‹›n´Áö4LìŽð©ë†–.ÝýŽ:Ú+’¼µ“OðEÄ7 ¼Þ³æ™6µ{–I ¡ÄaI † p3Œ½.%Ô-î.ü3sgoìΊr 8ä€z 燄µ9¦ÖÝ ¼–òâ;гù–ÉÉ"H"‹vß9ð1µÈ@S áA´´‚ÆÕ-­“dIœI$“’I<³I$ä’I9&€&¢Š(QEQEQEQEQEQEVŒäQÔ¿ë—õ¹X~1ÿ‘GRÿ®_ÔP·Ñ\ÿ­_úæŸú¬=sýn‹ÿa{Oý+rçýjÿ×4ÿÐEaëŸët_û ÚèÁMnEªö ³N¶]»q»vãÆ6®?ï‘ô*ÅW°]šu²íÛˆ”mÛ·1µqÿ| éVIb«¢ãQ™¶õŠ1»o^_Œí÷þñëÐg-b«¢ãQ™¶õŠ1»o^_Œí÷þñëÐg,b«Þ.èmÝûØÎ6磩ÏÝ?ËUê,U{ÅÝ»¿{ÆÜôu9û§ùqê½@ŠÈþÜÿ§oüÿ­WÕïÝÐ@:g»Ÿá÷ÈtÉÛåwÿÙÛ7ÿð’ù>o˜¿Ù~oúÏ/ËLýŸù¾nÿ¹ûÌù}¼ºLhô_íÏúvÿÇÿúÕÞ"ŠÞ 'ž4ŠÔ»Èò…UP2I$p¯1ƒÄZ•ŠYkðí½îŸA!ŒI"8¶Q÷”»N7 €C`¼d Uï< {“ ýME†%ºŒØ«™mÜ@v|„(òñŽ3v=iþÜÿ§oüÿ­Göçý;ãÿýjó­bîyü∯_môvW-%¾©‚l=]RCž§wADι—N†âݼ.,N”g¶[¿±¤moç»q|͆\•ù‡ÈN1¢ì,zOü&šgüüÙÿÇÏÙ?ãé×ÿÏ/÷ÿÙëí[Ö³ý¦Ù&Û·vxÎ{â¼WÃ7ñFÄÖóþ@²M÷bûŸèŸ¹ûŸsßïÿµ^É¥ÿÈ:/Çùši‰—(¢Š¡Q@õõþÿ 5s•Ñê?êüÿ@jç*$R2aÿ’ý‚'ÿЖµ«&ù(Ø"ý kZ“¢Š(QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEVŒäQÔ¿ë—õ¹X~1ÿ‘GRÿ®_ÔP·Ñ\ÿ­_úæŸú¬=sýn‹ÿa{Oý+rçýjÿ×4ÿÐEaëŸët_û ÚèÁMnEªö ³N¶]»q»vãÆ6®?ï‘ô*ÅW°]šu²íÛˆ”mÛ·1µqÿ| éVIb«¢ãQ™¶õŠ1»o^_Œí÷þñëÐg-b«¢ãQ™¶õŠ1»o^_Œí÷þñëÐg,b«Þ.èmÝûØÎ6磩ÏÝ?ËUê,U{ÅÝ»¿{ÆÜôu9û§ùqê½@ŠÁ»ð¼Ö¯ms.øŸH ƒA*À€A €F­e{÷t™ÄÄãîçø}ßò2vðúÊhðxæ9üýUÔÚîØg\“_Ûä¢î…÷nŽ4_ß•Øå£n²ªÀt°øy`‚8RéÊÆ¡A|»9bÄ“îNMIý‡ÿO?øçÿ^¸¯O¨-¿„´kHñǦHúŒ-$Â-ìß*ƒS#)ðÌ͵–?øN/e±Ñ-âÕà7ãJ ­ªˆÌ–RùÖqË,‹Ý4k%Ãa€PTîRYçsý‡ÿO?øçÿ^ì?úyÿÇ?úõÃ]ÞM£ªßèþ(žúê_ãLtû4ŸÚsÆo U $h‹'Ë1‘¸óróÅ“ë>3¶Ó<9â+F°•í¢’kQÀBÑ_¼€@|CÈT‚U‹ ¹ÖÿaÿÓÏþ9ÿ׫¶~Lè+’äÜ<7[³C‹¨~Ël¿k]¨eeܧËÈ Erú4ÚnŸ7ˆu 7ðÅ׉!¸Õ¤²²[5:“L³LT3‰7¸*ÚNÒ9ÀäÓ5 ábÖë,ftBïa¹U’@¤Ž ¬ï´úVeh7V·~+×$³ñöôcO´ëÌöÞ|™…Uxàò3óuÆ+V¢E#&ù(Ø"ý kZ²aÿ’ý‚'ÿЖµ©0 (¢Íymná&¸†6# ;€qøÕ+ÝX£ÛÛéÑÅyyr¯$JÓlbÌà6,£K1¸i+«ÖÙÈTã¼ÕKS±žòæëk¥‡QZ4šh̨QöîV]Àv)È ‚£œdEwס°H£Õ¶[Ýß*[ .#…2@w ؤó8Qò·'i5ZÓÅV‚:„ž\«ssyPÈéqÏ$jò0F¤!;˜ò±è#½ðåþ —}JØ5ý ²¿)hÀ<@É(–Ø•Á-¼gdð|¾]ü1j(°êK47íË1‰æš@#;ÆÆáÆâ)Ú0AÓÿ„›H);%ËËäNmÝb‚IÍUT–a±‰ ~R ¿öëaSI2²¨dþí±Œò­‚<‚2;×5ý‘wwi6“ö$G{qwíôÉ^WpbÎ$GgÊÿ)„€:=$Ó¬`µŽêâO*5ŒË,„É&ÑÌ{±êO© ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@3ÿ´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ´>×sÿ?ÿßfµÜÿÏÄ¿÷Ù£@*Ãq ʳA4r…ÀbŒéœ}åRSRG–êñ¤vs²ÜeŽ{ÍN Š( aEPEPEPEPEPEPEPEPEPEPX~1ÿ‘GRÿ®_ÔVåaøÇþEKþ¹QBÜGEsþµëšè"°õÏõº/ý…í?ô`­ËŸõ«ÿ\ÓÿA‡®­Ñì/iÿ£5¸t=«Ø.Í:ÙvíÄJ6íÛŽÚ¸ÿ¾GÐt«^ÁviÖË·n"Q·nÜp8ÆÕÇýò>ƒ¥Y%Š®‹FfÛÖ(Æí½y~3·ßûǯAœµŠ®‹FfÛÖ(Æí½y~3·ßûǯAœ°Нx» Q·wïc8ÛžŽ§?tÿ.=W¨±PÜÄf‰T$Hóc³ÜOOÄuQUÕïÝÐ@:g»Ÿá÷ÈtÉÛËê:?Äí"ò]*ÆK¦ÓîçižÝ ™#’ÐFå±Ê õâ€; +Ëü;â}vö ‰µ=vÆ6‹4ÐÂEÔ–7;Ól À…7xÌ.ï+µr³UÈïg¼ñV©jÒi³l»‚x‰VÙí Ø’êwU,!¤Át!Ñ*9'†…%–4yŸdJÌvÚ[ êv«ÀžÕæþ'A‰r¶½wáˆ`]2ÌìÖí’V‘|ëÂy!Æ2pÝWŽ9Çñ¦µ$ÑÈ÷Ôm©[\j˜Ñ$HaŠ;;ÅŠS!†A|ä£y¼ Ù(¯3´Ô$Òmn­ßÄRX¤šíØ¿/ä¥BòÝKüèv XD—p"A³µ<)«k:Æ¿*\j[´û[D‘3v ÅÜQÌ\ mxâŽC´Çi]«•`âŠ( Š(  zúÿÿйÊèõõþÿ 5s•)0ÿÉ@‹þÁÿèKZÕ“ü”¿ì?þ„µ­I€QE Žøù¼ÿrç5IQÃÿ7ŸîAüæ¬ËËËûRM3L’Ú  .&šæ•v»:ªª«/9É$ñ€0w z+˜²×îíµ]FÓS†i`Šöe½‰#XQžp»w™9’N8lolA'ŽtØï/,Ö¥»¶‘cC,<¤Ì°ñ¶C³ç‘8“aç§€éè¬!âxÝżZeôšˆgY,WÊF#XÈ##Äxr~qÇ ŠVÿtK‹Ë+ewV»Xß$JÈÓ*²!~òHtåU”näðØê¨¬];Äê–þÒÆòK7’4‚dòÜLöoP®YUz¶ð¥@9 ªY”[E3ÇåÊv1\ùƒœÀi›­¿ç”¿÷ôñ5ã;««M>âK;‡·™ï`„JЬÊá°¬zƒXÿcÕègÕ?ïͯÿ«7-‡9lv;­¿ç”¿÷ôñ4n¶ÿžRÿßÑÿÄ×ö=Wþ†}SþüÚÿñš>ǪÿÐϪß›_þ3UìfW²‘Øî¶ÿžRÿßÑÿÄÖdÚˆÿ„Š6(JÆÖ;;>âHuP“ëÛ¦9æ/WÓ…¬ãÄ7óƒ{kÅ,VûY^tFl@ôcЊØùáÿ°dŸú5*%2‹ŽŒØ‡þ>o?܃ùÍRTpÿÇÍçû9ªJ–HQE (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+Æ?ò(ê_õËúŠÜ¬?ÿÈ£©×/ê([ˆè®Ö¯ýsOýV¹þ·Eÿ°½§þŒ¹sþµëšè"°õÏõº/ý…í?ô`¦·‡¢Õ{Ù§[.ݸ‰FÝ»qÀãW÷Èú•b«Ø.Í:ÙvíÄJ6íÛŽÚ¸ÿ¾GÐt«$±UÑq¨ÌÛzÅÝ·¯/Ævûÿxõè3–±TßÎ[éžcv1 Ë’€ãÌÀÈCžqÜàp?ˆåG<ðÚÛËqq,pÁ’I*¢’I<9®ÆæcðÿÅdqªÿe]m*å‰ýÛõãiú’;dðþ2ЛÃ^¹E·ðübñ.‘¿³4e´8]:ñ¹%Ü“œ`¤ÃÄP®Q^£kúíߎd´¹¿±ý®æ4ß<4Ñ@…Ärù+x÷·¼¥“€  þ.Ôn‡Š/u¸´kë¨|/äywq<mò·¿+H¥÷ÛÙn4û8üôŒ,¯å™!¹*[ áжâQkÏâËñ¦ˆõ‹ëiO7:\7Éj%Õî<ɇ•ò)YW÷píò ’³)ÜK©¡EyÝÖµ$íp.5¨Î šÅ¼'Et€ˆ!ŒQ¤Û y ´{1b3 eÇÉŽ~ÿÄÚ†±s5“j±‹I^AÐ\Ã%Ö”±_Z“æ …D%ܰ˃ËaX°²Q^fšï—¬^Á/‰£Ó´‡¸-ý´¢Õ î-,ŒjÒ4f&.$•þîHŒm!W&™®øŠâÕõ›ëÙíæ‹PÓläÒ¼i }¢+O4§šZâB>~PA‚éWà]jëWûÚõ/í ¢òËÍi,XmÄ¥¼‘ª¿–\²åy`w7a@Q@õõþÿ 5s•Ñê?êüÿ@jç*$R2aÿ’ý‚'ÿЖµ«&ù(Ø"ý kZ“¢Š(?ñóyþäÎj§¥ ¹ÖæÞòæÂè/–ÓÛlÜé’B°ue H8ÈÉÁ›7!ÿ›Ï÷ þsT”ån´mU^ê{kk¸g»·¼k‹@Å#ɇU·*0®@<äãLž ´YmKjÏš¤v–ìcÙ,±Jª@ÄfÆX“Œó“šé( oUðýȸ—QÑ¥xõ)§.ò5ÂÆ8Ñ”n†AƒäDy\ä04Ÿ ¦“og Z•àHc„OER;‰#;p\qeC…!pAËg ¢€1m|7 ´—3›ëÉ/.¤ç»>\rH"`U–Š¥z©ã%X‚p6¨¢”üQ¦I«Û\ÚCp–òýª9’GÌPc•dPFAÛŽ£­cÿcx‹þƒ:_þ äÿãõ¡'‚le‘¤’ÊùÝÉff¹œ’ORNêoü ºwýï?ð"þ*­I­I­Š?ØÞ"ÿ Î—ÿ‚¹?øýØÞ"ÿ Î—ÿ‚¹?øý^ÿ„Nÿ }çþOÿÅQÿ.ÿ@ûÏüŸÿЧí%Ü|òîfËáÍfé­ÖïX°h#¹†vX´çFo.EÆbJœ¸ÿò=Ãÿ`É?ôjTßð‚éßô¼ÿÀ‰ÿøª’ÓÃúv|²CÜÉ*‰f‘‰L®ì'Œíɣ֥ɽÄÛ{—¡ÿ›Ï÷ þsT•?ñóyþäÎj’¥ˆ(¢ŠQEQEQEQEQEQEQEQEQEQE‡ãùu/úåýEnVŒäQÔ¿ë—õ-ÄtW?ëWþ¹§þ‚+\ÿ[¢ÿØ^ÓÿF ܹÿZ¿õÍ?ôXzçúÝþÂöŸú0S[‡CÑj½‚ìÓ­—nÜD£nݸàq«ûä}J±Uìfl»vâ%víÇŒm\ß#è:U’Xªè¸Ôfm½bŒnÛ×—ã;}ÿ¼zôËXªoç-ôÏ 1»eÉ@qæ`d!Ï8îp 8ÄrŠæünf?üQæG¯öUÖÒ®XŸÝ¿QŽ6Ÿ©#¶O7©êšŽ—¤‡0YëÓ]dzys2–ñùr´mŠ–åÔ$d£½”âfr="ŠóøµŸ2Á~×ÄÚÄMgiuRL²>'‘<ìÛî—;V6û7ÉÄ«Zµu{ã-RÆãRû_“摌°Kin« TI0¢hî1œ«§Tñµ; (¢€ (¢€ (¢€ (¢€ (¢€)ê?êüÿ@jç+kÄQ:zÿfGj÷ñþ’쨂 ùT’yàú$-|\qûŸúo)ôÿcßùzŒËCC!ÿ’ý‚'ÿЖµ«7LÒu”ñÔõ1`ª,¥·Uµ•Ø’pÙù”z‡Ó±éRc (¢Èáÿ›Ï÷ þsSno-lü¯µ\à †/5ÂïsÑW=Xã€9§Cÿ7ŸîAüæ®KÅZv±­jiaila‚ÁÌwS¼j—¶Xñ~ò!9æðFyuwWpYB²Ü>Äi#ˆó;„QÇ«0Gq¨ÙÚÝÃkqp‘M2–Œ?€dN½3ºDu%†3\EÜ—z¬–×öZ¼7“^éóÚÛ"Üa‡t “`îWóòd†A¶ªÇ ÚŽ‘:G­M 59$[-e7v†@…¿v…›>_Ë´á‹è±^ZÏäùW0ÉçÆf‡cƒæ'2ú¯Ì¼Ž>aëSWœYZjV6‘gfš¼bÞÈÅ©!3¬²Z DeºþìM³ÊÿkËæ´,l.uj(e}i4P·-l^ææÆ-@ó°æãhçÇÊ·¢¸]^}cL›P×3Éi\IíRÌù¶WËHO…»…ù:­þ@–ñùÿÑÿÇïúÿº?Ö·ëïš³®j6ÚP¹»»wXV`„¤m#g  *‚I,Àp;Ö?ü%šgüñÕðQwÿÆéþ=š;}*i¦‘#Š=JÑÝÝ€UQw$“Ð ¡ÿ g†ÿè`Ò¿ð6?ñ­©ÓSWlMعÿ f™ÿæÒDL|¨å€=BŠó{oÍ.‹cqqâ¿"k©bÏ6Ãû´2¹LýÖeU‹÷ÛÏðçqÍXÐüA¬Ý_ßÜ\]Ïu§éÚÚRÞÖÕkñçÞGŠFó#†7€Š*¤«zãqë÷š–£k ÷Š- ž›{ËëW¶÷"ØKoy/‘(,±¨ 9—ïÊBOêja58ì%¶{ÙtËT†¥È½º_#i\Èw""®LÄ’K)©EyÙÖµËKq© j77zž§dê)Z[,"í£rÈŠà³ bÌß)~3‚:jRjš4ÓIywzRá£ûLϑ˅\˜dUd‹$€ÅCd0`¤m%Q@¯FagæôúûŸ~†_|þ9þ~¾ý{çç½z3ã?7§×Ûüûô4zûçñÏóõ÷ëß?:cC$o?܃ùÍRPÄQE)iú>™¤ùŸÙºuŸ›3ìÐ,{ñœghÆOçWh¢€ (¢€2.u^K©ž? \”gb¥®¡ã#qÅEý¯­г?þÃÿÅWK(¶ŠgË”ìb¹ó8ÿ€Ó7[Ï)ïèÿâhÎÿkë_ô,ÏÿpÿñTkë_ô,ÏÿpÿñUÑn¶ÿžRÿßÑÿÄѺÛþyKÿGÿ@ïö¾µÿBÌÿøÿQØ®¥wâu¿»Ó$³‰,Þžd|±u#î“ØʺmÖßóÊ_ûú?øšÌ›Qð‘C¦Å XÚÑçggÜIªà`r}{tÇ aÿ›Ï÷ þsT•?ñóyþäÎj’†EP0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¬?ÿÈ£©×/ê+r°ücÿ"Ž¥ÿ\¿¨¡n#¢¹ÿZ¿õÍ?ôXzçúÝþÂöŸú0VåÏúÕÿ®iÿ ŠÃ×?Öè¿ö´ÿÑ‚šÜ:‹Uìfl»vâ%víÇŒm\ß#è:UН`»4ëeÛ·(Û·n8cjãþùAÒ¬’ÅWEÆ£3mëcvÞ¼¿Ûïýã× ÎZÅS9o¦xaØÄƒ.J3!yÇs€IÀþ ”W7ãs1øâ28Õ²®¶•rÄþíúŒ q´ýI²yÿøš+ÝWIë6’$ÈÖÍyeäÎѽ°‚± Ù)ã§*H8\zž¸Kv–1;£:FXneR: ('¶áëRW—ÜêÌ~46qÜÏtÚtW–Ïz!G¹0Ó¥i5P’H¦R 8푆É#OxŽ{ýJçO½ÓoJ%ëÛiqÍçÈÑF’y1ÂD›amí1Fü ŒPÂ×n²ÆgDWxà ʬHRGP V÷Ú}*Jáü!ukwã-vK?ÿoF4ûn¼Èaó.¾Lª¼pyùºãËøH^h±Ôlôk§ðÑ{(íkRȾhTCç(ŒŸ1a4›[åzö +ÊãñF±s,¾*Ѥ´KˆA½RäÁY ÅÍo¹—䌈ÙIÁrÌ¡‘—B/ê ¶§w çÚ,¢¶Ñï!…'»¶‘ 2Ï$awïO2|˜Ê¢˜F²è”W•ËãmN{?ÙØëvƒX{(§GË]XÄÂXÆ ÞÎ¥2§“ЀFÅöµ¨X^k0jGÕ4ûwþÌÒdHwj›mVA)@‚G&S ýÑUýÞl€w”W•Çâb=æY|U£Ih—ƒ{¥É‚²Š)šÞ;s/ɲ“‚å™C#/¤i35Îc;‹°ò[Æì/#Tœ þñT¯êâ€.QEZôfÆ~oO¯·ù÷èhõ÷ÏãŸçëï×¾~{×£0Ž3óz}}¿Ï¿CG¯¾ÿ?_~½óó¦42CÇ^ªýúüïïï×ß-•Z²:õWï×äo~¾ùlª–4QE!‘Ãÿ7ŸîAüæ¬k«Íb_\ØéòX¬6Ö\¸…ËLÎò»Ã ƒv¶3œb¶aÿ›Ï÷ þsVeæ‚.õI/“R¾µ2ÀM»"¬¨Œä ÅK©ýã £)ç‚Í3-þ è—–VÊî­v°¾H•‘¦UdCýäéÊ«(ÝÉá±WEñõ„–ú5•õÆýBâÚÔO&ø—÷ÒÆŒ—¸9Éuå¨ÝÉlnÇáû{{Ï6ÒææÒز<–våR'dUU<.ࢠªÁH\AlÒÑ<0Úu¥¢›››QÆ&´‚àI­ª#´†5|íŽ<…Ú§n ¶ã@+i¾1’]3IºÔ,¦·–öËΪ!óÜ´ ¾YªÏ8Pœ±@9»ÿ ZµÒYãê3_~ó͵CxvÉÜÆ@‡"hÈÚÍ÷¹ÁxBËÉ·ˆÝÞ´ŒÅh 'ú:ï‰Ð/Ëólhû³ÎíÙ«6>·²ÔP777…eY&”®e/åX*€X#Q´€r 9 iÞ&²ÕïŶ›×Qã’[„(©‘<ÄܬÂO™HÁ G8ÎCcRÎçí–6÷^LÐyѬžTë¶DÈÎÖ˜gzÖE—…m,î4ÉZêæátÈ6QÌ#Ä?»– ¨’ ä+“œp¸×³¶û½¯4þLk›;n‘ð1¹v8É>´‰ñ;V¾Ðü%¬jZlþEÜ2'—&ÅlfeSÃ:Ú¼þÏÿè7ÿ’°ÿñôGôøJ4]OFûOÙ¾Ñ ý÷—¿nÙtÈÏÝÇ^õåð êfÿÉþÙT­ÔGÿ gÆÿôÿÉXøŠ?áløßþƒù+ÿ]§ü(ú™¿òCÿ¶Qÿ þ¦oüÿí”]§=ΈÞ0¿ñN‘gu«ù–÷°Å*}š¹YÀ#!28=«Û_þG¸ì'þJà4‚?Ù:݆¥ÿ ›öK˜çòþÅ·~Æ Œù‡Ç\W~ÿò=Ãÿ`É?ôjRvè3bøù¼ÿrç5IQÃÿ7ŸîAüæ©)0 (¢…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@aøÇþEKþ¹Q[•‡ãùu/úåýE qÏúÕÿ®iÿ ŠÃ×?Öè¿ö´ÿÑ‚·.Ö¯ýsOýV¹þ·Eÿ°½§þŒÖáÐôZ¯`»4ëeÛ·(Û·n8cjãþùAÒ¬U{Ù§[.ݸ‰FÝ»qÀãW÷Èú•d–*º.5›oX£¶õåøÎßï½rÖ*›ùË}3à nÆ$rPy˜sÎ;œNñ\¢¹¿™Ãÿy‘Æ«ý•u´«–'÷oÔ`c§êH퓟¬x«O»¸±û‹-,4y;TµžÝ”N†-$,²HÛq¸ìÈiQÉ<0¼),±£Ìû"V` ¶ÒØ_SµXàvö®HñMìÒ5Ö»y=ž¥ ¢M‡­âd¼dI\¤r+0‘¥Aµ€ÌX<†Î>‰â ÝWÅšE…Ö­cªÇk¨G2\Ú^Çuƒ%¥ø(^8¢Q)NÝ™‰,A@=bŠòÿC¬>“ñ-ìï¬b±o Öo$ÿè7mJ¡r0U°yç¥Igâ ȵ«;FÔ#Ž u;¨ÖÇM6ëu#}¾t/,.™h ,ñà‰·rÊé”W•èŸöo…|7§Ýx¶M:Ñ,Š^^HÖ¨ÖwQ¤ ¶D¼e€ÒŽ Ÿ'ÞÀ"µ4MKÅÚΗ«_¼ÞUõ¯ÙLZRÛ¤YÛ[O,,Ï’»‹<`žSÌbwaB€zá»ëWN“T–LÚÞÊf±M£ä¶ÀœðNð¾oÌ_7iûµ±@Q@Q@¯FagæôúûŸ~†_|þ9þ~¾ý{çç½z3ã?7§×Ûüûô4zûçñÏóõ÷ëß?:cC$ƒ¥Xªö ³N¶]»q»vãÆ6®?ï‘ô*É,Ut\j36Þ±F7mëËñ¾ÿÞ=z å¬U7ó–úg†ÝŒH2ä 8ó02çœw8œâ¹Es~73‡þ(ó#Wû*ëiW,OîߨÀÇOÔ‘Û'—Ô­u Y5ÍŒ7‡íïn!·š+K‘­ª¢Læs+Á±F1DKDÙ ƒ9e(é”Wé:׈îÍì²ëZjÇc£­Ò3§ú<Ò4—h’I1D&-±FÌȪ€Éµ Ÿmâ–šãN†ûÆwzmœ‰x^þil w2Æm‚ˆfò¶<_¼—j¾C®Ðê”W—Øx§Å7šöœ—·:tÒ}Œ6—4†9&Y"‰¦u·0´­µžU %USÎ0ŽZ7Ôÿ´ôýQ½ñl–÷1^Ç>©µ­Th®ö— c`ÑŸ,E‰·àgw$Õ*½ý¾§§\Ø^GæZÝDðÌ›ˆÜŒa‘ÈÈ'¥pvú¦¹Afñí[Ûë7H¢Aip—³æ]¸ýáòwÈC`lA%¥ªéâoŸjKý«£@a{Õû åÏü{œɚH–ñ!ÙR…\íºé”W7à­JMSFši/.ïJ\4i™à’9p«“ *¬‘d¨l† £¤ Š( Š(  ×£0Ž3óz}}¿Ï¿CG¯¾ÿ?_~½óóÞ½„qŸ›Óëíþ}ú=}óøçùúûõïŸ1¡’:õWï×äo~¾ùlªÕñת¿~¿#{ûûõ÷ËeT± ¢Š) (¬ËÝJéo†™i ÍÚF³J'œÃhÅ‚üÁ–%[ aNHùCG‰tÉlîîZWˆY@ÓÝ#¡- «HœdÊOÝã ‚@5謈Vï´5Y¼_wûï-|½ú‹ØEÿˉ¼¯/ÎËü¤yû¼ž‰›¾bqÉ`;J*•Þ­cc}ieq>Û›½ÞDAŒ›J†ÆmàŸA“ÑI—‹ì¡ÓfšÅÞIƒD±¶—lŠò¤~dcÏU.§÷dç*27@Î’ŠÈƒ_²mm=Û—XÃÈ-%Ž5‘€!XDLr¸ÛwÌ£’FY‹4k‹o-®&¹†|ù_gµ–Vp$…U,TnœaXí8n(jŠÈÄÚDןfŠåÜîDó– UyÛ|¼°tÇÍÎà$ ‰´¶æY.Z0ʨËg1óÉ+ ûÑ…-”Ü6Œôæ€5è¬ùu½>$jm3›RÊ™H]Ÿyp6[vó´®2A ÄÚD“Û[‹—[‹–dŠ‚D”²”Ü  ¤ ¹å;¾è&€5謈üM¤Jp·.dXÙà‘Vm+‰s Ü¹Q¹I8 Ñqâ=>ÛP’ÖIÐUüч.y$*¨S¼‘<|’Y@ IÀ½ÍÙøºÖi/üô¹ ß“oXÎgdÄìÍÒà“¶ÊúŒÝ_èÎ÷ òJmÕO)YÀ¦qq"ì%ÎBä‚#^Š¥mªÚ]Io’[ˆä–8æ‚Hœª2«® Œ^¸Îr2*í (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ ÃñüŠ:—ýrþ¢·+Æ?ò(ê_õËúŠâ:+Ÿõ«ÿ\ÓÿA‡®­Ñì/iÿ£n\ÿ­_úæŸú¬=sýn‹ÿa{Oý)­Ã¡èµ^ÁviÖË·n"Q·nÜp8ÆÕÇýò>ƒ¥Xªö ³N¶]»q»vãÆ6®?ï‘ô*É,Ut\j36Þ±F7mëËñ¾ÿÞ=z å¬U7ó–úg†ÝŒH2ä 8ó02çœw8œâ¹EgêKæé„w·?ÙöÍo kÈn6<+†Ã\6yÁϦO™®¨4{)ãðÛøby. [­wIŠ;+TR“!¢º´qŒ°l‹•]ªX1õÊ®ö6òj0ß´yº†)!÷•¡aŽœ˜Óò÷5åúïu7Ö·gU±†îÞÒk¯2[¤Š HqǾßuÃmŒòü|Õ*vº•Ø:άšgÛ/õï²Y\kwvr]ˆbŒX[Å%ÈF.ê˹ž8£,ãe%ؼŽxfy’)cw…öJªÀ”m¡°Þ‡k)ÁìAïRW›Ù\]Y_k½Ž¹=Ý»kzu±Œ¬ ÒÍ ”fRÊ·“pØÊ¹ òã úEQEQEQEQEV½„qŸ›Óëíþ}ú=}óøçùúûõõèÌ#ŒüÞŸ_oóïÐÑëïŸÇ?Ï×߯|üé ñת¿~¿#{ûûõ÷ËeV¬‡Ž½Uûõùßß߯¾[*¥QHfF§§_ùòê5Å´:‹@!e»¤ŠURÌ€í`T†fù†xfÊ·ËŒWð­ÍÞ“uœï¦¶£hö·©Ï!ËÊÅÇ• Ufi¤cŒ¯*\[³Ï«Üx‚=+JŽÅœÚµË5Óº€…À*÷‡oZµý‘ã?ùç ÿàDßüE;1\ɱðíÖ—¨=Õü?é9¹Y­‹nC<³Bma纒w…8 Íáíþë[+{ÖÑ[$rEåà4ª2/?&ìËÈ$ƒÁÜ_Cû#ÆóÏAÿÀ‰¿øŠ?²PFY‰SÀ?öGŒÿ瞃ÿñdxÏþyè?ø7ÿE˜]³øFÞ_>­¶Ä™gŽáÞk’á]Tå'ä\"ñ´žX†‚°Üø.)´½صÄÚ]§Ùߨ‹ˆv -åîlƸ;¸‡9Èè?²›oDco³¸@ÂFÜw6#A¹BŒ2OyX·¤ZÆìÒ˜x–ᧆàÊWw dˆ’€Ž€W·²ƒ¥Xªö ³N¶]»q»vãÆ6®?ï‘ô*É,Ut\j36Þ±F7mëËñ¾ÿÞ=z å¬U7ó–úg†ÝŒH2ä 8ó02çœw8œâ¹EgêKæé„w·?ÙöÍo kÈn6<+†Ã\6yÁϦO— Ó!¹²m>óC±°µÔ"šãĤ6Ð&ëk´òܱ–=ÊJ ±ÿ—„) °°Q^OâjÚv«©‹N¿u{XOq\[´6³H³<ʬð«+<ެ’´nt5ím+\Ö'Mníwðø6QG@j ö·Ùl¬ÍåïBI Þ_9 ‘Eyžµã‹{¯Åoaã KM½ªM{k5³¬LÑß3#«($ÃÁöÆ7sÐE®Ý¯€gÔ¦–I$40ݦÄÝœÑErÌT M›%g P.æ W @eG4ðÛ yåŽ$.¨Ø(,ÌG=ËîHæ~×5¿ké_ð’솵æóL’ÚçíÍ—24 ̃å:rA&œ¾&Ÿ^°Ò¦Õ5˜ìnç½Ñ¥·Ò#ò‘nÑÞÖV”+ƒ+#Ê2¬î°rCd×*8g†å Á,r vBÈÁ€eb¬8îGb®Ç©£Ç¨‹«Éô;ëèí3‰ªB“Éq‚ÅVÙK’¡`¯¸¬/˃—%æ¹¢ø~êëH¿»ž{íOZ‚ #N±H¦öThÀMìåá^˜Ì1Ó©QÉ<0¼),±£Ìû"V` ¶ÒØ_SµXàvö¯3×¼Gk­xªÐÙxš´m>[Y¤ÔlåÒÑä†ý´Œ¬ƒq§ÍýåÆ ¯¯k׿ڶ·jŸh×lõ @Ááý±¢+[Á ùj¢c½V3Ëa¼Ü€\zÅæïâ}JÖs.‘«ÂI¥ÛËëöÿ¾–T¸m¼È ýð³è7/›–;j~'ºÖ¬´‰õYí.âÓnn`ŠòL]Ìî#óläÆ]ûAÈjïïFagæôúûŸ~†_|þ9þ~¾ý{çç«£^ÜjtþlÐÞÜÚ™ €dO$*ÌÆæ À$àcå«]}óøçùúûõïŸ1¡’:õWï×äo~¾ùlªÕñת¿~¿#{ûûõ÷ËeT± ¢Š) å|Iþ³Ä_ö)ßÿìµÐøŸÅö³iÖ­¡ø†Æä•Ãj+¨Á²”0´¯Ëæ6ðÁ6‚B1ÈԡѼ]wª\,–qq"Æb©"1$ àzŠìn|C¦ØÞÞÛß\Çh–vð\MqpëAeyâzqÕqœñkbYæúgˆ5?ìgZPŽ SQKÁ`Æ8âHe‚Í%»]ÈΨ™o;ã]‡r¶Ó›x§X‡F¶’ãÄ“Bn&T“Kº‚[ÛÐ=«–†à‡w #E<"‚ά­è®é¤.ú­Š¤Ñ¬±3\ !èËÏ ö#ŠÊ¹ñï‡m/Å£ßù 4Ñ)’5#n+œ“¸ž2Ó’Þzµ>·è™µ<-zŸÃƒ~‰²ÖmßR’[„ÔîÝô÷1ƒh¯s3!Ú8) “‘‚¸¥é¾ÖtÕÒõ¦ÓWÆ7¶Oo¨3˜† &xŠÌWp-ŒÛ€SfÝ¿&*çü-Mþ}uûöŸü]T»ø¤ µžþ-á´ÈX+]Í/–ŠNí*§,^ãÖº?³q]ao[/ÍØøÞ´íêÒüÙI•5­&ã\ñEö•¥M$¶öF;ý¯c3Á‰#’6qæm¸–è¼sN2-sRHnþ[Co¤é«jv±Gkb+K•„j( )GÏÑþY:¿SR‹Œml4tŠîö5{4’ç&`ü#*íÁ=1×±«ïâǨÃ`Ú.œ.¦ŠI£Mßy cŸ3óö4gÕ_Šõ’ÿ0þʬ¾9F>²ù™ó_j>Ñn-,þáË&ªÅ¿ž±[évæØñÊÑ2å’ÁŒX/3¦€‘¡³âS¦X/ÚปX‰¬í.  R –GÄà²'›}ÒçjÆßfù8•j˜ñ¿Š~À÷Ïk¢Co+ÊóÜ,^Hg(<ÀÒ‚‡z²a°w+/PEIgãß±¶<¿½XT¬Ë‰¢‡ÍÃæ6òçŒúP—óÃÿAý™/ùùü Ùø‚ò-jÎѵã‚]Nê5±ÓMºÝHßo Ë ¦Z¨ .°•£Ô¼*× Ê žìÎrFñŸn1øÓÿá8×?èKÔ7ÿãtgWû6küQÿ0þÉÄýžV»©GüÎâŠá#ø«£Ëe~²•Uܸd{àUë_ˆþ¸ˆ¼·Z°llš$_“pÇãÚ”²ì\w¦ÿ?È™å8Ø+ºOî¿äu´VT~&Ð¥‰$]bÀ+¨`áTàú‚r±­Zå9ÃâV8§Jtþ4שOQÿP?àúVÿÇœ¿õÑ?“Vî£þ Àÿô¬%ÿ9ë¢&¬Y(Ìéçž4”~úo"@"žœðìÜð<²;ŠXnd)h™|È­üDz$/ ´rëCÆl¬r®ÿ.å! åÈû9rIUS“æÊ;Q¼ Q+Cå•ÁxÐÀS°9áW“ž‚S‚ñ…¡Ž6‘Ý"Œ¼»?–ÉP¥±ß89Î@Ç5fA;Cne¶y¦Ž>W ”! 0ïÎ2=8§h ŒùXòãX”«²ª‚L޽½M+à F±ˆ‚F¤0TfSwgp;³žsœÑ žy!•¡E’sº1`KÁÏ;ç[…î8àš|^q¹’k˜Ä1E ¶&wi&@H\ çgñÎ9©Ì0ùB%‹bnÞvÈû‰Æ2_;ºq×§yPä REUeää ÝrNr]‰'$æ¯̲̑<°I!ÔRFyTŸõl8÷¦G$ó]_Â…y\/ÚA$í8Ɉ`*Ђ¬<¶ÜåYä3È]°}âÙy³Œu4yâ1C±F>컂çïnÏ>cçžAŦ?Š"Ó@ ©Ûr;üâ¶ëÅ1i¤Ôí¸¾q[t€(¢ŠQEQE‡ãùu/úåýEnVŒäQÔ¿ë—õ-ÄtW?ëWþ¹§þ‚+\ÿ[¢ÿØ^ÓÿF ܹÿZ¿õÍ?ôXzçúÝþÂöŸú0S[‡CÑj½‚ìÓ­—nÜD£nݸàq«ûä}J±Uìfl»vâ%víÇŒm\ß#è:U’Xªè¸Ôfm½bŒnÛ×—ã;}ÿ¼zôËXª²G:]I41Då£UùßoM粓ԯsÔ>` TV^´mªÿnGé_d—íE]ؘv¶ü…“Ÿ—œ’@OêzdºÆ«¥YjSOˆ›PŠEžeF0Æ–·¯g&ØÈFe‘]zƒýQŽ€=bŠñü¦‡ñ ÏV×§‚Ââò[K»çžeT…ÞßSDŒ¾vˆ#‹pÆí›±–5Þx–xn´Ý.àËÚ·õƒDö¦) –#¬FO$±.ÍÛ¾Mô¹qcow=¤ÓǾKILÐÄlr¾¸«çójž±û¾­éZ7ž÷†˜mV?µ/’"Ì­fGvÆ7ÁÀ9§¥ë>$Õ®­~Ùª]éÒÞÞÃc-¬Vð¯Ù ÓRíÊ #fæR° Äc 0ôÊ+Êô/ꬰÝI®Çý¥5Æœ#Уíxf‚Ùæp›LÄ/›3ç~Îrƒ]¼m®MªµµŽ­h ãÅ$pM,Wéû¯m¢ò¦…#ŒÆvÎêÈÎí•Àu*Y€=rŠó¹õ­~ÛÆë¦kZ,P\[ÁµÔʳÞÂR3$€»œ´£z:F¦3¹@GÏ¢PEPEPkјGù½>¾ßçß¡£×ß?ŽŸ¯¿^ùùï^ŒÂ8ÏÍéõöÿ>ý ¾ùüsüý}ú÷ÏΘÐÉz«÷ëò7¿¿¿_|¶UjÈxëÕ_¿_‘½ýýúû岪XÐVV©â $„™Ì’“ƒX,¼g$dc·çO×çžÛB»–Ø4&\åA 1è 9튣᭠ÎÎÊÚ÷o™u,aüÆþÀÛŽ3ׯ®+²…*“¯Zí^É.®×ߢ== ‹ÄWm«Ù%ÕÚú¾‹äaŸߟCyÚéMgä¤×Ó" ŒÈ¬\À=ŒàÑai¿Ù)xÏò4ŠÌjJ‘0HÖ ÆL®"Clc€<šƒÇ¶pj9ðµ•Ô~e½ÅÌQJ™#r4 ‘Èàö®:ãAÒï-¥ži¬4©í {‹˜´éäF!$(„#þñŒ’ äL„ ¾½ 8…Ê(¨z+¿½Ý™ÔÍçJVÃSŒ>W{¹éZV“á+Dº}C]ðí󵺴\ I·HY ®2›L#~Ü’¶®BÕH4œø›Ã ‰%¸­©Ç"¡ó­ž8|ͪY Á2—+•‘‡ä·œÜøN!c=ÚÎìÑÚC0¶±€Jë›håi%V“rG™2ËÜ/ʧJ÷ÂZ4Ú׈-ìÎÂùÑÙ­wIHî¤d÷ØuÄe°I ü¸;•ITŸÅVG%L×Sã›7ù§¢^h–~'þÚ¹ñ† ÇpÒÛRGXK%œh¨Ä.á¶Ð’v® Æiðj:E—…ü+m‰¼96¡¡$DÆúš$S2Û< 7€JÞaÎÐ03‘ãv~ ¶»‡íÿÚÞ^–ñFñK*ì]å@ É2 æ :HÇN9m¹Zm¶™g®ÝÚêsÙΰïŽYåkI$ æ1~ð¡PÅJó»f~\ÖTƒ½¤ÙÆëKviDÒ“âxÅ~óõ2H E6Å4“^JÀž¥Ý*†ÆNÒvŽ•¹¬ø—Nÿ„‡MÕ´sÃ?g´¹¶’+½e`ÿXð°`U8òHÁ¨¯‡Ãö77qÍ6Ÿm 6Wb{èí¥—dömmö„obÙhàœüÅH2 8ä$“øsI˜ÛKki± Ò ¼Ìs›†ÓÚæ)²Oñ0q´p<ž~ø?U§ÝÚ˱èSC¢Û]KuiâmêèùSE1ÖÅ›CsæÞI,‹µdsw…¤†Ý›CG¹Ò´­jçW—ÆzíôòÄ“<—‘ š/"Þ9O•&øKár¬6«tF¬â´Ó´(u[›u¹¹–Ù!¸y8ÄkýÛ+>hSÃngM ËTœ\}žòòÚâþÚÒ8KB°ÄdܦF}Á¿s&ÖÏË–ä‘_S‚ݱ{iv>žÿ„ÏÂßô2èÿøÿGü&~ÿ¡—GÿÀè¿øªù¾ãÁv¿Ú—V:¬ÓKk|té<ëAû–Y|¥LHÙWxŠ–m»w)ÁÆTóuÝI{­“ê^G›û¼ýŸÎo“¾1´oÁiÁ…„¦þÐ{Yv>¥ÿ„ÏÂßô2èÿøÿGü&~ÿ¡—GÿÀè¿øªùÛÃÖ^©â}+S¼O²Ù^jékia ²Ì„!‹÷r’Ëòí’1» [æ,3÷Ÿ¤øÓíz#_j6Ò5Ìöo=‘š%/ÏvËæîÛ '1¨1 p¥¥ái­Ûµ“è} ÿ Ÿ…¿èeÑÿð:/þ*øLü-ÿC.ÿÑñUó}‡‡¢ñn©q$ÞHšT‚ÎI--¬ãšR Ø%`•Ï”$l0%rÀøkÃ7Œ¬ žTšN¼’7„•g’ØÈ' õç;z ðÞšûBö²ì}ÿ Ÿ…¿èeÑÿð:/þ*¨Ük>»§¹Ô¼54ÍÒI< Ç$ŸJðÒ´…ñ>‘¤À®ßÚ¶–°\$°°I<•qf"FÞF¡Líc\e]<"ZÆMLé»ÇOCé‰4ÿ†¢êºLlÊ@uÕFTúŒ¹úƒY‡Gð¤«.ñÖÆB¥d·ÄҬ¸{öô¯ž¨®Ø¼Dåë~ºþw;!žc¡ÿ/õ×ó¹ô$Z߉,6zîâ.&k˜ætU\8ÚìpO<äõ䊂msMÕ¥ŽÇZ´»³u~ÎèŠHà¶ žýÁÆzòkˆø-ÿ#•çýƒfþi^½{cm¨[˜.âÇpr0GpG"¸ñ¨sòV¦½c£û¶ge,} Bÿh¢½c£û¶’žÐäEt†fF«-äÄê>zwü"/üûÏÿsñuGöòéž!Ô´¸Ùä´EY0?+`zd‚~»}«ª¯?EQ©Ë]4š~M\LJ œ±wM&Ÿ“WZðˆh¿óï?þÍÿÅÑÿ†‹ÿ>óÿà\ßü]nQ\÷g)‡ÿ†‹ÿ>óÿà\ßü]ðˆh¿óï?þÍÿÅÖå]‡ÿ†‹ÿ>óÿà\ßü]ðˆh¿óï?þÍÿÅÖå]…4xfŽd·—|n².ë™X à¶ VÍP0¢Š(¢Š(¢Š(¬?ÿÈ£©×/ê+r°ücÿ"Ž¥ÿ\¿¨¡n#¢¹ÿZ¿õÍ?ôXzçúÝþÂöŸú0VåÏúÕÿ®iÿ ŠÃ×?Öè¿ö´ÿÑ‚šÜ:‹Uìfl»vâ%víÇŒm\ß#è:VN¹n÷:ªÅag}2ÛLÑÃxû#'| ’ÛŽ þéÆsXþ‹QK]}GJ³²Ô¦Ó‰bùÿãßsH¢5Øù/ò@ý ¾ùüsüý}ú÷ÏÏzôfÆ~oO¯·ù÷èhõ÷ÏãŸçëï×¾~tƆHxëÕ_¿_‘½ýýúû岫VCÇ^ªýúüïïï×ß-•RƆM \A$2®èäRŒ3Œ‚0k—:«¡L%Ñ'70±!­¦`Èõôê0zu溺+£Š©BéYÅîž©ÿ^G^Sœcgºz§ýya­I6±â *êþi´9ìöIâ×ÎÄÁ±Šü¹Éþ.˜Á£Iøa¤ÜÃq ‡íÀ¼ÚHÞÀ#È7£… ò÷•9˜õèÐ]ü@\Ãж‘&èäPÊq4ddzÙÔ<áÝCÌo±}šWÇï-˜¦Üc¢ýÑÓÓ¿¯5ßO†jÖpô³_Ž¿‰¤¿³k»Îƒòw_s³üN-¾êmo$'Űþò%„Ê4h„¢5c $ݼ.Å @8#9Îã—·Â=a„ÀøÅvÌÃHŒ4¿$‘–r,Åf9c»$’cáÄ–R±ÑüEc¨ó©b3É*WŽzc×Ö…ðÿŽ,â±ñ$3@[p{ YÉÀÏÞWÀöÏ¿zv„¾ ëç~ŒŸìì$¿‡]|Ô—ù£Ûàî§i P'‹a’¢ò’)£;¸;]ˆ,I0Äd Tßní¯¦½ÿ„¦‹‰·yy¤Gs¸“’ÄHì7߯^y5ÒǨüEH‘E°‘•@.ιcêq úBø»Å6lð_øJiæVûö»ö`Æ@pO¸>Ý©û K¿$âýCûoHJ2~S_æsRü¾šKÙÅù7‘,3¦¨5deP<Ì*ƒ`. ㊞ƒÚµ´×RÃã-¯ub4ùöZÖá6rü|¨£#ž:Öôž<Öa‰å—Á×é)fvg@êIòøÿøZšüúê?÷í?øº>­¶‘¿§+üƒûº§FŸäÙËéßnô¿0[x¦Iq¾+"9ã$g ²GeÜ2@8È Fy59ø;©›Ym‡‹aT“xÊèÑ+Æ®IdÃnæÊ) ó0ÇÌsÐÿÂÔÐÿç×Qÿ¿iÿÅÑÿ SCÿŸ]Gþý§ÿKêÙƒûîBþÃÆϦfjß ¤ÖµÖ»½×!:sß©,aÓR4n'kÉ)vÚYC¶HÜÄu9Ç›àmäú¬š£øÁÅô“›ƒ:Xla!mÛ†Ùy㮯þ¦‡ÿ>ºýûOþ.øZšüúê?÷í?øº0[AýÈGŒòé™ü'¾²Ôe»ÓºýûOþ.—ÕqÿÈþä?ìLgüúg=¤üÔô]¿bñl#d¢hüí)¼©8ù“ÌfØÜ.J૞ƒÚ|)Ö¬aŽ;B¦?/l§E‰¥Än®Šd-¼ª”LHÂŒ V¸ø%ì¬4ßßFŠ<ÆèTœðB†ã޹õô§ÿÂq®З¨þoÿÆé¼.7ª_7þÄÅ-më$¿Ì_ƒ—0<2ËâTš{X+IŽšªñ1UÙÃïr‹÷2ß!G ´äÃ=ÿÔÑÿ”ÿþÙ]”z¿Ä)bIA° ê;N¨2dcBÁñýžswa§Ø¬Àä¯Á÷>½±MR­êÁ|×蘿 SŸÇ½W´¥еý#þv¨åðÖu¯å¿Í´y§†ì4/ê²ê6šìÚÃÍk,RX˜‚ foQØÿCÑ=Ljõ³åGjtËVpRH‘@=pOà¦z× 6¦ip!±°·‚4{Ò0®Æà·SÐu5•\õ1´c.jtï.ò×ðV_™¬1XL:ÿf¥¯y;þ Ëó34]ßEÒy$“Gnø‡aÉüúÖWV¬êÍÎníœU«N´ÝJŽí…QPfQEQEQEQEQEQE‡ãùu/úåýEnVŒäQÔ¿ë—õ-ÄtW?ëWþ¹§þ‚+\ÿ[¢ÿØ^ÓÿF ܹÿZ¿õÍ?ôXzçúÝþÂöŸú0S[‡C½º°³½Ùö»H.6go›}¹ëŒýWÒôë;[xf†Êgh”;¤!äA©ëì>ƒ¥hU/´¥², r¤ /ðìþ.0:NÛ$½EyÏc°›ÄÞÅχmì§:ݺÜ[ïßm†xþn¸9èŽx‡Oñ]݆oa}%ž©%î•¥ž£"··‘m¹ ¡¤;šà3íÎàý6àzDsÃ3Ì‘K¼/²UV£m †ô;YNbz ž«x®-åŽh%@ñÉWR2#‚ç5ãþ֤Я!y­G Ø]$3MA ‰†Ÿ§ì„yˆbPÁåm¡AýßË€¤’ÃþIŸ‚þÓÿ ²Zÿjçî}Ÿì­ýü¿3ÊßÛníÿ&úô ŽIá…áIegÙ³]¶–ÂúªÇ°'µyÚ\JšÕ•Ÿ„/ ²ðåõÜVñËiIñÛÏäò¹Êå²ùªsõíz÷ûVÖâ-Sííž¡¨´ŠŠ›u·üò—þþþ&ÖßóÊ_ûú?øšCEMºÛþyKÿGÿFëoùå/ýýüMCEMºÛþyKÿGÿFëoùå/ýýüMCEMºÛþyKÿGÿFëoùå/ýýüMCE-Íŵ½¬Óù·–Œû|Ð3ŸîÕ=*éï´{+¹B‰'·ŽV ÐPN=¹ EºÃñüŠ:—ýrþ¢·+Æ?ò(ê_õËúŠàtW?ëWþ¹§þ‚+ ]!dÑ™ˆjÖ¤“Û÷‚·nÖ¯ýsOýW;âõgý„í¿ô1BÜ:‹ö»oùø‹þûVÒöÎßLµó.`‰Dq  á@' apr@ÆÑéÒ¸ˆþ;›ÁZd·Q¬óÜÍ3Cl¿7”­É˰à9Ûœ¶8ã$Oâ©å–ßLY%wÚvÇ ÄÿUÅcÐ~×mÿ?ßbµÛÏÄ_÷ج««…»™Vy@ÀçŽj/µÜÿÏÄ¿÷Ù£˜,tk¶ÿŸˆ¿ï±GÚí¿çâ/ûìW9ö»Ÿùø—þû4}®çþ~%ÿ¾ÍÁc£û]·üüEÿ}Š>×mÿ?ßb¹ÏµÜÿÏÄ¿÷Ù£íw?óñ/ýöhæ Úí¿çâ/ûìQö»oùø‹þûÎ}®çþ~%ÿ¾Ík¹ÿŸ‰ï³G0Xèþ×mÿ?ßbµÛÏÄ_÷Ø®síw?óñ/ýöhû]ÏüüKÿ}š9‚ÇGö»oùø‹þû‚òÕ¦XEÌ&VRÁŒãÓ,£ñµÎý®çþ~%ÿ¾Íd@ï/Ä(ŒŒÎ²¤cŸùjŸ__׿B&;Ñ,g‘z|ÃÛüGæ(Æq‰ç§Ì=¿Ä~b²úûçñÏóõ÷ëß?9×ß?ŽŸ¯¿^ùùÝÂÆ™¸@-4`™aõþ¢›ö»oùø‹þû–ìT†V áÈ ÿ°Ç×ß߯¾[†¾ñìúoÄ;? Ü ‡ŽöÑe†h‹3,›œÀsü8$ðrªác¶ñ·e§Ú!&K‰°XmPË# ¤µyÀ,2z ŽägŽ>!µiÒs¢êÆdVEéϹTHUsô•,Ò<¾<¤vsý™ ËÿËT­ªM:EÓê>3ie{)¦Ok›vŒn%H#3ùVõMmþµ¿ë›ÿè&¡¤EP0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(©›þ<âÿ®ü–¡©›þ<âÿ®ü–€8]Z¾º×Ößí÷—×·©5´Ö«1[Å$ˆ¯ùk½ƒTüí÷ÎGu}—Žg½³–î=ù¡h{fŽ ÎõfUóÁÆ>_›ò«‘œ Ý"é6+ q,XîZévÊÊÎÎÌr2]²:Åz*ªxgK‰%X£¹Œ:ì]—“)…2ȈoÝ.Ur©´ c bÁâ«Ïµß^¸±¸Ò­t´¼˜Ù^yÁk€|¦Ø<ÂDJ%B‘Æy«Sø›Qµ¿‡L›H…õ)¤V8/7DÒfV.ȧƒnû†Ó€AËZ‹áí)|¼Zð±´L¦F"emÙŒâ\—sóîåØõ$’ÛÃúm¬ÑL‘M$ñIæ¤ÓÜÉ4€ìts±%@‘ð¤à$ œÐu‡Š¤¿×žÅ4»Ÿ²‰å·[‘¸`ʼnŒF(À#•ÊŒµ¯/õ+gñ.ªºŒÆ "L¥‰Ž?*D[h¥e-·xb]°w` Ø´M>@ß$.&ÜΪfs;gs¬dìV9l°Í“óä^ø^î]v}JÒöÎ1,‰1†x.%Bꪡ™ÂÆÌ6)`#jž£4ŸªøÖïìšÒÙi÷1­¼‰ à†F ,*ùfÝ•·td ;J‚£$-«ïKáM2Þ9¬¼ã o=ÜqÝÜ]É {‰ ¼ÄIÈ 0Æ2¤€HÓ>ÓgŽ_¶Ãç<ñºÎ«$‹ gR²:E¼¬lÛŸ,¿7Îß1ÜIŸUðþ›¬îûlSñ˜dònd‡ÍN~WØÃzòØ 76:œšƒâ?ʾ¼žž¦mBÍ$IHhšî:“N1»©Ç2CâMN×J¹ºº´†dþѸ¶‚5•iFéÊÆ|¤U@»¾`x,W’4î¼'£^Í$—ó0“Ìݺ•b̈ÈäF`fù g,OSšž]Â_;ò4‚W[{Ù¡¹ÉÉbN1¸œœžh‡‰gûW€îî3 y¶ªù‚O23œ•°7/¡ÀÈí]D?ê®?ë˜ÿЖ¹¯Ã¿‚¯à‚4ŠíÂ$h¡UT`è®–õWõÌèK@ÑE ÅñV®š6„óÈlåžHí¢žVP"i.ü7 °äws’24^j6öºp±Õ.ŠÜ¤÷/yå#y=ÿ"> ÕÂô‡'ƒ]«aqz-$´–Ú›Yüè丅¥U%Ê®œáÏRG¶pF*xB{hê:ž ŽJÉ•ÓÖ{6gqîf’@XmúÐ ²ñ„·À^E§ ÒŒö°y­p|ýÓ¤,Ÿ»Ù·Î€üý‰à<;âYN‡¤Z\Dój2Áb#ß)-p’Ħ,Gî Éò¿Û\êZxSOµÔ®ovY'ŽXm–GH" h£Ê ±ˆ1†®Gû Õ«= ëya8·´²[;H0r¹ùþbrÛ‚D9éåð~c@tQE*êò ¼ÿ®ÿ š¯áïùt¯úó‡ÿ@cSÿUçýpýÕȳ¥ל?ú£ *ÃñüŠ:—ýrþ¢·+Æ?ò(ê_õËúŠàtW?ëWþ¹§þ‚+ñ8o²éì±É&ÍB cBíµ[$€'ÅtW?ëWþ¹§þ‚*4‘âmÑ»!é•8 oXÖtÝnÚîÎûAÕç´¹Èx¤°~A9B8 ŽASWÕÿ´RÅ"Ó5eò¯`™ËØÉ€ªàž€ö®Ïíw?óñ/ýöhû]ÏüüKÿ}šwC-Ä’.“­a˜°Íƒ÷5ü$ñÐ'YÿÀÿ è¾×sÿ?ÿßfµÜÿÏÄ¿÷Ù¥ ïü$ñÐ'YÿÀÿ ?á'‹þ:Ïþ?øWEö»Ÿùø—þû4}®çþ~%ÿ¾ÍÎÿÂOýuŸüð£þx¿è¬ÿàÿ…t_k¹ÿŸ‰ï³GÚîçâ_ûìÑ ïü$ñÐ'YÿÀÿ ?á'‹þ:Ïþ?øWEö»Ÿùø—þû4}®çþ~%ÿ¾ÍÎÿÂOýuŸüð£þx¿è¬ÿàÿ…t_k¹ÿŸ‰ï³GÚîçâ_ûìÑ ïü$ñÐ'YÿÀÿ MðßøÍo>ÇyoiÒDZêÝ£Œˆp ×sÿ?ÿßfÀ¾eœÈžÿ0÷úûú÷럜2ÇÎdO˜{ý}ý{õÏÏCíw?óñ/ýöhû]ÏüüKÿ}š.ªjéÖ¾{Gqq’Se´FW$«ƒ×sÿ?ÿßfµÜÿÏÄ¿÷Ù¢àr¶WO¨ø¹.ÒÊöRÁâ-snÑÆD dŒtÏå]%Mö»Ÿùø—þû4}®çþ~%ÿ¾Í oõ­ÿ\ßÿA5 Jn®J´òx ¹æ¢ aM’XáŒÉ+ª êÌpãN¥Gd`ÈÅXt àÐOí;ùý¶ÿ¿«þ4iØÏí·ýý_ñ­µÜÿÏÄ¿÷Ù£íw?óñ/ýöhÐFö‡üþÛßÕÿ?´ì?çöÛþþ¯øÖ‡Úîçâ_ûìÑö»Ÿùø—þû4hö‡üþÛßÕÿ?´ì?çöÛþþ¯øÖ‡Úîçâ_ûìÑö»Ÿùø—þû4hö‡üþÛßÕÿ?´ì?çöÛþþ¯øÖ‡Úîçâ_ûìÑö»Ÿùø—þû4hö‡üþÛßÕÿ?´ì?çöÛþþ¯øÖ‡Úîçâ_ûìÑö»Ÿùø—þû4hö‡üþÛßÕÿ?´ì?çöÛþþ¯øÖ‡Úîçâ_ûìÑö»Ÿùø—þû4hö‡üþÛßÕÿ?´ì?çöÛþþ¯øÖ‡Úîçâ_ûìÑö»Ÿùø—þû4hö‡üþÛßÕÿÏÔ ÐõWF¼»GØ0¡oYg¯ Àg߯ÒºµÜÿÏÄ¿÷Ù£íw?óñ/ýöh“þÃð·üö_üÉÿÅÑý‡áoùì¿ø1“ÿ‹®³íw?óñ/ýöhû]ÏüüKÿ}šw“þÃð·üö_üÉÿÅÑý‡áoùì¿ø1“ÿ‹®³íw?óñ/ýöhû]ÏüüKÿ}š.'ý‡áoùì¿ø1“ÿ‹£ûÂßóÙðc'ÿ]gÚîçâ_ûìÑö»Ÿùø—þû4\OûÂßóÙðc'ÿGö…¿ç²ÿàÆOþ.ºÏµÜÿÏÄ¿÷Ù£íw?óñ/ýöh¸Ÿö…¿ç²ÿàÆOþ.ì? ÏeÿÁŒŸü]uŸk¹ÿŸ‰ï³GÚîçâ_ûìÑp9&Ð|*êU¤B¤`ƒ¨I‚?ïºÔ¾—IÔm½Íìf"A+Ùv=J°ÈJÙû]ÏüüKÿ}š>×sÿ?ÿßf•Àäÿ°ü-ÿ=—ÿ2ñtaø[þ{/þ dÿâë¬û]ÏüüKÿ}š>×sÿ?ÿßfÀäÿ°ü-ÿ=—ÿ2ñtaø[þ{/þ dÿâë¬û]ÏüüKÿ}š>×sÿ?ÿßf‹Éÿaø[þ{/þ dÿâèþÃð·üö_üÉÿÅ×Yö»Ÿùø—þû4}®çþ~%ÿ¾Í“þÃð·üö_üÉÿÅÑý‡áoùì¿ø1“ÿ‹®³íw?óñ/ýöhû]ÏüüKÿ}š.'ý‡áoùì¿ø1“ÿ‹®‚Ò( ³‚`¼qªÄdmžüUϵÜÿÏÄ¿÷Ù¨‰,Ř’O$žô€JÃñüŠ:—ýrþ¢·+Æ?ò(ê_õËúŠàtW?ëWþ¹§þ‚*šçýjÿ×4ÿÐEF‘¼­¶4g=p£4Ú*o²\ÿϼ¿÷Á£ì—?óï/ýðh 7Ù.çÞ_ûàÑöKŸù÷—þø4 7Ù.çÞ_ûàÑöKŸù÷—þø4 7Ù.çÞ_ûàÑöKŸù÷—þø4 7Ù.çÞ_ûàÔrˆð*È¡Çóg#F(h©¾Ésÿ>òÿß²\ÿϼ¿÷Á h©¾Ésÿ>òÿß²\ÿϼ¿÷Á h©¾Ésÿ>òÿß²\ÿϼ¿÷Á h©¾Ésÿ>òÿß²\ÿϼ¿÷Á h©¾Ésÿ>òÿß«««çkÚÅpÀGÔA÷ê(¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ *»Ë[ Wº¼¹†ÚÝ1¾Yœ".NIàr@ük/þ ÐǤàt_üUmQX¿ð˜xcþ†=#ÿ¢ÿâ¨ÿ„ÃÃô1éøÿ@TV/ü&ÿ¡HÿÀè¿øª?á0ðÇý zGþEÿÅPÕ‹ÿ ‡†?ècÒ?ð:/þ*øL<1ÿC‘ÿÑñTµEbÿÂaáúôü‹ÿŠ£þ ÐǤàt_üUmQPÙÝÛj6ñÜXÜEu™ $[ÁäW>Ésÿ>òÿ߀!¢¦û%ÏüûËÿ|>Ésÿ>òÿ߀!¢¦û%ÏüûËÿ|>Ésÿ>òÿ߀!¢¦û%ÏüûËÿ|>Ésÿ>òÿ߀!¢¦û%ÏüûËÿ|>Ésÿ>òÿ߀!¬?ÿÈ£©×/ê+o#Ì’<ñ¶×^êpìpAúXž1ÿ‘GRÿ®_ÔP·Ñ\ÿ­_úæŸú¢õWõÌèKEÏúÕÿ®iÿ Š!ÿUqÿ\Çþ„´ RÕ5[MÕno Â&‘b($”îc…E'“€=ÈH«µ‹âˆîæÒ¡K;¯%¶Ò˜âxÔ…Žd‘Ž]”tB=Hí’›TWŸ\øJìÁ{$d"îXõI–E1‡7->ëI7gï„/µº¦HÊæ¡µÑ®õoN‘§ÿgßÝL>­º8üðÏpˆ›™£o™@VG!rXG£Ô6·p^ÂÒÛ¾ôY$ˆœó#”aÏ£)…qkáƒyªÚ:h_Ùº8¹¥°- ¬7*ò‰Š•2#$°RmëhöhßÚ>VŒ†ê{ö–K”hÐ\G-Ã6íÙÜLhç!€ä¹Îh¤¢©=Íòùû4ýÛ.cŽ?ß(ó"m›äöÛ¹þSÉòøû®Ð2®§ÿ «Ïúàÿú ¦øSþEí/þÁëÿ¢©ÚŸü‚¯?ëƒÿè&›áOù´¿û¯þŠ EÊ«¨jÚ]›]ݳ¬*ÈŸ$m#f  *‚I,Àp;ÕªÅñ]”÷ú Ao×.m¤1A(ŽFT¶±eÃmSƒ¸sÞšðê04Ð%Ê(m¤\[IgýÙ9ëŒ~Uj¹Y¬//tûXlôËëág{ëüÈ#8.žbI#‘&võù6ïdŒ‹=1n5íCì^û-ÌZ£%îØì‘$ÌðeX¸ÊL *wã8$€G Ô0]Ás5ÌQ>ç¶E0ÁX¢¾=þWSÇ­p+ámB[[Kq¦=´‘­¼z•ÂL‘¶¡*Ü[»Ns±ÌÛŸkþó’q»i¥UÖ®ìôežXÄ–rÅåF $1"Ûn?2e£$q°sÅtôU+«›è¾Ûö}?Ïò­„–ÿ¾Uóåùó?wSæ<|þÆ®Ð0¬?ȵýuŸÿG=nV„?äZƒþºÏÿ£žŽ‚7(¢ŠQEQEQEQEQEQEQEQEQEQEeëßñëcÿa]?ÿJá­¯µÜÿÏÄ¿÷Ù¬]{þ=lì+§ÿé\5©GA}®çþ~%ÿ¾Ík¹ÿŸ‰ï³PÑ@Ļ՚ÆÕînnåH“!˜’IÀY‰ 2I “U­üMȃ˾¸ <æÝ#‘$Ä ›YXC±K|Àd`÷­¬ÚO3X^['›-…ɸÌ rFTÀlHHÏ€ PwoWðæ¡â-JÛP’²Wž%x%(å#Š+že ÛY]æÑ«§q¸…vÖš³_Z¥ÍµÜ²@ùØá˜ÆFz©ÆA‚25?Úîçâ_ûìÕ;IgšÕæßìóò0áÀ ã!‡U8È$‚2ÈPßk¹ÿŸ‰ï³Uµ Û´Ón.¦VX\‚$ ƒƒOªºŸü‚¯?ëƒÿè&€0þÈŸ¥×ÌÿúQ%tÕÌü*ÿ‘?Jÿ¯™ÿô¢Jé¨`‚¡»»‚ÆÕîn_dIŒ $“€³@d’@&¦¬ÍfÒyšÂòÙ<Ùl.MÀ€¦`c’2 žbBFx$Jƒ¸,Ø_èÀÓ@—(¡¶‘qm$ œ÷dPHç®1ùUªäµû{ßXÛ¤úâÚ¤Œd·)e,ûÀ YâÙƒ <ïÎÜqœçi>Ô"°·–(ußµéíö¶diü´ŽÙgýæs–pF~lž»¹wÕV;ø¤Õ.4ð¯çAS³6•‘F=ógê+ˆ“ÃW2hÖm£MÄ2Du9¡[V}P¬n¥Ç˜JÉûÆWýðSÜ|¶¼-£Ýéw“´Ñ̰5”EçKºíšá¶€*íYmQµ~ê’4ÓÑE ÃðçúýsþÂrè GŒäQÔ¿ë—õxsý~¹ÿa9?ô£Æ?ò(ê_õËúŠ}EÐè®Ö¯ýsOýU;«¹ììåkk)/%pG¢crKÇç‘õ.Ö¯ýsOýT4€Ãþ×Ö¿èYŸÿáÿâ¨þ×Ö¿èYŸÿáÿâ«rŠÃþ×Ö¿èYŸÿáÿâ¨þ×Ö¿èYŸÿáÿâ«rŠÃþ×Ö¿èYŸÿáÿâ¨þ×Ö¿èYŸÿáÿâ«rŠÃþ×Ö¿èYŸÿáÿâ¨þ×Ö¿èYŸÿáÿâ«rŠç®ujâÖh?á|ÄdÝö¨N21ýêÑÒÆ•áÛDkI&¹†Íb0Fê }›q’@à÷ÏAÆkBŠ.ö¾µÿBÌÿøÿGö¾µÿBÌÿøÿ[”Pö¾µÿBÌÿøÿGö¾µÿBÌÿøÿ[”Pö¾µÿBÌÿøÿGö¾µÿBÌÿøÿ[”Pö¾µÿBÌÿøÿGö¾µÿBÌÿøÿ[”Pö¾µÿBÌÿøÿSxjÒâÇB† ¨ŒS•Š€Ò3A#¡­EQE (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€2|F—¤¬š}™¼¹‚îÖå-Ä‹G£š2Ifù@?.ä䃜Þÿ‡=hC$ƒ'r½08>£ÿ®==ê5¹S¸4v6 ´:ã9Ï<~?›#bc2yY˜þíÝ@ ’½G¿p$ô¤¬¢FR™#ÛŠh·‰>@ä`ñœ8Ž:þ…0ÈâQ¸2 ÜIÀÆ“ž}ÿ.aI-mšYFŒOÎ@ FIaž„çs7~Kw¦ØX”ªÆL•ù{àžÃ¦;ÿZ{K‡EPq#9鎿×òú‘Y®a‚V%V3 .Og`ä€yq×Ó¯fÁyn°â'†(ÐìHº 8íê®2ñ`¹-Â’ÄñQ¦Æ%x;qü[‡ãñãÿ׊ƒí‘´»VÁ2»±èz~^½³U­²ß92J¤+g¼Ž3þ~%ÂÆ¦$Ø>`¾F›,Žyj2r79À¶{œœt¬×ÖÁ"¿Ýlûþœ}jŒ·qKa¶ÙÜÞX!³»<þÛßGÔÑt6äžF†6…K1`7l;NFsޏçðþnwhw;qåS–+ÎÐ99ïŽx¬O·)HÑ­`(ˆbÙ°m1ž©Œp0cÛœÔwÃZ[^^Åmܘ÷³…À}ªq»¹üÿúêè,jj+ö½5…ÜQY´Yżò%Ìl»X"ˆ>f?{;[<╵åãK¦u|q”ðÞé¥Ê¼L<Æy" ‘³.õÉ%ìhò¯§^Ç©i–—ð«¬W0¤ÈÁX3ŽüÕš¡ÁCoO4“º V–@¡œ÷ŽÐO^€V~­}siq§Ån²*Op«,¢ÉîT.GÈv01–É"B .Ó»ªçRŠŽ –æÞ)ÐHD¢HÙ3ʰO±ŽõÚ³¨ýŒ[ÎqšÓlÄk“€»V8cœù±¹wX¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ª@píKEQEQEQHNŸ¥EŽ7 ¶)Q’Ààc'œvà@ï]û7 øÎÜóZDq"’ 2‘Ðã¿Ó¯~´§w `qÁ<óô¦™QI±·®GN3Ÿ§½6&‘°¬Adùdm…CòƒÛŸSŽs‰j¤ò"šã{n?(Á,£àмã¯\à «&¨ìWÝ‚WyQÔwàôéÛ×”®.LèÖ“mL`9Ã@Ì2]¼çœ½½i²Ü8‘þÏÌê9P'æ¾è?0À'“žœ‘”Ú½ÃÄT…Üs†Î}ýÿJ£q¶èœHèÛ·'Ÿ"†-Ôœ0Ïc Š\Èv5ouåµ Exx—%•‘e, ÌXóÏÖ¢»Õ.’ébHíd?h(Î@P˜3|™ØÝžs]!’W‘áVgglb£p`À.pÞݹ'&ˆÒ8ˆe/’ÅÞGvcµ—$±'£·94sí1"HêZhägDÆÖÛ»1•8íÛ4—‘ž@LJƒƒ‚—×®zŸlQP«ƪ®ï̱cú±¢¦ã±a¯%iV_—ÌÄFïç? RÉ{$ˆ`îÝü[³œä{“ùÕj(¸µÔŒÙàÃ'ƒ’sœç9$çßÒ›o{$7pÂ4W·dçÏ\°ç·ÍØûNìÛy>VßÞy™ó¼½Ÿ6wmç5]|‹o\êz¯ØdÖmaÞ£p\€9†z××Ú€dó,ˆv ¨8'£dƒÈÁöçx¢'ÿEFÞ\í<˜ý ÀÀÏÓ¿NÕ“o®Iq®j6 hþUŒKç]†loòŠ’v‘âmLYf-8¶ÈäŠH$“e¼r’Êã*K3 íéŽS_NñuµÌÉrm˜FÈ©&™3^Ç+0c±  f‘B–e p¥[8' ì,u†u *¤—zª«æ0T gf>ldƒ‘ÉÆ3U¥C3—’òøŸ÷¡ûJ²_ÄÚDi›—*ë½™`‘„+’¤Ë…ýÈX3n 6~ëbµ·Š­Êyu 6ËÌÑ”‚$!Vé !CÌ@ …8Wc7>Οó÷}ÿ}ÅÿÆèû:ÏÝ÷ý÷ÿªÞ Ónüѳ3E”§Ù¤ Á~ðU+—e$+*䫤ÅG‰´‰'¶·.·,ɉ)e)¸*H#rÊw}ÐM 4þΟó÷}ÿ}ÅÿÆèû:ÏÝ÷ý÷ÿ¬ÏkK­höw ÈnžÒ ®5;ä@ûA9ç;rHIûÀz.gOùû¾ÿ¾âÿãt}?çîûþû‹ÿÔ”Qp#û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün¤¢‹ÙÓþ~ï¿ï¸¿øÝgOùû¾ÿ¾âÿãu%\þΟó÷}ÿ}ÅÿÆèû:ÏÝ÷ý÷ÿ©(¢àGötÿŸ»ïûî/þ7GÙÓþ~ï¿ï¸¿øÝIE?³§üýßßqñº>Οó÷}ÿ}ÅÿÆêJ(¸ý?çîûþû‹ÿÑötÿŸ»ïûî/þ7RQEÀìéÿ?wß÷Ü_ün«j*iw„Orÿ¸~%d#îŸî ?­]ªºŸü‚¯?ëƒÿè&‹ÐøOþDÝþÁöÿú-kb±ü'ÿ"n‡ÿ`ûýµ±ZQEQEQEQEQEQEQEQEQEQEQEQEQEQEQErmVIcx gØn#J’2=‰†£W´½ŽÚéV9Óým¼ªŽAPêÃ#•cÈìǶi°ËV„O²Ñæ`å¾LŒ’ÿ3tûÙ;ºäç4ÀsNŽ|¦Œ4¤œFÄtägžØ¦x5F{ÔŽEš)e˜³.Ï¿ŽœžÁ¡5NêùçÈûK1ÃtÁè1íÌþ5N³l«/,n¯ž)î5’î±TÒE¿9 ÕW“xWPºžÝîõ•œYÃåÚ»Û1”°–Uæs!ó`]Ø »-÷r1¯ý»kÿ ö7—7›åîóð<ý|Ùÿ[³çÛŒíç¥@|Q¦m´Øïläòm§žêE¹Söo)£RßnIبÝM¢ëÖw—ðÉq¬oß46Æ4t Âbp½Î{ToáËù¯©6¥luXÚ3 ‰hËTYTŒÈXœ\KÈqüO©sÓôôQp9ý'Ãsèze†Ÿ©yPÃ+*ù‡ddÞÊ ù<ÅsËmÅôÞÚù¼ýš†Ý÷1ÉîTùq.ÍñûîÚÿ1äyœ}ÑWh aEPEPEPEPEPEPEPUu?ù^×ÿÐMZªºŸü‚¯?ëƒÿè&€¥kõµ¿…4½/NÓn`¸Ð…Ã5ÕãÂÛ£.ØÜ‰GcœŸ»·æé5Kë‹{CE“6·²Íi$;Gßòše“w_”@ë·Œù¹ÏÊËÐÅý¥ý¿Î»Ž+ô…‹ìðœî—Ÿ½·”rsZ—©h:¶©¦ßß,“9Ú[x¿t%8R ¨i?w{ÎÔ Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š)ƒ(¹y2“€>¦€ŒÆèª2RK.ä`ç<ðÇ9ÏÈœ¾ ã¿VñòB©f É'µdÞÆoã{KˆÑLöÎ’¸PþJœºe8èÜt#•àMu«E¦Z}£Tź™š4ò÷K¸s³¢ðÌÂÿx…’3‰¢jGUÓ/'2Ã([§^Þ[¨€Ê¬Äª°ù€àa²7ƒæ?â»Ë»Ë…ŽâÏQšwDfò­îÝ XˆÞ#°ºÉ\¶Ñæ+ˤÝŒ§Â³ù°ÝBßk”í¹…ãc˜A'IêNO÷·d¹Ì¬¡h\”ï"ý79;l݇b&„gð/ŸÎŒÝÏŒŸ÷þþ9\Ö49oøE5/·ilMö¿ío¶ù8ÈÙŸ+ê÷îû7É×¹Ïzª<-¬4z]³ý…aÒ- yîZ壚ÞEÞ»?v[àà¾ÝÿÅŽ{<ÝÏŒŸ÷þþ9Fn¿çÆOûÿÿ§¨:L¶ «ßjqCÜÜý§Ê´w¸Ú« iò+3~ìœîÍbÚ ï´§ÓìMâÌ/nnäŽXn¬Rh¤šGTóÌa‘‡˜Œvä…~é&» ÝÏŒŸ÷þþ9Fn¿çÆOûÿÿ ?IðÆ­§Mhñ46²ùŽ×W }$åâ7Ê!)$x“‰1æ’® ÈÈk¾е?é–6ÒYÊ<»´4¥‰W_-%ÚØË©Em»°TªŽP…N7_óã'ýÿƒÿŽQ›¯ùñ“þÿÁÿÇ(Ô Ïý§ûÿ/ìñó“»wú“ÌÝþßúݸãîg½]¨óuÿ>2ßø?øåºÿŸ?ïüür•€’Š7_óã'ýÿƒÿŽQ›¯ùñ“þÿÁÿÇ(°QQæëþ|dÿ¿ðñÊ3uÿ>2ßø?øåJ*<ÝÏŒŸ÷þþ9Fn¿çÆOûÿÿ¢ÀIEG›¯ùñ“þÿÁÿÇ(Í×üøÉÿàÿã”X (¨óuÿ>2ßø?øåºÿŸ?ïüür‹%n¿çÆOûÿÿ£7_óã'ýÿƒÿŽQ`$¢£Í×üøÉÿàÿã”fëþ|dÿ¿ðñÊ,”TyºÿŸ?ïüürŒÝÏŒŸ÷þþ9E€’ªêò ¼ÿ®ÿ š›7_óã'ýÿƒÿŽUm@Ìt»Ï2Ù¢Còe¿„öV&‹ÒxOþDÝþÁöÿú-kb±ü'ÿ"n‡ÿ`ûýµ±ZQEQEQEQEQEQEQEQEQEQEQEQEQEÏÿ²Y¾„‘üú~TâBŒ’éÍ1{oU]¤}îù¦1õ .&qqkqm|ÌûÉÝ€ÄÊIôÀÇÍ‘…ªju;HÌÂ)Y†åËFqÆTñp@Áã—xŽî mkDÞ¢S4“" +€DlKQÇA‚¤n=AaXQLóÉ¥;íÉ´<*…ý_@8…8|HRøMJÒ¶ÿ[×GÿÑf³kJÛþAmÿ]ÿEšÉÌÚ(¢”­µ2òú[+]FÎ{¸sæÁêÒ&å#àç½]®/L±Ôá¼´žõ3§Ã«^Íq[0š'y¦Dg%Žø™es•PFPò¡˜RÑ,¼Gq â]JðjfL“[Ï"í]T»ÈÁ•ua„*[§É@A¦K4P y¤HÔ² g`f!TsÜ’õ$W ©Ç­\Ágy-Íõ­­ëMq,Ios+@HŒAHdCå‡,2Sy|õLiZ­æ—©>§6©<‰wb|¼˜ÿv‹k$ïÆ~öVO¸[ ¤'%·»y¢‰âI$Di[djÌvÁlS…'è¥ 4R¼©ˆíl‘U(Ø ƒèpÀýõ®{W‘-ãðÝÜpßKkow½±o4Òªi”\3–Pw äóYñZÝë,›í-«Ç¥·,[f¸¶êl¶”©™¾S߀;J+ÎôßøInu-:ãP»¾†å–Ñ„"Êb­Š36ò`C¿Î:ÃÏ–+Ñ(¢Š(QEQESŸWÓmfhn5He_¼’LªÃ¿ šM¥¹P§9»A_йEgÿoi„Ôí$nÉÊìÇÐ($“ì94mZÿÏ+ÿüŸÿˆ©çs_ª×þG÷3BŠÏþÚµÿžWÿø?ÿGöÕ¯üò¿ÿÀ ÿøŠ9ãÜ>«_ùÜÍ +?ûUäæÛM¿;·–±`úbVSøãýhþѺÿ -ÿý÷ÿ£Õêu²õi~ šVö×ýoÿï¸?øåÚ7_ô¿ÿ¾àÿã”s/éÕçÝàQÿ3BŠÏþѺÿ -ÿý÷ÿ£ûb$ùgµ¿ŠAÕ>Èòcþ”þþts úµGð«ú4ÿ+šWSÿUçýpýÔ?ÛV¿óÊÿÿ'ÿâ*¶¡¬[>›t¢+ì˜\ ØÌCܧùãÜ_U¯üîgaá?ùt?ûÛÿèµ­Šå<1â :ÛÂz4w/=ºÇc¼ÓÚË „ýk(LÀ9ÁÈÆr+WþŸÐ{KÿÀÈÿÆ´çr~«_ùÜÍj*½ž¡e¨Âf±»‚ê%m¥à:ƒ×¯#ó«IßcEÅÚJÌ(¢ŠQEQEQEQEQEQEQEQEQEQEQEŸý¡)sæ5ªæl‘˜Ç$É@ÏáÖ¯‘‘ƒŸ^+÷IÒ¯Œúu•ÃÊÊÒ»ÂÈÊ6©;Éñ×ïwÎ09=cPPñVƒ"\¤ÄK0;\6Ñå6:TÖŸó ÿ¯Cÿ´ëdèZE˜ûE¦•cÉ÷dŠÝ†pè}{õç/iÿ0Ÿúô?ûN?‰  ¯ZVßò oúèÿú,Ömi[È-¿ë£ÿè³Y¢ÙˆÚ…’9G¼·VS‚ ª?'ö‡üþÛßÕÿ¾.®B¬ò€89â—íw?óñ/ýöhÐ ÿí;ùý¶ÿ¿«þ4iØÏí·ýý_ñ«Ò_Ím$—n‘ ,ÌÒ¤š¡ÿ ,oÅ­ÕÍá<jU-ýÒãåSõ#àsIÊ+sHR©=b®/ö‡üþÛßÕÿ?´ì?çöÛþþ¯øÒikÓs+7Ü]éîQA×ùõš´ßñõ­ÜÐ¥¨+/¹;˜pö0y¥ÍÙìmñÉ/Çò¿ãbµÿö©Á¨fÝ­¼Gq²E ‚3ƒžpOçLƒSðö—h-­.ôëx!ÎØ-Ù’B¢÷'<’MY“H²Ÿk‰ï1÷~Û+ÜlõÛæÛž3ޏ•£ÒÁ C Q¨TDb@àAG¼¸]ßÜ¿ù# þ:N-¼éߺìò°=s.Ñøg>ÝhþÝ’_šl£^„]_"6}‚üs×^ƒíw?óñ/ýöhû]ÏüüKÿ}š,û‡´¦¶‚ù·ú[ò9ÿ·ÝIójèðgþYàÍ·þ½3ÿ|NzÑæ >i|J¨çªÛù*ƒè1üØþ+ û]ÏüüKÿ}š>×sÿ?ÿßfŽTX—D¾åú«œÿ•¥¿Í>±4²¯ý ÑçþŒª??:>Í 7\Er½’êñ§P}B»¿^O­tk¹ÿŸ‰ï³GÚîçâ_ûìÑÉÁõšý&þóŸû…ÿçÛGÿ¾"«]éV°¬6÷PÄ¿u#uUøµ>×sÿ?ÿßfµÜÿÏÄ¿÷Ù¦£²&uªÍZroÕ™ÿÚvóûmÿWühþÓ°ÿŸÛoûú¿ãZk¹ÿŸ‰ï³GÚîçâ_ûìÓÐÈÏþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿÐû]ÏüüKÿ}š>×sÿ?ÿßfÏþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿÐû]ÏüüKÿ}š>×sÿ?ÿßfÏþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿÐû]ÏüüKÿ}š>×sÿ?ÿßfÏþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿÐû]ÏüüKÿ}š>×sÿ?ÿßfÏþÓ°ÿŸÛoûú¿ãPÞÞ[\i·‰ Ä20·rB8'ö­oµÜÿÏÄ¿÷Ùªz´òˤݬ’»%Ήþ@Þ½´>Ñm…Ô&u±¶V‹Ì1޹ ôÖìrG4I,N¯¨eu9 Bq\‹¢ßj>Óç’ÏNu}2Â8Ä“1,±¸«~ï€àòyQ×·e¦ÚIgjñHT³\O(ÚxÃÊÎ?0­ ÓmÚÆ~±ÿ»j¦µ”×MPÞ"Ø«IÀïÎ:­u¥øRÊõmî´-.0´ßh’Ú•H$ò]{cžµ©}mwöûkë4†Y"ŠHLSHc9CÁ[‘åŒsž¼sÅ•óë7žM”ÿe¶•7;²5öò£km&3’pç®9—¾†«^*Ñ“KÕ•îôÝOÙöÝRòÛ~vyÚÕÂnÇ\fNzέa¼_-ž³ª[GÔ§š³äúî™]‡nÇ2Nráðýü0Y–Häš;(­cÔf·Qå–Ëód7BÜqœ×Geµ°··X–%Š%A¹p 0à=OZ\‘ìTqußÄî¼õüô1®ÛQÒöF¾ ¶‘åÏ•ýº4Ò¿÷Scħ¨À#9<œˆ^Ô-ì-.®&Ñ^;¸„Ñ=ÍËYÝ„I’22CwÆ8ÉÒ¼±»kùæ·ŽÖhî­ÒÞU¹'¹ÎÐð|Õ%zu猨|? e’9&ŽÊ+GXõ­Ôye°À¢ü٠зg4rö%âg{8¦½-ùY’Ýø·û*é,õ-9£ºd2~êî\ã!¤t=û¨ä62jÓø·E‚x¡º¹šÍ¥ÎƼµ–ÝOÍ"é߸õ§>æ×û:k-÷ZÛ5·ÙÞvªÛ´“,WœçŒ`Ǩi7·7I2É3B±;¤òÛl`I-ˆÎd7Ì1ƒƒóE¤¶cö°>æ×çÍú§‰4Y#¶ÕlnewTXẌ±,@é»ß>¼q“Å\¾½[â‘â‘ÖI£„”ÇÈ]‚‚rG q“ÏJç®ü;quáí&Â}7KºžÍbVyä$(FL…&2pá0zc?ÅK©xfy--×M o2¼rþÓ˜EFV eYà”q…ì È?s%£kåÇOËï:š£w­iš}Ò[^_ÛÛÌèdU–@¿(8ÎO¿O\t5R8×ü{?¾ëþ}~‡¥gu÷ÏãŸçëï×¾~tƈn¹¶~ý¯Ç×õëÎ_–´ÿ˜Oýzý§]M×6Ïß¡õïøúþ½yËòÖŸó ÿ¯Cÿ´éÓø‘3øMzÒ¶ÿ[×GÿÑf°g¿Û3[ÛA%ÍÂýà¼"gûÎxAÀË`‚Š·o¤‹Ý8˪9¸ß¤æýÙ?wyàrùäeB犖¶GJ¥eÍQÙ~?wùØ¥&­‘¢·I®æRT¥ºn‡U.pŠG¡`1–ùz­ÏÏšt"Üy¯õÀ邇ëÏQüFð|Q¬qêj‘  ª¶²€ tl§ÂÉð—ý¿òZ_þ&´ú½g¼_ÜÅõŠQøõzÿÀü©Fsig©Ë,·š’k2ÚÆ.ÌÚÙ ÷T¬i¿(/?wp.Ò¼Sw–—s«l±Ód°Žev‚Kƒs‹o6B%JÃ|²)fHf$íKoü>³¾–öÖ[8.æÏ›NNæ “’2sÞ‹oü>²º7V’ÙÁpc™b°u}€!3´PN¥RÃÔ[AýÆs¯Ï¬¥™Z]S^¿Ö´½:îlµ/Rh¦šØl+%µØÁ'|ÿ«n|Á×îñó3þ=Lk— ih“j7 ‡È€®è¥¿ÜáDàˆIÚdÝÕ±†p×þ,·ÒÄ.ÊíÒŽÖ`/’6>§Ö­Iã‡ÒÚµ¬’Ù½»F˜šÁÊBJ.6cj’Hx§ìj+ûˆçsR]cPo é-n„ëã#ˆN#’^•J¦ç –A [iÍkÛ©¼7ª[ÚiòÍqo?’gK¹ä¸0—¹†!™‹.åyp Á1d)Ä?ÛÁjI1¨D-eUU€bÀA{m§ëO§Ú^.%µ¶°Qb ð°ÉU GÝ#'Žhö•ýÁÏ榣âkÛÏipþîCk ø͈ ÊÁ¹cØá@rĽo/ìÿ ·þKKÿÄÔ7~=ðEý«ÚÞ^ÃsnøßÖr:6FAL@?…?aWù_Üñî2þâÿA¾ÖßOºßi§h©sä^´·ß7Lv“#•\ç$€ÆZ†ëP´ñ6¡,Ö{tÖ{á±d–èŽeuÈ<yÚ3œL "Eösmdp£g9Ç\óWGÄ?¬ï8ÔLê¨Ò Yw2‚HìäÍ©õ£ØÕþW÷<{ŒÓ®uŸø?M”ÛÜÁ9‚ ¦inÝoƒFs¶H û%œŠ[æfä„çæw?V'¹¨áñ¿€íì㳂æÚ+XØ:@–2*+ÜP˜7ÍõæcWù_Üñîh——[Ö •üwÚ| h“Ån·&$rî®KÂÿ0P#á[Í%vèø~î{í9ç4ù’¤s`:5‘–98àï@­;²W5ªøËÀ:Ý‹YêwPÝ[¶~Im%;NʹVÁ8#gŠžÓâ…­­R)|A5Ó®s4Ö®¹Ï;#Uöà”{ ¿Êþàçs±ªºŸü‚¯?ëƒÿè&¹ïøY>ÿ ·þKKÿÄÖæ•©i>(Ñî®,¯[PæÝÝ" î+“Ãc±K¥8ë$ÐÔ¢ögIáI#Ðb.¢FÓ¡eLò@2@ô˜­ªã£Ó´•ŽÁ&·ŽäXÚ HþÑj¹ÜÉä¼tûÍÇ4íVÚßWºYç¹m@‹´†D“$ ‚sÉÎ¥%óv:ú+ÛRû5¬0yÒKå O2X÷;`c,wrOsYÚ´ºÄ±É<¬¨eŠAa&à¸ÆxÎp0\nöÐëjÞ±eat–÷/";¡ ”  j‘’HÆFqš£m©}šÖ<é%òÐ'™,{°1–;¹'¹¦=ôo ávó"‰âQåq‡(N~n¿ ýh¸4í¡£w«ÚXÝ%´ÂàÌèdUŠÖYr àœªž„ŒýG¨§OªZ[Å †F•f]Ñ‹xÚbëÇÌJò9éÈõÏyh‘X%¶¡ulÖVæÚ7ŽÉd;>öìŒü‹Ð µi-µŒ»íË*‹x­•<¼…H÷mÆ_9ùÏSØR¹>ñ¥>·co,1—šVš/:3oo$ÁÓ˜Rä~cÔUøäŽh’X^7PÊêr„â¹F‘Io¨][INCG d‘,‚FvF2?­hÛjZZÃmÉ (#Eò‰Â€2_ÒÆ¹¯©nÿ\ÓôË”·¼¢‘âyW÷NATRÍ‚2'ÏOQ@ÖìZÎÞégŽáKDÞFvQü[îÛÈçäzŒäj"ÓT¸‚k’Å VU‚°9cÁ ´ú«0ïNÓÞ 7g“,¶ÚQ¾ ~X÷m<7_œçð¥qZwò6X²–ya‰ä‘¢„NLp»)B2 °l󀤓ƒŽ† #Ó™mÙ Ó‹ˆŒÑl²™‹ 8Ý€9˜=ÎR¤&ò®n"iRtg·ï¾s»ª–m§¶ã×4^Egy5Œ…¤ˆYcÉŽö Ñ€ 7#1¨ÇOÇ Lè Ùkj"ŠêÎá@²Ç¹]NIVCȪØfçL¿º²Ç"-þl'uv>v é¶2œq‘„þØÿkÿ ÿöu®Í©ëÚ­‹"lã‘‚Ì_y9äñòŒ~>¼LÞjAY=;tûž„ÿkÕìy½³ŠîûÓØ’×&ÉÀ+» /8G¯é²(+;nóR&¢u’6s„Þ„n@Ç¡`Èõâ "]FýÚ´ñùAc*!`“’þr¶ÕåyE,prUkí:æûÚLWš=ÅΣ“¾_2/6ކB$.,à©ÏL╤¶«NWRŸuþ_äÒ:£$bUˆº‰K*g’2@ô˜¨ä"ýl‹0¢2¨ØØ* Œd8ÎyÌ]蓦£e}.šu‹Q ÄÖ÷B¸ƒ;JÌBÈi3n˜î|ñ<¬šæ¡gpúd·Vð[L“Äp¡eo-‚2HQÜÈÜ |ÈÞá©t&¥9EsGUßüû|þW6n4]*îvžçL²šfÆé$YŽI•fÞÚ H hc†ÎØãPª2rp½sPØ\¼rjú,š“-”P˜ä0ÊÑJ¥¼Æ;ß>PäNÞqVN—uötÒÚÇpº{XÜ’ã÷…¶»7%2¯ž ù¸S“LÅ>¶:‹í}«ìű6Ï0)es‚Aã¦FzŒñÅ"ÓlôÕÖm!,b·n.¢ŒÛËàî¶TÆwG–ùG€+CK¶šÛKÒmN“pöãL+¿¯^rüM¼†ý´Ø!wHRج²§îòˆsGBç Ù+Ókó7Ù ³GdkéLj¶1±œ²ûáH±`yþ<[5 ºB¨ 2¿ÕÒ†³±¬¿wMMîöÿ?òÿ†5 ·†Ö†Þá‰~êF¡Twà Ö¶ÿ[×GÿÑf³kJÛþAmÿ]ÿEš”D›nìùŠÕÿ„_ÄôÔÿðOð£þÐ SÿÀI?¾“ž=Ï3•ö6ìô‹-sO¶²Ñ`Ó^êO!&–w¹[¨äHÙÛŸ$§˜áFÐͱ”‘ÄOÿ¦‹go¨Ís«}¢Ý,LŠöþL³A žÜcŠvB¤J@Üàýã·åÒøÍ-b·ƒG½¶lÄ–ºX‚S°‚»¤DØ*­É?2ƒÔO?ðš™ÒA£]*ª²ý4uX ÝËbJ¡ÉRr‰ýÕÆ7}$¾òíäeivöÐéWšÅͲ^ iá·Ki•¤Ys!ˆ#À#–8ZÖ«¡Àº Zý±ò"¸òH´°Œ»\©ÉÎÐm‰äáÀ$•ÜͰÒ×¢5ö£m#\ÏfóÙ¢RñLñáWl¾ní²s€Ç ["-?ÅðÉe"i:˜6q40ƒbÄÙ™HÛ†Rd|†È!ˆµñŸUþÙ¶µ‚iͽ»Í­’—DBÅãóT"ëÌbBy%AÀh-üo5ê[aÍ>-BéŒi’’,ET$DfÝ(ÎX ¸ –;¾Gˆl?u¡øYµ·ûání…Ì‘KÞHŸÉS`/+†Êƒž*Åiã¯~Ö4AäòÝ–M8ºx÷+ìeQZ¿ð‹øƒþ€ZŸþIþÂ/âújø 'øQÏáÊûTV¯ü"þ ÿ §ÿ€’…ð‹øƒþ€ZŸþIþsǸr¾ÆU«ÿ¿ˆ?è©ÿà$ŸáGü"þ ÿ §ÿ€’…ñ½àÿ i~ ð¯‰îïïRÂm9`– © عó2Œr…ÙÆ3÷O}ðwþDkÿû í%¯'ñ*Àð V»+´bÚM¬ÊŒr@fÁ÷>µë ¢“Bð ÚÄm§(Ôx<@ù±Á<}k‹ïMÙÞíÑø–†Oį‰ZŸƒõ»]7M³³“̶É%ÈfÎY”Œciç'9íŽ{xo/5¿Ç}§ì´½½°[ï;–)<®N9‘Û·NÕSPÔ<«yÚWz畟/í2C&Ìã8ÜN3ùUßøJÍoklñ¶á3B×.Íå#¶ß)ãù”ðZ®Úø²êæIGöàöBîqÈ“ïL»6PìÌar*Ù;H Ë%çƒå³û)ÕôõÏ{…hõŽ’;33+«†RK¿B8b:QçƒíRe·ÕôøŒÐ$tÔ@vP]³»~wn‘ؾwÄ’M’ì˹Q|c)–Ü´VÏ$«$b k²è²ù¶Ñ¢Ëº%xØ4ÿ0ÆTg*Ä€-/‰59µ1¥[éVm¨Gæý I|ËìXlq-‘pUpCx& |ªiîÛ]|Ù5-òÅ båË(ðÙÜ»i5çƒì'Žx5}?ÏEuódÔDŽÁÊnÜÌä±ýÜc$’€08£’]ƒ™w.>¿çi:MÝ…·›.­³ì±Ï'”èš_€m¿"7@Üàt9ã+­·²¦— ·Ó­Œ÷Ì×d:ì’hÜD¾^ÝÈ,S9\íç½çƒÛK¶ÓF¯§¥µªªÛùzˆGˆ*ídW ÜŒƒ’ ‚i‚o-­Õ°ÔôÏ*êÛ쳃~3$yrrwd±2ÈK}âX’I£’]ƒ™w.jÆöãÄZvŸm©ÜØÃ%¥Ìò5ºDÌÌ ¯úÄn1#tÅd'Œn£k‘%¯›,;avÜRÙ ÍsJä#4H~Ï’I`7(8œ¯ˆnt]b{Ií¼Q¤ÚÍn²'˜nÜ1W*H)ãã(3œô1Éo'‡/¼C¤‰¶Ç¶™xÖ*±Fba&<#ô r8ùE’ì˹g@×e½×u<¤ÅçI÷-Áx£‹ì¶ç÷LGï÷Ïsm,¡ºªæc¼ðd#êZL@N“¨Žñc¢,jW òˆ®AøJã  ÔRi=Ê„åx•,o¾ÕæE,~EÜ8B[;sœ2ž7!ÁÃc± u“âô[Ö#ÿ_¦Ç%À<ÔwÆO\0û2£vàëRO£.¤U”ã³üÿ‡_—˜QEFAEPEP7_ñìþø¯ùõú•×ß?ŽŸ¯¿^ùùôn¿ãÙýð?_óëô=+;¯¾ÿ?_~½óó¦4bjÿºÖ4Û†¬‰5¨ÁÛ$鈛¡êîw»Où„ÿסÿÚuÐjö¿lÓ¤E.eùᘠ˜ß³_½Ï<† œ1ßÌi—K;鱕1Í¡uùxaê§ØŽ *ZTõÿ#ZÞý×ÙÑý÷¿ãoøtoV•·ü‚Ûþº?þ‹5›ZVßò oúèÿú,Ô£6d˜’~Óx3ÙZ,¦c'õ£ìéÿ?wß÷Ü_ün¤¢‹ÙÓþ~ï¿ï¸¿øÝgOùû¾ÿ¾âÿãuÌØøÎ+­R{iåÑm¡‚{ˆÜ>ª>Ы8,b1Œ &ï½Âœö«SøªÐO`"“ÊŠK–ŽëíÉnñF š@ûd Bæ,n#0ê7>Οó÷}ÿ}ÅÿÆèû:ÏÝ÷ý÷ÿ®e¼kk­qÁà°†ä/sk<2RåÜ…d˰ pÞä´Ç‰´³Èd¹VVUòÎe‰±ÞÀ…s¤|ýÓƒP4þΟó÷}ÿ}ÅÿÆèû:ÏÝ÷ý÷ÿ¨týBÛT³[»Fv…™Óç£`ÊÅX`!”ŽGjµEÀìéÿ?wß÷Ü_ün³§üýßßqñº’Š.gOùû¾ÿ¾âÿãt}?çîûþû‹ÿÔ”Qp#û:ÏÝ÷ý÷ÿ£ìéÿ?wß÷Ü_ün¤¢‹ÙÓþ~ï¿ï¸¿øÝgOùû¾ÿ¾âÿãu%\þΟó÷}ÿ}ÅÿÆèû:ÏÝ÷ý÷ÿ©(¢àGötÿŸ»ïûî/þ7GÙÓþ~ï¿ï¸¿øÝIE?³§üýßßqñº>Οó÷}ÿ}ÅÿÆêJ(¸ý?çîûþû‹ÿÑötÿŸ»ïûî/þ7RQEÀìéÿ?wß÷Ü_ün³§üýßßqñº’Š.gOùû¾ÿ¾âÿãuÎ|E@Ÿ µ€$•ÿyoÌ¥IÿX?º ~•>¿âý;ÃZ¾“g©Ÿ& GÍU¹-„‰—fz)ß÷»`gŒ‘Äù&zÇýt·ÿÑ‚µ¡üXú¢gð³çŠÑðý„Z¯‰4½:vu†îî($d 0Vp¤ŒƒÎ gU­2þ]+U³Ô`Ti­'IãW©e`ÀÆE} ½´<õ¹Ó^x7̇Ί)´VŠ)&¸µÖ&ýâD¯‰A©*ÆRíÉ10RÌBÕß Mk§6¥,ðÚÙùPùm)’O:W·IŠ)Hð­‡Ú9ÀfÚÍXö—òÙÛ_A¡[Ø!D‰&G=súðMj¯‹.ãŠçʵ¶ŽæâÑ,^éPþBđۿaSœ©9$Œ¸ÎÓCº5/|Õõ‹+NÙá±»hį ¢¥Ã²È¢,³·9)Æx³•«cà=OR‘šÎhg³,©w 3ÊŽF#2š)Yù:ò» oÞ–½u´³Yo·5Ô_2ÈÑOHAl"áÎÈ\2 xšdÓàÓîl,ï,¡‰PA7˜ •’WW%[póäqƒÈ$JÕ,?t4Ý×nôí\ùSÚïCoö¨àó%V SÎ|¢`nlœƒ³hå­X¼/esyÞZÛÅ|SQG¸IZ _$J$WîHî\‹€r7s¶Ú„q_Muu§YÞù»‰ŠPñƤœåDL˜îztŧñ-û½ùR‘­ä nQ7 9ÎD`Ç“’QÜwM©_A&»Ø³{i®Z¥4÷{™KGr,ÒŽˆØy;%þîkÊÊÂßJTÕ#¹¸†yä·† Y–&ÜŠŒìÎÈØ‘NrNWh =¿‹¯í¥¼q ³‹­=lXª*Â!(ÝÄ7 ßí¿8ª6±³­®,­¯í y‹Ñ}¨ø²”e`HA*¸µÑhxyîmMݼÐÃçE-Õ­”²3M%¼e÷>à>Q™ÉRv/* »¯]Á{=¤…ÜÖó½¬Ë”lœ+²Åó¢îg1:®ÝÀ°##5‰¦[S vqºÅ,ó/˜^Þ —‰r¥y ˆoœüÜ hêž,¶Ô|I,ðZ¾¦Ïª‹é¤³f2aØ«å݂Ȫï»W-ß óßOëúüÃÝ9ÛÛ lRÔÌɺæ8Œº5$… àUu=ê­ZÔ¯åÕ5ïfTF•²#Œ‘¯EDœ*€ÀÚªÖªöÔ–ô—®·_ö ÓôS×͵ô—®·_ö ÓôS×?ች Ùé4QEy‡HQE_P¼NÓn¯¦Vh­¡yœ Ë “Œ÷â¡ÑläÓ´->ÆfV–ÚÚ8\¡Ê’ªÆ{qUî?âup-cçO†B.ØýÙÈy#ÔÁsÓåØweÂëT­]ÍçîSPêõ§ë÷ ¢Š*ŒŠ( Š( n¿ãÙýð?_óëô=+;¯¾ÿ?_~½óóèÝdzûà~¿ç×èzVw_|þ9þ~¾ý{ççLh†ë›gïÐú÷ü}^¼åøõ¦M Ç!Šd´%þï‚;©î?,ì.¹¶~ý¯Ç×õëÎ_—³m 6‡“Ûý]IÊÌœ4KêB9 ô[YØ…_˜´nO@®@Ÿîœ7Œ`ž‚ÛþAmÿ]ÿEšãïá"¹žO+K+l2© ÝÀREè|Õó0û‡oátƒ–:ðé:äžeÑn¡°™›"Îð,ÉÀRDè0[³ m&ÆNïB¡RvÔS‹ó½Ÿ£éóõ¹=ÊÉŠìîÚÛRÔÈ cî[6¾Y{™CápU•U€,Z?»¹¶tqxWÄ2!oøIàf_ùÄùéíZZåN‡Ä¿Ëäú™’hˆžÔô¹ × uö¶aT‰žG*»ŽÝÃ~'8®|hþ$»‘µËkËWxÌrJ‘Cm•ÎWJÛþ†õƒöÿÂmÿçöüòûwÚ?³ÇüôÙ³nÿÇ9ü+CMðçˆïô»KÇñ-¬m<))D±YK(8$ÃzŽZN âÒ»/Q\‡‰Š¼?©Ãe§kt×P©³-n‘‰ŒÉˆç çÓ>„‰5ƒâ'[¿Ó¶ —ìš,š·™ö»ö1_/Ž3½ŸÂŸ³‘j”ÚM-ήŠå.ˆm´O j_ÛP7öÝͬ_Ø@ò|åÝœîù±éŸjƒÄW>!Ðu[ÛíË)>ˤÿiy“Zˆƒþ÷ËòÇÌ~cÛÔ8Îhör`©M»$vTVv ø‡VÑ,5/øI ‹ívÑÏåÿgÙ½Cc;Æqž¸ª—:wˆ`Ôuk?øIlSì|W¾uŘŽ3¼Ì0í¸ìQää·<7N9žVdôvfåËéøŸT µ›DMcL}FRÖ|Ûª¬?*Œüä´Ê9ÛÀ'Úµ!Ñ|C/ˆotŸøHàf´‚çÍþÎ7šó.ÜoãNsžwvÇ'+ š”W/¦Câ}Qü4"Öm51õKYónª°üª3ó’Ó(çoŸj’8ÍiÏ›ýœ>o5æ]¸ßÆ<œç<îíŽrôÈ|Oª?†„ZÍ¢&±¦>£)k>mÕV•F~rZeíàíG+ šº‡‡ôíSWÓu;È|éôï0Û+rŠÍ·çÇv=3ž¸!šÝ”óÚËó( 6ÿÜ(òî>fŽßš„Cÿô1ëß÷þ?þ7Gü QÿÐǯßøÿøÝbÚø»ÅÚ•ž–¶Ou6•m©\É¢:´6 Y.¢+´FyÜû³œ&;W¾)¹ñ‰mmsc¥ý¯JšææÎæÔÝys#À ïIv<Ü08bwdmwü QÿÐǯßøÿøÝðGÿC½ÿãÿãu›â¨®µ_øtèóOukyhòL-õyíãhöÀÌ‚'PìiädüÛUM‹róÑF‡S‚÷H“JΕta3ÏupŠ¡Q¤óUf’L†EP Ÿ?+³,kþ(ÿèc׿ïüünø@£ÿ¡^ÿ¿ñÿñº£y®øÒØt˜,­.µ,¢º½šÒÕd‹t¯"„U–ê"ùGæËnÎp˜ÁйÕ|M.³£Ø[Ŧؽþ™%ÌñÝ#NÖ’ÆÐ†£¨”~ûn>L`¶ã÷áþ†={þÿÇÿÆèÿ„ ?úõïûÿÿª±ë~ Öõ Í¥^Øéöº¦‰%ûÛÜÙµÎ×Üýá$dàMŒtlƒ‘·´‚xn­â¸·–9 •Ç$l]HÈ Ž#œÐ+ÿô1ëß÷þ?þ7Gü QÿÐǯßøÿøÝ7Ä:÷ˆ¢ñ i:çy‘\Í/‘ÙóEUÃÜA·S‚ÙÏðãæŽÿĺÖþ~«¥¤Za–ÎÙ 3J—¡W6ÅüÕYœ“ò"2aù]™` ¿áþ†={þÿÇÿÆèÿ„ ?úõïûÿÿª7šï!½‡I‚ÊÒëP‚Ê+«Ù­-VH·Jò(EYn¢ /”~l¶ìç Œ WÄÒë:=…¼Zm‹ßé’\ÏÒ4íi,m` :‰Gï¶ãäÆ n?p€7þ(ÿèc׿ïüün´ô Ûè“Ç{{w-Ðd{§V &ìcjï¹íXQë~ Öõ Í¥^Øéöº¦‰%ûÛÜÙµÎ×Üýá$dàMŒtlƒ‘·cP¿Æµá‹Ë+¿:ÖþYmHI7C$oβ pX+r6»úätU{Ûû]>-Üë³l@~ó·eP9f88Q’{ æu_Q½Ôô[M> ìín.ÎnnÃD'dÝc1(åL„0Ea BØ“™rKCXQœ—5¬»½õå¹Ô]][Ù[½ÅÝÄP@˜Ý$®W'$ñÔYþmÞ±òB’ÚiíÃÌûâžOUT ¦òCpv•z–×IT¸KËÙ~Û|¹Ù4‘¨är"Q÷ÉîXŒfÀÆor¹¡OáÕ÷éò_«ûºŒŠ(à…!†5Ž(Ô*" *À‚ŸEF ßVQEQEQE2PZ&P»‰Çþµ—×ß?ŽŸ¯¿^ùùôçæ0H'óÓüþG¥fÎyàç9üý}ú÷ÏÎ˜Ñ ×6Ïß¡õïøúþ½yËòÖŸó ÿ¯Cÿ´ë©ºæÙûô>½ÿ_ׯ9~ZÓþa?õèö:& ¯[º/üy¿ýt?ÈVnè¿ñæÿõÐÿ!QËf•aÛøzÊ(Ëiæm5þ “ìAó“1±Çe'ôܨm¿Õ7ýtýÓqOr¡Vpø]¿_^æüOl¿ç×R„}`˜(üÒG#þ¹®G`~Sþ x?ä%ou¦wßtƒË±2¡h×'Œ8ã‘j(åkf_µ„¾8ýÚ?òümn­ïmÒâÒâ)à|í’'­ƒƒ‚8ê¬CÁ–ZŸˆ›Xºº¹‘ž¶{WŽ¢W°«FI†sœúÆ4î´-.îáîd²‰nÛºˆysð1Ä‹‡qÁéÇJ‹ûk~l5{øù„SH.›ý£ /Ž€…uöÁ$Ð¥5Шû4ï 4ü×ê¯ù}ÅCGÓ5o/ûKN³¼ò³åý¦“fqœnÀüªªxWñ$‰ƒ¥¢Ê»$U³Œ\†Áã‘•ê¥/üT0Ð.ûwýt´Ùÿ£wgþŒwÏö½ì\\h7êýd°¼R ÇR >öÇɸÿwQ€:z Ю"ãÇ—–óÏ Ñí™£ÐÆ²¥o÷+&@dܱ‘‘óá!°:nâ~"^#…M$ ¡®´¬/p<ÊÙN;€Æì¹Vù$Éú½gÿŽÎëM±½žÞ{»+k‰­›|K»DÙ*HùN@éè)š†¦jÞ_ö–gyågËûL &Ìã8Ü3ùW+©|C0Ïe—£\ßMu¦ Mc;Ãyl@T4“æ'9ÎqósWu^ZêÚ ¾Šòjx„Óù2BꛊȅNrA$|ØR@ rÈJUoŸ_¼Ú¾Ðt}RuŸPÒlnæUØ$¸·I.IÆH)×gÓ¼1o™¡wªè‹|×2]ˆH¢/3ÌQÚ§Í(î8Ú,6.5aµìÛ .Ækèm!¹»ß¼Q§˜]Uca æ)2J§z䀉nä’x/³$)/†´gHSdJÖ‹¸¶åànf8É=êæ§¡húß•ý­¥Xßù9òþ×n’ìÎ3Àã8=aÿÂ]}{q£&£Gs±¦BÞK‹Ï'ÊÆH”l ²® ï;¸ÀqcR×ÚëÁÚ¾–Ò[¾¨–©k$Š¥ 7/i!^CóCmÎÜgœÐšÏƒôÏk–:–¨>לREŒðC,~71…·|©Èa¾…³©ªé°êú]Å„í"$É$D‰º«¡ íu`Obí\ÿˆ¼cq¤k#K±Òd½mÒâV)rUUÙÕ@ò ˜ç1¾wíÜí%ñ…Í»Ï-Þ—•Ÿö;ê¶ïw;¬¬TȒı±Œ¡u ˘m wܺд{íF FóJ±¸¾ƒo“s5º<‘í;—k‘‚Ièj=KÃZ³p·¦‰¦ßN¨dºµIX.IÀ, ÆI8÷5ÍÞøãV±–ÚÊOcS6‰uun’\NgTPð[I–ýÛg!G÷KòF„þ&ÕQÒ­4ý{jZ{ÞF/.~Îöå {’eØÅp%Qòï;¸*Xljz­ù_ÚÚUÿ“Ÿ/ívé.Ìã8Ü3ÓÐV~³àý3Ä厥ªµÇg‘Gc<ËßÌC¡mß*rco¡lç·Šu‹ýGBþÃÓ,g±Õt§Ôí×o‹ƒÙ0㜒y~}RúâÇ^ÐÑdÍ­ì³ZIÑ÷ü¦™dÝ×å:íã>nsò€@.jZN›¬Û­¾©§Ú_@®cº…ePØ# 0#8$gÜÑy¤éº…Å­ÅîŸis=£ï¶’hUÚÈ9BFTåAÈô•«w¨Ú}‹û;KûwWé Ùá9Ý/?{o(äæ´(OøVd…%ðÖŒé l‰ZÂ"wÂü¼ Ìǹ'½ÿ†-üAqaq%Ì–óعx$ŽÚÚVV%NAš'*APr¸÷Î7(  y|)áû:ÆÂëE±»µ°ˆCj—p,þRpOE_®jÅÖ…£ßiÐiךUÅŒ|›i­ÑãhÚ»TŒ @ÇAZP^¥á­Y¸[SDÓo§T²]Z¤¬$àã$œ{š°úN›%½¥»éö“£ÚÆÐ©X Æ¨àŒv«”P~§¡húß•ý­¥Xßù9òþ×n’ìÎ3Àã8=G'†´ž—DÓ]á·û,LÖ¨JC´¯–¼p›Y†ÑÆ ëRŠË“ÃZ Ú\:\º&šú|/¾+FµC7<ªcüÍÈÏ­jVuÖ¿£Y\=½Þ¯aéÑËrˆË‘‘Nzj/øH “å¶±Õ'˜ýØþÃ,Yõù¥ ƒVƒ'§ž=Í–³Wåvïm>òmOBÑõ¿+û[J±¿òsåý®Ý%ÙœgÆp:z ‘ô6K{KwÓí 'Gµ¡R°2 !AŒ)QÀ#íU´5‰ÿãÛCò±÷¾ßv‘çÓo”%ϾqÛçÙuÛŽ&Ôím£nJÚÚ“$}ð$v*}2cäg…'ƒ›²°·Å$¾wü®M©èZ>·åkiV7þN|¿µÛ¤»3Œãp8ÎOAYºŸƒín`Kû-n£µû=¼Om7C'•cqR (Eä€9Å\ÿ„zÚ^o.¯ïÿ¬ó®RAèÑ!XÈÇmÁ޳Óì´èL66ZÄ͸¤„Rzguà~T{Ì-F;¶ÿÇ_Ëî9Ù,tÛí.*×Á–óé±¾ûxïm¢‚ÕœŸ-t<¸Ï—É>‡u\›B¼Ôï-®õ;ÿ-­÷¡²R¡7Œ0.Ù%¶åDˆ#`ñÄ ê(å¾ì=²Á¿øþ‰lô}>Âc=½ª‹–]­s!2LãѤl³SØz šêÆÞ÷È7îh%Y¢`ÅYwr2 Sê¬Êr ÅÒKc)ÎSw“» (¢™!EPEPEPEP:‡FSц:U¸•_r©çïqÆOøóÇ¿¾ëg8Èèqުܣ·–˜\ —ÎyǨõêzôdÆg]slýú^ÿ¯ëל¿-iÿ0Ÿúô?ûNº›°D#®~¿¯ëל¿-iÿ0Ÿúô?ûN?‰?„×­Ýþ<ßþºä+ ·t_øóú討å³J¡¶ÿTßõÑÿô#ST6ßê›þº?þ„jÉ&¢Š(¢Š(¢Š(¬oÁšˆ¯RïU±içHÄJÂâD‚N0¬Rkz¹xóIðΣ…×ï.š!1Oµ[Áµ !Ng–0Ù*ßw8Ç8ÈÉk—N¤éËš §å¡boxziä—ì&’nËÄ‘'”NL{Q€ NIÁ$“É®oTøX/õužeí¬Ùlã¶’;âeg$g.3ŽŠò¼WAŒì¦yš;;¿² 3ûR É(¢¹‡h?!yn· ‘¸¨e'>ÿâV—¦%šÞØÝÚÝÜÛ‹“gw=­´±FÌÁ fQ“µ¾U,W0R@)$¶ÐÞìD~Û~ºþw'ºðlÒÏo$7ðFÖÐýž„C0‹ ùlÖòÄ ‚8@\’Ëß \Ü]YÝÊ–72ÙGäÚÇm-Μ-ÔŒ†9>\ç ¹7Œ­¾Ñ¦Ãc¦êZö‘¾²’Ö4 2™»®ÂEl¾ÑÈ–!j9üdN£¥C¦h—Ú­®¥§½ü7ÒB™@cå•Ðô•IÎ1•À?6ÒÝ›ûÁc*õ·Ü—åg÷1Ú®™¨ëbþÑÐô¹¾Ãwí¿üMf]“&v·Œã'ƒ‘íQêV#Q¸Y5/ ^Í: ŽSc|¢ Ó$„#2 Üß,ˆGÌà“ÕV±¯µÄÖVWw7qÛ‰å’VUµF,Ý £È Gù#ÜÇa®W+ïù‘Úóíäßæ`¯‡tÈ’ÈÂ;âkh¬-Í´/®àà `Å@Žä»€ !v¨“è:­ÂÜO¿á--ïí™Ô@cRÀÄÎ761“œÑñ;O²Ñ´Iu5ŒêúdÒÅͽº ‘x#í¦A`ã X¿623©?Œ‰Ôt¨tÍûUµÔ´÷¿†âÚHS( `|²º’©9Æ2¸æÚZ]{JOâ…½¿;™:•†£®i7)&©g¦iÖ’[%ž—lø}%ˆ¦Õ\x]¤pÙ+©ª\iwÞm*Ö BÈ"'Ù=çm´‘аA#*½Ü*oøÓOð½Ä^E#<È\qoàpÓÉcê±^7cræMCÄÉ™¤ê0Oqc©Klí#R‘¤ÒFªYYÑÆá&¶õ#ŒÒïøÁjÊþõÿÈ•u)ü+©\,÷ú„ÚuÐ@™kÉôÙd@I€hÙÔØ' Øäµ· Ô­ôØ/u}>á4Ûˆ®­LšžYeŒŽ[~\ŒŸ¼N{æ´¼G¨^iv6—6f›P´·™fŒ¶èå™"m¤0ÚÃx œŽ1Žr6(´»þðCš‡ò¿½ò'+©\ø;U¸[‰õëh§Éi¬5³:‚H b‘KK8ÜØÆNc™ü=åµÜšü?h¶´k8¤äŠDL0Ùļ±À%Î[*§9PDÞ$ñÖáF;+È·Èñ Aûuœ<GÝšdc÷O cß9ÇAaxš†m{Äw$ª7«à0|ÈJž½T{(´»þðCš‡ò¿½ò'*±x4»-:-jÚ(,PÇlñkN’ƇA*Èg ò–Çʼ|«‹]hÒ_é3Z¼Òiúb?Ùá±Ó¥–0 $JáÊ›FGÏÎ ›X¿×£ñUŽ¥Ë¦ùÙOtÑÝ@å¢x—`‘_L>m·i8làcÛxËR¾ñ ´‹EÔ4Ë[‹I¥¶o6Úk‘'’&Ä›Y …—‚¤¼‘ ÎwQiwü?à‡5åzÿäM-JMVÕ4Ûûëm^c§;Koi·^P”à Jyx. ¤ýÝìG8#Sþ;ùáªàªçÿ×3¦kþ*Ô“ÃOÚ1}OG}JXšÒU•¡>Z¿šv³¨ÜU°P¶Ó£°Òu(uÇT·Y Ûxî#Y Ô0Œàúš-.ÿ‡üæ¡ü¯ï_ü‰Wþ$ùm¬uIæ?v?°Ë}~iB ãÕ‡ ÉÀ£û^ûþ…ÍSþþ[ñ꣬_ëÑøªÇNÒåÓ|‰ì§ºhî rÎÑöÿK~GMöíjošßEŠ$¾½¾}@dÿ׎„Ÿhñýô¿üIÿÆ+6 oXÖ¾Ëka U÷ö}½ýØ¿æò|íáa2XäÜÄŒmiÜvcßøÖñoôÕ:¶‡¡ÚÜÅx’¾§-Å´ë ª?ebÌW &Hç r¾ÿ—ù¶‡üû_ù7ùWÙüCÿAM/ÿ²ñú?³uY¾kzXœpÆÚ8Ó¤H$9ÿÓŽ¤ÚÒo&ÔtkÛ‹I,縷ŽY-¤ÎèY”‡ ‚qÐtè+>êÿRƺn›¶ƒO¸²¸¸•Z2\+ïç)åOÜ?ÞùNEý6XŸeÿ€Çü‰¿°_šóRÕ.dèím¦Øv)ïÉç®ÁÿÆŠüÜiñ^?i/³ràz±Û8äúš«âËÝcN±¶¹ÒnlbÝw´‹wjógΚ8ƒ²&6ï'9àqÖ²æ×õë/¾u6šlÞÊ—ihëäÝM檗"Ð8!·KI-G${Ö«t“^š~ë­mmì­ÒÞÒÞ( LíŽ$«““€8êI©«ÍׯúÄ~¸½½Ò£moJk˜áK'ß%Ó„QGºpMÂg$«bYCe:Ïí=KIÒô‘¬Yɨ]ÜGm9Ò-˜Å >~r‰X—.~¸À£ÛwfåQ@‚Š( Š( Š( Š( Š( Š( Š( Š( 'j’sÏ5’ï ryaÔè1žãòe¤tWR¬2Që@:¢lWÀ8n¿ùüûgæä-?æÿ^‡ÿi×uw¸¶“ÁØ`qÏpyçœóÐ>&8$¶¸Ó­æ]²ÅlÈëœàƒ#ŠpøÐ§ðšu»¢ÿÇ›ÿ×Cü…aVî‹ÿoÿ]òœw-šU ·ú¦ÿ®ÿ¡š¡¶ÿTßõÑÿô#VI5Q@V}ö§öOKµxwG¨Jöë nRAH2¸û¥c“'9(Á•ТŠ(¬}CA7z‰¿´Õo´Ë§‰a™í-æ¢(–7iwû¸ÎãœàcbŠÃÕ¼/m­Ûéñ^Ýݳٺ—• +]&ø¦Âᢓºm “PÐMÞ¢oí5[í2éâXf{A y¨…Š%ÀÚ]þî3¸ç8Ø¢€0çðì“ê–zöÞ¤—¶RY©UƒæmÝ#ù÷$mÆ(>\½¿ƒâ³Òô«KM_R‚}.Ý­-ïWÉi|ƒ·1°hÊû¸ùÛ»äòÙé(  »Ýo-ôØPÔ­RÂâ)ÔÁtÛ§òåfÉt9ù98äÔz‡‡ÒûQ7±êÖRKÁr-Wí)bªX©dÇ™'ÍFùÏ9 Š(—³ðZé¶vpiÚö«i%µ¤vFtìóCc°xŠü›Ø¡IÏÌX€F…î‚o>Å2j·Ö×ö‘4"ú ‘Ѷ— ­GóÑŽ`¯ƒ±EaÜøb®#šßQÔ¬ÏÙ㵟ɜ¹… W‘Ã8#|Ÿ:2¿ÎIl€E7ðZ·‡4½={U†×Nò¼·An^O)ÕâÜZ">B‹Œœ|Û«¨¢€0õɬØYÚI­êP wŽF’ƒtòFèèïº" °¡AÉÅlACoO4“º V–@¡œ÷ŽÐO^€T”PEP«á¡ªë6ú‘Õµ+S »Ûy6­+Æì­ ,Pº–؃r²‘´m*rMyüe5Åû­åÜ0]ÙEd–ЬIªÄI‰áÄ{‘Ñ™™NN éò®:J(— ‚?앃YÕmáÓ4ñ§G/ùü›·7—¼3Ó,Œ¤mÊí95©{¡Ãuo¦ÛÛÝ]éÐi÷MvUÖ0@…€1Á^: Ô¢€0õ_ WY·ÔŽ­©Z˜mÞÛɵhÑ^7eib…Ô¶Ä•”£iS’Iü-e>©guæH––¶RX.š±EöW†M»•”¡8ù#à0@1‚ÀîQ@rxhl…­umJÒî4ò¾ÙFòÉâV72# Ÿ•˜üÙw,Aá{k]fÃPµ»»,­å·KU(ÑÈ%`ò3³)‘™Q‹oÉ+“Õ·nQ@÷Þ%°Óï$µšßUy0i7S!ȇHÊž½:Õ9ô‘â+Û=zÏYÖt׎ÞKxÑm£ˆ…gRå’xK‚Li×(ÇROIEsw^ŠoéZ,¾¥gi¦¤ “ä–ÂQ£g/r5?.ç Ž(ŸÁñ]\_Ïu«êS½í”Vo»É_,ÄKG2Œ•]Ãg› p¡zJ(›·ðe”¥/Û.å´Ó´ÆÒÖÎe‰âžU æI>\yÁå`°2'†®û'ñ«5®™¹^P²^?34ˆ²¨Ý•ÇÎH-œôPEPEPEPEPEPEPEPEPEPEP2Bì¤,¸ÉÉÜ»öǦ?ϯ5imåºD©ÙãxÔ4˜;G–„9-Àn=Eu\îŒw¬íAUî#ŠB¸q?2ŽFCdê8ÃGL¸î)laUа Ž=«sEÿ7ÿ®‡ù Í»X–ÑîNÅ&ÉÊ€/”Ì26އ8à8' =´‘XD„{p*Z-ìhÔ6ßê›þº?þ„kþ]ì’]—¿Ñoó%:mÈTØH}ÇËãiôÁÏJ×Óæ[‹$™„³¨‘Äò¬Ø€E[„£º!I=™jŠ(¤0¬½SM›R¿Ò²Ñ‹;[ƒu:1'ÍeB#M¸Á˜I¸Ÿ•¢LNWR³î5íÒyà¹Õ¬ašÝCÍ—­’, àË×ûÃÖ‹ &ö4(¬û{G´žx.ukf·PóG%Â+D¤€ x²õþðõ¬öñ–“·&›<žB-’ß­ì²F-¤…™P2¾îìØ8÷|¬¥NodtV.³âHt;í>ÞæÆñâ¾¹ŽÖ+˜¼³•ÉX Û$…#üTúŽ¿a¦ßZYM<&îæDDƒí$€1 >×e%r1òä“Ð,ÃÙËM74èªZ†±¦i>_ö–£ggæçËûLëüc8ÜFq‘ùÕ¨fŠâç‚D–:HŒYHÈ Ž ŠV&Î×Ea\x³N²ñú=öû6†Ð^«‡ 1—>mÙscŸLèjÆ™¤ùÚZŸ›Ÿ/í3¬{ñŒãqÆGçŅ i¦åÚ*–¡¬išO—ý¥¨ÙÙù¹òþÓ:Ç¿Î7œd~uKYñ$:öŸoscxñ_\ÇkÌ^YŒJ䀬 †í’B‘~(I±(J[#jŠ¥¨kf“åÿij6v~n|¿´Î±ïÆ3Äg†±¦i>_ö–£ggæçËûLëüc8ÜFq‘ùÑf 2{"í™wâM Âéí¯5­:Úá1¾)®‘r22 ÈàƒøÖ+ Å­Z +>û]ÑôÉdŠÿU±´’8„î“Ü$ec,9ð¥ˆ\ôÉÇZ5=wGÑ<¯ímVÆÃÎÏ—ö»„‹~1œn#8Èéê(¡Egßkº>™,‘_ê¶6’GÒ{„Œ¬e‚ ž± ž™8ëYzçŽü= ÛÛI>¥i,·H²[AÔ*Ó#C‚î¨ Çs0’é(¬y|S¢ZiÖ7ºŽ©c§Ç}–wwïpÁж7T‘ÈÁ б}®èúd²EªØÚIBwIî2±–‚xRÄ.zdã­hQYöÚîy:ÁkªØÏ3lÄq\#1Þ†DàâEfª  Ͻñdº•´uö¡ Ý£^ÇwcåK’¥C0÷¾ˆpŠÅƒ ¡Ž@è(¬¹¼K Û yõ½6$6ëtî‘A…˜*ÉÉû…ˆº@¢óĺŸokq{­é¶Ð]¦ûi&ºDY—å 8a†#ÔzÐ¥Ÿ}®èúd²EªØÚIBwIî2±–‚xRÄ.zdã­IªêPé]Åüë#¤)‘@•º* $nvbGr@ï@(¬½KZ7 imaw©^5µ¡Œ4q’@v2:*‚A–Ã`¬F|~:ÐMÅÊ]^Ga -Íì© rù†A´nmÊêÐʬŽCÇÒQYz׈´¯¤-©ßÚ[œ,k=Ìp–”3 ì … Ç8è 5=wGÑ<¯ímVÆÃÎÏ—ö»„‹~1œn#8Èéê(BЧy«iº}Å­½î¡im=Ûì¶Ži•fÈ@NXå€ÀõµÖ»£Øê0iך­½ôû|›i®$“qÚ»Tœœ@ÇS@QYúžµa¤ùQÝ]@—W¶­:Ÿiv‡oLJ6«ç¿ËÇÔöÏxŠwŽIE ‡ÿ±£ 4’Ø+æ†òÇ–pdzq•þ-Ëê4SU¢ÅTG ªø_]›Nðî™fšt–ú%ͤé<×OÏä¦Ò Ø&I<îj³â]#ÄZòh¦;M.&°¿Šþ@×ÒÍo'¡ÝŽF2{d²¬(ƒYWäBÇ$€8ñ“ÉèIÀÒçdªòºÓoÔæ.´ma<_oâKH¬e™´Ï°Ïk-ËÆ¨Þ`“r¸· är«Ðø›fºv—ib›6ÛB€…¨IŽäŸsÖ™©j¶šLp½Ù›÷ÒyQ¬0<Îíµ›PÑXôíV¡•g‚98Y0…3Ê>ÄdPÛh‰JN*ëC…ñ7ƒõgÄ÷Ú¥²é~Kèòi°‹‡rûŸ9|„ýÙØq» cùXõêqùÙ³ÙÜgÇB“í.Ðíé‰FÕ|÷ùxúžÝÍýõ¾™§\ßÞIåÚÚÄóLûIÚŠ cÉÀ¥I<Ëmo,î$)alì@áTÇØOj|ìÑbf’]Ž Pð.§—ý›=Æ|8t)>ÒíÞ˜”mWÏ—©í>«á}vm;úešiÒ[è—6“¤ó]Âc‚~™ÆUIbîÐÔtI´¿‡–leãèéc!FwÜ-¬‘HÁgçeˆ…\õ g½u”P#P¶Õ-õ¨iØÜÉ,KÐ]¿‘–ea*ÆíÆöÈ © ¿OðÝþ­jzµµŽ•=Ô–ÁnLòEæ9šY®X’ŽbVy²û‹’8ÇaEqz•œv>_#ÝÍy.Ž4ènWO ,b1+;¢2Æ22r~QÉãšÐÖ¼?,º£ë|RO-ºY¼OªÍeˆy¿7î•‹>e8Èã‚¥HçjóP¶°{T¸g u0‚HÙË9±òƒ…bIàrjxeYàŽdE ¡FŒò¤±Î×0†>‡µü?ac.ÛKk†ææXvC™·÷›dÝà´¼K¹5„Ö·kéqF°[!µkO<ÁBÅ>pŠŒÐF¯Ê0Ì23V®µ;)íẸHZá¶BdùUß  xÜsÂç'àâÕfG™mâ[‰#’p€Hñ¡EfÇ$)$žÙ8õ5–ú7›âëÉÒ ‹ý>;9á”gý[Ê@ÚA¬'`sŒl6ã·bŠrpø&£YAö‹»k»]2Ì7²¢©HRí …æ·F uÚ³fåŽy¤iÚ\#ÌþÍ´’Æ8%½+‘€R9s'I&7`è( ©¨»ßeÒH]¼ó@ˆ‘HÁBí*ÅA,Xm'0[³\¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ )qÁûŠZ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+?PÓmf-zl’[ÈÕ6ºE•ÕH# ãQÔŒARP4ÚwE+½L¿ã¼Ó¬îQä:͸g ´1rÛ@늻Emècøs¢‰ PIv·™äòÒ8ãž7y n\lUgäãåäÁ§¯èãP½i§Ò£ÕvÛdŒ±Älæß†uŸ>b ‡( Q#,UOIE<Þ½ÿ†|5m©èsµý¦”lÞ;Ÿ²M$[U›ÌìË †‰Xœ/˜P£¤Óôëä:&¥{ Ÿm²²“OšÞ7ó7´’@Q#¹%’[æ%Ê·?8ÚzJ(›×4™õkU{Í.ÒêE·>˺)RGicwGib$D I–^H,BoXëcJº»½Òíî/ôù4û·LËjò¤†&î7!!‡p}È \¢€3õ ÃTȼµ‚häÚ.#’ä[„]ÅMÊrªÌ\ca׃Ÿ¨x+@Ôóö.ÅöÚ-¥¶ë쪻°c߯7}Ó•F“ž‚ŠŽ!µ·ŠÞÞ(á‚$ q¨UE81\–­á†Ô¼Oux–(‘Ëa$F]Â6k•ÙäÌÃ(i_fäÚÝAQ]Ókbá7tyuÇ„uK›9ï.tW¸¿ºðÐÓåWžív¬ù2pÄá_~@Œägh­ÝOB»½Ó¼5cŒÐŤIo|älÃy(À@ ÊNòvŒ–*NòG=¥\ìÕâfíär^!¹×5 =,|;x1¨Á-ÔsKna‰ÖL®%Æâ@žÍœpLúŒòjç…c6³[\¥Ü÷²[ÌSzB–òÂÌJ³)ùç„`~|ã†ÇMEKzXÊS¼TlÉxƒÃ²j^9ðÞ¤¶ÏiwpßHá9G‹j+Ë),Ü`“ë]m'`„Üןã¡Âø‡Á’j7ÖJ“Â=’Ùˆ-¤G’7Î…gÊTÈÞŸ½Ëw7á·¼ƒJ‡V³¶¿[KC›Í· æb1ÍX­–Ê纜»´Sæe:Ói.Ç7¨h÷±ë׺¦Ÿ3ÆÓé’B‹´LRà¶@]†X€£o DK¹†ÕªW>Ó®5o­Î—s Óm âÝ£KvM›|¹9•—ƒ…ù‡ÎC«±¢Žf ´ÖÇuàkGP–9àuÒ×L]6(]•‚lÉIPÙ`$u Øe*Ü0|Ž“H†{m"ÒÚæI¥šÄ/4Øß1O—Ì8fûØÝÉÏ<óš»E'&÷ªÊJÌæ5MÞóÄV—¿Ø˲G[™Ìp‡™Z!Ë–@$`PŸ,œüª²jk:|š„qG³Fÿ2¤ˆ¨D,Tþð’CŽ'îØ6%8#†]:(æaí%§‘VØ^Gif“’`ª·.ÒrÓ’@îÇd$àcmÍŽ¨—¦îçjÂÑ `ÀE’À—#-ò€ 88œÚ¢‘*ÝÂÇ:FæteE’%Mê…Ô¸ËôRnÇ8|ÀUª( .QE (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€?ÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/relocate-1.png000066400000000000000000000466751203611042400311310ustar00rootroot00000000000000‰PNG  IHDR×)–åb pHYsÄÄ•+tIMEÖ) aCtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝy¸U7ð_-½Ý=7 ¹I¹ kQÙBAEÅqC#*Èë2‚/8¯ êÀ 8ã‚â(q\pÄ%€,Š ²’@BB¶»ôíîªêZÞ?ª»nÝZNWW/§ºûûyxBwuÕ9§¶oŸ[U]%X–E.úÐe-óÍo^î~+8)lçïÊˇæÏ_À¡i]mïÞ=ùüô³›·’+‹+)ü¡]ö²#_zâšW~øD$Idžt%Ã0ˆhÓ¦çî½çÁG}ÌbÁ²,;‚×¾æØƒZR,”4­\(Åb‰wƒºG__®?'¥Ó©¾þÜߟ5˧IDAT~aão°ƒX&¢+–Ù¼sÇž={MÓ¦§ ¼ Ðm††úÓéô‚ùÙƒZBtìt~’ˆ„óÎûìÚSNyõIGîÙ“ßµk¢0S(•ʼ› Ðr¹Tÿ@ÿ~ûÍ[°`ðww?ºñÎ;e"[2ºgÏôóÏ횘@ †-/n[yó õNõì™çŽ/Ú?Ÿ×òyMU4"klÉ(ÉöÇ…B¡T*g³é&7 »lßûÂÊ›oxÇy¯·ÆéËæÓ0‘Y¹ÔL ò¾š"ùù½Â–ð­v¿÷¼¥ó—Q©T.*½^™ˆÒ™ôÔ„‚ë"jZø½oñÖã‹S =²ÕPµ(ýúŠIDAT“HÛADg¼õø[¾÷-é¢ÏÛ§&ËCó²äô…U]SBkÚ ÐUŒ¢biV*›MmŸ,e­LJÉ„”ay^¤‹ZjZ1u«¬(‚®‘“´ª®¹RX’,MÃBjÔHYš‘Wé/OíÛ«eÍÈ䬡…ò¢±\_ª]³ ªjZºnEÉ0κü‹DôýK?aI‚®›¦ 8/ÞuÅ—ˆè¿/ø¡¨ZÙ “‚ÂV«f‘™¡tjë‹…Ç_˜Þ¥Zšf¨š¶gºüôsêèyÕKæ ´rN’ÈÐt­²&”Kúm[·Ñk—/½ñ}çêÕt¢÷\ƒýÑîK>M¦¿Ò¿“IDATaZ™F`i2 ‘( D‚}T9«Z£™Lj £f³åÉr¶?¥jeMÓUST­TRŸ~jjf¦tò)+‡‡³$`‘%@tÎ9¯uŠ>õÔ7wÜš#9cf~õ«›ü±‹.ú—&,¨%àïH L*Ë"Aˆ,ˈH¬ÊÚ2Ê&¥‰t2¤JðÞ¶uûk—/Ýðö³í·ëü;‚‰HÓUÉ C"*›D$J"YD™†ig¯LD¢ ˆ¢ É’@dŸÜ›7e™¦¾{Ÿ2#ŠR.UUÓTU+)ZIQJ%µ¨¨›6Mí·¨ïÄ5Ù)l9Óm·ÜMDüé÷Ÿýü§?ý©Ï ¶ŽnIDAT}Ü«Ãæò†¿ED#}Ùi­Ñ‹”|ð=øÀÏûXƒåt1ìíI…ïÇÄ,²ª=UçòÒËeÁ’IÈ·âcK¿ôr‚ømg­ÿé;¼ý#"C° Õ²tˆdI"‹,Á"Ë*}a‘²ÙŒE$T«IQYîK—H ä”80˜:èårYÕìÿ4M+«ZY’¤”,‘ìd¹wó’iùÊcˆèß¿ø¹_ßr·Òw¤d±Á¥õoWþ3ýÓG?UªUWϾžLøvL¬ê.#YN'•ˆÈ0H-K$2ˆhÛ…îÍ5T b'‚·]xálY¦I†ADÕþ.¥dI‰*}JÞVêIDATaQ”eÉšQK$ñg{É4Ó4MË4 ÉÈäŒTÚ̺nš¦A¦)æ”eÉòì¡fÁµ›Kr康ã]-I²ô»ßm¼úªË‰è¢‹/{õ«×zæ6l„G}èÞ{ïúõ­¿xýéo~ó›Ï^ºt]{íþúÖ_Ñþñ‚SN9uxxÞ›Þx’=þkÏ8é—ÿs7±«ëUØß“k%™ìŽ©U]?YÕ®1•M+m• ×yµ­ž¿üšk‰È‰à­žï.M°ô²i‘,KÙ× ¢(’Â’@ÒÜ®¨Eåãvî¸}§šWÊŠªµTÒJŠR,©EE)–Ô’¢”-ÏZóþÙ ãöâIDAT”]›“$É<ò ½åMg‘(Ü{ïW_uù—ÿã›Cýýë?ünYÖœ|ª»Æ|àê«.ÿÆ×®ÏÈòú¿{0×ôq«yäÁÏ\ú‰Ëÿ媟ÿ©ÿýß[¦öî_¶Âè /þøùŸšœØ{Î{ÞRš™9÷½çÝúëûNýj²†˜´ñþ»ØÕõ(½áDÂjI$A ªžñ"«sκ2uK˜»C¹{Á¯]¾ô[o<Ãý©©WF–*ÇH°É9.,HB:%[$ö}.2 ëc‹™ý¦eš¦a˜†a¦iè†óÖ4MÓ4S™”`Ù_ä´éµgTz¦_øü_~ä+¤tê­È›IDATžßÝAD«>LÊ¥‰è®»~³níi‚<û;‘Ûoû"ZyÀ )—!¢_ÿï/NX½æþûî"¢ã^q¬”–ßøÖ³,Ý A$ñÎ;³qãí÷ßÿ;"ºé‡ß{ÿ{ÏK¥g¿”äþlÍêz:]Éd!†i¶Y a¡Ú‰ÕËeJ¥R†A™‚HDþõ/¦ê¡‰ÿzý›ˆH´LH·H/—‰(–œ°´c¸zD"%¸ziaÍäăÏîûãöÉ¢¢•JJ±¤µXRK%EQUE-+ªö‘œ–ÇŠMé¶[î~âÉÇ?~ÑG ÓùtVJIvb:éüûî#ÓL¥f0m@DéŒ\`…+¤IDATÁ0~ùËŸVfSDD)‰ˆ~ô£ïýë_úö·nüÜÿ»â5¯?‘ˆÌ²žéÏ8E¥"T×›,Äp" è '’k­ÂÜŽ0™†© ‘ežÛ¯œ~æ¼óüÖ·¨Ä×¾ö &Yd¦=BZN9ÝjQ¬¦°$’$ËBõ‡`‘¾tÀЬå ûŸÙ3½wÂ>¡VD¨š¢jšªìÊukO¥åJ˲×>~܉Ç_xÁ'®¼úò—yäʃ\³æä{î¹Ë¾vÂf”tj¶k@DöÀã]m” Ï@Û׿þ%"Z6v@n ç tNÉ5«ëQáD·c2 –Eöñû¿9RGIDATÀ„U9Llš‚iš–e ‚páÿëDðSë?`ÿ{ȆïP5ˆ¯Y÷:˲ £râ-–¬ÊgLª}a!•v÷­ô¢”U2æ­EQþüä¶bI))jIÑUSUý„V®ϫǗ/tŽšØÍvŠHgRoÿ‡øËÃ]óµÿüê5ßx÷»Ï½çž»~ô¡±e‹6l¸îmo;{Íš“ˆè¤“N¹ûî;‰è¬³Þ~Ï=w=»ù™¾‰,½þ´7erigªSO?íg?»yÁ‚kÖœtå•_¼ä’OMNM율ÌùäÔÄÂý8E¥3©°ê"ÜÝ_¡ò}i‘¢›²@I—ýa£ÁO´¥gIDAT¼ï |â}ÿ¸êúoÑm[·ŸuÈŠË;Å0*G†Óé”S^Y3ȹ^8“‘]WÅYDBæ…ÅyÊÉ놲G6vÃ/þ´¥¤¤$:ô¥û¯Ysèi§¾dl^õð59=éŠL&ÉŒ^rÉgÞðÆÓ~ò£¾wýû¿ùï\ý†ß?pßÙg3¾ÿJË0³}Ù‹/¾D/O<ùø©§ŸzÅ¿^õ‘­'¢¯|ùÚÃV>82pâ‰k¾ùïüò–[>ýÏŸ8çœwœxüy–ažqÆ›MÃ<ç=oùÚ×þëß®øâÿ½ôS…ÂLJ–?ö±OÞ}÷¯=ã¤M›þnO诮µ«,ùpü1™ÐâgšIDATN¦¹§ÍÍdÒ-²Lëòc+Ý»MïyŸgêMïyßá7^OD—{’nZFuÚL:U½²W0ÊÙwy¿ø¢õC##v5•‰T/Yó5¡Ò-Ÿ­Ê¹®z¡Û3Ol%¢W-·?/kåçžyaáâùC#¥‚25‘/ä‹CóGÛwq+kå½»&Gæes™™é‹Û÷ÑâeûõU8” ÊL¾8=‘wOe¹xÙ~¦i¾¸}Ï.I¥Sšª=ÿì§öÀêzööd·cr9ûÌìï!~{ÆY‡Ž/1ËeQIkíV¦E–¡›¦)¦ROnyá5·üÄÉÕéÉ©«®ÞP9"‘IËDÕNMݯIDATm¥FÁª>´Z‹À³¹,Påú9K˲Ï2¼äeºs¥Ó©U/;Èy=v+®ÜtcG°‡?‚=ÂsxzÁ²,’«ìV6Ì”äMQOG¶ý¸JIDAT8c´¹Ó–ç¾E Ì2JÓv˲hç©®›ºaÊ’h±'díH ëk†i¤=“x‚) 0«dVnû•͸žáŠ`¹úd¢rPïØ¸EUOK¢®›}®¢Ê†‰¾0@0çp°,‹žór6§ƒì>ØÖ ³/#ʹ û`ôüϪÜÇ"fH]AA}a÷•שA :•熀Neí}ÒR§Í½OšjÞb¾ð'û…8´? ,¶_K Òƒâ‚U”`”fw„‰(›‘gt͉`çpD Àް}]ÍíÛÝg#… sh3úó¿5Ÿ¨¼ë !¿™2DÑÊi^·ÞIDAT¥)W‰2ñ ™™3ÿ«ø€=PÿÓÑ´IDÖþ'g–¼\_KƒKÂ*qŸš£j_ØyëŽQw»;Âa—¦ÙÓsƒ) ÿ‚öàéÏÜJC¢µt½rH·?Õ" ªje2DdeúD²ÌÑyB:eieR kÑõ§Å}ûÌI“öýA{ä.í_¶Wdùˆ4¾Ö.Ĺ:ÍÎ_GØÉeûÀ®§K[óg£#ú‚ ýœ="ý™Ÿkw}ÁZ”¥“WÐhNH§ˆÈÔÊ¢^Ô¢ ªöhÎ +Syp„NÙ{£‚ff„>Å"²Fûi_A(mUï¸X>ðôôÉŸ#¢œ¨#~þIDAT(ªè9"L‘;ÂÍ0Ó’H¾ <"lc¥° xo{ÚþdD"ôºü Ú]_ W.¦Á,õWžSlU#Ø~ë¼°2}v‹DVz8´Ìœl ¤éÏÜJ‹ÓG¤,V‚Û}RÎÓv®‹`t„Ó’èä¯?‚ýaŠr¥šUEA¹Ü Nuf~;eÈÌe*7ç*O2&AUö°´² Ð—¦’:§üþäüRÙ9As¯vŽE8Wû†u„ížcþ«ÓÜâ_/,Ìåèþ”=¾g¸¿ψõz&ñ¿€N¢’ðÐV"²ÝFsÖ9þ@®N1¹’šˆ¨?-ª3Dd5ÊeªÅVú¼î¨oRIDATh8ü¿”«ù3 ûX„,‹«àž*ð¤œ#f ; »É‚ x†‡ïî J§G왊Qo¼Ù€DËPÉ…»6Ó¦í´¯D®„µÏÈ9¬LŸgH…}\8­•Ta_QxQ!«_>ðtYg ÚœK} ÓóK9ÏÞ®N³ÿÕuSúá7š˜›ÆµÏι£-â‚z'Ø©cÂ뀎Põí‡ ökÙáÅþ»6‘µ(kö‹#" ™Ùî°s™„)÷Í&WAòе7oí+ ªiË4¸Ÿ°|IjÅ[©¬jÏÙc)ªîÿ]#|=#÷u¨)äê4·Ú)ìtQý×xßÓ)¼£L%ŒIDATégáì’í|Ç)>€.  ¤&V-›I gK”™(æŠ&íÜcf ­`e¡/E‘¨òó ÈÊ¥é…< Råáó•÷û—‰Ã‡9%ÛDžˆØÉõ¤m 猜ûúŠà;®™dšõ_/ìN4Ïð(“×,œ\(•Àf kó°R#)y$•š'§æ‰†aîyÊš~ÑÒ Dd*R ‚V åY’R‹¤-U£â„]‚Õg¸ ,i…¤­¡LIÙa'dÿj¾ãÈÎ/åÜaOSôë…ÂØ/@ÝÇ"š~T×i3¡# ÐÕLI¢Á%BfPPó–ZÒ3–V°³˜îÉCdd—ŠfØÑŽàñIDATé.e¬‚*ô÷edUè'UÏX…¢ÚO®ƒ¿îO/6 S’DƉ:ÎÎyÎÑÜËÜ1ç¾€Á}À7p¸``¥õNPƒ¤¸ßi†i(SªÐïŽ`r]pæ>Ûæ0Õϧa÷Ns"X ên³úÂa™ö)û£°ñÙµÔ|[³p\8^®¾0ÙW»r6,sÅÌ€ý¯¢éÙ´LDŠV‰]û­Í}BÏÝ;¼Üå÷FÌí {8\û…©Î(šn‡¯&díäµ_;“(š^*iTàÀŸiøÛº<…Ìí ÛìÌu×TgœÌ%W·×Ã2Lû?AMOIbJí‘íú±áIDAT#ÂöhŒë,šœÂIûñqÒÚ‰Pí —t6-Ù½]CîS4=m)ö¿NW×ÝçµYÕã Vi’ˆ„jÔ:Ç%œðuŽH„u„ }aèEÕ¾pÊ,(š¡ Ù´¥Ø‰ign@ò–&I›&¢’¢ ¹ûµ ‰vò*šî¿:ÍÝVÔ9ÉRz VoCÑWyú†?vmNø ¹;vKŠndFJŠžËÊ• &¢êÕÁîÓt6ÏÏ4²ɘ{x) =göWåÙû«¹{»%E/):)€n’" ØoíËÚìk›s"ðg¢XùÔî—çþB) ½ÇwvÎéíÚýÜTZÎZ3îÌÍZ1ŠÎUIDAT3þb²)‘\\)Û÷ §/œÍHŠjd«÷ç´%ñY-5{DÂ’›=È@DeM/ sªO$1m)¢4@döÝ2ÂŽ`Ï¡aô… çX™”gˆ;‚ÃØ7ýqn ow„ ¹Bž¦!GËW¤0ôÏ/˜u3›KŠî=ìPÚgÃU\?M–äêó>$Q’İçhèæœß+;ý_\#ü« òv(§ç‘¢ê’,9ÿ¦$ªaÏcè·ìqŽ{ R¸›´óޏ;t6ß/˜•²™ËÎ9Oæô%Y2ô9Ø\V$ÑQšÃsDØîÿºÿukô¹s±'ïY ï–HÞIDAT’ŒX{rV·ûɱKÀÜÓæö…EQt®ˆ°Ù=ß”$ºáD°¡ÙŒ,É"¹~&W³#ì¾(Âß&\#¨ñ_¥;%àÁ]㺫oËL…|Ø7š²ö•Œ¦†+žÛK´—èD4 )Òó "'˜³båžÄiQ¯¾˜sMENš½i±1ÿ¥»^q¥ûS»#,Š¢Ýv_áïSìv¶]Ï ÷[{LÏ&îÞèÃFÇ]‚3²Ìö4#lö q¦r—Ø$ÿTÍŽ2w52ÊR{ÍÑâ5›±ˆÂ†xŠb¬>OÕä[•Ð5Æ2ScG¬ Áõz€yO5"¢)õ‰F1ðS­\’Õ=IDAT–R)£\–vÿ™|½`;|#ÎÕiþkÔlÍì û#‰"lô±GæØ !Œ!ì [Rsî¾™êmd`í7˜Ž’tìf×,*l°›Ý”Í :ÅNuø˜#OÜåM)m¦  ô§g •>¯>÷iF•ÛWjy_xŒˆØOÓ°9¬Åxî\DžÞbØ8ìýª¦š¶§­>ÔØ”ºØ¶¢ØÆ›cM9ã£S u±Ã×Ážü¥Êó˜ÓÎ$aOÓðw5ÓL‹sNÈÅIaϹ‘À­¹EÛ·ÿïÐ(ã·g'ouu6²ñ¿š2š’èë ž™‚&»~kØv?§yRM¥]9:k=IDAT“3n"œÍHÓ¥rZӢ؜¾pô®Mà_µ vC¬úŸcÔÜf¸§m|v×¢´îï•xåÇXïži¨@×PÌÊ/âf ÚL>¿í…=öÛ‘¡ÜÈè‚£};wî™)”M!%Zt€{Ú;÷îÜ5i¿>èÀe[wæKS{ˆH7¬åãû;OSÞ³{ïž=SD48ºpþHŸ§Œß++ªawµØÏ`®‹{o©¹­ûGfìlÑÇli3¢RsO"8#6;l4öŒxʯ«öÀ–×lO”ÑØ öPW³Ãpÿî„æÚ¥ fÅ2íܹ÷ÞûËår¥RÉþ—ˆˆž=ëm'ÏÌ~ôÙ¢RîËöÓäIDAT¦ì\¶§)hþåé½ÓD´pÑ~ûï¯oyêéÝ»öQI7K%í°U+‰H7¬={¦ßô4­<Äš?2ND{µþ …t„=G$üLñR8ðŒ ã4Žûœ{òšc¶§䋃( p¦Œ^ £=aoë]Jk«‚=_õÖev3ßFYÝйD£s{öoßøPZóù"²ƒ•ˆ–í¿ˆˆÆÍÜ÷˜˜JÏä ;vî^0ºœˆŒÒ´¢ÊϽ°ËÔÊDtä+eY,•J…¢JD%Íx|ÓÓû-]:ÔŸ&"¥l•4CÓʦ¦¸Ÿ¸Läý™†}ipÍ&\/ ]À”*¿†xì¯OÈGã:IDAT‘RRÄTú´µ¯›?SÐvîØY6"èO‹©t~*ODOþmóŠå‹eY$±oÛ¶­…™Êµk‹/Òu³¨”§ªC4­üà­yõ1DdjÊôô ©æœ3lš>{°[à¥iR8!}„4Ú³"°º»›hÓz–ˆ¦''íNÍ'¢þ´ûðÊñ±ßÝ·›ˆ¦f^x]õÌÛßþ¶EÓÊŠ¢¾äÐì[CJŠ¢Tn¯ªeEQ"Ê?·ó/<%–‹ª^&¢ÊØ×oÊ¥g4 T ú¥\JJÍÍ]ô… ã™’T2e"›î;ÖÑT¾¨heE+¿¸{âÆþö†›~Cölí—ìžš!¢MoVTý©Ð¨qIDAT¿?Ÿ/©ù’ºlé~ö)5û`ÂôLiz¦Ôן{ÕËV]Uôßüö…’25­LM+Biʪö…UUò_Xã‘ÂÐñDÃÈUï¼sÐA\üÉw½ãìu‹γã5_Rïúýc=¾ÕaÕË^ª*úž‰Â¶'wìÜýàÃOÙ!»ò q"RTC–ŽCÑtEÓ•²uÌ ÇQ¾¨lß51±/_Öõ²®t‰ˆf4™ˆÍðÿçia&#SPG˜ÂpB&ô=S’&µ~çí@ú¸WvéEï<ÿýoP}jZQ}Ó_Ÿ¶?]>684S4=_Tîýý£›·ïÍ•|Q9òÐEöºnåÀIDATêÅé²®Oæ‹D”MËG}D¡¤JÚ~Ú~AJ¡Ì<ãëÉbUÕí–R²'‰‘ÂhÂüCû„…}yÖáìãªÐï~ô+]0¯¿¬ëù¢âÜáA7Ì;ÐNØ{ÿð„ª¼BÊÏ^Û[6 %-_PJŠFD«O8ª?—Δ{¦ó%_P4mö^—ZÙ(”Ê%£h¿v†gÓ’Ä™ŒÜ?±³×sjŽÂ|™ã/YúT)=ã}p²Ã”¤IDôÓ_ýiý…ÿùïüòÞûûóCO~ñ+?ùëÓ;윳ºaÚ·æ9ü ¥D´sÏôߟÛEDù‚òÒÃWÚEÙ— íÓÍ|œž†IDAT¡r½°©Î¤eñuo8Ù~»/_""EQ ÝÌ—¥íÊ¥dQ23v;ÿ*š‘MK™Œìô‚s™´ÿ®‘€¤“Æ×¦ùø’?~yïa)}ɰ»/,ŇúëÖíûþúÔ݃ýØ1:ØŸÍ”ec£'p„s_ž—9{L{´#V­$¢¢ª÷e䢪ˊj§­j †ÜG†yÌ‘ßܟݺs‚ˆöåK£žK³Ó{t“ˆRs¹œNIž¦ ‡Ñ€ ¿ôÝ™uWÍ®4ô§û¶îð|jJÒ´‘6¥¾'wMÛ©êôdóåˆC–|î³Ê¥+¿¯³¯E{ù‘‡îË—ìÿŽ8djBQŠIDATÉü‘>C™’eÑî +Zå¸Q.†i_qÎÛ_ï®Ô~<³Ý&¢²n–u“ˆÒ)‰ˆü:k ,€ö‘Æ×f-<{‡¹é¦ìß~"Œ­ ãÒ•tÀÑö¥’ö£ÿøÀcOïýûæ]ÏnÛMDc ç6>:>¾ÌÁ}wàwœõšµÇ¢¤FurÑ~£dV®v–ßùž³ß:½‡ˆ–°ÌŽà²E/9tü“=Çadx¡¡…rÀsä¨Á¹œDT#‚ ) DÊ å«rЛôÉí“Oß?oòAsëFáÎïXF™èÃD¤XÙ˯X¾˜jÝxþHßü‘Ȉh¿¢ª;·æst2lIDAT1ÕCî[>6 ,r®VÊfÖš1„#WX®–ày03¥dÑ>ᜋ«Á„€Ž“ÍÈ´h¹<²T×Ït„1õçÊfQw]Aáì 7”)Ï•šµû·î&"E êQ;5cN {"8JþÚÂБ²yF×dI”¥Êù­’P¹_°;‚ç>£h6íqî6ÕMÈ‘®é‚$jºi¸î\6¬”$8ý_;‚ FåÁÍý¹ň`B @çèO“ëq÷Ýÿ—‡ž\àAÐ+u^ëÑËBiÊÊ »_ ¥©œ,–ÂdTxñ©ict<—ªë@°RºÄOÜèMÓIDATI´Ó?|XV§ô̰¬z†IÚ´‘’¼÷âé§9‡2²JDªžI&µþ‘tÁýé’ù4<˜q®…ð?V®&¤0t6û‘õÿzÞiþ Ýd©¤jiIÒ Ãþ×þHPòVvÐy¡ †ÔI…²4£š¡.3Ês~<"¥R¹œdço¼ö#… ã ô§_µj?Ïá`ç‘T=(œ"­¤;¡7ßP¦ŒÔ ®g¬‚*,!¢²1BD†1ê”ì~²½1{®/àõvøÕtû±#%„[™æŒ#e‡‰È}Ž.%‰)I”$QªNž–Eû?"’dÑþ/›‘ì{`ºÅî #… KŒ eãL²IDATë%ʆéé{hÕŽsQÕeשæŒìê;O¶w‚Øî£/ @ýi»Sl÷j=Ÿê®0MK¢}±ù.+&"#(‹möc•ÝWŽÝ ¶!… «d3ò‚Ñ>Y=¿Ôpӌ٫†3Öì5ÁmÎéSµýáž5!…  e/p§jXGØ9(ìÄ`t„Ýœ#1®Ns›sĆ 7Ä.b˜“Âëן˫½ã.s^ÏIá­[¶µ½1= Ç…xB ð„à ) ÀR€'¤0OHažÂé”ãy7 U: …ñ p¤IDATºXG¦ðøŠeQf¢4}[½ÄÂÊ_±ŒQuÖcò[˜M\íY°­¨¥RxËæçíÍš½q‡idڈ巢ØVë¸fÛ _±lËæç·l~ÞÿQì2ýUø7˜èU4·…MçÌ#¯ªÁ¯%Ï`îëÛX,®mViöfmÿ¯gÂF é2·ÚÙà.Þ`ºlvºCóSø€å/#"E9b׋ßozáç{Õ½Ãx†Ô[BÄ’ÃFû4¬dÆÛ°ÝÃ%Žão »ÁQ §¹9åɬÀ".Ìš lmÍ2[‘Aìí¡Ázº u­ñÀ!‹Ñ_¬3fÍõËØêZ2Ñg1mô7pœ(LƪùIDATå´B“SxtÞ2K%1C¹ìïví>ùþû®}Ë[^ÒÜ*lž-ƒ±­ ßÿÚ_šäšE±ßzÊqoÖQ†3†xja/‡šË§ñbÍ…P³Á’¤î nua/¨¦´Ð¿Þë +*l–ÙmÄÅh[Œ%e¦k^»ðq×Q/ö8ÍÕÌ迸T¤þ ‘°Š¬'^uô3WþûµÓùœûž£šXKÆÒ ü"½4Ù¶ô;³u5L¦èÕµgqÕ[KKûÎìý_\1V±3>{ý¶hùøg³‘/þ¶M[3SØÐ@DBf”è$‹^hßEŸ¼ÿo>ª=)ÌXIþ?FØã3¯«-IDATÔüVlç~Ûø÷³ÿÓ–òWמÅ/ƒÚ¹+FlaŒÅÕæUÜ8ÿ†{bï#m^PM»Fb ÿâL‰r}$Ð0Ñ ›*üîc_õ×Ï_ñ›fÕã/Ù°¿ÊÛÙŒjp›‹ÞfT—ÀNqØÓRk¬·aMùs'v MÁ¥íÙšÖ6ô9Z!‹¦ÈšhØ~ñ'î}Ã9Ëÿߥ§6«¢@î†Ý)¯^H8¾¸gˆÏÜâ:iÆh£œx›W”Œ¨9NÄÖÆh^`íìe¥ÁìŠÂ;F™ÍÀÉÝqƒin kŽVs‘²›Ý”M1°^Æv-57F¥5‹Š2N³6˺aÒIDATè„óÎûìׯ½ìæ›7n¼ãžK/ù`¼Rú³—Ê·s9ÜoT }DdѨ@æºYÌÐéo8kùŠ3ÿïE'Æ+ü¤SŽ¿ûÎßÇ›Ú ¥ÞÔž%ß;ë·szŕ׭]·æÌ3×^pþåÍ9"‘*~[ÈÐÀ0‘©Ò½·Ï)öüõüïŸþ­)4×xõG:¼¾lšÂ}òÕ%•²" ™ÑýÐ’ròš×‰¢8½m›(dF­):ýÏqè“_úê½ñÊGG8áz¤£”@É<·ÙqìÃ2g³ )œÖ¾*äh0CDôŽwæ‰¨Ž ZuÉýÎÑáúèý7Þødãut™FS¸Òݵ–IDAT6‰†+G„‰†i>Ñ™ ƒˆhxTPè ¯yîÈÃÿví7ÿÔ`utáZ¶­®n’«Â›XQsÛì.-×äú›—ä͵á¾pa å*ïFúD¢>ûõ²Å%¢ÍvwØÊÒßýÐ÷¿Ïáèp’—¾Û¸ë2ã-¾Q/è‚E×ê#•'iÍbcOØôÕÇåºÃˆJá>ùj=?“Ë0R9òpúkÒD 2ÙÌ"Ž;~Ê( ¯&èg=µßè“ß½ñÏ6¹Ky~Åà«Jì¦MÑÐõÂFþ«Bµ#<µ†égnºÅX¼ø€tzÇ)köš*‰Ö>ÊŽÚãÿŸþñŸÿýÐy´ IDAT÷¿çèz+ò_?è¾^’q]¤{òˆ£EùÈÿÖ¹°4JÛ? ‚qѨwKË*ÊE¦QF !¬µ5WJà.ưÆ48˼æ}<ä§ÞÍc_õÌ(Ä¿ˆÂ®¡ܰýí +6°a ¶Ç=$Jówºˆûfã—T3ÄOá>ùj½@ýý$dGˆ,* Óþ‹-¢‰ÅË_23õ¢#HPÈ*M c£ÂȰµS}ï雿zÝ“7ýèÏï<§Ž ö,Ó(ãø¯îŽ=û­;{o]ã×ä)Í¿|—X`ÕÛ\XÛ¢,±šCj¶–±X‹1°Æz²N“3ïìÑ¢ì 5Ûö:Þ†{‹ØžFç^wöIDATv·èûfƒ „­¾ðîŸT^d-šH kŠŽ| :–^¼ô°òÈõDD%""Rìîðš§¼ÿ쇯¹ñºR8"öö×` a‡ÿû–½oÔ\‘Qzua·?bׯm±×]+:&±µtÞß¼”¨EM¾M´‰Í«ù×FÓÅLáœñ#ÝØADCÃ#¤%L•H££ŽÐ¿ñýßýø+Ûœ‘­É)al”² Md?ºþ‘oÜtôOnþÓÙg¾ªíŸÕàj`„¦çï£u5Ò›ˆÞÎØ…{fÐ?¿Ån[ÒöðZ=ï]°ˆš(ö&OSv:†˜gç¤Ò牨o”(G–2IJÖùèèc-¢Aß]˜IDAT}-›¬¼W²¤d-šF†IQˆèÂ÷þñ[ß}¢Ñ†‡kÑ·VôoHÆ_LÜ{4Œã‰\v{÷ñ“ö×ÎW½böøM_€ \#ì?ï:Hœ¾pÎø‘¦Låd²DT‰`%KDÖ”²úÈ=Úºb‘&(4›Î;÷ÑØ ʪ¤Ð»ÞôØ5ß;æW·nzÃé‡G©n óvþ!þ4q÷òjŽæç™„QHÍö3Æ÷(¬YZô!ìö°ßFŸv½QZËžwÆhþBØëÝ3¤®Ykϼ»¿ËÙµG©šÝ÷`oáXvÄ=®‘öÄk^àé(Í‹½„#Šs7Ÿ¾‰ctcGN¦‘å#žŽ0eš¤å'¬û€í`IDATÛúÐ}”Uæ|4Þ'(†µeŠFèk^ö_¼ó?~g³g:IÄóQ5GîDQf'Æ,7e)± ‰xF±‰êª¥®æÈ}7ŸºûÂöáœFÃó]a‡’¥å†/ýÅÁŠB[ˆV¬†krò£ï|ò7=½; ݤfï#Q{KsÅø+*ʘuÛ›’¼QÕÂÆÄ§ˆ(-“0’µ”IRªd³DDó"zõ?ì£ ª±¢T>R*½@‹Gij’ˆ.zïýW^»)܃¢üecªŽÐ¢óºÍ]85‰µ¨Þ(5Ö5rû›O}gçrÆhŠråf©D4éúLQ(«<|gZœ7*åäU{åOIDAT¯X9û©R‰jk§JD”Í’¢œsò²õìOnnôέ¾¦ÿ£ò"“µTÅ?ÂÛ/è'š&zrgÿg®\awg) í˜Fç—ò”[Fï:ý±oªûFk¼N†Ž3ïêÐѧh¹kÖÒÃZ€NTG §ôõ};ˆh¨O šíáÎR²OïÈ µäÍô¯•S×°³;7HÖ‹ÂoýãŽ;nÿM ¯Zk–ñês’<yµÇù¾‚WÕ­›°æhÉY ñtzû¡qu¤pºøsµDD$d,kj2`Œ¬ò¦Ñ »ÅëðåÕ«§+¿sSkß^"R4kx­{Õ–ïýà¡xMG0RqIDAT’y5¨‹g ÀVÇÙ¹òÌö‹© JM—U…_|{ç¿^³bFɶ¿ú 'ÝS ܃òЦ刎>lû-×íþûß_<øàEŒªk^-6Bà8ŒrÂjt†v‡#¶Ê=•ûôw]â)*¬XgÌšWó„µ-â’©kØëÂi¿@Ouõ®…ÀET×cŒ½wûýµ°gºC),åNRÊO(eRý=Ü +“£O¾os6½eºhm}&´¨LŽr9²TáÞGȤõ‡}Ž‘Â×Z{>ª9ij}{Še\Wè/0°%5k »ú•]WXQa—ÝÖX£m1–L”uÖòš³æùÈ?Zk +#IDATô«Gë]bǽiE™qèu¤piÞgg6å÷ܳo*|¤)Ú±“ˆ,vQ}eRKôÕ›^uûWÎ, DoF x×Z}HŽQ~Xϱ®ÂëÝ'ñ»xmk"ާU±W{‰1Ư«èqõ]/¬/»é¡çžºök?+–ò Õ*™º!>ùÜ‚yƒÅãŽ9à´SW5R{Ç`huÏ"bù1šá?þp±×Qã–ÆþV«9N#µ@׫ûW«W²zõ§uë&"J¥}`RŸ´zõ! Ò¸Vÿ­Wï¡€ˆ¶4ðóvÆanÖñ÷/CƘQz»~Ñk‰¢×V\׋ygËvþÄUIDATæmK­;nD #ÿ8ŒbkÖè­f«¢âÍ3Ä?N`ÉîöD¬Í_cˆÿxhØ„þÖÆk^”rË¡æ¬E¬—=~] 0,¬£· :Qœ»ùtº„w%ÚÓ¼–Ö’ð%ÜA°$»UCwóé\èS@õP wJø¶§-­¥SuòaIö‚FO¯@#ÂÙg­³Ö;wq~;WóØTë7ÙlhIDAT?I؆’І®×Y ¹­mb™µ0!º¦ý‚ÙÓ/ÆÝ¿ØŸ²‡û=XuÄG-¸¿´=·4ó¸ù™{üšÍcÔȘͺ–£Ñ›GAK˜QcœÀZâ5)Æ…ÕeE{Æg4,pGˆX¾ë +Êóc.¢lT/j.:ÆMõ¢ïæþ] fã»æÎ0MKá( âÁø4b aÕÕu'*ÿäì ”‚vöñ°òk¬W͘f´3Jój.áš³q!8êm’gÔµÀýµ³ ».ÆÆø:â«”!únÈ{ëé¥ñÍšÁ$hùÝ|âqX¨m éäúGcŒ_—°¾Ot1¦ªdG^IDAT·Ùþ ®·Æšåû[ØÎêÚ9y` Ñ·Ÿfm$um®oçÞWZsEÜñ;TkS8ì(ö§õ.è¶} 6žã­à_ŒM¯1â÷hSöŠ lJ{ÂúkþjN¯Æ„Hxä%s¡ÅÐŽë…Ù «ÞEÉøÂÜPì jC§¸Þf×õ'El Ü[*ð0hŒi[=5¶»§mÅþÒõîø¤µ}aöáó°O·Ôó85÷È-ÝtüùÛÉÂ8̱ŸX£Uaíd7¯fìöøg§®ueíGœ#GÍy +ÁÝ ®·ñžÁŒUÜŠm¸®Í J!5Ç ›ßsW×^½ØÄêþ'µç‹½ìĪIDATÝm.ÛV2ûA`Ÿë]9S]ÌýÄ#ü‚€§îOáötÚyB¬¥º¯?vZ¸ËtåLõˆîOa€$Kt ·ôÔg§ŸWM¾qÜtf®$,ØmÀõ6­ón>MoGÓ ¯u¿¡¦KÂVe·oKœ6lé±›Î4²ð;bŸ‚iùoç¸àr¾8 ‰ƒ6pÔ³3 Š™Âî+Wí…]wé9ìZΰÂýeF¹ÎÜó+ À£ø)cÿ\»k©kBöñUsgÙS,£öÀ…؆ׂÿ‹ˆ‹Î¿ ”4ÿBfl솅U‘ä}*ú¾±auÍf”ݼCÅLáÀýÄ¿Œå— nIDATüy†Nî¹ü»æøõF¹¢›ÑrÆÜ1ê ›„QQ`iÑWXËÙ+(âÖoáû'g`o?ÑEYæ1T¼†ÕµGÔÕ’(sÚ¢}*°j÷hu5Œ½4Ùh;Q›~;×Ò2£ï]l[BzˆŒêß2<¥Å(!FÜ{Nƒ½Œzã©ñNMX<^iuUZ³mÀqŸòkç*èÖ¦–¦0;Ëbkóʨٕü;·éuµ­ ¨E[š#9 9±ûT«WAwKô•jl-ÚßG'Â&iz3êµFÚÐæ]ƒýn÷_»mî‡úÿ€àÒŒ–B€ró‰GN¿`KøX÷G5‹r&weü@þ3©YI«eBIDAT»ºÀ"¶0b]a ÇÂn{Õ«‰E1ÊŒ²Ù0 ©9NŒU×\Ç[øÉß§ˆ¹â5¬ñ1»C÷ßͧsµ§“Õæ®\7õbÃÝ|’)œ\íé3&çl'@oB ðÔh wÊIÕÛÙ)³ §9}á!ÕÒ\p_•š èî䲈  š“ÂI;ØñŠ¢6´$±z|ö’£¡»ù¸ßúœZóêW÷5Œþíö{sÏ OØU8¥…]qv—OXÕÎ[Ï…œŒKVË6p.Ø ®k±×4"N 3~­èEò%ˆ#p¯,!6Ï%úþêÃÙ“Gùn`TÁþËÊ?IDATò,„±l£4/ly¶a-C“ï#á £¦ØscÚ:Œôçrãe6¾lc,¢èkâiáÝ|º~_ ›AÏ_úŒ?¢—o4F«êZ¤× 7~">¬ æα›8ƒ ¶$âB‹qË…XÍ©L»aº›OÄqÜ)é qŸ˜òÜþs_MœœÑfÆŒG¬‘ÝæÀÑØKÛ?‚[´€­3îæƒc‘líY>X Í‚»ù$Eg¤0º`líY>X ­Ð) ЭÂðuØG5YoÂF|ThôªÏôŒRNÍÕáøi]+‚јšÅ†­©(3å¬wÿ¿î2±mø |^µ—©9žÉk6Þ30âBóLÈ^55k1²g'f ª¹æÂ¶ÂÀ5ÄX7}X 1ÔŒiÏ]¼nIDATº d¿ö7»æì×lsؘìÕe5ÕµX¢e1†ÍTôaÌNÄ60ʾùEÙzknŒ%}K¨«Ù M\Œþ2#FDgif 7Q¼¯_F a=Fžm7Fcb—XZŒO›«EuyŠ­wMy¸'iJ Äk ;k–ÆŽàVkp´¢@öÞν â¤ðxõ0¼ó–û÷Osàþ3'z/)pò[X³Óݶ%_o÷Ÿo±Ý¤‰iØ¡’³´H̳s[ª' ’6ÿŒ=¹Þ­9pÌèI±%äì\{z”-Q¹Ó¬Æ¸Ë‰±)¶yýú[ØàhÏ:íн G$×ÝÛŸÿûнM‡•P“¯×Ø<IDATY~ĽÂÙòÂZÈ.yKÐ…ÎF±ìrâí Qf9FXÔ5Iì™ ¬%lÉG/ª®!z5G«ëÓ( -JØÁÙ#ÔlUôYˆRTÇÎ;ï³_¿ö²›oÞ¸ñŽ{.½äƒíoA½ßZêЕÔkÚÓiŠXEÇm6MÙ¡š>×·[íŠ+¯[»nÍ™g®½àüËÑ€uz°—ñOáz7šØ¶ÎNц5Õàéjî~Ñô¹î”ÅÈE÷ßG É:5…ë=Òê“§É99›œ–ô²(kqÂ0áZÚÎx…wî¤ÎMá(𲯓qwžäüv#¢¶5É]Qƒ•z.„O ÆÛ–ä0·ŠIDAT¹ëYü 'Ÿû‚^‡·pX-ŠÆ¯imVKZ$ù-„bþvÎLî/ØÀ‹'q;ÃëÁÿ‚Q£{HÄñëú‘%£Á5k©«‘þåÀ¨7ú’ k0c™Ô\eE±—OÍ-‡|ë…±ÃÆ ¬ÅÏ3¹{L õ.ˆCÜÍð¼ö·°f#•6²^<¸gŠQ;{“,­;ûMë †,{°RЊQ£óÚ]T”ñ£Gp`ƒÃ¾lÍÖFóêÓšoÙk§®9e—_ïza¯åˆµ.CFËK`/¢xC¢ˆ²DÜ)sÇ.*z kÎZÍ}$ziu529ZxD¢æÒþ rk»IDAT1Ùë]îþñ˯Ùïh°ÒèŸR»kôbó½Á2ÙØë%9{W½+"bË·øþì,*ÆfÐxÛEipÍÚ›;;¥U)ìþË"ÊòmÊ:¨·º:ݞʹñ­-p»ò½}©F,6žÖí6Ý×Ù¡¦¶<öfІ¶ÅÐôÙé8­½F¢ñ^›û 6ú—mãb¿-‰¹;O#[j+ZÛÎNq§Þ (›z¢«‘ްSBÛÓYâô…ÃòÈÍóW<{÷§±W†¿gHذz+u6µ°im°_û—ƒ»‘5›öiì9e4¯fDœSöòñÏ» ìXs~£[˜[e¾¢”É}ªˆ;E”>òÆ„IDAT=:Ê8Qêõ«9;ÑK««‘ÉÁÿn>ÐË8lÖ ±Vè¸ã¤×`îÜwóéæ_m„Aj@r …'^QØ¢¹ÍÒqß×àDA ð””nü˜z'•HJ Û¢\ †´€n’¬è51;ç¹|/ì-…\>ÉøaxôŸÐÔüa1Î@ò5zO5Ï[÷ïÜÜC¢_Äþµ»RO ¸ ’¯}÷n${»8@ ] M)ÜŠv Ÿ ] ­gçZ”›Ñoj4ÞÍ'â-`ê½GŒÛ”„Õd1HøoÍöÖs²®æ$±ÇŒ^@ràzažº-…ÑíÄÍýIDAT€ÎÒm) ÐYÂwÎÏyÈÅøŠeQxÑ)Åè”v@‡jZ {ØYì$²ç¹Èî-û™\×ÈîI"èßÝ`ÿ ö—J”º¢,è²ç…1¹N êHá;6nô\·vmØøþ\s^;ϱ÷äψ(½lÿSŸÝã3†4ˆÑxk $ìu”¥“.»IDATqò°c«±~ý¹[·l‹8r}}áõëÏõ qjò÷Â"&]½Gich]G«köc×åéz7½üˆÅzfÍ¿N 6ÜP×øu‘ øØ±}BÿŠ(¢ô›(bÃâ-®šó£ØèßØÐ ºR-bD¶è˜¦» Ü`wØÖÄ‹@š[;.«H”VssŽ“/Cýy†8o£˜›î £Œ_vãæ -úÒœöäLÍIaâ„SjdÚ(…ž¦«YEÍiÏéÕ,„1<ú<Ö¬4°Ùu Žø‘ÀÅR6>)Œ°%èì@B ð„à )•Æã„IDAT ÀS®T[>¾ã…$S«_о0ORxÕ¾ÑþJ’ }ažZr‰Gz©óúÈ·]ÑŠ*ºCóSø‘›/}Ù™W¸Þ^ò²3¯lz-Ý¡i)|íç®"""ëƒ>¸¼ë»zQ)NJ“Ó¹´zíçþýüÏ~ú-—ýøç—¿½YÕt‡¦¥ðŒ&ëû­¾ô}šý6•¥Ühå£CN""zrÛÞfÕÐ5š–Âá“ÿôɯ‘66ÂçßwŠ}uħÿau³*ètÍ<.{Ü/>µ0¡Y T aË"»{ÝU·ßÿ³s¯ G$ ;43…Õ²ôòKNüÀ«g&5,û`0¹çk÷=ü«3Ý“Øgޜמ·žòÙŸt¢f¦ð#·¾yÕkÿçÚ¯ü>l„'n{³ 'Oëz Ðéšü æ'n{cs„} ÃIDAT èn¸§OHažp—wžÐà wyà wyੳïòîÿ~S…ÿ]Þyå&£^ÿ/ôð›=hþwyç•kŒöÜ?wÔ€Öá|—w»É¸¿»3ZØ]ÞköRÃîSìüëŒixÿŠs综Þ ‡ÑßôÓx/5°÷׃ahºÝåÝswwwÕßóe Köè1Ч{@{$å.ïQ¢6z7=.ÁÐ"‰¾Ë{]½×(…D)W¿@;q¾Ë»Ãs¢,ö8 ;Tí¡Õm€ÞÁÿ.ïŽÀt‹~Ó÷°+G ßó»aM¾1B~IDATÁù.ïøczç{ª!‚ ÇáΖ<á.ï<¡/ ÀîòÀîòÀSgßå Óñ¿Ë»® €žÂÿ.ïˆ`è)üïòûæ“]€ó]Þz\‚îòЃ’r—w€Þ”軼t=ÎwyoÏÛ‹ÿ]ÞqKuèeœïòÐãpO5žÂ{ßö|Lçx®‡3Ðùû´fQã+–9Ç1šÜJÞ¶nÙæ>pÑA"®»ºpé£/Ü£ì}Ïéêº?ò^·v­§ ìâž–q]wî=Ös`Á9.v.ᇠx–µƒx‚ؽ#N8n’IDATå™gç Ýœ,vú¹žs5öpÿ¹8÷Os?˜èÞ‘Â^‡}¸vPûÃÔù* â^N§8¬¨dò¯+šý¶ÕÂà=Œ˜¡þî!a¯¡ýÂÖ”ù‡Ž­†ãÂ[íuÿxΩ®®³ô’î<§»?ïW¿:uêÔz–oÿòÔSUFÇ’òÎw^!€ó¥/]•~h$)¬òwÝÚ5 ,\ºt™†M€9mϞݥÒÈ#Û¶K*‹ë)üÎw^ñœãŸ}ÚÆ{ìá"bY–Æ €9) CÙºõ±ÛnÝr×Ý÷¨ 6â8V¼éÅ'±aeµRó<¿R «Õšî €¹£··§¯ÇÊçs½}=zèÉø¡&IDATv‡ b[DÖ®]­"xçS»wïq<Ï©èÞ`˜k.ìËçóË–ذR䤑Ò~1.ºèòMgžù¢Óß½»´k×¾J¹R«ùº7榞ž\_ß!‡,^¶lÁ/n¹ûÆ›n²Edpå’Ý»Gl×¾}”À0ŽGŸ~bÝ·¯Ÿì\¼î¡‡•J^©ä¹Ž'®\""¶zºR©Ôj~±˜Ÿæ€¹eÇž'×}ûú7^ôÒxhE°z©,‰ê]Í ‘ì€iȰØï1}úÿ^{ý3o¹hÕÒ•"R«ù•J½êµE$_ÈïsèãZþoמ÷šSªÃŽÜµ=t½‰Ìb ªtIDATýñ)9ï5§Üðo×Z—ý9¼ß_¸¸(I-ì®™3ff›`N «NìŹb1·c¿¿°r)±aäÂ83¯z¹' bßqŒÀ‘$iÝÀI¥°eÅÍkZdä–„¹Ø K®üþÁ½{¼Ð÷ÂBO¼p¹½b°§·/w°vºˆëFqÄaÕ Ãó¯ú„ˆüûGÞ[FD‘a$ù±O‰È¼÷¡ãz~d„‘´ [»ÝjVDùÁ%’Ïmºrß“#»ÜØóB×óvø=æ.Yf󬥃ƒý3¹§ÐB/3ö=ï?Þ¾CDÎ]³êko½0hLˆ¼ù«×«§žùð‡$ W‰*sIDAT£8–(l¹4[D CDÄ4 Cµ*ÝxI¡ë/¸Å¢¿ß/öå\Ï÷<Ïq=Çõj5÷¡‡ËåÚg®[´¨(†±Ä†"\pn²è³Ï~ÅÉ'o<îØçvØ™ïÿÛ÷ÝwÏe—]9 / ÆÓâÿ;è4v«8Ã0Dâ86DÄ0âú»ú‘äE ­zðþxûŽs׬ºî ¯W7ÿ¿o©/p­PBKÄDÄ´L‰E ‰ÂHe¯-"¦a˜¦aÙ–!¢î-Ž£(xf¯S¶CÇñkU×õ<×õjŽWsœZÍ­:î֭Ǭè=mãz•Âqòaúñ ·ˆÈ¿ýÕå÷¡}àòƒVŠ+IDATN~Q»½¼þk׊È@oqÄ;ÐNÊ[¶üúÎ-w¼ã¢Kp9sßönÅßÇ®eÄ7*Õ¤ûƒ¾oĶ؆„æŽ÷]²êSŸ‘$ˆ_{þæïüGÁ;Þw‰ˆ„Fºq"b[–ııiR¯…M) ±ˆÑXMN|»7_C ±sfÿ‚܆#—ù¾ïzêÇó<ßõ|˲r¶%*Ø%NÍkQxü N‘ÿý‰þð†[Ü6¥x"g›øjýãÇÿVDþÇ_ 6Þºæ-¾ë݉¿Ž]«ñ•1Dâ¤H C1Ì86EByââ‹ûìg¥ÄI?qñţˊ" CiÔ»’³-é×&£6ûIDAT¦iÛV<£±)æî‘(r¢(Šâ( ­°ÐæòQ! ‚(ŠB‰";Œ†ãضG›šÔ×ܲëýÞN9éTSIJ­_üâÆk®¾JD.ûà/zѦÌÞ¶›àî»ï¼í¶›øƒï¾ôe¯zÕ«^¿jÕjùÂ>ùÃ|WDÞþWï=ó̳-ZüÊWœ®¦?÷¼Ó¿÷ß·ˆHçÕÍW|ß»ïJwR…iÜx ‰¥±øQœý0u\mûÅïYóÙ/ˆHÁÛ/~OziFøQ,"¶m¢ú¦iŠJaËkl)‹òΧ~²Ó-9¾ãºUÇ­Õ¼šãTknÕqª5·æ85ÇËçÍó7¾mCG*¾IDAT´ƒrêãdYö]wm‘W¿ò|1Ûn»éš«¯úô?}ia_ßæw½É6Œgœ^ã–-w\sõU_üÜW ¶½ù]oZÐÓwÂɧÞu×–¿ùÈû®ºòêKßóýè†á={†V¯ ¹øâ^úžìß·ç‚7¿ºV._ø–‹~ðÃ_¾ì¥§Šj ‰äÆÛoyÊ îJ¼-]É0DG¼$®Ç\ò^EAlŒýB¥«às׬ºö祟‚úÄV½ý@ŒØ°’vaÃ2ò9;ÃP×¹4$ ã_Ú¿"ê‹â(ŠÂ0 Ã0Œ¢0“‡QEQ”+äŒXý‰d›Î=¯^™þýß}â¹Ç?ßüuIDATÊçnýÅÏEä˜#޶zò"róÍ?=kÓ9†=zžÈO~üß"²îðµVOAD~ø£ï¾ðÔ·ÿòf9ùù'Yyû¯9?B1 Ã2oºé§7Þø“Ûoÿ…ˆ|ýÿö¶·\”ËþQ²ûŠã®nž¢èêN11Ü•FëËz"6ð}Éåra(±D†)"ïúá÷’–FÓÄ¿¼ô•"bÆ‘Äø¾ˆäóV–*†-9#Ýêæû÷mydïovì¯:^­æTkNÕq«5·Vs×u\ßq½w¿óŒ¼=”¬8ù(ýø†[îà¾K/{we¤”ï+Z9K%f’οºã—E¹Üè Ójú!ÞIDATÉìúaø½ï}§>²˜ÉY"òÍoþûç?ÿ©½öký_{ñKO‘È }…dQ¹ ¬n~Љá®dP w¥Ô»bc a‰Â(0,‘8zÏ¿ŸDðÃ]´þÚk¥Ä_8÷呈Ä…‘š oç’²Ú4)l™bÙ¶Ñhò0b Võ‡^¼fyßûGöìS n½!Âõ×óÜà”“ÖµéØ\Þ®—Xql¤¾ã'ŸvÊÅï}ßǯ¹êÙÇ¿nÃúϸõÖ›Uß %ôÃ|n´€UˆˆyÊI§†~˜©|þóŸ‘Õƒ‡÷ô÷$#Óäsö¸«›§á®Ä_Çîdı¨ö6VhàIDATC Õ0×›‰£Èˆ¢(ŽcÃ0.þù’~póÛÕï#¯ûŠ4‚ø³g½$Žã0¬xËç­¸ÞàlHH£6rùtçWäâZ¸XäTÓ4mãwP©”s¶}É%ï¿å–›Î=ïô­[ÿ¤fl^ÝÌkÔAAIDAT¾eÝöÇîD)ÜÆvN›ÉÄGñU'ÕË»­o~kfî­o~ë±_ûªˆ\uÒéA‡y ù\£g¯úž¨«¼ð²Í Ôjê'‰4º¬5mB½,]UÒ‘®ÑÑíáû·‹ÈúcÖ¨ç}Ïìá'—ºtá@­â ï+UJÕ…‹,Y¾H]ÅÍ÷ü=»ö,]Xì)”G*OïØ-"‡®>¤·ÑàP«8åRud_)=—šòÐÕ‡DQôôŽÝ‡¯_™Ëç<×{ü‘§’µ·\ݼƷ½;ñ×±{%ß™Ñó!~vÞùG ­Œ|ß4MòÍñ¾VQ,qDQdær<úä‹oøV’«#û‡¯¾æ´nþtIDATºz‹D!o‹4ŠÚú¸qsÐÆZTæ²!õþs±aq¬Ž2<ë9ëÓí\ù|î˜çlH†-^ÙÄ|>××ß«†—,X²l y‚E‹¬:|EzdzÊd ½®v«º)Ü’êRý_߈Eu$‘ŠŠ˜=™Öh‘ÛAEµÈ7”F‹„*_GΙ–äò¹±½2’ŠWTE²1æ ¹äÜê1¢z;1ºßõîĦ;%ç.§ÏhSÿìÜå ’÷Å šØÂ 5—ˆê=bôD’vá\ÎRklô“$‹%n´ùI …Ñ8z(2zùˆúE/ ƒÿau©˜¯{—âéFÉÿïÕ×óIDAT#CÕ±Tß{Yïç¯Ù¹kñd„ûªï½ÌÎÙ*_cCF¯#±p`‰M›)LÀ«ÏyÞÉe½Ÿ¿&c4:žIÇ´úÞË^}ÎóÒa»p qß¹B>·ã‰'fl›`NyÉéÏ’ÓÿÏft\7¶K—"ÉUÞÿøà®iÙ8ÀšNá‡þôà¶mÏhݘGÖ®]~ê •ÂvÎX¼lß÷éKWéÞ0èŠþ<åŠ×ß—/WÆÜe9h\"HõŽð“‘nkÁؾU7è-ØU7¹#’|öê~Þó±s¶ˆèµÕ`îQì¤r3­sg4Gp) cdª`Û6%U§ùö ìâIDATa”³²)š)„ qÅ;¯?ö!) £ÂÚˆŠ`Û6UžA„‘m™*ˆ3!«"µ]!ì…Q˜[™%ܤ0ŒªEõË~ ©{G¤"ØnÜ™ÈoU§·êyË ‚¨7µ(?Œ¨… µ¤9ضÍÌq9%)Óm- a/Œz vè ‹HºQ¸¹cÞ_øÒm£-­úEH«Z8=A}8·@ZÊK#…ÌVñžbw$Úó@ä–Ô˜èÉߪsáaÒ¨¶–eä˜ËŽ‘|‡¥©BXDŠ»xI'Í-µ,„U¿[«ò¹9ˆIa³‡WÿYôøþ®ûÒ6)ˆð‡¯2IDAT̸'/=õ(37ôˆHTèJ¿«w¨‘Áo÷‰ˆŒD"vFaåsí¡M²`e»•¤ÍI£N¦c4ÁéB¸]×45o86ˆIa³AéIoË¿ÿ@šñªÅò‚…ÆÂ!õŒéVEÄpݸP‘¸ÐkJ-Yläs±ç‹Æ+J_ÞÜ»7ÚÉÞ_{wÝìýæÓñ‚µÅßm mR Iz§©üm.„“\V »™’vÜÓ4ᬨ… ÃuŸ= þ/ïæ¿W匵²¤ÇÈçD$ò|3¨nÕp]5Y2ê7Ž0ò9u³7©xQ¡ßèub‘xIŸì­µíîÏ?h¯YþŒŠHgÒ[IDATé8®™i–  /Œò–)MAܲEX锆‘½ìéÁOF˜ïJOz7ÿ½¼àPYP”¾ú}ŠãF«‡É@\èUYlŠÄùEm—ÙcÇ"†xÁÃ?þCó'¼Û7ëÁ>(—)„“~ á¼e&ùÛÁÍ…°L¤§ZÜ ­ry&$«€¨´C /(Šˆêç5êw2Ãu“Έ=¿y¤Ñ›—š;fùOþ69S9i‹±}„“¶ˆ¤·o»BX dÚ"š{§¥M½¿°1VzdúÙÎÓgÆ7/$3f‚ëÍÌÒüÀlâŠqçvQ·n“± ›´?Hª(–TR‹ˆôåM·,"qÕ“žBc±õ°œAIDATš7}‚F¢ùL¹qOÓPm¶mâJz®–åSLᤡ e™lFf|»é3ã3A™TÄ™¹:¬wj» «¤›ÆÍÛdëÙ[“Tª#r‰¸Ð›S§Ú…óˆHÍ5öV§‰ûìõ/³-³\ñÆtõ £Ì™r™ÞÚõNS¿ƒ r¾d|‹ MŒMãñÎ¥£m‚ “mOP©=…p½f…ªì8rAŸW\ôTµïæm"¯(ÆKúÌSDŒÂh9œt“ˆìÞÑäªxFɉ÷”â½UÃâª/ 1̭֬}ø®·ï15•ãÍçetßÌĽ­ jiÓ;-müNJÔæŒ;ðÚÇ0ÔIDAT3Yø´…SKVùÎ!>`ðúsûŽY]Î-*Ö¤°¯ÚSdçî¸R½JúFoN ¦Hýô C$îÉË“%1¬úÍçëO-8Äì[m.::Y²jöèe‘›IÛ–’#réþ­¯¸IM¾¿p:Ñ2ã'2û¸ —TY  ³pá"oéáqn gär‹íÜb3 £ÝÆ#OÇ^ED"§"nÅð*²¦(–#nUÜjìzRݧ–÷†éÖ¼PÚ¤mè [ÅEIÈvøí5µ#'gÊ¥ áLËÄû · âÄÔ4Ý1í­ºÉ6 …00§E–% V…†[ŠÝŠ•/Ç^Ee±´¸&HXL;JãIDAT/TÑ™®ˆâŠkôõl×è7(Ä•ªÛ'©ÆßôïäÙ–„Ã0²,³C‹Ä$ŽÎeŽÉØî é˜Kw`H7ø¶ß<²åJ[®·å,0ËI?òÂ(t†]£/Á’êp–>Ú–ˆÜræÙv×NK"ØkUnwª…Ûeb»g;?ÕnúÎk÷Ḡ§ã€¬T-,ªGp*gÛe®YèW¿/(æmq¼z쪇Jú€^ºn×¼<ǯ/L½  …±µpFRäªÈ-;^ Â×3Š*yÕp2‹ãµš'nyšFs‹°2ÇSZ[ +*s“ÀÜr’¹’*{3â0R?†e:^³Ìœeª‰VކIDATU‹°š¬C?‹iNán;ù¸Û¶@WhÔÂ~˜/æ-Uí†v¯ãùØQ¿“R7]ó*q£!®í£µI»D¾I‹D»BX¨…ÌGZ8U/ôŒb>vTbªÌm‘¼µýÉoñFD¤æFÏ€6,S%¯ãͽÓÒ…°ãŽé$'¤0€yÈp—¡è­ß}£9v•$|ž»5' 5'è)Úõ ‘Fïàôa:%sšF±`…c›'HaóÎèYþèõÕÒÕnÍ jN "ŽÑDâýê¡úí{£ÃJÒÑò4 Ó¬?« aìz¤0€ù§éè\Ríª:7—·‹q9¹Å¸Ü¼˜bÎáß^IDAT”T×—Ýt‚FR  –ã†ÅÆõ9•n¼×̨щdLÏh#ƒˆø^àcnê-îjXf>vL«_ZÞ’¹é’*‚3MÃÔÂæ¸ËŒIGp;ê¢?É%áU!Ú½ÒænöÄò•0ÿdÎ`¢bά9A¶Ù¡¶Wµá:©S“-»q¿Ë´,³Ý}4‚hÌùÊIýK h}Ö†45;øùÅ"â¸e[ÉïœeH£Î܆®Ã%{’¶àL£°Â棦3˜?ê)Ž9N–Ô¿–m…Á˜¶§h–ÙÜ)-‘iVõoúwÚTR¸åßš§™Â’\f½é{Ð5߉î`o€.1f9KIDAT¶6M3顨Ê7ga&a±`[¶)©ÓäÆ-„Ó"š a™r‰YwZp²Á\H˜“¾|Í ƒ…á6Oö.ÉÅ{ýeKr‹ê#Û#²Gä7"Òo9Öão‘$˜‹fýšÄy3h ŒéSÑc^´8\úì]ÏÿxúYU›¦©Êát§ˆæBX¦«§ZË{Óe®œ~6¹QæªÄí’™±å€ùl°0鉥}p·[H»»Ž¶[NçÕ%Ûܼp³‘Öcn÷ÞêOn¼3ÂR©áž}#Uǯ:þÒeKDdðÐÁr©""åRå©Ï¨YÂÚˆã=¹«4\* —]ÞoÛf­V«TÝJÕ­”û¶>´wÄU ŽÆF¾FIDAT×¼p¸ìDž“¾ã²H‹Ó4dl7µ–,\S ÀYõ³!î¹÷!qjŽ™ËŸ³éùƒƒKËoçS;ýÈ‘þ¾¼™Ë—†K"òÀ·­]s¨m›bö>ñÄöJ¹ÞwmÅ¡+‚ ª:þpcŒçù[î¸sã‹N‘ÈsFFÊ"âFcJX/í œÖ²kZ) `Ö3Ãp$(ŠÈÈþý*d,Ê.‘þ¾|º xÝÐà/~ùŒˆ —Ÿ|IãÈÛÿø¨çùŽã>ë¨ÃÕ¥!*5Çqê€w]ßqÜõG¬[yè²Z­æº¾ˆ¨B¸äÙÒè¡"¸å íªàúÆO׫º¨Z؉rv®0\v†ËγªIDATÎ;ž¹þë?ݹsOfÊ ëV:Ž«~zøq5ò÷w?<<\v]ÅàrñÃ(ò|×õ‡KÕb±àxþp©zËÍwˆH9ÌTÜ‘Š9å¤×Z¥â%?*pk®Ws=/ŠÔ@號ô&Q ˜õ’vá³åª]·aHD7´msO%t¼ÀñÇO|á‰"Rª:;víÛ··ä•À‘²g‹ˆã…Í?™-,liU )  Ë…¶èID–µßëKö÷åOþ³£?rÙ_¼çm/w`xÄq`뽩g× .XØßãxA©êæLIDATÜö«»·íØSª:¥ªsüQ+ÔAÕ?ö—ª"RÌÛÏ;á¸JͫԼ_ÿá!5 NÅïØÇ5“Å®¨¶rv&‰Ia]ÍXzT¯±¼·ÔéŽpª]Ø5ú2ãOxþQË÷ùAPª:É‚0Zôz•°·ýú~•ªG±Ö*.íÛëG•šWª85Ç‘S_ø¼¾ž|©âìÜ=Rª8¥Šãy£×ºôü°RókaU 'ã‹yKq¡`÷õTöfÍ )  ûNùðªkùröÆÉ‰È²*b‰Èw¾ÿÛÍò‹_ùÞm·ßó»;øÄg¾uïCO©œ5‹ýA©Kó»a•ˆìÜ=ò§Ç`&f{IDATv‰H©â<ûØujQª ÚÞ *Uêý…#·œ·Í—¼ü õpo©&"Žã†ATò­ÎBÉÙ¦T'¿/,æ­BÁNªàžB¾¹I‚>º5´)â¥+óé=Gç‚•‹š'Pµ°Vÿpç½Ûwì½÷Á[ôÝ¡btA_±TqV.9ý…Ç%×åyîñ£ÀT“wÌ:©ºAoÁ®ºí¸*mÝÈí^ £?âÛ}Åí;÷‰ÈÞR­ÖÃsUqdw‰Hnì-—ó9+Á2g0ÀAf?ûM…³®^úXmáo·ôn*óldY#a>²zØ5¢R5©dKç¸#W~ôòwöäëç×çe‰IDAT©¾hÏ=þ¨½¥šú9îÈ•KzCgضMU ;^½Ý ôý0ŒTwˆ ÞðÒôJÕí™U-,"~ùA$"ùœ%"ÍÜv×àe€ƒÇÚTXq‚ñÈÏ£­_/þñ[ÆàZY6d-_'‡Ÿ &¨Õ¼oþÓÛïyhÏŸ¶ízä‰gDdpù⣇– ­V¤¯üÆó_¼é¤#ÜÃÝ¿â%¢š•Åò_¼ùõ¯Ù-"«_­"ØåYG ½ÿ¯/P ,ZaÅoq9iDpO%2N ) `±zöûgÃ+ƒý;ö?tûâý[¢í77}%}‘w‰ˆ×®9tíšCe¼«/õ!IDATè]:p´ˆˆRuƒäÒ<‘[íÞ5ƒýƪ…I`ÇŠq94ú?f½ßXBæÆÌ"’³MÕ‘‹7‚…0ë ¶¬Xc¬ ‚×%7ÂþÝ7쨤:BHûNƇÎp¦g…gU}›Ž`qŒ~i´B¨üõÂ1)œ‰à‰ä¯B ˜•Š»x¶eÚVýøVͨ_/8ÁcïQ4š¿ê@\:‚#·ìE ¼À°L/ˆÂÔ5ƒý0ÎYFRÿª®„õ7÷õäDd ,¤0€Ù«¿//©ÄýòößßùÀ²ô†çÄùb2`xn½lÔ†ãžEéa£6Üc›µö72ª<ýàH¸d¨'c=ÉIDAT7©†à RÀñ-;Ev6_d»ÃAa‘ífÆ/´¼‘0¿ÐÊ^‹§OÆ45lWDÜ 0¯ì÷úò•ô³+—Ê¢…¤/DómåÆE ˜ÝÔ-ëÿá¢sšŸ ƒÐ²­šëå-Ë Cõ[=e8¥¸¸ ðª•Ð(î~Gú‹Rv£¶w ý1'X¹\O¥òwjÛO ˜õúûòvÌ!™æàä–ÒhΉW ’Ð[:ÃanA,*Ä×X)"~8 "a¸$YrúÎöáè±¾—˜l œà¬ sj#Nä¬áæË˜i¬â"I£ËYfÎ2-Ë´³çmSýˆˆe›ê§X°Ô50Ó,ëIDAT¦\ “Âæˆ…Ť¿„F™B8ÃkÎU7°S''s™8U'w¶O‚XUÁÔ ý}yU«ª6ól Ó¼eªÎjÒÔ­XDÂVY¬¨Û*§o®<å*X!…Ì)Å‚½lI¯m›™35Ò¼p´×p!íóÐ"¸£1…°4ªà‰ßÜs\¤0€9h`añÐåýéTmW'ÂI#F‡B8-i‘˜Bï´´1}$®»îú)/0cRxóæ umÌwÜqE2<&…·?úÄAߘ×hHaЉHaЉHaЉHaЉæÈ½6~~ãº7@'ûâx IDAT›7_ÈÙ¹-Í‘‘{ï¾U÷&híÊ+/×½ Ýkˆ\réãO@ƒù…B»0èD €Ns6…‡Ö®ž¡¥MpÉãN6½[Ø pxa1?M"…3nõphíêä§Ý”]¢;·pZ¶d²»Ö=»?sæÃ>bn˜†£sn{\ ­] c‚¦ý›ÈçÃÛ4ösÃAê#¡% “j(ýw"y˜ §‹¦–Q: 'sµœ¦Ý4¯¨Ý6¤Ç4ÏÛ¼³é-É,3YQËiš—Ù¼ö ŸÔ+3‘¼Ãìí^Æ– <ð˜isª§ZFó·7ý5k9<ñ¿™²9:ÌÒyâv ZtwéIDATîNóô-gì°=í²¯CàNd±ívögŸÑ˜iÓpt.ižÈ7a¶˜ÈÏtËcsC|¦ý}²:¼S›½æ2\&ùnâ[5ÓþÂbÚÚ…çÛ‡8Ó¬q–?C-ÈÓ¾ ¸Ø9ð“2m=Õ2mp³.£'¸Á3ýîÐ,Óôªfþ{~à l^ì¸gŸ _Xà`šD-ÜîXGf‚®=â‘lÿ£ÛOËx©Æ=‚$mþu˜f"GÃ&>ofwÚmOç5¶\à¸Ï&‹êp l\]ûÂÁäZ$Æ=(Ôî¿xÿóÝòàÛ¸Gç:Œw‚–/Ÿ[ÕrÛ&¸I÷1“k2iÊíIDATVÝy6Gäw|";5‘-i·Ìyaƒi.÷‘˜çf´Ä£~¦ )Á;ÙÜ«¸pxa1OL"…3÷æšò š/ž,|ºVÑÒ¢óà›– ›ìžví«1æÃ>ó¿xÎIDATb–ꢣsÜ WDâxš/ 7‘NûJ»Ð|ØGÌR“k‘hwû™t ÛaàÀMjQFCfLfØHi7oæ©ä+N/3=}çíižx‚›”™ yß[®==¾Ý4㾘>©W¦ÝÎvç L»­…ÛÝ–­4geº j9¬¦LGÀMd–I­¥óÄF›¿ͳ·œ¾åŒ¶§åêšdlJŽ»Øv;{€³Ïè L»I§póýt[Ö§jšIåòDn¢sÐR>ó œÈ·q¦¿´Íyq€ lÞÚIíÂħL/6 ¾‰¯kÖ½°À¤LC»ðt%cæ¹%%žL8k¦0ËnÒ µ Oû.àbçÀ ˜beIDAT t6•žjíÜë7)'[wXxzÇ꣙þ·\¾1¶­vW1Uaæ?“-oõ¾°ÀŒ:ÐZ8šLÛLζ¼3y’ÝÓx¯_õåWéaI}ßZ>Lk×n˜™%Y~fÞvÓ´\Q‡Mêùé/ëÞŠ™õþKßqÉ¥W¤Ç ­]­kcšG·=ž~8>É™w¹RxöÙÿøøÍNÿñ›ÔÀ|ØÇŒ8Žò–4ï¿ôŸúÌ¿6Ÿ‡ïrK¤ð¬´ÁyëºIDATo¿¡{fÜ|ØÇŒ9™Jóh¾ËÍHa ‹JóGç@'Rt"…q æÃñýy‚·R9ȯíÂ#ýùËt-š-ÔíÏÚ´)y˜ ;ã§ìZ™øxtÛãCkW·|ÛŸuæÀ'–žïš¿ÉÃYýE]3tXr¯ôðÄçJÌ®tn÷nvžl–šÕÑ)<©"b"â¤ÜHtfŒtÓWbóæ ¯»îúLt&·WãÓÙš _wÝõ’ª£“é3õõ,¢Þ”æ‚1y³2oeËw¶;u(óÕ@f¤ýXï^“ÂóQçümþDfªã–Ÿþî‰àDº°U9«Î×R­²5ù­žJnCéDH²IDATž©ˆÕ-3ºÛ´ûzËÿâÌÉÿ 5ïBçpçä …çq?gÍŸÈqVtá7ö¬M›2åpR K# ÓœÄn»¶ 5½Êânâɾ]øÞ )[Ó{X’žw’ÿŸNð»—©:,³ ¿Ìé‹$unó4l5NÚ%&>K—Kÿ•í·o &òqm¦wßIáùh&¾{]ĪNQÑ™´«‰Ô¶éü•öõò,•i8ž-fâ#G‹ªÌQšD¦]¸ù+š“iyì¶ N¤9ݰ°fè°¤]"™¦ù°Þ\ÍßYt,®¥æù‹’ù·û<4¤ð|7‘ŽMÍ#[öi7ûA/®AiúIDAT–ÎÐ$=3ÃI#¯JÕd¸eÚ΢&ˆvïTó{Ô<¾ådݯó‡SÚìTçýAÞwRsP:1Û ·{ªeÚΊÆ,ÅÌ ) :‘ íÂ@·˜Ômr0g³Ï|ø®Î‡}Ìxÿ¥ïн Û<|—["…g™ùð]ûجåý1ç°ùù.·D Ï2¼·6f—ÙÒ9wñINptt"…@'Rt"…@'Rt"…@'Rt"…@'Rt"…@§1g0ìã_Öµ0?¦ð¦³6jܘŸê)üº×s'pÀL0.ºèrÝÛó×ÿ• ÜX£pIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/relocate-repository-url.png000066400000000000000000000323761203611042400340010ustar00rootroot00000000000000‰PNG  IHDR×)–åb pHYsÄÄ•+tIMEÕ bòDŽtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝyœuÿñO}Ì‘Éä"CBÈäàÄ‹å"<ñBYw5®x-ПèOwî®î\õZqåçâcýéÏÕ]q½%€ Š”# „@!äšééîªê:~|»kjª«{ŽLæÛ3óz>æ1©®®ãÛÓ=ï|æ[ߪ2¢(’„w½ëJ2_þòÕɇFœÂ*×®Y½`Aß’%K54 æ´½{÷”JÃnÛ.‰,®§ð»ÞuåsN|ö^püñGŠˆeY sR"²uëã·ß¶åî{îUAlDQ¤"xãKN9jýŠJ¹êyµr5¨Tªº sGwwWO—•Ïç_°1ÎIDATº{ºþôð“›~§ b[DÖ¬Y¥"x×S{öìu<Ï.ën0Ì5}}=ù|~é’âQëWˆœ2\: "ÆÅ_±ñÅ/~Ñ™'îÙSÚ½{y¤\­Öt7榮®\OoÏa‡-ZºtÁ/n½góÍ7Û"2°bñž=ÃO<¾{ÿ~J`ÇcOïXû&»Ö£¯¿hpù¥’W*y®ã‰D+‹ˆ­ž.—ËÕj­XÌOsc`nÙ¹÷ɵ߹áM¿,\î¯Z" EÂúP3C$=a2$ö{Çžþ¿×ÝðÌ[/^¹d…ˆT«µr¹^õÚ"’/ä‡ö;Œ‹€q-û·ëÎíi•!GîWÓâ‚IDATÞ¸ÞDV±þø”ˆœÿÚÓnü·ë¬ËÿNÍ:Pë[T”¸v}×̇¦Í0§'ò¢\±˜Ûy ÖWŒ 9ß”È0rA”šÈW¼Ü°úQÍq ß‘8i]ßI¤°eEÍ{Zhä¹È J®üþ¡}{½ æ…®¨o™½| «»'7S/:ˆë†‘ïGAÅ ‚ ®þ¤ˆüûGßY†ï‡¡aÄùñO‹È¼ï]ãzµÐBÉ [»Õn–‡ùÅý’Ïmº|ÿ“ûÝÈó×óö ×~Ü]¼Ô>îYKzå+€Nx¾˜QÍ3jUÿ'ÛwŠÈy«W~ýmù|‘·|í;€€uIDATõÔ3ù°„AE™[³EÄ0DDLÓ1T¯rÑ ¹Þ‚[,ÖÔŠ=9׫yžç¸žãzÕªûðCC##Õ³^¼vá¢bDbˆ\xáyñ¦Ï9ç•§žºá„ãŸÛæÅüàß¹ÿþ{/¿üªiøÁ`<ï ÐØ©¢H É¢ÈÈêïVP %/âK`Õƒ÷'Ûwž·zåõo|ƒz¸éÿ}[E°ˆx¾kX"µPDLË”HÄ0UöÚ"b†i–m"êàÞ¢¡( ýgö9#và8µjÅu=Ïu½ªãU§Zu+Ž»uëÐaË»ÏØ°ND¥p˜~rã­"rçouŽ´f`IDATÅß}øÃ¼â¤S_ÔêUÞðõëD¤¿»8ìì å-[~}×–;ßyñ¥¹9ŒßöNÅÿˈ$jTªñðñk5#²Å6$0w¾ÿÒ•Ÿþ¬ÄAüº 6}÷?âÞùþKE$0¢À"ßÛ²$’Ȉ$ŠLÃz-lJ±XˆDŒÆnrR³»óU1Ä;gö.È­?zi­Vs=õåy^Íõj–eålKT°K”ü5¯†Á‰/8YDþ÷'?ö£ou[”ⱜmäOë?ñ·"ò?þúƒÕñö5oñ»Þ™øß±c5~e ‘(.RED‚@ 3ŠL‘@Dv\rÉŸûœ4‚8Žà—\2º­0” ðW£ÎIDAT‘F½+9Û2L‘z-lš¶mE£1™bþç^ C' Ã0 ÃÀ ]A.ßÃ00´ƒp(Šl{´«ÙHüš[v}ÜÛi§œnŠX¶õ‹_l¾öš«Eäò]ù¢mL½ÚV ÜsÏ]·ß~Ë~ø½—½üÕ¯~õV®\%"_üâ§~ôÃï‰È;þê}/~ñ9 .zÕ+ÏTËŸwþ™ßÿï[E¤ýîæ+~ß;ïJgR…iÔx ‰¥±ÔÂ(Õ‚Äqµí—¼wõç¾("qo¿ä½É­‘_ #±mË5¾Ø0MST [†XcKÑHj§îzꧻܒSs\·â¸ÕªWuœJÕ­8N¥ê,÷‚IDATV§êxù¼yÁ†·PN|œ,˾ûî-"òšW] ¦qûí7_{ÍÕŸù§/÷õôlz÷›mÃØpÖ9É=nÙrçµ×\ý¥Ï­`Û›Þýæ]='zúÝwoù›¾ÿê«®¹ì½üñoÚ»wpÕšÐK.ùÐeïýàý{/|Ëkª##½õâþè—/Ùé¢:CBÙ|Ç-íw7OTÉ·¥#†H㈗Dõ˜‹ß«ÐŒ±¿PÉ*ø¼Õ+¯{åùÉgC¿¾°Uï?#2¬¸_ذŒ|ÎŽÄ0Ôu. ‚èׇ÷.{Â( à ƒ Â0ðƒøa†aæ 9#RÿEHܦóÎRM!IIDAT¯W¦ÿwŸ|î‰Ï·ò¹Û~q“ˆwÔ±VW^Dn¹åggo<×°GÏùéOþ[DÖ¹Æê*ˆÈ~ü½ž¾áŽ_Þ""§>ÿ+o¿òµD~ †aXæÍ7ÿlóæŸÞqÇ/Däßü··¿õâ\~ô?%»§8îîæ)Š®ÎÃi´¾¬‡°Ñ(býZMr¹\H$¡aŠÈ»ôý8‚¥Ñ5ñ//{•ˆ˜Q(†ø‘øµšˆäóV–*†=9#Ùëä öoytßov¨8^µêTªNÅq+U·Zu×uÜšãzïy×Yy{0ÞqüQúÉ·>ðàý—]þžòp)ßS´r–JÌ8uŠ$žÁIDATç/% s¹Ñ¦Õ"’/Øõ‚àûßÿn}f1'"’³Dä[ßú÷/|áÓÿzÝ×?ö¿>þ’—!"aÍ/ôâMå&°»ù)"†;’A1Ü‘ïŠaŒ-„E$ Bß°DD¢ð½?ùAÁ\|ñºë®“Fñ¼W„"I„j¼‹ËjÓl¤°eŠeÛF£ËÈÄ_ÙxÑêe=ìÞ»_uD¸õŽ×s\ÏsýÓNY{öÆãsy»^bE‘‘ø?õŒÓ.yßû?qíÕÏ>ñĵë×mØpÖm·Ý¢ÆN(A-ÈçF Xµ€ˆ¨™§rzP R3•/|áÓ"²jàȮޮxfr|Îwwó,, IDAT!Ü‘øß±3Q$ªÀCuLDõnâ04Â0Œ¢È0ŒKnúqÁmz‡ú~ôõ_•Fîì—FQõoù¼Õ;œ }iÔÂF.Ÿ¬£üò\T ‰œnš¦müîÁ•ªSuܪã9®çºþ _¸vÓ[^4¸zYÜk¢šo"_ȽñÏÿü÷¸ësŸÿÔ?îKo~óE·ÝvËî¹k`Õòë¯ÿÊë^÷† Α3Ï|ñ­·Þ,"\ðÆÛn»åÑmtï/ŠÈËÎ}U¡+¯uÎËÏýÏÿüÎÒ¥K7l8óŸøäG>òÁCûwí¯¿òCû—±4ÞT¾kµ;˜0#YþÔR»mIDATõÿ/#qüÐ6$ëÊ_oŽ#ø·ýUœ¼í¯ŽûÚ¿ŠÈO¶ï¼àè5WŸúâ ¨÷ çó¹x{5/x¼p¡`'FÅE"Fáèe•Eeé²Ïî+>ïØ¾÷ÛǪNÎ’cž}Ć Çœ{Îñ+5º¯E$®¤ë …|¡°ø#ù›W¼òÜoë›oÝôö/é«_ûÚõ¿ºó—o¸àÂÁ#ÖFAXì.~èCñkÁÞÎËÏùø?\óžK7‰Èg?óÅc׿ ¿÷Œ36|ùK_ýþ7~øoßá…o:ã´‹£ <ÿüW‡Axá[^óùÏÿË?~ü“ÿó£,—Gr¶}饸õÖ›£¸ „IDATÏ;ÿÌ­[ÿ¤VlÞÝ¡}Ë:ý‰R¸3œ66“Å$ £«O©—w[ßò¶ÔÚ[ßò¶ã¿þ5¹ú”3ý0 ëò¹ÆÈ^#¨y¢®òþ¡Ë7õõ÷«ÝÔOi YkjB½,ÝU<®1Ðí‘¶‹ÈºãV«çk^íñGž\vø’¾þÞjÙÚ_*—*}‹,^¶P]Å­æÕöî>п¤¯ØU.?½sˆ¾ê°îF‡CµìŒ”*ÃûKɵԒ‡¯:, çwî9rÝŠ\>ç¹Þ>ï=swó¿í‰ÿ;Wü;3z>ÄÏÏ¿à˜Áa­fš¦aÙæx¿Va$Qà‡ahær>È»0IDATöäKnüvœ«Ã†®¹öúzD!o‹4ŠÚú¨qsÐÆ^Tæ²!õñs‘aQ¤Ž2<ë9ë’ý\ù|î¸ç¬§.Zjb>ŸëéíVÓ‹—ö/^Úß¼ÀÂE V¹<93¹d<‘ÜW«Ý‡îDqu©þÖ7"QÉD¤ì"f—„¦5Z䶆a54Å ¤Ñ#¡Ê×Ñ£s¦%¹|n쨌¸âUU‘lŒ9C.>·ż¨ÞOŒÄïzgâ¦3Åç.'ÏhSÿìÚí –¯‰!~8±j-)ÔG4D"†i‰Äý¹œ¥öØ'!qKÔèó5â £qôPdôòõ‹^aÓÔÕ™IDATu¨ˆ_÷ÅÓ‰â¿ïÕ#CÕ‘TÞwy÷®Ýµ{Ñd7èû+ï»ÜÎÙ*_#CF¯#Ñ׿ئÏ&à5ç>ï¿äòî/\Ï1Ϥm Zyßå¯9÷yɰíëoÜw®Ïíܱãµæ”—žù,9óÿLaEÇu“a»déa_åýíž–Æ&èôd ?ü§‡¶m{Fk{`Y³fÙé/ªÜ©fú¿Ý/"2ŠHtÄY…ϵ7Ê‚­v’<4'Z8~˜ŒÑd' áVCÓÔºÁØ &…Ì¥'½-ÿâ?òCé3£•‹ä}Fß zÆt+"b¸nT(ˆHTè6% /2ò¹È«‰DËû¤'oîÛe߯½»oñ~ó™hÁšâÉï±7ªÄ£ÓTþ6Âq.«ŽÝTI;îi±`VÔ†aˆºÏˆøü—wËßGË‹rÖYÜeäs"z5Ó¯nÅp]µX<ê7Ž0ò9u³7){a¡×èv"‘hqì+Õ¬†ÓIDATíîM²×½<ÖÇD¤Ët×LõË„ ᘄyË”¦ ÎìVÚ¥°a¤/{:óÉH"ó]éIï–¿—. ŠÒS¿OqÔˆ`õ0žˆ Ý*‹M‘(¿°å6»ìHÄÏä‡Ò{xþ¤÷ÔÌzp'Ê¥ áx\D›B8o™qþ6Gps!,©5HV. ñî ,픂D Š""…úÅyúŒÅpÝ8‚S"¯Ö<ÓèÎKÕ³ý'Ÿ©÷EÈØ1Âq_D<Ú·U!¬&R}Í£Ó’¦>^Ø+93ùlûåSó›7’š3Áý¦Vi~`6qŸk»ˆ¨[·ÉØ„û$QK"©EDz<[ãËIDATò¦;""QÅ“®Bc³õš7y‚F¬ùL¹qOÓP}¶m¢rr­Ìƒr±)¦pÜQY&†‘šßjùÔüTPÆqj­6ûÚËÐÑ RLã–m²u§ì«J"aÕ¹XTèNÍ©SýÂy_D¤êû*ÆÓŽD=öº—Û–9RöÆ õ ÂÔ™r©ÞZNSß}?tžx~Æ…&ƦñøGç’Ñ6ÁŽ‚Éö'¨ÔžÂй_³BÅôw½ Ç+.|ªÒsË6‰–£Å=f¿)"Fa´އI„v÷hr•=£äD{KѾŠá†Q¥& 3V¯È­y­Ô\oÿãj)Çõ›ÏËh¾©…»³ ji1œz^*IDAT:-iüŽKÔæŒ;øÚ3Þø´…S[VùÎ!>`ðzsû[5’[X¬Ja¥«Ê®=Qy$ðÊQP3ºsR0Eê§o"QW^ž,‰ˆaÕo>_jÁafÏ*sá±ñ–U¿p-3‹ÜTÚfŠÈ%ÇWd_q-”0œüxád¢¥æOdõq7.‰ ²@{AßBoÉ‘Q®?g÷çr‹ìÜ"3Â=EÃOG^YDB§,nÙðʲº(–#nEÜJäzRÙ¯¶uÉ V½@Z¤mà YÅ…qȶùî5õ#ÇgÊ% áTËÄÇ · âØÔ4Ù1í½ºq›…B˜ÓBË’+ŒÂÃ-EnÙʤà=ýIDATD^Ye±d\“G$(Æ“Ž¨èŒWD QÙ5zº ¶kôˆë¢rÅí‘Dçoò{ülæá -ËlÓ#1‰£s©ãc2v¸B2æ’’¾™ó›gfî4s¿™«À8,'ùÈ ÂÀrždKbÀYòh[,tGR϶ºvZÁ^V¹Ý®n•‰­žmÿT«åÛïe܇ãnœÒµ°¨Á‰œm•¹f¡W}w<¿˜·EÄñ걫*ÉzɸU÷ò¿¾0õ2€ ckᔸÈU¡;âx¾ _Ï(ªäUÓñ*ŽçW«ž4"8ó4æaeާ0d[ +*sãÀ Ý‘8s%Qö¦DA¨FZ¶¹IDAT¾ Ët\'qj²e7î÷a™–e¶º†Ž9_9®#ÙgmHS·C-¿HD×·l+þž³ i©Ûе¹dOÜœêRÀ|Ôt³S »ŠcŽ“Åõ¯e[?¦€í*Ú†e6J‹¥z„Uý›üž4•μó[ó2SØòÁKí7Þ3GÂIDATyºæ;ÑÍtãtˆ±µ°išñˆEU¾9Ëü ŽàÀŠÛ²MIœ&7n!œÑ\Ë”ÇH̺ӂãs!y`Núʵ7†Z<Ù½8í«-]œ[XŸñø^‘½"¿‘^˱žx‡ˆÄÁ\4ë×$Λ~cb̘Š.kô¢ÅÁ’gï~þ'’ϪBØ4MU'E4Â2]#Õ2ïM—º"pòÙøFD©«·ÚHjÅÌ óÙ@ahà„‹÷µ\ 1ÝÛöšj"b•Ðê6ƒJæ³^­fårA­f=ó;iª‚UøÆ=ñè´æ1jÊS8Ž’Ulf–ŸíÓ3µXæŠÐl—»ðäÏ8b“ÆIDATíºiÙÚHÙëíÉ”ë5¯?önFõËWnm«Tž¼WDÚßMC‰#Ø›Â}çšMá.ËSÛBfïmf)=ÁíåÚSᛌàTþJý~Ìùx•VwÓh.½0Ì›cÈÍйsSξé ÍTÇ4){vâ\‹Ì8yŸæn.ŸX½ÍE„‹k¸ZË›fÞ4§§ž²)w,¨“%ðdËá©­`¶pÂúq#eo¤TÚñäõ°¿¯«ñÒ¥‹»wíÚ;2R®…FΌ֯?2¹î®]{wí> ¦×¯[µ}W©:´GDü Z=xD|7å=ÏìݳgHD,^¶¤¿;Õ€6ç+;n J`oÊ÷`8FãTIDATNÉ<’–ßð-ŽÎ6 ·2…S7šËìzNöMO¡U:ÐnoAѬ‰È®]{o¿ãÞ®®®jµª¾‹ˆÈ£¼î¬‘‘òîy´âÔº‹9•ËjÝ‘²·å÷ïÝ?,"Ë–vÄþc=üÌî="RõÃjÕ;ö¸µ"âÑž=C÷o}XDÖ-鑽^OADZ©‰æ–©ŽÆ’wMÞç"¹°´îViu×ÑVÛi¿»¸ÍÍ0™A=æöì«ütó]¾”J#¾ìÝ?\qj§¶déb8|`¤T‘‘Rù©]ϨU‚ê°ãú?¹»4T* •_ÖkÛfµZ-WÜrÅûiôIDAT-8÷o}xß°«:"œZTõ‚¡'ôœä—E2NÓ±ÃÔ2#X¸¦€9 ´êgCÜ{ßÃ"âT3—?wã󖌔½]Oíª…†ˆôöäÍ\¾4T‘ÿ¸mÍêÃmÛ³{ÇŽíå‘úصå‡/÷ý°âÔ†s<¯¶åλ6¼èd =gxxDDÜpL ëù£„“2‡¦¥Âf=3†ý¢ˆ 8 BvÁÂüÀÀéíÉ'»€×üâ—ψÈÐÈ“/myûãó¼šã¸Ï:æHuiˆrÕqœúà]·æ8֮8|iµZuÝšˆ¨B¸äÙÒ¡"8óVUp½ñÓõS„Iº.IDAT]T-ì„9;Wq†Fœ;Ÿ¹á?ÛµkojÉõkW8Ž«¾~ä 5ó÷÷<244⺵åËD¤„¡WsÝÚP©R,¯6TªÜzË"2ä†ËîpÙ ‘xÔZ¹ìÅ_*p«®Wu=/ ÕDPóS_É&Q ˜õâ~á?,•ëã…Cw$o›/}ÅYêá¾RUDÇ ü°T³v:}"’³M+,¨Ž¿;^PÌ[…‚WÁ]…|s—c$t:kpcþäËVüæ3{Íù+6/ ja3¨üá®û¶ïÜwßC·.è¹SÅ肞b©ì¬X|æ Oˆ¯ËóÜG/€©;ḵ"Rqýî‚]q}ÛqUÚº¡ØÝ„'ŸxÔwzŠÛwí‘}¥j9¨‡çÊâð?‘ÜØ[.çsV*‚eÏ`€f?ûÍ…³¯Yòxµï·[º·?•z6´¬á ZÝîV©¢N¥mIDATW²¥²sÂÑ+>vÅ»ºòõóëÔX´çžx̾RU}pôŠ%ýÝ3dÛ¦ª…¯ÞoÔjAªá¾ñeɪÛ3«ZXDj~XóCÉç,iŽà–/í ~,0s¬Á…å'ÞnýFñß6ÖÈÒAkÙZ9ò$µ@µê}ëŸÞqïÃ{ÿ´m÷£;ž‘e‹Ž\<8¸J-¼:ð›.xÉÆSŽvr‹ ÷ÀòËêVnËñ–7¼vxˆ¬óÝMaøç1¶D¿0èD €Ns6… Ã8D[kÞòÄ÷5½­š=Î|ƒùf)Ü|Ü©í2µ( ñIDATbû{Om™Ú'éÁlm²Ï¶ZÌ0ŒT#SsšnÞÂDö;Y™ kߪio‰Ú ÿ+`îé £s“½e'‹¢ñ¯î֠ɵ’SOµz¶CªM³§e³À3¹‰Ì›‰¥jØ6oR›j.Ê’ãéÌò-5™,Í[K>lÕ†æí4?lóŠÚ<Û¼…æÖ6W”íñêQÅK&·9Á¶5ÿ|Z½;­æ4¿q™›M}ŸHÛ½¶žÂ-ÙgLst&s*sz‚i8Á-Ld:'ÅDgâ—ŸÈë:D5¬´xí©9ÍË´jFûé´78Ô&ÂÍ÷µmu«ÝÉÞw"wrœ±”Ÿ®ßäVî·óñIDATUX²|ËL¥dÎ6·jÜLÏÜcª°m“t™š—ÏÜNæS«F§©ù™7 ýÂÓ•Œ©;ïÎ ¯æÚ/6-ÍPÛ9Ô‘”ÙI=…Îd›¦2R-³wXwnKàÉ–Ãm6žÜÅ ˜öžÄ)o°U?ìd–±SÞBûídÖò2ù—p0ùK!ŒYá`kádhNü~‘É0ͼ#zœÝ“Ýxq.$ÿÞOnãàj>ZÕ¾˜`ïmæ’m¶ßfùÌÒIu"Ç«d~Å!ئµñœæe2Ûœù& Å2f³I¤p«»gÆh›gÇ]%~8îbmd:÷è\›9mvѼ©Ì§Ú?œH¦Üæö‰ôy”IDAT#Ó’æžâÌÅ&ûê&¸©ö«PcV˜³çÎÀ¬@ ßW0Á%;ÍÁ÷'º½ÌÌOrv½_˜·:èܹƒtÕUWpõ<³ÎIáM›.ÒݘŠ9’ÂÜIÀ,E¿0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0è¸(“IDATD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €­ÕÏIDATN¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0°§ “IDATèD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD uÂHÃIDAT€N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0R£ôIDATèD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD I+3µIDAT€N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €NvòÁM›7ëjÌOcRxÓ¦‹tµæ;ï¼2ž“ÂÛÛ1ã€y~aЉHaЉHaЉHaЉHaЉìñA'Y=x„î&Z¸ìŸúÌWt·âÐúÀeï¼ô²+“s׬ÒÕƒ?ξIDAT˜óض'’çÃ'9õ.·B Ï>Þ¡Ùé?¾{³š˜¯1%Š¢nÉŒùÀeïüôgÿµyþ<|—3‘³Òþ†î&róá5¦ÌÉTjŸGóð]nF „Tš‡8::‘ )Œƒ5ŽïÏÜóL™á4ýÂ#ùùK -š-T”œ½qcü0žwÅ .Ù±R1zöÆ­^T«ù«˜]÷Ü™ŸXRx¾\³*õÙ6?5‹$ÓdâÉ’¹äìJçÔÝ#ÏÞ¸1óEµš?»ÌêhŒž¿T1‘q\n$:5G:éWbÓ¦‹®¿þ†TtÆu¢šŸÌÖxúúëoD/楳IDATŸª¯;\2[ÕKKÖÈ©—Ÿú±¨Ÿ€Ì†Ûêó–úpfË­–Ñò&…ç£öùÛü‰LUÇ™ŸþΉàX²ÖS¡£Î×Rÿµž|*.$SE¢Z 3£;M£Òhjê¥Åÿ?©W¿v¥y±Y§ù¹öàäC-cRxÞ÷sÖü‰÷`EFðÙ7¦r$Yª€NFp»­þHWËÇÉuH0R=IÉ.šxfsËzr:ÊŽ­é=ÂL Ï;ª ÿñ•ªÚl³Ó‚XÆÆM«xšxÖÄýOoÛ,ªñ'h"×fz?ºŒT›Ûö„ÊÍi,âpïªNÎÙþØŽíí¸hû(ñIDATþúTN©20µL¦›6oV oÚtQ‡Gðd©_fáåuÅGNËg˜ZxþŠ{R…@ª_¸ù³žœ“\·c+b›ÈÉŽ…ÕƒGÄýñ2͇õâÎÓ¹”¿ÒthnÖI}8ãòbâk¥Váè4h5L­ýÌTø¶_}†%%yè)9wòªT§3Ó¶ó» bÍaªæ¤~&É著I›Mu¦öNiñùlÿ±Ÿá1)Œ9(™˜­¦[=•™¶³"‚•榪9Í/¶y~æb8ÔèHaЉè:Ťn“ƒ9ƒž}æÃïê|x)¸ìº›0Óæá»œ‰žeæÃïê|xÍ2ï èŒ}IDAT9‡ÍÏw9)<ËLðÞÚ˜]:aœõ ã“ãèèD €N¤0èD €N¤0èD €N¤0èD €N¤0èD €NcÎ`þø'¾¢«0?¦ðƳ7hlÌOõ~ýëgÇþ`Ž1.¾ø Ým€ùëÿ-åÍ“ªZ§IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/relocate-repository.png000066400000000000000000000462701203611042400331770ustar00rootroot00000000000000‰PNG  IHDR×)–åb pHYsÄÄ•+tIMEÕ "ÊâœëtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝy¸U7ð_-½Ý=7 ¹I¹ » ˆ"[ˆ`"  ¸2. ÆäUyœAxœqAq(ã #Ž8 EA‚@HHÈv—¾Ý]U]ËûGõ­[·–ÓÕÕË©îþ~žÐ]]uêÔöísOUW –e‘Ë'?y@Ó|ï{Wºß N Ûù»|ÙÒþþ¹sçq¨@GÛµkg>?ùò†MäÊâJ ò“WzÈ]ù–ƒÚ‹ˆ$IâXQ€Žd­_ÿʃ<þÔÓÏØA,X–eGðªw¹ï>‹Š…’¦• %£X,ñ®0@çèéÉõæ¤t:ÕÓ›ûÛ©¥iïIDAT‹¯­ûÝ#vËD´lÙ;‚·mݹs—¢iÚädw…:ÍÀ@o:ž77»ï>‹ˆŽœÌ‘pÞy—¯zûÛßvÜ!;wæ·o+LJ¥2ïªt¦\.ÕÛ×»ÇsæÍëÿýýO¯»÷^™ˆF ïÜ9ùê+ÛÇÆÐ¨bãë›—ß~s­S½|ÚÙ£ öÌçµ|^SÈY4LD²ýq¡P(•ÊÙlºÁ•è,[v½¶üö›?tÞ»¬Ñú’¹4HdV.5ˆ¼/D&H~u—°ñõŸÜpóŽ·xî""*•Ê…B¥Õ+Q:“žSp]@Uótéï?º8¡ÐS› U‹©ˆ§@IDAT2‰ô×­Dtêû¾ãG7HÅ81^˜“%§-¬êª˜šSg€ŽbK³RÙljËxy keRºH– ¤ Ëó"]ÔR“Š©[eEt•ˆœ¤Uu•ȕ’dùç4(¤†”¥y•þüÂî]šQÖŒLΘ//Éõô¦ZµÈ ¢ª¦¥ë–Q” ãô+¿FD?¾ìó–$èºi ‚óâ#W}ˆþë‚OŠª•MÁ0)(lå°Ù,0Ó#ÃC”Nmz½ðìk“ÛUKÓ UÓvN–_|Ež'ø†¹##}Í\R€$24D«¬ å’~צ-DtÒÒÅ·œs¶>=‚NtÖM7Ûí¸ô‹d8Å‘IDAT¦e‘i–&‘ ‰¢@$ؽÊYÕÎdR}5›-—³½)U+kš¦¨š¢j¥’úâ SS¥ãß¾|p0K Y Dgžy’Sô '¼û¨£V|Л óë_ßþì³Ï\|ñ?7`Å@5ï@ +0©,‹A ²,K "A°*[Ë(›”&ÒÉ*Á{צ-'-]¼öƒgØo×üçÏì&"MW%ƒ ‰¨l‘(‰d d¦½2‰‚ Š‚$K‘}ro΄ešúŽÝÊ”l(J¹TTUMSU­¤h%E)•Ô¢¢®_?±Ç‚žcWîMd§°åìLwÝq?=òØ.ÿÊ¿ø…Ë=)úBIDAT?êmaKyó-7ÑPOvR«÷"åÇÿã?rîyŸ­³œ†£=©ðý˜X‚EÖtKÕ¹üôrY°d’2Ä-Ÿÿì⯓œ þÀék~þ_Noùüg‰È,Cµ,]'"Y’È"K°È²DA J[X¤l6c Ó³IQYîI—H ä”Ø×ŸÚg¿yårYÕìÿ4M+«ZY’¤”,‘ìd¹ó’iò–#ˆè_¿öåßÜq¿Òw¤d±Îµõÿ®þG"ú¿ŸùB©Ú¼ºŽõd·cbM2‘å4R‰ˆ ƒѲD"ƒˆ6_xáž×]GÓAìDðæ /œ)Ë4É0ˆhº½K)YD¢Jÿí÷IDAT[XeY²fbÔIüÅ.2MÅ4MÓ2MC229#•63†®›¦iiʆ9aY²<ÓÕ,¸sI®\÷vô‘+D"I–~ÿûu×^s%]|Éo{Û*ÏÒ†ðôÓO<øà}¿¹ó—ï:ù½ï}ï‹/!¢ë¯ÿ÷ßÜùK"úÄß_ðö·Ÿ088ç=ï>Îÿ¤SûÕÿÜODìÙu+ïI„­’LvÃÔšÞ>YÓMc*›VÚ*®ój›.<éuבÁ›.<ß]š`éeÓ""Y–²¯/DQ$;…%¤ÙMQ‹ÊGmÛz÷65¯”U-*j©¤•¥XR‹ŠR,©%E))Z:-ž¾òã3'Öö­IDAT(»v'I’Ÿzêq"zß{N'QxðÁ{¯½æÊoüÛ÷z{×|ꣲ ¬<þ÷ü‘k¯¹ò»ß¾)#Ëk>õÑþ\ïáG­xê©Ç¿tÙç¯üçk>wþþ÷ï˜ØµktÉ2S  /¼äsça|l×™g½¯45uöÇλó7ü®dw†˜´îáûسëRZɄ͒H‚@4}Æ‹¬JÌ9ÛÊÔ-aöånŸ´tñ ï>Õý©©WF–*ý$X‚äô ’NÉ ‚}ŸK ÃúãȾf¯i™¦i¦a†iºá¼5MÓ4ÍT&%XöW9u:éÔJËô«_ùÚ›y³”Ny33IDAT=ðû{ˆèÀ}ri"ºï¾ß®^u¢ ÏüNäî»þ‡ˆ–ïµLÊeˆè7ÿûËcV¬|ø¡ûˆè¨7)¥åw¿ÿtK7HI¼÷Þß®[w÷Ãÿžˆnýé>þ±óRé™/%¹7[uv] ®d²É4Ó¾¬„°0݈ÕËeJ¥R†A™‚HDŸúͯœ¦é®‰ÿx×{ˆH´LH·H/—‰(–œ°´cxºG"%¸{=Œ´°r|ìñ—w?ºe¼¨h¥’R,)EE-–ÔRIQTUQËŠª}ú“ǧåQgÆÎ®t×÷?÷ü³Ÿ»øÓ…É|º7+¥$;1tþÃ#‘i¦R3?˜¶G ¢tFí™PIDAT®Œ`¿úÕÏ+³)"¢”DD·Ýöãï|çëß¿á–/ÿÓUïx×±Dd–õLoÆ)*avÝÉB '’€Æp"¹¶Š Ìn‘i˜º YæùwýÚ‰à—Î;oïn é ¾þ¤SL"²È4L{„´œršÕ¢8Â’H’, Ó]‚Eúâ>C³–Îï}içä®1»#B­tD¨š¢jšª}äòÕ«J¥åJ˲×1~Ô±G_xÁ篾öÊ7rÈò}ö^¹òø¸Ï¾vÂf”tj¦k@DöÀ£\a” Ï@Ûw¾óu"Z2²W®/ç tNÉUg×¥‰„oÇd,‹ìþ»}P`IDATcªt›¦`š¦eY‚ \xÏÿ:üšOØÿî·ö4Ä×­~§eY†Q9ñ–NKV¥ÃY S§é¶°J»Û‰VzAÊ*sˆVˆ¢( z~s±¤”µ¤hŠª©ª~Ì1Ëלõ¶Ñ¥ó^»ÚNéLêƒ÷w~ò‰ë¾ýïߺî»ýèÙðÀ}/ox©g,KDï:ñ=™\ڙꄓOüÅ/nŸ7oÞÊ•Ç]}õ×.½ô ãcÛÆ*K>>16ÏyNQéL*lv‘ îæ¯Pù¾´ˆHÑMY ‹¤+þ¸Î‰àçèeÕ IDATÎù{'Ÿ;çï¼éûDtצ-§ï·ìÊ£Þn•žát:å”WÖ r®Îdd×Uq‘Ùo~qNròêìaŒÜüËÇ6–””Dû¿qÏ•+÷?ñ„ƒÌ™î¾&"§%]‘ɤ3™áK/ýÒ)ï>ñg·ýôck>þ½ïþছÖþᑇÎ8ýÌÑ=—[†™íÉ^rÉ¥zÙxîùgO8ù„«þåšOv }ó×°ü þ¡¾c]ù½ïþàWwÜñÅüü™g~èØ£Ï³ óÔSßkæ™g½ïÛßþÿwÕ×þá²/ S)Yþìg/ºÿþ{O:õ¸õëÿfOèŸ]s7Yò¡ÿ1™Ð»¼kIDATN¦Ù§ÍÎdÒ-²LëÊ#+Í»õgã™zýYçtËMDtå‘Çé¦eLO›I§¦¯ìŒ²Fö]Þ/¹xÍÀÐ=›ÊD¦/YóU¡Ò,Ÿ™•s!Ýô…n/=·‰ˆö>p©ýyY+¿òÒkóÎê+”‰±|!_˜Ó?<о‹[Y+ïÚ>>4w ›ËLM^ß²“ˆ.Ù£gºÃ¡TP¦òÅɱ¼{*{Ì…Kö0Móõ-;÷Ú{Q*ÒTíÕ—·:sœ]WÃÑžLøvL.瘙ù=ÄïN=}ÿÑEf¹,Š¢ ÉbµÃÊ´È2tÓ4ÅTêù¯½ãŽŸ9¹:9>q͵k+=™´L4ݨÏäfIDAT­ÌQ°¦:=;€grY Êõs– –eŸexá{»û¹ÒéÔ‡î㼜Óï©b:êíë±_Ïž7äapNÿ⽸ºÇt^¸ç6;€äA '‘Óº´ÿÖ,²/$#¢‚j‰92Ei¦‘Ë`šfÉI5hºGÂn¾Îœ%J¥S³¯ÊpZ¼öÉA»‘,Ìú…œóÛêY;Q¥ŸÇz2á€I&ç·Ëî_´ÙÿÛ¶]Ù#]&t3Za‚=e*W4XD‚(9ý©”dÏqú: r²˜¬é>_Á顦ÏÍÜ>¢rÓ AÀ_X eápO(l˜$rþ¾·ß v»Ó¢â ”ªÔIDAT÷|çÚmÛçÔZ nŒ/¸XNÉv¾ZÍÜGb`hXFŸ)@ï;ñ°ÿ¦‹{¾s­3D˜¾ðŒ˜MÐâ¿ïÄÃÜa;04ýܹL:µeóæ¦Õ £¼ó¸7Ðq?Œ1¡¢ªî°;orîòþ×¶7¤rÑ w ¿ø·6lØÁµ>]dÙ²ù+Ž9˜ì–SòМycO<÷½ï]É»b‰¸žgª õõ¦§ ³ž²¬OßBw]QvN_¶¦Ï¾v¢¨ê=¹¨:OD¢ë®ùÖao>PNÉDTï½Õ:ÁŠ+7ÝØìá`¤0À,žV°,‹äj»• 3%ySÔÓØrsûIDATÎXmö´åÙo‘Â3ŒÒ¤Á²,Úyªë¦n˜²$ÚAì Y;RÚa©~Ï$žàF Ì(™•Û~e3®gG¸"Xž~2Q9¨uìÜ¢ª§%Q×ÍWQeÃD[ ˜Ó,ˢ缜Íi »û"šaöddC™ "w§°¿£ëo|0ÍÝ1Ó#t]µ…Ý#T^§ú)èTžRÚ•µëyK4w=oªy{ˆùÚcö q`Oê[h¿–æí/¤ûÅyRºQšÝ&¢lFžÒ5'‚îˆ@ aûºšÝ ¶›Ïþ F @ûЦôWg¾úDyûsB~eˆ2¢•:ï´\IDATKS®eâ>9"23}fþÏVñ{ þØѤIDÖžÇg½I]Eý‹Âfâ>5GÓmaç­;FÝìn‡]šfOkÌb¤0´ƒükÚãÿ¡¿t' ˆÖâ9ô–a`ÔþDT‹D$¨ª•É‘•éÉ2‡ç锥•I5¬Ô›wï6ÇMÚýGí©û´G¿aõ/Ëñiit•]ˆsuš¿þ†°“ËvÇ®§I[õg£-Ú‚ ýœ="ý¥ÿÖîûªµ KÇ/£áœN‘©•E½(¨EAUíÑœV¦òà!²öFÍÌô =ŠEd ÷Òî‚PÚ¤Þs‰¼÷Ééã¿LD9Q€·>IDATQTÑÓ#L‘ÂÍ0Ó’H¾ ì¶±RX¼·=m}2"‘º]þ5í¾¯Ò[R–z+Ï)¶¦#Ø~ë¼°2=v‹DVz0´Ìœl ¤é/ÝI} Ó‡º,V‚Û}RÎÓv®‹`4„Ó’èä¯?‚ý aŠr¥š5‚r¹œÙ˜ù-”!«?KD”©ÜœW¨<ɘUu"ØÃÒÊþBOšJê¬ò_{Ìù¥²ÓA³¯vú"œ«}ÃÂö O_„ÿê4·ø× ³¹º?eïî/Ä3$â|=“øß@;QIxbÙn£Ù ëô?«QL®¤&"êM‹êYEr™éb+m^÷Ìr:£IDAT4þ_ÊUý™†Ý!ËbÆ*¸§ <)爙ÂNGA`3YÏð°ñ=Ã=Aé´ˆ=S1æoq Ñ2T²Dá¾ ´~ í.‘+aí3r+ÓãRa÷ §u"¢’*ì. ¯+dõÊ{Ÿ,KâTA›u©¯az~)çùÁ[ØÕiö¿ºnªB¯3<àF³Ó¸úÙ9w´Eì(¨µ?ÁNíÖ9_h EQß²_¯–ÜZì½oY ²Öp¯8$‘™i;—I˜rÏLr4!¯X»òÖšV±Lý{K¥–½ŸÊª6öŠ=–¢êþße0Â×3rOPƒšB®Ns«žÂNÕŸqõ·=Â¥é HIDAT~Î.ÙÎwœâèZ_jìÀ%S©Ál‰2cÅ\Ѥm;­Â”¡,£,ô¤(#U~¾!Y¹4½–'"Aª<|¾òQÿbïqð§d»_¸l˜\OÚrÎȹ¯¯¾ãšI¦YûõÂîDó 2yÕÂÉÕA¬6c`P›»—•JÉC©Ô95G4 sç Öäë–V "S)Z´-Í’¤Z$µh©Çì¬Ã]`I3($m eBÊ:!ËøWóõ#;¿”s7„=Lѯ bG¼u÷E4¼Wש3¡! ÐÑLI¢þEB¦_Pó–ZÒS–V°³˜îÉCdd—ŠfØÑéhy©IDAT.e¬‚*ôöddUè%UÏX…¢ÚK®Î_÷¿Î§†)I"£G¢†³sžóc4ûrw̹/`pwø÷ œià|'¨BRÜï4Ã4” UèuG0¹.8sŸms˜ê”çÓ°{§9¬5·Ymá°L û”ýQØøì¹T}[µp\8^®¶0ÙW»r6,sÅLŸý¯¢éÙ´LDŠV‰]û­Í}BÏÝë^îðû £½ f·…=œF®ýÂT§M·ÃW²vòÚ¯IM/•4šŽàÀŸiø{„mžÂf·…mvæ:kªSNæ’«Ùëa¦ýŸ ‰Š¦§$1%‰öÈv7†­IDAT°=ã:‹§pÒ~|œ´ú@"L·…ËF:›–ìÖ®!÷(šž¶û_§©ënóÚ¬é~«4NDÂtÔ:ýNø:=a aB[ºÑt[8eÍЄlÚRìÄ´37 yKãο¤MQIÑ…ÜýZD;yM÷_æn+ꬋä) ]HP§oCÑSyú†?vmNø ¹!;vKŠnd†JŠžËÊ• &¢é«ƒÝ§élžŸid3’1»{) ]gæWå™û«¹[»%E/):)BŸn’"ôÙoíËÚÌk›Óø3 Q¬|j7„˳¡‡€îã;;ç´vívn*-g­)wæf­)5.[IDAT1Ù”H®®”íû†ÓÎf$E5²Ó÷ç´%ñYM5Ó#á ÉÍt2QYÓˬG…*BÀ“CIL[Š(õQà#™}·Œ°#ØÓ5Œ¶0t+“ò qGpû¦?Î-á톰!÷PÈÓ4ähùŠ€îãù³nfSbIѽÝ¥Ýv®âúi²$O?ïC%I {ކnÎú½²ÓþÅ5Á¿Ú _·C9=‡ˆU—dÉù7% 4Ýö<†Žq˧/ØÓ)LHáNÒÊ;fàîÐÞ|¿`VÊf.;ë<™Óþ•dÉÐg5`sYYDÿEiO°ÝþuÿëVïsçbOÞµWß5¥fÈIDATqîÉÙÜî'Ä.;pW›ÝEѹ"Âf·|S’`è†Á†nd3²$‹äú™\Õ†°û¢C˜p´£ú• tŒ¯½c$3òaÏpÊÚ]ž7œ¬ xeÑ.¢G‰¨OR¤W?ADN0gÅÊ=‰Ó¢>ýbÖ59iæ¦ÅÆÜ7nóÕîO톰(ŠvsØ}Q„¿!L±SØÙw=/Üoí1=»¸{§9pw ÎÈþ1[S°Å,Ä™Ê]Z`•üSV;ÊÒΑQ~”¹W-^µ«(lˆ§(ÆæóÌš|›:ÆHfbäàUÃá#¸^÷1ï©FD¢Q4¥Ñ(~ª•ËRÊpLIDAT*e”ËÒŽ?‘¯l‡¯Ó#á\æ¿FÍÖȶ°?’(ÂN{dŽÕ`ðž0°&U—.웩ÖJÎ=ðÓQ’Ž]íªE…mvµ²;A»Ø¦qȱ{.ß»!¥M´¾ÞôT¡ÒæÕg?ͨrûJC-¯§âkÏûi6'‚µÏ‹ÈÓZ ‡}\UUuÂÖTƒB¢Ù] ™{Âf[µcl)g|4Š¡&vøº#Ø“¿TysÚ™$ìiþ&°fšiqÖ ¹8)ì97¸77iÿöÿeü–ñäÍž]ý_c•¬ÿŒæŸ$úvˆgª É®ßZ6ÝÏiWSi×äì×>®IDATŒ›g3Òd©œÅ´(6¦-½iøWmÍ«öç5¶îië_œú5©Íû{%^ù1¶»gÚÀèŠYùEÜTA›Êç7¿¶Ó~;4ž7o¸gÛ¶]SS…²)¤DkŸ}örO»mÛ®mÛÇí×ûì½dÓ¶|ib'醵ttOçiÊ;wìÚ¹s‚ˆú‡çÏêñT€ñ{eE5ì&°ûÌ5q-U÷uÿÈŒƒ-ú˜M­F”BªŽãIg`Äj‡Æ^Où5Í=°æUëe4v…ý#ÔTí0Ü¿;¡±¶kýY±LDÛ¶ízðágr¹\©T²ÿ%"¢—OÿÀñSS…'Ÿ~¹¨”{²)`–ÎÖIDAT;—íi§ Úã~qר$Í_°Çž{ê_xqÇöDTÒÍRI;àÀåD¤ÖÎÏ®‘ˆ–ïgÍ%¢]Zo†ˆBž S¼ç޼꘭©ùâ JÜÝ”Ñ dÔ'ìm­k)âÜÃfÁ^®Zçev5ßFÙÜоD£s;wï^÷DZóù)"²ƒ•ˆ–ì¹€ˆFŽL=ôŒ˜JOå [·í˜7¼”ˆŒÒ¤¢Ê¯¼¶ÝÔÊDtÈÁËeY,•J…¢JD%Íxvý‹{,^<Л&"¥l•4CÓʦ¦¸Ÿ¸Läý™†}ipÕ&\/ À”*¿†xæ//‘õéë=IDATRRÄTúÄUo™;UжmÝV6"êëM‹©t~"ODÏÿuò¥ eY$±góæM…©Êµk .Ðu³¨”'¦‡hZùñGžXù¶#ˆÈÔ”ÉÉ)"RÍYgØ4}æa·ÀKÓ<8¤pBÚ ©´fC`sw6Ñ0&õ,MŽÛ!Û?˜™KD}½iwðòÑ‘ß?´ƒˆ&¦^{çô™·¿þu£¦•E}Ãþ{Ù·†(”E©Ü^UËŠ¢î½ïòE ç•J%U-‘ÝÎk2M_aGpà4ÂZÁ•Ê7j-ðb·…3%§2SÊÄ”²yËŽ›oýí¶m»{]rÑG>tÆêóçØñš/©÷ýá™gžÝdpà¡oT}çXaóëã[·íxüÉì]¾Ï()ª!Ë⮂¡hº¢éJÙ:â˜#ˆ(_T¶lÛ/ëzY× ºDDSšLDŠføÿóÔ0“‘)¨!LHaH8!zƒ‡)IãZ¯ó¶¯7}Ô[¸ìâŸÿñSTEŸ˜TTE_ÿ—íO—ŽôôåMÏ•ÿðô†-»òE%_TÙ=‚®›zˆ•¨IDATq²¬ëãù"eÓòa‡\(i…’öÇ'_´_R(3Ïøz²XUu;‚¥”ìIb¤0$š0wÿa~OžõD8»_Xz=Ãóþóæô–u=_Tœ;<膹÷{Û ûàŸ³Suß}—IÙÁ™k{Ëf¡¤å JIшhÅ1‡õæÒù‚²mçd¾ ä ЦÍÜëR+…R¹dí×ÎðlZ²ƒ8“‘{û2vözNÍR’/sô¥‹_(¥§¼Nv˜’T ‰ˆ~þëÇÖ\øïßýÁ¯|ø™?=ñü×¾ù³¿¼¸ÕÎY1Û§¦}kžƒöYLDÛvNþí•íD”/(oâs‹ýÆ®Rú¢Aÿv[X4ŠO>ñ—M[vÿå…ûû{±c´¿7›/(KF†;æ`ç¾ëŒ÷Oî$¢Å{-±#¸lÑö½è3gÚ# Î7t£PxŽMGp.'U‰`B @‘r¹ƒÞ¯ìó}|Ëø‹ÏÜÜ´N¸÷–Q&ú)VvÙÒ…Ë–.¤jwž;Ô3wè""Ú£¨êέyLu¢æâÆIDATÊ{–Žô ‹œ+‚•²™µ¦ ¡ï÷.O—ày03¥dÑîˆpÎÅU`B @ÛÉfdZ°TZ¬ë§9˜øÓOe³¨».„ ðv†Ê„çÊ MÈÚí[w‘"ôÑt/„¿š1+…=%mHahKÙŒ<¥k²$ÊRåüVI¨Ü/ØÁ³ŸQ4“¿ö‰8w›ê”&d‰H×tA5Ý4\÷ .VJœö¯Á£òàæÞ\ŠˆbD0!… }õõ¦Éõ€¸‡þóÏÏs hŠ•Î:/õèe¡4aåݯ…ÒDNKá2*¼þ¤1<šKÕÔì€ñóÇ·m‡IDATó”Õ =3(«žá’6i¤$ï½xziVWCFV‰HÕ3Cé¸Ö;”.¸?]4—û3εþÇÊU…€öf?²þ_Î;Ñÿ‘¡’,•T--IšaØÿÚ JÞÊö;/´bÁ²‚:®P_–¦T3ôÑeFyÖG¤T*—“ìüW¤0´½¾Þô[ÜÃÓì<²“¦;…S¤•t'ôæÊ„‘ê×õÁŒUP…EDT6†ˆÈ0†’ÝO¶7fÎõÜB¢Ö&°¿Ú€N`÷;RR@¸•iÖ8RvˆÜçèR’˜’DI¥éÉÓ²hÿGD’,Úÿe3’}L·Øma¤0tˆ¡¬s½DÒÛ§ZIDATÙ0= amºá\TuÙõãcgªY#»ZÄÎ“í ¶[Áh P_oÚnÛ­Zϧº+LÓ’h_¬F¾ËЉÈÊb›ýXe÷Õc·‚mHaè(ÙŒë°Î% cí~‘Æ^›ì ›úÙŒyÕL¦è³kÍêªu.Mm;³çèWÿꊱ‰ñÙÛ·IëÇ¿˜õ|ñ·lªØ™Â†þ"2ÃDÇYôº@»/¾èáw¿÷°Ö¤0c#ùÿaÏPõ[±•ÇmýßÏþ?N›ÊUÃ[&IDAT?»Ö¬®xÔÊC1b c¬®oâúùwìØ‹ûiñŠjØ5}½—dJ”ë!‰hÐTéè£wùÖ¿|åªß6j.Q0þ’ û«¼•ÕH :÷¹è aÆìØ(Ûaš*âk­XCþ܉]BCp©@kv€†µ… ý'FŽæeÈ¢ ²&´‡_òùO9sé?]vB£fÈ}À°Å£ÓŽïîâ?27ºNš1ªÁ('Þî%#ªŽ±¶1ª8wöºRaöŒÂº£,fàäÃ4¶†UG«ºJÙÕnÈ®8_Æö\ªî6Œ™V-*Ê8Ú-£Î;ïòï\Åí·¯[¤0nIDATwÏ—]zn¼Rz³WÊ÷s9êßcX ÝDdѰ@ƒ¦ºAÌÐɧœ¾tÙiÿpñ± ­9$EJÝ©5k¾{¶o+—ôª«o\µzåi§­ºàü+Ó#‘*~_ÈPß ‘©ÒƒwÏ*öü5þ×ÏÿÚ4Öèôtx}Ù4 …{äkK*eE2÷ýÔ’ròÊwŠ¢8¹y³(d†­ :ùݯ¼ÿó_ÿÖƒõÏ ¨KJ ”Ìs›mÇî–Ḙ Há´ö-!Gý"¢}8OD=t0Ñ—^ÐëôÿßÏ<|Ë-Ï×?/€So WÂ&Ñ`¥G˜h ŸæÍŸ3ˆˆ‡…NyÇ+g”ºuIDAT‡ô×ë¿÷X³k£ ¸¼Ð²eóê$ ¹*¼3jlÝ¥%ðš\õ’¼»ÖÝ.¬%¢\åÝPHÔc¿^²°D´Án[Y:÷£OüøÇz‡“¼öÝF]wmòˆºA¬ºf÷TÖŸ¤U‹=aÃ7—ë#ª+…{äkõüT.CÂP¥çáäw¤‰æe²™$uô„=P\&ŒÑ‡NaáçxËŸê­r‡òüŠÁé«Jì® Q×õÂFþ[BïtCxb7 Ò‡Ï(Üz‡±pá^éôÖ·¯Üeª$Z»);lÿÎ}ôÿuÿŸux­3ò_?è¾^’q]¤{òˆ£EùÈÿÖ¹´"“IDAT°4JÝ? ‚qѨwMë*ÊE¦QF !¬¶U7Jà®Æ°ÊԹȼ–}4ä§ÞÕc_õÌ(Ä¿ŠÂ®¡ܱýõ +6°buÖÇ=$JõºˆÇfý—T3ÄOáùZ½@½½$d‡ˆ,* Òž -¢±…Kß05ñÚ‚ƒIPÈ*M#ÃÂРµMýØÉ¾uãó·Þö§ŸYC{Öi”qüWwÇýÖŒ£·¦ñ«ò”æ_?k,pÖû\XÝ¢¬±ªCªÖ–±Z«1°Æv²M“³ììÑ¢ Uëö:ÞŽûˆ‹XŸz·èÇf+„­Ž¶ðŽŸU^d-H k‚dò‰ÄIDATyí?’^¸ø€òÐMDD%""RìæðVš£|üŒ'¯»e¿šR8"öþWg a ‡ÿû–}lTÝQZ5a×?bW¯n±·]3&±5uÙë߽딨UM¾]´Õ«ú×FÃÅLáœq›nl%¢Á!RÈƉˆJ$ŒÐaëßýñïÿó››‘­ñ ad˜² e?³æ©ïÞzøÏnìŒÓÞÚˆúϨs30BÓó÷QŒyÕÓšˆ^ÏØ…{п¼Å®[ÒŽðš½ì°Š(ö.OC:†˜gç¤ÒWˆ¨g˜(G–2NJÖùèð#-¢Ýû,¯¼W²¤d-š†IQˆèÂ=zßfxÐ IDAT«·âášô­ý’ñ÷£?‘Ëaïî?iýÜùªµQÌ¿á+0[„ýç]‰ÓηiÊDN¦!KD•V²DdM(+Ù™¡MËh‚B3é¼m7,£¬J }ä=Ï\÷£#~}çúSN>(Êì62o·áâOw+¯êh~žI…T­?c|GaÕÒ¢aׇý6ú‚°ç¥¶ìegŒæ/„½Ý=CjZ´Ö,»û»œ=÷(³f×ǽØûEèËŽxÄÕSŸxÕ ì˜ŽR½Øk8¢8wóé;B7¶ædZ:äiSV¡qZzÌêMOu´4VŒ¿¢¢ŒYS±Ý)É;UÍ)lŒ}ˆÒ2 CYK'eúƒl–ˆhŽBDoû»Ý4F• V”ÊGŠB¥×há0MŒÑÅ{øêë—#…»P”¿LcLÕšt^·±+§jŸX“æeŽ5ÜúªÆSÛÙ¹œqMPN£Üü,•ˆÆ]Ÿ) e•'ïM‹s†¥œ|à›—Ï|ªT¢ÚÚ¦e³¤(gÿœl½ü³Ûë’UŸIDAT½³@[«-……É«¼Èd-UñðÁ z‰&‰žßÖû¥«—ÙMãŠB[DŽṥ<å–ÐGN~æ–[k¾Ñ¯“¡£Ì»:´õ)Zîµö° ÕÂ)ýq}÷V"èˆfZ¸3”ì‹[óD‡-zï^½«äTÀÃ5ììÎõ“õºpÁûݺuëÝ¿mâUk2:ýœ$Ï@^õñp®¯à5ëæMXu´äl…xÚ½þP¿R8]üoµDD$d,kb<`Œ¬òžcæÑk;Ä›~ò+&+¿sSk÷."R4kp­~ëÆýä‰xUG’û¼êÔÁ‹`«áì\yêûÅÄ¥ƒ¦ËªÂ@ ïIDAT/¿¿í_®[6¥ä [ÞvÊq” ¼¢éDD9¢ÃØrÇ;þö·×÷ÝwcÖU¯ !pF9ast†6‡#ÖÊ=•ûôwM•â)*¬Xg̪Wó„Õ-âš©iØÛ©¿@ÏìjÝ «¨¦5Æ?ú\Üõ÷Ï…½àÐjHa)wœR~N)“êoáVX™]tΆlzãdÑÚôRhQ™ård©ÂƒOí•IëO>ý #…¯µö|Tuˆgÿö˸®Ð_``MªÎ1ìêWö¼ÂŠ »ì&pŽób`Ô-Æš‰²Âj^uÑ<ùG‹~õh­k,âø±w­( ¡†.ÍùRÿÔú9ÍTúIDATüÎvO„4A[·‘Å.ª§Lj‰¾uë[ï~tùœþâà@_ôjŠ×¹Öì.9Fùa-Çš ¯õ˜tÆlâÖ­8žVe|ÄÞì5Æ¿¦¹@—«íza}É­O¼òÂõßþE±”¯k®’©âó¯Ì›Ó_<ꈽN<áÀzJc ÍnYD,?F5üý {Õ/lýø×aìoµªãÔ3èx5ÿjcÅŠýV¬øâ¯ï\OD©T½Lêí‘V¬Ø¯ÎBê×ì¿õjí ˆhc?ogtktª°†¿2ÆŒÒÚõ‹>—(ºmÃu¼˜w¶låoÞ6V»ãF”0òÃ(¶ê=£U­U”BÜ£ysú+IDAT†øÇ ,Ù]ŸˆsgóÂâï ›Ð_ÛxÕ‹Rc=T]´ˆóe_Ó ë赂vçn>í.áM‰ÖT¯©sIøn#X“ª®»ù´/´) º(…Û%|[SϦΥ]VuòaMvƒzO¯@=”„:t¼öZÉͨmËl¯• Ñ5ì¡ò¤IDATÌþ›~1îþÅþ”=ÜÿèÀYG|Ô‚ûKÛsK3!Œ›Ÿ¹Ç¯Z=Æ‹YÓ`ÔÓ#zõ(h 3fÇ'p.ñªc‰ÂæeC{ÆgT,ð@ˆX¾ï +Êóc)¢ìT/ª®:ÆMõ¢æþC jå;æÎ0 Ká( âÁø4b a³«éNTþÉÙ;($ìþ°òçX«ª1ͨg”êU]ÃU'âJpÔZ%Ï ©i…ûçÎ^ìy1vþÀ××pØL¢†l±÷Þˆ˜þQ*ߨL‚¦ßÍ'^‡…ÚÆF®4Æø5 kûDcªZ«íâZçXµ| [9»VNXBôý§QÔŒ‹çIDAT;IM»kýû9…7Àã•ÖXü6ÕÜûŠýi­+ºe_ƒõçx3øWcÃçñ{´!GE6¤>aí5ÿGU§7Ç„Hxä%s¥ÅЊë…Ù+«ÖUÉøÂÜQêl jA£¸Öj×ô'El <›*°4Æ´ÍžŠêÛÏÝÓ6ãxiˆZü6Òܶ0»û<ìÓµè‹dkÍúÁVhÜÍ )Ú#…ÑckÍúÁVh†öHa€N…à ) ÀR€'¤0OHažÂIÖ®)\ëùfŸõvì•HJ Û¢\ †´€N’¬è61;ç¹|/ì-…\>ÉøaxôŸÐTýa1Î@òÕ{O5Ï[÷ïÜÜC¢_Äþµ{¦žp5$_ëî/\O&¶vÑA  E)ÜŒv   ¥gçš”›Ñoj4õÞÍ'â-`j½GŒÛ”„Í ÉböHøoÍöÖs²®ê$±ÇŒ^@ràzaž:-…Ñì€öÒi) Ð^€=¿}r&³yåÏ\'©Ý…„ŒŒNgóÑô9Va¶IDAT´·”ÿOœ¥£{گݛ²þò¹z†xâ;ðû¸•Â]Ç¡‰é?Ý-){BOÚ:sr"8ð`«:NÕ2)ñ{z$ÜÜâ8ýÁxþjB›+ƹµŸŽó@ wçïSFKÇ}º›Kîv–Ûš5g'¿éTt¶E[˜B¾\Ù[ÖÞ¬ ß|y¶§â»Mq¥Z7Z½jÕš5gß³n]Ä+“ì6ûØöt>&ÓŸëá tþ>­ZÔè²%N?FƒkÉÛ¦›Ým$â¶« —F1ÚÂ]Ê>öœ¦®û#O¿ðêU« <Û(‚ýaê|•qoG§QVT2ù·NŒ Í~ÛlHaðv#f¨ {HØkh½°-åßFþá£A³¡_€'¤0OHažÐ/ UÓ3cÚR¸ýtC<]ô¹syW¡Õºa³ztá"B ·™.‰§nx ³[—lV·.\ä0Há6ñÙÚm­–Ñ‹ÜÍpv€'¤0OHažÂ´ [Þ¼| H–¥h”¯O'n@W(‡v~–’g°ÔÛ€ª+g ÄBZÎÖÚÖÖ–:qzC,¤¹opN–IDATü,c¿åã<Ì›úˆ@ "ÈQäéL°á°Z¯pí8Í€ž)u4kIÁ+4\¢R®1ú»Û™?¢èf6@H€„ !@H€„  MCÔm¨C²þmUžôÐÏ$tè 2d÷qÕý‚“Ÿ´:¥f®Ö„gú¸Öõ÷mr9¹]t`f€€Ž‚ #vÏÏŸ6×À#БåÇ_[»y~þÄÐ@À·éó—¯íÜ›WC»¿ÿ¡•CÃÐ@BÐ…Þ½ÛÿåNj3 [K–'…q/J!½{ÿvùšunÚXÿ«¶"áþ‚¤á³–¼}7â=½¶ˆï#ýþÛó»÷o—åæ=)½_þ×VIDAT»ÞzÀ`œÄ•Ì’Ì¥N&“/aªsCv9‘ÏM0<¯¯媤QwWk^Zÿ\ýŒ©Iª¥X¹V®Œ— ûÎòÉoo.…©‚Âf·,ç:®ÕúÕ·ISKŰJ²úôZ3‡;Oa”Ìÿ]•‰µ”³–ì¬Vå|a„q±’§yÿ¥ÅfÉúW_+JëV#ºøÙF[OJÑ©xC°‹"×H«æîl|«ǰߊV[OÆrH.‹Ñ“æØ05stŠ„¿çaU¼^؟Ħ±\r\w’*ZÖaCØF»kZúOùxC¡Ou(u´4åPT¹BX%6²,'MíuéXÝxâΛ™ŽÐ /ÙIDAT›7·’1檓™ãöôôqNøüåk¹v]EÆOò×ß’F¤Qhh ¤ËtG ôH^þùïßV~ Í7!ýòóOíÜu3 í ¤‹£Êw„ÔŒÍö½K¹ü¼9CiŸgûÂ4Ä•åiçÎvBò2ú/}mbhVh­úW_.Ë×8@!¥§œå²úr)}ɬ»89bJeOù‚»æ€{2ÿlÏW.åÜK&€ô3 °Æ«/¯DÑ}tfÑåŠ6§Õ…M6·­d™†¤Ÿ9Ïs»¿×Ÿ†Ôxõå¼û ýgÊÒ®:)÷‹ÚC¦øÛ½žœt;ù[æ8†á< jcRIDATZ[MP é½°ÈÙ çÎ:}vâåT|ŒíÖOÅ‹oÇ6]ßó ˆƒ Ç®G£Y(Rt˜~ø¶¢¹wïotÆóÞº£©ÿ·Qtu°ä΄xÜ@Ãëþdo~Ü$ˆ­íbiÇI;9Çrž{v¶zÒBó3|ë±A{ÍfháLõð äXy¿cSv•æ!Fµ[–sg#{Ô·*?â™ q°Á³Òy~2lB·Ô {t3 $ @B€ $©‡Så$3t@Ë«ûH<Ê£2Ǧä:ï×AM^ ‰§ïî¥Ä©Ç™x²*¹™‡2!¶’ 3×îAðgŽ$¿õdΆ½IDATÚé„ÔOªÜ=ŸÇ†0ú!µäLªÜ%ÓãÆ…¨]{6SåŒ<¶c 7—[†]Ð#u*—ÄNÛ¬ZR3ü©rS¤õd¶\.…톡€„ !P éðä1¿ýä2@sÄÁ†j7ѹ,†®(µs>Žxz­ÀU™Ø‚a3¹ 45žý›|99¸¾ªhÌ‘éðyÐð8”z­‹}WÄcaÁy_2\ƒ–üô3Éhè®Ô5R5 Éûý4ƒó ç[ž°íÊe°2hŒ8zP`¿áï3y£Í«“û Ç‚£ì¦nw¹Þ¡ä4°Í®'-„ãFÏÚGa36ãÉðK–Œ]€GIDATË„RÉÆuvø›?÷ËvÏ8ÆE¸„²,6æ}«_zmnb,ìØŒ]Å(iXˆ‡O9›«¯öz—÷¸½iÜ0åtU“V[bÇfü~ÎmmÖª|ÚÐGc×AX aJDw[ iôÞã<öŸc0«®cWÝw§ß`,x2ü Ï?išþD™íÐ6öÃIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/repos-layout.jpg000066400000000000000000001205211203611042400316130ustar00rootroot00000000000000ÿØÿàJFIFHHÿÛC   ",% )!&4&)-/111%69509,01/ÿÛC  ///////////////////////////////////////////////////ÿÀ P!ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ë¾ xÖOͦÖ·íz¤*‚ªA Ÿì1$—¬msâN½áô‰õŸ5šLJÆÒN˜b:ŒˆëxQ§.U)ÙËm?^žWß¡›œ•ÚZ/3#þƒÿнþ/ÿ£þƒÿнþ/ÿ®¿ìïï~ðL~±ä(øÞçþeè¿ð!øÕ8|msÿ2ü_÷ýøÕ/ìÿï~ðCëBÿÂëúâÿ¿ëÿÆéGÆ·?ó‹þÿ¯ÿ§ýýïÃþ}cÈQñ¥ÏüÀ"ÿ¿ëÿÆéßð¹ßþ€1ßõÿãt¿³ÿ½øÁÖ<…œÿÌ/ûþ¿ün—þ+ÿÐ /ûü¿ünìÿï~ðEõ!ßð¸ßþ€Qßåÿãt£ã ŸùÅÿ—ÿÒþÏþ÷áÿ>±ä/ü.ÿ _÷ùøÝ8|^|È/ûü¿ünìÿï~ðCë@>.¹?ò‹þþ¯ÿ§ÂÛúEÿWÿÑýŸýïÃþ}cÈQñiÈÿ,_÷õøÝ(ø°äÿÈ/ûú¿ün¨{ðÿ‚Xòþ»ÿÐ/ûú¿ünœ>*¹ÿ˜4_÷ñøÝ ýïÃþ}cÈ_øZÿ@x¿ïâÿñº_øZOÿ@x¿ïâÿñº_Pþ÷áÿ>±ä(ø¢çþ`ñßÅÿãtïøYïÿ@ˆ¿ïâÿñþ¡ýïÃþ}cÈ_øY¯ÿ@˜¿ïµÿâ)GÄ×?ó ‹þû_þ"—Ô½øÁ¬ùÜùÅÿ}¯ÿKÿ !ÿèýö¿üEQþ÷áÿ>±ä(øçþaQßkÿÄRˆÎæýö¿üE/¨ÿ{ðÿ‚Xò>"?ýâÿ¾—ÿˆ¥ÜÿÌ2/ûéøŠ>£ýïÃþ}cÈQñ Éÿd_÷Òÿñáñÿèýô¿üEýïÀ>±ä(ñûŸù†Åÿ}/ÿGü'Ïÿ@Ø¿5ÿâ(ú÷¿ø"úÏáã·#þAÑ~kÿÄRÿÂtÿô‹ó_þ"—Ô¿½øëBÿÂrÿô‹ó_þ"œ¾7r?äæ¿üE?¨ÿ{ðÖ|…ÿ„ÙÿçÂ/üwÿˆ¥ÿ„ÑÿçÂ/üwÿˆ¥õ/ï~úÏåñ›Ÿùq‹ÿÿâiá1ùñ‹ÿÿâhú—÷¿úÇ¿ð˜?üøÅÿŽÿñ4£ÅîåÊ/Éøš>¥ýïÀ_YòüGÂXÿóçä¿üM/ü%oÿ>q~KÿÄÑõ/ï~úÇ9ÿ—8¿%ÿâiÃÅåÒ/Éøš_Sþ÷à/¬ùÿ„™ÿçÒ/ûåøš‰œŸøõ‹þù_þ&©ÿ{ð¬ù~#‡‰ÿˬ_÷Êÿñ4£ÄNGü{Eÿ|¯ÿGÔÿ½øël(ñ “ÿÑß+ÿÄÓ†¾ÿóíýð¿üMSþ÷à/¬ù~"uÏü»Åÿ|/ÿJ5ÇÿŸx¿ï…ÿâi,þ×à?¬ù ý¶ÿóÂ/ûáøšpÖ\õß ÿÄÐðÞüõŸ/Ä?¶þxÅÿ|/ÿNþÖùãýû_ð¡a?½øÖ|¿ÃTsÿ,¢ÿ¿kþi¿üò‹þý¯øQõOï~úÏïíÿžqßµÿ ´MÚ’+`Gœ¨F¿Æ´§ðÇñ+ß^¶Ÿi-ÝØ¶ŽP¼˜ŽöŸ äÕ‚nÔÑ[8 ˜¸©öt¿Ÿð/ž§òþ%{ëÖÓí%»»ÑÁ ‘óÀÓôšš9n¤]b· ÜÞXÏ8è~”ý•;_Ÿði;Û—ñu×üóµÿ¾¢®kź˜¼ð^ªöÏAÆ^%Q’k@ädÇ{Tºp³q•íä59]'|ÌÿN-¼wàé˜àDfsh£®¾àDÚP}VEiÉ%¢› #~q…5ÙiVרmI7 ¾A (TP=?®dñ–1ñ?‰t_Ç¢ÙØèúrÜyXDÓ4".V_)˜¾[«8l° õ#³+«)abç·½oK«mo211µWmôüŽwT³µ)¬hÖVÚ•²iûoì Õ# t2±¬èȸÎWl™çjAœ|Ìkaü£›H$¾KÏøF^óÞdh·qº/, 8<á·ñ‘ÁÇ>›«([oë±Ê¢›dºçƒ|%£jãG»×¥Šú›HåÜN$ŽM¾ksHpp&I5{Uøk£é¶œòß̯§Û^I25ÜÆâAö5e#ÍLœu'c¥OÖjÙ]oý~e{8ë©߀ü;‹õ=;íEcÒ¬e¾ºiö(*#ˆ¢«ª±êìY¶IäÒð«iZÖ­e{}©Zé°Z8Š|¢²J쎅Þ˜¼bœkÕvv]?ŸõÜ"¿NïáÞ“¥j2Ãys}uºäT)&d‰dÞÄ«o 8s´žødðNšš.¯%­÷öŽ©¥Ët·Ër¶ÏDÛDž[#9Ã(çh%©,TÝ··ÈN’¹ÃŽ”äë]èÅŽ©ACzÓè@ǯJrõ¤Ã êzP„8u§Òcc–ŸB>”RõéRP1GZzÒb[)íŽ^µ éIl*Ó©‰’/Ý£­@ÇÓÓ¥SØHpëN©>>¦ŸM‚NJ‘S‡Jcb¯Z‘zRêxéJ½hñO^•=GÐrõ§Ž´ØºŽ)褆ÇÓ×¥ HZ’„ rt§Rc*}{XÓ4›¶þÔÔlì|ÙËûLëüq¸Œã#óÁ‹Ú?3« ÔÅñmå­ÿ‚/îlnaº·’²h$†ÁÁA…Tñ7„ôO|@Ô¿·l¾×ök o'÷ΛwMs»î°ÏÝ}+ˆì1/|?¥ønÙè¶¿e·“K³™“ÌwË™n9bOE•vÞ'’Æ/ Hú¥üÚu¢Û1’î š)"ùÛYyÝœ`s“Æpu_Ã~«õ!ükÑþ‡%àÝKV¼×í“ÅóÞYÝ‹btËFŒ[ÇyñË"«°i€Æb8Bó‘'üÓ+ÿûmÿ£Úˆm/OÕ·_×F?âõ†­s¨hwZ*ÄfµG%¤ž8ñ¹#ÆÃ<Ó§å\œ·eÜ$š& ÷Ô¢ ÿäJ§…ÁWŒe^ü˵û¶¿0UkÓmCo‘›¯h¾'Öü–º´µY#]®SPƒºq¿¨…'ög>Ãöퟲy^OÙÿ¶ãòü¼cfß7qÆ:b»é<%*jšz/'þG=OmRnov6ÛDñlzÌzµÈ†öí\ïR†O9q´£æL²•ùHÏ*HéHºŒ{Ü¿ü{}þBѨÿž_ë>çû==«_o…¾ÿƒÿ":„³i4ŸO|÷³IdPZ¾±ˆ*ãhÚdÆ8À¦Í¡øºàÝ›—›í›>ÓæjÑ7Ÿ³îoÌŸ6ÞÙéÚŸ·Â­¿/øöuG ÅßÚÚj·ÿÏßö´^oÝÛ÷üÌýÞ:ôâµìçñÝ­ž¡»ó%¿X‘®åÕÏÆÌÀ#ù¼Y²9àš‰UÃKËþJQŸg¦xÆÊ{‰­/¥·–å·Ï$Z¼jÒ¶IË'ÌrO'ÔÓ±üYý›ý›ö¦ûüújÅå}íßsÌÇ^zuæ©×ÂÞÿ§ü}R¯ü"ZÏüñ¶ÿÀè?øºrøKXa¶ÿÀè?øº¥‹£ßð`èϰ¿ð‰ëóÊÛÿ ÿâé㺾?Õ[àlü]7‹£ßðbTgØQá][?ê­¿ð6þ.ÿ¾«ÿ<í¿ð6þ.’ÅÑïø0tgØrøcUý]·þÃÿÅÓ‡†uLÿ«¶ÿÀØøº.Á‡±ŸaßðjŸÜ¶ÿÀØøºrøoSRÛÿaÿâé,Uÿƒ±©Øpðæ¥Ÿ¹mÿÿñtïøGuîÛàd?üUG¿àÆèϰ£ÃÚ÷m¿ð2þ*ÿþ¡ýÛoü ‡ÿŠ¡b¨÷ü*3ì?ûÿÒÛÿ!ÿ⨠ÿ¥·þCÿÅRúÕÿƒ±©ØxЯ±ÒÛÿ!ÿâ©ÿØ—¿ôíÿqñT}jÁØÏ° ÷þ¿ð./þ*œº-àÿŸoü ‹ÿŠ£ëT{þ —ØxÑîñÖÛÿâÿâ©F‘wëmÿqñT}jÁ‰Ñ©ØpÒn³ÖÛÿâÿâ©ãJ¹ÇÞ¶ÿÀ¸¿øª—‰¥ßðcTgm…]Ï÷­¿ð./þ*—û2ãûÖßøÿOëT{þ ^ƧaãMŸzÛÿ¢ÿ⩳§þý·þEÿÅTýf—Ì~Æ}‡gÍýûoü ‹ÿЧ%„ÀrößøÿUõšVßðbö5;û ¿óÒÛÿ£ÿâ©~Å'üô¶ÿÀ¨ÿøªŸ¬Òïùƒ£S°ô³u’Ûÿcÿâ©ßeùëmÿ1ÿñTÞ&—ÁQ©Ø_²·üõ¶ÿÀ˜ÿøªrÛ0ë-·þÇÿÅRúÍ.ÿ™>§aþAÿžÖßøÿKäÿÓkoü ühúÍ.ÿ˜Ý…Xp×[àLãOŒ¯¶ÿÀˆÿÆ—Ö)wüÁQ©ØvÅÿžößøŸãJsþ¾ÛÿühúÅ.ÿ˜{‡ŸóÞÛÿüiãËÇü|[àB/¬R¾ÿ˜{–ØPcÏü|[àB84Yÿ‹oüOñ¦ñ»þaìjvùù¶ÿÀ„ÿp’ùù¶ÿ¿éþ4–"—̇y°ÏÍ·ýÿOñ§ íÀÿ«oûþŸãCÄRïù‚£S°¾}¿üý[ßôÿÚm¿çêÛþÿ§øÐ±ûþ`èÔì*ÝZŽ·vß÷ý?Æö»_ùû¶ÿ¿ëþ4ž"ŸÌ=NþÙiÿ?vß÷ùưu=õ¹üÝSUЮö³4k>‚=Ç»œ‘Ð~B±«*U-ïZÞLÖ”jS¿»ø‘I¥JúCéI¯iVö,¥|‹{8ãUäà+ŒsÍ;YÒWY½k½OQðýÔÇ 4úd2\“´rp Õqÿ=åÿ¾Íj¸ÿžòÿßfµ\Ïyï³@Ú®?缿÷Ù£íWóÞ_ûìÐö«ùï/ýöhûUÇü÷—þû4}ªãþ{Ëÿ}š>Õqÿ=åÿ¾Íj¸ÿžòÿßfµ\Ïyï³@Ú®?缿÷Ù£íWóÞ_ûìÐö«ùï/ýöi“jžñ£RÊž\ÌB¨äõ$€rE?íWóÞ_ûìÑö«ùï/ýöhûUÇü÷—þû4}ªãþ{Ëÿ}šdzƒÊò$wŒí l‘V\”lÁ烆„zÓþÕqÿ=åÿ¾Íj¸ÿžòÿßfµ\Ïyï³@Ú®?缿÷Ù£íWóÞ_ûìÐö«ùï/ýöhûUÇü÷—þû4}ªãþ{Ëÿ}š>Õqÿ=åÿ¾Íj¸ÿžòÿßfµ\Ïyï³@Ú®?缿÷Ù£íWóÞ_ûìÐö«ùï/ýöhûUÇü÷—þû4}ªãþ{Ëÿ}š>Õqÿ=åÿ¾Íj¸ÿžòÿßfµ\Ïyï³@Ú®?缿÷Ù£íWóÞ_ûìÐö«ùï/ýöhûUÇü÷—þû4}ªãþ{Ëÿ}š>Õqÿ=åÿ¾Íj¸ÿžòÿßfµ\Ïyï³@Ú®?缿÷Ù£íWóÞ_ûìÐö«ùï/ýöhûUÇü÷—þû4}ªãþ{Ëÿ}š>Õqÿ=åÿ¾Íj¸ÿžòÿßfµ\Ïyï³@Ú®?缿÷Ù£íWóÞ_ûìÐïM,ÂûΑäÙuµw±8Tgñ'󭊲Âjþ7»²|Á&òª¬,3Ç9ë[6¾0Ó'yâÉ ¶îcu(Xê>¸¯&–cÌêè–Ç¡˜aiàáNWw•ÿ Ä‘«€@`­p?¿ä^ñýuÿÚ0W¬p#ZãþB«ÿ^ÿB‚¢ÿ˜¦©ÿ_gÿ@J‘™>9ÿ‘'^ÿ°eÏþŠjä|_¤ó¨ƒFŒ]­Ê7öv”-ŽÂìòK¿9ÆÁ°ä1ÐÍmXÕ®|Y%µÅ혋í7=‡œXáBâ9<¡äݶ6Þò”!øºÙRÇ?ò$ëßö ¹ÿÑM\íÖ—§Ø(ÒumÚ9ï=CQÑ-¡m¢ò¤hËîi"„ üä 00t镯-ä¿‘go|󾮋!ZmQD!B›Xì#n_åµzÕ&^yâ®`‹Z³§Ù´¨/õh]Õ\³MìÞ§*Ê^[Ñ·"Lð~q$šÏˆîu-JÚÆöÌ]ÿ¦EŸç+KEA'•äå7‰·É)B€7 zn·ª_ë61‹ùZö”ù¬„nž™9¶—œ7úFÜa˜ebøçþD{þÁ—?ú)ª@ƹ³“ÂÚLïÒ,^òXãz}’iñÃͺiÎ]§A(~gø²!ÓµÍnóJ¶t¸ŠgÔüÛ kˆ!ž9¤_8 K˜CKÑTýŸ0Àƒ[ñ&£ko¨Ëm©ÿÄÂ/·¬šnÈØáŠ9Œ3íÛ¼n1Ârä¡óx2áuÿ>Z ýTZ¥¯Ù§¸Ô’bòw¦ ¼—V ›Š"‡ÝÃ’ÌX°šþ·ýµ~§QÒâ15ÚýŽîãýDq‰<©^5ˆvšßR™Ù—a:¬³®2Ý’Fñ×üèÔeÿí+ùý¶ÿ¿Ëþ4iXÏí·ýþ_ñ¢À2{Ý:x$…ï¡ "”&;Œᔂ¸ Ч§Ã£ió´Öú”ÎÌ»¹Õeq~ì’0ޏÏçF _þÒ°ÿŸÛoûü¿ãGö•‡üþÛßåÿ,ý¥aÿ?¶ß÷ùƳ>Ç¢}»íÚwo›æíþÙŸËÎs/ÌÛ·ýœccjŸö•‡üþÛßåÿ?´¬?çöÛþÿ/øÑ`í+ùý¶ÿ¿Ëþ4iXÏí·ýþ_ñ¢ÀUÔJÔ`Xn5 Š­¼k÷³‚>ôl¤Žzg•{éZt ¾¡½Y·“s~ó¶pÞ‘˜ÇLãó£P-iXÏí·ýþ_ñ£ûJÃþm¿ïòÿþÒ°ÿŸÛoûü¿ãGö•‡üþÛßåÿ,ý¥aÿ?¶ß÷ùÆ©jcHÔ„hÔ]<¼íû6§%¾s޾[®îóŽqÔѨÙÜi–vÉo ú2&pg¼2¿'<»±c×¹ö©¿´¬?çöÛþÿ/øÑ`í+ùý¶ÿ¿Ëþ4iXÏí·ýþ_ñ¢ÀUÔJÔ`Xn5 Š­¼k÷³‚>ôl¤Žzg•3LFš$û>¢ïæcwÚu9.1Œôó¶õíŒñž‚@çÒ^ö+ƺ¶7Äð£ùã„r¥†3ŽLkù}joí+ùý¶ÿ¿Ëþ4Y€iXÏí·ýþ_ñ£ûJÃþm¿ïòÿþÒ°ÿŸÛoûü¿ãGö•‡üþÛßåÿ,ý¥aÿ?¶ß÷ùÆí+ùý¶ÿ¿Ëþ4XûJÃþm¿ïòÿÚVóûmÿ—üh°ö•‡üþÛßåÿ?´¬?çöÛþÿ/øÑ`í+ùý¶ÿ¿Ëþ4iXÏí·ýþ_ñ¢ÀÚVóûmÿ—ühþÒ°ÿŸÛoûü¿ãE€?´¬?çöÛþÿ/øÑý¥aÿ?¶ß÷ùÆ‹iXÏí·ýþ_ñ£ûJÃþm¿ïòÿþÒ°ÿŸÛoûü¿ãGö•‡üþÛßåÿ,ý¥aÿ?¶ß÷ùÆí+ùý¶ÿ¿Ëþ4XûJÃþm¿ïòÿÚVóûmÿ—üh°ö•‡üþÛßåÿ?´¬?çöÛþÿ/øÑ`í+ùý¶ÿ¿Ëþ4iXÏí·ýþ_ñ¢ÀÚVóûmÿ—ühþÒ°ÿŸÛoûü¿ãE€?´¬?çöÛþÿ/øÑý¥aÿ?¶ß÷ùÆ‹iXÏí·ýþ_ñ£ûJÃþm¿ïòÿþÒ°ÿŸÛoûü¿ãGö•‡üþÛßåÿ,‡5;!½’{ëhÒK³±že±yÁ'œUë­OB»‹Ê¸Ôl]3œ}©G?«‹qi¢%%fbêzg…¯ ÒÁ¨YÛ\Í–Ó%ÒœÁ¹±ÕG½[Ò%ÒlYõ=‚.Õ pŸŸZóñX7ŠÅSÄN_OÈÞ•EJ‹¥¹­ý¹¤ÐRÇÿSükŠñìðÜøg_šÚTš&”íxØ2ŸÝ@8"»ÌQ·+2jêÈÅXXp~ô¦öãí·‰¥ ÞZæC’6©çñ&¤a-ô±FÒKtèŠ2ÌÒ¬ù¼G$cr¥ü‘ÿ|aAÿ¾˜ùW=lDh¯xç­ˆ…möDºwˆQ,–÷s Te¢v*Àzã¸÷Ußµ\Ïyï³ZS«±S‹ÐÖHÕ4CíWóÞ_ûìÑö«ùï/ýöjÍíWóÞ_ûìÑö«ùï/ýöhûUÇü÷—þû4¹À$ÜHä’æ€+¾«2®å{—_ïÀ?™¶ú³\6Ô¹”?]¬ÄzˆŸíWóÞ_ûìÑö«ùï/ýöi >Õqÿ=åÿ¾Íj¸ÿžòÿßf€2¯üYka©¥…ÕÜÉ!]Ìù%#Ï@ÇÕqÿ=åÿ¾Íj¸ÿžòÿßfÚ®?缿÷Ù£íWóÞ_ûìÐ}.½‚Y§½¾ßçÊ¿-äŠÀp·O©š¼ÿ¦jþߥã¯û_ç§;h@tÕçý3Pöý/Úÿ8=9Ú5yÿLÔý¿KÇ_ö¿ÎNv€M^Ó5ÿoÒñ×ý¯óƒÓ¡ÓWŸôÍ@Ûô¼uÿküàôçhtÕçý3Pöý/Úÿ8=9Ú5yÿLÔý¿KÇ_ö¿ÎNv€M^Ó5ÿoÒñ×ý¯óƒÓ¬ži­¥³·Ži¶?˜¼¬ÍÀ•‡'žª=¨+E­¢2ÜÞ˜c^¯$»@üIªŸð“XÐrÛÿükHQ­Q^my&g:´ í9%êÃþ{ú[àbÿY´Õ–ñ ÙêáTà´SîþœèV‚æœ^iŠ5©MÚ2Mú¢oµ\Ïyï³GÚ®?缿÷Ù¬ ƒíWóÞ_ûìÑö«ùï/ýöhûUÇü÷—þû4}ªãþ{Ëÿ}š>Õqÿ=åÿ¾Íj¸ÿžòÿßf€µ\Ïyï³GÚ®?缿÷Ù íWóÞ_ûìÑö«ùï/ýöhûUÇü÷—þû4}ªãþ{Ëÿ}š>Õqÿ=åÿ¾Íj¸ÿžòÿßf€µ\Ïyï³GÚ®?缿÷Ù íWóÞ_ûìÑö«ùï/ýöhûUÇü÷—þû4}ªãþ{Ëÿ}š>Õqÿ=åÿ¾Íj¸ÿžòÿßf€µ\Ïyï³GÚ®?缿÷Ù íWóÞ_ûìÑö«ùï/ýöhûUÇü÷—þû5ÍøÍ™ü!®3±f2œ’rÕÃMè.?ä*¿õàô(*/ùŠjŸõöô  mbñ›WŠÔFeòÑdXÀÎù¼wÆ3õ#Ò¶ŸE’-&i/-šöúeÚ¨½"ÏøzþUãÎ.½Z—WQéÝô_©æòº•'&¶ÿ†ÿ‚qz½•þ’‘ÝK ÛÍn…Û»ßCÐJÝÕü@¶YŽ8Y$û>Ñ<þTj%t]Ìø;ToÉ8< 2Å8sRšµ¬V ¸ÊP~C4ïÃq¥µíÄ.ʳùôÔ’ö)NÐÛ£hÓ,¼í-´ÊËÛ–ëž)´´Ò¯æÓdû]Ä2]DñÁ$¶ù<¨6 §!—xgرè›6·p]ù¿g0C+BìÛ¼}àCƒÁÆpA@QÔ¬tÈmJöÚÊm‚K™–5-‚q–#œǵ $²¼µ¿µK›˜n­äÎÉ :6àòü* é±q8ÝÆâ¿Þ9ÀþFšÅ•¬ït~ßjï¿îûÖ~±§Éa d'ns˜è}ùæ¨F…¤ßhµŠ`1æ lzdR5ݲMä½ÄK.@òÌ€6ON*MRZÛ½ÔΉ"Æ#PI+»9ϸô®lMWFŸ2þ¿"¢“zœEï†/t­Ef½¹KÃw+†” BÍÔ70íŽkøRÁlìa™..Jݲýž@JH”F=Ƽ¼¡õ‰Jï_ë_Ðó(a]"ÔŸþysd¿h›78Ý€¼÷ÀéžµèPÅ֣ƜùW¢ïn§l5*²”çµæûy·ºoáÛ]J?ÜËu4¥$²Yçß¾cÆqòŽÃï ½Ÿ¦x{WÔ–ÑÎÍl¡žVyÕù¦ËÇ…ÜQ[‰ªêQœ¯k;-uò_©Ï†£J5c(ÁÅéÕõNë^Å­3XÓ5o3û/Q³¾ò±æ}šu“fsŒí'Áü]¯4öŠ( Š( Š( Š( Š( Š( Š+Ÿñ‡ü‰Úçýuoý 4Cqÿ!Uÿ¯ÿ¡AQÌSTÿ¯³ÿ %9¯ù–Z´7¡™TXÄŠq²E$Ž{d>•±Š“SÒ%I/ƨ@…„›‚¬Ø>§Óñ•âJ££‰©쥪}™äί²«87kõüN W×uM\EhóÉu4²ØõsÇÿ\žÀíïtW—öÚ]µÊA%©¶h¦’#"æÆT2’Ìuk\¹Î|ÕfïÐYd§Wž¬ºèf^xB[ÀÓ]\ØÝ]M;OçÖ¤c©¶d¾¨ñ*žR;ààà~¤WŸ˜_¹µ‰ú|µ \óÇ©ÉϦ=2·–¸Nµ”R²ß¯mþf59¹59¡àM:]#U†æÎÂ-OP{ð5µF–5žI¶ÅT’L‘ÐŒàejë¾ÔüGq%ΠÖVMµ‘ ”Î#ˆ[ÞF2Û®‡ÈB€#?7dú3”5O kZ¾­&«{•¼Ð}ŸÈ¶µÕ&Ì1‹¥;§X‘ââà”ì*p Ù>ŸàÕ´]HÍce8¼Ò¾Æ!k‰I%¥¸’Ti˜6±•2ýIRÛSh·á‹=JÃO’-ZëÎ8˜#óL¦Þ XÌ¥Q¤ÆÒw0 Î %w oÆ/´áŒ`ÍÆ1ÿ,æöÊ€+¯ü‡t_úûý'š¬I ¶šúÃ,)q"8µcj@F!ö–ù>~Hé»ñÏ7%&áÛ¯ÞÅ A*œË]-å·èd[®­„ì Ô.-æ¿IÍ•-NÆ›O,c‚9Ú?^eGó%q•’uFèpуŽ>ÇÒ¬ÿÂ/ý ^"ÿÀ¸ÿøÝ’’ºÑØ?á—þ†¯à\ünøCåÿ¡«Ä_øÿªÿ„>_ú¼Eÿqÿñº?á—þ†¯à\ün€øCåÿ¡«Ä_øÿ£þùèjñþÇÿÆèÿ„>_ú¼Eÿqÿñº?á—þ†¯à\ün€øCåÿ¡«Ä_øÿ£þùèjñþÇÿÆèÿ„>_ú¼Eÿqÿñº?á—þ†¯à\ün€øCåÿ¡«Ä_øÿ£þùèjñþÇÿÆèÿ„>_ú¼Eÿqÿñº?á—þ†¯à\ün€øCåÿ¡«Ä_øÿ£þùèjñþÇÿÆèÿ„>_ú¼Eÿqÿñº?á—þ†¯à\ün€øCåÿ¡«Ä_øÿ£þùèjñþÇÿÆèÿ„>_ú¼Eÿqÿñº?á—þ†¯à\ün€øCåÿ¡«Ä_øÿ£þùèjñþÇÿÆèÿ„>_ú¼Eÿqÿñº?á—þ†¯à\ün€øCåÿ¡«Ä_øÿ£þùèjñþÇÿÆèÿ„>_ú¼Eÿqÿñº?á—þ†¯à\ün€øCåÿ¡«Ä_øÿ£þùèjñþÇÿÆèÿ„>_ú¼Eÿqÿñº?á—þ†¯à\ün€øCåÿ¡«Ä_øÿ£þùèjñþÇÿÆèÿ„>_ú¼Eÿqÿñº?á—þ†¯à\ün€øCåÿ¡«Ä_øÿ£þùèjñþÇÿÆèÿ„>_ú¼Eÿqÿñº?á—þ†¯à\ün€øCåÿ¡«Ä_øÿ£þùèjñþÇÿÆèÿ„>_ú¼Eÿqÿñº?á—þ†¯à\ün€øCåÿ¡«Ä_øÿ£þùèjñþÇÿÆèÿ„>_ú¼Eÿqÿñº?á—þ†¯à\ün€øCåÿ¡«Ä_øÿ¨çð”ÑÁ#¯Š|E•RFnãì?ëgÉ¡MŒâÏeIÇÛð¬Ýj ­-l¥‹ÄzåÉšú9§UR¬à7Ýé‘Ái\gWyy,2ÝHe¤"Y6#!A8öé\ìÞ(Õ>ÐÛýšG‘‚¢þ÷$žƒýesÕ©(i“ZTÚQ3õ_kšlòÁ<«,G çgÿF~µÔÙêS^XÚÝ,’Æ.mãœ'˜NÝèïŒÔÑ«)·t' ^u'(ÍlIö«ùï/ýöhûUÇü÷—þû5ÐwÚ®?缿÷Ù®oÆlÏá q‹1”ä““þ®hGAqÿ!Uÿ¯ÿ¡AT5[è´¿íýBá]¡´’IäXÀ,UbV dŽp=h„Ò®µOÇqm=…Ι>¡—W42/Ÿç$w×#k°PXÜd * ¿LÕcMGQUñG•¦O}#¶·¾Û÷’­½ H·”ò¹ 'C+¯ –1žÔõˆ|%ŽâyvPXZÁ"¢ÂojÒJòml;T…ù‹ 4ž!ÔâÒà’ãZ¶–#<ª¦ÜÃ%ÝØ Õ„É Å9 î"©á%Ã+nè:­Å׊5 K‹ïµy^iÙI –Ð(*¬˜Q,sc9V%NƒÆÕ–ÞåìüE®\Eñ V\ôÏ“s\˜·jk±TÕæ‘ÕÜéÐÜ.¯'ŸfqæÃíõÆbã¥AáùžÓY:L2´6Ò\(tPQ¼â6€0rN1ôÀ⼌%hªñŒ=5·ù'ø›I7uý}æc^«Ý¦£«Ã«Í2ë-`VÊý¡‚Ëý$En%„J›ÄŠñÈIW,$'îQ~ây¿·¼?,¶³Ï5õþ”M³ŒBD’5MœJÝó:ôg!Šž6×í´-.òêûkOŠîÒ;Kf‡Èw–Ú-¤<¤KÍÚ‘óGþ¬‚Fì­„ño‰#ÎçM/äóíbÊ) uþŒ`Þ‘M'–»f•Ýw³ùp´ƒŠO¤ø¯WÖ¼GokeiµŒþt»ï"u™#‰,Ë®ÐØ2 'š&Y9ÉŒ«æYøÛÄ·ZuµÓéöÖiª¥¬¶\¢ËsxØ—çn3¿l8*¹8 ­o¯k·zÔžŠm>-BÙæ2ß5¤‹v¯…‡ÍIûbŒ™ýQ8ùð«¡x«QÕ5"[«tÒôýVÚ),ãkv¸7lÖþs\Š|Ãl‘Â2Tœ€ŽÎŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¢¼ÿI¿ë›*ó_ˆÖ-¸¸ø;WKYÞ\ÖÓEFRßë2 ç‘Ü9dÖ­îmt ë׿¹MJÔKrñ¬fFó9;T ôÆI<™,è|@vÙjÍÓ÷ÿzâì%ðü–MµSsÎÿ³˜öu8Æîzcñ®,C×>ÞG›‹pR\÷µº¿?²Ç†¬ßÚÿµ‚#í|í™ÿ–»xÆ:gœÿÀ©÷j>Ó¾Ççnû-—›ägÌò?uçmÛónò÷ãoÍŸ»óbª“‹­$»+úâñ3Qì¯ëý~'9m¬ép]ÜÚhK£hö>|"ëWÒ%…Õ"e¸(\˜Â#o‰ ¸~ûäƒ]†næ¾ÑãžáüÓæÊ‘Í€<è–FXåヽ¶T;² ëg¢iW?ãùµÏúêßú.·÷[jh×2ǵ‰Pd` œÂqÏÐþUJ FØÏw<÷vh×yà0QµGSOJ—eå³ÛÍ~ŠŒ˜/ OÁÏŒtì}ª 0ih“ìú‹¿™ßiÔ䏯3ÓÌvÛ×¶3Æz 5wûJÃþm¿ïòÿÚVóûmÿ—üh°ö•‡üþÛßåÿ©¦Å§I¨kRßÞZ}žþ8#„¥ÜbE(® rxûø¼ä`ó2‚œ\$´cMÅÝ ŽŒI'Ä—Äž¤êPU½ûJº{•ÕMÌÌžX{‹è[jç$ 0êyÿ'ÊÂÒÑuiµ¼PïónØsŒñœTáðÒ¥)JN÷'„ Îswr&þÒ°ÿŸÛoûü¿ãGö•‡üþÛßåÿì±è‡ö•‡üþÛßåÿÆñ\±Íà½nH]dC+aäÝÃÞ„MuquêChQK[‰žV@„§<½7íŸü÷¶ÿÀ©øÝ´jóÞÛÿ¥ÿãt}£Sÿžößø/ÿ íŸü÷¶ÿÀ©øÝhÔÿç½·þKÿÆèûF§ÿ=í¿ð*_þ7GÚ5?ùïmÿRÿñº>Ñ©ÿÏ{oü —ÿÑöOþ{ÛàT¿ün€´jóÞÛÿ¥ÿãt}£Sÿžößø/ÿ íŸü÷¶ÿÀ©øÝhÔÿç½·þKÿÆèûF§ÿ=í¿ð*_þ7GÚ5?ùïmÿRÿñº>Ñ©ÿÏ{oü —ÿÑöOþ{ÛàT¿ün€´jóÞÛÿ¥ÿãt}£Sÿžößø/ÿ íŸü÷¶ÿÀ©øÝhÔÿç½·þKÿÆèûF§ÿ=í¿ð*_þ7GÚ5?ùïmÿRÿñº>Ñ©ÿÏ{oü —ÿÑöOþ{ÛàT¿ün€´jóÞÛÿ¥ÿãtÖ»ÔQâó%ˆ«ÍG˹°ÜÁr@3ž¢€-Å4­<—S¨RÊIÎsî=)~ÑÿO—_÷Ïÿe@Ú?éòëþùÿì¨ûGý>]ß?ý•hÿ§Ë¯ûçÿ²£íôùuÿ|ÿöT}£þŸ.¿ïŸþÊ´Óå×ýóÿÙPöú|ºÿ¾û*>ÑÿO—_÷Ïÿe@Ú?éòëþùÿì¨ûGý>]ß?ý•RþÖζºrÏrÑé¤=€t@ÝÎw“Ûïž.ý£þŸ.¿ïŸþÊ€´Óå×ýóÿÙQöú|ºÿ¾û*>ÑÿO—_÷ÏÿeGÚ?éòëþùÿì¨ûGý>]ß?ý•hÿ§Ë¯ûçÿ² íôùuÿ|ÿöT}£þŸ.¿ïŸþÊ€´Óå×ýóÿÙQöú|ºÿ¾û*¥ý­mtåžäÿ¢=ÓH{耻œï'¶1ß<]ûGý>]ß?ý•hÿ§Ë¯ûçÿ²£íôùuÿ|ÿöT}£þŸ.¿ïŸþÊ´Óå×ýóÿÙPöú|ºÿ¾û*>ÑÿO—_÷Ïÿe@Ú?éòëþùÿì¨ûGý>]ß?ý•hÿ§Ë¯ûçÿ²£íôùuÿ|ÿöT}£þŸ.¿ïŸþÊ´Óå×ýóÿÙPöú|ºÿ¾û*¥ý­mtåžäÿ¢=ÓH{耻œï'¶1ß<]ûGý>]ß?ý•hÿ§Ë¯ûçÿ² íôùuÿ|ÿöT}£þŸ.¿ïŸþÊ€´Óå×ýóÿÙW=ñ O3Â:綾Ÿõƒ§#§&€5î?ä*¿õàô(+žñG‰°ï¬­¿â\ŸkŠi<íGPû,caŒmce™œqš³oâ>G·†IÐÍ2ǺKpòÛ«¸WÏ 'rí AmÉó äÅã&‡¤L~¡{ö=b¶•¡ˆÎÑoRàFÛ&@fÏ+ÁÈÉaš‡Åz*Ã$Ó^ù0¦ÓçO Ç«: tvP7:eÔ•”’¬Á­Y\^GiÚZgPÇý]±åw‘¶â6ÚAÚä7#ŽFPPEPEPEPEPLœJÐH-Ý#˜©¼ˆYU±Á*ÈÏl¨ 3@ñ†£¬ëÃBŽÞÆ í5‰Õåó„±SŒ[¨`ı#%±åô`Nì§ûößõ÷oÿ£RŸP,¯üzIÿ]ù5y¿‰5í1¼ax/nE«¬–‘Ÿ9±g*ÙG$Lœfyž¥Ì@ “Bî¿âýGM’òâÖÕ&Ó‚ÝEo4Q<Êì y¥œo×ZáŽçßø§SÑ…ä—Ëgx–RËlëm ’E³7aÁ.ûWhíÁ9ù·_Ã:†­u5ݶ·jM Ç"#™\¸æ4š\S†,7d€>RNÅüp»Å™Àùc ãõ=)OH›Qpé©ÛÛ%–Ee ŒôÀ=¿Ï¾…PEd§üާþÀïÿ£â­jlŠ@PE‹âm>þûìæÉ¼È£Ýæ[}¾[=äãkù±ß.lÆüžTP†»{jßðÍ’Y#–Ú„rÜI$fÖÚ@ÎÞwîÕ|Ϲ‘€Îß>†—â Vó]Éb‘é’ÝÜYÇ+ÔîˆÈ7óKHIˆüžRàw™fšÈêìÿú>*¥â›¸ÕôB×Ñ ›Æ·•m¯æ…]¼ò„p3¹Tç¯Î8  ºÏ‰u;}J8maû^›ÝÔÌñ·”`HË@AÎw1hÁÎ1NÝÍO_ÖôÛÏ않ßPÔ%hLS[[lP®· G”ó Ä fçÍ_¿ÓåÃt>¼¹¾Ò¢žú†çt‘ʈêÀ2;!û¬À·%w6ÒJ’HÍ_¤EPEPY)ÿ#©ÿ°;ÿèø© 3µ#¹ñN¢×zåœ6Ze´é$W¯p“%Æés±¸EÎðà È#"©Çâ_:dÏc˜Øíõ8þÎ#û=Ìþ^WsJmóí·¡`rT¶—¬øŠørÞßf£{§ý¬Ì-Ã2Æ©É.{.Kï>ç9 ¹Ô5=/ÃRéÓý†îòåg Öè™Å¬Ò¬né÷â.ªyzv  û OW_ʦWŠmemd‚ÅwŽÉJݰNå!ŒvèC˜ä€I«kÒj¾×,çk;|I,d…‘…Äð’çh&ßv2q¿8Éîn?ä*¿õàô(*ŒÚ™­Zê^n>Ïm5¿—·ïyg9ãWLs»ÛF}ׇåŸP™ÖñÊêòëˆLÊe‹ËÛ¶MØUýÌy ûÜŒ´,¼scakam©ÅöT–Ê{‘%¡i$’ÜBÆŠÂà«Krr.2=;ÀpXE0=Œ+[ˆ¤·ÓR9¤H¦ŽOßI’dcå‘´e˜•<×þÃsâOíQ<0 äÇk E$çfÀ'}åeQ’TN0zî.Í€( Š( Š( Š( Š)“ijÁ$.\,ŠP˜Ü£F8e ƒî"€2âðÎd0X¤+¤¶û#24DŒ7Ì$6~`I üY­9þý·ý}ÛÿèÔ¦ÜÅ«MFŽÉ›xiîW@SœçÔcóÆ%Α¬Ý4öV¾œÜ°yí¥™ÛÍ`”Çóy=”zRrŒmÌíp× “øKX¸¼{ËÂ’ÝJ¥$ž@ìî¥vXÇ’ ü¸ôã¥ZþÂñ7ç}‹Ã¾o›çoó%ÝælÙ¿>_ÞÙòç®8éUa\fŸáÏé´:n›á«(Y·˜íšHÔ¶Î1ÎçÚ¬ÿgxÃþyh_ø7ÿE\?³¼aÿ<´/ü›ÿˆ£û;ÆóËBÿÀ‰¿øŠ,‚áýãùå¡àDßüEÙÞ0ÿžZþMÿÄQdìïÏ- ÿ&ÿâ(þÎñ‡üòпð"oþ"‹ ¹ ZŠÿµZüÇ¢™M£[*ý¦P óþ¯ŸºGãíÍŸì¯ÿÏ= ÿ&ÿâ(² ‡öWŒçž…ÿñexÇþyè_ø7ÿE\?²¼cÿ<ô/ü›ÿˆ£û+Æ?óÏBÿÀ‰¿øŠ,‚áý•ãùç¡àDßüEÙ^1ÿžzþMÿÄQdì¯ÿÏ= ÿ&ÿâ*–§á={Vòÿµ4Ÿ _yYòþÒd“fqœnŒã8¢Áq—þ Öµߨh¾»mÅ÷NÎâIæ.¸EôQè*xü3â8µ /ãÓ¼2—³.É.•äºñÁo/$|£Œö”X.*x{ŃUmA“E2ý‘­UEÔÁ@2#äþGãíÌ’h¾-•ãy-¼>í oši‰FÁ\ÝðpÄgПZ,3ï<â‹Ëm^†µ¢0Ìÿj—tqù{6!1ð£,ÀÎǽIƒu˜´ù4øô_ ¥”­¾KU"vã’¾V ùG8ì=(°\»‹âÛx#‚ÞÛÃñC„Ž8æ™U €jöWŒçž…ÿñYÃû+Æ?óÏBÿÀ‰¿øŠ?²¼cÿ<ô/ü›ÿˆ¢È.Ù^1ÿžzþMÿÄQý•ãùç¡àDßüEApþÊñüóпð"oþ"ì¯ÿÏ= ÿ&ÿâ(² ‡öWŒçž…ÿñexÇþyè_ø7ÿE\?²¼cÿ<ô/ü›ÿˆªéáï UµMËöFµUSÈ“û¾~á·%\ŠëÂzõÝìW·zO…§»ƒo•q)‘¤#kò0NF;Ñuá=zîö+Û½'ÂÓÝÁ·Ê¸”ÈÒGƒ‘µŒy'#è°\dÞÖ®`’ ÂrÃ,ææHäÊò‘ƒ!.XâëW$Ñ|[+Æò[x}Úß4Ó‚¹»àáˆÏ¡>´X.CwáŸß$«{§xjágUIVg‘ÄŠ¤²†Ì|€I „š¡â­?TÓ¼¨A©C¦Á Û„¶Og*ª01†Q€ÜE‚çUöoµëqÀex·Ø7Ï7 Ovô«Ÿðޝýï¿(¿øÝ¸Â:¿ô¾ü¢ÿãtÂ:¿ô¾ü¢ÿãtYÃþÕÿ ÷åÿ£þÕÿ ÷åÿ¢È.ðޝýï¿(¿øÝðޝýï¿(¿øÝAr¤úZÇ!Ž+½Já—ïùgùP eãœlõlv:{ºÆ5éÄŒBùlðÏ¡R™Û­s}fœfã'oVµü;y\¾IZè–ûF[HDŸÚÏ–ÛŒÄ?öRû:ÿÏÝ÷ý÷ÿ® AöuÿŸ»ïûî/þ7GÙ×þ~ï¿ï¸¿øÝ >οó÷}ÿ}ÅÿÆèû:ÿÏÝ÷ý÷ÿ£@³¯üýßßqñº»c£-Ü&Oí äÃmÆb?ûN…a?á_ú ß~Qñº?á_ú ß~QñºvB¸Â:¿ô¾ü¢ÿãtÂ:¿ô¾ü¢ÿãtYÃþÕÿ ÷åÿ£þÕÿ ÷åÿ¢È.ðޝýï¿(¿øÝ2}GåÔoXä”:?矽Ar—Øbÿ ÏýôŸüf³5iâ°Õ4[U¸¹¹kÛøÐntÚX1'÷`ž€p–¬3¤Ñ¿å·üúÖn—%Æ¡¦Öx"£ "g.ÛËä:à峞¹ÎkÊÌ*88+ÛÓÍÓI¦í؇R–çBµ» Gu¹2ອ#`ŒðqÜðj¿‰õÍFI^ßN#µ²ÖtûK»“vÑ˹æ·r©B JªIuêã»\ oiÍÝ+wëêßæ#dŸõú >? sx¯§ï¶‚¼Šî&›Ë’Ò9cYfÜð m±È$# ` Ê–étmKûL^Hí·‚îKheÝŸ;Ë»c®$&]›‡W¢`_¢€ (¢€Þü*Z( Š( Š( ¸^ërxÂâÃM“\kx4ûiü½ X|®òN suÏ"5ÆßCž¢€3Æ·6ZÞ¤ÞUÕëÊéekjÌîªéu¨†lC0;l|±³|¨œZ潨MàHõ;/´ÛÙîí­ü‘¬ÃuÚBûêÌ l2*ðÊH^€ÓõmfÛìújY_]êW>u zæÚ °Çå+a­×ïJ¸s÷òF>ñmÞ§¨^.köÉ5VöÖ-BèÀ[‹;+•Y0Û®í¹Î~ðoxâêk Ãû6ûPÅ¥Œ7—¢;‰Ζœ¾áFT U™žUaó§ »®ðޱq¯øzÓV¹°ûÞB“Ü$mŒŠrH ’qþÎÒv’U@6h Š( ŠÃ×ï/­uÏGop‘Ú^_IÔF,´ƒì³H¸lü 4y#Öl|*ºãÝê1Á&–úÅšAfn£–YZY͵Ãìr‘F† ˜²¥ˆ#NŠîîâmK_¸:ÌúU­ŒÖÖ äÆ&rD~n蕃(’F¹Š=»·–Ë2ìfê·ˆítýZ[«çµ¸Ð´a©,+-ö¢Ïs±.>R3²Þ0ÞIA¹¤Úq·mO\]ßø3Y¿»ºyÜ]ÛGmµp¬7/+…ÜK·3sÓhâ€G]cÿ#,õàßûF·é aE1Íë³Ük k¥iÚ”éoÙ1‰UKM’G!ÎBñõã™|=nöú…ÈžÆÎÂfµ…¤‚É÷Æù€!Š!9ôç  Òþ÷ÄWÑÈò,v )MÌÑ QAè­MÖΟ“<— 4ð¢‚Ñ=ܤ0q‚د’©UB¥EmÛêûù4zŒŸ-¼º‹.o4?Ítì“Þéö-!i ey&9'‚A#Ø×©ëúÞ›yý’±[ê„­ ŠkkmŠÖáˆòža¸lÜù«÷ú|¸oªŠi$Î+Ýè0x¯VQ²M3|þR¸Š³ùrÎ.q±ØnÙ¡›d“FŒÇ9¡qågìÌr|Ìy€s·æ`kiš­ô¾!¸±ÔU-Ù^ÖÔÛ1i"GUóDáÊwPª²îàÝÆ…ÿÿ]ò™¡EQ!EPQ]ªõÑ?ô!@SâÝOÆkV‘øg@[»=Ô²ÜÄŸi}ÅËeÎwÀq€w]Ö¥×ü%#Äð³ß«¤ ²i##§zH³µÑ¿å·üúÖsøvú9d~®m`fܱ5°r¿(Ý‘žõúž,Vbb•ìÑ¥:¾Í½.E?…ïîÐÅ{­™`q¶D[ERW ãƒÀç¡}á.ûP[ÛˆçóDÑÎËܱÇ$‘•(ï°G`Q9`NG@0˜Oªó{׸ªÕö–ÒÁ¦økKÓ5{eé*BÐD¯w+Ç lT”Ž6b‘®Q8P àb¯éÖVúnŸmeg—ok C {‰ÚŠQ“ÉÀ­w–( Š( Å÷¿ –€ (¢€ (¢€ (ª©co¡5òG‹‰¢Žqù‘ ”éÁ‘ÿ?a@­á-šg®3ï3Cs,r+y’ɹX2×d©û¼U±¢Ø :<[ÿ£C4sª—bL‰ ”;6w3yŠ’Ic’ÙÉÈjº5ž®#7k:ÉDsZÝKo*ƒË¾6VÚp¤®pJ©# b¤žÑ«ÚáÃØÜËlˈãj´L¥SdQ €…;ã -¼%¢ÚIjÖö²F–‰G¹—Ê>Z…ž=Û$u ˜w†Äçå\iéÖ6úfŸmae—mkA {‹mE(ÉÉ8u  TPEPEgjz-–§ycux'2éóí¼«™b äc%Q€n 0<3ŒA§©øn™u[»+‹«-OS±6fñ.eaÚB2Ǽ(*Ia´’ÜÄ ’èº|ŸaV·Û †>Ío²B¸ÆÜĤ#m*¥w´€Wš <)e=¡‡Q’{‰´f¿[˜'–ÚPî\/φ;"qçî¨/„ô‰’$š;©¼´òÛÌ¿Œé¸¶É‰|Ì™fÂɹ@f`yï‰Ze¥‡†µY­ã7HÒIœæ0Û,±“µ %Џœœžh7ìäeƒþ¼ÿhÖý$ (¦ ¢€*]i¶7’ .ì­î$hibV zdzu¥¥‘o±ÚÁo¿¼˜ÂnÇLã¯S@µ=OÕ]þßÍxÁ Ë#!Ç¡*FZ¯gámÒâ;ˆlÈ’3¹ ÌîìpÌF•rˇ•Oh㩪­QG•= :í¤WÚtÜy-nAó–l)‚6xÆ9¬iɺ~ÏŒcgËòãjôÇAéNÌ.>ÏÂÐÙOq=•­•´×M¾âHcÒ¶IË>c’y>¦¶ôÛgµ’B¤–ÏËô$&ËTSQ@Uf+™´Ù’Êå-§ùJLÑù0ÀçnFxõ8õâ€9ì÷ñ$ÿñ,üsØþ]°vכÚ’êz]ö¥¬Çt,¯be‰,¼¢K8CÎóê{vúáhQÕèßòÛþýk7Oi/ ÛÛ[™Ô(’êI KæV$ÇÌ8/½øT´Q@Q@Q@q~#ñ©gâytË)ÒÞ¬`¹ 4+½E™¤’e ˜D1‘ÎN:PFøªjRj“î´Ë‚Ú±[æas{üòH|–×pγ­=WÅË'‚S_ФF\Á45ÈB×)Ÿ$M™J’ØØÄ1i ‚@ ?Å+n‘Mou«ßÎò4pZéo§7”‚0ÌRîAD Îð;XŠúOŒÅååúÙAu¬ ®]> TŽ6û/Ù-dg&VA÷‚w~ð``TðßÄ6KmÃT¹ó5;»K1s7™ bâh‘”y[ćq‘9HÊ Ü‘µ¶õ>×!ñ§imuomr‹$?jŒ#:•p\“Œ’2zí$eJ±Ö¢€ (¢€ (YÔï,uÚ`kmFîK{‰Žôż²®Å˜ù$ñŒ`ç*Xêw“x¯TÒ熷µ´µ¸Ñ‹;ù2¶ü€ Xg×<á@8ëßiÚ2êWwÚu¼búµª_®Ù5¤’WŽÖ"BÊ‘,JÄ ~iWƒÕú­KT“RׯöÆÒËOò`’]A2–î#iæ— Wz”–å×\ÿ6ëÅzäV×-oknt3ûNê)íäÝ{y„Á·,–û°âB¾hR2‡u_ÞjžÖ.ç0%°šæÚÞŒïO&v‰™Ü¶qMÀ]¹ÇÍÖ£«±ÿ‘–úðoý£[ô0¢˜‚Š( ŠÆñ=ѳµ‚p»ÂJX¦xlFì?P±ö¨.m.§“t·ð†£ŠXɇlÃ=úôÉõ5á⪸âriiýhÓ:`½ÔíëÑŒÐo®bÕ“q ¹QÜ$ÇpaûÒ¥NæbG#<ŽzÖw‰õÍFIšÛM·Hí,µ:ÎîìÝ´rîyíܪF¨C!I•I.½\`€7z8:®­'ý~fu"£=ˆ.¯´íöÐBב]ÄÓyRYÇ,k,Û¤…¶Ç Œ€ 7*[¦Ñu/íO¶Èì‚ÞîKh¥ÝŸ7ËÂÈØÀ+‰D‰ƒ×ËÜ8a]fFQ@Q@CwŸ³·¶ëþ}>£­PéíÃËÓÛ§l|•5."ƒ·ú]¸ÿÈÉôôý:q„C'Ñ¿å·üúÖHÒ5»'–-9ìظd3—÷Upp1ü#ë׎ƒÏÆá%‰Œyš7¥QA¾b íÄŒ-mw.šÊ6;Fd,«¹I ‚~QZ… ½Ôåoï-¢–î Û‹H|£óBc(ÌY Ž"Œ¬£ Ó$’`p³Ãss»ÞÁZ¬gnTð´Ùâa{öO±Yý¯Êg‡äÊ-v|¸ùmÇä#';ÕèœáEPE>/½øT´Q@Q@Q@QOŠ=fçSFÏsm »©ÆÐ±´Œ¤ g9™³ÏaÓ¸0ðEŒwRÝÚÞß[Þ4¦h®£- ™nd%C!SŸ¶LŸ0o”â«Jm)ô¨,.n®¦\Ãtg’@ÒI$s,À“Œ]GÊ (Ö4a¨OͽõÖyn\ÚˆËynTº":à˜ÐçnFÑ‚ æÛø"ÆÀ‡Ñïo´¹“ ¶í˜âò`ˆÄ¨à©М[+÷°H i¶Ñ…´VŽ£ ¤)–Õd@·i;°MùÛ`ª²«lÁRƒkhštZ>c¦[³É ´vñ´„*Š@8‚€/Q@Q@•¬hßÚwúeÙ¾º¶m6äÜÇ=²±B„>äcŽëò‘÷Éê5- ð]뮑ªO¥}§ý’Þ9–#.ÌMÄe¸wrr[;Ï òxvÑôû-1$¸‡J³„@tõ`b¸@ ’Ê€£€À0$>àHª²ÝÙÌ/5í®åÕßQiì¼¶m% ²£!ÙÃÆÞ%`K ÄKÏ GzŒ·z¾£1¸·û%û7Ðr#“€  dca¹$€FÄ=)4Ï êßgžv·¸ó'[WØRwß!BwÌîÌw3c¢íP4tv?ò2Áÿ^ ÿ´k~’SQ@Q@úΚš¥‹Û»´lAÙ ÚØ#8î0HÇ¿cÍd·‡u–bOˆ†IÉÿA_þ*¼ÜV^±çæ±ÑJ¿"³W,hzÚ~ ×·z¼—É0¦!…RÛŽy99þ¿„·ÞÒïµ½¸Š8Mì±]ÍRIRŽñ«v–át¬5«ÓTïs:“ç—0i¾Òô½@_YAp“$-J÷sU à“ž0`r/Þ:}A4èg¶´´mVâ_<ÄMƒI7ñ&Öß#C b®cÁ*22BìM«ê’êÚ•¦“aêYù†–!RvW’A#aŽÑ·#j6Z\t P1üs1°šößKGƒO±þÐÔ®Êþç|ªÜ„"`ÂÞFRÞXehÎFã·3Çš¤Ú¯„µy…ªEiÏo žqi$h¥1ÈY6áô;pÍrvž(:{ù`ÿ¯ÿÚ5¿I )ˆ( Š(  ]‹[H^PL&Cæ þ5»cóQÇ~‡‚j¢ÚêŸô4·³ï-µÆ½ÈhHϸÁ=óZQÄn•—Ïå£ü¿àtA.K¾¿×tK¢j— }ý™¨bK‘γ# ‚B¸?*àŽœgŽ•Cľ'¸‚UµÒínœÃ©ØÚ]Þ¨‹Ê€Ë<;£`쓫ʡ̂ßC WÛRR×åùÎ<²²x–}gGÑâÕ­.­õ ½.;µšaÛÀ?2DòØí¤C†~qÁÇY]&aEPEPP^-ØóÛ9Èéïþr:Ð 8ÿ–rñé€ôºq³;X¼‚Ùì-çs·W°$(ÈFò$V8àpý:{C/hßòÛþýku½(Ëmk¦}®-á–u¹D 6*ô'#îþ½úŸ/0ÃT¬¢é«µÄè£8Eµ2 Vß_Õ­^ÒM#È/—æ=Ò0O™NH8ù{V¥Ç†üÿíô½¿nÕ­5/õYÙä}ŸäëÎï³õãúròêhó:Š×·êç Y@ÍÁ3}šÎ µ4dÒmã·ÒŠZ1ªK ¨gùÏšw[Dß/#MÀ«×Á"m\j×ú†ý@ùò­`ò|©mÑd‹s>Í©lV.{ƒò’•êŽ÷:n¯q©]]Ú—5¾›jö°HìÁšY#2¸y~PŒ o—oE@Q@‹ï~-PEPEPYÐéžWˆo5_;?j´·¶ò¶ýß)æmÙÏ9ó±Œq·¾xån~Ãq4óMuktípn"ŠúÀOc=䘒=ãxÛzÀ`®5oöki<2‹á»=") …mîà»&ÚÑ"‹1ܬåR5ÀU%JŽIä—9$Ʊ¥ÝÝêš–•{¥í´2Ûƒulg‰£ÆÍò«¡Ý˜“v1»ƒF.™ày´)} THç…<˜í¡D?gµˆ†èKæÒ6Ü3 §‚+èÿ í´»« Dš}Á¶KS%ÄúR=Ñx"Ž5ò¥f"$";v³ÎCA^«Ãšgö/‡ôÝ(Íçý‚Ò+o7nÝû.ìdã8Î2hFŠ( Š(  mwJ¼Ôu-êÖòxôÛ³rñËld3f7‹h`ë³å‘ùÃs´ô—úvµgªkzæ›=­Ôóék•ƒÛ•>l^cGºC •Ááx+ÈÁ$¾§à]?QÑôâ;[7N¶¤ÝÙ¬·-UP#— DH@•rAùJG/‡5MBÃP sŒú†¯%ÍÜÁöˆn AäÅU‘NÖŽ(]†îNåaµŠPšŸ…µIn…Ϋj­©Ø;S1ذB]¾H2Ÿ)öÎà³;NÑ‚/4¹´¯ jð‹¤–ÒGžâü’²FÒÊd3îÃîváW`î<Ð4tö?ò2Áÿ^ ÿ´k~’SQ@Q@~!Ó_TÓž\$£% }Ü•+ƒí†?N¼ô9-câ¢Å·i'<<¿üMyÌJõ9àÒõ:©VŒ#i"mFÔ­µgÔ57µÜ-ÚKbÇ;Ÿy$°çùûs&¡áhooÚåu Ûhe»‚öâÒ(Å<ИÊ3Bãˆc+(ÂôÉ$öá(J…% ;³*“S•Ðxo°è_eÆ£}öO±Yý¯Êg‡äÊ-v|¸ò[qùÉÏA]FAEPEPTu™¦·Ó¥šÚÕî匫,ê¥ðûîIí@gÛuÿúç[Ø?ø¯¯ä} QºƒY¾×´+›½K,ïѤ‘îb¼B޳œ:zúIvÚ7ü¶ÿ€ÿZ«¦Ò¢\$×ì¡üˆíÚH— …• ‚9Ï|ã-qbkÊ“ŠŠný¼¾OOêæ‘î*kÆ;…öÆÚ¤™Ê˵NTÛãPÝ×8稠ø›N¶—RµÕ®™ …òÙ,÷7*‹+4ÍÁlq!Éû¤ý6¡[ÚÝ5f½T¿"gPñ/‰ôíÊõ¥ºµ}BÞÆ[Ø´ö¹T–uDfùW“‘¹ãÒ­ê摦Äòê:¥•¤qÌ w¸¹HÂÈT8BIáŠØëƒž•Ðf_¢€ (¢€Þü*Z( Š( Š( °õÉk«É¦Y躎¥46ÑÜÊmZTYEPL²¡'1?@{Ppø²ÇíÚŒw’Aci§Ã’^OuL´óÂA*¿4Û?>VU½W\·°ÑSUP‚g [6F3¤Dif A.¼–ÐgÄVÖ¶óÄ ÿôfo%«sn›Î20É#/<ñœü§ŒsLoiöÒêcVºµÓ ±¾[%žêåcYY­ã›‚ØâB1“÷Iö…â;T²Ò ×V¶º†«cìZ{\©—k¦ï•x,?„Ö•õ¦¡–Âî ¨ÆÜ¼r«¯ ÷VV¡èEZ¢€ (¢€ (7PÕíì5-2ÂT¥Ô¦xadˆ”R‘´‡{t^àu=†¶º½½Ö¹¥EââÂe•Þ"¨Â]ûv÷¿Õœ‘Çlä1Çßf’æK §‚’æækr‚YR;’Y”ºH¼€FíTµû¯4:핾›u~mR>ǵ‹Ë'˜Í,U¢"9.ã"TYCT›Æö Ì–WÒÇk O¨2,cì¯$ndËØhfºó3åœdÝ‹ñUMOº·ÙàmíüÈéö™ÑöHÝòº2ʹ껇4 üŒ°׃íߤ…ÄPEP^»wöKx˹Š'r²È¹ #1Á»Ž9Á8ÁÁªb]F/øôµºD=Vá’n}A3?2:cçÊ­ˆœ+rǧŸèÚ¿õóÞ1V»þ¿Xѵy.g67èa¾Tiv…^0åAfÁéOSÆER²ñT?ðjšV ¯ ¶¾ŽÚ …¤¾Q.¡æÁŒ9y …, Ê #=Øz¾Úš—õúþfr,¬Xź,«+­Û„‰<Äg·•E– W÷à³ -Ù.€gzæ¤Þ1³þÕµHåÙfö—2Ïç[Ê—Í–Ê‘ùL†aqÂÜÛ“oÞ܃^ÏX³½Ôe³¶iä’ßpyE¬¾NTíemòÙƒpT1 †eN4h¢€ (¢€ †ï?gol×üú}GZ¡ÓÛ†?—§·NØù*j\Eoô»qÿ‘“ééútã†O£Ëoøõ¬+˽δ“L¿™„€ù[—F4\ƒßîŸÿ_äfTªMBPWµÎš.:ÆL¯®^ÞëRÙÃ¥jJó'–že±UÉu<ž€|§“V›AÕ¬üOy®éÉeu$ÓJÚ{‡„yrCh¥‹ˆß Ðü»H!ó¸‚e”êCÎ-^Ûü»’‹(Càý[NðΩáÛ²º¶Ôtÿ³›Éæx^9’[/î‚0*LJÄïo#oÍcPð¾­E¢KÛÍš›]:Oj³0iCÃå´w\¨lÈC7!Á•½ƒ”í( Š( Å÷¿ –€ (¢€ (¢€ (®jûÂz~«â‹O[Ó4íF²·¶·[«u•£d’vr)"t<í9è(žŸÀZ“_Í{æÀì·ms 1_MjdÌ÷í´Íï z‡*J2žêڗ†A¡É © } ÕÄ2I$ñ²ý­g• ɹ¤$n›‰Î &ðßöF£gá=/K‡È†â ,³ö8ŸÍ0“&èã˜y 1·ÝFÜ Áº¿†.!¹ÓžËQ’Þ/²¤w=°x͵œFBÁkn³?&!ó¸‚à í8ØEuä\ÇØežQ©]"G%¼0¦Õ¶]±Ë–· $rÜ2¬ë|£ÿÂ?áM+H)IgkRýœa@£{w6ã’2s“É  š(¢€ (¢€0üEe¨ÞjÚ öZ¼6Ísrg¸hÛi†H°€#8•›’¿tâȧ~š¶—­kÚìz|vÃI-`‚w7Éœá6yxŒÅF ”pwa@(j>ûW‡´­ >#‹NM6÷PŠîkiZ@ yQ²ç/#BäáÁeg› vâËUŸK… “QÖdkˆ.n$¶³Ä‚Üyrª1S'Ž.BÈBB½G¨øgW»²½‚ M.Ê=[IM"⮟e„hf ñb!æü³ýÂ#`ˆ9¾4°¼Òü¬ZN {c5Íͼé!Þþtí++¡\.ÒûA Û±Ÿ—¥GWcÿ#,õàßûF·é aE1Q@‘â‹ µ-£µÃL»™PœoÊ2ã=Íúvê2ÚëÄ…‰ OO¶ÇÇë^; ^¥^zj飮”é¨Úc¼=c©uµ FÌZ"Û4LÊåËI¿#o@:síøZ¹ðןý£þ—·íÚ½¦§þ«;<³üyÝön¼cCŽ{ð4§FŠŒ÷2«(Êw‰—æ6ÖvójˆÉ¤ÛÇm¥´*cXå‚T3åÏšw[Bß/#~1¸zx#ÎÖ­¨êõçHg´ƒÉò¦u¶E’-Ìû6¥°X¸}îÊJÓæƒá»7W¹Ô®ï-‹ÎŒßM´{X$v`Í4‘™\<¿(Æ‚[åÛÒPEPE Þ~ÎÞØ?¯ùôúŽ´C§¶? /On±òTÔ¸Šßévãÿ#'ÓÓôéÆ ŸFÿ–ßðë\¦»â½ÃòíûÍM%•ç•|›— QghÀU9pNz‹¥Nud¡vÁ™ÚÄm;Sñ,6¾’òêÔ¢µ½‘¾@Ó$A—vNwJ ‘’ïmuDºÕ®¬`·ÖÏ =ÏÊ#IJ«ˆ¹mŶH­»pq»9uhÎŒÝ:ŠÍ ;ê + +_^ÛØB³]ÉåÆÓG;IËÈêˆ8õfQížx«4Q@ø¾÷áRÐEPEIµ[%ÖI7)ö÷¶k¡n[ÊV \ú ÌÏ^qœEy­iöRÝEsq±íaŠiP#1Û#2Fó322…\±8É‚ÇÄú]ö¢ÖVòÏç ¥Z[I£ŠI#,FPŽÀ£ð¤œ#€³XúŸ‰´í3P63‹énV’ÓN¸¹ÚŒX)&$`2QñŸîšžËW‚óU¹ÓâIÖ[X£™ÚXŠIcÎ æ9Æ*A ÖPEPEPEQ½Õllïì¬nnQ.µdµ„ŸšRˆ]°=ŽON@ê@+oªY\ê—zu½ÊKyb‘½Ì*rbnÙ»°$)8댄d0xÇGU&ig‹dÓG'ú;¸„E3ÄÒJÈbŒ´NC¹PB±þÅ‹ïiúuüöW^xša”,P4­/še ±¢îÀA#…è"“ź,KµÛ”•<Çd¶•…º†*Zr÷2¸&]¸(àãccžø•©Ú_økU†ÑÞCj’y.#-¸«!\©R);HÁÁâ£~ÇþFX?ëÁ¿öoÒ@Šb (¢€ (?V»kH¢Ãˆ„®Q¥$~ìf'ž:.9àg<ã€Õ.`â(înÁþ+‹iceú„‚?Sž<ú¸™Â·$Svû¾vMÿ_v±‚q»þ¿æ«Ç¨f)PÛݨfkw ÐÅC ʤƒN3ƒÍVoéöÒêcVºµÓ ±¾[%žêåcYY­ã›‚ØâB1“÷Iötª*°RDJ<®Âx›Å~exfºµ}BÞÆkØ´ö¹T–u¾Uäàìn@8Áô«z޹¤i‘I.£ªÙYÇÂyîR0²’F© ޏ9éZ’iQ@Q@T7yû;{`þ¿çÓê:ОØü1ü½=ºvÇÉSRâ(;¥ÛüŒŸOOÓ§D2}þ[À­sÓjÜŸ°Zê‚édy,§¶@Þ]ÜÌÑ8–Tl2°éê3‘•2ãÍšRRjæLPêòk—:’_a"M}-³?ïolÙPerÕÈÄá@Î*€£kQð¼³Mâ;äÓ`{»ÝFÙÑðžeÕš%¯›ãü/åJ›…$ó…9­¹›•’¿E·êgÔRnå}ÂÒŸÚß\i`Ò¡ûT¶šy‘Ú1{ÇæHf”ܡбÃã4/Þé–Zg‘¤ÛÛ\ÚÚit^Z´s¬çíÌ?y¢ ®Ãýb€¹lb‘EGðޝsp÷C”¸EŸTˆÇd–·³%ݼÅbáä ©8SqÈÜæ½;O#°¶H­~Çж¸QäJŒtùIpq@‹PE>/½øT´Q@Q@s×Ñ^·Žô«˜ôù䲋Oº‚[°ñG‘áeK‡<@s…?y}ö€PÔ´MA|w/ˆí­ÍÒ[éðC³º3¸ó dü³*º…f‘#¦@rÉGÃÚ¡oâä“M¾·òukë¹®n¯[ia•î<± ^kyr62XF‡@[æ!€;êåï<45?ÞßÞ›è­ÛNµ‚µÔ&¶Üë%ÁpDN¤à:cw÷Ž;Ð#{àÝj{‹ã-¤íe%Ù–X-ÚÚGºíz‹… 6bl}¦ÞLI€1‘ó¨½ð…„ºW‡-m&«!r©;ÆïfT>Zª.Õ lAµqµI³EPEPEP?âhï¥Ö|6öz|÷q[j-=̱”ÙÆ€5j§†…$™#ißˉYÀ26ÒÛTw;UŽ`Oj©«kºNŠbþÙÕltï;>WÚîR-øÆq¸Œã#8õ£@Q@ÚÜCuoÅ´©, ’9c`ÊêFC8 ŽsSPEP3O / I2FÓ¿—³€dm¥¶¨îv«ÀžÔ,ðµÓÛ‰Ï,a¹U‰ Äu•`}§Ò€3Lj´mÐ,š¥´-ss-­ºO(‰¦–9 nˆ­‚Ä8Çê1ÔT·šî™c%Ìw×°Ú}–(§îËHÒFdB]°¼²0ëÛÜd—]Ò!ûªXÇý£±o¹Aö¬ã_?>w/Lýáë\·Å+ë;ê–]A-ͬ?é$žÛJïPr¹Œõ hÛ±ÿ‘–úðoý£[ô0¢˜‚ŠÌÔu„Óå^ÞYÞq<ÛâD‰îX»®>ãz*{+óss,ZÏm,HŽVb‡!‹FÖ?Ý4VûS1Lëö«kT…Äl÷+ÌT6̸à\óÀÇ5WÅ6hÊ&ê…’æQ’ï¿»o9ÎÐqɼ߯Â5%tô_›×åø›ªM¤Ñ«{¨ÚXésêW3go \I2‚ÀF«¸°ÆIàgŠƒKÖlõq ´iÖH°d†êÖ[yTím’*¶Ó†±‚U€9’wWF‘êI¬Ü鈲 í­¡¸v8ÚVF‘Tœç0¶xî:ö½@Q@Q@TW_ê‡ýtOýP”ø»ÁÚŽµ¬Ú^éž&Õ4¨ ¾·‚î@¬€pcá[€çv2kºÔKˆ<% +ú 29v 9f$“îI&’,ítoùmÿþµ|Áoõ]÷Kj¿k‡t¯!EQä¨É"D8ÉÏQÇqpÙÿ]H‘Lž;»Û)mf7PÛZÍ—!\#3–Ó]'¶½„Ï<ˆ"Re•dÜOÌÄ@r[4µüK¯ÚÝ¥µí¾—ywÞ`hfŽT´¼Su±—1°/nªîn‰xÀBs5 PÓ|Ik{tu¦‘ín/õ.Í®H˜Å¨‡ NYÉcr’±˜ÁÇ€:ÝzYµÞéZ|…ÝÆ¡£Ý¤3ÝZ›rÒ*ˆÀ:¦Çv|µA Ä`U.·y¿Ø¿ðÿgù'ûCÍûG›ö}í÷<ÿÞùÛ·}ÏŸÊÝ›ìô¿à›1c&­ ±ÞÇvÚ…ÌÒ‰ŒÆ’\Jñ·~ï”`[ËèOÏóWK@‹ï~-PEP\½êÆŸô¹VÊ1´›¨$»K9 s,/<Ávõs qŸW¡«Ù^/î5img»Ò­´û3-²DNùk–YTûÖ‹!¼®¿¼tŒ5 Ú^ÂCmV_³kšÌ–×vF+kXÝî¶M¾ZùŒÞb yŽ1+¿(( ôjÃñ Í«øiâäH57’VU$F¿c¸]Ì{ Ì£'¹½9[8uŸøIï%ÕoµO'μûMµµ•Þß²bO'd¢_+vß$³Ççnàóæ/쯮RÆoÇ®;Zj+=Ë[´ÒØÛÜG ì½dÝ"‰|¾wÿ–":ok÷CLñŽ“qm}%²é÷°4––3\ív’Ô¨"%b2ñŸîšænlu½>Ê{vMVŤ’x~ÞÅ¥1[Ü<÷ Íäæ0¨h˜”˜€V J†4И_}#ÿmÿlC¨¬ÓûQ€Ù%ò0û–o³*åcÌó /T—[ÔõkQÓ†¼Áms¦/—un émcä)‚ïA>”«üh&»k®Ãy-’^j¶ú%µÜ«¾Uõä¬L­Ý«;®÷ºù‹²6žBnÆË\Œ\jWSkêpêšt ¾Y7…£´[†û:;Cžà’¡‚Ä7ÊÛøkd4ÏØX´wÑ\ÚÃqÞ4ͶuˆÌ™0G_îúíï]E (¢€9,CÄžŸìSÍ4:Œ¹ž9%òc{iPîuS±K¼YÉã=‘].ì´ø—Q¸¶žÖÙt‹Y®o>Ã(ŠC œÈ|À»]–7ˆpIÀÀû¤ ÿ êðøRßO´c±­h‰¦êMb÷Òs$::¤M¾âfgråúª³ 6œ×æÞ]_XŠÅ蘭Yû-…ز’ëì«¿”îR0d’­Ò…ni*² fmýˆ‹M×môË=Vu×tCig$¶šìÉxe2ƒÈÜ÷ Ùp‰ó’¸U8o‰ƒÛø#Z°ž⸆îövß „dšé匣‘µòŒ¤í'npØt‰»tï‚7Lû†÷<¶Õô«¸¬lkµÿû:?µ¿ÚÿÈ?ý ÞkfÚÎyÔ1FÎÅŒàgÝÅ&‡¬\jìËÉskϰ ²äã'§ãÛ¯]¥Åbñ»“ž~Ž¿çð=9Ú¹9áGàxëþÓ¥ÂÀnäç…ã¯ùüNv†îNxQø:ÿŸÀôçip°¹9áGàxëþÓ¨÷’å@ 0^Aã'£ü®Òáb¡ÖâYÒ™άëŒneR oäË“î=kÄúÝÄ“éúU´ÍÔ$u{ˆ”,‘„Bÿ&K ’É ãœ\v2¿á—þƒúÏýþÿˆ¦§‡VKM¼›SÔ.ÞÚö.$FPK…=‡Ö’c:Í.Q”N@9ÈÄQS¸²{´»{hæ5Ú“uð9“ùši’Èíõ»kNîÂ%s5¤qÉ)Ê…ó€y<~£ß¾Öžƒþþ'ÿEÂÁö´ô÷ñ?øª>Öžƒþþ'ÿEÂÁö´ô÷ñ?øª>Öžƒþþ'ÿEÂÁö´ô÷ñ?øª>Öžƒþþ'ÿEÂÁö´ô÷ñ?øª>Öžƒþþ'ÿEÂÃ’ö59 ßÄÿâ©ÿÚzäDÿ⨸X?´"ôÿȉÿÅQý¡§þDOþ*‹…ƒûB/OüˆŸüUÚzäDÿ⨸X?´"ôÿȉÿÅQý¡§þDOþ*‹…ƒûB/OüˆŸüUÚzäDÿ⨸X?´"ôÿȉÿÅQý¡§þDOþ*‹…ƒûB/OüˆŸüUÚzäDÿ⨸X?´"ôÿȉÿÅQý¡§þDOþ*‹…ƒûB/OüˆŸüUÚzäDÿ⨸X?´"ôÿȉÿÅQý¡§þDOþ*‹…ƒûB/OüˆŸüUÚzäDÿ⨸X?´"ôÿȉÿÅQý¡§þDOþ*‹…ŠÛÖ£VM0‰ ËÛµÎT©PŠÁy õË~„œ ¼o#á¸ö×ü?Ÿ¡Ã ¼Œg†ãØ_ðþ~‡¼Œg†ãØ_ðþ~‡ á`7‘ŒðÜ{ëþÏÐâ;‰mnmå·¹„M¨Ñɨ ºAV‚È ûç¡Áp±!¼Œg†ãØ_ðþ~‡E5µª˜­à!g•‚* ÜÎK1ärY‰'¹'<æ‹…‡ÿhEéÿ‘ÿŠ®#âN¯m{¡êö‡ó¬í•å'~sÀ“òœýG¾±»üŒÿõè?ô8+‰ñ߆u-gWðþ¡azæ 3P†iìX…FQ &P{²ŒðIã;pr Ú¿ÿ‘¿Ãõõ/þŠjÖ aE (¢€ (¢€ (®­ÿ «Ïúàÿú «^?ñJhç?òá9ÿ¦kïíëÛ¶>F„ÍnžØü1ü½=ºvÇÈtöÇáåéíÓ¶>FÓÛ†?—§·NØùžØü1ü½=ºvÇÈtöÇáåéíÓ¶>D<}¿x£ÿOOÓ§@:ñ¯†5{ÄÞ»Óï_O‡Miåžê"7®|¼"ƒÔ° 9qœçîMoþFO×iÿôKR¹QÏ÷í¿ëîßÿF¥ 0ªŸþ¹ý k‡°Ô@#èñ:ݲ°ÁR±Gýõ[ºuõ¾Ÿamg·dÑÛD¡xb2DÝxÿ8°5˜Æ?âsaÇý;éÿM½¿— À5˜Æ?âsaÇý;éÿM½¿— À5˜Æ?âsaÇý;éÿM½¿— À5˜Æ?âsaÇý;éÿM½¿— À5˜Æ?âsaÇý;éÿM½¿— ÄÚ‚ÝZ< â+kVpšÞ¼Ž™”ÓÓéÐ` û%?èz¼ü¢ÿâ©ÖºU¬:…µäÞ.’íí‹4iql •*z8=­m}¶ßþƒv_÷àñêîÌË M­Z2G2JU! NÖ Œù§=(GW–8Âé7S³ŒHn®Š€2ÀPsÓÿמ3µu¿ùíáïü þ&•†W´¹Õ­oïï}¥¾H£po_j„ÝÓåï‘ù{ñcûW[ÿžÞÿÀÇÿâiˆ?µu¿ùíáïü þ&í]oþ{x{ÿÿ‰¢Ãí]oþ{x{ÿÿ‰£ûW[ÿžÞÿÀÇÿâh°ö®·ÿ=¼=ÿÿÄÑý«­ÿÏoàcÿñ4XûW[ÿžÞÿÀÇÿâhþÕÖÿç·‡¿ð1ÿøš,ý«­ÿÏoàcÿñ4jëóÛÃßøÿüMþÕÖÿç·‡¿ð1ÿøš?µu¿ùíáïü þ&‹+^ø… Ißûa~Cu VëÐíç¡üª/í]oþ{x{ÿÿ‰¥dý«­ÿÏoàcÿñ4jëóÛÃßøÿüM;jëóÛÃßøÿüMÚºßüöð÷þ?ÿE€?µu¿ùíáïü þ&í]oþ{x{ÿÿ‰¢ÀÚºßüöð÷þ?ÿGö®·ÿ=¼=ÿÿÄÑ`%¸½ñ ´ž]Ïö /×l—R)üŠÔ_Úºßüöð÷þ?ÿJÈûW[ÿžÞÿÀÇÿâhþÕÖÿç·‡¿ð1ÿøšvþÕÖÿç·‡¿ð1ÿøš?µu¿ùíáïü þ&‹jëóÛÃßøÿüMÚºßüöð÷þ?ÿE€?µu¿ùíáïü þ&í]oþ{x{ÿÿ‰¢ÀK¢ÜÌž#ž­y¥"­›[ªÚÝ$—Fî¦ÓßÓ§QÒ{Lãý2ÿmWŽžÿç§A×´Î?Ó!öÕxéïþp:q´ö™Çúd#þÚ¯=ÿÎN6 ¯iœ¦B?íªñÓßüàtãh5í3ôÈGýµ^:{ÿœœm½¦qþ™ÿ¶«ÇOóÓ¹šÎ»!WHŸLf`DŸkºÚùHÚôöéî€djëóÛÃßøÿüMfë×§@ñ¥zöOö¨"~Ç+H ¡9É vuõ¦3§ñF©k¢Ìš…óí†+L2Xª2H,@ËrH4ºf©ÖŠº•Äö+×y&µ»@ª¤ä‰H\€'#¶i—}âëX¤°û:\²Íyä\Bö‰Õ 2º²Å´9£Æí¤`?¡Å§ñ>š·/û©-žãqŠPĬ‹Å]œ¾öÚcÎðÛFÒ[‚ÀH|I¦RA%ó3'ÙÒÎfHЄóÈrT :ysŸŠ¬¦·¹’â;˜ZÞò[M‹m,†VI$Aåá?xHŒ± »hÎzE€µªj¡±LÝj¤6©TÇ!`Œ¡ct=½Åa·Œ ‡R¹‚î(b·¶óŒ»g/s F¬ÆY` ”ˆ„ùX1ݾ>>~,éÚÝÞ¯¦5æ“—tÞ~ÀƒTܪ›AùÞ8Ü FPn9 jÓm(2ïÛ„âÞàí9?ºÇñ.yëÆÕd¼ÎÊræ„_tŽš=VÆO#dùûE̶‘|­óK™½zq)ù<¼u­s©ßKy=¶emtmGr÷WM«•W ¸Ë¬¤œó wÄÐKé6Ïp'¹t[e‘žSo'”|°KªÉ·k²…lª’Ãcqòœ0ø«GXå’[‰¡Xbydóí&nÅ.ÊC(ùöû>ñ_˜ §4X šþu,Q$³G4²ùI Å´°ÈIGpv:‚¬o†#¡äbªEâ­>MbæÄ—XmàóZìÆþR•’d;mÛS|Ì@lñÓ ÅZDq«Oq4 òˆV)ífŽVr¬Êl¡ŽíŽæe*2ÜVÍPEP€X€ ’xw¬]Åsà½L@K¤jÃÌu˧¸Æ}sŽ9-wÄúö•Õ½¸—Êu…'ÊîHÞ ##+¹FA# Ö«G yÚV­i©\ùÒëþ×-¼~RÑ,_"’Û~D^¥¹Éèp)ÏáÍN{èu95[1©C,e\X7’cHç@¦?7vïô—;·ã…ã©5/|ׯ ¬ì’AË,ÒÆ9n%ºŠão•’La¢;”‘òº€Ää‚à[²ð´úo“q¦O§YÞGæ«´À–Û$ò÷:°oÜ¡ÜÎÝ[±P¯¼ðÜòÙÍgÅ‹@oîÜÝY<»;¹²¡ C±×iP1Éù¨¸u .x´í0Ù¼×—:D±ËÚ$îCîc€\ÆîA%Fý¤3QYøzê6k{ËøgÓ…ô—ÑÛÇlc“Ì3™”<›ÎU\ƒÂ©%W' —ÿ#8Y B(iŸ`2Û[4RN~Ï䆜ù…eQ’Ê¥AS€®í›½ÍÑu= Ÿ&ÊòÙà‚3ï²ïVR‘”SøyíÚª\ 5 -B}TÜLâ-SOK 0"©›,ç’&ôão|Ö)ð%»Ú•x´e™gI–(ttKV*’ ó"ÞYÎ%o㤆Ü\ oìO c¤zs»&ÓÕ­²_y*6ƒœ ÙXäœdðž¥ö‹Ë6ÔwX^i‘Z]\\#M,¹’àȱ³I”Ú²€¥üÎ ýí§ Ô< ¡©I=ÅÅ·“+\%[1öÖYb’2†à·*¢_”là"q“kVðÅÖ¯öiõ9´‹Ë»_1#ûF”d·òßa?ºiIÞ c »$mç4\ :ÆK‘-ÎûH­¢‚<”M…7|¨æÐ8Ö5ß„~Û¶WWßñ,in§Ž(¡Û2Ép²«æBÅJ>L €—$àîžO]^E~u+øe›PŠYͽ©Š6¶GbÑí.Ä3¬’)`ÜFN–¯aý£io•²æÞãvÝÙò¦I1×¾Ìg¶sÍ 25Ÿ -ÛÛɧ\¥“[´’¨’#*™ê’Äo¡#¿Æ1ŠC¼gޤIÍæ¡¡¨\FžR)„Gå¤hYˆ%¢‹9,0$åIQL’Š@PEPEPEPEPEWÖ‘¥M:4•ág.¢XÀ,„¤¼ÀŒŽ¼‚=«O_Mv59õ+cªÄјdK6X¢Ì 4fBÌqq/!Ç;8àî`Z±Ð~Í%ƒKsç Inn™{C\ÌÄ™9UI”)'‡$¨5&­¦ß\j–z†™{mk5´@VæÕ¦WY6ÏË"`ƒîzÒŽŸá¨¬õ›Oö]+O†f’@ZgQ"! cäí†ûGª ¯?‚üë>Þi4ë¿ì¸šÖÐ_é¾|b#zyƒ2)~pT`°ÙÏà]±ðרõˆ.âža·‰c kmäIq¶?,yå$ŠJ-vœm ~ÇüŒßî'þ‡%s/6X]…¾z“Ê„…;{mõÎ#¹#µuájJK¯éÔ¥‰)+ÛSGÁQG‡-Œpˆ„…ß;H2|Ä9ä–P, Šo A.}fÓ¤\Å \l?ºK© Œ6ço×olšç›÷™±.Ÿ¤ìñ.¥ªÉ•¿lP|û·å#ó%ëÆï.$ÚGFá÷ÍIs¦_Ey=Î{mjnØIr—V­:³…T ¸‘ ª Œ‘òŒw€35/I}isbÚ‚%›µÜÖê-‰–9nUbÏ¿£Ï… §îüÜÌñ_…§¿Óuv´›Ì¸¹–k¨ Øçkj#ÜN'vãô÷§p,IáË鮯§>¥luXš3 ‰fËTY”ŒÈYŽ.%ä8çgÑ[øBT·¼‚ãQIS‚x5±BË$“È Ysån;·äéÎK€ý/Â)cwktŸÁr'1éÚrÛFàC,`¹˜·ï‰Éb0 $ôÔ€( Š)@,@PI<;ÐeíØ¹Lä·‘Œ_¹?=Û÷Ž3Ùñ?Lp?ÚÊñ;ùž Õ?|%Ú…sâ%ÆؽPtÏr ç94#›—âÞ¤³9†Â×…elà žôÂÜÕÿçÚ?ûüÿãNÀð·5ùöþÿ?øÑÿ sWÿŸhÿïóÿÿ…¹«ÿÏ´÷ùÿÆø[š¿üûGÿŸüh°ü-Í_þ}£ÿ¿Ïþ4ÂÜÕÿçÚ?ûüÿãE€?ánjÿóíýþñ£þæ¯ÿ>Ñÿßçÿ,ÿ sWÿŸhÿïóÿð·5ùöþÿ?øÑ`ø[š¿üûGÿŸühÿ…¹«ÿÏ´÷ùÿÆ‹ÂÜÕÿçÚ?ûüÿãGü-Í_þ}£ÿ¿Ïþ4Xþæ¯ÿ>Ñÿßçÿ?ánjÿóíýþñ¢Àð·5ùöþÿ?øÑÿ sWÿŸhÿïóÿÿ…¹«ÿÏ´÷ùÿÆø[š¿üûGÿŸüh°ü-Í_þ}£ÿ¿Ïþ4ÂÜÕÿçÚ?ûüÿãE€?ánjÿóíýþñ£þæ¯ÿ>Ñÿßçÿ,ÿ sWÿŸhÿïóÿð·5ùöþÿ?øÑ`ø[š¿üûGÿŸühÿ…¹«ÿÏ´÷ùÿÆ‹ÂÜÕÿçÚ?ûüÿãGü-Í_þ}£ÿ¿Ïþ4Xþæ¯ÿ>Ñÿßçÿ?ánjÿóíýþñ¢Àð·5ùöþÿ?øÑÿ sWÿŸhÿïóÿÿ…¹«ÿÏ´÷ùÿÆø[š¿üûGÿŸüh°ü-Í_þ}£ÿ¿Ïþ4ÂÜÕÿçÚ?ûüÿãE€?ánjÿóíýþñ£þæ¯ÿ>Ñÿßçÿ,ÿ sWÿŸhÿïóÿð·5ùöþÿ?øÑ`#ÿ…¹ªy¹û[±Þkç•'ü-Í_þ}£ÿ¿Ïþ4Xþæ¯ÿ>Ñÿßçÿ?ánjÿóíýþñ¢Àð·5ùöþÿ?øÑÿ sWÿŸhÿïóÿÿ…¹«ÿÏ´÷ùÿÆø[š¿üûGÿŸüh°ü-Í_þ}£ÿ¿Ïþ4ÂÜÕÿçÚ?ûüÿãE€>.jƒ;l¢\œœJüŸZ“þæ¯ÿ>Ñÿßçÿ,ÿ sWÿŸhÿïóÿð·5ùöþÿ?øÑ`ø[š¿üûGÿŸühÿ…¹«ÿÏ´÷ùÿÆ‹ÂÜÕÿçÚ?ûüÿãGü-Í_þ}£ÿ¿Ïþ4Xþæ¯ÿ>Ñÿßçÿ?ánjÿóíýþñ¢Àð·5ùöþÿ?øÑÿ sWÿŸhÿïóÿÿ…¹«ÿÏ´÷ùÿÆø[š¿üûGÿŸüh°ü-Í_þ}£ÿ¿Ïþ4ÂÜÕÿçÚ?ûüÿãE€?ánjÿóíýþñ¨Ûâî¬À†³ˆƒÁWæ‹ÏøZ—ÿô¶ÿ¾Úªjÿîõm2æÆk&‘ÎEÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/resolve-conflicts.jpg000066400000000000000000002775141203611042400326300ustar00rootroot00000000000000ÿØÿàJFIF,,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀÐ\"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ì|kãfð„º|I§Cr.£c–eM›U çcg;«•OH¥“C¶`½H˜qÿißQdÔü<ŒÁU£”# ‘sÔ1Yצae¤yÐ¥½¥²ª©“pÎöËdç¶zc¿$úXl59ÒR”nýIæÕÝ—OÆ·Úåt;f(2@œg®;ÅQÂñ“þ…è¿ïúÿñºá5»Kd–H& ì(6ôÈç†'ô®¯DÑ‹>épG§Ù½ûølıE¼†Ým˰idð‰!‰#£ ¹aèE]Çñæg9ËšÑfü/ ?è^‹þÿ¯ÿ¥ÿ…ß'ý ñßåÿãuœ¾ðåÌš!µÕ& ®[]%“nâ`t1FÎÜÃnÀæ«Oà&ÓUÔb{‡–ÇF´uK¯¶D»v¬e!‘™s•ÁL‚§$c”¨á¿—óôïÜŽzÍ¿ø]Òпýþ_þ7Kÿ ¶Oúâÿ¿ËÿÆë‰ñG†m´^è+¨¤vа+st­…V@à0EbO!r'œÒÿ€4}>÷â^™¦Ý=¶¥fYØ”Wòä+8áÕI€È#¨ëO‡åæåé~¢ö•/kGü.É?èýþ_þ7Gü.¹?èýþ_þ7\®ƒl¾/º¿mPC¾—¦Ü_”°´‚ÙæØä܉ÉØÁÀç5·wà} ÃB½Öå:ŒÖé§X_Ãl·Ž¿hfFF,†Á\‚uÆ;Ôºx»8ëêÁT¨õLÐÿ…Õ'ý"ÿ¿ËÿÆéátIÿ@¿ïòÿñºÚ´Ò"ðTK§XÜ\îoÚ[ý¢7;ÄÑ#ˆåÀùÔaŽ'!ñ5ÂÝË* õu·cF*Ø ¡n q¾Ùæ¸ÛO ø~ê-úmB]>ÓR·¹eŠêuÿ[m f؆ÎrPãi’1§‡jü¿˜Üª'¹£ÿ jOúÅÿÿÒÿÂÙ“þ€±ßÅÿãuY¼£é‘ÞÜë·P襌\o*<±!pë o$BíL ÍRð]•‹êþ Mö·0[i—2[ÜÝ[n@U—l¥b8ç'’9ªö4,Úæ.z—³f¿ü-‰?è ýü_þ7Gü-y?è ýü_þ7Sc«økÄ6úQ<òÁ¥Á3C“×&R‘HP ’Eã¹³ ø3G‡\Óî­ÊǨOauk3}¢=ë·VŠ>A_î‘ЃÅK§A'xíæû\®jfQÿ…­'ý¢ÿ¿‹ÿÆéájÉÿ@h¿ïµÿãu“½Ï¾Ï§ýªÇûK]ŽËÌpHB¯˜œ¿ËÇÞúæ{/hú†¢‘Ç-ô0¦­q¦Ê­*;>șéØò¸ ƒ×­•{Çñbç¨öbÂÔ“þ€ñßkÿÆéáiÉÿ@x¿ïµÿâ+?Lðç‡ïtÛ[ÅmNXîuX´Ô&Hâ#tjYÊíâ-ž˜ç5O[ð垟¡Í{m$þm¦¦úlÂF %*¹ól”îê9ãšTpíÚߘ¹êZ÷7áiIÿ@x¿ïµÿâ(ÿ…£'ý"ÿ¾×ÿˆ¯<áZýRoÅ‘í§Üô/øZÐ"/ûíøŠ_øYòÐ"/ûíøŠóáJ)}RoҶŸsÐágIÿ@ˆ¿ïµÿâ)áfÉÿ@˜¿ïµÿâ+ÏÅ8QõJ=¿Ú}ÎÿþdŸô ‹þú_þ"—þ\Ÿô ‹þú_þ"¸J(ú¥ß‹m>ç{ÿ *OúEÿ}/ÿKÿ &OúEÿ}/ÿ\¥}RoҶŸs¼ÿ…‘'ý¢ÿ¾—ÿˆ¥ÿ…'ý¢ÿ¾—ÿˆ®–—ÕhöüÃÛO¹ÝÂÆ“þqßKÿÄRÿÂÅ“þqßKÿÄW )EU£Ûóm>çsÿ OúÅù¯ÿKÿ OúEù¯ÿ\8§ >«G·æÚ}ÎßþŸô ‹ó_þ"—þ Ÿô ‹ó_þ"¸‘J(ú­.ߘ{i÷;_øXÐ6/ÍøŠ_øOäÿ l_šÿñÅŠQGÕivüÃÛO¹ÚÂ}'ýbü×ÿˆ¥ÿ„öOúÅù¯ÿ\`§ _U¥Ûóm>çeÿ äŸô‹ó_þ"øNäÿ t_øïÿ\p§ >«K·æÚ}ÎÃþ©?èþ;ÿÄRÿÂs'ýâÿÇøŠãÅ8QõZ]¿0öÓîuÿðœÉÿ@ø¿ñßþ"—þy?èþ;ÿÄW")ªÒíù‡¶Ÿs¬ÿ„ÚOùð‹ÿÿâ)á5“þ|"ÿÇøšäÅ8QõZ]¿0öÓîuðšIÿ>ã¿üM/ü&rÏ„_øïÿ\¨¥¾«K·æÚ}Ϋþ)?çÆ/Éøš_øLdÿŸ¿%ÿâk–áGÕivüÃÛO¹ÔÂa'üøÅù/ÿGü%òÏ”_’ÿñ5Ì p£ê´»~aí§Üé¿á.“þ|¢ü—ÿ‰¥ÿ„ºOùò‹ò_þ&¹¡J(ú­.ߘ{i÷:_øKdÿŸ(¿%ÿâhÿ„²Oùó‹ò_þ&¹±N}Z—oÌ=´ûü%rÏœ_÷Êÿñ4¿ð•Iÿ>qß+ÿÄ×:)EV¥Ûóo>çEÿ LŸóéýò¿üM/ü%Ϥ_÷Êÿñ5Ï p¥õj]¿0öÓîtð“Éÿ>‘ß+ÿÄÑÿ 4Ÿóëýò¿üM` p£êÔ»~böõ;›ßð’Éÿ>±ß+ÿÄÒÿÂI'üúÅÿ|¯ÿXBœ(úµ.ߘ{zÍÏøHäÿŸh¿ï•ÿâiá"“þ}¢ÿ¾ÿ‰¬:p£êÔ»~aíêw6¿á!“þ}¢ÿ¾ÿ‰¥ÿ„‚Oùö‹þø_þ&±E8Rúµ.ߘý¼û›?Ûòϼ_÷Âÿñ4¿ÛÒϼ_÷Âÿñ5Œ)«Ríù‡·ŸscûvOù÷‹þø_þ&íÉ?ç„_÷Âÿñ5’)EV¥Ûó·©ÜÖþÛ“þxEÿ|/ÿKýµ'üð‹þø_þ&²…8Qõj]¿0öõ;šŸÛ2Ï¿ïÚÿñ4¿ÛÏ¿ïÚÿñ5–)«Òíù‡·©ÜÓþדþxÅÿ~×ü)µ¤ÿž1ßµÿ Í¢«Òíù‡·©ÜÑþÕ“þyEÿ~×ü)µ$ÿžQßµÿ ÏáGÕévüÃÛÔî_þÓ“þyEÿ~×ü)´¤ÿžqßµÿ ¢)E/«ÓìÞ§sN‹‰Õ™"ƒ €K,k×ê=IºëþyÚþqUk_øò›þº'òjÌ´ñ&…t–¶zÖspùÙ7HîØ8äð ü+ޝ,&â£ùÿ™ÕOšQM¿ÈÖŽòInæ¶AjÓ@¨ÒåaCîÛÏL­Ç^=ÅMºëþyÚþqW ®ÿÈ/Çÿö ÿDÏY$øcàû j÷–ºG—qoe4±?Úf;YPp_‘Þ³æòþæ_+ïù‘é ¨<š„–(-šæ4YFB©ÝŒœ`}ÓÆ˜«®¿ç¯çsº?ü×ý{Eÿ¢å®_Åz–¯gâ„ð­ÅåÝÙ¶SµXþÑ¢±«:…˜Œâ!àdŽ2jN)/w_óM·¯äz Ö¢ÖrAÿeWÊDª#bÄ)cÀ°<ôüÅx÷Ä©^_È\ç  1Øv®¾ ,e}6þkûF3î§™¥’_Ý6K3s»9È㌠`q¿¿än—þ¹'ò¡ÙÅ4­¿è ÷i³­ø¡áÝ[]ºÒLµy„8¤¨…7$`¸CùW|ã!k²éÛa„m„n„´kÔÞfNI$ç¹í^çsþµëšè"¹'ñnßO¤gH‹É¹Ž \ê~TòoD|¤^YÝ÷ðîH=+Jx©Â*)-?®årÙÞç–7ï9›O’GóM¿Vî¼+ñú{yï ýÄÖ; &Ô•Ú&È9R_å9‘è+Ò4Ï[ÝC<×<ƒ$bÞ;8%ÝÞKmUÞTq¸ª•yé!š+ˆ#ž XdPé"0ee# ‚:‚*Ö:¢è¿¯™2¤¤îÙâ—^ø}=¼÷fþâkfß“j*íd©/òœÈôÛo|@³¾–úÖ;È.æÏ›qú,’däî`ù9#'=ë×|A«ÿaèÒ_ì…öÉ¿›ÊŒo‘Ss>Õ²NªÚø–§ÅuxmœÎÍä.•$—âD\a²0pàœ`9 Qõê–Ù_2}„{³É®ü ãmBéî¯l湸|o–kÈÝÛ$¾O›Ãÿ[OðiÏѰt‘.£VV ‚‚zô½Æ¢ý´¨.mó=å²Èík²äòíß ¡ÕÿHûÅŠ€[$ÖÓþЫµ—õóÕãÜñ™<=ñ"k¨.¥›Q’âßw“+êJ^=à ´ù™u¨fð—®~Õç¥ä¿kÙöŸ2ýÎÙ÷wåþlvÏJõ-[_þÊÖô«¶ßîÿ2ãÌÇ‘†åÁ-ºIQxÆ3“À8"ñ- ´i4nn Þ±I$h!•£.î«¶5;weˆgž ¥õêŸÊ¿¯˜ý„{³Ì¥ðÏÄ)Ü<ÆúF-ÀgÔ‘*€«'/÷€Ô)G†~ ‰áŸ7Þl #Å'ö‚îœåÊü$çsÍz}ÿˆôû-.Kï= †ž$Þ+I È]I HÊ“œ»Ær‘|A¦¶§ž²Ìg’F…[Iå3ª³2‰vì,6F삤uQõêŸÊ¿¯˜{÷g–Ÿ |Ag»v7ů%É:‚æuhóüÃŽ{Soü)ãÍWËþÑK»Ï/;>Ñ|’lÎ3ÎqœʽçÅö5¦È¯ιò$ŒÚL³F r:¸ˆ¦öRc# cïsòšÐ‹[ÓæÔ ŠLæmÌŠÆ»®w"ÈFÆa†Ê‚HÚÙ)Áõê—õóaìòøE|wý™ý›²ïìóëöäòºîû›ñמy§Má_Ü}§ÏK¹~׳íí¿w~_æÇlô¯e¬-__–ÃTƒO‚+4Ê¥þôÛ,ÌÌT$XGÞÀ˜qÉ×wתv_×Ì=„{³ÍWÂ5TµAÀ[F/lâb'$§Ïòœ€xïS·‡<|èÈÆù•–D`oÔ‚²ÈÏÑ'Ôõ¯P‹[ÓæÔ ŠLæmÌŠÆ»®w"ÈFÆa†Ê‚HÚÙ)ÅVñfjÓ\M4‚%Š{Yc•˜«2(c»c…ãæ*TdñGתv_×Ì=„{³†¼Ó<{u ܯ`ÐZ¥œ+ev±ˆá^‰Ÿ0±ç’yü*‹x_ÇsqrévÓÜFbžS|¥¥B*Ç~X`ƒè+ÐuÛÙA)µY¦xn`ŠV’¼xiÒ' ê»]Æâ6©'p#ZÖ…¶¥KlÎB¶ÇI#hÝá‘€e8 òA¡–6kì¯ëæÂ=Ùå–>ñæ™ C`×¶±3o)ú¢–ÀÀ~¼Ê©Ââ_úÿäxÿøªöªål|f¢ÎÊó[·¶Óm¯­î Räʪ…¢\HJ.Ùãé‘÷‰ ZÇTè—õó«Ç¹ÆXxgÆÚ_™ýž·Vžf7ýžõcÝŒã8qœdþu"xÇI Ä*׫Ë3΂ýBÊÍÃþb{ç­z0ñšn¢·2̯&Á–¶‘QÀ*ŽÅvÆçrá†ù—˜f¬-ÒÞÝ&–W@Í&í°LD(²2n—(<¡”l— Vä…&¯TìƒØG»9-.ÏÇÚf­£åKw$r|»»Á"3˜Ì{ˆßÉ p°íU±|{ö϶y×ÿjòü¯;û@oÙœíÝ¿8Ï8®ßRñU•Œs4QÜܘgŠ) vò”ù¦H›k„*ì¥ÏȤ¶TŒ6¡•g‚98Y0…3Ê>ÄdTýr{ò öîÏ,¶Ðñ•ê:]­Ôèò Ye¼V áv†9n»@ôâ§}Ç2ÜCq$×Ï4;¼©üpÁÚwäduÅz þ¡ö ¬U¢ÝÍÈå-QŠ“Çw €q’ã¾Å—ÆP.š.âŠýåÐqç’#†$w6Õc±€„äÄèFì®ãë³ìƒØG»9¼3âØ!HbŠxâŽQ:"]( à8¸o~´²øgÅ“ÂðÍòFò™ÝéHiÈÝË{õ®ö?iO4Fåâ4¨ÒÏ‘DZ2ÛÀ‘Ô#Úäàž@MR‡ÅÖ¯ª^Å"\Çm í½Œé<’;M¸,ew8 ?*žŒs€p}v§d/açÿgˆ?èÿ‘£ÿâ©Gƒ5ÿùðÿÈÑÿñUèÉâ*EÊÝgNAS,†$c!¼Åe ò¤Ø«¶·p^ÂÒÛ¾ôY$ˆœó#”aÏ£)…?¯Ô쿯˜}^–ëÿóáÿ‘£ÿâ©á׿çÃÿ#GÿÅW¥k‡öN‰©y^oÙ-¤ŸËÝ·~Å-Œàã8ëŠÌÿ„ÏE}I-­µ ;¨¾Í$òKm8”¡W6¦Ig2`É#húõNËúù‡Õàq_ð‡kßóáÿ‘“ÿŠ¥׿çÇÿ#'ÿ]…Nj졿¶Ë¸³x%2†¶—ÏID"'—àŸ½S²þ¾aõxw<Ûþ wþ|ò2ñTïøDußùñÿÈ©ÿÅW¨ÑG×êv_×Ì>­ËÇ„uÏùñÿÈ©ÿÅRÿÂ%®ÏþEOñ¯O¢¯Ô쿯˜}Z˜ÿÂ%®Ï—þEOñ¥ÿ„O[ÿŸ/üŠŸã^›E/¯T쿯˜}Z™ kóåÿ‘SüiáÖ¿çËÿ"§ø×¥ÑGתv_×Ì>­Í¿áÖ¿çËÿ"§øÒ k?óçÿ‘SükÒ(£ëÕ;/ëæVçð‹ë?óçÿ‘Süißð‹ëóçÿ‘SükÑh£ëÕ; ú´;Ö?çÏÿ"§øÒÿÂ3¬ÏŸþDOñ¯C¢¯TìƒêÐ<ôxgWÿŸOüˆŸãKÿÖ¯ÿ>Ÿù?ƽŠ>½S²«@à?áÕ¿çÓÿ"'øÒ êßóéÿ‘ük¾¢®ÔìƒêÐ8/øG5oùõÿÈ‹þ4£Ãº¯üúÿäEÿï(£ëµ; ú´þíWþ}ò"ÿ;þíSþ}ò"ÿw4QõÚ}ZßùÆ»z)}v§dVÄÿ`jóíÿ‘üiÃAÔ¿çÛÿ_ñ®ÒŠ>»S²«@ã…©Ï·þ>¿ãKý‡©Ï·þ>¿ã]•}v§dVÇÿaê?óïÿ¯øÒQÿŸü}ƺú(úíNÈ>­‘þÅÔ?çßÿ_ñ¥.¡ÿ>ÿøúÿu´QõÚ}Z'ýÿ>ÿøúÿ(Ñïÿç‡þ>¿ã]]}v§dVÊÿcßÿÏü}Æý‘}ÿ£döÀí-å4ˆ߯9XàãWy«.}U¸ÖSOæƒG†ææè]*ªJxå åÈ$'pyÛ‰pïîÒŠ.gà™loúÚãKµºV‰á[=0ÃdY—ŒHK’³°á—W®0nØxFÞÃ^}EÇynÅŠý¤¼…‹˜“•˶U8 î’Š.YÞ™«A5Š^ÛC§\ÀÐ\!¶g”«cù€)Úxʶ<ô­z(É?ƒ!·º¾»„B Ÿh•$´´/ËÊ \1ÇÛn‘„ˆ »;Þº‹Ä {>”šbÄÉ([{(-âr‘Ï1ćqûFsŒbP@#“ƒ;?ìwz”þnÿ¶Ü‰öíÆÌExëÏú¼çޏíWh a\F¡%¾“c£ÃáË9‘­âüÅj¢f·u“.#˜±,PŽø/ŸZíè  +K>¡3­â-•ÍÜ7³Âa&C,^^ݯ» ¿¹ ©?{‘‘·? ßô»¸¬V{†˜Ê—–ItðÆ÷Ê¢2NÔ ˆbC©*¼>nÞŠ.#ŸÝ.,Òþf×&ò6ÄÈ“ùâpY·á“~~Pªv7ddîÂ%X#º<Á@vD*¬Øä€IÀÏlŸ©§Ñ@ÌX KC{fµ{µóà‘­ÑQŒª’£•ò®ROBzô8¶:MÑxíìtÛ IÍå’ÝEÅ#YlSn*D¬Àq´çæ+µcE9X<*iºÍ´úŠ<Ú¥¤–ï"[•Tg–âBÁKž3qŒgøzóÇUE Èñ,3\h²Coisq;2˜¿–ZïI1#¢°WU8Ï=Æk˜˜/m-ü=ªXÁyaýŸ»ÛºÛEä?é˜lŽŒg÷\rÇ=õ\G7w᯴´Óç»qÚï.‘b· :•' úó½9áá½NmLê·­›jù_g1زĻu;ÐÊKd\?F\§žAéè a|c$ˆ×ö€ñÎ.A+ÊÒà •U*'Œ’TÚÒtÿìÍ2S/(ÜóM·o›+1i;w;3`p3Å]¢€3õë6Ô|;©Ø¦ý×6’Â6[,„p ž{=ÇZçµ]:_Û¥Þ‹}i A${®–ÚX‹yÊ»Õf%—tJÈcÊõ®ÆŠâ/<s­´šsXÇuèÞUµŠÁÍų—*Ûä‚Å›'p£§Ò´élEÜ·7 =ÕÜþ|Ïf4Ü#T³6ƽXó“Æp4( Š( aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPE,p3®öeHúncü»šŠŠœÉpïÿjF<þýi<èÿçÚ/Í¿øªCEMçGÿ>Ñ~mÿÅQçGÿ>Ñ~mÿÅP2*%Ö,Ý¥£²°È"Þb¥þÖµÿŸ9?ðz,"J*?ík_ùó“ÿç£ûZ×þ|äÿÀyè°QQÿkZÿÏœŸø=ÚÖ¿óç'þÏE€’ŠX/a¹.#³ÆÅÜKÇ* d¤QRùÑÿÏ´_›ñT 7üûEù·ÿGüûEù·ÿ@Èh©¼èÿçÚ/Í¿øª<èÿçÚ/Í¿øª†Š›Îþ}¢üÛÿŠ£Îþ}¢üÛÿŠ h©¼èÿçÚ/Í¿øª<èÿçÚ/Í¿øª†¼oâ7üÒÿ×$þUí^tóíæßüUx¯Äoù¥ÿ®Iü©Çq3Ü+xIAGoÝVN™ÿ «?úàŸú­oùzÿ·ý¥Y:gü‚¬ÿë‚è"SR½’íâM6C» ”,„gˆñúÕ©î Ù…uuU…•÷H?#åÇ;8çÎâMŸ\Û½ƒEçÅæ¤ÒîMãpýãc"™­jvFØÅí¹ŸÌBQ¼æEÏËœô¨ÄIJöz1RRR|Ú¢V‡àíú…õö™bÏxÙr:F¼|ˆ?…r3ߨ(Q·÷6ðdY\©eÆF›Œ‚;zU»+.4Ø%{«‘$±$È$g—f³ndò®¬[þ›Ÿýõ›<ë ³Ü¦õ]ÕaùØ[ 7˜1“÷xô8­£ ÆæR•¥cR?»Ù÷ÛÇ1/Œ‚Û²8Ž*Wl)çœqUâu:”È Kx”ØfJ»ÄvòŸ0¯''œTN6Š‹¼nXº²H³ä<¬T1a$gðB㱪`ƒÐƒô« ufÌX³î9ù¼‘žzó¶¢–u¹¸–T9V#¶:)J6dWd®ªH?dqÇáO¨ï?ä ª×£ÿ1RTŒÀ—]»TÚeâC-¾/Ý4’;r›X–â9:têx4ýbÞëÊ·–xÖø ßÖ@Ï·,p±Î@É^‡²®íî4UõK|ZŠÌZ¤›sæ>£QÂÍ÷sµ½A6tËMVMFkéìѶ!•ÎÆrÎpv 9#- ÅJjvfýÉ¡Šâ ž4–£ÆêYHÁ ŠÈðç…4 ZÏ“må ä2HìÛ¹;Wqçjƒ€?I$†ågTþ̆=› Ò¶>pêHqÀëÜTœz¶ŠÝÉvf‚UvFv }yüÅSñ†6§io,Gx‚‘Œ’ã©ÁsQx‡ÅÜhº_˜-Ö5YŒG÷’9…ó~+ž¥îõ·c†µG;»v:;;¤½³Šá89Ý=üGáSÕ"ͬ4¨-ä9ÏìÌKøEP×<¡ø‹P±¾ÔìRiìÛ(OIŸ‘Çñ.Np{ûu¶§dqMîlÜN–ÖÒÜI‘!vÇ 5“º…߇†½ot¦%fó! »Tüò}ù¯,I4Oª7R¬§¡‚+”Õ´Û;C[G¸S£[ÉæmÓ2²™~_›¡$ß9>µ·§m{ÙÞ(®RDHÚpá,Hù¹ qLœu4¯RRJö4”"£t&eD.ìTd’pª>«¨EÕ´vÐZÈHˆ\ÞMé´nž0*ÕÜêÎ{rÛD±²n²1\¬³X=†›§ëŸo¶¸Ó·.Øy[„'<LgüäyÕæâ×c¦†çÌ™P:ÈYK:ª¸1ì¸;”qòãžsž1ÒÕcèóGóH’Eû˜dûʃ¦ã×=¹ç}íGN³Õ´ùì/íÒâÖuÛ$oÐèAäÈ J”d£i; |ëšÖ-S.É]T ~Èã³ü?áý;Ã:DZf™—rÌyy»±îÇÈ _¼ÿ.©ÿ^üÅh·ìÊŠYˆU$“€s~ ×/4ûËKhmæA:o …Éçç8÷23ŠÛÔƒ*ð"³¿ûUFI;OUk[NÕ‚µÆ£h‘!Ý1…›ýã¼6=€Áù8Ëšº6§IÍhR±ñ<3ËR˜³!’ÇŒíÇŸryœtÎYxLû|76NóAoÞÅJ3v ´‡œô;ã¤UweH×s± ã“E:¼ðsz#Ó©ËQ¦ü¿¤C-ÄqH‘oS3=À$àTen!¸E‘سHÁ£Ê¨Þàdr8É<Ó¯i²iVð"Ê×MtûJÅÈ'é·¿Lzt’΂Ö%™Ì“ìQ$„’Y€ç“PÔç%$ôê»_ºåQÔ±Lb[VÕI$ŸµcŸ÷ŸQÿÌWUÿ¯³ÿ %t˜”gÖ#·ÕâÓš ².åÛÉn˜ÀïÀ“ß÷dr¹²×‘Á<Ð^<6óFÀiFpT0þxã# òi$µ/#¾Kh¥–2IFQód¡ÈÏÇ–˜'û¸ã¨°ž ¼¹–ag 2Å„ß$å ;A?.ÃŒg<äå¯ZQšŒÿ3ZpºmЬ®¡”†R29S£ŽK›o<Â2Ìßv5õ?Ðwö‘ º:FÞiÝÞFÇ bØÏ|gþTø®%Óå’XÁxd;¦@2Àà ËëÀñÇ<6“”Õ>kkÔI.kErÿgG¸·¹‰¶!kiP㜒0õÍYªÂçUÔ4à—2ÛÆ—bXÖ݃¨aÈ¿žãð«4¨J£^ú ¨§ QÔ€$ðïXV¾ÐìüQqâ(,Qu׿…Xçs¨ìÌ ïvÎè$0`pT‚>¢·3&ŽÖyeXÄR&ìüÏ8'“Ú¢edrŽ¥YN=ªí ˹”®yœôúÔRJóIæHrØÇÐQ  ¢ ¼³†þÙ r‡¡Túzœ,1¢Ço C ©ƒÜ÷>¤õ c/IK€HêÜž‰˜¤208!I•%÷ü‚›þ¾íÿô:eáÛcp}#cúQkè!e¸µ‹X‡Lin¼éWr‘åãsÐüÙýÙÀÆ[’¹ågš5‹aI'9}¤IÑО2£=*µýÂ^^ý]Yÿg\@ÑÍ!¹GÚYdÚîT¹œÆÀ3ÕVÒÒÒÖÎÚæÞP· ÊèJä#Ü œ·Þ9fêÄœ“¼éÆÚ#(·¥Éê?,Éa©^}¢Dk=Û#P»[«üÙõ8àŽ)eO6'{&å+¹Ïp}jgµµ²žÊxÛÌ›!£Ìn26å ô#?/sŒ1óqs”b¬ŽºQMêY¦»¬hYŽNI=€ϵEkAf%›vÓ#8O`[’8üóÀè$’(æŒÇ*+¡ê¬2á] ÉÆö³3²L±ýŸsöo´oý÷_³q¾›¿¿øííþÕ@޲ e99 ÷v>Õ™æÛÿdÿfî‹Íû_üzänÙçîû¾›yéÓž•§QÃŽ$TAÑT`¹pµg6ïÓó5«‡QEÚbQEQEQEQEQEQNŽ6•Â(É?¥Io ¹/!ÛrÇר{Óe”Êù<(áTtŸ<ˆ†õjy?ß>µ ©©^Icb÷@g2*Æ3–,Á{{ö­Õ=Na¢JÒ$An %äû«ûÕäò8Z³¸=Š–Ú­Üð\I-‰·™&Âqœ¶bÇLžGAÈÒ†@òLŠÞbG#"ȰHç r1Î8ÏCØKi«iÍq|ÒøžÎ2gò¥…U‡–œ€Û·^ÕOLhšÑ¼‰HDó,n¸ÚÊ$`ÇÀ8ô¥Q^¢”t]…M¾[KVhé,´•ƒíKes± 6ÏrO¹ãÛ)ÌCâÍF;¥’çxˆ­®øÆ›(U.ÇvÖÎwcêh­y#¼“À‘¥€?i6ÈT‚G°xçþ^ß/o}>•ºãR´û:V‚'·’2Ò«ƒ¸ *x²ztñ„ã9ÍFªÊPq½Îæúþêi6QÊVÚx¦ihä¨çö# û¸ÂݳÖ,ï¯îì 3­Åžß5%¶’,Ì ©uPÊLM‚¼|½°6PÐ`Óµa×ã´Xî§RKo”䃴…û§¦;ôþ -WMÕu™u·Ñ&†Öîí&û,—%"iܲ+–‡‡’?¾ÝL*¤o;+.ÁÕîw}=±øcùz{tíéíÃËÓÛ§l|ž}aámU´›Ky£xRóαԢ¹ò™ÅžI"S勈÷ö<ó²ò@IãÑõañ Q¬fˆý¦AusµH$¶H"€ Ùòr­ò†F#¤v—E ÿ¦}?àJ?§§nØÚ¹µ¥qÄRúgÓþ£úzví«›RÆ‚Š( aEPEPYž"ÔJðõõüwvv¯{Ö[ÅfˆÁ‚ÜôÉɡӢ€9-ÅZާâì'Ó|´’É.fˆÞé΂s§UƼƒ¨â>#ÈÝ/ýrOå^É^7ñþFéë’*qÜLö‹ÄÞÛK:ƒQÊŸº;Žj£HbH£DPª3Еbçýjÿ×4ÿÐE2ÂÈê#É$‘ZDû1ÃJÃù»/n9Îyån(«cáøíÍijÉ!Ú2òßJƒr’åÇu?•M£ÜD%…¦’6èé{)ñNÊö¸kk™´V·ö—ýËŸü ›ÿŠ£ûKþåÏþMÿÅQÊ1¥†)ã1ÍH‡ªº‚àj¿öVÿ>¿÷åºì /û—?ø7ÿGö—ýËŸü ›ÿŠªW[1húpZÛÛnû=¼QnûÞZÏ×)õýk_ûKþåÏþMÿÅQý¥ÿrçÿ&ÿâ©4Øûû‹ùS€` ÖþÀÒÿ¹sÿ“ñT`iܹÿÀÉ¿øªVÌYàK˜Z)7ùmÃr»‡¡ÁÕ%k`iܹÿÀÉ¿øª?°4¿î\ÿàdßüU¡s£GdfEb‡r3´àŒN ‰§V·ö—ýËŸü ›ÿŠª×~³™?Ñî¯mœ>[‡pOÈbOnÄu<ÑÊ)QU.´™4ïšé¦–ßþ{Ã<ß/ù×qÚ:ó’8ç¢Â\éæOþ*•€µEUþχû÷?ø'ÿGö|?ß¹ÿÀ™?øªZ¢ªÿgÃýûŸü “ÿŠ£û>ïÜÿàLŸüUZ¦ÉMG*+£ a ¯ýŸ÷îð&Oþ*ìø¿sÿ2ñTmze„2,‘XÛ#¯!–%~8«UWû>ïÜÿàLŸüUAoiÏt­%ÉÊÒdàlSýïRi$–Ãr”·f5Óz,꣕?˜æ©ÜAeiOss,1.7I%㪌œrKzÕí/ÐnüŸþ.™&ÔQ¤1$QŒ"(UèJuQ¸‚ÊÒžææXb\n’KÇU8ä–õª?Ú^ÿ Üø3?ü]nQU#ym®ÞWiR@|¹r*qî>‡Ó%¹’öYdx ¶œ4„uç°íÇ9ÏLrvŠÏ[´"`š™ˆ®àãíq×9ô©VÆÝÔ2ËpÊFARGýõR¥³Mn[¢ªÿgÃýûŸü “ÿŠ£û>ïÜÿàLŸüUP¨ª¿Ùðÿ~çÿdÿâ¨þχû÷?ø'ÿ@ª9àK˜Z)7ùmÃr»‡¡ÁÕö|?ß¹ÿÀ™?øª?³áþýÏþÉÿÅP"ÕJ[Khbi[€ª2Iº“ÿН%×üi«M},zMÄÖ–ªØVóK³c<ä“ÁÏoA[Q¡*ÎÑ&uÙìôWÁâ\H5ÙA=ä•~mO¸ñ‹m¦1>¹+0“¨ëÈÏÞ\ƒ]Ùõ;¯ëäeõ˜óExü%>*ÿ Í×éþÂSâ¯ú Ý~ŸáGö}NëúùÖ"{õG ý›ÉvÞÌî\±À$’{ ð_øJ|UÿA›¯Óü(ÿ„§Å_ôºý?Âìú×õò¬G±ïÔW€ÿÂSâ¯ú Ý~ŸáGü%>*ÿ Í×éþgÔ}b'¿Q^ÿ OŠ¿è3uú…ð”ø«þƒ7_§øQýŸSºþ¾AõˆžýExü%>*ÿ Í×éþÂSâ¯ú Ý~ŸáGö}NëúùÖ"{õà?ð”ø«þƒ7_§øQÿ OŠ¿è3uú…Ùõ;¯ëäX‰ïÔW€ÿÂSâ¯ú Ý~ŸáZ:Žuël-Û5â€~ô®ŒIîJ‘ùRx ©if5ˆ‰íØ£OιOëÚN¼K˜.¹ýÃÝI“Žã殃û>ïÜÿàLŸüUqÊ..Ò6M5tO-ºÏ³Ì,B0p¢B äÁǽI´û~bªgÃýûŸü “ÿŠ£û>ïÜÿàLŸüU -í>ߘ¥Ø}WþúOû>ïÜÿàLŸüUÙðÿ~çÿdÿâ¨æÃê¿÷Уaõ_ûèU?ìø¿sÿ2ñTgÃýûŸü “ÿŠ  žYõ_ûèRùmê¿÷Ъ_Ùðÿ~çÿdÿâ¨þχû÷?ø'ÿ@|¦õOûìSz§ýö?Æ©gÃýûŸü “ÿŠ£û>ïÜÿàLŸüU]ò›Õ?ï±þ4¾Kz§ýö?ƨÿgÃýûŸü “ÿŠ£û>ïÜÿàLŸüU^ò[Õ?ïâÿKúÇÿüjö|?ß¹ÿÀ™?øª?³áþýÏþÉÿÅPï!ýcÿ¿‹þ4¾CúÇÿüj‡ö|?ß¹ÿÀ™?øª?³áþýÏþÉÿÅPÿ!ÿ½ýü_ñ£ìïýèÿïêÿPþχû÷?ø'ÿGö|?ß¹ÿÀ™?øª¿öwþô_÷õƳ?÷¢ÿ¿«þ5Cû>ïÜÿàLŸüUÙðÿ~çÿdÿâ¨Ð ³Iýè¿ïêÿf“ûÑßÕÿÏþχû÷?ø'ÿGö|?ß¹ÿÀ™?øª4D@«6x×ÙNãÃÖ‘æ]†8“b¤œ³}MgÿgÃýûŸü “ÿŠ£û>ïÜÿàLŸüUZ¢ªÿgÃýûŸü “ÿŠ£û>ïÜÿàLŸüU-QU³áþýÏþÉÿÅQýŸ÷îð&Oþ*€-QU³áþýÏþÉÿÅQýŸ÷îð&Oþ*€4m¤†ÒÖ+x–`‘ UÌ‹ž;ýÞ½?!è*®£c¦jÅ í¤’4u„Û™P=½‡¥AýŸ÷îð&Oþ*ìø¿sÿ2ñTÔšwLF”ÛÚÀA ‘ăjª:€£Ûåú~CÐTŸlOîÊ>Ž£ÿeú~CÐVOö|?ß¹ÿÀ™?øª?³áþýÏþÉÿÅQp5¾ØŸÝ”}GþËôü‡ £í‰ýÙGÑÔì¿OÈz Éþχû÷?ø'ÿGö|?ß¹ÿÀ™?øªWRK¥xÝB>XmåÆ ôzÿꪵWû>ïÜÿàLŸüUÙðÿ~çÿdÿâ¨ÕWû>ïÜÿàLŸüUÙðÿ~çÿdÿâ¨jŠ«ýŸ÷îð&Oþ*ìø¿sÿ2ñTjŠ«ýŸ÷îð&Oþ*ìø¿sÿ2ñTjŠÊº—H±”Ew© y î -û!#׺pi-§Ó¯$)¦êé$ê»±ßÇNT“ÆHô>âÕã¿än—þ¹'ò¯]µœÏoM’#uô#ÓØðG±ä_¿än—þ¹'ò§ÁžÕsþµëšè"¥ÐåÛ¦cþ›Íÿ£Z¢¹ÿZ¿õÍ?ôPiRí²#?òÞoýÔ 9ínM0émIâŸíW[ã[‚HÊîÌŠñ<`î9ÔŸR“Møoªßi÷E§·´¼ž)Î1åœ6Ô¶qW%Óí.- ´ÁÞ#$’cÌ*rå· ®8ùØcÐÓ¥±³ŸJŸL–6{K„’9Q¤b]_;²ÙÏ;9Ï5Ÿ+ö®} 9—³P2-üI§Ú_MæÞê0%lÛSµ{i昗ócTŽìªŠŽˆõ› v[ÒjйXo-&µwÃ24r.HÊ‘‚29èj·Ø->Ïäâlïó<ï´IçoÆÝÞníùÛòç?wåéÅ zZÛÚiVÖ’ù¶Ñ@‘Ã&àÛÐ( r89äVeݰÓXËÿB<²ùaî?Øöþ§K6Ë ¤6°.ÈaEŽ5É8P0O=KçûÒ¸ÁA®/þM[ìñãyÿ!¯²ý»÷W•öï+nÝûþçÉ™Ï?íWXðIhÅ­I?ñî0 ÿºIÆ?Ù>ø=QŽßI’ÜXì1«\}¬C)dc/›çnàŸÞsǺqHf‘ãi¯›O…4ËÉÑã¶[‰öHî¯,hùÊEåmE,K!b¾-»“ú~¦ºZ,÷ʲÃfÒÉ#˜Š_Å!Àf¦0ÊIV;+N éÏla¶t[uR!<žYòÀÌ›¶»(UÃ0,6¯?(Ä’xM{;AÑEg†Ý ¹’)nô`Å~UÈ'¨'$ 4"ׯm}iqym¦8µV¶Š%˜)’K……£R;@3çœ ïÉ Æ·¬iºÆ¥uuglÖÖš\7p¥ó°‰CÜ1ÅPg;9P3ŽFõ¿‡´«]6M>]–ÒyyQ#dDD!³•e¦ ‚ õæáý4ZÝ[´SJ—VßeœÍs$ŽñeÎÒÌÅ¿å«óœóì0¾¿çêi¦‹l]‹™ãž?3ýTQ¨a&q†Ü$·ùAÈó¿Ùjеÿ›ïúî?ôZS-´ÿ#S¾¿’_2[Ÿ-åÇ—/ ן¤lõùñÐ }¯ü|ß×qÿ¢Ò€yköÈ~t²É©${w+#‡R7:¨ê Gwm¨ßYÏisâ Aàž6ŠDòíÆåa‚2"ÈàÕÊ(¸5x–k[xœ¸W¾´RQÊ0â1Ã>àäV‰ü=e„õ™R}L²XÎÀ>§rêHByS!{ƒPÜ[ÁwAs sDØÝŠNyÞ¨ÿÂ=¢ÐOÿÀdÿ iØ,]ÇÍýw?ú-èÓÿãÙÿë¼ßú1¨ºÿ›úîô[ѧÿdzÿ×y¿ôcR;Ûò4ß [GrÈe–š$“ixÌg €yWÄS¾“¢øškò^Î d€ýàŒ GÞ$â¬[Z]ÛwWÓÚkxDÌöl\ Æ|Ê|ºx½µ¿ƒQ)p—ÙY•Æ ”Wï8sÞœ¹\b’Õ$äÛÜæõê1kz|§_iðJ 2LÖäÈÆêÖ0AV“ [#Œ†àƒ‚»ZƨÚmö•æ2Gg<ò,ó4Á‚IàTåp„“¹H!zŒŠµ{¤ØêOu™,òÛ{ ¿¼ŽNÇŸž(Ïü ÍYü=g;ÚÆQ>Çóܽ».ñ,’‡ ¸±?)K•Ç$¯ Q™§øÆK‰ü›½5í™'&c檢L]#`%Š7bd@„ÀÞî_xÜYé–úŠØùÖïÝH±™^E¶Ü|¹p‘0]è !Œ'†#Z/ éqA} Žæe¿€[܋ɦgŒw;£ç~„u©5_éºÎï¶Å1߆O&æH|Ôçå}Œ7¯-€Ùsc©É tQE)kò»ÿ®f¼^îÉ!šfØX“‚è ŽìG¨¯hÖ?äwÿ\Í`ØE{¥Þ‹«/ ?–ѲÍu {0çŠïÁIÅJÞG&'¡ÈøsQºðõü—ÚÈïÖWu•pNå›ðr½ÍhÃsmªx­u]~Ö'Þ-Égbíeçž6ƒCg$`d2ï_ÇyªÞýª÷ÈÞ#XÕaŒ 9å?7éUÿ²¿Ù®´”½æ¬Î~khŒÒôÛke¿‹NKˆæÃ àG±#,IF˜—ë8'hÜÆk–/)Ú>bC)=8áÛ§¯ÒˆÖò(c‰$Äqãjí`oàñÈýãäl—ϽÇÍÇ.ÞÒåÒíŒ$ó^<1Ís°)f9³ß^ãÂ{u{k s6n *IsŒÍ€FÖ`ÉþÐ'=«¯1ÜÀ¬%Yƒìû:mc1œ ãÇ9¦Kmq-ÂN[l‘ãË1¨@˜9Bà/9H&Ib,’!ʲðA¯Gðö¿öøÖÚï tí'ÿ^³²¿Ù id@ ŽAE:ô£UyŠWävTV=®¥<*ñE c\‘þðïõ•iAwouŸ&dr:¨<¯Ôuy3§(;Iñš’º&¢Š*J (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€!Ò´È5j^|—iåÙÛcì÷rÁœ¼ý|¶éß§ãF«¦A§x›Mò$»2Îç?h»–|aàéæ1Ç^Ý ŠëJÓ¯¥ÝØZÜHhyaW zdŽœš-t­:ÆS-¥…­¼…v—ŠBG¦@éÀ§},+ kÿ7ßõÜè´¯%øÿ#t¿õÉ?•zÕ¯ü|ß×qÿ¢Ò¼—â7üÒÿ×$þTÖàÏj¹ÿZ¿õÍ?ôYúü{?ýw›ÿF5h\ÿ­_úæŸú¬ý?þ=Ÿþ»Íÿ£¤ TQE (¢€ (¢€ (¢€ (¢€ *H#N±³í’ ÷«rièÒ³G2Ƈ]™ÇuÏ=(°ŠR°Úì¹ÎÖ+Ÿ\T¶Ð †peíò¹Îsî=(*ù±-œÔË»p}»F08<ž8ëÛùÐ  Ôãêi’Gñ”‘DnªÃ Õ«k˜­âyXª¢¯ àòqÄâ£3[1upž|¨ÒÄRRÙàžyç¡9è›H.Rþ̰ÿŸ+oûô¿áMM?O’¥6ûdd‰s†PGoz¹QÛÈ>Ëþ½!ÿÑkH³,?çÊÛþý/øQý™aÿ>Vß÷éœM¢LÏ{u ¥¸ÞÏ<¢0< g–?‰¦´º<ª_L×mn猦b‚HXì.ªI3ŽG>õ·²|·¹—µ\Ö+ɦÃ%ô¶ö¶(dGbÒ[†èT`G÷ªFÐvIlt…y8E6œ·œ Üð{Q›PÿÈzÓÞ GêŸç¿Ðô¢öY¶¶ÁOö„·9I<À¡Ô#ò WÊ€HÛ‚rÙËn Ü•jºi;\è„9™ðä‡&—Ïý9“éþ׿òõyÑìâŠ!-¥£ÈÊK…Bçquìz·¦\\=åŵÍÂ<±-ðíȈӎ}$ûáæ¼91ç*Üç?ÆÞçùš¸MN<ÈR+³3?³,?çÊÛþý/øQý™aÿ>Vß÷é°|O⻯ ºÉ&”&³aòÜ  d†N^üÇ~Õ/u4^Ýé¦Ád9†7—s²y†Ñ·=‡\uÇJÑÅ¥vI,¶vÖ÷vO ¼1±˜‚Q8òßÒ³ã´K‹“Åm½Þwg–äâLã×ô­k¯øù±ÿ®çÿE½R±ÿŠÿÛÏþTÛIµÛõDM]¥ýlØ¿ìØàÿeGö/û6øÿÙVÌ*Žó„ÊT&{®3»'äö©’©Ž`èbr«±Ö@U¶’p\ ”þ(ö•-~É ØÉþÅÿfÃÿÿû*?±Ù°ÿÀ?þÊ´nÚé-]¬á†k‰4¦4<ó– ÄqžÇúÖ^Ÿâ[K»*yÒkwÔ-¡sÂvì “€ ’8äQígÜ~Î#ÿ±Ù°ÿÀ?þÊì_öl?ðÿ²©ãÖôù`¶š)žE¹´kØBBìÒB¡ ` g?¼O—9àPºÍ´Ú]Íý´w3‹uböë,û•wlòØ F î¡k>áìâAý‹þ͇þÿöTbÿ³aÿ€ý•fEã"¶¸ž+‹k‹¿²‰4‹·¾*ÞT’ªDFÅá²p:öþ!Ò®®¾ÍÖù~ÒÖ˜¶Ê²Œ'8ôÚz2äö³î/g?ì_öl?ðÿ²«c»ÿŸ›ü?ü]F¾ Ó^â8"–i¥y-°ÛI&²4d¾Õ;z8 ØkH Ð|Ki®ØØJ©4vßhK‹€{¶³(  Ê€0à率­QlÁÓƒè[ûßüüÛÿà9ÿâèûßüüÛÿà9ÿâ꥿‹4K¨äx/|ÁqÊáb|"£F1Œîq"í^¬r%H—[ÓÛK¹ÔŒÎ–ÖªÍqæBèñ]Çtl·d‚àŠ~Þ§q{(vìwóóoÿ€çÿ‹£ìwóóoÿ€çÿ‹ªé©ßÀ’Ýj¶VÖVAr…nZY‹¡cÆãœaY²ØvsLohÑù^eÄÈdß•{YTÄnã(+˜”C—Ú0Àô9£ÛÔîÊ‹c»ÿŸ›ü?ü]c»ÿŸ›ü?ü]Toé+å ÷,›ñ v¼«³níñ„,ŸëüÀd2‘Áiõ½='¶ŒÌånUZÖh1Âþô €±À¶NF:ŒžÞ§pöPì/ØîÿçæßÿÏÿGØîÿçæßÿÏÿU"ñfqc åµÄ×0ÏŸ+ìö²ÊΪ¥ŠÀŒ+§ ÅkÃ4WG<$°È¡ÒD`ÊÊFAuQíêweÅ?±ÝÿÏÍ¿þŸþ.±ÝÿÏÍ¿þŸþ.¯ÑG·©Ü=”;>Çwÿ?6ÿøøº>Çwÿ?6ÿøøº¿EÞ§pöPìPûßüüÛÿà9ÿâèûßüüÛÿà9ÿâêý{zÃÙC±Cìwóóoÿ€çÿ‹£ìwóóoÿ€çÿ‹«ôQíêweűÝÿÏÍ¿þŸþ.±ÝÿÏÍ¿þŸþ.¯ÑG·©Ü=”;>Çwÿ?6ÿøøºŽ]2i±æÉg&:oµ'øýiÑG¶¨úÙC±‘ý‹þ͇þÿöTbÿ³aÿ€ý•kÑSígÜ~Î=Œì_öl?ðÿ²£ûý›üÿì«^Š=¬û‡³c#ûý›üÿì¨þÅÿfÃÿÿû*×¢k>áìãØÈþÅÿfÃÿÿû*?±Ù°ÿÀ?þʵè£Úϸ{8ö2?±Ù°ÿÀ?þÊì_öl?ðÿ²­z(ö³îÎ=Œì_öl?ðÿ²£ûý›üÿì«^Š=¬û‡³c#ûý›üÿì¨þÅÿfÃÿÿû*×¢k>áìãØÈþÅÿfÃÿÿû*?±Ù°ÿÀ?þʵè£Úϸ{8ö2?±Ù°ÿÀ?þÊì_öl?ðÿ²­z(ö³îÎ=Œì_öl?ðÿ²£ûý›üÿì«^Š=¬û‡³c#ûý›üÿì¨þÅÿfÃÿÿû*×¢k>áìãØÈþÅÿfÃÿÿû*?±Ù°ÿÀ?þʵè£Úϸ{8ö2?±Ù°ÿÀ?þÊì_öl?ðÿ²­z(ö³îÎ=Œì_öl?ðÿ²£ûý›üÿì«^Š=¬û‡³c#ûý›üÿì¨þÅÿfÃÿÿû*×¢k>áìãØÈþÅÿfÃÿÿû*?±Ù°ÿÀ?þʵè£Úϸ{8ö2?±Ù°ÿÀ?þÊì_öl?ðÿ²­z(ö³îÎ=Œì_öl?ðÿ²£ûý›üÿì«^Š=¬û‡³c#ûý›üÿì¨þÅÿfÃÿÿû*×¢k>áìãØÈþÅÿfÃÿÿû*?±Ù°ÿÀ?þʵè£Úϸ{8ö2?±Ù°ÿÀ?þÊì_öl?ðÿ²­zGÏ–û~öÓ·<ãŠS¯(Å˰Õ(·c'ûý›üÿìª+/ìö³O²Á¼´gÛöLg?Þ®ªçN·‹N{ˆã@Á7#ózsß?®k#TÇö]æ:y/ÿ šÆ†.¬ÛRVÙýÿ"§FšW‰™Do4TA? £|‰^UñþFéë’*õ}?ýeïýwú-+Ê>#ÈÝ/ýrOå]3þ#3‡Àj¹ÿZ¿õÍ?ôYúü{?ýw›ÿF5h\ÿ­_úæŸú¨tM4j6Ófêx<¹åÿU³œÈÝw)ô¬‹ +Oþ¤ÿ ÷åÿGü#IÿA;ïÊ/þ"Ÿ+ ™”T7o¤ÚŒ®µwp eš)m¶¯âÀ}†O¯Q›Vöú=ЈÁâYË‹æÀç ÆÌçÛ­>F#¢­ßi6:eœ——úôö–±ã|ÓÉh¹ ±L ’ãEŽ“c©ÙÇya¯Owk&vMH‚AÃÁÁ~¹X\©E[:MŠÙÍxuéŬ;üÙŒla!÷6Ì ¥XôÁÏJ§`4-Vâ84ß½ëÈ’:›Y!•qŒ>YP€G›çær°¸´VŸü#IÿA;ïÊ/þ"£ƒB¶º·ŠâßX»š P ‘Uã¶0¿ÈNÍ¡1¸ýÑÓŽýOç[ð'ýï¿(¿øŠ?áOú ß~QñìÅ¡™QÛ‚¶6jFm¡RPDj­øF“þ‚wß”_üEð'ýï¿(¿øŠ\¬w2 ’[Kõ¹Š4•v:˜ÝöŒ¼‚ÿv§½¿žöÛÈ6PD £#ké°zzÕïøF“þ‚wß”_üEð'ýï¿(¿øŠ»È›F÷1â!uËRÄäMœýSü÷ú•oP·’쩆ù" ebø=¸ê}z“íÉËèG 4Yòõ}E3×iˆgÿ§ÿbÍÿA½Oþûÿˆ¬åMN<²)I§tsÖˆþ}Å´‹™Æÿ¶oºQrT»1,pTà•Âò Ú7‡&#œå[œçøÛÜÿ3ZسÐoSÿ¾ãÿâ)áã+n“VÔôËþÉQJ‚¦š]JG-Ìi¡Šâ3Ñ$‘’ WPAÁÈàûŠ}iÿÂ4Ÿô¾ü¢ÿâ(ÿ„i?è'}ùEÿÄVœ¬›˜W_ñócÿ]Ïþ‹z¥cÿ!ÿ·Ÿý+SU±Ö å›2–Ý.ÜÝ¿(µfXG<šŠ‹{wÿÒITe5yùˆpZKÓõDKuýt/<Â)¦WF`ÉßÝ–Ïð7¨íÞ˜­òV%q#Kº@ Ú p>m‹ž£­]û.§ÿ@›ŸûùÿGÙu?úÜÿßÈøºjo—–Áʯrüwò@£O¹¶·›vK\[´ÊWŒNsŽsøW0Þ‰'°ò.-š6µ)%Ý šå˜Hå »„|§—süXŸÙu?úÜÿßÈøº¤÷ÞT‘*:’¬­wn#¨#̬[åÜÑ+ìe?… òudŠm†þEq•,ª¡Ì†7\üèÒ<ŇYJd0ý@—B°Ô"‚[šês: k# 7–ˆ1s‘”Ü~aœž•ºêƲG¦NèÀ2²Ë „ôï²êô ¹ÿ¿ÿñuZˆæ_×ó^ RmJØê±´fÑ–¨²¨ ±8¸—ãøxàîœøzXìà[kÄK«kû‹èd’èV—*ÈÌÆ€}«캟ýnïä?ü]eÔÿèsÿ!ÿâè³ gKðåþ•r.bÔ­žiÙæûFÛ"™å˜Ç™òÎã$¿Eヒß×ö0X =JÙfÓà{;fšÑ~ÎD|8.é3üà¨ëòtÇMö]Oþ7?÷òþ.²êô ¹ÿ¿ÿñtY†‡'kਠðÍÆ5Ò\,­lᤀ- P¢†B~e&HÈÈb2:Ö†áË[]ïLž+3æñË©ÿÐ&çþþCÿÅÑö]Oþ7?÷òþ.‹0ÐÀŸGÕo-ÞÚïV¶–hå…‘Y‘Ȳ#HD›\eàª™ÉÆÚ¥qàùo¡-΢†êþÒêÞgŽÜª™!Œ2©r@Ux,rI9+¬û.§ÿ@›ŸûùÿGÙu?úÜÿßÈøº,ÃC“¸ÐuX¼Zu-6êÚ5gyd¸·2,e’Õ6‰’|†mÝLt5x$žÃȸ¶hlÚÔ¤—v‚k”X a#”2ìVò6ž]Ïñ`veÔÿèsÿ!ÿâèû.§ÿ@›ŸûùÿF¡¡ÉÜø.)´½صÄÚ]§Ùߨ‹ˆv -åîlƸ;¸‡9Èé,í’ÊÆÞÒ3”‚5NÕ^`p (éÐ=«eÔÿèsÿ!ÿâèû.§ÿ@›ŸûùÿE˜h6ŠwÙu?úÜÿßÈøº>Ë©ÿÐ&çþþCÿÅÒ³ ¢ö]Oþ7?÷òþ.²êô ¹ÿ¿ÿñtY…ÆÑNû.§ÿ@›ŸûùÿGÙu?úÜÿßÈøº,Âãh§}—Sÿ MÏýü‡ÿ‹£ìºŸýnïä?ü]aq´S¾Ë©ÿÐ&çþþCÿÅÑö]Oþ7?÷òþ.‹0¸Ú)ßeÔÿèsÿ!ÿâèû.§ÿ@›ŸûùÿE˜\mï²êô ¹ÿ¿ÿñt}—Sÿ MÏýü‡ÿ‹¢Ì.6ŠwÙu?úÜÿßÈøº>Ë©ÿÐ&çþþCÿÅÑfE;캟ýnïä?ü]eÔÿèsÿ!ÿâè³ ¢ö]Oþ7?÷òþ.²êô ¹ÿ¿ÿñtY…ÆÑNû.§ÿ@›ŸûùÿGÙu?úÜÿßÈøº,Âãh§}—Sÿ MÏýü‡ÿ‹£ìºŸýnïä?ü]aq´S¾Ë©ÿÐ&çþþCÿÅÑö]Oþ7?÷òþ.‹0¸Ú)ßeÔÿèsÿ!ÿâèû.§ÿ@›ŸûùÿE˜\mï²êô ¹ÿ¿ÿñt}—Sÿ MÏýü‡ÿ‹¢Ì.6ŠwÙu?úÜÿßÈøº>Ë©ÿÐ&çþþCÿÅÑfE;캟ýnïä?ü]eÔÿèsÿ!ÿâè³ ¢ö]Oþ7?÷òþ.²êô ¹ÿ¿ÿñtY…ÆÑNû.§ÿ@›ŸûùÿGÙu?úÜÿßÈøº,Âãh§}—Sÿ MÏýü‡ÿ‹£ìºŸýnïä?ü]aq´S¾Ë©ÿÐ&çþþCÿÅÑö]Oþ7?÷òþ.‹0¸Ú)ßeÔÿèsÿ!ÿâèû.§ÿ@›ŸûùÿE˜\mï²êô ¹ÿ¿ÿñt}—Sÿ MÏýü‡ÿ‹¢Ì.6ŠwÙu?úÜÿßÈøº>Ë©ÿÐ&çþþCÿÅÑfE;캟ýnïä?ü]eÔÿèsÿ!ÿâè³ ¢ö]Oþ7?÷òþ.²êô ¹ÿ¿ÿñtY…ÆÑNû.§ÿ@›ŸûùÿGÙu?úÜÿßÈøº,Âæ`Ôoä¾·°óÊŠI^f’%;¶í`2~ò÷Ï\ô5>§ÿ «Ïúàÿú «ŸeÔÿèsÿ!ÿâê®§o¨.•x_L¸D9f2E…O<>iÙtVódZúËßúî?ôZW”|Fÿ‘º_úäŸÊ½_OÿY{ÿ]Çþ‹Jòˆßò7Kÿ\“ùV“þ$‰‡Àj¹ÿZ¿õÍ?ôV<'ÿ×_õÞOýõ^çýjÿ×4ÿÐEXðŸü{]×y?ôcÖkrÙ³,’ ¸¡ã]ÈÎw.I“8ùèHèFHÏ£ —ƒnéà=3ˆHÏÝÏñ{?æ:àî¢Úæ•öȘj¶{n ûJã9\±ì{ò:/>³ý£ÍO#fÿ3pÛ·ÎzcêÉ<ò å¶k›x‚¤q]ÜFˆ£Uep€ U‹;´¼ñ‘Š®¦å›k Œ¬R0?P@#Ü Ý¸³ðÅÄvú>›t®KIuäBÁs“˦}:ñSiöžŠú7Ómôd»òÚÙ"q·ž™ü+·ët¥µ9þ­%.b=p=¦¹¥êóA=ÆŸié$pBÓÆð‘¾e+$e‡—¸”ÛÖ|>±gƒl,;èî­bŽ´»iŽÙ–4#2pcqåþï®Þõ¹«csqaÌfîÝÊI á œÔš,‘7׊’þúßLÓ®oï$òímby¦}¤íE±ÀäàÒ€,QXëâ$ù{æžñ<íö‹Ibò#]Ùy·¨òTì|6†Úvç¡g}o¨@ÓZÉæF²É ;HÃÆíŽ}X{ãŽ(Å^þúßLÓ®oï$òímby¦}¤íE±ÀäàÒ«Þkzu‡ö‡Ún<¿ìûA{uò1òá;ðÜÕ?'åéÈÈ…U{‹ë{Ií!žM’]Êa€m'{„iã§ÊŒyôõÅX¢Š(¢£‚xn­â¸·–9 •Ç$l]HÈ Ž#œÑ<ðÚÛËqq,pÁ’I*¢’I<9  (ª÷Öö“ÚC<›$»”ÃÚN÷ÒÇO•óé늱@N VÆæþâÂ+˜ÍÝ»”’Ã78¨ 4Y# o¯r€ (¢€ (¨àž«x®-åŽh%@ñÉWR2#‚ç4Îx—þBºwûÿû$•KÂÿò?õÎëÿG-]ñ/ü…tï÷ÿöI*—…ÿä:ë×þŽZpû^Ÿª&[¯ë¡µ­Þ½¥Ì¹¼†’H,í¼ù‡F#±ûç ÷< ¯¥êŸh¿ˆÇu©ÍnñÈ/lÝëD bFÇï8#¯<Ö»°77Ü%ÜöòÄŽ¢r© îSýÑMƒNh¯ê[ë›—HÚ5ˆÀŠ“÷TtR(±Ìs0 ²‚F~xY{Üï>£±Ç'¬jwZo…n®låò§[ù6ÐÜ’Ð×e\׆®îg{+”Šæi¢ó/$@CÈ\nQsÒœUE)lLÓqj;œÆ½¯ß锺M’]ÚÛÄK®\0Á`GEë€:“†á{?ë—zöŽg»¶thÜÆ'À >:=GCÆ3Ó¸X×ÃÉ­M,ºõ•¼‘*ˆàdvØÃz»UHÎW‘ýÅ`xR:8¢ŽRcHâB¢ ¨è+ tÜ^CÑ­‰£<©&µy£ÛéðM©¤¬LsÞì‚4H-YÂH°–?=Êà2œüÇ+ò¥h'‚´•¤³œÄaòfH²>!BûaÃG_,.Ý‹·$žÑäùwi+8v¸Šúxçcå¤|Ê®‚±G‘œ1@Ç$f€1ôÿÍ©•è¦âÎßÏ{¢.7\ÇF| ›p ÊûΈÎ;–××xËS°i3kŸi4i´|®ò\†9ëÈ?/sR'‡4ˆ­ä·ŠÆ8 ’â “dª‰!ˆˆáBˆbFËÓ““RðþŸªÜ-ÄÿkŠp –—³[3¨$€Æ'RÀÄÎ761“OÃ>7Õ/4[ »ë%µ_°ZÝ^ œLóÜCnÁ„"0»wÜ(?8À @àsÀ> ÕüAÔ÷Iضh¥’`gV{;iJX•XfGmùœèÚDVò[ÅcPIqÉŽ2UDˆÄDp¡D1 £åéÉɦx{LÑž6Óà’Ü%º[Öy6EURÈ[k8TUÞAl(ÀÅjQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~»ÿ"ö§ÿ^’ÿè´+?]ÿ‘{Sÿ¯Iô@žŸþ²÷þ»ý•å¿än—þ¹'ò¯WÓÿÖ^ÿ×qÿ¢Ò¼£â7üÒÿ×$þTçüI =ªçýjÿ×4ÿÐEXðŸü{]×y?ôcÕ{Ÿõ«ÿ\ÓÿAcÂñíuÿ]äÿÑY­Ëg=c}¨®± Ëˆ´ˆtˆ´â“Á"üÊßèÿ+~øeÎÙ6¾Ì ÜmÕÕhðÍ7‡´ôg {Há-•(™æÁãoâ‡.msJûdL5[=‚7ý¥qœ®?‹Øö=ù—ŸÙþÑæ§‘³™¸mÛŒç=1Žõdž{¥k÷sé¶ gul°¥¤bI%…Ÿ2m‡ÇCÇ'!oE>¬|S`$’Â`$–&S€ß¼o¼v¶ØØÏ\§³Øø^yé´m6å]‹Ir-á`Äœ““Ë\gŸzl–¶±kÚ]åµÑœKw"lÞ¬‘ï†YIÉàòO ôÆ£yÃêÛ§ï^ÛuýM`ì¥ízíý}ÅßEo6O§__Iæƒvb™_,²‡O/åÜ \‚W$°SÍÝA¬Û¦›‰®u+‹—fÒZv”Mº?$;Ú¤nÃoŸÈeCÁY»ÊËÕàÐu´Òõ¨´Û§Ùí­/UÈÈ¿1Dn¥Tœ8·2<ÿÓë7Zn‹q4ºÌÚ¤©¦½¤§kw´1[›ƒ!¹.ÒŽdýævãþYÔ–ÿÛÿaƒÊþÜûGÙ#ÿ„ƒÍóÿ×yÐy¿gÝÇú¿¶cìÜ}ݼùué·öwÞØîà¸ò%h&òdåÈ¿yddEX ÚÔwš³x}uÈ,'–Wóo"»gdÆš®ÄHD¬Áè.•„dVäÑÞÅðÅkwwwsد »Ý[KüŽ@Y¤yˆß¿™y8gÐ#žždŠXÝá}’ª°%hl7¡ÚÊp{{Ñ<Ý[ËoqsA*’92º‘‚<G Å]캧Šu+4Ô–î/"X½¬² y¿Òø „ nB©`F ®~âËÄ©s*Cs©XEö‹Ç°X,.&/;_\±'Ë–8À*mÈ7Œ†ÈÀߟLÒF—oún“ðØKäÉo>ZDì«.DŠÜ{×5¡@~½ûø®´åûsI¨kvyW_ꦌ,2N‘vòL͸„«É ûÏø˜jíýïö·ˆ-¬m÷Ëkx<¿´ÂsÒ1äße[²øÌ»É †g…åŠ7x_|LÊ FÚW+èv³ ŽÄŽõ^H4Û4…åŠÒŽã|LʪiX®WÑݤa‘É.G9 /F‡_ÿ„æIo/¯¿ãîçÍ·ûþOÙ²þOïZ_³ýß$þé<ÌðßòÔÔ„Ítú\v·:”O§ørYÚ[ës=Õ´Òª$¼Xýäûc¹(';×àò«§Øÿ´fÙä}»ÊÍÛ3ËËìÝßn|ÌgŒîÇzàìˆ-thõ 2ÚìÏÄ–‰õÅÜ©t²¬j—)›Y•2¬NÈüâ¥÷+#Ò5=:{ÛˆnµË›‹=WO´¶yeµÙh“9>[ä4åŸo ¹² äuø£I‚òþÖI§XmZJP3+¸]¯#y‰„RXîjŶ·§]ÞEg Æn¥‰¦²2º*ˆËRFhŽÖÃ|ãŠó8tÝJǾÓ¡ŸY±·µ·hu=Öú…à ÅHUU2$žVØ1±ƒŽ„•"Æ­aâF;í9Æ¥ª_\èò@ÞbÍe«›2¼…ckp^VìÙŒ¿•2ž©Yòkzt_ißq³]Åe/Èß,Òù{§9ó£äp7rF8û¿>îT‹Ã?n’}?D½žÙ57ÍŠêV lä\üÛ—r ·E$p®3Ÿc«¯ï¯µË­ÝÇö¿.ÎúÞe_*lù~d¯työlì€8È2ãÑ-f±¹¿¾kq»·tµºq‚EBØä›#¨Ï|ÕÊñý_íÖ:äðÿn[èÓÝÁºDûJI"1Ò##÷†B¢uþù>`뺴/¿µ~Ëþ‰ý¹s§ý®Oìí:O·C5ÒùPæ]/ï`Ħ|yÿ+쪮¾‰m5޹¥ÚÞD#¹³¸H® g†ѧOäOº!çÛ>1¾å”ÿ maÏÐÕŠàí¡Ô.|@°Lu‘w%íÚj$Ép–âĉ„[dD¯ÿ¼ÄD€îÏ>esþoÞË ^\jš–d·ÓÞ[[‰–h ™‹Ëæ­¸%Œù2«IÝr|±^¨ÿcÔ"º³“ȹŒf ˜[壯º°8=CÆ©Ùx“EÔl¤¼µÕ-­ãº™Œ¡L1:oG~o˜(Œ±óþǤý»íßÚ{Çö‡Úüßøùò[Íò÷ü¾^ìãËýß]µ§áùŸúçuÿ£–¬ë³Ãu{¥\[ËÐK‡ŽHØ2º˜ä ‚8 ŽsU¼/ÿ!Óÿ\î¿ôrÓ‡ÚôýQ2Ý]ÒŠ(¤PV^·s%´v¥'ži[Ìkx¼É ¬R>v±'*8“ÐV¥U½²‚'–†O1-¹k/ñ:1í@ý†«\Û›[]¡óØMæ–öû³¯• ;“'nzóÔWH·1´Ë’q“ ü]ñá<ý?¼3U4ÇûLM¨ÝÜy]A\•+“µèǽhP˜é—šŸü#“Üéö1Ýk ~ÂñYC8¸>ü{~GQÖ5-úUе¹º`ó5£ƒdè«ÉädÏ'*0ï÷ZŸ‚ô½Nùï7\ZÏ'úƶp¾aõ ‚3ô©m¼+¡G§¶žlh’e‘ÌêIwÙ=F8ã—¦E`éÉì5Ô«Gš+ú¹›àOÞë6óÛÝ[ÊËm…[¢rû {°ùãç³µïkz}—þ˧_\goû-ì?fòíÐâ“æá›ÌçånzâÆÆÛM²ŠÎΆÞ%Úˆ½¿©$òIä““UæÑ4ë‹]RÚ[}Ð껾ڻØy¹‰b<çåùGéž¼Ö°M+3lEHTªåN6O¡~Ú–,îdÊÞÝÁ󲓈î$Œ}ÕQŒ'gÉc–:•^ÎÆßO¡µË¥’b7—‘ÚG<ú³1öÏUŠ£¢¹‹¯ˆž³¿šÆã\¶ŽâL2!Ýò¸(¤Œp\gÓýÆÄ ñ?ÁrlÛ¯Ûûq¹]zìÆr8ÿX¹ÏL>q±ö»0¹×Q\Š|Oð\›6ëöã~ÜnW^»1œŽ?Ö.sÓœl}¢|Oð\›6ëöã~ÜnW^»1œŽ?Ö.sÓœl}§+Ñ×QXš‹ô/JÑiâ푾Ȝ)‰wŽ9 :£·HaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPYúïü‹ÚŸýzKÿ ЬýwþEíOþ½%ÿÐ rzúËßúî?ôZW”|Fÿ‘º_úäŸÊ½_OÿY{ÿ]Çþ‹Jòˆßò7Kÿ\“ùSŸñ$(|ö«Ÿõ«ÿ\ÓÿAcÂñíuÿ]äÿÑUîÖ¯ýsOýU ÿǵ×ýw“ÿF=f·-™Úf¥r–ÚvÏè0Ù$¶–Ü™€»×ÌóÀ9ÁÙÇßI.mü —m#ÓCˆ¥„°`"Sµ¾apÃþ=z:‚òÕ/¬n-%,#ž6‰Šõ†=ù«a”—6ÇŸÛ륔]¨¼±h¦Œ,n`¶ÅO¼~aÜíÓ=*ì-¨/ŠmK}†G’á—~ÉS%#¶Ï0¨}ˆÊãà‹WºdÃûCU7/™"´Ô$…‘ÎÍ€”`¹è1ÈkRÆÃKºÕ>ßi¨ý©¡fqr£$e÷dü£<庞þÕË(Õƒ‹¥¦¾÷šÓþ ×Zt'/+ië¯üOEo6O§__Iæƒvb™_,²‡O/åÜ \‚W$°SÉÝxÄwš–’÷³G.©ge{-¥ßÞHfÚ´i$©,ŠÛQ ppY»»Ûûm:$’åÙUßbíFrN ÆÐÌOé,n7Ip‹ìgki0~PsÓÎ9ÁÈ=°Nò©»6ŽUNRÕ#·Óu/ Ü_¤i_Sû$Þ–+|ÒÙ[´0P<ÇG¾Gí'×Aâ{[‹ ØZA¨jN-Þ8äeŠæiïPü¯%¸óc,B±•G`† TõA Ï Ënð¾ø™”´®WÐíf‰êJ²'¹ƒÄï&£0ƒ\µ’ÓO¹¸³·K¹¦T¹KKâO¥búŒ^)µŽ9äßâ]4¸™\ [ÌpË…îcÈÅeë6!‹Ä‡öpÔ„0$Aq"Í>Ër4¿3i܉U¹?#fWÚwó^‘“¦ÃªMªE§Ú&¡2l–íaQ+¯3ã$|«Á=‡¥\ /ÃQÞÅi§­ÝÞ³sö››w6ÒÀg|‰–icýø2ù…06Í=/þ&ðc÷ßÚ:­æ³&ïùof<ß"GÏ]¾e–Õ?2á8_ËØoN]mhÜbžid(ÙS;Ã.7]¬ ‘¸A¬û}gð}Ë‹ìžM£ù~e„}ŽÜuó7 ò#>Oö†òøÎÚâîcÕ.ô:úÞîî 7P¸¾½–æÚÚêy&ß06……¬‰0gÈ;T*«B¹ªÍ¨Ûx_TYnuQ¬Í¢[ZÇ+…Š6¼”Ëy{ T˜Ê뼆ڠÄw`fºÍ.k¬tÑÚ@ïj‰{ Ncd €¬„qÇqF«5®—qy©ˆþÇhŸj•ž=á>ü`œ©PÃ9Ð>›q'‹¥ÒíÛR[·6ñµ™¹±J‡ìûAìóÇŽ7ÆX}àŸ$b×õ›2}]ï­Ö}@ZÜÁ§Ï=¼k6פÊʯpI œ23ÎEvšÞaý¡ö›/û>Ð^Ý|Œ|¸Nü7ŸõOÀÉùzr3¡@_Ž·þ«v±ê£V:}Åž‹!iJ3Ã=èÎÏÈß»x ¼ÿ{vA'q¨ã‹V‡F¹#WÖe³ûD$Dt½J6˜…¼aÌ’]Fî‰-v€–‘O¦\_[ÚOi òl’îS i;Ü#HG>Tcϧ®*Åy{Au¦i~(–X5];[Ô­"Kû\óF²ImooùÙòŒÂàlÞÄ>âvóZx7Ïñ¬ÐÃö+Ô"‚â_.;›4´¶*BáÔI—ƒò„’áz·äÐCr'Š9P:¸WPÀ2°e<÷ ±ÑðÝ[Åqo,sA*ŽHØ2º‘AG9 8Ò4Ù´ÝÃ)p×bw´¶2ArOú;-§–QTŒ¨Êdï3õ¯áùŸúçuÿ£–®ø—þBºwûÿû$•KÂÿò?õÎëÿG-8}¯OÕ-×õÐí(¢ŠEQ@Q@SŽE†æä2I™%‰ˆ?,k’BQÔžç Bܪöë¶{³·¥;qŸ‘F~èÏæÝ:ñ€-äM· ?ÍŒfvûq÷‡Óû§ºþ³&”m£‰S|å¾y mÇrsëØÖÕEqmow•ssGœí‘ ý pÚÞ»{¨MáËh5S¥CªyÑÌc4˜xÐÛcc¹ˆ  Xlq¯@?™$ä’y$’yªºµ…mO|Cáû]gâ ó^êsAý¡­I§Ú˜a¼SmäÍò¨óP xa¶<®zÏÁòßꯧAx‚o²YÜF΄+5Ã[¨S‚pÜuç;zsǧ^øSÇ6þ:»ÖltûkÛ¨}²8.ž&c´±Â ˜™„H7)~.)XðÇ€>&[Y=¬Úª¨& ²ÆÅ£l 0 1m†F8 Á= X…%ÍÑ[ó§y7c—ŸÁº|+<ÿðBm`¶k‰ ˆ¦”m–$ÆØe‘Fï4m%†YH;GÍPjzœ× q2^.‘ ëÛÍö4~ éÙ^:ÖìÙ¼Ùm¬Ö)ŸÊÇ—.WÌvÓ÷\2ä8 ³!Xržå^Ið£À:Cu«ZÀ‘IlbŽT•“æt.à@ßyFr ûž·^uy)Um;ÿÃ#¢š´RaEVE…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@gë¿ò/jõé/þ€kB³õßùµ?úô—ÿ@4Ééÿë/ë¸ÿÑi^QñþFéë’*õ}?ýeïýwú-+Ê>#ÈÝ/ýrOåNÄ¡ð#Ú®Ö¯ýsOýU ÿǵ×ýw“ÿF=W¹ÿZ¿õÍ?ôV<'ÿ×_õÞOýõšÜ¶t4QEY'7«]Mo¬Ü-¶«¦éÓµ¼=üFEe 6@Q$g9+ÎOÓž¤OsurF§§ÝÜ-´K$öБ;§À æ1Êçæ9Áé‘«öÙ§\¶í¸‰ŽíÛqÁç;—÷Ðú޵b€8M{RÔ§Ôïm–æÊ(ô¹VpÆÝ´ÆpOÌAåÂñßžk ÑuKí&öQwo‹¦.ÉäÅžwuýàÇbsÚ»}OÃömss¨Ï«^Y$¬­.ÙQ#o–>òž£Ž½ê…¦›áá±´Õ!ƒ. źl¤jràI(:É9%¸q4jNöéªôb»Zÿv¿‰Ói·-y¥YÝ9æ$b«´d¨< œué“õ5Ä˦ë²i:²øní6ÂM>á--n®v˜ÆDMšÙyM È¡6•òPã»¶·ŽÒÖh‹sÀŽuÛ¥°‚òKkÒáD’^•g%wËå±Úº”¹RRÜóš»vØã<^!Ôü=x, ÕdÒ.¼>£B‹J†äFÒ²K•t€p¥M¸ (ÛŒ€>ýSÖì¼Ktd ðuˆÓßX†XmBæiDÍ1„¤—É‹wîùF¼¾„üÿ5qþ¼Ôfð½Î˜5˵ŸD_í9/^ñ¿~æ%‡Ì!Ÿj—ʶ¨®ïûjçû‘~Güj857µ·ŠÞÞÚÚ"@‘ÇmTP0à8ÅÈ,qš[êDyZÔÞ ›A†âtŠ[[]B ÙÌvÍWs\”Ë]Œ³2äÆ#å²kz^Ÿªlï¥K«»øíUÈ÷’´’]Í …>¿+l®ÐÑÌ‚Æ%çüL?µvþ÷û[ÄÖ6û¿åµ¼_Úa9éòo²­€Ù|æ Æ¿ÿ Ì’Þ__ÇÝÏ›oö9üŸ³eüŸÞ´¿gû¾IýÒy™á¿å©«Ðø“Ho?É“G?Ù²É<Û ¢ÈÛ÷»`üŒs&IÁ9lõ5zÓÄÂþÕ.¬å´¹·|ì–Þƒƒ‚ ÂŽd1Éšéô¸ínu(ŸOðä³´·Öæ{«i¥TH%x±ûÉöÇrPNw¯À5ìˆ-thõ 2ÚìÏÄ–‰õÅÜ©t²¬j—)›Y•2¬NÈüâ¥÷+ö¾7Ñn®.n-5-iÒ ÓÉèÌ"BNX†ÎÕ.ÇžãëZ6ž&ö©ug-¥Í»çd°¶ôlpy~]Œ8ôONžöâ­ræâÏUÓí-ž{©¤YmvZ$ÎcÏ–ù 9gÛÃnl‚¹p麕…|=§C>³coknÐê{­õ †ŠªªdI<¬ °cc *Gjþ,†-B->K«½•wÇlÒ#¯<…ÎHùOä}*×öÕÏ÷"üøÑÌ‚Ç:ÃQY¬WT¼žæé^ þu¢Àco²üÃå%_/½‰RÊ •ì«~ÿéÿ®w_ú9iÚ¥ÓÝÞØI PD¥~_úæôß ÿÈtÿ×;¯ýµPû^Ÿª&[¯ë¡ÚQE†QEQEN9›É&d”V& ü±®I =GRxœ) r«Û®ÙîÎÜn”íÆ~Eû£?›tëÆ·‘6Ü$ÿ61˜uÛíÇÞLîœdø›Z—IKháLå³(\í Žõ9·ª½í®¡‘w Ëwx ú‚9¯#Ö€<çXñ–¡%„ZÚ œw4rjl àÈŒl¬ó|Ø·Ì›¾Ôoçñ7ˆtÛ½eµ8l„>SD[Ÿ.î['‚I$²¹$“èi–Vñ\[Ü´ÐJã’7VWR2 `‚9Íé–¶òÜ\\´0D…ä’GUTP2I$`9ÍasËàÔmd·mEôKæšÖŽËN:\ñ¥´~dxùx,cfØ`ä ´³ééžKý–áTyç¿i.eû$–Êò}—/€DAUUzüÊ™,Û‰ôì[oïËùð¨ãÓ,&y’+–w…öJªêJ6ÐØn8;YNbz,Âç–YM>`¶±ZjúžŸelˆm¯ì€{y‘ãXU q1GÎÌè%Ç–›º?ù/iqpróÏ?™s,ö’[“j®V7… ª£¯ ÉfÜOQz$Ú¤Ú\ZœO¨B›å´[„2¢ñË'P>eäŽãÖ¤¾³Ò´Ë9//ï–ÒÖYsÞú±¯Eaý›‡½ßõï-Ž[X×µ-ÅZÕÒ[Çu¥Øèö×wH÷l‡º.Ñ&ÆWr©Ð²gj‚{Œ¿øîêçIñ%µ–™} 0Ú_áN rÀ»7”#UÝe•›%>PKmî/4M:ÿûCí6þgö… ²ºùØyø^ë_‘ƒóuàbÏ„4;·ºií$‘.’U’q/”<Å+#${¶#°g˨ w¿?1·ÍØø¾òÇOÕ[ì¿mK–úòúY[‹Ë¥EˆmmìX @ Ûbîþðøs^ñBÝÎ’X]Ï,6âBCfïÄGÝ>nɉb¤¯š¿xÄ„nKá c–´yUK‰Qgß#HË*†T-$‡cîQ½€1; yßl¶[ÍšeíÚ]Oiåg8æHÔçhŽFU.¥Níóg>`(ÐQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEV~»ÿ"ö§ÿ^’ÿè´+?]ÿ‘{Sÿ¯Iô@žŸþ²÷þ»ý•å¿än—þ¹'ò¯WÓÿÖ^ÿ×qÿ¢Ò¼£â7üÒÿ×$þTçüI =ªçýjÿ×4ÿÐEXðŸü{]×y?ôcÕ{Ÿõ«ÿ\ÓÿAcÂñíuÿ]äÿÑY­ËgCEU’q~3šùmõ¸4­NÒÇP›LU„ÎÛZC‰ÀXÛÌM¸®’¸5¥¤OsurF§§ÝÜ-´K$öБ;§À æ1Êçæ9Áé‘«öÙ§\¶í¸‰ŽíÛqÁç;—÷Ðú޵b€<»âFœ—ºÕ™ïºHÍuœÂ eÏ–:œ‘‡Ïä}&—vP=‹oKF/8E™e&M£q$€@«ñ“ÈW«êöZt­×zeÔ¬|°÷(¿*€Í÷Šž8?g@š ½Äoý•¤Æ’n϶T`§!ˆQ€CcñçŠäÄÆ­XJœ§î=:ÿÃR§BTŸ7©«a©­Æƒ£(s¶"Òˆ¢gmËÁUA,ržÙ®-k¹¾xºÚáµ-ZÞk-–M¥Ý†ûAĸ’Y˜îòNppçy©EeÝ]Í}n¶–îÖ{Û)e‚õ­I[fïGÁ™`3±Æ+›ð•…ÿ…ÛÄ wÚ!—Ubû”ˆd/º<ļŽYrrìI9IX’NqEqöVº‡Štûë4±»¬àþÌž8Úb$\<Û<¿˜4›@lå‰.ʱèxœàÝ%ݬ¾â0.!—'2ôÚ?:Üñ/ü…tï÷ÿöI+ÇþB+ÿo?ú4SŽÒôýP¥ºþº¿ð”ÜÿÐOHÿ¿gÿŽÑÿ MÏýôûöøíISNì°ÂÒ¶ÎqÔCLbRg†E)*c*Hþ•—9vþ›Ÿú é÷ìÿñÚ?á)¹ÿ ž‘ÿ~Ïÿ§QO™…†ÿÂSsÿA=#þýŸþ;Gü%7?ôÒ?ïÙÿã´ê(æaa¿ð”ÜÿÐOHÿ¿gÿŽÑÿ MÏýôûöøí:Š9˜Xoü%7?ôÒ?ïÙÿã´ÂSsÿA=#þýŸþ;N¢Žfÿ MÏýôûöøíð”ÜÿÐOHÿ¿gÿŽÓ¨£™…†ÿÂSsÿA=#þýŸþ;Gü%7?ôÒ?ïÙÿã´ê(æaa¿ð”ÜÿÐOHÿ¿gÿŽÑÿ MÏýôûöøí:Š9˜Xoü%7?ôÒ?ïÙÿã´ÂSsÿA=#þýŸþ;N¢Žfÿ MÏýôûöøíð”ÜÿÐOHÿ¿gÿŽÓ¨£™…†ÿÂSsÿA=#þýŸþ;Gü%7?ôÒ?ïÙÿã´ê(æaa¿ð”ÜÿÐOHÿ¿gÿŽÑÿ MÏýôûöøí:Š9˜Xoü%7?ôÒ?ïÙÿã´ÂSsÿA=#þýŸþ;N¢Žfÿ MÏýôûöøíð”ÜÿÐOHÿ¿gÿŽÓ¨£™…†ÿÂSsÿA=#þýŸþ;Gü%7?ôÒ?ïÙÿã´ê(æaa¿ð”ÜÿÐOHÿ¿gÿŽÑÿ MÏýôûöøí:Š9˜Xoü%7?ôÒ?ïÙÿã´ÂSsÿA=#þýŸþ;N¢Žfÿ MÏýôûöøíð”ÜÿÐOHÿ¿gÿŽÓ¨£™…†ÿÂSsÿA=#þýŸþ;Gü%7?ôÒ?ïÙÿã´ê(æaa¿ð”ÜÿÐOHÿ¿gÿŽÑÿ MÏýôûöøí:Š9˜Xoü%7?ôÒ?ïÙÿã´ÂSsÿA=#þýŸþ;N¢Žfÿ MÏýôûöøíð”ÜÿÐOHÿ¿gÿŽÓ¨£™…†ÿÂSsÿA=#þýŸþ;Gü%7?ôÒ?ïÙÿã´ê(æaa¿ð”ÜÿÐOHÿ¿gÿŽÑÿ MÏýôûöøí:Š9˜Xoü%7?ôÒ?ïÙÿã´ÂSsÿA=#þýŸþ;N¬ËýNâÒìC“L¥øÉ#*7¥5w¡2j*ìÑÿ„¦çþ‚zGýû?üvøJnè'¤ß³ÿÇk2=Ráþõžß¨›ÿV…´Í<FM„’6óØ‘ÜÛÒ›ºÿ‡BŒã-‡ÿÂSsÿA=#þýŸþ;Gü%7?ôÒ?ïÙÿãµ ó:G4‘´*-ö®pf$Æy'9ÄPÞ›©Âöá"‰¥5ÄLHp ¹Çœž8#9®ib¡fÍÕ)5rßü%7?ôÒ?ïÙÿã´ÂSsÿA=#þýŸþ;J¬ àŒŒ‚äzS`böv²1Ë=¼NÇÔ”ŸÌÖüÆvþ›Ÿú é÷ìÿñÚ?á)¹ÿ ž‘ÿ~Ïÿ©!†iÌaUG™Â’ÞÄú{TÆÊo³5¼©mÉ&sŽ¸âž¢Ð«ÿ MÏýôûöøíð”ÜÿÐOHÿ¿gÿŽÑ#lŸÚ ÅO-¥Ä™¦khã˼Û@üH¥Ì"øJnè'¤ß³ÿÇhÿ„¦çþ‚zGýû?üvšZP˜×jHcb¾í¾ž´ö;TŸAš˜ÔRØz ÿ MÏýôûöøíð”ÜÿÐOHÿ¿gÿŽÕ©ìg·¤}›T€p[¹ÇqïUÁdŠ«´Cá)¹ÿ ž‘ÿ~Ïÿ£þ›Ÿú é÷ìÿñÚu5Kp-âdis‚¥¾ïÊ[=¥'+ƒþ›Ÿú é÷ìÿñÚ?á)¹ÿ ž‘ÿ~Ïÿ©$ŠXY@pqݱØëQ+yåçåû;¾=ÃÆü˜þtîÂÂÿÂSsÿA=#þýŸþ;Gü%7?ôÒ?ïÙÿã´ê3ý“í›#û/›ågÌ;ó¿gÝÆ1»ß§åS*Š;Fûÿ„¦çþ‚zGýû?üvøJnè'¤ß³ÿÇiԌʊY˜*¨É$àUÌ+ ÿ MÏýôûöøíCwâ ¯,絓TÒ‚MFÅPä0qûÏzÒx£I¦„Ç ‡ÄòmÃ.{~G«jò ¼ÿ®ÿ š˜ÔRØn6ÜfŸþ²÷þ»ý•å¿än—þ¹'ò¯WÓÿÖ^ÿ×qÿ¢Ò¼£â7üÒÿ×$þU´ÿ‰#8|ö«Ÿõ«ÿ\ÓÿAcÂñíuÿ]äÿÑUîÖ¯ýsOýU ÿǵ×ýw“ÿF=f·- QVI^ý¶i×-»n"c»vÜpyÎåÇýô>£­ —‡vÙàq˜IÇÞÇñ{§äzdm/ÛfrÛ¶â&;·mÇœî\ßCê:ÕŠÊÕÝâŠÔÈëŸ=ùQ·Ë“û s‘ëÅrÚÞ³6›§ÅÓ ßéö—ßjMBòÝldœÛ‹­–×8VÚUžef‚1“\þŒÚí·ö•Ä:­í®™ökØ¢–ÊörOœ·*Ü»É#y[J¨`ž`Œà|Ž"o±Çym,ÞBÝ>è-Ýð²7²)<ò#Ü@þæ{UŠòÿ'‰´ýIï¿´à´–î9ìá¼»Iï™ÚX™U#FÏWR®ÇÏQ¯,úÆ¡¦X$Z¬±j¦+¹ ’[q$c’@ÂHØ/{F¹È×^¢ŠñûÿøLB‡ÈþÜûEÆ•äû|ââòKï0é‰ÛŒ*6ͪ¤Œìx‚ÃZ°¼›OÒîµXô_ôY§™ÍÝëÂè8VIçæK\¬n6ç$mgÏ¢ ák‡·Yc3¢+¼a†åV$)#¨«{í>•_MÕ´ÝfÝ®4½BÒúr%¬Ë*†À8%IÁâ€)øY/#ðå¢ßO<ó ø’xLNɽ¶eY™‡É·ï±~ï†Ü+bŠ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(˜ñ/ü…tï÷ÿöI+ÇþB+ÿo?ú4Vÿ‰ä+§¿ÿ²IX?ò_ûyÿÑ¢ˆí/OÕ [Çúèk Yâ6Œ8Äg7¶ÖþTÇ-û­èAª)1íÀØüݧ^ƒ¥2[o2Fo5—p®Ä`qœ}å?Þ4-»/”¦w1ÄÅ–=ˆª  SNðäåais\­­M£Å§”×d±K)X![æA·ÞçàŸ—?‡µp–Z桤Áá»:Z40iösX^L‘É1q³¤F2ì9( eNÒÒ謋8á«êñYÞý¦GS¦Aö;‰—Ëmò…ŽÒ"Ud­Ã(Yˆ ˜È2xT“Yðæ³¡«Bb·’KíK´m¨aG.%TEܻۊÑœIëh ;³¾´ÓÃŧ\h¶¶OÝëz=´pE”˜„%Œˆ2F2Äñ8A/ŸÅ·v:6±=æ§ iÒ6•4Â4ûT‰%ʬ‰ŒÈ¶ìB¿:a^ƒE‹:¦¤¶j¼Ö>Íi6­sj÷"(ÐYÁΖ`Ws2F›˜c@Žãöæª|M ´µ›Ú‰-Òå|ËØY¼ËBYþô˜tt@S¶{ª(˜Öÿ³?¶Ûþ_±ÿdýš?²}¿o‘çî3;¾]û|¬nçöñ¾©6²bÔÖ BÒ;›X,4È/.æÑÖ-Ó(ÆöU. r>VÏiEyö—­ë"ÓO¸ŸTšàµ¶™q"É@9»”Äêv !T.åÁ$î,04Ÿ]I¢ÛÜ.´ú£O¥‰¯Lû>áŒJ»Š&#QæHÍæ+ab'kè• ¤6öv©åÛÛÆ±D™'j¨À<žz.áÍwWÕõ¨,N¯m-¼-pešÙ£¸ûB µu@ˆ¹ÌΤ„.F7â׃u_S¾?Ú¶rï¶ógµŠo2KIr¿»eX—ÊÆ\‘²¼µÉí( Š( aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPN³–$ÔeóD…|¥å#gç'û Ói«çE3K̳(VÚ‚qÔSIÆ2ÒDÊöÐÔv X<•8 [IÁëýßqYHÊæF\í2ÉŒ‚7Ç¥=$¼äd¿˜s|‘òp÷}¦¢.ÎÌÌÌÍŒ’I'§MޱS[Ž‹J©g.‹äH6ü§9[¨##88éÀô©D7¬³¼±î…ÝälpØänÁåAç¡Ò¢‰® i ½Ü± s*ªœÝO¥,R^B¥c¿œÌçäŒòNOðúš|”Þèw©ÑŒ‰üÈQÿ¼ Ò[È>Ëþ½!ÿÑkKb(’5$„P ž¼RÄž]¼g>TI}v¨\þ” ±0ŽÑšeWbI°«üÄç‘Ô#ë͘í|“['—köryÝ…ÀÜt'ðç-4žxÒ$YHXŽPmG§¹©úîHÚ7¸b¬#jòáOAX¥tqg9ô¿•hk¥œRÜê1™l|‚«·€™Rö˜Ï}¼óÒ–14/©S޼ÔÂêü£6ûÿñ5HsÁÆö);I;“A4ÖÖ·ÖÉ1Žežmååó”d|ÍЇÉã9{Xõmô4Á¢'ˆÝJÑ<¾s¡Tù›vìð¹ëRG­*T•5dÁ·'v]¸£Î÷Q´Ð™>AShÏsÆ{zÔK¢# {0€{c€}Hõþ}˜òÉ !Ÿ!ºüª3ÎzM­[C&˜D@|pOù8úàãÐôªÓ_i2ÝÁi—’\,a6Ã)VC‰ÖùÆ[Cžsž§pÍÊŽh|݇{#!$ê<GBk ”UI&Ý‹ŒùS²EÂy rèÏûÒ DcýßbçJ¿òÿ·I?ôdTØíöHÊÍ´b(ÆOÊ ©bãÍÏü²hñõdlÿ㟭me3W¶£. Â6áLƒ 3Æyã#œgŽ{ÒþïþÏ+퉷Íó|ß(ãw›¿nÌç9ùqœç޼T•Ù¡ûGŸ·çëÔã8ÆqÓ8ã=qÇJå¯BUqv6§5Ð[™Œ n‰rcŒñÆO8Æy<÷¢xLÞ^Ù^6G <Ž™ïÓ¨µKEoÊœy^¤_[¢¼—×WZN–r¦ì(™‚)Ü LÄ`‚9#Ò£¾O/E¹s>Ûv˜äœ)äŸZ’+("‘]ü¿qZFeNß*“…ãŽN)ºŸü‚¯?ëƒÿè&°ÂЕ$ùÝÙuf¤ý݆iÿë/ë¸ÿÑi^QñþFéë’*õ}?ýeïýwú-+Ê>#ÈÝ/ýrOå]óþ$Žx|ö«Ÿõ«ÿ\ÓÿAcÂñíuÿ]äÿÑUîÖ¯ýsOýU ÿǵ×ýw“ÿF=f·- QVI^ý¶i×-»n"c»vÜpyÎåÇýô>£­ —‡vÙàq˜IÇÞÇñ{§äzdm/ÛfrÛ¶â&;·mÇœî\ßCê:ÕŠÊÕÝâŠÔÈëŸ=ùQ·Ë“û s‘ëÅrÚÞ³6›§ÅÓ ßéö—ßjMBòÝldœÛ‹­–×8VÚUžef‚1“\þŒÚí·ö•Ä:­í®™ökØ¢–ÊörOœ·*Ü»É#y[J¨`ž`Œà|Ž"o±Çym,ÞBÝ>è-Ýð²7²)<ò#Ü@þæ{UŠòÿ'‰´ýIï¿´à´–î9ìá¼»Iï™ÚX™U#FÏWR®ÇÏQ¯}³VÔ4Ëoí[8"ÕL7“A˜Ä°ýŽG$8ÿ–e™w8ùH`­]EçúÞž÷ÚÇŽ¬´ý:qu¨ø~(RO²´qÜNáqæ˜,°½Óá8ÜÑ%:е]Z{¸ìå²´¶Fº¶’ÝšHÞᜑU°©óc$H8Üû}ŸööwÚàûw•çý›Ìg—»öõÛž3Ó5b€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9ÿÈWNÿÿd’¹ËhV{åW.7'ävCþ´wWGâ_ù éßïÿì’Vü„WþÞôh§¥éú¡Kuýt.ÿgÃýûŸü “ÿŠ£û>ïÜÿàLŸüUy¦›¢O„ü6ÎâYo&™yj˜O4Їç;¾\ÊÜð~Ó€–*Õ—ˆüG=¨s©Ø‹™šÔKa;YË%Ä(ctX“Ëy£»?Ëò¶Uš³,ôìø¿sÿ2ñTgÃýûŸü “ÿŠ®KRÖ.¬µO²Ë¯¼1_Ù[[Ù¸€5ì.Љ%*Sq$¼£)µFÎ Ö~âMz[If¸Ô,òÑÄ×qÅ –M8´±«–Q ˆv#JJÊÒcîòjt–¶’¼©ÄÎÑ6Énä%°~n¡´ÿìø¿sÿ2ñUÏøRa,~"–ÇPMX›üÅrò¦Ù˜[A€Z5Ú?.BñŽ„ÔÞ$7òøb2[[^›û ;O7ÚâÚrB /qžô€Úþχû÷?ø'ÿGö|?ß¹ÿÀ™?øªã÷j6ÿíc¿¸³¸–_³.øm<°ÊÔ39 ‘÷tÎlêúÈ[û-NÎáÞÖïGžH\F‹ån’Ü,»Ù " gÎT*Tíä§þχû÷?ø'ÿGö|?ß¹ÿÀ™?øªâôÏjâÂ[ß>ÛU†Öíìqoq¬ï$q<-ç*('Ío+„P<Ü·Ü$ɨëÚ–—­éÖMªBòÅ%¥¤ñ\K-xddWš8De™~sÊÈ 20Á wØgÃýûŸü “ÿŠ£û>ïÜÿàLŸüUZ¢•³áþýÏþÉÿÅQýŸ÷îð&Oþ*­Q@³áþýÏþÉÿÅQýŸ÷îð&Oþ*­Q@³áþýÏþÉÿÅQýŸ÷îð&Oþ*­Q@³áþýÏþÉÿÅQýŸ÷îð&Oþ*­Q@³áþýÏþÉÿÅQýŸ÷îð&Oþ*­Q@³áþýÏþÉÿÅQýŸ÷îð&Oþ*­Q@³áþýÏþÉÿÅQýŸ÷îð&Oþ*­Q@³áþýÏþÉÿÅQýŸ÷îð&Oþ*­Q@³áþýÏþÉÿÅQýŸ÷îð&Oþ*­Q@³áþýÏþÉÿÅQýŸ÷îð&Oþ*­Q@³áþýÏþÉÿÅQýŸ÷îð&Oþ*­Q@ב¤öª²\$¥[ý&NFÆ?Þõ§þχû÷?ø'ÿE×ü|Øÿ×sÿ¢Þ­P"…ÄV¨¯=Äñ†È\ÝI–ÀÉÀÝÏoÄÔ€eû$¸e Ëu!Aw#Þ¹¿èú¬º»µk›¸¤\lŒðííÇSÉ䓃– ¾Þƒ§ÝiÚbÃypÒJÌ_ÊÈe‡<í¹îyÆIÇvhR“•¬wUÃR†5cQ6ú]‡^ZG*É%È&X×þ>dè]Aþ/Bjìø¿sÿ2ñTjñìŸõÞýµ…{£é’ü@Ó.¤Ó¬Þᬮf2´ \ºIl³ŒîPH¨Ïg µ ­¥ÄÏÄÒÃ"‡IîFVR2!¹Sÿ³áþýÏþÉÿÅWŸYj:¾‰á-;Kç¸z6r¹¬™,=FÆyšocE¹VF¹±C™q‡¼‘O–p;Ó!è?Ùðÿ~çÿdÿâ¨þχû÷?ø'ÿ\ü:•Ô^3K›S{•U °Û< À²^é6BXü¬‡aÊ?7@’_BT’ÚÙl‚æ9–ጌÜpS`uçqè8ç„ýŸ÷îð&Oþ*ìø¿sÿ2ñUÄyZŸö/™öË?ìÿøHÿÔ}•¼ßù ÿÏO3yû8÷«O© þȑ̑ÞÃáè®ÝÝ6h˜°©M¬cu*=8 ·û>ïÜÿàLŸüUÙðÿ~çÿdÿ⫹׵+fÙêÛ}®I­ÞicyíŠÃ!<°ÁKF‘ƒ+Žá¶kŸjRéò7öjK$v‘îž5ŽÚTÜfw™£p«¼4#(AdR¿ëWö|?ß¹ÿÀ™?øª?³áþýÏþÉÿÅW+Šg“À7wfîª-•ü°K$GîÈ$ ´+Ë3œwd( ZÃEe¬xHj:’=á¿”Î"WÝ í8 3"®w0ÜâX–è?³áþýÏþÉÿÅQýŸ÷îð&Oþ*¸ý;ì¿ðÙy~OößöµçÛ¶ãí?eÿHò¼ßâò¿ãßnï—ý^?†»ª«ýŸ÷îð&Oþ*ìø¿sÿ2ñUjŠUþχû÷?ø'ÿGö|?ß¹ÿÀ™?øªµEUþχû÷?ø'ÿGö|?ß¹ÿÀ™?øªµEUþχû÷?ø'ÿGö|?ß¹ÿÀ™?øªµEUþχû÷?ø'ÿGö|?ß¹ÿÀ™?øªµEUþχû÷?ø'ÿGö|?ß¹ÿÀ™?øªµEUþχû÷?ø'ÿGö|?ß¹ÿÀ™?øªµEUþχû÷?ø'ÿGö|?ß¹ÿÀ™?øªµEUþχû÷?ø'ÿGö|?ß¹ÿÀ™?øªµEUþχû÷?ø'ÿGö|?ß¹ÿÀ™?øªµEUþχû÷?ø'ÿYúå²[è×G%À`æáÈÁ`ã¡­ªËñü€nà?ú¡ŸOÿY{ÿ]Çþ‹Jòˆßò7Kÿ\“ùW«éÿë/ë¸ÿÑi^QñþFéë’*ÖÄ‘øíW?ëWþ¹§þ‚*Ç„ÿãÚëþ»Éÿ£«Üÿ­_úæŸú«ÿk¯úï'þŒzÍn[:(¢¬’9ãimå[c: Ï޼"¸¨Ù/í³À:ã0“½â÷OÈôÈÛbŠÊÕÝâŠÔÈëŸ=ùQ·Ë“û s‘ëÅrÚÞ³6›§Åz{íš¶¡¦XÛjÙÁªa¼š Æ%‡ìr9!Çü³,È›¸!ÇÊCjê( @M^Ãij@eÔ¥{Nî[èn-·ŽÜ™ 2$â1½ö‹dÛæ9U%vŸ'yEQEQEQEQEQEQEQEÌx—þBºwûÿû$•Î[–ùL(ŽÙ¹Èw*1æŽàèüKÿ!];ýÿý’JÀ±ÿŠÿÛÏþã´½?T)n¿®†¥Œø˜Åoh<™<¶ßpÃ'j·'£ ·ý‘¬Ïü þ7Vü5þ¯Qÿ¯¿ý¥nT$йÅÜøNöîú+¹à·w‹c:„ÞVAÈ&=» È$°ÅßìcþxØÿàKÿñºéè§d9ìcþxØÿàKÿñº?²5ùãcÿ/ÿÆë§¢‹ ¹ÌdkóÆÇÿ_ÿÔðŽê?nûa¶±7_”ÝHv®r@^N3Ž»W9Ú1×QE\æ?²5ùãcÿ/ÿÆèþÈÖ?çþ¿ÿ®žŠ,‚ç1ý‘¬Ïü þ7GöF±ÿtžZì¸cƒµ›Ÿ“ÑMvU‡â_õzwý}ÿí)(iÌh×R•Y–ÚÓ €K]ëõOjw“©ÿÏ ü üMYÜÂf9Àu'“Ñ»µ™cu}qq*\iW–ñŒ˜Ýà`0ñ`þ¾²2+]Fæî[¸â¶·&Ös“ppX(''#æÇàj-a/n4‹”xmÑBo,&bp§wM£Ò¹}VòæÃE×'´á”k$nCƒƒT¾Ôïu?ø…¯ndœÄ‘„.s·).qõÀü«'V*¢§Õôòêµ0SƦ¹bìûôò·^ç]§ÿ¬½ÿ®ãÿE¥yGÄoù¥ÿ®Iü«Õôÿõ—¿õÜè´¯(øÿ#t¿õÉ?•tÏø’<Ø|ö«Ÿõ«ÿ\ÓÿAcÂñíuÿ]äÿÑUîÖ¯ýsOýU ÿǵ×ýw“ÿF=f·- QVHQEQEQEQEQEQEQEQEQEQEQEQEQEÌx—þBºwûÿû$•cÿ!ÿ·Ÿý+Ä¿òÓ¿ßÿÙ$¬ ù¯ý¼ÿèÑDv—§ê…-ãýt:¯ «ÔëïÿiG[•ÍiWaÓuYÂyŽ.ÂÇqæ;G¢ç¶Xžƒ95¡©\êf„¯“wzª‘o˜˜Ä’6(<—+Æ@çï f’ØHÕ¢«i×M{§[Ý2ƾr ËrË´ò%Tò0y«ë3ÝÃaþˆYÛcN°™Œ ƒóˆÇ.sÓ99Ó ésFŠÇ¿½¾ƒÃ ¨Á5“\Emö‡`$Ra ˜`pOCϪy/¦²X-扯odV}–¨±‚ªF[ønQ÷‰9àuÀ.cFŠÅ´Ö¦>mJ{i®dIdŒÅinÁÜ,¥±È8OÕëËñi,PÇm5Ìò«:ÅÐv®6Y”`Q×<ôë€9•®\¢°ì5Ùf°¤¶’êîWœíã‘ÈP±Ymþ ‚s–éÁÄKªj^[ˆÎÉÞiayã´v0ª»¨q %‰ùTmì['€E::* )$šÂÞY^‘âVg€æ6$ •=×ÓÚ§ °¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Ä¿êôïúûÿÚRVeiø—ý^ÿ_ûJJ̨–å ¢Š) Ž_õ–¿õ÷þZì댗ýe¯ý}Áÿ£VºX®%¸Ö'Ž6ŵªä<­†Ç¨Ú¸>‡ÌõZ¨ìD™zŠÅ¶Õ¯fñ$úsÁj Nfrù'˜Î$‡ŒŒnà¶UBM=‚ŠÇ³»¾—^¸Šy#ŽŒÙ¢`ãka]_¤”å±÷2ƒ®rø'ԛIJOjmb‰&mØ9dnÞFFÁÎ9ÏA@¹Z+ uÙn/ôµ‚ÚD´¼v $±‚%O-YXíû£‡Ü iÁyçß]Zýšâ?³ìýì‘â9w ü‡¾:C@)&Y¢°×]–âÿKX-¤KKÇ`²K"TòÙÕ‘•Žßº8p Ààкì·úZÁm"Z^;’XÁ§–άŒ¬výÑÀHn‹‡:7(¬{;»éu눧’8àÁmš&6¶ÕúHN[s(:ç; ;…Q@Š( Š( Š( Š( Š( Š( Š( Š( °üKþ¯Nÿ¯¿ý¥%nV‰Õéßõ÷ÿ´¤¤öíuÇ]š\ZsCÁvº™Õ·xT€1ÜŸÈj©µñpÏît>?é¼£×ýoçèqÑYÜžz7¯NžþÞÝ=²¶z{cðÇòôöéÛ$¢ŽKJ±Ö4_¶4¢ÔÜ]Ü´íäÎêª ªã%3ÕO¸ïœO©]j3i—Kp©åù.I ä|§±QZ÷£1òú}}¿Ï·A™©ÿÈ*óþ¸?þ‚hê4ÿõ—¿õÜè´¯(øÿ#t¿õÉ?•z¾Ÿþ²÷þ»ý•å¿än—þ¹'ò­'üIÕsþµëšè"¬xOþ=®¿ë¼Ÿú1ê½ÏúÕÿ®iÿ Š±á?øöºÿ®òèǬÖ峡¢Š*É (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9ÿÈWNÿÿd’°,ä"¿öóÿ£Eoø—þBºwûÿû$•cÿ!ÿ·Ÿý(ŽÒôýP¥¼®‡C Úy÷SNïò[ݳ,xêæÔ6}”¸ÇC»=…tµ‡á¯õzý}ÿí(êö¯¨>—§Iu¤—L¼,q²©$ô‘Ôà`däŒIlÊì½Tum15K# –Hf\´Æì­•*m#8 xÎ Ogr/,â¹´k"îUfV8ìr¤©sÁ=jza£Eý.;Ý-´äšKKvO(­º ù6•Ùó)`öÁâ™&–Ò, ý¡t·P« º=ì¬A*F͸ùW¢çåõÎ*2—BŽ="}6+ûø£–V‘eI±,{Ÿy øÉÏ-“Éæ¬ÞX ¹bš;™­§‰YXv“µ°YpÊêž™ã¯\Ü¢€åF<>ŽÚ5[kûØVIw#º¬ŒÓ.§ °'-ÇZlž„é2XÇwt¬%’kyŒ­¾ 7!”†` ±ù‰''$ÖÕ ’#cŽ8bH¢EHÑBª(ÀP:; uPPQEQEQEQEQEQEQEQEQEQEQE‡â_õzwý}ÿí)+2´üKþ¯Nÿ¯¿ý¥%fTKrQE†G/úË_úûƒÿF­uZ}§Ølc€¿˜ã-$˜Ç˜ìK;c¶X“Žƒ8ÊËþ²×þ¾àÿÑ«]TIkP¢² Öšmvm3ì sç# õϳŒ=3ó®B‚ Õª%4ö3¬ôˆlµ+‹¸™¶Ì¼FÌÌ#bìÒÉ;C¹åE¥´Z´š‡ö…Ó´Š¢aÍ ±Uá`=óêMhÑ@r£?Ç–l·÷»,œ5´[“dj®Ìmù†ÓŒ¶Xv#'7à³ò/®®¾Óq'Ú6~êI3[F>AÛ=O©«4P )ñø~8¤³e¿½Ùd᭢ܛ#P¥vcoÌ6œe²Ã±9#ðüqIfË{²ÉÃ[E¹6F¡JìÆß˜m8Ëe‡b2s±EäFuž‘ –¥qw6Ù—ˆÙ™„l]šB¹'hbW `|¢´h¢¤–ÁEP0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¬?ÿ«Ó¿ëïÿiI[•‡â_õzwý}ÿí))=€ŽÈþäóѽzt÷ööé핳ÓÛ†?—§·NØù+YÜžz7¯NžþÞÝ=²¶z{cðÇòôöéÛ$¢Š£1òú}}¿Ï·A™©ÿÈ*óþ¸?þ‚kNôbaÆ>_O¯·ùöè35?ù^×ÿÐM. 3OÿY{ÿ]Çþ‹Jòˆßò7Kÿ\“ùW«éÿë/ë¸ÿÑi^QñþFéë’*ÖÄ‘øíW?ëWþ¹§þ‚*Ç„ÿãÚëþ»Éÿ£«Üÿ­_úæŸú«ÿk¯úï'þŒzÍn[:(¢¬¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(˜ñ/ü…tï÷ÿöI+ÇþB+ÿo?ú4Vÿ‰ä+§¿ÿ²IX?ò_ûyÿÑ¢ˆí/OÕ [Çúèu^ÿW¨ÿ×ßþÒŽ¶¤Ž9T,ˆ®¡ƒÃ# ä¨ ±|5þ¯Qÿ¯¿ý¥hjz”:M„—— 3Ç’D13ž=º:œR)-†Ú[–£Ž8bH¢EHÑBª(ÀP:; uEo:\À³F$ ÙÀ’6ºã•`üEA¨ßu1@×2±H V d}¥±¸ðœŸNç±]%råœú°A¦æÊë7ìA ¦"W~gû¤uÆm]ÞÚXD%¼º†Þ2ÛCÍ @O¦O~ tOEV›Q±¶µŽê{Ûx­äÆÉ^UTlŒŒpr9ªókÚE¼VòË©Z¬W,Ë žhÚåsœ˜Æ}p:‘@s#FЧ>£ qBÐ+]¼ëºíÊ“"ðKH] É rR€ëQÆ–¯skqj·*ŸbˆŠc¿æèB1dc¸È 9‘§EV›Q±¶µŽê{Ûx­äÆÉ^UTlŒŒpr9¡õ’'’öÝd2FÍ*€êâÞ@äv .‹4UiµkXî§½·ŠÞLl•åUFÈÈÁ'#šdš¶› O,º…ªF’˜YÚedPœðÞÝh ¢åZmFÆÚÖ;©ïmâ·“%yUQ²20IÁÈæ¨|-dM½‘®f–˜ƒ#Æ[ åÀþ9Ž=Å䑱EQ‹X±xài.#çv‰"™Õ\º¶Ö@3É Ç™È§.­¦½›Þ&¡jÖ±¶×˜L¥ñÁlàGæ(d\¢ »½´°ˆKyu ¼e¶‡š@€ŸLžü‚ãV¶¶6lÇu½Öí·*Ëå¨_$ç¡Uc‘‘Ç8 H½EfO­Û!6œÑê2»˜¡ŽÞU"I–Ú[8_”sÛÔà]ëÙhÃS¸‚éc1y†!4‹òîÃ÷HÆ $zšÌ*±¿·]9ïÜɼhÒ9’'FU\ä• 7cÚ¤¶yeµ†Iáòfd ñn ±ˆår:àñšrZ(¢…Q@Q@Q@Q@~%ÿW§×ßþÒ’³+OÄ¿êôïúûÿÚRVeD·)QHdrÿ¬µÿ¯¸?ôj×g\d¿ë-ëîýµÙÕGbYÛ@³™ÖÄÍœÈn9 ?E_ûäz –³¢Öm¦Õ¤ÓV;¡4j f¶'%‡Þ#ù=byÆQ)§°QYÖº¡»Ô¥·K9¾ÌªÛ.øØîµ×A¦zá±ÀÉ—M¿•³N-¦· +Ŷm¹%X«}Ö#~˜ “.QU¡Ôlnn¤µ‚öÞ[ˆó¾$•Y× Œ)‘êÚl·†Î=BÕîƒ0¬Ê_#¨Ûœä`þTÑrŠ£c­iš›²XßÛÜ:îÊG ,8'qžýF:Šd:°¸¹‰"²º{i˜„»P¦#…'?{vӌۃ‘‚AÌ*†­m¨ª|«Ÿu´Œ¾b„r„ ãr‘‘ÅK£csu%¬¶òÜGñ$ªÎ¸89ä`ñ@]hªÖúÛª[^ÛÌ̆EXåV%AÚX`ôÏõ¦ [M2´CPµ2,¢O9r$9Ÿ¼pxëÁ .‹”Uhu›©-`½·–â<ï‰%VuÁÁÈ#Š®u«#¨Ce ‹<’Jй†Da …fÚã9„lqü'8 .+*Ë\K¹cG±º¶Yexcy¼²Dݹ~WcŸ‘ù#/^FgZÒ¥ò¼½NÉü×òãÛ:íÇÊ9äüÃqë@”“/QQ%ÌÏ,ÍÍ<ÈÕdÈÈÈí‘ëQèØÜÝIkí¼·ç|I*³®@9¾ßçÛ ÌÔÿäyÿ\ÿA5§z10ã/§×ÛüûtšŸü‚¯?ëƒÿè&—P§ÿ¬½ÿ®ãÿE¥yGÄoù¥ÿ®Iü«Õôÿõ—¿õÜè´¯(øÿ#t¿õÉ?•k?âHˆ|ö«Ÿõ«ÿ\ÓÿAcÂñíuÿ]äÿÑUîÖ¯ýsOýU ÿǵ×ýw“ÿF=f·- QVHQEQEQEQEQEQEQEQEQEQEQEQEQEÌx—þBºwûÿû$•cÿ!ÿ·Ÿý+Ä¿òÓ¿ßÿÙ$¬ ù¯ý¼ÿèÑDv—§ê…-ãýt:¯ «ÔëïÿiGZóÛÅsŽeÜ¡Ò@2G̬O„YÿW¨ÿ×ßþÒŽ·)-†È­­â´µ†ÚÙ (#EÉ8P0OµQ×­n®ô·KE·•×.mîaG>á$cæÚsž£[ñ›áÛQsªK46笩m$ˆ¼óR$€3Œö­:v˪ј÷¶7ȺJÙî~Äûîî]ñF2B6IÞI>ÞüAq¦ê—PÛKqäÉr0hãºxW|®%E B¨®n§•¿Eò#—‡DÔಂ٢µœÅ-Ãy«}<ï¼ê c“¹Il§q"¯.—w …‡–a{›K‡¸³­¼H6—Á$'ß –+“‚ĪÏÔ5«-.òÂÖé§_Êa·ÛI g8,ªBð ùˆáXôS…a($2[[æ{kåí}Iˆ³,e\©#v ÈØ¿69ÁùFá¶+Û+ëÉ4—–)>Ïsö‰”»¿+*…ùNâ»ó“·%GCÓw8+]mX^Ípé—vbÎ{Kkq4)Y+’ìÈAVb:œ¨'Ö¬Ñ@(£2]?þAÖųO·Ã·ÍŸõ{|´äçïa³ÿLð~õiÑEJÁEP0¢Š(¢Š(¢Š(¢Š(Ä¿êôïúûÿÚRVeiø—ý^ÿ_ûJJ̨–å ¢Š) Ž_õ–¿õ÷þZì댗ýe¯ý}Áÿ£V»:¨ìK+&ŸkóÞ¤X¸}ÛŸqçp@xÎ:FŸ—¹«4Vf—â 7Yº»¶³–cqg³íMm$/ðJä:ƒÈÕX]›HŠÇNºƒ^¼º£dtù$Š1“s–L¼¢ªn8fëÍG¦ÚëVÏ R¥”Vÿišyš9ÙÙ•ÌŒèμçø}ñ[”PG*9{mQ¶½Ó¥–rüÙ»”‰T£!e"#vB(#œP9ŸMÒ/a»µ–âxfÝË2´®ÔÀX‡9ymèMt4R°•4ŒË [ë9ž [›O:Y¼ÝÌdmîÏ·n\ë¸ä/Až :ÖúÅ-ì@·66È#Iw1‘Ô (+€ôËdçå¾ZVþ4Ñ.¾Çå=ñûeÛÙA»M¹]Ó'ßS˜ÆÜa²NÈüüÁ2µÃÀ›ÑÉ1°\1 a±‚~SGÆFXùL M'R¬ØÛX#&£5äå'l°8òÌe€“ãîyùb¶ÐukÝ:Pa)g/Í›¹H•J2Xñ²"7d"‚9Àež¢«Ã}oqysk›æ¶Ú&N°ÈRÝ7c®r) \« Ù£ÓIÔ k66ÖɨÍy9IÛ,$ü³`$Ç8ûƒž~Z¶0]GF³6ÊSIfíD ºš=Á@'oÊ¥ós…Éëh¢ÁìÑÎi: ú|ÖI, $v‹µ':”îr¦á ŠH'€xÉÁ8¢ R‰ôT1Xô¶¬›ÛÌ’?,ÆHù~CÐìä˜c'£¢‹"9Í/D»·¿K™­l-äO,öò’`åȲ‹òàä“ÌcI,mÌšìèÂÎÒWž!$ ƒÎ“pm¬Àn÷‡# ùݶŠß¢‹‚EâÕoç’$†o/Ë’%"gÂàù‡¾Lvª6:eôK¥ÛN¶ëo¦ãd©+3͈š1”*ä6ï¼ØÆ9ÎkrŠcåG=¦é:†Ÿx·[-äiÞcpräBRãÊÊ÷æPÅTñ‚M›:ê zòêv‘Óä’(ÄfMÌ~Y0NòЍ¸á›¯5±E ‘Y4ûXïžõ"ÅÃîÜû;‚ÆqÒ4ü½ÍE¥[Ë «Mr»n®œÏ:ä¬@28;T*äuÛžõzŠdQE (¢€ (¢€ Ãñ/ú½;þ¾ÿö”•¹X~%ÿW§×ßþÒ’“ØìîO=×§OonžÙ[==±øcùz{tí’µ‘ýÉç£zôéïííÓÛ+g§¶? /On±òJ(¡z10ã/§×ÛüûtšŸü‚¯?ëƒÿè&´ïF&cåôúûŸnƒ3SÿUçýpýÒê4ÿõ—¿õÜè´¯(øÿ#t¿õÉ?•z¾Ÿþ²÷þ»ý•å¿än—þ¹'ò­güIÕsþµëšè"¬xOþ=®¿ë¼Ÿú1ê½ÏúÕÿ®iÿ Š±á?øöºÿ®òèǬÖ峡¢Š*É (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€9ÿÈWNÿÿd’°,ä"¿öóÿ£Eoø—þBºwûÿû$•cÿ!ÿ·Ÿý(ŽÒôýP¥¼®‡Uá¯õzý}ÿí(ë;Åú5Þ¥¬ècOþÔÓ,äœÝØe˜Z=±¾ÉFÚsÔänã½y_Š|mâOÍ¥G¦j¬WRÓ`Ô'󠉿zà©ÇÈ00‹Å`ÿÂãñ¿ý#ÿÀX¿øšÚ• ²Šœc¿§ù/’…VEuuö½;·â]QŸáíφô\†¹c4j³ÛˆàÝpeòÏ̸ vPTdÍÕ¡âk}__·Óhs-Š\¹»·•,å¹â3å¼bFx¶î$Þœg>)ÿ Æÿôÿbÿâhÿ…Çãú Gÿ€±ñ5¯Õëÿ/õ÷b)«{ñݽ¥×äz ð·‰n|áÍ2ïM¾7Z{N²5­Äh2<²a•¶Ê61EË)LƒÆmjÖ$ð¯†ôøô*[_>I¡³’)ííÙÎWt7,D͆aÿ),A#¼Óþÿè)þÅÿÄÑÿ Æÿôÿbÿâiû ÿËý}æŸ]óÇvö—[ùyÿZŸAx7L¸Ñü%acugmgvE Š;¶N\ž?…Aÿ Æÿôÿbÿâj³{~+üÎiΔ¤äê-|¥þG©Üø~òëá^¥¢ÏáK»›É./¾ÅÔÖóŸ¢¾`ÿ…Çãú Gÿ€±ñ5jÃâ‡ÄmVvƒNš[É•w˜íìF 3…SÆHçÞ‡…¬º~(?uÿ?Ý/ò>•¢¾c›âç-§’ õѱI#{8Õ‘ÁàƒÚ™ÿ Æÿôÿbÿâhú¥oåüP^—üü_t¿Èú~Šó_†z¶»ã? Üj:޽wÑÝ´má·UÚ?4gœ±®Óû"ûþ†=SþýÛñšçš”$â×äh©Á«ª‹ÿ&ÿ#ZŠÉþȾÿ¡Tÿ¿vßüfì‹ïúõOû÷mÿÆjyŸoËüÇìaÿ?þMþFµ“ý‘}ÿC©ÿ~í¿øÍÙßô1êŸ÷îÛÿŒÑÌû~_æÆóñäßäCâ_õzwý}ÿí)+2¤ñ‘wƒyzuíFI, ’æ éo·zÆØÎ"‘øÔuWv°N—$T”“Nû_¥»¥Ü(¢Šfdrÿ¬µÿ¯¸?ôj×g^m¯IrÜÉow%»Yé·Z‚lT;¥„ÆÉ»rž2N@ÆkÊáqøßþ‚‘ÿà,_üMmF”ê§È¶*p„T\æ•õëÝ®‹Èõ¿ øjëJ‚Áµ¼šÅ„×ji$¯ @ÉÞå„‹Ãìd‘ŒºZŧõýNãÃ÷ÑÚê­j±1šÜ˜„hQ‹)ã'?.N;v¯ÿ…Çãú Gÿ€±ñ4Âãñ¿ý#ÿÀX¿øšéxzîþïãÿÒXšrm¹Ç_ñw¿cÓ´;5Òµ{­-ÒO:éu9->Ë,„ì+´¬’(ùXù™n2z³ÁþÖ,|Ue¨^éTQyÒI5ô‘Iq8#‰¡`gg,I2§Êç“æŸð¸üoÿAHÿð/þ&ø\~7ÿ ¤ø ÿOØWþ_ËüËxÈ4×2¥É;¥ýu4ÅaãR¼çŠÍ·ö¿ùÃ(¯sÿ†}ƒþ†9?ð ñtÃ>ÁÿCŸø?øºÛëôû?ëæsýOþž/ü›ÿ‘8ßÁoqà_É-®•%Í£Z5¤×ð!ÈîWï‘À%TaŽÌýï”¶v-—ÂÍã-œz ºA±qeÜ‘G]m3•eRÞo(BŽ@Øk«°ø9©iP4w޵K8Y·˜íÑ£RØ8Y8ŸjÎÿ†}ƒþ†9?ð ñu‹ÄÁ¶õ×þŸ‘§Õ’KßþMÿÈœ‡îmîüzòkxj0b;å•-"R&UhÃzº‚L\sЊ<™íþƒ¯.‚»e¶»KË© tP“Fd‰eƒoŒ‘´6Ò1Ëc¯ÿ†}ƒþ†9?ð ñtÃ>ÁÿCŸø?øºoMß~Ÿ‡ÌK o¶¿òoþDá´ ­/UÖµý^d°µ›hk-)–ÒZ@4f%( fäçïg¦Š÷Eо ø²ÛI¹Ñã°Ôô‰EC$-9E; ¶U°“äbü£ÛZðϰÐÇ'þþ.øgØ?èc“ÿÇÿJXšMõþ¾`°ÖûqÿÉ¿ùð˜Ñà>%þÒUÞ±¶´_6Þ(I/™„m*… €vs\·Šf³¸ñ5ìÖvÖvîÁ…½¬ÞlQ¶Ñ¼+`7nû£o÷I\ëðϰÐÇ'þþ.øgØ?èc“ÿÇÿW]5.m¯˜žêÜñÿÉ¿ùƒø_ö?øJ#þÖþÇþÈçíÚ_gþãìÛæüß{Ùíž1SèŸgÐüâ¶`É©Ã-·Ø<ϲ]ÈIaæìûÛ—a_Pì`†®×þöúäÿÀ1ÿÅÑÿ ûý ràÿâéKM»ëÓðùal¾5ÿ“ò&dWº.…ñÅ–ÚMΆ§¤J,’!iÊ)Ø]²¨¥„Ÿ#§åÆÚòJ6Q^[id-¹ÚÔ(1å‚íp #åùxùI'ÚáŸ`ÿ¡ŽOüü]ðϰÐÇ'þþ.ˆbéÇ]ó°·ûkÿ&ÿäO.ðÞß°ß}—û7ûW͇ÊþÑò<¿#y˜óÿw»w“þÖ3Ž7Væ®,¥Õ5M&txDÚE—ØJDÇæí‚Ve–Pr­1˰fIÚ+µÿ†}ƒþ†9?ð ñujÿà…Æ«:ϨøÆúòe]‚KˆLŒ$ã,猓ǽMÊö×ÌZÜëÿ&ÿäN5±¡Õ¯fHô{Û©­¬^ ö–ð•òH¸`'£FóBü…Nr³JÌ[¾§â_&ÃA„›hZÚ ËÛIP\oŒîI2¨xóXªb>ˆËŒ-v¿ðϰÐÇ'þþ.øgØ?èc“ÿÇÿKëTüÿ¯˜þ­ýõÿ“ò'žhzµÔw¾ ¶s£¥õݲÅ’ÞÐ[´‘Í ¾P]Šç¨V!O-¶ Ò mcSÑœi·Z¤FfŽÚ);“†UŒíÂîlŹA¼8$*šô¯øgØ?èc“ÿÇÿV¬>\iS´úwŒo¬æeØd·„ÆÅr2®8È{U<]=lŸáþbú¯ý<_ù7ÿ"x׉õ }G[•íØ[B«ool–ë0Aƒ.ÅUÁs—ÁänÛœOðö·g£ý§ízwÛ<Ý»~[s·Ïúè%ë‘ÓoNsÆ=cþöúäÿÀ1ÿÅÑÿ ûý ràÿâéýr—/-ŸõóÕ5¿´_ù7ÿ"xÖ¯{£ªMwooöx¤Û¶,F6á@ÿ–h‹Û<(üNIÑÒ#þԴȧ¶ŽîK»k„[‹„Y'V;ä!r ‰Ærs0=SþöúäÿÀ1ÿÅÑÿ ûý ràÿâé¼m;Y'ý|Ãêšükÿ&ÿäNÛý#ÆŸk·þǸƒLÓ`ûSj¼´_.Ú8_!rdýçÊ»7nm¤ds\E{Ÿü3ìô1Éÿ€cÿ‹£þöúäÿÀ1ÿÅÒŽ6šèÿ¯˜<%þÚÿÉ¿ù[à/üˆ×¿ö“ÿEE^¥\W„|©x3J—NÓµ«Ia’s9k‹fÜUW,£Œ(­ÿ³ø‡þ‚š_þ dÿãõçV©ÏQÉ'ø™Ó QIÔ_ù7ÿ"kQY?gñý4¿üÉÿÇèû?ˆè)¥ÿà¶Oþ?Yó>ß—ù•ìaÿ?þMþFµ“öÿÐSKÿÁlŸü~³ø‡þ‚š_þ dÿãôs>ß—ù‡±‡üü_ù7ùŠäPÖ¿ëÂýÕËgÞ/ÌšÍÛ0ä #„©>à $}>â´¼EºtƲ›QÓš+ýö®RÁÕ”4nI˜óÇëM¬Ú¼®Ñ·´Té(ÂI»¾—íÝ~E#­^^ÜYÅi`ò[Ç#]:\Ël}ÃÆN295&›|š–™m{Ð&Œ9UmÛI®}ŽGáK-„RܵÀ’ê)Y3Au$[”@;gçP Ò$O²y–r"* `l1U@lä>ÀÜ;`Ô¥4Êœ°Ó’å–4Û^¯w®‹NÌ«¯Ç®­ÿbö£ü¢¯›kè­VÚ[{]gͽžçw‡µ yªƒotÚ«úç¥|ë^¾YðË×ô83—³IßOý¹÷ +GÃöj¾$ÒôéÙÖ»¸ ‘€ÁYÂ’285ïð¡|-ÿ?úÇýþ‹ÿ×uZð¤í#†4ܶ>y†V‚xæ@…£`À:RAÏ*À‚=ˆ ×¢øïQпá…´›9µ‰Òí–ÏÊylc[xA°¹BdÞxÇÝ?Þ`=þ/…¿çÿXÿ¿Ññº?áBø[þõûýÿ®yb¨ÊIßcEJiXâ<[ÿ·ö¿ö/ì²ÿ ÿ`ý—ÊûGÝýöý¿½éœùÝñß—ã Ky¼ \«h#TƒíÚBÂkEsºE|ŸŸåþè8äœs^—ÿ Âßóÿ¬ßè¿øÝð¡|-ÿ?úÇýþ‹ÿÔGJ6ÕéþVþ¼ÆéÉô9rÂ+ã-ëDŠÚx,OŠÖ9¥‰6³nÌ“ƒûÜä7:ñøbiçŽ(F ¸EœrÌ@Ü} ÿ Âßóÿ¬ßè¿øÝð¡|-ÿ?úÇýþ‹ÿÕSÄÒ‚jìR§9oã ­.n¼I;Ë¢Ke$îúl–MLóÔ±b?|AO;%ÿwœmãË©õx´K¿jšTo]:D»µVœ,ˆ ¨%Så–ýÜÒ³œôvRËè?ð¡|-ÿ?úÇýþ‹ÿÑÿ Âßóÿ¬ßè¿øÝJÄRIk°ýœÏ&ñUìºÅ”7¢ãGbÚÔ"żw *ˆéµÌU °˜Qà*_ù­<Ÿú MöŸõÊ/'~?í¾ÜÿÓL{wü(_ Ïþ±ÿ¢ÿãtñð/ÃkÀ5MlBì®Ñ‹ˆö³( <¾H Ø>çÖ­b©$’ü„éMžâøóÐ|ÏøúþÍ_?wßÿ]/—»¿ú¯+nƒf8ÅbWÑ’ü ðÜîmS[‘‚ª{ˆÉ  *ŽcèÀ gü(_ Ïþ±ÿ¢ÿãuQÆRHNŒ×?y¤ø~X¹·- ÷Ù"Í#:³t-—ŒD?ysäÒ|?¿ññ‹^›#i¤tV^»ˆbû¸dL77·Â…ð·üÿë÷ú/þ7Gü(_ Ïþ±ÿ¢ÿãt–.—pöS)ÿ‘CZÿ¯ ÿô[Vµdø§þE kþ¼'ÿÑmS?…›áUù•lîO=×§OonžÙ[==±øcùz{tí’µ‘ýÉç£zôéïííÓÛ+g§¶? /On±ò$dP½˜q—Óëíþ}º ÍOþAWŸõÁÿôZw£1òú}}¿Ï·A™©ÿÈ*óþ¸?þ‚iušúËßúî?ôZW”|Fÿ‘º_úäŸÊ½_OÿY{ÿ]Çþ‹Jòˆßò7Kÿ\“ùV³þ$ˆ‡Àj¹ÿZ¿õÍ?ôV<'ÿ×_õÞOýõ^çýjÿ×4ÿÐEXðŸü{]×y?ôcÖkrÙÐÑEd…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ljä+§¿ÿ²IX?ò_ûyÿÑ¢·üKÿ!];ýÿý’JÀ±ÿŠÿÛÏþGiz~¨RÞ?×Cªð×ú½Gþ¾ÿö”uŒ~M ˆøº‡P³6Ì8>cNˆwTWcfŽß+}Ó'†¿Õê?õ÷ÿ´£­‰ †g…åŠ7x_|LÊ FÚW+èv³ ŽÄŽô–Ã$¢Š)€QEQEQEQEQEQEQEQEQEQEQEQEQEQEQE‡â_õzwý}ÿí)+2´üKþ¯Nÿ¯¿ý¥%fTKrQE†bëßñë«ؽ¨ÿ(«æÚúW[´¼¹ŽXíRûe”Úi2ÈSaœÆ¡øSœÈâ¸øP~!ÿ ¦—ÿ}IÿÄWvN’’›ëÙö"„ëFÑwK«îÎÁŸò<øþÂVßú5kì ðàŸˆtwOÔþߥËö;˜î<¿2Eß±ƒc;3ޏ¯`ûGˆè¥ÿàÊOþ1Kˆ§RIÇòäM%H§{àQÿ3ZŠÉûGˆè¥ÿàÊOþ1GÚÝf§ÿ «Ïúàÿú ­;щ‡ù}>¾ßçÛ ÌÔÿäyÿ\ÿA4º€Í?ýeïýwú-+Ê>#ÈÝ/ýrOå^¯§ÿ¬½ÿ®ãÿE¥yGÄoù¥ÿ®Iü«YÿDCàGµ\ÿ­_úæŸú«ÿk¯úï'þŒz¯sþµëšè"¬xOþ=®¿ë¼Ÿú1ë5¹lèh¢Š²BŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( cÄ¿òÓ¿ßÿÙ$¬ ù¯ý¼ÿèÑ[þ%ÿ®þÿþÉ%`XÿÈEíçÿFŠ#´½?T)oë¡Õxký^£ÿ_ûJ:ܬ? «ÔëïÿiG[”–à (¢˜Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@~%ÿW§×ßþÒ’³+OÄ¿êôïúûÿÚRVeD·)QHdrÿ¬µÿ¯¸?ôj×g\d¿ë-ëîýµÙÕGbY‡¡O1Õ¼AfÒÉ4׫ä³1o+|1ÈÑe¾bC1~êTU?)Tܪö¶6ö^y·kO+M+,Îç¹'“€EUQ€*„QEQEQEQEQEQEQEQEQEQEQEQEQE‡â_õzwý}ÿí)+r°üKþ¯Nÿ¯¿ý¥%'°ÙÜžz7¯NžþÞÝ=²¶z{cðÇòôöéÛ%k#û“ÏFõéÓßÛÛ§¶VÏOl~þ^žÝ;cä”QBôbaÆ>_O¯·ùöè35?ù^×ÿÐMiÞŒL8ÇËéõöÿ>Ýf§ÿ «Ïúàÿú ¥Ôiÿë/ë¸ÿÑi^QñþFéë’*õ}?ýeïýwú-+Ê>#ÈÝ/ýrOåZÏø’"=ªçýjÿ×4ÿÐEXðŸü{]×y?ôcÕ{Ÿõ«ÿ\ÓÿAcÂñíuÿ]äÿÑY­ËgCEU’QEQEQEQEQEQEQEQEQEQEQEQEQEs%ÿ®þÿþÉ%`XÿÈEíçÿFŠßñ/ü…tï÷ÿöI+ÇþB+ÿo?ú4Q¥éú¡Kxÿ]«Ã_êõúûÿÚQÖåaøký^£ÿ_ûJ:ܤ¶QEÀ(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÃñ/ú½;þ¾ÿö”•™Z~%ÿW§×ßþÒ’³*%¹H(¢ŠC#—ýe¯ý}Áÿ£V»:ã%ÿYkÿ_pèծΪ;Š(ªQEQEQEQEQEQEQEQEQEQEQEQEQEV‰Õéßõ÷ÿ´¤­ÊÃñ/ú½;þ¾ÿö””žÀGdryèÞ½:{û{töÊÙéíÃËÓÛ§l|•¬îO=×§OonžÙ[==±øcùz{tí’QE щ‡ù}>¾ßçÛ ÌÔÿäyÿ\ÿA5§z10ã/§×ÛüûtšŸü‚¯?ëƒÿè&—P§ÿ¬½ÿ®ãÿE¥yGÄoù¥ÿ®Iü«Õôÿõ—¿õÜè´¯(øÿ#t¿õÉ?•k?âHˆ|ö«Ÿõ«ÿ\ÓÿAcÂñíuÿ]äÿÑUîÖ¯ýsOýU ÿǵ×ýw“ÿF=f·- QVHQEQEQEQEQEQEQEQEQEQEQEQEQEÌx—þBºwûÿû$•cÿ!ÿ·Ÿý+Ä¿òÓ¿ßÿÙ$¬ ù¯ý¼ÿèÑDv—§ê…-ãýt:¯ «ÔëïÿiG[•‡á¯õzý}ÿí(ër’ØaES¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Ä¿êôïúûÿÚRVeiø—ý^ÿ_ûJJ̨–å ¢Š) Ž_õ–¿õ÷þZì댗ýe¯ý}Áÿ£V»:¨ìK (¢¨AEPEPEPEPEPEPEPEPEPEPEPEPEPX~%ÿW§×ßþÒ’·+Ä¿êôïúûÿÚRR{‘ýÉç£zôéïííÓÛ+g§¶? /On±òV²?¹<ôo^=ý½º{elôöÇáåéíÓ¶>IE/F&cåôúûŸnƒ3SÿUçýpýÖèÄÃŒ|¾Ÿ_oóíÐfjò ¼ÿ®ÿ š]@fŸþ²÷þ»ý•å¿än—þ¹'ò¯WÓÿÖ^ÿ×qÿ¢Ò¼£â7üÒÿ×$þU¬ÿ‰"!ð#Ú®Ö¯ýsOýU ÿǵ×ýw“ÿF=W¹ÿZ¿õÍ?ôV<'ÿ×_õÞOýõšÜ¶t4QEY!EPEPEPEPEPEPEPEPEPEPEPEPEP1â_ù éßïÿì’Vü„WþÞôh­ÿÿÈWNÿÿd’°,ä"¿öóÿ£EÚ^Ÿª·õÐê¼5þ¯Qÿ¯¿ý¥nV†¿Õê?õ÷ÿ´£­ÊKa…QLŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ?ÿ«Ó¿ëïÿiIY•§â_õzwý}ÿí)+2¢[”‚Š(¤29ÖZÿ×Üú5k³®2_õ–¿õ÷þZì꣱,(¢Š¡Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@aø—ý^ÿ_ûJJܬ?ÿ«Ó¿ëïÿiIIìvG÷'žëÓ§¿··Ol­žžØü1ü½=ºvÇÉZÈþäóѽzt÷ööé핳ÓÛ†?—§·NØù%P½˜q—Óëíþ}º ÍOþAWŸõÁÿôZw£1òú}}¿Ï·A™©ÿÈ*óþ¸?þ‚iušúËßúî?ôZW”|Fÿ‘º_úäŸÊ½_OÿY{ÿ]Çþ‹Jòˆßò7Kÿ\“ùV³þ$ˆ‡Àj¹ÿZ¿õÍ?ôV<'ÿ×_õÞOýõ^çýjÿ×4ÿÐEXðŸü{]×y?ôcÖkrÙÐÑEd…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ljä+§¿ÿ²IX?ò_ûyÿÑ¢·üKÿ!];ýÿý’JÀ±ÿŠÿÛÏþGiz~¨RÞ?×Cªð×ú½Gþ¾ÿö”u¹X~ÿW¨ÿ×ßþÒŽ·)-†QE0 (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€0üKþ¯Nÿ¯¿ý¥%fVŸ‰Õéßõ÷ÿ´¤¬Ê‰nR (¢ÈåÿYkÿ_pèծθÉÖZÿ×Üú5k³ªŽÄ°¢Š*„QEQEQEQEQEQEQEQEQEQEQEQEQE‡â_õzwý}ÿí)+r°üKþ¯Nÿ¯¿ý¥%'°’A œÒíRU—¬aÎ0Ý¥S³×­ïæ0Ú²JáK¶½êIÛÀ¨oµý+IˆÁ}} HUÕòTnã¶Ï‹¼5n“,:¬~s ¹íž:wÇ©&¤¡ú´—Zã9ÉþÒqÿãÀ­ OþAWŸõÁÿôY>¸†ìkH²E&¢ìާ‚6%kjò ¼ÿ®ÿ š]@fŸþ²÷þ»ý•å¿än—þ¹'ò¯WÓÿÖ^ÿ×qÿ¢Ò¼£â7üÒÿ×$þU¬ÿ‰"!ð#Ú®Ö¯ýsOýU ÿǵ×ýw“ÿF=W¹ÿZ¿õÍ?ôV<'ÿ×_õÞOýõšÜ¶t4QEY!EPEPEPEPEPEPEPEPEPEPEPEPEP1â_ù éßïÿì’Vü„WþÞôh­ÿÿÈWNÿÿd’°,ä"¿öóÿ£EÚ^Ÿª·õÐÞ‰¶[HáP¶õe Æ×éU,µ…¿’è@!híÊ))pÅ·tã ÛÖ«ßkúV“‚úú&«ª1ä¨Ü3Çlÿž+*xbÙî^-J{†F|Œ®îqާwéPY­á9G×Û'ûQûôýÜxïÇOnžÙ^§¶? /On±òr¾¹†ê fâ VHŸSvGSÁ\g=}½º{ez®žØü1ü½=ºvÇÈÄ=±øcùz{tíéíÃËÓÛ§l|‡Ol~þ^žÝ;cä:{cðÇòôöéÛ ÓÛ†?—§·NØùžØü1ü½=ºvÇÈtöÇáåéíÓ¶>C§¶? /On±ò=±øcùz{tíéíÃËÓÛ§l|‡Ol~þ^žÝ;cä:{cðÇòôöéÛ ÓÛ†?—§·NØùžØü1ü½=ºvÇÈtöÇáåéíÓ¶>C§¶? /On±ò=±øcùz{tíéíÃËÓÛ§l|‡Ol~þ^žÝ;cä:{cðÇòôöéÛ ÓÛ†?—§·NØùžØü1ü½=ºvÇÈtöÇáåéíÓ¶>C§¶? /On±ò=±øcùz{tíéíÃËÓÛ§l|‡Ol~þ^žÝ;cä:{cðÇòôöéÛ ÓÛ†?—§·NØùžØü1ü½=ºvÇÈtöÇáåéíÓ¶>C§¶? /On±ò=±øcùz{tíéíÃËÓÛ§l|‡Ol~þ^žÝ;cä:{cðÇòôöéÛ ÓÛ†?—§·NØùžØü1ü½=ºvÇÈtöÇáåéíÓ¶>C§¶? /On±ò=±øcùz{tíéíÃËÓÛ§l|‡Ol~þ^žÝ;cä:{cðÇòôöéÛ ÓÛ†?—§·NØùžØü1ü½=ºvÇÈtöÇáåéíÓ¶>C§¶? /On±ò=±øcùz{tíéíÃËÓÛ§l|‡Ol~þ^žÝ;cä:{cðÇòôöéÛ ÓÛ†?—§·NØùžØü1ü½=ºvÇÈtöÇáåéíÓ¶>C§¶? /On±ò2@8%AÚà®@!Ol{{töÂáÉ­¤:šXÊ"G‘#“’F:uãñþz:®¥e¤Ú}¦þâ;xrP3ñó`ã¯Ý=°¼¼^,ðÌW­z5suåˆÒBOîלíã‚sŒú}M!’Ï3Éã›pÄml„*€ýêsô•l×1eªXê¾5Ž[˜çDÓ¤V(z1+§¤À(¢ŠÝkYIó™Ö"w²Ç‰rØ?NžôI"CË+ªFŠYŽÔ“ØV©â j^|rê4n唌‚9àŽ84!|O4±6&d\jÖÊÅ.q î1ÆFzö®«§¶? /On±òyö±â]'W¾ÓÊú)%mVÞMŠÜ槯¨¯AéíÃËÓÛ§l|” éíÃËÓÛ§l|‡Ol~þ^žÝ;cä:{cðÇòôöéÛ!ÓÛ†?—§·NØùžØü1ü½=ºvÇÈtöÇáåéíÓ¶>C§¶? /On±ò=±øcùz{tíéíÃËÓÛ§l|‡Ol~þ^žÝ;cä:{cðÇòôöéÛ!ÓÛ†?—§·NØùžØü1ü½=ºvÇÈtöÇáåéíÓ¶>C§¶? /On±ò=±øcùz{tíéíÃËÓÛ§l|‡Ol~þ^žÝ;cä:{cðÇòôöéÛ!ÓÛ†?—§·NØùžØü1ü½=ºvÇÈtöÇáåéíÓ¶>C§¶? /On±ò=±øcùz{tíéíÃËÓÛ§l|‡Ol~þ^žÝ;cä:{cðÇòôöéÛ!ÓÛ†?—§·NØùžØü1ü½=ºvÇÈtöÇáåéíÓ¶>C§¶? /On±ò=±øcùz{tíéíÃËÓÛ§l|‡Ol~þ^žÝ;cä:{cðÇòôöéÛ!ÓÛ†?—§·NØùžØü1ü½=ºvÇÈtöÇáåéíÓ¶>C§¶? /On±ò=±øcùz{tíéíÃËÓÛ§l|‡Ol~þ^žÝ;cä:{cðÇòôöéÛ!ÓÛ†?—§·NØùžØü1ü½=ºvÇÈtöÇáåéíÓ¶>C§¶? /On±ò=±øcùz{tíéíÃËÓÛ§l|Œ Pv†8+SÛÞÝ=°¯éíÃËÓÛ§l|”u]JËI´ûMýÄvðä gãæ*ÀÇ^=º{a@3¤ÖÒM,e#È‘ŒI‚I#:ñøÿ<Ùæyƒò¨¢ñg†b½kѨۛ¯,F’v¼çoœgÓêjµ–©cªøÖ9lncN‘X¡è|Ĥ3§¢Š) *®§ÿ «Ïúàÿú «UWSÿUçýpýÐ4ÿõ—¿õÜè´¯(øÿ#t¿õÉ?•z¾Ÿþ²÷þ»ý•å¿än—þ¹'ò­güIÃàGµ\ÿ­_úæŸú«ÿk¯úï'þŒz¯sþµëšè"¬xOþ=®¿ë¼Ÿú1ë5¹lèh¢Š²BŠ( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( cÄ¿òÓ¿ßÿÙ$¬´ÂÚY­ AÝÁšßvÝÌIçw½ox—þBºwûÿû$••bîg¸œ #,*G ´àœ{ ó鎜ÒRqwCqMjeýžÃþ4ûð¿ü]g°ÿŸÍþü/ÿ] 1æŠ'‰$‘¥m‘«0Û°=NŸ >”ý¬»“ìâ`ýžÃþ4ûð¿ü]g°ÿŸÍþü/ÿ[Âhšw€H†dUvŒ0ܪI‘Ø­¡ô§ÑíeÜ=œN{ìöóù£ÿß…ÿâèû=‡üþhÿ÷áøºèj¬ò¸ÿ®èRQíeÜ=œL³ØÏæÿ~ÿ‹£ìöóù£ÿß…ÿâë¡¢k.áìâsßg°ÿŸÍþü/ÿGÙì?çóGÿ¿ ÿÅ×CLDÓ¼D3"«´a†åRHŽÀ•l}¥Ö]ÃÙÄÁû=‡üþhÿ÷áøº>Ïaÿ?š?ýø_þ.º«ü…n?ë„_ú”{Ywg#ìöóù£ÿß…ÿâèû=‡üþhÿ÷áøºèh£Ú˸{8œ÷Ùì?çóGÿ¿ ÿÅÑö{ùüÑÿïÂÿñuÐÑGµ—pöq9ï³ØÏæÿ~ÿ‹£ìöóù£ÿß…ÿâë¡¢k.áìâsßg°ÿŸÍþü/ÿJm¬@Ýé‘û…çÿ­©wËqmiì{‰6ïþê€Yˆ÷À8ã®*úÜÍc-Õ®™m6¶Åw°‹yf*[ç\œcžIÁÎ8ÌTÄû8óI— *nɯÙì?çóGÿ¿ ÿÅÑö{ùüÑÿïÂÿñuÚèZ̺¥¬Ï2’)ŒGhÀ?*°=Ofúúõ:žw½T+9ÅI=3¤¡'µG›}žÃþ4ûð¿ü]g°ÿŸÍþü/ÿ^“ç{Ñç{Õó˹<‘ìy·Ùì?çóGÿ¿ ÿÅÑö{ùüÑÿïÂÿñué>w½w½òî‘ìy·Ùì?çóGÿ¿ ÿÅÑö{ùüÑÿïÂÿñué>w½w½òî‘ìy·Ùì?çóGÿ¿ ÿÅÑö{ùüÑÿïÂÿñué>w½w½òî‘ìy·Ùì?çóGÿ¿ ÿÅÒ‹k zAdþáxÿÇëЮµl¬ç»¸}AI#`ª£$àrx™y¨h·öBk¸LÁ\ıµ«ùèädªÇ·Ì · ÀÎÑ»§4s˸rG±ÇýžÃþ4ûð¿ü]g°ÿŸÍþü/ÿ]ØD¶ßèó5Å´ñ‰Vœò¥A†ìŸFõ긨¢•&zg©‚¤uv#Ò¥Ôšê>H˜?g°ÿŸÍþü/ÿGÙì?çóGÿ¿ ÿÅ×CEÖ]ÃÙÄç¾Ïaÿ?š?ýø_þ.³ØÏæÿ~ÿ‹®†Š=¬»‡³‰Ï}žÃþ4ûð¿ü]g°ÿŸÍþü/ÿ] {Ywgžû=‡üþhÿ÷áøº>Ïaÿ?š?ýø_þ.º(ö²îÎ'=ö{ùüÑÿïÂÿñt}žÃþ4ûð¿ü]t4QíeÜ=œN{ìöóù£ÿß…ÿâèû=‡üþhÿ÷áøºèh£Ú˸{8œ÷Ùì?çóGÿ¿ ÿÅÑö{ùüÑÿïÂÿñuÐÑGµ—pöq9ï³ØÏæÿ~ÿ‹£ìöóù£ÿß…ÿâë¡¢k.áìâsßg°ÿŸÍþü/ÿGÙì?çóGÿ¿ ÿÅ×CEÖ]ÃÙÄç¾Ïaÿ?š?ýø_þ.³ØÏæÿ~ÿ‹®†Š=¬»‡³‰Ï}žÃþ4ûð¿ü]g°ÿŸÍþü/ÿ] {Ywgžû=‡üþhÿ÷áøº>Ïaÿ?š?ýø_þ.º(ö²îÎ'=ö{ùüÑÿïÂÿñt}žÃþ4ûð¿ü]t4QíeÜ=œN{ìöóù£ÿß…ÿâèû=‡üþhÿ÷áøºèh£Ú˸{8œ÷Ùì?çóGÿ¿ ÿÅÑö{ùüÑÿïÂÿñuÐÑGµ—pöq9ï³ØÏæÿ~ÿ‹£ìöóù£ÿß…ÿâë¡¢k.áìâsßg°ÿŸÍþü/ÿGÙì?çóGÿ¿ ÿÅ×CL’XáMòȈ¾¬p(ö²î?gìöóù£ÿß…ÿâèû=‡üþhÿ÷áøºØyæ,’A –ÜJb•ÑKp~èœ=qÉÎÙ¡š;ˆ–Xœ:0ÈaÞ¢8žfÔe{³cìöóù£ÿß…ÿâèû=‡üþhÿ÷áøº×77}%¥ž™uy$Q$²š% °_¾ëÏÈÝ(7 }¥æ™ug$±<±™Z& ¨o¸íÏνjý¤ÅÉ#ìöóù£ÿß…ÿâéñXÚÎû!ŸJ‘±©n ý¬j ¶Ó¯¤¨ ‚%—-s# X y².OÊzgzÔvÚņ³v,L*Íå´À‹ˆ&i9ŠF*~q‚qß(ö“Hš6–Ïn%2H²<¼•M | tÉô¯$øÿ#t¿õÉ?•zÝ›ÈVX¥mÏ …7x`O¾ϾkÉ>#ÈÝ/ýrOåR›nì«YYÕsþµëšè"¬xOþ=®¿ë¼Ÿú1ê½ÏúÕÿ®iÿ Š±á?øöºÿ®òèǤ·:(¢¬¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(˜ñ/ü…tï÷ÿöI+†ñ¯Û"Ñ-þÁg¿XŸýñ±â+“ó­Ó)äk¹ñ/ü…tï÷ÿöI+Òò(¢‘g$O/ÝØ¬nàb¡îQÌÂuÍêv¶Ó¤ƒOÒþÙ„PïS,rR<1B¢“±1°eN~¡«E&£§/ü%>f™ ìnºÆûÝÈÖ÷aãÞÊà,|$yy\w¿Úÿrçÿ¤ÿâhþЇû—?ø 'ÿH;—[ÕRò{˜®¡‹ÍŽÞÔ&‘aAn³_ys :.ð‘|Û ·™ò¹H»±­ÌC>¯€‘ÙF>̈ÑÊ..åƒÍÜñÌ#P¨Xd)CƒÛÿhCýËŸü“ÿ‰£ûBî\ÿà4ŸüM08ø|A~Ú¦Ÿmq©n_´Él ´x~Õ9K™"ó%‰×˜¶F 4[H;ÎÜ}ÎÂ?ù Ü׿ô)(þЇû—?ø 'ÿP%ÜcPšSÎÆŠ5ìÒuóü>â}Ρak©k:†ƒ=œ6÷‘ÚÆú¬±Gn“ï¸wie(耒¬I’1ÆàDöî·y¥Z¼wÌú—›cmq #¤SG4‹ç´ si:*Ÿ#0ØhCýËŸü“ÿ‰£ûBî\ÿà4ŸüM08WÅz­®½qŸ43;}¢(ô¹¥Wœ4pHêÂŒ8Wh”‚dl¬ƒnaMZ(¼Cvö¾)ûUœ±ÙÅuªï·o²¯ú[¹PF¹qüÊÖc©\w¿Úÿrçÿ¤ÿâhþЇû—?ø 'ÿ@®›­Ü]j°ê:ר ãìoû¤þÓýü¨9u!³BߺÛþ»#†\uQÿÈVãþ¸Eÿ¡IGö„?ܹÿÀi?øš.ã„Ò˜îv4Q¨?f“¨/Ÿá÷€à´KGKðžªiðiÚSËmcoºÜy¿j3Mó&]©óÞ1–?½l2õ;·­í®´Ö‡Uvº†îÚÞ Xƒ^@Â/2r¡C’7Ìw!TW#ålôÿÚÿrçÿ¤ÿâhþЇû—?ø 'ÿL>³ñF©'‡í®,u¤Õ'žÂ9¯]Ì!tùHTäÆ˜Œ’fýâ¶<¬à…`u4=OYÔ5M>Õõ‹imJÜÊÓ[mŸÏHÚßK墓ºGRQq·+÷Æåéìå²°±·³µ‚æ;{xÖ(“ìòª£dŒžz›ûBî\ÿà4ŸüMyÅž£{¥øEŽÆù.n¡ÒÚ)Ìâ Ö $³I²¦c«»á±€\6Ð*ìž"Õ"Òíä›Z¶–#<ª§\C%ÕÐ ›V$+ä38!O ,[ºþЇû—?ø 'ÿGö„?ܹÿÀi?øšymºÎ˜é£ÿè¶«‹2 ×Ü‚Jùrmx¯—ŒîTÀÖQ¸êV-sâ7rÅ¡ulaÔëWî-ìîØ5ͤèdŒ6?1ì+Ô½¢KúÙ—N|­ÿ]S0!¾]3F³Ô!¸¹—L_ÈÉ+!°‚¡p>Q×9éføÜé+~.®æÑo¯#µÌZ6§ O$ø,BÛ©`Qä?!`¯¸ªqòàî­…ŠÜ,ëlÓîõÚ¿Eè?*»ç×eYÓi*jÖþ­ò9iB¬nêJÿÖ¯ÕžâkyþÃâ--“Zm¶£ªÅ&á¼›ˆ\&ïU/-ðÀ)3×/­£KýŸãË·Ùºeض÷´ym¼ŸûçkÅÉ,|­Çï ê¼ú<úÆæÖ<ímol´}sÄ6º}„öSê÷P„!îUc‘L`l U¹g‰>_îíkÚÞ©¤I<2ëž]Ü"æÊ1H5;¦iI€+Ì£lJ2 Y‰ ]WŸGŸEÂÇÿ n«ÛdÓµoí]M.µÛHÙýž8¾Ñä¶ÈÔJ2Ñ™f ù˜êÊA§kÚýåÅ•œ^"³ž›å„ÞZÉáU6÷é½aŠ0ÃËŒ¨ÚÅIËnV {H ±…¡¶MˆÒÉ)‰ùÝ˱çÕ˜ŸÆ§óéÜ,yûêWšE´†ÆçíšœZÆ£*i’Æc¾–-ªª$f-– B±HüQ«Ç¤\I'‰´™-–x¼P…äÁY ÇÍoO–2”œÜÊ ÷ž}}  Já1{} ̰‹6x®âQ3/—–YaC‘WœŽ•GíöŸÙYûd?jò¼Ÿí½ãÉÙæoû7Ú~þ6üžn>÷9ó>ZÓóèóè¸X›L¼·¹Òl紋ɶ’x£Úb 8ZþÑšCwjŸÞGœ @þL;Àö!þ}}+ŽÅHfIã„ã¡`ƒÜØÓê;‹e’S<äÎq–䫼¹ã¿^8â ûMÄ?ññjØã/y€~ ùH tU_í¹sÿ€Òñ4hCýËŸü“ÿ‰ eª*¯ö„?ܹÿÀi?øš?´!þåÏþIÿÄЪ*¯ö„?ܹÿÀi?øš?´!þåÏþIÿÄЪ*¯ö„?ܹÿÀi?øš?´!þåÏþIÿÄЪ*¯ö„?ܹÿÀi?øš?´!þåÏþIÿÄЪ*¯ö„?ܹÿÀi?øš?´!þåÏþIÿÄЪ*¯ö„?ܹÿÀi?øš?´!þåÏþIÿÄЪ*¯ö„?ܹÿÀi?øš?´!þåÏþIÿÄЪ*¯ö„?ܹÿÀi?øš?´!þåÏþIÿÄЪ*¯ö„?ܹÿÀi?øš?´!þåÏþIÿÄЪ*¯ö„?ܹÿÀi?øš?´!þåÏþIÿÄЪ*¯ö„?ܹÿÀi?øš?´!þåÏþIÿÄЪ*¯ö„?ܹÿÀi?øš?´!þåÏþIÿÄЪ*¯ö„?ܹÿÀi?øš?´!þåÏþIÿÄЪ*¯ö„?ܹÿÀi?øš?´!þåÏþIÿÄЪÇÔd{}R †Uh‘8Á@<î9blc c<çÞþЇû—?ø 'ÿGö„?ܹÿÀi?øš‰ÅÊ6NÀŒÙlRw¶ûd¢iK<ËïI²¥A dðÂ#¦î“o,®fÜI áŽX 3îq“îI¨ì –h–Öñ]QÉki 1Æ2NÞ¼åÒ¬ÿhCýËŸü“ÿ‰¬éRq³—Å䊔¯¢ØK­+N¾”Kwakq ]¡å…\é’:rhµÒ´ëL¶–¶òÚ^(U ™§—ûBî\ÿà4ŸüMÚÿrçÿ¤ÿâkréú¥¾‘âùoèG=¥ºÆñZK0%^mÃ(§n^¾´j¥¾¯â lÒèÇ¥ÂÈòÚKž£.£$ínž”Ïí¹sÿ€Òñ4hCýËŸü“ÿ‰§}, _øù¾ÿ®ãÿE¥y/Äoù¥ÿ®Iü«Ö,$Ye½u œ}å*Õ§cÍy?Äoù¥ÿ®Iü©­ÁžÕsþµëšè"¬xOþ=®¿ë¼Ÿú1ê½ÏúÕÿ®iÿ Š±á?øöºÿ®òèǤ·t4QEY!EPEPEPEPEPEPEPEPEPEPEPEPEP1â_ù éßïÿì’W'¨kߨ¶Ð¶kçOp|ëû¯³@»d?)“k|ç9 ŽB¹ÏËÏYâ_ù éßïÿì’W74—‘Û'Ù5->Ë3Ï»í–æ]ÿ¼8Û‰ç=zŽáîQq5{dÍ̉ÐO­Â¦çTžAÔhÜ •>l¼ãœ3Jñ›¬íû³ñ‰£ó­¤‡ÍN>dÞ£zò¹+7.zŒåÚi%•æ—4ZŒ,º}¢Û yT³”R‘¹ •Y&Æ›Ÿá\?L²°Ó¿±âom'önœÖyG™Ÿ'çûÜ©éÏÞëÇ( MâÍ>Òd¸š4¶ó¼É$µ•c&-Þ`G+µØls…$áXö4÷ñ6‘DæåÚ9Ìó <$v BFv±Ä)H×1ýŠÚž™ye¨k6[µÎ¡%´q¨2!§Eg0†]“3m §%rx9×Ö,mu9îÌZÕœßÚ +Åpš _YÞ66%~Ha÷xàåØ üM¤I<Ñ—ˆDÒ£K<EhËoGPŒWk“‚xV=4ÆñfjÓ\M4‚%Š{Yc•˜«2(c»c…ãæ*Tdñ\ô:2jVwš¶­g‘»¿–`Ú%f ²Rf m¹èAµ¦èzmݭпÑ`x.DÅ4û8í£p"–0ÜÍ»÷Ää±PŒ’K£mâËI³ç/ÙB^Ïk#Ü [UukùÄHïg,ÍòÞL˜Ç ŒpFr~é4þ&Ò-žäMrè¶ë#<¦ <³å‚]UöívP­•RXmn>SˆZº*ÿl$ŸÙ’ó'™^I¿rñ|Í‘óû‰îGNk#PÐmoí.l[_³K&k© P€É³¬ªÅ›~GŸ! OÝù¸9@nßø†ÎÏCM]]ͧŠ?5ÛËM*ÆdÜG*n£8 Õkoi×úêéÖ6wQ(yðÜogbƒh#pg’8oPYÕÃR´Ží+hö\Á>íêsåJ’c¯}˜Ïl皥seaqâk}gû^Ù|Ÿ+÷;”çb\¯]ÝþÓžŸÁïÀ¥Æ¯ ¶¨,]\·Ù$º;b‘˜ª2!ÏÍÈpÊü§vAg­é÷óÇ?žêíåI Æê¦íÊÀ?¼Œà€H`FG5Ï_Ù NâÎ+^Ùþϧ<]3 [™ZH[0Ü¡òõà“h<°Áá$i763ê:Z‰ïEÎÛ8E¼H¦%†DToÌRsÁ°ä ,Iˆ4Ù>ÄVY¼«ØÒX&6Ò˜?ÜB»U+I c$gN¸íSD°Ôu¸õíM/幂ãtð,³Çå26È¥Þ<´;9O.çø°:í;ùý¶ÿ¿«þ4jŠ«ý§aÿ?¶ß÷õÆí;ùý¶ÿ¿«þ4 µEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿµEUþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿ-ãæûþ»ý•ä¿¿än—þ¹'ò¯Zµÿ›ïúî?ôZW’üFÿ‘º_úäŸÊ©n&{UÏúÕÿ®iÿ Š±á?øöºÿ®òèǪ÷?ëWþ¹§þ‚*Ç„ÿãÚëþ»Éÿ£’ÜÐÑEd…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ljä+§¿ÿ²IYºü{?ýw›ÿF5ix—þBºwûÿû$•›§ÿdzÿ×y¿ôcT2‘jŠóùÁém«øþùºRüIß{*ù¯]†5›»ûëT“Pû[ÍdÓßÛíþ%×Ljp 2}éFÙ 7îúðÙV­¢¼âóÄ÷ðXêsÚk¿i¾ŠMI$²Û }Ž8„æ96ª‡ÇË’þ™#zæ©©iRO ºÆË¨l…Åœb(Ðj7%¤Ì!XebP¨C Ë1 Ñ`;J+Ï¿á$Ô“í’XjŸÚz’\ê¶•²7ò/?Êm‘¨e£…rÌAó1Õ”ƒOÕõ»Éìí"׬çŠâõa7VÒ%ÙÁ;ºïXcpòã `•'-•`¤°\ô+ÎöïK·“ìsý¯QV¿‘tébÌ$Ç{$[T(y˜RrÀü¤A|~ ÕK¸’Oir[,ñv—ð³à«—Ž9L “åB”œÜÊ, ¼ÑDñ$’"4­²5f»`¶©Â“ôÒŸ\®¨³jxKmÍõ¤Ò݆ódŽ5¸CöIÉÜ¥JìFÜ œcŠÂÖ|]©XéFT¿† ‹/µ×SÇ _ySI¨Sê†?õ‹‚7 ¥€ôz+’¾Õ5ëyµóî4øî/Cya¾Ó#}ž-‹ÈùË®AÜ~ÍÎ<ÁSxCQ¾¾û`¹Ôìõ#ØcšÚán0Çvå2$1§)Úaœ“†Z,I Ñ\AðH’Ã"‡Iƒ+)ÔO¯.ÑõÛÛ? iÑéºjip›’í]5·À˜,‰û°ælÈNpB°6¥ñ¶,mUµ­9-žI¿âgöÔHßh‹jyílbv%åá#GÙGÉ`¹èôWkªë$O¨ÜêûF²X ÄÉm¼áÐJ39`F#‚ ­vÿR‡^¸ŽÛQš"ŽÁIdqq$,䲓¹@yÆ@ÈaKÖÓh¢x’IVÙ³]°[ÔáIúé\ þ$Ô’ ¯3Tò.-#™l#):¤ñÏ<~YrìDPåbÚs)Æ2 gø«Uycw›UCúŽ4—XJÅ[],rÊï!”#|Ä©ó:`€ éq^ZÍu=¬W0Éqo·Î‰pÊîFG#=jjó·ŸPÓ4µ½²w¼õM­í$QÑoXÚ¡òÌ£?1=@  í5íHÛâçÄm§µÊ$º¥µÄsý˜åc™|„„e’ÁV#Ìäüé‚ÀwÑMè^E ÈYIVw}4úâôËÉ-¾\]Yê–`ý¶ëeýäÉl­y /¼)@ÄTí+¸”Ž+>×U¾Ô5«-µ ëe¼Xîe‚×혿o¼¨ÈT˜©¼¼I,¢Q\^­Ü\ê‘ZêZרR)r|¤:ƒ¥ÌÑ2êw6Ø¢$G´ƒ)é•ðn³«êwÇûBöÎ]öÞlö±MæIi.W÷l«ùXË‚’3¶W‚v¹%€ìbš)м2$в0 2’¬8î úiõæ:‡ˆ®ô]"á­/!´{kFçmÕÄqGv~Õ6#@ѳHÃg̪Ñ$_›æmjÚ•ÕõÆ¥i.¦î »†V{‚K{(’î/šBS|rª†br|®zªX.z%ÏëµÒt·Vò¬î$TŸUÌ_$~S²É¸¯–7:¢ä®ü Ëmnáu5ŽkΕnmb´´ýÑû}³¬^eÆîlo”WLÈiEyö—­ë"ÓO¸ŸTšàµ¶™q"É@9»”Äêv !T.åÁ$î,0¥ëzÈ´Óî'Õ&¸-m¦\H²Enå1:¨U ¹pAÉ;‹ XA¢¸_‡²¼÷Þ\÷6Ö· `(Ñ“ì–ÊfT nàÉÁØ0F2+º Š( aEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEP[_øù¾ÿ®ãÿE¥y/Äoù¥ÿ®Iü«Ö­ãæûþ»ý•ä¿¿än—þ¹'òª[‰žÕsþµëšè"¬xOþ=®¿ë¼Ÿú1ê½ÏúÕÿ®iÿ Š±á?øöºÿ®òèǤ·t4QEY!EPEPEPEPEPEPEPEPEPEPEPEPEP1â_ù éßïÿì’VnŸÿÏÿ]æÿÑZ^%ÿ®þÿþÉ%féÿñìÿõÞoýÕ ¤+jHåòÝYN2¨ þtŸÚvóûmÿWük+EÓtû“¬Ms§Y\Ký«*ožÙ$m¢8ˆ`xäþu§ý¤ÐJÿÀøš4;Yô›(Z+{«dF’IHóÁù˱ä÷f'ñ©¿´ì?çöÛþþ¯øÓ±ôúé_øÿGö>‘ÿ@]+ÿ!ÿâihv³é6P´V÷VÈ$’‘çƒó;—cÉîÌOãSiØÏí·ýý_ñ¦ÿcéôÒ¿ðþ&ì}#þ€ºWþCÿÄÑ þÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿoö>‘ÿ@]+ÿ!ÿâhþÇÒ?è ¥à?üMïí;ùý¶ÿ¿«þ4iØÏí·ýý_ñ¦ÿcéôÒ¿ðþ&ì}#þ€ºWþCÿÄÑ þÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿoö>‘ÿ@]+ÿ!ÿâhþÇÒ?è ¥à?üMïí;ùý¶ÿ¿«þ4iØÏí·ýý_ñ¦ÿcéôÒ¿ðþ&ì}#þ€ºWþCÿÄÑ þÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿoö>‘ÿ@]+ÿ!ÿâhþÇÒ?è ¥à?üMïí;ùý¶ÿ¿«þ4iØÏí·ýý_ñ¦ÿcéôÒ¿ðþ&ì}#þ€ºWþCÿÄÑ þÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿoö>‘ÿ@]+ÿ!ÿâhþÇÒ?è ¥à?üMïí;ùý¶ÿ¿«þ4iØÏí·ýý_ñ¦ÿcéôÒ¿ðþ&ì}#þ€ºWþCÿÄÑ þÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿoö>‘ÿ@]+ÿ!ÿâhþÇÒ?è ¥à?üMïí;ùý¶ÿ¿«þ4iØÏí·ýý_ñ¦ÿcéôÒ¿ðþ&ì}#þ€ºWþCÿÄÑ þÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿoö>‘ÿ@]+ÿ!ÿâhþÇÒ?è ¥à?üMïí;ùý¶ÿ¿«þ4iØÏí·ýý_ñ¦ÿcéôÒ¿ðþ&ì}#þ€ºWþCÿÄÑ þÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿoö>‘ÿ@]+ÿ!ÿâhþÇÒ?è ¥à?üMïí;ùý¶ÿ¿«þ4iØÏí·ýý_ñ¦ÿcéôÒ¿ðþ&ì}#þ€ºWþCÿÄÑ þÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿoö>‘ÿ@]+ÿ!ÿâhþÇÒ?è ¥à?üMïí;ùý¶ÿ¿«þ4iØÏí·ýý_ñ¦ÿcéôÒ¿ðþ&ì}#þ€ºWþCÿÄÑ þÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿoö>‘ÿ@]+ÿ!ÿâk,išcx¸@t3ÉM2IDbÊ »¼è†HÛÉÆ@ÏLœu4ô[ûNÃþm¿ïêÿÚvóûmÿWüi¿ØúGýt¯ü‡ÿ‰ªº•®‡¥éwz„úšÐÚÀ󺦟 bª¥Ž2£œ ZsûNÃþm¿ïêÿÚvóûmÿWüi¿ØúGýt¯ü‡ÿ‰£ûHÿ .•ÿ€ÿñ4h¿´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ›ý¤ÐJÿÀøš?±ôúé_øÿF€;ûNÃþm¿ïêÿÚvóûmÿWüi¿ØúGýt¯ü‡ÿ‰£ûHÿ .•ÿ€ÿñ4h¿´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ›ý¤ÐJÿÀøš?±ôúé_øÿF€;ûNÃþm¿ïêÿÚvóûmÿWüi¿ØúGýt¯ü‡ÿ‰£ûHÿ .•ÿ€ÿñ4h¿´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ›ý¤ÐJÿÀøš?±ôúé_øÿF€;ûNÃþm¿ïêÿÚvóûmÿWüi¿ØúGýt¯ü‡ÿ‰£ûHÿ .•ÿ€ÿñ4h¿´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ›ý¤ÐJÿÀøš?±ôúé_øÿF€;ûNÃþm¿ïêÿÚvóûmÿWüi¿ØúGýt¯ü‡ÿ‰£ûHÿ .•ÿ€ÿñ4h¿´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ›ý¤ÐJÿÀøš?±ôúé_øÿF€;ûNÃþm¿ïêÿÚvóûmÿWüi¿ØúGýt¯ü‡ÿ‰£ûHÿ .•ÿ€ÿñ4h¿´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ›ý¤ÐJÿÀøš?±ôúé_øÿF€;ûNÃþm¿ïêÿÚvóûmÿWüi¿ØúGýt¯ü‡ÿ‰£ûHÿ .•ÿ€ÿñ4h¿´ì?çöÛþþ¯øÑý§aÿ?¶ß÷õÆ›ý¤ÐJÿÀøš?±ôúé_øÿF€;ûNÃþm¿ïêÿÚvóûmÿWüi¿ØúGýt¯ü‡ÿ‰£ûHÿ .•ÿ€ÿñ4h¿´ì?çöÛþþ¯øÕˆÝ%d•ãnU”äqÁúƒU±ôúé_øÿZ‰½ªF‰,XTE ª76€=¨¯ü|ß×qÿ¢Ò¼—â7üÒÿ×$þUëV¿ñó}ÿ]Çþ‹Jò_ˆßò7Kÿ\“ùU-ÁžÕsþµëšè"¬xOþ=®¿ë¼Ÿú1ê½ÏúÕÿ®iÿ Š±á?øöºÿ®òèǤ·t4QEY!EPEPEPEPEPEPEPEPEPEPEPEPEP1â_ù éßïÿì’VnŸÿÏÿ]æÿÑZ^%ÿ®þÿþÉ%féÿñìÿõÞoýÕ ¤Sðÿú­_þÂóè¸k/ßXùWºm…œ:³ê7ÒÍ;…dOöƒ•—æd,м‘À+Æß‡<1§ëÍ­MzŽæ=RUQçÌ ~î2xGQŸ|gè+kþÖƒÿ>Íÿ7üv…sÍôßÌú¬O£ÍýŒ·1Lö÷ñÙ„Ü!ºVo.ò𠑸àvQ¼)«6›k –Óy&ÚÎ]B{›€“‰‰Ys¾ö™Ÿ®ÀA,¢½#þÖƒÿ>Íÿ7üv«¿‚<3£ ƒFÂêh¤š4ûEÏ̈P1Ï›Ž ‰ùû,)øzÊM;B¶µ”L¥7“:3¢–%Tìj« :t¿ð®´ùöoü ¸ÿã´ºÐçÙ¿ð&ãÿŽÑÊŠ_øWZüû7þÜñÚ?á]h?óìßøqÿÇirŽâQP'‚<3&£5‚ÆÆê£šDûEÏÊŽ\)Ï›ŽLoù{бÿ ëAÿŸfÿÀ›þ;G(\J)á]h?óìßøqÿÇhÿ…u ÿϳàMÇÿ£”.%¿ð®´ùöoü ¸ÿã´ºÐçÙ¿ð&ãÿŽÑÊŠ_øWZüû7þÜñÚ?á]h?óìßøqÿÇhå ‰E/ü+­þ}›ÿn?øíð®´ùöoü ¸ÿã´r…Ä¢—þÖƒÿ>Íÿ7üvøWZüû7þÜñÚ9BâQKÿ ëAÿŸfÿÀ›þ;Gü+­þ}›ÿn?øí¡q(¥ÿ…u ÿϳàMÇÿ£þÖƒÿ>Íÿ7üvŽP¸”RÿºÐçÙ¿ð&ãÿŽÑÿ ëAÿŸfÿÀ›þ;G(\J)á]h?óìßøqÿÇhÿ…u ÿϳàMÇÿ£”.%¿ð®´ùöoü ¸ÿã´ºÐçÙ¿ð&ãÿŽÑÊŠ_øWZüû7þÜñÚ?á]h?óìßøqÿÇhå ‰E/ü+­þ}›ÿn?øíð®´ùöoü ¸ÿã´r…Ä¢—þÖƒÿ>Íÿ7üvøWZüû7þÜñÚ9BâQKÿ ëAÿŸfÿÀ›þ;Gü+­þ}›ÿn?øí¡q+%?äuoû?þеÿá]h?óìßøqÿÇi­ðÿCŠD 71¶.®W°{ÈʩǨ”ì+˜î‰=ýòs‹{èÅž¤0>h.:œŽ ±ü¸?¿ÝŸW1âëWúŽ¡5½„ßi¹Žê&„ZDZ5¼©–âflù9v†ŽHï$ð‡ƒáÕ!Ò帶MBdߣ_Ì%uç•O;$|­È¥HžðÌšŒÖ ¨bŽií?*9p§>n91¿åî(°\ã5 [šÝ4»;I¡–;Ûû˜õ2,KçGs呆óù8 ã tü!£6“öÂ-o- —`Xn~ÌŸ0Ý–Û¨ATn$±Û‚Qž’ønêÞ+‹tY •Ç$ww ®¤dD¸ ŽsRºÐçÙ¿ð&ãÿŽÑ`¸”UI¼!àûm,j“Ü[E§”Wo2ÄU±´ï3c#<äTzw…¼«Êñé³Ey¶$˜¼—…‡í?4Ry¥Ê;—è¥ÿ…u ÿϳàMÇÿ£þÖƒÿ>Íÿ7üvŽP¸”RÿºÐçÙ¿ð&ãÿŽÕ=CÁþÒ„-~VÝ&vDy.®Båcy-æá@HÜäàqG(\·ETÓ|!àýfÝ®4»‹kèÊ4–·óJ¡° YˆÎ8÷sþÖƒÿ>Íÿ7üvŽP¸”RÿºÐçÙ¿ð&ãÿŽÑÿ ëAÿŸfÿÀ›þ;G(\J)á]h?óìßøqÿÇhÿ…u ÿϳàMÇÿ£”.%¿ð®´ùöoü ¸ÿã´ºÐçÙ¿ð&ãÿŽÑÊŠ_øWZüû7þÜñÚ?á]h?óìßøqÿÇhå ‰E/ü+­þ}›ÿn?øíð®´ùöoü ¸ÿã´r…Ä¢—þÖƒÿ>Íÿ7üvøWZüû7þÜñÚ9BâQKÿ ëAÿŸfÿÀ›þ;Gü+­þ}›ÿn?øí¡q(¥ÿ…u ÿϳàMÇÿ£þÖƒÿ>Íÿ7üvŽP¸”RÿºÐçÙ¿ð&ãÿŽÑÿ ëAÿŸfÿÀ›þ;G(\J)á]h?óìßøqÿÇhÿ…u ÿϳàMÇÿ£”.%M7ú«úæô&¨¿á]h?óìßøqÿÇjY­£³ŠÞÖ!ˆáŒÆƒ$à`9$“Ó¹45`¹Ÿkÿ7ßõÜè´¯%øÿ#t¿õÉ?•zÕ¯ü|ß×qÿ¢Ò¼—â7üÒÿ×$þTÖàÏj¹ÿZ¿õÍ?ôV<'ÿ×_õÞOýõ^çýjÿ×4ÿÐEXðŸü{]×y?ôcÒ[ƒ:(¢¬¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(˜ñ/ü…tï÷ÿöI+7Oÿgÿ®óèÆ­/ÿÈWNÿÿd’³tÿøöúï7þŒj†RÃa ø´ÛÜÉm?Ûî<¹ã·3´Mädž€KyÛßïUlˆ-thõ 2ÚìÏÄ–‰õÅÜ©t²¬j—)›Y•2¬NÈüâ¥÷+?B²G¯.ö´ƒåv_ùg¡®¯ìÑÿz_ûúßãTIÂǤjzt÷·Ýk—7z®ŸilóÝM"Ëk²Ñ&s|·ÈiË>ÞsdÈ5RçXÓåÓãÕZâÕçÏo.wCw1E/=Á[Ê$ŒÆ CûÄî¾Í÷¥ÿ¿­þ4}š?ïKÿ[üiç:m®¹«ø‚çí:®³j—t²$vW0ùV®$0–I<”p¦ýÜ~ha†ëMXYüU¨i¶Þ"·–7¹7ì )µ•DRÂ&Ø9hšâo4¶y‚8Ûï.}öhÿ½/ýýoñ¨àÓ­mmâ··¡‚$ q»*¢€Æ({]~Ús£qªË£ÚKËÛ<í<ÐÆ—³)÷ŒÌe³Y>KÇ #bòYZø¦eÖ.!¸ÕVh4¦:<3¹Ty ·‚þgÞEädHsó) WоÍ÷¥ÿ¿­þ4}š?ïKÿ[ühËn ¨ê—:KøŽŠÅ_ívº›ÉtÊnÙ¡cω~hŽôÊ©À!·oLÒDÃF±Ò[OöxüÈ$¸3´M´eL„’ä7wÆ{ÔßfûÒÿßÖÿ>Í÷¥ÿ¿­þ45Ù£þô¿÷õ¿Æ³GýéïëMECöhÿ½/ýýoñ£ìÑÿz_ûúßã@QPýš?ïKÿ[ühû4Þ—þþ·øÐÔT?fûÒÿßÖÿ>Í÷¥ÿ¿­þ45Ù£þô¿÷õ¿Æ³GýéïëMECöhÿ½/ýýoñ£ìÑÿz_ûúßã@QPýš?ïKÿ[ühû4Þ—þþ·øÐÔT?fûÒÿßÖÿ>Í÷¥ÿ¿­þ45Ù£þô¿÷õ¿Æ³GýéïëMECöhÿ½/ýýoñ£ìÑÿz_ûúßã@QPýš?ïKÿ[ühû4Þ—þþ·øÐÔT?fûÒÿßÖÿ>Í÷¥ÿ¿­þ45Ù£þô¿÷õ¿Æ³GýéïëMECöhÿ½/ýýoñ£ìÑÿz_ûúßã@T3­·ÿ®‡ÿAj>Í÷¥ÿ¿­þ5¶è$€n——#ýku½éËxª]Hx–ÑíîÛP¢–³-³4Kpæˆ4…|°I…¸cŽ~ðÉá-—ÅZÕÅ„Zȳ{+4j‹w¹¤W¹,ÜüÄÈp8½I®»ìÑÿz_ûúßãGÙ£þô¿÷õ¿Æ˜{c}rÿ t. =VÚ{kKKkéO½í¶ÇË*ÇåÉ7Ή¸ß¸ü ƒ_I—]–ãC7ªß2ÊÑ­³A{b%º ‡“%_÷+òg%˜(;‹9zWÙ£þô¿÷õ¿Æ³GýéïëyAÒ|9qqiªÉ•hö·ÐIÅÃÁxc…D‘#d´jXÃB 4íùK‘&³Ƨ{âi‘k1ÜA¡BÚqU¹¶2\F÷d+Bvù„6Ï‘Õ 8Ãsß}š?ïKÿ[ühû4Þ—þþ·øÐ–ø¢ãÄÇUÔäÓ¿µa¸–+ØM­½µãª¢ÚÍäÈ“o0gHXÑ\3í$û¶5;+í3X{Ÿ\³MtÑÏsq7Ì·A„rÓ}ô´ÊÆx$g'ºû4Þ—þþ·øÕ{íOÔì䳿¶[»Y1¾É‘•'øP”ÀÞ ¾‚7²Õ5˜­î“Mckws)™onW~õ•An1u”íÀfOØ_j÷Q=¦¹s­ uMȱܽ°·k[´ƒ`¸ÜU _—ç%ˆ?1jõh4ë[[x­íãh`‰Gnʨ `ÀqŠ“ìÑÿz_ûúßã@z$¼´–ÿÄ1]j·QÚ}Œ¬Ú…±µšó 2Éj!Ùÿ–`bùéAf µ{ÖòÏG‚-FãϾmÒÜ8rÈ$v.Ê„óå©b¨!BŽÕ4Úu­Êž6•«…wf•ƒ)äõ ±ÔŸfûÒÿßÖÿšŠ‡ìÑÿz_ûúßãGÙ£þô¿÷õ¿Æ€&¢¡û4Þ—þþ·øÑöhÿ½/ýýoñ  ¨¨~Í÷¥ÿ¿­þ4}š?ïKÿ[ühj*³GýéïëfûÒÿßÖÿšŠ‡ìÑÿz_ûúßãGÙ£þô¿÷õ¿Æ€&¢¡û4Þ—þþ·øÑöhÿ½/ýýoñ  ¨¨~Í÷¥ÿ¿­þ4}š?ïKÿ[ühj*³GýéïëfûÒÿßÖÿšŠ‡ìÑÿz_ûúßãGÙ£þô¿÷õ¿Æ€&¢¡û4Þ—þþ·øÑöhÿ½/ýýoñ  «œÔ×øþ†Õ»öhÿ½/ýýoñ¬@m™@ÎáÉÏñµL†Œ«_øù¾ÿ®ãÿE¥y/Äoù¥ÿ®Iü«Ö­ãæûþ»ý•ä¿¿än—þ¹'ò¡n6{UÏúÕÿ®iÿ Š±á?øöºÿ®òèǪ÷?ëWþ¹§þ‚*Ç„ÿãÚëþ»Éÿ£’ÜÐÑEd…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@ljä+§¿ÿ²IYºü{?ýw›ÿF5ix—þBºwûÿû$•›§ÿdzÿ×y¿ôcT2‘cÀÓÅzòÉ*!þÖá˜ùguk¶ÿŸˆ¿ï±\¿€¿Õkÿö“ÿEÇ]uQ$?k¶ÿŸˆ¿ï±GÚí¿çâ/ûìTÔSµÛÏÄ_÷Ø£ívßóñýö*j(µÛÏÄ_÷Ø£ívßóñýö*j(µÛÏÄ_÷Ø£ívßóñýö*j(µÛÏÄ_÷Ø£ívßóñýö*j(µÛÏÄ_÷Ø£ívßóñýö*j(µÛÏÄ_÷Ø£ívßóñýö*j(µÛÏÄ_÷Ø£ívßóñýö*j(µÛÏÄ_÷Ø£ívßóñýö*j(µÛÏÄ_÷Ø£ívßóñýö*j(µÛÏÄ_÷Ø£ívßóñýö*j(µÛÏÄ_÷Ø£ívßóñýö*j(µÛÏÄ_÷Ø£ívßóñýö*j(µÛÏÄ_÷Ø£ívßóñýö*j(µÛÏÄ_÷Ø£ívßóñýö*j(µÛÏÄ_÷Ø£ívßóñýö*j(µÛÏÄ_÷Ø£ívßóñýö*j(µÛÏÄ_÷Ø£ívßóñýö*j(µÛÏÄ_÷ب¥º·2@Dñ“óŽ>V«u ßëmÿë¡ÿÐZÚí¿çâ/ûìQö»oùø‹þû5À‡ívßóñýö(û]·üüEÿ}ŠšŠ‡ívßóñýö(û]·üüEÿ}ŠšŠ‡ívßóñýö(û]·üüEÿ}ŠšŠ‡ívßóñýö(û]·üüEÿ}ŠšŠ‡ívßóñýö(û]·üüEÿ}ŠšŠ‡ívßóñýö(û]·üüEÿ}ŠšŠ‡ívßóñýö(û]·üüEÿ}ŠšŠ‡ívßóñýö(û]·üüEÿ}ŠšŠ‡ívßóñýö(û]·üüEÿ}ŠšŠ‡ívßóñýö(û]·üüEÿ}ŠšŠ‡ívßóñýö(û]·üüEÿ}ŠšŠ‡ívßóñýö(û]·üüEÿ}ŠšŠ‡ívßóñýö(û]·üüEÿ}ŠšŠ‡ívßóñýö(û]·üüEÿ}ŠšŠ‡ívßóñýö(û]·üüEÿ}ŠšŠ‡ívßóñýö+P!¦VR;ˆ#¿ÎÕÒW9¨ÿ¯ð?ý ªd4dÚÿÇÍ÷ýwú-+É~#ÈÝ/ýrOå^µkÿ7ßõÜè´¯%øÿ#t¿õÉ?• q³Ú®Ö¯ýsOýU ÿǵ×ýw“ÿF=W¹ÿZ¿õÍ?ôV<'ÿ×_õÞOýô–àΆŠ(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šæo¿ë¸ÿÑi^KñþFéë’*ãgµ\ÿ­_úæŸú«ÿk¯úï'þŒz¯sþµëšè"¬xOþ=®¿ë¼Ÿú1é-Á QVHQEQEQEQEQEQEQEQEQEQEQEQEQEÌx—þBºwûÿû$•›§ÿdzÿ×y¿ôcV—‰ä+§¿ÿ²IYºü{?ýw›ÿF5C)<.ÛÄ k–PÜykëô¨tÙx—WÕ¬ôÁÐiÞRµÈ JÍ¿!xåFϽß'`šZ^¿¥i-®Á}} Iª3ª1ä¨FxíŸóÅA§ê> Òõ}KS³¿‚õ,ܪä#2îùñŽï9õÆzä Ï Ìçþ[k?ö©\²ƒå¯=:ʶ~Ó'÷bÿ¿KþÆè~'Ñ-!Ö|ýJûF¤e‹æÎäòÔgŽÜÿ?CZð˜ø{þ‚°~¿áC¸Údþì_÷é´ÉýØ¿ïÒÿ…s¿ð˜ø{þ‚°~¿áGü&>ÿ ¬¯øRÔ‹í2v/ûô¿áGÚdþì_÷éÂ¹ßøL|=ÿAX?_ð£þÐV×ü(Ô‹í2v/ûô¿áGÚdþì_÷éÂ¹ßøL|=ÿAX?_ð£þÐV×ü(Ô‹í2v/ûô¿áGÚdþì_÷éÂ¹ßøL|=ÿAX?_ð£þÐV×ü(Ô‹í2v/ûô¿áGÚdþì_÷éÂ¹ßøL|=ÿAX?_ð£þÐV×ü(Ô‹í2v/ûô¿áGÚdþì_÷éÂ¹ßøL|=ÿAX?_ð£þÐV×ü(Ô‹í2v/ûô¿áGÚdþì_÷éÂ¹ßøL|=ÿAX?_ð£þÐV×ü(Ô‹í2v/ûô¿áGÚdþì_÷éÂ¹ßøL|=ÿAX?_ð£þÐV×ü(Ô‹í2v/ûô¿áGÚdþì_÷éÂ¹ßøL|=ÿAX?_ð£þÐV×ü(Ô‹í2v/ûô¿áGÚdþì_÷éÂ¹ßøL|=ÿAX?_ð£þÐV×ü(Ô‹í2v/ûô¿áGÚdþì_÷éÂ¹ßøL|=ÿAX?_ð£þÐV×ü(Ô‹í2v/ûô¿áGÚdþì_÷éÂ¹ßøL|=ÿAX?_ð£þÐV×ü(Ô‹í2v/ûô¿áGÚdþì_÷éÂ¹ßøL|=ÿAX?_ð£þÐV×ü(Ô‹í2v/ûô¿áGÚdþì_÷éÂ¹ßøL|=ÿAX?_ð£þÐV×ü(Ô‹í2v/ûô¿áGÚdþì_÷éÂ¹ßøL|=ÿAX?_ð£þÐV×ü(Ô‹í2v/ûô¿áGÚdþì_÷éÂ¹ßøL|=ÿAX?_ð£þÐV×ü(Ô‹í2v/ûô¿áGÚdþì_÷éÂ¹ßøL|=ÿAX?_ð£þÐV×ü(Ô‹í2v/ûô¿áGÚdþì_÷éÂ¹ßøL|=ÿAX?_ð£þÐV×ü(Ô‹í2v/ûô¿áGÚdþì_÷éÂ¹ßøL|=ÿAX?_ð£þÐV×ü(Ô‹í2v/ûô¿áGÚdþì_÷éÂ¹ßøL|=ÿAX?_ð£þÐV×ü(Ô #¹¦”¹UTµÎÅ ŸÞÉþ}«¬éíÃËÓÛ§l|žw©ø‡IÔ§Ò`²¿ŠYF§lÛTààH9íüëÑ:{cðÇòôöéÛ%:{cðÇòôöéÛ!ÓÛ†?—§·NØùžØü1ü½=ºvÇÈtöÇáåéíÓ¶>@§¶? /On±ò=±øcùz{tíéíÃËÓÛ§l|‡Ol~þ^žÝ;cä:{cðÇòôöéÛ!ÓÛ†?—§·NØùžØü1ü½=ºvÇÈtöÇáåéíÓ¶>@§¶? /On±ò=±øcùz{tíéíÃËÓÛ§l|‡Ol~þ^žÝ;cä:{cðÇòôöéÛ!ÓÛ†?—§·NØùžØü1ü½=ºvÇÈtöÇáåéíÓ¶>@§¶? /On±ò=±øcùz{tíéíÃËÓÛ§l|‡Ol~þ^žÝ;cä:{cðÇòôöéÛ!ÓÛ†?—§·NØùžØü1ü½=ºvÇÈtöÇáåéíÓ¶>@§¶? /On±ò=±øcùz{tíéíÃËÓÛ§l|‡Ol~þ^žÝ;cä:{cðÇòôöéÛ!ÓÛ†?—§·NØùžØü1ü½=ºvÇÈtöÇáåéíÓ¶>@§¶? /On±ò=±øcùz{tíéíÃËÓÛ§l|‡Ol~þ^žÝ;cä:{cðÇòôöéÛ!ÓÛ†?—§·NØùžØü1ü½=ºvÇÈtöÇáåéíÓ¶>@§¶? /On±ò=±øcùz{tíéíÃËÓÛ§l|‡Ol~þ^žÝ;cä:{cðÇòôöéÛ&7ˆ53¡è—š‚ÛÇ'Ùmf¸1”P\¦óŒ•ã¦:qé[==±øcùz{tí“ñ.¹áË«[ÝóUŽ/2mgpɸ° |¸éÁíÚÇØøªÏÄž›TÒ¦F‰ápq¬‘8^U°>V~„5oDÿ‘SBÿ°|_È×<šç…tï¶—¦^ZÃp4pÄ™dç©$ä“É$“]‰ÿ"¦…ÿ`ø¿‘ ZÿÇÍ÷ýwú-+É~#ÈÝ/ýrOå^µkÿ7ßõÜè´¯%øÿ#t¿õÉ?•5¸3Ú®Ö¯ýsOýU ÿǵ×ýw“ÿF=W¹ÿZ¿õÍ?ôV<'ÿ×_õÞOýô–àΆŠ(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Šæ¨àƒ¥?ñÚôJáué67³Z^$žuxÄ„ûÛ‚@>Ùô¤Ð\©ÿ €ÿ F©ÿ‚³ÿÄÖ¤7ŸÚ6— b)âD …; 8àqÏ_ưo•¼šÞùdVx¶ï—åÝœgäïƒUqXè(®SÃúåö¢ú±žPVÞý¡ˆmQµ!ôÏ$œœu=¹]ŸµL?§¨ýoCéß§; ŠÆ•›ö©‡ñôõÿ­è};ôçaö©‡ñôõÿ­è};ôçaqØÒ¢³~Õ0þ>ž õ½§~œì>Õ0þ>ž õ½§~œì.4¨¬ßµL?§¨ýoCéß§;µL?§¨ýoCéß§; …*+7íSãéêÿ[ÐúwéÎÃíSãéêÿ[ÐúwéÎÂácJŠÍûTÃøúzÿÖô>ús°ûTÃøúzÿÖô>ús°¸XÒ¢³~Õ0þ>ž õ½§~œì>Õ0þ>ž õ½§~œì.4¨¬ßµL?§¨ýoCéß§;µL?§¨ýoCéß§; …*+7íSãéêÿ[ÐúwéÎÃíSãéêÿ[ÐúwéÎÂácJŠÍûTÃøúzÿÖô>ús°ûTÃøúzÿÖô>ús°¸XÒ¢³~Õ0þ>ž õ½§~œì>Õ0þ>ž õ½§~œì.4¨¬ßµL?§¨ýoCéß§;µL?§¨ýoCéß§; …*+7íSãéêÿ[ÐúwéÎÃíSãéêÿ[ÐúwéÎÂácJŠÍûTÃøúzÿÖô>ús°ûTÃøúzÿÖô>ús°¸XÒ¢³~Õ0þ>ž õ½§~œì>Õ0þ>ž õ½§~œì.4¨¬ßµL?§¨ýoCéß§;µL?§¨ýoCéß§; …*+7íSãéêÿ[ÐúwéÎÃíSãéêÿ[ÐúwéÎÂácJŠÍûTÃøúzÿÖô>ús°ûTÃøúzÿÖô>ús°¸XÒ¢³~Õ0þ>ž õ½§~œì>Õ0þ>ž õ½§~œì.4¨¬ßµL?§¨ýoCéß§;µL?§¨ýoCéß§; …*+7íSãéêÿ[ÐúwéÎÃíSãéêÿ[ÐúwéÎÂácJŠÍûTÃøúzÿÖô>ús°ûTÃøúzÿÖô>ús°¸XÒ¢³~Õ0þ>ž õ½§~œì>Õ0þ>ž õ½§~œì.4¨¬ßµL?§¨ýoCéß§;µL?§¨ýoCéß§; …*+7íSãéêÿ[ÐúwéÎÃíSãéêÿ[ÐúwéÎÂácJŠÍûTÃøúzÿÖô>ús°ûTÃøúzÿÖô>ús°¸XÒ¢³~Õ0þ>ž õ½§~œì>Õ0þ>ž õ½§~œì.4¨¬ßµL?§¨ýoCéß§;µL?§¨ýoCéß§; …*+7íSãéêÿ[ÐúwéÎÃíSãéêÿ[ÐúwéÎÂácJŠÍûTÃøúzÿÖô>ús°ûTÃøúzÿÖô>ús°¸XÒ¢³~Õ0þ>ž õ½§~œì>Õ0þ>ž õ½§~œì.4¨¬ßµL?§¨ýoCéß§;µL?§¨ýoCéß§; …*+7íSãéêÿ[ÐúwéÎÃíSãéêÿ[ÐúwéÎÂácJŠÍûTÃøúzÿÖô>ús²­Îªöq&’]ª¬ìFÑ€ 6g ¢ácr°/§hdb‘«¹,Ã{°ä1¡ãî¯nÕÞ½,zt÷031XšD%”©ã#¢ò+“±Ðì5:×S¿Yæ¼»&šO´Ê»”p2zíI°Hè®ïî!Ò%›ÊŠn\åwòÛn@É8$a}¸ïŠ­¤HóxgD–Wg‘ìcfv9,NrIîk7þ þ}çÿÀ¹¿øºÝ[x­,,­ ]‘E$áCOµ!•-ãæûþ»ý•ä¿¿än—þ¹'ò¯Zµÿ›ïúî?ôZW’üFÿ‘º_úäŸÊšÜíW?ëWþ¹§þ‚* FŠÖ唞$”à1Ÿ8ŽÄzšžçýjÿ×4ÿÐEP°¸‚ÛO¹iæŽ%i%P]‚‚|âqÏÐþU *øÆÒO¶žf –ÆæTIˆ—*c»†;ÁÓ“ŒŒ·MÕ.æñFº’O+Coolb‹Í}ªIl‘ÏSþ‚¹ûM Ãö2ŸÄ–w–ÐOulðܲ.ɲ·™×†ùN}sžswJ½µOx†f¹…b{{UW2帿CùS©þÑ—Óÿ"?ÿGöŒ¾ŸùÿøªÉþÓ°ÿŸÛoûú¿ãGö‡üþÛßÕÿZ­ý£/§þDþ*í}?ò#ÿñU“ý§aÿ?¶ß÷õÆí;ùý¶ÿ¿«þ4j·öŒ¾Ÿùÿøª?´eôÿÈÿÅVOö‡üþÛßÕÿ?´ì?çöÛþþ¯øÑ¨ßÚ2úäGÿâ¨þÑ—Óÿ"?ÿY?ÚvóûmÿWühþÓ°ÿŸÛoûú¿ãF khËéÿ‘ÿŠ£ûF_OüˆÿüUdÿiØÏí·ýý_ñ£ûNÃþm¿ïêÿ­ý£/§þDþ*í}?ò#ÿñU“ý§aÿ?¶ß÷õÆí;ùý¶ÿ¿«þ4j·öŒ¾Ÿùÿøª?´eôÿÈÿÅVOö‡üþÛßÕÿ?´ì?çöÛþþ¯øÑ¨ßÚ2úäGÿâ¨þÑ—Óÿ"?ÿY?ÚvóûmÿWühþÓ°ÿŸÛoûú¿ãF -ö«yÿ /‡íãžHâ–i¼ÄIˆ˜€rNpyÇ<ãƒÀ®ŒK'‘ý¾cíõöõí×??5Ì>-ðï‘ãó3Ãú‡ô KTÔã¼¶›PÔnešYÞEUœ°yáFF}HÉìrÊöæûS»k™žO/V’8Ã1!AÂŒôŸÌžõ©§ÿdzÿ×y¿ôcVŠÊ÷·ŽŒ[Y‚AEnéÿñìÿõÞoýÔ0E? ªñý…Ïþ‹kNÓ—Okò²[‰#u IaùÉï÷‡¿ó¨$ðÎ…<’K=µÛÉ$†G+zè dí\РiŸð‰xsþ|¯?ða/øÐŸžuÞzj²wéû¸ýý½º{ez^žØü1ü½=ºvÇÉ‹¥Úiú5»ÁaÄQÈþc¸.K` å=!éW¾ØŸÝ”}GþËôü‡ ¢à\éíÃËÓÛ§l|‡Ol~þ^žÝ;cä§öÄþì£èê?ö_§ä=lOîÊ>Ž£ÿeú~CÐQp.töÇáåéíÓ¶>C§¶? /On±òSûbvQôuû/Óò‚¶'÷eGQÿ²ý?!è(¸:{cðÇòôöéÛ!ÓÛ†?—§·NØù)ý±?»(ú:ý—éùAGÛû²£¨ÿÙ~Ÿô\ =±øcùz{tíéíÃËÓÛ§l|”þØŸÝ”}GþËôü‡ £í‰ýÙGÑÔì¿OÈz .ΞØü1ü½=ºvÇÈtöÇáåéíÓ¶>JlOîÊ>Ž£ÿeú~CÐQöÄþì£èê?ö_§ä=çOl~þ^žÝ;cä:{cðÇòôöéÛ%?¶'÷eGQÿ²ý?!è(ûbvQôuû/Óò‚‹s§¶? /On±ò=±øcùz{tí’ŸÛû²£¨ÿÙ~Ÿô}±?»(ú:ý—éùAEÀ¹ÓÛ†?—§·NØùžØü1ü½=ºvÇÉOí‰ýÙGÑÔì¿OÈz >ØŸÝ”}GþËôü‡ ¢à\éíÃËÓÛ§l|‡Ol~þ^žÝ;cä§öÄþì£èê?ö_§ä=lOîÊ>Ž£ÿeú~CÐQp.töÇáåéíÓ¶>C§¶? /On±òSûbvQôuû/Óò‚¶'÷eGQÿ²ý?!è(¸:{cðÇòôöéÛ!ÓÛ†?—§·NØù)ý±?»(ú:ý—éùAGÛû²£¨ÿÙ~Ÿô\ =±øcùz{tíéíÃËÓÛ§l|”þØŸÝ”}GþËôü‡ £í‰ýÙGÑÔì¿OÈz .ΞØü1ü½=ºvÇÈtöÇáåéíÓ¶>JlOîÊ>Ž£ÿeú~CÐQöÄþì£èê?ö_§ä=çOl~þ^žÝ;cä:{cðÇòôöéÛ%?¶'÷eGQÿ²ý?!è(ûbvQôuû/Óò‚‹s§¶? /On±ò=±øcùz{tí’ŸÛû²£¨ÿÙ~Ÿô}±?»(ú:ý—éùAEÀ¹ÓÛ†?—§·NØùžØü1ü½=ºvÇÉOí‰ýÙGÑÔì¿OÈz >ØŸÝ”}GþËôü‡ ¢à\éíÃËÓÛ§l|‡Ol~þ^žÝ;cä§öÄþì£èê?ö_§ä=lOîÊ>Ž£ÿeú~CÐQp.töÇáåéíÓ¶>C§¶? /On±òSûbvQôuû/Óò‚¶'÷eGQÿ²ý?!è(¸:{cðÇòôöéÛ!ÓÛ†?—§·NØù)ý±?»(ú:ý—éùAGÛû²£¨ÿÙ~Ÿô\ =±øcùz{tíéíÃËÓÛ§l|”þØŸÝ”}GþËôü‡ £í‰ýÙGÑÔì¿OÈz .ΞØü1ü½=ºvÇÈtöÇáåéíÓ¶>JlOîÊ>Ž£ÿeú~CÐQöÄþì£èê?ö_§ä=çOl~þ^žÝ;cä:{cðÇòôöéÛ%?¶'÷eGQÿ²ý?!è(ûbvQôuû/Óò‚‹s§¶? /On±ò=±øcùz{tí’ŸÛû²£¨ÿÙ~Ÿô}±?»(ú:ý—éùAEÀ¹ÓÛ†?—§·NØùžØü1ü½=ºvÇÉOí‰ýÙGÑÔì¿OÈz >ØŸÝ”}GþËôü‡ ¢à\éíÃËÓÛ§l|‡Ol~þ^žÝ;cä§öÄþì£èê?ö_§ä=lOîÊ>Ž£ÿeú~CÐQp.töÇáåéíÓ¶>C§¶? /On±òSûbvQôuû/Óò‚¶'÷eGQÿ²ý?!è(¸:{cðÇòôöéÛ!ÓÛ†?—§·NØù)ý±?»(ú:ý—éùAGÛû²£¨ÿÙ~Ÿô\ =±øcùz{tíéíÃËÓÛ§l|”þØŸÝ”}GþËôü‡ £í‰ýÙGÑÔì¿OÈz .ΞØü1ü½=ºvÇÈtöÇáåéíÓ¶>JlOîÊ>Ž£ÿeú~CÐQöÄþì£èê?ö_§ä=çOl~þ^žÝ;cä:{cðÇòôöéÛ%?¶'÷eGQÿ²ý?!è(ûbvQôuû/Óò‚‹s§¶? /On±ò=±øcùz{tí’ŸÛû²£¨ÿÙ~Ÿô}±?»(ú:ý—éùAEÀ¹ÓÛ†?—§·NØùžØü1ü½=ºvÇÉOí‰ýÙGÑÔì¿OÈz >ØŸÝ”}GþËôü‡ ¢à\éíÃËÓÛ§l|™Z¼-=›À˜VxdAž%˜zO¬ý±?»(ú:ý—éùAXW^Я.¥¹žÒñ¥•‹1òŸ`8Øp(¸¹²·Ó¼?=¥³;¬pIºW'.Ä:(ôžM3Ãßò,é_õçþ€*?øD¼9ÿ>WŸø0—ük^ÞKh­ ·•"‰h¾vp ` •ô¡€•4ßê­ÿë™ÿКÖßóÊ_ûú?øšlÒ+ì¥UhËdõ'ÐzÒ¯ü|ß×qÿ¢Ò¼—â7üÒÿ×$þUëV¿ñó}ÿ]Çþ‹Jò_ˆßò7Kÿ\“ùU-ÁžÕsþµëšè"±'Ñ–ämž; „WwAqiæÜÛ%¿Î+nçýjÿ×4ÿÐEW›+òɤÏÑ‘qÿþ• bÿÂ5gÿ>7þ ‡ÿGü#Vóá£à¸ñU¹Eþ«?ùðÑ¿ð\?øª?á³ÿŸ ÿÃÿŠ­¢øžñþ°°Ï¦ŸÿeÇãN¢àaÿÂ5gÿ>7þ ‡ÿGü#Vóá£à¸ñU¹Eþ«?ùðÑ¿ð\?øª?á³ÿŸ ÿÃÿŠ­Ê(¸ðYÿφÿ‚áÿÅQÿÕŸüøhßø.üUnQEÀÃÿ„jÏþ|4oüþ*øF¬ÿçÃFÿÁpÿâ«rŠ.ü#Vóá£à¸ñTÂ5gÿ>7þ ‡ÿ[”Qp0ÿá³ÿŸ ÿÃÿŠ£þ«?ùðÑ¿ð\?øªÜ¢‹‡ÿÕŸüøhßø.üUðYÿφÿ‚áÿÅVå\ ‹m;9Ö{[}. —!dŠÃk ŒÙä?Ð-©œæöž¿¹oöýÏæjz(¸ÔÎs{ Ï_Ü·¿û~çó4ÔÎs{ Ï_Ü·¿û~çó5=mLç7°œõýË{ÿ·î3AmLç7°œõýË{ÿ·î3SÑ@ÔÎs{ Ï_Ü·¿û~çó4ÔÎs{ Ï_Ü·¿û~çó5=—y¤ÿhÌ&¾Mº”.ÐóÙo dœd·L’Uÿá³ÿŸ ÿÃÿŠ­Ê(¸¶ºP´h„Kg 1Èeòí­¼°ÌT®~ñ§jš;k¸C¬W0.Î@I˜·]ãÖ®Q@|»ÿùù¶ÿÀvÿâèòïÿçæÛÿÛÿ‹«TP2¯—ÿ?6ßøßü]]ÿüüÛà;ñujŠ«åßÿÏÍ·þ·ÿG—ÿ?6ßøßü]Z¢€*ùwÿóómÿ€íÿÅÑåßÿÏÍ·þ·ÿV¨  ¾]ÿüüÛà;ñtywÿóómÿ€íÿÅÕª(¯—ÿ?6ßøßü]]ÿüüÛà;ñujŠ«åßÿÏÍ·þ·ÿG—ÿ?6ßøßü]Z¢€*ùwÿóómÿ€íÿÅÑåßÿÏÍ·þ·ÿV¨  ¾]ÿüüÛà;ñtywÿóómÿ€íÿÅÕª(¯—ÿ?6ßøßü]]ÿüüÛà;ñujŠ«åßÿÏÍ·þ·ÿG—ÿ?6ßøßü]Z¢€*ùwÿóómÿ€íÿÅÑåßÿÏÍ·þ·ÿV¨  ¾]ÿüüÛà;ñtywÿóómÿ€íÿÅÕª(¯—ÿ?6ßøßü]]ÿüüÛà;ñujŠ«åßÿÏÍ·þ·ÿG—ÿ?6ßøßü]Z¢€*ùwÿóómÿ€íÿÅÑåßÿÏÍ·þ·ÿV¨  ¾]ÿüüÛà;ñtywÿóómÿ€íÿÅÕª(¯—ÿ?6ßøßü]]ÿüüÛà;ñujŠ«åßÿÏÍ·þ·ÿG—ÿ?6ßøßü]Z¢€*ùwÿóómÿ€íÿÅÑåßÿÏÍ·þ·ÿV¨  ¾]ÿüüÛà;ñtywÿóómÿ€íÿÅÕª(¯—ÿ?6ßøßü] [ã'—ö«mÛ ãìíÐ ûþ¬?:·Q¯ü„?íÒOý!òïÿçæÛÿÛÿ‹£Ë¿ÿŸ›oüoþ.­Q@ʾ]ÿüüÛà;ñtywÿóómÿ€íÿÅÕª(¯—ÿ?6ßøßü]]ÿüüÛà;ñujŠ«åßÿÏÍ·þ·ÿG—ÿ?6ßøßü]Z¢€*ùwÿóómÿ€íÿÅÑåßÿÏÍ·þ·ÿV¨  ¾]ÿüüÛà;ñtywÿóómÿ€íÿÅÕª(¯—ÿ?6ßøßü]]ÿüüÛà;ñujŠ«åßÿÏÍ·þ·ÿG—ÿ?6ßøßü]Z¢€*ùwÿóómÿ€íÿÅÑåßÿÏÍ·þ·ÿV¨  ¾]ÿüüÛà;ñtywÿóómÿ€íÿÅÕª(¯—ÿ?6ßøßü]]ÿüüÛà;ñujŠ«åßÿÏÍ·þ·ÿG—ÿ?6ßøßü]Z¢€*ùwÿóómÿ€íÿÅÑåßÿÏÍ·þ·ÿV¨  ¾]ÿüüÛà;ñtywÿóómÿ€íÿÅÕª(¯—ÿ?6ßøßü]]ÿüüÛà;ñujŠ‚Ö !34²+¼¯¼•M |¡zdúW‘|Fÿ‘º_úäŸÊ½’¼oâ7üÒÿ×$þT㸙íW?ëWþ¹§þ‚*²©žf>_³ºgܼdÉOåY—>2ðï«[ªªH$Œ…óŽzT?ð˜ø{þ‚°~¿áKP7(¬?øL|=ÿAX?_ð£þÐV×ü(³d©ûU³ãåFrÇÓ1:Õ…>°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ ,ÀÜ¢°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ ,ÀÜ¢°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ ,ÀÜ¢°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ ,ÀÜ¢°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ ,ÀÜ¢°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ ,ÀÜ¢°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ ,ÀÜ¢°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ ,ÀÜ¢°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ ,ÀÜ¢°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ ,ÀÜ¢°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ ,ÀÜ¢°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ ,ÀÜ¢°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ ,ÀÜ¢°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ ,ÀÜ¢°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ ,ÀÜ¢°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ ,ÀÜ¢°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ ,ÀÜ¢°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì Êä!ÿn’èÈ«þÐV×ü)£ÅÞoö´êšÿ ¬¯øR³rŠÃÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý‹07(¬?øL|=ÿAX?_ð£þÐV×ü(³rŠÃÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý‹07(¬?øL|=ÿAX?_ð£þÐV×ü(³rŠÃÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý‹07(¬?øL|=ÿAX?_ð£þÐV×ü(³rŠÃÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý‹07(¬?øL|=ÿAX?_ð£þÐV×ü(³rŠÃÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý‹07(¬?øL|=ÿAX?_ð£þÐV×ü(³rŠÃÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý‹07(¬?øL|=ÿAX?_ð£þÐV×ü(³rŠÃÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý‹07(¬?øL|=ÿAX?_ð£þÐV×ü(³r¼oâ7üÒÿ×$þUéð˜ø{þ‚°~¿á^_ã›ë]Gįsg:M D€:ž25Q?ÿÙresource-history-options-menu.png000066400000000000000000000042751203611042400350650ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images‰PNG  IHDR¬ˆõn—¯ pHYsÄÄ•+tIMEÕ /&÷¦tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœí1ˆEÇÿû<6BÐFÒ´±RI ¤Ð*žZ¤#Q±Ð&í,$FE«;5E ­E¢œ4‚­Ši”(‘9Í)^Þ¾·{ÙìíÌ|;³;»3óÞÿWÁÿ¦n—²SæÎÿáÈ:X§’ÒÔúƒ€lsW‘n™»5cº¥,ŽS j^k®­Ë@™û¾%HԩĵüFJÝODÎìTW#E{hã_{‹ãT¢íÖ »X–`™YNvWk¿Ý¥S ‰ÜÑx/IDATcؘ„…" ¡(Š€€"èC þ ^ˆÂ©dÌ÷%ÞýY†sår*z 4/’±L˜-8YÈ—š}fÓj-AëÜÐz¾m 3åQ_. úB!€lœJ˦KÍ)³–þ%ô)Ö”ÒšG-aZ‚´ÚÏê4X¶%Dû®å ÐXnI£6ø°h·œM½T–èÑÉ @»¯|&Låû½ˆ‡hÂ<TË  ­ÌÝ"Wß“Æyr­®~&¿r“aö¢t=LWÂt åD{u“\ŽeáÚgK/“SŒãŒšnÊé—%º ˆ`äÇ›ö#þ''Š”˜ÕIIDAT€P„"  8WòÒ¹’Éx; ¡(Š€€"  (Š€€" ðåcøü럔 ï~ºÃîID,0’œB-ï?xßO—¯xíý eÊ,ϧÓY>æÓüS«Úbå’)Žq¾hÚX•ÏG©oœ<ÒZ+OmTø¹t» ¨˜B(šA Ó'0Ýh„M2Þ‚Oìû#{|ÙCìiù¬m}U.È©O eèïëRK`ßûê D1NP¢hªì C O €:…¢_xAÿ> E\ã$|D(BPE@@P¾‹.¾ûT¹pø-Û¹IDAT…O½HÆÄƒÎ?ûÐñ¾W—I*ôÁæÙÕÕWßùåÔÍ¿ÿýí‡+¼wóì“@ȲG^üÌ‹•¡èàéªî¿»l_äy±oÿÃöíÇû¿Û³í®C_¿õÄ£/®Ý1ÅYc\¿cž }E0ÍçØ¹ ¸v wÌ/~ù{™~øÐ6p)Ï÷i÷Šÿâ0‘¨Ù2½[‚é ;×qåLpþÃË{:G'ëë?}¥¹‹ë44 ×Óô4õÙBê[å’åü6˜¾?®¢Ö+›=½[‚é ÛWñç›?ßÓìüzçÉçl¾½jÓ9æ‹Q§Rsj§&ÒNWÒ:Žìê(Ìã&,›¶º²IDATÚϨ4(ý[‚9þ¹†­­<¿ûvçà@3›Ð9ðBã¼6¶¶ê [E®¨ VIï–`6Ãakûvç ²E†¬|F€<Ÿ{0ÖíÉë“jÔWÕü£&9Ž=}Epüͯ>zéÈÅoo;6ÃÎuÌ‹ÝAÈy9™a^¸9U»¨Mô@ÔkQ=è[Œq «c?Š_< ­¹°|qú1l_­%ï¶ åï´&XOCcBÈ©–#¯ªù΄ÉlÁsZkvÀ^!<:šîv&·Î}ÙüO Ì3”{iu,¶Ÿ ¦ÏªeŠÞj¶%aŸ<½‰`·s°{˜#› ˜×¶Ž×' ®xÿµÕ4IDATAÙ90m];sÁWE 9\Ÿ³¡y<ÓdLèO@(BPAùtÀ©–œÿ6¨hÞ³[ïBIEND®B`‚resource-history-toolbar.png000066400000000000000000000027731203611042400340730ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images‰PNG  IHDRµ3³+Î pHYsÄÄ•+tIMEÕ ,LŒ>tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíš_L[UÀ¿Sú@x‘=‹ IaÅÊŸK:Sb’,°uj †ãþÄPÛ•FE—u{˜Sh E²©„¾h€¹(4&cš4Kж74±ÚHm â„õ´Ç‡7”ÛÛ®ÐÞßÓé½÷œóÝ{÷»ç»)Züc DDvA²×ˆìkD?Døý8øìŒÏÎ<†‰¤aŽ}½¸eZç^’>;ÓØóë­+åi`¸Ä³Wo0sí\ô#ëkíïE577+¨EHÎù;„Ú®cŽòIƒÈéô³màRÿÀȶíFéx9 ýøm´¶é¼¢Qâe@Ñ‘´Çç¢IDAT<‹„ÃẺ:‡Ãáñx*++T<ÆÔæ‹çÃá°^¯/W(wîU«Õ¡PhllŒÇŸi4ýH"!@°•ãžõ³Ñp*^‘r@®ùá¹ZÓÔu1zwõŸÀ½Ðϳ×j•¯Ïów$„Èår¹\ §§§=R©LÕ’P(¤R©l6›L&kkk«(¯L©»ÏÎ4èÆÉFbÇtã4á ²uÌÄ•ÚÀ 0^‘„r@®ùÁÖ‚€ ¸-OÈë_ép}÷Üáã·“vG•–––””ƒÁ©©©………Ts‰T*­©©ÁÛl¶¢¢¢m–BB»õ-Ó:'.¨^|ÿSús´a#IDATüò™Ç—ƒBלÒpª3¿|óqU«ö„äâÆZµ' )BÞOÒ!D—‰„æ’@ @-9ùÒ«Âc „H$’ÚÚZŒñàà L&kooç´ˆÅb<}Õvâ²ê…·¯p?…Ï»»™Aɹú–ѹ®q#ö·cÂè\“´á»+°%Bˆ³„¾q4 BèwMB¦æúÒF^^^uuuqqq___,ãvñ¢6°“½=;·ûìŒ×Ñ$$Œ”Èþüá³3tÕÆÕ´GϹÇ-›eȳçÜã•Æ$èAŒÏÿ¡@ à÷ûÃáðGZû1Æ,ËbŒM&ÓÚÚõ3’IDATZR38Ôv²7A•÷ç?^G“¢ù¦Àq„å~p¥,U¤ÞäžµÅṁõ»ÁÿRguuÕï÷àØmЖIDAT·´´<Ì÷Ó‘ák<{­V+H$É+†2­óKs‚0^~o³®ùêƒá/M~P.üÿÃ9T@ëé·`}ñÛѯ{¯ƒÊ0sõ#ƒr@ŽÔ·L—‹Ñ¹îoÄ`}qbäzöÉÁ‘Y9 Gòe΢‚Tª•ƒÅ#:»òC$ râý"’6¢"|ˆ~ˆð!½93³×1ˆì_þ> ¤  {§IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/resource-history.png000066400000000000000000001251341203611042400325070ustar00rootroot00000000000000‰PNG  IHDR☈ÐR pHYsÄÄ•+tIMEÖ-–uotEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœì½{\g½øÿÙ$¦Ö£õ®çHHfQ¨ÒïQûÕ14YBS¹©½`Cš4œ ILikmÙi=žzRNz±Ç4& ­ôbHUÏù‚M€…ƒzê-¨Pƒ;¶Ööôbµm.„ùý1·gæ¹ÌÌîì² Ÿ÷+¯v™yæó|žgfŸ}fvÞ9: ~á…‘‘@AI-ùùùüÀÈ%‹ŒWÆ¥xÍšTÇEÑÛ×—a¤[<î™ÅÈÓ'ié IzF¥’αùNfUÖ8QéK›f;xøáGÕô‡2?éíë±öm˜¢vý :VAæê‰úºë®EQf;ãâü:IDATPë<ò˜:ã•yŽ:éíë½',£ ‚¤=ꉺºzãÌÌ\ Ø¨®Þ¨¾ho|+óžâ5kŒ‘Ê"£ ‚¤9ê‰zÓ¦ke†¹ÂÏô™3r/œ9;sêÏo¼ëÓýÔå?Iq¾°iÓ5ðè£ß©ÌoŒ‘Ê"çuA4€w¡ghnaÎÛàSŸ[ð÷kνö»Ó/ÿR9ùÇ#)\7–âýâÚk×?öØ>œVIg¾}ÿ‚w¿ró7üÚjN¥ ‚¤3êTʆ U¼Ë=‹ÿz.„s§ÆÂWÇf¾˜Á—‡6l¨€'žèÀi•´åÞûb<ªëIDAT.¿åæÍ¾l¥N¨àl ‚ H ¸gö•É…/¼ãÅw¿ïùEoôŸùß±¿Éãç~õê;ß}AºÝfÛ¸ýõEÓÝß/4¸æšußÿþ~©Ì%㚆)±ŽêF¸«½j‰`Iz2+qfJr<‘•J‡ÄquZ…çì[ó×ÁÇVü5ð‘…ç²àý¿xû‚WÉ‹z^l2[¨ß¤o¹yó]Mÿ·7Þh,áE»¾êê}OâH% ñ:àPñ:c¦T³´—[;¢wıÿdÛ_]Ð0°ªe( >ˆDÁ–}“IÍ”qFóåó8ÖQ]Vƒ_}÷pûº,_btËðiýn·ƒÄnIDATíõæ'åÆ)Ý»Nzös²S¬nz<¡Æñwôfë6…GˆÂcû«`[E÷ú0=ʶwbódåܿ人Ãy#ÜÕ·§ÁPx†ºyö¿¿£ñúÅŸý—ñzí¥W/†æÀ…ÞäòËÛøQõRõ“í—ß<7ÝæBõ]z¹Ü{ÿCêgù‰EGk°n]åþý8RI+xwŸøÎË_«Z†¢“rtRÞUÕS© ÁYëÚ'å¡–Õ³‡†‘¨¡–±õÙMÃ)ÙiVU{Â'ʦÂeC“rtRŽ>™;~ÒŸÀÜ1µ£´:Ô¼E'; 75icžý܈*:)G£ø½°ÃüIDATÛd]RŽÆ v¤*Vf¬ÚšÛݰ?Æ)"e9÷ã0IE™ÞQ(àòM»mÿÌ ôŠ­EÉÞôÃnÊf¬k_9q¾¹ã~ãó½÷?dŒQn¹yó7wÜ/Þöꫯùó /¤<ñÈ,³€½¸ xËà‰©XGuuÇþ¦l)¸cbÕÁl)¨ÿ pâÑjuÉFËéÉ\sãþ@¬£ºzGSu¶ÌnŽí×^¨]êš^Î\æVFùfHÇš‚;†éuȨŒ/vŒkÒ–¸|dUµµŒí꘢km+mˆ<‘d*ìØþÆðÀ`¸0˜]Ý´£ºÚ¶#½]´Ü„·Lû>¨ºvIDATü[ѨNfPa‹#¤+uÔÝ®vCóù5º ñŽwu±wF«³"θìçæ’l©ºƒ¿>•Àꎩx;¹%íâí Ä/P\/Q4¶n“µ² º‡b“' ì’%Ë7mËkh?æP/79'Îf¿bœUŒć »]<ë`—)>x½8±ýÕÆt¬‰Õ‡•Åöïôô¢™s3uwvÖÞþä†[»â†‡§ÏÁé™E‚M@!þTPeâ{W\þ½‰eâ{—¿ãoÇ;ÞþŽË¿713Ñ~SÝáÃu{ÇÛ¯øÞ„2ñ½+Ô·ÞÑ88£mÒ~»úçDûåo¿}@-sðöw\Þ>aß)÷¼IDATùïÎoÞg›Û¿åæÍw~ó>Á&Æ¿/V^‰#•y{˜2µçžUË—À`x|ͤ½£Ž5†s÷MÊÑÉ¡»G«šŽ Žæ4©K ¡Ñ8ò5žØ¦M6Tt«ËÕ5÷mݳ¾Ô»:¦b·oÏS¿^wäžpâX²îqíKç¾¼†öcUµmóî>õîݳ¹¸€^‡ˆ_Ÿ•¡kÛ_}5ìӾѺ½”“µ,wðÄ£ÖÖÒ 9Á[’L¿›µ®©eõª–¡èd{õr=½tC¨%è‰å»fóîª`¶Ôd|–0K!U)×»î4>ê \ÔÅÞIX›p*∻~N÷ÛúÖýÚv•sÂõIDATßÉÃ…¶AÑ1œŽDbM6îêÅê6°dYÞÀøIîÛk´kÁpµx´êõÜ"ïÛºgýŽaöYÅ(y˜ÛÅeC˜×ªXe‚øàõtàd­Û¶uOß1õ$VGO§ÑÜoN/:«À½_»rç7*Ûš7ì»ÿŸ§ÏÍœ>ýø[ÿÄ«“¯Ó›(½7ä¿ó¨ÿòo8  ( ('Û¿rãG¼úÚ«¯¾và£ÏÊJöÆû¿S\ü㯾Öy­|{þ xíÕW_;þÀïÊïœQ@é½aì²×^}uÇJ%{ãWozàǃ3Š2s¤ç¿ºq‰ÃxƒN¹‹!Šö磌®À‘Ê|Ã)”ÃÁIDAT:LÑÏÂî íU-›Ô3_lbL½¤°bõC½Ã°ªbe–¾dP?òcc°»Ê8ÈÕåêšÙËW/ kY.ì® î6¾[»ÄøN³~7ŒML¬ÑŽðá¾ÑæêŒuˆøõB¨ÅŽtƒu!Qµæ•Fd`ô»ôŽ ¡— &–OA㤔×ôJê§³±Ò•r½kP?œ¼ÖÅÖI˜›§×ñðÔÏéžc[ß¶_[Àî;9yÑÇ•8BÛšL\Ö‹ƒ½Û@Añ–‡z‡!61¶u QHAµ>¹h#Þs oщaæY…¿c»jK69€cŸÙ„¯§GK) ÷íÞ n¼IDAT²†qÛ–23cû÷æéÅgÏÂ-ÿþƒî|òK O¬¿ù{Óçàog«ë¿ñÿ½ƒÞŠøÍ˯¾¢þûõÅ0£ÌÌÌ(YÒGáŠwÝ~dffåß\9£/Ÿ™Q&ÆWüÀæÏÌ(33KV¾ø?zŽÌÌ€¾D™™Q>sÙÿÑsdfæHÏ7^¶’Þ)ùïÎoÜb»ƒòÞûºó·ˆ·"ÿ]yÅp¤2¯°þÒǯTmåÄ:v±×[Ñl„cMÁì*÷7ÖÅ:ª ” M¶gi7¸\×¼ë‘a€¾±ŠMYœu’DlblÕòMà®ÖâÀRvÁr´¸)Ø;\½œ;I1ä8M}IDAT«ò~Ë…µ“ -ç®è¾÷zêç“'€¿SViÖ^O'OŽõ¢1ºMãŠX±fóΉá#ݹÅíä:YUw•m|t¨Â¾mâç·gî oA >8+Öl¾ºo¸Úº†µ¹BÍC¼~ö­g¦•»å Pß;3­¼qfñpïóÌúìUÏЛÀ (ÆREýSýïÊ;_zåNú—÷¼ëspãÿ{é›+}e…ØJ!74J_yÙ ?>r|çÆÏÞÉØ§Á¿}3LÞú-´êµ_ÿ——™ºâòÏÿðGÿwÔf(^Ĺ7…&kYî`øQõ^¡›‹ÉƒÜ²„XÓX°mNIDATGÓþÀŠÆèpóªÑ Çû &Oh°ú7­©¡ú”lÖʲѾ¦Þ1í29µNÖ²ÜAí¦?b‰µFY—”»ÈMŽ5†s·U-¡kÍ+¼Ó»äÜ€°!©6æícc«–3ÂGOŠ46Ý …æÍÃM;†ÝÔÅÖI€³‰û^'†© x‹ÞsÄë³öØÉãˆ0¾­Äõ²bï6P°&¯a}8—úÞ¿d]l3ú¶ûØÈw‡{÷¬ªXYà¢}9‡‰y áØÇ>p ª[ÆÖ_=v÷uÌ6¥¯€¼qzñé陯ßûÆ»Ÿºé_¿_ûµö3Ó3oœ~ëŠ+¶ýŸ+ÿ‡}ÝXd©dxIDAT‚2sòѯ?vrFYù¯ÿûëû‹~7~R™Q”™þgeE™YÌë¿iÏ2£(‘ÿê­»lUΊšoÿö Ÿûíýµ+Ü]î¹åæÍ·ý[·ý[ä'–ûK?3Šò…/|çT2‘¯Üü Á?æ&²¢q¨¥º0[ØÚ]±  Ãê—Œ› ÖXÕ2ÔÄ)2kl/¶¨¿räÏn fïXÝ ƒÙÚß›Ÿ”aEc]ì$ Ø›0ò×wwF¯0zŽZ2}u¿Ö€ N6­wÕɉN«›÷Q¼yÀ,pkGôõ²@wõr ¬a#+÷mÝã0×áT#KðUŒŽj;«ˆV»ÄóC*á™M|h»€~øÂg”Éq5s7Y«?_T—,q²ÕgIDAT|R‹:.i¼½Y]³ñöfc¤âõ)/Ÿÿ\Åÿ¿8§2ç ´µµ§áÃò{ûúÒ*ªt‹Ç=³yú$Í·H†wH}Å~=î%}òC×k–cKí#ûÒ«!v-§GØêÃò+*Êm«ÿË=Ütýõ3€J`øü·[¯KQÀ?ùÆøðÿtlÌv^ÕgèBïÏ– Î 7eWi×Óµyˆ¹Á\­Wæ2Ü·{˶IÞàL™±?ýìÌô¢ÖöP+.¢×L6?yzç¶^XÂs%“ò²Ò®îƒ()œÃà0A(hœ”“zö,‘¾õʪjow^kîQÐ8)¸Óˆ¾7µ©þ1ÞKÿIDAT—k&›_ÿóŠYØ­FYi tìÁ @s¦ ‚dÌ'Ž %%Ÿíéù1N«Ì=p˜‚ ’¤¡G0Ýøìe—ÀŸ~zp¼2WÀa ‚ H ðÍ|Éek/U_<}è0ŽWæ¶¶yyA$£¸´¸x¶CÈT÷öÎvHü,€tù1‚ ÂaÖîPÍ|ð3.séíësýZAAÔ‚ÃAAÒ¦ ‚ ’¦ø=L‰uTW³4îé_8‚ ‚d&Qùäl‡,¦ ï‚ÙÚ?S£êeõ3|¸wÏæâ ¯™”£“ò¾­{vuLÅŽtæ-Mxk*<±-:)G'å¡ŠîÆŽ)ºÈZ×Ô²zUËPt²}]–:ô)+Ì*X³u ûÈ”VH8wŸZHËjX²îqY-v_^Cû1€ÁÑœ&½Øõ;†-Åžä‡q‡@ô… ‚Ì+þðè'Õǹsʳ^üì£ÎqÆŸ¸¸¨þ˜röe8û è—~ÈþD6~ê’¬¿<ûâ¯â©¼øâ‹K—.íééé|jÿïGGâ áÿzÇõu[ÇžýóÝOúÓ’$ 9–ó•›¿qËÍ›É%·Ü¼lvšÔIDAT™7Fò¢O.ì® BGôŽ‚Æ;Öl­ê;ÖX°b¸o´¹ú€ XÕ²IýTÏ^®`Õržs 61»÷wëo‚åŒB,›醊»²²Š·¬ßy4Vµ&ÆVµÜeMÄ:ªõ™Xµ| VU¬TLÅ[`çD Ì-Äa ‚ ÀïÚ>Q|ÿžûëQ(úÊ#ðÆ ¿<úð'?ú¥_ð6ââÕ7>¥œ~fB7>¥>ƒ/`<ŒïÿrѧoNhCêÞpË¥ï½÷ðK·\úÞ~ýûK.õ\‚¢(YYYYYYÏ=÷ÜÁƒ÷»ß}ô£½0/ßS!/¼ðÂEÔ:‹dIDAT]ôíoûýïÿúõëór?æ9u¤¢N¢ˆÇ(@S£“p¬)˜][;¢w\×¼ë‘a€¾±ŠMY1jÓ¬e¹ƒ;î YÕ2Ô^eeb»„¡O ( †Õ?WÅÖR+Å:ª ” M¶gÄ:ªÝ˜è=† ‚Ì7ÎN+ðúsx›±ämïÌZyõ¦_?}ÉÒËŽ07ÉÙðÌþå¢+o×¾?u×Vz—c”Ú]Ç/œ{çï~Û²¾-÷ïßþ‘¼íõño]÷óáG>U[.…{ÿ3ÿ÷uï5ÓúЇþáþá¹çžëîîþíoû±}Ìœ·ÉIDATÓ`eÑ¢EŸøÄ'¦§§¿ýíoà° VE .‹2æTÄc ‡)MûcëV4F‡sª&bP•µ²lôÑ&+»Ž3e²bÓÝ; w,Ó/ 7í€êåæûYËr¯~t¸ªÑqÞbðÄÀˆíزoR[x‡´ëÈÔ:s045t`*̹s‰ÁpïžUCê¸J-Ö}‚ È|埶þêÀüSņÏ-x÷Gþû;÷@ņϽíÝyáÙ×–^ÆÝêÓ7ÿÁ]]qÛ¿Æ·÷|äßÿ¡¼g]°è#ïzËò -yû¢ÜŽáO]øÇßù‡‹þòá{¿$YD§ÑIDATÿKW|…@ P} ,PgVb±˜:X©¼jûrEY°`Á'?ùÉéééxàýïÿ5×\cŒNff<2(*Ä’·HÁl)XÐ]Ö¬N,)¬{¶ñgK–¬{|èîÑ*ýÉUPl ¬hj[ŸmÞ™Ë,%«jÛæÝUÁìê¦Gº¸SP¼eðÀÑØŠÆ}y …ÙR0ûöñ¼Õêú¹á ±µ%ÒzèP'NŒb÷/u‚ 2¿¹øÆ_ÿ¨ý¿g^yvzZ¹øÆ_ÿP}}Öá£÷Ó7ÿá·¾F/ââg{Ü #_xö¿üéhßo~ùýбñcÇc¿9ñâV‰eXIDAT-—¾÷çy$öÎëþóÇý—^é¹>:ê%ƒõ2Ðg>ó™@ а½Þ}!Æ‹… ~üãÿà?ØÒÒ233c¼wÜý¶µµg¼–)ÖQÝw‘—uAĉñ'.VxLþù'­ÀgꫯÕŽüìþ‹À:›¢–yî½ïúH‰³¢9úû'_xƒmá•WmÛ°ãïÝûÇG¾øYé ^¸»¹|2(-å½»ýká/|á @ 5 ‹MLL¼øâ‹wÿ{‹cxp}ÝÖüãÆŸÓÓÓÇŸžž¾õÖ[_ýõO}êSþóŸŸx≛¿r«›Ò\ÒÛ×—ÐsS÷²ìIDATA$C1v¢ŽNVÖÿæhëÿÉÙð 9.q9FÎåµ|c0äÈG²þ€@~Á¦‘áGàk—Œnv cªÃ lÚ´é£^䵜sçÎ?~üìÙ³·Þz«zoÊ3¿ø™m>2'†)‰ú¥_v}çŸ@ bËMpJîzô¿.¾ñ7qEBÔ[qÁÅþzê­Þc§IDAT°0J@¥´!ËÇ>t>(ð·ÓñSyøÑ¸·uÃÅŸüôÅŸüt’ Ça ‚ 2¹ø†_ƒ:¤8%ÿࡹ¿gÖ%nÆ(pêìâ#ÝO³Ÿ"§ñßbÊ(p˜‚ ‚ 0‹c¨*û”¿»ž3à0A™ïø>@IR™óÿïvAAñ¦ ‚ Hf#xm¦ƒÃAAÒóÞ”Þ¾¾YŒAADŰ šÃ”×nœ¥`A™³¼þ×çŸùo?î:ú‘Kª¡™|W1ŸŠcÏFË>‰ñ.þÒAAäÒ÷ôO?{Ù%^¸Üq͜ߟè{úÌ+Ï—IDATXEY‘ú'Þ›‚ ‚ HÒq3F¡W˘aÊáÃ?Ë"ÿF©!£ƒOO21¥™3‚ ˆLŸ;çøÏ¶ ^ôAA$œ>uÖqE·ü3cfS$¹œl«(o;9ÛQ ‚ÌaN:Cþ+/½Ì¶äÔ©3¶M\ S*/~O>\zÞZ8¤ö„3çA·Ûc A$xãÍÓê¿×\i,ÜxÍ•Æò7Þ±g-7¶ÙfiNþ¡1™ÿ²ëviÓE¾µç¶£N?&zŸ‚«.]¶ªôÖCOæä‡Héõ¹TôRs0á#Oº(Ç>ÓÈŒáxî®s§ÝzßÚ/Ã.âxa/§U 5²keÔ4$‚ ÅÙ³goª»V}}ÏýŸ={öžûVÿ¼©îÚOÒ&ºIDAT³gÏž=k¿ÇÖÝ0åЖ«ßƾ•ûõ’ÍÉñ¸g­ºpù–C‡Æd€U¥·Þw0ƒ÷ú¶íÒœ|¸gíâÛo‡êæk÷\¿`饕kïí} sׯ—Ɨȵ÷Àññ“ÄNE±¥¶ø-o1òX8yø)¨,^ °ºì«‡Ü]÷±õ@q/MÚwv •ÅK‚¹kÚæ¬åÌ®âû±† âEQZïk€ÖûÚÛÛ&^îM9±g-ùqhÜNqFÿr¹ºî»Ç»!Ò}¼²ØüRºû̹Ógʺ'kªœÍɶŠåW æN¢c‡ì+ÍRlbNެÄEAIDATÍ•èømÐùGNî<¤ ¯‹ïýºOz“ïr8åì*‚¤ê¸D¼ÄÀËEŸ¥5:÷KsòmyÐ~ɲ⫎woï¹êRs”r²mûá»Ïüñ»kGÕ¢ÌÍOîÎf¤”&5½”àúï—‰[Ô·ß6˜x î» ÎÉ!’~x¼7eõ·þðÝãk—>r2t÷‰=#kÚî?]ziåȽpyy{i|ùÏ[¼ð¼ÅÿøÔUß½.¨.57ÿð—/:twÈŸÚœRKÔIDAT,­¹í"íZÕõÏ^´VÝé¡‹¾¼\Ÿý¦cKÆ\b\V[Üœ{âÜÝ«™ñ,­¹í–{Ö.^Xñp™Äà) ®Î¨#T¨yð»Ç×òRúàUFò{©•¥_:ø=Âó/\ e«|ˆ}¨Rû6ºVL;!2´µµ«ºäÈúÐl#âðៗ–|úì´ýªUœ ÜvÞÁ²ÓÉÿàQñ9x$3Sš‰1#‚$Îë}þû½u×_û?ÏüÁqåÿ{ñ‡w>ø˜ªìíë›_Ëܾpí½êË[ Íj,‚ 2øcôä¼ÍÍjäŸ3›‚ ‚ H&òú_ŸŸw>òÈôÈIUIDATïyÏ{W~饗×o¨NlÁÚ5³(îúêA”÷A•z^XµuËØNc »klõ\ë YUííUK|,0v¤¶nG3ê[NfUÕ>Ô²zUËPôŽ8ÖT¨Ÿ²¢O掟„¬KÊŒ´ÇŽtCÅÊl€U[s»lÃú©ý£OŽNv@ï°Q~ÜÛ]L¹õýØœbc·,ËyÅù€Ã0eɺÇ塯gLörûBbÉÔþ»r†Û«—ûà\Çžá‚;ô±óÒsÌ{¬ï¡¼eY0Ü7Ú2 ž§´y5mhÈ\rb›Z©¡ŠîÆŽ)Æ:&Œ ˜µ°ÕŽ*YïSCr7Cß0œ‡å–ï¬ìÌÓAf­kRç6&Û«®G݃IDAT—³v­UAŸÉTŠ(jÝIjC&+ÖlÞ]e½(¹dYÞÀøIîÛk|-¸£®6²Ø‘îAñ·[º¦tbÉ€³Üµ;³ëÚz-¼0Èo8.S'ê‡tž…}Œ}`‡^¿­é*8ôIq7óstrènhhtèœÖl0:ÿDGµ¢Q›ÿ›”Û—=Jï‚Ñ so·Ðê׆›W ¨‰¦–ÄŽv l/ІÃá ¾:8‹kÒ‡}0Ü·{Ëõº£~g¨eLÿP$Þ¥YÑe\Bb“UÕN]rÅ`¸0˜-³ »+†ÌéÖk6ï®* çnKí쪊•YÙËW/ÔåÆ7ð? ™IDAT’õ»AZÕ²É8ÊÃ……'¶‡ý*}€XP¼F'&‰•móˆ¶5㛺7†¤Å[Ä&ÆÈð€³DƒJ…áÁSô:–½P0ka­]2¬X³yt"Sãykª—õƒØÄXî2KË23Ï(Ê ½k}ɒŠÕõ‹+Åʶ!gÅ‚ÆI9:)¯é5ï/)(ÞòPï0Ä&Æ´IDmÍê–1òÃcÕrQOfÖ”×m´M\´;0».¿×‰ÃàEÎK°2ò,êcœ“<ômÍXî¢OÒ›Ó á³ZSëñEwNK6˜­ 81»‡Q½ 7GÄÂË0Eýf\YëÚ‡›ÇÔŠOñIDATvIJֵk×neu<8.¦šcMÁ9Cƈ!61¶:'ÛºJÖ%e«ÔÓëÝØÄ˜ý”J^Bò£( ãÞk[T·¬ËyÖˆuTw$0¯[­jé}O.SC´¡ÞÕ{€˜ÿwÄÈ|Ôé«•cœJ^’ã“ÇúÆ–/ɺ¤l¬wxòD.wpo©¤à9úäíseŚͣÃGºsm³’Uw•xtH}½,wÐé5uÕî^Î{¾G¨Ð¡Ÿ4ˆ/f7ØZ!y;šx¦d-Ë ?ª]?>Ò=˜·¬€Z‚—z$ÖQm£WV¬Ù¼{—:%bdÛún 6cwIDATŸzÆÐõ[ÅðŽ&÷­cÞ›Â**²ªÚÓçcIÿb45t`€õþ’uwÀÕöKcý{VU¬Ìfm`C]3žþ;Ú=°eŸ~FÛ·u ûÈñ¡¨Ì^¢}*ô:$N°–c-`IaìÚ9VvÉÈZY}}`». €w%‘XjèÀÀæâq¥Œ¢è ™åÇ:ªÍ_è˜Cð‚5y ëÃô‡Ü’uu°]½'cŦ»¡¡Ð¼®7Üd½ÆÇ«)/`—í†#{•·‘R'ìuŒ<»ïcæ¡çØÖ¶ û¤› Ö.b&º"Ý9YÙ`¶B\ÉqÛ±UÌÛtø¯3Eâ·§öo,Ülò-]IDAT>…Áð–}“C-Õ…ÙÀêæ¡Ç ¨%ˆ'lÞ4q` ³`õÝÃwÁ(kÖN¦ÃÕÒv0²=5D¾ûd_Pm‹­ÑÙËÇ´Ö-û& „»n$ŽpFQôúÔØYUÛr³ ƒaX½™û´‚Æ'û‚Õ›·Âànue€­Ѫ%±nɃaËšqÄ;Ò -w™wfoY¿óhìñÆ}½Ravƒð ÆóèXÕ2Ô^E­ã-:Œ’—d-ƒA(kÊ€%Ë`O÷ò!Wc2fQUÛ6gWw¯Þ¼`9}­ïq+¥ÖK-êîávjCXGuax 0x¢#Ä<ÏZIDATz]ÙXTßXÝ<ô¸ÖdÅ[X3+÷mݳ `ɺLJ`caP?N6?)ÃÄ.AM›Xù°ÔÝE»3Žîuì<ðÃp™:‡^g]Ù[³ z0ܾ/ÛÖŒ*°ú¤ñECÔÍÜÅläyUËPû `tNÛ’Ø0»}¼É¡®íbhkk/^³–Iæ9–Ÿ> 7e÷­áŽ Äï"ñë¨n„»Ü\¬t¿&‚øö:„Äsˆí¯n€¦¸nCL€·œ÷wç½õ-¸7$Ÿ=ý:ôöõáShÓó·ÁÞßEAæ:êNnŸB[Ð0˜‚˜üÄœMAAñDfSÌ{Sh0ƒiIDATÈ‹>iË„<•q2ÉèàÓ“LLi&ÆŒ ’Ïý镸·Å‹>‚ ‚¤)8LÉä¶ÒÒ69¾w1ŽÙKÛô&5°HX› G’´ƒxIÛÀdbÌ ’¶GM’ð±¾™’ºTÅéf˜ ¡Èm¥êÑЙ Ì£P?"StP»cîLü®¾Ž™kÞúä:¾ÃÌp€Ü¡ÜÛ •Å’¹åmý]:x¢-Ì ÐõâÕ”•}k ¹­”xC­—mÓŒ8™ø{J¢¡ÔíK$\4²7ª(ѽ#Í)i&·•ÒS”–P’#ñ-Ï™s: ‰ÔÈvFµäGn+-m‹XNTö¦ÿw_HÞùsä7IDATÙð†)r[i PÔjüµ­³2ª(Š¢ôç×nk“¤šƒŠN=”äIé‚~uA*Îp‘p‘º»èÞ‘"û^n+ÕÞUú¡ˆûYjT]šm±.ækÙÓS¬-6G)‘p êKÈBF¡²X⤢^+O9X# w-¬)£ðH8 g×^4¨C§úzèìÕ«%õõFÛšGJJìÛdRÍAFã¥DýSIÖ™7äñÈÏ‘ü®i⥿Ꞃ˜Ó­™üAª9¨(ѽ œ("á þ™¥ôçÊ W'%ãË_I}~ç6öGÕÜL,‹4>?; S¤šƒì^"åÙÊmÍ­õ 5„×"IDATZô­<Ú“ìJ¤«µ¾< W–ŒŒËÖ˜F{´w!T^ß3j}À^AviÜ$ø½p3{dŠ#]­Z&å¶Òæ¼èÁº<¢ õ]q*\ìš^"·•j#jFá‘®‘½QîgªÜÛ •uåù=Ä8%¯\?CDvÖæWV:è¹­´4.U'%´¯Qê˜Ê>K%·•–¶µ…Yß "f!äÛ½äl’úAf¯éG-ˆY(mGF´rÛ¶ÚžžÚ` PºsÔ˜¥ªüšÚÚgI#á`m´ËÌõÅ;b'Ÿ’±Q)òãÂÜPYSÄ­ ³lÅòÒ—:×úÒé&fuy€X+™¢V‰ àIDATåm²s©.ÁÍz2ÝÚ]å¶RóhÓòäºsëp`–ick„fˆÆgzn%Æ)æ—¿¼º†üÚ¬Ýëµc×ÝëÁ(¨¹(XÛë²½3[[Üͱυ}~v'¿šfxÎûçãéÞ©æ`ÃhP¯³r—eŒÙY {ëBFp¥@ «<•_ ¥œ|Æ@Äø¸–òÜ|t;”–BÈË<ú An+Ý»ìƒ{s¡c ^û°ñmbR+<ÒÕÚSä_´èCåõä8EªiȯݑۚGöÖûŽž‘¼]ŠÒ_ßZ´ ÔÍÖi¿~ý|ÔS;ZNÌ^hSok$½E-'1W6 ´ìŽH•tWIDAT\3ž˜DòO(f´RÍ®½%%{£Šr°. ,Ž6h³™•ÚWD[MíÒ›„Z¢Ú.Ìa««1“/ÉX‡¨”Ù½#á`m¾eŒ< Du¡Ûˆ.–Ÿ^nݵ¨/0.c&&z¥%Ä ‰Ý“¹Ë€›Fa—°dŸ¹m›^éþ|âܨŸmäÞÎüz芀< y’Û>Ã9²(쇰TÓPßÚQ«¨©ÃÑ‚µ==µÁÒ6™5J!µ˜]Œ3«)@ª9Ⱥž££_N¢¯·c,Û8E=kkó’6ZRY,Hy%Æ -$}¼_Ôª]KÌa5ôÔƒ£ ÆÁ\¢CåõêÚÆÊ¶yDzÍxbvqчŒ–¹\ L1fA‚µ=êù˜¹­±¹Iœ;b%_=/k è«IÅ•%úG’(6AT ·Q„U,/½¼ºóÖw³ÜÛI|«coÅëɼå<»™=Af¤œ|h- ¨#/²—†ÊëGÆeGóËëòFº" ¨çZOÓ¹"öC8T®S"]#Z)ô:êV_©IDAT°¼Ëü  m&XNœ¡:þM ܺ[qS_^u˜ŠqÖâŸpÜû\XçgÇ8]ž@ÀË0Ed…@ª9h¹ïÄ:•bÀ¹Ð’$äñ‘’<ɶÐ F÷–Ðïz--EDÂæ¼¨1>0B!nR¿Ÿ¬‘˜2–9ž\CN]d"ÆSE­`§Ôí-þ°*IÈm¥Æ%jæõ»’½ýŒ{›2“8ît‰ïæ÷[¥òæ›ìKíIF±Éßœ¨Ÿøä¾†”£r¤k$O’Š+Gº"òh>ï;æ!ªÛ;ÒH×He±$<ÌC-ŠÒ¯O¾„ÊëGÆ#½¶(¥š]•;{½ÕÝ^}¤ÌÚ…IDATÏH.×q¹;רÏÏ.cHòAçe˜"åäs(ro§19aJ‘ÛÂúð%ÒÕšìzcûŒ˜©ó³cœŽûMx²ÂÅ/}‚Ú-0áH¨%ºw¤H¿7E»}RnÛf™J‘r@¿Ò^ýI¿I:ÔÒEêlS~?ýñ§Ý¦쬌2C±V]šm±.÷vö·*”¶ÉnG)ÌTHyz{1²C×KPSºpóŠšÙŒ˜ˆ!8§§ ©¦!_Kê¶Ñ|Þw‚PK~m°tç¨ÙŽ]Øýš^¢Ý¥gìh¥š†úÖ"ý®={%Œƒ4àòޤ86ñ´•»5J™ï›²n—û²·‘S±¢ôê{é×ûSÐö©Kl\hIDATæ2f¢­§V×5å,H£û–b„ažÙ©;¥èÑÎCR´ŽäqNXžzš~‹qÑÈÞ]5ç–Š+GZAû’L¯#Wû#£•׳çtC-ýõŒXDuë`dTÇìTzð¬*Ó'³Å¥¸d!nâ7«^"Q° ÉiKF?h<¾à#aÑ­Èâwç‡!™åŽ&¿l±v$3äÌVL;BòeÈLø’^–k4Í ÉÄ$”Ñ4´‰”¶•šŒî,µWYÍ”!IDAT¶ìÂ:—“"ím²ÍÀ‘„Ç´w—vä:͙̎˗&Üy4¿¡!ßøÃx,d­¿8¥‚h*0:ù¼Hùç Vߊm'F}Y*câQ³–²™Ç2™Ò^VËò*Å­¾ÝÎpeóÓ"j|$ɬ®>ےጆeHVß°Û§ã4$;º£-;ró`!¹­Ù°#¤B†Ìdî’C-ѽP»3¢Íb¬‘h©@ÕkÆÝ ï$ódioåä›C )ŽYÞ]ýª q˜M—/Lž:Ö‘Ç!O •çwöÊd µfÜ~àtÉÜ¿=ù\²à¼AgÃ'5±wy|¤Dw¼ð"d§´Xã°b»IDAT¤žv]}fû¶„ܤÅ9`$ÉŒ$Ó¬b·OÇeHf¹£í>drGl9³FùiBI|2“¹dHÖž¨®wÚD*Põ±IÅ•%Ì/ ¢Í“£½M¥Ø’ ׊c¦wW‹–êB<¨5Sçò¥Š+aT¹·r$ÕHè£Äؽ8ÅÝ€Žß–|YpÞ°÷mŸLÔLͶ” âôT}2BÇ´¸,ÓÉ4$ϱ˟©ƒgH&1/ÕÄiHvëŽVwÄ”3럲ÖÉ–Ù‘!3‘3Õ,åä[þö×D*4ý¦B{;[ˆÇ6ï®¶‰k]-sÍÔ¹|)¤œüV£ù¤âJ—õ‰1&>¶frÉÐIDATzv Fò9d÷®’ÄúÆ«h¦q_}%8,·%²ï†ä4 g4²Ḛ̀O'jH¶¹£K•~h®gK†Ì$³ Éz¡á"è7ïW§L¤L«*…i»µ‰—…VȤhoSfŽ[q¬Eiõîª8u¡YsùZî}¡ •×47¨%J9й­Ù^5³\ïã8üÀ©D3¡’Ï ;6º_&jÛŠj?¥#´˶”Šq_}àäÓùX–éÿ ÉÊbÄŠ5ÆdÚ>¿!YèŽN±æ:éd–!Y#Ö„1j\áÃDJÛJ±i+C¼,0ý&I{›3pBŠc›w×(ŸÛ…ÒÉåËÌMžáÓ0IDATÑ’ê‚ïuÙqʺS)ˆf­cO>G€ìî¼á¢¾Ü5êkŒ§m†ècÙšRÁL›ûê§}ݤ… ˜3hHNhHö4$ûƼíIó¶âH& ·•’wÍe.hHžÃ !I"óÖô;o+ŽdÚ$IúÝ6—JÐŒ ‚ HACrfÑÁ§'™˜ÒLŒA$ÐŒ ‚ ȇ)‚X•‚¨LÅ1{˜^GæOŠô»ZÒýnÓçp»ÌŸÆãYgîž9âî7TˆI¢†dõ}æ/°æ 7Y¸6$‹ßõfH¦vm[Î-Ê®õ@Cr¢EHRbHöº ¯Z™åòåufu¾ƒ&IDAT©ÿ%·´l"s•ÂÌØÜÖ:.Ùµ9‚ô*ïµ­9çG qVÐOüøº]Žú`7÷b'‡$jHÖî@=ƒ”­ÒE(¬C²ð]/†dÖ® ¨¢d‘Q É ’A†d÷±1]¾Œ®BÖý ùÈ §% öìÖƒ‘ÇG@7Kxm£tnÖÙ%Î̤«•ñ›D É‘®‘½QûRvTé":ñ’éw=’Y»6ŸBKÅ2*Ó !Ù·Z´± ÉÄ*ìI2fH6+XE²ÎF\»(U`"tù z™±6~¥0k¡ KZ­#á`mám¡µ´:-ŒÔÙwäPGV€[¯±’QÁ: IDATí±uy¯-ç@>ÖVöA‹ÍÒù2|¿âê:/9³f¥F|&ACr¤«Õ|dªÑ¯½?ò ¡à’]¼ëÊì³(G£2 !9gÌ. Éæ"[¯=$ZÇJŠdeF\‰v»Òó]¾fW!ëÎì£\ÑkbJaûBa–´Z‡Z¢Ú}|o3ýÒi¡ ØqI0‘}ÀáÂÖË3?;É{­éó[‹MÁÓçºYS¤••ñ—Ä Éú5혪t· ÉŽï’ð É,ì†dk9´QÙ ÉäšñÄìÎL"°õÚBаt¬f9ñqÝé‚í._º«ugö>~0 *…- ™ÒZGh-­cZÄ6Šø IDATv\ÓL¤Åø„vÔÒòÌÏŽò^=%IÑbÓðô¹^DÖTÓÈJø‹?†dãò€P¥‹¸BlHváOvcHv‰Q”À¨Œ†ä¤a7$«x·Š‰Cëê>›Ë—ÓU"n¥°'ϰüm w×Ê©Òb»SòŠEÖ–5ÓÌJøJ‚†äP¹1½‡Bd_’…ïÆgH¶íZûh® £²#hHN«!™Ä¸U )Äѱªß€Ýk]m·’¸6ÇZ\¾>’ˆR˜^ȓ֊o ¡µ´Ì´…$bvÌ9Ï˜íº•“¢ÅJçëRŸë ²VKL3+5¹œ÷ñH¢†dób€éLF<àÉ,~×›!™ÎÒöúIDATÚ5 £(¡Q9Ý™#†dquì!±t¬¦HVr¥uµ‰R½šc._Ë}9^®û£6 ³Ä5-[µ´2+-öBâµ»Ê9ϘíZÞ› -6­æ(y9Õ¡DÖén¥F| É© ɾƒ†d;x;2'Iç3çƒn>¥hHžÃ !AyJƈ¬ÕIA·O¡µO !bÐŒ ‚ HACrfÑÁ§'™˜ÒLŒA$ÐŒ ‚ ȇ)’“Gš’é½»Ôò%5æ焹»L‘Ó$){xH6iÒåŒçÔÍ'sâ†dÚÁËQé& ñîÜCZ‚]›ýĵ!™0ùn‚†Þ%IDATd—™ Ö AÑV­<·´Éþؼ½ˆ#º¬ØûÃÅX$|2gjqÜ@‡2ÚMiq¼ëy»œuw^CONæ„ É6/ÇÓ›,„»z}õ5HK0]Z²«ãÍL¯O¼› !ÙEM­EqBÕKïí„úz žÎ4—´É¾Ûnét!b Y±?Ì“y¦‘žÊhAT>w9×û÷$jH¦ðìéM ñ¾Ö Ò¥%½:Þ ÉìñÅÌÚœóZ`‡ª!÷vBe]y>ùÉäk“3ÖÌH­º,1š‰'ÈL~ ¼¸\—/cZÌ!ì¢d2O¾_RV¬në§ãôŸ`M·º]OŒî,µfêõMIDAT§Ë’kzªXM–°Ê˜Õd¬¹sÛ\#fBïm. ”ÑÅÈÜÒÈ^ ÐS¡2ê‚ÞèºË¹? 1#ä–Lµ×¼!AC² ÇÁkñô&ö¾nKKquÄdß ÉÜšrв^‘"Ùžv mr&’é¢Ý°Ì%6K­È(Ëus½¸—/#i ³Š¢ñ È%dÅsv:Æ)ÎE\º]¶Ö˜‹Þs¢{cåW?y*cK“Ù6$&§¹ÓNÔVv2öí¡Ý¥ÕH.ôÔ‚¢è²Eå¥Ë¹= Å+Оg$nHöâàM5B¯oZãÞìŸ!™ÆâLæe UøحÉ×&gUEo.IDAT¢!™Ní†e.±YjÅFY:/®Øå TÒvéŽOë§sœ×t£Ûekyè=G*®,a~+U?i*c²Éì“Ó<è­x2dæNÛ]\šûöu,ŠŽÊVMq—sòTr¼ÙLÇ?C2B–»7‰0w'ðúz--uÕqá@‡• !Ù¡¦–«Qa› Q- ·³GûfYÔ Öqʬh“rT•Y5$ Òå€{K­0¼¸Ö½›IsÌð¬ã>Bæšîu»¾,ò§Be߆ö­ÜÉIDç—æ¹E¼– 錤+ ’i¯@®› X»c¸( ¯¯ÈTI—–âê¨áñ ÉÓGŸIDATŒõý2$ó2©_á¡‹¢C5cê1î¶Uú­ó)³¥MN_C2+]´ê–½Äzí‚'ÈUág€íÅuáòµ$MafQ6k.¸:â™8†ÑíÆ 7!B?p²TÆ¢ ¥K3“¸5×Éh“Ÿh¼×N¢†dÚÁËë&‡Ý9y}­d”–ìêØ;™ëûeHv¨)Uª^no'óŸnlìÉ& ÉìtѪ[Ö»¥–'ÈuÊÛ‹ëÊå«%­·X˜aª(ÚšË-Û¡ÕÜ:‡EðC·ËÃ9™ÑŒ ‚ HACrfÑÁ§'™˜ÒLŒA$ÐŒ ‚ ȇ)‚ï†-ÄÀ1{©Oïö³c?ùéÐÐð‘ÁŸôöõ÷õõ õõ õö>Ž' X¢v-êÑ]¤Ö8gr¤«•ùèPs¯Üfå•å¶æVý©á©Ð# Ü­ knÁJŽÀ‹Ûò*CV_Ô¸Ú°À|Nøuëò*iVÌü© V òôÔqÖËÅdÄAö« œ£{¡–R4»ðZ˪›[¥¥˜)¾¶tl[·IDAT¶¬]q¬ÆÛÕZ_²½ÅÒ\SÂäd(šiGzJlØ–SÝ‚TªÁXF´¨³xœÇÍÎ×­³ŽF{1“ÏÜ—Çf*îåö"A_HŒ /\~êÔ™—^zí¥—^{á…W^xá•©©OœøÓ‰úíï&~ù«?>ó‹¿øåø….'·òÝÞI9“ek9/±öõÐ.ïâ_õ×™¬_ 2>CLC2ÝÐÍ#‚ˆ{Ìgq äë‘îV±5wö¡’#öâz•!‹ªÏðœëÛšBlêØç@›{Y1sõ¹Ì؀㩗óä6Z-mŽ\*®,¡Í,§´Õkm•K0V Z–¥8ÖŽzê-†æH IDATšÑF~+šiGzJlØÖ/tT Ò©¶©Ñµl8‰Ç‰ÀÕD0"§ÝìÝ:«ÙÛ‹]kÖ¾¼6“ ¥@%`]ÆÀoCòÁ–ûœWI¦°Ø¼šB­•°3™1ýM7tC¾ pãÞkëÏŽ9C`$GàÅMD†l‡n\µÕ!6ãØ÷X=—0ë'¼z©Ž ÿðK/loYZqlDO½eÓ\Ó$AÑ,p¤+ùnÃöÞ„nÔè¬>iô-ÿïm ÛË}ò½5“ ¥%J@ц+ @ À\ÑoC2â;ÄךÙ@uÅæIL­q|ÎäP¹1¡n¼e½7Å «pG’­G¸[Ó[rÄ^¤&êIDATÜødÈî± ±}7n^¦>×f$N²¨ÒÕ$ˆV\8s5G§´T\ †£[–VG=Ã~Li®íø®hf9ÒS`öýF…nAVªÙjt¿ú$-Qg÷1k{¹O¾×fô"îÙß?¯u  J  þ%®Ùï†dÄ´dXà@6ͦº+–ÖÇíLµD+;ƒîWlTž%îÖŒCìÅõ$C¶ÃV[“+؅ؒèØ7üºÆ¸S´>C‰õò€c½ÜAÜhy—8m«¹rJY ïëdE¢µ,¥86zÚ~lÓ\³#ðUÑÞÉr¤'݆Mý’–nAvªM5:›„ú¤P¢Îî²z8½IDATcÖör\{l¦^àö"y´§$?ù‰4$§Žd’_?£ÉÄþàÌsµÉçj½’ÀIUb¿¿HE¼î#£~Qb©ù‡^ëW^~îû½u×_{êÔ™×_?ç¦ÏÀ™3ӧΜ€Ó§§Ïœ9;3£O~"gçƒU”’3¯·4¡3y¾0WeÈsµ^ÉzHjæGŸ´ßlÉæ¬z­ÑŒ ‚ H¹à‚¶Ù”ésçàÌééÓúlÊÙ3ÓçffèÙ4$§ŽŒ>=ÉÄ”fbÌ‚ ‰ðÊËÏŽ-^ôAAd6ÿOü¹)È,‚†ääᘫÙM&SXÞPl2IDATš&KGB „m2á”1[ûM„ôiSGÒ-Ôœg[<÷xï{/øàÞýÁ¼;{Éû—ç|hy·+'ÏÌð”"ÒÄLÎ|—ü¡<« ù`HöÿLí]'›>Ÿf$¤@8^™0鑉§‚þIŒmÊ!³ytÙ pĉc«»!Ž¡^¯c²—ùÕ…\–ã5T»w‚Ϊ"xîñÒK¯Ý÷àcä¿G”øïŸ!™é)E˜¤“!Ù^8 £(»D—X{Î’}עơ“M5« )N\&_}”–¹·J@ÿC{V'W,œ<Œ#+ZÙŒkXTRŸo>!Hªyï{/øê1`¡IDATõ×’ÿ. ­æ­œC2w+„"} ÉTáä7HVQ‰®Yfj É|w(_TKMòDhM+KüKjQü.íF'k_bÆàZèê°²™ÈÇJÊm¥ÖÊ1#±„KK™2aÚ+0â†Ã”ž×ô*S’a«Ä˜»¡]´Ìœ•×k‡<šßÐoü•Å’@,Ì,Vœ|¯?á”ròWb’W×oX)=M.Xb•'1Û÷!pÛwh÷-kkð{¦“SZèñ¦×çtÄ/èÙ”§#œ[S’`HFü'†daáÜ¢ÔìO$ŠK±!™ë)å‹j±!JåJM)I/½f<¸ÑÉ:ÊŸÝ ]¨ÉÐIDATí»zûʽùõêü€< ¤èƒW>)>x!f’F\í›s+ž3™Œ!g'wCK÷fô ã­<мy'…Êó;{eãKƒ“$Â…Ùz—‰ú¬O›„Zú¡È2<·›u™Kx¡Ú$Æ< ¶Ðulw>Û|ËjüžéØ«<Þb9â?¬Ù”U¼•}7$ãl¢ÿ¤ÊLn’EхͧrëÌ–!øžR¨(Qª@jj›9]ÝãF'ëFþ̺ŠV¶[Uµ)y4¿¼.o¤+òøùq,._TM–sØ1ì­„z^7ZÖ¤ú†ŽT\ £2Ƚ#”£2ùà+±°£Ùà„â«IDAT{&'¯Â¥8Õ×ué>À\â&T—ZiwÎg:jnÏtîÕVܬŸîNõ̆5›2˜2C2ΫøNÊ ÉtáÜ¢‰.Iº’]¬nD©IÕNÖCq%ÔUUʃQ9Ò5’'IÅ•#]y4?âTÜ7¤œüV#Rq%ŒËú7x±XØ/7² µ±¢{KܸH5»*;wþ Ú¬§mÛ5ÎÎgVÔî{¦×ø“]_Ä {6 É™JŠ Étáä½)ÌY%ºnH¶!Y€“¨–-J¥¥¦<ܯiÇNÖ½üٓЕeU•Š+¡¹y¤²X©¸ºº,—|â×P‹Ã´×ÍVqïŽDÔ7†I[_IDATBåõ#ÍÍ#j¤èÜÖ¬«†ÄÂÎnd~&­c ÊÞ\s°Šxçî\µRMÔÖê]ËÚØK„NIŒÙ9繎bg†vÛ¡g â'÷î~}&þ)‚ç3œÙ6I1$;zJƒô1$Ó…“0wd•èÊIKR¸Õ¢T‘ÔÔŠû5yȽ®t²äÏž„®,«ª”=¦p·u$Ï:üŠ[CÍòÁ Œ¸š±Öµ©ØÍîhœú†”g$CýÃ0ˆÄ®ºœ “¦°œ}ºÕ*WÚ&9ôvº µôדe}€µDÐè,‰1#ç×1-v6W–‰Ä=Óžk¯x¼=ØÅ¿ØPY±¡²â‹Ÿ/ùÃç–ÌIDATÜg‹?÷ÙâËB«@a_ôACrê@C²ï$¥?¸¿-<®ÈSÚ‡Ó¼7àøHFà‡"xžÃ0$ŸÓ ɧU§ÏÙ3g¦Ñœ‰ !ñÌüº"H ™UEðÜDÑÿi°oL4$#‚ ’ThCò¹i}6E7$Ÿ9s–9›‚†äÔ‘ÑÁ§'™˜ÒLŒA$hC²BÉ`þ&/ú ‚ ’¦à0%C@CròHsCrj°iö’WßY×χÖDL!@þ?þÇ»‰ Én½Ÿô0$óÕ&Ì -ºVrhHާ¸„ ik>K„r[ii[Ä…7éáÉÑû ÙÕ]žÅÌ–u\pO‰ŒVƒIDAT HòIØl×êjfE!츟42$ ŒÇ¬ ‰'+ýõÖ熣!Ùsq >«46žyªIQŠ+ ß²ñ,G;n²­Ë>ê‹“„öÐB£kGóš¶–:.€wJ´‰ådžõ¹³J”€ Ä÷ZgC²]«+>rQIKC²ÞºæSh…ÈmÍ­õlQ’㪄=TËd˜¶jæËøøW’§hƒ\`ÛqmûÖÊÝYÊM—0™d¸‘°¥ÿúâ@ @æŸoN¶µ£¨U¤¬E_ºè”SrÛ¶Ñå`q¯QÁ9£•DʨžÃ=IjÇ0O‰´XAæŠläIDATŠ¢(ÄÐ$I†dÐÏ1Æc¤ŒÏC)Ïù³qAê ÉêxÆcö†‘µÀ±t¡!9ì¡J5 º©ÀhYª:¡òúÖ"ëç°Ñæú h;.½^ѽPK c…É$ÂtY‡¯„¾8º·ÄÜ„oN¦ÚÑLCx˹ŽÄl;²¹ äÞÑʺiëUGª?†.Ðá²q\ØO‰øð/ÑpF(°!Y…Ôê’ÏxÖ¢÷ÇRhH‹ñØbHælÈœJACr"P¡F¥H—&ÿd¬£6énÓ6#Œ¾j¤¤—‡^/©¸²„ÆŠ“©‡ëð¨Ac9™nGqQâwBlÍm Žh›åó -IDATØ-Fv§eô)ÅòÈ<åÑ“cÏ>7{y*öòóþËóþËË/ÿíõ×ϼþú™éé™ ,Z´háÂ…Œž$·JÐL¾­Oh_µ¢{KÄ¢sÄ©4$sŒÇü ÙS)hHŽf¨¡º½#]ˆt©Ö;AuB-ŠÒ¯Ïf„ÊëGÆ#½6¬ÍŽëK„ÔqJ?™×ÜRž6±[ÅËqa?%¢X™¬ßpù~ðãgìü}Á/žùÑ=}M•9垨!™¡ÕÕÛ¶Õ²/ žH•!™a<&ïMan(¸+… ’È£Z`ŒP¥âÊ‘®p׈±Û:r[©ùK+s>ýIDATH*ϯ-ª¥e÷¦×1(¦çÖ)™¡º½#EE#.&p 3o}3nþÚ›ÙÍ-å@íÎˆî¨ ‚µ=­E@°“§¸ãÀ>.ð”ˆÌ_Þ<}¾2¸®æš+®(¹òÊÒ«®*»ú‹åëÖ}îšõŸßpÍ6nøÂÆ _¸vã›®½rÓÆ+oº¡æÍÓçÛ&jHfhuµßYçûécHv036”Û¶qïJI/ÒÙlüZµhdﮉªT\9Ò Ú'½ŽT\i^ÉûÆBåõìé+ÃŽëP/†›×M2¥âÊ÷£¶¸ÈLá­T³K?E9Ú›µæ¶ôsõˆ ƒ~SaM Ú aÍt—IDATê¸ÀS"‚$’S’} ÉiŠ›‹‡éK$lþÀ¸¾¾L’DžûÓ+ç½õ-,P¿O-\,X°p Ô_" úo’_xñÕ³§_›ÓIK"]­õå-É[Aü'ÒÕZß H³F¼„Z!IÐŒ ‚ HyËyçÃlJFLDgô„yFŸždbJ31fADxîO¯Ä½-ªAISp˜’! !9yd¢!™ɽyXP4¬©Rst¤mrÒ6°LÁx\¡‹''ù¡ E¼‘ C²¹ [ÒéaHæCmh=˜íj4${-*îä˜aèæaú±‹>ó›ÓIDATéòDî©Ø¥Ð>¶BFwHF½æjýB}"¥‹u%® E¼â»!Yý5Ÿ¶,S˜BÒÈÌÙµÝÐêb¦å Éžˆ;9F†y8IŠc©æ ¦ãÁ_çf&Év_#HÒðÝ ‘®‘½öB!\ÒÈLïš| -ÕÐàÆòІdWp’CÏaK‚µÚÃgKÛdÊ<,[¶-5@–mmy³½%˜>á%™™ †ú˜p)–ccØ+p#ÛkDl¾sÔÞ@n²GV‰ŒÄqêHPrÀ>ÆrY˜3”Vñ´P-èu‚…Ã¥öŽakVinÛ¾€û'Ýü˯§XvnV}e³‚8Ôø³¢|ÒIDATnHŽtµšO2MGÊ\ ņd.–]»y¶’]ÂJí 6—X²Vó°¶íhƒ6ùUÙ¹Mʰ¶V±,e±‹$SÙ`ª —²a9&{»pºFLI2¹¾ËìÅ·\#;ÔÝ[ɬާ¡u8•–M4»×9¥ˆ×²¼¾í¾-L§´ÒŸ?jÿ“‘f—³oæÉZš sÒvn§žŒd¾’Á¼¦€ýÂ'RkH&°’m»Z^Ñì*9´7˜Xâ€<>bL®k{zFeÁ¶ô[Le1 /ɶlD˜êc§*0 §kdßÊÚ@qgϱî^K¦;ž¶¼·“|¢¾'M4³×9¦ˆ»Nßæ@ïH8oŠçIDATÊɇ֢@8¢ÎºÚþ¤“Àìr¼àm¥‰ÈfçvlM$H‚!ÙÀå•ÄT’Ý îZhyEC²w|NŽÑêwuŸJMÒ¶F†3’ñ–£MÚWR–"ûŽÔ/?å]ÚºõO: ÌŒqƒ·.&íí܈w|7$‡Ê‰CÚÁ‹ÄAÊ ÉŒ]›÷¦ðUØ^@C²[rho°”“ߣÞÁâ ÿµªæζô[q+‹ Ôl„\”ÃüÒOC×H¼yÙS‹r¬;½B¨¼^/™¯ãIÅ•@NIÇ•s²×¹IQâ-ËÜ‘vvµ(ѽ%#ãëŸ2•:c¼àéÂÁ¡ ;7³¾b‡6y ï5’ZœOÓ+³IDAT>r[©z·Y0P[߯´D÷–Õ‡Ù–ì @ÔµP߯ÔH-ÑñRu‘¾ÂÇžá}IÝx'Tî’@7$[³ÝßP[¤¾_ 6JÑÖQï‚”7¢µ ±ˆŒd¾ÅØu!Õ4ä´NYOý.I'ÔÒß–Ö×CO«¥®r·äžäe%DnZ[µôw©ÕÔ‚ÚV=køÛ†¨·¨]ë=#íò²A•3nY_ªi¨Zm“q.k$›××äñ×w‘=2jC÷%«±YŠåv<©f—Y#ëÙ••+[žµþé&EtËò÷Â…Þ‘yv(Ù=’ÃEäŸRN—-î˜Ð¸IDAT !*c¬àµ…6Íñz‘/Ê"Hª1X\ýóä+Bb$/cÚO|¼n¦Þõïö)´ôoú‘$‚†dAA’’3ƒŒ>=ÉÄ”fbÌ‚ ‰€†dAAæ 8LÉМ<2Ñœ<æIeQŠ‹ B ÉB‰Â"Í ÉŽÎdºpæ¹_n+%ö™ÑÚdß Éóꈉ3{ÞUí¶­l A2$’åQMÀàæqìóž47$ œÉtá¼`ô²z;¡¾ˆÇòô{IDAT:e®6ÙgC²þüÍhegp4xèÐàŸŽüøÇý==ýß~àῼþ¢±­ï†dõ‹ŽQüc ÉŒ`Œ{SèÂY»3ëÐcܸ«ô[çSR£MÎCr?¨óa¬T\9ÒÖG)©,ˆ¼²Ô~­ª^&NÙóæ¼M—'"žä¥¸’|ú‡B#ŸIDATžþég/»¤¬¬¨¼¼¨¼| ù¯‚üoÅš²ÒÕ}OÿÔØÐÅ/}‚µê÷àp$ÔÝ;R¤_޶„t{¥: ýk$õDfÌbãô«Ö 3–wøÐÙµôC‘:­ž¯ª1ÈõéwAÊÓ[ÐXä!ºpÆî´r­—Äâûd Õ4äk™Û6š/0$ç×KwŽšýWK3÷kºA;ÂJÛdâX#Ž"©¸r¤ôëcìuô*}E½ø*XYªÙe¾¥ÞBkÁUöÔäé—xÃóH'"j«v ˆ\xáò8VCCrê@C²ï !9Ɉ.ˆR\I!¯¼üÜ÷;z뮿vúÜ9Ç•-\¸ó+ ŸIDATÁÇ*ÊŠ É™’‘Ì ó,Á(ÅE”súÔYǶMÐŒ ‚ H¹à‚êlÊK/½æ¸ò{ß{9›‚†äÔ‘ÑÁ§'™˜ÒLŒA$^yù9õÅ›ož€×\ùø÷@®@/1À‹>‚ ‚¤‚7Þ<½ñš+`ã5W¾ñæiõŸm‰m¦dhHNinH¦÷î&ždÇL—¯ßœŽX_û¸ ×O6Ig®VÖS¿J·$Ì.F6ÒÛþ}êÔô;S_o©YêÔô–šõêŸì|ìÔ©éS§¦m›$ÁLo…8¶†d±ñ˜X‰ê¬¢Ñ,.1sªo`æ!.QŸæÖŸï)IDAT"_'R¦á ×!;¹M_d)An+-m‹XŠ\<¶ŒŽí©:ö•}êq¤4]†æ~ô«Y¬ ¹kó¡S`j¹€Óm$íßgÏž={öì=÷?¬þySݵê‹{îø¬Žm“$’í[!"ÒÙì`<ÖÖ 4C}‰ñ‡.‡aüp ÉèädFäñПèG¾N¤šƒÑ½%%{£JKHU|Du›Ä¨ Rq¥Ñ(Æ#‰Jêó)G‘ÜV0ÍHJ?hþ¥„ºJ†öŠÄ™ýJ…°›É½PúÚsº¹Ýfîb<—ºõ¾6caë}m m“$’QLê…46$³6·|!¹­´9/z°.Oßw“ÞIDAT`do”;€GC²(p:9FÄÆ/aKŒF¡×13#p›9‘|úªÜVj­–­|m“H8XÛ£|JKKÍ×Ä÷HN»0<ÎÛ´²•ݲ>ù¬XV•É¢ÔyW e|ª1NѾ+@^]C¾õ »ro'Ÿ8R©©x®eÚ°»^ÁêØ¶>ÉËÿ@pŸ:QŸ´¯lUPŽË~0º³”sÐ=*æöpÁ¡$°‚;W-T^¯yåÑü††|ã¨,–݆Y¬ø(ÎÀŸÌ«#r¼Â$™†dÄ/fÝÌ0Ó»ŠtµšO¦ÏghHæC'‡)vTÓ뙡Æ6 ³ÖÊroCdMîIDATg~½úµNò¹ó¼òC-Ú„„¢Ñ䇵Š2k¼cK¯-–kRZè©åÍè+ß~+Ž-4ÒÉÜLαñÙ9Èéë,.A.aŹæqÖ£¦,…Cz:¶Ý'=v«I€é}ÒÇÎ,U…\O×IDATáW6ò(÷?”¢¬ïÔ½i©>?_§ÎÄOAùм¾ÈyO·é¹2yOÓ±Vü¶!Ï6žß³çŠžŸgÏÛs]ÆGÑd‘Þ—“àr’B ’˜à8€T©Q` r .’BÌ…I¹„Wu;ᵕkËáå2dx0–uX» T8Ú"’BУ=½àÙ üt]oAs[oö@„BcY¤úî¡Ë],CiÁü-¤¥™ùE­ïfÃÃgç’œ®™$±Æ%BA©p Q’ Vt˜Yc_=­yÝ?"þÆ©” ÕØPXðÙbÔäYOš|²óüÔt÷á§ XžnðÎ,ä–áPIDAT‡ÁW‡ìœÄÍpÅ”$L³Óë>¤’)ªÔ¨z2êNŸà–r8Swh£×^HK~¡PP¤â<-ªÚ«* )–çjºàgGÝCx…¯c{}Òßl5Bš®‡O:ƒ}ø•YY£Ë ò¨R£šõõp¿C)¤¡zT €Ÿ†ZÝìħ¡VLÎñFV¯Û„ C8$‡ÈwÜöÀÿ°wïÞž)ÏœY¹óc™Nó"ýi­é³gOäW½uºøv8Ahµwm¶ 2".ßµ5Ëk¯uã•åXÓçW+çÿ¹òýûxBÀýà2ÝDC>Bàä/þƒ÷“6œ<©]¾{g¼âA¶:+ ]gIDAT¯®íßC‚¿~³Añ«3/G®¸ìŠØÅYaʉǾÿ¡¾ÿ­o½1L¶©Ÿ?sâ±'àî?¹sÇŽWŽA¶+íöÆÑ¿{(‘¸a³A#Z ËÇÃa„,•¦<¡< ;v\¶¾ÞŠ]<‚ È–f÷£!—1¢…ظ'B6:×–[ffþEQÜÙ&'Íï.¬÷£‚ ÈÖ…†)œy$‚\¸¢ßPœÑB<ÜaJsݱêOZü -¾R}Ì‘íÊ~ FØ\{íž3g^óþÝl½K SK {´À `Ñ‚;L±_Á¹ý#·Ò/ýQו+¯Üm~ïtrór¬IDAT:Çq>·Ò …‘•³ {žU‰r#}é«ßüìŸ}Âõ÷®Ì­C-td‡ÒV€Ûi“Û°†€=*xøëÒ€!-~ðá¯?jOfâáSÖÖô‚?~×môË—?bnDA¼pxw riá ¾|ü6Üþ‘[¿|ü‘äS.®5àîìôçQù!º%€VkG€ŒnÖs» 5G6Ç1²r6‡vÓ}gÕ`!£ò<”â3ÂC‰Î,n£äÕ¢ÁÃÇïºí¨üР ò^ôÙ€ûŽ<øç‡?wgï¼ïȃÁ"h²ÍÏÛƒí8ùn²Þl÷NÔf*øIDAT£:ÛnçVÚ.ÐCɸ<Çq§ —Ʃ߂† pß‘½{cãSÚm½£¿çs÷ÿÕ_|Š|ÏçîTy‚ Û¼ƒ¹Ô0£ àžÏÝïÚÕ'î0…Øn +Þ+KŸÍÒâ‹÷2—5i¶FçÊvë¶Ýÿp‹úéÏžóý»®¸ÕÁC)&#<”d±G 4T€â½²}û@èñY©Ä(ÐjupŽûÞ·ܶëôFwÑ+$xo«Õ¼·ÕÚ0ÿ·ÔÑY¥ØŒðP²…}K™0¡Blz¿ç¾gÁÝ.]Rh»u¬°+µýj4JÐz±Ù~¦sÔ—q„IDATß›‚\â )F0aJOðøDAd8”gÏïÙjÃgÏÓ/O?Óhá ‚\ª<ýLãꫯÚl-d¤Äˆbc…)wÜqÛüÃÞ½{Ãd;sfåÎe®Üµþƒ|á…3}* ²Eáoøÿœ~÷K/ŸÛlEdDĈ:Í‹±‹ãdùØìÁƒ±ó#‚ ‚ ƒÅ'ðîtAAÆ SAS¬{Snà߸‰z ²ÕyN{~ÁÎA;gWNïyÝu““;B¦?sæôùUú®“A<ìE­ÎûnĹa‡ ‚ È839¹c}ýB«µÖélt»]Bº„ øŸIIDATn·Æ m !ÝîÆë^wÝUW]Ól^ØM3%L€·H®-O×>£Vç1RAAKVkmçÎÝÝn·ÛíBŒ×êƒn·ÛY]={ÕU×´Zkœ¦ ëÞ”Žñ¶oóËÎ+¯½nã9ÖD ‚ ‚ Ûc…1 Mè–®}1 fsÍü>”0e½½ Ž}ëÇGËÿú…ãOÞó÷wÙyåµ4R©}ësA™5Ye-vÙ¬ìaÄöLÓ§n—CEqgJ <ØB%jÄÂAM‚Σt»Bºf\ÒívÌðŒ÷Ú·ÛM3×P”vwr£w|ø¦OþáïÝýÑ÷|úãïß臿?ˆIDATÀÞ·ú ïùëëo¹¯Ý È«-–!3Ëú\¥‹Œ¬~u 2Úb$)B«¾ UóœI^5$F±ƒ;±&‹¶è*6ñÚ#¡¡có‘µÒ‡š÷ßËÚXV„ôÛ:H1ȈŒÔnö.„s*-‹æÆ|^”õZ™‰¬Ÿ¢(ræ Ì¶Yv!Êš,ÒÌd¾G¼š@'Ô£º‘ý;ÓívÌp„ròäV1>:Ö:²Ã S6& öÄÉÚ'¿±XÿÊ?ýäØ7~pô«Oþí—ÿŸ¹—…¶4°pbXbùlµšíGÖ•Ñ– “ž£UìB5Yäf@1¦é¨¨tG?v á”µxùû£ï6.AIDATDz!!R*UR’eƉ@(Å} [Ðö€²"¥ßªg^ >[m”Rqå…µ›·Üx…Ñ „‚@·k²XÎ4Œ¾¥X>[%Š”*鉸l•RJRHµZ%Š”‚ò•nn”R©©f@Í[½T#SNäjT>Ÿ­ÒrYZõßøÙ§ÿï§ÜA24ùôZ€“'—`yylwÑÒDÆ’ÆC SZËÚdöæý³7ïOÿþïÞþÁwÜuë»þøö›ÿôŽ÷µ7H«pß®Z)&§xM>”«Õr ŽóyQ”å<ÇqyÕ>¦ß5ÙØë Ði¨j¦¦b¸æ•°tÄ|[qq£>\0IDAT~ÑUt>ïûò}~;”qHVÁg aV¼·¨à*°-`ÙLÍvÚS[,C©at*BÁÖÁøVÓOˆÕ 4Çb2‡ÓÉš§˜BŒÆ’j‰uÜ)–©†ó`£V7’xŠðË‚ÄB[,'ç²B:éˆFmFwX™µÝ> ·=YéY8Æ·ZÄúµTQô–à§®Š‘JOÒc-ꎨʢ])ßúj²Èq¹ZqÆ·Ê˲žöY ûöHv ,×_~Bc!ÌYBÕ|9sX0~e20ã*P“çA1CšX}–ÌY¶ý}ü!Ð>ÑüßÏ?õ+úrÞ½' \Æñb:™ærV¶uÓîFy ÐÈŽIDATô½s8Ž£1 eyùY°Å(@H¬0åá¯íù—ÒÚ˜€Åïýbñ{¿¨|û§?öoÇýáï‹_yÂÜëZ)Jiøì‚uWOC-·”f{¾—E*ÎÛÂŽPÌ@™ŠÕäC¹$·•ä’æ/­>½@£~È¢§>k&¡0럘(Rq&¯ºå«ùÄҜ޲…LRZpIÔ|BÏÜ(ÕõƒÐªx°¨à*°-Àg礢>7bŠrÙS[,׌HˆÑf>º¹ÅÖ YÞ¼%¤%#N±ªo|h_CuÍQ} ÕpzŽP,"ÐÙ(,–“i@H'Ë‹Æ65Ÿ° žgf Ïb×IDATŠ=·Ûfò™²Ñó²Ò³ÒŠ!(SNôè_é4E hR}Þ "üôÉ.”R’uš D‘R¥…,K•Q¤Z B”dn¦œiF‰N-2êkÍ(˜=†%®˜+{ôYäLfâÙ].C~døl5SNxO«ÂáRݘ·U+uÇLðlAyGt¡-Á´-A¸r‰Ï, Ûþ¾þØ.Qüßß?³URJÕr9û4Q^ *—u¼@¶Jˆ"Õr‰D9C 7¬Ë´Î Úݪ/ýMŒ)“¥¥ŸÓ-7Þx#ýòì³ 0žùqI‰¦ÜþÑ»{þ¥´:;ÖZäÀ;÷x羃ïyÛ‡…·ŸøüG¿sôc?xàDÁÂIDAT“¹M}ãÈÿ¸íÀõ·¸Þ§N~§]H•{¶ùìå§u«å‰¥9›ÃÁÏTŠ3\^µO ¸¥é‡?›IÕ–4m± ìÒÄ ¤%¨/ƒS¾¶\#Mäj5=02¢§dm¹nT„ŸÍ¤hð`V-XTp- ¤õ8E­Ôõ¼öLv¾ºy…8²·É˜qŠ­ú¶dFÔ>S„ú²ƒk¡Õ`*ï-¢W$$j>—¤Þi«•ziÁ˜e æY‚½½Ö.‘«AmI H€¶ÒI[+©GŒq#s{Á1â0a¥º‹ëPØéo¹ }„tréH¥ž™ÒÉò|9éæìO>€9ƒ¨æ{ ´Ì©cv'ŽÝüÊeÉŒóQm¹nïú„t2—HäümÉgç gÝ(;—ÌÙõ4ƒögám—ˆþÀöÏZÎ6o´èð,O¹1õgÑw»;ë Ö{ܺûöí£ 1nUI$xúˆ2ñ\ôY>¦5NiS¤å¯|±g=~ûÂ׿^ÿÒ?þøhùŸ?þÝâ¿ëƽ™›ojµž¢ŸÌÍ7½ëƽ®\ÖMàúù %Iö­f˜©o·ç¡ß­-ŠàLbÝVM·Qíc¬IDATøHg âˆl¥’­GÄKO»nùÄ#ÐQG»dÅþSR¼æÕ`hed°€!Ù¼öô’â6µ«P†ß%D‘¨.†jfSWŸÖ{œcT'@ F5}Špè†Dƒö$ZãTÊjb7³Ãè I¤J„°·»Ÿ†0‘™Þ›w¤è#üîa§ojI±<Ós9ôi”RV}ƒÝÈ’¨$)ô¿Ç@N5­=úF»šn=Cr÷Ún¾åÉï)ÑÁµÙm7ß“‚•N‘ìÊûuÞGiÜ}µ§~öò},ËDð––RúOù¶‹¿ÿ0̶Íâ·»)dåÌ‹„_|ú•W^ÆAA6IDAT8sæ´ùyå•_~ùÔË/Ÿzé¥çýkí—¿|ö…NB~øÃ¦‰,ãdùØìÁƒ0ÐÕÂþ瑯ÿ—ÛEû–?øO¿ù“åoßõOü~ú÷¦©ßÿéó¯ÙÓ¨y®’üÕÄ‚&‹‡`!âÓlT&¼¨aY`ÄÄ2¸?jž›Ÿnà3Ƀ—DÁ"‹â€z½MæìÊéköþö©SK»w_ÉÏþãŽZs…Òé´ßøÆ·üèGÿ÷7®}+,ž8aMŸ‡¿z4äuŸNwò¡¯=fß²ÞêÜõO™?ïúÀ§Ö[®{SÔJQJ«’!‰Ç• /j¬,°é¨yn¦©RaÅ܆IDAT£Ào¶*‚ È"—«$¸œñz˜­Îë_ÿ›««+æóÉœy«,1ÞH»gϵ°sç.3×PfS¼\ÝnïÆç_^^‰‚ŒœMAÄ—³+§Ï_xíMoš“øé§ŸÚ»÷ çW»u6¥0"AAK–k®ù­¥¥ï_¸ðZ§³±±Ñö{¨‡›˜˜¼âŠ«öí{çÚÚysëP.ú ‚ ‚PÖš—w¹×½!ù[ôÞ”É Ž›˜˜œŽ› W8n¼tîÕÀú=B˜>FQ«ó¾Ûq.|q‚ ‚\â k6åÀ-®}F­Îc¤‚ ‚ HH†òz7èohÒî!IDAT1¿ì¼òÚë6žcM´ ‚ ‚¸ÊËò×Û»àØ·~|´ü¯_8þä=ÿx‡W^K#•Ú·>”Ù¾pq XÙÈ홦OÝ.'¶¨~ òá¼Ð  !‚Œœá¼,¿;¹Ñ;>|Ó'ÿð÷îþè{>ýñ÷ot`ïÛ?ý†÷üõõ·Ü×î²WH6_ì>讳כå#ÉêW·*OT? ¸¨ï“÷ ›&<Ñ]h¨èkÖk‘Ò[lï@KsÕÖ¨1Ýðrtç»èûÔ`ë …AÍsŽÅ“‘ž ¬Ý=˜®8Ê#n(÷¦´7& öÄIXo¶×›ÍV»ÙÜhµ7>ýñ÷Ó½,hóëÂIDAT´%ÈæÃk’AŠå³Õê¸(OT? ¸ó†±F`š!µx¢7"ºÐPÉV ˆbïtVzeÉöveYåÙ½¬SóSÕQ¿Õ9UjT³¼ùFiY€ÏV aç DHñ|¶êYh%*qí&ˆâr¿Å_J ¬Ý=ðÙ*ÉÒW‚Ž¡Ì¦´:—µ7ÈìÍûgoÞŸþýß½ýƒï¸ëÖwýñí7ÿéïkoV' 6R+Åä¯É‡rt]1ŸEYÎs—WícPú]“½žUÕ¼-à£bmƒ#¯CÀÒw°¨â9}AN«è|^tíïóÛ¡ŒC²jOœWRôŠ÷å­—•íÄI‰IDATÑUŠ]°%ÚËôo Í›Þ.Í0¯_%â6cx§æ}­ä¬‘L#¸Ÿ­6J©dºtGà³UBJ)kÁ5³WÒd±L1;I÷IDATS¢$k£\p»˜+»õÔ5u­GÏlÕ¨ªmõ:jú](8vùËgÛšOXb`f¦hìEÎÜA˜Ñýé'‘Û%”:íÞ¯èjÆžF¦L×B°'C>³^¬v÷·ËÏcào7¡ H©R£Ï¹Çȳ)Á)­Î޵9ðÎ}Þ¹ïà{Þöaáí'>ÿÑïýØødîCSß8ò?n;pým®÷¡÷™.R¥Ãžm>{ùióì˜H,ÍÙãÜ:•„â —W„Ãn)ý*=?›IÕ–4m± ìÒÄ ¤%¨/ƒS¾¶\côÈÕjÆ`O?/8%kËu£"ül&EÏ¿fÕ‚Ey¤oŽIDATëeeôÑßP W‰~f÷o Vz×?ûÇo!­Ç)j¥^:,ø[Ér¿"‚`zÔ¶w¡P¢2³<?2¿Ø«ÀO§RgÕJ€ŸNIsމmyÞSçÜ'Z.Á%Êë,¦VŠ` Á¹Ô–T+½µ«œYÐK ’©RC_…¶_°|Cs~*éäÏÎ%s *g¦()#\ERªã£ç`ä«•zÉhP æYW“ËIÅšG J²,kAíYŸ@ÿaÚ¯ÔJ½dz7Ÿ­êJ¥[~Ôz±ìF‰âçì"v ™ò5¾\€!=éCçK¾ûÔÓß}êéOþìŸÔ_ow&ɵ“Ô{ß!IDATäÚ¯~û›ôËz»ãɧ-×Sú¨R%Å:Ä BIW0 å‹G¾cÕmê]që$*R½Â) -ù¡ì¼þé]xõì¯i„Ã¥zEµR7Nö>V (=<ÛÞ…F†}”ì3æ“$Ɉx—Š·7«µÏœ8 –ïCüHжsŽVÇ‘aë¹Iv`¶c$}¢ûOd}ÅXù[ݲs0Ó_g9œ'}:—€}6åâúÆñÇï7üþ‹ëîl®Gj~“êÆFm±p^ä³Ufô+d¦XMÎË€P Rª¾¬IÓË5)-ð³ÈõÕJ1•™§|˜JÖè0ÍIDAT¢¼õ²2zô·,QHK5}’Þ'/ÅÞ@¾é]xõì§iôêÕ+y#JñµR@éÐËÞŠoWŠ$ª_è­0ô" Ëf©éâÀŒ Lj£_ùâÈÃÔ¼­ºŸÝJNÙ~Ð+ô›õ¤Œƒ@=£¡[A“EëšL°|»ù#¤“6TäÌ‹GÇu µRÏdù vŒ^ß(þ©Næ\·n˜É|íÉ"Z½Xv$l» …R½¿÷¥Éò1­qJkœ"½(å‹=Óèqã¾Öøõú—þñÇGË?øüñïxü]7îÍÜ|S«õýdn¾é]7îuåjèw;¢’$ûV3Lm±ÔCIDATÓ·ÛóÐïÖEp&±®øÑ->ÒÀ™ÂJ%[Žˆ‘FÎnùÄ#ÐQG»dÅþSR¼æå,—QRX ø•h»>꣼·\é½Mãgÿ¾šFOg¶¸’94fX)ÀÆ÷KÀ…B‹r}qþ¤=‰Ö8%¥èr$…þwV:%I)³æÆ~Ë^›Û EAò]BìNã'ß”")æ~?W²Ä8®¡4Íà_GÂ9BÕEÙÕtê鮯ŸÝ"ª¤H C§J%É´O|?»g#ј†pgˆ__–†Ð2”>.•¬­þödÊgÔ‹Ùî½Èëç!êë•äo7EzñôÊ++«¯œ=¿röüÙC»˜dIDATsνzquuíü…æÚZs}½Ýl¶›Ív«Õi·»ôóâéÚ™Èò±aJxþæoyæ—köÏÛÞt5NÌ¿o{ÓÕ^ôu3’X÷9`äÊÄ'—‘'lÞÐe «i ºPHÌ0eB‘ñ –·"!¤ß0e(÷¦tº“}í1ûg½Õ¹ëŸ2ÜõO­·\÷¦0ïÎì!‰Ç•‰'*B.ëù²Pô»Â‚òzÒR™Me¬ôÜtB.)¬Ã:QÎŒè½4È6Bw —±àdùØìÁƒpÿÆ)æÃõ×íön|þåõᕈ ȈyN{~jg‚ È–ãô/ÏîÚ½8nC[DAIDAT€¾“71197Áq@¿p4ýK/Ÿk7/Àâ‰ÃZ!ÙF$‚ ‚D%ÂEAAQ2”’AAúg(·Ð"‚ ‚ôO„{SÂϦéûæç‘Ï싦‘æ~½Þ`²÷)vH¢¶„ðÁªÔ´'ŒÀ¡¶HH¢Ãð*2&Bd›Ò#L9ò…ÿÙ'¼V¤òÄß¼;ýߥ毿øêÉÿóë›îÛÿíwo¹õ‰¿y·ý\¢þþîAw|®÷¼Gþ$·ùfãHºk²n™ðhb{%e„h ße–IDAT¹z©ÔOC¸}£ï £/¯ˆMtߤž}ùí¡+ʯ0Ö÷ ßÇÀ·«ˆªäX¼T´„·[ˆöRóÇZI{Ó±×Ô[ÛHþcX‚ãòù¼([¦¡Y­Ÿ¢(Z³mSyé=›Ò5à8Ž~Yo¶Y‰›°»o‚Ý7í~Ãͯç…7Üô‡¼pÇï¾Ïü4Á³”mi('ŽØb5YälKrËhðÙjì·i‹e$èµΠ‰g„h¹z™¥Ÿöuç Ói†äl=ˆî9ƒÔ³¿&Ùªëý߆µÀ=k{4y¾^2_¼Ùó‡²è>ñÙê`4ÙT¼õêA»…h/¡àóN÷q.RuXIDATh½Ò×^Û(vÐdÑ\ëOb¨i)UÒ³òÙ*!¥”¤jµJ)å#*ÝÜ(¥R%2ÂE¼û¤w˜²Ñélt:­vZíÎ…‹Ís«˜©[ë¿ ø<ÿ‹•ÀÒÔJ19Åkò¡\­–Kpœ˜Ï‹¢,ç9ŽË«ö±ý®ÉÆ^Oø©æm7ë$5M­jÞ-–¡Ô°ÆXFÛ6ÐtÕ·»„XÕ¡9Ë9œNÚë3…$ôU›,©–Ø|^d‹eªaÕÑߎdV4odS+ÅäX¥çU]€¾Æ±ží¢ëàøÛÕ° µ šü}Có¦·K3šÉež`ƒ8| `éˆ}çõrîIDATœ 7È«À(‚i£E÷^gƒ.öå·î†ösZ“<Çq¢˜§‰UY´ç² Y—g>h`†ÿõ’ß?6o³ZIÍs\"W«åB©ªÉ"Çåjů Xv:†U@X;èSSfsÚ-Á°ÙH†ý½d+—&ÒGé¶ÄÁõò#Àn¾vfâöŸúz…ûÔ×^®(Š£šrˆæ?N„1b!ÌÙ²œ9,¿2™(+ûÙÍÜ&Êšý+=Øì¾:^z‡)Ùµsçå»wÀå»wî¹úŠf[Ÿ¡ÏþØÿ®Àú9óSùßíú¼îÚ×=òW7ÑOaúû»ùì‚mVOC-·”f—ú^[ÞIDATB©8o;ÁÌ€b­î^)JiA“å’t^DI.i|vN*ês#æ{Ã]Ò´ÅrÍXøÑ5ŸXš£1m#S>$k>*Ùª“åÍ)|Û¢Âj>ahf è êª¯Z«O/bgòªC¬ÆVð›¯Ét«9byË2õéZô!X°¬í£g@»èÒ¬ú6Ì…D-5|¬Áô †õÜu÷Ö:À ^ Ë7J;$ûyN€EÁÏh1¼×Õ ³}ù­§¡Í¢Hµ(„(ÉÜL9Ó ’1y(¤C¥L9Áè6éZCÔ¼m.³‘)÷î¾CÉ,rÖŠõ Ìú}Œ¬ï ªZ#]ç´wZ»IDATáÅœ^B£d.kÍÙ*)¥j¹œ‘¥a³Ã>Ù*!ŠTË%å ­ZEe—K§}jàÖ3°^¾°ìƲ35Ÿ°M.̘ïfgÚQ_ç,E²w‰äÈDó>[͔ް@8\ª3þª±x¼ÎlAùpƒ¿ÝèÒí©R£šåõI+I!Õl;‡¶„!.ú@÷µÕ‹g_;¯œ]=ýÒJg£KwÑg웫M+F¹ïÞôŸòý¼÷îô·ï*#©ÒaÏ6Ÿ½ü´yŠJ$–ælˆq‚›JB‘®O'E„´ÞÓ«•º.Å+-5ÍXG[®ƒ1tHäjµ%ÍWˆ#‹q£§hËu³gDAIDAToÍÁÁLQ_á;e¸œ–Ì%Ñèh+™¶X·V‹ÐÒùé”ù…¥§n7#èÒlõåg3)Ú–~ÖXÆ7½k‹·ÖñbXžŸÍ¤jKš×sz¸_ÁFð-†÷ú5¨e´È~ëlhF3ÙŒV*ütJšs\dÒ–ç±¶{j¹—(g±5XCóD®µ%•]f/ù}£Éå¤b]4 J²<ð)É(ŸJê›bØ@2×Öâ³ æÉ+Ð>©RC?AR' .×hYKÏAÕÎj¥^Z0’ 3nîe7w}øì\2—0<]RÆøÊˆ9pp„­|6CƒFMž¯g\×w…Ùª§lPIDATò¡0S’L»ñÙ9s<*Ï=O;÷QÑaÊk«kg^;ÿòÊ*œ9·zöÕ‹ך¬Äë­&À:Àzåèé»ï´Ï¬˜ŸsçÎ}çKÝvÏO<¹µåzpPŽTI1‡§±ô²`ºÂqúŸyºƒN ~Ê~e†Uœó‡<€¶X¦é7S†tMÍÁAÈ‹Õ=Ô`!PÙ-MÏpí«-ù\ØyýÓ»ðÖ:žALyÏ ²¬"túðÞ`"ùm˜†ÖÂLSÛG½>’$IrŸ€Ý‹8«ÚCþ&š€1ÀŠnŸÈ厑õ§!$Ì,ÎXÀgç$ÛQ“K–5m±œœóÄX|v@t\¼IDAT!SÖ¯ÿô›1_£æsIÛd˜~Ò;L9ûêÅWV^{ùìkßùñÉWέž]=¿z¹@M©}(ýGõuïçÜ:0bÏó 5¿xc£¶X89ñÙª3úõ0S¬&çe͘¸¢~6S¯äúyáp r¶™c5ï<ÍðSÉšãZ]sm±\³T‘jåEÍ Yõ2Fð>5U+Esf…Ší©F̺ÌfÀ)$Ì&z²t°i«-–k®IÛÅ0¦&vßðMï.ÚS냰}̦­Ós‚íïkó`#x+Ã{½ jíŠê·ž†öuÚPWQ5ù{8Ÿš>\ ̘ÁœPpŒ8‰˳IDATú•ß7æPUG­x¬Q0œAÍ÷ˆ_ãØ¡–³›ËIÃâØ'N¹¡^,¢ÚYHÛ/9«GŒŠE×ßýl[rÊöƒÞ1Ob©yûýÚrÝÞéd.‘È%}û>;¹^ h7>;ó²5•Ò+ýåcZã”Ö8Eüí‘/y?¬Ä÷ÞöþËw¬ÿä¿ú~~õ“ÿõð_¾ƒ•׺ùY?ƒ¤$É¾Õ ÿõíö<ô»µE‘œI¬Û¿-‘RÊŒ½Òœ…HŠ» ûn_•ØÕ!D‘¨.†jfSW«¦%œV*5‚ÔðQÄ–Ë®MˆYQG~Ï=Fpe$)¬¶·5UßTs»­IDATp¥÷)ÝÝô^áãcNe|<'Ø X60‚Ñby¯½AK}øm©ánhâã´´'ѧŒ%½I¡ÿæLIRʨ<1öÛ<ÊSqËVlò½~P9¬í¡ °§vOLôã,\OmÊ–›ycÙ¡”Ò«ïÖ>6é~åÚuëéS¯@=ûÛ™Ý^ö=’$€~Ÿ‡¯Ý˜õuêãÒŸæ Ó´LXGô—ÇI…°;Tëܘ*‘ù›«óc§·6¾xzå••ÕWΞ_9{þì¹ ç^½¸ººvþBsm­¹¾Þn6ÛÍf»Õê´Û]úyñô íLdù'ËÇf„Á­½þÀŸNìýã/.@δ¸IDAT±v©y®’ü”âÄŽMÁBÜGIãa°¦‹#ÍÈ6oè2¶ŠWl=)Ïi/Ð/ƒêLØÈ¢¿¿@Asú—gwíÞ7@oa™œà¸‰‰É ภŽú…£é_zù\»yOœˆð²ü"¨•¢”. X™¡‰ÝZÄ3Â`MAššçŒ;õ%…=ózÒR™Me«è‰Œ²Èåj .·¥^ ¾ ~6AKœMAÄ—~fS"¬Œ ‚ 2J0LAAdLÁ0AA1ÃAAÆ SAS0LAAdLÁ0AKMÇâ%è0âÝIDAT›]Vrôõ߬rYŒ›>lèkû9Žã\ke „š;5On\Þø S¹äá³Õ¾_ö+‹[£ï÷êÉg«›²Lc¼reçñ±Ct„‚ñJ|×ÚÑÙª"ÙÞcŸ)¢{邊ÖKô·Ê›­ÃAŽ>¤3ÎúHŽûìúpËÏZ9DÙZÎ1žÔô¤t8,ŠÆ²÷ùÌ>ú4åØGÕ´ûztVQi4Yä¸\ÍZË>¸`ª¥,ç=%3êÅ*7p»Áz.Ë^»ÑM¢¬i®Fu˜Nßd7ÍL®WÜÚåWn ý½ú ÐÑü6Àýä/…,–“sY! Xyu6~Køn†ðg?IDAT10LAdÀdJ)I1GlB(Rª´Pó3`õ™rϾXÍsfŽF¦l-í*¤Å2‹˜Óáp 2 :vt,³ë¯jÕgé4û¨Z(8vi²XÎ苺)ÉZÍÌ@H)ebƒ«Ù*)¥j¹œ­bæ2ì¾õb•ËÞîO žÅ\Ùk·l•Eªå‰r†B¨¨²È™åfD9Ðnj>a$odʹbªÔ0ò-7ªþ¾ú Îý–é‡þrØÇKúª×B:Y^d§i>XÌÃA ŸÍÔ+*&Š2€Z©g²<€Z)‚5„MäjP[Rƒ©•zÉì¾ùl•ãì¦-ςͮiáIDATÜËÒKs4 ?•h­¨sÉ\‚–;S””>VÌ‘«b ¥:=ý³êÅ*w úTYvK•úÚ@B¡ hr9©X  ×¥7j¥h4 ðÙ÷2ÄÌrÃUŸ@|ô‰ì·TÇYrXÇKj>—L B:™sNYE”3 Û`ùI SäžN›ÆIDAT õeʸÀº9ÆÐ݇&“ZîR,bÕ‹Un >,"ééŸÍ8®Ï8Fÿ>vÒ’u"Uó6{ÆÂ£ >䰈췑åø/LÔJ½dvÌɸXЛaÆøpY>¦5NiSA¤hO¢w&R èSФ¡ØnôðŽ.½ØçÌÔ¶™†”$¥ô]æVI1˱—„"9RZ¤J%É”ã¾^ᔥRºÚ.%ýëÅ.7HvM]éífsÚÍÕX¶œS=~Ûv³K’$ÝÔìr£é¤Ï`ì@¢ùm2ä0¶p+½õ³äãS>¥:Õ§;Ã9O\^<½òÊÊê+g&>3JIDATϯœ=öÜ…s¯^\]];¡¹¶Ö\_o7›íf³ÝjuÚí.ý¼xz…v&²|Œ“åc³®½Ž H<§½@¿lÅÎD“ÅC°0²IrYGXÚx1bS#ãÀé_žÝµ{pܽV59Áq“Àqô GÓ¿ôò¹vó,ž8}¹d±M”3#ŒQ¸\­–K„}${{`>æ;JS#Û€Ë6[AÍB(Ry©Ù*‰ÿ@ΖåÒ¬5Ò?8›‚ ‚ Ș‚a ‚ ‚ c †)‚ ‚Œ)¦ ‚ 2¦`˜‚ ‚ Ș‚a ‚ ‚ c †)‚ ‚Œ){7-IDAT¦ ‚ 2¦`˜‚ ‚ Ș‚a ‚ ‚ c †)‚ ‚Œ)¦ ‚ 2¦`˜‚ ‚ Ș‚a ‚ ‚ c †)‚ ‚Œ)¦ ‚ 2¦`˜‚ ‚ Ș‚a ‚ ‚ c †)‚ ‚Œ)¦ ‚ 2¦`˜‚ ‚ Ș‚a ‚ ‚ c †)‚ ‚Œ)¦ 2Ô<§#Êš,æUÐd‘㸼:z‰rÏt²hèŸÏçE`3õ·”1,Ú—8M7½¶=Û]Í÷Ý"[Íò S[%¡?•d1Ú +júÍ«gÏv ¤šå‡¨ÓfÃCÃA&σbžùl•ÛYqÙœ°õƒÖÜ‹m`J‡o¢è“^3…ˆ²œ·rÙä8¦L4Ûäˆ%%BjÖú^cD”5£|# KÏpÌf`I ”ñÝèœ`ëcŸ“EQÖtcæjÅ™& Lï«'[Œžˆjå55GƬB$;×˯ÝM·òΦøëP1_?÷Óßß•˜EÐéCQ7˜jº Û>Ñí¬v4 Tý^`˜‚ È Ñ–`šgí,æôyŠF©>ovîBZQÌ©AWvxIDAT‚„ÞÏÑá[ <éÕ|˜ìhdʹbªÔ¨fy5oÎáÒÈ”ž×–ž(03SìU>[Í”¾§·úd«„(R-—H”3´ðŠ l=òXÖ Ì²È™& Ìò³U£TÇŒS׬X®fX‡RÊšÝé13ÃNÏÒ“%ÆÍ G³_ÉZ­W½¢ê Œv§!¸wŽ¡O`Å|ýÜOÿìB)%Yá@)UZÈ2¤ ¢Hµ(„(ÉÜL9Ó ”5¦}¢ÛÑŽÖql€`0LAd¤HŠ>AÎO%­­Úò¼1v˹:uiÎ^­ÀgÌ“„Z)‚5LäjP[R@­¯Æ^IDATÔK Ƭ¼P7smžÑ]§·Èú¤J }>F(¶ž=°²”3 ö‹ nùš\N*Öe¡ $ËA‰˜ú¨•zÉ9+6ЋQõdÃgç’9=¬œ)J µFL;ûãßî‘ôéQ€ŸŸûêÏg3õŠJ'0D@­Ô3=Ú%U*ütÊÛá36íQšý´aCóCÉÏÎI=ºïèúÇÑÓÊ3ø;!†`·Ñ"LÝí³2›V/†>Qaè?•¬/kê””dYV—ëÉ©ÁÊ+0LAdÐðÙ¹dÎvµ^Í÷¾#$9Å€&òNG¸ÒRàW¼èIDAT±bÈSóæ5¡PªÏø$¤“¹#æfõHÏœnhËu)-ôÈI†žƒ‚Ïfl×£z¶™úé v¬/k~›™xÒGÕÓ.E“EÛµ;ý¦zÚŽiç¨õòÁ_Ÿ¨°õÒÉ¥#•zfVH'ËóådO÷Œ("ØÕŽÎã.>²|LkœÒ§‚ HОÄìLìs tÌfN3HŠucAªÔ Žˆ”$¥ô4ö Îôöû$IÒ7ºvX%;7K’©»*.!ºøÈú{)²]z2°ÓV×ùÎ)éŠÝhAúxÛÑ“£‡òAé{êéÂJŸ*•$ÓÎ ,»˜hvöÕ“ÝîÞGÆÚŸ_EIDATô,l}+åõs–þRJO¢HàlIV}R%½ I¡ÿýªàë¡=íÀnG#Ù‹§W^YY}åìù•³çÏž»pîÕ‹««kç/4×Öšëëíf³Ýl¶[­N»Ý¥ŸO¯ÐÎD–q²|löàA¸£Ûà‚ ¡yN{~qg¢Éâ!XØ~O„42JNÿòì®Ý;€ã&è­0“71197AŸ⸠󙠗^>×n^€Å'𢂠[óÈD9ƒ§ÛpXŸ¢Ñ­Âe›­‚ H²Uâñ ÄŽP ¤°ÙJ H$p6AA1ÃAAÆ SAS0> IDATLAAdLÁ0AA1ÃAAÆ SAS0LAAdLÁ0AA1ÃAAÆ SAS0LAAdLÁ0AA1ÃAAÆ SAS.ÛlAÙÎ\¾kmÏž«&'w„L¿kçZ»©Ç0AAá29¹c}ýB«µÖélt»]Bº„n·„ú·ÛÝxÝë®»êªkšÍ‹»iF SA:­ÖÚλ»Ýn·Û!„Ðè€t»ÝÎêêÙ«®º¦ÕZãŒ0ïMAAdèó(ĈQhhB·Œ„(IDATt¨ Ù\3¿ãl ‚ ‚ CÇ6b%t‹™†ã8h·›»wé[0LAAdèt»n·ëÚH§U\766ÌïxÑAAÑ@ÈÒÒÏé6Q–—Ÿã^Z°G3¦ ‚ 2tèõ£œ<¹ÔélpG¡1 ýK!ÃAAF,yË[¦éÏgžyž}¶A¾ùÍ Ûã?¦ ‚ 2tÌg|öï ÝB#xó›f*Û_ SA ļšcF*Hðæ«S¼y0LAAd蘱ýìÛ·¦¦ÞLB¦O){/úàÉ‚ ‚gÉeIDATŒBºöù‘©©)û Šï„ †)‚ ‚ úZŽ#Æô‰¾”9b›MáÌ\¦ ‚ 2t^ÿúß\]]¡1 pæ­²4:év;{ö\ ;wî2sa˜‚ ‚ Èp9ujéMoš¾úê½=S>ýôS¿ýÛ7ž_Õ¯þ`˜‚ ‚ Èp¹æšßZZúþ… ¯u:m¿‡z¸‰‰É+®¸jß¾w®­7·ZaÊÙ•ÓQKítñA!d¬iµwõN„øqù®µÞ‰`g‚ <~Ç“Ãk¯u.\¾ûw.ßý;=¿üÒköŸV˜ò«•óÿ\ùÎþ}<½©Å›“÷´'Ñøð¼ÅþËtIDATŸ´áäIíòÝ;£jŒ ÃfåÕµýûoHð×o¶"[•_y9j‡pÅeWèy±3Aúßq¦ŸÎ!V˜râ±ïèƒïë[o “mêçÏœxìI¸ûOîܱ¯!cG»½qôïJ$nØlE¶*1:„[?<;/`g‚ØÀãwœé§sˆ£SY*MyByvì¸l}½»x»wï|}aÄèúÉ‹ b‚Çï˜ÓOç÷Øe£Óqm¹efæ_ÅmrÒü~áÂz? È0 ÝœíÉ7$®Á·7g‡ÀÊËÊŽ âßñ§ŸÎ!îhµ¹Þ¶n™™¡Å»¶÷Y*br2enƒIDATíµ{|ÿ"CâB ¦7`uØ™„û_6û @ü¡­ÓOç ÷lŠ}ÒõöÜJ¿<üõG]“±W^¹ÛüÞétŽã|n¥éM¼L# ²ãÆ…®Ø—¾úÍÏþÙ'\ïÊܶ¤X¶ØÎe[brGc}a?ðþú£´OH‹|øëÚ“Ù;ß¼CìLÂ'Š/„Ú³CˆÓ„®ÒV²'¿[„~:‡H¸Ã”µ5½àßuýòåã˜dkÁMàÕí¾pû_>þínÿÈ­_>þHȼؙ ñÀãwœé§sˆ„;L¹¸Ö€»³wÒŸGå‡è–Z­ ó2âèF@u–’IDATõñ¦Eâeê—vÓ}]Ÿ‰eŒmÜX„pfÞIìåúÃ{ø•¢ýÃÇïºí¨üPϼCïL?MÁ÷†Ý9÷áý-dO<~· ýt‘ð^ôÙ€ûŽ<øç‡?wgï¼ïȃÁ"h²9çó0Ú‹”õføKz±Â€íÝXÆ7Ça?ׯÑmA{¸ïȃ޽޼ۼ3rçЫ}ìo-{âñ»è§sˆ„Û Ú÷|î~³à¶‡A C…ãðóCqøf7tÏçîïÙ!`g‚ôɦøñýPúé"ážM!¶Û—Š÷ÊÒg³ðWñ©â½2KD³ÕçÅæÑÅù#¼Ð¼.JIDAT6ßOöœïß¾­:$¶kc!þØ;Ú@ñ^Ù¾=LÞav&ƒ÷É!\!é‘vœú­bOd“é§sˆDw>ÒÎ% [€V«@€sÜ¡=l¸žÅbÞtº(áÀ{[­Žp཭ֆpà€ù7lþ˜êm߯²åÃIã¦7è3ûP;“(~¶ôC/‘qú¥o{âñ»é³s¦÷«©{ÜíÒuG²¸1ñÇ\=ØÄÆââÅpƒ>»¡ÍîL†!vs¾íW:¿[•!Å(&Lé z‚ ;A\8”gÏïÙjÃgÏÓ/O?Óhé]È%ÍÓÏ4®¾úÕÅð›IDATªÍÖbk£Cè'/v&ˆ ¿cN?CT8Y>6{ð \µç𸇽{÷†ÉvæÌÊË\¹ký?:ù gúTAÃoüÇ›ö¯5/ßlE¶*»víŒÚ!tšéOìL>Áãwœé§sˆÊâ‰V˜‚ ‚ 2>,ž8÷Q#‚ 2¦\‹'Nl¶‚ ‚ nþ?NÀmñÞOŠIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/revert-dialog.jpg000066400000000000000000000561331203611042400317230ustar00rootroot00000000000000ÿØÿàJFIF,,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀô£"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ì|kãfð„º|I§Cr.£c–eM›U çcg;«•OH¥“C¶`½H˜qÿißQdÔü<ŒÁU£”# ‘sÔ1Yצae¤yÐ¥½¥²ª©“pÎöËdç¶zc¿$úXl59ÒR”nýIæÕÝ—OÆ·Úåt;f(2@œg®;ÅQŽù—¢ÿ¿ëÿÆëƒÖìm-’Y ˜3° ÛÓ#žŸÒ½â&‘¥Ùé¾)1Xé¬-îl£³ŽÂÑc–À²nv˜ª©ØààXn pG,=´œwó~_ægRROÝeañºCÿ2ü_÷ùøÝ(øÙ!ÿ˜_÷ùøÝcø“Â~ðÍÔÖ:ÍãßÙÉmæÅ,ó£2í0‘° ¹s#Ž0y­3ðËG‹ÄNŽú»Ë6©w,Öïm*H¢Ác.¬ß(ÄŒF ¯óŒRöXk_—ó#ž¦×'¤?ó‹þÿ/ÿ§Œòù€Åÿ—ÿÖE…|!ªItÖZÅÛ¥®•sypƒ!…ãeÚC2Hæýý_þ7^V)â´úß‹'ÛO¹êcã ‡þ`qßÕÿãtáñ~Cÿ08¿ïêÿñºòáO}NoҶŸsÓÇÅÙüÁ"ÿ¿‹ÿÆéÃâ܇þ`‘ßÅÿãuæKO¾©G·âÃÛO¹éƒâ̇þ`±ßÅÿãt£â¼‡þ`ÑßÅÿãuæÂž(ú¥ß‹m>ç¤вùƒEÿ}¯ÿ§ŠrùƒÅÿ}¯ÿ^p*AGÕ(öüX{i÷=|QÿÌ"/ûíøŠQñ>Cÿ0ˆ¿ïµÿâ+ÏH)}RoҶŸsÐGÄÙüÂbÿ¾—ÿˆ§‰rù„Åÿ}/ÿ^~*AGÕ(öüX½´ûèø“'ý¢ÿ¾—ÿˆ§ˆòù…Åÿ}/ÿ\§Š_T£Ûñaí§ÜîÇÄYüÂâÿ¾—ÿˆ§ˆRù†Eù¯ÿ\0§Š>«G·æÚ}ÎÜ|@ÿÌ6/ÍøŠpñô‡þa±~kÿÄW)âªÒíù‡¶Ÿs´<ÿÌ:/ÍøŠQã©üâÿÇøŠãEH)}V—oÌ=´û€ñćþañã¿üE8xÚCÿ.ã¿üEr¤}V—oÌ=´ûhñ¤‡þ\"ÿÇøšQã)ü¸Åù/ÿ\ ©/ªÒíù‡¶Ÿs©0ÿË”_’ÿñ4áâéü¹Eù/ÿ\¸©U¥Ûóm>çJ­K·æÚ}ÎŒx¢Cÿ.‘ß+ÿÄÒHåÖ/ûåøšçÅ­K·æ/oS¹¸5ùü»Eÿ|/ÿJ5Ùü»Åÿ|/ÿX¢¤¾­K·æ?o>æÀÖä?òÂ/ûáøšpÖd?òÂ/ûö¿üMd Qõj]¿1{zÍA«ÈåŒ_÷íœ5Yü²‹þý¯øVbÔ‚—ÕéöüÃÛÔîhNCÿ,¢ÿ¿kþ47SÎXG(ÉÊ têG½eнc÷në—þε(ÓŒ[Kó.g)$Ùou×üóµüâªÒêF جäû7Ÿ"cc´ 8rï_ÀטëÚ®£o«ê°é–¢úl^Džsé¬~ø·rÙé‚àòºŒ”u1‹tók/nt£åIæ™7¯˜˜;É%²9É'=k’.2v·çþgL“J÷ü0ñ‹´ž/ÔÙÎOœGè0(¦ø»þFÝOþ»š*J;ÿŠÕµÛ­!´ËW˜A‰ JˆSrFˆô?•q'Á¾2±Û.¶FØFèKF½HÝædä’N{žÕîw?ëWþ¹§þ‚*ŸÛ-|Ÿ;í0ù^g“¿xÆýû6çûÛþ\uÏkXb§¨¤´]osÂÛá׋œÍ§É#Èù¦„È?ß« àÿˆ/usu$wqu†âVÔ¼±V;òË€ ö+]{G½‚â{MZÆâeß<‘\£¬K‚rÄ”`¾†´+Eލ´²þ¾dÊ’“»g‰ÉሳéÃN˜ßÉbP[>¢¦0«£i|```vÀ¨ÛÁž:yí§{{–šÕU-ä7¨ZS•wü €t¯j[¸ú[5|ÜEJéƒÂ¹`§=9(ß—Ò…¼µo/mÌ'Ì‘¡L8ùwnQêÃcduO¡£ëõ;/ëæO°vy ÞøuŸ´M¨Í˜Ú#æjJÙFÆååþéÀÈèp*¼~ñ¼Z|šzAp–R¶ù-–õnÜrW~ à~CÒ½²Š>½S²þ¾aì#Ýž>x£þù1ÿOüQÿ@Ïü˜‹ÿНc}ZÆ??|øò.cµ“äo–Y6l^œçÍNG<ô8»OûB¯eý|Åõxž"<âúäxÿøªxð‰¿èÿ‘ãÿâ«Úè£ûB¯eý|Ãêñ<\xÄ£þa¿ù?þ*œ< âOúäxÿøªöj¥¦jÖ:ŹžÂ:!³-±—ïF²/P:£©üq×4¾¿W²þ¾aõxžR< â?úäxÿøªpðGˆ¿èÿ‘£ÿâ«Öໂæk˜¢}Ïm Ša‚6±E|{ü®§Zš¯Ô쿯˜}^'ø‡þÿù?þ*œ<âúÿähÿøªõÊ«&£gœ7†áÚf‰c•>us#*¦ÎA,¼ôç=(úýNËúù‡Õây€ðf¿ÿ>ù?þ*ž<¯χþFÿНV¢¯Ô쿯˜}^'•ë¿óãÿ‘“ÿЧë¿óãÿ‘SÿНQ¨g»‚Úkh¥}¯s!Š‚w0F|{|¨ÇŸJ>½S²þ¾aõhl<%®Ï—þEOñ§ ëóåÿ‘SükÓ*.๚æ(ŸsÛH"˜`¬Q_ÿ+©ã֗תv_×Ì>­ÎÇ…u¯ùòÿÈ©þ4ñá}gþ|ÿò*w·ºžœ"kË„efUgár¨Òž€F98Uª>½S²þ¾aõxv<1¬ÏŸþEOñ§ êÿóéÿ‘ükЪ•î­c§ÜAÔþ\³ãË]Œw~ò8û>ycð,ôתvAõhhðÞ­ÿ>Ÿù?Æœ<9ªÿϯþD_ñ®öŠ>»S²«@áG‡µ_ùõÿÈ‹þ4ááýSþ}ò"ÿw ­Ü°´¶ï½I"'|ÈåsèÊGáG×jvAõh€Ðu?ùöÿÈ‹þ4ñ¡j_óíÿ¯ø×ePµÜ }›>.%åDÁåP¨cžœ_ÏëKëµ; ú´Thšüûÿãëþ4ñ¢êóïÿ¯ø×[PÚÝÁ{ KnûÑd’"pGÌŽQ‡>Œ¤~}v§dVÍ ÿþxãëþ4ñ¤_ùaÿ¯øÖõÆ£gkw ­ÅÂE4ÊZ0ü‘:ôÎéÔ–ÍZ£ëµ; ú´di7¿óÃÿ_ñ§.óþxÿãÃük£¨nï-l-^êòæktÆùfpˆ¹8'Éñ£ë•; ú´ A¦]ÿÏüxdrŒ9ôe#ð£ë“ìƒêÐîT³àýE8[ËýÏÔT·ú…¶›ËrÎ6ÄHãiÛáQAf8ð' 5j­Ï²«C¹LA'÷ZmÄz‡Ùž;ã·•ð¦I"ó0¹¸s9ç¿Ô^¢”±S’³Hkî™öÐrüü]-–¨Ç¬®£ˬ& n#À,­Ÿ¼»úÖõ’©m¢¿ó-Âû³Â|]ÿ#n§ÿ]Íx»þFÝOþ»š(ï—?ëWþ¹§þ‚+…Û7Ø?±~Éyößí¯µÇ´žW•öï?w›·ËÿWÎ7g?/Þ⻫Ÿõ«ÿ\ÓÿA fQ扥ë à¸ÒþšOøF¥³³ŽÚÕÕãw…KE2’Çwî+£!Á”´ðê2ió@š¢(»e#ìÒ@3ä¹ýêÈ ˜ùàãözV½Çkú}Ûêšî¥j·Ëuo£ÂÖMo$Н:µÃÚ§l¤Ÿ+ûÝ>nsßIXöý¦ \yÕÅÕç÷?,R}§ÊhvsæÇ¸EÈÏÏÐãÐh¢àyõ¤÷sIröz¼w‚÷PK©Þ;‰áŽiÖ3>cvWacùŽ麵ô8¶²AªFû„“ÎÄê a¾UŸ÷‘FN@Cœ8B ¸ôñCRÒ5,ÎUY‰fF}•^Ò+;X<Ÿ*ÚüˆÌ0ì@<´ãå_EùWÇÊ=*ján´ÍfuYä¸ÔeÔ-t•¹¶û=ÄÞI¼g¸vT@@‘AòÔ+ùByÚ×nfR?'QŽÊ Ñë[¬‚I"òK+Fcýá_1¢§9Vå ]Å·Úÿ´×ìÿÚþÚm~Á¿íWØöÅæù»¾MøûGúßÞgçeaivš¯‡"µšÞúÊ7kwyÒÞéÝY,­'—$„æe³´È#$cÔh¢àyƈ5&Ÿí3ūǮÜÜØÊäÅ./õEY-<Ëé+™å"¥`t‘@AýÜŒ¶\†§ØK~ú¬ñ¼ú¼ÚÌ7¶hI‹q“ngܪMº±S1ÆIÉI;Mz 1!Š'•ã¥mò2¨Ûr}N ”\!ª›Ö¯kpl±«K-µÌà]o‹ˆv‘ö›rA#jÕ¹»º6ÊæÆk=.êr$y/^ÞI\, ß#IÈR7J3ƒÛÓ1,ï8Ϊ Q¹”@'¸›SëEÀâô‹«Í>{[»›mPiÊ·–k¹iܘ HapÒÆ>I€V.Ìw‚Ù~‡P‹Ëy#Ö“Z–{f•n/Ùí–rùýÑl,Àîù²8ù‚×¥ÑEÀóMBB_[¼ëO®Ä²=ã2Ü—b¹\ÅŸ1°<¯—%qÕjÕ¤÷sIröz¼w‚÷PK©Þ;‰áŽiÖ3>cvWacùŽ麽™1@…!#RÌåQ@˜–cÇrI'Ô“EÀó¹cÕÞÆÕCj6šx’móbþæIÜ„oå‡[ˆ”þûä$ +ü[‘ŒÚ”WÐ\½Ø¼º{8ô»{‡Š2&IDë5ÆÕˆ’¬PÂÄÆHápNÎ=˜ÅÊñƈҶùT퀹>§ ÐJ.¥Û_Üø†Ø µxôXþÑ$f•Kö]«)“÷Ÿë<òHr‡ vçQh³ªEÛF÷GÚ}™¾×äYÙʰÓ ÐìRªN1·—Eˆš+›mJk[ã­ äXšÝîd”±ŠÝ“猙]r×<’TEÓõ‹ >Ko“R¹¿Ô”£ÈíSö—‰¼·&4Ö9áŽ{ê(¸wz”Z]Áž©%¯Ÿ>ýRË c#Ü ?»%ÇÈ6€nu7dw)¨ÌæÆKk ;F!$½’ÚRL“Ä61‰G€4ˆA<6ì§½1!Š'•ã¥mò2¨Ûr}N ”\k½VÏBÔɳÕíÞïI1ØEÜÞ:Îãæß·z1 ‘?€€È¡Õ KÔÑ#Õ#ÕÍÞ¢ò,ë0·(Æá¢)æþç&Cùy99ãuz%\êmGKŸEZ0£–K¥ºÞ¹»²,37Ì¢¿û8èÕKH–òçÃvsY_kQ,º\m¨\\AwrZrÐíòÕŽâLà´$`ÙC^—L†­àŽ#H¡B$h¡UT è¢àyÝÌzü«hcmGMO³fÒ$W®f2I’Ͼ§Ö‰¡Šâ ž4–£ÆêYHÁ Š.ŸG¢j6š}Ýד}«iáëfŒÁ4€Ix>Ðï¸!Û3o Û²_œîæÕ¾•/Ú¢²#W‰¥Ö®%½ò§¸Ž?%ÅÔ‘u`¡Nc'aûÅCsÅwTQp<îÚ]FÎmÿUÂÖ Ôod$q ÍkyçžA؃I(ÝÍ«/^¶±•b{ȯ­ô 1 •%û üÇb~W}Ä’A,²B‘ÛÍ WIñ¤°È¥7PÊÊF õSè¸wg¥^^ÝiñOsª\Ø õræ»Vˆ‹{€Ä<²´Àb•N@%éš„^#óµ¹#¼Ô~×åÞí‚ Yñåì“ÈÛ!“ÊÝþ¤)<Ìð塯G¢‹ÂëöZÌ:”PÚêZŠÄ¶Êm¥Ky®K’î\·—"F¿òËaå àP‰íuÛ{»Ó[Q:¥Åî¡Ù¦wŒ &BcEÜa°Ã÷TQp8N9$‚Ìiw:Õ¾™ºcp×ú„Ò™±–0&Û·Ìä/=FìWi¦‹•Òíã»ÝLΊ¬Ï´n$)*sÀ$zV¨  ñwüºŸýw4Qâïùu?úîh­ =òçýjÿ×4ÿÐECS\ÿ­_úæŸú¬™u«(µcþ“$û•ɵ–T›ê¥Pàƒó€A<k2 *®›©¥Új+¬7P$è®`¬¡†qžpjÕ *­…üZ»Ï ºªÏ,8îŽFºvÊœ{b­PEUÓoâÕ4»MBu†êÀ ”0Î3Î Z Š( Š( Š)“J°A$άjX„Bì@á@$Ÿ`2hôVf™®Úê·—V°G2½¶w—‰¥‹ŒüP9úî6þ-SK´Ô WXn IÑ\ÁYC ã<àЪ(¢€ (¢€ *[¸/aimßz,’DNù‘Ê0çє£ԯâÒô»½Buv†ÖÕ,UT±ÆqÎZ¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(Â|]ÿ#n§ÿ]Íx»þFÝOþ»š+B|¹ÿZ¿õÍ?ô\倽Ñå{ìË›¨%»–u»…â‹,­!Þ¬áRä|¡²#’Ttw?ëWþ¹§þ‚+ þk‹ˆ Ó5[Ÿ"Cmfò(aƒŒ®GBãY”rCÁ×¶ÞÒí,,RÎC¥¤zšÛyJÓʲ[±VÏË#[…ò¿1 pÇ3ZønKX-¾Ó¡Üê:j´äi—Ñš7aÇòÆÈ ’ýÒOïsÕÜ/Qý¹'ýµïüÉþÉ|B!@òèÚÜjYPÓä³éÔ’õ&ž¡¡Í\xkW}êžV»»œü¯™í¦d@ß#,±ðC¼T>SýQká¹-`¶ûN‡s¨éªÓ‘¦\FhÝ„[Ë @6K÷I?½ÏWp½GöäŸô׿ð['øQý¹'ýµïüÉþjxz{øCO½µÜ¶>WÛb2 ¶²!æRìª@È r3YËá‹åÖ¯î¤MSÏ‘®™®íeµÌ‰ÃˆÑoœÌ¡£d*ŠÈ8E¨þÜ“þ€Z÷þ dÿ ?·$ÿ ½ÿ‚Ù?‹0Ðåí|?<0[Ï Û]iÈÓ§EolŽY„A&•7ù&@PYOG\(Ë’ [²±M:âÒkéç½Óîe¾Žd1¯’-–BåØ9lÀ휆^ù¤þÜ“þ€Z÷þ dÿ ?·$ÿ ½ÿ‚Ù?ÂCC›´ðÁ°Ñ4®´/í( ²){bZ)I¹+5‚6ÐŽ€îʆ £oH×ÃË­_ÝHš§Ÿ#]3]ÚËk™‡¢>ß9™CFÈUpŠQý¹'ýµïüÉþnIÿ@-{ÿ²…††^™áù¤ð~©¤Kim¦-âË^U´q¸FŒ yV6(dÎI*@ / ÷FF«áoQÓî×3Þ[\^IS÷wM$;³ƒû¹‘7 /ú6HÌ„Ž¯ûrOúkßø-“ü(þÜ“þ€Z÷þ dÿ 5 ï é7Ú~±ªÏu—û¼¶Þ§wú]Ü$±Ÿø:ƒŽnϺˆðýµ¥®ŽúL‘XGú¡· ~âHY±µ™\ìŽuýîópxfÇký¹'ýµïüÉþnIÿ@-{ÿ²…††$ Ô>×4Ë{k”’î ÖÚÚáàVRÑm ¶ ±F p¤›q9bmÂRÏ©EöH/Ùm–;So$·›{³ÊòL¬èÌY ’<¹*IÉ ž“ûrOúkßø-“ü(þÜ“þ€Z÷þ dÿ 5 ‹ïj3M¨ÁiqäÛ¬wsnÛåÝÎŒ¤îxØL­žAûFX¬½?Áìg³FÓ¯"ÓÅêÉ=½Ë[F0 KyvÀ!V2F§$—0Ú¼õÛ’Ð ^ÿÁlŸáGöäŸô׿ð['øQ¨hr÷ž¬îmÓKp[T’îî[d¶-´ÌйW(d"PÚJä€j¶£ákÆÐ®-dÑ&Õ ºsÁ`“Inïc)iŽNJ$|IÄ@åm ¤ö?Û’Ð ^ÿÁlŸáGöäŸô׿ð['øQ¨hhA,òMr²ÛùIa}á¼Õاv?‡æ,¸?ÝÏzš²·$ÿ ½ÿ‚Ù?ÂíÉ?è¯à¶Oð¥f5¨¬ŸíÉ?è¯à¶Oð¦Mâo “M£kqÅ—w}>@ª£’I#€(³ ›4VOöäŸô׿ð['øQý¹'ýµïüÉþY…Íj+'ûrOúkßø-“ü(þÜ“þ€Z÷þ dÿ ,Âæµ“ý¹'ýµïüÉþnIÿ@-{ÿ²…asZŠÉþÜ“þ€Z÷þ dÿ ?·$ÿ ½ÿ‚Ù?‹0¹­EdÿnIÿ@-{ÿ²…Û’Ð ^ÿÁlŸáE˜\Ö¢²·$ÿ ½ÿ‚Ù?ÂíÉ?è¯à¶Oð¢Ì.kQY?Û’Ð ^ÿÁlŸáLˆÞ4“FÖÕ¥m‘†ÓäÛàqÉÀ'è asfŠÉþÜ“þ€Z÷þ dÿ ?·$ÿ ½ÿ‚Ù?‹0¹­EdÿnIÿ@-{ÿ²…Û’Ð ^ÿÁlŸáE˜\Ö¢²·$ÿ ½ÿ‚Ù?ÂíÉ?è¯à¶Oð¢Ì.kQY?Û’Ð ^ÿÁlŸáGöäŸô׿ð['øQf5¨¬ŸíÉ?è¯à¶Oð£ûrOúkßø-“ü(³ šÔVOöäŸô׿ð['øSâÖY’3¢ëQ†`»äÓäU\÷$޽asÇ<]ÿ#n§ÿ]Íx»þFÝOþ»š+BO|¹ÿZ¿õÍ?ôX~ÿU«ÿØ^oý n\ÿ­_úæŸú®KN×´­(ê°ß_íªÌá¾m¾\C8ôàþGÒ £§¬sýn‹ÿa{Oý*øL|=ÿAX?_ð¬ýOÄÚ%ÜúJé۷—©ÛJä¶Ðª$$žÂ„µlë:•ÕƒXEgi ÍÅåÉiÌH¸ŽI ,HÈÆ;Ôø–ÓìOr“$ï$°›{x¤¸}Ñ9ŽB¡±@Ãïys‚@¬­gUð¦¸Ö y¨ÙMokrgx&‹ÌIw"Aà¸ló÷‘xž¸‚Ê%Õô™£°W†Ò-BÄÜÇ å+¹rÊc_#åÈ!ŽX–³ÿ„‡J3l[­è#óZâ8Ù EÙ¿/0åÃ|Ì8*{Œ–Þ Ón¦Š–hç–O)!žÚHd'c¸;]A Do†#©äb¸É£ðÍÄ’FÚý¬ohm]là0K2˜|¯ß2Ÿ.@%G–6œcÓ=ö™5àÕ&ñ>žuXÚ3 ‰hëTYTŒ¹bqq/!ÇðñÁÜX.u+â}®äµûr £Wy+(DF‘Ø‘€¡¢pXðÞ~eÈ|K§, )[à]™V#§Üy­€2Â=›ÊÊ cnHÉÅrvMáèí5X/|GÿÚvÏíF-»å¸‘Šä¶?ãà€q·<çƒR¹Ò5³O©kz ÝÝ·˜‘ùú[IÇØOîÚBw‚ƒ »$cœÑ`¹èÍÄω,2(t‘2²‘AAúçlüQá»+{Hõh AƧh^`pªtè€Tßð˜ø{þ‚°~¿áJÌ Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ ,ÀÜ¢°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ ,ÀÜ¢°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ ,ÀÜ¢°ÿá1ð÷ý`ýÂøL|=ÿAX?_ð¢Ì ÊÃñüŠ:—ýrþ¢øL|=ÿAX?_ð¬ŸøŸE¾ðÕýµ¶£ “I9'4Ò±Õšéé¬á†k!Ø“JcCós– ÄqžÇúÖâq.‰c¨êVßg{èÖ{{{?6îCUmÅR0À< ^~aV¯·_úNõü&>ÿ ¬¯øV}lj´IüE£Ï§nbƒí&V-€¹Àëêxú‘ëM 5u=NþßT³Óôû+k™® šr×- ªÆÑ¯hß$™§J†ÇÆ5ý§ŸéX"šHŒL^1"£"ù˜H¡TXä.JœdêwþÖ5K;½B÷Oº†Ú £÷ ³´gw#‚dtþ/Í——‡¦S_^òöØÉŒ‘İìî„È$h°â½%|¡¾ñå“~!ŽÂw•vmݾ0…“ýb˜ †R8"§!Òšê(ëÌó6mš8ÙáÀ(  V`Ë€X¹q÷†xŸí ñ :…¯ˆ´Ï´MÃ]ÜIhæ ÍödEHĆV ä³r¦@¥§„l/í¦ƒUÓ(|ƒæ\Ù,·@ĈŠSÂ)®FÂr\‚¤¥‚çSŒ4ÛËí6+/:êÚþ9;˜`‘€*b / ûÞXà)R§ iÚêÖ7Ÿbû<ûþÛln­þFâ2ÜŽ?Ö'Ÿc\ž¡¡ØA¡‹ÚùÚe ²f’eš"#߀ÚÄĸ9 dä7gè:߇¬n5+É/ †[«—ÛòÛ";{îw’_Qæí袋Ë—^/–Õš;k]: æ’ÞKò—ebæ0ùg Ä 6îUÕ»âµå×ì µ‚æaynÃÉe2ˆÂœ&S÷Kß/´c' ÍrÚ¥þ‘®³Áªx’ÈØ;ÊŽÖÙ£•wÆñ|ÎÌÁ°’7EàôZñÒÍâK$ò/d½³ó-™ö<žo˜$à ëûçÛ„ar[5mŸFŠæÒy|I§‰"çš{kY!žBÓ¼Æ0âCû¢\ä – žUuøöOúïþŒZÍÿ„ÇÃßôƒõÿ Ž_è·ÆkmF&’x‚ '$ù‹JÀyO‹¿ämÔÿë¹¢ÈÛ©ÿ×sEhIï—?ëWþ¹§þ‚+—O¯„|âß5«Ý›M[BÜ4[·y)ÔŒnÏNÕÔ\ÿ­_úæŸú¯;ñ‡ü‘¿ÿØ]?ô;j˜î6tsø¯ÇV¶òÜ\|7h`‰ É$ž&…U ’Ià9ÍkøCÄ’ø³DÕî.ô¹tË­>ök mÍ韩o˜,GqÇ^k‚¿ò#}GO‹Ym;+32Ì·"ê]“ݓ̿½p…•š.”® _ÝÊß}š?ïKÿ[üj2¶«p–í; ÝÒ3pÛ™T€Ä ä€YA=·Zó›oíñme$?ÛŸjŠ+yµá7žA¸K›f@†]‚ïå·Ê0ÀÁÌ`ضjž;]fê qtÄ»š60Ý@Už+£0„¼S“¸yywQéä³Q†Á¦”]M“FžcüÈ…çóö5$kk3Ì‘NÎð¾ÉUn”m¡°Üðv²œÄõÌêxñŠô™§¶Õm­`´ÔbgŽi­X:Ïn‹—‰Úá”ó(qËéÖ:´úuÄÚ„zäZÞ©.•4清 $YGpO—ˆã“)0o» Pz-zUì–z| 5ÔÒÇK ùŽrò:ƃƒÝ™G¶yâ¬}š?ïKÿ[ükÍg±ÖÄ–1yz¬Ðɨ:ÌÒÊ-õ[e·o›;ÑñaàbÄn¯P ~Í÷¥ÿ¿­þ4}š?ïKÿ[üjj(³GýéïëfûÒÿßÖÿšŠ‡ìÑÿz_ûúßãGÙ£þô¿÷õ¿Æ¦¢€!û4Þ—þþ·øÑöhÿ½/ýýoñ©¨ ~Í÷¥ÿ¿­þ4}š?ïKÿ[üjj(¥­º5¤$´¹(§‰XvúÔ¿fûÒÿßÖÿÃñ77>¶‚Ð݇’æÅ$6’:H"7 0ÈC(Ù¿$šå^Ú e¡™îÒót“HÂÞøcfIeshf LJ“ï|ÎRѾÍ÷¥ÿ¿­þ5ˆ4+¨¬dµ¾–ãí» )–GÃ*8gEË"í’2Y€ ½rFážU~Óç¶ÂGÿ·›?Ù|¯¶ý¯vË}›ö¤íßöÏ¿òýÞÞ]gøDÔäÕt?í[}Vl4üE¹æ…cak¦~ìàŒ©u›(~RÊùƒLNmn­â¸·¦‚T‘Ü3+©pAæ£y,ãÔa°i¥SE$ѧ˜ÿ2!@Ç9ÇDüýy®ƒŠÞûE}BûUŠàEa²³¹“|^L^›'š°+û@o5ZQÕr|±Zž‚á¼U¥\]ŬI4{„Õd¼[Ÿ!n™í‰?teÊBñÀß}š?ïKÿ[ühû4Þ—þþ·øÔÔP?fûÒÿßÖÿ>Í÷¥ÿ¿­þ55Ù£þô¿÷õ¿Æ³GýéïëMECöhÿ½/ýýoñ¨®-ÐFi~úecüCÞ­Ô7?ê—þº'þ„)}š?ïKÿ[ühû4Þ—þþ·øÔÔS³GýéïëfûÒÿßÖÿšŠ‡ìÑÿz_ûúßãGÙ£þô¿÷õ¿Æ¦¢€!û4Þ—þþ·øÑöhÿ½/ýýoñ©¨ ~Í÷¥ÿ¿­þ4}š?ïKÿ[üjj(³GýéïëEun‹i1 .B1æV=¾µn¡»ÿ9ÿë›*@|Áâïùu?úîh£Åßò6êõÜÑL|¹ÿZ¿õÍ?ô\ºj:NàÏê:í³Þipêß¾µX#—~|•_–N©äöõ®¢çýjÿ×4ÿÐEyߌ?äøïþÂéÿ¡ÛTÇq²Çö—„ÿèø‹ÿ kð®»Á:ž‰¬xoS“@Òî4x-®¥·¸³–Îf*.íȃ® ƒœ1Ú°µm7Çþ*Öo¼%¨4z‡Mēϫ[IsfìLvÉÆ¹\ã È?½½ðÛþ<üyÿc>¡ü’˜‹Ú׎áÓµW°²ÝzІ™ã‰#aü9(rp¯’pS’JÑçøþ;øµ;iÙ´íNÚ %†9$Ú„žXGÈ*ÙV*p§%J¸O<ñœ·Zgˆõ'ˆÆMä—1yƒiefÜÝ8†äƒû=O¥ÕÖ¿y{ NÚYÜÉq,gËH…”wF0\mþ¸‹µÐŠƒ•ºnsF¤œ¬YÙݳO¶ÎÝÍœ}ügŽq˜óÓ;[¦á´ÙݳO¶ÎÝÍœ}ügŽq˜óÓ;[¦á·‚ðÍŒw׿è?ÚPÛy–¶?9ûDžb)]¨C¶ð¤“'€AÜ] Ý´¶’mȉ­®æ»¼ýðûÊ4¾]¶Km\ì„m3Ÿ7®YqÕ,=íËøÿÁ%T¨ú üxÖÎíš}°ÎvîlãïãÍÄ2¿ÍóüÀ“ƒT–+KýBÓ®,agþļ¹KÀò PÅ%ÜŠ nÙ´”ÁÊ“†<Žj…“åüà‡<ïk üxÖÎíš}°Îvîlãïãç¬?ÇlîÙ§Û çnæÎ>þ3Ç8Ìyé­ÓpÚ?ÇlîÙ§Û çnæÎ>þ3Ç8Ìyé­ÓpÛäôQõJ=¿Ú}ÏXÙݳO¶ÎÝÍœ}ügŽq˜óÓ;[¦á´ÙݳO¶ÎÝÍœ}ügŽq˜óÓ;[¦á·Éè£ê”{~,=´ûž°ÿ5³»fŸl3»›8ûøÏã1ç¦v·MÃhÿ5³»fŸl3»›8ûøÏã1ç¦v·MÃo“ÑGÕ(öüX{i÷=aþØg;w6q÷ñž9ÆcÏLín›†ÑþØg;w6q÷ñž9ÆcÏLín›†ß'¢ªQíø°öÓî{©ñ§ZÒµ;Ý:++f³I9'¬ê¤û÷ž…¿¼6ÖÙݳO¶ÎÝÍœ}ügŽq˜óÓ;[¦á·”6ö×?µ±wl—0ÆúŒþK³*»G® • ãrŽ„V¢øG¹bWOHÞ¶–8£–Cö™.,¥¹XNX’<ÄHÔ&«`–b±öWOë©|ó¾Œ×ÙݳO¶ÎÝÍœ}ügŽq˜óÓ;[¦á¶×ü._É=äè9šÕdy£ØÌÐ*—¸ ÀRcÉ8û­ÓpÛÍ·‡âXLöþûN²b„Í¡âàýœ3Îüµq(ùc€üÌGï½1±ã–†ÓJÖ™­RäÜjýü’­L@`€½>îI%I$ÒthÞÊ?üóÏ«ÿ5³»fŸl3»›8ûøÏã1ç¦v·MÃkÛã—ˆ^ g‹J‡ÉVÙæ•Fa!@N:à/gË|c?%?xDŠ-jo±ßÜH'¾i/B4‹o*M*ÇÎÓRBÆJº;·™Á%×Þ$Ó†™áMV4²Ø.¯n–—Ø”ý¾ —!dÜÌQ²0ÙŒùúcj´þbs¨º›Oñã[;¶iöÃ9Û¹³¿ŒñÎ3zgktÜ6ñã[;¶iöÃ9Û¹³¿ŒñÎ3zgktÜ6ù=·Õ(öüYÚ}ÏXÙݳO¶ÎÝÍœ}ügŽq˜óÓ;[¦á´ÙݳO¶ÎÝÍœ}ügŽq˜óÓ;[¦á·Éè£ê”{~,=´ûž°ÿ5³»fŸl3»›8ûøÏã1ç¦v·MÃhÿ5³»fŸl3»›8ûøÏã1ç¦v·MÃo“ÑGÕ(öüX{i÷=aþØg;w6q÷ñž9ÆcÏLín›†Û6u­NâXÊÚ0°Ï:–%±åÇ,ŠLýØÇü¿¼øõjøwþBs×çþ“IS,%ÒüƪÎûž†ÿ5³»fŸl3»›8ûøÏã1ç¦v·MÃhÿ5³»fŸl3»›8ûøÏã1ç¦v·MÃo“ÑUõJ=¿/m>ç¬?ÇlîÙ§Û çnæÎ>þ3Ç8Ìyé­ÓpÚ?ÇlîÙ§Û çnæÎ>þ3Ç8Ìyé­ÓpÛäôQõJ=¿Ú}ÏXÙݳO¶ÎÝÍœ}ügŽq˜óÓ;[¦á´ÙݳO¶ÎÝÍœ}ügŽq˜óÓ;[¦á·Éè£ê”{~,=´ûž°ÿ5³»fŸl3»›8ûøÏã1ç¦v·MÃhÿ5³»fŸl3»›8ûøÏã1ç¦v·MÃo“ÑGÕ(öüX{i÷=aþØg;w6q÷ñž9ÆcÏLín›†ÑþØg;w6q÷ñž9ÆcÏLín›†ß'¢ªQíø°öÓîzÃüxÖÎíš}°Îvîlãïã±WùƒÙDZäÿð ü?ÿA]Oóÿ‰©m¾ hzMÜ:Œ:–¢òÚ:Ίå0JÀ/N+Ôê¿øóŸþ¹·ò¡â*µñ§ÇÌ.ÿ‘·Sÿ®æŠ<]ÿ#n§ÿ]͉g¾\ÿ­_úæŸú®]4½7Zðg‹tínñ,´©µoßܵÊóK/ÌÊTe‚Ž}q]EÏúÕÿ®iÿ Šó¿Éñßý…ÓÿC¶©ŽãeìŸ ÑbÕÿð­‹ÿˆ®»Á:N“£øoSAÕÆ³oqu-ÅÅÛߥ˙™vYpçžsžk†Ö/´MKQ»ð…þiQø¨]ÍlÍu¥ÅäÚ@¤bí‰NU•”¨ÇSü_(“¦ø_6ºWííâŽ"ñ%úGjQB ÀqŠb:~ÛI¾’(uk8&›i(¨ò÷?"K &›´±hÖö¨•VFžÛ·.î3\Þ«®Ã¦Mvò´±\Çxìó+ ÿ²hÇlg­føcV›QñüR Å"Èlaxu¶ŽÝªÒwqwÑ_ÈÂ5šqïgäzL‘<Ï Ëilï òQ¶•Êü¼¬Ã#±#½S—D°žÍ¬åÑ4É-Z(àh^5(cŒ“ÙªI t⛯k7Ki‘Ziÿm¸Ô.ͬhf>T’nbAùG—Î8$€Ä8qøæöïT½´Óü;wt‘=ÌîTMðC»D!Dg”0‘ŽY2£,MÍë}ÂÒÎK;mL†ÖX¼‰!Ž5TxòÇaP˜+—sŽŸ;zš¸"u¸{…´¶º*<þfU$¨'nH˜Ûqõ®Vûâ ŸK±“P‚g·†ÚUâId…® ²$o ²²dµˆ§¨øçTŸCÖZÏGžÆâÏD’ýî.à ÿ¤"â93eà »•rŒK +uWZ%…öy¢i—0mòm¦^8ö«µJ``: ’=.ÚRmR-+OMBdÙ-Ú¨ºñÃ>Ì‘ò¯ö•›âk­J‡:íÜë–¡™tãì— â6¹R²CžÎÓ5—¨xŸÄkZn“Ÿc¦×he€^³A4AtÊ ¦ÊÁíÉ 'eçæ8è¬tK 2(â°Ñ4ËHã”ΉkY ”.N©+ž¸8éRO¥Û]XKaq¥ióYÊåä·‘CFì_y%J`’ß6}yë\ÌÞ=¼·[¹åÑ û-¿Û¦Ü·¤»[ÙËåLÛ|¼ (Q3†ÉË®w<'<×:=ÃÏ,’¸ÔïÐ3±bnæUö °P¯<9¥jö¶÷¾Ò.`´M–ÑÍ ºÂ¸ aF AéW>ÄžŸýŸgçy¾™ü^fÏ/~výíŸ.zíã¥^¢€2gÑ,.v}£DÓ%Ùçló#VÛçgÍÆSù;¿½“œÔ“év×BQq¥ió \¼‚E ½Œ~Q')É1ü™þï8­*(×?óÊ/ûúøš7\ÿÏ(¿ïéÿâjj(×?óÊ/ûúøš7\ÿÏ(¿ïéÿâjj(×?óÊ/ûúøš7\ÿÏ(¿ïéÿâjj(×?óÊ/ûúøš7\ÿÏ(¿ïéÿâjj(‚D×0G-­¼Ñ¨‘²7) ­½AB¦>—m":>•§²:JŒ¥A ²¶éAù9Ã,?ˆòsUõmVmð]ÛÛGs;ImoRJbRÒÊ‘X+|ô=+xîdn4¨ÖYàµÝWš;˜í$J ‰çJ»X%bªp…µ'‡4©´¸t¹|?¤>Ÿ ïŠÑ¡S7<ªlÀ?3rsëV-t»kW´Ò´ûwDØ­ „!v¢àa:mŽ1DQü#±ø¯R¸¿mßI´:ÔO(ž)/™mÕQ rVQf8¹‡ƒó¿Ÿ”äü)­ëåφ¬L³ÜÇ ¢OrfÔ̶Ú{ù›£MÒÇÌ™ŽBUËÍ€¡X„š%„w–·‘èšb]ZD ¶™cPðƶeWŒ94Zè–:Œúž‰¦[ßO»Î¹†5I$Üw6æ “’9êk•о!O¨¶—z=õÌrEh—79du’h£“9Ž P%BļdaˆL sG×µ-kÅZ-ÓÛÇk¥ßh÷7v¨—lí*—µ(Ò¦ÅTp¯Ð3ãs{»uÏüò‹þþŸþ&×?óÊ/ûúøššŠ‡uÏüò‹þþŸþ&×?óÊ/ûúøššŠ‡uÏüò‹þþŸþ&×?óÊ/ûúøššŠ‡uÏüò‹þþŸþ&¢¸k,f(€Þ$?ÞìÕº†çýRÿ×DÿÐ… ×?óÊ/ûúøš7\ÿÏ(¿ïéÿâjj)ëŸùåýý?üM®ç”_÷ôÿñ55ëŸùåýý?üM®ç”_÷ôÿñ55ëŸùåýý?üM®ç”_÷ôÿñ55ëŸùåýý?üM®ç”_÷ôÿñ55ëŸùåýý?üMEt×d›tQ±²D„öÿv­Ô7ñç?ýsoåH˜<]ÿ#n§ÿ]Íx»þFÝOþ»š)ï—?ëWþ¹§þ‚+—O7‹üâÝf{aw«ÇÂÆ²lÛä¿Ý,¹û¸ëÞº‹Ÿõ«ÿ\ÓÿA€¿Õkÿö“ÿEÇSÆÌ1áˆ+p÷ ñ„îŠ ðý¦æU$¨'~H˜Ûqõ­xbóÂZ&¯å캕Ρ{5ü×&‡ç‘T7ÊŽªO½+³¨nÿãÎúæßʘŒ=sÃV:ó‰.-®á˜ y°HŠH÷É þU.‡ Xø}$VS™$Æù¤dg`: çì+vŠ®fÕ¯ ¬“½Š7Ew=¤ÓÙJòZJf€ïc”hÉá¹ù]‡>¾¸ªpèš}¾¨uôû‘>ö‘PÜnÙÜé}ˆçse•A;ß'ælíQHf,º&Ÿ5‡ØŽŸr‘ ‰.•¢¸1È’Èìîé"¸u$»çi1^‡[hze¢N‘é RâÝm§YXH&Œ4‡ÜÇq-,…˜ä±rXšÚ¢€0dðî›=ŸÙn,/.#û$öDÏxò¹†b¦E.Ò9ؼ“‘ŒI¢iú•Ä—7:}ÏÚ$HÓÏŠàÅ"ˆÌ…v:8({ %H$9 ⶨ  |9¤Ï°É¤ÊÑËÜ.<ìe.\I8ûÿÄÀnØ¡gZ| ­”±ÆÒÉ1ÁËÈí#ž[»3lñÅ^¢€!ó¤ÿŸi5ÿâ¨ó¤ÿŸi5ÿâªj(:Oùö—ó_þ*:Oùö—ó_þ*¦¢€!ó¤ÿŸi5ÿâ¨ó¤ÿŸi5ÿâªj(:Oùö—ó_þ*:Oùö—ó_þ*¦¢€!ó¤ÿŸi5ÿâ¨ó¤ÿŸi5ÿâªj(:Oùö—ó_þ*:Oùö—ó_þ*¦¢€3Þ+ý6Þ ›9e‰—Ï+¡áá•N=¹ª’xsI•púL§yR&ÁS4«4Œ§~U¼ÄW 9R£i±iÿp×5þU5 9Óá}(Û¤BÇPGGgûLwò%ÃÓ‰DŒTf#ƒøi~ÒtYâ›OÒe†H¢òPùÛ°›!¹þxGüÔœïQLvßÂÚ=£Ú´]Ìij‘,p‹¦ò–¡cgÌØî¡SÀ°Øœü£iþÓt½D_ZX^$ËAµã¼pÆÅIHãi F¹Dá@(ŠÞ¢€!ó¤ÿŸi5ÿâ¨ó¤ÿŸi5ÿâªj(:Oùö—ó_þ*:Oùö—ó_þ*¦¢€!ó¤ÿŸi5ÿâ¨ó¤ÿŸi5ÿâªj(:Oùö—ó_þ*¢¸•Ìc6ò:•þð÷«u Ïú¥ÿ®‰ÿ¡ @tŸóí/æ¿üUtŸóí/æ¿üUME0!ó¤ÿŸi5ÿâ¨ó¤ÿŸi5ÿâªj(:Oùö—ó_þ*:Oùö—ó_þ*¦¢€!ó¤ÿŸi5ÿâ¨ó¤ÿŸi5ÿâªj(:Oùö—ó_þ*:Oùö—ó_þ*¦¢€!ó¤ÿŸi5ÿâª+©\ÚL ¼ nI^8úÕº†ïþ<çÿ®mü©ó‹¿ämÔÿë¹¢ÈÛ©ÿ×sE0=òçýjÿ×4ÿÐEWð4Ëzð`äÿkH~Tfÿ–qú ±sþµëšè"¢ðú­þÂòè¸êc¸ÙÔ}¦?îËÿ~›ü*+«„kI€YrQ‡10íô«u ßüyÏÿ\ÛùS}¦?îËÿ~›ü(ûLÝ—þý7øTÔS´ÇýÙïÓ…iû²ÿߦÿ šŠ‡í1ÿv_ûôßáGÚcþì¿÷é¿Â¦¢€!ûLÝ—þý7øQö˜ÿ»/ýúo𩨠~Ó÷eÿ¿Mþ}¦?îËÿ~›ü*j(´ÇýÙïÓ…iû²ÿߦÿ šŠ‡í1ÿv_ûôßáGÚcþì¿÷é¿Â¦¢€!ûLÝ—þý7øQö˜ÿ»/ýúo𩨠~Ó÷eÿ¿Mþ}¦?îËÿ~›ü*j(´ÇýÙïÓ…iû²ÿߦÿ šŠ‡í1ÿv_ûôßáGÚcþì¿÷é¿Â¦¢€*ZÜ"ÚB ËŠ8‰o¥Kö˜ÿ»/ýúoð¢Óþ<àÿ®küªj@Cö˜ÿ»/ýúoð£í1ÿv_ûôßáSQL~Ó÷eÿ¿Mþ}¦?îËÿ~›ü*j(´ÇýÙïÓ…iû²ÿߦÿ šŠ‡í1ÿv_ûôßáGÚcþì¿÷é¿Â¦¢€!ûLÝ—þý7øQö˜ÿ»/ýúo𩨠~Ó÷eÿ¿MþÅÂÀ /ßCÌL?ˆ{Uº†çýRÿ×DÿÐ… ´ÇýÙïÓ…iû²ÿߦÿ šŠ`Cö˜ÿ»/ýúoð£í1ÿv_ûôßáSQ@ý¦?îËÿ~›ü(ûLÝ—þý7øTÔP?iû²ÿߦÿ >Ó÷eÿ¿Mþ5Úcþì¿÷é¿Â´ÇýÙïÓ…MECö˜ÿ»/ýúo𨮮­&eÉFÄ÷ҭÔ7ñç?ýsoåH˜<]ÿ#n§ÿ]Íx»þFÝOþ»š)ï—?ëWþ¹§þ‚*- ÿc-ÚÛ|Âêá®_Ìç UWã *[Ÿõ«ÿ\ÓÿA fQ¥ýµsýÈ¿#þ4É5{‰bxÙ"ç÷üj…]…/í«ŸîEùñ£ûjçû‘~Gük6Š.ÂÆ—öÕÏ÷"üøÑýµsýÈ¿#þ5›EacKûjçû‘~GühþÚ¹þä_‘ÿÍ¢‹°±¥ýµsýÈ¿#þ4m\ÿr/ÈÿfÑEØXÒþÚ¹þä_‘ÿ?¶®¹äƳh¢ì,im\ÿr/ÈÿÛW?Ü‹ò?ãY´Qv4¿¶®¹äÆí«ŸîEùñ¬Ú(» _ÛW?Ü‹ò?ãGöÕÏ÷"üøÖm]…/í«ŸîEùñ£ûjçû‘~Gük6Š.ÂÆ—öÕÏ÷"üøÑýµsýÈ¿#þ5›EacKûjçû‘~GühþÚ¹þä_‘ÿÍ¢‹°±~=^â(’5H° (È=¿öÕÏ÷"üøÖm]…/í«ŸîEùñ£ûjçû‘~Gük6¡¼»‚ÂÆâòéü»{xÚY_íU'“ÀíEØXØþÚ¹þä_‘ÿ?¶®¹äƹŸíè?è®à’óÿQý½ýõÏü^ñªz†‡MýµsýÈ¿#þ4m\ÿr/Èÿs?ÛÐÐ?\ÿÁ%çÿ£ûzúëŸø$¼ÿãTj7öÕÏ÷"üøÑýµsýÈ¿#þ5ÌÿoAÿ@ýsÿ—Ÿüjíè?è®à’óÿQ¨htßÛW?Ü‹ò?ãGöÕÏ÷"üø×3ý½ýõÏü^ñª?· ÿ ~¹ÿ‚KÏþ5F¡¡Óm\ÿr/Èÿ1õ{‰)H°nìsëí\çöôô×?ðIyÿƪ Ïéºu¤—w°jÖÖÑŒ¼ÓéhŠ3ŽXÇ͆‡[ýµsýÈ¿#þ4m\ÿr/ÈÿPŽ&”¸àd’À?­?ìÒz/ûú¿ãEØh\þÚ¹þä_‘ÿ?¶®¹äÆ©ýšOïEÿWühû4ŸÞ‹þþ¯øÑv?¶®¹äÆí«ŸîEùñªf“ûÑßÕÿ>Í'÷¢ÿ¿«þ4]†…Ïí«ŸîEùñ£ûjçû‘~GüjŸÙ¤þô_÷õƳIýè¿ïêÿa¡sûjçû‘~GühþÚ¹þä_‘ÿ§öi?½ýý_ñ£ìÒz/ûú¿ãEØh\þÚ¹þä_‘ÿdš½Ä±£ùí«‰ø¯ÿ"çÔ#BÜLï!ÿUqÿ\Çþ„µ Mú«úæ?ô%¨hª·÷ñX@®êòHíåà `™È$*ƒŽp É $HµYú­„·bÒâÙ]YOöˆVBB;lt*ÄrWa‘œ66c?·-­¬~׫¯ö2<µ„ð®ãŒŒv_^3ž7öÆ™ý§ý™ý£gý¡ÿ>¾zù¿wwÜÎzsÓ§5‘¨ÙkÚ”4°ÛFcgioªÏ ¾Bí9#WÈÛvÙ'*RÒ|'cáѧË-±˜]éóîVm»`Ke~ÝIñõÇ8t'^ÑÕ.ݵk¶låÊb'hÏÊr罚´Wº¤Öl’´‚é.@Ë"ÊÒŒvÄyÎyÝíÏ<ÞÕCÒôÙØ£ïüеҬOY‘BpÁ°¥ó‚¹ÁÍhø{@›G¼¸™Ä*“[F›Y$*âiä|³å›ýpù‰ËN@Q@Ì=_þF_×YÿôKVåaêÿò2ø{þºÏÿ¢Z·(á>.ÿ‘·Sÿ®æŠ<]ÿ#n§ÿ]Í¡'¾\ÿ­_úæŸú¨jkŸõ«ÿ\ÓÿA fPQE (¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š+?^°—Tðî§§Àȳ]ZK3’3!QœgŒšÐ¢€8É“âDÓÉ/áôÞŶ¬²`dô‹4ϳüHÿŸþþ?ÿ®ÚŠ.+OÙþ$Ï΃ÿÿQö‰óó ÿßÇÿãUÛQEÂÇö‰óó ÿßÇÿãT}ŸâGüüè?÷ñÿøÕvÔQp±ÄýŸâGüüè?÷ñÿøÕgø‘ÿ?:ýüþ5]µ\,q?gø‘ÿ?:ýüþ5YÚï‡|{â &m:ö} Å(ê³H>¿ê«Ñè¢áb¹o£´iñ[É;áÒ$eUž$ñŒqׯ9;üUÿ<4oûý/ÿ[”PÿÏ þÿKÿÄÑ¿Å_óÃFÿ¿Òÿñ5¹EŠ¿ç†ÿ¥ÿâhßâ¯ùá£ßéøšÜ¢‹‡¿Å_óÃFÿ¿Òÿñ4oñWüðÑ¿ïô¿üMnQEÀÃßâ¯ùá£ßéøš7ø«þxhß÷ú_þ&·(¢àsëc®]ë:uÝúi飻~âW,w!^…Gr;×AEá>.ÿ‘·Sÿ®æŠ<]ÿ#n§ÿ]Í¡&¬¿¼E,…̶ã<!p3þ7ˆç´÷äQE+ øXÞ!ÿžÐß‘Gü,oÿÏh?ïÈ¢Š,€?ácx‡þ{Aÿ~Eð±¼Cÿ= ÿ¿"Š(²ÿ…âùíýùÂÆñüöƒþüŠ(¢Èþ7ˆç´÷äQÿ Ä?óÚûò(¢‹ øXÞ!ÿžÐß‘Gü,oÿÏh?ïÈ¢Š,€?ácx‡þ{Aÿ~Eð±¼Cÿ= ÿ¿"Š(²ÿ…âùíýùÂÆñüöƒþüŠ(¢Èþ7ˆç´÷äQÿ Ä?óÚûò(¢‹ øXÞ!ÿžÐß‘Gü,oÿÏh?ïÈ¢Š,€?ácx‡þ{Aÿ~Eð±¼Cÿ= ÿ¿"Š(²ÿ…âùíýùÂÆñüöƒþüŠ(¢Èþ7ˆç´÷äQÿ Ä?óÚûò(¢‹ øXÞ!ÿžÐß‘Gü,oÿÏh?ïÈ¢Š,€?ácx‡þ{Aÿ~Eð±¼Cÿ= ÿ¿"Š(²ÿ…âùíýùÂÆñüöƒþüŠ(¢Èþ7ˆç´÷äQÿ Ä?óÚûò(¢‹ øXÞ!ÿžÐß‘Gü,oÿÏh?ïÈ¢Š,€?ácx‡þ{Aÿ~Eð±¼Cÿ= ÿ¿"Š(²ÿ…âùíýùÂÆñüöƒþüŠ(¢Èþ7ˆç´÷äQÿ Ä?óÚûò(¢‹ øXÞ!ÿžÐß‘Gü,oÿÏh?ïÈ¢Š,€?ácx‡þ{Aÿ~Eð±¼Cÿ= ÿ¿"Š(²ÿ…âùíýùÂÆñüöƒþüŠ(¢Èþ7ˆç´÷äQÿ Ä?óÚûò(¢‹ øXÞ!ÿžÐß‘Gü,oÿÏh?ïÈ¢Š,€æïïfÔo¦¼Ÿo›+n}£4QE0?ÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/revert-dialog.png000066400000000000000000000332131203611042400317210ustar00rootroot00000000000000‰PNG  IHDR²¾‘Q pHYsÄÄ•+tIMEÕ TOËtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝ}˜%U}àñ_ÝÛ·{f˜!¼ìÌ"#Jb²:€ ƒ@”÷„1F”äÑÍJX]Ì `" 7b×@ %lV£&ˆ 23¼æé¾/}oíÕ]]S/§NUª[·êûyFìª:çÔ9§êÖ©—{ëgÙ¶-þ𕀆/|á*ï¤åŽ(ÎXràÊå»î:µlÙžC¨`DlÚôêöíÛž^¿Q<ãÊ܈òá_ùó‡¿õ]«é°Ãþ‹ˆ4›Í!VPrý~_D{ì™~ø{?üÑ¿;ƒŠeÛ¶3œ÷ž#Þxð¾Ó;fºÝÞŽ™þôô̰+ SŠe€IDAT(£%KO.nŽ·–L.þéS/¬û§GAeLDV®<ÀN^zñÕW7µ»Ýî¶m;†]a@yMMMŽï¹lÑÞWäˆmÛ·ˆˆµfÍ'{÷»>æðW_ÝþòË›w¼¾cf¦7ìªÊnñâÖä.“oxÃ{î¹ëCþhÝŒ‰È>û.}õÕmÏ>óòæÍ\š@løÏç¼çޤ¹ž>í¼{ï¿}{wûön§Ý±÷Ùw©ˆŒ9‹wìØ13Ó[´hÜpeeõü¦¼çŽ3×üнbïÙ–Én"ƒ¹¯ÿZ"þ?–l•±g7Yþó/o¹ã•ßX³ß²}Edf¦·c1…£ŠIDATÇÜÕȘˆŒOŒoÝÜæû]P+{ýù-'¿ÿÈé­mùáÆ~§«“¥ù“Eää÷ù?¿¥yŧœ™[·ô¦öX$î5Jg¶ÓhYùÔPRýé¶Ýµ[‹µžßÒ›ZdO´fb[V«oûþŸî¶¶µ³v¯Ý¶f;"âŽÙŽˆgDi6íàšv³ZKû-»ÛßÞ‘{òµMÝ~¯ÛŸXlOí5¶÷>‹—L¶Šj2 ÎÀžµûÓÍ~ÿô«®‘»>ñ»iÍΖåþqöÕ׋È×.ùp¿ÝéöV aÇXÔjöŒï³twomüÏ?~aÛË»ÛíwºÝW·õžz¦³tçøÚ IDATϱUo^¶Ï>»äÙR@¾úÝYiؽ®Õ›™½wãó"râòýîüÐy³ó fEÎýò΢W>þû2èl[ýÐÒÆDIJDD KÄržÂ,êØK'&Z»Lt-êmé-šluº½n·ÛîtÛîÌLç©'·¾þú̱ï>p·Ý‰%–-¶%–È?x¢[ô{ß{Ò;Þ±ú-‡ýB®Ý‚…\Ì¢¸ë]i¶-–e‰Ø¶m‰ˆeÙs›¼ßȸȬô›sƒÈ½Ÿ?qù~·}à×É þ÷_9Ɉtg;;ô›"½ˆ4š ±E,ôÎ82&" Ëj4¬æXÓqìï±Õ f_y­ýúXžþr6IDAT¿ÝîÍLw:Ýn§ÓiwgÚí™™Ît»óØc[ß°÷’w­>HÄQlw¼÷ŠÈ£ÿúÈ'?õû¿ÿ±Oþ×wG}ï{ÿòýï=zÑšËò(Q8îTg ÕfÙbÏ_A¸_ã’Ù^ϲÇdÌ’~ãù\¶ßõ7Š;¨œzú_ÿš;œ<ÿ‘ËD¤oÙýŽmÏΊÈX³)¶Ø–-¶Ý°,™»FiÈ¢E¶ˆ5¿š–ôÆ–ŒÏˆ%–Œµ»ìÚ:ø={½^§ëüëv»½N·×l6[cMq)±½G›™Aÿð_z»ˆü¯kÿÇ·¾ñ`'â)‹?ú̈ÈGçc39Ž(uªŠs…j›ÿË. IDATäZ"¶{ñ "Òï‹Õ°í†H_Dž»ôÒýoºIæw8yîÒKÊ ¤ß‘ùëi5­†ÈÜ5J£16Ö´†»!¿Þ$ƒA{0 ìÁ ßìO,î·ÆýÙÙÁ`ЗÁ`¬?ØjÛcc f,ÏѦ96÷]ä#xgC¤9Ö|è¡u×|ö*¹â÷®<úèãDä+_¹õ«wßñ•»þf·Ýöغuó9gŸòÁ3Î;çœ ƒ)Eä×N:Æ™óÿñƒ‹/¾Ü™‘O>æïþþAMyª‰íZa΃=¿‘-±ç/Y¤7°Çí^ßóL}ã¥/¿éó"â'/½Ø[šeÏö¶ˆ±Ô9MIDATŒ5-q~¿b5 qF”¦%ͱÆÎ«ï½ã¥ï{©³½Ýkw:ÓíÎÌLw¦ÝžžéL·ÛÓ3™v{¦Ýoœ¾úü…ÀxöÉfsì‡?üžˆœòk§KÃúç~àšÏ^uÃu_˜šœ¼à·Î³¬ÕǾ÷èÕÇõî;žþÉOÞ~Ôê§žzRDŽ=òØï>’Ò-öÀý–¯:øÐqiüŸo}ç}¿òNqî° ¤ßŠüŠ ³¸J©(6luY–ÈüÓn±çÙîÌÚÖΟkïÕɉË÷»å¤“½K³s‰›s÷¨Ä²­¦ûÅjZã­1[,Ëy·½%ý¾ý/ûüÜ.{&ö`0è÷ý~YY7¦IDAT¿?ôgûîä`0 ­‰–e;øu:ñä¹ ˆOêÚ_8ü›ã­‡º_DV½ñÐæâqùö·ÿñøãN8ôÐC:rõ·îû»£Vsß½Ô‘«\yÐwßLiÍ_ñ¸ò æâ Kd¬±0zM.b<)§²Ue3¤T×ÂyÿÜ€bÍ_\ÌözÒjµú}±e`5Dä·¾õwîp"ó·¿þìW~MDö@,™µe¶×‘ññ¦{àw†”ù»^-Ë{g­?n­Þ²ù{O¿öŸß2ÝîÎÌ´§gÚÓíÎôLgf¦ÝîtÚ^»Óýí;>¶Â]±»?ÞûâÇk¯øíÛ¶Rd hIDATO.j¶šßýîCâiyô;2´ZãøàYk×þöëîýîwºænl¶šß}äáДîZÆ'üÃG«Å¯ý‹c3¤T”ÅEJuy6­eí|""ƒþ`ÖjŠˆØƒ‹ïý¦;œülÍšƒn¹Eæ•ÏŸø«±eÐ8 ÆÇZîåN£1?¢4Ò³æo«Y¶Ìî·K¿k/ßkòg¯nÛ´Ù¹ÙÕ™»ÙÕé¶;ÝngöÈ#<þ¸ÃZãcsg­¶my5ïxב—^ò‘Ï\sÕ[?üÀƒZ½ú؇þ¶ó0G¿×o½õ-‡‹Èÿü£?‘ƒW²hrQTJwr±ûÕW_ó‰O\ññ+®\²dÉâÉEQ)½%;sÌ»|ðï@Ë{YbÍ@Ø"ÒžŒYbKóÊYç'è7ÝãùãúÍU_þ’ˆÜ;v­IDAT»ñùÓYyÕ;ÞÝïÏ=Io¹åõº}q211æù¦²-bM²×ô;dñØñS‹Þvè>wüí¿n˜i·šò¦·î¿zõ›Nxïaûî³Çüãq¯pæLLŒOL,ýøÇÿÛ¯žtÂ_}õî߸àü/üé­_þòm<ú_?ýƒ+ö?Ðî-Y$"oûÛEä͇¶tï=-šx×»VG¥tKvþ¸ì²Ë|ðO>æ±Ç~j¾ÿ…»íUÅ%J…íü…áÇ™µÅØW1wîþعòå~ìÜvç—Eäª#Ž™Øýù¼ã­ù_ŽXý^Wœˆ[¿wÅS»ïî¬fî•8ø­IDATó_#TaîriaUî—›ç¿|ü³Ç7ŠÈA«–;Ë{ÝÞ3?{a¯Ÿ[6µû.3;Ú[7oß±}zj]—îµ›û¶ãÙÞìÆ§ž_~ð~có÷¯BSúJ‘n§ûìÓ/úf"_wªŠs…Šs?º ¿ü§“OÓŠ}½^£Ñ°šÞ/<…Øb÷gƒA£Õzbà ïùÆ_¹cĶ-[?{Ímsw½&ÆÇDæ/6æÖhÙNú…Š8ƒÉÂcÉÜwšm˲lÛy´÷æŸ?È{Cv|¼µêçvÿÞm]ƒµô¦Q¤ô¥ Í -F”ÊrÏúûI–-Η{EdG§/ÒX,ƒFsáâCa0Ì ÒfM`IDATéËü]/ç²báÉ|£)­ñÖÎß.s¯Dœ/8/ÖN¿Œwß³Óž8÷\UÅQ§ªøÜV˜ûþï/Ùÿ{éåî>oï‰%³½Â,'—ˆLÌ}3˱M÷9J«ÕtÖ8ÿ}/qDZ矑Xî]0kþ›" ¯óš{ ™eqù\e6žÊbÓV–{É™²œë[¦/¹bÉÍ×¼ôòI œíož¾äŠ±Ö˜3VØ–,¼×kj÷¥cp€š9å„·ý\±äækÜ9Öü—Eyi0}ɧœð6ïÀ1µû|œù‰ñÖóÏ=—[%õËǼY޹=EÆv§ã8–íùq#nýäÉhÛ¹ÄIDAT—TPCïôŽ(OýôÉõë_j}#iåʽÞyÔ[ÄQÆZc»ï±çæï?þ‰_4ìŠFÉÕŸùâÛ~q•ókÂFljt0¢Ì`D˜Áˆ0ƒ`# ÀŒâF”+È©4Í’c“™­adlQ©:6{!¡%T¬Àp©FßþíL®Xy€û/*¥¦ì%äÁø¡A§Àò4??u8ææT½’·p¥‰Ð¾aý³Î+Vàþ]Æ[¤S`õº1ˆ6–­XÀ¸4#ŠŽÐÁÆ=ÕòŽIî¤û·÷Œ,tôRüíæ MUàŠ¢êàÌl¬·&¾2Ý…¦‰í½¨Œ¾NðåIDAT:=£ÓáŠìQÝZ`ºŽ V&ªÕ+ V»„m m ƒ FB^#J¨à‡Çû9 ý[ÿ³¤“2ÑU8jT mN0}hFE}¢ŽqŠ#£N±Q͘½°ŽM´"E–²µQižÌ»ÏQt>Q¦è˜÷íæàƒ%ßó¤¤"é²G ^IÂÑZ¿V)¤îؤ»™zÌNTTRÆw „Ò?G)Û‡Áw묀òs57!c±èXïº×=Õh#0Dé¿=ì»_ìc|¼Ñ,0ïjhùÞ»XfWa°}7“ÞlnÇš]QT±•i#0,ªkõãMÙùÀ¤x¤[þ†õÏzÿV—uÚ—%ôÀâ’î™IDAT¡H£¸Z%u^_s¢ê£^ch±KÝ¢¢zFG©:Ö[™`ÇúæëRÎ6#ÇZ³æ“7þÊ{îY·îþ‡KE}ú\ÌSÍ\Ÿ—PxÆU”ªcsªLÚàêÏ|ñ¸ãWŸvÚq—\|U¡ßõª¹× %)t”qDQ}φR‡ò”UxÆu•ªcsªLÚŒ7EÌ`D˜Áˆ0ƒ`# À F€‰G”¿æM”¥¿vßÜYr#QI¥?¢¬ ÚˆPåì¢rÖ @õÄü‘—C$B_¨3Õˆ5œ_ø¡3Ç[ "}ht2†&¾Læ´DÕIDAT]`Іxÿˆ}#™Ná±­}³YhßÒ¤‰ˆ3uÔöå …£JH—14AhýC Ô)?£Ø~‹­¤bŒc¼¯³Õi#C €,̼×Kç=í¾c·~áêŒ)ú:—:åguý huðJ+´(EµÓÕÔÌŒ(±‡Tßá/õ!8ô}ˆ¡3ÊY¾zuY’éW‡=r¢ú®WŠÈ?ê“nE£¤¼s}9|hùÞÒÈÍ1Í~ð>‰}Ê•e¥\ÇH!æÅ7 „Â6ÒçxSªÓkV&ô!sÒ’}écËÏH³—Ô•L‘Æ]ÚÆç ªŒ1£ÂÑ·°Ì`°üîIDATD˜Áˆ0ƒ`# À F€ªß£Ü¿n]aõ”ßœ·qÃsQKc~áø?zØt}#éÿð“êñïõú㾘nÝ—¯½(u^`¤Õdç¯I3Í*O§m~í…—^{ýÞo~ç7®°m±½KmËý¯-O<¹þ}'¯Ž-SëM‘Û¶$~É×¾þ@ê¼ÀH«ÉÎ_“fšU²Nk®»ïÑOX½jÕÁ±Izü©u÷=rîYǪ“é¾{xóK3¥Ù¼ÀH«ÉÎ_“fš5ôN›šÑNœdëx$6™™·ÙFÔl¿›f¬ÙÔ)Šj­ÓîŦ›,划~Gqw…àOßd0ú#çKzGºÐ=ß»‡{÷Þ¨»Ä¾O„o‡÷­(ti‘ŸŽÐcìç=´umG·‹FZÑ#JèÝ-Å|ýÌu0äIDAT9‰&aÑßQÕOæÕ%«³äúéHúQM‘Å7¸ÆöFèÌ!vQ…•åÛÀQ§uâ¾/3…,y‘V“?c3o½õϳ÷˘}Xʰo¼ÿ”÷ˆÈÓ럙šZ›øéõÏè”?¢\¾ö"‚ŒçFZMvþš4Ó¬’tÚûOyÏgœzûíw-]º46ñ¦M¯yöé";ÔÉrŒ¸%"7<·|Åþ©³£«&;MšiVI:í…7O,²Ï¿ð솈eY–e5–Õh4bY Ëç¹·î¿üÊ–Ø2ãGEHa³£«&;MšiV:­51i¼Ìø%ËXZ’¡(^Mvþš4íýçXIDATÓ¬’tÚ /n6^fAßþæG‡ÎÿÕË*¦€¼%QÜ»ijQ?ÙïÅþï6üô.ýæG3¨@5ô{”YÛ²mñýŸ\¶òÀ·D]¾FKâÅŽ¦È5Ûo lÛ÷o|rYkrÙŠ»çºw«Wê\i^$…æ þ­Î’n]©E­®àj¤^cñõ¬ž`êô*=R1óŲ,õˆÒ4fû²ëg?Ý~}úõ×¶íØ´mÙÝw,;üwœ¥ÿþĉ9­·$eŽ4:€&#ŠÎYRo` D¶^ñ"ÒÙ]¤?ð,ísž#/͈â=iÕ¼èîõý¾ýüxó¶™ç_Ýþâ}_äIDAT«Û>{ÙÉ¿ù©¯~é¿ÐYštu¾9¶m{¹3CËqþðNF•\ªÎëí¨:‡®.´?½õª¤¢žQÕö­.xý‘¥“¡¦ØŽÁ4‰reòÅ=69“±‡•nßêìãŽXåÎéì/ü·ô¶³Ts½ÁC¡wÕÞ£§D.}ÙC¯QÇzEùQy}uPÍ£†–`.E±Q¥óÊT'#H±݇…ê9¡¹€’H×K8‘n¿1;Ÿ»ñêööé-ðé/}åþíg/ÿàg/çŽ9KSW#ÐÓÿPÁ¥úy5 LG=¨(ªz±‚bðÅT[š%ÑÕ‰£7h òü¥ŸÌäoIDATÈùgýòù"2ÿ4ev0Ì—ê«›e©©,Q…¸÷|“œÃ–SêíÂÀQ‘ò%én¯ßèìé®W¦§7nÛúÔ–ÍOmÞü̶­üÆ]2Œk”PêeYj*‹whNÆfTß7C ±™Préïz%Ú³gûÖÀ–7¿álßü¹k”èç(êþóá¨rÔ×[Y–†¦ fñV,jHÍ¥˜ÔZtðÞ”àvI:'í ”xDI·+÷–ó>”bDñ >Öù#t$(`2XŸÐɨºù≪›@ñ$ßT'#Tì–J=(ƒ‚ÞÙ4n¿îLçƒ`Y–ˆs˱-N¸æ$}_NûIDAT@å‘`DÉrŒûôµ.£©kiЉ®`rZ)AÄ- /5ÙùkÒL³ÊÐiDÜFFMvþš4Ó¬’t·åEÄ-€DܘAÄ­ð,ÿ‚¬ÈÕñj©rÒy ±N.`ˆˆ¸UD™%_5ïö`·J„Ã:€‘FÄ­EÜ ëkšºXu£|]‘º‘ETχ¦I” ("n•(âVhšÐ†§¨X݈¤ÔÛQ¶~pk¦8¥ŠAÄ­Q¸”±b(_‹@µqK÷eÀ)–šÊ’W%”úÚ‚­‰QAÄ­êeYj*K ܼª6"JŽˆ[%ЏÌ%{ÅBÓs´ÊëT¡›IDATUpË&ã>ôâ>ʉˆ[%ЏÌ<Ðk«hµ©nD ±{cê9@q«Œ’>¦€2 âÖEÝ‹+¾&·€¼Ôdç¯I3Í*C§q 5ÙùkÒL³JÒiDÜ”·fq `·Â³ü ²âWµFWáÆž®J)rUIºž§ßP*DÜ*¢Ì¡¬ZçÝÆÅàÝ!@Mq«D8ìiDÜ*]Ä­¨†h¬^p R4З&tNèº)%Éfª¶¨ž M“(PDÜ*]Ä-EC…‡ÖJ]¾¢>ÁQØÖ("n-P·(ËRSYRäâæU}°‰1tDÜ*]Ä­,•Ô¯XhzŽGCÜ^ÁmšG^À8"nå5¬Oèdè"ÅêIõÀ£SIýnDRúÛ78'ê :yÂq« ’>Ö€<qkÈŒT¬´­P+DÜòR“¿&Í4« FÄ-`dÔdç¯I3Í*I§m~í…ÝvÛå¦?¹ÂÔí¬IDATëM‡¬ðÎï÷ͦÿû·O<¹á¼sNˆ-“ˆ[PSúgwŸðÞw­ZuplÊåËŸú‹»ï?÷¬cÕɈ¸õµjÕÁívwÇŽ¶ˆôû}évgÛíYét»Ýn0X–õ‹o;xÝÄ–FÄ-€ˆˆ=÷5\kçy q+¡“êºeY…:eÔé–ú¨ÓëtHÔ&SÔ!ªØ¨dz*!±IDATQY²ìQštVZáÐUëçtÙžÿŠHòÈUDܪ#'òŠˆ[Cu]ÀêÌ&"ny©ÉÎ_“fšU†N›š2ÿ•("n¹¨ÉÎ_“fšU’NÛüÚ ÆË$âÀ "nÌ â@Dœð(;ÅØ²~—ˆ[áY þXe~’–}ÁÇ×9‰vN:#âVeš2¬ºeYo™ûs„(Þý ”·€Àã1ˆ¸¥*3¸T×ÛQu]]¢Ä¡Mó­×H=ƒ%èœ&gÙFÕ¦h¾âjîdÔ†ˆÍ †ˆ[%Џ¥“8ªEëšQÿÐojURhóƒ¯8iSì3±y¼Ô”weIDATq+æS\ªŸW³@ßRÍòcû?é‘ZÝRïÌÐÁðò âVâ—ë/MšÅw[C'±A #Š ‡ò âÖu‹²,M”Å‹oQäAìºÔwó0,l˜ayÿ?ÙEÄ­EÜò- &V´7i=c×ZBºk²>„OD±¡sÍ GÄ­¼&£ži'º‘¥3'E=uæ(&ƒÃshc³l£JÒé`bï¤Î:(·fqkÈŒT,i!WZÚÎ0\DÜòR“¿&Í4« FÄ-`dÔdç¯I3Í*I§q P^DÜ8¬¹ÿÙ–ˆØ"öü©4q `·Â³ü9õCIDAT±ÐÕ•çwjå©IN²ïZù ¾„X½•ßp("nQf5”§gÔ¯p6¾Š2P¼"("nAW9_嬕qü0#ˆ[#qËWŸÐ?¼ ׯUho=cStézIseÙŠJúVá.ÊòŽ2E9Š íNzÛ¥Ó9@ñˆ¸UÞˆ[êÒÝôÐ)GF¿4ߪS¬+ؽêížb-±]$iw-µÐr‚•×éü¨†§8áL!âV̧.¸T?¯f¾¥)UŠC‰bLMº–DõQ¯]‘Å•±Ÿ£Ö’n$(3† ˜bù¿(l'|™=·âšeiÒ,¾ÛIKNT±\¬f»ÅÔI·Áî-•*VQ1-IDATµ£Žˆ[ Ô-ʲ4Q;I| ï†HºQÔÕ–¼ëãíÞ²µ=£Š5£ˆˆ[帕´¶ ¾\Ik®¦Nº®Dõ –Üî:-JÔuú»VvÁʧëü¤y㈸•×d°>¡“K‹J¦.9KÍÕ)Cwص«ë£N¯Óϱ{‚©]KM§äÐú‡®Q?/ cÙ²)ßœÇ~¼1i!DÜ‚鮜”ǦMÛîøêßúf{Ô;BÄ­!+æ¦J©VQÚmÔÙ²eS¹ø\ïœÇ~¼±Ûí'*„ˆ[@^j²óפ™f•¡Ó|· ºF!âBMvþš4Ó¬’tš/âVÄ5Êl¢2‰¸ˆºFóž‡&IDAT9*Q!DÜŒÔ5ŠqËǸŠÃUô5ŠCñEÅEŒqË7s|r™ˆ8·Nû¨ÿ ÆWrº„Kà'„:%ÿ¢ŽÐŠÕä'ÐÙ7kµ_6*Ú;g}z FœuúI"ÒëôÛžˆtºÝá\£Äî¸Dܪ°ÔoDÖ)ŽŒ/ŸŠAÄ-˜Ä1.'ü0#ˆ[ª2ƒKÕy½½UçÐÕ%J¬OèÞ†ûje¤ÁtzUÂ…Y6ëQ´EÑ]îdŠ® FÄ­:FÜÊÒŠÐŒŠ†è<3µYË/´-êî ¾%Ó;™(/öDœ (ó»ÙüK³4q+æS\ªŸW³@ßÒÔ©Õ)¤ŠIDATs>I×¢îô#=”Ãʃˆ[1MȲ4ißm¤%g¬˜ÙC/¶Fý¶U9ÑŸ("n-P·(ËÒDYì$ñ-¼"éFI'é*|7ÇܦqÉb]Š¡#âV#nŖ難Ù¡#‡÷êD³Úú›µ‚Ý¥V‘%/`·òšŒzj­ó€Z¿´¨dú%Ç–™¨ýV‡¦Ì²YËO§uÁÄÞÉ»P$"nÌ âÖP±ŒÕÔ„e9÷¨='ù DÜòR“¿&Í4« 拸e·€\Ôdç¯I3Í*I§ù"nAÄ-€DܘQÐO ˆ[¾nÄ­bêÈUâüÈCIDATÅŽ¦ÈåDÜòýŸ\Öš\æDÜR¯Ô¹½„’ âVeŽý÷ÍäÔWl‚ Œ/ŸŠAÄ-¤Ç­0ü0E°=ÿIñÛs"n©Ê .UçõöFTCWš84ôE°|_ÕõÑ©¡ºdç>OÝŠjK’Í:BmQ¼ZÍôö­Î ˆ[¥Ž¸¥Óšý£SCE¯F-M×úÕ–$›µüBÛzê5<Äv~Š>À"n•7â–{tPÞZåq1UæHeưò âVL²,MšÅw[#iiyœœš*3EÓ ‰þDyq8G1IDATqkþwœ’.M”%øð 2‡ oÓªÔ®’ K1tDÜ¥ˆ[jöÎîSärŸa¸½,3Øç:ý¨iú›µ› ×¼€qDÜÊk2XŸÐÉØE¡eê$M¯SÃØ)ú\g½Š¼Y6kùé´.˜Ø;™bóE"â@Ä9‹xÏG,±vžƒˆ[CVÚŠ@RDÜòR“¿&Í4« FÄ-`dÔdç¯I3Í*I§q P^DܘAÄ-€DÜ ÏRðoÄJû“4Šeß.P¾„X¿ëèd¤ayÿ?Ù—Q‰¸UD™uC§xQ4PDÜF?ŒÇH âV-"ne©^h2õz%É#[u‚IDATv©EWDu 7¯wéìÀ@ñˆ¸Uˆ[:ëJW½Ø›-¦¶Kå…vEè©CÔð Øè±y¼q«R·RÐ<¾sl*-6 ʃˆ[1MȲ4ißmŒ¥ég×Ycm¯*ÊMƒò âÖu‹²,M”%øì!ïC†$¢7¯J‹-‚¡#âV5#n…®+È— *KÒ«RÂ'ì^ý1>K^ ÀšûŸm‰ˆ-bÏÑDÄ­¼&ƒõ Œ]Z¦NbêéwŽ"¥©íRy:LìÔÙÁBçZæv3Ï9á®DÄ-€‡%b¥<)!âÖ•¶bêàéõÏlß>ˆZÚh4†“L§4"ny³¯Å$IDAT©ÉÎ_“fšU†N›šjœyö)·}éî¥K—î¼Äöß7²dË–ÍçŸ÷>‘¾ºL"n¹¨ÉÎ_“fšU’N{áÅÍ‹¬ó/<«1ÿÒfòfC,«á<1·¬†ûìüåW¶ì²øuu™DܘAÄ-€DܘAÄ­ð,ÿFÌÈêFúwmÙ7nU_Bœè9ÔˆDÄ­"Ê–жä×@³%WiCdõ–âáÖ ð!âV•|Äá—~‘@Ä­ŠGÜRÔ3¶ê3bEdE5|(*/I6îHP´"ªíÞ¼¾m»Å#âVu"nÅÖ\3YÆÛ)©ï̘ڸeÚ ÅØ,"šRmIDATáA\æòFÄ­ZDÜJwdVÀ»:EõBÛۤðò âVL²,Mš%xK*KiYŠÍ²ºìkA"ô6ʃˆ[ Ô-ʲ4Q–àc#‡ ;UØ ub«ç,õ&‹}<ƒÔèL ·ªq+НXo§¥¸ÜŒeªLý;ê‚=¦?ügÉ GÄ­¼&ƒõ Œ]ZfhâàRPW/ö´W§É:­0µqËL§]ÁÄÞɽ ‰ˆ[3ˆ¸5d¥­˜£äÕP*DÜòR“¿&Í4« Öš˜4^&·€\Ôdç¯I3Í*I§½ðâfãeq `·fq `·Â³:©?IDATü±úIZö­‰îìEWcˆˆ¸UD™ÅVÍG·ÇFŒ‘@Ä­êàˆ`¸ˆ¸Uˆ[ÁZùzF]+uŸøVÕc±[¡æ‚Ÿ—¨®N´[†– ˆ[•Џ\Eh®íR×!ÝV¨›à¦‰êꤻeŠ“< DܪEÄ-Û…tÒ=¢g¡œˆ¸Ó„,K“fñÞÐÐ,9§Ó®* ÕÕÆw< DÜZ nQ–¥‰²ŸF ñðÁÍ«ÂèÜÆLº(·ªqËÖ¸”½]¡é9´©7MTWç{;Y±."nå5¬Oèdì¢Ð2C×<ÐkÖJ§ðЙú[¡žô÷FuÊ=?vIDATØr€¡ âV|\úˆ¸5dyT¬´PmDÜòR“¿&Í4« FÄ-`dÔdç¯I3Í*I§q P^DܘAÄ-€DÜ ÏRðïÅøyZRÙw†Qá«s¢sÛ‹‘FÄ­"ʬ†Øwg)0»jo8ÅK£ò âÒ0r,〨Éc$q«R·|KÔ6X‚Nïk¨ˆêõ®3õ{*³ì C¡¨•¢ÝÉ›(·*qË`mC3êúRßÉ1µ3)´Vênô ‰6C FÄ­Ä¡ôójè[ê=|Ǧc·BŠã{¢‚é£.¹Í í“ÔCTÝ0l NU¬›IDAT<ˆ¸Ó„,K“fñÝÖÈXZ:I ô¥÷5aX­¨zé,ž˜yiÓ+÷~ó;‡¼q…s‘ï]j‹XîmyâÉõï;yõ.‹«Ë$âÖu‹²,M”%ø`(‡Œ¤ë ^]ÓÄ6ÇYêMu/At’Zwߣ'ž°zÕªƒcSôøSëî{äܳŽU'#âV¥"n%­­oŽf{CGïÕI¢&¤¸äU—3rGÕ`D Éfó"¢3œ8ÉÖ=ðHl2"nå5¬Oèdì¢Ð2uë¬:uç¤h]0AT!QÉ¢²dÙФSÏ`bïdŠÞbÍöû±iÆšM¢ˆ¸µÖi÷bÓŒMšQ²œ 7ÁIDATøq+ŠÁŠ%-ª´} Hív76Íää"¢ˆ¸ä¥&;MšiV:mjjî+Q33]9ç¬S¿ò_÷&ΉEÄ- 5ÙùkÒL³JÒi›_{Áùcz¦³æÂ3E䜳N½åÖ¿tfçè âÔZ»=û¹›ïüÝKΑ5žéþ-"Ÿ»ùÎv{V¿("n@­õz=¹î†Û>ºöq‡“ën¸ÍY¤ˆ[Pkö¼k¯¿Õyíõ·ÚšEq+ÅË¡³R'BÄ-(pÀ*~‘@Ä-U™Áã¬Ù^IDAT¥ê¼ÞÞˆªsèêB‡†¾–ïk`–ºEU@³CbÏ ³l¾ P´Q±!ÜIß¶ˆÝâq«R·R×M}ƒK³Cb™Ú|£+´ê áûLl^ èéõÏLM-ÑI¦S·*q+cÝ$Õq]d‡:™µfÍ'oþü•÷ܳnÝýâãy—Ý¿nÝé§Æ| PS»à{…ÌÕŸùâqǯ>í´ã.¹ø*Õ5Êœ—sÝÕ¡QÊð.3À¨(E8^@0¢Ì`D˜Áˆ0ƒ`# À F€Œ(ùô ?IDAT3Qf$xSäòûçW2¸|íE—­½Ò;§†M€Ô’½{xÛ–gsªÇÐ}íë„ίa“ Äo³ß¼¥v¯Î®a“ ž£Ì`D˜Áˆ0cÈ#ÊŠ•äQ ñbsE'¨†ôqæuxjÖ§ÿÒÔŠ•DewV‘¥ðÔLµNu%ìpå8¢(Ž€•á6°µ|¯Q‚Üózßñ78ß7'ô4Ü=Žý€¾aý³Þʸ3?BÛ"•ë5—ãˆâdÝ¿eçCžúïàÁqTŽ•±m©C'¨§|¯Q‚‡Ë¨ÇÅUzŒlKpPÑÌ#¤è»^QgÙ)ξ}ßh¨â"yIDAT*Ï=ŸÐ ï «:t€Ú·‡œ§oXÿ¬ûÏP½R =”Ç~¬b æòý®—û·{núP:8ß7Ç,ÛA3؜ЧGÞÉêu8ò}2;Ó{ ÖL©N ¾­d–æÍ+ý¦b'€‹·°Ì`D˜Áˆ0ƒ`# ÀŒdßõªadò6ÒI0¢\¾ö¢üêQN5l2¤–`D¹lí•ùÕ£œjØdHç(3Qf0¢Ì`D˜Áˆ0ƒ`# À F€Œ(3Qf0¢Ì`D˜Áˆ0ƒ`# À F€ëÄB IDATŒ(3Qf0¢Ì`D˜16ì ¨”+vr·aý³ÞÉå+öVMŠqùÚ‹.[{¥NJF†Ù¶=ì*äåòµ]ã—‚ó·my68³¾öõô3¢0¯’GXõ±uó«°š”# €\p„­!žÌÌ`D˜Áˆ•UðWïxŽ`ĸGI÷[¼+Vú÷hñýG´ Œ(F‰zðéádDkîň`dø»Ö?[™«“Кû®ÆB/b¢Ò ¥+QTÁè' ÁÁÒ7Ç×ꡯŒ(PR)ž«÷-8Œ(ª xÂ>ê|š¹†Û|{ÀÈpwÉ”gþIDAT† w2ô±Ê0ê•U5JWp`”x¾ÁóñѽRñ *Ö?«3ÌøzCÝ9`D0bBÅÒQ¡n—D4S‘&´Ì\q× `# À F€Œ(3x2À¼D¡dQŒ( »|íEîBÑAŒ( »þÆ/ » …ªá…€I£ûsÔ.[{å°«P<™˜Áˆ0ƒ`# À F€Œ(3Qf0¢Ì`D˜Áˆ0c§·°\ý™/«€Q·0¢wüê!Ö0êæF”ÓN;n¸õŒ:kÍšO»€*øÿ\ËHÅÎ¥IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/search-history.png000066400000000000000000000220501203611042400321160ustar00rootroot00000000000000‰PNG  IHDRÂÆKõ IDATxÚí{”ÕÇ·ªº{<F˜‘g4AD%&†#¢«Ñu—h=z<‰n²{BÎfõݸ1«ÙÅ&kbL|%qE1AÍ*ˆQ@çÁC^2ÀtwuWÕÝ?ª§¦èztUwuOu÷÷s8œê[·nÝ{ëw¿õ»·jêÇ:;ö‰•«%άøÞ-æŸÌQ]@[[Æ|$™J¥ŽïE—@C†ÔG£ÑÆá5gME4ûø‰cDÄÚÚ~pÉÅ_¸à ‡Ÿ8xðóÞ“½‰D¨lvíÛÓúÛ'üÕ¾ìï¦Oh­T?rä°ÆÆÁonøëú×_—ˆèôQ§>||Ï'Pùé=ÜúÛ'¾Þv9פ4§¡DçDDĈ²7F=$í9Â:»ŸZýDçß· ¯o”“)"~ú¨ÓH_%¢ÞÞÞD"]SEÿ*ž¬^²tN¼'It©rÊË!âÇû‰hÉÒ9/ü|uôî{‰tooÆï”ˆ(‹ö|žÄÓy@õ Æ“<Å#55‘}ÇÒCjx,¢Ä‹¨;ÞÔR)EN¥=éÄnyxcdò”áM§×ãJÊÕM)$ðtŠ¥ÊË]ûˆhñØÑO.ÿ;¥/ƒBtããOè»}ïŸHS5ÎIS­‚)cDD‚Àˆ1ªMòá5ÑÈ ¨\S“>–®©È©t*•JÊ©¤œJ$äOvöœ8¿ø’Ö!Cjˆˆ1Nœ#ºöÚÅFÑ¿þÕËEjÿµ×-ÎY¾S/ÇV£d a肌NŒ1"Î9#"Æ8ËŒ5­Q”H!UÌ(çË]û½öo®ÑÞôôot %¢”"‹*©"QZ#"Aˆ‘¦jºxJD$0&L”DFÄ–䪦:š<)©Éd:—åTJ–S‰d*‘L&r<)oÝÚ3²©nþ¼VΑ.£üš«/%¢—_Ø@D‹—,¸öºÅ¿yæÕâõPC]ÍñT:¿×<Ó7výñ¥bZÉJ̬P¼°añ’Q-#‚Öcl¶éf²òüñ¥z}Ì…[÷¾üÂòpv½’úQú^óájDà© ÀŒ ÊïdŒ¨ï± ñŒNqÒ—K‰ˆ4…³SGŠÙ]%‰eV HU¯¥´±#ê?=|üÈçú\^ÎÌååTRN¥deÎù­—-œ‰HÄújÅ3í‰Ó;oo9Î "Jë5O®­ 1ÔØŽšfÁÑSgÄQ‡ ²Ë!9óD#Ò;ooé9Ô³xÉ‚ /<ï··x<ÊéŒæE€hDðA p'«ö;ç¤O±1}n¯ÿÐ…Ncš¦qÎcw¾ö¿††î¼éfýÿ‰k×JúÓ…_末jf]5è/S‘¦Þ(‹DMMßáIí4¢¹‚ Hì½{ã‰d")'’©¤œ’eeîÜñ߸ñÂ3›3¿XFågÍšJD›7o³]1¦±/ÃÖ~%ŠErnë?­Çº’3.ôF=‡zFŒiôU1óöæÍ[õê-…®Y}æë›6SRÑ$FœÄyg½¡¡Û—ÓðA¶/ÿæäÇÿ[WÒ«'¶Ü{þŪšYE%½¼tJ%ã½ÑXL2½\Åcgˆ5ÔR­´hhͬÉg<ñü»äˆH“¦™7âe—NuFC_~Ý…eÄøÖvN6qÖ¬)ftëÖO¦N=˘¹¿ü†C{g%êÄbѬmÛcÇŒårˆ§g‚µ~sf³Íà’'ç±¾2Ñ™cGç¬ ¨BE„AAõ'êÄ8㤿¤{~½²J$Ô’&ˆýn¦ š¦%4d•ˆ¢QIw û1 "E¢‘Sß 0|Ný —î¦2f–tãÏTO±—ÌZiÒçŠJÁópŒóÊ#3æùºŸwà`êô‘Ñ41R4ï—ôÀÁTߌ“1A$2ÖF#1óZjßR§!¦Ä™ñæß»ö¬ïã§øª­­®Q|ôÐáwßÞJD_œ35T‹BBZÕ oŠœ™=ëž'Æ(~Çwë¾ÿÀÁa~ËTÔÏãw|7‰3Ψÿoê‡4œ&á›Í…qþü/ (®¼læsôݺ‡ïï×\–y…‰\ýÀøß½ò²™ÆGî‡4ô‰E#ûöîEϪ‡//˜B ËãÀ¤,‚9¼q$ŸmþxçAt+øb®YFw}²³£ã:<ÒÒ2bîÓ22*E¤Í›·¯øÞ-èðÈÊUÞüM‰ˆôd £È(@F@F2 Q¨$tA~lÜô>:€Êfî¹3!£¡èb@e»J˜Ô@A@F2 •!£ãZšƒ­\à•`kk.ÍcÉ9³•W– ÏCÕ±…Ry×·et\K³ñ»HRX.rï·iÕpÑC"¦ ôHÞ¯ngÇôWøuôR`5d´ ;g–YÓ³RôŸæmÛ̶RnºÇ³˜šsE9èÔ:_bm©~FëØ³VÏvÛ8Ê6OÎ>1·Ý¶Þ{ÀÜœ¬üæôœWÍ©÷œtº .=ã¥Ã¶c­•qê@÷Áé µŒš/›“*9m[/ªÇÌV=5›µûYœªä¥@ï‡;ù#Æ!æm·½î%gΞ÷ž9g¸ ]ã¹”éÒ:ëEñh¾.MYt¬¯ACËÀu¹E²¾ã+s–…¾òà’¿Ä«T^j^ìbð7ÊW|̶͌\™v¬ßZACËoRïtÁ|]ȼ¯º­‡kžDWØRWà ÌY~‘VQoBÅV@ÇZ×R m¥$˜žJï–:X *[êñ,Å!.Ë AuE°¯Óš‰_5ØŽ \I!maôF­Re]-µ^EÛœÆOó¶mf¶b»lï·d§Jè/[[êåIKÎÇ NÍÉÙ .™}›ÕÎK9÷æì¿“ßïX늄ídË×R|ÒRÂÚÚ~ðð#ÿrÇí÷"N½/6nz?ïO“¸›xiu˜• ðOªŽ…ä•é_¹êQ]<ñ…'üºDQ—V 8 \'õ @Ü…Àé©RÖ!©Ÿw÷/Ùþüã›Ñ§È¨=oÜmÆƒÍ Š¢$Š¢$I¢( ‚8uùOСLêsà ¡‚Àú€Ë—uJû©Cû-²pÆÑ«TÂÖÃårÅýFÆ ª]¶å^¸?ísÑPA­ÝH$Ñ*±¼ âJZ lù­Ó8DÈè2m£þéÈü:'ð.*ü ­>&õîjõFËåƒ ùaÃ2Bû¶ ¾-‚¯ÌU¡½Ð~eÔQCsNê½DL$?ÑFmwåq/A+mËñš4P¦.aMÝ«š3ôi>‘ǨœîË%Ô¥ûõ¢’|s/Ö ˆ8Ý>óvôÈOœ]÷>ô2fý¶1«ó)äð-í¼Í—Œºi¨UF­ p œé’ânÖ9ÃŽz‰TêÅÁñßÔ%¶%yˆ.éÞ^§ ¦9ïÛNärŸ÷x]Ül ÷{½<.b„¡u%6ƒ ¼Ü€ iµû­¨À6z?¼4ÁS}Ȩ»†æ7©÷¾$á’Ó‹é—fYÊZBÞq‡rå¥{Ýï…t…»«ëî.»ÄVúÖ…Ç œ û³ë¥y(_m̯·ƒUR_2ꦡŒ … /–í’îÖÑoìâü.¿÷XêƒM¹ïÊ;’¥_ß$¿1P¼@›Ûºð˜A€}B>ãìzlEi®¾÷x<Å3Q2ꮡŒ±’/!ÏJp ÀöRƒê/‹t¥wþ-w m¾êÞÿcÐ*ý¥”Í/Á¹ y®R †äTItWiêŸOdPü­gø©Œå.aÜ<†ö¤W-—oŽÀ°JÖ% ®9 ×4ü†”ó!$º«d•LJò2 Q€Œdd £È(È(@F2 Qa•Ñq·Ç•”)R~‡™…¯ó¿† Q 适¼QÿÔPج]| ¶î…o ¨@íØ±Ëü³åì ºÒÙJd–¯jM±nXWÌ»²Î‚.}ùȨ®b¶ÇÛJ¤“j=*ª@ èØ±«cÇ.9’òÐP[²$2Ë?Å•”¯+ꮤBàÎ D€I½¡4–A³VKÍ)¶®+ž)*ƒ|dÔVø¬‰N‘¬?¶ üàA2 Q€ŒddJ‰TyMÚ¸é}\W@ÞÌ=wfµË(]¿ìk0@üÏo_ĤJJUÈ(c W€j•Ñq-Íèhd4[ÝÅÒ €Œ(ŽŒŽkiîìØÓÙ±Çp9;§91k;+[Vø°€r¤ˆïvvì±në¬ÿoN1o&õ…Ê.T¬Œ³oLà ÏI½Ùm„Œ £ÁÌdzôÔH±ª›óc.¨.ÍR=ã§U mw9凘ʼ7 Ñ\pÎq¥Q#•ùÙæ<>¼ Ñ ~&õÈ(@Fø£1=¶~®+ o¾qÉ”j—Q"ºç¦Ë` "ú÷Ÿ<6ñ¬qœÑ)†Ã‰˜iƒsÚ±³cÒ”Öw?KÀ ?òäâËæOž<ÁKæñÛw­ýmªiò{¬*ê+'¼Q@u¡¨ª'5EÈ(Ø '=-wJõyÊ(&õPyz£æoÝ—ì‹Ë ȃd2å%[}}Mé¼Q#N½þ f‰”þoÙÒ+ŒmkJé¼Q'—0+¶’ù§9(“SºK Ö<Ðn€wâ ™ˆÚnþ:ýíõW­^ó”žnM)7êÕPÿé%Ý¥k Ìà—,õÔÿ7§°Œ¥Åú?\o@€$“ŠþŸ4+)=ôð“ÆÞÒMê‹ÜL@1H§û_xú·_û߾ɨ6ï*7j I_ ·üTxp =ðàš¬ô’z£YJj]¾,°L§¬O¥ t% Š<'õV!ËJ1~fm8¥»”à’ü@F`àÀ§I•L{Çî!Cê<愌À)\wÝU=öËÓN;ÍKæ#GŽN™vÖ!|ý^çžµ¯À€DDÃÆôø.ÓiCòˆ R™2ê71d £È(Ÿø~R?ïnOÒÿçߌÎ@Fíyãþk3®lQ%Q%IEQĩ˂ž`RŸëH „2[(0¢˜xəǷP] ä˪2 Ä§Æ·hAåȨ‹† ‚˜ÇPjx˜Ë vÈÑ¢B5¼ÝkUŽ÷3ªBFÝ54<Þ(>NZ^àz2%ŸµQw µÊ¨“Ùº‘•Hvq˜ÉOXfs9Y%;n[U² %íRCïõwwĬíÊYˆûyÍýàt:—³Û–ã±u.!²mKv*Ž*¨HuÓм½Q[ý2¶„Ø)§­2ºœ(¨æqFkiY)îUu¯•­†šS<¶Å¥@ï ÷RC/½@Ù˨»†–xRì3«gày oiÓ^ÛC¬Ê•³uA͸‹W2å%£nʘ`6ÆàÉO ¼(‹G] ʵ)ñà·®{X”‹»øÝ¢ *|CÚÙ“€ê•Q_!í‚ýN3TŒŒúiç216†ùü0R!ä õÒÎúÞRÆPs×ÐBÉ@þ2ê7¤S,e[ÇÐz”/|%CF}„´³¥H1ÔÅ` 9@¥RŠv¥t‹¼7ê]C­mŠCÍWì³ É £þ=ØBÚ9%)†šmöÂÉ@A2ZÁë ÷Pt­ìoŽ@=¾'è而d £€"¡ €¢¤â'zT%¡ñJ“'ò>6V;8s{gÄI"uƒ‡JR×&f“ƒŒŠŸèTÏ~øì'ëÞÛÝ~àxªÔØP»hfó}ËçÈ)2 “ ¹ÉU ŒnÜô>ÌÔ¹çÎ4ÿÔ´ôŸÝ~´WXûýÌh C ·uvß³ö•ûžÞü«çÁÞ`r!7¹ÊôF¯_ö5®ÿóÛ­‰ëÞÛ½fÅõ!1h"š2®éö¥sn^ùÔŠiª{ƒÉ…Ùä0©Ä5¥ýÀñ‹fŽ×´ ÖE3'´8‹Åñ®L.Ì&‡'õ€˜Þ»i±ãu˜\á&áoèz“ ×=–´Ÿ·Oj$1©¨Å«L¬øF{ƒÉbrR~vilgÔ,’JnîÆ'¥9çæDóOkfë!î¥Ùf.#´tÿv]­hlÇjÎüNÔÕŠN‡ç@Ìm~Tœo–ØÞœòW¼½•‹É/£åx7›¯±í3Êj¬^J+wƒ&"c¹P½x²Wµ¦;å÷XlP„ÜýÚ›mþj°·22¹RLêÍ!7l£Òg…V¶Fuò8l£zøýF½­ÁqÎsFßóh¬cÓŠÂm·u†f¬åXbÎcMÏJT/š÷Ãy´*¬KT®ÐÚ[2 ““+TFmÌÙÆG2K§Kø#Û¨ÈÖB¬)~]ã¢N‚Ü'e傜’õîC½†]vê%¢¦õú†n²ú¶œ’­éæ½@#³ÏêÔåÔA«]eݶ­¢B{3+¬Gû© {+#“ Þu·*ë­>)˜{€ÏüÂ2»Ï†¬v™5™r·Z—IY‘Jõ¯<íÙwLßhQ¯o7¨ÏÊ©ÿï”n[l8'õkoÖi{•Ø[™\)&õî·úÀ )ÆÒ˜»-VÌÊtJqIoï8œ•âžž³Ø{ƒÉHy¿7êQ©óX“ª¤å'6m‡žnÞÛÚÒ˜3=ëð¬<îÛÆÕcoUKe˜œTˆ%«HÆz¼yåÔö®n}Äd=Ä%%ëÞ—ümçìùÉ¥µ´<Ö¶BÎÙÏ0¶wìܯÿo$ê)ÆvVzVŠñÓ|T€rfk.vB{s·Ÿj°·ð›\À2êdµNÜ:%º§ä1ɲµÎç\•aÍjß 'Û¶ïwIÔS¶mßoläÌi=ÊeÛ¯ÚÚ†‹‘ÀÞ`r¾L.xŒ’RÑ &-T…­J‚€uF˜\ØM2 ˆkl¨}ãwcÚàðÔê¥õëj% & “ »ÉU¦Ú~&8A$ºpFóýOÿå¶+f4Ö4†¡J)vô¡ç?üÊ—Z"Ñì &r“«@Í Wr©©ð¶E+ýÖ·özxã,9üÜ}eø¿7 {ƒÉaƨ¦¦.­j[úÀRá²%Šù— ªõ½Dœó£Gzp`r!79È( MÓz{½½ˆÕ`rù€¯ßd £Èè©tìØ…w1t”Ñ–³'@I@—A]mq{á©åì ;vAIUŽ‹†RÎ÷FÝ€GLÈ(@F2 2 Q€Œdd £È(È(@F T N=Á (©ø‰UIh¼Dg”'ŠWx¬vpÆÕbÄI"uƒ‡JR´Ê›  ˆÄOô ªg?|ö“uïín?p¼bÚÕØP»hfó}ËçÈ)9KSª°ÉQŠˆ¦¥øìö76î{fõ?WXÓ¾Þ¶ò¾§7çêy¶M>Ú+¬ýþ f´VL{·uvß³öÛ&CF(.ëÞÛ½zÕwŽITX»^uWÛ=¬¸a‘¦jÖ&¯Yq}%i(M×tûÒ97¯|ʶÉAÊèÁ#];ºloïÜÓMD㚛ΙÜzöØÚ‘ÃÇb8*„kJûãç—N«Ó4­bÚ%ºíŽÇb±DÔkh¥¾•Ò4¢ÞH‘S²ù§qHa}RWDÛÜÔ¹»{ê¤""FŸv}ÖO~}é¢qº†r"F»»ÏlnˆU9©×ˆ(• ~qÔZ¦‘RŒÓYï ¾êVH»ˆ¨ytCVs6k 5¨wÏ"otÚ¤Ö?nÏÈ(§î[ºhʤÎ3o0N~Ü>mR+F¨J%"J§”àµÌR¦žÒÞq¸ytC{Çábß|Õ­vµ¶4ÍimiÔ3˜³YSô~pÏ&m©ýùs[æ|qzóè‘DôÆŸ7ÿêÙW¯½rÑÔI­Œ'Ú½ïà»[>^~å Œ(P2ªhD”NìíØ¹¿µ¥qÇÎýúϳ'ž±cç~ý,ét:koਹón¯SÍÍÍtI1ÿÔ;§W!09|ì…çùú·¾zéÍ£F^~Ùܧž}õ¢ù³ˆ“F´÷³ƒX÷Ö‚óšñÒ(¨NŠ÷úýŽûÏžx†±m»·HJª¨E|æmn—þ3+ÅKo¸wNèd”ˆfŸ3‹>ØüУ¿9wƤig·þüá&¢>îøhGû¦-/8¯yö9³0œ@•ʨƉHU‹Rø¶íûûĺ?Åv;`ÍõÂSç5Úe••bÛ̬ްþ,Ro#£º’¶ŒþaGâWÏ­Û½§›ˆÎlnš6©uù•3à‡‚ê–Qˆ””ZIÊé‹VX{K$£úì~ápZxÞ± [qJ¶*W¢Fiú§IÿļÂÚkàÒä`d`†kl¨%¢ýnQ¤bÚõj×>"jl¨•$ɶÉo¼ónL\aWó¥õëm›  ˜3»HtáŒæµÿ|âŒyc"Ó+©iëßýÙW¾Ô‰Fl›|ÿÓ¹íŠ5ÓÞ;úÐóÚ62 @‰ÔÔ?xÛ¢•¿~ëooxñÀ‹ӮƆÚ%çÿ»¯´~|Óhò·öz…Åbrj2d€"RSS‰ÆVµ-}àÉãð+Q,âYTU#"ƈˆ1Fœó£GzÐdÈ(EDÓ´ÞÞDooM®6X?@F2 Q€Œ€Œd £€¢’ùcÐKÎ_¹êQtxä’…óO‘ÑeË.Y¶ìô ø…µµý½yóÿܽ_ŒvÇFIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/select-perspective.jpg000066400000000000000000000414131203611042400327600ustar00rootroot00000000000000ÿØÿàJFIFHHÿÛC   ",% )!&4&)-/111%69509,01/ÿÛC  ///////////////////////////////////////////////////ÿÀ8ô!ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?×ø“ãÝOºì6ViæÜØGpÍ=¾öÜIÃŽ`ÉñGÅ‘[¬óiVQDÿu¤Ów}2õéÑÁS597¯¡1æ“vþ¿›|fñž;M(•`¤5‘sþßµ5~3xŒõ²Ñÿð¿øª¿¨R}_áþF*Nå-Z|Wñ]ï›ö]'NŸÈˆÍ/•bíåÆ:»a¸QžIâš¿ü@åËIÿÀSÿÅRúÚïðÿ"=¼û/ÅÍ|ãýJÿÀSÿÅT‹ñc^?òç¥à)ÿâ¨ú….ïðÿ öò$_ŠºéÇú&—ÿ€ÇÿŠ©⎸åÓLÿÀcÿÅQõ]ßáþBúĉÄÝhÿË®™ÿ€ßýz‘~%k'­®›ÿ€ßýz_P§ÝþäX‘"|GÖ æÛNÿÀoþ½H>!êçþ]´ÿüÿëÒú•>ïðÿ úĉõcÿ.ÚþÿõêEñæªGü{Øà?ÿ^©Sîÿ¯}bD‹ãLÿ˽þÿõêEñ®¤HýÅþñ¥õ:}ßõò¬Hxñޢ兗þŠ”x·P?òÆÏþü _S§Ýÿ_ úĉÅWäs §ýø"øžôõŠÓþü _S§Ýÿ_ úÄÉÄw„ÿªµÿ¿¤]~ìÿË+oûð(ú¥>ì_X™"ë—GþYÛß•©X¹?òÎßþü­/ªC»Ö&Hº¤ç$÷妷½¸šTVÎÁFa\søRxZk[°X‰²Îùç½—ýø?üMSÔõ?ìÛxåšKvófŽXàä³°QÕ@Ç9>Ãð®d¨7mwíR¾Ÿ‰ä_XÜxµÚVo–Þ0¡Ð3€;u¢§¾rçÅøíåñýš^»%¹Òaó@$ Íêý?.µ½o}¨IöÛ†”ƪ䨈(Ù´ìåHÁÈ'9<šöðþÏØÅË·õЕÌôõøœ£5”ÝŒ¶6gR+{ IeËý£ˆñ³ø¹ÁëÓ×Ó5#Nñ³¤Ï¬j#³´ÔuyQô}zo'qòÙÔ™ùSqñ“ó€8ÎånYÂÏGëꉟ½+KÈ£¥XXYe¬t]OI•ü3¨,âòÑí┃S¼’6@l7ÌGÝ šn¿áo YΖéúœvžu˜[Ž6û9‰ö çi6>AT@Ȭ£Rj¦Ÿ–ÛýÆn1¶Å­Çû+Å"±O%ŒRi—öö°¸Î¢— 7¹.vŒþïŸLd|6g¶ÕüJÒ,ºsţݖ«o¶!—!C0l¯`[9žô^ð–·Ø[5¡«dÚ7‹$¾½’ÎêöëNÓí Eç¼`Ûd¢I˜”¬8'<¯¥h6^Ô5ôkø¤:£[[Åw+E,­ƒ ËÎB±ÜR6åˆÈ-:°—³¿oЋ\Ö7íü#¢I«hˆ–{-.¤xä·¼Kˆ.ÉX åö°Ý‚Yv€H&ªéþÒdþÏ“P°kKÙl.ç}1 ™gñ#gó +¸í 3³Œ Ô{z¶ßòó×ð${Z ]Mí9­4Kß¶Aknðé·‘É‘šM²H‘«™ €ñsž*äQ#Ãÿgíòµ"£2«Y1¹_“!¾BAæÉéŽy¦æÚW–ÏË·ë°¬–Ëú¸ã¦hrVþê6ݤÝÜ-Ô-$¬nÃ1åó•;¸ÈÎq“Ö¢ŸHÒàðüÇaytóiÂµÛÆÎ±ÍÉ;Ÿ~УÙ;æ’©WEëpq‰ËÇÞ¦¨®î§12ÔâGÐTÑÒdëS§j]DL½*tëK ú“'j»¦ÿÇí¿ýu_æ+9ü!ÎWÇV:…æ­cÿ¼S[këcT+²Þ+~ñÊÅXI–ÆØÀ$›åz­¬[xWLŠ->òÂáuˆ~Ø—¹id¸óùLb]Ç‘ àŒcÚ<˜|Hõ%³9‰ÿò5?ýpùQZ½ÌÖÇWñ3ÀÚ‡‰¼C å«ÙÂ(;‰I –ì§ŽEss|2ñ<èmNÖ@¹Ûºé¾Qè?uÀôÚº©â¨Æ 2Oo"’’½¿¯À«ÿ ‡\X™#ºÓòΗ¸‘»úgïH¿uñÖóLÿ¿²ñ²ÇÒJÖ‡ù˜Î”ç+’/ÂMxËÞ›ÿdÿâ*EøQ®ù{Ó¿ïìŸüE?í ]Ÿõó#êò$_…šàÇúVÿ$ÿâ*Eø_­ùzÓÿïãÿñ¾¿K³þ¾aõy/Ã=hcý*Ãþþ?ÿO_†ÚÀÿ—›ûøÿüE_¥Ùÿ_0ú¼ËúOƒÌ>¯2EÑ.Aûñ~gü*UÒ.ñÅùŸð¥õÊ}˜}Z}Ç®™0þ(ÿ3þ"éòâOÌÿ…[§Ù‡ÕæH¶r |Ëùš[Ì£1KåH9Y©ìFAàŠOMéf 5ØÊÿ„vëþƒú·ýþOþ"š|0òI \êú…ÊÃ*L±Í*,¤Ÿ“Ú¹Ô¨'}v«5m?Îþ)|¾,zAò¢£œ¾CÚ®¿ÖúæŸú¨«@¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (Æþ*ÈÝ/ýqùQV#Ún¿ÖúæŸú¬=^ oµíNKÛ«8®ä™e{W Ä,E‡PGU½jVáÐôûS ×|FÑ÷ÅÕ°Èõ Fî{qÎF3‘[Þ ‚êÚ+ˆ|I®´r taq ŒùgXQÄÓ¬ÚCZ”§M'.¾¤¿ð‚§ý ZïþEÿÆèÿ„?èb×ð"/þ7]&7øASþ†-wÿ"ÿãt Ÿô1k¿øÿ .ð‚§ý ZïþEÿÆèÿ„?èb×ð"/þ7@\?áOúµßü‹ÿÑÿ*ÐÅ®ÿàD_ün€¸ Ÿô1k¿øÿ£þTÿ¡‹]ÿÀˆ¿øÝpÿ„?èb×ð"/þ7Gü ©ÿC»ÿñºáÿ*ÐÅ®ÿàD_ünøASþ†-wÿ"ÿãtÃþTÿ¡‹]ÿÀˆ¿øÝð‚§ý ZïþEÿÆè ‡ü ©ÿC»ÿñº?áOúµßü‹ÿÐøASþ†-wÿ"ÿãt Ÿô1k¿øÿ .ð‚§ý ZïþEÿÆèÿ„?èb×ð"/þ7@\?áOúµßü‹ÿÑÿ*ÐÅ®ÿàD_ün€¸ûoÇas Ëk:½ÐŽEýÍÄèQò@ä*zúþ”Ú–4xßÅOù¥ÿ®1ÿ**€ö›¯õ£þ¹§þ‚+&_ù<5ÿ]®?ôCԭà߶FþÓmŽØËÙgœw''þ¡ÄiøBâåî/mu­]¯"H¥6ÚªÚnŽ6.ÔÛ.Ò£Œ$l蹟x¾ëûûSPÔ5R4í=Mnl’‚MªÈ \aÑÂÜs—º_˜gæÒ¶ñ®«tööéáß.öæímãûL—6Öì 3JHym•ËÈùÓæä,¾8˜Û^\C¥£&“o%Ϊì©c–xœA„>iÝm1¼¼™Æâ/²÷›Qd;¼í’²eC,Šl8¨¹á­løwW²Ñ®!¿/dÚNƒ6%¶Ïç˶Šge—ÌÛ¸y…)ƒ´ËÃ?ÄŸ4Øíµë .çËÔí-/´Þd/›ˆbvaåo2 ¦7åãvðNåݱ½kâ¨dÔ­ôÛÍ>ûOÔ.&XÖÞ)Š«G4‹!hÝ—iû<«ÁÝ•äAª—Þ;³·µ¾¸ƒMÔoSOIå½âmãŠYb.wÈ»ƒ5¼¤Üp¼YEPEPEPEPEPW_ê‡ýtOýW3RÊGüTÿ‘º_úãò¢¨iºÿZ?ëšè"²eÿ‘ÓÃ_õÚãÿD=JÜ:¼cá!¬nšÓzj776ÿéåÀ6qG’vü4€ ´¹<,x{Á¶š­6¤š†¡ws,F"n]Á*IÂ"å°ˆ»ŽNFxÓòò¦gÉnn¤²øZ Júâ]Bù¬õ–k½4ù_g™„iìó6•2»ö¶ © Çwá k˜/ìßRÔSO¾K€lc‘8Þpþkƒ³{d‘¶»2‚Ù ò®Ù(VðŒnæê}[Q›TVF‹Sa– ‹"ªªˆÄDby‡Ì„þðóÂíÅ×<xútš~‰¨Ïö”3Ûêw—ÄT’I$ÉŒ[²¶âc„0ýìnèT¾¢€ (¢€ (¢€ (¢€ (¢€ (+¯õCþº'þ„+™©e#Æþ*ÈÝ/ýqùQT´Ý­õÍ?ôY2ÿÈéá¯úíqÿ¢¥n þ.»Öî> iú]˜xíZ<®Ö 8?}Ïû¸ý=ë£ÒnÆ—¨E¢j‘Ësp­, '¨9üqô4œ:’ØW\¶(k_t\ƒƒÏUÏ¡Àü…qöÞ Ô.¼ek¬êríû̳:ýÐ1Ðzý=ê}åRë`Ӕ߿ð×ÚôÏYý¯gü$þ+>FëXà韛ý^îÝqÛ5'o ê°Ã«À¶zÌ2ÛÞÆö%¥ò丹”ùo怬Ó.J°Êƒá­ yðÞÚáõQéðA/ Ý )ñ^åd ¾rÙdV¨F¢– 6íÍoÃ?Ú£_Íß“ý³¤&™þ«w“·Ïùúßëúq÷zóÀ«ðâ-OU–âæê×È™îL“-ˆûs,ðˌܗ ¢‰¾UÙÂÇó·&þ§ámGR[¡sªÚ«jv#NÔÌv,†—o’ §Ê}³¸,Æ@NÓ´`‚·¡éŸÙ6r[yÞvû»›ÛvãÎåÛŒž›ñžøÏ+F€ (¢€ (¢€ (¢€ (¢€"ºÿT?ë¢èB¹š–Rcǃ«[R^í£Ñß~Ÿ×Ȫ‘Tãvĸñ=•ž±c¨ÆöØÛEs.£u,1Ûm•Š  _p%•Ç*9Sê¹±/ˆô8tȵIu­:=>gòâ»k¸ÄR7?*¾pOÊÜØúWq™^Ïź͵üí©ÚÛ&›rö÷‚ââ46ì²´@¿Íò†d%sŒ‚>•ø²â[-&Ö¸‚õ ’;ÈçJËÜ€‚1k×<ù™íÈþñZäפžz¾CG,-<ñÅ"7pëñÆ6ºà·Z4_èzÂÙ%¾¥j—·ÖñÜǧÉqÚB¼b@ a‰ÎÞüsÒ€#oé âÒ¡¾±—ìö—77²¥Ú±ù/•úÆ9$cË?„‡ÅÚ½Ó-×RµtÕRSgr—˜¦hÞ41«nùœ´€û­é@ìµ]?P¸¹·°Ô-n¦³.æ('Wh[$mpTåX`úJ½@Q@Q@Q@×ú¡ÿ]ÿBÌÔ²‘ã?än—þ¸Çü¨ªÚn¿ÖúæŸú¬™ätð×ýv¸ÿÑR·‡C.†öš]Ì:$Éåš[O´¨u·r;xÈÈ,2wc=ÊžCðÅþ»qsï5ŽÞÛ¸'˜¼)Œo8Æ 0aó’À†Ü½A®œ4£F/Ëú_qÍ^3©%mŽ—YÐu{ÿÞ\"Y%”¿Ùž\†å̧ì·~{å<¼ ‡p>cʯ÷ŽÚú·…µi5›ëý*Xm¯.oíõ¼u{HÚÞÚ&Ì&6Ž|´”r †V9\ ËhÚi×}¬›uÔ&¼M—òÛ=ÚM$²´nñ¡h6<ŠC!mþ^PÄ ? k~ ­ ¼“Oóo”7RÏ,¤i8ddÜì~Ùî#$‡8Î77´ÍWð×Ù?±ÒÇSòô›=6_µÜ=®>ÏæaÆØäÎï4ämÚ9lñ“áÏ êö‰u ùpfÚê:tŸÚ2»¤²ýšÞÌå!ØU•š »¼Ï”–àíÁX·ð·ˆ¡ƒOµI,­áÑô–Ó`ž¹·k¾ØÀF<énÊYÙ ™\•»ÃžÕôdê­©infW¶“Sžä¤2¥¢³ùòG½ÜS„  ÃnxBãÃ×ÿiTqccö.?´nnZeÌya„%¸>R’ˆ¨€O›´ Š( Š( Š( ŠŠëýPÿ®‰ÿ¡ æjYHñ¿ŠŸò7Kÿ\cþTUí7_ëGýsOýVL¿ò:xkþ»\臩[‡B‡ŠéR‡íc€r䔲ç:ؾYk×N—ÖýüÍkû8Á[~¿qÚÝëvÚµ¦™pÓ¥Åá"ôYLNB»óBì ¶7;Kg§"´jÌŠ( Š( Š( Š( Š( ŠŠëýPÿ®‰ÿ¡ æjYHñ¿ŠŸò7Kÿ\cþTUí7_ëGýsOýVL¿ò:xkþ»\臩[‡BŸÄÿj€Õtû/´Â¶ß¿X™UÔ®Ib ²¸dü c¥fx‰Ôô« B+MJ¼Ûtsl>iñ»h8ÿxc t(ÉTTí¡ 4Z•eµ¿¯ÈìüK±¨ê–i¥éþLšdÒ]C{zéöiœÚÍ.ÌŸ~eÎUxVÁÎÜó:†5=;ûBâÃM½´ûÙ¯tËk¡c›ržzÌmqù‘:Ädq‘¸v. xÃÂ:¹Ò µ±¶žþêÚÒY-olâ³IF¡#3Ë3µÁÝ ´…|‚Nþ˜@Q@Q@Q@Q@Q@]ªõÑ?ô!\ÍK)7ñSþFéëŒÊŠ =¦ëýhÿ®iÿ ŠÉ—þGO ×kýõ+pècZø—ÄW-¦5ýåÐó-žñVÖ&2êeácÈ7ôçÒ·|[¨iú/…µ=OÂæÆÓQ ™-áŒIµ¦U%”Œÿxr:ƒÜW¢éÒx˜RŠëg¿tsQ©7äurêºt:¤Zdº…¬wó§™›N¢YŸ™S9#ån@ì}*íp…gjÚî“¢˜¿¶u[;ÎÏ•ö»”‹~1œn#8ÈÎ=EhÑ@CozÜB«tï$­ålePÁ<ÁÀù‹ju ã$ñ&Ÿ¤@©=÷ö½¤·‘ÏeíâOxìÎЪÂê©l'ÚÔ«ƒ±ó³ãQ<^(Ñ®–ëW³,o"{+O7L¤¶*Œ<™@#ís¯b ÊÑtÝrÏ÷¦dÔmÝôûUÓíæÇol ³ûPƒ³ ”2³0*|²˜³ã¶×®gé³êé7“Oal÷Op³Á ‰lï3?x¬¦+Åää<‘60À}@x‘í¾Ó~/§¸žîMº=—Û`I¤H¡„í¹‹›x̱Í"y™GYC6Ó–BK=zTñ-ó6¸.ì-.fÒ•n.aw|PÁÛ/ȶøV ìÚ@ "žx|c¤%ìÚÄz”ÚÍÜs+5ȳ’×ʺhGü{“±`8_› “ó¯B AEPEPEPEEuþ¨×DÿÐ…s5,¤xßÅOù¥ÿ®1ÿ**€ö›¯õ£þ¹§þ‚+&_ù<5ÿ]®?ôCԭá—à§êÞ.¹‘ôKxf…pñù [ɸ ¥YІå¹OÊxôé|~ðhÚ\¾&‚ÎÞ]SOE[yf @Wp„ž±é“ާ&*¬£+]þ§5 ?gÍk3«¢¨Ü( Š(  QiZt:¤ºœZ}¬wó§—-âÀ¢Y•Ÿ#å^ ì=*í ¼ñ\!’ RDÑ–ƒÊÅYr;†Ø‚(j(¢€ (¢€ (¢€"ºÿT?ë¢èB¹š–RÏö¤C쳦aý’î#9nýÇËœwtiÚÖƒ¦Íwª]\(ƒÊ“ìs†d³„eeÉI^pF: qTªºXŽxÚöZ~§/*už½6,ø¶çIOi7v°A¨kzTÒËuŠ$·Él,î]£æ ]ãνØVNƒâÍWŒók6Z¥–ökÛ¹­.á»Ýo'ž“)’8b å„Y‚„.vÉÞ‡HxÇÅ:C=Íí¾¨Ci.£%½åÔÅ9ffKDýÓ›†ˆ(¶4D†C». ô_ô­;RÒ,ŸQÓínÞ-RÆ8Ú⢽ä ê ^î84$—R°×¡Ð,EkpðÜÚIqªÚÚDOËç‚>Ù•ˆ×%¦ø¿W—ÃV—Zn¾šÕÅÆ—úŒ’ér´¶êÙh£Ä@$·ûÕ|yÁàƒ5®/¯µ„Þ*–þþ×QÙex]ÚÍç,‰ö|ó*ÅHCD 0啪mYø«D}V÷N¼,Š‘ùqˆ(mKNVÈ’I8#`©à€ ý3Å>)¹´_N[¹ÞÍg·.[OšK¸#1Khì÷,›&p¸màq)h±Ó÷—‡®‚Q@Q@×ú¡ÿ]ÿBÌÔ²‘ã?än—þ¸Çü¨ªÚn¿ÖúæŸú¬™ätð×ýv¸ÿÑR·†—ˆü/áëµßj’Ge%Ìë#ߎ7Rc ‡Ý!G<“íLµÑô˜,¬žÞ%%]›qmıb}É'Ž9¡ÇÞç~Ÿq’Œyܺš4UPT±·Pšù#ÅÄÑG ¸üÈ…Ê tàÈÿŸ°£N±·Ó4ûk (ü»kX’cÜ[j(FNIÀ­Z¢€ (¢€*éÖ6úfŸmae—mkA {‹mE(ÉÉ8u«TQ@Q@Q@]ªõÑ?ô!\ÍK)7ñSþFéëŒÊŠ =¦ëýhÿ®iÿ ŠÉ—þGO ×kýõ+pègêÚž¼om‰-”QÊZÝb…|¹ËÌðpx†yàõ𮫨}‡N‡BûEé[hâ/õ°ÆBÿ30ÚÀíùC÷Mtb-ESÛþæ¥w9sî\TÕ/Ÿ6Ôü_®é×WöÍýŸ+hÖ×—WŽ-äQv°Ek(Hǘ|’Vè®âdå7c KÏø‘56Ðìm!½Ôíæ˜Mqol¥;i2!’â=¿ñö«Ÿ5¿ÕçoÍò?Nñf³t$Ôå]=,#¾°²k(ÔË!71ÛÂådØÁZç K+ç²Ó¬5+KíA§Ù¦¡*ŸíÅÀ’3±PU3÷‡ïW‘üZ{w¤»Üž]Ê·žÔl {û»k;U§7W0\Ä¿,‘¡]œÍ;6ó× V?^´ÉÝZF÷2,6!™ÿÓ]‘DxC·+,G÷›?Ö ã µ¬Lº_—ùƒƒA…æ‰`7“D³ÜØK}¦dI<¡’¬›ü³)8V$“´í;ŠÍ­xRÞË\ÕmàÖ,ÓO°º6æêq1Øå¤ ‹%öÆÄ•Rœ}î@¥íýíõ÷‡.„3ø;P¶’Þ ™í"»¹ó„VžvéYâiQ“ Ì^-‹ÏÎΡsómƒHмýBÓïäØš¤°oX›E’m|¬W:‚®§½?nšm/r}KF¶’ö;-&&èÄdX›V†ûí ¡@¡øc´œ·rT1má9®#‹ËÕtã5ÅÓYÛ@¯#‰Õc%• u•Wq`¤ä†+óSu¹Vºü­ù‡-ö-^øPÏsh,f¶´pZGi Í!k«—¶Ý…`¤´ËË•_œ`àGa໫›„´ûM›]\ÚÛ\D«pt³Én¨Ò‡þ{ãnAKtÛ¿5‰VÔ|š•G…ät0êvéÁ]¥ÔÎDTƬ¥LbBs4C„#÷ƒžn·‚¬Fø¡¢Û=Ô3~ú x•%]q¸ÆyW×[î—R§=9+tðÝ&V’gÔ”W„v…Q@×ú¡ÿ]ÿBÌÔ²‘ã?än—þ¸Çü¨ªÚn¿ÖúæŸú¬™ätð×ýv¸ÿÑR·‡«ü1ÕÒñ­­í$¾´dE¹O%ÖH•HPò|˜9Á'hçæ„¿ 9¿Ò4ý6ëÃw4¿7lÉ 2Kž>vÉݵ` ¸t Ü™šmÇãQ»¿>¸½ûj1íƒx¶¸Î^!“×Ê#paåä11š¯m†µ¹¿>¿ 䩨µi¡xŠÒ-I%ðXe³hÖ¥1»‰‘Ë;ù¾amÛ_Ùû̳—㸦ódð›Jö²ùÖ$ÂçìNˆL{_çÂÛF™¿;¯™óÏ´¡¯4ÿ¯¸9'ØŽ-Ç6:oöuŸ…¦·¶E›ÎHÖYÎÐK HC;û<Ìl )â}ÆRÏy%÷ƒÒܰšî&Žm³\!›÷ÿ$€ï?½Bï\/Ì™=¦÷ç×Óþ¹'ØeLJÑmt·1°“ylÅcU;‹j¨?w`y3J®iÍùÿýNÄ’øcÅ–óý£Oð@Óî!W 5ªÎì–ù×|®7…#ûêGÌc5 šGŠí4è> oí[éïuÂ@û#âT)bÖÎÛJ”æ0«µÕLÊ­[ßþ¾àPŸbÒüw ‰åð›M-†Æ³ÂäÛIK˜_ÄZ¡ÃRUp1 ž‘ãÝ;TmB? ÊÓ$Ð0³.ÛfFB0Ù$›Aœw }ôÉí0ßÍý}ÁÉS°º'†¼[c麆îßJ ;\¢ÚšPÁNÜ,¨Hh„me=9`ê­«£xoÄG↙©ÿÂ?yccÐÀRG~VãûÌ…"p]°A2]óRµÍinŸÞþ_×b£ ]]_yïÔW–tQ@×ú¡ÿ]ÿBÌÔ²‘ã?än—þ¸Çü¨ªÚn¿ÖúæŸú¬™ätð×ýv¸ÿÑR·‡yEQ!EPEPEPEPEPEPW_ê‡ýtOýW3RÊGüTÿ‘º_úãò¢¨iºÿZ?ëšè"²eÿ‘ÓÃ_õÚãÿD=JÜ:åD…Q@Q@Q@Q@Q@Q@]ªõÑ?ô!\ÍK)7ñSþFéëŒÊŠ =¦ëýhÿ®iÿ ŠÉ—þGO ×kýõ+pèw”UPEPEPEPEPEPEEuþ¨×DÿÐ…s5,¤xßÅOù¥ÿ®1ÿ**€ö›¯õ£þ¹§þ‚+&_ù<5ÿ]®?ôCԭáÞQTHQ@Q@Q@Q@Q@Q@×ú¡ÿ]ÿBÌÔ²‘ã?än—þ¸Çü¨ªÚn¿ÖúæŸú¬™ätð×ýv¸ÿÑR·‡yEQ!EPEPEPEPEPEPW_ê‡ýtOýW3RÊGüTÿ‘º_úãò¢¨iºÿZ?ëšè"ª‹HŸV±Ô$•ÕìK´h¨bèPç‘Àþ8ôæ@ÛþÖÿkÿ ÿötkµÿû:w ö·û_ùÿ³£û[ý¯üƒÿÙÑp°kµÿû:?µ¿ÚÿÈ?ý ö·û_ùÿ³£û[ý¯üƒÿÙÑp°kµÿû:?µ¿ÚÿÈ?ý ö·û_ùÿ³£û[ý¯üƒÿÙÑp°kµÿû:?µ¿ÚÿÈ?ý ö·û_ùÿ³£û[ý¯üƒÿÙÑp°kµÿû:?µ¿ÚÿÈ?ý ö·û_ùÿ³£û[ý¯üƒÿÙÑp°kµÿû:?µ¿ÚÿÈ?ý ö·û_ùÿ³£û[ý¯üƒÿÙÑp°kµÿû:?µ¿ÚÿÈ?ý mM_Øí â,½íYt˜#Æþ*ÈÝ/ýqùQT´Ý­õÍ?ôQT ( Š( Š( Š( Š( Š( Š( Šñ¿ŠŸò7Kÿ\cþTUˆö›¯õ£þ¹§þ‚**…Q@Q@Q@Q@Q@Q@Q@7ñSþFéëŒÊбÓuþ´×4ÿÐEEP0¢€ (¢€ ÇžmVë^»²°½²³‚ÖÖÞbg±{†v•æ¦@^´'Ù5ÿúi¿ø$“ÿ’¨û&¿ÿAÍ7ÿ’òU=>ɯÿÐsMÿÁ$Ÿü•GÙ5ÿúi¿ø$“ÿ’¨Ðìšÿý4ßüIÿÉT}“_ÿ æ›ÿ‚I?ù*>ɯÿÐsMÿÁ$Ÿü•GÙ5ÿúi¿ø$“ÿ’¨Ð jÚÖu¤,—Ú}êßêÚº.šð•Fp¬C}¡¹ù¸ùúýŒK’òH°Ê +×>ÇÒ€ ÖÿóÊ_ûú?øš7[ÿÏ)ïèÿâin·ÿžRÿßÑÿÄѺßþyKÿGÿ@ëùå/ýýüM­ÿ甿÷ôñ4n·ÿžRÿßÑÿÄѺßþyKÿGÿ@þ$Ô“JЯ/ žX",¡äùwtÀä{qøUºñ¿ŠŸò7Kÿ\cþTUˆö›¯õ£þ¹§þ‚**…Q@V]üzÏýxXèËÊÔ¢€ Ã/¨jº– –šƒéë§N°"$I"Îæ(åÝ&ῼUÚ… w|ÃhG…|K}â=FhCýŠ/ô{Á¸+1‰íàÃÇ͇s½Èʇ@. vtÀ(¤ñ3þ?¼/ÿa›ýwkÿ’×DþML¨¤7ºÆ¥¨C§s¦C§N¶àZ¤LÒ±Š9 1‘¡$œ€´5¯.—wxŸbûM¼1Naž&—l’Å ÈÈÌbõn§k»9_½µbOßCv4ÉôÛaªÊшcKÆh ºÌÀ´†0Êqo/;9äíañUÂë£M:DÒyRÅou%ºÍ ŽWTo•„[ (‘Iftl;zn,‡ƒ¦–ãÂ:,óÈòÍ.ŸÉ$ŒYŒjI$õ$÷­z@aøëþEKþ¸ÿQ[”Àñ¿ŠŸò7Kÿ\cþTUö›¯õ£þ¹§þ‚**…Q@V<Ãoâaç•"Sc§€ÎÁFwÞzÐïí+ùý¶ÿ¿Ëþ4iXÏí·ýþ_ñ§`í+ùý¶ÿ¿Ëþ5Ÿ¨Ûh:”ë5ÝÄ,Ûv8K‹2d’*°/-ò¸#æn>c“PÑèm4“í¼Ù.V츸à Už>E @àŒƒÇ7´¬?çöÛþÿ/øÑ¨ö•‡üþÛßåÿ?´¬?çöÛþÿ/øÑ`80\_xgìóÇ.ÝfÛ>[†ÇïSÒ½ãÒOúèŸÉ¨*)Ÿ¨è¶ZŒë<ÿiŽ`» –·rÛ³($€Æ6]Àpq¸ã9«yáMöi$¹·™ÄžfèEÜËdFGam˜;䜱9ÉÍZ¾ÑtûùäšâóÝcO:)ž7P…öíe ©ýìƒ*A!ˆ9S¦‹˜§1LÏǹ•’F@¼ˆ[lŽ6®o•N~Q€ ¶6XXÛÙÚ'—omÃd¨£dòxêjÃñ×üŠ:—ýqþ¢·)ã?än—þ¸Çü¨ªí7_ëGýsOýTU (¢€ (¬=wÁú½|·š¥¤’Ü,Bés, $„`,:Ïÿ…káOúÏÿƒ þ9Gü+_ Ð>ü\ñÊw`ð­|)ÿ@ùÿðaqÿÇ(ÿ…káOúÏÿƒ þ9EØü+_ Ð>ü\ñÊ?áZøSþóÿàÂãÿŽQvÿ ןôŸÿürøV¾ÿ |ÿø0¸ÿã”]5¯Ãï Ú]Ás„¢[yVhË^ÎÀ:Êp\ƒ‚æ¶µ=.×T#½²!Ü'xÆ}HR3øôÉõ4\ ÿøDt_ù÷Ÿÿ&ÿâèÿ„GEÿŸyÿð2oþ.‹°øDt_ù÷Ÿÿ&ÿâèÿ„GEÿŸyÿð2oþ.‹°øDt_ù÷Ÿÿ&ÿâèÿ„GEÿŸyÿð2oþ.‹°øDt_ù÷Ÿÿ&ÿâèÿ„GEÿŸyÿð2oþ.‹°¼¢:•ki™HÁòbÿ¾ëv‹ã?än—þ¸Çü¨ªé×^1ð÷«[ªªH$Œ…óŽzT?ð˜ø{þ‚°~¿áSf0ÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý‹0øL|=ÿAX?_ð£þÐV×ü(³ÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý‹0øL|=ÿAX?_ð£þÐV×ü(³ÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý‹0øL|=ÿAX?_ð£þÐV×ü(³ÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý‹0øL|=ÿAX?_ð£þÐV×ü(³ÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý‹0øL|=ÿAX?_ð£þÐV×ü(³ÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý‹0øL|=ÿAX?_ð£þÐV×ü(³ÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý‹0øL|=ÿAX?_ð£þÐV×ü(³Ì~!ÝÛê~%’çO¹ŽhLH7¡à9¢¬GÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/select-perspective.png000066400000000000000000000273431203611042400327720ustar00rootroot00000000000000‰PNG  IHDR÷62-“¡ pHYsÄÄ•+tIMEÕ ÆTŠtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíyxEúÇß>gr’ƒ[n’@[Eñ@dÅ\ð`aYA…UYe9Dåðç*‚H¸„åHaA{îîúýÑI3ÌÑ™ééÉÑy?Ï<óôTW½õöÌ·ß©ª®ê¦!àÄĉï‚Ôr–-›ãü‘’U.é»UËæ‘11±Õà‚L~~^IIñŸç³ÁIëå*Ÿ8ñ{ï锘ԵcÇ;€a˜jtAT#œ:uqßÞ#ÇOü" "„HOíÛ½m›Æ¦2³Íf/3 &“¹ºFÿ axž ùãì•Ý;IBg eËf’Äs¯pìpmIDATæåå[l6[qqYu;Œ jˆŒ ãy>6ÆØ¶Mc€îÅ%…@M˜0+5%¥Wï{òòJ®_/(+-3›íÕí*‚¨'$„ ‹ŽÈÌ8±{Ï6®Ÿ—W|éâõ‚ áHàµ˭֯ö·ÔŸŽiÑ iI‰­¤ÄfµØHÃÆõ€•v—••™Ív£‘רYñŸœü+­Ö¯~rÂ@Ò¢£Y Ôˇ)× š‚"`/åS®ýgùêÏNhÓÌf{YYyÔf€7ðEWAjq«–ÑÃTdãÙ‚ÕæKæ·«0tD´UË™és¥Ä¢B{d´äXnušÆ]IDATXiŽ ŽÏâ7‚ÉBl„3¹œB{¤‘8 „¢8¸lð&WlÄn±P+ÈJ¶:¬N*gâ^S=Š«/pÄ&”XágnæÛ»M0„È8¶AÃÐ0®ª©sX­"q8ˆ`ba䜅ð3¦†r8D‘¢ä§ç}ë&O,V›]¤<‰™õVM‘oX? x.ûZÙé+Å×­Äf¬6[^±ýìEkýX¶Ã]1 †óH‘º‹`sMì6ÊnvlÏ΀þÍ›¬;ÆQ‘ÁðÌÊÕÒ®o½¢ ¢àÑ @Ó%µêVRß`à V£Ñ^h7†ðU2ËIDATqV›Ýf³Y¬6‹Õf6[Ïž)*-5'§´ªWÏPˆT”@VVzÖþôŸ˜8ajjê…#Ù²eýéÓ¿LŸ>[“ïeÔý¥û»öèÚõÁ{îéï—gZ³ví*xüñgµ5[kÛš„EQ„ (Š”Œ`p€À” {{vNÿæM¾xü1é㸵ßI›ÃÊ 0vh†@(ˆ’¶Y )Ц)†e(©ó]DDÑq㦥”,»ÙdµÚlV«Íl±™-³Ùj²XO*Šoš˜Ô@R9¡6mZ¿jÕÒÿ¬þÁa·ý{ù"#Ï&&÷÷vˆ«×™c´vIDAT,€¨Pc±Íú#G=rèù ¯zÜ»=-Ãd2}·á?“_zféâ51 ùn9Z9räà‘#‡&TxKÓ4ÏÐQ¡ÆRÙªà RiåápØía¥@ s¦¾Úä£E ý‘‘ã¾_'Kd^¶ì=W|$לí`ò !¡a¥æzQŽ˜hÏ6nTdŒfY†aY†e–eYzà a¾w7a(‘¡l4Øi`XfVÆðá©Ã‡§îÏÊ`XFzÉîyËpêôñeË žºlù¢ÜkW–>òda~þüs†œ:>ì‘'š4i;|0çã.‹ 7i4KQIÉ9W·o_º{†ãÇümÆÔ9³?˜òâ´L+ÊÏoѬåÖmû L€íi ‚Àyè=3 k2•@r¯¾@QûsêIDATöíQ¨½U“æÚ´ç^ùåÒƒ÷møîÇïÖ}—{56&Fþ ˜2éµþ}Nùë¤ø˜¸¤”¾å‡óáÒÈÐðrƒ)};ò·SæÌyÊä¿þ¸mSQþw4ßúã¾A+¼%òG^$½z¥~ûÍê?ûõ„ijg€äÉY{w»[v?@ÔÎ ETô耔ËH>ÑA(ê¶sŽâý›7Y>d¨ó^ÑQž™)o_E(Fn—S Ås,Š’æáR ä`ÃFá Ä0‘ˆ¢(¢ ‚( Aþ(Š¢(Šœ£ E‘-[̘1{ó¦–­øtóÖ–/[ÓºM»½™™)QIDAT» CÛöLééÿí“Úrо3díO€»tgxvȈ‘Ä!EQÌ­³‘ 3z!Ö6|Ó³g¯º>Èp¬rí­Z¶fB @\\<”?7a²hwP í\W§ÎËËöé·7c7thÓá–Á>ý²²2àÁÎ2<7ä‘‘Ä.}»·á·yÛ¾}‡ž=“¶íØÔ³WïÛ7÷ì‘Ôªeë5ß~énÙù‹ò ©¥2¿%jIäU~(»8Ž R4LÚ¶I–8T4]–|h"»xž)ïÈH2gAj±p”s«H੤‚#Þü)§Ðd±™Í“Ùb ˜Ë=IDAT²XMf«Ùl±X­«Ýbµ½01™g[ÈKÍs.:êégÆÆ7ˆŸûî¬/¿X:ÿ½²²2 ÿÐÞR¶‡öƒ(rÜ­Ù3lÚô½ô‘7rœë͹¥ÈF^Ÿ>sÄÐG#""x#_ií¼€ñã_BžyîñéÓg&$öŽŽ®ïl–eÙò²ñ`P ›ÒÊ½å ¼TÀÅ1öö–e{üé©S&íÙµ#++sÁ{ÿb86+k¯»eÖó¹|Tí æNNSÔíDAtP _ܾE–ø¹ Z/_BÿwÿÁ"…ò_žå俚®P9CòTyo(Ž&á‚4 ;°pVIDAT—Wœ_ 5T¬å «ÍbµÙ¬ŽÝ[õIíÈñly燊‚Š/œ 2tÚ/ÚIIÉ{÷¦oOË@° ¼ScÃc)xOÍo鲑ˆŽç(šª´vi»A|ÜŒ³ô4ù•ç³²2.XDÑ·:už€Ý»ÇÃqÈÞJ9ÝqI7ðÌ=:À»ï½mZ´5†ß”–öÆÌ©£F=™Øc‚TêÕW_ËÈØÓhïS§þð! †ÛfVJvÜkwÉŸ˜˜ôÈ#À¤‰/¦$ö£iÚP!ÊO–|¸yÛÆ÷æ-ì|w·°ˆÐÄ„DWƒQJtòöy⡆W_™ZîíÉ3·9Ésð@·”±zâIDATnpWûŽõ㣌Þ£ec¨ÁãaÞF­ 它‡ÎÍtp "™Ó½¼ývê™±.¥O=3¶ãš•0§{o‡H„вž«Ù¦» ¤U¯O%US~ªük#n.T\ᔑ:Ë3ƒ %Eeù× Â"B#£ÂCÃC¤Œæ2KQAIY‰)2:¢~\=i ¤ÝfÏ¿^i 1xÌ`.³”–˜Š JœmVÛ¥?¯@ëÍûܯÙî‰ µ»ä—ÍFÇÕ«Á°L›6-`{ZFdtDqAIƒ¦±á‘a· Þt2ÈVx[ìä-Ë€ÍRáí]ÍàÜélyvGö9ÍÛ6aØø¨IDAT+Q-WB-í}8 DÞÞ9tä-‹v;MÓÃÒ•Ã""8DQ¤9î÷ Wú¦}'붸°èƒ_H½OÊÀ³A¹¼FŠT,~®¨Eø-ÝSP~éŠPEˆÔ&§bŒoãâ Ïsõ¢#ÜÃÂC•3Ô‹ŽhrG—Ä÷¶q?Z‰ Æ]ò{3 MîhàêCW/ÊÍÛ(®^”›·Ümf]+å\+õh¹2j¥Êåè(µ(Ò@”Y:Dš¹¤EÑ,Ò`@jJáשÅÂÇs·êÈ[êüJAž¢œÏ8yîÁmßqùègmDáËäùÊ:ª‘ZúË×k`ªÖIDATöÉ-Y•7 r¯ÛÆóv Àáã¥kJ*†ò@Ñ €Ü.ç8Fª±bœd­©}¡ä UÑ; Èm‘¾üT¨•¡…¸‰%?/ïç¬SàeÔ²&Q+u.ÿÿKŸ()n0MžºxAîõh :„Óäé,ÇJú%ÜšÇUŸÅ…B^x0éžêv¡Î1¼_ç`zèâr U10Š!Ô4yúð~ÅU±îÓÀs9—/Ígñ›½ï‚Þ_ª(h±ZÅò*ŠßÎ\×Ä9©Q$8«üìgΟ¿Q­þ ˆÆ´l—ÐónTÎrlTtlÁÑ_g¼õ|u;† Ú0oþœÝ-§IDATg»t®Bh9—Aj&¨rDÿ Êýƒ*GôªÑ?¨rDÿ Êýƒ*GôªÑ?¨rDÿøº8`×îÝAõAüeܸ1Ù|šKëǘ“'öªõA4föìY¾göo¡×‡æ§3Š /ùžÛåˆþQ¿hwï7ÝlÏÇŠQ0ÛíÅö¨û;$=qXCçDTª|Ǫ–©ÂÅÎ=™#‰ù†½è¨­à"}ñÒŽU-û={^[$@T¶Xøh ³KzÑ®+»„ £2–^b®†\‰îaä-û„Â\ó•ßʲ ˜_Š#£#µõAGm»\„È»Ûó±Ýcg:êlh2IDATPLèE:ììÂgœ«¡âÖñHPP«òÛ@n=Œ¢²[™QÔ­ûãH÷(’]yÛ%·²*=÷â•‹3˜rþ¨¡Ÿx&¨F¥ÊiIåòÝn}»OŸ/¿“r÷SB´UO´ˆWJ•S|þ½àÀ‰Š4 5áä}\2¿öþ.f(’çÂ_K——¿;òG9§Ç¿ ÷\2+ü)UZ©òѹD ñr˜4{{¥y–Îöú¼OpR˜,çÒ—Ì£àÜU¥ââ‚YOTÿ=žÊ)Wª|t•ºWQ9’HÓT®%"ö|l~ÏÇæ@ÏÇæKåDˆRtE4¡IDAT6¿ ¸ÿfT.íu ¿jQ!gJÅ=ê^öß9Eõ_ÆæÀQË)ˆøÀðwúáoÒ¶Õæ°3œü¾Ól´}B±‡6 ¨Ò{ûÑ1êç±””4´3œ­ä‚ᤗ­äHïû7Íî–<ÖÎp%% ¥üc3¨ŠsÞLùžÑ·_n»7©‘ªDe,¹§qq¶Ù$R»WÝÝs<ü´o…´ýÓ¾U&HÀ™DªØzëú¨rÇKÂÇŽ”,2íx-cçM9›7³>âm´Ô½›ëÍ¿*Åó§RTªüÁ'öÏßo<îrïÉ)KôIDATñVVÁ”r‘Jû¯S¼ù\iº¼­l åîõc,æ2Ó¸§&jè ¢Õ;uõ*ß±a™†~hHÕüÒ¶é5ô$u®¢@ô*ï1jXàF$xh r«Å!o÷52pƒ¢-ªÌuì33óðÐC[öìj4~Ý¥Â2΢F4' 9‰CG ‘~øÂµ“?úë÷sÖÚì¦"S^§)3MîÖ‹5FHçàìP¤úPÙ.ï,B˜¦IDAT1j¤ÔÑœ—Üí¹E?¯Ÿ½6ÜXçB9†_ø\«·ö€3e‰K(L6Dà¡2–øvtÖÏl.%mSm‚©ÔÛNoº¿ñ½"8fŽ{}õ¡¡#†z+®<£ÃãJy—û´Düg@” hŒåèÆv«UIQY^ain·Æ÷®ÿy­Õa±Š6A€–=»Þ3¬—²yÆ•ËD%åï\*ÿ‘:B #‰œÁðÏ~ÝŸ^p8¿$÷¦ùFÂ=¾ÚóÙaEX4ý3» ¬lAÝñ€U¢“>9Wd¾Yd-Lí–ôÕö4A¥ËÑ[”-'tA<ÐK—Q%b?-IDATƒOlÜÒèáËúE( C/~>O¡ ÇáBCD‚D@*wBaŒ°hȃ Ðétïhú»½‚TJ@*w†3„)輄(/Vð–ˆëßÑFå]F þu[¦&¦|× ¾£Ê]®þT(nÄwp¢4k—Kl\ðÔÕËù:=4lü4m-#ˆj´Œå‹Ç÷nÝôŽuнxpñ³=5´Œ  ™Êÿ»ôÙ'Ç'e>uôh^D«Æ­4˜:èN­Œ#H h¦r˯¶‚“ˆÿåì‰s‹ëEGßÛ¬ùó¦keAT£²]~jcç‡;uý9ëབ°©‰Ÿ01à>IDATµà@÷¦÷ÝÙ$æÇý´pAB¥ÊKJ¨îOí¶úº ?mΖnÂéúÙÙõÞ˜`˜ûÑñRºu1¹á\Jù6n•^àÄÑCD*[,7)¡à¹y”ÜܶãñË9@ ÔÃm;.Ù»rç‹kO,_<1z@òè•Ûñ&,ó¸¯Ãð¨ZÙ+U-jZ¨QùõâÂ¥ç”<Ñrâèùÿ|q0¶¡K·è”)¾Øñ¸œÙ%^ªnÞ(j IDATÄVSBÊ Iã,¡¤`N¨‚lqw×v°có€=• Ý)"w…¬ÉY„Ô"ÔŒ—O2êJa©ÑÀ ¬ÑÈå•N2ªàfé¯'.ÿzâ2Ã…ÌÌWçM0¾¨cDM,5q<,ÜüíÕÂÂFQQÓ†ŒêXÒsá¿¶ÊZµŽv/Ué&ÜQÈã|>(?¬Âã´un!§»wR‘Z„Ê‘ÄWÇKZ€ƒ™g¿ø¿}õbBå½v«è^ÄÇE¾<šB…q×p8“ûâR“Ñ`N¢Ùt©(ßÔ¨I„ô*Ê7 ~´qàf+Å— Á@^{Ñ`u³ÔÑüîÿ.åç•ÆÄß ®™IDAT†Ozµƒc,S•²C‰×^´Yß2 %Ňr©R¹ucùŠ8ð‰î{w8øêŠÿumýÕŒ'©AD}»|Æ+Óà¾á¾`ÆØ Ú¹„ £&–Oûzx$Ï ~{ÊA(Ì-üí·dI¶½2¬°pÙ?4wADʳrZõ¸¯ë F0XÂp€â#Oþwß{‡ Z ¦Årâ¿“Jýh±€ÅÑFG †´0’öÍàÓw’µvA4@eï3¯Ä`±X:E1ÜÍCׯžnÔôé6SûN÷ Œ¬å­”†«(‚tg9×%*Ußñ·Ì“m¸x%/§ßÃC³«IDAT¯ð<ߦ}Âõë×3v®èÝw|ÚcGÏJ9ƒ·ŠÂ÷Ù³*l"zBåËwKOÛöü¹ß[õ:g÷GëÙJâââ›¶Jú娶†Ñ‘'/m;zµÒUòGç]ó( Ï,W6îqCÎ)¿»×ë1©4^NÕO bþ½Ñ욟Ö@¿V)!¡Ñ—/•ö¾¯ÕŽ÷»TZ<ÀUWUºöÇõ¼ìu)Ž“uk5*cùú_¶^2_,..²Øéã—s:FE/Ù»Òbµ³\¸F\B£OPë:FýºÏ¯~÷Èã£6¯=”ôðZLâù}éÿk{íÊÍö¼³(¼åÃîóÑ]–¢ÊuL@ë>‹­ßøÐg‡×¶Ï½;6¾Á}]ºóÅç7,üûÙ_N<7åM—RÚ®¢p7è­ ò9ãc6< j5­û<[üÇ¢ýgînСQ«¦Þ™Èñ|d½”?:—¾ýs¡k»ŠÂße.)ÞI(¬öÇÞgíEƒuŸ;~ÿÙ 7cââ¥ëAÏMy³urÿséz»ù­ÜÆ1õZ‡6ë>åÕqÏMyÜZ,µwíEƒuŸRÃQ©òÑ_NÉD"!IDAT-Ík¿êÙ½åÁUH AM»üñ/5ªO¹¿cL$y|ÅdÍ}BmQ£òã9çÌVSÆŸçìvËñœ?5÷ A´EÊÛÅ4¹–_Ú5æä·‹i¢¹O¢-jT¾é¥„ ßsþ*ÇDmzi…æ>ék¯TÎÖZ7ié]¾¸Xú8úË)}?ýìª×”Ki8s•ºM ºDQê îÇòøŠ—šÇñýÚw<–{ýñ“׎_üÕéÁ^EQ57.Ä1r}ʧ¼ñ.=Ù<ãÏs¡w<ç‚´ëäÅ¢ >‹Â£5÷Iáò^÷ëó¾(Ø›.“ÎýÝ[éQ#ÚÊ?ñ:äIDAT~ÿopîÓñ×òKÛÕú5¯@êŒVñ³(|¯BYRÞþd¼~§¸¸ìu¯5]õhp7PÕÑWQ¸à±x¥•ºXð6ݽ”s彚¸‚6÷I\7i©¿E\¤¬:¿¨S’kê°·Z3ÑFå¾\ð÷…WQøU\]EÁˆ¸Á[;‚HhÐbññ‚¿ËÌUyšBüó%2 •úÛ¨ðVJÙÉÀ œ`±¸£í* {ºz•T^N¡lÖ÷·1› Œ± H¢:ÇX4ǯÿšCmñ³ö¢>–K\BÅ ‚TÄr©á Êýƒ*Gô6*óþÏcÞÿYS¢92cË=IDAT¨|Ìû?·Œ%-c‰¿B¯ùJj¾‡ˆ/hs…?ÔÈR@ÄÌ(è5ÕÃИºÉLíøxS¸+ª2ðªP° TåRüŽ ã( Ì £7€7­krµÏ—‚xYqF¥ÊåÆÉ ®õ.]/Œ ç Pf"Z)€èæÃÛwMܳ€  eZ%¡Wañx¹ŒïcÀ®t­ƒ·z½M=÷æžûüaoë6Îeõ+`{Ô´ya¼­ÛPHA‚J•ŸÉ-ÿU®Þ4û-§{§f¥ef1ï@Q6™ÍÊ2IDATÉÿ‰äŸÝ±êm0xÎL)³·HY)ª z4"›ò(DÕö}¬©zTª|Û‚¾ÒFâä4 S;(+3` çŽm?wlûðù¾Î¬MB_ z Á8]íÚûÜ·xh·qëŠÊì@ˆÙlÛ¸øuxtAMù]=6N\¦›WÚz ª3H ÍHbq™ªôMÜóàžâ/î-âÃÓ)¼åñ˜îc#ʯzñ¨üð#»['m(dSXР°Ë]îîÝ5'ܪX´á‹‡Þrú²CÁ>¢!ÚÄre}«@“î&‚Hh£rÍ©áâ®áî!.àœDDÿ¨Œå[— rIôÂÖ€A Ó„cIDAT ¾ÅÒwü&yû_Þºd ©™¨l±8MD ˆ>,¦yÓiÿ¢­s¢ *UnwÐ![öþ¾a×)A$|X ÓºÙëÿ5T[ÿ$pT¶Xì-Ò¯G; @¡~§—€ ohé‚hJ•[DF`ס36»Ãb±w½«ÉµÏÊg¶Ü=àŸ‹ÔºÅ ˆnP©r›DHîÖÂŒÌê'šMø>GÚµü‘&ò¶ ¸¸©ÔÆrqˆdß‘³÷µkxøï‰VÌ€›‹¡ÄråÌÞ£ûqZG"M XxJÙT¥SD*]ýà2V¹8RQËFáÁûÚD‡kEIDAT³§õ»Ô‡ÆÍîuëaÍ[¦Ü5øãÓÞìx“¬Be;êŠ#úF­Ê´ ’ŸŽŸ»¯]C»@ÀZ 4€@) ¥@`nÓœ´á"Dã*ä¨1 êÇXDBÝß©uLë°°€(–K–ë›Q›Ýu žû<[÷ÎDÅø¨T¹ƒÐ+>šýº5²9D(ÍsÚIùÝæ]Êz[»àœøsw°ÅRgQ©ò¹ó¾”·ÏmüÊ €®·¤j©éàpxžÕ-iÎ}‘ËG÷ Ê'€K~_1 ºGƒ™·6€µìVü¦(pÒ“M¸žKù²ÈÀÇ¿>"õIÈ6IDATu T>aÍÙÅO´ò¶wò7^‚‚6«(PÊHMWQ úG},ß´%=ôÔHSÇuÆÓ[îZ {†@Êæ‡'{Ì©º$@<þ"u •±|Ó–ôq/›:®Ô÷¢å®µ}ïþ R6' cQÐH D¥Ê#ÎÙvã“þ-ßݺóŽ Gvž|¾W“·Ó™•–oûk낎ÊKIËÕ÷åŽÜëú'~½mßS Ñ2s–wÝßÿȨíÚú‡ £2– é9Öp]ÿn·ï{j`‘ýË{5yûHÂv~ÇcÚúWG:$¥º]Ð3*c9“üe¯Ø™ÛÿcPß‹[wví{÷ò'ç& ›7•GIDATcÓû}§PÊù·LÛ¼gè”´Í{ä]RŠ´Ë9Ñ[quž{sÌÅŸ@L9ÔÐOMÜ«›¨T9É|6³×ªþ÷oܺsØÀÄÃÛöMèÕäíôœ•†#apžÇ"šüHÞN­ÌÖ@kÁ6[P©rª×ª?2ç¼}ë½×Ü?2ç¶í·îÃ7ú´íõö™såw¿,«ˆ©rø”Jy ù.y\RäÿLÜÍÊ9Ýÿ…”Ýóø—åâ·cq©TùèÜ " ~¼|ï³m{­ê“šð¶ò»,tç_Hú%<ŠÆ_< Î]U )ÎxÔ®ó9à‹Ÿ¾¦rEÊ•*]¥îÕAÔªþIÕµ ¾ úo§Ž ^åN–âD¥ïU.ðZƪIDATr˜ y<Ú *ØbAôªÑ?¨rDÿ ÊýS·zŸ~-£BtCRùkSž¯nª<«%êÊ=®ÿÕ1uð¬öF]Qyí®Vwq¨ `ïÑ?¨rDÿ Êýƒ*GôªÑ?¨rDÿ Êýƒ*GôªÑ?¨rDÿÜv…ÞüϪË ·TžÚ'©ý@àQ®òGM­^?$xP&̪n$¸ü?TƒtpäÜÛIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/set-commit-properties.png000066400000000000000000000240461203611042400334340ustar00rootroot00000000000000‰PNG  IHDRnöà— pHYsÄÄ•+tIMEÕ  ,W:tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝ{|å½?ðï3·ÝÜ „‚)¹qQÛþ^õ÷;Z  VÔ¶4j­—ccE«ÇªýN+õ œþœS¥õŠw}µÞJ[µ§FAižŸþІK¸PP"ìuæùý1»“Éîìdg³›Í“|Þ¯¼òÚ}æ™gžÙÉ|òÌìì,㜓Íu×ÝAÃÀï°?eVZ™9UW;¹¤¤tìØqyèuvíîîÚ³w?Ù2+–V×]wÇÿøÊ—›þçé§‘ˆdYÎcG`”Óuˆ¶oÿÛÛ›¶½ÿÁÿ3‹qÎͨj>÷¬) {{áp¤' ÷öòÝa ŠvnIDAT dMS ‹ víþ¸íO[ÍÀRˆ¨¶¶ÚŒªÃŸ=Ú ‡Ã]]=ùî0Œ^¥¥Eš¦ëŸÒ0‘謮îãDÄ/^Öaâ"RÌÉ===@ÄïײÜY­u~\·îéË_Àkª¢Õc©ŒÈˆ]‚ÀˆHŒNr “í;òìÚ§?ûûÅ“ÆN$¢@ ÒÓE)D¤ù´Ç‚x²¨ò©µóÌè=¤1øxIDAT÷÷ë¡p:³ÈíŸÑü3Ö?µV^ò3³ðÄñHi…Ÿ¬±U(’T–›>À(¥÷y˜«~¿zèx¤ÔÏ}jT"Θªó„ZoXí Q Y4DDV"…¢!"[ZÉ2O^RSÇè*ëÝ!úïŸw†õHX÷ðÒJ¥jBAa‘:T« B … r½WÖõE+þˆ~µôV.³hÔ0³\¾ò"úÍ×éÁP8b0Ý §PRR-¦ÊÐ&Œ)'Mݤçû> ñpX…ÃG»"»ÿ3N9õ´±&çrM@lz8J„Y$}mÿ!"š7yÒ3W_Wˆ]ùäÓæ¤Ï N2IDATnû1ºÁ9ºck 1FD$IŒˆ™g½ü!>ÆçS‹}!¿?r<â/RCáH8†ÂÁP8íÞyâäÉÀ9sêÊÊüĈqâæ¬œ¶lysËæ7ÿkÛ;×-¾µ¹ùü!xE†Æó/Y*+ôw‡®GsŸ:ØEg½E¶m{wÛ¶­‹¶ÔæÍo<óÌÚ§}¡j|':™ƒÕw!I’&Kå…~Ç妞ê!ÿýôw6=õÔCDT^èï‡ÝËG+ƉÇG>ÖÛ}DWHa¤K‡n½yÒ=kÈ ¬‹µþö7VTºõf"Ò×CœG£D¤È2qâŒçcä÷û8‹/F¥ˆR¨ˆ#E•ŠKÔ†©ã"‘H(lþ„ÃáH(‘eYcÇ IDATUd2837Þ˜òŠç·/½SaŒSŒëîZu;ýïøÇ@Š ÃÊ•W´ú%™ˆTEò:uò>¶ZßR½I[êž{î$¢ªñUQÎÃÜs°ú..¿¢µ@’‰Èq¹©¦zJÿ믿ü¬3gYOEv/⢌ˆ[ƒ""]'&q.éDtð¦›Nùå/)XVT¼é¦¾¶ ƒtˆâã'R™IDDI’¤(²¢H²¢ÈŠ"+’DÒtÒ[ƒ›:º¶ìʾ‚c…E'KJeåѱc©j¼2ñ 'üŠ"ËŠ"+²¬(Š"]pá·‰èÍMm\f†ÌÂE$’yó–--dvŽ IDATÍ--Í›·l”YVä––f³oóæÏ6Kì?--ͯ·½²jÕ?·´4oxyÝÉž.³<¡gŸ{²¥¥Ùœz²§+áñ³Ï=™Ü¬9ïÃk×86èØ¦YÒÒÒ|þüÙ‰ùØ,yxí³š}ªc›.kdÿÙþáû¯]c¶|øÈÇV´4/hiÞ²e£¢(Š¢,hiþðÃÖ®]³ ¥ùå—×;ÖùòËë´4¯]»¦§§; Š¢lIjÖœ±­íÕ»Vý³9£Õšµ¥”þì“ YriÖ,Y»v’$yjr#Ï=÷ä‚–f³?==Ý ZšÍ’±—9ò‰Yb¬©©:ÖÒÒÜÖöª¹Q¬,ƽIDATõMðÃþÓO~t»µ+ X> ÉŠ¢*rü¡ù[–™ˆ"'ÑI·~ößtƒùŠYQµÿ¦ìˆG"'¢x(I²¢H’DæØJf‰ÿ|8E¾vø“?u#ÁP¨7 Â`°7ê {¡@0†5MZÔô½¾ ¼ˆ-¼è²ã«V¯øæö÷¿}Ñw&Mª&¢ÿ´úî÷þûÃ¥EE­×_¡0ÖtÎ×ÿðÊæ /˜ED¯­ßHéjâùþ_þbõó¿Ú¯üÞÅ2±‹^öFR;g7Í}þ¹§÷´·Ÿ9³i÷îDd|ÎŒs4&éRâݺI“Om˜®‘Ôöv[rÇ’ÛEi½þŠ’‚¢ÿõµY©ÖȰõêý÷·ýté­+–ß}Ë ÿøê«ëOtvÖT×¾û—Í«ï^ñàýOødµõú+J ÍÖ~ºô–îâêË[/½üÛ=zÿsÏn8oμK/Ÿ/ý× X!öJþü¡ÒÂâØŠÏ97ÞÉ»Ÿÿõúp(ëä¢ïüáÕ·/<¿1¾¥¸®õ "&ÅÖ=©·}/û”i#]vYSc¥ßÎ>»ùùçžÞÓþÑ™³wïÞ‘´Qø“O 1F?sM<ÖKcD9cý죪y“'­ýæ|ûT#«,ÇŽÛˆq&[ç­˜Ì4UáĘyÿFºÎßð…â*£Èà†a躡ëºnzT·ž†a†êSçDŒ1Ækjk–.]þò†—~ô¾—ÿðÒÚ‡Ÿ©o˜ºé­×‰èÔ)ÓåˆÞ|ó?ç6ŸÇl#g¥ÈïøÞdyI©RXIDk½ïâEßMnçgÿ²z挦Wþ¸afÓì?¾ö2YgÎhª«­—5U‘þuµõr9vlúôéö6­vÐhØkIDAT¬Ù++ÇÑÉ®®kßh„£L‘˜-ÍnÔ}±V.ðÑ+¯þnæ¬&ÿSNX#Uí{¶l~“ˆ¾vÆY²¦|sÁ"Õ‰±XkÕur¡ˆ^yeýÌYg›õëã…DTQTªùˆèå?üîæ›– XaÓÆ6":µáÔ¾ŸÛ·Eʋ˔*_¬“÷ë¤Rì¼¥ÌI޽µÖ½®¶^.ô1¢ä-bŸêØ·éÓO9³é•?n˜y¶m£øle¼m£D¢L–˜œ´Q¬Ž½º¾ÿF)S ãë»è2ûú&óiÎ/@ªòQ¡o¼ +ÆÈ¼h=‰ªªºNœ &Ñõ¯l°¢Šâ‡„]ð-"’¸AŒ¢œ£¹Å‚IDAT¢‘iš;aOdÆ•Bæ‘ ÊìG›ºÆšŽÛ¶çó?:Þ ÁÞ@°7ê „`0 †"ÁPø×£)5Ö‚ÍÓWjEùåW^=¾jüÏî\öÄã­ºëž-[Þ"¢yóg›ÕÞÙº™ CUû>åãò÷¡ÆÿŒpıK.ýî-·üà¶×¶lyë§?Y~ç]ËÍÇ«ïZ#«²æsþ2ËSuÌÞfr;ßÿþˆó+¯¹dÉ’ÛgWUØ[6Û´ñÎÖͤ몿o¿²¯‘¯°ïEذᷱÍʪloMÕÔXkQÃÖT_³Š{lDô+8¬¸Î[õUE´__¹’rŸšCóIDATTű·ŠÏ¶¡5·kôÌ©©úvñ%—ßzËõo¼þÇ-[ÞZ}×/dU±·vÍ5? #¶Qf5ή¨coÙ¡cº¡úí³6JÔWè£ÔÔ¤ƒ÷òÑÀ6pb¬ÿÀŠˆ ݈2™ˆˆ7¼ö{+ª:/®_»–âõÀ¼oDÄÉÐcᚢZÃ4IЧ•,‘¬(,vVŸ§è¤b=Ì'WuíêuÑ¢KˆhÏÞŽ;?$¢ Îû–¯@KµFö¾YÑ|êïÿ°~럷h>µ¯µ}­õÍnÛC4§½%UçOQYÓl[JS~ìÕ{›PǽMK±Q4µ¢"i£Øæ}á…_ÿù/¶Ò´Ouì˜ýØ-áqòOª©îs’ͧišâó©>MÕ|±1ÏIDATŸO!¢`ÔˆêFT§¥o·YQõÑÕß× fþ|tõ÷ÍÂ×öZúv[T§¨n£†ù÷àÓŸOóiJߨJbÌçSlWKp"æ›ZÙ[ÑCÊÜRÿW§OxúwÙª2Mûò)MMÓÎûúé'TÄO¯Å®¥ÆY³Ž>|Ƨϙ3÷¾ûšòÅSÇTUœRßôðƒ=ùäãïlÝ|ñ¢KkN©ãºá/ôß|ó6n|cÞüÙÛ·ï¢|¶ãˆÆFçvÎ<óL"š6uzIyñgœAD§M?}LU…ߟrHo6›ªA"2Ûtl§±±é¢‹¾ED×_ãœY_—$ÉÞÉsÏýúÊ;ïþÁÍ’¬©ûIDAT­D´æÞ¦×^R^l¯ê±Ù™ ë×ÿøö[/½ô²Æ‹¹n8´VÖ÷ùŸm‡ô9¥Uª ³WÛ¿T:™bªû\#\ÿ‹ì§±ˆ(ʉ|ÅY±CûíW^0÷ö+¯>ý™'‰hÅY³£×ãóú45~eÓ#a2ïÆ÷OKZKËËÍÅÄ.F]’“º¿bÝb]`«Lº®wŸèé°ç"ª?urÂ:t|´ß*·?vl'‰îß}¨fê)²,뺾oçÁÉ “íM¹tÌjÓÞŽ5¯ÕíŠqeecJÌYì-Ÿìê9rè(}¡z¼õ ¤Z#»@Oðdwo×±n{gNv÷9x”ˆ¾ðÅXkî'¢úÓ&§z<`…ØŠn[qEv©Æ·ÔiI[ÊV-¶îý{›\ǽ…T}‹m”]‡&O±m”ø¼V+*ËÊ*J’W§¯cÕ•¶ò7"ª?õ‹ :™bªû\£†uÜÍ­Çš¿hZÍD#‘$‰ÉŽo®ôcpâzÔ0 IUwìûøÜõ/ZùÓuüÄÝ'ZtkIDAT«g‹/ûɯ;n,Q|["ãñ/™ˆ/Å ª¾üb»„•3Æ87ÏY1N<ÿW_¸Èûõ¶#Š5Z1±Ì`Œÿ~^Ë)_¨"¢ÉÔ´ÆžF$0$":øÉ‘ _}‰âáÏ?ë¼ë_SˆH’IÕÔþïBZ#(ó$¿9èbÌžœÖg‚úmüØUEØ·²  Ùe}æ†÷ÅCì€ëð§á ãµ1û{Ù®˜9ÅN&Æ"G’‰¬óVª*›KŒ¿/HVf¿[Ȭ#C€ˆñ~#¯X¤aÿÊ&ŽÝ+Ëð‚f“u\e>cæ8†SïK ï_}øÓ ×¹Dõc½7.QTÅÌ!Îq– dIDAT¨ïs‚¥åcÜ8²ªå¼¯¾DK ï_m•°ø ä:¤é½qIËy_µ‡Riyü¾ì>M=tð`Îú £Ôù³O£ÙOd0c0²‡ÒØqãɺ_ûÎO³Ò9€¬›eO«Ý»vîÝûY^ûà ¶¶rÖÌ/‘™VŠª”WŒ;öÞGKo»6ßè³rÕ#_=ãTóòºÑ{›  Ò Ä€´1 ­@ H+Ò Ä€´1 ­@ H+Ò Ä€´1d-­jj«sT€<¥UMmµý'UJFÃ'¡\:™ç'Ù·/˜Ý·÷À + Bt öë°kâ¤IDATÆ5µÕf˜å ¹`/´f´ê$—$/Åq^ûÓT‹H(°“ÙZ–K ÉuºvÞÒ*yÇKÞ'íØ í3š{xB‰}¡©žZ“cȽӜª0yjr…„I.5=qïd¶–•N î¯ ˜ØâÅËîàŽuëÚÚ^ß„o‘€aeåªGšç6-\Ø|ã +†ã‘ @2¤ˆib@Z€V ¤ˆÁÃõV¯·µå®0 µ¶^µßÁ4+«¾ÞEIDAT{»:ô¯lòÞË—/óTßóç~ï#^g!Àãœç»0zûüãÒ²JYVÓ¬ßÙù1‘îiÃèSÍ 4YVƒÁžp8 ëQÃ0878熡‘ù¯”snѲ²ÊââŠP¨W-ôyjiY4Ío†aèœóøxŸÇ†¡ww+.®‡ä1­ðž dM|TÅãQe&”YbØOV„B¯clYcUõe“YbÕaŒQ$òڸ籋s|šEÌÆqéé”ç¨K9j@t†¡›#)«dÇŽvsÿ‰‰F£^÷œV o¼ö?×õsÝ@¶qΩS§ÑÔ©Óâ‡{¼¶¶†ˆjkk28®*IDAT´ *­rt’|àc=H5d CŒÑ°Ž ºø?PcÊ”)f0ñø‰ŽÚÚ󲆌ÿ¿z¾ÞÊ:㛼Èäð²ê˜“¬ß.…'ÖɬÜ};™Ü{\ÚËÝë{mßz}ÈéV:í œöaPB<™Y–YËžÓ*aÇpš<)ýýÊ1 =•§ß²û¤¡¬Ÿæë‰x‚áɼ–±Ø?Tkß´FU¶ðò|¬€kÙ kÊËÇwwnû3ëlºR†¡—–Ž%"Móö!ABZ@¶8Ð^]=½¤dÌ€5wízoâÄÜ1ò£¢¢ª½}kOO—®G£ÑˆÓù)&Iraañ”)g'½¶´*ûcñIDAT!p& ò+*0˜Z9áKUñ·ée‰1I’%bL2 “¬ƒÄã'tµÀ[`áŽ1 ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ì˜IDAT¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆip2'‚IDATb@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆibPòÝ |ÒÒbYVÓ¬ïÓ^´€ìe5ì ‡º5 ƒsƒsn:qÎÍ߆-+«,.®…zÕBŸ§ö‘V5áp@Óü†a†Î97CŠˆÇ†¡ww+.®‡ä1­pÞ ²&>ªâñ¨2Ê,1âáED áHòÇ6ªêË&³ÄªÃ#¢H$äµq¤daè†a$šƒ¬„Âh4êµq @vq"ÞÞþ¨)÷IDAT‘ù$˜QÕѱ‡â§Û‰(9Ô„´€¬1ų́ڱ£]×£Œ1ιUæoçH+Èsè4mÚtóéîÝ»‰hÏž½æÓººZÛ…ž!­ k¬w§Nf–˜EDuuµV-ÛoVEÜ:ij‹ˆjkk¬K®2niYcE’ù3eÊ"ª¯¯3¯Z0/kÈøHW0@6qn؇AõõõöñÔ`†WH+ÈóZvÆx|0ûx 5ª²­˜×Æ‘V5ååã»»?7£Šˆˆ˜u6Ý )ÃÐKKÇ‘¦yû !­ [h¯®ž^R2fÀš»v½7qb‘î©}¤dè$Õ&IDATGEEU{ûÖžž.]F£§óSL’äÂÂâ)SÎNzmßsZûüc¯³B^g€<*ðy¾ABW—AÔSàŸTàŸ4`åÏ>í"¢Šro‹ðœV¥e•é߈:;?öù=Ô€¼ótP"êìô<ˆÉ€ç´r¹= ¥¸C ¯°,˽€\Ê`7'òçºW™œ·Ju{@²]f¿C`AaV» ¹çu7gÃ3­œnÈwìh7/´O¾C ííLCònÞÞþÑ´iÓã«ÄÝÜï«Èu—2I«äÛîØÑND;w¯·ªYwDZ'a77÷ñ;Úoê÷|ù”g™¥U¿Û·5¹IDATš«ADõõõŽw”%¤€`vóiÓ¦›{úîÝ»ëëë*gp#Ð d|½UìðÕUuV¡yÿ-³Ü0 &á³Ó"ŠíÑæ“úúúŽŽ"êèØSWW›°›Ao2[™‘dEUCCƒYn>µ97d„€h¬ÝÜ<Ö‹F#Œ±††ë{¶ûUer#Ð dxÞʺáÖÎ;(68¬gL¢x¿mŸ´æf9ÄÚÍͧ’$snìÚµË|jF•}7‚.ev$È97Ì ²«£££¾¾ÎÚ³'ÙÔ·›‘=ªjkk¬w‡²C™Œzo¸ED{²rÏ-È»„ÝÜŠªlÝZ/SåYIDATžeO¾áVGGGÿãØ¾{náH@DöÝÜýìøà; C&ƒÝ|zå-­–/_fDONœ0‘hb:õ£áªLjÁP¬ d‹%¯»¹×[ëeÀCZµ¶^•»~¸óVû÷Ì]?ÜáJ(Ò Ä€´1 ­@ H+Ò Ä0Ø´ª©­ÎJ?Ä2¬ÖzXu w<§UMmµõ“‹ ¥ü®Âx-„VvLIDAT#i]`ØòöÉ›šÚê}{ä¨+Co$­ Àˆç!­RE•õÕššAIr—öÊíìÛ{Àêgò"ìK÷T3Õ*8>v_ÁäÁ¥îK§Ü_[ûÓT°—g¶.øOY—ñ7tõIi–Ð@»½§IÉg´K§¦×ÝϱÍtJÒ\—„—®ºô$¹}Çr¯ë#YH«Ì$ïT.5ÓoÖ¥MkÇËì?¿cVº4èõTNrý4_Ÿ!àuéH.È…ü¤•ý€Âý?³Ë "Í¥dEr‡³¾t÷úùÝÿ‘>0xxOÐ:‘-îgÁ²(áŒLÆû^òŒé48øAÖ`ZË®4—Ž·!¼­Ë TŠJIDATq/µ×±ÆMîç}“+¤Zb—só.mzêð€ J³M—:ûöp¯ŸNSUNÿuÈÖºd°€t°Å‹—ÝÿÀëÖµµ½¾iém׿»? ‡7ž†CF°•«ižÛ´paó7¬À'o@ §ÕpÔ ‡>Œ§Œ*H+Ò Ä€´1x¸Þêõ¶¶ÜõF¡ÖÖ«Òÿê?oW‡þõƒMÞûà`ùòežê{þœàÏï}Äë,0âu÷v5Ïòåÿâuy»Œ0¥åé~>ôñǟΠ}¤dMú'¡2€÷@ H+Ò Ä€´1à,;dŸãÝ"aô^ÅIDATyÏŒ­ ûo;È6‘VöxÊÊàV+Ùý®I¤äP﯋´1 ­@ H+®·€ìÈìÎ éCZ@dp¿*¯¼¥Õòå˼Þs F¯7Í€‡´jm½*wýpç!­rzŸ-wxOÄ€´1 ­@ H+Ò Ä€´1 ­@ H+Ò Ä€´1 ­@ H+Ò Ä€´1sïÐ×ÛÚòÝÈ­ÖÖ«pW"p!LZÑ_?Ø”ï.@® Á'At"¥ýüÞGòÝÈ ÜA„óV ¤ˆ!·iUS[ӟ߈IDATö3ÀËw žÓª¦¶Ú=ƒ†aB%CfG‚ oiUS[½oï}{X(ûHÊ^˜ð8¡ZB…„yÓì ³I.´žÚ'%Ïžæ² ïrrþ½’›Igþ¶—ØxÅ970ÆÌÇÉ%Î B×[9¦[f0\©<¤Uò!Û “%ëìã)ÄÀãmle§½÷7 C†ƒÁ Úϸ'”8†Ž½þàSÉ@Y'­†TÉ% å8{ i•.ÖÓäÐqœ”ª¾ûSwÉY3`‰õ9 \ob8­08U†Å iZ¾|î+0j “V­­Wå» ?LJJIDATO¤î 0Ê |Þ F¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€V ¤ˆib@Z€„ù "ª©­Îwr.áëÊ'ל’¯ž ÝríÍ·Ü‘NM¤fëín¹öž5&—à¯ÑüÍoßH¿2Ò Ä3"÷^÷ýöØq6d=¶V $ì½£β€V ¤dhˆß¢Åy+€~¬=к’ ¦¶Úñ±XìÉ"è* ­ú¸“ÐQ%hÏíV1 »ô¾½ysåIDATFÌ¨Ê±ç £HÇÁWª:yy)V7ª\$qBIÂZç=»‘V£TçÈóûÉ'¤ÀÀ’¢K(¥9W~_\ÁcF’õÔñ4V>ú5X¹èy^^ Œ­úØwìäq„¸#¬„ÀÚ·÷@:–ðj¸¿8CiÐcH¹L…ûzQŠÕt©ãØfNáHÄ€´1 ­@ H+βƒx<ÝF ¤æG·\›ï. 5¤³ i‚qüž…l¦s*H+‰¸—;e,Ío¯ p–Ä€´1 ­@ H+Ò Ä€´1 ­@ H+Ò Ä€´õ)5IDAT1ôûäÍÊUä«îúÒªynSûà.–V 6ç·îØâÅËòÝ€ý´ÙɧâÝqIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/set-svn-property.png000066400000000000000000000245331203611042400324430ustar00rootroot00000000000000‰PNG  IHDR¸‰wޱì pHYsÄÄ•+tIMEÕ 99 ŸçMtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝy|åçñßÓ—NË’ïø@§m $3°;á” v¸&ÁáJÈ1 ǃ³/˜£0 Lp6e!‡˜Ìf½’›!ðŠÅ}NÂl6X>â>dÙRŸUµ”ºTêëénµTÝòçýò ºKUO=Õv}õ«£ŸR–e‰Ë5×Ü*pt»ÿþo¹ß*'(íˆlkmž4©aêÔit ¼¶ÿ¾Ã‡û·mß)®¸ Êk®¹õ/>ññ3:ÿÓñÇ#"~¿ßÃŽ€W Ñ·ßþÓ‹/üþoþ‡•ʲ,;%—~êäù³±X| l †½î0Œ«ÚÚšº(¬ä"âIDAT­«yoëÞžß¾fge@DZ[çÙ)ùÁûûöíÄb±þþ¯; hh¨ …BÓ¦VÏï˜-rrÿá>QW_½véYg-^ò‰}ûøáÁ#ápÜ뮀gjj‚uõu3f4M›6éùçÞìy晀ˆÌš=eß¾þ]úðàA IÁŽ?ïn{tC¡Km»dEË̹‡ÇŽE#1kÖì)"°<00Ç««C%î,Œ»=û÷¶=ºá‹WŸoµÌLÌ›*“EÌ¡û{”Hê Ÿ’Cص_íøóÏØðÑW®ž3u¶ˆ„Ãñ¡Ú1 "¡ªÐ¡ƒ®t˜¦ÿäå:x("¾d$IDATØiDcù,âßü¾ˆ,¿èÔÇò€Í?ØõÅšªÅ©(£‰¨/¨Æ¦Ï0ÞŒÁˆ³‚ÕÕÁ=}ñ†j«*˜ð‰¥TаR^„cÁþˆ™°â‘ˆJDEÄ Ãh"*â J¿ßJYRªASÍ 5Ääßß=°/j$≪™4-0kVuM]p· šV"aƒ~øô[ß‘¾å–_%¦©”óâË·ß%"?¿þ#ÅMe˜’)ÙV3à Íjj”P`çŸþ¸·ÿÏ3KDc±ÅÃ;£S§7u欺±ÜR(’KˆÏŠÇT<œxjç9·yÎ#W®H$¿é°ZIDATgHˆ\ñðûGÝü_Å4LËÓÈØZ@D”ñù”ˆ²ÏpÖD­©Õ¡`}(Z]ï‹W×£±x,‹Dc‘h,޾÷î¡#G—œÕ6yrµ(Q–Xö¢–¼üò³/½ôÌïÿêÕ+W-[vþ8|"p¤þĸकw,K”R"–e)QÊúû0⦄Dbø‡²ñ©{Îmž³þóŸ³ßvýŸ±SRDb‰¨ßÃ/7EÄç÷‰%¢Ä4L;"âSÊçSþ€_‰ˆ(¥¬¦Cb˜‰DŽŒH$ŒFc±h4ŽÄ‘H8ŒDßzûÐô™µgt¶‹ØAi)‘Çÿù† ÷ÿ¯‡‹°ºFIDAT™HÄî{àÕ¡@çYçeÛÄßýî•ãõ•Wß86Ÿ`e(í‡Àë~CyHYb%ë=ç‚¶$âqe$ ÄðíùÆsîú8Yyñ¥]¿ø¹“’{¾q£ˆÊ2¢–•HˆHÀïK,e‰eù”’¡ŠÒ'ÕÕU–ˆKD”ò%¨ …E‰’@ÐW?)ر`Z<Æì?±X,Å~0à;{ÅQ6Ü/"S§L‰›æû»ïDY"QË̸}ßýÇ¿‘Õ×ÿm$Ë GƒÒ~쯞à÷“‡’ÿ效¥’/DD C”ϲ|"†ˆì¾á†¹÷Ü#ɬtRr÷ 7 ·ešb"’¬%ŒYÀpIDATð+ŸÈPEéó~K’5«X>åûå~1͈iš¦eš†ß¨ª1‚!³ÊH$LÓ4Ä4†ÙgYÀðiO%ÖùçöÉ'{öùM§¹LDì¯øøÅÿüó›ÖÝy›ˆ¬ùæÚÅ‹—‰ÈŸYb/uÞgÏ|âÿ>—²ñ÷Ýûý'Ÿ|LDº®ºî¬³ÎillrÿtÏž]Ïô<½qã†óÏÿì—¾üÕÆÆ¦Ÿ>òÐÆù鯛úú^qù…—]¶âò+®ºà3K¾~Ú×_{éõ×_ÎØ”Ó»ç]W]wÑE—¹§¯ùæÚ·þã×]¿ZDÒ·"Çâ9fvÚLù~ùËëº/}+ÒþmäÀ>ë@±ÞIDAT>t¯Øå•üPb% L‰›VÈŠ®Ë0;o¸®ùžûDÄIÉ7\çnMY‰¸i‰H àWbßw©|>ŸØAéWâøF®>qÊï?ýAôp$‰F#Ñp8ŽDÃÑÁHd0 G"áH,ò]ÚùÕá7E]|ñìßwÇ÷nûôÿðÙ‹¾0wî1"òÜs¿]wçmwý÷5ÔÖ_uíå~ñ->ëì}ò¥¿>ÿtyêñçÄ#8â²Ò ÿå›7^ÿ·‡¸lÅ…á#+¾²ÒRÃÿ¼þ‡¯½öÒ£Ÿ|ôÑŸíûàýiS¦u.^¶qã†m›ßùäi[·¾+"gž¶$(JDþB'ºSIDATç=ëþ÷??‹FWt}Î/êâK¾ènʱêÚÕç,;ï7];cêŒÅgíLo›Ó¼°ãØ ¨W~÷êº;o»ïžW‚W]{y}uí_Ú™mñŒ›œÞfʇpÊ)ëºÏ½§þçS‚¢ÌüoqUÔ”^àS÷ˆR"É $b %‘ó·a&,5rp×’ç6Ïyà3ËÝ?5C3û‡”EYÊT~ ,QÊtM‰a„_õ±ú™fi™¦i¦a†i Ãykš¦išÁª ²ì¥¬Ö¶Ö[n¹õ×O<öÀC÷þú_»ÿG:æ/|þ¹ßŠÈqóù«C"òì³O/[vŽ/0¼óÚw4IDATêªS®¾?óÌÓ›6=ýÊ+/ˆÈÏ6þä«W®ô‡†g™1c¦ˆ 9Üuõuf<áóû{ì©§œñäÓOœÖ¹äé§ž8å”3ÚZ;ü¡¡˜š&MöϬ‘º÷óŸû’/˜ùZÿ'N<)½{m­þê(yú©'D¤½¹ÍÞŠ'óøi§/vo…{ñܛ촩|ÿŸuÕímm|æ¢×÷êiKÞøý«"r̼–@(¨ü#~åBmã ‹¤ôÈp•6”“*Y &âq ƒ†!–˜Ê'"óäNJJòüGç_ ">Ë% Kñ¸ˆ„Bþ¡ëB"vR&½ƒÊ}xŸù:üý¶I!IDAT¯ïéŒÄÂáÈ`82‰†£áp$F¢ñH4ví5g†-ΊíC÷à”)_^q匙3¿}ûÚ¯ÿÑ?~÷.;ïÎ]>t˜ùêë/‹ak†¿. ލ˜6nüé½÷ÞýàýÜö÷wœý×gˆˆ7‚uÕÎ _ûÚ߈i^qÕçoºé–ÎÎ3›š¦ˆÈe_øòªU×>Óóô+¯¼pç?ðü¡êá;=CÉœ5c‰ªÚªŒŸ¹ÝôîÙíØ[á¼Í¶ötí&»ûæ^ü¢‹?×Õõ¥åË/~â‰_\³òëuµuÁª€ÊTgd‘”^P””q}îJ,'EÄ4Ì„ò‹ˆXæuOýÚIÉÞ«Ò̵qIDAT¯nàIfå}ç~ÚKLcè:A(tŠSŸ/”~Ÿø•<¶W–$f×™1³yz]ï¾þýí#îèÐw4‰ÆbÑÄ©§´}jÙ ÁP`¨Œ±ì#Ú¡Þ~æ‚åß¾}í«¯¿lDgœ±äÅŸ{êñá‘f¹ʺÐÈïÞ{ï‘c>vLí¤šŒóÌœ1ãæ[ÖžwΧ¯¿qå+/½°î{?ðù|'ÿq¹ý»Ý"ÒÑ:¿¦®:e¡,¥=ý”Ož–±{öVhg³§ºÉΔãwág/¹æº¯ˆÈ_žpbu]uU¨ûÉI/ðûÉ+ʲÄ>V¢’·(Ú¦©LÓ´,K­¶K¥IDAT)uæß8)ùn×Uö¬H’Yyϲó,Ë2Œ¡ë4¡ß:ù©ÄLH²¢TÁ{8 +4381§ˆ:ÝçóÔï¶ì G‘h8‹DcÑhâôÓÛ¿zEgó1ÓœÓv·Ÿzê×½½½×]wÃûEäæ›Ö&b‰Ë/ÿÊ‹/>÷ÿÞ|cæÜ™ë×?pñÅŸ[¼øLY¼øÌçŸVDBU#²àŽ;ÖÝ|óš¾¾ƒïÚ¶¾¾ƒÓç?â‘Gnnn±1 #:<­aJUÓw¾sçßýÝ7o¾im]m]u]•Ïu`ë^EÊê›·üQDÎZü©Pu(}þK/ýü‹/>·mûÖš5u¹gIDAT"rþ9¤Ìæ^<Û&§÷!ýC8ïüOÿê±GE¤­µ£¦®:ÊëF{½šI˜%–øo}µÇIÉw®üšSM¼så×=üO"òÔÎ=—.hýÖ)gÆÐYÊÐPu¢D¬xÌç>ʪª€ëV$KDUÍŸVÕ8 5OM®>iÑÇ6<öo;>ˆýrìÇçžÑ¹ðœ³Ÿ=«)y*Udè¦s9ý´3>xÿƒ“N:þÌ3—ÞsÏ47eFÓÜöÎÝ÷ÐÃ?ôêë/_zÉe-sZÍ„YSW½jÕêçŸöÜåKÞ~û=÷¦/_~¡™0/[qá=÷üðŽÛ×Ý|Ëš#G¿3lGgR'IDATgçÅ/‘k®¹nééçø|ªª*$"'Ÿ|²ˆ·è„)3šjjªÝmÚ3¤¿vüû¾ÿëߟOù>Ý~aZb Ó4}Áà–{?õø¿8Ñ×ßwèÎu뇽«B‘di8´Fe%Ÿ=–\‹‘ÃÑ©dè¦%K)eYCw1…5µ53>65¥+¡P°±iRúÄEÑ‘±ëS§7NÞè¼ÎsÁôéî·ÙÖe›ÓàõUIDATÿp©˜ƒišaÓ'QC’‡Þv8|1Çç—`(8ò:»S7Ú×’ìRS)wh;_®ñÏdèœe%ªÝÙÀQ.îXõõ5§~òô©Ó =îfõH¥þ‹¯|ΗÝß—±ÿ÷Á‡±Y3BqQ’Èó;oÊ^J†öå¡´óùEœs”Á ß^còÊ·8q)Vòz¸rÅUòb“ˆ²FÔ›CiZI;ìöýÛ+o‹H0÷}Ý¥[ø0õkxZ ãààõkÁ€–’áïz74N ÝÛŸÒù ÓÖ€£Ð…çœø+YS{ï:gŠJÞí#9 ¹Áë×\xΉî3§*ܳ{÷˜õÆÛyKŽ“%?.bÁH4êÎéÓfˆ3pïæw?,Iç`"9Ý”[ß{wûö<í”—ÖÖé§Ÿv‚ØA›¦|ã[n^éuÇ ,Ü~ǃ'ž´Èþ&tÞÃÒÀÑŠ  ‚4JÐ (@ƒ  ‚4JÐ (@ƒç±èmêéñº J¬«kÅÎùDPæå­7_ðº OÀøIDATJ¦»{mAó”ùúþÝzÝô÷í*hþîîÛ ]A  â54ÎËsÎõë7Ñ>A `"Èÿ„c¸ê]‘”Ò<¤E;CA³G9‚4 8ôni> °c{agOól,š€Q*ì¥d„šsÐj?¢×J>ØÍ~í>¤Mù‘Œ<àuÿ4ÿ)»¡ígŽEÜ› Ũ.æØq鄦Sr¦¼•‘ ›2Oz î)’Êy6ë¼uÚÌ8gúæä³áùÄJz>æøiƨÍ=%Ÿnän¤ Í*…;"£,ìF{ÕÛqéÑ–2%ã<î‰ynŒvE22ˆsw 8îpq(wâhCM;%w7´Õ¥åàðIDAT¶`pÊ#÷”Q¶YXP¦—c…ö =ì3¶à„Zžq–ñwH¡sæ¿-î#èR¥LŽª3Ïn×m¾Ç•%9IXä9Ê¢õU mb–°îs‘ùÄMžy”>›¶På]>d%&žüˬ|xv{P>‰6¦—ŒÒ;Yª’JXN¦´™{JžÝȧ÷œ%Ù L”0=JöÍœŒµnÊ”Üõpú…—"V]D'‹1˜Ü3¾N‘mbžSò9š»‘l¯¸”£­ ´‹¤\ÝÎvú2ýu¶vr¼ÈÝ28øfhŒá £,Шï䩸1òÇèA*[ãKŠ ÌKw÷ÚB¡¯6IDAT0> ®¼¥^W× ¯»ÀK¥Þ˜  üqÕ4JÐ (@ƒ  ‚4JÐ (@ƒ  ‚4JÐ (@ƒ "ƒ²¥užó§´rÚ‹f‹hyìz R?zû bŒF`+Ù0kv\:¡™ò°Cw]–í[Hyhmz(g[‘v½ÅÍà(”+(7õô¤O\¶ti¶ùÝ—m)S2Î㞘O0¥äf>ëÍ8%Ïùm?­«kEŽ‘g5eúàÞN[éÈ.´æJ?ý—íù´éÙZ*Eœ‚dÀs`‚Ñ>›Lè-eGŸYåp0[Dð8؃^IDATÚ”ÅíAÚ²nŒÊÉ‚úà¨5&Ï̱sÍym¿H™’qžôr‡cJ#¹ÛLo¹ÐùsôÀVdPfŒ¶‚fÐ.’í*MÑd<—ZèüŽBeqè ålœ‚r”E5QQ€A %h” AP€F n8w‘cÈ ¨P£ J;"ßzó…”éÄ%€‰¤ø ÜÔÓcGä÷ï~Й¸zÕJÑ X•e´‡Þî”´ßö÷e¾9X_ß‹…¥Ø ä%€ –¬%­dJÚU÷Š@IDATáhO1“¹)"rè à¨äª%‡cÑžâÌ£”‘xp±ëæ)}¯ß¼ù‡š!ßIDAT… M–“©{}uUÓ¸õ­Lƒ2}Ôâ-[6‹È»ïnioowfs.&(J—²×Û»ü–-›;::2W^]üm‘+Û 1j±ý‘‰H{{{Æ‹ý>‚¨l){ýÂ…ÇÚ;þÖ­[ÛÛÛRfÍpåE(Ó çÜ„+%Ûœ‰öØœötÓ4•Ñ=€ `h·ß´··÷ööŠHoï¶¶¶Ö”½~<»U¦AiWàJ)'%;::ìéö[w)nY¦Ÿœ*œ³×Û׉D\)ÕÑÑáŒÅë_rTÕ¡lƒÒtã|÷Ý-2T~·+å“ägäIJ§¨\Î^o¿õùü–e¾÷Þ{ö[;%Ý{yÙYRIDATýxö­LƒÒ¾eÊŽ?'+{{{ÛÛÛœ’Ûý+…k9@åÞëEÄ’­­-εoOzV¦…XÆÁ8E¤·w[iÇãP&Röz'%K> oʶ¢Ì0gooïÈ“Ããqrè Lî½Þ>;9£ð¡Lƒ2ã`œÉªe“û(J—¾×·µµ&÷÷RŽÂ[„2 ʃqJIÇãP&Êy¯/Ç Ì0N@+b¯?rxüŽÁË1(óŒSRÆãüð£¾ñî%€Ò)b¯Ïî•]Pvw¯5GfÏš-2;Ÿù±CA¿kÆõSPZfB Ýë‹…·å”]]+¼î¤*¯ Ü¹cWZSnIDAT·×]€TÜ~%h” AP€A %¸ê½©§Çy½léÒÑ7eeTAiGä[o¾2¸0‘”›zzìˆüþÝ:W¯Z)"]]+ÆùŽÈ–Öy"²cû.ç­óFi´‡Þî”´ßö÷eN¨”ð*a–¹›""”\‘sìr2%%m óúûv5·Ì]ÇŠDJ(9ï¿Âh5K2ãRÞæ˜3ýG;¶ïJ¯[³-yò8(s§Dçó£lsH heQQf¬3ÎYDãEv ’Š Jû Õ«V¦Ÿ¦ìïÛÕÐ8/Ï«ÞîÃmûu¶º/¥<̳ŸT‘FoTíœöIDATßÌéî^›r;Û%ïܲ8Ù­L(-­øCïeK—64Ε‘áØÐ8O² +i_iq¿•´‹-îyÒÏBv9Z€üꥈÍ-óR¦d“žVùLÑþÈ==åø|0z%¸˜Ã°ä&6F ‚4JÐ (@ƒ  ‚4JÐ (@ƒ  ‚4JÐ (@ÃûÎT¯XœÕ«VÞ¸êÖQ6BP(XqCt¿Ÿÿâ™’´SÖA¹©§Çë.G»®®‡R<اƿ3^)ë ‘·Þ|Áë.G¯îîµ^w¡,”{PŠÈèÏ/(–åuÊW½À‹ùeIDAT@ƒ  8ôPæÜ×]—-]êaOÆA  ººVØ/Ö¯ß0ñ²’Co¥±sÇîä#¬çÚ5¦Sinêé±ÿ8os¼H™ÓýÖ+T”J`ýú ö §œÜÔÓ³léÒæ–¹viŸÇ©7›[æ:©ê¼pÏéÌœ² 'J%~èmOIICq}ÒNÒ”´'ºß:¯ÝŒ3‚@i¤G¡6×ì9ù T’•©“¿Þâ%€ñæ.$SŠÊ;v;ÇæÎ”;v¯_¿ÁŽ]w™íuÉQQ(ôs”; Óšr<¾sÇn'ìÜêLI?­™ãui”FË}F\UaÆì,sÏà¼Î§WíéIDAT8[> Êß¿IP(ôR.eJîœ×Úv²-˜qÎRá%h” Qî‡ÞÝÝkè €·Ê:(Ëä*G¹²J¯îÂ[©žES)Ê:(”¡Õ«VzÝ…ñFP(ÌQøt®z€A %h” AP€A %h” AP€A š¯0:¬€£V® d”3ÜAÉ(g œ£-‚4JÐ (@ƒ \W½7õôh—ïêZÁÅq›æ†ó·Þ|!ÇO»»×–´3PŽôËù !«„]cSOϲ¥K½î€!crŽrSOó'Û cÂίIDAT±ÞÜ ‚(k•›’9¤ÿH™’²ÕžÿÚ (Œ·".ÅxûR‚(kéåU¥K)ó\ÊÛO€ÛƒïÙiè¼ÍxÊÒ‹~ÖXôÜ“‚Š( îLI¯ž*·®LÉÊÛw哞)ŸFîg”@¹È˜9~Z)ro—dÙÌódlsLqè %h” AP€s€ôüL%¯Õ«VzÝ…ñÆ/A ä+ãã·&°£ðC6%—ʽ±hy>ÊõhÀÅI]ï&^IDATÐ (@ƒ  ‚4JÐ (@ƒ  ‚4JÐ (@cÄWo¿ãA¯úek8(—.ëô°P¶†‚ò’K–zÛ([êê«×zÝ(kÿ íET­Cþ¹IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/share-location-file.jpg000066400000000000000000001043551203611042400330040ustar00rootroot00000000000000ÿØÿàJFIF,,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀŸÍ"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ì|kãfð„º|I§Cr.£c–eM›U çcg;«•OH¥“C¶`½H˜qÿißQdÔü<ŒÁU£”# ‘sÔ1Yצae¤yÐ¥½¥²ª©“pÎöËdç¶zc¿$úXl59ÒR”nýIæÕÝ—OÆ·Úåt;f(2@œg®;ÅQŽù—¢ÿ¿ëÿÆëƒÖìm-’Y ˜3° ÛÓ#žŸÒ½*ÒÓEÕïì5 ^Ø.g¨i¢}9´„Ž{uiGúARÎÅ×'æé»æ=êxz1WqüYœå+Ú,¤>7Hæ_‹þÿ/ÿ§’ù—âÿ¿ËÿÆê cÁ6þ#ÖÈîEÌÞ&¸Ó®-å¹M² ­"¾Áå€ðCžHÁl_|;sa©¥xl%Òoo…„¥^ÝÕr Çe!þéT9_½ƒšŸe†¶±üÈæ©Ü¶>5Hæýþ_þ7J>4Hæýþ_þ7YøSÂèV:¦¡¬^YÛê’]ý•ä¼ImMÈ‘°‘³‚ßàv·(¦LŸeà(ìíoÁF“ºKé%ÐZÈÜ1•Ý,Àn6~è‚x$¿ÐÒTpÿËùÿŸ˜ùêw4‡Æ9üÀ¢ÿ¿«ÿÆéÃã ‡þ`qßÕÿãu&¹àŸØjö­¨Ë œz„6KåªÃ´FlE )?7 -“\¶§¡hú?‡,u:ïP}FK¥¶š7"¬NX£#ÏÞÆWz#G+Z;úƒEÔéÇÅùüÀâÿ¿«ÿÆéGÅÙüÁ"ÿ¿‹ÿÆëâU¶›eã[Ë]>Ëì¾^Íꌢ#˜ÐˆmêsÉÉ9â¹1W 5EK—6K«4ísÓGÅÉüÁ"ÿ¿‹ÿÆéGÅ©üÁbÿ¿‹ÿÆëÍ)Hæýö¿üEyЧŠ>©G·âÃÛO¹èƒâŒ‡þaßkÿÄS‡ÄùüÂ"ÿ¾×ÿˆ¯<ñKê”{~,^Ú}ÏAd?ó ‹þú_þ"œ>%Èæýô¿üEyø©T£Ûñaí§ÜïGÄ™ü¢ÿ¾—ÿˆ¥äÿ T_÷ÒÿñÁŠx£ê”{~,=´ûØø‹!ÿ˜\_÷ÒÿñáñCÿ0È¿5ÿâ+…ñKê´{~aí§ÜîÄ)üÃ"ü×ÿˆ§ˆù†Åù¯ÿ\H§Š>«K·æÚ}ÎÐxúCÿ0Ø¿5ÿâ)ÃÇ’ù‡Eù¯ÿ\`§Š_U¥Ûóm>çb/üwÿˆ®ç\çX­K·æÚ}Δx²Cÿ.q~KÿÄӇФ?òçýò¿üMsbž(úµ.ߘ{i÷:1â‰üºEÿ|¯ÿJñß ÿÄÒnOùáýð¿üMd x£êÔ»~aíêw5†³!ÿ–ßµÿâiÃWÿË¿ïÚÿ…e x£êô»~böõ;šcUÿË(¿ïÚÿ…8jrùeýû_ð¬ÑR _W§ÛóoS¹£ôÒȨ‘DYˆyiÉ?…XÝuÿ<í8ª…‡üÛ×Uþb¹ßj6z½ü#“Íq¯´m0öòÁÞIAeàãk‚ ?/#§5x›I/ÏüΊ2”ÓmþGky~ö¬·?eDi5ǖij O'úô¯/ø­;Í©iÛˆ b@dúÃò­Yà¹ð¦—,zåõÃjÐý­ï2²Ç>ñ¾68‹ià à c9ÉÉø£ÿ!-;þ½Ïó¬´qºV4WN×:‰¾Ö¼Eu¤¶‘c-È·‰Ä¦'U)½# Fâ=å\aðŽÅ¬vË£J°Â6Â1hש¼Ìœ’IÏsÚ¾„Ó?ÖÍÿ\âÿÐkJµ§‰” ¢’¬î—áOœÍ£ÜÈò>gˆÈ?߫׸©yäý©uyü™h¼Ý@7— èË—á†x#šúVŠÑc&º/ëæD©©;¶|Ì< ñ'þ}5øùû_ü~/úÿùë÷þÿû]}êÌþø¥uŸ´®¯6cxO™¨Ê67//÷NGC_HQG×gÙ}ßðEìcÝŸ6Øx7â^—ƒOƒT´…›yŽÞôF¥¸ÀqÎüª¾øò Yí¢Òîã·¸ÛçD·M§+¸nÁÁäg¥}3E?®Ô쿯˜½Œ{Ÿ4‡Þ;ûØ¿³.þÉæy¾GÚfücvÝØÎ8Ï\U¶ðoÄ)á¶¶¼Óï¯,­ÙJZ\^nˆhqŒŽ0@<_FQKëµ;/ëæÆ=Ï»Ðþ&Ýë7º¢Û^Ú\^2´¿d¹X”…Q…~@ äû䚪žø7¬:šÅrÌó ¼efá‹ ÿ1=óÖ¾‡¢’ÅÍt_wüûÝŸ:\x#Ç—Á Õìñ[®ÈR[•e‰xP[Àéè*ðçÅßô—þþ'ÿ_IQUõÚ—õó°‰ó€øuâßúKÿÿЧ‡~,ÿ 4¿÷ñ?øªú6Š>»S²þ¾aì"|è>x¯þ€Òÿßiþ4áðûÅ_ô—þûOñ¯¢h£ëµ;/ëæÂ'Ï#áÿŠ¿è/ýöŸãNñOý%ÿ¾ÓükèJ)}v§eý|ÃØDùôx Åô—þûOñ§øŸþÿßkþ5ïôQõÚ—õóaÀ‡·S²aÇG…5ßúËùñ§ ëŸô—óã^¿E[©Ù°‰äCÂúßý¥ý?Æž<1­Ð>_ÓükÖ¨£ëu; ö<œxgYÿ |¿§øÓ‡†õŸúËúW«QGÖêvAì"yXðæ±ÿ>þ”ñáÝ_þ|%ý+Ôh¥õ¹öAì"y€ðö­ÿ>2þBœ4 Wþ|eü«Óh£ëSò«ÄóQ êŸóã/åN©ÿ>RþUéQõ©ùÕâyÈÑ5?ùò—ò§RÿŸ9*ô:(úÔüƒêñ<øhÚüùËùS†‘¨Ïœ¿÷ÍwôQõ©ùÕâpCIÔ?çÒ_ûæž4«ÿùô—þù®êŠ_ZŸ}^'4Ëïùõ—þù§6÷þ}eÿ¾Mv´Qõ©ùÕâq«e¨ÄDۺʿ2Œ²†2Ù“ý‹âßú /þ û:ôŠ*'UÏâKúù—|»3̦ðψ¯Ü^ßù±Cu”oåÆ¿u#…8TôOè:©}ªAgú…åìצîâ$ibi~ò#…S¯þ#ÉÍqzÄßj_ð]fXÜÇâµ³±‡tRBöÙ(31WÝ·i;ç Áσâ>­©Å£Å¨Gö}M|A§ÙÞX=ŋۉ•Ø’DçÍSŽܲ­z¢xkAŽâîá4M5g½GK©ÕN®ráÎ2Á$ç½xkAµ·ŠÞßDÓa‚+uqÚ¢ªL€€àq»­y_„|_âM;áo†/&½‚þëZÕcÓm漎I óÊåc&fá0 lÇœUÈ~$øª÷[³Ðl,ôgÔSÕ4ך68­‘]$(>~WæÎÞs‘é á­’õDÓJ_¸{Å6©‹† X8ùÈbNNy9©-ô-ÓìfÒ¬aûÿ²yvè¿gß÷ö`|»»ãï@?ü'$ÿ…ÿoö\nþÐóþÓöy>Ïý•·výÛ³çgäÎ6oâ´>ßyÿ ×û;ísý‡þ¯?ìÞaòüÏ´íß·¦ìqž¸®‚ÓÃvvž(Ô|CæO5õôQAûæ ¶ñ û‘q•V?3 [š“RðÖƒ¬Ü-Æ©¢i·ÓªY.­RV ’p q’N=Ípð±õí7ìÖ?ÙŸð•ÿÂ7ö}ç}ßõÞní¿{›:q»½XÒ<qðâçÇZµÅ¦šñL`µ†ÆId‰ÄÆ8Ã?š™ Ç’ÝTk¸þÂÑÿ¶?µÿ²¬´ÿç÷ìéç}Ý¿¾ïzqQ§†´î.îDÓV{Ôtº‘mP4êç.ã,òAÎ{Бë^8ñMö§m¢L²õ+écS–9ã‘¶KLá—+’¤0#î‘Z—Þ9ÖtëJ%¤·rjzFš—g1#O3Éä™Hå8T)œ‚ÌÄsèøOÃvöw6pøJŽÖëoÚ!K(ÂK´åw(lFzT‡ÃZ ·¸·:&›ä\$I<eM²¬`à `…¦8ÅyÝ—ÄOj~#Ó¼= éP]IªêzmÅÛÚÉ"7ÙQ]c‚»ƒ`‚íÓ9íZ‘øšçÅŸ¯|DâK ÇÓ.fͤïIaÞ+) hóŒž aœö–úiö?³iV0ý‡Ù<»t_³ïûû0>]ÝñŒ÷£û GþÇþÈþʱþÌÿŸ/³§“÷·}ÌmûÜôëÍy]§Í¥^_[ëz}‡Ÿ²H#–;¨™ñ·s”`S²ÃîñÌz¿Äohây.¢Ñ¤O ¦šn`Š sr× ž`I Ÿ [i(Üc#×Ò ðÖƒko½¾‰¦ÃWê8ãµET˜ ÀãwZ’ãBÑîþÙö*Æo·lû_™nöŸsÌÈù¶öÎqÚ€8;ˆz–›¯hwíi&©e{cgc=­“¹’å7*š`_æ2ÓÓ ÏÚøÓÄÞ$ñŸ†,Òxô»È5=[O¹BŒÐLa‰L¬¸$Æ<ƆA#ŠõË G»ûgÚt«¾Ý³í~eº7Ú6}Ï3#æÛÛ9Çj¯ÿŸ†ÿ³¿³¿áÒ¾Ãæùÿfû~_™»öã±Æzâ€<ïIñγ?‰ßÃöIi ÷¾#ÔíVêèÏr±Åm?´ å‹• ÍS°ø¯âMjÅnlíô«O+ÃSë3,ÐI7™$3I"‘"íVØÎâ¹ÇÍÖ½R h7VòÛÜhšlÐKpn¤ŽKTeyˆÁ‚0\Ž7u©?°´úXÿǧØãÝ?ãßþxôÿWþÏOj4-OûoÃÚf­äù?n´ŠçÊÝ»fô ·8Æqœ Шà‚­íâŽ"@‘Ç…TP0€ã%QEQEQEQEQEQEQEQEQEQAéÓ4„ýi >•Ã[jþ,ÕÞök½ÞÚÛ‹TŽ{d|E+G’Âe¹è:âžÓxÔÌOÃçþá³òEW+ÎГýÓHIþëW מ5SΣáÿüÍÿÇêÔ,ÈnÏ‚?tܣ樒°ÑíšgúÙ¿ëœ_ú iVn™þ¶oúçþƒZU+a³Ÿ²ñdwL’i×Ö¶Ÿk’Ê;éü¯&I’V‹hÚå—.¤)uPNw2‚jÞ1Ñôí3Pº‡P±¹’ÆXíî#[´ $F¾s ùjüÄ‚@V8$b³ì¼=¬4m¥ß%Œzbê²jK<óKþ–×1¡Cª|ÅwÏÂÌqô߇·ÖvÖ6äÁ»Nû$Q\I©\ܣп \ˆßä·ÊÛ‘C •”/ÌÀê#ñ–‰ªK©êÚU‹6ЬڄF9IŠ9 ‰” W’AÆIÔ“VÓaÕ!ÒåÔ-P™7ÅhÓ(•מU3’>VäÇÒ°ì|7ymã»Íqä€ÚÍçí@Çxß’ Œc­¬™çºúœsú/ÃÛí5´ø® §ØežA©\¢G%¼P¦Ùq¹0ä¸eX Òkþ4ÓtÔíexΡg¦6£´“,fåBÊv§RHò[vày­üK Í¥ÍªE­é¯§Âû%»[¤1#qÃ>p̼ÜzÖ?‰|;©jO­‹hɬhçNs<¬†UŸc·†ið~îй³_ľ½Õ¼@uX6%©Šy-«HÑ‹µ`eˆŒbéH+œì*@4ÐjZÜ6zM¶£oåÝÁqqkmƒk,óGpà €$Ý9©"×ty¾Ýåj¶2gçí»ný›Ï™ÏÉ­×túV:øftðž•‚)£Ô ½yÒÈ£mÚÜ8ó³»`0Üq¹¹ÂŽž ÖÇJ¶•ìSû Ò+k&Y¾ÙåÍm(iÁäçìŠ0<Ìy„ó· Ö/‰tK']oM)~å,Ø]&.0R#çç!ˆäâ«éþ,ÒµKƒmiqÜ%ì¶3AçF$…ã2Œ²nÎÉr Hç#Ÿñg‡Þê8®å½¹¹VIG%ÓÍåïrFØ]A(X²ä “x³ÃvövדxƒJŽÖëwÙæ{ØÂK´á¶±8l:TzïŠtÝk[In­P¹¸·Š+&¹T•ÖY–-ê½H\³p9ÚFGQ‡áo jzWˆåÕo<ˆã“í?ºó^:ù‰f«™ePÍÿÎNznP2:SÓ|¯iz5žƒMš¸Ó.®®åÑ¢ke¶WDO,‡[d1dûø c$´º×t{F :óU±·¾Ÿo“m5Â$’n;Wj““’êh›]Ñíพ}VÆ(m±çÈ÷«]£‰?/ÎŒ¼ÿ‘Ôåõý'XÕ|C¯ØYÚÀ,u=ÞÊkÉåtò²÷AŒj‰D€•,W‘»"Ä^¼°³·šÊ+¿·ÖîõS9‰.<ã:(yG2óµ¿Õ…éó ˆ|Q£Ï®G¤G}ºšÒ+ËoÞ¦.c3.røp0Sžx’?è3isj‘kzkéð¾ÉnÖé HÜpÏœó/÷µË§‚µ!k«Z´ö5Û)íï;fÒKu(1¿¾®Šòcâ<ÿÕ±>¯]ëqøŠXtØõ w„Eb·nÑH±¥Êe¦òR~ÖÇ6ÿV~l¨Hšî%å­œz­‹Ý]Ä'¶…n¼ÑHt\å—œŽ85_Mñ߆t½jöX,#¿´K³LMÑy¬»Ž3µCxáIà Ç—ÃÚÅÅåÂÈ–)k¨Zjw2-óÁ$" Ä‹å"“n>rÈFòvü¸i-|)2è~ °»“ á{€ÙefŽÖHLŽH‘‘8Æ3Ô@z¶›6©6—¡hú„)¾[E™L¨¼rÉœó/$wµ^Ãĺªû4íoM¼rá6ÛÝ$‡qV`>RyÚŽqè¬{ãî~Ü^>¥i,‘­½ÃßKã_\ÊQ®VaòÚdD…|ömÁO¾VFÓ™àMHkÖz–¦ºk$w¿l’‘¥ Þf¡"í,ƒ%Zò(ÇŒ —?î/R´–HÖÞá壘ñ¯®e(×+0ùm2"B¾{ À¶à§€_*Ôhþ)ÓuífúËKº´½‚ÒÞ ZæÖåeRÒ4£aÛ×øÇ¼v7ðÝ÷‡­µÏí›{ö.û‹¨ÓË‘?”çv€W9hÖZÇü$:–­«[XÛ}¢ÒÚÚ8­.žõo3%£LgΆ²ôý^Ò-ôF·‡M¹ŸG²“K$»x–xHƒ1GÌêðÃæûç€u—×özeœ——÷pZZÇóO $–< ’ãUÓ]Ñä¼µ³U±{«¸„öЭš2 ‹œ²à‘DZφï,4 ZØIÕÖƒåì±….6Û¼,”âBÝîã¾Ey|=¬\^\,‰b–·ú…¦§s"Ü;<B ÌH¾X)6ãç,„o'oˆ؇޸³¹¼‡ÄT–¶»~Ñ2^ÆR-Ç ¹Âäð3Ö¤“ĺ :\:¤ºÞšš|ϲ+¶ºA·<+çü­À=¥ríà­HéÞ·óí7èöVö÷{aš;‹)IO—‘¶Ú@3ŽJú’ WÁš„þ"»Ö 1Ìd¸‘£·]NâÄìx-P³K –ÈkSò`‚‚¸ “ZñF ÅsöÛèÔ6’^ %•<ùcEfbˆH'„onݨ}ïL§rúŠçüSáÛ­WQÓõ 1æÉkÐ?´§°Ü$1¶ï6XãÊa;³Tf;? ÜØßéW0ǦìÒíᲆ%GdA6´›˜±WL¸ŒøV”ýñ1€\¼ñž‰c¤‹Û‹ØfÓÛQK%¸‰§’!”Pä? Ü©*pyÇ5!ñ‡‡‘ òkZjY”FKƽ„E!f‘B©ßœæ'ê0ppIV“³ð±Žte»ƒOµŸJ[;ù¡¹{w ´á¼—Eí Èà°@‚›ðk¾/Óõûı·ò|Ÿ6n\lŽù>V1®sö¨ tA¸róĺŸokq{­é¶Ð]¦ûi&ºDY—å 8a†#ÔzѪëCM¸·´†ÂïP¼¸G‘-­La¼´*É‘Ñp  Æsó #ÏõýYÑ´ínÒÎÒ=BãÄ6÷vŠˆ'Ä;î.dŒïX™"ìæÔ?1+Üx—O›S·‚ÝtX€9wT˜¢£…*<™8,3Æ=óÀRÛÂíÆÖ`8êAÍTÕõÍZÁ|LR”GH,¥òãÌ2%ºNîá•·0äg ×$ë—MÓ­u{ÍqVâî(ã–]à «œûä ûJ½Ðô»ë=bÖïR–xuI²+ó1Ü$ Ÿ˜œï4ÀŽOM µÃiK§½ÅÕ¥±¶”Éu,Öë)uòv€û<¡HrI)7¸zŽ5I£±ûØRòYU 6÷¾d`‹»(Ú9·À$ŠL\2‘·( %Kco`|/¤›É®„3¬’ï8K¹U#g<‘ m±Èw6]·ÎÇ9c˜Ç„40ZÒIc¯-į)Þѱc#1ràÃ×'rùk´Œ ¦þ)¼†ñÖm2kkwma{"]’éq0‹hL`<`ÏX²¼vðW±ñÖíKÖu;û3NÔ-$¹Y þs&ØDÁJ¢ÿ,ìþ—8gØ6…ô‘y цv’-‡w+$Œ€’D-¶IÕøfùç*0MáëvÓ´2ݼ7N–û> y‰ÌI¸œ®±>rsåàä1  ®.4ëi¯-~Éu$Hó[ù‚O)È“pá°r2:â¬Ut±·QšýcÅÔÑG ¸üÈ…ÊŒtàÈÿŸ°«QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQER¥-cø¥,_Ãw‹¨é²jV¤.ëHíÚvî~Eœ6N1žÔ !»ðw†/n¤¹ºðÞ“qq+ye²Ï©%rM`øƒBðO‡í`šoi×\L ‚ }> ò9Vl ÁT|¨Ç’:zàW)ö_ ÿÑ5»ÿÁ Çÿ¬ÝItK]W@—MðŒú<ÃPÃ\I¦Kn|™~]Ί88Îxö­T5܇-Üj­á?é¾Õe’Å­Åîÿ!’dGC"ó'͹U†ç<×y¢x{Á> ÑàÔì¼%§&ܽ„!••вœ) ¤pHã‚k–Ô5§9¬ Aáé4kï\jw&âç}Úi3L$ýü˜ùÖ2ŒcµkRI‘jz­Ÿ„ô-2ä\ØxvÒÖpÛÛ$lëÈLÕö¶­n??þƼÓì¾ÿ¢kwÿ‚þ5^“§Û[ÿeÚ [ ííü”ò¡d1˜×h•+•ÀÀÁéŒV{¸Ój?çÎçóÿìkÈ>+ ºÅ’à®!aƒÔ|ÕíÔϼÇñÿëWŒ|Yu»1‚1 ¿z¢nåDöÍ3ýlßõÎ/ý´«”¼Š%_6Þ qc͉_(éqUþÍiÿ>?ø ÿY&UŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽË™­øLñ³Õ-¼øA"…‘£ea‘•e!Á#ƒÐ‘Ò°>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâi󆟅>#þA÷Ÿø3ºÿã•ÒéšE–§C§éöâXA‰ÆNI$òI$’O$’MsŸf´ÿŸ üÿ‰£ìÖŸóácÿ€‘ÿñ4sßqriˆtñïM0/÷Oç\§Ù­?çÂÇÿ#ÿâhû5§üøXÿà$üMãå:¯³¯?!üÿúÕáŸ5ûQéÿèF½'ìÖŸóácÿ€‘ÿñ5æ€]SO ªª *€ùº:QÍpµY¹ÿZ¿õÍ?ôPÔ×?ëWþ¹§þ‚*¤ûˆ‰FŒÉ¸hQYúf­£'dSy÷1¬F@Y–ŒE€ãŒ…'Óp¡@Q@b7‹ü>ŒUµHC‚rå[u¢k¡|+‚ú$ß'ÚÚýÓK´Ëxb ±>gÛ¿vÅÁl`Ni¥q6Tÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý¶áñ˜XŠÒòX<ˆí%{‰ÞhäiUlÊ(‰†åfûQ1½²PgvV·-¼C¦]‹o.yîn ªE,G ”FÒ”te ‡b–€ÈÁxeò¡\â?á1ð÷ý`ýÂøL|=ÿAX?_ð®¼Iy'™öhà;[M>Ã*G›mûI<ðÉåÝàœå.dn’Aß=Ø‘ ûl–ö+ik,òÊ‘*$¬c@Í…›ÌBÛ@á?¼¥ŽT9øL|=ÿAX?_ð£þÐV×ü+·“ÄzDV÷wú6‚ÒÉu ¤ŒQnÁÊÈ ‚Ÿ—'qœøÿ ¬¯øWg©ø£IÒ/ÜÓ›¦òöä³»o•ÂÆ¬OJx鳜dfœ>5Ó&Öe²Ì‹n–IyöÆŠAÓ,‹)+ˆJy>aSœ®R(åAs˜ÿ„ÇÃßôƒõÿ ?á1ð÷ý`ýºñâíÛ¼¦K´tuO³Ic:\1`HÛA#ÎUHÂ9þÆ©âÑ~·VV±ßZÍkªé±‰LF$ŠImƒ1Pˆ˜©ˆØ#åAs3þÐV×ü(ÿ„ÇÃßôƒõÿ ôº(åAsÍ?á1ð÷ý`ýÂøL|=ÿAX?_ð¯K¢ŽT<ÓþÐV×ü(ÿ„ÇÃßôƒõÿ ôº(åAsÍ?á1ð÷ý`ýÂøL|=ÿAX?_ð¯K¢ŽT<ÓþÐV×ü(ÿ„ÇÃßôƒõÿ ôº(åAsÍ?á1ð÷ý`ýÂøL|=ÿAX?_ð¯K¢ŽT<ÓþÐV×ü(ÿ„ÇÃßôƒõÿ ôº(åAsÍ?á1ð÷ý`ýÂøL|=ÿAX?_ð¯K¢ŽT<ÓþÐV×ü(ÿ„ÇÃßôƒõÿ ôº(åAsÍ?á1ð÷ý`ýÂøL|=ÿAX?_ð¯K¢ŽT<ÓþÐV×ü(ÿ„ÇÃßôƒõÿ ôº(åAsÍ?á1ð÷ý`ýÂøL|=ÿAX?_ð¯K¢ŽT<ÓþÐV×ü(ÿ„ÇÃßôƒõÿ ôº(åAsÍ?á1ð÷ý`ýÂøL|=ÿAX?_ð¯K¢ŽT<ÓþÐV×ü(ÿ„ÇÃßôƒõÿ ôº(åAsÍ?á1ð÷ý`ýÂøL|=ÿAX?_ð¯K¢ŽT<ÓþÐV×ü(ÿ„ÇÃßôƒõÿ ïõy*HŽÈÈF¯;»ø—áË]ô››Òš‚H"6ãM¹cÐ#ù³‘Œg9Îi4;šv½¥ê×_f°¼K‰‚—*€ð d“Ç®Ÿøþ³ÿ~Oý%PIžO£I¸!T̼à}åWÏüYÿ¿'þ‰’€$¯-ø§ÿ![úàô*õ*òߊò°ÿ®ÿB¢;ƒ=bçýjÿ×4ÿÐEU—ýe¯ý}Áÿ£V­\ÿ­_úæŸúª²ÿ¬µÿ¯¸?ôjÒê ÏFdÐÝ—yhg‚áU"y ´r£…Â+6 P p 88Ås–pKâ?Zê7v~KÛÉo-­Ç—¶$¸ Ë$°Æ ï¸RÜ è;ª(IÒ®¬&O1,Ý<Ëé €*ù×b*œp»IÜ=Uqœf¶¨¢…Q@Vð®™ý¯ðïO¶ó¼­š€¹Ý·v|›ß7n2:ìÆ{g<ô«55¤Écl–Ö¶é )¨Žà œŸâêI$ú“M; ¢¦¯ðú_TÔ/'¼’éÚAo-°tÝþ†T8-ó¦ë!¹xÜ$#+ŒMÃ’è–°Cm=²ý­®.¡°Ó’ÞTÄP" $¯!±fbTŒ…!UŸÚ2úäGÿâ¨þÑ—Óÿ"?ÿO˜V)hú&¢¿ð}ºßÊò>Õª^íu>UôÙÌC“˜ÿÒnqŒýÄËz˜ð+jz&5ühÕ"I渷Ԭ–öÝ%ºq4ÁP:ò² +n8\ƒ»;†ÏöŒ¾Ÿùÿøª?´eôÿÈÿÅQÌ"Õô ÖðåÆi?Ÿcqim¦ýœEF(‹˜î%R¡Ww’ù h1Œ)ÎÚ±ÿÛŸÿm‹˜ ŒrÑZ@ÑIp|½€\8¬Ê¹%A@TíÁpfhËéÿ‘ÿŠ£ûF_OüˆÿüUÁb-3ÁvúRi©o>ËP{¼l?:}í¢–8ÙD»¹ÝådŒ±5]| …ÔàþÑÿEÕ¢¹·¾_#ç1Ë-Ä©å6ì#)ºpK µpœÝþÑ—Óÿ"?ÿGöŒ¾Ÿùÿøª9‚ÆRxÊÓ¦†ð䈷Ðü˜ãØ+ I„‹0.q “åå Ic%ׄ¯¬íL6²^Á-îq2Ý × ðKl­!—pyPd®Ü–ɵ£ý£/§þDþ*í}?ò#ÿñTsŽŽŠç?´eôÿÈÿÅQý£/§þDþ*Ž`±ÑÑ\çöŒ¾Ÿùÿøª?´eôÿÈÿÅQÌ::+œþÑ—Óÿ"?ÿGöŒ¾Ÿùÿøª9‚ÇGEsŸÚ2úäGÿâ¨þÑ—Óÿ"?ÿG0Xèè®sûF_OüˆÿüUÚ2úäGÿâ¨æ ÎhËéÿ‘ÿŠ£ûF_OüˆÿüUÁc£¢¹Ïí}?ò#ÿñThËéÿ‘ÿŠ£˜,ttW9ý£/§þDþ*í}?ò#ÿñTsŽŽŠç?´eôÿÈÿÅQý£/§þDþ*Ž`±ÑÑ\çöŒ¾Ÿùÿøª?´eôÿÈÿÅQÌ::+œþÑ—Óÿ"?ÿGöŒ¾Ÿùÿøª9‚ÇGEsŸÚ2úäGÿâ¨þÑ—Óÿ"?ÿG0Xèè®sûF_OüˆÿüUÚ2úäGÿâ¨æ ÎhËéÿ‘ÿŠ£ûF_OüˆÿüUÁc£¢¹Ïí}?ò#ÿñThËéÿ‘ÿŠ£˜,ttW9ý£/§þDþ*í}?ò#ÿñTsMZh­ìüɤHãg`Ê0Ÿzâ%‹ÃójðjÒÔ ¢ŠàºïUn ý~™l}ã«ß³êPˆoì­î¢VÞpΡ¹Á=y?PþÄÐ?è]Ò¿ðRnã(ÙÏ ÇcxeIi3‚Qܾ•¬ãúÏýù?ôL”––ZnŸ#Kc¤XZÊÈPÉ [[iê2 )ÿë?÷äÿÑ2P•å¿ÿä+aÿ\þ…^¥^[ñOþB¶õÀÿèTGpg¬\ÿ­_úæŸúª²ÿ¬µÿ¯¸?ôjÕ«Ÿõ«ÿ\ÓÿAV_õ–¿õ÷þZ]C¡%ÏøÖ/?Ã~W‘ ÆûÛ5òg8ŽLÜÄ6·å=ŽÆ±a¹“G³{Wš 95\¤%<½: lhÙ×fÉ$ˆÅÝ+®7‚@uEyôÞ$Ô–ÒiTò%†ÙäÓdcû]ij*. þórGÄ[Ió²01»á #þÔïÞIÖþåÞÉÊl¯q+!ÀPÀ:Ãq9#Š,ILI¢•åHäGh›dЬ FÀlC†èG­yôž,Ô&µÐím5koíG´„j”GhnâÒ6F0TþòPWåïЀGOáähµFò¼Ì·ñ©‘À äZ[òpÉö{Q`7kÄòL–ViĶí5ì0´‘6+6?:½£Ïöµý³Í¶þÓåù~vTû‡=qÛ8ª'ÿQ¦ØNÛÿC øG%ÿ¡ƒYÿ¿ÉÿÄQÿä¿ô0k?÷ù?øŠÜ¢‹‡ÿä¿ô0k?÷ù?øŠ?á—þ† gþÿ'ÿ[”Qp0ÿá—þ† gþÿ'ÿGü#’ÿÐÁ¬ÿßäÿâ+rŠ.ü#’ÿÐÁ¬ÿßäÿâ(ÿ„r_ú5ŸûüŸüEnQEÀÃÿ„r_ú5ŸûüŸüEðŽKÿC³ÿ“ÿˆ­Ê(¸ðŽKÿC³ÿ“ÿˆ£þÉè`Öïòñ¹EþÉè`ÖïòñÂ9/ý ÏýþOþ"·(¢àaÿÂ9/ý ÏýþOþ"øG%ÿ¡ƒYÿ¿ÉÿÄVå\ ?øG%ÿ¡ƒYÿ¿ÉÿÄQÿä¿ô0k?÷ù?øŠÜ¢‹‡ÿä¿ô0k?÷ù?øŠ?á—þ† gþÿ'ÿ[”Qp0ÿá—þ† gþÿ'ÿGü#’ÿÐÁ¬ÿßäÿâ+rŠ.ü#’ÿÐÁ¬ÿßäÿâ(ÿ„r_ú5ŸûüŸüEnQEÀÃÿ„r_ú5ŸûüŸüEðŽKÿC³ÿ“ÿˆ­Ê(¸ðŽKÿC³ÿ“ÿˆ£þÉè`Öïòñ¹EþÉè`ÖïòñÂ9/ý ÏýþOþ"·(¢àaÿÂ9/ý ÏýþOþ"øG%ÿ¡ƒYÿ¿ÉÿÄVå\ ?øG%ÿ¡ƒYÿ¿ÉÿÄQÿä¿ô0k?÷ù?øŠÜ¢‹‡ÿä¿ô0k?÷ù?øŠ½¤èÆÒôË&§¨]â;‰¨;O8 9úÕêšÛýk×7ÿÐMÑHñZJÑ»!Þƒ*qÙª‡ü$vŸÚÙŸÛ0ÿhϯڇ›÷w}Ìç§=:sWWþ<åÿ®‰üš¼þâÚéüM©D¿Ú/æêÖ“¥©´?e‘-ËJfÙÃ.Æ y€Œ §%XÐ>×sÿ?ÿßfµÜÿÏÄ¿÷Ù¯?´¶»·Ñ4¬M®Ë¶FKÓ\ÅÑX¶+xªJÆÜŒ¶\‚KoøJí—í¾t²ÚÇ¡qîc10Ç _•›ä¹}ƒíÎ ôµÜÿÏÄ¿÷Ù£íw?óñ/ýökÎ>Íâ;7û,3^j:¤:w–’îž(­å[lËþæçt¼å°Ê[œ…ù6¼!Ülóo/.-ŽÏ/í6·í›v>Ñ#ÊxÙ胶Nüu¿k¹ÿŸ‰ï³GÚîçâ_ûìÖbj;üô;Åó®d·ù¢ÆÍ›þvç„o/å=÷§­Oksö¨ZO&hq$‘í™v“µÊîû§¸ Ð_…$y|?’;;¼ó³3’LÏ’Mkøþ³ÿ~Oý%cøCþE¨?ë¬ÿú9ë`ÿÇõŸûòè™)õ„•å¿ÿä+aÿ\þ…^¥^[ñOþB¶õÀÿèTGpg¬\ÿ­_úæŸúª²ÿ¬µÿ¯¸?ôjÕ«Ÿõ«ÿ\ÓÿAV_õ–¿õ÷þZ]C¡%Q@Š( ŠÌ‹ÄZEÇ“öKøo<é Iö3çò1’vgjË–8r䌊ӠªÞéÐj?g[‰d .– ’Èr'¦ÏzµEM¶ÛþzËÿ~‡ÿFÛoùë/ýúüUCEM¶ÛþzËÿ~‡ÿFÛoùë/ýúüUCLšh­à’yäH¡K¼ŽÁUT ’Iè E¶ßóÖ_ûô?øª6ÛÏYïÐÿ⪴SE:†D‘C2FRU‡ÁB >€&Ûmÿ=eÿ¿CÿŠ£m·üõ—þýþ*¡¢“m¶ÿž²ÿß¡ÿÅQ¶ÛþzËÿ~‡ÿYãQ³Åë„E²m·,ÿ*Äv,œ“Æ6²œôçØÕªM¶ÛþzËÿ~‡ÿFÛoùë/ýúüUgǨÙËg5à¸E¶…¥Y%‘PÆÌ¯’q€ ·=8ÏJœMNð ÌŠ®Ñ†•I ;U±ô>”gm·üõ—þýþ*¶ßóÖ_ûô?øª†©]jÖ6mûDû>Ål.®>F;";ðÜÕ¿'q@{m¿ç¬¿÷èñTm¶ÿž²ÿß¡ÿÅT4P2m¶ßóÖ_ûô?øª6ÛÏYïÐÿâª(m¶ßóÖ_ûô?øª6ÛÏYïÐÿâª(m¶ßóÖ_ûô?øª6ÛÏYïÐÿâª(m¶ßóÖ_ûô?øª6ÛÏYïÐÿâª(m¶ßóÖ_ûô?øª6ÛÏYïÐÿ⪚ÝÀ÷ÒÙ«æâ(ÒWLË9éÉFü¾•5&Ûmÿ=eÿ¿CÿŠ£m·üõ—þýþ*¡¢“m¶ÿž²ÿß¡ÿÅQ¶ÛþzËÿ~‡ÿTí¯-oc2Z\Ã: e¢pÕ 9ªÊG±½M@‰¶ÛÏYïÐÿâ¨Ûmÿ=eÿ¿CÿЍj­†£gªZ%Õ•ÂM ª°+ÔPëy«)ÁÁÁ¡¶ÛþzËÿ~‡ÿFÛoùë/ýúüUCPÝ]Áe Ëpû¤Ž pOÌîG¬À~4sm·üõ—þýþ*œofY%cµ”A¾õF{¸-¦¶ŠWÚ÷2¡'sgÇ·ÊŒyô©¨½þ«›g‡·»ä[kv”€É8G^¿¬¿øIâÿ N³ÿ€þ¹L†h® Žx$Ia‘C¤ˆÁ•”Œ‚ê  oøIâÿ N³ÿ€þÂOýuŸüð­—š(ž$’DF•¶F¬ÀlÀõ8R~€úSèþx¿è¬ÿàÿ…ð“Åÿ@gÿü+rŠÃÿ„ž/úë?øÿáGü$ñÐ'YÿÀÿ Ü¢€1¼)°øvš)"2fÙ"` ®FAäpA­SÿÖïÉÿ¢d©*3ÿÖïÉÿ¢d£¨W–üSÿ­‡ýp?úz•yoÅ?ù Ø×ÿ¡SŽàÏX¹ÿZ¿õÍ?ôUeÿYkÿ_pèÕ«W?ëWþ¹§þ‚*¬¿ë-ëîý´º‡BJF`ªYŽ&– œeŽ.AçvÜqŽü‘øYÕ¨©ÁÍô.æ’ˆØï!’âXG3ÀP\FP/xÊvôàòyÅY¬›[ ÿ¶5gxîHŸÉ‹ À!)þ"? u­wg„*X¤©È$d~U˃ĺ·‹ÜßIBÍV‡fÚ†±§Ï%¶£ Vòj’îtžÛ—»ŽHÃgnåd9Úr#*q­¯%ùÕ!´²»t¤ÚE0kuFÜÓG¸v<‹¿ŸœÛŽ™­â)mmnM×î®­¾Õ¶d(2X™c~ñ,ÑiªéZ…ô>IÍç—.Å–ŽXÕL{Á ¡“ïDpqTŒŒî9NSP‹[œ_CbuA¬H׫!ß*@ )0·òØ‘lý›”;Ç9þ:žê{ÝsÅ0-£ëVúc4 3&¶òï F>H,9¦`¤tšgˆt­bcŸuçºÆ’°°Ú®ŠèNG•ÔŒõÃcî¶#ÿ„›H);%ËËäNmÝb‚IÍUT–a±‰ ~R f¡musâ(,בÙGmq$Â+¸x<µr?àD ‚@aÊ–ˆS­[im.¥¨j›™­SPH­îb++\Â#™ãƒ*³¨RoWtþ&Ò#HœÜ¹W]ìËŒ!\•&\/î@*Àù›pQ³÷[—ª[kñÝG%£ƒkw$l²ÂÅ E3*²³(V9Œ7˧¨ q|ÿ8}«ûwþï2_³ùjûNvA³~ßßíÝö¯¿ÇÝíåÕ+ÏøHþËqçhÝjŸÙ-¿Èóà’‹^vìýÍÃ4§¿2–ãp_“­‹Åš5ÅŒ7–×\Ã>|¯³ÚË+8Bª–*7N0¬vœ7øüM¤Myöh®]ÎäO9`Á¹ÕY·ËËL|Üîr@ r;Il¡ž'M]µiåÔDàþáÞwˆÃ³ÕšÞO<üÿÅSiv§¨Þ^%õæ¯oiö-–¤JÑk•G$Œù« ‹ïs’¥Á`ÝOi$®.\*.õf‚E.BƒW÷À–P<½Ù.¸ûËšW^0µ¶¼µˆ[ܼs²)Úq:YÈ&/q· cžI Oᩯõ$Õ/¤LΩQÀÍ䕌Ò =Ë•`~hÄG®k˜’}næ×C°‰õ¨ní­!‡P™`”bo´Zmì¥$!DÇwÌ î<©9êˆ4M:9mÄ¿g·³ÆVÙÖ"RY‚ìfP­”RHØÜ|§éMkur.³­·Úåq`C—Ç2Ÿ-È#9A ³Z^Ùè~3K4¼YÎÿ±°.Ò¹Pª•có3nR3’rz›Eû_ü%:‡›ö˘¿x~Õ/Ú Ž?œ‰aݾKP¼€[st-w_EfÏ‹‰cyQ0yT*ç§×óúÖ þ0Óç·FÒ®âc=šº˜Ÿ òB< “¹êAàí`9ûíQþÁ»ŽÂãu¨ÝêM Í!ŒÆâèÆv1Ù,"À3¸sóš´QÚA«jv‡Z‰N†ëc4vI¹gów‚7©S/¨ÙÒ»½vÒÆúkk‡ÁŽ8R$’I\¹T–â&?.N&¥ªi°é°µôsIo}û”€ÙÉ+ɹŠ˜‚–ûªÙqƒšÅ²Ýºëì¿Û¿Ù~eŸ•æùþç3ýï<­¾VïáÛ¿î¨.¿Ó´vþóûKZ‚Ò ßòÖ|¿>#žˆ<«¼©á²Øxݺž'Ñžq¾A'n]Y|¸ÁpÌù S+nÆÖÌ»ñ—o&™ökGÚoØKiÓ ã/ ïæ$[å™Xo AÌžøÈ¹µÖc‚öâÕÍÇ—ª\ÆÓ0󢟠.q´£6#kŒd64.“\’ãV³ÓnÝÚÁg¹¶I–y匘¡rß)Ï#l8Âý˜óÍoKâ 6X.žY¾Ï6ïÞ­´…"ÚpÞi ˆ¶œƒ¿n0ÙÆ0O‹!¶ÑuË”!Ô kæ]Ö²$WuOÞFÙä+g zà’ý—ýËÿ„û÷Þwüùÿhý×—ÿM¶móz|™ëóbªéöÝÍŹÕßTÏwž]̱ ŒX+±_-‚ ûBãzc'+œbšµŒžFÉóçÜÉkÈß4±ïÞ½8Ç”üž8ê3ŸmâH·56ìùßWmt\ØïR'[tŒÁlÓ†_õ*ØiŽ ’1ÎÚŒvçQh³ªEÛF÷GÚ}™¾×äYÙʰÓ ÐìRªN1·‘âë+×Òž=6æÕàk‰meÊÊ¢ç÷crâ@<Þ9ôжñfuc-â\L–ñ[²óZËø@Ét  º€FJç—Ôe‹9Õ´©çû³?•zÖVP^Ë$‹*ËL$î“dÁ‰bNØÄØèÔÔ¾Õm£6™iý£+ZÇkæÝ´“BdÛ.|Í/–ŽNÑ»,¥y"¦ÔuH-µr.i§ÙIs3ÆYíÏÝ—ê‚à~\qžaµñM¼vñÁª,Ñê‘GÝä²*ÎcWhЪ°v·mRÄ(' $ 1u?É“û;ûwoØ¿âO»íYû^ùwyÛ¹ÛŸ'ÉŒãÕÍ®³·¶®n<½Ræ0&™‡øµs¥±\c!°1ئ¹¦IÏÚI OD”¼¢3AÇÈãæëÁ¨‰´¶æY.Z0ʨËg1óÉ+ ûÑ…-”Ü6Œôæ€0žÚëRÕÞx&¼Kki¡y혫x­] uT¬ƒ¶·)†¬XëÖã^»}Bú)£‚ùÊ%¼ê‹I<’%2y åݧ™žü´5×'‰´+b!ŠG]Êg+œ¤)wq†Âádi×aÃ—ÈÆãŠ.qÛ¶1”pÁñ­œ`Ó ¼ÿ8ý—ûwþï2/´yŸjûNvO¿fïßíÝö_¹ÇÞíæQö¯ö†—æÿhܧ˜DV­ö˜<¸|÷),“/Êì!æ)¾c·¨f*Ý=çˆ4Ý>kˆï%š"6•žKil7·k°PNÕ$á[Ž oi·SE K4sË'”Ïm$2±Ü® …"7ÂT€r1H/G´Ô­´›‰nW]Næ;)f9œî·[%Áãå|“?}ÇËÚ´ô»kûŸÛ6¯‹Ú$€LÒ©p>˵e2~óýgž@b ŽPàõQê6rÙÍx.m¡iVI_äT1³+äœ`­ÏN3Ò©éËJVøfUˆé÷k` °fò£r‚ØÛ’rq@äÒjk¡j«öù‰²¶“I±š9›uÍðDvn…ÁòSdóó€Ö•5ö­žšœóÞÙf³y)j ¬lU@1Fí äl­¦×ü:<ËTr$‹(X,¤–7‘¶Ì B®ÿ0—åÉÆ[±!÷~&³´¿žêØikh³ÏtNU ²*[Àãk~÷'6‚H@2îå½°žçNAª3KªY5£ªM2‹`mÖMÒ€B’mÁ˜’Nwd䶬Ǣè1Àu¸º¶µžðÞ4×";„¹´ ²»e0bUJä)ÏÝvƒÄiºŠÜË2¼›ZÚEDgª;ÛË„bæ^>a˜-¼Y£]Ú›˜î&XŒbT2ÚË™IÃ(2d²“<ºŽ¬2ÌjóÝ}†õ3yÞ“¢ÞÍpÒÈXÇq TÈø²}¬€m®î ÖÚîïU´ƒN›]‡E{˜Ä3\,¹òn|ÐZoÞ?èã<NT‡É³k:ÐI$±<Ír¦Þh>Á+ÎÈ£%dˆ!p H̸ýàþøË-¼Yi.­ue:ùIm!¹Q#D¡e{” <‚rÄIœd€g[Å{>´°ÊuAs%ÝÊßó$̉D^[dFþ=ùŒïçõ‹ zîMæmBû/“¼ò¬°˜b2—“Ì‚[ÎϘ¦Në“åŠë®|û™-cùæ–=û×§òŸ“ÁÇF@8±iö?J–ý5Ö»¶¹Ž]\©»d0LŒaÛÕ|Çù.þíío⻸¾‚5pÖsˆ$, ÒN=± üsV©‘CRÒ5,ÎUY‰fd›²ý’âæôM'̈§2Çž~ei ÊG Jdm=<9 áÕ!Ô­†«#Hf‘í *뱉‹x¹.‹ŽFÞƒmßý8ÿßù?øÕnÿéÇþÿÉÿƪ„døg@ÿ„wO{_´ý£w“óy{>äCÓ'¯•»þŽÙ,>–;8ÚñêÚþâú$„º•¥Ê²€³0ᇠjÙÛwÿN?÷þOþ5FÛ¿úqÿ¿òñª@s/àù~ÏuzŠ*ê0<‰krK«É,å|ãË9ž\nß·®í­/N—M7Q „’ÖIäž$òÈti¤}Í» 79Æp8;ºÕÍ·ôãÿäÿãTm»ÿ§ûÿ'ÿ fçÁqM¥è¶Å¬n&Òí>ȦþÄ\Dëµo/pÃf5ÁÝÀ,9ÎC,|1}Ýå³ÜC’/m§º‰eòbƒi ¬| òúŒêvÝÿÓýÿ“ÿQ¶ïþœïüŸüjž s+á ~Ǭ·67PÚZ}ŠÎ;›"·FOœ¾gï¦ØÉÁà\[O ÜZ³É{ÇåIt2ïSq»v_s.Û– ev®Y¹ÏM¶ïþœïüŸüj·ôãÿäÿãTj3¨x>[ûK›ÔQ,™®¦E¹2G,ë*±f߆QçÈB…S÷~nt5m'ûK[Ò¤x3¶ù$›\4l‘ã9æDI7žNÓÚÖÛwÿN?÷þOþ5FÛ¿úqÿ¿òñª@PÔ´Û«‹ëkû ¸mîàŽHAž4e¡o”:ÙpsŒgƒF^áìýi¿nó1se?™äãþ=ÖÝqßÅö~¹ãw|sÑí»ÿ§ûÿ'ÿ£mßý8ÿßù?øÕaë}Nú{¸æ³,pF¢æÕ¥òŒfb ÈŒ¯ûîWiÇ^ SIÔ|ŸæÜï–Â亽qÚ-å{€È]‰`8#–Ï@ksmßý8ÿßù?øÕnÿéÇþÿÉÿƨŸ·ðŒIoªÁqvò.§hmç1 BäžGeÉ8Ü6ÎŒ–¦Oá½N{øuFÕlƧ‘•qbÞIDI”)O7vïô‡9ߎ޹èöÝÿÓýÿ“ÿQ¶ïþœïüŸüj˜~©àí·7vr<Ñ̲=Ýž"y]äy ǔŤ=Øá#ÉùrgºðmÕõÕ…Æ©ÙKÉ­Äv„IÜ ÞÆBTNü¤¼ŽAêvÝÿÓýÿ“ÿQ¶ïþœïüŸüj@ɱÒvx›RÕdƒÊ݈áù÷oÊGæI×Þ\I´Ž<Œ¾hŸ@ó¾Ýþ“µj6×ÿêþï•ä|yϑ׶î‡ëm»ÿ§ûÿ'ÿ£mßý8ÿßù?øÕ 0ì|;u§ÿfyWð·ötmiûbwZŸ/åoŸ™t¿8Âò~OJZ‡u{}Ãí—ðÛêºOØ­¼›oøö,±ä¾]„¬¦4Æ6ƒ†àäc©ÛwÿN?÷þOþ5FÛ¿úqÿ¿òñªç5M&úÿû{0ÇÿÙôåÚê3gÇ™ ÉáÇŸqŒÿq~SüW°?âoöÿ´ÿÌGíû<¿úuû>ÌçþŸÃë[mßý8ÿßù?øÕnÿéÇþÿÉÿƨœÒü3öOLó|Zf qœ}¢UW@vçåØ'†óýPSáðåý½…¬Z•¶4¶C§3Z1Ú«ʼnyûñÏ+³æÆ>Zè6ÝÿÓýÿ“ÿQ¶ïþœïüŸüj€9È|!å˜ßny¤¶šB!ÀßÜ—/»…f¨•dµRÿ„KQ:†­j·¦™¨[çvƒtŽ$žæGT!ÆÆUœ ̬ ã‚+°ÛwÿN?÷þOþ5FÛ¿úqÿ¿òñªzÇê¾þÒ»¸—íviæý ùícºèù±IÖ›xÜ‹æü«´aQÎÑLÎ'äá¶7ì=|¼sº·6ÝÿÓýÿ“ÿQ¶ïþœïüŸüj@̸Ðb›K&¾³þÐÒ|Ý:8îŠA¨-»ù,æßhÄ¢4Ï—)Âg©$‚ä4ï êQZ«^i~n«<šlòß—œ,FÔK9må†Gã*xä±Åz U“P¶Ž{˜ ;MmÏ,i;báHĘߓÇNEqé¡Ü¯†¿³Û@ÅÁòSS¸Xí^M@¨9‘ „«·˜‰˜µ˜»¦t~Ô²oÄú;Ü]ÜiwvRJmüËOžä¢± $±(åF!T ,¥Ñ^}«xoRº·Ô¢·Òÿâa'ÛšMC|cíqKÂ(7nÞv™!py\•sÓizdQý™~Æ#2mŠœ°eÛŸãÝÚµõÏõº/ý…í?ô`¦·u¿ð‰øoþ…ý+ÿ£ÿ ?áðßý úWþGþ±EY&?ü"~ÿ¡JÿÀ(ÿÂøDü7ÿBþ•ÿ€Qÿ…lQ@ÿð‰øoþ…ý+ÿ£ÿ ?áðßý úWþGþ±EcÿÂ'á¿úô¯üü(ÿ„OÃô/é_øøVÅÿŸ†ÿè_Ò¿ð ?ð£þ? ÿп¥àá[P?ü"~ÿ¡JÿÀ(ÿÂøDü7ÿBþ•ÿ€Qÿ…lQ@ÿð‰øoþ…ý+ÿ£ÿ ?áðßý úWþGþ±EcÿÂ'á¿úô¯üü(ÿ„OÃô/é_øøVÅÿŸ†ÿè_Ò¿ð ?ð£þ? ÿп¥àá[P?ü"~ÿ¡JÿÀ(ÿÂøDü7ÿBþ•ÿ€Qÿ…lQ@ÿð‰øoþ…ý+ÿ£ÿ ?áðßý úWþGþ±EcÿÂ'á¿úô¯üü(ÿ„OÃô/é_øøVÅÿŸ†ÿè_Ò¿ð ?ð£þ? ÿп¥àá[P?ü"~ÿ¡JÿÀ(ÿÂøDü7ÿBþ•ÿ€Qÿ…lQ@ÿð‰øoþ…ý+ÿ£ÿ ?áðßý úWþGþ±EcÿÂ'á¿úô¯üü(ÿ„OÃô/é_øøVÅÿŸ†ÿè_Ò¿ð ?ð£þ? ÿп¥àá[P?ü"~ÿ¡JÿÀ(ÿÂøDü7ÿBþ•ÿ€Qÿ…lQ@ÿð‰øoþ…ý+ÿ£ÿ ?áðßý úWþGþ±EcÿÂ'á¿úô¯üü(ÿ„OÃô/é_øøVÅÿŸ†ÿè_Ò¿ð ?ð£þ? ÿп¥àá[P?ü"~ÿ¡JÿÀ(ÿÂøDü7ÿBþ•ÿ€Qÿ…lQ@’hzNš<ë .ÊÖVWBð[¢1]Œq:p?*Ç?ñýgþüŸú&Jéõõþÿ 5sþ?¬ÿß“ÿDÉR÷$¯-ø§ÿ![úàô*õ*òߊò°ÿ®ÿB¥ÆÏX¹ÿZ¿õÍ?ôUeÿYkÿ_pèÕ«W?ëWþ¹§þ‚*»"H‘w(!°”䃕 Œ—PEGö[_ùã'þOÿÅÑö[_ùã'þOÿÅДTeµÿž2àTÿü]eµÿž2àTÿü]IEGö[_ùã'þOÿÅÑö[_ùã'þOÿÅД֊&š›Êq$aó…qцävüé¿eµÿž2àTÿü]eµÿž2àTÿü]hhËéÿ‘ÿŠ£ûF_OüˆÿüUgý–×þxÉÿSÿñt}–×þxÉÿSÿñtÀÐþÑ—Óÿ"?ÿGöŒ¾ŸùÿøªÏû-¯üñ“ÿ§ÿâèû-¯üñ“ÿ§ÿâèCûF_OüˆÿüUÚ2úäGÿâ«?ì¶¿óÆOü Ÿÿ‹£ì¶¿óÆOü Ÿÿ‹  í}?ò#ÿñThËéÿ‘ÿЬÿ²ÚÿÏ?ð*þ.²ÚÿÏ?ð*þ.€4?´eôÿÈÿÅQý£/§þDþ*³þËkÿËkÿËkÿËkÿËkÿËkÿËkÿ1žžc6:öÆ `s·züÚÏ„õIuU,îeÑÚH4ÔòÕnQì„ Œ´ƒ*À~ïÙî4{¹çûTW¯¶ú97Io€*xM‡«¡ HsÔîá(•¿á1ð÷ý`ýÂøL|=ÿAX?_ð  Ê+þÐV×ü(ÿ„ÇÃßôƒõÿ V`Máoùl>³ÿéDµ­\žƒâmÇö0\jvé*ùĮ쑙ä#8éÁèG­hÂcáïú Áúÿ…6µ;Æò$ëÿö¸ÿÑm\v£yy¡jñéV{}:Âe·w8T³’âÕUÉè‘w0oõ;ØpzɼYáÉà’Õ£ "•%‘€#0ÁÜŠÏ´Ô¼%et—kwLéœ µ+™S‘ŽUÜ©ëÜP{=sU\r®£mqçºD¶èn–hv¡yw$qï1~à Õs#.øm£!Ö?âp÷vŠhaf‹}žûHÚ XÊ™š½ÿ ‡¿è+ëþÂcáïú Áúÿ…WÔ.¯"Ö™4Y®n®K'Úm=öÑŒL„)±³åRÄÝå1$×IXð˜ø{þ‚°~¿áGü&>ÿ ¬¯øR³r°õù|=ÿ]gÿÑ-Gü&>ÿ ¬¯øU µ­7Vñ>„¶‘ÎÑË1`§ MNÀkÙÿÈÕ¬ÿו‡þ‡wZ•Èj¾-Ñü/â½@j—>SÜØÙ—°WºÜ}8Ü¿Aÿ _Âóúßÿ,m\^­¡mxÚó÷:DžNkÿ!;íXÌ—wç]½9ëž=)¿ðµü'ÿ?­ùñ¬ûÿø'QfŸSÔ‚íÞúh'îÇ ó×ü¨³ ŽMWTH|Cu ðG¥Asw´PB#™ÅÕàÄŸ&ì ´©<œä榵֮£Õmmê$2_Ü"ÚX˜ćí“)i"eɈ*Œºãçc»–Yaø¥á ޾”¬jmì@å‹O¹94ÿøZþÿŸÖü‡øÑ`à¹.ìì|9f÷Ó\ÛÞh¢à$Éò b ª¸”çvãò¯=sÚWÿ _Âóúßÿ?ákøOþ[òãE˜\í«‰ñÿüx_þÂöÿú5(ÿ…¯á?ùýoÈ`x‡Æz'‰5_A¦Ý–=VÙŠœA•:síBAsÖ×þ<åÿ®‰üš¡ª÷úƤÙy¿™"ìܶg¯˜õ¬¿øL|=ÿAX?_ð¥`7+’¿þÂþÙ¿ÿ„·û;o˜¿ÙÿÚ[<¿'ËMÞ^ÿ—w™ænÇÍ›¸ÙZ?ð˜ø{þ‚°~¿áGü&>ÿ ¬¯øQf)âjV:Ž ,ïá÷wQ­œÓÆÓÂb·•Ä¢(0RÑ ÎÀ«—ætïõ+ý+Sm.ã[™lÿq$úœé Él²-Ç}‚0¥à‰Ae<ÈFrWð˜ø{þ‚°~¿áGü&>ÿ ¬¯øSûsU>&†Ú ZÍíD–érξeì,ˆ^e!,ÿzL:: )È[=ƒÿäIÐ?ìoÿ¢Ö›ÿ ‡¿è+ëþÂcáïú Áúÿ…nVŒäQÔ¿ë—õÂcáïú Áúÿ…døŸÄú-÷†¯í­µdšH°¨ É9¡ ;*òߊò°ÿ®ÿB¯R¯-ø§ÿ![úàô*#¸3Ö.Ö¯ýsOýT5Ë\|JðëMòÉpÀ*®á ÁÀ?¥Eÿ #Ãÿß¹ÿ¿_ýz,Âç]Er?ð²7Hæ_‹þÿ/ÿ§’ù—âÿ¿ËÿÆê cÁ6þ#ÖÈîEÌÞ&¸Ó®-å¹M² ­"¾Áå€ðCžHÁl_|;sa©¥xl%Òoo…„¥^ÝÕr Çe!þéT9_½ƒšŸe†¶±üÈæ©Ü¶>5Hæýþ_þ7J>4Hæýþ_þ7YøSÂèV:¦¡¬^YÛê’]ý•ä¼ImMÈ‘°‘³‚ßàv·(¦LŸeà(ìíoÁF“ºKé%ÐZÈÜ1•Ý,Àn6~è‚x$¿ÐÒTpÿËùÿŸ˜ùêw4‡Æ9üÀ¢ÿ¿«ÿÆéÃã ‡þ`qßÕÿãu&¹àŸØjö­¨Ë œz„6KåªÃ´FlE )?7 -“\¶§¡hú?‡,u:ïP}FK¥¶š7"¬NX£#ÏÞÆWz#G+Z;úƒEÔéÇÅùüÀâÿ¿«ÿÆéGÅÙüÁ"ÿ¿‹ÿÆëâU¶›eã[Ë]>Ëì¾^Íꌢ#˜ÐˆmêsÉÉ9â¹1W 5EK—6K«4ísÓGÅÉüÁ"ÿ¿‹ÿÆéGÅ©üÁbÿ¿‹ÿÆëÍ)Hæýö¿üEyЧŠ>©G·âÃÛO¹èƒâŒ‡þaßkÿÄS‡ÄùüÂ"ÿ¾×ÿˆ¯<ñKê”{~,^Ú}ÏAd?ó ‹þú_þ"œ>%Èæýô¿üEyø©T£Ûñaí§ÜïGÄ™ü¢ÿ¾—ÿˆ¥äÿ T_÷ÒÿñÁŠx£ê”{~,=´ûØø‹!ÿ˜\_÷ÒÿñáñCÿ0È¿5ÿâ+…ñKê´{~aí§ÜîÄ)üÃ"ü×ÿˆ§ˆù†Åù¯ÿ\H§Š>«K·æÚ}ÎÐxúCÿ0Ø¿5ÿâ)ÃÇ’ù‡Eù¯ÿ\`§Š_U¥Ûóm>çb/üwÿˆ®ç\çX­K·æÚ}Δx²Cÿ.q~KÿÄӇФ?òçýò¿üMsbž(úµ.ߘ{i÷:1â‰üºEÿ|¯ÿJñß ÿÄÒnOùáýð¿üMd x£êÔ»~aíêw5†³!ÿ–ßµÿâiÃWÿË¿ïÚÿ…e x£êô»~böõ;šcUÿË(¿ïÚÿ…8jrùeýû_ð¬ÑR _W§ÛóoS¹£ôÒȨ‘DYˆyiÉ?…XÝuÿ<í8ª…‡üÛ×Uþb¹ßj6z½ü#“Íq¯´m0öòÁÞIAeàãk‚ ?/#§5x›I/ÏüΊ2”ÓmþGky~ö¬·?eDi5ǖij O'úô¯/ø­;Í©iÛˆ b@dúÃò­Yà¹ð¦—,zåõÃjÐý­ï2²Ç>ñ¾68‹ià à c9ÉÉø£ÿ!-;þ½Ïó¬´qºV4WN×:‰¾Ö¼Eu¤¶‘c-È·‰Ä¦'U)½# Fâ=å\aðŽÅ¬vË£J°Â6Â1hש¼Ìœ’IÏsÚ¾„Ó?ÖÍÿ\âÿÐkJµ§‰” ¢’¬î—áOœÍ£ÜÈò>gˆÈ?߫׸©yäý©uyü™h¼Ý@7— èË—á†x#šúVŠÑc&º/ëæD©©;¶|Ì< ñ'þ}5øùû_ü~/úÿùë÷þÿû]}êÌþø¥uŸ´®¯6cxO™¨Ê67//÷NGC_HQG×gÙ}ßðEìcÝŸ6Øx7â^—ƒOƒT´…›yŽÞôF¥¸ÀqÎüª¾øò Yí¢Òîã·¸ÛçD·M§+¸nÁÁäg¥}3E?®Ô쿯˜½Œ{Ÿ4‡Þ;ûØ¿³.þÉæy¾GÚfücvÝØÎ8Ï\U¶ðoÄ)á¶¶¼Óï¯,­ÙJZ\^nˆhqŒŽ0@<_FQKëµ;/ëæÆ=Ï»Ðþ&Ýë7º¢Û^Ú\^2´¿d¹X”…Q…~@ äû䚪žø7¬:šÅrÌó ¼efá‹ ÿ1=óÖ¾‡¢’ÅÍt_wüûÝŸ:\x#Ç—Á Õìñ[®ÈR[•e‰xP[Àéè*ðçÅßô—þþ'ÿ_IQUõÚ—õó°‰ó€øuâßúKÿÿЧ‡~,ÿ 4¿÷ñ?øªú6Š>»S²þ¾aì"|è>x¯þ€Òÿßiþ4áðûÅ_ô—þûOñ¯¢h£ëµ;/ëæÂ'Ï#áÿŠ¿è/ýöŸãNñOý%ÿ¾ÓükèJ)}v§eý|ÃØDùôx Åô—þûOñ§øŸþÿßkþ5ïôQõÚ—õóaÀ‡·S²aÇG…5ßúËùñ§ ëŸô—óã^¿E[©Ù°‰äCÂúßý¥ý?Æž<1­Ð>_ÓükÖ¨£ëu; ö<œxgYÿ |¿§øÓ‡†õŸúËúW«QGÖêvAì"yXðæ±ÿ>þ”ñáÝ_þ|%ý+Ôh¥õ¹öAì"y€ðö­ÿ>2þBœ4 Wþ|eü«Óh£ëSò«ÄóQ êŸóã/åN©ÿ>RþUéQõ©ùÕâyÈÑ5?ùò—ò§RÿŸ9*ô:(úÔüƒêñ<øhÚüùËùS†‘¨Ïœ¿÷ÍwôQõ©ùÕâpCIÔ?çÒ_ûæž4«ÿùô—þù®êŠ_ZŸ}^'4Ëïùõ—þù§6÷þ}eÿ¾Mv´Qõ©ùÕâq«e¨ÄDۺʿ2Œ²†2Ù“ý‹âßú /þ û:ôŠ*'UÏâKúù—|»3̦ðψ¯Ü^ßù±Cu”oåÆ¿u#…8TôOè:©}ªAgú…åìצîâ$ibi~ò#…S¯þ#ÉÍqzÄßj_ð]fXÜÇâµ³±‡tRBöÙ(31WÝ·i;ç Áσâ>­©Å£Å¨Gö}M|A§ÙÞX=ŋۉ•Ø’DçÍSŽܲ­z¢xkAŽâîá4M5g½GK©ÕN®ráÎ2Á$ç½xkAµ·ŠÞßDÓa‚+uqÚ¢ªL€€àq»­y_„|_âM;áo†/&½‚þëZÕcÓm漎I óÊåc&fá0 lÇœUÈ~$øª÷[³Ðl,ôgÔSÕ4ך68­‘]$(>~WæÎÞs‘é á­’õDÓJ_¸{Å6©‹† X8ùÈbNNy9©-ô-ÓìfÒ¬aûÿ²yvè¿gß÷ö`|»»ãï@?ü'$ÿ…ÿoö\nþÐóþÓöy>Ïý•·výÛ³çgäÎ6oâ´>ßyÿ ×û;ísý‡þ¯?ìÞaòüÏ´íß·¦ìqž¸®‚ÓÃvvž(Ô|CæO5õôQAûæ ¶ñ û‘q•V?3 [š“RðÖƒ¬Ü-Æ©¢i·ÓªY.­RV ’p q’N=Ípð±õí7ìÖ?ÙŸð•ÿÂ7ö}ç}ßõÞní¿{›:q»½XÒ<qðâçÇZµÅ¦šñL`µ†ÆId‰ÄÆ8Ã?š™ Ç’ÝTk¸þÂÑÿ¶?µÿ²¬´ÿç÷ìéç}Ý¿¾ïzqQ§†´î.îDÓV{Ôtº‘mP4êç.ã,òAÎ{Бë^8ñMö§m¢L²õ+écS–9ã‘¶KLá—+’¤0#î‘Z—Þ9ÖtëJ%¤·rjzFš—g1#O3Éä™Hå8T)œ‚ÌÄsèøOÃvöw6pøJŽÖëoÚ!K(ÂK´åw(lFzT‡ÃZ ·¸·:&›ä\$I<eM²¬`à `…¦8ÅyÝ—ÄOj~#Ó¼= éP]IªêzmÅÛÚÉ"7ÙQ]c‚»ƒ`‚íÓ9íZ‘øšçÅŸ¯|DâK ÇÓ.fͤïIaÞ+) hóŒž aœö–úiö?³iV0ý‡Ù<»t_³ïûû0>]ÝñŒ÷£û GþÇþÈþʱþÌÿŸ/³§“÷·}ÌmûÜôëÍy]§Í¥^_[ëz}‡Ÿ²H#–;¨™ñ·s”`S²ÃîñÌz¿Äohây.¢Ñ¤O ¦šn`Š sr× ž`I Ÿ [i(Üc#×Ò ðÖƒko½¾‰¦ÃWê8ãµET˜ ÀãwZ’ãBÑîþÙö*Æo·lû_™nöŸsÌÈù¶öÎqÚ€8;ˆz–›¯hwíi&©e{cgc=­“¹’å7*š`_æ2ÓÓ ÏÚøÓÄÞ$ñŸ†,Òxô»È5=[O¹BŒÐLa‰L¬¸$Æ<ƆA#ŠõË G»ûgÚt«¾Ý³í~eº7Ú6}Ï3#æÛÛ9Çj¯ÿŸ†ÿ³¿³¿áÒ¾Ãæùÿfû~_™»öã±Æzâ€<ïIñγ?‰ßÃöIi ÷¾#ÔíVêèÏr±Åm?´ å‹• ÍS°ø¯âMjÅnlíô«O+ÃSë3,ÐI7™$3I"‘"íVØÎâ¹ÇÍÖ½R h7VòÛÜhšlÐKpn¤ŽKTeyˆÁ‚0\Ž7u©?°´úXÿǧØãÝ?ãßþxôÿWþÏOj4-OûoÃÚf­äù?n´ŠçÊÝ»fô ·8Æqœ Шà‚­íâŽ"@‘Ç…TP0€ã%QEQEQEQEQEQEQEQEQEQAéÓ4„ýi >•Ã[jþ,ÕÞök½ÞÚÛ‹TŽ{d|E+G’Âe¹è:âžÓxÔÌOÃçþá³òEW+ÎГýÓHIþëW מ5SΣáÿüÍÿÇêÔ,ÈnÏ‚?tܣ樒°ÑíšgúÙ¿ëœ_ú iVn™þ¶oúçþƒZU+a³Ÿ²ñdwL’i×Ö¶Ÿk’Ê;éü¯&I’V‹hÚå—.¤)uPNw2‚jÞ1Ñôí3Pº‡P±¹’ÆXíî#[´ $F¾s ùjüÄ‚@V8$b³ì¼=¬4m¥ß%Œzbê²jK<óKþ–×1¡Cª|ÅwÏÂÌqô߇·ÖvÖ6äÁ»Nû$Q\I©\ܣп \ˆßä·ÊÛ‘C •”/ÌÀê#ñ–‰ªK©êÚU‹6ЬڄF9IŠ9 ‰” W’AÆIÔ“VÓaÕ!ÒåÔ-P™7ÅhÓ(•מU3’>VäÇÒ°ì|7ymã»Íqä€ÚÍçí@Çxß’ Œc­¬™çºúœsú/ÃÛí5´ø® §ØežA©\¢G%¼P¦Ùq¹0ä¸eX Òkþ4ÓtÔíexΡg¦6£´“,fåBÊv§RHò[vày­üK Í¥ÍªE­é¯§Âû%»[¤1#qÃ>p̼ÜzÖ?‰|;©jO­‹hɬhçNs<¬†UŸc·†ið~îй³_ľ½Õ¼@uX6%©Šy-«HÑ‹µ`eˆŒbéH+œì*@4ÐjZÜ6zM¶£oåÝÁqqkmƒk,óGpà €$Ý9©"×ty¾Ýåj¶2gçí»ný›Ï™ÏÉ­×túV:øftðž•‚)£Ô ½yÒÈ£mÚÜ8ó³»`0Üq¹¹ÂŽž ÖÇJ¶•ìSû Ò+k&Y¾ÙåÍm(iÁäçìŠ0<Ìy„ó· Ö/‰tK']oM)~å,Ø]&.0R#çç!ˆäâ«éþ,ÒµKƒmiqÜ%ì¶3AçF$…ã2Œ²nÎÉr Hç#Ÿñg‡Þê8®å½¹¹VIG%ÓÍåïrFØ]A(X²ä “x³ÃvövדxƒJŽÖëwÙæ{ØÂK´á¶±8l:TzïŠtÝk[In­P¹¸·Š+&¹T•ÖY–-ê½H\³p9ÚFGQ‡áo jzWˆåÕo<ˆã“í?ºó^:ù‰f«™ePÍÿÎNznP2:SÓ|¯iz5žƒMš¸Ó.®®åÑ¢ke¶WDO,‡[d1dûø c$´º×t{F :óU±·¾Ÿo“m5Â$’n;Wj““’êh›]Ñíพ}VÆ(m±çÈ÷«]£‰?/ÎŒ¼ÿ‘Ôåõý'XÕ|C¯ØYÚÀ,u=ÞÊkÉåtò²÷AŒj‰D€•,W‘»"Ä^¼°³·šÊ+¿·ÖîõS9‰.<ã:(yG2óµ¿Õ…éó ˆ|Q£Ï®G¤G}ºšÒ+ËoÞ¦.c3.røp0Sžx’?è3isj‘kzkéð¾ÉnÖé HÜpÏœó/÷µË§‚µ!k«Z´ö5Û)íï;fÒKu(1¿¾®Šòcâ<ÿÕ±>¯]ëqøŠXtØõ w„Eb·nÑH±¥Êe¦òR~ÖÇ6ÿV~l¨Hšî%å­œz­‹Ý]Ä'¶…n¼ÑHt\å—œŽ85_Mñ߆t½jöX,#¿´K³LMÑy¬»Ž3µCxáIà Ç—ÃÚÅÅåÂÈ–)k¨Zjw2-óÁ$" Ä‹å"“n>rÈFòvü¸i-|)2è~ °»“ á{€ÙefŽÖHLŽH‘‘8Æ3Ô@z¶›6©6—¡hú„)¾[E™L¨¼rÉœó/$wµ^Ãĺªû4íoM¼rá6ÛÝ$‡qV`>RyÚŽqè¬{ãî~Ü^>¥i,‘­½ÃßKã_\ÊQ®VaòÚdD…|ömÁO¾VFÓ™àMHkÖz–¦ºk$w¿l’‘¥ Þf¡"í,ƒ%Zò(ÇŒ —?î/R´–HÖÞá壘ñ¯®e(×+0ùm2"B¾{ À¶à§€_*Ôhþ)ÓuífúËKº´½‚ÒÞ ZæÖåeRÒ4£aÛ×øÇ¼v7ðÝ÷‡­µÏí›{ö.û‹¨ÓË‘?”çv€W9hÖZÇü$:–­«[XÛ}¢ÒÚÚ8­.žõo3%£LgΆ²ôý^Ò-ôF·‡M¹ŸG²“K$»x–xHƒ1GÌêðÃæûç€u—×özeœ——÷pZZÇóO $–< ’ãUÓ]Ñä¼µ³U±{«¸„öЭš2 ‹œ²à‘DZφï,4 ZØIÕÖƒåì±….6Û¼,”âBÝîã¾Ey|=¬\^\,‰b–·ú…¦§s"Ü;<B ÌH¾X)6ãç,„o'oˆ؇޸³¹¼‡ÄT–¶»~Ñ2^ÆR-Ç ¹Âäð3Ö¤“ĺ :\:¤ºÞšš|ϲ+¶ºA·<+çü­À=¥ríà­HéÞ·óí7èöVö÷{aš;‹)IO—‘¶Ú@3ŽJú’ WÁš„þ"»Ö 1Ìd¸‘£·]NâÄìx-P³K –ÈkSò`‚‚¸ “ZñF ÅsöÛèÔ6’^ %•<ùcEfbˆH'„onݨ}ïL§rúŠçüSáÛ­WQÓõ 1æÉkÐ?´§°Ü$1¶ï6XãÊa;³Tf;? ÜØßéW0ǦìÒíᲆ%GdA6´›˜±WL¸ŒøV”ýñ1€\¼ñž‰c¤‹Û‹ØfÓÛQK%¸‰§’!”Pä? Ü©*pyÇ5!ñ‡‡‘ òkZjY”FKƽ„E!f‘B©ßœæ'ê0ppIV“³ð±Žte»ƒOµŸJ[;ù¡¹{w ´á¼—Eí Èà°@‚›ðk¾/Óõûı·ò|Ÿ6n\lŽù>V1®sö¨ tA¸róĺŸokq{­é¶Ð]¦ûi&ºDY—å 8a†#ÔzѪëCM¸·´†ÂïP¼¸G‘-­La¼´*É‘Ñp  Æsó #ÏõýYÑ´ínÒÎÒ=BãÄ6÷vŠˆ'Ä;î.dŒïX™"ìæÔ?1+Üx—O›S·‚ÝtX€9wT˜¢£…*<™8,3Æ=óÀRÛÂíÆÖ`8êAÍTÕõÍZÁ|LR”GH,¥òãÌ2%ºNîá•·0äg ×$ë—MÓ­u{ÍqVâî(ã–]à «œûä ûJ½Ðô»ë=bÖïR–xuI²+ó1Ü$ Ÿ˜œï4ÀŽOM µÃiK§½ÅÕ¥±¶”Éu,Öë)uòv€û<¡HrI)7¸zŽ5I£±ûØRòYU 6÷¾d`‹»(Ú9·À$ŠL\2‘·( %Kco`|/¤›É®„3¬’ï8K¹U#g<‘ m±Èw6]·ÎÇ9c˜Ç„40ZÒIc¯-į)Þѱc#1ràÃ×'rùk´Œ ¦þ)¼†ñÖm2kkwma{"]’éq0‹hL`<`ÏX²¼vðW±ñÖíKÖu;û3NÔ-$¹Y þs&ØDÁJ¢ÿ,ìþ—8gØ6…ô‘y цv’-‡w+$Œ€’D-¶IÕøfùç*0MáëvÓ´2ݼ7N–û> y‰ÌI¸œ®±>rsåàä1  ®.4ëi¯-~Éu$Hó[ù‚O)È“pá°r2:â¬Ut±·QšýcÅÔÑG ¸üÈ…ÊŒtàÈÿŸ°«QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQER¥-cø¥,_Ãw‹¨é²jV¤.ëHíÚvî~Eœ6N1žÔ !»ðw†/n¤¹ºðÞ“qq+ye²Ï©%rM`øƒBðO‡í`šoi×\L ‚ }> ò9Vl ÁT|¨Ç’:zàW)ö_ ÿÑ5»ÿÁ Çÿ¬ÝItK]W@—MðŒú<ÃPÃ\I¦Kn|™~]Ί88Îxö­T5܇-Üj­á?é¾Õe’Å­Åîÿ!’dGC"ó'͹U†ç<×y¢x{Á> ÑàÔì¼%§&ܽ„!••вœ) ¤pHã‚k–Ô5§9¬ Aáé4kï\jw&âç}Úi3L$ýü˜ùÖ2ŒcµkRI‘jz­Ÿ„ô-2ä\ØxvÒÖpÛÛ$lëÈLÕö¶­n??þƼÓì¾ÿ¢kwÿ‚þ5^“§Û[ÿeÚ [ ííü”ò¡d1˜×h•+•ÀÀÁéŒV{¸Ój?çÎçóÿìkÈ>+ ºÅ’à®!aƒÔ|ÕíÔϼÇñÿëWŒ|Yu»1‚1 ¿z¢nåDöÍ3ýlßõÎ/ý´«”¼Š%_6Þ qc͉_(éqUþÍiÿ>?ø ÿY&UŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽÎŠã>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâhæAc³¢¸Ï³ZÏ…þGÿÄÑökOùð±ÿÀHÿøš9Xìè®3ìÖŸóácÿ€‘ÿñ4}šÓþ|,ð?þ&Žd;:+Œû5§üøXÿà$üMf´ÿŸ üÿ‰£™ŽË™­øLñ³Õ-¼øA"…‘£ea‘•e!Á#ƒÐ‘Ò°>Íiÿ>?ø ÿGÙ­?çÂÇÿ#ÿâi󆟅>#þA÷Ÿø3ºÿã•ÒéšE–§C§éöâXA‰ÆNI$òI$’O$’MsŸf´ÿŸ üÿ‰£ìÖŸóácÿ€‘ÿñ4sßqriˆtñïM0/÷Oç\§Ù­?çÂÇÿ#ÿâhû5§üøXÿà$üMãå:¯³¯?!üÿúÕáŸ5ûQéÿèF½'ìÖŸóácÿ€‘ÿñ5æ€]SO ªª *€ùº:QÍpµY¹ÿZ¿õÍ?ôPÔ×?ëWþ¹§þ‚*¤ûˆ‰FŒÉ¸hQYúf­£'dSy÷1¬F@Y–ŒE€ãŒ…'Óp¡@Q@b7‹ü>ŒUµHC‚rå[u¡ë ü0²¿7ãPXDM!Ù%÷–ÛU~fm®pyÇ¥4®&ÊŸð˜ø{þ‚°~¿áGü&>ÿ ¬¯øWN¾4ÓäÖtëb»^¤Ùak0’ #h@Y"Ùº0DÁ·>ÐÓѪúgÄ *ûFÒïf·Ô¡ŸP·óÖÚ=6æfXË‘¶,²* àmlðiò¡\Àÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý»yÿ ¬¯øQÿ ‡¿è+ëþÑÜøÎÈ\é¢|ˆd»hï>ßo%³Ã¶žQ&ÙB¹‡ÈÚv¸ê64ÍjËWóE«N²E‚ðÜÛIo"ƒœ6É[iÃØÁ*Àƒƒ•ÎþÐV×ü(ÿ„ÇÃßôƒõÿ ìÛÅJÝIšÝÊ4ÂÒS ‘¥X‚ Bìfó)‰6qµ±Ÿ¨øÊÖÃÅi›gšÀ¹Ö3ÜIÈ-™F#Sò”¸É8#%FAàœ¨.sŸð˜ø{þ‚°~¿áGü&>ÿ ¬¯øWWqâ{xµhÄsÁ&˜ºÚçž<¹&Ym„{~ÿ™¶`†$ª÷€k â$ÙÞ]<ÓÕ§Ûnö’ÄñÙ⌡¿åŒœcÿ ¬¯øQÿ ‡¿è+ëþÙÙx£I¿ÔZÆ §ó„²@[IcŽI#,FPŽÀ£ð¤œ+€‘Ïé^6žûV†;¦‚ÖÀÚ>£öƒk+$¶¯$þK´¹Ùoû¨QÉ“ïo*4r ¹™ÿ ‡¿è+ëþÂcáïú Áúÿ…më;µ³·¶žÓ…Ê.£¿·žÙÒ5µ¸˜>ÖMáKAÁ8‘Ƥ^/Ð帞w$"™{›ya€´E„euÅv9!XðŒz) åAsÿ„ÇÃßôƒõÿ ?á1ð÷ý`ýº{ÿ@|?¨ÝibC¨B‹½µí¬°3O)Ùd+ly]Ü/ ó §ÛxïI0L÷Þ}›&¡6ž­åešDyUDm³3XíLÄ',@'* œçü&>ÿ ¬¯øQÿ ‡¿è+ëþÙÝø§F±ÓýÅæËQ-Ä;ü§?<S(ÀùDývñœŒçÜøÎÈ\é¢|ˆd»hï>ßo%³Ã¶žQ&ÙB¹‡ÈÚv¸êT9ÏøL|=ÿAX?_ð£þÐV×ü+Ñà™nmâ$@ê$‘€#<«TûïRQÊ‚çšÂcáïú Áúÿ…ð˜ø{þ‚°~¿á^—E¨.y§ü&>ÿ ¬¯øQÿ ‡¿è+ëþétQÊ‚çšÂcáïú Áúÿ…ð˜ø{þ‚°~¿á^—E¨.y§ü&>ÿ ¬¯øQÿ ‡¿è+ëþétQÊ‚çšÂcáïú Áúÿ…ð˜ø{þ‚°~¿á^—E¨.y§ü&>ÿ ¬¯øQÿ ‡¿è+ëþétQÊ‚çšÂcáïú Áúÿ…ð˜ø{þ‚°~¿á^—E¨.y§ü&>ÿ ¬¯øQÿ ‡¿è+ëþétQÊ‚çšÂcáïú Áúÿ…ð˜ø{þ‚°~¿á]þ£%Ià±ÁÕçwü9c«¾“szSPIFÜi²,z6r1Œç#Í&‡sCN×´½ZëìÖ‰q0RåP ’xàUÓÿÖïÉÿ¢dª 3ÉãøC´i7*€ù—œ üªùÿë?÷äÿÑ2P•å¿ÿä+aÿ\þ…^¥^[ñOþB¶õÀÿèTGpg¬\ÿ­_úæŸúª²ÿ¬µÿ¯¸?ôjÕ«Ÿõ«ÿ\ÓÿAV_õ–¿õ÷þZ]C¡™âhÌš²ï- ð\*¤O!vŽTp¸EfÁ*!N'®rÎ |Gâk]FîÏÉ{y"‘­åµ¸òöÄ—Yd–Á}÷ B〛=uEbé:UÕ„Éæ%›§™}!e_:ãÌESŽi;‡ª®3ŒÖÕP0¢Š(ªÞÓ?µþéöÞw•³P;¶îÏ“{æíÆG]˜Ïlçž•f¦´™,m’ÚÖÝ!…3µÜ““ü]I$ŸRi§a4J¾šÍ®Ú߯³ÍpÌñËn]|—ŽÙùµB7U¸5—†æÎ;‹‹&}±l"GQ2–ˆ˜—^>èÈ­_í}?ò#ÿñThËéÿ‘ÿЧÌ+µ ]Ãá7ðý…Ä—{ÙZéK„;¼¹æßÆ_ÉlŒÀ;ˆ©.´ VóÄ2][Øÿ¥}šÖÙom…ÌAó<[-æK0å‡ÜCŽ2ÒÿhËéÿ‘ÿŠ£ûF_OüˆÿüUÁb$ðdF n¯§»›N•¤’YÝݦRâ]€³– ³G.K0XB’C16-ü1öìßôÍßbÕnõ/õXßçý£äëÆß´uç;: ðÏí}?ò#ÿñThËéÿ‘ÿŠ£˜,gj~½Å­ÝýÆ›{yö(¬îîo´¨çfØX™!í‰ØÈää:ðŸ.†ÔŸÃ——×GWž)¯¢{YÚ݃åT’2ìÛÉl—|®6Ùý£/§þDþ*í}?ò#ÿñTsŒ­á÷ö^½«çiPyrÅ'ÙôÍ/ì‘¶È®cäyó´çw¤`cœŒýkáÅÃxoɳ½ûEÕ¦ˆ–ÅåóÞ+[¸’Ø]Æèzlês‘ÒÿhËéÿ‘ÿŠ£ûF_OüˆÿüUÁc;Qð$Úô¯>·ªÇ$ò§‘)²µ0©‡È¹ˆ îCæíÛq$|ª6ŽI¹¢øN] ²M¥Y\O,Ι¤¥´f8ßs)]ÌÅ™K¦âØPAUÒÿhËéÿ‘ÿŠ£ûF_OüˆÿüUÁb”¾y¯ïî¾ß·*ÏvÍ&U&YgÌ+,›£@]DlÊXÊìŽëÖÚÜšÜZî›ý¡3ÌeÝ¥¹ˆ¬‰l˜UóÁ}•NKî< VöŒ¾Ÿùÿøª?´eôÿÈÿÅQÌ3¬üÑÙjzyŠÑàK{-6ËûFÝn¢–ÚÝ+ÉeÜþd“ª>T qó\OD`Ñêú{¹´éZI%ÝÚe.%Ø 9`«4p2䳄)$3/öŒ¾Ÿùÿøª?´eôÿÈÿÅQÌ+_xvúËFŽ].Xîu >öûTµŠHð³K2ÜìˆüÃ5À³ÎÞÙâH|g{¦ýªscs¢A£cÌXâ.ýØÁb&þî^ùÀ—ûF_OüˆÿüUÚ2úäGÿâ¨æ W ’çKžÔO¥XÉ7˜éšBÛFC[O%C–fh-’øÂ€’Ìu/¼££G¥Ü_H ûmõÔ`3-ÒÜ©A’@*.~övtç‹?Ú2úäGÿâ¨þÑ—Óÿ"?ÿG0XʃÁrØ}–­ô¤†çP·–ðéZrY$qÛïš6Ææfc2Ƨ,FÖ8U;˜ê[ø^h/í\_Ælí59µ"û9ó7L“‰Ÿ~ÝpJáFàî'u/öŒ¾Ÿùÿøª?´eôÿÈÿÅQÌ2µ^j–²éˬÁ˜ÒÞÜG²-2ÉsèÙ“Ì T5˰ÀQž¬t5Ûë~#‡TºŸ0Çänƒ˜’éU•ì Ð`Õ1‚ND¿Ú2úäGÿâ¨þÑ—Óÿ"?ÿG0XÛ±†âÞÎ8®®¾Õ2dŒa Œ¥€ãv1’䀠í+œþÑ—Óÿ"?ÿGöŒ¾Ÿùÿøª9‚ÇGEsŸÚ2úäGÿâ¨þÑ—Óÿ"?ÿG0Xèè®sûF_OüˆÿüUÚ2úäGÿâ¨æ ÎhËéÿ‘ÿŠ£ûF_OüˆÿüUÁc£¢¹Ïí}?ò#ÿñThËéÿ‘ÿŠ£˜,ttW9ý£/§þDþ*í}?ò#ÿñTsŽŽŠç?´eôÿÈÿÅQý£/§þDþ*Ž`±ÑÑ\çöŒ¾Ÿùÿøª?´eôÿÈÿÅQÌ::+œþÑ—Óÿ"?ÿGöŒ¾Ÿùÿøª9‚Ʀ­4Vö~dÒ$qÀ³°eO½qÅáùµx5i ƒjFÑEp]wª·P~¿L¶>ñÎÕïÙõ(D7öV÷Q+o 8gPÜŒàž¼ŸÎ¨bhô.é_ø)7q”lç†ãDZ¼2¤Š4™Á(ÀŒî_JÖ?ñýgþüŸú&JKK-7O‘¥±Ò,-ed(d†-­´õ”ÿÇõŸûòè™(Jòߊò°ÿ®ÿB¯R¯-ø§ÿ![úàô*#¸3Ö.Ö¯ýsOýUYÖZÿ×Üú5jÕÏúÕÿ®iÿ Š«/úË_úûƒÿF­.¡Ð’ŠçükŸá¿+Ȇã}íšù3œG&nb[ƒòž‡ƒÇcX°ÜÉ£Ù½«Í…šŽ.Rž^…¶4lë³d’Dâ€n•×Á º¢¼úojKi4ªyÃlòi‹²1ý®âY•y¹#€â-¤ùÙ ˜Ýðÿj@÷ï$ërïdå¶W¸•à(`Ha¸œŒÅ¤¦$ÑJò¤r#´M²EV£`6¡Ãô#Ö¼úOjZèv¶šµ·ö£ÚB5Ê#´7 qi #*y(+ò÷è@#§ðò4Z‡ˆ#y^f[øÔÈàr--ù8dû=¨°µ‰ây&K+4‚â[všöZH› ›^ÑçûN‰a?ÚþÙæÛFÿiòü¿;*ý¿Ãž¸íœUÿ¨Ó?ì'mÿ¡Š®¯}-šøY7F’ºy©Â¹`§;1ÉFü¾”.‘y{|Q©Ÿ2F…1sÌë»r“–#¨Ú} P×ôû·Õ5ÝJÕo–êßG…¬šÞI^uk† µNÙH;>V ÷º|Üç¾’±íûL¸ò5«‹«Ï!î~X¤ûO”Ðì<çÍp‹‘ŸŸ¡Ã¥ÿ„r_ú5ŸûüŸüEC>¶Ó[E/ˆõ•{™ P5æϹÇÊŒyô¬­ içÖíäÕ$œj—©|Ó´æÜ[«Î¨î²B>O˜`öÝV¢»‚­.æáï>É¥è¯wro3BX äåÙÀ$d˜q» vºBÞÂÒÛøYtY$ˆŸ5ÌŽQ‡)ٔ¦ÿ„r_ú5ŸûüŸüE`ÚÚjV2xvÚT¼šu¶·ûE¬fx‘&-ºyÞxÿu+g%£“ïc å°ï¸±ÖäµkYg¾òì§¶±G‚YVK˜Úâ&yY† @\c n;b€6ÿá—þ† gþÿ'ÿGü#’ÿÐÁ¬ÿßäÿâ)4§¸Óî®ìdŠú[o·ù6’HZ]‘ý$,Ò9,W˜»‰?1 Ð`sz$ZÊÃ;êW𼓛aö˜ µ™ ÝoM»Y6Ão»Q /„Ú(¥ÿ„r_ú5ŸûüŸüEðŽKÿC³ÿ“ÿˆ¬MDêo¥Á Ѿ†á§w½¹Š+©Uf ¡R$·to)•‰VÎÌ8ó⮓k¬êÎ}Qµt–îæ®ÀšhBÅö‘ˆU Gþ¸, ås‚A߃H[™®b‹ÄzË=´‚)‡šƒkWÇÜçåu܉ÆA)•ÁÛ€ËþÉè`ÖïòñÂ9/ý ÏýþOþ"«ÞÏ~Þk9g¾·½ŽÒÝæ¼-!vfèH[;¾VÝå·ÈÝšïU³Ðµ2lõ{w»ÒLvD÷7޳†¸ù·íÞŒCÂAp¤dà oÚé { Koâ=eÑd’"|Ô29F§fR? -t…½…¥·ñ²è²I>j™£S³)…aéÒÿdÝËtF©n ¿¿¸ÔŒéqöqkºwV@ÃË$Ÿ$þïæ9=·T–¶š•Œž¶•/&m­þÑkž$I‹nžwž?ÝJÙÉhäûØÈ9l8÷ü#’ÿÐÁ¬ÿßäÿâ*­!l¡YnP vlz” =§ˆµÇ„6Ñ!`ªü¹ ŒoRÃ.Tö&ˆtè'¼šÎ?êÆæ*ñ0!QŽN@Ç’8€ë\òéz…¼7oÚ¥·Øƒ^ ——%ÆÈ‚¦ØdYQ@ü „r¹+Qµž¾uŽ_í@.'‡íRÄ!ÿ‰j»¢q•b`àëÿá—þ† gþÿ'ÿGü#’ÿÐÁ¬ÿßäÿâ+šÕ-µˆ®å³K­F ™9<«»™1@È7C"Ì˹®>bÅAO!1Ûé¢åt»Axî÷B3¢«3í‰ Jƒœð „Ðoü#’ÿÐÁ¬ÿßäÿâ(ÿ„r_ú5ŸûüŸüEnQJàaÿÂ9/ý ÏýþOþ"øG%ÿ¡ƒYÿ¿ÉÿÄVå\ ?øG%ÿ¡ƒYÿ¿ÉÿÄQÿä¿ô0k?÷ù?øŠÜ¢‹‡ÿä¿ô0k?÷ù?øŠ?á—þ† gþÿ'ÿ[”Qp0ÿá—þ† gþÿ'ÿGü#’ÿÐÁ¬ÿßäÿâ+rŠ.ü#’ÿÐÁ¬ÿßäÿâ(ÿ„r_ú5ŸûüŸüEnQEÀÃÿ„r_ú5ŸûüŸüE^Òtcize“SÔ.À‰ñÄŠT§œýjõMmþµ¿ë›ÿè&‹€è¤x­%hÝïA•8ìÕCþ;Oí?ìÏ혴?ç×íCÍû»¾æsÓž9««ÿrÿ×DþM^qmtþ&Ô¢_íóukIÒÔڲȈ–å¥3lá—c<À FÓ’¬èk¹ÿŸ‰ï³GÚîçâ_ûìןÚ[]ÛèšÖ&×e‚[#%鉮 âè¬[„?¼U %cnF[.A%·ü%vËö‹ß:Ymc‡P¸w1˜˜cŽH/ÊÍò\¾ÁÆö€ç…zÚîçâ_ûìÑö»Ÿùø—þû5çfñ›ý–¯5R;ËIwOVò­¶eÿssº^rØe-ÎBü›^Šî?¶y·——Çg—ö›[ˆv¿Í»h‘å‡Ò€,í¶ÿž²ÿß¡ÿÅQ¶ÛþzËÿ~‡ÿPÕ+­ZÆÏí¿hŸgØ­…ÕÇÈÇdG~Ïú·àdñî(Bk{ˆ$‚rÒÃ"”xÞee#[E?m·üõ—þýþ*¡¢€&Ûmÿ=eÿ¿CÿЦ{'%ŒÈ¬‹!…w*’ î૟ ô¦Q@m¶ÿž²ÿß¡ÿÅQ¶ÛþzËÿ~‡ÿPÑ@ɶÛÏYïÐÿâ¨Ûmÿ=eÿ¿CÿЍh  ¶ÛÏYïÐÿâ¨Ûmÿ=eÿ¿CÿЍh  ¶ÛÏYïÐÿâ¨Ûmÿ=eÿ¿CÿŠªkwßKf¯›ˆ£I]0xW,ç§%òúTÔ›m·üõ—þýþ*¶ßóÖ_ûô?øª†ŠM¶ÛþzËÿ~‡ÿFÛoùë/ýúüUS¶¼µ½ŒÉis è1–‰ÃT0äz«)Äõ5&Ûmÿ=eÿ¿CÿŠ£m·üõ—þýþ*¡ª¶ž©h—VW 4.ªÀ¯PC®A䬧P†Ûoùë/ýúüUm¿ç¬¿÷èñU Cuw”+-ÃìF’8Á?3¸Ez³øÐͶßóÖ_ûô?øªr5¼E™d•ŽÖP `uzûÕîà¶šÚ)_kÜÈb„`ÌŸß*1çÒ¦  ÷ú¬ZmžÞîw’@Um­ÚR$à`uzþ²ÿá'‹þ:Ïþ?øVå2¢¸‚9à‘%†E’#VR2#¨"€1¿á'‹þ:Ïþ?øQÿ <_ô Öðÿ¶^h¢x’IVÙ³]°[ÔáIúéO  ?øIâÿ N³ÿ€þÂOýuŸüð­Ê(þx¿è¬ÿàÿ…ð“Åÿ@gÿü+rŠÆð¤RÃáØh¤‰üÉ›dˆU€2¹‘ÁµOüYÿ¿'þ‰’¤¨ÏüYÿ¿'þ‰’Ž I^[ñOþB¶õÀÿèUêUå¿ÿä+aÿ\þ…N;ƒ=bçýjÿ×4ÿÐEU—ýe¯ý}Áÿ£V­\ÿ­_úæŸúª²ÿ¬µÿ¯¸?ôjÒê )‚©f8dšZ‚pe–8@¹ÛqÆ;òGà gV¢§7иGšJ#c¼†K‰`YÏAqB<½ã)ÛÓƒÉçf²ml'þØÕã¹"$HZ,+„|§øˆü0qÖ´mÝžX©`J’§ q‘ùW.êÞ/s|E% 4qZ›jÆŸ<–ÚŒ1[ɪK¹Ò{n^î9# »•çiÈ8 Œ©Æ¶¼—çT†ÒÊíÐjiHÁ­ÕsM>áØò.þ~sn:f´Oˆt¥µµ¹7_ºº¶ûTFÙ’< ÉbeŒûİE¦«¥jÐù'7ž\»X9cU1ï2†O½ÁÆAR20k¸å9MB-nq} ‰Õ±#^¬‡|©€¤ÂßËbD!³önPïçøê{©ïuÏÀ¶­[éŒÐ$Ì šØc˼.>uù °ä˜!‚‘Òiž!Òµ‰ŒZ}מëJÀFÃjº+¡9nWR3× ºØþm ¤ì—//‘9·uŠ $o45URY†Æ$H\1ùH$š…µÕÏŠt ³^GeµÄ“X¬náàòÕÈÿ2 ‡*X!Nµm¥´º–¡ªnfµMA"·¹ˆ¬­s`Žd;Ž ª>ΡH=¾A]Óø›H"srå]w³,0…rT™p¿¹«æmÁFÏÝl^©m¯Çu–Ž ­Ü‘²Ë -̪ÊÌ¡Xæ0ß.vœ¢€9Åóüáö¯íßøG¼É~Ïåý«í9ÙÍû·wÚ¾ÿw·—T¯?á#û-Çý£uªd¶ÿ#Ï€ZJ-yÛ³÷7 Òž6üÊ[Á~N¶/h×0Þ[\Ms ùò¾Ïk,¬àI ªX¨Ü8±ÚpÜSãñ6‘5çÙ¢¹w;‘<å‚CçUdvß/,1ós¸É€9Èí%²†x5tFÕ§—Qƒû‡yÞ#ÏVhKy<óóÿM¤iÚž£yx—ך½½§Ø¶Z‘+F@y®U’3æ¬&/½ÎJ—€#u Ñ4èå·ýžÞÎ7[gX@‰IdF ±™B¶QI#cqòœN.%åDÁåP¨cžœ_ÏëX3øÃOžÝJ¸K‰Œöjêb|$sÉð0JL 穃µ€çï´MGûî;oÖ£wªA4/4†3‹£ØÇd`°‹ÎáÏÌrjÑGi­©Új%:­ŒÒ=Øa$båŸÍÜrÞ¥L¾£gJìnõÛKé­®8âuH’I%ræ@ER[ˆ˜ü¹8 Hdš–©¦Ã¦Â×ÑÍ%½÷îRg$¯&äf*b [î«dÆhËv믲ÿnÿeù–~W›çùþwœ|Ïõÿ¼ò¶ù[¿‡nüsº ºÿMþÑÛûÏí-j H7ËX!òüøŽz ò®ò§†Ë`ãvêxŸFyÄ"ùžA¸eueòãÃ3ä|Ll­»XpH2ïÄZ]¼šgÙ­i¿a,M§L'Œ¼3¿˜‘l–ea¼)2{à"æ×YŽ Ûˆ[W7^©sLÃΊ|Z€¹ÆÒŒØŒ ®1ØкMrKZÏM»wkžæÚA&Yç–2b…Ë|¤#<°ã öcÏ5½/ˆ4Øm`ºyfû<Û¿z¶Ò‹iÃy¤."Úrý¸Ãg8Á>,†ÛE×.R‡R¯™wZÈ‘\<Õ?x@YdK­œ)è€Kö_ô_/þ?ìoßyßñÿçý£÷^_ý6Ù·Íéòg¯ÍŠ«§Økw7çW}PO=ÜP^yw2Æ‚1`®Å|¶ ƒí 錜®pH=ŠjÖ2y'ÏŸs%¬#|ÒÇ¿zôãSòx8ã¨Î}·‰!þÜÔtÛ°ñ˜.Òdòyd4Q0 .6,äH'*1’2Êè—z•äûç}]µÑsc½HmÒ3³NÔ«a¦8 6HÇ;j2uÛE¢Î©wmÞAWiöfû\‘gg*À#L7C±J©8ÆÜt:G‹¬¯_JxôÛ˜W®$eµ—+*ˆŸÝˉóx\ çÓBÛÅš5ÕŒ·‰q2[ÅlnËÍk,[á%Ð2‚ê+œn_Q–,çVÒ§ŸìRÌþUëYYA{,’,«,0l“ºM“%‰;cc SRûU¶ŒÚe§öŒ­k¯›trÒM “l¸qó4¾Z9;F첕䊛QÕ ¶ÕȸHM¦Ÿe%ýÌÏg·?v6_ª €p ùqÆy†×Å6ñÛǨ³GªEkw ’È«9]£BªÁØݵK ž€€ÅÔ<ÿ&OìïíÝ¿bÿ‰>ïµgí{åÝçnçn|œyÿ&3Ž7T6ºÌp^ÜBÚ¹¸òõK˜ÀšftSâÔÎ6”fÄ`mqŒ†ÀÇbšæ™$ý›¿·wÙ~ç{·™DÚ¿Ú_›ý£ržaZ·Ú`òáóܤ²L¿+°„G˜¦ùŽÞ¡˜«t÷ž Ótù®#¼–h<ˆÚVy-¤°TÞB>Ý®ÁA;T“…n88-¼A¦ÝM),ÑÏ,žRC=´ÈNÇpvº‚ˆß F RÈÅ 8½ÓR¶Òn%¸M]u;˜ì¥˜æsºÜEl—”MòL8ý÷/jÓÒí¯î|ClÚ¼z,h’3J¥Àû.Õ”ÉûÏõžyˆ$9CƒÕG¨ÙËg5à¸E¶…¥Y%‘PÆÌ¯’q€ ·=8ÏJ¤|K§, )[à]™V#§Üy­€2Â=›ÊÊ cnHÉÅs“I©®…ª¯Ûæ&ÊÚM&Æhæm×7ÁÙºÉMüm“ÏÎZTÖwÚ´Zzj6sÏ{dmšÌI䥨6±±UÄlpA¶ƒ‘²¶›_ðèó-PyÈ’,¡`²’XÞFÛ0(U »üÂ_—'nÄ‡ÝøšÎÒþ6{«a¥­¢Ï=Ñ9T2È©nC­ûÜž@Ú uË»–öÂ{9¨Í.©dÖŽ©4Ê-·Y7J >I·`NI9Ý“’Úv³‹ ÇÔ^âêÚÖ{ÃxÓ\ˆîæÐ‚Êí”Ài‰U+§?tÚi¦ê+s,Êòlkiœ¨ìWlnw.ˆo™xù†`¶ñfwjnc¸™b1‰PËk,Fe$c  É’Ê>Lòê:°È1«ÏuöÔÍäwzN‹{5ÃK!cÄ€yS#àÈYö²´¸O¸'[k»½VÒ :mvîc<Íp²çɹóAi¿xÿ£Œð9R$nͬèSA$’Äó5Ê›y û¯;"Œ•’ … ?2ã÷ƒûã,¶ñe¤ºµÕ”ëå$´†åD…–tmîP,xò Ë $q’oìúÒÃ)ÕÌ—w+|wÌ 2%ym‘oø÷æ3¼sžwÖ.‚uë¹4k™µ ì¼OóʲÂaˆÊ^O0B o;>b™;®O–+®¸ñ6…%£G{#¬s·Ù͵՜¨òV!|§PÌ#Æ‚£'ŠÐMZÆO#dùóîdµäošX÷ï^œcÊ~OuâŧÚtý*[ô×ZîÚæ9ur¦ìÁ21‡oUóä|¸#øk·µ¿ŠîâúÕÃYÎ °,cI8öăñÍZ¦E P!HcHÔ³9TPf%˜ñÜ’Iõ$Ð袊QEÿë?÷äÿÑ2T•ÿë?÷äÿÑ2P„I^[ñOþB¶õÀÿèUêUå¿ÿä+aÿ\þ…N;ƒ=bçýjÿ×4ÿÐEU—ýe¯ý}Áÿ£V­\ÿ­_úæŸúªÒ#¿–c1†Icy„…;\6 ‘œc¡¥Ô:¦¼i*í‘Æs†¦í»ÿ§ûÿ'ÿ£mßý8ÿßù?øÕÆý’Ûþ}âÿ¾JU  ©›nÿéÇþÿÉÿƨÛwÿN?÷þOþ5IE-¶÷9Ë ùjnËöK‹›Ñ4Ÿ0F"œËyù•¤/)%)‘´ôðåü7‡T‡R¶¬!šG´f€«¬JBÆ$ -âä¹þ.9z ·ôãÿäÿãTm»ÿ§ûÿ'ÿª“áþÝ=í~ÓöÞOÍåìûELž¾Vïø;d°øzXìà[kÄK«kû‹èd’èV—*ÈÌÆ€}«gmßý8ÿßù?øÕnÿéÇþÿÉÿƩ̿ƒåû=Ôê(«¨Àðj%­É.¯$²7•ó,æyq»~Þ¸;¶´½:]4ÝD.KY'’x“Ë!Ѥv‘÷6ì0ÜçUÀàîëW6ÝÿÓýÿ“ÿQ¶ïþœïüŸüj€9›ŸÅ6—¢Û±¸›K´û"›ûq®Ô¼½Ã ˜×w°ç9 ±ðÅôww–Ïq ZH½¶ž4ê%—ÉŠ ¤2°D]ð€WËè0#©ÛwÿN?÷þOþ5FÛ¿úqÿ¿òñªz̯„%ûV²ÜØÝCiiö+8îl ˆ"Ý>rùŸ¼lB˜#`'€|!qm<7qjÏ%ì •%Ò4˽MÆíÙ}Ì»nX(-•Ú¹fç=6Û¿úqÿ¿òñª6ÝÿÓýÿ“ÿQ¨Ρàùoí.l[QD²fºšäɳ¬ªÅ›~GŸ! OÝù¸9ÐÕ´Ÿí-oJ‘àÌÛä’mýpѲGŒç™$Ü:y;Ok[mßý8ÿßù?øÕnÿéÇþÿÉÿÆ©CRÓn®/­¯ì.á·»‚9!x Ñ”r…¾Pèwf5ÁÎ1žAzw„?³ôA¦ý»ÌÅÍ”þg“ø÷[uÆ7ÙúçÝñÏG¶ïþœïüŸüj·ôãÿäÿãT‡¬xmõ;éîãšÌ<±Á‹›V—Ê1™ˆt+"2¿ï¸`A]§x5M'Qò|?›s¾[ ^êôyÇh·–=î!v%€àŽ[=­Í·ôãÿäÿãTm»ÿ§ûÿ'ÿ ~ßÂ1%¾«ÅÛȺ¡·œÆg’y—$àpØ8 2Z™?†õ9ïáÕU³œRFUÅ‹y%&P¥<ÝÛ¿Òç~8^:ç£ÛwÿN?÷þOþ5FÛ¿úqÿ¿òñª`qú§€´lÜÝÙÈóG2È÷v>x‰åw‘ä€oS÷c„'åÉžëÁ·WÖ7V¤?dy/&·Ú$op&{uQ;ð’Bò9©ÛwÿN?÷þOþ5FÛ¿úqÿ¿òñª5&ÇIÙâmKU’+v#‡çÝ¿)™'^7yq&Ò8ò2>ù¢}ÎûwúN>Õ¨Û_ÿ«û¾W‘òuç>G^Ûºs­¶ïþœïüŸüj·ôãÿäÿãT€Ã±ðíÖŸý™å_ÂßÙѵ¤;í‰Ýj|¿•¾~eýÒüã Éù=)h>ÕíôK¶_Ão¨Zé?b¶òm¿ãزǒùv²˜ÓÚƒ‘ާmßý8ÿßù?øÕnÿéÇþÿÉÿƨœÕ4›ëÿíìÁÿÿgÓ—k¨ÍŸdƒ'‡}Æ3ýÅùOñ]þÀÿ‰¿ÛþÓÿ1·ìòÿé×ìû3Ÿø w­m·ôãÿäÿãTm»ÿ§ûÿ'ÿ sKðÏØu=3Ì]ñišt0-Æqö‰U]ÛŸ—b4œrÏõAO‡Ã—öö6±jVØÒÙœÍhÇj¬o%ýçïÇ<®Ï˜gùk ÛwÿN?÷þOþ5FÛ¿úqÿ¿òñªç!ð‡”fc}¹æ’Úi‡|wr\¾îšB rT’ÕKþ-D굪ÞBšf¡lcÚ Ò8’{™P‡Vp72°$ƒŽ®Ãmßý8ÿßù?øÕnÿéÇþÿÉÿÆ©êªøûJîâ_µÙ§›öƒçµŽë£æÅ${Zmãr/›ò®Ñ…D\ñšÔ×4IîšúæÔ︺ŽÒ†û;E38Ÿ“†Ødß°õòñÎêÜÛwÿN?÷þOþ5FÛ¿úqÿ¿òñª52ãAŠm,hñNði_`’Å­ÐÛYUUƒ¶H*¡‡9Îìž• šN±$ö÷ÇS±þÑe…\X?”b¡ §Û£\6ì`‘·½lí»ÿ§ûÿ'ÿ£mßý8ÿßù?øÕ 9ý7Â1imh°]»Ckv—®€±U³¡Is»8öÇz­§xRx­ZÖâm¿eþη‚`£CjRPÅrJ³HÒ¯^^2ÝNÛ¿úqÿ¿òñª6ÝÿÓýÿ“ÿSŸŸÂ6òø‘õm¶$Ë):Ýþ€í ]¹ŠÌ$£´UŸï•L}Ö/ÈÀ98¤<{máý.ÒÂÅ,ä:ZG©­·”­<«%»lü²1E¸P_+óÇ rè•Uu g{„FwkyÒ U#f*ì€àtÄŠIè9#~“àøšúÏûCIótèãº) ¶ïä³›} GˆÓ>\§ ž¤’ Ó¼7©Ej­y¥ùº¬òi³Ë~^6p±Q,lå·–Œ©ã’Çè5VMBÚ9î`,í5´ <±¤lì‹… wc~O9Ǧ‡r¾þÏmÉMNácµy5 æD2®Þ`V&`Öbî™ÑøWQþÉ¿èïqwq¥ÜYÙI)·ó->{’ŠÄ0T ’Ä G• …P(°—Eyö­á½JêßRŠßKÿ‰„Ÿni5 ñµÅ,s Ý»yÚd„aÀQåp~UÏM¥èñézÕúÚYEk¥ËmÈ­À ¡¥óÕÆ©ˆàœxànŠì¶¿óÆOü Ÿÿ‹£ì¶¿óÆOü Ÿÿ‹  (¨þËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿËkÿ`a€8ÁäöôP+‚máÕ¢¼ó-®hd{‹Ë5žì¼Hˆ ÌOÊIùIÉr$×Ó´¹ôÝ'G°Š÷ä°"˜ùCý!V"˜ëòüÛ[ŒýÜw­:(¢Š(VN¹þ·Eÿ°½§þŒ­L’â]²Ìð  ÓÀ8í»¾3úЄo\è¢mf=RÞþîÎ}‘Ç:Â#+s32£ïF òr…OÎrxËÀ¶ B÷·ÒGmç†hÿÐ^9G„°ÐÂ{æ«È-º§öå§üþXÿä:?·-?çòÇÿ!Õs ƾ›á{m?T]PÝÝÝ_”™ežr€ÌdòAfª …·‰FÐÈ$“Eß…í®î¯ÙîîÖÏQF[û)å\–ˆDY˜¯˜§b ùGÈ2Nr?·-?çòÇÿ!Ñý¹iÿ?–?ùŽ`±oþµ{É/ç×µYõ#åy7Ž-ÃÛùbP6ªÄån%r·Þã:Šã?·-?çòÇÿ!Ñý¹iÿ?–?ùŽ`±ÙÑ\göå§üþXÿä:?·-?çòÇÿ!ÑÌ;:+ŒþÜ´ÿŸËü‡Göå§üþXÿä:9‚ÇgEqŸÛ–ŸóùcÿèþÜ´ÿŸËü‡G0Xìè®3ûrÓþ,òÛ–Ÿóùcÿèæ ÆnZÏåþC£ûrÓþ,òÁc³¢¸ÏíËOùü±ÿÈtnZÏåþC£˜,vtWý¹iÿ?–?ùíËOùü±ÿÈtsŽÎŠã?·-?çòÇÿ!Ñý¹iÿ?–?ùŽ`±ÙÑ\göå§üþXÿä:?·-?çòÇÿ!ÑÌ;:+ŒþÜ´ÿŸËü‡Göå§üþXÿä:9‚ÇgEqŸÛ–ŸóùcÿèþÜ´ÿŸËü‡G0Xìè®3ûrÓþ,òÛ–Ÿóùcÿèæ ÆnZÏåþC£ûrÓþ,òÁc³¢¸ÏíËOùü±ÿÈtnZÏåþC£˜,vtWý¹iÿ?–?ùíËOùü±ÿÈtsŽÎŠã?·-?çòÇÿ!Ñý¹iÿ?–?ùŽ`±ÙÑ\göå§üþXÿä:?·-?çòÇÿ!ÑÌ;:+ŒþÜ´ÿŸËü‡Göå§üþXÿä:9‚Æïˆµ;-'N[›û˜íá,P3ž¬Q€Ô×|Wá–':©™‘d*w*’ ã€J®~ƒÒ¶ÿ·-?çòÇÿ!Ñý¹iÿ?–?ù“Ôf“ªXê¾:YlncJX¡èw-oøþ³ÿ~Oý%>-Z‡ò ¸µy¶0›ˆÁÏNzf˜ãúÏýù?ôL”%yoÅ?ù Ø×ÿ¡W©W–üSÿ­‡ýp?úÜë?ëWþ¹§þ‚*¬¿ë-ëîýµjçýjÿ×4ÿÐEU—ýe¯ý}Áÿ£V—PèC¨jÚ]›]ݳ¬*ÈŸ$m#f  *‚I,Àp;Ña¨[jP4¶Ìä+lt’6ѰS‚ dzYž0@Þ%®ÒÑRîÒF¸yJ·±l¿Ë äà`çÏ^YØkžF›vž „În/¤¶k+‹ƒ6ÕH˜¬£ÉUج§ å\gç$¾¢¼úÏ@Õ·ÛËugy%ßörÇuy3@óÆÿfØVÒmûÑË“ÿ!%˜Ÿ™ö¾½’ hµ•¬­=¤ðÅoNmd3´¢6(do ÆLg¤ªÃnÝ´ßQ\*ø~ýfzÆ›ý¸’I/Ÿi²¾@Eû‚r°;uÊùû@?1¢ÏºŒN o#ûV¢òZs6ÿµCVÂtŽ?xb‘Ní»ð»¸€ÂÖþ+»‹è#W g8‚BÀ`±$ãÛÇ5CÄ0Çp4˜f$ŠMVÕAVS zƒYzmn^EðïØmÛV7CæEÙ—ìb3&ØØ©Ë]¹þ=Ý«_\ÿ[¢ÿØ^ÓÿF kpd¾$»ð†µ;K)ü+c3Mó3Çg|¹Ÿ$ã Ì8Ì…›v#“mvÕ¼šåþ˜Þ±c‰¤3ktG+öà;b>¿9?3 åK³Ñ$‚ž–(Ýá}ñ3(%i\¯¡ÚÌ2;;Ð …nábŒNè¨ò™T’ ž¤Ì@í¸úÕ’y|¾$ðl~Ôµ1àëMöo:Ê8ÚB†p¿#(-É$! –Î|©JXÔ5ÏØ=ÿ„JÒD¹wýŠcUYùqÿ,Îër—ËÚ #Ê”'¢ 6³šÌÚ@mfßæÂc$ÞI}ËÐî,Äç®NzÔ’A Ï Ënð¾ø™”´®WÐíf‰èÎÛVðbk—úcxRÄ}Ž&Ìm­Ñ¯Ú7€íˆøü|äüÌ/•.Í  øo<Ÿ XÛµ´¯,Ö„,±©ÚÊdE“•W%‘Âö‚Váî(ÄîŠ Q¹•I* ê@,ÄÛ­Á ²‚(âBìåQB‚ÌŘñܱ$žä“@ð‰øoþ…ý+ÿ£ÿ ?áðßý úWþGþ±EcÿÂ'á¿úô¯üü(ÿ„OÃô/é_øøVÅÿŸ†ÿè_Ò¿ð ?ð£þ? ÿп¥àá[P?ü"~ÿ¡JÿÀ(ÿÂøDü7ÿBþ•ÿ€Qÿ…lQ@ÿð‰øoþ…ý+ÿ£ÿ ?áðßý úWþGþ±EcÿÂ'á¿úô¯üü(ÿ„OÃô/é_øøVÅÿŸ†ÿè_Ò¿ð ?ð£þ? ÿп¥àá[P?ü"~ÿ¡JÿÀ(ÿÂøDü7ÿBþ•ÿ€Qÿ…lQ@ÿð‰øoþ…ý+ÿ£ÿ ?áðßý úWþGþ±EcÿÂ'á¿úô¯üü(ÿ„OÃô/é_øøVÅÿŸ†ÿè_Ò¿ð ?ð£þ? ÿп¥àá[P?ü"~ÿ¡JÿÀ(ÿÂøDü7ÿBþ•ÿ€Qÿ…lQ@ÿð‰øoþ…ý+ÿ£ÿ ?áðßý úWþGþ±EcÿÂ'á¿úô¯üü(ÿ„OÃô/é_øøVÅÿŸ†ÿè_Ò¿ð ?ð£þ? ÿп¥àá[P?ü"~ÿ¡JÿÀ(ÿÂøDü7ÿBþ•ÿ€Qÿ…lQ@ÿð‰øoþ…ý+ÿ£ÿ ?áðßý úWþGþ±EcÿÂ'á¿úô¯üü(ÿ„OÃô/é_øøVÅÿŸ†ÿè_Ò¿ð ?ð£þ? ÿп¥àá[P$š“¦:ÃK²µ••мèŒWcdœʱÏüYÿ¿'þ‰’º}Gý@ÿÿè \Áÿë?÷äÿÑ2T½Æ‰+Ë~)ÿÈVÃþ¸ý ½J¼·âŸü…l?ëÿЩGq³Ö.Ö¯ýsOýUYÖZÿ×Üú5jÕÏúÕÿ®iÿ Š®È’$]Êle9 åH#Á¥ÔQQý–×þxÉÿSÿñt}–×þxÉÿSÿñt%Ùm猟ø?ÿGÙm猟ø?ÿ@QQý–×þxÉÿSÿñt}–×þxÉÿSÿñt%5¢†G‰¦&òœI|á\ta‚9¿:oÙm猟ø?ÿGÙm猟ø?ÿ@Ú2úäGÿâ¨þÑ—Óÿ"?ÿYÿeµÿž2àTÿü]eµÿž2àTÿü]04?´eôÿÈÿÅQý£/§þDþ*³þËkÿËkÿËkÿËkÿËkÿËkÿËkÿÓ'÷bÿ¿Kþ ù¯Å¼O;ÛÅ j]äxÑUT ’I)ÿi“û±ߥÿ CEMö™?»ýú_ð£í2v/ûô¿á@Èhª>¾¸ŸÃ¶³ÌÉ$²¼ììñ©'÷òÛ€€ ÔûLŸÝ‹þý/øP"*o´ÉýØ¿ïÒÿ…i“û±ߥÿ CEMö™?»ýú_ð£í2v/ûô¿á@ÑS}¦OîÅÿ~—ü(ûLŸÝ‹þý/øP4Tßi“û±ߥÿ ÅÕ﮹¡Û«„ŠY¥2* ]؉ˆ‘žqëA@J+ ¬!Ô¼Q©%Ü—†;{+3pßO©w¹Üq®IØœœô«?ðŽi~š—þoøõjQYðŽi~š—þoøõðŽi~š—þoøõjQYðŽi~š—þoøõðŽi~š—þoøõjQYèZ5ÄÏßË Š$Mnõ•”Œ‚›E?þÍ/ÓRÿÁÍïÿ  J+/þÍ/ÓRÿÁÍïÿ®gÅ&{áïìéµZ}RÝ%-©ÝJ Š •yH9çŠ,uEOl¶‘¡mê2ÊŒ7¯Ò“í2v/ûô¿á@ÑS}¦OîÅÿ~—ü(ûLŸÝ‹þý/øP2*o´ÉýØ¿ïÒÿ…i“û±ߥÿ †Š›í2v/ûô¿áL†ü\Að=¼°È¡ÒDYHÈ È" ¢¦ûLŸÝ‹þý/øV?е›o j2Àé¢Ò5 ¹ã ãƒÏQ@Uå¿ÿä+aÿ\þ…^¥^[ñOþB¶õÀÿèTã¸3Ö.Ö¯ýsOýT55ÏúÕÿ®iÿ Š†Q@Š( Š( Š( Š( Š( Š(  ­¿Ö·ýsýÔ4yma·7sÇ î’FÀRæHSXŸð˜ø{þ‚°~¿á@ÊÈ×§Ôà‚`ä³s41 e‰1÷‘ 8ÉÈÞAß'Âcáïú Áúÿ…ð˜ø{þ‚°~¿áE˜^%6røH¼I­šî×̸ÔõÏ򣧾©Û€àÉò…Á\(1êgNÒd·°ÔlìíÞõšøfŠÒÁ•b)xæUË3|ƒ9hæmÕ®–ïÄþ½µ{yup¨øÉ†i"~xdÃA§ë¾Ó|Ï#Y‘üÌgí7“ÏŒg§˜Í޽±ŸÂ˜íÞ¿6³á=R]GUK;™tv’ 5<µ[”{!#H#í ʰ»Áä6{îyþÕëí¾ŽMÒ[à žaêèB’õ;¸B %oøL|=ÿAX?_ð£þÐV×ü(rŠÃÿ„ÇÃßôƒõÿ ?á1ð÷ý`ý•˜x[þE[¬ÿúQ-kW' ø›D±ð팺J¾q+»$fyÎ:pAúëZð˜ø{þ‚°~¿áM­Añ‡ü‰:ÿýƒ®?ô[W¨Þ^hZ¼zUžÅŸN°™mÝÎ,丵UrpÁDj$]ÌýNö²oxrx$…õhÂÈ¥IGd`Ç 0A÷"³í5/ Y]%ÄZÝÓ:gmJæTäc•w*z÷^Ï\ÕF—«¨Û_Üyî‘-º¥š¨^]É{ÌDŸ¸Ÿõ\ÈÀ‹¾hLjuøœ=Á¢šY¢ÅÄ_g~Ò6¨$r§fAf¯Âcáïú Áúÿ…ð˜ø{þ‚°~¿á@õ «Èµ¦Mk›«’Éö›G}´c“!#ÊllùT±·yLI5ÒVü&>ÿ ¬¯øQÿ ‡¿è+ëþ¬Àܬ=_þF_×YÿôKQÿ ‡¿è+ëþBmkMÕ¼O¡-…äs´rÌX)äS°öò5k?õåaÿ¡ÝÖ¥r¯‹t ø¯P¥Ï”÷66F%Ç,î·N7/çPÂ×ðŸüþ·ä?Æ‹ÛW«h_Û^6¼ýΑ'“§ZÿÈGNûV3%ÇÝù×oNzçJoü- ÿÏë~Cük>ÿǾ ÔgY§Ôõ`»@·¾šÆIû±È<õÆ*,Âã“UÕÝA¨<éP\ÝÇmˆæqux1'É»B€í*O'99©­u«¨õ[[cz‰ —÷¶–&q!ûdÊZH™rb £.„8ùØîå–X~)xF#…/¥+…Û{9bÄ“îNM?þ¿„ÿçõ¿!þ4Xx.K»;Y½ô×6÷š(¸ 2F<ƒ€Bª§n%9ݸü«Ï\ö•ÄÿÂ×ðŸüþ·ä?ÆøZþÿŸÖü‡øÑf;jâ|ÿÞÿ°½¿þJ?ákøOþ[òãX!ñž‰âMWÃi·AåU¶b§eNœûP\õµÿ9ë¢&¨j½þ±§i6DßÞEoæH»·-€ÙÀëÆGæ=k/þÐV×ü)X Êä¯ÿ°¿¶oÿá-þÎÛæ/öö–Ï/ÉòÓw—¿åÝæy›±ócfî6Vü&>ÿ ¬¯øQÿ ‡¿è+ëþYÊx‡ÅÚ•Ž£¨ ;øcýÝÔkg4ñ´ð˜­åq(‡Ê ´Aƒ3°*ãåù†Ý;ýJÿJÔÛK¸Öæ[?ÜI>§:B²[,‹qß`Œ)x"PYO2œ•ÆÇü&>ÿ ¬¯øQÿ ‡¿è+ëþÀÁþÜÕO‰¡¶ƒV³{Q%ºA³¯™{ "™cHK?Þ“Žˆ rVÏAàÿùtû[ÿ赦ÿÂcáïú Áúÿ…ð˜ø{þ‚°~¿á@•‡ãùu/úåýEð˜ø{þ‚°~¿áY>'ñ>‹}á«ûkmF&’,*rNhHʼ·âŸü…l?ëÿЫԫË~)ÿÈVÃþ¸ý ˆî õ‹Ÿõ«ÿ\ÓÿA r×¼:Ó|²\0 «¸BppÏéQÂÈðÿ÷îï×ÿ^‹0¹×Q\ü,ÿ~çþýõèÿ…‘áÿïÜÿ߯þ½+0¹×Q\ü,ÿ~çþýõèÿ…‘áÿïÜÿ߯þ½as®¢¹øYþýÏýúÿëÑÿ #Ãÿß¹ÿ¿_ýz,Âç]Er?ð²_¨w…ɰa-Ã[øL&=lxËßÞ}HÂÆwIDATÝÚÌP+QgçT3Èîú`ß¾ý¢,˽½õ®0@ãikžÉdÆŽÉÍ:t2Ñ)½}ÝDÄ­XqÓ Μwܾ}}{öt ô J½« ШZZÒÃ[‡?jìØOmxuÝ“O D4qòè}ûz·oÛÓÕ…a,mÙ½cƃ«¢®õ÷O\Ú1á¾>¹¯O–D™È˜8y4 æË…‚’Ëeª\Y€F³sÿû3\õéKŒŽ êÔ14’H/ž˜Å9Ÿ¤8ê!aû~nËî_ݽjïçVL3™ˆ e` 8rˆ(“Íôt‰8Ç€ˆÆÝ÷Ò OË÷ˆôÊVM’ìÂÿ8×S«IDATõ"ZzáiÜ7íæÂžn¥mTެñ¬¤J©4ǦΠFË‹†l¤s¹ôÎn¥-gdÓjŠ ŽKk†ãI&/§{E]5QäT‰ˆ¬X*©‘-Îò¼á.i$—­¥ Yë“è¥wì—5EÖ²-FÛ8aÂÄ–aÃÓµj2@MI’n¨ª¡åyM[¶ò߈è¿nüŠÁsªªëg=ùÌwDD¿¹ê M”dEç4¼Â©àWÌ=3qt;eÒ[w¼ù~ïÉeM’å}½Ê»Û¤Ñc…#3qb+Ë–Ô‡&«”2™S êš­;‰hñô)¿¼ìRµ”@%ºä¾UæK{¿þO¤kºa®ý"IDAT®yæ&Ç¥RgÎîæ$ct6›nÍJ¹œÒ­ä†§%Y‘eY”dQ’ éÝwzúû óÌ92Gqæª=ûìúgŸYÿ—MÏ]±â+ žcóûß?øæ›¯ÝpÃ-,zäâO-6Ÿœ4û´Ù³O=î¸ÇŽ5“ÿýõýDtñ'?WåÊ%€ÇG¨ÌÍ%ŒaÇqD†apDÄqFq#iŠN"•4¾Z×lݹxú”{?y‘ùçò_?`Y"’U‰×H㉈R|Š "ŽtM7£«@D)ŽK¥8^à9"ók´Q=†®«{ˆý‚&ŠJ!/I²,IrA” ¢X(HyQzãžþ ¸IDATñ†1w&‘g ŽèÑG¼ÿþ;µê!U‘v÷OráŒù‹‰hÕ/ï&¢öa¹^™ÕɹkÙÏçøÝ¯®úò%wÞñË1&EZK¥²|jä°\_”nÚôü‹›^¸|Å5+[S8¶“ïzIÃd”F›Ö©¤* g$p¤¥v~åš)?ú Y¡öãË–ÿö7VÝù•kˆHã M2 U%"çÉ ƒ3È0RGÅñlŠr¹¬AÄ•ŠI“" ˈ#Ž„tªuDúÐÃÆ*Š"Éæ?Y–IVxžO <™¡› "îþûï$¢Ñí£ÃøÆß8Î mcé´bØa¹ìyç]øßÿa– +IDAT»ê±Ç~så¿"zøu/ùìò\Чˆ5ü×ï}ƒˆ¾úåë >Ÿ’Gvrà=/iJGGdXM""M#.e)"ˆv\}õ!?ý)•B­dw\}õÁ¼t4ˆJcVJ <—"*ŽgS)Aà *˜ÉHQêwûI×E]×uC×5^˶h錞ÕTU×ut]ÐôăS¾Kνàñկ߸îôy "ó„>Uó™Ï9Šˆ~ö³>¾úa"úÂ?^µ`ÁÙæÂž?ˆnøÚͯ¿þò•W^GDO=µî¶ï¯4žyæB¿.ã¾môh"Ú`8·ÐéIDATŸâxŽ™•™Œˆ}lŸâ=Ó¼úê‹O?½þñÕ/9÷‚ .¸hÊ”©ÖZ‹—Î{ô± !¶i½àèN l‰D1—Fi³pd”†·¤èFÆP4Û7X[¯¾rúOFDVÝzõ•öÜ8CUtƒˆçÈ<ß–K¥RdÆYž#~ð Î åÔ]üq—Ô'*¢$åE©P ¢˜/HyQ̤‚(D9“I-›ûùƒ'ì÷‰º{ÿþïݶòü7^¹à㟚2eª=Û³æŸ=wî‚K.[6ª­ýÒϭЉ®¾úk×^y}w×þ‹/ùX¡¿ß\hš1eú‘‡‘¡Ôº§×Ýöý•?þÁ]mÇ/ÿâùEõCIDATgŽ›;ÿlÏ^ãy!Ÿ ¢ùg."޳ζ²znÓs·}åÏo¿/+Ë¿øÙ-ÃO:u­~ü™s—Ì!¢ŒNëž]ï.î•W6ýË_YyË÷¯½òú?üᑞýû;¦vZk­yd餥}¿T¬3#ÚÄÀ¦HŽ#*}·DF1Y›HW nð±cÉ.ž>åîó—Ú_ÕÕbb¾ø)Ÿ8ƒã­ùYŽç2iÁ Ž3¯’È‘¦ÏOœÔ:A®º®kš®iš¦ëšªY꺮ëz:›æ óM€8Îèèì¸ñÆ[{ô¡»~qûc«ºû®_Î<ô0«í#G òDôßÿsÿç?·"ž²Z‘ÖIDAT|òOëÖýñÙgŸ²/4ÏèœÉ·d9¢O=ADGÎ:‚oÉÑúõ:káG8ÁãWš*=ô»ÿ9ýô3?<ûT>-¥4VV\ó͘ÖÉ·d‰èñ?<|úœ¹?è=Ƴ¸gŸYOD§žx Ÿοp™¡jÄqö…ṤFY ¢’Ä@ M’ƒcÄb˜åJQUQ(Nk¤s)"úâãZA–Jw.ù(¥ 8R R…ˆ2¾ø•‘hKóiÎ>7¡e¸¹Ý]›þ~àÿvvçE¹Pó1/Jù‚T(ˆ¢$‰’"Jò—®˜Ÿ:¬‚Íy‡ô¨öÏ\rÙø ãoýÎMÿqï4rhIDATßû×¥lñÈ £º¢>ôØoî¸ãG¿¸û—ßúæw-9Ã\˜žµg²™QxñÒâ‡ôç^x†t=vþDØLðµ¾qáÒOŒ1"“ËØã‹=+ëÏç^x†4-t"°gq>úÛâŠfâ´3ʧ]K’Ã@ M Ú$±m Ž<˜%"]ÓUŽ'"2ô+×üÞ ²ï­X1ój¶ø<ˆ Òµâ§ñŒ¶†Æ©T)Îò)â+MLp©SZ5Ù˜>nø{ûz÷w™ÓRqº@’EI–%õ´SfœµðètF(Ž— ƒã¨´#ç¿ôÖïÜôÜ Ï貚kfU=cûp}Ç?Ú|¿¡IDAT"¢©§µ´¶x&0ŸÏ;ãÆõk98ª)ZÆõ!ÝJÐ2¢%Is©AÁÅž•õçi§ÌqgåYœcE7¿å‰€0›xÏKÎ0ÈüÏW:5ÕÜFºÎéºnÇqW?ñ+Ⱦ³ü æãa÷þ;•BíOÏ:Ç0 M+~Å•ÉðFqâ—#]¥Òx–KgìÃC#3!m´QDsR©”Àýåíù‚X¥‚(‹’,Iêé§ÏX~É™ÓÇYsfµ×¬YýÞ{ï^yåÕ ¢¯ßp³")™ìÁ£ýù÷¾÷o_ÿúõÝ=]»ºŠmèîéwÈXGâÏ~öÒ׿üê‹§N¸÷Þ{>þñ…õ°ÉIDAT‹æÎçÙköu̬–-ûäÆëÿ¾ù½a]9"Zò‘f[2ö*ùg-<ûÜüîwŽ;֬üy 6lxÒÑ.hœ}Ëß "U]àÈ þæç×YAö­ËþѶ¼uÙ?yß/ˆhÍÖËë\yêM+ÎÐf2i+?EÖÈ:6›lçD\ö°qùQÔ"œÕ–;ሉ«þ󖂘æéðc™;÷ðœ}ô䉣JÓÈDÅß*ÐsæìÞµëÄ^°à¬Ûo¿sÖ´#GO•Í âöçK—^ kúÅ—|ìöÛïü×ïþÛ?ßxýÀ@Z‰Ï8cî]?ÿ÷ûî»÷¹™OÆIDATž¹hÙŇÌ04=7,çî3{æž/-Ztöw¿óý/]³œˆ~òãŸ1ãèí­Žµ<‹3>úÈ#ÿô¯\|ñ§Ï8m…Y‡k®¹nÆ'/÷Æ+³Aës‚Éál¢ >•kpÔ%Õ C7VžRÕ½qÉe޵ߏ䲣y­bX[{ë°ÒœÀ{om%¢™GNw<ïïؽsߤ©ãu]ß½sß´™“Ó™´=©0 ötõ ôåÛF=n¤ãêbîô/™%Ѥ°ãîIDAT©ã­ê:«ƒˆÖ<²ÁLéY\a@ìïË÷võÙÊ’¼ýïø•ž8¶“ïy‰cÖ‰­´vé²Ã;&늒J¥8^H•;‚tƒ MÕu=•N¿½åýE<`EÎÞîžïßvoqÞ ›ˆJÓb‰œQºMc©3ÄŒ¼Ï638Ž3ŒÒégBKKnüÄ1Žªù¡C=ŸÛ>zl»õÜÀ”ɤGŽá×Nwú€—ì%š^|éE"úú 7SiÌïYœ¹pÊ´ Ž…¥ †8› ÖÑüDÎdžvED’F”j!=ŨÐu½ §HÒ¨CÌ!èÁïÁR<¥3éÁg8X£Vók8sk½’IDAT Ëqö˜oý"xоSœ¯m &MøÜ¥Ÿû?þéá3Žë˜99›Ið7Z±àÈNŽ;6šõ‹[û¯´Ìÿví‘'ŽÏ(Ä‘òg¥œ¹e‹gDœù#­âül:Í›%–Î9 +Ú’Q:³æ¸Ò÷tDœ1h´[ ÆthØ»ïÏϽ1~ÂèmÃFYïêTŸƒ;A°1ÄúnþÅ™cGƒòWÝ0ìŽÛví5CUëÊ_uƒÌjptðúmí£…¡}3…SçWï*@R|ì#'hÅx ²þ‚jNäÒ)UÕeµdm#jIDAT­Šñ,@|¢¢ BJUõÖÁ<¯ÀbÅP¶ãYŽã8®1.ïV—ªÚ@]W-C°ÉÐÐìÃX*ýÁ.Æx¶Ìy]Ž#ĨáoåÜgíK¯¼Äxùxv»;+k‰•Þz•3ïâéŸgŒZU®Z½ À‚9+)óÑüÓdÉ<[ô–lª éÑÆ³ÖQa©ýÀÄ*š¼"EÈÕÔ‹a¡L»½ÂþŒ]b ¨„õ}—ÉúÖË}•êgƒ¹‡Q4øèu ÄìÙØ#åð¹9ªçW¢_…Égüå.ׯ™ùxv]%ÌâÜÃØ‚GОãewz ±õɫӂWqlk¸ªÍdMî LUϺϘÒIDAT9"…{dd-tEî界­ÂäæùۑƱܱb…c1¿|<»®l>aÞâ ÞîÚFêLG+ÈÖeË­¼iÁ¬scÍ“ Ì…ƒYªúxÖ"Ù—x>^Xö¥eÂdë9rŒõ‚“w{ÔŠ9ÄË6L2{ö7†Ø0\…üöç Ûž«MYDD$‘Ü29;ky f)Öx¶Ì¼#””ýXi &qŒ¸Pa‰Ià×펣CÜcv{Añk<8󪮷¿…`Ò`H‘[&O:ñSUɪ¿ š'i™ªªJDšª Ò "2dIì~µEܼƒ,iZq¸ÊóãiüëÄû,o^]IDATÿ̬lšH•‰]bxÖêê†ïJr 3á—¦*c_·QÞÕ`(0ÃkAå4…ˆTUÕTÍ ²²fȶá§(š–uOÔèüYjLz–²QçLªÈ>ËYa&·9ªþåžcJ·êùC HZoA«JV­-‚ùhðiNSAàžx"Êð\†÷ØáÍëÕ2™Ÿu,)›>ä;ñ¦ cçæ—Æï“¸}yµêišÕ±$j‰á+f Éý:°l§9–TÛÑÕÝ ˜ãÙþñiƒO›ãYó%k0«S†#‰ˆz Úÿy¶ó³~ í†è•=¢fbä5òy´:öIÏÇIDAT|ÿT^tølƒ× (1R‡G­[ÔÌ1QõTAHqšb”",yMËJF:—•E#]´ÖÒÉž¡6Æü,®ó “CP·X uýµ·«gg×NNѨöÑcÆŽh‘Û}`ÿ~Q&=#äfv޳¯ûþûûw÷0ŸÏêèÜúAO¡gɺÖ9}Z†çÌ Û½·kgÏ>"j1qLûp3}À÷`žãY‹¬DTÛÌq‡%@Cë“óÉîû7nx­¥¥¥P(˜[è"Zváüþý¥×ÿ–•a¹t{ûÉcFeA}éÕw÷wõѸ ã§M”¶¼óîþ®^]‘ ªžW¤¹UIDAT£ED†,íìÙ÷öË›‰hÆa©1íDÔ-ªãBgÍÀJDŠêjš9Î"ÂV(i˜´ú@mìïX³æÅŒêëë'"3tÑäαD4q\kß@*ɋʞ]ŠqVé—DnÛû{tY!¢cïà¾P(ôõôQAÖÞ~yó¤ñÓ†eÓYŽ”|ª k²¬è²˜—QÕ…rãÙbxU€Øj×Ìq]¯¤½ôö;D$ÄT:³hÞ‰“'é/¨»wuÉ¢HDÃ[[RéŒ@ßøë{S;& BŠhض]ï ô‹f&ÇMÒT-/*=¥%²¬lzáŹgž"i]{{û‰HÒNªzÎÏ×ZÓ{IDATÚG¯D¤¨FŠ#=D¤Eœ€„2Oeí= šatÄÈÌäÉcˆ¨µEhµMÅÎè˜øÔ3{‰¨§ÿý%š¢RšÓ”·_ß&ËŠ(JG>ÍýÒ«ïõôôK’2vêh"’5C—IRzúò¹\V”•ž¾ü†õ/Q¿–îz$]ìW4]–U¢ƒ·N(HºãK-3ȦN7(-„:ãYH¨‚Áu´9§úÂ_Þ4—¼ÅÕœ€IDATñææ7ÞÜtÌÌW?CD}Ûv½ôÊÛ)%/© õSVÓt"ê.hŽ)‡W| 9?‹ñ,$ÚäÉc>÷™ó‰¨§//ÊŠ(+»÷výòÖ®úÕŸˆ¨¿ öÔÃfNÞÛÓODo¼¹Y¥wßÙÙWú ÒÔ)ãsÙ‰’ND½ý…ÞþB¶=sòñ³$Q•DõOkŸ(ˆ=½bO¯Èz ­8t5>KD¯+Ïs!#¬ qJ) :³sÜ?]û©‹?¹`¸Qfí+HëŸ{í­{bžÁIDAT·¶›×+8òCÇJ¢º¯k`Çîî=»lzù3ŒÎ8´ƒˆDIÏrÊþM”UQV•|ê瘈úòâÎ=]]úUUTu@剨 iDdþÜ€JçÃ:È’rÆÀ„8 ÉÕ]º¾ÁðÖ–ÓguãõÿpåçÏ“Dµ§W”Dõ•×ß1ø4MŸ4²­µE”Õ¾¼¸þ¹—7ïÜß—ûò⇎ì0W—Œ´šïUTµ»/OD¹ŒpÂIÇ ä‚üüËïšOHPŒb¡ÖxÖS&›ÃxšêõuþI'>vÔpEUûò¢¬êÖõ·f1ÓŒ¡O?ÿ–7gÍêLe²bé[,YÑ r߀Xe"ý@IDATšsú Ã[2}â®}½}b߀(—¦tÉ6žõu<Ëê{°²WªvÐù5€N®Iщ跫ÿüØ6ž|ü¬cìÈå2ë7¾úú»˜ R¹VÅàHU5U;úÐ)¯¡]ûzwQïˆá¹¾ñØ£g˜Éò’2,›> ê}ÅógSR>Í çœ7ÿ¾û!¢}…Ñ#ZDQÒT} xûÅâ• <®9žM…Ž´1ãlµ®±T›Õ³ûÂ$3ÖE¬ëX“¤õ‰§ÄV,¤†èääèµí/¾¾uç×ßÙ0bø f 4ÃèÔ‰£žr˜uE˜ã›i­e&;æÈT ²yIDé@_ˆ$“„u!8pIDAT§é>nÖƒÃs[wuѾ€&X…–ŸÍdsž×7ðgÞ€³Ý¬!ö’Ø×«¥$ÔÁ.iõiJèä`橬oïé5ã¦5í9lò·nº"Û’+¦Ô ":þ¸ÃôÌÇ6yLûp]–ˆ(/)D$–~x )Ц鿩r‰½Dë›·êÎÏVmÞÀïÏîåŽ%žW{ñL㙿gbÇxÁZâW´ý†(~µu&çà†;–8²òËÖ^۲âïNµi~%ú ÒÝ ÷+.¸’ž¯4ß±<¸güž”-…u')ý’ö¿?øÂ[ïv½µy×ßwì%¢‰ãFÑ1º³ã3u²&¸¬IDATõXC–>½lÑÂSÓ£9©{ÂøÑD$‡’ÿpÉEöî#¢)Ó¦šAV1è¨Ã;®ûòÅf‚ö‘ã4U+(z¿¤•Ÿ4žgí!É/´ù=wï¬ÁW µÒûÅwž‘Ƚ¢gѵu_ùÔóô«p˜®ðk»_YÁ"u¾»Úu¿-<+°$dqew6¿Öù½û³|í;yHÉë)"iØÔŽÜÔŽIäsS/QÒsÙ”d¤Ç´§Ç´IDDò’bc‰(%å%!7}b+7¥Í:CVTôœÑ¯q­Ç9ÓÆÌ9 󳞇“gJ¿åÁ"­åNìŪ»Ë:BLŒbÔÇJï÷vµ¹æIDATñV /LÝ‚{2¸’¯V¸Q•&ÍkÐÉÍͼË7§)ŠÁ‘O5d‰(m.×eÉ>Œ%¢]0#=È‘ȵRi® t¯0MT qþ,óñ¬'¿1Æ<ŠŒ]„ýý ê„2­OQû¹6‚ÇzeÓ‡_1d>Jf'7 QÕäbTµYyp€%Ý ²æW^ö ›’òy.Ãñ)UV9>%«º¦¼X¢iž³îâ“Y ˜4 "ŽÏ†²Äâ¼®€i,ÖÑÄññÓ³Dƒñ½O¢6³’úT>ÔJ²¨M«VW8fŸ(1ýœ„:ÔÞÖ]»¿~ûO2BÌ3ýeU/Ÿ¨DÕ "ÚÛµoÒØq¢• <IDAT)’ Yâ2YC–T¾UÐú‰H2ÒVbÇí!9>sœ8랤wÏØZÏËK¬?ýÖ*Ë]„ßááW“€}7dM<›ÜpwGVöÎ ®døZùu¾géM _bÔdÁuvW2dVeÅîêÚwòrΩóŽ9ôPû]åR‚áù¨ê*)¢ADþ¸bþÙWíÛùÚ¶-Û:ýz{šV>òKg‹cdóQ•4J—]+@ÌïÁÊ.´ïC!S†L)Ck×^ÑÀ]÷ÑÜŠ¨ ÷ì±àUÊ~“£óÝëVk[„Ì$jOôð¥G-¥ö<Cð˜QÃÇŒ:̽\Tô\:eÒ_P9MY÷Ä­?ÞE¼IDAT¯<ÿ™æ‰o5Ÿ<óÛOÑì_ú¡S.wg%é,§˜IOe²º,ÙÍ[ØT2• Éšp]Ä20ÐHš\:eµš$©§©ú+Ï?´pî9'Ír¤ßö·çžþ¿U‡ÿ…â}¿9U6¬Ð'>’  È$˜gÝšŽ +©g»æw&ü_Ê%Êeé`„a©5º¾@:vÁ>IDAT ôDE7Ï%Øw`€J±U%GJóc»>ø›.p¼ôþ;¢–›Ée[ÚG»#¬ ãYh²¤(ŠjY± õT"Òļ;ÂZFMœ½nã<_:dê¼åfrY>7,×62“ÍùÅQŒg ÈúÁŸ`ò™ÌØ–¬X¨¥­øª!d8Õzb>ž³ô‡¾¹ >+Öï1×62Ë)Ff„u½.Ïë"b< Í µE † —%%“M›ýµµEè/¨™”!ëœý9qšbÞ×zBD²JTUÕi”¹$EªN£ Uâ„QŽp)«9{lõ¼pWÔñ,îw ‰Ö_P3Ù´¨èö ÛÚ"XAøt{ØIDATÖ|n&¶b«Á§ÍûÔ˜AVVI· +u4Íàl§Áò<'«ÏŒæ}k<ï^õ~·ˆ³Pæ9­-‚ùC[QÑÍçVxí/¨‚2Ÿ»W7ëõèÀóœ}$«iFF´$à:ßQï†8 Iä¸(—ùØ_PÍç‚P|$"3àºs°Â«jÝì£W* i­,ƳÐäÌxJ¶«sY#Y3þšTUÏÒà€k瘙5‡´Ž™YŒg iÙ¯-kÏZÓªZL~<ëÕb< C”}K®ùY3솟Ÿ%òžŸ%Œg`ÈrÜ+Á>?kÍÉZ󳪪c~ ÇxÖñ%˜y›qsÒ@U@–IDATuŒg"sßûË|bd)Êx6øÔ.ÇŸÏÀàžŸµÂ¨c`kEd*Å_»à/ÁãY²Üó³Ö´€ý”sHk¥w >©‹0ž€!ÈŒ›&ûü¬}ZÀ ¯ÖD­c-;û¤a< @¶‘, žŸµÍeNØO<0­°kqŒdë8žTò½÷® ¿&„1(Î._~i½êÐL^xáfëù 8»uKä»;@0Ìϰ…8 Àâ,[ˆ³l!ΰ…8 Àâ,[ˆ³l!ΰ…8 Àâ,[ÅَΩժG%"UÃLìX%L i¬C2kEDƒþ£IDATSíucWÏ9'¶£ê±u¢®[³²šF„8kö—õÏ/MŒJÔf3$|c'¼z‘ttNݲyû–ÍÛ©Úíò|› N» û®î~ϨÙ‰£ÐªdemH¥WXVÙL<T½“k¹Õ,^7ôauVÀŠ´ñ*\+™¥€Cu»½61x'¯‹¤Õ'†Ê›Ð¸Péü¬cxkâöz&£ÁGnî̃‹([JȆ4¡l¹• ~/ h{@UËÖTW£×¿QÔ¦Ÿ±5ëë»ß»gáYs?ñ‰…W]¹¿»` q6š²TkV½þ¢6ýŒ­™ˆ³l5jœí¨ìçu²Î Ñ(v•lˆæ'_@76PÎÂ×>IDATWµê aUØÆÙ5ŽÔ° {¡ZhϧŽ;nu‹Ž›ßŠ,v÷º^¿O%ÛaSË•Ì@åGMGˆŸ´F­O vXÁê÷`&3D œuªc•ÒõªF¿ROZ}*Ç¢“£žwUÝÒk_D„8ë>©ÐñÃ>ÏýN Hl%°—â..¸’ŽuùøUÌþ§£J~M(Ûäµ=+æ×Š€¬¬>ñ¬¶çy ž]¦sTó—ÊvH˜rã»M˜}¸leýf7³Rï Žª†¯›ßêQ{8 ß<+ã·º—ûøîVøm¿ÊOç8² U*m<ë³ü"šÕ³îëæ~IDAT—Ü­ªV#Ã첞i¬ç~íòKi hTÔ­Ð]~Y…¬¶ßµ0 sKÂÔ<8CÏ#5‹Ï摎œ€}8Le‚·ˆ_¶1ì¨uó[=L£‚kãÀñk¸ç;®_+ÊîKáwÔ«Úõº‚ÅnmŒc&^A,rX%j8`º»øU !û(•ëI+M@O† ˆÁW/vÐ ¿'0ÝÉÙÖªUÉÚŒaíØÎÏZjÓvïc1r®nej¶CÔ½PO5«IŒ‚ìiÙÕ“õ-9ÛÚOG©áÕú¼®ðdéñ›OmÄkT]ö°äìÖajâ×±öI†ªäȰdK”+qçãN³¥Üup‚w»¬‚;'F‹Bövð°¢½>•0ž•í@ϺÅÛÍBÖ-FšØ=ìζZ-ò«•_+Â,½£²á:2ñ_M6­¢tú¿Bµé@w)ØpÕRÇž´_G†áü,ö€pàT®*Ãí*Š|¿[v釚ô6A…jÓîY”ÚÜ’Ö‡z}€FÑq¶£ôó‡zW ¼zÆÙ ”õª6Þ]TCŽg‡¦¤M9@H?ëyöb˜4Ž ÎCô̳l­üžXéíµõ,ÝïÔ•T;àO¿)¡ä“IDAT Ëí *o‘ç¯ ËžOµ”²'Ÿ&í›b€ÊE»^—û`ö<¨‚ÓØóô|)d²0+VÒ´aª&¸û½¿O„icÈy¾äYn@P_JÙÕqJ4¥êŸ?Ëb1FžÇ­ßP®qÅn‘gbG(t¼£ÓÒW%€„«~œ­úAâõT7sæùÁ"àœIË ~V¯˜hÖ•ÒÖ£‚L°nQð<;»üñÎ M ÚïÁÊ~kᙦl†[Â]d$|­¢rgPhŒj§ŒWÕàL"µ(|&e7w¤U6€æá:2n;$lÜšûi¾44ûudpþ,[ÅÙÆ@59hç~IDATnÍý4_‹šƳl!ΰ…8 Àâ,[ˆ³lÅÿÝíëÖYÏÏZ¸°•hBqâ¬a_u£c9¢-€[ä8ûĺuf„ýáï±^wíåD´|ù¥[·ì¨bå <ü ±bÎ؃¬ùgowÐA^áUHš5ˆ$áòŒU¹€/ˆgÍÁ¬#ÈšÚÚ§övoŸÞ1Õ=¤ÅÑë'iÝ’´ú4‡ê_Ö!àŠýáoŽBƒ¯IþV1î奸/ûéž.aŠp,qdå—­çe¼ýÞ½Êvf@ßFj„Ä<Îú ¸9 yÝÆ3¾DºÃã¥xŸ—#U;ü}Y‚[£2VgIDATz%T; ˜[ˆ­nq6øZÎÁWJ x5Ò%V=‡ ˆQËräi+½çÀ6Fâ­ñD‹³æ™[×]{¹{ж·{{[»ÇälÁ㩲éï2Ÿb¬îž%¨1Ü öâüì–[nrœ]p²A¤ËøG=ò«)Ü”‘ÆŒ1îS£’ÖºøäÐX"Ïœµpa[û!48¶¶µO%"¿Á¬#Ôº§ ËÞûd‹íf-îô~ È'öêeoëâYbÈÖÅ«Õÿ[ŸKhÄÿ¾5Ó;±žãç T«/ˆ0˜höûÖÄÿ,dl4Á Ð|˜Ÿo0tBjmZ:tú à^ðIDATiຈl!ΰ…8 Àâ,[ˆ³l!ΰ…8 ÀîÃÀîÃÀîÃØxp‰€Æs~Ö}Æ[n¹É3¥ãú,®yêw¹n¦…FeÖ¡¾5IZŸ Ñâ¬ã>ŒÇqg>/݇ñÿµY);¸KÂè/ u°KZ}šXüïÁ¬ËqœaQWsaV¿”~·ÀòÌÓ~¯+OÏ{ 8îIõ¾„M|ËEÌTT¢>÷s·1Åý’ß=²n8è^âËü*‰[.@%âÇYÃ0Ì!mŒÁ,yÅÓ€”Ž%~Q¬ºq!dõ4Í-m*QÑ}í6Ò}z³IDATÝŸ Žä¹;Ï*Šw võ ·\Hæ÷a <çð’{¾58Ï*š·\D˜¨óû0z~Uö~…ž«;f0ý&Xy”ÃDÏêá–‹îÃXiäˆ[.@0܇ñ Œæ€µ¡~ÆxÕ«M£Þu®‹Àâ,[ˆ³l!ΰ…8 Àâ,[Îë²ß `(‹tû˜hçϺï 0ÔøÝ>ÆOäß)8îX0ÔD½rægØâgÏžwÞyóßzkóæÍÛæÎtóæÍ{vo[|ÎÒÅ<úûõ7\÷ùÖ‘xÄ#ñØèÓFg¹>çIDATs#{º{‚ÞÆ§_ìœ1ý¨£:Wÿ~C„ëu9nÂè£í[¿Ú=ým[oè~[fÓ—åÙ·ô¼ùV‚¥ç/¸üK7ÇЉrÏÏWþç®*{[ûõºª0oðèï×/wu÷ôœ»h[ïôÛs<ûöùÚeþ~½•AšCŒhV…8;fÏ7ßûÓÅßY½vÚ’9›Ö¾~ù™S¾¹ž¿O_s…•枟¯¬¼ €º‹ͪg÷ÿöñ»–­Ùü/‹ÏøïÇŸ™=gÔŠ§vÞ:û™Å©ÅwYiÌw€¥ç/¨¼8‹=7wÎá˪n­jPbí+ –úŒgùM7½<ñ7‹O~xÒ£:ŒIDATÍÓÿ°dΦgºî>sÊ77ÍYÓúüõV¿w€àXUp!ów$[zþG%K܉Ý9„)7*ÏŠתê513D܇!%Æx¶ ×ùÖfë̱ßXóçoŸ»hÛêµ³s÷Ú×o¯]¶þÔû¬4I˜Ÿ}ä±'˦q‡HûZö?/ù½šPíªd 0tÔg<›~ù›Oíûöâ“^½vÚ’3þ¼öõæü숾j¥±ÞÜ+ûŸÖsÏ!˜ã¹gìpçfÿÓ¯î|Üú ޤîܵu ƒ;ÁZý‘Çž´RÚó Y7wÿøm¿%î ç™­ã1LÝ«>ãYåø[Ïû5ùñÀúIDATö¹‹¶¯^{ò¢cî,ŽgO¹ÏJc½¸ƒ£=y>4+›C˜ç+„©€õB¦Ó.FãPòi»c‰;_5‚»´ê•¨£ãÙ*ÄÙÜ«ß|ê8s<{Á’3þüøÓ_é¡Õk;—œñòÚ×?oÎÏ1lo…IDAT¶oºÎJS•óg}]oÅj\Ï¡hì‚óñSô&Ta1˜…FWŸùYñ¸o»ó“kè׋ÏXõøÓ—Îõ¥§vþ|ö3çlšó+ß;€uäÛ?•;_e¿Jr/< 9‹ê™2 ÿ€ôž3•‘&s­U*ŒPV˜ ¨­µÄƳΞ‘0à…&c<[…ëlzø¢÷…«L¿áÉ­·-:æÇk_¿öøÞ‹^n{@ÜñÕ‹®Ød¦YñúÁ%ÆLhBTXÛÓ¾UϼBµ½Üês}ƒÙ<0Nûñ“[owà–µ¯_;úƒy¹í¶ý·XA–6? [}Î7 ¢S—>•)0IDATDDD뉈èÛó¢¨ç”ýD2eÒTþ©Ÿ])µéÉÆÚ^n1Î7¨Ñu¾/ÿÒÍæä1ñˆG<6ôc}æg†”Þîí‘æg«3oðü#Svl'×UC¥_yü¡¥É€!­ qvýgž1½K?¼“ïXfö*=/Ê]ÛRÛ^^ÿÀ™ó/zªòüZæg3ý:¥8Ò Žå=wWž9@£«Âx¶çýÔúû£NËeħµî]…÷ÿ:°µ‹­·m䱎”džQy‰îÜBæ\6Yuk˜¶ P¹*ÄYC£¶cŽÈŒ=™ÏjßKÜ~ضÔðíôçòëÆˆ•5P “’ùIDAT•šDmZršÏÎPh#€[æ ¸AyDVpiÔ#ªê± L†C! …6¸Ua<[Œ§qÄŒ³>‰9ó‰}¬gýi=·’9R†yn­å™Æ¯î‚üê`_â^×ÝX{MyZy¦qçé.= óH=¦ÃV÷ëFÏ +ïX€ÆR•8kÿK޳îãÓ~ y>ÿa3LJ÷1°Jpâ²3Ž%ža+ Ï€ÖÙ£[@H “­_c+\iÇ4–*̤8+ƒ(EÄ›Ëy¾Ÿ¾Ý!¦ºùs%±3 ´Æ[Ý{(MßÃÂ×*†ªw,@rTåw \)(u0Ïš#ŽÉ‡äÏh&·êM²¶nïIDAT¨0Û&èX€:ªÎõ #2ˆt"ÞÏV]ÈÑ ëC4`*–ª4îs|ˆ®i> mt0 £Æ5©™ë®½üG?ù…{ùÜÊžgª«›«w˜ mthʸq†àVvCœ¨)Ä!߃°…8 Àâ,”7¾+"°)M5îÌÏ9ö=Ìq"N£0›`U¾£sjȆ„O™Xޱeófü(ÆIDATv¿F5AcMM°Ç"Î6?÷ñ#B5·Æê¿­œ¬A5Ö¦ñƒ8ÛÌã¾²)ipv,¡$íôžã8Gí ¬çž}bææ^Þ̦¹}Ž&Û—ÛÿL²€¡ºùÄÑ"òßëÛjÄÙæ5Üûœ#yîßÉ ²žÜQÕjˆý¥àÑ_CD[¿ÏÑžSšòÓŒ» Á;pp‡Ôâl*»'ùò*ɳö<§²iÊæI‰l¬]Ôº%¼91Äø«¾_"Î6¡¨Ÿ‚ïöy&üp­¼z 1ž¤Æé!…Ù]ÝêÛvœ×Õœ¬OÍU|wL&_•¬…î¹K?f_™ýVåZ&@ƒ6ŠÅ.W—ÒøºIDAT}ãÙfæ÷)Ø1?ëÞ›íK3€‰ÕºëlŸ¼³ÏØ’+î$¶Q•k o½<¹¿â |;ƒßþ\3ˆ³Í/Ìi@î…ž_°ø­^c!ëæùRÈæ'–ß–r7Ö½Ü3YòïœnC‡9 ØAœr<¿,ªKMbóÎ4\+âi‚Í7!Î9MpX6AbÊmo\ø €-ÄY¶0oP;‘nvMq6‰†ÂÑ8Úèpݵ—×» µ6·²'ÄÙÄ GãPh£›ç ›ØÐÜÊžg'䊡± Áó°'[ð=[ˆ³l!ΰ…8 Àâ,[ˆ³l!Îï­5IIDAT°…8 Àâ,[ˆ³l úÝíw¿wO½êЬÆÙ…gÍ­c=šU1Î~â ë[€fÅ­XqS½ëÐÌþ?¸9‰I–ø³IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/share-module-name.jpg000066400000000000000000001051331203611042400324550ustar00rootroot00000000000000ÿØÿàJFIF``ÿþLEAD Technologies Inc. V1.01ÿÛ„    $.' "+"(6(+/1343&8<82<.231  1!!11111111111111111111111111111111111111111111111111ÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀŸÍÿÚ ?ô »Û-V1{«$·©9ó-í +1ó´•È<žz8â·Qka6hô/ÛÿãßãUiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiw3'‡„ÞJxu% ”Š$ vÈ\â³EOâ•iÑDå¢ù~c¶è¿ô)Íÿ€Sÿ…gõŠÎ_Õªy}ëüÆîðà•"¹ðÙƒÌá|Èe‹'®lsW ±›´d)aêB<ÍiêŸäjÚølïd½½´Ÿç¶8,|üêÌÌ #O'Ø plÀËÓb'K³lqöxÿôWpJîÅoNÖðGý˜ÁÜýîTâºiS¿Æ”ˆ©áËû»é%·½¶òÞ1¹\c ? U ¡¬HRL5 Væ=jM'L±†êê+o´²ÍqäîRp|­“‘Îpó\Ñ““}“Kï-«ZýBØÿo_i7“ZÙÍjÑ$~m†œºçåSŽ™ŒÑ s-;µ÷ Þ;ö¿çþF‹ÞX%úØ=íªÞ7Ks*‰û¹ÏJjWv@ôÜHïôé.ͤwör  Ì¥ò¿{åÎxïéKZ÷óùÚÓîìuvÓ¯-®Ö3†0J®ú)ßK‡[Zˆîl®õpšdrÚhþ[\H.6ÈU”1*›pp3ÁaœT*žï3Úöþ¾ò¹]ì·µÿ?ò6SÓháþдK´$M2‡%€*6ç9 ƒŠÑÝ7ºþýÄ'x©ZŽMCMsr#Ô,ÜÚg :Ÿ'wsòô=jýÞdUµåêU°Öm_D·Ôµ9¬´äœ7^Fñä0$i8ãúU9(Ù6-ïn…»Ëí:Æ8¤¼¾´¶IÿÕ4³* ?Ý$óÔt¢ö—/Pé~…[-sL¼Öîôˆ.#7v¸ ¥×ç$BŒäíÇ”îöséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp0|ÿ³kW±¼’ĆeÜѽA2W9ÇLŒW•ˆ·µÔúl°‰-õüÙ¸lõŸµG ”Ñ\ØÌ†HõI¤Cï@ÆzmÜyFÿ-{ÝÖÇ'·Œ"ã8ûëKz­Ämy×Wp ˜•&¸ ÿx¼¡G^œ1žiC—Ú®]®w8JYsïfWñâŽÀŽdÿÙ+ØGËƧ™ü=§¶1ºÖ>à"²nÌkGs‰ñw‚üLfwÑ­­î‘Ýeˆ0ü_­z4±4íih*‘MÞ&—ÃêšGŸ}®‹e»™v,PDƒË\äå” “íÅaˆÄF~ìv&1°¿<9>¨|›mê[Èã eªÛʈmåÉûÇpp£ƒÀläàdW®WŽ¿—_Õ[üÍtJÏUÛÏ¡¨x7\¸µñtrYùóêÖâÝ÷ :Fwù~`zâª_£ü÷ù]~‚§îµå·Ï_óE=wÃ)»¾Ý&Ÿ{ra»¶žÕ’è,)m,»7Þg<•>Ç 7ûÄßó;ú=¾_Ö¤4ý›ŠþT¾}oý3ZÛÁ:”þñU‹[­¥Þ¡yq%³±:?Ý$ŒàǨÍc$ÕEn·ÿÀ¯øšÅ¯hÛÛOý&߃¹gÁ¾P“QÔ Ômç±Úì»h0@9àB `““Àã=Is5öüÌRk•>ˆ¼ y¨ø£Äþ[«m.ôÛ•Hš=—J¨+#r ëYSICÞþfíù3I=U»[ñæZÓ|%uˆüK#Û x/cm'OÝ‹iÆ9>¸©w•Gí7/ÇoÔqj3‹è’üÛÿ#+Ã>ÕáÔt»ÒÛOMÒX'œº2\–Àv’vñ»æÇ'¥\¦½úKÅ+zk÷"9ZJ;êßçùßð0<9áý^ëEÐu}5/&‚(î ‘,ü5wÈH`&H8ÁïŒc½K‹Z>°Šÿ‡ÿضӓ·I7ÿ oižÔ|5y Ðé3êö²é«h#2Æ^݃*Ŷæ3»ª‚~_»Ò®úÎ=ígÒÉ[]ß™ ìÉikéêïuÓËõ5tm QÓ¼mª\M¦Êlµ8à1ÍB”B¥X¯B¿nhƒ´e6ýo`’øZíoÅgöiô¥q‡öiô¢àÙ§Ò‹€fŸJ.ýš}(¸öiô¢àÙ§û´\VìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ9‚Áýš»G0X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓýÚ9‚Áýš»G0X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓéEÇcÎ)Ûýœé«ŒgÍ?úz°gÉg‡u{µÓlì,4·ºkk+wv‹ñä}æ‡ò¬ÜVíŒÓþÑÖ¿è_“þÿEÿÅÒ²î0þÑÖ¿è_“þÿEÿÅÑeÜûGZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYw A¯õ+9,õ «iF)¤…Õ¹ÈÈ/ê3IÆ/v µ°ûkRÒ‚ÛÃmH0ª³E€?ﺧï;¶$¬¬‰?´5¯úäÿ¿ññt¬»Œ?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]ÄÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö޵ÿBüŸ÷þ/þ.‹.àÚ:×ý òßø¿øº,»Œ?´u¯úäÿ¿ññtYwþÑÖ¿è_“þÿÅÿÅÑeÜûGZÿ¡~OûÿÿE—píkþ…ù?ïü_ü]]À?´u¯úäÿ¿ññtYwþÑÖ¿è_“þÿÅÿÅÑeÜûGZÿ¡~OûÿÿE—píkþ…ù?ïü_ü]]À?´u¯úäÿ¿ññtYwþÑÖ¿è_“þÿEÿÅÑeÜAý£­п'ýþ‹ÿ‹¢Ë¸ö޵ÿBüŸ÷ú/þ.‹.àÚ:×ý òßè¿øº,»€hë_ô/Éÿ¢ÿâè²îý£­п'ýþ‹ÿ‹¢Ë¸ö޳ÿBüŸ÷ú/þ.‹.às> ð´ºæ¢×Óè·öÓ¸Í½Ô œ“Î8©•8Ë©ÙCV„yc·™›ÿ ù¿çÇYÿÀËzcçGönËñÿ2Ηàÿì­B ßìFáà`è“ÝÀT0èpäUÆ”SјÖÇÕ©G¢ò3~&jGT·Ó§h »Ç5Ä „ƒ‚¥èOrkx.[œ']ðÿþ>gÿ°nŸÿ¢Ú³Ÿù‚;Ìa@P@P@P@P@P@P@P@P@P@P@P@%0 ( € BÁh &=â­D›•Ú¬G’øãþ=aÿ°•ÿþ†•kq×ÃÿøùŸþÁºþ‹jÆæ4rZ%Õö£ñ‹Å6WC^¿´³šÛÈŽÓSha´ÊŒ³'œ™S×7CÇ<ç†Ö—3ß™êý^ŸÒ#JŠ+n]¾KúÜÄÿÃ4—sA¥>/¢Xd”ìû÷ìœûQC÷žÉKí¯Çúé徺½ÇS—ì¤È¼9â{Hºø«jˆÔ,4ké?ÐäŽFcÃmX˜ÈDKœgån3YÆn8XÍêÛkçt¾ívüK”y«¸­4Oåfþÿ>¬»eñÄâÉî®4µº·}[å¹M&êÖi’2â7i )À”Œþ5¥_Ý©¯åµ¼õ³VÞý­&§([i?¹twÛÈê~k~!ñ‰¯®Á¦[ÚÞ[Å%²Z4†Lœï.€:`{äÖ“‚†tûšOúû¼Ì£'-VÚþ×õ¡ç>ñEø«ÄZ¤ö®úMõÈŠVÔÛìÊ ±̾­œùdzñÇ­-úÝ¥ýlo8óbgŠûtµÿÊůøÏZ“×Z>¼– kÃrjÉe ‘y °–F í¸c£|¼öæž" 9Ó럼—æeu ­¥Íÿ¤¶s:‡‰uO|Õl­ÖÒÛIÑ,´ûg<÷„Á ÂÙç§m«{ÕcQÿ;KäFÝ“‚ìÛùßô;[¿ˆúà½Õ¬¼=§yãCH#[ìË›™/Œ¸EòÂ1Âî=ztR“mÎ×÷š¶Ú'g®ÄSIB0½Ÿ*wõZiúšz_exÓSOi¥µø$»¼¹»Ú.í.u+™‚¾P"DÁ‚,rRn4£ÝBÿ‹Z¾ߨW‹©7ÓšËÒËdO§üTñ¯kᯰÚé–³j¶×’\¢’EG€PSƒŽ„äg¯ºžç;[F _‹Óðÿ‡Ø"µQ{¹rþ_çÿ WÒþ3ꩭYÉmu£Í~±Z«£¬‘¹M¥‹µŠ“÷r ÿ2Jžç:[¥¿íæ—árayrù¹/¹_þÓx'Æž!Õµ6ÛQÓLö:…—ž×piWV‘ÚKÛ JJÈèÊFOnkND¥8¾›>úÙ«oçýi<×Q’ë’Ý;íäzfXP@P@P@P@P@P@P@P@%0 kœLÑ$2HPvퟩ“ž¶Jÿwù–£¥î|Ÿóé7æŸüUòþWø˜r®ÿŸùŸ'üúMù§ÿG<¿•þæ«¿çþB—^¶³Å?øª|òþWø˜r®ÿŸùµö8û<£ñ_ñ§Í/å‡ù‹•wüÿÈlW+pŒQYpØ!±×ð«§.n–&K” j@ÃÒ˜Mãøõ‡þÂWÿúU­Æw_ÿãæûéÿú-«ÿ˜Ñ |¡ vçZŠ»}Bí•ç–ßP¸„JW…ܨáHèF+8~íZ;^ÿ1Ïßw~ƒ$ð†dà}71¾£ý¨ËçËÍÏüôûß§Ýö¢ãƒÙÛÈ%ïs_í+?BoøC4ªÞjBÉ„÷ÿñö‚âAÏÊW÷îòß‚z©ëž¼ÒQJlÚÑôË=L¶ÓtØ|‹KTÅâÛTvÉ$ŸÄÕÊNNì˜ÅEYtŸ hzFŸ}ac§¢Zj2¼×PÈÍ"ÊÎbCÁ§JÍÅ8*}ˆ«¾wS«([|<ð½½¼ð.œò$öŸbo:îiY`ÿžhÎä¢óÑHª—¼š}Zoå°—ºî¼ÿÈ'ø_àù ’Ý´¹ ¢Š)bŽöxÒUŒõWˆ`œŸzmÝßÎÿ>þ@´ØÐ¼ð^…w{%ᶸ¶¸š5ŠY,ïgµ3*ŒþS®ü2Ù8©j÷O®ý¾í‚>í­ÓoørÆ“áHÕ.u-:ÏÉ»ºŠ8e“ÍvÜ‘¨T$€Aõ«æ~÷›»õ×üعRåòV^ƒï¼;¥_ëvzÅÝ –þÊ7Ž K°®0Ãh;NAî gʽïï+?B›z.ÎëÔÇ·øká;H¬ã³Ódµû™ä=½äñHÎ\oW Aô$ŽO©ªzïÚß+Þß{ùßçkiÛNÄÖ¼/§­ŠÚi~XÓÒd¶ÿH”ùk.|ÁËsœž¹ÇlQ/y4ú®WéØi٧瞟ä|+`Ö¦ÛH–ÏiÉ,’(‰É.…Yˆ`K7PzÓn÷¿T“ùmù•­n¿›Ñ–tèÚ4öóXGxŸeR°G%ýıBÆ7r«Ç(M¯ºß-?ÉIý÷ùëþlݤ0 € ( € ( € ( € ( € ( € ( € ( € J``jšÔZEõÑdÞïå„\ã±ÍM8Þlrz"ÄZ†¦°Ü=Öž"ò¢2) Ävã>õ¥—FI—ˆ¡¸Ð&ÔˆU0î  ñ‘Ð~97 ;ô2o<]$]µãÀƒí,ÁW' «Tõ±7 ïF–vWVà:]8\Ð÷¦¡¨\×Ò_tSûNÃô„œ½J“Ñ™Ôw­¬I“ÐUXW<§ÆÇ6p]FÿÿCJkrŽëáÿü|Ïÿ`Ý?ÿEµc?ó;ÌeÖô™5VÒ“T²mEZÐ\!™F3’™ÏCž”GÞM®€ýÛ\žæúÞÖâÖ äÙ%܆8Wi;˜)b8éò©<úPµv]¯ùš¢¹b€#Yák‡·Yc3F¡ž0Ãrƒœ:€pqô4Åy5[71™å˜À¨¿128û§`Ï8㢅®ÞoîvŽ€ôßú¹r€ ( € M¤®ÀÌÓ¼A¦j63_[\2ÙÁ×DðÄT³€ÚRWÞªÚ'ßïû·êIDZnÒúÚî[˜í¤Þö’ùS ¤m}ªØç¯ §ZKdÿ­¿4lX  k62ëéP¼²]B¡¥Ù†8ò¤ °6;IÎ8æˆûɵÓúùüû¶O¯üò'ŽúÞKù¬RLÜÁI"m?*¹`§=9Øß• UuÞß“ýAédÖú…¹žÎO2!#Ç»i21Vú2‘GDû«ýá³k±9!A$€$šM¤®Á+‚h® Ž{yXdPé"0ee<‚ê*šiÙ…ÊÚ–©c¦C,·×1±Bó°'-å®70QÉ# î)-íè¾ýÞ;ÈÈéA)Ý]ÜÜAio%ÅÔÑÁJ^I$`ªŠ:’ORm-ÊI½WMÖ´­QQ´ÍNÊõ\1So:H)ˆÁ9ÁaŸLZ¦¬¯ýZ?¸› ƒZÒ® ¸žßS²–+U <‰:2ÄÜ ~QŽyíK¢}ôù­º—¾”P@ÜO ¬Os*C jYä‘‚ªÔ’z !¸†f‘aš9Ù F£`C‚=£¥À’€ ( € ( € ( € ( €˜WŠ_C}FòÛ^½[ü¯"\à†ÚÙíŒ}j©)s7Kkfdx^œx®çC·Ôÿµ´äˆ²Í‚Bã3Ðsޏ­êAró5fJzØåuNçJ¾Ôü/bn/#ýÜ’¿žSò­£Ò‘ ÛC ñëG§7†l—18‹ø€(*)«Ý»Xå5ùî4-z=BÆØÝ$öäŸá'Ó…kÌ®Kvv=o@}ÐÝóÒå‡èµÇfýM/¡¢Ý*Ä2˜Yã_øò·ÿ°÷þ†”-Ë[ßÃÿøùŸþÁºþ‹jÆæ4v5˜Ï6¼:­¬×ö~ƒPyžKÉü«ý0¨´™–R$‚ણnv).H~ªš¿³·D—­®¯—Òûku{½ ÑTMõkÓk_ËÏî²fLv~!6ÑˤÞê—·Q¼ w:mäf”ÚÎnº‘÷eŠ` {'îÞÛYëåÍ ¥³Ù6ºïmˆ‡NnêÿËÖŽ6=J+ Ï©k÷ZkÜÄoa‹OÔmî!MÊ4²<¬ ù{„MÀ_BsNɤö×ï²µúÛ{_­¯¡+š×ëeùëåN›kc{Ãö6ÐxâKÈbÖ„7:tÚK–»(v™C‰<ÀÀ IƒÉ#’hÒ’ë{ü­Æë[kßAÊÞã^}ÿ-téøÓøxÏã¹cxµÈ„Ú»\<ÑMr°ù&ÌŒ¬€ìC¿+òÀ`p1QEYYôRûÜ“_†ºiu¯TUW­×^_òÓõE+«yðÁu©ë6°¬‰i:ØÞÞ>帔þLŠIØ" ÌXtþ,Õ'w-ýßÉ_Ë{ßDõû‰¤®–×—ü?Oøc³ñ&›u©ø‚Êq©Åb¶ !³¸–ÝZ]ÑlÜÈAÎ73ëÔf²Ôj5½•½}ï¿§—–ÇØO¾¾Ÿ¡ÆŸKy¤ÌÉ«ÛÞB,ã–1ozëp¬©æÈÄ81¹RŒà©9cJ¿G¼ß/uÚÞ®ÍrÚÏæDU¢“éoÏü»î¾E/Lñ ´VS‹}çH´ÉJÏq3©’G+rIÁ@Êž®9ª©¤¤¡ÞIzriÿ“lûè­°nµíùKOÃï[ßsGá¬ZÊê-&µ©j/rÖä]Z\i÷qÆ&Ü2Ë,’ým·7$;tø¿»qKwÉ·ONo?ï/™RÞË]Š;xVïZѬ@™íi÷×R,†æbL‚)çiˆþø:‘ÿ˧tãͺQÓ¥¹U×òïtú¯È•µ¶×~½-çéó¿CÐ<#ew•}s{6¡%íÅÅÇ2Èv –O,"…qŒF98•Kª G~Uë{_ž÷c‡ñ.ö¿Êß×õc•ðý†¼tÈ5Ùõïí¯¬Qb’y‚ùF8Û£' 2dÜXOévU¶nwô÷­úYï¶¶±›»Œ—’·­ÿ­ ?´™.ïEÄvÚ¤ÆM&îÚ#eç²ùÄ¡EuŒ»ï §=aj®áø7}ôÑ=/òêlߺ¼›üVžeiÚæw5¦—w¬)šÖK‰˜Ý^:åf³d‹.7r±°ÇI­ìôWvß´mço‹W}wîBVŠk{/Ïî½»[Mµ±¹öQ'ÃÈ¡Õnµkð²#}¢ Ré6ÌÉ”<‡f;ƒ– “»5SÒQ{5m|íåßÓFún”>Òèï÷=Ì«Á®]éÚ–v’ËyãÛÁ7ØZÖk˜e‰bód‰¹dØXX² —nX½9“‹¶É7{õí¶¯]ÊRå»ZòÚKÍ®žz7®šém5£¬xb÷NÑüK.‹cpî3f XÎë«sm)QüEdcý°95jMÊ ìåwåûÆÓû´ôw{!(òé}RûôÕ|ÿ5n¬ìuk+»¿éae¾ŽÎ9¤e†i"‰¦ÀåHÏñ|§¨Ïf³|ËÚ8ïeo_{þ–Ï{4•¹ ŸÏ½¬yìO­Úi¾~±¬ë‘Îò[G}o…üm¸ÜFÇ)‘М` 7k–ñKgë†_?]tµïÔs¿¼Ö_Ó»Òúô}MPIe7ÅgÃM$æÌBnÍà. ›ñûð›üý»øéž6Ô{Ü­}»>]­ñ=ú^ÖßK^ú”­Ï¦×WûíÖÛ^ÝvÒåmGþ¥2™Ž¹sªµ–mÅÌÛ8µçnÜÁ02ÛdVé¸ W/´÷væü9––}-Õn·[™ÇàWí§ù¿;nŸ]­¡~öÆk{T/ˆ’ÚãTI¯É®Û}±@1”'þ[Gó…ûµ;$¢ö\ß}Û^v³{iÍnmJwÝohþ‰üýuµì_ðf™«_ÝÌÚ寵ÙªÚ .&‹åi' _‘™D^Vwdƒ‚~nhqn›MÚOOOv7µ´ÞþW½´nåÒšåønÿ>¾]¼­r߃µOì3êzªÝÞ2͘‰lLŠÆ7òä¸Ûœd.Ku ƒÓjJIJÖç÷¼–š/M]î‰k‘¸­ ­æõüíeäÓùöµ%P@P@P@”Àäµ­&½jõµ-õ;y/%Â#m ØË:Ž•q“ŽÌÍ­uA¦ÛA¤ÆÑé~¹´~o.8Áo©Ý“TæÞì[lŒZóEƒVK½GIXõ ¬’ˆ|ÅÀÈ?{"¢X˜R\²•‡ÊÞ© %Í–º"œiO}övÝ~éÌmÁþ÷ZS¯+Á’Ó[¡ºšjE-îƒ4ï1´‰+ôù½«XÔ¶Ä´ûY¡µ¹7P¼ %Ã:«ã;v¨ÏúÏ©QNÆ©‘{Qr¬ 9éT#Ë|kÿVÿö¾ÿÐÒ…¹kc»øÿ3ÿØ7OÿÑmXÏüƎƳP@P@P@P@P@P@PsÁ Â*\Eª¬®¨`NAç¸ }E;‡‘%P@ÛÁ ¬+ ´Qà *F¡U~€Qä”P@P@P@P@ L ]n]B+‘öCt"Ú?Õ1ŸøÏô®*ÿXæýÞß/ÕšG–Ú™2jZˆá¦ÔÑ-¿Æ±ÿmþ¹Ìv€žšÝîõW¾ ÈgNgýZwʲ‹´åí·ù~…ÛOt¥u0Äwßdi• 0çìË_®ïéSIÖç—±ý?QÉ-.?í7óÓRÿ¾-ÿƺ/þ¹Ì‹@½a$Ò¦?|Ç=e ÿâ½ ;©ÉûÍþ_¡”’OCF( Œ¹Éô®”ŒÛ$ª$òÏÿÇ•¿ý„o¿ô4¡nZØîþÿÇÌÿö Óÿô[V3ÿ1£±¬ÆP@P@P@P@P@P@P@P@P@P@P@PS`ŠO¾™üi +>Óþx-;ŠåIô-&i ͧ[HÿÞxÁ?C¥ ;Ê+î3A‘§[-¬ „7$FsùU‡¬&ØóemÿÍkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øP›xÈÓ킨P5 àŒó§A[ÄG[áoøùoûØÿ趬äèjf6¹k¹ÌQÜÜC"[ˆagŠ2:îaÀÀäûRºB)X’XÎä‘C©õdʘ € ( € ( € (+›ˆ--为š8 ‰K<’0U@:’ORm-Æ“{ Kû9,ú]ÀÖe<Áp$=¿ÞÝÓôÚkGý_a-v$’x¢x’IQS¶5f¹Á8§Ÿ £­ƒ¥É( € ( € ( € ( € ( € ( € ( € ( € ( € ( 1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg FíÊ<–Ò¤M¶FB³Œpj^ðÂ}ŸÃÖÉ ·‘!PèÀ[¶÷ŽO¯<óš‹Øu\Iæ,c„cߟþ°¨¨›¥$»2àí$Ï0þؼ=áë}3P´]KJ¶w¸G;¾ÆRÕЙ”e ŠÞ¬¹ªJqz5¿Me»_·ã¢dEr®Y-o·¥ÿ¯øtV“Åz³[ÁôQÀÒʯ©]][G uHÈHçX^7S¹ÈÊ#œ`ãi^¯M4Òýu·ÎÚlÿà EßkÛç÷|ïoš:]{X¸µÒ¼<÷zí®˜·²»¾£1Ü»e@W€Á"ªvö®;+?͘£g}õ_×õÔÉÒ5¯ÝAªÜ­ü—#N³i­#[tÅî^uŽFÂä†TFÂmÏQÁÅCmRæ–Dü´ßÊ÷òÕ;éjI:œ«oÏ˶ú_çêÕÕî®âo²kg[²¶¼°+tb·e‘Þ@#µ06üŒ1†RÃ&ªW‹º]d—Ÿ»tþû«­Ä^ñ³ì›ò×õìõVó+i^)×e±¸¹¹Ö´ÝÆ%70%ÂI>žLˆ®þO’…+>C—Á ’FrYYk£k_[õÛ]Úkr¥u'eª¾žŸ‹ù=zt5 žÙü[¡ÜEâ¹/­å¶¸Š9÷Û¸23ånHÀ$ŽË†ù~¹pÒRVÝ/¹®þ^_1KáZõû´Z|ÿ®„·ºŽ¯£}všœ¢ÞÓV·´K5†2ˆ·díÜOï aøÔAÙE½oÍøs[ç§ü Û©­ÒÒÉ?Ëð9ûoj÷— =eLW¦&LKóZ¸‰ ²¬*¨Ûd9V.Axæ©Æö‹}µ_á“ßn‹§Þ˜ª>[´»éóVÓ~ýuù.gÊšo›‘ÿ…¿'Ï?5g®—-û­þk•ÿÃþÕµËÖÔ"ž-HÜêÖwWžVŽ#L@„lT/˜K§%°Û¸1)Ú<ßÝÕö¼£Kk½Þ—KH¾ñùéúþ±gEÖu­FâÊÖ?ÙOÕÈF–Êâ©£L¬U¿pй(¸Ê“Ãg=+T½ë>—üzüÞÝ{2.Ò¿§õoë_™Òø‚MF]vÒÂÇT›O‰¬§Ú¢gfFŒ/.¬Þ9â°œšI/²“_ù7á§üï¤R÷SêìrGÆšœ—Z\‘êÄî-âÎI¢S)•P³Ç”\¯Î>c"Œ‚0qΕ}ÙO—ûß+'oMV—½×ª%|*ûéó×ü·µ­òe7YñÇiq6³%ÎcÓæhšÞ%n£¦B‚ÆF9É9$qU?rRI^ÎKî…ÿ?Ã{î-ÕöÒÿt­ùoøX¿ðû\Õµ[öþÒÕ´é÷@^[ºFžÚMÃ(D ‡g9ÛÏRZK•Û]¬ÿ¯ò¶ÕéýÃ3º©P@P@P@P@P@P@P@P@æ>3ÿ ûßèi[ÄG[áoøùoûØÿ趬äèj9duRªìõðh´P@\YÁq=´ÓGºKW2DrFÖ*TŸ~Ž}hZ;ü¿/ò–'  wÚe¥üöÒÝ£Èm_Ì|× »Œ@v±7ƒÈÅ GÌ·ªåè\ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (Ì|gÿÿö¾ÿÐÒ·ˆŽ·Âßñòßö ±ÿÑmYÈÐÔ Ìmr×s˜£¹¸†"D·ÂÏduÜÃÉö¥t„R$±$±É"‡SêÈ?•0@P@\ÜAio%ÅÔÑÁJYä‘‚ªÔ’x“in4›Ø-n`¼¶ŽâÒxç‚Q¹$‰Ã+PG©¦·iì,“EÆ’Jˆò¶ØÕ˜çàçŸÀÒò ˆn5[¸-.o-ṹϓ ’ª¼¸ëµIÉü(Z»-Áè®ÉŒÑ,ë•Ì¥Ö2ÃqP@$A‘ùŠ`Šh¥i)QÚ&Ù V£`C‚â(épò$ € ( ®åhm&•-3 ôÈ  Vx’úÆÞîô¥Žâ%•CK&@`ÏËך›°'û‰ÿ¹¤ßÙøš.À>Áâîi÷ö_þ&‹°°xŸûšGýý—ÿ‰¢ìì'þæ‘ÿeÿâh»û‰ÿ¹¤ßÙøš.À>Áâîi÷ö_þ&‹°°xŸûšGýý—ÿ‰¢ìì'þæ‘ÿeÿâh»û‰ÿ¹¤ßÙøš.À>Áâîi÷ö_þ&‹°+Ø.¿¨@ÓY"HÒY!'̘aãvÇ)Ù•‡¾8â‹°,}ƒÄÿÜÒ?ïì¿üM``ñ?÷4ûû/ÿEØغõüBp}ûôßËú¿CÃŅÿ$Ú‚Ý[G“,0$—2Ddf@ ƒ†vʶѷ¸Ö©]û×ò·5¼×Mý7µž¶VÑ÷ÿ;ùzŒÒ¼S®Ëcqss­i»ŒJn`K„’}<™]üŸ% V|‡/‚$ŒåÙYk£k_[õÛ]ÚkqÊêNËU}=?òzôè?TuÕZâ />¡ŸM"úlÎäܸÚY#ÚBàr ù¢ö÷Ÿþ‘{þŸð“I>¾ëüÿËó+okvoœZƧ$ffŽk颴K¹̪ۀ•ð2Æß19äR|ܾ‘ÓÉ¥²ûÒÖÊÛw©®[¯7¯Ýým¯ÈÔ¶ÔÞÿÅúZÞkï"Ô®Q´µXÂÛ"Å*£·Ì –ÁÝÀé‚–ºïî»ù;ÇO–Úë¡3ÚÏMWÏMÿ¯Aþ#7¶'Öu+]RæØGkdû¨!‰¤‘]ðPœ Üýqœ–ÊŒTÃEfôr³ÿÀS_宊ýõ*zÚËT›ü¯=,eͯ^‹ö¹ƒT0@“A¬R65¨y¾PìÜãp~LpiÇûÚ_–ÿ|í¾×²ûîº _ÝÖ×>U§ËÃr®^Z\]¦™â>Çs}+6­us +¬0m_3Èxù¸3·ƒÁÊWåKm¼ýé}ý6k~Û7k·¾ß-?¯Ës³ðeÖ§¨Ï}q¨êqÜ$¤Vª†L19u}»˜eŽ9¡ã4’½·oåi5ý|¼ÛooOŸõù˜í­ê¶Eª]jW70Ku{ ÚE#jD&*PíÎñåŽK`÷ë$í}Ü¿gîëäµÖ÷ﶆ¶¼ºJß/ëkšWˆµÍBýtØüA«Ê‡ív²ÁtB˜gb›Ä(œ4Kü'ò{9¶¡).Š_;rÛó}»o©jëÎß-]ÿó_x‚ s&©­ÜVwÝÍåÛ¥ •%$òÝUwF€VûÄgEÍ%7¬Úû”]¿ç¦ïªí/Ö×û·ûöÐê<9©\ÜI¤%æ»gs4Ö÷ c³hîBº'œFTXà S¶­y/—ŸÌ]¯é±Ðj_òºÿ®/üIFˆ-Ÿ #»[›Ûk‹-$K ÚÞMnCyCùl7tèÙ¬Ò÷£æâ¾M«—«×òd:–©®hº¿ö„ôÙõol—rýªãí2K½˜mó&¸FAò}à$ýÑšàù¤ï²i~·ütÓ¦ý²JÐNú»¿Ëúzþe?ø›_:wˆ š{]1–Îê[0HÌR6 $[„£g+ò:pG&cª{Çîm}ë]Ó³ò¾š/‹m6ùò·òi¯òz ²OO¯j=åž¡ëä»h´ô„EIÙŒÌI °!åÜ1Ârä§Îºs^úÞÎI[¶¶í¢ëÖç´{¨ÚÝ/ßõÞþ]4-¼IâK;HÿHÑm®õ;5ò[ÈbŽ4Hϖ̘™2[ >éëUW÷NÜW~z¿¹+ZúÝÛE{zÞnߟçÑz롟/µ¿µBö6QÉ>¯“ÚÅ´“’9œ«#Έíû²2 dçœíÓ‹ŒåMtrû’ݾ»ìݵd§î©>ßíNß%swHÖlœtÒÖ´zÝþWßï3Mîú+¿ømÎ’]sN‹Ïßq³ÜÇi'Èß,¯·jôç>bò8çëPµµºÞß+ßòe¿v÷è¯ò!ñ/ú«úÿƒÿB¤Àצ˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨å‘ÕJ«°SÔÁ Ð@µœ²ÜI{æO6S’w6Ð¹ç§ ”-¿­]íÉè € ( € ( € Šê#=¬Ð© dB ·A‘Žhíœvè°i—>UÔ1Û¬$BV@)Êx>•z f«a¡k júfŸ~`Ï”nmľ^q»”ã ééM]K™n.œ½·Ó´[‹©í´½:¯A2GlªÓƒÉBå³ß4­îò[NÝÕKª&Ó¡Ò´»cm¦ÙÙÙ@Ç&+xDjN耜¯%g°’åwDWÖýŒ67úfŸuio* ­ÃÇÕ+ÇkÍÍ׸֊Ȫº.“,Ú„šž5Q¨E{‹ÿA¿_ð¢èþ}þ‚~¿áEÐ5}kM¿6ÙÝÇ,Ÿn¶ŒçÅ&Ð5Pcã?øð·ÿ°÷þ†•¼Du¾ÿ–ÿ°mþ‹jÎ@ކ a@P@P@P@P@P@P@P@P@P@P@P@P@P@æ>3ÿ ûßèi[ÄG[áoøùoûØÿ趬äܸgTAPÏ" ,2æ œdzÔ Éñ…½Ä¾ÕãþÐïg(X〫´ôùŽ~˜©mEŽ“Oîh¸+»wŒï¬ßgÿ?pßÁþ4}¾Ïþ~àÿ¿ƒühû}ŸüýÁÿøÐöû?ùûƒþþñ íöó÷ýüã@Ûìÿçîûø?Æ€·ÙÿÏÜ÷ðo³ÿŸ¸?ïàÿ>ßgÿ?pßÁþ4}¾Ïþ~àÿ¿ƒühû}ŸüýÁÿøÐöû?ùûƒþþñ íöó÷ýüã@Ûìÿçîûø?Æ€·ÙÿÏÜ÷ðo³ÿŸ¸?ïàÿ>ßgÿ?pßÁþ4}¾Ïþ~àÿ¿ƒühû}ŸüýÁÿøÐöû?ùûƒþþñ íöó÷ýüã@Ûìÿçîûø?Æ€·ÙÿÏÜ÷ðo³ÿŸ¸?ïàÿ>ßgÿ?pßÁþ4}¾Ïþ~àÿ¿ƒühû}ŸüýÁÿøÐöû?ùûƒþþñ íöó÷ýüã@Ûìÿçîûø?Æ€·ÙÿÏÜ÷ðo³ÿŸ¸?ïàÿ>ßgÿ?pßÁþ4}¾Ïþ~àÿ¿ƒühû}ŸüýÁÿøÐöû?ùûƒþþñ íöó÷ýüã@Ûìÿçîûø?Æ€·ÙÿÏÜ÷ðo³ÿŸ¸?ïàÿ>ßgÿ?pßÁþ4}¾Ïþ~àÿ¿ƒühû}ŸüýÁÿøÐöû?ùûƒþþñ íöó÷ýüã@Ûìÿçîûø?Æ€·ÙÿÏÜ÷ðo³ÿŸ¸?ïàÿ>ßgÿ?pßÁþ4ø®í¦q7Hç8UpO¯JWÿ»_÷ßÿE=K@cã?øð·ÿ°÷þ†•¼Du¾ÿ–ÿ°mþ‹jÎ@ÉúÁÿ_ÿèŨ›âÿù¯¿ëŸõžÀPÕ§ðæª[ÚêVzUœA$¿i¸ƪUäcþ½©.[µÚßÿÈm4“+jz߃tÉï ¹‡MØÛ-Ë XwH­œŒžýô¾´Ykäíé·á¯æ ¥º«ÿ_qrÖïÁ—Sìú ÓÏþª(Þgã<ÉãÒ«—[$O6—©.‡k¤Í}i¦éמ[ˆQ#ÃJ\ MØ8;Ž¥$“q·[}ϯÉkò+kߢ‚¹×~´Ô.íõmÆvH–kƒbIwÑJž¿ÅÓŠ"“Û{´¼ím~÷oT'u÷_ñäI­?‡ôÍãQK2)$1 XÇšÈ d‘µ³×>”¬®—{}Í¥ÄkQñMá l&¾ŽM ­ `³N­ Ž6ã†n€ò:úÓi$Ÿq+½:”lu_ \Ïv×IŠÖ*—eàò¤]±Àðy2ÆGF@¡%Ëw§ü;ýÿÏPëd\k¯%œWq ­¬ÎR9‹ÂØuºíG.©[W°_Fû"Ãê/§DšCßF»žÙDFUrS¨ŽÝÅ &®ºvµú”u›ï hÚ„v7Öštw2Û¼ñ£¬î @Ú 2rqÛånx¥¤ÜVú~?åÔoD›,K7„ ¼{)¤Ðâ»K<Љ¸’½@Ç?Ji'·õÓóÐ]ˆÍß„U%™ÿ±cµˆ)7,ð²Ìˌ烔#9àg ݵÿ­¯ùV[Í—‡ÖÇí­k¦ A›ç˜ãòöc;·tÆ9Í9%‹A/{b¬rxFH­åôFŽèí”ÂD§vÜ)þ#¸ÇsŠ|ºÚß×ôŸÜѾìÿá½¼–ÎËûâê ù°Eå;ǃƒ¹G#ŽjU¹y–Àôv{”tíKÂw6Ñ=Üz%”ÒÆÓ¬<;üžJÈAÁÁQ»Ðzñši.Úé&í§ãa»¦×›^¶vý åð¶žH¿]×j†>p‰0pyìv·ýò})h¿¯ëºûĵWDÍ Áieska¦]E{2Lj±ì*AfpØ €ªÍïÆ›J-'¦ïÑZ÷ü—Ì©µýj—êK§ÿÂ+© éߨ×c s•'ÝÆîž›—>™´4’»Ûúÿ& ëb–™ákíJâÃÉÑ£% oè‹Ü©_z.2GÌzg¦hQºÛ]tíf×è ò¿-µ=[ÂÖwqÛ[Ûi’‰^;ˆâxÛíÜîÊóüR‚Rzmßæ—ëøh7î­Mdð”×rZBÚ#ÜÄ¬Ï ˜K _¼JŽF;ÑîÙ¾ˆZ軑ý³ÁbÄ^ý§@†O(OæCåïÆvîéœsŠvJ˸/.ƒ5ÆÓtÙì¡´ðÜ:“܇r–é²F eÆò òÈ:½øTÊÑnëD®ü¿­~á­RiîÒûïþD6:†åÒ¢Ôõ=*ÓD´œ)‚MD[F% 7 mvíØàûUÊ /•ïØIßU±váü'mrm§þÆK‘›Èo(HPŶžq€N}ª$ÔT¶Ük[[®Æ$%ð½ÔæÃB[Ë8­ã¹¹¹‚vKTmß|oÝ•ÚÙ ŒUòYÙ÷µú7§ùî+ßmûO/„#ŠyM #¶À˜ÂY$ ÇørA÷§Eýy_ò×л æøWϬzC ¶7m(0mH¸Ãžs´ç!±·ƒÏL¶’½ôµ¾ö­Ôǧ&¢òèKc#ìK’Ј™¹à7Bx<{JÉ‚ÖöèV‡Rð•ÀÕ¾Ïo¦ÈúHf"'h@Å€ùyÆN9TËH9%ßO;µo´*+šjÞ߉­xBàOìz6ŸuhÁ.!™á`cƒÆ@É r§Ž+GýUíøÛñéꈋ½½/úšòAᨠÉ’’Ê$eŒ)+Ã>£kgÓÒ¦ËEýZ¯¼iö(5ç†dº³‹O¶Ò/’{†‚Y 10€¬nÿ6çäÆ:Ò\¯^–nþ–ÿ1¾Ë{¥oSVÛMÐî­ã¸µ²Óç‚U ’G2¸= `ЧhГ¾Ä¿ØºWý,¿ïÂ…+ ì]+þ–_÷á?‹ ì]+þ–_÷á?‹ ì]+þ–_÷á?‹ ì]+þ–_÷á?‹ ì]+þ–_÷á?‹ ì]+þ–_÷á?‹ ì]+þ–_÷á?‹ ì]+þ–_÷á?‹ ì]+þ–_÷á?‹ ì]+þ–_÷á?‹ ì]+þ–_÷á?‹ ì]+þ–_÷á?‹ ì]+þ–_÷á?‹ ì]+þ–_÷á?‹ -éš}•¤²Ikgo˜™KG©#2&–ƒÿñ÷kþûÿ觪-yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«97'ëý|Cÿ£ fo‹ÿäZ¾ÿ®ÔR{_é/u¯Ûßâ6sÁ†ûÁ‚8é…9úÔJ7D¾ÒKóÿ4Rvq}Ì𦩙=‚=™K­+ÈÀÇ,jà»~e%ýAèkiÊò“_̤¿ m·×И%_š~·ù~$š>¹©]êV÷º}•”êp]Ip·ï˜Ò0bPÀ”Û¸‘Œ·¨Yr>ÎOïo¿æ½t–œ{¤¿¯Îݪöy¦YÜZ[EÞÏ{)³„[T“ì¾YÕ©V#¥L_-›û1{ÒËÊÍÿV*[;ukÖÛÝüÒ^†LžÕµ /ìà†ÛPº72<·í{¦×˜­x¨öI~7×Ë·g©™®xk[7­ª›[9¦šî'û,s;¨&K^­åýÑä±-·ƒŽ¸P÷%¿¯ÿíÊÞcŸ½~ßä‹7¾Ö§º¹Ô`M>ßQ½y 4wo¶Ø2F˜ÄVpÂ<²ºq‚ÝD/»Ó¯ÞÛVùéª{÷w|Ï¥­òë~›ùénÚÛÑ|)w¦ë^|ÐÅsw\Cru;•ØÒn?ñíƒ?9\†éÏ^(WŒ,·JÝÿá¶Wó&ÝöÓËeý[ËBOèZæ«k§¹4٬é¼› tùX 8=i«*—[^/ÏÝwüoò*úy¦þæ­þG=£êš„òxrÖÑžòs{$sÆš’€tAæ” £± gÎ4šöŠKÖÒ‹üRoµúꮟ¹·V¾^ïä¶ï±ÐkÞ¾¸Õ öŸ«2$ ÝIlð2,Ãr²£ùhÖVR2õ=ë·Õ·¯ªß³üÁ$¢¢öJßáêOu¢k7:iÓK§Éöx­^"c(²Íïpà ;T £Œ“Ž‚©é5(ôzzZÞv{µ½´Z4ú§ŸÝ=®E£xfúK¬jÖ).Áh râ%FÆ*3ÄD“Ët=j9³”ÝZÿ97ù¯[\¦ï%+lÿK}ÿ¥‘ÎØG¬-¿Øí´×EÓ´ÇÓ¡¸Ž ã2<’FŠû$‰1€¥ŽÒÀs–NÕSæÑK•z-o欞—K¢Wag%mmÌÿËï}¼Î‚ ]C®ÿ£Åi’ÄyÊ&g7 !bd*Œ:oG\Ž=‡ûÅ%>·ü_Ὶô¹)r(òî­¯¦¿?Óå«´Ï ]Aq§\^Ëoq5¥Öös’|¤…∠Ž[Ǧ 6=Ú“ææ{´ïþ'kü¬¬*Î+m-è®í÷²©ðåÔ­&™=¼3C ½äªzÁ#ÜJûT°‚p;yþ™ˆ¯wÑE}Önßø ³ÿ‚[v•×Vßáe÷ÝýÁeáÿÙ]‹å6ÊRX ØE´ù ґåÿî Œ¹Æhšr„£üËW÷ôùùz¬šk§OëoÅ~DWƒu{{H´Û‘§­¯Úmnd»Šw3 q ª†09hñ»wFéÚ®v›í¬¿ònoóóÚ³Iù¤¿êÞbßxS\¼Ð-4fM2(¬#’8§K‡&`a’0Ìž_ÊrÀœ3w¡;ÍMékh¼œ^žZhŠÚéuwüÿ̆ êš¶—öK­>Æ [{»Ù£óeIp\Ì]B ŠD™ÜŽÀ爊÷`Þê)[îo^NÛújlÚ]Ö¾ŸŸù]ërM äïòFemF©<beŒnc^B<¿ãRH#,H·¾·ZôëÛg£òÿ4´VZZÖü~íôù÷ÓoCÓ$Q¸ÔÚÃec …²ogAòî}®À¢îÇ;9瀪'8Tï'ø%§âä÷e-~÷¯ä¾ò…ÚÃAç›M²6“D5 ìÕò©–Y"ºÇ÷JàƒØŠº–•IÊÚKüÿÂ:E.ÎÿŸõ÷‹¦øZþÇV„ÚCi§éà)•#»’ãÌÛFɆ^žb²–æ´ÉsÆQo{ýíïåæµ_x-,×—àïo?Ó¦Ú·Bð\›Ðø‰"‘ ³·´H­¯&òåù¤ ¬Wå`Àr>·ÍvåÕ»ù-ßvöBk¢Û_Å–¿á½µÓìÍšYIwg©M|"•™#”HÒã,•`²§•ǽDoKt/à®×ÏïM¤ù¼Ýþïëò0§ð½õãE¥Ç½g´‚Y¥“Ãn%{˜§X’P+ò²îNWE[U´yWkÙI?MôÝtÔrwßís>ö¿ùõï©«aáÝOMºƒQ±°²jÒ‰`¸Õ®.‡0Lñ– <°¸ÛŒw¦Ÿ.Û[îÖÿ4ﯻÕ÷þ´kþæ?RÒõ?:òÑ ŠK=fþâvf‰B'˜¬6ãn" 6yÞ=HY8Ǥ[‹’ÿɬ­­Ö¡+´ßuo¿Gø;ü‰‡¯ÏŠÛ­›Ø-ÿÛƒo4³ù[vmÇ߇”ýÝú&—ÍßåÕyŽzíåøš·„µËëÓû8Z$×r¤Í3ï“ÎY@6apeÁùŽ@Ï*`¾n‰/[8¿Ê;yîSz»uwü?̳â?ͬë+:M ½¨H— ÃbN¸+¬¹•r§‚¡÷iÉ9K­Û^¾îÿø óÙ­uSouGÊßžß~‡Y§ý«ìPý½ Žçhó-?ì’ÇáU+_AEYX±Ha@P@P@P@Kk÷¤ÿ®mü©>€Uøûµÿ}ÿôSÓZóÿÇ…¿ý„o¿ô4­â#­ð·ü|·ýƒlô[VrnOÖúø‡ÿF-@ÉF2 pA€##§Z—í2ú¯ýð?—*ûL¾«ÿ|ð£•}¦_Uÿ¾øQÊ€>Ó/ªÿßü(å@i—Õïþr ´Ëê¿÷Àÿ 9PÚeõ_ûà…¨í2ú¯ýð?ÂŽTö™}WþøáG*ûL¾«ÿ|ð£•}¦_Uÿ¾øQÊ€>Ó/ªÿßü(å@i—Õïþr ´Ëê¿÷Àÿ 9PÚeõ_ûà…¨í2ú¯ýð?ÂŽTö™}WþøáG*ûL¾«ÿ|ð£•}¦_Uÿ¾øQÊ€>Ó/ªÿßü(å@i—Õïþr ´Ëê¿÷Àÿ 9PÚeõ_ûà…¨í2ú¯ýð?ÂŽTö™}WþøáG*ûL¾«ÿ|ð£•}¦_Uÿ¾øQÊ€>Ó/ªÿßü(å@i—Õïþr ´Ëê¿÷Àÿ 9PÚeõ_ûà…¨í2ú¯ýð?ÂŽTö™}WþøáG*ûL¾«ÿ|ð£•}¦_Uÿ¾øQÊ€>Ó/ªÿßü(å@i—Õïþr ´Ëê¿÷Àÿ 9PÚeõ_ûà…¨í2ú¯ýð?ÂŽTö™}WþøáG*ûL¾«ÿ|ð£•}¦_Uÿ¾øQÊ€>Ó/ªÿßü(å@i—Õïþr ´Ëê¿÷Àÿ 9PÚeõ_ûà…¨í2ú¯ýð?ÂŽTö™}WþøáG*ûL¾«ÿ|ð£•}¦_Uÿ¾øQÊ€ ̤‘‚1ÂE_þ>íßýôÀ–€<ÇÆñáoÿaïý +xˆë|-ÿ-ÿ`ÛýÕœ*ºí‘ÔõWPÀþ dfµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ tqCoŠÚÞ6€É )<@ 1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg F¾©³ió%½ÜÖrmÊÍBëŽx¬¼ãƒ×ñ¬*IÂK¢.*òHâ4»ý~)´[˜îæÖf¾Òd¹’¹£¶‰îNG—ûD ©<õ­F©:ŠÚFßûwõÓ×dLW2Ž»¶¿¯ëä^±ñãßßÛEe¢ÝKm!…e•c™Œm"+ÿ F=ªrZE<:eòûî=.×ÝÕt¹-Ú7ëa‘'¹i´K¯±[ ƒOLØhƒnùš%i(@"By\’§xÝuµº^í%ùù¯2­ggóý~ï‘wE½Õg×5uÕaŽÑ’ÊÝウ™&\œ•\1ÀÎaɨ«îÑ›OTßþ’¶üÂó‡f¿S7Dñ^¥g ÙKMÉý’/¢‘nÌ: A!|§ÊøpÀÙé‘[Ô²œ¯¥š¿d›zü­¯æLS²¶·º^«eóï÷%Ž®ú•ž£qeíäx­ä2|³•^OO”oܽþî}« ¼Ð¤å³×ðºý/éb©ÚSK¦ŸŠOòhã´x†fÔ¯¬ »Ž=&Òêp/J€§Ì,ê¾^7°+€8unÒRqþõ½/Ê´î–ïmô¾¤jínÏðþ¬·7´¯Ë©kÆÊ-"äY™¥…nÄs`2n±1Â’¤$'‘ÀÉÄCÞÞš\rvØ5 ^úÅ“Ç>Ùté[6ÅýØF÷?3ÎzÒÃÝÛÿ'·ä]½ö¼¿C'B×µ­]"]NöâVžï϶žÑ#‚8#gUxßËRä7”þñÈô†Ú¢ä¿–ÿ6•´í¿Ki÷¥ñ%æ—ùþ3¬ðÝä·~Óoo|ÓZG,¯€2Å'ʶ¯ËNRì®L/#"O_ǣǩ¶›fÝì61µÜ­4Ṏ8X†Ûóaw÷Éf¥§¢÷íò×îÛ·ž×¥gv¶ÿƒoǧ_.Ô¡ñåÝÅ”÷vÚ"˜l­…Åß›tѲ|ò#*©$ƒ#p\÷ÁâšWk³i}ê/ð¾ºú_¢×U×_Ãüý=I¤ñ´öЛÛÍ!cÓŒ—1$‘Ýo•š!?&ÐaÇÍ×w¨M´´Õ¤ÒõiYýþzyè>ºm{?óªx›[HÙ4û[MR‹2Ñý¬ÉC4›GÏåpIVSòð9ôª·¼’×VŸÊ7þ¶ìMýÖü®¾û^¦¯‰üC>‰mmåZÁuw0$Û &-€>b¢8]ˆ’ª9#8©””[¶Ë_ë§ÞËŒn•ôþ¿®†/‡|Wu}«Í­©¸†ñþÔ{‚‚Ú ¹ ­“ûÒp03ž™ÍT¿wÍöowÿoI~Ÿw¢N.ÝšÝÛO;iþ=–îÖ{§Òdµ·ò<ûig’d€¨Ì`ÆöÜ0#ó3Î3ÆFšV{Ý+zöë§¡Z_Mµ×Óð·ÌuŸŒ¯µHÍ­Ž«¨ƒ0–9ç’ãTwe¢“榌wç':ŸÃ“[Zÿ‹Z}ÍôûÇ%gÝ~Wÿ€.ƒâ‰£Ó4›+ˆ ÷×Öf&yÉ7E;Ü’3•ØäõÎ#èÇåýæ’MÄòLÄ1í%Ø’»Y€^ƒ'ª^õïý^ߎ‹]ô÷Zk¥¿ ¿1‹àÝcuò.Yœ£yÍ{;J¥7m+!}Ë€Ì8#‚GJ<ýgøIiòý3CNÒm4éKe˜Èè±´“\I3²©bgbN ·çì)ßK[%ú„EÓâÔ&¿K}·SûÛÁqœr#OËÜÔr®Wþ ýXïª}Š?ð‡h[áai"ˆ|­¨·2„&01@ÛY€P7NªzÞýoø«?Kù úüoùŠ|#¢à*ÛL‘ù+EÜɈh‚¹ ÆXÀçCÕ·ß_Ÿ'æ½w¥¼¿áÿ¤*xKGH.b0ÜIö¯/Í’[ɤùlYvrÊTœ‚"Ž–ó¿ÏþOMi÷[ä:? i1K3¤Wg %„ÝÌa“pȶÂNNI$äóÍ&•¹z~ZßNÚöÛ Ó³Mn¿OÏæM¥xNÒZv³Žm÷©#Ís,ÌʹÚ2ìO9{Ñq{?ÔIr´×B-7ÃZ~“ ƒKI"”ÁäG%Äò\ùKÙTHÇ œ|£àzTÔNq”o¿õóÿ‡î8ÙIIô-hš\>i¦[€a¶ˆF2 nÀä‘Ó““øÖ•›ziúãëú•-<+£ÚYÜÚAm ‚ê¨÷?îÆì Ë nlÆ3S²K³¿ÏM|ö[­ÿ­I­t >ÏQ{ëU¸†Wvv.å³7V1nÙ“Ô½yëÍ÷U–ßÓùC/¼5¥_^=ÕÌ—©•æTŠb½ ‘«~0<: #îíëóþ¿wª³ôù—Ãúd–ðÀÖÄ$µÄeeud‘‹!ÈÎæÈÎ$tâ¥Å4—eo–Öþ½G}üõùŽÑt;-#Ÿö¥ˆª¨I®æPC± >˜íéVÛjÌ›krŸü"8Mˆ—‘¨25P¸A çýX<±†# ƒŽ•)Y%Ûú·§—’ìŠní¿ëþÏüÉm|-£ZÙÜÚAfV ¨¼™”ÊäºnvÆIÏYç¯?J}—fŸÝk~H]oýjLÚ–öÑÛÉf¯ rK"ÆìYwH>A<‚$~Ô¸¦¬û[å§ù/1¯wn÷+ÅáM+ ìÖÞfŠvFv’êW—)‚˜±uÚ@ÆÇnµM·¿{üûþžšl$­·k|»~$ú–§êBµ¥Á0!;©cb§Ve`X£!‰Î)I)6ß_»îØkÝI/ëæ&—áÍ+J™fÓí<—Hü°|Æl.Ô\rOh“ò÷9¦ï{õßïoól›-<Šéá8$‚8®’Æ!ÓˆâÃ5ßˆÈ ` íSÑ.ß~ž{í§¡Ovÿ­Fÿ¢y{½À>cHd³‰²ª¶çß¹ ¹p2(i5o—ãž¡·õØžÚÛêz}Ô;R6Ñ­m¡Û“m¹;‰ÉùT }zæªïšR{»~¯ñÓÒÞdÙYEtwþ¿¿È“RÐtýFí.ç[ˆî<¿6Úê[veÎB±—p$œdúšQ÷]×õa½Uˆ®|/£Ý Å£;JÒ4Žf“sùŠÁmÙ*@Q· Ú¸hÁvÖéþwüÃúý?W÷±ÂÚ8{–ki%I$n“\K"åÂ+1 “×h­hòú~k¾ŸåØiÙ¦º_×Ï»-éúE–3Ml’ù­BÒK3Ê̈X¨%‰'Ûž¼ý*¯¿õÒß¡)%o"õ!…P@P@P@P@P@æ>3ÿ ûßèi[ÄG[áoøùoûØÿ趬äèjP@P@P@P@P@P@P@P@P@P@P@P@P@P@cã?øð·ÿ°÷þ†•¼Du¾ÿ–ÿ°mþ‹jÎ@ކ a@P@P@P@P@P@P@P@P@P@P@P@P@P@æ>3ÿ ûßèi[ÄG[áoøùoûØÿ趬äèjP@P@P@P@P@P@P@P@P@P@P@P@P@P@cã?øð·ÿ°÷þ†•¼Du¾ÿ–ÿ°mþ‹jÎ@ކ a@P@P@P@P@P@P@P@P@P@cxÚim¼®Ïo+Ã4Z}ÃÇ$lU‘„lAr=èÚ=Ιzšn«'šÒdZ^ .€•`0P$ ²€,h ÔÀ( € ( € ( € ( 1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg GCP0 € ( € ( € ( € ( € ( € ( € ( € ( € ( €0ü}ÿ"/ˆìsÿ¢š€,ø·Å:d¶¶ŸŸö‹Ùˆ‹‰$kxOï‚Hë0 áÝÐ,íä08áñ«.œ^ßjG* LÓøKˆ7ヅ‘;E£@P@P@P@yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9:…P@P@P@P@P@P@P@P@P@ýœ…Å•ä~e½ÌM ©’7#ÈäpOJÎÖ4¤¶§ØÃ'Øv,¨Ž{f%·Úp ”åT»Ò2Ü- 'ðìWvú-´7æC4jPŸ|¥!<ƃ&Í»È$ÝŽ1L ( € ( € ( € (Ì|gÿÿö¾ÿÐÒ·ˆŽ·Âßñòßö ±ÿÑmYÈÐÔ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €<ÇÆñáoÿaïý +xˆë|-ÿ-ÿ`ÛýÕœ @€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (Ì|gÿÿö¾ÿÐÒ·ˆŽ·Âßñòßö ±ÿÑmYÈÐÔ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €<ÇÆñáoÿaïý +xˆë|-ÿ-ÿ`ÛýÕœ @€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (Ì|gÿÿö¾ÿÐÒ·ˆŽ·Âßñòßö ±ÿÑmYÈÐÔ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €<ÇÆñáoÿaïý +xˆë|-ÿ-ÿ`ÛýÕœ @€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (Ì|gÿÿö¾ÿÐÒ·ˆŽ·Âßñòßö ±ÿÑmYÈÐÔ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €<ÇÆñáoÿaïý +xˆë|-ÿ-ÿ`ÛýÕœ @€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (Ì|gÿÿö¾ÿÐÒ·ˆŽ·Âßñòßö ±ÿÑmYÈÐÔ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €<ÇÆñáoÿaïý +xˆë|-ÿ-ÿ`ÛýÕœ @€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (Ì|gÿÿö¾ÿÐÒ·ˆŽ·Âßñòßö ±ÿÑmYÈÐÔ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €<ÇÆñáoÿaïý +xˆêü2%ûKyB/ùØçÌv_ùfÝ0¦³#{^–Ÿ÷ùÿøÝ@Ã^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtæÞ2Ïö}¶ìgûBû;NGßN•¼Du¾ÿ–ÿ°mþ‹jÎ@ކ a@P@P@P@P@P@P@P@P@P@P@P@P@P@æ>3ÿ ûßèi[ÄG[áoøùoûØÿ趬äèjP@P@P@P¶€À ƒÁÆ“Ñ} ÿÏ8¿ïE¼À>Ðçœ_÷À¢Þ`h?óÎ/ûàQo0´ùçýð(·˜Úüó‹þø[ÌO}´/5ÇÙáŠ0YÝÕUT¤“ÐR·˜Çý ÿÏ8¿ïN´ùçýð(·˜Úüó‹þø[Ì »–]Úy¶É,1feÿ­p? qj”2ÿÚüó‹þøVó} ÿÏ8¿ïE¼À>Ðçœ_÷À¢Þ`h?óÎ/ûàQo0´ùçýð(·˜Úüó‹þø[ÌíþyÅÿ| -æöƒÿ<âÿ¾ó+V¼›û_H…Ž9$“z¢»¶3ííþ¶9ôèu_jqßMäÚØY´QÛêÛ(g’ä1Än¹$"òsÒ†¯øF4Ÿ]_ÿ—ßüv‹0øF4Ÿ]_ÿ—ßüv‹0øF4Ÿ]_ÿ—ßüv‹0øF4Ÿ]_ÿ—ßüv‹0á Kjà¤ë—¿üv‡¢»c‡tIáI —T–)2:k×¥X„/"›Œ“³ƒ¿áÒ}uü_ñÚV`ðŒi>º¿þ/¿øí`sž3²‹E¸ÐŸK¸ÔàyµKd¾«u(d3"•*ò †9È£T @BA+íRA\nõ¡€Ÿh?óÎ/ûàS·˜Úüó‹þø[ÌíþyÅÿ| -æöƒÿ<âÿ¾óûAÿžqß‹y€œJBêJ OEvÆ2 Ôžš³ËŠ`zGQMŧf+ûAÿžqß‹y™â›Ù ðõôlŠAâ€Wü)lTÀ(#ijê–öÑ."P¶'–4Ëú¤d€ÇîHÀÂ>qR÷×Eý[?N©­´ßúþ·^½ð|`låðDÞÇ5³]Ûù—šn_õë¼Ê‡n9Ê| `Œ.0’ö½­÷¯…Ûþ#~YZûìz¹ÒtÉ-4}JÎÊ9®æ’ Ëg†ÒÆeXãÊÄ9¹ÜØÚ¹Ë+Ã¥L¥%äžwï;Ynÿ Þé„Ræ~m|´êöùëø2]SÄ2ê¾Ô§­¦Ÿrúj¼`1 »n¿Î¥Û,X|„cg®kYFÕ-ZžÝ­%o=µ¿ù2`Ý—7mûïý[½·„¯ç½·¹÷¾Šb³ÚmP-ð ÀË)!ÞÎxû¡iÊšûüú¯—ôÞíG{Vïóÿºfå"‚€3¼1ÿ"Õ—ûóÿèç©[ŒÑª‰ã°‚õ FA³”ÿ5-&âŸxÿéH¸hþOò8ÍróSðö¢¶¶¹Ýea ·¹“;VÙç€n-µ€1À’­€ªÄqMI¶îõ¼SøŸÏDß{í¡šIF6]Úû¶ùtò²ÜœøZ¶ÑaºµÖ,5›¡q*¤sÇuçD#™™#Oš3óaUA/,ÀÐôi=µ}•þ/ÓñèÆ•ïmv²îû|÷¿OCSAxÿá7•ν-кÓ-žo$-â3.0€œuùO¹ãZ\¼ñ·]»iNÄ·~G~ÿžßð7üKú­Õô:ÞÍ[‹»‚Wí’&m£êe8òÛxRçw–sº¢ù[wûžº^%Ëeßúþ¯ùÚÇF3ŽzÓó€25_ùh¿õÒ_ýi0 ?þGoþÁÖú6î“ݯT@6³áÿí¿ß'F“ɲ¶ÿ–™ö²2Ó}ßvôç®xô¥IZòþ÷Ïhõß¼¿S2 SXzäÖº™³JŠKˆà‚Ö’7Ú. •'F3ŒùÎh¦ýØI÷Šù5 þzZÖû¬œm'ÙþÿÂCyÔ0R;x¤žE[+Df›©T³Fê ¦ÕÁhØ09$6r2–´šþêôøתßO³éfRzßm_ékwôÝ÷ØÚð$—ö‹¡ZM¨Éumw£‰ÄOj!)å¨sźv®¹üuéoÇšÿ-4üÙ’Ú-wgmYÆ|Jÿ[áßû Zÿèø©0;ˆÿãÖoªÿZè©€P ª ÿÂC«}‹Ì>Â/±'Ë\ù¿‹~üìù³·ýšTöÓâ¿ÏÊÝmm¼ïÔsÝ_á·Ë}oÓ¶ý,ckž2Õ-õ;ßìÝMV0.¢[Y¦‰æ·hãrÄ" £rq¾FÈ=9áS¼­ço•ågktm[ñº”mnŸŽ¾½µÿ3_QÕu='Q—O½×äŽÌµ»Ë©K*ÖŠâ\òl´h ¸8Üy‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢è z¿¥Zh6\_B’©”•ÎHW#8öçñ)¡—?á'Ñè!ëþWBøIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐåÕluH[”˜Æò– Û1µ+ )j¾+Ѽ1ãLk7‰n×Zu—”¬@-¶[­ÇŸMÃó¡î?áiøKþ‚‘ßkþ4î€?áiøKþ‚‘ßkþ4]ÂÓð—ý"ÿ¾×ühºÿ…§á/ú Eÿ}¯øÑtÿ OÂ_ô‹þû_ñ¢èþŸ„¿è)ýö¿ãEÐü-? ÐR/ûíÆ‹ øZ~ÿ ¤_÷Úÿ@`ø§ÆZˆo´ }.þ¦MZÐì¹#Ï Ú•Àô»ÝRÇMµo·\ǘÀ cËc9Àÿ=E ßð“è¿ô‹õÿ w@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ 3¼K¯éWzä÷±<®˜UçšM«ÔUæ>3ÿ ûßèi[ÄG[áoøùoûØÿ趬äèjP@P@P@P@P@P@P@P@P@P@P@P@P@P@cã?øð·ÿ°÷þ†•¼DiØk¶v¢)­u‹(Yìíá’9í§r­`ò ¤úÒqòßü%‹ÿAÍ'ÿ®jy<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚ç3â›ÛK‹8­¯¢»”\\M)Š7E_0¡8ÁõéZEXGÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/share-module-name.png000066400000000000000000000330411203611042400324570ustar00rootroot00000000000000‰PNG  IHDRÍŸ²a¶ pHYsÄÄ•+tIMEÖ"Ô ántEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝy˜Õy.𯺪—Y4šÑ:ZV,À`À6«ˆÝ&`ŒlìØ,–ƒpDx\p×A"¾?&ñr „ÅQ@Üĉƒl ,ÛÉ2‹³#, !@ҬݵWÝ?NwMMmSÝÓ§»¦çý=/Ëz.—©rgÆš=ÞŸ·aý—WžkwO7º&ÓD"«x`–@佑¨¤Ý„û~zïú.[9kòL"’e=Ÿ/V®e²™¾ÇÑÔî=ÿ } ½¼ËTµ@w |IDAT8‹ˆÿóá ÛI‚õ’F°É.U›Î¡dèº`K$ d¦ö\{ͬüˆœ¨ýüò?È Ù=×^CD¦`›ªmI¢H6Ù‚M¶*Ö³)Êå²6‘PZMšt©9#“@IéTë„ô‚ESt]W5öŸ¦iºªé¢(¦%‘Xt“M$<ðÀÝD4©½C·íoÝôIl"ÅUK§¥Ç',—ýìg/ü×OòvIDAT_ÿØc­úƵšmÅ_ö’¯®È¥D*³‡ß½í[Dô¿þêz9äûBà“ø7/iJŸÈv M""Ó$!eÛ)"“ˆÞ»úêÙ?þ1•¢Ö Ù÷®¾z¨-Ë"Ó$¢RÍJiIRDÅz6•’$ѦRÅLvŠR¿8@–¥X–eÙ–eŠf¶ÉLg¬¬i–e™dY’iõÙ¶$ ù dŸû™ žxü—›·n:qé2›ˆ!¦ŠGŒmøåÏîý§;ÏýÌ_ùÊ×&Nì ¢»îúþÿ’ˆ¾þWvÚ™l⟷”ˆnøæš×^{iÕªëˆèw¿Ûtû÷naO9eYØS&JbÛ¤IDtàà½AàÍIDAT~1%ˆ‚³)6=úØ1%ÎóÊ+/üþ÷›Ÿxü—ç~æ‚ .øÂ¬Y]ÎRgŸ¿ôÑǶÄxMëŸî¤À+‘(¬¸´K/‹@v©¼%ݲ3¶nºö`íºzÕœßEDNÈîºz•»5Á6tË&"IbÇÛ ©TŠXΊ‰Ã‹8›ôã÷~ðë½ê€¢+ªZPTYÖdE)ÈjAQ ²*+Ьh™Ljù’¯ °KÂEŸÿrï·Ý~ËyÛ_¾àó_š5«ËÝìé§ž¹dÉi—\¾¼£­ýÒËVZDW_ýÍÕ«®ïí9pñ%Ÿ“ÙDfÞ¬9‹|,C©M¿ßtû÷nùá?ÜÓÖÒ²â_Ô]fÎIDAT•aÉ©g>k¢( y":õ”3Hœ#‚¦ž}þÙÛ¿wË?ÞqV’V|㫚Z>yüIDôøOæÜ“ˆ(cѦg6ûW÷òËÏÿï›®½eí÷V¯ºþW¿z¤ïÀÎRÙB™éЊu& ¢M ¼I"D¥}KdƒÌy‰,ÆvÜ•ìÙsfÝ{ÞùîG-£8³Xü–O‚-ˆÎø¬ ™´d“ °³$ dšös3Z§[-–mY–iZ¦iš–e¦sײ,˲ÒÙ´`³Hìî¹Ý7Ý´ö±G¾ç'w<öøÃ÷Þóàü‹œ~´Oìš³Dô¯ÿöÀ×.[™ÎHO½Ð1IDAT=õ›M›~ýÌ3¿sOd3Ï›;_lÊ D[÷$-^ø1±)CD›7ÿæôeg RÀ¯*LC}øÿv≧|úØãÅ´$•æqšúõÆÇˆhÞ!sŦ,=ñ«_žxÒAöoLàêžyz3ÌqbF:ïÂå¶a’ ¸”ZrIMYQIb#h“d¨F,ƬP*D ]§t:mšd“%¤ˆèO<ê„,•î>÷ψ(e[$a“¡ëD”ɈÅ]jD,hKãiÁ=6af„%½=Ïÿéàíé-(š,+Y)(jAVeYQTUQuEÕþòÊS3R·³b6îîhÿÊ%—O›>íÛß¹ùŸ×Ý}˜ì1CIDATÛwrå‘£–n<üØCwÞùƒŸÜûàßýí­gœ{2›˜mÉ:3g²±>ûüâ—ôg·=M–•N{"Ìføæ ߺðü‹&L˜ÉeÜùânʹûì¶§É4Ó¹a®îÑG^\Íœö¦|Ú7%9lmb(h“ÄõbÂðb–ˆ,Ó2‘ˆÈ¶VmüO'dßY¹rþ½÷R)jï:û³Ùd™Åoã)í”Æ©T)gʼn’$”&›ŒY­¦fÏ™ÚòÎþþ=l¸@-¨š¢jšjœpܼӗžÎHÅzɶJo$û³çÿíïÜüì¶§-Íȵ5;]ϸ¾\ßy爨ìYõ'IDAT«ó¦Ö¦ÀØí%KNݺuóÆG†@MÝÌø¾¤;34MhJgÒBjX¸¸›rîžpÜIþ¦WçYÐ/lz" fÿæ%Š`ÛľŠ$”Me¯‘e –eÙ¶-ÂÕOþÊ Ù·V|ý]´îŸ¨µ?>ýÛ¶M³¸‹+“íâÀ¯@–A¥zVHgÜå¡™ž¶e³ƒè¤T*% x󽂬Ȋ*+š¢jªjœxâ¼—œÒ=gª3¶Áº½qããï¼óöªUWÚ?ÚÿßÏnŸ6}Ò„¶æIS&Ö»;Õgãà x1ÄùÎî ¬v´©pÕ ÍwÞ¾÷ÃŽr4ÌžÂU7Hi‰%¨-ÐÐù ÚÚ'Iãûb Ç/9²Þ]€¤øÜYG?L74ßy»3E(¦E‘edáª>wÖÑî8mk/],›Iïyï=n}cÎYz-ýç TTÕâÞuIDAT§“§L#ç<ßÿóÖ‡Ué8NrçìÛ|kÇŽêÚ€†2wîÔ“N<‚XÎJi©½cJÏ oÜsÏ-õîŒ cjgyeC3È4í¿ý›ÿsô1‹¥´D×€˜œxÕ ;#y*AÎThP6ˆHV‡ŠóŒ$h†Ý”v¶UŽW‘hTŠn±–…¬( ša³¿I0‡ÿ† õ,@\Šn¥_ˆ¹ËXÓ,Æ+êY€ )ºå„¬SÆ:¢ëYä,@–°Dä„,#ŠCû»<õ¬û!BÎD` K¾%"wÑŠz lƒ²Á ré”aXšQ Y'CQÏTNÑ-IJ ºIDAT†ÕÚ$±ã N†Ž‹zVA8Ë\Øt€¹ËX*ýÁ­‚z6ê¸.ZÙ‘¿•cóGÏ3¢rWZuNœõ 슘ÐÐØP¬$¥Ø_vײ^ÏʪՔMɪUI=k»Œj#ÊQ—•À¸åìïbœ½^þë«T¹ž ä­žºÏ¹ë®j=Å©{¢ÓBœ$ l'b†èGì{(°Œu7¶qtÿ Žè“ûö‘f™sç’²½õìéÛODí:'··°ùË­gša‘¬; 9 5 éìÆ¾ƒ¶nyµ©©I–eöw'}@DË/´ù]óÙq}ƒJ^%¢£Ž˜¿áñ§‰hàݽ/¾üfJ/¨†NDƒ”5M‹ˆzeÓ3Dà‘ŠcŽÏ¢ž€D›9sòe_9ˆú Ц+š¾ï£žÿí·ëú"”AÙX4æG}ƒD´ýõª¢¾ýÖžYÕ®YÓrÙ)ªEDýƒrÿ œmÏ|ê UÅPã7¿}./+}ýJ_¿"È}¶Y,]ÙÏ ˆ(T±Š¢3aä,$”^:@uþÜ©½úKñ´éS;X€Èêæg_}ãÝ‚©Ñâ£>jäéIDAT®*Æþžü{ûz?Ü{ðù—Þb1:oA7)ª•ôySÑ E3ôBêÓ'~šˆ Êž{z膡FÞ‰HVM"b?7 Òñ°šªÄ1`³\½¥ó´´6xìa7]ÿ竾öYU1úúU1^~í-[LÑœÛZ›Í((›Ÿ}iÇže  µ¸›-®Úi£Ð¯Fï@ˆréèO‘—µ¼¬=÷ÒÛì)yÝ.®Ô©ge²9ԳЌ ÝùŸ<úÐ)-ºa ͰX=kÆüÍgúûçÞ`¹¹páÜT&«”öbiº•—µ¼"+tâÑ-M™¼²Î*ƒIDATwÿ@^È+ZiH—\õl rëY^ûÁªu¶”Äžu%ú¢;åv;¢5Süž“Ä>Û0>©ºED?ü¿ûÕÖO}báÇwçr™Í[_yííØ ©\«n d¦a¾`Öiïþþ½Ô?¡%7W>~ø<6[AÕ›³éƒ†5/?›R iA:ç³§ÞÿÀ#Dtp@ž4¡IQTÓ°òÅË/ÏT¸¬žMÅNÚ sÖ™¬ŠÛ ¼WÂ?íÕí6×í±ñѬÝó6p7ÅnûOÚËõ•uVšð÷Ä×£˜»_xmמƒ¯½µeBË6”,F»:'-;n‘sF˜O9ßYŠÍvÄâyT Ù‚95OIDATªKŠzp@&"ÕT)'˜Ö§\¸¡%·koó¦ä¬tÄñÙL6x~ƒ@•Œ¸/“…7tÂñNðD½ Ò ¨v(ë›ö³ÜtªÑ¼rÄ¢™wó•Ù¦\qNÓ&¢OyèÁ™ýwÄ¢™“Û[,M%¢‚ª‘Rúá©ë¦i±C .þâ¹î5:{Þª;>[µqƒ°+zE\üÕ}QÂÀ¥[V=[IÎÚA|¿~‘,÷µ-D´æ<6Åý™Œn6ð!ÞÝŽ¾öhDXÄY{YÝö¿ ó+Z`ÏÃ^»8o§ˆó,A¢¬)ÔÜÕëêžA!õRT+—M©vzr{zrûb""š^PuVÆQJ-¨RnNg«0«Í9BVÑ­œ=h ­G.žï”±C-'a|6ð½8gY—ˆ©¬6ãÏÌ£«\Û÷7È#>"º³ŒˆÑ+Šî^¹[íÌ_Á? P{·ïìIDATì*ß‚©ë¶@!!kk*QšM·4Õ]ÆQÞ’XÒ¹C–ˆ¡•Jc¥k+˜ŠaSŒãg¹×³F,£ª(~›þ2°*ÍV¦êí×&j@¬(bè €bXy­˜ªîõ^9QµXȲ]^îM©…‚Ä”¡‚˜Ò Ë4†NV ›vZ\Á]¼‘×̈A"Älü%ÇuEÆÕf]Él–_ûµ)Çâ¬%¬6ôŒ~E7¸lØ0ÔÝ®½ûn¼ãG©Â#ý5Ãy¦ô‰è£žý3¦LM‘fkªÉÚšjˆ­’9HDªvfö\R³-W’³þþ¡:çvàž3ÅöíŒr”ŒŽIDATÏöM3þž™øŸÀˆfc®±*ÝŽóL–Õàˆ*îvô¾µŠ»án-úÍãŸÁ¿EÕz– .Î9~é ¸§X†’ìÀ¿†e‘®ØD´å×+O=óªý{^}wçîÃN¼ÞÝ‚iŽœ¼Íél±Ff Õ¤ôˆKE¨p?؈ÝC`1çqñˆ6ãÏìŸ>b³1û\•nÇépY½òìPŠng4Ýœs½1gq‘è ¼sÇ,ÔÅ䎖É‹üÓÝÊ¥S!˜ú¦'¿ýòs³yžÜðmvã韙ˆŽýô¥Gw…¿)ÕNgý•U+•ÉZšêþÛ”My΋è‘ÊDU² ΋cL.¶)7IDATrG­©ª†-˜†õòs/[rN猅žùßý㳿ÿ¯õ‹>ñušÁÐl'úTyè/Iz^#‰uËþzBV±S9ÁuÎïL6zÄ€AÎBB5Ø^>¨"'d ÃL<Àb±sÆÂ¹‹–9sÚ–fÞµÔƒô⨚®FSÊå4Eɸþ‘sƒØ/»rÅGˆMm¸n Œmû÷½¾yã·»–eQ*•""]7D1E!ã­Bfrñ–v€ˆ,=ODÏl¼2æz;9oöÜ3lun8Xÿº5ÈYH¨É­âqŸ:,þüï¼½ˆl±)pß÷©KŽÙŽ®¨*‘©Ä\3:Iiv;“²ŒmIDATËQ*“¥‘Ç Ü³PBfrû´ãËYâ§žû¶¥ b3»¿©öI¦R "öW”Òb®™ˆR™l&[4¨ÅïÁxÛ»oÇ®+w)Á”mS.Þ±‡.ZûÐÿ‹ÛTç!_™Ú}! T–°™\®)›²3¥ÓÖÔë÷`ÕÕ9ûS_»æUvDÛ٥ʊ©iš-±1SVo2 ÑžŸ]HD–ü¾»Û,ÎsÔ§ÿ¥Œu+*å²4”°Ü™Z£óÔ@~PVt‹K°ÿ`žJÙª)ªgNö‹±½üÑRzzÿƒ÷Ê]o&—mjŸäOXõ,4MÕuÝ`!«Èê l‘©ü ëèèìa£½IDAT4»kiÌõfrY1לk›˜ÉæÂrõ,4Íúe·˜ÉLiÊ*²JMmÅGm)#Î ö÷œó¿ÚÚð£bÃþæÚ&fÝÎLpÎ×x^DÔ³ÐZ›$"©…ˆ¨ESõL6ÍþÊFk“4(™”­Y‚û6 ¦Î®€ëÜ "Í ŒD†aXÔÁ¦¤È°¨Ã6TAêðÄ¥fäÜÙxâ®rëY\ïmP62Ù´¢[îmm’œe·ÙÌN¶Úbš]§†…¬få*+-’LÓ\‡ÁŠ¢ ¶(e'»nMàÕkʽÞ-rŠcÐÚ$±Ú*ºÅn;ñ:(’”b·ý‹³ŒVW(IDATxuþzˆ¢à®dMÓÎHæDœç»Üëƒ!g ‰<'åbeƒÝ–¤â_"bëoÁ‰Wµ~îê•J%­SÀ¢ž€Çò”\gçr*Y–¿ŒaXÑõ, \7ÏÈ,+i=#³¨g a¹Ï-ë®gaÃ(οžõTµ¨g`œr—±äŸe±|–(x|–PÏÀ¸å¹V‚{|Ö“uÆg ÃÂø,@y<õ¬g'»Ì840 õ,@Ùü×þb7œJ–Ê©g£íòÜE= ã‚|Ö‰QOaë$2•ò×-z'¡ž€qË?>ë ¸9`%­3¿_ôA]„zÆ!–›Œ{|Ö= =²IDAT,ÀâÕ¨õ,åæ4 Ô³äªdiøø¬{7.pxÀþ:±ëðT²u¬g‡­yݺõñ—€8†å슗֫dÛ¶5Îía9»kgÙWw€hŸà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 ÀWÐÅâyrÓ&çöéË–U£3 ¨’œe ûÚ+[=Ó‘¶~eçì“›6±„ýþïs&^·ú "Z±âRœ‰fôºçvÑλòL÷O€¤©pÜÀ²ìnoð§Ý5È…˜«HfB%³W0åícŬ'd™¶öÚ¶jIDAT®þÞÝsºgW©c•CN@¢T¾l”Ø·c*Å¢ç®6÷œ;wìvê¾ÀvÂÚŒ˜9luÑ]õ´¶q:ã™3þÓÖI÷³Ä{ë B}r6b0ÁÿÅÙÿÿ†sÛIÿC-G¯.lЧemEÄø@`#·Ã \§­€õ¬gÃJ­Åü—ÕfUÚ‰˜3°­bZùÛ¯ú³T­ç`¼)/gÙ‘[×­¾Â?DÛß»»­½+æñþ¯í<꣪´é/+X£¿‘°‹ŠUÖHU¶¢Uò{°µkoö]v°A´°C—*h*Zí ±˜kä‘\5ØX¶e){ÜàôeËÚÚgÓðlm{Z•½ã=A‰yÝšÀßüËzñ\ôÐ3%pÁ°G÷6𢶞Íô_T<ÎFùŸ„èÍ/÷É^ÁÑ„—;sã4‚”„ x>AŸ¯°ž9Ýwy«Ïq]ƒ #Ž3xæô/–2C¨‘P “IDATM…-Ö[ÿâvÏ?[ØO;£‰æüSê¯[\¦ÄdiëdnÄ‚e­Å_D;kñ¬ÑݧWž®¢(N¾ˆ2"þ›?~àpRyÎ:ïàÊÞ©5]ôœ3TÐÑ,8šUÄßÇ{ÑËóZG¿ôîõ4å¼yF³÷ôèÄ ¬µ²cBD &ì[cÌÀ᡼œeGn]·ú 6Dë~›ö÷înk;8ëù"OáÏΰy*PƒÇ*[Ete]•UÄá´¥Èlò—¥ñj+íàr!;®ÄN*9_×Úµ7{Ž.¨ì¨ã°c¤bÎsY® &sÕZ—íâÜ!0ÝsŽf¦â®IDAT-µáO€Æà.cý%mtà¸?5a·+Vö¸ÁéË–µµÏ¦áÙÚÖÞE!WÀ Üyåsq϶g)l·ÙˆÖÂ:æ_0BXûþÅcö$z•u¦ºÜÕ¿„ªq8FIñöŽÿæ¯,"ª¨’ñY–§sº»M•ïKÚq²0zÑ; üy1Yň­=â®åî)ˆZàmŒ]O¡Æ£×À ¾°Ã¸2ÆrCe!Ë)š‘øÀÎ?;Nù8¸ÿIDATN³ãÑŠ—Ö» ãrv<Â>LH¦r¯»5V g Øi¬r!þeºÇoÀr€/ä,_ÈY¾³|!gøBÎðUœõœ”Ú¹ ¡ó_Øœ ïïj|QI€ªÿ¸*\hleÔ³OnÚäŸÈ®€[EkH”+.>¦òÆ üçÓ‹^SÌë!F¯ QÖ­[_ÖüeÏ–uJ=ÏÕm«Þ>@òÕb|6ú*ÙŸ€ÆVã °ÛaÿJ•µ–øÿ0Ç×Áø‘Äqƒj½#£Ë ÏÀ íŒæóã/N#²,þÀvÿ¨¬’ª F³#~íœÙ½ÆÊÖRrŸ„,$1g«%~E=[UºÁÚáýy ,®`¥µì³{1;0úÝZ*÷ßTh¾ˆo»FüöÝ8¯xXSy¦¸×çýVVz¢ªϸä¬çÃ1‘‚>9qÞ‹͆ÙEÜÓ‡Šû=|1šžøGlg+wëb6½Èˆ™ÿÕ‰èCÌeã4½lÅoªèƉ$ŽTªH¨»:çlü’gl}TFÿ­ŸßZjóLƯ1kÜ®KªÎ¸ÁÚµ7Wëb ¦ 9»bÅ¥£o QU!gGQ€†ý`|!gøBÎð…œà 9 šó«‰IDATÀWyǬ[·žS?U9‹ãd*PFÎâ8Y€ `|€/ä,_ÈY¾³|!gøBÎð5ªœ-÷žÝs»ÂñOOÎUoËjv4×Ö­FwƆÑoì¸zº`¬+#gYJ:ÿ•»&çò«å.³ñêÎY›qµBÙ¹Ú®ÿÕ©q­ø«ÊÕ×FTÆïüWÌNŽø]J`ç«(ìR¸OÔÆh¯§àüãïþ„{¦xfvò:p¶ˆwÐ{rÄ™èLñ÷Ç=g`³ F?(°ÃžµÇ|N"žÌÑ‹~üOfôÓø¼…­Ë™è~)ãl~Ø«IáÏ-…¿ÑoÒW€ÿIDAT¤0TËhs6ìKAïûÀ‡"n‡=Q¬E÷Ç™-Nß"zÖlÄf† ¼¦oœ's”*{âô0°ŸaøšÆ\]ü tƬ"þ‘ì-@UTçz·n5Øŵ¸«àÑhaïÑ÷*bþ ž"®ã’a{ò®Ü.E?·ïœ°9‘­ÀOõs¶êï×|F,”êõ!,w½þ/ø1•U*rjÜÿ­”]Šùìa¬xãxül ÛÚ«ø?ÊŠ©¬õz†ªÇœ 66ú¹uôã»Û}gU¹žu¿‰#Þúa³ù?1Œ³¢ˆf#ÖëyÔ7Œ¿,N÷ÂÆ4ÚÚ²ÓÏ3CØþ%ã•EsÄ,¹„€IDAT3ý²–ÕTYíD4èö ,–#6`4„•+o¾ó®56lÚôäÖ›n¼¢ÞýiLþãÏ-$Ó­·Ý·ìô%]´ìªU·àw·|!gk?xn!ù³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gLs¡>IDATøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œÁs€BIDATà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 ÀréE@IDAT€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_’ûΓ›6Õ«jXήXqi½úÐH¶m[ãÜ–³»v¾WóÎ48ŒÏð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œàKy¨­9ݳëݾ®[}Å÷x_½{Á×u«¯¸fõ÷”î¹]õêLÍìܱÛ}w<¼“=¯rälõ÷îy¦±é¡Ÿ?ÅnŒ‡mô°m»Æ=©™ëV_ñƒýÄ?}¾Ê³ ÕÓ+Ô» ܇môhÈ܉Ê-+IDATNœqø*û!gj ¹3a?_ÈY¾³0²ñ°¯|œÀKÉÔøyÀøì¸ã~‡yÄ+Ø&8ïžÛsCâÏ™Xž€Ø¹cwØF5ÀÆ2 ðŽEÎ6>ÿç­‚„jlcëy{5£g£ÆÖK9ÛÈ·;”IDATÆá«9›8ãáÓ8¶Ñ/ðJ… l|¾Ê³‰óJÅ0¶ŒÃãðNv`?_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾†ýîöÖÛî«W?ÕPÎ.;}IûШŠ9{ÑEËêÛ€F%¬\ys½ûÐÈþ?R ¬@Cdý‹IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/share-project.jpg000066400000000000000000001247761203611042400317360ustar00rootroot00000000000000ÿØÿàJFIF``ÿþLEAD Technologies Inc. V1.01ÿÛ„    $.' "+"(6(+/1343&8<82<.231  1!!11111111111111111111111111111111111111111111111111ÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀŸÍÿÚ ?ô »Û-V1{«$·©9ó-í +1ó´•È<žz8â·Qka6hô/ÛÿãßãUiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiw3'‡„ÞJxu% ”Š$ vÈ\â³EOâ•iÑDå¢ù~c¶è¿ô)Íÿ€Sÿ…gõŠÎ_Õªy}ëüÆîðà•"¹ðÙƒÌá|Èe‹'®lsW ±›´d)aêB<ÍiêŸäjÚølïd½½´Ÿç¶8,|üêÌÌ #O'Ø plÀËÓb'K³lqöxÿôWpJîÅoNÖðGý˜ÁÜýîTâºiS¿Æ”ˆ©áËû»é%·½¶òÞ1¹\c ? U ¡¬HRL5 Væ=jM'L±†êê+o´²ÍqäîRp|­“‘Îpó\Ñ““}“Kï-«ZýBØÿo_i7“ZÙÍjÑ$~m†œºçåSŽ™ŒÑ s-;µ÷ Þ;ö¿çþF‹ÞX%úØ=íªÞ7Ks*‰û¹ÏJjWv@ôÜHïôé.ͤwör  Ì¥ò¿{åÎxïéKZ÷óùÚÓîìuvÓ¯-®Ö3†0J®ú)ßK‡[Zˆîl®õpšdrÚhþ[\H.6ÈU”1*›pp3ÁaœT*žï3Úöþ¾ò¹]ì·µÿ?ò6SÓháþдK´$M2‡%€*6ç9 ƒŠÑÝ7ºþýÄ'x©ZŽMCMsr#Ô,ÜÚg :Ÿ'wsòô=jýÞdUµåêU°Öm_D·Ôµ9¬´äœ7^Fñä0$i8ãúU9(Ù6-ïn…»Ëí:Æ8¤¼¾´¶IÿÕ4³* ?Ý$óÔt¢ö—/Pé~…[-sL¼Öîôˆ.#7v¸ ¥×ç$BŒäíÇ”îöséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp0|ÿ³kW±¼’ĆeÜѽA2W9ÇLŒW•ˆ·µÔúl°‰-õüÙ¸lõŸµG ”Ñ\ØÌ†HõI¤Cï@ÆzmÜyFÿ-{ÝÖÇ'·Œ"ã8ûëKz­Ämy×Wp ˜•&¸ ÿx¼¡G^œ1žiC—Ú®]®w8JYsïfWñâŽÀŽdÿÙ+ØGËƧ™ü=§¶1ºÖ>à"²nÌkGs‰ñw‚üLfwÑ­­î‘Ýeˆ0ü_­z4±4íih*‘MÞ&—ÃêšGŸ}®‹e»™v,PDƒË\äå” “íÅaˆÄF~ìv&1°¿<9>¨|›mê[Èã eªÛʈmåÉûÇpp£ƒÀläàdW®WŽ¿—_Õ[üÍtJÏUÛÏ¡¨x7\¸µñtrYùóêÖâÝ÷ :Fwù~`zâª_£ü÷ù]~‚§îµå·Ï_óE=wÃ)»¾Ý&Ÿ{ra»¶žÕ’è,)m,»7Þg<•>Ç 7ûÄßó;ú=¾_Ö¤4ý›ŠþT¾}oý3ZÛÁ:”þñU‹[­¥Þ¡yq%³±:?Ý$ŒàǨÍc$ÕEn·ÿÀ¯øšÅ¯hÛÛOý&߃¹gÁ¾P“QÔ Ômç±Úì»h0@9àB `““Àã=Is5öüÌRk•>ˆ¼ y¨ø£Äþ[«m.ôÛ•Hš=—J¨+#r ëYSICÞþfíù3I=U»[ñæZÓ|%uˆüK#Û x/cm'OÝ‹iÆ9>¸©w•Gí7/ÇoÔqj3‹è’üÛÿ#+Ã>ÕáÔt»ÒÛOMÒX'œº2\–Àv’vñ»æÇ'¥\¦½úKÅ+zk÷"9ZJ;êßçùßð0<9áý^ëEÐu}5/&‚(î ‘,ü5wÈH`&H8ÁïŒc½K‹Z>°Šÿ‡ÿضӓ·I7ÿ oižÔ|5y Ðé3êö²é«h#2Æ^݃*Ŷæ3»ª‚~_»Ò®úÎ=ígÒÉ[]ß™ ìÉikéêïuÓËõ5tm QÓ¼mª\M¦Êlµ8à1ÍB”B¥X¯B¿nhƒ´e6ýo`’øZíoÅgöiô¥q‡öiô¢àÙ§Ò‹€fŸJ.ýš}(¸öiô¢àÙ§û´\VìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ9‚Áýš»G0X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓýÚ9‚Áýš»G0X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓéEÇcÎ)Ûýœé«ŒgÍ?úz°gÉg‡u{µÓlì,4·ºkk+wv‹ñä}æ‡ò¬ÜVíŒÓþÑÖ¿è_“þÿEÿÅÒ²î0þÑÖ¿è_“þÿEÿÅÑeÜûGZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYw A¯õ+9,õ «iF)¤…Õ¹ÈÈ/ê3IÆ/v µ°ûkRÒ‚ÛÃmH0ª³E€?ﺧï;¶$¬¬‰?´5¯úäÿ¿ññt¬»Œ?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]ÄÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö޵ÿBüŸ÷þ/þ.‹.àÚ:×ý òßø¿øº,»Œ?´u¯úäÿ¿ññtYwþÑÖ¿è_“þÿÅÿÅÑeÜûGZÿ¡~OûÿÿE—píkþ…ù?ïü_ü]]À?´u¯úäÿ¿ññtYwþÑÖ¿è_“þÿÅÿÅÑeÜûGZÿ¡~OûÿÿE—píkþ…ù?ïü_ü]]À?´u¯úäÿ¿ññtYwþÑÖ¿è_“þÿEÿÅÑeÜAý£­п'ýþ‹ÿ‹¢Ë¸ö޵ÿBüŸ÷ú/þ.‹.àÚ:×ý òßè¿øº,»€hë_ô/Éÿ¢ÿâè²îý£­п'ýþ‹ÿ‹¢Ë¸ö޳ÿBüŸ÷ú/þ.‹.às> ð´ºæ¢×Óè·öÓ¸Í½Ô œ“Î8©•8Ë©ÙCV„yc·™›ÿ ù¿çÇYÿÀËzcçGönËñÿ2Ηàÿì­B ßìFáà`è“ÝÀT0èpäUÆ”SјÖÇÕ©G¢ò3~&jGT·Ó§h »Ç5Ä „ƒ‚¥èOrkx.[œ']ðÿþ>gÿ°nŸÿ¢Ú³Ÿù‚;Ìa@P@P@P@P@P@P@P@P@P@P@P@%0 ( € BÁh &=â­D›•Ú¬G’øãþ=aÿ°•ÿþ†•kq×ÃÿøùŸþÁºþ‹jÆæ4pþ;Ôõí'ÄzΣâ5ÛŸ ¸YÞè:‘‹ìTä´HÀ3oà™8cžsÁòÅ©;Jú=Öú.ß«üMd½å˪[®»]ùù®–fL~*Ôü?­xçÄÚ4Öw±C—,¦êÝr¯PWk „î'œúbµ¿³,•—´’ü{ù[¶¿-r·;…ž¼|­¿ü9Öx×âeö‡ýî™w¦^Çeöw{°¹‘Ò96äIr­åÄù-€ËÐç[–¢Œµ\Î/¦Ý»½¯óì8ûñMhÜoßú_ÖŦñψî|q­i:m¦—ý¤Emu,“ù‚o%ñÀÏ"´ÅAÆñ‡—ÜìþûÐ’–³éÂúúuô<×IŸT»›þMF_øÅoa2£MªI=½óªYËárÿËÊIÎ)T÷£9Rè¯nº>]ÕÖº;ÝlT_,£í6oTúm¥×ÎĶ*Õübž²´Ôo-eÓ´Ë‹Ý`Á;FÌñæ4T‚rë’§±¢»MU­…CN×’ý7^J.<”eñsYú/ó½›îcü>ñ>¿&¡à[CYÔg7×S\³IríçÄA@“ómx˜àôÜ+x¥í”{Eþ1æOñi„ÆMªM÷”;5ék?™ÚübÔïlükàû[yug´¹kƒsg¦]<\…U ®™#·#Û­sSiV—6Ê7ü%©¼×î•´|É~F?…¼}©éÒ¥çV¹Öµw·´’tšíì¡È%eUýä’/8PyÈÁ ÖÎôé½Ü[m-íÛòoÉúìI­“²^ooë_½é©yñÅVÐÛ@úT0ÜO­Ã§Eww§Ü[Es ±"ÄìHÇ ’?:P\ò„vošývµŸ£¾Þ[®„Ÿ$g-ùR~ëä0|PדU—òZX6­ý¶ºdw« ‚Ø!çy~âØåߎzñÊ¥ûÞKi~{ÿÛ¶Þÿ‡žŽ»æ¾¶å·ý½þV'Ÿâ?‰£ƒQ²¶Ñ’úÿLÕ…Õݤ³Dœ·ä+o'‚»ð9ä ˜ÉJ0“Ñ>dÞöq·àï÷' äœ\¢µiE®›ÿ_‘Ìx‡ÅíªêúN¥§Üé7דYjqCªÚÁuB±ÂX¤[“’wu™'ÔkOq?_}ÿ—ßÝ­x_[NÞ—Qÿ?»³6¼5ãé¾ð‚Iwk¨^x†xí­î. ‘¸Üw´­ææVÆ0Μšéš½hÓZ{·ù(§·}wü íIÔó·Í¶–½‰u_ŠZöiul,´éõ; z=.W "Cî=èjêÏ»7»ìÓ]¾E[¾7hÓe {³í1G{s‘,sÎ6âœ[­ÓõºýX乯~¿¥¿Éµézޝ§ê·–¾eî˜\ÚËæ2ù{†€pr=A¥vNKv­òïG•í¸j~ÒõMSNÔ¯­|Û½-™í$ó|²À8Ðuˆû’ç[Úß/éƒÖ<¯mÜPÕ¼ áÍ^þ{Ûý8¼·>_Ú'–8î6§›°Y0¼ (®O‡½þcm½ý>F›à9¯üSâ WÅvºl–z¥´V‘ØBí2ª'r̉ƒÀã×DRP’–òwô²¶çåøƒvœ\tQVüo·é©¶| áé-®-®­n/a¹‡Èt½¾žäÈ8_1Ûo ® zS—½{õ³û¯×æþñGÝjÝ?àtù!²øÃséóØÝYÜ]Ap" .o®&e’Sk³–L?tަ›m´ú§;íq$’²ÚÖò·¡¹ca•ŠÙÄf’ÿHçr ÉËÈK½ÏµLÒš´¶}×ts°ü6ðŒ}•„Z:-µ×Û-ÓÎì—›;²z #ÅZ“RŒºÇE÷ßóI©G¤·û¬O¨x Ã:Œšœ—šX•õgŠK¶3H ´q ò긨K•$º;¯WÔ¦îîû[åý!ãÁŸ4òÚÏ<óÙ>Ÿ$³ÞÏ+¼Id,ÎORyê:ŠM8ôv¿Ë`M¦ŸmQq|5¤/†¿áû¶’!û?Ù™™†ÏMÄîüsšsýçÅåømù »ø«îC¤xKEÒ5¨Ú[L÷¾P…n.®¥¹‘#ªÒ³ž)©5=üÅÊ´òØf“à¿h÷z¥Ö›¦­¼Ú¹&ñ„Ž|Ì’N?/,~î?AQʽ—²û=¿¹Ÿ:©ÕYøÃ6_Øæ×L¹°>t„üå¹-ódÿ{5§3Sçëk|­byW//Kßæ_Ôü;¥jš¾ªßZù·ºc3ZËæ:ùe¸<éܘû’s[Úß-Ìr÷£ÊöÜ͇¾czN”í×ê]³È¸˜‰ û·çï&ÓJ+•(ÇKmåÿËm» ¾fÛë£óõ1|cðÙ5Hô¤Ò&–?#T‚îîK½FæI^8à $ŒÌÊß1Æ ýE8iQIì¹¾ö’ý¥­9EnÕ¿?ó7À^M-´åÓr×_l/çËçyùÏ›çnó7ûîÏn”mËm9véý]ƒ½úî,~ðô6é ½­Í¹IÞãΆúâ9žGᙥWÄï1£µº+|´¢ÿ/ÃEù±-¼á{Yl$ƒI_Nˆ ‘ÛhÄ›?9`y-“JÊÍtk—åØ?Îÿ=5ü?<3–ºdvWcŠD–Úúá¾ÎêIVˆ—ÌG$ò„g½Snéõ_~Öß·–ÁÝwû¾í‰€|2l#²m7t1Þ‹ü´ò™àg÷Žå·9äýâh‹å”d¾ÎÞBjêIý­¡›ñ/ÁøÒ÷ÃÈÂÔXé÷Ÿhºi„¬˜"!±ÎHè)S÷+*¢O•Ðç­)Au·Ý­þzèvÝ:PP@P@P@P@”ÀÀÕ5¨´‹ë¢É½ß˹Çcššq¼ØäôEˆµ Ma¸{­ºÿþ†”Öå×ÃÿøùŸþÁºþ‹jÆæ4v5˜Ê ­é2j­¥&©dÚŠ µ ¸C2Œg%3ž‡=(¼›]û¶¹=Íõ½­Å¬ɲK¹ p®Òw0RÄqÓåRyô¡jì»_òÿ4ErÅF³Â×n²ÆfCße¯Çg ¶3$?j»–@«u)‘‘ˆYXìÚpFðñ =Œ¥Ýü“‚Ko7ùß©:ûÊ=¾÷ußoêÎÖPù†ði‡ÄƒSÅçœdûG’-¶7Ùü­ß'™þ§yû¹Í(¦ùSò¾ß:¿•­Í·»Ëo"´éåoNW¿üy­Ðè|Mg¨i’év:Eõ骶Ÿ!–ñÞHË0Î¥‰!•ÜŽ™AÀ6uyzhþQ{w÷¯fûÚ÷¹ª|ýV¬´ÛF“·nmñõ¶¤5KY´È¯ÌQØÉòÚ2ˆÌöþ`Fï1‡Æ>cƒ·œTÅûíËfãüŸ¶¶½¯n…µh%Õí÷yþë¹—¼ ƒQÿ„—þ“s?Ù¼¡{öÏ»Ï7gúFÍÞ~7³ž6Ó_ßÞß/‰ïn¼¶·•ïï îù6ÒÿwKô¾ýoä2×ûbïÆ ±5h-.$¸·žÙã¿Ø‘yN#:I< Xª‘å *[³œÄ¢åNq{¸¿”®´]úê½ÛyXwQ”Zè×Í[¯ù=oó3´;}JÓO±¶h¼O‘ 6Q߯Ÿkó‘‚N$ÿËM¾g•Ÿ+øq—5´¥O™ìÜ­÷F×ëüÛõµÉ³ŠioÿÛté·á~¥Ë}?ÄWZN©ss>¾“Zië&˜‚y£fa$æ=êß'–"Ü­“ÏÌ3S®W/‹š7í´9¼­{ߢÖÖÔnÎN+á÷½zÛÏÓÊ×:?}£í6ö×ög‘?™ý‘çy¿hÂù[¼ŸŸn<ÏösÝ«7Íyrïowµï¯•ößK\ª oÝ_ÒßÕí®Þc¾Ùkï/|K-éÔ3^[ÌâûˆK”Lì?¼ßóyÈs[Ë•/w»û¹¾VÛ­·Ñ+c»vI~]|ûô¹‹åÌ÷Ë'‰"Ö_SDg·7kl¶¿hP er•ŒŸ½÷³Îk*Jü‹×šþõµ­ÒÝnk7nk|¿ø;õò°\Úk6þ6òÎ¥ª[[[ͲAi{uÐ]Êò¬¾P%·‚Ó!aÙÆÜ“³•®ýí6ôòÚÛ[U÷©¥d–ŠÛï­õóùmo™Ž-µíVÏ\áÕÌWÚLîöoò.)H–Iä!Î Ý„V¡%wIÁß®óiñmmõÛ©wýâéñ/-vòû¶û (µFñT-¥­ÙX¤Ð$›OÔ'ó Ú»–G2lR[ÌÌ…†AÎ6âéïyo¯Ým<¶¶ÖwNúÞø¿%¦Ÿõóý-±sâtÚ×Ûöé ¨Á%µ°–ÚKHo&2n?!ºÄ˜Ú9”6w`0f—ñS}ã÷_W®ôßOCI¥Éo'ò}<þ{~&ç‰4ë­SÄP´úœ6"Âáäûİ)—t[2sØ瞣5œî£Q­ÒVõ÷¾þž^[à¿}}KHO\kZ|šÎ¥ªÙI¶ÐƃN¼•$CyŠí‚%üÀÆX÷.sœÆí'9úËËMmg¶Öµ­ªûòwPIvüoׯߣ_3CG‹Åj³ŠêMKÊyÒÉÝÙÎÝ‘¼ãè%Û0,~ð)×SMÞÎ]W3òvk—æìÒõó*¢µùz;z©;ßþÝŽžLŸÅp_'ŠçŸÊÕWJ‘lÖòM9e²´ð¦?œ€æ=Û>lLÔS²mKk¿¿–6¿–þWµÊ•ì¹w·þݯÏô½µ*é ¨ lá&_µ°‡:x·ûPb|çÛö“Í»ËòÖñ÷³Îê¤äµµçîú^Úÿwâ½úmm vÖß ß®ÿ}·µºo­Œqm¯j¶zä®b¾Ògw³xïApJD²O!pX~ì"°à$”aÝ'~º7ͧŵ·×n¦—ýâéñ/-vòû¶û‹öÏ2_lßgò>ÛöþL^ïùm³>w_—wÞíCæåvø¬íÚüÏ~—·-¹´µÈ§m;i»_Ç{y[Bæ—aâCn5V}[ûV-FÉ QÏ ƒË)Ÿ©ØË“&N1Š×ÝS¶nwô÷­úYï¶»êà×’·~›ùÛu¶ç iןn·i¾Íqm¶Y#Ùp›íb»±ýÓŒƒÜk>‰÷_×ÌÑèÚìY € ( € ()ÉkZL7zÕëjZ êvò$^K„FÚ@!±–u*ã'™›ZêƒM¶ƒI£Òü5shüÞ\q‚ßS»&©Í½Ø¶Ùµæ‹¬—zŽ’±ê(AY%ù‹~öED±0¤¹e+•½RK›-tE8Òžûìíº6ýÓ˜Ûƒýî´§^2Wƒ%¦·Cu4Ô$Š[ÝiÞci2Wéó{V±©m‰iö6<2³Ckrn¡xK†uWÆvíQž ô5ŸR¢S"ö¢åX@sÒ¨G–ø×þ<­ÿì#}ÿ¡¥ rÖÇwðÿþ>gÿ°nŸÿ¢Ú±Ÿùf0 € ( € ( ËsDñL‹$n¥Yd0=AÅ&“VcM§tUÒ´7F·k}#O´ÓáfÞÑÚ±)l’œϵSobl“¹rÈâ‚W†(ãi›|…Tí€2}Nô•ƒÌ’€ (7‚š9ž(ÚX¹PY3×¶p(Û_ëúÐ<‰( € ( € ( € ( € ( € ( € ( € ()‹­Ë¨Er>Èn„[Gú¡3ÿ9þ•Å_ëß»Ûåú³HòÛS&MKQ4Ú€ú%·øÖ?í¿×/ùŽÐÃ3[½Þª÷Ä éÌá«OîñùVQvœ½¶ÿ/лiî”®¦øŽûì2¡†ý™b#«õÝý*i:Üòö?§ê9%¥Çý¦ãþzj_÷Å¿ø×Eñ¿×/ù‘h¬$šTÇï˜ç¬¡Cã¼W¡‡u9?y¿Ëô2’IèhÅQ—9>•Ò‘›d•DžYã_øò·ÿ°÷þ†”-Ë[ßÃÿøùŸþÁºþ‹jÆæ4v5˜Â€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € J`C,I÷Ó?4s§Úϧq\©>…¤Í!y´ëiûÏ'ó¨t¡'yE}Ãæh!Ò4ë`Eµ”†äˆÐ.*¸B0øU„Ûl­¿çŠÕŠìUEŒa(ô¨n”Àe1Yã_øò·ÿ°÷þ†”-Ë[ßÃÿøùŸþÁºþ‹jÆæ4v5˜Â€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € CÒ˜ ?ã@†7õ¦mÞ¨CšÃLÍP†·J`2˜,ñ¯üy[ÿØFûÿCJå­Ž«Ã1E%Ëy°Å.4Ûy‘«c÷mÓ"²Ñ½ök_ùó´ÿÀtÿ ‡Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ óoº}°U ¡|Q€>tè+xˆë|-ÿ-ÿ`ÛýÕœW×¶ºu«Ýj0Ú[ÇòÍ D\œ “ÀäøÔ ¥§xEÕ.Å®—ªZ^ͱ¤Å´¢PJä¼8<óBM¦ûÒ4"š)ZEŠTv‰¶H(ØÐàƒøŠ:\<‰(34K:ÀeA3)uŒ°ÜT Ðd~b€Ø’€ ‚Êò è Ö²y‘‡xó‚>eb¬9ô Š:'ß_¼6mvsq ¬^eÌ© d.çlIÀRN©rQW×Q¥r…¿ˆt«.ãR†ëu²‡–O-†ÐQ_¦2~VSÀïëVÓVO«·ÎöüĵvF˜9;êCä{5šI›ˆQ$tÁáX°SžœíoÊ…ªºôýPzÐ@Ff‰gX ¨&e.±–Š‚ z ÌPP[Om Òm’éÌq ¹‚–#Û…'ŸJöùþ_æ+“Ð@PI´•ØúŠ4}Bt†ÒížIda¡‘<Ï•˜%@*B6|§šWW_Ößæ¾ð~ëiÿ]?Cb€ ŽYá…£Y¥Ž6•@Ìb$^?@i]!Úê6ws´6· 3¬I1ÙÊ”|í`Ý;OCNÏ_'oŸôÄK5Ä6åÒ¤fBBl @Îdp‹ÍÏa‘“î(þ¾ý¾ð' €#žâeV¸–8U˜"—` ±8g¹<G[ÊâCsÒK3G#ÀÛeT`Lm€pñÁŸZ× ‰h €<ÇÆñáoÿaïý +xˆë|-ÿ-ÿ`ÛýÕœ·›y%úW=dÝ9%ÙšCI#ˆ´Ð绋Ñܦ¡l¶ú#¤† $·e“÷8Fe!àü¹çñZâæ­(ù[×Þûÿ-}§´îîbHÞ!m>)/›]y±‘m]Eç9·€­ˆ\êPÀàŒ‹vöšwúTµìô¶¥¬íqGEg¶Ÿ—ßóZþaâÈ59dÓ×O{ÈÅÐkIü—#ÉUŒ¤Ž…Uõlw¬Únn)ô½üÓºûöc‹å¦›Z¯Õ5ø;?“0^}i!š÷T¶Ö'G´›u­©š¦P¾_Ì»™]íf=3JNñm+7ko¥Ü¿%kýÛ.V£}תKVïo–¦n¤ºÄU´ztúä“ÁnfŠáàÔ]î&.ÄÇ´º„ ´cÎ •#ƒÎtZT]“Šõ][éÞëÀ—¬_þO¢]~{_ælµ­üZ\WÒë†;No¶¬NÒ¬åòÂ*|ʹòòPdŒdâ³—"Ëÿ“Yoøù^×Ö÷z¾f¿¥u{[^Ž*Þò×À ma¿†{{™nc…·ùò"Ü3í üÌYF9äî÷§&â íªQºù$þïÍJNiu½¿G÷™¯‰B$S6 Æ†F(\‡ó¥‰IBm”c VQ8Ú.;ÚëÖÑ–¿;ÅyµÜiÝó-/¯¦©%÷]±4]2þ?‡í£ÙÜÇq-º¬q˜;²D¼)À¨"·««ŸÚÿÛۿݨ¡¤›òý¾ °Öl.fµÓ®µa¦³[¼ò·ÚnœdLnÇY1¸E•†=0H9-ìö»¶ý£o;o«¾ •¢šÞËóû¯oM Ò·6š¥Ô¯u©­.<¨ž{{[»y¦U[²hÌÇoÉœ’p'œÕF×iù¿Â ú|þzy Þ×_ðÚ½5:í2ÓSŸÁIsuor|æ´šâFY‘7±„ÈOÍ»rœd79©©'FOx¤ßfÖë¶»>›•œÜz7o=tÓç{|Œ'Ô/ì­5]Dëka©,÷5æg…ˆAŸ+æ °3qòîo›µ9ÅÂñ_´õm½z]hµÓFw³vµÒ~‰ko&îôÖÖèMg{¯Ãl–:œZ›jrßYHÏ 24B=°ù¿¼Q±Wp“+žçŒÖžëšKdåüšÞ»«À3ÕAù¥nÿ?>åÏÙÝÿn[_iñß›¡§ÜÅlöÍ&ÅŸ(cíá¹q´3ÐV9yÛîWæùÙéÖûjm¥£~þå}Ë^ óüýCÈþÖþÍòâò´üï;ÎÃy˜ó¾m¸ÙþÎsŽõ¥K¨JÝÝ­ÚËõ½¯¯ÊÆQø£~ÚúßËñ·‘Ìhúv¡¨ê:tÛ’À— Ó^È÷V剆lü’s ÉU&6(r1·¥8¥$šõÖ=wó³í×R¦Þ¶ï÷k÷?UþLf°Þ!ŽÉa€jñ\Y¬ÆÖQäïq‰¤­±ÕPî—~àÃÝSmÊ ÿrÿ…ßn÷[éè9¥iEmïÀóô{/¼Ñ¿³Ö“AYÖçUG¸Ô¥d‹™š8ËåìŠ7W œÆA#ÊŒT-9í¯­–ÿŠí}õÔ/~g×§¦—þ½loÙZ^Íàv·]Ná®ü§1]Ë ¶®¬”ܲà wXsšª²äJ}¬ýmߦ½EM&Ü^ÏOKöývIõ û+MWQ:ÚØjK=À‡My™áb@§Êù‚ì Ü|»›æíDâáx¯ŠÚz¶Þ½.´Zé£ìÝ­tŸ¢ZÛÉ»½5µºŠ÷ÄéæÇQ‹TmV[ËI Á l>n$Q±Fá&W=Ï9¢®ºC§?å+zî­ÿ˜hµê•¾þ¾}ÎÃz|±ø6oe¿’êæÑZàÜO!”;FIÊeÆ=rhÅ%Ë(ÇÎß×ôºm¡T¤›ïúœ5¶®éöºtZL–+¤‰gy$Xg6·*@ó ólx•UT~ôí¶¿uáó}m¯{ ){·ïú¿é–c‹QM-ö®·,FxÙíÿ³u(›„|¡ÈóÇoÌ„ª•R‚¥¥ºïåÛçÝ«ï¯T…õÑÛõû¼­÷&¦uxü#¥ÜØÃz·Ðªo¶iL’1xÌxs»k:±$»“ŒQ8Þ¢ôwMöºß¶tÓ{ (·mµûíßU{'óÔ϶´×þÞÖæ]Eí¡™¬™·È±¬S‘!lóñßÞ^¹Np–š´þÿu~/™ú>øÒìÓ¿®¯îѺ6‰u‹{=¢kÖ×vzEºÄ%Ìdܧ™¹@cûÀ0¼¦šÛ™ss-œ×ÝîÞëï½õVèMµå}Ÿëk?òùgެ…Äš-ı_ɽËyŸbi·(hœV#¸ÛFqÀ'<\õ²·X´½t·ä÷Óð*/Ü׺æsgL×4½NM)õey´´7jí4¾YW‡pX÷ ŒÈ6¡V88ä[Ô¼’éu¯þwß{^Ú.ÖИìŸ_{þ—¥þgA¢Ú³ø7T¶Ô.u N VUØlî ˜!@ ¸f‘R '“Ó5-Ê“þµÞÞ^EÔªmÆw_×ü9DBâÆîæ.¯—Jk{‹I¦ÓÚÖê}ŒÅâ*Uwü„…*ª>|`œ’7%iÛ[¿Õ®þý}:"cof¶·ÜÓº×Õ|—]nEmáëû;©ï ·s¨ZØÁ `¸Í3O<ߨMgR<´åê¾U˽_ͦº²âùåô¾¾ŽíÙü½5è }>òoøBÉ¿´-P*-âÀï ª‹vù\® ÁGQÎ;×EK:ò},ý/uoëôº3‹jŸÿÌç5v×-›[º¹Õu+YáK²±%Ù£ÚÞQY·˜a(lŒIÎøc~¶¿¯2¿ü2ѧ±£^õ–Ý>ïê÷ëò.:Þ}¬½›xøq¤„\ïûWÚwm—q@ß¾ “vq×n«Z;Kmm÷-úÛ{_®ú­•·¶¿N—ÞöéæD¿Û‚m9¦:Üí…Ûâæ"±ù϶G•rŒþX@ÑÌÿhA‰sr¿æ·Üùu·G­öÖû_B´éµÝ¼õûוôµ¯Ôi³Ô¡Ûu$z轸ÒìD²BÓ–!X‹ÁÚ$x ’JüƵ—*©%Óšÿ++~+[ko"u²}líë¯éµô¹§áëMBï_ˆK.´š4Fy-EijÆì‡h”±~o7h~JúŠQ½›–ö_œ¿[ð¾»ÞÑÛþü?[ô4|,5 5Ëè.®f’ÛH/m‹yÌíæÜòR3äó’Ô©ÿ™ï¢ÿÀn›ÿ·ºù¦‡='eë÷ì¾ZéÙ£"óH–ÏSÔ¯6ëiiq«uöIî ¼&!‘TçfÐJ À>è"¦£§·½÷ÝÚývù7fÇ=[k{/ø?×­µ.ø*ÓT›R7¼º Š tû*O,Š¥L“2.~i<¿/plpO<ÕÆê7—ŧþ“Û¦÷òÞÝo2ø­µüÿ«yZå/èïqâ¹™aÕw]}ƒË–ݦ1“Ÿ3;rŠUp~lc$Žrji/zÞmü¹mù馿U»uÙ¯ÿ­ô+kzսܖqÝêÐi]J_.òîNcˆ§1H²²äË‚Y—<áÄ«´¯£³·þþWµ­u·âÞÛËòÿ=íþgAâ-2]OšU½Ä——’­Í›I,B[i&ç*¤2ñ–Áû§žÈÖI:Éí¿äÿ_òêDt§%åú˜úVŸ«õw¹º×aû%¬‹fL“JCn`ŒzÁ<¼N~^ø5ž®šowËÿ¤ÆûyÞïu­µ½ïERËm=5þ—}-læš=.{Û}m­í5FÌ«5éwSQ Gýò)|§po˜©5¤~8Ëk¦¿kùh÷·ŸC6½É-öýoóÕmòÖæ‡Ä;;í8¯­#Õ ÃM¹Š±iþY²…ÏÃrÃ=E=*z¸úY7-Ÿùu4 ò¿å§âg\éÚç‘sp—èœÁ}2¢Ï6<ÔŸ÷.q¤áG :ƒE=9îÿmøo÷ï©/_ÇòÓñëòÛBö„šÀñl³jW÷èë<ù¶ûÓC,_7–»ÌåØr[#’r ùiÝêí¯¯Ïð¶–r•Û]6ü¼¿õù]ÂG®øu„Ö÷%ݾï*UÙ4DŒŒápqô"•dã˺Õ[ºÕ~%Á¦ìöÛå³ûÎ:[K›MG7©­¤7ÒÜ^g‰„æñ°."ùÀæ@Ýz º‹–R>‹Ýí{ëåw£×MÅO£—}}6_/Mvó¯|AžluµFÕe¼´¼ÈÑöÃæâEnesÜñƒšUuÒ9ÿ)[×uoøÃE¯T­÷õóîu> ´šÓÃv?l–òK¹`ŽKƒw+»‰ à ~_ ÇçšÖ¥”šŽß×õùh(ßvmVecã?øð·ÿ°÷þ†•¼Du¾ÿ–ÿ°mþ‹jÎ@}SPµÒ¬žîúCʤª3œ³P‚I$ÀïP“{ Í·ñv‹qq¼7›‰]£I„ŠWnw!\¦7©Ë0sÓšüÍ~i¯_T Ûë© Þ4ÑÅ•ÝŬï/Ù£óëy•s·z°C¹3ÕÐ0hZÛͯÇo¿¥í}†Õ›OÏðßîê\%Ò~ÖöÍrÈɼ^XI@K)P„®@l­ž‡ êÎ]¿.âì»þ¥)üeb’éÂ]BHï§0‡6WX0SXp:q‚Nx5I>nW¦ÿƒK^ÛîÄÚQríoÇóùWÚæ›a;Áwr"‘<­ÊU¸óªvîU¾˜$àRZ´—Wo¯ù ûªïk_î9ßxÙ´ó"i?f™¡oóäIÎ1€1¾džzpJ‡½%ÙÛó‡é/ËÐmXéu=VÛJ·I®Òé‘¿çÞÒYñÆrDjÄsCj/QA9$Èã×´É iãºÍÕXò(çzóÓš¦švõü/ɉ4Õ×kü™•eã­*[#=Ò]Û?4KØçva\™ aIÁ9©M8§Ý_ÓmüµÝèʳæqìíý‘bhNЛÉ×êm¥1(*¤1ÚC`dã' 47kߥÿg÷uí¾ÂZÚÝmøí÷ôîôÜšMsG’îÅdó$i¶½­Á³‘¢Ë© ¶]» ãïÎ;ÕYÆN=U×êývéÛÈWN*]?àÛó3¬|g¦ê0L/a6Ð*Ü RâAuI(hÀ}Û†@9…Á9Ä+J ¾ª:‹¥¿.å;Æv]ü<ÿ« â].ÖÚxïííßåV}6â5Œ›1÷l sÒ¯YJÝ_êÿ;üþôN‘ú/ÐÎÐàR‡½ú¿þEIþls÷d×Eþv/k^#†ÏF•› a[ÈíŒNxó„o´XŽqŒäŽ3I=aÚ_äÚûôZKºþ¿áû <[£›q2Mrä»!…,¦i”®7nˆ&õr䕿_Q‘´¿¯—˯ÜÄ»ZêM©ø‚ÃN´µ½šâ!gpüì±ùm&å §<.yÇó€[÷eÊÿ­Rý®‚÷•ÑPxßÃøµì‘ˆ•ÙüËY“nÕÜÀåFoÍ·©€G4_¿7gÛ¨_…ÿ·~„ƒÆ'—#‰ÕãtO%¬æY˜¾v툦÷kTòŸCGüÁ]úhðÿ¿0ÿ„£E¼Sove¶3’ÖWýÙ ÷€S·î2á°r1ŒñQQ¥ ;]%òÚÿŠzwWìÊĺkúÛðem/ÆšDºM•Ì©qiç@’4_c˜­º‘ÕˆL*uÎí$¤Ÿ;W¾¿ùùo·s8鿤K?Šmß_±ÒôòÓnd‚âO³Éå®ØÝˆYq°°e€IñÇyߥ›üRû·*^êû¿÷>,Ó,¯n-/%:'eXíàšw!U‰UN1æ™ ç¨̹oýn×é÷ü®ù]ìD|i¥Ç¨\Á)•m¡µ†ån–9›° Œœ.rŰAVi´÷Nß–Ý÷éÓ]‰ºÑ­š¹§i¬ÙÞé³_Z4²GðèкH¬½TÆ@`}±“‘ê*jK’_×õùÍ.S›Ò~!Y]Jd½Ž{Kf³·¸´œ˜Ë—ÜY¶à Ú¸ržy­9uqó·åköm·k“}/äÿø þ›>¥ö¦Í¹‘XÁ ‰Ùs¹VB»†@$ŒCSy] û¥#â ©|Gq¥XYÚÍöB‚2÷ËŸk;Ò-‡r Ã’ÃÀŽTnÓ~¿–—í~žZŽ^ëK¾¿¿¯‘BûÆÒAag=¦”ngž0Ò@' bs2ų;y;‹àñ÷=ø.¹´ÚÉùÙ§-½ù…­~÷kîv‹FΗ¯A©^Mºþâ;XnV\ýá!~ ã‚6~¾ÔåhÅɽü,ÿ-ZK¯ùÚÄ âýK(®ášêh§É‹Ê±ÚEÊ¡ †X  œg”ß»g°'wdgiÞ ½¼†=Iôë{}EiÔ—˜•b H‘£Ù´)Ç÷ÉÁŽ &ùç§õ³óûõÓÌv¼¹c®¶ý4ùúh/ü&š€Ln..#µ”âRJ—fâ © ãž(—»¿Ÿákßµ®¾Zì%®Þ_Žß}„ÿ„ßÃþW˜·²8,BZÌÌùV`UBå”…bdx§/v÷éÂ×üÓô×`Zíý_þžºn*xÇI¸)ö ÅÀ$äyr«2ùnál;ÁpG‘ƒ3n NÛ'ø[üÖ¿ ãi4»Ûñþ¿Îĺg‰¬®ü1»r%³·xÕÝe‰ÁR@ùTòH¨ù¸ÆsZMrK—ä¿á‰‹æ¿‘KIñ|w·×ñI‹ »Èc_²Î·a'÷E7™O¡é€y5+àæÖ²Kòüïa¿ŠËúÒãŸÆ6+}ó|»o3ÌÓA$s$ˆñ(MŒdùœ.Üœ®:ò.¿+yÝÉ~Ÿ˜?ó¿ÝÈ´Þ-Ñ–Þ9¼û†2;Æ!K9špÉ÷³M댌’£¨õM¥÷_å·ç§¨Òÿ/Âÿ‘wûkOû%•Ѹ ðÍ»•`l2zqò©<ã¥9þíµ.—o帣ï+¯ë¡¯xÊÒÓIûN—,3Í%±¸‰eYåÈËÆÞ§Êl‚TŒøÙ©¨ù¯ÅÅ~RüY«úþ¯‡5 u=0ÜΨ®'ž, a%dO\(¥öbû¤þõq'«4èP˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³"ߊ¬ï/´#MØ.~Óo"r®É‘‰#rä¤ã œqD+¿¯äWM´Ÿ Ék­Ë«ÞÞ¥ÍÝÊH·\$m 6‚ÌTˆ I$œŽ•—*ä•>þ ÿ?èÛ|Ê]¿¯ÎìÇÔ|'¨Ûé/oÇUu±}2Éc‰ ò"|eåfŸe@<)Ï›sMîÜ[}=×}¼õÿ€=Û+´¼ßùW,'ÃûU¹½Üº[Axf&S¦¶§šv.7v,q”éÇ=jq‡*vkgèî¯ßõÝ7ó4äѵ‹„±’ëV³{» 69Á•v22²ù§$†' Œpjî¹¹½SôvzvÛ}}kEÇÒß/ëÈ~»á¨uB+™§d`’ˆ/úÍÊUI9ãhwãÕ½ª,×3[´­äÓºeÝiu³û×Uø/¸Ç½ø~n£µM®mÄNßgûï²ugÆîærØöÆyȵhÊëeoÓÿüHWµŸŸâÛýM?ø`ëÏjLÖ… WS í§Úb;±ó„Þ 8ÁÃãqãšÎQæoÍ[ÍzvóùË»Z”,|wcoœ:Ä_bŽkk‰¬ÿxï Æ8møU>Pãi ž§¥kÍyó>µó¿ù¾Ärû­.ªÄ£Â𕼯]?Y‚V¸y¶F@#™÷²¶$`Àa†8 õ¬¹}ÎG³I?E·Î×¾éöF—÷¹¼ïóëò‡rM3Á‘i‹mµãy6×j+G“³“ž¼nÎ=±Þª§¾šî¤¿ð)_ðؘéø?»üÌè~îl¤{ëI…›[2Ë-Žû…òB ‰!‘i;BõcÉ«R´ÜüÛûÓZ÷µôôB’¼y­ï§õÿÌž ægþÕ@±4²Zb׿‰Þtœ;ðà2c.Aõ梂VÝ[îI¯Å;7óV*V“}Ÿê¿¦Eâ^ø€³êšŽ›4¯“¹´Æq$ï„4§Ëc‘“É;GLS£%%Ý?=:_·—¯}ÛVõü_?é¾ãÂÙéZ¸³˜ÝÝ^ 0(Q• šIQòI+Hü¾qSgË-,Ö¿(§ø/žÀ­vÞÖzw¿OÓñ5¯<>[ÖšVŸr–ÍhПÅíÌ8þîTûÿœŸþÝøyK·ùçÁw 1[j«ŠÒÖÍm¸ù–ìZ70ÀÉù”ç#¡kG'Îæ»ßïV&½õ¿B,¬—ªûõûÓÿ†6tM"KoMåÊÜÝ_ÌfžHâò“;UU,ØUz“ÎMD¢¥gÓ_Ŷÿ2“j|þŸeàÙáÒ/ì.58åûM„vÈ–Å<´@áXçqÃóŒ;Uݽ^üÊOðÿ/1-ÖÚþ$š?ƒbҵ׿…4©¦’`例©|’áúeUÎÞ3Þ”=Èòù[·ßý.â’¹kUÐo5=Jº¾µ{.c¹Š#eûø™0p’ïÀŽ~Lá˜fˆ{²R{«þ=ÿ¥²µ*þ¿¯Á‘Â%Ï{$wl¿i½†éTÆ1¤‚Bƒžw9‘³þß|QqEvoñM%è–Á/y·Ý%ÿçe÷´ßǧjÚ­ä·—¨ªшH.XƒèÌå±êO¯ãzN—¯â’ü:yYt*þúŸõýÙš‚"»±Ñ¡ßaq.•möaý¡`.a‘J¨'ËÜ ¶PCw#œÖ’|Õ%>ÿçÿJÒ<¾w+ÙxOP’KÛ;É¬í´‡¼†aooi±¥Ç60ˆÓ|xÛ´œÏ Ô´¥ÍýïŽûèïÐòõI˜ÿøB.ZÙ ¹ÔlîÒÒØZY¥Îœ$E‹z1©|HHFÌc8Í6Û|Ïwkü“Û³»¾ÿ€öÑm¯ãún½Ì}¿‚îa´™[YynŸìì’ËÈ¢™¥ !f_›n d÷½ ÚÖÝ;ÿäª/·õ߬Ùk~Öÿ†þ¾á—ž¹½·{K^3fâXm0ñË2°b[Ì£Ì|.äeŽ9#h¸¾ÖKÑ4õó²Júw±M·=þïó×þ¥â]µ]GF+yVÓ¸8Æo,ޤ3¤g#¥No'÷Ý[æ·O¥¼Ék÷|žŸ“OðÓç~††Ÿ ×Z“ßHV˜-¬coîãlŽr[qç§6½;=ÝþZÙ~üʽ¥¦ÊßæÿËå~§+aðìÚÞÁr÷Ö{áÙ¹á°òå¸Û4rn•Ë’î|¼ÿhœzÜ+¿à´[Ih¾3\×ùúêj\ø^ìj×:ž›©Çmqpònóm|ÕºD¥@¿018ä‚ gÉî8ti§÷·úµÔ»ê¥Õ[ò±f_H|-e¤Cxk·òî-ÊZ"¤™¼€Ã¯ZÖrr©Î´×óºü™V‹‹êS¹ðbÞè°i·—»•&¹–GŽ-»üå”'ó{ç§½fâ´K¢KîåwÿÉv)6›o«¹o¾S£C£©”(-§é¢Ð¾3÷ðí»¯¶9õ«¥´ü K•§Ûï*§…ïÆ˜Ú+ë(Ú7”ð,b×ý FT…S)r§nFÌ£$ó™|ÒWoUm|ÖÍ÷óÚïî)4¥u·oÍ/éÙ}â[øNéµXµMOTŠâõ ‚ÐÚ˜¢Å"(Ú]¹Ì¬Äçž)E5$´æOñ·åoø"ZrùZßëú gàϲÞi÷oÝö+x`Ûäã—±çïqŸ78ÿgߊ©ïóÿzÿ+òÿò?ˆ--åþw  [Ý:àßï6ðÀTCþ\RÇœçŒù¹ï½óÁ;MÎÿjÿ/ÿ#ø‚Ñ//ó¹f/\ Ûèòj´Öf#mr¶ûBùL­äÜw}Ñœžq¶œ¤Ü”úþSüpI%%Ñßúù32ãÀ×wRÝÜ]ë=ÅÑbám ÄÛŒRžfJ îä1çÖRIY~>²ûvš[¶Ýÿ­­ý~„VŸþÌd’+ûkiK´±-¥ˆ†¤Ý .#Ü~P`ÉÜyši¸ÚÝ?ÎWü%o"ZOëKÁRÐ5.sªiŒÚ†¯tÓ}¥¢¶O$«¬`Î…p"Lì~öG#Ê>ë§šünßþÜú=<÷µ«R–é«z[ñï¿àkÉá—»ðvŸ¢Ü\ù[C 4±Œàª…p:u]Ã=³šÞ£R­Î¶Nþ«UoÄΟ2…¶oð{¯¹”µ/GyÊG}䉦–EýÎï-^9gÞç +·ãŒw¬áîÛËüâ×Ü¢—ãäVšÛËð¿ç{‡¦ÿdØ_7ÍÌÒË»nß¿#>1“Óv? }ì’û•„•›/Ð0 1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg Eïêiz<—6ÞH˜ÉHg$F¦I69 nÎ23Œdu©Œ\šŠ×ùöói&ßCœ·ñˆ.µi´ˆfÒ¢žÓÏó®ÞÖC›$mO0â\±Á_³rýܪ.‹õ’ÿÛ~[k¹V´”{ÿ’èÓ*èÞ3ñµ4SXhÊm#}¥pŸ.øÑÙ·™•€ø[d/^xªžâ”º.oÿ÷Û¾V¶_Ï[i÷hõ5¼-­ë·:rê¦Å£Ô´óz‹m¡„ƒT–c»>g\.1Þ´qå”ãÚßÿ+oײ&û5Öëîþ¿à”UÖíõ½BÖû&Z°´€Ü@ì-¿ÑÖOùè7d ~b[=«:wqŠÿû›ÓòôK©s´dß’üzÿ[»øŠwðyÔ¤—žc['— ‘%”JbR©¹xfqŒòÜf†î£Ëö¬þõ.—×çä G%/³ë¯Íwº8ÛÝfûSÖ,¿µmÄ7v7" Wv.m|«$€61¼ôíÐ(ÉG÷‹·äª¯ÐSO•ÅÿWKúô7-¼_«-®nŸ$7–‹~¢qöhD±¬ŠìXî!$$6e–íi=¹nÿÅ{[æ¾k°;ïïi×OêϳksWÃ"½ÕïV ‹x¢ÛÍ&Õ …o-¡ÆOuvÝN”$ìù·V¿®·ü¯óšR²ÙÞÞiuûÿ¦¯âËý6ïP´û4M`³]¸ÚÊÕc ‡9à—`¹ä|ŽqéšmÆý´}®ÚKåÊîýл{Éwµ½,ïø«|× ¶>$Õ#ñ ®¨=…ÃÌñ“qk"lxep o˜ºç•aÀ­RNRkþ¿ü–«ñ3nÑRïoŵÿ óªë—¿5}FÚxí®#[¥ŽXó…Èêë×=yö¬õµ6ºò?¾ß‡èkïÊ=¯ùÿÂE¬[ß2Ï.4·¶ö3DzÌÒ„>bæB0|¤6B±ÈÏ6¼Û^–Oü¶èšÜÊö…×DŸ­ßõêô5ïu F]}ôí:[Ktµ·K‰Œð4¯0faµuÛ‡$ç–zçÍËMíŸ+ü¼´ïض¶Kwý_ðNlxÃ[0Ø2ÿfHÚ´QOm²'+l­4q•ïùÎ%¼©ãÓNWÏìﮚôÕIéÿ€é®«°¤ÒN]5Ó®–þŸgmÃþß§‘®–dº‘¡„2FK¤˜üƒ¿pcËu©‡¿eµÔ_ß?ÓË·˜KÜ»íÂÖüüûùø£Yilâ¿[&[‹ŠmÖXŠ˜îã…‰;ù »!z‡p§OÞkÍ'÷ÆOç·ôÕÂwŠ~W_u­ý~= ¿É«O Ý½Íõ½Ìÿi¹HÂà!Y]@l¹,2Æõ.þÆ.;ò¯ÉMOk$ö¹›oâíORû2XÇgjnfŠÌÉs0ŠãËy&R ØÚ ›wöôÕEÝù+ýÝ­®~ó‘yþóýI5MkÄö2ØXÛ‹Fòú9'W¶´gÊK•Ý’ùÜ€>éÎE´Ô¥¾øo–ÚïºùÊiÅK¿ù_çøu&²ñ²uÛk}VÞÛN¶˜¬~YŒÌZO'{¯œŽU[®£ eXö~îºé­½_?=šùjì¾WõoðémüìuVóÅssÛJ“C"†I#`ÊÀô Ž¢“MhÆI@P@P@P@P@P@P@P˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#vân`’ ˜’heR¯ŠX ƒÁ›IîRmlcOàïÜKheÒlš 8äŽSm…7²±`›pW¨õ>´ÖË®Ÿ…ÿÌ],^ºÐô›Ëدnô»)îáG<¶èÒ&FŒŒVZù‡Dº"ÄVv°˜Œ6ÐÆ`ʈªå§*úÐS»»}À¯w¡é7²N÷š]•ÃÜ*¤Í-º9‘TåC9ŒÒ²ý~c»%“N±“OþÏ’ÊݬBþÌÑ)‹hè»qŒp8§/{âÔKÝØ†ÛAÑíUÛJ±…PåDvè¡NTä`qÊ)ÿ€ANïúùÿ›ûØYl,:.•Úü2Ê/·gí[ Açç9ßóu=}MM’\½}yº–£¶‚)šX $uTgT™W;A>ƒ'SNâ²Vò ‹M†-Jêü—y®cH˜9ʪ.pª; ±'ëJ˕ǿù[îÿ67º}¿¯ëÑ/‡44°{Ñt岑üÇ·¨#fþñ\`ž4Þ¶¿AlÛî[†ÆÒÞÌÙÁkV¤ä¤aS9GäçëD½í/wb´mqoqo¤ØC=ªypH–È­óò©*9<SEÚ»î++X–ÿHÓua—PÓí.ä·9…ç…\ÆxåIt=(^ëæ[ê¬ö‰¤ÛÉ4–ú]”RO"Ë+%º)‘Á܈y÷¡{©%Óþ®ìéšy(M¶cbÈ|¥ùI`äŽ8%€o¨­ M¿®Ÿ“`õÜ™§’„ØÛf6,‡Ê_”–Hã‚Xú€zдÛúéù6]ÇÛXÚZK<¶¶°A%Ëo™ãŒ)•½XާÜдV[[• ÐtäÒ›M¹·Këi¤‘nÑeó˜¹f`Ç==)YZ+·õ÷¾£»»}ÿ¯» ·ÑnVÝnt}>ajž\KdatÚ¹(öïïsuî+in…èmá‚#Çd’Q’I'Ô’OÖ“I«=iª*ÞhºUõœVwºeͬ8òàšt FSz»½Áh¬†Á¡hö×bîßJ±†ä ŒL–è® ¡wœ`AG=üýC·–ÃÚX=‚èºrÙHþcÛ‹T³x®0Oš¶¿@ٷܳg¦ØØ©[++{eeÚDQ*2N82ÌëCÕY‚Ób—ü"¾¦×ûKû10Ãö8öÆ7mÆ3Ž3GèÉàд{k±wo¥XÃrF&KtWл€Î0Ç £¿žþ~¡ÛËbå¼[AÑ$0Ä¡R8Ô*  ¡¶õa±%P@P@P@P@P@P@P@cã?øð·ÿ°÷þ†•¼Du¾ÿ–ÿ°mþ‹jÎ@éåXa’V¬jXã®Í@Êš^‹{ªi°ê7´ðM: aŽ¢$SÊR2Ç‘žG§l™»üµª"M(‘•ù1´1ŽÜƒG2JìvèŽjÛÄ·RY^}:}£Kö¦º&eˆ)"CL`㳓‚8ê|+ßÓoÇ¿o>ÏËPµÛQÖߦöþ—èZ—ÅzD)É-¬‹¿?c›÷i’¿Éûµ$3` 4$ïË×õ}=|·&ú_úùwùÏâo%´qt³¢;(k9•dÚ»ˆG+µÎ9Â’x>•—,%%Ñ7÷[–•Ú]ÿS?Nñ¶•s¦YÝÜ «f¸…fxÍ¤Ì ø¶aS9öí$5q´ùWõÿË}»¢Òþ¿±ªê¶ÚT+5ÒÝ21ÆmíeŸg$F¬@÷cÉùW'wNiEÝ&ºßðoüµí³¶òOïÿ‡ù–añf<‹½Ì³;Aö±ÛJÅcù¹l/ÊrŒ0pr1ŒñCj)Ë¢ÿ$ÿî»ôÙ&ÚKw§ão̹­gtdK9„®–éq»;zs´ñœÒ«zq›ë¯šWZN>—õýheh¾/ÓîíôØ®ç }w -"Ç †$’D ¾ ©=•›'#®Fu”R””vM¯»[-ìBvWÖ¶üËqøŸM–¦€_OGHtë‰ùÆPª㎫‘Þ³¾‰÷ýuþ¿à—k;_×—ùúì-$€E²Ã=œ·K1†`‰±‚•}±±NIÉ#+Œ’)ÇYrÿ‡ÿ&ü=;‹¥üÚû‹’ø»C‚kˆ¦¼)öU‘¤sž_È2á_nÖeUI#Ž $Õ¯Óþ ¯é}/°+è¿­¯ùj\Òu» YæK%/Òé,BÀ6v° •88#ƒƒÍU¯òùútÜWW±¡Ha@P@P@P@P@P@P@P@P˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³# eWR¬) Œ‚*XÓe‹OÓâ´ˆI²Ú»ŽãùžƒÛ è8â¦ÀEpþsÂ1ƒéCŠk•;lrOámSûM5¸†”ax#F²-:¡RLžf\á…=I«¶Ó–­4þæž¾¿ž¾A³|º_õíý=4óâEªë ©*iRÈ`X]5-4]®’ |êPüÇ©¯½­_wçæÁîšèÓûº.Ȫ>6m^y´{ù-í’Ó7ú@|´'aQæ­‚wpxùF*Ó|ÎOvîý|»-»ÙúƒÚËÎß?ëÈØñ_†¾ö§Í´òàWSå§Úb;±ó„Þ 8ÁŽpñYÊ7oÍ[Ízvóù/–).ŸwÏÈžÓÃÿg´Ð ûNïì`ï/n!hý~_½žý1[J\Õû§ø´ÿBm_3‡Ñ5çÚ•´«©xuÔ´±t 4¯ Ùó©R<Â$YÓ\–^žº$·ó·È¹;ëëø—nüÅÕÔæì¨žå%Tòøa$}yßæIÏmÊp÷9|›ÒôNÌ™+¦»«ztºù$©ôÁ6µ ÒàEm-¹oÞÞÈsœñžê\SR‹ûVü/þe_kt8ïø@ît«âÑÓF2Å4)×KX§³#n–A ó0$¥ˆìjÓ|Ño…­¼ïòô’j_×âiŸ j y.©o¬A¯qæ ‰M‘hYQ@XüÌ©$ÁÞyݜ䫕ã߾íÝ}ílþýGyIôµ¿¯=Ê“ü=cjqÚZý›ìãʶ+4Š!òÔLáÂÊÞ“#±w÷¹Ÿ{ùo¿¥ôó¿YJÉ/ëÎÝ®÷[~ѺðÅéÔ¥½±Õ!¾Ô·¬–†M’yB& ‡¯a‚9=*cxþ?sw;êŸÉ¦;+[É}ëg÷hÿBφ<44)®&7_h{˜ÔKû½€ÉæK#°äà”àv©§d¡ÉÓþ_ ;¹s=ÿàÿHgƒ´&Òt‹ˆ¦F†[™\„gbŒ|±&GT ?>½j%** ëm}ZÖýÚÚýlUíQÏÏð½ÿÛò½Š~–Ú,¿µôÕ{y§„ÛbI$…QAWÝò©1¡ †<ž4•¦Ýÿ½oûz÷õÝÛb6ZuÓñÿ-?à‹?„5 ô«m.mRÂâÊɗȆãOgWEB̾h`G ʃŠNòjRÕÿWvïùk¦ºV×KEÿÿwõ~ñË‘…®§ º¶‹/Ç3‡!8ØT€$cµ4í$ú.__wm1›z³þ¿1÷þšöläÕTX¸–Ú?³~ò)&V³ïÃ(óh<Œ“Žf>ï+ꬾI§÷è•ÿénûýßç¯ü¢¶Ó|fëPósöˆ"‡ËÛ» œç<çéMhšîïø%ú Ûy+èP@P@P@P@P@P@P@P@æ>3ÿ ûßèi[ÄG[áoøùoûØÿ趬äèjP¸ÖtÛk¥¶šò$™Ž–ïœ~Ò¸••Ô2ÊFA Š`-P@P@P@P@P@P@P@P@P@P@P@P@P@yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«97n|ϳKä­ØvtûØã­@Î^O.¡áxü9o§ Ommnn‘ÏúÒá¾c‘÷6qŸ½òb¡×j)1íPF©ÕT ù@¸ÅEFÕ)5Ù— s+œš½ôð­Õ¬æâêH Œ²\m -]°ìOMØÉ=ñ]t­%ÎßøRüôï·R!n_{¿ùßò oø‰§‹Lµ·†çT-!‘E—–b±’†9.™3½$e ÎDo~MR_¯Þ¾çº ­ÍÖ߯߶›uìmøƒ]Õ¬4(Ûéáu=FD…¡;$¹‡2"±ùHûãל`¹’jþïëðØ#ð9KúÖÞÖ… ÏkÚri‰¨ÙÚÛ\j! Øãþ=å¾Ùyd2ð!Š®ã» ZÏ‘u³ÿ5êþÏ}{ û±r}ü3ùuòÔ‚Óĺ¼s¬-a°-³¼rÜnsrñì8´_*ä3+&N2¸ˆ{Ê>i[ÿOžÏWÝßG?wšÝ/——möÛ±Ÿg¯kÖMn¦êÒòk‹‹ˆ¢iU þš‘|ÃÌ!°ã€T3×*ä£ê:ÿÛ²~šê¯åÑÔ´\Ÿfôû¿Ïõ5ãñ½6©.Š’é‘ÞÛ¼ÅîšÖCˆ‰±y™ |ៜãoNx—/ݹ®‰¿ü™¯’ÓÏV‡kIEõkò¿ü7üëkz­Æ‘á¹,¾ÇÖ¯·ÍicfHó HJ¨`O+Пƶ”yk8-•ßÜ×ùþ¾N"ýÎg½ìd\x»Ä‚=Rú×J‰´ë3swT-À30˜³e”e|µÆî§9A··ö­o›Küõî¶èSV—/mþëÿ[èZ¸ñ½k­¦…,º[]Ü4&+±o"Åu•Š´~a,߹㠹ÝÛÔ}æâº_çdž‹ç®®È–ì”»¯»[}ݶ×Bºø¿X‘må’;;{E"缫$¾sÄ@Øû¡V •fV^pXcœå+Á˺ÑzÆûüöѽÖú]¬ÚìÝþ[iø=ì礪[=Y€›Èîí|©4í;l #,O32o,d'œœŒ°dº·kßpï&¿ÿà%¦¯äEôO²oÖÍÿÀ»èm3_Öï¿©µ…ÚCl“½¥½¨³y§óDžZî>jŒ³Ã-ÔÒWåymýy$ﵟ¦©5¯D·û¿à®÷ùé”5ÝQ“NæƒO»·Ôæµ¶P-Ú@ ¤äMíÈŒb”£Î¶å“û¤—õÛQë¬|ãøÿÁûÇiž.ÕO¶»U³û,/ik-» yhÑ·‡/ÀAÁ HV;¹âê¾K¿9[Ë•7¯Ý¶–M1G_•ŸÞí§éç¡oOñºöPËy6^é/2IVì»8‘‹ËûÀIqƒ×­9®W(öqü[ºõÓGײëgÑßðþ¿à”,Z$f*IPIOº~žÔIY´‰‹n)±ôŠ ( € ( € ( € (¦¯¨E¤é7šÂ»CgÏ"Æb¨¥ˆ gÖ€$²»‚úÙ.-_|m‘Ê•*A!•”à«*@ ‚PôP@P@P@P@yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9:’,òªí ÇlŒ‘ô4¬€Œ’I$äžôÀÍ‹Ãú,3\Í‘a·jÉpël¦VûÁÎ>`{ç­+%^ƒ»¿7Q­á­¬Á´M4Ù£ù‹nmcòÕ¿¼Ͻ7­¯ÐKKسq¦i÷:xÓî,m¦² ª-¤‰Z0A´Œ``céD½çv ÝÑE¡iÛµ¼:UŒp<^KF¶èÇ’vŒmËŽ™&‹þŸ†ßw@Zmý_¼ƒ£ý®³¤Øý¦LS}7ÆI,v¶29bxîO­ ÝÕ]? ²µ…]I[©.—K²6÷”[¦ölƒ’q’rªsê¥ ÝÑ_ÕØ=w(ø“¶ý¸†ã)Êû-­äóh]ÇÍùÀÆF½O*m|ÿÇî)I¯ë±§m§ZZÛZ[Ãn‚;% nn1€»F ä¹÷5¤¤å''»3ŒTb¢Š·…tMP]½Æ›j·Wq4R]¤'Ã.Ó‡ žœT$–‹½ÿþeÝÞäÑxwD‡N“N‹GÓÒÊVß%²Û ÛŽJãð9ÇaMëkô\»:Œg¶œé6kDÛÉödÝ ŽŠ§(< :·ßpéaÒèšT»<Ý2Éü¸Mºn·C¶"0PqÂã·J­·×þó¥­Ð’ËKÓôô‰,,mmVea…P"±ËÀ$}M;°² :nå¤y/&3HÎrs€ @€%¤T}ø‰ÕßúÓú¿«dshšLòA$Ú]”læHYíИœ¶âÊqÁ'œŽüн×uéòª³qáíææk›Oš{…Ù4²[#<‹Ç Hɾ‚’I+]ÿ=Gw¸£Ãú*Ù}ˆiÐ8“ÈÉåî¶ãi½m~‚Z^ÝG I[¨.†—d.-ãò¡”[¦ø“mSŒ‚F­¯žþ~¡Ùv$}2ÁáX^ÆÙ¢XL JTFq”Æ>éÀ㧇®¯ú°-6-*…Pª`ÐPÝõ`’JÈZ( € ( € ( € (  ?È‹âû\ÿ覠 ÍoHž+—Õth÷ܶ>ÕhQxÀ œ”c€ÀbVŽ@‚Êî ëd¸µ}ñ¶G*T©†VS‚¬ ©‚ TôP@P@P@P@cã?øð·ÿ°÷þ†•¼Du¾ÿ–ÿ°mþ‹jÎ@]Kc¢Ý\Û°Yb]ÊHÏqY½†X}YE,þ!…UFI6 ?ïºZ^:öy8ãÔd³=|ÞkOsg¨jÐ]G­,qGi%»¥­ÔNd·BθxÑ’F+½ËDT0 Y $ðãX[i(ÚN©—¹’KXô‰£d:º¡Æõ1•#ž@ÆV iµË®sâsòç¦!é»ßý“úzŒ½@å×9ñ9ùsÓFôÝïþÉý=FM@å×9ñ9ùsÓFôÝïþÉý=FM@å×9ñ9ùsÓFôÝïþÉý=FM@å×9ñ9ùsÓFôÝïþÉý=FM@å×9ñ9ùsÓFôÝïþÉý=FM@å×9ñ9ùsÓFôÝïþÉý=FM@å×9ñ9ùsÓFôÝïþÉý=FM@å×9ñ9ùsÓFôÝïþÉý=FM@å×9ñ9ùsÓFôÝïþÉý=FM@å×9ñ9ùsÓFôÝïþÉý=FM@å×9ñ9ùsÓFôÝïþÉý=FM@å×9ñ9ùsÓFôÝïþÉý=FM@½¢È&¿xŸ\¬‘;ˆ>ÂЃÙ=@>žªz•ªJ¨1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg E¯ÿȵ}ÿ\ÿ¨¬ÞÃ:/’4)ðÛNèÆ}>u÷ψW¥%ý~¿uû=ž”þ%ý_Ö«sšeÆ¡§ü̸‹Œãø€Ço§áŒó)éV×õ¿~»¾oÞí†_×õ÷~W?ã]^âÇÇ—EÅäM;AÂÀªAƒ–p2¹ÏCÔûq•”¯Òß­ÿOêç+[[«0ï¼Wr‘êXéÒM6ÝÃ)ØÞüÀ¸8àpxolèî›O¤’ü¿ÌJÎÞiþ¥ÈüQšV}.þÝ#-å•ÄE"‘öík’~úò<ÓZ´»ßð¿ù{+ù_åý|ÉõNVÒ™­cžÖæ[k ¸¾ÝàÆXzIjãçùnÿÊzsy~}?ŠSx—ìºÅŹŠâïs˜­à€F yjF™w¸A'å8hƒæü~KoÍ?êÀÕ¿½ëùX~»âDƒÃòÝÚ £–O>(X %^0ä’9ã÷g{qJúÆÝlþM¯óz’¯‰¢ öòi÷É|-Ì—pb ûq…cË m>Ù~KÏåmTBÙ\¡Š¥¶Ô.£¾·¹?¾Û²Æ†EÈ€ÜoÞ”úõê1‚EÝ%»ÿƒ/Ñ-dZÛ$ëkýŸ}öíî†Ó÷BAµUŽ>}­ò²’}84'Í·ü6¶þ¬ [/ÇúëÔ’ÏÅÚ]Þ·ý• Ÿ8»Æ­æFrëÃ`mã¡ä¨uädƒçW^¢—»¿õq¾"×®4›á v$c–áæUVØT¨Î © g9äc½w“^Ÿ‹ckDýD»ñu­¦ùÆù­‘¥Arª›£Vf nþÛ‚GZJ[yÿš_¯Ü _ˆ—)ŽÖàGqir’Kå,6̱«–s&>c&ÞBdAè9'­í×ü’¯OËQt¿Oø&¥Ö©®”·óAp¡‚mƒ`óK1SÆì:ãßÐôi-n ­ô±FC5Üvkaz·EœKæ ¥r\ïÆ0êx' úñEÕ›è¿à¯Í~»jOëæ:ÃÄ–÷r€m.­¡xæ)æHÔŒ°‹¼Ì›å‹”´¶¯çò®Ò]]Š:WŠYàhæ³½º¸†?6àı+r î ÷p ãñœæ›|‘|Ý4~«×ôéq.i+uÛÒö_×N¥ëŸÛG[þÁ¶?ú-«9-x¿þE«ïúçýEföÕêöm}§Mmùnø*Þ„Gò¬ªÁÎ+¯õýh×tö*/•ÜÄ‹Ã÷ÆúÚYf#†Er’NqÐzÿ Åqà 55&öÿƒýo×wïsëí‹Ioý_ðÖÀñ6•,¾,¼¾6·ï¶?.3èÈÑ¡8À<æ28Ç=²A>—,“ëÿüÌ/ªò0›Â!!x:À„Ù )Qm˜‰C€s³;‡Í‚¤‘ÁÊæå+¶ï¾¾¿áéä%¥¼¿^…{O _ÇutÚ„ºÅÕ»\¬â²|²P>ØÎè‰Âœ/w$d£nêÿ‹ç÷íÐMt[Zß×õ±u´+èïméO¬³\7o+¾öÜ /Ý~?àÎE$ù~Jßð_ÝoŸÞÞ·ókúûìÊrxFæëGK-E55Ϙ×QÁhÏÌÌ]¾üg¡S‚0zcªÐ¹U¼­øuò¾»1ÝݵÝýßðÖ ¯‰‘áíÑl­3$ lJÆ\Hƒå–=XŒ“Ôc¨º]vÿ4ÿD%¦ß×Bfðœ¹y¤:ÛßV[ß²~õ6T¶cøÚs¸uÊÓº[yüï§è¾ëî+t*j> ºrf€êæóÎWyÞÔç†BÄ7bߎ0IÞ“Qjß×Åú±½S¹=߃âÚhn· ™®‰³ öžÃpòˆáJ=1ËDâ­åù믻üƒ[ß©rÓÃ×:}Älu¤¶,îm>ÊZ0NâÄ~¡ ÔŒp@%×/-ÿà]+lA¨xQîía†Q®»Û<¢Ý™æB>mÄÆrO—œŒãûÃ/™ssz~ ÙXÌŸÁº¥Æ¡$3Á¯;¬1Æòή Qä½\ýö€Ì´ Ôwé·É¦¿+~½Çåóû}OÃRÝÍ<¡5‹v–5ŽA¡utQ ÚUã`Àå»ü¸ê2µ]ÿà--ä#x[e‰³X5•†8cŠ5Xd>Iˆ±WA·²¾àáF0FmÊî÷Ö÷ý>ïóVÓ×ñþ¾C¬|2l.žé­õ[›†YD²KjÄË»$*Ò Ç]Ã3îò¸ôðÍ[ÜËÂò¬ñK â[¥»ZA—$»"gðDxHÈ–ÎW‘HŸYêî¯ò¿ßEß]èýÝ7·«Ûî7%ðÓ¶¯¡4:´Ÿefh`6d¤GiS´ˆ÷à…‚å5wi-®¢meRÒBè¹Ü8ü­ØñÎ@?4ÉꆊóÿÇ…¿ý„o¿ô4­â#­ð·ü|·ýƒlô[VrZñü‹WßõÏúŠÍì3¶¤@P@P@P@P@P@P@P@P@P@P@P@P@P7ê[èôKª¬1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg E¯ÿȵ}ÿ\ÿ¨¬ÞÃ;j@P@P@P@P@P@P@P@P@P@P@P@P@P@Cwþ¥¾‡ÿA4º 1ªÀóÿÇ…¿ý„o¿ô4­â#­ð·ü|·ýƒlô[VrZñü‹WßõÏúŠÍì3¶¤@P@P@P@P@P@P@P@P@P@P@P@P@P7ê[èôKª¬1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg E¯ÿȵ}ÿ\ÿ¨¬ÞÃ;j@P@P@P@P@P@P@P@P@P@P@P@P@P@Cwþ¥¾‡ÿA4º 1ªÀóÿÇ…¿ý„o¿ô4­â#­ð·ü|·ýƒlô[VrZñü‹WßõÏúŠÍì3¶¤@P@P@P@P@P@P@P@P@P@P@P@P@P7ê[èôKª¬1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg E¯ÿȵ}ÿ\ÿ¨¬ÞÃ;j@P@P@P@P@P@P@P@P@P@P@P@P@P@Cwþ¥¾‡ÿA4º 1ªÀóÿÇ…¿ý„o¿ô4­â#­ð·ü|·ýƒlô[VrZñü‹WßõÏúŠÍì3¶¤@P@P@P@P@P@P@P@P@P@P@P@P@P7ê[èôKª¬1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg E¯ÿȵ}ÿ\ÿ¨¬ÞÃ;j@P@P@P@P@P@P@P@P@P@P@P@P@P@Cwþ¥¾‡ÿA4º 1ªÀóÿÇ…¿ý„o¿ô4­â#­ð·ü|·ýƒlô[VrZñü‹WßõÏúŠÍì3¶¤@P@P@P@P@P@P@P@P@P@P@P@P@P7ê[èôKª¬1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg E¯ÿȵ}ÿ\ÿ¨¬ÞÃ;j@P@P@P@P@P@P@P@P@P@P@P@P@P@Cwþ¥¾‡ÿA4º 1ªÀóÿÇ…¿ý„o¿ô4­â#­ð·ü|·ýƒlô[VrZñü‹WßõÏúŠÍì3¶¤@P@P@P@P@P@P@P@P@P@P@P@P@P7ê[èôKª¬1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg EÏÆòøzò8‘ݪ¨ÉbHÀ³{ ì¼Äþúþu7@b}:.€<Äþúþt]y‰ýõüèºóûëùÑtæ'÷×ó¢èÌOï¯çEИŸß_΋ 1?¾¿@b}:.€<Äþúþt]y‰ýõüèºóûëùÑtæ'÷×ó¢èÌOï¯çEИŸß_΋ 1?¾¿@b}:.€<Äþúþt]y‰ýõüèºóûëùÑtæ'÷×ó¢èÌOï¯çEИŸß_΋ 1?¾¿@b}:.€<Äþúþt]y‰ýõüèºóûëùÑtæ'÷×ó¢èÌOï¯çEИŸß_΋ 1?¾¿@b}:.€<Äþúþt]y‰ýõüèºóûëùÑtæ'÷×ó¢èÌOï¯çEИŸß_΋ 1?¾¿@b}:.€<Äþúþt]y‰ýõüèºóûëùÑtæ'÷×ó¢èÌOï¯çEИŸß_΋ 1?¾¿@b}:.€<Äþúþt]y‰ýõüèºóûëùÑtWL¦ ÀðzcEõ¬1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg GD¬PåIR;ƒŠóæÿž¯ÿ}<ù¿ç«ÿßF€>oùêÿ÷Ñ Ï›þz¿ýôhóæÿž¯ÿ}<ù¿ç«ÿßF€>oùêÿ÷Ñ Ï›þz¿ýôhóæÿž¯ÿ}<ù¿ç«ÿßF€>oùêÿ÷Ñ Ï›þz¿ýôhóæÿž¯ÿ}<ù¿ç«ÿßF€>oùêÿ÷Ñ Ï›þz¿ýôhóæÿž¯ÿ}<ù¿ç«ÿßF€>oùêÿ÷Ñ Ï›þz¿ýôhóæÿž¯ÿ}<ù¿ç«ÿßF€>oùêÿ÷Ñ Ï›þz¿ýôhóæÿž¯ÿ}<ù¿ç«ÿßF€>oùêÿ÷Ñ Ï›þz¿ýôhóæÿž¯ÿ}<ù¿ç«ÿßF€>oùêÿ÷Ñ Ï›þz¿ýôhóæÿž¯ÿ}<ù¿ç«ÿßF€>oùêÿ÷Ñ Ï›þz¿ýôhóæÿž¯ÿ}<ù¿ç«ÿßF€>oùêÿ÷Ñ Ï›þz¿ýôhóæÿž¯ÿ}<ù¿ç«ÿßF€>oùêÿ÷Ñ Ï›þz¿ýôhóæÿž¯ÿ}<ù¿ç«ÿßF€>oùêÿ÷Ñ Ï›þz¿ýôhóæÿž¯ÿ}<ù¿ç«ÿßF€>oùêÿ÷Ñ Ï›þz¿ýôhóæÿž¯ÿ}C4¤ermÆ€@cã?øð·ÿ°÷þ†•¼Du¾ÿ–ÿ°mþ‹jÎ@ކ a@P@P@P@P@P@P@P@P@P@P@P@P@P@æ>3ÿ ûßèi[ÄG[áoøùoûØÿ趬äèjP@P@P@P@P@P@P@P@P@P@P@P@P@P@cã?øð·ÿ°÷þ†•¼Du¾ÿ–ÿ°mþ‹jÎ@ކ a@P@P@P@P@P@P@P@P@P@P@P@P@P@æ>3ÿ ûßèi[ÄG[áoøùoûØÿ趬äèjP@P@P@P@P@P@P@P@P@P@P@P@P@P@cã?øð·ÿ°÷þ†•¼Du¾ÿ–ÿ°mþ‹jÎ@ކ a@P@P@P@P@P@P@P@P@P@P@P@P@P@æ>3ÿ ûßèi[ÄGWá‘/Ú[ÊÈ6Ç>c²ÿË6é…5œغô´ÿ¿ÏÿÆêºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ 6ñ–³í·c?ÚÙÚr>út­â#­ð·ü|·ýƒlô[Vrt5 ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( 1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg GCP0 € ( € ( € ( €%´ÎŒö4žˆíþyÅÿ| -æöƒÿ<âÿ¾óûAÿžqß‹y€} ÿÏ8¿ïE¼À>Ðçœ_÷À¢Þ`2{èí¡y®>Ï Q‚Î u$ž‚•¼Æ?íþyÅÿ| v} ÿÏ8¿ïE¼À>Ðçœ_÷À¢Þ`Pðåܲè6ÓͶIdy‹3('ýkøcŒ{T¡—þÐçœ_÷Àª·˜ƒíþyÅÿ| -æöƒÿ<âÿ¾óûAÿžqß‹y€} ÿÏ8¿ïE¼À>Ðçœ_÷À¢Þ`h?óÎ/ûàQo0´ùçýð(·˜ZµäßÚúD(DqÉ$›Õ رŸooð¥°ϧCªø»SŽúkÿ&ÖÂÍ¢ŽßPžÙC<—!Ž#uÉ!“ž”0-Â1¤úêÿø<¾ÿã´Y€Â1¤úêÿø<¾ÿã´Y€Â1¤úêÿø<¾ÿã´Y€Â1¤úêÿø<¾ÿã´Y€ é[Wu'\½ÿã´=ÛØ<;¢O Mº¤±H¡‘Ó^½*Àô ‰yÜd˜´ÿÆ“ë«ÿàòûÿŽÒ³ÿ„cIõÕÿðy}ÿÇh³œñ”Z-Æ„ú]Ƨͪ[$…õ[©C!™©W©1ÎE = _j’ ãpÏ­ ûAÿžqß¼À>Ðçœ_÷À¢Þ`h?óÎ/ûàQo0´ùçýð(·˜Úüó‹þø[ÌÜàRRPRz+¶1^¤ð¤Ð}žX¤PÈè «Ђ:Šn-;1\Úüó‹þø[Ì ÏÞ͇¯¤ƒdRÎ¹ãƒØûÒjÈ Õ@yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9:…P@P@P@-§úñôoäiK`"¦@%ŸT·¶Œéq…±<± –X—Õ#$8ÏrFóŠ—¾º/ëúÙúuMm¦ÿ×õºõïƒãg/€â&ö9­šîß̸ÔÓrÿ¯]æT;pÎSåaq€ä—´…ío½|.ßðáòÊרçcÕΓ¦Ii£êVvQÍw4^[<6–3*ÇV ñÍÎæÆÕÎY\î*e)(¯$ô{¿yÚËwøhÖ÷L"—3ókå§W·Ï_Á’êž!—UðÞ u=m4û—ÓUàÓ‰Ø{påþu.ÙbÃä#=sZÊ6©hêÔöíi+yí­ÿɓ칻oßêÛýèí¼%=í½È¿¸ÍôSžÓjh…YHÁ ~ösÇÝ NT×ßçÕ|¿¦÷j;Ûú·Ÿü Ó7)áù¬¿ßŸÿG=JÜfPŒO€|­2 œ ø ©i7ûÇÿJEÃGò‘Æk—šŸ‡µµµÎë+ ½Ì™Ú¶Ï<qm¬Œn•lV ƒŠjM·w­â›ÿÀ¬þz&ûßm ÒJ1²î×ݷ˧•–äçÄzÕ¶‹ Õ®±a¬Ý ‰U ³ž;¯:!,ÌÉ|ÑŸ› ª!yf‡£Iè­«ì¯ñ~ŸF4¯{kµ—wÛç½úzš Çÿ ¼®uén…Ö™lð+y!oy™q„ã¯ÊxÝÏÒåçºíÛHëúv%»ò;÷üöÿ¿â_Õn¯¡Ööh2Ü]Ü¿h´‘3mÇS)Ç–ØÛ—8;¼³ÕßËúÛ¿ÜõÒñ.[.ÿ×õÎÖ:1œsÖ˜—˜´‘ªÿÈ{Eÿ®’ÿè³I€iÿò8ëö°ÿÑ·tžè z  ᵟÿmøÞøù:4žM•·ü„´Ïµ‘–›îüë·§=sÇ¥*J×—÷¾{G¨æþåú™jšÀ³×&µÔÍœzTR\G°„‘¾Ñpl©8"1œ`÷ÎsE7îÂO¼Wɨ_óÒÖ·Ýdãi8.ÏðØþÈ.¡€ê‘ÛÅ$ò*ÙZ$ 4„ÝJ¥š7P]6® FÁÉ!³‘”µ¤×÷W§Àž½Vú}ŸK2“ÖûjÿK[¿¦ï¾Æ×$¿´] ÒmFK«k½N"x£Q O(…@8Üî-ÓµuÏ㨟K~<×ùi§æÌ–Ñk»;jȰ 3âWúßÿØZ×ÿGÅIÜGÿ³}WúÐ÷@EL€8]Pøoþ\xÛì^`)ö}Œy>ZçÈÝü[÷çgÍ¿ìÒ§¶Ÿþ~Vëkmç~£žêÿ ¾[ë~·éc\ñ–©o©Þÿfêj±uÚÍ4O5»Gæ!e“ò6AéÏ åo;|¯(«;[£jßÐ4£ktüt}õí¯ùšúŽ«©é:Œº}î¿$ve­Þ]JX¡V´Wä“`£EÁÆãÉã ZönÖoçdš]º·²½¬N¶R]Rüìßêû\¤þ Ôä×Í¥¿ˆ´æ´G‰!W£_ÄʤȨ°þð’\Ž«•Žsž´åuÒZ|´ûô}VºyZÑ«>Úùßú]ÎÇÁò'è¿õãþ€+ª·ñ%êe ŠÈ³#Åÿò-_×?ê)=€×¦˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨P@P@P@P@Ú ²V¸»•!†5%Îâ“Ø øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@Sеý*ÓA´‚âú•L¤®r@2¹Ç·?ˆ©M ¹ÿ >‹ÿA¿_ðªºÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€§.«c¨ëúBØÜ¤Æ7”°^Ù©]KUñ^áêcY¼KvºÓ¬¼¥bm²Ýn<únpÿ OÂ_ô‹þû_ñ§tÿ OÂ_ô‹þû_ñ¢èþŸ„¿è)ýö¿ãEÐü-? ÐR/ûíÆ‹ øZ~ÿ ¤_÷Úÿ@ð´ü%ÿAH¿ïµÿ.€?áiøKþ‚‘ßkþ4]ÂÓð—ý"ÿ¾×ühºÅ>2мC} [éwðÍ2jÖ‡`uÉ|}>Ô®¥Þê–:m«}ºæ8<Æ[Îùê(}Îÿ„ŸEÿ „_¯øSºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]â]J»Ð¯ ·½‰åt¨Ï<ÒmX¢¨1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg GCP0 € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € óÿÇ…¿ý„o¿ô4­â#NÃ]³µMk¬YBÏgo ‘Ïm;•hÓ•u'Ö“ÿá,_úi?øsSÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉäøKþƒšOþ\ÑÉä9ŸÞÚ\XÙÅm}Ü¢ââiLQº*ù…áÀî¯JÒ*Â?ÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/share-provider.jpg000066400000000000000000000622671203611042400321160ustar00rootroot00000000000000ÿØÿàJFIF``ÿþLEAD Technologies Inc. V1.01ÿÛ„    $.' "+"(6(+/1343&8<82<.231  1!!11111111111111111111111111111111111111111111111111ÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀŸÍÿÚ ?ô »Û-V1{«$·©9ó-í +1ó´•È<žz8â·Qka6hô/ÛÿãßãUiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiw3'‡„ÞJxu% ”Š$ vÈ\â³EOâ•iÑDå¢ù~c¶è¿ô)Íÿ€Sÿ…gõŠÎ_Õªy}ëüÆîðà•"¹ðÙƒÌá|Èe‹'®lsW ±›´d)aêB<ÍiêŸäjÚølïd½½´Ÿç¶8,|üêÌÌ #O'Ø plÀËÓb'K³lqöxÿôWpJîÅoNÖðGý˜ÁÜýîTâºiS¿Æ”ˆ©áËû»é%·½¶òÞ1¹\c ? U ¡¬HRL5 Væ=jM'L±†êê+o´²ÍqäîRp|­“‘Îpó\Ñ““}“Kï-«ZýBØÿo_i7“ZÙÍjÑ$~m†œºçåSŽ™ŒÑ s-;µ÷ Þ;ö¿çþF‹ÞX%úØ=íªÞ7Ks*‰û¹ÏJjWv@ôÜHïôé.ͤwör  Ì¥ò¿{åÎxïéKZ÷óùÚÓîìuvÓ¯-®Ö3†0J®ú)ßK‡[Zˆîl®õpšdrÚhþ[\H.6ÈU”1*›pp3ÁaœT*žï3Úöþ¾ò¹]ì·µÿ?ò6SÓháþдK´$M2‡%€*6ç9 ƒŠÑÝ7ºþýÄ'x©ZŽMCMsr#Ô,ÜÚg :Ÿ'wsòô=jýÞdUµåêU°Öm_D·Ôµ9¬´äœ7^Fñä0$i8ãúU9(Ù6-ïn…»Ëí:Æ8¤¼¾´¶IÿÕ4³* ?Ý$óÔt¢ö—/Pé~…[-sL¼Öîôˆ.#7v¸ ¥×ç$BŒäíÇ”îöséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp0|ÿ³kW±¼’ĆeÜѽA2W9ÇLŒW•ˆ·µÔúl°‰-õüÙ¸lõŸµG ”Ñ\ØÌ†HõI¤Cï@ÆzmÜyFÿ-{ÝÖÇ'·Œ"ã8ûëKz­Ämy×Wp ˜•&¸ ÿx¼¡G^œ1žiC—Ú®]®w8JYsïfWñâŽÀŽdÿÙ+ØGËƧ™ü=§¶1ºÖ>à"²nÌkGs‰ñw‚üLfwÑ­­î‘Ýeˆ0ü_­z4±4íih*‘MÞ&—ÃêšGŸ}®‹e»™v,PDƒË\äå” “íÅaˆÄF~ìv&1°¿<9>¨|›mê[Èã eªÛʈmåÉûÇpp£ƒÀläàdW®WŽ¿—_Õ[üÍtJÏUÛÏ¡¨x7\¸µñtrYùóêÖâÝ÷ :Fwù~`zâª_£ü÷ù]~‚§îµå·Ï_óE=wÃ)»¾Ý&Ÿ{ra»¶žÕ’è,)m,»7Þg<•>Ç 7ûÄßó;ú=¾_Ö¤4ý›ŠþT¾}oý3ZÛÁ:”þñU‹[­¥Þ¡yq%³±:?Ý$ŒàǨÍc$ÕEn·ÿÀ¯øšÅ¯hÛÛOý&߃¹gÁ¾P“QÔ Ômç±Úì»h0@9àB `““Àã=Is5öüÌRk•>ˆ¼ y¨ø£Äþ[«m.ôÛ•Hš=—J¨+#r ëYSICÞþfíù3I=U»[ñæZÓ|%uˆüK#Û x/cm'OÝ‹iÆ9>¸©w•Gí7/ÇoÔqj3‹è’üÛÿ#+Ã>ÕáÔt»ÒÛOMÒX'œº2\–Àv’vñ»æÇ'¥\¦½úKÅ+zk÷"9ZJ;êßçùßð0<9áý^ëEÐu}5/&‚(î ‘,ü5wÈH`&H8ÁïŒc½K‹Z>°Šÿ‡ÿضӓ·I7ÿ oižÔ|5y Ðé3êö²é«h#2Æ^݃*Ŷæ3»ª‚~_»Ò®úÎ=ígÒÉ[]ß™ ìÉikéêïuÓËõ5tm QÓ¼mª\M¦Êlµ8à1ÍB”B¥X¯B¿nhƒ´e6ýo`’øZíoÅgöiô¥q‡öiô¢àÙ§Ò‹€fŸJ.ýš}(¸öiô¢àÙ§û´\VìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ9‚Áýš»G0X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓýÚ9‚Áýš»G0X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓéEÇcÎ)Ûýœé«ŒgÍ?úz°gÉg‡u{µÓlì,4·ºkk+wv‹ñä}æ‡ò¬ÜVíŒÓþÑÖ¿è_“þÿEÿÅÒ²î0þÑÖ¿è_“þÿEÿÅÑeÜûGZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYw A¯õ+9,õ «iF)¤…Õ¹ÈÈ/ê3IÆ/v µ°ûkRÒ‚ÛÃmH0ª³E€?ﺧï;¶$¬¬‰?´5¯úäÿ¿ññt¬»Œ?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]ÄÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö޵ÿBüŸ÷þ/þ.‹.àÚ:×ý òßø¿øº,»Œ?´u¯úäÿ¿ññtYwþÑÖ¿è_“þÿÅÿÅÑeÜûGZÿ¡~OûÿÿE—píkþ…ù?ïü_ü]]À?´u¯úäÿ¿ññtYwþÑÖ¿è_“þÿÅÿÅÑeÜûGZÿ¡~OûÿÿE—píkþ…ù?ïü_ü]]À?´u¯úäÿ¿ññtYwþÑÖ¿è_“þÿÅÿÅÑeÜûGZÿ¡~OûÿÿE—píkþ…ù?ïü_ü]]À?´u¯úäÿ¿ññtYwþÑÖ¿è_“þÿÅÿÅÑeÜûGZÿ¡~OûÿÿE—pí kþ…ù?ïô_ü]]Àæ|AáiµÍE¯§Ñoí§p›{¨>9'œqQ*q—S®†2­òÇo3;þóÿφ³ÿ–õ>ÆÎí:Ý—ãþe/ÁÿÙZ„7¿Ù:ÃÀÁÑ'»€¨aÐàÈ«(§£1­«V!ƒ]¹ðË¾ÁµNKDŒ6þ “€F9àW<,Z“´¯£Ýo¢íú¿ÄÖKÞ\º¥ºëµßŸšéfdÇâ­OÃú׎|M£Mg{0érÊn¡m×*ñ…v°ØNâyϦ+[û8òÉY{I/Ç¿•»kò×+s¸YëÉ×ÊÛÿÃg~&_hqßÞé—zeìv_gw°K ™#“nD—*Þ\O’Ø ½îqE¹j(ËUÌâúmÛ»Úÿ>ÿÖÆýÿ¥ýlZoøŽçÇÖ“¦ÚiÙÚDV×RÉ?˜&òYÈ)!Ÿíû£ŽsS~Js©=¢ÚÓË›ü·ü; ßöj;Í]v½í÷|%ñÄ:寉t4†ŸNÕgt–;}2éMŠn!®[÷r>lÅiZ\²í{í­¯k>û/êó)+sG½¾[7¦Öí®ƒþ+ê2ÚøóÁÖr^j°é×FçíPéÒÜ+Ê©_–½°}=ûf±§­Y§‡O]®ÝÍ*iI5½×èbè^(ñ߇´ÿ épGs{­Ý]$?ÛÄé…1yŒAËr Ƥy§%ONnK¿]D¿VÉ|±Sš¿/2KÑÿZ~ªÆ•çÄO[ÚøŽçìÚB t¼„Å+¹ýi÷-»•b{úT¹ÅCÚý—'=_›‹sö}mÁµø-L]OÇmá¿øZJ³žöãO´{yU&F"]¾Zʾcª¥ˆíš¨ÅÁÊŠßEýÍÞÛù%ry””*=¹üV—Û~¯cgWøŸ¯è6:³ßhít"H……ói·6I#¥&ÉùIÏ1ÇZI9Z+Fä’ôi»þùýíi¬¶JîÝ,íoÄø·yã=+ÖÍ­XÂeÔm‘dÓ šÝ²Û÷+~ôîN¸Ï< fœmõŠq]_Ë¥®¾û¯MDßî''ü·ÿ†¯ùéêZr^Gh‹©OÅÈÎù-á0¡çŒ)v#Œþ”;trÅ!…P@P@P@P@P@P@P@P@×Û€g–8è]‚ÿ:—%ØÒ}jï^¸sº „HÜÆ©c·±bOR9Àf¼jù‹‹´_àz°œÊì¦Ú機–çx–¹^g[¡ºÁS%Ó|Ow£¦%¶ŸåI#ˆîG줠öÀë]8\ÆRŸ-S øEx2ø†Ú"CÛÝ.=cùšï–:”7¹Ì°Ó{äñeŠ)cÈQÔˆóüGöŽu)á*ö/ÛÝÃymö² !‘w+Žâ½*rŒâ¥£9$œ]˜¦´$m1Kãøô‡þÂWÿúU­Ê;¯‡ÿñó?ýƒtÿýÕŒÿÌh»¨xÚ…ÕÔ÷v2°¼•f¹…næH'uÆáÊ3•9Ç9¬¢”l—G›)¶þë|‡^øÃWɪ¥Î˜u½UšEˆ±å€ ¸Àû¸÷¡««>íüÞì³MtVùo¾øNøÝý£M”%îÏ´ÅìñÇ1@–Ep¤ŒuÆsÏSU}oæßÍîĽÛ[¢·Ë±¯aá½#OÖ/5kKAíôiĆGmê€IÀÀ…/³(ônï×_óbJܶû*ËЧeà}Âxä²¶¸·H¦ûDvÑ^ζèùÎDü±Ï8ÛŠqn6·OÖëõc’æ½úþ–ÿ$^Ô÷ù¶÷ôùzo€æ¿ñOˆ5_Úé²Yê–ÑZGa ´Ê¨Ë2&@#^IBJ[ÉßÒÊÚ?Ÿ—â ÚqqÑE[ñ¾ß¦¦Ùð/‡¤¶¸¶ºµ¸½†æ!Òöú{ á|Çm¼€r¸ éN^õïÖÏî¿_›ûÅu«tÿÓä†Ëà ϧÏcugquÀˆ0¹¾¸™”FIM®ÎY0XýÒ:šm¶ÓêüïµÄ’JËk[ÊÞ†îeh–¶ï;Æ™ÁžâIß“ž]Éc×¹¡»‚V,RP@P@P@P@P@P@P@P@PwE·À¡¥ Jж8 >î[åÔ&}Bâ/2%(…P¬q‘בíZ}VR“ßúÿ#?m(6‘ß>~kæãÐ/ô¬ÞYMõ×ȵšìA-öÐH»žCÙT ’zxæ²y]ìܾòÖ6¥®’û‰íÆÕ‚k‡½’+æPª7#æÇ?Qø×ý™V)nÝ»­¯®A½vô¤8âÚäýJ×3ÊktâŽíwü݉ÚÚûèRþɯü¿Šÿ!ÿhSïø °k½5$ŠÅ§Žrâ2ªÁ ëŒôÕ×G Ž¡X%oTrÔ«†¨îßàK>©¬Æ¡6w§–ƒ+žqÈçÓãù—2VùJXdŸ+w6´ý^ AA]I@øp8é‘^¥µhåésÍ$–îO-T…NÒrîÁTqêH-Ô{ÿ•ÿ$&û( $($ä“I´•Ø%r­ž©e{pðZ\¤ÎÇ9ÙʘßvÆ ÐƒµºÕVzù;|ô¨_bÝ ¯s}okqkòl’îC+´Ì±tùTž}(Z».×ü¿ÍÑ\±@¬ðµÃÛ¬±™£PÏa¹AÎ @88úaîÁ³*Œ“S)(§'²M»" ¸5 /-Ì·¸e‰ðFåapyõ¤¢âÚ} M=‰êFG<ðÛ¢½Ä±Ä¬Ê€»˜à{’@ÔÑÖÁæI@™á[…·2Æ'u.±–Š‚ uÀ$sî( ‰(ˆñÖ.‡a ?ù +¾‹´ÇWâfh¶$€>•·1‹ {ãtd|8©Î>lJ÷Ú’yÙŽÒsÀ8ý)¤]‘–Ÿþz0úqOA]‡ïOr_Šä ã8ô¥u°õ÷ÿóÖOûèÓÐ@LøÁšOûèÑ þE_ él6päÉùrËâgT>p5ÿ+ûßèiR·5[ßÃÿøùŸþÁºþ‹jÆæ4v5˜Ï6¼:­¬×ö~ƒPyžKÉü«ý0¨´™–R$‚ણnv).H~ªš¿³·D—­®¯—Òûku{½ ÑTMõkÓk_ËÏî²fLv~!6ÑˤÞê—·Q¼ w:mäf”ÚÎnº‘÷eŠ` {'îÞÛYëåÍ ¥³Ù6ºïmˆ‡NnêÿËÖŽ6=J+ Ï©k÷ZkÜÄoa‹OÔmî!MÊ4²<¬ ù{„MÀ_BsNɤö×ï²µúÛ{_­¯¡+š×ëeùëåN›kc{Ãö6ÐxâKÈbÖ„7:tÚK–»(v™C‰<ÀÀ IƒÉ#’hÒ’ë{ü­Æë[kßAÊÞã^}ÿ-téøÓøxÏã¹cxµÈ„Ú»\<ÑMr°ù&ÌŒ¬€ìC¿+òÀ`p1QEYYôRûÜ“_†ºiu¯TUW­×^_òÓõE+«yðÁu©ë6°¬‰i:ØÞÞ>帔þLŠIØ" ÌXtþ,Õ'w-ýßÉ_Ë{ßDõû‰¤®–×—ü?Oøc¹Õì¯/›]_îw·[m{uÛK•µøJ”Êf:åΪÖXu·0Glâ×»sÀÈ{m‘[¦à05\¾ÓÝÛ›ðæZYô·UºÝng_¶Ÿæüíº}v¶…ûÛ¬uíP¼^"KkQ&¼k&»möÆÆPŸùlaÎcîÖtì’‹Ùs}÷myÚÍí§5¹µ)ßu½£ú'óõÖ×±Ášf­w3k—ÔPGf«h$¸š/•¤œ)~FeyYÝ’ ù¹¡Åºm7i===ØÞÖÓ{ù^öÑ»—Jk—á»üúùvòµËþ›T¼ÓïïõK‡w‰~ÃÙIG0²L8ËÉ¿ž¸UúT×èJ¢ÑÉ9z]h—âÓët8FÕT:GO]zùÚÉöiœfŸ¥ªiÚÚKk÷ˆÐÚI©5÷ÚJ4Þt ¯›ÇJKGòãö­jÅ©ÉGmmÞü³ù­×e{X”×.»ëék¯—kuÞæŒú†¿u§ivðCâÚ×MXµGû<ñ¹o6.Æ#÷’lá“$äí$Ñ'Trû ÇÿnéºWå¿kò¯‰sÀòôóµÍ >¡uc¬¯‡õ â·ƒQdŒjð]\M³Éˆ”l‰"ÅÍž½+*œÞÅ?)m¿Äíªûн£KËÓoøc/ÃöñÓ Ôog׿´"¾±EŠIæ åànŒœ0É“q`pA<k¡ÙTVÙ¹ßÓÞ·ég¾ÚÚÆnî2^JÞ·þ´,üVÒd»½Ûj“4›»h—žËç…Ö>0Fï¼6œ ô„ªv»‡àÝ÷ÓDô¿Ë©³~êòoñZyŒ×­5=*âòÂ͵™tëjÆé彺6î|â좰;#•FàH‚÷Ñè“vßùceé{êï·{dŸ[+ýûùz/ÈO Yß6«á›ív=a¥ŽÞîØK‹”„ëåy¨ s! àn$€kHé'ÝÆ>—Ióy__¿beðù)?¹íçnž›—ü@|Cgâɬüö–…5D.Ë.BDÐ({…•öŽŒÊ{ŠÅsr»n®—Ÿ6©ÿÛ¯¯m NËm/ÿ€Ýµÿoh¼õ9æÒuñ¯Z%ìZ൞óäGq€öˆcž2²·àDZ­¡Êª]mw÷~ö߃_z3›r‡›_‹Jæ¯m®Ï‰uI,S[MB[ uÓ^Énœ<¿ë—•ÈãñQKG§ó'®Ö´oå²~zi©¤íe}¬öÞý?­»ðÜZçü&ÒIªêwñH.g mýŸvÖòÃóyx›Ì6ê6ì9­‘ƒÉ9t¾–¾·óý4³û³ôù~ZíúõùukýV BþÂ8u†šmbÖ[w† ^%¶ýÎÿÞ±W"L©#©ÈÁÍf¯Ëëžÿt­ëº·ž ž—óJÞ½}b5ñÓŒpͯ:¶ßMþùYIŶõ•so"B¤`à ­]•ÒÙkÝëegÞÏ_‹KüÚîÛü´ÕiÙõÚÚ_È“[µÔfÐg´Ô'ñª­¦2éÆÚÒòÝd”¼›„É’ù åçFI5Qø×~hzYZïµïvú­´^^÷­úyÛ·Mï±ØøîÇϹðõÓŨ_‡Ý·~·¿^×¾—Û¨Nü˽ߥºÀëkßSQ²Õoµ›‹\k×I%ú4—]@°(» ±°16Ô‰b#åÉexçE_’ÿ?;Æ_5ÛM;5î•UÛšß×èûÙëë©>»o¬Z›­*­%š^JÖ·™Ô.¤ʈ¬¹‘]w|;¹UÚGÒ“‚}Rvó÷¼••·N÷ír•£/->Zkçò_ä-­¿‰æðž§¨Í.®š«›dòßÎù!1Û™Ìp«.[>gÝ!ó¸)¶ª¢¤’ÙÉßÓšVÛ[m·Mî’FTï³è´õ·çë¥Î›Á–—á«ÛkFöøJî±™ín¬äJ”‡iO9!‹wÀÆ8μ\©r­ìûyÿÃj]7ËRý48@¼B¿¸²ÄV—–Z-²Â-ÔdÝ'›¹@cûÀ_™0xÖÎK›læ¿ðv÷_}覆BTuå}¥÷ëk?ÇOž¦÷†âפ—TÔµ¤3†µ:}ÛA,?7–¾a·Q·aÈElŒIÌRÒïm}oçø[K?¹Nîß/ËËñ¿_‘‰á _jGE:½ÍÓG ¶ž-qnvã9·œ#®ÇVþðd¯Èÿö¾ÖôÙÅëå«5væËóÞÿš}6èeGgâmºMî©{uÈðÇs¦ÞAöiM¬à6ë©vX á¶÷¹Ò~ííµž¾\к[=“k®ö؈tæî¯øü½l[ÓcÔ¢°Ìú–¿u¦½ÌFö´ýFÞâØü£K#ÊÀ¿—¸DÜô'4ìšOm~û+_­·µúÚú¹­~¶_ž¾Wôé¶¶ vÆê Búï@O#ÝXZ&q{!1¬Ž' ¥Þ#9Š¿'aÜsP®¯ÞïÑÅ%·šÖÚÛubôѮҷ®½ÿ é{ 7©km£â=CJ&ãÒËPµ•fÛ–¹šrŸëHfm™8'€*j¦á%mytí»½ú_d¯Òá ú]_îéúÛ­‹×¬ÖðE¦ Úµ¤L#Šê:Îqjçaþó†8éŠÞ«RÄKµŸç š¥§uú•´K=¾±qçë>u½‹.'‘rYî<½êÇ O+"L‘òî¬]Õ/{{¤íÚѽº_}W[Ûw{Vö‰/‡_ϯ[^ÿ-ú î(š{ z ¾Ó–ØêsÜÇ+LÒ™H†hÊ”àå3»m\¯v×¼­éÉu¿÷–—×äGÙwì¯ë~=m¦Å]?¦Ÿu-Ö¥¬½ãB‚þÑtëÄqûÔóZ^GŒ¸O3h€.weG ƒÝ²þ[®÷[ÿÛÛÛ›]“±R¿3¶úÛ·——¥þ}MÈ,ìWÅ:£iˆÞÍ-®"G¯Ë,»ãe,‡pRòãaÀô“pæ~Jß.küõÒúöI¤—Í/ÃMm§~§o¦Ý}»O·»û<öÞ|k'“p›$#;Y{0î*¤¹]3›ÕÐRùØ…T`I=­tÓvŠ9*|låeÔãÔ[Y,NAt8’olÿÿãÇÚ··.ûµØ«¡C¨ÙipÚ™,ò¤¹Ê?¶ìuè Å7%{‡+4‘5&é%ýðÿãS·ÈÅhµ%ÿ––?÷Ãÿè9VKG’äÜ^H‹* X^ØhÎIÎO^½:|êÖFY°¾Yn–Æè¢Ý°% p²Ôü'Û§¡¡è®¶&Ɖƒ©\F—†?äZÒ¿ëÎýVSø™Ó…}ã_øò·ÿ°÷þ†•+se±Ýü?ÿ™ÿì§ÿ趬gþcGcYŒ( € ( €#žnRâ(åUepCÊr=Áƒê(ÙÜ<‰( € Š h-íÖÞÞâ…F4Pª¦šMr½¶ùìî:b¶‚8-âHa‰B$h¡Up ªm·v°ËÛ;[ûY-o­¡º¶”aᙣB§ƒRÒ{6¶§XYé–‰i¦ÚAgmvCo'' 0$š¦ÛÜ”’رHa@P@P@P@P@P@°C,‘I,Q»ÂÅ£fPJ$ÇŽ;FÚ‡‘%V¸Óì®n­î®líæ¸µ,`šH•žFÒFW#®(Z; {X³@<{õ+ãé*ÿè´®ˆ¿u•>&r~%ðlÏ#ê>‘m/Í$ýMÇÔvoÿ]m‹iú>ð|ךwZ¶¡¬Úß K]²ªøà¹TIÙ$-Maàh¦µ®û~?áSí<õîÀðžºÖ»ÿÇü(öžH5îcj~Õ­µD°Ðnï¤Æ[«ÉŒ‹䃎Ù8ã=jÔãk´Ná«]ïšæOõ×2œÉ!÷=‡µe)Ü ÓÆ¨©¸øfp¾ÒÇ¥¤_ú¢oÞgLºŽÆg6ç×Q¾ÿÐÒ’ÜÐï>ÿÇÌÿö Óÿô[V3ÿ1£±¬ÆP@P@P@P@P@P@P@P@P@P@P@PeÆ’Ò\I4w×™HfTT#8ºžÀVŠvV±œ©¦îDt‰‡MRëþø‹ÿˆ§ÏäO²‰^óN¸‰%ååÁFVòöGóAÇÝÌSRI[AŸi¸ó ¼ÿÈü]V̽”„ûTãþawŸùÿ‹£Náìäîp1ý—yÿÿøº4îÎDowsü:mØÿ¿üUìÙVF»g ýŸsÁõOþ*‹#¢i×6Úe´ãkCFØé rÖM÷b‘ÃøÉvéöËé¨_ü})­ÆwŸÿãæûéÿú-«ÿ˜ÑØÖc ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (¦˜ =(ÓÒ˜·Z¤!LC 0j„FÔÄ6˜Yã_øò·ÿ°÷þ†”-Ë[W†bŠK–óaŠ\i¶8ó#VÇîÛ¦Ee!£{ìÖ¿óçiÿ€éþ³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþæÞ2tû`ª Bø£|éÐVñÖø[þ>[þÁ¶?ú-«97n'†Ö '¹•!†%,òHÁUêI<Y¶–å$Þˆ‹NÔlµ;o´i·–÷d¯›o*ȹFAÅUšk ëkÈ.¥¸Ž 7=¬žT£mm¡±Ï^=i-Uÿ­ì;$œÔšM¤®Æ6 cžš X¤PÈèÀ«Ђ:Šm4ìÄ>€ ( í¯ä‹˜|ß3ÊÙæ ÛöîÛ]¼ãÓš»]?0Øž€ ŒÍΰPLÊ]c,7@ô˜ 6$ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € óÿÇ…¿ý„o¿ô4­â#­ð·ü|·ýƒlô[Vr[ñ\0O¡L—BóËæÊ/6T+"²²¦ÖÝ‚#iàJ„ÚÕ;_×ü Ê]W¯äqZ¤šõè…ž[Ëm<Í(7Pi—i4ä$b7–(]%‰?tíhÊâlúé§M·wïnŽÎýuÜ/ee®«òü|Ú·àÊ×6šêHD—zŒvrÌZ[¸´û½óIö{p®cÒUw* 3Œ7½¶Þßø¾[Y«­¶óKMµÛî·ßëÔݰŠY¯Þ r}nâå¡-&Š;«x$CË:¦¾ü‰9/µ*‹š3QZûÞžVék~7ò>Wí§®ýzþ–ù†˜³X|2‚ ;MKí)pÍÆë͉¾UvP˜Uy F@ aHëWY©I5³~w·Ÿ_-~z5ËÍÝ_ú]?®äzWöÈð7ˆ"ê\Fe2´3Å3)H*%f“ïÆXŸ§@ž±‡Gu}¶æÿ/Ãp…”ßoøçøìAâ[ VÛU‚ÞßSÕm,’ÙM¼éoy|Þvö._ÊsÊ`H1À(‡Æüš·§«Ó½Û×­û/°¯ç]?¥n·(Ç.±u’x~ãY›WK‹á3Lfû7– ªŠžgî‹òñ·žx³__NU~ÿgo;_Uù²þÓO{«vó¿—®»X’·}ž_°Ëâ(ô¡,$%ÌW­4²“ÌBËûøÐþïçPT6x ‘ZKGóvôÓ¯­íÍ¿ÜB½­ÖÊþ·éÓÖÞVê:+=Bâ=6çU¶Ö‘mµ!|éä’$k5“‡™Álu-œe©4âïŠÒ_>k«ôµ—øvé`vq—m>ï.¿¯ÌŽÞ-ru¶†ñr:Àº«LÓ.ÙÄ{¼’~P»|ܘ¾M»}ª’‹’KáÒÝþ^ý{|þÍ´Ÿ}}-uoøW¹¿}í¿Š,´›;«Ÿ±]¤s¹k§g…`?0É%°äÄ<üùäò ï'~šýêÖù5̾bš´UºéøÞÿu×—»±7ˆ4ÔŸÆ:eÄë©,Oi=¸–ÒI•QË!]ÞYÂŒnå¸àdä …ó¤ìÚVù^þ]U¿›²‹ìÿ¯–šþ'5ö»é×N¹Ö¯51^}×O–bgÃ(y‡æù¥äs…\ãi©>f¾$ånß —¦í>·N)Å}–—âÿY>Í;X†H‹ÿA¿_ð¥tÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€d!ðýºl‚òÞ$Ü[j.Ñ’rNêI$ýhºØÿÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èÂCáÿ<Î/-üâ»<Í¿6ÜçÆqžÔ]/ëúîÿá'Ñè!ëþ]k^aXç´E·$Âx’%xã‚G¦„ÒÛÓåÛð@Oÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQt?XÓõü‹•ž@¥Š <ÔŸJ.€½L1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg E¯ÿȵ}ÿ\ÿ¨¬ÞÃ:™õ(à’DhœˆÎÒÛ‘Fvîî÷?MÛvH43µ{ìÁ'ŽÜ•wf—æÆÀÇnwu9ÎÆON,]yÑJÊÞoòÓñòÛ]µ¥"üº½¥–”º†¯<:dÞêQ¡'%±ŒöÎ<€x®¨NñNJÍô!ÆÍÛ ¶ºÖ•wl÷6šœöñÇç4±Î¬Šœü䃀¿+sÓå>•£÷wþºþ¨•«²»¤M©2VÆMAWqµ[„2ŒçfsŒzt¦•ïnŸðºVóØÐ¤0 € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € †ïýK}þ‚iu@cUæ>3ÿ ûßèi[ÄG[áoøùoûØÿ趬äµâÿù¯¿ëŸõ›Øe­rî85Yá1‹‰fa…]ÑdDR„ìÚ9çpè´å±>´!šÚlOrvnûОÜÃê}+güYG²u×å·¥ˆûµ÷ÿÁüïÜö¯ÿÈ2_úìô¬%¹hÜ©P@P@P@P@P@P@P@P@P@P@P@P@Ýÿ©o¡ÿÐM.¨ j°<ÇÆñáoÿaïý +xˆë|-ÿ-ÿ`ÛýÕœ¼_ÿ"Õ÷ýsþ¢³{ èõ-ÇP”Ë*ºLJŸ1[û¤qƒ•펟® e*q—õýVì‡vˆì|9ek7žÍ=ÅÆðþl¯ódýÜÓ<Žþ˜(ÇÏúþ¿ÊÅÙ§áß·_Isö¯/~>_/8À®}«e+b·ü"_ôýÿ¿úôù‚Áÿ—ý?ä/þ½Ác_FÓ¿³-Z7ÍÜåó·o`=}ª[¸ËÔ€( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( nÿÔ·Ðÿè&—T5Xcã?øð·ÿ°÷þ†•¼Du¾ÿ–ÿ°mþ‹jÎ@‹^/ÿ‘jûþ¹ÿQY½†vÔ€( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € †ïýK}þ‚iu@cUæ>3ÿ ûßèi[ÄG[áoøùoûØÿ趬äµâÿù¯¿ëŸõ›ØgmH€ ( € ( € ( € ( € Çñ­õÆ™àÝrþÆO*êÓO¸šÚk¬lTàðp@ë@iZ”ÍpÚnª±Å©D…ÿvŽê0@ócÉ' 2J$wÔ € ( € ( € ( € ( € ( € ( € ( € (¿õ-ô?ú ¥ÕV˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³"׋ÿäZ¾ÿ®ÔVoaµ ( € ( € ( € ( € (Ÿøÿ$óÄ¿ö ºÿÑM@üY¬èæ »RóÜê:d¶¤G`SíÓNþ\%YÈ@ıÈc‚„†[ ©á›ÍN÷KY5½2M6ñ£FÍÒEî0çibTäe€ @5( € ( € ( € ( € ( € ( € ( € ( €!»ÿRßCÿ š]PÕ`yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9-x¿þE«ïúçýEföÛR € ( € ( € ( € ( €)ëzl:Î}¥Ý4‰õ¼–ò4d êT‘Fp} sþ'ðå¤:]³ZXÉ=µ²Kmwl…ÚK‹KŒ ‘œ—gÎÙ‹ ÈíPrä Í}?‡ìßU}¬!W’Hü¶˜)!e)å—PaMÛO"€5( € ( € ( € ( € ( € ( € ( € ( €!»ÿRßCÿ š]PÕ`yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9-x¿þE«ïúçýEföÛR € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (¿õ-ô?ú ¥ÕV˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³"׋ÿäZ¾ÿ®ÔVoaµ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €!»ÿRßCÿ š]PÕ`yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9-x¿þE«ïúçýEföÛR € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (¿õ-ô?ú ¥ÕV˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³"׋ÿäZ¾ÿ®ÔVoaµ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €!»ÿRßCÿ š]PÕ`yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9-x¿þE«ïúçýEföÛR € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (¿õ-ô?ú ¥ÕV˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³"׋ÿäZ¾ÿ®ÔVoaµ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €!»ÿRßCÿ š]PÕ`yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9-x¿þE«ïúçýEföÛR € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (¿õ-ô?ú ¥ÕV˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³"׋ÿäZ¾ÿ®ÔVoaµ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €!»ÿRßCÿ š]PÕ`yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9-x¿þE«ïúçýEföÛR € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (¿õ-ô?ú ¥ÕV˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³"׋ÿäZ¾ÿ®ÔVoaµ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €!»ÿRßCÿ š]PÕ`yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9-x¿þE«ïúçýEföÛR € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (¿õ-ô?ú ¥ÕV˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³"׋ÿäZ¾ÿ®ÔVoaµ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €!»ÿRßCÿ š]PÕ`yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9-x¿þE«ïúçýEföÛR € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (¿õ-ô?ú ¥ÕV˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³"çŠãy|=yHÎîUTd±$`Y½†v^b}:› 1?¾¿@b}:.€<Äþúþt]y‰ýõüèºóûëùÑtæ'÷×ó¢èÌOï¯çEИŸß_΋ 1?¾¿@b}:.€<Äþúþt]y‰ýõüèºóûëùÑtæ'÷×ó¢èÌOï¯çEИŸß_΋ 1?¾¿@b}:.€<Äþúþt]y‰ýõüèºóûëùÑtæ'÷×ó¢èÌOï¯çEИŸß_΋ 1?¾¿@b}:.€<Äþúþt]y‰ýõüèºóûëùÑtæ'÷×ó¢èÌOï¯çEИŸß_΋ 1?¾¿@b}:.€<Äþúþt]y‰ýõüèºóûëùÑtæ'÷×ó¢èÌOï¯çEИŸß_΋ 1?¾¿@b}:.€<Äþúþt]y‰ýõüèºóûëùÑtæ'÷×ó¢èÌOï¯çEИŸß_΋ 1?¾¿@b}:.€<Äþúþt]y‰ýõüèº+¦S `x=±¢úV˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¢V(r¤©ÁÅ@ÇùóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾|ßóÕÿï£@Ÿ7üõûèÐçÍÿ=_þú4yóÏWÿ¾!šR2¹¶ã@  1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg GCP0 € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € óÿÇ…¿ý„o¿ô4­â#­ð·ü|·ýƒlô[Vrt5 ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( 1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg GCP0 € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € óÿÇ…¿ý„o¿ô4­â#­ð·ü|·ýƒlô[Vrt5 ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( 1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg GCP0 € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € óÿÇ…¿ý„o¿ô4­â#«ðÈ—í-å¿äcŸ1Ùå›tšÎ@ì]zZßçÿãu ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЛxË?ÙöÛ±Ÿí ìí9}:VñÖø[þ>[þÁ¶?ú-«9:…P@P@P@P@P@P@P@P@P@P@P@P@P@P˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨P@P@P@P@Úg€F{ODöƒÿ<âÿ¾óûAÿžqß‹y€} ÿÏ8¿ïE¼À>Ðçœ_÷À¢Þ`h?óÎ/ûàQo0®¶)fHUTd’€(·˜ öƒÿ<âÿ¾óûAÿžqß‹y€} ÿÏ8¿ïE¼Àá<c¼ºåæ¯s©Í,z«Ã‹S¹<˜[#uP2Ìzw©Ô ÿøF4Ÿ]_ÿ—ßüv˜ü#O®¯ÿƒËïþ;E˜ü#O®¯ÿƒËïþ;E˜ü#O®¯ÿƒËïþ;E˜ü#O®¯ÿƒËïþ;E˜ü#O®¯ÿƒËïþ;E˜ü#O®¯ÿƒËïþ;E˜ü#O®¯ÿƒËïþ;E˜þ¥nšO¼5m§\j1Ãpó £›R¹dD¤²; ‚8ëGP;äo.Ø0D$¹2ƒØP÷¿h?óÎ/ûàS·˜Úüó‹þø[ÌíþyÅÿ| -æöƒÿ<âÿ¾óûAÿžqß‹y€‹u½C"BÊFA"‹y€¿h?óÎ/ûàQo0´ùçýð(·˜~"¼š8,Ö±y—°£P Rã#>ô­`5`! •ö© ®7 úÐÀO´ùçýð)ÛÌíþyÅÿ| -æöƒÿ<âÿ¾óûAÿžqß‹y€} ÿÏ8¿ïE¼À Î%!u%'¢»cêO MÙåŠE ŽŠ °=#¨¦âÓ³Çý ÿÏ8¿ïE¼ÀÌñMìÐxzúH6E ŒáÑ@+ž8=½&¬€½T˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨P@P@P@P@Ú¯FþF”¶*` É”måS쪔{F_¡ ¯<“d€0ù±†k˜¬Þ=ò8Æ1ÅD$Dƒ÷sEM+bee†"¯ 6°žƒ9!€dó 4éšâ}²=¾ä…J¨`b »yb8#îýi¢$-4Ë)ÄâB];(ÏõuïÏ €9/†ò×ÿì4ÿúOBܶ¬ O€|­2 œ ø ©i7ûÇÿJEÃGò‘Æk—šŸ‡µµµÎë+ ½Ì™Ú¶Ï<qm¬Œn•lV ƒŠjM·w­â›ÿÀ¬þz&ûßm ÒJ1²î×ݷ˧•–äçÄzÕ¶‹ Õ®±a¬Ý ‰U ³ž;¯:!,ÌÉ|ÑŸ› ª!yf‡£Iè­«ì¯ñ~ŸF4¯{kµ—wÛç½úzš Çÿ ¼®uén…Ö™lð+y!oy™q„ã¯ÊxÝÏÒåçºíÛHëúv%»ò;÷üöÿ¿â_Õn¯¡Ööh2Ü]Ü¿h´‘3mÇS)Ç–ØÛ—8;¼³ÕßËúÛ¿ÜõÒñ.[.ÿ×õÎÖ:1œsÖ˜—˜´Æx›þJ?…?ë¤ßúO=. wþ<×þºä(êTÀ(£[ ¯gfä,qß[ O&N™#?•FÒ:ÛÝN²²ˆQUXù“uã?À:ßš@<9Žê(L™ +¨ŠŠì|ç »ÉõëØÖ’+D2»†³Yý¼`F›¾z µL€2úö×üÍ}GUÔôF]>÷_’;2Öï.¥,P«Z+‰rɰÑ¢‚àãqäñ†­{7k7ó²M.Ý[Ù^Ö'[).©~vo¿õ}®RjrkæÒßÄZsZ#Ä‹«ÈQ¯âeRdTXxI.GUÊ€G9ÏZrºé->Z}ú>«]<­hÕŸm|ïý.çcà¿ùô_úñ‡ÿ@Õ[ø’õ2†ÆÅdY‘âÿù¯¿ëŸõžÀkÓÌ|gÿÿö¾ÿÐÒ·ˆŽ·Âßñòßö ±ÿÑmYÈÐÔ ( € ( € ( € ( íPY+\]ÊÃ’ÎçqIìGü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€QâF¥ÛÓ¯¥@8ø³HÜꉸt99]ÂY¤|ßñ4O›¯'š.€iñNŒsJ3““דùQtÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtáè[³Õ/ã†â]U¦T,È`„äô$Ê¥n3oþŸ„¿è)ýö¿ãUt ÿ…§á/ú Eÿ}¯øÑtÿ OÂ_ô‹þû_ñ¢èþŸ„¿è)ýö¿ãEÐü-? ÐR/ûíÆ‹ øZ~ÿ ¤_÷Úÿ@ð´ü%ÿAH¿ïµÿ.€?áiøKþ‚‘ßkþ4]Žþ(ÑüGñà ¤^Å9ŠYƒ*¸,?Ñæçôæ•õе cNÓ¡ŽÛ¸¡‘˜°ByÆÎ=?Àѳü$ú/ý"ýÂÐü$ú/ý"ý‹ þþÑ‹œÿ…@ð”èØÇö”xôçü=èºßð–iíDç¯'Ÿóš.€oü%:7?ñ2‘Žý?*.€OøIô_úEúÿ…@ð“è¿ô‹õÿ .€¡«ëZmù°†Îî9dût ´g8Þ)6€è/uK6Õ¾Ýsc-Œçüõ>€gÂO¢ÿÐB/×ü)ÝÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€Îñ.¿¥]èW[ÞÄòºaTgži6¬QT˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨P@P@P@P@P@P@P@P@P@P@P@P@P@P@yŒÿãÂßþÂ7ßúVñ§a®ÙÚˆ¦µÖ,¡g³·†Hç¶Ê´iƒÊ€:“ëIÇÈ ð–/ý4Ÿü¹©äò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò ‡ü%‹ÿAÍ'ÿ®häò œÏŠom.,lâ¶¾ŠîQqq4¦(Ý|„pàw×¥iaÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/share-provider.png000066400000000000000000000337531203611042400321200ustar00rootroot00000000000000‰PNG  IHDRÍŸ²a¶ pHYsÄÄ•+tIMEÖºdˆõtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝyœÕ½6ð_Uõ63¬ÃÀ ÈŽ[ˆ&jŒ "›¸aÀc|ƒKP1b¸n!‰ÞDcr£¹’Ec4ŠH"æ&ÑhÄ !*‚ƒIÄ öm`†™é¥ÖóþQÓEMUuuuOŸéežïÇvWŸ:çTõÔÓ§OWW Œ1²¹îº; :á‘Gî²ß¬œ5väˆa={öêׯ®](sû÷7¶¶¶lÚ¼…liÛž³×]wç—Ž;öôq'Ž3”ˆ$I*bGÊ”®ëD´~ýÖ·Þ\ûŸ>4£V`Œ™!;éÌ“=(O*ŠOê‰D²Ø('ÕÕU5UR$®®©úìó+^g3T5IDAT]cFmˆˆFŒb†ìî]ûSŠ¢´´Ä‹Ýa€òÓ«WM$©ë;bô ¢“[Z›‰H˜=ûŽI'ž1þ¸ÆÆÖ½{›âmñdR-vWÊUUU¸¦GÍ€}ëêz¾±êƒ¯¿"¢ƒj[¶mÝÛÔ„a,5ìÙ>ò™Å¹®µéâ+†×ÞÚª´¶*rJ!bÕQÈ|8'“j,)pgÊÍŽý;G>³ø²Ùç²áõÚ~Ô›Èh?1K rÞ:H¡mû…†=^°xß•³÷DDɤ·\CD‰F6¥pŽõ|Á´ OMLѶè²déã]D4Ì­ÁIDATíÂSŸ|4ï§æÂƒÍj¯¾1²Æ³²&‹aOŸÊŒžH1……c±ðŽfµWŒEÚHLÂ:s܈$”pKÊИšJ šLDV–ÊšLdËYIbî–z áZ=̽U¦}z`¿¢«Š­b½ú‡êVUׄ»j“º”,LÓ˜žt}Æ]¿ ¢ÿ»ýf& šf‚`ÝøæÝ¿&¢§o¸NOÉŠjºA^qÊÔL½XÛ‡"á-{âílÙ+3EÑeEilQ?ß*×Ö…ŽùB¿{ðÜR€âÐD¦*‚šÔ–oÙADgüÄUWhéÑåXl>´ï¶ï“¡Œ‘¡{Ö""¿ûï\IDATA "EH0gwc2«FÃ=¢r,¦6«±š°¬¨Š¢¤d%%+ɤüù§ÛÚ’&ŽìÝ;F Œ˜¹*£wÞYùÎÛ+ÿ¹võu³ož4é³™—^zæ£>œ7ïÇ<öÈ¥ß8Û¼ñ•O=ñÄSŽ;º¹VòäSÑ¥_¿²À+oU H07Wb#Aˆc k’tÕ ‘FºÔ­Ë·ì8{ØàE_¿Ä¼;ë©¿š!KDŠ&K:é‘j‘(‰Äˆ2tÃL׉‚ Š‚’"óc´¾™ahû¤ÚBz*¥&²¬(²¬$SJ2•J&åDJ^¿þà€úêÓÇ" éìIDAT2s– D/¼ðÌã?üçÅK4UyhÁý±Hèô gÑâ'QŸêX‹ÂëäÜåϯJ$}öÏ7|çò‡|¢_ýa9­.ˆbT{WÇZséáڵ﾿v͵³o̱³] Çv)Á«^©±ôhÓ:•€4UXˆBé⎛oüëûÉŠÚ‹fÌúÛÓVÈî¸ùF"Ҧˌi…$‰1c¢ PûxV¤X,ʈ„t3aRCÕ‘$ $P(,öè}dªª²bþ§(Š*+ª$IáDft#üa"ªíÓWe쇷ÿ,$Œ(eK‡C"Ç‹Nz៞\üâ‹OÏùöÍ 3|?Á•IDAT‚¯{ùÌY1Q¢{øó{~HD·~ç»É ïJŽìÒ×¼R“>:"f 4‰ˆt‘1‘H'¢ísçþÀ”ŽZ+d·Ï{¨.à ]'¢ô˜•Â!I‰Údz¢ IŒÒ#fb"‰Ïî'ÃH†a0ÃÐ%=Z¥‡#FT×4Ã0t2Œnd,:4å+;÷¼é//}nå›+N?‰™'DHbûcÏ<÷Ô‚Ç<÷¼éßüæ·z÷îKD=ô«——>GDW_sÃĉSÌ…_;<ÍûÞëÖý{Μ[ˆè7VÌ¿÷.ságLʴˤԫ¶–ˆöh”DA¤€U™Åˆè…WI¢;§IDATäYæƒÞë­•//}îÜó¦OŸ~ÉàÁC¬µÎž6þ…WxN‹Gw©À3QRÌÁ%K?-±ôð–TƒE˜ªÛ>ÁÚ2wΰ""+d·Ìc¯M`šj0" …$ÌómQÉÌYI ©ã Ž‘zÊî]ß-·¦Ô”,'Rr2©$S©DRN¤R‰¤œL¥’)%gŒûÖ¡vI¸ø¢Ëš÷ï¿gþ]ç¯ÿÏô‹¾1xð{µ“'L7nâåWÍèÛ«ÏWÎ6ˆæÎýÞMs¾ÛÜ´ÿÒË/H¶µ™ M#;fôÑW¼µbþ½wÝ÷ËGzÕÔÌúöÌ Œ›0Ås¯IR(‘ˆÑ„3ÜÊ:IDATÎ$A°Î¶ªZ½võü{ïúÝoÿ …f}{fϪš¯œ2–ˆ–¾üöyçŽ%¢ˆA+ÞYénî?ÿYûß·ß|×ï½iÎw—-{þàþýÇŒ°ÖZþü*2HgüP±ÈŒhKžŠR"DéÏ–ˆµ™õ:;ö‘ìÙÃ/8šýQCk/,µ¿Ë' ’5?+HB$b$æUÒuöîÀÃzÔ53 C× ]×uÃÐ5ݺk†aáhX`æ‹ >bøí·ÿøÅ–<²ð·/.]²à‘'F>ÒêGŸÞ}CÕQ"úÓ_ÿÖ•³Ã‘Ð믿²bÅßßyç ûB³ðÈ£¤ÔøIDATª¨@ôæ¯Ñ1G-UEˆhåÊW&O:Ky|«B×ä%Ïþå´ÓÎøê‰§HáP(]ƪêïË_$¢‘CGHUQ"zyÙs§'H^c<›{çí•DtÊ 'K‘ÐùÎ`šN‚`_1T+ՔŠª”0m)94FlY!=ÕT•Âá°®#C‰èÛ/¿`…,¥'>÷kD$2ƒÒiªJD‘ˆÔþ‘‘´éyƒ°`Ÿ›Ð#¸榵›ücGs"¥$“©D2•Hɉ¤œL¦R²œ’Õ”¬\Ý„Hh¸Õ°9ïîÛç›—_5 ~ÀOvÇï=|ÏÏ-ÚòÈŠQCÕ–¼øôƒþ¥WïIDATzá‚'~ò£»Ï<÷tsa´&jŽDCDd¦ðÙÓÚߤ¯^ó6F8ìüаYà{ó~xá´‹{öì‰Eìùb¯Êº»zÍÛ¤ëáX‡=›{á…¿µ¯h;S>ìZR:‚¶dЖÛ“!³Ddè†&HDD̘³ü%+d7Ξ=jÁJGíCgO5ˆˆ‘¡·¿„ÂÖÐXÓ9+‰$…BBzbB`¤ î¡+lXÿš-û›Ìé¹}º@VR²¢ÈÚ©'œG†!†ÁaîkˬýtÖÕæ¿G.zŒÒQûÀäscºÞþW$"±ö‰_ ÒãY!±Y¤>Ì’z_¢±¢(†„~²=‘L%Sr2¥¤dE–µÓN9ëò3†ëoÍm˜Ý^¾|éÆŸÏ™3÷ÀDtÛ¼;UYD í·ï¹ç·ÝöÝæƒM»›Ú·¡ù`SÿÃë…gμâÍ7Wþûƒ÷©_´èÑ‹.ºdܸñž{;®ƒYÕŒ_óÍ•›6o¬nНðõIDATѹg}-Z±w)SsÖÂ)çõì³ÏÔÕÕ™}?~âªU¯;¶ Ê„` í/„ŒˆRšˆ‘tç»+¬ÝpÕ5Ö°eÃU×ó‡…D´|ËŽGŽ¸ë”‰ºÞ>C‰„­úTE'ëüÙh4d;‡Œ Ñ#û'úÆ©*4¹Wìø£.~d*,ÑQÇ>nÜQgM3h`ßô42Qûwèô±c÷ìÞ} c&NœüÛß>|ÄÐcjëûF£‡BÜ~{Ú´é†n\zù¿ýíÃ?¿û?¸ý»ñx[8r>ýôqüî±?üaÑê5o_2ãÒá‡dº«Ž¹÷™½rχÎÝ6ïNJù=›3ZïXèÓ:@GÈÙbÍwä#ó´+"ŠË:‘XE†(¨ú0 #iˆ$ë”Îszès0Q¢p$Üñ kÔj~ gtÁžùÖ7‚;üí´Ï×–‘úÃ꯼âÊßÜ÷ÀQ#ÙòlIDAT>jP4RŸhåGvé(³c£ÒY߸µKËüßî½ÊÀ•Ò~­T0×"¢hûÙŒH0¿¤Õ>?Kf‹ésÈJ[bé3kAHNG$°£Ýö0.§CûÀ¾Æ÷V¯P_Û³Wum]ïbw§ðî‚'£„XïÂÍ{‚9vd”¸a^õƒówïí›k…šÞ”¸a^(2” tèú½úÔ†º÷)œ2î¸bwJÅg¿„æU?8ßZ"¤OÓ"ßadâ†yœu¼=N{õIÿ>X4Þ±};·>”™sÆÆÿ>S²lÓ~uȺÎ÷ÇŸî-HçÀ2Öž³Ÿ'ùœ.IDATöéæÍûŠÚ€Š2bDÿ±§}‘Ìœ …C}úÖ5½¿á‘Gî*vÇÊc¤LV EeªÎîøÁÿÂ1¡pˆ|~ ²2 ¦êLV˜¦35é¶ÈY€œ1FŠf©S4ëZ]Þ³9PufLÕ)*Ó|] 9 9ýªiŒˆtƒÉæÏÔ€œÈBÕÛ–ˆtƒ)*Óƒf,rÀ‡™ªÖ]s66×J³Ì [¨æ²„œp°Î%°“sœ+°CÎbžN`YÝ`ªÆòÍX¢ürV2¯¬ä•QW ¸ Fªkk†l'#$KΚ9eéÊ#‘IDATÀr4]”ÖÐÝ„{K YòÏYwÖæoðv!«9AòhA PÖZ›¶îÞòaËÞõË{üy‘þ_Ì© F¤¨Ÿnéé/#t^§æg­!§#‹­Ûær+¯íÁ÷H9xmŽîej1S‡ £Z€âQ’Wüenìà†a#¾Z—¾r¶¡ëDdh*1Y¶ ‹Ô˜HÅöìzÿÕù'œ9ïij¾°ó¤χ4½Sý·Ë-g=Ƕö‘¦}ÈéÚãÌ‘_yŒUƒÔfe±O÷rûŠHX€bYñ—¹_ý…úS~§6oÚ6ñ¸±ÿ#"b†Ê’[™,S•½xŒªbÃûö[ùñº÷_بöàêIDAT±ƒFÍÚ„9Wàù¬²þ~9kÆ{¸ç¾í¿0ëCyà”€V€R°sãÛ}ÅDý)s“oýÔhþ,øŠ§qô3ÿxç­g¾{ÁÜeDÔ¸sÝþ*ÉwI÷u jûâáÇœKD²ZàÈ2žu `³Ž:Ý^u²p¦”ÏONÝ€bùàG&MþNò­Ÿ­›(—_/ŒHÒ©GYýñú¥¿¿¦Òpø€/ôêÕþãªæœšjŸs "‘·îÝ»òõ_ô®=é[ËBU= µ!¦,Ÿƒåñ^Þs¢ÀSÊËb ¤$6î\·kãÛD¤¤Zz+›ùKnB9†4bà †= Vð7IDAT»ª¨iüµÏ‘ºÿJìeñÍF[3TÒ÷­-çˆ(6`ØÐº^5«?^ÿÏçžrI>¿ æ£T¾§Ðõg2x¶ØõÝ"jܹnÃò;:éDDT;àËÿCòÈ3|VaºÖ~ÃüÄJ׈ˆé:ÓDkÇ]rŸºíMeÓÁû0¼o¿†¾µÛ6¼<êóeýGŸ“ç–xÉ>?ëX’µ|÷æþ3¿¹ R[¦2ŽåÖŠöåH^€.гnèá']CDʾu”l¤PˆˆXrK6Ú‹éMû׳iëæcŽOÉFåÓ§sšs ¢±GyúÝ7ÿ¹dî”þ%ÅjrÜ‚Œr˜ŸÍ´0¿Dz†W‘ˆ`æIDAT¦ùÕ–k…뀼ÅÛòA$R³}Oóoþºôº/µ®ý|·þùSFÛ6ßõêÜ‹(%RñVU#¢†];g|ó¿”u ò˜sˆ„B“¿üÕ×þý·þzM¿!'ú:æÊªZθ•ʼt7o¼»Ö[ˆö¿±5tÍå×êD »Ôã|ÊýS¨Í¯ž9nêí}ˆˆhd(Ìú™ÛœéÓu":¬fãY½FirŠ”M™Vß¶í_Ÿíl¨zª;guƒ1×—*9gñ® ”%[Ú'$1Ò¯W§Þ¤·EÃæœ‹ïRû…¶Mæ´ƒq`ƒ½XÖ9SÿQ̯ÀÞÆhû-FšÁ˜AšÉn IDATÁ£LaSÉ9‹„(eÑhäè#uÄ æåŸ5l?ÑÊú EŸôˆ¶¹VQSz†ŒVMüÓ+êwØç»é`ƒºùß6½ÍÏjÞÖ$·-~¯‰výò’1DԦʇ ©öŠWrÎ@)›:uªycgã¾cO:ÚZO©šÁˆè`›b-LªŠ¢9éñ}ýh¯ìiÔ§5¡wÍä†Ý ¢4ðú®èú@u"jزyÏþ­²¬D£‘]DÃFëY9 %aWsrWc[J tY±µ±jpÝö½ñ&EÖ;Ö«:»{ž^Zÿé‰çžD-{dYñ™ø@Î@IØÓYÎÜIDATWuC’}i“mܲƒ|©*&']QeÊeΡãCÏ^ÈÝQ‹ˆš›SÿÞ´÷Ž#ŽÝ°.YÍ8˜%ä,”YÓ4I^qæ­ÿQæÿS­j]¯XïôxVÖ´”bQ"¥ZW5T #ѪºëH(šêuEÄ\=æ«þ³P|)%èHÖ“¬i¶5'’Z®+Š®‘/ÈY(¾”nt&ò´©²¢w&©¹BÎ@ñ)²|Ò º*d ]¥…–x2‡9‡´žURR1ÜH N úü 9 %!ÈhT…ÚÑjIÚªÄíËyM;TG£û†·ˆ«já~;Á ¯œ-Ô…¯*†0IDATøZ]°iœš°~Š¢X¿W¶¸îœÒ¬G……"J$êY‚2ëkbª+†˜> ’4ƒå7ç JoÞwÄÀúí‰6ÙヲBÉ3g u©­¿8¡g WK­çzÕàœ~œ­tv…¥è½êVØVN]ªŽ¢ ú¿ñDÄÃúDwlÞñè’w/ûÚØXúêÝD¤0#I"ñÙ7Ö××6Lüåý-RS\ɾNGF°Í'g‹þWÕeJp3‹Û¥Ü!ÐÅ8ý !AbǤ="¡ýbK_ù×ëï®W5-­Y‚H†hÎÁÍÐ&gúŰæöIDATÎÈçEÀ“–u¹c‰ÏZk°/'ÛXÛ³¡¬UÙ—xvÒ]­»iÇíL­gZ%Sa{C™ ø÷Ög‰g¯<73“\Ÿ©L[kmY79S Y›plu÷yð.ïjl‚lr®{Ïs“=II’àù_ßÞ±úžâÂ'–¿õþ§Ã‡ ˆl&:TX 𦋢×DDS¦ŒUÅî_üJóÞ݇÷®ŽF¤à5ܺ|Ƴöë{þÌ­ÏmÁ5Îz=YŸܵYK<‹e­Ê]¡g|ÚòáÓmÏM ß\ó©Ígïù/餜ž)Gÿ§Æ½[²þùyö!ÈÎñÿ‹rW•Ó~ȺÕAöFÖ=ë®ó+CIDATÙdëØÏûÐÎD”DÑU^’„ºšP¼¹í§~MŒÖ\zÑ”W_}Ë|(nŸŸŠ1),E(Ÿ¿aë[^Æ»4<úô[çOsêÉÇîj–%Ë÷˜ëg|ä9?ëùÜx– Þ•à‚¤OÞM MÏF­¿¶<*ñï’£¡‚Ô¤d'·%§§À:ù5¼ ÏŽ%é’ÏŠ·:×=¼°[À§»ÀOP˜ó’$Ô÷Šnøpã¢%«9ö˜q_92?Zÿ‰ ¿ôê?#ÑÂ|†¿k_ëÈÑF8$žrÜðº>Õ/¿²zÝÆ}³.Û*…Û”Œßz`#óõF ô{ ;ß ÓsÃc6'`›X$ÓIDATy4mÍ(¹HNŸ_ó2‡à=wïù‚ïÿ¬OnÖ“w—üŽ [SÓ]ó§[ØV$A”¤CÆ¢¡þ5¡'—¼õÞúí§ýÊqG VSjKcc¼µíÌ3Oë][KD’Ø>•:¾û¾W;N¿>¬~P}ß¶¦&%•Z×粋ÏzáÕ5¿\¸ì†Ë&÷íÝ£¥Mö¬Ä< ,ø¤páÏëÊ4d(ì/§:sm:§wžë–NFçǾÙ¢àS+î=_ØýÙ™'×’w—«©9×ÎøwÃó®Ïëv»(Ót¡O²v;Ènñ_×݇ •ø?”Ç“•µ·Á[Ì´s‚l£O ¹þÅú´˜ÓŸnÞ».ë]ÿ‡rê’ƒÌ#!ᵉä¦÷ÿ10öåÚÞÕþ+òl9¸ëÓuª¢~¼yw2Ec)¹Ã\-cæÉdAó³`çuA ic׿I3jÈú¥œ>çÚ(ôìs+Ö¬Yd]µs'½†l??þÁgÛûØßÖ®ÛzÔðþ?ºþkJ(¦jºý<3"’DEˆ‚ì™àvöIDATnt}ƒ®É¬à#—<*(¬\ÿÒ8†¬í=þAqܨ_ý÷Ì_.\¶nÝGë>i8㌯~aä "úëó+7mÚzh-×$¬`Œiè§} ¼jú„ž5ѵ¶¬^óAscc¿¡‡_>}ÂäñÇí‹k†Î¤Ž×'QÖ 3j³¶¬v£œ€’å8g@ÕXŸ^?¹uÆC¿_¶f톗_ZñÉȡǟHDµ«éݧ€MŸ=e\s¢å÷}í`ã>"9æØfN>¢~_\#ׯ-‘n( †ÁÌó‚$;rŠÏ#Έɂxó·Ïéõ!^òæ¦M›¶lÝID½ëúßtÃù#a‡B{IDAT‡4‹mÚº{ÐÀþy·ûè¢å)E}ö©ã­m5={œtê‰×Í<‹bá6U7ç1ÜT•D‘¦Jb„\£cOÈY(¾L‚iÑÙÔ‰_5hÀ}¿_¶íóÏÚš{×õ§ô¬dž3ïä¬$ Q‰mø´!ÞÚV;ð°óÎ<éÒ No3H72þ‚Ž®’Hºí´.CÍ~¡/ä,ŸÏ9ÿq¢QGúÉ-.|rÕ{«×ºËKùþƒ9ˆÞ¸îÃ#GÎùúÄÓÆŽÙŸÔü+4OIÖIB"rÊÿ5Y4¢ÞƒjoŸ;ýÉÁµçc{ù°(¸ç’H ¢ú!CôóûÖ÷m’µ¼siIDAT¬U)ç7Ä0oå!ȵ¯äxåÿ›4bPÿÞ=ªìåó»ø,IDÇqøÍß>_„¤ì"¶LqĦ¡!g ‚ÔôÓ&|‘ˆâÚ¡)Ò¼~Q„©SOj•5…±¬•èš’L$ˆˆ2 ¤„¤3t]ñ¾‚rŠÆ0˜¦iB.?ÏeOXSÞ?”+ŠÂAM73|/Ù0cºª’®&t=ÿßCÎ@q†‘L¤TEïßC\òÔ*""%i†(æ0°³Y9ò;ƒ;Ó {L›?¦À Ý`ÌÐu"Òu]OÏ h醮Z·%i¯-©r7œ€¢ GÂDtáÄUÅc´¨éÙ/‹…`É”IDATõþg;;ßC¿UÃH74"r„¬®ëf°jªnY3d¥HTìøE5ä,‡(Š‘ˆ‰„­%ŒºcÌ~^¬ûg»4UWS©ÎwÃ^3cº(†íëÅî¯öRXUÝÐUI’ª„¨µ8©2V GBј} ä,”GÈ:Éñ¸¬ª©¸\+jKþ¸Ì0r» l¡\9å dƆ¢11ÃaÇ—q‘³P¬A¤ÈRúM½$J±šhÿuWž[çYLó¸>·Ÿ€å Ûe M3§ÄpD%wš³P|fȲ!KD¡° ט·ô%e¬oߺ‡¶æ#éë&·OMØ®íKŒˆlSä…\KIDATŽ/ò²t…ºmêð¥øþ,”ŠJ½"(rŠŒÙÆ›9)Ò¬lγPLÖ»øÊÊrŠŒåø£†e9 EÃÌñl%e‰³PL°í³P•>Š=9 ÀW‡ï),Z´¸Xý¨TrvÖ¬+ŠÕ€J²fÍÖí9»¥a{—w Âa~€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾ œ³ÃG )l…å.·œ>bˆõ_gZ-z›(H7о-PâBÙ‹¤ 1¤aó6~]éJ³!Bt\OIDATPúrÈYOÖhΑ\îåŽ%æÝ¬kYË6o³‚Þ³*ÿæKUeªÖ*iq¿ÞX•¸‹ï¢ Rå³öÔ°'‘¹Äÿ¶;GŠ_åå‚WξòðQgÎ^ƒ¨à’³K3ZUu"RU}é£y4P.ò¼Î÷;¯-ð\>ê豯üá9W?MD,Ñpηž&ž?üÂy yw ¬å™³q]7~–çC'Ïxú/÷%¢K¯ýß§ý>1ºìŽùw Ìå?o`0ÃSÊ^XIDAT`ÆÃO®vÿû…K×ÊI%RIͲ‚y×þg€ò•çx6™ê¯I¡ÿ°ê†«ÆkDIYÓ¤õïÈõ#ïÚ½èöþ³ç7:V1æ_y2å"Ïñ¬¬ÈD$Ƕߴþ½áªñ¿zðy"š|ýjÇZPè†òÌÙV=š2„9×OÿÙüÿ³n̹~zÊ~6ÿÿ’‰Ö”!¬zo}ªcÖ‚™ÂæL@eèìïŠßzëÌL7:Ãöb å.ÏœMÉѧŸ|9[©h~•T’ÖáÇÀ¯¹:ãÌ ÷ø4Ór€ gÎ.|ì^Ò‰(‘JV÷ù”6IDAT°²U_øØðßÜ?·:VEDª»æêï9V´fc­»îʳ(#yæìÔQÛ>j<ÒõÞì@eÈ?g™Ž 8_ìñE!2°jð]=“¤FIDATZÛ 0Û PaòOFM ‘@$ÑÚ÷^'"ÚðнÌ)çý*HUÝðË`7¹²÷Leo€¥óŠyùfæ¬n'}¯½ÀgËæ¾»ô{Ô:®¿•Ó×msý’X'awWó®ª3}0Û5;ÓÉkëØ×Ê£†œž©€%ñ}kè& ö;Œ:“ Fíÿd0ŠÔô륧Þ~é»öb̆ç—y4ÚWì]ßb) ¾°»:3ž ™G”DDš.Œ-|柪ª%SÊ-W©éGD}â¯?÷ƒ‰ÓîY‰c8c"súÍǸÏZÝ> ô|ˆl×[(`‹îj}ã™6Ù±g<‡~™Zâ~ÂIDAT²9™j°7äØÿMvWâîŒ{!†´Ðtb~V‹è­[„ȵiMUÝ‘š!éûÖ…'1Á0¨ö¸ï1ÚñòÖZþ‰“é­ý¸ÍtLºWÏÚìW§Ž‰éŸbV"ØK¯Ö¿3žðç³Q™ö†;F=_92í\u,w¬|KÊ]þ9;å¶w–ÿÏ8óö—/UMÒ zâ¹µæx6™T’I9)«÷Ì›®ê‡ZñŸÃÏqÐz¦žOTåq`»«r¾:ŸÁkÈcèäÅÉÝŠýQŒ4:¯SgbýÃ7­Ûê¿ß0 úæù'’@Œ1ˆ˜ é:iº°ÂÎÕBÕœIAº‡ yIDATh\ƒ,kå>ü÷'W°3^5CÒtöäÒ÷UK¥Ç³)Y½ó¦iª‘s+AFRžã;ÇÌ`~5û¯Ëi”|“ón§ó™–w²E 欪KºÁfœ{1F$#Ý`ªè¬ŸIØ ŸðxN§Rú´àŸ°ejÔ>iŸ»Èµ¶€óÎY=¿ ^C®Ω9{+,CÅ+ÜxV—tÆž]ö/k<û홈HÕÚç 2½w¬äYÌ!Ó§.žK2}D–©é€µ¯6kI™6ħÏ÷dð‚ì(û³é¿»0F†n¥ãYæMù²@#ˆéÃM3‚ÎÏ‚¿9Šbñ<¬m¼‚£IDAT¨=è ËY‰¯,ùc$ígÕ LH&V°oCØ•Ñ!šwWËhƒÈú¦ ",g¯½ö¦BUPIpo¾po¾po¾po¾Jâ:ߣ('*q½˜l9ªì­ƒrT´ë|çw$øBÁ/1åSƒ½‡?byïœjp\» ¿š;sɱœV ^²òÎ;†rW´ë|ç÷ ÿƒ§3—M!¯«‰ó8V¹î²|s*lá[)òu¾Éë{ô™®$Íl×B´/!×÷‹` …Ýc”!²15%œ×q¯IDAT¥È×ùv/ r×=³i_î35á?%šiEŸÕ3õ6ÓApÚħŒOAªÊZ­=·+x Y÷$u|üwÆÈPšpïn'‰ˆçs2@)(ãë|]ùÌåÛsO¹äº®ó ÀÇ‘æ+ůr€rÁ+g_yø¨)×­AÔpÉÙ¥ŒVUˆTU_úÀhM”‹<çgßymçòQGýxåÏ™õ4‰óƳó‡_8¯!ß”·Ø­·Îtß¾õÖ™fÚÞzëÌ—,q¯e¿äGg.+P.òÌÙ”}úÉ—³•ŠæW9@%É3gç\q®u{ácCì]sõ¶œªÊ4Ý x!IDATtÅ,-T†Å*î÷ž‘³(È»`û‘fòØÇJvžïÓKçHÍ]&`šøÌ´””à}+£qz@ŽÁiÀµŠ;É‹óº*ÓäI“fͺâµ+žÇcÆŠÿÑë˜,æÖ¾ÄÜŠE‹›Ûbå2½xØ™ûÊÜo%²¹2ÇéT†v1g [gQ¶ÏV,ŸwÁŽùYwÙ—Ø×õ9‹¨è}¶Ó­nY±ÄÿIDAT[eÜ ùÏ´”/ÏÏ3ˈ#j6o ¾ö2ŽUð9ž•¶V|8>1—»?õ²/qDmч{îþ¸o;6ܺ홧¥°Q¹ãÒz±ô\âÞ'>U•&w2:–ØïZ·}ÊxÖÉr¶[ÈtR—ÿBû’L·‹%`ß< ¸ù%+Ó3åÞX÷rÏbÀægøBÎð…œà ó³]'§;Šœ-EÝáhìÛèpËM×» ]­>Ëž³%§;ÝaÝ<©°‚uÏgÙr¶äü¥b(/pq¿\á/Ù‚ÏÁøBÎð…œà 9 Àr€/ä,_ÈY¾bŽFIDAT³|!gøBÎðÕá{·wßóh±úP©åì¤ÉãŠØ€JÕž³_\¿ÈPv„Ù³ï(v*Ùÿf:·(v0ØIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/share-ready.jpg000066400000000000000000001020261203611042400313540ustar00rootroot00000000000000ÿØÿàJFIF``ÿþLEAD Technologies Inc. V1.01ÿÛ„    $.' "+"(6(+/1343&8<82<.231  1!!11111111111111111111111111111111111111111111111111ÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀŸÍÿÚ ?ô »Û-V1{«$·©9ó-í +1ó´•È<žz8â·Qka6hô/ÛÿãßãUiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiw3'‡„ÞJxu% ”Š$ vÈ\â³EOâ•iÑDå¢ù~c¶è¿ô)Íÿ€Sÿ…gõŠÎ_Õªy}ëüÆîðà•"¹ðÙƒÌá|Èe‹'®lsW ±›´d)aêB<ÍiêŸäjÚølïd½½´Ÿç¶8,|üêÌÌ #O'Ø plÀËÓb'K³lqöxÿôWpJîÅoNÖðGý˜ÁÜýîTâºiS¿Æ”ˆ©áËû»é%·½¶òÞ1¹\c ? U ¡¬HRL5 Væ=jM'L±†êê+o´²ÍqäîRp|­“‘Îpó\Ñ““}“Kï-«ZýBØÿo_i7“ZÙÍjÑ$~m†œºçåSŽ™ŒÑ s-;µ÷ Þ;ö¿çþF‹ÞX%úØ=íªÞ7Ks*‰û¹ÏJjWv@ôÜHïôé.ͤwör  Ì¥ò¿{åÎxïéKZ÷óùÚÓîìuvÓ¯-®Ö3†0J®ú)ßK‡[Zˆîl®õpšdrÚhþ[\H.6ÈU”1*›pp3ÁaœT*žï3Úöþ¾ò¹]ì·µÿ?ò6SÓháþдK´$M2‡%€*6ç9 ƒŠÑÝ7ºþýÄ'x©ZŽMCMsr#Ô,ÜÚg :Ÿ'wsòô=jýÞdUµåêU°Öm_D·Ôµ9¬´äœ7^Fñä0$i8ãúU9(Ù6-ïn…»Ëí:Æ8¤¼¾´¶IÿÕ4³* ?Ý$óÔt¢ö—/Pé~…[-sL¼Öîôˆ.#7v¸ ¥×ç$BŒäíÇ”îöséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp0|ÿ³kW±¼’ĆeÜѽA2W9ÇLŒW•ˆ·µÔúl°‰-õüÙ¸lõŸµG ”Ñ\ØÌ†HõI¤Cï@ÆzmÜyFÿ-{ÝÖÇ'·Œ"ã8ûëKz­Ämy×Wp ˜•&¸ ÿx¼¡G^œ1žiC—Ú®]®w8JYsïfWñâŽÀŽdÿÙ+ØGËƧ™ü=§¶1ºÖ>à"²nÌkGs‰ñw‚üLfwÑ­­î‘Ýeˆ0ü_­z4±4íih*‘MÞ&—ÃêšGŸ}®‹e»™v,PDƒË\äå” “íÅaˆÄF~ìv&1°¿<9>¨|›mê[Èã eªÛʈmåÉûÇpp£ƒÀläàdW®WŽ¿—_Õ[üÍtJÏUÛÏ¡¨x7\¸µñtrYùóêÖâÝ÷ :Fwù~`zâª_£ü÷ù]~‚§îµå·Ï_óE=wÃ)»¾Ý&Ÿ{ra»¶žÕ’è,)m,»7Þg<•>Ç 7ûÄßó;ú=¾_Ö¤4ý›ŠþT¾}oý3ZÛÁ:”þñU‹[­¥Þ¡yq%³±:?Ý$ŒàǨÍc$ÕEn·ÿÀ¯øšÅ¯hÛÛOý&߃¹gÁ¾P“QÔ Ômç±Úì»h0@9àB `““Àã=Is5öüÌRk•>ˆ¼ y¨ø£Äþ[«m.ôÛ•Hš=—J¨+#r ëYSICÞþfíù3I=U»[ñæZÓ|%uˆüK#Û x/cm'OÝ‹iÆ9>¸©w•Gí7/ÇoÔqj3‹è’üÛÿ#+Ã>ÕáÔt»ÒÛOMÒX'œº2\–Àv’vñ»æÇ'¥\¦½úKÅ+zk÷"9ZJ;êßçùßð0<9áý^ëEÐu}5/&‚(î ‘,ü5wÈH`&H8ÁïŒc½K‹Z>°Šÿ‡ÿضӓ·I7ÿ oižÔ|5y Ðé3êö²é«h#2Æ^݃*Ŷæ3»ª‚~_»Ò®úÎ=ígÒÉ[]ß™ ìÉikéêïuÓËõ5tm QÓ¼mª\M¦Êlµ8à1ÍB”B¥X¯B¿nhƒ´e6ýo`’øZíoÅgöiô¥q‡öiô¢àÙ§Ò‹€fŸJ.ýš}(¸öiô¢àÙ§û´\VìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ.ìÓýÚ9‚Áýš»G0X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓýÚ9‚Áýš»G0X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓéEÇcÎ)Ûýœé«ŒgÍ?úz°gÉg‡u{µÓlì,4·ºkk+wv‹ñä}æ‡ò¬ÜVíŒÓþÑÖ¿è_“þÿEÿÅÒ²î0þÑÖ¿è_“þÿEÿÅÑeÜûGZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYw A¯õ+9,õ «iF)¤…Õ¹ÈÈ/ê3IÆ/v µ°ûkRÒ‚ÛÃmH0ª³E€?ﺧï;¶$¬¬‰?´5¯úäÿ¿ññt¬»Œ?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]ÄÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö޵ÿBüŸ÷þ/þ.‹.àÚ:×ý òßø¿øº,»Œ?´u¯úäÿ¿ññtYwþÑÖ¿è_“þÿÅÿÅÑeÜûGZÿ¡~OûÿÿE—píkþ…ù?ïü_ü]]À?´u¯úäÿ¿ññtYwþÑÖ¿è_“þÿÅÿÅÑeÜûGZÿ¡~OûÿÿE—píkþ…ù?ïü_ü]]À?´u¯úäÿ¿ññtYwþÑÖ¿è_“þÿEÿÅÑeÜAý£­п'ýþ‹ÿ‹¢Ë¸ö޵ÿBüŸ÷ú/þ.‹.àÚ:×ý òßè¿øº,»€hë_ô/Éÿ¢ÿâè²îý£­п'ýþ‹ÿ‹¢Ë¸ö޳ÿBüŸ÷ú/þ.‹.às> ð´ºæ¢×Óè·öÓ¸Í½Ô œ“Î8©•8Ë©ÙCV„yc·™›ÿ ù¿çÇYÿÀËzcçGönËñÿ2Ηàÿì­B ßìFáà`è“ÝÀT0èpäUÆ”SјÖÇÕ©G¢ò3~&jGT·Ó§h »Ç5Ä „ƒ‚¥èOrkx.[œ']ðÿþ>gÿ°nŸÿ¢Ú³Ÿù‚;Ìa@P@P@P@P@P@P@P@P@P@P@P@%0 ( € BÁh &=â­D›•Ú¬G’øãþ=aÿ°•ÿþ†•kq×ÃÿøùŸþÁºþ‹jÆæ4ygÄjV¾0ñÄm¨k© ¬vËi-¥ô±Á`îotW)Ïen{d×=º{Ùó¥wµ®î¾åÛ¡¬ôšÓNVíÖújvWþ=×-5+Ø<wÖº'½×.õÝ7UŠ{¢^›gšÙ"™NJ°V$©Àän?^k8ÚT•Eݯš.WG$þó͵o[Ðõk›ŸoCm{|NÖ´­@Ég_-aÂ'p,Àž æ–_gñ]^ûJ÷¿§•¶ßÈuôçqølöÝÁ¾šú!žñF©áI5k«e²›N½ñ”¶SÇ$oæüøùÕÃ``ÁSŸj0Þô(Si~¿æÿ õЯ¤êÍ}”ŸËúþ»ôÚ·Ä«ý7[´Ž ½7U²›XtÉk§Ü¨…X¸º,byÚY@ë‘Û4Pýä¡ö“×m|»«õ ¾ädÖñéùú]tÄñMüš~–ú?†ïn!˜+H·ª‚# 9\îÆæ<`œ ÍMý^5_]>wá¯ÏË­¸þõÓDŸÊÍ¿ËOêÚ^ ñ§ˆumgM¶ÔtÓ=Ž¡eçµÜUÕ¤v’ãvÂÒ’²:2‘“ÛšèäJS‹é³ï­š¶þÖ˜ó]FK­þKtï·‘ÏüGÔoÄû9o5áðûËom¥Ks»í˜#l„õ÷a·¦kš<Î5mºµ¾åøKSwdé_fõôÔ—HñGÄ MCCð“A¥Í«Ï£}®iu (âF{!9ùÈÆKgšêÒu&ºF×·ý».®Ý:í£Â>í87Õµø][ôßR_øZØÓÄ&ÒÅt„Ö¿²ÍŸ•'Úvô2y›öçw;vtã=ë*~ÿ²¿ü¼ÛÊ÷µûí®ÅNñU;Ã7¥íÛ} k\x_Z×ì­´ë!©ßëéh÷P[\ÈŒH%åhDŽÌØà"œûR¢ù©Â Eyùü6üþäUUË9Iöã{}Þ—fÜß¼Gæˣ¬:•î«•õÕŒö¶ÒÆÜù¾T„>@ãnî§9ìj žPŽÍó_®‘¶«Öúz}Ó'È¥-Òµºjú|šÕÿÉãË¿Ùx»ÁÖ­ÙÂ×wò"›Ky£ŠUÚ„y±yß6 o—w¡ÈÎ)RÖµ¿»/N¿¥½qÔÒ“~qü­{ž©l³-¼ku$rN 4(¬ÝÈRIÛ'êi»_A+õ$¤0 € ( € ( € ( € ( € ( € ( €˜5Î&h’$(;vÏÔŠÉÏ[%»üËQÒ÷>Oùô›óOþ*Žy+ü?Ì9WÏüƒÏ“þ}&üÓÿŠ£ž_ÊÿóUßóÿ! ˯[Y‡âŸüU>y+ü?Ì9WÏüˆÚû}žQø¯øÓæ—ò¿ÃüÅÊ»þä6+•¸F(¬¸lØëøUÓ—7K%ʵ aéL&ñÇüzÃÿa+ÿý *Öã;¯‡ÿñó?ýƒtÿýÕŒÿÌhÖoh-}«^¾ž¯>³†ùšGa2€6“Ç *ätú7ŸôÊæ|Ê}VŸ"œ?¼5o¢ZÙÜ[5”f&·¾¸ŠeŒœìóÕÏE$Ø ¶Ûw%$•¾×a“|8ð´ÌÌÖ«=¹¶•’úáh‰$¬„82d“÷²!Sefºiø+/¹›V}¯ø»¿½‹qðëÂÓÇ m§IÃgöäÝÏkùæå\o_÷³N^ómõµþ[|üĽÛ[¥íóÜÈñ·Ãxuè¼+¦XÃk¢Ü•d‘̾R€ir9Ü{ ¨ÉûuZ]ãÓä¬&—±•8õ瞺ì±G4/ ¨¯©VF éQ(©&žÌ¤ùuG5ÃÏ Á¥®™•ÇØâ‘%†6¾¸o³º’U¢%óÉ<¡ïTÛº}Wßµ·íå°»®ÿwݱ­ è:o‡í¥ƒI¶òViZiY¤i$–F9,îä³rMÑG¢µo©™€<3Är>FX® Ôvïu3[¤¤’]`/僖'…ã^nç§Þý>ïµ÷~ÎÞA/{šÿiYú·ð dlªïíËÞN!Ióâ0ûún”C÷|¼¿go —¿{õßÏúîjiþÑtåÔÒÚÂ0š¼Í5êHZEÛïeX‘ƒè8ö¥d©ª}õú®ßqàýFžÞkïìªV俸–(AÂÆîUxãÅRm}ÖùiþH–“ûïó×üÙhøK># 6¿ñ4[²‰üÆÿUœíÛ½{ã4£îs[®ã—½kôØ$ðþ—'ˆâñÚçTŠÜÛ$þcq$íÛ½Iç¢>ç5ºïý|ê’}5FeÇ|?öÙ54¤{¿´Õ…îeKf¹Û!ˆ¿ÚØO~M(Þš\6ò¿nß!»MûÝwþº˜ÞøxûzoÃgs6­©}º8­esö]¿p¤¸F9ù€©§¡N1[¦ÝöÕÿÃV›”å'³I[Ñ“øÃ×6rÛ^Z\]¬²$¦K›Ùæ•]>ã$ŒåÐŒŸºGSëFÖkK;üôÿ%÷5o–¿æÄ¸ð‡®-ãŠâÖæVŠçíqÎ÷÷ :K´.á1}ã…±Àô£fšéu÷ï÷‡F»ÛðØè- KkxàŒÈR% ¦IF z³Xû’I¦ÝÝÄ•‰) ( € ( € ( € ( € ( € ( € ( ¦©­E¤_]MîþXEÎ;ÔÓæÇ'¢,E¨jk ÃÝiâ/*#"ÙÜGn3ïZYtd‘ÙxŠmH…SàÊã‘ùÓp³°_C&óÅÒA¥Û^<>ÒÌrz µO[p¾ñ4igeun¥Ó…Á=zj…Í}%÷E?´ì?AXAYËÔ©=iGzÚÄ‘™=U…sÊ|lsgõÔoÿô4¦·(î¾ÿÇÌÿö Óÿô[V3ÿ1£±¬ÆPMoI“Um)5K&ÔPe­Â”c9)œô9éD}äÚèݵÉîo­ín-`žM’]Èc…v“¹‚–#ŽŸ*“Ï¥ WeÚÿ—ù z+–(5ž¸{u–34jã 7(9Á#¨C@leÿÂ[á±w%§ü$:OÚb,¶Ç½6‚[+œŒséƒD}åxêÝÜÔ¸žkwžâXá†5,ò;U©$ð@µØŽúúÚ–êO-$•"S‚rîÁTqêHuQêÿÊÿ’ô'$($ä“I´•Ø%q°MÄÏo"K Š$F ¬§AESM;0¸†xVám̱‰ÝK¬e†â €Hp ûŠA±%ÄðÚÁ$÷2¤0Æ¥žI*¨I'  {ˆmÑ^y£‰•‚‚Ìp£žäïš:Ø:\ŽÂúßP·3ÙÉæD$x÷m#æF*ßFR(èŸu¼6mv,P@Go<7ù–òÇ*eÜŒdÈî ûŠ<ÃÈ.'†Ö '¹•!†5,òHÁU@êI=\CÅ“F3m‰Y€.pNîp ã°4u°t¸O<6è¯q,q+2 .ÁAf8žäõ4u°y’P;ÍVÆÉ¶\ÜÆŽ$(>fFØ™ p ãƒéBÕÙVWüµ¢».P}FþËK´{½Jî +hñºk‰4\œ ± i6–ãI½ˆ­µ.êÙ®mµ+9 H„Í,s«*Æs‡$ù[žœJoÝßúëú¡-]°êºtðàÔ-d„Käe*$ÎÝ™²@Ç\švÛÏoëäÅu¯‘r€ Žyá·E{‰c‰Y•v 1À÷$€©£­ƒÌ-ç†â?2ÞXå@Ì»‘ƒ ‚AÁqG˜yP@P@P@PSŠñKèo¨Þ[kע˕äKœÛ[=±­U%.fâ‰mlÌkÓÜèvúŸö¶œ‘Y°H\c¦zq×½H.^f¬ÉO[®±©ÜéWÚŸ…á MÅäb »’WóÊ~U´`šR!»ht=hôæðÍ’àÆ'`ÿE5{±·k¦¿=Æ…¯G£ÈXÛ¤žÜ“ü$ãúcð­b¹•ÉnÎǭ躾z\°ý¸â¬ß©¥ô4[¥X†SËì±AÃlïs¤ýÛÛk=|¹¡t¶{&×]í±éÍÝ_ñùzØ·¦Ç©Ea™õ-~ëM{˜ì1iú½Ä)±ùF–G•/p‰¸ èNiÙ4žÚýöV¿[okõµô%sZýl¿=|¯éÓmlox~ÆÚIy ZІçN€[Ir×eÓ(q'˜p¤ 0y$rMºR]o•£øÝkm{è9[ÜkÏï¿å®?”z6·màýbæÛUÖaŸ}ûÁ§ÇJ2Ò˰©y¼ä0Ã÷¸¨†‘¤ž¿ü¶¿Ý³¿MËvsŸÏò(j– ·Ñ>ßg>¾úŒ÷„r žv '1b<áyXö°òyÅ:z8'Ú7õæ…ý4½ü¯~¬Ó}žŸsþ½J×ÖZµö¯=©õÒI|%à ¨qáDn Mµ"XˆùrYGÞ%$Ÿ-þ~wŒ¾k¶švkÝÛQvÞß§ÜûÙëë©Ûø~Âæ]{M™ïÞÙnZ;V¹¸‘ä1´(~YXî#q|ÜtŠÎªs¡n¶—æíø[ä\- ·é§ü²·Ôí4+KkH¼Q Ì:l1éñµùi|  sÆÌùxßû­»¶÷®Že*ŽK¬•¯ü½~{ÞþöÖège´ö÷¯mïÒߥ´½îu¾;‡X¸ÕôÈ,QŽÚDU¸k'‘Í;rW¡Ùæs×½ë8$ê4öÓòŸëoÃÈmµOÏ_Ðåõ(µ&ÚÞK›ß­´Ó´7 ç\Háþ$ˆ.2ÁŒE¹_™ÁÉÜy¥MÝÅKªßÉ;íçkÛm÷Ô©«s8ô½½4¶ÿ…ý6б"j ,¦àø¬øi¤œÙˆMÙ¼åÄ~?~Ÿ·3ÆÚ^÷+_nÏ—k|O~—µ·Ò×¾£VçÓk«ýÎöëm¯n»irÊèºî¥àß¶ºu9µY-DQۭĉ?f‰›ËE!Nd 23Îà8$©Ê¬ÖÜ×ù)½ºíªêôì­4®ä—–—óV×Ï¿DÍXÁ}à{i±%´VÓ t.Äk2—$çqÇ-À#(ž•c'²íç–Þm_ç~¤Ó¿²’[Û¯ß×ðéØçàÒ5Í?C‚ïÃͬ%ýÅÆ ¢)䔢¡´E¢íRXFC0“Éæ¡Þ1Iÿ*¿­á{[gk¤•¾ýM#Êåï+zy÷]înü?Žò=I§Ôõ •hÑ–+» Ûc a²C\ÈìÙã![hÛÓžLCå£+yëòûüõ&’n¤oåëo¸å4µÕµ-?D“F¼ñ3G=½°Õfî—s´ÐüÑ;mó·4.Þ½«wª´þþ’¿šONÚÚÖkImò]|Zýß•ö·]îo_[êpx›ìÖí¯ÒòÙ,›pöŸbÚ¢_1òP¿úÞd>fí¸=+*~÷ÅÞ\Ý4³µ¿ µ½ï¡S÷V•½o×˽ôåÛS.»;D«¬êÖÖ1ÒÒæ+[Ý@ù‹u2æA$(pu qüYtùe-íäÓŠùo{õ×îsIsEmwú|ý-ÖþFƯe6¥¤x–Òú=~mrH®Dh†í-^0IˆG´ˆrP'xÀ÷¨”"û4ß}$¯oÓ—¥ºÜqøìß§Íuýo³ò±wÆ#Q>Ó‡†?¶WäŸþ~>ÐÙåÛ¿Ïûq»¾ßj¶›ª¯¶ŸúT>[^ÿ;õ"•??øëò)øB¹‰oís®ÝéÐ˧]Œ\ÜË&á3yÅ6òB…;¡ÁRVM7²“ﳂKÍ«½õë}.òé»âýû‰¼;ý©ÿ 5¦?·|ÿ´Ü}³ížÙ~Ɇò6oýÞïõ=?y÷÷󺪷½Û_ñ]må½­îÚÝlµ´î­émoÿ^o"¿4G¹ñŒî°ë®ÿ³¼©­Zs p|ÜíÊ)UÚFà1’G95—½gÝ¿“…·ózi­¾ET~êk³_;ÿ[èU×,µëkÙ,c½Ö`Ñb»˜G7•}{'1BÉóC*ÌË“6 fPx#îáFí+èìíÿKå{Z×Z¯Å»&ù|¿/óÞÝ~gO®D?áÐ忺Õä¹¶xäKë-9žU—ÊeÞðvƒ0#i °éÔ]Gj¼ÑÓ5é§èÖÛ÷ˆ/qÅí÷=ï×®ž~†=ņ¯©A¦M&Ÿå[ͱ¾[4*!3y«+FĘ÷F²d1$4 M8¥¥ÒÑ—£†©|Û·¢ 7Èíºº^’VoäÒõW~•†…©YZÛOgcpR÷[ò6ßIñé°`žà¡è3SGÝtÓÛ•?GÈÓ_==ï&:šªzz«þðo²7µû-f}c]¹Óf¿Y­ô´þÎE•–pDÀ¹í÷8lò“ØÖnêÞÿÉmÛñó¾Í]ÞÕ¹àžß­ô¿õ±È۽ūié¨ë>"–ÆæñVkx¬5;y—÷w’W…ÈCµv猓[iÍmô—çŸÍ÷·‘—½Ë~º_úÛîý $OÇhâcâ37’ÇBòÌçç3ÈSí[{ìòsçñ·v~mÔ©ÞéKâ÷oÚÖWò¾÷ë{r•._{ù}ï[Û§]ïËøô,íÕñ¢®Üî¾S,ä]AQýª?ÝùM˜BÄ‘0Êçr÷*šöëçxËæµù_nˆU/gßËÓ§{ö~÷âW‚Æ]66µ¸‹ÅqY¥ÅñœYµë1˜ÊM¹R¤’… ¡Ù¸üâ¡s{4£ºŠKüJÉïòµýÛ^Æ®ÞÑ·³zú[ú½µÛ¡µ¡i:ýÞ‹¬Ï¬ß_Úë&4HY®dH"qo U)hlñ„ƒ¥YFœyãÑ·òRm/F¿­ÒVÊšæ’‹½¬—žª×ÿêkøCTº¸Ó­u;Û{×}zá¥2Gg–L{¹Â©T#«¿¾jœy-O²oñ½½Rv·“%6Ó—¢Óîmy^îý­èu5…P@P@”Àäµ­&½jõµ-õ;y/%Â#m ØË:Ž•q“ŽÌÍ­uA¦ÛA¤ÆÑé~¹´~o.8Áo©Ý“TæÞì[lŒZóEƒVK½GIXõ ¬’ˆ|ÅÀÈ?{"¢X˜R\²•‡ÊÞ© %Í–º"œiO}övÝ~éÌmÁþ÷ZS¯+Á’Ó[¡ºšjE-îƒ4ï1´‰+ôù½«XÔ¶Ä´ûY¡µ¹7P¼ %Ã:«ã;v¨ÏúÏ©QNÆ©‘{Qr¬ 9éT#Ë|kÿVÿö¾ÿÐÒ…¹kc»øÿ3ÿØ7OÿÑmXÏüƎƳP@P@P@Ï7©qrª²¸¡€e9žà€AõlîD”P@!‚4šMY‚v1[Añ$0Ä¡4PªŠ8ÐU6Û» XKˆ!¹·’Þæ$šT¤‘È¡•ÔŒAà‚;T´žŒi´î„´¶‚ÎÚ;k8#·‚ Q TE€*›oVJIlKHa@P@P@Ë2ɒż,Z6e¡ ‚AìpHã±4m¨yP@6Xãš'ŠdY#u*ÈÃ!êî)4š³m; 4TB"Œ*¨ÀÐU6Û»%$•êC ( € ( € ()‹­Ë¨Er>Èn„[Gú¡3ÿ9þ•Å_ëß»Ûåú³HòÛS&MKQ4Ú€ú%·øÖ?í¿×/ùŽÐÃ3[½Þª÷Ä éÌá«OîñùVQvœ½¶ÿ/лiî”®¦øŽûì2¡†ý™b#«õÝý*i:Üòö?§ê9%¥Çý¦ãþzj_÷Å¿ø×Eñ¿×/ù‘h¬$šTÇï˜ç¬¡Cã¼W¡‡u9?y¿Ëô2’IèhÅQ—9>•Ò‘›d•DžYã_øò·ÿ°÷þ†”-Ë[ßÃÿøùŸþÁºþ‹jÆæ4v5˜Â€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € J`C,I÷Ó?4s§Úϧq\©>…¤Í!y´ëiûÏ'ó¨t¡'yE}Ãæh!Ò4ë`Eµ”†äˆÐ.*¸B0øU„Ûl­¿çŠÕŠìUEŒa(ô¨n”Àe1Yã_øò·ÿ°÷þ†”-Ë[ßÃÿøùŸþÁºþ‹jÆæ4v5˜Â€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € CÒ˜ ?ã@†7õ¦mÞ¨CšÃLÍP†·J`2˜,ñ¯üy[ÿØFûÿCJå­Ž«Ã1E%Ëy°Å.4Ûy‘«c÷mÓ"²Ñ½ök_ùó´ÿÀtÿ ‡Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ óoº}°U ¡|Q€>tè+xˆë|-ÿ-ÿ`ÛýÕœW×¶ºu«Ýj0Ú[ÇòÍ D\œ “ÀäøÔ ¥§xEÕ.Å®—ªZ^ͱ¤Å´¢PJä¼8<óBM¦ûÒ5( ÖhšweC,j£ 7(9Á#°8?‘ 6$ f¥˜à“S)(¦ßA¥wdS‹V±–+ cŸ)¨ãìÇc3(_Ó”Î*ÜZ“‹Ý_©7ÒåÚC ‚úî >Êk»·òà ’> Ú dœhì»é÷"85;)ì^õ.m£.¯+üŠ»«g8À}¨íçoÇa-v$µ¼·º’â;y7µ´žT£mm¡±Ï^=h[_úÑØ:Øž€#‚h§MðJ’ b»‘qÜAúQæEXõk95Y4ØšW¹…A“l.R<Œ€Ò´6;IÎ8¢>òmtþ¾`ô²}¯Ð½@G4Ñ[¨iåH•˜ .ÁAbp=É :Ø ¢7Á*JŠîFdÇpAéG˜yP@P@G<Ñ[Bó\HÅ,îìT¤“ÐP”ŒÁ³2je%Ûè4®ìˆ¬®¡¾³†îÕ÷Á:,‘¶ܤdzUÊ..Ì”ï±5!…P@ÍNð,¨eC4a†å8$vò4Ä”E:o‚T•ÜŒÈ8#Žà‚Ò0ò æŠÚšâD†(Ágw`ª u$ž‚€ }NÉ.b·7e–S ªÇxBûN:£<ã·¨¡k·õggø†ÊÿÖ¥º( € ( € ( € óÿÇ…¿ý„o¿ô4­â#­ð·ü|·ýƒlô[VrnÜmäd”8é\õ“tä—fi $Ž"ÓCžî/Grš…²Û莒$’Ý–OÜᔆƒòçœwÅkˆoš´£åo_{ïüµô"žÐO»¹Ÿ¤¯ˆeÖ,$Õµ JÒ@-J'Ø.¥IËO1\£ˆ”—óópÎs¸Ñ[ÚIùËîén›[kj¾øiò%åøßïý-ó7¼W´Úº¦“%ÒÇ<MÈÌ#áÞÀtÞÍ#ø‚ŸJÆ/•¶öŸ¯G»Uæj×2QÚ÷Wí{Yü¬þôb_˪­ä—Pëlo·}¨}ä’v%„'~ îQýÕPãd Þ·ÕÿÛ±¿®··KüÅ]ó[£Óçeú7Ö×"ºþׇS±]9õ¢¶Ïm™a¾‘®¢!wË#!ù˜d. çŽ0M·ÌҷŧouÛ^½6ëçq%h¥é¯Ï_éôÛ¡lÙÝÛhú"êo⠞ͤ»KrÓ¢‘íWØw¢ã&~÷4WJóŒ{iÛ}|»ZúZö4´Ÿ}}5þµØºšD÷Zƒ-'ŽöO´yLñIÎf\2sœƒÎ+j–uäúYþqÿ‡ùv¹º§o5ú˜Ãx†;%†«Åqf³YDw“½Æ&"¶ÇTECº]ûƒ|é¶åÿ¹Âï·{­ôô.iZQ[{ßð<ýËï: áâËÏ?ûRâ6óÙ¦¸ÅïÈÄo˜›|²DFGUîJÝóýWËOÀ™jÓþ–ŸÖúþ';â1®]ßê"Þ H,ëu¶b ¹#Ø#pŒ˜ÄwRhÝŒõÊ£ÒþOÑóǾº+ê´·•‹žOøugýw¿Ìè¥Ó.§øo«Ø›kq!¼)îGlË#.:xúƒèi=#M¾œ—ùZÿÖÿ1SøŸÿ#;OÒî"[­GK:Üoý«oä$ò\®èJ®^7åÆ7eœ1Á¦ù”cmýïýºÞ[Ùß{½HViß²ûúÿÃmm‹_£Õ–ýŸVÔ/ÞàÀEͬö7H‚]Ã,²ÈíÇÍU ç¹T_.ÚZëë¯AÊüß7ývôêQ6:åÄåÄÓki=¬.ö(“L¤óî áAùþQÊr0WŽ•ôŒÞñû­þ·¿žÚ•+95Ó_øð n´‰¬õFô®¶–·°7džà»Â`RQNqæm Ü#î‚)BÑQ‹ÛÞûîí~»|›³bww}mø?×­µ!·³×çÒµYç—ZY`ÓOözy²«Zp…”}é|¿/!²AÁ#5I;.mïýÑ¿•¯-í¥îôæ²Û_ÍÛþ•®O-®±¥^O=˜Öo–©£Ž n¦e’²ï'=eà?$”Õ?fÝÔ¾^ú·ž‘»ÓV‚+UÿnþZù~‹ÈΊÏQ¹Ó/¡»:ÅÝ”767Vèd”ù»²4­…ภg“Z.Vú7÷8Ùm®ÿ¯Buw·Xþ7¿_"I?¶þÍ&á óöIý“³í|ß´I?Ûo•þ·åÛŸz!{«ïîßµ¬¹¼¯½úía»Yÿ.¾»içéç{›z=–§ ö›{4Ú£K6¡wÊK4­ÃûãîÉÚ£!0ØÏ#œ)éeýßÇÝüwüo­Ø¥w{îšÛ·_—ÖZ¡Ô/ïá›Tó¢Õ­ÒÞ14¢ ˆƒþ쬼¾I8Æ*2Œm»æÿÛ­ú[åÒÅJÎþ‹ïÒæ&”ž!K‰.5 YîŒJ/mE…Ú0ýây­Ží`»ð! œä/ݲþ[®÷ëóÞÜÚì´¯Ìí¾¶íååéŸR]V;Ù/âeþ»a¦¶–[FæA6ö߸oVé³Ud#§ñd§~m{«z~[Þ÷ÖÖékܺyßðùýÝoq.ƪo54[{ÎZímîñùèbv¸Ú@Á¶’HÏ&#ð¯—ÏFýV½¯•ÞÿÖšoÛÎÏ_Ä«©Ï¯6›Ù-u›à…å¶æþí§o1°¤‚@ ïÔœ0ã#üDßxéå×]¿]5³±-{­zëçeÓ}üí}´7ü«í;Â÷ºÌ÷:‚Þ[^ItÉ=Ã…hc™ÿvŽÐ<Ç9SØb/É5®Šþm«}êûw]Ûe$æä¶íå×îÓ_+—5=2úçáÅõ­ÏÚ.5 ›Y%tI[w˜Ù-Ns€NÐ:`bH¨r­ù\uïf®ûë«ïØ)K™¹m{ÛÊû~¿ÞcÁöïíh¾Â5ñ'Ú­þÇçý§ìÿdÂù¾nþ7­ÿYóçn8ÅT7Wîïéov߆ÚÞüÝLßÁòVõ¾·òü9v.ø¼_ÂKnm¿µ.¤J¶Öââ(”ï;ŸÌLÆÜ r‘цpqi¸Ízþ]¶wòÖýô6迯ø+òïÔË‚ÇTÑt=9mbÕ¦J­Ôo-Ã$Ý †‡r•Vs²=¤…#ÜoUûó].µßù¯÷éu²¿c8ìŸ_{OËþ™/„íu›Z8¯®5f²¶3¼/ ¹¶YOî n;92`;àŽœ|ܯŠÚm½çú[ð¾¶`í{toô_¯ã¶…¿‡ÑêË~Ï«jïp`"æÖ{¤A.á–YdvˆãæÀˆ*sŒ‹\ª/—m?­uõ× Jüß7ývôê.ª5ÖÖu];K¹¾Ë —ð2Í–ß$e#„äô$pË÷=8Å| ¾ši»»M¿T®»ê™¦Šq]ìþí>æìüýïB®Ÿq}e©Aujž } )£óê+™gÞa”?ÈÀÈɸÃÐ ’:[]);í­¿ò[yÿ5¯¯ÞŒ¬ì­½•þ÷·O[y¼¥w¬\Þê«GjZÞ+‡–4ù§¸ê„€HMœàmã¥L,5ßOý&7üo¯{Ûww7yi¶¿žŸ×ÞPÔe»¸×µHôùõ—ÔáÔ¡X3qöHáÙHºû¥ÎÍ’1É–¾Í5ýëÿäÉ[ðµºù-.VM§Ù[×úÞúZâÉi{i¢h¿Ú2øŽHe³y.´·8º(›;Õ~ÿ »ïsZÕÒsPÞÞïkß_.Ö¾–½…÷×Ó_éÛ]¼Êz‡ü$_!îïRSŒš˜‡Ï¸13$ÁŠG«¨.©‘3‚3‘Û™Ûáæ•·í¼í«µôؘߕw·á{}ößçÔÒÓVxî,cÖîõÛËQû$Öö×¶ù“ÍmÂeR\a|° ¤‚994×Åç§¥­÷^ûßËÌOáò××üý-þEß érEáÍgN€êV—­5ʇšI¾RÎæ7œ‘ЩÊwëÍfÛ¸î’ûÒZz]z[cUolܶoðׯàcÝ7‰îtû‰Uu8êÞ[ÔDÞ&ñ¬\}ÒA‰‚õÜõæµIFitM?ü Qvÿ·W5ü¬f®’¿§þ·ÿ·Ÿà:MÍãâÖcóuC;Ë· ”m1àíS¿+òÃÀÅE5enÊ_Œ“_†º|ú “v_öïüéú£¯ð’]E¢¬W¦àÉÓ"›‚ÆB‚WInOÊ“ׯ4ïxŽì¯ëeqÚÒ’[]šôP@P@P@yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«94|Eª.‰¡Þêm L-b2yh[¸®8ëY·f½RûÝ‹Jæ>“ãK+­BêÚèÍÛµ‚Ös £B¢BË„bÌ@ ·Y"¸¸”ˆ6Žiel…Ü"’@ ¹# ’iþ?ƒ¶½•ô¸ìïoë]¾}mÛRÂkºd´ÑÝ+ijGn]T‘¾M¥ rõäqÏZ«;¥Þÿ…ïù2SVºí“ªë–zlëm)™î] ¬p[I1QœmŠv®{¶ÐÖS“Q—.ëîò--®ehÞ2µŸH¶¹Ô.e<›8&Ë’Fù 7ŽFà22rq[M(ÊËÏðvþ¼ÈW.xoÄ1j«äÊ@¼ß11Ç€‘¬®Š[?t½ ØJ^ê~Jþ­_úòìíæìekÞ'ÖtH ëm*=>âs ¼÷WeAòßçþë mâ¦/£Þ×üZü¹_ßò©+j¶ÿ€¿^o¹|ìÙø×O(Ÿn¸²/ _,i²Ëz$f2p¥c¸ˆôÉÈ#5åýlŸë÷kÞÒXOé‹,ìñ²§–±A3ÌìÆ@WÊ »#Ël’0ÙŸ×ÊÉßñ^[k}ý~6+é^4°»¿¹·šVU71Ålëm.Ò¯2ï|mF%ÈŠžƒ¢*éw×ðoo’¿ü:Ÿ+}´ÿ/ÏCCI¥ìwQxŠÎÐDyJŠ`H,Üð§·4GáMï§åøJÿrõmüM-µüÚü­÷üŒÿø´x}ä·Ki°Íu†5(@¶ŒrrK `g¨©M9[k8þ/_ë©VÑ>÷ü‹‘ø·Gxdq5ÆøÙTÃö9„®X»#Ù¹Á Ç*“ØÕ_u·]7[žŸ+þŸ™u5›Ó¢¿YȶšE‰XÆÀ‡g©S¸à‚\S¶©wÛî¿ä;èßb¤¾'Ó6@m®cÏ7’¡ƒ¨$J±·E= ®3€r9Ç51÷­mš¿ÊÍþñë ?wšý4ù‰‹4¹æ4]DËjËöeÎõ HRËÉJººôü/ý|»¡µgoë°±x³D–@‰xÙòMÀEÝ–•Â`£»#hm$ßEú¤×ÞžúlÁ-Rù~6üÈbcÚê@û÷}¯r¤¬Ýÿ®Ÿ×DJþ7ðú(cw1_,Hì¶“–eÌ„'îÀ*ÀîÆ0sŠkV’ëoÆÍk¶·BÛñü7ÓÈl^ ð¾™q~`]²8@%¸9èi&¹U¶é÷Ûî¾—Ø7wêÿÊëðØ•aM)‘"1$°é¢–\Œy’‡!øü£'š®gk?ÃE÷Ww, òmz×PÔo­nÊIÛe——:‡ 64›È*t 2UIéÌÅZ÷Ý«zúÿVÕŽZè½á¿­´"Òü#œ,Õ.‹­­ä—hÇ̆6‰#ëÀT*3ßo½ dž¾ë^·iÝýÁ-[}Ýý?¦Ûù‰máít-kJ†ñ„Z“¹Œ´yû:´jÏÌ/8À÷¦¯ËþË¿¯½¿»ùi9wÿ/ëò#ñƒ¢Õu…Ô•4©d0,.š–š.× I>u(~cžHö3Ÿ~+‰û.UºI|Òü?CX;TæÛ[˜öÔ-´½9íµ$¶Õb‚Tº–x~в™Hi8 ¼†Qƒœ`c¶µ"›”WÂÕ¿=Wkݾ»™Ó÷RvÕ;þKî²ù·‚¦±H¬ì5DLK‹kƒ –Ûå-Œæo"Ü“Î8§Íï)>Ûçóbå÷ZêÖ¿æjêEëjϦ_Áln!X.cžØÌT±R¤:í?;ã§s“ã(=ŸùYþû/ªktdé~ »Ñ¼™´½Z»‰|²óÙ™#hü¨‚¢E9Ì*ÀîîFZÑÉݵÖÿúSkî»^dYü;á™4+©&·½VK§–[¸„8Ydg,®¿7Ê@;O]À˜¥F<«d•¾[ýý»ëÕÜwræ{ÿ_×áÚÚz†öËí:çÍÙöš]»s¿1ºc9ãïç¿J’¿“_Š Þ±·¡FçþwŠ!Ö¾Õ·ÊÙûŸ/®Ô™~öé¶z¿=Ûùßñåÿä—¼’ìdKàY3;CjÍ4¾`ûM‘!ó&pT¬ŠÊàÍë6ûñ*.1Q]?Ê+ÿmüFÝäßõ¿Rõ—„ÞÛMkI5)n¯-îÚiSs±ˆD0I<“åuÿk¾9»«Å®—üoþðÄÛGæmMu»ÓÒÅü¨ÅîŸ sS„Áõb¼Ž€QøµÚÏïÒß«ù ü:o§üòùß¡â¯M­¸kkä´-k5¤¡àóC$›I# ¸`PsÈëÅ(«Jý4ø ºÿ‚;éoëUfVñƒ"Ö¯šñæ¶gIŽ+«AqPJô,7%= €sÚ’VwóŠKô½þBû)y~·/. ¾Ž†ÎÑÊeiäÅîܬ±n8ÁÁÆîOÖœýëYíoÀ#e{­ïøèPOCªÐÞT6Å£É&BÇ9þ1lgš«ÚMÇM~íKï“biµ®ö³ómÝ¿ÀªÞ Ô&²’ íON»y.þÕ!—McÁ!†Ù“ÎÀ íؼ„¬¢»_ñÝú߯’ÚÔÝÛ}ÿM—§ç¿{Ï£ø-?JÔtù/Å}lmÏ“ˆF ÊÙQ’<ÜþϽS¿*IêšwôQKò¸GIó?==M=H¾²Ônïµ=BÉîbŠ,Cl`U_±v';ýiÝ$Òêïø%ú•­ä¬g[x&(&†AxÍåÜI)> gnÈúñ°ÇÏ}§¦k>OqGû¶ùÙ«ü“hÑ»¶üÓün×Íê?ÂþþÁ¾Žçíßhòà0íòvg)ç;üðÏü Ûy¾/?ó“ÿÛ¿Øm·ƒ<‰'o·çθŠ|y8ÆË™'ÇÞïæm϶}ªaî(®ßü‡/üÀs÷›óÿ;”Áú ¾Õm#¾†-3PƒËšF¶Ý$åÝPùƒa .7`r8ÅLPQ–ɯÁE~-m¿™RmKš;ëò'¼ð,—VïbÚ¢®œq%¬_fýäRJ¬ gßó¨óh<Œ“Žj-¦›Ý[îM?¿D¯ød—*Ûþ¿=à×z\Òkv:•µÒDm¢’cx·‰Ê‚ml ç‘Éâ…¤›èÿKÛó×ô½ÕßÓ)ê:¾ñ}•ûÆËmonÞco–L‘+×å!ÏO˜uí*)ó§Õ[ïºoÖÚy§äTž‘K¿ù?Í'òó3G‚.Œvë6°ŽÚtIœßdÇ–«"8óFÿÞÝ 8ÙÀ= âîïÏö´¿mšÛÎï¯oši5ËÓ_Çü¿áËú'†®l5ɵkÝF;«‰¼Íë¿”¹qàbò}O_nTmò¯ëY?ý»ð®ÚoúÒÇG@€ ( € ( € ( 1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg Eï^ÝXiFk'í <¡™K ó%D$€A8 OZP3°7Ê®sÚˆuéüK&‹#iÌlÚFžæ;y•TBØDÞv¶% åŽÚ³R^ÎU-·ã¬—ݧßu朓MEuü=­š~´.|S¬Í¢I;>žEÞ–úŒ"åR¹Ùd±uÛ‚§ƒWËi(¾Žóæ}>ëõºè?Oï/»ú׳±f?kÛïï×GémrŒG–¥|­Àþic’¿wÊÝÔã&|ŠOK¥nÚ¾¾K«Óm„•ÚŠòü¿«w-jx‰/<<WÓ·\ݰ>Eœ‹¯í´;æèpxçiÇ:%j®/¢œ~ç÷’Ýéó//ÆÿNõcS‡Åë¥é†Ö6¹¯™p$‘P¸bB?»1œòzb!y]v¿à¡þ¯{ÜíŸõ¹•qâMf;ˆ5žÔ-¦Ÿ~÷Ë„ ™P‘óü¹ÀÁ!¶‚ÝsÂOF×U ú9_ðO~è|º¨ÿy¯ëÎß‰ÒøsSÔ.5 Ý?T’Îâ[x¡g³£Œ¬¾\37#a9Ï!‡´kGn¯Á?×oÄÍ=ŸuÇú·Ìä´i|C6¯o*jVαj!dšÚG«rƒinO ÈÚ8ÁÅb¤áIËû°~º?é½} $“©ËýçòÑVÓÔÑѼ[â fþa¤#Ù§ÙÅÈYÛæFŽÍ¼Ì¬ àym½yã~T¤ïµÚû¿¯-þüÛj+½¯øÿÀûÍ=s^ÔtýCVhRÕì´­=nÞ6Fófb%ùCnGÈH=øî1æ´[}ì¾vÕú_çÝ[]To(Ç¿ùÿ_ðLë]wŲKgmqgif׳„†êx©_*G8Ž;‡Î6/%Æwtã9_7+Ñ«þ ›üüŒ”½Þe¶Ÿõج ³²¸Õ…í…ÓâYÜÊe‚BÓ.%!sæpØÎ\ç'øk¥¥µÓžß*Óµ¾wò3I»w³üý}-ætšˆ5íW\}ºZ!n&·iq1ye—qo8³WîùKÝN2s§¬T¥Õ]—_>Ú­‡'¯»åù^¨sC±­ëqêZ•å Ó™­ï^ÜEŒ7šv»-¸e·(Ù\¨i~·+l­·Ÿû/‰G¥¾ýuóòÿ‡3u?jÖVÓ_D¶Û¼—vð@Œ±¼ ä<Œ,åBŒn^Or7’Šë$Ÿ–²JߎýÕ¬]ŠË×KßõôÔn¥âßéqÞ5Âés}šI­ÆÈdMζþz·.p?„ާ®GJ#­—Òj?Š/1.þŸŠ¿àþÿ!šÇŠ5ë+kä¼þÏ•!y­‰%‰‹ =\&TcåÀ9îéN¸®ÿ¤ÔöüÐyú~)þO¯_#Ã3ê/«x„ÝÞGqm æØ¡XÛ|º°¹Áèç'¾*\¹(ó=_½ø7ýy!-f’ìŽ^]oQ›VÐõ[Ù¬ŠÞÚ¬‘Án²!‚9.mÆÃüçÑA äÅRµ9ÉIö»éðÍíòþ˜ç¬tîÿD-ï‰õû‹kkÈYÜMmwg0·´‘‹¨€;|çb`rÁ·¤¦àï%¬zzÂ~½»°žÏ—gu÷5ýl\_êémi$‹§JuktžÓËG i¾hãS¸ïÍ™(ÃŒä_+çöw×Mzj›ÑÛºk­úšK›§½§]?­{‘{©ÜÚk0^Ïj×vS41Í Ý#‚P» ÿ{·jÆ«ýÃ’ÓGø6¿B ­QEí§ârÚw‰µÛ?A+Ýi÷?aÒ ¿œËù·Hùù‡ „9s»,ÃåúeohÿÄ£§Ÿ_-ô]lõ3Švµõ÷ž¾]ÿ^ÊÇIâýjÿOX!ÑI{"<Æ&¶-@ÜÄ´Ñ*€Yˆžxkžrq»è•ßéù>ŒÒ I/?ëoø'§ø‚eÖ¥Ö-ã†9ïSäåÄÓ-Šå±É ¿=³Œdg5²+t×Woüš§ã¦žfnWJO¢¿áý|ŽŠ_k6òKfñØÍr—X¤É¬rÜ)£Âî$ ²6á’r‡‘Û4î—*ÕÝÛü2j_†«æ[J-ól­ø¦×Îú|ѹ ê×ZÖ™uuE 'm¶õ'ËRwŒó‡,1ÒK¨^ïo½¥÷Úÿ1CâåŸK_ש‡oâíORû2XÇgjnfŠÌÉs0ŠãËy&R ØÚ ›wuävÂ[§+ÄÎ$¹èx9ç¶ ¹rI·²‹vôkú¸–´ïÖëñ ð·ˆu FöÍ/¾ÄðêV&újŒ ¸ £c±c¼üãæyVãÓN[^/uoG{í÷iÝvž©­®×žŸÖ½Ž®¤a@P@P@P˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#SYÒíu=¬oã[»Æî„c«€AJ€G¦jS³e¥éúzD–6¶« ²Æ°Â¨Xå€Àà>¦‹°²(_ø[L¹·¹‚ÚÓ…ëî¼k8£î‡9Wm¤ryoB*cîÚÛ-mÓOøa·»ëµËcDÒF¤u¥Ù}¸Œ¯³§šxÇ߯zq×¥Vk¸»y-tß ¡]. "Æ1knljÆ6 _@È,0{ƒ‘‘M=­ÒÏÒÿ®ž½Á­ï×OS]¬­ZénšÚ¸\bSÞ0õèÌ?àGÖ…¦ß×õe÷Ô‰ô:C “Oµcní$E¡S廳/IÉiY~ùvôü?Ì]7KÓô¨Z.ÆÚÆ&mì–ð¬j[¦HP9àS»µ…mn$Now5ݾŸkÌùófHU^Lã;˜ œàuô¬¹\z1õ¿R'Ð4g¹·¹}"Á§µUX%6ÈZ ¿t)ÆTØéM;7%»WVè]ð‰^QbI#¾Ñ¹”gžàdþf••­Ð}naÏàŸ Ëä¨Ñl"†)|æ†;XÖ9[k(Þ»~lo$z6×[™£.‰¤ËöO7K²°ãì»­ÐýŸÆÎ>\`tÇAUwÍÍÔ,­ËÐH´-"™naÒ¬cžwK*Û y6àÌq’ws“ßšKÝV_×õpzêÆ\øwDº‹­OœM''™j½ñÇ#–Á<õæ’÷mnŸ®ã¹q­"N(¶kŒ—’% Û±·wNHrsÐR”y¢ãýj÷Zil2ËN¶³ÒâÓ¢Œ5¬QB?͹@Æzäuõ«›çnërcxìÈl4N*tý*ÆÐ¡Ü¦ tL‘èÍùŸZ.Çd%Ö£]˜ÍÞ‘a9ˆ±O2Ùac–ÆG<ŸZKÝw_Õ¶®Œ›RÒôýV‡T°µ½‰r¥Ä+"©éy£gÍÔŠÈ©ká­&ÛW¸Õ…”_Ï'™ö‰"C$ MªØÈ3ÜúÑuYyþ.àÒ‡àI‡ôX.¤º‡GÓ㸕·¼©lÝ·É8É;€?Qš#î«-ë¹z("…¤h¢HÚVß!U»` ŸS€à(ÙX –ú&“kñ[i–PÇr12GnвŽ~𞧯©¡h’[ ë~¢®‹¥.§ý¦ºeÔ?çè@žoL}üg§zP½Ýë¸šŽ‰¤ê’Ç.§¥Ù^ɽźHSèH8¡{¯™nUg°6‰¥5Ü÷m¦Y5ÍÊysLmÓ|©ÇÊÍŒ‘Ààú ŠË׿]É&Ó4ùÉìm¤ÅØ<*w1]„œŽI_—éÅ M¿­oùëê6™§ÎOcm v.ÁáS¹Šì$ärJü¿N(ZmýkÏ_Pœw²^Çk]Ê¡uŒ G@[©Ò…¥íÔ;y Ð4kyÞx4‹¦‘÷´‰lŠÌÛƒn$Nà}@4GÝVZV«»ÛÃÚ%¤%®§Á#6âÑÛ"’Ù œ× ¨GÝVZV«»qáÍ-í/à¶³¶²m@bæX-¢Ý/'– ¥[©ûÀõ5.+—— Ó×›¨xgÃö^ÓÚÏOkÈev(‰¹Žv¢ªŽ :zäÕ·¢]¿áÉJ;㇇45hXhÚp6òa"Õ?vä‚Yxà’ÈçI{¶·M>]†õ½ú“ê:Nª†§§ÚÞˆ[th…dØ}FAÁ¥e{¥†®‹¥,oé–a3(pÈB‚¤cB¨Ç¢Jo]ÿ®¿›¸–š¡ÖÚVio½­…¬Û9xcŽU‰ŽrÊÀ?1äzŸZww¸Y"޼6±ùvÐÇ y-¶5 2NIÀîI'ñ¥änPƒAÓ“Jm6æÝ/­¤v’E»E—Ìvb嘂wôô¥eh®ß×ÞúŽîí÷þ¾î‚ÜxE¹[u¹Ñôù…ªyp -‘„IÓjä|£ØS¿½Í׸­¥º¯llïáXo­`¹‰X:¤Ñ‡Pá÷´uOª–è2ËJÓ¬'ž{ [Yn[tÒC £Jy9b'“×Ôд\«`z»½ËtP@P@P@æ>3ÿ ûßèi[ÄG[áoøùoûØÿ趬ä¹â»Iï´‹{XLîÅ @'œÔ¼y<|Êyãžx¨VMs+¯ëòÞÝv+]lìÿ¯êý78ÝWÃs\—:w„þƲÛ,V6ñÿe΋Mµ\œ£n,v`Ž”BéïÕ;ù-×ç¦Ï›Q;[m,ôîÚÑþÕ´#¹ð5ÃÁs(Òãk¹!¾3ziÚ}ÖíœýॊŸáÉéšTýÎ[iogø|_×U¦Àõ¿6»ýÍž¶ï¨\øâH.eTfîXoŸ~ôÜÓ´û­Û9ûÁKm?ÓÓ4S÷9mÓÙþõÕi°?{?¹¯óüu4ôÏOm­éw׺4w-^)—÷Löåî<ÈäÉ9ÆÝßw$néɧOÝò÷b¾äÓ_;Û·qJí|ïÿåbƳ¦½× µ[ÝÆ—w©·£@ÇË>Ÿ32õíå ?}.š¯ñI8þJëÍ+Z>z|“OüÓïÍäaZxcV·[y-ôCk5¢BoHš"Ú¤Év~º_¡¢kš7Ù~wýn?ɖɇ«œÏi*é¾K2£Œ˜PªH¹ 6â®~R+Æ’émwµþ_v¶wîgÑöýo¿ùèX·ð¾¨.-„º41^‰-^-F)T¥œ(Š$€c kªO™’zÒ”nœSþkùÝ4µß¶éZ×Üw²û¬»{׿o==6OëŒ:-•Þ‹,PiÖÐÛNÒOYvÍb»\»ccΠ銻©ÕskGm>Sߦí.·ô¼aʼÿà] ú§‡%û^§ ®†¯<Ðùz^¥’«§¯•µPeƒÆ?"Ÿ¿ŸZËWÞí¿5Ûæ½Û=>öZ²’}4Ó³¾ÿ¯~“„dKdCÕÎgŽF´•tß%™QÆL(U$\qW?)âåÒÚïkü¾í;lï܈®·ë}ÿÏC¹ðÚß[Y[XÞiñZ¥½¤ <2å7à†T’@\/$œîêqU-[wëý?¿çÔIZß?–ºKDkÔ”P@P@P@P@P@P@P@P@P@P@yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9:…P@P@P@P@P@P@P@P@P@P@P@P@P@P˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨P@P@P@P@P@P@P@P@P@P@P@P@P@P@yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9:…P@P@P@P@P@P@P@P@P@P@P@P@P@P˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨P@P@P@P@P@P@P@P@P@P@P@P@P@P@yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9:…P@P@P@P@P@P@P@P@P@P@P@P@P@P˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨P@P@P@P@P@P@P@P@P@P@P@P@P@P@yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9:…P@P@P@P@P@P@P@P@P@P@P@P@P@P˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨P@P@P@P@P@P@P@P@P@P@P@P@P@P@yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9:…P@P@P@P@P@P@P@P@P@P@P@P@P@P˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨P@P@P@P@P@P@P@P@P@P@P@P@P@P@yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9:…P@P@P@P@P@P@P@P@P@P@P@P@P@P˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨P@P@P@P@P@P@P@P@P@P@P@P@P@P@yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9:…P@P@P@P@P@P@P@P@P@P@P@P@P@P˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨P@P@P@P@P@P@P@P@P@P@P@P@P@P@yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9:…P@P@P@P@P@P@P@P@P@P@P@P@P@P˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨P@P@P@P@P@P@P@P@P@4ÝJËSIÚÂá'ó½¼»zÇ"2‘Ô0AhÝP@P@P@P@P@cã?øð·ÿ°÷þ†•¼Du¾ÿ–ÿ°mþ‹jÎ@ކ a@P@P@P@P@P@P@P@P@`øcF{­µ 1£‡S‹PÔ$Gr‚ösåI€N2IV”$.Ž€ÕÓïRö'*’C,Ncž @@àQ€$gA ‚¤À³@P@P@P@P@æ>3ÿ ûßèi[ÄG[áoøùoûØÿ趬äèjP@P@P@P@P@P@P@P@P'¥jÚΉ¥½Ì–ÿcÒ´ÝNö{Å•™uÜÌZEêR8ÑÄ ÈSh 0]7ƒ´ˆ¬fºk™ï®5›/ø—ÞOs}4ÞpL:>×vQ¹dggšËœî¡ÓS € ( € ( € ( € ( €<ÇÆñáoÿaïý +xˆë|-ÿ-ÿ`ÛýÕœ @€ ( € ( € ( € ( € ( € ( € ( € ( € (3DÐíô|ùÍ.!ŽÚ/4¯î`w—à ªïlËòÇŒiÐ@P@P@P@P@yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9:…P@P@P@P@P@P@P@P@P@P@P@P@P@P˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨P@P@P@P@P@P@P@P@P@P@P@P@P@P@yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9:…P@P@P@P@P@P@P@P@P@P@P@P@P@P˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨P@P@P@P@P@P@P@P@P@P@P@P@P@P@yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9:…P@P@P@P@P@P@P@P@P@P@P@P@P@P˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨P@P@P@P@P@P@P@P@P@P@P@P@P@P@yŒÿãÂßþÂ7ßúVñÕødKö–ò„_ò ±Ï˜ì¿òͺaMg Fö.½-?ïóÿñº†.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèͼeŸìûmØÏö…övœ¾+xˆë|-ÿ-ÿ`ÛýÕœ @€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (Ì|gÿÿö¾ÿÐÒ·ˆŽ·Âßñòßö ±ÿÑmYÈÐÔ ( € ( € ( € (  m3€@#‚='¢:×V¾».öö6&â Ó‚Ä$ŠŒpªÀ%ùwgåPv–`ŠÞ`>;ÝXìó4í5s·~Û†8û›±û±œf\tÎÄé¼ì,î¬vyšvš¹Û¿mÃ}ÍØýØÎ3.:gbtÞvŽ÷V;<Í;M\íß¶áŽ>æì~ìg—3±:o; G{«žf¦®vïÛpÇsv?v3ŒËŽ™Ø7…€cêz¼>uåž—HJæäíAòn91ŽeëŒìN›ÎÂÞcî¬vyš~š¹Û»mÃ}ÍØýØÎ3.:gbtÞvG{«žf¦®vïÛpÇsv?v3ŒËŽ™Ø7…€cjz¤)O¦Ø€Í7•#ÈT±ŒH¤äàa¡˜¡`á˹eÐm§›l’ÈófPOú×ðÇö¤†_ûAÿžqߪÞb´ùçýð(·˜Úüó‹þø[ÌíþyÅÿ| -æöƒÿ<âÿ¾óûAÿžqß‹y€} ÿÏ8¿ïE¼À>Ðçœ_÷À¢Þ`ejדké¡Ç$’oTP7b6Æ}½¿Â–Àg>«âíN;é¯ü›[ 6Š;}B{e ò\†8×$„^NzPÀµÿÆ“ë«ÿàòûÿŽÑfÿÆ“ë«ÿàòûÿŽÑfÿÆ“ë«ÿàòûÿŽÑfÿÆ“ë«ÿàòûÿŽÑf|3¤Im\Ôr÷ÿŽÐôWlc`ðî‰<)4ê’Å"†GMzô«Ђ%äSq’vbÐwü#O®¯ÿƒËïþ;JÌþ'×WÿÁå÷ÿ¢ÌsÆvQh·éwœ6©l’Õn¥ †dR¥^B¤Ç9j€ôH%}ªH+Ã>´0íþyÅÿ| vóûAÿžqß‹y€} ÿÏ8¿ïE¼À>Ðçœ_÷À¢Þ`h?óÎ/ûàQo0s€IH@IAIè®ØÆAz““Aöyb‘C#¢‚¬Bê)¸´ìÅqÿh?óÎ/ûàQo033ÿ ûßèi[ÄG[áoøùoûØÿ趬äèjP@P@P@P¶ŸëÇÑ¿‘¥-€ÌÑ_̳‘·ïÅÍÂç~î“8Æw¿LcÆ6¦6+õdx–}RÞÚ3¥ÄJÄòÆ‚Yb_TŒã=ÉGÎ*^ú迯ëgéÕ5¶›ÿ_Öë×¾Œ œ¾ˆ›Øæ¶k»2ãSMËþ½w™PíÀ9O” …Æ’^Òµ¾õð»ÄoË+_cW:N™%¦©YÙG5ÜÒAylðÚXÌ«yXƒÇ7;›W9es¸t©”¤¢¼“Ñîýçk-ßá£[Ý0Š\Ïͯ–^ß=Kªx†]WÃzÔõ´Óî_MWƒL$aí×ùÔ»e‹ŒlõÍk(Ú¥£«SÛµ¤­ç¶·ÿ&L²æí¿}ÿ«o÷£¶ð•ü÷¶÷"þã7ÑLV{Mª¡þe#1ûÙÏt-9S_ŸUòþ›Ý¨ïoêÝþð7LܤQGZO2Î5Ù¿6í›±‰ç¦3œ c;“Ôžÿ‘jËýùÿôsÔ­ÆhÕ­©È:ëþ¸¿ò4 Æm®ä¶‡b´2¡c€‘™c³ƒŒ ŒœýÒOZ@8K(…+„˜—` *%²s·' Çn¦˜YùBiöÜ3³°dRWæ]ˆ7ð2rr88 ¼ÃpÂÔÈîÞ¤-xîÇONç®vœÐ’0H>†ÈÕä=¢ÿ×IôY¤À4ÿùu¿ûXèÛºOt½PpÚχÿ¶üo||O&ÊÛþBZgÚÈËM÷~uÛÓž¹ãÒ•%kËûß=£Ôs òýLÈ5M`Yë“ZêfÎ=*).#‚ XBHßh¸6TœÎ0{ç9¢›÷a'Þ+äÔ/ùék[î²q´œgølGÿ äPÀuHíâ’yl­šBn¥Rͨ.›W£`ÀäÙÈÊZÒkû«ÓàO^«}>Ï¥™Ië}µ¥­ßÓwßckÀ’_Ú.…i6£%ÕµÞŽ'úö×üÍ}GUÔôF]>÷_’;2Öï.¥,P«Z+‰rɰÑ¢‚àãqäñ†­{7k7ó²M.Ý[Ù^Ö'[).©~vo¿õ}®RjrkæÒßÄZsZ#Ä‹«ÈQ¯âeRdTXxI.GUÊ€G9ÏZrºé->Z}ú>«]<­hÕŸm|ïý.çcà¿ùô_úñ‡ÿ@Õ[ø’õ2†ÆÅdY‘âÿù¯¿ëŸõžÀkÓÌ|gÿÿö¾ÿÐÒ·ˆŽ·Âßñòßö ±ÿÑmYÈÐÔ ( € ( € ( € ( íPY+\]ÊÃ’ÎçqIì/kâK{bñ}®ÂhŒîë#\JcH­Ñ•¹¤Ý‘q´6#.€|~,ˆìó$ÓW;wí»ãînÇî†q™qÓ;¦ó°ºÅ‘ždšjçný·r}ÍØýÐÎ3.:gbtÞv@ø²#³Ì“M\íß¶îC¹»ºÆeÇLìN›ÎÂè?Dvy’i«»öÝÈq÷7c÷C8̸é‰ÓyØ]GâÈŽÏ2M5s·~Û¹>æì~èg—3±:o;  üYÙæI¦®vïÛw!ÇÜÝÝ ã2ã¦v'Mçat‹";<É4ÕÎÝûnä8û›±û¡œf\tÎÄé¼ì.€‚çÄV÷°Åĺj,2¶Û‚ø(ñ9Àhpy`ð~T ©l¡t _Ò­4H./¡ITÊJç$+‘œ{søŠ”ÐËŸð“è¿ô‹õÿ «¡ü$ú/ý"ý‹ ÿ VóÄÊ?›¯'š.€ÅzC›SŒñŽIéEÐü%Z>þÒ<ã¥@'ü%.1ý£n‹ þ}þ‚~¿áEÐü$ú/ý"ý‹ )˪Øê:þ¶7)1å,¶cjW@RÕ|W£xcÆ:˜ÖoÝ®´ë/)X€[l·[>›‡çCÜÂÓð—ý"ÿ¾×üiÝÂÓð—ý"ÿ¾×ühºÿ…§á/ú Eÿ}¯øÑtÿ OÂ_ô‹þû_ñ¢èþŸ„¿è)ýö¿ãEÐü-? ÐR/ûíÆ‹ øZ~ÿ ¤_÷Úÿ@ð´ü%ÿAH¿ïµÿ.€ÁñOŒ´/ßhú]ü3L𵡨rGŸ@µ+éwº¥Ž›jßn¹Ž1€@Ç–ÆsþzŠ@3¿á'Ñè!ëþî€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@gx—_Ò®ô+È-ïby]0ª3Ï4›V¨ªÌ|gÿÿö¾ÿÐÒ·ˆŽ·Âßñòßö ±ÿÑmYÈÐÔ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €<ÇÆñáoÿaïý +xˆÓ°×líDSZëP³ÙÛÃ$sÛNåZ4Áå@Iõ¤ãä¿øKþƒšOþ\ÔòyÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÃþÅÿ æ“ÿ€W4ryÎgÅ7¶—6q[_Ew(¸¸šSnоaB8p;ƒëÒ´Š°ÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/share-ready.png000066400000000000000000000324501203611042400313630ustar00rootroot00000000000000‰PNG  IHDRÍŸ²a¶ pHYsÄÄ•+tIMEÖ#9øŽxÕtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝy”Õ}/ð_uU/³HšÑ:’šÑ† Øf‰Õ&`ŒlìØ,–cá@8,œÀsŒ‰ŸMŽIâøGñ'ޱ1°l#$Ë ”˜AÁ’ÚF£Yºk¯zÜîRMm]½Üîšžïçè´zª«êÞZúÛ·o--ضM.×\s@ xàN÷Ÿ‚“³,açõÍ0aâ”)S›P5€1®¿ÿÀððжí WÚsöškî8þ¸Ÿ±ä¤cŽ9’ˆDQlbEÆ(Ó4‰hË–÷~»ñÅW_{E­`Û6 Ùe眼pÁ¬B^Ö4=/›…‚Üì Œ%íímmb&“núEõ—IDATïhûý;ï¯ûõfµõõÍa!»çƒúMÓ††òÍ®0ÀØ3qbG&“™:%·pÁ,¢“‡†‘°jÕ7–}ö™K;p`xß¾üH^–õfW`¬jkKwtvLŸÞ=uê„ßlxmݳÏJDÔ3kòC;ßÛ70€f,mß»kÞ£k*ê—]Ù;ãˆáamxXSÈî™5™ˆ$ör>Ÿ—e=—ËÔ¹²cÍîþ÷ç=ºæó«.´{gs¦Ð$"«xb–@ä}’h¤ýÂö½?zpÍþ«VÍž2‹ˆdYÏç‹-W‰ˆ2ÙÌà€‚s ˆhÚÃ^|é©…A…^Ýaª‹ÆN)IDATZœIÄÿù€ˆ.¾ôÔÇ~P¼õ[làà!}bwŽœö¬j¨©´À§ÎcŒYPlÍNçré݇ô‰9;›6Rd BÚ´=O2-=¤X†­+Š`¨Däd©j¨D®œEÛ_Ò$!=ÙLÛš9¬ÒË[ök¦®™Ù6{â4iFO[{GºQ‹ ÐPªjÙ†a›Ñ4WÜù7Dô/·ßd‹‚aX– 8O¾ðïÑO®»ÆTTM·Ó¢ 8•Š™aez&wQ&½coþÍ÷‡ö©¶¦™ª¦ÒßyOzÒ©'tÊqÇ8uêôJgòï?~˜ˆ.ÿìUu®\|U&Aß\ÂØ6 ‚@dÛ¶@D‚`7’©[”!2ȋѺvÇîóçÎ^ýÙϰ?Wþø?XÈ‘f¨¢I¦H¤[D”Sd d™KW‰ˆR‚J ¢$ Dì0Z÷ mYÆþƒÊˆd*Š.TUÓTU“MVYV Šº|7XIDATeËàôíg,™OÄrÖˆžxâч¾ÿGk3tí¾¿ŸËHgœu>­yäA"êjÏ i¼NÎ]ûø†B¡ð?ûÑuvÅý÷>2eÆÌŠ&R©¬˜šÔž®¤†/¾øÂK/nþʪ*¬lCá½$øÔKÁ&»ÔÚtN% C×["I 3µû¦fïûäDí§W¬üéOœÝ}Ó Dd ¶©Ú¶a‘$Šd“-ØdÛ)A b{6E¹\Ö&JŤI—Ú32 $”NuNH/X4U×uUcÿ4MÓUME1-‰Ä¢›l"áá‡ï'¢É]ݺmýöoK‚`)®¶tZJq\a¹ì'?yéØ:5IDAT¿þûš'Ÿüɵ_½I³­øÓ^ñÅ•¹”HÖð¯ïú:ý¯?»Eù¾xg'>ó’¦ôîˆl§¡IDdš$¤l;EdÑ®ë¯?â? RÔ:!»ëúëÏ˲È4‰¨Ôf¥´$ )¢b{6•’$ѦR‹™ì¥~ÖO–¥X–eÙ–eŠf¶ÍLg¬¬i–e™dY’i Ú¶$îòȾð—<ýÔÏ×o\wÚÒe6;!BLÏ{ôç?~ðŸî½ð—|á _š4©›ˆî»ïïž~êçDôå?¹îì³Ïeÿ袥Dtë×îxãW®½öf"úÍoÖÝýÝ;ÙÀ3Ï\¶ÊDIœ8y2^Ÿg¿IDATõ< ¦QcΊFDO<¹AL‰ã¼öÚK¿ýíú§Ÿúù…Ÿ¸ä’K>3{ögªó/^úÄ“blÓfÁ»;)°%…5.íÒfÈ.5oI·ìŒ­›®#X;®¿vîî#"'dw\­{n‚mè–MD’$ ÄηR©±œG7âlÒOÙóÁ/÷¨ÃŠ®¨jAQeY“¥ «E)Ȫ¬(²¢e2©K¾tø„].ûôçõ÷ßu÷myõ’Onöì9îÙ.?ëÜ%KξâêÝ»®¼j•Etýõ_»ñÚ[ ô_~ŧä‘6™7{îâÊPjÝo×ÝýÝ;ÿþo˜ØÑG¹ƒYIDAT±ò«_”aÉYç®5Q” …<uæ9$ÎÁά6½¸éîïÞù÷<”•¤•_ýâ„¶Žžr:=õôsŸ¸ðt"ÊX´îùõþâ^}õÅÿ}ûMw~ó»7^{Ë/~ñø`ïœ>gªµo ‹ÌtèAÅ&ТM lŠ$¢Ò±%²‹Aæl"˰…ÑïwKöü¹³¼èb÷«–QY,~Ë'ÁD§V…LZ²IØ]2Mû…ž™3¬˶,Ë4-Ó4MË2 ÓùÓ²,˲ÒÙ´`³»·¯÷öÛ¿ùä=ðÃ{ž|ê±xdþ‚EN=º&uKíY"ú×{øKW­Ü\óTIDATJg¤gŸýÕºu¿|þù߸²‘çõÍÛ²ÑÆßH¥¨½ïüOZDd“e¿g¤´Ó4N¥J9+¦H”$¡Ô1!ØdÌî45{î´Žw õ°îµØ] jŠªiªqêÉó–/;&‘Ší%Û*íHö'/ºø[ßþƦÍÏY𑛨îT=ãúr}ïU»ðIDAT½ß#¢9=G¶u¶ŽÀž/YrÖÆë×>~¸ÔÔÍŒïKº3BÛ„¶t&-¤F…‹{VΟ§ž|ºVÅy&ô žˆÙÄÀg^¢¶Mì[¼@BéÔT¶,K°,˶mA®æNÈn]ùeö¸hõ?Q)j°üÛ¶M³xˆ+“íbǯ@–A¥ö¬Î¸›‡vfFÚ–Ín¢ÓS©”$üîí]Y‘UV4EÕTÕ8í´y+¯8³wî4§oƒU{íÚ§Þ}÷k¯½þàÁƒDtÛ­w語Én0ºŸßu×ßÜvÛ-‡ö —áÐàÀ´#¦zFþâ¯Ü¸qý+¯½Ô3gÆêÕÿøéO‚¬ùßIDATfÉ’¥kÍ=­›ÕŠŸÝ¸qý¶½Û>#¢ Ïû£l[Æ]¥°âœç~⼟ýìÑ©S§²:,]zö† Ïz– ÆÁÝ„Š„6)†% d“xÇ ëœ}ëê?qš-o]ý'‹ú!­Ý±{Å¢¾;O9Û4‹=´™LÚ™Ÿ®™äœ?›ÍJ®sÈl"!»hZ¡;OmÒò‰¹>Ô³æçÿ½]VÒ"õá#–,9ê¼s™ÕÓ]êF&*^«@gœ~úÞ={N<ñ˜³Ï^~Ï=÷/4ï˜ ]ž©‹cŸxüñ?ÿúM—_þù3N]Åêpà 7oØðìù/ݲå÷e6h¡O09МM”ѧrN]2l²-ûΓ‹­º-W\í™zËWóÈCDtçÉK Ë6KÓf3éÒ™®‚©kÄîóýµ[WNìêbÅ/‹(àå«Béª/‡sÚYé´0Ó4‡óý{:&´Oìêl/õ ¼ûÖ"š¿x®çùÈP~ïî3çL·,kïîGΟ•ΤÝ#0r^Î&vO˜r†g`Dé£!gÄi!²oä‚Mì´+"Ê«&Qª¬”x¸¡Á²,ÙJ‘jR)CXôðq°”HéLzôN«•†c ]Aßÿ³u_]*ŽÓÝ9ûÎï·nÛ¶¿©õh)}}ÓN?íXb9+¥¥®î©/½õÀw6»b0.Œ©ƒå‘ Í Ó´ÿò/þÏ '.–ÒEü>ÄäÄ«fØÉ{V r J#²AD²z¸qž‘Ͱ۲£î¶ÊñWdZ•¢[¬ ËBVͰÙcFÌÑס= —¢[Fé 1w3Ö4‹ñŠö,@•ÝrBÖiÆ:¢Û³ÈY€(,a‰È YFïò´gÝ/r KXò…,¹­hÏTlD6XGA.2 K3Š!ëd(Ú³ë—å±IDATÕStK’R†au¶I켇“¡IoÏ ‚ ͹A\‹®Ôª*@Ëp7c©t‚[íÙ¨óºüor»I×ʱšTZº§þ¬|sW]u« `œc]±’”bìOOÈRx{VV­¶lJV­jÚ³v ÅGb9Yãh|åk\uδÀ›s¼‹qŽzù_¥ÎíÙh­E÷KÎðÀ ñ´¼b΄îWko«:sˆ®¹Sh]J?7OõÂJ «0¡U ›'dÿ  —öl Ok‘F¿½ýÃýãÇçŒï™g¥­EOžÆ¬¹{yË.{LqææOÿ²kÕ3!šÃe9çÆ²“ ØÀˆÆ,qjÏ6N#$ä†í÷IDAT½Ír'¬ò•Œ¨y}ŠÓ*JÈš¨—ÂÎMò{›SVžˆˆT""ÒÚfe®  Æ,UÕž-Ÿ³þ†’#¢+ &' #J©š§IÈJ‰¿¢šÇ¹Ò¨ÚKh1ZÛ¬™'~®.³‘ v’ûÓ0 "2 ³Xi‘­©Ê¡×Ú”½)8d‰È4‹ÍUQ<œ§Ñ÷7ˆÕ?ëNCÏpϘý­MQ6UýãS%5o|ÓÍU€ª±x‘ ÁÔm1m†'aŠbµ¹Z²þÀåØ?[¶#2~¤Fö£QÒø“Ú¿I$_^5‡d³.³êl“Ø£-¦S—$I”DQ‰(# 1à½Ã:gý­Z¾Ü31IDAT׃ùQpaC<ÃýÓVÚÌôOXŠžNßpÙ”58¢ Ž(»vï_ó£_í=ØïaáQ³Eeÿ¶îÜED¶˜~ùµwGTUŸ:g2i¦¾¤º=IDATmiºªêƒÃ…\.«húàpaÃúÍD4b¦‡òêP^µ”Ý´4Í :üÓ ²jyj±MK‚eSZŠuê$Ú³P²-’ÍÓO]°ùwo²![ÞܶåÍm“&už·ü¤žp8cò”\.;88¢húë¯l_ØÛ÷Ú›[•Ò1´ùsæ³ó G”¡¼JDÇ;ÿѧž#¢á÷ö¼üêÛ)½ :PÖ4-":$›ž.”P|ŒÙ?‹ö,$Ú¬YS®úÂED48\P4]Ñô½ûù·_¯ùѯˆhD6FdcÑüYûGˆhË›ÛTE}gëîaY–Õ9³§ç²)"RT‹ˆ†Fä¡9Û•7£p,IDATùØGªŠ¡*Ư~ýB^V‡”Á!Em³Øte—Q&¨Å*ŠBÌ„e³PzéÕù}ÓþüÆÏ]þÙ³gLëf:,«ë7½þÖ[;S'¢ÅÇXUŒù]{íÛsðÅW¶²· —ˆÕÊ zÞT4CÑ ½úøi'¢á‚²{ßÀÀÁaÝ0tÃÈ"ɪIDìr*ë¡©JÌ9 Éu¨tƒŽÎ¶ÓN:úö[þøÚ/}RUŒÁ!EUŒWߨj‹i"š;sÒÄÎ6E3† ÊúM¯lÛÝ?\P† Êñ‹{Ùäª6 Cºa.Q.#ðÑcó²–—µ^y‡=ðžXIDAT!%¯ÛÅBöl L6‡ö,´#èpþGO8jjw‡nÃE3,Öž5 cþ‡æ³ ýí o±Ü\¸°/•É*¥£Xšnåem8¯ÈŠFD§ŸvBG[f8¯ì904œW†óŠVêÒ%W{6P¥íY^ÇÁj¼»Ê-º:c®ÂÕ'‹ u¤êýô©ÿ~ò?ö‘…^Ü›ËeÖo|íw>`#¤rº-a˜†yÌ‚ÙO¯¥=†öÐЄŽÜp^ùð1óØhUoϦÖp¾xþlJ-¤é‚OžõÐÃÑÁayò„6EQMÃÊ~±x§‚ÀÀeíÙT줭2gëuëÀ÷žÿƉaoÑ*@¬øØIDATn2güú&BØ26,tjYê×|-‹éÙÇܳ‚n Ï{•:…âÓ¢‘sçKoìØ}ð­&tlfAÉbtNÏäe'/rîó‘ãæ;S±ÑŽ]rÜQ‡eöïØE³¦tuXšJDU'"¥tá©ë¦i±S .ÿì…î#oõퟭ[¿ÓúðìŽþáž!qn˜ânÕË_hIDAT¿x¦õÜ€<ðO}¢Góg‡ÿË]“²ë3º, Z½Ul‹°5sMV½˜1•ý®Sv‰®Œg(»JÝ…úàU, Œ¨æ¿ÿí—ßzgà­m{þ°k?õLëþPïä¾Þ#Øί!Øšúùç,;y‘’ž,¨‡fLŸLDŠ}¸)ùÇW|æÒ¡D4ûÈ9,du›Ž>ª÷æ?»œÐ5iši˜²n¨fÙþÙŠÚ³Õä¬'ƒhônýܿŽIG([JÄhÍ!pé<7Ø\(ÿÈa˱\•.]`¡N“P(ý8nuÛ"¬ÐJ·EE‹éßÇó+ZÄj‰S™è½"l¶ˆÔ:­ßŸaIDAT*X)"R¨}NonNïL ùQ/EµrÙ”j§§t¥§t-&"¢UgÍX"J©UÊÍíéfOtÎUt+g˜Bçq‹ç;ÍØÃsNBÿlàî8fØð˜ó);wõ©h½ÅÏj«ÃKD•b6ãbtAÑÕ«t;º?\Ñ¥[ìW¾S×mBBÖÖT¢4niª»KDyKbIçY"R„N*õ”~[ÁT ›bœ?˽=(lOjÀñÝ|ìâ± \9 «Rµä~5¶(†•׊©êYï/'ª YvÈ˲)µP2‚˜24CSša™Æá›è¦WpŸä53¢Ó€ˆìâ¥IDAT1?d‰Çy]5¡®šãÇoÆ"ë--¬8U kV´é+]öZö+…¸ænÇž½·ÝóýŒTå™þša•©Ä0m"Ú?p`æÔi)ÒlM2Y[S ±S2GˆHµÓÎÈžŸ‡ÄlÄœ«ÉYç©¿7ÍyØËæ ±GbªNüc)îâÂê\E‰Ñ³ \Æèžaœ²ü¯Öw[Ä\“U/fX}u *»£wéw!ˆã‚S–»`{ˆe)É|4,ƒˆtÅ&¢ ¿\uֹרýú{Ûw}Ú-î9˜fùämOg‹mdöh¨&¥ËN¡Êã`eº{©bŽYvˆgw8Znù8IDATüW‹‹xs¡¢×X`•¢{$+-«ºjSøšQhE‹gxü g„²“ÄYpÿ§Eü­~Sº;¦t/òWt+—N¹ŸŒÈ†`êëžùÖ«/<ÆÆyæÑo±'ÏýôóDtÒǯ<þ䝸g¥Ú鬠³GYµR™¬¥©îǶlÊs_DT&ª%Ëྈ-_T¡õäÒ)wÔšªjØ‚iX¯¾ðز%ôÌ\èÿ½ßoúí­Yô‘/³Ð̆f;ѧʇIÒóIì¬[öè YÅNå×=¿3Ùè9[±æÆV¥¥#d5fµ`åsℬaX‚©³“X,öÌ\Ø·h™3¦miVá=KüÁž°IDAT=H/ÿŽJ¡é ÙQ4E¡\NS”Œë‘ˆœ'Ä®ìÊ/ŽÛ&âwk`l;°÷Íõk¿åüiY¥R)"ÒuCSÒß*d¦ŸiýDdéy"z~í51Ëí9ò¢#úÎu²Õyâ`ÍØø¿[ƒœ€„šÒ)žü±£ãÿî;[ˆÈÛO9ké 1ç£+ªJd*1×N†NRš=ÏärD”ÊdE©|_rJÈLéš~J%SüÈó·mi‚ØÎžÇŸÕþ½’©ˆˆ=ŠRZ̵Q*“Íd‹¸ €·={·=ýèÍ•N%˜²mÊÅ?ìÃ?Zû“ÿwV=G~aZï¥,PYÂfr¹¶uÆn<IDATlÊΔn[Ó¬ëÁê«çˆ}é†×Ùì`—*+¦¦i¶ÄúLY{“QˆvÿøR"²ä÷Ý3±Íâ8Çü_*([Q)—¥Ã ;Á© º¿@äGdE·Ø¹æ©”­š¢zÆdWŒíùà÷–zÐóÒû쪴ÜL.ÛÖ5ÙŸ° ڳР4U×uƒ…¬"«#²AD¦Rð'¬£»ç¤uøÒs–Æ,7“ËŠ¹öÜÄI™l.,GÑž€V Y‡/¾3™©mYEV©mbñU[ʆó„=^pñß…ÎmôY±a¹‰“²‚ng&8÷ë ¼/"ڳР:Û$"©ƒˆ¨CSõL6ÍGd£¡¢ÄéIDAT³M‘LÊÖ,ÁýœˆSg¿€ë*gwl¯ø× úgøBÎð…œà €äpwIDAT9 Àr€/ä,_ÈY¾³|!gøBÎð…œ૦œíí›S¯zÔ«õ­›[Ä<ëU\oßœ$¬Ì†Õ[¬®úª gY8ÿêUƒ1·E«®pØ„½}s¶oÛ¹}ÛÎ*UÖ˜[ÃÑZlq*sñ+ZKeÛP£  Á‚€…BkPß¹%Y³–tü¬áñ€ÇÖÄÂ[9Èù t6•ˆ3Ü“Ôì‰óèŒé¼êùÓ™â}—¨RD%‡XϲkÀ¿¤Ñ3 \KÎó²Ë¸Òüë0l=Ä)"þª(û§{IÝ3 ¬^X¡þ¥ˆ_½ˆÕåž­¿n³rã@¢fëIDAT_. ZÏÑu¨hÇóì!žÚFWvÅB¥jÍÙÀÉ=¤ŠùÎ9ð ÞSÃ&Œ¨dÙi£G‹žyØLÊÖ0lÁÉ÷6Ž˜Cœtˆ¨jÙåòGFüÂÖCÌ}&zuÅ/.þ>Vös7ÎÈ/UTçóµìÚ¦ªò1bÇ®tVàVkÎúE÷òD']Ì­½J¨®ˆºÏÄ-΂׽Ð*Š(»ž#ZsŒûã¤ì‡bœ —Íǰ ¾ZcÝbŽs´ª·xí+*Uÿœ­Ë»":pk™-¹š„ä{_Õ¥ÐÆï¾u\]Ê.W`{ÊYÏž?y×9l+;ÊV á1”ðêÇóg=û®û­çK%o (®mÖ‘DµIDAȚ¨¨a[õ—Ùº´¹ê²•›½ÉiÆß͢߃ÀOÛ³ÛG«©hZ÷„îùD—RQ•üU1[g´°¾×Z T7¹¿æþJÖ½bž!þ¢ÿ¬h#†-ZÄB•]ØøûXœ†|ÕKQJDâoŽ*ö"„oÝ «V}ãÞûîxôÑuëžÙxûm_iv}Š’ÜÚªWݪ˜O’W ¸}ç®\¶|Ée—-»îÚ;qÝ-À˜£³PI”zÕ­Òù$y@ä,_Uæl«Iç*Q+-¢2a/9gÈó(½¢™'aMVT‡:®:‹*»LÕÅô޾{VÎÿ@~8í÷a‹Ø7X-ç•i­~IDATºGlÓºÁi>üfXi)õ­@b÷1 ×)ø%°ó>iõi–ZÖCÌc»ªS±ˆR»f î*ë7p·:{}7Hô©HÄ)‡ž“§ Þ »5FñL6[ÑT[ál=—Å_ntÃêXzØKþ98çi†-Z`ýËnµ83wO±,Ñë-lËFW,zß‹YJØâxfXé^±3{*±þqÊÖ*UY{Öý6ð\#ÛrÕ,…ŸS]Ñ)Θ•­LXAaWúúˊó\þ¢ã¬´°Õ±N*9ÎKqfè<Ø1Âæ¿æqJ©hU„U#¬baû^Ì"bÖÁ_Jœe Ü»"Ä\QF¼tIDAT•îù­žý{^Ì÷@œ@Œ.(ºzUŸFSÅCüZů §:Ö*ÎEPuŸg-¢×dôª‹ÐøÕnØrDTõ>ƒ­¯zælBö­ˆIz“wYa¢*ã¨{X4`ýW=Û°&¾8C½p96ÎöNŽè¥­® ÏÌ+ß3­§Â¥»G«´c¤Š:ðSцˆ?ϘcÖR´gÚè-R¯õYõvç-Q•·*ûÝšˆöˆ¿ÖÖ‘WÀ‚ûÝCëæ^¢ˆúóSc¡þÉ#Â1¢¬°—êø­}ÝV½ûUT·èOŸ=ÊîÕu‹Ó“6[à¤î#Ó˜ë$4 ’P‡Æ?K¦Ž1ËÑIDATŸpã|M6 î#‰†h€Ó 9Û°þÊ”’ü:4À8YÌhõZ X™IÐ 9 dã"gÇm7SÚ$_Ù3m\“1´ê :|s6æ8ZØ´µÌ³)Zø½TãBõ†_d\K}¿‡ŒÑ;F«=ñ½Lç«Ö±&MÔ2 R_<vá’'H¦ r֬璾ÀSVÃN_ÙÁsfŸgÚˆcãŒq¶oÙ…*;+÷ϬÂfx‰¤?Œ*ª_‹}ús-+9~õ<'‡F ÛÈ·ZÂ6qXe¢WEEûdàK‹öij‹gw*[m¨Q•÷‘‰ÞØsç=àÉ¿½#6­[UeIDAT¿ÐÀý&zžÜù"öѲ³ ‘èjÇlßUZŸÀåªhqÂjî©OÌYEˆ(Ú¿–¢(0àÂVKÙÝ©ìŠ3“ˆÑâLS¥3‰Ym¨Q­ý1·G{‚"ªäi2T7óJ÷TgüÀ†mõ©H‹Hàv÷kd%«(+bgˆÞU 9qŸoJä7‘˜Uª¢æ_]kݤª—:Ö9ÛÝ£1«´ñeA¢4ú¼®î^1«TiÍk‰˜„´Pø5l·ãšúÜ»AÙ&m3*qUÖžè)ß~“ ÿKž!ÛG͈æ9N¡a]¥qzýG‹^ÿU;ZœxЧºÅ‰SV+ÙSÏZVKœc"´ÊIDATZ…­–8Ãýk&¢Ä˜o„8%VGµ¡vÜG¦ŠÍÖû¤mÌ5l½µÞjŒä¬·äÔ<Ü÷‘áØ?‹=Z Z|PÊî?[Ѭ[r_lÌB5lÕµä6â'«+U¿qq€&BÎðÕÌœímݬ8š™³èZ€ñ ²œí}»ˆ?cwà)ÈÿÜ_œgœÀ²g`¯ïF|e*º”èɇÀ¸RÙýº<þûo<ᜨïy6œ‰Ó° ,®l%=ý3‰³P¥”'·@ƒîoP©ªova’óÜß®¬" #ƯËü •$4gùñ_ Iu½ç ïùÀ˜“ÜóΣŽIDATºxéö\\ß°ù££`¼©ìz0÷u‡\ïúQ¶tÏJË¢Ñ-ÍÀyÆ)¥ì:Á•šPåï)Dÿéy¸›¿1xϧèâ×¹êRjŸ?´¶äö´†äæ,Ú}Ð’›³­9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎà$pIDATð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 >Õ>ƒIDATÀr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,R‘²ÆIDAT_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³8ò…“IDAT|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àr€/ÉýÇ3ëÖ5«­jTή\ye³êÐJ6o¾Ãy>*gwlßÕðÊ´8ôÏð…œà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œàK*? 4VoßœfW;Û¶›]¾n¾ñ+7Üx‡{ÈÜÞ#šU™ÆÀ"G@Î&Q ÇÐÍ7~å{úÈ IDATßÿ! ÚÙìºðò“Ÿ>8‹ÜJÂ9r6¡Zrõ욇„fÕ¤Y°Èãr6¹°ƒ´K:Ö]Ûãr6Ñzûælß¶“ˆZã`|BÎ&ZBâ©öÖ(Ú³ Á4x= gÇÞÐÛ7ÇùW÷™‡©ïÆ3ëÖ¹Ë.þïÚµÀ/à¹7_tŸLËDjSöØúBÎ&Z]âÉ¿wnß¶“ýkØŽË£ ÷é™ñOÕ sl寳ù¢ûdòe¨F¬ë̽¼cÎ7H4§¶êÉ)ÞûÍÉAgdÿZêS÷wÈÊ•W®^½fù²eîN\²áϬ[çŒà<_½z3‚cù²elZÏí›íIDATð1m÷'[ÛÎÆòlÊÀ-›Laû[ØQøÜÜ¥FÎ&ZÕûDtÂú÷9÷ÞÉÞ´þik ý?0ÂÌí=ÂùñP–¤¬¹Ê"˜¥§óÈ^r~ÔÙó«£l„ÀNšÀX!ßFô?mlñ/Bô½B9›hÕíe§òïse¿×׸wòس—/[æiÒº¿þ³v‡¬¬a¿ëÌÆgi›ä¨­teŽÝ< SE7Tsûv‘³‰Võ—ôø=äû´˜gÒÚ³4º¿Õi«úÇ ËV§÷ þ$ çþm´³»ú5wÙq,ѪþvsÕñc¼–ãfœörÖ¤uÙ±}׎í»V¯^ÃR’N’ IDAT5f=ãbç0,_¶låÊ+[&dc4ayªmJÃíÙD«ñíá9âðôÏú÷f÷O §®ŒÚ¹óÔýõnïNï3ŽÿšÓÛb ;†Žzò⋾ž8lnäl¢Õ%žÂƒD <À6y¥u¨‘;%|ô¨r6Ñx|ÝnÊÛ²îíÙÀË ÆJVÖ©:á8X¢9ýJ­ñXGìx—ç_}‹¨älÒùûÚÆî#Àø„~ƒú|†w§IDAT„ªèW1 ɳItó_iv¸‡$Xäq 9›Dì— [Øxø ñÀ"gÈÙÄAWfKŠùÔ­d.rà 9 Àr€/ä,_ÈY¾³|!gøBÎð…œà 9 Àרën¿s×?6«­êpÎ.[¾¤‰õhUÅœ½ì²eÑã@u„U«¾Ñì:´²ÿQÉÇîÁ./IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/share-working-copy.jpg000066400000000000000000001115471203611042400327100ustar00rootroot00000000000000ÿØÿàJFIF``ÿþLEAD Technologies Inc. V1.01ÿÛ„    $.' "+"(6(+/1343&8<82<.231  1!!11111111111111111111111111111111111111111111111111ÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀŸåÿÚ ?ô »Û-V1{«$·©9ó-í +1ó´•È<žz8â·Qka6hô/ÛÿãßãUiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p#2xxM䧇RYÉH¡’Bl…Î+9ÔTþ)XÖÔNQZ/—æ;n‹ÿBœßø?øVX§üåýZ§—Þ¿Ìnï R+Ÿ ˜<Î̆X²zàÇ5p«»FB–¤#ÌÖž©þF¨ñ}¯†ÀŽöKÛÛIþ{c€òÇÏάÌÀ‘’1Ôò}€§Ì ½6"t»6Çgÿ@w®ìVñíoÙŒÏÞåN+¦•;üa)AhŠž¿»¾’[{Ûo-ã•Æ0Ãð¥Z Ä…$ÃPÕncÖ¤ÒtËn®¢¶ûK,×Nå''ÊÙ9çqÏ5Í97Ù4¾òÚµ¯Ô!ñ öõö“y5­œÖ­GæÜ(iË®~U8é8Í—2Ó»_pã¿kþäh½å‚_­ƒÞÚ­ãt·2¨ñŸ»œô¦¥wdMÄŽÿN’ìÚGh÷ °0¬Ê_+÷¾\çŽþ”¹Õ¯?m í>îÇQWm:òÚíc8cªáO¡Áâô¸u±…¨øŽæÊïW ¦G-¦åµÄ‚ãl…YC©·<ÅB©îó=¯oëï+•ÞË{_óÿ#au=1¦Ží A4»BDÓ(rX£ns’8­Óqë¯á¿ÜBwŠ—õ¨äÔ4×7"=BÍÍ &p³©òq×w?/CÖ¡ÏÝæE[^^¥[ fÕôK}KSšËNIÉuäoA#@v“ž?¥S’“bÞöè[¼¾Ó¬cŠKËëKdŸýSK2 “ýÒO=GJ/irõ—èU²×4ËÍnïH‚â3wk€Ê]~rA$(ÎNÜsÇ£.dÚéýÀî´Ÿ_ëþ¡­öséNàg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹ƒçý›Z½ä–$3.æˆ ê i’¹ÈÎ:db¼¬E½®§Ó`àå„Io¯æÍÃg¬ýª8l¦ŠæÆd2GªH"xÊ0ëÓhÆãÈÚ7ùkئî¶9=¼aÇßZXÃÕn#kÈ ¶º¸»€\Ä©5ÀPïûÅä… :ôàqŒóJ¾Õrís¹ÂPÂËŸ{2¿¤vŒs'þÉ^Â>Xî4 <Ïáí=±Ö±óÿ“vcZ;œO‹¼âc3¾motŒ~ë,A‡âýkÑ¥‰§kKATŠnñ4¾xTÒ<ûít[-Ü˱b‚$Zç', dœn+ F"3÷c±1…øáÉõCäÛh7RÞGk-VÞTCo.OÞ;ƒ…g'"¸ur¼t}üºþªßæk¢Vz®Þ} íCÁºåů‹£’ÏÏŸP¶·ï¹™Ò0¿Ëó×Rø-ç¿Êëô?u«ÿ-¾zÿš)ë¾ñMÝöé4ûÛ“ Ý´ö¬—AaH“ieÙ¸~ó9ä©ö=¸¿Þ&ÿ™ßÑè­òþµ!§ìÜWò¥óëéšÖÞ Ô§ðߊ¬ZÝm.õ ˉ-ˆùÑþé$gŽ=Fk&¨B+u¿þÄÖ-{FÞÚé6üË>ðÅôz„šŽ¥£o8µŽ×eÛA‚Ï𜜞èrK™¯´ïæb“\©ôDmà[ÍGÅ 7òÝ[iw¦ÜªDÑìºU@Xà¸À+OZÊšJ÷ó7oÉšIê­Úß‹ÿ2Ö›á+¨üGâYØ[Á{ i8Ú~ì[N1ÈÁõÅK¼¨Ê?i¹~;~£‹Qœ_D—æßù^𶯣 ¥Þ–Úzh–’Á<åÑ’ä¶Û´“·ß69=*å5ïÔz^)[Ó_¹ÊÒQßVÿ?ÎÿáÏê÷Z.ƒ«é©y4Gu‰gäy«¾BC0ÚAÆ|cê\ZÑõ„Wü?üŶœºI¿øc{LðŽ£á«Èf‡IŸWµ—M[A–2öì±V-·1ÝTòýÞ•wÖqïk>–JÚîüÈ_fKK_OW{®ž_©«£hZŽãmRâm6Se©ÇŽhŠ„¢*ÀÝz½ûsD£(ù·ë{—Â×k~,ë?³O¥+Œ?³O¥þÍ>”\û4úQpìÓéEÀ?³O¥þÍ>”\û4ÿv‹ŠÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»EÂÁýš»G0X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓýÚ9‚Áýš»G0X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓýÚ9‚Áýš»G0X?³O¥8ñù>,¾·2¤¥ˆ4Œ¥„`Æ™m£““Ž3Œdu® É:šŸO‚rŽr+½6iÿoijtk{´èm‘pdâk—8ýöî0À¨+Œcp¡Oh“²Z, çRrýæþž_×ü>(HSÄ6Ö¶—l¶°ˆg(QK¯ÞŒp0qp&)*‹”雨ð²öªÎÌÔø§oös¦®1Ÿ4ÿèêÁŸ&užÕî×M³°°ÒÞé­¬­ÝØ:.7Ç‘÷˜zʳq[¶3OûGZÿ¡~OûýÿJ˸ÃûGZÿ¡~OûýÿE—píkþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜ5¿Ô¬ä³Ô<,.­¥x¦’Vç# ¿¨Í'½Ø&ÖÃí®5KH o ´Q ªÍÿ¾êŸ¼îØ’²²$þÐÖ¿è_“þÿÅÿÅÒ²î0þÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜûCZÿ¡~OûÿÿE—pí kþ…ù?ïü_ü]]À?´5¯úäÿ¿ññtYwþÐÖ¿è_“þÿÅÿÅÑeÜAý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý¡­п'ýÿ‹ÿ‹¢Ë¸ö†µÿBüŸ÷þ/þ.‹.àÚ×ý òßø¿øº,»€hk_ô/Éÿâÿâè²îý£­п'ýÿ‹ÿ‹¢Ë¸ö޵ÿBüŸ÷þ/þ.‹.ãíkþ…ù?ïü_ü]]À?´u¯úäÿ¿ññtYwþÑÖ¿è_“þÿÅÿÅÑeÜûGZÿ¡~OûÿÿE—píkþ…ù?ïü_ü]]À?´u¯úäÿ¿ññtYwþÑÖ¿è_“þÿÅÿÅÑeÜûGZÿ¡~OûÿÿE—píkþ…ù?ïü_ü]]À?´u¯úäÿ¿ññtYwþÑÖ¿è_“þÿEÿÅÑeÜAý£­п'ýþ‹ÿ‹¢Ë¸ö޵ÿBüŸ÷ú/þ.‹.àÚ:×ý òßè¿øº,»€hë_ô/Éÿ¢ÿâè²îý£­п'ýþ‹ÿ‹¢Ë¸ö޳ÿBüŸ÷ú/þ.‹.às> ð´ºæ¢×Óè·öÓ¸Í½Ô œ“Î8©•8Ë©ÙCV„yc·™›ÿ ù¿çÇYÿÀËzcçGönËñÿ2Ηàÿì­B ßìFáà`è“ÝÀT0èpäUÆ”SјÖÇÕ©G¢ò3~&jGT·Ó§h »Ç5Ä „ƒ‚¥èOrkx.[œ']ðÿþ>gÿ°nŸÿ¢Ú³Ÿù‚;Ìa@P@P@P@P@P@P@P@P@P@P@P@P@ L€ ( €°Z‚IE8«Q&åv«ä¾8ÿXì%ÿ¡¥ZÜguðÿþ>gÿ°nŸÿ¢Ú±ŸùþŽo|gñ ÅöZ¦«©ÙZhþ]µ¥µÜ–»7‚|ÒP‚ÍòänÈ硬i«ÑuÕ¶½}¶õ*£å«-­[Ûúþµ‚ûâ»kmâ9ôß°\YxUmã™®bf—P-÷Ý]\,`ŽGÊÔÝOwÚÉhäÕ—MRüßÜ ¥ì“ÕF÷~—_–¥mo⟈-ljo´ëm0XhqØÌ±\C!–U¸ J–‘»®;t¦ýƹÿÇîëøyïÒÚ¨ûüª:^<ÃüEñ?Ä63x¦â (Øè e Žhdi&YÂän#=vþ|çþw»¯áç¿Kj/•GKǘŸRø­ÜêzÔ^Ó|åÒD!m¿³.®¤¼vœ "ùaáwž¾ÀiÆí«ÚM[m³wØI©$¶n7ûÕÒ·ë¡©¢ø¿Ä~,×5‹=?JIŠÑêvòI,“:–*vºyj:g xÎ; ŒUœ›ºækNÉÙ¿òõQµ“~WÙ™Sáeçˆo|_âô½ÖâÎÏThÌÅ#0Ø1“¨ã­œv©£®2}ßéøv];Ž¥ÕV—hÿ^¾}{_õÁñ>çN[Íx@|>òÛÛiRÜîûFæÛ!=}ØméšÊ<Î5mºµ¾åøKSWdé_fõôÔ—HñGÄ MCCð“A¥Í«Ï£}®iu (âF{!9ùÈÆKgšêÒu&ºF×·ý».®Ý:í£Â>í87Õµø][ôßR_øZØÓÄ&ÒÅt„Ö¿²ÍŸ•'Úvô2y›öçw;vtã=ë*~ÿ²¿ü¼ÛÊ÷µûí®ÅNñU;Ã7¥íÛ} k\x_Z×ì­´ë!©ßëéh÷P[\ÈŒH%åhDŽÌØà"œûR¢ù©Â Eyùü6üþäUUË9Iöã{}Þ—fÜß¼Gæˣ¬:•î«•õÕŒö¶ÒÆÜù¾T„>@ãnî§9ìj žPŽÍó_®‘¶«Öúz}Ó'È¥-Òµºjú|šÕÿÉãË¿Ùx»ÁÖ­ÙÂ×wò"›Ky£ŠUÚ„y±yß6 o—w¡ÈÎ)RÖµ¿»/N¿¥½qÔÒ“~qü­{Æ­WMøW©ÜÚêg¿†(ËÜ[+ÄIÞ¡Šaò™Ï©ãŽk*îÖåÚèÒŠ»iö—õó×ÈͶñ?‰mïü/á´¹Ó¦¾Õ­ Ó_Íg!HâXó´§—rG-¹G=+ªªnµHGì«úÞVVì¾óžÔa/æÑ}×w}Mï‡Þ*¸ñg„$Ôn Kk¸$–Úa; §“<àõ5Í]¯«ûHiÍúoþFÐV¬é¾’±ã¿ÿ±æÿ—Ÿ…ïo]µ ¾ïµåûŽ×ôÜuÇ5[fïF× µÑ£¹º–ÒÞÆ÷O¹Ý{\ŽåX!'ÓhŽyÍbß=Þü²mmm^¾{u·CT¹*«mxÙ÷»_wãÒýNG᮵¯_ëþ´Ñ¯-t‹9´«†[Žy­WlÒŒ”i²ÌqÔ·Ø“u*skhÇôÛ·¯o¼æm(Å%oyþW×ïØêÿáhkCNý’Ähñë_ÙfÌÄÿiÙÐÉæoÛ»w;6tã=ë>ÿ²¿ü¼ÛÊ÷·®Úì]KÁT·ØßÏkúo¦ä¶þ5ñί/Š?°ì´#yqïÄÆI•”PªØ,Hääxš›Xu]ùþü“}ïùëÊ_d¿»øÿ_ðæ—ƒ¾!\ø»_Òm4¨í ›iB÷S|1h¥c´D‡8p$ät8.j–øU­Þï]~_‰ÏÌù`¾Ó½ý—ûÿЫ3@ € ( € ( € ( € ( € ( € ()\âf‰!’B€·hýH¬œõ²Wû¿Ìµ/póäÿŸI¿4ÿâ¨ç—ò¿ÃüÕwüÿÈ<ù?çÒoÍ?øª9åü¯ðÿ0å]ÿ?òܺõµ˜~)ÿÅSç—ò¿ÃüÕwüÿȯ±ÇÙåŠÿ>i+ü?Ì\«¿çþCb¹[„bŠË†Á Ž¿…]9st±2\ kR”ÀòoǬ?ö¿ÿÐÒ­n3ºøÿ3ÿØ7OÿÑmXÏüÆ-_ÁZ¯©I¨ÝÙÊ—’ÃäK5µÔÖÍ,Ýs.ñÀûÙéY$•ü÷]Ëb¹žž[yßøÂ÷÷5Æ–˜±$±E4‘E2Çþ¬I0G Ûp< tªNÏ›Îÿ>äÚÉ%Ñ[åÚû¾ð/†ï×V[­48ÖDBô ¤Q(‹îta·þ{ÔÙZÞmüÞå'fšè­òuà/ ÝC©Ã>›º=YaKÁçÊ<Ñ<¾Æ0:c=óN^öýÛù½Ø£îÙ®Šß!÷^ Ð..žèZÜ[O$K ²YÞÏleEPþ[®ü2Ù8¢^÷5úêû}Û}Ô’é·ü9×€|7qpó›`’HÚSmy4tj0Aüqód㊮f¤åÝßçÞÛ $’K¦‹Ó×rݧ…4{-vãZ³·šÞöåƒÎbº•#™‚íâ ±ŽR½yëÍL}Åʶ×ñܽ¾_†ÄçÃúYññµÿ‰¢Ûý”Oæ7ú¬çnÜíëߢ>ç5ºî9{Ö¿M‚OérxŽ/=®uH­Í²Oæ7’NݹÛÔžqš#îs[®ÿ×È©'ÓTf\xÃÿm“QƒJG»ûA½X^æT¶k¸(ý­„÷äÒé¥ÉÓo+öíò´ß½×ë©á¯‡¿·¦ñ|6w3jÚ—Û£ŠÖW?eÛ÷ K„`㟘úšqJãºmßm_ü7õaI¹NR{4•½¹?<=sg-µå¥ÅÚË"Jd¹½žiUÓî2HÎ]Éû¤u>´mf´³¿ÏOò_pwóVùkþlKøzâÞ8®-neh®~×ïpÓ¤»BîÞ8P1»J6i®—_~ÿxtk½¿ kÍÆûE“G¾„ÝXË’ñÏ#;:ã¹;‰ÿk9Ï9Í)¥=Çàà?kH ½ßú µ—ûFçηÊí*’ù›ÕvŒmoµ9{Îïw£óõïó%$—*Ûü¿#WGÑtíI‹KÒ­ÖÊ%*±&{õ$žI=É94O÷ŠÒÛaÇÝw[îc»ð¯ö¾ˆ4­º}­ÇÚaŒ\J9sÊû·Ï­;»Æ]c°t’þmÉdð/‡žââeµ¹ƒíN$ž;{éáŠgãæxѱ8äsß4EòZÝ×eè¶Bjêϵ¼íë¹á/†VÖWú•Žöi5™u4K™ŒQÆÒÑ&ñÏ;OniRýÝ8%ñE[þu}ùÉôvü;›çÀž:™Ô›ûÓsöß'gÆ<ß'w—¿Å·9ç­ýݹzmå~ݾA/~÷뿟¯pƒÀ¾†î+Ÿ±Ï+ÀÎЬ÷“Í,ùÜQÊ¡9<€1Ú§•ròô·/Ëk_}´3ææó¿Ï½ˆaøsákh4ø­4ù­³Eµ’Þöx¤\’ÃÌW A$ðIê}kNgÍÍÖÉ|–ÄÙ%o;üíoȘøÃ_Úo:oï~Óöß/gÆ<ß'w—¿Å·9ç­L=ËrôÛÊý»|‚K™YÿÃÛ¿™¡£xKÐæ¿›Kµò$ÔnæäùŒÞd‡«|Äãè0)|4Õ5²Ù ë.g¾‹î9Ï…>“Á¶Z£Þ‹Q}©Þ<ò Fci“±°'óª¹F×Mýá’ ûÕeS¾ÞŸævÔ€( € ( € ( € ( € ( € ( € J``jšÔZEõÑdÞïå„\ã±ÍM8Þlrz"ÄZ†¦°Ü=Öž"ò¢2) Ävã>õ¥—FI—ˆ¡¸Ð&ÔˆU0î  ñ‘Ð~97 ;ô2o<]$]µãÀƒí,ÁW' «Tõ±7 ïF–vWVà:]8\Ð÷¦¡¨\×Ò_tSûNÃô„œ½J“Ñ™Ôw­¬I“ÐUXW<§ÆÇ6p]FÿÿCJkrŽëáÿü|Ïÿ`Ý?ÿEµc?ó;Ìfu–¿£_êéö:µ…Íìómá¹G’<ÊF ÁÍ Þ\Ë`~ë³4h8§†W•!–7h[dX€p}8ô"Ž— ´HPI É&“i+°Jä?n´û4W?jƒìólKæ ¸€¸=IÇ\Цš|½C¥Éé^úúßO‰%»“ËG•!S´œ»°Uz’ uÿåÉɾŊ(»ß[¦¡ƒI‹™bi‘6žQJ†9éÕ×ó¡k{t·ã{~L–,P@fXx‡LÔ5K6ÒážæßvðbuS´…m®F×ÚHi8'GÞ2ÛþðÑë°KÝvÖÏòfŽÁ³*Œ“S)(§'²M»" ¸5 /-Ì·¸e‰ðFåapyõ¤¢âÚ} M=‡MqM4q4¤¬aØäHëÀ'è Ci~c± ž©e{pðZ\¤ÎÇ9ÙʘßvÆ ÐƒµºÕVzù;|ô¨_a5]_MÑ Yõ}FÓO…ÛbÉu2Ä¥ºà gƒSt‡g¸£TÓÍ»Ü ëS lªò —j–ÁPNp ܸõÜ=i¿w}µÛÔ[}JÂæi­¯m¦Šì‘nñʬ³ ;?7ž= ;4íóùM™j×@ñ¤ÓGJJÆ€.@$ž¼~€Òm/Ì,: ¢¸‚9íäIa‘C¤ˆÁ•”ò#¨ªi§fHçžtW¸–8•™P` ³ÏrHzš:Ø<帆ÎÖ[›©V!C$’9ÀE$Ÿ`)JJ*ìq‹“IéZŒ¥’]Ú-ÂÄÿwÏ·’úí‘U±ïŽjœ\w%I=‹t†^[û8eh¥»‚9 (ÒFóµ8ÿh‚©éB×oëKþZúб@P@P@P@%08¯¾†úå¶½z,·ù^D¹Á µ³ÛúÕRRæn(–ÖÌÈð6½8ñ]·o©ÿkiÉe›…Æ:g çq[Ô‚åæjÌ”õ±ÊëΕ}©ø^ÄÜ^F"û¹%<§å[F ¥"¶‡AãÖNo Ù. bqñPTSW»v±ÊkóÜhZôz<…±ºIíÉ?ÂN?¦? Ö+™\–ììzÞ€û¡»ç¥ËÑkŽ*Íúš_CEºUˆe0<³Æ¿ñåoÿaïý ([–¶;¿‡ÿñó?ýƒtÿýÕŒÿÌhìk1že?‡µÙ|1}t×RBö3j3éö¶¶È‘ÞeV2%W$UÎTäã•hÓïh/ExÞÿv½7ºíNÎr]/¹iýoç¹7Ьõ; —·±“Ä2ºÙ¡Ò^ ®%ŒÝ™¿žÀ‘Žcâ_.à1Ȫƒ÷߬}9zþ·¿½µµ#ì'.ÎöÞöÒߥ´½îfë+¬>­}mo©jqéqj, ^Þ4r`e\A*Ê-.JpGÝÆpÖ+^Žß)Iz^ÖÞû?;§®ú_æºy_·—CkM†iõ¶×î5û›§‚4²žîí­¤ŒÂ3¬xDrþa"S¸|¾‚XóÂj+Þ|Þ›in–·ã!Aò8·¶ž»õëÛÊß1tK{»?‡:5¶›¯ Ô3Ù¥Ärùþj$bP<ÎvcwO“Ç¥ysMJ;{Þ¿ ­túÞÛë{y˧¿ü·Ë·çr_†§PC|·cU¹ÛGíWÿi‡Ï“ç,çËa–ÍãzR—»Mò­¶]ôîõ×ÏñÔ§­O¿å®ÚhúíóèÎR%ñ Ýò7‘«gx'šÚKkÒ¶²­Ô-´<îÁŠ©š5E ŒŒíh>W{-Ïàšë®ößË­Ê–²ûôù«ytéçähj~¹o xuÿZŠ)íLš„¦;Û¹–ä¤{C,¤¨0ògï kZ–ö²Iè¶ûõòìÕÕ·JËBcðß­ÿ mÿÚíæ-ܾ"þÝÓž uFšÞKH‹}ŽøGy æLãx‚/¼À£#8ÚNG—~i8«7ͧEî»jôzÙéþd»(%éë¾ßwW¿Ü7IÓµ Û•u}zÛU<ëwy~× W{â`·Èrž#ù Œr(”£N2œ6\_wk¶õ×­ôÔ»sMF]ä´èž‰¯Ó¯s¦ÑnuCÁ:†³jd]KTŽK›(÷ˆLDªÊ2XöÜÇ­£ÉMtß¾®íz¥¢óB¤ù¥wéå¦äÝÝ÷µŒ Ï'Ê´û7ü&ŸÙ~TÞ~?´>Óö­©åç?¼Û3î~ïv3Ú‰ÞòäÞÞïkß]þVæÒ×ëqÓéÍÝ_Ó^Úo¿.»t%Ó4ÿ›q¨ê³êßÚ±j6HbŽyDYHøNÆ\™2p@ ‘ŒUÚ<êÛ7;ú{Öôég¾Úìg«ƒòJÝúoçmÖÛ™‘hº¾m15è ™®Íâ¥ÅÄŒ#ûr|Ñ«‰ &B €Í’FO5œ‘RÚÐü¥uÞ×µÒÙOYJQÞòü—ËÓÎȹáýZ{=jú{oøH®tt’âÞ–+ˉC³ dpd^|Ì3O#<̹º´íò”ÖýÛöò ×dÕþjÿÕ»ùŒ°²ñ7ü!Ú…ëÏ­.§þ‹Ižv+•ng)e,ßë9R;‚Ƶ«dÒ[9;ú^VÛ¦ÛtÞé$LnÛôÓÖßÖú^Á 7©km£â=CJ&ãÒËPµ•fÛ–¹šrŸëHfm™8'€+*©¸I[^];nï~—Ù+ô¹PÑߥÕþºØÚ–bÇá߇ŸM†íoìíàGµ@Á˜´&,:ú+:±ÏM™í[×\õÚOI6¯Úý~M/ÄšVŒkmmèî×Í]y²¥­—ˆR¶´º—T{X&ko2EF°Ü•›#9ó"ÿ¼½r+ Þ¤%¦­Kï\‹åv¤×“ìTo %}šwõÕ¯E¢0t=ò= þâÊ?Z^Yh¶Ë 4·Q“tžnåï8~dÁàs[¹.nu³šÿÀ}ÛÝ}÷¾ªÝ Qוö—ß­¬ÿ>z¿ŒŠÛßi×èú¥½í¼3,3Zi¯{ݳtr¢)`Õ<?)ù…a+§.U{­žÏþÖÚê´q÷ ”»ßçoø/§Ý¡4RmONI´ß³[ßZÁwy<«yíÐ,zešH›ž)Ö_ÅK[s5æå[|µ~¬qwå}쟢|ÉÛÏTûió­á½RÒ§ðtQÙN,\-Äêc#ìsý•Õê}˜6ya[ɯm5ÒÎß9EÛäîד¶Ñ3kÜ¿VÕþW³û´~‹».k¶ZçÙüM{e>¨.>ÙVêVU¶Û”Ųî8ó9R9 A5δŒêÝý/+m­¶Û¦÷I#Wñ;tZzÛúßKüÌ( ½³´Õµ^Y¼RGž§m*°0i˜ ¹ Í·-ŽƒRMÆJ?•½[—ÉtZîµóѧÒúýßÖß©gN_Gsdš¡Öκ²Ù„1™ —Ùü´ó÷íýÉ|ùÙßónÛ·ŒUM­\½¹Û•v½­mo{ér>Ï––ïñ}«k¶þ[j3ÃëSßZÛ9×ç·‘¶Ý]Ü5ݸ˜˜'Îb—ýQ Pf61“´§EHóS”Wò´¼ß»gw¯Éùêõ4¿,Ó󿦻i£ù|úì­õ;M ÒÚÒ/Cs› z|cí~Z_D‚\ñ³>^7þëní½ëne*ŽK¬•¯ü½~{ÞþöÖège´ö÷¯mïÒߥ´½îtžN¡¥øJÿ\¹»ÔEõ­ì·o÷Rhcÿv¨Ä(V‹ qÎTäàcòF›Jú+÷m«}êûw]Ûe¨¹¹'§nÊÚý×Z¾Í—®àÖmüeûËÉ59®àšãÊwfMó«Hƒ„U%qÓh¢´\-»Ù5~íAëóz¯;9))K¾«É]Y}ÛüÎfûBÕ_Âg•µÛ·Ô<;#]Ç5Äòr<¢«ŒüŒrãjãpÈ óZÍGÚ4¶R…¿ð'wúöZZÚ «K¯½ùiÿî[º³Õ4ým­l[Ä uÜa-=ÌÖŸdÚ¦mîIBßëÖùÙ·µŒœœ·÷¯÷>[ä»k{ßK„RI/%o[ë.ý9vÔ¯u¤k©áí=á»ñ¼$×Ru9sx;†zýìGŒ› ó[I%UÛdáoNgÌþíú%Ù%eb¯Öÿ–Ÿðû¾á­Á­[‹-Z[U»‘­ïÓîdʈˆÿq"1ÞBÛbí#˜É¾UmÒ•¼ýçmôÑ[Wvïê\tw}m-5Û_’·ä0ZêãU±Ô%ƒZMRòÏJ,ñý DYd>zȪv.Œ†«c«V³ÒsTûÉù[“Môø—®Ý —ðãÍÑ[Î÷ÿ/Ëh|Ap¶°Á'‰b’Eu‡§]³›˜÷IùBìó²bù6íö¡(¹$¾ -ßá•ï×ùoçð—6ÒÍïzZêÖééå{—‡^çH»»Ó¦‡U¹¶“R1ZK3I?•¯¹¤rX¦àê 'æ }]ã÷÷¿ ;|íky K•¶¶Óñßþ ÓÒP@P@P@%09-kI†ïZ½mKA}NÞD‹ÉpˆÛH62ÀŽ£¥\dã³3k]Pi¶Ði1´z_†®mŸ›ËŽ0[êwdÕ9·»Û##V¼Ñ`Õ’ïQÒV=E+$¢1p2ÞȨ–&—,¥aò·ªBÉse®ˆ§Sß}·Fߺsp½ÁàV”ëÆJðd´Öèn£fš„‘K{ Í;ÃÌm"FJý>ojÖ5-±->ÆÇ†VhmnMÔ/IpΪøÎݪ3Á>†³êTS±ªd^Ô\«zUòßÿÇ•¿ý„o¿ô4¡nZØîþÿÇÌÿö Óÿô[V3ÿ1£±¬ÆRi5fm;O²Ó-V×M´·³·RJÅoÆ€““€š«°êßrÍ ( € l±Ç4OȲFêU‘†CÔÜRi5f4ÚwA,h©„EUQ€ ªm·vJI+!Ô† í­ý¬–·ÖÐÝ[J0ðÌÑÇ¡SÁ¤Ò{6¶§XYé–‰i¦ÚAgmvCo'' 0$š¦ÛÜ”’رHa@P@PfMÂÜ£3¢”Y ʤ‚@=pH{ 6J( î †æ#ÌQÍ ”‘C)ÁÈàû€h"J( € ( € ( € ( € ( €˜ºÜº„W#ì†èE´ªc?ð3Ÿé\Uþ±Íû½¾_«4-µ2dÔµÃM¨¢[cþÛýrÿ˜í<35»Ýê¯|AΜÎ7ú´þï•eiËÛoòý ¶žéJêaˆï¾ÈÓ*aÏÙ–":¿]ßÒ¦“­Ï/cú~£’Z\Ún?禥ÿ|[ÿt_ýrÿ™zÂI¥L~ùŽzÊ7þ;ÅzwS“÷›ü¿C)$ž†ŒPs“é])¶ITIåž5ÿ+ûßèiBܵ±Ýü?ÿ™ÿì§ÿ趬gþcGcYŒ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € () °E'ßLþ4ÐΟiÿ<År¤ú“4…æÓ­¤ï<`ŸÎ¡Ò„å÷™ ‡HÓ­ÖPB’#@¹üªáÃáVly²¶ÿž+V+±U1„P£Ð ¢AºS”ÄygãÊßþÂ7ßúP·-lwÿãæûéÿú-«ÿ˜ÑØÖc ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € CÒ˜ ?ã@†7õ¦mÞ¨CšÃLÍP†·J`2˜,ñ¯üy[ÿØFûÿCJå­Ž«Ã1E%Ëy°Å.4Ûy‘«c÷mÓ"²Ñ½ök_ùó´ÿÀtÿ ‡Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…fµÿŸ;OüOð ìÖ¿óçiÿ€éþ}š×þ|í?ð?€³Zÿϧþ§øPök_ùó´ÿÀtÿ >Íkÿ>vŸøŸá@Ù­çÎÓÿÓü(û5¯üùÚà:…y·Œ€]>Ø*…P¾(À:t¼Du¾ÿ–ÿ°mþ‹jÎ@馊4‰–U ìËú’@æ¥&öin6˜&’Xáš9Û*£cl†Ž<úÒ[\6v% € B@“€:“I´•ØÆÁ,s“A"KŠ`zGQM¦˜„šh­Ô4ò¤JÌ` ±8žäl”µäRÜG›žÖO*Q‚6¶ÐØç¯ ´-Uÿ­ì;Ð3RÌpÉ©””So Ò»²"²º†úλWßè²FØ#r‘pyéW(¸»2S¾ÂGyÞÍf’fâI0xV,ç§;[ò¤µW^Ÿ¯ê7¡=! IÀI¤ÚJìe wGÔHv«cw—òÇ‘pó`¼¸ãÐvþ¿¯U÷‹m ¡Ô¬'¹’Ú Ûi'ˆ’$•K ‚H#GÔWVrè‡ÖÝ@ê6{­gGûn~ÎS楲ãÏNž¢ùzïù/Õ ¥Ä¿Ô¬ôï'í× n&fTgár±ÉèÕ''(Z»/ëT¿6ƒ¥ËtPpMé¾ RT Wr0# àŽ;‚?J<ÃÈ&š+u <©³Ø(,Nç¹$G[%Aµ½).ç´mNÉnm“ÌšpâN>f\åG#“ê(Z«¯O˜=7/Ð@PÞ@÷³Y¤™¸…GL‹9éÎÖü¨Z«¯O×õ _]Á§ÙMwvþ\!’GÁ;T “Í—}>ñ¤$÷–öó[C4›^éÌpŒ¹‚–#Û…'ŸJ:Ûçý}â¾—èX € Ži¢·PÓÊ‘+0@]‚‚Äà{’@u°P@Y^A}šÖO20ïpG̬U‡>„GDûë÷†Í®ÄôP@P@P@P@æ>3ÿ ûßèi[ÄG[áoøùoûØÿ趬äÖÖ,£Ô4»›Iƒ–2>^ÄzpG¸¬*]E¸îµ^«UøšBÜÖ{~N[K›MG7©­¤7ÒÜ^g‰„æñ°."ùÀæ@Ýz Ң唣O¢÷{^úù]èõÓriôrﯦËåé®Þaïˆ!ÓÍŽ£¨Ú¬·–’‚!Ø|ÜH£bÂL®{ž0sJ®ºC§?å+zî­ÿ˜hµê•¾þ¾}ÍŠïKø[s<—Z‚êM3K,ó;L’ùc8ÉÊGAŽ{g5u¬¦’Û™mþ%ý~ [B©+»¿?Ô̶³½½×í¢°ŸÄ) É" Ä·QH\E1|1"¡ý×¢îû¼æ”›æÛ[ä»üïkë½ôzÃ~ê¶ú_úûïo.¤ÑŨˬ¼S>´“î…ó<“Çl-pÞQ‰ýV ÿ{wzÆMª-ö‹¿~k¯Ã}´¶æ¶÷’]Õ½-­ÿàëͶ†n‚uÛ«Í2âëTÔ!Ý£Û‘gwqј“pgI< KoÈ…†sœmÆóMJvÞòÓï·—m­ªûòÑÅvÿƒ÷þ–ù–®-ï‡Úâñšœ7Ój ÆñFVQæ@!1.ÀÐTû©ÅÇáüu‹Zõß{iò-ßÞO{?MþïKëó¹«ã–»{]>ÚÀ_à ÆÎ.aKÉX!tlœ“ºFÀÚr2xŠœÜÒ¶öÒÝ_ä­úé¥Ç (®×_wçýz~±ÖnµˆæÔ×R·¸”fHI„6 oÆ3È~:0ç‘ZOE>N—·ÎSý-åª}™šû)ù_¾Å]0ëÐi×r]Ýj—’@æÕ¬¯FæE *È$`ÛrÇlw˜b]¹l¶ºïuòÝßg­—] wæo×Ñþ‹ËKüű§’ ÕÛ_ŸKIg5´7‘K#ˆÇ¸ni‚dËÍŒõÆ4ܶ¼®ß{ߥík_¥ú„t–›]_îé×}í×m ú<¥¼¾ÒD·0Åwcm<èee{!FõÆr¡É‰Hž¼ï&iöNþ·VKä×2ï©­Mwz~7¿Ýtßø}K^'Òï&Õ5ÛûC¨Ç4:t&ÐÚÉ$bITÊq…ǘG)Èç§5•?w_ﯻݿõ奵4•—“ýldßM¯>»s5»jÖ{ÍÌRÅ­ÜÂ%¾É»ù,K*°XÔqŸYÂÓê¾çÌ´ïµõ].×@¾©ökç§Ü¾}wêmh0¼þÖmµ mR[wGó¼í-ÂÀcN<ÄÏ8BXœ*êYÅ_OÆÚïçßU+XTÛŒôÖÖò×úê´ôÔªN¡qcwsWË¥5½Å¤Óiíku>Æbñ*»þBB•U>0NI’´í­ßÎê×~¾£of¶·ÜÓº×Õ|—]nEmáëû;©ï ·s¨ZØÁ `¸Í3O<ߨMgR<´åê¾U˽_ͦº²âùåô¾¾ŽíÙü½5èG,·tsÆñdéBѸ*VY,=ÂÆ¿Mƺ&ÓI.öûµ}×Üd¶Šõ¢ÿÛŽ{ÄjrÏ$‘E¯I¬CqxÛÔ\yÇåJ!ò±û¼S~l“žMeGN_E{÷æþ[í¥gÕz[ÒßÖúÜ¿}e­G ¬ësª£ÜjR‹²~Ó3ÇyD{"ÕÂçg1HÆr£–œ‰ö×ÖËÅv¾úêJûO¯OM/ýzØ›MY㸱[»×o-D#ì“[Û^ÛæO5· •Iq…òÀ2’ääÕ¯‹ÏOK[î½÷¿—™/áò××üý-þFlriñµ´ñø–;DžôÌ-í˜Êd& ’J”,r¿.â7óŠÉs{;Gu—ø–ÿ¥¯îÚö5ÓÚ7Òúú[Û]ºì-ÿÓ/óÛKþ&‚]BïÅvpÚ_»Í¥F‘2A*,Žža*²`)?:ð9#œÉ|7}&ŸËÝùô{‘¯Û£_}ÍgíqxjÆçÃ˨»Àãd2™|׬ƒÌ|äpÇwM¹íW4å5èô¿k­ýU—ãÔΛJkm~çªù«¥Ócõ5¸,f¶¸:‹ÅÑÙ‹.¤eDóM¶Y$,4$29'¤ß5›ÓWø$¾W|Ï]-nèi8Ýo§æîþí?2¦šÚ矤›Ó­ÜJŒ±ˆ<»«u .÷¬à²·È)7$`‡ÉæáñkÙ_ËÝWòzßUg‘2ø]¼íç}¼Õº_NýKþ/–yuýRÖÚ}gí«a Óã²iÄK9i@gÙòH\ùŸ.ô¬á}Zß™oµ­ùwóí¹£²·6Ö~¿ç~߈¢ÓR‡G‚ãQ—[q>¥/Ûż³™Vòùb5S¹S>^Lcq\uÕ“‚éoÆËÇÊö¾·d.kK¿é¥íým{t1…¾­þ“$‹¯&§%œk¦V©«ïùèÿ®ÿ‰§gcuw¯Û}“ûhèþp ÷ŸhYcÛβ2™~t^cð7t§ÊÚ’ÚêVô÷?[ï¯È›ÙFÝ-~Û¿éÛMŸË¨ÝØÞÞê3»€H$ i{ÉuÓïéèü·B¾—_×§‘Þ)¶}zÃKÓËLd¹x'“ìòyk¶7b\,@ GU¤Ò4h©iT˜À ˜Aô4-]——¦»k¶¡Óïü7н¨_Øè¨×3A8 ºFµ³’bÄ(›ËRz2}¤ÚŽOÈisjŠ©âÝïÖ;·wgH÷¬ƒ:†@d °n ¸Éç4í­½ ßî³þš&êÜÞïØ­yãm*=+P¼±inÚÊ8ŒA* ”nF+‡\ñ¹wœšWÑ>í~;i¿§ríïrúþ‘é>4²ºÔ.­®ŒÐm»X -g24*$,¸F,ÄÛsÇÖËçø7øÙ]­ÈnÚôÓñý/×bÓxÇBHÞG»•#]¥]íeU”3 +‰YFS#梗õçÕí¿GùnSVvþ´Ü›\ñ:F“o¨›{™cžhc°Iæ#’Kû¤ž:šoI¨¾·ü›ý¾×A±x¯E’æH>Øc1+³<°Éc`Ëì¡K(ê ä`ä &Ò‹—Oø6ºî¯¥×ê4µK¿ê¯òÓ¹^?[^ßiÐiŒYn.LS¬öòC"/’ò+p§hÁÁœ{R‹æiözkOÇò%´•×—ÜïþF‡‰5´} óQ··Žåíc2˜žS`9?0VçíùT¶î’êÒûô-+•´ÿyúôº5ͤÝCmÌñ¤çÝ•l ·‚qœž2ªV|Öèíùžß2/n_2Vñ.…ƒ^Q&‘†Æább²vìAã©ÁÆqRµÛ²~ÅZÍ/;|íÈǵñmÅ׉àÓáKck$žYeÞ[sžNÞsöîÜž :~ò»íÂÿn†ÄÉÙhX´ñ-„~!Ôlï•`¹IiËlû\yjȯ. †Üí€HëÀ畜Sõüý£Ÿºõì¿Òæž™¯éÚÃAe,Œá<Å/‘¬©œn™@‘y©#‘ê)¥¥ÿ¯¸ºìÈï¦chÙ-“OÏKuó²éßåM¶Üºëøÿ—ü9¿§é3YꔿjGµ¿q/•åaã}ЇçÝ‚0ƒ¹ÏsRâ¥çøÝ¿Å‰{²R]ü øB¯šÞ.5K ˜m->ÇSéždeÆß¼S'ÎqmääcM¹7'»·á}º­ï¿@ÛE¶¿‰>‘àɬuKKûZK¹-È$:1Îã™Ù€ý÷,@\dç‡Ëë~_þGñûÓWþ¿¯ëî25Ï ë‹wi¡¸´rEs$Æb@ÒÈã“2²%l¯œŒðfš³Œ^Ë•ýÖOðKK|ûTÞó[ëøíøõÿ$t>+ðÁמԙ­ @®¦ÛO´Äwcç ½@qƒ†9ÆãÇ523~jÞkÓ·ŸÈ"ùb—oëR¾àÁe¢ 4ßyƒí6Ó—òvÿªX—n7wòºöÝßéRÓzÿ{ÿ&æü¹¿b¹onËð#‹ÁRµœ–—º¨š(ôù4ë2–û(ß.wíò' (àñÏ ¶ï/´ìü¯Vžo}},R²k²¾ž¾~JöünZÃÉeqõürÍs} ä¹wåü¡K’3åõÏ¥(¦’íÍÿ“s™*êþ‰}Æv•ðþ=9"ŠÒ‘ ’&IáÒÄW.±Ê®’‡Ãd& Ú2yöªRi¦úvÑlÖß;„•î»'ˆ4Ù5];ìð\ i’h¦ŽFÌPÈáÆW##+‚2>µ:¦¤º•¿&V–iõ0&ðD·ˆm/õA&ž­q,QEoåȒ̬ï,AQæ9ny'–²VÝ+/“M_»Ñ.ž~ýZoÏOùbÓ·ÛêÚŽ©ÅôL£t6¾RXäEK·9•˜œóÀÀ¦ôæåÒ÷ûß/åËÿ›lžÊßð~ÿпªéº‡…$ÒdÔc7s[ˆe¼{|‡$a›ËV\ÏÀÏz%¬“Ž–iýÚ•Ë{ùþ#¬ô«Ë}kûEïa:Ö8.cåw²!ï;GÎrîÜÓV\Ë£wùè¿$M´—åýÃמ ŠæîîsxËö‹”•SËÈD„‰×þdœöÜ88¥s—É·øÝ/DìÇ?y?5oN—ù¤Ý7ÁŸaÖâÔ~߿˙¥òüœg&àã;¿éãÓø}ø)ûŠÞVü"¿ößÄ'ï;’\øZâëQ¹3j6æö;×·[b%ÞŠ›G™¿s“òg¨ÍJŠåQ}/oÿÍþo{u²û„ð„#ðÔù…4¦DˆÄ’æˆnYr1æJ‡àsòŒžjù¬ÿ ÜKWw3o~­íü÷ß[5ço9l¿Ò˜JŽ»^bçpPãhP* œ›¯Ñ§wÝ鯫ضï+¿ëKYv_×­ù|-¨Ü›¹ï5{v¼›ìÆ'ŠÈ¤q˜$.¹C!, <üÃØŠ­µ[Ý¿½[òüHKK=­oø%{ÏÜÞÛ½¥Î¯³ q,¶˜xå™X1-¿æQæ>ò2Ç‘´\_k%èšzùÙ%};ئۿžÿwùëÿ·©xE¯á“R’Ù¦¹{€ñ¦2ÖÞF Ô}ìþõ<º[Éþ2æûº5ÕÓðü V>k8/>Ïu§ÚÍ;[I³Ó¼˜Qárà²y„¶sƒóÇZ»µktmùj­kz~$Û¿kyú–ôß ê\æ{ ZÝdŸp»ó,Ù„€Êò ˜#Ìa’Xt㊛.^Nšzè­¿šK¦–»|Ý»þ ™iðàÃsÏf5Ei!°òåŸl±É¾W2î|¼ÿhœz¦¯¶¿m¶’ÑÛ߀Þ÷ÿ‡4m<.ÖÚΈNç·ÒìV)&ÈQ<ˆ6Ç”äü¡¤>Ÿ0ëŽ4æ½IϽ­êïw÷hû§äK^ìcæþíæ“ùy–uï OªkßC}  QYã·"à…bŪëò6FQ•—Œã=2åÒK½ÿ+kßóó.ú/ëîìüÿ ïVûÁs¦iö‰¨6V"Ï- d˜‰Žõ 2¤E‚¹ä1ç×I¾iÊ}ÚuÿÏïKrV‘·¯â/†|º¡%×Ú-vÈ% K1où‚ v¨c€<¯Çw·2Òpp}U¿?ý»ð´¤º‘OOø|š}©·µ“I…¢mî¡Ò„w¤Šéæ¸|H>A¸¹ë‘Uw£ê¾íšzyß¾€Òwìïøùù‡ô»4_I{yÝÅíÇží>R©Ø«€¥˜ãäõïIYEEt¿âÛýCW+¿êÆ­P@P@P@æ>3ÿ ûßèi[ÄG[áoøùoûØÿ趬äÑ×o¤Ó¬x‚76ðý1$ȇñÃ{âŠqRv~¤ùbÙÌk>+Õ »¿K%³K[¤Yn¸1ªÇ Ñ£‡ÁiPÛp2½Met›Ûÿ¶k~š.º}Ö4k^U¾Ÿ—ãÓM>e;ëfÓT¸²6 o¦F÷,&Iei‡Ÿ:í dùxŒ`òx\` †Ñrï÷¨þWó¿çè»7ýHÖÓüAªÝê–R²]:îúâÌ@!9<¥“æ2oÆIîìà½è†©_¬y¿§ÜõÛP“ÑÛ£Kï_Õ¼µ2ü_&¬Þ"»†Þößìñ¾˜ÑÛË¬× È|WŸ—‘Æ2U+ó/ñ?—¹øúi¯RªYGåúÿÃk©%׊|GùÑímm®õæ•LÐÛ€Ž¨‘0ÄrN˜?¾äù‡zsÂMÉ^+eÿ·5òÛ³ßïQv~_•ÿ­ FÿÂqºÃcqwqiÔ'ž <ˆ3µ€#'œ‘ß"¥êÅ-Ußà›_—Þ(¶©É½íÿçufú ÜÚôÄÓçKËí¬íÚ&¡GËŸœ€¤Æ~L|»×æ=ȾwúòËåÍo=í}5V°íÉ{tÓÖé¿ø>š“iþ"Ô4Ý6üXý‰aÓ<ûÉ£¤¸ u0ؘ`„#q ËRÆ7ÛÜÞ–¿Ž‹­ž¤Ût·Õùh¿«öF•׌u{‹¨>Ën^ÜË ù[‰X¹·žT÷uÆ;÷­çeó½¥ò¶«Èm¥¯E«ô²}ݾL«‰õŶե´ûÁ¥$—³$²¼Øžu*ÉòñÁä à `OXÁ½›ŠûÔ+ùßói¸õ×ð54ÿj·z¥”…¬—N»¾¸³_ÎO)dùŒ›ñ’cû»8¯zpÕ+õ7â´ûž»j)=º4¾õý[ËRÖµ™+Ö®tÍZ0Ëoº\·¶bßÉbŠ@Ü›À‚B{‚R–ŠZ4á›ÿߺ/Nm6|ß‚þºv.îëk©]iq\é©v,s/¶¾Ìd»ËÌ&ÂFß¼‘‡o—#æfëê{‰¥×üïýuüB^õ¼¿ÊƥΕ§]]Åwuak=Ìòæ’g# FG<ñÞ…î»­Áê¬Èï´M+P£¿Ó,®‘äóYf·Gñ·quÇëŠV_pîËÎÔ[El-¡C·Ë‹`Ú›pW Æ=1TÛnïq$’²+¶‰¥5Ü÷m¦Y5ÍÊysLmÓ|©ÇÊÍŒ‘Ààú KEeëó®á6‰¤Í$M¥ÙHöÎd…žÝ ‰Ën,§yÈïÍ Guéòª·Bw°³vv{H¤‘erc³®6±õ#¨À¡i·õ}ÁŒe‚¤È¶6Á.YTD¸I Ç#,Çžì}hZ+/êßðËî·2àðŽŸ‰Û_f2]åŠfa#oÞH÷ˑó3uõ=ÄÒëþwþºþ!/zÞ_åc]lmáîÖóºA ÙÀ9=Nv¯ýò=)YZÝ?¯óxúÜgöe‡ð}†ÛÉ’!Çå.ÖŒd#¨Éã§&›×_˜–› g¥iÖ1Ç•…­²D¬‘¬0ªV9`@$w4=n˜-6ºm‚*ªÙ[(PŠ D£PtþÈôíEÝïývü´ t ´Ð4k&•¬ô› vYe1["}àØƒœõ¥d£ÉÓ°îù¹ºŒo èMd,›EÓZÕ_ÌXü°ØÆí¸ÆqÆ})ßTûl%¦ÅÃchCkE•¿v>g\mcî6®^¥]ÿáØ[¡%½¼6Ñ˜í¡Ž,ÎV5 71$œä’O¹£e`ërJ( € ( € ( € ( € ( € ( € ( € ( € ( € ( 1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg GCP0 € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €<ÇÆñáoÿaïý +xˆë|-ÿ-ÿ`ÛýÕœ @€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € óÿÇ…¿ý„o¿ô4­â#­ð·ü|·ýƒlô[Vrlj7±éöë4Êì¦XâÎ]Õá–ö¥¹; nÊå[½M±»¹ƒP¹ŽÉmcŠGšâEŽ?Þ ×ä?¥Bj×ó·àŸêUšüÿAÿÛšGÚ`µ­Ú.cÃÚ|¨A!”g$`G¥7¥×mü½EÑ>ã­µ.è!µÔ¬æ'”ž\êÛŸní£“·œuÇ4YÞÞ¿†ÿwPÛúï±z€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (Ì|gÿÿö¾ÿÐÒ·ˆŽ·Âßñòßö ±ÿÑmYÈ¡â)ïô¶†Ñ£YÒX¦Í$#4r,I ¸Î3œ”£'t6“M3œÔ¼=­joªKmaþø¼˜â¿•<€‹(,¢.[2Ÿ‘£*G9¬Òqø|ÿUo5§ùm«zèöÿƒ—ËõÒ­¯‚µ/]­¾ ’´ÈãQžÑc‘"×Ë| 2ÓD¢¹\cýë|ïÓ¦ínôüKëwóûÛßú×^¦þ›£\éúO‡ì’ :Oìð‹;H„ìÄeKDqÃ=N8-ZÊJU–Úúù/Nä%h5Öÿ­þÿÔߨ(( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( 1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg FôÒÇšDwØ’@êI{š„›Ø{³DÓ¼ *cPÍa¹AÎ Áü±%GÑN›à•%@Åw#2㸠ƒô£Ì<‰( € ( € ( € ( € (º†;È­ñ<¨ò"àòªT1ÏN ¯çO•Ú⽄–öÖ;ι†?³ ’]Òå©Î½“èiÃ|û ž€ ¾¼ƒO³–îîO.Ws¶ ÀúOÐQÕ.ö_~€^A-äÖ‘¾gU¤]§å ¼ôÏñ-Uþ_“ýPõÜ}”×woåÁ$|µ@É8ÑÙwÓïDÀädP$ï©VßR²¸¼šÒ„71WˆðÀ€¤à ^GŠªëúÕ¯Í0z;è ./mmI70ÂDm)ó$ „\nn{ ŒŸqGõ÷í÷=F³DÓ¼ *cPÍa¹AÎ Áü±%P7_[‹‹I<È‹2†Á*ÅO_pyïGDûë÷ê6»Ð—Y$ms&Á,‹pIgc€0=è[¥ßü¯ù Ù7Øž€ ¶¼‚ê[ˆà“sÚÉåJ0FÖÚõáãÖ…ª¿õ½ƒgb;ýJÏNò~Ýp–âfeF~!Kž€mRrqÒ…«²þµKóh:\·@T¾Ô¬ôö‰on7vÒü•K1' ÉÀüèZ»[¥ù´/ýZè -¯ º–â8$Üö²yRŒµ¶†Ç=x`xõ¡j¯ýo`ÙØ-o ºyÖÞMæÞCœ€ ïÁ(['ýhíù ÙØ/o ±‰$º“ËG‘"S‚rÎÁTqêH-ÒïþWýdßbz©a©Yj`³¸ILlUÔpÊC2œƒÈ‘†zPµI­¿à_ò`ôv-Ð@XÞA}n.-$ó",Êd«=}Áç½ï¯ß¨lÚìO@æ>3ÿ ûßèi[ÄG[áoøùoûØÿ趬ä±ã Yï4O"Õ¦IZêÔ‡…C:q,p<‚8æ?‹{où _ 9mSNÔìuéÚâï[¾Óäû(º¸‚=³ÀŸåSnŠÄ1“°nÁçŠÊÚ[]÷ß–6¿ãå{\¹'Ó·ë¯õÚö+Ûm Í)®Nµ?("·"æ-±yï¶I%\£?–Oºdáþl‘Ž¢ˆoþ+ú{É|öÛ[ï¶ô‹^JÞ¿ðÿ+loÊMÄVbGý+T’Iÿyq;HvÿÓ=ÊÙ"¦ÃÉ_ϲ¿Ú"碟›KË]íådþf¬on":¥«êr éî$K{1p‚`»"‹÷ÐäÆB¦á½Yãœu žœ¾i?ü ·~ÎÊɧÛG¹RµÝú;}Û®ÿõ_ä„ñúÅÖ€úPµÖ^íe¾3ÿ£ÊÊѲLbñµÇ)€ Ápx¡oÑ(ßÕJ7üž¢ÕÓßô±`-âË+[7ˆO‡ZhÛþÕö¼í“y@ß¾ »ÉÎßö±Æê®¾ö×vû•¯Ö×½¯Ö×Е{{»Ù_ïéÒöíÓmLËówcwq-±×-t©®“çÅȕԵš÷ab<À?‹ïÞ”>Ê—õüGÓå“c–ÍÇ·ùwÿ†'ÔTE‘­_Ä2iþt¦ÆÕþØ’Ê6F>i—2G‡ó ùªTŒç8^êûþ¿“vµÓémwµÝ¶Óò×ÎÛmÖþFž€ºÈñ\“jwÚ„R,ónµ67M‘|ÞXù†Ü|»B†ÈÁ䜨¾X7¾šúߥÿ ig÷KMÙm·åÖßúü†xÍ./e³Õí-5¸&—J`Xë$S7–Ȳ$gå?{;¸È< q\•ZîãédÝü¶åÔ¦ïäßå§âŒÍvmM$xÒmz=ri¯j5È£Jbc÷DàFF>lç<æ•5~Uä¯ëÍïÓW¶–Ûù[îüûùÜÓñ ¦¡ew$\ëFÉ݆ߵÏç7ïË¡x‰‘2ve—;~PTŒ WÕé³vZöµû÷ß^º‚Z/5¯ßÛôVüÍ+˽FO %¤Vz½½ÄVö²\0%å1³bUI8- Elàäc“W;s«í}~ï.—µíçaFé;nÓ·é¿á™GB´Ôîµ´ÌšÊi}¢K5¹–xÙ°aØ%-ó‘¿ÍÀ~Jö"¡ó(Iý«i÷ÊÞWµ¯ò¾£væ²ÚúýÊöòýoÐÏÓµ[2O6Iuƒ©&“4—q_ü¶ºß®Àÿ»Ææ øÁ¦Ò”eoGÊ—tÝÕß^×ü´“ŸG&íµ–ºW,Ûi7¶úäzJO¬Éˆ[ù±µÌÚ¨·ÆðÃ0Ë–9ÏÊêßÞìß½Íɦöò×Eo»mÖëq&ãÊå«Òþn÷oË®ÿ+hZŠÛZÕ®4ù5'Ôí#’ä[ÜE²B6G›œí ¨iIÃddÁéMZRæÙ4Ý»k/–¯æÓÒⳊå],¯ß{¿š·¦¾¤.¡5•¾œóßÇ=„w×"M,êùþ–ÓÓM­¥×:Km/÷™[ÂÏ«X]CÄê fådbˆèDße‹sÌù“å`ÝV ¥u©(ÁIöækµ¹›ûÞëËk}¨Qrj+Ëײùwù=¯hÖ R)ôÉWûVi®’;†·ƒíF,­#¿š™°S pw‰BP榷J×óQÕ릮îûß¾ƒæR\ýßªéæ¬­åß«#Ôî5-COÑíç·×¶Ú[B5-ny«=¾â\»î\ñ’ [qu\×Ã}>éüÖé=ƒUºÿÀò~EÈí~Þ|B|<×/ífè|±ìó6þü&ï;¿ÙÏðÔ¯ïïoý¹ïn¶µ¼¯}AîùvÓòé~—üvÐË„ÝÙ_ÛA~uËm2k·ýݸ¹W¼n ç?»'ãi4C¢–öü•>Ý¿•î‚]\{þ¾ðå»u×#½°2¶·p<ÁökwûL{"3¹W’UÊ3ö†Ž`1óRæµ¾Õ¾I¨ýÏÍ­o}ô [[m­¿š×kémúÐ.µ.ÊþÿR¿¾’õ,ÛÌ´¸±ºD7€¤I$ùŽ‹jÙÆÃ’¼9aÖÉy_Nºõ×^ƒÑT¼¶WoÑkÓËn¥—³½ÓRîÆ3¬6£mj±é-Ÿöf2Åt\É¿>oû=±DÚwqÓWÿ€ùtøv¶¼×ò/xóúüÛÖöו¾dv·×º­µ½¤ž"‹Dyãó Ô·1M¿É—ÌŸ>WBvvÕ¯‰·¶¶ÿÉmç½í}m{é¡-´•·Òÿ{Û§­´ÚÚ–´µøL$}GP¾…ÌÀÛ›¦†H~o/ï0—aÈPÙ<“™¥ðk½µõ¿õ¶–uTVv[io»ú½úÝyŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9:…P@P@P@P@P@PE HÑD‘´­¾BªvÀ>§ÀQ²°AN“4HeE(®TnU8Ȱ8ú VZ®àC´ ¼I Q¨T*¨ ¦Ý÷J(9 Šu ™k¨K¨[iÖÞÌ’â8d|òrÀdô• ÝV@õweÚ(  ëMG³ó~ǤØ[ùί'•l‹½”îRp9 ò èh^êIt«»4h Ä,í:Ä‚gP Q¸¨$€O $ñîhØ ( €#‚­Ód$I¸¶ÔP£$äœä’OÖ $ ã‚(žGŠ$G•·HÊ 8'Ôàô•€’€ dðÅq Ã[þÁ¶?ú-«9:…P@P@P@P@P@P@P@P@P@P@P@P@P@P@æ>3ÿ ûßèi[ÄG[áoøùoûØÿ趬ä½ây¥¶Ð/&‚FŽDL«)Á"³{ çüS­h%Õ·ˆu}NøÝÉao§ÛL†yî‘¶´[vd`‘“ŽŒ¤gr†ZÚËl,âŠÙäØ˜ß#eœäòO­vÐg;câˆîRÙͤŠÕî.0Ò¼\&Àª¥œîÞ8Àj®µkkEÿà[~ ^³NÝn×þ¿èW—Æ6©g¡O³LdûDRÃ$r a@¥JîçF~^@æˆîï¶ŸûuÿôŸ.¾'eývOõŒ-.µ•‚ÈO=’ÚK;Ê–S’å]yGn$1û»~)lÛþïã~›ö•š^¿%ÏŒl#};ÈŠîd¼¹{fŤÁáeBß4{7Ó‚wAMoo&þæ—Ëϵ„Ý¢ßk~:—ôÍNÔî )dg æ)x$eLãtlÊ‹ÈåIQBZ_úûû®Ì©o­j7×r6›¥Ã6 Á·{‰.öHÅ[k² B ©ÏVRvž:eEéÍ-ü»ÿ]5ò hÜVëþß×_¼AãMÅ$Ÿmq{pÆÞP$ ûFJþñw7&G#žE¼þýU֛ꓷ~ƒjÎÏÏðßî¾¢745 <û£!Þ<‘c9™vmݘön§‘Ѓ҆ÒWùþ-~i¯øt ;ÛúîY_éq 1Ý<žvͲ¤4@¸Hb±p î_QUf¤âú_ðß×äM×*—B–£ãM:ÚÓí6Ñ^]Æ."ƒ|vsìmï·r0B$“òç<ÔT§w?òoo—êSV¿—ü0øüe¤,q›ƒHÍÂC3ˆÔHc !Ø<±F_ òqši]¤¼½5Ù_ϧWØ–ì›íÃ}<º–lüO¤^jÆÚâF™âRmäXÙÓ;Ô9P¥†ç4GÞW]¯òÓüÇ/uÙú¸ñ•mªgMrËpU± ˜Ñ˜eU¤j±NF"§™Y¾Šÿ‚»õ²ÞÃjÖþ·vüÄѼK¥k3´é䑚/9 ÛÉ‘8²€Ã$gÆy«³×Ëõ½¾NÚ=‰½´þ´ÜÀ‡ÇÊóÝ«¶… Û<êb}X›ŸÝ0ˆ‰Ûž À9ç¥M?~1}í¶»Ûüþò¤¹[];hÑÇ?“rL‰pd‚d‰ž<ï_3a§ dàgœ}ë[­¾æÒÓ¾ÿ~ŽÚ‹mÿ­.C¬ø×O´Œ‹IYäŽâ8äg¶—Ë+ç$rl|v]ØÂ’sÛµ$îãÙß×fÕ—[µÓ~› z'ßúßämé:­¦­Íbò˜Ýe…ât`Ã#€ÀàƒÈèEU´O¿ü0_[iP@P@P@P@P@P@P@P@P@P˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#[W±:ž5•aó€Rì 22p:Öoa‘ØøGÂö0ºñM­„Iª\¦ùÚŒs¾E\a]Ã7|´Û– k^ȲH Œvú“M+ÈÝx9dƒWHo6Fd‘UâÝj{FÊFv°ÈÈr;RJÑQìïþKåÓÏ_!·y7Ý[ôºõÒþ†m—õ·˜IöÛX—ÏóŒ6–"‡ÏUvÜ{ýìöåÙZÏúøÿù/ÀOËúÛü‰$ð=ô¶ÐÛM­DðÚÚý’Ý>Æ@1ï±.$ýà"=¬ÐA=)»¶ä÷vôÒý>wß{m‹_]|ü‰´ÿI§Û ´¼²‚T¿7`°òà¡ò™aò2AÝ×®{¦“J/k4ý¾¼·Ð]ÚßO½Z–<#áü5>aM)‘"1$°é¢–\Œy’‡!øü£'š®gk?ÃE÷ «»– Ðõ++‰cÓõXbÓg¸3½¼¶…äM͹Õ$ÞRIê¬FãƒÓÊœ9%µ­òÿù}å7ïsGGýkýu×È΃Á3‡±û^ª³&š±EfÛc,I*HCÄ3.àNjÔŸ7;߯Ü×þÝwøX™+®U¶¿ù~¦•·†üÝê¿kÝö‘(ò¼¼mÞ°Ž¹çO§ñ{s›îåO¿ùÉÿíßw÷”»‘‘§|>‡O½‚u:UÐE„H÷zX’pÑ¢¦c“x)€€C`äûVŽÒæOg]|ÿ­4#·ô¾âòøkR]4£«[m²±ñùNDŸ¼Ãð õ¤Ü›Rû¶iéç~ú1Ùj–Îÿ×ȨÞºû=Ì «Æ±êñ_²gÌF–I?wóü‡ºäî8¢)FË¢å8¤¾çeÁŽîîK}òÿ‡5lü8-FœÖEä÷C÷xßæyŸ/^1æuïŽÙ¢:[Ê<¿–¿6Viw¹_Qð¬×š„ì5M:ææ+É­¾d2ÆnÙ7 )(„‚¤ðpFxŽ[Ç—Ößöò~í­‹o·['èŸùiÿ·¥hÙòéOöŸ3û:ÀÙcËÇ™Ÿ/æëÇú¾œõëÅk)^R—ó[ð¿ù‘k$»_ñÞφ/´oµcíhý÷—÷<×fû¹ç±×œv¨JÊ ùyò[~v*ö“}ïø”u}³DNû—²k™|Ï'9ó„£ÝÛÍõç³Ãºâû$¾çÿ¶þ"Z&»‘Â9ÔÞéµ(bˆÜ,þMµ©‰d"e“t HUß ·xUnyÏJ!î[Ëüšùo}4ò줮­ýÃy~;ß¡Ótï°Üê3y»þÛqçãn6~íyû™Ï½ H¨ö¿âÛýFõ•ý ÔP@P@P@P@P@P@P@P@P@P˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@cã?øð·ÿ°÷þ†•¼Du¾ÿ–ÿ°mþ‹jÎ@ކ a@P@P@P@P@P@P@P@P@P@P@P@P@P@P@yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9:…P@P@P@P@P@P@P@P@P@P@P@P@P@P@æ>3ÿ ûßèi[ÄG[áoøùoûØÿ趬äèjP@P@P@P@P@P@P@P@P@P@P@P@P@P@P˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@cã?øð·ÿ°÷þ†•¼Du¾ÿ–ÿ°mþ‹jÎ@ކ a@P@P@P@P@P@P@P@P@P@P@P@P@P@P@yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9:…P@P@P@P@P@P@P@P@P@P@P@P@P@P@æ>3ÿ ûßèi[ÄG[áoøùoûØÿ趬äèjP@P@P@P@P@P@P@P@P@P@P@P@P@P@P˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@cã?øð·ÿ°÷þ†•¼Du¾ÿ–ÿ°mþ‹jÎ@ކ a@P@P@P@P@P@P@P@P@P@P@P@P@P@P@yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9:…P@P@P@P@P@P@P@Po‰õ tŸ jºº£Mgg,ñ¬€•,ˆX‚2=h{ ƙ嵻‡ì·öØóíËnÛœíul ѶÖÀÎ!YYTÝP@P@P@P@P@P@yŒÿãÂßþÂ7ßúVñÖø[þ>[þÁ¶?ú-«9:…P@P@P@P@P@P@P@P¿äEñýƒ.ôSPÇ$Òâ´k»›ï±ßiþYŠh¢iåÎq+DŸ3Ç#¨R½ÊäÈd ^ÕN±§ –´¹³‘\Ç$SÃ$Gpî»ÕK!ê òE£@P@P@P@P@P@P˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨P@P@P@P@P@P@P@P@Q×ôïí} PÓ<ß'í¶Ò[ù›wlÞ¥sŒŒã=3@zæ‹kcÚæ–s ×î5k½ÀLÊälº-€¡á#«,Qù›@€€ÙðíôºŽ‹mup#ó™JÈÐçÊ‘”•/<˜ØÈ{«)ïL ( € ( € ( € ( € ( € ( €<ÇÆñáoÿaïý +xˆë|-ÿ-ÿ`ÛýÕœ @€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € óÿÇ…¿ý„o¿ô4­â#­ð·ü|·ýƒlô[Vrt5 ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (Ì|gÿÿö¾ÿÐÒ·ˆŽ¯Ã"_´·”"ÿmŽ|Çeÿ–mÓ k97±uéiÿŸÿÔ 1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€ ]zZßçÿãtbëÒÓþÿ?ÿ ^–Ÿ÷ùÿøÝºô´ÿ¿ÏÿÆèÅ×¥§ýþþ7@.½-?ïóÿñº1uéiÿŸÿЋ¯KOûüÿün€<ÛÆYþ϶݌ÿh_giÈûéÒ·ˆŽ·Âßñòßö ±ÿÑmYÈÐÔ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( 1ñŸüx[ÿØFûÿCJÞ":ß ÇËØ6ÇÿEµg GCP0 € ( € ( € ( € (  m3€@#‚='¢ûAÿžqß‹y€} ÿÏ8¿ïE¼À>Ðçœ_÷À¢Þ`h?óÎ/ûàQo0´ùçýð(·˜ žú;h^k³Ã`³»ªª¨I' ¥o1ûAÿžqß„h?óÎ/ûàQo0´ùçýð(·˜<9w,º ´óm’YbÌÊ ÿZà~ãÕ(eÿ´ùçýð*­æ ûAÿžqß‹y€} ÿÏ8¿ïE¼À>Ðçœ_÷À¢Þ`h?óÎ/ûàQo0´ùçýð(·˜Úüó‹þø[ÌíþyÅÿ| -æV­y7ö¾‘ rI&õEv#lgÛÛü)lséÐê¾.Ô㾚ÿɵ°³h£·Ô'¶PÏ%ÈcˆÝrHEäç¥ _ðŒi>º¿þ/¿øí`ðŒi>º¿þ/¿øí`ðŒi>º¿þ/¿øí`ðŒi>º¿þ/¿øí`Ã:@–ÕÀI×/øíEvÆ6è““A.©,R(dtׯJ°="^E7'f-Â1¤úêÿø<¾ÿã´¬À?áÒ}uü_ñÚ,Àç—q©Àój–É!}VêPÈfE*Uä*A s‘F¨@€„‚WÚ¤‚¸Ü3ëC>Ðçœ_÷À§o0´ùçýð(·˜Úüó‹þø[ÌíþyÅÿ| -æöƒÿ<âÿ¾ó78”„Ô”žŠíŒd©<)4g–)2:(*Àô Ž¢›‹NÌWöƒÿ<âÿ¾ó3Å7³Aáëé Ù‚3‡E®xàö>ôš²õPcã?øð·ÿ°÷þ†•¼Du¾ÿ–ÿ°mþ‹jÎ@ކ a@P@P@P@P@Ú¯FþF”¶*`‘âYõK{hΗ([Ë e‰}R2@cŒ÷$`a8©{ë¢þ¿­Ÿ§TÖÚoý[¯^ø>06rø"ocšÙ®íüËM7/úõÞeC·å>P0FI{H^Öû×Âíÿ¿,­}Žv=\é:d–š>¥ge×sIå³Ãic2¬qåbÜîlm\å•ÎáÒ¦R’ŠòOG»÷¬·†otÂ)s?6¾Zu{|õü.©âu_ êSÖÓO¹}5^ 0]‡·_çRí–,>B1³×5¬£j–Ž­OnÖ’·žÚßü™0nË›¶ý÷þ­¿ÞŽÛÂWóÞÛÜ‹ûŒßE1Yí6¨‡øP`e”ŒÇïg<}дåM}þ}WËúov£½¿«wùÿÀÝ3r‘A@Þÿ‘jËýùÿôsÔ­ÆhÕ­©È:ëþ¸¿ò4 Æm®ä¶‡b´2¡c€‘™c³ƒŒ ŒœýÒOZ@8K(…+„˜—` *%²s·' Çn¦˜YùBiöÜ3³°dRWæ]ˆ7ð2rr88 ¼ÃpÂÔÈîÞ¤-xîÇONç®vœÐ’0H>†ÈÕä=¢ÿ×IôY¤À4ÿùu¿ûXèÛºOt½PpÚχÿ¶üo||O&ÊÛþBZgÚÈËM÷~uÛÓž¹ãÒ•%kËûß=£Ôs òýLÈ5M`Yë“ZêfÎ=*).#‚ XBHßh¸6TœÎ0{ç9¢›÷a'Þ+äÔ/ùék[î²q´œgølGÿ äPÀuHíâ’yl­šBn¥Rͨ.›W£`ÀäÙÈÊZÒkû«ÓàO^«}>Ï¥™Ië}µ¥­ßÓwßckÀ’_Ú.…i6£%ÕµÞŽ'úö×üÍ}GUÔôF]>÷_’;2Öï.¥,P«Z+‰rɰÑ¢‚àãqäñ†­{7k7ó²M.Ý[Ù^Ö'[).©~vo¿õ}®RjrkæÒßÄZsZ#Ä‹«ÈQ¯âeRdTXxI.GUÊ€G9ÏZrºé->Z}ú>«]<­hÕŸm|ïý.çcà¿ùô_úñ‡ÿ@Õ[ø’õ2†ÆÅdY‘âÿù¯¿ëŸõžÀkÓÌ|gÿÿö¾ÿÐÒ·ˆŽ·Âßñòßö ±ÿÑmYÈÐÔ ( € ( € ( € ( € (ûTJ×r¤0Ƥ³¹ÀR{‘ÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€?á'Ñè!ëþ]ÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢è z¿¥Zh6\_B’©”•ÎHW#8öçñ)¡—?á'Ñè!ëþWBøIô_úEúÿ…@;þ­æÿ‰”7^O4]7Šô†?6§ã“Ò‹ øJ´|ý¥22yÇJ.€OøJ4\cûF,Üÿ…@'ü$ú/ý"ý‹ øIô_úEúÿ…@S—U±Ôuý!lnRcÊX/lÆÔ®€¥ªø¯FðÇŒu1¬Þ%»]iÖ^R±¶Ùn·}7·¸ ÿ…§á/ú Eÿ}¯øÓºÿ…§á/ú Eÿ}¯øÑtÿ OÂ_ô‹þû_ñ¢èþŸ„¿è)ýö¿ãEÐü-? ÐR/ûíÆ‹ øZ~ÿ ¤_÷Úÿ@ð´ü%ÿAH¿ïµÿ.€?áiøKþ‚‘ßkþ4]ƒâŸh^!¾Ð-ô»øf™5kC°:ä>>€jWÒïuK6Õ¾Ýsc-Œçüõ>€gÂO¢ÿÐB/×ü)ÝÂO¢ÿÐB/×ü(ºÿ„ŸEÿ „_¯øQtÿ >‹ÿA¿_ð¢èþ}þ‚~¿áEÐü$ú/ý"ý‹ øIô_úEúÿ…@ð“è¿ô‹õÿ .€Îñ.¿¥]èW[ÞÄòºaTgži6¬QT˜øÏþ<-ÿì#}ÿ¡¥oo…¿ãå¿ìcÿ¢Ú³#¡¨P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@cã?øð·ÿ°÷þ†•¼DiØk¶v¢)­u‹(Yìíá’9í§r­`ò ¤úÒqòßü%‹ÿAÍ'ÿ®jy<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚áÿ bÿÐsIÿÀ+š9<‚ç3â›ÛK‹8­¯¢»”\\M)Š7E_0¡8ÁõéZEXGÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/share-working-copy.png000066400000000000000000000336531203611042400327150ustar00rootroot00000000000000‰PNG  IHDRØŸsæT pHYsÄÄ•+tIMEÖ-§lHðtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝyœå?ðouUà 0Ã9€#3 ÔhÔ$žˆâ¸#‰É&!+fq}yü4»úËjØü¢yÅÝ¿¨ë‘u»Ù͆Ĩ«!‰!ìÆ[t5@DAaŽîº«~<ÝEM]]Õ×Ó=ýy¿x 5ÕUO=u}ú™§ª«Û¶ÉåòËo&¨§»ï^åþUp‚˜Eð¼¹'Nš:u‡ªŒw{öìþÓ–mäŠãb_~ùÍGþÑ}è¡‘(Š+ 0^™¦ID›7¿óûϽôò+,‹Û¶Y /=í˜Í.äeMÓó²Y(ȼ+ 0®L˜ÐÑÙ!f2édn}{IDAT |ë½u¿ÝIJX"¢>–Â;ßß½{¢iÚðpžw…Æ¡I“:3™Ì´©¹Í&:fxd +VÜ´ô”SNZrøîÝ#|0˜Í˲λªãVGGº³«sÆŒžiÓ&þnÃËëž|R"¢ÞÙSvïÞþ΃ƒh”·u×»óÖ¬N:ן.¸¸æ##ÚȈ¦*‘Ý;{ Iìå|>/Ëz.—©qeÆ{Þ›·fõWœm÷Ï4ú¦Òd"«xÿ™@äH 4DÒö=ÂÖ]?¹gõ‡—¬˜3u6ɲžÏÛ¾e²™¡AwJÄ1ý{Î=ÿ¸ÂB/m3°/IDATU-Î,âÿ¼ODçžÜÃÜ#^ÿ-6rhŸ>©'GN‹X5ÔTZ¨OƳ ØšÎåÒ;öé“rv6m¤È„´i{2-=¬X†­+Š`¨Dä„­j¨D® EÛ¿¤ÉBzŠ™¶5sD¥ÞÜ»G3uÍÌvØ“¦K3{;&t¦µÊÍEU-Û0l³ šæ²UODÿrã5¶(†e ‚3ð¥[¾OD?»ârSQ5ÝL‹‚òV [ÌL+Ó;¥›2ém»ò¯½7üjkš©jÚîaý­wÔ)Ó¤E‡Líííªçš4)S3(eëš ËÆÚm;ˆè̹s¼ôb£4AtÑý«ÙKÞðÜòTõIDAT×d™–m“e–&‘ ¥R‘Àz˜sª=%›MweÕ\Nß§ç:Óª¦kš¦¨š¢j²¬¾õæÐè¨|ò)ó&OΑ@‚M6›Õ¦§Ÿ^ÿôSëÿðÜ3—¯¸féÒ³Øbþó?×¼öÚ+×_ÿÍzl‘ ¿p&øøÑÇ}ô±‡~Ô´i3’òï?}€ˆ.üü%5®\3 ø«šº›•m“ D¶m D$vqo™ºE"ƒL±˜½k·í8sîœû>ÿ9öëòŸþKa"Ò U4ɉt‹ˆRbŠl",Óbñ+QJR)A”Dˆ]ëë²-Ëøp¯2*™Š¢ËUÕ4UÕdE“E–ÕDÇ¥´IDAT‚¢nÞ<4cæ„Ï'bAl D<²æîúÉê‡ ]»óžæ2Ò‰'ŸID«¼‡ˆº'䆵zݤ¼öá …Bá?~ñ“+þꢻîxpêÌY‰fR©¬˜šû…9súÜÅžzò鋟rÑ¥Ëz&u_|É ‹èÊ+¿~õÊëö î¹ð¢ÏÈ££l$3oÎÜE}$C©u¿_wÛwWýàîž~L†IDATÔÙ¹ük_–añɧn5Q” …<|Òi$ÎÑNQÏ<÷Ìmß]õ·ßŸ•¤å_ûòÄŽÎ{=öøSŸ:û"ÊX´îéõþŽôÒsÿûÆkV}ó»W¯¼îW¿zxhÏžþ¾g®µo ‹Ìtè•Ïf! Mܬ°gš’ •.€‘]L:g_Y†-Œ=§Ümá3çιçœsݯZFqb±Ø‘@‚-ˆN± ™´d“ °‡b dšö³½³ºfZ–mY–iZ¦iš–e¦ó«eY–e¥³iÁfï$vÿ@ÿ7~óÑGºûÇ·?úØC÷Üýàüƒ:õèžÜ#MÈÑ¿þÛ_«$º¦IDAT¹dE:#=ùäoÖ­ûõÓOÿÎ=’MçÜo}û¦g6=eiFnÒ§ês‘çåIDAT×ßïwÜñ}"êë=°£«#p6¼xñÉ7®_ûðþNXS73¾~g‚މéLZH wQίÇs‚¿¨ÀÅyfô ß\ÃÍ ï‘ÍI°mb ¥[tÙβ,Á²,Û¶A¸ò‰_9)üæò¯²Ÿ ïû'*eñN=˶mÓ,^‡ËdD»Øù,eP©E,¤3™¶e³‡è„T*% xãÝ‚¬ÈŠ*+š¢jªjü¼åÔ?wºÓ}ª½víco¿ýÖÊ•WîÝ»—ˆn¸þf]Õ3ÙýMN÷ð­·þý 7\·ohpç`qö N?`šgâ/ùâ׿øòó½}3ï»Þ›YôIDATïÞÏ~ös‹/ Üjîy=XQË–}~ãÆõÚòö„Á}ÆŸe;2î*…-Îyú§ÎøÅ/ÖL›6ÕaÉ’S6lxÒ³^0^îF°P|Ë´‰H1,I ›Ä›Ÿ]ç¤ðë—þ…ÓÞyýÒ¿Xtÿ‰hí¶Ë¬:öÓ,ög2i§<]3ɹ8›•\·ÊÙDBváôBOž:¤S'åŽüHïê_þ÷VYI‹tðGX¼øà3N?tvoO©+›¨ø¡:ñ„víÜyÔQ‡žrÊ©·ß~ׂM™Ù“ÍîOy÷ð¹çžg™Ö…}æöÛïúÎ-ÿ77^—Ϧ%É3ñ‰'.¾ûÿéóí©IDATþûï{fÓSŸ[vaÿólÓÊMÈù·™»ðÀ—N;íô[¾ýÝ¿¼j9ýðw~dÞ¡»»Ùó¬8ÿô/±žæøIDAT%Ѭ¾NõZÐODkÞÀ¦ \œœWFG Ã#ªmÿÓûaKo.8Û›Þ#›—sÚ87øÒoÏ]vpÿlK×S©” J©rg–e“m–e¥Òé7¶¾wÚÃÿáDëð¾¡ïÞv_±k"›‘ˆJMÛâ»ôÝ¢¥¥° ÞÍoª³A°íÒ]vRGGnFïTOUqPàð”iÝS¦u;Ãþ ˜L&=¹gbØzú§xɽDæùž'¢®¿™J5.ŽœsàLÏȈ¥ă nFN“ýÑ/ØÄî.#¢¼j¥:ÈJ‰û›º,Ë’­©&•B†5b÷_¬K‰”ΤÇÞ§á´{9ÎIDATÙµBÖT÷›‚óáë1Q±Ï¸…Ìœ5ó’‹/ù¿?øÑÁóïŸ?;›i…ËnÁ¹Þ´Zìœi·›ÝŸwcÿíü@ë‘ÑI #æ'x6e‹÷8ØDû¸[±8ÙKwNÇd—î§œ® ¡t1‘H°Ç´—‹iÝJ§üÞwÿ÷3›gÌœ2qÒ„)Ó&ó®NÙ8Ý›öM3rþÐg¿ ¬õiSáŠë'ÜqÛÎz’h˜ƒ…+®—Ò‹X[ ýÏš˜Ô=Ejï¯ç8vñἫ-ã3gù]?áŽÛœ1Bén4Šlˆ®¸þ3géÎÛIÝ¥ï¬ËfÒ;Þ}·nu±ÙÙíIDAToÎZr-ùç fTTÕ·S§Í çÁðÿóæ5©Äw‚;ˆßúã›[¶|ȵ>íe``ú ÇF,ˆ¥´ÔÝ3mðù×ï¾{Ø%ÿFeC3È4í¿ý›ÿsäQ‹¤´DßYµâä¯fØÉ{“ ‚ ^Feƒˆduó># šawdÇ<}·Ž_\жÝb­`–¢(h†Í~f$Áûi<´ˆjFÑ-£ôY;wCØ4‹ù‹1@½(ºå¤°ÓvD·ˆÄUaLDN 3¢¸ÿ¢œ§Eì~‰ÄÕ`L¾&"w³-b€Ú• Ö‘K§ ÃÒn…U1IDATŒb ;!‹1@)º%I)ðº:$vw„à Y´ˆ+!‚ ´õÓ±Êr7„©ôI · ZÄen_óœ–6×O²ÊÖÁ¬jDÅʾ1‹[ã·|ÕßXw°$¥ØOö«'…)¼E,«VG6%«V²±s*:š¼¹äÔ“‚²,æìu¨W…ª\Š—Ø€´ç¢ã\šó¥Oí[Äa[ÊNp;¯F+Ç3Þ“D‰ZjžE†šgdÄ4T,ðÕ*ÿÎH´ñ+Xw!1·›{ {¶ZÖ0xR˜ñß&ÁÔ¸Eìç9÷Ûk‚ ÄVŽg¼çL® Õæ©FàBÝeÖ°bþW–K9IDAT£·^Ìu‰¿ñ­KÅÕnò?•*æÜ#Ìn`##šÃÔÈq„°”¬¸MT}cªNͱz·òü-Ö²*x‹b³T¹.hð…íÏÈï<Ó˜e剈H%""­cvvÁ2 jSE-bþÏš¨acª‚äŠYþF·£úº9…׼뀕Ì"ýPoZÇìYG}¡&EÊ»ýj™†Y\i‘­©Ê¾—;”])8…‰È4‹ ^Qܸµ|ÖD=²É«VE5UŪ©…ÜDQ}ÝÜór×à‹åï¨l¦ND†a˜†ÉRX3mÍÕ€U”1]ÃþÞ‰–¿80š!#8V¬l?reÕð_QŒßIDATÓ«!O·rÍË`òª9,›5)ª«Cb?m1-˜º$I¢$Š’HDQȈg‹`»¸ÆŸ¬sN'‡»?ÑI•žl1Ëw_8rÆW°¸À…V¾¶ó¼ZÁÖóçš¿nŒ¿Ø°Å9q6BeÕh!¬Eœ•‰ÈÓ-b‹2lâaٌ蚨 E\¦8Ñ•7ÏHONN–ôÊ^MÆÇIZU ðÕ˜É6&böDë½”²¿–-¼þ”(kT6$)%˜º-¦YSP×°j§sYM±Ó²jv•n™Ìâ úˆù_¬ƒq ­fhŒ}J1 GecxphÇà‚–"¢žî)S§M잘۵wÏèE»Ä!IDAT#+#åæLwÏûÞ{{v íeà ú¶½?$í&"Í2昖Âû>Ü1´›ˆº'öNíîdÓ'm;4Ã&"Ysc2‚¸ÁÐrF4 ìÚ»gã†W:::dYf?·ÒûD´ìü“G‡¬^ýcAÑ'äÒÝÝŸ˜ÚSLÒQÙxáå·ö Ñô™3ìU·¾ùÖžÁaK×dÃ*èê¡- "[Sw í~ãÅ-D4oajj÷íSŒé±[Ä,y‰H7BãA\ÔêÜlõo¶úÀ8¶g0¿víó)522JD,[‰höÀ4"êÞ5:’O¥3Eÿ`çÞb룪"¼óÞ–¦ÑG?aü~GIDATÖ/J¢,Ë#C#D$kæ/n™5ãÀ ÙtV ½’5SÓtKS ª®–T®E\Ì_ÃŽ_71´°aÕ|á7‰H‘•T:sÚ’£fÏž:*»vjŠBD]©t†%ìæÿy»¯–$¥ˆ&¼³óíü¨Â é>Ë4Ì‚¢•ÆhšþܦçŸtŒj§-M%"ÕÚß±ØGìnÿ‘nØ)¬QŒ €VÅnéÞk°œ893{öT"êêº\ÝÁóú{÷Ô‡D44úÞÙ¦nPZ0õ7^}GÓtEQ9ø@vwZ^V…}tŽTUWuþ‚y³gM—eYUu"*¨)”²Tï]£íIDATî>ßieâ§05Û}ÄIeSÖШ24ª¼»ãÃÕ?ùÍ®½{<,8x¶¢¨ìß›Ûß%"[L¿ðòÛCC£ªªOë›BDši[š®ªúÐH!—Ë*š>4Rذ~šéá¼:œW-eT7-M3ˆö‡¬Zž+o,…Ó’`Ù”–bÝ;„1´*ÙöÉæ Ǵ鯱1›_Û²ùµ-“'wqêÑ?ò`6r攩¹\vhhTÑôW^ܺ àå×ÞTJúæ÷ÍgwG *Ãy•ˆŽ8lþšÇž"¢‘wv¾ðÒ)½ :RÖ4-"Ú'›ž^”Pü³-bhm³gO½ä~2ÍIDATKçÑÐHAÑtEÓw}8øà¿ývõO~CD£²1* çÏþph”ˆ6¿¶EUÔ·ÞÜ1"«#²Ú7gF.›""EµˆhxT•³Ý™O|lªªbüæ·ÏæeehXVyÈ6‹_ö¹ "ʵyEQˆÁ ‚Z•^ºQwþÀô¿¾ú ~þ”™Ó{XÂŽÈêúg^yýõíìÙ‹Žø¨ª»óïîÚ÷ÁνϽø&ËÙyõ‘¢ZYAß“7ÍP4C/¤>yü'‰h¤ ìø`ppïˆnºaä ‘ˆdÕ$"ö¹ *Ýì¡©JÌN A -l_éY]Ç}È×ýùʯ|Zð2K–IDATUŒ¡aEUŒ—^}ÓÓD4wÖäI]ŠfŒ”õϼ¸eÇž‘‚2RPŽXÔÏfWí´QÖ cßHˆréÈ–—µ¼¬=ûâ[l€”¼nê´ˆe²9´ˆ -A7%|üȃ§õtê†1RP4Ãrž¦6ÿ#óYÈþþÙ×Y°.X0Êd•Ò¥6M·ò²6’WdE#¢Ž?²³#3’WvîÉ+#yE+u+“«E(i‹x^¬ó<‡K aÅRÝ>éPqë´²- ³lªnÑÏûïGµñ[ðÑEý¹\fýÆ—_}ë}6A*×¥Û†i˜‡4çñµ´s÷ðNžØ™ÉÚ‹q|IDAT+=t›¬ ê²é½†5’/ÞGœR iA:ëÓ'ßÿÀÃD´wDž2±CQTÓ°òÅï ->5"0‘Y‹8;Š+ b÷Ã\b¬1ÏöÀÉÆGR¸×‚ã ¥çµÇßqΰgF!èÑïõ^µ¤õ/[TüñµZÖø8ž›Ç bnþÕm;ö¾ú憉›X’²œíë²ô˜…Îã{>vø|g.6Ùa‹æQ)… ª.)êÞ™ˆTKP¥œ`ZŸ<|ÁšÎܶƒD´wDΛ’³Ð²}Ä™l.ðY*ìšpIó [Õyãï¨å¸F‰-”¾¯šÇÏ×V «ÁkšdKŽì–Þ7>fÁê´gÙWÙIDATGòÊa gÿÝM—g;rÅ)M›ˆ>vøÁ{Gdöï°…³§vwZšJDU'"¥ô S×MÓb7H\øù³ÝKt.Ö¶¸6]žvŠ0ö¡ãžÚº_ŠžØ]xà¼%Ä©RôÏr)¨Xmÿ¯þòkEáí͘káážÅ=à)*zÃÆÑDs`„­Qà˜8õÜtäÛ‰î}àãî®XœµHº5 ¬QÕü÷øêëo ¾¾eçŸÞýˆz§÷|¤Ê@ÿlçË5lMýâ²Ó–³PIOÔ}3gL!"ÅÞßýó‹>wþðn"šs`KaݦCî¿ö¯.dtOžn¦¬[£ªY‹ [hIDAT¶8Q‹¸f}Äþ3ß¶]_4îrÂÁˆ?è¢Ï´ÀåúçòLseý¿†•ï_µ˜KŒX‹DuöpW&lz²†\9’¨s£â½± À:.«¬8û.¬ðÀw»è2#JŽxã‡@+ED MèëÏõõÏ¢/šST+—M©vzjwzj÷"""šYPuÖ&¢”ZP¥ÜÜÞ.aÎ$çNaE·rö¨)t¾h¾ÓÞ_2÷>b zÃZV¶DŠìÔ œÞ“•IkRAèÔCôZD«¾þ1£!NbR¥{¿‚ú»ËšïÄ8åTsœCRìËíS×mBRØÖT¢4oiª»!LDyKbQèNa"R~.EIDAT„.*uG”¾­ÃT ›bÜG܈qõ've3Ft\PäÑ_Yk´Ù´z+©‚ú‡í÷fÖ¢GW+R +¯c×ÂÚØTT‹¥0».çNá”Z(ALš!ˆ)ͰLcÿƒ#tÓN‹‚+Ù‹yÍŒè— "AÌÆOaâxûZe-O§^½—˽9¦l­Ü5¯y{0°´D»&i}ªÙïM»ãhÝš7̶»n¸ý‡©Âû4Ã*?Q‰aÚDôáàîYÓ¦§H³5UÈdmM5Ä.É%"ÕN;{¾ÓT³%×>ˆý‹/yÆØ¾‹Ž8eƯ’®D§zXµk§8uˆ³I]ÛÚ^w$¸IDAT> ÜJÑǃý+ÛøÕÔ9Ñ\ž1ž>“¤%ƒÇYÇ.9ì ƒÜc,CHIvàOÃ2ˆHWl"Úðë'Ÿ~Å³uû!Ç_ç.Á4ËGó„t¶ØÊf? Õ¤tÙ¹"TÄ­¡è ª™7ðZGÙb=&β¿úëãïXx›IZçˆ:DÄY\ô,ïÜø³TPíèÎëè=ýkÌ­sšè’!ÐԞΩ= ýãÝÊ¥SîQÙL}ÝßzéÙ‡Ø4O¬ùxêç_$¢£?yñÇ\æ/JµÓYAg?eÕJe²–¦ºvdSžÇ`z¤2Qma¦]øó* ÚDõK§ÜYl^qUIDATªªa ¦a½ôìCKŸÕ;kgúwþøÌïÿkõÂ}•¥jF04ÛÉFUÞÿ“$=¯‘Äî>f?=)¬Ø©œàzH|&Ý)Á4"ˆ[7eê]óÖÝ25јÕoóÜžœ6 K0uv ËÍÞY .u¦´-Í*¼c©{é…?P)U])<†¦(”ËiŠ’qý$"g€ØgärÅO‘ˆ“ðUI0ÎíÞõÚúµßr~µ,‹ˆR©éº!Š) éó2S‹CÚ"²ô<=½öò˜Ëí=ðœNwÂ×p°†pü¯JB@«šÚ%ó‰CâOÿö[›‰È;¯qŸ¼äȘå芪™JAÌMO¾«ƒIDAT C')͆3¹¥2YQ*ßᆠ€V%d¦vÏ86É?ñün[š N`Ãñ‹úp—d*"b?E)-æ&Q*“Íd‹ýødw;wmy|͵IçLÙ6åâ/öþ¯bþÙÿ‹[Tï_šÞ>K\Á™\®#›²3¥g ñzÖ@ƒõð‰¯\õ »/‚]‘SeÅÔ4Í–X¿-k±2 ÑŽŸžOD–üž»Û,NsÄ'ÿ%Á²•rYÚÁݡ۠gM4ƒü¨¬è»#b÷Þ<•ÂWSTÏ”ì³w;ßÿ£¥îõ¼ôÞûï&]n&—íèžâ`-bh šªëºÁRX‘ÕQÙ ¡i;IDAT"S)ø#ØÑÓ{ôº¿ |逾%1—›ÉeÅ܄ܤəl.,hÑ"€¶ Yû?H.f2Ó:²Š¬RǤ⫶” g€ý<ëÜï…–6öîà°Ÿ¹I“³‚ng&:O_ | &ZÄк:$"©“ˆ¨SSõL6Í~ŽÊFW‡4*™”­Y‚{˜ˆSgßëì ‘fPF"Ã0,êacRdXÔcª õxòT3rîð | [Ò1¾ÅZÛ¨ld²iE·Ü)ÜÕ!9)̆ÙÄNøÚbš}5KaÍ ËÕ0µH2M[pÝ,Š‚fØ¢¸?\ÙW%~aRÒoqF@«bwJtuHì3ÍŠn±a'¹JÎIIDATGeC’RlØ?;Ë_秇( î¶°iÚi̘ˆÃ'ýÎ:1´$Ï#ÖØÏQÙ`Ã’TüID,‘ý%8ù˲ØÏÝþ¥R£Øi£E íŽ.¹žµæ´…Y@3†aE·ˆil"»yz‡Y£ØÓ;Œ1´/÷³†Ý-b§§Â0ŠÄo{ÚÅhs7„É×GÌr9~1Qp1¡E Æóíî>b§_Øé#6 }Ä5æi{®Ô†ED¬_Â0,´ˆjÏÿ}tlÀi S’qôlž_Ñ" ê#vrÖÓ4v"›Jí}¥ŽÐ"ãï#vzÜ7N°F±3½_ô½k(õñ:IDAT„1€ VÆÝGìîy`ùët{ærs÷KZÄq¸»Ü}Äîkq¬GÂ}ûûéä²ÃÓæØ"³äûî[N¨‰1A¼|ùżêÐV6mºÙÄÛ¶&þ¾¨úˆ8Cp† à A À‚€31gbÎÄœ!ˆ8Cp† à¬Mƒ¸ ¯Þ%T¿ˆŠE,šc­ZTœ-柦™·s3×­m%b÷þkü¾Œ¹Äqsõô9ÿ(hã;/¹GÆ/¼‚úÔ¯p÷¼« ~Ø>ãIÐ7—6¥­[¶ó®BãôôÕu}›¶ð­[¶×¦¸ÂIDAT{ÝÇ l¥ñ$A‹˜$46&ÜM i¸‘ïÝÛÓÜóOæ5ì¥è‰Ã¦‰³Ð˜Ëò”½Ð8câsöˆg¡þS4bkW¶akR`Ya»,l Îâ’{¡Èã‚SÀSTü)Ã*V7h¼ªZÄýc9ì-:ð%ÿŒþg8ì= °X°zF,Ô?—gš¨M²Ð²•wftÊwfŒž%BDµ#V?bÃn«° [ve#$š>þâ{ÓÇ“´Âe«(Δlyh°dA\×Ó)æd•½{‡ÍåÉŽ¤ËJš‹HôÎV²‹›=¢nV`­!p›W³¸ ÞÛb›èðˆXjÞ‰!ŠAIDAT)hSTY ÔVËô;ª< #N!OÉIÛ¿TÃiþø—Þx5¯@`ƒºN+ÛÈm[ó#P ëÜT‡jáÛ×êw$*¹ú6EüV[X'Om7EÍ7¬»À*ÛàîgËsÏêw'U­þú©UÝ Vªj‡ueÆ™×3ct±1—¸ÕÕ›ìž1N­â¬K•‘çŸ=l5Ã’«¬Š“:цØA–Å™Æsa æõ1·môK«ç ³vUV#Pœã¶‚ºAƒ +VÜtÇ7¯Y³nÝo¼á²Æ,µÊ+NM¥©*ÖT•iN ÞDÍ|­êÐÎn¹õÞ¥§.¾à‚¥W¬\Õ]8bùwsNIDAT`ãÄuºï‚‹¦ª[SU¦95xEtÝ4²M[`Z£E 0ŽUÄ-t¥¾³Ôïžf൫÷­/a—­ÆÀŒ9WmëÕC‹¸qjûQ”š«Õ½ÒÕâÕ_Ñ€™µZ–»¤[B7»¶íÈsnƪlÆÖÕêõ‡ $»¸ì¡þ Ü7GLŸt¹÷¢'­^à§ü¤¬d`Ë [®³²Î,•‰¹)âlÊv®gÑñwAL›Î3}M¢*%ݧG §þ?ìð‹®§¿bk½juÚB| ‚Ø¿ƒýû>ð0 ;ˆ=câ,7°´˜Õ‹®€¿œDŽ>üUhÄtØIDATŠ6{¢­Wv×VؽÜ8ÓV5p;DS­Ú‰‰ª”hŸFlRÿ‹ÞøWÆ×i ‰$nG‰øjÅ*;-ËVÀ³‚¼Ž³¤!XB­*Qf­Â±qZÁeK¨à¥*UPrÄ,¢ÛË1Kn†³ ­$bÿbeß*¹Ÿ·e+à9”¹T¸ìv.«NmNÂÖ«~M¿ J®¸2ãà´m‰/ÖÕd¯piƒÄ\ÊÖÈ' 4L3ýin—å~׬²Q\qšGô¨÷i UJÖGÌ"vvÌ€sŸ(N±qª±ýc×7LœcÃSZÌ“Å×i ‰ðyèO„êÛ5m p ´÷CšëÁð8˜‰ßº€fÖ\AŒ@I› 8Z>YÀYqÒ+ýá_Ìî\ç©Aµ*Q=·ZqmïQ/;#»”\Ù쵪LÄ;A]«‡ˆOjÄ­ÞKUAýy­r«ojp«ðY1þ{o)ä)!žqß>é¿ âÆ€èýSº'¨ þeg ¬^àâüw’†m ÷­ûþ’ë ͬª»&Âî6óäuôg(=Ÿnˆ˜Ñ¿½ÿ%ÿdѯJ ÆœIDATTÿ°ÊDWÏ=2ìí!¢Ìˆ’“®,pWííkõ>Ûë×êÙFгPt´‰ª‚Øýçpâ¬mÛtqšá0>Ôàb]c²²†aänsl7 r É%{ fýOÖ×\ýã~=h¦lùUο<¦â_~èO«7?[½þÐ$8<ô§Õn­^hf âVϯV¯?4³&zÖ@{Bp† à A À‚€31gbÎÄœ!ˆ8Cp† à A À‚€31gbÎÄœ!ˆ8Cp† à A èÚçIDATÀ‚€31gbÎÄœ!ˆ8KÄý}¿@eÐ"à¬AÜ?ÐÇþ…ýJ®æ3ÚÑR•ó÷ômݲ=ðWgØ3 ¸UĔŞ ܯ"‘<ª b§Íë #j©ÍźÀð ìF1€G‚ñÖ-ÛÝ1ên “«9ìÑ’uMø³µì˜è_÷p† à A À‚€31gbÎÄœ!ˆ8CC¨Ú~Ý]š¿äøËjü§ä«\âøûX=Ö¨¶Rõu¨¸„ºCG3l_¨•è0­¦´¤¯†Mæ~T« °IDAT¶ókXQ¯Öéˆ ¬Xt­j^ÏÃÁkR`ªZÍ"ªŒ&.‘UƒÇ`ÔCœOÃû3´ìÓ±£_m’vCDµkRlM4ì9ãI·F+>G¡6Ï#fîíåã~H&ßZÂv®gÏúŸEá9è¦HùÃ10IÝ_þ3»#&ó¬K`mÉæª¼ŽÁQ•µ­ ë¹æ…Wɳ”Z-´®•¯ p.‡å-·Þ»ôÔÅ\°ôŠ•«ðÉ:?ZëÞ †(ÛisÊfS}ÇBý–Ò˜-éÿó¼ÅÖP3oÌbÎÄœ!ˆ8Cp† à A À‚€31gbÎÄœ!ˆ8Cp† à A À‚€31gbÎÄœ!ˆ8Cp† à A À‚€3)p¨ ¨IDATþ¤O¬[WvšåË/Þ¶õÝ*êÐv1½úòƈW¿ùÍ›ª« @;JÄDô½ÜöÒð¾í•U¢ oë–€yÃÆC5°UšMmúˆA{© /p8zÊhñ§d;ÿâÏ•Tüլɲ<+¶Äz×j"q‹Ø/"…©G3Kë¯Kô,"l‰hù´„J‚XÛ¶á JpZjî¤pBÓߎóOÏÆx¦÷äND‡{z÷âÂÆDÔÁ3×Ö-Ûý+QlüZE`K \‘èš ©šA…-b–ÅN ;¹ìç“;ÝY‘žÙdžKˆÓþ œ¾ìÿ\þeE¯HDµ“NLáølY,IDAT1s³$ÚbPo•wMÄIá0Iû.kÕ¹\¦êoMšž\€fVIÇl ‡ lóV3}c"¦uƒÌÓs»:àUá],c¦pàòõà‰iO·i–Ò*ÁM«ò®‰ ÚÂLt>ú_³uËv÷«þ¬ñ_Šž>N­œ\÷w•ÂfIT~ áÒ@“V¬¸éŽ;o^³fݺ'6ÞxÃe“>±nݲϞ]ܤî>|Ä ¬[n½wé©‹/¸`é+W%h/_~qýêж1šºõ€Ç`p† à A À‚€31gbÎÄœ!ˆ8CøºIDATp† à A À‚€31gbÎÄœ!ˆ8Cp† à A À‚€31gbÎÄœ!ˆ8Cp† à A À‚€31gbÎÄœ!ˆ8Cp† à A À‚€31gbÎÄœ!ˆ8Cp† à A À‚€31gbÎÄœ!ˆ8Cp† à A À‚€31gbÎÄœ!ˆ8Cp† à A Z£‘qIDATÀ‚€31gbÎÄœ!ˆ8Cp† à A À‚€31gbÎÄœ!ˆ8Cp† à A À‚€31gbÎÄœ!ˆ8Cp† à A À‚€31gbÎÄœ!ˆ8Cp† à A À‚€31gbÎÄœ!ˆ8Cp† à A À‚€31gbÎÄœ!ˆ8Cp† à A À‚€31: OIDATgbÎÄœ!ˆ8Cp† à A À‚€31gbÎÄœ!ˆ8Cp† à A À‚€31g’û—'Ö­ãU€¶5&ˆ—/¿˜W=ÚʦM7;Ãc‚xÛÖw^€v‡>bÎÄœ!ˆ8Cp† à A À‚€31gbÎÄœIå'&3·ÿÞU¨¯k¯¾ì{?¸—w-êëÚ«/»êê›ÝcúúxU¦a¶nÙîþµŽdÏ^ƒ nIÃû¶—Ÿ¨5ýìçO²vXGÛ¶9T IDAT\“†¹öê˾ÿÃûÇ·á^„ nUƒûÞU¨»vXGqLёԆ{ÙA Ð\Lmë8Cp† †h‡+þm»’iðv@1x¹AÏýF­‚}ûâ©K—:¿:ÃegŒ9eÓò$ÈÖ-Ûûú÷cØø–3ŽX1œÎ¯-}®Îí?Àùö/÷pü¹­Ða{3z²ÕÒ‡¨AÜÖXS"Îqì4:ÜíCÍtV,_~ñ}÷­ö¤§ó=ål¼;^áûî[M®Ö´3½§•ÝBØNñ7åÙ•{¶9E4öÙ€g(üæ»Öâ6ÁþƒÒÓF<š'…îæ}‡ IDAT-‹Zöi.–Ñ,^Ÿì%ç»Ì=íb6A`L7›°?ÕÿЗùW!úŽÞ € nGe5ÿAYöÚEž´§.]êi;-b*e´;…ä ëÄ`Ó³8næ,Nº#špßU©‚Km|¯R"ˆÛ‘ó‡jÌÓÏÓ^ˆ(³ Ïg÷ œÖ®š˜=ÈNEüYšœû¶ w_â®~|×Aܦêqú5a³F±{ KO§G˜ Äiáº#˜Â[Í-ÊÓ‰Ü*êqÈ¡kÍsÑÆáé#öŸ¥î1ž^ÈfËb‡;”Ý= sûp:(œiüWùÆk·Ð¥¹@þëqÞT<pØñÜ0bˆu·“3•Ø+IDATdàU °ÙÌ£N€z†_¬Îp`à¶P_DØžòï#ÿøÀÉš_ôÁI!+}Ø7xÝÄ0>¹C3l8ì¥ÀÀm‰†…8p† à A ÀúˆšH¢ï×qAÜ’Úátm‡uô¸öêËxW¡ÑÚp/B·žv8]Ûaý¿^skϽAÜzb~A7´–V¹i·†p$;p±€31gbÎÄœ!ˆ8Cp† à A À‚€31gc>â|Ë­÷òª@ÛÚÄKO]̱m«Ä\Pæ»Ä N„+nâ]€¶öí8VIDATÿL®Vý%JvIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/show-diff-as-unified.png000066400000000000000000000277431203611042400331000ustar00rootroot00000000000000‰PNG  IHDRÎróŒ­é pHYsÄÄ•+tIMEÕ yX„tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝ{xÜÔ7ðŸf¤_Ç ¹p‰±.åÒË[ºOÙÜS ,MC¤eI n ¼¼˜´énÙn0íÃe¡-°…RêBòöZ‡ ïÒÝR -K‰S'%;NlÏMÒûÇ+ŠŽ¤‘4:3šñ÷óäÉ£ÑHGG3š¯Ïit$]×ÉäŠ+n (Í}÷Ýh~(QËBvæŒÖñ㛎8brªPýöíÛ{àÀà;Ûw)p Q{Å7|죙;ï§žz,Åãñ V z©ªJDo¼ñ×·¼úû×þÀÒVÒuålê¬ÓO8þèá¡‘l674¢TºÂT‚Ÿ¥IDATU¦¡¡¾±>žH( õÿóößzž{…¥­LD3f´°œÝýîÞ½ûÒÙlvpp¨Ò¨JMM‰Dbòu'4Ñ郈HZ±buêÌ3?5ÿ£{÷xï½þ¡ƒC##¹JW òÞÞÕ7óѵ~×zçÂe9~fã¸Æ©S'Nž<þ…ͯõlÚ$Ñ‘GOÚ»w°ï¯ïõ÷£1 @D´ohïÌG×~aÅgô¶iù–#h‘V¸Š@"²NÄ$ÚOrß>©wÏÏ׬í½lÅ“3é,‘~äÑ“ˆHf… Œäêê•Ø#€È™òƒ5 .˜5¼?M¿ß¡f²^V‰ÿé]"ZpÁ¬õñ¬úIDAT®I¬ìÉ Ú¯2%’‰ýýi\u`¦§õ¬®ÔÕ)»rMuzRÉÇH—$EÕ-‰á¬2˜Öòz.–ò½Žkÿ@®ib­ÚL>S¤ î@Ôd2šžÏëêp\Ußø"úéõ×éq)Ÿ×4I2&þñæ;ˆè‘«¯PÓ™lN“TˆX¢fò"SÔÆã:¿™ ’2IUô¬z CÿõÖû²j.«&ëõ¦)ò´#땲í0@ù©Ù<Åô\VÊä7ìØEDç´³îòeùÑòDKXËžzÿÿDšªé:i*q¡*;mcš–8rR3%”{†ÞüÛà{=›U3ÙìÞŽòn_IDATÁÜÛÍLš,Ÿ|ÊG9ÎX>ID[·>¿uëó¯¾úÒ+®K¥ÎeO=õÔ£o¾ù‡U«ºB| –|þ6ñwŸ˜5gγgŸa<õÐÃÑ’‹/3¶¾vÝšE‹.as,k{AúÅ~ŽÍ_ÑQ?ü ]lz­Ö­[³hÑ%_|™å)w¶oñçGߣOpï‘Ëvù‡5_#F×I’$"]×%"’$H*œìRs%ˆò¤Æ éºaÇ®sZé¾ø"ö°ãá_²œ%¢l>WIå4"ŠÅb$‘¦j’DÄ¢–MÅb‘ÄΨÕeôIɤ2.™©«Ë äê•L6—ÍfÓ™l:“ËÚIDATɼýÖþƒGÎ8sæ„ u$‘¤S,{ò‰G|ðÞŸ¯ýu>—ýÁš»êòÜ3Î!¢µëÖQsCÝ`6äËÈ6¬ß<<<üãï}åå¾úõÑÀÅbÉxlBCÝlnëÖMk×­Y{ÿÃÓ¦NÓ‰žÙô¬ùá°ëSqü‹ÜÜPç²›±X,57ÔÌæ¶nÝ´Îô☟*ºÝuëÖÑD»mïÑo_~ák£ï‘Ëv7lzÖüÐËÖ«Ëß>¨I'}4+ ˆˆò¹œ¤Ë$K¤Æv]wí1wÜEFÚ.ZÜñØ#FÎîºîZ"R%]Íèz>ODr<®K:ézL’ˆEmL’b1).ÇÚQœIDAT¥Â6ô‰ûuMË¿ÿAú ¬¦Ó¹‘áL&›Íd²#éìH:=2’NgÞxcÿÔi sçÇj*˱¼—ˆ&5OÌéú7¯¿I–$(­©Æ)r,ü©.ùÙ‹¯¸jéï^ÙrúœùD´ôÒŽºXœmîÎ;n"¢iS§åu=§k–‡"êSqüNÅwó/í¨ÅÙ2w˜^œ¬®™Ÿò¾uû…ë’ç/X|åUK_}eË'çÌw߮塯­W´j£fôOŸD¤X˜§ª$Åt=F¤ÑÎk®™þýïÓhÚ9»óšk§i¤ªD$+,…âRŒˆ(FDRŒêê’²,Ër\–c²,+DrCb„$¿Ž¶-IDAT’HVbãÆ+ÇŸ8ùÄ“¦œtÊÔS>|ÔG>vôÇ?>ý×Ç9®È1Y‰Çeù¼ó>GDÏoéÑã’—²1ÊÅ(..lxôñ‡.Lݷ殃Cƒq9—ã[·m^¸0µpajë¶Íq9þó_<°paŠ={phÐ2ýó_<ÀÖbÿŒýŠËñ£[Ž%¢?¼þßuñ8+ðÜós1Z¸0Å–9gÁ|-.Yò`ÿŒ9÷­¹Ë¶žÆb{ž¾å–]¸0õÄ“;õÆ›¿¿oÍ]lOwïù›S »÷üí¯ù1ÿc…˜ w_Åü‚XæÈ²|ÁÂTOÏ3·Þò¯,L=ùä£CCØÌ ¯ÖW…“IDAT•tÁa/NÌü”,ËÛ¶mfs¶mÛ,›<ùä£,L­Ys—y[óÌcZZÙ{T/²]óC@°¸,+r|t’ýÏ>A2å4ôœJªñoÇ5_a‡¨‘³;®ùŠyÒs9M'"YŽÅåX\–c±Zµ±˜,ÇYš¥|Œb¿ÚGš–Ö4MÓ5M«ÉzUIhI5Ÿ×4M%M“Um¿®Ër¡ïWŽÇ-úBÿ¾}·Ü~ãùoüþs‹>Ì1-æ?íg|zÞ¼3—^¾xbSó²ËV¼üÛ­·ßvãï~ )ËW^:¾¾ñSóÚúÅÚwþô§OΞ÷öÛo‘yúŒYg$¤˜ãšlñÂGúÉL¸+ôIDAT§¿æê¯ýæé­ç}f%42¦7¬ßLÜÞmÏß~Ûw~÷¾¦ÆÆŽ+/•%iÞŸ6ŠyLëÉÇŸ” XÏ‹=N‹}ÿßoè§Od³é¥_¼(NÒ¢ ¿ð_¿õ_®¿îÆ®Û:¿òµgžY¿ß¾¶–›^xŽ/áŸÜûòË/þê—Ïüò‘Ÿíݽ{ò¤)ÚáûuÍ5_ïüÊ×ú÷-YºpäàÁe—­(ºŠå94GŽÑ÷ÿý¶‡~¶>›Éj»øó¿yæÅóÎKD M7¦7¬ßL¦‡ MïyiÓí·Ýxç÷îmjW¨ÿ™gÑæÍÏýøþ{îüî½'ŸpòÓ¿yܼ-Û Þˆh¯¡IDAT£ÿýU/ÛeÕD-^€ˆþƒ(‘$"t‰$bZˆõ&¾~hy]’{ÏÌíÙsZYsþó³Z¾°pLŽ‘¤Kq£¯6.Y?!:åþ~÷»ÏîÎHçÒ™Ìp:32’I§‡G2ÃéôðHf$Ig‰Øây_dÍm%¡Ì˜Ùö뻞zâ×÷Ý÷“¿ùõšûÖwü‰F™Í&Ê I"úÙ/üâe+žÝð$ÍIDO?óø·¿ýÙ³æ=ýì³çÍgÏÓ³gÍ›9ã¸xB‘cÖ¯_É„)Y4-YŸ°}Jn¬3'ÜX·å…Dtò 'ÅëDôüóÿÑž:[m ΜqóVi‡IDAT\¼>)¹/Ö<¾In˜BDkî¿û¢Å—lÛú<ýýi§Çòù,Öó*I’m S¦L%¢ƒƒƒ_Zqµ–ÍKrL:ü¯È¦MÿÑÓóì¶m/¯XÑUl^ϵ"Íã&ÈÓ’…Ú^t‰¢ÄùeˆHwØkµes|üɇêß~¶$Ç óO(Ìç˱Ÿ©êÉzÅö)Ëv-k‡Ž¬SoKZIbo‘DDù\ŽEQUÒI“bDtåÓO9K£= ÷~æ³DÓ5’(¯S>—#¢DBaͲVfS EÖI’Ø-%RUýå#7MkÔtMÓTUSUUÕ45¯5MÓ4MI*’®IŠÇ¸IDAT׉š'6_²ôò©Ó¦~û¦Õ?é¾÷–[ïˆÅÅ2šZ.ÏB„ˆI™ˆ^ze+©êÅK.éì¼jSφmÛ^ø—îºéÖ.6}û­wÅ•8[ÒBQâýýýDtÉ’eì¡ù)ÛiöUàœóÙœ—^ÙJš¦(‡Rƒm®èb‡v*›{â‰Ç ëÖ)DDJÜ©„/ù*Òõ¥_ºxÕªoÎ;bãDsõzè§÷ÜsÇýkÖ}ë_o>ë3sÙ+澊Ӟ‘lþ.¯¢MËäõIûeäÃ^g›ú«º\'ï ’L8­kÌìïÿ€Fß#§mYÖµ-ªHhÖF‰éͤÑ&-™ºÔ5UËKq""faÆEIDAT]ûʆ§ŒœýËŠÇ­YC£iûƒsþA#"4µðm3!ÇYi±˜qZ,“Éܬ&¤yý¯¾óÁow §³##éá‘ôp:3<’I§3™t&—Îd¯ºâŒ„ÜÆÊUY’ˆHÿpþ‚oß´ú¥W¶jÙ|]Sƒ±+ åЇgÞ¼3¶lyÞ˜9ëô9jNýȇ?JD7ÝÚ5wΧ>5ûÌÍsznºµ‹ˆŽo;±®±NVl>{ E~ÿ½w‰ècùx²!iÞ„Ó4{È*°aýfc¦šSùU<.f»Sæ™–¦Mrý7VŸ{öyWÿŸåÛ¶½ðÛî’L ö{ˆZŽ<¶~\½1Ó}Ûª½ÍùIDATMÏ:}%æÖ«¿i‡úçÇ%âÆ]Ö5fî}ô=jLzÜ®mQ5@lj±(‘tXS"‰õ#°¤‘¦Iš¦éº.IÒ5Ÿ1rö­Ž/±ÿOìþ1¦í÷ÛÏÕu]U =±JBa’‘–'vZ,£DBN$%WrB‘ãÇŒ“­SHÆFFX¿A¦ÐoÉŽd²™LnÖé3ÛS§* YI(JBI&•M›ž»ÿþ&’ÊÁ¡DôU7ä2¹DòÐ7DóôâÅÑ;Ûÿòç·Þ$¢ÏœýÙd}bâ¤æ›o¾ˆÎN—¬O\tñçY9 õu‰¤bü3Ê98t`ÝÿýIÇWxFá~IDATü¯žÆ–±Ýœe­DR¹ôÒeDô߯ýnwÿ®›¿Ûõ§íoL™>™_ÅËbÆ´±p"©<õ›õ¯üv›S ÿòg¿ýÏ—fÍMDZ^Í §Í{wË-ß!¢ýýo¿ógVòÀþ~÷UØVžßÒÃnzþ9"ZvÉ—’õ‰„éKºÇióCûW ¡œwÞùDôÇ?¿É¯k)áàÁëÖ¾G u·k.ª–þ%2þEç_"™H$ädRI&”D²0'™”“É¥óZ^Õò*]ÿb‘³¼ü˪&±¼üËl憻®±'¯R^ÕÒyˆ’ 9™L$²¹U+) ófôÄ4EQ'͉ÅbÿJ¡GIDAT²ôŸÞ9<’IgFÒÙt&›ÉägÏžÙ±ôSm­SŒþädR™;gΞݻO;í”3Ïl¿ûî{O8öäIÓ&&Mß.ÍÓgõé›oºíªk;ˆè®;pÒÌSÇ7K&Ÿüä'‰èC'ž4¾yÜi§FD§œtê¤iëê’Ä9gÁü%K¾°téå'Î8II(ãšÍÏ:mš=œ;wÞ}?üñt¿ôÊÖ‹/i›>SWµº†:Ë*cØÂO¬_ÿOß¼nÉ’/̵BW5ÛæÎ·hÑg‰èÊ+¯>sΧc±˜¹œ >§©Ú’¥ ï¾ûÞ[oþÎ?_ÿµ¡¡ƒ³gÍY|ÑçœV™;wp«EIDATÞ¯{ê—=tÚi§Ñ·¾uÓoHHuÍ“'(¦v®¹oÔË4Í3×Zÿ¼V×\ðÙ{vïî\uÕE‹—8­{è=ºô²gž¬$äqãÌϺl×¶Û· Q)–ë»Mºò:éš~ãé…´7–^n)ॗŸºî"ºñôùyMWG»$’I…_SsYb÷«ýêW¿Ø0®Ñt /këÃïõ÷ d>80¼öñÿ×»{_6Ÿ›yÜÔyó>tö§O=úȉ£gïˆHJ&e"IUÕû‡öíéoßÐÔ<®aôûï_þ¸ƒˆŽ;¹Õ2}pphÏ®½DtTËTcá|.¿ãí]m'ÏZ( IDATNÇ㪪ö¾µ³õøcøÞV5M?n|C}cå)~süÑ¡ôþþC†›&ŽŸ4e»C„e/‹™§G†Ò ö0/Ì—ÍdûÞy—ˆ&Nž0aÒxþv?ìÅ9ªeª¦i{ví=ö¸£u]w_%—ÍØ?Ô¿w?M9êˆÖë"ýåÍDtÜ)­§-G†Òû?0ÕôÄàÀ¾Á}{ú›&Žì?`^×\Bá=j:ü=ò¶Ý„Ób‘cüõÓÍ Ÿ[°øCmGk¹\,“âü)y+M']ÍkšS”?÷þí¬õ°ØØÛíÝÒŠ«¿¾ª£©¹™m±ðã´Ñ«¾¸(×LIDAT´/ôeVI]"vâ["½ðà üáp‚¨#éˆuÖêÄ. ]zêÜÏM?jÕÇ´˜âé;––Ëh1"Úùîžóžù5KÇÞßwë¿ý¸ÐLÈ…íúF \¸$Á¨Õ¡ãBXÒI']’F¿¥: :ðÉŽ|<"ÅøI®ù‡ÒèÙËÝïeœšÈ‘DyÛ«Øy…µ¨Ð¦I±8ë«•e©¡±®pÙn¡?€FC“]Ý[¨Æh+W=mG$釱^¸qC¸/”BLJ;Zð~Dˆ¤ë¦ëï$‰}¯×I’høêU ÷ܾû=û«*]äÕþá«W)JœtI—èÐ=šš'ɸ!mj^IDAT/8€É³?þkZÕpÏíÆöë†C§´ _½jáÙ7N¥45x“L(»vîYg€êsîüShþO¬˜ÎdŒP=bòT2îWû§·Þ «r`˜cŽÚ·ÿç­íÛ߯h}jÍŒSæÌþ0N‹)òï~÷Ç뿱¼Òµ¨)7ßò£/}Y&öÃ\ Q ¢@8D-€pˆZáµÂ!j„CÔ‡¨®6%€*ÕÚ6½ÒUðaeçòk;oð²$¢¢ep ¯ÒUðä‘Ç6y_¸–£vcOO¥«n::–íèµ¹ƒkÿ@­Ý@½–£–ˆ^m“ã;¦IDATK¥«öººVWº åSãQKDß»óG•®ب–Ž‚PŒ­+$©Ö¾•@U[Q PÑí@h›ÑBD½ÛûŒ‡Æ4Œ, ˜ê ­Ú¶-ìŸû2~Ë´Ù»½½¬~ €ÃÒ w{_õ¦¨5â¯Ì;\½Ç@–?F Yš€î–%‹¶ÃâµÁòý¥­ñ¿eã»?ßòw_Þ²Eó†,ó } c†Ë§Þ6Rœ ±$I93DH_­%”Ù„ËÎØÎ·YæW¢€ÿÔýìómA²K[•µÝÓbNøW Eñß¡ËÕw±—Ñ_Œ„ž¹1Ë7l¾.[täp„IDAT&\¦ƒñÚªuê–­ ÛΨ=|_­Á|NÈ=,‹y_1>:lkÆ_`̱\ªÅïžíòê5Ì6^½/`+_%m û⯯Öãù+÷*Ûa_¯@¤T__-@ÕµQkoêº^é*ÀXT}{ùÒÕµzLݨ ¢©–£¶£cY¥«@TÛQk;Dœ¯1»ªE-G-T•Ë+]!µ!Çú®:¸Ø @8D-€pˆZáµÂ!j„CÔ‡¨Q ¢@8D-€pˆZáª>jÛf´”s0w€‚ßnÆp•mcåôV5aIDAT@UµÈ8ï‚D­SÎZ† 7?´®œLÍa~]¶–íçüF…VqªŒËî„Å1j7öôð3ÛS)§åÍeL›s“Ÿï>‡Ÿ »X4?t_ťآ;PTGÇ2§Á_ÜZµüØ\â†áOmY2ÔK!Á§–µ0"ÐݽÖåÙ"åžËÒå(ç|ŒH¡ r±—ÑÝY~"¶‹kÅ@´€W XÒ¶w{ŸyNÑF¨eI÷ìöUràUÄ ~]-aN'¬\&Š®ë´+èëÿ_r}Í ˜ ·lÅüþ’óžòsøÊúÚk(*B{Y¸ õè4íë3S´/Ó__åüÞ¹ÜË~‰kØî»e¿ŒS5Ü_R•·}=–ì±1Èo¢—•9ÀèÝwÐûñæeüŸÕR^s(QhQëå˜+Û;*¢CÐv¾SôôÚ+Qʉo¢úí ä—·-Çö}toóz©³÷JºÔÍvIïél®˜¯Ê¸'ràjxQÊkèT`‰U‚`Bî« ö™Œ¬R>ä¶ßÓK”üoIDAT©F›óé¬Ù¾6ZÎ:ûµú¸ðûÕKa¾„ÜWkÛš3”-ˆCßPàmŒÁØ6H—à^ŽÓûèwJù`‡ž2<ã/÷vnù¿n;}C²ôÀh/~ðݪíu¸´Ë²€¥qTúÑil×üõ¼èVœ¾ª[JpßbÑúÛ.éR¾Ëò.mE«aVz"ï£Km9ü2¶u¶}ÉÛ~9ýѲT hɶÏòGµûAîT ï/»÷|'‡Ãµè Èo¢è*!~`Á"H‚íáË?,º˜ÇM˜?î øÚK±¶O¹?ôR‡ÀuvïÇ(¥&|ï­íb~÷ÎcQî«xé!ušéýóµŒlèÿIDATûVü._ôpr V— Ý _Ç0„(¢¿¨%UµE¿Ú{\2jJÿú/n+åy%=63#Eh%«â'Q¹®¶«k5nÔµ*QÛѱ¬ÒU(Q‹4 ¶U}_-@ô!j„CÔ‡¨Q ¢@8D-€paFm›óˆEWô8 …ü§[Fy\«èL€jTŽ_‹ñw2µ$²íýmnzëåF¢‘â;j7öôð3ÛS)§å½£eû¬íê¶ÚV tËüÞN H«–¿;Œ±U/ƒ-V>[K;÷¬€2èî^`­€N‰ÎœòIDATÇ'Ÿ÷N <ðîY‘%äb/§q“l»bùuET  ‚DëuЖûÀEWˆ¬0£Öû €Äå©÷Õ«w ³ðk1áµÂ!j„CÔ‡¨Q ¢@8Q?a0ßüÅåf4cAøQËBöõ×¶Xæ#p`Ì 9j7öô°ýÞ?2f®ì\Nn;æQ)÷(!æœeì£Ð’’¡„fà{‡½a.@0aF-kÒ9+IéºNDMÍ-ƒ}­m-å¹Õ!ÆÝ€HuZŒå,›`ië 7/—9ÁÊĸ;P6å[ÌŸ˜^b6IDAT¹±,ãe+åw€'*ju]7w ¸°Ç6½o½‚ãîðÂŒZv9×ÊÎ嬻Ö²ƒ}MÍ>:j]²ÏKæVpÜ^ø¿ëêZm¹ÞÀéò/üvÈša܈ˆ;ÚS©¦æétx¼65·ŸaùAnøÐtŠQÛ¢0îTVø}µ,R[ÛZ,sly#ÇË¿e—§ÞWǸ;à¨Ób*À€;{‡¨Q ¢@8D-€pˆZáµÂUþÎ^LkÛôJWÁ«•Ë¯í¼¡Òµ¨$Dm+åæeóÈc›*]€ÊCÔÆ<Ðo¤8,þ%IDATÌÖ? •¿2à¢ÖŠë·âººVWº PQQknVݰäÑëXô=bDJøQËB–oV]à„%ä¨eƒæÒá㓯ì\Nν ÎÆžü…ˆ!æœeΕw¶è`‹cßoÓÚ6½Ä¿pÈk€Ò…µ¬IkÉY¦©¹ep ¯µÍfx±`ãÎb”ËD×Û–ž×c\D¯@°Œ.à ṉ(Œ_Ý(¹¶ã˜ÏÄîîµlÂh™-_6Çh´òN,%P•Ÿ(ƒ(F-¬^–t_=XÛ¹º´§R|°vt,cÝÝkÛS)sË—Í!S@ó<¾Ë4x•” ©IDATZÛámm´ආ£3>FÉ4ø{Ê…Fo‹KóZ.ø¯îÂŒZö)]Ù¹œï®èkj¶é¨%»ïøäùk¾y].ÃǨGFh†_'€1/ü;{uu­¶\oàå§úNƒÛvÅòëª)v;°?“Þ¶àKÈí©TSót:<^›š[ÈúF˜šc×=Fmó¾zñrnʶ?—¸>—sk| æ9`+ü¾ÚÑó*-–9¶,Qh<,Úzµœìr__±&Y®ôÚѻӦƴy1öÖØ.æ^,_‚ÑGÞÔQ§Åp’¤"ø—Ý<ǘö¸˜÷9üå_`Vù+ \@LEIDATðí\0CÔB8°.µV]]«qÓB¢ö0Æo«B„¨=Lu} ư]ÕQ[­Ø]€ * j«UôFåGáÿ0,µÂ!j„CÔ‡¨.ȸ{€/¾£¿§ðËwÔV×ï©¢}µÂ!j„CÔ‡¨Q œÛ¸~ ŽQ‹ëgÂ⵸~ ,è«Q ¢@8D-€pˆZáµÂ!j„ 2 Ó6£Å˜îÝÞFe‚Ô¡R›ð.`Ô"ã¼ µN9k´sÙ³æ‡lÚ2ù¿r8IDATŸLÍa~]¶_”íFßˆÇ¨ÝØÓÃÏlO¥œ–7‡š1mÎM~¾û~‚ì¢Óö)§„µÝ)€Ptt,sº¥[«–¿ãŒ¸#˜›ºŒ9+ùg=².î¡‚¸ß ±HByn:ciò „Õ €{è@E¹ØËè{-?¿Û­T=Ì^`IÛÞí}æ9E¡–%ݳۥdó 7_(§à×ÕòqætÂÊe¢èºNËÛ>U´X€ŠÀ¯Å„«@Ô¢¥ c ZµÂ!j„CÔ‡¨.øÅ^!­ "Îå×ýàE$¢–ˆ^mK¥«öººVWº U/U˜ÌIDAT*QKD×vÞPé*€-½Ò¨zè«Q \D£6Ü;r™KãKö¾­òß'¬Ä-ÖÞͪbª¤m9Á ¯Š×­¶ù p`ŒLcÌ4ØŒ—A‚•æ÷Y§ÅÌCïw÷2~]þYAÃóØV̽VN ”RóF¡hL‡R2¿ï.›à‡b"›¸w6¬Â£00k í´X- çå1g-B“AŠ~h+HÐû("¸…èeîËðÃ5…+ÜÆSKŸâ¨)k‚¯4i›ÑÂþYæX¦Åœz œŽH¾4óC§:ðåð]öÈåYÛ*-µ5vÙR¦Ó‹`¾k¥±¤í€î„ ¯IDATuã_§wÇiÿÆÙkùßR·¢ßE¼”lû¬ ¯_üS|eÈõM4/`.ܲóûKÎ{ÊÏá+cèk¯¡¨]ìeá2Ô£Ó´¯ÏLѼL|}•ó{s/û%®=b»ï–9ü2NÕpI=VÞöôX²ÇÆ ¿ c§Ì/‚¯÷±èz?Þ¼l‚ÿ³ZÊk% -j½se{GEtÚÎwŠž^»q%Jù ñMT¿”üò¶åؾîm^/uö^I—ºÙ.é=ÍóU÷D\ /Jy ,±JLÈ}µÁ>“‘UʇÜö{z)Õhs>"Û÷1ÀFËYg¿¢V~ÿ z)0¬¢À—y_øTIDATûjm[s†²qè \ mƒ1ÛiàÜËqzýîB)ìÐS†gü%ðÞÎ-ÿ×m§oH–ØíåÀÏB¾[µ½—vY°4ŽJ?:íš¿žÝŠÓWuK î[,ZÛ%]ÊwYÞ¥£­h5ÌJOã}t©­1‡_ƶζo"yÛ/§?Z– -ÙöYþ¨v?Ȫáýe÷žïäp¸}ùM]%Ä,Xé@°=|ù‡Eó¸ óçÁ}_r)Öö)÷‡^ê¸Îîý¥Ô„ï½µ]ÌïÞy,Ê}/=¤N3½¿q¾–qߊßå‹NNÁêR¢{áë†Eô×bµ¤ê£¶èÙ$©IDATW{KFMé_ÿÅm¥<¯¤Çff¤­dU¼à$*×Õvu­ÆÚ VE"j;:–Uº E"j1Ô¶ªï«ˆ>D-€pˆZáµÂ!j„CÔ‡¨.̨ms±£èŠgT£ÂàtË(k PÊñk1þN¦–D¶½¿­ÓMo½ÜH R|GíÆž~f{*å´¼÷q´lŸµ]ݶ@ÛŠ„®£c™ßÛ iÕòw‡1¶êe@£ÅÊgk)càž5PÝÝk¬°Á)ÑùïøäóÞ©þÃ=k ²„\ìå4n’mW,¿®ˆ*Tp¿êIDAT¨Ób½®ƒÚrø¯èê‘fÔz¸<õ¾zõŽac~- ¢@8D-€pˆZáµÂ!j„CÔ'ê' 替¸ÜŒ`,?jYȾþÚË|.ŒY!GíÆž²ß»óGÆÌ•Ë)ÐmÇ<*å~`e ¤Áœ³ìáà€}ZR2”Ð |ïð¢7Ì&̨eMZ#g%I""]׉¨©¹ep ¯µ­¥<·:ĸ;)¢N‹±œe,m}áïæå2'X™wʦc‹¹ãÓË 7–e¼l¥<ãîðDE­®ëæ¶CãØæ¯÷­Wäb.IDATpÜ^˜QË.çZÙ¹œuךCvp ¯©ÙGG­KöyÉÜ Ž»À ÿ×b]]«-×8]~à…ßY3Œ»rB{*ÕÔ<צæò3Ì"?È šN1j[ÆÝ€Ê ¿¯–Ejk[‹eŽ-ïcäx™ã·LâòÔûêw¼uZ C…pg/áµÂ!j„CÔ‡¨Q ¢@¸ÊßÙ ‚im›^é*xµ²sùµ7Tº•„¨­b¥Ü\¢lylS¥«PyˆÚØú§‘Ùú¤òWüBÔZñcýV\W×êJWJ"*jÍÍßx¼IDATê–¥+;—óݵƒ}MÍ6µd÷Ÿ<Í7¯‹ÀeøõÈÍðë0æ…g¯®®Õ–ë ¼üTßi°qÛ®X~Ý@5¢ÑnögÒ{Ã| ¹¡=•jjžN‡ÇkSs yC×SsìºÇ¨íbÞW¯1^ÎMÙöç×'àrn/Á<l…ßW;z^¥Å2Ç–% ‡E[¯–“]î«ó+Ö$Ë•^;zwšÃÔ˜6/ÆÞÛÅÜ‹åK0úˆÃÛ!€Ú!ê´N’Tÿ²›çÓó>‡¿ü Ì*Ô¾ fˆZÀ¢Öª«k5nZáBÔÆøm†§£IDAT@ˆµ‡©®oÁ¶  Z j«» 0TDmµŠÞ¨<à(ü怢@8D-€pˆZáµÂ¹woðÅwÔâ÷T~ùŽÚêú=@ ¯@8D-€pˆZáµÂ!j„s»×Ï„Â1jqý,@X£×Ï„}µÂ!j„CÔ‡¨Q ¢@8D-€pˆZáµÂ!j„CÔ‡¨Q ¢@8D-€pn£0@eµ¶M¯tªÆÊÎå×vÞ`žÓ6£¥R•©F½ÛûÌqìv¯KYIDATyÇ{¶µ‘68ÐW|¡1ï‘Ç6ÙÎ×u½Ì5©F+;—ßq×ýü|{^8{Á`ÀÊË?ýÏgŸýʹ¹¹S§^hwÀDD›Â¶m—vtt\yÅñÕWo8õüIž=ûo¾é¦ëoxݳÏ>ÿóŸ?÷ÂéΞow¨DDÏžÎïø»—»×SïØõ¯Þqé‹.}ùË_rå•—}÷;O~ì1€_»ê¥Ï>{*üçÏ=ÇÁ2ÑJüâ…gwü݃ïÜóV³ë +ðb hße!µ ¿‚/ÿ !÷³Gîy0wÇž+.½òü¹9Àüµ«^ Àguú /œ=;¿eKÇý©YV4ï‹ÿÖùÌ'qIDATšцõ²ƒ÷¼ý÷ßtæWçð¿Îϵ²‹÷‡ÿ àí¿ÿ¦xàžŽ¡ÄÙ³ó/¼`}::;~õܹò]?úåÏ¿à.éðmñùüæ™…­~o§·p~îìÎ-ÏÏÎpþEÛü¯üµ7ð^""KáÌ9sÎôoÙâúäü¶-f§ÁSü³f¡ãÌœÿÔ¹â‚9p¥ûâ~ur~ÛK¶ ¿pÞã¬åN›>³óì3gçý¿ñòm¯lóàÜ3§ž?}~aÅ3çÏÎÍÍ…âyÏ€ò^DD›ÜùóEsaÁ,œñ ;GþÀß~|Ðô Å¢ ”Ç¡®¬IDATnÿlÀ!å®Â¹ósóE¡PD)—ž_88R³×[ùNàœ§s.ïë­;nÿýß4º­pÅ‹þoãûÏ?yÌ¿sû¼'þð—xýà×>ñÆú¿›üïŸùþ?ñõøõÖÖï§nI~¿Ô¾ÛéKIDATIŸŽ]–Ú¡=>„Ø_Þ³óê•u`k*ëÔ®~ÏçÿòÝ-‡ï¥.Ç¿CÝÍ4!`š¦@L@°­ óEt (xílüè±§oÙþÊûúcÖêîñ +/˜[8ï- àæ‹(åÒb¡h%d x<‚×çµþM\í¿ôº›g~´µð>1:^ðž»jÛeÅs…‚0ïÇÖ˜‚9_8ÿ|áì¯Ï X©Ù<‚lç÷¼³«|ÅÂÂéBýlð½Ï¿eôÄ®Ñä®ÀÊ.QþÁ¡?~H¸íþ¼}‡ßþÌs¯ÝÚÑùãû?´xãœGàí¸|‹ÿÔBö»‘gë֎ιB¤Ü™IDATÕ­‚ßûtìóß Ø»çþàpú™¾·ÿzqÑ –-—øÎ/'Ö\–†¡Ú<ï²K:|ó…Våo¾ëñÝÓåfiL[¾óæçÓŸ€‚çéÁ}¯L@9;ÿÁÎÝß8TÎËOîPÌÂyÓ\XàózMÁ„izö¨Ùƒ-[:Ë©ÿ_ÿõÈ5Þ×½î=ïûð'§¿û/ÿþÆî×Ï/,f¦Çãñù|[¶\2wyÇœ~Ÿ0í{B|ë¨E³x¾üÔ$Aðûêfƒïüà{À5Þuø:‹Å•$¿ŸË×uí€Y¯ß4‹0‹ÅbÑ4‹@æüüüÙù³óOýó£>_e‚DðZo#<oåß×·ïŽãÚüÛ€®w|à×äÙ;ò€ã÷ïyûý¸vä›z#ŽEÙ{ÿqÀ5ïz@}W—µïã×¾ï]ÇïÿêqØtu–IDATÍÊ‚;®ÁwŽÜ=|ä›#o u7zJi²Xi]ðøw˜<þ'€ëÞù¾íÀ¼×c½Pà9ò—‹Ã¨-€Ü#{ïøêñr]€ ø¼Þ§¶äeù(†ï~ÀM\ëñ~ïÏn¸ûq8Ú;N‚Ç—ÿZåè7~4=r-êâᆱñÇãfÖÖ,ý”˜åA4€ù¢ÙaÎJŸá8ö¡½Ûÿê €r^>ö¡½Îsa¾hðù<&ÖÇx>^ÎÁã/ÿá¾7Þò&Ï‹ÄǾùË/»ì2¿æ‚iMs¾hÎÎ,Ì<ý¯Î)và×½^Oå=Ãã€cÜqë#‚·wy·IDATñáÛ·ÃÊGŽ¿”þTW1ûðïxho"˜ùïþÒ§óoýä‘kÞwÏ_¿w;€ãܹ÷~Üþà?ݶ]xbø–»ïøóíìzàñǼü“yøˆyc¼…rÖ¾ÿöëîÿÜ‘oöm7àºOg>~sÃVþzbø–·Õ\gÁã­¼‰?q èê Àô–‡Ù¨ìî £~´¹¿ýÀ_=~Ó'¾™¸ÞıGîØóÁsâ48µ¥/‹ç¡§÷¾çáãðŸß{Ã'ž¸±°à)â»wß𙽉`æ¼Y¨¼ËœøZâ«ÇƒïV¿òž¾ûÈW¶Ÿ¿Þ§´ÇÍîÆŸ‹ `>/ÃIDAT}´kÐlÂÊ×ö¸ÅS¨þsŽ—oÙþÊ{¢ow¾Z\°{ìÉaÁ[žk¼B‡ßgB°zô¼ùÖÿ÷¬_:ÿ߉œ;ó\Gçe@Ñ4 ¦Y„¹PĹÂÂ/¶?ÆÿÌÑówúÓz߀Ð! j®¹àñuz<^€@W¼ÞK_sãMÁ‡Èʼ鵥IÏ{‰ïؾ}Á÷¼i»§£Óßp÷·¿óÝéOÞè÷xóûÞ}µé¹äÖ›Q0«ÞDð–ÄúŒ/þáî?vä“‘·>¶ús7ÔßèõxóÈ£½ÑÚñ»wßð™'xü•ٿ׺Ђ·Ãç¯JÍÞš0r¢ÀãgIDATÕ‹6xâ‰cØþ®÷^oz½—ú½kÌ}âŸkxjK]¾òº¿Ã'|çã}Ÿš.EUÝ^ð¼zÇ`úa%œú³›ßÿs~uç’8*s9“¹ÙųVfë'&X˜Ÿ‡ßï/`¢(x|à¿YÎË(Íl|ñ­oà1‹°`ba~@G‡ßJéVn.Mhø…Ò¤ ¾ýwŸíÞ~ÍïÝýÓgþík÷|Óõ7ù¼~sEÏ|Á|áüüÏNŸyêä//9{òŠíÛÿ[‡cBÀôy¬°=[.éÜRÎm¥¨×Ûá÷–f`M§x‹\`¢XúðÞÊ¥¦=û`Mhxàõù{Æ^é{ÿÏ?ïÞûÃ{ÿæc'~|"ÿä•Wt Þb±xn®ðÜÙó¿|þôËŸÞïïðð©'ïîIDATwøì¨LSð{JÃNo‡¿œÛÊÃ>o‡ßW™ú*Ã=¿ß'½êUx¬ðž¿~àÝ×8.ƒçŸû6¼Z~Ÿ¬|àá'¾XD¡0/\²Õ»xcM?¥Á¤àóû*ŸÑ…oéþÖôã‡ñÖßí¨úäÎ[³{ýhpÀ±ã9oÇíðWÆà;v¼ ß^âÔ]/Ê.B>Ÿ‚×ývÀ{鋞ùYÖ¹ŒøŸOì:=ûåwïyäžO~馯~ðµuÞ͘™Ýïn&˜&Á4M¬y k&€bQ(‹¦i ‚ð¡é*çe}÷Zÿ—îû”²ó_õÝjšf¡`ÏSû;üÖy(. 4jü¥ÙF0IDATa$€#Nœ>ýôk®}ïñŸþûõ½oÖ·^öÃ?4q¶è=súü™S§:ž{Ö¯då½[~ûÄñ€ì±<¼¿íH͇?ñQÜ}?È9IDAT÷-¿õyÇ#j¡8wî¼ç%ÛøMz¢5$8‡Î‚ýVj§×s EŸÞáï.çåÿxïûË¢ÿxïû_û•/xôØÓ;¥àÈo*ìÙæN{˜kÎÏP¾¯¹³ÓW¾Q¯X<÷[¿ý®ßüí·}`ÏM¿qÓM¯¿gOüôÔsgΟ;ož9½púôi¿0?7WйÅkžE0á÷x€§¹£ï;îW+™¿ß[šöú:;;J“Ÿ‚·£û>xë—†îßóÖûñê?úû¿óÏõž?ùäµoø$ *‡¾þÒŸŸ÷ªö­½D?ÊeŸRw¾^ˆÊ#_{û¥ó[Ÿ=^gã‹;jú)MD`«IDAT%{üŽ._ûGþÝ|øŸ~ýë?mm¸õý—ÿËéùEa¼¶n´oKÍ?ØóÇŸºñuŸ²û ‚÷5KŸZãËrk©Gú£/|`2òÅ»¯½önÜ¢|0¨þõ±ã?.âmo½ehêÑû~üC¿ó;¹ìÔ^?xÕ]÷½³Kðù;;ýµÁ©L—ã ÙÍjî—«,Ø¿V &Ì¢9ò†¬ÕÙ÷¼·¦ƒÙ÷¼·ç¡¯yà E³ü­ÎN¿•„ ós°ž×ü'Ù½íò˭üïw¿òKÁè|ñ+ÿå;‡€_±õÅ‚g¡PðÀSD‚G˜Î{„‹·mÝ~Õ[îÿû;ìX­÷:J¤#IDATó¿Ê?uÒùÌ¥Ž—]¸rþgÿñÌém/{Õ+·˜{ö'ùgðÒW½¤8õÌŸ>—v¼¸£¼ ¿ÝgœûÖª:\i—ºõsúéc?;µõ¯}Ù‹õ:÷ìOòÏ”oeÞúÒ—¿¤s¾Nu¢-¨ÒÈ_{¦ Bj|Y¶¾ðÔO~yÞ uþ¹§~òËóð¢—]>÷ÌI¼ìªÀ•þÓOûÙ)¼è•Û_Ñé8wë’.¾hüÍw9¾wº]ùWÈtþ:}ëí;ÿK×UÅùyÇ#x}ž¥~ÑŠ&ÌÂB±Xôøýÿ_î'où‡CVš?uòWþ÷ {öìÿÓþáW^açöÈWl§IDAT——ãWÿñý0a ‚`šŽ{üøÛO´bLÍîU‡ZSVº¦ Ýú»Wÿú+\â)zü-}Ϭ8?¶èpâ?ù§ÿe}‰å—ÏüâÏîþþ¿50ŸøÖPšÜJŸB °f¶oå¯WýS²oø#×âï½Ëñ÷ÇÍÊ_Ñ6+¹Ð,Í8ã§?Ÿûµ—wÌCÀB‹_p¶÷ÐÙá·ò«õm7{®Ùï÷Ú·M›(Ý¢g'h˜BùÛ.¥od ¥)Á*Ç(çoþú»—É_}·ãOȽÊÓÖš`PMÎ(ÙªþÅOþ’åö¹PxîŒò¿ß S0Tž¡±íò—úBSÑ÷IDATøD|"¢Uø½ðoþ/|d«úå-Ö·QìÇ 5¯žQ>ò{áß,—%Ùvy©Ug‡ÿé'îGDD-¸õ†nÜpÿ v—Íç&£Zx@[«ŠƒS“ƒ+®)ã@ŸýÆNF2,Ÿ`Z hF2N¦ûÍIÉ´ÜÕ¢UZM?F2Tõn—Îd$Q¬YÖSáê÷Ek¢#è*…Z} =¥ŒÆh(Ðk/çtˆÈ Z˜ÐÅÊ(®ò;ß—2¬ßù%¼8õ4N"ö³ÅT2 AO…ËÙ$­”»š±¼‘Ü›’Ôl>—Í«¢®‹ƒñH:c"£iY`Œr>—ÍçÔ¨–j<í­YIDATF®éªfµ•~ÊG¬:º.ªù\6?GJIH+áQÉÞ¢+Jºö¸âê(MeóSûôÚÆ­Ÿ¹C ©9£i¢$@Z ëñòPZ±æ%ì$’S£š2 -D,-¦’1R<Õ´´Id0¾ú!·(JÖèÕ1eûš¦ÇãQ‡â«±T:`Z±ß`ì7•®` ”AUW‹z®Ó88•.Ÿ…¦¥e9Z»,F­¹g1 ]7 ½Ô‰ŠM[| ²Å럹WãÔ\Ê>])Éž‚0 ½*=é:*IY†nd–“Dì5M%VÏM«Ê\UÙmù¢j6ŸËÊ™ò8=274›lkIDAT éŒQ:†{ås“ö›J.›ŸÚ7XÝÕ¢ž— Fy6ù¼üS ¢‹ÈRsÍ“C¢Qê:& ³Ö¶«O"ÑH$ɤ3™h$²të¥Iå€DÕìt\Ô €$ËzFÑt¹qfn¥«ÌâžëìR™14 ¥7çr¹m&mDdY%c4•ql©s €ýf¹¨ñ²Îˆˆ\`© qpJ…5æuþÎבÑ41*GZK"––S‰Ò•=>h¿´Ê¹fQDÊšþîÓä±xiê@Ï ¾o™wGÔt©Ósµ·Í•ßÊ&ZtJQurHW]Á@(%©j´Î)ˆƒñHZ B¤ÚÆD´Ñ´ rðÚIDATð ÈØT¼/ì3&§ÕI#tYÛÅ¡)ÕJ"£€¨šG›¨ši¤úºR Ƨ§DÍ8‹ƒñH@ ¦Sñé©É¡ª]Œdm ¢,‹iDÖꮲ¨šªµ‡œÊ:–'ë-×ÙRÓ•T³Z§qp*;hmÓu]’¥ÚeGƒêðœ뜂¬æKïjRUãæ§CDîÓ05OMV~·Å}Ó¹}Öbu‚0’‡jo†["‰T²UK©Ä’I¦ '¯'ÉD#êâe"Úì6Æ“ç4--ÇóÝ­Ö_‹—‰h³[]j^¯¿Žãk"¢‹ßÆ5¯^"±Ÿ„%¢bS¤æÝ»wµ;NöH'IDAT"¢eØ©™LjhcáCA‰ˆ\‡©™ˆÈu˜š‰ˆ\‡©™ˆÈu6ÅÇ€Ó‡·;"ZÂîÝ»ø‰}Ù¦HÍfž<Ò¡Db»Cp—Í’šŒ¦îmwDTß©“ùv‡à.œk&"r¦f""×ajnÙìHoïÈìjµ†©ùBb²&¢i˜šCád¥À“‘¬Z¥õ ÏÌ ÷´; "Úp6å¨yv¤··¿¿W¡bvÄ^°_l½#³ö°w¤¿ü:`¢_zG&*8_>ÔïØbšgë·$"jdy©Ù8`• tYƒh#iUí²Š¨ÉP8™R]Á­²è ”Lõî•3ù{oIDATöJØj §Â•–µ=cÕ¥ZkÌíùºiŽÇ&úoƒµ022 ô Ϙ–ñîĈ•­³1Ó4ÇcöŽ#½ý7g†»K˜V?ý•Æ•«çlIDÔØrR³‘Ü›’Ôl>—Í«¢®#­„õx6ŸËæs“QM±’õ¨!çsÙ1¹²œÏ©Q-•4¬ƒV{UJ¥Ò`袚ϩQM€ZnY¯çµÕÛÙt÷ô”¬íåasÿŽГŽ•öšMôöΗӴµ/€X,†£G:—;¬Û’ÓÏDÔÔr¾r"ŠF• “Õ1ÉÒZ0­Ø/GuH‡â‘rûÒ²(ÙeýŒd(§™®T2Sa=žÍËŒdHIÊ*`Ô´¬êA §ÂPó¹rùALçö°vIÇÕè¢]ÒJxTRóSúBJZŽ×9Øø”‰ˆ.Ý»w5zŒD³ ÅO²{14 у" ʲ’ÔŒÁø’!Ô”p­S˜UªS浆¡i:qn©­[»£a袽‹‰Š)M‹7<Ÿµ~7+IDAT‚DDëæ¾ûlòêsÍu3º‘I†n•’ fôxdq«¥Ô”•2’©åöPª­¡÷òc¨Æ§ ‘K¬`®Y×4]VKå®Õ¨¡iC×Ô”d-m¬U·0k]ÎDYFõ^uëÀVíR9‘IyýŠs­ÔòïШ™UˆÈ²’Ô0}0Þ gIVq0 (Át*¤ê^f­[òµ¶)®•÷’Õ|:°µ»8U³QÉeŸ2ÑúöìÙ¯VöŽ|ücw:_˜>|¸É5­FÝûÙÏÝk%d~Q›ˆÈu˜š‰ˆ\‡©™ˆÈu˜š‰ˆ\‡©™ˆÈu˜š‰ˆ\z“ IDAT‡©™ˆÈuVúPÐç#J?""¢UYyj¶’òÌ“Gj¶3A­Ò SóôáÃVRMÝ[Þ8¿Ms·Éõ¬Ñ¶ìND›ÌªæšyÙZM$ö×iWS jó”†b ."Z‘•Œš­!sM^¶l»ª¶R”UMªÜ. (᪒Q‹JOÕöVµêHZe¨ §Â¥zTõËSU¿Z~`ÿâà´X‚‹ˆÖDûR³‘Ü›’Ôl>—Í«¢®#­„õ¸õ èɨ¦Tÿ%nè¢j?ZS4@Ü7]z`´”J¥k{«YEÉÐuÀȤ¥2ºÁhø™IDATI*•§ÊeóSq]QÒ`Œr>—“¯æ&‡j¦‰k¨CŠ«C¢84•ÍOÅ¥R·ùœÕRI£îùÖ¶©î¨”à²N-²8ŒÅ»49ÇòˆÈ]V{óÜʉ¢„Q%dÇdu F2U[’ÊQMªôÈ|DdIÃP]zª¦7¤3U«@$i€.EâR*•†hè¢(6/OåxµŽEµ¯–:ß P‚‹ˆ\b%£æ¾›oî}ÝuÖý5NÌo»¼Å‰æ¨šÍç²r¦ü‡¶84•-OÉŽ5+GR*=åÏÖôVÛ¹$Á0ÒC’DY64ÍÐ%9º‚soÀòµ~¾4 "rŸ•Oh$ûOÌ;·¸$wzIDATÔ¬Vˆ¢d¤µÒÀÒȤ Q¤r@¢jv:.êZ+I•Ñ4k]Szª¦·Lõª1E*©Ë²I–‘Ñ ŠK•§r„]UàÊ~uQí+–à"¢5²Â ¾›oÞvùÕ¨NÇÛ. ~ñS» ”]˜UššŒi¤úºR Ƨ§D 5%©ªŠºŽ–ªÄFÕì Ô–žŪÞ"ºtv@„9"Ym5Mš±Tyª¨ªj]á@ÊYàÊopQƒ,ÁEDkeµ¨¶w]]^¾P7ÌñûDtÑi^€jµòþe"¢5×¾;4ZǯNÑ&Ç‚¹S3‘ë05¹S3‘ë05,µ½IDAT¹S3‘ë05¹˶¹˶¹˶.²žìàãAˆ¨ž_¶uY½¹¤’)˹QSkP¶U¦i¢-e[7ù6XΕèb´Ú;4¬¼ì\hÝÊ˶:‹«ZcÀJ=Vi%8 Õ)íê(iz@ox¸²Ì@¥ jM?árµÓ´R½;˹ÑêmÔ²­Žâª¬çǧ3V6ÉhZD–ëTVu”4ݧ7;ìY`5;&ÅãQMK—Ž5wL³œ+­Þjož3MÓ9¡± «*Ûê(ÜîˆhííÞ½kñýW§NæÛÌrúÆcM^Ý©ð–È=IDATÀÌ“GÚ­¥Db£—ž;)¬g$ÂfIÍFS÷¶;"ªo¹CÝDâS(—ØD©™ˆÜlÛå[Þw߃47`j&"·àwËxó\}³#½½#³íŽâBrÇ®6Š%÷_Î\ÌÚ…EÒ…LÍ™®` +P2ViÁ¤»jHMô eý5/ötwÏ΀ّ^¡IÃõ²¿ŸŽ3mx(gååUÄV¹Îë¦q´® †Ö†‘ ]¥ÿ”L»ãiYÃÔ\ɤ™RZQôød>79¤§\–”­,ÔqÓ6Ž‰Ú”‹Å&J{3V»™ÄÑþöeç k¢¿w"fŸçx÷²2TA˜†IDATÏðÌÌpÏÊë¼Îë£I´® †ÖJ¥µsQ#KšdHÑã“y5²DÃE;:$Q´êK º¬Êßì¡ $fÆc¥õØøx VÂ.aêýšö ÏÌ$ŽŽ”†Šµ#éÊ8¼dÑèrv¤··¿¿×ÚÁÞÙÞ³ÒUïȬÝ~¤ßÙûìÈm‰ÙÙD¯ X=ÕÜÖŽzëôãhÔ›X4XëîµU…1QYîï/`ãÃ9‚ª¾t_ŸÆçåx—œè·‚*wâ|ù3ªE?GKW³ˆÕm‹8;Ò[Þk¢¿ñß<›¡¢(ÉP8™R]Á ÎauiÕ•ɵz*< Æ>{N ÜZIDATô]i`íxAŠJ7MÍF2NË“Óq±´ZŠž —GÓi¥*¾´5Vœg‚º´£`ö졉Ùrj¨»§çèÑEÿÆí?z'ú{Ý㥑´ýKV‡ï¬{Ü£=_7ÍñØDÿm°FFf1Ñß;;lÊc·Y¿k‰Ù˜Õ‘Õ¦gøë‰žžÄŒiÎì—ÍOÅuEIC%C×#“–"Èdè$ÉHîMIj6ŸËæUQבVÂzÜŒG5eíãMRsz¯3/× EŠÇ£š–€Œ¦E㕱qT­¿#&‡Cæ ~>­êé鮳qxÆ‘gzvÆ0q¨þøcöèÑžÄpÌnÖ3111{hö–Æíìº{zÊ VWåávobÖšì,un·©ê¤»Ö´Jip[Žª4˜êŸ€•`júq„½XÌJ™± »‡º5·äáê_¹Îu¯Oóó0›èí.gFk_±X Gm|1kZκ.˜ g·u.¥áþĨæ$«IDATÄD,Öü_áÆËÖÞæ¼xK«*¥œ#Å­iÃÐKËb$*f4 ÑHD7 躉Kº–†aè¢(Š¢„´ÐY“ C¯ =G C×W~®õ5NÍ且*gϺ¡Dd9£i€¦¥e9Ú°«JŸõ:§²Óñõœòèéîžm”tÍvÆ0q¨&!Í=Z7­¯*žÒ\¶é|5d¥Ðr-6Ò[ž,®/GlÜ4Çí1Øò[äèì¢k\/øº×¹lÉóêIŒÛ¸¬WÓ¨Û:?+7_4™¨ÎÅ+ÏËN¥qs’ÃHg IeÙÐ4C—ä(U³ù\VΔ§>Ê?k À×å#ê¹IDATXãÔ,Få}cSr:¤¤K[‡DÒ™L:“‰FZœŒ¾ÀçÓšØp‰^çŸîöŒnoÕ<ÝâOì'ú{ÝÃÃ==Ýݳ¥?gMÌÆb±ž1Ø[l¥]gM4{ptµ«ÃÙ‘þ‘Y 6nÎ$jf\J#¯†Gt¼'Õ¶™©\ëí§Q`ÎKÒ|(‹ÅjÞë¿ÔKW÷ðÌ8úkgX'&&zb;[yµZö¸,ç²³Û?—ØpâhÿÑ¥þrÛX¬Œ¼6y@FÓDIrnEÉMeÀȤˆ,b$ŠTR—e’,#£A#©Ð¨šŽ‹ºÊŽ•ééÆË-[âc0u’IDAT@qßXÜÐçà$LJte@¶”dëv²þsÍ¥Ïó*ŸÚ¡þPÃþ3q6QúÔe¤gÆ¥ÄÆKû÷&ºÇÇc@Ïð×+=ö­¬Ý6Û|Z»Ò•ãñ:Ç&ú¡÷`‡Ó;ûzeV±gx¸Û~¡ñcããv£Ú6=;cå ìŽëV£4ÃÙßäN;ÇáìO{ºëßìΈ–ÎË>RïÈlå‡Õñæ7?4héª`êuÛ]ÿLÏÎXOå梱y¹2× µö–„¨:9¤+®` ”’T5 ¢rD²5C’E@‘²>ìÓ䱸XÙ±öã´5"ìÙ³_=8¬ìùøÇît€ì‚òIDAT¾ 'Ú§‘V‚z|z*¢…£vâPé¾ =€ºhFÂH†œ­{Ë«5Ô|ØxL><óä‘=Cc¢_˜ˆ­àoyª±Ä…\£ë<;Ò{¾ÞÊíhÍZº*˜–Mô #=÷V¼S'óÛ.´øm@ë7:‘Ø¿x—í]WŸ:™ß7²Î¢æ¡ ŸýܽVBnøEí©ÉÁÒbTÍZóÈÒTv°¶]&™BtjqV§&«*«5,Þâ"±Xläè,°Aÿ½·ÛDå6ðظÙ$×¹ê:»*˜VMLLĆÇ7TÈÔÌjŸ¡¡ii9žwÙmËk)6>Óî6°Ø¸i¶Úr-®sÏQBQIDATðL‹Ý4méª`ZÔü­6œÕ¦fYÍ·é£<"º¨l†çɵŽOž#¢ö»èŸ¿¼\›%5'û7JY¢M¨IÉ’ÍiS¤æÝ»wµ;"Z'Íkîm›"5óùÜD›ÄPüÎ¥m›"5Ñ&Qs›ðÆÅ*'DD®ÃÔLDä:LÍDD®ÃÔLDä:›âcÀéÇÛ-a÷î]¼™ªlS¤f3OiwDÔ¿rRc³¤f+z((­~Y·çšÛ@6ÀÃd‰¨˜š‰ˆ\gs§æÅeå×s Q똚dèTÐZ!«¦ÝQàèH¯U_m=·5ÕðcÀP0PJ£Qµm¥¯/˜ØÝÂQfIDAT¸iÎŽôöN gÆ4{`ý¶‰¶œ3mGÍâÐT6ŸËæs*÷Œv×ÊD¿ ܆X,Ãm•±ízm!"jª… ˆ,ºúìÊÞÁ¾”8·„“Fͪ‘ …”°] \ÉØiŠc‹‘ …“)%ÐÐZèF2TÝF2T^^–ظiÎ wÝÃ3¦93ܳ®[ˆˆšZ:5’š(I€¸o:g£¥T* #¹7%©Ù|.›WE]¯Y`è¢jµjÊ€À5äÒ–”•m­-cò’ý#­„õ¸Õ`2ª)k1×V´_Ï-DD 4þʉ1 Ž€8459(ÂäŽÚ Q” Q”l¨œ_IDAT0ª올ŽéŒsÕH¦Ä¨l•ÚŽÈ2’†!AŠGìÝí"Üå-Köo$SHkÁ´b·Žê€(Ne×ðr¹A sÍ•¼œ–'­-C"DÕl>—•3AkF¢fu™–îßRÖh]”–só\ildÒÖ̯r@¢jv:.êF¦zÕ9ÝÑ´òzÅýC”ŒÑT¦z—Ï5¹XËÏÐãbÀšâ#Q€("Õו1>=Ñ• cUÔ´ò”¢jvP4’«ê_”0i„Â.»}iš…ˆè¢Ó05OMÖÎáÊj¾fAÍFÕÊšTµjhµÙSœš¬]®lYº`ñÌ2皉èOû:‚IDATb´¹¿¨Ý&¦i¶;"rµ öPP癈ˆ–c³<¯9‘ØÏÂÑF±)RóîÝ»ÚÑ2lŠÔÌ‚cD´±ðc@""×aj&"r¦f""×aj&"rMñ1àôáÃí¡¡Ý»wñSJ"ª±)R3€™'´;„:‰ýíˆÜh³¤f£©{ÛB-~ †ˆêâ\3‘ë05¹S3‘ë¸55ÉPx- ³62;Ò+ØzGfëo!"j“†©9 tÙÿµVèïB'Óµut¶{Ü4MÓ4Ç»·ÌÖÛBDÔ&-”mU¡l œÛ¢ØøxÌZêîéi°…ˆ¨MZ˜ÐˆÈ²¡ë°j¤:ÆÑiWgIDATF2N¦kUO)£†1 Bt{ÇJƒ@W0 dªGÖÖ²‘ …”°Õ@O…K-À^í*f­З2jXi ×ÙCˆíìiº…ˆh}-šIM”$¤•ð¨¤æsÙüT\W”4£†œÏeÇdHquH‡¦²ù©}’cg«A>§FµTƒ¡·¡‹j>§F5eª£¥µ=›ŸŠ#¥$ ¤•°·ò“QM±Ú”X™‰þÞ‰Ø×‡{šm!"Zo¿rR®‡mU_5’º8t0X¯Sš— Å#M»/7¥†Õ¯Å¨,DQ²ª¶[‡Óu:ÒZ0­Ø»EuT°ì®ýÂHÏ̌˻.ÛIDAT# /ÞBDÔSsM=l7¨ ÉH¦VÜÕìHoïDÌ™…o!"j“–ožEÉMeÀȤˆ\gÁš’n®ÔÆÈ¤[œ¶ç A»eÌ5Ïš˜Ål¢·r·Üâ-­EGD´öZ†FT4Bá@—µœÂHV½.Æ#%˜Nŧ«¦›«ÛŒ÷…‚Åš¦h~Àª•(G€84¥¶û"=Ã3æpͶÅ[ˆˆÚCسg¿zpXÙ;òñÝÙî`.”éÇgž<âÎÇm»<À‡‚‘峟»×JÈný6 Ñ&ÆÔLDä:›åy͉Ä~>™ˆ6ŠM‘šwïÞÕ–aS¤f~Îw_ãIDATFD 皉ˆ\‡©™ˆÈu˜š‰ˆ\‡©™ˆÈu˜š‰ˆ\§áÓ‡/¹óîÝ»xóÑškvóÜÌ“Gš¼šHì_ë`ˆˆXò¾æ&jÿ—ë2]J€¬æÕæOô'"ÚPV2×,BÃ×*åûEW¬Y•î´¢èñÉ|.»vy¹|¸Uœˆ.:Ëþ6`³¼Œ´NË“ù¸+u ÜÜ"qpj²ÁK†¡CŠ\ *,MŽKDtá-=jvæâ¦yÙ"‰vºŒªj€q ¯«¦ ¶UÒJ¥vuñlK¥êvuen¤•𨴠tY •ún\±»60gQpe 2|®ß³³ò7ÑÂèÌBIDATkiBÃÊÈå¼lšfƒ†ÑH$­Ö°EÜ7³Ê`«R*•†8¤3VRËhZD–ë–Ê®Q[™;ªNÚ¼s“bªY©ï†»ks[ƒý&EÄ›Ö'"ZVçš[ÈË «ù\6Ÿ“µ®r‚.<•4 Ãd9ªiiš¦ÇãQ†nƒ®ð¨Q·À`“Ê܆¡—^#Q1£iÎö(Uæ%±¼`ïXX­æ=7©ND´:K§fg.nž—+"c¹ì˜œÑ4# §åIkD|xçÜÔ|gVƒ&"ZCåŠÚ GÍ,ÚDDÔ. S3‡ÃDD퇂¹S3‘ë05¹S3‘ë05¹S3‘ë05¹S3‘ë05¹S3‘ë05¹S3‘ë05¹S3‘ë05¹S3‘ë05¹N«e[‰èBè ÚÂzËeóÎÕí]ÆÚ€8IDATW·+’¶Šß¹/>¼d3¦f¢6k©\ýEa(~gòÀ—o?u2¿xãEéÐ7k±%S3Qûm†ÜÔ<+=wRX·H6¦f"W`n"'~ HDä:LÍDD®ÃÔLDÔ˜‘ …“ƺ–©™èâgèë ¬ÿBt :ãdº‚%ÓÎ×Ff |š]JºÝѬ S3ÑEÎ8ÐÒ¢SÙ|.›ÏeǤTŸí—“!EOæÕHûB\ ƾ.ª}šyšÖîVƒ©™èâ–N¥WE{5ªNAÓìñ²‘ …Óòät\l¸ÿ¡kâ“cri]VÇäª?úR†ý·BJ±GÖ¥?ÒJбÅYþIDATH†œ»´ S3ÑEÍ0t1*;3¯(J†®@zïE’—CÓ I\t"â¾ikS¥T* ƨ![[¢Z*i@O… –ÆÚ‘´ÖãÖ.“QMiÃ,³…÷5mV且R’òäàEœ!JÒâF25J âP£IIDATu˜š‰ˆ\‡©™ˆÈu˜š‰ˆ\Çþ¢öÍ}×}ös÷¶7"¢Mîæ¾ë¬;5¿ã7¿ã7·/""ªöìÙß¨Êÿ:F0Dwã|IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/ssl-client-cert.png000066400000000000000000000312541203611042400321700ustar00rootroot00000000000000‰PNG  IHDRñµÀîQä pHYsÄÄ•+tIMEÕ 17‰$úëtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœí{|Õ™÷3£‘roÊ¥´ÅV¨Åv»m·Û–%äæÚIe/D¦å’@ gJ#»e)t‰íòBK/–Ò®’[R%‹öÝZì:w Ýíö}—µÓ¾š‚d+P \BÈͶ¤yÿ˜‹FWËŽÅòóýø“ÏÌ™3ÏyΙÌï<óÌh†Q&n¿½ AÄáá‡;Ì«Œ¡éªš/rTÍ;ïüó/(ƒkADɼõÖ›ï½wôåè LÊ®iúí··ýÕÇ>ºäÊ¿®­]€ã¸2:JAŒI2™000t`ÿý÷‹ÿ£Ê:£(Š*è+?÷áÒ‹O?922züdòĉ“å}8 $IDATv˜ ‚ÈϬY3gÏä¬V~Öì™òŸ_Ýõ›ß©²nàpØUAí/o¾ùÖ©‘‘‘£G—Ûa‚ ¢óæÍ¶Z­œ?C¸ôbà3Gß;€Y¿~ÓÊ+–.ûØ›o¾÷Æï?vüäÉÑr»J1øó+ñE?{b¼{½|íš^ºhöœÙøÀû/¸`î¾½/îÚ½ÛàƒŸ÷æ›GãCo¼ó…çAg•·Ž¿¹ègO|qýÕJõE ûùxÒž]a€ì–Á»°Äßbb¯ïx䉨ÚõçϾ`øÔ |ðâóXT£Ç?yrtÆ ë¶ÀïÇåÍ-¾OMZÏ‚ ¦ny˜8ÿãIDAT䚸üÄ»§ð߃Éá‘Rváþô×üÃå¿|ükkûÉ“£Çk¹€Õf}÷SƳ.~ûOÃÇY&1Ój™a±ðʉÄ,ž³qÉá‘“ œJ¤†G“'“ž3¿äƒŸ¡'d‚ N“ä‰SʈÂϘÁ¿rdtÞ ÅÆ'X( Ã'•¬ë‰þè©TB=uŠI CLñÝ#£óÞ?Fœ>œfyF]>~L±(¶“‡m'Gù~`ÞEöy,N>úÞ±áD©Ã'GFFSLj˜M0ö"‚ &ÆðpJI$”ä .™\Ýñ=?½·Eá˜D"•bcá†ývŠ·'O Œ¦˜d ]¯âIDATº'†“¦s\úפ#¬m$Î_½jÑ ÿð åµyÉóçü‡üÂ{/*'•ä©ü‘„õhêÄÈq–e³v$‚ &@r$VaFO&ž|ÀUU—l¿yMB¯núÉê¦Ã÷ÜT2¥(H%‘# ,Ë €¹—ÌyðHÓÊ4ÜúÉ“¯áÖ¯ÿô÷ŽÍ}ß,ËlÛèÏÏcS¯b’ –eÁ€Q 0`°ÏÝ/¶Üôýïݸà´{ûBà*ÿ K[þíŸÍ,?´sýWwÂû½GV—ÒÆ¡'¿úµí‡´ÝZná¡'¿úµíXýÈ÷WW•jí³ßxÚ·ØçÿÂGGúõIDAT/è].äóé’§Ý ’åa|çú¯íªVï‘;¯ ¼°Ô7éΓ]OA Ê¢0FíÎgr4+@’ÓdüÙÁW®ªºä±&¯ºº®«[t#‰a.‰$Œ¦ ‹p*™R•Ü€e–e8 §þGYÀϾr…ýÄŸg%ã]IîÔÅóæ¦N%“Ì(YV(Œ2š~/yrgáUÓ,àŠŽgï^ìyàš¶¯~!þÕÿ|šÒÀ0ØY³¬¶‘¤ù)K†À̘a›É'†‹_-ÄŸhýÚvæºm¿ºa‹=|9vÙ,«í¥mwær °¼mžÍr,YÀè*ü®×IDATó÷{¿¿×®í{òËm¡Ãõ×|ˆe°–¹3­–Ñd!ŸÇäùï®óКNÿ{©í¦&f9ÃÃçïÿÚÎÁ¿½kOÛ•  ìb°³gYgŒ$EmfÙÿþ¡5þ¼ž“]OEŠEϳ@bt”Q,°0H²¯´l¼Ä¿†¬ÿãêu?ßiú+-$%9¬(‰ Ç)ŒEaZœÎbÆ ›1gü×í_È}ìc7ÝòÕûúöýþ>[ó±Ôp"Á()(,ËZ,–3fŽÌ·Ž0À[8@ÑŸ´a5•ÔIåÊÖ»–ïûîžÿüÏöå—§’§1 KïÞµ‚á¬PF,¬¹œ×[ãóCnˆIDAT8–/nâÕÁ8peõ"ͱ,µ‚Iä-´èËòLÞÓfïw¿¿ o¾ïuGûµ?ØÆ³ R¬æÃð¶Ïc±÷wÏ ¹9V‹-•ÊTëBí¢´9#Û²ÙÃç^Ø ,_q%“T’à >ûO»~Ép6(öä;à{ŸXÈͶZølωɇâô©ˆ.(  0ú‚V–L‚a…’Ýyç‚þº¬‚~èÎ;ÓæR)$“,<€·p hq:ËZ,œ¢I3|?gå2³.úlãÕŸ²p¼¢¤ ¤R©”¢¤€$”ÑÑÑ“£'G_þí³K:—Ã@×5–倀Á¡AË’ØCŸo×ÇQIDAT;°ä–뇶=5,éxæëË1ôqö!À’¯ï½{IldžµOá–à–›Àž‡{Õåìa÷3?Ÿ?wî\Þ%¡()EM)#ÉĉÄÈ‘cÇß=u"eŇ8Ž5M6º®1Çi _µ°ša‡vs[öÿZÙµ_Ynzü¶ Ûpÿ¾®jhÇÚõß^ÆÜóÜ=7®xêÁmOï_wÏrVÙ¿÷påo^»d;´æÉ!XRŒ…zò޵O ­øÆ3íK îX»~†=ôøº5æ¹¶«Zûª÷,5ý·wÜ¿€rIDATzÕ۾µσŸ_†+ïß»²`¡>+å86ω3th¨®¶Cá,lFnô]ö'Ý~£æó«ßžÇ7–ö9}³:}òËk·ohw„ÿ×ß¿ú¾ý oyä_n®.©O,Û|,_ßÙ¬_Zíˆ{6¥-³Û_Ùp“êá’o<Ç=pŃ–ã—K¡(K·¿rÇMO)–,Ö½®ºoÕº‡ŸY[­`ßCk_\·h1³ìŸ,O$Ùö=´ì mŽ_Ýã#ߌ¯2ÙúÉm¶áÆ'~ݤzµæ;UûïYFB4yPêeªÁ0€vßQ Ó¨BÏhçE*¡0™&$IDAT¹s„~UÕ%x®1oM%tÙÕà gäÓޱòŒj‘½bÕÿ=É;ÛÇ?í:uâ«m.R”¤¢¤ $R8•L¼5ïäèð þðÁ?ð6žQÔ  “ŽÓmÖ=ß|pªÖÝxX Ǹâ–(ìÌU+‘Œmß3ÇM—W±VÛâ[×/ÛqïÞ}¿¹oÓúµ?ÝýøŽÇnZÙxà©]¨ZwÓ`¬<§å_ÝûÜ ª®¿y©Âq³yÎʪ¡ê¡ßî6¬qËÚ³w_ß}ËWqé9Ÿkÿ]½ü£/ݱmpÿ}®«woêûÖ²¼…<˪Y$ÎÂç{L“çÔƒÁpV Ÿ¡éº› Ë[9¦ ÊüIDATÃçWŸÏëϰWWƒãfdù ÇöÇ£C/++.3ö³p3- Ò³v¡vcEì›\%Ó²%=ªV‹E˰pÜ>cÓó{öK¿°¶š±p³-+ïZ95¬X¬ìþ{ë;út¢C/aEÉþ,Ëàïö ÁqÓg«X«»Jõj×}+2ŽqZ($êS S¢E•t†Q# 1: žç“I(H1,€;~õŒ!èГ0?ºúóX% ‰ÑQV«–'VE]ϽðŒžßÁžŸ=XSµð uë^;ü‡{lËåKWX8žÁHŠM*LJG_?vâå#oÏÕ00†Ñƒt˜Òh©d*Áp ¤6<íì IDAT+‚þÒúõ‹yº¬o¹Ê  •Ôî[©"¬è ` Žg±0Zrö:çóÿç·ë6üéÑ?>xè¥Cñ/8¿šáR©Ô©‘ä;'‡ß~ïØÞ{ç­ÞjѼR†Qãqõ¹€eÆœ÷Û8CAXÎÊ[8/ÆîèÐÇÿµ…7mu®o^¹í®í?¡úK7\~öÌ'‰T €e›Õjµò6«Àþg»ã/ÿLJ.«zí–Ö]ñ©_qêÔ{'Ž¿yâÔG޽ûæ[ÖÃQÞ{ûX29ÀÆ[mVÞfµØl¼Õª‡x3ç^¸à‚ \páçÌ´ñV›IÓm¼ÕÆxÕªEˆí{î%†åýäá>,ºù‹‘L¯{IDATËÁrV›kÃí‹T]¾´ŠŸ5goµéX‚µ\}u0¸cÛ°VÏë7¬Z„Øöûf_tÁ…#];®÷\pá…³Ô¶¬6ÞjÛuß R—ãÑ(-¿¢šávç+ÔžÒg8Þ´»ùÏÕ|û"<×ÖÞ—²Úx«mpÛ ¿oŸ© Ë›|VåõÍf£#œÕyé"ÃHIí~¸ûVoµeY6ªÍ˜=X‹•·Z³|ߎGÞjÜvýÇïÛ«zŒs3抈ÆÁñ&ûÖB^ͲZyú›”?›ÕBSëÏj³Z­›·Yy«M+±Ù,6›À©D*‘L%’¸÷À.C¢§ëIDATÐÿxó­É£þýñæ[ÕÂg_¹÷À®D‰dêT"ÀfµØlV›Õ’ŽÓY†±Ù,Æs“©Ô©OýÍõŸøtÕuw¬_ñÑ+>¹'½vô‰áSÃʉc‰cÇŽñÌèÈH€m†jJˆQ èøœæ¨Ž%»ü2ß3߉ÔþÓMKv@ÃýÏ}q!æ]0×fÅe_ñ5<üïŸþb5?wÎl›àL-oû|` õåÚ¯}sùǾ©Yv ÷ÕÚ}K>s ˆ;Ÿ>ïaÖ>7Îþ9}9¸ú“A€ îø·kfÎzs(OáÏ/ïX[¿Cß÷Ò¯üâw^jêÌe_yög£×Þÿþ?¤NIDATÉOÞ¯¬ºuþï~þê«Z{ŸÝöä;?}½ÉçËòú–1 ¼'3œµæ+_^õpë¶õWo+µ]ûØöY–W™FÕª'™ÞÊÛÀ›ÂvO ?õ庯Ý|Å6—nøåö¿zstùîèqýè¡%KÂUDÇ–ààÐK)\þñª‡¿ºmýÕÛ°øÎ_übã3EjïV½ºTÜÙuÞÃì‚9c>õ«[¡@aFQL\RAgÒô)†ùªY U'FÂH«þnÁ‡.0“M±|IW³©ÑÑ“)À¡¿¼îúõ¿«¿bzûð[ß~èÇ,ÞÊ«—Ý¿iô> ß¢e fïÍó‹ñÖ‚Œÿ_Úó—ÄÔ‚bjAçØ”Ãx+€’Qí™F¯½1òÁXGÁ Q⯰µ½Ø¬¼*Ìêƒ Z>ç9íñwú“š²CaŒŸ;é/`ô{¸£0é6 á'‰˜b($S :`xwZ IDATS #“¡®1jL¬€apB¼kV𻯽ñþñÚL$ß9!ÞÅóœþ¾-ýé¼ùçYèÓAåàï?ñï¸kVð»F‰ús$í]_…#äâ]ßø ãÃDóæëß®³YùW*¸Aq&Yµ¬˶M`ÇSÃÆzŸÁ`üøüO‘7&Ë9‚ âìs…YÓÿ,G¢ÑÃeõ‡ ‚˜ Ç…WümTM·ð–?üá÷Þs[¹½"‚ &ƒßzôK·Z ¾€ ‚¨ HÓ ‚ *Òt‚ ˆÊ4 ¢r o£o×®r»@Ĭ[·f0F¿°Ñ Mƒþ÷—Û‚ ÒÞ¾·{ö×IDAT©Ü.œ[¦ÍF_[¹] ¢ôv© (ŸNQ9¦AT¤é“ìohôËgÇþ™n‹ ˆ© iúcò„X‡àv 9Ë÷§xáYAíÕ™M›JB¢Ã^­þ‰¡rxGS•‚šÞ`œTŽúÀ$žô†ˆTH¼Ï|/"¸]ÎÜåI@héíi™È qzH¢=P¨$,!Eã±hŸOöd‘@c³tÖý$ˆ)Gá8]híÆcÑx¬Ç#MâéT&9Döj‡äÒ»#‰Ú,(†Db§,w68ì ›Cée±¹¡±Yl4ׄ¼¹^›>Ù.c …ÃNAÈXη‹i–ý Ž?§IDATþ@!Äf}k³džb3§ðì&̤+7K07§¯A¾É›ëξ^_zfÊ.qm º´A–eµïN_;œ×‚ L”{ÓÉ—«Ù •}Âg©ƒ&"fɋՈH Q·Œh´;¹WãDíÕŽfã±èV·Z$wÊîx,=RÀ/Ãé ¶ Bko4޻ѓ^ö9!G„ ^Sl–dÿ†€3Ç¢ñ ‰ä6–$—Ûm^ÎÞ%$6F|Æ,ª2ZØŸSߪ;Ÿk¡˜W!±±ÓŒÇ¢ñ^_DTs#iƒé­±žÖÜÉ[Þ\¿[{7:‹”HO™i'=Áh<ÄJÈDaJx>==ˆ‹IDAT,I‚Óg¾€ìoýî G„žxLÂÍÕb³+ê7v:ƒñ^äÍõ bÈí“7œÁhŸÄæÔS×é ¶J"¶ô´‰Ž¬]¹SöÅcA€ÏS-…‚.Â’äj‰ @9Cµ¨ªy0³Xhõ©¡¥àã*Dðhép—Û ¿ ·¢ˆnu·€ÐÒm1ªKRÈíÞš±,„2v‘ý„$GHÔöðDàÃc«Š,G²,9^™+ ­[\ ¸§Q§jê¡/¯31ݘïe”¤Û¯„‹îÜéªfMœ2úhšª ‚8Ûœž¦O¡&ÉAD)L8½Œ´·o¢41U M/ƺukÊíAÄ8 M/ÝL'bjAïÚ%‚¨HÓ ‚ *Òt‚ ˆÊ4 ¢r {¤A(–5IDAT¨ª^PnÆA«ï¶Bï,!M/Fß®]åv ˆÉgݺ5¹Oµ=/‹3ãeçÏwÙJš>ý/î/· AL&íí› mzçs6=9¦MgàÑr»@D~Æ\··ó yrŽ@šNÄÔfÞ|{‰5{ì‰3êɹi:ASúÉ·=Ë8É tÔÕu ”Û‹3ɹÑÃÓõbÌýÇÓÀ9åÌtƒ˜ ŒGÓeC¡ï¢eÂÍêWÖÄR>Â9ét71MÝYkkjÀ@GS¤âÙâ,œ¨¦žlÊ솱|¾¥Çù¬QØÛìƒn:ØÝME¥pCcþÇ)¿þv7™è˜ÿè s­IDAT¦ê×Ìõ¿òHÍ„(ªéºtV;ìÕbH+—²Ÿþ4`XH› ‰bÄ×õ´F¥Ÿ¼Ùh £ŽiB—¢Ñ…îìSÎëõvë…µíýj½þöƒMå“õ3KwS]·WëgW͸t¶¶­¿¿­vbÍšÇùìPÄÛŒƒîõìДm £ã`íD:hüÏéBS^™<¡;m:ê2&›ƒ5]ú€öë*FÕ!´öFã±èx¤æ  ¦Ë›ë«EÕ.EãAHê7E!´d¬îì`´+Ë8¡,ž ììF{—W_÷vuy¡þ7μ|bSÛÖßß®éé Æ8+Ò‘SGN<;ÐQW×ÔT§î í¬öƶÍIDATí™6U×1 Õïh2[踮}` ½ŽaTKy£©ì0+S¥ºöœs¶¦¦6c<²Ëp£;½ÜÔ¤w°ps&§2×ǹðøîWN Ý6bÞ¼ÓìUÎá0ÕÌutïÐÝÑ^ãõŽ5È9Θ§E¯×«_”äL>÷ÆhºÈ‘ÍßYÔ¶õ+ýíéE?ì@Í„f°s9" ‚ ûýÑ^­~`9Èë«Fô©}9hl–T-5ÿ=½c}à L5]’àëÙj|]ÈÔ—3\7y–î°q© ˆ²ÜÙà°7l6«>$š¯h Úi–ÌÄæ†F¿ŒØØ)ŒÈÝd0=‚ÚeºŸinIDAT‘; ²¿¡ÄÁØÙ=`èWAjjkÌÑ=íú¼»©®] júÛ6iga:òïZ·ÝƒµO+J—·»é:¨ ènªhÓ®¼Ýjx4Ð>àU ©ujÛžn¯­mïW”þÕ;¯ÓZΧkÛú#ÌêPe ËNÚ팓På,Sšr3¹Ñæ5-ë–Æln #×ùô8çŸ"ýêJ mº”þ¶݈êC“*vY^esÍ̃^ÓÖVÓÞÑ=ÐÑq°½M? ãsÆhª££»¶¶f\Îä”mºÈ‘-ØÙ‚ ìì†wuYe½Ú”01þ&hKîÔ´BŒø|µDvÇcÑ­n„ÄÆNg0‹Æ{¹ºyIDAT}Q Aœr$ÈáÓ…p@D†Ó)û7œjp"„ÄÆˆO ÿ=’8ùáaM—B±8ŸgZ‡ã± G øe8}ÁVAhíÆ{7:õ#ÆfõðßUÄÎV·Ù‚Oµà öh%±žV!AûÔåXЄáFätT=Á² ÛúMU»ZÓr8x°¶½Í«U«íîîØÙ ­¤p£ÞÕµ@Mm­± š2üºö5šÓç ˜jkjЭf€Òq•æ•©5uCU¦,;&·sñªŠàíÖ,äu¬8c6—Ïùô8çŸâý0Ð^W7ÐfHj­.F^¯,<˜Y52ÑsøÞƒIDAT6t7Õµ×´™Ò#ãrf ]­\×íÕr,%:s0Ÿ{Eš.zd u¶ÝMuÝÞ§Ë–R‰E³WÏ-)•tîE× ¡ÕçÈrD_\!,Ið¸\YF$âtùœ)YŽ‚ N„DG³¤FƲI‡¤²‰ó`"Χ NgÁmj$Ç3£Ã‚³àt KôjcÚ)…,ƒ0þb²œ¡Úù›kéöùJIâÔÖÔ RksµÕ^tïÌR²ƒóΧƒ‘uULá^ATí5¤×p¬£ÎHˆçÔJÄÛ¥(]Zb|Žåpp gŒó9Ÿwœ ÆìWm{—v©4d:ãmk¯…×›–ìq3HÎIDAT:“¾sÚyp’Žït71µeÌñ›0‹øÄÝŒƒÇé„,‡Â²Ó)¸Ý²$ɧÛx‚Ñx,êYcªˆª‘ë$SPÓrH*ÄN–g“ÛCÙßÐr÷hw6òõi5çmkG{9Ë`d$Í)ê܇2ô¨­¶¦f@¿üÝÙ=àõzkW{¡•hè»ìì.6}˜Ljp £©cðv)ýíYÉ!=+Ø¢i2Ë®3БuÞ*ä˜yHŠï^¯7kîÌïüX¿ŒÕ¯š¶þ<÷ »»»k½«K™~Õšµùœ©mëÏšÌ&æLéäºm”i:ï‘è¨Ë½£ŸÑÙL:êÎAWQ!GK}IDAT¥|r@X’²b\ApÊ0Èáìr»ÁåAÀq»8Ýn„% ûÅÍÀŒöù„ˆŒôŽiÒ)øÂË%SPÓ}>¨ ~IÌ4-äó,/Yó›àvôc)vŠÏY·¨ce$os¥çÓõ›é[šðæ Bµ[fú4ÃtÔj§¸·Kß¿®½¦«Ë Ô¶=¶Øt0½vÝ@ñÔ}Ú”éÎaÛ¼ÝM S·H_Л®kÛÚj´ …[ôvui•²ëÔ®öNh†ó9f¸Ñ1±!½£éŽàd¬_¿)¸¥MÜÐqï=·e÷hs}C@—S×Ö˜On±%ˆ "¶ô´²¿¡±SsHhí5ÊÈþ}Yíb‚¯/R7íèƃBa; .d§Ö®á@Ž'î`Ü%i“¦w1»á’2šÓv¹{ò¤_úvíêqÿ„Þ÷ÒÝÄt{'v ²c 'iœ:ê®ÃÓ¥šÅjžõƒžëL陘ýs£GâóæÛKü©zF··oÊÝ¥ªzÁÑ#ñEˆ  IDAT)ñ/µYïÚ}ð[ªJ^ìÝÂÆ¾ØÆŒ’Þžô¿Zz£-¹[µMú²;ÏÎodïXØN^ †qó‚Ù‚+§Å #άær;2x½ÞŽƒÀ¹|6œÃt§ç÷v)EDòœçsÊbšBï{9Sx»úËíÂÆÛ¥(¥ÖœŒq®më/ÑLÑšgû ç:SzG&fŸ8ç!M'bj3Þ¶X:¤éALa*þ}èã…4} ÚÛ7M•/ZÄ4¤ÈG‹¦'¤éÅX·nM¹] â,Qü;ŸSÒôbЋö bšÐêË~˜{ŠBšN¬Ç½§.ô#‚ ˆÊ4 ¢r M'‚¨HÓ ¿a¦wIDAT‚ *ºGZŒ¾]»ÊíAc°nÝzDÍ€4} ú_Ü_n‚(ýæ( Òô±™Ð»v ‚8Ðϼ³ |:ADå@šNQ9¦OˆîœOŸ¹‚ ˆ’9‹š.ûÎÀÇ÷Î6êw4;êÔO/ž¹‚ ˆqRðiƒÃ®ë¯'Ýšû5¸iŠ·KQ:êêºQÛ¯(µpæJ‚ ÆGá8]híÆcÑx,±âëÉ¢»‰a®ƒ×ëõâºt|}fJ‚ ÆI ¹—Û-G"€¼¹¾Úa¯vØ«õ0—4úå¬UÙßÐØ,6ªõíbX3&‰¦ÙßÐèˆöjG³T‚}Èþ†ÌZp<IDAT ý ÆòÙÁÛ¥(ým5@M[¿¢ô·ÕžÁ‚ ˆq2¶¦Ë›ý’àtÂÆ¾˜¹;dÿ†€3Ç¢ñ ‰d­#BP­ï‘Äf €Ü)»õ’€*ÓjÉV÷˜ö#>µBGËzéàíêòž­‚ ˆ’)ü›#¹³ÁÑ BkoO‹5¬îÔ”TpÊ‚àD§è¢[ÝÁ­@(l^•ýÁã.·~YvBhõ¹´ÝÍŽ^2¦}Ù@Hr„D­¶'BKo´e‡ƒ bJSB>=-è!wZÒ*€'Ç¢î°CMžd­Ž“±í›\Šj¡=Aaf<Ï2êq·©ÙmÏJtRIDATqsð£}>!"‡3WÍ™‘°$1û„íCpÊpæ.g?ŸNqSòû^„Ÿ`W³1‚Ë#ê« øúz]ÑaZ$ÉÈÞÀŒ¶²ÿ´ì NôÈ öj­¾ž"‚ t jzoOvžÚŒg¥;‚QO0½æÌX•¥lÙZz{²—Ó%cÛr³ç”O'‚0Aï ‚¨ÎØ»vÍQ9AqV ÷§A{û&zA3ASÒôb¬[·¦Ü.AŒÒôbÐG ‚˜ZÐ=R‚ ˆÊ4 ¢r M'‚¨HÓ ‚ *Òt‚ ˆÊ¡às/}»v¹óºukèÉ‚yý/ŸIDAT ˆs‡bÏ2ö¿¸¿ÈÖööM“í AqZŒñ|zgàÑB›ÊÿëÊpsµàƃ®1kAT>ɧ3 Sp[ú“¡ö†Í‘‰ûeX+øyë(F|=ñXtòÝh®X»Aç.ãþi1AGHl ¹{â>ªæÎÓð­è‹Àd9§ë ½@^@FÄÔdì8Ý,âE]Å)h:ë =äÍõÕZä^Õ@Þø²]HT—ÓÑ}æG‹ÔxYö74ú¢þ‹a!±±SFHtØ«Õ Úîº5­~³$û›ÅFuÇH Ñ°ã"±S–;ö±9°ç·œ¶CqîPRîE•rÚŒ·IDATCÐE)PÑãr…D‡]Ms«û´/ˆ@B‹Ï «j–$—ÛØñiß>õHb¾¤‡Ü)»U#)à—á ö´ êçI{„@c§3Eã½¾ˆ¨6­Õßê G„`<ôHb3‚†…Çàô5›½>õò"$´œ¶CqîPj>½Aw0‹Æcn©ÚPv#ÔCep»=’ IŸÏYލ·Ã^ÝØ)Ë‘¹9ã®é”Äãó!ÐØlÜ•Äf €žw’áüYÁíFgÀxæGœ²iµ|Pî… ˆüûzQßàèTWÝÁx¯ õsú02²XIDATz¶ÊŽúôõn,OžaRлi×Ò&®­1ÁÁ®v\py ÄéN_°µ¡Ñ^ pãÁÙX…ÐÚ<ÓŽç‡4 ˆ‚ûb³ŠZz{ŒO0ê9Ë. r»éƳ’'é^# ´ôF[LU²VM»œE(÷BQ9¦AT¤éA•i:ADå@÷H b Sú'͈ii:ALUZ}·•Û…2CSZ.¤é1UÉûÙåéMiy!M'ˆ) ½~£¯­Ü.œ‹Ð=R‚ ˆÊ4 ¢r M'‚¨HÓ ‚ *Òt‚ ˆÊ4 ¢r M'‚¨HÓ ‚ *Òt‚ ˆÊ %CIDAT4 ¢rÐÞ °²þÊ¿õhy]!‚ &ÆÊú+ÕMÓ¯½våµ×®,Ÿ?AÄ$À¬_¿©Ü>A“Ãÿ“B‡$·ô{IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/subversion-properties.jpg000066400000000000000000001217151203611042400335470ustar00rootroot00000000000000ÿØÿàJFIF,,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀê"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ìèÈ;I4-¥ÿø\òÐ/ûü¿ünø\ÒÐ/ûú¿ün¹/hzF‰¦iÞ{×Ô/¬mïd å*º¾üƒÁp1À$ç™<¤<$RÞ¥ïü#«­šDh÷qº=Áçwr{<=“åüÅÏS¹«ÿ –OúEÿWÿÒÿÂä“þ€QßÕÿãuFÿÁ:¯‰um2­JEÒ¬¦½¸WòÔÈ«lˆŽç.ı^˜%׃4[óX‘¯å4û+è­ÖtF_´3++?–C`®A =1Þ§“ §»¿¯ùš§sCþŸô‹þþ¯ÿ¥ÿ…Ã'ýâÿ¿«ÿÆê½ç€¼?¢I¨M«j³­”Œvq°%Q¢YI;c“{a€ Òr2¯cá­ÌøfðÝ]^ɨߴQ ù,wH›™[æPcÏËód‘ÈpõuÌ/S¹£ÿ ‚OúÅÿWÿÒÿÂß“þ€qßÕÿãuðê*¶³ì„:µª‚‘JªÒ]2_2(«˜$Ž”¯<9á5è4ïíÙmÊ_½µÐ“t›cÃo1"¡Ü»OÞp9 J8åjÍ_ø[ÒÐ/ûú¿ün—þìŸô‹þþ/ÿ¬¨ü5.‘ã­ìörµžÎsqÀ¸ˆ«Ê¿˜¨€F#’2®›Mðæ•¨xÕµFÝ[\¼²¸¶¹)4r°ŠI”må;»sÇ$£‡Zòôî US?þäŸô‹þþ/ÿ£þÜŸô‹þþ/ÿ¬ÃÚ£¥[ß¼:Š-Ö±š‘­Úf5dS¼Ÿ+æ9'Œ1é“ÑxGÃVz‰,¯me¸ó-5K2a+•·sæ.Ø8?)ÝÔsÇ$¡‡Š~îÞ`¥Qõ*ÂÚ“þ€±ßÅÿãt¿ð¶dÿ ,_÷ñøÝy°§ èú¥ß‹#ÛO¹éðµäÿ 4_÷ñøÝ/ü-i?è ýü_þ7^n)ªQíø°öÓîz?ü-Y?è ýü_þ7Kÿ ROúÅÿ}¯ÿ¯9áGÕ(öüX{i÷=þœŸô‹þû_þ"—þ”Ÿô‹þû_þ"¼ìRŠ_T£Ûñaí§ÜôOøZ2Ð"/ûíøŠ_øZÐ"/ûíøŠóÁN}RoÅ‹ÛO¹è_ð³äÿ D_÷ÚÿñÂÍ“þ1ßkÿÄWŸŠp£ê”{~,=´ûÿü,É?èýô¿üE/ü,¹?èýô¿üEp"œ(ú¥ß‹m>ç{ÿ *OúEÿ}/ÿKÿ &OúEÿ}/ÿ\¥}RoҶŸs¼ÿ…‘'ý¢ÿ¾—ÿˆ¥ÿ…'ý¢ÿ¾—ÿˆ®”Rú­ߘ{i÷;¿øXÒÐ./ûéøŠ?ábÉÿ@¸¿ï¥ÿâ+†áGÕhöüÃÛO¹ÜÂÄ“þ‘~kÿÄRÿÂÓþ‘~kÿÄW)ªÑíù‡¶Ÿs¶ÿ……'ý"ü×ÿˆ¥ÿ…'ýbü×ÿˆ®(RŠ>«K·æÚ}Î×þù?èæ¿üE/ü'ÒÐ6/ÍøŠâÅ8QõZ]¿0öÓîvðžÉÿ@Ø¿5ÿâ)á<“þÑ~kÿÄW)—ÕivüÃÛO¹ØÿÂw'ý¢ÿÇøŠ_øN¤ÿ t_øïÿ\p§ >«K·æÚ}οþ™?èþ;ÿÄRÿÂq'ýâÿÇøŠäE8QõZ]¿0öÓîu¿ð›Éÿ@ø¿ñßþ"—þi?çÂ/üwÿ‰®LS…/ªÒíù‡¶Ÿs«ÿ„ÒOùð‹ÿÿâiá3“þ|"ÿÇøšåE(£ê´»~aí§Üê¿á2“þ|bü—ÿ‰¥ÿ„ÆOùñ‹ò_þ&¹aN}V—oÌ=´ûGü&Ï”_’ÿñ4¿ð—Éÿ>Q~KÿÄ×0)ªÒíù‡¶Ÿs¦ÿ„ºOùò‹ò_þ&øKdÿŸ(¿%ÿâkšê>­K·æÚ}ΓþÉ?çÎ/Éøš_øJäÿŸ8¿%ÿâkœ¢«Ríù‡¶Ÿs£ÿ„ªOùó‹þù_þ&—þ™?çÒ/ûåøšçE8Rúµ.ߘ{y÷:øIäÿŸH¿ï•ÿâiá&“þ}"ÿ¾Wÿ‰®|S…V¥Ûóo>æÿü$²Ϭ_÷Êÿñ4¿ð’Iÿ>±ß+ÿÄÖ§ >­K·æÞ§swþ9?çÖ/ûåøš_øH¤ÿŸh¿ï…ÿâk RŠ>­K·æ/oS¹·ÿ Ÿóíýð¿üM/ü$Ï´_÷Âÿñ5Š)—թvüÇíçÜÙþß“þ}âÿ¾ÿ‰¥þÞ“þ}âÿ¾ÿ‰¬qJ(úµ.ߘ{y÷6?·dÿŸx¿ï…ÿâi¶äÿžß ÿÄÖ@§ >­K·æÞ}Íoí©?ç„_÷Âÿñ4¿ÛÏ¿ïÚÿñ5”)«Òíù‹ÛÔîjkÉÿs6Ÿ$ æš ÿ~¤—Á;ŸP„Ö×2^†W/|†P˧q|ä``öÀ¯v¢´XÙ­’&T”Û<:ÛÁÿ,料µŠò ɳæÜE¨"É&NNæ“’2sÞµ-´Ï‰6z,Úe¬Aç^Ùn¢¾UžI í!œIÊœr3žs^»EKÆIïý|ÉTbº³Ä¬|-ñK °ûu¤,ÛÌvúŠÆ¥°p®9ÀûTmà¿<öÓ½½ËMjª–òÔ- ©Ê„;þP@:W¸ÑOë³ìƒØG»ÃÒ½bŠ_\“èƒØG»£åy×z ëå“·kù™çŽ+Ô¨¡âä÷ŠaÕž=ká¿ÙÍ<Ö¿m‚[†ß;Å~ªÒ¶IËüžO_SL¹ð/Qî ‹…FwA-â8Vs–#/Á'“êkÙ(§õÉïdÂ=ÙäW>ñÝâJ—M{:̪’ oÕƒª’T¿ Hô$ÔϤ|C‘ãy.uh›|eµ J6Èùø8$} ¯W¢—×%ü¨=„{³Èÿáñ×4ÄÞù³2<¯öõÜå9BÇ%p1ž˜âáÿrëþ>>Õÿ«þ»þz}ÿ¿þ×ZõÊ(úì» öîÏ'“ÃÞ9™ÃJײ0™g¯”Ÿ1@þÿÞ\ X¼?ãˆ\´FõÌÓ’·Ê ‘þÿÞ O\õz(úì» öîÏñý¿ò<üU/ü þ#ÿ wþGÿНc¢«ëõ;/ëæ/«ÄñïøB¯ÊGƒµïùðÿÈÑÿñT£Áú÷üøädÿâ«Õh£ëõ;/ëæV‰åƒÂïüøÿädÿâ©G„5ßùñÿÈ©ÿÅW©QG×êv_×Ì>­Ë¿á×?çÇÿ"§ÿNÿ„K\ÿŸüŠŸã^ŸE^©Ù_0ú´1ÿ„K\ÿŸ/üŠŸãKÿž·ÿ>_ù?ƽ6Š_^©Ù_0ú´3ÖÿçËÿ"§øÓ‡…u¯ùòÿÈ©þ5éTQõê—õó«@óaámkþ|ÿò*8x[YÿŸ?üŠŸã^E^©Ù_0ú¼O9ÖçÏÿ"§øÒÿÂ1¬ÏŸþEOñ¯E¢¯TìƒêÑ<óþcþ|ÿò"(ðίÿ>Ÿù?ƽ Š>½S²«@óáá­_þ}?ò";þ½[þ}?ò"wôQõÚ}Zÿæ­ÿ>Ÿù?Æ”xsUÿŸ_üˆ¿ã]í}v§dVÂê¿óëÿ‘üiG‡µOùõÿÈ‹þ5ÝQG×jvAõh7ü#ú§üúÿäEÿwö§ÿ>ßùÆ»z)}v§dVÄÿ`jóíÿ‘üiÃAÔ¿çÛÿ_ñ®ÒŠ>»S²«@ã…©Ï·þ>¿ãN£ÿ>ÿøúÿv4QõÚ}Z4MGþ}ÿñõÿ_ìMCþ}ÿñõÿëè£ëµ; ú´KûPÿŸü}Æ—ûPÿŸü}ƺÊ(úíNÈ>­”þÆ¿ÿžøúÿ/ö=ÿüðÿÇ×ükª¢®ÔìƒêÐ9q¤_Ïü}Æ”i7ßóÃÿ_ñ®žŠ>»S²«@憕{ÿ<ñõÿQ¥^ÿÏüxt”QõÊ}Z84»Ïùãÿñ§f^Ïüxt4QõÊ}Z?ý›wÿ<¿ñáþ4£N»ÿž_øðÿߢ—×*vAõhCNºÿž_øðÿ_ìû¯ùåÿñ­Ê(úäû ú´ O°\ÿÏ/üx8XÜÿÏ?üxVÍ}r}}Z8±¸ÿžøð¥WóÏÿ¯E\ŸdV•ö;ùçúŠ_²OýÏÔV¥}r}}ZoÙ'þçê)E¬ßÜýEhÑG×'ÙÕ g‹i¿¹úŠp·—û¿¨«ÔQõ¹öAõh„ÿwõáŸÝýjÝ}n}}ZQ ŸÝýk:úÇ\¼¸/ý£d!òá“OY€03¹¹8ïü«nЉâþ$¿¯™Q¢£³9×Òµö¶ka«Y¤-»rE¦¢‘ƒ÷Xv©ÝxRöúÚÎÞîãK¹ŠÎ†q¥$»UWÌpHQšë¨¨ö‹ùWãþer>ïðÿ#¶ð}Õ“JÖsi6Ï,f'{}"8Ùõ\«ŽåZ˧kúe…Ž¥ ZÄ–µÞÎÀŸ¿ÀùG^OmÊ(öº[•~?ænÿì$ÿ äø?øºK}.ãMÒucsp·Üù“3¬{JŒdÿw?tWSÿUçýpýÑí:$ƒ“»>y¢Š(¸ì}-sþ¹ëšè"§Ó-⸹d‘w(Bq’9Ȩ.×/ýsOýUÍþ?þ¹Ÿæ+5¹] ìË?ùãÿñ£û2ÏþxÿãÇükžñRÜÜø‡ÃÚt:íŒWr\,¯k&Æ!bÜ:‚:OZ#ð°–IÒ?ëîÐ>Éo#%hl7ÉÁÚÊp{{ÕÙt?Ù–óÇÿ?ãGöeŸüñÿÇøÖ'ü!³Ð×â?ü Oþ"øCfÿ¡¯ÄøŸüE@mÿfYÿÏüxÿÙ–óÇÿ?ã\•Þ“iav-n¼eâ$FÓÈ|ðRÀ'|®#Û­‚䵀ɤ²Ðíõ”YøÏÄ´.é" ¤ ¥dxÎTÇœoŽ@C´ã4YÔÿfYÿÏüxÿÙ–óÇÿ?ãXŸð†ÍÿC_ˆÿð)?øŠ€ø[mÊ[ŸëâgFtŒÞG¹•H @Ù’eöÜ=h²¢þ̳ÿž?øñÿ?³,ÿçþ<Ʊ?á ›þ†¿ÿàRñð¶Û”·>/×ÄÎŒé¼s*³$Ê í¸zÑdEý™gÿ<ñãþ4fYÿÏüxÿbÂ7ý ~#ÿÀ¤ÿâ(ÿ„6oúüGÿIÿÄQdßö]§üñÿÇøÑý—iÿ<ñãþ5Î\øRxcV_øˆdœ“r‡€¤ôØ=*‡ö,¿ô6øþþ'øQ õ;/ìË?ùãÿñ£û2ÏþxÿãÇük‹Ñ…Í§Ž­l±ª_@ÖRÌÂî`FàÊ£…±=s×Ú½§ý—iÿ<ñãþ4eÚÏüxÿK4â@U¶ª®2Ç÷Àè ü)±]o›Ëxd…Ê–Ur§pÏÝ'¦GçF©©ÛÅor©íR€ã$ó“T«KZÿÄÿ®cùšÍ¨{_Hðé÷2Æpé2œt V×ü#KÿA+ïÊ/þ"°µ?ù^×ÿÐMOãOÞh–…i ¶66Ú„³%Æ©¨!h-¶FYT€è79àeÇÝ<Õ3[þ¥ÿ •÷åÿGü#KÿA+ïÊ/þ"²tÏÆu-'J¼xofÕe¸KGNÚm®ÕÝñæ1Lhñ–ÉŒž`êæ¸ñΉe¥¥é´[ýKN½´[tg¹š¦Ã“…Üãæ%@ä¶ŽÓþ¥ÿ •÷åÿGü#KÿA+ïÊ/þ"²tÿˆšF¥¬iúTV÷±_]ÝÝÙ´R"£Íl¡¤YbP°9ê9¨‡Ä*kó§ÚØj7:ÔîtèícXÕ¤{t+†gXžh²oþ¥ÿ •÷åÿGü#KÿA+ïÊ/þ"¹×ø«£G%¼NÖ%»–âîѬàµËöÊã!‚HeÁRËÏ%@$\·øƒas¬6—m¥ê²ÞAi Ýä>\bKT‘Ca£g;(+¸F¯‚ÀrÇY­ÿÒÿÐJûò‹ÿˆ£þ¥ÿ •÷åÿ\®“ñ8¯ïtù¥Ôu‹ùõËË;;T¶†DÙC2 #çf Û¾ïv?ŠD·–VQéú£ßÜÝÝY}‘!Fx®-À/ûyܸ`J å™@$@nÿÂ4¿ô¾ü¢ÿâ(ÿ„iè%}ùEÿÄRøwÄVž#´ºšÚ)á{[©,î`@x¦Œá”•%OPr¤Žzç mÑdü#KÿA+ïÊ/þ"øF—þ‚Wß”_üEnQEð/ý¯¿(¿øŠ?á_ú _~Qñ¹E@aÿÂ4¿ô¾ü¢ÿâ(ÿ„iè%}ùEÿÄVåY‡ÿÒÿÐJûò‹ÿˆ£þ¥ÿ •÷åÿ[”Qdü#KÿA+ïÊ/þ"øF—þ‚Wß”_üEnQEð/ý¯¿(¿øŠ?á_ú _~Qñ¹E@aÿÂ4¿ô¾ü¢ÿâ(ÿ„iè%}ùEÿÄVåY‡ÿÒÿÐJûò‹ÿˆ£þ¥ÿ •÷åÿ[”Qdü#KÿA+ïÊ/þ"øF—þ‚Wß”_üEnQEð/ý¯¿(¿øŠ?á_ú _~Qñ¹E@aÿÂ4¿ô¾ü¢ÿâ(ÿ„iè%}ùEÿÄVåY‡ÿÒÿÐJûò‹ÿˆ£þ¥ÿ •÷åÿ[”Qdü#KÿA+ïÊ/þ"øF—þ‚Wß”_üEnQEð/ý¯¿(¿øŠ?á_ú _~Qñ¹E@aÿÂ4¿ô¾ü¢ÿâ(ÿ„iè%}ùEÿÄVåY‡ÿÒÿÐJûò‹ÿˆ£þ¥ÿ •÷åÿ[”Qdü#KÿA+ïÊ/þ"øF—þ‚Wß”_üEnQEð/ý¯¿(¿øŠ?á_ú _~Qñ¹E@aÿÂ4¿ô¾ü¢ÿâ(ÿ„iè%}ùEÿÄVåY‡ÿÒÿÐJûò‹ÿˆ£þ¥ÿ •÷åÿ[”Qdü#KÿA+ïÊ/þ"øF—þ‚Wß”_üEnQEð/ý¯¿(¿øŠCáÁ´íÔ¯Iì”?önÑE÷ü#“ÏõÏýüÿQÿäßóýsÿ#ÿãUÐÑE‡sžÿ„roùþ¹ÿ¿‘ÿñª?á›þ®ïäüjº(°\ç¿á›þ®ïäüjøG&ÿŸëŸûùÿ®†Š,9ïøG&ÿŸëŸûùÿ£þÉ¿çúçþþGÿÆ«¡¢‹Î{þÉ¿çúçþþGÿƨÿ„roùþ¹ÿ¿‘ÿñªèi2ÎþÉ¿çúçþþGÿƨÿ„roùþ¹ÿ¿‘ÿñªè7 i“ùBæü#³ÏõÏýüÿQÿìßóýsÿ#ÿãU¶Óc½FÓÿµO9ŒøGfÿŸëŸûùÿ¤>u¿¸öÖ?þ5Z†\÷4à ô4ý˜¹ŒÃ¡0ÿ˜…ÇýüÿU+‹G±½·ŒÝK*ˤ‡*pT¦0B/÷nù£Ò²õFݨXŸúe?󊔡epR»!ªºŸü‚¯?ëƒÿè&­U]OþAWŸõÁÿôY<ÑEdŸK\ÿ®_úæŸú«š/ü~?ýs?ÌU;ŸõËÿ\ÓÿAsEÿÇÿ®gùŠ•¸ú5ÿù¼#ÿ]n¿ôCVMÎ-¾­âË¥¹»°½‘ÒúÖâYæK#PÛàÊGî€2BÊ㉠{¿„ƒ]¥¥O{¯èúŒoK™™9ré°éÔŸÃß‹ÓÂ÷VòÛÜZ[˪RHÝ·+© ‚¸ Ž1VIç×w&³¤Ï®K¯Å§o{z,¬Zñ^ 5ªÂ¿Î¥cÉpr¢G“‘L°‡Åï®éï«ÞßE|>Çû˜¬æ’7O*/´n‘%[UËý êÎ)ŸÝ ôCµÊ\:#"9o™Uˆ,Û U$wÚ=*}×?óÊ/ûúøšâH'åU;J&Hê5Û%“Æ:ôñßhcžö†o–g’ÜÆ$så‘çîøºŠé7\ÿÏ(¿ïéÿâhÝsÿ<¢ÿ¿§ÿ‰ 4ðô:òApúµö¹-ɵ_µÃmgl)ãŒo}®ëþ‚7ßùÿQö»¯úßäþ5EÐXͲøy¦½ ê©scnÚ\·R½µŽœ¶ðÊf‰bùT1+€€’ÅÉ$ò<]ðüø·PŠâKø-¼©¢–;”³Åí¾Ã°Î®»Tò@u|3þè]/µÝÐFûÿ ñª>×uÿAïüÿƨº 6ÿ &±ÖƵe­"ê뺌>}™x‚Ü¢£ÆÊ$RÄm0aß+é&•ðÓû;ÄZv·&¯ç]A¨_ßÜ*ÛmIdºEBo%BŽ ryävÚû]×ýo¿òÿ£íw_ô¾ÿÈüj‹ ±7…¼3ÿ×ö×úgÚ?´µYõõ[<¯3oÉÔçzñœôÑW/ö»¯úßäþ5GÚî¿è#}ÿ?øÕAc¨¢¹µÝÐFûÿ ñª>×uÿAïüÿƨº EËý®ëþ‚7ßùÿQö»¯úßäþ5EÐXê(®_íw_ô¾ÿÈüjµÝÐFûÿ ñª.‚ÇQErÿkºÿ ÷þ@ÿãT}®ëþ‚7ßùÿQt:Š+—û]×ýo¿òÿ£íw_ô¾ÿÈüj‹ ±ÔQ\¿Úî¿è#}ÿ?øÕkºÿ ÷þ@ÿãT]Ž¢Šåþ×uÿAïüÿƨû]×ýo¿òÿ¢è,uW/ö»¯úßäþ5GÚî¿è#}ÿ?øÕAc¨¢¹µÝÐFûÿ ñª>×uÿAïüÿƨº EËý®ëþ‚7ßùÿQö»¯úßäþ5EÐXê(®_íw_ô¾ÿÈüjµÝÐFûÿ ñª.‚ÇQErÿkºÿ ÷þ@ÿãT}®ëþ‚7ßùÿQt:Š+—û]×ýo¿òÿ£íw_ô¾ÿÈüj‹ ±ÔQ\¿Úî¿è#}ÿ?øÕkºÿ ÷þ@ÿãT]Ž¢Šåþ×uÿAïüÿƨû]×ýo¿òÿ¢è,uW/ö»¯úßäþ5GÚî¿è#}ÿ?øÕAc¨¢¹µÝÐFûÿ ñª>×uÿAïüÿƨº EËý®ëþ‚7ßùÿQö»¯úßäþ5EÐXê(®_íw_ô¾ÿÈüjµÝÐFûÿ ñª.‚ÇQErÿkºÿ ÷þ@ÿãT}®ëþ‚7ßùÿQt:Š+—û]×ýo¿òÿ£íw_ô¾ÿÈüj‹ ±ÔQ\¿Úî¿è#}ÿ?øÕ!º¹e ê7Øh A3ÉqóvÛì½ûŸAŸ1¹½±Ñ|C«ýPM'í¾ òæÊšS° œn<ü‚vŸ™›¹5p§9»A_кt§QÚ ·å©é“_Ú[Þ[YÍww7;¼ˆ^@]£-µO-ÉÇJ·^5Œg·ÕuXjKv¶BÒÚ?%<«¶Ž[±Ïò†cBçË)̇Ž6®¾—ñÚÆââ;»OPµeF†[ˆ`Yƒåƒ©òö&ÌÊñ»%òq·Q˱RWTßÜvÇ*ÆÉ]Ru¿3Ó¨®þ¦‡ÿ>ºýûOþ.øZšüúê?÷í?øºÙ¸¿ùöÊþÈÇϦwW+oñÃS@²Iy$ s˜äË/=ö‚?#Z¶~&Ñ/Ö#mªÚ³JÛQ@ŽNq­†Î}¹¬g„¯Š |™ÏS‰§¬éÉ|™«EW9ÊQEQEQEak_ñøŸõÌ3Yµ¥­Çâ×1üÍfÖorQE (¬Ë]M¼¾kXe›ÍIi-¤HÝÐÊŽÊØmn“…cл=ÔÓ[E+í{™ PŒ¹‚3ãÛåF<úSj*­ôZ…»Ï ºªÏ,8îŽFºvÊœ{b­R¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ªºŸü‚¯?ëƒÿè&­U]OþAWŸõÁÿôLžh¢Š¢O¥®×/ýsOýUÍþ?þ¹Ÿæ*Ïúåÿ®iÿ Š¹¢ÿÇãÿ×3üÅJÜ} ÚâY5|ò|Ó“ù³Ìž?7yToæÎ½þ.øToòücvÍËÏßÛŸ”ã8‹=q½úìÇø»áQ¿ËðD Û7,C?n~SŒâ,õÆ÷ë°oÃÓü7áùàÑôûÉRâ[ ×¾YH¦y^1,^wµñ¾EÛaÔ§'ärq,tû ÿêwöúI‹Êó1=à­âDŒmU™´3á×c¡Bd#$âþÔ¾ò~¹ˆþw÷³«¾ø•àÛÉZCàÇÊ©Tòî<~þÜ„àû¬žHÞýv ù3x›Ã—÷& ;LÔàšyvÁ¾a".YÂ‚Š…ÏHÆfù›¶ ï×´$¿ÕHÓÞ[]×ò\j$®ÖÓÇ$â(K–Ù–Ù ·ÁË.(êÚfšuME,´¸m¿³µÈì#HŒ²ùñ³M÷ÖO7s~åqµ;›*ܤ1U)«Ârûïù4slu'îÔ}ÿz‘Ðügá²é·-}g Œ—wÌG¡9çfHç‘Öº xúß^¹ŠÂæÝ­ïNÝ¿4n@ÉÁê§ïé5Ø×”|P[{]~ÆêÖFŠý¢ß!O”€§ä|÷¸aœÿéW‡©Â~Ê´W3½¤´û×SÜÂÕ†k?a^ §i-5ó]OW¢Š+Ä>p(¢Š(¢ŠÂÖ¿ãñ?ë˜þf³kKZÿÄÿ®cùšÍ¬Þå ¢Š(ÊØxP‚Þæå®]¯"»½¹°µ¸)öx¤’I|·%yd9Ž7žý·…nrdÐî'Ò­ç†ìû¨ì”Ìþ]Â9Xâ",2K`NÕèòÍi5,¨ØYˆU÷$€=Iú.#“Ó¼=%õìVCvú­ä·“ƨ$’ÝÍÁ@ì9e%¡;yÁ ÀÛÇYP­å«Ý5ªÜÂ× ÑÆ“‘×€èàkê*j`S%š(<Ò$jYP3°³ª9îIz’(I¢•åHäGh›dЬ FÀlC†èG­!¢™4Ñ[Á$óÈ‘C—y‚ª¨$“ÐD3EqsÁ"K Š$F ¬¤dGPE>Š( Š)4Q€ )’Íi5,¨ØYˆU÷$€=Iú(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š*®§ÿ «Ïúàÿú «UWSÿUçýpýÓçš(¢¨“ékŸõËÿ\ÓÿAsEÿÇÿ®gùЧsþ¹ëšè"®h¿ñøÿõÌÿ1R·Cv¸/xò}V]kA»û=Û|Í Ÿ,–ÚA*ã¡n8=I$šïh®¼>&¦|ÔÿáÎŒ&2®|ôžú>Ívg“\xËVµµºÑ º[;Åwp»•VŽ[=¤ o›%TJAÉÛ½3÷ï¡î-à» ¹†9¡lnŽE §# û×7yðû×k.Û6·’FÝæA#¼ç…9P;cJîŽ+=gýݾç·Èîu²ÌNµ©¸?î½>ç·¢<ÖÓàׇ.§Š¼b—¶3>YfÀBÛ@cŒâ\uÆäë°ï¼Ÿl>C&½rØÛ¿l 3÷7c“Œâ\uÆôë°ïén¾éÏzÔRnå¦ Ç¦^zsš©ÿ —þ£ù)ÿÙÓ¶Z¬C^±oò'ê9\µUÚõƒ‘ŠŸl>C&½rØÛ¿l 3÷7c“Œâ\uÆôë°ïà ‡Èd×®[wíF~æìrqœKޏÞvû_ð©ê7ÿ’Ÿýð©ê7ÿ’Ÿý˜ú ø ö~[ÿA?ù$Žj‚Þ°–8õ\ª³$‚8Ë“q·â\uÆäë°ïÄ—À~Ó˜?ü%wrÀ˺8l¬„ ÿ!žr>eûÛNÿN·øU¥, .oï$›ÍÔSÏqïZ¶¼9h±n²k‰#mÞdò±,sžT¤vÆ>´{LW½RRôVüÿáÆ¨e4õ”å?D—çÓñ9«Ÿˆ:ιqöi­…Ž$ HûwÚƒ±Î@ÏQÖ´<3à[È5Xµ­zïíkó,,|Âh³ž¥yàt k¸·¶‚Ò‚Úá…s¶8Ô*ŒœœïRÖU1ê0tðÐPO~­üÇW4Qƒ¥„¦¡£{ɯVQEy§QEQEak_ñøŸõÌ3Yµ¥­Çâ×1üÍfÖorQE Å×3=þ‰b>t–÷Κ1Ô¤HÒ+áVQ=2T½ƒË¿‰¦¼‡Ãö†öÚkójVåcgŽãíVhw¦?vÀ¼£>…F;ƴdÍÄQ¼Hù<+•,1Ó’‹ù}jjb8++iµYÝEsg-âêS››uŒ™£ÛÇÑ—i‰"ÁÉÉ&žªÞ\Z]_Uì¯õ9´éE¬Ks-œo2+«1.€’TŒdf½ÎÒ {;TòííãX¢L“µT` žO½MJàyåÞ§¨KöK{‹Ç¹Žkð»dD ¶¥o ‘µG.³g#wÝ 8­ "{Ùõ‹V†ïʇP’þöá„jßhH§†8 “ÀSÁ¸I?x‡Cgi…½ªyvöñ¬Q&IÚª0O'Þ‹æË«kÆž±Þê6Á¥žÉæŠÞU’[Ü]¾JˆˆË’´ŒJwÚäìÍ«kx±tÿí+aSA p\J¢[¸Š!y|¥„³œ´Ÿ2º )È=µ\=“Z×#ð÷‡î'Ömaû}¯Úg¼žH­_d[" ÑH¹!ˆ+’Uˆ*£e\µÕ5’'Ô.uV†þÆÑ¬ÖX12[o8t‚ ÎFX€àƒÛQEÀà$×ï¿°m®"×!7³ÉÔ’i¡…4¢cv(O”Æ/Þ(÷¡ÏððÇ4—Úž£.“ÛÜÃ-Ο¤ßߤРȲ¯îíå$¢†Ý›hGù™FÇ U+­*Æóí¿hƒÛm…­ÇÎÃ|C~ƒÇúÇä`óì)É®¯qªZiúWˆ~Ûe=Ìhu2œ˜nZHE ¹DQ0à\ܤ-A«xRµ·Ô¥·Õ?âaÛ–M?dgì‘EÆ)öíÞ7á9rTù¼™qè å¤ö7wIæ[ÜFÑJ™#r°ÁŽjáo|ArE¥ë°ßXy‡Õ¦šH ,ÅÐÊ‘—8GÌ„þûĤ2ksZÑu«Y/RáCgX­!ßö—suå°*ˆ~U˜)L)Ãz®žêÕͽÛ3Y¶¹·’ U“U–H# …¯ -2ÄÈèÑPŒ±mÕfß]ÔæÖ© ‚}¡aÓ¥¦Ÿ32‰$KñT™" ülLîh¦+|F±â,Øjw6¡-/ãimÑ7I F\HŒ1¸@íÁÇ\ ;U¼¸´º¿«Ù_êsiÒ‹X–,æ[8ÞdWVb2]$¨#ÈÍzM®ž]êz„¿d·¸¼{˜æ¿ ¶DA°ÛjVð©Trá‹6r7}УŠô:(¦ERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU]OþAWŸõÁÿôVª®§ÿ «Ïúàÿú ¦Ï4QEQ'Ò×?ë—þ¹§þ‚*æ‹ÿÿ\ÏóNçýrÿ×4ÿÐE\Ñãñÿë™þb¥n>†íQVHQEQEQEQEQEQEQEQE…­Çâ×1üÍfÖ–µÿ‰ÿ\Çó5›Y½ÊAMq1Ç•ä{ù®Ëùa[úS¨ d{nÿéÇþÿÉÿƨÛwÿN?÷þOþ5RQ@ˆöÝÿÓýÿ“ÿQ¶ïþœïüŸüj¤¢€#ÛwÿN?÷þOþ5FÛ¿úqÿ¿òñª’Šmßý8ÿßù?øÕnÿéÇþÿÉÿƪJ(=·ôãÿäÿãTm»ÿ§ûÿ'ÿ©( öÝÿÓýÿ“ÿQ¶ïþœïüŸüj¤¢€#ÛwÿN?÷þOþ5FÛ¿úqÿ¿òñª’Šmßý8ÿßù?øÕnÿéÇþÿÉÿƪJ(=·ôãÿäÿãTm»ÿ§ûÿ'ÿ©( öÝÿÓýÿ“ÿQ¶ïþœïüŸüj¤¢€#ÛwÿN?÷þOþ5FÛ¿úqÿ¿òñª’Šmßý8ÿßù?øÕnÿéÇþÿÉÿƪJ(=·ôãÿäÿãTm»ÿ§ûÿ'ÿ©( öÝÿÓýÿ“ÿQ¶ïþœïüŸüj¤¢€#ÛwÿN?÷þOþ5FÛ¿úqÿ¿òñª’Šmßý8ÿßù?øÕnÿéÇþÿÉÿƪJ(=·ôãÿäÿãTm»ÿ§ûÿ'ÿ©( öÝÿÓýÿ“ÿQ¶ïþœïüŸüj¤¢€#ÛwÿN?÷þOþ5FÛ¿úqÿ¿òñª’Šmßý8ÿßù?øÕnÿéÇþÿÉÿƪJ(=·ôãÿäÿãTm»ÿ§ûÿ'ÿ©( öÝÿÓýÿ“ÿQ¶ïþœïüŸüj¤¢€#ÛwÿN?÷þOþ5FÛ¿úqÿ¿òñª’Šmßý8ÿßù?øÕnÿéÇþÿÉÿƪJ(=·ôãÿäÿãTm»ÿ§ûÿ'ÿ©( öÝÿÓýÿ“ÿQ¶ïþœïüŸüj¤¢€#ÛwÿN?÷þOþ5FÛ¿úqÿ¿òñª’Šmßý8ÿßù?øÕnÿéÇþÿÉÿƪJ(=·ôãÿäÿãTm»ÿ§ûÿ'ÿ©( öÝÿÓýÿ“ÿQ¶ïþœïüŸüj¤¢€#ÛwÿN?÷þOþ5FÛ¿úqÿ¿òñª’Šmßý8ÿßù?øÕnÿéÇþÿÉÿƪJ(=·ôãÿäÿãTm»ÿ§ûÿ'ÿ©( öÝÿÓýÿ“ÿQ¶ïþœïüŸüj¤¢€#ÛwÿN?÷þOþ5FÛ¿úqÿ¿òñª’Šmßý8ÿßù?øÕIE *®§ÿ «Ïúàÿú «UWSÿUçýpýÓçš(¢¨“ékŸõËÿ\ÓÿAsEÿÇÿ®gùЧsþ¹ëšè"®h¿ñøÿõÌÿ1R·CvŠ(«$(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢ŠÂÖ¿ãñ?ë˜þf³kKZÿÄÿ®cùšÍ¬Þå ¢Š(ÎE®Þ[ÞêpݤwF;å´±·´‹d’ÎrÏ&ÒB1ä•!îÁCƶΓ9ÒõŠÖ6–òCäâÕVIcbÀI–Á†Còà dœSï|72‹Û»+Û™oåº[ÈL²ÇÁ&Ï(í"ãÊùpÊýCóS4ߤZ=ý­ýÜÒÏ©[IÓ£/äšC´í°7 7mà«Ò˜‰îü]eeÌóZ^}’=Rà*šHUÚHÔnÜyRrʪvFkê^:Òt™!Kåš’?=–fŽ'Ž"ÌÊ;†lícµC8Æ ‚@6.ü#e{Ì]Þ}’o=’Ü2†I•ÖIíÜXù²pÌÊ7œ.^èÉyznã¼¼´y#XgÎ«çÆ¥Š©%K.7¿(U¾n¼ gϯÍ6¹¥[Z[\­œ·òÛKtÞ_—)Ž)· ·‚$®ÐÂAèë<9 zœi}v ‚æK¨ìÿwå,²+‡lìÞres‚ØñÀlÐERQEQEQE“â[ë?Dyí™Úx QRÿ¼•#;w|»°Ç¾\ã†íQVHQEQEQEQEQEQEQEQE…­Çâ×1üÍfÖ–µÿ‰ÿ\Çó5›Y½ÊAEP3™¸ñΛm¦jw²Ayÿû—·h/›6Ö`^5Ýó'É!ÏE'÷Ml¾±¦GuqjúšÜ[Ffž#:‡‰³ åWž9qàï´hÚŒdÃý¡4z„p·ü³ýü’4lÇnw(‘€# ’@3º©kÞÖ5yçt.í['–þ`1$Ɖöp¦4Ûæ(.HBz±h#©M{G—O—PV±{(›d—+r†4n8-œóÌzÑu¯höP[Ïw«XÛÃr»à’[”E•pT“ó ÓÔVf­¢ê7Z¥Íå¤È#– xšs%»J#iÉS*ьʌ ä…N&¹›ÝVÑ´;ë(mîïX´žÔÆ’O(„™guýï”Û‰ !Œe ,rJ°;ôÔ¬%Ô%Óã½¶{Ø—|–Ë*™xä®rÌ?1ëT´ÏXk¥å¦Ÿqmu ´Èn-çY³´ƒoƒ×ø¿< ü5Óß[JȰN×’GtדÈU®£‹lˆÐ¯œF윅<ù]Í*ÓSþÛ¾Ôµ(,àóí ‚8í®oõm+K"cý`ã¥mQE†QEQEQERÕ5K]ÄÞ]¾Ëu’8ÝÉ&÷T I '°„ÕôÙ6yz›oÛ·lêwnÙŒsÎ|Øñëæ/÷†Y¬ØË¨i¾L ‚dž„HVh¥Y’3€Jc88ÎpqŠÉo]K«rÑÙÇ}y{ix»°>BÂDLûAÛ¾'àà>qœ­17zÆ™aÉy¨ÙÛ"H!všu@®WpRIá¶q×5v¸™¼1«Üê2êÓÅl.^yµ·Õ'B]¿|—þ÷Í‘L *(¢ÂŠ( Š( nîà±µ{›—Ùc$I$à,Ä$I§Ã*Ïs p²(` 0g• }ˆÈ¬ŸÚ=öŠ¶È“>ûÛ=ÂÁ‹˜ËW•ÀäcϬ=[ûJßÄVbÐßD¶óÚÁî®âè$‘äå)¤ÌV“vyR޾Îî û{ËWó-î#Yb|¹XdG½M^k§E¯[éÖYÇ{-üz:$1ºÏl–2-  oÜNL„uù”·9 òtžŠî?¶y·—wÇg—ö›[ˆv¿Í»h‘åFb ’øùŽ>l#°¢¸ ûÄRéž´‹My¦5Û\Og$µVþønbeb_<ñÀ­ñÓø^ïZ‰l×n‹£ ±rò#²Hø~™O•@#•z騮=­ît«ái¥[=ÜÚ>‘oohŒWs¬Òv|• Um‘€Êgæd__}–?+É»–ò6†ÊT²–ûRÊѲ˱eUʱ-¶)› €:Ê+™°Öõ)/mžé­ÖóQº°Š( d’/(͇g.CdA‚¯-œñƒtj7WúÒÛi·bÒ+h.ä•£3yé+HB®¡xˆß0;‡r³EpWšÝõþŸ£±laÕÎþŠ6V·Qwkò1,|ɇÌ}ÓÇ<3Dñõ¦‰áØí-þѧÅmaivÞR.YV0>s(< clØãpÉÚ¬ Q\g„u+« BµÔn- œº(»ŽUŒÃä$K!Ë;âPw| mq³¸ÈÎA`:j+ÏÄÞ ÔtËiZÝ,Vý­.-%;Uk˜Ò«1iT¬¸cˆ¸à¿OV¾¿´ÖÌè¶ÓÞÙZYÁ!£ŽF»ºÉŸ¼T~åvõÛ“ÜQ`; +“m[\{Qi ¶v·0YÜϵ#Gy2X3M¹1æŒ&Ç'Ë|µm¼Q«Ç¦is]ý†Yõ{H§€ÅƶìòÁÌ ·˜¸‚ŸpâÊ–¶¢¸ûÏjöq]¬¢ÙcÓçt½Ô’ÑåEŠ| p—†|yded¸»Ô#Õ5«Û 2xî`°wù¢;Ì1V‘·N˵[8+€H!‹ÖQ\µ¯‰®.4¹îâ{iÕ/ìm¢•bdY#m‹>Òăûö ÇÎr4MkSÑü5áûYζéÖÿee“ÈËÛÂ7çÌÿ…n6ganÊ–Ð(¯<×umC@Ö{{‹Ä°™’9"ŠE¨È¿ äeIHÁÁWZ¶½i=Ξ#¶¼¹…`™î­í[lPÈeù]Òa诓æp¤®°MÆ[x«T¼¾‰í-¡¹ÓKh$ºØ±$¦T‰÷‚óOõˈü·'nË|¬Ó$¿›Å1Omt‹¹õ.¢tgGX&‚Ýv€Ã ²1óØ,Ü`à¶¢¹Ÿkšž£ýŠoã³_í-:KÒ°ù6ùFIç>kÇ'ifÏÒÈš\ôÃ+¶Ìd‡$Èš÷^"Ôí5I-î#‚ܽÌIolöìÆHZæ(L¢er‡‰3°ª²– ±`:Ê+ŒžëS¿ñá·³žÎÙì㺅kv”2±ä_›t‡œã§z­}­ßx‹ÁZíôbÞÚÉ4Ç[²4’3If³dI¹@Ív“‘œÀw”W ž#ÕcMbhM˜¶ÒãžêH¥I$’p·7Kµ\Éò|° |¬nZ³¨ø›UÓî/"–ÙrÁ,l͹-*™ã…fyf@Lgc ÀÎKØQ\x¿Ô5H´ë VÝ ™µtŠ]…FéÕ’@„´h,Ä®O†?‰o%Ó¼6í êvÖ÷3l.»Y®- C·¿9À# –³¢¸+8﮼R—–W6ö÷w-ª öí2mŠk{uC©¬(I$ó»ŽF ?ÄÅÝŽ¡«ÛÏm77VÃoqÍä4ñÚgæ¹P%c´–ç<â‹ÞÑ\þ·}v––·bÙ–køÂ¡V¶Ô …ÉË6C–Ü@Á/÷ªæ—|Úç—l¶Àj7WÓÝ4ŽÅ¶–+eØRÈ£9<3è6ÀvWœÏ¯ëzæ‹ ÜZAio©ý–[s"¡æ(ȳ3L…eñŒp@ß­³«Ùê«§ÛéößÙ¶3ÛØÍ$i1îtŒåKL æ®#ùÀ²ß)`; +‰‡Äž"¹ÒôF‚ÎÚKÝNÕ¯·ˆH±F«Æ$š,’eÎw|¿w ÷êkOj—!õ)d—vv¦ÕÈù ;„áö­?dÃê3XŠãß_׉¦_ÛÅm<ÚÃFm`Šßæ·V‰æ!·Ì¢R6ç1÷8?v«jzÝëÙYß\[ÃÞŸe¨ê0ÊÀÏn<k0 D®J%Nï”ä°ÍÉÜëZí¦±o£nÓ§»šH¿Ò<‡Š5I#¹o¹½‰e6ùûÀ0m¿/Þ¨5OêV:mΦ‹fÖæKÛx 16ô{tƒ³îÃ+sò…R7˜íä°Çêþ·¦Þdˆmïµ L&)míö(WYØ-æˆÍϘ¿§Ë†§yâ nïEÖÕ’ÚÓìzD³ÊñÉ™V\ÜÆ6”vU9…[ï1B üÄîRÀw”W©kzÖ›«ÿgÇ7º„ñÛ"¼1@[íNH‰æ ÷aï©9É' µ<^ ÕËiÏy6VÒH š+í!æ34^Wî¥>K äïP_il¯ÌX²Šæu3uwâÍ,éW¶q¸²¾V’XLéòËn¬¸W\0aƒÏ#™ˆ5‹»CW·žÚ8nn¬#†Þâ'›Èiã´ÏÌr JÇh-ÎyŽ¢¸;ýnúí--nų,×ñ„1!B­m¨A “–l‡-¸6‚_ïWyLŠ(¤0¢Š(ªºŸü‚¯?ëƒÿè&­U]OþAWŸõÁÿôLžh¢Š¢O¥®×/ýsOýUÍþ?þ¹Ÿæ*Ïúåÿ®iÿ Š¹¢ÿÇãÿ×3üÅJÜ} Ú(¢¬¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š( ZÿÄÿ®cùšÍ­-kþ?þ¹æk6³{”‚Š( e/ì}3ûOûOû:ÏûCþ~¼…ó~îß¿Œôã¯N)ï¦ØKi¤–VÏm쎉J"í)€¸ÀX¯Ð‘ÐÕ;=`É¢^j7( [Mv¤+!–D»Ô$œôŸmã6ú;u±†k»¹ä’5´†X åY°þg–ØWC…r~nŸ+mb7,tÛ 2‚ÂÊÚÒmæ;x–5-€3€8ò«U‘ ê·:¬w†âÍá]ÏKòì•RgA´-gpž8¬«Ý[Y›ÂWž!´º³·´m:[»h ©y”yE£&Bûw}Ö#a•ÉûĬ¢°¥ñD¶w³^XÜÚMh±É%½Ä°#l‘Š£oó<° V.ËÓ‘šñøÚÂxš{{[¹­"¶771Œvé¾Dbß>[i†LùaÁåÝ‘–ŠÀ¹ñu•¤ÀÏkv–&I¢û~Ô1n…$iÐÞgTƒîrWŒ‚ ¯cã7Q–Ò§»,ii °JîY]†$1–9 ƒòtårÓÑ\™ñ ô> —T–H-®?´^ܵàR!½0üá±;†ÇËœž´øüaog£Ë{¨Omq»û-½Õ«,PÝ÷!‘ö(:œÉ‚c ´¬SE`Cã2âÅîâ: o>5]¤ÎC´mXlHáÔ/ÊH&HðNáEŸŠ ¹ÔNŠn®üɼňG“Nð‡`òe—(rWqã%Wr­07è®sNñdv¶R›{‡†U·I®Õ#Ži•¡ràŸ6?º ã-ÃgFñ$:ÏٿЯ,þÕmö«o´ù¾‹åË ŽØÆôá°~n3ƒ€ yaŠt 4i"†W ê ¤2ž{‚„ ‚]:Âw5•´Œ'[€Ï’%Pdä}àõ žc*Á!æ J+¹UfÇ{àý sã^¿o hz²Alf¾kp `¨³:+äåøŒuÉÆ«¯ èw—±ÜÜivrló˜Äöècw”¡iËþì ÝpOZ¹}¥Z߯ïcùHd@·“ ‘œr»ãý£Œg5š|DÄÒiÛ¾Ïom"Á+Ëi+ dtVUYF#ï ‰,[hå-‡¼A{ªÞ¤w+Éíͪ@ñy8)ò+±+r¿?úÈð£h?òÑhXè– A.`K¨oçYæ†áв¢ ùHéˆÔóžjÒYÚǼim ¥¶<…‹ TmÃò’8ìH©¨¤2³µ_/m´#Ë‘¦L ù]·naèÇ{dõ;©¨$ÑôÉ~ÇæiÖoö,}—t |Œc8ùqµzc ô«´S”ZF™ “ÉgÜH³LɃ#«nVcŽX7 žAæ˜úŽóÛNúM‹Mjª–òd- ©Ê„8ù@=1Ò´(¤}®ƒ£ÙAq¦“co Êìž8­‘UÁ`Ì0O_SVšÎÕ¼ÍÖП2E™òƒæuÛµ« ‹ƒÔm‚¦¢˜£ÑôȾÙåéÖiöÜý«l <üç;øù³¹ºç©õ¦Úh¶6Bå"…<™çŽ$¢ì£HÑ6.8D„zÇl_¢€*¾›a.¡¡%•³ÞÄ»#¹h”ȋϱ>cùŸZ§¤øgHÑôϰZiöÂ`Œ)ºáBíýæÞH'9õ>µ­E 3ƃ£ªZ"é6!lؽ²‹dÄ NâS”äÇz`ðö˜öÊîÒÛss-ÈK¸Ö@Gw$1Áv¾+NŠ`R¹ÑôËËè¯n´ë9îáÇ•<°+H˜9XŒŒ‘ŽôË]G²‚â M&ÆÞ•ÙcùŸZ†×E±·Òôí=àK˜tõˆ[µÂ+²´kµ_§ q޵¡E )\èúeåŒVWZuœöãÊ‚X£L ªFÀÇj|zm„0yY[$;‘üµ‰Bî@¡1ÕB&=6ŒtjŠ`gË¢XKq¥Î°$M¦3a*„SFPqÂᇪúSãÑôȾÙåéÖiöÜý«l <üç;øù³¹ºç©õ«´PAð¯‡Z€èY…c6qíV @Ç…\ý¥Z¹ÑôËÛ¡uw§YÏp#0‰eYöA\‘¤3:r}jí|3¤6°uI4ûi.B Œ¼(DL®òoN2¬ZBIÏ$Ö­G£é‘}³ËÓ¬Óí¹ûVØyùÎwñógsuÏSëWh  û}ÂÖîÒ{HÙm`– # ##7Ê\Æ:zšBÒ"º–î=&Å.emòL¶ÈÛp|–ÆIÜ¡¾ ¢´(  Zv—k¦ØØÚÄ›þÅl¶ÐË @€(Æqßb“Œ@ô ih’)Ÿf(ÒØ@¹DF Š8U`Š»EU:mƒ&ÊØ”fu&%ùX¸‘Ǻ«ö€=E3NÒítÛX“Ø­–ÚdÈÎ;ìRq€H•vŠ@R‹HÓ!’y"Ó¬ã{‰i™ PdumÊÌqËäÈ<ÓßM°—P‹P’ÊÙïb]‘Ü´JdEç€ØÈ1üÏ­Z¢€)\èúeåŒVWZuœöãÊ‚X£L ªFÀÇj¬í[ÌÝm ó$YŸ(>g]»Xú°Ø¸=FÑè*j(<è:;%Ú6“bVñƒÜ©¶LNÀîøùŽI<÷¨.<9aqü<0ÞØ&žÑõV8”HÁŽ%oQÀã×^Š`R´ÑôËÒ;=:ÎÙC2,0*r»K ´‘ž¸8¨oü?¦_Ǩo´†+‹ûg¶žê(ÕfdeÚFüdð3‘Àô­:(=4->]>=&Å,¥mò[-²ݸä®0OÊ?!éV ³µµÇÙí¡‡¤#Ë@¸EÎÕãøFNA“SQH ñ èëföcI±®ª¶MŒ¡‹W 33rOzzhúdwV÷I§Y­Å´b%(x©ÆUpHÀã“Wh¦1ÙÚÅ"É´(ë¿ ¨Ø3óþÓO©5Ò4Ñ$R >Ì”Ä>ÃMM:KŸ&yŒHÒˆiH™˜³•8Ýó3wŽØV|þŽkK›Ôï¡Ó'‚H>Ã•åÆŽ¥HRc.Î@Ý€ÚÕÝ3Z±ÕÒZN5¬òA<;Ô¼l®Éó('”$g¨¬ûß4ÛÍBÛI¼¹²·¶–á.ÃİÊ q—ß´‘€Á9eH4jû@·½¿kñssox%ŽhŠæ"žhC)•žE;#š«„l¡±Ô­îòoíg·¸•ÙÏ3³ ªlÎý±Àã×A5í]>]B=ZÅì¢m’\­ÊѸà¶pÌ?1ëCëÚ:OmêÖ+5Ò«ÛÆnP4ÊÇ PgæôÇZøðœ×šÇ—<¸Ð–I¦û/žÌi£‘$«¦LÒ6|Öô 26鿇ÌÑ«M«jÝÇ ’·1o„…eùP •w”$îëò®ÛŸÛgöŸögöŸö‡üúùëæýÝßs9éÏNœÓ^ÑåÓåÔ#Õ¬^Ê&Ù%ÊÜ¡Ž güÃó´:¼Z¬Ö .ä[#z×”Û„r çïtM®§<Š’}Þ}AîMÍÊÃ,ñÜÍj¥|¹fnÇ$®ðG— Àƒ 岚g‡íô¹â‘.nf[x µ¤r•Ûm +”]ª ‘9rÇåòs$¾#Ðᵂê]kNŽÞãw“+Ý I6œ6Óœ:Sõ]TibÐ ;›¹®§ò"Šß`bÛÏ.ÊÚÞ€4(¬ÏøHtȬ~Õ{w ‚¬žL‰y"Äb—ØÙ8ÝŽF a ‚l¾¥a¡Ÿ%í²^Ê»ã¶iTHëÏ!s’>SùJZ¢³.µ¤³½Xe³¼þdpµæÅ,Ž@E僶K Ê©P[’0ØLñ¾©Ùä³Ti_oÈK3®ÿ6ÆrQE (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ «©ÿÈ*óþ¸?þ‚jÕUÔÿäyÿ\ÿA4ÀùæŠ(ª$úZçýrÿ×4ÿÐE\Ñãñÿë™þb©Üÿ®_úæŸú«š/ü~?ýs?ÌT­ÇÐÝ¢Š*É (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€ (¢€0µ¯øüOúæ?™¬ÚÒÖ¿ãñ?ë˜þf³k7¹H(¢ŠsPéšÜzuþŸ´Š7¹žââ»q$‚Kƒ/–ÃË^Q™ «1SÈÖ\Ö`i§·òm/¥¹‘⹤×j(r$Œ‰òbÎ×ÀP8+ÛE4S¡xdI3!d`@e%XqÜAô Ó踌ÍÊëN[»iD-nnežQÎöódy2ã ´¾ sŒü½+&}X¹ðݼV/eö , »’åÖM¾QTÝŒŒ”œgh颚)м2$в0 2’¬8î új¯öÆ™ý§ý™ý£gý¡ÿ>¾zù¿wwÜÎzsÓ§4ÀÉÕ´]FëT¹¼´™rÁo@.d·iDm9*e@Z1™Q\“°©À$Öe—„utMrÒI-Ö]FÆKhÁ¸’PŽÒÝ8Ü컘: ÄdÜzöÔR¸£¤_ê7gÃi-ÍíÃßùr‚â+ŽÌ‚6Ú×p²qœ›mø<7¨Cq¦Z­ì£¬2êW"UXæL4ÒT~ýˆ*rNï—ª¹¼µ²ŒIws s†•ÂŽ±äú*±>ÀžÕ5™þÅÔÿáû&Û?íí·ù~{y_ñùö›ög§Û×µz6­x&¾g†+Éü¨å´‚îH£hcó6¯žª[t¥Ë*Œ… ŒncÐZ^ZßÚ¥ÕÌ76ï’ÂáѰppGGáQÝê6v0]Mqpˆ¶‰Àù™#ÃÅG8ù[s´ã¥09;êé×öRÉl©©ÚOk;}¢IZØ4·#)ecþÜPü¹ÉÏ^Ò'Ó绹¹…"šuŽ< ùïª#2KŒ ¹Â…ääç ¹E+€QE ¡¬X˨YG,ªËwm9,Ä ±Î’7NøS|VïƒBÍjÚa†4·ó% '˽þÑo4i•^,X8%T ±Šêfš+x$žy(cRï#°UU$’z)ôÄsšf‡}‰Y»6ÈÓ¬æX"‘œF̶ȡXªî·$’ ƒŒÓEÔìô/ ÛÚ­¤÷zG—椳´q¾-Þµ‚1êù^ƒµtÔPyá[Ù¯U%½•¥iíãÔ&´E.°¨Û,`± ° Ábž\­G¼ÐfkX#³’Â_-žA+£ÄRâ ±Û—÷JrdÈÜG8ËoÑJàaËk¬?ˆÅËÚØÜYDÊ-‹Ýº4 T/Ë!¤å€;‡Ë€6îrÐhzý„úh»6Â.Á¬ h¤fk…&/QåœB>P_ïx磢˜³hšÄN©jl¶Ú]Ý_ÚM,ŽL’Ê&ÚŽ~Us– I ÐnùmXéúœv ÍŽç5Ì3<²\µÁœ‡Rîù‰0áTlÀÀ!@ ªoÑ@³hšÄN©jl¶Ú]Ý_ÚM,ŽL’Ê&ÚŽ~Us– I ÐnùmXéúœv ÍŽç5Ì3<²\µÁœ‡Rîù‰0áTlÀÀ!@ ªoÑ@Ìšn¹wu¨‰Åœ&æ9­íïá»s-¬LÍ‘y`ÈFc¿$ޏTUµáý"]2{¹M•Ž Ë­•ƒ‰YK&v'ÌÁ•OËÒ5äô”P->¬ \ønÞ+²û–P]Érë&ß(ªnŒFFGÊ Î 3´?ûêO ë:DZF“¥}®ÚHá[)‹FÎèWs)1ü<€INzj(–¬º‹é“.”ЭãmÓ6Ðḃµ°Ûs‚U†qFEcC¥ê¶¯eym§éÑÏköâØßÈÈë+FæC)‹q}Ñœ‚§vâųÁ騠>Ç—úu¤ZTrÛKeçÙÜItÌÉ"µºÀ»Dx †û8çxÆóÁÛóhèÞ·Ðõ«‹«6™mÊ hb{¹eÙ±¤$aØ€¸d éóc9ߢ•À(¢ŠQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWSÿUçýpýÕª«©ÿÈ*óþ¸?þ‚ióÍQTIôµÏúåÿ®iÿ Š¹¢ÿÇãÿ×3üÅS¹ÿ\¿õÍ?ôW4_øüú昩[¡»EU’QEQEQEQEQEQEQEQEak_ñøŸõÌ3Yµ¥­Çâ×1üÍfÖorQE ãí/fƒCÕ4ø¬ï¾Ö·WŒsk:(ŠK§ýâ8yû£nlaH<Œd}a¬ m.§wWn¶ÖÂÞúÑ®Ž"39-$A]¥ÊÅ'î…=&Š.#ŸðÅ ²mR)ñ.šöyd™L[^i3ï“•`NÎçææ©ÚÜÞØxY´[h/ÄÙH‹'ÙÅ-ÈB|Ï8¯–w¿Í–l’ß0 ‘]eÀá–ÖkÝRÒÞ͵ÕÑæ?0Í5ÔRïÜ—Ë9„ȶï³=9ÝPÙ[k“hö÷‡W[{˜ínoˆšhˆ™àº2‚ÊAEÞ°~ìªvà Ü÷ôR¸ewiâ;í+5MFG¾Ó’K„”¸æ[KÁ"’Ü"ï|œ*’¸<õZŸþ™âÐÒù§¸_³ÛµËγDÒ>Ï1Œ€Èn/’:/5ÑÑEÀá­VÑõ.]0Zi^¥ß•¦™&‰!{yb1ª,j[¢HUTàÊ‚k2âÎêòÓ^»žÛVyïtëÈlT¥À߉nÈYp?w$[€uyé”Qp8Ëû[½?RkHÛWmyÜ4s\M/Ì·‚8&_¾¶ÙT<H›3ørÛS—Y’kéµ´†ÙM¬R³pg¹_<—ùY sÈ. GYE0 (¢Ì__kRG,ÐË”²Ç$2´n¬ªYHe õëÐñ\êÇ®fþGÔï ›uÎBXO2GÉ`LžK<£¶4ó ùOü´5ÜË S I£I2¸WP@e!”óÜô Séˆó¨g {§Á©&»«GvËök‹÷’à©¶R™óc^d A;ƒlâñ;k/©Þ^Gv>Íû¨­exÙ<¸üíÎ’-ºåüàw)p9\þìWza‰§IÌhfEdY ʤ‚@=*¹úJ}+çïmªÛø[B2Í«Þ^Ël$¸³f¹ŽIæ) ÓÅþ£o#6±$·Í—Í®±7·6®n<½Ræ0&™‡øµs¥±\c!°1èQp (¢…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@UÔÿäyÿ\ÿA5jªêò ¼ÿ®ÿ š`|óEU}-sþ¹ëšè"®h¿ñøÿõÌÿ1Tî×/ýsOýUÍþ?þ¹Ÿæ*VãènÑEd…Q@Q@Q@Q@Q@Q@Q@Q@Z×ü~'ýsÌÖmik_ñøŸõÌ3Yµ›Ü¤QE8/ Ý"ÛTººšá¤¸‚ìYÝA©L»È–DÜb5 ˆT0$–UlÄw^Õ´KG1,:…ų]߈mv'•–ق󂙸ȟ—;GïÛhúeô·¶ºuœsgÍž(d|œÌNHÉÏz†_hsZÁk.‹§Ioo»É‰íP¤{Ž[hÆO'iˆÆÒ5-J-–{ˆn ½Öom27™#]67—!¹‰ù@ Ç<'ˆµ7º¦Ž[{%©¹û3L$qtð¬+ƒ«ó°d%ÿ‡6üú>™sö¯?N³—í{>Óæ@­çlû»ò>lvÏJe¾ƒ£ÚOöÚMŒ3[©HdŽÙ¢RI!HYºxúÐ…QHaEPEPEPEPn½{ua¥‰m +p÷6ð#L…Ñ|É’2J‚¤à98Èé\÷ü%:”%#™,Ýîd’ÞŽ&QÇw«; Çz³KæH ·qÎáØK S I£I2¸WP@e!”óÜô T ¦Ø:25•³+,ˆÊbR ÈwHòÞ§­1k½Î«&‰¶1ÞÀÒ™.ÚÙÚ7TKvÀ‹ÌIûHÞÕž>o—˜ð©ŸTºðý¡6Æ ;D—eÌM2’–ö ApAæ¸V'å%‰>€ú.ŸŸ&“böQ6øíšÙ hÜòæ?™õ©­ôÛ GW¶²¶…•v+G© …\ ˜ÑÐP¡x§Y»‹Nhôô6¶p\Hî¸/,Q1>l“oÈó†c– Ùo–î‘y}©ø‹DÔ®ä¶òot{‹ˆ!ŠV…]í›k1c¼€@È ÐœsѦ¦GuotšušÜ[F!‚Q‡‰ *œeWŒ94[húeô·¶ºuœsgÍž(d|œÌNHÉÏz»ERQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEU]OþAWŸõÁÿôVª®§ÿ «Ïúàÿú ¦Ï4QEQ'Ò×?ë—þ¹§þ‚*æ‹ÿÿ\ÏóNçýrÿ×4ÿÐE\Ñãñÿë™þb¥n>†íQVHQEQEQEQEQEQEQEQE…­Çâ×1üÍfÖ–µÿ‰ÿ\Çó5›Y½ÊAEP3‚¾ñž±m¤êî–vÍ{÷/dÆ'0›x^Es'ÍÃÉ`qÀ2ÜnãRãâ‹åí³;³Z,äì’&ghU™ÐG¿x #òʪvðy\éÉáÛ t«ËVén‘¦ù|Ä[‡g+c–ÿÇW9ÅAqá{{ˆomšþùl®ÖpmQÕQ`ÛÜ»‰%Üá‹(-8\m²µšìÍBa±»¸DHÑá‡/µÙ]ÔüÂ7!FXc ñPèi©ÜÙKq³ìþpy7£s³H<µc(ÀGä oårx£Ã÷º¹‘4û³}¶ØÚ^Ëæ¨Ì_6ß‘¢}Øó$8 9Æî…n7†­d70Ëuxú}Çœ^ÃÌ eÝæ¨r]Î  d…Á  Òu[Ûïê6×6w6PÃim$p\yE·3̳7"Œü=yܬÍ7G6×7’ê7—×Ç=ȈmT.T(ë#uÍiÓQE€(¢Š(¢Š(¢ŠÉñ-õΟ¢<öÌí<(Œ)ÞJ‘»¾]Øcß.qž3U¥ñ5¦—{¦éš™.n£ˆžk3{ 2+î,X`”B€ž [ëµ t‚fuUž)ÁBÝ‹"õí•öÍP»ðä7WÍp/nàŠK˜n¦¶‹Ëòæ–"…Y‹!aþ®0B°_RIb34?Ãq£[Év³Jöút7:•Úya -”–@ÁùˆG8Z‰¬ »µ‚ÎäæÇìÑÇ3ß\LeHç†F!ä‡"¸¡†H€_™ˆèïéü5ëšÑ4]JÂ÷LK•³û&™§½ŒRÅ;4“äÇd(qH ܶ2qšéh¢Š) (¢Š(¢Š(¢ŠÏÖõh´M&[ù¶mFDI guE,Çî¨, 888=(¶Ö,${;y/ìEíÔ 4vñ\«™‚w'BëÁÃc3K¬X˨YG,ªËwm9,Ä ±Î’7NøS|V.³ jzޝÉ"Él·vÓ«=ôÑR7FdòJJIF!˜ƒ—¢LF–•â+ FÓK2\[[Þê‘ÝGdÓ©“k.î€Áç]±Ô¬58Z{ Ûk¸U¶-åY6ÆA<àιoêI¥,\Ãgo6œ-o%Žfœ\¸¶ƒå:Ò Œ ‡#nç‡ô‰ôùîînaH¦cþ{Æ*…ˆÌ’ã.p¡F999€nQE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWSÿUçýpýÕª«©ÿÈ*óþ¸?þ‚ióÍQTIôµÏúåÿ®iÿ Š¹¢ÿÇãÿ×3üÅS¹ÿ\¿õÍ?ôW4_øüú昩[¡»EU’QEQEQEQEQEQEQEQEak_ñøŸõÌ3Yµ¥­Çâ×1üÍfÖorQE ¤úÆ™­ÅÓê6kom!†yLê'¬s…l0yäUÚó›ÿ Ý\ø{\‘b˜$ßÚS=˜S™çÏä0L|ÙY3ž¤Çv®Üÿny×_ÙÿÚ?Û~eæÿ3Ù¼“}ŸfÿÜnÏÙ¾ïÍ÷·ÖO«éÖ·R[\ÞC±Æ²¸•¶¤HAÉàñ„ú$ñO³Ô-¯Ó03†ÚÅ,mФ°‘Àe«c#œW›ksNú¯ö5¾¸öóÙˆ_í)tZCökÿ—÷ß1]Í72÷5µ®Yj¶·Ïkaq¨G¥¬vÞl¤ÜÜ3t[JÍ¿Ècd ¹ùXÎòî ‹Ë§òííãie|µTdœOµM^m«ÛêxnòßQ:Í×™¥Èšx·‚á ’–›‰6fÆÏ³ç’HÎ~o0W¤Ó¢Š) (¢Š(¢Š(¢Šd³EšDK*vbG=É RE>±¼Sj÷šF‰3…¹¶–Aa'–“£¹]¿6àªÄmù²8çŠ-¯öjW¶ójæ¯lÍ´24 ‹U[g”…oØ…rĆng ÄvtWžj3êºõÌñϪZé våKXÞÈ‚Ü ÄÑÊ?hçîg9*k¹ÓEÊév‚ñÝî„&gEVgÚ7•9à=   TQE!…Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@Q@UÔÿäyÿ\ÿA5jªêò ¼ÿ®ÿ š`|óEU}-sþ¹ëšè"®h¿ñøÿõÌÿ1Tî×/ýsOýUÍþ?þ¹Ÿæ*VãènÑEd…Q@Q@Q@Q@Q@Q@Q@Q@Z×ü~'ýsÌÖmik_ñøŸõÌ3Yµ›Ü¤QE +†þßoøLþÕæê?dûoöVß³ÏöM›qægnÏ7í?ºÝœmíüUkz›j&³#YŸí 9¾Ë ÀÃìþ|öj7çÌÛæ)à&vž™à°@¢¼þ-S^°Öµ=:Öou ïif†Øl µ ÀçL¬^|ÃÓîóòؽյ rÂ+€l­­ Ô4Ä–<÷vw¶—+2¸]£Íî¶v’Ì0XâŠ( aEPEPEPEPEaø¼Jþ1Bè­5ݤ'ÌBèUî#VVPFå W# ‘Þ³î5«í.úÖÎÒÖ¬-d¶°»0Z¬QÅ,…&\ª$lFã‡%X޲ŠóÝ/ÄwÚ/†4¹g…"²‡Gí‘¡g7¬–žk*¶!#itä)*NH^›ÃúŽ­u=ݶ¯jM Ç"#FebØÖipN°ÎHå$«¹EP0¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(ªºŸü‚¯?ëƒÿè&­U]OþAWŸõÁÿôLžh¢Š¢O¥®×/ýsOýUÍþ?þ¹Ÿæ*Ïúåÿ®iÿ Š¹¢ÿÇãÿ×3üÅJÜ} Ú(¢¬¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š(¢Š( ZÿÄÿ®cùšÍ­-kþ?þ¹æk6³{”‚Š( d?cµò|Ÿ³Cåyžv̓÷ïÝïoù³×<õª« èé=Ì館¬×JÉq ¶@Ó+°s˜×=k Iñ5Õî·öF»Ó®7^ÜÛ=º=ªFÒ–C½²§ËQ÷TfUç 2XøÿEÔ ¿gweV]Ë$O˜Kª4¬ÉWz³y\œ|¬­ÿÞ…ö±béßdó<ï#ì©åïÆ7mÆ7cŒõÅMs£é——Ñ^ÝiÖsÝÃ*y`V‘0r6±'#ë&ÿÅö}ÔÞq‘màYƒ9EÛ+£@Ÿ,…€m‡#ƒe”!ÌâSé·–Âð]†íQVHQEQEQEQEQEQEQEQE…­Çâ×1üÍfÖ–µÿ‰ÿ\Çó5›Y½ÊAEP32ÖˆÅ$É,W2Ü$ÀãÍÉ"0Q‰Æì§ï(a‡‡íì¡kV¹¹º²}š+;‚¦(¡À6…Æ}ǯ-™?¶L—ÞE¦yw ÉåIu ˆE†s†m½ö†Á}à@y×´uK·mZÄ-›¹cr˜‰Úóòœ‚9ïLEeðä0Ãh-o¯-çµ¶’Ý.Ëi{Æîí¹gcI#’ÌzE[éÖIØ¥¸µš%A±y`ÆÊf%ÕJ”Ë}¢PFÝ 0Úi­éÒ$sEym%«Á,âå'ŒÆ2¡ŽwrnH ‘ÆG×´x´øµ 5k²•¶Gr×(#vç€ÙÁ?)ü¥S_ X-ž¡mæÜ‘¨Z[‡,»›-+³Ž0´òÆÞ˜ VåRÑõímÃRò¼¯µÛG?—»vÍêÀÎ3×v…QHŠ( Š( Š( L,F’¼,ÊTH€BGQFG¸#Ú² ðñ´Ò,4ûM_QƒìQù1Ά"íVR…PÝÃylÚÖõh´M&[ù¶mFDI guE,Çî¨, 888=(¶Ö,${;y/ìEíÔ 4vñ\«™‚w'BëÁÃc3LE;? Ç§Þ ¬5;ëhõ_)ÓˉB¬{ž2áp Àn¬Ä`±5¡m§$7²ÝË<×7•G›oîc'>ZÈ<±Âî'j⦕â+ FÓK2\[[Þê‘ÝGdÓ©“k.î€Áç]±Ô¬58Z{ Ûk¸U¶-åY6ÆA<à΀-QE†QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEWSÿUçýpýÕª«©ÿÈ*óþ¸?þ‚ióÍQTIôµÏúåÿ®iÿ Š¹¢ÿÇãÿ×3üÅS¹ÿ\¿õÍ?ôW4_øüú昩[¡»EU’QEQEQEQEQEQEQEQEak_ñøŸõÌ3Yµ¥­Çâ×1üÍfÖorQE ŵ´Ôô»†¶´‚ÎãO–æIÚI®9có$.à(F‚ÌAÊð@=7róÃúŶ™¥¢Ám3i+kgl±Êäܨ¹¶c$Ÿ'î€@߀ǟ—žÂÛXÓ//¥²µÔl织>lN­"`àîPr0N{Õ§š(ž$’DF•¶F¬ÀlÀõ8R~€úSÆßxGPÔžKhfšg‚)ä¸k2ˆ²…V‹C—.06l´ KLºR´·³{³ç,¶ój¸"AÜguffgQŠ0Øþ·Mmuä-,½I"'|ÈåsèÊGáSR¸ú „º_‡tÍ>vFšÖÒ(’¥•œgdV…P0¢Š(¢Š(¢Š(¢Š(†±c.¡e²«-Ý´ä³6Ç:HÝ;áN=ñXºÎ©ê:¼s$‹%²ÝÛN¬÷ÓD!HÝ“ÈU))%†b\ˆ u4SÃÛx7RM(ébæ;y´áky,s4âåŰ„)Ðöd`X 9w†íQVHQEQEQEQEQEQEQEQE…­Çâ×1üÍfÖ–µÿ‰ÿ\Çó5›Y½ÊAEP3ŽÓ´½U-弑RQewe`!0É$$ê¡¥f#k,„”}å9 áÃk{5Ôkw&¯s¤Ú\Ã;Iµô©h®cmžc´Íɇ!n€n'Óh¢â8ý'Nº°»´¹ˆ_#\ê÷Ët$€µË£yd•@Yb!€Èçæ9ì(¢˜QHaEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPEPUu?ù^×ÿÐMZªºŸü‚¯?ëƒÿè&˜<ÑEDŸK\ÿ®_úæŸú«š/ü~?ýs?ÌU;ŸõËÿ\ÓÿAsEÿÇÿ®gùŠ•¸ú´QEY!EPEPEPEPEPEPEPEPµÿ‰ÿ\Çó5›ZZ×ü~'ýsÌÖmf÷)Q@Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ¦´ÿÈ?ë¢ÿ:†¦´ÿÈ?ë¢ÿ:`U¿×!Ó!Yõ Q-!fØ$¸¸©lŒ’9À?•O¡%ÄÏÛK Š$Iw+)yW?â+{ë‹­éåhïÙ̲@Ò¤köy†YC/ u‘ô<í宩 …³IyiIt÷íµÌ¡®ÖAåýÒCß)S’ `8Þ8zÚ„–ðI<÷m1©w‘åÚª d’IàOû]ÏüüKÿ}šómFÓZ¾ŠîÅþݨÝͦ<'ÌÚ%»›b9›y‹HÝŽP·VUÊZÔ<ÿ"OìïíÝ¿bÿ‰>ïµgí{åÝçnçn|œyÿ&3Ž7Pö»Ÿùø—þû5Þ¬,-žêóPÐ&7Ë4Ûrp2IÀäø×wk¬ I>Ù¨)›U¸–I¥1Z¬“ùa#‰–M¥ŒG(w`Œ“í'KÔðM¡¹7—rÅym)?e4Ä·hÀùywâ0ÌKàe¾lŠêí5al—Vz€¹ó²XfÞƒƒ‚ ˜ú×—¨E`nnæEßµ°EçÈ ;X Äd‚H5Åjë©]Í>£¦‹»=6êHôYÄ­±&Ý'•I¹cn™Xˆù1Ëô{Fë­JX¯¯n­ôÈŨ‘¤µItUK°'iŒ~ð³®à[ MwŸk¹ÿŸ‰ï³UN¶‹¨¿eºÚŒ#g °mûqž§Hp9“\•6«g¨«´úΕoÚ‡mßý8ÿßù?øÕnÿéÇþÿÉÿƨ°ÿð“Åÿ@gÿü(ÿ„ž/úë?øÿá[nÿéÇþÿÉÿƨÛwÿN?÷þOþ5L øIâÿ N³ÿ€þÂOýuŸüð­·ôãÿäÿãTm»ÿ§ûÿ'ÿ  øIâÿ N³ÿ€þ Þ·ajö·š§snøßÚk:6FA<€ ÞÛwÿN?÷þOþ5FÛ¿úqÿ¿òñªåì.t-.vŸOð¥Õ¤Ì» –úAŠäd(ã ~U¡ÿ <_ô Öðÿ¶6ÝÿÓýÿ“ÿQ¶ïþœïüŸüj€1ÿá'‹þ:Ïþ?øQÿ <_ô Öðÿ¶6ÝÿÓýÿ“ÿQ¶ïþœïüŸüj€1ÿá'‹þ:Ïþ?øTz¯w¯ê÷¿eº‚)c·TûD-%wç¨ç¨üësmßý8ÿßù?øÕnÿéÇþÿÉÿƨ>ûÄpÅvñ ?U—Ë …ⲩ!@88äg<ô=ª¿ü$ñÐ'YÿÀÿ ØÛwÿN?÷þOþ5FÛ¿úqÿ¿òñªÇÿ„ž/úë?øÿáY/†n'’yü,³HÅÞGÑ319$’¼’k¯ÛwÿN?÷þOþ5FÛ¿úqÿ¿òñªÁÝ€µŠÔh:˜·‹g—Ó[bl ¦06ôÀÅ>oÚÜA$躴°È¥7Ó•”ŒA‚+omßý8ÿßù?øÕnÿéÇþÿÉÿƨþx¿è¬ÿàÿ…ð“Åÿ@gÿü+cmßý8ÿßù?øÕnÿéÇþÿÉÿƨþx¿è¬ÿàÿ…W²º}GÅÉv–W°B–k›vŒn2!$c¦*è6ÝÿÓýÿ“ÿRªÎïE¶ßúe#±ýQ>ªêò ¼ÿ®ÿ šµUu?ù^×ÿÐM>y¢Š*‰>–¹ÿ\¿õÍ?ôPÔ×?ë—þ¹§þ‚*…Q@Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( ªêò ¼ÿ®ÿ šµUu?ù^×ÿÐM0>y¢Š*‰>–¹ÿ\¿õÍ?ôPÔ×?ë—þ¹§þ‚*…Q@Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š( Š(  ZÆ¡ý“¢_ê^W›öKi'ò÷mß±Kc88Î:â¡sâTvF°ÐÃ)ÁÚ“õÿÀjƒÆò$ëÿö¸ÿÑm]ßü~Oÿ]ùÓ‹¿Äóã¢àÎþE£ˆÿçÇDÿÁœÿü‹Z”P^ÿÿÏŽ‰ÿƒ9ÿùþ#ÿŸÿsÿò-OªêÙ–àEæ»I1¡m ¼Ž±¦Ns œpJÀÖÁ,$ž#ñ»’ÌÍq$ž¤Ÿ.˜ŽÒŠâáZÚÿÐïßø¿øÝð­mèa׿ïü_ün–€vv_Z½µÊo‰ñ r#•`@ Œ@#VaðäS(kËëËÉÖH'›Ë‚9PŠB–EÝ–ÀÉùW_ð­mèa׿ïü_ünøV¶¿ô0ëß÷þ/þ7O@:Ë ´èÞÝœ@1DHÛ à|‰è äÎ3… UÄÿµµÿ¡‡^ÿ¿ññº?áZÚÿÐïßø¿øÝ-í¨®'þ­¯ý :÷ýÿ‹ÿÑÿ Ö×þ†{þÿÅÿÆèÐá¯üxë¿ö“ÿEE]åßü~Oÿ]ùÖ‡|;má»;‹kk›«>sq$—,¥‹UþQÛÖ›.ƒ<Ó<¯â c{±fÄ‘“ì˜5 ݤÖ¯mr›â|dA‚åX#Á“ÿä¿ô0k?÷ù?øŠ?á—þ† gþÿ'ÿH7‡å–5ûF¹¨ÍÝwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çдWÏ_n»ÿŸ©ÿïá£í×óõ?ýü4X.} E|õöë¿ùúŸþþ>Ýwÿ?SÿßÃE‚çеWSÿUçýpýׂ}ºïþ~§ÿ¿†·]ÿÏÔÿ÷ðÑ`¹RŠ(ªÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/subversion-properties.png000066400000000000000000000350311203611042400335460ustar00rootroot00000000000000‰PNG  IHDRØâSm– pHYsÄÄ•+tIMEÖ ½ãî¬tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝ{¸U}ÿñïìÛ9É!‡\I$9æœpQ ©þ án‚PžþÄ(‚ü¸´Ø§ÖHûˆ}°¿*?hAM1öWo\ÊM ?Iˆ@+*V°¢“äbbBâ¹ìÛÌï9gÎʬ™Ù³¯kï™÷ëÉ“gŸÙkÖ¬Y„³>{ÍÚ3–ã8¢¸øâë =n½uú£å7‚¬Y>gÎà‚ 4 $׎Û÷ìÙýÒ–­¢Ä‘© rñÅ×þŽ?>aºÁ ˜NIDAT !fÏž50+[(ägÌúÕ¯³ñûO»Y$'"##Cn yíÕíÛwL–J¥Ý»ÇL7$Êàà@¡PX¸ ÿ ÷9r÷ž]"b­]{íªO<îøwlß¾ç7vŽý~lb¢lº© fÍÊì3°ß~ó.œóØæŸmÜ´)'"KöŸ¿}ûîmÿýÆÎL„Ð,)4p½bpp`Çk%ïÇÑ×_~õõõVò–Å †/S+Yqç†z+yéì †/Û³§´gO©8Yq–ì?_DrîÛcccåþþB½õ€v˜+»wõîw.[¶0“ÉÄÙŶí—_ÞþÔ~º`Èú7IDATÉÀØ.‘ÿÚúÒ«¯ïøøGVþÎå¹\¬o¥T*ÕgºõŸ¾s¯ˆ¼}ù yeÇoVܹáOÖžî /® -}Eì©ïßZ"þKޔܶÖèëß¼mÃo?¶vé‚ýEdb¢<66ªr"Rè+¼¹s’oÊÐvïÞ}Ô»ß9Þœñ±bü½æÏ›sÔ»ßùÔ~ZÈŠÈ«¯ï¸ø¼s†‡NŒ—Eâ.Ã8øàý/>ïœ[ÿùŽÃV$"‹¾~Ûê=þæ¤<»µZ,ÕÜ]D²ÿõªˆ¬þÐÑ÷~ý¶ì5ãn|sWyp^¿x3"ÅJ1“·âŸ蜒,˜?X©TëÝoÁüAù æIDATñ†ø¥ûϘˆ•TK÷Ÿ«VRŸtJN¾¿?ÿÊ®ò`¿Ó—¯dı¬|Õñ½(Œ—ò»'íŠSžœ´*Eµ’b¥(¢‘lÖѼ¯•Ÿ_Í;¥êž¢üä…ßí(UË¥jß,gpQnñ’Y³òõž hÌ›»Çb^OQOŠ2Ê¿öú®¾º++ª•‹¶S©8Õñlµzκ¿‘ÿû™«œ¬U©Ø¶ey/>zÃEäŽË.®NKeÛªÚ”7raG]l–ÌŸ+…üÖ×ÇžÿÍî7ŠN©T-–JÛw—ýßÅù s‡º`É’}ê=ÐÛ¶›­ÂwZÅyïˆ.ûà÷îñéá<6IDATöRUKÉ8å’Už¨<¼õ9mùÒo\xAeº@EäüÛ7¸oýö/ÿBìªí8bOçäDIJDD2KÄrW˜ôù}}ù}úŠýýå]åþ|±T.•J“ÅÒd±41Qüõ oþþ÷'œ¸bß}ûÅËÇKäÜsOsë}÷»Ž~×»ŽzÇ;þháÂýè¨Vùöw¾."ç~äc ×ðÀwnøÆmgõ?›©¤yðÑ~|ß}ç©ÿ |µe% ½ 5„ÅÏ~öãüàÑ¿wÏég|àøðÒ¥CÚ¿‡)wÞóÛ¾v³×Zý|?wÃݪ>ñÉËŽ9æø'žØüµ¯ÞæÓYxIDATxvÙúW<%¿óÑuøG‰˜lÛqœ.ÍxBD¤Zµ+Ê´ÊOŸ})p¯w¾BD”’™Ž R¶‚S®*ËL·^~éò/ß""^ Ùzù¥{5é”§ÒLÖ÷4,÷†(9ÉZ3“6.GÊG½ö꿽VÜ3Yž,Ç'‹¥‰ÉÉñ‰âøääøDqbrrb²T(dÎYùñ™—(ÿCe³¹ññ19ḓŲ¼›”¬Xºüß^Ì“Ï<ù…×ýÃÿ¹½/—[sÉysf ¼û¨c¼Ý¯¼äêÓN:ýÊ?»d¿‹VžpÊæÍßÿÂë¾ô¿oXsÉy9ËZyÂ)^a¯Îï=øÄ}ÄÚIDAT§#"ß»Ylñ~,زñ‡ê5ÜþOÿøÔS?¸û»}÷ŽÙþÚk ç/Rçm|µ=ù“§#쵡šÍÔUóÏ>óWŸ¹jÝõ7^yéŸ?ôнoîØ1<4b‡üf:é„SV®<ñü Ï™78÷‚­õÕ/"õ™«n¹ùö ?ú‰s?ºúk_½ù[ß¼ÿÔO;÷£«³b}êòkÔ³ËfC×)'Yý&€¶ã_%â±m§µª™Œ#îÊ ©Úv¥<óoN}­óÞµ,÷ /¯´]q|Ó3ê\ÈiË—Þvæê½_™*œº"–ce½5"VÖ*äsŽX–å8Žˆ%ÕªóÔ’·ì³ØB KÆIDAT°Û¶«U»Z­Vm»Z©z?Ú¶mÛv¾/o9Žû ^mSµRü×»¿õž÷÷Çï:*›Ïy“B+FÈÎê³DþíáûEdÅ[G²³úDäÁ‡îyÏ1+-eÿÃw!">úÿNZuêã=""‡ôö쬂·ÑÒêÌefðÜ@¿:ÒÖ°hÑ~"òûÝ»?±ö2»T±r+ävu¹þè¶!N ?|âQ9êŽÌrg~è§RËRûA5wßy¹Ù}"ò/ßúúÇ?¶6_È©õ»/šª_Dæ ÌqËßÿ½½âò?Ïf¾qÝWHg1Ý@Wÿg\¤SÕ¶©;‰¸+#¼ßùå²\LÙIDAT]uffDÔ×"¾ERuªS[Ê)ôåÜ­•rYòù|µ*ŽØVFD.yð>/…Èô5š<ýý"’ql±¤âH¥\‘B!ëå7‰L_šÉ[ÞJU©¬•»v>óÒïþý•]ã“¥‰‰Éñ‰ÉñÉâøDqbbr²Xœ,–'‹¥?½ø„BnXm¿ë´ÕNjȧ¯ùì‡VŸ=gΜBA=±B_ND~øÃÇÔŸ|ú ©Vóý3#e>ŸÚnÛna·Zoc>_ðÕ©rw÷ÖðÉOþ©8ÎùŸøÈ5×|öØcŸ70OBäóÙš ÖÛ§†ûî»kj£[U¾Æ/|ØåJŸò]põ|Õ–(å«}ãáðlIDATÓaE´þI ‡$‚îc1%‚xªÕjChŽL¯6u+)—gÂG¹µ¾pæÝ¼{iffp±«vÅÊŠˆ8ö¥?à¥×®=à¶Ûd:‹ÜrÚûlqÄ®NE¨B.ï6É™úº®{i&#Ù\Îý®ˆXŽT–îS-9Ë ¼¸}÷Žî™âÔ™bi²X*+G¹â¤U‡å ¹©øä8Öô/ù‡ïÝ쾘5gV¾·öž$(äs"²rå ?þ¨÷ãÑGS-W ùœ¯˜»Ý-ìU+"…õ£xkX¼ß¢Ïüåµï=õŒËþ×E?üácwãMVÈ|F!Ÿ‹Ùà0a5ø6ÖvÄf^§9݇L…IDAT|Œ˜ªUÛ]#rÈÛßzóÍ_Ó ¬:é}£ûÍ[oF¼\±‹Å™oMª¯u3ïZYéËçÜ®¶mÙ¶í8ŽeY—?ò—B^Xó ÷ïƒ×M¦³È—Oz¯ã8ÕêÔdK¡uÄÇË»"Ó3"V¾ >îÎ),Î;Õy"Çd2™œõ£_¾<>191Yœ˜,MKÅbå=ïY±æü㆗/šºÈÌcn¦,Z¶0ìÄ }y9çœ<þø£/myqöÎ~9ýÔ÷÷Í*¸o¹~ùÂó"rÂq'÷Í*œwÞ?þèOöã%C‹×¯ÿÊYg}xåÊãõ:EäøãOܼy“ºÅXÃ?ÿó×—/•AÓœIDATv«²+Õâøäà‚Á°6×l°ïˆz{kðvʧÞ}÷ .tÛsË-_‘K/½ÜW¡ïˆçñ:¬]®jÛ2ýÔøß»¿~ñçvà×'­Œ(—f*•ªzŸøè{Æ{ïf+U)ôÜá~²bç,q${ÝS½ò‹ ?éÅ€_\øÉCnÿªˆ<¼õ•sYwÔ‰ÕêÔ*‘ÂT$²DwÆeê>"}}9q¦omæ8"VßÁ‹ÆçɬÜIƒýG¼}Ɇ{þctb2Ÿ•·ýᲕ+ßvê)‡í¿džX–ÈÔ4Êô|Ê”¾¾Ðùºo|ò)7|îÆ?½bˆÜô¥[Þ¾â°9s$$AàIDAT÷ñöúò?üýýÞó·7üÝð?Ž=vå­ÿðµÛo_ÿäÓO|øœs‡—­pªvÿì~_"rÅWoÞ¼é´ÕÇ?÷ܯԃÖpì±+Ï:ëý"rÉ%—xÌ)™L&¬Ù}}…臲ڞÀ܆Ýwï½ñÙ«Î=÷OŽ=z­{j¹\¶8Q,ŽçÏÑ{Ï{x¾a­êë+|úÓY)WñËç—prà™&ãÑ…˜A"—ê’ˆ ½’¹¼-"}ÊBÊ#Ží¬;rjRà¹ó/ôíûÜùöÛEdÝ‘ÇWl§:ýÛ·¯Ÿ¾}è„IDATã‡U-—DÄZ»öÚO_³fpî\KÇ™^,"Ê BdæN!ÖÞ¿Í-G-,/þb«ˆpÈrý”ô·~¿{ìõW¶‹È[†ö›½Ï,9ð ayøÞ̓óæìÞ¹gñÒ…û ¸…'Æ&ßܹglÏøà¼9óíë~G¯³T,m{éUo£Z@¯Á+ºù1lzìßßvÀîMAŽ8â À2?ùɯô™Læ—/¾xâq,"ën¼ý}'¯š‘ëÓóIDAT³>tt̓Þu÷“"âˆÌxàû¯ûôÇEäû«ÏyÛðþv¹œÉd¬lØ74fØŽ8ÕŠmÛ™|þ—£¿9ùÞïzÑb÷®7oüÂú©K3î¤ÍÔÔ†LEGdúk4.7ƒÌDKÜ›ªŠcY–ã¸k®=ü€°Kž‡~ oËü…sç/œXxé[/}ëbuK¡ßwÞ_1½ÎB!¯nT_ë5ø ×ls`ƒ£kð"°·a¾ó]²tQØQ|'åýVÆW~`ŸÙ ÐYÄR±wÉçüè—ñ÷ÊL­Ì˜šÌ¨TœR©""ßúöãuºÏq+q¿î2V¬Šdf‰ÉÎLuD°m{ÂÎ`:ÿDIDATH±êµÄĘY¬šÉJ¾Ÿ¹ÈÔº©ûXîT‡»(EýjÏÔä‰eíõ¿ÑÔš‘æ¥ôû¥h'~ߣ 1O‡˜Û)–âÞÝÓßç®™ "ÿùóÑÅ‹‚WCFxi먈 S7E}íÒ’ý e±$èbPËÝK¦÷©4‘ÉŠxkDòù¬; 2ýÍñâˆ8Óë?,ïR;ÿ1u‘½æK¦ÒJã¿ð÷Ûíÿñäs"’Oé­?ÑF¿òÑøw‰Ú†–íÿÒÖ- çÕýì¶ß¼¶ehÙþ¹|NDŽ8üП<û¼ÈHÝ•lßrÄá‡æó9qdü²kfßü…×Þ½áE˜Juçøe×äò97bÛÃ5IDATb8–ÌóÄ{ïßtïý›|Õ6pˆzw!ñ¤ÐðÈÐðHÜKQ=w8 öÈÆ'­ZÕùãž´jU»³H]šqãPßH?º¥¾å·ÐýL¥—›EÚ×€ƒˆ;pïý›Ü) o£»Å+¦¾_»×ÛIDATåÛ]•º]ßÝ;¯¶š»¨íô•G/rSˆ>†G†º'‹tOKô._Ðç'Z"f>ÚšE "у·MôP³ªÀ]Ô ¡ï±‹× õ-"ˆOàu„^M}%0¯¸/Üåg\¼a%õjãÔ#½ÙÛÚÇ7üF–D„š•´/‹4{i&p€×5¹ Cß½f†Ü%º‘PGDo‹©Æ4&Nƒ½Yw GÄ.z@QË«}¥—ÔsOD=1Û UZ•0Ô›©°fiìXZ#ÒäðßÀîŽÆôÖ§s·µúTDͽZutß/FÔuˆîïg½K]mê> £}·lhìX-øún]3¤»¦HIDAT -Ÿ‰¿‹¾„J ݲÍû#!W—âTâíx§æ÷_|³ ´|Zõwf¢ùg†¦c52#â çaá÷PTþcæõ1wÞÅ‹J^lªyiÖ+)¤32b—fz¥t3ßÕÀ\ç ˆ[&"„…õÐ1/µÔ<–O «ÆYZsEª(©%ì­j‹~‹’1ç'Ô«<Ñ«FßU/Ê0# …|Y¤áE5“^³Mê]­R×¼KÝG¨WØêZ_ªð•‰¿¦$þßQ|Å[Ë®vßÉ#Z»ÝHyÿûNPô=.®Ÿ׋m†+"è[ ŠÎIDAT¯kÆŽÖn lCÄ.¤a:p‡Ó@@̈¤ÏÔ€žÐù‘Α ’j×_ÿצ›HµXAäúë¯Ý½‹IãºþúkM7jµƒˆûm`€–kÁ ÍCÆD€1` ACÆpC3t)#73tA]ŠØ@R=ýôuÞk‚ºT]O‘ô(ókD,˲,Ët+€mŸñB†ã8ïniÐö7g6€®£kDÔK0^4q7º?FOŸ€„éôbU5ø&KÔË4\² šº4sç·o‹ø ZSAäìmPIDATs×Fü ­3"ijHœ™wýiœ5Žã°X€TiûŒˆ3MöŽ_ëU €ÄkÁ€Æ°FÃŒ0¦©Åªw~û¶ˆ,ÒCOO]>¼ÌtH#fD€1¬ÆtÅŒÈðÈPKê½¥3"Ã#CÞŸfÉ€žÐö;« nÙÖÌQÐù#€X#¢NWx¯}S&ñ˾±K‡çf@„¶ÏˆŒnÙæúÞ[a3(êvïµþ¢æ.5:¦3"a{F·lsÿÄŸ‡ð û„o2CMLr Iü€ÎkÁŒ Z'ãIDATHØß-WsBÅH˜ç€+,³úÊð jjF¤­ÜI‘°Ë4a»´¹Qè1 ÌÆ:©©‘8ôO¥£BÍu$ÑkMߊ¹<©¢ÿ“P'ÒøÖö ø Ý·1"|Äü1ì­ø» %"Ö/¾ h«¶À °ù@— ˆ É|³¾/a™h`/Ý»X$^gD–/k_å@ô…ÒÞV„€\šAbÅY(-!K›É%Ð\šÆD€1` ACÆD€1` ACAZÄy¸Œ[¦±ÇШ{5ù ›æ½‚ ‚'‰˜ØIDAT´‹PÚQsç«€®BAÚq7w0ˆgÍ †G†ÜÀá½ð^‡½å¾ðmQ›öÀ<½¯þÀ:õšlô‚ÀV$è‘x ¦f=¢ ¶6º—f€1` Aè|5@ ±Fɧ.¡P{†•ÑÅ_x¬Ñ-Û|‹LE[v]-ëR$A©ãËõ¡]_çE`D¬ªfKZØèr\šÆD|q¦ Z5À´Ô… Œ!ˆc"À‚0† Œ!ˆc"À‚0† ŒáY3HŽG6n4Ý€¤®¨‚IDATˆÈI«VÅ,IAr¬Ysé&DD¶Ž¾³$AÉÿß= K°FCÆD€1` ACÆD€1` ACÆD€1 †G†L7Á€á‘¡°Og‡h½Cbycáè–mf[’HÃ#Ct,€æ1#‚Är‡IKèf̈ -Ô‹£[¶ù~ô•q·¸ú½þúKÊ/@¸§Ö9j™šÅ¤A© ^GÌjàPËë/ÂÊwêTºˆ&ô®íòMÄ[R‹ Dñ£[Òå"V­Ò‡"D€¸ø&‰ÍÿóIDATlrH½Ã’X¬ Ôõu ô!3"H,w¨s?¬ûV§RËèc§þnœ:S"¬+"zŒ©.‚Ë7Ôù®.´ Û%ðÇÀ-駯è15D|€.DAZ?  ±XCÆD€1` ACÆD€¶à¦«A‰5<2¤¦ßh  %"À$sŸ²¦þín÷Ýî]r½^&°Xt™ÄóžÚãëdµ7Â: \¤‘>RÖÜâ_Õ’e’MMê¹ûFpDp¾|àŠ“ZU&%¢ã ƒì|§IDAT A©gÞ"æÜîc¢£„a±*’¯£ Ÿøc¢£ø0#‚ÔQW­Æ/½Å[V’žÖ;Y_΋ÓQà!ˆ ±ô1ÏÛ¢5ËHäj"š`qú3l ¸"@\|¬€–#ˆq‘? åX¬ Œ!ˆc"À‚0† Œ!ˆc"4<2ñ°ž7@"ˆ ±|ca½C£;ÊFŒµM¶§×¹ÏäÞ*šÄ Í€Pê=Ýq "HýNíuÝ»ÝWXýÑ÷¸°é;6q6&Å9ˆîêX;t3‚’,ðjˆož£®Ùµ°÷ÚbÕŠy;ûIDAT%Ãêé9 Œ8µdœ5€Ö"ˆ É|£ ï…úVà øñ%#"V­¶£÷$AéâûP.{_2|œ½oìlÕçø$Íè½êÒû6Ig  %øÖ 9@z‹?|˜‰)z¶ @Ê1#‚tÑSEœå“Þšu÷è÷zIu5küzzBͬæëIÄYh ‚+ð:KÄö&wxXg¯ÄÑÝv!¦×Ï@ËqiCÆD€1` ACÆD€1` A@#Z{vµ¶˜5×,–¼»È7yF]Õ±ÍWÒ̃ºçÝ2®ÿkâ z xIDATTÕî½t$Và­Ü‡G†¼?a%јîìÒ–(ñG—dë’8ÒVmj^ûþ µ°ÁüOÃ-Þ‘:êsb¹ãxâµü?qœ ÓðïŠsì¶j{A@ƒô'ØyOõS_«­S`Äko¯À2a ÐÖuKôùÔÓñ•W·«Gש=¢òºz&N‡GìÖ6Ö±zcÂ:0ú@z³»ðÏ%ºÁzϨçÑê^1ÏQ­¤á4‰  Aúïܰ§ú50 §dØï÷ ‡…¡ÀÓÑËîÑž°¡1b|ŠSmØÉ6¹{Ç:¶®EìÒmçGœÿ›ÿ…Ô¬§±sl¸ `RgxÀÁµdIDATzHkC=ê§óÛ}•ÚWÿ°¶x¨^Ÿ2Û=Œ>#u†¼ø­j@Ã[ïÿ’ÑQ¯®ªêÕòÙv9¦%•ÇT×qõ«'ñkháÉÖ<Š~ R€0|kiWóÙ°Ýöeݰ&.Ñ÷m¸…ñqE@|̈ ÉÔ±Y¿}W:¼ú‘šK8ã佌¾Š3fîñ¢Füu Åš\F¸Ò%~K;(€„!ˆ ±ôA®æÒÔ°q1bGïu]e"†ÿzÛPsæÃ·µf‡i ñ$> sø+øD€LÚî²IDATÎ!€‹U€1` ACÆD€1` A¨[·Ýôz÷AbÕûX“è'¤x¯MÝ $f:ö0ý±vÑ ‹¨ÄÕp³}§}׸ˆÇÆ|>NØ™ÖÖ˜èÂò@€À"n×ëÛÒØãv#ˆ5tÏsÚùÛ&OJ~PD…ú$SÍ#FÔ¯ÓјˆÂjÀ#ê5ÇÙ¢è¤HÌŒ¾¿a¬ãTVF/ö1=:Ì„Õý‰¼%¼fx« ÐÛÝŒ8'¥×P×ã‘ãÑõ·Ëw yIBAŠD|dô¨·ª8[ô‹íoIDAT5?Ŷª%ÒÁñ2úƒxœfDwKË[뾈™0j^÷Qß|¸q]…#Ú_ïõÇz´A)¢í-á[[ÚüŠÔèÚ½âµM)¡áf×;A¢Q¿x¡Ï…Dd,½¶º.ÍV­Þž3ÕtAi¡O6„]ŽiIå1µû¸=:Ø4ÓìÆþCD×Ó…ÝØ­À×w‘vÑ¿Íëú„ÝŒºŽÒÀ Ô¾³há”RÄõ‹–Ô§òz¨¯Œé€–,ìº3"H2õЏ)Â.ÒG/‡ â佌¾, ºýD¾SîØ§çz}R5×O®¶ ;´¯p½M._W³eïXçßXK·FIDATôîqŽnäßP“µvíµ7ßrÝwnÜøÈã·ÞºÎt{Y¿~Ú5l}ÙtCÚˆyuivÃ翲ꤕgŸ½ê²K×1#tŸGÀ‡ tù|X¬ Œ!ˆc"À‚0† Œ!ˆc"@Ïë¡[w×lj €– ˆ ±~hHà[ÞŸ¦Û5s¬šG¬YC¤çLtâ†f@ í¸;w6‹¾’ ‚Ñï°îÛ¢?/-,…î(Ú“ó"¶‡Ñ÷®ïEؾqNÍmC –xj1ímô¶ÔÜ]/ "HßX®Ê1G¸ÀX""Eüþï1IDAT#FŸNô©…ºyѧqhõǰžÔ÷ Û §D"újƒT i;S½ŸãL2H'‚ÒÂ7I á—cÌò­cí¹a[ïgŸÖ^!ÐëøÖ Ò.zDô­NèŒÑ-Û¼?>tgéU݉$™ºìQü|‹"õE—Þ»¾•’ê–&yĜѽo«ZØ€˜!Ã+¿¦Î@[DXúpUsijØ¿*ß‹øÛã×ýVXùö}9âEDó$ä^8¢$—f€1ÆÄŸä`:H*‚0† Œ!ˆc"À‚0† Œ!ˆèýæ¶ñþ&’÷IDATïõÎ]áD"ˆ ÉÜqÎí¢G2ƹŽñþsxÏÓ¡óÔâïH,ñÚµâß\@âD.êƒâô‡¨yïúžeV>ÍÔÞð=~/¬cÕ}Õ.U;¼æ¾† ‚Ä |màؼQ0"a0¿¢ó¢ƒúBÏp¾-z žºö $™5Tõld‘ miCAJÕûQÛw)¡­mK3úH¾5Ôa²c˜R‚$–:’yK@¼) u‰W&â]VªÆ¤/ÍÑ;³ûèQ$V`b\¬ç]ò‡¾þ7pEpà}ipü}$ —f€1` AC Ç¥IDATÆD€1` ACÆD€¦¤ù¾ŸÃ#Ca§ŸænPÄò= ŽçÕµÏ"Ð̈c˜A’¹LSÿv·ûž¬¦–‘ §åéO¼ãÒƒì=ÉöP@½«‹H-‚RG½¦ †ß ™5õòz™t |j]`÷Ö| @jDp¾ÜàÒÓCô ˜æ´SĪU_éT‹ô‚Ò¨ÞÏâ|v6E¤^Žq_Ó“|X¬Šä‹üêý€Îúö?= ÀÅŒRG]µª‘ê»aåõ2)Ö!ýÆÔA‰2ß û1:¯´ª=*NÒoF¦R“IDATj"ˆ~|j€Ž!ˆ~äè«c"À‚0† Œ!ˆc"À‚Ò®ù{¤¦ö.«Ã#CϺëpcô(î#‚ÄÒŸ¾VïîÜP$ý %"H2õf팚Ѕ"H÷qkêSéE›&Ñ·«Ï¯{7Í¢ûG-S³€Ô"ˆ ]Ô©‘š¯#ÞõméXû»Š&jöjô[R‹ ‚Ôil}ejÓFL½êË"j€Þ@Aê„}þ€ÎÇ÷aóCêåß$¸øú.R!ðBS#>èF.fDdúÒHwy‡ocàvoËè–mïBÂ{#¢F£rÛIDATÓ˜à"ˆ ±b^‚Q3JDÉèwS(¬Õé45qiCÆD€1` ACÆD€1` AØ‹ï¡Ã#Cñï Ê½V ^$–/C4)Ü'Ô¨Onƒ‡Ð ÷&€Î ˆ ɼ§¬ùž¾ëÎŽèó%Þõ…WCÌ}ÓÃ×9¾Ž’ÈN½CꨡÄ}íÛ¢öM„Ôµoâù²]ؤ‘Þih€AAÂù²BóÒ–6bŠîa: @‚P>Ð7€N†5"H¾6‚|ÊoÀ‡¤Ž·‚U¦3Šº¥}û&Œwà IDAT⾜§wˆÞià!ˆ ±"¾‚[óÛ¹^Èh`ßôëº@|\šÆD€1` ACÆD€1` ACAzéwDsÔtÞG5ÐðÈPXoÐKbâΪH¸ÀÛ£y­}¦1€ÔbFÃŒ’ÌûÔ®~|sEFH×têlSØcí|Ûyú‚ÒEO$5·¸%‘è ¨÷žW&â-©E6ê±jÕ—E:Õ"½ ‚Äò¦7¼ãçÃz]ÂfŒÔË1îk:€‹U‘d£[¶y«OðÍ ì|:€‹J¨tIDAT¤‹»à#þïs<g„°þ‰èF¦F¸"H,ßPçý¨mI¹°îU¤ÔÄ¥` ACÆD€1` ACÆD€1` wVEbéO_‹¿£^žÇÖ {¸®þ ¼ˆ-ÒŒ ‚$S¿&½Ë¨©ó=_Æ÷ ^÷É25·t²Áº—f:Ã#CîïGõ-u‹Z2p£úc ŸŠGŒÐAÀT€ø˜A*xQ#þ…Àb,qPyËx}!Þ¬PA‰åçÔÑ1º°o jôîúŽé¡Ÿoc[¤—f€1` ACÆD€1` ACÆD€Fð, ëú@LÜY §Žˆ1ïéÉ£Râ —´AIÖØ`Éø CAb…¥ßC×ô)oGýñl\qP©¸ {”]Xo“ö¸"Hߣb}Ï· |×{­?f6åøÖ‡ÑoH-‚Š´_ĪU_éT‹ô‚Šì1t<«üIDAT…Í©—c|“Oàâë»H,÷bJKªâs|3¢WêH9fDd¾,2ºe›ºEÿï[ôàÛÞÂd“0a=ÑLpDpú€Ws‹÷cœ}S+¬ÓÔé@5qiCAÚñ "ˆc"À‚0† Œ!ˆc"À‚0…»¦@çDX­ Ã#CîŸÖ àï@m¾§Ër4hfD"ú¬Fà<‡þcàÃð¼b¾^òÕ©ÅŒÒBŸÕœÛhÉ„Gļ×̬€DUá "ÓøŠù¶B@"€*N¤h¸æ–× y]IDAT À`/Þ°-^RQSKüúP1#‚$óFýÑ-ÛÔ<¡¦u‹÷:lª44·Ñäî`$–>äGo {¶%l—šÃj€âÒ 0† Œ!ˆc"À‚0† Œ!ˆc"À‚0…›¯@çDX­ Ã#CÞŸ&Ó@ 1N–Ðs¸Å;P[kÉÛXUÞ^mz>0AAŠèOž |o¤øÝÞ[qjv·Dì¥ÎgDD8Ç {º Ai¡æ _Œ+³B½f šÀðUs¯h1k`@×"ˆ3ê°}³&~%cIDATzU-kV8–Œèu`FØ4IœÕ}³­iœ¦æQ˜ÐýøÖ °7‹Do‰ÐIˆ¢S#º3"H2uµ¦š'¼åË9õy_ñå€èš}e¼}ÃŽç\[å;J½õ€$–>úFo {¸%úÇè-ú‹š KñϺ—f€1` ACÆD€1` ACÆD€)Ü: ‚Äjm°òþ´°ÚšíرÀnñÔÖØ#y5D"úCà ç‹a)Ä·¯ú£ú|»°í5èeˆA’Š ë! IDAT‚´Pó„û:0aÄœüÐk%Oø^n¨!p $A˜ÑáK0,‚0#lš¤}‡ëÌ kñ­`/ÞJŽˆ--ÇÔ€ÔbFI¦®Uó„·ü"p±ª>/âË"µÕ+N úúVH‚K¼£·„½Ž¹ÅûÑ÷"l{D e a¸4Œ!ˆc"À‚0† Œ!ˆc"À‚0† Œ!ˆc"À‚0† Œ!ˆc"À‚0&gº€ÄZ>¼ÌtºÎÕW^tŕש[ßKú)«"€1BeëIDAT6Ú½k›é&t‘;îÚ¸=Á½vÊ‚ ½vî²L7¡¤¶—X#Œ!ˆc"À‚{Š_¸­é³§ÀbU@ç¨cÞè–¸_Š_¸ÉC7v¬–´°%ÜÓì’ÆÄAt”7Fv~ð6xh„!ˆÌó¦+Ô¬ nQ?èëonÙæe ½*]tùšÇòŠ©‡ˆØ«cÔ“òµDo›¯y§ÖV€aú¨„cdà¸[×hX^Ý+~m];Ýq‚ÝÐT‚ £g ôõ’u‘ÑUÅlOïFìe|€¯——ÿ:Üx‚ £ô ¢]ÂÐ/Ç߯×IDATÔ[KÊûæKꪰó‹FÝ#zíì•0Ä×w¸Ÿ¼õí}­&PDt¤[û-V#!`tË6ïOc»w>¾0#0ÃöÔP¸ØÓ+XX¯3ì]ý­øµ…mñm®Ðˆš Í"ˆ:'l jØöÀ-Ñ…ÃטÛëj‰‚©Ñ=fßF”4r5‡K3À‚‰Us:$æ[íCÆD€1` ßš´Ñwm2Ý„æ^"ˆÚåê+/2Ý„ò^"ˆÚåŠ+¯3Ý„ò^b0† Œ!ˆc"À˜½«®_¿ÁT;ÿl®¤IDAT %ö "kÖ\`ª %ž~zæ‹B{‘­£/w¼1 ½X#Œ!ˆc"À‚0† Œ!ˆc"À‚0† Œ!ˆcrµ‹ÐNÃ#C¦›Ðv£[¶©?.^fª%qõ•]qåuµËDÝÀqÓMh—«¯¼è‹7}Uß¾{×6}c2Üqצø… "€®È9zHÞ¹ËêXKºAÐ-˜SˆÅªÀ‚0† ftøKL¬$Ÿ7¸z_£ |Ý[ÔÐУ§@$\tæèéÒ£-WDIæðNËNIDAT­G·lKÌ\H`Ë}s?S&aeŒtAR½›B"èË·ÅwÖÆcA€äh`©©Ù[ìD)¥Oô:ßôF̽Ìö_ß$™›6¼—Œ˜hW³ÚÑr#]ÁŒ áÔ1[ÿôß»ó"¾,2ºe[œtâëèÎé‚ ùóGÄ»½"ú¼$ä4#ÊÖÙV\šÆD€1` AÃbU@W¸ã®M¦›"ó®¾ò"ÓMè4‚—‹ 0ï‹7}Õt:*…Á+ A`XïÞÆ£aW\yé&t «c"À‚0† Œsê­\IDAT!ˆc"À‚0† Œ!ˆc"À˜½nñ~Ãç¿bª …f‚Ȫ“VlH¡© rö٫̶¤µvíµ¦ÛRêÿ‹È%*àYIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/svn-annotate-view-full.png000066400000000000000000001453251203611042400335120ustar00rootroot00000000000000‰PNG  IHDR X' pHYsÄÄ•+tIMEÕ :úYÜætEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœìy|ÔÄÀ_²G/ZzrµDñ@ " PÊ}È%*"ˆâ (‚^?ED.9~?EåR@¥‚È¥¢ €Š9 ´P(íÙ$¿?² i®d³Û-}ߟ’̼ys$óòf2¡xž >ø< ‚ ‚ FøàƒéÒŸ”h` ¦UƒÌôøø„””Ô P AA¤²QXXP\|ñð‘£ 1³üÖƒ>SÓ۵Ϻþúú`³Ù*PQAAÊ˲°ÿ±¶îÞûÛï‚Eñsæ|É¥—‹©hUAA* 11ޏjq5j$¥¦Æ¿å·Üï¾³@­ÚÉÿ=væüyt\!‚ >òN?uºÐhª«j¦dÔ¬k¹+—r¸ïðŒšu‹‹½ÅÅ^Û Àת vátII‰ËÅDG;ÊEA1ÇŸGŸ:]x75K·Û‰^°óùؽ{Ž~¸b \›ÞÀ*!' O6X¹tðè;ùŒš¾z)PìÖ ØIDAT€óï³@Èh .€ýßB*ïôÇó–ž1ºNJmp¹˜’¿¯ÊÎ(ç…ón|sAAprêtáƒCûed¤ºJÒJ×~ph¿þûÙõ ®¶JHÚ’y={·)½à†½GY—D‚íÏSгw›5KæÙ&¾(^(b’¢Aô`y|ÚAê„ ‚ b uj'º\D,ˆ¦‹%BØR7ïåÑÑŽELB4åðÑÀS”ƒåeÎR¯ã¢›óñŒÛMù}†Tx) Ü´ÑoÄ_~ÙõúëS—KúÆÑ£‡¿ýöËo¾Y—•Õ&+«u›6·ÅÄÄ §¶oßüî»3²²Útî|g‹­„À‚‚3¹¹ë?ÿü#xä‘I·ÞÚÑzƒÊ÷ÒåÚ½TZ+–À«hûöÍÛ¶mÞ½{Çè²»Š¨^VV›¶m;Š¥ÂmO:ñØc£Ä$1š®ÿIDAT!¸X 3EùX®¼}%놲p^H6š– ¹æš«îì6X'»õ>ö±¼\À28|ÀÚü6ÕÆ£'º¦×Y4 ¿ðsÔŠOë ¼>ÖÀp@Ûhà(àXN0«ì@SMS6»òkÏ']à9Îwöœû’u»W©Çãõz<^—Ûër»].O©Û³ÿ…5cÛµo X<°víÊ%Kæ~¼t•ñΙ÷N´ÓÞ®c×ëo¸é›oÖqž’èÄê§Ï\€››eU€§ž~èÃùŸTKJ‘>16ú¢W¾Hmãš-°ë§S_|úé'§ÞÜú6ê Ц£ltÒx®IDATõØèb/³{÷Î_vïz`ô£¡ÈH(‘€²¼ú,]64*J i¹ åEHHë ¶mûné²yK¬¨Y£&¢RbÉ´lÙ<HR´HAÁ™;¾_²d®ìl~þñôºõ7¬ÙräÈ?=:Š÷yzÜÝa¹mÛ¾{÷Ý Þ_FSÔ¨1Cg¼øÖÕMš@AA~RõÄ k¶\¸p~à°×¥ ]»÷1ª¤´—jÕ¹´ 4M;mtblô%ëhíÚϤw•§½}Ç®¢z¥¥¥ —Ìýqç÷O>uù3«‚2}´ Õ-mûöÈáx¾„ñiˆG”Xò ¤Ð4Å¿B;Øì´ ! Ã(„”ËAIDATPàcŠ·ƒ–>ñØ£uÞ~D«O¿QŸ&ZW'{XŠg=<ïó€ÝfxŠž§) ü,¢££xªìõC0öX§ ( Àî «Å;5NeÆãþy½^Æãel6›ÃnÁf€F…äÄ$†çŸü²¢x€ÆW_g ÎÖºªî… …puëÅ+xÞ‚w71.!¡\Å•U™Ç6ͺ^{ó…õk¶x4œrA2lè¨hÚ&èðêŒgà‰‡Ÿt…&/Q¬jyI O(-—¹¼ô u]Í|ûe¨Y£¦çž Q)±vü±•/˘1CZÝÒVyö¶…‹b§&IDAT¬•žóÍé›3£àí·_€zuêûx~ß·§ÙM-ÜwS³¬V-Z€3>AŒo¢uJË’ØÕ¹ÍNß3tT m#‰LŽê]å2ÑQ=zöóаݻ¶ÞÒ¶ƒœû݆Ÿ~Ú¾hîÀÍsêsŃ,$Ìpoâ¶Êq<ˆ›2H…¬ßðñÁƒ»´®oü±³LˆÝ²@Ñ} zÜÙ‹R䥃ªb¡æÍ{G(²4fïœìÞþnFÙívá§X BäÓ§O-_¾XVÛ·o"oß¾E©‰ä®Bs6ÚKS MIÕ«S/~ß·'ÆæWæÄÉçÌ~sÂø§êÔ®ÇÑy© 3À²œeþcYN¼AI…7={«þÎ*„øV†ãgX`ÅGÇ’ˆÖ…‰IDATÕÑñc¥€g˜2SÏn§mvÚf·Ó4 ‚ËFÉ7y`ZçŸú:ßSìfÜO©Ûãry]nw©ËSêv—º<.·Ûåö:t¿ö÷J¦M©¾}Îxczý{{õT§N=áÄàÁ#ç-œÝ·Ï … f4ø²[aÇöÙK>Z´jÕ§9}/OšÚl*«ïm6ûÞ½» çî~@S?üðݯOŸùŸââFj§¨öï#Oóx×ÎwNxbL”´öïøñÇmo¼>ýý÷GÙí£Æ ‰»¹uÛÅÎݹó‡/>Ýðégäç§&§}µ~[÷;Û€“ñxãš-ÀÁŽj‚I¹IDAT_w)%ˆÙ5¨“ޤѵN [·n¿pÁìÃþyË­í:m²Ú8)š¥åÐ]{v€¯Öo€;ïÌ9rèï%‹ÞŸ8ñùÅν«{NÛ{eS-‹TÈîÝDZIËÅ:ì0ëÝ7>ùßZ¯×=ìÞþ6 úô¼òóå Ì^¶ø3`¹a÷ ¨^-!«YKÿLr HêjïÞÝS&?6}ÚëÆ>¹aÚ ……õ2¹2ñ¢ª¹?ä*›U&?wûf¦×%ÄQÿW5õ¾ûþ[u ÊÝ{9tpÉ¢9ŸšºøÃ÷ïº+§ÇíwÍz÷õ)“'Ì™ýáÈ{F ¼§×³—¼¶K§®²~IDATïéixø‘‰œ´c—¿úîìÞÓÆñZg»wk'4oš6Úf£ðô;3_;qò_[lŒ?ÏÛ—­ð-[¾€öm;‚²ÙŒ9rü½tðwÏî)“'LŸþÚ„qOlX¿öBáÙŒú霤ƒ|µáA='dzNµÞÛéöž/¹èN¥¦¤|·åÛ7^Ÿ>ó­¹ ±Õü•Üév©}ú**,ðßUúï*²úY·~õø‡ŸŽçø>d5»ì4OS¸ÅŸ1p† /,ÇùÃÝŽ¢ÊV>© Ñ(ž„Øl´›óñ2/¹ÔwÕ5½Î¼=¥g9Ÿ?²Í?¡OÙÄ5X”ròw¸²IDAT:ìVüÉqÇqŽ(Åó€CQ|FfÆäÉÓÖ­]õÁ‚÷Ö}µjÞË6j YY-?þxñáCÀM74£v»ó² 5øž¯¼<5-­†å”XÂ^zñÍfM[ØœŽ­ßo€&W_k‹qÀæÍßtÎîBI¼;76k.†½q4¨Ÿi‹‰€õVßÚ¶½ã¥‹ï=Žóú(;MIÌ ©ö¸hU TYÓ6Èlh‹‰¢dfÞÝ£Ï?︵}‡Ý?ï€ôz6§Ý®0°ü«[Ÿ=.îvïàÁ½úôðæînIDATëÿ]¼’vØhçå0¤e‘–‘P+»ä‰_,Wb|‚=6 æ-x¯¿!óçÏ€ÉiöØ(1Ðá0<6iÕÕöm› u‹V6§½Gï~¼ŠRª°YíqÑúqEÉŠ¯ªž¦„òfç=Ãï<¨WŸ¾]à¿KVÒe•Ö°^[¬ÿµá¤¸{\¬ûjõ£ã':¢.7n”SoÇÙÙM¹»¾]ÿÕŒ7¦üû«¯¿ÎNS={öñ”ºF*D2p¸4Õ¯¿þüñGKzÜ•#\5vƒ–¿—zY{µèíÛ·@ëæ­mNG>ýx†úr ÊT•ߨ¼¬÷vî’VCrÑ1>ÊFo@¶IDATÝ’ M5¹\É˵xƒÌ“§¼°níÌ/»«\ÝX½~XÿnÇ®mmZ·ûä³ÿ=öä$;ÙCr-,$¬0 ÇòÚ«xµ%ïCƒdD“ ‘ ,/„åY©g”]èõ>†‡ÃÁ²ÀGÑ0fýZѺ‚²¹Â¹wÞ 4Ï>| N§ Ào› –„)B%®pÖIµ/:¿ûð¹O•º½.—»Ôå.u{J]—ËíöxÜÆíñ>ô`G§=C¦¿#)ñža#kÔ¬ñâËS?\4wÆ«oÓ6:==~ým7Ô¾ªŽ#ÊNKn Õ«'<þø3ýôC”ãúÆ5ñ6d_IDAT[þøëÀ„‰•\,vÆEÛ¶íÛ¿‰áµc×6à8‡Ã)"„ ‘…zô²ìý÷?Û®]‡¤¸$iŽReÙÉ$8¢/ßÜ…pèݧÿ¨Qƒ{öì»víç~$66Öét¨®kˆIŒëÔ©óüÔ—§¿0eÒÄçÓ’S1Q”Ä*’–EZFr­ÔËUÖ59/Ó«WßÕ«Wž9{::!† Îy™¨Ør_Oºí¶›…ƒï¿ÿY¥<ºuµvíçþ@A=E ‘Iš5`RQ’⫪§%/ßœµk×:õ•^˜î‘¶oÿþÍ×ß‘Ú42Qª”ÙÀuMšääôýÐphz}³èjÑN…CN™Åùó禿0f¼1½MÛ¶Õ£ª+c*3%×J«\âñ˜Ç­^½rØ}à‘ñ·½å¶¨Ø(Yò;ö\8úP¼ZIDAT{\E%ÕÓÊi°®dZµAÒ¬„MOM@U=M åÍåóçϽðÂdÛ.úrÍD9m†Ž•èœeJ=±ÕüÆÜßGÿ™·pv¯ž}š5mí°;mðùÊÕÛ¶myù…7j¤ÕŒ¦nÔ;÷\8sÜE—ª×PoPQ±Š´TÒ/`›VmYÆW«fÚäÉ’‹îwÔ*ÙWM-‹»î¾ûÅ—ŸÛ±k'yE1Êi+8{ nº±yTÙ6ƒÍš¶ˆKŒÿðcÏN¸òÓuuêÕUJC´àq™;^çñ0Ð9»iãÆ­”ÞŸ;_%eÉC¬(D@z¬äòYÊQ»Ðí9ŽâÍ5BIDAT8ŽçyŠ¢ÆoÚ ZWGÝ'üm¼h!”ÙX³:wãyžeýÎ1§ÓÆ<œÊÎN¶çwæŠÖÕ#ïçÿy“Å `ãÑýgNo݉eý«°Ênz/xÈüû`EEÙ/Ûr”稨Æi¥I%cïœÝüÚZKWÿ”çr;lpÍuÛ·¿¦Ë××®•àw{ þ¯vmÛžÎÏoÑâúN:¿÷ÞÜ«ë7I®™å€&Mš@zzƒ¤´Ä¨òSâÏ{îšê”4D-**yÒ¤)wõèòbIQ/IDATé'ËGŒº÷ƒ÷.^¼hÇ®mýû ̨ۀg¹è²;ì¬÷ßZ·~õ«¯¼Ùü†–q q·ß~Ç+/¿þУ£à™s®mp}|bµvíÚ÷és7Œ3®SÛ;hš–æå|ôÑÇ·lù®kÏû÷ÿ­*A_Vª@”3iÒ3“ﺻëŠå¸w¤Ñ²W]Ð…„–å¼½-¬TÏÚD•='Ë„Œx ‰@¿ÉÍÙÇÏñÓ[•Ýú†”¥Ý?lÊIDATäõËÀôV|_¶ò¢„µ@<E±Œ¨Ñ£§>5qTBb"<Ï—-ÆÉW îtå߯]„॑eÙâ %…§ÏÇÅÇ&$V¦Ü.ω¼ü:µDÖ?€†MÒ¥ÚŸ;[”œ–( ‘Ec¼Ì±N¦]•’XÍUâ¾p¾¸¤¸4!)>9­ºÍfktul\³%!)þâùâšuR«%ø—:]ºXrúD\U¯† ˜×ãý÷ð)HJ­^=9Þf³É²#?•TKqòäÉÛ:ܺhî[´l.æ®,‘HÃ&é‚äz ®rF9…LkÖIm–u½VY/Sx¦(1%! $äIDAT:&ŠP+iˆò8±Fµ#‡ó’ª¥@Ñ…ó‡å´o×ჹójÆ®*$uå*q_*.½x¾Xl/UU•ͪŒF‡$šôXU= œ;[BG½t±äôñ‚z ®rF;½nᅦOÕ¬›zúx4¼.þ9pTõ˜ñ2…§‹Sd>]{IbŠ^TX|ñ|q\|lBR¹‹ëÒÅW‰'9­ºtüÏ–—JeJ¥DP@–ÖUâ¾tQRE»͒‚ˆj7j”ÒÞ[×ß{…*€¤´êÕ“â ®÷…s’J¶—›"d}’»JYÁEõ’â«%ÄÆÄE«ÖãeŽ:™V;%!?íg#ùÞIDATE.rGÂÈô×ßu{¶«¤úôn£çó/vÈVºó±qq_~›ûüS# …È–r/|Û³ß5µ9†¡iš²Iß S‡ãg}ÇÑÇ_y'o_ó©h2],ºðú‹¨Ñ£§>óô})©)e®(ð›`<@Ùk…‚muÙä¢@ØÄxŠ¢x^XEñ<…_?½l\³¥ÉM*P!C†Žô@ÃkÓU§; ‰ OYæ/˜·cÇöç¦<ŸÙ ó—_Éɹ{ÈÀá?ôHÝÌ«B5rERáW"b4°ð1å¥ù];v*)¾h4a\|ÂÆÍß½üìVMQü—]sê^U.3ÁqIDATbhŽv Üø8ŽŸ:Ý}Ã*(s:;[øêk í@ÛÀátH>ÄKüT”`5°èKúª£ßÙEQå.Gÿš¬H@¹×CØxìቭ[µM­‘86a(ˈaÃâž}vÊÖm[F ñîÌY×4h[-¦«1bÁñÇZ/y ‘I¤ÜÁ‘*Ãïûòj¦%ŽWžÃGó@2»Œ§Ó¿ {þo­N(ðqºéD(!ø‡i¿•DÛÄ5X‡MðZ•½I¢™|Ùû…”8e(ø«ü`•óoù­°Š€Î-øiÇ~pØõ^Î µ k'%ÅÛƒÓ!œeINJ9r}‹0ßIDATXï^9……ŠÎר™Ÿ›œªþfY‡Ç!ˆ€Â‚‚Ÿ·ïµ]WÈû7>šßtݯ{dMx²àHó›®Þ! RˆÃaJÇMŒýFþ™¤ÀÉÊãcÏ—Ž›hwØÓ‰§àò·“í¶+êغ}Ó+Fp–Åf·¥ÕJN«•¶‘+› ¿‰pºu¸~Ý{@ 6=§( xmMó›®ëÖá:aóä …Ø §KóU01vö!þ]@×qT:nbN—æR;*!1„Eîï¼3¥°àŒvñAA"RRk<úèËþµD AA$XÚ¦ÖaŠ_ÍBÆIDATý}ðÈ‘³ª‚ ‚ Hå&33­í­7€``ÙöĤÔó¿ü1ùÙñ­‚ ‚ H¥ä•—f5oÑDXzŸ@A±4°AA, ,AA‹1i`eÔO³V0H¾RÁ )X½Ø²‚ •—VFý4é?°â¦¯”©ÇD^2äÉCS_ˆ~ñÀ cškµÕ†V°ª3›C–/R‚ W¿–wì¬ÎOsbI.ä„3»Œúia.¢„*…Nm£šXž/‚ ‚X‹á°Ê†@ñá;ȱJùL/ÂÉ…ç;«¤eJJ#Dzìd‘s^{xIDAT¥?e*Y^|Y.2•zZ¨Iúu¢9edЉg­2Œt$+½JZ½HyŒ>25@­O"‚ ‘O`Kçþ® sÕ·x¤1­u˜é+©ª†2­ª4òâKGt-ƒO5Ü*j±¨¶ŽyªÔÇZL×¶ê_ÉÊž`º«k¡jÀieQQ>AÄ4†§e˜[>ÒAB9‚*6­V‰~ƒ,¾ªçLK²å•¦4" ³°|ÍUŽÀðCÞ‘d¨öO\Œ… rÅ`xŠPFäˆ:î±àÓZU|}× %YÌ4 õ¢yùW‚ Bˆeû`EÔè([X£ÁÂñ̪âGT5æ*ÓEIDATÄZm¶Z0bʼnW«Ú=Db*W7@A”åÁR.'"D¶®KkdúȇmeL™Ú&ÖŸ‰©”rôu6]íäèd¡¯­´ZLè&Z*!2¶ ©¡þ:¯¼S¨‚ Ujô詳ç<¿renø±g\M¬ë¤BÀjG©,¼òÒ¬ìÎíûöÍ7vz°k°®0ÐU ó‚ BXå@B ¬™ŠkA¤2‚{FA±4°AA, ,AA‹)·+½^jEé ‚ rÅPÎÀ:šw¼¢ô@ADGGÕ¬…{ó"¾Eˆ ‚TG¡ªeIDAT>¤vÕéü³n·§bõAh`!‚ • ÁºB» ‰dÐÀBA* ¢ã ­+$ÂA A©„Ù´Ú”›ê,®`FŽ«ºÑÀBA" ™ìœ¶¼+•}°Ò3ê¦gÔEã]•¬œpªt¥æ9TÍR#ˆ>»â*=£.þ5ôP÷`¡gO‡¬•ö­¢á†^Y•—UæEbŽ|!ØÁ¤©pëêhÞqükô¯jeî_?ZrýóB߆FH¦nèܸÛ&KD;v˜z×·óZYecµjÝçå5nÔH%»C‡ddÀ®;I¤ÝÚ¶­xüÓŽM‚Ée¡™µdÏŠ]¿´Íú}lóÛÏe8&õïnÝ{OV¯¬Ô[¬ÊÅ(Ãgý0idû‘#'ùq©jO…Z‡Äíƒ<±uÇM »ö$üsÙ5–·–Ø4‘#D‡cÇK{lð}øŸÿÑK1ÚIDATe@Ã{v¯!–_wÈIx¬+ýKf=|½$3»I5®ù­¶Œ~¼ë,sáïùcô±¿^’ÙeÄ‘ ·l"ç¯jeúxšç@m(g\Jz]ØûÕ˜›ºÏ QûV,f ¬ûßßASMSœÏwUøš) m¯« ®Ü¶@0 »mÇëïÞ¼ŠÇ§Nj˜©â:uêTFýt 68ŽkÖª{éÒ…’KŲË4gÙc?çïj_¯VVì32ºÿ×5áø‘³™)i QÿÛ½ºþíµÒlõƒÏÅKÇ·K«Wçð®¥<À‚Ovº=^()q—¸=nïÏöó±¡ý*¥s÷IDAT`]%wÚó¹s«ŸÉJ?ûÍŸ…òõçÝ-žÈ¢…`—øû¨ð³~ýÇŽnݦÕλLË<´,+{Ê_¹/_Œb&ÔF w=½h;OÙÀæÚY—>wK››omu¿¥UÀKf78‹Y )`]²h6<Ú!",›Hø«ÕŒfy~ý½^_¯N×9ãR a=øyÍØ›{α°Å#3V£ö­4å´S6RªÙkÇ;kÄ9¤Eý2¯q¯±«¢(÷Ñn£>àVÏi×¢ÿAªÈqœpÀ–ÏEÉ#Àó¼ø·Ný«y `×ÎA*)0û§OôÙ‹E)ŒÎ IDATN¶®“ª>üº9KaìÎ_öÄRµjÇQïûú‘›¬œ#Gô`ÚµtÔÀÖ ™@ÏÃ…ÐÀ’ZW«žaK/q¥Å‡4 ]–W.þ>š™™qà>wÞvèÐáÖmZ#íïeY§ü|À¨!m,D kwdà®j5¨W§ŽvP±[õX[fZ̉ŽƮ¾4¯Û½Ÿª–Ìzøõ_Û©˜“Im¢îØ¢|×É?KŽž·ý~1!)!,›Èù«Ú K³<ߥMc €å ùƇ—ßò´VÛedÖóŽüdO3f ¬C[wù=XŒ/>!®VJBÍÔø¨q9²œIDATêÔìùÓò·šÀÑ3>™7 x¸u¸ùkŽçç€ñ±b % X,ÇíÛÿ'ÃøÜÇãq»=ݺt ^I'¥9¢]t¹˜°C̽×ÍMŠšš»ã_ RóòÀMVeeŒ¥ãÛ%Õ©sp×R`ñ';Ýn/\*q—”¸ÜfÆ”~ ª)BѺ€ÕÏÆ²¥Ålé%×??¼¥°È ù›rsƒ•:r„sâß#·´º…ç9(*<¢ŒÐpùkI‹;&ïå9ÅÇñ-i!‹p͈_,QU¹ö±¨ð@+@ ÑŪÉAúÔ®ó~Ê´ƒ·Eù=X]v/«) |žÁ5IDATàµóŸÖ°äv 7\ëLmi‹nN'ž*Þ{ŒŽû6•èXR+çyŠ¢xžÎ ÇE@Þ‘Åøâ±GL. þ¯˜»¨OH=XnÎÆ²°i×A/ãs»™¬ëꜞ»p*þÚÇ´R‰v•P-ÆÚ¾B1c`Mn´¤æàu²À(šOqò7L:ºrjpq»|ݺ ñZ¡"Çq‚ÃÉçóO*Iû”÷l©"Þßã«Wç8îº&eòã«Wãs¯/<Ç–øÎøx_©·Ô¯*DÕƒ^‡OÔ¬q­Ÿ^h7zÁd87ŠÝ'ží0°ÿïuà ©&oÔiJ-kI'‚¾sÉbÆÀò²47`¡ƒù§ë(ŠâlKÛœ ¶“g ÓÒ5…5"ëdDzÔ­›žwü¨òlݺéB}|, /¬|¹m·,õ´2ëá7 ~ðÀoeQœ !ö½?B–öñ×6 ^"™•#Z62‹ Êì*Px°”ÇÊyF(oEiÍEJgÅ|U=dÁxË4ÂÆrкY£¤jö>€ä,€d¨pÍÀAbÌ/'t¹aÂ×±ê}Fö€¦,!øJù&0c`yXìðP¶Ò\8Š–¦|v–޾X¦éÊQZª°,KQTõ„ø„&× !Ò iÌ!êÕ²pIDATÀ0>!å_ÿ¦€®.^2¦0> ^j|C—½§Ø)W´Ý¹qß×/}õ2k箪žÆpÜçšæøÝ½ñw¨U+£hÄ}ú¢+‡уR–ÛSRâšòx/°t‘»03øïöÙµoÃøÆëe<^¯—áXÎBߕ҂1aÙDŽCÔ¯ßàpÞáŒú©¦%4·wÕË7õzê}ž§xJz-ðeX>ÐCa/ h`ýs$?à¡P«h]]Ù„h_7c ÀáÂ:Þ%SU#¨¢j7Œ™¦ç_˜;­«l&NjšE%½ d,¥W Ê…Z3Ê©’Øõ½e–x°¼>šz QXIDATåø÷þÓ¬q-†åÁs h€æ£€ÜW {ùŽ$›³“ªÆ±dÜ´Dˆ)–Ï6êòƒo™•4ÅÑ\ P6Žw^ô6 $Ф Ï'LbÀϿ쑞º9«™ôá@ÁÀÊH×Ü%ÁoGš­þØ›Íùyùÿ~[ÍS»V:eç/”¸_îüØÜv}'îÛ'D{ã†2°ÀÒ7&tÞ÷õ¯Ç~‰‰),Ò…©lIDATÈÛxéŽü7ççätûûÙ'…899Ýܯ=GâÇ²Š¥ãÛÅÔ®óÛŽ¥ÀòÏvœ»XRâzrB¯§Ö=Pz‰¹Pä.޲ ¶"#ûÖ‚uÐrÐÓË>œ:0åºÁŒ×'.¤ )‚Mä^S‘#DÁÆJ¯›Ì_³Î5&‰·|ä·•o4íóøà8hõX`sÊ:º‘[Wh]]©„tOÑÆÞkس1 æ¼n£.Ï k].yÉ=X°<çñú¶­Æ²ŒÇëclñoV¯·­æñú”i¥l¶Nk°´Öi)ý^ k9 rÈ=XZó†ZsˆZ•éãéo?]Z^åõ¥œ&§IDATqp©@rRºZòúTÖ'ˆ6–r}‚ì§2‚¾í%‹oÕ*sS„eP6KHQ¬rÑ'?ãëðñ)4O Ñ‚GXbEQ<ìûãXXpJ8à8Ždi¯×Ë( ­ &'ÍVÿ‘›îwdØóPÿfÝræ¾:sÌ3„áxφUá2°DÖÞíKô½ü¡ßººà^1ü½às‘ZWÀßûÂï=ñjj“~ùû>éý˜•ûÈImÁ±!zŒÈýF‘#Äõë78zìpý:‰¦%´zì·ÏÞ¼±ßcOH7à F­+1G©÷²SÀÍDÙ)(a†ž‚RFs(”{°Š‹k16Ç캗¯IDAT¶µÓZvùÓæÅÞâ<ÿþ´yqËŽ# ¸¸–h…ˆÒ”ëŸTA{ –hcɌՙDeÙj0A²tŸåŠ1ssˆª•yÿèÅãV %ç.³«ƒJ˜+ðùxQm©©³J5œ<ÄÐOs˜2°š°@<Í]  Öp|í>ŸHñšcͬSÙÚ=€¤$ÿXâcJ ¤´p`ØÿÇAÕÉDY`õØ|œqî«3[7˘ûêLá§pܺYF(òReéøvΫêüº}©ì¡ÀBë 7ß*±®à'¾ä–eó_n­uÛE°oÌÍÇEŽÓ›¹#¡Í¿ÆéúIDATúæVéCZWˆH¨?‰ãöÙ¡ÌÀò²vUn*(pù4ïü2»!¥ií‹G]¥uK»û¥µ%wÉ ·ÞÿãKJ9pyý!·´»ÿ¢Ç%¤ÒZ'. ×:V íåîäieg¥áÊ=±´ÎjížEÒ(^–OÉe¯•0Y+=[ù1cO8¢b6Ͻ-ÆqCVÇëäÇÅÄÆwÝŸÛ>Údû…ÑWd±"Ý…u ‡þ9vK³Æ'O‘î2ʲljJŠÿ¢’¾4%9((( Ñׯ;vlæ.*êØ±™ðS8vY²Ñ&)³§ä¯}J6Á§Šãy«¬+ b›´,«ÓŸø’‚O@IDAT|'‹xž·Üº’9[X…ÙºÞL¹õÉß-Ñ„4­‘0|pÐã£ÿóHŽøóÁû¾QDÑt(æø>¹´î?ðã Ä8â±ô`Ü™[½dú¯RÛ ü°Qº¾¸yö3·iíñê÷%D>fì‰î.¿‚QÀCOMHoùxzKõ$Ápü¨ÿ=±ZÔñ“þ)ÛÚ5’Ÿ,H¬%žÕ¡~ýpì0ç ð*Sr|T(îûÍZwÛ³sH-*wQQ³ÖÝÂia=ð°Š!õ€¥Y”òŽæ(ûU`8 ·æö¼–a‰M9B¤êë ¦N5ÿ©´\%¥£†3åÿT§,ZÙ9yˆ$°\2J¢¨’_ùÈåQåÿÈÿ'ü!)Ë|ù—2PQ걕Õv¹$Õ§R+jJôJ£šHÈ$bIDAT5CPí2—A£ ©š … U•/”ÿ:‚ bË>ñ‹ ‚ ‚ð`>sfß¾}¡SA"n¸¡f$1ñê@¹â!€ÐÀ|m1¸…¦¡Z±lÊÍÝHañêèÔé¶ÌÌŒp©†˜áÈ‘¼ï¾óo]‰ú!‚ É  ØÀÆ{ïª+6„ ¡ À‡.\=‘?Â Û nÊÍ U…«M«ÊBffFff”YZ•¥"!¤0°„ñcĈ¡‡¦b #F –,ù/ù£@Ò9;[õrBëªò’©°´"¿"!h 2ô ,–µopIDATaü>|ÏsV«‡ 0|øXºô#’GŠEy9¡uue™™‘™™áŸ:Œø~ˆ H„@bcž"ÄiA$¤ 6xÙ²ƒt!¼3sºÎÙG'ã «tB 6.JK\­ˆ&±q1úê £×ãxù•Y0eòx1„×xgbð /_anl3wU˜{ÄÑÂÇÒÿ[÷«ÇËx<>/ã›0¼½3.2\¿ò?ú>!÷oY‹ðÉ’HžÖ§(*ÌꉽNy ?33ÐÆBÊO…  ,®üòök]Û-l€Í]0wÌýc6lØPkä´x6ë»IDAT=?ïátÂW«'_ºTR­ZÜ¥K%â)!D8% T¢ 7„ªd³ÁH6'J¿V+õÞš9_è—Ò^«“pàÀ~Ÿ|ò™Ñ±ÍÄz©PÀp4ËÂàîÍxáCn<°¤4õûí~ÿ««2‰…Gøm«i.~ÙN $ ÑGµj‘™™hc!He&S„K>\<¦@£nÐ,ïÚ‚kg¾9s§/qÚ´Ösó`ýÆ :·¹øøjÅÅ—d2¥ñÅcÕ@•Ì¡/!ùo•b¤ÔQò…—fŠ®ÙìÌ /ÍÔ/Ý€}W¬XYÇ6†£8€o·ôù8/ãs{|¢+kìö «ûEܪŠè˜¯¥IDATìCÁRcK8& Ñ.ØUªýPßÒÊÌÌ´± S„ùùùµàP4ÊH\7m俢n·wƒ¡ƒàήݾZ¿žPŽ2D8¾x¡8>¾ÚŠŪIªÇ §Ä8 ÕãųZ!Ò@1$>¾š2 áY}ôÓJC„∅2¤†~Z’JÐ)—(Vš‘Tmi*­™>é/¼-ÆŸðÀôÞÖO%п_ŸO?û¼Òm K³,ßé–«)0™åx†Uÿô§t^OßU#3/´"«žÕO+µr´¼D:N#UHª¶j*Y-áªIÆ‘ÚX­+ÌÌ @ A³œ"¼|#+ºT?A3€CÛ~cIDAT°9oîân°Ã†|€ s3epÚ·¼¢¢‹â ]TtQ )*º˜˜˜PTtQH+ý+ËZ"Ò@¦ 䫯„èœUM«NZiˆµ®•‘¾$iµ²Ö/—jÓH3•è4ºäIúöí½rå•kló²Ëñßÿ|HéÁº@[¯†KÕ£tÕÈâ¨zqtDM«œ¶Óq)?(oØ©¦Òp1Y¨gE333m,ALaÀƒUTT4÷Rë1{þ„fºÇ¸çæÀ†¹¯¾ùêÈÖù÷\>kU¡–œóç.‰‰ â± \Ì‚çøóç.ˆtœ^Ê¥4¤äê:gT«a[v@IDATBL%–EK-ÉBZ1D™‘¾äiU³Ö*—¨˜Ð :®*VÆ ÓŸù _ÂÔçI÷õèÓ;çó/VU¢±ÍËÒ>Ú¶h$ çX¼,C¨®UREy–<-¡@™p Í©M&sqIõ!ÉNé¯Rú´tÈÌÌ´±1NÀ5X—#¿ûö¬9Ìž–ŸX´§hÏÏ׬]Ûóî»3edTËÙ2ºÍœ6&åñ÷ÏÌR”)È~*à 9% $fMRrõs…çeq”©†$§$ r„ce|ñ¬V¸l{e^ZšÌȪ³ªYk•+`YtÚHÆ‹/L0éâbal{n*é;§½sz~±—à<IDATjMèÆ6k·i`8šã`çÖð>m}œ–”`Vš°„*p] rÖÒ„u¥ì‡hc!"#|Û4ˆ:Ë?ú(ÿÚ EÏdÌôý™w–¶jÍ4$ñ›;L˜öÒÌi¥M˜s†DfAÁ¹ä”¤‚‚s²‰?!sIçÄãÔÔdÙ|"(f …<›šš,U@¿h$’fdíY­¬Å$Ò ÇBëÈâËHæûŸðÀ”ç^‡òC¡¹Å^½î^½zm(Æ6Ë_3aXšåø–M*O±o‰K}k#˜³úIHæ4¢#ÁÜl£€r›CdffÚXr¥cí @:Eœþ IDAT¸jݪŽw«0ms´ììÇÿýä¡1Ÿ«à¿¦=3fÚØ¾wZ*$­FŠx|öL¡þ<š¡Ÿ'Ïž)LMM–f-†œ=S(=+‹/;+S[ý´²©ªªYrVµ´Ê%¤ÕH‘*,SÕСð0yÊkB´ÉS^Ÿ HÖ¹Kéyw5k×EþØæc)އ­?þ!õ] îÙ† |jk°¤kÀekÃ¥gAá@Ò9äYÕ8úI¤ ¹ŒZ?‚X™YFÊ%Yäëâe»3ˆû5%33ÐÆB„Òm[ov P”ç?U”wùìœ÷çŽ}àÏU°jî´gÆŒìWó­OóE!´:IDATgN( áâOÙ±NLñ§2¹ª@1wUùJÝTÏúi¥!ÊÉt°ä¬V%¨ê¦•\yJYÛJ&M~U–…V !w÷¸kíº/#|lc8Šåø[o¾Vx‹Pø+“<𪔯 UcHëlˆ~ÊV©“è¦L®<% 'K¨¼ªÎ*,ÌÌ @ A2Mr—ÙåAþq€ü<€<Èß—(=ûÞì9øsUÞ‚¹²„b wu¿ó˯ÖGòçxYŽþð?ƒ€¢ü{5ðéég'ü‹ÎªK•zûøC¦vHBBºuëºaÃFt! Hff + AmŒ}ìA"„®]ºÀƯ¿Þ8Â!A¦Ä•…ýA¾Eˆ ‘F—;î¾þæá !33#33ÐÒBDŠEî±ÜÞ¹³pðí¦Mû*V¤ª’©fi!ReArEÑ9;;tÂ7åæJfff„./¤ò’Yfi!re³hÑR³¡ÚZAA¤ÊÀƒ%žQ7Ôz H$s4ïxE«€ ‚àü¹“ùç.N¡’`IDATmür[ã«3„}Ž¥gŽ )ž‡¿éÞ³}¬=–P8‰]Dd`!‚ ‚T.r¿ÞÕµKû&MŒÙðC¹_ïèѽ“…¹›œ"?f:ãà%“o0BšAA« ±®È£¢’y°´¾«"MNMÓ&>v‹ ‚ Hˆð±lÀ8v›Íò|+“%3d¦ŒV¡(Y´A$œ„È=áq3ãØã¬7°ŒMReh…È&þÆ×’ <2£G'Ž´åŠ b¢‚PU©jXr]È®¾ £™PŒ¬L¥/Gë¬iµ¢¼ñ†.ë–Hõ.]¨j¢ÓO%¯ÜX‹‰IDAT’¡«FÙ7¬UÆ*i:YHsq»½ÒwÝÙEâv{C¡‰‹¢(¾ 1P ‘6†ÔŽ‘ž%”@¨‰~„€q£éA§PRy¡Ê?bx©ËcNI}B¸Ñ(×¥°ºÂï=â%€ÄJ3Ý$/X1DÚÃe£—ô*{¾G<+½"T/RJáRs¥(Õ,tâ«Â+^Ï€JêëFÚEGެNôåÈÚW+¾, ývבÌÀlH¾V}–7Dw~-=ÉõãÈâó ‚ÑG)\Œ, ‹„U¤:¸[R^p»}n·oô}ƒ…ŸïÎ^&Œ¾o°pÊíö‘T‚Q"q'w^ãE<Õ@Ù)¾nÉ%!?‚ˆ ‚x´Dš99ä7zÕ´ªO´:ÊhÅY–Ddrd¶IDAT6®ÒÙPx˜Ñ©¥†²ú²¡®«ZÊœri†zHú³¡z0}]舒b¨¼À0Ì#ㆠÇÿ™¹ˆa˜ÿÌ\$ü|dÜ0†a&ð*x0°xµù8‹Jߨ%Êj•¥•f¡4‡U51Úod •r‚¿Å H8‘=V:(mІžàyäŠÆŒ4Œ–WÕ£€„ðôçÐab 6Ú?ß|{!¼ùöB1•,Ä´ò:Û¦W˜,–Gíº& $¿Ãê„KÿÊâ“A*âШեCýä`‰|Ùè^QO;Ÿ¸´¬ÖI0e Øè¡V xâ}y OÈæˆüz,*ýk©Lû¨<(/IDAT`¯1ùh!‘ßÉD ^²èA ¡Ê/¹‚blVÆ—J‡s}9ª”×_I¢¿ô”ª|£P’×t¤Çªzê„ëda¢]ÈѪ±,JùZùjw­z#T5`=èÈW•£U^ziÿ!ÔÊ·—jKôµz“Eµ jýhµrðå=WxÂDy-$ ¬(¡¶~кB*;$>Z~n(¾Ñë…DN0ú[rý*CrL˜‹Ñ´æä˜¨4CILT‰(Bù$!O…´ÿXuÑY¥jˆjdåÑ|IN)ÏŸ;Iž](ˆÄEî‚TFdOœ‚ ¹‚½–y°H¦Æ*vú,`îAª‡“ƒHc0]*IDATû?‚ ‘Æá#ÇbI¢YžudMêØ(Zäú!JÉZk/HtЇÇÏ<#‚ HÄ0hPŸ?ü_rrrÀ˜……çßÓõ”Z˜{X:3 ÊWEHB´¤\5iXuAA" —'&*š¿÷¾{è² •l4EÑ´Š¢‹ƒ¢hÑö8s¶ˆµTc–êûZ? CD”¯X…!Ç’ô] Q1ñ”~:±AC–ò}K­×¤ïp ?„ï¬ò™!‚ ‚ˆ„vŠ0tï©î„A’¾¨R>ÚX‚ ‚( ¡%sùX.Ÿdæ.D9J³¡‚ ‚Dè;°nž IDAT„ˆÞ‹ÄNRöýža‰íeÉvÉRÕ°êê#¼3˜ËÎPB1²2•¾­³¦ÕŽd"§D:í¥ÙÚÜ õ^i|kõ CO#/_~S|^íÛZñEt’ˆýIý»ÌM%›òS•,]/Pm-” UUB{ ©ì(—Z%Ùª}® ˜»³[õ¶¾­³„¹W®[M%RUеï]ßd:ú˜n­´ ©ìXö±gý òUê x–$ÄPFÒeøÁA*²Gñ™Gø©|˜‘…‹Éµ~@qÕHù#ë8•Éõ'®L¢u Ô^…!©}eÀx»%M¢ó©Ó¾ ñ|KØ3ßløIDATîå“ô7å)Õ¬µÚKÕë‚<_© JzÊ\¿ÒÒGU¸´𾾬*¯~|£òÞg(Š:qòœ‰òZHíƒ%ÃòGçPÔh°#•eÖºj”FƒÔ=¬zCWQ(‹–ijé£u¬_«®k­ò­£íB¢”·¤ GÒ¾:ª* ¥,¯¾|ÂþfºôQªa4_­ê2mî¨ê£zñŠV¾V4ùª¢tb,¯UíHÒO‚¹ŸXHäX–+¡¶~кB*)ÊÁ`0''˜Ü¥Ï¾„b Ýu< &Ü!b|UtÊb9²¼T*r³Àt»ËÊk¢&•ûy.†Ê†~e¨~L÷OQR­$¼ŒIDATŒöUøFå“<`‰5laüHÃä[„TùIß ‘L¾ÁD2>‚D&¢ã]+B¨»º%ò•³QÁË4§_†ªZŠ™PØtõݪ³6úÒ©<¢V©@$ÔC%ó`‰U¦œjÕ ‘&'|b#¿³Nl#Hä£teñj+Oµ¦–T/@1P¹æFKŽ*åÈÌDýAíîÌ´©øô(f$Ú[J=uÂu²0Ñ.:ªÆ×*‰|ýöÒ—¯U.ÙS:IûBK£ùÊ h¹> Öd´¼¼ÒvÑjM«Êj¹kIDAT«ߨ|’~‚S„ Ê/a“Y6Z!:ÒtòBƒ ©²È:¿êµ sŠoÕ”4<ý-¹ð •!9&ÌÅhZ’ÈʳúJ_ÏV5¢þ)rL4PðbBÕÕÈÊ£ù’œ g|’~R˜üس2DjK­féYr â)£÷}‹J&MÇÆ’ZÇZEÚ‘Ö´f½bÔÓ†„lË1ù±gUËIi!é»—´$ÒD+XÔ]L{Ȥª—Bv¤*`ý¡êD¯¡äJSFŠÖ¥!2€L AA*E%ûسÒf²<‹€à³"eí—›+ZADNV‹›*VHüØÛSƒÉIDAT³–ûJÇ#¥\õЕ… ‚ ˆ*&?ö,¢óÞ©ê;–†$(Q.”-·âo«Êr—y¼ŒN#ªÊÇÅX‚ ‚H±ìcÏVEm{…00˜—œÅpé_Y|´¥AÑ'§C‡þÖ æ@÷‚ •…ž=:U´ UšªVÿU­¼2"q£ÑÚ+– Gë AéÙ£Óšuß/Ê!ŒdB1²4•lP ¾È„-²êàgN[ÕzÙDF:Idê´—UúX^:­,B‹µ„¡Z"ªåÁB$ Òq×ÚPKn¯„BLç¼’‚„5ë¾þ…í!žÄ¼Å4”„k3 Œþ:l^r3IDAT M´¾4K0‚,oØ–7òµ –y°HfÊ*v6d{Ò`ÔùB¤²#{Ê~ª>.KY|U7†Ö3·4<˜áGU¬uâë W&!BdõŠªS XŸÊz#ô(#èë£ÌÔŠoÔ…¦UÞ€úˆ²ø¦Û‹¤ÿK•C,qû™.¯~üö7Cב¾ò¡ÐóÄÉs$*…ŽÈš"Ô߈A8Ðß ^¢*Yÿ½EÓv~0©Ô¨º7TY øSˆ¯:ð¨Ž|Zwê 5—‰UëÄW%˜áÊèÒú ¨¿V}ê×›ébÔG™o0n ¥Xõ£Z.Óí¥ªêE!„+-ùª¢tb[S5IDAT,/aÿ1?`Óï`oaÓ³‰ +à—¥Ç¦?ó0ZHHU#øÁRŠ99Áä¾F{NK¬¡û¯ŽGDÇ¢jäiÅÔÑǨñ|;êë£G§t$‡‡³½H0QÞ€¢¤µŒö«ú›Q=u„‡úº¨L~ìYõ[ÎA:™BñŠŸ˜)ù& †>ó, A'RÑz2®,(Ÿt&17š†ú™E…ëc”ˆj/½¸Œ!ÔñʱäfýÐ(¹ ¦ƒ€ò'ˆ?¥fGÀ ¢¨€–LUiy•!aÒAB†èx׊êœ%ò•³ÁË '&iµ„WºŠ ž*íifIDATXdU‚œÍ[ÂHh/jô詳ç<¿ren“'= =·)7·sv6¤gÔÅ„šÎOÕ×Ìâ‘|àYK¸j¹X(?Õ¨:)M+†È$£ëŠähÞq\Âñ¨QÃáJü¡Öƒ£ÖÓ¤Ñpé)­ø:ºéËQN]Ô_KB•L(©£leV)TëM+¾¾;A¿~Ö”_JL.V=¥Ñ¶—ÎT %ú(ϪF–V…–ž$ótÁ”—$>¹|Âþ¦#Guõ•ªdB=Í]Y-nŠŠvEÑe^MQ4m£¢haH§(ZÜÏœ-b<%@†`-Z´T^™1?»sû¾}³ÇBÕ±ßIDATBËÄ2)C–N*}Uõ£‘(/øÙœ+*e`Cåg¼‚ Q£`[RÕ**rÊ[áV-rWbnëýT–@²E]øÕg²ÇÇȹ½"6‡Q#U¯¢ªZyu0ù±gåÊ*ýø"ú;)€ö›}Z Ìe.(UÉRÿS@µµP&į>#ˆ¼±^ñ`#9–}ìYõX'~@áÏ’„ÊH´ÀÀŠâ ‚ Re‰ÜOåXë ÃDº¯Aˆ\Ërc%ÔÖZW‚ ‚D®… ‚ RIAK€ó‰F'ñMCA©:3°"ÊJÐÿv¡€N­8 ¶?ÍL–IDAT– dàn‚ N$lÿNªZyÃŒ1+r–é=ªä‘«Æ1”DR… HäcÕÇpHäF 2¡Y–Jø)ž"—fPYueÈõ4*'Å µš4¾µúX^:­,ªŽíº~kIü ÄØ·EkCéþ‘†PT#€d×+ä²L¥èX6$›¶ëSkû ÕÈ@V^@'RI J¶d%B!¦ó²ê#µÂ?C¨õÓÉÍaífWÒÚ°\ýS_šµ­¤¨PcÕžÀaî·Öö‡bf£QŠà32$ÉQÈ’ëDˆtÓÑ0l `ô£@H¿:'þ$ÿ¡ìca?h( A’âIDATæv¯³Ã8¹þ$•IÄcU9úV#è(Iò­@Õ"ËõõTEµ?üœœ2PçƒqJ•tô$韪ß æ…Á—W?¾Qù¯/iyî¼oú…¡ë·µ%¹_U&?•£º¼‰ÄÙ#…äs¦Qšh!ÊH tV!• åýNËè驸´ðSˆ¯:°©Ž¬Z#AšËÄ*uâ«bâ [u`“Ö§¬nU뇤þ•õ¼a¡%GÖ¾ªúÈ⫪aÚÜQÕGµÓ áJc‹D¾ª(˜ËKx½¯ÚÐ2÷³N?'ÉWZ‘Öo ûCÅbÒÀÒr8)Oi%1š<*Ä™„^+¤²`ôÁQsr‚ɬò¸IDAT}öLœ–XCöœŽÇEËÝbh$ ¥UÉ:n!rÉ:á¡®O}T1QÞ€¢¤}ЉoT¾¡‡Czj=H¥…¹ß’û±gÊøgµ¬œ —(3ŸR"M‘a‰Ã£ÑzòÖÁÜhhQÙëÓhçµ5ê§­òòì"1³–` ˆ6ô§2D™DŠÎ)-dkäõÕ3GõÝC£–Ÿª|´´HFœ€ÐŠÌ, –ÈWÎB/Ó„¡ÈWKf…”1Áz0]!ªÀ û­é«)ú5zôÔÙsž_¹27wÓÖÉ“žÛ”›Û9;Ò3êúc“™bIX˜iˆô‚rÿIDATG«òr4ï8H®áxÔ¨á°öËͨX(ÐYŠ¡ 4.=eÉ"\™’2™õ×Ò‡P%U%µò•ž%ьԿj%˜(‚–%¥§t¦-ÑGyV5²´¶µô$™§ ¦¼$ñÉå+ëÁÐug¢¼PqýV¹€¼?dµ¸)*ÚE—ùql4EÑ´Š¢· EÑ¢åÌÙ"ÆS¢¬U»hÑ¢¥â  ðÊŒùÙÛ÷í›=nìt–é€å9F¾@$œT)+pZ©tTµN[uÊ[á–)Brû ü–Dä­+䊧gùפ¤RPE¬ ‘ªVÞ $ØEî‚ xãF82¦ÁIDAT±ìcÏ„ïZ• æ¤z¸ñ‚ ‚ ‘åÁÒY¨$š/Ò—ò†¨JÖ‰¦¯ƒ>ª;Ú#‚ R‰ KǤÜì€$„P”,ZH‚ ‚‰1KæûÑÿI"ºo!ËvC%‰,Õ„¼8èÄBA X2ÓAu‹NÙ)’ "ø,!Ÿ‚ ‚ ˆˆe‹ÜUw3·\²t«t­ýä&fJù¸°A¤ÒQÕ6©jåB¸Ku]¹…ÌÜ…(GéOg‚ `ч„Ÿ¦6ýkC ¥{…ÁŽÛ¡FUŸ€‘­ÍD¦N½Y¥å¥ÓÊ"Ô¹\ñTºv''´¬fmÇVIDAT !ÜúAfÜèÏÜYb{©®ÐB+éîµ¾–Üõ…˜Î+x%•"äv/ÃZ­ëYøg¹>&ú¡¾4K ý Ë6"|ëö°µ{ø1àÁ’ΩɦØT Õ98ý@ûÍ>-7•lY˜ªdéz©€jk¡L¨ªÚ[HåEöð'Û™ð›bªîó‰áÁ :ß44ô-ŀ•IÄc£ßRÔª7å)PÔªŽþ†ô‘)@®j Îò”*éèIÒU¿3Ì·ƒ/¯~|£ò^GÒò’÷gýz Cÿ$ÑMú3tíŒMj­j×:Ö‰PxÀ³¦wXЊ&]†|q¤r¡¼Oi=ÊÑ-¾¤IDAT¾ ?…øª7>ÕWëΤæ2±Êcøª˜»}‹µ'IêM« ©FCú룬}dñUÕ0mî¨ê£Ú9¥5Lh£ë‹Ò‰°¼Á´¯Nü€–~ýÔ©·ŠíŸ¡n÷ !‚öÁ’a­7( /ý¡û ©¤(”ƒÁ´9LŽZö™–XCöœŽ'FÇ c4߀FžlLÕB^ŸZ1UÃÃPo†z‚‰ò%ŨÝo´}ƒé„rô““˱¤’¨d(rdÚU"‘k`UºÏ-£u…TR"ßÓ®ò‰9`sws£i=’ÂSo¡Ãh'7Z„PÇ7*'Ôå µœÊND/rG$lˆ¾w­ÁWõxIDATÌâ‘`‰|å,dð2#+¦ ÁƒU!Qõ@®ŒþMÆ’,"jô詳ç<¿ren“'= =·)7·sv6¤gÔ­ õ*Œ€ó}F'q±Rs4ï8H®áxÔ¨á°öËͨX(Ðriy‰Œ†KO] PŽlªbÚÊ\B}UÒQR™»ª|Le¢Â£'‰>:ú[®ò¬jdiiéI2OLyM·¯~ÑTE‘ÈQ–×\½ÔŸ¼*$„®ÝOœ<튢˶±´ÑEÓ6(ŠÞR£(Z|_íÌÙ"ÆSdvÑ¢EKÅAAà•ó³;·ïÛ7{ÜØéÆ ¬ˆ² }Zp2 ôIDAT™„ðËÐZ™ØÌ=¢j1D•2°‚¡òÎ3F>X·ARÕ*0ÌåÀêÍjqSÅXA½EXú2´2 á—¡õ3‚Hª©pz–½Vi÷ÙÊ‹Q¢CU«À0”û§>ƾEdßuþ{ïåGqÝûîž4HX)6\;è2q‚!ËŠyÜ A°A‚$œHtd –Ö]Ë>^~ü|×°dÙÂFDRŽxúœHÄ6 1+8Ë"˜œE›—žHD£1²˜ßüæ7Ó÷Ö4¥zuUuuwõï÷ý,1ô¯z÷®]ÕÕÝ»wUW™¬”ÌE€¤‡§ÛV+CKq gM1¹9¥œ§IDAT29Õ¡±|!hop‡õª„ Ú§—‰FM–=Î\)YºÁ®È„sKû„PS^tŽÓ4H§hÏÎ¥dŽsʃ袔‘ ¬ t,Ž–òÇ·¦èU“+ &!jt,yçÁrXöØj씃%¡…ŽB³EãÁ2\ö˜MÑ/±ì°ú²íÊÐæ2â*UFT«S#¬tެxéO““]Ra•~“½z T±E›Mô@C§q'++äL+CûÒ–ríP¾Ã1Ñ“gE‡u?¸£’Ÿé®œ&UˆÔæÚ•"'Å•WÕ~ô5€iIDATÂ~s·ºšXy¿öÔñêÈÄÂÁ2÷Ê÷$¼ç¾B ‚s¥5ÏŽß’ÚiÒ¨)ï›úÆôœHQÔ5 é®®î.Š¢®$E]iXäíwú‡?ñ‹Ö¯ß˜>îþ7–™IDATÎýs.»dÁ‚9·ßöíb,6œã×Á•KSÌÕ’ƒÅ›¦H½41/Pk:ÊÁÊC}ûÛƒë?m!— Dþ“~ÁùT­ƒUà,ÎGñ®ßd´{A9²?¥nÈ5£ŸgãYX Ö¿m„R£$¨rhƒÓÐ w“hª;2N+Ã0î €„6¸!Öšëß‹I– ,¬øøŒã¬5•¥ž‡ætt¹ôË>U˜Šëã“jf»ü2ÍV!(5 ¡,ØE°¤}dšm|¦ò̽Î3,¨ÄRŒ|tWϽ´jðøÍáj °›¦¡LüFƒJèÈCø <š\IDAT á:Xµ[nÞ‚äàÀÉc&L8åû?xèìSØôáá‘în>º´cç¾%7\14èÓ,öìù‡ætÚC'³¼?üÑ£WüÙÅ3gNËT5yòî‡Ý:ï*Ÿó·Á2ŸaAœö“²>QÔÏ’ª:0Ó* ªÙÞèL|M’BÆk^9dgu`*Ì%÷T}4ø4ÅÒ£¦~г_ZÏ™Â~s7Ñ©i¾ì)aæE·íƒeæÌiFóèÑ Q³Ùj4ZD4Øl6›Ã###Qÿ‰i½O=ë7ë€Æ`é¡KïY)4zmsóG˜¨Ê<°=†ê(ÓmIDAT°WßOC¼\J9?.î@N{w2ÌEå‡U{cdÓ5õc^u…–Ëï[U^ìq¨Ã„3ùË[å‰b"Š£ãÓŠÂ.‚¥ŸJ3£º&%EïeºMæÍÎö‹Bq©ó"ˆj÷rœNM—ü”}Eyi˜Auá³éy®Õ2YVö›(I·UsÛzà­Â ªú´:_©°mäF_®ÔÃvEÆõ¬·JU^q—*Qõ¤³µÓäúbdc†E–f—³¼zy[ý™÷‡Ìv›Yd|Q<êh%ÇçcY8Xú^6:¾S÷"3ÅÍ%]CÃϵøR ÖH¯hi“VÝ yéö^öIDATƒAúdRÝIsZ.^˜Üvæ­Œ#ÏãMe§Ô“­n)*ý¶çËá¹nu~ÍÛ•aîR¤åbË«ÉW_ÎíAjô¢K(*1~©*dfy Û­¼ôz4i·ªòŠ}‡Þj)É‘(ͧÈGv±c°r^!Lî§% ¿‡P ÄÊ<¸éÉ“{¬ŽI«ÔZÝš4 M¸BcUæÞüØúFEc’K¬è( m=Ûæ(M/§=˜gáPÞLU,¶mOß’óË«öz´³j¼Ø³>Çr¾Ùø}\P4‹ pˆ|¸=íl©i}VˆUd± |ý —ƒm]Ù¡hy[=ªòr‰‡ûÌ_"&Uî2IDAT rÑÜ(C ©^¼¨ i_%Pôk’ýb/U~9‘Úà`XÝßæUö¤é¡\2^ü”vª‡z,ö,î•æ® /‹á4½*Ä¥&ÁßuA eI¯MW)®qî!*^z¢)™z87ÑÄ~’ÝCòÄ¡Ó; —.µ“»upùZÝTõ©Jgï„â6)nhR;mϯª\^ÞTõå2ošzðbÉêPEgÙzÎ|hæ,¯^ÞV¿X†í6³¼¢¼8+ù|=8¢0¹“¢GL³­‘ÏTž¹×J¹•*.ýËÉ;Û@°˜´jMS·’÷Õõ ºm­’Ì{fN“¬Êåчú4¿m>ŸùIDATÛâ«\EÛ#MÑ?h¼4Õ®2å 9ï’.„ˆýOí°&eñû‰«øÄá+ÐQèƒÐ€"è´Ë͹¼“&çR^~ynst„ë`yo4å·ÂNk÷ ÃAƒË¡CïnüñO¸ÄK/º(”.B€Ú1iÒø/ßv#›òÒËû›C­âr„ƒ%'³›Ã¶ý&@UÈ#X^T\ŽÖKå„ã%hŒÑ|ü¢IQiÖgdX!• É#X¯5›ÃÅå˜ë+ ÑÏÖÃzQœg£JqȈBª¨PD°.,.G»µI˜0CÒ̹Âj`Õ¼5ªÙhÄ/Ä< ÙIDAT5è=*îkÒLgΤ¼„ PòÖÐpƒÜca’4’„Ra•€8…šêp@&†óúòxœ#d¡Ón×U^õW„Eá8È] ꘌ çR Ç9¹Ázfª(T¡mKß·@âåŠ3w2Ëy`*, ð'„ð“Ú™)ì7wšúôe÷Ò©²(:—Ž%ϼþºyDÔl¶ƒCD488Ôl†÷¡*à$îRb{xNÄž»¢=w\Z ¦õ-6y{1óx §¡’¶—¼ò×K~“4ö8(÷«­ %厩V–}=’wš¶<†—¥ùBBn–˜|ôW»[%À¹;jIDAT½ä¤C’Ÿ\È9Ýæä¥aÕ;=7àÒùJ‘Ú£ÉZ#¯W.ÂÞì§J’ºž9aUU[ÙÉe¤ÏWo§¾P¢I;MÚ'kdλ½¯òêåmõg^_œs/êñRÞÒÚ­‰ÁìÏ =1󗈈oŠ~qq°TD²ó‘¤HÏYŠsÍJ¯Mû0¹ÃJ¨í%ª²ž±}ªœ.1ý sKîɪzä´\=R=q3/L_—­4_®’5žªžY;=ÞdD3Tùjì÷’k}ªì‘VBÄ|~dX-zUÉÌòÚžGÛëKuéÛyÎòVÞn ÛCµøì"´Já|é.qC£ß9w=d¤°2IDAT*IöŠ’–%¨Ó €ñõ#nzòäξϪµòçDa“{”ô½Qš¯þᤲÊö•Ïö(ý­£„ú,º¼™ªXlßlÏ£óy}#ëí)¡Ýjp¼ÏDDtÜGƒEÂW„¡ù†,~m+¹ö@‡£zó® æ7÷·§µi­æQU—3RB}ŠC…•þªÎ»æ#¨ò–MÄþ¿@S»ÌEó¿ú‡÷ÃW€_Ò¾J O/ž ^ô‹½ùuæA]Åüú¸•—½d:­¼*ʬ‡Ú­þ¦d®§°!àb(+–&äœU¯„4ªÄvGêõHÉÔù‰&ö³»¤úm‰Ž¸™É“ÖIDATFÄ5ùJQɧúE%Òòæ±_ºÍé×Û©25¿=$+/' Šn²çWåø*¯íyÌ”çêAuiôx)¯Š¢Û­y{8Üw@<úØqDD1Q…ÑE¨Çć­¶"3w[óêÛ¥€®UK¹¦å[ÉûêzànÖ¥Ùc¨„}V™e•h¸×Ueú:é¾ì‘¦H…Mê_Ÿ¯É®2åM¹>‹üöhvyl·ú3žÙDuDÇŒÿWä3Ü¢‹°ô1=vot<\¢ôXé{Œ­ ,¢Ÿ@'ý¡P :í=¹ÓÊ+!"ŠbŠ ¯‡€ºͽ«®•°.”>¶¤Ï7píBãÕ½ûQí¹ï/ÆIDATíêêêêêJļgmç`I{»U? SRô¡Ìp‘Þ£Ru÷ª„¥]ÚªÎi5z¸}=jöûyoAyå7ÒzviO–¤/‡\ƒ_üÞôòhókI4ºìL-Çá\˜O<äFþò–F}µM4Êá½BÃW@µHà Ò×\ÍDqÒðƒfR•4=ÏmT5<ÀÊ~åâ!Vn“zÓÁ0Ã|I(Zæp f1zg’¯Æµ ݙԧ~‚Cñ¢I;M®#ÖÈ4%ÏÉÍ_^½¼­þÌû€ê38Ã5³£lIDAT°¥´Þò_)~ ×Á”‰xW9=\"72Rzã“>±|}h¬²Gµ­‘—⊎ŸµØ°Þ4ªÌÐä+¦ëåMlÓx ™OÄœ¥Ë¬OMýK‹éìîHí‘^\l 1<ËzUÉÌòÚ¶OÛû€ê¼ëÛ÷SSoâoèSÔbI`±g œò„‰ø¢™gw$OŽªç´J­Õs]ɰ ·hìÔh°=;b˜ååìq>z§ÊäXÑsc4^©˜XÂy·ªF‡òfªb±õ_mÛ§C{–îµµSZoú뫊`i\MpR“¢Ò¬ÏȰ­ç|­ To´uÁö¡N®OA[2ßø •X=6¤QܲIDATÁB/¤ˆZ‹*缇í9²-BÑò¶z¬Êëv}J@ƒÜ5Õ1Ãñ"f’}ŠCFäE@ ¤±w•@Ñ7,/ú9%!Üd¥ØúL¯ø™‡x¬U/R&Áž âèÀ"K)´©äÚ,öœi'®^XµG ´b(‹½¤‰$‹Óˆéi"ÛáåÐE•©‡sMì'Ù5ž§Û”}åã^ÿD;Y•1†&±ysw2)/™_«úQ嫪*)ªzVÕ§Ê®P™å²µ‡díPE_ØzVÕ’¯òêåmõëÛ¿¡±¼šzÛ•XW%SãÅž‹†3•58|ãpFu]g&:ÈÛ^GÑéÏ@IDAT&zòØïåº64†}0ØêÉ”7ÉÂö$:â«hVJ|éËiо%X™ä±¼ÞåM.F}&Ê¥õÇñß6T[5^ìYôykÑ…@»Â½\<Òi—U”·Æ‹=‹Ê ÍŽÚâ|P¸@ % Aî"&~’øº\ 4BYÐPÅž¥y‰£,Uã.ÅTªŒ4¨lÀ[;8Úg±çL ™bì0|«±¨,ávú 1á+H1Š`ýlËÓ›!á§?å7ßð‚`ùÃs§Um€:n (‚NûP©ÓÊÞ¬kæÍö"S™¹ç4U@:MIDAT¯ÚÒ>^îòìDíùÅr˜ sGE£Ðñg—0WŸÔ½°ßÜ­Î+ïמÒj»m|—ªÊR»ónNX,½Âî½fÞlö—(=ö§?e’—³ŸôÓÇŸ‚ÚÎQð¨Ùû<éEä•ßÈH±.jhC6ýÚÖڻ=íP¯ÍïYΩªh Ë[UAJ;ïåSìLîV˜{W ¢Ã”¦ˆî”y^úhc¸‰N¸Œ8% —ž®šB…„Û›žç±§ñcÌí7Q.¢ÿÊXš¨©R×§¸Kš…ÃWÏÒónž/‚bw9×›I;dLSÜÚ¯òêåmõg^G‘b*o“JàNô’)¨}fZÀ1P]IDATUÚy/;+õK/DÿÓ0%EÊŒi#ÎßJ~j"XÜ^óâ$ÂEuD¼O©œžH±,i|ü½¬˜ô‰«zBä´º^•F2³¼¾Î£ê:R]/úö`’¯toÉí³èó^ –ÔMaÄ’IŠ3*_M¯Ù<_ÎT1B_ ´â kÜôäÉ=VO¢RkåωÂbôEã[pwÑ$ýRy©Iz{4¨$­ò•âPo{¤8”7S‹­ßïë<ªäU{­ìÔ¿Ú>õV9‡éW¥ÛEXܘ$•ˉMçIDAT«gâô°c¶¬<$±8ð±@~¤]þ\ŠÛݼ жß#AÕ›¶Ü!xY¨¼­Uy­"L5jŸ¡Q ƒÅù=Åe$ÍQEžš4b— n¨;±lÌKјýš^ÈÒÈÌÓUÚ!Ô÷MÀ/Îõ§ó·Oç«£Žç= Aî"HúU`i^›>mƒÊŠe#Xõ] ¢<›ÈÞ^õz¤dêI‡h˜ÛÏî’êw@šoĬ‚ÊnKígeÌí·Bem¾\¥y·‡dõÉ ¨¢,ìyT=¡}•W/o«_ßN õ˜t‘WÞ>‹;ï}‡Þ4Ê5FšŒ/ñhg¦m™ùÑÏ¥¯=•°IÕéó5ÙU¦¼IcÖga.\Nû´º.l-á„÷è}ò¹O_qÉÌ™ÙKqL}ewï“ÏλÊg¸Ä.‚¥Õ®ÚÖÈg*ÏÜk¥Ü\!7Ÿ\‹@§Á½\Ö,;­¼*L¼«D¬÷©gýfÖD£,~£A%tä!|:œx”ª €÷i gþ+"_£ÖÕs/-"o=ÞoÓEß÷ñ\ic^Û÷FÕ&p±9ÜËIDATa°1”)s¸nïù=È F3Sfܸïùzë"4ùz³Ú/3s÷8§B`` 90Ð\pí¼d#ýǦ‘oXc°4.K4ŠU »Kú1§• âǨŠ÷oX<ŸˆnX<ÿ½Áä—RD¾9Xz§'?ËÍÏ¡IqȈ0” h#Öê5$ÛKoYÔh´–Þ²(ù¹zÍF«Ñh‘¯ƒÅ…ˆô? SRŠól¸ð•á¤g&Æ#ˆÀN{^RÞ¡¡¡¡¡¡{V­O~ÞyûÉÆ=«ÖRD¾"ó‘6;õjfJ°8GÈR¼ŽbÑÒIDAT\8ª747±œ¦ÂÒWM•žö»Hë!SØoîV­B<_~ñ¥M“E­[‘ÔþâJ”>»W¬\—&®X¹.f("ßb»‹kñè„ý¬ëVt³kƒf @&\ÔÖ£f/w1C%Îyå72É]õ2Vßq^Úƒß⋯úíq(¯^[þ²ç/oihÊ+M/§D‰ÅzZÅQà4 låäcqÊ ÍŽê|[À„èøøÒwýäg¬øL„“O½ ©¸xT‡‹ï%VסÊxZ î¨.7ÜôäÉ]z«Ñ«µòçDaÎqÔddg¿êvj®Í<=³ óu¨¿vê…MΗíãÀá(½*Û÷ ¼­~«— ç÷"Í5«’Éy]T‚]Kó¢ ݶz±BÎW¼IDAT°Ýë|…è/lö/'ø¹À Õ›q]P½éjp{š‡þÕ¿œ|C&´óe‹Ãû¼•þ¢åmõøjÃ^®‹W÷î?~¬‰˜ƒr=ávú½ËFq­¨ï ‘X6ö‚¥èïE¿¾—¡|Ü:òˆyG•oåu[2V^E\§y2Ò‹-\8Ƈ&Nœ˜©çС¾E×_7<ø^¦¤9ÑÒ¥ßXsï77mêíÝú‹¯}õVvßÖÞÞËæÌ!¢ÉS>â1KjG²ØszE$Û7ß¼„ˆ÷°Õ6<пEshLÕ&€9yÌ€í!ï¾;R„% ‰_´~ýÆô¡p÷wîŸsÙ% ̹ý¶oV` §IDAT‡Á ìûÝÏ·<3cú”¤oYˆ‰’—µ8¦;÷^uÍ%ñíØ±ï䞓ʵ€ éûíÀŒ“ÏœòûUBäà¡wlï´cOÈî,o–ÇHxAdænk"Æ€ˆzŸ|îÓW\2sæ4ᩯìî}òY"Zzë¢OÄë ï34ÔZ{ÿ#gž9¹jC@ˆ8Üiç]5»h«ô„u‹×»,æyJ?Q4.gî61® ÔÃk>‘ì}êY":ñÄBÖo ¦ôôœDA­ ÃáN[-9XúQoš/oSÃÙôÁa´†‡¹”ËgÏþç§žâOèîN·mn“ñ¬;IDATõ!q°œ¿üw§•Þféø;m…Ø9X\ˆHÿÓ0%E?1Fæ´†¡¯LUì r™Æ#ˆÇ­:÷Ê+ˆèòÙ³·<ñ$›~¸ .{0iÒøC‡ÞÿVm€ƒt°wZÕm–‚¹ÓZ8X™½lbÉ$Å•¯æ}ŽÔåòhÀ;mû,ölîè`±gà¶m¬X¹nù—o!¢»–ݼbå:Õ!ƒM_#´ê=FÝÇEe­ã¥—_“þõwRÊ t ì6¹ÍÑŠ•ëÂ|:‡ÛEè78„ÅžA™$>–Æ»"¢fs˜(¦è¸O¨*!ªô™{ šcþ—^xQ³9|é…5›­K/¼0ýk­Èƒý•.GíÁ?ËÝè"†˜Üf«%\Ë»ï¾BÐNd^ö##ÉB¤!´¢jm¡òû}€µ9!{W²ƒ@{ƒ ´1XìÙB §~Ю¼ºwÿøêgr'IDATñF˶¿ºw²±k÷Þf-‡ûP»vïýÀN©Ú .wÚj +‚¥Ÿ—!Ùp[‡G:)—4/g? Ëæt& Î߰ᡉ'š:Ô·èúëÆiüŸçw¼ñÆ¡¢m FL™ü{WÏõö;ýUBÄáN;<ø^ÑVé ÈÁÊ\Ý6I1TÅ ÀCVLš8nù]KmºâÏ>\„1ÔÓª6‹ýÖÈ+ŽÚ,öœÖ‘2ìÇ4\ì™KA TëÅžs’i€UÌ t ë×o¬ÚRãÅžõÓµëqóDýð±:–ËæÌ©ÚáRãÅžMzî2 sË‘ý™Adr¨IDAT.ä mIÐs暸e¶«>{‰9IGh$XD°Ø>¸8޹ŸzùýL ¤þ²O¦â†…I5‹#¨Ø]ÒÂê‹£Ô«3yëí·_|ñŪ­P ðpú‡>d(Ü>‹=gjÈ”±]ì¾ Ƶš:urÕ¶ {ö¼–lXÝlííÍ©áæ›—¼¶ï /ÆÁÖÞÞo&̓ÅþbÏ_u ‰w×*dÒ³óâhŒžÅÑÞ%¥ÛÚÛK·‘pÇ`ÕnmfxWFâ]M›6%u`Ú´)É¿_|qkoï[o¿]u  =™<å#ÎkÁes漄W7šIDATøâ‹™÷p,B&õ®ª6X“ºYð±(‚×ö½1yÊGþVm¸&>{¶È)‡ÄÇ2N@Uìyè"šzýóUbŠè9íyè‚=Dsþû[¶>Ö÷V}[“Ñ—–}SµËí@ç줄5Kï²DꉵTŸõ©4k22w›0™{'óâ‹/NŸ~fÕV€\$gðÅ_4N@%ìyè‚Ù_ÝñÔwÎ6?$i^ÜX¨çÿí_Óß_0K½«¤¬/-ûæ÷V}û»«îçÒ¿²ìÖLwG<*=ÖËQ—Í™³µ·÷tu=ä`EY³ƒr)šé¯25MFp˜¨/m:¶~`¸C`IDATѵ –èS¦O?>“]Ï¿ìë;‰hx8Þ¹ñ"š±Ä(Ž•<ûóøXßüÖ×ßyç/}éKgÏø˜¸÷“ŸüäÛo¿ýàƒJ,ѻӭ|¬¯,»•õ{L¼+gôî—µYì9s%óÉEõª"›ÅžÄêd¤­èWÿþ«Ï_¼þƒžþ—å›hôô+ËnÝ%¢Íÿ?ÒÕ…?cÆYð±@h¼¼î—}ñ[ÃGž!¢Ù_Ú@Dï½ýïϬ?ÿc7ÿ›Éáé÷nnnÖÛo¿ýñü{ßûÞ?øÁE‹sö¹æÇç]-6ê‹("¢Þ¿>ˆö¥éúçMÆ`±>§düIDAT–¹wåæ*¹Å½¤Ôx±g•¯æËãÉ\ì9 ÍøÕ¿ÿêóŸ!švGôŒéQs¯¾:ÝÞò³ŸÍ½úê-?ûYº+IIv±‰ªÃó•À¢y\¡T’~ùîªû“¢êvÉ „ÆP+¦£(›¦Œð_.ú‹%¿zò’ß¿â†Jò¸Y'œpÂ'>ñ‰V«õ½ï}ïCúçfiB©wõ§wlŠÑÑ¥wlJžšQúøÜüÓ²Ì},2U\ˆËœ/öÌæRŽëS\q@{ÐßßOt*í&š6åS»~lÄòâd¨|¯p(ͪù×ý×ôM—ëSHZàc ø£ÏýÇãßÿî‚ãxIDAT£y×_ÝuÚŒŸþà"šwýÕcO›ñöÎwÿ ;UÎnVÇ]]]çŸ~«ÕZ½zõ?øÁÅ‹§Â‘‘éQ‰·D×?¿ùŸÿßïK7ýõçDÉOšyW !øLV8MCâë$—‹˜cqúc†âruAœiéà¤mÛéwÛi÷¾§÷ý(Š¢O]ô©OÍúÔ§.:ö/ŠùCD=l ºõÿøøãs¯¾Zzˆ(Ÿ0÷ê«“ªñ'+ÉýÍ<\U¢ä§ô("Ê´‡³Û–²à³Åó¿²ìÖŸý+ýQ gŸ=Ó7€p¸àŽ_ýÃÿøéÈá­V|Á¿z,Ù’»5™¼?I¦$”IDATÑèó4Ùèîî>ï¼óN?ýô¿ù›¿áÆq¤>Ó'—½°ù¯?õÅC}DôÙU‡?¹ìö/7Ë­\ÁÐ w‘Èæ[?°wÊÌ ÔˆþþþýîO>ÿÛé¼í=WþøUóæ¥ÛiJú×ÍöX©6Q@¯Çêð´D«¤JT™–Câc!Ž*aÏC$Ó1¤S3Ìúò¯7­øx²÷O¾üëM+>~áòÜ”Û~]ÈúO­Vë…^hµZË—/?zô¨ÊµJ8ÎgZöÂcÿßǯý¾Ã¥÷þõéÓN¥Ïl­éÖEËýÌŠ?œzýó¬Gåæ]噸axxø…^ºë®»’1XÏÿÛ¿&»2#X¬Å¥Q÷¡þÿtYûXí³Ø³¹££’´]ìt8ÜÍåߟÿ÷ƒç,ëÿú”U­íûÞØ÷w»ÏyúAzúÂF»JøÌåŸÑ¿ù¥{#¦P“žðÄ–-Dtåܹlz’(ʤ۬°¨V•¢Ò/-§ÊÄM1Qp`_IDAT¥‰ÿ?7¤Þ;È=ñ±®û‹›4DzœsÎ4øX |šCƒ}qí3?¸ ùyÁ «Ÿð‚VÇ‚.Bpî¹g'©§ :Xâê4~1é¹+(Gö§f¼< CH=-@çðÒK;4{峄‚‰ŸTɪϪE¨.‹=k–v6™|/•i¶ ñ@¬ý ˆèŒÓÿKÕ&(•ƒo½™)Ó>‹=gjȳ]쾤„ÛEXÄbϾ´IAø g¦œùÑ"t¡Ö#‰y p#\«vk3_ IDATûêX’yú8gŸ—iŠ˜¨:¼rDóÄD©dž÷í}Ý£ÂTg¢6pöí}=SðH@3¹PGRç ©/ÚŠ L« X¼E° ¿øó•™¹Ûš‡i€9Q 1¬Å¥ˆ?YI‚OúÃ3Ñ(ÑØ£Šê±?YïMo¡)ÌδMS3æ•/­+6#Ölñ(±h?Š`™¯!(Î2JYŸ(ê§¡7´Ëã®ûhL…$%ý릖=VªMÐë±:\õ°%¥JT™š Q(µSÌ(Ý6´ÍäX«Ú“6M¦€¶$ K÷j¦¿ÊtÔ4Áa¶vði\.ÎEãÙg÷ˆIDATE“©þ(}ÀÉ0w/N§•Ò ‘᱆ 9åp¡èpj³Øsæg€†¡¯LU‘ÍbÏb/H‡xKcE‰Œ—'·ƒï6xDoOž½¾tc°O"AüI£³Šó‘êSœ‰F‘Ú™S9 ¦²åÅè+ GÀеQíe‹x®ÛÆoÜl(-¨cÊ2ß«?„z…aUt85^ì™Í¥œ¹ÔáW¿ÞOê…ˆC»¤#½T)*Íé¶x¸ ªÒñŽ—^¡& }îyöJeô‡pÅ1© ô'Ð~Ôx±g}ŽE€®@ ¢y$gnKS¸aÑæf’©P#Æ ý– ëõúæu•§°æ×d%IDAT?N‡x¸¸KUŸ€¶!܉FIë–×3hBYx¤Ã{Ó¾ -©ÇbÏâ^iîÒ‘é$ E×g¤B•#ÂZ˜à}˜yÛÐÉe iŸÅžÍ_‹=@D[{{«6@©œ{îÙ™2̓Åá78TÄ| _"ºùæ%æþ•e·~wÕýPk:¹ö:¹ì *‚mu‡ûìûÝÏ·<3cú”$ÆÂôoL;vî½êšKÞ=t8Sm¸Vø‹=û ïöWÓÅó÷›ŸªÖ€ZÓɵ×ÉeUv«ëî}ò¹O_qÉÌ™Ó2E§¾²»÷Égÿø‚™’á:XÔˆÃý÷PDzpNIDAT¹µ¦“k¯“˪"´V7~<‘‰w•ˆõ>õ¬‰¤7ˤ¿¬Ú>µÌÜmÍC!Ð6´†‡3eNèî6ÔVK¿s²á¶O„ŞŀyhC™2'Œ«¡ƒ•¹> »m’âadÈMÑ+Ûø2n†ÌõÛ¸ö*iÀm\Ÿ F4Möç‚kçmzìqNfܸCmµYì9Xì”Lú¨¨ê±Q¹ ¦ Á€Nf`à}ë†Åó‰hÁµó|x³›6 +³—M ™¤‹s„ )âÚ‚%¸AìrxâòylœÆm%Á¶„­1ÍÉÒמôtÌÓ,‹©ª.¨Ò﵎IDAT Ê„\? íyo`0ÙXzË¢4ñ†Åó×®{ÄA[{æ”KÁ 9À™rÜ)=¢R“wÂAºd¡èHI½´!-‹Ê•¦k4HS¨ŠF£EDwÞ~còsõš’í¥·,Z½æ[m5^ìÙ¤#² Ð#qËí¥žÒž»úõþ:y5Àrèd­ Ô‚¡¡¡»–Ýœlß³jýÐÐÐ=«Ö')wÞ~ã=«Ö[i h»ˆÛÔ%ôß¡‹èûA¨êç+E:ùñÏ’TNZE5 ;…êÔ‚8ŽW¬\·üË·¬X¹.}Ê‹)†tYe"þÌ”OHS4‹=ëU±a*qX˜T3f!žIDAT×{¨ÉHƒÊxZ@E:…ƒª¢Šr©¶­pðlØ·÷õô_Õ¶”ŠªÅz­ „ÏŠ•ë2SLhŸÅž35dŠa±gàÔ…b]%<¶Å¼Äg';¹dój‡¾öôòõªO®¤^Ú†‰}}PGÂí"ôÂbÏ 4¸'ë☠k¶m Ф;gÑÆ˜Ÿ>é.•|ªWßNHVFn”ºfCü©¿@¨/]„%þÚÌð® %Üu!]%¾c ¨5\{\vP¶ºkÿür"zuïþñãÇf ¿ºw¿¡ZG+æÞ,_Cž|óä”mÆW–ÝÚáÔšN®½N.;¨Š0[­¥™fæb"Lf•ϵñ†oœ¶j*Kô Cß,3Ï•%u—Œ·Åž} ú"7L4<÷*1öIÀʰ'ý¤HïJÅ…]š˜§Ã"ü{´è4p7Õ¹ã¼X.QõJø«š>„©‰ÈJßiY4õ) vŠoÅRWež•¤É¹È4Ã\Ø$F¥ºpôÍ2óÜYÕ^€í3dBì",ŽÌkÀ0ï‰ (TÏŒT }öøjN Í%ŸCìOó' ¯:U]tp+ ¢Ü=ݶþ½¡pÑïn¨nÜOÎU²½âŠˆòCBt° mÓÞ•ã– l):€á 0±ŽðIDATLç (“ôÁªÔó ‡rŠož Ûçee›óÎú‹ˆe6ZP(þ§i¤ˆ7µŸÁ¶&ÙÞ©ÙpZþÜ)0Ç‹%.fXXix´¿œz0ÌŹÁÝÒô[MJ°V©¶;œ#XÔn˜H¬ø*"•/ÇWvF¨Þn¹HŒXi¡4Ê9ͪÇÐù`‡ ¥)úC‚ª“X‘­oÃbï-›®¯4MÁ5M%³A¦?ó´7“‚8\é.«c­4«Ta^KlÅêu‚8XøDzÓ ˜ìòeŒ­I*«RHûCm´5ÃnÈ‹tCü™9JLV©­‡š×”ż©ä¹RÌíaÓ5-ÓíB6?ËádÄaIDAT¶Ùù21i´š–¬Qn~TÇ‚.B¡`ß:zÁ !¬ Ÿiþ½¯[Ùi+_kŠ(©yV[ÕnY{±¹£Úd­÷N€Uqâ˜qE¨…ƒ@.*_>ÌÕéëB'×^'—TE˜­îpß Nùþ:{Æ6}xx¤»›ïèÛ±sß’®0Q  ÍôèvñÌ™Ó2%'OÞýð£[ÿø‚™’p°èô£X0Æ$¶„ §{uø<0¨O5A˜Ìœ9­Ñh=Ú ¢ááa"j6[F‹ˆ›Ífsxdd$Š¢ó?1­÷©gMÂÁÀ3âƒG5e3—è÷ÖŸéN³Å-¼IDAT‘âa£úžœMä$Å]RUÒQ›/w`9OÇŽõ5M¦×Ï©Ö#V:¥£XFbš9p°ðIæ$Òg˜÷û¾^¡æ'5Ïmj Q•þù]Ä£ÝÎô®èøI¼±ÿÇR9TÁ­_øfº}ͼÙ?}ü)v/›ÂÝÎ’ô4‘;0œú,ÜöŠ%uS•$ŠÊÓm¶–¸šôXcÀéI/è(¶d£è³Ï5B¥(¨1[iàn>%ÀÞ';8Xxàþ~;¹wˆw+1Eï~y¹ƒs™ê³pÛ+½/;¨ÒÙ{µ€ö Ï òVW¹Þ¹ÿ‡ßþþ¨ÚŠò€ƒ€Ò7³ä5—Ý%¦pqå2U“4Y›ìÍô9UÒp—í;wšu³Øk”IDATfÅ:ÃHô? Sj´Í¨JgX9œrî ê5ÆuôõoR(Τ̼ [‚þT5f«°¹å!P«Vtì¿8¢dR÷Ó4PiË«7¿xÉ"SIæsQ ä !v­r†‰q5“”º³t&»Ø½Ò &·ËüM@åmh4¹°NOºKÍU©µm ¬=ùcÀ¡ÀsïJõð®Ð»r±oÛÒWs’=c¤‡è»9bÞû­ .”2G±”O¥ó{ú¤ýò&ï™&é/O“ñzTY 5´™Ü3ƒbüøãÆ£:ô®,‚u¡­Z8Xä¢òp÷kûި܆úÒɵ×ÉeUf«;Üw€ý©ˆ`µlÕÂÁ8"X€¼DQÇÛÊ·&5ᵤ/xEDÔ™5“‡¤V ^²aXɶòÅâWQ³9488DDƒÍ¡æÐ0–Ê b¸[¡x3Iñn†4EedúSe•Ê`}ú§¯Xi¢rÎ$N ðpsý:¥y\“óXŠ‚š®•éÅ—U£ƒIDAT< Ÿpw+öŽ,¾‰ªR¼›!MÑ)u5ò&Y˜[«©ïêH9žÚÈ ,|’8LU[!1CLIŸ†%“”´ìâ.©—i’‹Hê¡j °EÏ“þ4L©bŒÔ¥3¬N9w¾ô ã:úú7)”m7œaKfͦH›®¾ñ8[Êàηi_=ƒib²QÉ3Cì¬äÌ=N“”º³t&»Ø½RžÛeÞ„TÞ†IÌXz”ØU±[•ZÛ– ¥1´ä'Š’º%JdûJ†ƒ@©˜Ä–*A779\£‡Û%í‚4y&I}¯ÊßàC8}ÅQDéüž,}/¶á!Rìi±ÞIDATy½{dÕ/Å¡éZBecÒµT29·Fæ^MFá`8 ­¦Ô¢tÒ&§ï^ôÒ4í¹8¼€Š®l@äŒjIÑÆxTã©(kÌSæ!^òµUëÜt3³àF=šˆˆâÑÇp©4D°ðIrób{»ôc„U)~ÍSÄ‘Fé¶jh-; ¥¸aR…*w0 ÓioµEÈg¹¦GÛ¤r2qР±]‘pÅiÑg$(-»—¦«WRùÕ¬€ƒ€OLz JèY°ÊB?úÄüó\ôæ™+/¨&U½œªm|í°­d“mó]$«ÕÌêµ09Ä$ÑJ­¹‘RI‡Æ©‡¯IDATfxj@qÀÁÚ«X8ú ‹¹aexöí}Ýê([ùÑ®å2+{[žå¶,””}{_O6 Ëk+ï‹OÇøñüxô8"¢ãVƉ(",•@™T¾2|˜«Ó×…N®½N.;¨Š0[Ýá¾E¨ÅW„žƒ@çb;ƒ6Lj ckI_ð(Š:¶fò~ÿk"iUɶòHÄþßúãtàÕ ªyÄÏà‹0Cš¢Ú›i’ê[qý„ת ؽš¬ÅÏæ¹!½Þg»"n¤ùV­´© ¸&ç±5]+ Ò+x>áîVœ×’ÞÑT_MûºÙÙÎ|bk]`IDAThèÖ¤)b¡TY¨„5{M¾<¯jRVåxhc 'p°ð‰81#‡æ®íñ†.š!¦¨æUɘÀD%ª¨U¦/eHWPà€~âÊÌy,¥)µ@:߬~¦ÜÌÊá”sçK¯Á0®£¯“Bq&eæeؤY³)Ò¦kñõZƒ@ÙÔôé«!óþžù¤”FÂ*©±‡W5µ£è&jRêBÎÒ™ìb÷jB˜ªˆ/‡¨!Ó*“¸2¯"&ù:·‡ˆoíÚXMˆŽýGDŦi x4÷èꌒ`eûþ-}Y'ÙSGº2‹)Ì .§~4pdÚ#}×w˜¦¹¦éip(ÿÉrÐyAeŽ=7ÌT¢®/»—¦«WRùÕÑÆ,ºþÏ×ÿí£'N<>9&:þꎨ¿ÿðMK®Ú¹ëõLp°ð‰I¯A = ¶Yä—ךŒVIDAT¤k”Ê›YD×7ÞKÜÖÈ×ÛJ6Ù6ßE²Zͬ^[“CL­Ôš)•thl†§ÑÀàÉcz¢›nYÜEEQEÝ]QÔÕÕÝEQÔ•ø´QÔ•z·o¿Óo¢Ðd~®+ ƒâ€ƒ@.BXÞÁ†}{_·:ÊV¾F´k¹LàÊÞ–g¹- %eßÞcV†åµ•÷E€§ãÄ1ãŠP  €\T¾2|˜«Ó×…N®½N.;¨Š0[Ýß.B-{ð ,:ÛA´!‚:1!¥ y]„øDúµf¶ÆBgj0Ÿ›Gõí·êÌ/áEIé^gUìùÜ#Š3ÊIDATøH*L¬Î 7áuÞP­ÆÊˆ³OdIf »K4[sˆ(¯™ÆP_^+Ut¼/G 2è"ÀV³:ê"˜LÄΆjbžÆ`“‚H]·ü5N½èqêù´sŠí¥R¥·iéÒŸš’r{UǶeE`"Xx¦¾U‘bžwóÃɵà‘zîûòá*óDsÖRàHK§÷¶ÅCLâ ´=p°ðŒÉÓ7Àg3gŠ04USpM¿!©ŸåÒ纨ëXyÐtéf:¾8°ÀÁ( «,ð/“vZ€òÁ,¼aØZ¸%¿=ú‚kQ¾ª"¨úl?¼wóæ Â,IDAT± UÛÔD°ð†tüß!؆ˆ™r)ªA2ó.3ÏÀ).ëÆ`Ê:§æ{èXà`à“Ï÷Jð¬2uØ•S?ë«ùÍÔËg‰ÒÌô6ÀªOP/¬ä®×N• ,žQ…r ](À@™œݰxþ{ƒÉ?.Å\,<“Ü”3ïÂnÿB‰„Ž<+#äUÎû`K&[åyH\B•ÞNHË)B³bˆ‘Ý¥Ò ÊT£Öö87•Ôiî\š\Êo´À Fkõš’í¥·,j4ZKoY”ü\½æF£Õh´ÌµÁÁÀ3&Oßo»¢I¶n„•<—]º3hžî¬ñ1–>ƒ -™ˆá}õjâUzòŸ5öÔ³ŽŽJÆ ¯ñvehhhhhèžU듟wÞ~c²qϪõC£˜kƒƒ@Ùøì/Ù$Ùiâ"À#¬lùÅIDATã[„¼/Tï h!À„´µ¬X¹.M\±r[{†ƒ€7L^Uká]Ù¾s[ɫƾ¸e­"´Jn m9Ñ\\쮜נ—±JTÛ Z‹õ´lÁ4 x#>~°H²Áös±)œ˜_T™r\8ùÔ$± b· »WZðLc¤ò¶ÊA èOØ ¦?‰^2U!6­ÈxªŽ4Gé% 1 ¶]Éã],ü"}üè*1#s—ÞÎ<ú3³3Wn"i[á¬Énd¦·ª2RÖI]g·“h˜‹¡U¶–è±Õi~f j,¹@´ÆóX¡¯°-€ƒ@.BXÞÁ†}{_·:ÊV¾Fî—f©IDAT´k¹LðUö}{_÷«°ý°­¢6®ÒK4~|½ºwÿøñc3…_Ý»ßP-,rQùÊða®N_:¹ö:¹ì *Âlu‡û,\8Ƈ&Nœ˜)|èPߢë¯{sÿ®LI8Xä"„·±l¨/\{\vP¡¶ºÃŸ]p•¡èðà{&b˜¦À3p°<ƒ.Bràx¬8Üwà`ßï~¾å™Ó§$SO°{c¢(ýÓŽ{¯ºæ’±' ŒöÚ€Ã}ÆOø`w÷‰†ò‡ ·²Åà`@§ÓûäsŸ¾â’™3§eJN}ewï“Ïλjv VPÝÝ'ü× IDAT6G›ÍááÖÈÈHÄq<22LÌŒw##­ >xÊ)§ b CL¼+s1jG³9pÒI=cÆŒ3æä1cÆŽ3öä“?pòɧœ|ò)==ãzzÆöôŒ;räp"i¢,*fÛŠYéöÅËŸ³:6YÆûú†Î Ì+aÅFsS“ ©p›M°ÙΔ9¡»»K(ŸÑØUº¨óû«;'­Trpå²éÇkU»üåRiúæ;¦Ïÿþ.ÕÏÇ—›e剙Jmd×Éi›I·C™2'ŒƒƒÚ“‘‘‘‘‘á8ŽYw*IIe’‹}hhè¤L…p°ð‰Ô‘R"ôIDAT9^Ûîž5÷ëËߺ¯Ñßh4þþs/Ÿ·íîY¬ÌÅ_³‹iµ¾¼+v¥¼L[Uµ£Ñh²?\;oÓcs2ãÆõ”h‘å 3ânÇ:SÂRîùak¦-[²##Ã###lÊŽÛ§NÊ}öAD­V •arÛ¤õœGD=gPúÔšréÂT`ÛšÛ ³àž%\ס¸7U¢Ñ Pe*î’ú%†ú“ìaaͳ3_[ºÍxßÁºañ|"Zpí¼Þì=#«‡:׊ÈÂ#b» éu*îêTÞLïØ±ˆöìÙ3uêYÜóÃTÀÁ :šDƒšýûwöOŠlIDATj’z0i¢¸7Ó«Ðd:"V"“adza“À’s¤PU¡ñÞÀ`²±ô–Eiâ ‹ç¯]÷ˆæ¨´BÄšÑ8ÇRŸXY1¬ùT‰Ô gÝ5©Ÿ! ç÷™Ta-ο‘ÚiXŸÒre"*ן{jt¥$½QEQ´}û+iúž=¯žuÖ™lAâUÀÝßÓËrÓ×.øË¥ìß5úÓ·¬^É©š0iÂæ»ÎK¶çßóVfhîãnˆJrúX9ÑP|HxŒ+„¢p¦Ñhѷߘü\½æd{é-‹V¯y@uTúLâjFå«üiMdE£VjTŒ³Sšoú“-+Tõ jÃŒwؾIDATnõin›**lr^ì©Ñ•’ÚŸÄ®ˆhÚ´i»wï&¢W_Ý›øXVeƒ€gT·•dxûwðÈ`ê`mY»aî_*ìïïf£.„ GÿÜ2Gâ’¾¤jvyAÔ¯ ¿+†††îZvs²}ϪõCCC÷¬ZŸ¤Üyû÷¬Z¯9V¬óØ©kO£ÍMU=b Xƒþ}Cª\R娩O·r‘™¤Ê×—=øO;wîH~ΘqvL:uÏž=Dôê«{ÏVÀÁ LžåƒÔ¢žóˆ¨ç êMœréÂT`ÛšÛ ³®ÃÎCÍíM•h4èT™Š»¤.Ž¡~é,Û&ÖŠ‡°Hgè+-³ì±0Y¹˜£T»—+ˆÔTÙ¦9Åbç¦axlÒ¤ñ\ç2ôøIDATÊK/¿F3§Ç6K ©¦o5\È€ðƒ@u4‰5û÷ïì3Ô$õ`ĨٵJØñѫșd(2ç¤6‰Qå|lk*ßHcC¦7éfžÊ…uð®ˆèСw7þø'\âì /RE°bõR0Ä£ôéÔ8Xx&}~iB•Ñh5ˆhËÚGæ.]ÄF³RúôÌÆGlÃW…Âu>ª<ƒ¢ûz¤úÅÇm­ÀœcÄþ´ ™Ë‹¬—^~­Ù4XzMaÈM¯Aµ«¾'´=p°(“û~ÁÚ²ñ‰¹K®¥FCè§•w¥ê#ó5qt2ûYDÃî*42ªÏª¬õÇJ-Ït3Ç„ÆçôyùòA »É ½EëB3ÄD/.¼(PGà`àÍTX"¿=ÒÚ²ñ‰¹K®LâXýtªaìJêŠÝ¡4IDATUþäF) H3u¶G•©yÖæ£‘2÷ê•‹&©62˨É]Ó³–yš¬Ä¤È"X.c°rF­¨;p°ð†íÚ8Ë6Øð¹s¾÷1•ÀM÷mÏmJ’¸W2“{Šâ+Be+QÂÀbû¥¡5Õ‡ ÒtiäÍWÔ@ÀÁ  ×"tv¡B{œgwÍ& }ešSO¡g9U.Îä¾øº«‰h¨94ºTÎPs¨¥™¦A³mÉsH퀅€•žA9æ1q#83XÒUµ´'Vƒ±‘ˆ(Š)‚o€ ˆ`Pˆ`zñêÞýGŽŒ¨övuuuuu%b%@=¦— IDATƒ@!ŽÁ ]ÿçëÿöщ'Ÿ?‹DDýý‡oZrÕ»ï*]1@, ÁܻڶbVº}ñòç¬rÉ?…£FmqfŠ•ðy¿IyªWµ> ÙÎÖ(—ÿ3ºÁ“ÇôD7ݲ¸‹(™½»+Šººº»(ŠºõQÔ•fôö;ýDGÝò s€ƒ€74ã®TþÖæ;¦Ïÿþ.ÕÏÇ—›e傘;^f8G3©,7ù* à`à©#¥r¼¶Ý=kî×—¾u_£¿Ñh4ýýç^>oÛݳX™‹¿fÓj'|yWšy; Ê´8|-ð(8X‚ÉÃoZÔsiÞ*IDATõœA=£‰S.]˜ l[s›aÒÕ`¸ž)’E;4ôªLÅ]šÎ²LýÜ$“æÖЇ°°fˆÙé‹Ã¦piJ{E=™5 2[“ 8XTG“¨qP³ÿÎ>CMRF\Å…]*˜MÑ,É" dŽL² ™ŒsÒ ›uÜ?© àTq®)‹tNNi gš`ø*@“:<ûp¾ žQ-’|WÈþmQ£?=pËꕜª “&l¾ë¼dÛdQBé¨bðú^WN?ö3’ÐZô]À{¸ti¯4w*3O“U¾™ˆò&ÎâáæùJË+vš‹»ÄÄÌú49¡ €Êh4‰D´eí#s—.b£Y)ý zfã#¶á«Bá:UþAѯÈRýâÝ6äû¯aGêÖDQÄŽ¢KŠì.:¾×•MO‘ösªš'®˜)gªÇYo§xôQUÛ| µéëA£Á6_UyÙúÑŸQ^¯_5¦V, Áä‚O"X[6>1wɵÔhˆýÔ£ò5ŽjúIDAT®4w+Ñ’Ì{½4l Šñö&+Ú¯’‘Þj5Yë•Zžé êoÙæoù*=b¾æþ¨UX¢ZØzVí2L—Jf>¼ íÑÔ¼­=æÌW#ïð†S\yêÇö<†,|bµáo´¶l|bî’+“8G?j»Ê|zi~JoU™ÒLíQejžu櫹ù^½rÑ$Õ†C%ˆj¦µ@Šï$g¾!„UŠ6@UÞX´­ŸÊ+0'p°ð†íÚ8Ë6Øð¹s¾÷1•ÀM÷mÏmh4³BûaÇ<”Xµ T¶åµíëlà`P†k:»P¡ÝƒŠ³Ç»f…E„4%H²zIDATœÊŸ+‡ÔÉc‡ÅÖù{uÓC¸ôœ]Q™öHåY{ÄÃU½Ò^ºÌ4ùJQÉ«ÊE²ó%Á¶ Ol´š“ÎÉKëÓö<, +=ƒÎÁ¶_5󜻜ûy3±JÉÄ!_+yÕánUí,i"ïå<†FWÕОX Æ sà"U <ž—äC¿üzê"X"XH 6ÞÐáx*aìªIyª—› ïôtp°ð†&j¥ò·6ß1}þ÷w©~v8¾üÛ£ ¯ü†é5{qÑàÛP¿tk'IDATp°ð‰Ô‘R9^Ûîž5÷ëËߺ¯Ñßh4þþs/Ÿ·íîY¬ÌÅ_³‹iµ¾¼++7%Lw$L«à`P&ÏòAjQÏyDÔsõŒ&N¹ta*°mÍm†YHWƒag‹áö¦J4ôªLÅ]RÇP¿~® µâ!,ÒytÄJË,;7tÒK©å¬6—̪Pé’ì”ü €êh5jöïßÙg¨IêÁˆóİ3%²)âƒV#92É*Pd2ÎI/l£’º>æh*gEcçI-7œ~Iz^¤¹K²Ö¾yÀ´™̃€gT³$'s»³DÔèOPÍ ~IDATܲz%§j¤ ›ï:/Ù6Y”…sAìÊ CT’ÓÇÊiŒ¦€ÒY¡K°Ê"¦ ÒŸ.%Žã¿9ì+ßT§…RÍú“èìIk °Ù€Z ϨžåÉð,öïà‘ÁÔÁÚ²vÃÜ;¿ UØßßÿÌÆGœíQuQÙ"‹HKš]^õkb6ãÝTMåûj RJø¯Ž…õU ÑX£æ‚•Ñh5ˆhËÚGæ.]ÄF³RúôÌÆGlÃW…Âu>jKE„gôúÅÇ|]Â~í,ºòY¸-iLJãü9D¼Ä°¥Ê¡”*7„e*‘¹ãê\_ íƒ@!˜ÜF“Ö°¤¼¯IDAT–OÌ]r-5¢@?õ¨¼+U™tÔŽÕ{¿ÔrQÀp„»ÊŒh€>ký±RË3ÄÌ1a†ñ9}^¢m¬f“\D& ý¢ Ùª†Ê%f˜;”œÙÒúäd¤ƒÛx\{cóÕª.IÍAÐÞÀÁÀ'V¸ÿöHkËÆ'æ.¹2‰cqôÓ©†±+©Waø“¥d( ÍÔÙU¦æYëŸXV{õÊE“Tú2ê=BUvzKTÞ˜ê̪Œ,«¬m”üV&¥)ªHUiÑDp°ð†íúƒË6Øð¹s¾÷1•ÀM÷mÏmˆ"†ç×yò˜ƒ‡Þùù–gfLŸ’8rìÞ˜(JÿÆ´‹“x+IDATcçÞ«®¹dì csšÝ–¨A„¬:8XBò`¦˜³ Ú-»8{¼k6Qè+Ó"F^tö>ùܧ¯¸dæÌi™’S_ÙÝûä³ó®š?SCLzcÅ~R«Þ[/ ïp`±g Á6š@µ˜xWR±d@RºÁ‹Jáº29a=¬*®Ç“ÅŽ@çäUöˆEÈLgíõèóEwaç €B°Œ@´†‡3ÿ‰GÅÒ]*ùL«ÒñgRù4‘Ó)•Wåkb¿ê+aÃ"ƒö]„"X v 6†2eN×]‚%!“Æ´à*=ˆ`Pˆ`ÚÑh43ÿUmcõ  A €B0óM¬óIDAT`m[1+ݾxùsV¹D ù9à¬ÐðÀL±Âæã ÝŒ‰dS1•†þÓBÕÞ&ݰxþƒofÓÅ@&p°ð†&j¥ò·6ß1}þ÷w©~v8¾ü½·ái~—«ؼ"aöQ61å½Á¥·,"¢Ï_»îØêLb À8XøDêH©¯mwÏšûõåƒoÝ×èo4Fÿ¹—ÏÛv÷,Væâ¯ÙÅ´Ú _Þ•U$©8¨ªN%óh4Z«×%st¿æ(@ ÀÁÀ'V¸ÿöHkËÆ'æ.¹2‰cqôÓ©†±+©WaøSo" ÍÔÙU¦æYŽÝ6Ù«W.š¤ÚPé1Ñ f§ò̽·L™W÷î?sÕq`IDAT~¬‰˜IŽ8XxÃvýÁe›løÜ9ßû˜Jà¦û¶ç6 Ô˜<‘'MŒM Ú-\8Ƈ&Nœ˜©öС¾E×_7<øž­=tp°ÈÅá¾¶‡ ¼¿èÕý´Fò?ÿS9‰Ã;ïüF³·|œíiÑ ¼y ïÀo;å®ÐW¦9õ¼yàØ<æJN3@D}‡ÞL~JÛ'·÷ÝwGˆvÁU†YÀ»mÆÉcÆ?¥»ûDCù1' ˜ˆÁÁ û~÷ó-Ï̘>%éÿb¢$\Ç´cçÞ«®¹$¢;öÜsR¹–Gßof̘|æ”߯ڶâà¡wläØI! wIDAT²{hoº»Ol4Ž6›Ãí‘‘‘8‰ãxdd˜˜Îý‘‘Ö„ <å”ÓÍÞ1à`‹Þ'Ÿûô—Ìœ9ÍDxê+»{Ÿ|–ˆ–ÞºèÄ;ýêj­½ÿ‘3Ïœ\µ!m…CƒœwÕ좭 |šÍ“NêŽãx´{=edddøÈ‘çœrZ³‰¥`ø0K${Ÿz–ˆN<ñ„F£Y¤Q5 §ç$"êÊ”–84HÀhì*õ®Ò JZ©äà ,Ê¢5<Ì¥\>{ö??õ—xBwwº}ô¨äËÁŽ"q° +«cᤴ5Òñ €‡‰]½ïN%)©Lr¿f¤Ç§IDAT$Êã·G<0Øbÿ]>{6]>{6—^µ™4iÒxéß ‰€W’Z5i!4HÂadd8‰`±‰I(kôß1Z­–‰B8Xx Ñh¦ÿæ^yE’¸é±ÇÙt®Opxx¸5<Üj Kiñÿ„Í¿î_ª•ˆ6þø'âß÷mpÿ ͳ±p¤ÕnµŽ…Xº»"üóøOl›{oX<í:÷µÃhW’ÕÙgŸ“øX»wïž6mZâ]ÑYgÉ|Zh,<Ðh´ˆhõšî¼ýF"ZzË¢Õk09„(vqˆôÄÖƒépáöQyQº <,ÿŒ¶®÷IZ&­^ó€¸úO3fœ½sç"Ú½{w²+]Þ!Ü,ÜÚðÀÐ(÷¬ZŸ¤ÜyûCÕ&Q„>ÿ%p Ê‘vûIDAT/õ®îYµ qÚ÷7cÆÙiê™gNI§Â²R‡`ãÆ+V®[þå[ˆè®e7¯X¹NuÈ`S?BË(pdÛ}÷Ò˯IÿfS´yÀ3lƒLZ#­X¹ÎaMC:„ÑÖ1/júôé»víš:õ¬Ô»B!Õ“øXšÍa¢˜¢ˆÌ®ØÈØ]‘Œêb¤.½ð¢fsøÒ /j6[—^xaúw4ñXÓŠÌB…yL2º‹Æ¤5èØèõ÷ïHS§Ne£V¶A,8XBæólôC_ó÷¡"$+9ö8±Hté€oà]I2“{ÅÉM)]‚0]1,£»,ªŽrK!‡IDAT„é§~èÈ‘>æÎ¥oƒ‰_522<~ü$":é¤1&SÂÁ /¯îÝ?~üXCÉdc×î½MëaOíÆ®Ý{?ðSª¶¢ qht8¯¿¾ý£=瘘)¹k׿}øÃÓvï~=S¹X¸pþ† Mœ˜}YÑ¡C}‹®¿nܘÆÿy~Ço*Ú¶À™2ù÷®ž;ëíwú«6¤­phÃïmsÚi§oßþÜÑ£ï·Z­!ÙX«¨««{ìØS¦O?`àw&:¬×ö½ai*Âî]/^rñ‹ôÍý»ˆhÂø±>fchovîÊ~ ¶84Hg¾õfžÝYIDATÃŒñD¤Y½Ñ ^xÅP¾ßðLFkkoo9vP;^ziGÕ&ƒuÙœ9¥Ù@½ÀÕ@º<“=È=Ø^B„ d¶ööÞ|ó|&:“ì1XÁú1!Û€NF×E¸sÙœ9ÁF×ÐÉ8ŽÁ‚g ÂÅÁÚÚÛûâ¯1yÊG¼[и,•sÙœ97߼Ļ)íãZ„ø*@Æ`xc°<ƒ1XžÁ,Ï` €g0 À3ƒÿbÀŠ IDATàŒÁð Æ`xc°<ƒ1XžÁ,Ï8ŽÁ*à`x€gŽƒu÷wîçv?÷Üžq!|  cyî¹oVmÕð¾ƒ5ç²K*´ m8æ`-X0§Z;Ú†héÒoTm@[ñÿxŠðÙžUIEND®B`‚svn-console-view-toolbar.png000066400000000000000000000050471203611042400337600ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images‰PNG  IHDRÆ.ÍU pHYsÄÄ•+tIMEÕ ! ot€tEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíZkPT×þÎ},.°¼–ee—WAPÑ5(¥±#6¦™6Ó´f*NhšfÄÚ¤>RgRkª)tâÈdj“6Q§c£F3@-c42ÈˈÀƬ<öqï9§?RX6Ë&n¾_÷žsîw¾Ýóïœû -Í70‰IøÂý0‰‰†IKòŠŠø„˜û­âÿ Òý0*n}^8byôÌ‚oYÉ$¾ü×Ræ.Ý9¬äê‰ü[Ÿ~-W}\þ[.\²ÅsZbóß>­þÒà¾ÍaÛŸš÷M+©?±$eYù8Iü×RŒ Œspš }H¯¥õòkæ´ ¥d>IDATòP&¤ýôÏ#VÕΟñ“’ÁcŸÈŠ„ã+çkLëg§fÖ¸iV}GŸÖ÷‘{ªjþ°O¥€úKròΕ•>4NWù¯¥TNÇÛG«NÅáPŠºaU¶&H ´·ëzMq\Æzx˜Àú¿Ug{t^ܶï×+²¿èÑùT> Ñžc­ï¼üÕ«˜*ŠâÆíÏV¿cóN0uürÖîþX DSU]PPt”ΨÉši`«ÈE¡—ß_œö£S^÷âÇ–b"¥XñÃ9 8(ƒ>c«ööÉ=äQ¨@ #TµZÃìÛ‘ ðS†ùDö ޝ,ÈÑ–Y rôňîñIDAT¯dçŒÞ”«¢$˜ p€ ˆ$‰Ä–š–ý,DD}°dÒi¢‚äDCÀg¥)?{„ûµekÞؑ׿;wù¿½ëÅ-¥Š (;[¯ªÌ©¨v‡:WÏæf«Lô'\@ÉS_ôêö¼º{àÌ›”rÍûo œ>58%*°·ñO«ÏWíŸ + rPøÏVÌëuCB¨"H6l?jë³u[ïvßí¶õõÜ¿‰ƒÎ%IäÅ yÃÐpæ\J)ª.$hª>Ä© H7|~á¹yÿ¹ç_(hllŒŒŒlkks:nV½;Íï,ú7$âᆋ'͉³µ:Ãs¢NxE^ˆÍ‰_äýÌÕòï{z!²Û¡ qý‰B¬ßK =×fË4kôصc’˜Ç.u`ÈÚ 35Ê yÃ`°Ô0È ’[ïñ˜á½ïþl)Êe|Ѽƒó‰(.)¢”655ÅÅÅY,–â’¢Ñ\EUFÂ3A{þSy¤ùrùÒ'7„ªL!vÁÀ£N»W79Ýv-Qb²ÌÚºvÛŒ©Ú»XªtÝ|×½CIDAT‚Á㼿|ÒÚÚæhÓЪñÃA,ŵ*›ÐvÇ<©r½ÀW3¯á¿–b\(;R:´ÄdŠ™5kNSSS||¼(Н•—ÅÆÆ666ŽFBí×jkj®˜•Yg4h©Â@@ì*Úµ Žyó$¦Û>®¥„ 8j`¤™´àèqŒm)ô;éFÿºÇ9ÀÉÍ›7Ûx€9&Ö'Þr(D—H.0«Ðõ/€qÓŒ‡. e\ß§ø¯¥–=òĈ剉‰ ÉÉÉ8çׯ_OLL„Rt·VõÁO­É`ÔËŽžJñ^Ù¥Î;½1Æð¢‡Æ#¡æ,’IDATÒ®hÎÿðŒ»&²'<¥ë¾ ¤‘¥hO½žW©•Ó\<Ëܤ „ ëPgÖU¾s¹ù¬µwp»6.W‰ýUgëÅÒëŸíV7wµyvž‡ åkÖ¬ºÖrÓ×Ò&,ü7¥|óì<ÏÝ3 Ÿ`‚§Ô$¾}L~(< C*¯¨¸ß&1¡ ¥¥M¿ß&1¡ð_¨•4ôP— IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/svn-console-view.png000066400000000000000000002002621203611042400323730ustar00rootroot00000000000000‰PNG  IHDRV ]È«sBIT|dˆ pHYsttk$³Ö%tEXtSoftwareMacromedia Fireworks MX 2004‡v¬ÏtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'prVWxœíYk’Û6 †¥H Û2¥$mÎÑ;ùw¯ãËôߥ7è/>ô´¼Ón¦3ü´+’HÄOËýóï?þ‚ßá·7ƃ®·Ýïi<ä÷AÍÇíqgñã~§g\ríí.Åý~»Ý7ºßÞnR@AÁÿ îÜ]wîNÇþè÷cn¾ïzš€‚ÍW-ÖÍ;ï5P3HC;< sÇÊÄ pÃ¥ú¯Ã0ü`ëGé\µ2 kø[ÛÊÉÏ–Ù‡èºï@ £%A‡ŸÚS§Sƒ™ýcÿmpƒ‚¬÷£E9VF¾ì…~!ÿNWg7èE 6t"¢Ô¡«»Óõäê§ú?\?Ù±jmÓž ®±¦Ùžä¿Ú·º ÄKÈud>a—œï™™ªìaòj«wÇ5ÿhsÿk,ä‹¡wYj‚Ö}SåJ8îc5?ÍÖjþy”I H?ï=àI~ñbRcyÕài«”Y׫Y©hgQW-)e•sw¤ÿ Ê}´"ä—Eݮϩ~ •p‹‘ƒL8ÈŠ-ÿ£úß‹Ÿ½ùŸâw41¨ÏÁ«Ÿ½êªÿ¥ ªaþW¡ëöw÷Èp]q¾ÿº‰æ­(µ1{ž©£ Òó…I¬½ÿÁÿê:s©ùŸ3š>ÆA3zê œÊ½Å@i¶ªõõÇ©¢-ãÊsDyJØ^aÅUg>jžÄd ÆF“ØTšG0ÓÙŸÿÁÿ…ÙÚ,±m÷ñ™ÜnÞ²ßcÖÖãŸåLØA!î¿á-6åLÃþöé´`¬5Oò'VüÿÕzü1ìr>ú™·¥ðM‚ŸS#F#ÝYÄ€XT·Þ¯ CÈFæº F^ó‘ÐãéTMî1Q®’B÷Sù#þÆOø?,òfÐõ“ö¨ê-“O+ö} ´)ÿã”ÿÁœøßãŒÿ³4°­Rz_*h~2ÿW[ïâïeþ»@zùó'é…K´V5t­¯?óÿ"ÿÇo-åÌù1ÿ{Lz#þ¡òòåÂïØZüwbÿotÞŽÿ~þÏ0Š'üX2ýÕø¿Âÿ~âÿ ÿ/ûŸ®Íü±g"õ‘sCNæ.Éùúxä#„Šøíï÷›à%þ_¨(xåû7ñ?¾Ìÿéë7ð¿ÖÎ+öƒ²·:¼ù9ÿk’¥w|‘ÿómóßgù¿ïæÿ%scþI,.û·ø?Ïø?{ Í•‰ÿ#½ïâÿ±ŠØÆú?¸þ÷÷ˆÿÓü-£|¾˜É·MÔð¨ ê«ç>å/Æ]+~§¬ðÙÇɘÿí#+ñ ŽêRá~]?ÿÚëÁ}²e,ž¿ñ¹\:K>Ê­Zàé Ñ3MmÕÔ,£>ÐXGyó<èYøÔ~ÏGmÙ1%}&Ð8vª)³àvSÓ#L¶©UÉɳuË—=zÀ&ð!çÏ1* ÿÅ"ÔëYéÔþàú#]ôã†îÜwgþWÈõÔ‘üÊ%µÙE½V;ÑsÖIåW)­ë9zêœüSãšêG9éžÿ¼ÿ®~½ÂHmkBFúÞÊþ)¤3¡œmkTSxœí][sÛÆ’ÆæÇ‘|O¶²û¢ª­­}ŠîEQ”ëÂTlçÅ‚„Íߎn‰‹ÿ}»{f@`0¸Q)9l ˆ0ƒ¯{¾éîi€G/ZWÓNog25f½_Ž'SÓ³í†?vf¯w©>{ÍŠ—ípê4½ÙþÁ œšncÖÛí‡S«ñ¼ÑÄŸY¯Š×híÁ¥Bú™u¯¦­.üÙÙœOµ m¨Ú­«µ°5ÑÞÏŽ fj>B¡ýµíO8âý¬×>BÓ­mèýÉÔ{³Vû€Z::‚– €Ýþ¬ÕߥƒúªëïSÑ:¤­Tìó ìvèso@uZô©Ó£â˜íìw'Ó¦;k Xå€]}Ðg±ë±â`{yŒ½Ògíc2õ 0ñ2틊ì4¡0Yaa1+…̩Ѷ´mØ{Ÿ‚­÷PúÚ9ÔŒV‰™qMÌŒ›ÂìÇlO;\>kï îBçbc3lÆ9ØèJl‚ žƒMà1l,³2:†Íàñ<>ƒÇcðx oÖïþ­ gý>/»'€šãþQÀgÀí(×'€T ”.~dL¸0¡i:yhú%Д4-MIÓüåŽN‚Ðuö»-VÓgeÒï8¤--à€>á€öÌtqKëÁÖ%ìŽZ%–Fh/wÜZÁ‚ãÖ¯:n³0z˜Âèj?.2netJéÚÝ@göŸÑ`\2¬Va–¬€~3ؼ rW`G …ß<õú”ì’9~ùH*Ç`>F“CióœgÊJîóÂ`šÍr`>æ`î€Â½§ÌÛ(ÜðEµ¨”`û“ö)?@Ç­a•6G Ý®>n!I„€H†yÞsräš^i,-ûÑ–1ªŒ]þ€nŒt^À/ɬÐóÌ sA²+YU€¾å½„1z¡§!©•4äùÈxj³X«v’˪T‹·Z F¡P¿¯Mð¨f¶Ã03†h"Zª3Ô‚æK£¹Üq¹½‹cô Âèù: àGaSÎÍ›Hùùv¾4. 3PŽL‰ðAuˆl+õ9FÖÈ.=w.®d-9åSMy$ï'cUP¤ZhìÖ„"%QtÇ|ÚÄ“F A/Å€gŽÇ°ÑJÐ|̱ÞÔ3…ñ³¡ Ìê ÙnŽÉ c–ÃΗž˜µ†Š.0p»dk\/>J7´Kj¡½€Æ‰©[‚qùÃGk_¿870+Xl$€¥žbDoDã¬ñ…æ†E|³¤kF.‚1Ù2ÈšŸuÉ))‰­eª°u¶.ÃÖeØ2Äa(a‹¶Lo?¥ªÅ8hE3Ð~¯¢¤¥€,gÀ¨‘$ÝĹe¸tV$%%@öâÚÊôwDïGöŒ¯ý^lòœM'q18õëê¥ÍÐd¼¨TL\eE@Í@XËš\79¦.Õµ³Ô3Zë`†¾’I;”ˆ€ËtŒÕ)Ãgé–vÄ·ÆÚYx«h«áŒË„dԦВ¬E7µß™´›’ÝýÄðþ¸Üe«’1}9ɰ"Åë·Òé åmŸü”wÜ_yG“÷™29ì"F=1’™µ“ÉJ·„&ñ²AÿFÁ+•XŠ8Œ Ê•rè PF÷ÌnnY/àŸÜ˜¢Å‰mîœÕ3¼qÏo9ž'е­M •X´:á/º´Œhp–4]ˆÙWXˆ$£Ôda”°«q/­PpøLM·4lÓ|@xb Î6–dbø,†!Ú߸Tß§uŸ¯jäϾÒÓ+)ºT9™Àg šÔÀ”½wV˜¥_`Ôk2X=Ž«Ç€ xºVÀ Ež¹¼X^Ë¥ÌHËБM_.å¡‚2 —(šœhn»V S™ÅÅäæq#r*ÅFï$Ư:öR2²{ôøüóIû Mþ˜ßýQ q&P!l86CØMê©_AM]%¼º ^ìX$_BŒôd†¼É‡:•• 2—c&+f6h÷µx Nþdn©ˆQZ:T:˜–^~î!%Oc5´‹ÃDÑL.…‰P« /¶a± 6û€ÄfÜè ûÂ0ê Åd.A9LçfÒ¿`Š÷i’ÏGÖYtA±Âg“yÌ©ª°Î¿YÜßáû;l?yS"ÍÄhðÁÝ`àŠ)°Ýgs~5=}MxæO>É ¼Ô:†À³Ìs/\Q‡Ê,1ÉDRN>YgV83¹‰¸ŽýT$.>‘VÑA›SÞÐNxC‚«¸C¹ØÑ°VE„Õ;‡ÏR)cà©-Ì&4ùZEÓ+cO„~[s%¡àŒ|²Sì#Mä—äì#þ‡ÒÒÚ ¬B6Êä╉1YI32 #Œ7…¡^Ω4=E¤dŸMÙUpÚœãΙAä#¦œ`Ê¥/ ÈŒâ('c¬Ò‹eï|[^¶uÞ0õ”YvèjÆtάžÈÒ96GôÓ6`‚cþI~ò92•1¤T€ ù²Žv±%½ðÃËh*—ÐAòM‚†bM›VÀh‡Ø±‰.ŸñY´26CËaµ")üÈ¥ð+…ƒzF眞ŒÆµ |Pu‹:ð)¹ü "å"ËÆ*«ØV±bKdJÑŒt ¾Òdq7ÜâO@IfÜ3ƒ 'á@’´bq$/Fª8Ý?‹,§÷”bY5º¯^kºþœFÉn±ð¾¯ …ˆY­LT¶§” #ïE1ú´gTÖ28ý¤×EO|.Ã2pÊÇ=% ›Å&½È‘üô%ÙB£ó:˜Ê™QrÕô’kL¡ÒU/ÛIÙGš TV½üB€ùê7ëãác¦®pƒ ‡Q2”fÃöÕ´ 7$ô)`7‰=¢ôÇô€$”ÓÌ.„ƒ ÃŒƒ»õÎ.Mc^›éõXÝ>+^a1ëÄ}9Ö!þ@4º½R—â5§™5‹uÉd]‚b/êÑ3èO½€bħ£‹ØûÎ#c,à+¢¨¡ö;âu½_øãvñØÞëâ«X:ì+:ýÌbU†¨âï_Áº×X§_ÿ:Æ‚—UøÓ‰g,„<%kB±ßKºYn=Ž^Z•â5‹ÉÍbr³j¹U‘Ûc.· ÀÝbôä­$½Ç‘ŒTÇœ–8f1‰úL¢~-Ñ*ÝŒF"® 37?ÂØ:¨;Í©[Lr6“œ]Kn‘±È$pAЙÀK‹êcNKs-v5ŒZ¤UD:·­|z»×<ó;äë$bÿiÆþÅÄå0q9µ´‘V—ŒÈ ö,zȱÿ4cÿbÒj0i5ji-"­!2ŠðR™ï?ÍØ¿˜´<&-¯–Vi=âÒÚåÏ¢~&~‹'¸|TGœ±˜,›L–ÍZ–UdyŸË²E+ÒçÑ:u=v:yïbr ˜œ‚ZNUä´9w8VØëwd‡|^#;äóšÅd6b2Õ2[dV{IIrãÔ¬6ßš±1i™´Æµ´q¶»óptdãoFÖa¼î4§n1É…Lra¢c#5kC­M¢xGÑr±Þ.ÔF®?-¨_¬“ôbÙ6bˆvÚfâ“•ød'> ðª³Ù°k5ÍWÓ…Úàa ²? |Œ­êM³a»†ïþÜŠni8ò'YéEµn`Ž Wy#ãp4 FiL×Ó…u‰ã)Ç.eÄк­ÂîQb%œŽ«ê›©[A²oúsӵưÙ0†ÉZÛ‰jÇvhKÀ¹nþ8ÐdeÃɾ°!÷HìÝëþº”b“+EìåPW pË®ëf!é鞎̣FÒu/)‘Äa’¬á ¶kÀ¿’Šp«»¿nEèÑ“T-ÊÒ(œÇX³êþ4u}h–œÇÊ]g]Ð3æ%7´.¨Ç,²!ôФ ²’6uÝòdê›Ó¦®›M¿‘E›0†ÝLÚTÚÈ9Õ{TŠõou÷×mбÇ(.6‹ÈMгz8dÓ:ü(-·›jdÝ>PŸÞ*y%ù@JEmZM¸á,EµMüÍRÔ¡3´†F†¢ºnÚî™+êhŒ¿JÐ$òÊšÙ·ºûëRƒ‘|æ9-øråEª šÕÍxeÊP‘’ŸÃX²=^llÐd ¢;¥ôàöö}Ýv$椢GR.´þˆ·ÅƶÙÔ}§™å?(Ùô×YH"ªÅÒæñµ"€DÈ+¯W弑2×YFðw·Ó¾šîvbëšc‚逘1HÓ‚¿WôÊI±.6ŽÒè}íb¶Ûí_MÛ;»øçÔÿŸöAûl»Í7còŒyg¾×¾hìÅ€Š>‘8Î`߮ңÞHM§pü1{pjÖÞù•èkÞ£­XŸf±–Ÿ$®q óg/&ü»QØ•þΩoœ8÷AâÜ#zýÏÖæçü¯6ÕTëjüêš©ýÛìÁ-Ü7¢ïÀó`_jtúuèÈü5 ?Í­nÌïù‚ÔÌ[üMO¹;ò%=¼p¡½ãÇ~ƒ=Jý(v´H›:cñ•蜆æHçìÂUèµô¤3””[ѧGô-oIÊâ[±>ÒyçÑV⌇ôb¯sЬãåæ/kóתø”›"púICÆj~VÔÃØñ–tçЛ÷!HáIìÈ#J½à_2!»JœeHg±ç#£iN<ü¬ûÚÿþ!לd»é©þ?¸Ção”:Î×c¿–JXîÓ(Ì¿Bû•¯ð€®ðžeUÿcgKgöéAÈÝ…êÌXÏScš}5h pŠOc®èÞÓÑ']þ$1ÔþÉF9?÷ôýÐó#´Hj4~ú¤y™šñL<Ë<ËÔXùÌèLy\Ó‘HÑ °sr¸ÞÖì\³óWÌÎNÍÎ5;ß!vÞˆØù’䀚_3tÍÐ_/C»5C× }º¨ñ÷Ô ]3ôWÌÐ2×Ö ]3ômfèïÓ Í§µM}ùlÍÙ5g½œmÖœ]söâìMÎÙ¿Ñø Ú~ :\stÍÑ_/GÛ5G×}‡8ZD>b]3tÍÐ_1C[5C× }ëZ¡Okμ›÷è¯ÁÎFÍη€ëÌ»šï";¯:ó®fçšëÌ»škvÎcçufÞÕ ]3tyW3tÍÐez™w5C× ]gÞÕ ]3tC̻߮š³kή3ïjή9;³×›yWstÍÑuæ]ÍÑ5G—‰|¬#ó®fèš¡ëÌ»š¡k†~W>#-Œ¡½7‘1ôü‹6Þ$ŽZ[‹n%Z_[ûÀoM͆ß\Ï[ [çk±¬ƒ¾äo&Î.ʳŽË^8œóúR¯û@°äR¯º.íÞœïZ¦¿ïWÃVµœyo2†=" ·)BPäÚ§õë¦ÃÆã'Ö¸i½2æÆÒ踗¹V¨Š%ßô>Ó:bù%š§Óë¼±µLdØQÒHÈü\ŸǤÜ!=eùlå{U^Žºíj’ )Ï@I îèÏ„°íÄV¸tòqPe}œ›qiôŸò(¬x~{‹û|Ûpåϸδ"I÷£šTL’‡I£È'‹%€Ò¦,Ò¸çéЪO¹‘›’Êߣ•E&“ùçÕ`?o¯ªæP’aGÞ½˜ËóîW…ñ†ø GR«Ê¡Rµ|ÜÍ;…ûSmzsIù„Ö$·"ÎÂåh±Yؤk{¤ ˜à& ¯‡¤ #²ImšBâü`%šð}4Wà]Wåƒ2Ï.Ë ÷yÆÚåë~ŒžjKî]È­V“y@s7zw˜cÆ|=–ežöõk¶¼Ô¨?Lî]¹õ›Ý~5I`¦žIÿž³Õ¤™¹‘²·DŽßm“Ä@ç#åö³š­([p•ŒXÔ‹ëx&ömóL¬v™¸ï7´ÊtNÏu/òλ¾Šu‰uÌ9ÿ"ï¹)ÞsLQ`\¯ã›¬Ñ­yÍŠ-ñ¬ö“Ö«OG½vÄQåp+ÖÑ1i›N™¾CŠÒ¤‡ÍÛ÷Ùð¯CϨˆÜa´ÜÇdÿã|>“¤­êï%/£µ¤5­"ÝרeÉ qñTù>õåÓÊbM«Ï_õóbɬîå¿aÆMSüĘ!QôÄÚqU³Ùå<ú™1–ýP?3öõ<3æIÚWþ© 5 ‹7ƒâ¿ªΚ‰—ÁÄ՟ݽy&N¿)¤æâš‹¿>..ÿ›ü å÷´ÞÿúY'ì Ê/°mó»Æœç]ÎÐqÀˆ!Cp•>S^ªñ/F' ŠH{ü©ž{&âW.­Š[­Æ¿ì3–MZãZMÔ¤ŠŒ6ˆÏصâ<¸tË«•ɈöÝ>™<‘V]„(¶¸ÚøV~/V-+ÌéZ¬~ Ü™‰Æ¢¬}Àv·pžõ)Çf.­ïæùO+•OºÝ›HäРuš­×à_—lL‡â”7(‘ÙQD2ën®¦­ÃÉ4 uú™uا&ýÌ:ÝHrßQ•½ï%8ŠX.Lù §™5½öÉp ­ Z,v;Tô&S> &ScÖéµé^Õí³â³Á«ÖÕ”5|¦V6l>Âí¼¸š¾ìÂ1ž>Ûçå ÿ\îipw18hO¦pd‡¼ê,çB³ÝWÝ«içh€·°sØÃ¢{HwÒÝ&±ë]¬‚‹uü#a̶»‡¬èS±½ÃŠ6}¸ÊŽlã {xM}ös÷—ÉÔÁ²Ï>ž°¢‹˜íu°ø¹ÇøPî²¼ÜÏýázØ¥ËõñÓaÿ‹6+ûýñkêÍa¿w±?8ÂöƒsñþÅ1–?¨¤Ü¸Ù«uçÕõuÐ;²3±xÕÞÆâøÈ¾šÂŸÉÔQ²Â`….PvðxÐgFhî`û®ß}I‡Ã!GÇm茖Ã×÷áökPé{x§=v<£³¥±w¤b–3‹ØŽpà!G;T´èÆwQëwñj;/pÿîá(ËÑÞÕôÕI‡2•Y‘Ì[&µ1—é¡™âxq½ñtÝpƒßvæ|;h3¡[nØÛ00]qŒ5ÚÑþ±FÛ¾kêCSl[íúN´¿øÑ~?´}¾=6Lo~Œo@@ƒmPaüùõ°þ•XgÁ|èÛ§ÉSÉŒÀF>Àż‘ `ù1°éÖ¼1ÖQJ’©†f{½öÕtïäŠqïä5}ød¹P¾f%#FCÇ_8£ Ñ^›Ûk¿` ŠÿáÓ>4±×þ:éÑô·Iaÿñ,ehÕì[§¾mkBSxœ]ŽÍ‚0„{ó5|ÀðãQÊ_ÃV ÔÞÀØ„«&MÌfßÝЃ{ù&;;›‘uj°hø„>uÀ5zÔ/¸ŠLcFT ¥ÑjòV£c{™ìAZÚ”^‡ ƒpè ¦u9ZûÒ€å ن؛=Ø“m™O²M6Äs—äµ[ä YìNÅ\fÁ_µsgûzUN wRímÂÄ#%ì+%² c½ŸVÆãðÕC°‹~:LB¢L Ò:‘\õ:¡m1mkBTúÎÊþ~‚xœíÖ±jÂP€á¾ÿlǺ ¾t4CM:h âVg5´·ä‚CA4\¿ œñpþ冪nB’ªõÑaþ{½çaØn["wïtÃþ»]Kd¾ø¼ªEGœï¤ÿee¹º²ºŠ·U(Ê£Sÿýþ›Èë¬JÞ©Ûþ™uòô¿lš¿'oY}„Áp|÷[wQÖ%o2y ›¯&4ë ‘<Ï•e×Óák ð¿Bø]ÜF‘ùmkBTúÎÊþ ²xœí™ßnœ5Åûþ×ðHH<½ä¸ãR)‰’Vi‰Z.–¦RXŸÏ93ã]ÛéùIV>kýçxf¾ÙÍøt2Ƙ/^ÌVPcwý³ií÷ÔïµKé‰ìu4¶Õ¼KŒÙÙ¿z.¶fïùܨ{)6¹dìŽ`´ŸÑ\¶.z·þû|¯JŸÅ5Ë?Y[¡u3úQ=ÒÄöggb9YɪÐúê<ÅÆ½ñHÚ¿j_ÖWu±³²ý¢ï¯ªµêÿȼ¬}+¹«7v”ÿ³ºÚØd1šñ¿’fú¿²?¿‚ÿ#ßÿ¬4.rF%Gã_Éý•õ¢úÙgª?Û9™XÊ|ÿ ýQnV~ƒôžY¿§Cµ Ò7JvýÈH›â££¹;³»~cŒ1ÆcŒ1f»ÿ?½»þÙ(õ=¥9ROd/V_ëY‘#[Ÿ³–©U_Ò†•û Vÿ^Ñ~ŽÞU(ZP=Ògq­ÔÈ£gbëfô³ú;˱Ñ3©w(ÿ©vBë«ó÷Æ# hÿª}Y_ÕÅÎÊö‹¾¿ªÖªÿ#ó²ö­ä®ÞØQþÏêjc“ÅhÆÿJ~P˜éÿÊþhü þgŒ|ÿ³иÈ•%÷WÖ‹êgŸ©þlçdb)óýƒöG¹Yù Ò{fýžÕ&Hß(ýÙõ#k mŠŽæîÌîú1ÆcŒ1Ƙìþÿôîúg£Ô÷”ZäH=‘½X}­7fEŽl}ÎZ^¤V}IVî'Xý{uFû9zW¡hA5öHŸÅµR#ž‰­›ÑÏêï,ÇFϤÞ] ü§Ú ­¯ÎSlÜ4 ý«öe}U;+Û/úþªZ«þÌËÚ·’»zcGù?««M£ÿ+ùAa¦ÿ+û£ñ+øŸ1òýÏj@ã"gTrp4þ•Ü_Y/ªŸ}¦ú³“‰¥Ì÷Úåfå7Hï™õ{:T› }£ôg׬´)>:š»3»ë7ÆcŒ1Æcf°ûÿÓ»ëŸRßSj‘#õDöbõµÞ˜9²õ9ky‘Zõ%mX¹Ÿ`õïÕíçè]…¢ÕØ#}×J:š»3»ë7ÆcŒ1æœÜÜüñÕ´ß~¿skÚË—?=ûöý?ž~þå×Óí݃[Ó¾>~üûôÍ·ßnïß¹5íññóoO<ùÿîÓyÝþßnoß>ûöÅÿ÷oÞ»5m¶o.éÿ7oÿrkÚõë»gÚîO××wŸÛÿ?<<º5m¾Ÿ.çÿwï?¸5íêêϱíÕíÕÓß«›OÏ7ÿúöïÐÛ?žEÇúÉhy~mkBTúÎÊþ~üØÖÕJþîÿlúôé×ßoß¾ýüòåËú¢öµ¯ò)*/Îåç‘Ný\®ÚϱÚoù“v[iZ_Õ±aÏJÎþ/:ùþüù×6õOÿ-¹” 92b?çTþÈ™×þlôkÎ%?·Úåöìä_2òø¯èäÏ1äBµ ‘sµ÷YäÇ5à>¾:†>Êc=1ìÙÉÿ¬þOùwï èyä^«- ×Ú¶,ýÌXÉßzèû•žuÃÐsMù#×’U]ë>H_÷˜ÀyøY’Çvº!Û‰õŒå_mÄi ÿRuâþs´]ÍXœm§_gû)YYÞ)úmæ]×y,—²¬mÚ z†1Éêša†a†axEÇß“G°×§ÿóo/ïYòÝú\êkº6õ®x„ËèíjÏægHð–ö¾»–÷óüÏØñ|†yž÷u¾Ä.½•üÿ†þó\þô³aÏæŽM&ýwéÛÃäké#Ïú$?Î]ùMço¤Œ\ýȾ,Û/íßÚ¥—ò·âQÛ@Êß~6s?)}‰Î,¹ l¾ìçœô ØgX #ìvçQç´“ög·Ú ÷Bž™òîìÙ™^Êßuô¨ã®ÿuh½à¾m?Ž}{]ŒÐ.~È}Ðv_÷ÿJ;ëxçoÌgJöëôY]’Þ³ë@¶é.ì«)™áoqC–ü¿“?}ß>@ÇûXŸÀÎߘò'-üäÓÉÿ(½W‘?Ïöú›²±¼‹ôÅÛçúÞéô‰Û ºÅºvþÆ”¿ÏëäOœÊ™ôRþœ×ùÃþvì[K?[A}¥?-ýwöíåµÔmÑÕ‘ý}¿g\=ö€c¿¶}ñ³M¾‹ ½ÃüÃgggÓêüàÖ èÇ„çÜÀô-B^ëók_g?Ìò ¯F?œ£³« ÿ•Ý×v0||ØŽÐØ=ǧH¿PÆîÛgçsì·ã/ÇhØ‘ñI ÇtýÜ~×{‘òçún^§}¶ïZæøºyDžë—óÏì·ó5èˆéÿçXÉ¥ÿWvðô¥§O)í"û±c0ÎËvYà“ØÅ ÿçZòï|~à¹_%/Ï,Îôp\€ËɹyΰçZò/ÐÉé;/x†ÖáÎsõü_é·9?ÿ«PÌܯ5Ý»\í[½ãy|ÞÙÃçõÄ8ÔÏÝøŸgäû¿ËʱL{ä? Ã0 Ã0 ç_àk3¾Àç†>´’ãøŸÛÜÆøzä«Éø_ƒüÇøü\Sþã |<®)ÿb|ÅÊç7¾Àa†a†axn.µ•të†a?lÄ÷^Cã•ßvk­¬Ø½#®àýÜ~eûî)ÿ´3<3^×Û¶¹Âkð¬dlùcÁ&·jK+›œåo"eòú<.ãÊž`›Áê^(3zÌòÏöèu ŸÁ¦lÛ+6»úßv´î›<™†×ï‡ ¾k7]ÿ/lÓc[`ýOÚöùÐn}½×çòš„«ï ‘GÊß뎱š×Äzt¸^vßä2)?;WmÆrõ5üoäcö³ŸþIzì?ú¾˜‘Oî÷zx÷Œ{¹&ØÇ!û…e¹z.þ©ü»ýüÓÔÅ"ѯÑí¤ô ¹Ý1üÖóäÁñGg×ÿí{+Ò·’×lûw<ý=}GݽìÚFƨ^ú)õ¶ìzIpäG¿•ü ¯ãKì¬ÖœÎ{Í{ÙÉßeÈï ûšG•‘12éÇÛ­¯Ïq¯§™iumf—“>¿.¿ÕþÝ}¬®Íëòœ®~žaì? Ã0 Ã0 °š[u´¿›+ð7øSvq¬ÃïìæÖ­öyÎ…ç ½?Þ‚‘}¶¡åœXùçwíŶ‘ÚvÌ?ßå°ß©ð÷DðÿùZÛ“ð-q/–?ß³ñ=¿ê<ËÌ~¶Œ›‡#ýßÙæ­ÿÙæ»>¶ÓÙFkÿŒÛ"qþøz°r­¿Qèo 9ÆÄr¦,øˆî­§nÍY[;í§oæ:)@¸-`×§-Ø7‹ü({α߯›SÒí§Ýú»@¯ÂµåßõŸKäï9èîüÖ ¿É¸“>:ŸnÁ3éç _[ÿ_*ëmt°cmìÃC>äq¤ÿSþ´L“øÇ<²?ç=÷çÝ<ò¼6Ç;ùãÇ«ôsü÷èþÜa†a†a†{àxËŒ™\ÅÞŠÝûêpxç¶?0׋¼#ÿ5žßàøzæÇÑ™ƒc¿]¦³²¡x^úêl‡ò¼ •ÐÇ(×fù±ÿ:~Ÿ¦ËÓÙ£^l iÅnç59¯³©žWÇÏ~·\;Û?vþnŽ—í»öç’6eÌr¥ßÑý¿óUbS~vù§þ£^¹÷U O7O(é|;+ùSÏéGôü4|?Øfí´ÿÐ÷¶*?ÇrŽ—÷W~Ï2ÏoÅNþ–ÙŸÊ¥ÿSþ9ÿ×~dŽa«ç˜çòîÖ‡ÜÉßmH‹6öìmÀXÿ[ÿÝJþ…ý~Îs.ãÚyœÑÿmƒ4Ù¶OÜíï|Bÿ­düžò÷ø/çøÙ˜þÁb5þÛÉ¿ÈyþÝøïUä? Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0¼.ÄP—~þ*ÖÎ1@G\⟿äÜKÊðÞßrKXÿ˜µs2â±(ߥò纎Jëì·º8”ŽŒ'>â’X@â–¼ÎQ¬ûQýb£àÚqôŽòwx‰ ìb÷)“¿ëî¸_ÊK|•‘vÎ ÞÜ1çŽÕM¼6keŸe-2Ç›ïú5ùŸ9—ó?K^ŽEº¤~‰9òϱQï±®Y®×F¹8–ëN?å~;:=J<—ïÛßþ¡-ìtñºÄ’yNAÞÇég»þCþŽ \áûNýâXÊKê—s)'é^Kÿg\~âç2}›6í}Ô³¿·áï)¹Ün]O»ûrÞ^Ì÷³j‡~†"·î{pæ¹âù29w€6”Õ/Ð.Ÿz-ví:û+ýÇÿ£ó²M{ÞW—ýûJY¹¯Z÷­Êêµ¢`%·Œ íÒ¤l9…¼ç•íž¶™Õ¯Ï#OÏUz+èÁUÿ?;îýùsŽçÜdš~vñàN·›‡Dç7*.Yç«+v:Óye;ôø8Ë}¦~éÿÝ|…·²+ÑޅNþ9£àÝÀ}•{BÆž#t¯é˜×xîãÕ­sXÉ¿k¯ŒS¬Ví›ü/Õç»uJ=oê Gý¿ð<‹Õ»L'ÿ£²óL¬ò:äD]²6Üj¬f™ògL˜ëz/¯+ؽ[{Ž™ßºrðÝCôM®Y×q¦~áè[»{y‹¼£®òÍy cÈzA¿§Þô»ô‘Þ;Óîwï„«±€Ç9—¬zÉszW¿”ûH®œóìóV‡ax3ÿ ‚ú à¿%£×mkBTúÎÊþ’xœí‘) …ˆq ĉ8âDÈ^éê>×»gI@ÏÏþX¯jjg»iЃž——Á`0 ƒÁ`0 ƒÁà?üúõëåçÏŸ|â:÷ªçâs¥¬eø÷ÁÿQéùŠþ3|ÿþýåÓ§O|â:÷2|ùòåßÏ.¾}ûö;ï°7eôûGFÔû´ž•žOõ¿6Ñþ®ö_õQúv•¦“×íßù]Tò¬ä]½^¥Ë®gí¼{>pjç«zëìåkßu¹´o{šyªþ¯yeõŽûŸ?þ÷{è-Òýøñã÷½x†º¨/ D:½é3Dþž&òˆ¼¹e«^H×õyê i#/OGôzüϪÿÇ߯_¿þ~î :ûsMeÑò#M”Ï3YŸ#=÷2û» QžÛ›ÇßЙ¦‰ïŒ[\s=Eó8´}E>¤GÈ©éTîø  Ú²Ê×Tªg-Ÿñ}×þú̬üVfÖÿé¼Ìþêo¨SVwìzV}Ñ.âƒ/Ð>¨~Ê!?÷UýùÏËßÿï1¸Åþè<ú#õîä¥þ•ý}âÀ¶Ø=þF[ þ÷~†¬ôQÚ‹Bó¡N™.ð·.+푹^edÔç½üLo+[\Å-ö§k»ïä döW‡ïÍú(}Ýýê6îqÝý$¾#³?zÐ6–éBÓ©ÍiÈïöÇ?òLüåÍ7®!ã3ìO_Q}Пuõïêoßš™é[ú=ž¥tk¥È‹ûøMÀÿ‘Æï!'}/õƇdºÐr2ùÉ_ÇCú‡ÿﲨü:—©ôéº ƒÁ`0 :8÷—ÝÍòoÁ=¸„+8-ó4}ÅÛžÂcåÄ¥XÏdq{bUþêÙŸÖq˜Â©Î®è¸âmï!«Æ¶«g*ΪòU\z·ü[ù´GAåÖ=^§+ruñü{µëLVåÕüþ çU¥?)ÿV>­Ò“ó†Î)úçx…|œYé¬ÒÆ»giôãœ\ÅyiÜ^cæUúÓòoáÓ*=£ À³Âó!óÊþÄíT•³ÓY¥µ?rfògþÿÊšûWœ—sÖʽVÙnùÔõ*ŸVÙîXù#å=ÿÌFÈÜýªÏ«’—+[¡«àFô~ÅyH«\L—~·ü[ù´ÎOÒ‡£Œhô5žÝµ¿ŽžöT§ö¿êoà”w¯|Sf®ûÜÁÓŸ”+ŸÖé)³·Î;´ìÌFå³´;:x ûëØÉÇ÷â)/ˆOSÎ y²ëUú“òoáÓ2ÞÎeÊ)Ve3'w®”ç‘gGg™Ž=ïJþ®^ƒÁ`0 ƒÁ ľˆùœ‚u k˜U,ªKsÛþçØ‘5€nYæ®,÷çbXw{ ⬿wÖ&Ýúõ™û3®Q×”øN¬ðQev× ]¨¯Æ·ºö¯gcH¯úËžçîi½÷Š{î—ôÌA¦3žéôIó8†Çh³òwòÊdÌÒu×wËÈô¸ƒUI÷äWçq”ƒð8­îÕ×çI£>+—£ñ@åì”p™ôQÅŸáóÈGcþZ—ªüò\ƪÌêú޼ÄUƬìß·]ÌÒù/ø:íÿèÊÏ3dç;É«:gB9ÈRÈôï|GW~•—î×w«2«ë;òfz†áŸt|éø+—i5þ«Ünÿ€žá«ÎŸgºZÍY|<õ1NyŬ|E7þkúªÌêú޼÷°?õ®Öÿz/k›Ü×>ä<šÏÿ=Α}NŸÍå»Î…ùžü>åuåWy­d¬Ê¬®¯Òdz ƒÁ`0 *èÜ\?W8ÀG£’Ë×ÏâY»ûÌÕ:‚ýÒÏDg«öc¾g<‹ Ìö2+²¸€îÙÕýÿ'ëWµ±6½žqnØŸ{žrèuç"w¸<ÒTkôÎ.™ô\ r¤•¾nåOàûïÕ>Uì˜~c‡#T?£ñ+®ëžyöï{¼QùÂ,,^qF/XÅûv8º.Ö©gá×3}íȸâOPùì ~n%ãhUÞG4§çø(_û…sn|W}Tg&x^cëô“,Fíý…¶Çù°ÃÑ­¸ò«ôµ+㊠<ÁÊÿ#+}/ãUw8BÎRh_ÏÊïäÑ|»33!m–r\7U9Œmêß({ÅÑp™¾veÜåwÐé[û¬úx¯ëG¨ïµÌú¿Žß]ÿß±?g;õ,çnßÒ½Úow8º]®³Òוþ¯Ïßb÷ÿÈîã?úÇOVé¼=ù¸ZÙ_óÎÆÿû£#¿veü?áèv¹ÎN_WÆÿ³Žªõ¿rÞYL€ëÚo;Žù°ŸÎ1³g²9pV^•Gµ~>™[_áèv¸NO·S÷Ÿ3 ƒÁ`0¼ÀçèÚïQ¸’·¾[ãï¾×ØÀ veO\k^8Ö”¨v<ëZbzº¯²Û\ŽáOìp¥Ž¯b¾n$~ð}¬¾Çoèz•3ñј mKã è«ãvUÆÎþ]^»i´NºÞå¸WAö»#´÷xŽë”«é‘æjßÊtÄõì q ³:£¿ÏE=Ð z%Ö…ßqù)CcñÕYµEÅÑí¤q™´®ÊyRGý-¡+u (K\ûh¬PÓ'¥Ü*^Ø¡²¿^¯ì¯ñqÚ=m=y|KóòøvÅ«eü‰Û\ý˜rÈŠ4µŸÇ=Ž›ñ{Wê¸úÝ1Òûû;=Ý·åòxÚëpû;o@>ú›”ȘéT\ÔŽý+C±“=*ï™É«|˜¿GðJO¸CÊåW]ù–xŽ1.³™ïµ 9_EŸÐ±©â ½ýVýqÇþõÊã)vÒ(ç¨ã Ê‘}Ïì¿[Gåñùw¨œŸîǺÛôã{-âƒoô½ÜSdו_ËžïÎ׃Êþø2åÔ;iT&Ÿw*ßÎwú‡·™“:Ôº§ÇÇg×­¶“SþO¡ãsÌìÞjÝêºï%Z[~_˯déÖ®·¤ñ²+œÖñô¹Ìw]Ùÿ7 ƒÁ`0ø» ë]ÏÜkÙíIŒu¾+e§L]«ïÎÖ‚ïoA^ç°î;=GR¡³?œév쯱Ö;<÷ôy‚· o$Nî1ç´ˆ=:ߥPîVãžuŸ£<´Ç <&«ü¿ê3K«yC©¸/ù4–£rÇ)i=µþ*/|ÎŽ^]ËQ¹NÐ1qŽG¹¥w>ù{å•á ?ÓKvÏå:A¶þó}E:·ÈÎ_«n+{ÑþuÿÃ=ì¯ó¿êÜr ³›÷qÍ“¾Ì³]>>ÿËdÑ}+½øüÏå|L¼…õâàõ0öÿ»1üþ`0 î…lý·Še€·ô®ùŽg:…®×ºñ¶Šž`W×÷,3ËOã?«½‘]—¾\9ûPø×î~Í[°£kOÿûWùiìGc~Æ)ãÄ-<žw¦¼.ý3qÌ}•ãž'vªuðw$V±’¬n“Ñváò(²r²ºÂÿ¸®5Žï2©½ˆS;W¸‹ÊÿkŒ_ÏKÑÏ”ó­8B/ÝÁhùèEÏÕ —'‹9êw?K;Òx:òxðº<–ì|@¶Ûc³ÄϽ®‡§ùVúàyâÆ»c÷ÿ@Û–ŽSwÍ8B•òq®Ãîÿ]û£=é2ôlBÓe6V}eö÷¹ˆž­«òRý(·ØéÃËáÞ VþßeÊöZT¡ë„4Ýûïad¢­e2Þ’ý+nñYöÏæøBõ—ºŸTq„®Sü×ÿ»þß”é<›Ãïø­[&Ï=üfÿŽ[|†ÿ÷õ÷s°zîPç)GèåèÙÁª}{Z×…Î3«³™n7ÅjþpûWó¿Îwfåtöï¸E¿wÏùß[ǽ×;ƒ÷…±ÿ`l? ƒÁ`0 ƒÁ`0 ƒÁ`ð÷á{ÑÙûô‘Á~ÿ¬ö½³ÇÒßi`oLöy„>uo©Ãßi\q‰ìKó|}ÿïÒû7žÉSvu9ÍG÷íñ©ì¯¿c¾#öÙé>·,Ïjoð­òw{õÕ†ú‡Öݲ‡Lûù=«mWèêòÈ2u_¤ö¬ÿ8د–åéŸjož?»Ú²kÞËDúøßß±¡öm¼†ýýwÔ>ôÃì#® }©ÛË×õ·E:¬ìOÛ¡O;<ÿ¬ÿsüy—›î¡Ô}›Ú›¾k‰}~úŒî±Õ|µM’†ï'8CTþ®¡¬o+¨[Wžú‚ÌöŒ½ø†U™ä©ïïQ™õýr'ö÷½î\ç­'ç’tœTY¸ÏwôŠÌz.Dó¥=¨ÜW|ÓÉ~q=_¡¾yª¾M»ÜñçÙÙÍÇ÷–¯äÇkþt§ïbS=2æû|¥Ò±Ïy´NÚ_}O¯îe×ù”摽ÛöàýðtLàœS6Ÿq`CÿíÌjfý´3–#Ëéܰ³?zÕ1 ÿéíHí¯þ]÷š“ç‰ýõ\"íWËÌÞ]åó¬ÊþüO;¾2'@¾ìã@~tGÎü:º«üªç{åÝuÊþê7m1‹è™Q]ßPWVç2ûS®Žåz]Ï¥zŸÒsý‘ÉÛ×3ÐÅ]vç‘îªÜÝxwÒžôÝ:Ú—>ÚyŠÁ`ð¡ñˆ$j¢ëw½XmkBTúÎÊþšLxœíÒÁJQ€á^Lz¿lY Ô¶²Eí2*Ãr¥­Z¨Cœ`ÂL qb¸Ìwà[îåÂc:Í#uGÇgQÌÕõ`­ýVëËꮘâüàa¸³n·û)ËN÷צ f³ìDvr¾µƒv'†£Icû—o¦:ú7[Jýo¥zuwø/á’c§\àƒmkBTúÎÊþœ¡xœíÑ1 Â@†Qï_ØYFÐÖƒ¸…I,ŒMVÐB¯±’(†,Ìxüå_ó³Tc|…6Ýz³ÿ¸³ü]º¹þ‹ö†G5.Õ¸/fêümÿ­ïs5ºó­}-òìNíH`m— 옮Öl–R‚jšq­J)¿x¤”NLu1ymkBTúÎÊþ¢6xœíš‰më0]HI!)$¤’FRˆ?6øc>>~Úsm£®+ŒvÁu…Õ‘øνYšuÌ8³´ú³uNÒ?¤WP>Ê1Js¤ŠWiVÿçü‘ý_uKðEÿ‰Ï¸ˆ/rœÌù£Âˆ_âšgK•W]×±ž™ÍEYòclÊó,[¦ŸTœYH»T¾Ïàÿ¶›ùÿíííðŽˆ}x¦÷ÇL#}A› ¼ÒâœöGüžVË7¼—‘^÷}>“iÒžº²-çøèþŸiæÿì;}žLJø°ìXí&ÇTÊP÷3ýTÞ#¯ôߨgÿ®ðJÖùl eäý'ï=ŠÖø?…͘oéçùn€í±aöëì›ô½|7ù>šý?ÇôU–%Ë;«ï¢­ü/ñmöµžN/èãI޵Ù÷fóQÖƒüz{Èñ<ÓdÌé6éd™nù;è¯ÚÊÿ¥²Q¾–mû{{÷5í$ýÀûiѦxæÿg<Æ$ò"Í^¾%=êü¯”RJ)¥žS—ÚçÍtïe/ùÖ”ë —°a};kú÷Ô_µöyµ?¬9ÔšÉlÍzÒÿ}m#¿óGßüKk!¬›ôók(Ë9êGüã1»¿”Þèz–×,­Q¿&îlÍiV濊ý²Üû#_Ö<òœöÂ3¹Îžm$÷^9g —{9&°w³&¼Û:Ë™ë‰uõfÖšúºR…÷:Ö½L+mWÇôW^£§Äz%÷I—½î¥2Ÿ£î—lo£þÏZ¶f?¾k4öW¼ÜÇ-è#¬ó­ ?V/ì—c^ÿ·!÷!{u̵ʴU¦ÙóÙ·ÿAœÑý‘ÿGe>G}þ?Åÿöþv✽Žø3ÿÉX~j½úœ—{øzT§ôA·O^ÏòʰÑ>÷³?syÊ|®¶ðßG)ŸP¦–l}¾GšN&!íSUëú·ÚéŠâˆçrúo¦uý¯Z½OŠw`Ý|Üÿî~TAc"?íŸß¯æâþî`®:׋'+ºóó©‚2ý¿÷ÿê;AµüUÿv§Ïˆû†ãðØ{.-[—÷ï¥Ãp™<°Šý_fo¡¾ßÍ£ÓÒöêð4…×Ù$œ_üjþA¡?ÛGÿí–õgkíÌÕÊxB5ªy‚-*mkBTúÎÊþÔðxœí}+¸ì(Öö’H,‰Ä"‘H$‰Ä"#‘X$‰ŒŒŒ,™QûœîžžéùÔÿÔˆZsé>U{× °.ï».Tæç}6žÚ³‘-Æ×F`‡£Ãp]Åkß…~Ãóbà ¶ О$Áwݓٱ„ÁñÍ|süñCo•›ÝA+Õq3¶¾lOàx@á(é0ða¹¯+?÷  ÜT,¤_¯7¸s\ÛÞϘ^Bl1)üCó•Ò+ÔkÛ(îFyN"8õ–dPCÌ_9ÈÒ>O0&l«4¸Im+þîënwîÛGrŰø™à»ø)/tih“f˜õÕ Ñ¸X†>ÊʨËEËÅòã)–Ô<,é6ös4ÅáÀÖ5›zàbð?¤¢Jðàö\<OM%O#(7ä6à:§= ªêýÓ‹YA£÷ƒH ¶«L s6›ÎMƒXêÈùBcX&ǘJ½te».Êöü¨Ï 3.je(”Ï?Ô?õèÉLÚjï³=€ÝÚ%wƒZˆizFTxô„$¯kPö8›E·mòø jAO™ñÔ×úÞ€«ž>~þ’†åÜàØ†‘ºéB9úµâ † Ö¤8U­«KCÃv´jbëL èåçC¼ï€y¯¡ ç;¤mj P.Ô —øãïDkñÂêwþ¡UÿE€3ôܨÁ”‘•’8xëUÀ…JÊü¹s£‰ž\„³èÉŸŽ+;}s­FãQ(KI­î÷¦XÝ›„ƨ ¹1 Ëúþ+Kú¨èdXŒ];JÄ£Žïcˆx$§DÑ×·Þž¢X`i× ì¨ëÑ@lÌûrn°m$¨Æ^×9΄ïzBGÏž Q=Ænfäk„Dêö¬e; <¨ýøaÓü>,µâ¢ž›jÆïk‡0BŸ[p(õâ$¿º‡Ç ‘ÛöÌpý4 nËËq`”XÆ“ù úvϵöèÙ.xõHnŒûorŸJ¾€Ï5¬ñÁàÿHàu©‰ñê뇗 fà§ í××a앆‰[Z:><ÇM@J£9óý¬â$Óq]¡}=H… kÐþ3ÆÊºã¯ù鲺t¿Q“=‚, 7ÆÇµß»ýìêçs Ä>ã¢3ø¶ïÞÜ6[¦Ñg•¨— RLت¨ù­?·( &wÝ.7C#~B{‚]¯Ó ×â—UÔW² 7™Ò1jk~‚e”cG»¿rËÇùÐãDØ.=ôËK´ÜîëÅ@ÝWÝDZMû0å€ãûíèä¼0Î\Úòxó®vÏqßNZ¢ >#Æ ƒ„ŒàBE— ™¥)•‚º&yØA}tå?Bûê Yìm(ÂWIpáɱò€ñ ¸|½2—+èýà\2·ö íÞ)lÜ8·ÖtlÁ@Z.B½€£ï•eñ…‹ƒRSßôƃm>d˜Iéþlþôò'N a†dÄ¢G3¹%†¼#«)?è¼Ï$sß _5=²íYÇBR#-k"qGP-Ðeþ"çf­ÁÂá%Ö©-Ï“37êÐäÌÈ8ÔM9™ÏŠŠ,¬èä_*n;H‚ÁúÆEBƱ†Öcl¿~øÎî±ç Ë[ƒŽ/saŸg¸IE2å,zÒ1Út:’kLÆÓçÎÁ¡ÍíÈ™壋G)æÔ{7ÊoðËÅnd¨ø¤è·ðá•{@rõP˜>ÆkÂwŒk×½¾¡ #¸kXfy‘ÖEÇ÷šÈA©ÍBÂ9ÂuM°ÛÞ4P=¹_Ól’ÆgW®Ø‡ÝN•Õ#–_n™‡Gï¤pp ,Z…ÿUu›6È“÷ÃV¦›Ó°¸å0EK‘7*|·ý]¯{ü75F\éÔ¶»úzQØ z!á‚Ç uH€>îÿó¦upš²ÚöõTÙ£»o3P)ˆø´[à^Õ6ãÖÚóã` -šd&á*=¶%ÄÀÊfY’<¿^’ƒØ·`_6¨ßÈ|h¸Ìë3Ø¡>€„2 Pºúqÿ×7ÏŽ³ ýÕü,Ns¾j»F™=BµŠü` ¨í³•C§òöiŽU’)Ré@LÅßÒ®„‹ÿ‰·Ç§mb<2FH“Rq°²ùF½åãø÷Xºi䎲õOm¬GAýÝ·ôÒ}:¶*¾Ëu ÄfØ:@Ê«RH™.òÙ6Âñ¼±Ã6Žjå§cæGOpO- ú­6HÒýúÜÊKÉJæÛUÀÎì:ºJǃ¾ŠýÉvÆ,¡•¸¯3ÿ‹DìZ‹¹EñÊÆ®ÒqqðìØ7p?¸ƒÈŒÞK¬÷Å%ȧ$;â¼?ýQ¬r6³pP7`¼a™†¸é^=„„ýÉRç¶_†õ™³)m£„Ç>ÀD3#£ ¼_' çIþÂÉ­uÍ‹CÁÊ-Rne㯄³²Ïóss•ÀîLÏÌ<È­/µàR)|Lt_1»éòÁ¨L¿kÇ=‹rr 4ùìê§ü/gýšEÀrþÀ~P†¦nBß[ ®\g[{¡«‡’g£ãYÛvRŸW'†‡ {Fe°m1ïÞŒ{ Ýw¾LÿÕ;7¨&$‘çþxúcÚøÃÐ0Ÿ ŽžnÝö‰óí&úÚuÅ@5sCèCÕ±mœñ8Hƒãefñï¹Æt ’Îx{q(a¿²ÛÑ‚a¡?€ŽÐþQ“%ò§ÌlÁ¬ö4ô‚¤Ï‚xmWI׆€Gí¯¦CèÒôì1ê’Ûk×QÖýŒ3iJhÜ,Çÿ€úãú‰KºšRˆ÷ÅÄð¢ÄÂÈöÈO`úÈç…ʲ»†½þ4á)ú%ˆùÔb6îB8ý\ ³pµõšÉì«e<êºíS鹂ØìÚ+ÓjsðÄpŒ„¸ß%<&t{3?Œ£¬|N)p7b™Ôîãé?Ôa¤iäDµWl’¡½ðˆX—ŸÀZÚ>;uø)¤ko)#WáÈÍSšn®cR½xô”{[ÀsXv1¤¬95‰_¬¬0KéõÁжՙ7Ú>žTp¡5‡‹¸Ù´¤l3¥Sü"ØêLXê…ç«[á5mö¡ø º¿Q="u}ö‘ÆpϘ*xböÕ‰ºîã—ã#iM+³ù@»Z! þ·Ï®~jàÒY”ݬ‘¡´Ò$?5Š• mtêuˆ] ‡%Ž@Ž÷Ý…:4h8Ûƒ¸˜¡»tuì3À;ú ΑO¤1A/r‹¿¾™ ÆÏR*5ÀÇûÿËìiÜ&j#Y2:º$Z(a­dæ@ß>'z ž„×L¬¯³¬Û뇶©½6ZÑÀ8|`Æ6Ý"åŒX1ß_€z' îF-©÷»Ñû?°úX^ò A:?1¢;ØÌh/KžVB'õ üvOnÏFSò‚¼É õƤê°ïÌÞQ{=kh7™ÀMå¯ÀwXQùpü\vïÍ“ÎO/ÿ¶.ÅöÚñ¹ ôN3·ÍHKRðÉlŠK–"›qò”‰^Wܳh¼1wtùã  h@§¬Ñ3ðe6þN|–’¶Á©‹I;yîó?8t[ƒ[é!‘ ú¥µ$,ήL­·e–"z¦å%IÞ†AêkÜÌRäl!3uú8àÚyßë?_žWÅé½)ƒAbCÒõéõOù!rz¿„a¢¤5S±ÍnÖ—£³ˆ#Â<ý43yÜ6"ª ÒRýêÑô߃C‚Qå¿&>¸[¼# BHÍǽß{v¡eà×kOÃ×TÉlq(UHð͵h »Ý”8º,@t°µöÈÃÕ‚LÛ{p´•ü‰/Ø*ËL"d_y ïŸk,4î GÌ–ýÑbD>,ÁÏ.ok"ýD;†|7–[.µDÖCíAœŸä#‰iÇæélÿü¯‰ÏŸ¡IÖ¬ÐòâóÞD¿q½]+ÞeE •ò–_«-- ™ƒ¦ Ú°c©›³èç€^ø¿¥Lô˜q±1~ëCßC“ÿ”øžC“9¡ŽgNäóýÿû“õHÈ8Bkhêç«JÁŽ#Z¤-`úVo§™MËa 9r$îÕºZ-¼hókhò ?C“$· û^–ñtÄ÷¿9d(‘8PÝ…]Ú¶š£×w[¢wléÏ;µŒd•Ôn—׆ôoÎK«èdù H¦Þ„(Dú¯…¯Ÿ¡InüIÌ Mïãü_(ù¼ðœ’îð5)6H/öõÌYÍ1‡¸ ±QRæŒk,nËÖûXH½­ʉð‘ƒÊË?>ÿšdf“ç&6³üü½^EJ–m‹ªétÞÈ{¥C—µ›½ÌC¬c`½îÙ0Ê…v5ÃÂx<äƒó\9Y·Ýÿcáû×Ðä}1Ú06"×´!ÖóŸë9êdl:'– û1H"Áz'7ùQ‡q›„¹Ž¾¹ÉŒí#KâR.ò/C“»VÖÜgÇQ×Ȭ¨åéãó\ âì`¸·?dÜÛ1y³”åuMÛ6Ƶ8ZX]8Ãø^p…ªwQëE¾ç &­1frRšÁKiûñçÐ$G¤ÎÓðÔÝœÛÇЕŒ¯ðh3'À®Âø”·“Ç{¼±š;;Ö~F öKî37Ðkš–Ìu<pöµdÊŽåèˆ+C¨š¤™ Rá‘÷Mz¹Æç¿7)nÒ€©æöÔ lEGyÍl½‡:Ì‘ÿIÞí’o±BìÞÿ—S%|ë‚ÎЕïsTuÆleÁõ’bšA}A¸ëæížÍ´þ1ãý0ÀA{ÉKù“ʘÓº¼tjÑòÇÐdLI=rž ¢PRgóûÇó_Lb¸R³£é Åžël?«â”ž)!°Ö[«‰FÂæoÖç wi&k^”CV(t@püW2Ó÷²ó{hÒxH—GRn²͉ŒeCbúxÔ‰°ªé6GÁ³©÷‘¬Q…Öd27\ÌØ«dœS‘É=\»F§f*¼0é‘Û£ÜOPúÇ5(r„Zß™xQ‘Z>¥~G AeN-õãùÿjYôÜ7—Ò¾n;ún?Ó¹"P·¯xÒ}‡·•/àNäöÞW:ÝŠ&´—×¾†Ù:x" ꭥу;†ÄRç펔¹ ®cä›…Ñ™õ±ñÜýüýElmG§a= hò¨BG_æu…³×YnZì«­FYs ôUéµ"zM&Ë:ËÝGn¸Ïuí.õDX‰ƒÉ5XnšÁ¡ö›;Þ}¶Ô«%XO?½~2&ùÝØî¸Frjj¢¢…8ˆ› yAÊÆä*±W ¡³‰€©ÒIÒ˜÷“9/¹§u‚b)õZ³l:ë sá¼¹ 8²5ÀÀJõš>~ÿi´œÐó˜I¿þ3YÏÔ•;ç:#hEL¬×[ROd‹Ê^GéšAË©fß~Y!ýËÐäEåêñn·ôü0¯~Åà/«AÝò –Kåm÷‚±>^ÿÝWY¢q†"µ¥â<цFвÎë*c¹½:xÛw„|¤Ížw­—%ýehRg°åØúæÜæd¿9ç´üÌ•ªËÃvž3Àv Dg™hç>>?ÿò3é‰hŸYDkgCã(ʹƒªÔ•ô×SÉ·†¬Ôœ|è 2QÁü94©(ñ½?OG•Q34… fëcc³¶PopT€Yaƒ–W(£>Çÿ@­tãX4ˆ`ðLG¦Ùžp•‹É„ãaïãšÅ°l\¤[9‚cû26óâU M6f,ºŠò¼Ë'›¤…žCÐÖñ4øi¥?W~p¯sÏ ?žÿk³ÞA÷×KÃrŵÄÅÎk@–Ið|>^xðs¸?ý\Õð`,DèäõÌ’©Œ°Žû5¯éWÛüÉ^£èøçw €DÓµMˆáøXf_8<%|8_왉pPó1†…ãî„WþÀlm߃˜“Šf?4žý¼»:½òÌ“_£Ô”v ûûMà;kž:pÍÖ²â_ÖùásjØŽqw]$F‡£}ÿ¢»y« ××û,b'Õè°N‡Îþ=Ôo¹öÖôÔ0, õ¨Çÿº»â~–ÆM‹ƒÄû Y•R´‰¥4â6+!”}@~u‡j°ctCÔúàõP.ÅY(ýxÿ׎ ½×zµ?70ÆWXFÜ£¾oŒ½·¯‹3z‹Š€0°®Ác8¨R£êG±¢g›0àö ¦T—Uëøò„½»‹w­"/4³ÞÖ÷¿¾îC¾Q`[{O³“ºcÈn¯]•¶+•{Û{­ç¼ÞÕÎ N!3•<®ÞÇVí‚ìyxé,!C æ™b². êlfÖ×åÁø'„ÒÁ\ ןÎÏíãëgu,μ·¸šw-/ôß3Û¥ùºñíN°íâX(›c ƒŽÓâoõMDð‘sÊ¢a·#ü#0{c ÁÈÀð%µuDWCB¥Z€AéÍZ6»,Øçûxý (Z%‡±µØçw€ÑÀáŠHbhTb2ùþ<$÷Æ*cÀ¼ænk÷³”_÷וð«Ð÷¿#{D+B<™!âÇüS/¼gÿÃ`ø9”­.^]ŸÃŸ™ÆCíÌ+>™ì3ïƒ+•ý5Æë]¤q‡„Äp¦j' r¯9µ¼FDȬ)~: ã躟—9GmÜì“x2’¥ù-?s–raG"yvU³pa;R«çãø÷ăœ ÌAŸ\&ú¹“ ÿ?#Äìn Ûí0Úee½´“d~o’qå¶­¯!!DzP^H)>¾oµëÈ‘.®Ä¼‘Ô¶=Hy»7´S´-M½ á?Þÿô8y£c¶Î™ß§q„|Ü#Þ5"ù2Б ‡lµm#—ýU‰ÑÊ»ìýeüΤÎV†ÎÈbMƒ¤Í˜÷jAÌc7¾Z ä]> 4½gbö Äýñõs 2WRsKgí6Þæç 's8qzñTT[”R›[wÄÍ)I‹—9ø5x¥ŽÜWjýÚ #”!nN+zP’ÄÚ”â ÁKgâ²ÁÞTEŒ,ÂÁùÇë?³¥{é^R¨DÝ¥=´R¥u^zîc¯’§³Ì¥&D¼‰'i74øSËJ½ß”í&H¥æU©Gà»[û‚ácrÃͦŠ<ú’‹¡׿~þ‰4}Ú…žíh¢°Î;¯üòlpAZð´%’XÔZ;t®Q?„±÷÷žóy™ïk1+Ƴu6Â[«©ÌÖè† áDõ™c4¿ÆœÚóÐÝ*d„•B#!}Þÿe>Çsamh¡¹ÿêG3c^çæ—8u9󼵕⸈߂ÏUéy‡‡B;f "Yi=ÖD§ =Êâ‚Á4‘íŠ&¡Ž’Þ×|¾Cý“Ò3»Ä÷šg]Ø~üþ›WgjhSIXU“‘"1A5Fr4×{üáÜëAä—éljŸw¸TðÎá–Ýt6<ï/NÁ  \û¤õó«R¥tÇû˜a| Æi¨ÌÍ>‰T.šWo>>ÿxŒ•ϯ¼Y¼æÈ{ç··m,J²{gg}Év~)ê]Ñæs!?wøè÷X›‰æè˜G—F°¥l!7ކUœÖ|Cnáfï³…:.@mq%®Á臔±ÜÿÓRu?.–:¯èaBë¼ÖºÌÌE#Gƒg'yX«Dåÿu‡SWºä™ÇŠD)Œ˜21×ѵ‰VµˆagW¬àP޳²q½ç«ÏÈ’Ï Ís”?¶•@åg")ªíªç©s\ÖTòâô{Þê«f3g÷‰oÑþÏ^w:^ë¼"•Ý{¹ªd#³!φtà}©,nÆyWFKv„X”4–ƒ|<ûB+ è®Â8ˆi=-;´³X 5l=/xlêóŽw•–å÷n³]ì à+SÛÓ¼,{Õž¯/ДâV¡û»+<< ØÌ¤®Ào ŸâÞçèÔ‡eNpù^Oÿþ¼ÙùŽOv qR¶ £wHF3ûÝß=oý;ü`~k’RÏwCßÏí²”u¦ãk¡jE˜|û‰qÏ©ŽÔ‚KV,Ï àÏ*?ÞÿþxkáÜ}QxÁU¹éœ/MÛüÞÄÂá= ¤Õ°pý¾Êæ=çŠÎ^xúBË÷ÞÚKx«§Ó@ð[òÎI™¾ÔYB]Tª¦âž™çÿúÑKqÉ.á½€PÖÛwÿ¼ÃÓAG\ôšWÂÏ‹Øâ9ùãÏ2S³—åA\è“Y\œßy=ǨðGj÷¾ÌéÇõÕ¢ÂMî@âŒtÔ‚¶„vD¾üƒzÎ+²ÙÌBĺ\·Ÿ¬ü¼ÃÕ¬…÷Ùë6ËÛk™6Lþ¸Ê¦ÚRß_rýnl|UAϯ< ¢¹Ë|¦²!‚¸;ºÁ8™_1ÜgésÞùÆCŸ‡ÿ¿ä >êVB‰~æ,¶¹® Ë˜_ÿ&f™äÕjpñ/WÙÔÊwaùO ¼š°H 3ÉÛûþ¾I`˜ÈòuØù»õ¸1êͤÉû·ÈÏ÷ÿå+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò€ÿÝš™w)¦÷ šmkBTúÎÊþÖ÷xœíZûoTÇæèý¥RT5Re#UU¥FQˆT5ÔVâY«†P,Ê+v±Í£œ ;¶);8Æò›LpâPÔÚPRÒj›òt°16¶×Þ]ŸÎÌîšõæÞ™3sïîÝ%ç“>Í̽ó8s¾3sïÎ]Ø»w?¿½ìêü‘H$%ä{%‡×v< ì8¹FJ¯í#ýã¯ÿèXÀ’×ZV8Žú=˘ìú/xó¤eŸG“×÷Zk+^8ž #£~ðýQùÜhß_°¸p"׸ÿƒU+áJ¯_J®wl9‘úO©x ~Z=Þût ºMZÖ9ømfš¼¾×Z[ñlK ùüPÕ|ÊëþÛkÏAQÕÇ0Ì®u],1p­e9œ;¶Ö¨ÿ}•«…¦·{}¶¬([+êü&ë´utŠrBõÏyrZ›OÎDÇ@Úêa±ÍÉëñú^kmÅö£ëa`ȃÃ~¥ƒár4Û¬7꿺âÂwû|¶Ü¸åmQg`8 làåDéÏ×>×>|@鿪 ¬*v³=“¯—_(f{ç°/ʳt᪭¾²Ís­­xºy#ô3½›?ú>ø8~å{Aÿ?œ>¼Ñ¨ÿæ†Rá£ûý£¶\¾nç7è†þ/¯;¯¬o‚çµÁKoŸ‡Œ=ŸAá‰pèÓÛP[Ÿ%4ç)§ˆ%?ñ€™Wúò“°8{»˜Û2ölÏX[3–UÂ/æmƒŸMÛÂÖÌXh=1ßòzi¬¾×Z[ñDãfèì §Vì8Sc_§ ûI³µÍžÇc\½®½uò²ú/ØówÈn½óZïCîù‡°ûÚch¿5×ûF…ö|­sÝ#± 3¯´eG!3¯Lèß78&ØN£É}Çë¥/;æ¹ÖV+«®ƒî#Œ>èbäe7ôëCxý~ÕlýŸ¼Mlý‹õ>ë‡"xz¦µDk^éK›aůЉõÏùÚúxõõøõk;á篖ˆ}àÁ£QXñ§w!=³És­­Øô^!{Â=   ''–.] ¹¹¡ß¼œ‘‘!RLÿçåBÇÁ_Â`o· Ïþ×waˆÅ'öl«¬ƒÎû#‚ÿ½ïƒm»ÜÑŸkz¡ó‰%¿û“Œ‰àë_[ÿ%uõf¥ÐÿÎCöæ0'òìý6+¿¦.‘ÏÉ+Öí/f¶Z¯ÿ3—n¢E‹ ¸¸òòòD}EEE⺪ï_nÖÏÃWWš!‚ëÿüH\»ÓuFÆ‚0ÈöÂò:áÇ{}c‚…åõ®êÿõÀ×£J¹ö‘|„Úú/Þ9ÕÂÐÞÕÍÓ_(ÿ r͹{`êâäü¾s æÏ!›-8ì Šu>þ|\óüü|QƬÿ G7C}þ÷ÄþÏóœ<ϯñü¨?(Þ•ßøK=¼±½6q†ónèêØ¡Ÿ€…U( çÙºÆøˆ]ãuuü6õwÕ°®¸Vp}qM8e,© _g×&òµ¬þϵ¶ôeõèdqjõÞß;àuæÌ™™™™BsžÎž=Õ÷‰Ò@ »‚ƒŸÁõóÅðän+Ë_†ÀÝZqÏ ŠÈ)®Ÿô{9§ÈýÚ%ôgÓ€ÀcÎHž¥mÝÃ"ÏÙÔ¸KËo¯ä†© w ¦‡ÓH>}A¸¼àé5^ßk­­Xµ»¾º7"x3&}ÈÇ5Ÿ5kdeeÁŒ3D:sæLÔú?¶íûè€`ÿ9¨Ûú"|°ûe>jgúï Ý ŽC 0+ßj˜tþ³ò-wôß{`ŸÐ(À^ež¦QùÜéÞýûùQÄürHçœ_ž´zDz²òK¶´†ÎΛBóììì ½yÊc`úôéʾß/zŽé î\­€ ¿#Èó»5¡{ãã‚¿ßÒßÇÞ|cã°”•Ýп¬ªAèïaä){¤=M£òïT5j^Sç–>MÙï½¹e"åL•X°"×{Ú´iïÿkÖ¬1ÁSUÛ¦‚ç ÿ?; p» ¾l]ç‡n”ˆ{‡Û>‡ÊÆÈ/? ‹64L¢ú—T¼¯E¯}ý¬1òþgE~Ï´ßdøþGôޤ?‘H|Öèõÿ‰ÞòâÅ‹D"ñ[J¯Ÿ?D"‘H$‰D"‘H$‰D"‘H$‰D"Ñ=zýÿ¢·$@H6L™2ÅkR©î?+ûùµíêxhcí³³ßª>æšlþ²±íÚ%‹?í´-[]ó2{Tö«æŒ™¿i_ÑýÉbÛ±õ¬ÚÚÕÁÚo…xÛi¯²O÷¾J37ÇRµ3]“ªúº6èÆÎXn¯)«úXûuãW×ݶXÿéŒk²ÎMÇwj¿Õþbº>1ã›ê˜ÌúG×qª½îønè¯c n뵫?f?ÒßTÌ37žö;ÕûΠzwÁާ²óŽ$»§z7rºíîcžñ²_·Žûu篫½—pcï'LF*ø³7@ !±HõŸh©n¿×ˆõ/Û1QöèŒeWÛª^ì}·üã…o­l]³ËÇرTõâÑþ±Zsnk—‰ÿ¢ãÕ*~uÊv±oÕ¿*Ve}ØÍÁ®Žê¾j|™Ý:{’]{ŒÿUöcíÙ‡m'›ƒª¾®ïcï»a‹Ž :{ªiŸ:þ7Y;ª:ºs0)ëÆ˜Ý}ÌúSé“Hý#uœì!ñ~.&B'ãGê`}—Lúc׿n:÷UõtúÇh »ÿ;‰?¯÷§öÙ!ëOwÿ‰n'Û›U¾‰^DZyUÙÎÌÜeý›Ž©óŒÒñª}ìø&þ½žÊHuû @ @ð©þ{:Õí÷˜ó=Ù9S<ìÑK×.¯æegG<ûvú­ÁäÜØ 8ý>¡ÛÎˈwÿ²1Lãs¶Ž)«Î¨Uë4^úËÆÅ~°+ËÆ5_Õ¿©ït¿-ØµÃøÈ®¾®ï0Ðωýv}bÇÂŒo§kÇÔ÷ºþ­?]Û0P­/ÕXN˘ëº6êöÏönù+k_ÕÞkýMÆ·C2è‰_§û±.©¿îó³×ëè§zVé´½®š[ì{ŠU¿ve;;ÜÐólQ=;MçoÕ^õü³óÆ>«{©Œd°?l xÌþA «g#­W@ „ÉHõ÷¢T·ßk`Î÷ùþ¬;æü+UbÄî¼6^gyª>MÎÝ€“ï˜óód†Û:ë~ëÀØbwv{_UVÅ5æœ[wNª~MìÇœß댯šöÛƒlÿÃúIÖ?¶ÆÇvõe6ÈÆwê_Uk—j®ªñt×/ÖV§úë´3õ¯“½Ë®®[ú›Ú›ª5ѳ?`à¥þNÆ—ÕOýUpsý›Ú «§3G̬ÿ˜½ßIºö«îaõŒmcK&ÏÙø²½ób—W•íìÀúDfŸ[ö›ö¯Ó‡Ì6ŒFVmS©n?@ @ ^ ÕO§ºý^s¾‡9‹tÓ±Tçkvu’V¾ŽçYžÎYu"}èäû„êü;Ùá¶Îºß*0¶ÈÎØuʪ¸Æœ‘ëÎIÕ¯‰ýªówÕ«;'ì· Ùþ‡õ“¬l;ŒíêËlïÔ¿ª2Ö.Õ\Uãé®_¬­Nõ×igê_'{—]]·ô7µ+66U1j¢?fÀÀKýŒ/«Ÿ ú«àæú7µAVOgŽ˜=X7þ1{¿“þtíWÝÃêÛÆ$–Lž?²ñe{3æÄ.¯*ÛÙõ‰Ì>·ì7í_§™m¬Ú¦2RÝ~@ !Žø?Û†cÛ‡­^àmkBTúÎÊþðxœíœÙoEÇóWðÐ*ñ_T¼  !„@ ¡Jð┣¨/¨¤QÓ–6-½£‚(4-¼¤QÕJI[¡ŠT½ ­{81 9ç²ëx½»?fÆÝjlÏcÇ{ø÷ûH_mfÇã±ö³3ëõN ÇŸJã¹vífGúQ¦.„û¬”&âvÄÀ-ùù<ϸ%ÿž1pKþ#<bà66þ/~ÿ\(ýlýäÝ@iåûÿz÷¶µÊ9ÀøÔ3ïÃΨ½¶Üÿ ÛúaóWgàÅígaó—¿Àk;ࣃ—açé[0ü׌È`ÏFìÝ(üó-ORü73`ðÿþÀ|<8 Ÿ_ÈÀ¶óØõûðãè\H­@z©¿u? V~¬Â@móc,·ÅþVú_¯ù¿™óƒÿªñÿÿðá+ÐÉÆÿå;³põŸ9ø©sƒÌœ„Sl{ê› -ÿq™G0ø>òÜYeîlX,[°\.ÉíÏ<Ú!¶Ó—>Ü-ù¯÷ßÑÑQ¿ctñÐËÂõl©>YÆæ>o®Áš1Ë:éÓHÁÔåÏÿF>ùonüëës^þç˜ï9`žmçŸl³l»j– hÀ`ßý ½lã!\ï;°ƒ¨Ücõïó Çè×ÞW…ÿs½`T¶Nx9oP²VÀ´çY']P6§a¨o‹–‡(Ücö¯“Ÿ¿}]ø_.,•«·<æ¿l/m¦&º¡TÎBÏ‘ølÄ?Ýÿy§¯ûMá?oªcØE°ì,@f?»ÿÏÀcËm¢vF0ø?Ôõ–ð_´XÌJÖ¬JJ¶ ä¦ Óì\(‰ý¼MÔnÈÿúøïéÜãÌ¿a=‰ l¾·Á2Ù÷½Ù“,}Ìý»þ³ëÀ“zÞ&j7ä}üÜõžÈÑÞà«ýO÷2çÇØ Ài˜ºWú·Šú®¯ß©JÔnÈÿúø§ ù§JrýG½~ºMµ×ÀþGFF(ëò;Iòõµ²Bþq‡üãùÇò;äwÈ?îÜ!ÿ¸Cþq‡üãùÇò;äw’è?k%Ú&IôOTÈ-LÁxê.ìÛ‡áÜ9ž¡º Ôn†`ÏÞc¢-ùO.Üÿw~€ññ”v[Þ†·%ÿÉÅñß(ä?ÙÈþ˦©ùO6²ÿ|¾¨NRýËÿÏF„Ù—²ÿlv¹.ÏoÚ¤ÜÏÃIª‡0ÄÝ&3_îÞIm'éþäñ©štÊnc]õþQŸ²ÿ»÷þ}Ù½¹ž‡Ó.þ9~>jëTåÚsÂíõQ{wýý™‘«ÊN8íæß‹ þýÊqó2²ÿ7SU®yÙ‰j?‡üë—ãêÿú{"ܱó·œÚý¬þUãX§—s@å?h8Iõï57{ÍÑnßójÛ¹•UýE VÿDòòÇÿƒ‡u÷÷~ámȲáþ³ yؽç0?qF+Ý»Cfzü'îß² ØßÓçÏ_ª _ë¡ÚÏÃÛðöä?¹ÐúÜÈßÿŠÅÒÓg{3³9‘Ìä<¤RÓ"ßIíÛ÷Åo7oÝmȲqõ?³(299ÇÜO‰ÿ£Èá>þE2™9iüOÿ6Ã}üçD&«ææÿ6ùo'äûÿѱGZIòý#?»ó6rüêå×ÈeU{¯×·îai…Ýÿa÷ôg9£Þßwöî;ŠæþÏÍwÐz§ìÕÆïýZÁÔt²¹UÈ.æ!Dz¸T€¥åǰºZ„|¡$® kke(•*1 Êeûix{ þ9^ã[U¯jïU–ß#,È0‚øô«'ÿ±‰@çøëÎånm‚–iþo­·ãë5þjçvÕß:ß½ú kÀê? b²ä« ò^óB”ÜÜÜÜÜÜÜ`õÇ{ñ(Àê_ÆóüWhæ÷ûÚçò~Ý>¼hfýIm½S&ÿÕÇG§.ÈúÕy¤¿Fúשw>#ù÷>†µÇËkòw3ÏšYâÖù÷?F~uµõAŸã¯çø×ùL2äßýé¬Çðóԟ׵Ýëu^°úòÊ«Nu½÷»þ™ÿƒÔ¹õÓÈ÷W¬þ‰ ä7ä7ä7ä7ä7ä7ä7ä7ä7ä7XýY¡zÆâ÷ìÕ­m\ÁêŸã÷Œ\çùšSN‚s¬þ½ÖH¨žÙú­ÿ¨}}RÀê_…Ÿ?È?ùOXýû­³ÑYÿáWg°ú'*ÜÜÜÜÜÜÜÿhˆËïCä?¢ô/÷MþÃ'.cŸƒÕ”ë?üþݯ_^ŸKwVÿ*a¬ÿðªoäœÑù|ªýXýGµþÃÏ¿WNÿAûÁêß븴êù³sƒNÿäŸçu:ý`õöú NüÖè¼&hXý‡MœîùdÈ?nÈ?nÈ?nÈ?nÈ?núÿßÉ_à“Óy½mkBTúÎÊþúxœí™ÁnÜH Dóÿ?”cþÅ>ÄYää”ݹY¬"£žiM=@€­n’Õ"›µþü1Ƙ„OŸî­`ÆîúïÍñùÝþÏ®ãߪ.Æ~uþ•õ?:Ñ:>Þcþ>“*νò°SþQ½vŸoÕ Ž=# }Y¿:Öo¿²ý7ó“õÎÌ?Z»Fe<»ÇΉÖÄÚ+Zºµ‘勯Ô%ŠÅúWô)¾2è~ÇVÍ?Ú¬Ff,ª6?ˆi«âUýƒÕ†úÃYùgéÖîŠü3óXÿ“ý_Åbâ+¾WÏ?k;É?³ÿ=Jî£þõ–H#ê“qµv™ß Ž¶h>c_ÅG>»öDZÙ]ÿ+¬Áô@{ÓcŒ1ÆcÎd÷÷Ýõßæü E)¾U]Œýêü_éÝ]9KîœÁNé|ëXÁNùGõÚ}¾U/¨Î¸ªó뉾Î÷‰È­#;ëÏüGcÇ¿³5°kTƳ{ìœhM¬½¢¥[Y¾ØøJ]¢X¬EŸâ+ó‡îwlÕü£ýÁjdÆ¢úgóƒ˜ö·*^Õ?Xm¨?0œ•–ní®È?3õ?ÙÿU,&¾âKñwõü³¶“ü3û_Ñ£ä>ê_Qo‰4¢8Wk—ù êh‹æ3öU|ä³kÛ™Ýõ߸ÂL´71ÆcŒ1æLvÙ]ÿ½aοÐY”â[ÕÅØ¯Îÿ•ÞÝ•³äÎì”ηŽì”T¯Ýç[õ‚ꌫ:¿žèë|ŸˆìÑ:²³þÌ4vü;[»Fe<»ÇΉÖÄÚ+Zºµ‘勯Ô%ŠÅúWô)¾2è~ÇVÍ?Ú¬Ff,ª6?ˆi«âUýƒÕ†úÃYùgéÖîŠü3óXÿ“ý_Åbâ+¾WÏ?k;É?³ÿ=Jî£þõ–H#ê“qµv™ß Ž¶h>c_ÅG>»öDZÙ]ÿ+¬Áô@{ÓcŒ1ÆcÎd÷÷Ýõßæü E)¾U]Œýêü_éÝ]9KîœÁNé|ëXÁNùGõÚ}¾U/¨Î¸ªó뉾Î÷‰È­#;ëÏüGcÇ¿³5°kTƳ{ìœhM¬½¢¥[Y¾ØøJ]¢X¬EŸâ+ó‡îwlÕü£ýÁjdÆ¢úgóƒ˜ö·*^Õ?Xm¨?0œ•–ní®È?3õ?ÙÿU,&¾âKñwõü³¶“ü3û_Ñ£ä>ê_Qo‰4¢8Wk—ù êh‹æ3öU|ä³kÛ™Ýõ߸ÂL´71ÆcŒ1æLvÙ]ÿ½aοÐY”â[ÕÅØ¯Îÿ•ÞÝ•³äÎì”ηŽì”T¯Ýç[õ‚ꌫ:¿žèë|ŸˆìÑ:²³þÌ4vü;[»Fe<»ÇΉÖÄÚ+Zºµ‘勯Ô%ŠÅúWô)¾2è~ÇVÍ?Ú¬Ff,ª6?ˆi«âUýƒÕ†úÃYùgéÖîŠü3óXÿ“ý_Åbâ+¾WÏ?k;É?³ÿ=Jî£þõ–H#ê“qµv™ß Ž¶h>c_ÅG>»öDZÙ]ÿ+¬Áô@{ÓcŒ1ÆcÎd÷÷Ýõßæü E)¾U]Œýêü_éÝ]9KîœÁNé|ëXÁNùGõÚ}¾U/¨Î¸ªó뉾Î÷‰È­#;ëÏüGcÇ¿³5°kTƳ{ìœhM¬½¢¥[Y¾ØøJ]¢X¬EŸâ+ó‡îwlÕü£ýÁjdÆ¢úgóƒ˜ö·*^Õ?Xm¨?0œ•–ní®È?3õ?ÙÿU,&¾âKñwõü³¶“ü3û_Ñ£ä>ê_Qo‰4¢8Wk—ù êh‹æ3öU|ä³kÛ™Ýõ߸ÂL´71ÆcŒ1æLvÙ]ÿ½aοÐY”â[ÕÅØ¯Îÿ•ÞÝ•³äÎì”ηŽì”T¯Ýç[õ‚ꌫ:¿žèë|ŸˆìÑ:²³þÌ4vü;[»Fe<»ÇΉÖÄÚ+Zºµ‘勯Ô%ŠÅúWô)¾2è~ÇVÍ?Ú¬Ff,ª6?ˆi«âUýƒÕ†úÃYùgéÖîŠü3óXÿ“ý_Åbâ+¾WÏ?k;É?³ÿ=Jî£þõ–H#ê“qµv™ß Ž¶h>c_ÅG>»öDZÙ]ÿ+¬Áô@{ÓcŒ1æoðþþÕ×_Ÿ?ñõÄ—yn~ýúí뉯ïßúòåëI¯·oÿr×Û‡¸¾ý¯åa®·Ç¸èN®Ƚóÿ÷óÿúòN]//ÿ<Äõúú@×Ëc\ƒçùQ=$…ØAõmkBTúÎÊþþxœí™AŽ7 D}ÿEv¹@.áeîâY$Î ²2²rb‚FW±TTÿZõaæC”Tl~¿ÅoßB!„òáÿÃYóߺÑõ³¸ëÜŠUu!FômÝïÏ,=WÃü=óýÿ¹žbSiBk+}Çõg>VgÏÐçΟé?›;þÏÖíªçsfœG =*Êz¦oVþ²ø)úªýULß™ËJ¿ãŸ›ûgëGôt¿HÓvGü™>ŞŦÿj¿QÛÕâ?bïÌWvWûß©³ë7ÿGkPuž7ŸfÄ´þ£ßj ©j£Ò êc땳™ªJuöwýG{‡ç“8ïEr<„B!„Ân8ïÀìþ앬ú.ÄìþC÷¼•žó×½ßïöØZå^¿“¿jÇít{®ÿjÙçHвžé›•¿,~оjUÓwfçIJÒïø×¹Vr}î~ÿ¦íŽø3}Š=‹M7þÕ~£¶«ÅÄÞ™¯ì®ö¿Sf×ÿnþÖ ê<'þn>͈ÿhýG¿ÔRÕF¤AÕÇÖ+g3ÿT•ëìïúöÏ'qÞ‹äx!„B!„ÝpÞÙýÙ+YõÝ}U]ˆÙý‡îy+=?æ¯{¿ßí°µÊ½~'ÕþŽÛÿèö\ÿÕþ²?Î#e=Ó7+Yü}Õþª¦ïÌΉe¥ßñ¯sÿ¬äúÜýþ!=LÛñgú{›nü«ýFmW‹ÿˆ½3_Ù]í§Ì®ÿÝü­AÕyNüÝ|šÿÑú~;¨5¤ª Hƒª­WÎfþ©>*5ÖÙßõížOâ¼ÉñB!„B»á¼³û³W²ê»ûªº³ûÝóVz~Ì_÷~¿Û`k•{ýNþªý·ÿÑí¸þ«ýdœG =*Êz¦oVþ²ø)úªýULß™ËJ¿ã_çþYÉ!ô¹ûýCz˜¶;âÏô)ö,6ÝøWûÚ®ÿ{g¾²»ÚÿN=˜]ÿ»ù?Zƒªóœø»ù4#þ£õývPkHUU[¯œÍüS}Tj¬³¿ë?Ú;<ŸÄy/’ã!„B!„vÃyf÷g¯dÕw÷Uu!f÷ºç­ôü˜¿îý~·ÀÖ*÷úüUû;nÿ£Û;pýWûÈþ8@zT”õL߬üeñSôUû«:˜¾3;'–•~Ç¿Îý³’Cès÷û‡ô0mwÄŸéSìYlºñ¯öµ]-þ#öÎ|ewµÿz0»þwó´Uç9ñwóiFüGë?úí Öª6* ª>¶^9›ù§ú¨ÔXg×´wx>‰ó^$ÇC!„B!ì†óÌîÏ^ɪïî«êBÌî?tÏ[éù1Ýûýn€­Uîõ;ù«öwÜþG·wàú¯öýqô¨(뙾YùËâ§è«öWu0}gvN,+ýŽûg%‡Ðçî÷éaÚîˆ?ӧسØtã_í7j»ZüGìùÊîjÿ;õ`výïæÿh ªÎsâïæÓŒøÖôÛA­!UmT@T}l½r6óOõQ©±Îþ®ÿhïð|ç½HއB!„BØ ç˜ÝŸ½’UßÝWÕ…˜Ýèž·Òócþº÷ûÝ[«ÜëwòWíï¸ýnïÀõ_í ûã<éQQÖ3}³ò—ÅOÑWí¯ê`úÎìœXVúÿ:÷ÏJ¡ÏÝïÒôݦO±g±éÆ¿ÚoÔvµøØ;ó•ÝÕþwêÁìúßÍÿÑTçÄßͧñ­ÿè·ƒZCªÚ¨€4¨úØzålæŸê£Rcý]ÿÑÞáù$Î{‘!„ãýý—ŒÇÇ?gl<ÂÞ|ýúWÆÆãË—?322ßa¯¿~þ}¡ñÇãó?ZîßùáÇŸàßûã“ø?-þŸÞ~[f¼m>ªø¿}zŸ=þ ¤éWz¨·¡—mkBTúÎÊþ€lxœíœÏk]EÇóHÿ¼üîDpáB\HSS%C´F´jÑ…E6¢`°ŠþÝAE]¸éBò;éBülÑ.RŒBƒéKRßܼ›ÞÞœ™9“™y÷Ì;ç _Þ»3çž;½ŸsçMï”ÜþãÏšÕ­[¿©«W¯‹ûßFî bÀÕû§ï—¾oûû¦ïoNîƒZxŒýââ¢ø˜Îµ„}ü:È©LüG.ü¨§VÐÖñMß{*Îi.Ðã\ZZ:âÁÉ%õÂØ4Ú:ÊÃÙ9Ô€‘ÿ›¿ªá×>Q¿oí;­ãt|Ó÷;¦ßž;´O_n5 Ç·¼¼|ă7ÕÈÄLÁwg·ãö¾zÐ>øÜÙ}Øù|xð½óyzâSÕzã&˜§)?qâDÐùšm)ýÝÕn3å0ño½þ‹ú¼à?Þùmù½êùñ9õô©ÏÔ“Ï}¬¶wöÔý}µýß~7؉wñ¨:'þ%k¨ ›j ŸÿñŸÔØ»³ÿ¶÷ ou?«Þº¿WĵÆNÆ¢ þP —=åÐcZYY9âÖ«ß«³~}øükŸ9ÿ­:ùÖ5õì™/ÕS'gŠy`óß]uöƒ¯Tkì;0æµWûKCmõó]ñÐuM¹0†j@·ùæ)M­Œü_¹¡&/ÌüïþÝVu}·ëÃï[m5ùÑœêÄûò‡Øú´cbMýMñ§VFþ£×Õ;Ó— þ·ï=Pw6ÛêŽþ¼×>ø¾Y¶µÕ¹é+jhΛ¿‹'Äß6Ÿø²ï·ÐãX]]=â¡—.«÷/Î>ñZ÷³ã™ùn{§íðû|'þ ˜Gßo¨ê+MíÕcW¬©kìúï8¹KS¨ÿgÎý †NS¸Õý,¿·FºÇ#Út<–s(L¬O.ÿ*gS{®5`âÖéKª¥ýâ%+o몡vL]Ôc19Lç¹ø—öéË­ôµ×ÖÖ@0ŸUCÃ_<ú,ÜùûÞðlñ©­ãL9Ä87U6þâÞ×@¯ë@øÓs/k@_k}}]L̽š „?m§þ7fÂ?§¨kccCœ™cþ;ð¦ÿ,âfë¨é1ˆiðïÕß9Åt,üy[øóvÿÀÀÀc.ÛªçTÛM}â<\åob'üûסüëýÂ?/Ûæsáß¶­ÿ|X›Ö bÚþ¼å=þy¹¾þ3ýþ ÿþ´¼ÿámáÏÛŸ·«ü ütâ\òñ“ðç-áÏ[Ÿ·„?oùò/ßñ¥RêüÔU}ÿê:®÷Aylùµóü§æ“{þPÕÇç{ìÓñ‡j:[c¶~Lþz[~S¬éÜØµ`{v}r`Žmym16þ®û µ™¾cúMùmñ¶üÇ9Ž­ÐºrÕ(¦®bñ·å†Ž]¿OØü¶¹Ãg<˜ca~Cë‹Òóï;>×ù>ù)òǨWü]90φ¿ÏxŽÃ?åüy>S¬bžŸòصþsýö˜æxlÌÚ•4FÛŸ#–\vŸó]Ç®{ƒ9_Þÿð–ðç-áÏ[Ÿ·„?o Þþ¼%üyKø‡)ñ«ää¢Ê_ß×”÷¶Ìzú¹±òöJTùk¥º³y vê5@•yßbß?l>Ìó‹áo:¶Íõ¾z=™Žmç˜ò sœ-Ö§Ï5`Xùä·ÕCý\á?OLþ!ù¡ïõ¹‡2ÿk¨ù|¨ñ¯Š"ÿXë³ü¶Úóá½¶Šï'þÐÚ'Õ<àbŒaaËëÊYÿaÆWǬ©ÏÿT»›–ðç-áÏ[Ÿ·„?o Þþ¼%üyKø‡)÷÷Tù§xç彎mo5‡Ú Ê_+Õý‹µ¿€Ù ^Tù7½ÿ‹y~±ûC¾sôß4.ìû~S~áo޳Åúô…ìÿBãÀîBõ@}ÿ¯TÓüCòÄä’ß´ÿ›ËóŸjß7uêü«¢È?Öú,$¿kï›{-l?ßOü¡µOªyÀÅÖו³þÃŒ¯YRŸÿ©*v6-áÏ[Ÿ·„?o Þþ¼%üyKøó–ðSîï¨òOñÎÊzÛÞjµA•¿Vªûk³?@½¨òozÿóüb÷‡|çè=¾i\Ø÷ý¦üÂßg‹õé Ùÿ…ÆÝ„êúþ_©¦ù‡ä‰É?$¿iÿ7—ç?Õ¾oêÔùWE‘¬õYH~×Þ;6?öZØ~(¾ŸøCkŸTó€‹1†…-¯+7fý‡_=³¤>ÿSUì:lZŸ·„?o Þþ¼%üyKøó–ðç-á¦ÜßPåŸâ”?ô:¶½Õjƒ*­T÷/Öþf€z Påßôþ/æùÅîùÎÐ{|Ó¸°ïûMù…¿9ÎëÓ²ÿ »Õõý¿RMóÉ“H~Óþo.Ϫ}ßÔ9¨ó¯Š"ÿXë³ü®½wl~ìµ°ýP|?ñ‡Ö>©æc [^WnÌú3¾zVû@1¢ä[óFÎÈúÒñÈyÐûþïU­ë°·È?¶È?¶È?¶È?¶È?¶È?¶È?¶È_§Ñï¼ò·¸ó“üµó”²ÕjÃ+ÿYVϯU¾€äÞkÀ+ÿÞù/òþ¢ùÐÖ=BºÇÏ­ ½ïÏù“~\iì–>Mþ+­Í¥zðžÿ-êÍ_ãÓ’¿Æ?—ÿŽòþ[å¾ÖÞù¯å‘«ó™Æ¿–½£þè\h¿4þøKg«} ÆaQò­y#ç?d}éxä<è}ÿ÷ªÖuØ[ä[ä[ä[ä[ä[ä[ä[ä¯Óè÷^ù[ÜùIþÚyJÙêµá•ÿ,«ç×*_@òï5à•ïüyÑ|hë!ÝãçÖ…Þ÷çüÉ??®4vKŸ&ÿ•ÖæR=xÏÿõæ¯ñiÉ_ãŸËGyÿ­r_kïü×òÈ¿ÕùLã_ËÞQt.´_Hü¥³Õ>PcŒ°(ùÖ¼‘ó²¾t´uîñsëBïûsþäŸW»¥O“ÿJë@ó@©¼ç‹zó×ø´ä¯ñÏå¿£¼ÿV¹¯µ‡wþkyäßê|¦ñ¯eï¨?:Ú/?$þÒÙÇj¨1FX”|kÞÈùY_:9zßÿ½ªuöùÇùÇùÇùÇùÇùÇùÇùë4ú}€Wþw~’¿vžR¶:Bmxå?ËêùµÊ|À{ xåß;ÿEÞ_4ÚºGH÷ø¹u¡÷ý9òÏ+ÝÒ§É¥u y TÞó¿E½ùk|Zò×øçòßQÞ«Ü×ÚÃ;ÿµ<òou>ӸײwÔ í—ÆéìcµÔ#,J¾5oäü‡¬/œ½ïÿ^Õº{‹üc‹üc‹üc‹üc‹üc‹üc‹üc‹üuý>À+‹;?É_;O)[¡6¼òŸeõüZå H>ོòïÿ"ï/šmÝ#¤{üܺÐûþœ?ùçÇ•ÆnéÓä¿Ò:Ð-ùküsùï(ï¿UîkíáÿZù·:ŸiükÙ;êÎ…öK㉿tö±ÚjŒ%ßš7rþCÖ—ŽG΃Þ÷¯j]‡½Eþ±Eþ±Eþ±Eþ±Eþ±Eþ±Eþ±Eþ:~à•¿ÅŸä¯§”­ŽP^ùϲz~­ò$ð^^ù÷Α÷͇¶îÒ=~n]è}ΟüóãJc·ôiò_ih(Õƒ÷üoQoþŸ–ü5þ¹üw”÷ß*÷µöðÎ-ü[Ï4þµìõGçBû¥ñ‡Ä_:ûXí5Æ‹’oÍ9ÿ!ëKÇ#çAïû¿Wµ®ÃÞ"ÿØ"ÿØ"ÿØ"ÿØ"ÿØZó¿þçº]]½e¨­ùŸ¾:›~ùõáttô|zòdnÇÙöxýùññôó½û·¿yz6ýõèÙôôé ¶Úšÿo¿ÿ9ž¾ú®}dþÝüû¹}þü¥ñ.EY)å¯ÑÂÖÍÍ'¶šÄÿËׯbûéîÝl_ÊÿÝ»l4‰ÿÇ7ÿk3û¥Iýä?f“ø§cÖìs>)ÿ‹‹ëé|nçïo?»hç~Úù…&ñßï¯þkköëïÓFþ‡Ãÿìï×·mÍ~ù.×Rþûýå´ß]M»Ý忟=´Ÿ¶óѾçÜî?wÿt¦mkBTúÎÊþ€W,xœíš[nÛ@ E³ÿ=䣻ñ.Z  I‘©0$/¶ÆÖ9ÀEbÏC—¢†±gòõùùë ]W~ÿE!„B!„B!„B!„B!„B½ˆÎþÿct®n·Bè¢:ûïB!„B!„B!„BhNgÿÿ:WïÆÇÇG«þçû~½Ò=›Î&þÎ}R®õ¹·ûü|¿â±{OŸõüT}¼‚ÿ{[6†Õû•5pÿ=[ÕvkþU¿Èg¦=ò÷sœ×®xWÖoô~6ŸSù÷ï¯ÿ,«ÚaÕ õ3×_½ùWPãZõSês§=ò¨úŸ|.&éøšÊ?œÃîÏ&ìÇ÷6Bv+á>æ>ˆ]·@võe‘ñ{ì[}~¦ü</ÞUì?׆uo”>‘'kläï8~ctí Õö•ÿUÛñwoü±_tVýí–e¼çojýzùSüEó«><«~•\Fþ+ñU×þj|ÆO÷ù³üxÞÎÈ¿çOéï妛ÿh¾lßÝòŸé_iú=:þN=˜®ÿÝõŸ­AÑõ*ù¯®§‰ügë¿õÙA­!QmT°<¨þ¼ñʵ½øÔ•[™¿¿57¼?äùZ°ÆàjT¾{ûgÏd×ïî»ú²˜>è^o§ûçÅ[Ýßïžxc•}ýÎúUÏwªçݳƒjüêù€ÕÿØnaùQQÆ{þ¦Ö¯—?Å_4¿êÃó·êWÉeä¿_gÿYYCÖëîógùñ¼‘ÏŸÒßËM7ÿÑ|Ù¾»å?Ó¿Òõ{tüz0]ÿ»ë?[ƒ¢ëUò_]OùÏÖ볃ZC¢Ú¨`yPýyã•k{ñ©1*5¶25~knxÈóµ`ÀÕ¨|ööϞɮßÝwõe1}þнÞN÷Ï‹·º¿ß=ðÆ*ûúõ«žïTÏ?ºgÕøÕó«ÿ±ÝÂò£¢Œ÷üM­_/Š¿h~Õ‡çoÕ¯’ËÈ%¾Îþ³²†¬×ÝçÏòãy;#ÿž?¥¿—›nþ£ù²}w˦¥=ê÷èø;õ`ºþw×¶E׫俺ž&òŸ­ÿÖgµ†DµQÁò úóÆ+×öâScTjleþjüÖÜðþçkÁ€«QùìíŸ=“]¿»ïêËbúü¡{½îŸou¿{àUöõ;ëW=ß©žtϪñ«çVÿc»…åGEïù›Z¿^þÑüªÏߪ_%—‘ÿJ|ýge Y¯»ÏŸåÇóvFþ=J/7ÝüGóeûî–ÿLÿJ{ÔïÑñwêÁtýï®ÿl Š®WÉu=Mä?[ÿ­Ïj ‰j£‚åAõçW®íÅ§Æ¨ÔØÊüÕø­¹áý!Ïׂ5ÿ{„œ„"wÎ0mkBTúÎÊþ€\qxœíškŽã8 „ûþw˜{›¾Å°™EþUTlÜ_tDñeR ¬ôŸ_¿þù.ÿû„B!„B!„B!„B!„B!„pÞýÿÇð^~C(ïþþB!„B!„B!„~Žwÿÿ¼—WãëëëGû¿“ü_:ï\±}÷ó?ú?æ¥ä™é;zwà=GW§ZSs¿ûÙdþ£ú¯Ø½;ÏYM•ZgkÕº¢¡¨¯²=UªÿȆSå§šJüÝ|éfP”Cõ \ÿYÞŠ¬ë/gþ8:‘,{>+ŸWãÿÄó9úùôüïÖY×ßN¿×çŒïò‰m7.Eÿêú;ùÿíˆòx_Sþ>Ÿ»ê°Sý«~>ßngF%¯b˜Ä—Í«cÿfþ;Ýw¿™lvfö«Ôy¶¦î‰rRõX¦½‘ÕKõïôeåKµïÄçØÊìUë]·þÕùPcTdQÿ«õ©°:ß:ÝüPc«æƒ‚³ê¯bÚ»WÔ_Ù§Ú_9ÿ/Å¿c˱÷ôú«º+õWοSûh~E³%бš+r·w•ï IlÑ~E¿ó_Ùœêe;c÷ø_xB`†êlÀ™Øý=d÷øï†rÿUÝE9¶Ý¸ý«ëÿ¤wwç.yr»ŠÉoW`§úWý:}¾Ý,èûë•ø&¿ODúUÙ]f?’ÿÎrPstäÙšº'ÊIÕwb™öFV/Õ¿Ó—•/Õ¾Ÿc+³W­OtÝúWçCQ‘Eý¯Ö§Âê|ëüuóC­š Ϊ¿Šiï^QeŸjåüw¾ÿŽ-ÇÞÓë¯ê®Ô_9ÿNéWydwý™ýHvü;ËAÍÑ‘gkêž('U߉eÚY½TÿN_V¾TûN|Ž­Ì^µ>Ñuë_5FEõ¿ZŸ «ó­ó×Í5¶j>(8«þ*¦½{Eý•}ªý•óßùRü;¶{O¯¿ª»Råü;ñ8µæW4[¢«¸"w{WùšÄíWô;ÿ•Í©þQ¶3vÿ…'äf¨Î&œ‰ÝßCvÿn(÷_Õ]”cÛKÑ¿ºþOzwwî’'w°«˜üÖqvªÕ¯ÓçÛ͂»¿^‰oòûD¤_å‘Ýõgö#Ùñï,5GGž­©{¢œT}'–iodõRý;}YùRí;ñ9¶2{ÕúD×­u>ÔYÔÿj}*¬Î·Î_7?ÔØªù à¬ú«˜öîõWö©öWÎçKñïØrì=½þªîJý•óïÄãÔ>š_Ñl‰b¬fàŠÜí]å;h[´_ÑïüW6§úGÙÎØ=þž˜¡:›Àÿ!‡‹ÈM· IDATxœíy”_Åuçïën „@`‰]HÂ2;^ÇD/xìŒY<ÛĆ˜db›`²ŒÌx9'“q&Çc Ž÷‰ÁñØxလ^â$Nl ‰ÅX,êå׿þÍݯ©®®ª{k{¯Þ¯¿Ÿsú´úWU·nÝ{«ê¾z?½Wݳã~ÒùÙC ¶nݺès@tÒI'Ña‡Z韩¨ ÕñÇÓjÝâî»ïÿ÷œQ[ÔmpË–-´•h 'XU}bU'UH¨ä É–6·lÙ²àôªºgÇýóIÕúõëZV¯»lÛv!Á€aã–-[è‚ Î§{ïùiÛª€BQ“«1$Ui¨í·uëV"$W`ä¿ÜY~ij/mHÒñŠ—¿œnÙ²…褓c¶JŸØò(ýð燈…þÂAÓo¾|u»ÌúõëhëÖ­´•pz&žÿÊ?3~~×7ÞMüûåQÉÕwoùïAí~ùÜgüá_ÿ“÷žü'o{aFdÜùWÐÆ×Ü’½Ÿ?¿òC¢z¿sɲËÛºu+mØp좂>¶†NÜû-QDD?ü*U‹¾¿4©í‰Ó+XÈÌÌÍ TQEDÍý›hùÊ5´ê©Ý´ó¶+i퉗ÉïόЉgý¹³ÎO¾ônzÖ>ºàï&Y÷µ7Ó‹–I?wm>äQ›=¹mîüÆ+èÔ‹¾O7_ýK$W—_ù—ÎòK/yGV9õ©•õÄŠf¦itt”Þû'¿Ï*ñá?ü3¢™i"‡¸®ñ¥ëÿfþßo8ë|q™Ê† Ç"¹…éAE3¢Ï|õ‡49Õ£ÉÉišêMÓ%ço¦å+×ÑO=B÷ýè*:úä‹ýåÏŒÑ!Ô·ÖùΓÑýÐçèwÎÝLÎýÝwOÐæS÷Ðÿ+]+K®‚öä<üÆÇ¿K#UE##ÍLOÓ+WÒ‡@‡­YE§<ûH""ßr ÍåËÔëõ鶯¼”N|ÝßgÓ)%ÒÌÆQe:jLÓèØl€ž°? hîú‚ˆªjî³×cc£TÍLSU-‹R&%§¿îutãW¾%£ÎZ/½ätæÙ¿NDD7|ñ“ >7ÚNaãÆã\ÀÓ3£Ôï{Úóæv"õgˆÖœü®ùz?ûæ ’ßëÏ^à8–æ{""¢Ï}ø<"ÐßßtPP_!¬ûÚ›éÒS×Ðå7ï¦KO]CWýÛí´ùTAÀ=9ë7ÿ-©hùXE£3Dkö£#XN‡®\FDzýËÕé×~ûËDUEÕĽôš n ¢úò_ü =ÿœÿ—M¯Ø„¨&öäËzÄTõ{´lŸÙâKþä«4¾wœžØó8=ñø4¾w/}óóï£UT 466JƒÉ­°vtúë^·àïØ¤§I.¿ò/ç ÉÜ’+˜ezz”fˆèæïÜIÓÓ34Õ›¦‰Éé§W¿}Þfšž ’ÿŒ5³ qdV>u}âO?®|’æÄª>Éy¨ ­zÆ~tÌaûÑ ‡ïOÝžºûÒÛð=ºîE/&ÚCté©D—ÿíN¢>%’¶'çaÛ·¿ÿô‰UošXµ’_³Š;øÚ礵tØë@Ÿ¿üyDDtÞEÿƒ¾põûˆD/9ÿûÙtâ¾;Õ$ÖÄj0Ó£eËf‹?ü{§Ï~Fó'{ÔëÏ~2-[6FÕ¸=;NqzÔ4gžýëté%ï˜O¤ô„J=Å’€ä ˆzýQê÷ô²_Üðô‰‹Ff@«V¯’ÀGÐê}Fh…–XMöfæÿ=F{èÅ/y%Q5Ûû÷n½9¨/C7G‡y(­¦å´vÕm#Z³|@'½ï^ºþýk‰ÆwÐÄø4½æUçÑT6ÊÂz+°êOӲ峷öÞ{Ù¬ó§&&iïÞ½ôäOÒøÞ½491I_úä{g=3e”sÚgÐ×¾jv@]^S×S?S?—ÔWëÖúØÊ9Î:çm ’«šK/yuÎÛÄrjN8áx$W€%M¯?Fý™ýÃ?m[tbuè3VÒóžuuäÚpâ©ô¤ì0gû°†ü‡Ëèž¿DDD!ÿ‹o§ý–Ðäôlrµ~Ãñ´ù—ŸKD ˆè‘‡v$ÛCwn§G¶í ‡¦¤]­ ‡[I¹?pÈ~³·ÿþê‡D¯ýºüëߤoýÆÛ½d‡ìÉÖ{Ô¢ÏL¯ºS©¿ÇvðòÅe£Ñ(ÍÐHÕ§ó>ôc¢]Ÿ ó?t+ýì;_\9‘>¥áøòú-[6{ûw¿vþª¢NêLyzf0›÷ýõ¤KýÛô¹)IsÉüÝ4H®K™éþ(MÏòüÅ'R+÷¥þ·? ={öÐADï~×%tÕG¯ ‡~˜9äºøÝïaåv}ƒf¦~DÏÿµ/ÑÖ¯ÿmLÒñ¿üŸißå£Ô›ž¡^Ÿhfî;Iª¨—èpç^º–oz—±ì3¿u0]úÇD—ÿÕéºs^í/<Óž|ÏŽû$3’$fª?òtßÕÜÁßÓ_ø¢ªš¡ÑªO#£Ë‰¨¢¥]í¦C/v ѧ4‰UÆÆfØ›P5P¬§|IŽ*šËŽóÝÏU IŒô0)×ÿí_¿SUç*äÔŠÉ`éÒ›¥™¢ïýëâ«“Ž?ŒyäÚ´iíÞ½›ˆfïòCzòÁ/ÓÆÍ¦ýWMDD«Oú/t÷?ü­Yw ­>òd©h²GôóectøÜ­ÀÉé´Ï Ú¸vå‚ût'½ø|Úú½ÙÿMþ¾¹/ªo½ùOý„fÜ“ëdFšÄLÎ%Vcs]Ï߬ªÿ¦ŠF¨O#ÕìÓú#ûÒãOõIú._}JÃq+pŠÆÆÆèsWšª¹¬¾ÎNµçþ'ÂèØ(Q¿gýr®ÿ9§—Õ›>ÿú³ÇŸ¯=}öþrý7'£®çÃÿÏu ’*ýËëuruöýŽskžõ¬õH®KŽéþ(õgô¢“_TvȪeô•ƒ¦ýèGtòÉ'Óû?ðG´nÝ:úñLGq+û±? =LÐîÝû~""[¾?íyd‚îù×èàµ'ÓèÑøTE_¼î‹ÚžÏDo9-§ÙÛa4'›ˆèöïý ݺ}rܳW³u}Ù“}ðIb¦¦g¼ÑêéüQý¾WED#Õ Ì©Iò¸k[M7n}ˆˆLõ)Éò37'_¿ñFzíé§%76j™!„è¢&P¦ï\…‚ä °ÔèõÇhf@ôí¼}ÑÿüÍ7m¦‹ßýúý?¸”î¾ûn:øàƒi×®]455%º øØŽÏÒ9þ.U«•¶ýÛ7iíqÏ¥B/xÞ¡ô/ü1Œ|ˆ*Ÿ"zëEgÏ·ûÔ'¾˜dlOL® U4·±Ž(ûåÑ8þ@úþ®qzñÚÙÿ=ÿä„ýÑ›Hµ'§`BI¬L,éÓMSõÀßÑà™çRŸžAOMvã â)þw¡5±úÀ™‡Ñáóè†içÎ]³TDk8r®)úú7.úœKxLu9¾}¨ÔY«z*uößžìYDH®K‹þLEý™½ä…ÏZpÒ1˜û¹ê£WP¿ß§ýöÛ¶oßNG}4íÞ½›®úèlrÕŸž¡ê/&ê?Iÿ|ë—iÇm·Ð+ßø>"ª¨?=C#TÍžÍmòõB'ýwµ'æ’¥ÑZ˜ý²výäÁqzÖá+èqÏÄêêwýâ‚¿/ú_ÿ¸hOÖëäb²¯$Vs§}õ£ªêÓh5N#»¾Hƒg¾‘¦khd02ßf)`@(}ðúhçÎûgÏ«ÙóÆÙ‡¹UôÓŸÞO]5{T·ö™GÑÏrÓ~ãk_®Vÿ*ÃÖÎÅ9ÿÉþ$\WY›6m@rXÌ Fèæ/_½èó#|&=ç9Ï£íÛ·Ó1ÇC£££t奫>zuÔQt÷Ýw³²û½"¡ïý1ýèGwÑs^ü:ì³eÕÜm¸¹/«_Ù›‰¨¢/ܘæùJOLìKDs·È*%¯R2È\A4 zrÒ/±"ª“)ûž|ú{ŸÞ“s&Y“½ªˆh”hvlÕìÿ¯™ÙC#ü_"š¡Á‘gÒÌà ªËh¤šm³Tp¾ƒf6Yâïkƒxêä /o 3¯yõ™ÎòãŽ;޶mÛF6l "¢Á`@÷ÝwwÜq¬ì~Ÿè‰·Òakö§·]p¶fM>ùõûDwóVzø±§è™‡=ƒ®ø³ëã£1Ñ[NßþÚMômQmÿ7•Ì&KÍœJ¹X¶Ï úû¿¸ˆn]±ŒNzÁKé9k¤•+ö#9€š~6ýäÖÏÒm;¾C{žR¿ç5<¯¼ã¨®¹æ“ƒM›6´­P¸ýö»\€';ÿíjºï_®3–ýü·ÓÚç^$÷–-[è‚ Î§{ïùiŒz` 0ÿfî}w Yžýì8½OÖ>÷¢àä €T,³¹Žñìgo$"šO°ˆd@¼âå/ÇiƒÄªpê‹IP:¸Ø!N<ñ„ù«IÊ'VEM²Ð>·Ýv-KdfÁ‰ÕᇭmK€NòàÏvÎÿ'V‰@bˆE‰ÕºcZðS¦×QëšÊ– ¾cµîØ£èž÷·¥ @§‰¾xÏŽûqJ@ZbU'Iú->5y©€™E'V÷ì¸þGz…S+ü¯@€dˆ«úTÊv§VXê,ú_*ø.€œ‰—HéåÜßK |Ç H¬±àVà-[¶´¥@'9ñÄæÿ½ ±ºà‚óW -{t=øè“ôÍo¥ÖÑ`@D4XTo@D•ú{@tÇ;è´×o¦Çw?6_olQK€%Ä–›¾O¯~ÕfÚ´i½W»ãoßF[nú.½ðç?Ãw¬°äñMªlmpb@DÓý¾Wý±ÑÑÅŸ¥R€©ªŠƒÅ÷Ê¥å /mÛ¿íþø'ØÏŸÉ‰žWý±•‹+ï[UUQUU¾ÍŠ‘_:õøk¸þÖËLr\òCì ÿÈÇc'I?\›ŸSÅ€¤ÿ®ÁÍ?Ÿö¥Ï•’usaòQi¸bÀ¦¿©¾ä3ŸñÛö¦lXúœ "š˜˜Zôsúk_eü|bbÊ(Ã;±Êý6‘]—ìØzü’ßõKŽKþ`0ð¶…Ä?’„  BO«\úùÄgL,sm¥cÓcDÿÜ7$í¥‹gÛWÓ¦þ}ç“­^¨}›Ä6¦Rô5ùG?ÛÅc›Øæž©LÕU_ãMŸIƯ÷¥£êåÚCrÐ…Ó³ññ©?g½á "":ë g,*÷H¬¤q詈¯|WÆÎ-ꦿM:¤"æj7¤/"s°Ö“Šë;fá·Ù_- )×ëHûNï¤ñí*ChÂèÛG¨}ckÛÕ´ôê]?)t³éä##$þ}ÖWW®¤ÄG>§¿Ä_©b-·þ’öÒdݤ¿/¾í¹ ©ÿ$K×Ï\ky({Ç'çÞrÞ™ ÊÞrÞ™ Ê÷ŽOe,J¬êÀà2bµžnX×­T>Ñâ«?‰|.¨¥'>¡ØôôE²9·‰Íÿœ}¥å6ù¾úù–KãÃ¥Ÿ´]Î\ V­¯úß® “ý%WôÒøáô®Û¹âצ“ éú•j}åN,Lej½^ˆþÙú1éçÚsë;%ú›ü)mok磟ÚÞæ?îoÉú­ûª&&¦ibbš.ºðÜùÏ®úاæÿ}Ñ…çÎ×™˜˜6Ê`oº&§ ŸLÔ&?fÑΉ>6Ûcõæ6ö¶í’»N~Û“1¦ï˜+5ÓÕ -þl‡¤׼̙r‰·ñ¨õÚÄ•xJíBªÄ7–œ}æŒ?µ±'-±ú·=þíKÝ߉ˆz½]üηÎÿý‘+¯¥^¯G¹òÚùÏ.~ç[©×ëQ¯gþ¢{–çXéŽÉœKÃ4¶¶t•ïR$ô´ª)bâÇÔÎw,mÇ®ä´(çÆ!õ¿ë¢FMjm‰«}N4±ñÆÀÙ¯íùÉQÊúo£tû•»¿ÍêvÙ×ÑeW\³ÀϦÏMˆ«ÜÓuÕÛ·¤}i /ºþú©‚k|MLBξ!öÏq›ËÕ×°âº%ׯ¸%}ª§2%/ÐDiÖ0rôURüÇœò6Éßú «ä.wÚY 1º”˜ô«ÔI”ôs•Eϱ2 Vu®~¥¡ÿm3–zu-‘¯Rf“¯ŸZǤ¦Û#©0Ýžñ‘ÏÙ×uû'¤½ïØ9ùµL×ø%ö±_ìi•K?Éøõ…T•ÁÍ®½>Ó˜$ú›Ê$HæŸK‰ýct”Ä?®öªN¶O¯¯Ö•ø_•£—ùÚŸ+7Å—+~|ö[ÿªœÓª˜õ%V‰ÿR¬.¸ù-‘g‹k‰ÿ\û«tÿ1éRúE’Æ„ºh2²Oû&äëuBe„+—¿¯m}ÛsHåÅÄ@ŠòX¤ãJÿ’rI½P¿ÄÈöí#¦mŒ|䯶7}î»~¥*+¥ÿÔdUR/eYŠ:±úKÛs¤\\±{?*¼+w"ÇÑvBÜ´mÿýç¼ÿ]Àe¿¶ã£ëÀ~e€WÚ€¢ÀÂJ'gŒ.…ø_ cÝdûŽûhÕªý¼Ûè ±À’æMo:“®»î3´zõj¯v»w?Jç¾ùlÚyß]óŸ!±À’æ-§eË–Ó‘G¼¨¬ßŸ¡ÑQó7§žxâIZ¹ÏÄ‚ÏX`IóñÿýyzÕ+…6mZïÕî˜c¶Ñg? ½ðç?Cb€%ϦMëibbŠžzjöjºß'"¢ÞdŸ&&gŸ²>95ESSÓ433ûøˆçÿÂzÚò­ï.ƒÄ @g0÷Œ-‘òŸ.ªjáßxÜB$Cü¿¢è||w]ÿ¶éºýº®?h™jög6Ž*åÇM±'Võ„Èõ?sõ —ªŸ\rA!q¤úp0˜ý» ?¶Õ¯ ×FUÛªþ·DVèør¯¡”ªW*8ÿ7Õl_R9\=½<•}°ÂüYu‡¸››X©‹tjô=´ÓÆ oÄ%nޱtiL¾q”"68ûHí×¶mzšb[Ý`¤6‹Ÿ¤Ÿ6â4çºÕ4!þÏ}]þ—Êáê™Êcí“j’ÊO³}Ç}ôÄ3l½‘‘™o£SlbU;?uØ’!S=[™¦1pW#®Û’~ZàJî\ýÛäé庎6ýmu\ÄèÇéæ‹+6\úÙt𵟭Ìgü’«j©\•N¨r^­Ûl£öã6]®7Ÿ%rMå!ë Îÿœ}\ë—­=wZÄéfkkÛ_|ü*ÙKôϹøâdÆÄ§dýáð‰?[ÿÜþb‹œœûæÿH×þÕç-ϱñ`EôóŸ?Fo?ÿ4ºó®ûç?.6±*ЄÏ6‘}’ ׯYU  õs×BR¦Ë°•»;ÉD³«_ìÕžë ÔG?îJÙ;Ü2~[¹­ŸØ —N®ñqö é_E·?w¢f²¿ [R#I„¤þåÊuKíêÎ>®õËÖ^êËúûÚÏw}‰µul|JÖŸ˜þcã›[s1>¹‚öÙ·¢·_xQýÚ¥Ñ‘Šª‘!ªª%1!õµL=üóòXYh™B7W{Éb:þ؉ajo«—RžKvìbšƒÐñ7µpÅ&eM³ÁpílWÚRûs‰¹”ÐùKlL…Ú75œ½CÖ—œú¨õÚè?6¾u¥ìþX•°™ˆ½šo›&#•Wd%ÑeßÉÇ6ÇÛwÛú¹7 ¶ç‡$iiÛ~.ûJõ/m]‘Ðöú(é?Õég—)òq µ#꟔c’g»%‘¢ßAåÒ£„ÅAÕ!µ>±òBŽê›CNJbäAºÖÄ ‘W²Ïct Ý|ö—¦ç®o̤ڣLŸ…ÄVÊ=³éÓÀ”wbõô=Ì…†M™õšnøè窯êk’Í•JŽRõ£R}¸îyÛ‚U­¯¶3ÙŸ³_Ê[ú=yN?Éw6Bt°•Iêp1ಟG¡ã·É×û÷½Ú·Ý&uÅk|ûröáô¯ûPëe\ß6ÿÙ6)]G›|“.¶ÔøY_tÝRùßÔ¿®ƒïüæìë³>‡¬ÒõÅfßõ]/÷YCäsHÆß6ÿvíÄ«¸ÄÊMôã[Ó.Eßúdó©ã’/µ¿ïç>¸tèCê/Õ/¤N¨üñûè%Eê_ýR”Kpù9Æ~Üø}’û\}䘣¾²¥kS*{ú´O¡CÎõÃg} Õ¡­þ›ÚÿsS\bU:]u4X:Äžv™®ëŸã„Þ‡®Û¯ëú;mÇwS ±`ÈækØïÀ0³Tâ»È/¯t$V‰@b$V‰@b$V‘tõɰHèz|w]ÿ¶éºýº®?è&Å>nÁöäòÔòkRõ“K.#$ŽLOnÃ%>ëŵQéOÔ–È _îõ!”RõJçÿ¦úoj_ÈÙ—D}—2Æa¦Ø«œŽV_OÓicPŸè¬?þXèÒ˜|ý«ÇFÈX¹6R™m/v¶ÄG7újêa¤¹·PÚöYJBüŸß ¤Ð'³Ç®±ä´)ç¿.­ï¥Rô‰UŽÓW2¤×³•ù`wªå:1±½wL?-ÐÛHû·ÉÓË]½"ŠÑÓÍWl¸ôãÞ…%µŸ­ÌgüÜ»êL2lH_E¡ëêÒÏÖÎW7 6Û¨ýøÆŸMG›î]}º|n~ù¬’ö.8ÿsöq­_¶ö¶>Ûº;bý´?Gÿ>òCÖw›ï¤û~®þ¥òMócç.yÿŠM¬J'4á3µóM‚\gU-LJÕÏm‰ªú™.ÃVîZìb®€bõ“Lb¦+T]žD?×ÄÅ·‡ŒßVnë'ö‚Æ¥“k|œ}CúWÑíÏmúg&ûÛ°%5’DHê_®\·±Ô¾¡þçìãZ¿lí¥¾L¡?GªõSCÎþ}]߃¸ýGŠoüëòc÷)H¬,4uõÃ:9\í%Á:~.1 io«—RžKvS“чÐñÇúGJlRÖ1›/×Îv!µ?—˜K ÿ±ÄÆT¨}SrÚ£’K¯Ôëc\ÿ®ý'÷þà+¿.Ûõ€\ E'V%l`&r] 5EnÝc®~c¯hš Ë¾'’%ŽmŽ1¶ï¶õ'romÏIÒÒ¶ý8\öM¡©ã/a}LmÛÔñŸêô5†"¿¼®-†œ8¸0ɳݒHÑo §ºô(!éÐZsÉn¢}*¿ûèÓ‡’Xy®51Hä•ìóÝRï mÐôúÖvRYÒu8ÅüÊaÃâN¬êAê÷iSf¦Û#>ú¹ê«úšdsG•’£LÓýkÛ}d]_Ûb¤ÖWÛ™ìÏÙ/åQ¯í¾½ío®}¨¶2I.¸ï¨uBÇo“¯÷/µ“m^JâÇ5>‰}9ûpú×}¨¿õ2®o›ÿliºŽ6ù&9\l©ñ²¾èº¥ò¿©]ßùÍÙ7vŸàöé­¦Ðñëm¹ùᲟ­—|[¶2Óç®ýGïߤŸ Éú²¿ý­@S6ÑoyL»}ëÁâSÇ%_jßÏ}pé Ñ/&†ÔLª_HPù!ã÷ÑKŠÔÿ¾ú¥(—àòsŒý¸ñû$÷¹úÈ1G}eKצTö”’bnKêø®i®réÚžªNÈÜ—¬«¡ýç,Å%V¥Ó„Sˆ!öаËt]ÿ'ô>tÝ~mëß¶ÿ@ ±`ÈÀ‚Þ]à»nÿ"$V–Ü—”‘T ±0ô qMQäãº+€D ±H«Hšxò-mÑõøîºþmÓuûu]ÐMŠýòºíÉå©åפê'—\FH™žìÛ†K|Žk£ÒŸ(-‘:¾ÜëC(¥ê• ÎÿMõÓW)óÛÓÓй'¬wa\ÃH±'V9B}ýCìµ=¶–=ŒWL]“¯õØ+×F*³íEÑõZ=ÎÕ2)1ã˸…Ò¶ÏRâÿÜø^ Ù’.®Ï¦§—‡¾Aä¥è«W®dH¯g+óÁ4îTËuEe{ï˜~Zàz_“ä]h¶ÓßwQÙ금ÑÓÍWl¸ôãÞ%'µŸ­ÌgüÜ»êL2lH_g¡ëêÒÏÖÎW7 6Û¨ýøÆŸMG›—ý}ýË•‡¬?.8ÿsöq­_¶ö¶>SÄIèüöÑß&C­—Ê?&ù®r‰nz½Tóc˜)6±*ЄÏue*7±kãT_HiJ´¸þu¶r×b'I´lÄêÇÙÃt«Ë“èçÚ€¸Øá6àñÛÊmýÄ^иtr³oHÿ*ºý¹‹ý3“ýmØ6MI"$õ/W®ÛXjßPÿsöq­_¶öR_JôO5¿}ôwéåëI¼ÆÌ¯&çÇ0ƒÄÊB)A{&¹bIÕoÝ.öŠ8¥~Ry.Ù±ÉZBÇë)±IYÄ,þ\;Ûi‹Ôþ\b.%tþÇS¡ö ‘# ð™Ÿ:¹ý#•ïJ9JÙ?Û¢èĪ„ ÌD׳ñܺÇ,\±'^MÐeßÉÇ6ÇÛwÛú¹ ¶ç‡$iiÛ~.cÒ IDATûvAM¯ÏM·_ ùåõzbÔ?)7V“<Û‘iŠ~SLr—%$ª©õ‰•çÛ>•ß}tÈéCI¬ƒ¸tèCê$Õ/¤N¨üñûè%Eê_ýR”Kpù9Æ~Üø}’û\}䘣¾²¥kS*{êõSÎoéÚ*­+#¥ü¶Ö—®S\bU:P:±'†]¦ëúç8¡÷¡ëöëºþ`8@bÀÍ¥»ÀwtŸ"¿¼ÐEX$‰@"X$‰@"XERòSˆ¥ëñÝuýÛ¦ëöëºþÃΰú§ØÇ-Øž\žZ~Mª~rÉa„Ä‘éÉÖmø±ÄWV¸Bý‰ÔY¡ã˽>„Rª^©àüßTÿ1}•2¿}1=Íœ{ƒCÆÕ9íSì‰U΀P_ÿ;AmO®ecFÞ¥1ùúW±rm¤2Û^m :oô9ÔÔÃHs'n¡´í³”„ø?7¾H¶d£‹ë³éiè¡OH/¶¿œ}}b•ãj• éõle>˜ÆÀj¹®¨lïÓO ô6ÒþmòôrîJI'ôÄÈW?N7_\±áÒ{—œÔ~¶2Ÿñsïª3ɰáó*“Pÿä<õµÙFíÇ7þl:ÚäHÞµ&õ/W²þ¸àüÏÙǵ~ÙÚÛúL'¡óÛG› µ^*ÿ˜ä»Ê%ºéõR;ö³éåûYjŠM¬J'4ás]E™ÊMAäÚ8«jaRª~nKTÕÏt¶r×b'I´lÄêÇÙÃt«Ë“èçÚ€¸Øá6àñÛÊmýÄ^иtr³oHÿ*ºý¹‹ý3“ýmØ6MI"$õ/W®ÛXjßPÿsöq­_¶öR_JôO5¿}ôwéåëI¼ÆÌ¯¦æç¿ÖŸ™âÁöYÝ.H¬,äÊd} ]Ü\í%:~ná io«—RžKvl²–ƒÐñÇúGJlRÖ1É#×NOhÕvûs‰¹”ÐùKlL…Ú7DvìE„¤Ÿz¹ý#•ïJn8rúßÕ¿$l‚¢«60m9+¹uY¸bO¼š Ë¾'’%ŽmŽ1¶ï¶õ'r'@mÏIÒÒ¶ý8\öí‚þ.š^Ÿ›nëŸ.ø¶È/¯«G{!'.LòlG¦)úM1É]z”t¨:¤Ö'VžoûT~÷Ñ!§%±ò ]kbÈ+Ùç1º…ì ©çwª=ŸÛÑK‘ìS܉UdµQô¿S`º=⣟ä˜2ôV€äVZG "“޶{Î:ú}g—ý9û¥¼¨ON?®}¨¶2I.\öÓã(tü6ùzÿR;Ùæ¥$~\ã“Ø—³§¿z»@2?lããtséh“o’ÃÅ–ß!ë‹®[*ÿ›ú×uðßœ}}üoÒ/fýÕõ ‘/‰ŽØùå;?Ôö’ùá³ÚtséÏa²ÏÎ]òöŠK¬LAÜD?¾å1íRô­›O—|©ý}?÷Á¥ƒD¿˜R ©~!uB凌ßG/)Rÿûê—¢\‚ËÏ1öãÆï“Üçê#Çõ•-]›RÙS¯Ÿr~K×ViX)å7½¾¤°WÇT¶ë^¦Å%V¥“+Ñ ±'†]¦ëúç8¡÷¡ëöëºþÃÎRñ+†Œ¥²x #ðݧÈ/¯t$V‰@b$V‰@b$V‘”üTcbéz|w]ÿ¶éºýº®ÿ°3¬þ)öq ¶'—§–_“ªŸ\rA!qdz²u~,ñ•®…P"µDVèør¯¡”ªW*8ÿ7ÕL_¥Ìo_LO#çÞàÐ…q #ÅžXå õõ±Ôö$àZö0fä]“¯õØ+×F*³íEѶ0«óFŸCM=Œ4wâJÛ>KIˆÿsã{dK6º¸>›ž†ú„ôhó‚57EŸX帚p%Cz=[™¦1p§Z®+*Û{ÇôÓ½´›<½œ»RÒ =1òÕÓÍWl¸ôãÞ%'µŸ­ÌgüÜ»êL2lØêùÌ!Î?9O}m¶Qûñ?›Ž69’w­IýË•‡¬?.8ÿsöq­_¶ö¶>SÄIèüöÑß&C­—Ê?&ù®r‰nz½TóÃ7o\û[Šý+Å&V¥šð¹®¢Lå¦ smœUµ0)U?·%ªêgº [¹k±“$Z6bõãìÇaºŠÕåIôsm@\ìppÈømå¶~b/h\:¹ÆÇÙ7¤ÝþÜEˆþ™Éþ6l›¦$’ú—+×m,µo¨ÿ9û¸Ö/[{©/%ú§šß>ú»ôòõ$^cæWSóÃÇoõg’ý-vÿJ+ ¹ /%tqsµ—$¡ãç®ö¶z)å¹dÇ&k9¬¤Ä&eM³ÀríLWËõßûs‰¹”ÐùKlL…Ú7DvŽÖg~êäöT¾+ùáÈ9ÿ¹ý-¶ÿX•°™h"ãÍInÝc®Ø¯&è²ï‰d‰c›cŒí»mý‰Ü PÛóC’´´m?—}» ¿‹¦×ç¦ÛKOì»L‘_^WõBN\˜äÙŽLSô›b’»ô(!éPuH­O¬<ßö©üî£CNJbäAºÖÄ ‘W²Ïct ÙRÏïT{„ÒÛm@FŽùQ܉U=Hý>jÊ 2ÝñÑ»w¬þö½ ¹U`º¿¬'7¶{â¶ÅH¿/ï²?g¿”·m÷Õmû~çAªƒ­LR‡‹—ýô8 ¿M¾Þ¿ÔN¶y)‰×ø$öåìÃé¯~ÏB2?lããtséh“o’ÃÅ–ß!ë‹®[*ÿ›ú×uðßœ}}üoÒ/fýÕõ ‘/‰ŽØùå;?Ôö’ùÁVÙäÛÖŸùcêc0 Úõ€]§ŠK¬LFh¢ßò˜v)úփݧØ]|?÷Á¥ƒD¿˜R ©~!uB凌ßG/)Rÿûê—¢\‚ËÏ1öãÆï“Üçê#Çõ•-]›RÙS¯Ÿr~K×ViX)å·±¾„¬-mÌÅ%V¥“Û!Ä{bØeº®Žzºn¿®ë?ìäöOÛó§‰C6—îßN)ó§È/¯t$V‰@b$V‰@b$V‘”üTcbéz|w]ÿ¶éºýº®ÿ°3¬þ)6±ÒŸ&žK~ê~rÉa„øA÷_[~,1~ôø6ÙJªwÌøJ_¥ê• ÎÿMõŸBFÛóÛ“­]öïʸTšŽ«\}›Xå|…úú‡˜~L!SŸXk{<×éÒ˜|ý«ÇFÈX¹6R™m?“Åö=uÞès¨©‡‘JÚ¶ñÀ¶}–’ÿçÆ§/“þ)æw[˜ž†ú„ô쟹}”ËFÅ> Ôö®¢TrULòõw,…b÷dlý=Fú»‘Ô6ú;«lm¤ýÛäéå®w1¥|ו¯~œn¾¸bÃ¥Ÿë]YœŽ’2ŸñÛbÆ6>¯2 õOÌ“ã9l¶Qûñ?›Ž69.ûûú—+Y\pþçìãZ¿lím}¦ˆ“Ðùí£¿M†Z/•Lò]åÝôz©æG¾ö5õC/b«Ò Mø\WQ¦rS¸6ÎúhÓ–hqýë2lå®ÅN’hÙˆÕ³‡é I—'Ñϵq±ÃmÀ!ã·•Ûú‰½ qéägßþUtûs!úg&ûÛ°mš’DHê_®\·±Ô¾¡þçìãZ¿lí¥¾”èŸj~ûèïÒË×?’x™_MÍ\ñ;?RÄÊB®LÖ—Ðàsµ—Sèø¹…+¤½­^Jy.ÙMMFBÇë)±IYÄ$\;=¡UÛIìÏ%æRBç,±1jßÙ±’>|êåöT¾+yስ'wª”Ê_!ûƒ„¢«609&b“äÖ=fáŠ=ñj‚.ûžH–8¶9Æ‹rÛ>r-ØmÏIÒÒ¶ý8\öí‚þ.š^Ÿ›n/=íí2E~y½6|ý“rc5ɳ™¦è7Å$wéQBÒ¡êZŸXy¾íSùÝG‡œ>”Ä:ȃt­‰A"¯dŸÇè²7¤žß©ö|nG7KæV`=Ð:hô¿S`º=â£wïXýí{+@r«@­£N2“Žº¾¶ÅH¿/ï²?g¿”·õE„ÓÏ÷;Rle’:\ ¸ì§ÇQèømòõþ¥v²ÍKIü¸Æ'±/gÉÕ°ªŸÏüÓç·K7—Ž6ù&9\l©ñ²¾èº¥ò¿©]ßùÍÙ×Çÿ&ýbÖ_]ßù’øçˆ_¾óCm/™ÒýÓ5/RÙ7õÁMMq‰•)ˆ›èÇ·<¦]оõ`ñ©ã’/µ¿ïç>¸tèCê$Õ/¤N¨üñûè%Eê_ýR”Kpù9Æ~Üø}’û\}䘣¾²¥kS*{êõSÎoéÚ*­+#¥ü¦×—ܶ1•D»àåúP\bU:¹=R{bØeº®Žzºn¿®ë?ì,ÿ ±`ÈX*‹×0ßÐ}Šüò:@Ab$V‰@b$V‰@bIÉO5 –®Çw×õo›®Û¯ëú;ÃêŸb·`{ryjù5©úÉ%„G¦'ó¶áǶúuáZõ'RKd…Ž/÷úJ©z¥‚óSýÇôUÊüöÅô´qî ]—ŽË?]™_ÅžXå4œúú‡Ø j{p-{3ò.É׿zl„Œ•k#•Ùöâa[˜Õy£Ï¡¦Fš;q ¥mŸ¥$Äÿ¹ñ½@²%]\ŸMOC}Bz „ø§ô1Õ}b•ãj• éõle>˜ÆÀ‹OÆ®¿³ÊÖFÚ¿Mž^Î])鄞ùêÇéæ‹+6\úqï’“ÚÏVæ3~î]u&6lõ|æ矜‹©ë=a6ûpñgÓÑ&Gò®5©¹òõÇçÎ>®õËÖÞÖgŠ8 ß>úÛd¨õRùÇ$ßU.ÑM¯—j~Hpµ ™>ñC±‰Ué„&|®,ÝTn ׯYU “Rõs[¢ª~¦Ë°•»;I¢e#V?Î~ÜU’T?×ÄÅ·‡ŒßVnë'ö‚Æ¥“k|œ}CúWÑíÏ]„蟙ìoöiJ!©¹rÝÆRû†úŸ³ký²µ—úR¢ªùí£¿K/_ÿHâ5f~55?Býcj«_UíÜe×5$Vrd±!„.n®ö’d#æ #æŠËÔÞV/¥<—ìØd-¡ãõ”ؤ¬ b’G®íjXj.1—:ÿc‰©Pû†È޽ˆôáS/·¤ò]É!GŒ=%þÉ_±X•°™È1›$·î1 Wì‰WtÙ÷D²Ä±Í1ÆöݶþDî¨íù!IZÚ¶‡Ë¾]ÐßEÓësÓí»î E~y½6|ý“rc5ɳ™¦è7E¹ô(!éPuH­O¬<ßö©üî£CNJbäAºÖÄ ‘W²Ïct ÙRÏïT{„>·£»FŽõ· Š;±ªZþw L·G|ôãî«¿}oHn¨uÔIfÒQ××¶é÷å]öçì—òV ¾ˆpúù~çAªƒ­LR‡‹—ýô8 ¿M¾Þ¿ÔN¶y)‰×ø$öåìÃé_÷¡þÖ˸¾mþ³]¤é:Úä›äp±¥ÆwÈú¢ë–Êÿ¦þu|ç7g_ÿ›ô‹Yu}CäKâŸ#v~ùε½d~ÄøÇwýÓÛërêò]¸uò¥¸ÄÊÄMôã[Ó.Eßz°ûÔqÉ—Úß÷s\:Hô‹‰!u’êR'T~Èø}ô’"õ¿¯~)Ê%¸üc?nü>É}®>rÌQ_ÙÒµ)•=õú)ç·tm•Ö‰•‘R~Óë çŸë‹´N Å%V¥“Û!Ä{bØeº®Žzºn¿®ë?ì´íŸ¦æ+†Œ¶/|@>šš_E~y ‹ ±H+€D ±H+€D ±Šdž €®Çw×õo›®Û¯ëú;ÃêŸb·`{ryjù5©úÉ%„G¦'[·áǶúuáZõ'RKd…Ž/÷úJ©z¥‚óSýÇôUÊüöÅô4rî ]Wäž§ÅžXå õñ÷±Ôö$XÛãõ‡.É׿zl„Œ•k#•Ùö¢h[˜Õy£Ï¡¦Fš;q ¥mŸ¥$Äÿ¹ñ½@²%]\ŸMO%}Bz „ÎÏ>[²O^·½«(•\“üT­i Ü©–ëŠÊöÞ1ý´@o#íß&O/ç®”tBOŒ|õãtóÅ.ý$ﺲõ!)ó?÷®:“ ÒWM躺ô³µóÕM‚Í6j?¾ñgÓÑ&Gò®5©¹òõÇçÎ>®õËÖÞÖgŠ8 ß>úÛd¨õRùÇ$ßU.ÑM¯—j~ØÌÛ†èK±‰UéÄdÛ®#[É$smœUµ0)U?·%ªêgº [¹k±“$Z6bõãìÇaºŠÕåIôsm@\ìppÈømå¶~b/h\:¹ÆÇÙ7¤ÝþÜEˆþ™Éþ6l›¦$’ú—+×m,µo¨ÿ9û¸Ö/[{©/%ú§šß>ú»ôòõ$^cæWSóÃÇo\"ªÂéßH¬,4í¡‹›«½$Ù?·p…´·ÕK)Ï%;6YËAèøcý#%6)k‚˜—k§'´j;‰ý¹CJèü%6¦Bí";ÇÆë3?urûG*ß•üp´µ”BщU ˜‰62à”äÖ=fáŠ=ñj‚.ûžH–8¶9ÆØ¾Û֟ȵ=?$IKÛöãpÙ· ú»hz}nº½ôÄ^ZßÔ¾nÓV,ùåõÚõOÊÕ$Ïvdš¢ßŽuéQBÒ¡êZŸXy¾íSùÝG‡œ>”Ä:ȃt­‰A"¯dŸÇè²7¤žß©ö|nGw{–ßÅXÕFR3Nõï˜nøèÇÝ;VûÞ …ªuÔIfÒQ××¶é÷å]öçì—òV ¾ˆpúù~çAªƒ­LR‡‹—ýô8 ¿M¾Þ¿ÔN¶y)‰×ø$öåìÃéïº¢åæŸ>¿]º¹t´É7ÉábKïõE×-•ÿMýë:øÎoξ>þ7é³þêú†È—Ä?Gìüòj{Éüœ˜Út3é`’犓}vîrëäKq‰•ɈMôã[Ó.Eßz°ûÔqÉ—Úß÷s\:Hô‹‰!u’êR'T~Èø}ô’"õ¿¯~)Ê%¸üc?nü>É}®>rÌQ_ÙÒµ)•=õú)ç·tm•Ö‰•‘R~ÓëKŠùÒv×áòL—X•N®D€TÄžv™®ëŸã„Þ‡®Û¯ëú;Mø§„[ƒH¬2°¹tø€8J˜CE~y ‹ ±H+€D ±H+€D ±Š¤„ÿÚ @.ºß]׿mºn¿®ë?ì «ŠM¬R¿zÀ&?u?¹ä‚0Bü û¯-?–?z|›l%Õ;f|¥Î¯RõJçÿ¦úO!£íùí‹ÉÖ.ûwe\¹Œ?Wì›Xå|…úú‡˜~LñSŸXk{ü×éÒ˜|ý«ÇFÈX¹6R™m?ÅöJuÞès¨©‡‘JÚ¶ñͶ}–’ÿçÆ§/“þ)æw[˜ž†ú„ôÈ=?S<?”bj{WQ*¹*&ùú;–B1{2¶é]`u]/ýU¶6Òþmòôr×»šR¾ëÊW?N7_\±áÒÏõ®,NGI™Ïøm1cƒ ŸW™„ú'æÉñ6Û¨ýøÆŸMG›—ý}ýË•‡¬?.8ÿsöq­_¶ö¶>SÄIèüöÑß&C­—Ê?&ù®r‰nz½TóÆký ±/'?Å&V¥šð¹®¢Lå¦ æOMJÕÏm‰ªú™.ÃVîZì$‰–Xý8ûq˜®buyý\;Ü2~[¹­ŸØ —N®ñqö é_E·?w¢f²¿ Û¦)I„¤þåÊuKíêÎ>®õËÖ^êK‰þ©æ·þ.½|ý#‰×˜ùÕÔüðµ|ŸñûîRXYÈ•Éúº¸¹ÚK‚)tüÜÂÒÞV/¥<—ì¦&£¡ãõ”ؤ¬ b’G®¾!¨í$öçs)¡ó?–ؘ µoˆìØ‹I>õrûG*ß•üp¤²§-ÞsË¥èĪ„ ÌDމØ$¹uY¸bO¼š Ë¾'’%ŽmŽ1¶ï¶õ'r/ØmÏIÒÒ¶ý8\öí‚þ.š^Ÿ›nßuÿH(òËëµá럔«IžíÈ0E¿)‚È¥G I‡ªCj}båù¶OåwrúPë Òµ&‰¼’}£[ÈÞz~§Ú#|ð¹ÝuJ9½ó¥¸«z uÐè§Àt{ÄG?îÞ±úÛ÷V€äVZGd&u}¹£U‰ý9û¥¼¨/"œ~¾ßyê`+“ÔábÀe?=ŽBÇo“¯÷/µ“m^JâÇ5>‰}9ûpú×}¨¿õ2®o›ÿliºŽ6ù&9\l©ñ²¾èº¥ò¿©]ßùÍÙ×Çÿ&ýbÖ_]ßù)n}ÅÎ/ßù¡¶—Ì×X¸õK_>ãO}pSS\be â&úñ-i—¢o=Ø}êp-ÑÅ÷s\:Hô‹‰!uJõ ©*?dü>zI‘úßW¿å\~ޱ7~Ÿä>W9樯léڔʞzý”ó[º¶JëÄÊH)¿õ¥éµw0 Úõ/ׇâ«ÒÉ•èŠØÃ.ÓuýsœÐûÐuûu]ÿaÇç4Ô§Mi ±`ÈèâBfïÀRgæ@‘_^è"H¬Ä H¬Ä H¬")ù©ÆÄÒõøîºþmÓuûu]ÿagXýSìãlO.O-¿&U?Ãð Ža"$ŽLOæmÃmõëµêO¤–È _îõ!”RõJçÿ¦úé«”ùí‹éiãÜÈ»0®a¤Ø«œ¡¾þ!v‚Úž\ËÆŒ¼Kcòõ¯!cåÚHe¶½(ÚfuÞès¨©‡‘æNÜBiÛg) ñn|/lÉF×gÓÓÐCŸ^Üø}b•ãj• éõle>˜ÆÀj¹®¨lïÓO ô6Òþmòôr黚lu\ÄèÇéæ‹+6\úqï’“ÚÏVæ3~î]u&6lõ|æ矜§¾®÷„ÙìÃÅŸMG›ɻ֤þåÊCÖœÿ9û¸Ö/[{[Ÿ)â$t~ûèo“¡ÖKå“|W¹D7½^ªùaÓ«‰ýKËÎ]¼~>›X•NhÂ纊2•›‚ȵqVÕ¤TýÜ–¨ªŸé2lå®ÅN’hÙˆÕ³‡é*V—'Ñϵq±ÃmÀ!ã·•Ûú‰½ qéägßþUtûs‹¸þ™Éþ6l›¦$’ú—+×m,µo¨ÿ9û¸Ö/[{©/%ú§šß>ú»ôòõ$^cæWSóæwSû—ÞgjXYˆÙTRº¸¹ÚK)tüÜÂÒÞV/¥<—ìØd-¡ãõ”ؤ¬ b’G®éj¹þ[b.1—:ÿc‰©Pû†È޽ˆôáS/·¤ò]É!GŒ=ÛÜ¿RQtbUÂf"ÇDl’ܺÇ,\±'^MÐeßÉÇ6ÇÛwÛú¹ ¶ç‡$iiÛ~.ûvAM¯ÏM·õO|[ä—×kÃ×?)7V“<Û‘iŠ~SLr—%$ª©õ‰•çÛ>•ß}tÈéCI¬ƒœþuêo½ŒëÛæ?ÛEš®£M¾I[j|‡¬/ºn©üoê_×Áw~söõñ¿I¿˜õW×7D¾$þ9bç—ïüPÛKæ‡m,¶µ"çþ•úদ¸ÄÊÄMôã[Ó.Eßz°ùÔqÉ—Úß÷s\:Hô‹‰!uòIõ ©*?dü>zI‘úßW¿å\~ޱ7~Ÿä>W9樯léڔʞzý”ó[º¶JëÄÊH)¿ÉõEºî§Þ¿¢]Èt”R\bU:¹=R{bØeº®Žzºn¿®ë?ì,ÿ ±`ÈX*‹×0ßÐ}Šüò:@Ab$V‰Àw¬°dY±Ï8=¸ûaúæ·ÒÆ ëæ¾ë¸ø "ªÔߢ;îÜA§½~ó‚zH¬°¤ÙrÓ÷éÕ¯ÚL›6­÷jwüíÛhËMߥ¾`ãüg¸IÉO5 –®Çw×õo›®Û¯ëú;¥ùÇ7©²µ)öÄÊöäòÔòkRõ“K.#$ŽLO¶nÃmõëµêO4–È _îõ!”RõJçÿ¦úé«”ùí‹éiæÜº0.¶}´‰ù5Ýï{Õ]üY*eR“ëQóDö×0ÄÊ!ZºûéÏ&&¦dÊαr律>Ãw¬ Møêvêêh½œ ýêE•QU ÿ-é_—a+WÛsãKiN?Î~ªÝêŸýlãçÊÕ2›~º’ñ›Ú¹ú‰½ ±édz¯oÿ:ªýM¿Câó•Z‡³¿¯}ã_jßPÿsöá6Mnü¦º®uÈÔ&ÅüöÑ_­ë›¿uBçWSó#×ú;?ˆˆÆÇ§h||ŠÎzÃóÿVôÏM ±²à ÎÒõp-dDî…ÅÕNÚ·.ßG·ðùêº9p‹§_nBÇëŸÔú™hʾ1²¹ñÙl+µ¿+Yó±-éÈmߨ˜ µ¯T6·¹Æâ3?›öT¾­,çþ!Å%?v~쟤·œw&½å¼3iïøäüésE'VmmZ¹6£¦Ð–Ôc‰Y¸¤'*m’Û~¹‘$ŽmŽ)Ö¾mëOäî¿íùÁÙ·ûqpkéú»hz}¹p/y~Æê711MW}ìSó_tá¹411M]xîügW}ìS411MÓFE&V’ãºPl‰I‡ý¦¢«Š&ÑZsÉn¢}Ž«DN^“§2%ÄËRAºÖÄ ‘W²ÏcO Ûžß©öÔSË.'&š˜3:ºü^¯G½^>råµóŸ]üηÎÿû#W^;_§×3ѽ¸Äª¤íw ôãtŸàäê«ú†Ü Ü*0M,uÁp%:&ù¦ú.ûsö‹¹Õd“ÍéUÿæÚÇè`*3-Ôœ}¤öÓÿ3~“|S©¿lóR?®ñIìËÙ‡Ó¿îCýíê_·Ú¯d0éèã#—~z|‡¬/¾öÓí`ûÜd]ßùÍÙ×ÇÿRûH×_Éøcý#!v~ùÎÛúd›1þáâ‚ÓOæßÁüÏeW\³ ì²+®YP>° ¦¸ÿh â&úñ-i—¢o=Ø}ê¸äKíïû¹.$úÅÄP]×ÇF!uB凌ßG/)Rÿûê—¢\‚ËÏ1öãÆ/Õ=&š´_¨léڔʞzý”ó[º¶JëÄÊH))®/:—]q ýÞ{.\”d¹(.±*\‰©0]Jéz|w]Ÿ“—tÝ~]רéª|’*"$V ]]¼|À0PÜw¬º N¬°äÙ¾ã>Zµj?ï6:H¬°¤yӛΤë®û ­^½Ú«ÝîÝÒ¹o>›vÞw×üg «ÇÝ­\w”ÅToŸ¶UX±Ïx´ŒÇŸ!¢Ç蜳N jߟܻàï‰Õƒ>Iß¼ñVÚ¸aÝÜ—(íߤQýŸ¢;îÜA§½~3 zDwÜq­Øwy‚@*Ý3N7CÇ®;ºmU@Üýpt޲ߘßí?މՖ›¾O¯~ÕfÚ´i½· ãoßF[nú.]ôŽsiÙ2ÜeÐ.½Þ4]ý—Ÿ£c=¦mU@Rä-gœö²¤:-Ê~B”«ÛmùÖlbµlÙML˜ßú 4žswOð%•á%EÞ’ã±Òt¿o¬|êË^F7ë[fA££ þ~ꩉHÕ€8êĪò}7 覼ŕ³-Î[RaLâ''z‹~N}ÙËæ5•âX³f•ó7 œªªð3„?5¾9KμÅxb¥ßÆ;ë gÌÿûú/}Õx›oåÊ}üÝï÷g¿B6¨¨ª yœp!j pñd  £T-Êß|áËôžß~«ñ÷ygŸÁ ÈE![ÌZBTÌzRˆk cñ;FG`¨aFÏK®ÿÒWçs—Ó_û*ºþK_]ÔFÏ[RaL¬ÆÇŸVð-ç9ÿïOö†e@¨Fð-«aÆ”›|ú³7Ìç0g½á úôgohDcbµw|’ˆˆ.ºðÜùÏ®¾æsóŸK˜šš&T4 Á¢—¶F!W˜D©RŠo¨(UФ7iþîc ‰ØbÖ¢b&q!jÌRˆ*" ªúŒ"¯jlùÉÕ×|n>—yËygÒÕ×|.».–[ÓDDtÕÇ>E¿ó­D4›d]õ±O‰×2ˆÅL6P8¸§ádb²Íï2²}#D€„z-QnW2«aæéœc!uC4›ÓØê¥Äi½^oþç#W^»@AµLýJ¥ªð3Œ?5¦¼DMª>råµå-Æ«ö¥¿Ë®¸†~ï=Ñï^r]vÅ5¬àÉ©¿‹…Ë]’,RÈ™µ¥Émÿ~¯ów™sj)SÒì)ƒR,RÎZšBÏ[꜅h6‡ÑËs"~ÍÞ¬ýï @Ta ZÄ ”/дh’—¾äššêÏýž¦—¾ä% ~·F1¾)'^K¡œµ„¨”õdPU‹TÁ­À¥…oÎ’¯÷Îø(8333÷¯2&ZyÀ.‹Mʾ)øf1‹m‚„.=ÚHªˆ<+ÄXj,J¬¶ï¸V­òÓóö÷Íÿû®m;h ßÐ2wmÛA°Ûj€Œ¤È[R² ±zӛΤë®û ­^½Ú[ÐîÝÒ¹o>›Vî3A?øç;è§?ÝLI „uÇL¯;ý—衇Þ¶* )ò–þäÞ¤:U×\óÉÁ‰'žT(ÀRã¶Ûî0?Ç ø3F4›a€8þ?­þ~¨ßLºIEND®B`‚svn-explorer-perspective.jpg000066400000000000000000001521201203611042400340640ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/imagesÿØÿàJFIF``ÿþLEAD Technologies Inc. V1.01ÿÛ„    $.' "+"(6(+/1343&8<82<.231  1!!11111111111111111111111111111111111111111111111111ÿÄ¢  }!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÀSöÿÚ ?ô »Û-V1{«$·©9ó-í +1ó´•È<žz8â·Qka6hô/ÛÿãßãUiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p šý öÿø÷øÑiwÙ пoÿ—p'ü#Ñ€[@· IèÏ&‹K¸‰¾Ç¥ÿС7þMþ¾`#ZiJ¥›Â2€9$ÚMÇéGÌü:þ_• A!—„XÕØ¿Ð“Nϸ\±ö=3þ… ¿ðoð¥ÿoÉ`ÑछÂj2ÎöÓ*¨õ$ô£^ár“èèƒÃðÈî2©r;ë…ÉÇ#š™ÉSø¥cZt§Rü‹aût_úæÿÀ)ÿ²úÅ?ç4úµO/½˜ÇDWí0+»¤·š1Ï[ª5¡'e!<5E+h»4ÿ&jEâ;O F³n»—K”ykmþ±íä`)f&ÐxíŒs›plÀÍÓb'K³lqöxÿôWpJîÅoNÖðGý˜ÁÜýîTâºiS¿Æ”ˆ©áËû»é%·½¶òÞ1¹\c ? U ¡¬HRL5 Væ=jM'L±†êê+o´²ÍqäîRp|­“‘Îpó\Ñ““}“Kï-«ZýFMâ¶·ÖÞæ×Ë—HlÃçÍ  ¡n'ù©ç|‰­ïkyÞߪ`—½g¦—ÿ?¸d>$ˆßjz}Ͱ‚ûO·˜·äH<°ì`t'=ЕD¡)­yoøuþ¶¦åô½¿¯ëϱqu=ÞïÙ† —ÚüÿìnÛ»†qUZ^ÊþB§ï´ŠÚ.µ5íü6wÖ1ÚÉqd·°´S™TÆH1*¸a‘Øz¦ù\“û;þ?äÄÔZÙ—ãÕ´‰-eºT°kxHJ·Q è ÎO5•ÇÖÄ–×úuÕ¤·V·ö“[CŸ2hæVDÀÉËÅ7++½jì†OJ[¾:•´fØ'3§–[Óvqš­kõ®Ý W¾!²´¹—t¶i ™»y’ê2ØÈÚyÉ Ãtäõ2Ÿ/5ú[ï}?/¼i^Éu'µ×tyô˜5#¨ZAk6ygE Äga9À`:ŒÕÉò»6L_2º,]jm›*]êvìÊD“ª’Œž†•ìíÔ:_¡"ÝY40Ì—vÆ)ßˉī¶GçåSžOéEúkù5}BêÏX°Ó,¬¡¸šñ$pÓNbU ŒôF'9©RnN+¢¿ãa½}Ý¿ –Òêã_Ogöèåà0„„’î@¦ä–·ÿ‡žÄm«èér¶ÏªØ,ìT,F娯sÎF>´ÓÖËql¯Ð†×VŽ][X²ž4·J³Îò¬7dä  }jc;Ùé«E4ÓIuW,GL6‰v5#lí±f®Ænx œÁãÚ©ÊÛ‰k±V-jÎmKÈ·¸±–ÕmZáîRò3°+œíÇ;ºqKš×¿K~?Òõ¸v·Rå¥þzfwö—™|©•ü¿÷°xèzÓr²¿@[Ùn}þ›©3®›ixÈ2 –B£ßŠÒâ¿BçÙÏ¥‰u¨ßÂC&‘§Ø[Lñ[-ÃI=ËD0X®·¥LdåÍn/½\oKyßð/Íygkq­íÝ¥½ÜÀl¦˜ž>PpO&—ss§Gœ—ÍbÓ¥ÁgF ´3!P“ŽŒHÏJTçÌ¡}9¶ÿ/À$¹y­öwþ¾aŠ~Ñz,-l·Í}-ªÅæàã#t¬vü£ž˜9•Wû9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€}œúQp³ŸJ.öséEÀ>Î}(¸ÙÏ¥û9ô¢àg>”\ìçÒ‹€B†SO|‰›ÿE½º¤ûkÿxÔXaö×þñ¢ÀsZ#µÆ`gí}¿é²Õ½‰[‘ͪøÖ{»³¥&•-œW3CH»X„‘ä‡9SØf¥(Ûr‹~ÕüA&¡{câ(í#xá†X¾Î8ev‘N~v˜ÿ .€r©3ZÝ[•8&Êú½pc>4}T¯A§ßôFù¶ÕX[GÕínŽÈæ—j<Œ²Ï´ä†§'nü}’•œ62öª4k¯yvêcøžd‚ÞæÚFM@,LfEDÞGÌ# >ç¦I?í D”T­ÐÂBjŸ5Efÿ!|mEN0>пú ×¶ž§Év§™ü=§¶1ºÖ>à"²nÌkGs‰ñw‚üLfwÑ­­î‘Ýeˆ0ü_­z4±4íih*‘MÞ&—ÃêšGŸ}®‹e»™v,PDƒË\äå” “íÅaˆÄF~ìv&1°¿<9>¨|›mê[Èã eªÛʈmåÉûÇpp£ƒÀläàdW®WŽ¿—_Õ[üÍtJÏUÛÏ¡³àmJóÄ:5Þíð:"ê˜À4G|gíœûV±iU”–Û¯]¿'øÙû%¾ß'«ü¿=OÀš†§ªø• £Üù2i÷YçX¶0î@9*A‚kŸ±ioy|Ó¶Ÿ?ÁÙš¦”Õö²ûÓoðÿ€j[økP ÿ²ÚØ@ifßÉ,?Öyeqœã¯|âµÅ>{òùCÜ’æïúœËx [ƒO’ÖÚ e¦”¶Ï,Óo{•~æX“å9Ï ¶(­¯$Ô.b’þÎ8¥›ÃÒÙI"mTYØð Žœz zSª•ª(õå·Ëø;r9t“¿ û= [¶%ô¾»¸ûƒØMf^ÛŠ®$S¿iS´©ç8íUYóJ£_iYyj÷õ¿KìDQŠÛ•ßðéèKà¿jšVµ§¶¥j²C‘ös/,žk6ÌuàÎ1ÇáVš\ÿöí¾Jߘ·KN²ù^ÖýQáÛ…ø‘q¦ÿâY¦;jc8L£åü÷«:E·ö}Õèõü‘UwKù¬ßÊëñzü?xn{Ÿè×­ ¾³amë<(±1¶í;de¡¥j’mtVõ¸Þ±Iwý ßxwZ×ï¬îtÿ´XD$h®äUkϘ ìr¡FÜüÙ±Û&ª-Ƨ´zíÿꯧÏÈM'E¦ÿ//Ÿ_#:[kíOPñ–—g¢\Í5ñ>vŒ%±hW™>lü¹Ïʧ15.TþÓ׿¿È®nZœÏùVŸybûÀÚ÷Û5m–¦á\ØO.¡n¼Ærx'gŽœÕ©ÚJVÚmüŸoB9}ÅîÛçÔ}Ç„u›ýPêÙ2[Ã>³mrÖ’²oŽ8ã*Ò0©$àáI=?’äq¿÷ߥöü‡?{›Ñ/[;¿ÃO‘¥â¿ j—^"»šÂË}¼ÚöˆÊÊ Ìĸ'Œúž=ë&ã5ß–ß#DÕàû6Ùâ êèö÷3Úù[øzKk‡ó’=’ ¥P’zeO·çZW’ç¨ÖÏ–Þ¼ß×äE%hA>—¿þoëï/ø—Å7#W‰íõ‰tøXF #hA )#äç¹##­ÿˆÖüÚýÚWfV·'¦‡m…q¡%ÃjBãÕ’?-:rPÝ»±ê}«4ìÊkž¸ÇŸÚ“ønmbÏìQÇİ3E*»#®8#‘J›åsÓVÕ¾áÍ]Gçqöº6§a¯ê“>…%ü´°ÍÌè (%äÆFÐÀç¨ëUOÝ\¤›¿®ºyýß!KWÌ»Zß×G×òfDþ×U.c]9É%]AHtÃ@NK{w}ªi{ª•þÍÓüm÷ßüÇ=yíÕ+~-3LÔ5­;QÒltÉŽ5ù$7åGYwíû¸Àù@ç­~ z(«úïþaSz±ï§à‹W~ ×å›UÓ4«;«->ò+œ‹·‰ãYS ).ªøÉVàd÷¨³ö\½­e×Gv»[¢ùy—uí»Þý¶µýMÏxbú=BMGRƒQ·œZÇk²í Áç €x NNOŒô9%Ì×Úwó0I®Tú"¿‹<5y¨k±M¦èwVz•¼ñù:¼RF#x¾RáÀmÇË´©íÈÖTôš–Úëæ¿àéý"毼´òf|^×®-n´9t™m¡ŸW{·¼wC‡ÌÞíbÛŽPçžÔéh©_NOÏ]?©öíö¿É_òcàmoGÕõXYHú‡ö¤¬öÞjwhçøyÀa÷†{Ž{ TwG£Ò^]ŸËõc¨¹Ûî­o»Uóÿ/SÒÓO, ì##8#U7bVÂÿfŸîÒ¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷h¸X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓýÚ9‚Áýš»G0X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓýÚ9‚Áýš»G0X?³O÷hæ öiþíÁ`þÍ?Ý£˜,Ù§û´sƒû4ÿvŽ`°fŸîÑÌìÓýÚ9‚Æ^½oö3c.1‹‚?ò•pwbjÒø”_7ö;iOfQ Ý7ä ,ïW£dtÖ©%Ô VZ…ÏØàûzÇ×–¾rFAU||ÀH#9î~´ìao ÚÜtó>Ùÿ£ÖŽ­Žõ )¯b]5çF½¹•$Žò×k£Ìî¤n”Œ:R¶([{›“¬=ÕÅ£Z£ÚC42e’f'÷nØ‘zã¿¥4„s¾ Ým6žPÏ¥ÀÊ À'ç¯;¬Ï¢Êt íßôF´Zæ¡F,´¸¢Ôâ˜ÄÆââ,}°AŒ)û¨{ç9bÑΡ¤v)`ç^ó®ìúy_Ö»`x‡ì04ɤÜÉ5”‘oŒJ’AÌlOÞÇlœƒƒ’ ä£Íx˜l Õ]×âu?m~Ï¡@q×+ÿ µzÐzŸmhZìöúm•…¦š÷-oenìÁÕ~ü`ޤzʥǭÆhnê_ô“þþÇÿÅRä]Âáý»©ÐOûûÿG"îíÝKþ€rߨÿøº9p¸nê_ô“þþÇÿÅÑÈ»…ÃûwRÿ Ÿ÷ö?þ.ŽEÜ.Ûº—ýäÿ¿±ÿñtr.ápþÝÔ¿è'ýýÿ‹£‘w __ÜjÍm}á±sLr¼L¹ à·PFhäWNûý —[ÔUB®‡ `~ö?þ.Ž_1 ý»©ÐOûûÿG"îíÝKþ€rߨÿøº9p¸nê_ô“þþÇÿÅÑÈ»…ÃûwRÿ Ÿ÷ö?þ.ŽEÜ.U²»–Áæ{/ ­¹Ì’yMïsÕŽ©î{Уd¢žˆÖå¯íÝKþ€rߨÿøº9p¸nê_ô“þþÇÿÅÑÈ»…Êð_Oow=Ü\\cΑ Ò``ù¹ q“BŠK•=½nXþÝÔ¿è'ýýÿ‹£‘w ‡öî¥ÿ@9?ïìü]‹¸\?·u/úÉÿcÿâèä]ÂâI¬êFÑÉ »£ZHˆ õn¤é¦¬ØÔšwFv‘:+HÚG„!±2rþA‰üU[K_Ai{š_Ûº—ýäÿ¿±ÿñt¹p¸nê_ô“þþÇÿÅÑÈ»…ÃûwRÿ Ÿ÷ö?þ.ŽEÜ.Ûº—ýäÿ¿±ÿñtr.ár½ôö>oؼ4-ÄÎdFñ(g=X€ÝOsÞ…’ôA}nXþÝÔ¿è'ýýÿ‹£‘w ‡öî¥ÿ@9?ïìü]‹¸\?·u/úÉÿcÿâèä]Âáý»©ÐOûûÿG"îíÝKþ€rߨÿøº9p¸nê_ô“þþÇÿÅÑÈ»…ÃûwRÿ Ÿ÷ö?þ.ŽEÜ.Ûº—ýäÿ¿±ÿñtr.ápþÝÔ¿è'ýýÿ‹£‘w ‡öî¥ÿ@9?ïìü]‹¸\?·u/úÉÿcÿâèä]Âáý»©ÐOûûÿG"îíÝKþ€rߨÿøº9p¸nê_ô“þþÇÿÅÑÈ»…ÃûwRÿ Ÿ÷ö?þ.ŽEÜ.Ûº—ýäÿ¿±ÿñtr.ápþÝÔ¿è'ýýÿ‹£‘w ‡öî¥ÿ@9?ïìü]‹¸\?·u/úÉÿcÿâèä]Âáý»©ÐOûûÿG"îíÝKþ€rߨÿøº9p¸nê_ô“þþÇÿÅÑÈ»…ÃûwRÿ Ÿ÷ö?þ.ŽEÜ.Ûº—ýäÿ¿±ÿñtr.ápþÝÔ¿è'ýýÿ‹£‘w ‡öî¥ÿ@9?ïìü]‹¸\?·u/úÉÿcÿâèä]Âáý»©ÐOûûÿG"îíÝKþ€rߨÿøº9p¸nê_ô“þþÇÿÅÑÈ»…ÃûwRÿ Ÿ÷ö?þ.ŽEÜ.Ûº—ýäÿ¿±ÿñtr.ápþÝÔ¿è'ýýÿ‹£‘w ‡öî¥ÿ@9?ïìü]‹¸\?·u/úÉÿcÿâèä]Âáý»©ÐOûûÿG"îíÝKþ€rߨÿøº9p¸nê_ô“þþÇÿÅÑÈ»…ÃûwRÿ Ÿ÷ö?þ.ŽEÜ.Ûº—ýäÿ¿±ÿñtr.ápþÝÔ¿è'ýýÿ‹£‘w ‡öî¥ÿ@9?ïìü]‹¸\?·u/úÉÿcÿâèä]Âáý»©ÐOûûÿG"îíÝKþ€rߨÿøº9p¸nê_ô“þþÇÿÅÑÈ»…ÃûwRÿ Ÿ÷ö?þ.ŽEÜ.Ûº—ýäÿ¿±ÿñtr.ápþÝÔ¿è'ýýÿ‹£‘w ‡öî¥ÿ@9?ïìü]‹¸\?·u/úÉÿcÿâèä]Âáý»©ÐOûûÿG"îíÝKþ€rߨÿøº9p¸nê_ô“þþÇÿÅÑÈ»…ÃûwRÿ Ÿ÷ö?þ.ŽEÜ.Ûº—ýäÿ¿±ÿñtr.ápþÝÔ¿è'ýýÿ‹£‘w ”u©îµ›1mu¢\*«‡WŽxƒ+ ò>osUÊ‡ý'üújßøoZ{GÜVì ?çÓVÿÀ›z=£î/]Ø5Æid4[¸VÓw•$w¹l’ÄŸj”Úw¸ìŠ?ØϦ­ÿ6õ^Ñ÷ƒþ÷þ+=Y‡pn`æhû…‰õí5¡kæè·¶Ík…Þâ%;E9'ŠÂTÔ·g^S~MŒ¯øB¢ÿŸMgÿíê=„{_Ú•»/ÇüÉ-üoé$šn«p¨A1KuFö8ÁÅ5F)ÞäÏ2­(¸è½ ufÔôŽ[F¶–Òö4e$½·bGLVÐ+<ãKŸñòÿö ±ÿÑmCBOjGÄwÖk:Emir°„]êಔF$ÎŽ#CóÈã‚k+AÍÿ{ðoïÛô*JÎËËñ)YüEµ³µ’}Zo9®%Ú0a¶Ä~D.ßë$UûÒtÞÍÏ‘rj:=Õïÿ4¿.ˆVmùhvúuä…½í£ï·¹e±Œ« ƒù¹EÁ¸²c.es7Æ:¥Î¢«-‚S<1ð<áCȪO–„3šÍ·Íßü›ý KFû¶þ'ºŠÕc–Rú1¢ŠÛL{D@»™–æAÀ,¼çœàƒSQµ˺W¿nßÖ»W¼¯ÞÅ Æ:ŒÖz(û$š„·S$8ã6«)#2NNs€0ÆpNí/iʶ÷¿ [úëùÞÑo®ŸÎê £ñˆ.t}rÂO§¼2Mväñ"²(qÎ0 å¸è íʃ¼Ü^Ú/›½¿+|îô•£u¿è·ÿ?•·e¼{k¦YA>³A5Äñ‡ŽhPŽfLíy±Àì ôè(ƒæqV¢þÿÇëp—º¤ú+þíSŶ¶šuÄ©ëlƒŒŒsM^ñ¶Íµ÷+ÿ_>¢zs'ºWül]Ó|w¤júèÑnK–wˆnš|IJ”W.1µ¹*ã‚r2ái¦ãëòþ»Ùù½Íü¿ë¥Îž€9Ÿëz†Ÿª¥¼3ÙiÖ¾Hqu}o#Ã,…ˆò̊ʱ-’wŒŽT5Ÿu§WÞÞ~[õØrÒ7^-·ÿ1-¼y£Üëï£ÀÅîäHšã²ìß½~ërʪqב™Œ” äº+ü¿/¾Ã’åi?/Çúér ˆzn Dv6ww7-0…míå·˜’QœÉ)@0ÕçÍZÖÖóü-ÏôßB^—¿—ãòþº÷ŠçŽÜɦi÷í W±@×j±å>r¤‘ª–ÜO,¹ÚAÁïSyG³¿ÏGoNúÛMvÒ/º_wõåswDÕ“UŠsö[‹9­¦0ÍÆÍèØ Õ”ä0<Ö«ì©.¿£kôÍ¢ôÌc…ÜuU$f³©'9.ˆ¨«É#‚Ðü}4A=äÖzºOoºéÖ’»¢,O™Kœr¤ln=5jÒqZë£èôoôïmUìµ%÷Û{®¾¿Òô¹¾þ-‚;Áo.›¬‘Á4ÄGåÁ4€‰ˆ|–ù”eC(,>n¸”ï·¼í½¿íªË_øe{_õïmL™>%i61D50ñNÅÚXÙ ‰ Q+§*ÒäloõeÉÆp2jM%ÖߊOׯ˸4Õôïø~ýgÅ“A¤ê·šV•usŒrºo(@îœ0È€r À)Áñ­­¯l¬Eæ³` 2pÍÊþVµ²µ›û¿¦¼ˆz7ÛOÇ É|uduå麔ÑÙ©{™cHö‚GŒ±Ë‚yŽ'⦚ϣ²ûÒkóé·^—©.V×]¨#"˜“¾¦v³.Ÿ%ƒ¨ìó],3³•VV F:|û=‰©ºNÏk?Á_òOð½ÖÖú~-/Ôæ/¿²üù"·Ždi¦”,M [u„HŒá–ýä@òÉéÙÆþê–¯¯2¿ƒZ»m}=,Ýÿiئd¹²¿¶´ : ¹#O-šÅÀ‹ôF íÁÇ\ñK›K÷W]ÞËï»[Û¾Ú‚]<íèUƒÅ÷+¬ÝEu¥jQïŽÝm, ÁçHïæ–`Cíjdîa§¹æ•õ[»¿’I|·ŠkF¶·ê\7Òü+Cvƒ ¹Y(YÝz¡÷z‘ž(Vm%Õ¤¾jéú=½tî¦ßKþ /Õ[É›šuìwöí4*ê‹,‘|À ”r„l©Å dû«ýá³h­âmB]'ÃÚ†¡£Kknò¢¸$yš–íoT¾ö‘QWv0o¼{cez ±ÜÃf–4sg-³ó#DU3\ç$ð8$E핾wÿ"V©|ÿTâ­Íõ¼ök<Ö¾\‘Im †W3ù*aÕÊ%ìøçžG7»óµ¿òkÿé>€ì—¦þ–þ¼Î§DÖ#Õ–åEµÅŤ¾Lö÷wÆÛCU™H*À‚ ëMk%çø;ÎÌÑ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €<ÿÇ_ñ髨JßÿIÚ®=Þð§ü|¿ýƒlô[R`kZé°Ú½óÆÒ}/›&â8;8ã¦zóšÊQR§ìúkø¶ÿR“´¹½?×Á– Óu-FÊâ•n#h™Êùq¡R DH~îr8#¥[ní÷¿æßàÛ·‘:ÑB‘¼¯3"€dp9õ8dû)·¨- šæ–š½Ù^â{b$ŽT– »Ñ‘ƒ)•‡P:ƒSmS]?ɯÔwÑ®ætÞ’s“kú«\ÆÀêþ[íÝApJƒœnpE'Ó]ÕŸŸü6»[pM¯–¿×õÑÚx2ÊÊÖÞ;ËØ^Útž9ƒ!pV9R(9ÈêIãÍï)zþ.í}ÿ?2m£^ŸÑÒN}2Þ}J;éw3Ç–û 29Rr1þÀýj\SRO­¯ò¿ùŽïKt9Õø{§Ei%­¦£©[A4-ÊP»¸™ pdn„duÍRºi¾–5k?ÁyynËÏñèj_x^Âö}BiZukûcm&Ö eáˆTœýÅüRVÛºvß/óaµ¼•Œ¼wyªÉÔÞN‚âD¶K…–•[ ä©OõŒÜÈàtcegÑYyjšû¬´iúé¨Ýšåî›û¿_—W¹ª< Gsç꺌óÜy¸c¼F/P±…'¡Rz¯Mï{ùµoËOø"I%n–·È·¥è ¥Ý-µkólÎÒ5£ù&"í’Ç>^ñ–%° žP´VéÓËþmo =uþ™±@Öý­$‚MRþÞÚh„SÚDÑùS/9r\‚A*T‘JIYßÎÿ×Ýý]Žím£+?„àh¯-F¥~ºuà—̰#2gq¡qÉ-ØÏlqK—Ýåí·•×Ýç}>Wu§õoêÁcá(-µXµ)õûÛ¨Š•iÌ@aRDj"€1+tžù´ìÛïÆßüŠ&Ú%Ño Åç¶ÝJý- ÊÝ‹!åyK IJo°É±ÉÆ*`¹-å·â¿슗½=ÍK>+)ïe‰œµäÞ|ˆÀmŠœqÓ?ZkH¨ö¿âÛýDõw,ÈÑô`AÅLâ§ÔiÙÜͨѬt¿2o"ÄÀclÇÊ*W`Ç äd’$“)ríý.Þ|¶Zh6ï{õ·á³õéçÔe§ƒ,-´ýBÌ\ÞHº„&¤‘Ô¾ Èä‚Ì­ÛÒ©Y$—FŸÝd¿$wæë¯ât@`é@’²±G]Ò Ö´©´û§–8æÇÏ èA ’ ™EKëþgäTdã±BóÂz}Ô×’<— ö»/±FcNåA1A<ýÑÅUÝÛîÔ¾kôîJ\ª)tVþ¿z„þÓ®4ø¬giÞåž\o±˜HOÞ¶1ƒÀæ§—ktVû­gë¢_/ßr¸ðdFfº“YÕd¿3ã4"H¶FäHÀ‚§9õæ«gu¦ÿŠKô_4$´·Oé’ÇàÝ-Ô?'Ù¢š2]óŒ¹ÞïÇ-ó?L½¸ôžUªZ]%è–Öóó)I¦¥Õ;ÿ^[}˱¯¦YG¦éðYÂÎé!Ë7©'ÔžM[w"1åVBjÖjšeÍ…Ã:ÅsDå 8Îy©¶©öiýÎå'b–·áËMbX帖â)"ˆÇÂáLgz8qÁùƒF¤vëhµ¥Ì·Óð¿çv˜—£ÐÌÖ¼#s}»jökØ$M·ˆU‘<ؤlˆ)#Êã*FIϰ•¤šùýÒ_ûwÝæ7ð´mèÚLzTsây®®.dóg¸Ÿnù[Fv…Q…P=riì’[žâëv_ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €<ÿÇ_ñ髨JßÿIÚ®=ßð›”¹}»yÓl:¨?òͽj$4t~{ú'ýð¿áP0óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€=ýþø_ð ÏDÿ¾ü(óßÑ?ï…ÿ <÷ôOûá€+œ(ޤ¢€?Jž±ñµ$o]€/òÍ'Úÿé„÷Åkÿ¦ß}¯þ˜Aÿ|P«D’4gRÈpÛ-Ý€8ÏP= þØ‹þ}OþÉþlEÿ>§ÿdÿ ?¶"ÿŸSÿ€²…ÛÏ©ÿÀY?€툿çÔÿà,Ÿá@öÄ_óêðOð ûb/ùõ?ø 'øPý±üúŸü“ü(þØ‹þ}OþÉþlEÿ>§ÿdÿ ?¶"ÿŸSÿ€²…ÛÏ©ÿÀY?€%‡P+2[ @;ádëŸ\g¥?íôÂû‵ÿÓ?ïŠ>×ÿL ÿ¾(μzûíµfÚ«JÛ…ñîÕ´:è<H½rÒìðGýqj‰ìÔÓäkÿ\Sù ™«­^µì¦•#D’2 €”ƒ‚Fx½k¦4!(ó)ÿ_yË*òŒœ\K3êCtQÀFˆ°}ÒÈ;qÎÎ9Æ7n ôñ*â¥N¿%¼­Õ߯oMm½ìöô!MJß×õý#J½#  ¾h£ÜȈ%qž„÷úR{kHå·ŠF¸˜@Ä ¼d»@“#gÎÌ$›œôÔ yq7̰v繦—qNmä•ö‚XIÁÇ<0\v4µ¨êã(Á‡¨9¦o ]þ?ÑÛúPo.ÒÒk™s²ipM&ì®)>TÙ æ©wáïíë[µ1#7™ ¢ì@;óÉ÷äW«Y.~Ÿ‘ʧQÇžæÖ“zºŽ Ú®ß0Bê vÂ\ѹÑN|ñR-Õ–%¹"Lƒ‚°Gû¦€)i¿òµÿ®)ü…W2,º”±?ï hÄEÌŒqåvŽBßòÐÿË>ã$q¹Ê„f“wûÚïèˆöŽ-¥úÂÜ[•‚ksçìù¦¸`àÇ!é"¨ê£¦øNŠ¥(8·¿vú?6i ¹&™£[ŽäŸ¶ÙŒð-åãþ´%SšðI#ÛÙ2ËpŠY•YI@:ðHÏ=úâ¸18—ÝÓz¾½ü/éôS¦­Ï-»wNyüÙc–F”"'Îvœ?;”8ã°ëU…¬ê¹kt¿¯é]Š­>D®­sFÜ‘&AÁ Ø#ýÓ]¦-7þAÖ¿õÅ? i—s$ —Xöîqþz¯­+Ø íå«Iˆq–Ìlý(¸S Èbi#RU In@8Ó×ÿ¯…{›°@*ëž›¯ó¢à:˜!88˜ú*’!@ ‘ÌæFXœ*pÈA9Îqž¸ÀãÞ•À@Aƒz`-P@P@P@P@P@P@P@P@ ¸Uã>½¨Ò°ËŒüƒ¯¹õ è kKñ-õëÂF’!2o_õÄ‘ŽÄĸçv9ë]S£Æñý-¯¦§4kÉ»8ØÔ±¾iî{–MÊY‚+$‡eÁÜ£—üÙÏéâa±3«QůøZ¥þw¾–ÛÐ5ÝÚOßúl¿úÿŸó‘è~ÓysäÑÜφg‰%+Ï̤öŸA_'ŠÌqP©QEÙEÙh¿]OB4i¥Öþ¥ýò[í*+‰Ô,„ºœq÷X®ñÜñǧO—è05¥_ “ݜ؊j•G± ω4Ë]Oû>Ig7 èŒcµ•ã›î«È«±ñ€ÄW¦F:ÿàþ ï×NÆ-Zßב ÷‹´->ÆÖòêüGouš¹ÊeW8#—QÎ1í•ÛÞåëþ~{tbésJ=BÕŽPe‚$™ÀvÓž‡î7ONÜmR|±r{-þëþ µ²]v(è¾'Òµ©V+ §Þñyщíe·ócÈÓÌUÞ¯LŽœm®V¯ä+Ø×éíóý?NØùPç¶?Ïôý;cådÓ, Ãà°Q±ˆ$àpÔð2q”ë`#±½·¾€Ïi&øÃ¼yÚW ŒU‡8èTÃÛå:'ß_¼6mv'éíóý?NØù@žØÿ?Óô픑ˆÛŒr¿û7ùÿ€µ0 ó›j­öO.ÞÏQß©½œdG_íXÇYm·7Ëåÿ|Æpq ¤þ8ÿ=WþÂVÿúNÕ¼:è¼ÿÿ`»?ýÕji¿òµÿ®)ü…@Ë^¸·{YbóâóRâmɼn_Þ62+(Ô…8Ù»jÿ6)AÊZ/êÈf·©Ù„Q^ۙı ˆJ7œÈ™ùsž•Ë+UššÙšÿ#XûŠßÖë¼Ìçü7à½ÃZ•ýþ`–óß6\Ž‘¯D¤ØÏ P7‹mšèçÿA4€©3Çm*‚fQ'œßÛŠ,„[$} … €=94 Ž[ˆíåi!d““Î)€Æº³f,Y÷üÞHÏ=yÛE„Kës$ҡʳúc¢@ĽÿUÿý{·ô žî ’”ùÿq¿ô@´ßùZÿ×þB€)]\EôÐÝ]A I[‰ÕÿªÁÃ;á|+±åz¾ª¤"•Ý¿¯—æc(É·¡[O™.5Ao§ÛBöö²‰f½“k±ˆìE ‚çžÜç°œÝI+l¿ÈšR’›ú£ Šãþ?¬ÿëÞOý hím-áû4NÐï4ª@*¼gç§ë\¸‰ÔV…5«ëÙu4‡*Ö]QÓîc×"Ó­œ²Á²_9>]‘äŒp†\ö4ã^’é¥Ñ¤_#ç:ãX£ …Uèu§«$c)9;½É ûçýÆÿÐMY%-7þAÖ¿õÅ?  ‰hÉdÎ,óçÿ¯]††/Ÿ, K ׿Hê9ïBˆUˆašhcXâäd$g=áßü˜qÔc˜Ë!_5Ô…9Wã¾ôÒ°•]J° ¤`‚2ª+;K{(<«h‚e‹3Y½}ã'ή&ÀÈÏáI«€ ›±!BÀ‚)uÎyúTò»ŒUF2O$’{“Ö¬DØÚÜ\E5Ä++DrèÞ€úŒóñ4`œ’}}( € ( € ( € ( € ( € ( € ( € ( €&l@›GúÆ1þïµ !¦@`hzµ‘·Òþ ±· bA¼jÑŸÝü¯¸°Ï^ᬡe«ì‰jíéÔ»g=¬Úåñ±¿Žý ³ÊŒŒ7fA‚Pœ*õçö¢1JnK­¿Rïî¤hél2äí®iK“•hùRO³[¿.mÖºj.½£—K§ê»|ŸMîvZskšfŠ-e±…ÕŽŸɾÒíwHtç•åWæ?Þí·åÞ¤”¤Úïøi¯ç§‘•8ò¨§§éÙyúš°Ït×òÃ%Ÿ•l‘#G?š÷%·.ÞÛµyïžÛ~XïëøwnËñòr1qŽWÿfÿ?áÐ+S €8Çž«ÿa+ý'jÚnxeCÌêK(:m*ÅOú¶î9¨#¡Š5Š5Ž1„@G @P]ÆCB3@ ò!ÿžIÿ|ŠrF‘çb*ç®(tWu =Í7ȇþy'ýò(ê¡° O OŽMÛ‚ÊäzGµI@ š(牢š4’6dp?QI¤Õ™Q“ƒ¼]™Z'M‚U’>Ò9åY!PAö8©TàµIߘ aöüŪÿßB€aõ_ûèP°ú¯ýô(òϪÿßB€,ú¯ýô(òÛÕï¡@–Þ«ÿ} _)½SþûyMêŸ÷Øÿ<¦õOûìSz§ýö?Æ€)½Sþû_ñ ÉoTÿ¾×ühò[Õ?ïµÿ_%½Sþþ/øÐä‘÷ž5ïgùf€zEþ¨e‡ñŸè(*( € (ÖÞ]¹‘”IºVÜÄ0à8öV»Òô{ÉÚ{½&ÖyŸ¤’ÙŽ%}8ü¥hVDGBðÿýìð/þ#Þßp²5>н•ÇчøœAR0ûBöWFáþp=h^ÊãèÃü?Π í Ù\}‡ùÀô}¡{+£ðÿ8‚€´/eqôaþçÐPö…ì®>Œ?Ãüàz >н•ÇчøœA@Ú²¸ú0ÿóè(ûBöWFáþp=2YUª©rHíŸ@=iPãøóÕì%oÿ¤í[C ï ÇËØ6ÇÿEµDƒË’Þæîîi-ìmds…c3ÈùyÎzc™Iɨ­Á´•ÙZ=SÃr«:£}!¼ÿ ÛêÕ{~(ÇëûþfŽ‘¨Ç#Úý¬ˆŸËq$“ÆÊØ1£øÖS§*nÒ4„ÔÕÑkûÇÒü —ÿЍ,?±ì}'ÿÀ™øª?±ì}'ÿÀ™øª?±ì}'ÿÀ™øª?±ì}'ÿÀ™øª?±ì}'ÿÀ™øª?±ì}'ÿÀ™øª?±ì}'ÿÀ™øª?±ì}'ÿÀ™øª?±ì}'ÿÀ™øª?±ì}'ÿÀ™øª£qáü3=­ìüäùsJå}€ ‚>§wø— ¶E”Ã8¹Šaž òa±ÝNyÏœSÿb‹ûóÿàDŸã@Ø¢þüÿø'øÐö(¿¿?þIþ4}Š/ïÏÿb‹ûóÿàDŸã@Ø¢þüÿø'øÐö(¿¿?þIþ4}Š/ïÏÿb‹ûóÿàDŸã@Ø¢þüÿø'øÐ/j‚ö(Ä“„h݈óߨ+Žþæ€&û_ߟÿ$ÿ>Å÷çÿÀ‰?Æ€±Eýùÿð"Oñ ìQ~ü“ühû_ߟÿ$ÿ>Å÷çÿÀ‰?Æ€qµ¼O4“¬q)wo>C€Ië@n·ÿž¿ýøºÿ W@OoµÄÏ “´r¨to>AFAëL âKF-妧 Vd-w.¹‚Å+ $·Û(‘¬e¸I!mÀqÎÁ28#‘ëÞ„À˜ÞfÖ9cŒ—”…Tnnàý0sô4ÀQg»™æšGîVF@>Hþ§Þ€±Eýùÿð"Oñ ìQ~ü“ühû_ߟÿ$ÿ>Å÷çÿÀ‰?Æ€±Eýùÿð"Oñ ìQ~ü“ühû_ߟÿ$ÿ>Å÷çÿÀ‰?Æ€±Eýùÿð"Oñ ìQ~ü“ühû_ߟÿ$ÿ>Å÷çÿÀ‰?Æ€±Eýùÿð"Oñ ìQ~ü“ühû_ߟÿ$ÿ>Å÷çÿÀ‰?Æ€±Eýùÿð"Oñ ìQ~ü“ühû_ߟÿ$ÿ>Å÷çÿÀ‰?Æ€±Eýùÿð"Oñ ìQ~ü“ühû_ߟÿ$ÿ>Å÷çÿÀ‰?Æ€±Eýùÿð"Oñ ìQ~ü“ühû_ߟÿ$ÿ>Å÷çÿÀ‰?Æ€±Eýùÿð"Oñ ìQ~ü“ühû_ߟÿ$ÿ>Å÷çÿÀ‰?Æ€±Eýùÿð"Oñ ìQ~ü“ühû_ߟÿ$ÿ>Å÷çÿÀ‰?Æ€±Eýùÿð"Oñ ìQ~ü“ühû_ߟÿ$ÿ>Å÷çÿÀ‰?Æ€±Eýùÿð"Oñ ìQ~ü“ühû_ߟÿ$ÿ>Å÷çÿÀ‰?Æ€±Eýùÿð"Oñ ìQ~ü“ühû_ߟÿ$ÿ>Å÷çÿÀ‰?Æ€*³Z,ÒD«¨Êѯä¥ÄIã+‘œWHÛ‹[‰^$7©$j’S1¸gùŽøõ3Š`q8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[TH³+/ü"º‚È&ËÀŽÜõ”¯g˸ôêa^hðËöÛ«; d´Õ0GЄ¯8B[=Æàq_)™cqs„ùçî)ZÞ›_¿}^ý6=<>„% GÞ}mßç§ÜhørMº¬-XÒæÄLÑ¢„\å{ñzó[åMýfQéÊ¿?ÔœJ^Êþm&½×F­uou©ßé÷72\G§Âm`’Ò`Ìe\)epX‰d†HéômÚ-Å]¥{?&¶·G·}nìpYs«é?-oóùlµ(\x«^Ô®tûaR¼(mZ5Ä®-äžHË‘œÆ¹ã}jÝ£9=ã«^q\ªëÏY[Í.„Yò¤ô–‰ÿŠíYù+käý ñMÕ×…|UªY]2ý“y³cîˆ}ž7©ÌÜyâ¦Jц»½×UÏm>[fÕºmçoó+ØxºãO²Õ®ÍΡ¬Ú[4Bo-<‹´ÈpÑ”H•¶€Ñ6|²~cÜ oe¦­»z%­÷êŸëÜ…¿Êïô·¯Ý¶»–l¼m¬ßÍ¥§‡^2M#-Üó[FV?/”2@óå*{sS'Ë.ÊÿŸù_æ5ºO¯õýn&Ÿñ ïá·¿·ÒˆÒž[{yf{ŒL’̨T,aHeD–N›’å~··“+ÙÛ1j“¾ë-lým¿§ž„6~9¾Ônmá1ÙNî@¶7½Ba•ÕgâýØn¸ã½d›ii«I¥êÒ³ûüôóоºm{?óªx›[HÙ4û[MR‹2Ñý¬ÉC4›GÏåpIVSòð9ôª·¼’×VŸÊ7þ¶ìMýÖü®¾û^¤ÃÆ7 ¬¶˜–0>ÿ28®!–fÎD,P¹„'U`v³G+×Ê_»”£Ñ6¼ÒvýoÕy–•¥û¤ü¯ýy36ÇÇZ¬vœ—:3ßÞ5”7W j'—r¸8*#€¨sµ‰V(£€óä—´qÙ'oëÉ&¼ü»æ¯Ë_ÀíØçP€ôÌ2uú¥@Óº¹f…P@Gq wI˺9T£®qF >ÀŸóõ¨à|ÿü]+ '·†;x#‚ÛJ9ÀSŽÿ¿ÙdþÔþÇû_Ún<Ï´y^gúçÆwsÓ…g ÇibûV§ý—ö²}¤ygÛåÿ©8ÛÇ\þ5Q‘Ë·ý}Íÿµ*€Ñ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (  ­§Âf’U’ê&”†&êXÜ+œ? V@:ÞÎ+y^TižI+<³<§8bp>cùЕ€¯sý—ý¹iýµö?³ýš}¿kÛ³vè±Ügýi0}ÿïÛ´Ïì_ì¿´}¥·}“Ëß·É“9ÛÎ3Ò’µôfOùÁÿ\dþiV#‰ñÇüyê¿ö·ÿÒv­¡ÐF÷…¿ãå¿ìcÿ¢Ú¢@»4Ž}6ky—tr¼Èëœd`EFÃ(‹ûkKË+Qo,7ì²Í3ïMÇ'#iÝ‚O;†Zð1yeZñ”SVr¿ü ¿®ÝêxˆEÆN÷E½/L‹O(þl“J¬ ϵF8ø÷5èáðP¡.uñ4“ù^™ÏR´¦­Ò÷#¶ÐtÛmHßÄ“™÷¼Š$º•ãG|îe˜¢“¹¹P:ŸS]É´bÕÇÛhºe§“ökE‹È¸’ê=¬F%“vöëÎw·ž: KÝI.Šß/éÖíõwù€Ñ4µ´ÔmRÑR NG’é˜ € x<é^´%eºm÷ßóõrëÿÃ5JÔ¦–kË]ï4" Èé½AܹÚFJžUº©Î¢Öw]ïó]|ŸŸm6D»iò}=<ŒëØO{o+]êf"–3Ô®K±r‡™<ÍÛFÏ»œsšZß­¿ ïß~£»V·Gë±sþ_Ev–B7‹fØã‘ÒQv¡1±ŠŽ*HÀÇACW½úßñÑú]obR²Itý×㨖Ѭ'Šx-æya#Ëy  Êc…÷ËÓž”ß[õßÎößîþ®ÇýÃvþ»haAi6ÈT"§ÚæÚPÂ6ðуÑ*2pM¼]×—á³ók¾þ`ÕÓO­ÿý/Ô·¨è¶÷¼ÑíXZÃx$Jù˜ó™ êw7°ÏN1R⚌^Êßr¶Ÿrµþe)8·%¾¿õÐÒ€%¼à „Ž5ª:«“rm³8ÅE(®„2Ú[Kv.¤V2€£ýc;I+•ÎÓ‚IŽ56("´¶†ìÝF¬²Ãýcm]ÄÂçhÉ’'š,¯2€"¹.#Ù&FU‡O¨  ½FÙnmÏSŽYar§Í¶.‡ †ä;Ô‚È>œö¦{mE›M6qÆ.­ÌëpæIÞgi†Vgf,HÚ½O@N(½œZé·ãþb¶wܱy é—¶—Ö·V‹,ƒ‰.˜áØõà€‹Ó3Ö…¥­ÑÝzÞÿ™WÕ¾êß¡eìmžöLj‹thãrOÊ­Ø9Ú9ëBÑ·ßúþ¿à Ú%Ø£†´ˆ¡¾†;M±ß©K…ó ;9ùy‘Ïëô¤½Ô¢ºYýÖ·ä‡}yº’6¥½´vòY«Ã’ȱ»]ÒO ‰ƒÇ4œSV}­òÓü—˜/wn÷+ÅáM+ ìÖÞfŠvFv’êW—)‚˜±uÚ@ÆÇnµM·¿{üûþžšl$­·k|»~"ÚøWHµ½Žî('2Âìñ‰.摘Ä#1PNãž9ÎzÑÝwÓåÛÓË`þ¿àúù‘Gàí!‚;È +å£CqÎBe\ƒ²žNÉ¡{®ÿÖûú°zþ?Žþ†«ÿÈFúã'óJ³@P@P@ü»×ÜßûR€4h € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (´Ÿòƒþ¸ÉüÒ€8ŸÇž«ÿa+ý'jÚox[þ>[þÁ¶?ú-ª$ÙÓÿÔ7ýv—ÿCj–( € ( € ( € ( € ()­­ç`ÓAŒ2è ÅEö+Á~ËnŒå®qþH ûŸüúAÿ~ÇøPö ?ùôƒþýð ìóéýûá@Ø,ÿçÒûö?€°YÿϤ÷ì…`³ÿŸH?ïØÿ >Ágÿ>ß±þ}‚Ïþ} ÿ¿cü(³ZéðFdšÞÖ4^¬è ƦSŒ4ÒmÙûŸüúAÿ~ÇøUAeeæùdƒ; ÿ«^€¨ÿÙ…/Ø,ÿçÒûö?€°YÿϤ÷ì…`³ÿŸH?ïØÿ E²²g‘¤Œ)?»_âÝýÐKk§Â»¥‚Ö5é–E¢u!M^nËÌi7¢:\ˆïvl©÷™UH_¯¥LkRšn2M-õŒ–ý‚Ïþ} ÿ¿cü+RJ‰ M¬MþÕ(ØTcÌÇoìóéýûá@Ø,ÿçÒûö?€°YÿϤ÷ì…`³ÿŸH?ïØÿ >Ágÿ>ß±þ}‚Ïþ} ÿ¿cü(ûŸüúAÿ~ÇøPö ?ùôƒþýð ìóéýûá@Ø,ÿçÒûö?€°YÿϤ÷ì…`³ÿŸH?ïØÿ >Ágÿ>ß±þ}‚Ïþ} ÿ¿cü(ûŸüúAÿ~ÇøPö ?ùôƒþýð ìóéýûá@Ø,ÿçÒûö?€°YÿϤ÷ì…`³ÿŸH?ïØÿ >Ágÿ>ß±þ}‚Ïþ} ÿ¿cü(ûŸüúAÿ~ÇøPö ?ùôƒþýð ìóéýûá@Ø,ÿçÒûö?€°YÿϤ÷ì…`³ÿŸH?ïØÿ >Ágÿ>ß±þ}‚Ïþ} ÿ¿cü(ûŸüúAÿ~ÇøPö ?ùôƒþýð ìóéýûá@Ø,ÿçÒûö?€°YÿϤ÷ì…`³ÿŸH?ïØÿ >Ágÿ>ß±þ}‚Ïþ} ÿ¿cü(ûŸüúAÿ~ÇøPö ?ùôƒþýð ìóéýûá@Ø,ÿçÒûö?€°YÿϤ÷ì…`³ÿŸH?ïØÿ >Ágÿ>ß±þ}‚Ïþ} ÿ¿cü(ûŸüúAÿ~ÇøPö ?ùôƒþýð ìóéýûá@Ø,ÿçÒûö?€°YÿϤ÷ì…`³ÿŸH?ïØÿ >Ágÿ>ß±þÛã‘ qn†LìP3ÊzPãøóÕì%oÿ¤í[C ï ÇËØ6ÇÿEµDú†ÿ®ÒÿèmP2ÍP@P@P@P@FöU3)pÖÈ]Î8PGPVÀ vçЀwkåÆNó¬R&?3d0qœô'w§_Rz€!Ií· ìA\Œ„ÁÏO^1íùæ’#DS2+îm¸ ·ê})¦dm‘³ã;A8ª/ÙUЇ¹”0%|® ã­G0ì6UHæÙnB2=WØÿOþ·-1Ë"Ä…Üà8$ž¹'Œw¢sP\ÒØi6쌫ûØ÷Îé Ô"2c ²òTón ‘’¹˜×‘Œ”ª?Ý>d–Þ½W}Ûkùtcʽí<ÿ­¿_‘gL3‰&ŠX¤Ž4Æß1ËüÜî,¿t‚¼GÀêÁªñæ…]–ÝßðÆU¹4q-øþõîÿúuÞ`%Ò†U€e2F=Î*¡¹øY• Æ…CÄ6—-<ÈöÈÊYAèW#®k£–}"Îg(­44âeHn~Ó2ù2‚¤2Ñx#æëXMY0wDÑÇÍ×ûÿ9j "w ¬Y_$8E,N ö×™Q•YÒQéwùšŒdC} ÛjÍoi4Â6|ñ²îÃ)Ú:sÁ#?.G=ˆóè`ë¤¤ãæ¼ìöÓïíߥ¶u!È•Ét¸žÞÑa”âDÀd€òß6>¾½†÷ðÐt騷{~Zëý|ŽJšWD1Ë·ý}Íÿµ+¤ƒF€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €+Iÿ!?댟Í(‰ñÇüyê¿ö·ÿÒv­¡ÐF÷…¿ãå¿ìcÿ¢Ú¢@?ýC×iô6¨f€ ( € ( € ( € ( € †î66Óù4eTŽpqÏÔÐvÈ-cûJ‘Y˜mårN9úPªŠXDœp °# àçúRh$q¡Ê"©õÀ}C%´l¸TE`Ahã4š¸"„‰=èJÀ6â4E²ò2õV ¡ÔU¦ªÅÅ•8»£>/^vŠâ+x¢Žq0žÂNp2H$ä1=G®G•GRu~êwºÒïúß¹Ó*°åÓw§§õÐÔ¯dä#ý°68ògß||~‡ò –?16î+‚#Ž¿JiÙ‰«« asyic³Y[HaŒ&ãpFp=6U7®ä( Íq4±Çš@Á‹*õÀþï¥Ke¥ab\\0 Eƒëƒ&˜üé ‚ö òÅ(¤Ú²FTc]É\óŽ„w©P\ê}Wüòß/(ÃePñÞgä¢Ç*cÝ®6äD¸ÇÝÉëÀó_ù‘Ê?M†HEǘdo2v4¡CÜó´‘×=?!Ò³•¯¡KB¿åÛþ¾æÿÚ”†hÐ@P@P@P@P@P@P@P@P@P@P@P@P@Pi?ä#ýq“ù¥q>8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[TH½£Ù}² ?Ò%‡dÒ«ÛÎ]ºäJÌeïìQÿ?÷”üEþÅóÿwùGÿÄQpìQÿ?÷”üEþÅóÿwùGÿÄQpìQÿ?÷”üEþÅóÿwùGÿÄQpìQÿ?÷”üEþÅóÿwùGÿÄQpìQÿ?÷”üEþÅóÿwùGÿÄQpìQÿ?÷”üEþÅóÿwùGÿÄQpìQÿ?÷”üEþÅóÿwùGÿÄQpìQÿ?÷”üEþÅóÿwùGÿÄQpìQÿ?÷”üEþÅóÿwùGÿÄQpìQÿ?÷”üEþÅóÿwùGÿÄQpìQÿ?÷”üEþÅóÿwùGÿÄQpìQÿ?÷”üEþÅóÿwùGÿÄQpìQÿ?÷”üEþÅóÿwùGÿÄQpìQÿ?÷”üEþÅóÿwùGÿÄQpìQÿ?÷”üEþÅóÿwùGÿÄQpìQÿ?÷”üEþÅóÿwùGÿÄQpìQÿ?÷”üEþÅóÿwùGÿÄQpìQÿ?÷”üEþÅóÿwùGÿÄQpô4ŸmºmƒvÖàã±ÂÑp1"ÿ—oúû›ÿjSF€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €+Iÿ!?댟Í(‰ñÇüyê¿ö·ÿÒv­¡ÐF÷…¿ãå¿ìcÿ¢Ú¢@Ž£Ã?ê'ÿ®Ïÿ¡½fÆlR € ( € ( € ( € ( € ( € ( € ( € ( € Žçþ=åÿpÿ*äâÿ—oúû›ÿjU£@P@P@P@P@P@P@P@P@P@P@P@P@P@¤ÿŒõÆOæ”Äøãþ<õ_û [ÿé;VÐè#{Âßñòßö ±ÿÑmQ GQáŸõÿ×gÿÐÞ³c6)P@P@P@P@P@P@P@P@P@Gsÿòÿ¸•rqË·ý}Íÿµ*€Ñ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (  ÒÈFúã'óJâ|qÿz¯ý„­ÿô«ht½áoøùoûØÿ趨#¨ðÏú‰ÿë³ÿèoY±›€( € ( € ( € ( € ( € ( € ( € ( € ( €#¹ÿyÜ?Ê€98¿åÛþ¾æÿÚ•@hÐ@P@P@P@P@P@P@P@P@P@P@P@P@Pi?ä#ýq“ù¥q>8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÔxgýDÿõÙÿô7¬ØÍŠ@P@P@P@P@P@P@P@P@P@ÜÿǼ¿îå@œ_òíÿ_síJ 4h € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (´Ÿòƒþ¸ÉüÒ€8ŸÇž«ÿa+ý'jÚox[þ>[þÁ¶?ú-ª$ê<3þ¢úìÿúÖlfÅ ( € ( € ( € ( € ( € ( € ( € ( € ( îãÞ_÷ò N/ùvÿ¯¹¿ö¥P4P@P@P@P@P@P@P@P@P@P@P@P@P@ZOùÁÿ\dþi@OŽ?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕuÿQ?ývý ë63bP@P@P@P@P@P@P@P@Pw?ñï/û‡ùP'ü»×ÜßûR¨ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ­'ü„`ÿ®24 'ÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰: ÿ¨Ÿþ»?þ†õ›±H€ ( € ( € ( € ( € ( € ( € ( € ( € (;Ÿø÷—ýÃü¨“‹þ]¿ëîoý©TP@P@P@P@P@P@P@P@P@P@P@P@P@V“þB0×?šPãøóÕì%oÿ¤í[C ï ÇËØ6ÇÿEµDG†ÔOÿ]ŸÿCz͌ؤ@P@P@P@P@P@P@P@P@Ïü{ËþáþTÉÅÿ.ßõ÷7þÔªF€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €+Iÿ!?댟Í(‰ñÇüyê¿ö·ÿÒv­¡ÐF÷…¿ãå¿ìcÿ¢Ú¢@Ž£Ã?ê'ÿ®Ïÿ¡½fÆlR € ( € ( € ( € ( € ( € ( € ( € ( € Žçþ=åÿpÿ*äâÿ—oúû›ÿjU£@P@P@P@P@P@P@P@P@P@P@P@P@P@¤ÿŒõÆOæ”Äøãþ<õ_û [ÿé;VÐè#{Âßñòßö ±ÿÑmQ GQáŸõÿ×gÿÐÞ³c6)P@P@P@P@P@P@P@P@P@Gsÿòÿ¸•rqË·ý}Íÿµ*€Ñ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (  ÒÈFúã'óJâ|qÿz¯ý„­ÿô«ht½áoøùoûØÿ趨#¨ðÏú‰ÿë³ÿèoY±›€( € ( € ( € ( € ( € ( € ( € ( € ( €#¹ÿyÜ?Ê€98¿åÛþ¾æÿÚ•@hÐ@P@P@P@P@P@P@P@P@P@P@P@P@Pi?ä#ýq“ù¥q>8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÔxgýDÿõÙÿô7¬ØÍŠ@P@P@P@P@P@P@P@P@P@ÜÿǼ¿îå@œ_òíÿ_síJ 4h € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (´Ÿòƒþ¸ÉüÒ€8ŸÇž«ÿa+ý'jÚox[þ>[þÁ¶?ú-ª$ê<3þ¢úìÿúÖlfÅ ( € ( € ( € ( € ( € ( € ( € ( € ( îãÞ_÷ò N/ùvÿ¯¹¿ö¥P4P@P@P@P@P@P@P@P@P@P@P@P@P@ZOùÁÿ\dþi@OŽ?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕuÿQ?ývý ë63bP@P@P@P@P@P@P@P@Pw?ñï/û‡ùP'ü»×ÜßûR¨ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ­'ü„`ÿ®24 'ÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰: ÿ¨Ÿþ»?þ†õ›±H€ ( € ( € ( € ( € ( € ( € ( € ( € (;Ÿø÷—ýÃü¨“‹þ]¿ëîoý©TP@P@P@P@P@P@P@P@P@P@P@P@P@V“þB0×?šPãøóÕì%oÿ¤í[C ï ÇËØ6ÇÿEµDG†ÔOÿ]ŸÿCz͌ؤ@P@P@P@P@P@P@P@P@Ïü{ËþáþTÉÅÿ.ßõ÷7þÔªF€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €+Iÿ!?댟Í(‰ñÇüyê¿ö·ÿÒv­¡ÐF÷…¿ãå¿ìcÿ¢Ú¢@Ž£Ã?ê'ÿ®Ïÿ¡½fÆlR € ( € ( € ( € ( € ( € ( € ( € ( € Žçþ=åÿpÿ*äâÿ—oúû›ÿjU£@P@P@P@P@P@P@P@P@P@P@P@P@P@¤ÿŒõÆOæ”Äøãþ<õ_û [ÿé;VÐè#{Âßñòßö ±ÿÑmQ GQáŸõÿ×gÿÐÞ³c6)P@P@P@P@P@P@P@P@P@Gsÿòÿ¸•rqË·ý}Íÿµ*€Ñ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (  ÒÈFúã'óJâ|qÿz¯ý„­ÿô«ht½áoøùoûØÿ趨#¨ðÏú‰ÿë³ÿèoY±›€( € ( € ( € ( € ( € ( € ( € ( € ( €#¹ÿyÜ?Ê€98¿åÛþ¾æÿÚ•@hÐ@P@P@P@P@P@P@P@P@P@P@P@P@Pi?ä#ýq“ù¥q>8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÔxgýDÿõÙÿô7¬ØÍŠ@P@P@P@P@P@P@P@P@P=U±Öô»}OI¹ŽêÎå7Å*taüÁ ƒÈ ƒÈ  ?ñï/û‡ùP'ü»×ÜßûR¨ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ­'ü„`ÿ®24 'ÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰: ÿ¨Ÿþ»?þ†õ›±H€ ( € ( € ( € ( € ( € ( € ( € ( € áücqeàêº4~dÏ¥Z»0ÁEØ  ¤à,À#<`e½õ¾£¥›«9<È]T©R2YN ° ‚¤ €EsqË·ý}Íÿµ*€Ñ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (  ÒÈFúã'óJâ|qÿz¯ý„­ÿô«ht½áoøùoûØÿ趨#¨ðÏú‰ÿë³ÿèoY±›€( € ( € ( € ( € ( € ( € ( € ( € ( 3Ò—ÄpxC¶¼’MÎ}2-¦Ïô›Y¤‰cŠéˆ9Kµ%ÁMîÀ‚¨Òx.ËO‹C¸Ô,a»·¸¾ÏÛ¢¸¿šì¥ÄyŠEÝ#•d)¸pÁ¨€+Åÿ.ßõ÷7þÔªF€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €+Iÿ!?댟Í(‰ñÇüyê¿ö·ÿÒv­¡ÐF÷…¿ãå¿ìcÿ¢Ú¢@Ž£Ã?ê'ÿ®Ïÿ¡½fÆlR € ( € ( € ( € ( € ( € ( € ( € ( €+êV6úžsa}›kwÃ2n+¹Ã#‘OJ§¦é)¤Ù^¤Ïwqtæk‹™ö‡™ö*B*¨Â"/Ê£îää’H_òíÿ_síJ 4h € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (´Ÿòƒþ¸ÉüÒ€8ŸÇž«ÿa+ý'jÚox[þ>[þÁ¶?ú-ª$ê<3þ¢úìÿúÖlfÅ ( € ( € ( € ( € ( € ( € ( € ( € ( îãÞ_÷ò N/ùvÿ¯¹¿ö¥P4P@P@P@P@P@P@P@P@P@P@P@P@P@ZOùÁÿ\dþi@OŽ?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕuÿQ?ývý ë63bP@P@P@P@P@P@P@P@Pw?ñï/û‡ùP'ü»×ÜßûR¨ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ­'ü„`ÿ®24 'ÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰: ÿ¨Ÿþ»?þ†õ›±H€ ( € ( € ( € ( € ( € ( € ( € ( € (;Ÿø÷—ýÃü¨“‹þ]¿ëîoý©TP@P@P@P@P@P@P@P@P@P@P@P@P@V“þB0×?šPãøóÕì%oÿ¤í[C ï ÇËØ6ÇÿEµDG†ÔOÿ]ŸÿCz͌ؤ@P@P@P@P@P@P@P@P@Ïü{ËþáþTÉÅÿ.ßõ÷7þÔªF€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €+Iÿ!?댟Í(‰ñÇüyê¿ö·ÿÒv­¡ÐF÷…¿ãå¿ìcÿ¢Ú¢@Ž£Ã?ê'ÿ®Ïÿ¡½fÆlR € ( € ( € ( € ( € ( € ( € ( € ( € Žçþ=åÿpÿ*äâÿ—oúû›ÿjU£@P@P@P@P@P@P@P@P@P@P@P@P@P@¤ÿŒõÆOæ”Äøãþ<õ_û [ÿé;VÐè#{Âßñòßö ±ÿÑmQ GQáŸõÿ×gÿÐÞ³c6)P@P@P@P@P@P@P@P@P@Gsÿòÿ¸•rqË·ý}Íÿµ*€Ñ € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (  ÒÈFúã'óJâ|qÿz¯ý„­ÿô«ht½áoøùoûØÿ趨#¨ðÏú‰ÿë³ÿèoY±›€( € ( € ( € ( € ( € ( € ( € ( € ( €#¹ÿyÜ?Ê€98¿åÛþ¾æÿÚ•@hÐ@P@P@P@P@P@P@P@P@P@P@P@P@Pi?ä#ýq“ù¥q>8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÔxgýDÿõÙÿô7¬ØÍŠ@P@P@P@P@P@P@P@P@P@ÜÿǼ¿îå@œ_òíÿ_síJ 4h € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € (´Ÿòƒþ¸ÉüÒ€8ŸÇž«ÿa+ý'jÚox[þ>[þÁ¶?ú-ª$ê<3þ¢úìÿúÖlfÅ ( € ( € ( € ( € ( € ( € ( € ( € ( îãÞ_÷ò N/ùvÿ¯¹¿ö¥P4P@P@P@P@P@P@P@P@P@P@P@P@P@ZOùÁÿ\dþi@OŽ?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕuÿQ?ývý ë63bP@P@P@P@P@P@P@P@Pw?ñï/û‡ùP'ü»×ÜßûR¨ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ­'ü„`ÿ®24 'ÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰: ÿ¨Ÿþ»?þ†õ›±H€ ( € ( € ( € ( € ( € ( € ( € ( € (;Ÿø÷—ýÃü¨“‹þ]¿ëîoý©TP@P@P@P@P@P@P@P@P@P@P@P@P@V“þB0×?šPãøóÕì%oÿ¤í[C ï ÇËØ6ÇÿEµDG†ÔOÿ]ŸÿCz͌ؤ@P@P@P@P@P@P@P@P@Ïü{ËþáþTÉÅÿ.ßõ÷7þÔªF€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( €+Iÿ!?댟Í(‰ñÇüyê¿ö·ÿÒv­¡ÐF÷…¿ãå¿ìcÿ¢Ú¢@Ž£Ã?ê'ÿ®Ïÿ¡½fÆlR € ( € ( € ( € ( € ( € ( € ( € ( € Žçþ=åÿpÿ*åa…å'Th®%`Ywó8é‘ëTË<¶É¯ìãn¸hðô:gÛ?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt}³þ¢v÷Ïÿg@Û?ê'aÿ|ÿöt«vX€º•‰'€uÿÇèxà›í+4ÒÆÛQ”Œ¯R©ô 'ÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰: ÿ¨Ÿþ»?þ†õ›±H€ ( € ( € ( € ( € ( € ( € ( € ( € (;Ÿø÷—ýÃü¨–w†Ã¯%ĈÓçbOä P•R1…ÉüIÇëÒ¢RQW“°Ô\’Šb PŠ1@(Å b€ PŠ1@(Å K"ÆQJÈí#mDŽ6vc‚x è ü()%·$›;q,JÇhc…%—î‚x‘žh¸í¯f¶âBÓÅî~eÿçõ§p5£u‘ã`Êà ŽôÀuP@Í4VêyR%f °PXœÏrH޶J­§ÿ¨oúí/þ†Ôf€ ( € ( € ( € ( €)µøFŽF‰…œŠÅn$pG'…98b@8'¦ áúí5;}žþåæûvÔߨ»yöþ¿"åwn&ŸÊimcß2*ÈB-óÁ@äàIíŒrsŽØ®Gîlš¿ß­­Û¯Ý®¶Þ¯ñŽî'‘Slѳp¾l/c×°8ãØúVÔñ4ªK–/_F¿4D©Ê*ì±]f\º¶Û»˜<í.!ÂbîûÉvÊ«d.ÃÇÍŽ½Kv.¨}®æx7ÙÉå"?™isç!ÜX`£méî(Nâ Fþk[˜ ·¶óšTwã7ü´‰Aû¸ÆsíB`[…M½ßœBè]û¤úr0>¾Õ@q^8ÿ=WþÂVÿúNÕ´:Þð·ü|·ýƒlô[THÔxgýDÿõÙÿô7¬ØÍŠ@P@P@P@P@P@P@P@P@P@ÜÿǼ¿îå@eÏüzÃÿ_rÿ9)™>¢l5XäŠx¢h"%Öl…esÆç(zלW•˜W£u¯®×µ»­õò×)%%{‰»f--™$ÂáL’F²y‹+Ç»ýhÈù:9ý+·QT¥+ÚÝwù‡7;æµ®Rñ”v§Û‹ûË;XEÀ8½MÐJv·Èã c¸É꣯Jßmtþ»yüŸ ú5ýn`íif,,ÒÒßWì p1xÆ%$2¶Èc308öªKÞQÝzùnŸª²&ö2éu÷ìþOñ|QC%…œ&%ci{«€Ê")VïƒìF>ª=iSzÓOµ×þî¿UÿoyÒJmz~*ßå÷v'ñe™Ÿ[Ô¤uµÇ—g7M“5˜-&dB’JýìSòŒf¦ GW§½¿É~/Òúè[ÖÉ+èô$“]¾›Äb+][N†ÔI‚)®U~Õ*’ʾYi %€+ cƒ‘]&ßž»~®Ÿ†z(«vZÿ_qRËÄWrD«q®K¹¾‡È’ pÊçä}£nHU"UÊç©È5VWK¦¿7ë·žŸ©OFíÿ ¯Ûêý*øªæßK¾{Ûøã›ì{ìÕTÜò"Œ|ÙUˆ ç¶VÖñºò|·ý}>A¢~Zëéý[Ì·ý£}š—wš»[Aq}$\âU´^@¤¸É*ªKdsÐjWÙMî¯ó¶ß¯ËÍ$•õk§õëç±ZÍûø‚;huËl²D± ‹¨Ñ¯#`¤º¨‹ç$–£¨ÈÔ5ÝwÓòýUÛÈ–‹O¿çý.æ•ÜZ‹ø—Rþκµ·Ê â{f—w2ôî?ZÊ_Âö»ÿÒQkãõÔå¬u‹› "šŒvQª®R! Ï1ðmÚ$]²`±Êä1ÁãÑ-góúSé¿NŸ=ÈKO»ú¿O™§%ëØjÚŠ6·%ŠO¨/žÒ,@ÛÄaR ¿(,nl¯n¼ÖqÙE½¹¾û»/š×ÎÚ»õ²ÿ&þ_…õ/xnóUÕî%êRGVÀÆÉ¾ÜòªÊr§ªª¶}¸¡§ÈÞÏò|©þoå­ïÑÝ)[u¯Ï_é~&…¯oõž{ÜÆ°…·1íP~õ‡Æã´vù}ê´k™uÕy.Þ·¿à-Såíø¿øk?™­q"Å-·úTvR4¸ŽæF °¶Òw}èÙÚx&¡Œµ­j6DŸeÛg¹Ý%« ‰®ÙÙBÊûÄJžFw\€GŠ`>Úv³rT‰Ž]Qî?¨ïõêÐñºÈŠñ°eaGz`yΗu¡Úh¢êí&ñ¬6ò»¤‹ºôÜÛxpò½p>î6ãøjdãþéÚ:kÙivüÖîý|ʵê5S{ÿÃ[ÊÖÛ¦ýGØkZ•þ©m§iž%{ë§N¥P3n0ÊïÂlÈØÊ’7`æ´å¼šÙ+üíËgVÕÖ×S;Ù'×Kùjÿ>Ý-æBž&Õ#Ô, ¹Ö·‘/-á ‹†2G¹ãeªLL œ¤tÊ2n7K[-:|)»õ뾫ÒÌ©®[«ìßü tví£}õEq¯_j cêÚm$–³ÞAå¢gÎ.¢( ¹ËŒ9-û¼ç­WÂï m³ïîJÿ¦/fÙ§¦úy]kýo{­Ÿ‡Ú歪߷ö–­§OºòØ¥Ò4öÒnyB$hÀÉ;9ÎÞz“i.Wmv³þ¿Ë¸¥u+m«Óúÿ†gc§ÿ¨oúí/þ†Õ#,Ð@P@P@P@Jîâå%’+X‘äX·¢1ÁœŽ2@¹íƒçâ±r¡.TºiëÿKúùk½:jJíÿ_×äTŽÆqvðÇ|Ћd;!@J|Äa±žS FÃÈË`ýÓ\4°´±|®Öè¶¿uäûtûåUÁ+«ÿ[zùšv°­µ´P#3,H9$Ž}ëÛ§N e¡Ç'ÌÛ2ü@–ñ¢™\Gò!™`IBÜïePß(rFx8|Üt)EƤ»ëçn÷i[;iÓAÉÞ+þƒOkµO{¦Ga ¼,jІ î$ïBq÷W† yÍsGÕç§£mU•úì×ËG£òÜÒTäãË6ïóýMä`è¬2 Œ‚äzWºÕέ êb ¬f–ÏX·»KI®c[yba @AfŒ¼Ã”Ô°Q¾›R¸°UÓ®­Ö ƒ+¼­ò…ÉÎXv “þB0×?šUÄøãþ<õ_û [ÿé;VÐè#{Âßñòßö ±ÿÑmQ GQáŸõÿ×gÿÐÞ³c6)P@P@P@P@P@P@P@P@P@Gsÿòÿ¸•q³ÿÇ´?õ÷/ó’˜Z¿‡´ÍbE}B‘•v³Éÿu†zšÆtiÍ©J)´KŠ{–´­>ÛIÓ#Ól¢´‹pHŒŒànbÍËy,OãZ¥mŠ,†PŠ1@(Å b€ PŠ1@(;8,mÖÞÖ1JI$òI$äòI$š6IvÓî­÷&Å b€š[v-nÀg’’§ü¸ýij=H.!xÿÚONJö•¯¬¿÷åÿ˜ö•¯¬¿÷åÿ€í+_YïËÿ…ÚV¾²ÿß—ÿ †Îþâe4#·ú—è\‘ÛÐÐßÚV¾²ÿß—ÿ ?´­}eÿ¿/þiZúËÿ~_ü(þÒµõ—þü¿øPý¥kë/ýùð ûJ×Ö_ûòÿá@ö•¯¬¿÷åÿ€í+_YïËÿ…ÚV¾²ÿß—ÿ ?´­}eÿ¿/þiZúËÿ~_ü(þÒµõ—þü¿øPý¥kë/ýùð ûJ×Ö_ûòÿá@ö•¯¬¿÷åÿ€í+_YïËÿ…WÔ%Óµ G·¹Wdp@>C¤‚7 ¯g­eV”*ÅÆH¸MÁÞ#ín¬­bØ3w;´.YÛÔñÿÖ€¥FŒ(C’ææîÉ´­}eÿ¿/þ±ý¥kë/ýùð  ²=„—ßjw¸'j¯—å6ÂT’¬FÞH,{ã¡Æ@#žXxJªª÷FŠ£QåE¯í+_YïËÿ…t‡ö•¯¬¿÷åÿ€í+_YïËÿ…ÚV¾²ÿß—ÿ ?´­}eÿ¿/þØ®b¸Ôbò‹|°¾w#/tõÇxãþ<õ_û [ÿé;VÐè#{Âßñòßö ±ÿÑmQ GQáŸõÿ×gÿÐÞ³c6)P@P@P@P@P@P@P@P@P@Gsÿòÿ¸•q³ÿÇ´õ÷/ó’˜Zî¥c¢Å%ÅÜ1¬*êƒe©•‹1  *‚I$À©ì»ŽÄzV­cªÀòÙE¾ÇImLO`28 §GBz®]/q_[÷'üûÛÿß¡JÀG Ì2Äd[h‚à m´ðH<žÜýE Y\}l: âš•-¢ ê·ØÀU }ˆÍ7;väÿŸ{ûô)XrϽ¿ýúXrϽ¿ýúXrϽ¿ýúXrϽ¿ýúX ÿNÃð\Ü$R;¼ÌîÑ‚x•ýºÆ=ª[QM½Ò»² ÒdówŽGÝÏQëWÈõòÜM¤h^ßZXÄ’]Eo<‰Ÿ$³°UäI-RïþWýdßb}Éÿ>öÿ÷èQ` Éÿ>öÿ÷èQ` Éÿ>öÿ÷èQ` Éÿ>öÿ÷èQ` Éÿ>öÿ÷èQ` Éÿ>öÿ÷èQ` Éÿ>öÿ÷èQ`(iÒùšÖ®¯E!KqycjçÌ'ÔúûJ]l1÷zÆe¨ÙØ\‹hyùß´dòãŠi]´„ôWe¶’4RÍon?º¥h¦ÛØi]Ù4ÍrÃS¸h¬à‰À·Šåd0¬’nÛŒóŸ”õ¨«pj÷èíø'úŠëO3CrϽ¿ýú6ÜŸóïoÿ~…ÜŸóïoÿ~…ÜŸóïoÿ~…ÜŸóïoÿ~…ÜŸóïoÿ~……ä¿ñ=ÑàXâH¤y‹ªÆlDÄgÔgœ}=)=ÇjºÎŸ¤Ç^Ç™[dQÅle’CŒ¨€³`rpÍlÒäºv¡k¨Ú-ͬ˜Ø‘ûËc ` ƒÁN6ê$Ë“þ}íÿïÐ¥` Éÿ>öÿ÷èQ` Éÿ>öÿ÷èQ` ½¾´±‰$ºŠÞ4y%>H9g`ª8É„µK¿ù_ô “}‰÷'üûÛÿß¡E€7'üûÛÿß¡E€7'üûÛÿß¡E€7'üûÛÿß¡E€7'üûÛÿß¡E€7'üûÛÿß¡E€7'üûÛÿß¡E€7'üûÛÿß¡E€7'üûÛÿß¡E€7'üûÛÿß¡E€7'üûÛÿß¡E€7'üûÛÿß¡E€7'üûÛÿß¡E€7'üûÛÿß¡E€7'üûÛÿß¡E€7'üûÛÿß¡E€ÏÈ:ß ª<–áFTíMhãøóÕì%oÿ¤í[àï ÇËØ6ÇÿEµDG†ÔOÿ]ŸÿCz͌ؤ@P@P@P@P@P@P@P@P@Ïü{ËþáþTÆÏÿÐ×Ü¿ÎJ`Iã­>ëS³û=‹WÉ€¦DPƒ¦ h¾5}´8í÷éÌû/BvÖúÿäÛµéºù™Òø[RŒÜL³¹Y'0É(nd“rüâHäÚTåwxãWìùzò¥÷E-­Õžžjì·kù]ÛçßüÖ«îºXøWU‹ìI.“þž†Ñ£ÔüØÏÙbŽ4Y ûÛ†JÈ0 ©ó2OZÒ¯½ÍËýïûzéÛôÑè­tJÑkåò|׿ëç±¹á 6‰u¤Ë„v¬4³ ó¡\¼ÙÈ9r0ø<ãךÖMsNÛ;[ÿ&¿ÏUwÔ›i÷»û¿¯¸ì+2‚€ (/Ãê_ÂvÊ£$ý ûúõ…H¹BIv©pv’låà±×®4&Ñ4cgq£Û›Ù"t¸”@Ñ*(Û*KKè:ä㢯¿)O£M[®­_Ëe§Ÿ‘÷m=ýýà\Ë´ð}Úiú„-¡I%¡žÎâ;;¤²C#$‡ÍÚâ0J`ryèh¹[W³s½7×O]Å®½VùÞþ¦†|3se⟷]Øê1J&•ÖxþÄ 10;#r£Î!TªíÉPTc€(§îÆÍëm|Ý÷ùïw®ýBzì´ÒÞZmúhwô†P@¥Èo\ÿr×ùIR÷ÌøŸA×õ-V÷R²kXþÉä›(d‹t“Ϙv¿˜{˜”;àv§OÜjO¿án_ÉÉü÷ìIs.U¦Ÿ‹×ð´­Ûm¥j’Íc§Ýhî¶Ö÷·sËq$±4N’¬Û@PÅúÀ*;õÔ8^¿Üåùûºúi~þAÍi_»Oúó24ï¹Ño’OCky™ ¹òy¹O3t¨UˆRIS¼á¾œÖÜÚ©­=äý»uø;¥¹6Wå{Yüû] 5_ j·&ù-ô’—ÒÃ6¥çGþ›ŠÂ8s»“†WËàô¬à¬¢ž‰Zþo™;ýɻﭑWûúy{¶·éøîz&em§YÇkeo¼)Ò8Ô(œ“õ$’OrjÛ»"*Ë̱H  € κÿ‘—Dÿ~ýÕ2Øe=v è5­?V±³}Amâ– mã‘R@¡›Ê© ¦$pxé‚×»'æ¾ë~óH¼Rìïú_3ñ&“ªkW2]I 9ž{eŠÅäž"Ú\¢Fýéù¸$lǸü˜ô§Ë/šwòê»÷Óg}X7xꮬôï§õæ·êÑNçÀ×Ì£K®ä†ùüÍè§i÷[¶s÷‚–*‡'¦iS÷9m¥½Ÿáñ]V› ë~mwûšÿ=mßP¹ð=Ä\Ê4¨Íܰß>ýé¹§i÷[¶s÷‚–Ú‡'¦h§îrÛ§³ü>/ëªÓ`~öþs_çøêE{àíJ[]ä´Ô¦¾¸B;˜ÞÍa™][b3ñ9I à *jÑŠô¿ÊI¶­é{½wë»o[¿ëO?»M÷4õŸF¦ú; ÚkkÖÕV0³ïqÓŽ*¥»Öá––$¤0 € ( € ( € ( €(ù ÛþiH;ÇñçªÿØJßÿIÚ·‡AÞÿ–ÿ°mþ‹j‰: ÿ¨Ÿþ»?þ†õ›±H€ ( € ( € ( € ( € ( € ( € ( € ( € (;Ÿø÷—ýÃü¨Ÿþ= ÿ¯¹œ”ÀÕéR;<‘;;³5Ää“êyJÀ'ü!z?üðoûÿ7ÿ þ½þx7ýÿ›ÿŽPÿ^ÿ<þÿÍÿÇ(ÿ„/Gÿž ÿæÿ㔣ÿÏÿ¿óñÊ?á Ñÿçƒßù¿øåð…èÿóÁ¿ïüßür€øBôùàß÷þoþ9@ü!z?üðoûÿ7ÿ §ƒ´–Ê_lgjƒq6?1ÇÏÇ$Ÿ©4X£ÿÏÿ¿óñÊ?á Ñÿçƒßù¿øåð…èÿóÁ¿ïüßür€øBôùàß÷þoþ9@ü!z?üðoûÿ7ÿ þ½þx7ýÿ›ÿŽPÿ^ÿ<þÿÍÿÇ(ÿ„/Gÿž ÿæÿ㔣ÿÏÿ¿óñÊoü!ÚJ¿–!p®70`‘Ó??mÇó4X£ÿÏÿ¿óñÊ?á Ñÿçƒßù¿øåð…èÿóÁ¿ïüßür€øBôùàß÷þoþ9@ü!z?üðoûÿ7ÿ þ½þx7ýÿ›ÿŽPÿ^ÿ<þÿÍÿÇ(ÿ„/Gÿž ÿæÿ㔣ÿÏÿ¿óñÊkø;I‹º°;AƒòŸãî Bh°ÿ„/Gÿž ÿæÿ㔣ÿÏÿ¿óñÊ?á Ñÿçƒßù¿øåð…èÿóÁ¿ïüßür€øBôùàß÷þoþ9@ü!z?üðoûÿ7ÿ þ½þx7ýÿ›ÿŽPÿ^ÿ<þÿÍÿÇ(ÿ„/Gÿž ÿæÿ㔣ÿÏÿ¿óñÊ?á Ñÿçƒßù¿øåð…èÿóÁ¿ïüßür€øBôùàß÷þoþ9@ü!z?üðoûÿ7ÿ þ½þx7ýÿ›ÿŽPÿ^ÿ<þÿÍÿÇ(ÿ„/Gÿž ÿæÿ㔣ÿÏÿ¿óñÊ?á Ñÿçƒßù¿øåð…èÿóÁ¿ïüßür€øBôùàß÷þoþ9@ü!z?üðoûÿ7ÿ  ie¬ý–ÙvÅ-´nfêPõbOZh?ÇñçªÿØJßÿIÚ·‡AÞÿ–ÿ°mþ‹j‰: ÿ¨Ÿþ»?þ†õ›±H€ ( € ( € ( € ( € ( € ( € ( € ( € (;Ÿø÷—ýÃü¨Ÿþ= ÿ¯¹œ”Àí©P@P@Pq}ùßÿÙEI@P@P@·ü|'ûüÅI@P@P@Ï÷ûëÿ¡ ’€ ( € ( € ( € ( € ( € æoÿäfúâöJhÇñçªÿØJßÿIÚ·‡AÞÿ–ÿ°mþ‹j‰: ÿ¨Ÿþ»?þ†õ›±H€ ( € ( € ( € ( € ( € ( € ( € ( € (;Ÿø÷—ýÃü¨Ÿþ= ÿ¯¹œ”À켕õûøßãHÉ_Wÿ¿þ4y+êÿ÷ñ¿Æ€%}_þþ7øÐ䯫ÿ߯ÿ<•õûøßã@’¾¯ÿühòWÕÿïãJú¿ýüoñ É_Wÿ¿þ4Èâ]òòü7÷Ï ÷ ù+êÿ÷ñ¿Æ€%}_þþ7øÐ䯫ÿ߯ÿ<•õûøßã@’¾¯ÿühòWÕÿïãJú¿ýüoñ É_Wÿ¿þ4y+êÿ÷ñ¿Æ€b_=_î·ñŸQï@òWÕÿïãJú¿ýüoñ É_Wÿ¿þ4y+êÿ÷ñ¿Æ€%}_þþ7øÐ䯫ÿ߯ÿ<•õûøßã@’¾¯ÿühòWÕÿïã2h” Á¼¿Æ}G½?É_Wÿ¿þ4y+êÿ÷ñ¿Æ€%}_þþ7øÐ䯫ÿ߯ÿ<•õûøßã@’¾¯ÿühòWÕÿïãJú¿ýüoñ É_Wÿ¿þ4y+êÿ÷ñ¿Æ€%}_þþ7øÐ䯫ÿ߯ÿ<•õûøßã@’¾¯ÿühòWÕÿïãJú¿ýüoñ É_Wÿ¿þ4y+êÿ÷ñ¿Æ€%}_þþ7øÐ䯫ÿ߯ÿ<•õûøßã@’¾¯ÿühœ½P¾$p3 êsýÊh#ÇñçªÿØJßÿIÚ·‡AÞÿ–ÿ°mþ‹j‰: ÿ¨Ÿþ»?þ†õ›±H€ ( € ( € ( € ( € ( € ( € ( € ( € (;Ÿø÷—ýÃü¨Ÿþ= ÿ¯¹œ”Àì¼øçªßBŸüõOûèPçÃÿ=SþúyðÿÏTÿ¾…|?óÕ?ï¡@ŸüõOûèPçÃÿ=SþúyðÿÏTÿ¾…|?óÕ?ï¡@ŸüõOûèP#š òæTn>aè(þ|?óÕ?ï¡@ŸüõOûèPçÃÿ=SþúyðÿÏTÿ¾…|?óÕ?ï¡@ŸüõOûèPçÃÿ=SþúyðÿÏTÿ¾…|?óÕ?ï¡@ 3Eç¡óS[ÃÔPüøçªßB€>ùêŸ÷Рχþz§ýô(óáÿž©ÿ} <øçªßB€>ùêŸ÷Рχþz§ýô(óáÿž©ÿ} <øçªßB€4Ñ•>òÿõÿ>ùêŸ÷Рχþz§ýô(óáÿž©ÿ} <øçªßB€>ùêŸ÷Рχþz§ýô(óáÿž©ÿ} <øçªßB€>ùêŸ÷Рχþz§ýô(óáÿž©ÿ} <øçªßB€>ùêŸ÷Рχþz§ýô(óáÿž©ÿ} <øçªßB€>ùêŸ÷Рχþz§ýô(óáÿž©ÿ} <øçªßB€>ùêŸ÷Рχþz§ýô(œ½`Þ$r¤äžAÿršˆñÇüyê¿ö·ÿÒv­áÐF÷…¿ãå¿ìcÿ¢Ú¢@Ž£Ã?ê'ÿ®Ïÿ¡½fÆlR € ( € ( € ( € ( € ( € ( € ( € ( € Žçþ=åÿpÿ*ãgÿh?ëî_ç%0;j@P@P@_~_÷ÿöQ@P@P@Pmÿ þã1@P@P@PsýÁþúÿèB€$ € ( € ( € ( € ( € ( €9›ÿùŸþ¸Ÿý’š‡ñÇüyê¿ö·ÿÒv­áÐF÷…¿ãå¿ìcÿ¢Ú¢@Ž£Ã?ê'ÿ®Ïÿ¡½fÆlR € ( € ( € ( € ( € ( € ( € ( € ( € Žçþ=åÿpÿ*ãgÿh?ëî_ç%0:í›,‘æ¦A üëÁüé‡Z±PI™’d^?ZsjöˆÅZ@¤uÔZOí›?ùê¿÷ÚÿþÙ³ÿž«ÿ}¯øÑ`í›?ùê¿÷ÚÿþÙ³ÿž«ÿ}¯øÑ`í›?ùê¿÷ÚÿþÙ³ÿž«ÿ}¯øÑ`í›?ùê¿÷Úÿ‰«Y«92§ÌÙ:úëíLÿlÙÿÏUÿ¾×üiXûfÏþz¯ýö¿ãE€?¶lÿçªÿßkþ4XûfÏþz¯ýö¿ãE€?¶lÿçªÿßkþ4XûfÏþz¯ýö¿ãE€?¶lÿçªÿßkþ4XûfÏþz¯ýö¿ãE€?¶lÿçªÿßkþ4XZÏÍVóSHûëßþÔÀöÍŸüõ_ûíÆ•€?¶lÿçªÿßkþ4XûfÏþz¯ýö¿ãE€?¶lÿçªÿßkþ4XûfÏþz¯ýö¿ãE€?¶lÿçªÿßkþ4XûfÏþz¯ýö¿ãE€?¶lÿçªÿßkþ4XûfÏþz¯ýö¿ãE€dºµ›(T0?}{}i€ÿí›?ùê¿÷Úÿ+lÙÿÏUÿ¾×üh°öÍŸüõ_ûíÆ‹lÙÿÏUÿ¾×üh°öÍŸüõ_ûíÆ‹lÙÿÏUÿ¾×üh°öÍŸüõ_ûíÆ‹lÙÿÏUÿ¾×üh°öÍŸüõ_ûíÆ‹lÙÿÏUÿ¾×üh°öÍŸüõ_ûíÆ‹lÙÿÏUÿ¾×üh°öÍŸüõ_ûíÆ‹lÙÿÏUÿ¾×üh°öÍŸüõ_ûíÆ‹lÙÿÏUÿ¾×üh°öÍŸüõ_ûíÆ‹øµ(%ÉËã®Ò?#NÀ?í©ÿ<äü‡øÑ`¶§üó“òãE€…µ{4vF‘U”à©u~´€Oí›/ùêŸ÷ÚÿbÍ2\kæhˆdxIR “Òš‹ñÇüyê¿ö·ÿÒv­áÐF÷…¿ãå¿ìcÿ¢Ú¢@Ž£Ã?ê'ÿ®Ïÿ¡½fÆlR € ( € ( € ( € ( € ( € ( € ( € ( € Žçþ=åÿpÿ*ãgÿh?ëî_ç%0¯øÀxWÂÚx··]ÏQ@å‰\ 9w8sž Ÿa’@ohw·cN´·Õç†æô¢¤òD›QÛ¿þ¬õÀè[SÂ×Ù(m¹ò#SkQl?óÒ•†l?óÒ‹}°ÿÏJ,öÃÿ=(°ÛþzS°ÛþzQ`¶7üô¢Àl?óÒ‹}°ÿÏJ, ûaÿž”Xí‡þzQ`¶ùéJÀl?óÒ‹}°ÿÏJ,öÃÿ=)Øí‡þzQ`¶ùéE€>Øç¥ûaÿž”XaöÃÿ=(°Ûüô¢À2}A¡¶š`Ûü¨žM ã;Tœ~”XD'Xo´ˆvûÓâþ0ÏOúcÿ{Q`¹gí‡þzQa‡Ûüô¢Àl?óÒ‹}´ÿÏJ,öÓÿ=(°ÛOüô¢Àm?óÒ‹}°ÿÏJVûaÿž”Xí‡þzQ`¶ùéE€>ØßóÒ€>ØßóÒ‹}±¿ç¥ûaÿž”Xí‡þzQaÛüô¢Àl?óÒ‹}°ÿÏJVûaÿž”Xí‡þzQ`¶ùéE€ŠfÕ&lçý.àrÓØ žU *€3­.µ„±ÂÑÇ3K9VtÜy® ‘ÇL­;\ ?øÎæý®ôeQµM0ìšx>hf8VõSŽø*HdÖ€.³0Pp¿z(”ñÇüyê¿ö·ÿÒv­¡ÐF÷…¿ãå¿ìcÿ¢Ú¢@Ž£Ã?ê'ÿ®Ïÿ¡½fÆlR € ( € ( € ( € ( € ( € ( € ( € ( € Žçþ=åÿpÿ*ãgÿh?ëî_ç%0"¼µ·½Ó…ý´’D`He¡r2ªÁÔd}­4°‡hA£ÛYÛD.ÞP ŠGbáútì0(ÒÖÖM5–kk,S,‘!  Ž]Q‘Њ€—íoÿ<î?ïËÿ…=>ÖÿóÎãþü¿øQ ÚßþyÜß—ÿ 4û[ÿÏ;ûòÿáF€kùçqÿ~_ü(Ðíoÿ<î?ïËÿ…}­ÿçÇýùð£@µ¿üó¸ÿ¿/þhö·ÿžw÷åÿÂ>ÖÿóÎãþü¿øQ ÚßþyÜß—ÿ 4û[ÿÏ;ûðÿáF€kùçqÿ~ü(Ðíoÿ<î?ïÃÿ…}­ÿçÇýøð£@µ¿üó¸ÿ¿/þhö·ÿžw÷åÿÂ>ÖÿóÎãþü¿øQ ÚßþyÜß—ÿ 4û[ÿÏ;ûòÿáF€kùçqÿ~_ü(ÐÉpdãh®Jº•aä¸È#t£@Džg•u»v오ë–9éþÛþth%û[ÿÏ;ûòÿáF€kùçqÿ~_ü(Ðíoÿ<î?ïËÿ…}­ÿçÇýùð£@µ¿üó¸ÿ¿/þhö·ÿžw÷åÿÂ>ÖÿóÎãþü¿øQ ÚßþyÜß—ÿ 4û[ÿÏ;ûòÿáF€kùçqÿ~_ü(Ðíoÿ<î?ïËÿ…}­ÿçÇýùð£@µ¿üó¸ÿ¿/þhö·ÿžw÷åÿÂ>ÖÿóÎãþü¿øQ ÚßþyÜß—ÿ 4û[ÿÏ;ûòÿáF€kùçqÿ~_ü(Ðíoÿ<î?ïÃÿ…}­ÿçÇýøð£@µ¿üó¸ÿ¿þhö·ÿžw÷áÿÂÔѦ_6I¥ ŠaDÔ©$4„ñ×£ †§Ú`ÿžƒò4¬0ûLóÐ~F‹Ì^íq,³€ZPLhýG`C(ㆃ}ÅZŸ¢é–Z&Ÿ•„3$IÉ&ÜíݘíäŸþ·AB²õžN®îU”IçH 4†Gnâ g)ãøóÕì%oÿ¤í[C ï ÇËØ6ÇÿEµDG†ÔOÿ]ŸÿCz͌ؤ@P@P@P@P@P@P@P@P@Ïü{ËþáþTÆÏÿÐ×Ü¿ÎJ`ußb·ÿžøñ¥p±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp±[ÿÏ?üxÑp –#$xÉ>ƒßÞ“v´o îÄ;pqó÷ëK™€*Æ×{6 ¡sŒŸîæô Ëûw¸¼ò- Ln’Yv*äã’N4õØd¾l_óî¿÷ѧf"–ƒvn´h.®bG’W—8$¬@¤®2xõ n&¶‹Èyíöù±,¹hò27 ädtÍ/}¶†\^1Цò|”¸“Ïrì´¸o7Ë®æA‘ó—‘Ï4Òm¤¿¯^ÛõýKݽúiùýû=¯6/ù÷_ûèÑfîÕ§x"2Æ¡š1!Ü çŒðäijiáE,Ð(düÍJO•6ÞÃJîÈŽÊþÒúλX•àHÛ,7)ž•rŒ¢ìÄš{ù±ϺÿßF•˜_WÓc¹ŠØùFie0ª+³á •8èvŒóŽÞ¢’»Û×îvˆ=?®å¯6/ù÷_ûèÓ³óbÿŸuÿ¾`l_óî¿÷Ñ¢Ì WWeu.Ö8‘#¸y|ÎI,& {sƒøRwCT×ôM Æ5k» .v}¦èE¿q¸Œõ_[\-¥Ë©<"ºBŒ¬29 ^´Ú’vbM5t/›üû¯ýôh³“ÝÚÛBó\$PÅ,îòU©$ž-F<Í\˜Îwñ¡è®Ø–»Ûê6'ÆÞc±dýÜ»¾FÎÖàô88=ðiÚH4&óbÿŸuÿ¾`l_óî¿÷Ñ¢ÌÍ‹þ}×þú4Y€y±ϺÿßF‹06/ù÷_ûèÑfi 넪íKpºP€ã|qÿz¯ý„­ÿô«xt½áoøùoûØÿ趨#¨ðÏú‰ÿë³ÿèoY±›€( € ( € ( € ( € ( € ( € ( € ( € ( €#¹ÿyÜ?Ê€8ÙÿãÚúû—ùÉLÚP@P@P@P@P@P;”S#33ƒœ|’ì=*Xb’ 7l7iÁÌò ZªWí¸A€«Üçªç¯~µ]oŽlïµo°évvÝÁ#´×"yZ¶*áT¸FÁ,Ê@ÇðR‹“kk'÷½?+úiäZ—*ºÞëð×ôKæOáKûÔÒ´ûVÆíob‚DšQòËDÁ>ñÆwýåã‘“[Tš•ê%Ñ;zî¾Oô2„y-;|º?»ñ/ødãÃ6gž~ŸõÙë+Ú쳌Òl5´ÕÆ£}¦ ÖÒâ;ƒ òÔ6^ê|²ª»2òá©”Z¥*o~[ÿÛÊíýüÏÖÖÔ«þñMt†‹ôOæß¥k ]ÚéúTÚdZ¤Z„ ¦=÷sâ+ŒEµ ³íçä8SŽFUv•G½ßºîþº|×K2 “åRîÉ4ôÔ"²ÌÚ†·s§½Ä_kŠ;ø'‰v¿Üiå`_ËÜ#<èNGdÒ{kù+_­·µúÛ •í~¶_ž¾Wôé¶¶ jÊâëË­5Äk‹+Q¬/$>ZÈâ`ÊXá@b¯ÉØwÔ+­}},’ÛÍkmm¾…i£]Ÿß¯Âú^ÂÅâ[[Ç{¯_i„Ïmi}m*ˈü´mÌÓÿXwÛ“ƒÐR¨›‹V×—O½Þý/²WépŽŽý.¯÷týmÔ»xZËÃ>¶¾mNÚ2#Šæ+18˜âÙÎÒ"ùø`3Ž˜­ª´ë˵Ÿæˆ‚j—Í~¦.¦þ#M=!«Å-ºI5Œž]äÒΦW1¤QX LùÁ‰Ý‚21 óÇ›u>ÞnûzÛ]/}QRJÒKg{yi÷ïµÿÌГB3øÊDxµˆ¼ÝPÜ<±Ëp±yFÔŒ«ƒµNü¯ÊC©++vRÿÒ“_†º|ú ›{÷åÿƒý?ÈSX‡R°I›\¹ò¦ò£€›˜ÀAs 4˔݅ÊÌ9\Ã<ºNí_{+ù{ªúm½öÖýôEdÒó·Ïo5n›¯Äôšuÿ#.‰þüÿú%ªe°ÌÍrétÿX]Ü[^Kmö)â-mg-ƼD#VÆBž¾”+{é­ÒÿÛ¾]Aíº7ùŒÚ~»jöð5Åþf#y,ÒÚÊæä@Zi#-¼AT1 8dã¾nRJNír¯'¢¾»otúõôR³M¥£¿éó×V¿̧YKýKÈ:ÝÈ,æi‚ÜBc‹Î@ÑÇf6am¯ áÎ ˆ[–<Ûi~ïõZïm-{t{é¿á·Ý¯g­÷Ò剭'š-jãG—ÄB4áö$ž[µc1óC²ÌßwçØÕFé&ÿ™}Þíÿ]ÿ+ÜÒöòB]j7‘-­Æ·-Á¼¼Žù¦’ám¾Ï™UUKb=Àù`lù†`k7*ZláøÙ[úÚÛï«O–Zîš·ë•÷Öö)hÐj¶6v툡ÒáŠÑ/Q>Õæ«˜8øöïò³åvÆ>ZÙÉJW{]ÛîV¿_æß­®Mšº[ÿÁéÓoÂýKPXë×^¥qq6¶“ZØ«éÈ&™›Ì˜¦õç“`‹r¶züÃ51ºårßš7í´y¼­{ùokj7fÚ[{ß­¿àyZ礮vŒõÅ Q½•Å a@Qòÿ¶-üÒwŽ?ãÏUÿ°•¿þ“µo‚7¼-ÿ-ÿ`ÛýÕuÿQ?ývý ë63bP@P@P@P@P@P@P@P@Pw?ñï/û‡ùP?ü{Aÿ_rÿ9)״̧qè¿ýz›€ÄºÜTÃt;xþt®VêFPÀ&ÈàÿZZ_´K蟑ÿvûD¾‰ùñ¢Àh—Ñ?#þ4Xíú'䯋}¢_DüøÑ`´K蟑ÿ,ö‰}ò?ãE€>Ñ/¢~Güh°Ú%ôOÈÿûD¾‰ùñ¢Àh—Ñ?#þ4Xíú'䯋}¢_DüøÑ`´K蟑ÿ,ö‰}ò?ãE€>Ñ/¢~Güh°Ú%ôOÈÿûD¾‰ùñ¢Àh—Ñ?#þ4X™™@Î3ŽËÿרz h»àx<ä/ÿ^•À£w<†wûv’8P}»æ®>dßóØÿß´ÿâhå A¤6Ì"’Hå¬jñVË£’qœp:vªåÒÀS›ÃWP iµ«¨Ô² /z nbõ]I RikÜ5=ëL³k»OQhc#—t¥†NŒg’;ГîÑøZæRõ[¨£‹;QnT–,zEêM° ÿÕßý/?ð,ñª,À?á»ÿ Åçþþ5E˜ü#Wô¼ÿÀ±ÿƨ³ÿ„jïþƒŸø?øÕ`ð]ÿÐbóÿÇÿ¢ÌIá9¤xÞMRåÞ&Ý5Ê’‡d~냂Gâh³Z€ÿøF®ÿè1yÿcÿQfÿÕßý/?ð,ñª,À?á»ÿ Åçþþ5E˜ü#Wô¼ÿÀ±ÿƨ³ÿ„jïþƒŸø?øÕ` ð½Àž9¿µnŒ‘nØÆåI]ÊTã÷^„Ñ`þ«¿ú ^àXÿãTY€Â5wÿA‹Ïü üj‹0øF®ÿè1yÿcÿQfÿÕßý/?ð,ñª,ÀdšÝ6Aª\Ä›‹mK•Q’rN]I$Ÿ­{ e¹H%Ö5dFud¸V)PAÌcûš^`OÿÓÿÐoUÿ¿©ÿÄÓ°®ð?ýõ_ûúŸüM ‡ü#OÿA½Wþþ§ÿE‚ä6Þ»¹G’SP¬ŒŠ^éA;IRp#8äõ-5Ôc ðÕÕÄ)4ÕÔ±H¡ÑÒõJ²‘Ar 0!ÒÑ£¾XÝåw%Fi\3n òÈÈãÆ)ì1ãøóÕì%oÿ¤í[àï ÇËØ6ÇÿEµDG†ÔOÿ]ŸÿCz͌ؤ@P@P@P@P@P@P@P@P@Ïü{ËþáþTÆÏÿÐ×Ü¿ÎJ`ojbWÄG€Çrެ3ÐV`-™LCå.Ô$`Žô†Y³@m!>±¯ò­#²7–*€<±@–(òÅX Ëyb€,PåŠ<±@–(òÅX Ëyb€,PåŠ<±@–(½Á¤VPF3žjÍî}ˆeG ¹[¨ÿ?çÞF:OõÒÿ×GÿÐi„%PÜÿËúù‡ÿF-q^4{™¼G¦]kPÉáøÝ@¶…IÌxV‘92 œ zãáÛ˜V½v÷ò7@ˆò"UZÂ5n.ÂÜJ¼päu÷¤–€GöÁê?:,öÁê?:,öÁê?:,öÁê?:,öÁê?:,öÁê?:,öÁíùÑ`#»¼?b¹±a!LçvÓŒc¾qE€«öÙèýäÅ<âpwcnëÓ?üv‹½öÁê?:,0û`õ;}°zΕ€>Ø=GçE€>Ø=GçE€>Ø=GçE€>Ø=GçE€>Ø=GçE€}³‰õcéÿÎ*O@5<±HaåŠ<±@õÅÊCa4SÇæÀÍqæG³~õódÈÛƒ»#¶9ªJâ9?†ÒßÚÛÝÉ–ÛBËØZ\òF¤ä°=”õ sëžì(Œè­ä5?û÷?ú4TÊxãþ<õ_û [ÿé;VÐè#{Âßñòßö ±ÿÑmQ FÞ•¨­‚KÌXÊ爜Œob9ö5˜Ë¿ðEÿ>óÿß©?øš,ÿ _óï?ýú“ÿ‰¢ÀðEÿ>óÿß©?øš,ÿ _óï?ýú“ÿ‰¢ÀðEÿ>óÿß©?øš,ÿ _óï?ýú“ÿ‰¢ÀðEÿ>óÿß©?øš,ÿ _óï?ýú“ÿ‰¢ÀðEÿ>óÿß©?øš,ÿ _óï?ýú“ÿ‰¢ÀðEÿ>óÿß©?øš,ÿ _óï?ýú“ÿ‰¢ÀðEÿ>óÿß©?øš,ÿ _óï?ýú“ÿ‰¢ÀðEÿ>óÿß©?øš,ÿ _óï?ýú“ÿ‰¢ÀðEÿ>óÿß©?øš,ÿ _óï?ýú“ÿ‰¢ÀðEÿ>óÿß©?øš,ÿ _óï?ýú“ÿ‰¢ÀðEÿ>óÿß©?øš,ÿ _óï?ýú“ÿ‰¢ÀðEÿ>óÿß©?øš,ÿ _óï?ýú“ÿ‰¢ÀðEÿ>óÿß©?øš,ÿ _óï?ýú“ÿ‰¢ÀðEÿ>óÿß©?øš,ÿ _óï?ýú“ÿ‰¢ÀðEÿ>óÿß©?øš,ÿ _óï?ýú“ÿ‰¢ÀðEÿ>óÿß©?øš,ÿ _óï?ýú“ÿ‰¢ÀðEÿ>óÿß©?øš,ÿ _óï?ýú“ÿ‰¢ÀðEÿ>óÿß©?øš,ÿ _óï?ýú“ÿ‰¢À6Mv'“ìóÀŒù2ñ4X IÕþÇ ¥#í2>m |c=ÇçL o¬LX‘fÜúÃ.LV|¬MbepM›qé™ýsG+xõçÊPªº~Ÿ•ZÐÂC/üùKÿ~Ÿü)€ÂC/üùKÿ~Ÿü(ÿ„†_ùò—þý?øPÿ ¿óå/ýúð þçÊ_ûôÿá@ü$2ÿÏ”¿÷éÿ€øHeÿŸ)ïÓÿ…ðËÿ>Rÿß§ÿ ?á!—þ|¥ÿ¿OþÂC/üùKÿ~Ÿü(ÿ„†_ùò—þý?øPÿ ¿óå/ýúð þçÊ_ûôÿá@ü$2ÿÏ”¿÷éÿ€øHeÿŸ)ïÓÿ…ðËÿ>Rÿß§ÿ ?á!—þ|¥ÿ¿OþÂC/üùKÿ~Ÿü(ÿ„†_ùò—þý?øPëR»–oϬ2LT8°ý¯6y³'þØKK•€ÖÔ‰bE­ÀÉ$þéúŸø ZÐûDÿϬÿ÷éÿøšŽ{Ö’<-¼èÊÊêÞKœ2FF9˜|ëŸùæð_ñªæ†Êež‚xäòd8ŽÚEb`œã;Ræ –{¹%w!òÄ“þˆôù‚Ã<˯GÿÀI(æ ™uèÿø %Á`ó.½ÿ$£˜,e×£ÿà$”sƒÌºôü’Ž`°y—^ÿ€’QÌ2ëÑÿðJ9‚Áæ]z?þIG0X<˯GÿÀI(æ ™uèÿø %Á`ó.½ÿ$£˜,e×£ÿà$”sƒÌºôü’Ž`°y—^ÿ€’QÌ2ëÑÿðJ9‚Áæ]z?þIG0X<˯GÿÀI(æ ôûù­%I ²2†UÄ ÛžÇû¢¥»ŒÐÿ„†_ùò—þý?øPÿ ¿óå/ýúð þçÊ_ûôÿá@2ÜNÒ1Hœ!fe m!#s<ŒwcÚš•…ažuÏüó?ø /øÓæ éÁÛPó%’FvhÊ ÌÊN2=sÅHÎWÇñçªÿØJßÿIÚ¶‡AÞÿ–ÿ°mþ‹j‰5aˆ]’W”î $Œ€Ä•;5`åÖâ0ªæé‰`ù°’G<ñ@û_ߟÿ$ÿ>Å÷çÿÀ‰?Æ€±Eýùÿð"Oñ ìQ~ü“üh;˜VÖÚYây·Ä…ÆéYÀÎ'v€ ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ( € ŽbA‡ž ~†EP”P@P@P@P@P@P@P@P@Ž?ãÏUÿ°•¿þ“µm‚7¼-ÿ-ÿ`ÛýÕliÿêþ»Kÿ¡µ@É-“bÊ|ƒù™²Òni8Q»©Ú8ÀtéÍ %¦@[Rÿu×ýqähÍP@P@P@P@P@P@P@P@P@P@P@P@P@ý`ÿ¯ˆôbдP@P@P@P@P@P@P@P@Ž?ãÏUÿ°•¿þ“µm‚5´ ëK+Ÿô˨-÷é¶;|ÙnÄg8ÏÖ¦I°F޵¥,,S³SæÈpg^…ØŽõ¯°É#ÕôXƒùz•.娛 I$Üð0Š9XþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_` Ô5­)ì.U5;6cêI8>ôr¾ÀOý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`íÍ'þ‚–_øŸãG+ìý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`íÍ'þ‚–_øŸãG+ìý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`íÍ'þ‚–_øŸãG+ìý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`íÍ'þ‚–_øŸãG+ìý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`íÍ'þ‚–_øŸãG+ìý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`íÍ'þ‚–_øŸãG+ìý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûÚÖ”L8ÔìŽ'ˆŸß§H¤ž´r¾ÀIý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`íÍ'þ‚–_øŸãG+ìý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`íÍ'þ‚–_øŸãG+ìý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`íÍ'þ‚–_øŸãG+ìý¹¤ÿÐRËÿühå}€?·4Ÿú YàB¯°öæ“ÿAK/üOñ£•öþÜÒè)eÿ þ4r¾ÀÛšOý,¿ð!?ÆŽWØûsIÿ ¥—þ'øÑÊûni?ô²ÿÀ„ÿ9_`8¿Ï ΪKo*MjVøt`ÊÑØu¬t°Œ8¼S«Å q,Љ5Ýkª%rx«•wü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Pü%šÇüõ¶ÿÀ(øŠ9Põ{QÔmEµÜ±C‰6¤Çó@9U˜þtÒHÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/svn-perspective-toolbar.png000066400000000000000000000044561203611042400337610ustar00rootroot00000000000000‰PNG  IHDR@X³Ó pHYsÄÄ•+tIMEÕ q?žùtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíœ}PTׯŸ kã Ó@„bK ™ !‚°¦0Œ‚!(ª‰JåÄVšDPˆ¤dZŒ@´AC£íZ  NªBQ$0‚ 3!–ZHhvšj)­²ˆ°{÷~œþqaYXv—%”æüæÎÝsßsÞg_þxöÜ{îå—_B¡ÌOlæº …b9ÔÀÊ n<<Ä©)”yŒl®  üOðqZüâÍ~«BÒ´Ô+Óæº"kÒsFÀ=¶u® 1Fo÷>®¯Mj ¬ZV/ò ]êyDŠt×…yF4LÌ¢¦À¢èÇïW¶#-õŠmÑëÎU[îa+ºÅ*R=gäëâ%"‚IDAT2»®¾é5ózš;”Æû>b™òß;·y-!>Ñ6߉ Ú~a¸“¿§dîÜü´s»«ÏÙõI-)'z˜˜CÕÖ„¸]ûP˜¼"ó'~_«zÆlqJšÝÕ˜g· "$µeñzøó²€°×»é.“ðL˜ÑÏÁÊÐ5Suµ56Y,+æ@6ˆ¯òL¾Z³VjsœÐY³ÖgÓÇã-þJÊÿÿôutYèöÜú广®Û—–«(Ìxáɳu'C"v™.òù)yXvb¥ª$Ð쮆U×ù[½¶nXm®æpŸ¬ÿo7{/’q×Å¡iï¶jú¾ZòðëU™Ñ¯T jeDb9€êãk¶ŽýRPSÀÉùñ­kœrKþ´=>ÕÛÃmK\jnñ¯²b–¿_[ºñǦ(t•<ÕND5C Ф«4À`€×Îil315a¶¿íJ¾ß´ p<ÁÐm0vºˆÝƒ.ÁÛÚëŸr ÿ£YRlŒ~ª.#ö6ŽûS²%>6 ü™EýßbÛ,Pjþs"|Ó[gFضë𹓂â[ô³¨)¨»X¼ã ¾ß½cç^o7ÞnÛö,}7ë‡Î§/GDä5)¨IDAT%W¸YìžÕLøû`€õM BÀ0 ‘fÒù{¿x}J…ÿgö7B€Œd ƒaÖg4Õçû{'N©0¿Ÿ¶]|×/*v“ƒç…cGDÅn²sðìë¾çnºÌä8?0S…IÐÚaÁ¸Àg—³ƒâ[r2¬Ô¨ùÐ$ÃÛúé›NÍ…’˜•êÜÊïØ™âíás"]:¼=ÜvìLy£²ïG+555%F:‹üÃ_«7¾œŠpàT„S ¼Šp*Â~@Œ•! †NExø©tjàûÁ „¿VÛYäoÖ_'Oi¯*½ öwó<‘§´WJmN4Kdâ6†³IDATRl˜ÉÙ 4©µøDáD÷‚ÎÀåí»o#.a·ç£®‚@¼yñç—¢x<ê¿û@Ù{ ÔF´\¿ô¼Êdôl«5fV+‚ë×]NªÆHße”ž3riÕZ·‚˜ÖQQ°Bê]ÖQQ°"(ý†qS°¹ÄxÚ”«¡ð`)°Xmë‹[=µ¢SÿÐó×Zi¤‹ûF]5ð7”—ö=»»ì9žh0¼Æ&ëƒgA  O>ºátá½# þ»Û«òü¢v£7¿DÏ¿#³1:„S%}0£zLÕ/_–§´ѽ1’<œÞÑ\àëÛªïX«¸‡ «IDAT€}döÄ êRžÅ‚Cót¸±%CgWêOê©)pt|ÈËÝ•@~ûÒ›R/wWGLJ¦U§´WöÝüê!€* öÍž£<±§cZ…±ëÑ™wsú!0•G÷WÐrlp²¢ù˜|D6îÖÓòÙØÂ1t9ïK×>ø‡f¦²…eMRÖ–5œ¥^Ÿ¥ãÆSSð=—%Nš;ñBþ)Xšù ø®‹£)"Oìé¨xËwË«ÙDiÓ›m¢‚A¤åm_ðƒ*Žæ™*Øû;Ø/NV€æ“…ö åÏ¿rãrÐ÷7\3·ãØËì¦f:j5Ë“ÏýlIDATgîZ+5tgÕÝ;9…Õ9©Ñª»wÔöNúYt‹{‡YhxÂr„”½óòyöžLÖ'¬@¾m¢N`ZGyA.Ô¢h7Á¢Hˆ ./È5ѽEèýš^ݱšÁÛÆžáÍB·[ƒ±™ü°VËÈܵ6§°;4 ;ÈI‰kYý,:SÀó<Ë ÐÊ:î8°÷eÒ-4žãM—zrßó£+F3‡œ?zĬ§Öǯ_:æD%íFy©¬ZžböíÀ¤H;%¥ÝÖú–Ežkhù@Fþi)’“‘úpVõð .2(,ÖO¤¦€ãô 3ÖU"C,yô`èÿÄ¢Pæ/tšB™ÇPS(óYCcã\×@¡P,ä¿_•nàÕ3ÚÏIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/svn-perspective.png000066400000000000000000001247201203611042400323160ustar00rootroot00000000000000‰PNG  IHDRY­† `sBIT|dˆ pHYsttk$³Ö%tEXtSoftwareMacromedia Fireworks MX 2004‡v¬ÏûprVWxœíZ=ŒE~{ÞÝÄ»oŸƒÏ›pÄâ$ÒÐ,Bº6eàšÔ¡@®éB‘‚† Q¬¨A¢@¢¡E4AmÍUôi@IË÷ÞÌØwöÚNâuŠh¾½ñ̼÷Þ¼÷æ/ùí¿ŸžÐ'tÚꦙÉO]7uÕÔ(—M5HšêºªëY]—’WU·UYÕÔP×TU3}ê™–fšˆèYqþVöAŠÜ¸úU¤aK»+H¹{/yÏ¥vümã›PDïþþak»?’·éÇáUú4ÓÓ_éç“Ï¿}ÿ«GQsöðÏŸ>Š|ÝçËß‹üñ6èïE_ëä$ã?0±µø"ú8B’G¾Ñ‚(//Y•ìµBnŸä†¾Ñfê™ö´µ¶r]¬x—'~äºÊzÙ‚}ß³ÐAvý­ÁÆ— ¬F‰uûÄNû¾S²ûÑv‡Ç‹[“Fë…º–5üýú¥ƒdAÝ/vÚ®á–Èãké€èžuyëSð>T­) /¾Wår#µïÔÆXAÒG~}4{·iá?¤þP¨Yšbé/Ü4€NÞjh4NÑÛT‹h1åÂ5+\#veˆ!¹¹ÅÅôè¦2êM¦Ó6û“XSôÇ$$:Ê¿è¹ù¨°Q©¥hbt†V*#[1؉ció8f3¹QŒñÿÜ®Ëü _HñÂPšñJ¡ÕŠí-ew$sÍ×¹Ö/_ÖðŸÌß#¼(1qt¡y—â¹l…ìwlâÄq’ F-ž¯âr]ñïmÔߌcÊF)¦qZ¸äñÇðr›þÞsi³Ê]i¯ãߦw ¶ò×É{•ì ²‹U}^ŽÁnøsoƒýasØ?I ¦noÁ¿5þýÁI6ñ M†Üܺþ¹Y&¹ÊC’ÑÈ$¾u·ì5ú[ìßv¾Ü ˜ìj ã â­‡ÕÜû¢þÿô¢Ýÿyûbþ‰ìb#ò‹X§ü5þ×Û¿w$óï ‘ùÏ/íóoÿ¹ý±¹†ÿ ®¿ö¬¶Ý‘ëú3¾\]±+ò5ëÿœ£¼Šây…=±«aÐCîd™êí¯ûd¬ÿ Æ[¸©u@Y†§Ý ÓKëþÓA7±‰IGF6›…þ°n:aô{-úÏíϲ¹>JMdO¿äöØ]±ï·ëÏ—<.Žö·Ô3ÍZûïkô_Ä¿Œ¿I&w(Ü‹+ÖœÛßú_bÄÿ:_|rh9{û‹»E£Cô$Ó9]ÙVôšÛ¿'ï9áí—¥/Ñëúå{[€U‚õñoÙ3ÛÒŽ“;N“¿Ü…yÔ®ÿåù?çcõ¶f=ÙÉ®3áæùߢ7žðözª×»{+°û-ñ¯ÀÉ„ÛZï„Íño±¿ù7ÚÿîÌ×whþÞ°+)ÖÇ¿ãçüÏmu,º9oŒP6<Î={Ö‹#²çðÝÙ“FÀ–øÇeìÄœïA;ZŒz²Úÿ2ñFzÕ¾èþ7[9n]¶?DZ±ýGö×-Ê»ñoíc)þå–žü¿DLïÉfPI»ðï­SØÂþ²òÄ$kÂãÃa»'Ê`úÍ]`¯?Én™ã—¤tæ©Õ9”z/Ïy¡,å>Ï ¦^/æ&sîœB0£pÃaÖ"S~†ãKå2?@ç­f6G5Õ,?o-•!I‘ ò¼çäÌÕÂX÷£ ­_»ü ]ë3èŸ!7XY¡æ™úŒÂ®d³ô ÌÓ!^•È´@ZOà­0ú§2Œü¼‰Šl1·H Æp²¹R ¦º Ò¼MÔY'hj{4A/rÙL«/–Ïl¸>û–côtÁšÀb‚Õ‘‹Á[øè+LJâ{Dm¤„þ³¯OäëøÀ1^6 ¹i‡ô&Šü|;_ÀKÓ})b‚À¯ùåYÊä±RcfôͺsöIÙ#§\ÕGòi2XEhS]šPDc¢ Šö€«M¼a¤ôBQìxú`´DËÇlëM>c)ŒŸ ¯—gÀÈv³tðvÚ ð¼eÖ2^0ÃÄm“­q3}ñQ˜¸YÀP Ì8.T¥|ÞŒ‹Ÿ¶8[ÝÐøE]ʬàð ,t$3z-‚5ÈÒ¥³øfI׌\„c²EÕn¥SR[C—ak3lm†­Í°ez€-ê˜Î~ŠU³q|Y+žò۔ЈÃP¬3ÉD‹¡¨Î‹¢ÉPd³X #® "ŽzŽ€YÅB$uŽ$gS›ó©mf­Ì…`òÈS6SviyØW~+3ã qe1ëYΖ4ÑQQ÷®bhÆÓlìħ>ÙìJÒ%"à2]cu’Àð0é–rÄÊU†-°f Š„dä¦Ð‚¬G;µß#2Ùæ£»§ ޼Xì²UÁ˜‹º˜dŽXºtzB1FÛ'Ÿå÷]>‘ò¾’&'ÝBsYMÈFfí¤d£Ô#%^4ÈâÝ+xÅ¡ —"#ˆ²g¥èÒùÒèžžãÑM,ëü“{c´¸ª˜8'!ëiÎ ç·ÏIŠZƒÖ&ÐJœ¶:áͺ´Œ2p† €C…ZˆD£”úÕ ØÕx–V(8|ºÃ4éƒmRk„'¦À ~0±$+x*†¯b¢ýKõ.­óx|U#_GxRO¯¤èRå°|ªsP}]pôúÜYa–þ= R“Áêp\¬ÏÓµ|¬ïˆV tƒtâQ':íðv‡kîN'´ÌÝ´ß(#ųÈÃ^üF¿ü‚¯¡Ÿΰ(MnQš {ÃgØSiPIH3¥H“G€‰Ñ;Œñ‹Â»Á{C–'¦¢\±Âи$¥yƒy—¤¸Ä°‰‘”µ¨ê\-\Û,nœD–$¨O—?ȃ|Ѫ˜ü­Í( YHÜ ‘!ó‰(¥3+鳌e,ù€Ïû 9ïoA†Â¼Ö¨ÜHÐe2{*®¿"gR\,ΊÅRf„eèȦ/–òP‚C—(RN¤Ûæ dJ³¸£˜Ü$nDNexÐ9‰ÉW•M{!9Œ}t¸þ¹T> Êó»/”vp3 aÍ2Âv’O½ljKáUeð²ðÑ,ùáLOfÈë|ªSiPÉ ³9f"cfƒöT‰§àä+sC&…¥V©ƒi¨Åu1y«ž9=ðir!ð†\Mx±ƒ0í>Ó>xÐ1tCè2&s Ša:1“þ*Þ#%Ÿ¬5ël‰9ΔyÌ©*±ÎŠ_Š,žoñó-vž¼©0ÍD«ñÉ]cà†*°Ýg:¿Ÿ¾'<ó•ORZÇñ,²ï…3jOš%&˜HRå“eqfˆ“ ˆáè¦"qÙð…ËÝ-´9eàõÌ„7 Ä2îP.v4­e1v¹ÁÎá3dÌè;r ³Î$u¾VQ·'ÌØ C¿ †¡àŒ|²Sì‚ù-9;¡ÿ„Ci(ÍV!kErñŠÄ˜Œ¤™„æ›ÄP/æTêŽ$R²ÏTvœÖ'8ƒ³GfÐùˆIL±ôÅ2múÄõ¥ FÈ8O[*d‘ó‰-0î9H¥ïˆ°Ù³Fä´âaßÈ@4ìò ‹¡8m›ß~èžì§Ý“iÐ=œ“K²d>)¿‡ËÞù<·¸lë¼iêH³ìÐÕŒñœ^&<‘ÅsLG¸ip‚›1ÿ$?y‹™ÒR*@‰|ÙGsº%=óæe4• ð ù&~M²¦M+`t"<cm®qˆ,ZÓÐbXm~äTxKá Ÿöè\ÓÎh\ ª[”лäò3ˆ¤‹,«(cÓ[¦ÍHêK) ƒ»áßM%™Aœ<QN3k8Z ‚3Zlè­]Rc­N“.étXÝ>+ΰ·â¾ëßn¯Ð¥xÍifÍl]ÒY— Ø‹zô úãG/ èsut{ŸÂudŒù|E9ÔW~C"|]Ekï-¼Ã~Ç{m|K‹½bE¥Ÿq¬J «øûW°î=Ö©ó?G›ñaþ´â ÏËRì÷–Æ/Ò­ÃÑK³R¼f6ºŒnFE·2tÛätë2>Œ£'êmF4’]sZàšÙ(ê1ŠzEËPt=š‰¸€ÎLÜübëaÝiNÝl”3åÌŠr³ÌEFr€®B¼„¹(¿æ´À5sIWM«HZ†¤ÛÊ£·{M’•¾Nž?Í8?¹,F.«¢Ö,Ôj“éÇö¢Ü ÏŸfœŸZ5F­ZE­Y¨Õ"Dú!U&çO3ÎÏF-‡QË©¨U†ZÏ9µvù¾ÔßI¾Å“çœ>²+N§^1-댖õŠ–ehù”Ó²A+Ò×Ñ:uí »Šfxv6:ùŒN~E§2tZ‹œ;œ+ìõ;¢C>©òIÍl4ë3šõ+šÍ¢ÕÞQ’Ü ¥Õ&çO3ÎÏF­£Ö ¢Ö,Îv{ŽŽlüõÈ:Œ×æÔÍF¹€Q.Htl#b£ÒSšDŠO-×ÛC¶ëO§ÔÏÖIGz±lj1D[M=ñÉH|2ŸºøÔñxØ›æ³éL½Œt Wu(Iÿ=¥c°,– L†´ouUíéñ¾©?Y“æÝ§Ž ÞW#«ø•p Úð\Ä?M:ÑSuÏË?€êde]¼3æ7´*¨79ÔXÓ£÷áÜÐvd[Þ/ÃÁ¹œîLjõºWKÖšÖ¤¶g‹÷Úy·ÖrnÕĉ¤{|Ý_C¬ÅM[Ôf60e½©×L[&€M€^ßñ­d¥ÕÚ¾>Ðlé@A¿ç÷Ó¤\MVEŽgœ.‘§u·Êçi33-ßµã•"ïš1Þõrÿ HÆ5s¦Ná(™–·ï«b‚œ 0éë’r>o”¾Ãòãt«L¯«žUÏ\MjQÌñœUš­‘±:1`§Ú”y½*P±ç¬ÚlÝ¥ÌaÊ¢lµ=Ú€wM*ºjø©‰M!­W¯i½,}© ÌÀ´2¦¦í |UËÒ—ékb É•ÝýU1Å:gŠØKÀ nªv±mÛÎBÒQ´ˆŽà°mqŽÄÄkA’¬á,ùÿ +˜ÜýU3sfÓ@†ÀËîw? Î"ÏYµúeÐDârš+š=¸˜˜¶JÝ–ù2÷ÕȪ=—^è{'xÒ\7êÀY3ØÔñ7k÷¬žÑÓ2f°m§EÃd÷ø+¥†ST=èî/"ø»ÛjÞv[±uÍ1Ã%0£ñÑ€¿wôÊÉp]l¥Ñ{ÊÍx·íÞš;»øç Ôÿ-¿)=¨’ŒvÞ·óNàÎså‹Â^œñ<¥Kbº+8·«´Õ=§S¸þ˜mœ7wÞ’w5éÑV¬OãXË/Ï8-Éö^ ùw£°'ý{fƒÄ½Ï÷Ñë”&¿ç•‘R£Z[ÑàWUtå5ûpð\Ÿ¾Ïs5¨Qé×¢+kðWƒü4N´º6 ò=GÞâ(jâÊõØ•ïhóÂò‰_û ö(qõóØÕaÚÔ³¢{jŠ%ܳ O'…^ A;¡¤Ü‚Œ>=§oùûHT¿ë‚î0wlЋ½®?²®[˜¼¬É_«âQnJˆÓ߈"V“»¢Æ®7„‘¯AoÎ)ˆ2˜B…±+(ô†È„ax—&ÜÅöG$fÓD¼ò»ž*ÿøœs’ínÒ®þ?¸&Ãù×OÝ¿÷«±_C ,÷iæ?!ˆýŠOxFO8çsYÖÿØÝÂ.m„ìÓ(dwÆzžšÓì« €K@¦x4ç¦=Í.ñò@‰žòO6Ëù½O ·è`]§$Bƒ¨vCóÇ%λÉäŒWá¾X~åU&ÇŠw®EwŠóš®D=ƒtîP×ÇJ:WÒù+–ÎV%+éüˆ¤óZ$o‰Èù•„®$ô×+¡íJBWúJhPãï©$t%¡¿b -ÊÚJBWú!KèïÓš_O  ûòÙJfW2ûë•Ùz%³+™ýˆdö:—Ù¿Ò øÚþ<\ÉèJF½2Ú¬dt%£‘Œ#1]IèJBÅÚ¨$t%¡œ„–ðÓŠ3ï&=úkHg­’Î@:W™w•t~ŒÒyÙ™w•t®¤s•yWIçJ:çIçUfÞUº’ÐUæ]%¡+ ]DB¯"ó®’Е„®2ï* ]Iè< ý°2ï*™]Éì*ó®’Ù•ÌΓ٫ͼ«dt%£«Ì»JFW2ºHäc™w•„®$t•yWIèJB€'_ÆPÞ+É$ôä‹6>$®Z–´{¸•h}yÒÚùVWLøíÃóœ…Hë|.yÐ<ðõÄÝÓò¬ãײw‚N¤‹)ȆøµYiQéÿed´hoV2º’Ñ•Œþ+Ç ^$pÜ¢'³¯ç9ùm‰]ÍËd·¿ßDü…Òåß§qÖMÁ–žÇ®/ÞÊÔ#òŸá¯ø|­àè™q•¼ÑOî*>úì–²FŸßŠ8úøó“£™1úHßgzÓYˆwÊú·)AaZ‹/¤HiíYt;b,HŽ·T2z'â8éaò>YÿžKÐÈomSŠÅô–ÖHˆmhB:?ƒú[ŠélÅ¥åÒÖ¶å­Ï#¥µHJ›•”®¤t%¥+)ýè¥ô+eŸüö(.EÝoI¾b;è,Ó¦.Ò“y|«~ä[ésEz>ñ8Çt¿gmz$Eî|Ik?åý· ¸ãœ®õC: |"_Y÷­OÎ@-ã§ó¥Å°em'eÓ}ưûÄa&E¨}Š\{´~]bØÈ±^b›Ö )cn pç“̵BY,ù) ÷;­ó!–_"I–^ç]‹­e"ö“²2Aó'ðTÜ5<ˆQ¹EA–OÀV¾—eÊÛ.G©€ò T âŽ_ÇVl…K%+éQÔ ¼¯—Fÿ%S…û··¸U¼ Oþ×™–D‰éý(Gè¡Ó,òH¦ûPš”E·Í-Zõ)–#r_Tù{´²Èh2ù¼ì'í•å| ê²²ÌÈÿ WMfó–…ñZø®>"¤–•C%kyÜõG…ûKezsK6ËÖ$·"<–iONïÇ<±5ŠsÐä?ÉCˆ÷1ô®È“DÛ`ˆõ¼ßÃÓ~"M”ýk¯„êʯ ¾/äóЍÝ~9*×ù^\=³#ÿ@§™‡ûzp÷kò l²ÝzPÈë“.2H¿ÜÛÌKøÿæ#ŽóLÚGøú$ú%²;ÿ¥§œ'lÁo“§P~“p ½›ÕP?¿å8À¼²l¢îkºž­¦š$…²ÕѦðáê:ù6E9ºÂKÙå÷ïˆÖ¿2ÎÉ<£o°—‚äɺ·¯díM™Î .±VÅ y}(+ñQ ”£Å´°NÏvˆpÖ"N@¹/ôÉ&5I$óý¥pÂ÷‘®ÀQ—•?dÞ]T&<åkW”¯{íjKž]ˆ­–£¹Oº½;Ì1c¾Ë2Oûzµ[^rÔ7’g—nýf·_Ž˜©§Ó‹gµÔI3×RöV˜ã÷Ð(ñй Ü~V³e .S"NëÅ<ž‰ùÐ<“„T»MŒûÅá¯i_÷",ë¼çˤ®%HÝsî¿ÉÛ"Ä{Ž•K…í çÿ6Y£[“š%[âYí'­W®úí„WÃm:ˆÛTÊôíQ”Î'>4HoûÜgÿíQ s‡Ñrýú|,P[Öß[^FÑöÅÙŸ*lGY2C<ÜU¾O}¹\Z¬iùùàËÞ/–Ìê^üfìÔ=ÓwŒiÂÓvŒ¡W6›]\I­öŒ±õájÏØ×³g̸¯ø® ¹ßüuLuü²V8+I¼I\~ïîýKâô›B*Y\Éâ¯OßÁ&î¡üžÖû¿@ÿ1ë„í üÇ&5f…îr —1d.ÓgÊëA9ù‹ÑI"ÒßEоÇ^"~eÓª¸AÑjüË>cY§5®åDMÊÐh$âÓQKÞë‘ny¹4éÓ¹‡G“ªK—Å—ßÊïŲi…9]ˡՔ;3TX”Õl‡üõ¬G96j}7ÉZ*}ÒíÞEj@‡­ÓÔh½ÿÚdcZ§¼GŠŒ\ ɸ½Ý½5v‡£ PégÜbŸêô3nµ#Ê}GTö¾?¤`?’rAÊW8ͬé4Oz#h¥Ûb±Û¢Â=ŽtøÔŽ´q«Ó¤K:V·ÏŠ3,ÆÝ³ÆÝˆ5üT+›60œ7w£wm¸ÆQÇû¼ìº¿Âó`LÝE÷ 9Õ‚¾P<²{ÖZ̃ƻgí»Q먋CØ9ì`Ñ>¤‘´· äÃcìz«àaí.ÿ@hãíö!+\*¶wXѤ…§ àÊ&Þ°‡ÏTÇ?·Ž,,]öñ„mÄl¯u€ÅÏ.^ãA¹Ë>vñq?» Âõ°MsñÓ¡{ŠE“‡.Aüžzsèº8ŠýîÞ°ßí^‡ï_ÐlùƒJÊŸµ¨;gGÔ×nç¨ÇîÄ⬹Åñ‘y7‚?Ñ=¦"`…Æ U( láõÀ!Ö˜ àÜîö!=¿ýŽ.9:†KŽŽ›Ð1˜-‡ïîÃí÷ÀÒoöp§6FžÑÙPØ;R1¿ŸElû8ð’£*š4ðCäú]|ÚÎ<¿{xÌr´w7:;iÑžpV$wˆÛhVñ×g|ã$ÙÆWûx‚ŽUßÖÂcÏWáqÍ·Lv쨎_³ÂóŽg ÛݮŸ·0ü·¬Ï0ü¬‘?‰ê‘~Äì.-1f-ÌÓÑx#k x à¶&±†´Bà¦ïušw£½“3Dvïä=.|2l(ß³’É*MÅ_¸£ ºa¯Ií5ß0¡†ÿáÓ>4±×|‹ ¸${NÜmâ¡ÿ}ÃB9+¿¾mkBSxœ]ŽÍ‚0„{ó5|ÀðãQÊ_ÃV ÔÞÀØ„«&MÌfßÝЃ{ù&;;›‘uj°hø„>uÀ5zÔ/¸ŠLcFT ¥ÑjòV£c{™ìAZÚ”^‡ ƒpè ¦u9ZûÒ€å ن؛=Ø“m™O²M6Äs—äµ[ä YìNÅ\fÁ_µsgûzUN wRímÂÄ#%ì+%² c½ŸVÆãðÕC°‹~:LB¢L Ò:‘\õ:¡m?mkBTúÎÊþ axœíÚMOAÇñ¾@äfâ;Ó» ¹#‰DM|ƨ F/#5†Æxâ@¢Ñ…ÊSËsk$Y ºvV[·ËîÎLwf–-ßOòO»ívfØß¿ë¶Ö{âSg·ÊË«EQT•8· y¯ƒ"ÿ¤õ彆"ÔÛ[Au[þ.z`nv6¨¢Î!rÿýk¿+ófoºD&GGž“ümÌófô|½¨™Æý™Ñ º1ÿæ}S=ÐÌÄeþ&çš¾ÞïVïúǵ×mUÿrÓŸ9ßùÇõ‰xÞA«^=Ü:GGKwܸã7ó7Õ/‡Ïù‡ß®ùÇ›NTýã?÷ࢱüççNMöY{@ûƒŸuåRÍ*üW)=0uµÏ?\¸ä/Ý'‡úŒå/öË£¢çÿè÷‘º= Žy½¶­U:ùëô•No¥ÕÓÁÞ sq+¶'þmO öË¿Vûá´â¾wNú÷_ç;jq¼w·×µJ'[c‹ _ßG?ï_é *¼­zœUòßß«åºârÎz- ŽùfeY¹tò__ù¬\ºÙ‡?ã‰[Ï«vô™¯“ü÷v÷[åªTsíä: šÕ³ñ‡V¯ÿÄøå¯Z¥;n3o¯ö¢õÞÛµòD¦PÍgg¯­ò¸0ýÿ‘"ƒ•¥OA¹øü×iö­üËw‚ü£U[¼á¿»wÁjþÛ[»'Êu˜þüÎÅUþYæ™é÷½Åaß«Þo¯Æcâ»›ùomîÄV×6¾,Ê÷¿SC?ãM6Êk¼ï½÷—Û½™Ž©JþÕÊVb5Ïɶû€ß£ü/q}/²W½ÎÏšecSZ¶{€üÛóÏš½NþëëU¥ru. Ì”jþk«­ ¿Wé…â×êÊFÇE/¿¾—׌TÞ¿c¦øý7EQzÀiS*•NŘ:¯±±fcŸÆ¹‹œ¿ÍµçÙ.9lå/Æ WÜ\á9£ûÊÆL[ÜÜÑ}âÆ‹{>m<›cÊŽ›êk“‹®M'+ÙZdûÆ=.£;fÒߘ´ŸlWc¦‘嵺kW=®²×©®[ÖdÝŽë÷¤y:í)ÕõØÊ?í|–©Îq”­%KVI}`:ÿ¤9³ä7¦ËüUæWý;òÈ?mM¶ò×CwÌ<òWÝ×VþÍÛè9Ge_Ùœiç°¸ýd}*ëAÙºUÆLZÊþqó%½Vu¼¸µ‡÷“=¯’©ì1WT΃YÇvÍļ¶×žöþ²MµßMÌ“‡"äE©T *é9œ ѬÓú]㇠WŠáNýG µmkBTúÎÊþWºxœí‘Û8 FSHI!)$¤’FRHn›wóî HÉY¯Ûx3žÕꇤ¢úùs†a†a†a†axI¾ÿþÛïÇÿ»'UŽ{—áÙùðáÃo¿¯_¿þª÷Ú¾gýW9ª Ãû¼Ïâöð–þ¹»¶ŽÕo'®GW {>~üØÖÕJþîÿlúôé×ßoß¾ýüòåËú¢öµ¯ò)*/Îåç‘Ný\®ÚϱÚoù“v[iZ_Õ±aÏJÎþ/:ùþüù×6õOÿ-¹” 92b?çTþÈ™×þlôkÎ%?·Úåöìä_2òø¯èäÏ1äBµ ‘sµ÷YäÇ5à>¾:†>Êc=1ìÙÉÿ¬þOùwï èyä^«- ×Ú¶,ýÌXÉßzèû•žuÃÐsMù#×’U]ë>H_÷˜ÀyøY’Çvº!Û‰õŒå_mÄi ÿRuâþs´]ÍXœm§_gû)YYÞ)úmæ]×y,—²¬mÚ z†1Éêša†a†axEÇß“G°×§ÿóo/ïYòÝú\êkº6õ®x„ËèíjÏægHð–ö¾»–÷óüÏØñ|†yž÷u¾Ä.½•üÿ†þó\þô³aÏæŽM&ýwéÛÃäké#Ïú$?Î]ùMço¤Œ\ýȾ,Û/íßÚ¥—ò·âQÛ@Êß~6s?)}‰Î,¹ l¾ìçœô ØgX #ìvçQç´“ög·Ú ÷Bž™òîìÙ™^Êßuô¨ã®ÿuh½à¾m?Ž}{]ŒÐ.~È}Ðv_÷ÿJ;ëxçoÌgJöëôY]’Þ³ë@¶é.ì«)™áoqC–ü¿“?}ß>@ÇûXŸÀÎߘò'-üäÓÉÿ(½W‘?Ïöú›²±¼‹ôÅÛçúÞéô‰Û ºÅºvþÆ”¿ÏëäOœÊ™ôRþœ×ùÃþvì[K?[A}¥?-ýwöíåµÔmÑÕ‘ý}¿g\=ö€c¿¶}ñ³M¾‹ ½ÃüÃgggÓêüàÖ èÇ„çÜÀô-B^ëók_g?Ìò ¯F?œ£³« ÿ•Ý×v0||ØŽÐØ=ǧH¿PÆîÛgçsì·ã/ÇhØ‘ñI ÇtýÜ~×{‘òçún^§}¶ïZæøºyDžë—óÏì·ó5èˆéÿçXÉ¥ÿWvðô¥§O)í"û±c0ÎËvYà“ØÅ ÿçZòï|~à¹_%/Ï,Îôp\€ËɹyΰçZò/ÐÉé;/x†ÖáÎsõü_é·9?ÿ«PÌܯ5Ý»\í[½ãy|ÞÙÃçõÄ8ÔÏÝøŸgäû¿ËʱL{ä? Ã0 Ã0 ç_àk3¾Àç†>´’ãøŸÛÜÆøzä«Éø_ƒüÇøü\Sþã |<®)ÿb|ÅÊç7¾Àa†a†axn.µ•të†a?lÄ÷^Cã•ßvk­¬Ø½#®àýÜ~eûî)ÿ´3<3^×Û¶¹Âkð¬dlùcÁ&·jK+›œåo"eòú<.ãÊž`›Áê^(3zÌòÏöèu ŸÁ¦lÛ+6»úßv´î›<™†×ï‡ ¾k7]ÿ/lÓc[`ýOÚöùÐn}½×çòš„«ï ‘GÊß뎱š×Äzt¸^vßä2)?;WmÆrõ5üoäcö³ŸþIzì?ú¾˜‘Oî÷zx÷Œ{¹&ØÇ!û…e¹z.þ©ü»ýüÓÔÅ"ѯÑí¤ô ¹Ý1üÖóäÁñGg×ÿí{+Ò·’×lûw<ý=}GݽìÚFƨ^ú)õ¶ìzIpäG¿•ü ¯ãKì¬ÖœÎ{Í{ÙÉßeÈï ûšG•‘12éÇÛ­¯Ïq¯§™iumf—“>¿.¿ÕþÝ}¬®Íëòœ®~žaì? Ã0 Ã0 °š[u´¿›+ð7øSvq¬ÃïìæÖ­öyÎ…ç ½?Þ‚‘}¶¡åœXùçwíŶ‘ÚvÌ?ßå°ß©ð÷DðÿùZÛ“ð-q/–?ß³ñ=¿ê<ËÌ~¶Œ›‡#ýßÙæ­ÿÙæ»>¶ÓÙFkÿŒÛ"qþøz°r­¿Qèo 9ÆÄr¦,øˆî­§nÍY[;í§oæ:)@¸-`×§-Ø7‹ü({α߯›SÒí§Ýú»@¯ÂµåßõŸKäï9èîüÖ ¿É¸“>:ŸnÁ3éç _[ÿ_*ëmt°cmìÃC>äq¤ÿSþ´L“øÇ<²?ç=÷çÝ<ò¼6Ç;ùãÇ«ôsü÷èþÜa†a†a†{àxËŒ™\ÅÞŠÝûêpxç¶?0׋¼#ÿ5žßàøzæÇÑ™ƒc¿]¦³²¡x^úêl‡ò¼ •ÐÇ(×fù±ÿ:~Ÿ¦ËÓÙ£^l iÅnç59¯³©žWÇÏ~·\;Û?vþnŽ—í»öç’6eÌr¥ßÑý¿óUbS~vù§þ£^¹÷U O7O(é|;+ùSÏéGôü4|?Øfí´ÿÐ÷¶*?ÇrŽ—÷W~Ï2ÏoÅNþ–ÙŸÊ¥ÿSþ9ÿ×~dŽa«ç˜çòîÖ‡ÜÉßmH‹6öìmÀXÿ[ÿÝJþ…ý~Îs.ãÚyœÑÿmƒ4Ù¶OÜíï|Bÿ­düžò÷ø/çøÙ˜þÁb5þÛÉ¿ÈyþÝøïUä? Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0¼.ÄP—~þ*ÖÎ1@G\⟿äÜKÊðÞßrKXÿ˜µs2â±(ߥò纎Jëì·º8”ŽŒ'>â’X@â–¼ÎQ¬ûQýb£àÚqôŽòwx‰ ìb÷)“¿ëî¸_ÊK|•‘vÎ ÞÜ1çŽÕM¼6keŸe-2Ç›ïú5ùŸ9—ó?K^ŽEº¤~‰9òϱQï±®Y®×F¹8–ëN?å~;:=J<—ïÛßþ¡-ìtñºÄ’yNAÞÇég»þCþŽ \áûNýâXÊKê—s)'é^Kÿg\~âç2}›6í}Ô³¿·áï)¹Ün]O»ûrÞ^Ì÷³j‡~†"·î{pæ¹âù29w€6”Õ/Ð.Ÿz-ví:û+ýÇÿ£ó²M{ÞW—ýûJY¹¯Z÷­Êêµ¢`%·Œ íÒ¤l9…¼ç•íž¶™Õ¯Ï#OÏUz+èÁUÿ?;îýùsŽçÜdš~vñàN·›‡Dç7*.Yç«+v:Óye;ôø8Ë}¦~éÿÝ|…·²+ÑޅNþ9£àÝÀ}•{BÆž#t¯é˜×xîãÕ­sXÉ¿k¯ŒS¬Ví›ü/Õç»uJ=oê Gý¿ð<‹Õ»L'ÿ£²óL¬ò:äD]²6Üj¬f™ògL˜ëz/¯+ؽ[{Ž™ßºrðÝCôM®Y×q¦~áè[»{y‹¼£®òÍy cÈzA¿§Þô»ô‘Þ;Óîwï„«±€Ç9—¬zÉszW¿”ûH®œóìóV‡ax3ÿ ‚ú à¿%£wmkBTúÎÊþ|TxœíÙßOUÀqþ}ó?ðEcj4©à'_Ô5}0‘’&mAl©TJùÑ–Ri("i›´Ñøh©/ÆÕ*–B¨°»,ÉqïÀL—ufî½³³;½ð=É'³3sgöîž9Ë0G††¾’¹Ù?=õŒÉ±ÁDÇM|Ý'ÖŠ%ëÒ10!OìÝ/+¥uµTë›ûŠryâ”õ¹þzÔ¾¸íaç©ÕñaŸ!n½r{VùO—Feùßâ–õ ïj©ÖýíccVç ûžtßé1¶9Ñ»⮯°}Y׿éÒá geqe=àç^-W Áö‘‹g¬æ£Ë[Ø÷WÏqç69¯éñ&Ÿ#l¿«õúüyYX.Êëay=Ø~ndØê¼qù7ÉGܶ¨ãm·ÇÍÕd_Ø{d]ÿ¶qjè¢Ì/<~Þç—òÁuàï87¢=WeFí7ùþ“_üëÞõú?qzTîÜÏË_÷7kÿǃ¥õ‚·TëwóÞþÞ³—´çÒÝ‹™þþëîMïÿÂŽ‰šgÔç1½Çô·»VÿÇûÇå…¼ç¶ZÞS¯s¥eÎ[¿½µìKyÆÉC÷›œe¸Vÿ}“2{7˜Û2{7¿m[WßxÖS ‚üÿ?’ÖGï”tœœ’öõº½×_~ìS>ïLyÆ;3\«"Ýp­þ‰tõúÿáZg,Â.\«ÿﮕÂúF¨[3ïr X†kõ}¦+2ÿ¿~D~á° ×êÿêt·ä \¡¸µÜ¹›ÝÞ5pkæ¹6ýEÊ3ÖG’ÿóLž×Ú>Ó1éúáZýO_î‘Õ|Ñã?ÿ[ÍmÏÿVó²V23Õ“õT"ɳܤÏõú¯Uÿ?î9lù²rl嶸1aÛmêu'å?iÔ«ÿ_™ݸÊc¢Î¥{_›ùÙÌ-*²®ÿGµÿŸ¤VÓq}œ¨m¦s‹šƒÍoŠkõ_¯þµù7y¸±6ÇØ¼_ed]ÿ¶Q¯þšùOZÿ¦y­æïŠkõ_«þ¿îþ¯ò¸¨{;“1º{Ǩ9Ùœß4\«ÿZõÿm¾³Zž£ÞáZýתÿ_mî\̽ ×êŸþºáZýé†kõO¤®Õÿ•OÅ"ìµúW9Žëÿs Ø…kõ?Ýýô¶þo9¿ÿ_Í5P¯ûø´Þ§Úó¸Vÿ“]ÏÈZ¾ª¼ÿ¯Æ%‰z奚g¶¦ãMö¹Vÿ£G÷ÈÊjQ¤µUrÍ-rï·e®ñµ ïë=¶'ÑùwJþãž–ïs­þG:Ÿ•åÕbY8œ§ ÝsÕjz®ºœésݨõ¨÷›KÔüT¸VÿCíÏyýݱë?IÿÄr¤ÿ†¼Õ6ém{¹åBÐÿUãl¶w“¤×6Îô|Q¯mòv|ÖõoÛÿïÿäùmýß(jœ.Âjp§ç¿’kõÿeë^ù{©°ù÷ÿý¯×ÛÖó­¼òÞy|_{ÐÿUãâ¢Vy~”ó¶/ëú·®^ðú½:ÇKãâ"‹ü›Þ7˜ãzþ“Æg‡öyýÝ+?ÉðÍ“òÑOåõñfyrðMyìØ«›=à5NQ¿ÿ6÷qÇÄÝ«éò–_›ü›Üªp­þÛ¾èõzÿ'žGèõúÿ°¥Q~›ÏiµhÌzªN„kõ¸ù%9|@i’CÍMÁë‡ëM›cJ¯ }¸VÿDºQžì>äwSùÇ®¥þ ýÒ‚…äó1mkBTúÎÊþŠ>xœí×ÁNSA†aoŒx‚Ñ….H„D·.%Þ€¸Ð 4*¦Âƶ@Z,¥èÈÔœf€­ ‘á¾äI{N3ÍIÞnš’]ÛþA/uzýÔ9¤Þ…ã“ttü=õûÃ48¥áp”NOÇi4úíììGNåó{ŸÛ++/\|å]e3¦ìé{úÇžþ±§ìé{úÇžþ±§ìé{úÇžþ±§ìé{úÇžþ±§ìé{úÇžþ±§ìé{úÇžþ±×ëî§íÖNzòt5ml¼IëëÙæ5kW_×6ÓÒ㓳ú×»ÜÿÙóWi{»5÷Ù|&ŸÕ¿Þ5ýÿuú×½²ÿøü|.yú×½²ÿ`0œKžþu¯ìßéÏ%OÿºWöo·¿M<\X˜¾/]½Ÿ§Ý+ûïì~4näëÆ¬ûyú×½²ÿû{eëY×<ýë^Ùë]kªlÞ(?Ïòô¯{eÿ·[»—”í¯~–åé_÷nêßüfÝ×ÿ~ìOýo’§ÝÓ?öô½¦ÿÇO_.ýßÿùŒþu/÷ïtiqi9­¬¾žË£ÅåÔ>èVÓ¿yNn‡þ±ÝõþÏÇíúßî£_Æ ˜å” ×mkBTúÎÊþ’xœí‘) …ˆq ĉ8âDÈ^éê>×»gI@ÏÏþX¯jjg»iЃž——Á`0 ƒÁ`0 ƒÁà?üúõëåçÏŸ|â:÷ªçâs¥¬eø÷ÁÿQéùŠþ3|ÿþýåÓ§O|â:÷2|ùòåßÏ.¾}ûö;ï°7eôûGFÔû´ž•žOõ¿6Ñþ®ö_õQúv•¦“×íßù]Tò¬ä]½^¥Ë®gí¼{>pjç«zëìåkßu¹´o{šyªþ¯yeõŽûŸ?þ÷{è-Òýøñã÷½x†º¨/ D:½é3Dþž&òˆ¼¹e«^H×õyê i#/OGôzüϪÿÇ߯_¿þ~î :ûsMeÑò#M”Ï3YŸ#=÷2û» QžÛ›ÇßЙ¦‰ïŒ[\s=Eó8´}E>¤GÈ©éTîø  Ú²Ê×Tªg-Ÿñ}×þú̬üVfÖÿé¼Ìþêo¨SVwìzV}Ñ.âƒ/Ð>¨~Ê!?÷UýùÏËßÿï1¸Åþè<ú#õîä¥þ•ý}âÀ¶Ø=þF[ þ÷~†¬ôQÚ‹Bó¡N™.ð·.+푹^edÔç½üLo+[\Å-ö§k»ïä döW‡ïÍú(}Ýýê6îqÝý$¾#³?zÐ6–éBÓ©ÍiÈïöÇ?òLüåÍ7®!ã3ìO_Q}Пuõïêoßš™é[ú=ž¥tk¥È‹ûøMÀÿ‘Æï!'}/õƇdºÐr2ùÉ_ÇCú‡ÿﲨü:—©ôéº ƒÁ`0 :8÷—ÝÍòoÁ=¸„+8-ó4}ÅÛžÂcåÄ¥XÏdq{bUþêÙŸÖq˜Â©Î®è¸âmï!«Æ¶«g*ΪòU\z·ü[ù´GAåÖ=^§+ruñü{µëLVåÕüþ çU¥?)ÿV>­Ò“ó†Î)úçx…|œYé¬ÒÆ»giôãœ\ÅyiÜ^cæUúÓòoáÓ*=£ À³Âó!óÊþÄíT•³ÓY¥µ?rfògþÿÊšûWœ—sÖʽVÙnùÔõ*ŸVÙîXù#å=ÿÌFÈÜýªÏ«’—+[¡«àFô~ÅyH«\L—~·ü[ù´ÎOÒ‡£Œhô5žÝµ¿ŽžöT§ö¿êoà”w¯|Sf®ûÜÁÓŸ”+ŸÖé)³·Î;´ìÌFå³´;:x ûëØÉÇ÷â)/ˆOSÎ y²ëUú“òoáÓ2ÞÎeÊ)Ve3'w®”ç‘gGg™Ž=ïJþ®^ƒÁ`0 ƒÁ ľˆùœ‚u k˜U,ªKsÛþçØ‘5€nYæ®,÷çbXw{ ⬿wÖ&Ýúõ™û3®Q×”øN¬ðQev× ]¨¯Æ·ºö¯gcH¯úËžçîi½÷Š{î—ôÌA¦3žéôIó8†Çh³òwòÊdÌÒu×wËÈô¸ƒUI÷äWçq”ƒð8­îÕ×çI£>+—£ñ@åì”p™ôQÅŸáóÈGcþZ—ªüò\ƪÌêú޼ÄUƬìß·]ÌÒù/ø:íÿèÊÏ3dç;É«:gB9ÈRÈôï|GW~•—î×w«2«ë;òfz†áŸt|éø+—i5þ«Ünÿ€žá«ÎŸgºZÍY|<õ1NyŬ|E7þkúªÌêú޼÷°?õ®Öÿz/k›Ü×>ä<šÏÿ=Α}NŸÍå»Î…ùžü>åuåWy­d¬Ê¬®¯Òdz ƒÁ`0 *èÜ\?W8ÀG£’Ë×ÏâY»ûÌÕ:‚ýÒÏDg«öc¾g<‹ Ìö2+²¸€îÙÕýÿ'ëWµ±6½žqnØŸ{žrèuç"w¸<ÒTkôÎ.™ô\ r¤•¾nåOàûïÕ>Uì˜~c‡#T?£ñ+®ëžyöï{¼QùÂ,,^qF/XÅûv8º.Ö©gá×3}íȸâOPùì ~n%ãhUÞG4§çø(_û…sn|W}Tg&x^cëô“,Fíý…¶Çù°ÃÑ­¸ò«ôµ+㊠<ÁÊÿ#+}/ãUw8BÎRh_ÏÊïäÑ|»33!m–r\7U9Œmêß({ÅÑp™¾veÜåwÐé[û¬úx¯ëG¨ïµÌú¿Žß]ÿß±?g;õ,çnßÒ½Úow8º]®³Òוþ¯Ïßb÷ÿÈîã?úÇOVé¼=ù¸ZÙ_óÎÆÿû£#¿veü?áèv¹ÎN_WÆÿ³Žªõ¿rÞYL€ëÚo;Žù°ŸÎ1³g²9pV^•Gµ~>™[_áèv¸NO·S÷Ÿ3 ƒÁ`0¼ÀçèÚïQ¸’·¾[ãï¾×ØÀ veO\k^8Ö”¨v<ëZbzº¯²Û\ŽáOìp¥Ž¯b¾n$~ð}¬¾Çoèz•3ñј mKã è«ãvUÆÎþ]^»i´NºÞå¸WAö»#´÷xŽë”«é‘æjßÊtÄõì q ³:£¿ÏE=Ð z%Ö…ßqù)CcñÕYµEÅÑí¤q™´®ÊyRGý-¡+u (K\ûh¬PÓ'¥Ü*^Ø¡²¿^¯ì¯ñqÚ=m=y|KóòøvÅ«eü‰Û\ý˜rÈŠ4µŸÇ=Ž›ñ{Wê¸úÝ1Òûû;=Ý·åòxÚëpû;o@>ú›”ȘéT\ÔŽý+C±“=*ï™É«|˜¿GðJO¸CÊåW]ù–xŽ1.³™ïµ 9_EŸÐ±©â ½ýVýqÇþõÊã)vÒ(ç¨ã Ê‘}Ïì¿[Gåñùw¨œŸîǺÛôã{-âƒoô½ÜSdו_ËžïÎ׃Êþø2åÔ;iT&Ÿw*ßÎwú‡·™“:Ôº§ÇÇg×­¶“SþO¡ãsÌìÞjÝêºï%Z[~_˯déÖ®·¤ñ²+œÖñô¹Ìw]Ùÿ7 ƒÁ`0ø» ë]ÏÜkÙíIŒu¾+e§L]«ïÎÖ‚ïoA^ç°î;=GR¡³?œév쯱Ö;<÷ôy‚· o$Nî1ç´ˆ=:ߥPîVãžuŸ£<´Ç <&«ü¿ê3K«yC©¸/ù4–£rÇ)i=µþ*/|ÎŽ^]ËQ¹NÐ1qŽG¹¥w>ù{å•á ?ÓKvÏå:A¶þó}E:·ÈÎ_«n+{ÑþuÿÃ=ì¯ó¿êÜr ³›÷qÍ“¾Ì³]>>ÿËdÑ}+½øüÏå|L¼…õâàõ0öÿ»1üþ`0 î…lý·Še€·ô®ùŽg:…®×ºñ¶Šž`W×÷,3ËOã?«½‘]—¾\9ûPø×î~Í[°£kOÿûWùiìGc~Æ)ãÄ-<žw¦¼.ý3qÌ}•ãž'vªuðw$V±’¬n“Ñváò(²r²ºÂÿ¸®5Žï2©½ˆS;W¸‹ÊÿkŒ_ÏKÑÏ”ó­8B/ÝÁhùèEÏÕ —'‹9êw?K;Òx:òxðº<–ì|@¶Ûc³ÄϽ®‡§ùVúàyâÆ»c÷ÿ@Û–ŽSwÍ8B•òq®Ãîÿ]û£=é2ôlBÓe6V}eö÷¹ˆž­«òRý(·ØéÃËáÞ VþßeÊöZT¡ë„4Ýûïad¢­e2Þ’ý+nñYöÏæøBõ—ºŸTq„®Sü×ÿ»þß”é<›Ãïø­[&Ï=üfÿŽ[|†ÿ÷õ÷s°zîPç)GèåèÙÁª}{Z×…Î3«³™n7ÅjþpûWó¿Îwfåtöï¸E¿wÏùß[ǽ×;ƒ÷…±ÿ`l? ƒÁ`0 ƒÁ`0 ƒÁ`ð÷á{ÑÙûô‘Á~ÿ¬ö½³ÇÒßi`oLöy„>uo©Ãßi\q‰ìKó|}ÿïÒû7žÉSvu9ÍG÷íñ©ì¯¿c¾#öÙé>·,Ïjoð­òw{õÕ†ú‡Öݲ‡Lûù=«mWèêòÈ2u_¤ö¬ÿ8د–åéŸjož?»Ú²kÞËDúøßß±¡öm¼†ýýwÔ>ôÃì#® }©ÛË×õ·E:¬ìOÛ¡O;<ÿ¬ÿsüy—›î¡Ô}›Ú›¾k‰}~úŒî±Õ|µM’†ï'8CTþ®¡¬o+¨[Wžú‚ÌöŒ½ø†U™ä©ïïQ™õýr'ö÷½î\ç­'ç’tœTY¸ÏwôŠÌz.Dó¥=¨ÜW|ÓÉ~q=_¡¾yª¾M»ÜñçÙÙÍÇ÷–¯äÇkþt§ïbS=2æû|¥Ò±Ïy´NÚ_}O¯îe×ù”摽ÛöàýðtLàœS6Ÿq`CÿíÌjfý´3–#Ëéܰ³?zÕ1 ÿéíHí¯þ]÷š“ç‰ýõ\"íWËÌÞ]åó¬ÊþüO;¾2'@¾ìã@~tGÎü:º«üªç{åÝuÊþê7m1‹è™Q]ßPWVç2ûS®Žåz]Ï¥zŸÒsý‘ÉÛ×3ÐÅ]vç‘îªÜÝxwÒžôÝ:Ú—>ÚyŠÁ`ð¡ñˆ$j¢ëw½ymkBTúÎÊþ¢6xœíš‰më0]HI!)$¤’FRˆ?6øc>>~Úsm£®+ŒvÁu…Õ‘øνYšuÌ8³´ú³uNÒ?¤WP>Ê1Js¤ŠWiVÿçü‘ý_uKðEÿ‰Ï¸ˆ/rœÌù£Âˆ_âšgK•W]×±ž™ÍEYòclÊó,[¦ŸTœYH»T¾Ïàÿ¶›ùÿíííðŽˆ}x¦÷ÇL#}A› ¼ÒâœöGüžVË7¼—‘^÷}>“iÒžº²-çøèþŸiæÿì;}žLJø°ìXí&ÇTÊP÷3ýTÞ#¯ôߨgÿ®ðJÖùl eäý'ï=ŠÖø?…͘oéçùn€í±aöëì›ô½|7ù>šý?ÇôU–%Ë;«ï¢­ü/ñmöµžN/èãI޵Ù÷fóQÖƒüz{Èñ<ÓdÌé6éd™nù;è¯ÚÊÿ¥²Q¾–mû{{÷5í$ýÀûiѦxæÿg<Æ$ò"Í^¾%=êü¯”RJ)¥žS—ÚçÍtïe/ùÖ”ë —°a};kú÷Ô_µöyµ?¬9ÔšÉlÍzÒÿ}m#¿óGßüKk!¬›ôók(Ë9êGüã1»¿”Þèz–×,­Q¿&îlÍiV濊ý²Üû#_Ö<òœöÂ3¹Îžm$÷^9g —{9&°w³&¼Û:Ë™ë‰uõfÖšúºR…÷:Ö½L+mWÇôW^£§Äz%÷I—½î¥2Ÿ£î—lo£þÏZ¶f?¾k4öW¼ÜÇ-è#¬ó­ ?V/ì—c^ÿ·!÷!{u̵ʴU¦ÙóÙ·ÿAœÑý‘ÿGe>G}þ?Åÿöþv✽Žø3ÿÉX~j½úœ—{øzT§ôA·O^ÏòʰÑ>÷³?syÊ|®¶ðßG)ŸP¦ý¤*·îwõ«#Ïá½wßö•ZG_€gGÿßöøN˜þx™ò±×)7Œ ÛÔÏôQöá'´1ým޾¨¶k÷;…tà>ÀN¼ð뿚ãð5àxvõ?±Nž Ûÿï=/ìú¿cësê" ž~N…ýëõFø¯æ:bŠÿæs½¾†ÿkg^¢å¡çi+þ&å6Z(ûà­ß}•–9L;3]ôÝñg©¯—×ûú_M?2É¿Ÿë@˜þy¬³{»ñŸ¹ÛC?}Z%ÿOwi=È{@‘æ?¹ížÐý§ÏÙ¿ÿŸ<¬öëüð)ÊÍ|¦–õv/Ñ*çžzûç´½ÿDCÜKô¿–sO˜þ»Öæ+Kówö<†ÿÚù?ôÚGŽ ÛÿÕ¡v϶-‡ëÀíüoêwÿ§ý·v¨èu»¥^o„)Ÿÿx™-¸'Lÿýýß«ý¾h¿^r¬×õòãÖTô:ש§ÿjc‚Žö_¼ÅwM˜þ{z/•¼[;-9\§ÑN£ä_Ÿ§öŸ'÷„å_íwiwüðy·ŠÆmë4ÚiTý×óû?«ÿ Àmü‡üš}ù?Ûõã¾Òh§ðŽ ‘èÄ ÿž3- vŒññÿðoëT’ZY ÉØ=j=ÕIƒƒ?ÑÀg¸"—Ë——‡©åÄyUþÍ…ýŸ9û MNÆ×å:\þÍEûß/¦ùojrî nÛ¨³Ÿã×úØVÿ¹|>Pøî¿ýÀë˜NÛ­þ3™­@aà?:ã?™\«È+GÚ–s“ý;­ëÇ:NÛË÷ó{ŒýÔu*óó:ìÊ5Vÿ‰Äòž°{òmÆTÿAÚ0H»ºµ·S?R×ë|«ñoj¾«{ëvc¢¯öõcní–·ëÝu!èyj¬þoÿ5«bun÷X‡1Ñ¿[;Ùµyv ÿŸçwªWÿc±=®ù±Ž]9cª¯vój¿zø÷»oXþÿ¼1¥ÂŽõº5ååŒÉþõc?÷^ååµ¼ÿ zOXŽÓyÚaçßoÓüÛávm­%aü› æÈÆzÿ·µ•-ý¶÷àAJ%‘xH±Ø¢Ê‰Yº9>£¾û»9­êÀ¿Ù8ù_*ºç$âËeþ§á?B8ú_J«Äã<þT”ÿ[ÿQÂ×õzAã?zÀ¿là_6Žþ—R*‰¸ÕÿüG ø— üËÆëó¼Ìÿ8¾ÿ‰ð/ø—§Ëç¿ åïÿQþeÿ²qöŸVÙûûï~ÿ‰ð/;ÿNÀôpÿ'‹evÁüŸhlücþWÔÀø— Æ¿l‚|þÁÇ?üG ŒÙ`þ·là_6ð/Ìÿ– üËþeƒùß²ÙÀ¿l0ÿ[6ð/ø— æËþeÿ²ÁüÙ8ÿþ—R‰ïùÿ¿9Ìÿ‹žþËeßÿÀ”°þÿû­Û÷ÿÿn>ìeõ_jni§ŽÎ>›ôÚ—_裭_ãÿ¿ ga1EÉÔ:%ÓJ“^Ý ÕµMZ_ߢÌFV½'âØ¾ó]òºoÏëÌÍÍ×ÞÍ~ÌíûI?íî›·³÷›·;3Ïë&¸vhï&†°sç§ðÊ+ëˆÏ&Oÿïˆt'¸VOÔu AÔ¿BûÓ§Oe }õŸÕ¾T:Elöƒ¦@ûb±Hl@êú@ ÿôôtçÜÑ^æï^œåOï{ë ¾[A¾>1=T= ОϪˆš¶l9Ï|0ÛsÐùÉ8¬ÿrþñõ¼ûÍ4l?x GÁç•‹„>ˆé¢¨ mj*_E>öÙøÿüÍ‹aàù‹*ˆ6‘¢þaÑ}³ SÆ“ïx<91UÅ×^z@8ßøìoçùz—ެ„SÓýPʯ‡ÒÉ]³}@ä‹X?QÛ¸¯³«ÈöÜ?yr¢Š¬þ_®? >|æD[nóÝ>w¯š “.ðû€ÈWSSS{®¨Lç3ÊÚ5Y­E6SAÀíøøÉ*úÚOs—ë…‘¥pbð–Ù>022…}¿òõßÒ~i•üDþy{pè©óarN”ŒûzH^o^û°þ‚qá‰oÇ«¸öùž_Ôcüð ?„¡Ž³áëÖsaןÎ÷±Œ×Ÿ÷ƒ¿“È?oŽù­Ì‡¬>{Pd39_dg·*ÿ&÷¥ú}dõ´…ñÁõÏåNTqUû2ßwËY0Ö§§qL~áY–Áé}ó øâ÷ý2^‘/öwáíìVgÕ›\§»IÑy&m3¥Lÿ0>X¢þc£ßVñÉÖ¾ïÍË~äÇ¿H,cõßøÔUB_,ñ~ù}‘MVΖ±T•Éü˜ØÃÖ1m»¬LEÝó?Œ¯€¨ÿèñ±*>¶¼mVYü‹ôùb‰÷Ìï‹l²rÕy²cÝyºúA?[G×vY;E4ÿ™ú ˆú;6ZŇ—­ò}öþñ«½ÊOˆ¿yÒmHS;¨ÿð‘)qŽ:óú£ ËTuÓFüÝ“nCšÚDý>ª$êüú‚ +ˆ6]=bú‰ú:4LÌ(QÿƒŽ3JÔÿÀþÃÄŒõß7t˜Q¢þ!ÿf˜Ø@$ý³MVBö§þ¿}l[3¶u^[×̃÷Û¯†M-s|;!Ä¥ÿÍPÜù3( Þ ¥ü:(Ž­„É¡» ÷ùMpâí ýrBüˆKÿºn„â'WAaÏ/…ú÷ãÔlû/<ýyú¿ìéßáé¯ýƒ}Ù±nFû%JÖòÌOIÎ]ZÿëZp¹]@±.­ÿg.Å?Á>(þ³ Šÿlƒâ?Ûp-þmåÿm»“¿× Wæÿ›ùÓµÝZý¸WÖÿlçÿIÿ2\Yÿ·ÿ7Ϳˎe÷áœÑßrþ¿–ÜŒhŸô7CÚòÿ¤®Ä¿íü?é_†+úÛÎÿ“þe¸2þ·ÿ7ÉÍ‹ìü>éoÊÿ§.­ÿ5Rþ?- õÿlÃ¥ø'ØÅ¶AñŸmPüg®Å?}ÿo®Ìÿqäÿ³WÖÿÒôý#Á•õÿ(òÿì¾îïx›éwbi‡3úG”ÿ7ùö2ì÷œ.!ëù[ú»Ú\‰ÿ¨òÿ6ôg]ë®èUþߦþ2[šáÊø?Êü˜ñŸÈ‡«c?„+óÊÿG—Öÿ(ÿo´þŸm¸ÿû øÏ6(þ³ Šÿlõø§ü¿]¸2ÿGØÎÿ«Öoey ™]åWvmUþÀôzõ•õ¿(¾ÿ×鯫oêWW_§”peý?ªü¿n««/³…©¯úÖŒô/#êü¿h«zæÆ©#=ÿÓ–ÿ—íÛŒ].Iu}Šÿ2¢üþ߆þ¢~­òAú§#ÿ/³×¢¿é5ø²zÆ¡õ•ñÔßÿóv“yžÎŸnŽ Ó¸Qõ§üúàÒúåÿíƒÖÿ³ —âŸ`ÿÙŶAñŸm¸ÿ”ÿ· Wæÿ›ùB®¬ÿÑ÷ÿÑÀ•õÛùÿ  ¢µV]àŒþÿÿÿÀ&‡ßÈrþ¿–œN£Á•ø·ÿgÛ¡ÊÃ5:\Ñßvþ_ÔÒ?:¤1ÿoò¾§ñŸPþ?piýòÿöAëÿÙ†KñO°ŠÿlõøïïkS’®Åÿ{Ÿ…ÂtIȯz >®Åÿ¿{WJõÿïûË} -sþ(ÛáZüoìé€|¡4Ë©Bqf[‚¡~øª÷~èëYUw“Ò¿žuH“ïÒØ2×â¿§{5Lä‹>¯¼e!,l鄉©’¿Åã‰| &=öþ}uÝ×rM“œgÿ?â¿l}±Ò™*mkBTúÎÊþÔðxœí}+¸ì(Öö’H,‰Ä"‘H$‰Ä"#‘X$‰ŒŒŒ,™QûœîžžéùÔÿÔˆZsé>U{× °.ï».Tæç}6žÚ³‘-Æ×F`‡£Ãp]Åkß…~Ãóbà ¶ О$Áwݓٱ„ÁñÍ|süñCo•›ÝA+Õq3¶¾lOàx@á(é0ða¹¯+?÷  ÜT,¤_¯7¸s\ÛÞϘ^Bl1)üCó•Ò+ÔkÛ(îFyN"8õ–dPCÌ_9ÈÒ>O0&l«4¸Im+þîënwîÛGrŰø™à»ø)/tih“f˜õÕ Ñ¸X†>ÊʨËEËÅòã)–Ô<,é6ös4ÅáÀÖ5›zàbð?¤¢Jðàö\<OM%O#(7ä6à:§= ªêýÓ‹YA£÷ƒH ¶«L s6›ÎMƒXêÈùBcX&ǘJ½te».Êöü¨Ï 3.je(”Ï?Ô?õèÉLÚjï³=€ÝÚ%wƒZˆizFTxô„$¯kPö8›E·mòø jAO™ñÔ×úÞ€«ž>~þ’†åÜàØ†‘ºéB9úµâ † Ö¤8U­«KCÃv´jbëL èåçC¼ï€y¯¡ ç;¤mj P.Ô —øãïDkñÂêwþ¡UÿE€3ôܨÁ”‘•’8xëUÀ…JÊü¹s£‰ž\„³èÉŸŽ+;}s­FãQ(KI­î÷¦XÝ›„ƨ ¹1 Ëúþ+Kú¨èdXŒ];JÄ£Žïcˆx$§DÑ×·Þž¢X`i× ì¨ëÑ@lÌûrn°m$¨Æ^×9΄ïzBGÏž Q=Ænfäk„Dêö¬e; <¨ýøaÓü>,µâ¢ž›jÆïk‡0BŸ[p(õâ$¿º‡Ç ‘ÛöÌpý4 nËËq`”XÆ“ù úvϵöèÙ.xõHnŒûorŸJ¾€Ï5¬ñÁàÿHàu©‰ñê뇗 fà§ í××a앆‰[Z:><ÇM@J£9óý¬â$Óq]¡}=H… kÐþ3ÆÊºã¯ù鲺t¿Q“=‚, 7ÆÇµß»ýìêçs Ä>ã¢3ø¶ïÞÜ6[¦Ñg•¨— RLت¨ù­?·( &wÝ.7C#~B{‚]¯Ó ×â—UÔW² 7™Ò1jk~‚e”cG»¿rËÇùÐãDØ.=ôËK´ÜîëÅ@ÝWÝDZMû0å€ãûíèä¼0Î\Úòxó®vÏqßNZ¢ >#Æ ƒ„ŒàBE— ™¥)•‚º&yØA}tå?Bûê Yìm(ÂWIpáɱò€ñ ¸|½2—+èýà\2·ö íÞ)lÜ8·ÖtlÁ@Z.B½€£ï•eñ…‹ƒRSßôƃm>d˜Iéþlþôò'N a†dÄ¢G3¹%†¼#«)?è¼Ï$sß _5=²íYÇBR#-k"qGP-Ðeþ"çf­ÁÂá%Ö©-Ï“37êÐäÌÈ8ÔM9™ÏŠŠ,¬èä_*n;H‚ÁúÆEBƱ†Öcl¿~øÎî±ç Ë[ƒŽ/saŸg¸IE2å,zÒ1Út:’kLÆÓçÎÁ¡ÍíÈ™壋G)æÔ{7ÊoðËÅnd¨ø¤è·ðá•{@rõP˜>ÆkÂwŒk×½¾¡ #¸kXfy‘ÖEÇ÷šÈA©ÍBÂ9ÂuM°ÛÞ4P=¹_Ól’ÆgW®Ø‡ÝN•Õ#–_n™‡Gï¤pp ,Z…ÿUu›6È“÷ÃV¦›Ó°¸å0EK‘7*|·ý]¯{ü75F\éÔ¶»úzQØ z!á‚Ç uH€>îÿó¦upš²ÚöõTÙ£»o3P)ˆø´[à^Õ6ãÖÚóã` -šd&á*=¶%ÄÀÊfY’<¿^’ƒØ·`_6¨ßÈ|h¸Ìë3Ø¡>€„2 Pºúqÿ×7ÏŽ³ ýÕü,Ns¾j»F™=BµŠü` ¨í³•C§òöiŽU’)Ré@LÅßÒ®„‹ÿ‰·Ç§mb<2FH“Rq°²ùF½åãø÷Xºi䎲õOm¬GAýÝ·ôÒ}:¶*¾Ëu ÄfØ:@Ê«RH™.òÙ6Âñ¼±Ã6Žjå§cæGOpO- ú­6HÒýúÜÊKÉJæÛUÀÎì:ºJǃ¾ŠýÉvÆ,¡•¸¯3ÿ‹DìZ‹¹EñÊÆ®ÒqqðìØ7p?¸ƒÈŒÞK¬÷Å%ȧ$;â¼?ýQ¬r6³pP7`¼a™†¸é^=„„ýÉRç¶_†õ™³)m£„Ç>ÀD3#£ ¼_' çIþÂÉ­uÍ‹CÁÊ-Rne㯄³²Ïóss•ÀîLÏÌ<È­/µàR)|Lt_1»éòÁ¨L¿kÇ=‹rr 4ùìê§ü/gýšEÀrþÀ~P†¦nBß[ ®\g[{¡«‡’g£ãYÛvRŸW'†‡ {Fe°m1ïÞŒ{ Ýw¾LÿÕ;7¨&$‘çþxúcÚøÃÐ0Ÿ ŽžnÝö‰óí&úÚuÅ@5sCèCÕ±mœñ8Hƒãefñï¹Æt ’Îx{q(a¿²ÛÑ‚a¡?€ŽÐþQ“%ò§ÌlÁ¬ö4ô‚¤Ï‚xmWI׆€Gí¯¦CèÒôì1ê’Ûk×QÖýŒ3iJhÜ,Çÿ€úãú‰KºšRˆ÷ÅÄð¢ÄÂÈöÈO`úÈç…ʲ»†½þ4á)ú%ˆùÔb6îB8ý\ ³pµõšÉì«e<êºíS鹂ØìÚ+ÓjsðÄpŒ„¸ß%<&t{3?Œ£¬|N)p7b™Ôîãé?Ôa¤iäDµWl’¡½ðˆX—ŸÀZÚ>;uø)¤ko)#WáÈÍSšn®cR½xô”{[ÀsXv1¤¬95‰_¬¬0KéõÁжՙ7Ú>žTp¡5‡‹¸Ù´¤l3¥Sü"ØêLXê…ç«[á5mö¡ø º¿Q="u}ö‘ÆpϘ*xböÕ‰ºîã—ã#iM+³ù@»Z! þ·Ï®~jàÒY”ݬ‘¡´Ò$?5Š• mtêuˆ] ‡%Ž@Ž÷Ý…:4h8Ûƒ¸˜¡»tuì3À;ú ΑO¤1A/r‹¿¾™ ÆÏR*5ÀÇûÿËìiÜ&j#Y2:º$Z(a­dæ@ß>'z ž„×L¬¯³¬Û뇶©½6ZÑÀ8|`Æ6Ý"åŒX1ß_€z' îF-©÷»Ñû?°úX^ò A:?1¢;ØÌh/KžVB'õ üvOnÏFSò‚¼É õƤê°ïÌÞQ{=kh7™ÀMå¯ÀwXQùpü\vïÍ“ÎO/ÿ¶.ÅöÚñ¹ ôN3·ÍHKRðÉlŠK–"›qò”‰^Wܳh¼1wtùã  h@§¬Ñ3ðe6þN|–’¶Á©‹I;yîó?8t[ƒ[é!‘ ú¥µ$,ήL­·e–"z¦å%IÞ†AêkÜÌRäl!3uú8àÚyßë?_žWÅé½)ƒAbCÒõéõOù!rz¿„a¢¤5S±ÍnÖ—£³ˆ#Â<ý43yÜ6"ª ÒRýêÑô߃C‚Qå¿&>¸[¼# BHÍǽß{v¡eà×kOÃ×TÉlq(UHð͵h »Ý”8º,@t°µöÈÃÕ‚LÛ{p´•ü‰/Ø*ËL"d_y ïŸk,4î GÌ–ýÑbD>,ÁÏ.ok"ýD;†|7–[.µDÖCíAœŸä#‰iÇæélÿü¯‰ÏŸ¡IÖ¬ÐòâóÞD¿q½]+ÞeE •ò–_«-- ™ƒ¦ Ú°c©›³èç€^ø¿¥Lô˜q±1~ëCßC“ÿ”øžC“9¡ŽgNäóýÿû“õHÈ8Bkhêç«JÁŽ#Z¤-`úVo§™MËa 9r$îÕºZ-¼hókhò ?C“$· û^–ñtÄ÷¿9d(‘8PÝ…]Ú¶š£×w[¢wléÏ;µŒd•Ôn—׆ôoÎK«èdù H¦Þ„(Dú¯…¯Ÿ¡InüIÌ Mïãü_(ù¼ðœ’îð5)6H/öõÌYÍ1‡¸ ±QRæŒk,nËÖûXH½­ʉð‘ƒÊË?>ÿšdf“ç&6³üü½^EJ–m‹ªétÞÈ{¥C—µ›½ÌC¬c`½îÙ0Ê…v5ÃÂx<äƒó\9Y·Ýÿcáû×Ðä}1Ú06"×´!ÖóŸë9êdl:'– û1H"Áz'7ùQ‡q›„¹Ž¾¹ÉŒí#KâR.ò/C“»VÖÜgÇQ×Ȭ¨åéãó\ âì`¸·?dÜÛ1y³”åuMÛ6Ƶ8ZX]8Ãø^p…ªwQëE¾ç &­1frRšÁKiûñçÐ$G¤ÎÓðÔÝœÛÇЕŒ¯ðh3'À®Âø”·“Ç{¼±š;;Ö~F öKî37Ðkš–Ìu<pöµdÊŽåèˆ+C¨š¤™ Rá‘÷Mz¹Æç¿7)nÒ€©æöÔ lEGyÍl½‡:Ì‘ÿIÞí’o±BìÞÿ—S%|ë‚ÎЕïsTuÆleÁõ’bšA}A¸ëæížÍ´þ1ãý0ÀA{ÉKù“ʘÓº¼tjÑòÇÐdLI=rž ¢PRgóûÇó_Lb¸R³£é Åžël?«â”ž)!°Ö[«‰FÂæoÖç wi&k^”CV(t@püW2Ó÷²ó{hÒxH—GRn²͉ŒeCbúxÔ‰°ªé6GÁ³©÷‘¬Q…Öd27\ÌØ«dœS‘É=\»F§f*¼0é‘Û£ÜOPúÇ5(r„Zß™xQ‘Z>¥~G AeN-õãùÿjYôÜ7—Ò¾n;ún?Ó¹"P·¯xÒ}‡·•/àNäöÞW:ÝŠ&´—×¾†Ù:x" ꭥу;†ÄRç펔¹ ®cä›…Ñ™õ±ñÜýüýElmG§a= hò¨BG_æu…³×YnZì«­FYs ôUéµ"zM&Ë:ËÝGn¸Ïuí.õDX‰ƒÉ5XnšÁ¡ö›;Þ}¶Ô«%XO?½~2&ùÝØî¸Frjj¢¢…8ˆ› yAÊÆä*±W ¡³‰€©ÒIÒ˜÷“9/¹§u‚b)õZ³l:ë sá¼¹ 8²5ÀÀJõš>~ÿi´œÐó˜I¿þ3YÏÔ•;ç:#hEL¬×[ROd‹Ê^GéšAË©fß~Y!ýËÐäEåêñn·ôü0¯~Åà/«AÝò –Kåm÷‚±>^ÿÝWY¢q†"µ¥â<цFвÎë*c¹½:xÛw„|¤Ížw­—%ýehRg°åØúæÜæd¿9ç´üÌ•ªËÃvž3Àv Dg™hç>>?ÿò3é‰hŸYDkgCã(ʹƒªÔ•ô×SÉ·†¬Ôœ|è 2QÁü94©(ñ½?OG•Q34… fëcc³¶PopT€Yaƒ–W(£>Çÿ@­tãX4ˆ`ðLG¦Ùžp•‹É„ãaïãšÅ°l\¤[9‚cû26óâU M6f,ºŠò¼Ë'›¤…žCÐÖñ4øi¥?W~p¯sÏ ?žÿk³ÞA÷×KÃrŵÄÅÎk@–Ið|>^xðs¸?ý\Õð`,DèäõÌ’©Œ°Žû5¯éWÛüÉ^£èøçw €DÓµMˆáøXf_8<%|8_왉pPó1†…ãî„WþÀlm߃˜“Šf?4žý¼»:½òÌ“_£Ô”v ûûMà;kž:pÍÖ²â_ÖùásjØŽqw]$F‡£}ÿ¢»y« ××û,b'Õè°N‡Îþ=Ôo¹öÖôÔ0, õ¨Çÿº»â~–ÆM‹ƒÄû Y•R´‰¥4â6+!”}@~u‡j°ctCÔúàõP.ÅY(ýxÿ׎ ½×zµ?70ÆWXFÜ£¾oŒ½·¯‹3z‹Š€0°®Ác8¨R£êG±¢g›0àö ¦T—Uëøò„½»‹w­"/4³ÞÖ÷¿¾îC¾Q`[{O³“ºcÈn¯]•¶+•{Û{­ç¼ÞÕÎ N!3•<®ÞÇVí‚ìyxé,!C æ™b². êlfÖ×åÁø'„ÒÁ\ ןÎÏíãëgu,μ·¸šw-/ôß3Û¥ùºñíN°íâX(›c ƒŽÓâoõMDð‘sÊ¢a·#ü#0{c ÁÈÀð%µuDWCB¥Z€AéÍZ6»,Øçûxý (Z%‡±µØçw€ÑÀáŠHbhTb2ùþ<$÷Æ*cÀ¼ænk÷³”_÷וð«Ð÷¿#{D+B<™!âÇüS/¼gÿÃ`ø9”­.^]ŸÃŸ™ÆCíÌ+>™ì3ïƒ+•ý5Æë]¤q‡„Äp¦j' r¯9µ¼FDȬ)~: ã躟—9GmÜì“x2’¥ù-?s–raG"yvU³pa;R«çãø÷ăœ ÌAŸ\&ú¹“ ÿ?#Äìn Ûí0Úee½´“d~o’qå¶­¯!!DzP^H)>¾oµëÈ‘.®Ä¼‘Ô¶=Hy»7´S´-M½ á?Þÿô8y£c¶Î™ß§q„|Ü#Þ5"ù2Б ‡lµm#—ýU‰ÑÊ»ìýeüΤÎV†ÎÈbMƒ¤Í˜÷jAÌc7¾Z ä]> 4½gbö Äýñõs 2WRsKgí6Þæç 's8qzñTT[”R›[wÄÍ)I‹—9ø5x¥ŽÜWjýÚ #”!nN+zP’ÄÚ”â ÁKgâ²ÁÞTEŒ,ÂÁùÇë?³¥{é^R¨DÝ¥=´R¥u^zîc¯’§³Ì¥&D¼‰'i74øSËJ½ß”í&H¥æU©Gà»[û‚ácrÃͦŠ<ú’‹¡׿~þ‰4}Ú…žíh¢°Î;¯üòlpAZð´%’XÔZ;t®Q?„±÷÷žóy™ïk1+Ƴu6Â[«©ÌÖè† áDõ™c4¿ÆœÚóÐÝ*d„•B#!}Þÿe>Çsamh¡¹ÿêG3c^çæ—8u9󼵕⸈߂ÏUéy‡‡B;f "Yi=ÖD§ =Êâ‚Á4‘íŠ&¡Ž’Þ×|¾Cý“Ò3»Ä÷šg]Ø~üþ›WgjhSIXU“‘"1A5Fr4×{üáÜëAä—éljŸw¸TðÎá–Ýt6<ï/NÁ  \û¤õó«R¥tÇû˜a| Æi¨ÌÍ>‰T.šWo>>ÿxŒ•ϯ¼Y¼æÈ{ç··m,J²{gg}Év~)ê]Ñæs!?wøè÷X›‰æè˜G—F°¥l!7ކUœÖ|Cnáfï³…:.@mq%®Á臔±ÜÿÓRu?.–:¯èaBë¼ÖºÌÌE#Gƒg'yX«Dåÿu‡SWºä™ÇŠD)Œ˜21×ѵ‰VµˆagW¬àP޳²q½ç«ÏÈ’Ï Ís”?¶•@åg")ªíªç©s\ÖTòâô{Þê«f3g÷‰oÑþÏ^w:^ë¼"•Ý{¹ªd#³!φtà}©,nÆyWFKv„X”4–ƒ|<ûB+ è®Â8ˆi=-;´³X 5l=/xlêóŽw•–å÷n³]ì à+SÛÓ¼,{Õž¯/ДâV¡û»+<< ØÌ¤®Ào ŸâÞçèÔ‡eNpù^Oÿþ¼ÙùŽOv qR¶ £wHF3ûÝß=oý;ü`~k’RÏwCßÏí²”u¦ãk¡jE˜|û‰qÏ©ŽÔ‚KV,Ï àÏ*?ÞÿþxkáÜ}QxÁU¹éœ/MÛüÞÄÂá= ¤Õ°pý¾Êæ=çŠÎ^xúBË÷ÞÚKx«§Ó@ð[òÎI™¾ÔYB]Tª¦âž™çÿúÑKqÉ.á½€PÖÛwÿ¼ÃÓAG\ôšWÂÏ‹Øâ9ùãÏ2S³—åA\è“Y\œßy=ǨðGj÷¾ÌéÇõÕ¢ÂMî@âŒtÔ‚¶„vD¾üƒzÎ+²ÙÌBĺ\·Ÿ¬ü¼ÃÕ¬…÷Ùë6ËÛk™6Lþ¸Ê¦ÚRß_rýnl|UAϯ< ¢¹Ë|¦²!‚¸;ºÁ8™_1ÜgésÞùÆCŸ‡ÿ¿ä >êVB‰~æ,¶¹® Ë˜_ÿ&f™äÕjpñ/WÙÔÊwaùO ¼š°H 3ÉÛûþ¾I`˜ÈòuØù»õ¸1êͤÉû·ÈÏ÷ÿå+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò€ÿÝš™w)¦÷mkBTúÎÊþ€ŒuxœíÜ1 ƒ@†Ñ½ÿ,<™dÂ… 2¶fæ}ð@Òþ*¤Xç<cÌx}ýM5[ßm¯U»ë3©~w;Û¾OöïYöŽ·¿$I’$I’$I’$I’$I’$IÒ{ÊÎû9R»¸o<lÿ^e÷ƒjçýß7ç@û–mlÿÚ=íkÿÚeß|ñI’¤Z}Ž/ÐÔ¶íôµþÔü£J @w:nUIDATxœíÝ{œå¹ðßd¤,—eÑ–v¥hA„zaÛzWÄŠÊE®*÷~ÐB –ª­G´­RµÚ‚P¯G,p\DA‹‚Š –•¶PÔSeQ¡¸^Êm—ev³Ifæü‘a2™k2“d6¿ïç’¼3óΛdóðäÍÌA–e|¾÷Ër[ÐbÿrUUˆˆÈ™~ýúá¤nÝB§ôø¶¬m/l¹Þ $×n˜œÙRJ-ªPo·¼ÈY QþZ_Y‰*@jy@hÉdÕ;eʤ,•Rµxñõ6.Qv¬¯¬TÞ4²,ã½÷Þ—«ªªð“ŸLÌöøÈ#Ï>ûÛ|µ¾²7Ü0Ÿïý2¯ö+4V(|ï½÷QUU…É“ÇC–¥l<2yòx@EÅó-QF]>p ÖWVýú¡€ ²œ0W‹s&>¿Ñ¶£Ú&·+9¾Â Öß:ïRFKi™4i–,yUÈ­¬v}e%.80ÛÃÈyŸ--œ:a‹ÍšÁ³oçíˆتÞ›› 66¡¨÷@œÜk®Ú¾síåèuÕzW}ÿiþ}ŽÖûùÌßúÝ\XUU… ÆB’ƒ¬|♸~t´-¡]í۠脊ڄСmŠN(@Iû`ä}“¶§Ü1aÂXÀÒ¥Ër&«Uþ§÷3ÐVWõ ä>>[ZŽËîÚ·ßÛó¾›>ÚëxÝ ÏìáÙ~«·_ z—Bî;¡nWAŽ†Ø¸±ú½j>Á¿¶_²¾Ë±síåøñ´wñ×çº´ÌÆrùm3§úÚò7^$g± ü/.ړЦd²K¯¼G÷‰8ØÒ¾à4à“× púÐíŽMîÍúïéêízÜñ2­ñã¯ÇóÏ/ω@«°^ÜêêÝ8ïüsñÎæw=ëÓŒ²/í¿+úãò{vDQÆÎŠxFÛk²÷íÙ/²]gkåFO÷YØß —ÿ ×t¼ýÚõ~4*bûkÐwØOÇá„Ó`l&d ²ÐYWìÂøŸ>™ÔþÁs'áè¾ö8Ìt¥å¥¯€Øéؼx >}½/zæñµ~QþG½mæT<ð`|:çîY3Ú^K­qc¯Ã Ë^̉@«P¬WV °™äe ýxá9¸|ú½6.ûùb@ã°iQœqÃûiïCï%±]祯ö®½ú¼´÷×x ‡w‚}ŠPýÒ±ýˆÔnAøÀ(ýö=X¹â. ¿y%@nÚ‹«nˆoÕ“¡ÿµÎ~ºÁQ‘nF\’Í^Û–£þ Q½/ ¯ÿʺ ì­zåß±eŸq_:%Ü?zô:t(ÂÑ£ÇÖQÚ•uôËìúÌí83µO½Gæ?£¾°ú?»×®¿~ –/ÿKV­LµÕ‹@[]½?:÷¤øßk]ÍÓuÝDeZ@/Þ< {h£18ö5 ´Ohoß¹;.¼n2>\w1Êý#­}býv4×~€^Ùˆj¬ÂɃ^GŸÞ„¸ù ¢‘6I}uìØ GÚ”uôëjï[-ShûíС(i?~hh8j:~?;>n›9U ªúàzÛÌ©˜}ÿ|ÇcºîºÑxñÅY ´F5@[]½åågCŒÅŽ÷7h¤éú[¶lu­3ãÄv/íY?ÛŠ×; C' C¨K/¼úxüK ¡†¡}—^8°³eƒRîÞÒI'øÓ¯©H{ MróûkîÆ“ÞEå‚rÈ{nŠaà´`~ùâÓúKCø€ú/Dô+…Cë^×OMÇîgžÁÎ%¢g±Ý*ôý˜õ¯oWî@ý‘tìØÁ²³í•KÇŽÔ‹Q›¶Ýl}£vå€eÿÚ6£kýr'—ûfÏ3ührÛÌ©¸oö<Çý(—kÇŒBUUö8àÑŸ“sÚ@º¾²R½šÃ_\¨®Þ³Î:±XÄñÅh¤Ùñ¥¼ülÓÌשòb峯B:¼±˜Œòâå~Ô¿C-C‚õ%ÓNÛ‚EOÍl€Ôé‚äì§1Ò@nEéàå:vG›.Ë!W¯ƒøæv숴MÚNßW]]=:uî˜p_Û^WWââN¨««W·Õ_›QߦÜWúS(ûÑî_Ûn¶¾¾]?.e™$Ë–ûTn=.³ÇæVª}Œ=+V¼’±ŒVHµôU{ßiV‹º œn„›üû”ôÙÒrõ-í![çþâ#¬˜ó}u½óZî_pÇ6߯Rà[Ïɶî=Ø »ZZNn¹œ‡‚3¯>{0|æßðÙ§o¨Ûu?upG™>Ó/¾Ž†ã4Ú\!jÏ·,ÓjjlgØ×áÚ#êíââN ÷õY¬rûpí‘„uú-.î”°í:ÚefûqÒ®¯“mô÷µcÓ>®.%“Æmeö}·NÂ+s´¿ùí\ƒ­ì9/¿²2#Ö,K5Ë\ز²žØþñ.ôîU–ÖøÌ¸ ²ŸíÙçxº@{˜–h/¼ã#lšs&N°%) ú` xÈݦËêV?à龎‰®äìË©“º÷¼µÎúK¨\Ô2'›üñãXK& r›¨ãœ5¦]G¹mÔf¶\Q[sPRÚ%i¹²Ì®«v¥.%ú´ëËÉØ­–ùÝì_&Xý_J ýõoþè¨?½‘#®Á++_ÍÊ­W‡n••õÄŽ»qêwOVÛþ¹ño8©»ñq¦NaYYO|¶Çøãÿþ¯và‡?:>/[ýUëùØH´N_€M—«måÅ–çÊ3~±5`ñQUø2ìÏ>çWĘ9ù"̯Øhx­¬×÷d«žüáÉ!\F5›¢ñL6Ü\hšÉ†› îGc…Ž>¶*ë:T‹’Ò.8t¨Öpj@Yn6F£~ôË k×u™ÙGu«ð‡Õ¢k×Ëé 7}›=n§n›9wÿúêmmðMgêaøðaXµê5ß­>¨ê§ ÌÖsB ˆ=¾S 8©{oO«rôY °ïâÓqáôñûáwЮ¸ÊÇÜŒmk.Àw®þ§û>STà´ö¶«y¢)|büº9†»¦Pok¯ëjkpïüU¸wæpÔÕÖ ©øÄÌ ®…G)˜NDb…¸éÎÇ0Î2Ù5~=û×$õub·Ò„û$¯cwßIÛÁ5èÚµÔ¨·öiÔn¶¾vìÚ>ôÛØíÓl:Àé4BùuÖÝ«Ûκûá„ÿiÝö©wͰ¡xõµ×3žÑ¦òe—™²²žØ[½eÝ‹=éωTì©¶ rá98á§@q„eíFÃ×MМöD!äûîTÍ‘fÀ]S¨´ùX|jN¹€{gǽóW%l$¦‡p;=^`äo³ÿ`šÉ6‡ÛâýÊ÷pìÃ}èÙ¿Ý/y7©¯û%Ü7Z®m3ºïd;}›v¿Fý9i7kÓ/wº¾¢ÛI] Û­Ü5ë!ÃqÛ-KŰ¡CðÚë«sê„·ÊÊz¦ý ¿S)g°-θá¬~ü,@Ž:íV ¼«+V¡|ÆGÞ Ô€rª¬r¢A¦bìiC^Äúwÿ¸óÁçÔö{gÇ>‡‡gÅ+656$´7ˆ24Bïħ $óyÁÞç7à­U•¸æWcÚW~XŠÞç7 Û¥“€Kã5h­úɹ2Æ\‡™!ƒ¯Æê7Öd¬°ŒWY¬–Ÿ5 ¼ÞGùôÿœó} ¼/?³Ò÷/¹ôÞXò¼a¿šç”€jt_{Ñò•—WlOF8qàN½°â›Úû]Ò€îÌèùéúÏ×ûsb¼¹2;ƒ¯¾ ðÆšµÎjƒ&Ö‹SeÝ 7Ÿ€'+Ö¸Ü*ÓgK¤Ïô‹/­ÒËvàÒË’Û½8¾“rßUW]‰µkßô-«eÉÃã2\³iÈ%ß·_©.|V¾rOçèQ«óæºuêí\ªOK”‹,KtÅêíuo½¥æ.‘1Û/¾ˆÌüøòËÕÛ]¿,rI”Œ™,y‚óªDÉÖWVfì°8"¢¼”p^ì)=¾­qå„õ_c_íQ¼¹zz}¯âô Î8 h¯e`ÇÎ=|ÍÅh_xüÜä¤-}ôΫ#ýò  °RL†Ž"z4†ÎgŸ†ó® ÞAÆDÔ:U®{Wº}úœæj»S?Ù…Êu›1tðñc^3d7¼t .:å0¤ÞßEA1›"zä}DW#T½^º®ý{¦†CDdÉm€U¶©|{sB[ÆædÛ•â¥ÕEã‚Gþ±ß¶AÈLivý~RÙ¯›m2õ¸‚Æç%ȯ¥_}[õ›ïÏWL]]ŒXf²+–/°Äèë§9쑯Cøô5ºœßmÃ!ÖíCÓןâØç‡Q°­:§~ö‡  GHèï…ŸãN÷9 êsš-™|-[ƒl<&'ûl;¯¥ …EÉ¿-a;]`Da…,ú޶]ˆ‚vç T|:¢ }5BE_ÿ縫V+“dn÷ÕÚÞÔ~ãóåN6ž/'û ‡“ÒhôÈ¡XñÊë†ëµKjËØtArJÚoìÁÙ“,‚z1j7º¯ÝÆn*À.ãÓ÷cÕŸÝXͶµ¯Ùcµûxd6n£ý™];ÝŸÙ8ì[iOåy·{î‚úZš]¿¯TŸ³ÇÜž/«}ÙijŠ$\F hõËššŒc.sAV ¢2€d’eY½hŸ$¥Íî¾~;wAHè'•±:íÃé¶ú6«Çf´O«ñèßdNÇo5&ý¿“ç‹çÝ>séµ4z­œŽÅIA¾RÕØÔ¬^&Ž•°lâøQ Ë›Œ Š; ²úÿ]ôF™6Ð_'ö¡o‘JõšÛ)~¼éîßIf™ «7œ×}ÚÑïÓè ˜nŸ™æåk™îÇm'Ïakz¾œ ‡c‡c˜vã8µíÑ'–¨·§Ý8N]'Žöá(Èjÿ·0ú_H™·Õ_'ìHÐîNn¹}|’¸  û׎öÌlüÁ™íßêµÉÔ‚¶O¾–Éãq’9çÛóFqë-“Ôûsç/B4ÅÜù‹Ô¶[o™„h4ŠhÔøK² žV+àø÷lbË® gA*0™üãw»ýGóL!o<ý>•7]:¯GP^ËLpò‘;ßž/Y–1gÞBÀœy ºQ»‘Œžñ%KÊIhâYlòá)õ«ùãÐÏÏhço´ë1šè×ß×÷a7ïg·¾“äVÁiFÏ‰ÝøŽËj_nÖÓîÃîyw+ȯ¥~ìf¯¥Ñr·Ìún-ÏWª”€ê´]Ë6Ⱥ9LËNݶm(ìX¶íê!ÖÕ¢é«8öù!lkÀ‘šäCôŒ2'ËŒîÛµ»Y×ìÝi?Ú?šTútÚnÖ¿Ñ›ÉÉîËi›Ù!•çÒnÛ ½–Vë¥ò\›U¹o4ît¼¹þ|¹Ý6]–AÖé‰N”œq°ÿSÓåMý‹<Û¹ãE¦Ä}eBƦ ʇ¿„w^ÿ¼_áƒÝe R¤R¤3¤ÓÛáÚÉ|ÛwªÿÛeëMŸéýf3¸e*Ãòk™±óùòNFçdYi‹ˆ‚b÷žjtêÔÞ~EÝ6z ²Z+–/ðt:‚ˆÈ+cÇŽÂâÅKQRRâj»ššZŒ›0bs£Ú–µ ËKD¹ªKq[´iÓßúfפe¢(¡ Àøè׆†£(:!ŒzÍÉ_Ìd‰ˆtžúŸetÅE®kÊžrÊ.<¿l}vŠvë¥`7Î97áþEw¼ëÅpˆˆôésÂᎠĖz±‘ÈñSh›#D""$I‚ èNrÑîŒY/jÓ¾<ã{õØ¿mÛüæä¤…\û†“ˆÒ£¾£eýñÜÖïõŒf²éÔ¦Ýøà¹rÏhÞÿ4Âua„Ãa„ëêÐ÷ÇC±ñÁs“Ö¿hVö2\X¢V¨%¸Êº2­ñêWæïù¬M¸ÍöšÚ hw2 =?¬Ç€± ën|âæ”Ç¤°;×ì´]ål»³fÌ–ñà|¢Ü¤”k$ÖZ±yŸf-ȺÞçhÕêµ®»7 úVÓ©œ¾© ¾F—Ó D­Oƃ¬Q•(m`QŽ:Ð_‡ \—Ð×êGçî£sig¼|ûÙêýQs·:›Q Í$Z¢Ö%ãAÖ¬RŽÂ¬6msCsB]½`1†Üz“å¾êêê°©â×ãÒÞÏdÀ3åYw ÀIÖÀL„#Í@<ŸÅê/`È´qI™­V]ØTñ‚ekèíÊ·e"ðyQšˆrCÖ‚¬Û`¥d²«+Ö`Èä‘@8lºnÚÙX=7õ*õ57Íjpš1 ¢üÒ‹¨õÉhM§6푆XK€½JFk¤Åެ] K7íF}9­çÊé¢Ü§«— È‘C¸Ò=…v抯±øg§ãù'_±]wÊÓæuks³V¢ü¨ÚAžN1°å‡ þb"‡!¢@ô7­¦¬Y/;Œˆ(W1“%"ò3Y""GâE  ~¨,ÄKÅØÓž·õd½:±€§Á‘Ö“ÕaÐ$"½ÒÒN†íÛ?NþáD=Ö“%"²QSSŠå« — ¸àBËm󺞬“Z±úuxvQþ)-í„_Ü<)©}ûÇŸ#-· L?êɺ­«]‡Ó Dù#P™l.ד%"2¨L6WëÉ™±Îd/°Ü60Ó~Ô“%"rÂ:“YnËz²ãâ—[D¤˜L6—êÉ:­õjw›˜(?Œ= ‰DÑÜ4G¢ˆDE°ž,Q–°ž,‘W»€ˆ(A92 ‰?Rk3eÈ*\DD>b=Y""1“%"rBÖ\TÖµdÎÉzUO–ˆ(ò¶ž, ¼Q&äm=YX"rCn™ÐGŽøÒäÀÉzÙ®'«/[¨pÚ¦m7[Ÿˆ(0bü¨' {}›Y­Y¥SDd†õd=Â@K”'ýMë÷=ëÉz@?À`KDŠÀL¡ž¬þ7Áˆˆò¾ž¬Ñ%µYá—^Dù@8þ¯||¢@rèè‚\­'k´±¦,QQßïºO«6oÖ“%"rC 8O¬XO–ˆÈÀî=Õhhl× …B…Bê6z«]@Dä·qF`ÑŸ—¡¤¤Ä`© ÃÂ0PWwS&F}ýñà¨L–ˆÈoMÍßÀ íL¹qt¬pL½Ïz²DD>b=Y""nN–õd‰(Hòºž,`\IËìÌ-«v«~Íö­ïÓ¬øŒÕþˆ(·åm=Y'¬NHH§ ŒÛÊ] ªDÁ•·õdÄ`g•9:¥¯Qëæñ±d"Që˜1~Õ“µ’+5 ¬Š…QnËûz²V¤WÁÌi°6 ƒ*Qp±ž¬G”@ªÿOD©êEDù)0Ó~Ö“õ*ýŒM*}°&-Që‘÷õd­ø5ªÍz™åµn¬'kÒnüœÌ›ÚíÃÉ}a¢`c=Y""ª ƒ' «pùˆU¸ˆˆ|ÄL–ˆÈGÌd‰ˆ|Äz²DD>ÊÛz²DD™Àz²DD>Êëz²F¿P ¯„•+å‰(˜S Æëz²fA>ÂÛDDzy]O–µ[‰Èoy[OV?ÀàJD~Ìt_õdY¿•ˆü”·õd|¡¥ÀÌv‰È-Ö“M¡ˆÈ)Ö“%"òëÉùˆU¸ˆˆ|Ä*\DD> \® k¶\>àê;SꗈȚ“Qáâ+n3\öïµ3°aÍà ´D”37'+ŠæCn[TŠn±Ïm³]§rå$…\¹¸9Ù˜TY†z‘d¹å:dÛ•âÄØ^¬Ye\× Ò ªúmAHº-ózD¸L6*@”eˆ²Œs†ÿw<´¢ÜñÐB\}ï.t¿ð^ôô8bR`ÎöŒYP”e9᢬«m3 ÎD”¾Àe²ÑX!$ $“F @åæ Ê2*7„I#@’dˆ’Œ¨Xàºo«ÌÎl™“ Ñ,“tÒ¯“±)¼:;%‰¼¸L6"@”QpóÄá€Ç+Vnž8¼e™û «ÏìôŒ²>£mÌú1ËíÚíÖsúØôZéG¹°†.‘?²žÉ:½VDb[²UQ&€%+7`Òˆ 푘ûLÖŠUÆi´nºýzE?U`ö„QÖ¬Ü&¢Ôe=“uz­ˆŠ…š`*«vÉÊ %Am÷rNÖ.;Õ%£6·ýf“~<¹2.¢ Êz&ëV<È¢üyÙ«€)× üyÙ*u™“LÖ«,-—«w1%Ê®¬g²nEÅøt$KVnÀÀóÏ„( xþ™ñlVV2YwÓú9J'ËÌæ4õmfífý:Í„õŒ>â›Í½šµ‘·‚wÆ—XIk+æBI’pçÍ“ñ«›âÓG_|Ùý¾—~jÀn{³¶tÛþ™WíN—‘½ÀÕ.ˆÊ!ˆÚ ±å¦, d@È–g†eJà2YI á…×@ ˆ_!@h ²P äNeFH”¿—ÉÞuËHGBDäŸÀ]@D$ËdYO–ˆ‚$ps²¬'KDA¸ãd3YO–ˆ(]›“Íåz²©œ]åäÔÛTªwñL/¢Ü¸L6—ëÉz}¨–Y·íD”=Ëdýª'kõëÚkýºú6«uœn«àñµDÁ¸LÖ¯z²€yÍV£z«úõôu œÖŸÕî× ëSÖ3Ù Ô“M%ˆy97jTlÆ,ÐsN–(·d=“ B=ÙTý®V*Üfª¹VŸ–(ße=“u+ëÉúµŸt¦8@”²žÉºåW=YÀ¼¬–“ùP§5\õmvc2›0ª[ËK”‚wÆWëɺisºŽ5hS݆ˆ2/pµ rµž,³G"2¸LÖ¯z²éHX"2¸L–õd‰ÈOß8¡ ûjâÍÕ›Ðë{=ÏŸ ¦ù $x-×2°cç ¾æb´/l¯®¸L–ˆÈo•ëÞÅ•ƒ.FŸ>§¹ÚîÔOv¡rÝf |™Ú¸LvõŸ.±\>äçO©_""-·VÙ¦òíÍ mÌd¯¸ùmÃö¯Õº„–ˆ<EWë$Õ¸ãdc²PêP{i[TŠïöìg›íZÉõüꇈ’5‡£®.FwÆWL A’eËRO¶GϾX1÷2ûÎ|”ÎY^™ƒ›:´ 䔯Âራ‹‘ÀÍÉF¥b"Ðñ÷#|´Gkëq¬¦¥Ë*Pzætu½m;®ôj¨ä6À ±ë‡¨µkjŠΉãGá¹ç_NZnÖ®¸L6* ùå=h¾ïA´yìq?_¡Ö,P.QÑ>8xñ«Fëè×OuÿFë8­°evÜ®ÑI©œYF”›š1qü(ñ€ÚØÔ¬^ŒÚnN6*† Š2ÖnÚŽÖü s–¼Ûç­‚(ɘrß2µ WÔÁ_fõc½úÕ»jXvû×ß׎!• ÓÉYi}EÜ:îRü~Æ0ˆ’Œ§ï¾N ²‘42ÙÖLŸë—1ÀFF1wþ"µíÖ[&©·çÎ_¤®æØ_©Ö“ˆ!Ä$àÄy¢ãì{ JÀÓkñ_¿­Àyç/uh“ÉšýJAk¦¼fó°D§}ÏÌ™·0aÙœy ÕÜq²Q)I¾š1+Þ SÆ_…)-ËE)~“²öÿ‡©\ d¹:.¢\3gÞBÜñ‹“®•à] † J2¶í[Šƒø¼þvÕƮÇQ]›²€}&k5¯©Ÿ5Z߬ݨ·¿lÊvzú¹d§ëkÇ‘J?D­› 0“‰$8£ÛÃåj&ë`NÖm­X·5\­¾ÅwºÌîvªue­Æâ¦"²¼L¶åw¼ì8 ²DD~ \&+J!,ž;€ YV>Î*Y]¼Æ,dñâcDD©Ù½§:µ·_Q·^à2Ùûç¼âñHˆˆ; ‹/EII‰«íjjj1nˆÍj[Bý|ï—ÞŒˆ(ÐãÚуSÚR`,'KD” `}ee¶ÇADÔ*ý?# šÄy•IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/svn-properties-view.jpg000066400000000000000000001072141203611042400331240ustar00rootroot00000000000000ÿØÿàJFIF,,ÿÛC    $.' ",#(7),01444'9=82<.342ÿÛC  2!!22222222222222222222222222222222222222222222222222ÿÀ ´"ÿÄ ÿĵ}!1AQa"q2‘¡#B±ÁRÑð$3br‚ %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyzƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚáâãäåæçèéêñòóôõö÷øùúÿÄ ÿĵw!1AQaq"2B‘¡±Á #3RðbrÑ $4á%ñ&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz‚ƒ„…†‡ˆ‰Š’“”•–—˜™š¢£¤¥¦§¨©ª²³´µ¶·¸¹ºÂÃÄÅÆÇÈÉÊÒÓÔÕÖרÙÚâãäåæçèéêòóôõö÷øùúÿÚ ?ô K;[›('žÞe–5ww@K3ß· ì8©¿³l?çÊÛþý/øW-©™$¼ðý¸ƒTº…´é¤x4ûÃnÄ©·Ã1ó aŒŸ½Ó¸}¶³¯ÚÚÝÅzÖÍe5­™C%Ä«nÈU¦cÜ“nZ,Ê:ìÛ?Ðí‡=|¥ÿ?þºOìË ÿǰÿ¶Jk’Z½ïŒ!µŽîÆ;Ënà’v´vŽU"ÎN#óAS‰å›îŸQ¶Ž›â]RêævÒ4ý×”«zëµfòÔYÙü¸y"Ï2›woºs•,ÇtwÙ¶þ\­¿ïÒÿ…Ù–óãmÿ~—ü+–´ñ³¨Üİ:¹¹ŽÖ$òÚàÄÆÍnY‹¬€J¿y6õ ¸ãΗâKíFûL’â°²Ô!ŽKdxZcpZ5±*°•äaÐnØJžp¥˜]öº}“\^gnBÌæ%àyhxãÖ¬ÿfØÏ•·ýú_ð¢×?i¾çÎtÿ–i\œw·ÚmÖ©¥i/sut/ó7Ý0€[À_æ–dÀß*ÿ#qÂõ ³ £¬þͰÿŸ+oûô¿áGöm‡è6ß÷é¹û_ê `«d‘ͨ¥µÕ°ÚÍÛº—{pK)W– ýóŠgÅú’Ü…ÈÖ—ê²i÷2B¨»x¢W*%fq‹„l8Æ~RÌ.޳û2ÀË•¿ã Š?³,?çÊÛþý/øW%¦]kø‡UÒ£¹°³]É<—-jÆ6ß÷ék²ÖµÛÛ¤ÒäŽÒÎüåš5ŒCÁŽ9ˆF?hd8 œ|ãŸð_iUãiÖæçìW÷w±ùJvÇö¹¶üÍ*lÏ—'!d#ÛÓqfGký›aÿ>Vß÷éÂìÛùò¶ÿ¿KþÏ{U“L¸™c¶ûL·óYéÐà •¥òäÁ¤A‘“‚Ê>RrwÿÛÚ½Ôíûº@¶zC™­x-,r^G”d—÷D˜8,p‹0º;ìÛùò¶ÿ¿KþfØÏ•·ýú_ð®[SñV§a§\êh¶le½·‚‰·¤–é9ï¸V6íò…Só“·Ý2òøj·zf£%´ÓA 3¬ÐDЂ²4‹´«3œ(Û¹ÝÓ¹,Âè~Ÿ§Ù>›hïgnÌaBXĤ“íV³l?çÊÛþý/øW'â«Ë›}ÂÖö÷@—Ú•¬æ(ïYC)ܽÝ öõ«:•寇¬h~Ò‡Õ¤ÚæþYo<¡aˆœ1Ïï0x$ÑfGGý›aÿ>Vß÷éÂìÛùò¶ÿ¿KþæöuÝVÌOknSA›T‘d‰åÝ$R¼eFv†Û‘œ‘œsÖ´“Çz”šîÍöv—ªGjÖ÷l×++Ê»Š×Ë=|¬r7¢Ì.Žßû2Ãþ|mý²_óÿê¤þͰÿŸ+oÂ%ÿ ó ßjz·…ãk˜-®»§jžTQ£,–ÞJ1Ÿ$I9¯nÀŠ›Añ_‰d´·Ó4="Èô½;N2+Q$JÇ.d]Ÿ.@Â?+Î(³ £ÐO²œ ,íö˜d$yK‚ALv÷5gû6Ãþ|­¿ïÒÿ… j¶û²?s(çâ5²ÛMñ^±{sw|¶Ö–^2½äïeÚãÌo/qaÑŒ,ÂèßþͰãýÛþý/øQý™`?åÊßñ…Erñkþ%ÍÕœš^.á0ÈÒýNÈ_ͼ„̘1c û¾~íÃÁ£k—/}ª=”pÝ}¦E¹…ØVõþãÜNÆo½óœ…ù™ 0º:mGO²M2íÒÎÝYar¬"PA yUŸìË ÿÇ•·ýú_ð¬›=BâÿÃú§ÚæGº€IÈ,ÚØÄÞXm…YÜ7gr±RÆz™õý>þøÀm|qîó-þÝ-¦âqµüØn0ÃoC»=TY…Ñû6Ãþ|­¿ïÒÿ…Ù¶óåmÿ~—ü+“ÓüU¨^\[6ÁŽŒk–æDÜ|Øâ`ZW›và%_—c–+€ß9Ã%ñ†®³)·²Š[{ß.m:YãòRHšâù+$ÊΧqT+¸rB–atuÿÙšSemŒÏ%ûPtËœØÛ9ˆ ËÖ¹m~ïR¼ð÷Š"ií½”öó¨·mÓHmD›•·ádi ~SÏ6ß÷é™%…‚…U°·iíDX”–o@?^Ã’@Óµ7’=>f…¶¾ÍŒíà¶'°ª E·Ÿe1©$rçq$ñ"«’ ƒœ É•Z¼š-ËQ,ZA¦^[¤‰gh¨fŒ"’‡¸<”ëÛm6ÆÆâî[Z;xšGT…r@àgñëT¬àu+`×q$q¤¾òÀ0Üy ±Î;`à ÖÜ‘¤Ñ}Ñ?øå–úeí„‘Ø@±OÊ¡âPB°Ï=»Žÿ'ü#º'ýôÿüOð­£HcH¡UEA€  Ðv­I9—ÕôEšX³­CE+ÂwÏiRTü(aÈ )ô^)e·°·Q¾Yâ)v«d23)aÐûVžƒâ /K{K¸ï’e»ºb«§Îã <Œ¸`„<‚Òáo5=^î4˜C5Ú´Fh^2ÀAäõR:vª¶‚bÌÖ¿1'l’ ÉɹQ“Üàh¤ÓÿãÙ¿ë´ßú1¨©Švzp³²’K‹AGQ´ç¡­\#!JOc:];“[Am-ž‹$nòbx¢+ã–Ú: žN:Ô÷qxvþ'Šñ4»ˆÞA3¬Ë†p»Cz¶Þ3×U«Ý;T¦Ó¯-îâV(Ïo(‘C`dq¨ê Ak¬è—É#Ùê¶7 "9Šé+;m@H‡ž €^]ˆãºÓg:„7’A4˜d‘Ñ•ÔÆ ‚ äEFöž—OO’ßH{(›|vÌ‘ѹä/@y?™õ«qjzLÐÁ,Z…›Å7ú©pUðÁ>^p~f Çr^´´ßhú•½å½ÌBÞ[v¸wyÓ÷YîDƒ<;‘‘’Р˱r)´x<Ÿ*[üˆü¨¶2-8ùWÐ|«Àãå•Um<2“ÜΖúBÍt®—ˆ4Êÿx9þ {ƒÖ¬>³¢E§Å~ú’ÙJÛ#¹7(#fç€Å°O ëŒâ Ôõ‹};TÓ,?Ñ–[æb†âãËRªÈ¤/Rî|Áµ8Î#–€^]ˆÿ³¼)ö/±}Eû'™çyT^^ücvÞ›±Æzâ­9Ð¥ÔbÔéÏ}ìŠå¼³"x ÔOæjHµ=&i&Ž-BÑÞ )U.ŒnÍ´+`ðŸ yÎGd,j‘ƒ•€öm/té5 4èîíÞöÜöÂQæ*ñ‚W9ŸÏž¾&Ð$¾³¶‹R´”]ïX¥Žá lêc<îåϘ¤(äŒûQhåØ{ÚxfM>==àÒÊ&ß¹HŒhÜò ?3~gÖ’êÓÃÑÇ徑p‘³º,É…g;œ€z<ŸSÖ—S×4ýS´´Ôf·´Šæ ¥ÜÜ”24c`Î2O˜{çäúšSâ;ÍBÖâúÞÚ[xždŒ…eBýÜÈ«“Žs׌–€^]‰f:Íœ–s:[Y»Âþ[#±mä•<Xîϯ5´ðÈ‚¾"dH£ÙØÖ@C…ƒA®y¥º×4Ø­üËK‹kÆÚÆé à”YäUW8ÏpÃÔÄkyIž˜üh´;…åØÌh¼:÷WNš[\\ÄažR±—–2*Ç«.µkÊOOÖ)=?Z-áyv0†‘àõà~„!vWhÄíf€Hî@fÇÔúÕÛƒ¡]Á<'Nš+†4ryl²°Àõ *òº=+CÊOOÖ)=?Z-áyv2f“H²Ðî,ì$±‚%†A0”E‚xŽIýiÚ„^Õ¼±¨¦—yågËûJÇ&Ìã8Ýœgò©å'§ëG”žŸ­‡p¼»ò ]B=BC§=ìK¶;–ò̈¼ð¨ŸÌÔ iáˆî从ßHK™[|“*DÛp|–êNà> µ¯å'§ëG”žŸ­‡p¼»wQxvöè\ÝÇ¥Ü\Ì>l«¾Â+“ÎÒ†:r}jÒÞii3N.¬ÖWP&õ”@'¸˜î}j×”žŸ­Rz~´ZÁ9v9…´óæžâ=¤<²sÀ‚Ä~9Τû-ߟ盛‰&¨g•”£“Åt~Rz~´yIéú×TkÓM;jsÊŒÚh寖@Æùÿõ šK[™ H%šg†¯3Ÿho^ánæs: ¢C!, ={ŸÌÔRXK)&FwË;‰9cŒŸ©ÀÏÒº_)=?Z<¤ôýhúÕ>Áõy÷9ó á˜Lnn ªKóàHœýAHm®ŒrFg˜Ç+o‘wœ;uÉÏšè|¤ôýhò“Óõ£ëTûÕçÜåÿ²@làp8¨“A‚8š(í£HÛï* ýEu¾Rz~´yIéúÓxºot 4r‘è±Â‚8¡TEä*.þë_I»´µÓ’ n GFpU¤PGÎqéÚµ<¤ôýhò“Óõ¬kV…D‘¥*sƒ¹ö•‡üÿ[ßÕÿ?´¬?çúÛþþ¯øÔþRz~´yIéú×=©÷6¼»iXÏõ·ýý_ñ£ûJÃþ­¿ïêÿOå'§ëG”žŸ­§Ü/.ÄÚVóýmÿWühþÒ°ÿŸëoûú¿ãSùIéúÑå'§ëE©÷ ˱ö•‡üÿ[ßÕÿ?´¬?çúÛþþ¯øÔþRz~´yIéúÑj}ÂòìAý¥aÿ?Öß÷õÆí+ùþ¶ÿ¿«þ5?”žŸ­Rz~´ZŸp¼»iXÏõ·ýý_ñ£ûJÃþ­¿ïêÿOå'§ëG”žŸ­§Ü/.ÄÚVóýmÿWühþÒ°ÿŸëoûú¿ãSùIéúÑå'§ëE©÷ ˱ö•‡üÿ[ßÕÿ?´¬?çúÛþþ¯øÔþRz~´yIéúÑj}ÂòìAý¥aÿ?Öß÷õÆí+ùþ¶ÿ¿«þ5?”žŸ­Rz~´ZŸp¼»iXÏõ·ýý_ñ£ûJÃþ­¿ïêÿOå'§ëG”žŸ­§Ü/.ÄÚVóýmÿWühþÒ°ÿŸëoûú¿ãSùIéúÑå'§ëE©÷ ˱ö•‡üÿ[ßÕÿ?´¬?çúÛþþ¯øÔþRz~´yIéúÑj}ÂòìAý¥aÿ?Öß÷õÆí+ùþ¶ÿ¿«þ5?”žŸ­Rz~´­O¸^DR°#öØC*ÿPTÒWQ{¥½¶Te@aYP²“‡ny##é·×­å'§ëG”žŸ­)BŒ·”Ñö‡é¶Ã§jñÇÖí+ùþ¶ÿ¿«þ5?”žŸ­Rz~µ^çV+˱ö•‡üÿ[ßÕÿ?´¬?çúÛþþ¯øÔþRz~´yIéúÑjayö þÒ°ÿŸëoûú¿ãAÔì?n¶öÕj)=?ZF’8õ¦”²)i¬¯h̤3JAÿxÔRiŸñæë´¿ú1¨¨vNÀ¤Î~óH¹Ö4«Ha°ÓØ‹`!Ô%”‰ìÝ€dK埙p¬õäuv«áI/SXH¥ŒCsi0´…Üùq\L…$} `•XÎf›9ÝZÚu­Æ™jÓÛC+y(2èãhãšµý›`zÙ[ߥÿ ºßb‡Âˆb°–/^ê WÊšÒÞ9 +ŒtÄ‹Ž}sŠãì|3©êÞТԭ-!ŽÒÊÚ³I#;Jžm¼’ ¢ì`°mÛód±ŒdöÃM°‹+oûô¿áGöe‡üøÛzÿª_ð¬îYw¢_M¨ÝFlÖ7wö÷òNd"HÚ+äXöáóäÃo͇cá[VðÞŒ·ÑEdöztCÏ ’BÞ\9Ø­ ÿG •ÞWy#;@=¯öe‡üøÛߥÿ ?³l?çÊÛ¿ü²^ÿ…H𼖚Ͷ£<‰nK!¹–éÖW >l¼±ÛFÌe)¼#¨\iÚu“Él«¦Ú}•+—S>Ém¤F$(1ò lÈ#uuŸÙ–ì6Ü ª_ð£û6Ãþ|­¿ïÒÿ…–ÿ„[RŠ%šÍa³ÔZIÞFyžØ2Æ„Ÿ5\dD2¬ .Üc}tsXÍ'ˆlõ+åAiq )ÎâÒ<,¼còͳϧá7öe†söoûô¿áGöe‡üøÛߥÿ .&þ¿»±ÓlnÖÁí´Ø!³Qæ3‹¨–kwvu(¶øÛ–É~£ôzÅÕËX\Ù¤¹²¹3¤S1eÌrDWp¯÷IÊãŒäYþ̰9ͱÿ¶*§J›a“þ…mÏê‡?çüô¢àrÇÁÒ5ÍÚÍoÕ«Iu:™u€$3 2žPù"ÿZTÈ7våÎ.iú>µge}<ñ\K›‘$åŒHa?,¾XiY|’~eï ¾W-»ý›aÇú·?t¿áGöm‡üù[ߥÿ .(ìoŸ\´Ô.šÜy]ÀËaò¼±˜Ž}‘üÜ›§Ö&›á]NÃH‡Ng³tó,.$”Hà£À-Õ.ÎAX J’X®¤i–óãoíˆA?çü÷¤þ̰ãýÛŽŸº_ð¢às3xRúI¬e¶»‰ÌØ"Kø®W/P‘°çøˆíÈì:zÕ_ìÛùò¶ÿ¿KþfXÏ·ýú_ð¢à[ÏùæŒÿžj§öe‡üøÛߥÿ ?³,?çÆÛð…Ã¥ -çüóFÏ5Sû3OÿŸcíå(Ïùý:Qý™aÿ>VÇßÊ_ð  yÿ<ÑŸóÍTþ̰ÇüxÛg·îWüŸþ½Ù–óãmÿ~‡øP¼ÿžhÏùæªfXÏ·ýú_ð£û2Ãþ|m¿ïÒÿ…[ÏùæŒÿžj§öe†?ãÆÛ=¿r¿äÿõèþ̰ÿŸoûô?€-çüóFÏ5Sû2Ãþ|m¿ïÒÿ…Ù–óãmÿ~—ü(ÞÏ4güóU?³,?çÆÛþý/øQý™aÿ>6ß÷é€-çüóFÏ5Sû2Ãþ|m¿ïÒÿ…Ù–óãmÿ~—ü(ÞÏ4güóU?³,?çÆÛþý/øQý™aÿ>6ß÷邿ÿžhÏùæªfXÏ·ýú_ð£û2Ãþ|m¿ïÒÿ… óþy£?çš©ý™aÿ>6ß÷éÂìËùñ¶ÿ¿KþX,[ÏùæŒÿžj§öe‡üøÛߥÿ ?³,?çÆÛþý/øQ`±o?çš3þyªŸÙ–óãmÿ~—ü(þ̰ÿŸoûô¿áE‚żÿžhÏùæªfXÏ·ýú_ð£û2Ãþ|m¿ïÒÿ… óþy£?çš©ý™aÿ>6ß÷éÂìËùñ¶ÿ¿KþX,[ÏùæŒÿžj§öe‡üøÛߥÿ ?³,?çÆÛþý/øQ`±o?çš3þyªŸÙ–óãmÿ~—ü(þ̰ÿŸoûô¿áE‚żÿžhÏùæªfXÏ·ýú_ð£û2Ãþ|m¿ïÒÿ… óþy£?çš©ý™aÿ>6ß÷éÂìËùñ¶ÿ¿KþX,[ÏùæŒÿžj§öe‡üøÛߥÿ ?³,?çÆÛþý/øQ`±o?çš3þyªŸÙ–óãmÿ~—ü(þ̰ÿŸoûô¿áE‚żÿžhÏùæªfXÏ·ýú_ð£û2Ãþ|m¿ïÒÿ… óþy£?çš©ý™aÿ>6ß÷éÂìËùñ¶ÿ¿KþX,[ÏùæŒÿžj§öe‡üøÛߥÿ ?³,?çÆÛþý/øQ`±o?çš3þyªŸÙ–óãmÿ~—ü(þ̰ÿŸoûô¿áE‚żÿžhÏùæªfXÏ·ýú_ð£û2Ãþ|m¿ïÒÿ… óþy£?çš©ý™aÿ>6ß÷éÂìËùñ¶ÿ¿KþX,[ÏùæŒÿžj§öe‡üøÛߥÿ ?³,?çÆÛþý/øQ`±o?çš3þyªŸÙ–óãmÿ~—ü(þ̰ÿŸoûô¿áE‚żÿžhÏùæªfXÏ·ýú_ð£û2Ãþ|m¿ïÒÿ… óþy£?çš©ý™aÿ>6ß÷éÂìËùñ¶ÿ¿KþX,[ÏùæŒÿžj§öe‡üøÛߥÿ ?³,?çÆÛþý/øQ`±o?çš3þyªŸÙ–óãmÿ~—ü(þ̰ÿŸoûô¿áE‚żÿži¯÷ÓÒ«fXÏ·ýú_ð éöH7%º°èDJý*¡ñ!KaºgüyŸúí/þŒj)tßøó?õÚ_ýÔR—ÄÉ[ Òt«\ Ÿ)09þèôÿ?Ó–ûE燮DwEçÔnѦÔ&–-<14¯ÂÄs26Äã”2ðOS¤ éV¸ëå/¿ðŠe®…£YÁ<6šMŒÜ.É’+eU•pFÈÁ#ÔÕÔøØCáG1}âbÆâòÜý…ÛL†æâåÄ¢ábŽÞP¨ Ÿ,‘>Ü’ü®qÎ*KëÂüèö–°ÜêK –x RŒ¨?<ÉøùUÿXܧO›åéãÒ4Èm–Ú-:Ñ XÞ!À¡B9ׯ€HèqÍ%Þ¥ßÆñÞi¶—(ò Yf\3… ‚9;@ô¨,ͺÕu ´ý ìM¥¼úœŠÈ>Ô‘ƒ’áJ2ïå0Șž,Ô€Õex,Þ &ÊYî6³+ÌñËs 9ÚÀ'%AÇÏËÑêº-Ž´-SP'†Þ8E"+£¶ÇO˜09r~ U˜,ím@û=´Qb$ˆÐ.#\ì^Ý8²}h™¹Ö5È5›}\i­y3Ä~ÕöG„xæä°6ÿ{pûßwŒÕ)¼]­±™m4øf»ÝÉò,rmšx³¹æO)O[8“¹û¿7A7„ô9ííí²í#´†çí?fŽÝR?–É–\`ðÙõÈ•rMK—ì~f›hÿcÇÙw@§ÈÆ1³—î¯OA@Ôº–·¨K§¼7–›õ››HqÈ"K¥ÌŠsŸ-~\ðWvyÚµOе”{´±°Žhìšâ{‡wJ ©ÐòÌžPÄ'æÃ»î¨P§³›M°¸³’Î{ymdbÏÄ‹o$©$·Íõç­2]#LžH$—N´‘à•¦…ž&9·3)Ç [’G$ó@Ú~©7ˆ®,/Õ-†ÙÚÛììL±£*ù¢eb„ÃäÚ¬¥€9-¦ëèvÆæöâØésêzŠá`a$!$¸•œ¸bb6UAù‡'õ–Úm…œ×ZØÛA-ÉÝ;ÅV”óË>cÉëêjE´¶R…m¢9Zd–Fݹ‡1ÞÙ=Nãêh–µñ&µÄñjÖQ¶·NѬdA)‘7Id 31q„ÝÀÆZ ¯x…0ÐiJD6«}:È2±Hòùi!’TòX$csb@w7Mm èöP\Ak¤ØÁ Êìž8­•VUäa€0äð}MMu¦Ø_M×v6×Û¶ø^Xƒ´MÁÊ’8<ž‚€1µ„¾“ÅÚPÓîm ›ì„½Ì 2‘æ[q…uÇnrztïY¶/ÕµK‹k›}1#ÓKZÇ)‘“ƒ4q>|Æ‘OËç(Ú#mØ[åêu #LÕ¼¿í-6ÒóËÏ—ö˜M™Æq¸t§¾›a.¡¡%»ÞÄ»c¹h‘žc |ÍùŸZã-¼Y¯ÝYÁpl­­£ÔÝìÞeS±ež(ñµg-.lîÄx*2l ™uËëoø†âSm-î’bDŒ¤R‘LÍľÝ'ŒàkG¤iÉ<‘i¶ˆ÷,³2À ÈêÛ•˜ã’O óS½¥´‰pm%Î|õdK• wqó| {)É^ø«SÑÅä—‰guœ²[2ÃDdu´k à—m£híäçæÝü5fMgX¶ÕcÑ$–ÆKÙÚ#ÚÛ:ÆÒwÃE¼– [°q÷ÁÇÊCtŸcµó¼ï³Eæùžnÿ,nß³fìã®Ï—=qÇJ«ƒ£Å§Ë§Ç¤Ø¥”­ºKe¶Qž9+ŒòÈzSÏ-Åíýä3½£ùšŒ¦o>–ÞRfÔ‰ “n‰HÎB’[hÆÁñN°v–zÏ“O4ìî»J‹›„U/,Ëå°“¸y€dá@P]m¤i–~WÙtÛH<¯õ~T »>ÿL?ÖIÿ}·©¥—HÓ'’ &Ó­$x$iagIÙ·3)Ç Xd‘É<Ð6÷·º–·¡ÝI-ªÙ ^êÞ8#æ71îgÝ‚Âq°c dã%|M®êwöšJ‹ml¶“]ñHÆíÖݤâhäQ<¶¬rvtÙgöŸöŸöu§ö‡üýy æôÛ÷ñžœuéÅ#hú[ÜÜ\¶›hÓÜÆbžS–•«e†àñÀ¤3sâSM±›UºK;‹3s{VñÂñºýœNÀ™ Û…¾Ú9|öÁ³©j^#°šËOmï¯nVYüÛ{@#CÚc’uÉÌ¿{`6òHéÎÕLem¡9TÄcåvݹ‡¹²zÇÔÕ/øFô/±}‹ûNû'™æùeO/~1»nÜgg®)“ªê°‹O ê÷ž\yÍu0IÊ‹ö+‡ 2ýà9qÀ5V?x“v“i…. ò¤’cn¤Ç ù ¿’“±|q…1߸~ÂHb•£i"Gh˜¼e—%‚ ppÄgПZÌðêÀÐ.¥ˆ•Ú1f›K( 6õ›ÜúÐ…¯o5;ÍVíµ®lXL@@èrÖÖï¹w?ʇq;1XÇœ­êc¹ÔU¬ÖÜÞ h[toö¡oæ;ï—9m€)è7q¸ôdµûwÛ¾ÍÚü¿+ÏòÇ™³9Û»ÆyÇLÔ-¤isqrÚm£OsŠyL ZT8Xã,88€åoüQ¬X\Þ[Ÿ°»iÜÏtâQr±Go.ÔaòÉ•É/Êçí }âbÊâòöm2™îœ@À\,QÛʘ|²DûrKò¹Ç8\zF™ ²ÛE§Z%ºÆð¬K…äP1¬@$t8æžúuŒ¯+Éení2²JZ K«V Ç „@Aê}08c\Õšýtáq Wv÷) ]²,lLö,–$ÆÝ³• ±$‚¡ˆ®ö•agty‚1‘J©lr@$àg¶OÔÔ2iÖ2¼¯%•»´ÊÉ!h.¬X9"êGaSC VðG$QF¡4]ªª¨ôQøQøR¢Â€ (ü(ü(¢Â€ (ü(ü(¢Â€ (ü(ü(¢Â€ (ü(ü(¢Â€ (ü(ü(¢Â€ (ü(ü(¢Â€ (ü(ü(¢Â€ (ü(ü(¢Â€ (ü(ü(¢Â€ (ü(ü(¢Â€ (ü(ü(¢Â€ (ü(ü(¤¸ßJ\ûŸÆšßêÏÓôíúUGâB{tÏøó?õÚ_ýÔQ¦Ç™ÿ®ÒÿèÆ¢”¾&JØn’Ò­T÷‰-£5‹áÿéWÚ µÝå£Íq3Ì]þÓ:ô™Ôp®áEméò ¶ÿ®Iÿ Š«áoùl?Þ¸÷ÿ—‰sÅ]O„>/ü"Úý›ÿ.øåð‹h?ôoü ¹ÿã•ÌÙÁ«iÚ6œQ5I¤»Ò _ùóO)ŽlÀ Œ¶åeW¶FT¹L@#>$×ä‚𤺴«co{%‹,WPo•RÙ¢dfyó0 !`pÃÔ³¶ÿ„[Aÿ sàeÏÿ£þm þÍÿ—?ür¹]NßVŠê[EºÔaÒ-î]cÅwp혭Ù9†E™—s\|ÅŠŒm {m4\®—h·#ÝPLÒ"£Ú7ªJƒœð ±¤?øE´ú7þ\ÿñÊ?áпèßøsÿÇ+ZŠ.ÂÆOü"Úý›ÿ.øåð‹h?ôoü ¹ÿã•­Eac'þmþÍÿ—?ürøE´ú7þ\ÿñÊÖ¢‹°±“ÿ¶ƒÿ@æÿÀËŸþ9Gü"Úý›ÿ.øåkQEØXÉÿ„[Aÿ sàeÏÿ£þmþÍÿ—?ürµ¨¢ì,dÿÂ- ÿÐ9¿ð2çÿŽQÿ¶ƒÿ@æÿÀËŸþ9ZÔQv2áÐèßøsÿÇ(ÿ„[Aÿ sàeÏÿ­j(» ?ð‹h?ôoü ¹ÿã”Â- ÿÐ9¿ð2çÿŽVµ]…ŒŸøE´ú7þ\ÿñÊ?áÐèßøsÿÇ+ZŠ.ÂÆOü"Úý›ÿ.øåð‹h?ôoü ¹ÿã•­Eac'þmþÍÿ—?ürøE´ú7þ\ÿñÊÖ¢‹°±“ÿ¶ƒÿ@æÿÀËŸþ9Gü"Úý›ÿ.øåkQEØXÉÿ„[Aÿ sàeÏÿ¬Ý_@Ñí¿³–&í…½»·Úç'cÈ™1’8Ï¿⺊É×?Öè¿öµÿÑ‚„Ø ÿ¶…ÿ@çÿÀËþ9Að¶…Óû9¿ð2ãÿŽTšØ¹ŠÅ/m<ç’ÊAp`‹'Ï@tÚ>óf*22á= r~"]zËL‰V[Ï·Ãm%ÊKmÕÊÍtìÌbQ(TC°/œ¬»X ­¹êEk xnò’ÞÉäE‘â'íW# ŒQ‡úÎ̤g¾3SÿÂ- ÿÐ9¿ð2çÿŽW',º¦™¥ø‰%ÖœQnÄ‹æ9Ú±#]•’BÛX(T,ÛŠ°]¹*Àu©ñ°Âð,£¦½¬çþ¿#ÿã4ÈyþÞÖ}?ãñ?øÕgØøƒZ:N𥮥t.%޵Cx³ÛíBóŽ8·˜‹7ú°¿Õs+QºÒÿá%ºÓuï>æyme…&xU$¶h­#{ü¬d…~dÄ»I(pEE†n /ñ>Öxÿ§Äÿã4 'ýµŸü Oþ3YÞÖБ5®ÑçyQ¡!¥‘K"mÛ•ÿX7­{k:•s{ªÝß>­¡›×’D‚?²Ë›uÞ¬‘±¯ÚÝdÚ±ç1`5Á¡.#·>#ÕDò+:Fo£ ʤ yY nP}7QD~ K,qx“Vw…¶Jö2Q°­†Wk)úØŠÂðê¾$‰£ŸNÕ®ì­ï †e½ ÊNŸ!ÌÑÄ#ÌaòÄ>è',`¾Ô5+_ߤ2Çcus{rË$ÍìxÜFò'LJÝTò’¹‡s£oys¤ â=Ufdi6¾qU+¸äô”Ûpõ(ð,„È{YÿÀ´ÿãU‡q¨k ã3f—3]>å³Þù(×+ >V‘cUî¾ièÛ# ²nxgÄ2jÞ(¾„jÑê0m’H¿³g‚{8£Þaʨ•'#’¬Ì‡*xÚ…‚âÿ 'ýµŸü Oþ3Gü ²Ð{YÿÀÄÿã5Ù¯+KE‚çÿ,ŸôÖð1?øÍð‚ÉÿAígÿÿŒ×iE œ_ü ²Ð{YÿÀÄÿã4 'ýµŸü Oþ3]¥X.qð‚ÉÿAígÿÿŒÑÿ,ŸôÖð1?øÍv”Q`¹Åÿ 'ýµŸü Oþ3Gü ²Ð{YÿÀÄÿã5ÚQE‚çÿ,ŸôÖð1?øÍð‚ÉÿAígÿÿŒ×iE œ_ü ²Ð{YÿÀÄÿã4 'ýµŸü Oþ3]¥X.qð‚ÉÿAígÿÿŒÑÿ,ŸôÖð1?øÍv”Q`¹Åÿ 'ýµŸü Oþ3Gü ²Ð{YÿÀÄÿã5ÚQE‚çÿ,ŸôÖð1?øÍð‚ÉÿAígÿÿŒ×iE œ_ü ²Ð{YÿÀÄÿã5þ*©3ëZ³›yx÷ÜÆÁ]NTàÃÉ;ô®æ¡»èsÿ×6þTXG#ÿ,¿ôÖ ÄÿãT .1ý½¬ôÇü~'ÿ­?Ëz.t+-F{¶ß´2Ín‘³ìóÉæ+/Þ{f¹ êÑÛÞyºÇÙ®l¢tèŠD¯qÅÄ^SR]ˆ† ¬;f=7 P ÏøAeÿ ö³ÿ‰ÿÆhÿ„_úk=sÿ‰ÿÆk³^”´X/þI?è=¬ÿàbñš?á“þƒÚÏþ'ÿ®ÒŠ,ÿ,ŸôÖð1?øÍð‚ÉÿAígÿÿŒ×iQLæ4Ü ¹F ÇRÎCþY?è=¬ÿàbñš?á“þƒÚÏþ'ÿ®‹ûY?é—ýôßüMÚÉÿL¿ï§ÿâ)h;ÿ,ŸôÖð1?øÍð‚ÉÿAígÿÿŒ×Eý¬ŸôËþúþ"ídÿ¦_÷Óÿñhœïü ²Ð{YÿÀÄÿã4 'ýµŸü Oþ3]ö²Ó/ûéÿøŠ?µ“þ™ßOÿÄQ ïü ²Ð{YÿÀÄÿã4 'ýµŸü Oþ3]ö²Ó/ûéÿøŠ?µ“þ™ßOÿÄQ ïü ²Ð{YÿÀÄÿã4 'ýµŸü Oþ3]ö²Ó/ûéÿøŠ?µ“þ™ßOÿÄQ ïü ²Ð{YÿÀÄÿã4 'ýµŸü Oþ3]ö²Ó/ûéÿøŠ?µ“þ™ßOÿÄQ ïü ²Ð{YÿÀÄÿã4 'ýµŸü Oþ3]ö²Ó/ûéÿøŠ?µ“þ™ßOÿÄQ ïü ²Ð{YÿÀÄÿã4 'ýµŸü Oþ3]ö²Ó/ûéÿøŠ?µ“þ™ßOÿÄQ ïü ²Ð{YÿÀÄÿã4 'ýµŸü Oþ3]ÕcÆs~vÿâj 7]]GZÔ4õˆ/ØÒ2oáËîà@½}éè'ü ²Ð{YÿÀÄÿã4 'ýµŸü Oþ3]˜éKE‚çÿ,ŸôÖð1?øÍð‚ÉÿAígÿÿŒ×iE œ_ü ²Ð{YÿÀÄÿã4 'ýµŸü Oþ3]¥X.qð‚ÉÿAígÿÿŒÑÿ,ŸôÖð1?øÍv”Q`¹Åÿ 'ýµŸü Oþ3Gü ²Ð{YÿÀÄÿã5ÚQE‚çÿ,ŸôÖð1?øÍð‚ÉÿAígÿÿŒ×iE œ_ü ²Ð{YÿÀÄÿã4 'ýµŸü Oþ3]¥X.qð‚ÉÿAígÿÿŒÑÿ,ŸôÖð1?øÍv”Q`¹Åÿ 'ýµŸü Oþ3Gü ²Ð{YÿÀÄÿã5ÚQE‚çÿ,ŸôÖð1?øÍð‚ÉÿAígÿÿŒ×iE œ_ü ²Ð{YÿÀÄÿã4 'ýµŸü Oþ3]¥X.qð‚ÉÿAígÿÿŒÑÿ,ŸôÖð1?øÍv”Q`¹Åÿ 'ýµŸü Oþ3Gü ²ÿÐ{YÿÀÄÿã5ÚRQa2øÃs MoVW¸Ui\FY¶d.O•ž7·óì*ýàÃqÓÊLwþß½tÿqÿ×7þk\ÝçÞÿ¶Iÿ ŠĽAìgéŸñæë´¿ú1¨£Lÿ3ÿ]¥ÿÑEL¾&%°šOü‚­±ÿ<—ÿA{À1¹ðm›,Ò(2Üpqþ½ýªŽ‘ÿ «oh—ÿA‹e=ÿÂÈ-­£ó[íEä‡p|KxZH¹!Nô ›X…;°HšÖü(î<©;\KDzŸéU4ÛÅÕ-â ®âkrPÑJÑ7b1¹;ã:Wªøvk¨d[ }•f°ò4¸±lŸØ÷!æ->ñã$OºÍû¼‘¢ ºð¦ªñêQˤ}ªæçík¦\oˆÿfL÷wR Œ³n+, º0Ïû®FT ‘ž‘åH1›™Ô/ÿJ°¹ûL¿ˆ_ð¯6ñ¯]èÓhvº4ò•ºÕn–ìMŠAq ß–£2ݺáå<2}ÂÊÛN²ŽÖÑ6B™#$±bNK3–bI%ŽI$’I$ÐÄ:\Kù/øRùÿ?2þKþ-ÿóó/ä¿áIä>sö‰3ô_𩨠¼™?çæ_ÉÂ&Oùù—ò_ð©h ¼™?çæ_ÉÂ&Oùù—ò_ð©h ¼™?çæ_ÉÂ&Oùù—ò_ð©h ¼™?çæ_ÉÂ&Oùù—ò_ð©h ¼™?çæ_ÉÂ&Oùù—ò_ð©h ¼™?çæ_ÉÂ&Oùù—ò_ð©h ¼™?çæ_ÉÂ&Oùù—ò_ð©h ¼™?çæ_ÉÂ&Oùù—ò_ð©h ¼™?çæ_ÉÂ&Oùù—ò_ð©h ¼™?çæ_ÉÂ&Oùù—ò_ð©h ¼™?çæ_É¢º‰Å¬Çퟑ»/§Ò­TW\ÚL=Q¿•5¢ËÌŸˆ_ð¤ò¤ís.}_ð®{Ç"Òí//¢‚}.ÒèI}k<‘¢OGESæ²Æq#ÄÀ9+‘ó+ðÏ…îoô½VþÆÏû8Üé÷hîe¶î÷7ÅDd¨ÂMÙ–C°NP "“oü|Êûª?¥8C!çí2þKþæ–º x{H¹Ô`³¾³š «il-®¾É™q¹¢(#¶Qy«7’dbÄn…©>¡é¿Ù<M(šeÜóÍ·o3±y$Û“·s³6ÑÀÎSç“'üüËù/øQäÉÿ?2þKþ-“'üüËù/øTSÆêªLò0Þœ¿ÞÕj¡¹æ0?ÛOýR`rSÜÅo´HáYÎX“Œð'ªÜ^0+:K pG?•"HêŽÇi?Ä@¡ÏQÆ ƒP[ˆµ(ï"PʱíåXŒ –h'ž9ôÆ9ÈŠ+x.ÖevÔ^Þo=>\î]¥_8ïäÈîüUjIË’:3T´»4$ÔíaÓg¿™Ú;xÞbÈw PKÎF: Òiú­¦§æ v”†±õ]:H| ®[æ5–k)À UOÝU,HÉÀãÛ5<¶º‹j^#·Õ®¯„%&ŽîØÎÐÄûšÜÆF%LÄ»X9W¨'¦q÷‰lí®µ%¶½´³[y§¹¹ Â8ÀJ‡‘‰a—\–9à]ã®r>½¸­¦ SOšçN²[ ™!Ž÷ìå­¤-o³jD¡#'Ë‘†ÍÝÉ;Ÿ„ž<;áûf±¹•mí6Þ[Aöy®"ÏÚ2„(G@s•Bü¹ÅXGw©_E¥iwz…Às¬/4Í…RÇh8çŽ?×xèGáÉü+Ï5 jr¥âCd÷W¦=»]_436ï³ÂÛÍ•sóï@­¹ÈÚOÍÔézJi:Ýÿجá´Ó^Þp*¤fPÓy‡bôm¾PÝŽBޏÀ,¨õ«’É¢–I~Û¸·Ù ’ñ“îÀ2§¦3ž€ãCùu$wÿ ã†/£3¨Q*A{h–I• –ët.§'j…aÑÔ[&8*£/Oð–§ki,ã^ÃRÌekeK눥ŽQ´¢†bÍ/™1Ü¢BpIj,£Ûò$þ_çÌèºþ­¬—h‚y6Måªù’ÎѴÑûÈ‹óÿ=¶®WMøçÞ•†QEQE_¨ÏâïbFLEi¸þ잢¬Eá/ù¼Gï§ò’šÜLëD2ÏÌ¿’ÿ…/“'üüËù/øT´U’EäÉÿ?2þKþy2ÏÌ¿’ÿ…KEEäÉÿ?2þKþy2ÏÌ¿’ÿ…KEEäÉÿ?2þKþy2ÏÌ¿’ÿ…KEEäÉÿ?2þKþy2ÏÌ¿’ÿ…KEEäÉÿ?2þKþy2ÏÌ¿’ÿ…KEEäÉÿ?2þKþy2ÏÌ¿’ÿ…KEEäÉÿ?2þKþy2ÏÌ¿’ÿ…KEEäÉÿ?2þKþy2ÏÌ¿’ÿ…KEEäÉÿ?2þKþy2ÏÌ¿’ÿ…KEEäÉÿ?2þKþy2ÏÌ¿’ÿ…KEEäÉÿ?2þKþy2ÏÌ¿’ÿ…KEEäÉÿ?2þKþy/ÿ?2þKþ-QâµF>Ñ/Ünp¾«íXŸ{þÙ§þ‚+¤|ý®/MüÖ¹»Ï½Ó»^?à"’ø—¨=Œý3þ<Ïýv—ÿF5iŸñæë´¿ú1¨©—ÄĶHÿU¯ýrOýV‡Ãè!Ù³Å7›qÉPOúù+?HÿU·8ýÒãþùáüêž ´R‘-Ç݈ÿ_' ­gñ°ÂŽŸì–Ãþ]âÿ¾d¶ÿŸx¿ïIö•þì¿÷é¿Â´¯÷eÿ¿Mþ#ì–ßóïýð(û%·üûÅÿ| O´¯÷eÿ¿Mþ}¥»/ýúoð û%·üûÅÿ| >Émÿ>ñß“í+ýÙïÓ…i_îËÿ~›ü(~Émÿ>ñß²[ϼ_÷À¤ûJÿv_ûôßáGÚWû²ÿߦÿ _²[ϼ_÷À£ì–ßóïýð)>Ò¿Ý—þý7øQö•þì¿÷é¿Â€ì–ßóïýð(û%·üûÅÿ| O´¯÷eÿ¿Mþ}¥»/ýúoð û%·üûÅÿ| >Émÿ>ñß“í+ýÙïÓ…i_îËÿ~›ü(~Émÿ>ñß²[ϼ_÷À¤ûJÿv_ûôßáGÚWû²ÿߦÿ _²[ϼ_÷À£ì–ßóïýð)>Ò¿Ý—þý7øQö•þì¿÷é¿Â€ì–ßóïýð(û%·üûÅÿ| O´¯÷eÿ¿Mþ}¥»/ýúoð û%·üûÅÿ| >Émÿ>ñß“í+ýÙïÓ…i_îËÿ~›ü(~Émÿ>ñß²[ϼ_÷À¤ûJÿv_ûôßáGÚWû²ÿߦÿ _²[ϼ_÷À£ì–ßóïýð)>Ò¿Ý—þý7øQö•þì¿÷é¿Â€ì–ßóïýð(û%·üûÅÿ| O´¯÷eÿ¿Mþ}¥»/ýúoð û%·üûÅÿ| ŠêÖÜZLD#oà•'ÚWû²ÿߦÿ Šæá ¤Ã‘ºÄÞŸJ›ì–Ý~ÏÜ}–ßþ}âÿ¾'ÚSû²ÿߦÿ >Ò¿Ý—þý7øR~Él>Ï=6 >Émÿ>ñß“í+ýÙïÓ…i_îËÿ~›ü)€¿d¶ÿŸx¿ïGÙ-¿çÞ/ûàR}¥»/ýúoð£í+ýÙïÓ…/Ù-¿çÞ/ûàTSÛë$1©ó ¼*O´¯÷eÿ¿Mþ󫪨:ÆÃø‡µ&;œ¼ç¹÷¨mm ³·ŽÞÞ1qŒ*úþ=inõ;kY 1²»•á²@ˆ ðHÁõÏP fãìúëÄ„­¬jMÂÄŠ(dˆvðN[ž9è8jbjr¨ßÌé4ãvÍŸ¥^ÒY$· (mØ<¸ Ǫ ÚGq“ïè1ôÏÛÞ[]ÜÝÄ-#‹dÖä7˜n-¤$C(P8.U€–œŠê‹æI£Ž‚Šç-½h¤0¢Š(ÿ¯áXb—Åþ"ó#GÄVxÜ ö’¬Rðíä>'ñ=ÅÌ«[Ú¼’7ÝE )$žÀzš¥¸™Û Koù÷‹þø}’Ûþ}âÿ¾Co¨[Ý[Eqo#M ¨9#BÊêFC ƒ‘Rý¥»/ýúoðª$_²[ϼ_÷À£ì–ßóïýð)>Ò¿Ý—þý7øQö•þì¿÷é¿Â€ì–ßóïýð(û%·üûÅÿ| O´¯÷eÿ¿Mþ}¥»/ýúoð û%·üûÅÿ| >Émÿ>ñß“í+ýÙïÓ…i_îËÿ~›ü(~Émÿ>ñß²[ϼ_÷À¤ûJÿv_ûôßáGÚWû²ÿߦÿ _²[ϼ_÷À£ì–ßóïýð)>Ò¿Ý—þý7øQö•þì¿÷é¿Â€ì–ßóïýð(û%·üûÅÿ| O´¯÷eÿ¿Mþ}¥»/ýúoð û%·üûÅÿ| >Émÿ>ñß“í+ýÙïÓ…i_îËÿ~›ü(~Émÿ>ñß²[ϼ_÷À¤ûJÿv_ûôßáGÚWû²ÿߦÿ _²[ϼ_÷À£ì–ßóïýð)>Ò¿Ý—þý7øQö•þì¿÷é¿Â€ì–ßóïýð(û%·üûÅÿ| O´¯÷eÿ¿Mþ}¥»/ýúoð û%·üûÅÿ| >Émÿ>ñß“í+ýÙïÓ…i_îËÿ~›ü(~Émÿ>ñß²[ϼ_÷À¤ûJÿv_ûôßáGÚSû²ÿߦÿ ‰í­ÅÔcÈ‹7ã`õZÀ¼ûßöÉ?ô[ípŸjŒâLoùdÞ«íXŸ{¿ú´ÿÐE%ñ/P{úgüyŸúí/þŒj(Ó?ãÌÿ×iôcQS/‰‰l&‘ÿ «_úäŸú­O‡Ÿò$Ùÿ×[ý%eé?ò µÿ®Kÿ Š¿ðý§ ´ E|ÛŽ²ÿ-äö5¬þ6øQÖÑPï¹ÿžQßÓÿÄѾçþyEÿOÿR2j*÷?óÊ/ûúøš7ÜÿÏ(¿ïéÿâhj*÷?óÊ/ûúøš7ÜÿÏ(¿ïéÿâhj*÷?óÊ/ûúøš7ÜÿÏ(¿ïéÿâhj*÷?óÊ/ûúøš7ÜÿÏ(¿ïéÿâhj*÷?óÊ/ûúøš7ÜÿÏ(¿ïéÿâhj*÷?óÊ/ûúøš7ÜÿÏ(¿ïéÿâhj*÷?óÊ/ûúøš7ÜÿÏ(¿ïéÿâhj*÷?óÊ/ûúøš7ÜÿÏ(¿ïéÿâhj*÷?óÊ/ûúøš7ÜÿÏ(¿ïéÿâhj*÷?óÊ/ûúøš7ÜÿÏ(¿ïéÿâhj*÷?óÊ/ûúøš7ÜÿÏ(¿ïéÿâhj*÷?óÊ/ûúøš7ÜÿÏ(¿ïéÿâhj*÷?óÊ/ûúøš7ÜÿÏ(¿ïéÿâhj†ïþ<çÿ®mü¨ßsÿ<¢ÿ¿§ÿ‰¨nZàÚM˜¢ÆÆÿ–‡ÓýÚ¹EAºäË(¿ïéÿâiwÜÿÏ(¿ïéÿâi5ûŸùåýý?üMîç”_÷ôÿñ4ÀšŠ‡}Ïüò‹þþŸþ&÷?óÊ/ûúøšš¡¹ÿT¿õÑ?ô!FûŸùåýý?üME;NQCÇÓ‘!?Ä?Ù _Ì{[û{Õ…¦XÕÕ‘ †‘’P;ôÏpÉKR͵)’Þc%ÔÊmÑÀ!@-Ãllt#© ãšÚïÁ¢³¤•9sX*ÃÚÆ×2£Ó®›Ã/§-Û[\ÉÆ·rг†9Êäwô¬¶ð=œFÚuÍÅªÇ qˆ¥žYÓtR¤°d;œ"a´c"F¯Zê†Iã$ñŒOùÅ ädrâ§çTÝÛcJÑHæmü7©Á{.ªº­¡Ôæ•Év±'c¤*Ãg›»pû2Û±Ëdrš_ ‰ÅIþ‘oæA6ÄÙ‰"Ü7â † sòàôÿ¯øþʘ“G#ʑʎñ6ɶJ±°}zëHg3'‡.¬ü•böÍp—ñÜ«,\(>Ö&m±ïû¨3ò† ÁÉ®éú¶šàÕî/[·™Äp˜Ñ™Ä ¥Af*Û¨#'$“‘À­Î„ûÑH2óÂz„zu”V÷°ÎúÙ­¬AƒnÈVâc.dýá Ÿ—fpÜ|ÃÝø,ßÌ/nfÓ®µ‘ÞOµéþm¾Y"C¶"ûƒcvãÉ~0Ã`㥡ì;úQp9øü/:mݬW;VK‹{¨\ÂÆÐ¤!*àÌ»8b84ñ¤<Þ'·ÔnãBmm3¡Ú²ÍûÁ»‰@ŠòðI çŽI@kj)¢™wÃ"¸ ˹X2’㸠Š~i€c¢Š(¤0¢Š(ÿæo³ý—ñ#ÓûôDÕÓsw\][ü@·µ€Í,ÚBF± %™Œ3–'°ª[‰•ÄÔ×Ú|rMc34—v1©fF'-4*9-Î^1÷²Y~|¬›v—0ÞZCsm2M¨9c`ÊêFAuÀk—)ºy­gO²ZêQ)ÓmíîŒw <,fhD<4Ñ+"¶ÔØGÍÃIÑxJÒÎÓ@†m^K+ÒnÕ绚Fs'Ì[÷™aœäŽ9$õ&¨“£¢¡ßsÿ<¢ÿ¿§ÿ‰£}Ïüò‹þþŸþ&€&¢¡ßsÿ<¢ÿ¿§ÿ‰£}Ïüò‹þþŸþ&€&¢¡ßsÿ<¢ÿ¿§ÿ‰£}Ïüò‹þþŸþ&€&¢¡ßsÿ<¢ÿ¿§ÿ‰£}Ïüò‹þþŸþ&€&¢¡ßsÿ<¢ÿ¿§ÿ‰£}Ïüò‹þþŸþ&€&¢¡ßsÿ<¢ÿ¿§ÿ‰£}Ïüò‹þþŸþ&€&¢¡ßsÿ<¢ÿ¿§ÿ‰£}Ïüò‹þþŸþ&€&¢¡ßsÿ<¢ÿ¿§ÿ‰£}Ïüò‹þþŸþ&€&¢¡ßsÿ<¢ÿ¿§ÿ‰£}Ïüò‹þþŸþ&€&¢¡ßsÿ<¢ÿ¿§ÿ‰£}Ïüò‹þþŸþ&€&¢¡ßsÿ<¢ÿ¿§ÿ‰£}Ïüò‹þþŸþ&€&¤5ûŸùåýý?üM&ûŸùåýý?üMÿq×7þk\ÝçÞÿ¶Iÿ ŠßfŸíQ“yØÜ ªûVçÞçþy§þ‚)/‰zƒØÏÓ?ãÌÿ×iôcQF™ÿgþ»Kÿ£Š™|LKa4ùZÿ×$ÿÐEj|;ÿ‘&ÏþºÜèù+/IÿU¶?ç’ÿè"´>ÄÍàËB'‘A–ã€þ{ÉíZÏãa…e“'üüËù/øQäÉÿ?2þKþ&¢¡òdÿŸ™%ÿ <™?çæ_É€&¢¡òdÿŸ™%ÿ <™?çæ_É€&¢¡òdÿŸ™%ÿ <™?çæ_É€&¢¡òdÿŸ™%ÿ <™?çæ_É€&¢¡òdÿŸ™%ÿ <™?çæ_É€&¢¡òdÿŸ™%ÿ <™?çæ_É€&¢¡òdÿŸ™%ÿ <™?çæ_É€&¢¡òdÿŸ™%ÿ <™?çæ_É€&¢¡òdÿŸ™%ÿ <™?çæ_É€&¢¡òdÿŸ™%ÿ <™?çæ_É€&¢¡òdÿŸ™%ÿ <™?çæ_É€&¢¡òdÿŸ™%ÿ <™?çæ_É€&¢¡òdÿŸ™%ÿ <™?çæ_É€&¨nÿãÎúæßÊ&Oùù—ò_𨮢qk1ûD§änËéô  tT>LŸóó/ä¿áG“'üüËù/øPÔT>LŸóó/ä¿áG“'üüËù/øPÔT>LŸóó/ä¿áG“'üüËù/øPÕ Ïúµÿ®‰ÿ¡ <™?çæ_É¡ž7EV3ÈÀ:pBàüÃÚ€9Ê(èqGáP_B®¤‘I¥Ý¤÷Mi@ê÷ '–Щ¸cÀ sžÕÀ @i–²®†ú0I4+>¯§F––ê»&;È•C+Fƒ$6|õ) ŸIü(õã¯Zq:ÍÄþ%ŠæÿRE–âÂ$‰"+åßl–ç¡hÕŸjbÑí_˜0J€Ë­KQÒõ/Ü[/-Ôó<ûŸ±À#‰ñÊ‚q´¯,Ø\©Ú²w?…¢€8m3ZÕRÎæþmZÒþÆÊHæíæIóJ «iò’íP\íÁâEÄÒ_ø¢ £·1ù—w6Éy¹x—ËÙ$’Kì`ðÖÐn=wïà ën­!¾…b¸BÈ%I@Ý·çG+{á”wϽOŸç@qâ=DYÍrú ·f·{½*=‘¯ö‘yf1G†\·îÖßåM®<Þ~b1pêš’Ø«Í_ì¶³ê·6²\£Aeo8C¹Á\³$hY€*1¸î=Ÿÿ®Â€<çEÖ&†[ tÖ>Ñm5íÁD´–¹¸-{6e’2¿4;FKDTœàŽWÑ©sþy¤ü(¢Â€ (ü(ü(ÿ‹Â?ò7øþ¹Yÿ)*R@Sž˜úTFoø2b+L…Ǥ¾ÔÐ3¨Õtèu[µ™¤A½$I##tr#‡GeYU†ArÈ-Ñ´¸t8ZÂòI™Y$ÒHì]Øà f'3À¬ùÞæSø/øRù/ÿ?2þKþd“QPù2ÏÌ¿’ÿ…LŸóó/ä¿áH ¨¨|™?çæ_ÉÂ&Oùù—ò_ð  ¨¨|™?çæ_ÉÂ&Oùù—ò_ð  ¨¨|™?çæ_ÉÂ&Oùù—ò_ð  ¨¨|™?çæ_ÉÂ&Oùù—ò_ð  ¨¨|™?çæ_ÉÂ&Oùù—ò_ð  ¨¨|™?çæ_ÉÂ&Oùù—ò_ð  ¨¨|™?çæ_ÉÂ&Oùù—ò_ð  ¨¨|™?çæ_ÉÂ&Oùù—ò_ð  ¨¨|™?çæ_ÉÂ&Oùù—ò_ð  ¨¨|™?çæ_ÉÂ&Oùù—ò_ð  © EäÉÿ?2þKþy/ÿ?2þKþÀGÿ¸¿ë›ÿ5®nóïÛ$ÿÐEo¼Oö¨ÇÚ%ûÎÕ}«óïÛ4ÿÐE%ñ/P{úgüyŸúí/þŒj(Ó?ãÌÿ×iôcQS/‰‰l&‘ÿ «oh—ÿA§ðóYIn?ô|•™¤È*×þ¹'þ‚*ÿÃëxdð]›<1³n9* ÿ_%k?„~u”T_d¶ÿŸx¿ïGÙ-¿çÞ/ûàT –Š‹ì–ßóïýð(û%·üûÅÿ| –Š‹ì–ßóïýð(û%·üûÅÿ| –Š‹ì–ßóïýð(û%·üûÅÿ| –Š‹ì–ßóïýð(û%·üûÅÿ| –Š‹ì–ßóïýð(û%·üûÅÿ| –Š‹ì–ßóïýð(û%·üûÅÿ| –Š‹ì–ßóïýð(û%·üûÅÿ| –Š‹ì–ßóïýð(û%·üûÅÿ| –Š‹ì–ßóïýð(û%·üûÅÿ| –Š‹ì–ßóïýð(û%·üûÅÿ| –Š‹ì–ßóïýð(û%·üûÅÿ| –Š‹ì–ßóïýð(û%·üûÅÿ| –Š‹ì–ßóïýð(û%·üûÅÿ| –¢ºæÒaêü¨û%·üûÅÿ| ŠêÖÜZLD#oà”k4T_d¶ÿŸx¿ïGÙ-¿çÞ/ûàP´T_d¶ÿŸx¿ïGÙ-¿çÞ/ûàP´T_d¶ÿŸx¿ïGÙ-¿çÞ/ûàPµ ÉýÚÿ×DÿÐ…/Ù-¿çÞ/ûàTSÛÀˆ¬Æ¬$NB€~ð `ÁlçsÚZHÇø¤·Fcõ$f“ì¶ô±ÿÀHÿ¤4TÐì¶ô±ÿÀHÿ²ÙÿÐ>Çÿ#ÿ eä³Áe<¶¶ÿh¸HÙ¢ƒxO5€áw''Ž}«ÛÄMm¥ß^ê7‘N-¶f!dÚ{ c€H¹”dÇ |¬OjEö[?úØÿà$áGÙlÿècÿ€‘ÿ…aÃã 2}>KȄ̂ßÏFÒga#FÑчpà/ÊHÌ‘à°qKmã&ëÄ/¢Ç'ïÄ’B™Ìñäºì d\lo™•AÛÁ9@Ûû5§üøXÿà$áGÙ­?çÂÇÿ#ÿ Ê“ÄQÇ©\Z=…ØŠÞæ;Io1”²È¢`>ó“$k¸óÀ& ¶ñd7ÖVwzf¡3^£Mo Xã‘ã7I󺮑W¨É9®š¹ö[?úØÿà$áGÙlÿècÿ€‘ÿ…b[øºÎê]ðÚݵ‰–…ñ" *ÆÑŒó>a4c;8-Î"”t+•”Æfp» y;&y¥HÃFg\åuV9áIP:²ÙÿÐ>Çÿ#ÿ >Ëgÿ@ûüü+N·: ½Òî`¶´žüáå‘xáfó>s‚†Vf`6ãOíhžÓP¸†Þâd²gR!@ærˆ„X8cœ§_¾¬;5ßÙlÿècÿ€‘ÿ…e³ÿ }þGþ•uâk{[»¤ýý½¬pÈÓÇ,Ky§åQ#º®vá°HáÓÜgéž,·ÔµØãŠV{;¸ [p»Istd%‡P¾Ü©e$2ê5¥û-Ÿýìð?ð£ì¶ô±ÿÀHÿ¹«ßˆ-„¾]úi<ÐïÕ%xËa˜£| Øå€zŸóÒ€#Öyÿ üü)<%ÿ#oˆ½á´út’¥ªþŠ9|_â/24|EgÊ8’š;j*!imÿ>ñß²[ϼ_÷Àª-Ù-¿çÞ/ûàQöKoù÷‹þø-Ù-¿çÞ/ûàQöKoù÷‹þø-Ù-¿çÞ/ûàQöKoù÷‹þø-Ù-¿çÞ/ûàQöKoù÷‹þø-Ù-¿çÞ/ûàQöKoù÷‹þø-Ù-¿çÞ/ûàQöKoù÷‹þø-Ù-¿çÞ/ûàQöKoù÷‹þø-Ù-¿çÞ/ûàQöKoù÷‹þø-Ù-¿çÞ/ûàQöKoù÷‹þø-Ù-¿çÞ/ûàQöKoù÷‹þø-Ù-¿çÞ/ûàQöKoù÷‹þø-Ù-¿çÞ/ûàQöKoù÷‹þøÀGÏÚâôØßÍk›¼ûÝ1ûµãþ+}í­ÅÔcÈ‹7ã`õZÀ¼ûßöÉ?ôI|KÔÆ~™ÿgþ»Kÿ£Š4Ïøó?õÚ_ýÔTËâb[ ¤È*Ûœ~éqÿ|Š¿ðþuOZ)H–ãîÆÄ¯“ÐU #þAV¿õÉ?ôZŸ?äI³ÿ®·ú>JÖü(è~Ò¿Ý—þý7øQö•þì¿÷é¿Â§¢¤di_îËÿ~›ü(ûJÿv_ûôßáSÑ@}¥»/ýúoð£í+ýÙïÓ…OEAö•þì¿÷é¿Â´¯÷eÿ¿Mþ=ÚWû²ÿߦÿ >Ò¿Ý—þý7øTôPi_îËÿ~›ü(ûJÿv_ûôßáSÑ@}¥»/ýúoð£í+ýÙïÓ…OEAö•þì¿÷é¿Â´¯÷eÿ¿Mþ=ÚWû²ÿߦÿ >Ò¿Ý—þý7øTôPi_îËÿ~›ü(ûJÿv_ûôßáSÑ@}¥»/ýúoð£í+ýÙïÓ…OEAö•þì¿÷é¿Â´¯÷eÿ¿Mþ=ÚWû²ÿߦÿ >Ò¿Ý—þý7øTôPi_îËÿ~›ü(ûJÿv_ûôßáSÑ@}¥»/ýúoð¨®nÚL1 ù¬Méô«• ßüyÏÿ\ÛùP}¥?»/ýúoð£í+ýÙïÓ…OEAö•þì¿÷é¿Â´¯÷eÿ¿Mþ=ÚWû²ÿߦÿ >Ò¿Ý—þý7øTôPi_îËÿ~›ü*)çWUP²91°þ!íW* ¯õKÿ]ÿB09~ôS'š+ky'žDŽÔ³»œ*Üš¢5í(Ãk/Û¢ væ8we½ê§#iÏBqÔYs%¹´iÎJé¦F– %x”ªÉ‘ÁÈÎzdk¼3±¹—T½—P †;æŒ(uŒ€%”r„þðú.6¦š-äžiV(#Vi$sµUGRIàІÇP±Õ!yì/-ï"V1»ÛȲ(lr¤©ààÓ¹±Ÿ†l¡ŠÉ%’k‡´¹–çÌ›Ë/#Hìì Ø8#=TTÖº2Y^´ñ^Þ q#ʶ{”D²HK3p¶K1Ã1·…ÅÖ»oa³/þ‘$o2&Óó*• r8Þ¼wÝžÔó4K*ÂeQ+«2¦à =9˜¢â0£ðÛɬêWw³5œ÷±\¥œ{61Hâ XìÜ<@à0SµAêAœxr(¬ôØ,ï®í%Óí–Öˆ¶1aRNJ!È\ä `Éô9ÈíT­õ}2òö[]FÒ{¸sæAÊî˜89PIàð}þ¼01¬<"–—w.¦]7í0Im`Œ¥Š(–2ìW~CD ƒµsœ°6að½¼V±[ Býí-Úk H¡!X¤IFÔ¹Fæ,p$îúã¡÷£¾{Ò&ïGe¤¶l­%ì-ºÎåC[K/–3¥°UUHn3ÆNMÝ:Â-7O†Î&gXÔ)‘È/#YØàe˜ä±Ç$“V@ô¦3ÿê¦E4s©x¤Y3!*Àà© ¨#QL •ðÕœVI ´’Ú¼7-qÄ*›¢c”ÀJ#o( 6®*ÁàÛ[beP¿a·‹¼Ç½|ìX ›2ßi•pW ttz{t ~ßÂÚ¯îuMAMßi‘5{Ò<¸bäÁ–Lö›9àc¡=Nzäæ’Š?Æ«øZEÅÞ"$9ÌVŸu í'¥Xÿ‹Â?ò7øþ¹Yÿ))­ÁoÚSÒ_ûôßáGÚWû²ÿߦÿ œQTIÚWû²ÿߦÿ >Ò¿Ý—þý7øTôPi_îËÿ~›ü(ûJÿv_ûôßáSÑ@}¥»/ýúoð£í+ýÙïÓ…OEAö•þì¿÷é¿Â´¯÷eÿ¿Mþ=ÚWû²ÿߦÿ >Ò¿Ý—þý7øTôPi_îËÿ~›ü(ûJÿv_ûôßáSÑ@}¥»/ýúoð£í+ýÙïÓ…OEAö•þì¿÷é¿Â´¯÷eÿ¿Mþ=ÚWû²ÿߦÿ >Ò¿Ý—þý7øTôPi_îËÿ~›ü(ûJÿv_ûôßáSÑ@}¥»/ýúoð£í+ýÙïÓ…OEAö•þì¿÷é¿Â´§÷eÿ¿Mþ=%Tk„ûTg`#Ë&õ_jÀ¼ûÝÿÕ§þ‚+¤øûþ¹¿óZæï>÷ý²OýR_õ±Ÿ¦Ç™ÿ®ÒÿèÆ¢3þ<Ïýv—ÿF52ø˜–ÂiU·ýrOýŸÂ¬éš¶•£éñØYÞ"Ab]FI,KÓ¹$þ5[HÿU¯ýr_ýS¼ áíûÂ6·7z>Ÿq;ÍqºY­‘Ù¿~ýI5¥O„>iÿÂSiÿ?ñÿàDüMð”ÚÏüøÿWÿáðçý úWþÇþÂ'áÏúô¯üü*lQCþ›Oùÿÿ#ÿâhÿ„¦ÓþãÿÀˆÿøš¿ÿŸ‡?è_Ò¿ð?ð£þ?п¥àáE€¡ÿ M§üÿÇÿÿñ4ÂSiÿ?ñÿàDüM_ÿ„Oßô/é_øøQÿŸ‡?è_Ò¿ð?ð¢ÀPÿ„¦ÓþãÿÀˆÿøš?á)´ÿŸøÿð"?þ&¯ÿÂ'áÏúô¯üü(ÿ„Oßô/é_øøQ`(ÂSiÿ?ñÿàDüMð”ÚÏüøÿWÿáðçý úWþÇþÂ'áÏúô¯üü(°?á)´ÿŸøÿð"?þ&øJm?çþ?üÿ‰«ÿð‰øsþ…ý+ÿãÿ ?áðçý úWþÇþX ð”ÚÏüøÿGü%6ŸóÿþGÿÄÕÿøDü9ÿBþ•ÿ€qÿ…ð‰øsþ…ý+ÿãÿ ,øJm?çþ?üÿ‰£þ›Oùÿÿ#ÿâjÿü"~ÿ¡JÿÀ8ÿÂøDü9ÿBþ•ÿ€qÿ…‡ü%6ŸóÿþGÿÄÑÿ M§üÿÇÿÿñ5þ?п¥àáGü"~ÿ¡JÿÀ8ÿ‹Cþ›Oùÿÿ#ÿâhÿ„¦ÓþãÿÀˆÿøš¿ÿŸ‡?è_Ò¿ð?ð£þ?п¥àáE€¡ÿ M§üÿÇÿÿñ4ÂSiÿ?ñÿàDüM_ÿ„Oßô/é_øøQÿŸ‡?è_Ò¿ð?ð¢ÀPÿ„¦ÓþãÿÀˆÿøš?á)´ÿŸøÿð"?þ&¯ÿÂ'áÏúô¯üü(ÿ„Oßô/é_øøQ`(ÂSiÿ?ñÿàDüMð”ÚÏüøÿWÿáðçý úWþÇþÂ'áÏúô¯üü(°?á)´ÿŸøÿð"?þ&øJm?çþ?üÿ‰«ÿð‰øsþ…ý+ÿãÿ ?áðçý úWþÇþX ð”ÚÏüøÿMoY:kØÈaƒþ‘ÿZ?ð‰øsþ…ý+ÿãÿ ?áðßý úWþGþX ÿøJ-0?Ó£ÿÀˆÿøš_øJm?çþ?üÿ‰«ÿð‰øoþ…ý+ÿ£ÿ ?áðçý úWþÇþX ð”ÚÏüøÿGü%6ŸóÿþGÿÄÕÿøDü9ÿBþ•ÿ€qÿ…ð‰øsþ…ý+ÿãÿ ,øJm?çþ?üÿ‰£þ›Oùÿÿ#ÿâjÿü"~ÿ¡JÿÀ8ÿÂøDü9ÿBþ•ÿ€qÿ…‡ü%6ŸóÿþGÿÄÓà×í¯n"·ŽíÞEÀ#‚@=ªçü"~ÿ¡JÿÀ8ÿÂáíÆHî-4}>Þt‘6˲#.X‚GXCÅFá›çº†Y"Db/¼¬*ÀöÚy9Aä¶Öê“E=õ´“Á;壉HiðBȱžŒÙ`¼rOË•'#Ü»ÔKkn‰$*A%B#À*6úpHã±ÅsΟ<¹™ê`ó†£*I_›øwŠa’çÂ:ÔÆòË-„éF 3’„äþ…­5þªòj]Û·óÉ-¤±Hàͱü²6ÈÄă™1Ü[±Û¦+]‘æ=î7{]sËŽKi¯¦U†áâK9‘£…¦´óW‘¦ÉUœ®XHpv`5oM±¹]OJº¿›T¸³‰§Š D0²³µ¹Uu24¦2c”“1 ‘Ï˳=íóEÀã<°·¥µ+»É$6Çí±Kk2"\n^$…Oü´¸P‡¾>J­q£êòxwSŸÎt{iµ;› x-™.<×7 ¿qܕڠüÉϯyEŒÖíï­$š§Õæ™l”é’Fò÷„Ê\Ë³å Ÿ'‰Œ €‚|Sjs¥ëè²ê’jËu¨¤­3JmÂ)a æþä €|¼ðGMÕè})‘C ²Ò5ÜÏ„Pâʼnã¹bI>§4\O²Õn.--ÓQÕÚÆKÕºÛÜÛ•DûÔ™äy0O”3ò¨ùJûˆ³RhÖ7÷a¯’ò×T’îHå1\G$òmŽ0NÇfŽPUPó!Mçðçý úPÿ·8ÿ¹éô/[¯Í¡i{V5fv·Ý·ãH â["áÍô{€ ´GÐã?Ãì*)äY”HƒÑ®Þs‘´sßë\ÏŠô­"ßÂÚŒ¶º&› Ë +,vÃ+îcÉæº›¾¹ã˜“ÿAGâB{úgüyŸúí/þŒj(Ó?ãÌÿ×iôcQJ_ØM#þAV¿õÉ?ôZŸÿäI³ÿ®·ú>JËÒ?äkÿ\“ÿA©ðïþD›?úëqÿ£ä­gñ±CàGQET”QEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQEQE Ïúµÿ®‰ÿ¡ š¡ºÿT¿õÑ?ô!@µQY”gë×Òé~Ôõk[YfŒ8ùK*ûqëëõ®r_^ZÞØ%ä0ÛÛÃçG«Êb’TŠY?t2N?r[²XŽ2ÜuZ•ŒZž—wa;2Ãu Âå+)㡪ږ§jˆê ¡‘¤•cù<âÐ<'yì68 ü£Ó©ñ2G!µ—K¾‹Q,‹‹ùFIe`ÂO, E)åÇÜ=Êç›Oj·Iš-๚ñãd†(Äiæ^m ÎÆ"À[*œŒ`1‹½xb6cq6§}& ®ó–Hö‡ˆð²ŽTŸÞáv¶ÃÂ6V7Ð^}ªîiá”ÊZVO™³pImª&êCÀÐårrÚ{˜­R9¾Ò÷3[4EFè¼°Ivä!ùnGïcé¸T/â8ÓR¸µk ± 1ÚÉyû³Ë"¡EÀ}ç&HÆv`gÐSZé~V¹¨js$>dÛcˆ < EÜÍ‘ìÃÿv8Z¦žyu­Fîîúf³žö;”³g–å#ˆ+3mÜxƒpûN=H mâÈo¬¬î,ôÍBf½FšÞ±Ç#Æn“çu\"¯Q’r\1[YÝK¾[¶±2þ!A¥XÚ1‚ÞgÌ&Œgg¹ÀäL<9Vzlw×v’éöËk Ä[ ˜°€©Œ§%ä.r0 •‡„RÒîáÔ˦ý¦ -¬”¡EÆ]ŠïÈhá°v®s–>"èW+)ŒÌávòvLò#J‘†ŒÎ¸2'Êê¬sÂ’`ñ4ësª Ý.æ kIáÎYŽo3ç8(eff`QN9š ÛÅk°Ô/ÞÒÝ¡6°´ŠŠD‘mA»˜ÔnbÇábL÷z;(Õ%³ei/amÖw*ÚY|°¡œm-‚ªª@;qž2r@.ÙßE|×"mLaó6È@• œ€ISèÊè«5WN°‹LÓà³…™Ö%Á‘È/#ugbË1ÉcÜ’jÕ (¢€ñ¨¼#ÿ#ˆÿ땟ò’¥ÿ‹Â?ò7øþ¹Yÿ))­Á ¢EY!EPEPEPEPEPEPEPEPEPEPEP¹®Wm.ýÄ€TU@ÉÂ)$(À9#"»¦Ç~˜®M|5 ¸x~Ä‚sÿ)ßßãøÿ±£•ñ$št^ ¾³µ½óÈ‹ ²NŽØÈà`Æ+­¼å¿íšè"ªÞhÞÓì仺Ñ4ø-à]Îïb /OöÇñþ+7]í’èœ~%êb†™ÿgþ»Kÿ£Š4Ïøó?õÚ_ýÔTËâd­„Ò?äkÿ\“ÿA©ðïþD›?úëqÿ£ä¬½#þA6§Ò$?øè«ßî#OZ¦\•šà±’?×¹ì+IülPøQ×QUÚê0Gàäÿªoðÿ?Ag«Ù_Ûyö·h÷2nU<•b§õ~#E"‹ôUµEÙóôçüÿQëGÚ¢ìùúsþ¨õ  UµEÙóôçüÿQëGÚ¢ìùúsþ¨õ  UµEÙóôçüÿQëGÚ¢ìùúsþ¨õ  UµEÙóôçüÿQëGÚ¢ìùúsþ¨õ  UµEÙóôçüÿQëGÚ¢ìùúsþ¨õ  UµEÙóôçüÿQëGÚ¢ìùúsþ¨õ  UµEÙóôçüÿQëGÚ¢ìùúsþ¨õ  UµEÙóôçüÿQëGÚ¢ìùúsþ¨õ  UµEÙóôçüÿQëGÚ¢ìùúsþ¨õ  UµEÙóôçüÿQëGÚ¢ìùúsþ¨õ  UµEÙóôçüÿQëGÚ¢ìùúsþ¨õ  UµEÙóôçüÿQëGÚ¢ìùúsþ¨õ  UµEÙóôçüÿQëGÚ¢ìùúsþ¨õ  UµEÙóôçüÿQëGÚ¢ìùúsþ¨õ  UµEÙóôçüÿQëGÚ¢ìùúsþ¨õ  UµEÙóôçüÿQëGÚ¢ìùúsþ¨õ  UµEÙóôçüÿQëGÚ¢ìùúsþ¨õ  OSµ7¶2[ ©­Kûè ‡Lävô©>ÕgÏПóýG­j‹³ç¿œÿŸê=h˜Oúõïûÿÿ¥ÿ„ ?úõïûÿÿ®›íQc‡Ï~9ÿ?ÔQö¨»>~€œÿŸê)h3ÿÐǯßøÿøÝðGÿC½ÿãÿãuÓ}ª.ÏŸ '?çúŠ>ÕgÏПóýEs?ðGÿC½éþ¾?þ7Gü iÿC½ÿãÿãuÓ}ª.ÏŸ '?çúŠ>ÕgÏПóýEs?ð§ý z÷ýÿÿÑÿô1kß÷þ?þ7]7Ú¢ìùúsþ¨£íQv|ý9ÿ?ÔP3ÿÐǯßøÿøÝð'ý z÷ýÿÿ×Mö¨»>~€œÿŸê(ûT]Ÿ?@NÏõÌÿ™Ïü$zöë¼ünø@£Æ?á"×±ÿ]ãÿãuÓ}ª.ÏŸ '?çúŠ>ÕgÏПóýEs?ð§ý z÷ýÿÿÑÿÐǯßøÿøÝtßj‹³çè Ïùþ¢µEÙóôçüÿQ@Ïü IÿC½ÿãÿãtŸô1ëß÷þ?þ7]7Ú¢ìùúsþ¨£íQv|ý9ÿ?ÔP3ÿÐǯßøÿøÝhh^ƒ@º»ž;ÛË©n–1#Ý:±ÂnÆ6¨þñ­oµEÙóôçüÿQGڢǞüsþ¨õ  Å-WûT@pùôÀ?§ùî(ûT]Ÿ?@NÏõ´À±EWûT]Ÿ?@NÏõ´}ª.ÏŸ '?çúZ±EWûT]Ÿ?@NÏõ´}ª.ÏŸ '?çúZ±EWûT]Ÿ?@NÏõ´}ª.ÏŸ '?çúZ±EWûT]Ÿ?@NÏõ´}ª.ÏŸ '?çúZ±EWûT]Ÿ?@NÏõ´}ª.ÏŸ '?çúZ±EWûT]Ÿ?@NÏõ´}ª.ÏŸ '?çúZ±EWûT]Ÿ?@NÏõ´}ª.ÏŸ '?çúZ±EWûT]Ÿ?@NÏõ´}ª.ÏŸ '?çúZ±EWûT]Ÿ?@NÏõ´}ª.ÏŸ '?çúZ±EWûT]Ÿ?@NÏõ´}ª.ÏŸ '?çúZ±EAö¨qùÿtþúãÖ‘nãu „„Dßá@šâµ»É¬PO·žˆˆ\ÚTm8ÁÏçë]5þ­i§YËww+Ão îy'À—®8ïÒ¸‰µ­eå;|5q…FnáΞzÔ±¢¿ŠMÁð=ô—P-´¯|‚ûÆ7p0{ãéô%çÞÿ¶Iÿ Šäu»sVÑî쇇ççBµÜ$g¯?0=«®¼ûßöÍ?”Q‰ØÏÓ?ãÌÿ×iôcQF™ÿgþ»Kÿ£ŠRø™+a4ùÚÿ×%ÿÐETð¡#Á¶ÅUœý¢èí\eˆôÏz·¤È.×þ¹'ãòŽ++Hÿ„ƒLÐíì…ï' $Ò<è“;ܰ,OB:ãžÕ¥O„>jiRßÙKs2Ûí2D#ÇÜT€}òOø”ÿ|Þ¶Èó®¯ü¶¯¯ëÓœ5?¶øˆ+Å#wŒ—oôˆy8ž¼œÖ´ü'cw§øv [ÛY¢d˜²ÎJÄr ·¿š,Ë6þö{ƒøçùúûõûÙîãŸçëï×¾~tù›¬Rúsÿ=ϯ~¿Ä|ÍÖ)}9Œÿžç׿_â,Ä/ÞÏpÿ?_~½óóŸ{=Áüsüý}ú÷ÏΟ3uŠ_Nc?ç¹õï×ø™ºÅ/§1ŸóÜú÷ëüE˜ ÷³ÜÇ?Ï×߯|üçÞÏpÿ?_~½óó§ÌÝb—Ó˜Ïùî}{õþ#æn±KéÌgü÷>½úÿfýì÷ñÏóõ÷ëß?9÷³ÜÇ?Ï×߯|üéó7X¥ôæ3þ{Ÿ^ýˆù›¬Rúsÿ=ϯ~¿ÄY€¿{=Áüsüý}ú÷ÏÎ}ì÷ñÏóõ÷ëß?:|ÍÖ)}9Œÿžç׿_â>f뾜ÆÏsë߯ñ`/ÞÏpÿ?_~½óóŸ{=Áüsüý}ú÷ÏΟ3uŠ_Nc?ç¹õï×ø™ºÅ/§1ŸóÜú÷ëüE˜ ÷³ÜÇ?Ï×߯|üçÞÏpÿ?_~½óó§ÌÝb—Ó˜Ïùî}{õþ#æn±KéÌgü÷>½úÿfýì÷ñÏóõ÷ëß?9÷³ÜÇ?Ï×߯|üéó7X¥ôæ3þ{Ÿ^ýˆù›¬Rúsÿ=ϯ~¿ÄY€¿{=Áüsüý}ú÷ÏÎ}ì÷ñÏóõ÷ëß?:|ÍÖ)}9Œÿžç׿_â>f뾜ÆÏsë߯ñ`/ÞÏpÿ?_~½óóŸ{=Áüsüý}ú÷ÏΟ3uŠ_Nc?ç¹õï×ø™ºÅ/§1ŸóÜú÷ëüE˜ ÷³ÜÇ?Ï×߯|üçÞÏpÿ?_~½óó§ÌÝb—Ó˜Ïùî}{õþ#æn±KéÌgü÷>½úÿfýì÷ñÏóõ÷ëß?9÷³ÜÇ?Ï×߯|üéó7X¥ôæ3þ{Ÿ^ýˆù›¬Rúsÿ=ϯ~¿ÄY€¿{=Áüsüý}ú÷ÏÎ}ì÷ñÏóõ÷ëß?:|ÍÖ)}9Œÿžç׿_â>f뾜ÆÏsë߯ñ`/ÞÏpÿ?_~½óóŸ{=Áüsüý}ú÷ÏΟ3uŠ_Nc?ç¹õï×ø™ºÅ/§1ŸóÜú÷ëüE˜ ÷³ÜÇ?Ï×߯|üçÞÏpÿ?_~½óó§ÌÝb—Ó˜Ïùî}{õþ#æn±KéÌgü÷>½úÿfýì÷ñÏóõ÷ëß?9÷³ÜÇ?Ï×߯|üéó7X¥ôæ3þ{Ÿ^ýˆù›¬Rúsÿ=ϯ~¿ÄY€¿{=Áüsüý}ú÷ÏÎ}ì÷ñÏóõ÷ëß?:|ÍÖ)}9Œÿžç׿_â>f뾜ÆÏsë߯ñ`/ÞÏpÿ?_~½óóŸ{=Áüsüý}ú÷ÏΟ3uŠ_Nc?ç¹õï×ø™ºÅ/§1ŸóÜú÷ëüE˜ ÷³ÜÇ?Ï×߯|üçÞÏpÿ?_~½óó§ÌÝb—Ó˜Ïùî}{õþ#æn±KéÌgü÷>½úÿfýì÷ñÏóõ÷ëß?9÷³ÜÇ?Ï×߯|üéó7X¥ôæ3þ{Ÿ^ýˆù›¬Rúsÿ=ϯ~¿ÄY€¿{=Áüsüý}ú÷ÏÎ}ì÷ñÏóõ÷ëß?:|ÍÖ)}9Œÿžç׿_â>f뾜ÆÏsë߯ñ`/ÞÏpÿ?_~½óóŸ{=Áüsüý}ú÷ÏΟ3uŠ_Nc?ç¹õï×ø™ºÅ/§1ŸóÜú÷ëüE˜ ÷³ÜÇ?Ï×߯|üçÞÏpÿ?_~½óó§ÌÝb—Ó˜Ïùî}{õþ#æn±KéÌgü÷>½úÿfýì÷ñÏóõ÷ëß?9÷³ÜÇ?Ï×߯|üéó7X¥ôæ3þ{Ÿ^ýˆù›¬Rúsÿ=ϯ~¿ÄY€¿{=Áüsüý}ú÷ÏÎ}ì÷ñÏóõ÷ëß?:|ÍÖ)}9Œÿžç׿_â>f뾜ÆÏsë߯ñ`/ÞÏpÿ?_~½óóŸ{=Áüsüý}ú÷ÏΟ3uŠ_Nc?ç¹õï×ø™ºÅ/§1ŸóÜú÷ëüE˜ ÷³ÜÇ?Ï×߯|üçÞÏpÿ?_~½óó§ÌÝb—Ó˜Ïùî}{õþ#æn±KéÌgü÷>½úÿfýì÷ñÏóõ÷ëß?9÷³ÜÇ?Ï×߯|üéó7X¥ôæ3þ{Ÿ^ýˆù›¬Rúsÿ=ϯ~¿ÄY€¿{=Áüsüý}ú÷ÏÎ}ì÷ñÏóõ÷ëß?:|ÍÖ)}9Œÿžç׿_â>f뾜ÆÏsë߯ñ`/ÞÏpÿ?_~½óóŸ{=Áüsüý}ú÷ÏΟ3uŠ_Nc?ç¹õï×ø™ºÅ/§1ŸóÜú÷ëüE˜ ÷³ÜÇ?Ï×߯|üçÞÏpÿ?_~½óó§ÌÝb—Ó˜Ïùî}{õþ#æn±KéÌgü÷>½úÿfýì÷ñÏóõ÷ëß?9÷³ÜÇ?Ï×߯|üéó7X¥ôæ3þ{Ÿ^ýˆù›¬Rúsÿ=ϯ~¿ÄY€¿{=Áüsüý}ú÷ÏÎ}ì÷ñÏóõ÷ëß?:|ÍÖ)}9Œÿžç׿_â>f뾜ÆÏsë߯ñ`/ÞÏpÿ?_~½óóŸ{=Áüsüý}ú÷ÏΟ3uŠ_Nc?ç¹õï×ø™ºÅ/§1ŸóÜú÷ëüE˜ ÷³ÜÇ?Ï×߯|üçÞÏpÿ?_~½óó§ÌÝb—Ó˜Ïùî}{õþ#æn±KéÌgü÷>½úÿfýì÷ñÏóõ÷ëß?9÷³ÜÇ?Ï×߯|üéó7X¥ôæ3þ{Ÿ^ýˆù›¬Rúsÿ=ϯ~¿ÄY€¿{=Áüsüý}ú÷ÏÎ}ì÷ñÏóõ÷ëß?:|ÍÖ)}9Œÿžç׿_â>f뾜ÆÏsë߯ñ`/ÞÏpÿ?_~½óóŸ{=Áüsüý}ú÷ÏΟ3uŠ_Nc?ç¹õï×ø™ºÅ/§1ŸóÜú÷ëüE˜ ÷‡¯ëŸçëï×¾~~ÄRXéò\BÊ4ˆÜáÏõüë|–`u/§1±Çè}{ç¿_âåå¿ñÌ<#vU •Ý<]W¡Æx×L¬_ñ£û^Ãþ~áÿ¿‹þ5zŠ9¡ü¿ˆZ]ÿö½‡üýÃÿühþ×°ÿŸ¸ïâÿ^¢Žh/â—À£ý¯aœý®ûø¿ãHÚµ‹)ÿKƒ‘ÔÈ*ý ÷ÛýÓü8J-è‚I¥¹KKe{ÊAYH#¦ ŒGéŠ*àÿVŸOëE6õ)-ÿÙeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/svn-properties-view.png000066400000000000000000001520011203611042400331220ustar00rootroot00000000000000‰PNG  IHDRV-ʨ.€sBIT|dˆ pHYsttk$³Ö%tEXtSoftwareMacromedia Fireworks MX 2004‡v¬ÏtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'ÚprVWxœíY½’ä4–¬YÛÒyöö<Ö.{ã‚€€"„^*n á§ ž€*²‰xBr€r@@BÆ\ KwëÇž±äñøf@ßXnY?ÝR«Õú™_þþù%û’½ó€èà÷ÐÁ{ÿ°ßwôÝQèº}×íðéû]·ÛuŒA L€$ ûýŽ~ÝŽb; ìÿ€ßÞ~÷jôoøó¯>½ùñ»’½õæO¿_Cš  Â7>d±OØ öÕØÚ„)àX^±ñXæö•xÂ3ï±/Øgð{Á>g_ŸQÙ¨FJ¦¸¢„GÂX¼º&é‘$¾ä¥d{+k@³Ru¥[Ö·[­© RfE†ÕE1|¿J|¥d ¢ñqc‰ãöýêý¥ª_“(š^1 À²2¹€ˆÜþÎŒÛNˆ'h ÿ6Ò!”cùÚ¦g†Ø×ÅÅz¶£þU10FÐ<(‘=m˜ú•±ÆúBí$”4Ê^¤e°ÿh¢ÜÚ ¡(¤Hœ6d³8ƒ…""RB¨8"Œ#Ÿ³ìO?2;~’,͹˜E(„qù­®žW÷äª1ˆ7·Ííöö¨ÆÖØHÛóÊ€€ÎNPl0μœh)ê‘ÿáÖ24D‚Ì•;£…Üœƒîž  ì«u5¡tŸÏd¸ÿç¡:·ÂQ½€|tLÂ4•cëñ…¤$g‡¤wxÍyˆÇð²ˆüJoõ½'fH3ÂX%-¶úÎ~ØŸ›5e(Žì`Bј¸tÓ‘±|U¯ëõ¤ò¨ON‡¥È/ÁåÌ®WÅ0 CV`fÖ-fÖ/‘›<Éú<ü>Žc9¬L)]`H¾ñºÆ gûbä˜ÛXö\勸v†µíþÅåK§Ø 5a»“ÿÁNv€±_ø¢Ú·Ë¤_+íKö«¦®…ôl¤M\JgÈg§:ïËb~ $ë‰åÓ'…FìÏN-»E›¥Ùz6Ù&ÈX÷MÐQùZ– ‚Ê•ËäGôÏN«˜ïŒÑÞœêò™ö ^QmU©œÁY“õ6It±|Ôfaü¯YZi½Ú˜M¹`;=Cu]ÊÇæoM/îî!ªšzÝÔÐWO«MC}l6U]AЦ°n6ÍbMAØ'ÓAªƒ¡iïÛV·[Ýîžk8Õ ÇÑÖ¡¾„\hX+UÕ_‡lÉxëùyä Ë#J1uTˆ6¼ èŸg4³sdæ—Œh†4Ë9QXWp%É1[ðc6–¸>¨K·ÞðÀWdÿ*®qd¨zñZ®û­"–X‹žY¸rœÁ#ùæð«ÊÉ%¨ÏɘZ1f *?ÜRœ”žÿÎYúEfNÅ ûEòe¿”X2®xàV*6þ‹äϬëPòÕµõ=Ò,u¾êI-ÅößÞ¯h´ŽsÈ'ªú™ß³èaé¥úGÅ7$¼*ÌhŒŠ©F;öYœý"ù§*¡°’\½WµË w½Ž­óhŽÚÝ+¹&L³ûQ³ÉiåûãºCzó×À^åp+D˜qBË­ ÓJô¯A‚ öîx. ø¿Å›©HËâ¹aÿ¶”r¡|ù!ÿv˜;Ù¸tG§iVåe柫78z8.ÿÊü»Ÿeý?S­CÚÙzAÅÎ1¿Àn‡>÷tP§EŸ:=*ŽÙÎ~w2mº³Ö€UØÕ}ÖÈ»+¶±—ÇØ+}Ö>1&S /Ó>±¨èÀN “³RÈü— mKÛ†½ðù'Øz¥¯CÍh•˜×Ä̸)ÌpÌö´3Àå³öê.´q.66Ãfœƒ®Ä&Øè9ØÃÆ2+£cØ ŸÁã3x<ÇàñfýîoÐÊpÖïó²{¨9>ìàå|ÆÜÑ>r}Aµ@éâGÆÁ„ 𦓇¦_MIÓòД4Í_îè$]Wa¿Ûb5}VÆ!ýŽCÚ¢ñ8ÑèhÀ A·´l]¾Qá¨Ubi„örÇ­,8nýªã6 £‡)Œ¡öã"ãVF§”®Ý töaÿ Æ…Ñ)ÃjfÉ Øè7ƒÍ“6×]K¶#V‡ ô6!ôŽî>‰Q¬&dFæ-e cé(=U¢Ô&mÂT˜?Ún+NæÒqz¬Ä‰¿ê­‘ò4Éa9 !çZãmJ_»Ò¾ÜÉßHÚ¢ƒÉa0ù &ŸÁ¤¶4˸¨Ñ ÷»:ଥ¸§O`]¬ÐhÌ5Á{A»HgÐè A£3htž€æ!‡fã føü½D8@ßq€ÊÍh(Ò>®Í¢úB€<; òíb®9÷› !“!d3„l†Í>kÂãÃÛ wvTÁPøÍP¯?AÉ.™ã—¤r æi49”æ0Ïy–¡¬ä>/ ¦Ù,æcæ(Ü{ Á¼Â _¤Q‹Jù¶?iŸò4|ØVisÔÐíêãÖÑ’Dˆd˜ç='G®é•ÆÒò¸m£ÊØåèÆˆAç ¹ñ’Ì =Ϭ0$»rUè[ÐK£Jp’ZI³AžŒ§&ð1‹µja'¹¬Jµxp«µÐ` õ ðÚJ`f; 3c(&¢¥:C-È#6FÅc‘&n.ŸDiÞpòXŒˆmQBëAíícî°4šË—ëл8F"ŒÞ‘¯~6èì쉔ŸoçKãÒ0åÈ”¿T‡Èæ±RŸcdìÒsçâJÖ‘S>Õ”Gò~2XE …Æ.aM(¢1QEw̧M<a¤ôRQìxæx ­ôÍÇlëM=3P?ºÀ¬®€‘íæ˜ :†a9ìŒqéùYk¨xá·K¶ÆEñâ£4pC»„¡Ú hœ˜ø¸%—?lq´ö…ñ‹s³‚ÅFXÚè)FôF1Î_hnXÄ7Kºfä",“-ƒ¬éñY—œ’’ØZ¦ [—aë2l]†-#@܆¶hËôöSªZŒã€V4í÷*JZ ÈrŒIÒMœ[†KgERRR@d/®­LAô~dÏøÚïÁ&ÁÙdp’ƒS¿®^Ú MÆ‹JÅÄUVÔÌÔá0¼XЩÉu“cêrP];K=£µNfè+™´C‰¸L7ÀX"0|niG|k¬•·Š¶θLHFm -ÉZtSKð-‘I»)ùØÝO ïË]¶*sÑ—“ÌQ+R¼~+žPNÑöÉOyÇý•w4yŸ)“Èn!bÔ#™Y;©‘¬tKh/dño¼òP‰¥ˆÃ¢ìQ)‡etÏÌqàæ–õþÉ)ZœØæÎ‰P=Ã'ðü–ãy¢HQkÑÚZ‰E«þ¢KË8gIÓ…˜}……H2JMF »÷Ò ‡ÏôØtKóÁ6Í„'¦Ààü`cIVp!†Ïb¢ýKõ}ZçñùªFþá+=½¢K• |ªÉA LÉÑqg…YúF °&ƒÕã¸z Ø€§kØÀ“ç`Üè‰tâQ/Úvx·ÇÍ ^OXæý´ß¨ŃÈÃ^üÖ¨ü’¯¡ŸΰlnÿØ {+`ØSiQIH3•HÓ$Ž“¢÷˜â—…w3‚÷‚ŒNLE9/cÿˆÐ¿X’2üñu—¤8c8c$¹§z×È×µ«+€3ÂÈ,'Íb¦øAÌà‹Våø·± ÿ–²¸¹úÒJ ‡Ó&è×Vѯ€Sæ ‡¯ƒ:|!ÊäÒs|z Ð~S3ÿŒ@¡’’q _Òxó0%x.äašž2zD¦{‘Æb¨¢ƒi‰Ðšý×r0-•ƒI)YIŸÕ`¬bɇ|܇ÉqúK2®kªS… ³§âóWä™Ë+€åU±\ÊŒ´ ÙôåR*(£p‰¢É‰æ¶k2•YÜQLn7"§RlôNbüª³a/%#‹°GÏ?Ÿ´Òäùݵña†c3„ݤžúÔÔU««àeÁŽEò%ÄHOfÈ›|¨SiQÉ s9f²bfƒv_‹§àäOæ–Š¥¥C¥ƒiéåçRò4VC»8LÍäR˜µšðbÛ`³øHlöÁ®À°/ £žPLæ”Ãtn&ý ¦xŸ&ù|dE+Œq6™Çœª ë<0ñ+‘Åý¾¿Ãö“7%ÒLŒÜ ®˜Ò Û}6çWÓÓׄgþ䓜ÀK­c<Ë<÷Âu¨Ì“L$åä“eqf…3“ ˆáØOEâ²ái´9Uà í„7$±Š;”‹ kUDXm°sø,•2žÚÂlòI“¯U4ݹ2öDè·5WB ÎÈ';À>ÒD~IÎŽ0âïq(-­½À*d£L.^™“•4#“0ÂxSêåœJÓSDJöÙ”]§Í9Nààì‘ôG>bÊ ¦\ú¢€Ì(¸r‚1Æ*Í3V ÙÃÈ‚yG‰÷§ÒQdØÜE#rFù°od Znõ…Ea =æ·/Ü“ý´{RÝ£È9ùD–Ì;í³XöÎ×¹åe[ç SO™e‡®fLçÌ*á‰,csD?m!ø8†àŸä'o‘#SCJ¨/áh[Ò ?¼Œ¦r $ß$h(Ö´iŒvˆ ›èò o‘E+c3´V+’Â\ ¿R8( gtÎéÉh\ ÂU·(¡Ÿ’ËÏ R.r°l¬²Šm+¶D¦ÍHê+M@wÃ-þ4”dqñðÀ=3عp$I+Gò’a¤ŠÓý³ÈrzO)–U£û굦ëÏi”ì ïûÊPˆ˜ÕÊ@e{JÉ0ù^£O{Fe-ƒØAz]ôÄç2,§|ÜS°YlÒ‹ÜÉO_’] t0ø7¯ƒ©œ%XM/¹Æ*ÍQõ²”}¨Ù@eÕË/˜¯.q³>>fê 7Øp%c@iÖ9l_M;ñ§pCAŸv“Ø#J!AL/ ø@B9ͬáBè0:Ì8è°[ïìÒ4Öéµé^Õí³â³NÜ—câD£Û+u)^sšY³X—LÖ%(ö¢=ƒþÑ (F|:ºˆ½Oá<2ƾ"Šh¿ƒ!!^WÑÙû€?Þa?€í½.¾Š¥Ã^±¢ÓÏ,Veˆ*þþ¬{uúõ¯c,x Q…?xÆBÈS²&û½¤û—åÖãè¥U)^³˜Ü,&7«–[¹=ærë2Ü-FOÞJÒ{ÉHuÌi‰c“¨Ï$ê×­"ÑÍh$âZ:3qó#Œ­ˆºÓœºÅ$g3ÉÙµä‹Lä ¼¤±¨>æ´Ä1×bWèEZE¤sÛʧ·{Í3¿C¾N"öŸfì_L\—SKkiuɈ bÏ¢‡Ü ûO3ö/&­“V£–Ö"Òê"£!•ùþÓŒý‹IËcÒòjiU‘Ö#.­]þ,êgâ·¸qòˆËGuÄiá‹É²ÉdÙ¬eYE–÷¹,[´"}­S‡ÑSagѨ“÷.&§€É)¨åTEN‘s‡c…½~GvÈç5²C>¯YLf#&³Q-³Efµ—”$7NÍjóý§û“Ö˜Ik\Kkg»;GG6þfdÆëNsê“\È$&:ö0R£±6ÔÚ$Šw-ëíBmäúÓ‚úÅ:iðH/–m#†h§m&>Y‰OvâÓ¯:›íQ»VÓ|5]  Ö û£ÀçÀتÞ4¶køñÞèÏ­è–†#/p’•^TëæØp•72GÃ`”Æt=]X—8žrqìRF ­‹Ñ*ì%VÂY1Ḫ¾™º$û¦?7=Qk › c˜¬µ¨vl‡¶œáæÝHV6œì rdÁÞ½î¯K)6¹RÄ^nuŠ·ìºn’žîéÈ"1šæÄÃϺ¯ýàrÍI¶û˜žêÿƒ{ü8þF©ó7à|=öki¡„å>Âü+„±_ù è ïùXVõ?v¶tfŸ„Ñ]¨ÎŒõ<5¦ÙW€–§ø4æŠî=­}Òå?@CíŸl”ósïAoÑ=O1B‹¤vAã§Ošw‘©ÏÄs±üȳL•Ï܈ΔÇ5‰½;÷(‡ëmÍÎ5;ÅììÔì\³óbçˆ/I¨ù5C× ýõ2´[3tÍÐw¡û€ÿHÍÐ5CÅ -smÍÐ5Cßf†þ>ÍÐüxZÛÔØ—ÏÖœ]sö×ËÙfÍÙ5gß!ÎÞäœý€ß í· Ã5G×ýõr´]stÍÑwˆ£Eä#ÆÑ5C× ý3´U3tÍÐ·Ž¡ú´æÌ»yþìlÔì| عμ«Ùù.²óª3ïjv®Ù¹Î¼«Ù¹fçZÝþê¸Úá ÷"C7à׆ãW[°…ß…}Z㻇äù!c_/^à(tðîÆ ÊéÞfBö¢n5z§n{u:g’>y gà1“~yPš  ‹ë\™™Ü•4­x–•×)ËÎOYüz3ìgKø4uì}I×ÝŠõéÞ·ñŒ°é\²Íjú2Ýp@î¨-M²‘«F OÙžô"NA.CÁœã›’¾ü7´Ô‚ûé.™LßÀýœ‘\ÑJù>_D îÿ;º›{Ôòþ­ˆýÐêYduq}Óþ!ë¬öW$›j}ª&; ¤€èi³Y¥ ²1cëGp”ݘd×${ur÷R¾À38:Ýß7tOŸùјOÛ¥tOeÎZ—®l€}.Xæ|¥¡j¹ê˜ÕAòc8¥Îì úé(ƬYrÌ>†¾ ¤Îȶ}Ãùð |~« 3%ž<ç×›äY#†‘g‡iÖEÉ–ÅŽ/ßÊÔ#òà¯|}£äÝ3=ϼ»ŸŸUþî³[ʺûüVä»_?y÷O3îþ­&¾˜<ËßÈB@>SÕ¿Ç ŠZ|¢D¢Lkh¤Û‘½e5"C}S«ºw2Žó&ÏSõï‘üÖ+±(ni3„܆q+ØùÔ_’×»gË•­þ©[¿KKÛ5K×,]³tÍÒwž¥Ÿiûô¥Õÿ㒗įØú«´©Ëôä:¾Õ(ò­ÌkøV› ûKºçb¿GmúNÊœù”¢ãÕý·‡pÆ{:6r–ôD£^Ÿ·Cè\Ñ=®ÖƒK·|íGÚe]K»hî$ì?iòÄÏg{]t¯;¸š¾:ÜÁ/È}ÍŠÙ|Ÿé8l/n¤¯‰«Ë¼æÃ9¯/õºK.õªëÒîÍù¨eúû~e1lUÛÉ™÷&cØ#Òp›"ÔE®}Z¿nJ1l1~b›Ö )cn,Ž{™k…ªXò}@ï3­ó!–_¢y:½Î»[ËD†%-„ÌïÁUñ©áqLÊÒS–OÀV¾Wåå¨Û®&©ò tâŽþLÛNl…K'åQÖǹ©—Fÿ)Š緷¸Ï· WþŒëL+’Dq?ªIÅ$y˜4Š|²X(mÊ"{ž­ú”˹)©ü=ZYd2™^ öóöªj¾u!ùväÝ‹¹|1ï~UoˆÏpô!µª*UË×ÁݼS¸?Õö 7—d‘OhMr+Âc•ökq?®éÒ£H—u ™ü'ù¿ñ> /øŒâ$hL°ž÷ã{¸Úsš‰²ݵHý¡ö›†ï ù°&ig·_MÊMþ,® »‘bÒÈÃç†pöOä—¸d» ¡“56¢¹È¢ùåÆF^Âþ7¿ã¸Î¤=ào O²×­:ó_PúÚû„-ø jräŽÂw_ôóûPMÀË# Á%éþDdz\›X8$[mŠŽn’ßê’¯çÑ~Ê.¿ xF²žGMâZÌ3ú{)1OÖ¹#-ëÙ”bMèqÆB=Z—&äõ¡*ãã,lQŽ›…Mº¶Gš€iòzHº0"›Ô¦9 $ÎV¢ ßGsÞuU>ø!ó천pŸg¬Q¾îÇè©¶äÞÕh€Üj5™4w£w‡9fÌ×cYæi_¯±fËKúÃäÞ•[¿ÙíW“fê™ôßá9[Mš™){KäøÝ6I<t>Rn?«ÙвWɈE½¸Žgbß6Ï$Áj—‰û~C«Lçô\÷2,ë¼ë«XבX÷Çœó/òž ‘â=ÇÆõ 1þ·Éݚ׬ØÏj?i½útÔhGU·b“¶é”é;¤(]@zhѼpŸ ÿ:ôŒŠÈFË}Lö?Îç3IÚªþ^ò2ZKZÓ*Ò}=Q–ÌO•ïS_>­,Ö´ú|ðU?/–Ìê^þfÜÔ9ÅOŒÒEOŒ¡W5›]ΨŸcÙõ3c_Ï3cž¤}埚P³°xó×11(Îñ«ZᬙxL\ýÙÝ›gâô›Bj.®¹øëãâòO°ÉÏP~Oëý_ ÿ˜už üÛ6¿kÌyÞå çŒ2Wé3åõ ÿbtÒ ˆ´ÇŸ‘ é¹Ça"~åÒª¸EÑjüË>cÙ¤5®ÕDMªÈhƒñŒÍQ+΃K·¼Z™Œhßí“ÉiÕe@ˆb‹«oå÷bղœ®ÕÈêÊ™h,ÊÚl'| çYŸrlæÒúnžÿ´Rù¤Û½ ‰4@ Z§iÐz þuÉÆt(Nyƒ™õA$³îöàjÚÚ9œLÃP§ŸY‡}jÒϬÓ$÷EPÙûþP‚£ˆå”¯pšYÓkŸ §ÐÊ 5Áb·CEÿh25áÓ`25f^›éõXÝ>+^a1¼j]MYÃ÷`jeÃæ#Ü΋«éË.ãé³}^ú¿ÁõàžpƒƒödÚGvHñÈÁ«Îr.4Û}Õ½švŽx ;‡=,º‡t'Ýmùð»ÞÅ*¸XwÀ?Æl»{ÈŠ>Û;¬hSч«ŒáÈ6ž°‡×Ôg?w™L,ûìã +ºˆÙ^狟ûxŒå.û8ÀËýÜo®‡]º\ÿ?öO±h³â°Oп¦Þöûxûƒ#uÀ5zÔ/¸ŠLcFT ¥ÑjòV£c{™ìAZÚ”^‡ ƒpè ¦u9ZûÒ€å ن؛=Ø“m™O²M6Äs—äµ[ä YìNÅ\fÁ_µsgûzUN wRímÂÄ#%ì+%² c½ŸVÆãðÕC°‹~:LB¢L Ò:‘\õ:¡mèmkBTúÎÊþ~vaxœíÛëNQ†aïÿøá¨11ÑH›”@àˆ`IOz¦­¥€nûí²ì03=PH`·ïJž‘È;L‡Îªs+4åJÃÕWkv]c¨Ùê¹Vû·ëtú®Û¸~à®®nÜ`0r}ýÇÝÜüýOo7 þÿ:É2™Œ·¶öúÕðSB°RÓ¨—Ýííõ¯ÕÊôxÔ_Óïw]»]uÆ©oZ­ÝÅEÁå½ÓÓ_^¥rìJ¥ÃóCÃ?®\þIÿ€Çú«}¿ßq½^Û·½¼¬?V»Su­Ö…k6Ï?4ùü.ý믮jßí¶"íÇÝ­}½^¹×ÿà Kÿ€Çúëœ?þ¹u7£æåˆ’.Ðìí}§Àcýõ\?ßkeý··¿Ð?à¹ß¿êe³ßSÛëãúS׆Ökë3ýë¯k|õVc£ó¾¨wôãÑþ¹Ü'ú<Ö_=íg>~ ÄÛë\a×ô{¬¿zÚu¾D›GÛûùÇåréðŒûùßï&jnÎÏOè¿$cýõ:žÎõ:¢¢×|Ö^× ú| ýÞhu¶k>c¯GûëZA¯kèöXÿBaß÷Ugû}/ÞÝîèZ¡X<ðãú/ì±þzÝOç=¯ßû»þ]Ô^¯hvw¿Ñ?àQýì/2‡‡[Üÿ |Ô_¯ûïïgü¹<›ýà66Þ¹õõ7¼u››ïÝÎÎW¿hûk§%j÷XiÍjÙúû}¨»¢þ‹Æœ×Û²sZuܲ97™uö_´^WÿU¯­r¬eæTv­*w‘97ý××ÿ2Ç[fŒ&³îþçm¯³ÿ²í««®¹VÍmÕîþêFiCÿ³õª{ªºú/»O+Ú·êýeû»èœËÒ颤ôüg‘T}ޱר&®Ñ1cvzÃ(ú¯wüuÙ}ì0Æ[ë?·ôú£(úO;ý›Û(úO;ƒÁ]ý§áhEÿiçîneÚ?麿ŸÔîêªNOÏÃþþç°½ý!lm½››[´Ðx<©]¿ÿ;\\\†ÃÃ/áààsØÛûvw÷h¡&úo¯×OçÀÙÙy89ùŽOh¡‡‡¿µ›þ p}ÝN–šLþÕnvŒÇž4qA=šèHCìïÿIÛMï;“¼óíò9::2õÚ«šþã@ŠþŠÚõ#;‡Óm µmkBTúÎÊþWºxœí‘Û8 FSHI!)$¤’FRHn›wóî HÉY¯Ûx3žÕꇤ¢úùs†a†a†a†axI¾ÿþÛïÇÿ»'UŽ{—áÙùðáÃo¿¯_¿þª÷Ú¾gýW9ª Ãû¼Ïâöð–þ¹»¶ŽÕo'®GW {>~üØÖÕJþîÿlúôé×ßoß¾ýüòåËú¢öµ¯ò)*/Îåç‘Ný\®ÚϱÚoù“v[iZ_Õ±aÏJÎþ/:ùþüù×6õOÿ-¹” 92b?çTþÈ™×þlôkÎ%?·Úåöìä_2òø¯èäÏ1äBµ ‘sµ÷YäÇ5à>¾:†>Êc=1ìÙÉÿ¬þOùwï èyä^«- ×Ú¶,ýÌXÉßzèû•žuÃÐsMù#×’U]ë>H_÷˜ÀyøY’Çvº!Û‰õŒå_mÄi ÿRuâþs´]ÍXœm§_gû)YYÞ)úmæ]×y,—²¬mÚ z†1Éêša†a†axEÇß“G°×§ÿóo/ïYòÝú\êkº6õ®x„ËèíjÏægHð–ö¾»–÷óüÏØñ|†yž÷u¾Ä.½•üÿ†þó\þô³aÏæŽM&ýwéÛÃäké#Ïú$?Î]ùMço¤Œ\ýȾ,Û/íßÚ¥—ò·âQÛ@Êß~6s?)}‰Î,¹ l¾ìçœô ØgX #ìvçQç´“ög·Ú ÷Bž™òîìÙ™^Êßuô¨ã®ÿuh½à¾m?Ž}{]ŒÐ.~È}Ðv_÷ÿJ;ëxçoÌgJöëôY]’Þ³ë@¶é.ì«)™áoqC–ü¿“?}ß>@ÇûXŸÀÎߘò'-üäÓÉÿ(½W‘?Ïöú›²±¼‹ôÅÛçúÞéô‰Û ºÅºvþÆ”¿ÏëäOœÊ™ôRþœ×ùÃþvì[K?[A}¥?-ýwöíåµÔmÑÕ‘ý}¿g\=ö€c¿¶}ñ³M¾‹ ½ÃüÃgggÓêüàÖ èÇ„çÜÀô-B^ëók_g?Ìò ¯F?œ£³« ÿ•Ý×v0||ØŽÐØ=ǧH¿PÆîÛgçsì·ã/ÇhØ‘ñI ÇtýÜ~×{‘òçún^§}¶ïZæøºyDžë—óÏì·ó5èˆéÿçXÉ¥ÿWvðô¥§O)í"û±c0ÎËvYà“ØÅ ÿçZòï|~à¹_%/Ï,Îôp\€ËɹyΰçZò/ÐÉé;/x†ÖáÎsõü_é·9?ÿ«PÌܯ5Ý»\í[½ãy|ÞÙÃçõÄ8ÔÏÝøŸgäû¿ËʱL{ä? Ã0 Ã0 ç_àk3¾Àç†>´’ãøŸÛÜÆøzä«Éø_ƒüÇøü\Sþã |<®)ÿb|ÅÊç7¾Àa†a†axn.µ•të†a?lÄ÷^Cã•ßvk­¬Ø½#®àýÜ~eûî)ÿ´3<3^×Û¶¹Âkð¬dlùcÁ&·jK+›œåo"eòú<.ãÊž`›Áê^(3zÌòÏöèu ŸÁ¦lÛ+6»úßv´î›<™†×ï‡ ¾k7]ÿ/lÓc[`ýOÚöùÐn}½×çòš„«ï ‘GÊß뎱š×Äzt¸^vßä2)?;WmÆrõ5üoäcö³ŸþIzì?ú¾˜‘Oî÷zx÷Œ{¹&ØÇ!û…e¹z.þ©ü»ýüÓÔÅ"ѯÑí¤ô ¹Ý1üÖóäÁñGg×ÿí{+Ò·’×lûw<ý=}GݽìÚFƨ^ú)õ¶ìzIpäG¿•ü ¯ãKì¬ÖœÎ{Í{ÙÉßeÈï ûšG•‘12éÇÛ­¯Ïq¯§™iumf—“>¿.¿ÕþÝ}¬®Íëòœ®~žaì? Ã0 Ã0 °š[u´¿›+ð7øSvq¬ÃïìæÖ­öyÎ…ç ½?Þ‚‘}¶¡åœXùçwíŶ‘ÚvÌ?ßå°ß©ð÷DðÿùZÛ“ð-q/–?ß³ñ=¿ê<ËÌ~¶Œ›‡#ýßÙæ­ÿÙæ»>¶ÓÙFkÿŒÛ"qþøz°r­¿Qèo 9ÆÄr¦,øˆî­§nÍY[;í§oæ:)@¸-`×§-Ø7‹ü({α߯›SÒí§Ýú»@¯ÂµåßõŸKäï9èîüÖ ¿É¸“>:ŸnÁ3éç _[ÿ_*ëmt°cmìÃC>äq¤ÿSþ´L“øÇ<²?ç=÷çÝ<ò¼6Ç;ùãÇ«ôsü÷èþÜa†a†a†{àxËŒ™\ÅÞŠÝûêpxç¶?0׋¼#ÿ5žßàøzæÇÑ™ƒc¿]¦³²¡x^úêl‡ò¼ •ÐÇ(×fù±ÿ:~Ÿ¦ËÓÙ£^l iÅnç59¯³©žWÇÏ~·\;Û?vþnŽ—í»öç’6eÌr¥ßÑý¿óUbS~vù§þ£^¹÷U O7O(é|;+ùSÏéGôü4|?Øfí´ÿÐ÷¶*?ÇrŽ—÷W~Ï2ÏoÅNþ–ÙŸÊ¥ÿSþ9ÿ×~dŽa«ç˜çòîÖ‡ÜÉßmH‹6öìmÀXÿ[ÿÝJþ…ý~Îs.ãÚyœÑÿmƒ4Ù¶OÜíï|Bÿ­düžò÷ø/çøÙ˜þÁb5þÛÉ¿ÈyþÝøïUä? Ã0 Ã0 Ã0 Ã0 Ã0 Ã0 Ã0¼.ÄP—~þ*ÖÎ1@G\⟿äÜKÊðÞßrKXÿ˜µs2â±(ߥò纎Jëì·º8”ŽŒ'>â’X@â–¼ÎQ¬ûQýb£àÚqôŽòwx‰ ìb÷)“¿ëî¸_ÊK|•‘vÎ ÞÜ1çŽÕM¼6keŸe-2Ç›ïú5ùŸ9—ó?K^ŽEº¤~‰9òϱQï±®Y®×F¹8–ëN?å~;:=J<—ïÛßþ¡-ìtñºÄ’yNAÞÇég»þCþŽ \áûNýâXÊKê—s)'é^Kÿg\~âç2}›6í}Ô³¿·áï)¹Ün]O»ûrÞ^Ì÷³j‡~†"·î{pæ¹âù29w€6”Õ/Ð.Ÿz-ví:û+ýÇÿ£ó²M{ÞW—ýûJY¹¯Z÷­Êêµ¢`%·Œ íÒ¤l9…¼ç•íž¶™Õ¯Ï#OÏUz+èÁUÿ?;îýùsŽçÜdš~vñàN·›‡Dç7*.Yç«+v:Óye;ôø8Ë}¦~éÿÝ|…·²+ÑޅNþ9£àÝÀ}•{BÆž#t¯é˜×xîãÕ­sXÉ¿k¯ŒS¬Ví›ü/Õç»uJ=oê Gý¿ð<‹Õ»L'ÿ£²óL¬ò:äD]²6Üj¬f™ògL˜ëz/¯+ؽ[{Ž™ßºrðÝCôM®Y×q¦~áè[»{y‹¼£®òÍy cÈzA¿§Þô»ô‘Þ;Óîwï„«±€Ç9—¬zÉszW¿”ûH®œóìóV‡ax3ÿ ‚ú à¿%£òmkBTúÎÊþ^3xœí¿5ǯ¥Aiùh‘h¨Rñ€DA„R* ¢ ÞŠhN‘8)Y‰Š Q€înïg‘H„BCt$ZÄ_0¬÷˜Ë¬c?¿g{ƿÚýl¿íݳ'°óôâ¯KÝýûº»w?ƒÚ——ûÁÁT©† 3Ã.Rϱ/Ý7hÒ±°Åþððš±bÆ‹}w±ì.öovËÅ¢Û_\ß’I__ï+Dîpñß°¿y½»´å3­Ç…I7ÏK÷ Î80yV«Õ–Ì<7¬7ŸËgêïë1`—êTh xù›u¾Ÿÿë±°¹ÿ,Á½ÿÞ­+IžIÆ€yvtt´%» ”_†moæ:”NÉ7¦àÿâµk[êÓì<ü®g!ŸSŠÓÆœü{Ö®4®?׈áÿöÇ?lôîî~÷ÑwEq ÅOÂìøÇôkì1ËÞ7Ìýñññ–|ü ï[{§Ýí¯v®þî>øæ·Í½I·}ô2qâ¤÷÷ö§Ï‡´|/WšË—+¿ý9̪JÉ5LšÄÇPÃ1 á{oÕ½óí[íøþÁÓîÆãÍ:@_<|¬SøSe]þ¹é9ý–ä?þo|þ°{íë'WÜûë×ïý²œz%¬©Øùæ¯/þRÎÔüŽ-3Bëê0:99Ù’‹¿ù¾iïQ÷§Ÿ›ÿ&Í<·ý¸db`_»Ò|Ï]ù¨tß=7=Õ¯ËO(O/îï?Ž/Ÿ$ü_½óÓÿž»ÑË»?wo}ò£˜?÷¾$ÿPº4gŒ¸ø9ûÒsñ7ìÃýß5óýþæîQ÷Ê¿_ñ7×F&Ý<§Æ;—cnþv8íòå÷ùµŸ‡êã²îñHžIùŸžžnéòŒçr ,2¿ÿÌ÷¼ao~Þøò×ͽ‘í£v¥ÛPƒ\üC2܇ÿ—îøOËjG†ÿÙÙ¤Tà¯[à¯[†ÿùù9¤Tà¯[à¯[Cþ ÿŽš©À_·À_®J·c þ}ßZé£Ý‡Ô>“ñòo÷Ø1m-Fþ¾9ÄY+|y†>\yCå©ü¾6rê£Ò9m¤úljgIþ¡¾„Ú+íkJSùåö'ÔŽ¹ð÷µÓ7Rø§ä³×…¿¾ò‡Øvƒ~þcñ¡ÆVþ1÷SòÏå7¶?-ðw­‡9øs~SØyCå©ü>¿öóP}v’v„âRšÿþSûT"&šþº…ý_Ýò¯à¿Gæ¿^¿n¿n¿n¿n¿n¿n¿LSîGNQWˆ¿ïÜ¥4‡ØÎi?üë‹¡Fþv[¤ç¥Ôù¨älï›>}‚¶iÒ¤MÓ¦F $ ^€‹á(§ ÛUÖÈÀ†–êàSæ_Éãóï=3ndoï•$ ã*_üƒ~ÿå‹çÂìæÐ?ì¡ØCÿ°‡þaýÃú‡=ô{èöÐ?ì¡ØCÿ°‡þaýÃú‡=ô{èöÐ?ìylÿ¨U~²r%‚gÛÿînü¤ë¬Ù,K3êÁ3.ëÿpØ—n·!QT5=¢Ôë¹¾ÎÏU«ßJåRJ¥séõ"óÚrù›4Û}xÆ¥¿¶{2tM×››ÖôkÍ™†Ñéԥݮͮ‘’¹tòù´DÓß¿¸ôצھßïÄÚß7O&÷MwÛ¾Õª,õÏf“Òî à—þºæ/îûûî¶½eöù¹’Ù tÎÎö¥Óýϸô×½>¾Þÿ½}i‰íròyzí á÷þ5íÍõ\h?Úþ©Ô'éFðŒK=ßkwío¯{½ÒÞ«lÿããÓ³ãžqé¯g9{ÆSëö}Û^׋J%7ëÿAno'ðŒ[ÿœ9Û¯¿J¦¹U«]-õ&ðŒK}†£ë¼^qñkÀÞ÷Ú^÷ } ýýåÚ_ïq»ß[ºæÛöñþº÷ë3@Û<þ ϸô/2¦­=ßÛ3þjwûXÏ Åbv~þ›L~Á3.ýõ¹®º§/\®|ž3?£´½þ¯ “NÝúߊÍû뽿é\\¤Ì±í¿›÷×ç¾™L¬ãÉä{9<|+¯ÿὓÓÓ/æ=í¿í÷º±ÙûÿÝv;ê¡þÌnÏCý±Ûè6ú‡þa£Øâýú‡Mû#XÏDþG¿y­Z„"ÐR ­mkBTúÎÊþ‘&xœíÜM®Ó0Ð.9bÌ z¶€˜³,±‚¢¢Èv®Û´vrÏ‘®ªæ§Mó%y‰¼ë•°Ÿ?~^Šæ¹\ž¼$Œ ÿÜäŸ[+ÿ[æË* _[ÏÛû™ëù¶¾»ô¶Ó>µükyöïùÜÈöNÌ=ù÷ìÃ=ŸûÈtµcmîÿ÷N³5ýÿ5ö:þ×Þ¯‡É.{ÿ-ǵ†mýí¨}ÿÖüËqĽºýïÑ|仯3æûM*o}xÿîúõÛw¯×3®/¯[þ£—AÉ_Í•ÿíªÄìæp¡¶K-ËÔ×mkBTúÎÊþ’xœí‘) …ˆq ĉ8âDÈ^éê>×»gI@ÏÏþX¯jjg»iЃž——Á`0 ƒÁ`0 ƒÁà?üúõëåçÏŸ|â:÷ªçâs¥¬eø÷ÁÿQéùŠþ3|ÿþýåÓ§O|â:÷2|ùòåßÏ.¾}ûö;ï°7eôûGFÔû´ž•žOõ¿6Ñþ®ö_õQúv•¦“×íßù]Tò¬ä]½^¥Ë®gí¼{>pjç«zëìåkßu¹´o{šyªþ¯yeõŽûŸ?þ÷{è-Òýøñã÷½x†º¨/ D:½é3Dþž&òˆ¼¹e«^H×õyê i#/OGôzüϪÿÇ߯_¿þ~î :ûsMeÑò#M”Ï3YŸ#=÷2û» QžÛ›ÇßЙ¦‰ïŒ[\s=Eó8´}E>¤GÈ©éTîø  Ú²Ê×Tªg-Ÿñ}×þú̬üVfÖÿé¼Ìþêo¨SVwìzV}Ñ.âƒ/Ð>¨~Ê!?÷UýùÏËßÿï1¸Åþè<ú#õîä¥þ•ý}âÀ¶Ø=þF[ þ÷~†¬ôQÚ‹Bó¡N™.ð·.+푹^edÔç½üLo+[\Å-ö§k»ïä döW‡ïÍú(}Ýýê6îqÝý$¾#³?zÐ6–éBÓ©ÍiÈïöÇ?òLüåÍ7®!ã3ìO_Q}Пuõïêoßš™é[ú=ž¥tk¥È‹ûøMÀÿ‘Æï!'}/õƇdºÐr2ùÉ_ÇCú‡ÿﲨü:—©ôéº ƒÁ`0 :8÷—ÝÍòoÁ=¸„+8-ó4}ÅÛžÂcåÄ¥XÏdq{bUþêÙŸÖq˜Â©Î®è¸âmï!«Æ¶«g*ΪòU\z·ü[ù´GAåÖ=^§+ruñü{µëLVåÕüþ çU¥?)ÿV>­Ò“ó†Î)úçx…|œYé¬ÒÆ»giôãœ\ÅyiÜ^cæUúÓòoáÓ*=£ À³Âó!óÊþÄíT•³ÓY¥µ?rfògþÿÊšûWœ—sÖʽVÙnùÔõ*ŸVÙîXù#å=ÿÌFÈÜýªÏ«’—+[¡«àFô~ÅyH«\L—~·ü[ù´ÎOÒ‡£Œhô5žÝµ¿ŽžöT§ö¿êoà”w¯|Sf®ûÜÁÓŸ”+ŸÖé)³·Î;´ìÌFå³´;:x ûëØÉÇ÷â)/ˆOSÎ y²ëUú“òoáÓ2ÞÎeÊ)Ve3'w®”ç‘gGg™Ž=ïJþ®^ƒÁ`0 ƒÁ ľˆùœ‚u k˜U,ªKsÛþçØ‘5€nYæ®,÷çbXw{ ⬿wÖ&Ýúõ™û3®Q×”øN¬ðQev× ]¨¯Æ·ºö¯gcH¯úËžçîi½÷Š{î—ôÌA¦3žéôIó8†Çh³òwòÊdÌÒu×wËÈô¸ƒUI÷äWçq”ƒð8­îÕ×çI£>+—£ñ@åì”p™ôQÅŸáóÈGcþZ—ªüò\ƪÌêú޼ÄUƬìß·]ÌÒù/ø:íÿèÊÏ3dç;É«:gB9ÈRÈôï|GW~•—î×w«2«ë;òfz†áŸt|éø+—i5þ«Ünÿ€žá«ÎŸgºZÍY|<õ1NyŬ|E7þkúªÌêú޼÷°?õ®Öÿz/k›Ü×>ä<šÏÿ=Α}NŸÍå»Î…ùžü>åuåWy­d¬Ê¬®¯Òdz ƒÁ`0 *èÜ\?W8ÀG£’Ë×ÏâY»ûÌÕ:‚ýÒÏDg«öc¾g<‹ Ìö2+²¸€îÙÕýÿ'ëWµ±6½žqnØŸ{žrèuç"w¸<ÒTkôÎ.™ô\ r¤•¾nåOàûïÕ>Uì˜~c‡#T?£ñ+®ëžyöï{¼QùÂ,,^qF/XÅûv8º.Ö©gá×3}íȸâOPùì ~n%ãhUÞG4§çø(_û…sn|W}Tg&x^cëô“,Fíý…¶Çù°ÃÑ­¸ò«ôµ+㊠<ÁÊÿ#+}/ãUw8BÎRh_ÏÊïäÑ|»33!m–r\7U9Œmêß({ÅÑp™¾veÜåwÐé[û¬úx¯ëG¨ïµÌú¿Žß]ÿß±?g;õ,çnßÒ½Úow8º]®³Òוþ¯Ïßb÷ÿÈîã?úÇOVé¼=ù¸ZÙ_óÎÆÿû£#¿veü?áèv¹ÎN_WÆÿ³Žªõ¿rÞYL€ëÚo;Žù°ŸÎ1³g²9pV^•Gµ~>™[_áèv¸NO·S÷Ÿ3 ƒÁ`0¼ÀçèÚïQ¸’·¾[ãï¾×ØÀ veO\k^8Ö”¨v<ëZbzº¯²Û\ŽáOìp¥Ž¯b¾n$~ð}¬¾Çoèz•3ñј mKã è«ãvUÆÎþ]^»i´NºÞå¸WAö»#´÷xŽë”«é‘æjßÊtÄõì q ³:£¿ÏE=Ð z%Ö…ßqù)CcñÕYµEÅÑí¤q™´®ÊyRGý-¡+u (K\ûh¬PÓ'¥Ü*^Ø¡²¿^¯ì¯ñqÚ=m=y|KóòøvÅ«eü‰Û\ý˜rÈŠ4µŸÇ=Ž›ñ{Wê¸úÝ1Òûû;=Ý·åòxÚëpû;o@>ú›”ȘéT\ÔŽý+C±“=*ï™É«|˜¿GðJO¸CÊåW]ù–xŽ1.³™ïµ 9_EŸÐ±©â ½ýVýqÇþõÊã)vÒ(ç¨ã Ê‘}Ïì¿[Gåñùw¨œŸîǺÛôã{-âƒoô½ÜSdו_ËžïÎ׃Êþø2åÔ;iT&Ÿw*ßÎwú‡·™“:Ôº§ÇÇg×­¶“SþO¡ãsÌìÞjÝêºï%Z[~_˯déÖ®·¤ñ²+œÖñô¹Ìw]Ùÿ7 ƒÁ`0ø» ë]ÏÜkÙíIŒu¾+e§L]«ïÎÖ‚ïoA^ç°î;=GR¡³?œév쯱Ö;<÷ôy‚· o$Nî1ç´ˆ=:ߥPîVãžuŸ£<´Ç <&«ü¿ê3K«yC©¸/ù4–£rÇ)i=µþ*/|ÎŽ^]ËQ¹NÐ1qŽG¹¥w>ù{å•á ?ÓKvÏå:A¶þó}E:·ÈÎ_«n+{ÑþuÿÃ=ì¯ó¿êÜr ³›÷qÍ“¾Ì³]>>ÿËdÑ}+½øüÏå|L¼…õâàõ0öÿ»1üþ`0 î…lý·Še€·ô®ùŽg:…®×ºñ¶Šž`W×÷,3ËOã?«½‘]—¾\9ûPø×î~Í[°£kOÿûWùiìGc~Æ)ãÄ-<žw¦¼.ý3qÌ}•ãž'vªuðw$V±’¬n“Ñváò(²r²ºÂÿ¸®5Žï2©½ˆS;W¸‹ÊÿkŒ_ÏKÑÏ”ó­8B/ÝÁhùèEÏÕ —'‹9êw?K;Òx:òxðº<–ì|@¶Ûc³ÄϽ®‡§ùVúàyâÆ»c÷ÿ@Û–ŽSwÍ8B•òq®Ãîÿ]û£=é2ôlBÓe6V}eö÷¹ˆž­«òRý(·ØéÃËáÞ VþßeÊöZT¡ë„4Ýûïad¢­e2Þ’ý+nñYöÏæøBõ—ºŸTq„®Sü×ÿ»þß”é<›Ãïø­[&Ï=üfÿŽ[|†ÿ÷õ÷s°zîPç)GèåèÙÁª}{Z×…Î3«³™n7ÅjþpûWó¿Îwfåtöï¸E¿wÏùß[ǽ×;ƒ÷…±ÿ`l? ƒÁ`0 ƒÁ`0 ƒÁ`ð÷á{ÑÙûô‘Á~ÿ¬ö½³ÇÒßi`oLöy„>uo©Ãßi\q‰ìKó|}ÿïÒû7žÉSvu9ÍG÷íñ©ì¯¿c¾#öÙé>·,Ïjoð­òw{õÕ†ú‡Öݲ‡Lûù=«mWèêòÈ2u_¤ö¬ÿ8د–åéŸjož?»Ú²kÞËDúøßß±¡öm¼†ýýwÔ>ôÃì#® }©ÛË×õ·E:¬ìOÛ¡O;<ÿ¬ÿsüy—›î¡Ô}›Ú›¾k‰}~úŒî±Õ|µM’†ï'8CTþ®¡¬o+¨[Wžú‚ÌöŒ½ø†U™ä©ïïQ™õýr'ö÷½î\ç­'ç’tœTY¸ÏwôŠÌz.Dó¥=¨ÜW|ÓÉ~q=_¡¾yª¾M»ÜñçÙÙÍÇ÷–¯äÇkþt§ïbS=2æû|¥Ò±Ïy´NÚ_}O¯îe×ù”摽ÛöàýðtLàœS6Ÿq`CÿíÌjfý´3–#Ëéܰ³?zÕ1 ÿéíHí¯þ]÷š“ç‰ýõ\"íWËÌÞ]åó¬ÊþüO;¾2'@¾ìã@~tGÎü:º«üªç{åÝuÊþê7m1‹è™Q]ßPWVç2ûS®Žåz]Ï¥zŸÒsý‘ÉÛ×3ÐÅ]vç‘îªÜÝxwÒžôÝ:Ú—>ÚyŠÁ`ð¡ñˆ$j¢ëw½ömkBTúÎÊþ—üxœíÙË ‚PEAûï…ÝÐ…F£+@~Ñg„Ü9ÉTqJ‘$I’$I’$I’$I’tØφ`¯¦'Y;¬!ZÛëÞ‚õýD°a\6M$›ç`ˤZ×/Á¶í@ ½ÿ3ûz·7‚)»ëå@º®PUu&ש”pD»ayO^£ ymkBTúÎÊþ¢6xœíš‰më0]HI!)$¤’FRˆ?6øc>>~Úsm£®+ŒvÁu…Õ‘øνYšuÌ8³´ú³uNÒ?¤WP>Ê1Js¤ŠWiVÿçü‘ý_uKðEÿ‰Ï¸ˆ/rœÌù£Âˆ_âšgK•W]×±ž™ÍEYòclÊó,[¦ŸTœYH»T¾Ïàÿ¶›ùÿíííðŽˆ}x¦÷ÇL#}A› ¼ÒâœöGüžVË7¼—‘^÷}>“iÒžº²-çøèþŸiæÿì;}žLJø°ìXí&ÇTÊP÷3ýTÞ#¯ôߨgÿ®ðJÖùl eäý'ï=ŠÖø?…͘oéçùn€í±aöëì›ô½|7ù>šý?ÇôU–%Ë;«ï¢­ü/ñmöµžN/èãI޵Ù÷fóQÖƒüz{Èñ<ÓdÌé6éd™nù;è¯ÚÊÿ¥²Q¾–mû{{÷5í$ýÀûiѦxæÿg<Æ$ò"Í^¾%=êü¯”RJ)¥žS—ÚçÍtïe/ùÖ”ë —°a};kú÷Ô_µöyµ?¬9ÔšÉlÍzÒÿ}m#¿óGßüKk!¬›ôók(Ë9êGüã1»¿”Þèz–×,­Q¿&îlÍiV濊ý²Üû#_Ö<òœöÂ3¹Îžm$÷^9g —{9&°w³&¼Û:Ë™ë‰uõfÖšúºR…÷:Ö½L+mWÇôW^£§Äz%÷I—½î¥2Ÿ£î—lo£þÏZ¶f?¾k4öW¼ÜÇ-è#¬ó­ ?V/ì—c^ÿ·!÷!{u̵ʴU¦ÙóÙ·ÿAœÑý‘ÿGe>G}þ?Åÿöþv✽Žø3ÿÉX~j½úœ—{øzT§ôA·O^ÏòʰÑ>÷³?syÊ|®¶ðßG)ŸP¦U{× °.ï».Tæç}6žÚ³‘-Æ×F`‡£Ãp]Åkß…~Ãóbà ¶ О$Áwݓٱ„ÁñÍ|süñCo•›ÝA+Õq3¶¾lOàx@á(é0ða¹¯+?÷  ÜT,¤_¯7¸s\ÛÞϘ^Bl1)üCó•Ò+ÔkÛ(îFyN"8õ–dPCÌ_9ÈÒ>O0&l«4¸Im+þîënwîÛGrŰø™à»ø)/tih“f˜õÕ Ñ¸X†>ÊʨËEËÅòã)–Ô<,é6ös4ÅáÀÖ5›zàbð?¤¢Jðàö\<OM%O#(7ä6à:§= ªêýÓ‹YA£÷ƒH ¶«L s6›ÎMƒXêÈùBcX&ǘJ½te».Êöü¨Ï 3.je(”Ï?Ô?õèÉLÚjï³=€ÝÚ%wƒZˆizFTxô„$¯kPö8›E·mòø jAO™ñÔ×úÞ€«ž>~þ’†åÜàØ†‘ºéB9úµâ † Ö¤8U­«KCÃv´jbëL èåçC¼ï€y¯¡ ç;¤mj P.Ô —øãïDkñÂêwþ¡UÿE€3ôܨÁ”‘•’8xëUÀ…JÊü¹s£‰ž\„³èÉŸŽ+;}s­FãQ(KI­î÷¦XÝ›„ƨ ¹1 Ëúþ+Kú¨èdXŒ];JÄ£Žïcˆx$§DÑ×·Þž¢X`i× ì¨ëÑ@lÌûrn°m$¨Æ^×9΄ïzBGÏž Q=Ænfäk„Dêö¬e; <¨ýøaÓü>,µâ¢ž›jÆïk‡0BŸ[p(õâ$¿º‡Ç ‘ÛöÌpý4 nËËq`”XÆ“ù úvϵöèÙ.xõHnŒûorŸJ¾€Ï5¬ñÁàÿHàu©‰ñê뇗 fà§ í××a앆‰[Z:><ÇM@J£9óý¬â$Óq]¡}=H… kÐþ3ÆÊºã¯ù鲺t¿Q“=‚, 7ÆÇµß»ýìêçs Ä>ã¢3ø¶ïÞÜ6[¦Ñg•¨— RLت¨ù­?·( &wÝ.7C#~B{‚]¯Ó ×â—UÔW² 7™Ò1jk~‚e”cG»¿rËÇùÐãDØ.=ôËK´ÜîëÅ@ÝWÝDZMû0å€ãûíèä¼0Î\Úòxó®vÏqßNZ¢ >#Æ ƒ„ŒàBE— ™¥)•‚º&yØA}tå?Bûê Yìm(ÂWIpáɱò€ñ ¸|½2—+èýà\2·ö íÞ)lÜ8·ÖtlÁ@Z.B½€£ï•eñ…‹ƒRSßôƃm>d˜Iéþlþôò'N a†dÄ¢G3¹%†¼#«)?è¼Ï$sß _5=²íYÇBR#-k"qGP-Ðeþ"çf­ÁÂá%Ö©-Ï“37êÐäÌÈ8ÔM9™ÏŠŠ,¬èä_*n;H‚ÁúÆEBƱ†Öcl¿~øÎî±ç Ë[ƒŽ/saŸg¸IE2å,zÒ1Út:’kLÆÓçÎÁ¡ÍíÈ™壋G)æÔ{7ÊoðËÅnd¨ø¤è·ðá•{@rõP˜>ÆkÂwŒk×½¾¡ #¸kXfy‘ÖEÇ÷šÈA©ÍBÂ9ÂuM°ÛÞ4P=¹_Ól’ÆgW®Ø‡ÝN•Õ#–_n™‡Gï¤pp ,Z…ÿUu›6È“÷ÃV¦›Ó°¸å0EK‘7*|·ý]¯{ü75F\éÔ¶»úzQØ z!á‚Ç uH€>îÿó¦upš²ÚöõTÙ£»o3P)ˆø´[à^Õ6ãÖÚóã` -šd&á*=¶%ÄÀÊfY’<¿^’ƒØ·`_6¨ßÈ|h¸Ìë3Ø¡>€„2 Pºúqÿ×7ÏŽ³ ýÕü,Ns¾j»F™=BµŠü` ¨í³•C§òöiŽU’)Ré@LÅßÒ®„‹ÿ‰·Ç§mb<2FH“Rq°²ùF½åãø÷Xºi䎲õOm¬GAýÝ·ôÒ}:¶*¾Ëu ÄfØ:@Ê«RH™.òÙ6Âñ¼±Ã6Žjå§cæGOpO- ú­6HÒýúÜÊKÉJæÛUÀÎì:ºJǃ¾ŠýÉvÆ,¡•¸¯3ÿ‹DìZ‹¹EñÊÆ®ÒqqðìØ7p?¸ƒÈŒÞK¬÷Å%ȧ$;â¼?ýQ¬r6³pP7`¼a™†¸é^=„„ýÉRç¶_†õ™³)m£„Ç>ÀD3#£ ¼_' çIþÂÉ­uÍ‹CÁÊ-Rne㯄³²Ïóss•ÀîLÏÌ<È­/µàR)|Lt_1»éòÁ¨L¿kÇ=‹rr 4ùìê§ü/gýšEÀrþÀ~P†¦nBß[ ®\g[{¡«‡’g£ãYÛvRŸW'†‡ {Fe°m1ïÞŒ{ Ýw¾LÿÕ;7¨&$‘çþxúcÚøÃÐ0Ÿ ŽžnÝö‰óí&úÚuÅ@5sCèCÕ±mœñ8Hƒãefñï¹Æt ’Îx{q(a¿²ÛÑ‚a¡?€ŽÐþQ“%ò§ÌlÁ¬ö4ô‚¤Ï‚xmWI׆€Gí¯¦CèÒôì1ê’Ûk×QÖýŒ3iJhÜ,Çÿ€úãú‰KºšRˆ÷ÅÄð¢ÄÂÈöÈO`úÈç…ʲ»†½þ4á)ú%ˆùÔb6îB8ý\ ³pµõšÉì«e<êºíS鹂ØìÚ+ÓjsðÄpŒ„¸ß%<&t{3?Œ£¬|N)p7b™Ôîãé?Ôa¤iäDµWl’¡½ðˆX—ŸÀZÚ>;uø)¤ko)#WáÈÍSšn®cR½xô”{[ÀsXv1¤¬95‰_¬¬0KéõÁжՙ7Ú>žTp¡5‡‹¸Ù´¤l3¥Sü"ØêLXê…ç«[á5mö¡ø º¿Q="u}ö‘ÆpϘ*xböÕ‰ºîã—ã#iM+³ù@»Z! þ·Ï®~jàÒY”ݬ‘¡´Ò$?5Š• mtêuˆ] ‡%Ž@Ž÷Ý…:4h8Ûƒ¸˜¡»tuì3À;ú ΑO¤1A/r‹¿¾™ ÆÏR*5ÀÇûÿËìiÜ&j#Y2:º$Z(a­dæ@ß>'z ž„×L¬¯³¬Û뇶©½6ZÑÀ8|`Æ6Ý"åŒX1ß_€z' îF-©÷»Ñû?°úX^ò A:?1¢;ØÌh/KžVB'õ üvOnÏFSò‚¼É õƤê°ïÌÞQ{=kh7™ÀMå¯ÀwXQùpü\vïÍ“ÎO/ÿ¶.ÅöÚñ¹ ôN3·ÍHKRðÉlŠK–"›qò”‰^Wܳh¼1wtùã  h@§¬Ñ3ðe6þN|–’¶Á©‹I;yîó?8t[ƒ[é!‘ ú¥µ$,ήL­·e–"z¦å%IÞ†AêkÜÌRäl!3uú8àÚyßë?_žWÅé½)ƒAbCÒõéõOù!rz¿„a¢¤5S±ÍnÖ—£³ˆ#Â<ý43yÜ6"ª ÒRýêÑô߃C‚Qå¿&>¸[¼# BHÍǽß{v¡eà×kOÃ×TÉlq(UHð͵h »Ý”8º,@t°µöÈÃÕ‚LÛ{p´•ü‰/Ø*ËL"d_y ïŸk,4î GÌ–ýÑbD>,ÁÏ.ok"ýD;†|7–[.µDÖCíAœŸä#‰iÇæélÿü¯‰ÏŸ¡IÖ¬ÐòâóÞD¿q½]+ÞeE •ò–_«-- ™ƒ¦ Ú°c©›³èç€^ø¿¥Lô˜q±1~ëCßC“ÿ”øžC“9¡ŽgNäóýÿû“õHÈ8Bkhêç«JÁŽ#Z¤-`úVo§™MËa 9r$îÕºZ-¼hókhò ?C“$· û^–ñtÄ÷¿9d(‘8PÝ…]Ú¶š£×w[¢wléÏ;µŒd•Ôn—׆ôoÎK«èdù H¦Þ„(Dú¯…¯Ÿ¡InüIÌ Mïãü_(ù¼ðœ’îð5)6H/öõÌYÍ1‡¸ ±QRæŒk,nËÖûXH½­ʉð‘ƒÊË?>ÿšdf“ç&6³üü½^EJ–m‹ªétÞÈ{¥C—µ›½ÌC¬c`½îÙ0Ê…v5ÃÂx<äƒó\9Y·Ýÿcáû×Ðä}1Ú06"×´!ÖóŸë9êdl:'– û1H"Áz'7ùQ‡q›„¹Ž¾¹ÉŒí#KâR.ò/C“»VÖÜgÇQ×Ȭ¨åéãó\ âì`¸·?dÜÛ1y³”åuMÛ6Ƶ8ZX]8Ãø^p…ªwQëE¾ç &­1frRšÁKiûñçÐ$G¤ÎÓðÔÝœÛÇЕŒ¯ðh3'À®Âø”·“Ç{¼±š;;Ö~F öKî37Ðkš–Ìu<pöµdÊŽåèˆ+C¨š¤™ Rá‘÷Mz¹Æç¿7)nÒ€©æöÔ lEGyÍl½‡:Ì‘ÿIÞí’o±BìÞÿ—S%|ë‚ÎЕïsTuÆleÁõ’bšA}A¸ëæížÍ´þ1ãý0ÀA{ÉKù“ʘÓº¼tjÑòÇÐdLI=rž ¢PRgóûÇó_Lb¸R³£é Åžël?«â”ž)!°Ö[«‰FÂæoÖç wi&k^”CV(t@püW2Ó÷²ó{hÒxH—GRn²͉ŒeCbúxÔ‰°ªé6GÁ³©÷‘¬Q…Öd27\ÌØ«dœS‘É=\»F§f*¼0é‘Û£ÜOPúÇ5(r„Zß™xQ‘Z>¥~G AeN-õãùÿjYôÜ7—Ò¾n;ún?Ó¹"P·¯xÒ}‡·•/àNäöÞW:ÝŠ&´—×¾†Ù:x" ꭥу;†ÄRç펔¹ ®cä›…Ñ™õ±ñÜýüýElmG§a= hò¨BG_æu…³×YnZì«­FYs ôUéµ"zM&Ë:ËÝGn¸Ïuí.õDX‰ƒÉ5XnšÁ¡ö›;Þ}¶Ô«%XO?½~2&ùÝØî¸Frjj¢¢…8ˆ› yAÊÆä*±W ¡³‰€©ÒIÒ˜÷“9/¹§u‚b)õZ³l:ë sá¼¹ 8²5ÀÀJõš>~ÿi´œÐó˜I¿þ3YÏÔ•;ç:#hEL¬×[ROd‹Ê^GéšAË©fß~Y!ýËÐäEåêñn·ôü0¯~Åà/«AÝò –Kåm÷‚±>^ÿÝWY¢q†"µ¥â<цFвÎë*c¹½:xÛw„|¤Ížw­—%ýehRg°åØúæÜæd¿9ç´üÌ•ªËÃvž3Àv Dg™hç>>?ÿò3é‰hŸYDkgCã(ʹƒªÔ•ô×SÉ·†¬Ôœ|è 2QÁü94©(ñ½?OG•Q34… fëcc³¶PopT€Yaƒ–W(£>Çÿ@­tãX4ˆ`ðLG¦Ùžp•‹É„ãaïãšÅ°l\¤[9‚cû26óâU M6f,ºŠò¼Ë'›¤…žCÐÖñ4øi¥?W~p¯sÏ ?žÿk³ÞA÷×KÃrŵÄÅÎk@–Ið|>^xðs¸?ý\Õð`,DèäõÌ’©Œ°Žû5¯éWÛüÉ^£èøçw €DÓµMˆáøXf_8<%|8_왉pPó1†…ãî„WþÀlm߃˜“Šf?4žý¼»:½òÌ“_£Ô”v ûûMà;kž:pÍÖ²â_ÖùásjØŽqw]$F‡£}ÿ¢»y« ××û,b'Õè°N‡Îþ=Ôo¹öÖôÔ0, õ¨Çÿº»â~–ÆM‹ƒÄû Y•R´‰¥4â6+!”}@~u‡j°ctCÔúàõP.ÅY(ýxÿ׎ ½×zµ?70ÆWXFÜ£¾oŒ½·¯‹3z‹Š€0°®Ác8¨R£êG±¢g›0àö ¦T—Uëøò„½»‹w­"/4³ÞÖ÷¿¾îC¾Q`[{O³“ºcÈn¯]•¶+•{Û{­ç¼ÞÕÎ N!3•<®ÞÇVí‚ìyxé,!C æ™b². êlfÖ×åÁø'„ÒÁ\ ןÎÏíãëgu,μ·¸šw-/ôß3Û¥ùºñíN°íâX(›c ƒŽÓâoõMDð‘sÊ¢a·#ü#0{c ÁÈÀð%µuDWCB¥Z€AéÍZ6»,Øçûxý (Z%‡±µØçw€ÑÀáŠHbhTb2ùþ<$÷Æ*cÀ¼ænk÷³”_÷וð«Ð÷¿#{D+B<™!âÇüS/¼gÿÃ`ø9”­.^]ŸÃŸ™ÆCíÌ+>™ì3ïƒ+•ý5Æë]¤q‡„Äp¦j' r¯9µ¼FDȬ)~: ã躟—9GmÜì“x2’¥ù-?s–raG"yvU³pa;R«çãø÷ăœ ÌAŸ\&ú¹“ ÿ?#Äìn Ûí0Úee½´“d~o’qå¶­¯!!DzP^H)>¾oµëÈ‘.®Ä¼‘Ô¶=Hy»7´S´-M½ á?Þÿô8y£c¶Î™ß§q„|Ü#Þ5"ù2Б ‡lµm#—ýU‰ÑÊ»ìýeüΤÎV†ÎÈbMƒ¤Í˜÷jAÌc7¾Z ä]> 4½gbö Äýñõs 2WRsKgí6Þæç 's8qzñTT[”R›[wÄÍ)I‹—9ø5x¥ŽÜWjýÚ #”!nN+zP’ÄÚ”â ÁKgâ²ÁÞTEŒ,ÂÁùÇë?³¥{é^R¨DÝ¥=´R¥u^zîc¯’§³Ì¥&D¼‰'i74øSËJ½ß”í&H¥æU©Gà»[û‚ácrÃͦŠ<ú’‹¡׿~þ‰4}Ú…žíh¢°Î;¯üòlpAZð´%’XÔZ;t®Q?„±÷÷žóy™ïk1+Ƴu6Â[«©ÌÖè† áDõ™c4¿ÆœÚóÐÝ*d„•B#!}Þÿe>Çsamh¡¹ÿêG3c^çæ—8u9󼵕⸈߂ÏUéy‡‡B;f "Yi=ÖD§ =Êâ‚Á4‘íŠ&¡Ž’Þ×|¾Cý“Ò3»Ä÷šg]Ø~üþ›WgjhSIXU“‘"1A5Fr4×{üáÜëAä—éljŸw¸TðÎá–Ýt6<ï/NÁ  \û¤õó«R¥tÇû˜a| Æi¨ÌÍ>‰T.šWo>>ÿxŒ•ϯ¼Y¼æÈ{ç··m,J²{gg}Év~)ê]Ñæs!?wøè÷X›‰æè˜G—F°¥l!7ކUœÖ|Cnáfï³…:.@mq%®Á臔±ÜÿÓRu?.–:¯èaBë¼ÖºÌÌE#Gƒg'yX«Dåÿu‡SWºä™ÇŠD)Œ˜21×ѵ‰VµˆagW¬àP޳²q½ç«ÏÈ’Ï Ís”?¶•@åg")ªíªç©s\ÖTòâô{Þê«f3g÷‰oÑþÏ^w:^ë¼"•Ý{¹ªd#³!φtà}©,nÆyWFKv„X”4–ƒ|<ûB+ è®Â8ˆi=-;´³X 5l=/xlêóŽw•–å÷n³]ì à+SÛÓ¼,{Õž¯/ДâV¡û»+<< ØÌ¤®Ào ŸâÞçèÔ‡eNpù^Oÿþ¼ÙùŽOv qR¶ £wHF3ûÝß=oý;ü`~k’RÏwCßÏí²”u¦ãk¡jE˜|û‰qÏ©ŽÔ‚KV,Ï àÏ*?ÞÿþxkáÜ}QxÁU¹éœ/MÛüÞÄÂá= ¤Õ°pý¾Êæ=çŠÎ^xúBË÷ÞÚKx«§Ó@ð[òÎI™¾ÔYB]Tª¦âž™çÿúÑKqÉ.á½€PÖÛwÿ¼ÃÓAG\ôšWÂÏ‹Øâ9ùãÏ2S³—åA\è“Y\œßy=ǨðGj÷¾ÌéÇõÕ¢ÂMî@âŒtÔ‚¶„vD¾üƒzÎ+²ÙÌBĺ\·Ÿ¬ü¼ÃÕ¬…÷Ùë6ËÛk™6Lþ¸Ê¦ÚRß_rýnl|UAϯ< ¢¹Ë|¦²!‚¸;ºÁ8™_1ÜgésÞùÆCŸ‡ÿ¿ä >êVB‰~æ,¶¹® Ë˜_ÿ&f™äÕjpñ/WÙÔÊwaùO ¼š°H 3ÉÛûþ¾I`˜ÈòuØù»õ¸1êͤÉû·ÈÏ÷ÿå+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò•¯|å+_ùÊW¾ò€ÿÝš™w)¦÷ÚmkBTúÎÊþ€’xœíÙÛNa…a/Ísã]xn¼ ¼·1щH›”HàD°¤;6ÝCk) ¿ý¦|´e“0œ4ÿ¬÷MVÑ&’g¦vB TuÛ¥äq¿X¾µ\.—laáõ“Ñ?‰a”2üµÃ_;üµÃ_;üµÃ_;üµÃ_;üµÃ_»¬ùßõ{°û—5ÿçÏž†÷y|àcÖüíwb›økÝqþ3üuÇùÏð×ç?Ã_wœÿ Ýqþ³¬ùÏû~ZlËš?¥ íð×íð×íð×íð×íð×íð×.kþó¾ŸÛ²æOéÂ_;üµÃ_;üµÃ_;üµÃ_;üµÃ_;üµÃ_;üµËšÿ¼ï§Å¶¬ùSºð×íð×íð×íð×íð×íð×í²æ?ïûi±-kþ”.üµÃ_;üµÃ_;üµËš¿ý>,ݲäO++þóþ>%KÃ_{øk/FÿÑÿ•¥Ü}çMŒþ¯^¾`)Æõ¼µšÕpyyþèç7Uü#Îü­Á ºÝzhµÓz½ŽKáð°˜ìààw²Zm/T*?Ãéi+y^µú ÿˆs³ NC¿ßMlONš£Ÿ5®VÎqh·®ŽJrXÅâþçþæjö½^gÊ~âîöÍfmÆ{;Ĺ¿½æOÎû±»ol^Z%y/°67—ð8÷·÷ú›¯÷¶|~éÚ|zîÿãÇ7ü#nÖ¿~ËÞgævMèî¿¶öÿˆs»Æ7s?¦í}æîsÿBá þçþæy×yoïý7{­ðë?üãÎýÍÓ®ñ§­'Ÿ÷ª3?ûï&Ï+>ãqÿÝÄÚ·÷ÏûfîöGGûøg$÷·ïñìµÞÍ}þyß_÷ÍÞ®ìß[øÇÝ´¿9›÷ôü»ài»V°ï€-üãÎýK¥­Ä×?ãù9ó¼÷{åòvò<®ÿâÎýí{?{ °÷õÉöfþlo3{ûŒhml|Ç?âÌßÎýÇ´³³ÆýßÈ3ûÞk+—¼–çóŸÂÊÊ»°¼üæž½ ««Âúúbr¿ÿ¸«ÖZ¡Ñ: v/´Fkwú¡Óý3:&¡×†Á`ÎÎ.Âp8Þùùßpqñïzö|üã üñÇüñÇ­ðÇüñÇüñ× üñÇüñÇ­ðÇüñÇüñ× üñÇüñÇ­ðÇüñ¿Þ¤Ý!…ƒydûmkBTúÎÊþ€»xœíš[Ž!E½ØüGYÐ|d1~ÌGÖ(³€(+˜ÈµZTØe¨s¥#Û´y˜[`úóííû'äå×ÏXŒ÷÷ám€8îg@Ä@^Îç31˜»ÿÄ@^.—ˈ|ìýßb€8ÈÃÑæ‚\\¯Wæ‚õ©ùŒba=4þ ër»ÝÜD?» ýôøsýÿãˆ~þb‰Ž?˜“ÓéTL+¥{Ë‹þ=Ðî¯ã«·?µß”Ožr_%f$žQ稾ˆîË™ý·´g›£÷1Sò²•^ÿ¥tkyšö¶ò–Ò5õXÚ«-SÓŽ–'šëšö”~g©ŒÒ÷[éÞ|µØ­¥iËí©ËZ®µi¬x¯kÇÿ³ý¯Í­þê«ZjýÒsøïÿ­¾¾ÛSŸ¥_ZíªÅ0þûÇi«í#ý÷ü¯hëšÝÿí½4ßIóx­ß,åI×->Iù¤zjùóm>ж_úM½þ·Úëýü9ÄòíëH ÒiÕ¾úûç74ØæÉû+zý1Gÿ£ÛøóúÏ9Ü\ànð?7-ÿ=ÏœxòÁ|þ—ÒG?±þ·¼³>w̃ÿsú?êÙXx}ÿk~öúO<Ìéÿ–&ÍÿÒõczôïÏû¹YÙÿèçfaó?ºø]¤×}¾\MÑÿ? Ò‹þÊ-üÏ-üÏ-Éÿý^]„¶z£êÏ¢Úøì{üŽ,þ—æ„cZ)O-©ÎR›PŸ´þ—ú]“¦‰ © mÈ/‹ÿÒ| åÙ®i©^¼~¼¬ÿÿ­8ÐŽ©>Kœ ~yÖµy¹wþoÅ ñ0VÚû?ÍÚ¯”îYÿí_¥ëhŒØÿÉ­ý>Îÿfý•[øŸ[’ÿÏZg[öµe ½¬þðktyøïþçVÍíyŸôY{6Pû¬Ý[f¿Ø'íø×îã¶Î½ßµ´ éõLÿµulï-g‹È§WõŸ6âl•õªó¿¥nü÷Ëêÿö^ú¬]ÿY×~¥tÖý½ÿ§íÿÑ÷‘ȧý>Îÿfý•[øŸ[øŸ[’ÿÑ÷Sž{{îÿìªÿȾ´úï>YüמJehæ”ã^N©>M[‘NZÿ5çq¥4í¾±&&q`“Åi>òì?ׯ´T/^>^ÖÿÿVôœÑ´æ~4^žõ_m^îÿ[ñB<Œ•öþO³ö+¥{ÖûWé:#örkEÿ£ÏŸ€ó¿Y´`ý&ÁaaÔÞmkBTúÎÊþ€4DxœíݽkSaGñû_¹©àfqr(‚t+Jq×…:† U —¢ÝÄD©5‚/mÅ¥)Žšñ¥©Í*JÙ~’JE Ýbž ç|àK2&=¹!é3$BV–e&.û³ÙŸÍþlög³?›ý™üþ'IL{íŽïÜÔéX¯½ñzëœsÎ9çœãlee5ÉR?o÷{)Ø¿8³?{ögÏþì¥êÿðÑó¨<~OÖ^ÇÚúf<}¶•üoA\ªþ[›o£¾ý.>¼ÿŸ?íF{w?ùYq©ú×jµ¨×ëÑét¢ßïÇp8LòX4y£þyž¼Z­Vôz=ûƒŒú—Ëå¨V«Ñl6£ÛíÆ`0Hý°4!£þ¥R)*•J4 ûÃØŸÍþlög³?›ýÙìÏf6û³ÙŸmÔÿÖÍù¸{g9^½Ü88üúe/ùYq©ú{ýsÙŸÍþlög³?›ýÙìÏf6û³ÙŸÍþlög³?›çÅYªþ^ÿ\ög³?›ýÙìÏf6û³ÙŸÍþlög³?›ýÙìÏæù_q–ª¿×?—ýÙìÏf6û³ÙŸmÔÿöâ|¬>¸;ÛÑùÖŒßÛÑý¹ï&¼Tý½þ¹üÿOqföìÏ^ªþÓÓbvöZ,,,ÆÒÒräùýd¿EL^ªþ§Nžˆ©³gbæâù¸ze&æ®_Šs—Ý„—ª¿Ÿÿ¹ìÏf6û³ÙŸÍþÅ‘â{¦ýÙìÏf6û³ÙŸÍþlög³?›ýÙìÏf6û³Ù¿˜²,ûçþáÆÍþÅtØúhóq¿ì_L÷?ºq²1wý›ý‹É÷žãÞçýü§ÿÅþlög³?›ýÙìÏf6û³ÙŸÍþlög³?›ýÙìÏf6û³ÙŸÍþlög³?›ýÙì_¿a!5¨¾µÃZmkBTúÎÊþ€MôxœíÝOKqÇñ‚šz zfu赉„¤‚@D ºÄ ±£K]Öƒt‘ Zê¢'wo³,õk~cĪ,Îì¿ïü¾Ÿ÷Þè‰ñš]wÜÂÖÖË@ã···©óã×¹B)òï•&hÔyP[üç| Ÿ5°Åßð¨-þ†ç@ l“óÿðpµhÜ¿ûÖRÍòëà?¾ýŸßÇû_´²þ“|ü°vMÊÿýæJaÛÍ?ßÝ\-²ôŸäyÿòµî-‡þá“0è¾;UïëƒÐÚX©ì?­çÿIÎ#üË÷výrè»G/ÎÕûÒŸ_û÷„ÿ|Û¹³úû×Âàû£âóáãíÆþÎýc¯× óø17ÿ7×ðwä?üúþìõÞ«› EÃÇç"þ³³¾Æ‹³ìp¢k>üÓòÞY÷ÍÿÇ~<îvšµ:¸þ›¡çqá¶îÁýðéésûi„ÿèZË!;XÙá³Óå`m‡ÿìÛiœ\ãmçeùã>û|=?^4wþÅ×÷ÑÞêu>þöþÞìñ'üµÃ_»”ü­ïŸvšµkiÿv»MSíRò·þYé)üµÃ_;üµÃ_;üµÃ_;üµÃ_;üµÃ_;üµÃ_;üµKÑ¿÷J¸)EëÇŒ§ð×íð×íð×íð×íð×íð×íð×íð×íð×íð×íð×íRô·¾g>ÅF=nRô/ûÐI½ãŸ®üYùyôÿº¸ø¼ïÑßú5S*á¯þÚá¯þÚá¯þÚá¯þÚá¯þÚá¯þÚyõ·¾—"¥<ú[ßO‘ZÞüYµyó·þ¹šZÞüYµá¯=üµ‡¿öð×þÚÃ_{økíá¯=üµ‡¿öðמ7ë÷ÓRË›?«6üµ‡¿öð×þÚÃ_{økíá¯=üµ‡¿öð×þÚóæoý~ZjyógÕ†¿öð×þÚÃ_{økíá¯=üµ‡¿öð×þÚÃ_{Þü­ßOK-oþ¬Úœùÿ?ïâ (•ÚŸ÷mkBTúÎÊþ€W6xœíœMŽÔ0…çhì·`8Ð,¸b϶o€8A£Fju˸þìJRñ{ŸTšÄŽËe¿ØIœô\__¿\/—Ë?ûùã×vËÿüé㕬 õǦ’þ///»ÔCTÒŸìÏŒþ·ñz·û~›ß'ÓÛîù×ü´é½¸¤ò¨Œêßë?Mé8K¯Ùt©.© hÌè¯#ý¾…þ½˜9<˜½þ{çܶŒäK;>+<ȸÿ³úùÈù?"³óä> ·½ÿÓüX×{+nDÎðüG­¶£ªþ§ûàÕ¿—G;¿EÇÿ‡÷ï®_¿}çßEþFõ¿•¡­c£ãÿv]>:ö3YÕþÿYí©Ú/ÔŸñ_µ_¨¿=þŸMjg›×–éíkåZßÞzÇDÒ£~¬¼*–5þ{º¦k}eùëåmçHz5˺þoÙOÒ¼áíßHy-=ÃO5«8þ=ûÞþÝ*άøŽ¶ê㤜u/pdz5›ÿÑû+]ê§Vù¨Ï6Ïs¾j¾ªØQëÙýõçÏW·Ññ?ªÑVcúo«ÿÑï©hÛXÕ÷ÿd¨?6™ßÿ#°Z»Öÿlýy¶x-¨Œ³Åk‘ñý÷sŸ´ýÓæµezûZ¹h Ñ8¥ø,Rœ½öT"küKíI×úÊò§mGãñèèI¯ªýŠú÷ê’æ ­ÜlÔ"òüŸñ;-R ®ÿ`Cý±¡þØPl¨?6Ôê õdžúcCý±¡þØPl¨?6Ôê õdžúcCý±¡þØPl¨?6Ôê õdžúcCý±¡þØPl¨?6Ôê õdžúcCý±¡þÐüq\ŠÌìw™ImkBTúÎÊþ€^xœíMh]Edzu×Ï€‚(âVÁUܸ7 .,Á®*T4.ªX’ZETM yh1¤ÐŠÚ$Z¤â¦[©bLª #"MÐÅ ±ß\ó^onæ|ÌÇýœó‡Ã}wîÌ™sïofîäͼV)‘¨"ZÎÕŸm=eùÉ[Ù8}ø`æê¿—¿ þÜ{*".®ÊŠóãß*—7Ûx¸×ó’©^Ó=¥évµÿ¬?›~õ)¨¼)NÊT'u¿P6üC>GN–‹×ö¹SéT½Ùk®õQù°z9|©¼o(‡§LP»¤ü›úÔçªÈŸÊ_îs¤ú¸/ÓuÛöÅ*üÍ×9ÏK ÅÁ¥ÿcù²iUàÏñ]5þ¡Ë»^‡îßÔ¾¸ãUžò=Ì7tŸÜ¶€Õï복Ékº.‰âÒòÒobÛCÞ¯>9Ó–c¤G111111111111®;öžX-Q}%üã–ð[Â?n ÿ¸å»~$üã–+ÿ³/&&ª·\økîׯ]þ -ÿÏìMØk›ï~ž?2˜X µÇMöÉÁ²á?÷âµ¾2®6VÏl±µŸŽª¹Ã{Ár.{C2ãøâî]nšlø|h·Z_|Amü1½ÍÖ¾Q “·Ëqö9Se|äÿé²ÿO=»K­_V¿¼’|NŸŸÙe,Ãù]µš»‡*K?Ü=åÜ}éui?.ó¿w&ÌõQkvó|öàc~Œ?wÜÅž;VŽªŸòŃÝKø§ç÷Ù¿÷fžÚ‘Xú’ÍïB¨çÍ)Ç) Å™½!иT·yÄ?û7ž>v:+Nóqú-VƦ\ú:·-eÓ9ýºÞ$þšwgõ£~ß×ç«Ë³Öm Ôøosnã‹ã×åê ”ÿòk ÿ¬­^Sç&ne×A½“©y惚7r}qòbï0®ÿª {ÿÏÞ£:—©ÎÊ»[­›¦¿ Õ_ÔüÿÔÈÿãìZ§Ûï;Ÿèžï,(:¥¢Öÿôü^³Çæù¢úɆ¿°oždý?n ÿ¸%üã–ð[Â?n ÿ¸ò_j©¥ö°jŽªöèÐÓéÝE†)ÊIÿ„ýðÐæYë†uÛ…NOÚÀ¦æß¹3ÏE9 â¯û¹f[7¬w>ºÙ64ûëI¨©Pþý>ÞJÚBr¾ÙôðéÛw$¦ù÷>ûŠ»@F>ü¯ýóÍ6ûðõÛÀº°ýwé<6éUWÕãöá?óÒ-‰ýûûñþgLÂ?¼òZÿ£ø?öæɸ?ýü ÚX<šW¯œã¤öcP{9°vÁ½Níë²ã×v_cѲåÿäx[íŸúJ˜¹¤ÔŸ§•úûG5ùÜîä¸ðê½`=×ý_Tÿ>qøúÅb.R¶üL-¨ÇO_Ù’÷³ ËjßÄ—ê¹ÀzòâO¾û )Î.ýÊ[†lù?üþ%u߉Å$Usï}~`úbÒL2=+×þ…¥Íߤ&ó×ïü›§¾U7Mníçºè4}Ý$›gPWþ.ãVdËÿž‰ó}þ=îÚîÿZ=úÖY£/ŠK¨ùT6OƒòrüÛú…î¿LßÿwÙ¦¿ÿíò×ï÷GÆÏ©»ÿœ¤jþú³6޽ÿË’ïs΃SUØkaßÿ÷Ú@+ezþ§ß󚽞îûàûäz÷—-áËuýWs×ïý÷`û½ˆ'Yÿ[Â?n ÿ¸%üã–ð¯·äßÿùHøÇ-á·êÆ¿JßeUåØ ÅŸ³–“Îër­lU96HEð·}.¿8•ÍŸZsÅ|Qe8kô.þl×®óÔÚÕ_½¬Œñ?–ÍcJ§òøìÑ øfÓ}㯚ʘÿeŸg¶mpÆ SšMŸå1T¾¢Ú@¿ÿ¡8ûönþ¼ø§ÏónMâo3þsü@çTžPü¡´ªìo?*ÝäËtÎ3R~°¸ ?¦÷WQï€ÿ‡l“U§¹˜‹žyz¿— ÿ¸Õtþ"\Â?n ÿ¸%üã–ð[Â?neù‡ø>A¬8 Í_—„ÜþqKøÇ-á·„ÜþqKøÇ-á·„ýrOKQü±=€MR÷V7þMæ•ðß.Îï98û¯¡ü?Îï@Lùlö*›~;€ý–Åe/:ç^\UÆøåI¹éXô›Û:|ýºÄ å«#ÿ´8ýê¯.¿ðÉÕmÃ×µíCuÖ?5îAiß6uqòQ}‹Ñ•?K“ù»œcyBó·éÿX:'&¨ÎºðÇÆlêæË¦.®/n¬¿Ô½˜Êqî'÷žšöýï³ ùlóôJÂ?lù¢|†RÓø‹ì$üã–ð[Â?n ÿ¸%üã–ð[Â?n ÿ¸Åá¿Ôj©±äØOk··¥…T•¿3k’(þ=öjh¨Ï[³ouÏ»Xm€Z³‡Êø\GHU±MSü{ìUŠw½¶¥Ív)ÔZ˜­q„Tø§M³o;ðϦQëªÔ:-–†Å­§‡\N±uÜ2Úçý?–ánÃ^ ão»Çûì¨6—õ…­é»ÆÂõ‹Åœ·læiþ=öz.@‰âíq ®§ýQïwè:— ÅÙ¥Cy‹‡Ë0ö§Û%—ûæ^ÇêàÄÁñeÛÿmb¬:ÿì\O3_J™Ëûßf¬Ísüç–õÿ]ê/R¬ù_æ}ßJµ.Nî§Ó©|&ŸT: Ö¶M1cq!îü/ËÙ”ÖtåÁÉÓçrBš –¿8!mkBTúÎÊþ€±ùxœíÚ[JÃ@à.ÖwqA}p7Ý…¢ WPéC¡„ÌÌ™dìI›ï‡i;—“L.Br>ßÏì×çÇ7ð ²ß?&×étv*ûþŒ“ýþ¹²?b²ß?'×Ûë ;&ûÎïÏ;–ýÿce¿€÷?ðþ‡ä$ûþC.y®d?Âó?y¼‡ìåQëÞZ¶°¯5\þ^M+õ‰Ž?m?×ÿvþV sãMûÖ>׿oÕ92[Xÿ¹´êŠÖ]ZÇèšFÚÖj©µ‹ÔöÛ9í9æ§¿ÕŽã¹vµ¾µý»dÞZÝ¥ùæ¾ï­/:kœèØ‘yzÏ£ÒÜ­ï[ã.3ROÉmÛè=¥÷ú?jý{ê¬ÍSú©¯Öï^ë¿vÞVzö÷šëSi¾Z=Ñ:kí÷¶þ‘ó?:ç¨ëÿÈõq-_Òg͵º4wÏþí™7šV­KÖ¿U[´Ý’þµ~‘ö×6¥s¦v?l]ë¦íj}{öeëünmë\}‘ñ[s—¶«ô9rÌ—êÜRÖÔµÕmzÆôÜ#{ƺg_™Oöó'<ÿ‘qÉ~þ„ç’–?\ª®©M\Gí˜mkBTúÎÊþ€ºxœíÚMjã@Pvö!Êbnã[$d0Ì ²0Ó?Õ­VJ½FNKÕVYr„ôñòòûƒóz{ýü'²Ÿ?&×õzN*û÷X'ûùreÿˆÉ~þœ\ÏO¿819wþý}çIJÿÿ`­ìçðüžÿœdÿþKDDDDDDDDDDDD~V²ï?áþŸˆ/—Ë%{ ‡ÌöKk«æwÛΞŸ÷qÛ£µ2zñû%:‡Ñ¿­ª±*G8–Fs„9ïÑÿ¯õnî·sÿú8¦¶ní½hÍZ½Úël½È¶Jc#µ[Ÿ-:÷Þju¢ÛkËzc"ëÖ–{ãZï÷zWËè6KËÑÚ#ûdd¿¶æ3SgUÿ[ß³Ö1¹uŸ´æ°µVi¹ÖÿÖ¾Ô¯ëzý­S›ã–þG·Wʪþ—æ°µVi9r®½7zœ×¶[ëÕ̾[ÙÿèØÈ¹v¶W+kn¯÷ÞŸieÒùçñµt>¯ã[ï—Æ•>gmN¥Ï6R+z<ÍÖŽì“ÞøÈ\£czóŠdfU9BíÌ9Ür„ýðõf¿«{Ôþ‰ýϾÿ„û""’›èuPkloÝÖr«~ož2—™žFƶz4r­:ºmKïÚv¦ÿ½þD¿s¥qz¿OZý=ÿ¯êÿ}ýÞ#û{ôøï}w"¿9‘yÊ|Fη³çÿ•ýw>X—^_VýÿíôØï—Xj×l˵ë°ÈµÛ–ë¿è;‡RqbâHàä|6p‰±+6ÄÜO|&Ä©är1,¾ºr¥bSÜ™”«À g'•‹ vy gßQwà˜±dòIZ´H»«É«žíéíÏÓÝ3Ó=ó~©T;óôÓO?=ÓÝóí§Ÿ~ºP:rL^¯~÷} /§{ÿþýÚ²ec]bi²¤=ã{49¾[»G—Ò'KÒžÝÒøDIïúË:Â#CœïtÿþýÁ £y§®û݃úþ§·%*ç÷†N¿çî;Zλ®¿^OîÛçßb%I*Mj÷ø¤¤ ©tñ½J’¤Q£ª!©¯õ±Úë÷½ÿ6ãin[¶l$¸dÒK]£wýû%I U½øØbËÕÖÛâµ\¥Á4 Ò-I…‚}ëSœy`ωœï¹ûNÝüH’¾ö•GëÒ£¾‹­[7\2åÿ=üóz×]ãZ˜þ$éºQ’tþäôƒG®ÑÕwôYIÒ·Þ¤þá­:ùâY½ùZ\ÉŠÒâe=÷ÿ =7®;ç?­¡+.ÓŽ¿wµV¯¿B?9>¥‰——•á.Ë$Ýy/Iß~üqÝpÓM¡eÍïÌçžÿ†›nªý÷Ks§‡åwÿ•T—'jyaéaÿßÿË{|›ï¹ûN½ÿ—÷—ãüß¶mLû÷ï×k'O&ßzH`çÇ~¬o<úMUμ¨r¹ªû±¾î¼Ÿ¯´ºz±XµX­èíÒô›Ökïo¾˜ò&}÷¹£úãgŽë™³«õöÁÓËæùöãë½7ÞX÷Þîþ›wyÞ²ÝïýÒÃò{§ùÕ9hþ´×1 '¸¢å Ð,‡¿¼³6œ‚{x…·ÿËçõÕÏü\-ß?¸øþŸøë–Ô3)«ÀêDß*½z¾,IúîsGuÿ¡ýð–Múì§ô\é´ÞþVÿù‚•0&Áˆ_Àæ}‡»\o’Ì'¸úêÿ˜ðíSåô¹zÿ/ï±*ÏAph÷ Npuí'ž×>óVÝúì² *¯A•dqWà­?ú°þ|  ©™9IÒ»¯Ù w_³`ýÙ|¯Þ7;«Ba¥ÑBÝËó^4™îøÎOD–ö>(=i¹~ó;iï¹á†Ðe¸}åO¾XTy;¯;ÁÕn¹=²,?Û·o&¸4Å…ù9]{×ôƒ‡vÖÒv~èôì—vÆ´RnÁÔúòœ¦ºgùîsGõ¾¿:/IÚ0^åÃ/|ç‰'ôžn 2œé­V¿8óÇ]'wåîОÁ )NLHCÛuí]_X|?ûêêÓÎü–þú;ïÐÈ{~ØÒêIéÜ]èXíÞ=ªñ‰’Æw/¥íܾNs/ŸÒ¥õ´íý½’¤M¯ŸÒÛ·½IÒ™eeyƒˆ$AJÞ@ƽ|¿ô°üAå†NÞ–ª°2ý8‘³»Uê·ÜžÚxÁ ±Æn}Vûþy]ëG¥¡Ñºi}šÕô+3­©X~øÑêUWm©K|ÓÜѨ]3êJÿËk_¯—‹úðÛ¯Ô—_)¨rvZz}J’ô۷ج:§âßû^ýÏo»ÕÕÈ”Ÿüä%ž-h˜gz›T•ª’nüµß‘fKzâ±?ÕÎ=ßꪥ"ð‘6¯®øu½*éÝ¿^Ÿî<Åç?xCÕ×NÔÆ±ú‡CS­)šâª«¶ððf@Ãì¼ëÇ’¤~æç¤Ù’¾¶÷¹î¨î'Ö¡¿½ñ¬´Ñ)5ŸA­UþœÖK. ©ƒ*)Á³ÑÞ®¾z+­W€†hÇ€ÊÑ”g"Ÿ®¾z«$Õ,‰ €0VˆäXAa¸+;vl«½vY€+$à²èt/¼pPù| ÃêZ¬®X»¾UõÈ¥¯ý´öš+€”XÅ0ºqD£GZ] 1Ë+'hh—àÁ»I×itãˆJGŽ©täX¢r‚ÊùU×ÇÊ ÚY–×/ËuÑŒ.µú˜´nåq—á—7jþ°üAåš,/,ݯ<›zx§™äùQ×bU:r¬îÇݤÅ'¨Å+(OÐkï{¿ô°üÞi~u šß¤Õ.lÃêÚÛ²Bý‚wÀ‘f°´œ ÓrÃZ¤ÒXG‚*:K®G^O¸„µ®9AÁ0e<ÜBÚ­UiKãn?·¬®'È®ewº¥\˜ôÛ ëßå—nÚÌÏÛïÊoþ8}Ì’ÎÚCáᇭ:ÓmÄ#m’¶re¹• Ày¤ aHQëFt0È¢º>VOîÛתzä’Ó¥JòVïºþú¦W Ïœ>VR.t +€”X¤„À %V)!°H •¥f>ã/Ïô«óèÆ‘ØëÒêÏ ÕËäKd`å÷£˜§›<×=ÏœÏÙyÖ£ßC®±¼,ÈJ]Üß 9:®ÅŠGä4GÐçܨϟïu9>h¾îè,‹h§åÁË}65ÝÇ)Ï]®_YAó‡å*×dy¶ëdZwž¨åÇ]VXÜLÖÉý™Ù,Ó–Æçį¾îzG•kó„ÍU®éöc’æ-ÓdºI}é1 ¬‚„ na…Iâ—°¸§ý¸™”ëǦžA’|v¦u·­[Ø÷b³Ì°uˆZ“ò¢>[ÓïÕô;°-×›7ªî&ß[Ðöm²/…Õ.ãÀÊ4è°‘´¬ – Órƒæ»žAA…MÐdYIËl¶¤ëŸÆ¶hS‡´·@ûIÔbÕjIÌ¢Zml–'hJRÿf÷aj„¸uMóòVÒï—Km7«Îë~}X²"i½Lú!ÅeÒÚGë•}]Ób’|^T)a‹•7вí€mZ–_ºé²ƒ:bÍoÓ™9¬þ¶ùm>» yMËŒÃt™Í(/Î:ú-Ïæó ªWÔ:øõuJR8ÂêHWáᇭîرM’tÅÚõ©/ iÿú¯€,;ñÚO%I/¼p°óƱh”†Vè`E´X¤„À %V)!°HIä8VOîÛ׌zdÚwܦ£¥ã¡yŒÝÿüÓ©T ÆÇï5Êg<òúî] ïî¹ûNöèP÷Ü}§q^«GÚœbL)tž¯|íûµ×ìÐYÜ¿&¬Ÿxfª`; ÐVØA¸+ %V@“niu B`+€”Xw^÷ò^Ö(9æ;ÍI÷¦9ï£æ²jtãȲí7h{Oc>@v%¬¤åA‘ó>*ÝûCâZAóyg[f€üJ%° ·“.{‘'î¿ (öȧ†VI~`8;G;`€Î“ùÎ뜹#üZ«ÒÂ>ùѰ+wÇô$óq掼ŠÚ‚¦³@~%¬¼}÷{¿„ éQóYµ½û¥mëìO™¿V-V¶OxÚ û Œq`uÏÝw6²@æ±¢V<¸·‘õ2ïhé¸6Œ^ÙêjZàì”YßWãÀêhéxìÊí‚ý:ÓðY>ãÀŠ3ut:Z¬ s™¶XqW @JbV…B!Íz4LT=m×#/ë š¯å-V*È»B¡Pûߪå»ÿZ§åwÕjµî/ s%z¤û ÙùQ) u?0î÷Þ3jozµZ­åšÏ[vPy~?r&嘤Q‚ö wšé¾´í¹ó¸[­¢ö@ã$ ¬‚~üøýˆø•ã—×o9aåÙÖ×´|~¤`Âo[±Ù~L·½ @ë$~s#øý(%™?n9ôYA\iWIh@óe2°r‹Ó2•V9ü0!¿KÜ~i&e‰º h¶ì¼Þˆ–&Z¯`+èò-¿mÏ{Û¼…Íh¬Ô;¯;ý=¼LÒÃú‘˜¦ Ëo²´ ˆ·ÅȤãºó×dÛfÛ€üˆX…샦™t^·9Ë·-϶!­´7ï6w6I÷Ë“¤ @ºšÚÇŠ³pÐÎŒ«£¥ã‰V:²ôÃ4Êó–v™€Ût¦á!³|ÆÕ†Ñ+ãÖh GKÇÙ C:ImzW @+ĬÚíVîv[4O³¶ïrâ,×fö Yø\ÂêЪí1/òZoäGË[¬ØÈѮ҄² ‘õNúµò3Íë÷ÙNÜC8ÿ½Ó’–o²º—U¿ò¼ó†½[~T=Ñ™y@k5ó^Ûeµòîbîln½°ç½&ý~lhçÙ²&Ï*Ÿ¯gOꄆ=@ÖAû=æÃAÃ4„•U^‹4Em£AÛº[ØÙä½»ÓýÐd,8¿OMæ5^Åoÿ÷Îïnsœð[–·ž&Ëvçõ{µþi}'Qß}’òl¤Óú 0-×;oXÖWš¿IʲYw4_¢ÀÊ&B79å ŒüÊ3ÅÆ‡´í Qƒ‡Æ9Ëõ²ÏdJ:oT TfØüae™qÎú£Ž-qëU¯8ëä0=f&=þ¥õ–¯Qó†}¯Õjµîd´õÉ=³ØÖ—ÉK~;F’ù“æšÍvÛlõIBÐZ#4â,=ég—FpeZnœ<¦uÈs+~’ “<~-`Q ¦’e6õDãe2°rK£e hg­>ˆ-¿Ùgí~uhÕ²mëÖêVF«¿û<‹j± ›Ïær©‰´/Y:e¥]O˜iù]@ð…¼‹³ ·úÀõcä÷ºÑuhæ± ê’œ)Ó~HI—ãž×{ùºÙ?Äi|O¶õu`¿ÿ~õKûóp_³T¨lH½ózÐÆb’t`²)/n> mÞmÛo[7¹Õ7Æf?4ÍVož$åíÿ¶û­í²lò¹—ôcæ-3ɱ1¬ ›¾ª¦ËI"ß“zšÌÖß,Í߀ mÖô³0ÙÎÝýÀlŽ&õDãŬ¾¨°–#h#±9ë3=À˜”Ɇ‡¸Â¶¥¨íÌdÛ¶]~XºÍ~ëwI/îþi²œ°×A?~u4]–iZÐrز“~&aymç‹úþ¢æ±Y¶Ír’³£ú8EM³w?6Yvš¿Oü®eCSûXµê® ùÓÊãǪ%Qeܲlçç;A^~øÑêŽÛ$IW¬]¿,ÓûöiÿóOëãwß×ìºdÂðPUƒC#:Z:¾lÚ‰×~*Izá…ƒæ-VF¯L¯v@-g?€uvê˜Q¾¶¼+ bVÜiP¯å„2îò®Õj㌘t»¸wþ [ÅãÓÞv¢–›F¦ïmÊ7ùl:ÜÇ™š­©}¬:-¸è´õ ÓV~Os¶U:²ôÃ4Êó–v™I5r}Ñ|Й†‡ÌòVF¯Œ[ --g?€uvêXt&µé]­@`¤Œ!4âI2DCšåÙ.§UåȦL ÊX5@v¤õø¥¨@"î>ßÊãE£Ö©‘òXg 2X±cÙ•dÿ š7IëM«X§FËc¼Iu€Ð°»…=ÿ+è&åxÓýPËh“ËQAa mÜÍv»Ns1Ý’î_6ŸWÜçvš§Ò„4ì3±ùMÓ¢–  ±bV¶Íð6—ž¿gr€ ÖÒ¸´¸m¯iloI·ë$û‹wþ°õ tl%ù¼ÂŽÞeÕÙäóµ5¯MÀ•–æ÷ ¾Ä-VÞƒ’íÎÝè@œ3Z -a¬Iò#˜f+JœrÃZèòð£ž•Äæs´i¡Ëº*ñ#mòöÌ®¼Ôí!«Û[š-KÞ´¼Z%¨…Íïs úlù€ìI<Ü‚w§µ=le ­Wh¦¨>‰Þ<Í’t™a}¹²Â[Ç þŸY4ùÉÃ÷t‚D}¬iïÀ¶<¿Ž§Iò6‚¶×4¶·¤Ûµ_zœýÅï’¿w~ÓNÚaLêÄ4Ÿ·ZÜËfqêö9ú•öÙ6ò{_âK&ÓÂÞ›¼jÒŽêdk{ÆÄœØÌµïؤ٦G¥ÅÙßÂÒmò…-/ª^Qy¢Ê±YŽIÝÓãÎëF¯Ô†Ñ+õ±»>¬ç_8Ä_þvÜ_I™¨ùË_þò·ùM~øÑêŽÛ$IW¬]¿,ÓûöiÿóOë÷J’¾õĤqá@;yëŽÍV; =ìýüýúÒ—ÓàЈ¯ýT’ô í‡[Øûùû%I¿tãu «ÙYø¼È§;ó>ã¼Ö•Má&8wlÃÐÞœF%±[¬:M£’õp îÂÝgêß|üûµ4çµ÷½÷ÌÞ›þÍÇ¿_Ë4Ÿ·ì ò‚ò™Ö%jy¶ùÑÞ¶aÓ}Â{?¿v]û˜Q^ëÀjïçï¯WA?~L‚ ¼~Ë +Ï+¨ž6éa?ŽIë‡ü‹Ú†ý„mS€ìhZ‹U£øýH5sþ G0e å}›úÙkÓê* ‡.[ûæVW°Ò´«fHÚò“fË­ H[;lSwÜq[««€yä³' KruW`#4£ ï- ȶ)È&›÷µXùõ“rúy™¤û½Û–g“ϤS|ÐzEµ4˜Öù—Ö6Ü­WÐŽl•Z6òzÚumË ÊObaäõå~öÚßp)Vyä1úX!wlF^oj+ÎÎçÏŸWWW—ºººT,U(T(Z]- PCî t"´Ï=ôÇö5º¨täXìyÓ.;(#ëˆü{ëŽÍ­®B¦<É]ˆáò5Z¹r¥Ô××§îîn+ä@Õ(—q`µaôÊØUÚÁÑÒqöƒ”ìûƒµ’¤ëïµ×­p~fZ+û{54|©V¯^­¾¾>‹Ö÷RMuvʬá…-@Síûƒµºîw¶ºh¡W_}U§NÒùóçµ°°ÐêꩊXuj³m§®7†ÿý©ËkAÕÂBUßûÔZ}ïSk²¬´úí°Ï§ïܹsšU¹\VµZUµjv‰ÈëÎëi+ ìTÈ5¶a3ßùäez×]ãZ˜þ$éºQ’tþäô{/×{>uÒw>o`còY7û;ñ.Ïy϶á¯R©P¡mq)@SÌ—«Ò¹W¤¹“uÿûW­×µ·Ü¦§¿°1p^çGØ Vò‚Àè<‰Z¬Ü8çtææÍïÇyïw¦ç·œ¨òL–t†éÎë®[ØzG}œ¹¶·°mØtŸh÷íã—>ý·úÚ¿Z£o½IÅá­úæCŸ•$ÝxëMêÞª“/žUnÔþ˜ä¸’ô{ŠZžwzÐñ @~$j±²9‹t~Í¿Þ4ïAÅo9aå%©§;¿{ÞƒbT}Üù9H¶¿¨mØOØ6Ó®nþì)}ãÑoªræE•ËUÝüÙSúºó~¾b]^ØgöÍt\‰úžüÊ0­'€ö’ÉK~%›Ž¨­ b‚êIPÕyL¿sÛm;Oœ!œ×Îû[þð´¾úÈŸjaañ3ú•‹ïåÏ–åþœâLçkÔwVO¿sù”ÉÀÊͦeªÕÜõÌz]‘ íºÍ8C*¸ƒ«k?ñ|íý:£>´H¹_û û|â~†~ó¹[”ÒrÚõ»P/óUY8ëËB/í¶Í\˜ŸÓµw}¡.¸Úù¡?ª{o+ªU'îg˜F+³M_J¿þ_¶eȦÔ;¯›ôAJ÷;˜Ø–g*Éü&ëͱs¤µ ·Ý6sbBÚ®kïúÂâûÙ¿PßPŸv~à·ôgŸ³þÑoÆ{NTÿG›2¼ó5êûhûï@MìÀ*ìÀÖdï:Èý0¥UžÍ²ü^Û®7ÐÎÆ6ÜN®ÿ½×ô{/Óõ·~T­›Ö§YM¿2c\–Í~”fúÄ-Ë$¯é6ЮÛÐ)š:@(gl@çxϧ~¦¯}bT]|té¿ö;ÒlIO<ö§ºù³§[]=hãÀêhéxâ…•Ž,=À0ò¼e§]&àÅ6fçæÏœ’$ý·»†¥Ù’¾¶÷‘ÕÑþΜžRߊ~­<¡j¥¨þþ~uuuµºZ@¨á!³|ÆÕ†Ñ+ãÖh GKÇÙ ¨‚cxõ.»|Ö­¿B##ëuÉ%—X!óÎN‹Î¤ <+@û# Ð)2=ÜB³o?Z^£ëÑn·ÙЩbVyL¿ØÅ»]GV,ב—¹#i { wгêí)Ñ¥@÷ì<è\î|¦Ïé2ið[®ßë°:›®[Ðúš´X}>&u ›´V¢«$gã6óÚ´Ø›?lÐ>ï#(¼i~ÓÃò˜Lš­Ã¨ÚGª—½?øîàÇ4HóGÉvÙì…U¶ó¢µ¸äç£4¡RiR““£ÕdݤÑÝ£Õ¨´{¼5€†J-°ò>k«ãXÞ"æåò"¯J¥IMN”´gbBÒ„k‚41>¡Ý{¤Ñ‹IßûÏÛôOã`“k‘zçu¿Ë"6gðiœíçõ‰ñaõÌCýGi²¤=ã{49¾[»G—Ò'KÒžÝÒøDI㻃ªòÑ?'¸Ð6=„ÙÝ:ÕÈ>&Aå{Ó“–ë—žd]âÔÏ{ùÔŽl2Ý>;î;,Mj÷ø¤¤ ©tñ½J’[«¾ý¹Íµ¬óó úöç6ë½;”h‘œ˜hµÔ:¯Ç}â{X9¶O†7í|n[nPYqëmúy˜Ì‹l0ÙŽPïïøŠ$©:÷7µ×_ÿ£zß¿.ùæïÄn„@þä~«Žnrì¿?pƒ$é–;ÿƒþdï¿‘$}ð“?me• 1ãÀêhéx#ë[éÈÒC³ZG´¶±t|ïmŸÔ—>öóš¸÷*UÏ—4;SÖÍ¿ñD`þ¨¡H‚æ‰ubæ-Ã[o½üòùÍ–?¨ÜvtöÌé)õ­èתÁªVŠêïïç!Ìȼá!³|ÆÕ†Ñ+ãÖh GKÇÙúè¹qzWhèŠKT˜ú¡nÿwOë ÷¿C¿vßõôCÖ;ÿí3VåY¦Á—Ib2ž\XÀc;*'Ü<¼zH—]¾FëÖ_¡‘‘õºä’K¬yg§ŽEgR\ +z»4ý¦õÚ{ã›%½U’´áƒÏêC|\×¼mBïlr}’ÞüÒˆeGõWÍÂø|‚uäC˜Åï‘6è &ß=Û†t¢o•/K’¾ûÜQ½ãO^Ö»¯Ù “}z®tÚw¿GF¥ñY:‰ó¿ÙÜË&@ÚGË[¬ò~Ö•ÖÙcÞ?‡NÆwgæÖ}X>PÐÔÌœ$éÝ×lл¯Y °þl¾Wï› œ×ô©ye³ ÑZd[Ë«¼KëàÆA`}yNS]‹‡ï>wTïû«ó’¤ óçUŽ,™ŒEg;¯—ÉÇac–%ã,­1õ4OìKÒRÓ¼ûá=Py§Íãmâš/hùAu0}T†÷2DÔ²¢òG-/lzØ¥“Ï õ}åo×ïm÷îQO”êÒvn_§ •Ymïï­¥mïïÕöþ^íЌ޾íM¾eEu(º¤fr©Í6OTüʱI+×Akm© µ³‡Ý¥ã×Ìt° »«&®8wçø­oØ{“»‚ʵ9¶ËíØycòݽ7Í“'%Iã{F5¾gw홀«5¡µ×þ¾ú¦Oè»Ïuë˯tuqVzq+ç_€IDAT}J*tÏ{®j]… %™¼˜´?EÐx4A}âÜÓHiWh-“ŽìíÜoht÷„$i|w}úž‹?ô__PõµZÙÛ¥«7­ÍlP•ôЈcHžn d2°rK³eªåÛòÐ/ͤ ´FÔ6ô}vÒ÷ö¥_Ý!iG««©KÔÇ*«¼—Ý?ty¹£&ª_‰©VŠué?‰Z¬LîvqOJ &âÞõc"­râ./ìr·eÃfú¹d=€lGQÛT’»ÄÙ;° ;ð‡Ý]ãú±i©1í oûÞfž Ë8aïÖwýMÒѦßYÔ%?¾7È¿¦ö±âŒ´3ãÀêhéxâ…•Ž,=À0ò¼e§]&àÅ6$wæô”úVôkÕà U+Eõ÷÷ófdÞðY>ãÀjÃè•që´…£¥ãì@ †Wé²Ë×hÝú+42²^—\r 2ïìÔ±èLjÓ»ZÀ @ÇÈò0Y®s™ ‚Y ÊËÍ1Z…À @¦(È.È­B¡Pûï—5oX9~eúÍg[^T¾°tÙgÔb5>~¯qox ] ™ß‚ôJï÷LFÓç.ºó†•GXyQËMcùy0;3¥óçVê³'tvª …y†[@ûˆ ¬î¸ã¶fÔ…*¶ü—°ÇC=_4lZÓ|í\õ­Rÿ%GƒWhpèJ†[@[‰ ¬@VÅ >ü‚¡,1Þ 1KuK „¢ÑÇ @[°i½ {P¶÷²£_æ½ì؈¦v ¨€NÀ]2-h¨… ¾Wîô¨‡Å»/çyˉ˴¼ àŽgªùX=¹o_3ê¾¢‚£$éQ݃Z¢‚Ê [~’´vóâK/éoOÖßž:¥Õ«×hÅŠ*¹€‚ì»ãŽÛ"»HµXíþéT* ½¼å­ïluC'^}YoLŸÔ¹éW50p‰zzº ¬yãã÷å3¾øÀƒ{cW@{zä‘ÇZ]…†ê„Ö£VøgÿüW422¢«®ºJ###܈†;sú ®ºL]]=±æ?uêI FyécÚ^WWfgÏéÂ…-,”U©TT­VT­VU©,Mîî•JY«V]¦aÍÍWOÿ £åX€ŽpáÂŒz{ûT©TT©,¨Z­ºZ¦«µ÷Õêâôéé3Ö… 3’a`e|Q›G+€<[j©ªº‚*'ªÔ‚*o7€¹¹ãeÐb:B}KU}夻9JóósÆË°º ÃýPР¿Þʸç£Õ ´J¥²Pk™r;xð@­õjéÿ’r¹l¼ «« ge…Iû§²«ÝïD<Ÿ |´v¬d^XPâ—7, I£q„=,l™Aëb’'îúÒRÄG` —â­lyiö²“Y´PñÑÇ @Û káq´²UÆ6ȉZ“wž4ž e‡•ë¾IkVjrbbY‹Õî§žÒ®]»ôèu×%.ßÝïÉ/¸ˆšn“Ϥœ8Lë û¸ a&vï®uTw.ÿ^œ6*I»v-^*ŒyÙÍfšÉtÛ|`³l¿K‰Z‹+ sÔT=õÔSš”¬;­‡]‚ š6ÝnRް²¢ê¶lod-VÆé¼¾KõÕï/¤]»Œ:¯G9A—ÿ¢æ÷ ÂâÔ#jùi–áM£µ È+ U»3Ðø¥@; °Ðp~T§UhY¢µ 0³rÅŒÔÕÕkþ½3Æy ¬@ÛëêêÑìì9]¸0£……²*•ŠªÕŠªÕª*•IªëûX©”µjÕeÖÜÜyõô¯0Zè.̨··O•JE•Ê‚gˆ÷°'‹Ó§§Ïh``X.ÌH†w€Ž°ÔRå7Î ¤*µ Ê{™}nŽKuê[ªê('ÝÍÞd~~ÎxV #T* ªT*¾ÓœÖ+?årÙx\ d1€:pà'µ”ry^NPuøðË‹¹êZ³üƒ1?V #8—ûœ êàÁZX(×Ûu‚*篣Z%°¨ã´BmÛ¶½–vèÐ!IÒË/©¥mÚ´1öCÑ ¬t¿gìñì= ³¸ïܺu[-Ý ®¤Å Ê5‡ço4+™æü$ ˆœùœ¦ÿ<^N$U­»¬ç®$iãÆÑº±¬â °ÐQòHH—;hrþoÙ²E’46¶©vòâ ÅçxÁp 2¯Z­ÖZ˜Üî×îaÐå?'ÏÒA´Z—îÍTž»o~u š?,P¹¦uPo±%ª¾]illlY UÜV++¹\ø¥{Å B‚™ ×Þ÷¦u *‹À ˆÏy½P¨Ö¤8Ý-Uõ-Væ—á ¬ä‚_Ò¨òã,'i½‚úO…•›´Î@§º\ÓÓ§=û[AîÎéÎ~T©,hpp$©·×ì9dAÐXÇŽÐÈÈv]zéj«ù^zé9­[·YÒ‚Q~+¹Ñèà#+-?6uÈJ¬^«žÑ¹sgµ°PV¹<Ò‡ª b±KýýÚ²åÍ̼a¼ãÀêÌéWŒ 23·2qàæíÈîî/Ñˆá ‚:Ê›Ô)hþ°üAåæ9zýìy]ræ üÙYu÷œQÿuuuµºZȨ•+f—qölEÒ9­ì[¯•}ë­æýÙɳ’¤á!³üÆÕàªËÔÕÕcU·S§^ÑŠ¾øóèLaA†Mošß4“–Ÿ°2£ÒâÖ5,-­UÝÝ]êééVïŠn­XÑ£}=V4888þh&ãÀª««G³³çtáÂL­W½Ó{¾RYºîè>hU*e­Zu™†57w^+úW¥¿€|).ÞdU¸øúâÀGñ‡Ô×´úZõ±ºpaF½½}ªT*µ.)¹oW\¼e±RYÐôô ëÂ…­ìO»úž8­Ui–Ÿ•2­pñÑõ—Ѫ&iüQÈj`µ)ºÇwXü{ðàÚÐðN$é677Ã㨠¬ <³‘‚â~¢mÛ¶»Z«üã¾ÃM««U`U).UþàÁ’¤_<¨±±±ºyœe~~Ž ‚ó¯P °‚¿øÃ‰=< Í›7>)a~~N}æÃP%fX-¨R©¿5ÑY1Iƒ*ÿfér¹¬®";tºBA*¥®b¡î?Ä/þضm{-9tèÆÆ6ùÎ[.—^?·ãX-]ˬª6ÕMóÞ©R©TT(r:]¡P” E EŠKÿpËïèÓáÇ%I‡¿¬M›6úÆÍdÝbåMî jóæÍµéo“\µZQû Ðvyä±VW9S(HÅZ«ÕÒ ˆ;þp.ñ•Ëó* Ú¼y³:$Izùå#Ú´icݼq¤œ„u+§ÓØÖ­Ûôâ‹%9Mpc‹g!ZZ‰ú'CWkÓ´‡[oýÕeiÓÓÓ:qâU:tH'N¼ªsçÎ7ýŒÙ68x©úûûÕÛÛ«b±KÅb¿åŽ?Åb—ªÕŠ^zé¥ZšTyãf²¼¸XQgpW‡ÖØØ¦º¨7J¤o"ÐþzzºÕß߯5kÖ¨Pfggs9$gåÊ•Z½zúûûÕÝÝÅ0V0PHZTmÜ8Zww`«XVKÑâR…·lÙR[1çú¦»×>T ³twwkppP’´zõ°Êå2ÇÔéééÑÊ•ýTOOw"’_üáªÆÆ6ÕcÕÊøÃºóúbXßdët[~]³Z5ÒÔ ´¿îîõ÷ÕÓÓ«……‚*,S(ÔÝÝ­îînuuu1ÜŒxã§oÕØØØ²*oüÑL±-–?Ô¯¥ª>bdÇ:A±XT±XTw÷âá…À ^Îo÷/$(þXŒ=*‘ñG3YVCC—kzú´g'(ÈÛ1ÌY™JeAƒƒk$I½½M @Ëðc myŠ?Œ«cÇhdd».½tµõB^zé9­[·Ùz>ÐÙÒˆ?Þ˜nÞeAãÀjxx­xFçÎÕÂBYåò|ÄõË‚ŠÅ.õ÷hË–k43ó†Nþl*…*€N‘FüÑLFÕøø½ª”ßк+ÖIZg½ò…×ÕÓ%õ¬lîÊ€|«”•8þJ¿^A"«;õȽÈÀêhéx3ê{ ,+€”X¤„À %u×O¼öÓVÕ ÷h±HI·$½ðÂÁV× ÷þ?1Ùæ±CþF}IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/images/switch.png000066400000000000000000000201701203611042400304540ustar00rootroot00000000000000‰PNG  IHDRZ¹v¸ pHYsÄÄ•+tIMEÕ /uöºgtEXtAuthor©®ÌH tEXtDescription !# tEXtCopyright¬Ì:tEXtCreation time5÷ tEXtSoftware]pÿ: tEXtDisclaimer·À´tEXtWarningÀæ‡tEXtSourceõÿƒëtEXtCommentöÌ–¿tEXtTitle¨îÒ'IDATxœíÝ{|õ½7ðÏo¯¹îBb¼¡VΩ§”K@‚Š  Jµ‚ ´XJà‘¶Z„s/ôUô(V©bûõ€Q‘ö@ Öó<ÒÊñÒ* 4PP‰ ²×™yþ˜Í0ÌÌÎÎn²ÙÝäó~ùò5;;óÛï ›ùìo®BQèÌŸ¿DDDÝÝÓO¯Ð¿ZªA8´ª¢W¯â¾}ûe 4""¢ôkj:~òdëçAб8œ?ù? ¿lLõ?]zé¹Ünw %""JI’|øáßþ°ë½÷÷ý·šˆBQ5 k®qÁùƒÛNÂáÈé€ÔÖÈtÁDDD¬  ¿0ßí¯ÞÃÞIDATóy ó?Ýÿ÷†ÿ|WMD€ªªr5 =~¼)‡[[Ogº`""¢´(..ôù|ýúæ]pþ``DëÉbÞ¼e5ãÇ7üøñ“_~Ù|úÔé@ ’éR‰ˆˆÛ¤qè¦ ÉÎõùôÙ—?´°¨pÀ€Ò~ýz½½s_Ãöíƒ÷9~¼µño_67³SHDD¹¡éôñ¡›6Ü:o’R90ZÞ½9vv¨Œ.ð46‰ƒ_üûš ï˜×·°_(”Aƒûð¨ž>}:ˆäåù2±DDDDIëÿäš)7Žl;Äû‡¤PØÉ,î¿0寑¯>·Æ·¤>ˆœ>ëø_ï·IDATzøü¾ÍAžMJDD¹Ej *aÅ›—ç=Ò)ÎSüÞ¨ Š^I1 øÚÂÞÖ U"Á ˆ†Ð~ ʼn–Hqi´Þa(ry…þ3J\ž¾ŠW I§ÂøÓ'_7…¥HXòå+½úz Ì/(ôvùR%’•hT‘ÚÜ’4cÅÏüæ¾ÅŠ[D£²,„6ðÝWØx÷|) Gd!ÉÔÔ EC€.Ýî³îM3Pö *-Ï{è‹Ómý2¤„ÃR(>Þ ü-Ô§ŸçâKúTÔÅ‹MDD¤'…£p)‘°ˆ¢Û0±bÈósfGÛ'ˆ³žÝ ¾õÕ½?,ÉŠY‚)‘îIDATø<„—KyA¥ßï-ò‡òò"-‘¼Bo( ‡ÃÁP8 ¡ýŸœ8u20~ÂÐââ< ìÞ½c÷îï½÷Îüy‹kj®u²0/¾ô€™·Üápá_}ÓGý÷Ò¥õ§Ohæw&jÃW_}ý%_6jÔ•Õ¸™Mý@Ûœ;oœ?oñÓkVYÎûâ ÛÒWX×POB=‘H< õXŠ! (Š „ˆØÆDŠÈðQHîXn;tdbÅõ·Ü¬¾¬}é?Ô,ކÜ$7‘¸\.È’¬† €K—K¸=n¢4(Ërô«¯ƒ§þëGuKÐvêÄ5“or>oRlêÿûÑÃþñÒ˶nÞáÀÄ)ã´ÚT6K¸Õ£8øK‰lJ{ßM;c¢‘ˆP<ðH®#‹ Yõ´D¼iFí˵,<²xI(RHQ¢Q·[ EÝÞzòòüZÜz!{ |x¼®¢^Þó/ì‰DBaõ¿p8 …#n·ÛãU÷eaL»IDATµ*깬Ï=÷€>%¥E¹ÿ¾¹åµÓ¦Ô5ŒbIDAT¨Ã§ŒÛòÚNûöíýÃvl}có¤ÉS§N½yÈrmq6m~iÍ3«'MžúÝïÞÙ»w©~ÅÝpý8C;o¿Ý°ò‘–þxùر5ñÖ¸ÛãÞ·o/€ë'M€ÛãV›Zúãå|ðç –xòÉ_l}c3€»¾w÷øñW«}Ãõãþhé½»çÝwwëÇ'[ÿ¯~õËë&M-((\pÃm¨M°,à•W^zfÝê#FWV7|ø7‡¿<Þ2fn÷È¿ÚUSÚ¿#ŠÖY‘Ÿ‘Úσphႊǟ eá¡… ô %‘Kár¹ Æ¡[À­ësFAäÇIDAT(À·ýݱÐÉ`$ µC@8 ¶BmÁ`[ Á°Ïçš>öN¡œÉé›nºµ¹©é¡•+®ÿðý©7}gÈò±Õ^|aÃçùË£ª÷ïÿ€~øÊ‘WÖΚ;ñºj>olÝ=yÒh¨ûeìýèýŸÝ·xEý#u îyóÍWO45U–WÉí4®¼ººzü¬93J‹Kfß1OÖ-ª¡wþôîÊGVüò‰gýOí÷oï•_ø­o6¯qu·¤êºk§Âår»cëd芋ÏæƒKr».üqÝ‚{Zš›fΚ8uJûèÇÿmå‹¿ÙgÝy³â¦é·þéý÷eÖjIDAT’ªÿÀçûŒøÖH¸\p» W½¸Ý±ls›^~á™u«Ÿv#$yÖ]·ô.*þ§ü±}áYH°HVø½ 8„ÚOOËêáD£Š8{âïN¬²æú)úwåhlb—Ç @(­;náóz!E$)tNÑ@¹PVdY–$Y’$I–¥¨¤½”eY–eŸ×£Î¤n䪆VÞ{_ýë[^yzݯ½ñÊš§Ÿ6lب‘Õ[·eTõ¸ßm{ €6ýÕÕO÷z³õ*ÒliÊ0…yHqèvBªi(„ú}¢‘¼^¯$A,\¾¿u‹–…hßkúÔ¤¸QÑH€ÏçUcTÍÃö¥^¡í•|¢º¥ù½Ï¿þ¯#-mÁp l Û‚¡¶@(C¡`( …¿?ÿJŸ·R_³””–Ü6k΀þõe¿ZÿÔC¯ÿNêÁIDATºeæmuu?ØÞ°mÏž·öÓú®W‡W>ü˜ÛëöùÏĘ~ îõº·lyYöåyÀ´}×rHŽDý…~ËÕèõºÕä ~Ö;ïî†$yó,®›Ì/)9¶Àª'VN™6Ý­ûDuÞ_üÍêÕ«Ö­yþ_þùÁ«&1ô™’‘dëß¾ý÷† .÷úÜÂeŒCuåX0uêôÍ›7}ùÕyÅn›9[GüYzƒ!…yHV»‡‡î›!D{׺ŸÖ²$G…yÁ¶×µ,ülÞ¼óÖ¬A{">9ñ:€YŠíOôyÜjk.W{º]p{<"¶7ò")¬Tô/üìxk`ú— IDATS³º4ÛG Cáp(:rÄЫ'\êõz Ú«Rb'™BÁu×Où×–½óîn9½ìÃ<ðpý˜ÑcÇŽ¿stÃ×8¿ò¼¼ö“qÀwöpuõ•»ví0Œ×óÅ™×0¡‘#FKÉrzýÈp[¨wažá­Õ«W(tn~Q~Â2’ª¿ùëã»wï¼gñOøýIfSÀ÷çß½yó¦YwÝàG —Œ¾b¬¿ÀïC3iHVø;‰âŠu×¥€P÷™ª/ÔÀ’…,ËŠ¢!¾õ¦–…ŸÔÞ¥þÿÂõÏ =Ÿp­¢(’;îèõyÕ‹8 GÑÞ;^Ÿn<Ð+a ï'IDAT¤RÑ.—Ë#þß_·‚`( CáP(:jÔÐÚÙc+ÊûÇNóPËÚ¶mëgŸí_°àG_ÝàÞ¥Ë#¡Hÿ²~>¸ò¾û–^S3ÙŸï»ù–ïüa÷Û÷.]^PP_˜'t‡¸|~ï¸qãwîÜ®ß~ûì]»vüyßÞ«'_óÛßnêׯ_uõ™Ã{ê4–Ãôí̘qË®];>?ðYAs€I×ÜàÏ÷¦×Ù¶m+€Å?\jÙþCýüÞ{ïi9Ñ|¬9¶Æ[N4÷/ëgYFRõ<ô9€²Á½J‹âÕ¯€ßï|Àóϼ4 ÿ@E%…þ¿ËÔ¿$"ÊMúS6Õ¢øÉHIDATýŠ£²G@{ù´,üxÎ÷´ŸÞÏùÞÅÏ®°íБV­øöxIŠ=ôûqʸ?üt̘ê§ùÌ–W_ýÉý‹gμuÌÈyŠ$çäé§· o窫®~ðG~°¨Àc>9l襽JŠÌ=0õTšñã'<ð¿ùÖð¥ýí[›FIDATKÌíO™2U–䙳¦=ñÄS?øóŸÞwÏéÓ§¼a2URõïÙ³ @Eye~AžÏªwhS@YYµw`æÌ[gÎ¼í¢‹†™É ïðÇKk‹KJÔ‰]õûn*¦bÕ3Ÿ£]’$Y\Ú«OÿÞêWõÓë‡õ íœj=ýÅ‘ã|$wIDATÎ)P ÛÓ¨/@UØ« ¨¸ ¨¸Ð\›Jmêœò²,qäø¹ç öú¼ñJr^ÿWǾnm>YuQ¹¡c—°€¢Rcã‘Ò¢~ZN4Ïœ5­z̸§ŸZk«™Ç­Yâï$²£m8ýFä?§Ì¸¨r°‰¸\.áÖNŒKV HQY–]^ï_þýªW7ª×Úrâ‘•ëżyË~ú“»úöë«~´}Ÿê}pE÷ájž ÈöÒ@QÏ/=s=·y]gíº5S矶¼jhÕÞ?í6í†ÛfÎþá~TVuN¦K#rŽqHÖ´þ–ºR!(âõk§–3@¾Kvy=Xô¹KIDATBŽD² Àá£_L~óµC÷õWMÿïg<\nx}Þ³ÏeÕú€ê™’–,êxCÐX¦Ô¿ì\Éí,MG)I%¥yK¡ÿk´vþ›ÔÏa'›û‰þ7Œ±Ü€Ú´i³tæ œeãNš·°œ½kV¬åâÛ|ÇâÕf3AÂÅɶ•ƒ³bRÏaØ#¨JySo sÔ!Ñößr¿£“S“D¦»”tsòçî_»æmS´ì:_çS#ÙÎA–¯ØÎýG±l¤ƒ‰ØÁblÐÜY4ÿD žÀp„ ëö˜Ã"ak†¤avíeÊ%%”ÞSiœô&³'Võ»’Ò±!0³š?ŽIDAT·ß韒¦Eè`³9´bí{ÉÉ–dS¡“·:E•ÃÌ#>³aˬßAê0S;"½Z<И ëTåpë–î­ƒÍî)tRפÓû:æfS8n”Ù›)–ó̲dåd|uQÆuAêX~¨¾ièZ£Å¶¾¿oØ¡®¸Ð¼xzÙïª; (Š~‰Î(±<|b˜E9ûÄ„„ÓX~þ­¤æ5,N¼zì?ѲÁ„ïjMÅ[3NdÕŠ··ÐÉz0³¯-^ñêÉøÊIXyRß@ê:% mz™Îû †ÉÒÝyM"mJ‰wY…a‚ždèØŒDœ?uçí[މ·í3 [Öæ°$ûe4l&S¸‰IDATCm>Ú¾Aû—æMžÃw²PN*‰×fGVlÊŤö­s¾C2«VN²ï¦»SK9Ê2œO  'l'ÞŒ–S&” .ƒÍ[–ó:Y<Š'…^Z–4ND”årû®4ñ8ÿ…›¾M:ZNkPuîÿ¬Z±ÙðYµrº¸A¢¬Õ=㈈ê Ï©pŽqHDÔuûç&+«ã°¾~Y²¨$""'lmß3eoÖÖÎÎt DD”ØÆ—·gº„N½qȇRe¿%us3]BçÈÞ8$"¢ì·¨ny¦Kèé½IQN`1‰ˆˆ‡DDD`qHDDÆ!R‹Ãʪr.‰jkIDATí¿dgt8’ˆˆ¨+¥x¾ö¤žeo9%ŸwHDD×™w¥1<æ^Ÿ”ê°6F?¥åHœÝkddQZÅ÷Ì#'ÔÔÄ›Þ~N¦´ŸÝ²Aˈˆˆª­ï†Øv½Có3%´V =9ÃHí-C§P?eÊ>>邈ˆR`ÿ¸ã;K㥨y&ïÒÔÏ›B(òIDDÔé:t¡…Úó3·<4hž·#MDDÔ‰:z*xúh´:ËÉœÏNDDÔéR‰CC\i/ö 'ÈØÏnž‘ˆˆ(MxW"""Æ!㈈ŒC"""0‰ˆˆÀ8$""㈈¿ _Cog êIDATm›|e³ÔãP Âöí2Œg(QÎI1ßjhPƒð®ÕF.©› ÛÇgtPGžƒADDd£C;KõY¨¾lm±Ž+C’uJ°¥ü|à„\$"¢ž&•8T»†Z !(Š ¸¤¼µ¥±¢²¼kÃäðÃñæJ8’ˆˆzˆŽžJ£f¡: &bRÌO±°“Z›ú¤4<ŽØòATæÙµ–™DDÝUGãÐ9sª™ƒ ¦Ÿa'Ÿâ°Ë˜p—i¼’Ö@DD9§£q¨(Š~g© ñCÀù-',‘hhAËTs˜1ÞˆˆH•Jª—R,©›«>ÔakKcqImòÉI.š÷ˆò†-IDATgšÛt2/C‘ˆ¨‡Ký®4õõË ç‘Æ;­Ô‰dê©=?›6-»†Ú[).u)î,PSS\R†³#°¸¤@R]CÃÞNs°Å‹:˦h4·ådÎg'"¢î$õc‡jìUT–ÆX2D‹öÒ9NÆ$Û&L™ç|vóŒDDÔýtôT𮹾ˆˆ(­øD """Æ!㈈ŒC"""0‰ˆˆÀ8$""㈈]ùD JMEeY¦KpjIÝÜEuË3]Q*‡9 #7ƒí2_ޞ鈈R×Cã𭆆L—`­¶v¶å~š[D×CDÔsôÐ8ðÁ¾]™.ÁÒ×`IDAT¨¾~Y¦K "ê¡:‡ún–úÄ’}ºµ€ˆˆzˆ¸qÈû¶QÏ7së¾-DDDÁc‡DDDŒC"""Æ!‡DDD`qHDDÆ!‡DDD`qHDDÆ!‡DDD`qHDDÆ!lžwHDÔUV•g÷úÞIDATº„´;x Qÿ²¢²,S•t%usÕ-O8ãˆè,Š¢dº„tYR7wÕcëÌã[[Í#»‡/ow8%ãˆÈ¨[ƃ}04·ˆ.«$;1‰ˆ,0zžJCDDÄ8$""bQÖêÊ}y숨Ki›x킇ʪrËáÜ¢®\\Æ!Q×±O¾œÎ­\Ã8$"ê"†Ì8x ±Ûô -+7ôƒ-»ñ¦éúUÁ8$"ʼÜÍBæ¤7Œ1,uf0‰ˆ(-R8&ƒ7Écež¹«”ë ]=‡sep ðB "¢.¢fžöÒòPb&êê¨tTÞõ«‚½C"¢®£OsO(u§ž‰çIDATwûˆ†D Add To Version Control

Add To Version Control

This function is initiated via the Team > Add to Version Control menu option.

Overview

When you share a project for the first time, or when you add or import new resources to a project, you need to tell SVN that you want them under version control.

Process

To do this, find and select the unversioned resource(s) that you want to add. These will typically be decorated by a little question mark in the Navigator view. Once you execute the Add to Version Control process, the decoration will change to a small blue plus . This indicates that your resource is scheduled for addition to the repository on the next commit.

This operation does not contact the repository. Also, if the resources parent folder is not under version control, it will be added as well (all the way up to the project root, as needed).

Reverting files added in error

When you commit your changes back to the repository, you can short-cut the Add command by simply checking the unversioned resources in the commit dialog resource list. A preference setting controls whether or not unversioned resources are checked by default during the commit operation.

Related Tasks

None

Related Reference

Revert
Preferences
Commit

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/apply-patch.html000066400000000000000000000031541203611042400322510ustar00rootroot00000000000000 Apply Patch

Apply Patch

This command is initiated via the Team > Apply Patch ... menu option.

Overview

This Eclipse command applies a Patch in unified diff format to a file or folder in your working copy.

Process

Select the local file or folder resource to update with the Patch and indentify the incoming source of the Patch operation. If the Patch is in a file, type the name and path of the Patch file or click Browse to select the file from a local or networked folder location. Alternatively, if the Patch is on the clipboard, check the Clipboard option.

For a more detailed discussion on this topic, take a look at the CVS documentation: Working with patches.

Related Tasks

None

Related Reference

Create Patch
Working with patches

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/branch-tag.html000066400000000000000000000071101203611042400320310ustar00rootroot00000000000000 Team>Branch/Tag...

Branch/Tag

This function is initiated via the Team > Branch/Tag... menu option.

Overview

You can use the Branch/Tag command for several different purposes:

  1. To create a snapshot copy of the current repository state (version) for later retrieval. This is usually called a tag.
  2. To create a place for a new variation of the project as is exists in the repository. This is usually called a branch.
  3. To save the state of the current working copy as a new branch of the project. This is also called a branch.

Process

This command launches the same single-step Copy (Branch /Tag) operation as described in the SVN Repository Explorer View. The only difference is the availability of the working copy as a source for the copy operation.

  1. Choose the project (or folder) which you want to copy (branch or tag).
  2. Choose the Branch/Tag... option from the Team context menu.
  3. Specify the target location for the copy operation or click Browse to select the location in the repository.
  4. Select the source of the copy operation. If you are copying a specific revision in the repository, click Show Log to choose the revision.
  5. The copy process is a commit operation. Enter a comment to be assocatied with the copy. This will be the initial message found on the new location.
  6. Click OK to complete the branch or tag.

Selecting to create the branch or tag from your working copy enables you to save your work to a new repository location. This is likely to be useful if you started working on a change which you later decide be in a branch of its own. Another use is when you need to move really big changes between working copies (e.g. between development machines), and when moving a patch files becomes impractical.

The process of creating a new branch or tag does not change or redirect your working copy to the new target path. To work on the newly created branch or tag, you will need to switch to it.

Related Tasks

Maintaining branches with SVN
Configure Branches/Tags

Related Reference

Revert
Switch...

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/cleanup.html000066400000000000000000000020771203611042400314610ustar00rootroot00000000000000 Cleanup

Cleanup

This function is initiated via the Team > Cleanup context menu.

Overview

This command recursively cleans up the working copy, removing locks and resuming unfinished operations. If you were ever to get a working copy locked error, run this command to remove stale locks and get your working copy into a usable state again.

Process

Select the folder that you want to clean and choose Cleanup from the Team context menu.

Related Tasks

None

Related Reference

None

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/commit.html000066400000000000000000000044411203611042400313170ustar00rootroot00000000000000 Commit

Commit

The commit process is initiated via the Team > Commit menu option.

Overview

This command commits the changes in your local working copy to the repository.

Process

Enter a comment to associate with the commit or choose a previously entered comment from the list.

The scope of the commit operation is relative to the resource(s) you have selected, and will list modified, added, deleted and unknown resources. All modified, added and deleted resources will be selected by default. Whether unversioned items are selected by default during the commit is determined from your SVN preferences.

Double-clicking on a file in the list will present a compare dialog showing the differences between the base file and the one you are about to commit.

To select all resources, click Select All. Conversely, to deselect all resources, click Deselect All.

Checking the Keep locks option will preserve any locks you have on repository resources.

Your working copy must be up-to-date with respect to the resources you are committing. This is ensured by using Team > Update, just prior to committing, resolving conflicts and re-testing as needed, as described in the typical work cycle.

Related Tasks

Typical work cycle: Edit, Update, Commit

Related Reference

Update
Team Synchronization
SVN Preferences

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/compare.html000066400000000000000000000035641203611042400314620ustar00rootroot00000000000000 Compare With menu

Compare With menu

The compare menu normally allows you to compare with local history (Eclipse's own version of saved files during a session), or to compare two selected resources.

However, once a project is connected to a repository, a few new entries are present in the Compare menu:

  • Compare With > Base Revision - this will compare the selected resource with the "pristine" version hidden away in the project's working copy. This happens without contacting the repository.
  • Compare With > Latest From Repository - this will compare the selected resource with the latest version of this resource at the same location in the repository. This requires a lookup to see what the latest version is.
  • Compare With > Revision... - this will bring up a dialog showing the change history for the file. You can then easily compare the file against any previous revision from the repository.
  • Compare With > Branch/Tag... - This option allows you to compare your working copy with another URL from the repository, presumably a different branch/tag of the same project. You are given the option of viewing the output in the Eclipse graphical compare engine, or using the SVN command to produce a unified diff. The latter operation generally runs a lot faster and is able to factor out differences in keywords. Of course the graphical compare is a nicer way to view the differences.

These comparisons are very useful for reviewing the contents of you changes before you commit them. eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/configure-tags.html000066400000000000000000000105641203611042400327470ustar00rootroot00000000000000 Configure Branches/Tags

Configure Branches/Tags

In many ways, the support for branching and tagging in SVN represents a vast improvement over CVS. It certainly addresses many of the complaints with this feature in CVS. There is one significant drawback in the implementation in SVN. Namely, the process of creating a branch/tag does not leave behind any "breadcrumbs" in the source of the branch/tag operation to indicate that the branch/tag was created. In other words, there is information in the branch/tag that indicates where it came from, but there is no similar information in the origin of the branch/tag that would let you see or know that the branch tag exists. The net result is that when looking at a file or folder there is no easy way to know which revisions belong to which tags.

The SVN Eclipse plug-in aims to solve the above problem by allowing you to maintain a versioned property in your project that indicates the branches/tags that have been created from that project. The name of the property is subclipse:tags. The format is:

revision_number,tag_name,relative_path,branch/tag
Property

The above screenshot shows what the property looks like. However there is a Configure Branches/Tags option on the Team menu that allows you to edit the property using a custom editor.

Configure

Besides providing basic editing capabilities, the dialog also includes a built-in repository browser. This allows you to select one or more folders and add them as a branch/tag in one action. When folders are added in this manner, the dialog automatically fills in the Revision number based on the Last Changed Revision of the selected folder.

Configure

Once the property has been defined, there are a number of ways that the plug-in takes advantage of it.

History Browsing

The History View contains a column to show the tags for a revision.

History

A preference controls whether to show this information when browsing history directly from the repository. To show the information we have to search the repository for the presence of the subclipse:tags property. On a slow connection you probably would not want to do this.

Compare Revisions

The Compare with Revision ... option also contains a column to show tags in its history view. This makes it easy to know which revisions you want to compare.

Revision Compare

URL Chooser

The URL Chooser that allows you to pick a URL in many of the SVN dialogs also shows the Branch/Tag information. This allows you to just select a branch/tag and the proper URL to that branch/tag will be automaticlly created.

Repository Browser

Updating the Property

In addition to the Configures Branches and Tags option, there is also support for automatically updating the subclipse:tags property when you create a Branch/Tag from within Eclipse. When you take this option, if we the subclipse:tags property exists on the item you selected, then a pop-up dialog will appear that allows you to confirm that you want to add this new information to the subclipse:tags property. You then just have to commit that property change after creating the Branch/Tag. This feature does not exist when creating the Branch/Tag from the repository browser as it is only possible to modify a versioned property in a working copy.

Related Tasks

Maintaining branches with SVN

Related Reference

Branch/Tag
Merge
Switch

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/copy-branch-tag.html000066400000000000000000000025561203611042400330120ustar00rootroot00000000000000 Copy (Branch/Tag)

Branch/Tag

This option simplifies the copy and paste of repository resources by allowing you to complete the branch and tag process as a single step operation.

Specify the target URL for the branch/tag operation or click Browse to select the URL. As with most repository operations, you can select to copy the head revision or a specific revision. As the branch/tag process is a commit operation, you should specify a meaningful comment or choose a previously entered comment from the list. Click OK to complete the branch/tag operation.

Related Tasks

Maintaining branches with SVN
Configure Branches/Tags

Related Reference

SVN Repository View
Branch/Tag

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/copy.html000066400000000000000000000022151203611042400307760ustar00rootroot00000000000000 Copy

Copy

This function is initiated via the Team > Copy context menu.

Overview

This command is used to copy one or more resources between projects.

Process

Select the resource you want to copy and choose Copy from the Team context menu. Select the target repository directory for the copy operation and click OK to initiate the copy. The selected resource is copied to the working copy associated with target repository directory selected and automatically added to version control.

Related Tasks

None

Related Reference

None

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/create-patch.html000066400000000000000000000035221203611042400323660ustar00rootroot00000000000000 Create Patch

Create Patch

This command is initiated via the Team > Create Patch ... menu option.

Overview

This command lets you create a Patch in unified diff format.

Process

The content of the patch is determined by the scope of the resources selected with the Team > Create Patch... option. The output of the Patch operation can be directed to either the clipboard, file system or saved in a workspace project. Clicking Next will allow you to choose whether the Patch processing should recurse through subdirectories within your selection.

Be aware that changes to binary files are never shown in the patch. Also, in order to have new files included in the patch, you must first take the Team > Add to Version Control option.

For a more detailed discussion on this topic, take a look at the CVS documentation: Working with patches.

Related Tasks

None

Related Reference

Apply Patch
Working with patches
Editing conflicts

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/disconnect.html000066400000000000000000000034661203611042400321660ustar00rootroot00000000000000 Disconnect

Disconnect

This command is initiated via the Team > Disconnect ... context menu option.

Overview

If you want to work completely independent of version control, you may disconnect your local copy of the project from the repository. You can only disconnect entire projects, not individual folders or files.

Process

Select the project root folder and select Team > Disconnect from the context menu.

A dialog is presented asking if you want to remove the SVN meta information from the file system. If you want to reconnect to the remote repository at a later time, choose Do not delete the SVN meta information. This is the default option.

If you do choose to delete the SVN meta information, your project will be completely disconnected from SVN. You will not be able to re-attach your project to the same repository location later. If you think you might want to do that, then you should NOT delete the SVN meta information.

Related Tasks

Importing a new project into a SVN repository
Connecting to an existing project

Related Reference

None

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/edit-conflicts.html000066400000000000000000000044131203611042400327350ustar00rootroot00000000000000 Edit Conflicts

Edit Conflicts

This function is initiated via the Team > Edit conflicts context menu.

Overview

In order to commit changes in your working copy to the repository, your working copy must be up to date. This is achieved through the Update command. When you perform an update, the contents of your working copy are updated with the latest version of the resource available in the repository. If the inbound changes from the repository are non-conflicting, they are merged automatically into your working copy. However, where the resource is non-mergeable, or the same lines have changed in the resource both locally and in the repository, the resource is flagged as in conflict.

The Eclipse platform provides a Compare Editor that allows you to review the imbound and outbound changes in a resource in addition to the lines that are in conflict. It also provides features that allow you to selectively merge the differences between the file variants.

Process

For a detailed look at the process of editing conflicts, you should take a look at the documentation on the Compare Editor provided in the Eclipse Workbench.

Related Tasks

None

Related Reference

Update
Three way comparisons
Understanding the content of the compare editor
Merging changes in the compare editor

export-remote-folder.html000066400000000000000000000023261203611042400340330ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference Export Remote Folder

Export Remote Folder

You may want to export one or more repository resources to a local or network location. This option exports (copies) the selected resources to the designated target location.

Type the name of the directory to which you want the resources exported, or click Browse to select the target directory. You can export the head revision or a specific revision. Click Show Log to see the log messages for the selected resource. The exported files are not under version control in their new target location.

Related Tasks

Import Folder

Related Reference

SVN Repository view

 

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/export.html000066400000000000000000000031511203611042400313450ustar00rootroot00000000000000 Export

Export

This function is initiated via the Team > Export context menu.

Overview

This command exports selected resources from your working copy to a specific location.

Process

Select the resource (file or folder) that you want to export and choose Team > Export from the context menu. Use the file browse window to locate or create the target for the export operation. Click OK to complete the export.

The SVN console will confirm the export and identify the revision that was exported. Remember that this revision number only identifies the pristine version in your working copy; the file exported is copied directly from your working copy and will therefore contain any modifications you have made to the resource in question.

Related Tasks

None

Related Reference

Export Remote Folder

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/glossary.html000066400000000000000000000047511203611042400316760ustar00rootroot00000000000000 Glossary

Glossary

Branch
A branch is an offshoot of mainline development typically used to isolate long running changes or manage multiple versions or releases of an application codeline.
Changeset
Some SCM systems have a very explicit notion of 'change sets'. In SVN, a revision (or, typically, a range of revisions) is a change set, since it represents changes from one branch of development that may be applied to (merged with) other branches of development.
Head
The head revision, or latest version, of a resource.
Pristine copy
SVN stores a pristine copy of the base revision (i.e., the unmodified checked-out revision) of each file in the working copy. These pristine copies are known as "text bases" and are used for performing offline diffs, and for transmitting deltas back to the server when committing.
Repository
In this context, the SVN version-controlled container for all of your project resources.
'svn' command line
The "reference" implementation of the SVN client is the command line
Tag
A tag is a snapshot of an application codeline at a specific point in time and are typically used to label a specific revision of the repository code.
Trunk
The trunk of a development is the project folder where the mainline development takes place. It is a naming convention only; no feature or function is implicit in this term.
Unified Diff
A standard representation for the differences between two files where removed lines are prefaced with a - and added lines are prefaced with a +.
Working copy
A local, version controlled copy of a repository's files and directories.
eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/ignore.html000066400000000000000000000037141203611042400313140ustar00rootroot00000000000000 Add to svn:ignore

Add to svn:ignore

This function is initiated via the Team > Add to svn:ignore menu option.

Overview

You can choose to let SVN ignore certain resources (files or folders) in your working copy, such as derived files (e.g. .class files compiled from Java source) and other files that do not belong under version control. By ignoring them, SVN doesn't mark them as unknown, and they no longer appear in the Synchronize View.

Process

To ignore specific resources, select the file(s) and/or folder(s) you wish to ignore, and choose Add to svn:ignore in the Team menu. This will bring up a selection where you may choose how to ignore the file:

  • By name (only the selected resource)
  • By wildcard extension (based on the selected resources)
  • By a custom pattern that you enter (e.g. log*.txt)

When in doubt, choose the first option, Resource(s) by name, since that will never ignore a resource that wasn't explicitly selected.

Related Tasks

None

Related Reference

SVN Properties View
Team Synchronizing

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/import-folder.html000066400000000000000000000025571203611042400326200ustar00rootroot00000000000000 Import Folder

Import Folder

Overview

If you have local or networked resources that you want to add to a repository, you can use the import option. This is useful when you have created a local project and want to share it with other team members under version control.

Process

Type the name of the directory from which you want to import or click Browse to select an import directory. If you want to import the selected directory and all of its subdirectories, check the Recurse through subdirectories option. An import to a repository location is a commit operation. Be sure to enter an appropriate comment or choose a previously entered comment from the list.

Related Tasks

Export Remote Folder

Related Reference

SVN Repository view

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/issuetracker.html000066400000000000000000000045371203611042400325410ustar00rootroot00000000000000 Issue Tracker Integration

Issue Tracker Integration

Compared to CVS, SVN has some novel features, one of which is (versioned) properties. These are used internally in SVN (like svn:keywords, svn:ignore), but they also provide a convenient hook into various SVN tool sets.

One such tool, the popular TortoiseSVN shell extension, was the first to define properties for controlling integration to issue tracker systems (like Bugzilla, etc.), enabling a special field for entering an issue number/identifier with each commit, and supporting a direct link from a log (History) message back to the issue tracker.

These properties and the expected behavior of the tool are described at:
<http://guest:guest@tortoisesvn.tigris.org/svn/tortoisesvn/trunk/doc/issuetrackers.txt>

The SVN plug-in supports the following Issue tracking properties:

  • bugtraq:message
  • bugtraq:label
  • bugtraq:url
  • bugtraq:number
  • bugtraq:warnifnoissue
  • bugtraq:append

Support for issue trackers is covered in the Commit and Branch/Tag dialogs, and the SVN Resource History View.

The user can (or should) enter the ID or number of an issue in order to issue a commit

In the history view, a hyperlink is displayed to launch the issue tracking system in a browser (if configured). Many popular issue tracker systems can be integrated with using this approach.

The issue number is a link back to the web page descring the bug (displayed in a web application configured in the properties)

Reference

Team > Commit
History View

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/lock.html000066400000000000000000000046261203611042400307640ustar00rootroot00000000000000 Lock

Lock

This function is initiated via the Team > Lock menu option.

Overview

This function enables you to lock one or more files for editing. This is useful for ensuring that team members do not waste each others' time by editing the same resource if it is hard or perhaps impossible to merge these changes (for instance with binary files).

Process

To lock specific resources, select the file or files you wish to lock, and choose Lock from the Team menu. This will bring up the Lock dialog where you can enter a comment to associate with the lock.

If you commit a change to a locked file, the lock is usually released. To persist the lock beyond the commit, you need to check the Keep locks option in the commit dialog.

If a different user has locked a file and you need to take control of the resource, SVN makes it possible to steal the lock. This is accomplished by checking the Steal Lock option on the Lock dialog.

Locked resources are identifed by the tick mark decorator.

If you want to ensure that a specific file is always locked before committing, you can set the SVN property svn:needs-lock on the file (and commit). This ensures that a lock must be taken before committing it.

Related Tasks

Typical work cycle: Edit, Update, Commit

Related Reference

Unlock
Set Property
SVN Properties View

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/mark-resolved.html000066400000000000000000000077321203611042400326100ustar00rootroot00000000000000 Mark Resolved

Mark Resolved

This command is initiated via the Team > Mark resolved ... menu option.

Overview

Use this operation to mark a resource as complete when you are done resolving a merge conflict.

Process

Several different operations can cause merge conflicts:

  • Updating your working copy with changes to a resources which you have been editing (using Team > Update or the Team Synchronization View.)
  • Explicitly merging between two repository URLs and/or revisions (using Team > Merge)
  • Switching your working copy from one repository location to anyther (using Team > Switch)

A merge occurs for every inbound change to a resource which is also modified in the working copy. In some cases, if the local change and the incoming change intersect each other, SVN cannot merge these changes without intervention, and the file is marked as conflicted, and three files are created in the working copy. Here is an example of file in conflict:

One file is the original version, before the update or other operation (.r10), one is the version you were working on (.mine), and the last one is the latest version from the repository (.r12).

The resource itself is marked-up by SVN to contain all the conflicting bits in the same file, so you are able to correct the conflict yourself, as shown in this example:

if ((cartId != null) && (customerId != null)) {

   // Place the order
   IBuySpy.OrdersDB ordersDatabase = new IBuySpy.OrdersDB();
   int orderId = ordersDatabase.PlaceOrder(customerId, cartId);

   //Update labels to reflect the fact that the order has taken place
   Header.Text="Check Out Complete!";
   Message.Text = "<b>Your Order Number Is: </b>" + orderId;
   <<<<<<< .mine
   Message.Text = Message.Text + "<br><em>Thank you. We appreciate your business.</em>";
   =======
   >>>>>>> .r12
   Message.Text = Message.Text + "<br><em>Thank you for your custom!</em>";

}

Once the conflict is resolved (whether by hand or by using the three-way merge editing view) you use the Team > Mark Resolved operation to tell SVN that the conflict has been resolved.

If you resolve the conflict by reverting to the pristine version, the conflict is automatically marked as resolved for you.

Related Tasks

Typical work cycle

Related Reference

Update
Edit conflicts
Revert

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/merge.html000066400000000000000000000412271203611042400311310ustar00rootroot00000000000000 Merge

Merge

This function is initiated via the Team > Merge menu option.

Branching and merging within SVN can become quite complex and so it is recommended that you gain a thorough understanding of the concepts before you start using it. The chapter on Branching and Merging in the Subversion Book provides a detailed description of the concepts as well as many examples of how branching and merging can be used.

Overview

Where branches are used to maintain separate lines of development, at some stage you will want to merge the changes made on one branch back into the trunk, or vice versa.

The merge process works by generating a list of differences between two points in the repository, and applying those differences to your working copy. For example if you want to merge the changes made in revision N then you have to compare revision N with revision (N-1). Novices often ask, “Why do I have to subtract 1 from the start revision.” Think of the underlying Diff process and it will become clearer. To make this easier, when you use Show Log to select a range of revisions to merge, the SVN plug-in for Eclipse makes this adjustment for you automatically.

If you have made changes in your working copy, commit those changes first before executing the merge. Otherwise, if the merge does not go as you expect, you may want to Revert the merged result. In this scenario, the revert command will discard all changes including any you had made before the merge. The only exception to this is files which are added to your working copy by the merge process. When you initiate a revert and there are additions in your working copy, those files are not removed. Instead they become unversioned files in your working copy, and you have to manually delete them before you attempt the merge again.

Process

There are two common use cases for merging which are handled in slightly different ways. These are discussed below.

Merging a Range of Revisions

This method covers the case when you have made one or more revisions to a branch (or to the trunk) and you want to port those changes across to a different branch. To merge revisions you need to Switch to a working copy of the branch in which you want to receive the changes, often the trunk. Select Merge... from the Team context menu.

  1. In the From: field enter the full folder URL of the branch or tag containing the changes you want to port into your working copy. You may also click Browse... to browse the repository and find the desired branch. If you have merged from this branch before, then just use the drop down list which shows a history of previously used URLs.

  2. Because you are porting a range of revisions from the same branch into your working copy, make sure the Use "From:" URL check box is checked.

  3. In the From Revision field, enter the start revision number. This is the revision before the changes you want to merge. Remember that SVN will create a diff file in order to perform the merge, so the start point has to be just before the first change you are interested in. For example, your log messages may look something like this:

    Rev Comments
    39. Working on MyBranch
    38. Working on trunk
    37. Working on MyBranch
    36. Create branch MyBranch
    35. Working on trunk
    34. Working on trunk
    ...

    If you now want to merge all of the changes from MyBranch into the trunk you have to choose 36 as the From Revision, not 37 as you might think. If you select revision 37 as the start point, then the difference engine compares the end point with revision 37, and will miss the changes made in revision 37 itself. If that sounds complicated, don't worry, there is an easier way with the SVN plug-in for Eclipse ...

    The easiest way to select the range of revisions you need is to click on Show Log, as this will list recent changes with their log comments. If you want to merge the changes from a single revision, just select that revision. If you want to merge changes from several revisions, then select that range (using the usual Shift-modifier). Click on OK and the revision numbers of the From revision and To revision in the Merge dialog will both be filled in for you.

    If you have already merged some changes from this branch, hopefully you will have made a note of the last revision merged in the message when you committed the change. In that case, you can use Show Log for the working copy to trace that log message. Use the end point of the last merge as the start point for this merge. For example, if you have merged revisions 37 to 39 last time, then the start point for this merge should be revision 39.

  4. If you have not used Show Log to select the revision range, then you will need to set the To Revision manually. Enter the last revision number in the range you want to merge. Often this will be the HEAD revision, although it doesn't need to be - you may just want to merge a single revision.

    If other people may be committing changes then be careful about using the HEAD revision. It may not refer to the revision you think it does if someone else made a commit after your last update.

  5. Click OK to complete the merge.

It is a good idea to have a look at the merge result and see if it is as you expected. Merging is usually quite complicated. Conflicts often arise if the branch has drifted far from the trunk.

When you have tested the changes and come to commit this revision, your commit message should always include the revision numbers which have been ported in the merge. If you want to apply another merge at a later time you will need to know what you have already merged, as you do not want to port a change more than once. Unfortunately merge information is not stored by SVN. For more information about this, refer to Tracking Merges Manually in the Subversion Book. Branch management is important. If you want to keep a branch up to date with the trunk, you should be sure to merge often so that the branch and trunk do not drift too far apart. Of course, you should still avoid the repeated merging of changes, as explained above.

SVN can't merge a file with a folder and vice versa - only folders to folders and files to files. If you click on a file and open up the merge dialog, then you have to give a path to a file in that dialog. If you select a folder and bring up the dialog, then you must specify a folder URL for the merge.

Merging Two Different Trees

This method covers the case when you have made a feature branch. All trunk changes have been ported to the feature branch, week by week, and now the feature is complete you want to merge it back into the trunk. Because you have kept the feature branch synchronized with the trunk, the latest versions of branch and trunk will be absolutely identical except for your branch changes. So in this special case, you would merge by comparing the branch with the trunk.

To merge the feature branch back into the trunk you need to go to a working copy of the trunk. Select Merge... from the context menu.

  1. In the From: field enter the full folder URL of the trunk. This may sound wrong, but remember that the trunk is the start point to which you want to add the branch changes. You may also click Browse... to browse the repository.

  2. Because you are comparing two different trees, make sure the Use "From:" URL check box is not checked.

  3. In the To: field enter the full folder URL of the feature branch.

  4. In both the From Revision field and the To Revision field, enter the last revision number at which the two trees were synchronized. If you are sure no-one else is making commits you can use the HEAD revision in both cases. If there is a chance that someone else may have made a commit since that synchronization, use the specific revision number to avoid losing more recent commits.

    You can also use Show Log to select the revision. Note that in this case you are not selecting a range of revisions, so the revision you select there is what will actually appear in the Revision field.

  5. Click OK to complete the merge.

In this case you will not need the feature branch again because the new feature is now integrated into the trunk. The feature branch is redundant and can be deleted from the repository if required.

Previewing Merge Results

If you are uncertain about the possible outcome of a merge operation, you may want to preview what will happen before you allow it to change your working copy. There are two additional buttons to help you in this respect.

Unified Diff creates the diff file (remember that merge is based on diff) and shows you which lines will be changed in your working copy files. As this is a unified diff (patch) file it is not always easy to read out of context, but for small scale changes it is often helpful.

Bare in mind that merge and diff are not exactly the same. Merge is smarter and knows how to take into account things like renames and moves. Diff always just shows the end result. Conceptually, they are very similar, but you cannot always just apply a unified diff to a working copy and get the same results as merge.

Dry Run performs the merge operation, but does not modify the working copy at all. It shows you a list of the files that will be changed by a real merge, and notes those areas where conflicts will occur. This information is shown in the SVN Console View.

Undoing changes with Merge

Another common use for merge is to roll back a change that has already been committed. Suppose you are coding in a working copy of /calc/trunk, and you discover that the change made way back in revision 303, which changed integer.c, is completely wrong; it never should have been committed. You can use merge to undo the change in your working copy, and then commit the local modification to the repository. All you need to do is to specify a reverse difference:

$ svn merge -r 303:302 http://svn.example.com/repos/calc/trunk
U integer.c
$ svn status
M integer.c
$ svn diff ...
# verify that the change is removed ...
$ svn commit -m "Undoing change committed in r303."
Sending integer.c
Transmitting file data.
Committed revision 350.

One way to think about a repository revision is as a specific group of changes (some version control systems call these changesets). By using the -r switch, you can ask svn merge to apply a changeset, or whole range of changesets, to your working copy. In our case of undoing a change, we're asking svn merge to apply changeset 303 to our working copy backwards.

Keep in mind that rolling back a change like this is just like any other svn merge operation, so you should use svn status and svn diff to confirm that your work is in the state you want it to be in, and then use svn commit to send the final version to the repository. After committing, this particular changeset is no longer reflected in the HEAD revision.

Again, you may be thinking: well, that really didn't undo the commit, did it? The change still exists in revision 303. If somebody checks out a version of the calc project between revisions 303 and 349, they'll still see the bad change, right?

Yes, that's true. When we talk about removing a change, we're really talking about removing it from HEAD. The original change still exists in the repository's history. For most situations, this is good enough. Most people are only interested in tracking the HEAD of a project anyway. There are special cases, however, where you really might want to destroy all evidence of the commit. (Perhaps somebody accidentally committed a confidential document.) This isn't so easy, it turns out, because SVN was deliberately designed to never lose information. Revisions are immutable trees which build upon one another. Removing a revision from history would cause a domino effect, creating chaos in all subsequent revisions and possibly invalidating all working copies.

Related Tasks

Maintaining branches with SVN
Configure Branches/Tags

Related Reference

Revert
Switch

move-remote-resource.html000066400000000000000000000023271203611042400340350ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference Move Remote Resource

Rename/Move Remote Resource

Overview

This option will evoke the Move or rename a remote resource wizard.

Process

To rename a resource, simply type a new name for the file or folder in the Resource destination name field provided. To specify a new location for the existing file, select a new location in the repository hierarchy. You may rename and move the file in one operation if desired. Click Finish to complete the operation. To specify a comment for the move/rename operation, click Next.

Related Tasks

None

Related Reference

SVN Repository View

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/new-remote-folder.html000066400000000000000000000017351203611042400333650ustar00rootroot00000000000000 New Remote Folder

New Remote Folder

Overview

This option will evoke the New remote folder wizard.

Process

Simply select the parent directory for the new remote folder and click Finish. The creation of a remote folder is a commit operation. To specify a commit comment as part of the process, click Next.

Related Tasks

None

Related Reference

SVN Repository view

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/preferences.html000066400000000000000000000145431203611042400323340ustar00rootroot00000000000000 Preferences

Preferences

The preferences dialog is accessed via the Window > Preferences menu option. The SVN options are located under the Team node in the navigation tree.

SVN

General SVN Settings

Show revision comparisons in a dialog
This setting launches the revision comparison in a dialog.
Select unversioned resources on commit
Check this setting to have SVN automatically select all unversioned resources in your working copy when performing a commit operation.
Fetch affected paths on demand
This setting affects the History view. Checking this option tells SVN to only get the list of changed items for a revision when you click on it. This may make the initial list retrieval a little faster and also uses less memory, particularly if you have some revisions with thousands of changed items .
Show tags in remote history view
Checking this option will cause SVN to show tag information when browsing history directly from the repository. On a slow connection you probably would not want to do this.
Default number of log messages
Specify the number of log messages to retrieve from the repository when viewing log history. An entry of zero (0) will tell SVN to retrieve all of the available log messages.

SVN Interface

This setting controls whether SVN should utilise the JavaHL (JNI) or SVNKit (Pure Java) interface when communicating with the SVN repository.

Configuration location

This setting specifies where the SVN configuration file is located. Select either the default location or an alternative location by pressing the Browse button.

Console

The SVN plug-in for Eclipse can display the SVN commands, messages and error information in the Eclipse Console. This screen allows you to control the colors that are used in the Console for SVN output.

Console text color settings
Colors can be chosen for three distinct Console outputs. These are command line, messages and error notifications. To change a color, click on the colored button next to the desired console output type and select a new color.
Show SVN output in the Console View
Check this box if want to have SVN messages sent to the Eclipse console.
Bring SVN output to front on error
Checking this option will force the Console tab to the front when SVN writes an error message to the Console.

Diff/Merge

This setting allows you to specify whether you want to use the merge program supplied with the Eclipse platform or an external merge program.

For external merge programs, you can pass a number of special parameters:

base
the original file without your changes
theirs
the file as it is in the repository
yours
the file as it is in the repository
merged
the conflicted file, where to merge

Label Decorations

Text

These settings control how the SVN plug-in for Eclipse will decorate files, folders and project text labels. A complete list of available substitution variables and their meaning can be obtained by clicking Add Variables. An example of how the decorated item will be shown is displayed beneath the configured item.

File Format
Specify the variables you would like SVN to use when decorating files listed in your
project directories.
Folder Format
Specify the variables you would like SVN to use when decorating project folders.
Project Format
Specify the variables you would like SVN to use when decorating your project.

Additional text labels can be specified for outgoing, added and external files in your projects too.

Icons

These settings allow you to configure certain icon decorators within the SVN plug-in for Eclipse.

Indicate is outgoing
A locally modified, versioned file.
Indicate has remote
A local, versioned file that is not modified.
Indicate is added
A file has been marked for addition but has not yet been committed.
Indicate is new resource
An unversioned file.

General

Check this setting to have the SVN plug-in for Eclipse drill down through your project directory structures to determine the decorator to use at the folder level.

Uncheck this setting if you experience poor decorator performance in Eclipse.

Related Tasks

None

Related Reference

Configuring branches and tags

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/properties.html000066400000000000000000000026341203611042400322250ustar00rootroot00000000000000 SVN Resource Properties Page

SVN Resource Properties

The SVN Resource Properties page is accessed via the Team > Properties context menu option.

Overview

All resources in a project managed by SVN have one additional property page. The property page appears like this:

The information available corresponds to the information given by svn info on the SVN command line client.

This Property page is not to be confused with SVN Versioned Properties which are versioned tag-value pairs stored in the repository, and edited via the SVN Properties View.

Related Tasks

None

Related Reference

SVN Properties View

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/protocol.html000066400000000000000000000117761203611042400317010ustar00rootroot00000000000000 Support for SVN Protocols

Support for SVN Protocols

Overview

In general all SVN repository access protocols are supported. The nature of the support can vary depending on the adapter you have chosen in your preferences. This document will attempt to outline those issues.

file:// (ra_local)

The file:// protocol is only supported by the JavaHL adapter. If you are using the SVNKit adapter, it is recommended that you setup and run a local svnserve instance so that you may use the svn:// protocol.

svn:// (ra_svn)

The svn:// protocol is fully supported by both adapters. There are no issues or considerations to take into account.

svn+ssh:// (ra_svn)

The svn+ssh:// protocol is fully supported by both adapters. However there are significant differences in the implementation that should be taken into account.

JavaHL
JavaHL uses the SVN libraries, consequently it is configured using the same techniques as the SVN command line. SSH is handled via an external client which has to be manually configured in the Runtime Configuration Area. Any support for prompting for a client certificate or passphrase is entirely dependent on the SSH client used. Consequently, using JavaHL in this scenario is best suited for those users that already have an SSH client configured and are using some form of SSH keyagent to manage connections.
SVNKit
SVNKit implements SSH connections using the Ganymed Java SSH library. The Ganymed library only support the SSH-2 protocol and client certificates must be in the OpenSSH format. A major advantage to using SVNKit is that it will dynamically prompt you for all SSH connection information as shown here:

http(s):// (ra_dav)

The http(s):// protocol is fully supported by both adapters. However there are subtle differences in the implementation that should be taken into account, primarily when dealing with SSL (https://) connections.

JavaHL
JavaHL uses the SVN libraries for repository access, which means that it uses Neon and the OpenSSL library for accessing SSL-secured connections. Generally, this offers very good compatability with various HTTP servers, SSL certificates and implementations. JavaHL supports prompting the user to accept the server certificate, but it does not support prompting the user to provide a client certificate. Configuration of SSL certificates as well as HTTP proxy information can be performed in the Runtime Configuration Area.
SVNKit
SVNKit implements http(s):// connections using the classes and methods that are part of J2SE. Some JDK versions don't support SSL server certificates longer than 1024 bytes or don't support certain Cypher Suites. If you're experiencing problems accessing a SVN repository over SSL connection (via https protocol) consider using the latest JDK version and upgrading the JDK JCE package (Cryptotgraphic Extension) to an "unlimited strenght" one. Read this article for more details on how to install JCE. Configuration of SSL certificates as well as HTTP proxy information can be performed in the Runtime Configuration Area. One notable benefit that SVNKit offers over JavaHL is that it supports prompting the user for SSL client certificates.



In order to activate this feature you have to edit the "servers" file in the Runtime Configuration Area and add the following:
[global]
ssl-client-cert-prompt = yes    	
    	

Related Tasks

Preferences: Select Client Adapter
Preferences: Specify Location of Configuration Area

Related Reference

SVN Runtime Configuration Area
SVNKit Configuration Settings

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/relocate-repository.html000066400000000000000000000036111203611042400340400ustar00rootroot00000000000000 Relocate

Relocate Repository

This dialog is accessed via the Relocate context menu from the SVN Repository View.

Overview

The relocate option exists for one reason, and that is to update the URL of your repository when it is moved to a new server or you change the access method, such as from http:// to https://. When you take the option it updates the URL in the repository view, and then runs the switch --relocate command on all of the projects in your workspace that are connected to this repository location.

Process

The first page of the wizard contains some standard warning text about what the option will do, but the main thing it is showing you is all of the projects in your workspace that is going to update. This is purely informational, you cannot choose to not update any of the projects.

The next and final page of the wizard shows you the current repository URL and allows you to provide a new URL. The new URL should be pointing to the same relative location within the repository. In other words, you should only be changing something like the access method (http://), or the port number, or the host name.

Related Tasks

None

Related Reference

SVN Repository View

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/replace.html000066400000000000000000000053011203611042400314360ustar00rootroot00000000000000 Replace menu

Replace

Overview

A project resource can be replaced with an earlier revision of the resource from the repository.

Process

To replace Workbench resources with versions in the repository, select a resource in one of the navigation views. From the resource's context menu, select one of the following menu items:

Replace With > Base Revision

Use this option to replace the selected resource with the pristine version of the resource stored in your working copy.

Replace With > Latest from Repository

This option will replace the local resource with the latest version from the repository.

Replace With > Revision

Use this option to replace a resource with a specific revision of a resource in the repository.

Local History

Local history of a file is maintained when you create or modify a file. Each time you edit and save a file, a copy of it is saved. This allows you to compare your current file state to a previous state, or replace the file with a previous state. Each state in the local history is identified by the date and time the file was saved. Neither projects nor folders have local history.

Replace With > Previous from Local History

Use this option to replace the selected resource with the previous revision from your local revision history.

Replace With > Local History

Use this option when you want to replace the selected resource with a specific revision (other than the immediately previous revision) from your local revision history.

Related Tasks

None

Related Reference

None

resource-history-view-options.html000066400000000000000000000051751203611042400357440ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference History View Options

History View Options

Menu

= option enabled
= option selected

Options

Wrap Comments

Toggle this option to have the commit commentary wrap within the confines of the commit panel.

Show Comments

Toggles the display of commit comments on and off.

Show Affected Paths

Toggles the display of the affected paths grid on and off.

Stop on Copy/Rename

Toggles the option to stop the retrieval of resource history for an item on a copy or rename operation on and off.

When the checked, the resource history will stop at the point that the selected file or folder was copied from somewhere else within the repository. This can be useful when looking at branches (or tags) as it stops at the root of that branch, and gives a quick indication of changes made in that branch only.

Flat

Select this option to display the affected paths in a flat grid style. Where many files within a folder were changed as part of a revision, this view will show one entry for every changed file. It is the default view for the affected paths grid.

Compressed Folders

Select this option to display the affected paths in a compressed folder (tree view) style. Where many files within a folder were changed as part of a revision, this view will show one compressed (collapsed) entry for each folder containing more than one changed file. The entry can then be expanded to show the individual files changed within that folder location.

Related Tasks

None

Related Reference

SVN Repository view
History view

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/revert.html000066400000000000000000000040231203611042400313320ustar00rootroot00000000000000 Revert

Revert

This dialog is accessed via the Team > Revert context menu.

Overview

This command will undo changes to a locally modified resource by effectively reverting the file contents to the pristine version contained in your working copy.

Process

To revert a resource, select the individual file or folder in your project and select Revert from the Team context menu.

If you select a folder resource, all of the locally modified resources in the folder will be listed. Check the files that you want to revert to their pristine state and click OK.

Double-clicking on a file in the list will present a compare dialog showing the differences between the pristine state and the modified version.

The revert operation can not be undone. So unless you are absolutely certain that you want to revert one or more resources to their pristine state, be sure to back-up your locally modified files first.

Related Tasks

Typical work cycle

Related Reference

Update
Edit conflicts
Mark Resolved

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/search-history.html000066400000000000000000000052761203611042400330020ustar00rootroot00000000000000 Search SVN Resource History

Search SVN Resource History

The history can be searched from the SVN Resource History View using the Find button or by pressing Ctrl+F when the History View is selected.

Overview

Browsing the history of a resource gives a good overview of changes made to it. Using the search functionality of the SVN Resource History View specific logs can be filtered. The search is performed on the fetched entries in the history view. It is possible to have the search fetch additional logs matching the period in which to search.

Process

In the search dialog the selected resource is displayed. This resource is the same as the one for which logs are displayed in the history view. By enabling special characters it is possible to search with very basic pattern matching. The special characters can be used in the author field and the comment field.

The comment combo box keeps a list of previous searched comments in this Eclipse session. Searching all logs results in searching all fetched logs. When the option is enabled for automatically fetching additional logs the search all option results in fetching all logs for the selected resource. This operation might take some time.

When the option for searching all logs is disabled a start and end date can be given to select a search period. When the option for automatically fetching logs is selected the search process fetches logs up to the start date given. It fetches logs just like the Next action of the history view.

Click OK to search the logs with the given criteria.

A combination of searching all logs and automatically fetching additional logs results in fetching all logs of the selected resource. This operation might take some time.

Related Tasks

Related Reference

Team > Show History
History View

set-commit-properties.html000066400000000000000000000032701203611042400342220ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference Set Commit Properties

Set Commit Properties

This option is launched from the History View via the Set Commit Properties option in the revision table context menu.

Overview

Commit messages are stored in the SVN repository as properties attached to each revision. By default, the message property (svn:log) cannot be edited once it is committed. The Set Commit Properties function is enabled through the pre-revprop-change hook, which has access to the old log message before it is changed. If this hook is not enabled for your repository, this function will not work.

Process

The revision number for the commit properties being edited is displayed in the the dialog title. Simply re-type or ammend the comment associated with the revision. The author of the revision can also be changed. Click OK to complete the change.

Related Tasks

None

Related Reference

Commit
SVN Repository View
History View

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/set-property.html000066400000000000000000000025471203611042400325110ustar00rootroot00000000000000 Set a SVN Property

Set a SVN Property

This dialog is accessed via the Team > Set Property menu or the Add a Property context menu option in the SVN Properties View.

Overview

This dialog lets you add a SVN property to a selected resource.

Process

A property must be named, and its value can be entered directly into the dialog box, or read from a file. The standard SVN properties are available from the drop-down list. When setting properties on a folder, you can apply the property recursively.

This same dialog is used when modifying a property value. The only difference is that the property name can not be changed when modifying a property.

Related Tasks

None

Related Reference

SVN Properties View

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/share.html000066400000000000000000000027611203611042400311340ustar00rootroot00000000000000 Share

Share

This function is initiated via the Team > Share context menu.

Overview

The share process allows you to add or identify your project to version control.

Process

There are two scenarios for sharing a project. The first is the process of taking a brand new project in your Eclipse workspace and importing it into a repository so that it can be managed by SVN. This process is covered in the section that describes importing a new project into a SVN repository. The second scenario is where you already have an existing SVN working copy in your Eclipse workspace and you want to connect to using the SVN plug-in for Eclipse. This is covered in the section detailing connecting to an existing project.

Related Tasks

Importing a new project into a SVN repository
Connecting to an existing project

Related Reference

None

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/show-annotation.html000066400000000000000000000011551203611042400331560ustar00rootroot00000000000000 Team > Show Annotation

Team > Show Annotation

This actions switches to the SVN Repository Browsing perspective and shows the pristine version of the selected resource in editor viewer, alongside with the SVN Annotate View and the History View.

show-as-unified-diff.html000066400000000000000000000027031203611042400336570ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference Create Unified Diff

Create Unified Diff

Overview

This menu option allows two files or folders to be selected for comparison with the output of the compare generated in unified diff format.

Process

Type the path and name of the file to receive the output of the compare or click Browse to select a folder location.

The Compare from and Compare to URLs are carried through from your selections. The default is to compare the head revision of the two resources. To compare a previous revision of a resource, click Revision and type the revision number. You can use Show Log to review the revision history for a resource.

Related Tasks

None

Related Reference

SVN Repository view

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/show-in-history.html000066400000000000000000000007631203611042400331150ustar00rootroot00000000000000 Team > Show History

Team > Show History

This actions open the History View (if not already open) and displays the history of the currently selected resource.

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/show-properties.html000066400000000000000000000007141203611042400332000ustar00rootroot00000000000000 Team > Show properties

Team > Show properties

This command shows the SVN Properties View for the selected resource.

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/svn-annotations.html000066400000000000000000000050521203611042400331670ustar00rootroot00000000000000 SVN Annotate View

SVN Annotate View

This view is accessed via the Team > Show Annotation context menu. Alternatively, to activate this view, choose Window > Open View > Other... and select SVN ... SVN Annotate View. This view is also part of the Team Synchronizing Perspective.

Functions

The SVN Annotate View is part of the SVN Repository Exploring Perspective and allows you to review the revision history for a specifc file, right down to the individual line of code.

The view is comprised of three distinct areas:

  • The first pane shows a list of all the individuals that have changed this file along with the revision number and the total number of lines changed as part of that revision.
  • The Eclipse text viewer showing the contents of the selected file at the head revision.
  • The History View for the selected file.

The History View and the view of the file contents are dynamically linked to the revision panel. Left clicking an entry in the revision pane will highlight all of the lines that were modified in the file in the text viewer. In the same way, when a line in the text viewer is selected, the revision author will be highlighted in the revision pane. The History View is automatically updated to provide the full details of each revision selected.

Related Tasks

None

Related Reference

SVN Repository Exploring Perspective
SVN Repository View
History View

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/svn-console.html000066400000000000000000000037761203611042400323070ustar00rootroot00000000000000 SVN Console View

SVN Console View

Features

The SVN Console View shows the communication between your client and the SVN repository. The output is expressed as subcommands to the SVN server and simulates the SVN command line notation. There are a number of workbench preferences that can be set for controlling the SVN console output.

Toolbar

Clear Console
Clear the ouput from the current console window.
Scroll Lock
When activated, this stops the output in the console window from scrolling as new messages are added to the end of the list.
Pin Console
Locks the output in the console window to the active process.
Display Console
Toggles the console ouput to one of the selected processes.
Open Console
Opens another console window.

Related Tasks

None

Related Reference

SVN Preferences

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/svn-history-view.html000066400000000000000000000167721203611042400333160ustar00rootroot00000000000000 History View

History View

This view is accessed via the Team > Show History context menu. Subclipse is using the common Team History view and framework provided by Eclipse. Another way to activate this view is to choose Window > Show View > Other... and select Team ... History.

Features

This view shows the history of a selected resource, as it exists in the SVN repository. In SVN, both files and directories are versioned and have a history. If the resource selected is in a working copy, the revision currently checked out is highlighted (in bold face).

The view itself consists of three distinct areas:

  • The revision table showing revision numbers, date/time of revision, the name of the author, as well as the first line of the commit message. You can click on any revision to show its full details.
  • The list of resources affected by this revision (modified, added, deleted or changed properties).
  • The commit message for the selected revision.
Get file/contents
Update the content and or revision of a local resource.
Show differences
You can request to view the revision history for any file or folder in the repository.
Revert
You can revert the changes for a specific revision effectively undoing the changes made as part of that change
Branch/Tag
Checkout the repository location to your local workspace as a working copy.
Update commit messages
You can update commit properties (commit message, author etc.) associated with a specific revision (commit) operation.
View annotation
View the revision history associated with individual lines of code/text in a file.
Compare
Compare two specific file revisions.

Toolbar

Refresh
Refresh the contents of the current resource history display.
Next nn
By default, the resource history view only loads the revision table with the latest revisions. The number of revisions returned is set in the SVN preferences. This command retrieves the next block of revisions from the repository.
Get All
This command will retrieve all revisions from the repository for the selected resource.
Link with Editor
The History View can be linked with the current editor. If linked, the content if the revision table changes when you switch the resource being edited. Showing resource history may be a longer running operation since it must retrieve the history from the repository. If working with a remote repository on a WAN or on the internet, you might want to turn off the "Link with Editor" button, or explicitly close or hide the view when switching between resources in the editor.
Options
This command displays a menu of view options to control the behaviour and display of the History View .

Context menu

The context menu is available for any item listed in the revision table.

The menu options available on the context menu vary depending on whether you launched the resource history view from your working copy or the SVN Repository View.

Get Contents

Use this option to update the contents of the selected file in your working copy with the contents of the revision in the repository. The revision number of your local file is not changed by this option.

This option is only valid when the resource history was launched for an individual file in a local working copy.

Get Revision

Use this option to replace the file in your working copy with the selected revision in the repository. The revision number of your local file is changed to the selected revision.

This option is only valid when the resource history was launched for an individual file in a local working copy.

Create Unified Diff

This menu option will create an output file of the changes in the selected revision in unified diff format. The comparison is made between the selected revision and the previous revision.

Create Branch/Tag from Revision

Use this option to create a branch or tag in the repository based in the currently selected revision.

Set Commit Properties

This option will allow you to update the properties (comment, author etc.) associated with a specific commit operation.

Revert Changes from Revision

Use this option to undo the changes that were made in a selected revision.

This option is only valid when the resource history was launched from a local working copy.

Show Annotation

This option launches the SVN Annotate View for the selected file. The annotate view allows you to see the revision history associated with individual lines of code/text in a file.

This option is only valid when the resource history was launched for an individual file in a local working copy.

Compare

Compares the selected revisions of the file using the default compare viewer specified in your Eclipse workbench preferences.

This option is only valid when launched for two selected revisions of an individual file in a local working copy.

Related Tasks

Branching and tagging
Configure Branches/Tags

Related Reference

SVN Repository View
Create Unified Diff

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/svn-properties-view.html000066400000000000000000000043201203611042400337730ustar00rootroot00000000000000 SVN Properties View

SVN Properties View

This view is accessed via the Team > Show properties menu option. Alternatively, to activate this view, choose Window > Open View > Other... and select SVN ... SVN Properties.

Features

The SVN Properties View lists all of the SVN properties associated with a selected resource and allows you to add, modify and delete them.

In general, properties are just name/value pairs that mean something to the specific usage of the repository. However, some special properties have explicit meaning to SVN itself and to user interface agents like the SVN plug-in for Eclipse. Properties are versioned data in their own right so if you change a property, you need to commit it to the repository before others can see it.

Context Menu

Refresh View

Refresh the SVN Properties View and update the display with the latest information from the repository.

Add / Modify a property

This option launches the Set a SVN Property dialog.

Save property value

Allows you to save the property value to a file within the current or an alternative project.

Delete Property

Deletes the property pair from the selected resource. Confirmation is requested before actioning the delete request.

Related Tasks

None

Related Reference

Team > Add to svn:ignore
Issuetracking support in SVN
Team > Add keywords

svn-repository-properties.html000066400000000000000000000021101203611042400351540ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference SVN Repository Properties

Properties

This option displays the properties for the selected repository resource including the URL, last change author, revision and date. The SVN property/value pairs associated with the resource are also shown in the properties window.

If the selected resource is locked, the lock owner, lock date and lock comment is also displayed.

Related Tasks

None

Related Reference

SVN Repository View
SVN Properties View
SVN Resource Properties

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/svn-repository-view.html000066400000000000000000000177761203611042400340410ustar00rootroot00000000000000 SVN Repository View

SVN Repository View

The SVN Repository View is part of the SVN Repository Exploring Perspective.

Features

The SVN Repository view allows you to define and manage SVN repository locations within the Eclipse workbench. Repository files and folders are presented in a tree view with the top level of the tree representing a connection to a specific SVN Repository location. Once you have a location defined, you have access to a range of repository operations, including:

History
You can request to view the revision history for any file or folder in the repository.
Checkout
Checkout the repository location to your local workspace as a working copy.
Import/Export
Import local or networked resources directly into the repository or export a selected repository resource.
New, rename, delete
You can manipulate the repository resources directly from within this view including creating new folders and renaming and deleting files and folders.
Branch/Tag
Branch or tag repository resources in one simple operation.
Copy, paste
Copy and paste functionality allows you to copy individual files, or entire folders, within the repository.
Relocate
Relocate your repository due to an IP address update, protocol change or similar.
Compare
You can select two files or folders for comparison as a unified diff file.

Toolbar

Home
Reset the view to the top level while retaining focus on the current location.
Back
This command steps back through the hierarchy views that were selected via the Go Into command.
Go Into
Step into the currently selected folder and make it the top level of the hierarchy.
Refresh
Refresh the contents of the view.
Collapse All
This command collapses the tree expansion state of all resources in the view.
Add SVN Repository
This command evokes the Add a new SVN Repository location wizard.

Context menu

The context menu options available differ slightly depending on the entry selected in the SVN Repository View.

New > New remote folder

This menu option will evoke the New remote folder wizard.

New > Repository Location

This menu option will evoke the Add a new SVN Repository wizard.

History

This menu option will show the revision history for the selected file or folder in the History view.

Create Unified Diff

This menu option allows two files or folders to be selected for comparison. The output of the compare is saved to a file in unified diff format.

Check Out

If a .project file is found in the selected directory, an option is available to Check Out As Project. This option will create a working copy in a new folder in your active workspace. If you want to create the working copy somewhere other than in your active workspace, you can use the Check Out As Project Into option. You can then specify an alternative target for the working copy. If there is no .project file in the selected directory, you can use the Check Out As ... option. This option will allow you to specify the type of project you wish to check out the location as and create a .project file for you in the working copy.

Export

Export (copy) the selected resources to a designated target location.

Import

Import a local or networked resource into the repository.

Rename/move

This option will evoke the Move or rename a remote resource wizard.

Branch/Tag

This option simplifies the copy and paste of repository resources by allowing you to complete the branch and tag process as a single step operation.

Copy/Paste

These options allow you to copy and paste file and folder resources directly in the repository. Paste is a commit operation and you will prompted to enter a comment as part of the paste process.

Delete

The delete option removes the selected resources from the repository. One or more files or folders can be selected for delete in a single operation. To select multiple resources, hold down the Shift and or Ctrl keys and click on the resources you want to delete. Delete is a commit operation and you will prompted to enter a comment as part of the delete process.

Copy URL to clipboard

This option will copy the full repository URL for the selected resource to the Windows clipboard. This is useful if you want to share the repository URL with colleagues or reproduce the URL in an email, documentation or similar.

Properties

This option displays the properties for the selected repository resource including the URL, last change author, revision and date.

Refresh View

Refresh the SVN Repository View and update the display with the latest information from the repository.

Relocate

The Relocate command is only used if the URL of the repository root has changed due to a server IP address change, protocol change (e.g. http:// to https://) or a change of the repository root path in the server setup.

Related Tasks

Checking out a Project
Branching and tagging

Related Reference

SVN Repository Exploring Perspective
History View
Create Unified Diff

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/svn-repository.html000066400000000000000000000026571203611042400330610ustar00rootroot00000000000000 SVN Repository Exploring Perspective

SVN Repository Exploring Perspective

Overview

The Eclipse SVN plug-in provides a dedicated perspective for working with SVN repositories. To activate this perspective, choose Window > Open Perspective > Other... and select SVN Repository Exploring.

Views

The perspective is comprised primarily of two views; the SVN Repository view and History view. The SVN Repository view shows the SVN repository locations that you have defined to your workbench. The History view is comprised of three individual panes and lists the revision history for a specific resource (file or folder) as it exists in the SVN repository.

Related Tasks

Creating a new Repository Location

Related Reference

SVN Repository View
History View
SVN Annotate View

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/switch.html000066400000000000000000000040601203611042400313250ustar00rootroot00000000000000 Switch

Switch

This function is initiated via the Team > Switch menu option.

Overview

While a check out operation checks out everything from the desired branch into a new working copy, a switch operation only transfers the changed data to an existing working copy. This can considerably reduce the amount of time it takes to establish the desired working copy as well as dramtically reduce the load on the network during the copy process.

Process

Type the URL of the desired repository location (usually a branch) or click Browse to select a location from the repository. Click OK to switch your working copy to the new location.

Switch works just like Update in that it never discards your local changes. Any changes you have made to your working copy which have not yet been committed will be merged when you do the Switch. If you do not want this to happen, you must either commit your changes before switching, or Revert your working copy to an already-committed revision (typically HEAD).

Related Tasks

Maintaining branches with SVN
Configure Branches/Tags

Related Reference

Revert
Update

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/team-synchronize.html000066400000000000000000000053001203611042400333210ustar00rootroot00000000000000 Team Synchronizing Perspective

Team Synchronizing Perspective

Overview

When you are working with complex projects in a team, it may be extremely hard to grasp the impact of your changes in relation to the changes committed by others. To help with this, the Eclipse IDE offers the Team Synchronizing Perspective, which the SVN plug-in for Eclipse extends to support SVN repositories. To activate this perspective, choose Window > Open Perspective > Other... and select Team Synchronizing. Alternatively, you can launch the persective directly from your working copy via the Team > Synchronize... context menu option.

The concept of team synchronization is that of a cross-resource, three way merge in which you may consider all changes at once, and filter the information as needed before performing any updates or commits, with your existing working copy being the focal point. Your own local changes are called outgoing and the changes that have happened in the repository since your last update are called incoming. In the synchronization perspective, both incoming and outgoing changes are analyzed before they are synchronized; that is, for incoming changes, synchronization means that your working copy is updated (corresponds to Team > Update) and for outgoing changes, synchronization means that your changes are committed.

Launching the Team Synchronization Perspective does not update or change the status of local or repository resources automatically.

The Team Synchronizing Perspective as a whole can be considered analogous to the output of svn status -u.

The Team Synchronization Perspective is a function of the Eclipse IDE. For a more detailed discussion of team synchronization, take a look at the help on CVS workspace synchronization.

Related Tasks

None

Related Reference

None

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/unlock.html000066400000000000000000000015731203611042400313250ustar00rootroot00000000000000 Team > Unlock

Team > Unlock

You can use the Unlock command to release the lock on a file that you had previously locked. The normal process would be to commit your changes, which also releases the locks. This action exists for the scenario where you have locked a file and later decide you are not going to commit it.

The unlock command is issued from the 'Team' context menu of the resource.

Tasks:

Typical work cycle: Edit, Update, Commit

Reference

Team > Lock

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/reference/update.html000066400000000000000000000051331203611042400313100ustar00rootroot00000000000000 Update

Update

This function is initiated via the Team > Update menu option or from within the Team Synchronizing View.

Overview

While you are working on a project, other members of your team may be committing changes to the project repository. To get these changes, you have to update your working copy.

Process

There are three different kinds of incoming changes:

Non-conflicting
A non-conflicting change occurs when a file has been changed remotely but has not been modified locally.
Conflicting, but auto-mergeable
An auto-mergeable conflicting change occurs when an ASCII file has been changed both remotely and locally (i.e. has non-committed local changes) but the changes are on different lines.
Conflicting
A conflicting change occurs when one or more of the same lines of an ASCII file have been changed both remotely and locally. Binary files are never auto-mergeable and are conflicting by default.

When you perform an update, the contents of your working copy will be updated with the latest version of the resource available in the repository. For non-conflicting and auto-mergeable conflicts, there is no additional action required. The repository contents are not changed when you update When you accept incoming changes, these changes are applied to your working copy only. The repository is only changed when you commit your outgoing changes.

In case a conflict is found, you may choose to revert your changes or edit and resolve the conflict using the Eclipse conflict editor.

Related Tasks

None

Related Reference

Revert
Team Synchronizing

Editing conflicts

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/html/toc.html000066400000000000000000000044561203611042400266640ustar00rootroot00000000000000 SVN Plug-in Help - Table of Contents

A Quick Start Guide and Reference

The Getting Started section will take you through the basics of the SVN plug-in, such as... The section on Daily Work focuses on the day-to-day work cycle:

The Reference section will take you through each feature the plug-in provides.

The FAQ section provides some quick answers to some of the common questions

However, if you are already an SVN user, then the feature-by-feature comparison of the SVN command line and SVN plug-in may be your best starting point.

Acknowledgements:

This product includes software developed by CollabNet (http://www.Collab.Net/)

This product includes SVNKit. (http://svnkit.com/)
Copyright (c) 2004-2006 TMate Software. All rights reserved.

SVNKit is licensed under the terms of the TMate License. (http://svnkit.com/licensing/index.html

This offering is based on technology from the Eclipse Project http://www.eclipse.org.

The SVN plug-in includes icons from the TortoiseSVN project. Those icons are licensed under the terms of the GPL.

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/plugin.xml000066400000000000000000000005571203611042400262630ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/toc.xml000066400000000000000000000016571203611042400255540ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/toc_platformGettingstarted.xml000066400000000000000000000015761203611042400323710ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/tocgettingstarted.xml000066400000000000000000000013251203611042400305150ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.doc/tocreference.xml000066400000000000000000000062121203611042400274230ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.feature/000077500000000000000000000000001203611042400251225ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.feature/.project000066400000000000000000000006121203611042400265700ustar00rootroot00000000000000 org.tigris.subversion.subclipse.feature org.eclipse.pde.FeatureBuilder org.eclipse.pde.FeatureNature eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.feature/.settings/000077500000000000000000000000001203611042400270405ustar00rootroot00000000000000org.eclipse.mylar.tasklist.prefs000066400000000000000000000002231203611042400352110ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.feature/.settings#Wed May 23 09:39:08 EDT 2007 eclipse.preferences.version=1 project.repository.kind=issuezilla project.repository.url=http\://subclipse.tigris.org eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.feature/build.properties000066400000000000000000000002251203611042400303360ustar00rootroot00000000000000bin.includes = feature.xml,\ license.html,\ feature.properties,\ licenses/,\ subclipse/ eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.feature/feature.properties000066400000000000000000000063271203611042400307030ustar00rootroot00000000000000#****************************************************************************** # Copyright (c) 2004, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ # feature.properties # contains externalized strings for feature.xml # "%foo" in feature.xml corresponds to the key "foo" in this file # java.io.Properties file (ISO 8859-1 with "\" escapes) # This file should be translated. # "featureName" property - name of the feature featureName=Subclipse # "providerName" property - name of the company that provides the feature providerName=Tigris.org # "updateSiteName" property - label for the update site updateSiteName=Subclipse update site # "description" property - description of the feature description=Subclipse is an Eclipse Team Provider for the Subversion version control system. # "changesURL" property - URL of the "Change Log" # do not translate value - just change to point to a locale-specific HTML page changesURL=subclipse/changes.html # "licenseURL" property - URL of the "Feature License" # do not translate value - just change to point to a locale-specific HTML page licenseURL=license.html # "license" property - text of the "Feature Update License" # should be plain text version of license agreement pointed to be "licenseURL" license=\ Subclipse Software User Agreement\n\ 11th April, 2006\n\ \n\ Subclipse is licensed under the terms of the Eclipse Public\n\ License v1.0. http://www.eclipse.org/legal/epl-v10.html\n\ \n\ Applicable Licenses\n\ \n\ Subclipse is built upon a number of other open source\n\ technologies and products. Here is a list of those products\n\ with links to their licenses.\n\ \n\ svnClientAdapter: Part of the overall Subclipse project,\n\ svnClientAdapter presents a pluggable high-level interface\n\ to the Subversion repository. svnClientAdapter is licensed\n\ under the Apache2 License.\n\ http://www.apache.org/licenses/LICENSE-2.0\n\ \n\ Depending on the adapter you choose in your preferences, the\n\ following products and licenses are involved.\n\ \n\ Subversion/JavaHL: JavaHL is a high-level Java language binding\n\ to the Subversion "C" libraries and is part of the official\n\ Subversion source distribution. Subversion is licensed under\n\ the CollabNet license.\n\ http://subversion.tigris.org/project_license.html\n\ \n\ SVNKit: SVNKit is a "pure Java" implementation of the\n\ Subversion network protocols and working copy formats.\n\ SVNKit is licensed under the TMate license.\n\ http://svnkit.com/licensing/index.html\n\ \n\ Ganymed SSH-2: SVNKit uses the Ganymed SSH-2 library to support\n\ the svn+ssh:// protocol. Ganymed SSH-2 is licensed under the\n\ Ganymed license.\n\ http://www.ganymed.ethz.ch/ssh2/LICENSE.txt\n\ \n\ IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS\n\ AND CONDITIONS PRIOR TO USE OF THIS CONTENT.\n ########### end of license property ##########################################eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.feature/feature.xml000066400000000000000000000045011203611042400272770ustar00rootroot00000000000000 %description http://subclipse.tigris.org/ %license eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.feature/license.html000066400000000000000000000030631203611042400274340ustar00rootroot00000000000000 Subclipse License

Subclipse Software User Agreement

11th April, 2006

Subclipse

Subclipse is licensed under the terms of the Eclipse Public License v1.0.

Applicable Licenses

Subclipse is built upon a number of other open source technologies and products. Here is a list of those products with links to their licenses.

svnClientAdapter: Part of the overall Subclipse project, svnClientAdapter presents a pluggable high-level interface to the Subversion repository. svnClientAdapter is licensed under the Apache2 License. Depending on the adapter you choose in your preferences, the following products and licenses are involved.

Subversion/JavaHL: JavaHL is a high-level Java language binding to the Subversion "C" libraries and is part of the official Subversion source distribution. Subversion is licensed under the CollabNet license.

SVNKit: SVNKit is a "pure Java" implementation of the Subversion network protocols and working copy formats. SVNKit is licensed under the TMate license.

Ganymed SSH-2: SVNKit uses the Ganymed SSH-2 library to support the svn+ssh:// protocol. Ganymed SSH-2 is licensed under a BSD-style license.

IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THIS CONTENT.

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.feature/licenses/000077500000000000000000000000001203611042400267275ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.feature/licenses/Apache2.txt000066400000000000000000000261351203611042400307420ustar00rootroot00000000000000 Apache License Version 2.0, January 2004 http://www.apache.org/licenses/ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION 1. Definitions. "License" shall mean the terms and conditions for use, reproduction, and distribution as defined by Sections 1 through 9 of this document. "Licensor" shall mean the copyright owner or entity authorized by the copyright owner that is granting the License. "Legal Entity" shall mean the union of the acting entity and all other entities that control, are controlled by, or are under common control with that entity. For the purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. "You" (or "Your") shall mean an individual or Legal Entity exercising permissions granted by this License. "Source" form shall mean the preferred form for making modifications, including but not limited to software source code, documentation source, and configuration files. "Object" form shall mean any form resulting from mechanical transformation or translation of a Source form, including but not limited to compiled object code, generated documentation, and conversions to other media types. "Work" shall mean the work of authorship, whether in Source or Object form, made available under the License, as indicated by a copyright notice that is included in or attached to the work (an example is provided in the Appendix below). "Derivative Works" shall mean any work, whether in Source or Object form, that is based on (or derived from) the Work and for which the editorial revisions, annotations, elaborations, or other modifications represent, as a whole, an original work of authorship. For the purposes of this License, Derivative Works shall not include works that remain separable from, or merely link (or bind by name) to the interfaces of, the Work and Derivative Works thereof. "Contribution" shall mean any work of authorship, including the original version of the Work and any modifications or additions to that Work or Derivative Works thereof, that is intentionally submitted to Licensor for inclusion in the Work by the copyright owner or by an individual or Legal Entity authorized to submit on behalf of the copyright owner. For the purposes of this definition, "submitted" means any form of electronic, verbal, or written communication sent to the Licensor or its representatives, including but not limited to communication on electronic mailing lists, source code control systems, and issue tracking systems that are managed by, or on behalf of, the Licensor for the purpose of discussing and improving the Work, but excluding communication that is conspicuously marked or otherwise designated in writing by the copyright owner as "Not a Contribution." "Contributor" shall mean Licensor and any individual or Legal Entity on behalf of whom a Contribution has been received by Licensor and subsequently incorporated within the Work. 2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form. 3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed. 4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions: (a) You must give any other recipients of the Work or Derivative Works a copy of this License; and (b) You must cause any modified files to carry prominent notices stating that You changed the files; and (c) You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and (d) If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License. 5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions. 6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file. 7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License. 8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages. 9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability. END OF TERMS AND CONDITIONS APPENDIX: How to apply the Apache License to your work. To apply the Apache License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives. Copyright [yyyy] [name of copyright owner] Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at http://www.apache.org/licenses/LICENSE-2.0 Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.feature/licenses/Ganymed.txt000066400000000000000000000056111203611042400310570ustar00rootroot00000000000000Copyright (c) 2005 - 2006 Swiss Federal Institute of Technology (ETH Zurich), Department of Computer Science (http://www.inf.ethz.ch), Christian Plattner. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: a.) Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. b.) 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. c.) Neither the name of ETH Zurich nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER 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 Java implementations of the AES, Blowfish and 3DES ciphers have been taken (and slightly modified) from the cryptography package released by "The Legion Of The Bouncy Castle". Their license states the following: Copyright (c) 2000 - 2004 The Legion Of The Bouncy Castle (http://www.bouncycastle.org) Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.feature/licenses/JavaHL.txt000066400000000000000000000052711203611042400306020ustar00rootroot00000000000000This license applies to all portions of Subversion which are not externally-maintained libraries (e.g. apr/, apr-util/, and neon/). Such libraries have their own licenses; we recommend you read them, as their terms may differ from the terms below. This is version 1 of this license. It is also available online at http://subversion.tigris.org/license-1.html. If newer versions of this license are posted there (the same URL, but with the version number incremented: .../license-2.html, .../license-3.html, and so on), you may use a newer version instead, at your option. ==================================================================== Copyright (c) 2000-2006 CollabNet. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3. The end-user documentation included with the redistribution, if any, must include the following acknowledgment: "This product includes software developed by CollabNet (http://www.Collab.Net/)." Alternately, this acknowledgment may appear in the software itself, if and wherever such third-party acknowledgments normally appear. 4. The hosted project names must not be used to endorse or promote products derived from this software without prior written permission. For written permission, please contact info@collab.net. 5. Products derived from this software may not use the "Tigris" name nor may "Tigris" appear in their names without prior written permission of CollabNet. THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 COLLABNET OR ITS 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. ==================================================================== This software consists of voluntary contributions made by many individuals on behalf of CollabNet. eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.feature/licenses/SVNKit.txt000066400000000000000000000051301203611042400306050ustar00rootroot00000000000000The TMate License This license applies to all portions of TMate SVNKit library, which are not externally-maintained libraries (e.g. Ganymed SSH library). All the source code and compiled classes in package org.trigris.subversion.javahl except SvnClient class are covered by the license in JAVAHL-LICENSE file Copyright (c) 2004-2006 TMate Software. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Redistributions in any form must be accompanied by information on how to obtain complete source code for the software that uses SVNKit and any accompanying software that uses the software that uses SVNKit. The source code must either be included in the distribution or be available for no more than the cost of distribution plus a nominal fee, and must be freely redistributable under reasonable conditions. For an executable file, complete source code means the source code for all modules it contains. It does not include source code for modules or files that typically accompany the major components of the operating system on which the executable file runs. * Redistribution in any form without redistributing source code for software that uses SVNKit is possible only when such redistribution is explictly permitted by TMate Software. Please, contact TMate Software at support@svnkit.com to get such permission. THIS SOFTWARE IS PROVIDED BY TMATE SOFTWARE ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL TMATE SOFTWARE 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. eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.feature/licenses/epl-v10.html000066400000000000000000000402301203611042400310000ustar00rootroot00000000000000 Eclipse Public License - Version 1.0

Eclipse Public License - v 1.0

THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.

1. DEFINITIONS

"Contribution" means:

a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
b) in the case of each subsequent Contributor:

i) changes to the Program, and

ii) additions to the Program;

where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.

"Contributor" means any person or entity that distributes the Program.

"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.

"Program" means the Contributions distributed in accordance with this Agreement.

"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.

2. GRANT OF RIGHTS

a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.

b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.

c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.

d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.

3. REQUIREMENTS

A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:

a) it complies with the terms and conditions of this Agreement; and

b) its license agreement:

i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;

ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;

iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and

iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.

When the Program is made available in source code form:

a) it must be made available under this Agreement; and

b) a copy of this Agreement must be included with each copy of the Program.

Contributors may not remove or alter any copyright notices contained within the Program.

Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.

4. COMMERCIAL DISTRIBUTION

Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.

For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.

5. NO WARRANTY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.

6. DISCLAIMER OF LIABILITY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

7. GENERAL

If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.

If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.

All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.

Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.

This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

 

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.feature/subclipse/000077500000000000000000000000001203611042400271135ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.feature/subclipse/changes.html000066400000000000000000000656471203611042400314330ustar00rootroot00000000000000 Subclipse Changelog

Subclipse Changelog

This file documents all of the changes that have been made to Subclipse beginning with the 1.7.0 release process. Please visit http://subclipse.tigris.org/ for the latest information on Subclipse.

The latest version of this file can be viewed directly from our website at http://subclipse.tigris.org/subclipse_1.8.x/changes.html. Please note that the file on the website may contain information about changes that have not yet been made available in a release. Generally, these changes will be available in the next release but it is also possible that a change will be pulled out due to testing problems.

NOTE: As of Subclipse 1.7.0, the minimum Subversion JavaHL requirement is 1.7.0.

NOTE: Subclipse follows an odd/even release numbering convention. The 1.7.x release stream is development builds which will culminate in the official 1.8.0 release. Timing for the 1.8.0 release will ideally be to coincide with Subversion 1.7.


Version 1.8.16
August 21, 2012

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.8.16

  • Schedule a non-locking job to refresh the status cache rather than doing it from within a resource change listener. (1450)

Version 1.8.15
August 15, 2012

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.8.15

  • JavaHL binaries updated to Subversion 1.7.6
  • Eliminate recursive retrieval of properties from repository when adjusting svn:externals properties to fixed revisions after creating branch from working copy. (1436)
  • Fix cleanup action label. (1437)
  • Workaround for SVNKit bug that results in Status.isConflicted == false for old format working copies.

Version 1.8.14
July 16, 2012

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.8.14

  • When Tree view is selected for Changes section of Commit Dialog, do not show the resource tree initially collapsed. (1433)
  • Fix History View get next/all revisions so that they work after "Include merged revisions" option is toggled. (1434)
  • Remove JDT dependencies.

Version 1.8.13
July 5, 2012

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.8.13

  • Do not attempt local refresh from move delete hook. (1430)
  • Make sure reentrant lock is released if checkin fails. (1432)

Version 1.8.12
June 21, 2012

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.8.12

  • Fix schedule rule violation after file is locked by file modification validator. (1427)
  • Only lock the projects that are being committed during a commit. (1425)
  • Don't use SynchronizationStateTester to check for outgoing changes in Working Sets as this can cause updating of the status cache. Instead, check to see if any of the working set projects are dirty. (1424)

Version 1.8.11
June 7, 2012

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.8.11

  • Set peg revision to revision entered in compare dialog when comparing to branch/tag. (1421)
  • Show post-commit hook error messages. (1418)
  • Never get status using api when checking to see if folder has dirty children. (1422)
  • When comparing to a revision, set right (remote) encoding to match left (local) encoding. (1423)

Version 1.8.10
May 29, 2012

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.8.10

  • JavaHL binaries for SVN 1.7.5
  • SVNKit library updated to latest version
  • Refresh status cache for resources that are reverted in the process of generating a diff. (1410)
  • Fix SVNActiveChangeSetCollector to ignore derived resources. (1411)
  • Enable Override and Update for outgoing deletions. (1413)

Version 1.8.9
May 1, 2012

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.8.9

  • Fix Compare SVN Properties when project name does not match repository location. (1407)
  • Fix Compare with Base Revision to not show hidden resources as local deletions. (1406)
  • Only read status from cache once when getting URL for LocalResource.
  • Optimizations to context menu option enablement to avoid repeated reading of status cache.
  • Fix potential NPEs in finally blocks when client adapter has not been instantiated. (1408)
  • Fix potential loop when refreshing status cache. (1402)
  • Do not show changes in Sync view if they are hidden by resource filters. (1409)

Version 1.8.8
April 17, 2012

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.8.8

  • Fix NPE during status update. (1392)
  • Do not get remote properties recursively. (1393)
  • Fix exclusion of deletions that are hidden by resource filters during commit, sync. (1383)
  • Compare SVN Properties option for resources, sync view items, SVN Repositories view remote resources. (1391)
  • Add a preview section to the Generate ChangeLog dialog. (1397)
  • Don't do a recursive revert if there are modified resources that are hidden by resource filters. (1398)
  • Get status from cache when checking to see if resource is ignored. (1402)
  • Don't auto-commit when Shift-Enter is pressed in the commit dialog's comment area. (1404)

Version 1.8.7
March 15, 2012

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.8.7

  • Undo change to condition refresh after Update based on notification of revision,as this change breaks refresh when there are mixed revisions. (1375)
  • Reliable filtering of child folders. (1375)
  • Disable "Revert changes from revision X" history view option for first revisions. (1381)
  • Add SVNSynchronizeParticipant as a property change listener during init rather than in the constructor. (1380)
  • Added "Ignore managed derived resources" preference. (535)
  • Fix scheduling rule problem when doing a revert on a project that causes changes in nested project to be reverted. (1387)

Version 1.8.6
March 9, 2012

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.8.6

  • JavaHL updated to Subversion 1.7.4.
  • SVNKit 1.7.0 updated to Beta3.
  • Prompt to upgrade working copy when a project from an SVN 1.6.x working copy is imported. (1347)
  • Fix revert of added folders to correctly refresh decorator. (1372)
  • Fix "Compare with latest from Repository" for project, when project name is not the same as repository folder name. (1374)
  • Fix Sync view refresh after file system deletions. (1369)
  • Fix OperationManager to eliminate unnecessary refreshes. (1375)
  • Do not pass resource deltas to another thread. (1378)

Version 1.8.5
February 13, 2012

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.8.5

  • JavaHL updated to Subversion 1.7.3.
  • Fix error when trying to checkout a project that already exists in the workspace to a new location when the existing project is closed and has no .project file. (1350)
  • Make sure to end operation when checkout fails with an error. (1351)
  • Validate file name before attempting to create patch. (1352)
  • Improvements to folder compare from history view. (1341)
  • Fix sync view to show file system deletions. (1318)
  • If resource not found at HEAD revision, start looking at last known revision. (1356)
  • If "Ignore changes to hidden resources" preference is true, then do not include resources that have been filtered out using Resource Filters when doing a commit, revert or synchronize. (1321)
  • Expose ignore ancestry for switch. (1358)
  • Do not contact contact repository when determining if all selected resources are from the same repository. (1366)
  • Improvements to multiple project sharing. (1371)

Version 1.8.4
December 5, 2011

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.8.4

  • JavaHL updated to Subversion 1.7.2.
  • Automatically refresh current revision in history view when history review resource is updated. (1338)
  • Checkout project to custom location. (1339)
  • Null-proof change set collector. (1345)
  • Do not do a recursive revert when selection is from a change set. (1346)
  • Don't do recursive revert if selection includes externals. (1346)
  • Refresh status cache after lock/unlock. (1344)
  • Make sure scheduling rule used for repository operations accounts for nested projects. (1348)

Version 1.8.3
November 21, 2011

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.8.3

  • Fix Commit dialog so that unversioned decorator is not incorrecly applied to deletes.
  • Fix NPE when trying to revert Change Set. (1326)
  • Fix local refresh of subfolders after Cleanup.
  • Fix NPE when updating with "local unversioned, incoming add" conflicts. (1333)
  • Date format preference for label text decorations. (1177,1332)
  • Use SelectionListener on Tree rather than SelectionChangedListener on TreeViewer. (1327)
  • Fix project/folder decoration to indicate that it is dirty if there are hidden, versioned children that are dirty. (1335)
  • Add a preference to ignore hidden resources. (1335)
  • Fix problem with caching of HEAD revision contents of remote file. (1334)
  • Fix refresh of Sync view after update. (1336)
  • Correctly set project location for new Eclipse project after checkout to a custom location. (1339)

Version 1.8.2
October 25, 2011

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.8.2

  • Fix bug where Subclipse could delete .svn folder in parent of Eclipse projects.
  • Do not show files and folders as outgoing deletions in the Sync view if they have not actually been deleted but are just filtered using Eclipse resource filters. (1321)

Version 1.8.1
October 23, 2011

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.8.1

  • JavaHL Win32/Win64 binaries from SVN 1.7.1
  • Check for test mode before putting up modal dialogs.
  • Look for commit comment properties by starting at selected resource and working up through ancestors. (1317)
  • Catch all exceptions when calling out to SynchronizationStateTester from decorator. (1315)
  • Fix sync view to include deletions made from file system. (1318)
  • Eliminate a NPE in LocalResource.getUrl. (1319)

Version 1.8.0
October 17, 2011

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.8.0

  • JavaHL Win32/Win64 binaries from SVN 1.7.0 GA
  • Check for test mode before putting up modal dialogs.
  • Fix revert from Sync view to revert recursively if nothing was removed from revert dialog. (1303)
  • Fix NPE trying to compare a new incoming file from sync view. (1312)
  • Enable cancellation of Synchronize job.

Version 1.7.5
September 13, 2011

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.7.5

  • JavaHL Win32/Win64 binaries from SVN 1.7.0-rc3
  • Fix display of log messages with non-ASCII characters. (1299)
  • Properly encode to URI format before passing URL to API. (1298)
  • When file encoding is not known, tell Eclipse compare UI it is UTF8.
  • Fix error handling in repository browse dialog. (1301)

Version 1.7.4
September 6, 2011

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.7.4

  • Fixed missing VS 2010 DLL's with JavaHL
  • Support for mine-conflict, theirs-conflict conflict resolution.
  • Fix NPE in String initialization when revprops author or message is null.

Version 1.7.3
August 30, 2011

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.7.3

  • JavaHL Win32/Win64 binaries from SVN 1.7.0-rc2
  • Fix NPE trying trying to branch/tag from working copy with multiple resources selected.
  • Option to pin external revisions when creating branch from working copy. (1294)
  • Refresh new project locally after checkout using New Project Wizard.
  • Support interactive conflict resolution for Update/Switch operations (1295)
  • Refresh local status cache after Cleanup operation.
  • Notify the resource tree of the deleted folder so that proper notifications will be sent.
  • Fix refresh of synchronize view after commit of folder deletion.
  • Force refresh of parent folder decorator after deletion.
  • Include phantoms when asking eclipse for folder. (1297)
  • Fix Sync view refresh after commit of deleted folders.
  • Fix status cache refresh after folder added.

Version 1.7.2
August 10, 2011

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.7.2

  • JavaHL binaries from SVN 1.7.0-beta3
  • Addition of JavaHL Windows 64-bit binaries
  • Fix drag/drop, copy/paste over existing file so that target file does not end up as a scheduled delete. (1275)
  • Fix missing borders in affected paths tables. (1257)
  • When showing annotation, check for already open editor on resource that implements ITextEditorExtension4 (showRevisionInformation) rather the more specific AbstractDecoratedTextEditor. (1282)
  • When resolving a "local add, incoming add upon merge" tree conflict, include the option to compare the working copy with merge source and optionally resolve the tree conflict when the compare editor is closed.. (1279)
  • Fix suggestMergeSources. It was always returning an empty array.
  • "Suggest merge sources" preference. (1250)
  • Checkout project and then create/open project over the checkout, rather than vice versa, to ensure that resource delta is not fired when project is in an invalid state.(1201)
  • When multiple projects checked out, defer opening them all until all of them are checked out. (1201)
  • Friendly handling of failures to write to temp directory when opening a file in an external editor from the Repositories View. (1135)
  • If project cannot be deleted due to locks on SQLite database, use SVNMoveDeleteHook to show a meaningful error message and cancel the project deletion.
  • If compare pane is open in commit dialog, then automatically populate it when selection changes. Likewise, if a file is selected when compare pane is opened, then automatically populate it. (1265)
  • Truncate cached log messages for revision graph at 64K to work around Java limitation. (1289)
  • Don't prompt to save dirty files if they are not related to the operation. (1290)
  • When checking out a specific revision, check to see if the location has changed in the repository and adjust the URL if it has. (1274)
  • Fix error when viewing revision of a deleted file from history view. (1267)
  • Fix history view compare problem when comparing revisions from before branch was created. (1248)
  • When switching to a specific revision, use that revision as the peg revision. (1291)
  • Fix scheduling rule error in move delete hook when resolving a tree conflict and selecting option to delete a resource. (1230)

Version 1.7.1
July 20, 2011

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.7.1

  • JavaHL binaries from SVN 1.7.x branch @ r1148902
  • Fix typo in working copy upgrade message. (1284)
  • Working copy upgrade notification message. (1284)
  • Refresh target of update operation. (1285)
  • Auto share imported project if it lives inside a working copy. (1286)

Version 1.7.0
July 15, 2011

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse/1.7.0

  • JavaHL binaries for Subversion 1.7.0-beta1
  • New Upgrade option to upgrade working copy to 1.7 format.
  • Support for changes in SVN 1.7 working copy design.
eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.feature/000077500000000000000000000000001203611042400262225ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.feature/.project000066400000000000000000000006411203611042400276720ustar00rootroot00000000000000 org.tigris.subversion.subclipse.graph.feature org.eclipse.pde.FeatureBuilder org.eclipse.pde.FeatureNature eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.feature/build.properties000066400000000000000000000001351203611042400314360ustar00rootroot00000000000000bin.includes = feature.xml,\ feature.properties,\ license.html eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.feature/feature.properties000066400000000000000000000063021203611042400317740ustar00rootroot00000000000000#****************************************************************************** # Copyright (c) 2004, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ # feature.properties # contains externalized strings for feature.xml # "%foo" in feature.xml corresponds to the key "foo" in this file # java.io.Properties file (ISO 8859-1 with "\" escapes) # This file should be translated. # "featureName" property - name of the feature featureName=Subversion Revision Graph # "providerName" property - name of the company that provides the feature providerName=Tigris.org # "updateSiteName" property - label for the update site updateSiteName=Subclipse update site # "description" property - description of the feature description=Revision graph feature for Subclipse. # "changesURL" property - URL of the "Change Log" # do not translate value - just change to point to a locale-specific HTML page changesURL=subclipse_1.4.x/changes.html # "licenseURL" property - URL of the "Feature License" # do not translate value - just change to point to a locale-specific HTML page licenseURL=license.html # "license" property - text of the "Feature Update License" # should be plain text version of license agreement pointed to be "licenseURL" license=\ Subclipse Software User Agreement\n\ 11th April, 2006\n\ \n\ Subclipse is licensed under the terms of the Eclipse Public\n\ License v1.0. http://www.eclipse.org/legal/epl-v10.html\n\ \n\ Applicable Licenses\n\ \n\ Subclipse is built upon a number of other open source\n\ technologies and products. Here is a list of those products\n\ with links to their licenses.\n\ \n\ svnClientAdapter: Part of the overall Subclipse project,\n\ svnClientAdapter presents a pluggable high-level interface\n\ to the Subversion repository. svnClientAdapter is licensed\n\ under the Apache2 License.\n\ http://www.apache.org/licenses/LICENSE-2.0\n\ \n\ Depending on the adapter you choose in your preferences, the\n\ following products and licenses are involved.\n\ \n\ Subversion/JavaHL: JavaHL is a high-level Java language binding\n\ to the Subversion "C" libraries and is part of the official\n\ Subversion source distribution. Subversion is licensed under\n\ the CollabNet license.\n\ http://subversion.tigris.org/project_license.html\n\ \n\ SVNKit: SVNKit is a "pure Java" implementation of the\n\ Subversion network protocols and working copy formats.\n\ SVNKit is licensed under the TMate license.\n\ http://svnkit.com/licensing/index.html\n\ \n\ Ganymed SSH-2: SVNKit uses the Ganymed SSH-2 library to support\n\ the svn+ssh:// protocol. Ganymed SSH-2 is licensed under the\n\ Ganymed license.\n\ http://www.ganymed.ethz.ch/ssh2/LICENSE.txt\n\ \n\ IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS\n\ AND CONDITIONS PRIOR TO USE OF THIS CONTENT.\n ########### end of license property ##########################################eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.feature/feature.xml000066400000000000000000000032151203611042400304000ustar00rootroot00000000000000 Subversion Revision Graph for Subclipse http://subclipse.tigris.org/ %license eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.feature/license.html000066400000000000000000000030631203611042400305340ustar00rootroot00000000000000 Subclipse License

Subclipse Software User Agreement

11th April, 2006

Subclipse

Subclipse is licensed under the terms of the Eclipse Public License v1.0.

Applicable Licenses

Subclipse is built upon a number of other open source technologies and products. Here is a list of those products with links to their licenses.

svnClientAdapter: Part of the overall Subclipse project, svnClientAdapter presents a pluggable high-level interface to the Subversion repository. svnClientAdapter is licensed under the Apache2 License. Depending on the adapter you choose in your preferences, the following products and licenses are involved.

Subversion/JavaHL: JavaHL is a high-level Java language binding to the Subversion "C" libraries and is part of the official Subversion source distribution. Subversion is licensed under the CollabNet license.

SVNKit: SVNKit is a "pure Java" implementation of the Subversion network protocols and working copy formats. SVNKit is licensed under the TMate license.

Ganymed SSH-2: SVNKit uses the Ganymed SSH-2 library to support the svn+ssh:// protocol. Ganymed SSH-2 is licensed under a BSD-style license.

IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THIS CONTENT.

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/000077500000000000000000000000001203611042400255465ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/.classpath000066400000000000000000000007101203611042400275270ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/.project000066400000000000000000000012771203611042400272240ustar00rootroot00000000000000 org.tigris.subversion.subclipse.graph.test org.eclipse.jdt.core.javabuilder org.eclipse.pde.ManifestBuilder org.eclipse.pde.SchemaBuilder org.eclipse.jdt.core.javanature org.eclipse.pde.PluginNature eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/.settings/000077500000000000000000000000001203611042400274645ustar00rootroot00000000000000org.eclipse.jdt.core.prefs000066400000000000000000000011721203611042400343700ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/.settings#Fri Nov 07 14:02:21 EST 2008 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=disabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.compliance=1.4 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning org.eclipse.jdt.core.compiler.source=1.3 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/META-INF/000077500000000000000000000000001203611042400267065ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/META-INF/MANIFEST.MF000066400000000000000000000010141203611042400303340ustar00rootroot00000000000000Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Revision Graph Tests Bundle-SymbolicName: org.tigris.subversion.subclipse.graph.test Bundle-Version: 1.0.0 Bundle-Activator: org.eclipse.core.internal.compatibility.PluginActivator Bundle-Vendor: tigris.org Bundle-Localization: plugin Require-Bundle: org.tigris.subversion.subclipse.graph, org.tigris.subversion.subclipse.core, org.eclipse.core.runtime.compatibility, org.eclipse.core.runtime;bundle-version="2.1" Bundle-RequiredExecutionEnvironment: J2SE-1.4 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/plugin.xml000066400000000000000000000000261203611042400275640ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/src/000077500000000000000000000000001203611042400263355ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/src/test/000077500000000000000000000000001203611042400273145ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/src/test/CacheTest.java000066400000000000000000000104251203611042400320240ustar00rootroot00000000000000package test; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.text.ParseException; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; import junit.framework.TestCase; import org.tigris.subversion.subclipse.graph.cache.Branch; import org.tigris.subversion.subclipse.graph.cache.Cache; import org.tigris.subversion.subclipse.graph.cache.Graph; import org.tigris.subversion.subclipse.graph.cache.Node; import org.tigris.subversion.svnclientadapter.ISVNLogMessage; public class CacheTest extends TestCase { private final int BLOCK_NONE = 0; private final int BLOCK_LOAD = 1; private final int BLOCK_TEST = 2; public void testFiles() throws IOException, ParseException{ File dir = new File("testfiles"); // testFile(new File(dir, "basic.txt")); // testFile(new File(dir, "branch-file.txt")); File[] files = dir.listFiles(); for (int i = 0; i < files.length; i++) { File f = files[i]; if(f.isFile()) { System.out.println("Testing file: "+f); testFile(f); } } } public void testFile(File f) throws IOException, ParseException { Cache cache = new Cache(new File("test"), "uuid"); BufferedReader reader = new BufferedReader(new FileReader(f)); String line = null; LogMessage lastLogMessage = null; int block = BLOCK_NONE; // Long fileId = null; Iterator it = null; Graph graph = null; List messages = new ArrayList(); int nline = 0; while((line = reader.readLine()) != null) { nline++; if(line.startsWith("#") || line.trim().length() == 0) continue; String[] tokens = line.split("\t"); if("update".equals(tokens[0])) { for (Iterator iterator = messages.iterator(); iterator .hasNext();) { ISVNLogMessage message = (ISVNLogMessage) iterator.next(); cache.update(message); } cache.finishUpdate(); // cache.dumpChangePaths(); block = BLOCK_NONE; } else if("clear".equals(tokens[0])) { cache.clearCache(); block = BLOCK_NONE; } else if("load".equals(tokens[0])) { block = BLOCK_LOAD; cache.startUpdate(); } else if("test".equals(tokens[0])) { String path = tokens[1]; long revision = Long.parseLong(tokens[2]); Node node = cache.findRootNode(path, revision, null); graph = cache.createGraph(node.getPath(), node.getRevision(), null); block = BLOCK_TEST; } else if("testnull".equals(tokens[0])) { // String path = tokens[1]; // long revision = Long.parseLong(tokens[2]); // fileId = cache.getFileId(path, revision); // assertNull(path+" at revision "+revision+" should be null. At line "+nline, fileId); } else if(block == BLOCK_LOAD) { if(tokens.length == 1) { lastLogMessage = new LogMessage(Long.parseLong(tokens[0]), "author", new Date(), "m"); messages.add(lastLogMessage); } else if(tokens.length == 2) { lastLogMessage.addChangePath( new LogMessageChangePath(tokens[0].charAt(0), tokens[1])); } else if(tokens.length == 4) { lastLogMessage.addChangePath( new LogMessageChangePath(tokens[0].charAt(0), tokens[1], tokens[2], Long.parseLong(tokens[3]))); } } else if(block == BLOCK_TEST) { if(tokens.length == 1) { if("endtest".equals(tokens[0])) { assertFalse("There are more nodes. At line "+nline, it.hasNext()); block = BLOCK_NONE; } else { Branch branch = (Branch) graph.getBranch(tokens[0]); assertNotNull("no branch for path: "+tokens[0]+" at line "+nline, branch); it = branch.getNodes().iterator(); } } else { assertNotNull("not selected path at line "+nline, it); assertTrue("node not found at line "+nline, it.hasNext()); Node node = (Node) it.next(); assertNotNull("node not found at line "+nline, node); assertEquals("wrong revision number at line "+nline, Long.parseLong(tokens[0]), node.getRevision()); assertEquals("wrong action at line "+nline, tokens[1].charAt(0), node.getAction()); } } else { fail("error at line "+nline+": "+line); } } reader.close(); // System.out.println("change paths..."); // cache.dumpChangePaths(); cache.close(); } } eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/src/test/LogMessage.java000066400000000000000000000040371203611042400322110ustar00rootroot00000000000000package test; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.tigris.subversion.svnclientadapter.ISVNLogMessage; import org.tigris.subversion.svnclientadapter.ISVNLogMessageChangePath; import org.tigris.subversion.svnclientadapter.SVNRevision.Number; public class LogMessage implements ISVNLogMessage { private String author; private Date date; private String message; private Number revision; private List changePaths = new ArrayList(); public LogMessage(long revision, String author, Date date, String message) { this.author = author; this.date = date; this.message = message; this.revision = new Number(revision); } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public Date getDate() { return date; } public void setDate(Date date) { this.date = date; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public Number getRevision() { return revision; } public void setRevision(Number revision) { this.revision = revision; } public void addChild(ISVNLogMessage msg) { throw new RuntimeException("Method not implemented"); } public boolean hasChildren() { throw new RuntimeException("Method not implemented"); } public LogMessage addChangePath(ISVNLogMessageChangePath changePath) { changePaths.add(changePath); return this; } public ISVNLogMessageChangePath[] getChangedPaths() { return (ISVNLogMessageChangePath[]) changePaths.toArray(new ISVNLogMessageChangePath[0]); } public ISVNLogMessage[] getChildMessages() { // TODO Auto-generated method stub return null; } public long getNumberOfChildren() { // TODO Auto-generated method stub return 0; } public long getTimeMicros() { // TODO Auto-generated method stub return 0; } public long getTimeMillis() { // TODO Auto-generated method stub return 0; } } LogMessageChangePath.java000066400000000000000000000023741203611042400340570ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/src/testpackage test; import org.tigris.subversion.svnclientadapter.ISVNLogMessageChangePath; import org.tigris.subversion.svnclientadapter.SVNRevision.Number; public class LogMessageChangePath implements ISVNLogMessageChangePath { private char action; private String copySrcPath; private Number copySrcRevision; private String path; public LogMessageChangePath(char action, String path, String copySrcPath, long copySrcRevision) { this.action = action; this.copySrcPath = copySrcPath; this.copySrcRevision = new Number(copySrcRevision); this.path = path; } public LogMessageChangePath(char action, String path) { this.action = action; this.path = path; } public char getAction() { return action; } public void setAction(char action) { this.action = action; } public String getCopySrcPath() { return copySrcPath; } public void setCopySrcPath(String copySrcPath) { this.copySrcPath = copySrcPath; } public Number getCopySrcRevision() { return copySrcRevision; } public void setCopySrcRevision(Number copySrcRevision) { this.copySrcRevision = copySrcRevision; } public String getPath() { return path; } public void setPath(String path) { this.path = path; } } eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/test/000077500000000000000000000000001203611042400265255ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/test/uuid/000077500000000000000000000000001203611042400274735ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/test/uuid/logMessages000066400000000000000000000007251203611042400316730ustar00rootroot00000000000000Û1àauthorm/AtrunkAbranchesAtagsÛ1àauthormA/trunk/projectÛ1àauthormA/trunk/project/foo.txtÛ1àauthormD/trunk/project/foo.txtÛ1àauthormA/trunk/project/bar.txtÛ1ðauthormA/trunk/project/foo.txtÛ1ðauthormM/trunk/project/foo.txteclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/test/uuid/revisions000066400000000000000000000000701203611042400314340ustar00rootroot00000000000000WÑS”eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/testfiles/000077500000000000000000000000001203611042400275505ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/testfiles/basic.txt000066400000000000000000000005141203611042400313720ustar00rootroot00000000000000 clear load 1 A /trunk A /branches A /tags 2 A /trunk/project 3 A /trunk/project/foo.txt 4 M /trunk/project/foo.txt 5 A /trunk/project/bar.txt 6 M /trunk/project/foo.txt M /trunk/project/bar.txt 7 D /trunk/project/foo.txt update test /trunk/project/foo.txt 3 /trunk/project/foo.txt 3 A 4 M 6 M 7 D endtesteclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/testfiles/branch-directory.txt000066400000000000000000000010501203611042400335440ustar00rootroot00000000000000# # Branch of a directory. Adding and deleting the directory # clear load 1 A /trunk A /trun A /branches A /tags 2 A /trunk/foo.txt A /trunk/bar.txt 3 D /trun 4 D /trunk 5 A /branches/1.0 /trunk 2 update # testnull /trunk/foo.txt 3 # testnull /trunk/bar.txt 3 test /trunk/foo.txt 2 /trunk/foo.txt 2 A 4 D /branches/1.0/foo.txt 5 A endtest test /trunk/bar.txt 2 /trunk/bar.txt 2 A 4 D /branches/1.0/bar.txt 5 A endtest test /branches/1.0/bar.txt 5 /trunk/bar.txt 2 A 4 D /branches/1.0/bar.txt 5 A endtest eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/testfiles/branch-file.txt000066400000000000000000000006571203611042400324730ustar00rootroot00000000000000# # Basic branch of a file. # clear load 1 A /trunk A /branches A /tags 2 A /trunk/project 3 A /trunk/project/foo.txt 4 D /trunk/project/foo.txt 5 A /trunk/project/bar.txt /trunk/project/foo.txt 3 update test /trunk/project/foo.txt 3 /trunk/project/foo.txt 3 A 4 D /trunk/project/bar.txt 5 A endtest test /trunk/project/bar.txt 5 /trunk/project/foo.txt 3 A 4 D /trunk/project/bar.txt 5 A endtest eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph.test/testfiles/unique-history.txt000066400000000000000000000011721203611042400333170ustar00rootroot00000000000000# # Basic adding, modifying and deleting a file. # Then a different file with the same path is added. # But it has a totally different history # clear load 1 A /trunk A /branches A /tags 2 A /trunk/project 3 A /trunk/project/foo.txt 4 D /trunk/project/foo.txt 5 A /trunk/project/bar.txt 6 A /trunk/project/foo.txt 7 M /trunk/project/foo.txt update # testnull /trunk/project/foo.txt 2 # testnull /trunk/project/foo.txt 4 # testnull /trunk/project/foo.txt 5 test /trunk/project/foo.txt 3 /trunk/project/foo.txt 3 A 4 D endtest test /trunk/project/foo.txt 6 /trunk/project/foo.txt 6 A 7 M endtesteclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/000077500000000000000000000000001203611042400245705ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/.classpath000066400000000000000000000004631203611042400265560ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/.project000066400000000000000000000012721203611042400262410ustar00rootroot00000000000000 org.tigris.subversion.subclipse.graph org.eclipse.jdt.core.javabuilder org.eclipse.pde.ManifestBuilder org.eclipse.pde.SchemaBuilder org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/.settings/000077500000000000000000000000001203611042400265065ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/.settings/org.eclipse.jdt.core.prefs000066400000000000000000000011721203611042400334710ustar00rootroot00000000000000#Sun Jun 15 23:37:20 CEST 2008 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.2 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.compliance=1.4 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=warning org.eclipse.jdt.core.compiler.problem.enumIdentifier=warning org.eclipse.jdt.core.compiler.source=1.3 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/META-INF/000077500000000000000000000000001203611042400257305ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/META-INF/MANIFEST.MF000066400000000000000000000015131203611042400273620ustar00rootroot00000000000000Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Subversion Revision Graph Bundle-SymbolicName: org.tigris.subversion.subclipse.graph; singleton:=true Bundle-Version: 1.1.1 Bundle-Activator: org.tigris.subversion.subclipse.graph.Activator Require-Bundle: org.eclipse.ui, org.eclipse.core.runtime, org.eclipse.core.resources, org.tigris.subversion.subclipse.core;bundle-version="1.7.0", org.eclipse.team.core, org.tigris.subversion.subclipse.ui;bundle-version="1.4.6", org.eclipse.draw2d;bundle-version="3.2.0", org.eclipse.gef;bundle-version="3.2.0", org.eclipse.team.ui, org.eclipse.jface.text, org.eclipse.ui.editors, org.eclipse.ui.ide, org.eclipse.ui.views Eclipse-LazyStart: true Export-Package: org.tigris.subversion.subclipse.graph.cache Bundle-ClassPath: . Bundle-Vendor: tigris.org Bundle-Localization: plugin eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/about.html000066400000000000000000000023131203611042400265670ustar00rootroot00000000000000 About

About This Content

7th November, 2008

Subclipse

Subclipse is an Eclipse team provider for the Subversion version control system.

This product includes software developed by CollabNet (http://www.Collab.Net/)

This product includes SVNKit. (http://svnkit.com/)
Copyright (c) 2004-2006 TMate Software. All rights reserved.

SVNKit is licensed under the terms of the TMate License. (http://svnkit.com/licensing/index.html

This offering is based on technology from the Eclipse Project http://www.eclipse.org.

Subclipse includes icons from the TortoiseSVN project. Those icons are licensed under the terms of the GPL.

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/about.ini000066400000000000000000000016671203611042400264150ustar00rootroot00000000000000# about.ini # contains information about a feature # java.io.Properties file (ISO 8859-1 with "\" escapes) # "%key" are externalized strings defined in about.properties # This file does not need to be translated. appName=Subclipse # Property "aboutText" contains blurb for "About" dialog (translated) aboutText=%blurb # Property "windowImage" contains path to window icon (16x16) # needed for primary features only # Property "featureImage" contains path to feature image (32x32) featureImage=svn.gif # Property "aboutImage" contains path to product image (500x330 or 115x164) # needed for primary features only # Property "appName" contains name of the application (translated) # needed for primary features only # Property "welcomePage" contains path to welcome page (special XML-based format) # Property "welcomePerspective" contains the id of the perspective in which the # welcome page is to be opened. # optional eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/about.properties000066400000000000000000000012141203611042400300160ustar00rootroot00000000000000# about.properties # contains externalized strings for about.ini # java.io.Properties file (ISO 8859-1 with "\" escapes) # fill-ins are supplied by about.mappings # This file should be translated. blurb=Subclipse\n\ \n\ Subclipse is an Eclipse team provider for the Subversion version\n\ control system. Visit http://subclipse.tigris.org/\n\ \n\ This product includes software developed by CollabNet (http://www.Collab.Net/)\n\ \n\ This product includes SVNKit. (http://svnkit.com/)\n\ Copyright (c) 2004-2006 TMate Software. All rights reserved.\n\ \n\ This offering is based on technology from the Eclipse Project.\n\ Visit http://www.eclipse.org eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/build.properties000066400000000000000000000005271203611042400300110ustar00rootroot00000000000000source.. = src/ output.. = bin/ bin.includes = plugin.xml,\ plugin.properties,\ META-INF/,\ .,\ about.html,\ about.ini,\ about.properties,\ epl-v10.html,\ icons/,\ svn.gif jars.compile.order = . eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/epl-v10.html000066400000000000000000000402301203611042400266410ustar00rootroot00000000000000 Eclipse Public License - Version 1.0

Eclipse Public License - v 1.0

THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.

1. DEFINITIONS

"Contribution" means:

a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
b) in the case of each subsequent Contributor:

i) changes to the Program, and

ii) additions to the Program;

where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.

"Contributor" means any person or entity that distributes the Program.

"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.

"Program" means the Contributions distributed in accordance with this Agreement.

"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.

2. GRANT OF RIGHTS

a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.

b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.

c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.

d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.

3. REQUIREMENTS

A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:

a) it complies with the terms and conditions of this Agreement; and

b) its license agreement:

i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;

ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;

iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and

iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.

When the Program is made available in source code form:

a) it must be made available under this Agreement; and

b) a copy of this Agreement must be included with each copy of the Program.

Contributors may not remove or alter any copyright notices contained within the Program.

Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.

4. COMMERCIAL DISTRIBUTION

Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.

For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.

5. NO WARRANTY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.

6. DISCLAIMER OF LIABILITY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

7. GENERAL

If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.

If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.

All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.

Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.

This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

 

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/icons/000077500000000000000000000000001203611042400257035ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/icons/chart_organisation.png000066400000000000000000000006741203611042400322760ustar00rootroot00000000000000‰PNG  IHDRóÿagAMA¯È7ŠétEXtSoftwareAdobe ImageReadyqÉe<NIDAT8˵R»JQ=ö+ŒÚZø@­C@Œ¤ÐVl$þ€¢•[ØØÚDt˘P¬ý†ìæîÝûï®ì‚`B4z`¸ÃÌåÌ™ÃD„yNj\3âÊ€ …„ œ-ßýkL"àÒ ½ì6CŒÿ¹‚4—ÈóBX$É/FLàú™#s¤i>‘ ˜×ÄÆ´fÇÔï÷§N¨ rÎÁZ ­µß]€sî}È‘ecå[Õ¢( ¾x ”B·Û f‘ÝëõèÏ<Ά§d…õò¯:7¥Š“‡C’FBHåC >~,ë[뤤†Ñp„†±æö÷¡}^Ahvs­år)ëºò—¹¹²†íÕ ?[L7žÌ¢È+äB"U ˜û\Ôõbr¡ØùÕé“Ààîý¶\¡hÔ^öý[ éW(¢‚³„§×TÖýï!Í‚vÍãc|•¯IEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/icons/export_image.gif000066400000000000000000000011451203611042400310560ustar00rootroot00000000000000GIF89aæ]RcXNa§ ¯UMd{tŠTMdPIePJeoi†tpŽ›˜¯FCiECi\Z~}›YX~>>kþþÿ68l>?kFIw9?Š26h48k,2k4:o$-l%-l› Å)lgsŽs›~Ф]k†esŽtœt›Œ¥…’«˜¤»˜£ºª´É¹ÃØÈÑä…’ª¨´É¯ºÎºÅØæïþÑÜìî÷ÿûùâýãûõ¾øÙüçTüêkýëoüêoüëoüîüï”ûò«üõÇüöÈûøâýêoüñ«üÐþýùÿÿÿ!ùF,€F‚ƒƒ=@D;D‡„Œ‡7ŠŒ•@‘4D@F F3@>‘:|ÿ ÿ‚ÿ|ÿ»@ÿ‘|`Eލg€€~ø÷Àî|ÿ8Hÿ>ÿ:ÿÿÿXÿÿÅÿÿÿÿÿ/2=‘‘||E Æ÷xlŸ€|pÄ/г‚|Û0Å‚|  P¨tgÇ lî|¬÷Ãl4ˆÅÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m‘|Jçö*€‚||¬ÀÅÕÂÿ*ÿ‚ÿ|ÿ¨g´Æ¾Ž>Ø‚K|Wÿ”öÿÆ€ÿ|ÿ˜°{ÅÆðN¨÷Èg>Æ‚|fܾú>N‚|¨°KÇOçÿÿ¬4#ÅÇľ?>:‚‚||ÔÆ÷î0l|8‘|ÿGÿ»ÿGÿ!ù,EH° Áƒ p €Â4Èaĉ $¼xà‡€”(ÁÆ’ML)eA†!(ðp ‚˜5sêT;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/plugin.properties000066400000000000000000000002671203611042400302110ustar00rootroot00000000000000editor.name=Revision Graph Editor actionLabel.showGraph=Show Revision Graph actionLabel.clearCache=Clear revision graph cache actionLabel.updateCache=Build/update revision graph cacheeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/plugin.xml000066400000000000000000000107351203611042400266160ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/000077500000000000000000000000001203611042400253575ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/000077500000000000000000000000001203611042400261465ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/000077500000000000000000000000001203611042400274475ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/000077500000000000000000000000001203611042400316465ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/000077500000000000000000000000001203611042400336375ustar00rootroot00000000000000000077500000000000000000000000001203611042400346615ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graphActivator.java000066400000000000000000000072631203611042400374700ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graphpackage org.tigris.subversion.subclipse.graph; import java.net.URL; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; /** * The activator class controls the plug-in life cycle */ public class Activator extends AbstractUIPlugin { private ImageDescriptors imageDescriptors; private URL baseURL; public static final Color FONT_COLOR = new Color(null, 1, 70, 122); public static final Color CONNECTION_COLOR = new Color(null, 172, 182, 198); public static final Color BGCOLOR = new Color(null, 250, 250, 250); public static final Color[] FG_COLORS = { new Color(null, 1, 70, 122), new Color(null, 76, 160, 104), new Color(null, 194, 128, 84), new Color(null, 76, 160, 20) }; public static final Color[] BG_COLORS = { new Color(null, 216, 228, 248), new Color(null, 198, 240, 212), new Color(null, 240, 198, 170), new Color(null, 198, 240, 170) }; // The plug-in ID public static final String PLUGIN_ID = "org.tigris.subversion.subclipse.graph"; // The shared instance private static Activator plugin; /** * The constructor */ public Activator() { } /* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) */ public void start(BundleContext context) throws Exception { super.start(context); plugin = this; baseURL = context.getBundle().getEntry("/"); //$NON-NLS-1$ } /* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) */ public void stop(BundleContext context) throws Exception { plugin = null; FONT_COLOR.dispose(); CONNECTION_COLOR.dispose(); BGCOLOR.dispose(); for (int i = 0; i < BG_COLORS.length; i++) BG_COLORS[i].dispose(); for (int i = 0; i < FG_COLORS.length; i++) FG_COLORS[i].dispose(); super.stop(context); } /** * Returns the shared instance * * @return the shared instance */ public static Activator getDefault() { return plugin; } public static void handleError(Exception exception) { handleError(null, exception); } public static void handleError(String message, Exception exception) { if (message == null) getDefault().getLog().log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, exception.getMessage(), exception)); else getDefault().getLog().log(new Status(IStatus.ERROR, PLUGIN_ID, IStatus.ERROR, message, exception)); } public static void showErrorDialog(final String title, final Exception exception, boolean uiThread) { if (uiThread) showErrorDialog(title, exception); else { Display.getDefault().syncExec(new Runnable(){ public void run() { showErrorDialog(title, exception); } }); } } public static void showErrorDialog(String title, Exception exception) { String message; if (exception.getMessage() == null) message = "" + exception; else message = exception.getMessage(); MessageDialog.openError(Display.getDefault().getActiveShell(), title, message); } /** * Returns the image descriptor for the given image ID. * Returns null if there is no such image. */ public ImageDescriptor getImageDescriptor(String id) { if (imageDescriptors == null) { imageDescriptors = new ImageDescriptors(); imageDescriptors.initializeImages(baseURL); } return imageDescriptors.getImageDescriptor(id); } } IRevisionGraphConstants.java000066400000000000000000000007721203611042400423200ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graphpackage org.tigris.subversion.subclipse.graph; public interface IRevisionGraphConstants { public final String ICON_PATH = "icons/"; //$NON-NLS-1$ public final String IMG_EXPORT_IMAGE = "export_image.gif"; //$NON-NLS-1$ public final String IMG_FILTER_CONNECTIONS = "filter_connections.gif"; //$NON-NLS-1$ public final String IMG_REVISION_GRAPH_CHRONOLOGICAL = "revision_graph_chronological.gif"; //$NON-NLS-1$ public final String IMG_SHOW_DELETED = "show_deleted.gif"; //$NON-NLS-1$ } ImageDescriptors.java000066400000000000000000000035461203611042400410000ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graphpackage org.tigris.subversion.subclipse.graph; import java.net.MalformedURLException; import java.net.URL; import java.util.Hashtable; import org.eclipse.jface.resource.ImageDescriptor; public class ImageDescriptors { private Hashtable imageDescriptors = new Hashtable(20); /** * Creates an image and places it in the image registry. */ protected void createImageDescriptor(String id, URL baseURL) { URL url = null; try { url = new URL(baseURL, IRevisionGraphConstants.ICON_PATH + id); } catch (MalformedURLException e) { } ImageDescriptor desc = ImageDescriptor.createFromURL(url); imageDescriptors.put(id, desc); } /** * Creates an image and places it in the image registry. */ protected void createImageDescriptor(String id, String name, URL baseURL) { URL url = null; try { url = new URL(baseURL, IRevisionGraphConstants.ICON_PATH + name); } catch (MalformedURLException e) { } ImageDescriptor desc = ImageDescriptor.createFromURL(url); imageDescriptors.put(id, desc); } /** * Returns the image descriptor for the given image ID. * Returns null if there is no such image. */ public ImageDescriptor getImageDescriptor(String id) { return (ImageDescriptor)imageDescriptors.get(id); } /** * Initializes the table of images used in this plugin. */ public void initializeImages(URL baseURL) { createImageDescriptor(IRevisionGraphConstants.IMG_EXPORT_IMAGE, baseURL); createImageDescriptor(IRevisionGraphConstants.IMG_FILTER_CONNECTIONS, baseURL); createImageDescriptor(IRevisionGraphConstants.IMG_REVISION_GRAPH_CHRONOLOGICAL, baseURL); createImageDescriptor(IRevisionGraphConstants.IMG_SHOW_DELETED, baseURL); } } 000077500000000000000000000000001203611042400357245ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/cacheBranch.java000066400000000000000000000037221203611042400377700ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/cachepackage org.tigris.subversion.subclipse.graph.cache; import java.io.Serializable; import java.util.ArrayList; import java.util.Collections; import java.util.Comparator; import java.util.List; public class Branch extends Path implements Serializable { private static final long serialVersionUID = -1236475833029223413L; private static final Comparator COMPARATOR = new Comparator() { public int compare(Object a, Object b) { long ra; long rb; if(a instanceof Long) { ra = ((Long) a).longValue(); } else if(a instanceof Node) { ra = ((Node) a).getRevision(); } else { throw new RuntimeException(); } if(b instanceof Long) { rb = ((Long) b).longValue(); } else if(b instanceof Node) { rb = ((Node) b).getRevision(); } else { throw new RuntimeException(); } if(ra < rb) { return -1; } else if(ra > rb) { return 1; } return 0; } }; private List nodes = new ArrayList(); private Node lastNode; private transient Object view; public Object getView() { return view; } public void setView(Object view) { this.view = view; } public Branch(String path) { super(path); } public void addNode(Node n) { nodes.add(n); lastNode = n; } public Node getLastNode() { return lastNode; } public List getNodes() { return nodes; } public void end() { lastNode = null; } public Node getSource(long revision) { int index = Collections.binarySearch(nodes, new Long(revision), COMPARATOR); if(index < 0) { index = -index-2; if(index < 0) { return null; } } Node previous = (Node) nodes.get(index); if(previous.getAction() == 'D' && previous.getRevision() < revision) return null; return previous; } public boolean isEnded() { return lastNode == null && !nodes.isEmpty(); // nodes is empty for the root node, but that doesn't mean that // the branch is ended } } Cache.java000066400000000000000000000636211203611042400376020ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/cachepackage org.tigris.subversion.subclipse.graph.cache; import java.io.File; import java.io.IOException; import java.io.RandomAccessFile; import java.util.ArrayList; import java.util.Date; import java.util.Iterator; import java.util.List; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.util.Util; import org.tigris.subversion.subclipse.graph.Activator; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.ISVNLogMessage; import org.tigris.subversion.svnclientadapter.ISVNLogMessageCallback; import org.tigris.subversion.svnclientadapter.ISVNLogMessageChangePath; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class Cache { private static final int MAX_LOG_MESSAGES = 1024; private File revisionsFile; private File logMessagesFile; private File root; private List children = new ArrayList(); private int level; private long refreshRevision; // used in updates private RandomAccessFile revisionsRaf = null; private RandomAccessFile logMessagesRaf = null; // used in refresh private File revisionsTempFile; private File logMessagesTempFile; private RandomAccessFile revisionsTempRaf = null; private RandomAccessFile logMessagesTempRaf = null; private List writtenChildren = new ArrayList(); public Cache(File f, String uuid) { createDirectory(f); f = new File(f, uuid); createDirectory(f); this.root = f; revisionsFile = new File(root, "revisions"); logMessagesFile = new File(root, "logMessages"); } public Cache(File f, String uuid, long refreshRevision) { this(f, uuid); this.refreshRevision = refreshRevision; } public void refresh(List refreshedNodes, ISVNInfo info, IProgressMonitor monitor, int unitWorked) { ISVNLogMessageCallback callback = new ISVNLogMessageCallback() { public void singleMessage(ISVNLogMessage message) { update(message, true); } }; revisionsTempFile = new File(root, "revisionsTemp"); logMessagesTempFile = new File(root, "logMessagesTemp"); revisionsTempFile.delete(); logMessagesTempFile.delete(); try { revisionsTempFile.createNewFile(); logMessagesTempFile.createNewFile(); } catch (IOException e) { Activator.handleError(e); } List revisions = new ArrayList(); Iterator iter = refreshedNodes.iterator(); while (iter.hasNext()) { Node node = (Node)iter.next(); revisions.add(Long.toString(node.getRevision())); } startTempUpdate(); RandomAccessFile file = null; ISVNClientAdapter client = null; try { client = SVNProviderPlugin.getPlugin().getSVNClient(); file = new RandomAccessFile(logMessagesFile, "r"); int revInt = new Long(getLatestRevision()).intValue(); while(file.getFilePointer() < file.length()) { ISVNLogMessage lm = readNext(file, true); level = 0; int index = revisions.indexOf(lm.getRevision().toString()); if (index == -1) { update(lm, true); if (lm.hasChildren() && lm.getChildMessages() != null) { updateChildren(lm, true); } monitor.worked(unitWorked/revInt); } else { Node updateNode = (Node)refreshedNodes.get(index); SVNRevision updateRevision = new SVNRevision.Number(updateNode.getRevision()); client.getLogMessages(new SVNUrl(info.getRepository() + updateNode.getPath()), updateRevision, updateRevision, updateRevision, false, true, 0, true, ISVNClientAdapter.DEFAULT_LOG_PROPERTIES, callback); monitor.worked(unitWorked); // updateRevision = (ISVNLogMessage)refreshedMessages.get(index); // monitor.worked(unitWorked); } if (monitor.isCanceled()) { break; } } } catch (Exception e) { } finally { closeFile(file); SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } finishTempUpdate(); if (monitor.isCanceled()) { revisionsTempFile.delete(); logMessagesTempFile.delete(); return; } revisionsFile.delete(); logMessagesFile.delete(); revisionsTempFile.renameTo(revisionsFile); logMessagesTempFile.renameTo(logMessagesFile); } public void refresh(List refreshedMessages, IProgressMonitor monitor, int unitWorked) { revisionsTempFile = new File(root, "revisionsTemp"); logMessagesTempFile = new File(root, "logMessagesTemp"); revisionsTempFile.delete(); logMessagesTempFile.delete(); try { revisionsTempFile.createNewFile(); logMessagesTempFile.createNewFile(); } catch (IOException e) { Activator.handleError(e); } List revisions = new ArrayList(); Iterator iter = refreshedMessages.iterator(); while (iter.hasNext()) { ISVNLogMessage message = (ISVNLogMessage)iter.next(); revisions.add(message.getRevision().toString()); } startTempUpdate(); RandomAccessFile file = null; try { file = new RandomAccessFile(logMessagesFile, "r"); int revInt = new Long(getLatestRevision()).intValue(); while(file.getFilePointer() < file.length()) { ISVNLogMessage lm = readNext(file, true); level = 0; ISVNLogMessage updateRevision = null; int index = revisions.indexOf(lm.getRevision().toString()); if (index == -1) { updateRevision = lm; monitor.worked(unitWorked/revInt); } else { updateRevision = (ISVNLogMessage)refreshedMessages.get(index); monitor.worked(unitWorked); // System.out.println("Update: " + updateRevision.getRevision() + " (level =" + level + ")"); } update(updateRevision, true); if (updateRevision.hasChildren() && updateRevision.getChildMessages() != null) { updateChildren(updateRevision, true); } if (monitor.isCanceled()) { break; } } } catch (Exception e) { } finally { closeFile(file); } finishTempUpdate(); if (monitor.isCanceled()) { revisionsTempFile.delete(); logMessagesTempFile.delete(); return; } revisionsFile.delete(); logMessagesFile.delete(); revisionsTempFile.renameTo(revisionsFile); logMessagesTempFile.renameTo(logMessagesFile); } private void updateChildren(ISVNLogMessage logMessage, boolean writingTempFile) { ISVNLogMessage[] childMessages = logMessage.getChildMessages(); for (int j = 0; j < childMessages.length; j++) { update(childMessages[j], writingTempFile); if (childMessages[j].hasChildren() && childMessages[j].getChildMessages() != null) updateChildren(childMessages[j], writingTempFile); } update(null, writingTempFile); } private void createDirectory(File f) { if(!f.exists()) { if(!f.mkdir()) { throw new CacheException("Couldn't create directory: "+f.getAbsolutePath()); } } else if(!f.isDirectory()) { throw new CacheException("Should be a directory: "+f.getAbsolutePath()); } } public void close() { closeFile(revisionsRaf); closeFile(logMessagesRaf); } public void startUpdate() { level = 0; try { revisionsRaf = new RandomAccessFile(revisionsFile, "rw"); logMessagesRaf = new RandomAccessFile(logMessagesFile, "rw"); if (refreshRevision == 0) { revisionsRaf.seek(revisionsRaf.length()); logMessagesRaf.seek(logMessagesRaf.length()); } } catch(IOException e) { throw new CacheException("Error while opening file", e); } } public void startTempUpdate() { level = 0; try { revisionsTempRaf = new RandomAccessFile(revisionsTempFile, "rw"); logMessagesTempRaf = new RandomAccessFile(logMessagesTempFile, "rw"); } catch(IOException e) { throw new CacheException("Error while opening file", e); } } private String notNull(String s) { if(s == null) return ""; return s; } private void writeLogMessage(ISVNLogMessage logMessage, int level, boolean writingTempFile) throws IOException { RandomAccessFile revRaf = null; RandomAccessFile logRaf = null; if (writingTempFile) { revRaf = revisionsTempRaf; logRaf = logMessagesTempRaf; } else { revRaf = revisionsRaf; logRaf = logMessagesRaf; } long revision = logMessage.getRevision().getNumber(); long fp = logRaf.getFilePointer(); // if (writingTempFile) System.out.println("writing rev "+revision+" at "+fp+" "+revisionsTempRaf.getFilePointer()); // else System.out.println("writing rev "+revision+" at "+fp+" "+revisionsRaf.getFilePointer()); revRaf.writeLong(fp); logRaf.writeLong(revision); logRaf.writeLong(logMessage.getDate().getTime()); logRaf.writeUTF(notNull(logMessage.getAuthor())); String message = notNull(logMessage.getMessage()); if (message.length() > 64000) { message = message.substring(0, 64397) + "..."; } logRaf.writeUTF(message); ISVNLogMessageChangePath[] changePaths = logMessage.getChangedPaths(); logRaf.writeInt(changePaths.length); // common starting path in all changed paths int cc = 0; if(changePaths.length > 1) { String a = changePaths[0].getPath(); String b = null; for (int i = 1; i < changePaths.length; i++) { b = changePaths[i].getPath(); cc = commonChars(a, b, cc); a = b; } logRaf.writeUTF(a.substring(0, cc)); } for (int i = 0; i < changePaths.length; i++) { ISVNLogMessageChangePath changePath = changePaths[i]; logRaf.writeChar(changePath.getAction()); logRaf.writeUTF(changePath.getPath().substring(cc)); long copySrcRevision = 0; if(changePath.getCopySrcRevision() != null && changePath.getCopySrcPath() != null) { copySrcRevision = changePath.getCopySrcRevision().getNumber(); logRaf.writeLong(copySrcRevision); logRaf.writeUTF(changePath.getCopySrcPath()); } else { logRaf.writeLong(copySrcRevision); } } if(level == 0 && (!logMessage.hasChildren())) { logRaf.writeInt(0); // System.out.println("A. Children: 0"); } } public void finishUpdate() { closeFile(revisionsRaf); closeFile(logMessagesRaf); revisionsRaf = null; logMessagesRaf = null; } public void finishTempUpdate() { closeFile(revisionsTempRaf); closeFile(logMessagesTempRaf); revisionsTempRaf = null; logMessagesTempRaf = null; } public void update(ISVNLogMessage logMessage) { update(logMessage, false); } public void update(ISVNLogMessage logMessage, boolean writingTempFile) { try { if(logMessage == null) { if(level == 1) { writeChildren(level, writingTempFile); children.clear(); } level--; } else { if(level == 1) { children.add(logMessage); // dump(logMessage, level); } else if(level == 0) { writeLogMessage(logMessage, level, writingTempFile); // dump(logMessage, level); } if(logMessage.hasChildren()) { level++; } } } catch (IOException e) { throw new CacheException("Error while saving log message", e); } // if(logMessage != null) // dump(logMessage, "\t"); } private void writeChildren(int level, boolean writingTempFile) throws IOException { List nonWrittenChildren = getNonWrittenChildren(); // logMessagesRaf.writeInt(children.size()); // System.out.println("B. Children: " + nonWrittenChildren.size()); if (writingTempFile) logMessagesTempRaf.writeInt(nonWrittenChildren.size()); else logMessagesRaf.writeInt(nonWrittenChildren.size()); // for (Iterator it = children.iterator(); it.hasNext();) { for (Iterator it = nonWrittenChildren.iterator(); it.hasNext();) { ISVNLogMessage logMessage = (ISVNLogMessage) it.next(); writeLogMessage(logMessage, level, writingTempFile); } } private List getNonWrittenChildren() { List nonWrittenChildren = new ArrayList(); for (Iterator it = children.iterator(); it.hasNext();) { ISVNLogMessage logMessage = (ISVNLogMessage) it.next(); if (!writtenChildren.contains(logMessage.getRevision().toString())) { nonWrittenChildren.add(logMessage); writtenChildren.add(logMessage.getRevision().toString()); } } return nonWrittenChildren; } /* private void dump(ISVNLogMessage logMessage, int level) { char[] c = new char[level]; Arrays.fill(c, '\t'); String p = new String(c); System.out.println(p+"rev : "+logMessage.getRevision().getNumber()); System.out.println(p+"author: "+logMessage.getAuthor()); ISVNLogMessageChangePath[] cps = logMessage.getChangedPaths(); for (int i = 0; i < cps.length; i++) { ISVNLogMessageChangePath cp = cps[i]; System.out.println(p+cp.getAction()+" "+cp.getPath()); if(cp.getCopySrcPath() != null) System.out.println(p+"copy: "+cp.getCopySrcPath()); } System.out.println(p+"has children: "+logMessage.hasChildren()); System.out.println(); } */ public long getLatestRevision() { return revisionsFile.length() / 8; } public void readNext(RandomAccessFile file, ISVNLogMessage[] buffer, int number) { do { number--; buffer[number] = readNext(file, true); } while(number > 0); } /** * This method finds the revision number and path where the file was first created. * * @param path The path of the selected file * @param revision The revision number of the selected file * @param listener A listener to implement a progress bar for example * @return a Node object just containing the path and revision properties setted */ public Node findRootNode(String path, long revision, WorkListener listener) { long r = revision; // r means "current revision" long pr = r; // pr means "previous revision" RandomAccessFile logMessages = null; try { /* * We need to read the logMessagesFiles backwards, from the selected revision * to the root revision. * It is done by jumping backwards and reading a * maximmun of MAX_LOG_MESSAGES number of messages inside an array * that acts as a buffer. */ logMessages = new RandomAccessFile(logMessagesFile, "r"); ISVNLogMessage[] buffer = new ISVNLogMessage[MAX_LOG_MESSAGES]; do { // We are going to jump to a previous revision. // Exactly MAX_LOG_MESSAGES revisions before r -= (MAX_LOG_MESSAGES)-1; if(r < 1) { r = 1; // Well, we cannot jump to a revision lower than 1 } // It moves the file pointer to the revision. Here is where it jumps backwards logMessages.seek(getSeek(r)); // It calculates how many log messages should be read int size = (int) (pr - r + 1); // this won't be higher than MAX_LOG_MESSAGES if(size == 0) break; // It reads the log messages to the buffer readNext(logMessages, buffer, size); // It iterates over all log messages for (int k = 0; k < size; k++) { ISVNLogMessage lm = buffer[k]; // System.out.println("revision: "+lm.getRevision().getNumber()); // It iterates over all changed paths ISVNLogMessageChangePath[] changedPaths = lm.getChangedPaths(); for(int n=0; n 1) { cp = file.readUTF(); } LogMessageChangePath[] changedPaths = new LogMessageChangePath[length]; logMessage.setChangedPaths(changedPaths); for(int i=0; i 0) { copySrcPath = file.readUTF(); } changedPaths[i] = new LogMessageChangePath(action, path, copySrcPath, copySrcRevision); } // System.out.println("changedPaths set for " + logMessage.getRevision().getNumber() + " - nested = " + nested); if(nested) { int children = file.readInt(); // System.out.println(logMessage.getRevision().getNumber() + " children: " + children); if(children > 0) { LogMessage[] childMessages = new LogMessage[children]; for (int i = 0; i < children; i++) { childMessages[i] = readNext(file, false); } logMessage.setChildMessages(childMessages); } } // System.out.println("return logMessage: " + logMessage.getRevision().getNumber()); return logMessage; } catch (IOException e) { throw new CacheException("Error while reading log messages from file", e); } } public long getSeek(long revision) { RandomAccessFile file = null; try { file = new RandomAccessFile(revisionsFile, "r"); file.seek((revision-1)*8); long seek = file.readLong(); // System.out.println("seek: " + seek); return seek; } catch (IOException e) { throw new CacheException("Error while reading revisions file", e); } finally { closeFile(file); } } public Graph createGraph(String rootPath, long revision, WorkListener listener) { // System.out.println("create graph"); Graph graph = new Graph(rootPath); // root path is the first opened branch graph.addBranch(rootPath); long seek = getSeek(revision); RandomAccessFile file = null; try { file = new RandomAccessFile(logMessagesFile, "r"); file.seek(seek); while(file.getFilePointer() < file.length()) { ISVNLogMessage lm = readNext(file, true); ISVNLogMessageChangePath[] changedPaths = lm.getChangedPaths(); String[] pa = graph.getPathsAsArray(); Node node = null; for(int n=0; n 0) ml = max; else ml = a.length(); if(b.length() < ml) { ml = b.length(); } while(i revision) return -1; else return 0; } return 0; } } Path.java000066400000000000000000000005321203611042400374630ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/cachepackage org.tigris.subversion.subclipse.graph.cache; public class Path { private String path; private transient int index; public Path(String path) { super(); this.path = path; } public String getPath() { return path; } public int getIndex() { return index; } public void setIndex(int index) { this.index = index; } } WorkListener.java000066400000000000000000000001711203611042400412160ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/cachepackage org.tigris.subversion.subclipse.graph.cache; public interface WorkListener { public void worked(); } 000077500000000000000000000000001203611042400363035ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/dialogsSaveImageDialog.java000066400000000000000000000172271203611042400421400ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/dialogspackage org.tigris.subversion.subclipse.graph.dialogs; import java.io.File; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.draw2d.Graphics; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.SWTGraphics; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.GraphicalViewer; import org.eclipse.gef.LayerConstants; import org.eclipse.gef.editparts.LayerManager; import org.eclipse.gef.editparts.ScalableRootEditPart; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.TrayDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.ImageLoader; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.tigris.subversion.subclipse.graph.Activator; import org.tigris.subversion.subclipse.graph.editors.RevisionGraphEditor; public class SaveImageDialog extends TrayDialog { private RevisionGraphEditor editor; private Combo fileTypeCombo; private Text fileText; private Button browseButton; private int lastOutput; private IDialogSettings settings = Activator.getDefault().getDialogSettings(); private Button okButton; private static final int BMP = 0; private static final int JPEG = 1; private static final int PNG = 2; private final static String LAST_OUTPUT = "SaveImageDialog.lastOutput"; public SaveImageDialog(Shell parentShell, RevisionGraphEditor editor) { super(parentShell); this.editor = editor; int shellStyle = getShellStyle(); setShellStyle(shellStyle | SWT.RESIZE); try { lastOutput = settings.getInt(LAST_OUTPUT); } catch (Exception e) {} } protected Control createDialogArea(Composite parent) { getShell().setText("Save Image to File"); Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 3; composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); Label typeLabel = new Label(composite, SWT.NONE); typeLabel.setText("Save as file type:"); fileTypeCombo = new Combo(composite, SWT.READ_ONLY); GridData gd = new GridData(); gd.horizontalSpan = 2; fileTypeCombo.setLayoutData(gd); fileTypeCombo.add("BMP"); fileTypeCombo.add("JPEG"); fileTypeCombo.add("PNG"); Label fileLabel = new Label(composite, SWT.NONE); fileLabel.setText("Save to file:"); fileText = new Text(composite, SWT.BORDER); gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL); gd.widthHint = 300; fileText.setLayoutData(gd); browseButton = new Button(composite, SWT.PUSH); browseButton.setText("Browse..."); browseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { selectFile(); } }); switch (lastOutput) { case BMP: fileTypeCombo.setText("BMP"); break; case JPEG: fileTypeCombo.setText("JPEG"); break; case PNG: fileTypeCombo.setText("PNG"); break; default: fileTypeCombo.setText("BMP"); break; } ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { okButton.setEnabled(canFinish()); } }; fileText.addModifyListener(modifyListener); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; fileText.addFocusListener(focusListener); return composite; } protected Button createButton(Composite parent, int id, String label, boolean defaultButton) { Button button = super.createButton(parent, id, label, defaultButton); if (id == IDialogConstants.OK_ID) { okButton = button; okButton.setEnabled(false); } return button; } protected void okPressed() { settings.put(LAST_OUTPUT, fileTypeCombo.getSelectionIndex()); BusyIndicator.showWhile(Display.getDefault(), new Runnable() { public void run() { GraphicalViewer viewer = editor.getViewer(); ScalableRootEditPart rootEditPart = (ScalableRootEditPart)viewer.getEditPartRegistry().get(LayerManager.ID); IFigure rootFigure = ((LayerManager)rootEditPart).getLayer(LayerConstants.PRINTABLE_LAYERS); Rectangle rootFigureBounds = rootFigure.getBounds(); Control figureCanvas = viewer.getControl(); GC figureCanvasGC = new GC(figureCanvas); Image img = new Image(null, rootFigureBounds.width, rootFigureBounds.height); GC imageGC = new GC(img); imageGC.setBackground(figureCanvasGC.getBackground()); imageGC.setForeground(figureCanvasGC.getForeground()); imageGC.setFont(figureCanvasGC.getFont()); imageGC.setLineStyle(figureCanvasGC.getLineStyle()); imageGC.setLineWidth(figureCanvasGC.getLineWidth()); // imageGC.setXORMode(figureCanvasGC.getXORMode()); Graphics imgGraphics = new SWTGraphics(imageGC); rootFigure.paint(imgGraphics); ImageData[] imgData = new ImageData[1]; imgData[0] = img.getImageData(); ImageLoader imgLoader = new ImageLoader(); imgLoader.data = imgData; String extension; if (fileTypeCombo.getText().equals("JPEG")) extension = "jpg"; else extension = fileTypeCombo.getText().toLowerCase(); String fileName = null; if (!fileText.getText().trim().endsWith("." + extension)) fileName = fileText.getText().trim() + "." + extension; else fileName = fileText.getText().trim(); int imageType = SWT.IMAGE_BMP; switch (fileTypeCombo.getSelectionIndex()) { case BMP: imageType = SWT.IMAGE_BMP; break; case JPEG: imageType = SWT.IMAGE_JPEG; break; case PNG: imageType = SWT.IMAGE_PNG; break; default: break; } imgLoader.save(fileName, imageType); figureCanvasGC.dispose(); imageGC.dispose(); img.dispose(); } }); super.okPressed(); } private boolean canFinish() { if (fileText.getText().trim().length() == 0) return false; File file = new File(fileText.getText().trim()); return isValidFile(file); } private boolean isValidFile(File file) { if (!file.isAbsolute()) return false; if (file.isDirectory()) return false; File parent = file.getParentFile(); if (parent==null) return false; if (!parent.exists()) return false; if (!parent.isDirectory()) return false; return true; } private void selectFile() { String extension; if (fileTypeCombo.getText().equals("JPEG")) extension = "jpg"; else extension = fileTypeCombo.getText().toLowerCase(); FileDialog d = new FileDialog(getShell(), SWT.PRIMARY_MODAL | SWT.SAVE); d.setText("Save Revision Graph As"); d.setFileName(editor.getEditorInput().getName() + "." + extension); String file = d.open(); if(file!=null) { IPath path = new Path(file); fileText.setText(path.toOSString()); } } } 000077500000000000000000000000001203611042400363325ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/editorsBranchEditPart.java000066400000000000000000000043121203611042400420270ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/editorspackage org.tigris.subversion.subclipse.graph.editors; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.Figure; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.XYLayout; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.editparts.AbstractGraphicalEditPart; import org.eclipse.gef.editpolicies.SelectionEditPolicy; import org.tigris.subversion.subclipse.graph.cache.Branch; import org.tigris.subversion.subclipse.graph.cache.Node; import org.tigris.subversion.subclipse.graph.cache.Path; public class BranchEditPart extends AbstractGraphicalEditPart { public final static int BRANCH_WIDTH = 220; public final static int BRANCH_HEIGHT = 30; public final static int BRANCH_OFFSET = BRANCH_WIDTH+20; public BranchEditPart() { super(); } protected IFigure createFigure() { Figure f = new Figure(); f.setBackgroundColor(ColorConstants.white); f.setOpaque(true); XYLayout layout = new XYLayout(); f.setLayoutManager(layout); Branch branch = (Branch)getModel(); Rectangle rect = new Rectangle(10+branch.getIndex()*BRANCH_OFFSET, 10, BRANCH_WIDTH, -1); ((AbstractGraphicalEditPart)getParent()).getFigure().getLayoutManager().setConstraint(f, rect); return f; } protected List getModelChildren() { Branch branch = (Branch)getModel(); List children = new ArrayList(); Path path = new Path(branch.getPath()); path.setIndex(branch.getIndex()); children.add(path); List nodes = branch.getNodes(); Iterator iter = nodes.iterator(); int i = 0; while (iter.hasNext()) { Node node = (Node)iter.next(); node.setBranch(branch); node.setBranchIndex(i++); children.add(node); } return children; } protected void createEditPolicies() { installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new SelectionEditPolicy() { protected void hideSelection() { // System.out.println("hide branch"); } protected void showSelection() { // System.out.println("show branch"); } }); } // public boolean isSelectable() { // System.out.println("BranchEditPart.isSelectable"); // return true; // } } BranchFigure.java000066400000000000000000000014701203611042400415360ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/editorspackage org.tigris.subversion.subclipse.graph.editors; import org.eclipse.draw2d.BorderLayout; import org.eclipse.draw2d.Label; import org.eclipse.draw2d.RoundedRectangle; import org.eclipse.swt.graphics.Color; import org.tigris.subversion.subclipse.graph.Activator; public class BranchFigure extends RoundedRectangle { private String path; public BranchFigure(String path, Color bgcolor, Color fgcolor) { this.path = path; setLayoutManager(new BorderLayout()); setBackgroundColor(bgcolor); setForegroundColor(fgcolor); setOpaque(true); Label label = new Label(path); label.setForegroundColor(Activator.FONT_COLOR); add(label, BorderLayout.CENTER); Label tooltip = new Label(path); setToolTip(tooltip); } public String getPath() { return path; } } GraphActionBarContributor.java000066400000000000000000000227371203611042400442670ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/editorspackage org.tigris.subversion.subclipse.graph.editors; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IResource; import org.eclipse.gef.ui.actions.ActionBarContributor; import org.eclipse.gef.ui.actions.ZoomComboContributionItem; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ActionContributionItem; import org.eclipse.jface.action.IMenuCreator; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.ui.IEditorPart; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.graph.Activator; import org.tigris.subversion.subclipse.graph.IRevisionGraphConstants; import org.tigris.subversion.subclipse.graph.cache.Graph; import org.tigris.subversion.subclipse.graph.cache.Node; import org.tigris.subversion.subclipse.graph.popup.actions.ImageAction; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.SVNRevision; public class GraphActionBarContributor extends ActionBarContributor { private RevisionGraphEditor editor; private IPreferenceStore store = Activator.getDefault().getPreferenceStore(); private static ToggleShowDeletedAction[] toggleShowDeletedActions; private static RefreshAction[] refreshActions; public void setActiveEditor(IEditorPart editor) { super.setActiveEditor(editor); this.editor = (RevisionGraphEditor)editor; } protected void buildActions() { } protected void declareGlobalActionKeys() { } public void contributeToToolBar(IToolBarManager toolBarManager) { super.contributeToToolBar(toolBarManager); toolBarManager.add(new Separator()); toolBarManager.add(new ZoomComboContributionItem(getPage())); toolBarManager.add(new Separator()); refreshActions = new RefreshAction[] { new RefreshAction("All new revisions", RefreshAction.TYPE_NEW), new RefreshAction("Graph revisions", RefreshAction.TYPE_NODES), new RefreshAction("New revisions and graph revisions", RefreshAction.TYPE_BOTH) }; RefreshMenuAction refreshAction = new RefreshMenuAction(); toolBarManager.add(refreshAction); toggleShowDeletedActions = new ToggleShowDeletedAction[] { new ToggleShowDeletedAction("If modified", RevisionGraphEditor.SHOW_DELETED_MODIFIED), new ToggleShowDeletedAction("Yes", RevisionGraphEditor.SHOW_DELETED_YES), new ToggleShowDeletedAction("No", RevisionGraphEditor.SHOW_DELETED_NO) }; ShowDeletedAction showDeletedAction = new ShowDeletedAction(); toolBarManager.add(showDeletedAction); Action filterConnectionsAction = new Action() { public void run() { store.setValue(RevisionGraphEditor.FILTER_CONNECTIONS, isChecked()); GraphEditPart graphEditPart = (GraphEditPart)editor.getViewer().getContents(); graphEditPart.setConnectionVisibility(); } }; filterConnectionsAction.setImageDescriptor(Activator.getDefault().getImageDescriptor(IRevisionGraphConstants.IMG_FILTER_CONNECTIONS)); filterConnectionsAction.setToolTipText("Show connections only for selected revision"); filterConnectionsAction.setChecked(store.getBoolean(RevisionGraphEditor.FILTER_CONNECTIONS)); toolBarManager.add(filterConnectionsAction); Action chronologicalAction = new Action() { public void run() { store.setValue(RevisionGraphEditor.CHRONOLOGICAL, isChecked()); GraphEditPart graphEditPart = (GraphEditPart)editor.getViewer().getContents(); Graph graph = (Graph)graphEditPart.getModel(); editor.getViewer().setContents("Redrawing graph..."); editor.getViewer().setContents(graph); } }; chronologicalAction.setImageDescriptor(Activator.getDefault().getImageDescriptor(IRevisionGraphConstants.IMG_REVISION_GRAPH_CHRONOLOGICAL)); chronologicalAction.setToolTipText("Chronological layout"); chronologicalAction.setChecked(store.getBoolean(RevisionGraphEditor.CHRONOLOGICAL)); toolBarManager.add(chronologicalAction); Action imageAction = new Action() { public void run() { Action action = new ImageAction(editor); action.run(); } }; imageAction.setImageDescriptor(Activator.getDefault().getImageDescriptor(IRevisionGraphConstants.IMG_EXPORT_IMAGE)); toolBarManager.add(imageAction); } /* public void contributeToMenu(IMenuManager menuManager) { super.contributeToMenu(menuManager); MenuManager viewMenu = new MenuManager("View"); viewMenu.add(getAction(GEFActionConstants.ZOOM_IN)); viewMenu.add(getAction(GEFActionConstants.ZOOM_OUT)); } */ public static class RefreshMenuAction extends Action implements IMenuCreator { private Menu menu; public RefreshMenuAction() { setText("Refresh"); setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_REFRESH)); setMenuCreator(this); } public void dispose() { if (menu != null) { menu.dispose(); menu= null; } } public Menu getMenu(Control parent) { if (menu != null) menu.dispose(); menu = new Menu(parent); addActionToMenu(menu, refreshActions[0]); addActionToMenu(menu, refreshActions[1]); addActionToMenu(menu, refreshActions[2]); return menu; } public Menu getMenu(Menu parent) { return null; } private void addActionToMenu(Menu parent, Action action) { ActionContributionItem item= new ActionContributionItem(action); item.fill(parent, -1); } } public static class ShowDeletedAction extends Action implements IMenuCreator { private Menu menu; public ShowDeletedAction() { setText("Show deleted branches"); setImageDescriptor(Activator.getDefault().getImageDescriptor(IRevisionGraphConstants.IMG_SHOW_DELETED)); setMenuCreator(this); } public void dispose() { if (menu != null) { menu.dispose(); menu= null; } } public Menu getMenu(Control parent) { if (menu != null) menu.dispose(); menu = new Menu(parent); addActionToMenu(menu, toggleShowDeletedActions[0]); addActionToMenu(menu, toggleShowDeletedActions[1]); addActionToMenu(menu, toggleShowDeletedActions[2]); return menu; } public Menu getMenu(Menu parent) { return null; } private void addActionToMenu(Menu parent, Action action) { ActionContributionItem item= new ActionContributionItem(action); item.fill(parent, -1); } } public class ToggleShowDeletedAction extends Action { private final int show; public ToggleShowDeletedAction(String text, int show) { super(text, AS_RADIO_BUTTON); this.show = show; setChecked(show == store.getInt(RevisionGraphEditor.SHOW_DELETED_PREFERENCE)); } public int getShow() { return show; } public void run() { if (isChecked()) { Activator.getDefault().getPreferenceStore().setValue(RevisionGraphEditor.SHOW_DELETED_PREFERENCE, show); GraphEditPart graphEditPart = (GraphEditPart)editor.getViewer().getContents(); Graph graph = (Graph)graphEditPart.getModel(); editor.getViewer().setContents("Redrawing graph..."); editor.getViewer().setContents(graph); } } } public class RefreshAction extends Action { private final int type; public final static int TYPE_NEW = 0; public final static int TYPE_NODES = 1; public final static int TYPE_BOTH = 2; public RefreshAction(String text, int type) { super(text); this.type = type; } public void run() { SVNRevision[] refreshRevisions = null; Node[] nodes = null; if (type == TYPE_NODES || type == TYPE_BOTH) { List refreshList = new ArrayList(); GraphEditPart graphEditPart = (GraphEditPart)editor.getViewer().getContents(); Graph graph = (Graph)graphEditPart.getModel(); nodes = graph.getNodes(); for (int i = 0; i < nodes.length; i++) { SVNRevision.Number revision = new SVNRevision.Number(nodes[i].getRevision()); refreshList.add(revision); } refreshRevisions = new SVNRevision[refreshList.size()]; refreshList.toArray(refreshRevisions); } IResource resource = ((RevisionGraphEditorInput)editor.getEditorInput()).getResource(); ISVNRemoteResource remoteResource = ((RevisionGraphEditorInput)editor.getEditorInput()).getRemoteResource(); GraphBackgroundTask task; if (resource == null) task = new GraphBackgroundTask(SVNUIPlugin.getActivePage().getActivePart(), editor.getViewer(), editor, remoteResource); else task = new GraphBackgroundTask(SVNUIPlugin.getActivePage().getActivePart(), editor.getViewer(), editor, resource); if (type == TYPE_NODES) task.setGetNewRevisions(false); if (refreshRevisions != null) task.setRefreshRevisions(refreshRevisions, nodes); try { task.run(); } catch (Exception e) { MessageDialog.openError(Display.getDefault().getActiveShell(), "Refresh " + getText(), e.getMessage()); //$NON-NLS-1$ } } } } GraphBackgroundTask.java000066400000000000000000000224131203611042400430630ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/editorspackage org.tigris.subversion.subclipse.graph.editors; import java.io.File; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.gef.GraphicalViewer; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.graph.Activator; import org.tigris.subversion.subclipse.graph.cache.Cache; import org.tigris.subversion.subclipse.graph.cache.Graph; import org.tigris.subversion.subclipse.graph.cache.Node; import org.tigris.subversion.subclipse.ui.operations.SVNOperation; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.SVNRevision; public class GraphBackgroundTask extends SVNOperation { private IResource resource; private ISVNRemoteResource remoteResource; private GraphicalViewer viewer; private RevisionGraphEditor editor; private SVNRevision refreshRevision; private Node refreshNode; private SVNRevision[] refreshRevisions; private Node[] refreshNodes; private boolean includeMergedRevisions = false; private boolean getNewRevisions = true; private Graph graph; private static final int TOTAL_STEPS = Integer.MAX_VALUE; private static final int SHORT_TASK_STEPS = TOTAL_STEPS / 50; // 2% private static final int VERY_LONG_TASK = TOTAL_STEPS / 2; // 50% private static final int TASK_STEPS = (TOTAL_STEPS - SHORT_TASK_STEPS*3 - VERY_LONG_TASK) / 2; protected GraphBackgroundTask(IWorkbenchPart part, GraphicalViewer viewer, RevisionGraphEditor editor) { super(part); this.viewer = viewer; this.editor = editor; } public GraphBackgroundTask(IWorkbenchPart part, GraphicalViewer viewer, RevisionGraphEditor editor, IResource resource) { this(part, viewer, editor); this.resource = resource; } public GraphBackgroundTask(IWorkbenchPart part, GraphicalViewer viewer, RevisionGraphEditor editor, ISVNRemoteResource remoteResource) { this(part, viewer, editor); this.remoteResource = remoteResource; } public void setGetNewRevisions(boolean getNewRevisions) { this.getNewRevisions = getNewRevisions; } protected void execute(IProgressMonitor monitor) throws SVNException, InterruptedException { boolean error = false; Cache cache = null; monitor.beginTask("Calculating graph information", TOTAL_STEPS); monitor.worked(SHORT_TASK_STEPS); ISVNClientAdapter client = null; try { client = SVNProviderPlugin.getPlugin().getSVNClient(); ISVNInfo info; if (resource == null) info = client.getInfo(remoteResource.getUrl()); else { if (resource.getRawLocation() == null) info = client.getInfoFromWorkingCopy(resource.getLocation().toFile()); else info = client.getInfoFromWorkingCopy(resource.getRawLocation().toFile()); if (info.getUuid() == null) { info = client.getInfo(info.getUrl()); } } if (editor != null) ((RevisionGraphEditorInput)editor.getEditorInput()).setInfo(info); long revision = info.getRevision().getNumber(); String path = info.getUrl().toString().substring(info.getRepository().toString().length()); monitor.setTaskName("Initializating cache"); cache = getCache(info.getUuid()); monitor.worked(SHORT_TASK_STEPS); // update the cache long latestRevisionStored = cache.getLatestRevision(); SVNRevision latest = null; SVNRevision endRevision = null; monitor.setTaskName("Connecting to the repository"); // TODO: try-catch this line and make it work off-line long latestRevisionInRepository = client.getInfo(info.getRepository()).getLastChangedRevision().getNumber(); monitor.worked(SHORT_TASK_STEPS); if(refreshRevision != null || refreshRevisions != null || latestRevisionInRepository > latestRevisionStored) { if (refreshRevision == null) { if(latestRevisionStored >= latestRevisionInRepository) latest = new SVNRevision.Number(latestRevisionInRepository); else latest = new SVNRevision.Number(latestRevisionStored+1); } else { latest = refreshRevision; } if (refreshRevision == null) endRevision = SVNRevision.HEAD; else endRevision = refreshRevision; try { monitor.setTaskName("Retrieving revision history"); int unitWork; if (refreshRevision == null && refreshRevisions == null) unitWork = VERY_LONG_TASK / (int) (latestRevisionInRepository - latestRevisionStored); else if (refreshRevisions != null) unitWork = VERY_LONG_TASK/refreshRevisions.length; else unitWork = VERY_LONG_TASK; if (refreshRevisions != null) { if (monitor.isCanceled()) return; monitor.setTaskName("Refreshing cache"); List refreshedNodes = new ArrayList(); for (int i = 0; i < refreshNodes.length; i++) { if (refreshNodes[i].getAction() != 'D') refreshedNodes.add(refreshNodes[i]); } cache.refresh(refreshedNodes, info, monitor, unitWork); } else if (refreshRevision != null) { if (monitor.isCanceled()) return; monitor.setTaskName("Refreshing cache"); revision = refreshNode.getRevision(); path = refreshNode.getPath(); List refreshedNodes = new ArrayList(); refreshedNodes.add(refreshNode); cache.refresh(refreshedNodes, info, monitor, unitWork); } if (getNewRevisions) { CallbackUpdater callbackUpdater = new CallbackUpdater(cache, monitor, unitWork, client); cache.startUpdate(); client.getLogMessages(info.getRepository(), latest, latest, endRevision, false, true, 0, includeMergedRevisions, ISVNClientAdapter.DEFAULT_LOG_PROPERTIES, callbackUpdater); cache.finishUpdate(); } } catch(Exception e) { Activator.handleError(e); error = true; Activator.showErrorDialog("Calculate Revision Graph Information", e, false); } } else { monitor.worked(VERY_LONG_TASK); } if (editor != null) { if (error == true || monitor.isCanceled()) { if (refreshRevision == null && refreshRevisions == null) { Display.getDefault().syncExec(new Runnable() { public void run() { IWorkbenchWindow window = editor.getEditorSite().getWorkbenchWindow(); IWorkbenchPage page = window.getActivePage(); page.activate(editor); page.closeEditor(editor, false); } }); } } else { updateView(monitor, cache, path, revision); } } monitor.done(); } catch (Exception e) { Activator.handleError(e); Activator.showErrorDialog("Calculate Revision Graph Information", e, false); return; } finally { if(cache != null) cache.close(); SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } } // private void serialize(Graph graph) { // try { // FileOutputStream fos = new FileOutputStream("c:/sample-graph"); // ObjectOutputStream oos = new ObjectOutputStream(fos); // oos.writeObject(graph); // fos.close(); // } catch (Exception e) { // // TODO Auto-generated catch block // e.printStackTrace(); // } // } private void updateView(IProgressMonitor monitor, Cache cache, String path, long revision) { monitor.setTaskName("Finding root node"); int unitWork = TASK_STEPS / (int)(revision); if(unitWork < 1) unitWork = 1; Node root = cache.findRootNode(path, revision, new WorkMonitorListener(monitor, unitWork)); monitor.setTaskName("Calculating graph"); if(revision == root.getRevision()) unitWork = TASK_STEPS; else unitWork = TASK_STEPS / (int)(revision - root.getRevision()); if(unitWork < 1) unitWork = 1; graph = cache.createGraph( root.getPath(), root.getRevision(), new WorkMonitorListener(monitor, unitWork)); graph.setSelectedPath(path); graph.setSelectedRevision(revision); monitor.setTaskName("Drawing graph"); Display.getDefault().syncExec(new Runnable() { public void run() { viewer.setContents(graph); } }); } private Cache getCache(String uuid) { File f = Cache.getCacheDirectory(resource); if (refreshRevision == null) return new Cache(f, uuid); else return new Cache(f, uuid, Long.parseLong(refreshRevision.toString())); } protected String getTaskName() { return "Calculating graph information"; } public void setRefreshRevision(SVNRevision refreshRevision, Node refreshNode) { this.refreshRevision = refreshRevision; this.refreshNode = refreshNode; includeMergedRevisions = refreshRevision != null; } public void setRefreshRevisions(SVNRevision[] refreshRevisions, Node[] refreshNodes) { this.refreshRevisions = refreshRevisions; this.refreshNodes = refreshNodes; includeMergedRevisions = refreshRevisions != null; } public void setIncludeMergedRevisions(boolean includeMergedRevisions) { this.includeMergedRevisions = includeMergedRevisions; } } GraphEditPart.java000066400000000000000000000251601203611042400416770ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/editorspackage org.tigris.subversion.subclipse.graph.editors; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.draw2d.ChopboxAnchor; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.ConnectionAnchor; import org.eclipse.draw2d.Cursors; import org.eclipse.draw2d.Figure; import org.eclipse.draw2d.FigureCanvas; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.MouseEvent; import org.eclipse.draw2d.MouseListener; import org.eclipse.draw2d.MouseMotionListener; import org.eclipse.draw2d.PolygonDecoration; import org.eclipse.draw2d.PolylineConnection; import org.eclipse.draw2d.Viewport; import org.eclipse.draw2d.XYAnchor; import org.eclipse.draw2d.XYLayout; import org.eclipse.draw2d.geometry.Point; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.GraphicalViewer; import org.eclipse.gef.editparts.AbstractGraphicalEditPart; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.graphics.Color; import org.tigris.subversion.subclipse.graph.Activator; import org.tigris.subversion.subclipse.graph.cache.Branch; import org.tigris.subversion.subclipse.graph.cache.Cache; import org.tigris.subversion.subclipse.graph.cache.Graph; import org.tigris.subversion.subclipse.graph.cache.Node; public class GraphEditPart extends AbstractGraphicalEditPart { private GraphicalViewer viewer; private Map branchMap = new HashMap(); private Map nodeMap = new HashMap(); private List connections = new ArrayList(); private IPreferenceStore store = Activator.getDefault().getPreferenceStore(); public GraphEditPart(GraphicalViewer viewer) { super(); this.viewer = viewer; } protected IFigure createFigure() { Figure f = new Figure(); f.setBackgroundColor(ColorConstants.white); f.setOpaque(true); XYLayout layout = new XYLayout(); f.setLayoutManager(layout); return f; } protected void createEditPolicies() { installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, null); } protected List getModelChildren() { IPreferenceStore store = Activator.getDefault().getPreferenceStore(); int showDeleted = store.getInt(RevisionGraphEditor.SHOW_DELETED_PREFERENCE); Graph graph = (Graph)getModel(); List paths = graph.getPaths(); List branches = new ArrayList(); Iterator iter = paths.iterator(); int i = 0; while (iter.hasNext()) { Branch branch = graph.getBranch((String)iter.next()); if(branch.getNodes().size() == 1) { Node firstNode = (Node) branch.getNodes().iterator().next(); if(firstNode.getSource() != null && firstNode.getChildCount() == 0) { // is not the root node and is not the target of any arrow // therefore is a tag branch.setView(null); continue; } } if (branch.getNodes().size() > 0) { Node lastNode = (Node)branch.getNodes().get(branch.getNodes().size() - 1); if (lastNode.getAction() == 'D' && Cache.isEqualsOrParent(lastNode.getPath(), branch.getPath())) { if (showDeleted == RevisionGraphEditor.SHOW_DELETED_NO || (showDeleted == RevisionGraphEditor.SHOW_DELETED_MODIFIED && !isModified(branch))) { // branch has been deleted and item was not modified in that location. // do not show this branch, unless it is the location where the item came // into existence. if (!graph.getRootPath().equals(branch.getPath())) { branch.setView(null); continue; } } } } branch.setIndex(i++); branches.add(branch); int mod = branch.getIndex() % Activator.BG_COLORS.length; Color bgcolor = Activator.BG_COLORS[mod]; Color fgcolor = Activator.FG_COLORS[mod]; BranchFigure branchFigure = new BranchFigure(branch.getPath(), bgcolor, fgcolor); branchMap.put(branch.getPath(), branchFigure); } List nodeList = new ArrayList(); iter = branches.iterator(); while (iter.hasNext()) { Branch branch = (Branch)iter.next(); Iterator nodeIter = branch.getNodes().iterator(); while (nodeIter.hasNext()) { Node node = (Node)nodeIter.next(); nodeList.add(node); int mod = branch.getIndex() % Activator.BG_COLORS.length; Color bgcolor = Activator.BG_COLORS[mod]; Color fgcolor = Activator.FG_COLORS[mod]; NodeFigure nodeFigure = new NodeFigure(node, bgcolor, fgcolor); nodeMap.put(node, nodeFigure); } } iter = branches.iterator(); while (iter.hasNext()) { Branch branch = (Branch)iter.next(); Iterator nodeIter = branch.getNodes().iterator(); while (nodeIter.hasNext()) { Node node = (Node)nodeIter.next(); NodeFigure nodeFigure = (NodeFigure)nodeMap.get(node); if(node.getParent() != null) { NodeFigure target = (NodeFigure)nodeMap.get(node.getParent()); if(target != null) { makeConnection(getFigure(), target, nodeFigure); } } else if(node.getSource() != null) { NodeFigure target = (NodeFigure)nodeMap.get(node.getSource()); if(target != null) { makeConnection(getFigure(), target, nodeFigure); } } else { BranchFigure branchFigure = (BranchFigure)branchMap.get(branch.getPath()); makeConnection(getFigure(), branchFigure, nodeFigure); } } } // Merged Connections iter = branches.iterator(); while (iter.hasNext()) { Branch branch = (Branch)iter.next(); for (Iterator it = branch.getNodes().iterator(); it.hasNext();) { Node node = (Node) it.next(); List mergedRevisions = node.getMergedRevisions(); if(mergedRevisions == null) continue; NodeFigure nodeFigure = (NodeFigure) nodeMap.get(node); for (Iterator iterator = node.getMergedRevisions().iterator(); iterator .hasNext();) { Node merged = (Node) iterator.next(); NodeFigure mergedView = (NodeFigure)nodeMap.get(merged); if(mergedView != null) makeConnection(getFigure(), mergedView, nodeFigure, ColorConstants.red); } } } // TODO: Preserve selections // Branch selectedBranch = graph.getBranch(graph.getSelectedPath()); // if (selectedBranch != null) { // Node n = selectedBranch.getSource(graph.getSelectedRevision()); // NodeFigure nodeFigure = (NodeFigure)nodeMap.get(n); // if(nodeFigure != null) { // selectNode(nodeFigure); // // FIXME: it doesn't work //// scrollTo((Rectangle) contentsLayout.getConstraint(nodeFigure)); // } // } setConnectionVisibility(); Node[] nodeArray = new Node[nodeList.size()]; nodeList.toArray(nodeArray); Arrays.sort(nodeArray); for (int j = 0; j < nodeArray.length; j++) { nodeArray[j].setGraphIndex(j); } return branches; } public BranchFigure getBranchFigure(String path) { return (BranchFigure)branchMap.get(path); } public NodeFigure getNodeFigure(Node node) { return (NodeFigure)nodeMap.get(node); } public List getNodes(Branch branch) { return (List)nodeMap.get(branch); } private boolean isModified(Branch branch) { List nodes = branch.getNodes(); Iterator iter = nodes.iterator(); while (iter.hasNext()) { Node node = (Node)iter.next(); if (node.getPath().equals(branch.getPath()) && node.getAction() == 'M') return true; } return false; } protected void refreshVisuals() { super.refreshVisuals(); } public void setConnectionVisibility() { Iterator iter = connections.iterator(); while (iter.hasNext()) { PolylineConnection con = (PolylineConnection)iter.next(); boolean show = false; if (!store.getBoolean(RevisionGraphEditor.FILTER_CONNECTIONS)) show = true; else { IFigure source =con.getSourceAnchor().getOwner(); IFigure target = con.getTargetAnchor().getOwner(); if (source instanceof NodeFigure && ((NodeFigure)source).isSelected()) show = true; else if (target instanceof NodeFigure && ((NodeFigure)target).isSelected()) show = true; } con.setVisible(show); } } public boolean isChronologicalMode() { return store.getBoolean(RevisionGraphEditor.CHRONOLOGICAL); } private PolylineConnection makeConnection(IFigure contents, IFigure source, NodeFigure target) { return makeConnection(contents, source, target, Activator.CONNECTION_COLOR); } private PolylineConnection makeConnection(IFigure contents, IFigure source, NodeFigure target, Color color) { PolylineConnection c = new PolylineConnection(); ConnectionAnchor targetAnchor = new ChopboxAnchor(target); c.setTargetAnchor(targetAnchor); c.setSourceAnchor(new ChopboxAnchor(source)); PolygonDecoration decoration = new PolygonDecoration(); decoration.setTemplate(PolygonDecoration.TRIANGLE_TIP); c.setTargetDecoration(decoration); c.setForegroundColor(color); ConnectionMouseListener listener = new ConnectionMouseListener(c); c.addMouseMotionListener(listener); c.addMouseListener(listener); c.setCursor(Cursors.HAND); contents.add(c); connections.add(c); return c; } private void scrollTo(Rectangle fbounds) { scrollTo(fbounds.x+fbounds.width/2, fbounds.y+fbounds.height/2); } private void scrollTo(int ax, int ay) { Viewport viewport = ((FigureCanvas)viewer.getControl()).getViewport(); Rectangle vbounds = viewport.getBounds(); Point p = new Point(ax, ay); // target.translateToAbsolute(p); // TODO int x = p.x-vbounds.width/2; int y = p.y-vbounds.height/2; viewport.setHorizontalLocation(x); viewport.setVerticalLocation(y); } private void scrollTo(IFigure target) { scrollTo(target.getBounds()); } class ConnectionMouseListener implements MouseMotionListener, MouseListener { private PolylineConnection connection; public ConnectionMouseListener(PolylineConnection connection) { this.connection = connection; } public void mouseDragged(MouseEvent event) { } public void mouseEntered(MouseEvent event) { } public void mouseExited(MouseEvent event) { connection.setLineWidth(1); } public void mouseHover(MouseEvent event) { connection.setLineWidth(2); } public void mouseMoved(MouseEvent event) { } public void mouseDoubleClicked(MouseEvent event) { } public void mousePressed(MouseEvent event) { NodeFigure nodeFigure = (NodeFigure) connection.getTargetAnchor().getOwner(); scrollTo(nodeFigure); Map map = viewer.getEditPartRegistry(); EditPart editPart = (EditPart)map.get(nodeFigure.getNode()); if (editPart != null) viewer.select(editPart); } public void mouseReleased(MouseEvent event) { } } class MyXYAnchor extends XYAnchor { private IFigure f; public MyXYAnchor(Point point, IFigure f) { super(point); this.f = f; } public Point getLocation(Point reference) { Point p = super.getLocation(reference).getCopy(); f.translateToAbsolute(p); return p; } public IFigure getOwner() { return f; } } } GraphEditPartFactory.java000066400000000000000000000030621203611042400432240ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/editorspackage org.tigris.subversion.subclipse.graph.editors; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.Label; import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPartFactory; import org.eclipse.gef.GraphicalViewer; import org.eclipse.gef.editparts.AbstractGraphicalEditPart; import org.tigris.subversion.subclipse.graph.cache.Branch; import org.tigris.subversion.subclipse.graph.cache.Graph; import org.tigris.subversion.subclipse.graph.cache.Node; import org.tigris.subversion.subclipse.graph.cache.Path; public class GraphEditPartFactory implements EditPartFactory { private GraphicalViewer viewer; public GraphEditPartFactory(GraphicalViewer viewer) { this.viewer = viewer; } public EditPart createEditPart(EditPart context, Object model) { EditPart editPart = null; if (model instanceof String) { final String s = (String) model; return new AbstractGraphicalEditPart() { protected IFigure createFigure() { return new Label(s); } protected void createEditPolicies() { } }; } else if (model instanceof Graph) { editPart = new GraphEditPart(viewer); } else if (model instanceof Branch) { editPart = new BranchEditPart(); } else if (model instanceof Path) { editPart = new PathEditPart(); } else if (model instanceof Node) { editPart = new RevisionEditPart(); } if (editPart == null) throw new RuntimeException("cannot create EditPart for "+model.getClass().getName()+" class"); else editPart.setModel(model); return editPart; } } NodeFigure.java000066400000000000000000000045421203611042400412310ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/editorspackage org.tigris.subversion.subclipse.graph.editors; import org.eclipse.draw2d.BorderLayout; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.Cursors; import org.eclipse.draw2d.Label; import org.eclipse.draw2d.PolylineConnection; import org.eclipse.draw2d.RoundedRectangle; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.tigris.subversion.subclipse.graph.Activator; import org.tigris.subversion.subclipse.graph.cache.Node; public class NodeFigure extends RoundedRectangle { private Node node; private PolylineConnection source; private int sourceIndex; private boolean hasTags; private Color bgcolor; private boolean selected; public NodeFigure(Node node, Color bgcolor, Color fgcolor) { this.node = node; this.bgcolor = bgcolor; setLayoutManager(new BorderLayout()); setBackgroundColor(bgcolor); setForegroundColor(fgcolor); setOpaque(true); setToolTip(new NodeTooltipFigure(node)); setCursor(Cursors.HAND); } public PolylineConnection getSource() { return source; } public void setSource(PolylineConnection source, int sourceIndex) { this.source = source; this.sourceIndex = sourceIndex; } public int getSourceIndex() { return sourceIndex; } public Node getNode() { return node; } public void addTag(Node source) { NodeTooltipFigure tt = (NodeTooltipFigure) getToolTip(); tt.addTag(source); this.hasTags = true; setForegroundColor(ColorConstants.black); } public void endLayout() { if(hasTags) add(createLabel(Long.toString(node.getRevision()) + "*", JFaceResources.getDefaultFont()), BorderLayout.CENTER); else add(createLabel(Long.toString(node.getRevision()), JFaceResources.getDefaultFont()), BorderLayout.CENTER); NodeTooltipFigure tt = (NodeTooltipFigure) getToolTip(); tt.endLayout(); } public static Label createLabel(String text, Font font) { Label label = new Label(text); label.setFont(font); label.setForegroundColor(Activator.FONT_COLOR); return label; } public void setSelected(boolean selected) { this.selected = selected; if(selected) setBackgroundColor(ColorConstants.white); else setBackgroundColor(bgcolor); } public boolean isSelected() { return selected; } } NodeTooltipFigure.java000066400000000000000000000115211203611042400425770ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/editorspackage org.tigris.subversion.subclipse.graph.editors; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.StringTokenizer; import org.eclipse.draw2d.Figure; import org.eclipse.draw2d.Label; import org.eclipse.draw2d.LineBorder; import org.eclipse.draw2d.PositionConstants; import org.eclipse.draw2d.ToolbarLayout; import org.eclipse.draw2d.geometry.Dimension; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.graph.Activator; import org.tigris.subversion.subclipse.graph.cache.Node; public class NodeTooltipFigure extends Figure { private static final int BORDER_WIDTH = 5; private static final int BORDER_WIDTH2 = BORDER_WIDTH*2; private static DateFormat dateFormat; private boolean hasSources = false; private boolean hasTags = false; private int tagsAdded; private int tagCount; private int messageLines; private final static int NUMBER_OF_LOG_MESSAGE_LINES = 15; private final static int NUMBER_OF_TAG_AND_MESSAGE_LINES = 25; public NodeTooltipFigure(Node node) { ToolbarLayout layout = new ToolbarLayout(); layout.setStretchMinorAxis(false); setLayoutManager(layout); setBackgroundColor(Activator.BGCOLOR); setOpaque(true); layout.setSpacing(5); // lazy loading and reuse if(dateFormat == null) { dateFormat = SimpleDateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.MEDIUM); } Figure tooltip = new Figure(); setToolTip(tooltip); add(createLabel("Action and path", JFaceResources.getHeaderFont(), Activator.FONT_COLOR)); add(createLabel(node.getAction()+" "+node.getPath(), JFaceResources.getTextFont())); add(createLabel("Author", JFaceResources.getHeaderFont(), Activator.FONT_COLOR)); add(createLabel(node.getAuthor(), JFaceResources.getTextFont())); add(createLabel("Date", JFaceResources.getHeaderFont(), Activator.FONT_COLOR)); add(createLabel(dateFormat.format(node.getRevisionDate()), JFaceResources.getTextFont())); add(createLabel("Message", JFaceResources.getHeaderFont(), Activator.FONT_COLOR)); add(createLabel(getFirstLines(node.getMessage(), NUMBER_OF_LOG_MESSAGE_LINES), JFaceResources.getTextFont())); if(node.getCopySrcPath() != null) { add(createLabel("From", JFaceResources.getHeaderFont(), Activator.FONT_COLOR)); add(createLabel(format(node.getCopySrcRevision(), node.getCopySrcPath()), JFaceResources.getTextFont())); } } public void endLayout() { if (tagCount > tagsAdded) add(createLabel((tagCount - tagsAdded) + " more...", JFaceResources.getTextFont())); Dimension d = getPreferredSize(); int width = d.width+BORDER_WIDTH2; int height = d.height+BORDER_WIDTH2; Rectangle b = PlatformUI.getWorkbench().getDisplay().getClientArea(); width = width > b.width?b.width-30:width; height = height > b.height?b.height-50:height; setPreferredSize(width, height); setBorder(new LineBorder(Activator.BGCOLOR, BORDER_WIDTH)); } public void addSource(Node node) { if(!hasSources) { add(createLabel("Source of", JFaceResources.getHeaderFont(), Activator.FONT_COLOR)); hasSources = true; } add(createLabel(format(node.getRevision(), node.getPath()), JFaceResources.getTextFont())); } public void addTag(Node node) { if(!hasTags) { add(createLabel("Tagged as", JFaceResources.getHeaderFont(), Activator.FONT_COLOR)); hasTags = true; } if (messageLines + tagCount < NUMBER_OF_TAG_AND_MESSAGE_LINES) { add(createLabel(format(node.getRevision(), node.getPath()), JFaceResources.getTextFont())); tagsAdded++; } tagCount++; } public String format(long revision, String path) { return "r"+Long.toString(revision)+" "+path; } public static Label createLabel(String text, Font font) { Label label = new Label(text); label.setFont(font); label.setTextAlignment(PositionConstants.LEFT); return label; } public static Label createLabel(String text, Font font, Color c) { Label label = new Label(text); label.setFont(font); label.setTextAlignment(PositionConstants.LEFT); label.setForegroundColor(c); return label; } public String getFirstLines(String string, int numberLines) { if (string == null) return null; StringTokenizer tokenizer = new StringTokenizer(string, "\r\n"); int count = tokenizer.countTokens(); if (count <= numberLines) { messageLines = count; return string; } messageLines = numberLines; StringBuffer newString = new StringBuffer(); for (int i = 0; i < numberLines; i++) { newString.append(tokenizer.nextToken() + "\n"); } newString.append((count - numberLines) + " more message lines . . ."); return newString.toString(); } } OverviewOutlinePage.java000066400000000000000000000041301203611042400431360ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/editorspackage org.tigris.subversion.subclipse.graph.editors; import org.eclipse.draw2d.LightweightSystem; import org.eclipse.draw2d.MarginBorder; import org.eclipse.draw2d.Viewport; import org.eclipse.draw2d.parts.ScrollableThumbnail; import org.eclipse.draw2d.parts.Thumbnail; import org.eclipse.gef.LayerConstants; import org.eclipse.gef.editparts.ScalableRootEditPart; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.part.Page; import org.eclipse.ui.views.contentoutline.IContentOutlinePage; public class OverviewOutlinePage extends Page implements IContentOutlinePage { private Canvas overview; private ScalableRootEditPart rootEditPart; private Thumbnail thumbnail; public OverviewOutlinePage(ScalableRootEditPart rootEditPart) { super(); this.rootEditPart = rootEditPart; } public void addSelectionChangedListener(ISelectionChangedListener listener) { } public void createControl(Composite parent) { // create canvas and lws overview = new Canvas(parent, SWT.NONE); LightweightSystem lws = new LightweightSystem(overview); // create thumbnail thumbnail = new ScrollableThumbnail((Viewport) rootEditPart.getFigure()); thumbnail.setBorder(new MarginBorder(3)); thumbnail.setSource( rootEditPart.getLayer(LayerConstants.PRINTABLE_LAYERS)); lws.setContents(thumbnail); } public void dispose() { if (null != thumbnail) thumbnail.deactivate(); super.dispose(); } public Control getControl() { return overview; } public ISelection getSelection() { return StructuredSelection.EMPTY; } public void removeSelectionChangedListener( ISelectionChangedListener listener) { } public void setFocus() { if (getControl() != null) getControl().setFocus(); } public void setSelection(ISelection selection) { } }PathEditPart.java000066400000000000000000000025661203611042400415370ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/editorspackage org.tigris.subversion.subclipse.graph.editors; import org.eclipse.draw2d.BorderLayout; import org.eclipse.draw2d.ColorConstants; import org.eclipse.draw2d.Figure; import org.eclipse.draw2d.IFigure; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.editparts.AbstractGraphicalEditPart; import org.eclipse.gef.editpolicies.SelectionEditPolicy; import org.tigris.subversion.subclipse.graph.cache.Path; public class PathEditPart extends AbstractGraphicalEditPart { private BranchFigure branchFigure; public PathEditPart() { super(); } protected IFigure createFigure() { Figure f = new Figure(); f.setBackgroundColor(ColorConstants.white); f.setOpaque(true); BorderLayout layout = new BorderLayout(); f.setLayoutManager(layout); Path path = (Path)getModel(); GraphEditPart graphEditPart = (GraphEditPart)getParent().getParent(); branchFigure = graphEditPart.getBranchFigure(path.getPath()); f.add(branchFigure, BorderLayout.CENTER); return f; } protected void refreshVisuals() { getFigure().setSize(220, 30); super.refreshVisuals(); } protected void createEditPolicies() { installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new SelectionEditPolicy() { protected void hideSelection() { // System.out.println("hide path"); } protected void showSelection() { // System.out.println("show path"); } }); } } RevisionEditPart.java000066400000000000000000000041111203611042400424250ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/editorspackage org.tigris.subversion.subclipse.graph.editors; import java.util.Iterator; import org.eclipse.draw2d.IFigure; import org.eclipse.draw2d.geometry.Rectangle; import org.eclipse.gef.EditPolicy; import org.eclipse.gef.editparts.AbstractGraphicalEditPart; import org.eclipse.gef.editpolicies.SelectionEditPolicy; import org.tigris.subversion.subclipse.graph.cache.Node; public class RevisionEditPart extends AbstractGraphicalEditPart { private final static int NODE_WIDTH = 50; private final static int NODE_HEIGHT = 30; private final static int NODE_OFFSET_Y = NODE_HEIGHT + 10; private final static int NODE_OFFSET_X = (BranchEditPart.BRANCH_WIDTH - NODE_WIDTH) / 2; public RevisionEditPart() { super(); } protected IFigure createFigure() { Node node = (Node)getModel(); GraphEditPart graphEditPart = (GraphEditPart)getParent().getParent(); NodeFigure nodeFigure = graphEditPart.getNodeFigure(node); node.setView(nodeFigure); if (node.getTags() != null) { Iterator iter = node.getTags().iterator(); while (iter.hasNext()) { Node tag = (Node)iter.next(); nodeFigure.addTag(tag); } } nodeFigure.endLayout(); int index; if (graphEditPart.isChronologicalMode()) index = node.getGraphIndex(); else index = node.getBranchIndex(); Rectangle rect = new Rectangle(NODE_OFFSET_X, 10+BranchEditPart.BRANCH_HEIGHT+index*NODE_OFFSET_Y, NODE_WIDTH, NODE_HEIGHT); ((AbstractGraphicalEditPart)getParent()).getFigure().getLayoutManager().setConstraint(nodeFigure, rect); return nodeFigure; } protected void refreshVisuals() { Node node = (Node)getModel(); GraphEditPart graphEditPart = (GraphEditPart)getParent().getParent(); NodeFigure nodeFigure = graphEditPart.getNodeFigure(node); nodeFigure.setSelected(getSelected() != SELECTED_NONE); graphEditPart.setConnectionVisibility(); } protected void createEditPolicies() { installEditPolicy(EditPolicy.SELECTION_FEEDBACK_ROLE, new SelectionEditPolicy() { protected void hideSelection() { refreshVisuals(); } protected void showSelection() { refreshVisuals(); } }); } } RevisionGraphEditDomain.java000066400000000000000000000007731203611042400437220ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/editorspackage org.tigris.subversion.subclipse.graph.editors; import org.eclipse.gef.DefaultEditDomain; import org.eclipse.gef.Tool; import org.eclipse.ui.IEditorPart; public class RevisionGraphEditDomain extends DefaultEditDomain { private RevisionGraphSelectionTool selectionTool; public RevisionGraphEditDomain(IEditorPart editorPart) { super(editorPart); } public Tool getDefaultTool() { if (selectionTool == null) selectionTool = new RevisionGraphSelectionTool(); return selectionTool; } } RevisionGraphEditor.java000066400000000000000000000166731203611042400431410ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/editorspackage org.tigris.subversion.subclipse.graph.editors; import java.util.Arrays; import java.util.List; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.gef.ContextMenuProvider; import org.eclipse.gef.EditPartViewer; import org.eclipse.gef.GraphicalViewer; import org.eclipse.gef.MouseWheelHandler; import org.eclipse.gef.MouseWheelZoomHandler; import org.eclipse.gef.RootEditPart; import org.eclipse.gef.editparts.ScalableRootEditPart; import org.eclipse.gef.editparts.ZoomManager; import org.eclipse.gef.ui.actions.ActionRegistry; import org.eclipse.gef.ui.actions.ZoomInAction; import org.eclipse.gef.ui.actions.ZoomOutAction; import org.eclipse.gef.ui.parts.GraphicalEditor; import org.eclipse.jface.action.IAction; import org.eclipse.swt.SWT; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorSite; import org.eclipse.ui.PartInitException; import org.eclipse.ui.part.FileEditorInput; import org.eclipse.ui.views.contentoutline.IContentOutlinePage; import org.tigris.subversion.subclipse.graph.Activator; import org.tigris.subversion.subclipse.graph.cache.Cache; import org.tigris.subversion.subclipse.graph.cache.WorkListener; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNLogMessage; import org.tigris.subversion.svnclientadapter.ISVNLogMessageCallback; import org.tigris.subversion.svnclientadapter.SVNClientException; public class RevisionGraphEditor extends GraphicalEditor { private OverviewOutlinePage overviewOutlinePage; private ActionRegistry actionRegistry; public final static String SHOW_DELETED_PREFERENCE = "RevisionGraph_showDeleted"; public final static String FILTER_CONNECTIONS = "RevisionGraph_filterConnections"; public final static String CHRONOLOGICAL = "RevisionGraph_chronological"; public final static int SHOW_DELETED_MODIFIED = 0; public final static int SHOW_DELETED_YES = 1; public final static int SHOW_DELETED_NO = 2; public RevisionGraphEditor() { super(); setEditDomain(new RevisionGraphEditDomain(this)); } public ActionRegistry getActionRegistry() { if (actionRegistry == null) actionRegistry = new ActionRegistry(); return actionRegistry; } public void setFocus() { } public void showGraphFor(IResource resource) { setPartName(resource.getName()+" revision graph"); GraphBackgroundTask task = new GraphBackgroundTask(getSite().getPart(), getGraphicalViewer(), this, resource); try { task.run(); } catch (Exception e) { Activator.handleError(e); Activator.showErrorDialog("Show Revision Graphp for " + resource.getName(), e); } } public void showGraphFor(RevisionGraphEditorInput editorInput) { setPartName(editorInput.getName() + " revision graph"); GraphBackgroundTask task; if (editorInput.getResource() == null) task = new GraphBackgroundTask(getSite().getPart(), getGraphicalViewer(), this, editorInput.getRemoteResource()); else task = new GraphBackgroundTask(getSite().getPart(), getGraphicalViewer(), this, editorInput.getResource()); try { task.run(); } catch (Exception e) { Activator.handleError(e); Activator.showErrorDialog("Show Revision Graphp for " + editorInput.getName(), e); } } public Object getAdapter(Class adapter) { if(adapter == GraphicalViewer.class || adapter == EditPartViewer.class) { return getGraphicalViewer(); } else if(adapter == ZoomManager.class) { return ((ScalableRootEditPart) getGraphicalViewer().getRootEditPart()).getZoomManager(); } else if (adapter == IContentOutlinePage.class) { return getOverviewOutlinePage(); } return super.getAdapter(adapter); } public void refresh() { getGraphicalViewer().setContents("Loading graph... This can take several minutes"); showGraphFor((RevisionGraphEditorInput)getEditorInput()); } public void doSave(IProgressMonitor monitor) { } public void doSaveAs() { } public void init(IEditorSite site, IEditorInput input) throws PartInitException { setSite(site); setInput(input); } public boolean isDirty() { return false; } public boolean isSaveAsAllowed() { return false; } public GraphicalViewer getViewer() { return getGraphicalViewer(); } protected OverviewOutlinePage getOverviewOutlinePage() { if(null == overviewOutlinePage && null != getGraphicalViewer()) { RootEditPart rootEditPart = getGraphicalViewer().getRootEditPart(); if(rootEditPart instanceof ScalableRootEditPart) { overviewOutlinePage = new OverviewOutlinePage( (ScalableRootEditPart) rootEditPart); } } return overviewOutlinePage; } protected void configureGraphicalViewer() { super.configureGraphicalViewer(); GraphicalViewer viewer = getGraphicalViewer(); ScalableRootEditPart root = new ScalableRootEditPart(); viewer.setRootEditPart(root); viewer.setEditPartFactory(new GraphEditPartFactory(viewer)); viewer.setContents("Loading graph... This can take several minutes"); ContextMenuProvider cmProvider = new RevisionGraphMenuProvider(viewer, this); viewer.setContextMenu(cmProvider); getSite().setSelectionProvider(viewer); IEditorInput input = getEditorInput(); if(input instanceof FileEditorInput) { FileEditorInput fileEditorInput = (FileEditorInput) input; showGraphFor(fileEditorInput.getFile()); } else if(input instanceof RevisionGraphEditorInput) { RevisionGraphEditorInput editorInput = (RevisionGraphEditorInput) input; showGraphFor(editorInput); } // zoom stuff ZoomManager zoomManager = ((ScalableRootEditPart) viewer.getRootEditPart()).getZoomManager(); IAction zoomIn = new ZoomInAction(zoomManager); IAction zoomOut = new ZoomOutAction(zoomManager); getActionRegistry().registerAction(zoomIn); getActionRegistry().registerAction(zoomOut); // keyboard getSite().getKeyBindingService().registerAction(zoomIn); // FIXME, deprecated getSite().getKeyBindingService().registerAction(zoomOut); // FIXME, deprecated List zoomContributions = Arrays.asList(new String[] { ZoomManager.FIT_ALL, ZoomManager.FIT_HEIGHT, ZoomManager.FIT_WIDTH }); zoomManager.setZoomLevelContributions(zoomContributions); // mouse wheel viewer.setProperty(MouseWheelHandler.KeyGenerator.getKey(SWT.MOD1), MouseWheelZoomHandler.SINGLETON); } protected void initializeGraphicalViewer() { } } class WorkMonitorListener implements WorkListener { private IProgressMonitor monitor; private int unitWork; public WorkMonitorListener(IProgressMonitor monitor, int unitWork) { this.monitor = monitor; this.unitWork = unitWork; } public void worked() { monitor.worked(unitWork); } } class CallbackUpdater implements ISVNLogMessageCallback { private Cache cache; private IProgressMonitor monitor; private int unitWork; private ISVNClientAdapter client; private boolean canceled; public CallbackUpdater(Cache cache, IProgressMonitor monitor, int unitWork, ISVNClientAdapter client) { this.cache = cache; this.monitor = monitor; this.unitWork = unitWork; this.client = client; } public void singleMessage(ISVNLogMessage message) { if (!canceled && monitor.isCanceled()) { try { canceled = true; client.cancelOperation(); } catch (SVNClientException e) {} return; } cache.update(message); monitor.worked(unitWork); } }RevisionGraphEditorInput.java000066400000000000000000000043371203611042400441530ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/editorspackage org.tigris.subversion.subclipse.graph.editors; import org.eclipse.core.resources.IResource; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IPersistableElement; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.svnclientadapter.ISVNInfo; public class RevisionGraphEditorInput implements IEditorInput { private IResource resource; private ISVNRemoteResource remoteResource; private ISVNInfo info; public RevisionGraphEditorInput(IResource resource) { this.resource = resource; } public RevisionGraphEditorInput(ISVNRemoteResource remoteResource) { this.remoteResource = remoteResource; } public IResource getResource() { return resource; } public ISVNRemoteResource getRemoteResource() { return remoteResource; } public boolean exists() { return false; } public ImageDescriptor getImageDescriptor() { return PlatformUI.getWorkbench().getEditorRegistry() .getImageDescriptor(getName()); } public String getName() { if (resource == null) return remoteResource.getName(); else return resource.getName(); } public IPersistableElement getPersistable() { return null; } public String getToolTipText() { return getName(); } public Object getAdapter(Class adapter) { if (resource == null) { if (adapter == ISVNRemoteResource.class) { return remoteResource; } return remoteResource.getAdapter(adapter); } else { if(adapter == IResource.class) { return resource; } return resource.getAdapter(adapter); } } public ISVNInfo getInfo() { return info; } public void setInfo(ISVNInfo info) { this.info = info; } public boolean equals(Object obj) { if (obj instanceof RevisionGraphEditorInput) { RevisionGraphEditorInput compareTo = (RevisionGraphEditorInput)obj; if (resource != null && compareTo.getResource() != null) return resource.equals(compareTo.getResource()); if (remoteResource != null && compareTo.getRemoteResource() != null) return remoteResource.equals(compareTo.getRemoteResource()); } return super.equals(obj); } } RevisionGraphMenuProvider.java000066400000000000000000000050531203611042400443200ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/editorspackage org.tigris.subversion.subclipse.graph.editors; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.gef.ContextMenuProvider; import org.eclipse.gef.EditPart; import org.eclipse.gef.EditPartViewer; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.Separator; import org.tigris.subversion.subclipse.graph.cache.Node; import org.tigris.subversion.subclipse.graph.popup.actions.BranchTagAction; import org.tigris.subversion.subclipse.graph.popup.actions.CompareRevisionsAction; import org.tigris.subversion.subclipse.graph.popup.actions.ImageAction; import org.tigris.subversion.subclipse.graph.popup.actions.RefreshNodeAction; import org.tigris.subversion.subclipse.graph.popup.actions.RevisionDetailsAction; import org.tigris.subversion.subclipse.graph.popup.actions.SetCommitPropertiesAction; public class RevisionGraphMenuProvider extends ContextMenuProvider { private RevisionGraphEditor editor; public RevisionGraphMenuProvider(EditPartViewer viewer, RevisionGraphEditor editor) { super(viewer); this.editor = editor; } public void buildContextMenu(IMenuManager menu) { List selectedRevisions = getSelectedRevisions(); if (selectedRevisions.size() == 1) { RevisionEditPart revision = (RevisionEditPart)selectedRevisions.get(0); Node node = (Node)revision.getModel(); NodeFigure nodeFigure = (NodeFigure)revision.getFigure(); menu.add(new RevisionDetailsAction(node, editor)); menu.add(new SetCommitPropertiesAction(nodeFigure, editor)); menu.add(new BranchTagAction("Create Branch/Tag from Revision " + node.getRevision() + "...", editor, node)); } if (selectedRevisions.size() > 0) { menu.add(new RefreshNodeAction(selectedRevisions, editor)); } menu.add(new Separator()); if (selectedRevisions.size() == 2) { RevisionEditPart revision1 = (RevisionEditPart)selectedRevisions.get(0); Node node1 = (Node)revision1.getModel(); RevisionEditPart revision2 = (RevisionEditPart)selectedRevisions.get(1); Node node2 = (Node)revision2.getModel(); menu.add(new CompareRevisionsAction(node1, node2, editor)); } menu.add(new Separator()); menu.add(new ImageAction(editor)); } private List getSelectedRevisions() { List selectedRevisions = new ArrayList(); List selectedEditParts = getViewer().getSelectedEditParts(); Iterator iter = selectedEditParts.iterator(); while (iter.hasNext()) { EditPart editPart = (EditPart)iter.next(); if (editPart instanceof RevisionEditPart) selectedRevisions.add(editPart); } return selectedRevisions; } } RevisionGraphSelectionTool.java000066400000000000000000000011351203611042400444610ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/editorspackage org.tigris.subversion.subclipse.graph.editors; import org.eclipse.gef.EditPartViewer; import org.eclipse.gef.tools.SelectionTool; import org.eclipse.swt.events.MouseEvent; public class RevisionGraphSelectionTool extends SelectionTool { public RevisionGraphSelectionTool() { super(); } public void mouseUp(MouseEvent e, EditPartViewer viewer) { if (getTargetEditPart() instanceof RevisionEditPart) super.mouseUp(e, viewer); } public void mouseDown(MouseEvent e, EditPartViewer viewer) { if (getTargetEditPart() instanceof RevisionEditPart) super.mouseDown(e, viewer); } } 000077500000000000000000000000001203611042400360245ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/popup000077500000000000000000000000001203611042400374645ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/popup/actionsBranchTagAction.java000066400000000000000000000104541203611042400433220ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/popup/actionspackage org.tigris.subversion.subclipse.graph.popup.actions; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.history.Alias; import org.tigris.subversion.subclipse.graph.cache.Node; import org.tigris.subversion.subclipse.graph.editors.RevisionGraphEditor; import org.tigris.subversion.subclipse.graph.editors.RevisionGraphEditorInput; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.operations.BranchTagOperation; import org.tigris.subversion.subclipse.ui.wizards.BranchTagWizard; import org.tigris.subversion.subclipse.ui.wizards.ClosableWizardDialog; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class BranchTagAction extends Action { private RevisionGraphEditor editor; private Node node; public BranchTagAction(String text, RevisionGraphEditor editor, Node node) { super(text); this.editor = editor; this.node = node; } public void run() { BranchTagWizard wizard; final IResource resource = ((RevisionGraphEditorInput)editor.getEditorInput()).getResource(); ISVNRemoteResource remoteResource = ((RevisionGraphEditorInput)editor.getEditorInput()).getRemoteResource(); if (resource == null) { ISVNRemoteResource[] resources = { remoteResource }; wizard = new BranchTagWizard(resources); } else { IResource[] resources = { resource }; wizard = new BranchTagWizard(resources); } wizard.setRevisionNumber(node.getRevision()); WizardDialog dialog = new ClosableWizardDialog(Display.getDefault().getActiveShell(), wizard); if (dialog.open() == WizardDialog.OK) { final SVNUrl sourceUrl = wizard.getUrl(); final SVNUrl destinationUrl = wizard.getToUrl(); final String message = wizard.getComment(); final SVNRevision revision = wizard.getRevision(); final boolean makeParents = wizard.isMakeParents(); final SVNUrl[] sourceUrls = wizard.getUrls(); final boolean createOnServer = wizard.isCreateOnServer(); final Alias newAlias = wizard.getNewAlias(); final boolean switchAfter = wizard.isSwitchAfterBranchTag(); try { BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { ISVNClientAdapter client = null; try { if (resource == null) { client = SVNProviderPlugin.getPlugin().getSVNClientManager().getSVNClient(); client.copy(sourceUrl, destinationUrl, message, revision, makeParents); } else { IResource[] resources = { resource }; BranchTagOperation branchTagOperation = new BranchTagOperation(editor.getEditorSite().getPart(), resources, sourceUrls, destinationUrl, createOnServer, revision, message); branchTagOperation.setMakeParents(makeParents); branchTagOperation.setNewAlias(newAlias); branchTagOperation.switchAfterTagBranchOperation(switchAfter); branchTagOperation.run(); } } catch(Exception e) { MessageDialog.openError(Display.getDefault().getActiveShell(), Policy.bind("HistoryView.createTagFromRevision"), e .getMessage()); } finally { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } } }); } catch(Exception e) { MessageDialog.openError(Display.getDefault().getActiveShell(), Policy.bind("HistoryView.createTagFromRevision"), e .getMessage()); } } } } CompareRevisionsAction.java000066400000000000000000000060131203611042400447550ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/popup/actionspackage org.tigris.subversion.subclipse.graph.popup.actions; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.resources.RemoteFile; import org.tigris.subversion.subclipse.core.resources.RemoteFolder; import org.tigris.subversion.subclipse.graph.cache.Node; import org.tigris.subversion.subclipse.graph.editors.RevisionGraphEditor; import org.tigris.subversion.subclipse.graph.editors.RevisionGraphEditorInput; import org.tigris.subversion.subclipse.ui.dialogs.DifferencesDialog; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class CompareRevisionsAction extends Action { private Node node1; private Node node2; private RevisionGraphEditor editor; public CompareRevisionsAction(Node node1, Node node2, RevisionGraphEditor editor) { super(); this.node1 = node1; this.node2 = node2; this.editor = editor; setText("Compare..."); } public void run() { RevisionGraphEditorInput input = (RevisionGraphEditorInput)editor.getEditorInput(); boolean isFolder = (input.getResource() != null && input.getResource().getType() != IResource.FILE) || (input.getRemoteResource() != null && input.getRemoteResource().isFolder()); ISVNInfo info = input.getInfo(); try { ISVNRepositoryLocation repository = SVNProviderPlugin.getPlugin().getRepository(info.getRepository().toString()); ISVNRemoteResource remoteResource1; ISVNRemoteResource remoteResource2; if (isFolder) { remoteResource1 = new RemoteFolder(repository, new SVNUrl(repository.getLocation() + node1.getBranch().getPath()), new SVNRevision.Number(node1.getRevision())); remoteResource2 = new RemoteFolder(repository, new SVNUrl(repository.getLocation() + node2.getBranch().getPath()), new SVNRevision.Number(node2.getRevision())); } else { remoteResource1 = new RemoteFile(repository, new SVNUrl(repository.getLocation() + node1.getBranch().getPath()), new SVNRevision.Number(node1.getRevision())); remoteResource2 = new RemoteFile(repository, new SVNUrl(repository.getLocation() + node2.getBranch().getPath()), new SVNRevision.Number(node2.getRevision())); } ISVNRemoteResource[] selectedResources = { remoteResource1, remoteResource2 }; DifferencesDialog dialog = new DifferencesDialog(Display.getDefault().getActiveShell(), null, selectedResources, editor.getEditorSite().getPart()); dialog.setFromRevision(Long.toString(node1.getRevision())); dialog.setToRevision(Long.toString(node2.getRevision())); dialog.open(); } catch (Exception e) { MessageDialog.openError(Display.getDefault().getActiveShell(), "Compare Revisions", e.getMessage()); } } } DeleteCacheAction.java000066400000000000000000000062141203611042400436160ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/popup/actionspackage org.tigris.subversion.subclipse.graph.popup.actions; import java.io.File; import java.lang.reflect.InvocationTargetException; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Display; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.graph.cache.Cache; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.actions.SVNAction; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; public class DeleteCacheAction extends SVNAction { private ISVNInfo info; private Exception error; protected void execute(IAction action) throws InvocationTargetException, InterruptedException { final ISVNRemoteFolder[] selectedFolders = getSelectedRemoteFolders(); error = null; BusyIndicator.showWhile(Display.getDefault(), new Runnable() { public void run() { ISVNClientAdapter client = null; try { client = SVNProviderPlugin.getPlugin().getSVNClient(); info = client.getInfo(selectedFolders[0].getUrl()); } catch (Exception e) { error = e; } finally { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } } }); if (error != null) { MessageDialog.openError(Display.getDefault().getActiveShell(), Policy.bind("DeleteCacheAction.title"), error.getMessage()); //$NON-NLS-1$ return; } String uuid = info.getUuid(); File f = Cache.getCacheDirectory(null); f = new File(f, uuid); if (!f.exists()) { MessageDialog.openInformation(Display.getDefault().getActiveShell(), Policy.bind("DeleteCacheAction.title"), Policy.bind("DeleteCacheAction.noCache")); //$NON-NLS-1$ //$NON-NLS-2$ return; } String[] url = { selectedFolders[0].getUrl().toString() }; if (!MessageDialog.openConfirm(Display.getDefault().getActiveShell(), Policy.bind("DeleteCacheAction.title"), Policy.bind("DeleteCacheAction.confirm", url))) return; //$NON-NLS-1$ //$NON-NLS-2$ File revisionsFile = new File(f, "revisions"); //$NON-NLS-1$ if (!deleteFile(revisionsFile, true)) return; File logMessagesFile = new File(f, "logMessages"); //$NON-NLS-1$ if (!deleteFile(logMessagesFile, true)) return; // Just in case of a failed refresh File revisionsTempFile = new File(f, "revisionsTemp"); //$NON-NLS-1$ deleteFile(revisionsTempFile, false); File logMessagesTempFile = new File(f, "logMessagesTemp"); //$NON-NLS-1$ deleteFile(logMessagesTempFile, false); deleteFile(f, true); } protected boolean isEnabled() throws TeamException { return true; } private boolean deleteFile(File f, boolean showErrorMessage) { if (!f.delete()) { if (showErrorMessage) { String[] file = { f.getPath() }; MessageDialog.openError(Display.getDefault().getActiveShell(), Policy.bind("DeleteCacheAction.title"), Policy.bind("DeleteCacheAction.deleteError", file)); //$NON-NLS-1$ //$NON-NLS-2$ } return false; } return true; } } ImageAction.java000066400000000000000000000015401203611042400425070ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/popup/actionspackage org.tigris.subversion.subclipse.graph.popup.actions; import org.eclipse.jface.action.Action; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.subclipse.graph.IRevisionGraphConstants; import org.tigris.subversion.subclipse.graph.dialogs.SaveImageDialog; import org.tigris.subversion.subclipse.graph.editors.RevisionGraphEditor; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class ImageAction extends Action { private RevisionGraphEditor editor; public ImageAction(RevisionGraphEditor editor) { super(); this.editor = editor; setText("Save image to file..."); setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(IRevisionGraphConstants.IMG_EXPORT_IMAGE)); } public void run() { SaveImageDialog dialog = new SaveImageDialog(Display.getDefault().getActiveShell(), editor); dialog.open(); } } RefreshNodeAction.java000066400000000000000000000044131203611042400436730ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/popup/actionspackage org.tigris.subversion.subclipse.graph.popup.actions; import java.util.List; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.graph.cache.Node; import org.tigris.subversion.subclipse.graph.editors.GraphBackgroundTask; import org.tigris.subversion.subclipse.graph.editors.RevisionEditPart; import org.tigris.subversion.subclipse.graph.editors.RevisionGraphEditor; import org.tigris.subversion.subclipse.graph.editors.RevisionGraphEditorInput; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.SVNRevision; public class RefreshNodeAction extends Action { private List selectedRevisions; private RevisionGraphEditor editor; public RefreshNodeAction(List selectedRevisions, RevisionGraphEditor editor) { super(); this.editor = editor; this.selectedRevisions = selectedRevisions; setText(Policy.bind("RefreshNodeAction.title")); //$NON-NLS-1$ } public void run() { IResource resource = ((RevisionGraphEditorInput)editor.getEditorInput()).getResource(); ISVNRemoteResource remoteResource = ((RevisionGraphEditorInput)editor.getEditorInput()).getRemoteResource(); GraphBackgroundTask task; if (resource == null) task = new GraphBackgroundTask(SVNUIPlugin.getActivePage().getActivePart(), editor.getViewer(), editor, remoteResource); else task = new GraphBackgroundTask(SVNUIPlugin.getActivePage().getActivePart(), editor.getViewer(), editor, resource); task.setGetNewRevisions(false); SVNRevision[] revisions = new SVNRevision[selectedRevisions.size()]; Node[] nodes = new Node[selectedRevisions.size()]; for (int i = 0; i < selectedRevisions.size(); i++) { nodes[i] = (Node)((RevisionEditPart)selectedRevisions.get(i)).getModel(); revisions[i] = new SVNRevision.Number(nodes[i].getRevision()); } task.setRefreshRevisions(revisions, nodes); try { task.run(); } catch (Exception e) { MessageDialog.openError(Display.getDefault().getActiveShell(), Policy.bind("RefreshNodeAction.title"), e.getMessage()); //$NON-NLS-1$ } } } RemoteResourceViewGraphAction.java000066400000000000000000000033561203611042400462540ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/popup/actionspackage org.tigris.subversion.subclipse.graph.popup.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.graph.Activator; import org.tigris.subversion.subclipse.graph.editors.RevisionGraphEditorInput; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.actions.SVNAction; public class RemoteResourceViewGraphAction extends SVNAction { protected void execute(IAction action) throws InvocationTargetException, InterruptedException { run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) { ISVNRemoteResource[] resources = getSelectedRemoteResources(); if (resources.length == 0) resources = getSelectedRemoteFolders(); try { if (resources.length > 0) { getTargetPage().openEditor( new RevisionGraphEditorInput(resources[0]), "org.tigris.subversion.subclipse.graph.editors.revisionGraphEditor"); } } catch (Exception e) { Activator.handleError(e); Activator.showErrorDialog(getErrorTitle(), e); } } }, false /* cancelable */, PROGRESS_BUSYCURSOR); } protected String getErrorTitle() { return Policy.bind("ViewGraphAction.viewGraph"); //$NON-NLS-1$ } protected boolean isEnabled() throws TeamException { ISVNRemoteResource[] resources = getSelectedRemoteResources(); if (resources.length == 1) return true; if (resources.length == 0 && getSelectedRemoteFolders().length == 1) return true; return false; } } RevisionDetailsAction.java000066400000000000000000000065361203611042400446030ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/popup/actionspackage org.tigris.subversion.subclipse.graph.popup.actions; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.commands.GetLogsCommand; import org.tigris.subversion.subclipse.core.history.AliasManager; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.resources.RemoteFile; import org.tigris.subversion.subclipse.graph.cache.Node; import org.tigris.subversion.subclipse.graph.editors.RevisionGraphEditor; import org.tigris.subversion.subclipse.graph.editors.RevisionGraphEditorInput; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.dialogs.ShowRevisionsDialog; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class RevisionDetailsAction extends Action { private Node node; private RevisionGraphEditor editor; private ISVNRemoteResource remoteResource; private ILogEntry logEntry; private boolean includeTags; public RevisionDetailsAction(Node node, RevisionGraphEditor editor) { super(); this.node = node; this.editor = editor; setText("Revision info..."); } public void run() { remoteResource = null; logEntry = null; includeTags = SVNUIPlugin.getPlugin().getPreferenceStore().getBoolean(ISVNUIConstants.PREF_SHOW_TAGS_IN_REMOTE); BusyIndicator.showWhile(Display.getDefault(), new Runnable() { public void run() { try { RevisionGraphEditorInput input = (RevisionGraphEditorInput)editor.getEditorInput(); ISVNInfo info = input.getInfo(); ISVNRepositoryLocation repository = SVNProviderPlugin.getPlugin().getRepository(info.getRepository().toString()); remoteResource = new RemoteFile(repository, new SVNUrl(repository.getLocation() + node.getPath()), new SVNRevision.Number(node.getRevision())); AliasManager tagManager = null; if (includeTags) tagManager = new AliasManager(remoteResource.getUrl()); SVNRevision pegRevision = new SVNRevision.Number(node.getRevision()); SVNRevision revisionStart = new SVNRevision.Number(node.getRevision()); SVNRevision revisionEnd = new SVNRevision.Number(node.getRevision()); GetLogsCommand logCmd = new GetLogsCommand(remoteResource, pegRevision, revisionStart, revisionEnd, false, 0, tagManager, true); logCmd.run(null); ILogEntry[] logEntries = logCmd.getLogEntries(); if (logEntries != null && logEntries.length > 0) { logEntry = logEntries[0]; } } catch (Exception e) { MessageDialog.openError(Display.getDefault().getActiveShell(), "Revision Info", e.getMessage()); } } }); if (logEntry != null) { ShowRevisionsDialog dialog = new ShowRevisionsDialog(Display.getDefault().getActiveShell(), logEntry, remoteResource, includeTags, null); dialog.setTitle("Revision Info"); dialog.setSelectFirst(true); dialog.open(); } } } SetCommitPropertiesAction.java000066400000000000000000000104311203611042400454450ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/popup/actionspackage org.tigris.subversion.subclipse.graph.popup.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.Action; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.commands.ChangeCommitPropertiesCommand; import org.tigris.subversion.subclipse.graph.cache.Node; import org.tigris.subversion.subclipse.graph.editors.NodeFigure; import org.tigris.subversion.subclipse.graph.editors.NodeTooltipFigure; import org.tigris.subversion.subclipse.graph.editors.RevisionGraphEditor; import org.tigris.subversion.subclipse.graph.editors.RevisionGraphEditorInput; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.dialogs.SetCommitPropertiesDialog; import org.tigris.subversion.subclipse.ui.settings.ProjectProperties; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.SVNRevision; public class SetCommitPropertiesAction extends Action { private NodeFigure nodeFigure; private Node node; private RevisionGraphEditor editor; public SetCommitPropertiesAction(NodeFigure nodeFigure, RevisionGraphEditor editor) { super(); this.nodeFigure = nodeFigure; this.editor = editor; node = nodeFigure.getNode(); setText("Set commit properties..."); } public void run() { try { IResource resource = ((RevisionGraphEditorInput)editor.getEditorInput()).getResource(); ISVNRemoteResource remoteResource = ((RevisionGraphEditorInput)editor.getEditorInput()).getRemoteResource(); ISVNInfo info = ((RevisionGraphEditorInput)editor.getEditorInput()).getInfo(); final ProjectProperties projectProperties = (resource != null) ? ProjectProperties .getProjectProperties(resource) : ProjectProperties.getProjectProperties(remoteResource); SVNRevision.Number revision = new SVNRevision.Number(node.getRevision()); SetCommitPropertiesDialog dialog = new SetCommitPropertiesDialog(Display.getDefault().getActiveShell(), revision, resource, projectProperties); dialog.setOldAuthor(node.getAuthor()); dialog.setOldComment(node.getMessage()); if (dialog.open() == SetCommitPropertiesDialog.OK) { final String author; final String commitComment; if(node.getAuthor().equals(dialog.getAuthor())) author = null; else author = dialog.getAuthor(); if(node.getMessage().equals(dialog.getComment())) commitComment = null; else commitComment = dialog.getComment(); ISVNRepositoryLocation repository = SVNProviderPlugin.getPlugin().getRepository(info.getRepository().toString()); final ChangeCommitPropertiesCommand command = new ChangeCommitPropertiesCommand(repository, revision, commitComment, author); PlatformUI.getWorkbench().getProgressService().run(true, true, new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { try { command.run(monitor); } catch(SVNException e) { throw new InvocationTargetException(e); } finally { if (command.isAuthorChanged()) node.setAuthor(author); if (command.isLogMessageChanged()) node.setMessage(commitComment); if (command.isAuthorChanged() || command.isLogMessageChanged()) { nodeFigure.setToolTip(new NodeTooltipFigure(node)); } } } }); } } catch (Exception e) { SVNUIPlugin.openError(Display.getDefault().getActiveShell(), null, null, e, SVNUIPlugin.LOG_TEAM_EXCEPTIONS); } } } SynchronizeViewGraphAction.java000066400000000000000000000033671203611042400456260ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/popup/actionspackage org.tigris.subversion.subclipse.graph.popup.actions; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.team.ui.synchronize.ISynchronizeModelElement; import org.eclipse.ui.actions.ActionDelegate; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; public class SynchronizeViewGraphAction extends ActionDelegate { private IStructuredSelection fSelection; public SynchronizeViewGraphAction() { super(); } public void run(IAction action) { ISynchronizeModelElement element = (ISynchronizeModelElement)fSelection.getFirstElement(); IResource resource = element.getResource(); ViewGraphAction viewGraphAction = new ViewGraphAction(); viewGraphAction.setSelectedResource(resource); viewGraphAction.run(null); } public void selectionChanged(IAction action, ISelection sel) { if (sel instanceof IStructuredSelection) { fSelection= (IStructuredSelection) sel; if (action != null) { action.setEnabled(isEnabledForSelection()); } } } private boolean isEnabledForSelection() { if (fSelection == null || fSelection.isEmpty()) return false; ISynchronizeModelElement element = (ISynchronizeModelElement)fSelection.getFirstElement(); IResource resource = element.getResource(); if (resource == null) return false; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); try { return (svnResource != null && svnResource.isManaged() && !svnResource.isAdded()); } catch (SVNException e) { return false; } } } UpdateCacheAction.java000066400000000000000000000023011203611042400436270ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/popup/actionspackage org.tigris.subversion.subclipse.graph.popup.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.graph.editors.GraphBackgroundTask; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.actions.SVNAction; public class UpdateCacheAction extends SVNAction { protected void execute(IAction action) throws InvocationTargetException, InterruptedException { final ISVNRemoteFolder[] selectedFolders = getSelectedRemoteFolders(); GraphBackgroundTask task = new GraphBackgroundTask(SVNUIPlugin.getActivePage().getActivePart(), null, null, selectedFolders[0]); try { task.run(); } catch (Exception e) { MessageDialog.openError(Display.getDefault().getActiveShell(), Policy.bind("UpdateCacheAction.title"), e.getMessage()); //$NON-NLS-1$ } } protected boolean isEnabled() throws TeamException { return true; } } ViewGraphAction.java000066400000000000000000000064021203611042400433630ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/src/org/tigris/subversion/subclipse/graph/popup/actionspackage org.tigris.subversion.subclipse.graph.popup.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.graph.Activator; import org.tigris.subversion.subclipse.graph.editors.RevisionGraphEditorInput; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.actions.WorkbenchWindowAction; public class ViewGraphAction extends WorkbenchWindowAction { private IResource selectedResource; public void execute(IAction action) throws InterruptedException, InvocationTargetException { if (action != null && !action.isEnabled()) { action.setEnabled(true); } else { run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) { IResource[] resources = getSelectedResources(); try { if (resources.length > 0) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resources[0]); ISVNRemoteResource remoteResource = svnResource.getBaseResource(); if (remoteResource != null) { String repoPath = remoteResource.getRepositoryRelativePath(); if (repoPath == null || repoPath.length() == 0) { MessageDialog.openError(Display.getDefault().getActiveShell(), Policy.bind("ViewGraphAction.0"), Policy.bind("ViewGraphAction.1")); //$NON-NLS-1$ //$NON-NLS-2$ return; } } // IEditorPart part = getTargetPage().openEditor( new RevisionGraphEditorInput(resources[0]), "org.tigris.subversion.subclipse.graph.editors.revisionGraphEditor"); //$NON-NLS-1$ } } catch (Exception e) { Activator.handleError(e); Activator.showErrorDialog(getErrorTitle(), e); } } }, false /* cancelable */, PROGRESS_BUSYCURSOR); } } protected String getErrorTitle() { return Policy.bind("ViewGraphAction.viewGraph"); //$NON-NLS-1$ } /** * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForMultipleResources() */ protected boolean isEnabledForMultipleResources() { return false; } /** * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForAddedResources() */ protected boolean isEnabledForAddedResources() { return false; } /** * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForCopiedResources() */ protected boolean isEnabledForCopiedResources() { return true; } protected IResource[] getSelectedResources() { if (selectedResource != null) { IResource[] selectedResources = { selectedResource }; return selectedResources; } return super.getSelectedResources(); } public void setSelectedResource(IResource selectedResource) { this.selectedResource = selectedResource; } protected boolean needsToSaveDirtyEditors() { return false; } }eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.graph/svn.gif000066400000000000000000000021011203611042400260570ustar00rootroot00000000000000GIF89a ÷„žÌÄÒ䤺Üäêô”®Ô´ÆÜÔÞìôöüŒ¦ÌÌÚì¬ÂÜìòô¼Î䤶ÔÜæôüþü„¢ÌÌÖ쬾Üäîôœ²Ô´Æäôúü”ªÔÌÖ䬺ܜ®ÔÜâ씪ÌÔÚì´ÂÜìòüÄÎääæôŒ¢Ììîô¼ÊäüúüV>¨äæe¨ç8ž åégî×|wp 8‘Õ|wÿàÿÿÒÿÿEÿÿÿm>.‘Õ|wgŽ †‚××|wZÐÞ´Ônw`ÿ<ÿ ÿÿ 8Ë ´Ôw¸¥¨bÐçÔwÉC{3~G¼çÀÖ„×Zÿ<ÿæ ÿÿ ÿ˜ÿÕÿÔÿwÞÈén C3>@ZŸ€|Hå/Ù‹‚Ô|wÛˆ‚Ú|w ¨ åP¸\bæ`l¬ÕÔw„@äZ4`æÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m=‘|Jç=ö*€‚||„ÜæíÂÿ*ÿ‚ÿ|ÿ¸bŒç¾Ž>Ø‚K|Wÿlöÿç€ÿ|ÿpˆ{æçðN¸÷ b>ç‚|pܾõú>ÕN‚w|H°IpèxOxÁ}ÿ{ÿ„ æè@P¾?>‚‚||1”t@éZ}E8ÿGÿ»ÿGÿ!ù, ÿH° Áƒ*\Ȱ¡Ã‡# @±¢Å‹/v˜ €ÃCbá £ (!\ !2äˆ H¤4A!ƒ Z^Œ“AJ tЙ±‚)!JtçSrpÐ4ãI!X¡êŲj­à#±$4°ÁÁ‚<< pm :`p áC DÔEK¸°áÈ+FÉh›8˜0¡O ¸Y!'Ñb $èZÖ¢± à$[v„ËŒ3 u€@ÖD8ÉXnŠ«uv0€õ§ÏiÛ¦ªqAØ 2pÕ‰“y!8@?p¼j‚$xLÊ€;Ó²Y/p0téŠåÙŸQ¢ýûøóë/;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn.feature/000077500000000000000000000000001203611042400262715ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn.feature/.project000066400000000000000000000006411203611042400277410ustar00rootroot00000000000000 org.tigris.subversion.subclipse.mylyn.feature org.eclipse.pde.FeatureBuilder org.eclipse.pde.FeatureNature eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn.feature/.settings/000077500000000000000000000000001203611042400302075ustar00rootroot00000000000000org.eclipse.mylar.tasklist.prefs000066400000000000000000000002231203611042400363600ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn.feature/.settings#Wed May 23 09:39:00 EDT 2007 eclipse.preferences.version=1 project.repository.kind=issuezilla project.repository.url=http\://subclipse.tigris.org eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn.feature/build.properties000066400000000000000000000001731203611042400315070ustar00rootroot00000000000000bin.includes = feature.xml,\ changes.html,\ feature.properties,\ license.html eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn.feature/changes.html000066400000000000000000000024451203611042400305740ustar00rootroot00000000000000 Subclipse Integration for Mylyn Changelog

Subclipse Integration for Mylyn Changelog

This file documents all of the changes that have been made to the Subclipse/Mylyn Integration.


Version 2.0.0
Not released yet

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse_mylyn/2.0.0

  • Rename and adjust code for Mylar/Mylyn name change..

Version 1.0.1
7 December 2006

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse_mylar/1.0.1

  • Tweaks for final Mylar changes.

Version 1.0.0
7 December 2006

from: /trunk
http://subclipse.tigris.org/svn/subclipse/tags/subclipse_mylar/1.0.0

  • Initial version from Eugene Kuleshov and Mik Kersten.
eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn.feature/feature.properties000066400000000000000000000065111203611042400320450ustar00rootroot00000000000000#****************************************************************************** # Copyright (c) 2004, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ # feature.properties # contains externalized strings for feature.xml # "%foo" in feature.xml corresponds to the key "foo" in this file # java.io.Properties file (ISO 8859-1 with "\" escapes) # This file should be translated. # "featureName" property - name of the feature featureName=Subclipse Integration for Mylyn # "providerName" property - name of the company that provides the feature providerName=Tigris.org # "updateSiteName" property - label for the update site updateSiteName=Subclipse update site # "description" property - description of the feature description=Provides integration features between Subclipse and Mylyn,\ such as automatic change set management and linking projects to issue tracking systems\ based on svn properties. # "changesURL" property - URL of the "Change Log" # do not translate value - just change to point to a locale-specific HTML page changesURL=changes.html # "licenseURL" property - URL of the "Feature License" # do not translate value - just change to point to a locale-specific HTML page licenseURL=license.html # "license" property - text of the "Feature Update License" # should be plain text version of license agreement pointed to be "licenseURL" license=\ Subclipse Software User Agreement\n\ 11th April, 2006\n\ \n\ Subclipse is licensed under the terms of the Eclipse Public\n\ License v1.0. http://www.eclipse.org/legal/epl-v10.html\n\ \n\ Applicable Licenses\n\ \n\ Subclipse is built upon a number of other open source\n\ technologies and products. Here is a list of those products\n\ with links to their licenses.\n\ \n\ svnClientAdapter: Part of the overall Subclipse project,\n\ svnClientAdapter presents a plugable high-level interface\n\ to the Subversion repository. svnClientAdapter is licensed\n\ under the Eclipse Public License v1.0.\n\ http://www.eclipse.org/legal/epl-v10.html\n\ \n\ Depending on the adapter you choose in your preferences, the\n\ following products and licenses are involved.\n\ \n\ Subversion/JavaHL: JavaHL is a high-level Java language binding\n\ to the Subversion "C" libraries and is part of the official\n\ Subversion source distribution. Subversion is licensed under\n\ the CollabNet license.\n\ http://subversion.tigris.org/project_license.html\n\ \n\ SVNKit: SVNKit is a "pure Java" implementation of the\n\ Subversion network protocols and working copy formats.\n\ SVNKit is licensed under the TMate license.\n\ http://svnkit.com/licensing/index.html\n\ \n\ Ganymed SSH-2: SVNKit uses the Ganymed SSH-2 library to support\n\ the svn+ssh:// protocol. Ganymed SSH-2 is licensed under the\n\ Ganymed license.\n\ http://www.ganymed.ethz.ch/ssh2/LICENSE.txt\n\ \n\ IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS\n\ AND CONDITIONS PRIOR TO USE OF THIS CONTENT.\n ########### end of license property ##########################################eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn.feature/feature.xml000066400000000000000000000033221203611042400304460ustar00rootroot00000000000000 %description http://subclipse.tigris.org/ %license eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn.feature/license.html000066400000000000000000000031001203611042400305730ustar00rootroot00000000000000 Subclipse License

Subclipse Software User Agreement

11th April, 2006

Subclipse

Subclipse is licensed under the terms of the Eclipse Public License v1.0.

Applicable Licenses

Subclipse is built upon a number of other open source technologies and products. Here is a list of those products with links to their licenses.

svnClientAdapter: Part of the overall Subclipse project, svnClientAdapter presents a pluggable high-level interface to the Subversion repository. svnClientAdapter is licensed under the Eclipse Public License v1.0. Depending on the adapter you choose in your preferences, the following products and licenses are involved.

Subversion/JavaHL: JavaHL is a high-level Java language binding to the Subversion "C" libraries and is part of the official Subversion source distribution. Subversion is licensed under the CollabNet license.

SVNKit: SVNKit is a "pure Java" implementation of the Subversion network protocols and working copy formats. SVNKit is licensed under the TMate license.

Ganymed SSH-2: SVNKit uses the Ganymed SSH-2 library to support the svn+ssh:// protocol. Ganymed SSH-2 is licensed under a BSD-style license.

IT IS YOUR OBLIGATION TO READ AND ACCEPT ALL SUCH TERMS AND CONDITIONS PRIOR TO USE OF THIS CONTENT.

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/000077500000000000000000000000001203611042400246375ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/.classpath000066400000000000000000000007511203611042400266250ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/.project000066400000000000000000000012721203611042400263100ustar00rootroot00000000000000 org.tigris.subversion.subclipse.mylyn org.eclipse.jdt.core.javabuilder org.eclipse.pde.ManifestBuilder org.eclipse.pde.SchemaBuilder org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/.settings/000077500000000000000000000000001203611042400265555ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/.settings/org.eclipse.jdt.core.prefs000066400000000000000000000005121203611042400335350ustar00rootroot00000000000000#Tue Dec 05 14:09:16 EST 2006 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 org.eclipse.jdt.core.compiler.compliance=1.5 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.source=1.5 org.eclipse.mylar.tasklist.prefs000066400000000000000000000002271203611042400347320ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/.settings#Wed May 23 09:33:35 EDT 2007 eclipse.preferences.version=1 project.repository.kind=issuezilla project.repository.url=http\://subclipse.tigris.org eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/META-INF/000077500000000000000000000000001203611042400257775ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/META-INF/MANIFEST.MF000066400000000000000000000015141203611042400274320ustar00rootroot00000000000000Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-Vendor: %pluginProvider Bundle-Version: 3.0.0 Bundle-Localization: plugin Bundle-SymbolicName: org.tigris.subversion.subclipse.mylyn;singleton:=true Bundle-RequiredExecutionEnvironment: J2SE-1.5 Bundle-Activator: org.tigris.subversion.subclipse.mylyn.SubclipseTeamPlugin Require-Bundle: org.eclipse.core.resources, org.eclipse.core.runtime, org.eclipse.team.core, org.tigris.subversion.subclipse.core, org.tigris.subversion.subclipse.ui, org.eclipse.ui, org.eclipse.mylyn.tasks.core;bundle-version="[3.0.0,4.0.0)", org.eclipse.mylyn.tasks.ui;bundle-version="[3.0.0,4.0.0)", org.eclipse.mylyn.team.ui;bundle-version="[3.0.0,4.0.0)" Bundle-ActivationPolicy: lazy Export-Package: org.tigris.subversion.subclipse.mylyn Bundle-ClassPath: . eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/about.html000066400000000000000000000023411203611042400266370ustar00rootroot00000000000000 About

About This Content

5th December, 2006

Subclipse Integration for Mylyn

Subclipse is an Eclipse team provider for the Subversion version control system.

This product includes software developed by CollabNet (http://www.Collab.Net/)

This product includes SVNKit. (http://svnkit.com/)
Copyright (c) 2004-2006 TMate Software. All rights reserved.

SVNKit is licensed under the terms of the TMate License. (http://svnkit.com/licensing/index.html

This offering is based on technology from the Eclipse Project http://www.eclipse.org.

Subclipse includes icons from the TortoiseSVN project. Those icons are licensed under the terms of the GPL.

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/about.ini000066400000000000000000000017151203611042400264560ustar00rootroot00000000000000# about.ini # contains information about a feature # java.io.Properties file (ISO 8859-1 with "\" escapes) # "%key" are externalized strings defined in about.properties # This file does not need to be translated. appName=Subclipse Integration for Mylyn # Property "aboutText" contains blurb for "About" dialog (translated) aboutText=%blurb # Property "windowImage" contains path to window icon (16x16) # needed for primary features only # Property "featureImage" contains path to feature image (32x32) featureImage=svn.gif # Property "aboutImage" contains path to product image (500x330 or 115x164) # needed for primary features only # Property "appName" contains name of the application (translated) # needed for primary features only # Property "welcomePage" contains path to welcome page (special XML-based format) # Property "welcomePerspective" contains the id of the perspective in which the # welcome page is to be opened. # optional eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/about.properties000066400000000000000000000012421203611042400300660ustar00rootroot00000000000000# about.properties # contains externalized strings for about.ini # java.io.Properties file (ISO 8859-1 with "\" escapes) # fill-ins are supplied by about.mappings # This file should be translated. blurb=Subclipse Integration for Mylyn\n\ \n\ Subclipse is an Eclipse team provider for the Subversion version\n\ control system. Visit http://subclipse.tigris.org/\n\ \n\ This product includes software developed by CollabNet (http://www.Collab.Net/)\n\ \n\ This product includes SVNKit. (http://svnkit.com/)\n\ Copyright (c) 2004-2006 TMate Software. All rights reserved.\n\ \n\ This offering is based on technology from the Eclipse Project.\n\ Visit http://www.eclipse.org eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/build.properties000066400000000000000000000007021203611042400300530ustar00rootroot00000000000000output.. = bin/ bin.includes = META-INF/,\ .,\ plugin.xml,\ plugin.properties,\ about.html,\ about.ini,\ about.properties,\ epl-v10.html,\ svn.gif src.includes = META-INF/,\ src/,\ plugin.xml,\ plugin.properties,\ build.properties jars.compile.order = . source.. = src/ eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/epl-v10.html000066400000000000000000000402301203611042400267100ustar00rootroot00000000000000 Eclipse Public License - Version 1.0

Eclipse Public License - v 1.0

THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.

1. DEFINITIONS

"Contribution" means:

a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
b) in the case of each subsequent Contributor:

i) changes to the Program, and

ii) additions to the Program;

where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.

"Contributor" means any person or entity that distributes the Program.

"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.

"Program" means the Contributions distributed in accordance with this Agreement.

"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.

2. GRANT OF RIGHTS

a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.

b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.

c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.

d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.

3. REQUIREMENTS

A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:

a) it complies with the terms and conditions of this Agreement; and

b) its license agreement:

i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;

ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;

iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and

iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.

When the Program is made available in source code form:

a) it must be made available under this Agreement; and

b) a copy of this Agreement must be included with each copy of the Program.

Contributors may not remove or alter any copyright notices contained within the Program.

Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.

4. COMMERCIAL DISTRIBUTION

Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.

For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.

5. NO WARRANTY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.

6. DISCLAIMER OF LIABILITY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

7. GENERAL

If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.

If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.

All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.

Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.

This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

 

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/plugin.properties000066400000000000000000000011431203611042400302520ustar00rootroot00000000000000#****************************************************************************** # Copyright (c) 2003, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Eugene Kuleshov - initial API and implementation #*****************************************************************************/ pluginName = Subclipse Integration for Mylyn 3.x pluginProvider = tigris.org eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/plugin.xml000066400000000000000000000034161203611042400266630ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/src/000077500000000000000000000000001203611042400254265ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/src/org/000077500000000000000000000000001203611042400262155ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/src/org/tigris/000077500000000000000000000000001203611042400275165ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/src/org/tigris/subversion/000077500000000000000000000000001203611042400317155ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/src/org/tigris/subversion/subclipse/000077500000000000000000000000001203611042400337065ustar00rootroot00000000000000000077500000000000000000000000001203611042400347775ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/src/org/tigris/subversion/subclipse/mylynSubclipseCommitWorkflowProvider.java000066400000000000000000000015621203611042400442160ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/src/org/tigris/subversion/subclipse/mylynpackage org.tigris.subversion.subclipse.mylyn; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.mylyn.internal.team.ui.AbstractCommitWorkflowProvider; import org.tigris.subversion.subclipse.ui.actions.CommitAction; public class SubclipseCommitWorkflowProvider extends AbstractCommitWorkflowProvider { public boolean hasOutgoingChanges(IResource[] resources) { CommitAction commitAction = new CommitAction(""); commitAction.setSelectedResources(resources); return commitAction.hasOutgoingChanges(); } public void commit(IResource[] resources) { CommitAction commitAction = new CommitAction(""); commitAction.setSelectedResources(resources); try { commitAction.execute(null); } catch (InvocationTargetException ex) { // ignore } catch (InterruptedException ex) { // ignore } } } SubclipseLinkedTaskInfo.java000066400000000000000000000120611203611042400423610ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/src/org/tigris/subversion/subclipse/mylyn/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Eugene Kuleshov - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.mylyn; import org.eclipse.core.resources.IResource; import org.eclipse.mylyn.internal.tasks.core.AbstractTask; import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager; import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; import org.eclipse.mylyn.team.ui.AbstractTaskReference; import org.eclipse.team.core.TeamException; import org.eclipse.team.core.synchronize.SyncInfoTree; import org.eclipse.team.internal.core.subscribers.CheckedInChangeSet; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNResource; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.history.LogEntry; import org.tigris.subversion.subclipse.core.sync.SVNStatusSyncInfo; import org.tigris.subversion.subclipse.ui.settings.ProjectProperties; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNLogMessage; import org.tigris.subversion.svnclientadapter.ISVNProperty; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * ILinkedTaskInfo implementation for lazy loading of the Subversion info. * * @author Eugene Kuleshov */ class SubclipseLinkedTaskInfo extends AbstractTaskReference { private IResource resource; private CheckedInChangeSet changeSet; private LogEntry logEntry; private String repositoryUrl; private String taskFullUrl; private String comment; SubclipseLinkedTaskInfo(IResource resource, CheckedInChangeSet changeSet) { this.resource = resource; this.changeSet = changeSet; } SubclipseLinkedTaskInfo(LogEntry logEntry) { this.logEntry = logEntry; this.comment = logEntry.getComment(); } public String getRepositoryUrl() { if(repositoryUrl==null) { init(); } return repositoryUrl; } public String getTaskUrl() { if(taskFullUrl==null) { init(); } return taskFullUrl; } public AbstractTask getTask() { return null; } public String getTaskId() { return null; } public String getText() { if(comment==null && changeSet!=null) { try { SyncInfoTree syncInfoSet = changeSet.getSyncInfoSet(); SVNStatusSyncInfo info = (SVNStatusSyncInfo) syncInfoSet.getSyncInfo(resource); ISVNRemoteResource remoteResource = (ISVNRemoteResource) info.getRemote(); SVNRevision rev = remoteResource.getLastChangedRevision(); ISVNLogMessage[] messages = remoteResource.getLogMessages(rev, rev, SVNRevision.START, false, false, 1, false); comment = messages[0].getMessage(); } catch (TeamException ex) { comment = changeSet.getComment(); } } return comment; } private void init() { TaskRepositoryManager repositoryManager = TasksUiPlugin.getRepositoryManager(); String[] urls = null; ProjectProperties props = null; try { if(resource!=null) { props = ProjectProperties.getProjectProperties(resource); } else if(logEntry!=null) { ISVNResource svnres = logEntry.getResource(); if(svnres!=null) { if(svnres.getResource()!=null) { props = ProjectProperties.getProjectProperties(svnres.getResource()); } else { ISVNClientAdapter client = SVNProviderPlugin.getPlugin() .getSVNClientManager().getSVNClient(); SVNProviderPlugin.disableConsoleLogging(); ISVNProperty[] properties = client.getProperties(svnres.getUrl()); SVNProviderPlugin.enableConsoleLogging(); for (int i = 0; i < properties.length; i++) { ISVNProperty property = properties[i]; if ("bugtraq:url".equals(property.getName())) { repositoryUrl = SubclipseTeamPlugin.getRepository( property.getValue(), repositoryManager).getRepositoryUrl(); // comments? } } } } } } catch (Exception ex) { // ignore? SVNProviderPlugin.enableConsoleLogging(); } if (props != null) { if (repositoryUrl == null) { repositoryUrl = SubclipseTeamPlugin.getRepository(props.getUrl(), repositoryManager).getRepositoryUrl(); } urls = props.getLinkList(getText()).getUrls(); } if (urls == null || urls.length == 0) { urls = ProjectProperties.getUrls(getText()).getUrls(); } if (urls != null && urls.length > 0) { taskFullUrl = urls[0]; } } } SubclipseLinkedTaskInfoAdapterFactory.java000066400000000000000000000040751203611042400452200ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/src/org/tigris/subversion/subclipse/mylyn/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Eugene Kuleshov - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.mylyn; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdapterFactory; import org.eclipse.mylyn.team.ui.AbstractTaskReference; import org.eclipse.team.internal.core.subscribers.CheckedInChangeSet; import org.tigris.subversion.subclipse.core.history.LogEntry; import org.tigris.subversion.subclipse.ui.subscriber.SVNChangeSetCollector; /** * AdapterFactory for adapting to AbstractTaskReference. * * @author Eugene Kuleshov */ public class SubclipseLinkedTaskInfoAdapterFactory implements IAdapterFactory { private static final Class[] ADAPTER_TYPES = new Class[] { AbstractTaskReference.class }; public Class[] getAdapterList() { return ADAPTER_TYPES; } public Object getAdapter(Object object, Class adapterType) { if(adapterType != AbstractTaskReference.class) { return null; } if(object instanceof LogEntry) { return adaptSubclipseLogEntry((LogEntry) object); } if(object instanceof SVNChangeSetCollector.SVNCheckedInChangeSet) { return adaptSubclipseChangeset((CheckedInChangeSet) object); } return null; } private static AbstractTaskReference adaptSubclipseLogEntry(LogEntry logEntry) { return new SubclipseLinkedTaskInfo(logEntry); } private static AbstractTaskReference adaptSubclipseChangeset(final CheckedInChangeSet set) { IResource[] resources = set.getResources(); IResource res = resources[0]; return new SubclipseLinkedTaskInfo(res, set); } } SubclipseTaskRepositoryLinkProvider.java000066400000000000000000000031331203611042400450470ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/src/org/tigris/subversion/subclipse/mylyn/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Eugene Kuleshov - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.mylyn; import org.eclipse.core.resources.IResource; import org.eclipse.mylyn.tasks.core.IRepositoryManager; import org.eclipse.mylyn.tasks.core.TaskRepository; import org.eclipse.mylyn.tasks.ui.AbstractTaskRepositoryLinkProvider; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.settings.ProjectProperties; /** * Task Repository link provider based on Subversion properties * * @see http://markphip.blogspot.com/2007/01/integrating-subversion-with-your-issue.html * * @author Eugene Kuleshov */ public class SubclipseTaskRepositoryLinkProvider extends AbstractTaskRepositoryLinkProvider { public TaskRepository getTaskRepository(IResource resource, IRepositoryManager repositoryManager) { try { ProjectProperties props = ProjectProperties.getProjectProperties(resource); if(props!=null) { return SubclipseTeamPlugin.getRepository(props.getUrl(), repositoryManager); } } catch (SVNException ex) { // ignore } return null; } } SubclipseTeamChangeSetProvider.java000066400000000000000000000020741203611042400437020ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/src/org/tigris/subversion/subclipse/mylyn/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Eugene Kuleshov - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.mylyn; import org.eclipse.mylyn.team.ui.AbstractActiveChangeSetProvider; import org.eclipse.team.internal.core.subscribers.ActiveChangeSetManager; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; /** * Team repository provider for Mylyn. * * @author Eugene Kuleshov */ public class SubclipseTeamChangeSetProvider extends AbstractActiveChangeSetProvider { public ActiveChangeSetManager getActiveChangeSetManager() { return SVNProviderPlugin.getPlugin().getChangeSetManager(); } } SubclipseTeamPlugin.java000066400000000000000000000043531203611042400415660ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/src/org/tigris/subversion/subclipse/mylyn/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Eugene Kuleshov - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.mylyn; import java.util.Iterator; import java.util.List; import org.eclipse.mylyn.tasks.core.IRepositoryManager; import org.eclipse.mylyn.tasks.core.TaskRepository; import org.eclipse.ui.IStartup; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; /** * The activator class controls the plug-in life cycle * * @author Eugene Kuleshov */ public class SubclipseTeamPlugin extends AbstractUIPlugin implements IStartup { public static final String PLUGIN_ID = "org.tigris.subversion.subclipse.mylyn"; private static SubclipseTeamPlugin plugin; public SubclipseTeamPlugin() { } public void earlyStartup() { // all done in start } /* * (non-Javadoc) * @see org.eclipse.core.runtime.Plugins#start(org.osgi.framework.BundleContext) */ public void start(BundleContext context) throws Exception { super.start(context); plugin = this; } /* * (non-Javadoc) * @see org.eclipse.core.runtime.Plugin#stop(org.osgi.framework.BundleContext) */ public void stop(BundleContext context) throws Exception { plugin = null; super.stop(context); } public static TaskRepository getRepository(String url, IRepositoryManager repositoryManager) { if(url!=null) { List repositories = repositoryManager.getAllRepositories(); for (Iterator it = repositories.iterator(); it.hasNext();) { TaskRepository repository = (TaskRepository) it.next(); if (url.startsWith(repository.getUrl())) { return repository; } } } return null; } /** * Returns the shared instance * * @return the shared instance */ public static SubclipseTeamPlugin getDefault() { return plugin; } } eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.mylyn/svn.gif000066400000000000000000000021011203611042400261260ustar00rootroot00000000000000GIF89a ÷„žÌÄÒ䤺Üäêô”®Ô´ÆÜÔÞìôöüŒ¦ÌÌÚì¬ÂÜìòô¼Î䤶ÔÜæôüþü„¢ÌÌÖ쬾Üäîôœ²Ô´Æäôúü”ªÔÌÖ䬺ܜ®ÔÜâ씪ÌÔÚì´ÂÜìòüÄÎääæôŒ¢Ììîô¼ÊäüúüV>¨äæe¨ç8ž åégî×|wp 8‘Õ|wÿàÿÿÒÿÿEÿÿÿm>.‘Õ|wgŽ †‚××|wZÐÞ´Ônw`ÿ<ÿ ÿÿ 8Ë ´Ôw¸¥¨bÐçÔwÉC{3~G¼çÀÖ„×Zÿ<ÿæ ÿÿ ÿ˜ÿÕÿÔÿwÞÈén C3>@ZŸ€|Hå/Ù‹‚Ô|wÛˆ‚Ú|w ¨ åP¸\bæ`l¬ÕÔw„@äZ4`æÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m=‘|Jç=ö*€‚||„ÜæíÂÿ*ÿ‚ÿ|ÿ¸bŒç¾Ž>Ø‚K|Wÿlöÿç€ÿ|ÿpˆ{æçðN¸÷ b>ç‚|pܾõú>ÕN‚w|H°IpèxOxÁ}ÿ{ÿ„ æè@P¾?>‚‚||1”t@éZ}E8ÿGÿ»ÿGÿ!ù, ÿH° Áƒ*\Ȱ¡Ã‡# @±¢Å‹/v˜ €ÃCbá £ (!\ !2äˆ H¤4A!ƒ Z^Œ“AJ tЙ±‚)!JtçSrpÐ4ãI!X¡êŲj­à#±$4°ÁÁ‚<< pm :`p áC DÔEK¸°áÈ+FÉh›8˜0¡O ¸Y!'Ñb $èZÖ¢± à$[v„ËŒ3 u€@ÖD8ÉXnŠ«uv0€õ§ÏiÛ¦ªqAØ 2pÕ‰“y!8@?p¼j‚$xLÊ€;Ó²Y/p0téŠåÙŸQ¢ýûøóë/;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/000077500000000000000000000000001203611042400246315ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/.classpath000066400000000000000000000004601203611042400266140ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/.project000066400000000000000000000022261203611042400263020ustar00rootroot00000000000000 org.tigris.subversion.subclipse.tests core org.apache.ant org.eclipse.compare org.eclipse.core.boot org.eclipse.core.resources org.eclipse.core.runtime org.eclipse.jdt.core org.eclipse.jdt.launching org.eclipse.team.core org.eclipse.team.ui org.eclipse.ui org.junit ui org.eclipse.jdt.core.javabuilder org.eclipse.pde.ManifestBuilder org.eclipse.pde.SchemaBuilder org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/.settings/000077500000000000000000000000001203611042400265475ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/.settings/org.eclipse.jdt.ui.prefs000066400000000000000000000106241203611042400332210ustar00rootroot00000000000000#Sat Aug 20 23:06:01 CEST 2005 eclipse.preferences.version=1 org.eclipse.jdt.ui.text.custom_code_templates=\r\n eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/META-INF/000077500000000000000000000000001203611042400257715ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/META-INF/MANIFEST.MF000066400000000000000000000011731203611042400274250ustar00rootroot00000000000000Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: org.tigris.subversion.subclipse.test Bundle-SymbolicName: org.tigris.subversion.subclipse.test;singleton:=true Bundle-Version: 0.9.5 Bundle-ClassPath: test.jar Bundle-Localization: plugin Require-Bundle: org.eclipse.core.resources, org.eclipse.jdt.core, org.eclipse.jdt.launching, org.tigris.subversion.subclipse.ui, org.tigris.subversion.subclipse.core, org.apache.ant, org.eclipse.team.core, org.eclipse.core.runtime, org.eclipse.ui.workbench, org.junit, org.eclipse.team.ui, org.eclipse.ui.ide, org.eclipse.jface Bundle-RequiredExecutionEnvironment: J2SE-1.4 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/build.properties000066400000000000000000000001751203611042400300510ustar00rootroot00000000000000source.test.jar = src/ bin.includes = plugin.xml,\ *.jar,\ test.jar,\ META-INF/ eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/plugin.xml000066400000000000000000000001321203611042400266450ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/src/000077500000000000000000000000001203611042400254205ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/src/org/000077500000000000000000000000001203611042400262075ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/src/org/tigris/000077500000000000000000000000001203611042400275105ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/src/org/tigris/subversion/000077500000000000000000000000001203611042400317075ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/src/org/tigris/subversion/subclipse/000077500000000000000000000000001203611042400337005ustar00rootroot00000000000000000077500000000000000000000000001203611042400346005ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/src/org/tigris/subversion/subclipse/testBuildFile.java000066400000000000000000000231531203611042400373060ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/src/org/tigris/subversion/subclipse/test/* * The Apache Software License, Version 1.1 * * Copyright (c) 2001-2002 The Apache Software Foundation. All rights * reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * * 3. The end-user documentation included with the redistribution, if * any, must include the following acknowlegement: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowlegement may appear in the software itself, * if and wherever such third-party acknowlegements normally appear. * * 4. The names "Ant" and "Apache Software * Foundation" must not be used to endorse or promote products derived * from this software without prior written permission. For written * permission, please contact apache@apache.org. * * 5. Products derived from this software may not be called "Apache" * nor may "Apache" appear in their names without prior written * permission of the Apache Group. * * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED 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 APACHE SOFTWARE FOUNDATION OR * ITS 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. * ==================================================================== * * This software consists of voluntary contributions made by many * individuals on behalf of the Apache Software Foundation. For more * information on the Apache Software Foundation, please see * . */ package org.tigris.subversion.subclipse.test; import java.io.File; import java.io.PrintStream; import java.net.URL; import org.apache.tools.ant.BuildEvent; import org.apache.tools.ant.BuildException; import org.apache.tools.ant.BuildListener; import org.apache.tools.ant.Project; import org.apache.tools.ant.ProjectHelper; /** * This file is very similar to BuildFileTest but not abstract and without * test methods * * * @author Nico Seessle * @author Conor MacNeill */ public class BuildFile { protected Project project; private StringBuffer logBuffer; private StringBuffer fullLogBuffer; private StringBuffer outBuffer; private StringBuffer errBuffer; private BuildException buildException; /** * Gets the log the BuildFile object. * only valid if configureProject() has * been called. * @pre logBuffer!=null * @return The log value */ protected String getLog() { return logBuffer.toString(); } /** * Gets the log the BuildFile object. * only valid if configureProject() has * been called. * @pre fullLogBuffer!=null * @return The log value */ protected String getFullLog() { return fullLogBuffer.toString(); } protected String getOutput() { return cleanBuffer(outBuffer); } protected String getError() { return cleanBuffer(errBuffer); } protected BuildException getBuildException() { return buildException; } private String cleanBuffer(StringBuffer buffer) { StringBuffer cleanedBuffer = new StringBuffer(); boolean cr = false; for (int i = 0; i < buffer.length(); i++) { char ch = buffer.charAt(i); if (ch == '\r') { cr = true; continue; } if (!cr) { cleanedBuffer.append(ch); } else { if (ch == '\n') { cleanedBuffer.append(ch); } else { cleanedBuffer.append('\r').append(ch); } } } return cleanedBuffer.toString(); } /** * set up to run the named project * * @param filename name of project file to run */ protected void configureProject(String filename) throws BuildException { logBuffer = new StringBuffer(); fullLogBuffer = new StringBuffer(); project = new org.apache.tools.ant.Project(); project.init(); project.setUserProperty( "ant.file" , new File(filename).getAbsolutePath() ); project.addBuildListener(new AntTestListener()); ProjectHelper helper = ProjectHelper.getProjectHelper(); helper.parse(project, new File(filename)); } /** * execute a target we have set up * @pre configureProject has been called * @param targetName target to run */ protected void executeTarget(String targetName) { PrintStream sysOut = System.out; PrintStream sysErr = System.err; try { sysOut.flush(); sysErr.flush(); outBuffer = new StringBuffer(); PrintStream out = new PrintStream(new AntOutputStream()); System.setOut(out); errBuffer = new StringBuffer(); PrintStream err = new PrintStream(new AntOutputStream()); System.setErr(err); logBuffer = new StringBuffer(); fullLogBuffer = new StringBuffer(); buildException = null; project.executeTarget(targetName); } finally { System.setOut(sysOut); System.setErr(sysErr); } } /** * Get the project which has been configured for a test. * * @return the Project instance for this test. */ protected Project getProject() { return project; } /** * get the directory of the project * @return the base dir of the project */ protected File getProjectDir() { return project.getBaseDir(); } /** * Retrieve a resource from the caller classloader to avoid * assuming a vm working directory. The resource path must be * relative to the package name or absolute from the root path. * @param resource the resource to retrieve its url. * @throws AssertionFailureException if resource is not found. */ protected URL getResource(String resource){ URL url = getClass().getResource(resource); return url; } /** * an output stream which saves stuff to our buffer. */ private class AntOutputStream extends java.io.OutputStream { public void write(int b) { outBuffer.append((char)b); } } /** * our own personal build listener */ private class AntTestListener implements BuildListener { /** * Fired before any targets are started. */ public void buildStarted(BuildEvent event) { } /** * Fired after the last target has finished. This event * will still be thrown if an error occured during the build. * * @see BuildEvent#getException() */ public void buildFinished(BuildEvent event) { } /** * Fired when a target is started. * * @see BuildEvent#getTarget() */ public void targetStarted(BuildEvent event) { //System.out.println("targetStarted " + event.getTarget().getName()); } /** * Fired when a target has finished. This event will * still be thrown if an error occured during the build. * * @see BuildEvent#getException() */ public void targetFinished(BuildEvent event) { //System.out.println("targetFinished " + event.getTarget().getName()); } /** * Fired when a task is started. * * @see BuildEvent#getTask() */ public void taskStarted(BuildEvent event) { //System.out.println("taskStarted " + event.getTask().getTaskName()); } /** * Fired when a task has finished. This event will still * be throw if an error occured during the build. * * @see BuildEvent#getException() */ public void taskFinished(BuildEvent event) { //System.out.println("taskFinished " + event.getTask().getTaskName()); } /** * Fired whenever a message is logged. * * @see BuildEvent#getMessage() * @see BuildEvent#getPriority() */ public void messageLogged(BuildEvent event) { if (event.getPriority() == org.apache.tools.ant.Project.MSG_INFO || event.getPriority() == org.apache.tools.ant.Project.MSG_WARN || event.getPriority() == org.apache.tools.ant.Project.MSG_ERR) { logBuffer.append('\n'+event.getMessage()); } fullLogBuffer.append('\n'+event.getMessage()); } } } SubclipseTest.java000066400000000000000000000221071203611042400402360ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/src/org/tigris/subversion/subclipse/test/******************************************************************************* * Copyright (c) 2000, 2003 IBM Corporation and others. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Common Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/cpl-v10.html * * Contributors: Cédric Chabanois (cchabanois@ifrance.com) - modified for * Subversion ******************************************************************************/ package org.tigris.subversion.subclipse.test; import java.io.File; import java.io.IOException; import java.util.Properties; import junit.framework.TestCase; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IType; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNClientManager; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.repo.SVNRepositories; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNUrl; public abstract class SubclipseTest extends TestCase { protected SVNRepositories repositories; protected ISVNRepositoryLocation repositoryLocation; protected File reposPath; protected SVNUrl url; protected String user; protected String pass; protected String remoteHttpsUrl; protected String remoteHttpUrl; public SubclipseTest(String name) { super(name); } /* * (non-Javadoc) * * @see junit.framework.TestCase#setUp() */ protected void setUp() throws Exception { // in case we're testing auth or something. remoteHttpUrl = System.getProperty("remote.http.url"); remoteHttpsUrl = System.getProperty("remote.https.url"); user = System.getProperty("svn.user"); pass = System.getProperty("svn.pass"); // do we use javahl or command line ? String mode = System.getProperty("svn.mode"); SVNProviderPlugin plugin = SVNProviderPlugin.getPlugin(); SVNClientManager svnClientManager = plugin.getSVNClientManager(); if (mode == null) mode = "javahl"; svnClientManager.setSvnClientInterface(mode.toLowerCase()); File configDir = new File(System.getProperty("java.io.tmpdir") + "/subclipse-tests").getAbsoluteFile(); svnClientManager.setConfigDir(configDir); // we create the repository ISVNClientAdapter svnClient = svnClientManager.getSVNClient(); reposPath = new File(System.getProperty("java.io.tmpdir") + "/test_repos").getAbsoluteFile(); removeDir(reposPath); svnClient.createRepository(reposPath, ISVNClientAdapter.REPOSITORY_FSTYPE_FSFS); assertTrue(reposPath.exists()); // we need the corresponding url url = new SVNUrl(reposPath.toURI().toString().replaceFirst("file:/", "file:///")); // get the ISVNRepositoryLocation corresponding to our repository repositories = plugin.getRepositories(); Properties properties = new Properties(); properties.setProperty("url", url.toString()); if (user != null) properties.setProperty("user", user); if (pass != null) properties.setProperty("password", pass); repositoryLocation = repositories.createRepository(properties); } /** * remove the given directory * * @param d * @throws IOException */ private void removeDir(File d) throws IOException { if (!d.exists()) { return; } String[] list = d.list(); if (list == null) { list = new String[0]; } for (int i = 0; i < list.length; i++) { String s = list[i]; File f = new File(d, s); if (f.isDirectory()) { removeDir(f); } else { if (!f.delete()) { String message = "Unable to delete file " + f.getAbsolutePath(); throw new IOException(message); } } } if (!d.delete()) { String message = "Unable to delete directory " + d.getAbsolutePath(); throw new IOException(message); } } /* * (non-Javadoc) * * @see junit.framework.TestCase#tearDown() */ protected void tearDown() throws Exception { TestProject.waitForIndexer(); // delete all the projects we created in the test IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); IProject[] projects = root.getProjects(); for (int i = 0; i < projects.length; i++) { IProject project = projects[i]; SVNTeamProvider teamProvider = (SVNTeamProvider) RepositoryProvider .getProvider(project, SVNProviderPlugin.getTypeId()); if (teamProvider != null) { unshareProject(project); } Exception e = null; int retry = 0; try { // delete the project project.delete(true, true, null); } catch (Exception ex) { e = ex; } } // remove all the repositories ISVNRepositoryLocation[] svnRepositoryLocations = repositories .getKnownRepositories(new NullProgressMonitor()); for (int i = 0; i < svnRepositoryLocations.length; i++) { repositories.disposeRepository(svnRepositoryLocations[i]); } // delete the repository removeDir(reposPath); } /** * create a project with a Class * * @param projectName * @return * @throws CoreException */ protected TestProject createProjectWithAClass(String projectName) throws CoreException { TestProject testProject = new TestProject(projectName); // create a file IPackageFragment package1 = testProject.createPackage("pack1"); IType type = testProject.createJavaType(package1, "AClass.java", "public class AClass { \n" + " public void m() {}\n" + "}"); return testProject; } /** * share the project using svn * * @throws Exception */ protected void shareProject(IProject project) throws TeamException { SVNWorkspaceRoot.shareProject(repositoryLocation, project, null, null, true, new NullProgressMonitor()); } /** * unshare the project (do not delete .svn directories) * * @throws TeamException */ protected void unshareProject(IProject project) throws TeamException { RepositoryProvider.unmap(project); } /** * @return */ protected void addAndCommit(IProject project, IResource resource, String comment) throws SVNException, TeamException { addNoCommit(project, resource); SVNTeamProvider provider = getProvider(project); // commit it provider.checkin(new IResource[] { resource }, comment, false, IResource.DEPTH_ZERO, null); ISVNLocalResource res = SVNWorkspaceRoot.getSVNResourceFor(resource); try { resource.refreshLocal(IResource.DEPTH_INFINITE, null); } catch (CoreException e) { fail(e.getMessage()); } } protected void addNoCommit(IProject project, IResource resource) throws SVNException, TeamException { SVNTeamProvider provider = getProvider(project); // add it to repository provider.add(new IResource[] { resource }, IResource.DEPTH_ZERO, null); try { resource.refreshLocal(IResource.DEPTH_INFINITE, null); sleep(); assertTrue(SVNWorkspaceRoot.getSVNResourceFor(resource).getStatus() .isAdded()); } catch (CoreException e) { fail(e.getMessage()); } } /** * @return */ public ISVNRepositoryLocation getRepositoryLocation() { return repositoryLocation; } public SVNTeamProvider getProvider(IProject project) { return (SVNTeamProvider) RepositoryProvider.getProvider(project, SVNProviderPlugin.getTypeId()); } protected void sleep() { try { Thread.sleep(2000); } catch (InterruptedException e) {} } }TestProject.java000066400000000000000000000163551203611042400377230ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/src/org/tigris/subversion/subclipse/test/******************************************************************************* * Copyright (c) 2003 IBM Corporation and others. All rights reserved. This * program and the accompanying materials are made available under the terms of * the Common Public License v1.0 which accompanies this distribution, and is * available at http://www.eclipse.org/legal/cpl-v10.html * * Contributors: Erich Gamma (erich_gamma@ch.ibm.com) and Kent Beck * (kent@threeriversinstitute.org) ******************************************************************************/ package org.tigris.subversion.subclipse.test; import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; import java.net.URL; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IExtensionRegistry; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Plugin; import org.eclipse.jdt.core.IClasspathEntry; import org.eclipse.jdt.core.ICompilationUnit; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.IType; import org.eclipse.jdt.core.JavaCore; import org.eclipse.jdt.core.JavaModelException; import org.eclipse.jdt.core.search.IJavaSearchConstants; import org.eclipse.jdt.core.search.ITypeNameRequestor; import org.eclipse.jdt.core.search.SearchEngine; import org.eclipse.jdt.core.search.SearchPattern; import org.eclipse.jdt.launching.JavaRuntime; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class TestProject { private IProject project; private IJavaProject javaProject; private IPackageFragmentRoot sourceFolder; public TestProject(String projectName) throws CoreException { IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); project = root.getProject(projectName); project.create(null); project.open(null); javaProject = JavaCore.create(project); IFolder binFolder = createBinFolder(); setJavaNature(); javaProject.setRawClasspath(new IClasspathEntry[0], null); createOutputFolder(binFolder); addSystemLibraries(); } public IProject getProject() { return project; } public IJavaProject getJavaProject() { return javaProject; } public void addJar(Plugin plugin, String jar) throws MalformedURLException, IOException, JavaModelException { Path result = findFileInPlugin(plugin, jar); IClasspathEntry[] oldEntries = javaProject.getRawClasspath(); IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1]; System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length); newEntries[oldEntries.length] = JavaCore.newLibraryEntry(result, null, null); javaProject.setRawClasspath(newEntries, null); } public boolean hasJar(String jar) throws JavaModelException { IClasspathEntry[] entries = javaProject.getRawClasspath(); for (int i = 0; i < entries.length; i++) { IClasspathEntry entry = entries[i]; if (entry.getPath().lastSegment().equals(jar)) { return true; } } return false; } public IPackageFragment createPackage(String name) throws CoreException { if (sourceFolder == null) sourceFolder = createSourceFolder(); return sourceFolder.createPackageFragment(name, false, null); } public IType createJavaType(IPackageFragment pack, String cuName, String source) throws JavaModelException { StringBuffer buf = new StringBuffer(); buf.append("package " + pack.getElementName() + ";\n"); buf.append("\n"); buf.append(source); ICompilationUnit cu = pack.createCompilationUnit(cuName, buf.toString(), false, null); return cu.getTypes()[0]; } private IFile createFile(IContainer folder, String name, InputStream contents) throws JavaModelException { IFile file = folder.getFile(new Path(name)); try { file.create(contents, IResource.FORCE, null); } catch (CoreException e) { throw new JavaModelException(e); } return file; } public void dispose() throws CoreException { waitForIndexer(); project.delete(true, true, null); } private IFolder createBinFolder() throws CoreException { IFolder binFolder = project.getFolder("bin"); binFolder.create(false, true, null); return binFolder; } private void setJavaNature() throws CoreException { IProjectDescription description = project.getDescription(); description.setNatureIds(new String[]{JavaCore.NATURE_ID}); project.setDescription(description, null); } private void createOutputFolder(IFolder binFolder) throws JavaModelException { IPath outputLocation = binFolder.getFullPath(); javaProject.setOutputLocation(outputLocation, null); } private IPackageFragmentRoot createSourceFolder() throws CoreException { IFolder folder = project.getFolder("src"); folder.create(false, true, null); IPackageFragmentRoot root = javaProject.getPackageFragmentRoot(folder); IClasspathEntry[] oldEntries = javaProject.getRawClasspath(); IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1]; System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length); newEntries[oldEntries.length] = JavaCore.newSourceEntry(root.getPath()); javaProject.setRawClasspath(newEntries, null); return root; } private void addSystemLibraries() throws JavaModelException { IClasspathEntry[] oldEntries = javaProject.getRawClasspath(); IClasspathEntry[] newEntries = new IClasspathEntry[oldEntries.length + 1]; System.arraycopy(oldEntries, 0, newEntries, 0, oldEntries.length); newEntries[oldEntries.length] = JavaRuntime .getDefaultJREContainerEntry(); javaProject.setRawClasspath(newEntries, null); } private Path findFileInPlugin(Plugin plugin, String file) throws MalformedURLException, IOException { IExtensionRegistry registry = Platform.getExtensionRegistry(); URL base = null; if (plugin instanceof SVNUIPlugin) { base = SVNUIPlugin.getPlugin().getBundle().getEntry("/"); } else if (plugin instanceof SVNProviderPlugin) { base = SVNProviderPlugin.getPlugin().getBundle().getEntry("/"); } URL jarURL = new URL(base, file); URL localJarURL = Platform.asLocalURL(jarURL); return new Path(localJarURL.getPath()); } public static void waitForIndexer() throws JavaModelException { ITypeNameRequestor requestor = new ITypeNameRequestor() { public void acceptClass(char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path) { } public void acceptInterface(char[] packageName, char[] simpleTypeName, char[][] enclosingTypeNames, String path) { } }; int matchRule = SearchPattern.R_EXACT_MATCH | SearchPattern.R_CASE_SENSITIVE; new SearchEngine().searchAllTypeNames(null, null, matchRule, IJavaSearchConstants.CLASS, SearchEngine.createWorkspaceScope(), requestor, IJavaSearchConstants.WAIT_UNTIL_READY_TO_SEARCH, null); } }TestUtils.java000066400000000000000000000051611203611042400374060ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/src/org/tigris/subversion/subclipse/testpackage org.tigris.subversion.subclipse.test; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.Currency; import junit.framework.TestCase; /** * Generic helper class for Unit tests */ public class TestUtils extends TestCase { /** * Answer whether all instance members of the two objects are equal * @param o1 * @param o2 * @return * @throws FieldComparsonException */ public static boolean allFieldsEquals(Object o1, Object o2) throws FieldComparsonException { if (!o1.getClass().equals(o2.getClass())) { throw new FieldComparsonException("Classes are not equal !!!"); } allFieldsEquals(o1, o2, o1.getClass()); return true; } /** * Answer whether all instance members of the two objects are equal * @param o1 * @param o2 * @return * @throws FieldComparsonException */ private static boolean allFieldsEquals(Object o1, Object o2, Class aClass) throws FieldComparsonException { if (!aClass.getSuperclass().equals(Object.class)) { allFieldsEquals(o1, o2, aClass.getSuperclass()); } Field[] fields = o1.getClass().getDeclaredFields(); for (int i = 0; i < fields.length; i++) { try { fields[i].setAccessible(true); if (!Modifier.isStatic(fields[i].getModifiers())) { Object o1FieldValue = fields[i].get(o1); Object o2FieldValue = fields[i].get(o2); if ((o1FieldValue == null && o2FieldValue == null)) { //Don't compare nulls } else if ((o1FieldValue == null && o2FieldValue != null) || (!o1FieldValue.equals(o2FieldValue))) { throw new FieldComparsonException(fields[i].getName() + " not equal : " + o1FieldValue + " vs. " + o2FieldValue); } } } catch (IllegalArgumentException e) { throw new FieldComparsonException(fields[i].getName() + " : " + e.toString()); } catch (IllegalAccessException e) { throw new FieldComparsonException(fields[i].getName() + " : " + e.toString()); } } return true; } public static class FieldComparsonException extends Exception { /** * @param message */ public FieldComparsonException(String message) { super(message); } } /** Unit test for the helper method */ public void testAllFieldsEquals() throws Exception { Currency mock1 = Currency.getInstance("USD"); Currency mock2 = Currency.getInstance("EUR"); assertTrue(TestUtils.allFieldsEquals(mock1, mock1)); { try { TestUtils.allFieldsEquals(mock1, mock2); //Should not reach this. Execption should be raised fail(); } catch (FieldComparsonException e) { //Do nothing. We expect this expection } } } } 000077500000000000000000000000001203611042400355305ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/src/org/tigris/subversion/subclipse/test/coreCheckoutTest.java000066400000000000000000000055271203611042400410110ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/src/org/tigris/subversion/subclipse/test/core/******************************************************************************* * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * Cédric Chabanois (cchabanois@ifrance.com) - modified for Subversion *******************************************************************************/ package org.tigris.subversion.subclipse.test.core; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.QualifiedName; import org.eclipse.jdt.core.JavaCore; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.test.SubclipseTest; import org.tigris.subversion.subclipse.test.TestProject; public class CheckoutTest extends SubclipseTest { public CheckoutTest(String name) { super(name); } public void testCheckoutProject() throws Exception { // first we create a project, share it and commit it TestProject project1 = createProjectWithAClass("project1"); shareProject(project1.getProject()); SVNTeamProvider provider = getProvider(project1.getProject()); IResource src = project1.getProject().getFolder(new Path("src")); IResource projectFile = project1.getProject().getFile(new Path(".project")); provider.add(new IResource[] { src,projectFile },IResource.DEPTH_INFINITE, null); provider.checkin(new IResource[] { src,projectFile }, "project committed to repository", false, IResource.DEPTH_INFINITE,null); // let's remove it project1.getProject().delete(true,true,null); // and checkout it ISVNRemoteFolder remoteFolder = repositoryLocation.getRemoteFolder("project1"); IProject project = SVNWorkspaceRoot.getProject(remoteFolder,null); final ISVNRemoteFolder[] remoteFolders = { remoteFolder }; final IProject[] localFolders = { project }; TestCheckoutAsProjectOperation checkoutOperation = new TestCheckoutAsProjectOperation(null, remoteFolders, localFolders); checkoutOperation.run(new NullProgressMonitor()); // make sure the project is shared assertEquals( SVNProviderPlugin.getTypeId(), project1.getProject().getPersistentProperty(new QualifiedName("org.eclipse.team.core", "repository"))); // make sure project has java nature (.project was committed, so nature should not be lost) assertTrue(project1.getProject().hasNature(JavaCore.NATURE_ID)); } } LocalResourceTest.java000066400000000000000000000123551203611042400420030ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/src/org/tigris/subversion/subclipse/test/core/******************************************************************************* * Copyright (c) 2000, 2003 IBM Corporation and others. All rights reserved. * This program and the accompanying materials are made available under the * terms of the Common Public License v1.0 which accompanies this distribution, * and is available at http://www.eclipse.org/legal/cpl-v10.html * * Contributors: Cédric Chabanois (cchabanois@ifrance.com) - modified for * Subversion ******************************************************************************/ package org.tigris.subversion.subclipse.test.core; import java.io.InputStream; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.Path; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IType; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.RemoteFile; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.test.SubclipseTest; import org.tigris.subversion.subclipse.test.TestProject; import org.tigris.subversion.subclipse.test.TestUtils; public class LocalResourceTest extends SubclipseTest { public LocalResourceTest(String name) { super(name); } public void testUrl() throws Exception { TestProject testProject = new TestProject("testProject"); shareProject(testProject.getProject()); // create a file IPackageFragment package1 = testProject.createPackage("pack1"); IType type = testProject.createJavaType(package1, "AClass.java", "public class AClass { \n" + " public void m() {}\n" + "}"); IResource resource = testProject.getProject().getFile( new Path("src/pack1/AClass.java")); ISVNLocalResource svnResource = SVNWorkspaceRoot .getSVNResourceFor(resource); // get the url : this is not direct as the resource is not yet managed assertEquals( getRepositoryLocation().getUrl().toString() + "/" + testProject.getProject().getName() + "/src/pack1/AClass.java", svnResource.getUrl() .toString()); // add it to repository getProvider(testProject.getProject()).add(new IResource[] { resource }, IResource.DEPTH_ZERO, null); // get the url : this should be direct as the resource is managed assertEquals( getRepositoryLocation().getUrl().toString() + "/" + testProject.getProject().getName() + "/src/pack1/AClass.java", svnResource.getUrl() .toString()); } public void testGetRemote() throws Exception { TestProject testProject = new TestProject("testProject"); shareProject(testProject.getProject()); String contents = "public class AClass { \n" + " public void m() {}\n}"; // create a file IPackageFragment package1 = testProject.createPackage("pack1"); IType type = testProject.createJavaType(package1, "AClass.java", contents); IFile resource = testProject.getProject().getFile( new Path("src/pack1/AClass.java")); ISVNLocalResource svnResource = SVNWorkspaceRoot .getSVNResourceFor(resource); InputStream isLocal = resource.getContents(); byte[] local = new byte[1000]; isLocal.read(local); isLocal.close(); SVNTeamProvider provider = getProvider(testProject.getProject()); // add it to repository provider.add(new IResource[] { resource }, IResource.DEPTH_ZERO, null); // commit it provider.checkin(new IResource[] { resource }, "committed", false, IResource.DEPTH_ZERO, null); // get the remote resource RemoteFile svnRemoteResource = (RemoteFile) svnResource .getLatestRemoteResource(); assertTrue(!(svnRemoteResource.isFolder() || svnRemoteResource .isContainer())); // compare the contents InputStream isRemote = svnRemoteResource.getStorage(null).getContents(); byte[] remote = new byte[1000]; isRemote.read(remote); isRemote.close(); assertEquals(new String(local), new String(remote)); } public void testGetBytesFromBytes() throws Exception { TestProject testProject = new TestProject("testProject"); shareProject(testProject.getProject()); String contents = "public class AClass { \n" + " public void m() {}\n}"; // create a file IPackageFragment package1 = testProject.createPackage("pack1"); IType type = testProject.createJavaType(package1, "AClass.java", contents); IFile resource = testProject.getProject().getFile( new Path("src/pack1/AClass.java")); ISVNLocalResource svnResource = SVNWorkspaceRoot .getSVNResourceFor(resource); InputStream isLocal = resource.getContents(); isLocal.close(); SVNTeamProvider provider = getProvider(testProject.getProject()); // add it to repository provider.add(new IResource[] { resource }, IResource.DEPTH_ZERO, null); // commit it provider.checkin(new IResource[] { resource }, "committed", false, IResource.DEPTH_ZERO, null); // get the remote resource RemoteFile svnRemoteResource = (RemoteFile) svnResource .getLatestRemoteResource(); LocalResourceStatus status = svnResource.getStatus(); LocalResourceStatus status2 = LocalResourceStatus.fromBytes(status.getBytes()); assertTrue(TestUtils.allFieldsEquals(status, status2)); } }RefactorTest.java000066400000000000000000000135671203611042400410140ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/src/org/tigris/subversion/subclipse/test/core/******************************************************************************* * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * Cédric Chabanois (cchabanois@ifrance.com) - modified for Subversion *******************************************************************************/ package org.tigris.subversion.subclipse.test.core; import org.eclipse.core.internal.resources.ResourceException; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IFolder; import org.eclipse.core.runtime.Path; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IType; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.test.SubclipseTest; import org.tigris.subversion.subclipse.test.TestProject; import org.tigris.subversion.svnclientadapter.SVNStatusKind; public class RefactorTest extends SubclipseTest { public RefactorTest(String name) { super(name); } public void testAddedClassRename() throws Exception { TestProject testProject = new TestProject("testProject"); shareProject(testProject.getProject()); // create a file IPackageFragment package1 = testProject.createPackage("pack1"); IType type = testProject.createJavaType(package1,"AClass.java", "public class AClass { \n" + " public void m() {}\n" + "}"); IFile resource = testProject.getProject().getFile(new Path("src/pack1/AClass.java")); // add and commit it addNoCommit(testProject.getProject(),resource); // let's rename the resource resource.move(new Path("AClassRenamed.java"),false, null); // make sure the initial resource is not there anymore assertFalse(resource.exists()); // the initial resource should have "NONE" status ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); assertEquals(svnResource.getStatus().getTextStatus(), SVNStatusKind.NONE); // the renamed resource should exist now resource = testProject.getProject().getFile(new Path("src/pack1/AClassRenamed.java")); assertTrue(resource.exists()); // and should have "ADDED" status svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); assertEquals(svnResource.getStatus().getTextStatus(), SVNStatusKind.ADDED); } public void testClassRename() throws Exception { TestProject testProject = new TestProject("testProject"); shareProject(testProject.getProject()); // create a file IPackageFragment package1 = testProject.createPackage("pack1"); IType type = testProject.createJavaType(package1,"AClass.java", "public class AClass { \n" + " public void m() {}\n" + "}"); IFile resource = testProject.getProject().getFile(new Path("src/pack1/AClass.java")); // add and commit it addAndCommit(testProject.getProject(),resource,"committed"); // let's rename the resource resource.move(new Path("AClassRenamed.java"),false, null); // make sure the initial resource is not there anymore assertFalse(resource.exists()); // the initial resource should have "DELETED" status ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); assertEquals(svnResource.getStatus().getTextStatus(), SVNStatusKind.DELETED); // the renamed resource should exist now resource = testProject.getProject().getFile(new Path("src/pack1/AClassRenamed.java")); assertTrue(resource.exists()); // and should have "ADDED" status svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); assertEquals(svnResource.getStatus().getTextStatus(), SVNStatusKind.ADDED); } public void testPackageRenameWithForce() throws Exception { TestProject testProject = new TestProject("testProject"); shareProject(testProject.getProject()); // create a file IPackageFragment package1 = testProject.createPackage("pack1"); IType type = testProject.createJavaType(package1,"AClass.java", "public class AClass { \n" + " public void m() {}\n" + "}"); SVNTeamProvider provider = getProvider(testProject.getProject()); IFile resource = testProject.getProject().getFile(new Path("src/pack1/AClass.java")); // add and commit it addAndCommit(testProject.getProject(),resource,"committed"); // let's rename the package sleep(); IFolder folder = testProject.getProject().getFolder(new Path("src/pack1")); folder.move(new Path("pack2"),true, null); // note that the initial folder still exist after package renaming // the renamed package should exist now folder = testProject.getProject().getFolder(new Path("src/pack2")); assertTrue(folder.exists()); } public void testPackageRenameScheduledAdd() throws Exception { TestProject testProject = new TestProject("testProject"); shareProject(testProject.getProject()); // create a file IPackageFragment package1 = testProject.createPackage("pack1"); IType type = testProject.createJavaType(package1,"AClass.java", "public class AClass { \n" + " public void m() {}\n" + "}"); SVNTeamProvider provider = getProvider(testProject.getProject()); IFile resource = testProject.getProject().getFile(new Path("src/pack1/AClass.java")); // add and commit it addNoCommit(testProject.getProject(),resource); // let's rename the package IFolder folder = testProject.getProject().getFolder(new Path("src/pack1")); folder.move(new Path("pack2"),true, null); // note that the initial folder still exist after package renaming // the renamed package should exist now folder = testProject.getProject().getFolder(new Path("src/pack2")); assertTrue(folder.exists()); } } SVNProviderPluginTest.java000066400000000000000000000026241203611042400425770ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/src/org/tigris/subversion/subclipse/test/corepackage org.tigris.subversion.subclipse.test.core; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.Path; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IType; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.test.SubclipseTest; import org.tigris.subversion.subclipse.test.TestProject; public class SVNProviderPluginTest extends SubclipseTest { public SVNProviderPluginTest(String name) { super(name); } public void testGetRepository() throws Exception { TestProject testProject = new TestProject("testProject"); shareProject(testProject.getProject()); // create a file IPackageFragment package1 = testProject.createPackage("pack1"); IType type = testProject.createJavaType(package1, "AClass.java", "public class AClass { \n" + " public void m() {}\n" + "}"); IResource resource = testProject.getProject().getFile( new Path("src/pack1/AClass.java")); ISVNLocalResource svnResource = SVNWorkspaceRoot .getSVNResourceFor(resource); assertEquals(super.url.toString(), svnResource.getRepository().getLocation()); assertEquals(super.url.toString(), SVNProviderPlugin.getPlugin().getRepository(svnResource.getUrl().toString()).getLocation()); } } SVNUrlTest.java000066400000000000000000000025321203611042400403660ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/src/org/tigris/subversion/subclipse/test/core/* * Created on Apr 22, 2004 */ package org.tigris.subversion.subclipse.test.core; import junit.framework.TestCase; import org.tigris.subversion.subclipse.core.util.Util; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * @author mml * */ public class SVNUrlTest extends TestCase { public void testCanonicalGetParentToString() throws Exception { SVNUrl url = new SVNUrl("http://blah.com/svn/blah/"); assertFalse(url.getParent().toString().endsWith("/")); url = new SVNUrl("http://blah.com/svn/blah/A.class"); assertFalse(url.getParent().toString().endsWith("/")); } public void testUtilGetLastSegment() throws Exception { SVNUrl url = new SVNUrl("http://blah.com/svn/blah"); assertEquals("blah", url.getLastPathSegment()); assertEquals("blah", Util.getLastSegment(url.toString())); } public void testGetAppendPath() throws Exception { SVNUrl urlParent = new SVNUrl("http://blah.com/svn/"); SVNUrl urlAppended = new SVNUrl("http://blah.com/svn/blah/ouch"); assertEquals(urlAppended.toString(), Util.appendPath(urlParent.toString(), "blah/ouch")); assertEquals(urlAppended.toString(), Util.appendPath(urlParent.toString(), "/blah/ouch")); assertEquals(urlAppended.toString(), urlParent.appendPath("blah/ouch").toString()); assertEquals(urlAppended.toString(), urlParent.appendPath("/blah/ouch").toString()); } } ShareProjectTest.java000066400000000000000000000054351203611042400416330ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/src/org/tigris/subversion/subclipse/test/core/******************************************************************************* * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * Cédric Chabanois (cchabanois@ifrance.com) - modified for Subversion *******************************************************************************/ package org.tigris.subversion.subclipse.test.core; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.QualifiedName; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.repo.SVNRepositoryLocation; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.test.SubclipseTest; import org.tigris.subversion.subclipse.test.TestProject; public class ShareProjectTest extends SubclipseTest { public ShareProjectTest(String name) { super(name); } public void testShare() throws Exception { TestProject testProject = new TestProject("testProject"); // we share the project shareProject(testProject.getProject()); // make sure the project is shared assertEquals( SVNProviderPlugin.getTypeId(), testProject.getProject().getPersistentProperty(new QualifiedName("org.eclipse.team.core", "repository"))); // get the SVNWorkspaceRoot for this project SVNTeamProvider teamProvider = (SVNTeamProvider)RepositoryProvider.getProvider(testProject.getProject(), SVNProviderPlugin.getTypeId()); SVNWorkspaceRoot svnProject = teamProvider.getSVNWorkspaceRoot(); // just make sure there is a SVNRepositoryLocation associated assertNotNull(svnProject.getRepository()); // unshare and make sure it does not have the svn nature anymore unshareProject(testProject.getProject()); assertFalse( SVNProviderPlugin.getTypeId().equals( testProject.getProject().getPersistentProperty(new QualifiedName("org.eclipse.team.core", "repository")))); } public void testInvalidShare() throws Exception { TestProject testProject = new TestProject("testProject"); ISVNRepositoryLocation location = SVNRepositoryLocation.fromString("file:///home/invaliduser/svnrepos"); try { SVNWorkspaceRoot.shareProject(location,testProject.getProject(),null,null, true, new NullProgressMonitor()); fail("project should not have been shared"); } catch (TeamException e) { } } } TestCheckoutAsProjectOperation.java000066400000000000000000000015261203611042400445000ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/src/org/tigris/subversion/subclipse/test/corepackage org.tigris.subversion.subclipse.test.core; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.IPath; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.ui.operations.CheckoutAsProjectOperation; public class TestCheckoutAsProjectOperation extends CheckoutAsProjectOperation { public TestCheckoutAsProjectOperation(IWorkbenchPart part, ISVNRemoteFolder[] remoteFolders, IProject[] localFolders) { super(part, remoteFolders, localFolders); } public TestCheckoutAsProjectOperation(IWorkbenchPart part, ISVNRemoteFolder[] remoteFolders, IProject[] localFolders, IPath projectRoot) { super(part, remoteFolders, localFolders, projectRoot); } protected boolean canRunAsJob() { return false; } } eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tests/subclipse-test.launch000066400000000000000000000053221203611042400307750ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/000077500000000000000000000000001203611042400257325ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/.classpath000066400000000000000000000005661203611042400277240ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/.project000066400000000000000000000012441203611042400274020ustar00rootroot00000000000000 org.tigris.subversion.subclipse.tools.usage org.eclipse.jdt.core.javabuilder org.eclipse.pde.ManifestBuilder org.eclipse.pde.SchemaBuilder org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/.settings/000077500000000000000000000000001203611042400276505ustar00rootroot00000000000000org.eclipse.jdt.core.prefs000066400000000000000000000006131203611042400345530ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/.settings#Mon Oct 17 09:30:24 EDT 2011 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 org.eclipse.jdt.core.compiler.compliance=1.5 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.source=1.5 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/META-INF/000077500000000000000000000000001203611042400270725ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/META-INF/MANIFEST.MF000066400000000000000000000010711203611042400305230ustar00rootroot00000000000000Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: Subclipse Usage Reporting Bundle-SymbolicName: org.tigris.subversion.subclipse.tools.usage;singleton:=true Bundle-Version: 1.1.0 Bundle-Activator: org.tigris.subversion.subclipse.tools.usage.internal.SubclipseToolsUsageActivator Require-Bundle: org.eclipse.osgi;bundle-version="3.2.0", org.eclipse.core.runtime;bundle-version="3.2.0", org.eclipse.ui;bundle-version="3.2.0", org.tigris.subversion.subclipse.ui Bundle-RequiredExecutionEnvironment: J2SE-1.5 Eclipse-LazyStart: true Bundle-Vendor: tigris.org eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/build.properties000066400000000000000000000001501203611042400311430ustar00rootroot00000000000000source.. = src/ output.. = bin/ bin.includes = META-INF/,\ .,\ plugin.xml eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/plugin.properties000066400000000000000000000000431203611042400313430ustar00rootroot00000000000000preferencepage.name=Usage Reportingeclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/plugin.xml000066400000000000000000000016631203611042400277600ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/000077500000000000000000000000001203611042400265215ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/000077500000000000000000000000001203611042400273105ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/000077500000000000000000000000001203611042400306115ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/000077500000000000000000000000001203611042400330105ustar00rootroot00000000000000000077500000000000000000000000001203611042400347225ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse000077500000000000000000000000001203611042400360625ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools000077500000000000000000000000001203611042400371665ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage000077500000000000000000000000001203611042400423525ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/googleanalyticsAbstractGoogleAnalyticsParameters.java000066400000000000000000000030231203611042400520070ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/googleanalytics/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.googleanalytics; public abstract class AbstractGoogleAnalyticsParameters implements IGoogleAnalyticsParameters { private String accountName; private String hostName; private String referral; private String userDefined; public AbstractGoogleAnalyticsParameters(String accountName, String hostName, String referral) { this(accountName, hostName, referral, null); } public AbstractGoogleAnalyticsParameters(String accountName, String hostName, String referral, String userDefined) { this.accountName = accountName; this.hostName = hostName; this.referral = referral; this.userDefined = userDefined; } public String getReferral() { return referral; } public String getAccountName() { return accountName; } public String getHostname() { return hostName; } public String getUserDefined() { return userDefined; } }GoogleAnalyticsCookie.java000066400000000000000000000026471203611042400474440ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/googleanalytics/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.googleanalytics; public class GoogleAnalyticsCookie { private CharSequence value; private String identifier; private char[] delimiters; public GoogleAnalyticsCookie(String identifier, CharSequence value, char[] delimiters) { this.identifier = identifier; this.value = value; this.delimiters = delimiters; } public GoogleAnalyticsCookie(String identifier, CharSequence value) { this(identifier, value, new char[] {(char)-1}); } public void appendTo(StringBuffer builder) { if (identifier != null && identifier.length() > 0 && value != null && value.length() > 0) { builder.append(identifier) .append(IGoogleAnalyticsParameters.EQUALS_SIGN) .append(value); for (int i = 0; i < delimiters.length; i++) { builder.append(delimiters[i]); } } } } GoogleAnalyticsUrlStrategy.java000066400000000000000000000174401203611042400505150ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/googleanalytics/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.googleanalytics; import java.io.UnsupportedEncodingException; import org.tigris.subversion.subclipse.tools.usage.reporting.SubclipseComponents; import org.tigris.subversion.subclipse.tools.usage.tracker.IURLBuildingStrategy; import org.tigris.subversion.subclipse.tools.usage.tracker.internal.IFocusPoint; import org.tigris.subversion.subclipse.tools.usage.util.HttpEncodingUtils; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class GoogleAnalyticsUrlStrategy implements IURLBuildingStrategy { private static final String TRACKING_URL = "http://www.google-analytics.com/__utm.gif"; private IGoogleAnalyticsParameters googleParameters; public GoogleAnalyticsUrlStrategy(IGoogleAnalyticsParameters googleAnalyticsParameters) { this.googleParameters = googleAnalyticsParameters; } public String build(IFocusPoint focusPoint) throws UnsupportedEncodingException { StringBuffer builder = new StringBuffer(TRACKING_URL) .append(IGoogleAnalyticsParameters.URL_PARAM_DELIMITER); appendParameter(IGoogleAnalyticsParameters.PARAM_TRACKING_CODE_VERSION, IGoogleAnalyticsParameters.VALUE_TRACKING_CODE_VERSION, builder); appendParameter(IGoogleAnalyticsParameters.PARAM_UNIQUE_TRACKING_NUMBER, getRandomNumber(), builder); appendParameter(IGoogleAnalyticsParameters.PARAM_HOST_NAME, googleParameters.getHostname(), builder); appendParameter(IGoogleAnalyticsParameters.PARAM_LANGUAGE_ENCODING, IGoogleAnalyticsParameters.VALUE_ENCODING_UTF8, builder); appendParameter(IGoogleAnalyticsParameters.PARAM_SCREEN_RESOLUTION, googleParameters.getScreenResolution(), builder); appendParameter(IGoogleAnalyticsParameters.PARAM_SCREEN_COLOR_DEPTH, googleParameters.getScreenColorDepth(), builder); appendParameter(IGoogleAnalyticsParameters.PARAM_BROWSER_LANGUAGE, googleParameters.getBrowserLanguage(), builder); String cookies = getCookies(); StringBuffer page = new StringBuffer("Subclipse"); if (SubclipseComponents.getSubclipseVersion() != null) { page.append("_" + SubclipseComponents.getSubclipseVersion()); } String keyword = googleParameters.getKeyword(); if (keyword != null && keyword.indexOf("MERGE") != -1) { page.append("_MergeClientInstalled"); } appendParameter(IGoogleAnalyticsParameters.PARAM_PAGE_TITLE, page.toString(), builder); // appendParameter(IGoogleAnalyticsParameters.PARAM_PAGE_TITLE, focusPoint.getTitle(), builder); appendParameter(IGoogleAnalyticsParameters.PARAM_FLASH_VERSION, googleParameters.getFlashVersion(), builder); appendParameter(IGoogleAnalyticsParameters.PARAM_REFERRAL, googleParameters.getReferral(), builder); StringBuffer pageRequest = new StringBuffer("/Subclipse"); if (SubclipseComponents.getSubclipseVersion() != null) { pageRequest.append("/" + SubclipseComponents.getSubclipseVersion()); } String svnInterface = SVNUIPlugin.getPlugin().getPreferenceStore().getString("pref_svninterface"); // IPersistentPreferenceStore svnPrefStore = new ScopedPreferenceStore(new ConfigurationScope(), "org.tigris.subversion.subclipse.ui"); // String svnInterface = svnPrefStore.getString("pref_svninterface"); // String svnInterface = SVNUIPlugin.getPlugin().getPreferenceStore().getString(ISVNUIConstants.PREF_SVNINTERFACE); if (svnInterface != null) { pageRequest.append("/" + svnInterface); } String encodedPageRequest = HttpEncodingUtils.checkedEncodeUtf8(pageRequest.toString()); // appendParameter(IGoogleAnalyticsParameters.PARAM_PAGE_REQUEST, focusPoint.getURI(), builder); // appendParameter(IGoogleAnalyticsParameters.PARAM_PAGE_REQUEST, pageRequest.toString(), builder); appendParameter(IGoogleAnalyticsParameters.PARAM_PAGE_REQUEST, encodedPageRequest, builder); appendParameter(IGoogleAnalyticsParameters.PARAM_ACCOUNT_NAME, googleParameters.getAccountName(), builder); appendParameter(IGoogleAnalyticsParameters.PARAM_COOKIES, cookies, builder); // appendParameter(IGoogleAnalyticsParameters.PARAM_AD_CONTENT, googleParameters.getAdContent(), builder); appendParameter(IGoogleAnalyticsParameters.PARAM_GAQ, "1", false, builder); googleParameters.visit(); // update visit timestamps and count return builder.toString(); } private String getCookies() { StringBuffer builder = new StringBuffer(); /** * unique visitor id cookie has to be unique per eclipse installation */ char[] plusDelimiter = { IGoogleAnalyticsParameters.PLUS_SIGN }; new GoogleAnalyticsCookie(IGoogleAnalyticsParameters.PARAM_COOKIES_UNIQUE_VISITOR_ID, new StringBuffer().append("999.") .append(googleParameters.getUserId()).append(IGoogleAnalyticsParameters.DOT) .append(googleParameters.getFirstVisit()).append(IGoogleAnalyticsParameters.DOT) .append(googleParameters.getLastVisit()).append(IGoogleAnalyticsParameters.DOT) .append(googleParameters.getCurrentVisit()).append(IGoogleAnalyticsParameters.DOT) .append(googleParameters.getVisitCount()) .append(IGoogleAnalyticsParameters.SEMICOLON), plusDelimiter) .appendTo(builder); // char[] plusDelimiter = { IGoogleAnalyticsParameters.PLUS_SIGN }; // new GoogleAnalyticsCookie(IGoogleAnalyticsParameters.PARAM_COOKIES_UNIQUE_VISITOR_ID, // googleParameters.getVisitorIdCookie(), // plusDelimiter) // .appendTo(builder); new GoogleAnalyticsCookie(IGoogleAnalyticsParameters.PARAM_COOKIES_REFERRAL_TYPE, new StringBuffer() .append("999.") .append(googleParameters.getFirstVisit()) .append(IGoogleAnalyticsParameters.DOT) .append("1.1.")) .appendTo(builder); char[] pipeDelimiter = { IGoogleAnalyticsParameters.PIPE }; new GoogleAnalyticsCookie(IGoogleAnalyticsParameters.PARAM_COOKIES_UTMCSR, "(direct)", pipeDelimiter) .appendTo(builder); new GoogleAnalyticsCookie(IGoogleAnalyticsParameters.PARAM_COOKIES_UTMCCN, "(direct)", pipeDelimiter) .appendTo(builder); new GoogleAnalyticsCookie(IGoogleAnalyticsParameters.PARAM_COOKIES_UTMCMD, "(none)", pipeDelimiter) .appendTo(builder); new GoogleAnalyticsCookie(IGoogleAnalyticsParameters.PARAM_COOKIES_KEYWORD, googleParameters.getKeyword(), pipeDelimiter) .appendTo(builder); char[] blankDelimiter = { ' ' }; new GoogleAnalyticsCookie(IGoogleAnalyticsParameters.PARAM_COOKIES_USERDEFINED, getRandomNumber() + IGoogleAnalyticsParameters.DOT + googleParameters.getUserDefined(), blankDelimiter) .appendTo(builder); builder.append(IGoogleAnalyticsParameters.SEMICOLON); return HttpEncodingUtils.checkedEncodeUtf8(builder.toString()); } private String getRandomNumber() { return Integer.toString((int) (Math.random() * 0x7fffffff)); } private void appendParameter(String name, String value, StringBuffer builder) { appendParameter(name, value, true, builder); } private void appendParameter(String name, String value, boolean appendAmpersand, StringBuffer builder) { builder.append(name) .append(IGoogleAnalyticsParameters.EQUALS_SIGN) .append(value); if (appendAmpersand) { builder.append(IGoogleAnalyticsParameters.AMPERSAND); } } } IGoogleAnalyticsParameters.java000066400000000000000000000076411203611042400504460ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/googleanalytics/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.googleanalytics; public interface IGoogleAnalyticsParameters { public static final char AMPERSAND = '&'; public static final char EQUALS_SIGN = '='; public static final char URL_PARAM_DELIMITER = '?'; public static final char PLUS_SIGN = '+'; public static final char DOT = '.'; public static final char SEMICOLON = ';'; public static final char PIPE = '|'; public static final String PARAM_HID = "utmhid"; public static final String PARAM_PAGE_REQUEST = "utmp"; public static final String PARAM_ACCOUNT_NAME = "utmac"; public static final String PARAM_HOST_NAME = "utmhn"; public static final String PARAM_COOKIES = "utmcc"; public static final String PARAM_COOKIES_UNIQUE_VISITOR_ID = "__utma"; public static final String PARAM_COOKIES_SESSION = "__utmb"; public static final String PARAM_COOKIES_BROWSERSESSION = "__utmc"; public static final String PARAM_COOKIES_REFERRAL_TYPE = "__utmz"; public static final String PARAM_COOKIES_UTMCSR = "utmcsr"; public static final String PARAM_COOKIES_UTMCCN = "utmccn"; public static final String PARAM_COOKIES_UTMCMD = "utmcmd"; public static final String PARAM_COOKIES_KEYWORD = "utmctr"; public static final String PARAM_COOKIES_USERDEFINED = "__utmv"; public static final String PARAM_REFERRAL = "utmr"; public static final String PARAM_TRACKING_CODE_VERSION = "utmwv"; public static final String PARAM_UNIQUE_TRACKING_NUMBER = "utmn"; public static final String PARAM_LANGUAGE_ENCODING = "utmcs"; public static final String PARAM_SCREEN_RESOLUTION = "utmsr"; public static final String PARAM_SCREEN_COLOR_DEPTH = "utmsc"; public static final String PARAM_PRODUCT_NAME = "utmipn"; public static final String PARAM_PRODUCT_CODE = "utmipc"; public static final String PARAM_FLASH_VERSION = "utmfl"; public static final String PARAM_BROWSER_LANGUAGE = "utmul"; public static final String PARAM_REPEAT_CAMPAIGN_VISIT = "utmcr"; public static final String PARAM_PAGE_TITLE = "utmdt"; public static final String PARAM_GAQ = "gaq"; public static final String PARAM_AD_CONTENT = "utm_content"; public static final String VALUE_TRACKING_CODE_VERSION = "4.7.2"; public static final String VALUE_NO_REFERRAL = "0"; public static final String VALUE_ENCODING_UTF8 = "UTF-8"; public static final String SCREERESOLUTION_DELIMITER = "x"; public static final String SCREENCOLORDEPTH_POSTFIX = "-bit"; public String getAccountName(); public String getReferral(); public String getScreenResolution(); public String getScreenColorDepth(); public String getBrowserLanguage(); public String getHostname(); public String getUserAgent(); public String getUserId(); public String getKeyword(); public String getFirstVisit(); public String getLastVisit(); public String getCurrentVisit(); public long getVisitCount(); /** * Signals that a visit was executed. The * consequence is that visit timestamps and visit counters get updated * * @see #getLastVisit() * @see #getCurrentVisit() * @see #getVisitCount() */ public void visit(); public String getFlashVersion(); /** * Returns a user defined value that may be queried in Google Analytics. * * @return a user defined value */ public String getUserDefined(); } ISubclipseEclipseEnvironment.java000066400000000000000000000016661203611042400510220ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/googleanalytics/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.googleanalytics; import org.tigris.subversion.subclipse.tools.usage.googleanalytics.eclipse.IEclipseEnvironment; public interface ISubclipseEclipseEnvironment extends IEclipseEnvironment { public String getSubclipseVersion(); public boolean isLinuxDistro(); } 000077500000000000000000000000001203611042400437765ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/googleanalytics/eclipseAbstractEclipseEnvironment.java000066400000000000000000000136271203611042400521470ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/googleanalytics/eclipse/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.googleanalytics.eclipse; import java.util.Random; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.swt.graphics.Rectangle; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.tools.usage.googleanalytics.AbstractGoogleAnalyticsParameters; import org.tigris.subversion.subclipse.tools.usage.googleanalytics.IGoogleAnalyticsParameters; import org.tigris.subversion.subclipse.tools.usage.internal.SubclipseToolsUsageActivator; import org.tigris.subversion.subclipse.tools.usage.preferences.IUsageReportPreferenceConstants; import org.tigris.subversion.subclipse.tools.usage.preferences.UsageReportPreferencesUtils; public abstract class AbstractEclipseEnvironment extends AbstractGoogleAnalyticsParameters implements IEclipseEnvironment { private static final String SYSPROP_JAVA_VERSION = "java.version"; private String screenResolution; private String screenColorDepth; private Random random; private IEclipsePreferences preferences; private String firstVisit; private String lastVisit; private String currentVisit; private long visitCount; protected IEclipseUserAgent eclipseUserAgent; public AbstractEclipseEnvironment(String accountName, String hostName, IEclipsePreferences preferences) { this(accountName, hostName, IGoogleAnalyticsParameters.VALUE_NO_REFERRAL, preferences); } public AbstractEclipseEnvironment(String accountName, String hostName, String referral, IEclipsePreferences preferences) { super(accountName, hostName, referral); this.random = new Random(); this.preferences = preferences; eclipseUserAgent = createEclipseUserAgent(); initScreenSettings(); initVisits(); } protected void initScreenSettings() { final Display display = getDisplay(); display.syncExec(new Runnable() { public void run() { screenColorDepth = display.getDepth() + SCREENCOLORDEPTH_POSTFIX; Rectangle bounds = display.getBounds(); screenResolution = bounds.width + SCREERESOLUTION_DELIMITER + bounds.height; } }); } private void initVisits() { String currentTime = String.valueOf(System.currentTimeMillis()); this.currentVisit = currentTime; this.firstVisit = preferences.get(IUsageReportPreferenceConstants.FIRST_VISIT, null); if (firstVisit == null) { this.firstVisit = currentTime; preferences.put(IUsageReportPreferenceConstants.FIRST_VISIT, firstVisit); } lastVisit = preferences.get(IUsageReportPreferenceConstants.LAST_VISIT, currentTime); visitCount = preferences.getLong(IUsageReportPreferenceConstants.VISIT_COUNT, 1); } protected IEclipseUserAgent createEclipseUserAgent() { return new EclipseUserAgent(); } public String getBrowserLanguage() { return eclipseUserAgent.getBrowserLanguage(); } public String getScreenResolution() { return screenResolution; } public String getScreenColorDepth() { return screenColorDepth; } protected Display getDisplay() { if (PlatformUI.isWorkbenchRunning()) { return PlatformUI.getWorkbench().getDisplay(); } Display display = Display.getCurrent(); if (display == null) { display = Display.getDefault(); } return display; } public String getUserAgent() { return eclipseUserAgent.toString(); } public String getUserId() { String userId = preferences.get(IUsageReportPreferenceConstants.ECLIPSE_INSTANCE_ID, null); if (userId == null) { userId = createIdentifier(); preferences.put(IUsageReportPreferenceConstants.ECLIPSE_INSTANCE_ID, userId); UsageReportPreferencesUtils.checkedSavePreferences(preferences, SubclipseToolsUsageActivator.getDefault(), GoogleAnalyticsEclipseMessages.EclipseEnvironment_Error_SavePreferences); } return userId; } /** * Creates an unique identifier. * * @return the identifier */ private String createIdentifier() { StringBuffer builder = new StringBuffer(); builder.append(Math.abs(random.nextLong())); builder.append(System.currentTimeMillis()); return builder.toString(); } public abstract String getKeyword(); public String getCurrentVisit() { return currentVisit; } public String getFirstVisit() { return firstVisit; } public String getLastVisit() { return lastVisit; } public long getVisitCount() { return visitCount; } public void visit() { lastVisit = currentVisit; preferences.put(IUsageReportPreferenceConstants.LAST_VISIT, lastVisit); currentVisit = String.valueOf(System.currentTimeMillis()); visitCount++; preferences.putLong(IUsageReportPreferenceConstants.VISIT_COUNT, visitCount); UsageReportPreferencesUtils.checkedSavePreferences(preferences, SubclipseToolsUsageActivator.getDefault(), GoogleAnalyticsEclipseMessages.EclipseEnvironment_Error_SavePreferences); } public String getFlashVersion() { return getJavaVersion(); } private String getJavaVersion() { return System.getProperty(SYSPROP_JAVA_VERSION); } public IEclipseUserAgent getEclipseUserAgent() { return eclipseUserAgent; } public String getUserDefined() { return getLinuxDistroNameAndVersion(); } protected String getLinuxDistroNameAndVersion() { return LinuxSystem.INSTANCE.getDistroNameAndVersion(); } }EclipseUserAgent.java000066400000000000000000000077121203611042400500520ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/googleanalytics/eclipse/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.googleanalytics.eclipse; import java.text.MessageFormat; import org.eclipse.core.runtime.IProduct; import org.eclipse.core.runtime.Platform; import org.osgi.framework.Bundle; public class EclipseUserAgent implements IEclipseUserAgent { public static final char BROWSER_LOCALE_DELIMITER = '-'; public static final char JAVA_LOCALE_DELIMITER = '_'; private static final String ECLIPSE_RUNTIME_BULDEID = "org.eclipse.core.runtime"; //$NON-NLS-1$ private static final String USERAGENT_WIN = "{0}/{1} (Windows; U; Windows NT {2}; {3})"; //$NON-NLS-1$ private static final String USERAGENT_MAC = "{0}/{1} (Macintosh; U; Intel Mac OS X {2}; {3})"; //$NON-NLS-1$ private static final String USERAGENT_LINUX = "{0}/{1} (X11; U; Linux i686; {3})"; //$NON-NLS-1$ public static final char VERSION_DELIMITER = '.'; //$NON-NLS-1$ private static final String PROP_OS_VERSION = "os.version"; //$NON-NLS-1$ private String browserLanguage; private String createBrowserLanguage() { String nl = getNL(); if (nl == null) { return ""; //$NON-NLS-1$ } int indexOf = nl.indexOf(JAVA_LOCALE_DELIMITER); //$NON-NLS-1$ if (indexOf <= 0) { return nl; } StringBuffer builder = new StringBuffer(); builder.append(nl.substring(0, indexOf)); builder.append(BROWSER_LOCALE_DELIMITER); builder.append(nl.substring(indexOf + 1)); return builder.toString(); } protected String getNL() { return Platform.getNL(); } public String getBrowserLanguage() { if (browserLanguage == null) { browserLanguage = createBrowserLanguage(); } return browserLanguage; } public String toString() { String productId = getApplicationName(); String productVersion = getApplicationVersion(); String[] parameters = { productId, productVersion, getOSVersion().toString(), getBrowserLanguage() }; return MessageFormat.format(getUserAgentPattern(getOS()), parameters); } public String getOS() { return Platform.getOS(); } public String getOSVersion() { return System.getProperty(PROP_OS_VERSION); } private String getUserAgentPattern(String os) { String userAgentPattern = ""; //$NON-NLS-1$ if (Platform.OS_LINUX.equals(os)) { return USERAGENT_LINUX; //$NON-NLS-1$ } else if (Platform.OS_MACOSX.equals(os)) { return USERAGENT_MAC; //$NON-NLS-1$ } else if (Platform.OS_WIN32.equals(os)) { return USERAGENT_WIN; //$NON-NLS-1$ } return userAgentPattern; } public String getApplicationName() { return getApplicationBundle().getSymbolicName(); } public String getApplicationVersion() { // String fullVersion = getApplicationBundle().getVersion().toString(); String fullVersion = getApplicationBundle().getHeaders().get("Bundle-Version").toString(); int productVersionStart = fullVersion.lastIndexOf(VERSION_DELIMITER); if (productVersionStart > 0) { return fullVersion.substring(0, productVersionStart); } else { return fullVersion; } } /** * Returns the bundle that launched the application that this class runs in. * * @return the defining bundle */ private Bundle getApplicationBundle() { IProduct product = Platform.getProduct(); if (product != null) { return product.getDefiningBundle(); } else { return Platform.getBundle(ECLIPSE_RUNTIME_BULDEID); } } } GoogleAnalyticsEclipseMessages.java000066400000000000000000000022021203611042400527160ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/googleanalytics/eclipse/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.googleanalytics.eclipse; import org.eclipse.osgi.util.NLS; public class GoogleAnalyticsEclipseMessages extends NLS { private static final String BUNDLE_NAME = "org.tigris.subversion.subclipse.tools.usage.googleanalytics.eclipse.messages"; //$NON-NLS-1$ public static String EclipseEnvironment_Error_SavePreferences; static { // initialize resource bundle NLS.initializeMessages(BUNDLE_NAME, GoogleAnalyticsEclipseMessages.class); } private GoogleAnalyticsEclipseMessages() { } } IEclipseEnvironment.java000066400000000000000000000016341203611042400505670ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/googleanalytics/eclipse/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.googleanalytics.eclipse; import org.tigris.subversion.subclipse.tools.usage.googleanalytics.IGoogleAnalyticsParameters; public interface IEclipseEnvironment extends IGoogleAnalyticsParameters { public IEclipseUserAgent getEclipseUserAgent(); } IEclipseUserAgent.java000066400000000000000000000022201203611042400501500ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/googleanalytics/eclipse/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.googleanalytics.eclipse; public interface IEclipseUserAgent { public String getBrowserLanguage(); public String getOS(); /** * Returns the version of the operating system this jre is currently running * on. * * @return the os version * * @see list of os versions * and os names */ public String getOSVersion(); public String getApplicationName(); public String getApplicationVersion(); }LinuxSystem.java000066400000000000000000000131051203611042400471450ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/googleanalytics/eclipse/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.googleanalytics.eclipse; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.regex.Matcher; import java.util.regex.Pattern; public class LinuxSystem { public static final LinuxSystem INSTANCE = new LinuxSystem(); /** * @see an * extensive list of release file locations * * @see * release-file strings */ public final LinuxDistro CENTOS = new CentOSDistro("CentOS", "/etc/redhat-release"); public final LinuxDistro DEBIAN = new LinuxDistro("Debian", "/etc/debian_version"); public final LinuxDistro FEDORA = new LinuxDistro("Fedora", "/etc/fedora-release"); public final LinuxDistro GENTOO = new LinuxDistro("Gentoo", "/etc/gentoo-release"); public final LinuxDistro YELLOWDOG = new LinuxDistro("YellowDog", "/etc/yellowdog-release"); public final LinuxDistro KNOPPIX = new LinuxDistro("Knoppix", "knoppix_version"); public final LinuxDistro MANDRAKE = new LinuxDistro("Mandrake", "/etc/mandrake-release"); public final LinuxDistro MANDRIVA = new LinuxDistro("Mandriva", "/etc/mandriva-release"); public final LinuxDistro PLD = new LinuxDistro("PLD", "/etc/pld-release"); public final LinuxDistro REDHAT = new LinuxDistro("RedHat", "/etc/redhat-release"); public final LinuxDistro SLACKWARE = new LinuxDistro("Slackware", "/etc/slackware-version"); public final LinuxDistro SUSE = new LinuxDistro("SUSE", "/etc/SuSE-release"); public final LinuxDistro UBUNTU = new LinuxDistro("Ubuntu", "/etc/lsb-release"); private final LinuxDistro[] ALL = new LinuxDistro[] { CENTOS, /** * Attention: ubuntu has 2 release files *
    *
  • /etc/lsb-release
  • *
  • /etc/debian_version
  • *
* * It is not reliable to check Debian first and check there if no * /etc/lsb-release exists. Debian may also have a /etc/lsb-release. We must * check ubuntu prior to Debian. * * @see http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=444678 * */ UBUNTU, DEBIAN, FEDORA, GENTOO, KNOPPIX, MANDRAKE, MANDRIVA, PLD, REDHAT, SLACKWARE, SUSE, YELLOWDOG }; public LinuxDistro getDistro() { for (int i = 0; i < ALL.length; i++) { if (ALL[i].isDistro()) { return ALL[i]; } } return null; } public String getDistroNameAndVersion() { LinuxDistro distro = getDistro(); if (distro != null) { return distro.getNameAndVersion(); } else { return ""; } } protected class CentOSDistro extends LinuxDistro { private static final String CENTOS_NAME = "CentOS"; protected CentOSDistro(String name, String releaseFilePath) { super(name, releaseFilePath); } protected boolean isDistro() { try { boolean fileExists = super.isDistro(); if (fileExists) { String content = getDistroFileContent(releaseFilePath); return content != null && content.indexOf(CENTOS_NAME) >= 0; } } catch (IOException e) { } return false; } } public class LinuxDistro { /** * The pattern to match the contents of the release-file - * /etc/fedora-release etc. Attention: Ubuntu has multi-line release * file */ private final Pattern VERSION_REGEX = Pattern.compile("([0-9.]+)"); protected final String releaseFilePath; private String name; protected LinuxDistro(String name, String releaseFilePath) { this.name = name; this.releaseFilePath = releaseFilePath; } protected boolean isDistro() { return exists(releaseFilePath); } public String getName() { return name; } public String getVersion() { try { String distroString = getDistroFileContent(releaseFilePath); Matcher matcher = VERSION_REGEX.matcher(distroString); if (matcher.find()) { return matcher.group(1); } } catch (IOException e) { } return ""; } public String getNameAndVersion() { return new StringBuffer().append(getName()).append(" ").append(getVersion()).toString(); } public String getReleaseFilePath() { return releaseFilePath; } } protected boolean exists(String releaseFilePath) { return new File(releaseFilePath).exists(); } protected String getDistroFileContent(String filePath) throws IOException { int charachtersToRead = 1024; StringBuffer builder = new StringBuffer(charachtersToRead); BufferedReader reader = new BufferedReader(new FileReader(filePath)); char[] buf = new char[charachtersToRead]; int charRead = 0; while ((charRead = reader.read(buf)) != -1 && builder.length() < charachtersToRead) { String readData = String.valueOf(buf, 0, charRead); builder.append(readData); } reader.close(); return builder.toString(); } }messages.properties000066400000000000000000000001221203611042400477160ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/googleanalytics/eclipseEclipseEnvironment_Error_SavePreferences=Could not save preferences file \"{0}\" .000077500000000000000000000000001203611042400401455ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/httpHttpGetRequest.java000066400000000000000000000065771203611042400437570ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/http/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.http; import java.io.IOException; import java.net.HttpURLConnection; import java.net.URL; import java.text.MessageFormat; import org.tigris.subversion.subclipse.tools.usage.tracker.ILoggingAdapter; /** * Class that executes a HTTP Get request to the given url. */ public class HttpGetRequest implements IHttpGetRequest { private static final String USER_AGENT = "User-Agent"; //$NON-NLS-1$ private static final String GET_METHOD_NAME = "GET"; //$NON-NLS-1$ private ILoggingAdapter loggingAdapter = null; private String userAgent; public HttpGetRequest(String userAgent, ILoggingAdapter loggingAdapter) { this.userAgent = userAgent; this.loggingAdapter = loggingAdapter; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.tools.usage.IHttpGetRequest#request(java.lang.String) */ public void request(String urlString) { try { HttpURLConnection urlConnection = createURLConnection(urlString, userAgent); urlConnection.connect(); int responseCode = getResponseCode(urlConnection); if (responseCode == HttpURLConnection.HTTP_OK) { String[] parameters = { urlString, Integer.toString(responseCode) }; loggingAdapter.logMessage(MessageFormat.format(HttpMessages.HttpGetMethod_Success, parameters)); } else { String[] parameters = { urlString }; loggingAdapter.logError(MessageFormat.format(HttpMessages.HttpGetMethod_Error_Http, parameters)); } } catch (Exception e) { String[] parameters = { urlString, e.toString() }; loggingAdapter.logMessage(MessageFormat.format(HttpMessages.HttpGetMethod_Error_Io, parameters)); } } /** * Returns the return code from the given {@link HttpURLConnection}. * Provided to be called by test cases so that they can retrieve the return code. * * @param urlConnection to get the response code from * @return the return code the HttpUrlConnection received * @throws IOException Signals that an I/O exception has occurred. */ protected int getResponseCode(HttpURLConnection urlConnection) throws IOException { return urlConnection.getResponseCode(); } /** * Creates a new url connection. * * @param urlString the url string * @param userAgent the user agent * @return the http url connection * @throws IOException Signals that an I/O exception has occurred. */ protected HttpURLConnection createURLConnection(String urlString, String userAgent) throws IOException { URL url = new URL(urlString); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setInstanceFollowRedirects(true); urlConnection.setRequestMethod(GET_METHOD_NAME); urlConnection.setRequestProperty(USER_AGENT, userAgent); return urlConnection; } } HttpMessages.java000066400000000000000000000024211203611042400434160ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/http/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.http; import org.eclipse.osgi.util.NLS; public class HttpMessages extends NLS { private static final String BUNDLE_NAME = "org.tigris.subversion.subclipse.tools.usage.http.messages"; //$NON-NLS-1$ public static String HttpGetMethod_Error_Http; public static String HttpGetMethod_Error_Io; public static String HttpGetMethod_Success; public static String HttpResourceMap_Error_Exception; public static String HttpResourceMap_Error_Http; public static String HttpResourceMap_Info_HttpQuery; static { // initialize resource bundle NLS.initializeMessages(BUNDLE_NAME, HttpMessages.class); } private HttpMessages() { } } HttpRemotePropertiesProvider.java000066400000000000000000000136041203611042400466770ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/http/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.http; import java.io.BufferedInputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.net.HttpURLConnection; import java.net.URL; import java.util.HashMap; import java.util.Map; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Plugin; import org.tigris.subversion.subclipse.tools.usage.util.HttpEncodingUtils; import org.tigris.subversion.subclipse.tools.usage.util.LoggingUtils; import org.tigris.subversion.subclipse.tools.usage.util.StatusUtils; import org.tigris.subversion.subclipse.tools.usage.util.reader.ReaderUtils; /** * Base class that holds a map that subclasses may get. The values in the map * are fetched and parsed from a document that is fetched on a url that the * subclass provides */ public class HttpRemotePropertiesProvider implements IPropertiesProvider { static final String GET_METHOD_NAME = "GET"; //$NON-NLS-1$ protected Plugin plugin; private Map valuesMap; private String[] keys; private String url; private char valueDelimiter; public HttpRemotePropertiesProvider(String url, char valueDelimiter, Plugin plugin, String[] keys) { this.url = url; this.keys = keys; this.valueDelimiter = valueDelimiter; this.plugin = plugin; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.tools.usage.http.IMapProvider#getValueMap() */ public Map getMap() throws IOException { if (valuesMap == null) { HttpURLConnection urlConnection = createURLConnection(url); InputStreamReader reader = request(urlConnection); this.valuesMap = parse(keys, valueDelimiter, reader, new HashMap()); } return valuesMap; } /** * Sends a http GET request to the given URL. Returns the response string or * null if an error occurred. The errors catched are Exceptions or * HTTP error codes. * * @param url * the url to send the GET request to * @return the response or null if an error occured. * @throws UnsupportedEncodingException * * @see HttpURLConnection */ protected InputStreamReader request(HttpURLConnection urlConnection) throws IOException { InputStreamReader responseReader = null; Object[] messageArguments = { url }; try { urlConnection.connect(); int responseCode = getResponseCode(urlConnection); if (responseCode == HttpURLConnection.HTTP_OK) { IStatus status = StatusUtils.getInfoStatus( plugin.getBundle().getSymbolicName() , HttpMessages.HttpResourceMap_Info_HttpQuery , messageArguments); LoggingUtils.log(status, plugin); responseReader = getInputStreamReader(urlConnection.getInputStream(), urlConnection.getContentType()); } else { IStatus status = StatusUtils.getErrorStatus( plugin.getBundle().getSymbolicName() , HttpMessages.HttpGetMethod_Error_Http, null, messageArguments); plugin.getLog().log(status); } return responseReader; } catch (IOException e) { IStatus status = StatusUtils.getErrorStatus( plugin.getBundle().getSymbolicName() , HttpMessages.HttpGetMethod_Error_Http, e, messageArguments); plugin.getLog().log(status); throw e; } } private InputStreamReader getInputStreamReader(InputStream inputStream, String contentType) throws UnsupportedEncodingException, IOException { String contentTypeCharset = HttpEncodingUtils.getContentTypeCharset(contentType); if (contentTypeCharset != null && contentTypeCharset.length() > 0) { return new InputStreamReader(new BufferedInputStream(inputStream), contentTypeCharset); } else { return new InputStreamReader(new BufferedInputStream(inputStream)); } } /** * Parses the given string and extracts the enablement value. * * @param valueDelimiter * * @param input * stream that holds * @return * @return true, if successful */ private Map parse(String[] keys, char valueDelimiter, InputStreamReader reader, Map valuesMap) throws IOException { for (String key = null; (key = ReaderUtils.skipUntil(reader, keys)) != null;) { char[] delimiters = { valueDelimiter }; String value = ReaderUtils.readStringUntil(reader, delimiters); valuesMap.put(key, value); } return valuesMap; } /** * Creates a new url connection. * * @param urlString * the url string * @return the http url connection * @throws IOException * @throws IOException * Signals that an I/O exception has occurred. */ protected HttpURLConnection createURLConnection(String urlString) throws IOException { URL url = new URL(urlString); HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection(); urlConnection.setInstanceFollowRedirects(true); urlConnection.setRequestMethod(GET_METHOD_NAME); return urlConnection; } /** * Returns the return code from the given {@link HttpURLConnection}. * Provided to be called by test cases so that they can retrieve the return * code. * * @param urlConnection * to get the response code from * @return the return code the HttpUrlConnection received * @throws IOException * Signals that an I/O exception has occurred. */ protected int getResponseCode(HttpURLConnection urlConnection) throws IOException { return urlConnection.getResponseCode(); } }IHttpGetRequest.java000066400000000000000000000014531203611042400440540ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/http/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.http; /** * A interface that represents a HTTP Get Request. */ public interface IHttpGetRequest { public abstract void request(String urlString); }IPropertiesProvider.java000066400000000000000000000014371203611042400447750ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/http/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.http; import java.io.IOException; import java.util.Map; public interface IPropertiesProvider { public Map getMap() throws IOException; }IPropertiesProviderFactory.java000066400000000000000000000013601203611042400463200ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/http/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.http; public interface IPropertiesProviderFactory { public IPropertiesProvider create(); } messages.properties000066400000000000000000000006711203611042400440760ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/httpHttpResourceMap_Error_Exception=Could not query properties at \"{0}\" HttpResourceMap_Error_Http=Could not query properties at \"{0}\, response code was \"{1}\"" HttpResourceMap_Info_HttpQuery=Queried properties at \"{0}\" HttpGetMethod_Error_Http=HTTP GET to \"{0}\" failed, response code received \"{1}\" HttpGetMethod_Error_Io=HTTP GET to "{0}" failed, exception occured\: "{1}" HttpGetMethod_Success=HTTP GET to url "{0}" successfull\! 000077500000000000000000000000001203611042400410025ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/internalSubclipseToolsUsageActivator.java000066400000000000000000000051661203611042400474710ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/internal/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.internal; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; import org.tigris.subversion.subclipse.tools.usage.googleanalytics.ISubclipseEclipseEnvironment; import org.tigris.subversion.subclipse.tools.usage.preferences.UsageReportPreferencesUtils; import org.tigris.subversion.subclipse.tools.usage.reporting.ReportingMessages; import org.tigris.subversion.subclipse.tools.usage.reporting.SubclipseEclipseEnvironment; /** * The activator class controls the plug-in life cycle */ public class SubclipseToolsUsageActivator extends AbstractUIPlugin { // The plug-in ID public static final String PLUGIN_ID = "org.tigris.subversion.subclipse.tools.usage"; // The shared instance private static SubclipseToolsUsageActivator plugin; private ISubclipseEclipseEnvironment eclipseEnvironment; public SubclipseToolsUsageActivator() { plugin = this; } /* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext) */ public void start(BundleContext context) throws Exception { super.start(context); } /* * (non-Javadoc) * @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext) */ public void stop(BundleContext context) throws Exception { plugin = null; super.stop(context); } /** * Returns the shared instance * * @return the shared instance */ public static SubclipseToolsUsageActivator getDefault() { return plugin; } public ISubclipseEclipseEnvironment getSubclipseEclipseEnvironment() { if (eclipseEnvironment == null) { eclipseEnvironment = createEclipseEnvironment(); } return eclipseEnvironment; } private ISubclipseEclipseEnvironment createEclipseEnvironment() { return new SubclipseEclipseEnvironment( ReportingMessages.UsageReport_GoogleAnalytics_Account, ReportingMessages.UsageReport_HostName, UsageReportPreferencesUtils.getPreferences()); } } 000077500000000000000000000000001203611042400414675ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/preferencesGlobalUsageSettings.java000066400000000000000000000065411203611042400462460ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/preferences/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.preferences; import org.eclipse.core.runtime.Plugin; import org.tigris.subversion.subclipse.tools.usage.http.HttpRemotePropertiesProvider; import org.tigris.subversion.subclipse.tools.usage.http.IPropertiesProvider; /** * A class that implements a global reporting enablement setting. The current * implementation queries a given url and extracts the enablement value out of * the response. */ public class GlobalUsageSettings { /** * system property that enables/disables reporting for current eclipse * instance */ public static final String USAGE_REPORTING_ENABLED_KEY = "usage_reporting_enabled"; public static final String REMOTEPROPS_USAGE_REPORTING_ENABLED_KEY = USAGE_REPORTING_ENABLED_KEY + "="; //$NON-NLS-1$ /** the enablement default for the local instance */ private static final boolean INSTANCE_USAGE_REPORTING_ENABLED_DEFAULT = true; /** the enablement default for all instances */ // private static final boolean ALLINSTANCES_USAGE_REPORTING_ENABLED_DEFAULT = false; public GlobalUsageSettings(Plugin plugin) { } /** * Returns true if usage reporting is turned on. * * @return true, if is reporting enabled */ public boolean isReportingEnabled() { return isInstanceReportingEnabled() && isAllInstancesReportingEnabled(); } /** * Returns true if reporting is enabled for all instances. The * appropriate setting is queried in a remote properties file at * {@link #REMOTEPROPS_URL}. The key is * {@link #REMOTEPROPS_ALLINSTANCES_ENABLED_DEFAULT} * * @return true, if the remote peer is set to enabled * * @see #REMOTEPROPS_URL * @see #REMOTEPROPS_ALLINSTANCES_ENABLED_KEY */ private boolean isAllInstancesReportingEnabled() { // try { // Map valueMap = remoteMap.getMap(); // String isEnabled = valueMap.get(REMOTEPROPS_USAGE_REPORTING_ENABLED_KEY); // if (isEnabled == null) { // return ALLINSTANCES_USAGE_REPORTING_ENABLED_DEFAULT; // } // // return Boolean.valueOf(isEnabled); // } catch (Exception e) { // return ALLINSTANCES_USAGE_REPORTING_ENABLED_DEFAULT; // } return true; } /** * Returns true if is reporting is enabled for this eclipse * instance. * * @return true, if this instance shall report usage * * @see #SYSPROPS_INSTANCE_ENABLED_KEY */ private boolean isInstanceReportingEnabled() { return Boolean.valueOf( System.getProperty(USAGE_REPORTING_ENABLED_KEY, String.valueOf(INSTANCE_USAGE_REPORTING_ENABLED_DEFAULT))).booleanValue(); } protected IPropertiesProvider createRemoteMap(String url, char valueDelimiter, Plugin plugin, String[] keys) { return new HttpRemotePropertiesProvider( url, valueDelimiter, plugin, keys); } } IUsageReportPreferenceConstants.java000066400000000000000000000034611203611042400506030ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/preferences/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.preferences; public interface IUsageReportPreferenceConstants { /** The value that determines if usage shall be reported if there's no user set setting. */ public static final boolean USAGEREPORT_ENABLED_DEFAULTVALUE = false; /** * The identifier to be used to identify the value that determines if usage * shall be reported. */ public static final String USAGEREPORT_ENABLED_ID = "allow_usage_report_preference"; //$NON-NLS-1$ /** * The identifier to be used for the value that determines if the user shall * be asked for reporting. */ public static final String ASK_USER_USAGEREPORT_ID = "ask_user_for_usage_report_preference"; //$NON-NLS-1$ /** * The identifier to be used for the value that determines this eclipse * instance. */ public static final String ECLIPSE_INSTANCE_ID = "eclipse_instance_id"; //$NON-NLS-1$ public static final String ECLIPSE_VISITOR_ID = "eclipse_visitor_id"; //$NON-NLS-1$ public static final String FIRST_VISIT = "first_visit"; public static final String LAST_VISIT = "last_visit"; public static final String VISIT_COUNT = "visit_count"; public static final boolean ASK_USER_USAGEREPORT_DEFAULTVALUE = true; } PreferencesMessages.java000066400000000000000000000030121203611042400462570ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/preferences/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.preferences; import org.eclipse.osgi.util.NLS; public class PreferencesMessages extends NLS { private static final String BUNDLE_NAME = "org.tigris.subversion.subclipse.tools.usage.preferences.messages"; //$NON-NLS-1$ public static String UsageReportPreferencePage_Description; public static String UsageReportPreferencePage_AllowReporting; public static String UsageReportPreferencePage_Error_Saving; public static String GlobalUsageSettings_RemoteProps_URL; public static String UsageReportPreferencePage_Description_JBDS; public static String UsageReportPreferencePage_AllowReporting_JBDS; public static String UsageReportPreferencePage_Error_Saving_JBDS; public static String GlobalUsageSettings_RemoteProps_URL_JBDS; static { // initialize resource bundle NLS.initializeMessages(BUNDLE_NAME, PreferencesMessages.class); } private PreferencesMessages() { } } UsageReportPreferenceInitializer.java000066400000000000000000000023531203611042400510000ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/preferences/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.preferences; import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; public class UsageReportPreferenceInitializer extends AbstractPreferenceInitializer { public void initializeDefaultPreferences() { UsageReportPreferencesUtils.getStore().setDefault( IUsageReportPreferenceConstants.ASK_USER_USAGEREPORT_ID, IUsageReportPreferenceConstants.ASK_USER_USAGEREPORT_DEFAULTVALUE); UsageReportPreferencesUtils.getStore().setDefault( IUsageReportPreferenceConstants.USAGEREPORT_ENABLED_ID, IUsageReportPreferenceConstants.USAGEREPORT_ENABLED_DEFAULTVALUE); } } UsageReportPreferencePage.java000066400000000000000000000070751203611042400473770ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/preferences/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.preferences; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Link; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.osgi.service.prefs.BackingStoreException; import org.tigris.subversion.subclipse.tools.usage.internal.SubclipseToolsUsageActivator; import org.tigris.subversion.subclipse.tools.usage.reporting.ReportingMessages; import org.tigris.subversion.subclipse.tools.usage.util.BrowserUtil; import org.tigris.subversion.subclipse.tools.usage.util.StatusUtils; public class UsageReportPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { private Button allowReportingButton; public UsageReportPreferencePage() { super(); } protected Control createContents(Composite parent) { // create the composite Composite composite = new Composite(parent, SWT.NULL); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); composite.setLayoutData(gridData); GridLayout layout = new GridLayout(); layout.numColumns = 2; composite.setLayout(layout); allowReportingButton = new Button(composite, SWT.CHECK); allowReportingButton.setSelection(getPreferenceStore().getBoolean(IUsageReportPreferenceConstants.USAGEREPORT_ENABLED_ID)); Link link = new Link(composite, SWT.WRAP); link.setFont(parent.getFont()); link.setText(getCheckBoxlabel()); link.setToolTipText(ReportingMessages.UsageReport_ExplanationPage); link.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { BrowserUtil.checkedCreateExternalBrowser( ReportingMessages.UsageReport_ExplanationPage, SubclipseToolsUsageActivator.PLUGIN_ID, SubclipseToolsUsageActivator.getDefault().getLog()); } }); return composite; } private String getCheckBoxlabel() { return PreferencesMessages.UsageReportPreferencePage_AllowReporting; } public void init(IWorkbench workbench) { setPreferenceStore(UsageReportPreferences.createPreferenceStore()); } public boolean performOk() { getPreferenceStore().setValue(IUsageReportPreferenceConstants.USAGEREPORT_ENABLED_ID, allowReportingButton.getSelection()); try { UsageReportPreferences.flush(); } catch (BackingStoreException e) { IStatus status = StatusUtils.getErrorStatus(SubclipseToolsUsageActivator.PLUGIN_ID, getPrefsSaveErrorMessage() , e, null); SubclipseToolsUsageActivator.getDefault().getLog().log(status); } return super.performOk(); } private String getPrefsSaveErrorMessage() { return PreferencesMessages.UsageReportPreferencePage_Error_Saving; } }UsageReportPreferences.java000066400000000000000000000036161203611042400467620ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/preferences/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.preferences; import org.eclipse.jface.preference.IPreferenceStore; import org.osgi.service.prefs.BackingStoreException; import org.tigris.subversion.subclipse.tools.usage.internal.SubclipseToolsUsageActivator; public class UsageReportPreferences { public static void setEnabled(boolean enabled) { SubclipseToolsUsageActivator.getDefault().getPreferenceStore().setValue(IUsageReportPreferenceConstants.USAGEREPORT_ENABLED_ID, String.valueOf(enabled)); } public static boolean isEnabled() { return SubclipseToolsUsageActivator.getDefault().getPreferenceStore().getBoolean(IUsageReportPreferenceConstants.USAGEREPORT_ENABLED_ID); } public static boolean isAskUser() { return SubclipseToolsUsageActivator.getDefault().getPreferenceStore().getBoolean(IUsageReportPreferenceConstants.ASK_USER_USAGEREPORT_ID); } public static void setAskUser(boolean askUser) { SubclipseToolsUsageActivator.getDefault().getPreferenceStore().setValue(IUsageReportPreferenceConstants.ASK_USER_USAGEREPORT_ID, askUser); } public static void flush() throws BackingStoreException { UsageReportPreferencesUtils.getPreferences().flush(); } public static IPreferenceStore createPreferenceStore() { return SubclipseToolsUsageActivator.getDefault().getPreferenceStore(); } } UsageReportPreferencesUtils.java000066400000000000000000000037441203611042400500050ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/preferences/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.preferences; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Plugin; import org.eclipse.core.runtime.preferences.ConfigurationScope; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.jface.preference.IPersistentPreferenceStore; import org.eclipse.ui.preferences.ScopedPreferenceStore; import org.osgi.service.prefs.BackingStoreException; import org.tigris.subversion.subclipse.tools.usage.internal.SubclipseToolsUsageActivator; import org.tigris.subversion.subclipse.tools.usage.util.StatusUtils; public class UsageReportPreferencesUtils { private UsageReportPreferencesUtils() { } public static IEclipsePreferences getPreferences() { return new ConfigurationScope().getNode(SubclipseToolsUsageActivator.PLUGIN_ID); } public static IPersistentPreferenceStore getStore() { return new ScopedPreferenceStore(new ConfigurationScope(), SubclipseToolsUsageActivator.PLUGIN_ID); } public static void checkedSavePreferences(IEclipsePreferences preferences, Plugin plugin, String message) { try { preferences.flush(); } catch (BackingStoreException e) { Object[] messageArguments = { preferences.absolutePath() }; IStatus status = StatusUtils.getErrorStatus(plugin.getBundle().getSymbolicName(), message, e, messageArguments); plugin.getLog().log(status); } } } messages.properties000066400000000000000000000007501203611042400454160ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/preferencesUsageReportPreferencePage_Description=Preference page with options for anonymous usage data reporting.\nUsage data is used for statistical matters only. UsageReportPreferencePage_AllowReporting=&Allow the Subclipse team to receive anonymous usage\n statistics for this Eclipse installation (info). UsageReportPreferencePage_Error_Saving=Could not save the preferences. GlobalUsageSettings_RemoteProps_URL=http://anonsvn.jboss.org/repos/jbosstools/workspace/usage/usage.properties 000077500000000000000000000000001203611042400411775ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/reportingReportingMessages.java000066400000000000000000000031011203611042400454760ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/reporting/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.reporting; import org.eclipse.osgi.util.NLS; public class ReportingMessages extends NLS { private static final String BUNDLE_NAME = "org.tigris.subversion.subclipse.tools.usage.reporting.messages"; //$NON-NLS-1$ public static String UsageReport_Reporting_Usage; public static String UsageReport_Querying_Enablement; public static String UsageReport_Asking_User; public static String UsageReport_DialogTitle; public static String UsageReport_Error_SavePreferences; public static String UsageReport_Checkbox_Text; public static String UsageReport_DialogMessage; public static String UsageReport_GoogleAnalytics_Account; public static String UsageReport_HostName; public static String UsageReport_ExplanationPage; public static String UsageReportEnablementDialog_notYetImplemented; static { // initialize resource bundle NLS.initializeMessages(BUNDLE_NAME, ReportingMessages.class); } private ReportingMessages() { } } SubclipseComponents.java000066400000000000000000000062731203611042400460510ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/reporting/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.reporting; import java.util.Collection; import java.util.Set; import java.util.TreeSet; import org.eclipse.core.runtime.IBundleGroup; import org.eclipse.core.runtime.IBundleGroupProvider; import org.tigris.subversion.subclipse.tools.usage.util.collectionfilter.CollectionFilterUtils; import org.tigris.subversion.subclipse.tools.usage.util.collectionfilter.ICollectionFilter; public class SubclipseComponents { /** * The subclipse tools features to check and report. */ public static final String[] subclipseFeatureIdentifiers = { "org.tigris.subversion.clientadapter.feature", "org.tigris.subversion.clientadapter.javahl.feature", "org.tigris.subversion.clientadapter.svnkit.feature", "org.tigris.subversion.subclipse", "org.tigris.subversion.subclipse.graph.feature", "com.collabnet.subversion.merge.feature" }; public static final String[] subclipseFeatureNames = { "CLIENTADAPTER", "JAVAHL", "SVNKIT", "SUBCLIPSE", "GRAPH", "MERGE" }; private static String subclipseVersion; private SubclipseComponents() { // inhibit instantiation } /** * Returns the subclipse components that the given bundle group provider * provides * * @param bundles * the bundles group providers to check for subclipse components * @return */ public static Collection getComponentIds(IBundleGroupProvider[] bundleGroupProviders) { Set componentNames = new TreeSet(); for (int i = 0; i < bundleGroupProviders.length; i++) { CollectionFilterUtils.filter( new SubclipseFeaturesFilter(componentNames) , bundleGroupProviders[i].getBundleGroups(), null); } return componentNames; } public static String getSubclipseVersion() { return subclipseVersion; } private static class SubclipseFeaturesFilter implements ICollectionFilter { private Collection componentNames; private SubclipseFeaturesFilter(Collection componentNames) { this.componentNames = componentNames; } public boolean matches(Object object) { if (object instanceof IBundleGroup) { IBundleGroup bundleGroup = (IBundleGroup)object; for (int i = 0; i < subclipseFeatureIdentifiers.length; i++) { if (subclipseFeatureIdentifiers[i].equals(bundleGroup.getIdentifier())) { if (subclipseFeatureNames[i].equalsIgnoreCase("SUBCLIPSE")) { subclipseVersion = bundleGroup.getVersion(); } this.componentNames.add(subclipseFeatureNames[i]); return true; } } } return false; } } }SubclipseEclipseEnvironment.java000066400000000000000000000050141203611042400475250ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/reporting/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.reporting; import java.util.Collection; import java.util.Iterator; import org.eclipse.core.runtime.IBundleGroupProvider; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.tigris.subversion.subclipse.tools.usage.googleanalytics.ISubclipseEclipseEnvironment; import org.tigris.subversion.subclipse.tools.usage.googleanalytics.eclipse.AbstractEclipseEnvironment; import org.tigris.subversion.subclipse.tools.usage.internal.SubclipseToolsUsageActivator; public class SubclipseEclipseEnvironment extends AbstractEclipseEnvironment implements ISubclipseEclipseEnvironment { private static final char SUBCLIPSE_COMPONENTS_DELIMITER = '-'; public SubclipseEclipseEnvironment(String accountName, String hostName, IEclipsePreferences preferences) { super(accountName, hostName, preferences); } public String getKeyword() { Collection subclipseComponentNames = SubclipseComponents.getComponentIds(getBundleGroupProviders()); return bundleGroupsToKeywordString(subclipseComponentNames); } protected IBundleGroupProvider[] getBundleGroupProviders() { return Platform.getBundleGroupProviders(); } private String bundleGroupsToKeywordString(Collection subclipseComponentNames) { char delimiter = SUBCLIPSE_COMPONENTS_DELIMITER; StringBuffer builder = new StringBuffer(); Iterator iter = subclipseComponentNames.iterator(); while (iter.hasNext()) { String componentName = (String)iter.next(); builder.append(componentName); if (iter.hasNext()) { builder.append(delimiter); } } return builder.toString(); } public String getSubclipseVersion() { return SubclipseToolsUsageActivator.getDefault().getBundle().getHeaders().get("Bundle-Version").toString(); } public boolean isLinuxDistro() { return getLinuxDistroNameAndVersion() != null; } }UsageReport.java000066400000000000000000000142611203611042400443060ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/reporting/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.reporting; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.IJobChangeEvent; import org.eclipse.core.runtime.jobs.IJobChangeListener; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.window.Window; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.progress.UIJob; import org.osgi.framework.InvalidSyntaxException; import org.osgi.service.prefs.BackingStoreException; import org.tigris.subversion.subclipse.tools.usage.googleanalytics.GoogleAnalyticsUrlStrategy; import org.tigris.subversion.subclipse.tools.usage.googleanalytics.ISubclipseEclipseEnvironment; import org.tigris.subversion.subclipse.tools.usage.http.HttpGetRequest; import org.tigris.subversion.subclipse.tools.usage.internal.SubclipseToolsUsageActivator; import org.tigris.subversion.subclipse.tools.usage.preferences.GlobalUsageSettings; import org.tigris.subversion.subclipse.tools.usage.preferences.UsageReportPreferences; import org.tigris.subversion.subclipse.tools.usage.tracker.ILoggingAdapter; import org.tigris.subversion.subclipse.tools.usage.tracker.ITracker; import org.tigris.subversion.subclipse.tools.usage.tracker.IURLBuildingStrategy; import org.tigris.subversion.subclipse.tools.usage.tracker.internal.FocusPoint; import org.tigris.subversion.subclipse.tools.usage.tracker.internal.IFocusPoint; import org.tigris.subversion.subclipse.tools.usage.tracker.internal.PluginLogger; import org.tigris.subversion.subclipse.tools.usage.tracker.internal.SuffixFocusPoint; import org.tigris.subversion.subclipse.tools.usage.tracker.internal.Tracker; import org.tigris.subversion.subclipse.tools.usage.util.StatusUtils; public class UsageReport { private IFocusPoint focusPoint; private GlobalUsageSettings globalSettings; private ISubclipseEclipseEnvironment eclipseEnvironment; public UsageReport() throws InvalidSyntaxException { eclipseEnvironment = SubclipseToolsUsageActivator.getDefault().getSubclipseEclipseEnvironment(); focusPoint = new SuffixFocusPoint("tools", eclipseEnvironment.getSubclipseVersion()) //$NON-NLS-1$ .setChild(new FocusPoint("usage") //$NON-NLS-1$ .setChild(new FocusPoint("action") //$NON-NLS-1$ .setChild(new FocusPoint("wsstartup")))); //$NON-NLS-1$ globalSettings = new GlobalUsageSettings(SubclipseToolsUsageActivator .getDefault()); } public void report() { new ReportingJob().schedule(); } private void askUser() { UsageReportEnablementDialog dialog = new UsageReportEnablementDialog( true, PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell()); if (dialog.open() == Window.OK) { UsageReportPreferences.setEnabled(dialog.isReportEnabled()); UsageReportPreferences.setAskUser(false); flushPreferences(); } } private void flushPreferences() { try { UsageReportPreferences.flush(); } catch (BackingStoreException e) { IStatus status = StatusUtils.getErrorStatus(SubclipseToolsUsageActivator.PLUGIN_ID, ReportingMessages.UsageReport_Error_SavePreferences, e, null); SubclipseToolsUsageActivator.getDefault().getLog().log(status); } } /** * Reports the usage of the current JBoss Tools / JBoss Developer Studio * installation. */ private void doReport() { if (UsageReportPreferences.isEnabled()) { IURLBuildingStrategy urlBuildingStrategy = new GoogleAnalyticsUrlStrategy(eclipseEnvironment); ILoggingAdapter loggingAdapter = new PluginLogger(SubclipseToolsUsageActivator.getDefault()); ITracker tracker = new Tracker( urlBuildingStrategy , new HttpGetRequest(eclipseEnvironment.getUserAgent(), loggingAdapter) , loggingAdapter); tracker.trackAsynchronously(focusPoint); } } private class ReportingJob extends Job { private ReportingJob() { super(ReportingMessages.UsageReport_Reporting_Usage); } protected IStatus run(IProgressMonitor monitor) { if (monitor.isCanceled()) { return Status.CANCEL_STATUS; } monitor.beginTask(ReportingMessages.UsageReport_Querying_Enablement, 2); if (globalSettings.isReportingEnabled()) { if (monitor.isCanceled()) { return Status.CANCEL_STATUS; } monitor.worked(1); if (UsageReportPreferences.isAskUser()) { if (monitor.isCanceled()) { return Status.CANCEL_STATUS; } askUserAndReport(); } else { if (monitor.isCanceled()) { return Status.CANCEL_STATUS; } doReport(); } monitor.worked(2); monitor.done(); } return Status.OK_STATUS; } private void askUserAndReport() { Job askUserJob = new AskUserJob(); askUserJob.addJobChangeListener(new IJobChangeListener() { public void sleeping(IJobChangeEvent event) { // ignore } public void scheduled(IJobChangeEvent event) { // ignore } public void running(IJobChangeEvent event) { // ignore } public void done(IJobChangeEvent event) { doReport(); } public void awake(IJobChangeEvent event) { // ignore } public void aboutToRun(IJobChangeEvent event) { // ignore } }); askUserJob.setUser(true); askUserJob.setPriority(Job.SHORT); askUserJob.schedule(); } } private class AskUserJob extends UIJob { private AskUserJob() { super(ReportingMessages.UsageReport_Asking_User); } public IStatus runInUIThread(IProgressMonitor monitor) { askUser(); return Status.OK_STATUS; } } }UsageReportDispatcher.java000066400000000000000000000037021203611042400463130ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/reporting/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.reporting; import org.eclipse.core.runtime.IStatus; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IStartup; import org.tigris.subversion.subclipse.tools.usage.internal.SubclipseToolsUsageActivator; import org.tigris.subversion.subclipse.tools.usage.util.LoggingUtils; import org.tigris.subversion.subclipse.tools.usage.util.StatusUtils; public class UsageReportDispatcher implements IStartup { public static final boolean TEST_MODE; static { String application = System.getProperty("eclipse.application", ""); if (application.length() > 0) { TEST_MODE = application.endsWith("testapplication") || application.endsWith("uitest"); } else { String commands = System.getProperty("eclipse.commands", ""); TEST_MODE = commands.contains("testapplication\n"); } } public void earlyStartup() { if (TEST_MODE) { return; } Display.getDefault().asyncExec(new Runnable() { public void run() { try { new UsageReport().report(); } catch (Exception e) { IStatus status = StatusUtils.getErrorStatus(SubclipseToolsUsageActivator.PLUGIN_ID, "could not start usage reporting", e, null); LoggingUtils.log(status, SubclipseToolsUsageActivator.getDefault()); } } }); } } UsageReportEnablementDialog.java000066400000000000000000000067151203611042400474260ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/reporting/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.reporting; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.window.IShellProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Link; import org.eclipse.swt.widgets.Shell; import org.tigris.subversion.subclipse.tools.usage.internal.SubclipseToolsUsageActivator; import org.tigris.subversion.subclipse.tools.usage.util.BrowserUtil; public class UsageReportEnablementDialog extends Dialog { private Button checkBox; private boolean reportEnabled; public UsageReportEnablementDialog(boolean reportEnabled, Shell parentShell) { super(parentShell); this.reportEnabled = reportEnabled; } public UsageReportEnablementDialog(boolean reportEnabled, IShellProvider parentShell) { super(parentShell); this.reportEnabled = reportEnabled; } protected void buttonPressed(int buttonId) { if (buttonId == IDialogConstants.OK_ID) { this.reportEnabled = checkBox.getSelection(); } else if (buttonId == IDialogConstants.CANCEL_ID) { this.reportEnabled = false; } super.buttonPressed(buttonId); } protected void configureShell(Shell shell) { super.configureShell(shell); shell.setText(getDialogTitle()); } private String getDialogTitle() { return ReportingMessages.UsageReport_DialogTitle; } protected void createButtonsForButtonBar(Composite parent) { createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); checkBox.setFocus(); checkBox.setSelection(reportEnabled); } protected Control createDialogArea(Composite parent) { Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); // message Link link = new Link(composite, SWT.WRAP); link.setFont(parent.getFont()); link.setText(ReportingMessages.UsageReport_DialogMessage); link.setToolTipText(ReportingMessages.UsageReport_ExplanationPage); link.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { BrowserUtil.checkedCreateExternalBrowser( ReportingMessages.UsageReport_ExplanationPage, SubclipseToolsUsageActivator.PLUGIN_ID, SubclipseToolsUsageActivator.getDefault().getLog()); } }); // checkbox checkBox = new Button(composite, SWT.CHECK); checkBox.setText(ReportingMessages.UsageReport_Checkbox_Text); return composite; } public boolean isReportEnabled() { return reportEnabled; } } messages.properties000066400000000000000000000013251203611042400451250ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/reportingUsageReport_Reporting_Usage=Reporting Subclipse usage UsageReport_Querying_Enablement=Querying whether reporting is globally enabled UsageReport_Asking_User=Asking User to allow reporting UsageReport_DialogTitle=Subclipse Usage UsageReport_Error_SavePreferences=Could not save preferences {0} UsageReport_DialogMessage=Please allow Subclipse team to receive anonymous usage statistics for this Eclipse instance (info). UsageReport_Checkbox_Text=Report usage of Subclipse to Subclipse team. UsageReport_GoogleAnalytics_Account=UA-18761686-6 UsageReport_HostName=subclipse.tigris.org UsageReport_ExplanationPage=http://subclipse.tigris.org/usage.html UsageReportEnablementDialog_notYetImplemented=Not yet implemented. 000077500000000000000000000000001203611042400406215ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/trackerILoggingAdapter.java000066400000000000000000000014601203611042400444650ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/tracker/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.tracker; public interface ILoggingAdapter { public void logError(String errorMessage); public void logMessage(String message); } ITracker.java000066400000000000000000000032001203611042400431630ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/tracker/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.tracker; import java.io.UnsupportedEncodingException; import org.tigris.subversion.subclipse.tools.usage.tracker.internal.IFocusPoint; public interface ITracker { /** * Track the focusPoint in the application synchronously.
* Please be cognizant while using this method. Since, it would have * a peformance hit on the actual application. Use it unless it's really * needed * * @param focusPoint * Focus point of the application like application load, * application module load, user actions, error events etc. * @throws UnsupportedEncodingException */ public abstract void trackSynchronously(IFocusPoint focusPoint); /** * Track the focusPoint in the application asynchronously.
* * @param focusPoint * Focus point of the application like application load, * application module load, user actions, error events etc. */ public abstract void trackAsynchronously(IFocusPoint focusPoint); }IURLBuildingStrategy.java000066400000000000000000000017471203611042400454510ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/tracker/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.tracker; import java.io.UnsupportedEncodingException; import org.tigris.subversion.subclipse.tools.usage.tracker.internal.IFocusPoint; /** * Interface for the URL building strategy */ public interface IURLBuildingStrategy { public String build(IFocusPoint focusPoint) throws UnsupportedEncodingException; } 000077500000000000000000000000001203611042400424355ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/tracker/internalFocusPoint.java000066400000000000000000000054121203611042400453730ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/tracker/internal/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.tracker.internal; import org.tigris.subversion.subclipse.tools.usage.util.HttpEncodingUtils; /** * Focus point of the application. It can represent data points like application * load, application module load, user actions, error events etc. * * @see based on http://jgoogleAnalytics * .googlecode.com */ public class FocusPoint implements IFocusPoint { private String name; private IFocusPoint childFocusPoint; public static final String URI_SEPARATOR = "/"; public static final String TITLE_SEPARATOR = "-"; public FocusPoint(String name) { this.name = name; } public String getName() { return name; } public IFocusPoint setChild(IFocusPoint childFocusPoint) { this.childFocusPoint = childFocusPoint; return this; } public IFocusPoint getChild() { return childFocusPoint; } public String getURI() { StringBuffer builder = new StringBuffer(); appendContentURI(builder, this); return HttpEncodingUtils.checkedEncodeUtf8(builder.toString()); } protected void appendContentURI(StringBuffer builder, IFocusPoint focusPoint) { IFocusPoint parentFocuPoint = focusPoint.getChild(); appendToURI(focusPoint.getName(), builder); if (parentFocuPoint != null) { appendContentURI(builder, parentFocuPoint); } } protected void appendToURI(String toAppend, StringBuffer builder) { builder.append(URI_SEPARATOR); builder.append(toAppend); } protected void appendToTitle(String toAppend, StringBuffer builder) { builder.append(TITLE_SEPARATOR); builder.append(toAppend); } public String getTitle() { StringBuffer builder = new StringBuffer(); appendContentTitle(builder, this); return HttpEncodingUtils.checkedEncodeUtf8(builder.toString()); } protected void appendContentTitle(StringBuffer builder, IFocusPoint focusPoint) { IFocusPoint childFocusPoint = focusPoint.getChild(); builder.append(focusPoint.getName()); if (childFocusPoint != null) { builder.append(TITLE_SEPARATOR); appendContentTitle(builder, childFocusPoint); } } }IFocusPoint.java000066400000000000000000000016411203611042400455040ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/tracker/internal/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.tracker.internal; public interface IFocusPoint { public abstract String getName(); public abstract IFocusPoint setChild(IFocusPoint childFocusPoint); public abstract IFocusPoint getChild(); public abstract String getURI(); public abstract String getTitle(); }PluginLogger.java000066400000000000000000000032011203611042400456720ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/tracker/internal/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.tracker.internal; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Plugin; import org.eclipse.core.runtime.Status; import org.tigris.subversion.subclipse.tools.usage.tracker.ILoggingAdapter; import org.tigris.subversion.subclipse.tools.usage.util.LoggingUtils; public class PluginLogger implements ILoggingAdapter { private final boolean tracingEnabled; private Plugin plugin; public PluginLogger(Plugin plugin) { this.tracingEnabled = LoggingUtils.isPluginTracingEnabled(plugin); this.plugin = plugin; } public void logError(String message) { log(IStatus.ERROR, message); } public void logMessage(String message) { log(IStatus.INFO, message); } private void log(int severity, String message) { if (!tracingEnabled) { return; } if (plugin != null) { IStatus status = new Status(severity, plugin.getBundle().getSymbolicName(), IStatus.OK, message, null); plugin.getLog().log(status); } } } SubclipseToolsFocusPoint.java000066400000000000000000000034671203611042400502760ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/tracker/internal/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.tracker.internal; import org.tigris.subversion.subclipse.tools.usage.util.HttpEncodingUtils; /** * A focus point that always reports the current subclipse version as last * component. */ public class SubclipseToolsFocusPoint extends FocusPoint { public SubclipseToolsFocusPoint(String name) { super(name); } public String getURI() { StringBuffer builder = new StringBuffer(); appendContentURI(builder, this); // appendSubclipseVersion(builder, URI_SEPARATOR); return HttpEncodingUtils.checkedEncodeUtf8(builder.toString()); } protected void appendSubclipseVersion(StringBuffer builder, String separator) { builder.append(separator); // builder.append(getSubclipseVersion()); } public String getTitle() { StringBuffer builder = new StringBuffer(); appendContentTitle(builder, this); appendSubclipseVersion(builder, TITLE_SEPARATOR); return HttpEncodingUtils.checkedEncodeUtf8(builder.toString()); } // protected String getSubclipseVersion() { // return SubclipseToolsUsageActivator.getDefault().getBundle().getVersion().toString(); // return SubclipseToolsUsageActivator.getDefault().getBundle().getHeaders().get("Bundle-Version").toString(); // } } SuffixFocusPoint.java000066400000000000000000000027231203611042400465620ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/tracker/internal/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.tracker.internal; import org.tigris.subversion.subclipse.tools.usage.util.HttpEncodingUtils; /** * A focus point that always reports the current subclipse version as last * component. */ public class SuffixFocusPoint extends FocusPoint { private String suffix; public SuffixFocusPoint(String name, String suffix) { super(name); this.suffix = suffix; } public String getURI() { StringBuffer builder = new StringBuffer(); appendContentURI(builder, this); appendToURI(suffix, builder); return HttpEncodingUtils.checkedEncodeUtf8(builder.toString()); } public String getTitle() { StringBuffer builder = new StringBuffer(); appendContentTitle(builder, this); appendToTitle(suffix, builder); return HttpEncodingUtils.checkedEncodeUtf8(builder.toString()); } } Tracker.java000066400000000000000000000057631203611042400447060ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/tracker/internal/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.tracker.internal; import java.io.UnsupportedEncodingException; import java.text.MessageFormat; import org.tigris.subversion.subclipse.tools.usage.http.IHttpGetRequest; import org.tigris.subversion.subclipse.tools.usage.tracker.ILoggingAdapter; import org.tigris.subversion.subclipse.tools.usage.tracker.ITracker; import org.tigris.subversion.subclipse.tools.usage.tracker.IURLBuildingStrategy; /** * Reports (tracks) usage * * @see based on http://jgoogleAnalytics * .googlecode.com */ public class Tracker implements ITracker { private IURLBuildingStrategy urlBuildingStrategy = null; private IHttpGetRequest httpRequest; private ILoggingAdapter loggingAdapter; public Tracker(IURLBuildingStrategy urlBuildingStrategy, IHttpGetRequest httpGetRequest, ILoggingAdapter loggingAdapter) { this.httpRequest = httpGetRequest; this.loggingAdapter = loggingAdapter; this.urlBuildingStrategy = urlBuildingStrategy; } public void trackSynchronously(IFocusPoint focusPoint) { String[] parameters = { focusPoint.getTitle() }; loggingAdapter .logMessage(MessageFormat.format(TrackerMessages.Tracker_Synchronous, parameters)); try { httpRequest.request(getTrackingUrl(focusPoint)); } catch (Exception e) { String[] errorParameters = { e.getMessage() }; loggingAdapter.logError(MessageFormat.format(TrackerMessages.Tracker_Error, errorParameters)); } } protected String getTrackingUrl(IFocusPoint focusPoint) throws UnsupportedEncodingException { return urlBuildingStrategy.build(focusPoint); } public void trackAsynchronously(IFocusPoint focusPoint) { String[] parameters = { focusPoint.getTitle() }; loggingAdapter.logMessage(MessageFormat .format(TrackerMessages.Tracker_Asynchronous, parameters)); new Thread(new TrackingRunnable(focusPoint)).start(); } private class TrackingRunnable implements Runnable { private IFocusPoint focusPoint; private TrackingRunnable(IFocusPoint focusPoint) { this.focusPoint = focusPoint; } public void run() { try { httpRequest.request(getTrackingUrl(focusPoint)); } catch (Exception e) { String[] parameters = { e.getMessage() }; loggingAdapter.logError(MessageFormat.format(TrackerMessages.Tracker_Error, parameters)); } } } } TrackerMessages.java000066400000000000000000000022001203611042400463550ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/tracker/internal/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.tracker.internal; import org.eclipse.osgi.util.NLS; public class TrackerMessages extends NLS { private static final String BUNDLE_NAME = "org.tigris.subversion.subclipse.tools.usage.tracker.internal.messages"; //$NON-NLS-1$ public static String Tracker_Synchronous; public static String Tracker_Asynchronous; public static String Tracker_Error; static { // initialize resource bundle NLS.initializeMessages(BUNDLE_NAME, TrackerMessages.class); } private TrackerMessages() { } } messages.properties000066400000000000000000000002651203611042400463650ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/tracker/internalTracker_Asynchronous=Tracking asynchronously focusPoint \"{0}\" Tracker_Error=Tracking failed, exception thrown\: "{0}" Tracker_Synchronous=Tracking synchronously focusPoint \"{0}\"000077500000000000000000000000001203611042400401435ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/utilBrowserUtil.java000066400000000000000000000054451203611042400432770ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/util/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.util; import java.net.MalformedURLException; import java.net.URL; import org.eclipse.core.runtime.ILog; import org.eclipse.core.runtime.IStatus; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.browser.IWebBrowser; public class BrowserUtil { /** * Opens a browser for the given url with the given id. If an error occurs * it will be reported to the given log provider with the given plugin id. * * @param url * the url to open a browser for. * @param browserId * the id for the new browser. * @param pluginId * the plugin id to log for. * @param log * the log provider to log against if an error occurred. */ public static void checkedCreateInternalBrowser(String url, String browserId, String pluginId, ILog log) { try { openUrl(url, PlatformUI.getWorkbench().getBrowserSupport().createBrowser(browserId), pluginId, log); } catch (PartInitException e) { Object[] messageArguments = { url }; IStatus errorStatus = StatusUtils.getErrorStatus(pluginId, "Could not open browser for url \"{0}\".", e, messageArguments); log.log(errorStatus); } } public static void checkedCreateExternalBrowser(String url, String pluginId, ILog log) { try { openUrl(url, PlatformUI.getWorkbench().getBrowserSupport().getExternalBrowser(), pluginId, log); } catch (PartInitException e) { Object[] messageArguments = { url }; IStatus errorStatus = StatusUtils.getErrorStatus(pluginId, "Could not open browser for url \"{0}\".", e, messageArguments); log.log(errorStatus); } } public static void openUrl(String url, IWebBrowser browser, String pluginId, ILog log) { Object[] messageArguments = { url }; try { browser.openURL(new URL(url)); } catch (PartInitException e) { IStatus errorStatus = StatusUtils.getErrorStatus(pluginId, "Could not open browser for url \"{0}\".", e, messageArguments); log.log(errorStatus); } catch (MalformedURLException e) { IStatus errorStatus = StatusUtils.getErrorStatus(pluginId, "Could not display malformed url \"{0}\".", e, messageArguments); log.log(errorStatus); } } } BundleUtils.java000066400000000000000000000047411203611042400432460ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/util/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.util; import java.util.Collection; import java.util.regex.Pattern; import org.eclipse.core.runtime.Assert; import org.osgi.framework.Bundle; import org.tigris.subversion.subclipse.tools.usage.util.collectionfilter.CollectionFilterUtils; import org.tigris.subversion.subclipse.tools.usage.util.collectionfilter.ICollectionFilter; public class BundleUtils { /** * Returns the bundles among the available ones that match the given filter. * * @param filter * the filter to match the available bundles against * @param bundles * the bundles * @return the bundles that match the given filter */ public static void getBundles(ICollectionFilter filter, Collection filteredBundleCollection, Bundle[] bundles) { CollectionFilterUtils.filter(filter, bundles, filteredBundleCollection); } /** * Returns the bundles that have a symbolic name that match the given regex. * * @param bundleSymbolicNameRegex * the symbolic name regex to match. * @param bundles * the bundles * @return the bundles */ public static void getBundles(String bundleSymbolicNameRegex, Collection filteredBundleCollection, Bundle[] bundles) { getBundles(new BundleSymbolicNameFilter(bundleSymbolicNameRegex) , filteredBundleCollection , bundles); } /** * A filter that matches bundles against a given symbolic name regex. */ public static class BundleSymbolicNameFilter implements ICollectionFilter { private Pattern pattern; public BundleSymbolicNameFilter(String symbolicNameRegex) { this.pattern = Pattern.compile(symbolicNameRegex); } public boolean matches(Object object) { if (object instanceof Bundle) { Bundle bundle = (Bundle)object; Assert.isTrue(bundle != null); return pattern.matcher(bundle.getSymbolicName()).matches(); } return false; } } } HttpEncodingUtils.java000066400000000000000000000036261203611042400444240ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/util/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.util; import java.io.UnsupportedEncodingException; import java.net.URLEncoder; import java.util.regex.Matcher; import java.util.regex.Pattern; public class HttpEncodingUtils { private static final String ENCODING_UTF8 = "UTF-8"; private static Pattern CHARSET_ENCODING_PATTERN = Pattern.compile("charset=(.+)"); /** * Encodes the given string in utf8 while catching exceptions that may * occur. If an encoding exception occurs, null is returned * * @param aString * the a string to be encoded * @return the encoded string or null if an error occured while * encoding */ public static String checkedEncodeUtf8(String string) { try { return URLEncoder.encode(string, ENCODING_UTF8); } catch (UnsupportedEncodingException e) { return string; } } /** * Returns the charset indicated in the content-type field of the http * header. Returns null if none is indicated. * * @param contentType * the content type * @return the content type charset or null */ public static String getContentTypeCharset(String contentType) { Matcher matcher = CHARSET_ENCODING_PATTERN.matcher(contentType); if (!matcher.find()) { return null; } return matcher.group(1); } } LoggingUtils.java000066400000000000000000000020711203611042400434150ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/util/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.util; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Plugin; public class LoggingUtils { public static boolean isPluginTracingEnabled(Plugin plugin) { return plugin != null && plugin.isDebugging(); } public static void log(IStatus status, Plugin plugin) { if (status.getSeverity() == IStatus.INFO && !isPluginTracingEnabled(plugin)) { return; } plugin.getLog().log(status); } } StatusUtils.java000066400000000000000000000047541203611042400433240ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/util/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.util; import java.text.MessageFormat; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; public class StatusUtils { private StatusUtils() { // inhibit instantiation } /** * Returns an error status for a given plugin id, message and arguments. * * @param pluginId * the plugin id * @param message * the message * @param throwable * the throwable * @param messageArguments * the message arguments * @return the error status */ public static IStatus getErrorStatus(String pluginId, String message, Throwable throwable, Object[] messageArguments) { String formattedMessage = null; if (message != null) { formattedMessage = MessageFormat.format(message, messageArguments); } return new Status(Status.ERROR, pluginId, Status.ERROR, formattedMessage, throwable); } /** * Returns an debug status for a given plugin id, message and arguments. * * @param pluginId * the plugin id * @param message * the message * @param messageArguments * the message arguments * * @return the debug status */ public static IStatus getInfoStatus(String pluginId, String message, Object[] messageArguments) { return new Status(Status.INFO, pluginId, Status.INFO, MessageFormat.format(message, messageArguments), null); } /** * Clones a given status. * * @param status * the status * * @return the i status */ public static IStatus clone(IStatus status) { switch (status.getSeverity()) { case IStatus.INFO: return getInfoStatus(status.getPlugin(), status.getMessage(), null); case IStatus.ERROR: return getErrorStatus(status.getPlugin(), status.getMessage(), status.getException(), null); default: throw new UnsupportedOperationException("noy implemented yet!"); } } } StringUtils.java000066400000000000000000000016171203611042400433020ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/util/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.util; public class StringUtils { private static final String LINE_SEPARATOR_KEY = "line.separator"; public StringUtils() { } public static String getLineSeparator() { return System.getProperty(LINE_SEPARATOR_KEY); } } 000077500000000000000000000000001203611042400435045ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/util/collectionfilterCollectionFilterUtils.java000066400000000000000000000024111203611042400506270ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/util/collectionfilter/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.util.collectionfilter; import java.util.Collection; public class CollectionFilterUtils { /** * Returns the entries that match the given filter. * * @param filter * the filter to match the available entries against * @param entries * the entries to filter * @return the entries that match the given filter */ public static void filter(ICollectionFilter filter, Object[] entries, Collection targetColletion) { for (int i = 0; i < entries.length; i++) { if (filter.matches(entries[i])) { if (targetColletion != null) { targetColletion.add(entries[i]); } } } } } CompositeCollectionFilter.java000066400000000000000000000024741203611042400515020ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/util/collectionfilter/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.util.collectionfilter; public class CompositeCollectionFilter implements ICollectionFilter { private ICollectionFilter filters[]; /** * Instantiates a new composite filter that applies several given * filters. * * @param filters * the filters */ public CompositeCollectionFilter(ICollectionFilter[] filters) { this.filters = filters; } /** * Applies the filters this composite filter has. All filters have to * match so that the filter says the given bundle matches. */ public boolean matches(Object object) { for (int i = 0; i < filters.length; i++) { if (!filters[i].matches(object)) { return false; } } return true; } }ICollectionFilter.java000066400000000000000000000015411203611042400477220ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/util/collectionfilter/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.util.collectionfilter; public interface ICollectionFilter { /** * Matches. * * @param bundle * the bundle * @return true, if successful */ public boolean matches(Object object); }000077500000000000000000000000001203611042400414055ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/util/readerAppendUntilAlternativeImpl.java000066400000000000000000000026621203611042400475220ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/util/reader/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.util.reader; import java.io.IOException; import java.io.Reader; import java.io.Writer; public class AppendUntilAlternativeImpl extends ReadUntilAlternativesImpl { private Writer writer; private int numOfWrittenCharacters; public AppendUntilAlternativeImpl(Reader reader, Writer writer, String[] alternatives) { super(reader, alternatives); this.writer = writer; } protected boolean doContinueRead(char character, int numberOfCharactersRead) throws IOException { if (super.doContinueRead(character, numberOfCharactersRead)) { if (!isMatching()) { // don't append matching characters writer.write(character); numOfWrittenCharacters++; } return true; } else { return false; } } public int getNumOfWrittenCharacters() { return numOfWrittenCharacters; } }AppendUntilImpl.java000066400000000000000000000026101203611042400453140ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/util/reader/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.util.reader; import java.io.IOException; import java.io.Reader; import java.io.Writer; public class AppendUntilImpl extends ReadUntilImpl { private Writer writer; private int numOfWrittenCharacters; public AppendUntilImpl(Reader reader, Writer writer, char[] character) { super(reader, character); this.writer = writer; } protected boolean doContinueRead(char character, int numberOfCharactersRead) throws IOException { if (super.doContinueRead(character, numberOfCharactersRead)) { if (!isMatching()) { // don't append matching characters writer.write(character); numOfWrittenCharacters++; } return true; } else { return false; } } public int getNumOfWrittenCharacters() { return numOfWrittenCharacters; } }ReadUntilAlternativesImpl.java000066400000000000000000000066341203611042400473540ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/util/reader/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.util.reader; import java.io.Reader; public class ReadUntilAlternativesImpl extends ReadUntilImpl { private char[][] allAlternatives; private char[] currentAlternative; private int alternativesIndex = -1; public ReadUntilAlternativesImpl(Reader reader, String[] stringAlternatives) { super(reader, new char[0]); initAlternativesCharSequences(stringAlternatives); } private void initAlternativesCharSequences(String[] stringAlternatives) { this.allAlternatives = new char[stringAlternatives.length][]; for (int i = 0; i < stringAlternatives.length; i++) { this.allAlternatives[i] = stringAlternatives[i].toCharArray(); } } protected int getNumberOfCharactersToMatch() { if (currentAlternative != null) { return currentAlternative.length; } else { return 0; } } protected boolean doesMatch(char character) { if (currentAlternative == null || currentAlternative[getMatchingIndex()] != character) { // current alternative does not match new character, select a new // alternative boolean newAlternativeSelected = matchAlternative(character); if (!newAlternativeSelected) { // no alternative matches current character + new one setMatchingIndex(0); } return newAlternativeSelected; } else { return true; } } /** * Returns whether the given character matches an alternative (in other * words the given character matches an alternative at the current matching * index). * * @param character * the character * @return true, if successful */ private boolean matchAlternative(char character) { for (int i = alternativesIndex + 1; i < allAlternatives.length; i++) { char[] alternative = allAlternatives[i]; if (doesMatch(character, alternative)) { this.currentAlternative = alternative; this.alternativesIndex = i; return true; } } this.currentAlternative = null; this.alternativesIndex = -1; return false; } /** * Returns whether the given potentially matching alternative (String) * matches the currently selected alternative and the additional character. * * @param character * @param potentiallyMatchingAlternative * the new alternative that could match * @return */ private boolean doesMatch(char character, char[] potentiallyMatchingAlternative) { int currentMatchingIndex = getMatchingIndex(); for (int j = 0; j < currentMatchingIndex; j++) { if (potentiallyMatchingAlternative[j] != currentAlternative[j]) { return false; } } return potentiallyMatchingAlternative[currentMatchingIndex] == character; } protected char[] getCharactersToMatch() { return currentAlternative; } public String getAlternative() { if (alternativesIndex >= 0) { return new String(allAlternatives[alternativesIndex]); } else { return null; } } }ReadUntilImpl.java000066400000000000000000000052351203611042400447660ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/util/reader/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.util.reader; import java.io.IOException; import java.io.Reader; public class ReadUntilImpl implements ReaderVisitor { /** returned by a stream if the end of the stream is reached. */ private static final char EOS = (char) -1; private Reader reader; private boolean matched = false; private int numberOfCharactersRead; private char[] characters; private int matchingCharactersIndex = 0; public ReadUntilImpl(Reader reader, char[] characters) { this.reader = reader; this.numberOfCharactersRead = 0; this.characters = characters; } public final boolean continueRead(char character, int numberOfCharactersRead) throws IOException { this.numberOfCharactersRead = numberOfCharactersRead; return doContinueRead(character, numberOfCharactersRead); } protected boolean doContinueRead(char character, int numberOfCharactersRead) throws IOException { boolean continueRead = false; boolean matches = doesMatch(character); if (!matches) { continueRead = !matches; } else { int matchingIndex = getMatchingIndex() + 1; setMatchingIndex(matchingIndex); continueRead = matches && matchingIndex < getNumberOfCharactersToMatch(); } setMatches(matches); return continueRead; } public boolean isMatching() { return matched; } public int getNumberOfCharactersRead() { return this.numberOfCharactersRead; } public void read() throws IOException { char character = 0; while ((character = (char) reader.read()) != EOS) { if (!continueRead(character, ++numberOfCharactersRead)) { return; } } } protected void setMatchingIndex(int index) { this.matchingCharactersIndex = index; } protected int getMatchingIndex() { return matchingCharactersIndex; } protected boolean doesMatch(char character) { return characters[matchingCharactersIndex] == character; } protected int getNumberOfCharactersToMatch() { return characters.length; } protected char[] getCharactersToMatch() { return characters; } protected void setMatches(boolean matches) { matched = matches; } }ReaderUtils.java000066400000000000000000000061131203611042400444740ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/util/reader/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.util.reader; import java.io.CharArrayWriter; import java.io.IOException; import java.io.Reader; import java.io.Writer; public class ReaderUtils { /** * Reads from the given input stream until a signal is found. The signal * itself is not appended to the string that is returned. *

* This method does not read any further as the maximum number of bytes * given and the end of the stream is reached. If the signal's not found * null is returned. * * @param signal * the signal * @param maxRead * the max number of bytes to read * @param reader * the reader * @return the string that holds the bytes read * @throws Exception */ public static String readStringUntil(Reader reader, char[] signal) throws IOException { Writer writer = new CharArrayWriter(); AppendUntilImpl visitor = new AppendUntilImpl(reader, writer, signal); try { visitor.read(); if (!visitor.isMatching() || visitor.getNumOfWrittenCharacters() == 0) { return null; } writer.flush(); return writer.toString(); } finally { writer.close(); } } public static String readStringUntil(Reader reader, String signal) throws IOException { return readStringUntil(reader, signal.toCharArray()); } public static String readStringUntil(Reader reader, String[] alternatives) throws IOException { Writer writer = new CharArrayWriter(); AppendUntilAlternativeImpl visitor = new AppendUntilAlternativeImpl(reader, writer, alternatives); try { visitor.read(); if (!visitor.isMatching() || visitor.getNumOfWrittenCharacters() == 0) { return null; } writer.flush(); return writer.toString(); } finally { writer.close(); } } /** * Skips the characters in the given reader until one of the given * alternatives is found. * * @param maxRead * the max number of characters to read * @param reader * the reader to read from * @param alternatives * the strings to find (alternatively) in the reader * @return the index of the alternative that was found or -1 if * none was found * @throws IOException * Signals that an I/O exception has occurred. */ public static String skipUntil(Reader reader, String[] alternatives) throws IOException { ReadUntilAlternativesImpl visitor = new ReadUntilAlternativesImpl(reader, alternatives); visitor.read(); return visitor.getAlternative(); } } ReaderVisitor.java000066400000000000000000000015071203611042400450350ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.tools.usage/src/org/tigris/subversion/subclipse/tools/usage/util/reader/******************************************************************************* * Copyright (c) 2010 Subclipse project and others. * Copyright (c) 2010 Red Hat, Inc. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers * Red Hat, Inc. - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.tools.usage.util.reader; public interface ReaderVisitor { public boolean continueRead(char character, int numberOfCharactersRead) throws Exception; public int getNumberOfCharactersRead(); } eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/000077500000000000000000000000001203611042400241045ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/.classpath000066400000000000000000000015371203611042400260750ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/.project000066400000000000000000000012331203611042400255520ustar00rootroot00000000000000 org.tigris.subversion.subclipse.ui org.eclipse.jdt.core.javabuilder org.eclipse.pde.ManifestBuilder org.eclipse.pde.SchemaBuilder org.eclipse.pde.PluginNature org.eclipse.jdt.core.javanature eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/.settings/000077500000000000000000000000001203611042400260225ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/.settings/org.eclipse.jdt.core.prefs000066400000000000000000000011511203611042400330020ustar00rootroot00000000000000#Tue Apr 19 15:24:52 EDT 2011 eclipse.preferences.version=1 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve org.eclipse.jdt.core.compiler.compliance=1.5 org.eclipse.jdt.core.compiler.debug.lineNumber=generate org.eclipse.jdt.core.compiler.debug.localVariable=generate org.eclipse.jdt.core.compiler.debug.sourceFile=generate org.eclipse.jdt.core.compiler.problem.assertIdentifier=error org.eclipse.jdt.core.compiler.problem.enumIdentifier=error org.eclipse.jdt.core.compiler.source=1.5 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/.settings/org.eclipse.jdt.ui.prefs000066400000000000000000000132141203611042400324720ustar00rootroot00000000000000#Wed Jul 12 10:43:09 EDT 2006 eclipse.preferences.version=1 org.eclipse.jdt.ui.text.custom_code_templates= org.eclipse.mylar.tasklist.prefs000066400000000000000000000002231203611042400341730ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/.settings#Wed May 23 09:33:22 EDT 2007 eclipse.preferences.version=1 project.repository.kind=issuezilla project.repository.url=http\://subclipse.tigris.org eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/META-INF/000077500000000000000000000000001203611042400252445ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/META-INF/MANIFEST.MF000066400000000000000000000043741203611042400267060ustar00rootroot00000000000000Manifest-Version: 1.0 Bundle-ManifestVersion: 2 Bundle-Name: %pluginName Bundle-SymbolicName: org.tigris.subversion.subclipse.ui; singleton:=true Bundle-Version: 1.8.15 Bundle-Activator: org.tigris.subversion.subclipse.ui.SVNUIPlugin Bundle-Vendor: %providerName Bundle-Localization: plugin Require-Bundle: org.tigris.subversion.subclipse.core;bundle-version="1.8.0", org.eclipse.ui.ide, org.eclipse.ui.views, org.eclipse.jface.text, org.eclipse.ui.workbench.texteditor, org.eclipse.ui.editors, org.eclipse.core.runtime;bundle-version="3.2.0", org.eclipse.core.resources;bundle-version="3.2.0", org.eclipse.ui, org.eclipse.team.core;bundle-version="3.2.0", org.eclipse.team.ui, org.eclipse.compare, org.eclipse.osgi, org.eclipse.ui.console, org.eclipse.help, org.eclipse.ui.forms, org.eclipse.core.filesystem Eclipse-LazyStart: true Export-Package: org.tigris.subversion.subclipse.ui, org.tigris.subversion.subclipse.ui.actions, org.tigris.subversion.subclipse.ui.annotations, org.tigris.subversion.subclipse.ui.authentication, org.tigris.subversion.subclipse.ui.comments, org.tigris.subversion.subclipse.ui.compare, org.tigris.subversion.subclipse.ui.compare.internal, org.tigris.subversion.subclipse.ui.conflicts, org.tigris.subversion.subclipse.ui.console, org.tigris.subversion.subclipse.ui.decorator, org.tigris.subversion.subclipse.ui.dialogs, org.tigris.subversion.subclipse.ui.editor, org.tigris.subversion.subclipse.ui.history, org.tigris.subversion.subclipse.ui.internal, org.tigris.subversion.subclipse.ui.operations, org.tigris.subversion.subclipse.ui.preferences, org.tigris.subversion.subclipse.ui.properties, org.tigris.subversion.subclipse.ui.repository, org.tigris.subversion.subclipse.ui.repository.model, org.tigris.subversion.subclipse.ui.repository.properties, org.tigris.subversion.subclipse.ui.settings, org.tigris.subversion.subclipse.ui.subscriber, org.tigris.subversion.subclipse.ui.svnproperties, org.tigris.subversion.subclipse.ui.sync, org.tigris.subversion.subclipse.ui.util, org.tigris.subversion.subclipse.ui.wizards, org.tigris.subversion.subclipse.ui.wizards.dialogs, org.tigris.subversion.subclipse.ui.wizards.generatediff, org.tigris.subversion.subclipse.ui.wizards.sharing Bundle-RequiredExecutionEnvironment: J2SE-1.5 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/about.html000066400000000000000000000023131203611042400261030ustar00rootroot00000000000000 About

About This Content

13th November, 2006

Subclipse

Subclipse is an Eclipse team provider for the Subversion version control system.

This product includes software developed by CollabNet (http://www.Collab.Net/)

This product includes SVNKit. (http://svnkit.com/)
Copyright (c) 2004-2006 TMate Software. All rights reserved.

SVNKit is licensed under the terms of the TMate License. (http://svnkit.com/licensing/index.html

This offering is based on technology from the Eclipse Project http://www.eclipse.org.

Subclipse includes icons from the TortoiseSVN project. Those icons are licensed under the terms of the GPL.

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/build.properties000066400000000000000000000005761203611042400273310ustar00rootroot00000000000000bin.includes = plugin.xml,\ plugin.properties,\ .,\ icons/,\ epl-v10.html,\ about.html,\ plugin_ja.properties,\ META-INF/,\ plugin_zh.properties,\ plugin_zh_TW.properties,\ help_contexts.xml,\ schema/ source.. = src/ eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/epl-v10.html000066400000000000000000000402301203611042400261550ustar00rootroot00000000000000 Eclipse Public License - Version 1.0

Eclipse Public License - v 1.0

THE ACCOMPANYING PROGRAM IS PROVIDED UNDER THE TERMS OF THIS ECLIPSE PUBLIC LICENSE ("AGREEMENT"). ANY USE, REPRODUCTION OR DISTRIBUTION OF THE PROGRAM CONSTITUTES RECIPIENT'S ACCEPTANCE OF THIS AGREEMENT.

1. DEFINITIONS

"Contribution" means:

a) in the case of the initial Contributor, the initial code and documentation distributed under this Agreement, and
b) in the case of each subsequent Contributor:

i) changes to the Program, and

ii) additions to the Program;

where such changes and/or additions to the Program originate from and are distributed by that particular Contributor. A Contribution 'originates' from a Contributor if it was added to the Program by such Contributor itself or anyone acting on such Contributor's behalf. Contributions do not include additions to the Program which: (i) are separate modules of software distributed in conjunction with the Program under their own license agreement, and (ii) are not derivative works of the Program.

"Contributor" means any person or entity that distributes the Program.

"Licensed Patents " mean patent claims licensable by a Contributor which are necessarily infringed by the use or sale of its Contribution alone or when combined with the Program.

"Program" means the Contributions distributed in accordance with this Agreement.

"Recipient" means anyone who receives the Program under this Agreement, including all Contributors.

2. GRANT OF RIGHTS

a) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free copyright license to reproduce, prepare derivative works of, publicly display, publicly perform, distribute and sublicense the Contribution of such Contributor, if any, and such derivative works, in source code and object code form.

b) Subject to the terms of this Agreement, each Contributor hereby grants Recipient a non-exclusive, worldwide, royalty-free patent license under Licensed Patents to make, use, sell, offer to sell, import and otherwise transfer the Contribution of such Contributor, if any, in source code and object code form. This patent license shall apply to the combination of the Contribution and the Program if, at the time the Contribution is added by the Contributor, such addition of the Contribution causes such combination to be covered by the Licensed Patents. The patent license shall not apply to any other combinations which include the Contribution. No hardware per se is licensed hereunder.

c) Recipient understands that although each Contributor grants the licenses to its Contributions set forth herein, no assurances are provided by any Contributor that the Program does not infringe the patent or other intellectual property rights of any other entity. Each Contributor disclaims any liability to Recipient for claims brought by any other entity based on infringement of intellectual property rights or otherwise. As a condition to exercising the rights and licenses granted hereunder, each Recipient hereby assumes sole responsibility to secure any other intellectual property rights needed, if any. For example, if a third party patent license is required to allow Recipient to distribute the Program, it is Recipient's responsibility to acquire that license before distributing the Program.

d) Each Contributor represents that to its knowledge it has sufficient copyright rights in its Contribution, if any, to grant the copyright license set forth in this Agreement.

3. REQUIREMENTS

A Contributor may choose to distribute the Program in object code form under its own license agreement, provided that:

a) it complies with the terms and conditions of this Agreement; and

b) its license agreement:

i) effectively disclaims on behalf of all Contributors all warranties and conditions, express and implied, including warranties or conditions of title and non-infringement, and implied warranties or conditions of merchantability and fitness for a particular purpose;

ii) effectively excludes on behalf of all Contributors all liability for damages, including direct, indirect, special, incidental and consequential damages, such as lost profits;

iii) states that any provisions which differ from this Agreement are offered by that Contributor alone and not by any other party; and

iv) states that source code for the Program is available from such Contributor, and informs licensees how to obtain it in a reasonable manner on or through a medium customarily used for software exchange.

When the Program is made available in source code form:

a) it must be made available under this Agreement; and

b) a copy of this Agreement must be included with each copy of the Program.

Contributors may not remove or alter any copyright notices contained within the Program.

Each Contributor must identify itself as the originator of its Contribution, if any, in a manner that reasonably allows subsequent Recipients to identify the originator of the Contribution.

4. COMMERCIAL DISTRIBUTION

Commercial distributors of software may accept certain responsibilities with respect to end users, business partners and the like. While this license is intended to facilitate the commercial use of the Program, the Contributor who includes the Program in a commercial product offering should do so in a manner which does not create potential liability for other Contributors. Therefore, if a Contributor includes the Program in a commercial product offering, such Contributor ("Commercial Contributor") hereby agrees to defend and indemnify every other Contributor ("Indemnified Contributor") against any losses, damages and costs (collectively "Losses") arising from claims, lawsuits and other legal actions brought by a third party against the Indemnified Contributor to the extent caused by the acts or omissions of such Commercial Contributor in connection with its distribution of the Program in a commercial product offering. The obligations in this section do not apply to any claims or Losses relating to any actual or alleged intellectual property infringement. In order to qualify, an Indemnified Contributor must: a) promptly notify the Commercial Contributor in writing of such claim, and b) allow the Commercial Contributor to control, and cooperate with the Commercial Contributor in, the defense and any related settlement negotiations. The Indemnified Contributor may participate in any such claim at its own expense.

For example, a Contributor might include the Program in a commercial product offering, Product X. That Contributor is then a Commercial Contributor. If that Commercial Contributor then makes performance claims, or offers warranties related to Product X, those performance claims and warranties are such Commercial Contributor's responsibility alone. Under this section, the Commercial Contributor would have to defend claims against the other Contributors related to those performance claims and warranties, and if a court requires any other Contributor to pay any damages as a result, the Commercial Contributor must pay those damages.

5. NO WARRANTY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, THE PROGRAM IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, EITHER EXPRESS OR IMPLIED INCLUDING, WITHOUT LIMITATION, ANY WARRANTIES OR CONDITIONS OF TITLE, NON-INFRINGEMENT, MERCHANTABILITY OR FITNESS FOR A PARTICULAR PURPOSE. Each Recipient is solely responsible for determining the appropriateness of using and distributing the Program and assumes all risks associated with its exercise of rights under this Agreement , including but not limited to the risks and costs of program errors, compliance with applicable laws, damage to or loss of data, programs or equipment, and unavailability or interruption of operations.

6. DISCLAIMER OF LIABILITY

EXCEPT AS EXPRESSLY SET FORTH IN THIS AGREEMENT, NEITHER RECIPIENT NOR ANY CONTRIBUTORS SHALL HAVE ANY LIABILITY FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING WITHOUT LIMITATION LOST PROFITS), 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 OR DISTRIBUTION OF THE PROGRAM OR THE EXERCISE OF ANY RIGHTS GRANTED HEREUNDER, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

7. GENERAL

If any provision of this Agreement is invalid or unenforceable under applicable law, it shall not affect the validity or enforceability of the remainder of the terms of this Agreement, and without further action by the parties hereto, such provision shall be reformed to the minimum extent necessary to make such provision valid and enforceable.

If Recipient institutes patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Program itself (excluding combinations of the Program with other software or hardware) infringes such Recipient's patent(s), then such Recipient's rights granted under Section 2(b) shall terminate as of the date such litigation is filed.

All Recipient's rights under this Agreement shall terminate if it fails to comply with any of the material terms or conditions of this Agreement and does not cure such failure in a reasonable period of time after becoming aware of such noncompliance. If all Recipient's rights under this Agreement terminate, Recipient agrees to cease use and distribution of the Program as soon as reasonably practicable. However, Recipient's obligations under this Agreement and any licenses granted by Recipient relating to the Program shall continue and survive.

Everyone is permitted to copy and distribute copies of this Agreement, but in order to avoid inconsistency the Agreement is copyrighted and may only be modified in the following manner. The Agreement Steward reserves the right to publish new versions (including revisions) of this Agreement from time to time. No one other than the Agreement Steward has the right to modify this Agreement. The Eclipse Foundation is the initial Agreement Steward. The Eclipse Foundation may assign the responsibility to serve as the Agreement Steward to a suitable separate entity. Each new version of the Agreement will be given a distinguishing version number. The Program (including Contributions) may always be distributed subject to the version of the Agreement under which it was received. In addition, after a new version of the Agreement is published, Contributor may elect to distribute the Program (including its Contributions) under the new version. Except as expressly stated in Sections 2(a) and 2(b) above, Recipient receives no rights or licenses to the intellectual property of any Contributor under this Agreement, whether expressly, by implication, estoppel or otherwise. All rights in the Program not expressly granted under this Agreement are reserved.

This Agreement is governed by the laws of the State of New York and the intellectual property laws of the United States of America. No party to this Agreement will bring a legal action under this Agreement more than one year after the cause of action arose. Each party waives its rights to a jury trial in any resulting litigation.

 

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/help_contexts.xml000066400000000000000000000665001203611042400275140ustar00rootroot00000000000000 This view shows you the revision history of the selected file or folder as they are found in the repository. The SVN console view lists the command line equivalents of the actions you perform using the command line client. You can turn the console off in the Preference page (found in Window -> Preferences -> Team -> SVN -> Console -> Show SVN output in the Console view), and control whether or not the SVN console tab is brought to the front on every SVN event. This view contains the SVN repository locations known in this workspace. Using the context menu, you can add and remove locations, browse repository contents and check out projects to work with them, as well as viewing resource histories (log), creating new folders, moving and renaming resources. This shows the revision and committer of the different sections of the selected text file and works together with the resource history view to show which revisions contributed which lines of text in the file (you can select each section and the history view will be updated). Using this information, you can see which revision is to 'blame' for a specific line of the text file examined (or where praise is due.) The active SVN versioned properties for the selected resource. This view contains the selected projects' pending operations against the known state of the remote repository, i.e. the outgoing changes. You may also use the 'Team Synchronization' to see both incoming and outgoing changes. This option replaces your working copy file with the selected revision. This option replaces the contents of your local file with the contents of the selected revision. Specify the URL of the new SVN repository location. Confirm delete of SVN repository location. This dialog box is used for entering the "commit message" or "log message", the text associated with the revision that you are comitting. This is the text that will also be shown in SVN History view for the changed resource(s). You can enter the URL of the repository location that you wish to switch to directly, or use the "Choose..." button to bring up a repository browser enabling you to choose the location by point-and-click. Usually, you want the HEAD revision of the selected location, but if you specify a specific revision number, ensure that the chosen repository location did indeed exist at that revision. Branching and tagging copies the current repository state (e.g. the 'trunk') to a new location under e.g. 'tags' or 'branches'. Using this dialog, you can merge a set of differences between two different revisions of a repository location, OR merge the difference between two separate repository locations. You may choose which changes you wish to revert to the pristine state (this may differ from the state currently found in the repository). Reverting doesn't connect to the repository, all the pristine data are stored within your working copy. Double-click on a file in the list to view the differences. You may choose the changes you with to commit. Double-click on a file in the list to view the differences. You should also enter a "commit message" or "log message" associated with the revision that you are comitting. This is the text that will also be shown in SVN History view for the changed resource(s). You can inspect the differences between your edited version of the file, and the version in the repository. You can choose between erasing the SVN meta-data information or keeping it. Should you choose to keep the SVN directories, you may reconnect by choosing "Share" in the Team menu and selecting the "SVN" repository type. If you are in doubt, keep the '.svn' directories so you can continue tracking the contents against the repository. You can choose between three ways of choosing which resources to ignore. If you are in doubt, leave the setting as it is, this will only ignore the files you specifically selected. Choose one or more keywords to activate for the selected resource(s). When keywords are used the text contents (enclosed in $-signs), SVN will replace the keyword with its expansion text on every update of the resource. You may chose which file(s) you wish to lock. Remember to either commit or unlock the file(s) after editing is done. The files shown are locked by you, and you may chose which file(s) to release the lock for. Others can then safely lock and edit those resources. Note that if you want to commit any changes to the resource(s), you need not unlock the file explicitly, committing will also do this, unless you choose to retain the lock. This option allows you to import files and folders into the repository, making the resources available for checkout. Be certain that the location you are importing does not contain any files you do not want to add to the repository, such as binary or compiled objects. This dialog allows you to confirm which revisions of the selected file you wish to annotate. This dialog allows you to set versioned SVN properties on resources. Supply a valid username and password and optionally allow it to be cached. Supply a valid username to identify yourself to SVN within the SSH session. This is independent of the SSH credentials you have already supplied. Answer a question being asked by the SVN adapter. Supply your SSH connection information Review the server SSL certificate and accept or decline it. Select a URL from the repository. Optionally, you may select a pre-configured branch or tag and have the URL created automatically. Shows the revision history of the selected resource. Specify where to save the unified diff. Specify where the output of the export operation should be stored. Shows basic SVN information, including current lock information as well as versioned properties. Indicate whether the subclipse:tags property should be updated with the new branch/tag that was created. Allows you to configure the branches and tags related to the selected resource. Allows searching the SVN Resource History View. SVN has detected that this project is already a part of a working copy. Perhaps you already checked the project out using a different SVN client, such as the command line client 'svn'. Once you finish this wizard, you can use the SVN features that are part of the SVN plug-in. In this dialog you should choose the relevant repository location for the project you wish to share, or choose a new one. Specify the URL of the repository location. Specify the name of the folder to create in the repository. Press OK to confirm adding the project to the repository. This wizard allows you to create a patch in unified diff format that contains your local changes. This wizard allows you to create a patch in unified diff format that contains your local changes. Specify the name for the new folder. Specify the new name/location for the selected resource. Enter the log message (also called a commit comment) for the change you are making to the repository. Note that some repositories may have specific rules for commit messages, others have not, and may even accept a blank commit comment. These preferences determine some general preferences for the SVN support in Eclipse, including the method for connecting to your SVN repositories. These preferences determine whether or not the SVN Console output is generated, as well as how. These preferences control the SVN decorator settings. These preferences allows you to configure an external merge program, or use the built-in option. This resource is managed by SVN. This page lists the information currently available about the resource in the current version of your working copy. This option exists for the sole purpose of changing the URL of your repository and updating the connected projects. This option allows you to edit the commit message and/or author of an existing commit. The repository must have the pre-revprop-change hook enabled to allow this operation. eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/000077500000000000000000000000001203611042400252175ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/000077500000000000000000000000001203611042400261615ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/clcl16/000077500000000000000000000000001203611042400272455ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/clcl16/clear_co.gif000066400000000000000000000002421203611042400315010ustar00rootroot00000000000000GIF89a³ßߟ_ŸŸ¿¿Ÿßß¿ÿÿÿ¿¿¿ŸŸŸ€€€ÿÿÿ!ù ,O0ÉI«5"ëa¥ EH Hg ¡Hv_: Ç…º¤aµ*,¢"Çá𕈢‰R¡@( )M †BÁH,¶’Ò#óÐd0˜Fãa]–#Ülr;N/6«ípx.€r)&!;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/clcl16/get_all.gif000066400000000000000000000003361203611042400313450ustar00rootroot00000000000000GIF89aÄâââáááÌÌÌËË˹¹¹¸¸¸®®®­­­¬¬¬{{{zzzyyywwwvvvqqqpppooo___JJJIIIFFFEEEDDDÿÿÿ!ù,[à%Ždižèy ìI„yÂ3Nä\ߊc²Í b!Ô €d$Y(®×†ØD¬¢1©ŽßKXÁ˜Ñ¤hÒ¦ðFèQerïÑä)€‡ˆ‰!;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/clcl16/get_next.gif000066400000000000000000000002231203611042400315460ustar00rootroot00000000000000GIF89a³···¶¶¶¨¨¨§§§¦¦¦ŒŒŒooonnnmmmXXXWWWAAAÿÿÿ!ù ,@°ÉI«½6¡€«2ˆtÒ2 RŒ˜) „‘ˆ×ò·lX ~§ÂÂsº d žï˜Pp”äóò9,XFbJêz¿¤;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/clcl16/newstream_wiz.gif000066400000000000000000000003231203611042400326300ustar00rootroot00000000000000GIF89aÄUrªVÀq¬ÔµÁÈþýïýôÏýóϵ‘#µ’#º—&ü磞y¦¦‚¥‚®Šû݃™tÿÿÿ!ù,P $ŽdY™˜¤cB¬cë¾â"¶W0ð( †ÂC‚sIZ‡CÑ`”œ¤daÂ’"&&`îºÈåÑmœ Ïmg]ÆÎÓ^:ì ‡;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/clcl16/pending.png000066400000000000000000000004241203611042400313770ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDÿ¿_ñ‰» pHYs  šœtIMEÔ@utEXtCommentCreated with The GIMPïd%nxIDATxÚ½’Ñ € à ŒÂ&vÞ&: £°‰~™ hÐØÏ¦¹¾Kë–%m V)`¦!€dL¼,mdÅæ`T~fg×uí&ø^¡·¹V«unà BA?)ô¢?Ô~Y±û¿+¨hÐû¾O\Jóö°Ã÷$‡¾ÅIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/clcl16/properties.png000066400000000000000000000022671203611042400321560ustar00rootroot00000000000000‰PNG  IHDRóÿabKGDùC» pHYs  šœtIMEÔ( ñëÜ6tEXtCommentCreated with The GIMPïd%nIDATxïûŸŸÿààà``€€€`ÿÿþaaaïïïÿýÿÿÿýýýÏÏÏgggÿwwwûûû þüüüßßß···jjjÿÿú HHHööö}}}ÿÿÿÿÿÿ_ÿ&;ø*ZIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/clcl16/refresh.gif000066400000000000000000000005071203611042400313740ustar00rootroot00000000000000GIF89aÕøøèþýïøð°ûð´ùè”øè˜ûéžùÝzðØ€ñÚƒøàˆðà¨ñÓsûޅÖ™ øÐ`øØxøØ€ùÍ_½„±x»º¶|¶}¶}º¨n­r©n¨n­r­s¬r¬s¦kÿÿÿ!ù%,dÀ’pH,‰ÊÑH (—CK pÙl Â`;Hh–•ƒacAì¢IHQˆp#€18ù¨<©JbÊ‘Žv»­>à°ÀG0¿>óy¬^·;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/ctool16/000077500000000000000000000000001203611042400274505ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/ctool16/checkout.gif000066400000000000000000000002551203611042400317460ustar00rootroot00000000000000GIF89a³ÀÀÀ€_ŸŸÿߟÿ¿Ÿ¿_?ß_ÿŸ€Ÿ??ÿÿÿ___!ù,Z £ª: ëŒÔú_‚m™1Y¦B–ÈGS²¦ òZ/o<ï=ܯŻåH¦rÉ\ ’ ¨ô‰,Ev«]P­Ùî¶‘ý~²«–Q¦çx`•Ú~ÏçG;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/ctool16/contents.gif000066400000000000000000000002551203611042400317760ustar00rootroot00000000000000GIF89a³ÿÀÀÀ€€_ŸŸŸ¿¿ßß¿ÿߟÿ¿Ÿ ©;*ÊXFæxgÿ›ŒÿÿÿÀÀÀ€€€___!ù,Zp%D“8ç´˜‘ˆ&ržtˆù%'Š©‹#ÏNÚ}NÁìŒól·o—û`F@0è=žÇ`r¸#üˆƒ6¹0VÔ”q½ß²fÞÊ>ýéOßÌJÞÎWÞÒƒÿÚþß!ÞÎfÞÐvÝÒÁ·Á¸ÝÓ—ÔͧÁµ|Á¶Á´|´ªݲÁ²yˤ'Þ-Á¯uº˜4Á¬q³¤w²‘:«Œ?Áªn«‹@¦‡DÁ¤eÁ¥gÁ§j¡„Gÿÿÿ!ù[,¯€[‚ƒ„……††‚Œ‚CCEEI“›“[C5 5D5§¨C[B4 3A34424G[H// <0.-/1/F[K*, @)+,)*,K[N''(?(('ä(N[P%%$$;$%ô9>P[T #QQ:!DŒ0¡¤É-[²|XxÇÂ…6˜HA¸‹‡‹1öxbeЕ C^©©¤ÉH;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/cview16/console_view.gif000066400000000000000000000011511203611042400326260ustar00rootroot00000000000000GIF89aæôõù$4fÝáî.@u8N†:Pˆ@X‘1>]3A`:HgÚàîH­GªE¥DŸB™=;†7x4o5Db>Mk@’:6s6s4k3j&LCSqÕàõ5X‘GXuPa}Pa|ÕáôÚäõK]xOa}ÙäõçîøÓáôòõùòöûåîøòöù¼åùÑÍzüøžüøŸüø¡üø£üø¤ùïaùîcúízùêtùêwùêyúì|ùê{úì}ùêõÚ?õÛ?ó×?õÝBòØGòØHòØJ§¾£!óÖ<òØLúàaÆ©2Æ«5úÝZñÊBñÊCæ¶¾š"úÉ.ñÊEðÈF˪;屿²ñº&ñº'Æ›"úÆ+Åš"¾ŒÀ‘Ä–Ä— À‹ä£Ââ áŸ¶u ¸{¸|¸{ ¸{!³y!ㆠÁuÁtÀr¼p­_åy±Xÿÿÿ!ùt,Æ€t „…† tŠ Ž Št .—˜˜ “.-**+šœŠ ./La^]fLŠ.((,(G[J3:DXGt«_RM4ÃXqt .$''kbB6HPlpt%.)# hN=28CYot&&"÷!gOï9ÄnèpÈÁ i¦ìˆÁ£–6“q˜0A •0|$y(QÃÔ”R#ˆ9s"F¬BæGÉ+rŒ¨Œ¸„‹0c¢ÌÜ1;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/cview16/history_view.gif000066400000000000000000000010641203611042400326700ustar00rootroot00000000000000GIF89aæëëòôõùïòùQkžZs¥[s¥[s£ay§ÕàöêïùòõûGd™PkžÕàõÙãöäëøîòùarÓàõ×ãöÙäöÞçöãëøÓáõÙäõÝçööøûfv‹gv‹ïôùn{†îôùxx~‚†w‚†xŒŒqëëÀüø£üø¤ùîc‹p–’jùêyŸ˜fõÝBòØGòØH˜‘k§¾£!óÖ<úàa¦šbŸ–fëÞÆ«5úÝZæ¶¾š"úÉ.ñº&ñº'úÆ+¾ŒÀ‘Ä–À‹ä£»¥x¶u ³y!äбㆠÁuÁtÀr¼p­_åy±X³›…èÞ×ÿÿÿ!ùS,‘€S‚ƒS8CA@F8„Œ2?4&+/=2ŒƒB<9'’=N–‚GD-(3:IMŸSEHR%.>LŒ5´µ´7=K³¼½5¸JŒ6 ,ÀŒ*07OPŒ)  $Õ1Œ#å"Q;–!Ç ©© . aCª"LÅP ;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/cview16/props_view.gif000066400000000000000000000006021203611042400323270ustar00rootroot00000000000000GIF89a…_?]³áŸ_? ™ÖV½R¢Ñß¿_Z޼ÿÿŸdšÆ(”̸ÍàY¾ÿŸ?j¦Ñÿߟ1£Üc”¿¶ÖŸEžÐÿ¿_šÒS”Ã[¥ÔÿÿÿjšÂ4–Ë[–Äu¯×9©Ý`•Â…Âæ¿?ÿ¿ÿÿÿ!ù#,ŸG<00!„ÁDŒXÈp„H| À@C†!„hÀq#€‹ CTˆø G Gˆ$i²J+”<™2æÌDÐÐf… €è Æ‘2+h¡é`Í!ЀuÛ FAáäÀÛ®PѸ ‡l¬à`p  p&;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/cview16/svn_persp.gif000066400000000000000000000017111203611042400321530ustar00rootroot00000000000000GIF89a÷hacõöû2c(E~/K‚EPf"8^N[pòõùíøþãöÿùðeüø¡üø¢ûðŠûï‹ûïŒùèpùépößMöàXöàYöàZ¹  óÕ5unKíÅ%ðÏ<§4ùÕDùØMðÈ;ûÉ,ûË-ǧ:¿“â¦ºŠ¼Ž¼‰ò±vB✷²s ²w±v´y´y ¯u¯t ¯v ¹n¸nåyª]ZZZÿÿÿ!ù9,@¦säàpÂD‰,8\¸°EŠ#J„˜"‡Œ@°°E † EàP @€’'M’Ä‘cDˆ9¢¸R ‹8 Ð‘FÍ02 `h¢fX ©Ó§Os\á!fÇ ?g¨À°`‚6>ÖŒ‘Áƒ =:LÁ¶­Û¶9^d@€]ðB$°€ ,Ø€œ\ÌxñŸs;tree_conflicts_view.gif000066400000000000000000000003141203611042400341100ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/cview16GIF89aÄ\zª‘¥Çßåï"CgÛÓ¡»´ŠðبéÄ~öæÈ“|W”]•`“xQi8Ži8l>pCpD’tJi9×ʺÿÿÿ!ù,I`%Žd)¨©P¡®ú¦r×d ã0{‹ ÄHG" ‡“Lq<0”³X¢ù<ÁZuHš„€Œà(B¡« &v{0 ¨B;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/dlcl16/000077500000000000000000000000001203611042400272465ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/dlcl16/clear_co.gif000066400000000000000000000001331203611042400315010ustar00rootroot00000000000000GIF89a‘¿¿¿ŸŸŸÿÿÿ!ù,,”©í L€‡Å™¬Â•#o0Ô7 â¶€ÒV®™*,ú¶ñL‡gê4Pïˆ;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/dlcl16/filter_history.gif000066400000000000000000000001341203611042400330010ustar00rootroot00000000000000GIF89a‘¿¿¿ŸŸŸÿÿÿ!ù,-”©q¬œƒ±F1–XwÃ\ôÖ 6£H§ÅfZÐ>S(7\ö^y"ú‘R‰;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/dlcl16/refresh.gif000066400000000000000000000001501203611042400313670ustar00rootroot00000000000000GIF89a‘¿¿¿ŸŸŸÿÿÿ!ù,9”»¡ÌÔƒç9pbêm™aq ØtÂÖad¥Û%·•1K™´ˆìõÂVÔKTQnž%g™€;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/dlcl16/syncpane_co.gif000066400000000000000000000003531203611042400322370ustar00rootroot00000000000000GIF89aÄÀÁÄÂÃÅÃÄÅ÷ùúöøùðôõýþþûüüÄÅÅůŏ¼¯ÈËÁ¹½¯æçàÈÈÄÈÈÅÇÇÅÆÆÄÆÆÅžÉÈÅÈÇÄÂÁÁþþþÿÿÿ!ù,h &Žd)Zhª®˜U¼p [mAÜx~Óîáÿ@ÏAqTŒÅÊÑÈ“ÎæB%@žT¡9èv#o—·(›%f3¯1iO ¶»ÁSØí ƒqg4eQ5„…†MŽ<+•)!;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/dtool16/000077500000000000000000000000001203611042400274515ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/dtool16/annotate.gif000066400000000000000000000005361203611042400317550ustar00rootroot00000000000000GIF89aÕ©§¨¦¤¥£¡¢ žŸŸžœš›š˜™—•–”’“’‘ŽŽŒ¾¼½¬ª«»º»¹¸¹¶µ¶ßÞÐãâÖçæÛÓѽÒмÔҿı×ÕÃÖÔÂÕÔÊéèßÍÊ´ÏÌ·ÈÆ¶ÛÙÉÊȺßÝÏÚÙÑÉŮűÎÌ¿ÒÐÅÅÀ¨ØÖμ·¤·³¥¸³¤µ±¥´°¥ÂÀ»³¯¦ÂÁÁÿÿÿ!ù1,{À˜pH,H˜†$2cÏ㲡¤.¯Ð°aD›°˜ ›G5i»É„@òh$ø<9’ D &!ƒd ‹%d • ••#d..)*/d¬$¬¬+-O0·¸¸',QW¾KMÁA;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/dtool16/contents.gif000066400000000000000000000002551203611042400317770ustar00rootroot00000000000000GIF89a€ÿÀÀÀŸŸŸ!ù,)‚hË×Ñ”qM[Í=)Q,]ÛæL#u™jg¶Yªë'?sÎ[pW;%D“8ç´˜‘ˆ&ržtˆù%'Š©‹#ÏNÚ}NÁìŒól·o—û`F@0è=žÇ`r¸#üˆƒ6¹0VÔ”q½ß²fF”ZBšâT'zKË5ª9ܯïS;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/elcl16/comments.gif000066400000000000000000000001271203611042400315630ustar00rootroot00000000000000GIF89aùÿþþêêêBBBúúú!ù,(„©Ë­£L"Ø‹ª2Z}TØ\w•€8¦[›Q^05œ³©¸Ž÷N;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/elcl16/commit_all.gif000066400000000000000000000011071203611042400320550ustar00rootroot00000000000000GIF89aæ÷øü»ÁÖºÀÕ¿Ä×»ÁÕºÁÕ¦±Í¦±Ì ­Ê‰”­ˆ”­ ®Ê‰•­¦³Ìˆ•­‹”¥ïóú‚‰”ãëøêðúòõú™¨Þè÷áêøãë÷çîøÞéøåíøõøü’›¦Þé÷ìòøó÷ûõøûøúü—ž¢uz}›ŸŸlpo £œ¢¾m”©Z¥§™üúÙòðѪ©–þýîûò·ûõÅ”Žlº³‹·±Ž³®‘°¬’÷òÒ¶®ˆûìªûí®½´‹§Ÿ|ûä—½„°v¸~´z»º»‚¨m¬q«r¬q«q¦k¨mÿÿÿ!ùK,¤€K‚ƒ„…‚:ˆ‰ˆ†‡"Ž7ŒK:–‘Œ2!! ;K==…3  1£.¥ƒ46µBBCCB..Aƒ5(Â0+ÅÆ+?‚-)Í/ÏÐÏ9@K*Â(8<ÛÜ<>‚',ãGEHFGÛGƒ% &KJÿ®3É•Jÿ¥.ÀRÂ’TÀR½ŒQÀS¼ŒQ·ˆOÿ•"®~I³ƒL¹ˆOªyF¥vDªyGŸpB¥h1b2V% ÿÿÿÿÿÿ!ù1,€À˜pH,?H£±k¶”C€ÈpDÈ8 x`p T$ ‹òÓh Š'EÄÁtn^EÓC#¥Z±ZC+]^‡‡d1*%f‘oB,.q œ 'y¥§§&Eƒ±)EŒ¼*F,ÁÂÂPÅ1A;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/elcl16/expandall.gif000066400000000000000000000002441203611042400317060ustar00rootroot00000000000000GIF89a³‹–«¥±ÃFzùýÿÕóÿñûÿìúÿîûÿóüÿöýÿúÿÿüÿÿÿÿÿ!ù ,QÉI«½6èÍC D(ŠhªÓ9¾¬ä´@Ó1ã¼@ð‡œ«@ô B€ h:ˆä2ò‰¤„Ö§K…Ø'Vä$Ë…zAXŸ«8f;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/elcl16/filter_history.gif000066400000000000000000000002001203611042400327740ustar00rootroot00000000000000GIF89a¢??_ßß¿¿¿¿ŸŸŸ€€€___ÿÿÿ!ù,EhºÜB'j%%ÎVºïÆÆXW„³@šªL€¯BÜx.Ð Aþ•Áóù„0…¬€|DN Å£9-ŠëˆDÕÂX^E;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/elcl16/flatLayout.gif000066400000000000000000000001411203611042400320560ustar00rootroot00000000000000GIF89a¢m‚¬k€©q‡°uŒµ’¤Åz‘¸}•¼ÿÿÿ!ù,&xºÜþ0º@å $ÃË@CiV)V%¦q†ž¤)¦ºu_ÈÐr_&;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/elcl16/horizontal.gif000066400000000000000000000005661203611042400321360ustar00rootroot00000000000000GIF89aÕ†”®ˆ•¬Œ—ª×ãôš¨WÈš»ß”œ¥9y½öüÿòûÿÕóÿîúÿ˜Ÿ¢ñûÿõüÿìúÿíúÿðûÿôüÿëúÿîûÿïûÿóüÿ÷ýÿíûÿòüÿëûÿõýÿ“Ų7˜`¨Î·|¸}ž¢ž¢¥›¨¨—­«”±®‘µ°Ž½µ‰¹²Œ¿¶ˆîž“àk^둆ÿÿÿ!ù-,“À–pH,SȤ29<-žO'tq¢ÏsÜ¡iáyc€1 KXíލsJCÒbŸè}$C#q „,,+#C"df,*+"C!…š+ž!C ¦£¦§C ¬^ C¸jC­¯ÂuC ÎÌÏÐCÕÖ×Ö-A;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/elcl16/refresh.gif000066400000000000000000000002201203611042400313660ustar00rootroot00000000000000GIF89a¢  ¤ÿÿÿ¿¿¿ŸŸŸ€€€___ÿÿÿ!ù,Uxº\ü¯8K˜tÙ0ÊÂ" ÄaAšz!*g@ÄõïrÇ`Ø8ÆÀ$ÐA¢S€a°¼<žËl°A£JÀƒæF¾9ÃØ±Û¼w“;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/elcl16/synced.gif000066400000000000000000000002401203611042400312170ustar00rootroot00000000000000GIF89a³½„ªo¦küì±ûå—üñÃýñÃþýïüê©ýöÕº—&þøÞþøÝýøÝûì±ÿÿÿ!ù,MðÉÀ¼˜›18[wL³Th5†Á/\bx>cAì¢IHQˆp#€18ù¨<©JbÊ‘Žv»­>à°ÀG0¿>óy¬^·;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/elcl16/syncpane_co.gif000077500000000000000000000011341203611042400322410ustar00rootroot00000000000000GIF89a扔­‰”¬ˆ”­ˆ”¬‰•¬ˆ•­ˆ•¬‹–ª˜¨‹—«™¨“›¦“›¥ýþÿ—¢—ž£óûÿéøÿÕóÿçøÿéùÿóüÿúþÿýÿÿœ¡ œ¡Ÿ £œ¡¤œž¾Nž½NŸ½Nž¾OŸ¾Ož½OŸ½O³Êx´Êx³Éx¡£œ´Éxäî´åî´¥§˜¦§™¥¦™ªª–˜’«ª•ª©–®¬“¯¬’¯¬“«©•«©–³¯³¯½µ‰»´‹·±Ž´¯´¯³®³®¿¶ˆ½µŠ»³‹ÿÿÿ!ùB,¹€B‚ƒ„…‚?ˆ‰Š‹B8‘@B9˜™š˜AB:¡¢¦:B77;7>6><6=>«=7B1’3»2B4500-0ÂÄÆ/B,ÐÐ*Ö+B$##$'#&%ÝÝ$B(.ë.()ì.)B!!! ">M;¡!!2œ.ž1  3ƒC..BB=BA6»4‚?+ÁÂ+0(Æ5M@9/ÍÎÍ)Ñ-‚K<ר<8Æ(*ƒE×HFFJI,è'„GÞÊ>ýéOßÌJÞÎWÞÒƒÿÚþß!ÞÎfÞÐvÝÒÁ·Á¸ÝÓ—ÔͧÁµ|Á¶Á´|´ªݲÁ²yˤ'Þ-Á¯uº˜4Á¬q³¤w²‘:«Œ?Áªn«‹@¦‡DÁ¤eÁ¥gÁ§j¡„Gÿÿÿ!ù[,­€[‚ƒ„…†‡ˆˆ„‚ŽCCEEI”œ”[C5 5D5¨©C[B4 3A34424G[H// <0.-/1/F[K*, @)+,)*,K[N''(?(('å(N[P%%$$;$%õ9>P[T #QQ:BˆaBI“)Z¶dùÀð† m0‘’p 3fìñÄÊ + CмRÅ‘É@;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/etool16/contents.gif000066400000000000000000000002551203611042400320000ustar00rootroot00000000000000GIF89a³ÿÀÀÀ??_ßß¿ÿûðÿÿÿÀÀÀ¿¿¿ŸŸŸ€€€___!ù,SP 9½bN X¨q^c÷è¦RTæÈ@Ü¢´$‚ßµ E#$†œb9œù~7P¨úŽ$AzzB¹"cV Î@£Bó¹Œ*¸ßî4jI¯";;D;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/etool16/copy_edit.gif000066400000000000000000000002401203611042400321140ustar00rootroot00000000000000GIF89a³ßß¿ÿÿÿÀÀÀ¿¿¿ŸŸŸ€€€___ÿÿÿ!ù,MÉI«,8;KøqpˆjåÄ`žãïçÅk›ôá—³0Úå­xš ‹–+ŠL.kÂÏUÀ­EßãÔÆTÝô²R»};eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/etool16/cut_edit.gif000066400000000000000000000001721203611042400317410ustar00rootroot00000000000000GIF89a¢??_ÿÿÿ¿¿¿ŸŸŸ€€€___ÿÿÿ!ù,?hºÜÞƒ¼WƄ嶺â€2œ3`)…`ŒP*U°’Á¼  º@0ze+‘åÒÔVÏm-£É–#;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/etool16/delete.gif000066400000000000000000000001561203611042400314050ustar00rootroot00000000000000GIF89a¢¿¿¿ŸŸŸ€€€___ÿÿÿ!ù,3HºÜþ0>0€¢ÖÑPwuC áЍ( O‰®Ð¦~mÀ§ú²M¹‚¯‡AŒ£dÉL;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/etool16/paste_edit.gif000066400000000000000000000002131203611042400322560ustar00rootroot00000000000000GIF89a¢ÿÿÿÀÀÀ¿¿¿ŸŸŸ€€€___ÿÿÿ!ù,PxªdF+Æ“j¸Í͈† ä `Ðt„•VpŒ.¡LÜÎ @Ü´˜ P6ŠÚÎç›)+¼BÑèò˜Ç¤•8ÍžCìL³èô ³ê;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/glyphs/000077500000000000000000000000001203611042400274675ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/glyphs/glyph1.gif000066400000000000000000000002521203611042400313610ustar00rootroot00000000000000GIF89a³ÿÿ??ÿÿŸÿß?ÿ¿?ߟ?_?ß?ÿÿÿ¿¿¿€€€___ÿÿÿ!ù ,WÉI«*kµ.SH(vT Iš ¤˜Ÿ8N¯êJÖÂëË,O@,ŽÇ…¡ 8žOÂa è,Ÿ…l™”\ `0°µ4Hpªà|ª×íÜ»{8‹¼>;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/glyphs/glyph2.gif000066400000000000000000000002371203611042400313650ustar00rootroot00000000000000GIF89a³??_?ÿÿŸßß¿ÿß?ߟ?_?¿¿¿ÿÿÿ!ù ,L0ÉI«EG{zX²UHi–"ç –Ö¦SÃ+ØRíÿÂn$È‚¡gh:åM’3H/™Ts²b…6KÙÉ”ªtA™Ñt¦žD;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/glyphs/glyph3.gif000066400000000000000000000002211203611042400313570ustar00rootroot00000000000000GIF89a³€????_?_ŸŸ¿¿ÿûðÿÿÿÿÿÿ!ù,>ÉI«½8kúæ€$5SØpN¬éºÆ;r¡ï€‚C 4£ù$ÎÊtDfšND'  {é2Ë¥D;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/glyphs/glyph4.gif000066400000000000000000000001621203611042400313640ustar00rootroot00000000000000GIF89a¢€??Ÿ?_Ÿ?¿?Ÿ¿¿ß¿ÿÿÿ!ù,7hºÜþNøÂ¤Mâf7Ó@$Á2¡1’A” š¶oÀòÔ/fÛ>ÞjH乎Hd€tk:ŸF;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/glyphs/glyph5.gif000066400000000000000000000001431203611042400313640ustar00rootroot00000000000000GIF89a¢ÿ??¿__¿¿ÿÿÿÿÿÿ!ù,(XºÜþP‘9£`[Öœ—m––ùPiåˆ@HºÁ°ð¢œÔªÄôÕVeÁ-\¶LÃ5…XkvŸŠ- ÌJ¯? Á³ë±„Cð¨1eš±I(%©XE;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/obj16/module_rep.gif000066400000000000000000000003001203611042400317150ustar00rootroot00000000000000GIF89a³¾¿€€ŸŸ?ÿÿŸ__?ß¿?ÿß_ÿ¿?ÿߟÿÿÿ€€€___ÿÿÿ!ù ,TÉI«½7håJ H` ¨¹m„pœŒ¯,Ó P‚J₃a£Høf®D`ÀDŠ‹(òµ8 Eз¼bCÛdÀ`(˜³‰°€°&¸ Šh”Ý©Û%;Content-Type: image/gif eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/obj16/prjversions_rep.gif000066400000000000000000000005711203611042400330260ustar00rootroot00000000000000GIF89aÕhac¯©Ï/8(•‰šÓ!9|4@a 9frŒG®WÏ&jí7\£Ws®EPfl|5rÝg‘Þlšä¾ÒòÁÖôr£çŒ™«ÄÚõy¯íÇÞøI’Þ‚ºòP‹ÂËãù‰Åö‰ÅõÎèüÏèüÏèûZ¥×ÎûÏûÎùÎùÏùÏù”Õü±ÀÈåöÿíùÿãöÿÄîÿçøÿëùÿñûÿåøÿñüÿòüÿøþÿöþÿüÙµþϵyK:û•uƒb]ÿÿÿ!ù=,–Àž°Ç+ò†H$‡ËítI!`:Ò@ŠÄt è8ª°x¬j„T*u*‘NkSÉ14x> ‘>ÄC…†‡…=/‘^Ž.š.“Ž.™š+™ Ž33,0¨0“ Ž11¾´-“CŽ245˜5ÂBŽ776ÒÐ67Í=ˆÙ×QQA;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/obj16/repository_rep.gif000066400000000000000000000010411203611042400326520ustar00rootroot00000000000000GIF89aæùðaùðeüøœüøžüø¡üø¢ûðˆûðŠûï‹ûïŒûðŒûðöàOùèoùèpùépª˜2ößMöàWöàXöàYöàZöà^öàaóÓ4óÕ5¿ª=íÅ%íÅ(ðÏ<ùÕDùØMDZOðÈ;ðÈ=ûÉ,ûË-ðÈAïÆBÀ¡?̰TÆ¡=Ç¢?⦙5Åž;Æ¡?ò±•2À•4Ä›:✽/•7ß™¸+º†<¸…<¶„=º†=·„<¶ƒ=µ=€1Â1åy¿}2¾|3åy°m&³f'ÿÿÿ!ùG,~€G‚ƒ„…† 0,147 †‚# /-$”–/E:3+AC>!ž—«†=®—BïÅòðƒi!çÖ1a s7!h$¦§¶Í¤ª‘mU"ÿð-ÿÿhñÖ52]PGQþæ••¸cežæÅ)iåÛ°„t6Ÿ”)ëçdJøõÉÿþnß³ñ苌®CðÝ;8lQSO ¥ŽM:i[ºÇ© æËwaVèß{%+…»ºÌ³—=ÿøBoq§éß~–‰-\M.†ˆ¯jST‡´£ÿÿ1ý÷)*cCή 0.2‡XNNÿå™™µŒ{cþþæ¼þïÿÞD1NêÎÿÿ)ÊÊ#ZN ëÑ`ãâ#‚‚²P@’ìêYk6ìÓo'"¥¤½¿Ÿy]!0êé¡þÖIITþæhj§äÂ=†Œv3¥›&êãn¿ºýÏÿÿ м¹@?XdP2P<+ïϾ²ÿ³«¸Ovx® o}b]1/_éÜŒž‰)|×®ÿîêØ €ÿþ!ÿö/5‰ššºþÞÿÿÿ!ù”, þ) H ›‚*$hÅÊ‚…6X¢BE—=3 c` —Š2ÂhŒhÀ€ VTh4rá )qDÑ ˆ– K.iHS…8 šÐÑ"¥ +=ÝÀ :FG+KP ¥(SJuU ++X–ð †,Vº>ÉPÄQØ@,qf…‘À@ü8‹…Ï œŒxH9ãÞ *Ü.¡#§e0 ¥ô²æÄ ‰yÀbèÀÈ‚!aQ‘$ƒ„8–@ÒŒ¥DãŒ7,‚äA…žGb´,ÁâÁ¤I“ ɸÇHR6{8c£ÏVO€GÄC8pHY½ö€DžþC×<ÉË@æ^¾6•#Nž·©"Öbÿ3ipàXÜ€Xü×p0ñBÅýÁžm4QÞ“Ðg_‘$„ýQœix@a“p!‰ "”] ܵá"€aA7 ‰.®F""ù tȞ袋81gÐøã$ŽÌ˜ÂymÁ£3þhßve R¶!)x@pÅwø(å$vA@H!Xž‰Aw0°‚$}ÁÂYþèA CTˆ ä©dQ$ Pw2¢Œ¦pGäàC6ÊmÌA” ˆ",„*ª¨W8ÊÀ¨¨òxGf GI1ŠT 무Öjk ’t „F †+ì°ÄË!»"ÐHâì³ÐF+­$h ;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/ovr16/000077500000000000000000000000001203611042400271365ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/ovr16/added_ov.gif000066400000000000000000000002061203611042400313700ustar00rootroot00000000000000GIF89aƒV|$¶ü~¼”ÚüL†üjœLÂü’Üýþþÿÿÿ!ù ,3$(  @ €°@ (0À@"&4 À!A‰>@0ðA$L;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/ovr16/confauto_ov.gif000066400000000000000000000003021203611042400321420ustar00rootroot00000000000000GIF89a Äž=?Š)?r0B9+i cZƒ48Ì=ÜA—´7ú!Öº!çÁáºÛy ÕbÐPÊHÅC¾9©)›!z ÿÿÿÿÿÿ!ù, ? 'nGŠèVU›a”c%±†òš–YÀÁ(‡ÍE‰<ÅBØ`&L`H J› %³!0“F³)Â#l8;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/ovr16/conflicted_ov.gif000066400000000000000000000002441203611042400324430ustar00rootroot00000000000000GIF89aÄ0H~Ec˜Ge™LjžNl Ec–GfšIhIh›Nm ¤¸Õ£¸Õ£¸ÔÇÕæÇÕåâëôÿÿÿÿÿÿ!ù,!`$Ž@¨iDbBÃ#èá4 ‚ ³S PPR€;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/ovr16/deleted_ov.gif000066400000000000000000000001101203611042400317270ustar00rootroot00000000000000GIF89a€„ÿÿÿ!ù,@P @DÈ0¡B‡ 6D¨ Cƒ;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/ovr16/edited_ov.gif000066400000000000000000000002471203611042400315720ustar00rootroot00000000000000GIF89aÄõïùm@™–lÃ._(V>U~µ½Ì&Ix3Py`~¥{˜º·ÇÛFnœ¯Í§ÀØåíôøûýýþþÿÿÿ!ù,$ $JQ9F ãˆQ³0 Ù@ËðD‹eÒI‘(XÁc;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/ovr16/external_ov.gif000066400000000000000000000002511203611042400321510ustar00rootroot00000000000000GIF89aÄ«¹Ô2],En’¤Á“¤Át‰¨TmSmŽ"Cg6Twäìõãìõäìôäíõëïòëðóëðòóôðóóðóóñú÷îÿùíûöîÿÿÿÿÿÿ!ù,&à%Žbžf¥ª B°e "2#69>7:=ÿÿÿ‘‘‘ÿÿÿ!ù,* !ŠÇaT SQHLMm3=5ˆN/‡o0p<4 ñ€8! …3;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/ovr16/merged_ov.gif000066400000000000000000000002441203611042400315740ustar00rootroot00000000000000GIF89aÄ0H~Ec˜Ge™LjžNl Ec–GfšIhIh›Nm ¤¸Õ£¸Õ£¸ÔÇÕæÇÕåâëôÿÿÿÿÿÿ!ù,!`$Ž@¨iDbBÃ#èá4 ‚ ³S PPR€;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/ovr16/no_remotedir_ov.gif000066400000000000000000000001531203611042400330160ustar00rootroot00000000000000GIF89a³k”Y@_+A`,Mm6¨z¦x¨x¦z¦xÿÿÿÿÿÿ!ù ,PÉ©ÒxT‘ [B|!B&œqrÇyeJ;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/ovr16/prop_conflicted_ov.gif000066400000000000000000000002441203611042400335030ustar00rootroot00000000000000GIF89aÄ0H~Ec˜Ge™LjžNl Ec–GfšIhIh›Nm ¤¸Õ£¸Õ£¸ÔÇÕæÇÕåâëôÿÿÿÿÿÿ!ù,!`$Ž@¨iDbBÃ#èá4 ‚ ³S PPR€;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/ovr16/propchg_ov.gif000066400000000000000000000002731203611042400317750ustar00rootroot00000000000000GIF89a Ä8 .F $#@ 8 /@ @… D‡ E‹ G‰ K O“ U™ U˜ T— X S— R’ ]Ÿ ÿÿÿÿÿÿ!ù, 8 ·$ɉBª Û¹-ÚµQZÑŠVm“eÜ›@f#Ù@@Â&òpl@Fis"®ˆ¢œšNàð);eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/ovr16/protected_ov.gif000066400000000000000000000001761203611042400323260ustar00rootroot00000000000000GIF89aƒÿþžþmnþ45ÿþþþxyþþŸ þwxÿÿÿ!ù ,+H  @„ @‘À‰-&8ð@D @À0 ;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/ovr16/question_ov.gif000066400000000000000000000001171203611042400321770ustar00rootroot00000000000000GIF89a¢›¡ o΃Õÿÿÿÿÿÿ!ù,XºV€” ˜+ l%_ ( 8%;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/ovr16/switched_ov.gif000066400000000000000000000001511203611042400321400ustar00rootroot00000000000000GIF89ap!ù ,ƒçñÿV]µKQŸŒ•ÿv€úJPŽ—ÿ•ÿ0É™‚0XTH1[÷…p%9Z˜¡E;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/ovr16/text_conflicted_ov.gif000066400000000000000000000003021203611042400335020ustar00rootroot00000000000000GIF89a Äíbcëoq½).íV[¼#»#½ (¼ (ìGOëLUçNW» »$çªøÿ€/‚ƒ!;folderadd_pending.gif000066400000000000000000000005651203611042400340220ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/pending16GIF89a…V|$¶üRذp”Úü­r/ðØøðÈøè˜žf'¼…2~¼èЈøà˜ž_¼2øØˆ­l$Ë6L†üøÐxjœLÂüàÀx´2ÿÿÿøè°¥l$Ã…6’Üøà ž_ øØøÐ€ÿÿÿ!ù",’EH° Áƒ”ÀP‚B2HÌ!! ¸0€ƒGI²¤‚4¨\ÉòA bz(@³@8iŠ(Bƒ4@PÁ‚ ˆØB¦*HÐ'(Á5D,èPU„€Ò¦-jaÔ›ÈkÕÂMœ +t€ûP*^;folderdelete_pending.gif000066400000000000000000000005571203611042400345350ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/pending16GIF89a…„¼…2àÀxRøà˜üJL¥l$ذpèЈÿÿÿøÐxüžløðÈ´2žf'øè˜øØˆÃ‹6ž_­r/ü¶”üÃ…6øà ünl­l$ðØøÐ€ü’”¼2øè°øØž_ ü¶´ÿÿÿ!ù",ŒEH° ÁƒŒÀ0‚BHL!¡… pÀ‚G0I²d‚<¨ô€¡†• 6¸@óB.'èl9AÄ„L pÓ%–z€!SE+T ÐS„6@Ø *ÎUE ˜  lÙ¢8CtÀ–mÑoÆ1—`K o;foldermodified_pending.gif000066400000000000000000000005601203611042400350450ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/pending16GIF89a…Ë6RèЈøðÈ­r/øà˜?,žf'øÐx¼…24$øè˜Q9øØˆ* ذpž_ÿÿÿ¼2­l$" ðØúúδ2øà I4¥l$øÐ€Ã…6øè°T80øØàÀxž_ ÿÿÿ!ù#,GH° Áƒ À0€Â$H”@!a ¡ƒGI²¤‚<¨\ÉRA bf(@³¦Í@80P £@ƒ6±Á FjøðáS #"$(ÀÁ‡8Ýz`„€ Š]Ðô‚Ó¨]‹àÁÖ¦V`êôC…„òê;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/subversive/000077500000000000000000000000001203611042400303565ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/subversive/annotate.gif000066400000000000000000000011301203611042400326510ustar00rootroot00000000000000GIF89aæYŒŸÂš¬Ë“¦Æ†š¾úJJJ|||¢³ÏÜç÷¬¼Õ¨¸Óøùüùûþôöÿ›¡¡¡¤œ÷ùû¥£——–’Ú½|äìùÃþ­«•²²²ãããZZYÔ²hòöû'eeeÿÿÿïòÿöËnàÈøúýðõûçëò‚û§¨™æéïñÆhòôÿƒ’°•¤#‡ƒ’±ðôûñôÿ²®’oöøûQQQ454‹–«†”®Ô²i,,,ßéøUUUéëîòõû§¨˜<<<øùû–¤…†ûÕ²iš¨õøû·±Žñóÿ|óõû»´‹dƒ‘±‰‰ûöøÿ·±Ýç÷²¯’‚‘°áêøóöûùúüÊȹòÆhõËn¿¶ˆÿÿÿ!ùY,µ€X‚ƒ‚Y†‡‡XT‹Œ7XˆˆI ?“ BYND2!E›0†–´På>#U<Äà÷@H4 Àሒ)^àØTAB“},‚Ti ¡Â¦Cª0©‚Q ;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/subversive/branch.gif000066400000000000000000000002361203611042400323030ustar00rootroot00000000000000GIF89a³  É̯ÏÖÆïò`‰Œ²ÛÞöþÿëýÿÓûþV‚âýÿÊóög“ÿÿÿ!ù ,KÉI«e¤kWY\µ$`8¥É f°,AâÂ0&x¾¢a¿/€!%aQŒ«×˜\,_Œb:D©U B!P &Ûî,“Íà ZU‰;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/subversive/checkout.gif000066400000000000000000000011011203611042400326430ustar00rootroot00000000000000GIF89aæQüø¡Éú´Rƒ=X‰CöàZâ¦DZOÿþ÷ûïŒìÿã¿}2þüóùèp¼í§ùépÂ1óÓ4öàOûðŠåyùðaüø¢µæ _JíÅ(ûøô¿ª=¾|3ùðeöà^Ãô®ª˜2ûðˆ½/ùÕDûðûðŒe–PýùñÇ¢?Ä›:¶„=ðÈ;À•4öàY•7ùÿö¸+óÕ5À¡?°m&•2üúõÅž;ðÈ=½î¨Â™5ößMöàXöàaûË-»ì¦Æ¡=ß™âœüøžùØMüøœÆ¡?ûÉ,åyíÅ%³f'€1Äõ¯öàWûï‹ÓÿÀðÏ<ò±j›Uÿÿÿ!ùQ,ž€Q‚ƒ„…†‚38+!/‡QEBNO‡5<"•—O2‡)@09GF‡*Ÿ˜¬„Pµ °L,˜ „ .P:»ƒ MMP  KÇ‚Ì6  IQÕ̵A$˜ß7Ö ÂC#;é‚ÖJP&& AÖ ?úý ø¡W DDNø@Ñ"¤‹Q;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/subversive/commit.gif000066400000000000000000000003361203611042400323370ustar00rootroot00000000000000GIF89aÄÒ—Γ笫üÌEÏ• ê²$ëµö܃ÁŠÂÿûïüè³Öëššùç¬ýñÇéæÕëÞÔùÇÇÿô×Þ¥ÿà‹úÃ&ò´´ÿÕaÒÿÿÿ!ù,[ &Ždiž(ÉA’i€S…Y*cõ˜™LĶ $£™ô,IMpz¹06 @*¨z«ÌÇ-: ×ì¶”i0j`rÀq¿SÁ€q)kzƒ 9)‡ˆ#!;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/subversive/copy.gif000066400000000000000000000011221203611042400320130ustar00rootroot00000000000000GIF89aæóõûøùücz§îòúòõûùúüøùû^v£f~¨j‚¬m„­qˆ±s‰²|’¸~“ºŒ Ãðôû—¼„š¿‰žÁ‘¥ÇÞèøÝç÷ßè÷äìùçîùíòúóöûÜç÷ßéøÞè÷áêøêðùöøûæîùðõûòöûõøû÷ùûšš˜˜‘œš™¡žŠª¤„¦¡‡¢žŠž›Ä´sÁ²u½¯w´ª}µª~°§ª£…¦ ‡Çµqijs²tÁ±u¾¯w¾¯x¹¬zº­{°¦«£„àÈÔ²hÔ²iÚ½|Õ²iÿÿÿ!ùG,¯€G‚ƒ„…‚8ˆ‰‰†G8ŠŠ„9&Ž™D8ƒ:%0••EF0‚2$1Ÿ !BEC;G?#=¬$û >G5 ¼3ÉÉÝ4G,"@ØÎÐÒ 5G-¼6ãäóãAG.ù7ïèÑ-ޤè@aŠ|º8¢‚  :X€à‚‡ /Ž Øˆ¢áÃ,p8Qˆ£I“;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/subversive/export.gif000066400000000000000000000010651203611042400323700ustar00rootroot00000000000000GIF89aæJûéžûð´­r½„©nºûÞ…þýïêðúàéúùÍ_üê·êïûñÓsÍØì¦’fóöûÑÛîéðûñÚƒØàï÷ùü÷øüz~ÖÝì§’f™‹nžŽköøü¦kùè”àêú’ˆqîóûáêùoy†ÐÛîkwˆ¶}Ùáî¶|ÎÙìòöüöùüéïûáéúóõûîòû¨njw‰€|±xòöûpy‡†ƒyŒ‡uåíúÙàeéïúùÝzu{ƒáêú»åìú¢h×Þíz~€u|ƒÕÞìáéù™ kw‰ùúüÿÿÿ!ùJ,’€J‚ƒ„…†…‡‡Š„:‚–?„AII&¢(ƒžG ¬¬<3ƒG· „ ³ G0I …7ªG+Å…6. G 4*‡2/'9BE!‡ ,; C†=8$)@D†5"- F|$aI‰H*D²¨á @;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/subversive/import.gif000066400000000000000000000010571203611042400323620ustar00rootroot00000000000000GIF89aæHûéž½„ûð´­rºþýï©nàéúûÞ…÷ùüùÍ_py‡ÍØìñÓs¦’eéïûùè”êðúøûýîóûéïú€|’ˆqùÝzÝãíz~ôöù±xåìúñÚƒ¶|ÐÛîáêù¦k§’fö÷úkwˆ¶}öùûöøûÕÞìÎÙìùûþ™‹nõöùøùýÜáëàêúéðû†ƒy«~)ÛáìáéùáéúÜâìòöüžŽkáêúu{ƒjw‰óöû÷úüÖÝ쌇uåíú¢hêïûôõù™ ùúü¦’fkw‰ÿÿÿ!ùH,Œ€H‚ƒ„…†‡ˆ‰‡F"F„D‚E–E =*AƒD ”E!#& -8ž ¡ .36 +ž¹ CE'“ ÄÄ,?…%Ï7<1†Ø2>(‡0B‡@) :† / 549 †GHì8B°àEˆ;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/subversive/lock.gif000066400000000000000000000005161203611042400317770ustar00rootroot00000000000000GIF89aÕ1謫¬¬¬ù½½ùÀ¿ùÁÀÑIIø¼¼÷·¶ÓÒÓ÷¶¶¼½¼õ±±÷µµöµ´ö´´»»ºø½¼ù¾¾ö³³õ³³ùÁÁúÂÁÂÂÂô¯¯ÏÏÏø»»ø»ºÐÐÐ÷··ú¸¸¸÷¸¸÷º¹õ²±õ°¯ÑÑÑùÂÂúù¹¹ù¿¾ø¿¾¶¶¶ÉÉÉ÷¶µö´³õ±°÷¸·®VUmmmÿÿÿ!ù1,kÀ˜pH,H!l¹LÆ`•E‘‚%a›,à±"a#+Ìä=ÂâG¹X`j—ã @"D Nð*¾J// , }D/'/.+"‰C/‚/!•Bs( -|r„¬¬N¯°BA;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/subversive/merge.gif000066400000000000000000000002251203611042400321430ustar00rootroot00000000000000GIF89a³ ¡nüè³ÚÆéֽͨ{ù第tþøçÿûïûèžüí¿ÿôײÿÿÿ!ù ,B°ÉI«½v4M5Ÿ ÂTáH1‹ ¦äA00Lªô.xž– C€‘ jÅcÑSÄŠ†€TjX XÀRHh·\08;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/subversive/propertiesedit.gif000066400000000000000000000011001203611042400340770ustar00rootroot00000000000000GIF89aæAçîùÜç÷áêøš¬Ë¢³ÏÝç÷ùÙG“¦ÆŒŸÂƒ’°üÝV¬¼Õøùü¨¸Óƒ‘±š¨÷ùû‚‘°‹–«µ‰5†š¾ƒ’±éͨڽ|øùûÕ²i§¨˜îòúÔ²h²¯’Þèøóõû†”®ßéøöøûêðùàÈ·±æîùõøûõÊuäìù‡“®ƒ‘°Ô²iòõû¡¤œðôû·±Ž›¡¡•¤²®’­«•òöû»´‹ÿÕaðõûóöûùúüÅVíòúþÒ5Íœa¿¶ˆÿÿÿ!ùA,€@‚ƒ‚A†‡†@;‹Œ-@ˆ‡7 “ &(#%1A??)A4.:6: :²:?8?A59 ž 0?> ¹==ÉÌ<>Ɔ/$½¿ŸÎņ2'ÞÞØ<ˆ3*ÕÏãˆïï ê<"Ö !(0p ÁXH a!ÃX@šH±¢EC;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/subversive/revert.gif000066400000000000000000000002261203611042400323540ustar00rootroot00000000000000GIF89a³ ùÍ_µ‰5²vùÓyÍœaÁ› µy¬tö܃ûèžÿÿÿ!ù ,CPÉI«½8ëmŒ2ǘH¢"Á%jœ°– j¸’”= ÉaÖê!€“bˆR¨‡éÔfULáXØ( `¯Ø;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/subversive/showhistory.gif000066400000000000000000000005341203611042400334510ustar00rootroot00000000000000GIF89aÕ1ÍvêðùùÙGíóýQkžGd™|Âøäkê²$êݘÁ› Ux¨ay§¯\ëµüÝVöþÿüø¤²vûúøƒ‚xŽŒ{²Æ«5îÃ.úÃ&ùúüáàØÎ“ûèž»¥xöøûëæ”ôôôùî^éͨñññµyëëÀ¦žÒ—Þ¥òõûãëùœ–h©“dÚåùdtÿÿÿ!ù1,yÀ˜pH,c˜ƒr‚9 „!È,œPÈòp8/*ÁHðHMœ'p$E—«5—·ïx„²ßl\!pD-"  w &E-%+w^D‡‰E,¦§(F//N0/µ¶²G0º»ºN¾EA;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/subversive/switch.gif000066400000000000000000000002171203611042400323460ustar00rootroot00000000000000GIF89a³öþÿÿûïû螬tÊóö`‰ŒÆïò_ˆ‹ýñÇÓûþV‚g“¡n²ÿÿÿ!ù,<ÐÉI«½8kÚÚžMàa]ˆ×€¬ì:LË"14- ȃë»Xl–“È$òpQ Šh4ãT|$Ó«v;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/subversive/synch.gif000066400000000000000000000003561203611042400321750ustar00rootroot00000000000000GIF89aÄž\%ü÷œ±°°BÕN±lÇÇÈ£a!«««»üÂråùÙGúÃ&Ò—üÌEÍv­­­¨¨§ùî^···ÃÂÂîÃ.½½½µyøäkJEÿÿÿ!ù,k`&Žd™AÇ“IYUMfvdÂÚf°y5û‹Ð#Y ÅB[¹p" EAa0{P`ð’\0}¯Œ–ÀUŠ"r’ra2Ì@d(S #ù(‘4" xnq#}‰h‹‡„oh|"h”o•$!;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/subversive/tag.gif000066400000000000000000000002211203611042400316130ustar00rootroot00000000000000GIF89a³ùÓyÛ³cþÚ#ÚÃ*ÿûïõÊuÿô×®¢3“k+üí¿þßÏ• îÃ.ÿè—kÿÿÿ!ù,>ðÉI«½8ëjªsËóR’P€#|Í|@ª4ø€ÈUá ‚\ìB¨ ÞÅÇp6EÇfâ›J¢Ö‡Ašín";eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/subversive/unlock.gif000066400000000000000000000005031203611042400323360ustar00rootroot00000000000000GIF89aÕ%Ct-›¼¾ï©½í¨½î¨¬¬¬Êø¶Ìú¹ÐÐÐÉ÷µÈö´Ðü½ÓÒÓÃò¯Ìø¸¿ð«Äó±ÎûºÆô²Ìù¸Çö³¿ïªÈ÷´È÷µÑÑÑÂñ­½î©Æõ²Áñ¬Àñ¬Íú¹¿ï«¼í§Ãô®ÏÏÏmmmRƒ=ÿÿÿ!ù%,`À’pH,Æ‘R‰ŽDPè¨ù,Œ ˆ)rYa´M'Ü$-hÉH …‰M£#¬‰íˆC| wC$ uEm Œxn€–x$ ¡ a¤¥BA;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/subversive/update.gif000066400000000000000000000003461203611042400323320ustar00rootroot00000000000000GIF89aÄëµÏ• üÌEA‘;Öùç¬ûèžüí¿ÁŠråó§ö܃¯ø·^Ûcüè³ê²$ÿô×Ò—“å–úÃ&Þ¥ÿà‹ÿÕaJEÿÿÿ!ù,c &Ždiž(ùD<)e-PeM*[õ—‹(°8×èÂbCo]Š ö0`.’°8|™V¿‰Ä`pasm¯µá„Jár«“h)p?'E~y&‹9)#!;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/000077500000000000000000000000001203611042400300315ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/add.gif000066400000000000000000000015471203611042400312570ustar00rootroot00000000000000GIF89a÷~¼$¶üV|L†ü”Úü’ÜLÂüjœƒê…­åy‚|Ñ9×ZV„ˆäÚZe 8 N僕î9×|êZpÈA‘…3|ÿ\ÿÿÿm¸A‘3|Û ‚×|Z„`àÒEލ\g „~¬+×ÀZpNè.ÿ ÿæÿÿÿÐäÿ<ÿ×ÿZ°éBß3ÔwN.÷Ìl柀|HFåÐØZ/°B‚3|Û‚| \ P¨¸gAà3l„„÷äl4`æÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m‘|Jçö*€‚||„ÜæíÂÿ*ÿ‚ÿ|ÿ¨gŒç¾Ž>Ø‚K|Wÿlöÿç€ÿ|ÿpˆ{æçðN¨÷ g>ç‚|ܾú>N‚|° èOêÿÿ„ æè¾?>‚‚||÷0lG»G!ù,DH° Áƒ*\HÁ€‡ 80@!‚‹ <¬xAЈPâ"ÜxÀ!Ä„ ¨\xñ%Û8sâ ;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/blame.gif000066400000000000000000000017071203611042400316050ustar00rootroot00000000000000GIF89a÷lš„‚„<^üÚ”>DFD”ÚüüÎl<:<üúüœj<*lnlüžl¤¢¤üþ”ÜÞÜ|º”’”T~\^\lþ$<>Ü’„†„|VÄÂÄ,>TRT´æüüþü¼~|z|üþ´ìêì„þL\>@ÃÇes`xÄÃî|pø÷‘|ÿÿîÿÿ|m8>‘:|ÿ ÿ‚ÿ|ÿ»@ÿ‘|`Eލg€€~ø÷Àî|ÿ8Hÿ>ÿ:ÿÿÿXÿÿÅÿÿÿÿÿ/2=‘‘||E Æ÷xlŸ€|pÄ/г‚|Û0Å‚|  P¨tgÇ lî|¬÷Ãl4ˆÅÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m‘|Jçö*€‚||¬ÀÅÕÂÿ*ÿ‚ÿ|ÿ¨g´Æ¾Ž>Ø‚K|Wÿ”öÿÆ€ÿ|ÿ˜°{ÅÆðN¨÷Èg>Æ‚|fܾú>N‚|¨°JÇOèÿÿ¬4#ÅÇľ?>:‚‚||ÔÆ÷î0l|8‘|ÿGÿ»ÿGÿ!ù,¤H° Áƒ$ B#@(0Ĉ„C(¨xÀ¡A t°ÐaÄ…)(ÁEŽ °ò!Nlð B€ `Á  =A8@7ŒPÈÐ 8 ¤0á‚ 4ÀADÖ±'NLX+Và‡²´VX ®‚oE @Q!@… 08(øvŠ;pá ;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/checkout.gif000066400000000000000000000017051203611042400323300ustar00rootroot00000000000000GIF89a÷‚ìÆ$üêlÜšäžlþ$üÚL¼‚,ôÊ<¬š4Äž<üîŒôâ\¼Ž,äzôÒ4´‚<üÖD¼ª<ôâLôÎ<Ä–4üúœ´f$<ºìÆ,ô²ìÆD´†<IJLÄš<¼~44šüêtä¦üòdôÞLÄ‚4Ä¢<üòŒôâdôÖ4ôâTÄš4üú¤´n$üÊ,ôÊD¼†<̲T8žÔåî|p ç‘|ÿà3ÿÒRÿE‘ÿ|m ôæ‘|ðÔ å‚|û+×Z`tæè—|XR…‘|ˆhü€åç~¬ü+ÿ×ÿÀZÿpèÿLÿæçÿÿÿ˜ ÿÕ_ÿÔ‘ÿw|Þ4ç  2‘|"ÁŸ€|Hå/Ù‹‚Ô|wÛˆ‚Ú|w ¨ åPˆ\hæÐl¬ÕÔw„"äÁ4`æÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|mF‘|JçFö*€‚||„ÜæíÂÿ*ÿ‚ÿ|ÿˆhŒç¾Ž>Ø‚K|Wÿlöÿç€ÿ|ÿpˆ{æçðNˆ÷ h>ç‚|”ܾú>–N‚|°RìèýO¸éÿÿ„ æèìý¾?>‚‚||”E"0Áse%C4G-»‘G|!ù,¢(Ѓ…ƒÈ Hp‹-4¨°aC ^H¸ ‘¢‹‹"P1 „€@€ŒÀ!EÄ06¨¼AƒŽ+ȼ gÏŽ; ‘!Ñ9wÀ€Óž/)š°´éÓ7ªšÁ@†18 à˜B*Õ®_C€@¢„”Î]*cmÛ·P%š€‡'°°°€iˆÃ!–‚dêÓçâ€;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/cleanup.gif000066400000000000000000000016241203611042400321520ustar00rootroot00000000000000GIF89a÷Ü’„‚„V|üþ$ÄÂÄœjœüÂLüþü>\ôª¤¢¤\^\üþLÜÞÜ~¼*|ÿQ‘|:8mÄ‘|yÐ#‚:|Ø#:V @ÃÇes`xÄÃî|pø÷‘|ÿÿîÿÿ|m8>‘:|ÿ ÿ‚ÿ|ÿ»@ÿ‘|`Eލg€€~ø÷Àî|ÿ8Hÿ>ÿ:ÿÿÿXÿÿÅÿÿÿÿÿ/2=‘‘||E Æ÷xlŸ€|pÄ/г‚|Û0Å‚|  P¨tgÇ lî|¬÷Ãl4ˆÅÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m‘|Jçö*€‚||¬ÀÅÕÂÿ*ÿ‚ÿ|ÿ¨g´Æ¾Ž>Ø‚K|Wÿ”öÿÆ€ÿ|ÿ˜°{ÅÆðN¨÷Èg>Æ‚|fܾú>N‚|¨°LÇOæÿÿ¬4#ÅÇľ?>:‚‚||ÔÆ÷î0l|8‘|ÿGÿ»ÿGÿ!ù,qH° Áƒ @Xð…HLøÐ€ƒhŒPñbÁh\ ÀâG!Ejô8%” bÆ, Ðå‚—4hðàƒ–! ÜÌÙ³çO „й³ÁQ¤/õ‰1¤¦;Ÿ”@jQ­ Æ ;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/commit.gif000066400000000000000000000015611203611042400320130ustar00rootroot00000000000000GIF89a÷4šlþ$,~<º„þL‘|ðëÈ$‘‘||Ð#:H”ÆÿQ‘|:8mÄ‘|yÐ#‚:|Ø#:V @ÃÇes`xÄÃî|pø÷‘|ÿÿîÿÿ|m8>‘:|ÿ ÿ‚ÿ|ÿ»@ÿ‘|`Eލg€€~ø÷Àî|ÿ8Hÿ>ÿ:ÿÿÿXÿÿÅÿÿÿÿÿ/2=‘‘||E Æ÷xlŸ€|pÄ/г‚|Û0Å‚|  P¨tgÇ lî|¬÷Ãl4ˆÅÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m‘|Jçö*€‚||¬ÀÅÕÂÿ*ÿ‚ÿ|ÿ¨g´Æ¾Ž>Ø‚K|Wÿ”öÿÆ€ÿ|ÿ˜°{ÅÆðN¨÷Èg>Æ‚|fܾú>N‚|¨°KÇOçÿÿ¬4#ÅÇľ?>:‚‚||ÔÆ÷î0l|8‘|ÿGÿ»ÿGÿ!ù,NH° Áƒ"À°!C…`@ÂH¬¸P€Æ (P€@CŽ( $€‡) p)fM“ ª´¹@N‚< ý;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/compare.gif000066400000000000000000000016331203611042400321510ustar00rootroot00000000000000GIF89a÷Ü’|V”’”üÚ”DFD”Úüüúü<*lnlÜÞܼ~ÄÂÄ\^\<:<üÎlœj¤¢¤TRT´æüüþü\>|z|ìêì:8mÄ‘|yÐ#‚:|Ø#:V @ÃÇes`xÄÃî|pø÷‘|ÿÿîÿÿ|m8>‘:|ÿ ÿ‚ÿ|ÿ»@ÿ‘|`Eލg€€~ø÷Àî|ÿ8Hÿ>ÿ:ÿÿÿXÿÿÅÿÿÿÿÿ/2=‘‘||E Æ÷xlŸ€|pÄ/г‚|Û0Å‚|  P¨tgÇ lî|¬÷Ãl4ˆÅÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m‘|Jçö*€‚||¬ÀÅÕÂÿ*ÿ‚ÿ|ÿ¨g´Æ¾Ž>Ø‚K|Wÿ”öÿÆ€ÿ|ÿ˜°{ÅÆðN¨÷Èg>Æ‚|fܾú>N‚|¨°LÇOæÿÿ¬4#ÅÇľ?>:‚‚||ÔÆ÷î0l|8‘|ÿGÿ»ÿGÿ!ù,xH° Áƒ8à B(À@Â…„¨hÀ¡A0hÀà‚…5b xÀÀC 4ÐeÁ %V 0 ˆ ð@€„ :h€ °àiT¨B€z5ëG» ˆö*;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/conflict.gif000066400000000000000000000016501203611042400323230ustar00rootroot00000000000000GIF89a÷Ü’|V”’”DFDüÚ””ÚüüüJLüúü<*lnlüþÜÞܼ~\^\<:<üÎlœjÄÂÄTRT´æüüþü\>|z|ìêìüþl-Èå´æÔwyÌæ‚!| AP‘|V¢ôæ9ääe8žÔåî|p ç‘|ÿà3ÿÒRÿE‘ÿ|m¢ôæ‘9|ðÔ å‚|û+×Z`t怗|jR…‘|ˆhü€åç~¬ü+ÿ×ÿÀZÿpèÿLÿæçÿÿÿ˜ ÿÕ_ÿÔ‘ÿw|4ç! ¢29‘| Ÿ€|Hå/Ù‹‚Ô|wÛˆ‚Ú|w ¨ åPˆ\hæÐl¬ÕÔw„ ä4`æÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|mF‘|JçFö*€‚||„ÜæíÂÿ*ÿ‚ÿ|ÿˆhŒç¾Ž>Ø‚K|Wÿlöÿç€ÿ|ÿpˆ{æçðNˆ÷ h>ç‚|”ܾú>–N‚|°RìèýO¸éÿÿ„ æèìý¾?>‚‚||”E 0se%C4G-»‘G|!ù,…H° Áƒ@aB,$h`ÁB†„$¨hÀ¡A< ÁÀƒl@ ÑÀC•V^0y°‚Ê›<8x Ãʘ$À`ðƒ !<^œüºdünü‚Lœ¾¼ôÞ¼üb4ô¦Œü‚Dô¾¤übüšlôÊ´üöÄüÒ4\ž¼üê”üB ôŽlìÞÌôv4ô²”üŠ<üƤüjìÒ¼æ‚ | AP‘|Vtôæääe8žÔåî|p ç‘|ÿà3ÿÒRÿE‘ÿ|mtôæ‘|ðÔ å‚|û+×Z`t樗|íR…‘|ˆhü€åç~¬ü+ÿ×ÿÀZÿpèÿLÿæçÿÿÿ˜ ÿÕ_ÿÔ‘ÿw|h4ç  t2‘|zOŸ€|Hå/Ù‹‚Ô|wÛˆ‚Ú|w ¨ åPˆ\hæÐl¬ÕÔw„zäO4`æÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|mB‘|JçBö*€‚||„ÜæíÂÿ*ÿ‚ÿ|ÿˆhŒç¾Ž>Ø‚K|Wÿlöÿç€ÿ|ÿpˆ{æçðNˆ÷ h>ç‚|ŒÜ¾ú>ŽN‚|°NÜèýO¼éÿÿ„ æèÜý¾?>‚‚||ŒEz0Ose%C4G-»‘G|!ù,y@€ÀÀƒ 8`0áA 6ÁÃÃf$`‚ ,`8òARÀáB"$ p!B—&0ðС‚€p \0ƒ‚ 8]°°€„ 4àdŠQ Ô„«:ÑÂÖƒ¿‚Í)Và˲h;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/createrepos.gif000066400000000000000000000017041203611042400330360ustar00rootroot00000000000000GIF89a÷ü†$ô¦ŒìÆ$ü‚DüÚLäžüêtüB ôÊ<Ä‚4ün´f$ìÒ¼üŠ<üêl¬š4üÒ,IJLü¾Œôâ\Äž<Ìv$üîŒüÖDôŽlôâLôÎ<´‚<äzüú¤Ä–4ôÒ4ô¾¤üúœìÆ,ô²ìÆDübüb4üºd¼ª<ôv4üòŒ´†<Äš<ôÖ4üƤü>Üšô²”ü‚LôÞLä¦Ôj$ìÞÌüòd̲TôâdÄ¢<¼~4üê”üšlôâTüöÄÄš4üÒ4üÊ,ôÊDüj¼†<ôÊ´ P‚ý||`üäXóˆÌhåî|~ p ‘À| Àä—|ÿ¬oÿ >ÿ‘ÿÜ|ÿÁbÿ>ÿ…‘ÿ| éô葟€|€ã/‚|Û‚|  PˆhÐl¼â‘4˜äÀ0ƒö*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|mI‘|JçIö*€‚||¼äìÂÿ*ÿ‚ÿ|ÿˆhÄ徎>Ø‚K|Wÿ¤öÿå€ÿ|ÿ¨À{äåðNˆ÷Øh>å‚| Ü¾ ú>N‚|”°ãæOµ;ÿ×ÿZؼDåäæî|8¾?>‘‚‚|||ÿÿÿÿ20‘‘|s«e‘|ë¸GA»‘3G|!ù,¡HP`ˆ€FG Jø@ÑŒ‹4 ˜bHP˜X¤‡‰+ Áò „AC 8h ˜€`† 2j&8’>24¸!TÈ HØ`ZÃP(l ÁC!‹D/üØÚ5!‡Š’UhäjÖ­ Ø–8€UÇZ³7sލÑÂyiìíA! ;·ø°ƒ`@;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/delete.gif000066400000000000000000000015501203611042400317630ustar00rootroot00000000000000GIF89a÷ünlüžl„ü¶”üJLü’”üü¶´$‘‘||Ð#:H”ÆÿQ‘|:8mÄ‘|yÐ#‚:|Ø#:V @ÃÇes`xÄÃî|pø÷‘|ÿÿîÿÿ|m8>‘:|ÿ ÿ‚ÿ|ÿ»@ÿ‘|`Eލg€€~ø÷Àî|ÿ8Hÿ>ÿ:ÿÿÿXÿÿÅÿÿÿÿÿ/2=‘‘||E Æ÷xlŸ€|pÄ/г‚|Û0Å‚|  P¨tgÇ lî|¬÷Ãl4ˆÅÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m‘|Jçö*€‚||¬ÀÅÕÂÿ*ÿ‚ÿ|ÿ¨g´Æ¾Ž>Ø‚K|Wÿ”öÿÆ€ÿ|ÿ˜°{ÅÆðN¨÷Èg>Æ‚|fܾú>N‚|¨°KÇOçÿÿ¬4#ÅÇľ?>:‚‚||ÔÆ÷î0l|8‘|ÿGÿ»ÿGÿ!ù,EH° Áƒ p €Â4Èaĉ $¼xà‡€”(ÁÆ’ML)eA†!(ðp ‚˜5sêT;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/diff.gif000066400000000000000000000017331203611042400314340ustar00rootroot00000000000000GIF89a÷Ž4ÊDdú”êLT²t,þt®<<ÎlúTDþ„<Úl¦<ºTúdâLœþ¼Œ¾œ<Æl<ú|dÊ„LþŒLâ|4¦\,Æ\þlÔþÜb<–\4Êdæd¾Dþ\4âl4ºdâ\¼ú¼dÊŒ4ª\ * ÖD|þ¤òTTºt4þt¶DLþ„þd¤þÄTÆ|Dþ|TþŒ<¦\$þl<š\ þ\<ât<¾d$âdlÎŒpø÷‘|ÿÿîÿÿ|m8>‘:|ÿ ÿ‚ÿ|ÿ»@ÿ‘|`Eލg€€~ø÷Àî|ÿ8Hÿ>ÿ:ÿÿÿXÿÿÅÿÿÿÿÿ/2=‘‘||E Æ÷xlŸ€|pÄ/г‚|Û0Å‚|  P¨tgÇ lî|¬÷Ãl4ˆÅÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m‘|Jçö*€‚||¬ÀÅÕÂÿ*ÿ‚ÿ|ÿ¨g´Æ¾Ž>Ø‚K|Wÿ”öÿÆ€ÿ|ÿ˜°{ÅÆðN¨÷Èg>Æ‚|fܾú>N‚|¨°IÇOéÿÿ¬4#ÅÇľ?>:‚‚||ÔÆ÷î0l|8‘|ÿGÿ»ÿGÿ!ù,¸H°`A vx`€…@ Šƒ((€D. |XÁ…ŒTTTòƒ@ 3\(À‘„@>1‚ xñ`Ã< ˆAA#Vœ¸`°„†¨#U‚>]`aàAƒP|às  ,@+àÃq(˜0ô…ºZ00„nt¸P÷Àà‚#j¼@ ð„ Žè@C憠;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/export.gif000066400000000000000000000016231203611042400320430ustar00rootroot00000000000000GIF89a÷4š,~L’Ü$Bt”ÎüF¬lbd2dlþ$,J„ÄîütnLŒ¾ì,J|:läöü<º\¦Ô,F|LZt6d„þLŒvDìúüjñwHãjñwyV‚|`V 3jñwPâjñweVp`ãxîæ|p.%‘£|ÿÿÿÿmA‘‘|| ‚ý||`ü丈Ìhåî|~ p ‘À| Àä—|ÿoÿ >ÿ‘ÿÊ|ÿÁbÿ>ÿ…‘ÿ| éôèÜ5Ÿ€|€ã/‚|Û‚|  PˆhÐl¼Üâ54˜äÀ0ƒö*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|mD‘|JçDö*€‚||¼äìÂÿ*ÿ‚ÿ|ÿˆhÄ徎>Ø‚K|Wÿ¤öÿå€ÿ|ÿ¨À{äåðNˆ÷Øh>å‚| Ü¾ ú>N‚|”°ˆãæOº;ÿ×ÿZؼDåäæî|8¾?>‘‚‚|||ÿÿÿÿ2Ü05‘|s«e‘|ë¸GA»‘3G|!ù,pH° Áƒ"ÀáAˆ E РC 1‰" H`!F‘È”yad„2X¡''ây€'µA$…§P),Í™P@€«DlÈU¡×¯`;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/ignore.gif000066400000000000000000000017161203611042400320100ustar00rootroot00000000000000GIF89a÷lš<^„‚„œDFDüÎl¬òœ2üJL\üÂLÜÄÆÄÜ’¼~ü¶”\^\<|V¼üþl„þLünl,.,üüþ´ôª¼º¼lnl‘|yÐ#‚:|Ø#:V @ÃÇes`xÄÃî|pø÷‘|ÿÿîÿÿ|m8>‘:|ÿ ÿ‚ÿ|ÿ»@ÿ‘|`Eލg€€~ø÷Àî|ÿ8Hÿ>ÿ:ÿÿÿXÿÿÅÿÿÿÿÿ/2=‘‘||E Æ÷xlŸ€|pÄ/г‚|Û0Å‚|  P¨tgÇ lî|¬÷Ãl4ˆÅÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m‘|Jçö*€‚||¬ÀÅÕÂÿ*ÿ‚ÿ|ÿ¨g´Æ¾Ž>Ø‚K|Wÿ”öÿÆ€ÿ|ÿ˜°{ÅÆðN¨÷Èg>Æ‚|fܾú>N‚|¨°KÇOçÿÿ¬4#ÅÇľ?>:‚‚||ÔÆ÷î0l|8‘|ÿGÿ»ÿGÿ!ù,«àÐ!BÁ pȰA‡"F0 ƒ„ ràPƒG -6`˜!Á…“ 20 @ ÃE’ b¦Ì@“fK“jªd°’%Ëš| êRB’*Ýà€£Q— ÿ‘ÿ|ÿÁbÿ>ÿ…‘ÿ| éôèÂÝŸ€|€ã/‚|Û‚|  PˆhÐl¼ÂâÝ4˜äÀ0ƒö*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|mD‘|JçDö*€‚||¼äìÂÿ*ÿ‚ÿ|ÿˆhÄ徎>Ø‚K|Wÿ¤öÿå€ÿ|ÿ¨À{äåðNˆ÷Øh>å‚| Ü¾ ú>N‚|”°ˆãæOº;ÿ×ÿZؼDåäæî|8¾?>‘‚‚|||ÿÿÿÿ2Â0Ý‘|s«e‘|ë¸GA»‘3G|!ù,¢(ÐC… €A`„&dhÀAC„†´° ‘¢@ b $€ ŠŽW d@³&Í *h90@ˆ0˜“ ƒ~ ÅYt¦¤J‡z,1sĈ5—z\É À ¼0qEEªGG„IàDH¸àèZ0ÚšŒ+!A]¡=,8±`E…3C„\|w±À€;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/lock.gif000066400000000000000000000003641203611042400314530ustar00rootroot00000000000000GIF89a„†† Ãà LL¡¡ÓÓ½ŒŒT$$ss%ééÞ••»»™@‰‰ÚÚ¸¸žžn<<!üüúÎÎLL ¬¬ååÙ••a))uu1ööòŠŠÿÿÿ!ù,q?H° Á0ˆÀàÀ  ,X`€C‡4  ‚ ; (@°‚Lð €,üÎlDFD¤¢¤üþ”üžl”’”¼~üúü,>lþ$\^\|º„†„T~ÄÂÄüþ´üþü<>„þLlnlÄ‘|yÐ#‚:|Ø#:V @ÃÇes`xÄÃî|pø÷‘|ÿÿîÿÿ|m8>‘:|ÿ ÿ‚ÿ|ÿ»@ÿ‘|`Eލg€€~ø÷Àî|ÿ8Hÿ>ÿ:ÿÿÿXÿÿÅÿÿÿÿÿ/2=‘‘||E Æ÷xlŸ€|pÄ/г‚|Û0Å‚|  P¨tgÇ lî|¬÷Ãl4ˆÅÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m‘|Jçö*€‚||¬ÀÅÕÂÿ*ÿ‚ÿ|ÿ¨g´Æ¾Ž>Ø‚K|Wÿ”öÿÆ€ÿ|ÿ˜°{ÅÆðN¨÷Èg>Æ‚|fܾú>N‚|¨°HÇOêÿÿ¬4#ÅÇľ?>:‚‚||ÔÆ÷î0l|8‘|ÿGÿ»ÿGÿ!ù,zH° Áƒ*\(°Á P €¡0@TÈÁdx¡ä‚xø€ƒ„ €ƒÀ 0aÊlH!ƒd@TÂN6l ÀThΘ-0 @ÂТG-°`a€†8så` ì‚. ;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/merge.gif000066400000000000000000000015631203611042400316240ustar00rootroot00000000000000GIF89a÷<~¼œ¾¼<^œ\ž¼ßHæ.%£ A‘|àýHã|yÌä‚|VœåPâî|e p ‘|p Àãä—|,oî>‘|å|pÁb>‘…‘||ÿÿÿÿmðè‘|Ä è‚|Ž`¸åwïh×Zˆ˜h 7~.æÀÿDGÿäÿÿÿAÿ…ÿ×ÿZŽ`äÜýÜìAè3›±åŸ€|€'ã„×Z/ÜA‚3|Û`ä‚|  çPˆ¸hAÐ3lÀï¼›â±4˜äÀ0ƒö*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|mC‘|JçCö*€‚||¼äìÂÿ*ÿ‚ÿ|ÿˆhÄ徎>Ø‚K|Wÿ¤öÿå€ÿ|ÿ¨À{äåðNˆ÷Øh>å‚|Äܾèú>N‚|°‡æO»ÿÿ¼Däæ¾?>‚‚||›0±s eñwGj»ñGw!ù,P0@€Àƒ h0¡C >t±áă 81"€\dHPäH‚!/ DiR%Á*rt “ãÂŽ!K€‰%Ï‹ª ô`@;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/patch.gif000066400000000000000000000017311203611042400316210ustar00rootroot00000000000000GIF89a÷l†Ì¬ºä”¢Ä\~䔦äFÄÌÚü\v´,fô´Êü„šäœ²äŒ–´¤®ÄLrä|’̤¾üd†ôìêì”®ü|žüTr̼ÒüdŽü¬¶Ì‘:|ÿ ÿ‚ÿ|ÿ»@ÿ‘|`Eލg€€~ø÷Àî|ÿ8Hÿ>ÿ:ÿÿÿXÿÿÅÿÿÿÿÿ/2=‘‘||E Æ÷xlŸ€|pÄ/г‚|Û0Å‚|  P¨tgÇ lî|¬÷Ãl4ˆÅÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m‘|Jçö*€‚||¬ÀÅÕÂÿ*ÿ‚ÿ|ÿ¨g´Æ¾Ž>Ø‚K|Wÿ”öÿÆ€ÿ|ÿ˜°{ÅÆðN¨÷Èg>Æ‚|fܾú>N‚|¨°JÇOèÿÿ¬4#ÅÇľ?>:‚‚||ÔÆ÷î0l|8‘|ÿGÿ»ÿGÿ!ù,¶H°`A7B@a€‰6`ŒÁƒC‚´hÑ †ˆŠ< Ìh£… Š u` D“TDèòC€0l08aCÆŽ$`¸Ið… "ìà1¢ƒ0f¨ð@ƒ‰'V„¡ Å40àà@€D.(!c-Hè`A "РAC\X¤È@†^1œ`0Á4vÄX#Aㆠ&´à¸¡ç;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/relocate.gif000066400000000000000000000016611203611042400323220ustar00rootroot00000000000000GIF89a÷4šDÚ¬Ž<„þL´Ž,Ô¦<ì²$ôÞLÔ–,üêt´¢lìÆ4¼ž<ÌŠ$ܺLüî„,~üÞ\Ôž4üê|¼¢<Ô’,<ºTòĪTܪ4ôÞTÔš4ôÒD¼šDÔŽ$ܺTÌ~üî||`V 3jñwPâjñweSp`ãxîæ|p.%‘£|ÿÿÿÿmA‘‘|| ‚ý||`üä8ˆÌhåî|~ p ‘À| Àä—|ÿmoÿ >ÿ‘ÿo|ÿÁbÿ>ÿ…‘ÿ| éôèïöŸ€|€ã/‚|Û‚|  PˆhÐl¼ïâö4˜äÀ0ƒö*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|mF‘|JçFö*€‚||¼äìÂÿ*ÿ‚ÿ|ÿˆhÄ徎>Ø‚K|Wÿ¤öÿå€ÿ|ÿ¨À{äåðNˆ÷Øh>å‚| Ü¾ ú>N‚|”°ŠãæO¸;ÿ×ÿZؼDåäæî|8¾?>‘‚‚|||ÿÿÿÿ2ï0ö‘|s«e‘|ë¸GA»‘3G|!ù,ŽH° Aðàˆ„"^ˆ`¢@ $ˆÈ‘€€NP `c„ =^°À "|, ˆ @¡ÃLš7WRlÉ‚O„àŒ°@P„ ³j3hõ@p$IX¶|Ù3X¢Œþ\h€ÂΣbŸ"Ø õ,€ °{0 ;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/rename.gif000066400000000000000000000015711203611042400317730ustar00rootroot00000000000000GIF89a÷ôªœj„†„œ2üÚ”¼~ÔÒÔ„üþlüžlDFD<:<üþ´ün$üþüÆÿQ‘|:8mÄ‘|yÐ#‚:|Ø#:V @ÃÇes`xÄÃî|pø÷‘|ÿÿîÿÿ|m8>‘:|ÿ ÿ‚ÿ|ÿ»@ÿ‘|`Eލg€€~ø÷Àî|ÿ8Hÿ>ÿ:ÿÿÿXÿÿÅÿÿÿÿÿ/2=‘‘||E Æ÷xlŸ€|pÄ/г‚|Û0Å‚|  P¨tgÇ lî|¬÷Ãl4ˆÅÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m‘|Jçö*€‚||¬ÀÅÕÂÿ*ÿ‚ÿ|ÿ¨g´Æ¾Ž>Ø‚K|Wÿ”öÿÆ€ÿ|ÿ˜°{ÅÆðN¨÷Èg>Æ‚|fܾú>N‚|¨°KÇOçÿÿ¬4#ÅÇľ?>:‚‚||ÔÆ÷î0l|8‘|ÿGÿ»ÿGÿ!ù,VH° Áƒ*hÀ… (°àaÂ,x`ñ`  x€áÇ0(édJ, (€2Ì„(ÚŒy°AxTÐPˆH“" ;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/repobrowse.gif000066400000000000000000000016671203611042400327210ustar00rootroot00000000000000GIF89a÷Ü’”’”ìÆ4|Vì²$üÚ”´Ž,üÎlDFD¼ž<”Úüüúü<*¬Ž<üêtlnlôÞL¼~Ô¦<Ô–,¼¢<ÜÞÜÄÂÄÌŠ$\^\Ôš4<:<üê|¤¢¤ôÒDœjܪ4üî„üÞ\TRT´æüüþü\>|z|ôÞTÌ~ܺLìêìÔŽ$Ôž4üî|eWp`ãxîæ|p.%‘£|ÿÿÿÿmA‘‘|| à‚ý||`üäÐ ˆÌhåî|~ p ‘À| Àä—|ÿŠoÿ >ÿ‘ÿ¸|ÿÁbÿ>ÿ…‘ÿ| éôèE!Ÿ€|€ã/‚|Û‚|  PˆhÐl¼Eâ!4˜äÀ0ƒö*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|mH‘|JçHö*€‚||¼äìÂÿ*ÿ‚ÿ|ÿˆhÄ徎>Ø‚K|Wÿ¤öÿå€ÿ|ÿ¨À{äåðNˆ÷Øh>å‚| Ü¾ ú>N‚|”°ŒãæO¶;ÿ×ÿZؼDåäæî|8¾?>‘‚‚|||ÿÿÿÿ2E0!‘|s«e‘|ë¸GA»‘3G|!ù,”H° Áƒ!l°B(J°`Q¢Š„%h¬¸À¡Á ,\ÈpÅ‚…W¨¤È`ÁÁR<€Áƒ‰“]x0³…‰2œÀÅL t p¢à2,Ü¡A}!âC HÀ:B„³T $!AV(8P­M d "¯^;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/resolve.gif000066400000000000000000000015671203611042400322100ustar00rootroot00000000000000GIF89a÷ºüþ~Úüò|ðëÈ$‘‘||Ð#:H”ÆÿQ‘|:8mÄ‘|yÐ#‚:|Ø#:V @ÃÇes`xÄÃî|pø÷‘|ÿÿîÿÿ|m8>‘:|ÿ ÿ‚ÿ|ÿ»@ÿ‘|`Eލg€€~ø÷Àî|ÿ8Hÿ>ÿ:ÿÿÿXÿÿÅÿÿÿÿÿ/2=‘‘||E Æ÷xlŸ€|pÄ/г‚|Û0Å‚|  P¨tgÇ lî|¬÷Ãl4ˆÅÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m‘|Jçö*€‚||¬ÀÅÕÂÿ*ÿ‚ÿ|ÿ¨g´Æ¾Ž>Ø‚K|Wÿ”öÿÆ€ÿ|ÿ˜°{ÅÆðN¨÷Èg>Æ‚|fܾú>N‚|¨°LÇOæÿÿ¬4#ÅÇľ?>:‚‚||ÔÆ÷î0l|8‘|ÿGÿ»ÿGÿ!ù,TH°`Á( ¡Â 4|(¡EŠ3 PQ¢G‡ p\øñ£@ z\‰åÁbh™Ra€ içžo¥8”¢Ñ£;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/revert.gif000066400000000000000000000015631203611042400320340ustar00rootroot00000000000000GIF89a÷jœ~¼lnlªô„‚„L†ü>¼’Ü|z|$¶ü”’”Ð#:H”ÆÿQ‘|:8mÄ‘|yÐ#‚:|Ø#:V @ÃÇes`xÄÃî|pø÷‘|ÿÿîÿÿ|m8>‘:|ÿ ÿ‚ÿ|ÿ»@ÿ‘|`Eލg€€~ø÷Àî|ÿ8Hÿ>ÿ:ÿÿÿXÿÿÅÿÿÿÿÿ/2=‘‘||E Æ÷xlŸ€|pÄ/г‚|Û0Å‚|  P¨tgÇ lî|¬÷Ãl4ˆÅÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m‘|Jçö*€‚||¬ÀÅÕÂÿ*ÿ‚ÿ|ÿ¨g´Æ¾Ž>Ø‚K|Wÿ”öÿÆ€ÿ|ÿ˜°{ÅÆðN¨÷Èg>Æ‚|fܾú>N‚|¨°KÇOçÿÿ¬4#ÅÇľ?>:‚‚||ÔÆ÷î0l|8‘|ÿGÿ»ÿGÿ!ù,PH° Áƒ40ЀT ð¡‡$0ÀâÀ B„HP@È‚\\ ¤ÁŒ05fL P`“5$ɲæ€4s Jth@;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/revisiongraph.gif000066400000000000000000000016761203611042400334120ustar00rootroot00000000000000GIF89a÷Ü’”’”|VüÚ”lnlœ¾¼”ÚüL†ÄDFDüúü<*<^œÜÞÜ\ž¼¼~¤ºÔLŽÄ\^\<:ìêì\’Ä<~¼‚| `V 3jñwPâjñwen  p`ãxîæ|p.%‘£|ÿÿÿÿmA‘‘|| ‚ý||`üäðˆÌhåî|~ p ‘À| Àä—|ÿToÿ>ÿ‘ÿG|ÿÁbÿ>ÿ…‘ÿ| éôè_Ÿ€|€ã/‚|Û‚|  PˆhÐl¼â_4˜äÀ0ƒö*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|mK‘|JçKö*€‚||¼äìÂÿ*ÿ‚ÿ|ÿˆhÄ徎>Ø‚K|Wÿ¤öÿå€ÿ|ÿ¨À{äåðNˆ÷Øh>å‚| Ü¾ ú>N‚|”°ãæO³;ÿ×ÿZؼDåäæî|8¾?>‘‚‚|||ÿÿÿÿ20_‘|s«e‘|ë¸GA»‘3G|!ù,›H°`ÁL(``† >lØ¡!€(˜x€¡Á h !Ä A€ø QÁ‹P€ áB‡“CpˆÀSA‡ $ ÁÀAž¨0ÀA!0p‚„ 0È€@ x µ`WÎrkaëÀ®º¸ö§»Ê%¸^©{ Hð–Á\˜;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/showchanged.gif000066400000000000000000000016611203611042400330160ustar00rootroot00000000000000GIF89a÷´Ž,’ÜìÆ4Ì~ì²$$Bt¼ž<”Îüüêt~¼F¬¬Ž<V|Ô’,L’ÜôÞLÄîü2dtnLÔ¦<,J„¼¢<üî„ÌŠ$,J|Ôš4üê|Œ¾ìüÞ\äöü:llbdªôôÒDܪ4,F|´âìLZtÔ–,\¦ÔôÞT6dŒvDܺLÔŽ$Ôž4üî|ìúü Np`ãxîæ|p.%‘£|ÿÿÿÿmA‘‘|| À‚ý||`üä ˆÌhåî|~ p ‘À| Àä—|ÿGoÿ>ÿ‘ÿ‚|ÿÁbÿ>ÿ…‘ÿ| éôèÍœŸ€|€ã/‚|Û‚|  PˆhÐl¼Íâœ4˜äÀ0ƒö*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|mI‘|JçIö*€‚||¼äìÂÿ*ÿ‚ÿ|ÿˆhÄ徎>Ø‚K|Wÿ¤öÿå€ÿ|ÿ¨À{äåðNˆ÷Øh>å‚| Ü¾ ú>N‚|”°ãæOµ;ÿ×ÿZؼDåäæî|8¾?>‘‚‚|||ÿÿÿÿ2Í0œ‘|s«e‘|ë¸GA»‘3G|!ù,ŽH° A!(8XPA "l00"C‡J¬H‘   ¨@ƒŽ<@ÁA‰ ~ I‚D†˜,r²¸"‚OŸ+ŽHÑ!Á &DðÀÔÄ„.HЈ¥0<Àõ† "ªšKÖ„@ __„݈öëZ‰' @HQ€ÀF , 0 ;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/switch.gif000066400000000000000000000016521203611042400320250ustar00rootroot00000000000000GIF89a÷4š,~L’Ü$Bt”ÎüF¬lbdDÚÄîü2d,J„tnLŒ¾ì,J|„þLäöü:l<º\¦Ô,F|´âìLZtTò6dŒvDìúüwHãjñwyý ‚|…`V 3jñwPâjñweý …p`ãxîæ|p.%‘£|ÿÿÿÿmA‘‘|| °‚ý||`üä÷ˆÌhåî|~ p ‘À| Àä—|ÿmoÿ >ÿ‘ÿQ|ÿÁbÿ>ÿ…‘ÿ| éôèSŸ€|€ã/‚|Û‚|  PˆhÐl¼Sâ4˜äÀ0ƒö*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|mD‘|JçDö*€‚||¼äìÂÿ*ÿ‚ÿ|ÿˆhÄ徎>Ø‚K|Wÿ¤öÿå€ÿ|ÿ¨À{äåðNˆ÷Øh>å‚| Ü¾ ú>N‚|”°ˆãæOº;ÿ×ÿZؼDåäæî|8¾?>‘‚‚|||ÿÿÿÿ2S0‘|s«e‘|ë¸GA»‘3G|!ù,‡H° AT  „"J`¢@&ˆÈñ2Œ°Q€„.H° C‚$ÈòÂ,$€Àn®¤àÀN 4@‰'Q P£ZˆI5¦ƒ/flP Ö¬# P¸šµå˳Êêì鳬Q¤H”•µìÁ€;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/tortoise/unlock.gif000066400000000000000000000005361203611042400320170ustar00rootroot00000000000000GIF89a…‡‡ÀÀ ¢¢ QQÅÅ©’’YääÖ££vnn'""òò»||"““™™g´´õõð××µµÖÖÂqq,99¼¼œ CÌÌ©©\\••a--÷÷Ãxx6žžŸŸq··”þþýßßÏuu1ÿÿÿ!ù',{Ox‚B ȰD‚˜è°áÀ˜(`±ã ‘:|ÿ ÿ‚ÿ|ÿ»@ÿ‘|`Eލg€€~ø÷Àî|ÿ8Hÿ>ÿ:ÿÿÿXÿÿÅÿÿÿÿÿ/2=‘‘||E Æ÷xlŸ€|pÄ/г‚|Û0Å‚|  P¨tgÇ lî|¬÷Ãl4ˆÅÀøƒ÷*‚|||pÿÿ‘ÿ|ÿÿÿŸÿ€ÿ|m‘|Jçö*€‚||¬ÀÅÕÂÿ*ÿ‚ÿ|ÿ¨g´Æ¾Ž>Ø‚K|Wÿ”öÿÆ€ÿ|ÿ˜°{ÅÆðN¨÷Èg>Æ‚|fܾú>N‚|¨°KÇOçÿÿ¬4#ÅÇľ?>:‚‚||ÔÆ÷î0l|8‘|ÿGÿ»ÿGÿ!ù,JH° Áƒ*ÀáÂ@P"€2:4Hq€€,Q‘# ˜D™2"KŽO*¼ f€—êœÉ³§Ï‚;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/wizards/000077500000000000000000000000001203611042400276445ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/wizards/newconnect_wiz.gif000066400000000000000000000006111203611042400333650ustar00rootroot00000000000000GIF89a…ooº¹š›œù䪛˜u¹­wõ÷úv…£æ¿l†š¿™tµ’#ÿþ隷¦‚ÜÝÚýôϪ«¨éøÿ÷Ñw•¡¶À¤Pż™‘lèäÔ›œ‰°¡Ãžyº—&ÿÿÿ®Š±±¯ôùýû݃ÿÿÿ!ù#,¦GHP`‡‚v`p0!Á @a¡¢ÅŠ*@ظñC€ 9Ò€NŽ ‡6¼ôàƒA$b§Ë–/ ŒàAƒ !4x8°ôÀƒ  ajUš@¥Êµ+U­)ˆKvlBhÑ&Ì@€À4=¸Ð6Ã@ò `À`€€¼ dëÀÐ%`!€Ç;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/wizards/newfolder_wiz.gif000066400000000000000000000005351203611042400332140ustar00rootroot00000000000000GIF89aÕþýïüð¸ÿõÌýôÏÿûëùé±ýóϵ‘#µ’#º—&üç£ÿñžy¦¦‚¥‚®Šû݃òߨÿë³™tÿå¤ÿÚ‰ÿß–ìÓœÿñÒÿóÙÿÑuÿÕ}ÿøêåȑܷ€ðáË·}1¿ƒ4¿„4»€3Ç‹7ʼn6‡6±w/´y0¯u/·|2±w0³p&ÿÿÿÿÿÿ!ù/,zÀ—pH, ciY"&ÉaËEuµ„–‚ãù@ƒay•ð¸€ðx( ¡iÁïó;  B'‡ˆˆ'B"‘’“#B$š›œš$B+¢£¤¢!B)ª«¬ª)B,²³´²(C*¹º»¹G¾¿ÀA;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/wizards/newlocation_wiz.gif000066400000000000000000000006161203611042400335510ustar00rootroot00000000000000GIF89a…™tȹVº¹šÀœüÛMü磦‚†š¿ùéuèäÔÂŽ%û݃ª«¨ë¹$ôתƪ5ûð–½–6v…£¨¯ýôÏöÉ8ã&÷âXµ’#•¡¶ûõŒ½’ûâköÚ¦üô¬þýïžyż™õÜaûï–®Š¡Ãùê±±¯ëÁ%´:¼”9°ó×Bç+º—&ûäuþÝ¡ýú½ÿÿÿÿÿÿ!ù3,«gH°àÀØ`  ‚)¼ˆáÁ„ˆ )f¸øðPà(Z¬Ð†&ªhpA(` @“&‰*DhyÑ~ª1‚g3@,10gÑŠ‘Î@PEˆ«X³&ÀŠS€Œ¯`Ã~ÐUF‰fÓ¢5KVÅ ¾Æ»b…Œ'p2øj·ïÝ»+œ C‚„¯‡ #ž0X¬cŒgd˜L¹rå€;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/wizards/svn_synch.gif000066400000000000000000000005411203611042400323450ustar00rootroot00000000000000GIF89aÕhacG®2c!;p!”`ꩤJȪ?0ù¦žÿ)¨”XáoA!C"ƒ‚'žô@ÎAÀ  ¾4èÛJ¿ÿ"ðÀ‰LB˜ü` ÀÈ4M¾ˆLL±Ë€qƃá€;$ðQC0ñ¾+,0Á0ƒÐ…€I_ç$²È$“lòÎûkE-cl0,dí<ôPîtW\‘³ÄüJ]5ÐWgÝÞ­ÁÛM`ÀtÓ%0 ÏRûürÚ,ÿDóXâ `‡=vÔ_\°ÁYûB<¸}ÜrÓ=²É*›­øâX÷ Ä`4Ï( àPØWð"LÙÿ¼7ãžÿÑ…2¸°m ås7- =ŸtãŸÿ±„&~(ã‡üL€zê«kî2Ú°û-|>(£Œ£Aܹ; RGŽ”1ŽD‘FĤ³HÂkÇÍÍò¼løóÓp<ÂÚ@@}Ìï£pÀ¬À=ËÕ |S«Ò… ª/ yàÒP$D` KèÇæ8`¨ËßÔ\½Eü€ü=FX™m –ˆ&¨¶¹«1#vÂ[B&ÿ2a ðü°€;ºklÀw¿‹‡˜€jЉ Ä!Ýtè:×YÍ`?ôœ<2‘€MÀ¡ÂPÁ2†Ám4q=cÖbgŠ)–‚ðRÀÆqhQwÐÄÅ¢  'ðàNpÂT H8¡Ì-h!‡IHÂ)X†8ÞÈ?¾¡õ0‚4¤a#Ôã”þhC(Ah,ôž00¶ˆtØ2Ì¥ƒ†|È#r €0KgDc“a» ×9¿E€Є&¦‰…|D@¥8¢ËÊåÂàðþD2&@:C0…IXÒ‘@]–éCÏ]¢œæLç:… ÿb¢¡›Ý»8aF\€ÁH(‘À‰dbˆ(l!‰x†mžÒX€F7ªr¦£‚Ž(¥HMY€E0£’’(D,*Œ«9¢‡Ô 7ÙÈG"Á”èeä ‹Šaž³ ƒP‡ %¡ YHªR—Z†<´¡°…J½¹El sÈ*ÂyüÁ—‡)€ÙΈ^¦  E< I0 <¨…\åJŒ!2#«Ye3ÂyÜUr€@ä0Õ€Ömãœb>õÉN‰â¬ “¶ÖˆSLÀ9ÛX³V  j@ ë@lÀo@ùÌ—ÁzpBüô,h@Û*ÿPV D¤WG*ž“ú€¡>††R@೑¥-i¿É€à! ¿ˆnt‘×ÂV§Ÿ -mi{˜d@·÷T¬fÑ™`¡¼,E´»ÝåV•_âbÕÙY<¹ÛÝnw…¥[|n–¾õ=+{õ»Òº1@¼çTç>±;Ûüê— ÂZCä;^Æ2# Îp4±ÀŒ Ü-°@LEt8¶ÇÍ®ƒók†We` ) ¢NÁÙ0à8ÆqvŒƒä# ­D €:ÌwÁ½o’»b!»ÆdÔÁÈv–U¶UȲ–«°Ý!Su/Z€„2#ahNs"U.7¹ÿÅNÁf§Ü+™ÉM€— +: 3Ä€)"gÊHGÞƒÆÍ3žœ‚S u¨³€x ˆJ[úÒN¸äY.ÙÏêÔl…å `*8°ëU´‹éÑèG ’¾CfMëZ«ÂHH@h=ýeï¥àÄ pžó›ƒU7@hÁ”ñÑ‚@vØ+æ5Ÿv"á€! w\€6p"rq“‹-,z4€t0´ÇMäj ³NÈÃú0ˆHEæ¡Å ò¸]¬€s·s Ðp6h;mpê]qÚ}e%oùáYö'Щƒ~;öÙè%ÒŒfJäCnÎï'\@ò’›\ ÿöº¡mŽpô¢§Hyмò&" «XÄ ¶ ”Ûm€®H‘¾D@ßë.Ç!–®‚”«»æy6‡¦Nõ©#(·ÍÒàéR7õÀÒ¡]‰w˜]À8Ô›lŽ)¸Ýíöx‡Ðs4@Åköö0…w æy_q9Ð@ø=ìÁs_… ò%^ï‡GÚ…ýøíVÂÆ@Ãá= x~ òz%°€vÐ7ùòh˜‚Ⴆuƒàø€ìgOûÚÛþöåx†îUP‰Ûûþ÷³ßFßéÞú¦aC›È†ò—/…æ;ÿùÏ_ºô‘^”"K0…_õzW¼zße2ßøÇ‚P˜ÿüæ/þ7p‹@°âý¬`‚ü¡€ºXÀâYõÙIeÁaÁêF³âqI“8/ôò6¸SZÓá~ð'L@acøg;¡¸ÕÒb&ÕÒX€H/n €ÛÓkÕ~ð÷~(W@Í¢ùwèbÿ—hx€(‚$Hdà€8õwÍB!˜üGƒ±Ò89¨ƒ<¨€"öƒ@¨‚B8D8#¸XƒLˆƒ ¸ƒ (…&X2T˜‚ñw…-H„0ƒ\¨„xƒ¨ƒ8‚dhX;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/wizban/keywordsub_wizban.gif000066400000000000000000000067631203611042400337260ustar00rootroot00000000000000GIF89aKB÷ÿÿÿùúüÞæøèîú–¥´Ï°‡ÚáìéáÙÝåñéîõˆÃ†°®œF”G€­räãéáèóæ×ÁD‹1=„(9 òõùÜ«ms·b‡¸€Xmx¹}ãÔ¿r‹‡Èv~ÄŠÌÔânƒ¥X¤dź£C‡+ôöúZ£MV—=öøýÕãÓ¶»¹åìùöøûÄÅ»ÊÕÖëïödx™œä«b¬hi³g¡´Ø»Á¶¨é£äêôåµzüüþL”9æ§[>Næìõs¨gF—WòºyAX|äêùßçø¸Çâáèøj­Rµèµéîúx¹_Æê»¥ç¶úûþëðú绊úüþª¶¶éÆ™àæñðôüäéðùúþ…ÕšŒ×¡VžXÙÞê”Æˆò³e³ëœÃÌܬå”nfÔÓß„•˜å²âêùá§a”¨Ìúðâõ÷üîòøóöüøúýØÛæÈÈÇÚÑÀêïú€“³–×™ÇÚÅô׸ÓÚçòõüŸ¨˜ÐÕÖ\•H—»¹ÃÕþþÿìñû­¹Îðóø·Ü§h³x=Š9éïú¶¾Çøùû«Ç©¦¨ªÝßÛÓÜìz¥tÕØ×ú¬]¦³ËÖ×ãN˜B³¾ÐýýÿàçøÛÙÖåãàòêàš×ƒâéø§Þ‰æîî¶ÁÔèÜÎÖ¢b§Póĉ‚Ì”¿ÉÙùûýÚâðhYÞåõÖÝÞÎÊÖ©¶Í\­qùúý}¾Üßá¼ÆØîóûQ„FõÌ•ìñîºÑ·ùùúêêîœÌ’øúüì®aû¯aŽÐƒÐ̾èìòÝâïÑÎÙñòõ²ÁßÈîÁïóüæÐ´áëàÜäðY’FK`ÉÑß÷Ô¤…™“ýûøàßæìçߩїOŽ:íïòQIŒœ”ÍÆÒíñûáȤ¢¯Ã±Ì©J`ƒ‰Áþÿÿ£Ã›þþþ¿ÔÄèêðà§ü÷ñ…˜žëïõüú÷ÉÔéõ¯_ÚÁšœ¾šŠ¨˜ÓïÂöͨ§Ù¡ççìÀÂÅÄ to´\¦¿©³°©ðóüÞéáòßÄÀÉØ_ŽZÏ×äÒáÓ[žA“Ÿ•_„WD}”‘NŸ]ážÈÌÐÆÎÞíñ÷§³Ç«ãÀÍå!ù,KBÿH° Áƒ*\H’3Î0œH±âÄFSäDÀÑ¢ÇñL1e Ç“Aª\ à†‰2AÙ‘¥Í.Ë”‰ÂæLš)o =¨ä%Lglzþ¤9´é@—&^–\’ÔçL¦N…6ŠÊu*U¥WQfµ)’ëËTy–¨­ºTì@2pãÊKWÛBmtó’‰Ä·ï±óDšô¯_RCYý u×Ĉy"ù »G¥=N­Jë¯_3cã’`ÐXŽ.½»÷oàÁw<É1»vÁÛÌQ÷öí::¤9Šÿn{’àòæVs‡þz‡û>4U7ˆ]·öô¬»·wÿd•¬âl…UÞ@˜ØÇ›z¿Wƒ{;$°ƒpø F/ô=‚~ *è^ ô2Ì0b0áÀ`É€É}f¸_ƒj²Š&²TIAXx`~ì-¸!‡—¸èCàè–@˜Ü¸ž†;&ÐB>4™EtCPFª¨#‹J^’E“1®Ü&ng%ƒ*Ù‚->|“E²ˆÁ”ôæA"z0b'#zè1J"‰ŒÂIPh &›PšC^M…bŽW–ÙB üH‘"ƒB)¥@‚ 'têi< zÇ/5ôB©šm®qhP„€#’X>ÿ )? 2‹ €:3 ¤¦GF—ä£üðà ¶âºk«äê˜ÃÎÊpÉ!j 0È ½R³Æ! þÒ)¨ä–‡P  Ç#úh;³"Úª~+:*­f졯2§´»Î1)ñmwñÐy'žzòé' ÜìÁtœã¼'¥Îg@?0²c ­@c(óÛî1xt2ÅÀ Ë"– pÃÏ(ïñ9!XúÐ¥ïðº'ïî ?ž¼¾‡Ü1Â?L£B ¨ðHïG;¶¾(W=‚N¹“Ÿ‹ó£¿-=ß T.Ó¾N÷Þ(ø¦ñ€X „@ß×h¦žÕHA ¶°E pö¹øâ€* _ÛÞ–€Óµ`sÓ¾ü;Ðn2xÀHÆ­àŽ*#,ACKèNñHÀû–G¾@ƒ¤ÈÿÀ½€¯ ÿЗÿl8Tƒp2àÇ Ñ®½ÐL-Ø®ÀÅ+lñ ·°Åà7>ˆA#ÈZ…½ÉŽv8{Ýû!5Ôù⤢ !«bM‹}í«àø.hƲ­~Yc nц´AüCè?K8r 20@2"кë+›ûÈØÃBòyТ¡ð]üƒ‚,X!ü˜@pÐ=vmtð#¾9JܕҔ@Á!78zk˜¢ü hÆ d#8øD§Ìi‘­}£´ 2W¨LTÄ™d‹æ‰Lk‚á¼d èMÈIŽïxGå.gÿ‰;lΠ&9—DÐã›|Ÿ8Û™M$! ¼É<¿ …}ÃS†F…aQ†@ tAÓ8fSšñé}ñ†VØÁš¦0EŠP‚°Ã te8Ù9N3ŠÔœ%§ ¹Òˆ@‹Hê"^Ð È 5Åi ]j;TC¹ËªV‰Ò‘¦ÄH( y@V\@épà ^†¶&¡©¦P ª :˜mGÀ"J ‚dˆ#a}âĪҟ> aEéø@ÊŠ:d"4Xk6ÑMlÂNU0Žð`”ÕøD2$° A]èâÒ5ÆB‘¹ÇPÉZVÇÿÒ€ùè)vKŠ>ô!™Å,ø€Œ ¼”±h€Hp„tð²§+t(¦KÝéD¶c-äæ¡-p 0€>zЃ`€¸qÅBxŒ:°Â˜x ’"á8h…  ë„[ø÷¿þ½î4 é øÃ»àí¬ƒ˜® àA&D ¨ ­Ä1CCD€8ì è (Nq®@ ðT»DÐ-ÀË€ûA8.‚œ +ˆÀÌ`A&0Ä÷­Ðkˆ)Qáô”^ˆr”±âsÕ‡u,ƒE0ÀœœÁ &P„¦‚À ° X¡ÿÈ>|ƒa P¢30Ç“EÁg\xÊh1t'à] dâËö8„1Œa2w ˜À'è `L€T€ó £¡d;ãÙOnF3Dá…ÿ±ÆêÁ‚V»úÕê(Ž`e0@N ôÁ‚ ¼Òà1*}i$a¯fA2PÚ#h¡sD²“½fàB`E]ñŠ4lã à·¸7PÔy€‡¸¿0MDº ñ80$`t ؆¾70?0 à€D@ }üàú†r €€¶YCÊ0‡&NñŠCL” õ"" ‹O`0„-Ú1ïzg@»ÿ˜À.À ø›1°(‘ŒøæÐ6l‚‡Fø¼"­I;˜Åɘ@äP‰:ˆÀ 0À¬Šà‡ªûaÁ €A h¡"4 `¿Â0‰I aŽ‚WÒóŸ7¢÷=B&xyôv¼éuÀ ©›BÁ ƇÖî „ì»ÙÍŽvµõ xh»Ï•à‹dÜ7gW`r†¦'ƒÀBßc ü¤Ð:-h …y|ñb_üÙÓ¾vž·ýJPB'¢!ûf"uhGT8/  È}ß3à[Þöa¥A&ê€ø°+¾ì³wüa!ùFà>÷(ÿ§ç‘Žß™œ—ƒ DÀ‡qÀbôÈFª@…l¬•’(A~QýÄûW{y‘wM{ºW hà F8"0é§~ì· X€YmÕVÙÀ$ vÀý{H{×Ýg€~hЂ& T%H|€°ˆ:(’PP1ÕG‚Œg‚Û‡‚=w*~ è‚›§gpr…Q°~åP”ul×p ¡@>„°w}C¨};è}Hx€JØ‚hptN…R8…"àIP`0Á…a1‚`˜}(Ýg†I˜€jȆ3†¸~nÐVvèJá…ÖÐ÷a؇ˆh(ˆLØ„O…r`ˆQÀ ‚ TP‡w؈"„{€G ’G‰+¸„khm¨‰œÈ ©ð‰›°ˆkÑ…¥ø…ȇ7‰¬˜†—8|…hˆ´˜ ­ u0Šº8zØ‹¨¸}ªèvÁh‰Ã‹o؉© Îà €ÁˆÍøŒ²ˆŒÕÈ‚Ãh™˜ÇØß˜‹yhŠÐH„õS†n‡„ˆŽ¯ˆ‰n¸‰Æ¸îÈŒñÈ‹ãHd?‡•¨„¸Žþ¨ÜèéˆþWbØ6;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/wizban/mergestream_wizban.gif000066400000000000000000000055011203611042400340300ustar00rootroot00000000000000GIF89aKB÷ÿÿÿÞæøèîúúûþûüþëðúßçø÷ùýðôüìñûåìùüýþøúýéîúêïúíñûîòûóöüéïúöøýàçøþþÿàèøáèøåëùíòûæìùáéøâéøãêùòõüäëùäêùâêùïóûŽ£ÉîóûæíúýýÿúüþçíúÁÎåýþÿõøüÔÑÝ™«Î]y®ƒ™Ãêðúõ÷ý¥¶ÖFf£ÄËÙ±¾ØMl¦Ml§ÖÔáÄÑçÞÞè–©ÌâèõòôøòôòùúýñõüBc¡ùûýéíõïóüøúþa|±ÒÐÝËÕèx½âäíô÷üÞáíYv¬ÝÜæ”§ËqйöùýJi¤üüþÉÒäÞäñÞæõÚÝ鑤ÊåéòÅÏäÖÓÞÐÚ霮ÐÕÒß½Éá:\=_ŸPn¨àá롲ÒSq©ªºÖØÖáô÷ý­½ÚÀÍäþÿÿÏØéÚØâÖßîÞâðàçö×Þëåêöb}±æêôØØäÕÙçýýþÆÒèNl¦àãíÕÒÝ÷ùüáèîØÔÞUrªçíù×ÔÞ¹Çàèêòâæðçìöíðøoˆ¸iƒ´êîøñôüµÃÝÛßìèëïÝäãWt«Lk¥àäðÂÎäiƒµ}”Àôöùf€³n‡¸l†¶åç笠×äéô¤µÔ¸ÅÝWt¬¾ÆÚÃÍຽÒÔÑÞc~²ëðûºÈá¿ÌãäèôÚÚå·ÆàÙàï±ÀÜãçó^{¯€–Àðò÷æëö?`ŸîñùÝÛ妷ּÃÙ·»Ñëð÷£´ÔøùýŠŸÅóöý9[œêìòíîó²ÀÚ¶Äß•¨ÆÖÓáàçó¥¶Õ§·ÕÙÚçÚÙä´ÁÚÚÛæOm§÷øýìðûìñú ªÇIh£©¹±¹ÅÓGg£¾ÉÞÑÚÀmƒ±Cd¢öøûÛÝèÜÙâáèóÿÿõãçñïòøwõ÷üèíùåìøèíúæéôáçßäëøåë÷ØàÓÔÝíÃÏæÞà늟›‡™¿ÏÐÞg~°íïõ“§ÌNl¥Ÿ±ÒÄÏãæìø¿ÇÜæíù¿ÌäÜßìo„³Ó׿àåòâåï‹ È¢ÈØÙå!ù,KBÿH° Áƒ*\H°Â€0œH±âÄ;?ûlä®5ž½ÿpä£,Ò-¯buì$´ÇþüX´SÒ“j4ªÔ‡K©é\{ˆ B|ÛÉšw5EÚ]pAŽÐ€‡ JÃÅ€ÁE¡ˆ·mv õ`9PCÆ"H@CFÿIÇE{@ ¢|Æ)XŸr,˜ƒ)XX¢I:#X"Ïèi\Øx ŽÜ-Yƒ=†1 -HÄ(† )Œ F+(ªŒ/5édˆ9Ò—\‰+á׉]ÁË \Ž`.„¹ÃÒ°¡ˆ™7&¨&‰€ÐM¤‚\ŒÙŠ.tviCx¶‚{Jƒ O Š\tp”KT€qH=T]+=ìÿ©Z˜çj¤ÐÂ(3¸Ñd " @ª©¦²´$T2'FÀ €¬uÚ E¶ºé´Ð %¿vÚY`°ÁP`,²É®´ƒf°­´<1«µf‹E*œ‚I¸> A¨!ppnºë²{êJYÌð"MÐ;€½Õ^˶6ñ‚+­@0)å~`hÁ«{,»6Å"®ô€Cßk1»à $Êhúk(( "w@2º&+¼0Q0Ç\±€+Dà*]t!‡0 P‚>=²ÁD'Œ2Ò' 6Å’^{@N{"ÀÀ‘ÕXÿôПŒ,Òˆ=¶Ì Àÿ”6¤üôöÕYÏÍuÝFUAÞz+]öh3™ K ·ÖB^´ÂCvãdÛ9Ld@å‚ wá[—ìõÝ6MáyãŽÛ)É."ȆúV«ËÝz×v·»ÒÌú½¦@ÀÝî–g]Ðkþºð _üçz‡nËé^¹êö˜#û0ÏÃðàzð¥®dBñ×Ó®=÷Ëû=r°‰:Øüƒƒ^0öà%$‹ƒŸñ²w/úùʼn(Ä8¸¡ â Â`Yp„#xá„â8÷‘*{àBþP§GxbÌ?Æà„6à` Ì¡:èÁ࣠pØÜ×ÿ,²ëPo*,à ‘bPâMˆCˆ=X‘[È¢(4ˆƒdà€‡¢ø#€8½öyd²S ñØ%.÷È-^Є&ØAÇ8Ú€ '`ã [dAÔ¡lƒ‡‚£Øw4ŠÜjôبD`àÁ /HEVAG1Ôc cP?ø¡²À ¨`x l|±ƒ80†"H,’'<%3‰M@A ‡X8i„€¢°PÂ1¼ÀElDb?cåôˆƒ:\a–$ É-qY¼è²¼ô¥2°‹I¤a˜z(t€ƒ=œò ê`… ǃ*àã ødĪ`ÿZ.¤ˆÛL#سKMÒâÊØ”  ¤ `ϰ…·p =œB—ùÞ°Ï*ð“‘ŽÜ&.“D¤œ¸DB›Db€a¸pè( áŒ-8æá|× Àá§A,c#bK‘ÊŽ¤+ì:С •"A²0Ä-!<¡è -ÀDZÀ z¨n§˜£›a§ ˜@¤ RQƒMh£˜¸†0ˆAd!JC-‚Єä@ Yµ.ñÕŒþn„CDÈLpÖmª•ß°Á~ñ C|áy^Ç ƒž![°E<KuA«’DïÂ*=*DŒu,øP‰iÿ„Á›è Oè`møl·ˆ3c¯è‡)¾@ Hè:5læÖçOƒ˜5¶ ÂfÛ;€ ø  ?øa¸Å…”:Ðá±Pâ’ ,œÂ`5u³i]ØÆvÚeÀ5^Ñ Ì@ Ê ¯yýÐ'Œ!ƒÂ-dÑŒ€4(ƒ<}bá®X…JTÿNAl¦­/°Á¸#ÙXo&z1a €ñé^¸ÑŽj4!4`7ä ·¶º©€ `{bow¶x…/êÚ‹wtCŠP›™p\¿$‚:À6˜ðazä÷°c¥^’—¬‚)`/ÿÀcM[¾†% ÍZfiŽAXÀ‚Ð]­~ Èß5ÛrpæÐtbç´ÕHÏ]þ ó ˺é:±©€’­÷æ'sh1ˆA£ñüèïÙ{©4šIÜMïÓãP[D}ç<›:Ò§ûžª-X²fº·|µÞœYÚÖ\u}f^§ÙŒ¿~¤açE»Ö¥NvýRÝì»k¨€´§=lOËùÚŽÞò©—Ím#ïwˆJn,¹ësSåØÙ^w®Û]iop þݦ°é}±\XûÞØV7® 0é]û›„ñ–÷ÀlîƒÓ:ÝVö¾y×í#sNÓvü> ¶ ã·Ö8ÙíîKß äØ7Å nï‹“Zá*oxÇ߬€;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/wizban/newconnect_wizban.gif000066400000000000000000000051101203611042400336540ustar00rootroot00000000000000GIF89aKB‡"9jª XáÕ‚Ä´qñ뺦­RuwÇÑÔ«¹·éÚÃçìì‚w)ÃÁ·öùýª­¿×àîöòØÕÑÝ„Š¥ÂÅÒ£µµ½ÉР¥ºk‰ŒáÞæØÁy«»ÚLZÏÙÙîñ÷,ÒÍØ¾¨]mu”óòöÄËÕ˜ª®ÅÒæêèíÔ̼ÕÙ√”ääì“\üðÎÆÈ¼¬´²ÜÍ–½ÁÑUlÏÉÕ¥›Túç´Åʦ”¥Á»Á¹ôáÆþùëÞà졯°µ­‡|‚žûöñÛÙäéçí¯±ÁAQ{™¢—ØÑ¨úè·g†‹ÉÓÖæâÊãêùËŹýóØ“–­¥²Ë|“‘ëôÄÝYd‰u{™ÂÎäÊÓæéîúŠ˜µàçø¡–QþþÿÞæø¢­Æ³¶È4FsÇ» ž ´gp’µ»µåêó……;ÂÆ»ÕÕ⊪ÌÅѽËãqŽàßêÚÆ„µ¼ÐQ^…ÎÙêìñû±¯yòõûÃÊÜžªÄëíôÓÜìáçóž”hüñÒË˽å̧ºÇà`lÊÍØ¨žV×䘧ĩ«š¹´êçÕºÆÎÜÔ¾•œ²þùóÝãñ¦©¼ø÷úÛÝꬴÊûê¾ÍÕÚüöᤴÖq¢ËÖè!ù,KBþ³H° Áƒ*\h0Λ* #Jœ8Ña•$U RÜÈQbœ8C&yÓ±¤I‚ ,Vy3£Æ“0%¦ü²æE’1s&l0óaM–,3ꊒçÇ7}ÚI”(ÏžHmuÙ4gœ”YFMj3#Óª'fEJViÆ©BÁv¼'«V²+ãvýªvâÓ§oËš]Ù2m݈wS6x“—ë^¯8ÿ. UoÔŸ}_*>ø4«Q‡… w½ÉǓϠC‹Mº4h=ŽõJÜYO̶ãtè@§¶1* éɼUîÒÄ q¸>[„ìÚtnßVq5RÞ«ƒJF˜àÏë¬Æg#_Þœp긇9þ/¬ó£ñã¶o'aþ‡7\ÈÒ’/yõ¼öô*‰A¤äwÇàmFWB x!P*ÑG‹t…? °HA*8bau,8‚ɉQ!„PÁ_{©½7WI0Tˆ 8À…‹ĘÅ"XàÅÁ…°AÇŽ_BÈr„0ÁüyñŸj\¡˜„PB©¢tXÈ•ù$² åˆ µò*AI ­qŒÐmú‰!A¸\ð!0#lƒ$aâ)º(^‘ıì.äîŒ=ìÛmª9ÀGRT)°·!"AQbÉ`ÒF†P‘0F03 *²É&ÔB ‰0‚ \†quE!ÌÈ~*D²2’D±ÁG¥lÆp9#ePaÃåtÑÃ;ô}Q矂®§è)ô 9ì’·¡Âv°_."›A@nHB…Ö ð)?ìç[3F ¶c~9ul'F$ÝóÈ"uÔ߆õ[hO ÝG‚Æ)ð›ÌŒ—'ó9áe`„¬°…>¸7Tà‚‘«úÕO[ب@…LÁ „ÄHàñaMk[œ0ÙÐ&=úyí,X7PAT˜B¦04øp„þN€™ 1…¬Ð<÷é~òS)úY°T°!sÈâa{€BJx5‘/… ¡@>rå¸vˆxb$¡=Ix°Šh˜³¨Å4tOW à¨B\ € ¤ )È òˆL¤ŒàGÜàæ *`¢ º…ИĤ#8°ÉNròGÁÆP8¬ ¨D%ˆVÉÊUŽ`’°œd%9ÒÔ;pX€.w©KDò—‘lS›1¿b.B‹H¦2—Y©YÒ2 <m0€Xóš XÀ1e.³›Þ\f˜ ÆÜ2"¨ ð‚%¸s x Á´Îe–Pøþ,Ã=õ©Oeñx D?øa 30è :v.!] 2°,Xô¢Ũ øÉÑ~"âŸUÈ@Ò’šô¤ì|Ds QŠžô¥%}A>P†ÌôžÄÌ£k†à§@ ªPSºR<4‚¢BM*P ñ¦ÒTŸYÃcù‚XõªXͪCßÉ‚£. «`½*úÐÔ~ªà„;å`ÒItSŸNý@ØÙˆºÖu¢ 8ƒ^÷Ê×¾ž¡©ÇàT’N ®ð먹†Æ:6›Šìë9!Š(,àÙ3¬€—¼¼CgùJÓ¨v¤T:é°íþ&l¹IÛzæó¶û$T›b&¾/^v!ŠÈBpa£âšç¸G‘ Y:ð:ìE€K«G ™•êÂÆ-±Iî’àò´±²Ò]Œ-©[KØ`%»±ñNf|ã µ{ÜÉxË Í»`7»„9J‰B"ï¢Ë·ÎDÈ-kI_¼À½˜QoYØ;¼;Jµœ”9uÛBߣ7¿vâ¯Kü;>Ë%ã%¯u-caü&˜IKqoñ+àùÖ·¾çE0†K¤”þ6ø¿©A<Þëš·Äé=ñ‚Ÿ«âÿvÇ1^îdè,¾q‡ÃaêV—'#fK /ü";ØX,®2),¶˜ØÉªr,{¡›ëx · 1…_¬e3Ÿ¹Ë)þ2|y âsöÆ6±vŸÌ—5÷6Çy ;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/wizban/newfolder_wizban.gif000066400000000000000000000054511203611042400335060ustar00rootroot00000000000000GIF89aKB‡"9j¸ ]÷ÑwÕÒÆÌ©SuHu{™õè¼ÖÅšŸ}"æÀk¬“G”¥Áîß¾ãéö÷উDËÖè«»Úà¶UüøäéÒžŒdêÁcÞâí©…'ɰ{ª­¿ñïò†b6LZµšmư€ñéÑ›|>ìÉ{ïщ۸dŠªÍÇÓ¿—E¥²Ëøéµ¶Ž1Ø×äôÖ›”s;¼©yÛ³UùðÅùã¼÷ä©óðäUlØ×× ¥º§ˆI½ËãïÉrçãêöõ÷Ö°Tøë¼Úͩ܇±™Zîã½íñûäºV÷ùýn:¦‡:÷Ù‹öÞš»¤b„Y „Š¥Ô̳¤…,°•Fîìðרå½ÁÑ–p«…FÕ¾„¯±ÁŠ˜µÛÚæøæ­`lãÎìåÓé¿\õݨAQ{ôÑ„ÎÑÜ|‚žõéÎËĬžªÄù⤪Š2ëØ§êÅrÞæø±‡/È·ˆj9Yd‰òÍ|òÓŒÊÍØ¿›G˜w=¼¬–ýóàæÞƦ©¼«ŽKöÌiàçøùöðʲjóæ¹â¼füûó£…H4Fsj'}R ýóÜÇ®kgp’àԳĸ“ÜÞß³M‡_!Ç£Mž ´ÆÊ×ÕÕáµ¼ÐÑ·wáÆŽ³¶ÈâßæÒ¬S§}'«“S‰f7Q^…“–­Â¬|ùÞšÂÅÒ™u•œ²ÔÑÝÑÌØmu”÷Ôq¢÷ìÁãêù÷â£ýúìíÅkÝãò¬ƒ-µœržA¤´Ö—vDÛµ]úðÈúçÁòãµ£PáæôòõüÔ°ZøîÂëâÇæ¼Y’oA£…A÷Ü“¦…1³—MéîúÓÜ쬴ÊÛÝëøç±äÌ–ôÞ´ÌÅ·ª9óÏòÕ“¿œHýö袭ÆðËvþþÿ!ù,KBþŸ H° Áƒ*\hÐÖ` #Jœ8Ñ!0SÀ RÜÈQ¢-[CšÒ±¤ÉEŠX6d$F'cJTYdÈÃŒ.[’”É3aÊ6C Ù³(Á”*>¼‰S§)£F‘ ÒiK˜POÚ¢©t)Ë—C±få(õYW›7—æÄ8¶äÏŸhƒ2é´íF¤RãÆe–¨Ý™xUê•ví߈SÞ›v­ØÃ >‹vd_¡J®¹˜qF«l3G–<„òàÂu†øåÉɯװcÃÆãËŽOɦõZž;”!—þyö§xñ\ÈLù,1ÐÜ{‡^ø‹ A㨲kߎjŒ“áG›þ~Þ™pc§ æò%»û÷U” D*þ§Ãûå©^NOð×?(à€¸€rõÕ×TåíV˜)O4lhà *±”âà Ơ†2Å# UDI!…(¡Ä2¿ “…0Æcøå'„jä˜ãA (qH1BÄ‚‹}ô1‹1^xXA!ŽHb‰‘ð!%ŠTVY¥'¥å׎:v©› ‚˘d–2f)hŽéƒšl’éæ›e–bAºA¡*¦x©ãAx„é߀èkJ¨ ˆú€fs.f§jä©çŽâg¢˜fªéŸ³Ì²Ú‰g¤“~i/ âC²ºªþ*ÀÚ꬯Öêê­²ª ƒt꯵”jjA¯¼@H2d¬²É*ël³2˜±*³Ô.km*Ì€F[BxQ¨¤J:éA»°r¬³èf±Åºì¶ëî»ðJRÅ ÔkiàhJ°¥ô +±Ì ðÀóñ„Š'¬°ŠA0ÄÃA\"1-W\1Nd¤âêI.+¸œ2ƒÈ$Ÿ² Õ¡2!,ã"ÃË/cL 4×l³2pŒ2‚dèËï¸ý‹Ëȧ]4<ƒŠ ¸xá´2£ä‘M¤Sþø$Rq…/|!Ÿ_0Á-÷U‹‚ÖBM(B¡G¬äAº°ÒIQ|z€“Âì§ÜàOR¤Ó_D4Sá@˜4Lp‚ ÊR–2” ÌCÖ8 SZøD'â`~¡ÄDHÒ2¤³&)L €@ˆ!ȪT§Õ…¾t åʃ.– TtA˜béPC𠝦⩪IÍúU7)8kZß R xÍk^«ªŠùdAÈÃ*1¶"õ¤&ÕB0Øš ÐU fÕE*2ñV ê° +)ÁÙÎ>‚ÀÂ0¬*Ä3*‚ƒèªd%{Gã WhþF.Ð….\`µg¥mm¿ª‹ H ÍÈ.`p‹0ฮxD(”ÛÙ``¡µ`d—È¥K,»Í®v·ËÝÝêâ²ÃíA*A€Ñ]"è].gEÛ×èêrºA£Â PÐ]Ô÷¾öí.~ëûÝþÂb0€A%L^F,#t8Á ÒË‚ÑFW_áÈ.1ˆ ô÷Â&Bˆ  s8ÃD €,ÞJ˜ŒÈ˜‚ÕûÜ#ίÄáÀ+ °„UØøÆ«XƒŽw¼†øØÇ(ø±ƒ,ä¬gX…/<‘àå6ØÅ4#v€:tàÊÀ„–1ц.·Á`v˜Å<‡9¸@hF3þ/ÔÌ‹6óp†óy?;Ú_½Xˆ<àÀ”w@‰>ûùÏ€îs^)BZ¯ˆNt‹íe/¤͉´-Ìb–¤|ä9tŠÎE6m§oQð½{òI¤! éIoE*—N5yNãœpšÑA¼jxP2jRÇÒ«îÌZ®ÂèõÕH“–­ùä¡ÖÁ®¯ÀÝë©7ç”6Q^…”¨ÅÎÙêûøÇúܯpr‚æèˆÆÊ×õ´T÷ÐõÈtòòõöãIÎÑܯ±Á ¥ºôÏLÕÙâø¿}ÉÊÕž ´ðñ¨¬ƒ^ÙÂ<úÒ£ôð[ô¢>ØAõ»^õ­JààçìÄ`“«É÷ÜBÄœu³Á×Ul¦©¼ÚÛáAQ{µ¼Ð³¶Èmu”îñ÷ºÉÞâãyÚáµþùóGi–ÂÅÒ|‚žþòå ŸªäÁœôª5ó™.u{™ÂÎäøÝ–ûöñËÖ訶Ðùñ»ÚÉHò®_áçòœ®ÓµÆàª­¿4Fs”¥ÁØÙ[ä§cÇÔèá¼—«»Ú¥~õԮį gp’¤´Öóî]êíõô£3ÒELZ¾ˆSüåÊŠ…Œ`lŠªYd‰ÝÞjéÇ]óÅF•œ²Þ‘<øÕ8ëí˜øÖŠáÄMýìØõÁió¸sºÇàó³;žªÄûß½ö±aóçZ˜§Äõö¹óÜTøË–ùûÊÃÊÜòôùÊÓæ¬´ÊÓÜìÊÍØúרôôbô¦Dó©Tæç얩дÄÝ¢­ÆØßí½ËãÝãðþÿÿâĦô¯:ôœ3q¢!ù,KBþa H° Áƒ‚‚ªaC+ýHôó b›‹¯2fõj”ÇQ CŠÉ–‡­L¤hñb;~I²fÍ… Nž´*¢Ä,]Â|åÂÌ6“†<ÃðäÞ*'V|àò¥Æ FgÒTÊ• N†#FJ£FŽh=¶@ÚµíB NÃúÚÒì« DµŽbÛ¶kοP£þœ*ô,Ö£kIF4¤“cL{8îtiЖ_ÃB]I¸pL™j÷ò-¸åET³þˆ©D¡5 œv(š-F̬Y“†|1ˆ0DÁd«Õ»¶ƒ_zÌ£ˆ“ƒç7n0‰þ¼©>™8e"¡¨ÒŸY¨.þ Ä—çoÎe­ž­Öøq‚/fUâdýºéLòOwP;§Ø³Ub[—o>±T—zxyZqh¼'гì u}Ü']#æwƒ¦\—€ŠP à,˜—SæETPvmÄ„4ÈÿõQß}LpØá~ޏíˆÉŠ(m&Õ‚W±÷ÑZJË Ë]h~>6²_ˆØm'[‰Þ͆Š(%¨`zCÝÅ“PFiã)ÌB'!jØc‡Ôq9"wØVD˜4Ä¢Xg¦§^ZZµ‰F6BÀ#ÜV‰"¯é7݇ýÅÖçcœrÄ ¥°ñÐJ…V¥LĹ!£ â¨þs bG QÄ,c¨V[m•Œ1ÆmÀž‚  ²ñ“©1¦)ã(Yí%Z”uÐh°"‚E ޱ‰'.˜ð 4Ô É1§Üæ)±¡&›Q1¡oLͲ%HÛ꫱^›í¶ž¨Q€ f|+®¹èªË»¼+ÓšëõÑšˆB¨j¾ÓV믶ž "‚¤ 1Bˆ4‚"ÁHFªà‘* ƒ¢¢5;-Ž‘‡ŸXôp‚Nzò“žŒ…(GIÊX„Á”aH¥*Ã`VÒ`;ífyÉš©-zCú2°(‰%©°Ãǹ:Z2xÔ%/}9ªÁ”E˜2 ã1whKÃá2»tKy€c( sU²4" Cdbòšˆ‚@@‘ R¸3 ~€E*¢Àu$8þÈ'(FáNÐåøÀBñ oÓŽÇ4g5G¨³ì2p BDá@QXD:€C<×Iè` ~ Â~°ˆXä%(Á Úpò/‡®ˆ€LÉè‡úAPÈ©Guð†ü@?Ø@ü°ˆ”âÀ pH©!J0Š‹LÁ Â( ÐR|SŒ1•©BÓfÍô9ô@ÕA*BOè ¥pȉp`ˆ¶Eˆkt*xÁ ¢˜jKÉgÌ„Îôœ¹s 0ƒ”êà ]«C /@A"‹¸«Èà…O¼d +F¡‡&¼Ô’YÕêVo×C€Á T«X ’ Éâ !™%þÃ(R2T!U¸í+,±‡=è }#%ȹŠUD ¸ÈE.MOÛÚ»f6¤ Hl«PÈ ·UxEE2Ð[*⻢ÐÁwå€=àáèM¯z׋‚Uà‘ꌂ°›ÛÃ6…¨nú]CTä8Ä!>°ïa+XÁ"Ba^>8øÁ~0zÛ»\{Z7ßýî2 bU°(ðŠ6Ð"ÁS@Ã!ˆ °X ¡XÜ@ã»!Â..A"qËôž!Å!Vp(8d+Ä"Xˆ(øU„¦0 -HA R–‚! c{Âíýë@N!†nË…ØÊþ@¢ˆêöÄÊ8Ä•i“=H!y%@ âÀç8d€ËxP…–àUÔ˜7¾C{‹»UX\bk(mÇž0 Qb] …!®,VDd wŽÃ-!£'ðYI“Ÿ/”A„P…¬g]èD‡9«Â, ‘In=^¸s¨ï¼‚6H%Ô|&(Z4À8¡B³@‹WãÁ˜µ¡mm\Ñä§HÒÇ…Q˜ºÏ|Nó’h1íB%++h6+ö¦‰iÓ°Æ6¶·ÍEwÛÛ9CP3ƒ˜¡c\Å6 -h¤XUBA…;ˆÂ²3¹+Xá ¾]Q ç%þÀ@}g;ÑŒ­˜¢Äb¨C·¹$ϰg-ÈßX¨=-޼äû¾ñ¢U®Õ‘ìD"xmJjn–ÅŽo;ï^)± ’a&zÑG‚’`é ² ¢¼&6|y†o,î"JNc¬ÿ[ëÆ (: …%ØÝîrÀû@Î÷¾Ëa|ü"HºˆÂ¾ð„ðÊßw›4¤|ä¹Ð.XþòOàÂ6Ïù — ( DƒÒÀþ&'Ü~ÐÑ« :Õ‹;Ú¯âçƒ(ÀûÞ÷~ãÀo€qµ¸ú­;~.aoC*`R”•Åì Rw}ñUÎ3uæTwqÓ¬IúYâOåŽw¦¡šä‘fyPšbTý÷Áo 0ûc÷ ÷êýõóÒ LÊHƒœ¿¹æõµœ¡õ}Ë ~`sñÂ&ªâv„Uë§U;resolve_treeconflict_wizban.png000066400000000000000000000110531203611042400356740ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/wizban‰PNG  IHDRKBA+"òIDATxœí›K$ËUÇ'"2ë]ÝÓ=¯;~^ÄYÂHÀ†5ß‹OÀÉ 6,Gl¼„o€dK˜+2 cîÃ3ýî®®GfDœÃ"²ª«{ºïLÏÌ{LHÕYñÏóüÇ)áÿÛ­íùsó¿\½ìkÕîü$9Èÿõ¤~Ú~ô“ª}ÿlPFëÕžÆçè&1k ÞqOø_œßÿyû‹¿07ýƒÏ{ƒPMœy¿0ðN‡±aœ ù«ïÿ­‘¬¿þñáDÑ¡&çOöÓLQ¹¸ùó[,YÏŸ68Þ©&Éðà AFH5ñU”|2·´¬çÏ­>üjzZU•³«óÒgbmú·óƒëùsóqx>mÂQHÅ¢;$ViWð·zº7iXów/FÉŒ×viÝ*iƒz¿ãÌ¿Óz?°~ô«úg³©ÔMׯUÒ³°çEDßñ9÷ò†Msi°~¤»µˆ`f·^»­™lMdû6éþµW'é(ϰ;f¿ÓÖs|&3CDø«Ÿý| ÞPD0*TÎ@…kGèø†¯À´›4²uŸu×E¸"ÝÒoyÆúž«ÿ¥{¥ë h‚–gÞ³Ý ,Ñ̓ ĺŬÛ3.3ººï\ë+W·¯H×WΧë{mì›clupxÄ1Ã;î Ø½Àj“ñ·?þ{fËHpÞ ‡óº xïðÞãÅ!ÎáDp^ÀqPV~…®ÃP¤¬C؈Ä5Ð;ÝÅxE»ÅŠD®U2GrRTÕHVEÄp!zµ0x´ÿ€à…>zøõ•Õñ¯¿8dË £ÃÁ€Q¿OÕ j!‡sà½ààœ âðÎm$@«·*`7ÄèJr C0:[…uâ“SDÍPˆfêÚS÷<“zÈxܧ_Uô{‰ÄذZÎqΑóýLþ=%+c8¢F£)ææd®F% âqÞó˜Ä#²8Dé,‰`à¡3Lf×µgÝ–nš‚™¢j83\€ñpÀhÔg<0k†µ`Òñ¬XVRŽÄœHY9=>bJ_'X±Sa0áûUQ½Pã‚G¼ÃáÁ9Ä âËŠU']Ì,[{¶ :Ù3°ŒjB,!’©ƒg2è3 Ø™Ž™Ž º*ã¸NJ×>A»clÕg>SŽù·Ÿ¿@Û9ýñ×VŠ´¼euàÅcYhP¼÷$_&[+(VÔËyÀ6®zÝŠÑ/ç€XÆL;5+ñB¿GŒ‡}v§#&“>ÃWžãD6¸–ʬ°˜ç³§ó9G'ç͸˜ÏY,ç2êžÿäëË´ã0L6³3rVÚ”> £ª…²nëT­Øœbw6‚)Y•à•^å zìLFììL˜kêÚB‘çäšçK@³‚óEâòò’ó‹%³óyÃżeÑ4,—‰UL3ïIôP©§$} 'ó.`!²í­“˜MÌxç‰ÎÀƒËE:œ*⋈)hÆ œ³¢V£!»ÓQQ­IÍ /ïðN:Õêp¥Ür¡œÌæ\\,¸œ-8_­X® i#1 9Á*M„&Ö¬˜óežê"&þÖ㽂U"s»r÷Û€a´1á½àpDD!:ð1ÈÔÁ{ìN‡ìíì°»3`0ðTÞ㜰Ñ æKc±l9>»äb6g6_ѶJL 3#«#›¨) 1)Y!¥„IñÆ·e¯‹³œ!ç`Ùu"÷Ì PLn{'BÊJ\µH/!¦dúýšÝé˜'ûSöö&L'~ •xœ/ö¶o\.ZÎÎ.9=Ÿq1ohZ%æŒZ@²Ì<˜¡¢¨ŽYÈšIšišDììëé—^÷Y$¡UTœieNBj𛥿s"½ÉsÆ´¥I‘a¯æ£ý=¾ýì÷wÙ™éñA[ѾvŸe óUäètÆÙÉŒËEÃ*æbÒÀ¡T¨–¯¤AT…¬FÊF¶DÛfš•õ¶ê¦LFIµJ*¦qÜF1¿X¦82¤³43=Ùç»=â›Ï¦<˜†•§ò¿ew6î<ÃlÞrptÎáÉ‹&ÒD%›£$éUg§J(_¼dQw3ÈYK¢j¤¬41³ÊJÔˆ)l Þ+ͱF#Á½x?`i&7KFÇÃCž=~È·¾±ÏÞƒ£ºG¯ç© ‰{͵+ÐF8:_rx|ÎñéœeIɺë¤céú—hÍHfE{Ì: ’“[¥MFŒ©Sk#Ïì¼±¹’˜\í½ƒ%¢ ;Ãßÿäüþï~—§+¦ýÃAMåÖý®Ú¤¨ðù‹s^q|º`ÕŠëŠÐ:u,ÉŒl(šR‰¿²†‘s ebVR›ib¤m[,wèZ‹‘7Ïú~É ¼6T¢È-ÔÍ{+Xæ‡ßû{ŸðƒïýûûczUy?· ò¨³‹Ì§ÿñ_^£‡ólƒuzhÛyb/˜ÙÓ’$§œÉšÉ)“’Ú–”"uÔBå !Я‡Ô½Š~]Ó«u/š%/GŒ{¾˜’¯ ,H|òݧôú}=¨éW\½sEGn؉”á§Ÿþ3ÿúŸGXP‡Šà=>8\ÎxWø0è2¡5P]Þ9*'HÕ1¾¦%Õª‚§ Uíô*z5ô* ^„Ê•D—K¾fœ%¬}sJ¯çñ¢øWÛÒ½[âïàу^îÌXEEHÔÁÁS×}Jò]WE ªPQU…=>œ§ª¡‚àKÜTÖîJ\'ç\ÇQQ®uÏß–x,®èWÒeT÷ Kï”Ò½‘7{È¿o>{HUW,ÛŒjI[|(Qz„¸b:ŒR2X6Æ|Ùp1[ñóÿœO?ýšåŒ?üÁÇ<Æoç8¸3} `÷¬u(†rЯùÆÓýBÙº/;µº±HÛ–Š»Î›^‹¬õ*PÊA] Óa§û#ž=ÝãO÷‹$uY›¥¨°j•ùªábÑòåAËg¿:äðð„ã“NN–ì †cò·žL‘ /Ïó)„;'|oɨªŠ'OžU aÄ‹ƒƒ{ÅÃ&R’d3œs$Öáš»zʼnÔ•çáî”gíñío>âé~Ÿº*6|­É¹µ¬bb¾H,øÅ/xñò„ÓYSHE ŒÀÏ1)µ2ž´WWÒ>'Sqò«ãt¢z;`÷, )^åb¾à§?ûgªÞ1_ ³P˜‡® J:‚î: Ñ)›i7˜êµ½CO¦ŒÉ°âÑþ˜gOòx‡G{#êúÊÉ%>KYiRââRùâ`Î~ÀÁñ糦xUçñaȺºB¥åºMtW'aT1öüåå’æÝÁêÖí]`2žêÁs>_ðº¸ÜD BQ<ÌðuèמɘÇðìñ>…à¯òEš9'æMæü"ñåËc¾|qÌÁñ9‹e$R!Òƒjˆ™C€Ü½ÀõËÞT“øÓ¨î"e·ˆ‰VÍ쮵¼U"=Õ|ï“ï’’á{}~ö³OQWä"]¥c°{‰ŽT¨”ºF}σ!÷wxòp;C¦ÓšÊomhX‰ì›œi“r1˼<^òÅÁ /^žp1_ÐÆ Ä´êwžö*Ô¸–‡ˆÚµÝž•†ƒYÌ[™Ìå|±¢½kí÷¶Y"ÂålÎ?þ쟽…ë6œÅÎ)ά”ú8ïô+&Ã!LØÝðpw‡ý5£QÙíq\m¢¦dĬ´I™]FfœžÍxy|ÎÑé‹•–ݸ~±üæºwò*MÜ1÷w®èlῘ·Ú\.m¹jå+ ½ïIþQ+æ 0!õ Æ“ã¾gw:fowÌþîÓé˜Ý©ÇßP)UH9Óf#&åbi/yyxÆÑñ§ç—,W‘¨†ˆC|W€btí:^ÓWçUE*5\…•-|qÊ!Éñ&õ4÷Ë” ‘¾3¦CcwwÈh4`w:aïÁ»;CvF5ãqanrój”tÈŒ¦1Îf-‡Ç¼<<åì|ÆÑù%óE"e¸Ph?@‚ÛìOæÛ‘xÝ̹MºîªI½«Ý ,OËŸþð£)ðýOØÛŸPWe›â¾õŽ“jFÛm8,–pt9>›ñâà„“³ Îg š6£¥øç„>>tÛUëEZ.¤ášÊÞZ÷«¿Û9_—bmÎëÖy¸s§úŽöÆ`™™ûü‹ÿâw¾õ\ _gšùŒF5EµØ³lŽ&&N/fœÍ8>9çðäœÙ|Éb™ˆÙ“©|—ûåBT‹·êÖ¶ª²n¡Ûòï¶Þמm½ðµ·3»2ä‚ïÎe²Æ®¿Þ^çú>ÀšÍxPDÆÈªüò³—$5b“¹X¬˜—ÂÓó9³å’å²!¦LV_!®pé†ï([â¯;“ž»“¡7+%¿^âÝU¨Þk?Þ¬ÃC›4žÚ Ì—|ùâ%§³‹EÃbÕÛŒ&HH‘çö{¨Á IK<µV ź‘Mí(ë^:åëJ'Ë⊭»>Æë^ ïåеu(ÐÇîp€³]û7Ë̪£c€OO=m›ˆš7ÔîúíÙ–I·mayÝ‘;¾o³Õo:Ö]G|ô{=&£>µ{;Òfæ./y°^UU =DŒ#9wYÝÖ>Ý­.òFöc]Zy“Ò¾uDyµÏzŸ±ª„AßQWž÷VëpvÆ4ÕWœc]×›cÎUë åû㹿ÞÖíYzOUUÔuÅ}Àºs•fÖ_,x°ùÝPn¦–Ý …k?n‰´Ð^ÿ½K¼;qC/n˜H¬«©S7Ç lWX§‰Ôýˆ²tH›kå[êþä¾î›òéªZß›Óõ{·ÇøŠèôVgfn>g§ûW¼¶û–Ýà¶¾¯mIĉ¼Ý½¿fíV°ÎÏÙÁ- P{)Ý·œrë• $üÆèéW¶WÀ2³QUѧJî]wºÕD¤†TÁ °ÌÌÏçŒÑw pÈà7Èú¿¶]k»"xÕv/½#PšTÁXf6ð zØ©ß¹Š¹W}XRXfæ°«=‰ï^î]‹Hå?,©‚+ÉzZöEÞÓ̃ô>4©pfÖo[>zo@Uáûëש9àã÷ T0W‹|U1ãonûЈ‡ÏÉ7tþIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/wizban/share_wizban.gif000066400000000000000000000060461203611042400326240ustar00rootroot00000000000000GIF89aKB÷ÿÿÿÞæøèîú^£ùêÓÑðôñôüËÇÒøúý¬ÃÝ4[†g„¦öøý¯•T¢´ÊÔÓâ¿ÑèÜÚåÆ˜;áéø´´´ìñûœ¼Ü¬eëðúÅãîº×⚥·ËáíëêðµÂÔØÜìEj–“²Ö™¸Ù–µØ›ºÚ0Q}«Ãž½Ü¯ÕÇ«tXxŸéîú‰v9£ÂÞ¡ÀÝÁÞâÛ¥^úüþåìùó®Rõ»`ÏîóÊéñ¬ËâÍìòž±Ç!=h#@l;`îòûüýþÜãô•©Âêïú’ªÓíóôµYÇæï|š»Œ¤¼ÊÙíªºÎ­Åâßçøó±Ušuš­ÅÝ¥JúÚ­´ÓæÒÒÒ)FpÂáíóöüöÀ|»Ï磾ÛúÞ±¿ÂË­¼ÐŽ­ÔÑÍÛ”¬äêù¹ÕÛèèíéïúÂÖâ©Èá¦Åà̹‰¨ÆàºËÝ«ËÙÌÌǹÅÖøÌˆ9d³†&¿ÞëþþÿøÓ¦¼Úê²ÍåíñûµÎåÄáå¶ÒܽÚÞÚÏ´zŸÅÅÛ驉8Êèì`§°ÅÙõ¾w­­®öÉ•3a‰ƒ¤Å½ÛäýþÿÞ°j±ÉäÑåîþôæ®Í䣼Ӷ»Â¸Ú¬Ãá´ÈÛ‚¥Ê²‡±Ðåz•²«ÀÖÓ?ôóõ·Öçïóü…©Ìàèøw“²à³mŠ­Ï³Ñá®Íá¯ÈâØÚêº×éž·Ñ‘¦À¥¸Í@[‚åÜÄãÊ›Üôöùá¿È¶ˆùש°ÏáÌÛçOrš«Âá·ÒÖùöð°¿ÒÍéñØìòôõú·ÕâÎìðÊæðþÿÿÃÕé2_†¥ÄßÇåé@d‘àÝæ˜µØš¸ÙÖÐÀ¦ÉØ1W€þúôïíò³ÎÒi‘º§Áß©·Ä±ÇâùùúµÓâýýý¦!Ìëïv–¸¿ÏáÉ·‘Qy¥¿4àô÷.MxÒ—èΠ÷ÍŸb¸q‹­“œ§’ ±>r§ÚÞï燷Ñçî­QòîᎦÀ£²ÂޝÏÉ©aOr‹UmýýþùÕœ·ž]œ¼Ûay–øÐ¢Ø×䯱{È S³Ìå0X³ÐHfx¼•CÖ׿í«NÏíóy˜ºšµ!ù,KBÿH° Áƒ*\HNŒ*t0œH±âÄv DÀÑ¢Çá ``Ç“Aª\ ‚*W¬@Ù‘¥Í10¨b ˆ™4SÞz0§NˆA|¥I´é@:u–ÄôçL¦N‡bŒJƒ×ªKQfµ)’+ƒL¼RUzUìX•.¹VéQ!íW¶Aß~44Rn:uÕ‚m{R¯Å¸~é¶»Öj^†æò˜™L¹rew!Øì÷ïbÁx±&œõîÚ¡N¨ºp†kO,¹ib†"ÆÍ}ufêá9ð]Ç¢¾wŒ@–8V¬"2£¹óæ³Q1t‰;÷nÞŠ}7[8!ªzÇ=ÿOž_>³f¡Òfy2«÷ðóè¾Þ›ñàÇÂWb¿¿ÿÿüYÒD×À€Z'ª­öškO\s^™Ð—}¡¹5z“Ñ#Dtèᇠ~è†>Š(²J+l(GyÍ øN„¼Õp „Š>©ä¸ <öè#­GòÈà nÐ ‹LÎ0[~öw5 „Š:°JY¸ÃÆ—_Ò æ˜dÒ`É«¨¦å4M1N8#•]¢†äÓÀ+Õ¤à矀êglH ‡!& âJâè£J …5BÓ$ é¦œvêi49¦² ?þd+CÉ 7VtÂÚ«°^ÿà 14ÊðÅ¢«?ôêë¯Àë†@ŠÇ%˜a–©ì²eJÐ1+غÉTD€#±tûÈ·J„+n(䆂30 ¯¨!è»ðÆ h,¬Îhñµ×D#ÁW|û-Ž$ìˆPŽ#žF,ñÄAAÃZðKпˆƒÂÇ ‡ 28lðO3Á¦¬òÊ,Ç£ÅÅ[»1Ä`óÍ8ã Î7!x²Œ·àŠn¹æ"b4"ö$ôu4í49PGMÎ2Æ,ÑH#üö+!¼Œàõ×`‡ýu$WÌ ÁͼŒÂl‡ÀÅÛpÇ-÷ÜUg]íÆWˆ ÷Þ|÷ÿ½7Ù¼ #òà„n8ÈuÛ½±=$4îøã;N6"9Wnùå˜ãœxÖ+qÂç ‡ú kb§6èîú× P«¸¿J¸`ûí¸ÛÞBÜnºßÀ÷­Ä'o¼Þ±Û­5„„ÒÂóÐGß  ôž\ùö‡B /Ëp/> ÉÏ. ˆ”¡þúìß°G ²¾'uˆnÿýˆøÁÉ¡Üïÿç½çb‚9á€D`8``ð€L‡=rGÁ ÚÃÀP$êЂ z0€Ê#ˆ êpƒš°„£xÅ@à‡0„øpžôf8Ã:øA~) pÒ„æ€ ÿȱˆ"q{@,¬¸pPHÅ*7œƒ€q„=Ü€}`TŸ/ÊÄžPLc8à`(£ 7ÈF T0€:ÚñŽxÌ£A rÌ!,C¬xÀ3rÔG…FFA‰ ôp,ä` ˜Æ4üÁI#xÒ“¥(GùIOú•0EN` X a'<áo€ÈP˜È寠k„€N(¼ÁFTâ˜H&$ †fRã™Ðl¦õ ‘Ì?¤2Np”ìaF4¢ kDÈarà$@Ðtœã¥&œà„äÀ0E’°ÿZÐÂXƒ@×PnaŸ¦À§=é Rèœà@ÒEPX”œfâäð†Hòà”8<åIO{âSŸüô'@JP¡ Ŧ€„xcƒ#é PL£Š<߆ÚQS(` ì)MKzÏ|곟ÿ è@ J‹ƒ&!¡ ¥ç¦¼—¹Ìe>áŠO ByË3ÖºV]ŒS˜Â„yŠ6ص :È«^wÀ×¾ú•¯zÍ«1J‘ƒd£ Æ8G"Î9ŠÆ6ŸøÄ3ñ[ž/˜Í¬.±€´áÿ8E x@ÚÒšö´¨=m$,P‚¼£ƒlg+[\ÿ<ã¸8«e…X„Þú¶º°… €W” µHn2ËÜæ:³~ÐÃÚ0…ì!DÍîPq‹;h€²?¯x B˜÷¼çµÅ€±ƒ{÷¼Å`«|çK_*d`ÖhC (‘ˆ Ôw­oÐ@w¿+ޏÀ"Ä‚Ìà!ŒaS8î‚‹ñÜ 3·†U@laaÌ w(Ä DAâ“X„5H±ŠW\ƒØâ†Lä!‹°HN²’“Œ h Éi@¯”§ŒÞZÁC ò”ñäâ`3˜¼ä2#Yª€2ƒ×Ìf÷ÿChóšûð<€ ²xA/ºÀç>óY ípÆ9ÌLh%˘ňN4’bH£vxAïœç=û¹Ï€Æ%Žüà Bð‚¨GMêR/ Ð¨.sŠs!>ôávˆ4ì,‹dè_¸Æ44œq‰M#ã×À‡Mla¯!Õ©Vq?¤ÑêWǺδN†­{ëðùû8 ÁmÄàÛÔ©Î-qldzŹ`µ«ÁîHCÏvàA®±ýòdÛ†ð6¸Ã=d„!µNð‚üàO8Á7`í.<@â¨ì½·­ï}‹øw06ÎñGàã ¹È#0’›üä&ÿ/2¶÷ñˆË¬!ß7¸«S¨À„'ÈyÎaôí(å$2zÐoõ… }ÓZB"_>8ÀÁ·8Í9s˜è\ç<—U~t¡ÛêVFŸÒ•¾ô»5퀺̿=õÜìÄêW7@Ö}ÎuŽxýëE?zÒË®µ] êQŸùÔå÷«ÏÝ>uÀ݉ö±+ݲÛN»Ú×ÞvÂãÜð×ÑúÏíîuÆëì¶Ü…!Ú!ùÀ³}ð6/<Ö3O÷¶,ìŸüì"_úµó7–»ÜYx×wöbß{>úÚSõU¿üê±Óú® ÝóÁ½âˆOzÀÛ¾ò©WþÎy/˜Ä¿>ïÑ—}Ö;eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/icons/full/wizban/svn_wizban.png000066400000000000000000000110531203611042400323410ustar00rootroot00000000000000‰PNG  IHDRKBA+"òIDATxœí›K$ËUÇ'"2ë]ÝÓ=¯;~^ÄYÂHÀ†5ß‹OÀÉ 6,Gl¼„o€dK˜+2 cîÃ3ýî®®GfDœÃ"²ª«{ºïLÏÌ{LHÕYñÏóüÇ)áÿÛ­íùsó¿\½ìkÕîü$9Èÿõ¤~Ú~ô“ª}ÿlPFëÕžÆçè&1k ÞqOø_œßÿyû‹¿07ýƒÏ{ƒPMœy¿0ðN‡±aœ ù«ïÿ­‘¬¿þñáDÑ¡&çOöÓLQ¹¸ùó[,YÏŸ68Þ©&Éðà AFH5ñU”|2·´¬çÏ­>üjzZU•³«óÒgbmú·óƒëùsóqx>mÂQHÅ¢;$ViWð·zº7iXów/FÉŒ×viÝ*iƒz¿ãÌ¿Óz?°~ô«úg³©ÔMׯUÒ³°çEDßñ9÷ò†Msi°~¤»µˆ`f·^»­™lMdû6éþµW'é(ϰ;f¿ÓÖs|&3CDø«Ÿý| ÞPD0*TÎ@…kGèø†¯À´›4²uŸu×E¸"ÝÒoyÆúž«ÿ¥{¥ë h‚–gÞ³Ý ,Ñ̓ ĺŬÛ3.3ººï\ë+W·¯H×WΧë{mì›clupxÄ1Ã;î Ø½Àj“ñ·?þ{fËHpÞ ‡óº xïðÞãÅ!ÎáDp^ÀqPV~…®ÃP¤¬C؈Ä5Ð;ÝÅxE»ÅŠD®U2GrRTÕHVEÄp!zµ0x´ÿ€à…>zøõ•Õñ¯¿8dË £ÃÁ€Q¿OÕ j!‡sà½ààœ âðÎm$@«·*`7ÄèJr C0:[…uâ“SDÍPˆfêÚS÷<“zÈxܧ_Uô{‰ÄذZÎqΑóýLþ=%+c8¢F£)ææd®F% âqÞó˜Ä#²8Dé,‰`à¡3Lf×µgÝ–nš‚™¢j83\€ñpÀhÔg<0k†µ`Òñ¬XVRŽÄœHY9=>bJ_'X±Sa0áûUQ½Pã‚G¼ÃáÁ9Ä âËŠU']Ì,[{¶ :Ù3°ŒjB,!’©ƒg2è3 Ø™Ž™Ž º*ã¸NJ×>A»clÕg>SŽù·Ÿ¿@Û9ýñ×VŠ´¼euàÅcYhP¼÷$_&[+(VÔËyÀ6®zÝŠÑ/ç€XÆL;5+ñB¿GŒ‡}v§#&“>ÃWžãD6¸–ʬ°˜ç³§ó9G'ç͸˜ÏY,ç2êžÿäëË´ã0L6³3rVÚ”> £ª…²nëT­Øœbw6‚)Y•à•^å zìLFììL˜kêÚB‘çäšçK@³‚óEâòò’ó‹%³óyÃżeÑ4,—‰UL3ïIôP©§$} 'ó.`!²í­“˜MÌxç‰ÎÀƒËE:œ*⋈)hÆ œ³¢V£!»ÓQQ­IÍ /ïðN:Õêp¥Ür¡œÌæ\\,¸œ-8_­X® i#1 9Á*M„&Ö¬˜óežê"&þÖ㽂U"s»r÷Û€a´1á½àpDD!:ð1ÈÔÁ{ìN‡ìíì°»3`0ðTÞ㜰Ñ æKc±l9>»äb6g6_ѶJL 3#«#›¨) 1)Y!¥„IñÆ·e¯‹³œ!ç`Ùu"÷Ì PLn{'BÊJ\µH/!¦dúýšÝé˜'ûSöö&L'~ •xœ/ö¶o\.ZÎÎ.9=Ÿq1ohZ%æŒZ@²Ì<˜¡¢¨ŽYÈšIšišDììëé—^÷Y$¡UTœieNBj𛥿s"½ÉsÆ´¥I‘a¯æ£ý=¾ýì÷wÙ™éñA[ѾvŸe óUäètÆÙÉŒËEÃ*æbÒÀ¡T¨–¯¤AT…¬FÊF¶DÛfš•õ¶ê¦LFIµJ*¦qÜF1¿X¦82¤³43=Ùç»=â›Ï¦<˜†•§ò¿ew6î<ÃlÞrptÎáÉ‹&ÒD%›£$éUg§J(_¼dQw3ÈYK¢j¤¬41³ÊJÔˆ)l Þ+ͱF#Á½x?`i&7KFÇÃCž=~È·¾±ÏÞƒ£ºG¯ç© ‰{͵+ÐF8:_rx|ÎñéœeIɺë¤céú—hÍHfE{Ì: ’“[¥MFŒ©Sk#Ïì¼±¹’˜\í½ƒ%¢ ;Ãßÿäüþï~—§+¦ýÃAMåÖý®Ú¤¨ðù‹s^q|º`ÕŠëŠÐ:u,ÉŒl(šR‰¿²†‘s ebVR›ib¤m[,wèZ‹‘7Ïú~É ¼6T¢È-ÔÍ{+Xæ‡ßû{ŸðƒïýûûczUy?· ò¨³‹Ì§ÿñ_^£‡ólƒuzhÛyb/˜ÙÓ’$§œÉšÉ)“’Ú–”"uÔBå !Я‡Ô½Š~]Ó«u/š%/GŒ{¾˜’¯ ,H|òݧôú}=¨éW\½sEGn؉”á§Ÿþ3ÿúŸGXP‡Šà=>8\ÎxWø0è2¡5P]Þ9*'HÕ1¾¦%Õª‚§ Uíô*z5ô* ^„Ê•D—K¾fœ%¬}sJ¯çñ¢øWÛÒ½[âïàу^îÌXEEHÔÁÁS×}Jò]WE ªPQU…=>œ§ª¡‚àKÜTÖîJ\'ç\ÇQQ®uÏß–x,®èWÒeT÷ Kï”Ò½‘7{È¿o>{HUW,ÛŒjI[|(Qz„¸b:ŒR2X6Æ|Ùp1[ñóÿœO?ýšåŒ?üÁÇ<Æoç8¸3} `÷¬u(†rЯùÆÓýBÙº/;µº±HÛ–Š»Î›^‹¬õ*PÊA] Óa§û#ž=ÝãO÷‹$uY›¥¨°j•ùªábÑòåAËg¿:äðð„ã“NN–ì †cò·žL‘ /Ïó)„;'|oɨªŠ'OžU aÄ‹ƒƒ{ÅÃ&R’d3œs$Öáš»zʼnÔ•çáî”gíñío>âé~Ÿº*6|­É¹µ¬bb¾H,øÅ/xñò„ÓYSHE ŒÀÏ1)µ2ž´WWÒ>'Sqò«ãt¢z;`÷, )^åb¾à§?ûgªÞ1_ ³P˜‡® J:‚î: Ñ)›i7˜êµ½CO¦ŒÉ°âÑþ˜gOòx‡G{#êúÊÉ%>KYiRââRùâ`Î~ÀÁñ糦xUçñaȺºB¥åºMtW'aT1öüåå’æÝÁêÖí]`2žêÁs>_ðº¸ÜD BQ<ÌðuèמɘÇðìñ>…à¯òEš9'æMæü"ñåËc¾|qÌÁñ9‹e$R!Òƒjˆ™C€Ü½ÀõËÞT“øÓ¨î"e·ˆ‰VÍ쮵¼U"=Õ|ï“ï’’á{}~ö³OQWä"]¥c°{‰ŽT¨”ºF}σ!÷wxòp;C¦ÓšÊomhX‰ì›œi“r1˼<^òÅÁ /^žp1_ÐÆ Ä´êwžö*Ô¸–‡ˆÚµÝž•†ƒYÌ[™Ìå|±¢½kí÷¶Y"ÂålÎ?þ쟽…ë6œÅÎ)ά”ú8ïô+&Ã!LØÝðpw‡ý5£QÙíq\m¢¦dĬ´I™]FfœžÍxy|ÎÑé‹•–ݸ~±üæºwò*MÜ1÷w®èlῘ·Ú\.m¹jå+ ½ïIþQ+æ 0!õ Æ“ã¾gw:fowÌþîÓé˜Ý©ÇßP)UH9Óf#&åbi/yyxÆÑñ§ç—,W‘¨†ˆC|W€btí:^ÓWçUE*5\…•-|qÊ!Éñ&õ4÷Ë” ‘¾3¦CcwwÈh4`w:aïÁ»;CvF5ãqanrój”tÈŒ¦1Îf-‡Ç¼<<åì|ÆÑù%óE"e¸Ph?@‚ÛìOæÛ‘xÝ̹MºîªI½«Ý ,OËŸþð£)ðýOØÛŸPWe›â¾õŽ“jFÛm8,–pt9>›ñâà„“³ Îg š6£¥øç„>>tÛUëEZ.¤ášÊÞZ÷«¿Û9_—bmÎëÖy¸s§úŽöÆ`™™ûü‹ÿâw¾õ\ _gšùŒF5EµØ³lŽ&&N/fœÍ8>9çðäœÙ|Éb™ˆÙ“©|—ûåBT‹·êÖ¶ª²n¡Ûòï¶Þמm½ðµ·3»2ä‚ïÎe²Æ®¿Þ^çú>ÀšÍxPDÆÈªüò³—$5b“¹X¬˜—ÂÓó9³å’å²!¦LV_!®pé†ï([â¯;“ž»“¡7+%¿^âÝU¨Þk?Þ¬ÃC›4žÚ Ì—|ùâ%§³‹EÃbÕÛŒ&HH‘çö{¨Á IK<µV ź‘Mí(ë^:åëJ'Ë⊭»>Æë^ ïåеu(ÐÇîp€³]û7Ë̪£c€OO=m›ˆš7ÔîúíÙ–I·mayÝ‘;¾o³Õo:Ö]G|ô{=&£>µ{;Òfæ./y°^UU =DŒ#9wYÝÖ>Ý­.òFöc]Zy“Ò¾uDyµÏzŸ±ª„AßQWž÷VëpvÆ4ÕWœc]×›cÎUë åû㹿ÞÖíYzOUUÔuÅ}Àºs•fÖ_,x°ùÝPn¦–Ý …k?n‰´Ð^ÿ½K¼;qC/n˜H¬«©S7Ç lWX§‰Ôýˆ²tH›kå[êþä¾î›òéªZß›Óõ{·ÇøŠèôVgfn>g§ûW¼¶û–Ýà¶¾¯mIĉ¼Ý½¿fíV°ÎÏÙÁ- P{)Ý·œrë• $üÆèéW¶WÀ2³QUѧJî]wºÕD¤†TÁ °ÌÌÏçŒÑw pÈà7Èú¿¶]k»"xÕv/½#PšTÁXf6ð zØ©ß¹Š¹W}XRXfæ°«=‰ï^î]‹Hå?,©‚+ÉzZöEÞÓ̃ô>4©pfÖo[>zo@Uáûëש9àã÷ T0W‹|U1ãonûЈ‡ÏÉ7tþIEND®B`‚eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/plugin.properties000066400000000000000000000272441203611042400275310ustar00rootroot00000000000000#****************************************************************************** # Copyright (c) 2003, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ RelocateAction.label=Relocate... AddAction.label=&Add to Version Control AddCommand.label=Add to Version Control AddAction.tooltip=Add the Selected Resources to Version Control AddKeywords.label=Add Keywords... AddKeywords.tooltip=Modify svn:keywords property on selected files AddToWorkspaceAction.label=&Check Out As Project AddToWorkspaceAction.tooltip=Check out a folder from the repository to the workspace CheckoutWizard.name=Checkout Projects from SVN CheckoutWizard.label=Checkout Projects from SVN CheckoutWizard.desc=Create a new project by checking out an existing project from a SVN repository. CheckoutWizard.tooltip=Checkout from SVN CheckoutAction.label=Check Out &Module CheckoutAction.tooltip=Check out a module defined in SVNROOT/modules from the repository to the workspace CheckoutAsAction.label=&Checkout... CheckoutAsAction.tooltip=Check out a folder from the repository to the workspace, specifying project name CheckoutIntoAction.label=Check Out &Into... CheckoutIntoAction.tooltip=Check out a folder from the repository into an existing folder in the workspace CheckoutCommand.label=Checkout UpgradeAction.label=Upgrade UpgradeAction.tooltip=Upgrade working copy RefreshCleanupAction.label=Refresh/Cleanup CleanupAction.tooltip=Cleanup uncommitted transactions ConfigureTagsAction.label=Configure Branches/Tags... CommitAction.label=&Commit... CommitAction.tooltip=Commit CommitCommand.label=Commit SwitchAction.label=&Switch to another Branch/Tag/Revision... SwitchAction.tooltip=Switch SwitchCommand.label=Switch to another Branch/Tag... BranchTagAction.label=Branch/Tag... BranchTagAction.tooltip=Branch/Tag... CommentTemplatesPreferencePage.name=Comment Templates CommitAction.tooltip=Commit CompareRemoteResourcesAction.label=Com&pare... CompareRemoteResourcesAction.tooltip=Compare the Remote Resources with Each Other CompareWithHeadAction.label=&Latest from Repository CompareWithHeadAction.tooltip=Compare with Content on SVN Server CompareWithHeadCommand.label=Compare with Latest from Repository CompareWithPreviousAction.label=&Previous from Repository CompareWithBranchTagAction.label=Branch/Tag... CompareWithBranchTagCommand.label=Compare with Branch/Tag CompareWithPreviousAction.tooltip=Compare with Previous Revision on SVN Server CompareWithRevisionAction.label=&Revision... CompareWithRevisionAction.tooltip=Compare with Revision on SVN Server CompareWithRevisionCommand.label=Compare with Revision on SVN Server CompareWithBaseAction.label=&Base Revision CompareWithBaseAction.tooltip=Compare with Local Base Revision CompareWithBaseCommand.label=Compare with Local Base Revision CompareDialog.noDifferences=No differences found. CompareDialog.compareFailed=Comparison failed. Console.name=SVN Console ConsolePreferencePage.name=Console UpdateToHeadPreferencePage.name=Update to HEAD ContentAction.label=Compare File Contents ContentAction.tooltip=Use File Contents Instead of Timestamps When Comparing ConvertNature.label=Convert Provider from Nature ConvertNature.tooltip=Converts a SVN project from using natures to using properties CopyRemoteAction.label=Copy CopyRemoteAction.tooltip=Copy a remote resource CopyRepositoryNameAction.label=&Copy to Clipboard CopyRepositoryNameAction.tooltip=Copy Repository Names to Clipboard CreateRemoteFolderAction.label=New remote folder CreateRemoteFolderAction.tooltip=Creates a new remote folder on repository DecoratorPreferencePage.name=Label Decorations DecoratorStandard.desc=Shows SVN specific information on resources in projects under SVN control. Information includes the revision number, branch or version name, etc. DecoratorStandard.name=SVN DeleteRemoteAction.label=Delete... CopyUrlToClipboardAction.label=Copy URL to Clipboard ExportRemoteFolderAction.label=Export... ImportFolderAction.label=Import... DeleteRemoteAction.tooltip=Delete remote resource deletesvnpropertyaction.label=Delete Property deletesvnpropertyaction.tooltip=Delete the selected SVN properties DiffMergePreferencePage.name=Diff/Merge MergeFileAssociationPreferencePage.name=File Associations EditPropertyConflictsAction.label=Edit property conflicts... EditConflictsAction.label=Edit conflicts... EditConflictsAction.tooltip=Use external merge program to resolve conflicts extmethodpreferencepage.name=ext connection method generatediff.label=Create &Patch... generatediff.tooltip=compare your workspace contents with the server and generate a diff file that can be used as a patch file. historyfilter.label=&Filter History historyfilter.tooltip=Filter History historyview.name=SVN Resource History LockAction.label=Lock... LockAction.tooltip=Lock the selected file UnlockAction.label=Unlock UnlockAction.tooltip=Unlock the selected file IgnoreAction.label=A&dd to svn:ignore... IgnoreAction.tooltip=Ignore the Selected Resources when Synchronizing IgnoreCommand.label=Add to svn:ignore MergeAction.label=&Merge... MergeAction.tooltip=Merge MergeCommand.label=Merge... ModifySVNPropertyAction.label=Modify property ModifySVNPropertyAction.tooltip=Modify the svn property RemoteResourcePropertiesAction.label=Properties MoveRemoteAction.label=Rename/move... MoveRemoteAction.tooltip=Rename of move a remote resource OpenLogEntryAction.label=&Open OpenLogEntryAction.tooltip=Open Remote File OpenRemoteFileAction.label=&Open OpenRemoteFileAction.tooltip=Open Remote File AnnotateAction.label=Show Annotation... PasteRemoteAction.label=Paste... PasteRemoteAction.tooltip=Paste PendingOperationsView.name=Pending SVN Operations pluginName=SVN Team Provider UI PreferenceKeywords.SVN=SVN PreferencePage.name=SVN providerName=tigris.org RefreshFromLocal.label=&Refresh from local SVN state RefreshFromLocal.tooltip=Refresh the workbench with changes made to SVN projects from outside the workbench. RemoveRootAction.label=Discard &Location RemoveRootAction.tooltip=Discard Location ReplaceWithAction.label=&Latest from Repository ReplaceWithAction.tooltip=Replace with last committed content from SVN Server ReplaceWithRevisionAction.label=&Revision... ReplaceWithRevisionAction.tooltip=Replace with Revision on SVN Server ReplaceWithBaseAction.label=&Base Revision ReplaceWithBaseAction.tooltip=Replace with Local Base Revision RepositoriesView.name=SVN Repositories RepoPreference.Name=SVN Repositories RepoPreference.Description=Preferences that contain the SVN repository connection information RestoreFromRepositoryAction.label=&Restore from Repository... RestoreFromRepositoryAction.tooltip=Restore resources that have been deleted from the remote folder. RevertAction.label=&Revert... RevertCommand.label=Revert MarkDeletedAction.label=Mark as Deleted RevertAction.tooltip=Restore pristine working copy file (undo all local edits) CopyAction.label=Cop&y... CopyAction.tooltip=Copy the selected resources CopyCommand.label=Copy... ExportAction.label=Export... ResolveAction.label=Mark Resolved... ResolveAction.tooltip=Set state to "resolved" (all conflicts fixed) SaveSVNPropertyAction.label=Save property value SaveSVNPropertyAction.tooltip=Save the value of the selected property to a file SetSvnProperty.label=Set Property... SetSvnProperty.tooltip=Set a new SVN property on the selected resource SharingWizard.name=SVN ShowDifferencesAsUnifiedDiffAction.label=Compare... CompareSvnPropertiesAction.label=Compare SVN Properties... OpenBugUrlAction.label=Open Bug URL ShowTreeConflictsAction.label=Show Tree Conflicts ShowHistoryAction.label=Show &History ShowHistoryCommand.label=Show History ShowHistoryAction.tooltip=Show History ShowRevisionPropertiesAction.label=Show Revision Properties ShowRevisionPropertiesCommand.label=Show Revision Properties ShowRevisionPropertiesAction.tooltip=Show Revision Properties ShowPendingOperationsAction.label=Show pending operations ShowPendingOperationsAction.tooltip=Show resources that need commit ShowSvnPropertiesAction.label=Show Properties ShowSvnPropertiesAction.tooltip=Show the SVN properties for selected resource SVNActionSet.label=SVN SVNActionSet.categoryName=SVN SVNActionSet.description=Actions that apply when working with SVN repositories SVNActionSet.newLabel=Add SVN Repository SVNActionSet.newTooltip=Add SVN Repository SVNActionSet.syncLabel=Synchronize SVN Projects SVNActionSet.syncTooltip=Synchronize SVN Projects SVNCompareParticipant=SVN Compare SVNConflictFilter.name=SVN Non-Conflicts SVNConflictFilter.description=Hides elements which are not in the SVN Conflicted state SVNConsoleFont.description=The font for the SVN console. SVNConsoleFont.label=SVN Console Font SVNGroupMenu.label=S&VN SVNMergeParticipant=SVN Merge SvnPropertiesView.name=SVN Properties SvnRevPropertiesView.name=SVN Rev Properties TreeConflictsView.name=SVN Tree Conflicts SVNRemoteQuickDiffProvider.label=&Latest SVN Revision SVNRepositoryExploring=SVN Repository Exploring SVN=SVN SVNWorkspaceParticipant=SVN SynchronizeAction.label=&Synchronize with Repository SynchronizeAction.tooltip=Synchronize with Repository SynchronizeCommand.label=Synchronize with Repository SynchronizeOutgoing.label=S&ynchronize Outgoing Changes... SynchronizeOutgoing.tooltip=Synchronize the outgoing changes with the repository Synchronize.tooltip=Synchronize the workspace resources with those in the repository UnmanageFolder.label=&Disconnect... UnmanageFolder.tooltip=Disconnect from the SVN repository. UpdateAction.label=&Update to HEAD UpdateAction.tooltip=Update UpdateCommand.label=Update UpdateDialogAction.label=Update to Version... viewCategory=SVN WatchEditPreferencePage.name=Watch/Edit DeleteSVNPropertyAction.label=Delete property DeleteSVNPropertyAction.tooltip=Delete the selected SVN properties AnnotateView.name=SVN Annotate ShowAnnotationAction.label=Show &Annotation... ShowAnnotationCommand.label=Show Annotation ShowAnnotationAction.tooltip=Show Annotation repositoryView.name=SVN Repositories themeCategory=SVN commitCommentFont.description=The font for SVN commit comments. commitCommentFont.label=SVN Commit Comment Font OutgoingChangeForegroundColor.label=Outgoing Change (Foreground) OutgoingChangeForegroundColor.description=This color is used for the foreground color for resources that have outgoing changes. OutgoingChangeBackgroundColor.label=Outgoing Change (Background) OutgoingChangeBackgroundColor.description=This color is used for the background color for resources that have outgoing changes. OutgoingChangeFont.label=Outgoing Change Font OutgoingChangeFont.description=The font used to display outgoing changes. IgnoredResourceFont.label=Ignored Resource Font IgnoredResourceFont.description=The font used to display resources that are ignored from SVN. IgnoredResourceForegroundColor.label=Ignored Resource (Foreground) IgnoredResourceForegroundColor.description=This color is used for the foreground color for resources that are ignored from SVN. IgnoredResourceBackgroundColor.label=Ignored Resource (Background) IgnoredResourceBackgroundColor.description=This color is used for the background color for resources that are ignored from SVN. svnQuickDiff.label=Pristine SVN Copy svnPropertyPage.name=Subversion syncWizard.description= syncWizard.name=SVN syncWizard.description=Synchronize files managed with SVN conflictMarker=SVN Conflict CheckoutAsProjectIntoAction.label=&Check Out As Project Into .. CheckoutAsAction.tooltip =&Check out a folder from the repository to the workspace into a directory MenuIconsPreferencePage.name=Menu Icons eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/plugin.xml000066400000000000000000002243231203611042400261320ustar00rootroot00000000000000 %CheckoutWizard.desc %CheckoutWizard.desc %DecoratorStandard.desc %commitCommentFont.description %OutgoingChangeForegroundColor.description %OutgoingChangeBackgroundColor.description %OutgoingChangeFont.description %IgnoredResourceForegroundColor.description %IgnoredResourceBackgroundColor.description %IgnoredResourceFont.description bugtraq:logregex This property contains one or two regular expressions, separated by a newline. If only one expression is set, then the bare bug ID's must be matched in the groups of the regex string. Example: [Ii]ssue(?:s)? #?(\d+) If two expressions are set, then the first expression is used to find a string which relates to the bug ID but may contain more than just the bug ID (e.g. "Issue #123" or "resolves issue 123"). The second expression is then used to extract the bare bug ID from the string extracted with the first expression. An example: If you want to catch every pattern "issue #XXX" and "issue #890, #789" inside a log message you could use the following regex strings: [Ii]ssue #?(\d+)(,? ?#'(\d+))+ and the second expression as (\d+) bugtraq:label Label text to show for the edit box where the user enters the issue number. Example: Issue#: bugtraq:message String which is added to a log message when an issue number is entered. The string must contain "%BUGID%" which gets replaced with the issue number. Example: Issue#: %BUGID% bugtraq:number Set to "true" if your issue tracking system has issues which can only be numbers. bugtraq:url URL pointing to the issue tracker. It must contain "%BUGID%" which gets replaced with the issue number. Example: http://www.yourcompany.com/showissue?issue=%BUGID% bugtraq:warnifnoissue Set to "true" if a warning shall be shown when no issue is entered in the commit dialog. bugtraq:append Set to "false" if you want the issue number to be inserted at the top of the log message. The default is "true" which means the issue number is appended to the log message. tsvn:logtemplate String which is inserted in the log message box in the commit dialog. Use this as a log message template for users to fill in. tsvn:logwidthmarker Set this to the max number of characters on a single line of a log message. A faded line is shown in the commit dialog at that position to guide the user when entering a log message. tsvn:logminsize Minimum size in characters a log message must have before a commit is allowed. tsvn:lockmsgminsize Minimum size in characters a lock message must have before a lock is allowed. subclipse:tags List of tags and branches that have been created from the selected item. Typically this property would only be set on the project folder. The format of the property is: revnum,tag_name,relative_path,branch/tag For example: 123,custom_mods,/branches/custom_mods,branch 135,v1.0,/tags/v1.0,tag 195,v1.1,/tags/v1.1,tag 215,v2.0,/tags/v2.0,tag %RepoPreference.Description eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/plugin_ja.properties000066400000000000000000000510161203611042400301750ustar00rootroot00000000000000#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) #****************************************************************************** # Copyright (c) 2005, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ #Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) AddAction.label = \u30D0\u30FC\u30B8\u30E7\u30F3\u7BA1\u7406\u306B\u8FFD\u52A0(&A) AddAction.tooltip = \u9078\u629E\u3057\u305F\u30EA\u30BD\u30FC\u30B9\u3092\u30D0\u30FC\u30B8\u30E7\u30F3\u7BA1\u7406\u3078\u8FFD\u52A0\u3059\u308B AddCommand.label = \u30D0\u30FC\u30B8\u30E7\u30F3\u7BA1\u7406\u306B\u8FFD\u52A0 AddKeywords.label = \u30AD\u30FC\u30EF\u30FC\u30C9\u3092\u8FFD\u52A0... AddKeywords.tooltip = \u9078\u629E\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u306Esvn:keywords\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u5909\u66F4 AddToWorkspaceAction.label = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3068\u3057\u3066\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8(&C) AddToWorkspaceAction.tooltip = \u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u304B\u3089\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u3078\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u3057\u307E\u3059\u3002 AnnotateAction.label = \u6CE8\u91C8... AnnotateView.name = SVN \u6CE8\u91C8 BranchTagAction.label = \u30D6\u30E9\u30F3\u30C1/\u30BF\u30B0... BranchTagAction.tooltip = \u30D6\u30E9\u30F3\u30C1/\u30BF\u30B0... CheckoutAction.label = \u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8(&M) CheckoutAction.tooltip = \u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u304B\u3089\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u3078\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u3057\u307E\u3059\u3002 CheckoutAsAction.label = \u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8(&C)... CheckoutAsAction.tooltip = \u30E2\u30B8\u30E5\u30FC\u30EB\u3092\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u304B\u3089\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u3078\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u3057\u307E\u3059\u3002 CheckoutAsProjectIntoAction.label = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3068\u3057\u3066\u6B21\u3078\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8(&C)... CheckoutCommand.label = \u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8 CheckoutIntoAction.label = \u30D5\u30A9\u30EB\u30C0\u3078\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8(&I)... CheckoutIntoAction.tooltip = \u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u306B\u5B58\u5728\u3059\u308B\u30D5\u30A9\u30EB\u30C0\u3078\u30EA\u30DD\u30B8\u30C8\u30EA\u4E0A\u306E\u30D5\u30A9\u30EB\u30C0\u3092\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u3059\u308B\u3002 CheckoutWizard.desc = SVN\u30EA\u30DD\u30B8\u30C8\u30EA\u304B\u3089\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u3057\u3066\u65B0\u898F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u751F\u6210\u3002 CheckoutWizard.label = SVN\u304B\u3089\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8 CheckoutWizard.name = SVN\u304B\u3089\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8 CheckoutWizard.tooltip = SVN\u304B\u3089\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8 CleanupAction.label = \u30AF\u30EA\u30FC\u30F3\u30A2\u30C3\u30D7 CleanupAction.tooltip = \u30B3\u30DF\u30C3\u30C8\u3055\u308C\u3066\u3044\u306A\u3044\u30C8\u30E9\u30F3\u30B6\u30AF\u30B7\u30E7\u30F3\u3092\u30AF\u30EA\u30FC\u30F3\u30A2\u30C3\u30D7\u3057\u307E\u3059\u3002 CommentTemplatesPreferencePage.name = \u30B3\u30E1\u30F3\u30C8\u30FB\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8 CommitAction.label = \u30B3\u30DF\u30C3\u30C8(&C)... CommitAction.tooltip = \u30B3\u30DF\u30C3\u30C8 CommitCommand.label = \u30B3\u30DF\u30C3\u30C8 CompareDialog.compareFailed = \u6BD4\u8F03\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002 CompareDialog.noDifferences = \u5DEE\u5206\u306F\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002 CompareRemoteResourcesAction.label = \u6BD4\u8F03(&P) CompareRemoteResourcesAction.tooltip = \u30EA\u30E2\u30FC\u30C8\u30FB\u30EA\u30BD\u30FC\u30B9\u306E\u76F8\u4E92\u6BD4\u8F03 CompareWithBaseAction.label = \u30D9\u30FC\u30B9\u30FB\u30EA\u30D3\u30B8\u30E7\u30F3(&B) CompareWithBaseAction.tooltip = \u6BD4\u8F03\u3059\u308B\u30ED\u30FC\u30AB\u30EB\u306E\u30D9\u30FC\u30B9\u30EA\u30D3\u30B8\u30E7\u30F3 CompareWithBranchTagAction.label = \u30D6\u30E9\u30F3\u30C1/\u30BF\u30B0... CompareWithHeadAction.label = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u304B\u3089\u6700\u65B0(&L) CompareWithHeadAction.tooltip = SVN\u30B5\u30FC\u30D0\u4E0A\u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u3068\u6BD4\u8F03\u3057\u307E\u3059\u3002 CompareWithPreviousAction.label = \u76F4\u524D\u306E\u30EA\u30D3\u30B8\u30E7\u30F3\u3068\u6BD4\u8F03(&P) CompareWithPreviousAction.tooltip = SVN\u30B5\u30FC\u30D0\u4E0A\u306E\u76F4\u524D\u306E\u30EA\u30D3\u30B8\u30E7\u30F3\u3068\u6BD4\u8F03\u3057\u307E\u3059\u3002 CompareWithRevisionAction.label = \u30EA\u30D3\u30B8\u30E7\u30F3(&R)... CompareWithRevisionAction.tooltip = SVN \u30B5\u30FC\u30D0\u30FC\u4E0A\u306E\u30EA\u30D3\u30B8\u30E7\u30F3\u3068\u306E\u6BD4\u8F03\u3057\u307E\u3059\u3002 ConfigureTagsAction.label = \u30D6\u30E9\u30F3\u30C1/\u30BF\u30B0\u306E\u8A2D\u5B9A... Console.name = SVN \u30B3\u30F3\u30BD\u30FC\u30EB ConsolePreferencePage.name = \u30B3\u30F3\u30BD\u30FC\u30EB ContentAction.label = \u30D5\u30A1\u30A4\u30EB\u30FB\u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u6BD4\u8F03 ContentAction.tooltip = \u6BD4\u8F03\u6642\u306B\u30BF\u30A4\u30E0\u30FB\u30B9\u30BF\u30F3\u30D7\u306E\u4EE3\u308F\u308A\u306B\u30D5\u30A1\u30A4\u30EB\u30FB\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u4F7F\u7528\u3057\u307E\u3059\u3002 ConvertNature.label = \u30CD\u30FC\u30C1\u30E3\u30FC\u304B\u3089\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u3092\u5909\u63DB ConvertNature.tooltip = SVN \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u30CD\u30FC\u30C1\u30E3\u30FC\u306E\u4F7F\u7528\u304B\u3089\u30D7\u30ED\u30D1\u30C6\u30A3\u30FC\u306E\u4F7F\u7528\u306B\u5909\u63DB\u3002 CopyAction.label = \u30B3\u30D4\u30FC(&y)... CopyAction.tooltip = \u9078\u629E\u3057\u305F\u30EA\u30BD\u30FC\u30B9\u3092\u30B3\u30D4\u30FC CopyCommand.label = \u30B3\u30D4\u30FC... CopyRemoteAction.label = \u30B3\u30D4\u30FC CopyRemoteAction.tooltip = \u30EA\u30E2\u30FC\u30C8\u306E\u30EA\u30BD\u30FC\u30B9\u3092\u30B3\u30D4\u30FC CopyRepositoryNameAction.label = \u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u306B\u30B3\u30D4\u30FC(&C) CopyRepositoryNameAction.tooltip = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u540D\u3092\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u306B\u30B3\u30D4\u30FC\u3057\u307E\u3059\u3002 CopyUrlToClipboardAction.label = URL\u3092\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u3078\u30B3\u30D4\u30FC CreateRemoteFolderAction.label = \u30EA\u30E2\u30FC\u30C8\u30FB\u30D5\u30A9\u30EB\u30C0\u65B0\u898F\u4F5C\u6210 CreateRemoteFolderAction.tooltip = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u4E0A\u306B\u65B0\u3057\u3044\u30EA\u30E2\u30FC\u30C8\u30FB\u30D5\u30A9\u30EB\u30C0\u3092\u4F5C\u6210\u3057\u307E\u3059\u3002 DecoratorPreferencePage.name = \u30E9\u30D9\u30EB\u88C5\u98FE DecoratorStandard.desc = SVN \u5236\u5FA1\u4E0B\u306B\u3042\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5185\u306E\u30EA\u30BD\u30FC\u30B9\u306B\u95A2\u3059\u308B SVN \u7279\u5B9A\u306E\u60C5\u5831\u3092\u8868\u793A\u3057\u307E\u3059\u3002 \u3053\u306E\u60C5\u5831\u306B\u306F\u6539\u8A02\u756A\u53F7\u3001\u30D6\u30E9\u30F3\u30C1\u540D\u307E\u305F\u306F\u30D0\u30FC\u30B8\u30E7\u30F3\u540D\u305D\u306E\u4ED6\u304C\u542B\u307E\u308C\u307E\u3059\u3002 DecoratorStandard.name = SVN DeleteRemoteAction.label = \u524A\u9664... DeleteRemoteAction.tooltip = \u30EA\u30E2\u30FC\u30C8\u306E\u30EA\u30BD\u30FC\u30B9\u3092\u524A\u9664\u3057\u307E\u3059\u3002 DeleteSVNPropertyAction.label = \u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u524A\u9664 DeleteSVNPropertyAction.tooltip = \u9078\u629E\u3055\u308C\u305FSVN\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u524A\u9664\u3057\u307E\u3059\u3002 DiffMergePreferencePage.name = \u5DEE\u5206/\u30DE\u30FC\u30B8 EditConflictsAction.label = \u7AF6\u5408\u306E\u7DE8\u96C6 EditConflictsAction.tooltip = \u7AF6\u5408\u306E\u89E3\u6C7A\u306B\u5916\u90E8\u306E\u30DE\u30FC\u30B8\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u5229\u7528\u3057\u307E\u3059\u3002 ExportAction.label = \u30A8\u30AF\u30B9\u30DD\u30FC\u30C8... ExportRemoteFolderAction.label = \u30A8\u30AF\u30B9\u30DD\u30FC\u30C8... IgnoreAction.label = svn:ignore\u306B\u8FFD\u52A0(&D)... IgnoreAction.tooltip = \u540C\u671F\u5316\u6642\u306B\u9078\u629E\u3057\u305F\u30EA\u30BD\u30FC\u30B9\u3092\u7121\u8996\u3057\u307E\u3059\u3002 IgnoreCommand.label = svn:ignore\u306B\u8FFD\u52A0 IgnoredResourceBackgroundColor.description = \u3053\u306E\u8272\u306FSVN\u304B\u3089\u7121\u8996\u3055\u308C\u308B\u30EA\u30BD\u30FC\u30B9\u306E\u80CC\u666F\u8272\u3068\u3057\u3066\u4F7F\u308F\u308C\u307E\u3059\u3002 IgnoredResourceBackgroundColor.label = \u7121\u8996\u3059\u308B\u30EA\u30BD\u30FC\u30B9(\u80CC\u666F) IgnoredResourceFont.description = \u3053\u306E\u30D5\u30A9\u30F3\u30C8\u306FSVN\u304B\u3089\u7121\u8996\u3055\u308C\u308B\u30EA\u30BD\u30FC\u30B9\u306E\u8868\u793A\u306B\u4F7F\u308F\u308C\u307E\u3059\u3002 IgnoredResourceFont.label = \u7121\u8996\u3059\u308B\u30EA\u30BD\u30FC\u30B9\u306E\u30D5\u30A9\u30F3\u30C8 IgnoredResourceForegroundColor.description = \u3053\u306E\u8272\u306FSVN\u304B\u3089\u7121\u8996\u3055\u308C\u308B\u30EA\u30BD\u30FC\u30B9\u306E\u524D\u666F\u8272\u3068\u3057\u3066\u4F7F\u308F\u308C\u307E\u3059\u3002 IgnoredResourceForegroundColor.label = \u7121\u8996\u3059\u308B\u30EA\u30BD\u30FC\u30B9(\u524D\u666F) ImportFolderAction.label = \u30A4\u30F3\u30DD\u30FC\u30C8... LockAction.label = \u30ED\u30C3\u30AF LockAction.tooltip = \u9078\u629E\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u3092\u30ED\u30C3\u30AF\u3057\u307E\u3059\u3002 MarkDeletedAction.label = \u524A\u9664\u3068\u3057\u3066\u30DE\u30FC\u30AF MenuIconsPreferencePage.name = \u30E1\u30CB\u30E5\u30FC\u30FB\u30A2\u30A4\u30B3\u30F3 MergeAction.label = \u30DE\u30FC\u30B8(&M)... MergeAction.tooltip = \u30DE\u30FC\u30B8 ModifySVNPropertyAction.label = \u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u5909\u66F4 ModifySVNPropertyAction.tooltip = svn\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u5909\u66F4\u3057\u307E\u3059\u3002 MoveRemoteAction.label = \u540D\u524D\u5909\u66F4/\u79FB\u52D5... MoveRemoteAction.tooltip = \u30EA\u30E2\u30FC\u30C8\u306E\u30EA\u30BD\u30FC\u30B9\u306E\u540D\u524D\u3092\u5909\u66F4\u3082\u3057\u304F\u306F\u79FB\u52D5\u3057\u307E\u3059\u3002 OpenLogEntryAction.label = \u958B\u304F(&O) OpenLogEntryAction.tooltip = \u30EA\u30E2\u30FC\u30C8\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u958B\u304F OpenRemoteFileAction.label = \u958B\u304F(&O) OpenRemoteFileAction.tooltip = \u30EA\u30E2\u30FC\u30C8\u30FB\u30D5\u30A1\u30A4\u30EB\u3092\u958B\u304F OutgoingChangeBackgroundColor.description = \u3053\u306E\u8272\u306F\u767A\u4FE1\u5909\u66F4\u3092\u3082\u3064\u30EA\u30BD\u30FC\u30B9\u306E\u80CC\u666F\u8272\u3068\u3057\u3066\u4F7F\u308F\u308C\u307E\u3059\u3002 OutgoingChangeBackgroundColor.label = \u767A\u4FE1\u5909\u66F4(\u80CC\u666F) OutgoingChangeFont.description = \u3053\u306E\u30D5\u30A9\u30F3\u30C8\u306F\u767A\u4FE1\u5909\u66F4\u8868\u793A\u306B\u4F7F\u308F\u308C\u307E\u3059\u3002 OutgoingChangeFont.label = \u767A\u4FE1\u5909\u66F4\u30D5\u30A9\u30F3\u30C8 OutgoingChangeForegroundColor.description = \u3053\u306E\u8272\u306F\u767A\u4FE1\u5909\u66F4\u3092\u3082\u3064\u30EA\u30BD\u30FC\u30B9\u306E\u524D\u666F\u8272\u3068\u3057\u3066\u4F7F\u308F\u308C\u307E\u3059\u3002 OutgoingChangeForegroundColor.label = \u767A\u4FE1\u5909\u66F4(\u524D\u666F) PasteRemoteAction.label = \u8CBC\u308A\u4ED8\u3051... PasteRemoteAction.tooltip = \u8CBC\u308A\u4ED8\u3051 PendingOperationsView.name = \u672A\u6C7A\u5B9A\u306ESVN\u64CD\u4F5C PreferenceKeywords.SVN = SVN PreferencePage.name = SVN RefreshFromLocal.label = \u30ED\u30FC\u30AB\u30EB SVN \u72B6\u614B\u304B\u3089\u66F4\u65B0(&R) RefreshFromLocal.tooltip = \u30EF\u30FC\u30AF\u30D9\u30F3\u30C1\u306E\u5916\u5074\u304B\u3089 SVN \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u52A0\u3048\u3089\u308C\u305F\u5909\u66F4\u3092\u53CD\u6620\u3057\u3066\u3001\u30EF\u30FC\u30AF\u30D9\u30F3\u30C1\u3092\u66F4\u65B0\u3057\u307E\u3059\u3002 RelocateAction.label = \u518D\u914D\u7F6E... RemoteResourcePropertiesAction.label = \u30D7\u30ED\u30D1\u30C6\u30A3 RemoveRootAction.label = \u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\u5EC3\u68C4(&L) RemoveRootAction.tooltip = \u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u5EC3\u68C4\u3057\u307E\u3059\u3002 ReplaceWithAction.label = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u304B\u3089\u6700\u65B0(&L) ReplaceWithAction.tooltip = SVN \u30B5\u30FC\u30D0\u30FC\u304B\u3089\u6700\u5F8C\u306B\u30B3\u30DF\u30C3\u30C8\u3055\u308C\u305F\u30B3\u30F3\u30C6\u30F3\u30C4\u3067\u7F6E\u63DB\u3057\u307E\u3059\u3002 ReplaceWithBaseAction.label = \u30D9\u30FC\u30B9\uFF65\u30EA\u30D3\u30B8\u30E7\u30F3(&B) ReplaceWithBaseAction.tooltip = \u30ED\u30FC\u30AB\u30EB\u306E\u30D9\u30FC\u30B9\u30FB\u30EA\u30D3\u30B8\u30E7\u30F3\u3068\u7F6E\u63DB ReplaceWithRevisionAction.label = \u30EA\u30D3\u30B8\u30E7\u30F3(&R)... ReplaceWithRevisionAction.tooltip = SVN \u30B5\u30FC\u30D0\u30FC\u4E0A\u306E\u30EA\u30D3\u30B8\u30E7\u30F3\u3068\u7F6E\u63DB\u3057\u307E\u3059\u3002 RepoPreference.Description = SVN\u30EA\u30DD\u30B8\u30C8\u30EA\u306E\u63A5\u7D9A\u60C5\u5831\u3092\u542B\u3080\u8A2D\u5B9A RepoPreference.Name = SVN\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC RepositoriesView.name = SVN \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC ResolveAction.label = \u89E3\u6C7A\u6E08\u307F\u306B\u30BB\u30C3\u30C8 ResolveAction.tooltip = \u72B6\u614B\u3092"\u89E3\u6C7A"\u306B\u3059\u308B(\u5168\u3066\u306E\u7AF6\u5408\u306F\u4FEE\u6B63\u3055\u308C\u307E\u3059) RestoreFromRepositoryAction.label = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u304B\u3089\u5FA9\u5143(&R)... RestoreFromRepositoryAction.tooltip = \u30EA\u30E2\u30FC\u30C8\u30FB\u30D5\u30A9\u30EB\u30C0\u30FC\u304B\u3089\u524A\u9664\u3055\u308C\u305F\u30EA\u30BD\u30FC\u30B9\u3092\u5FA9\u5143\u3057\u307E\u3059\u3002 RevertAction.label = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u304B\u3089\u5FA9\u5143(&R)... RevertAction.tooltip = \u5143\u306E\u30EF\u30FC\u30AD\u30F3\u30B0\u30B3\u30D4\u30FC\u30D5\u30A1\u30A4\u30EB\u3092\u5FA9\u5143\u3059\u308B\u3002(\u5168\u3066\u306E\u30ED\u30FC\u30AB\u30EB\u306E\u7DE8\u96C6\u3092\u53D6\u308A\u6D88\u3057\u307E\u3059) RevertCommand.label = \u5FA9\u5143 SVN = SVN SVNActionSet.categoryName = SVN SVNActionSet.description = SVN \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306E\u64CD\u4F5C\u306B\u95A2\u3059\u308B\u30A2\u30AF\u30B7\u30E7\u30F3 SVNActionSet.label = SVN SVNActionSet.newLabel = SVN \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306E\u8FFD\u52A0 SVNActionSet.newTooltip = SVN \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306E\u8FFD\u52A0 SVNActionSet.syncLabel = SVN\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u540C\u671F\u5316 SVNActionSet.syncTooltip = SVN\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u540C\u671F\u5316\u3057\u307E\u3059\u3002 SVNCompareParticipant = SVN \u6BD4\u8F03 SVNConflictFilter.description = SVN\u7AF6\u5408\u72B6\u614B\u3067\u306A\u3044\u8981\u7D20\u3092\u96A0\u3059 SVNConflictFilter.name = SVN \u975E\u7AF6\u5408 SVNConsoleFont.description = SVN \u30B3\u30F3\u30BD\u30FC\u30EB\u306E\u30D5\u30A9\u30F3\u30C8\u3067\u3059\u3002 SVNConsoleFont.label = SVN \u30B3\u30F3\u30BD\u30FC\u30EB\u30FB\u30D5\u30A9\u30F3\u30C8 SVNGroupMenu.label = SVN(&V) SVNMergeParticipant = SVN \u30DE\u30FC\u30B8 SVNRemoteQuickDiffProvider.label = \u6700\u65B0 SVN \u30EA\u30D3\u30B8\u30E7\u30F3(&L) SVNRepositoryExploring = SVN \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30A8\u30AF\u30B9\u30D7\u30ED\u30FC\u30E9\u30FC SVNWorkspaceParticipant = SVN SaveSVNPropertyAction.label = \u30D7\u30ED\u30D1\u30C6\u30A3\u5024\u306E\u4FDD\u5B58 SaveSVNPropertyAction.tooltip = \u9078\u629E\u3055\u308C\u305F\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u5024\u3092\u30D5\u30A1\u30A4\u30EB\u3078\u4FDD\u5B58\u3057\u307E\u3059\u3002 SetSvnProperty.label = \u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u8A2D\u5B9A... SetSvnProperty.tooltip = \u9078\u629E\u3055\u308C\u305F\u30EA\u30BD\u30FC\u30B9\u306B\u5BFE\u3057\u3066\u65B0\u3057\u3044SVN\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u8A2D\u5B9A\u3057\u307E\u3059\u3002 SharingWizard.name = SVN ShowAnnotationAction.label = \u6CE8\u91C8\u306E\u8868\u793A(&A) ShowAnnotationAction.tooltip = \u6CE8\u91C8\u3092\u8868\u793A ShowDifferencesAsUnifiedDiffAction.label = \u30E6\u30CB\u30D5\u30A1\u30A4\u30C9Diff\u30D5\u30A1\u30A4\u30EB\u3092\u4F5C\u6210 ShowHistoryAction.label = \u30D2\u30B9\u30C8\u30EA\u30FC\u3092\u8868\u793A(&H) ShowHistoryAction.tooltip = \u30D2\u30B9\u30C8\u30EA\u30FC\u3092\u8868\u793A ShowPendingOperationsAction.label = \u672A\u6C7A\u5B9A\u306E\u64CD\u4F5C\u3092\u8868\u793A ShowPendingOperationsAction.tooltip = \u30B3\u30DF\u30C3\u30C8\u304C\u5FC5\u8981\u306A\u30EA\u30BD\u30FC\u30B9\u3092\u8868\u793A\u3057\u307E\u3059\u3002 ShowSvnPropertiesAction.label = \u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u8868\u793A ShowSvnPropertiesAction.tooltip = \u9078\u629E\u3055\u308C\u305F\u30EA\u30BD\u30FC\u30B9\u306ESVN\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u8868\u793A\u3057\u307E\u3059\u3002 SvnPropertiesView.name = SVN\u30D7\u30ED\u30D1\u30C6\u30A3 SwitchAction.label = \u5225\u306E\u30D6\u30E9\u30F3\u30C1/\u30BF\u30B0\u306B\u5207\u308A\u63DB\u3048(&S)... SwitchAction.tooltip = \u5207\u308A\u63DB\u3048 Synchronize.tooltip = \u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u30FB\u30EA\u30BD\u30FC\u30B9\u3092\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u5185\u306E\u30EA\u30BD\u30FC\u30B9\u3068\u540C\u671F\u5316\u3057\u307E\u3059\u3002 SynchronizeAction.label = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u3068\u540C\u671F\u5316(&S) SynchronizeAction.tooltip = \u30EA\u30DD\u30B8\u30C8\u30EA\u3068\u540C\u671F\u5316\u3057\u307E\u3059\u3002 SynchronizeCommand.label = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u3068\u540C\u671F\u5316 SynchronizeOutgoing.label = \u767A\u4FE1\u5909\u66F4\u306E\u540C\u671F\u5316(&Y)... SynchronizeOutgoing.tooltip = \u767A\u4FE1\u5909\u66F4\u3092\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u3068\u540C\u671F\u5316\u3057\u307E\u3059\u3002 UnlockAction.label = \u30ED\u30C3\u30AF\u89E3\u9664 UnlockAction.tooltip = \u9078\u629E\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u306E\u30ED\u30C3\u30AF\u3092\u89E3\u9664\u3057\u307E\u3059\u3002 UnmanageFolder.label = \u5207\u65AD(&D)... UnmanageFolder.tooltip = SVN \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u304B\u3089\u5207\u65AD\u3057\u307E\u3059\u3002 UpdateAction.label = \u66F4\u65B0(&U)... UpdateAction.tooltip = \u66F4\u65B0 UpdateCommand.label = \u66F4\u65B0 WatchEditPreferencePage.name = \u76E3\u8996/\u7DE8\u96C6 commitCommentFont.description = SVN\u30B3\u30DF\u30C3\u30C8\u30FB\u30B3\u30E1\u30F3\u30C8\u306E\u30D5\u30A9\u30F3\u30C8 commitCommentFont.label = SVN\u30B3\u30DF\u30C3\u30C8\u30FB\u30B3\u30E1\u30F3\u30C8\u30FB\u30D5\u30A9\u30F3\u30C8 conflictMarker = SVN\u7AF6\u5408 deletesvnpropertyaction.label = \u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u524A\u9664 deletesvnpropertyaction.tooltip = \u9078\u629E\u3055\u308C\u305FSVN\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u524A\u9664\u3057\u307E\u3059\u3002 extmethodpreferencepage.name = ext\u63A5\u7D9A\u65B9\u6CD5 generatediff.label = \u30D1\u30C3\u30C1\u306E\u4F5C\u6210(&P)... generatediff.tooltip = \u3054\u4F7F\u7528\u306E\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u5185\u5BB9\u3092\u30B5\u30FC\u30D0\u30FC\u3068\u6BD4\u8F03\u3057\u3066\u3001\u30D1\u30C3\u30C1\u30FB\u30D5\u30A1\u30A4\u30EB\u3068\u3057\u3066\u4F7F\u7528\u3067\u304D\u308B diff \u30D5\u30A1\u30A4\u30EB\u3092\u751F\u6210\u3057\u307E\u3059\u3002 historyfilter.label = \u30D2\u30B9\u30C8\u30EA\u30FC\u306E\u30D5\u30A3\u30EB\u30BF\u30FC(&F) historyfilter.tooltip = \u30D2\u30B9\u30C8\u30EA\u30FC\u306E\u30D5\u30A3\u30EB\u30BF\u30FC historyview.name = SVN\u30EA\u30BD\u30FC\u30B9\u30FB\u30D2\u30B9\u30C8\u30EA\u30FC pluginName = SVN \u30C1\u30FC\u30E0\u30FB\u30D7\u30ED\u30D0\u30A4\u30C0\u30FC\u306E UI providerName = tigris.org repositoryView.name = SVN\u30EA\u30DD\u30B8\u30C8\u30EA svnPropertyPage.name = Subversion svnQuickDiff.label = \u5143\u306ESVN\u30B3\u30D4\u30FC syncWizard.description = SVN\u3067\u7BA1\u7406\u3055\u308C\u3066\u3044\u308B\u30D5\u30A1\u30A4\u30EB\u306B\u540C\u671F\u5316 syncWizard.name = SVN themeCategory = SVN viewCategory = SVN eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/plugin_zh.properties000066400000000000000000000355521203611042400302330ustar00rootroot00000000000000#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) #****************************************************************************** # Copyright (c) 2005, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ #Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) #Translated by fcoffee. AddAction.label = \u6DFB\u52A0\u81F3\u7248\u672C\u63A7\u5236(&A) AddAction.tooltip = \u5C06\u9009\u62E9\u7684\u8D44\u6E90\u6DFB\u52A0\u81F3\u7248\u672C\u63A7\u5236 AddCommand.label = \u6DFB\u52A0\u81F3\u7248\u672C\u63A7\u5236 AddKeywords.label = \u6DFB\u52A0\u5173\u952E\u5B57... AddKeywords.tooltip = \u4FEE\u6539\u9009\u62E9\u8D44\u6E90\u7684 svn:keywords \u5C5E\u6027 AddToWorkspaceAction.label = \u68C0\u51FA\u4E3A\u9879\u76EE(&C) AddToWorkspaceAction.tooltip = \u4ECE\u8D44\u6E90\u5E93\u68C0\u51FA\u6587\u4EF6\u5939\u81F3\u5DE5\u4F5C\u7A7A\u95F4 AnnotateAction.label = \u6CE8\u91CA... AnnotateView.name = SVN \u6CE8\u91CA BranchTagAction.label = \u5206\u652F\uFF0F\u6807\u8BB0... BranchTagAction.tooltip = \u5206\u652F\uFF0F\u6807\u8BB0... CheckoutAction.label = \u68C0\u51FA\u6A21\u5757(&M) CheckoutAction.tooltip = \u5C06\u6A21\u5757\u4ECE\u8D44\u6E90\u5E93\u68C0\u51FA\u81F3\u5DE5\u4F5C\u7A7A\u95F4\u4E2D CheckoutAsAction.label = \u68C0\u51FA\u4E3A(&A)... CheckoutAsAction.tooltip = \u5C06\u6587\u4EF6\u5939\u4ECE\u8D44\u6E90\u5E93\u68C0\u51FA\u81F3\u5DE5\u4F5C\u7A7A\u95F4\u4E2D\u7684\u6307\u5B9A\u76EE\u5F55\u3002 CheckoutAsProjectIntoAction.label = \u68C0\u51FA\u9879\u76EE\u81F3(&C)... CheckoutCommand.label = \u68C0\u51FA CheckoutIntoAction.label = \u68C0\u51FA\u81F3(&I)... CheckoutIntoAction.tooltip = \u5C06\u6587\u4EF6\u5939\u4ECE\u8D44\u6E90\u5E93\u68C0\u51FA\u81F3\u5DE5\u4F5C\u7A7A\u95F4\u5DF2\u6709\u76EE\u5F55\u4E2D\u3002 CheckoutWizard.desc = \u901A\u8FC7\u4ECE SVN \u8D44\u6E90\u5E93\u4E2D\u68C0\u51FA\u5DF2\u6709\u9879\u76EE\u6765\u521B\u5EFA\u65B0\u9879\u76EE\u3002 CheckoutWizard.label = \u4ECE SVN \u68C0\u51FA\u9879\u76EE CheckoutWizard.name = \u4ECE SVN \u68C0\u51FA\u9879\u76EE CheckoutWizard.tooltip = \u4ECE SVN \u68C0\u51FA CleanupAction.label = \u6E05\u7406 CleanupAction.tooltip = \u6E05\u7406\u672A\u63D0\u4EA4\u7684\u4E8B\u52A1 CommentTemplatesPreferencePage.name = \u6CE8\u91CA\u6A21\u677F CommitAction.label = \u63D0\u4EA4(&C)... CommitAction.tooltip = \u63D0\u4EA4 CommitCommand.label = \u63D0\u4EA4 CompareDialog.compareFailed = \u6BD4\u8F83\u5931\u8D25\u3002 CompareDialog.noDifferences = \u6CA1\u6709\u4EFB\u4F55\u5DEE\u5F02\u3002 CompareRemoteResourcesAction.label = \u6BD4\u8F83(&P) CompareRemoteResourcesAction.tooltip = \u5C06\u8FDC\u7A0B\u8D44\u6E90\u4E92\u76F8\u6BD4\u8F83 CompareWithBaseAction.label = \u57FA\u672C\u4FEE\u8BA2\u7248(&B) CompareWithBaseAction.tooltip = \u4E0E\u672C\u5730\u57FA\u672C\u4FEE\u8BA2\u7248\u8FDB\u884C\u6BD4\u8F83 CompareWithBranchTagAction.label = \u5206\u652F\uFF0F\u6807\u8BB0... CompareWithHeadAction.label = \u8D44\u6E90\u5E93\u4E2D\u7684\u6700\u65B0\u5185\u5BB9(&L) CompareWithHeadAction.tooltip = \u4E0E SVN \u670D\u52A1\u5668\u4E0A\u7684\u5185\u5BB9\u8FDB\u884C\u6BD4\u8F83 CompareWithPreviousAction.label = \u8D44\u6E90\u5E93\u4E2D\u8F83\u65E9\u7684\u7248\u672C(&P) CompareWithPreviousAction.tooltip = \u4E0E SVN \u670D\u52A1\u5668\u4E0A\u8F83\u65E9\u7684\u7248\u672C\u8FDB\u884C\u6BD4\u8F83 CompareWithRevisionAction.label = \u4FEE\u8BA2\u7248(&R)... CompareWithRevisionAction.tooltip = \u4E0E SVN \u670D\u52A1\u5668\u4E0A\u7684\u4FEE\u8BA2\u7248\u8FDB\u884C\u6BD4\u8F83 ConfigureTagsAction.label = \u914D\u7F6E\u5206\u652F\uFF0F\u6807\u8BB0 Console.name = SVN \u63A7\u5236\u53F0 ConsolePreferencePage.name = \u63A7\u5236\u53F0 ContentAction.label = \u6BD4\u8F83\u6587\u4EF6\u5185\u5BB9 ContentAction.tooltip = \u5728\u6BD4\u8F83\u65F6\u4F7F\u7528\u6587\u4EF6\u5185\u5BB9\u800C\u4E0D\u662F\u65F6\u95F4\u6233\u8BB0 ConvertNature.label = \u5C06\u63D0\u4F9B\u7A0B\u5E8F\u4ECE\u6027\u8D28\u8F6C\u6362 ConvertNature.tooltip = \u5C06 SVN \u9879\u76EE\u4ECE\u4F7F\u7528\u6027\u8D28\u8F6C\u6362\u4E3A\u4F7F\u7528\u5C5E\u6027 CopyAction.label = \u590D\u5236... CopyAction.tooltip = \u590D\u5236\u9009\u62E9\u7684\u8D44\u6E90 CopyCommand.label = \u590D\u5236... CopyRemoteAction.label = \u590D\u5236 CopyRemoteAction.tooltip = \u590D\u5236\u8FDC\u7A0B\u8D44\u6E90 CopyRepositoryNameAction.label = \u590D\u5236\u5230\u526A\u8D34\u677F(&C) CopyRepositoryNameAction.tooltip = \u5C06\u8D44\u6E90\u5E93\u540D\u79F0\u590D\u5236\u5230\u526A\u8D34\u677F CopyUrlToClipboardAction.label = \u5C06 URL \u590D\u5236\u5230\u526A\u8D34\u677F CreateRemoteFolderAction.label = \u8FDC\u7A0B\u6587\u4EF6\u5939 CreateRemoteFolderAction.tooltip = \u521B\u5EFA\u65B0\u7684\u6587\u4EF6\u5939\u81F3\u8D44\u6E90\u5E93\u4E2D DecoratorPreferencePage.name = \u6807\u7B7E\u4FEE\u9970 DecoratorStandard.desc = \u663E\u793A\u6709\u5173\u9879\u76EE\u4E2D\u53D7 SVN \u63A7\u5236\u7684\u8D44\u6E90\u7684\u7279\u5B9A\u4E8E SVN \u7684\u4FE1\u606F\u3002\u8FD9\u4E9B\u4FE1\u606F\u5305\u62EC\u4FEE\u8BA2\u7248\u53F7\u3001\u5206\u652F\u6216\u7248\u672C\u540D\u7B49\u7B49\u3002\u8981\u5B9A\u5236 SVN \u4FEE\u9970\u7B26\uFF0C\u8F6C\u81F3\u201C\u5C0F\u7EC4\u201D>\u201CSVN\u201D>\u201C\u6807\u7B7E\u4FEE\u9970\u201D\u3002 DecoratorStandard.name = SVN DeleteRemoteAction.label = \u5220\u9664... DeleteRemoteAction.tooltip = \u5220\u9664\u8FDC\u7A0B\u8D44\u6E90 DeleteSVNPropertyAction.label = \u5220\u9664\u5C5E\u6027 DeleteSVNPropertyAction.tooltip = \u5220\u9664\u9009\u62E9\u7684 SVN \u5C5E\u6027 DiffMergePreferencePage.name = \u6BD4\u8F83\uFF0F\u5408\u5E76 EditConflictsAction.label = \u7F16\u8F91\u51B2\u7A81 EditConflictsAction.tooltip = \u4F7F\u7528\u5916\u90E8\u7684\u5408\u5E76\u7A0B\u5E8F\u89E3\u51B3\u51B2\u7A81 ExportAction.label = \u5BFC\u51FA... ExportRemoteFolderAction.label = \u5BFC\u51FA... IgnoreAction.label = \u6DFB\u52A0\u81F3 svn:ignore (&D) IgnoreAction.tooltip = \u8FDB\u884C\u540C\u6B65\u65F6\u5FFD\u7565\u9009\u62E9\u7684\u8D44\u6E90 IgnoreCommand.label = \u6DFB\u52A0\u5230 svn:ignore IgnoredResourceBackgroundColor.description = \u8FD9\u4E2A\u989C\u8272\u7528\u4E8E\u88AB SVN \u5FFD\u7565\u8D44\u6E90\u7684\u80CC\u666F\u8272\u3002 IgnoredResourceBackgroundColor.label = \u5FFD\u7565\u7684\u8D44\u6E90\uFF08\u80CC\u666F\uFF09 IgnoredResourceFont.description = \u8FD9\u4E2A\u5B57\u4F53\u7528\u4E8E\u663E\u793A\u88AB SVN \u5FFD\u7565\u7684\u8D44\u6E90\u3002 IgnoredResourceFont.label = \u5FFD\u7565\u7684\u8D44\u6E90\u5B57\u4F53 IgnoredResourceForegroundColor.description = \u8FD9\u4E2A\u989C\u8272\u7528\u4E8E\u88AB SVN \u5FFD\u7565\u8D44\u6E90\u7684\u524D\u666F\u8272\u3002 IgnoredResourceForegroundColor.label = \u5FFD\u7565\u7684\u8D44\u6E90\uFF08\u524D\u666F\uFF09 ImportFolderAction.label = \u5BFC\u5165... LockAction.label = \u9501\u5B9A LockAction.tooltip = \u9501\u5B9A\u9009\u62E9\u7684\u6587\u4EF6 MarkDeletedAction.label = \u6807\u8BB0\u4E3A\u5220\u9664 MenuIconsPreferencePage.name = \u83DC\u5355\u56FE\u6807 MergeAction.label = \u5408\u5E76(&M)... MergeAction.tooltip = \u5408\u5E76 ModifySVNPropertyAction.label = \u4FEE\u6539\u5C5E\u6027 ModifySVNPropertyAction.tooltip = \u4FEE\u6539 svn \u5C5E\u6027 MoveRemoteAction.label = \u91CD\u547D\u540D\uFF0F\u79FB\u52A8... MoveRemoteAction.tooltip = \u91CD\u547D\u540D\u6216\u79FB\u52A8\u8FDC\u7A0B\u8D44\u6E90 OpenLogEntryAction.label = \u6253\u5F00(&O) OpenLogEntryAction.tooltip = \u6253\u5F00\u8FDC\u7A0B\u6587\u4EF6 OpenRemoteFileAction.label = \u6253\u5F00(&O) OpenRemoteFileAction.tooltip = \u6253\u5F00\u8FDC\u7A0B\u6587\u4EF6 OutgoingChangeBackgroundColor.description = \u8FD9\u4E2A\u7528\u4E8E\u5177\u6709\u4F20\u51FA\u66F4\u6539\u7684\u8D44\u6E90\u7684\u80CC\u666F\u8272\u3002 OutgoingChangeBackgroundColor.label = \u4F20\u51FA\u66F4\u6539\uFF08\u80CC\u666F\uFF09 OutgoingChangeFont.description = \u8FD9\u4E2A\u5B57\u4F53\u7528\u4E8E\u663E\u793A\u4F20\u51FA\u66F4\u6539\u3002 OutgoingChangeFont.label = \u4F20\u51FA\u66F4\u6539\u5B57\u4F53 OutgoingChangeForegroundColor.description = \u8FD9\u4E2A\u7528\u4E8E\u5177\u6709\u4F20\u51FA\u66F4\u6539\u7684\u8D44\u6E90\u7684\u524D\u666F\u8272\u3002 OutgoingChangeForegroundColor.label = \u4F20\u51FA\u66F4\u6539\uFF08\u524D\u666F\uFF09 PasteRemoteAction.label = \u7C98\u8D34... PasteRemoteAction.tooltip = \u7C98\u8D34 PendingOperationsView.name = \u672A\u843D\u5B9E\u7684 SVN \u64CD\u4F5C PreferenceKeywords.SVN = SVN PreferencePage.name = SVN RefreshFromLocal.label = \u4ECE\u672C\u5730 SVN \u72B6\u6001\u5237\u65B0(&R) RefreshFromLocal.tooltip = \u5229\u7528\u5728\u5DE5\u4F5C\u53F0\u5916\u90E8\u5BF9 SVN \u9879\u76EE\u6240\u505A\u7684\u66F4\u6539\u6765\u5237\u65B0\u5DE5\u4F5C\u53F0\u3002 RelocateAction.label = \u91CD\u65B0\u5B9A\u4F4D... RemoteResourcePropertiesAction.label = \u5C5E\u6027 RemoveRootAction.label = \u5E9F\u5F03\u4F4D\u7F6E(&L) RemoveRootAction.tooltip = \u5E9F\u5F03\u4F4D\u7F6E ReplaceWithAction.label = \u8D44\u6E90\u5E93\u4E2D\u7684\u6700\u65B0\u5185\u5BB9(&L) ReplaceWithAction.tooltip = \u7528 SVN \u670D\u52A1\u5668\u4E0A\u6700\u65B0\u7684\u5185\u5BB9\u8FDB\u884C\u66FF\u6362 ReplaceWithBaseAction.label = \u57FA\u672C\u4FEE\u8BA2\u7248 ReplaceWithBaseAction.tooltip = \u7528\u672C\u5730\u57FA\u672C\u4FEE\u8BA2\u7248\u8FDB\u884C\u66FF\u6362 ReplaceWithRevisionAction.label = \u4FEE\u8BA2\u7248(&R)... ReplaceWithRevisionAction.tooltip = \u7528 SVN \u670D\u52A1\u5668\u4E0A\u7684\u4FEE\u8BA2\u7248\u8FDB\u884C\u66FF\u6362 RepoPreference.Description = SVN \u8D44\u6E90\u5E93\u8FDE\u63A5\u53CA\u5176\u5B83\u76F8\u5173\u9009\u9879 RepoPreference.Name = SVN \u8D44\u6E90\u5E93 RepositoriesView.name = SVN \u8D44\u6E90\u5E93 ResolveAction.label = \u6807\u8BB0\u4E3A\u89E3\u51B3 ResolveAction.tooltip = \u8BBE\u7F6E\u72B6\u6001\u4E3A \u201Cresolved\u201D\uFF08\u5DF2\u89E3\u51B3\u6240\u6709\u51B2\u7A81\uFF09 RestoreFromRepositoryAction.label = \u4ECE\u8D44\u6E90\u5E93\u590D\u539F(&R)... RestoreFromRepositoryAction.tooltip = \u590D\u539F\u5DF2\u4ECE\u8FDC\u7A0B\u6587\u4EF6\u5939\u5220\u9664\u7684\u8D44\u6E90\u3002 RevertAction.label = \u8FD8\u539F... RevertAction.tooltip = \u8FD8\u539F\u5230\u539F\u59CB\u5DE5\u4F5C\u590D\u672C\uFF08\u64A4\u6D88\u6240\u6709\u672C\u5730\u7F16\u8F91\uFF09 RevertCommand.label = \u590D\u539F SVN = SVN SVNActionSet.categoryName = SVN SVNActionSet.description = \u4F7F\u7528 SVN \u8D44\u6E90\u5E93\u65F6\u5E94\u7528\u7684\u64CD\u4F5C SVNActionSet.label = SVN SVNActionSet.newLabel = \u6DFB\u52A0 SVN \u8D44\u6E90\u5E93 SVNActionSet.newTooltip = \u6DFB\u52A0 SVN \u8D44\u6E90\u5E93 SVNActionSet.syncLabel = \u540C\u6B65 SVN \u9879\u76EE SVNActionSet.syncTooltip = \u540C\u6B65 SVN \u9879\u76EE SVNCompareParticipant = SVN \u6BD4\u8F83 SVNConflictFilter.description = \u5F53\u4E0D\u5728 SVN \u51B2\u7A81\u72B6\u6001\u65F6\u9690\u85CF\u5143\u7D20 SVNConflictFilter.name = SVN \u975E\u51B2\u7A81 SVNConsoleFont.description = SVN \u63A7\u5236\u53F0\u7684\u5B57\u4F53\u3002 SVNConsoleFont.label = SVN \u63A7\u5236\u53F0\u5B57\u4F53 SVNGroupMenu.label = S&VN SVNMergeParticipant = SVN \u5408\u5E76 SVNRemoteQuickDiffProvider.label = \u6700\u65B0\u7684 SVN \u4FEE\u8BA2(&L) SVNRepositoryExploring = SVN \u8D44\u6E90\u5E93\u7814\u7A76 SVNWorkspaceParticipant = SVN SaveSVNPropertyAction.label = \u4FDD\u5B58\u5C5E\u6027\u503C SaveSVNPropertyAction.tooltip = \u4FDD\u5B58\u9009\u62E9\u5C5E\u6027\u7684\u503C\u81F3\u6587\u4EF6 SetSvnProperty.label = \u8BBE\u7F6E\u5C5E\u6027... SetSvnProperty.tooltip = \u4E3A\u9009\u62E9\u7684\u8D44\u6E90\u8BBE\u7F6E\u65B0\u7684 SVN \u5C5E\u6027 SharingWizard.name = SVN ShowAnnotationAction.label = \u663E\u793A\u6CE8\u91CA(&A) ShowAnnotationAction.tooltip = \u663E\u793A\u6CE8\u91CA ShowDifferencesAsUnifiedDiffAction.label = \u521B\u5EFA\u5355\u4E00\u5DEE\u5F02\u6587\u4EF6 ShowHistoryAction.label = \u663E\u793A\u8D44\u6E90\u5386\u53F2\u8BB0\u5F55(&H) ShowHistoryAction.tooltip = \u663E\u793A\u8D44\u6E90\u5386\u53F2\u8BB0\u5F55 ShowPendingOperationsAction.label = \u663E\u793A\u672A\u843D\u5B9E\u7684\u64CD\u4F5C ShowPendingOperationsAction.tooltip = \u663E\u793A\u9700\u8981\u63D0\u4EA4\u7684\u8D44\u6E90 ShowSvnPropertiesAction.label = \u663E\u793A\u5C5E\u6027 ShowSvnPropertiesAction.tooltip = \u663E\u793A\u9009\u62E9\u8D44\u6E90\u7684 SVN \u5C5E\u6027 SvnPropertiesView.name = SVN \u5C5E\u6027 SwitchAction.label = \u5207\u6362(&S)... SwitchAction.tooltip = \u5207\u6362 Synchronize.tooltip = \u5C06\u5DE5\u4F5C\u7A7A\u95F4\u7684\u8D44\u6E90\u4E0E\u8D44\u6E90\u5E93\u540C\u6B65 SynchronizeAction.label = \u4E0E\u8D44\u6E90\u5E93\u540C\u6B65(&S) SynchronizeAction.tooltip = \u4E0E\u8D44\u6E90\u5E93\u540C\u6B65 SynchronizeCommand.label = \u4E0E\u8D44\u6E90\u5E93\u540C\u6B65 SynchronizeOutgoing.label = \u540C\u6B65\u4F20\u51FA\u66F4\u6539(&Y)... SynchronizeOutgoing.tooltip = \u4E0E\u8D44\u6E90\u5E93\u540C\u6B65\u4F20\u51FA\u66F4\u6539 UnlockAction.label = \u89E3\u9501 UnlockAction.tooltip = \u89E3\u9664\u5BF9\u9009\u62E9\u6587\u4EF6\u7684\u9501\u5B9A UnmanageFolder.label = \u65AD\u5F00\u8FDE\u63A5(&D)... UnmanageFolder.tooltip = \u4ECE SVN \u8D44\u6E90\u5E93\u65AD\u5F00\u8FDE\u63A5 UpdateAction.label = \u66F4\u65B0(&U) UpdateAction.tooltip = \u66F4\u65B0 UpdateCommand.label = \u66F4\u65B0 WatchEditPreferencePage.name = \u67E5\u770B\uFF0F\u7F16\u8F91 commitCommentFont.description = SVN \u63D0\u4EA4\u6CE8\u91CA\u7684\u5B57\u4F53\u3002 commitCommentFont.label = SVN \u63D0\u4EA4\u6CE8\u91CA\u5B57\u4F53 conflictMarker = SVN \u51B2\u7A81 deletesvnpropertyaction.label = \u5220\u9664\u5C5E\u6027 deletesvnpropertyaction.tooltip = \u5220\u9664\u9009\u62E9\u7684 SVN \u5C5E\u6027 extmethodpreferencepage.name = Ext \u8FDE\u63A5\u65B9\u6CD5 generatediff.label = \u521B\u5EFA\u8865\u4E01(&P)... generatediff.tooltip = \u5C06\u5DE5\u4F5C\u7A7A\u95F4\u5185\u5BB9\u4E0E\u670D\u52A1\u5668\u8FDB\u884C\u6BD4\u8F83\u5E76\u751F\u6210\u53EF\u7528\u4F5C\u8865\u4E01\u6587\u4EF6\u7684\u5DEE\u5F02\u6587\u4EF6\u3002 historyfilter.label = \u8FC7\u6EE4\u5386\u53F2\u8BB0\u5F55(&F) historyfilter.tooltip = \u8FC7\u6EE4\u5386\u53F2\u8BB0\u5F55 historyview.name = SVN \u8D44\u6E90\u5386\u53F2\u8BB0\u5F55 pluginName = SVN \u5C0F\u7EC4\u63D0\u4F9B\u7A0B\u5E8F\u7528\u6237\u754C\u9762 providerName = tigris.org repositoryView.name = SVN \u8D44\u6E90\u5E93 svnPropertyPage.name = SVN \u7248\u672C\u63A7\u5236 svnQuickDiff.label = \u539F\u59CB SVN \u590D\u672C syncWizard.description = \u4F7F\u5DE5\u4F5C\u7A7A\u95F4\u4E2D\u7684\u8D44\u6E90\u4E0E\u5B83\u4EEC\u76F8\u5173\u8054\u7684\u8FDC\u7A0B SVN \u8D44\u6E90\u5E93\u540C\u6B65\u3002 syncWizard.name = SVN themeCategory = SVN viewCategory = SVN eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/plugin_zh_TW.properties000066400000000000000000000351451203611042400306430ustar00rootroot00000000000000#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) #****************************************************************************** # Copyright (c) 2005, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ #Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) AddAction.label = \u65B0\u589E\u81F3\u7248\u672C\u63A7\u5236(&A) AddAction.tooltip = \u5C07\u9078\u53D6\u7684\u8CC7\u6E90\u52A0\u5165\u5230\u7248\u672C\u63A7\u5236\u7CFB\u7D71\u4E2D AddCommand.label = \u52A0\u5165\u81F3\u7248\u672C\u63A7\u5236 AddKeywords.label = \u65B0\u589E\u95DC\u9375\u5B57 AddKeywords.tooltip = \u4FEE\u6539\u6240\u9078\u53D6\u8CC7\u6E90\u7684 svn:keywords \u5C6C\u6027 AddToWorkspaceAction.label = \u53D6\u51FA\u70BA\u5C08\u6848(&C) AddToWorkspaceAction.tooltip = \u81EA\u6A94\u6848\u5EAB\u4E2D\u53D6\u56DE\u8CC7\u6599\u593E\u65B0\u589E\u81F3\u5DE5\u4F5C\u5340 AnnotateAction.label = \u8A3B\u91CB... AnnotateView.name = SVN \u8A3B\u91CB BranchTagAction.label = \u5206\u652F/\u6A19\u8A18 BranchTagAction.tooltip = \u5206\u652F/\u6A19\u8A18 CheckoutAction.label = \u53D6\u51FA\u6A21\u7D44 CheckoutAction.tooltip = \u5C07\u6A21\u7D44\u81EA\u6A94\u6848\u5EAB\u53D6\u51FA\u81F3\u5DE5\u4F5C\u5340\u4E2D CheckoutAsAction.label = \u53D6\u51FA\u70BA(&A)... CheckoutAsAction.tooltip = \u5C07\u8CC7\u6599\u593E\u81EA\u6A94\u6848\u5EAB\u53D6\u51FA\u81F3\u5DE5\u4F5C\u5340\u4E2D\u7684\u7279\u5B9A\u76EE\u6A19\u4E2D\u3002 CheckoutAsProjectIntoAction.label = \u53D6\u51FA\u5C08\u6848\u5230(&C)... CheckoutCommand.label = \u53D6\u51FA CheckoutIntoAction.label = \u53D6\u51FA\u5230(&I)... CheckoutIntoAction.tooltip = \u5C07\u8CC7\u6599\u593E\u81EA\u6A94\u6848\u5EAB\u53D6\u5230\u5230\u5DE5\u4F5C\u5340\u4E2D\u5DF2\u5B58\u5728\u7684\u76EE\u9304\u4E2D CheckoutWizard.desc = \u81EA SVN \u6A94\u6848\u5EAB\u4E2D\u53D6\u56DE\u5DF2\u5B58\u5728\u7684\u5C08\u6848\uFF0C\u65B0\u589E\u81F3\u5DE5\u4F5C\u5340\u4E2D\u3002 CheckoutWizard.label = \u7531 SVN \u53D6\u51FA\u5C08\u6848 CheckoutWizard.name = \u81EA SVN \u53D6\u56DE\u5C08\u6848 CheckoutWizard.tooltip = \u5F9E SVN \u53D6\u51FA\u5C08\u6848 CleanupAction.label = \u6E05\u7406 CleanupAction.tooltip = \u6E05\u7406\u672A\u9001\u4EA4\u7684\u66F4\u52D5 CommentTemplatesPreferencePage.name = \u8A3B\u91CB\u6A23\u677F CommitAction.label = \u9001\u4EA4(&C)... CommitAction.tooltip = \u9001\u4EA4 CommitCommand.label = \u9001\u51FA CompareDialog.compareFailed = \u6BD4\u8F03\u5931\u6557 CompareDialog.noDifferences = \u6C92\u6709\u767C\u73FE\u4EFB\u4F55\u5DEE\u7570 CompareRemoteResourcesAction.label = \u6BD4\u8F03(&P) CompareRemoteResourcesAction.tooltip = \u5C07\u9078\u53D6\u7684\u8CC7\u6E90\u8207\u6A94\u6848\u5EAB\u4E2D\u7248\u672C\u9032\u884C\u6BD4\u8F03 CompareWithBaseAction.label = \u57FA\u790E\u7248\u672C(&B) CompareWithBaseAction.tooltip = \u8207\u672C\u5730\u7AEF\u57FA\u790E\u7248\u672C\u9032\u884C\u6BD4\u8F03 CompareWithBranchTagAction.label = \u5206\u652F/\u6A19\u8A18 CompareWithHeadAction.label = \u6A94\u6848\u5EAB\u4E2D\u7684\u6700\u65B0\u7248\u672C(&L) CompareWithHeadAction.tooltip = \u8207SVN\u6A94\u6848\u5EAB\u4E0A\u7684\u5167\u5BB9\u9032\u884C\u6BD4\u8F03 CompareWithPreviousAction.label = \u6A94\u6848\u5EAB\u4E2D\u8F03\u65E9\u7684\u7248\u672C(&P) CompareWithPreviousAction.tooltip = \u8207SVN\u6A94\u6848\u5EAB\u4E2D\u8F03\u65E9\u7684\u7248\u672C\u9032\u884C\u6BD4\u8F03 CompareWithRevisionAction.label = \u4FEE\u8A02\u7248\u672C(&R) CompareWithRevisionAction.tooltip = \u8207SVN\u6A94\u6848\u5EAB\u4E0A\u7684\u4FEE\u8A02\u7248\u672C\u9032\u884C\u6BD4\u8F03 ConfigureTagsAction.label = \u8A2D\u5B9A\u5206\u652F/\u6A19\u8A18 Console.name = SVN \u7D42\u7AEF\u6A5F ConsolePreferencePage.name = \u7D42\u7AEF\u6A5F ContentAction.label = \u6BD4\u8F03\u6A94\u6848\u5167\u5BB9 ContentAction.tooltip = \u6BD4\u8F03\u6642\u4F7F\u7528\u6A94\u6848\u5167\u5BB9\u800C\u4E0D\u662F\u6642\u9593\u6A19\u8A18 ConvertNature.label = \u5C07\u63D0\u4F9B\u8005(Provider)\u7531\u6027\u8CEA\u8F49\u63DB(Nature) ConvertNature.tooltip = \u5C07SVN\u5C08\u6848\u7531\u4F7F\u7528\u6027\u8CEA(nature)\u8F49\u63DB\u70BA\u4F7F\u7528\u5C6C\u6027(properties) CopyAction.label = \u8907\u88FD... CopyAction.tooltip = \u8907\u88FD\u6240\u9078\u53D6\u7684\u8CC7\u6E90 CopyCommand.label = \u8907\u88FD... CopyRemoteAction.label = \u8907\u88FD CopyRemoteAction.tooltip = \u8907\u5236\u9078\u53D6\u7684\u8CC7\u6E90 CopyRepositoryNameAction.label = \u8907\u88FD\u5230\u526A\u8CBC\u7C3F(&C) CopyRepositoryNameAction.tooltip = \u5C07\u6A94\u6848\u5EAB\u540D\u7A31\u8907\u88FD\u5230\u526A\u8CBC\u7C3F CopyUrlToClipboardAction.label = \u8907\u88FD URL \u5230\u526A\u8CBC\u7C3F CreateRemoteFolderAction.label = \u5EFA\u7ACB\u9060\u7AEF\u8CC7\u6599\u593E CreateRemoteFolderAction.tooltip = \u5728\u6A94\u6848\u5EAB\u4E0A\u5EFA\u7ACB\u8CC7\u6599\u593E DecoratorPreferencePage.name = \u6A19\u8A18\u4FEE\u98FE DecoratorStandard.desc = \u5728\u7531SVN\u6240\u63A7\u5236\u7684\u5C08\u6848\u986F\u793A\u986F\u793ASVN\u7279\u5B9A\u7684\u8A0A\u606F\u3002\u8A0A\u606F\u5305\u542B\u4E86\u4FEE\u8A02\u7248\u865F\u3001\u5206\u652F\u6216\u7248\u672C\u540D\u7A31\u7B49\u7B49\u3002 DecoratorStandard.name = SVN DeleteRemoteAction.label = \u522A\u9664... DeleteRemoteAction.tooltip = \u522A\u9664\u9078\u53D6\u7684\u6A94\u6848 DeleteSVNPropertyAction.label = \u522A\u9664\u6027\u8CEA DeleteSVNPropertyAction.tooltip = \u522A\u9664\u9078\u53D6\u7684\u6027\u8CEA DiffMergePreferencePage.name = \u6BD4\u8F03/\u5408\u4F75 EditConflictsAction.label = \u7DE8\u4FEE\u885D\u7A81 EditConflictsAction.tooltip = \u4F7F\u7528\u5916\u90E8\u5408\u4F75\u7A0B\u5F0F\u89E3\u6C7A\u885D\u7A81 ExportAction.label = \u532F\u51FA... ExportRemoteFolderAction.label = \u532F\u51FA... IgnoreAction.label = \u52A0\u5165\u5230svn:ignore(&D) IgnoreAction.tooltip = \u5728\u540C\u6B65\u6642\u5FFD\u7565\u9078\u53D6\u7684\u6A94\u6848 IgnoreCommand.label = \u52A0\u5165\u5230 svn:ignore IgnoredResourceBackgroundColor.description = \u88ABSVN\u5FFD\u7565\u7684\u8CC7\u6E90\u80CC\u666F\u5C07\u6703\u8A2D\u70BA\u9019\u500B\u984F\u8272 IgnoredResourceBackgroundColor.label = \u5FFD\u7565\u7684\u8CC7\u6E90(\u80CC\u666F\u984F\u8272) IgnoredResourceFont.description = \u88ABSVN\u5FFD\u7565\u7684\u8CC7\u6E90\u5C07\u6703\u4EE5\u9019\u500B\u5B57\u9AD4\u986F\u793A\u3002 IgnoredResourceFont.label = \u5FFD\u7565\u7684\u8CC7\u6E90\u5B57\u9AD4 IgnoredResourceForegroundColor.description = \u88ABSVN\u5FFD\u7565\u7684\u8CC7\u6E90\u524D\u666F\u5C07\u6703\u8A2D\u70BA\u9019\u500B\u984F\u8272 IgnoredResourceForegroundColor.label = \u5FFD\u7565\u7684\u8CC7\u6E90(\u524D\u666F\u984F\u8272) ImportFolderAction.label = \u532F\u5165... LockAction.label = \u9396\u5B9A LockAction.tooltip = \u9396\u5B9A\u9078\u53D6\u7684\u6A94\u6848 MarkDeletedAction.label = \u6A19\u8A18\u70BA\u5DF2\u522A\u9664 MenuIconsPreferencePage.name = \u9078\u55AE\u5716\u793A MergeAction.label = \u5408\u4F75(&M)... MergeAction.tooltip = \u5408\u4F75 ModifySVNPropertyAction.label = \u4FEE\u6539\u5C6C\u6027 ModifySVNPropertyAction.tooltip = \u4FEE\u6539 svn \u5C6C\u6027 MoveRemoteAction.label = \u91CD\u65B0\u547D\u540D/\u79FB\u52D5 MoveRemoteAction.tooltip = \u91CD\u65B0\u547D\u540D\u6216\u79FB\u52D5\u9078\u53D6\u7684\u8CC7\u6E90 OpenLogEntryAction.label = \u958B\u555F(&O) OpenLogEntryAction.tooltip = \u958B\u555F\u9078\u53D6\u6A94\u6848 OpenRemoteFileAction.label = \u958B\u555F(&O) OpenRemoteFileAction.tooltip = \u958B\u555F\u9078\u53D6\u6A94\u6848 OutgoingChangeBackgroundColor.description = \u5305\u542B\u50B3\u51FA\u66F4\u52D5\u7684\u8CC7\u6E90\u7684\u80CC\u666F\u5C07\u6703\u8A2D\u70BA\u6B64\u984F\u8272 OutgoingChangeBackgroundColor.label = \u50B3\u51FA\u66F4\u52D5(\u80CC\u666F) OutgoingChangeFont.description = \u5177\u6709\u50B3\u51FA\u66F4\u52D5\u7684\u8CC7\u6E90\u5C07\u6703\u4F7F\u7528\u6B64\u5B57\u9AD4 OutgoingChangeFont.label = \u50B3\u51FA\u66F4\u52D5\u5B57\u9AD4 OutgoingChangeForegroundColor.description = \u5305\u542B\u50B3\u51FA\u66F4\u52D5\u7684\u8CC7\u6E90\u7684\u524D\u666F\u5C07\u6703\u8A2D\u70BA\u6B64\u984F\u8272 OutgoingChangeForegroundColor.label = \u50B3\u51FA\u66F4\u52D5(\u524D\u666F) PasteRemoteAction.label = \u8CBC\u4E0A... PasteRemoteAction.tooltip = \u8CBC\u4E0A PendingOperationsView.name = \u672A\u5BE6\u73FE\u7684SVN\u64CD\u4F5C PreferenceKeywords.SVN = SVN PreferencePage.name = SVN RefreshFromLocal.label = \u66F4\u65B0\u672C\u6A5F SVN \u72C0\u614B (&R) RefreshFromLocal.tooltip = \u5229\u7528\u5DE5\u4F5C\u5340(workbench)\u5916\u90E8\u5C0DSVN\u5C08\u6848\u6240\u4F5C\u7684\u8B8A\u66F4\u4F86\u66F4\u65B0\u5DE5\u4F5C\u5340 RelocateAction.label = \u91CD\u65B0\u5B9A\u4F4D... RemoteResourcePropertiesAction.label = \u5C6C\u6027 RemoveRootAction.label = \u522A\u9664\u4F4D\u7F6E(&L) RemoveRootAction.tooltip = \u522A\u9664\u4F4D\u7F6E ReplaceWithAction.label = \u6A94\u6848\u5EAB\u4E2D\u7684\u6700\u65B0\u5167\u5BB9(&L) ReplaceWithAction.tooltip = \u66F4\u65B0\u70BASVN\u6A94\u6848\u5EAB\u4E2D\u6700\u65B0\u5167\u5BB9 ReplaceWithBaseAction.label = \u57FA\u790E\u4FEE\u8A02\u7248\u672C(&B) ReplaceWithBaseAction.tooltip = \u4EE5\u672C\u5730\u7AEF\u57FA\u790E\u4FEE\u5B9A\u7248\u672C\u53D6\u4EE3 ReplaceWithRevisionAction.label = \u4FEE\u8A02\u7248\u672C(&R) ReplaceWithRevisionAction.tooltip = \u66F4\u65B0\u70BASVN\u6A94\u6848\u5EAB\u4E0A\u7684\u4FEE\u8A02\u7248\u672C RepoPreference.Description = SVN \u6A94\u6848\u5EAB\u9023\u7DDA\u53CA\u5176\u4ED6\u76F8\u95DC\u9078\u9805 RepoPreference.Name = SVN \u6A94\u6848\u5EAB RepositoriesView.name = SVN \u6A94\u6848\u5EAB ResolveAction.label = \u6A19\u8A18\u70BA\u5DF2\u89E3\u6C7A ResolveAction.tooltip = \u5C07\u6A94\u6848\u72C0\u614B\u8A2D\u5B9A\u70BA\u5DF2\u89E3\u6C7A (resolved) RestoreFromRepositoryAction.label = \u4EE5\u6A94\u6848\u5EAB\u5167\u5BB9\u5FA9\u539F (&R) RestoreFromRepositoryAction.tooltip = \u9084\u539F\u5DF2\u5F9E\u5DE5\u4F5C\u5340\u4E2D\u522A\u9664\u7684\u6A94\u6848 RevertAction.label = \u5FA9\u539F RevertAction.tooltip = \u9084\u539F\u81F3\u5DE5\u4F5C\u5340\u57FA\u790E\u7248\u672C (\u6E05\u9664\u6240\u6709\u672C\u5730\u7684\u4FEE\u6539) RevertCommand.label = \u56DE\u5FA9 SVN = SVN SVNActionSet.categoryName = SVN SVNActionSet.description = SVN \u6A94\u6848\u5EAB\u53EF\u4F7F\u7528\u7684\u64CD\u4F5C SVNActionSet.label = SVN SVNActionSet.newLabel = \u65B0\u589E SVN \u6A94\u6848\u5EAB SVNActionSet.newTooltip = \u5EFA\u7ACB\u65B0\u7684 SVN \u6A94\u6848\u5EAB SVNActionSet.syncLabel = \u540C\u6B65 SVN \u5C08\u6848 SVNActionSet.syncTooltip = \u540C\u6B65 SVN \u5C08\u6848 SVNCompareParticipant = SVN \u6BD4\u8F03 SVNConflictFilter.description = \u96B1\u85CF\u6C92\u6709SVN\u885D\u7A81\u72C0\u614B\u7684\u9805\u76EE SVNConflictFilter.name = \u975E SVN\u885D\u7A81 SVNConsoleFont.description = SVN \u7D42\u7AEF\u6A5F\u5B57\u578B SVNConsoleFont.label = SVN \u7D42\u7AEF\u6A5F\u5B57\u578B SVNGroupMenu.label = S&VN SVNMergeParticipant = SVN \u5408\u4F75 SVNRemoteQuickDiffProvider.label = \u6700\u65B0\u7684 SVN \u4FEE\u8A02\u7248\u672C(&L) SVNRepositoryExploring = \u700F\u89BD SVN \u6A94\u6848\u5EAB SVNWorkspaceParticipant = SVN SaveSVNPropertyAction.label = \u5132\u5B58\u5C6C\u6027\u503C SaveSVNPropertyAction.tooltip = \u5C07\u9078\u53D6\u7684\u5C6C\u6027\u503C\u5132\u5B58\u81F3\u6A94\u6848 SetSvnProperty.label = \u8A2D\u5B9A\u5C6C\u6027... SetSvnProperty.tooltip = \u8A2D\u5B9A\u65B0\u7684 SVN \u5C6C\u6027\u5230\u9078\u53D6\u7684\u6A94\u6848 SharingWizard.name = SVN ShowAnnotationAction.label = \u986F\u793A\u8A3B\u91CB(&A) ShowAnnotationAction.tooltip = \u986F\u793A\u8A3B\u91CB ShowDifferencesAsUnifiedDiffAction.label = \u5EFA\u7ACB\u55AE\u4E00\u5DEE\u7570\u6A94 ShowHistoryAction.label = \u986F\u793A\u8CC7\u6E90\u6B77\u7A0B(&H) ShowHistoryAction.tooltip = \u986F\u793A\u8CC7\u6E90\u6B77\u7A0B ShowPendingOperationsAction.label = \u986F\u793A\u672A\u5BE6\u73FE\u7684\u64CD\u4F5C ShowPendingOperationsAction.tooltip = \u986F\u793A\u9700\u8981\u57F7\u884C\u9001\u4EA4\u7684\u8CC7\u6E90 ShowSvnPropertiesAction.label = \u986F\u793A\u5C6C\u6027 ShowSvnPropertiesAction.tooltip = \u986F\u793A\u9078\u53D6\u8CC7\u6E90\u7684 SVN \u5C6C\u6027 SvnPropertiesView.name = SVN \u5C6C\u6027 SwitchAction.label = \u5207\u63DB (&S) SwitchAction.tooltip = \u5207\u63DB Synchronize.tooltip = \u5C07\u5DE5\u4F5C\u5340\u7684\u8CC7\u6E90\u8207\u6A94\u6848\u5EAB\u540C\u6B65 SynchronizeAction.label = \u8207\u6A94\u6848\u5EAB\u540C\u6B65(&S) SynchronizeAction.tooltip = \u8207\u6A94\u6848\u5EAB\u540C\u6B65 SynchronizeCommand.label = \u8207\u6A94\u6848\u5EAB\u540C\u6B65 SynchronizeOutgoing.label = \u540C\u6B65\u9001\u51FA\u7684\u8B8A\u66F4(&Y) SynchronizeOutgoing.tooltip = \u8207\u6A94\u6848\u5EAB\u540C\u6B65\u9001\u51FA\u7684\u8B8A\u66F4 UnlockAction.label = \u89E3\u9664\u9396\u5B9A UnlockAction.tooltip = \u89E3\u9664\u9078\u53D6\u6A94\u6848\u7684\u9396\u5B9A UnmanageFolder.label = \u4E2D\u65B7\u9023\u7D50(&D) UnmanageFolder.tooltip = \u4E2D\u65B7\u8207 SVN \u6A94\u6848\u5EAB\u9593\u7684\u9023\u7D50 UpdateAction.label = \u66F4\u65B0(&U) UpdateAction.tooltip = \u66F4\u65B0 UpdateCommand.label = \u66F4\u65B0 WatchEditPreferencePage.name = \u6AA2\u8996/\u7DE8\u8F2F commitCommentFont.description = SVN \u9001\u51FA\u8A3B\u8A18\u7684\u5B57\u578B commitCommentFont.label = SVN \u9001\u51FA\u8A3B\u8A18\u7684\u5B57\u578B conflictMarker = SVN \u885D\u7A81 deletesvnpropertyaction.label = \u522A\u9664\u5C6C\u6027 deletesvnpropertyaction.tooltip = \u522A\u9664\u9078\u53D6\u7684 SVN \u5C6C\u6027 extmethodpreferencepage.name = Ext \u9023\u63A5\u65B9\u5F0F generatediff.label = \u5EFA\u7ACB\u88DC\u7DB4\u6A94 (&P) generatediff.tooltip = \u6BD4\u5C0D\u5DE5\u4F5C\u5340\u8207\u6A94\u6848\u5EAB\u7684\u5167\u5BB9\uFF0C\u5EFA\u7ACB\u53EF\u4F5C\u70BA\u88DC\u7DB4\u6A94\u4F7F\u7528\u7684\u5DEE\u7570\u6A94\u6848 historyfilter.label = \u7BE9\u9078\u6B77\u7A0B(&F) historyfilter.tooltip = \u7BE9\u9078\u6B77\u7A0B historyview.name = SVN \u8CC7\u6E90\u6B77\u7A0B pluginName = SVN \u5718\u968A\u7A0B\u5F0F\u4F7F\u7528\u8005\u754C\u9762 providerName = tigris.org repositoryView.name = SVN \u6A94\u6848\u5EAB svnPropertyPage.name = SVN \u7248\u672C\u63A7\u7BA1 svnQuickDiff.label = \u539F\u59CB SVN \u8907\u672C syncWizard.description = \u540C\u6B65\u7531 SVN \u63A7\u7BA1\u7684\u6A94\u6848 syncWizard.name = SVN \u540C\u6B65\u5DE5\u5177 themeCategory = SVN viewCategory = SVN eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/schema/000077500000000000000000000000001203611042400253445ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/schema/commitDialogExtensions.exsd000066400000000000000000000134351203611042400327270ustar00rootroot00000000000000 This element defines an action that the user can invoke in the UI. a unique identifier used as a reference for this action. a translatable name used either as the menu item text or toolbar button label. The name can include mnenomic information. a fully qualified name of a class that implements <samp>org.eclipse.ui.IActionDelegate</samp> a relative path of an icon used to visually represent the action a translatable text representing the action's tool tip. Only used if the action appears in the toolbar. an attribute to define the user interface style type for the action. If omitted, then it is <samp>push</samp> by default. The attribute value will be one of the following: <table border="0" width="80%"> <tr> <td valign="top" width="25"></td> <td valign="top" nowrap><b>push</b></td> <td valign="top">- as a regular menu item or tool item.</td> </tr> <tr> <td valign="top" width="25"></td> <td valign="top" nowrap><b>radio</b></td> <td valign="top">- as a radio style menu item or tool item. Actions with the radio style within the same menu or toolbar group behave as a radio set. The initial value is specified by the <samp>state</samp> attribute.</td> </tr> <tr> <td valign="top" width="25"></td> <td valign="top" nowrap><b>toggle</b></td> <td valign="top">a toggle tool item. The initial value is specified by the <samp>state</samp> attribute.</td> </tr> </table> an optional attribute indicating the initial state (either <samp>true</samp> or <samp>false</samp>). Used only when the <samp>style</samp> attribute has the value <samp>radio</samp> or <samp>toggle</samp>. [Enter the first release in which this extension point appears.] [Enter extension point usage example here.] [Enter API information here.] [Enter information about supplied implementation of this extension point.] eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/schema/mergeProviders.exsd000066400000000000000000000044031203611042400312270ustar00rootroot00000000000000 [Enter the first release in which this extension point appears.] [Enter extension point usage example here.] [Enter API information here.] [Enter information about supplied implementation of this extension point.] eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/000077500000000000000000000000001203611042400246735ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/000077500000000000000000000000001203611042400254625ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/000077500000000000000000000000001203611042400267635ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/000077500000000000000000000000001203611042400311625ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/000077500000000000000000000000001203611042400331535ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/000077500000000000000000000000001203611042400335705ustar00rootroot00000000000000CancelableSVNLogMessageCallback.java000066400000000000000000000020351203611042400423400ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/uipackage org.tigris.subversion.subclipse.ui; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNLogMessage; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNLogMessageCallback; public class CancelableSVNLogMessageCallback extends SVNLogMessageCallback { private IProgressMonitor monitor; private ISVNClientAdapter svnClient; private boolean canceled; public CancelableSVNLogMessageCallback(IProgressMonitor monitor, ISVNClientAdapter svnClient) { super(); this.monitor = monitor; this.svnClient = svnClient; } public void singleMessage(ISVNLogMessage msg) { super.singleMessage(msg); if (monitor != null && monitor.isCanceled() && !canceled) { try { svnClient.cancelOperation(); canceled = true; } catch (SVNClientException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } } } DepthComboHelper.java000066400000000000000000000034301203611042400375400ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/uipackage org.tigris.subversion.subclipse.ui; import org.eclipse.swt.widgets.Combo; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; public class DepthComboHelper { private static String[] comboValues = { ISVNUIConstants.DEPTH_UNKNOWN, ISVNUIConstants.DEPTH_INFINITY, ISVNUIConstants.DEPTH_IMMEDIATES, ISVNUIConstants.DEPTH_FILES, ISVNUIConstants.DEPTH_EMPTY, ISVNUIConstants.DEPTH_EXCLUDE }; private static int[] depthValues = { ISVNCoreConstants.DEPTH_UNKNOWN, ISVNCoreConstants.DEPTH_INFINITY, ISVNCoreConstants.DEPTH_IMMEDIATES, ISVNCoreConstants.DEPTH_FILES, ISVNCoreConstants.DEPTH_EMPTY, ISVNCoreConstants.DEPTH_EXCLUDE }; public static void addDepths(Combo combo, boolean includeUnknown, String defaultSelection) { if (includeUnknown) combo.add(ISVNUIConstants.DEPTH_UNKNOWN); combo.add(ISVNUIConstants.DEPTH_INFINITY); combo.add(ISVNUIConstants.DEPTH_IMMEDIATES); combo.add(ISVNUIConstants.DEPTH_FILES); combo.add(ISVNUIConstants.DEPTH_EMPTY); if (defaultSelection != null) combo.select(combo.indexOf(defaultSelection)); } public static void addDepths(Combo combo, boolean includeUnknown, boolean includeExclude, String defaultSelection) { if (includeUnknown) combo.add(ISVNUIConstants.DEPTH_UNKNOWN); combo.add(ISVNUIConstants.DEPTH_INFINITY); combo.add(ISVNUIConstants.DEPTH_IMMEDIATES); combo.add(ISVNUIConstants.DEPTH_FILES); combo.add(ISVNUIConstants.DEPTH_EMPTY); if (includeExclude) combo.add(ISVNUIConstants.DEPTH_EXCLUDE); if (defaultSelection != null) combo.select(combo.indexOf(defaultSelection)); } public static int getDepth(Combo combo) { for (int i = 0; i < comboValues.length; i++) { if (combo.getText().equals(comboValues[i])) return depthValues[i]; } return ISVNCoreConstants.DEPTH_UNKNOWN; } } IHelpContextIds.java000066400000000000000000000166271203611042400373760ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui; /** * Here's how to reference the help context in code (typically in "createComposite()"): * * WorkbenchHelp.setHelp(actionOrControl, IHelpContextIds.NAME_DEFIED_BELOW); * * For preference pages (and possibly also for resource property pages, 'actionOrControl' is * the result of getControl()) * * Every time you add a new key, keep the keys in the 'help_contexts.xml' file current. */ public interface IHelpContextIds { public static final String PREFIX = SVNUIPlugin.ID + "."; //$NON-NLS-1$ // Dialogs public static final String RELEASE_COMMENT_DIALOG = PREFIX + "release_comment_dialog_context"; //$NON-NLS-1$ public static final String ADD_TO_VERSION_CONTROL_DIALOG = PREFIX + "add_to_version_control_dialog_context"; //$NON-NLS-1$ public static final String ADD_KEYWORDS_DIALOG = PREFIX + "add_keywords_dialog_context"; //$NON-NLS-1$ public static final String ADD_TO_SVNIGNORE = PREFIX + "add_to_svnignore_dialog_context"; //$NON-NLS-1$ public static final String SWITCH_DIALOG = PREFIX + "switch_dialog_context"; //$NON-NLS-1$ public static final String MERGE_DIALOG = PREFIX + "merge_dialog_context"; //$NON-NLS-1$ public static final String BRANCH_TAG_DIALOG = PREFIX + "branch_tag_dialog_context"; //$NON-NLS-1$ public static final String REVERT_DIALOG = PREFIX + "revert_dialog_context"; //$NON-NLS-1$ public static final String COMMIT_DIALOG = PREFIX + "commit_dialog_context"; //$NON-NLS-1$ public static final String COMPARE_DIALOG = PREFIX + "compare_dialog_context"; //$NON-NLS-1$ public static final String IMPORT_FOLDER_DIALOG = PREFIX + "import_folder_dialog_context"; //$NON-NLS-1$; public static final String ANNOTATE_DIALOG = PREFIX + "annotate_dialog_context"; //$NON-NLS-1$; public static final String SET_SVN_PROPERTY_DIALOG = PREFIX + "set_svn_property_dialog_context"; //$NON_NLS-1$ public static final String PASSWORD_PROMPT_DIALOG = PREFIX + "password_prompt_dialog_context"; //$NON_NLS-1$ public static final String USER_PROMPT_DIALOG = PREFIX + "user_prompt_dialog_context"; //$NON_NLS-1$ public static final String QUESTION_DIALOG = PREFIX + "question_dialog_context"; //$NON_NLS-1$ public static final String SSH_PROMPT_DIALOG = PREFIX + "ssh_prompt_dialog_context"; //$NON_NLS-1$ public static final String TRUST_SSL_SERVER_DIALOG = PREFIX + "trust_ssl_server_dialog_context"; //$NON_NLS-1$ public static final String CHOOSE_URL_DIALOG = PREFIX + "choose_url_dialog_context"; //$NON_NLS-1$ public static final String LOCK_DIALOG = PREFIX + "lock_dialog_context"; //$NON_NLS-1$ public static final String HISTORY_DIALOG = PREFIX + "history_dialog_context"; //$NON_NLS-1$ public static final String SHOW_UNIFIED_DIFF_DIALOG = PREFIX + "show_unified_diff_dialog_context"; //$NON_NLS-1$ public static final String EXPORT_REMOTE_FOLDER_DIALOG = PREFIX + "export_remote_folder_dialog_context"; //$NON_NLS-1$ public static final String REMOTE_RESOURCE_PROPERTIES_DIALOG = PREFIX + "remote_resource_properties_dialog_context"; //$NON_NLS-1$ public static final String BRANCH_TAG_PROPERTY_UPDATE_DIALOG = PREFIX + "branch_tag_property_update_dialog_context"; //$NON_NLS-1$ public static final String CONFIGURE_TAGS_DIALOG = PREFIX + "configure_tags_dialog_context"; //$NON_NLS-1$ public static final String CHANGE_REVPROPS = PREFIX + "change_revprops_context"; //$NON_NLS-1$ public static final String COMMIT_SET_DIALOG = PREFIX + "commit_set_dialog_context"; //$NON-NLS-1$ public static final String SEARCH_HISTORY_DIALOG = PREFIX + "search_history_dialog_context"; //$NON-NLS-1$ // Wizard Pages public static final String SHARING_AUTOCONNECT_PAGE = PREFIX + "sharing_autoconnect_page_context"; //$NON-NLS-1$ public static final String SHARING_SELECT_REPOSITORY_PAGE = PREFIX + "sharing_select_repository_page_context"; //$NON-NLS-1$ public static final String SHARING_NEW_REPOSITORY_PAGE = PREFIX + "sharing_new_repository_page_context"; //$NON-NLS-1$ public static final String SHARING_MODULE_PAGE = PREFIX + "sharing_module_page_context"; //$NON-NLS-1$ public static final String SHARING_FINISH_PAGE = PREFIX + "sharing_finish_page_context"; //$NON-NLS-1$ public static final String PATCH_SELECTION_PAGE = PREFIX + "patch_selection_page_context"; //$NON-NLS-1$ public static final String PATCH_OPTIONS_PAGE = PREFIX + "patch_options_page_context"; //$NON-NLS-1$ public static final String CREATE_REMOTE_FOLDER_PAGE = PREFIX + "create_remote_folder_page_context"; //$NON_NLS-1$ public static final String MOVE_RENAME_REMOTE_RESOURCE_PAGE = PREFIX + "move_rename_remote_resource_page_context"; //$NON_NLS-1$ public static final String RELOCATE_REPOSITORY_PAGE = PREFIX + "relocate_page_context"; //$NON_NLS-1$ public static final String COMMENT_COMMIT_PAGE_DIALOG = PREFIX + "comment_commit_page_context"; //$NON_NLS-1$ // Properties and Preferences public static final String CONSOLE_PREFERENCE_PAGE = PREFIX + "console_preference_page_context"; //$NON-NLS-1$ public static final String DECORATORS_PREFERENCE_PAGE = PREFIX + "decorators_preference_page_context"; //$NON-NLS-1$ public static final String SVN_PREFERENCE_DIALOG = PREFIX + "svn_preference_page_context"; //$NON-NLS-1$ public static final String SVN_RESOURCE_PROPERTIES_PAGE = PREFIX + "svn_resource_properties_page_context"; //$NON-NLS-1$ public static final String DIFF_MERGE_PREFERENCE_PAGE = PREFIX + "diff_merge_preferences_page_context"; //$NON-NLS-1$ public static final String COMMENT_TEMPLATE_PREFERENCE_PAGE = PREFIX + "comment_template_preference_page_context"; //$NON-NLS-1$ // Views public static final String CONSOLE_VIEW = PREFIX + "console_view_context"; //$NON-NLS-1$ public static final String REPOSITORIES_VIEW = PREFIX + "repositories_view_context"; //$NON-NLS-1$ public static final String RESOURCE_HISTORY_VIEW = PREFIX + "resource_history_view_context"; //$NON-NLS-1$ public static final String COMPARE_REVISIONS_VIEW = PREFIX + "compare_revision_view_context"; //$NON-NLS-1$ public static final String ANNOTATIONS_VIEW = PREFIX + "annotations_view_context"; //$NON-NLS-1$ public static final String PROPERTIES_VIEW = PREFIX + "properties_view_context"; //$NON-NLS-1$ public static final String REV_PROPERTIES_VIEW = PREFIX + "rev_properties_view_context"; //$NON-NLS-1$ public static final String PENDING_OPERATIONS_VIEW = PREFIX + "pending_operations_view_context"; //$NON-NLS-1$ // Actions public static final String GET_FILE_REVISION_ACTION = PREFIX + "get_file_revision_action_context"; //$NON-NLS-1$ public static final String GET_FILE_CONTENTS_ACTION = PREFIX + "get_file_contents_action_context"; //$NON-NLS-1$ public static final String NEW_REPOSITORY_LOCATION_ACTION = PREFIX + "new_repository_location_action_context"; //$NON-NLS-1$ public static final String REMOVE_REPOSITORY_LOCATION_ACTION = PREFIX + "remove_root_action_context"; //$NON-NLS-1$ public static final String DISCONNECT_ACTION = PREFIX + "disconnect_action_context"; //$NON-NLS-1$; } ISVNUIConstants.java000066400000000000000000000441431203611042400372740ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui; public interface ISVNUIConstants { // image path public final String ICON_PATH = "icons/full/"; //$NON-NLS-1$ public final String IMG_SYNCPANE = "elcl16/syncpane_co.gif"; //$NON-NLS-1$ // overlays public final String IMG_QUESTIONABLE = "ovr16/question_ov.gif"; //$NON-NLS-1$ public final String IMG_CONFLICTED = "ovr16/conflicted_ov.gif"; //$NON-NLS-1$ public final String IMG_PROPERTY_CONFLICTED = "ovr16/prop_conflicted_ov.gif"; //$NON-NLS-1$ public final String IMG_ADDED = "ovr16/added_ov.gif"; //$NON-NLS-1$ public final String IMG_EXTERNAL = "ovr16/external_ov.gif"; //$NON-NLS-1$ public final String IMG_LOCKED = "ovr16/locked_ov.gif"; //$NON-NLS-1$ public final String IMG_NEEDSLOCK = "ovr16/protected_ov.gif"; //$NON-NLS-1$ public final String IMG_DELETED = "ovr16/deleted_ov.gif"; //$NON-NLS-1$ public final String IMG_SWITCHED = "ovr16/switched_ov.gif"; //$NON-NLS-1$ public final String IMG_PROPERTY_CHANGED = "ovr16/propchg_ov.gif"; //$NON-NLS-1$ public final String IMG_TEXT_CONFLICTED = "ovr16/text_conflicted_ov.gif"; //$NON-NLS-1$ public final String IMG_TREE_CONFLICT = "ovr16/tree_conflict_ov.gif"; //$NON-NLS-1$ // objects public final String IMG_REPOSITORY = "obj16/repository_rep.gif"; //$NON-NLS-1$ public final String IMG_BRANCHES_CATEGORY = "obj16/branches_rep.gif"; //$NON-NLS-1$ public final String IMG_VERSIONS_CATEGORY = "obj16/versions_rep.gif"; //$NON-NLS-1$ public final String IMG_PROJECT_VERSION = "obj16/prjversions_rep.gif"; //$NON-NLS-1$ public final String IMG_WARNING = "obj16/warn.gif"; //$NON-NLS-1$ public final String IMG_BRANCH = "obj16/tag.gif"; //$NON-NLS-1$ public final String IMG_PROPERTIES = "clcl16/properties.png"; //$NON-NLS-1$ // toolbar public final String IMG_REFRESH = "clcl16/refresh.gif"; //$NON-NLS-1$ public final String IMG_CLEAR = "clcl16/clear_co.gif"; //$NON-NLS-1$ public final String IMG_COLLAPSE_ALL = "clcl16/collapseall.gif"; //$NON-NLS-1$ public final String IMG_EXPAND_ALL = "clcl16/expandall.gif"; //$NON-NLS-1$ public final String IMG_GET_ALL = "clcl16/get_all.gif"; //$NON-NLS-1$ public final String IMG_GET_NEXT = "clcl16/get_next.gif"; //$NON-NLS-1$ public final String IMG_FILTER_HISTORY = "clcl16/filter_history.gif"; //$NON-NLS-1$ public final String IMG_SHOW_DELETED = "tortoise/delete.gif"; //$NON-NLS-1$ // toolbar (disabled) public final String IMG_REFRESH_DISABLED = "dlcl16/refresh.gif"; //$NON-NLS-1$ public final String IMG_CLEAR_DISABLED = "dlcl16/clear_co.gif"; //$NON-NLS-1$ public final String IMG_FILTER_HISTORY_DISABLED = "dlcl16/filter_history.gif"; //$NON-NLS-1$ // toolbar (enabled) public final String IMG_REFRESH_ENABLED = "elcl16/refresh.gif"; //$NON-NLS-1$ public final String IMG_COLLAPSE_ALL_ENABLED = "elcl16/collapseall.gif"; //$NON-NLS-1$ public final String IMG_EXPAND_ALL_ENABLED = "elcl16/expandall.gif"; //$NON-NLS-1$ public final String IMG_AFFECTED_PATHS_TABLE_MODE = "elcl16/tableLayout.gif"; //$NON-NLS-1$ public final String IMG_AFFECTED_PATHS_TREE_MODE = "elcl16/treeLayout.gif"; //$NON-NLS-1$ public final String IMG_AFFECTED_PATHS_FLAT_MODE = "elcl16/flatLayout.gif"; //$NON-NLS-1$ public final String IMG_AFFECTED_PATHS_COMPRESSED_MODE = "elcl16/compressedLayout.gif"; //$NON-NLS-1$ public final String IMG_AFFECTED_PATHS_HORIZONTAL_LAYOUT = "elcl16/horizontal.gif"; //$NON-NLS-1$ public final String IMG_AFFECTED_PATHS_VERTICAL_LAYOUT = "elcl16/vertical.gif"; //$NON-NLS-1$ public final String IMG_COMMENTS = "elcl16/comments.gif"; //$NON-NLS-1$ public final String IMG_UPDATE_ALL = "elcl16/update_all.gif"; //$NON-NLS-1$ public final String IMG_COMMIT_ALL = "elcl16/commit_all.gif"; //$NON-NLS-1$ // wizards public final String IMG_NEWLOCATION = "wizards/newlocation_wiz.gif"; //$NON-NLS-1$ // pending public final String IMG_FILEADD_PENDING = "pending16/fileadd_pending.gif"; //$NON-NLS-1$ public final String IMG_FILEDELETE_PENDING = "pending16/filedelete_pending.gif"; //$NON-NLS-1$ public final String IMG_FOLDERADD_PENDING = "pending16/folderadd_pending.gif"; //$NON-NLS-1$ public final String IMG_FOLDERDELETE_PENDING = "pending16/folderdelete_pending.gif"; //$NON-NLS-1$ public final String IMG_FILEMODIFIED_PENDING = "pending16/filemodified_pending.gif"; //$NON-NLS-1$ public final String IMG_FOLDERMODIFIED_PENDING = "pending16/foldermodified_pending.gif"; //$NON-NLS-1$ public final String IMG_FOLDER = "pending16/folder_pending.gif"; //$NON-NLS-1$ // views public final String IMG_SVN_CONSOLE = "cview16/console_view.gif"; //$NON-NLS-1$ // operations public final String IMG_CHECKOUT = "ctool16/checkout.gif"; //$NON-NLS-1$ // Menus public final String IMG_MENU_UPDATE = "Menu Update"; //$NON-NLS-1$ public final String IMG_MENU_COMMIT = "Menu Commit"; //$NON-NLS-1$ public final String IMG_MENU_SYNC = "Menu Synchronize"; //$NON-NLS-1$ public final String IMG_MENU_REVERT = "Menu Revert"; //$NON-NLS-1$ public final String IMG_MENU_ADD = "Menu Add"; //$NON-NLS-1$ public final String IMG_MENU_IGNORE = "Menu Ignore"; //$NON-NLS-1$ public final String IMG_MENU_PROPSET = "Menu Set Property"; //$NON-NLS-1$ public final String IMG_MENU_SHOWPROPERTY = "Menu Show Property"; //$NON-NLS-1$ public final String IMG_MENU_RELOCATE = "Menu Relocate"; //$NON-NLS-1$ public final String IMG_MENU_CHECKOUTAS = "Menu Checkout As"; //$NON-NLS-1$ public final String IMG_MENU_IMPORTFOLDER = "Menu Import Folder"; //$NON-NLS-1$ public final String IMG_MENU_LOCK = "Menu Lock"; //$NON-NLS-1$ public final String IMG_MENU_UNLOCK = "Menu Unlock"; //$NON-NLS-1$ public final String IMG_MENU_CLEANUP = "Menu Cleanup"; //$NON-NLS-1$ public final String IMG_MENU_EXPORT = "Menu Export"; //$NON-NLS-1$ public final String IMG_MENU_DIFF = "Menu Diff"; //$NON-NLS-1$ public final String IMG_MENU_PROPDELETE = "Menu Property Delete"; //$NON-NLS-1$ public final String IMG_MENU_DELETE = "Menu Delete"; //$NON-NLS-1$ public final String IMG_MENU_BRANCHTAG = "Menu Branch/Tag"; //$NON-NLS-1$ public final String IMG_MENU_MOVE = "Menu Move"; //$NON-NLS-1$ public final String IMG_MENU_COPY = "Menu Copy"; //$NON-NLS-1$ public final String IMG_MENU_COMPARE = "Menu Compare"; //$NON-NLS-1$ public final String IMG_MENU_RESOLVE = "Menu Resolve"; //$NON-NLS-1$ public final String IMG_MENU_EDITCONFLICT = "Menu Edit Conflicts"; //$NON-NLS-1$ public final String IMG_MENU_SWITCH = "Menu Switch"; //$NON-NLS-1$ public final String IMG_MENU_MARKMERGED = "Menu Mark Merged"; //$NON-NLS-1$ public final String IMG_MENU_MERGE = "Menu Merge"; //$NON-NLS-1$ public final String IMG_MENU_SHOWHISTORY = "Menu Show History"; //$NON-NLS-1$ public final String IMG_MENU_ANNOTATE = "Menu Annotate"; //$NON-NLS-1$ // preferences public final String PREF_SHOW_COMMENTS = "pref_show_comments"; //$NON-NLS-1$ public final String PREF_WRAP_COMMENTS = "pref_wrap_comments"; //$NON-NLS-1$ public final String PREF_SHOW_PATHS = "pref_show_paths"; //$NON-NLS-1$ public final String PREF_AFFECTED_PATHS_MODE = "pref_affected_paths_layout"; //$NON-NLS-1$ public final String PREF_AFFECTED_PATHS_LAYOUT = "pref_affected_paths_layout2"; //$NON-NLS-1$ public final String PREF_HISTORY_VIEW_EDITOR_LINKING = "pref_history_view_linking"; //$NON-NLS-1$ public final String PREF_PRUNE_EMPTY_DIRECTORIES = "pref_prune_empty_directories"; //$NON-NLS-1$ public final String PREF_TIMEOUT = "pref_timeout"; //$NON-NLS-1$ public final String PREF_QUIETNESS = "pref_quietness"; //$NON-NLS-1$ public final String PREF_SVN_SERVER = "pref_svn_server"; //$NON-NLS-1$ public final String PREF_CONSIDER_CONTENTS = "pref_consider_contents"; //$NON-NLS-1$ public final String PREF_SHOW_MARKERS = "pref_show_markers"; //$NON-NLS-1$ public final String PREF_REPLACE_UNMANAGED = "pref_replace_unmanaged"; //$NON-NLS-1$ public final String PREF_COMPRESSION_LEVEL = "pref_compression_level"; //$NON-NLS-1$ public final String PREF_TEXT_KSUBST = "pref_text_ksubst"; //$NON-NLS-1$ public final String PREF_FETCH_CHANGE_PATH_ON_DEMAND = "pref_fetch_change_path_on_Demand"; //$NON-NLS-1$ public final String PREF_SHOW_TAGS_IN_REMOTE = "pref_show_tags_in_remote"; //$NON-NLS-1$ public final String PREF_LOG_ENTRIES_TO_FETCH = "pref_log_entries_to_fetch"; //$NON-NLS-1$ public final String PREF_STOP_ON_COPY = "pref_stop_on_copy"; //$NON-NLS-1$ public final String PREF_INCLUDE_MERGED_REVISIONS = "include_merged_revisions"; //$NON-NLS-1$ public final String PREF_USE_JAVAHL_COMMIT_HACK = "pref_use_javahl_commit_hack"; //$NON-NLS-1$ public final String PREF_MERGE_PROVIDER = "pref_merge_provider"; //$NON-NLS-1$ public final String PREF_SUGGEST_MERGE_SOURCES = "pref_suggest_merge_sources"; //$NON-NLS-1$ public final String PREF_PROMPT_ON_MIXED_TAGS = "pref_prompt_on_mixed_tags"; //$NON-NLS-1$ public final String PREF_PROMPT_ON_SAVING_IN_SYNC = "pref_prompt_on_saving_in_sync"; //$NON-NLS-1$ public final String PREF_SAVE_DIRTY_EDITORS = "pref_save_dirty_editors"; //$NON-NLS-1$ public final String PREF_PROMPT_ON_CHANGE_GRANULARITY = "pref_prompt_on_change_granularity"; //$NON-NLS-1$ public final String PREF_REPOSITORIES_ARE_BINARY = "pref_repositories_are_binary"; //$NON-NLS-1$ public final String PREF_DETERMINE_SERVER_VERSION = "pref_determine_server_version"; //$NON-NLS-1$ public final String PREF_SHOW_ADDED_RESOURCES = "pref_show_added_resources"; //$NON-NLS-1$ public final String PREF_SHOW_DELETED_RESOURCES = "pref_show_deleted_resources"; //$NON-NLS-1$ public final String PREF_SHOW_MODIFIED_RESOURCES = "pref_show_modified_resources"; //$NON-NLS-1$ public final String PREF_SHOW_COMPARE_REVISION_IN_DIALOG = "pref_show_compare_revision_in_dialog"; //$NON-NLS-1$ public final String PREF_SHOW_UNADDED_RESOURCES_ON_COMMIT = "pref_show_unadded_resources_on_commit"; //$NON-NLS-1$ public final String PREF_SELECT_UNADDED_RESOURCES_ON_COMMIT = "pref_select_unadded_resources_on_commit"; //$NON-NLS-1$ public final String PREF_REMOVE_UNADDED_RESOURCES_ON_REPLACE = "pref_remove_unadded_resources_on_replace"; public final String PREF_COMMIT_SET_DEFAULT_ENABLEMENT = "pref_enable_commit_sets"; //$NON-NLS-1$ public final String PREF_USE_QUICKDIFFANNOTATE = "pref_use_quickdiffannotate"; //$NON-NLS-1$ // console preferences public final String PREF_CONSOLE_COMMAND_COLOR = "pref_console_command_color"; //$NON-NLS-1$ public final String PREF_CONSOLE_MESSAGE_COLOR = "pref_console_message_color"; //$NON-NLS-1$ public final String PREF_CONSOLE_ERROR_COLOR = "pref_console_error_color"; //$NON-NLS-1$ public final String PREF_CONSOLE_FONT = "pref_console_font"; //$NON-NLS-1$ public final String PREF_CONSOLE_SHOW_ON_ERROR = "pref_console_show_on_error"; //$NON-NLS-1$ public final String PREF_CONSOLE_SHOW_ON_MESSAGE = "pref_console_show_on_message"; //$NON-NLS-1$ public final String PREF_CONSOLE_LIMIT_OUTPUT = "pref_console_limit_output"; //$NON-NLS-1$ public final String PREF_CONSOLE_HIGH_WATER_MARK = "pref_console_high_water_mark"; //$NON-NLS-1$ // decorator preferences public final String PREF_FILETEXT_DECORATION = "pref_filetext_decoration"; //$NON-NLS-1$ public final String PREF_FOLDERTEXT_DECORATION = "pref_foldertext_decoration"; //$NON-NLS-1$ public final String PREF_PROJECTTEXT_DECORATION = "pref_projecttext_decoration"; //$NON-NLS-1$ public final String PREF_DATEFORMAT_DECORATION = "pref_dateformat_decoration"; //$NON-NLS-1$ public final String PREF_SHOW_DIRTY_DECORATION = "pref_show_overlaydirty"; //$NON-NLS-1$ public final String PREF_SHOW_ADDED_DECORATION = "pref_show_added"; //$NON-NLS-1$ public final String PREF_SHOW_EXTERNAL_DECORATION = "pref_show_external"; //$NON-NLS-1$ public final String PREF_SHOW_HASREMOTE_DECORATION = "pref_show_hasremote"; //$NON-NLS-1$ public final String PREF_SHOW_NEWRESOURCE_DECORATION = "pref_show_newresource"; //$NON-NLS-1$ public final String PREF_DIRTY_FLAG = "pref_dirty_flag"; //$NON-NLS-1$ public final String PREF_ADDED_FLAG = "pref_added_flag"; //$NON-NLS-1$ public final String PREF_EXTERNAL_FLAG = "pref_external_flag"; //$NON-NLS-1$ public final String PREF_CALCULATE_DIRTY = "pref_calculate_dirty"; //$NON-NLS-1$ public final String PREF_USE_FONT_DECORATORS = "pref_use_font_decorators"; //$NON-NLS-1$ public final String PREF_SHOW_SYNCINFO_AS_TEXT = "pref_show_syncinfo_as_text"; //$NON-NLS-1$ // merge program preferences public final String PREF_MERGE_PROGRAM_LOCATION = "pref_merge_program_location"; //$NON-NLS-1$ public final String PREF_MERGE_PROGRAM_PARAMETERS = "pref_merge_program_parameters"; //$NON-NLS-1$ public final String PREF_MERGE_USE_EXTERNAL = "pref_merge_use_external"; //$NON-NLS-1$ // watch/edit preferences public final String PREF_CHECKOUT_READ_ONLY = "pref_checkout_read_only"; //$NON-NLS-1$ public final String PREF_EDIT_ACTION = "pref_edit_action"; //$NON-NLS-1$ // Repositories view preferences public final String PREF_GROUP_VERSIONS_BY_PROJECT = "pref_group_versions_by_project"; //$NON-NLS-1$ // svn client interface or svnjavahl public final String PREF_SVNINTERFACE = "pref_svninterface"; //$NON-NLS-1$ // svn client config directory public final String PREF_SVNCONFIGDIR = "pref_svnconfigdir"; //$NON-NLS-1$ // Menu icon preferences public final String PREF_MENU_ICON_SET = "pref_menu_icon_set"; //$NON-NLS-1$ public final int MENU_ICON_SET_DEFAULT = 1; public final int MENU_ICON_SET_TORTOISESVN = 2; public final int MENU_ICON_SET_SUBVERSIVE = 3; // svn commit comment font public final String SVN_COMMENT_FONT = "svn_comment_font"; //$NON-NLS-1$ // Wizard banners public final String IMG_WIZBAN_SVN = "wizban/svn_wizban.png"; //$NON-NLS-1$ public final String IMG_WIZBAN_SHARE = "wizban/newconnect_wizban.gif"; //$NON-NLS-1$ public final String IMG_WIZBAN_DIFF = "wizban/createpatch_wizban.gif"; //$NON-NLS-1$ public final String IMG_WIZBAN_NEW_LOCATION = "wizban/newlocation_wizban.gif"; //$NON-NLS-1$ public final String IMG_WIZBAN_NEW_FOLDER = "wizban/newfolder_wizban.gif"; //$NON-NLS-1$ public final String IMG_WIZBAN_SYNCH = "wizban/share_wizban.gif"; //$NON-NLS-1$ public final String IMG_WIZBAN_RESOLVE_TREE_CONFLICT = "wizban/resolve_treeconflict_wizban.png"; //$NON-NLS-1$ // Properties public final String PROP_NAME = "svn.name"; //$NON-NLS-1$ public final String PROP_REVISION = "svn.revision"; //$NON-NLS-1$ public final String PROP_AUTHOR = "svn.author"; //$NON-NLS-1$ public final String PROP_COMMENT = "svn.comment"; //$NON-NLS-1$ public final String PROP_DATE = "svn.date"; //$NON-NLS-1$ public final String PROP_DIRTY = "svn.dirty"; //$NON-NLS-1$ public final String PROP_LOCK_OWNER = "svn.lock.owner"; //$NON-NLS-1$ public final String PROP_LOCK_TOKEN = "svn.lock.token"; //$NON-NLS-1$ public final String PROP_LOCK_COMMENT = "svn.lock.comment"; //$NON-NLS-1$ public final String PROP_LOCK_CREATION_DATE = "svn.lock.creation.date"; //$NON-NLS-1$ public final String PROP_LOCK_EXPIRATION_DATE = "svn.lock.expiration.date"; //$NON-NLS-1$ public final String PROP_MODIFIED = "svn.modified"; //$NON-NLS-1$ public final String PROP_KEYWORD = "svn.date"; //$NON-NLS-1$ public final String PROP_TAG = "svn.tag"; //$NON-NLS-1$ public final String PROP_PERMISSIONS = "svn.permissions"; //$NON-NLS-1$ public final String PROP_HOST = "svn.host"; //$NON-NLS-1$ public final String PROP_USER = "svn.user"; //$NON-NLS-1$ public final String PROP_METHOD = "svn.method"; //$NON-NLS-1$ public final String PROP_PORT = "svn.port"; //$NON-NLS-1$ public final String PROP_ROOT = "svn.root"; //$NON-NLS-1$ // preference options public final int OPTION_NEVER = 1; //$NON-NLS-1$ public final int OPTION_PROMPT = 2; //$NON-NLS-1$ public final int OPTION_AUTOMATIC = 3; //$NON-NLS-1$ public final int MODE_FLAT = 1; // actually table mode //$NON-NLS-1$ public final int MODE_COMPRESSED = 2; //$NON-NLS-1$ public final int MODE_FLAT2 = 3; //$NON-NLS-1$ public final int LAYOUT_HORIZONTAL = 1; //$NON-NLS-1$ public final int LAYOUT_VERTICAL = 2; //$NON-NLS-1$ public final String PREF_ALLOW_EMPTY_COMMIT_COMMENTS = "pref_allow_empty_commit_comment"; //$NON-NLS-1$ public final String PREF_ALLOW_COMMIT_WITH_WARNINGS = "pref_commit_with_warning"; //$NON-NLS-1$ public final String PREF_ALLOW_COMMIT_WITH_ERRORS = "pref_commit_with_errors"; //$NON-NLS-1$ public final String PREF_COMMIT_TO_TAGS_PATH_WITHOUT_WARNING = "pref_commit_to_tags_path_without_warning"; //$NON-NLS-1$ public final String PREF_UPDATE_TO_HEAD_IGNORE_EXTERNALS = "pref_update_to_head_ignore_externals"; //$NON-NLS-1$ public final String PREF_UPDATE_TO_HEAD_ALLOW_UNVERSIONED_OBSTRUCTIONS = "pref_update_to_head_allow_unversioned_obstructions"; //$NON-NLS-1$ public final String PREF_UPDATE_TO_HEAD_CONFLICT_HANDLING_TEXT_FILES = "pref_update_to_head_conflict_handling_text_files"; //$NON-NLS-1$ public final String PREF_UPDATE_TO_HEAD_CONFLICT_HANDLING_BINARY_FILES = "pref_update_to_head_conflict_handling_binary_files"; //$NON-NLS-1$ public final String PREF_UPDATE_TO_HEAD_CONFLICT_HANDLING_PROPERTIES = "pref_update_to_head_conflict_handling_properties"; //$NON-NLS-1$ // depth public final String DEPTH_EMPTY = "Only this item"; //$NON-NLS-1$ public final String DEPTH_FILES = "Only file children"; //$NON-NLS-1$ public final String DEPTH_IMMEDIATES = "Immediate children, including folders"; //$NON-NLS-1$ public final String DEPTH_INFINITY = "Fully recursive"; //$NON-NLS-1$ public final String DEPTH_UNKNOWN = "Working copy"; //$NON-NLS-1$ public final String DEPTH_EXCLUDE = "Exclude"; //$NON-NLS-1$ // This is in Internal class in team.ui, so we are mirroring it public final static String HISTORY_VIEW_ID = "org.eclipse.team.ui.GenericHistoryView"; //$NON-NLS-1$ } ImageDescriptors.java000066400000000000000000000327111203611042400376240ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui; import java.net.MalformedURLException; import java.net.URL; import java.util.Hashtable; import org.eclipse.jface.resource.ImageDescriptor; /** * The image descrptors for the plugin */ public class ImageDescriptors { private Hashtable imageDescriptors = new Hashtable(20); /** * Creates an image and places it in the image registry. */ protected void createImageDescriptor(String id, URL baseURL) { URL url = null; try { url = new URL(baseURL, ISVNUIConstants.ICON_PATH + id); } catch (MalformedURLException e) { } ImageDescriptor desc = ImageDescriptor.createFromURL(url); imageDescriptors.put(id, desc); } /** * Creates an image and places it in the image registry. */ protected void createImageDescriptor(String id, String name, URL baseURL) { URL url = null; try { url = new URL(baseURL, ISVNUIConstants.ICON_PATH + name); } catch (MalformedURLException e) { } ImageDescriptor desc = ImageDescriptor.createFromURL(url); imageDescriptors.put(id, desc); } /** * Returns the image descriptor for the given image ID. * Returns null if there is no such image. */ public ImageDescriptor getImageDescriptor(String id) { return (ImageDescriptor)imageDescriptors.get(id); } /** * Initializes the table of images used in this plugin. */ public void initializeImages(URL baseURL, int iconSet) { // objects createImageDescriptor(ISVNUIConstants.IMG_REPOSITORY, baseURL); createImageDescriptor(ISVNUIConstants.IMG_REFRESH, baseURL); createImageDescriptor(ISVNUIConstants.IMG_REFRESH_ENABLED, baseURL); createImageDescriptor(ISVNUIConstants.IMG_REFRESH_DISABLED, baseURL); createImageDescriptor(ISVNUIConstants.IMG_SYNCPANE, baseURL); createImageDescriptor(ISVNUIConstants.IMG_PROPERTIES, baseURL); // createImageDescriptor(ISVNUIConstants.IMG_LINK_WITH_EDITOR, baseURL); createImageDescriptor(ISVNUIConstants.IMG_GET_ALL, baseURL); createImageDescriptor(ISVNUIConstants.IMG_GET_NEXT, baseURL); createImageDescriptor(ISVNUIConstants.IMG_FILTER_HISTORY, baseURL); // createImageDescriptor(ISVNUIConstants.IMG_FILTER_HISTORY_ENABLED, baseURL); createImageDescriptor(ISVNUIConstants.IMG_FILTER_HISTORY_DISABLED, baseURL); // createImageDescriptor(ISVNUIConstants.IMG_LINK_WITH_EDITOR_ENABLED, baseURL); createImageDescriptor(ISVNUIConstants.IMG_COLLAPSE_ALL, baseURL); createImageDescriptor(ISVNUIConstants.IMG_COLLAPSE_ALL_ENABLED, baseURL); createImageDescriptor(ISVNUIConstants.IMG_EXPAND_ALL, baseURL); createImageDescriptor(ISVNUIConstants.IMG_EXPAND_ALL_ENABLED, baseURL); createImageDescriptor(ISVNUIConstants.IMG_NEWLOCATION, baseURL); // createImageDescriptor(ISVNUIConstants.IMG_NEWFOLDER, baseURL); createImageDescriptor(ISVNUIConstants.IMG_BRANCH, baseURL); // createImageDescriptor(ISVNUIConstants.IMG_MODULE, baseURL); createImageDescriptor(ISVNUIConstants.IMG_CLEAR, baseURL); // createImageDescriptor(ISVNUIConstants.IMG_CLEAR_ENABLED, baseURL); createImageDescriptor(ISVNUIConstants.IMG_CLEAR_DISABLED, baseURL); createImageDescriptor(ISVNUIConstants.IMG_BRANCHES_CATEGORY, baseURL); createImageDescriptor(ISVNUIConstants.IMG_VERSIONS_CATEGORY, baseURL); createImageDescriptor(ISVNUIConstants.IMG_PROJECT_VERSION, baseURL); createImageDescriptor(ISVNUIConstants.IMG_WARNING, baseURL); // createImageDescriptor(ISVNUIConstants.IMG_WIZBAN_MERGE, baseURL); createImageDescriptor(ISVNUIConstants.IMG_WIZBAN_SVN, baseURL); createImageDescriptor(ISVNUIConstants.IMG_WIZBAN_RESOLVE_TREE_CONFLICT, baseURL); createImageDescriptor(ISVNUIConstants.IMG_WIZBAN_SHARE, baseURL); createImageDescriptor(ISVNUIConstants.IMG_WIZBAN_SYNCH, baseURL); createImageDescriptor(ISVNUIConstants.IMG_WIZBAN_DIFF, baseURL); // createImageDescriptor(ISVNUIConstants.IMG_WIZBAN_KEYWORD, baseURL); createImageDescriptor(ISVNUIConstants.IMG_WIZBAN_NEW_LOCATION, baseURL); createImageDescriptor(ISVNUIConstants.IMG_WIZBAN_NEW_FOLDER, baseURL); // createImageDescriptor(ISVNUIConstants.IMG_MERGEABLE_CONFLICT, baseURL); createImageDescriptor(ISVNUIConstants.IMG_QUESTIONABLE, baseURL); // createImageDescriptor(ISVNUIConstants.IMG_MERGED, baseURL); // createImageDescriptor(ISVNUIConstants.IMG_EDITED, baseURL); // createImageDescriptor(ISVNUIConstants.IMG_NO_REMOTEDIR, baseURL); createImageDescriptor(ISVNUIConstants.IMG_CONFLICTED, baseURL); createImageDescriptor(ISVNUIConstants.IMG_ADDED, baseURL); createImageDescriptor(ISVNUIConstants.IMG_EXTERNAL, baseURL); createImageDescriptor(ISVNUIConstants.IMG_LOCKED, baseURL); createImageDescriptor(ISVNUIConstants.IMG_NEEDSLOCK, baseURL); createImageDescriptor(ISVNUIConstants.IMG_DELETED, baseURL); createImageDescriptor(ISVNUIConstants.IMG_SWITCHED, baseURL); createImageDescriptor(ISVNUIConstants.IMG_PROPERTY_CHANGED, baseURL); createImageDescriptor(ISVNUIConstants.IMG_TEXT_CONFLICTED, baseURL); createImageDescriptor(ISVNUIConstants.IMG_TREE_CONFLICT, baseURL); createImageDescriptor(ISVNUIConstants.IMG_PROPERTY_CONFLICTED, baseURL); createImageDescriptor(ISVNUIConstants.IMG_UPDATE_ALL, baseURL); createImageDescriptor(ISVNUIConstants.IMG_COMMIT_ALL, baseURL); createImageDescriptor(ISVNUIConstants.IMG_SHOW_DELETED, baseURL); // special createImageDescriptor("glyphs/glyph1.gif", baseURL); //$NON-NLS-1$ createImageDescriptor("glyphs/glyph2.gif", baseURL); //$NON-NLS-1$ createImageDescriptor("glyphs/glyph3.gif", baseURL); //$NON-NLS-1$ createImageDescriptor("glyphs/glyph4.gif", baseURL); //$NON-NLS-1$ createImageDescriptor("glyphs/glyph5.gif", baseURL); //$NON-NLS-1$ createImageDescriptor("glyphs/glyph6.gif", baseURL); //$NON-NLS-1$ createImageDescriptor("glyphs/glyph7.gif", baseURL); //$NON-NLS-1$ createImageDescriptor("glyphs/glyph8.gif", baseURL); //$NON-NLS-1$ createImageDescriptor(ISVNUIConstants.IMG_FILEADD_PENDING,baseURL); createImageDescriptor(ISVNUIConstants.IMG_FILEDELETE_PENDING,baseURL); createImageDescriptor(ISVNUIConstants.IMG_FOLDERADD_PENDING,baseURL); createImageDescriptor(ISVNUIConstants.IMG_FOLDERDELETE_PENDING,baseURL); createImageDescriptor(ISVNUIConstants.IMG_FILEMODIFIED_PENDING,baseURL); createImageDescriptor(ISVNUIConstants.IMG_FOLDERMODIFIED_PENDING,baseURL); createImageDescriptor(ISVNUIConstants.IMG_FOLDER, baseURL); // createImageDescriptor(ISVNUIConstants.IMG_FILEMISSING_PENDING,baseURL); createImageDescriptor(ISVNUIConstants.IMG_AFFECTED_PATHS_TABLE_MODE, baseURL); createImageDescriptor(ISVNUIConstants.IMG_AFFECTED_PATHS_FLAT_MODE, baseURL); createImageDescriptor(ISVNUIConstants.IMG_AFFECTED_PATHS_COMPRESSED_MODE, baseURL); createImageDescriptor(ISVNUIConstants.IMG_AFFECTED_PATHS_TREE_MODE, baseURL); createImageDescriptor(ISVNUIConstants.IMG_AFFECTED_PATHS_HORIZONTAL_LAYOUT, baseURL); createImageDescriptor(ISVNUIConstants.IMG_AFFECTED_PATHS_VERTICAL_LAYOUT, baseURL); createImageDescriptor(ISVNUIConstants.IMG_COMMENTS, baseURL); // views createImageDescriptor(ISVNUIConstants.IMG_SVN_CONSOLE, baseURL); // Menues switch(iconSet) { case ISVNUIConstants.MENU_ICON_SET_TORTOISESVN: createImageDescriptor(ISVNUIConstants.IMG_MENU_UPDATE, "tortoise/update.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_COMMIT, "tortoise/commit.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_SYNC, "obj16/synch_synch.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_REVERT, "tortoise/revert.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_ADD, "tortoise/add.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_IGNORE, "tortoise/ignore.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_PROPSET, "ctool16/svn_prop_add.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_SHOWPROPERTY, "cview16/props_view.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_RELOCATE, "tortoise/relocate.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_CHECKOUTAS, "tortoise/checkout.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_IMPORTFOLDER, "tortoise/import.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_LOCK, "tortoise/lock.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_UNLOCK, "tortoise/unlock.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_CLEANUP, "tortoise/cleanup.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_EXPORT, "tortoise/export.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_DIFF, "tortoise/diff.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_PROPDELETE, "ctool16/delete.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_DELETE, "ctool16/delete.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_BRANCHTAG, "tortoise/copy.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_MOVE, "tortoise/rename.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_COMPARE, "tortoise/compare.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_RESOLVE, "tortoise/resolve.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_EDITCONFLICT, "tortoise/conflict.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_SWITCH, "tortoise/switch.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_MARKMERGED, "tortoise/merge.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_MERGE, "tortoise/merge.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_SHOWHISTORY, "cview16/history_view.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_ANNOTATE, "cview16/annotate_view.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_COPY, "ctool16/copy_edit.gif", baseURL); break; case ISVNUIConstants.MENU_ICON_SET_SUBVERSIVE: createImageDescriptor(ISVNUIConstants.IMG_MENU_UPDATE, "subversive/update.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_COMMIT, "subversive/commit.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_SYNC, "subversive/synch.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_REVERT, "subversive/revert.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_CHECKOUTAS, "subversive/checkout.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_LOCK, "subversive/lock.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_UNLOCK, "subversive/unlock.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_BRANCHTAG, "subversive/branch.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_SWITCH, "subversive/switch.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_MERGE, "subversive/merge.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_SHOWHISTORY, "subversive/showhistory.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_EXPORT, "subversive/export.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_IMPORTFOLDER, "subversive/import.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_ANNOTATE, "subversive/annotate.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_COPY, "subversive/copy.gif", baseURL); break; default: // CVS createImageDescriptor(ISVNUIConstants.IMG_MENU_MERGE, "tortoise/merge.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_SHOWHISTORY, "cview16/history_view.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_ANNOTATE, "cview16/annotate_view.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_COPY, "ctool16/copy_edit.gif", baseURL); createImageDescriptor(ISVNUIConstants.IMG_MENU_SHOWPROPERTY, "cview16/props_view.gif", baseURL); break; } } } LoadErrorHandler.java000066400000000000000000000020511203611042400375410ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/uipackage org.tigris.subversion.subclipse.ui; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.clientadapter.ILoadErrorHandler; import org.tigris.subversion.clientadapter.ISVNClientWrapper; import org.tigris.subversion.subclipse.ui.dialogs.LoadErrorDialog; public class LoadErrorHandler implements ILoadErrorHandler { private static boolean loadErrorHandled = false; public void handleLoadError(ISVNClientWrapper clientWrapper) { String svnInterface = SVNUIPlugin.getPlugin().getPreferenceStore().getString(ISVNUIConstants.PREF_SVNINTERFACE); if (svnInterface != null && !svnInterface.equals("javahl")) { return; } final String loadErrors = clientWrapper.getLoadErrors(); loadErrorHandled = true; if (!SVNUIPlugin.TEST_MODE) { Display.getDefault().syncExec(new Runnable() { public void run() { LoadErrorDialog dialog = new LoadErrorDialog(Display.getDefault().getActiveShell(), loadErrors); dialog.open(); } }); } } public static boolean loadErrorHandled() { return loadErrorHandled; } } MessageHandler.java000066400000000000000000000025341203611042400372420ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/uipackage org.tigris.subversion.subclipse.ui; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.subclipse.core.IMessageHandler; public class MessageHandler implements IMessageHandler { private boolean response; public void handleMessage(final String title, final String message, int severity) { switch (severity) { case IMessageHandler.ERROR: Display.getDefault().syncExec(new Runnable() { public void run() { MessageDialog.openError(Display.getDefault().getActiveShell(), title, message); } }); break; case IMessageHandler.WARNING: Display.getDefault().syncExec(new Runnable() { public void run() { MessageDialog.openWarning(Display.getDefault().getActiveShell(), title, message); } }); break; default: Display.getDefault().syncExec(new Runnable() { public void run() { MessageDialog.openInformation(Display.getDefault().getActiveShell(), title, message); } }); break; } } public boolean handleQuestion(final String title, final String question) { Display.getDefault().syncExec(new Runnable() { public void run() { response = MessageDialog.openQuestion(Display.getDefault().getActiveShell(), title, question); } }); return response; } } Messages.java000066400000000000000000000157511203611042400361340ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/uipackage org.tigris.subversion.subclipse.ui; import org.eclipse.osgi.util.NLS; public class Messages extends NLS { private static final String BUNDLE_NAME = "org.tigris.subversion.subclipse.ui.messages"; //$NON-NLS-1$ public static String BuiltInEditConflictsAction_0; public static String BuiltInEditConflictsAction_1; public static String BuiltInEditConflictsAction_2; public static String BuiltInEditConflictsAction_3; public static String CannotSharePage_0; public static String CannotSharePage_1; public static String CannotSharePage_2; public static String ConfigureTagsAction_1; public static String ConfigureTagsAction_2; public static String ConflictHandlingWizardPage_0; public static String ConflictHandlingWizardPage_1; public static String ConflictHandlingWizardPage_10; public static String ConflictHandlingWizardPage_11; public static String ConflictHandlingWizardPage_12; public static String ConflictHandlingWizardPage_13; public static String ConflictHandlingWizardPage_14; public static String ConflictHandlingWizardPage_15; public static String ConflictHandlingWizardPage_16; public static String ConflictHandlingWizardPage_17; public static String ConflictHandlingWizardPage_2; public static String ConflictHandlingWizardPage_3; public static String ConflictHandlingWizardPage_4; public static String ConflictHandlingWizardPage_5; public static String ConflictHandlingWizardPage_6; public static String ConflictHandlingWizardPage_7; public static String ConflictHandlingWizardPage_8; public static String ConflictHandlingWizardPage_9; public static String ConflictWizardDialog_0; public static String ConflictWizardDialog_1; public static String ConflictWizardDialog_2; public static String DialogWizard_0; public static String DialogWizard_1; public static String DialogWizard_2; public static String EditPropertyConflictsWizard_0; public static String EditPropertyConflictsWizardPropertyPage_0; public static String EditPropertyConflictsWizardPropertyPage_1; public static String EditPropertyConflictsWizardPropertyPage_2; public static String EditPropertyConflictsWizardPropertyPage_3; public static String EditPropertyConflictsWizardSummaryPage_1; public static String EditPropertyConflictsWizardSummaryPage_2; public static String EditPropertyConflictsWizardSummaryPage_3; public static String EditPropertyConflictsWizardSummaryPage_4; public static String FinishedEditingWizardPage_0; public static String FinishedEditingWizardPage_1; public static String FinishedEditingWizardPage_10; public static String FinishedEditingWizardPage_2; public static String FinishedEditingWizardPage_3; public static String FinishedEditingWizardPage_4; public static String FinishedEditingWizardPage_5; public static String FinishedEditingWizardPage_6; public static String FinishedEditingWizardPage_7; public static String FinishedEditingWizardPage_8; public static String FinishedEditingWizardPage_9; public static String LoadErrorDialog_0; public static String LoadErrorDialog_1; public static String LoadErrorDialog_2; public static String LoadErrorDialog_4; public static String Preferences_0; public static String PropertyValueSelectionWizardPage_0; public static String PropertyValueSelectionWizardPage_1; public static String PropertyValueSelectionWizardPage_2; public static String PropertyValueSelectionWizardPage_3; public static String PropertyValueSelectionWizardPage_4; public static String PropertyValueSelectionWizardPage_5; public static String ResolveTreeConflictWizard_compare; public static String ResolveTreeConflictWizard_compare2; public static String ResolveTreeConflictWizard_compareError; public static String ResolveTreeConflictWizard_deleteError; public static String ResolveTreeConflictWizard_editorClosed; public static String ResolveTreeConflictWizard_markResolvedError; public static String ResolveTreeConflictWizard_mergeError; public static String ResolveTreeConflictWizard_promptToReolve; public static String ResolveTreeConflictWizard_revertError; public static String ResolveTreeConflictWizard_title; public static String ResolveTreeConflictWizardMainPage_browse; public static String ResolveTreeConflictWizardMainPage_choose; public static String ResolveTreeConflictWizardMainPage_chooseBoth; public static String ResolveTreeConflictWizardMainPage_chooseIncoming; public static String ResolveTreeConflictWizardMainPage_compare; public static String ResolveTreeConflictWizardMainPage_compareEditorInformation; public static String ResolveTreeConflictWizardMainPage_compareMergeTarget; public static String ResolveTreeConflictWizardMainPage_compareTo; public static String ResolveTreeConflictWizardMainPage_conflictDescription; public static String ResolveTreeConflictWizardMainPage_conflictWillBeResolved; public static String ResolveTreeConflictWizardMainPage_delete; public static String ResolveTreeConflictWizardMainPage_fromWorkingCopy; public static String ResolveTreeConflictWizardMainPage_incoming; public static String ResolveTreeConflictWizardMainPage_inRepository; public static String ResolveTreeConflictWizardMainPage_into; public static String ResolveTreeConflictWizardMainPage_intoTarget; public static String ResolveTreeConflictWizardMainPage_lookingForCopiedToUrl; public static String ResolveTreeConflictWizardMainPage_markResolved; public static String ResolveTreeConflictWizardMainPage_merge; public static String ResolveTreeConflictWizardMainPage_message; public static String ResolveTreeConflictWizardMainPage_remove; public static String ResolveTreeConflictWizardMainPage_removeSelected; public static String ResolveTreeConflictWizardMainPage_resolutionSteps; public static String ResolveTreeConflictWizardMainPage_revert; public static String ResolveTreeConflictWizardMainPage_revertSelected; public static String ResolveTreeConflictWizardMainPage_selectMergeTarget; public static String ResolveTreeConflictWizardMainPage_selectCompareTarget; public static String ResolveTreeConflictWizardMainPage_selectCompareMergeTarget; public static String ResolveTreeConflictWizardMainPage_sourceLeft; public static String ResolveTreeConflictWizardMainPage_sourceRight; public static String ResolveTreeConflictWizardMainPage_specifySteps; public static String ResolveTreeConflictWizardMainPage_to; public static String ResolveTreeConflictWizardMainPage_to2; public static String SVNConflictResolver_0; public static String SVNConflictResolver_1; public static String SVNConflictResolver_2; public static String UnsupportedPasswordStoresDialog_0; public static String UnsupportedPasswordStoresDialog_1; public static String UnsupportedPasswordStoresDialog_2; public static String UnsupportedPasswordStoresDialog_3; public static String UnsupportedPasswordStoresDialog_5; public static String UnsupportedPasswordStoresDialog_6; public static String UnsupportedPasswordStoresDialog_7; public static String UnsupportedPasswordStoresDialog_8; static { // initialize resource bundle NLS.initializeMessages(BUNDLE_NAME, Messages.class); } private Messages() { } } OpenBugUrlAction.java000066400000000000000000000050631203611042400375400ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/uipackage org.tigris.subversion.subclipse.ui; import java.lang.reflect.InvocationTargetException; import java.net.MalformedURLException; import java.net.URL; import java.util.HashSet; import java.util.Iterator; import org.eclipse.jface.action.IAction; import org.eclipse.team.core.TeamException; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.ui.actions.WorkbenchWindowAction; import org.tigris.subversion.subclipse.ui.settings.ProjectProperties; import org.tigris.subversion.subclipse.ui.util.LinkList; public class OpenBugUrlAction extends WorkbenchWindowAction { public OpenBugUrlAction() { } protected void execute(IAction action) throws InvocationTargetException, InterruptedException { Object[] selectedObjects = selection.toArray(); HashSet urlsSet = new HashSet(); for (int i = 0; i < selectedObjects.length; i++) { if (selectedObjects[i] instanceof ILogEntry) { ILogEntry logEntry = (ILogEntry)selectedObjects[i]; try { ProjectProperties projectProperties = ProjectProperties.getProjectProperties(logEntry.getResource().getResource()); LinkList linkList = projectProperties.getLinkList(logEntry.getComment()); String[] urls = linkList.getUrls(); for (int j = 0; j < urls.length; j++) { urlsSet.add(urls[j]); } } catch (Exception e) { handle(e, null, null); } } } int i = 0; Iterator it = urlsSet.iterator(); while (it.hasNext()) { try { PlatformUI.getWorkbench().getBrowserSupport().createBrowser("bugurlbrowser" + (i++)).openURL(new URL((String) it.next())); } catch (Exception e) { handle(e, null, null); } } return; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#needsToSaveDirtyEditors() */ @Override protected boolean needsToSaveDirtyEditors() { return false; } protected boolean isEnabled() throws TeamException { Object[] selectedObjects = selection.toArray(); for (int i = 0; i < selectedObjects.length; i++) { if (selectedObjects[i] instanceof ILogEntry) { ILogEntry logEntry = (ILogEntry)selectedObjects[i]; ProjectProperties projectProperties = ProjectProperties.getProjectProperties(logEntry.getResource().getResource()); if (projectProperties == null) return false; LinkList linkList = projectProperties.getLinkList(logEntry.getComment()); return linkList.getUrls().length != 0; } } return false; } } Policy.java000066400000000000000000000073201203611042400356150ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui; import java.text.MessageFormat; import java.util.MissingResourceException; import java.util.ResourceBundle; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.SubProgressMonitor; public class Policy { public static boolean DEBUG_CONSOLE_BUFFERING = false; static { //init debug options if (SVNUIPlugin.getPlugin().isDebugging()) { DEBUG_CONSOLE_BUFFERING = "true".equalsIgnoreCase(Platform.getDebugOption(SVNUIPlugin.ID + "/consolebuffering")); //$NON-NLS-1$ //$NON-NLS-2$ } } private static final String BUNDLE_NAME = "org.tigris.subversion.subclipse.ui.messages"; //$NON-NLS-1$ protected static ResourceBundle bundle = null; private static ResourceBundle getResourceBundle() { if (bundle == null) { bundle = ResourceBundle.getBundle(BUNDLE_NAME); } return bundle; } /** * Lookup the message with the given ID in this catalog and bind its * substitution locations with the given string. */ public static String bind(String id, String binding) { return bind(id, new String[] { binding }); } /** * Lookup the message with the given ID in this catalog and bind its * substitution locations with the given strings. */ public static String bind(String id, String binding1, String binding2) { return bind(id, new String[] { binding1, binding2 }); } /** * Gets a string from the resource bundle. We don't want to crash because of a missing String. * Returns the key if not found. */ public static String bind(String key) { try { return getResourceBundle().getString(key); } catch (MissingResourceException e) { return key; } catch (NullPointerException e) { return "!" + key + "!"; //$NON-NLS-1$ //$NON-NLS-2$ } } /** * Gets a string from the resource bundle and binds it with the given arguments. If the key is * not found, return the key. */ public static String bind(String key, Object[] args) { try { return MessageFormat.format(bind(key), args); } catch (MissingResourceException e) { return key; } catch (NullPointerException e) { return "!" + key + "!"; //$NON-NLS-1$ //$NON-NLS-2$ } } /** * Progress monitor helpers */ public static void checkCanceled(IProgressMonitor monitor) { if (monitor.isCanceled()) throw new OperationCanceledException(); } public static IProgressMonitor monitorFor(IProgressMonitor monitor) { if (monitor == null) return new NullProgressMonitor(); return monitor; } public static IProgressMonitor subMonitorFor(IProgressMonitor monitor, int ticks) { if (monitor == null) return new NullProgressMonitor(); if (monitor instanceof NullProgressMonitor) return monitor; return new SubProgressMonitor(monitor, ticks); } public static IProgressMonitor subMonitorFor(IProgressMonitor monitor, int ticks, int style) { if (monitor == null) return new NullProgressMonitor(); if (monitor instanceof NullProgressMonitor) return monitor; return new SubProgressMonitor(monitor, ticks, style); } } Preferences.java000066400000000000000000000107261203611042400366230ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui; import java.io.File; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.subclipse.core.SVNClientManager; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.ui.dialogs.UnsupportedPasswordStoresDialog; /** * Initializes preferences and updates markers when preferences are changed */ public class Preferences implements IPropertyChangeListener { private IPreferenceStore store; public Preferences(IPreferenceStore store) { this.store = store; store.addPropertyChangeListener(this); } /** * Initializes various options by using the values from the preferences. To * be called during plugin initialization. */ public void initializeFromSettings() { setSvnClientConfigDir(store.getString(ISVNUIConstants.PREF_SVNCONFIGDIR)); setSvnClientInterface(store.getString(ISVNUIConstants.PREF_SVNINTERFACE)); setSvnChangePathOnDemand(store.getBoolean(ISVNUIConstants.PREF_FETCH_CHANGE_PATH_ON_DEMAND)); } /** * set the svn client interface * @param clientInterface */ private void setSvnClientInterface(String clientInterface) { SVNProviderPlugin.getPlugin().getSVNClientManager().setSvnClientInterface(clientInterface); } /** * set the svn client config dir * @param configDir */ private void setSvnClientConfigDir(String configDir) { if (SVNUIPlugin.getPlugin().passwordStoresConfiguredOnLinux()) { if (!SVNUIPlugin.TEST_MODE) { Display.getDefault().syncExec(new Runnable() { public void run() { UnsupportedPasswordStoresDialog dialog = new UnsupportedPasswordStoresDialog(Display.getDefault().getActiveShell()); if (dialog.open() == UnsupportedPasswordStoresDialog.OK) { try { SVNUIPlugin.getPlugin().clearPasswordStoresFromConfiguration(false); } catch (Exception e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); MessageDialog.openError(Display.getDefault().getActiveShell(), Messages.Preferences_0, e.getMessage()); } } } }); } } SVNProviderPlugin plugin = SVNProviderPlugin.getPlugin(); SVNClientManager svnClientManager = plugin.getSVNClientManager(); if (configDir == null || "".equals(configDir)) { //$NON-NLS-1$ svnClientManager.setConfigDir(null); } else { File configDirFile = new File(configDir); svnClientManager.setConfigDir(configDirFile); } } /** * @see IPropertyChangeListener#propertyChange(PropertyChangeEvent) */ public void propertyChange(PropertyChangeEvent event) { String property = event.getProperty(); if (property == ISVNUIConstants.PREF_SVNINTERFACE) { String newValue = (String)event.getNewValue(); setSvnClientInterface(newValue); } if (property == ISVNUIConstants.PREF_SVNCONFIGDIR) { String configDir = (String)event.getNewValue(); setSvnClientConfigDir(configDir); } if (property == ISVNUIConstants.PREF_FETCH_CHANGE_PATH_ON_DEMAND) { boolean fetchChangePathOnDemand = ((Boolean) event.getNewValue()).booleanValue(); setSvnChangePathOnDemand(fetchChangePathOnDemand); } } /** * @param fetchChangePathOnDemand */ private void setSvnChangePathOnDemand(boolean fetchChangePathOnDemand) { SVNProviderPlugin plugin = SVNProviderPlugin.getPlugin(); SVNClientManager svnClientManager = plugin.getSVNClientManager(); svnClientManager.setFetchChangePathOnDemand(fetchChangePathOnDemand); } } SVNFileModificationValidatorPrompt.java000066400000000000000000000042301203611042400432170ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui; import org.eclipse.core.resources.IFile; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.subclipse.core.resources.ISVNFileModificationValidatorPrompt; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardDialog; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardLockPage; public class SVNFileModificationValidatorPrompt implements ISVNFileModificationValidatorPrompt { private String comment; private boolean stealLock; private boolean success; private IFile[] files; public boolean prompt(IFile[] lockFiles, Object context) { if (context == null) { comment = ""; stealLock = false; return true; } this.files = lockFiles; success = false; SVNUIPlugin.getStandardDisplay().syncExec(new Runnable() { public void run() { SvnWizardLockPage lockPage = new SvnWizardLockPage(files); SvnWizard wizard = new SvnWizard(lockPage); SvnWizardDialog dialog = new SvnWizardDialog(Display.getCurrent().getActiveShell(), wizard); wizard.setParentDialog(dialog); if (dialog.open() == SvnWizardDialog.OK) { success = true; comment = lockPage.getComment(); stealLock = lockPage.isStealLock(); } } }); return success; } public String getComment() { return comment; } public boolean isStealLock() { return stealLock; } } SVNMarkerListener.java000066400000000000000000000112131203611042400376700ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.tigris.subversion.subclipse.core.IResourceStateChangeListener; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.conflicts.TreeConflictsView; public class SVNMarkerListener implements IResourceStateChangeListener { private boolean treeConflictsViewRefreshed; public SVNMarkerListener() { super(); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.IResourceStateChangeListener#resourceSyncInfoChanged(org.eclipse.core.resources.IResource[]) */ public void resourceSyncInfoChanged(IResource[] changedResources) { for (int i = 0; i < changedResources.length; i++) { try { if (changedResources[i].exists()) { changedResources[i].deleteMarkers("org.tigris.subversion.subclipse.ui.conflictMarker", true, IResource.DEPTH_ZERO); //$NON-NLS-1$ ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(changedResources[i]); LocalResourceStatus status = svnResource.getStatus(); if (status.isTextConflicted() || status.isPropConflicted() || status.hasTreeConflict()) { try { IMarker marker = changedResources[i].createMarker("org.tigris.subversion.subclipse.ui.conflictMarker"); //$NON-NLS-1$ setMessage(status, marker); marker.setAttribute(IMarker.SEVERITY, IMarker.SEVERITY_WARNING); marker.setAttribute("textConflict", status.isTextConflicted()); //$NON-NLS-1$ marker.setAttribute("propertyConflict", status.isPropConflicted()); //$NON-NLS-1$ marker.setAttribute("treeConflict", status.hasTreeConflict()); //$NON-NLS-1$ } catch (Exception e) { SVNUIPlugin.log(e.getMessage()); } } } } catch (Exception e) { SVNUIPlugin.log(e.getMessage()); } } if (!treeConflictsViewRefreshed) { treeConflictsViewRefreshed = TreeConflictsView.refresh(changedResources); } } private void setMessage(LocalResourceStatus status, IMarker marker) throws CoreException { int count = 0; if (status.isTextConflicted()) count++; if (status.isPropConflicted()) count++; if (status.hasTreeConflict()) count++; StringBuffer message = new StringBuffer(Policy.bind("SVNConflicts") + " ("); //$NON-NLS-1$ //$NON-NLS-2$ if (status.isTextConflicted()) { message.append("Text"); //$NON-NLS-1$ if (count == 2) message.append(" and "); //$NON-NLS-1$ if (count == 3) message.append(", "); //$NON-NLS-1$ } if (status.isPropConflicted()) { message.append("Property"); //$NON-NLS-1$ if (count == 3) message.append(" and "); //$NON-NLS-1$ } if (status.hasTreeConflict()) { message.append("Tree"); //$NON-NLS-1$ } if (count == 1) message.append(" Conflict"); //$NON-NLS-1$ else message.append(" Conflicts"); //$NON-NLS-1$ message.append(")"); //$NON-NLS-1$ marker.setAttribute(IMarker.MESSAGE, message.toString()); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.IResourceStateChangeListener#resourceModified(org.eclipse.core.resources.IResource[]) */ public void resourceModified(IResource[] changedResources) { } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.IResourceStateChangeListener#projectConfigured(org.eclipse.core.resources.IProject) */ public void projectConfigured(IProject project) { } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.core.IResourceStateChangeListener#projectDeconfigured(org.eclipse.core.resources.IProject) */ public void projectDeconfigured(IProject project) { } public void initialize() { treeConflictsViewRefreshed = false; } } SVNPerspective.java000066400000000000000000000047661203611042400372510ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui; import org.eclipse.team.ui.synchronize.ISynchronizeView; import org.eclipse.ui.IFolderLayout; import org.eclipse.ui.IPageLayout; import org.eclipse.ui.IPerspectiveFactory; import org.tigris.subversion.subclipse.ui.repository.RepositoriesView; public class SVNPerspective implements IPerspectiveFactory { /* (Non-javadoc) * Method declared on IPerpsectiveFactory */ public void createInitialLayout(IPageLayout layout) { defineActions(layout); defineLayout(layout); } /** * Defines the initial actions for a page. */ public void defineActions(IPageLayout layout) { // Add "new wizards". They will be present in File/New menu layout.addNewWizardShortcut("org.eclipse.ui.wizards.new.project"); //$NON-NLS-1$ layout.addNewWizardShortcut("org.eclipse.ui.wizards.new.folder"); //$NON-NLS-1$ layout.addNewWizardShortcut("org.eclipse.ui.wizards.new.file"); //$NON-NLS-1$ // Add "show views". They will be present in "show view" menu layout.addShowViewShortcut(IPageLayout.ID_RES_NAV); layout.addShowViewShortcut(IPageLayout.ID_OUTLINE); layout.addShowViewShortcut(IPageLayout.ID_TASK_LIST); layout.addShowViewShortcut(ISVNUIConstants.HISTORY_VIEW_ID); layout.addShowViewShortcut(RepositoriesView.VIEW_ID); layout.addShowViewShortcut(ISynchronizeView.VIEW_ID); // Add "perspective short cut" layout.addPerspectiveShortcut("org.eclipse.ui.resourcePerspective"); //$NON-NLS-1$ layout.addPerspectiveShortcut("org.eclipse.team.ui.TeamSynchronizingPerspective"); //$NON-NLS-1$ } /** * Defines the initial layout for a page. */ public void defineLayout(IPageLayout layout) { String editorArea = layout.getEditorArea(); IFolderLayout top = layout.createFolder("top", IPageLayout.LEFT, 0.40f, editorArea); //$NON-NLS-1$ top.addView(RepositoriesView.VIEW_ID); layout.addView(ISVNUIConstants.HISTORY_VIEW_ID, IPageLayout.BOTTOM, 0.70f, editorArea); layout.setEditorAreaVisible(true); } } SVNPristineCopyQuickDiffProvider.java000066400000000000000000000343601203611042400427020ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui; import java.io.BufferedReader; import java.io.CharArrayWriter; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.IDocument; import org.eclipse.team.core.TeamException; import org.eclipse.team.core.subscribers.ISubscriberChangeEvent; import org.eclipse.team.core.subscribers.ISubscriberChangeListener; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.editors.text.IStorageDocumentProvider; import org.eclipse.ui.texteditor.IDocumentProvider; import org.eclipse.ui.texteditor.IElementStateListener; import org.eclipse.ui.texteditor.ITextEditor; import org.eclipse.ui.texteditor.quickdiff.IQuickDiffReferenceProvider; import org.tigris.subversion.subclipse.core.ISVNLocalFile; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.core.sync.SVNWorkspaceSubscriber; /** * A QuickDiff provider that provides a reference to the pristine copy of a file * managed in the SVN repository. The provider notifies when the file's sync state changes * and the diff should be recalculated (e.g. commit, update...) or when the file * is changed (e.g. replace with). * * Here are the file states and what this provider does for each: * * 1. File is unmanaged : reference == empty document * 2. Unmanaged file transitions to managed : empty reference updated with new remote revision * 3. A managed file has new remote (commit, refresh remote) : reference updated with new * remote revision * 4. A managed file cleaned, remote is the same (replace with, update) : refresh diff bar * with existing reference * * [Note: Currently an empty document must be returned for an unmanaged file. This * results in the entire document appearing as outgoing changes in the quickdiff bar. * This is required because the quickdiff support relies on IDocument change events * to update the quickdiff, and returning null for the reference document doesn't * allow the transition to later return a IDocument.] * * TODO add sync listener support * * @since 3.0 */ public class SVNPristineCopyQuickDiffProvider implements IQuickDiffReferenceProvider { // The editor showing this quickdiff and provides access to the editor input and // ultimatly the IFile. private ITextEditor editor = null; // The document containing the remote file. Can be null if the assigned editor doesn't have // a SVN remote resource associated with it. private IDocument referenceDocument = null; // Will be true when the document has been read and initialized. private boolean isReferenceInitialized = false; // Document provider allows us to register/deregister the element state change listener. private IDocumentProvider documentProvider = null; // Unique id for this reference provider as set via setId(). private String id; // A handle to the remote SVN file for this provider. private SyncInfo fLastSyncState; // Job that re-creates the reference document. private Job fUpdateJob; private boolean DEBUG = false; /** * Updates the document if a sync changes occurs to the associated SVN file. */ private ISubscriberChangeListener teamChangeListener = new ISubscriberChangeListener() { public void subscriberResourceChanged(ISubscriberChangeEvent[] deltas) { if(isReferenceInitialized) { for (int i = 0; i < deltas.length; i++) { ISubscriberChangeEvent delta = deltas[i]; IResource resource = delta.getResource(); if(resource.getType() == IResource.FILE && fLastSyncState != null && resource.equals(fLastSyncState.getLocal())) { if(delta.getFlags() == ISubscriberChangeEvent.SYNC_CHANGED) { fetchContentsInJob(); } } } } } }; /** * Updates the document if the document is changed (e.g. replace with) */ private IElementStateListener documentListener = new IElementStateListener() { public void elementDirtyStateChanged(Object element, boolean isDirty) { } public void elementContentAboutToBeReplaced(Object element) { } public void elementContentReplaced(Object element) { if(editor != null && editor.getEditorInput() == element) { fetchContentsInJob(); } } public void elementDeleted(Object element) { } public void elementMoved(Object originalElement, Object movedElement) { } }; /* * @see org.eclipse.test.quickdiff.DocumentLineDiffer.IQuickDifreferenceDocumentProvider#getReference() */ public IDocument getReference(IProgressMonitor monitor) throws CoreException { if(! isReferenceInitialized) return null; if (referenceDocument == null) { readDocument(monitor); } return referenceDocument; } /* (non-Javadoc) * @see org.eclipse.ui.texteditor.quickdiff.IQuickDiffProviderImplementation#setActiveEditor(org.eclipse.ui.texteditor.ITextEditor) */ public void setActiveEditor(ITextEditor targetEditor) { if(! (targetEditor.getEditorInput() instanceof IFileEditorInput)) return; editor = targetEditor; documentProvider= editor.getDocumentProvider(); if(documentProvider != null) { SVNWorkspaceSubscriber.getInstance().addListener(teamChangeListener); ((IDocumentProvider)documentProvider).addElementStateListener(documentListener); } isReferenceInitialized= true; } /* (non-Javadoc) * @see org.eclipse.ui.texteditor.quickdiff.IQuickDiffProviderImplementation#isEnabled() */ public boolean isEnabled() { if (! isReferenceInitialized) return false; try { return getManagedSVNFile() != null; } catch (SVNException e) { return false; } } /* * @see org.eclipse.jface.text.source.diff.DocumentLineDiffer.IQuickDifreferenceDocumentProvider#dispose() */ public void dispose() { isReferenceInitialized = false; // stop update job if(fUpdateJob != null && fUpdateJob.getState() != Job.NONE) { fUpdateJob.cancel(); } // remove listeners if(documentProvider != null) { documentProvider.removeElementStateListener(documentListener); } SVNWorkspaceSubscriber.getInstance().removeListener(teamChangeListener); } /* * @see org.eclipse.quickdiff.QuickDiffTestPlugin.IQuickDiffProviderImplementation#setId(java.lang.String) */ public void setId(String id) { this.id= id; } /* * @see org.eclipse.jface.text.source.diff.DocumentLineDiffer.IQuickDifreferenceDocumentProvider#getId() */ public String getId() { return id; } /** * Determine if the file represented by this quickdiff provider has changed with * respect to it's remote state. Return true if the remote contents should be * refreshed, and false if not. */ private boolean computeChange(IProgressMonitor monitor) throws TeamException { boolean needToUpdateReferenceDocument = false; if(isReferenceInitialized) { SyncInfo info = getSyncState(getFileFromEditor()); if(info == null && fLastSyncState != null) { return true; } else if(info == null) { return false; } if(fLastSyncState == null) { needToUpdateReferenceDocument = true; } else if(! fLastSyncState.equals(info)) { needToUpdateReferenceDocument = true; } if(DEBUG) debug(fLastSyncState, info); fLastSyncState = info; } return needToUpdateReferenceDocument; } private void debug(SyncInfo lastSyncState, SyncInfo info) { String last = "[none]"; //$NON-NLS-1$ if(lastSyncState != null) { last = lastSyncState.toString(); } System.out.println("+ SVNQuickDiff: was " + last + " is " + info.toString()); //$NON-NLS-1$ //$NON-NLS-2$ } private SyncInfo getSyncState(IResource resource) throws TeamException { if (resource == null) return null; return SVNWorkspaceSubscriber.getInstance().getSyncInfo(resource); } /** * Creates a document and initializes it with the contents of a SVN remote * resource. * @param monitor the progress monitor * @throws CoreException */ private void readDocument(IProgressMonitor monitor) throws CoreException { if(! isReferenceInitialized) return; if(referenceDocument == null) referenceDocument = new Document(); if(computeChange(monitor)) { ISVNRemoteFile remoteFile = (ISVNRemoteFile)fLastSyncState.getBase(); if (remoteFile != null && documentProvider instanceof IStorageDocumentProvider) { IStorageDocumentProvider provider= (IStorageDocumentProvider) documentProvider; String encoding= provider.getEncoding(editor.getEditorInput()); if (encoding == null) { encoding= provider.getDefaultEncoding(); } if(monitor.isCanceled()) return; InputStream stream= remoteFile.getStorage(monitor).getContents(); if (stream == null || monitor.isCanceled() || ! isReferenceInitialized) { return; } setDocumentContent(referenceDocument, stream, encoding); } else { // the remote is null, so ensure that the document is null if(monitor.isCanceled()) return; referenceDocument.set(""); //$NON-NLS-1$ } if(DEBUG) System.out.println("+ SVNQuickDiff: updating document " + (referenceDocument!=null ? "remote found" : "remote empty")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } } // /** // * Creates a document and initializes it with the contents of a SVN remote // * resource. // * @param monitor the progress monitor // * @throws CoreException // */ // private void readDocument(IProgressMonitor monitor) throws CoreException { // if(! isReferenceInitialized) return; // if(referenceDocument == null) // referenceDocument = new Document(); // // ISVNLocalFile localFile = getManagedSVNFile(); // // // TODO shouldn't have to defend against base revisions not existing for added files // if (!localFile.getStatus().isAdded() && documentProvider instanceof IStorageDocumentProvider) { // IStorageDocumentProvider provider= (IStorageDocumentProvider) documentProvider; // String encoding= provider.getEncoding(editor.getEditorInput()); // if (encoding == null) { // encoding= provider.getDefaultEncoding(); // } // if(monitor.isCanceled()) return; // // ISVNRemoteResource remoteFile = localFile.getBaseResource(); // if (remoteFile == null || monitor.isCanceled() || ! isReferenceInitialized) { // return; // } // setDocumentContent(referenceDocument, remoteFile.getStorage(monitor).getContents(), encoding); // } else { // if(monitor.isCanceled()) return; // referenceDocument.set(""); //$NON-NLS-1$ // } // if(DEBUG) System.out.println("+ SVNQuickDiff: updating document " + (referenceDocument!=null ? "remote found" : "remote empty")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ // } /** * Intitializes the given document with the given stream using the given encoding. * * @param document the document to be initialized * @param contentStream the stream which delivers the document content * @param encoding the character encoding for reading the given stream * @exception CoreException if the given stream can not be read */ private static void setDocumentContent(IDocument document, InputStream contentStream, String encoding) throws CoreException { Reader in= null; try { final int DEFAULT_FILE_SIZE= 15 * 1024; in= new BufferedReader(new InputStreamReader(contentStream, encoding), DEFAULT_FILE_SIZE); CharArrayWriter caw= new CharArrayWriter(DEFAULT_FILE_SIZE); char[] readBuffer= new char[2048]; int n= in.read(readBuffer); while (n > 0) { caw.write(readBuffer, 0, n); n= in.read(readBuffer); } document.set(caw.toString()); } catch (IOException x) { throw new SVNException(Policy.bind("RemoteRevisionQuickDiffProvider.readingFile"), x); //$NON-NLS-1$ } finally { if (in != null) { try { in.close(); } catch (IOException x) { throw new SVNException(Policy.bind("RemoteRevisionQuickDiffProvider.closingFile"), x); //$NON-NLS-1$ } } } } /** * Returns the ISVNFile associated with he active editor or null * if the provider doesn't not have access to a SVN managed file. * @return the handle to a SVN file */ private ISVNLocalFile getManagedSVNFile() throws SVNException { if(editor != null) { IFile file = getFileFromEditor(); if(file != null) { ISVNLocalFile svnFile = SVNWorkspaceRoot.getSVNFileFor(file); if (svnFile.exists() && svnFile.isManaged()) { return svnFile; } return null; } } return null; } private IFile getFileFromEditor() { if(editor != null) { IEditorInput input= editor.getEditorInput(); if (input instanceof IFileEditorInput) { return ((IFileEditorInput)input).getFile(); } } return null; } /** * Runs a job that updates the document. If a previous job is already running it * is stopped before the new job can start. */ private void fetchContentsInJob() { if(! isReferenceInitialized) return; if(fUpdateJob != null && fUpdateJob.getState() != Job.NONE) { fUpdateJob.cancel(); } fUpdateJob = new Job(Policy.bind("RemoteRevisionQuickDiffProvider.fetchingFile")) { //$NON-NLS-1$ protected IStatus run(IProgressMonitor monitor) { try { readDocument(monitor); } catch (CoreException e) { // continue and return ok for now. The error will be reported // when the quick diff supports calls getReference() again. // continue } return Status.OK_STATUS; } }; fUpdateJob.schedule(); } } SVNUIPlugin.java000066400000000000000000000773351203611042400364560ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui; import java.io.BufferedReader; import java.io.BufferedWriter; import java.io.File; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.net.URL; import java.util.ArrayList; import java.util.Arrays; import org.eclipse.core.resources.IResourceStatus; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.IExtensionRegistry; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Plugin; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.content.IContentDescription; import org.eclipse.core.runtime.content.IContentTypeManager; import org.eclipse.core.runtime.preferences.InstanceScope; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.ImageRegistry; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.TeamException; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.osgi.framework.BundleContext; import org.osgi.service.prefs.BackingStoreException; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNClientManager; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNStatus; import org.tigris.subversion.subclipse.core.resources.BaseResourceStorageFactory; import org.tigris.subversion.subclipse.ui.actions.SVNPluginAction; import org.tigris.subversion.subclipse.ui.actions.ShowOutOfDateFoldersAction; import org.tigris.subversion.subclipse.ui.actions.WorkspaceAction; import org.tigris.subversion.subclipse.ui.authentication.SVNPromptUserPassword; import org.tigris.subversion.subclipse.ui.compare.UIBaseResourceStorageFactory; import org.tigris.subversion.subclipse.ui.conflicts.MergeFileAssociation; import org.tigris.subversion.subclipse.ui.console.SVNOutputConsole; import org.tigris.subversion.subclipse.ui.repository.RepositoryManager; import org.tigris.subversion.subclipse.ui.repository.model.SVNAdapterFactory; import org.tigris.subversion.subclipse.ui.util.SimpleDialogsHelper; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; /** * UI Plugin for Subversion provider-specific workbench functionality. */ public class SVNUIPlugin extends AbstractUIPlugin { /** * The id of the SVN plug-in */ public static final String ID = "org.tigris.subversion.subclipse.ui"; //$NON-NLS-1$ public static final String DECORATOR_ID = "org.tigris.subversion.subclipse.ui.decorator"; //$NON-NLS-1$ public static final String PROVIDER_ID="org.tigris.subversion.subclipse.core.svnnature"; //$NON-NLS-1$ // Merge provider extension point ID public static final String MERGE_PROVIDERS = "org.tigris.subversion.subclipse.ui.mergeProviders"; //$NON-NLS-1$ // Commit Dialog extension points public static final String COMMIT_DIALOG_TOOLBAR_ACTIONS = "org.tigris.subversion.subclipse.ui.commitDialogToolBarActions"; //$NON-NLS-1$ public static final String COMMIT_DIALOG_COMPARE_ACTIONS = "org.tigris.subversion.subclipse.ui.commitDialogCompareActions"; //$NON-NLS-1$ /** * Property constant indicating the decorator configuration has changed. */ public static final String P_DECORATORS_CHANGED = SVNUIPlugin.ID + ".P_DECORATORS_CHANGED"; //$NON-NLS-1$ /** * The singleton plug-in instance */ private static SVNUIPlugin plugin; private static boolean loadErrorHandled = false; /** * The repository manager */ private RepositoryManager repositoryManager; private ImageDescriptors imageDescriptors; private Preferences preferences; private static WorkspaceAction[] mergeProviders; private static SVNPluginAction[] commitDialogToolBarActions; private static SVNPluginAction[] commitDialogCompareActions; // // Property change listener // IPropertyChangeListener teamUIListener = new IPropertyChangeListener() { // public void propertyChange(PropertyChangeEvent event) { // if (event.getProperty().equals(TeamUI.GLOBAL_IGNORES_CHANGED)) { // SVNLightweightDecorator.refresh(); // } // } // }; private SVNMarkerListener markerListener; private ShowOutOfDateFoldersAction showOutOfDateFoldersAction; public static final boolean TEST_MODE; static { String application = System.getProperty("eclipse.application", ""); if (application.length() > 0) { TEST_MODE = application.endsWith("testapplication") || application.endsWith("uitest"); } else { String commands = System.getProperty("eclipse.commands", ""); TEST_MODE = commands.contains("testapplication\n"); } } public static void log(CoreException e) { log(e.getStatus().getSeverity(), Policy.bind("simpleInternal"), e); //$NON-NLS-1$ } public static void log(int severity, String message, Throwable e) { log(new Status(severity, ID, 0, message, e)); } public SVNUIPlugin(){ super(); plugin = this; } /** * Convenience method to get the currently active workbench page. Note that * the active page may not be the one that the usr perceives as active in * some situations so this method of obtaining the activae page should only * be used if no other method is available. * * @return the active workbench page */ public static IWorkbenchPage getActivePage() { IWorkbenchWindow window = getPlugin().getWorkbench().getActiveWorkbenchWindow(); if (window == null) return null; return window.getActivePage(); } /** * Creates a busy cursor and runs the specified runnable. * May be called from a non-UI thread. * * @param parent the parent Shell for the dialog * @param cancelable if true, the dialog will support cancelation * @param runnable the runnable * * @exception InvocationTargetException when an exception is thrown from the runnable * @exception InterruptedException when the progress monitor is cancelled */ public static void runWithProgress(Shell parent, boolean cancelable, final IRunnableWithProgress runnable) throws InvocationTargetException, InterruptedException { boolean createdShell = false; try { if (parent == null || parent.isDisposed()) { Display display = Display.getCurrent(); if (display == null) { // cannot provide progress (not in UI thread) runnable.run(new NullProgressMonitor()); return; } // get the active shell or a suitable top-level shell parent = display.getActiveShell(); if (parent == null) { parent = new Shell(display); createdShell = true; } } // pop up progress dialog after a short delay final Exception[] holder = new Exception[1]; BusyIndicator.showWhile(parent.getDisplay(), new Runnable() { public void run() { try { runnable.run(new NullProgressMonitor()); } catch (InvocationTargetException e) { holder[0] = e; } catch (InterruptedException e) { holder[0] = e; } } }); if (holder[0] != null) { if (holder[0] instanceof InvocationTargetException) { throw (InvocationTargetException) holder[0]; } else { throw (InterruptedException) holder[0]; } } //new TimeoutProgressMonitorDialog(parent, TIMEOUT).run(true /*fork*/, cancelable, runnable); } finally { if (createdShell) parent.dispose(); } } /** * Returns the singleton plug-in instance. * * @return the plugin instance */ public static SVNUIPlugin getPlugin() { return plugin; } /** * Returns the repository manager * * @return the repository manager */ public synchronized RepositoryManager getRepositoryManager() { if (repositoryManager == null) { repositoryManager = new RepositoryManager(); repositoryManager.startup(); } return repositoryManager; } /** * Convenience method for logging statuses to the plugin log * * @param status the status to log */ public static void log(IStatus status) { getPlugin().getLog().log(status); } public static void log(String msg) { getPlugin().getLog().log(new Status(IStatus.INFO, SVNUIPlugin.ID, 0, msg, null)); } public static void log(TeamException e) { getPlugin().getLog().log(new Status(e.getStatus().getSeverity(), SVNUIPlugin.ID, 0, Policy.bind("simpleInternal"), e)); //$NON-NLS-1$ } // flags to tailor error reporting public static final int PERFORM_SYNC_EXEC = 1; public static final int LOG_TEAM_EXCEPTIONS = 2; public static final int LOG_CORE_EXCEPTIONS = 4; public static final int LOG_OTHER_EXCEPTIONS = 8; public static final int LOG_NONTEAM_EXCEPTIONS = LOG_CORE_EXCEPTIONS | LOG_OTHER_EXCEPTIONS; private SVNOutputConsole console; private URL baseURL; /** * Convenience method for showing an error dialog * @param shell a valid shell or null * @param exception the exception to be report * @param title the title to be displayed * @return IStatus the status that was displayed to the user */ public static IStatus openError(Shell shell, String title, String message, Throwable exception) { return openError(shell, title, message, exception, LOG_OTHER_EXCEPTIONS); } /** * Convenience method for showing an error dialog * @param shell a valid shell or null * @param exception the exception to be report * @param title the title to be displayed * @param flags customizing attributes for the error handling * @return IStatus the status that was displayed to the user */ public static IStatus openError(Shell providedShell, String title, String message, Throwable exception, int flags) { // Unwrap InvocationTargetExceptions if (exception instanceof InvocationTargetException) { Throwable target = ((InvocationTargetException)exception).getTargetException(); // re-throw any runtime exceptions or errors so they can be handled by the workbench if (target instanceof RuntimeException) { throw (RuntimeException)target; } if (target instanceof Error) { throw (Error)target; } return openError(providedShell, title, message, target, flags); } // Determine the status to be displayed (and possibly logged) IStatus status = null; boolean log = false; if (exception instanceof CoreException) { status = ((CoreException)exception).getStatus(); log = ((flags & LOG_CORE_EXCEPTIONS) > 0); } else if (exception instanceof TeamException) { status = ((TeamException)exception).getStatus(); log = ((flags & LOG_TEAM_EXCEPTIONS) > 0); } else if (exception instanceof InterruptedException) { return new SVNStatus(IStatus.OK, Policy.bind("ok")); //$NON-NLS-1$ } else if (exception != null) { status = new SVNStatus(IStatus.ERROR, Policy.bind("internal"), exception); //$NON-NLS-1$ log = ((flags & LOG_OTHER_EXCEPTIONS) > 0); if (title == null) title = Policy.bind("SimpleInternal"); //$NON-NLS-1$ } // Check for a build error and report it differently if (status.getCode() == IResourceStatus.BUILD_FAILED) { message = Policy.bind("buildError"); //$NON-NLS-1$ log = true; } // Check for multi-status with only one child if (status.isMultiStatus() && status.getChildren().length == 1) { status = status.getChildren()[0]; } if (status.isOK()) return status; // Log if the user requested it if (log) SVNUIPlugin.log(status); // Create a runnable that will display the error status String svnInterface = SVNUIPlugin.getPlugin().getPreferenceStore().getString(ISVNUIConstants.PREF_SVNINTERFACE); boolean loadError = svnInterface.equals("javahl") && status != null && status.getMessage() != null && status.getMessage().equals(SVNClientManager.UNABLE_TO_LOAD_DEFAULT_CLIENT); if (!loadError || loadErrorHandled) { final String displayTitle = title; final String displayMessage = message; final IStatus displayStatus = status; final IOpenableInShell openable = new IOpenableInShell() { public void open(Shell shell) { if (displayStatus.getSeverity() == IStatus.INFO && !displayStatus.isMultiStatus()) { MessageDialog.openInformation(shell, Policy.bind("information"), displayStatus.getMessage()); //$NON-NLS-1$ } else { ErrorDialog.openError(shell, displayTitle, displayMessage, displayStatus); } } }; openDialog(providedShell, openable, flags); } if (loadError) loadErrorHandled = true; // return the status we display return status; } /** * Interface that allows a shell to be passed to an open method. The * provided shell can be used without sync-execing, etc. */ public interface IOpenableInShell { public void open(Shell shell); } /** * Open the dialog code provided in the IOpenableInShell, ensuring that * the provided whll is valid. This method will provide a shell to the * IOpenableInShell if one is not provided to the method. * * @param providedShell * @param openable * @param flags */ public static void openDialog(Shell providedShell, final IOpenableInShell openable, int flags) { // If no shell was provided, try to get one from the active window if (providedShell == null) { IWorkbenchWindow window = SVNUIPlugin.getPlugin().getWorkbench().getActiveWorkbenchWindow(); if (window != null) { providedShell = window.getShell(); // sync-exec when we do this just in case flags = flags | PERFORM_SYNC_EXEC; } } // Create a runnable that will display the error status final Shell shell = providedShell; Runnable outerRunnable = new Runnable() { public void run() { Shell displayShell; if (shell == null) { Display display = Display.getCurrent(); displayShell = new Shell(display); } else { displayShell = shell; } openable.open(displayShell); if (shell == null) { displayShell.dispose(); } } }; // Execute the above runnable as determined by the parameters if (shell == null || (flags & PERFORM_SYNC_EXEC) > 0) { Display display; if (shell == null) { display = Display.getCurrent(); if (display == null) { display = Display.getDefault(); } } else { display = shell.getDisplay(); } display.syncExec(outerRunnable); } else { outerRunnable.run(); } } public void start(BundleContext ctxt)throws Exception{ super.start(ctxt); mergeProviders = getMergeProviders(); BaseResourceStorageFactory.setCurrent(new UIBaseResourceStorageFactory()); SVNAdapterFactory factory = new SVNAdapterFactory(); Platform.getAdapterManager().registerAdapters(factory, ISVNRemoteFile.class); Platform.getAdapterManager().registerAdapters(factory, ISVNRemoteFolder.class); Platform.getAdapterManager().registerAdapters(factory, ISVNRepositoryLocation.class); // Platform.getAdapterManager().registerAdapters(factory, RepositoryRoot.class); baseURL = ctxt.getBundle().getEntry("/"); //$NON-NLS-1$ preferences = new Preferences(getPreferenceStore()); preferences.initializeFromSettings(); markerListener = new SVNMarkerListener(); SVNProviderPlugin.addResourceStateChangeListener(markerListener); // // if the global ignores list is changed then update decorators. //TeamUI.getSynchronizeManager().addSynchronizeParticipants(new ISynchronizeParticipant[]{new SVNWorkspaceSynchronizeParticipant()}); try { console = new SVNOutputConsole(); } catch (RuntimeException e) { // Don't let the console bring down the SVN UI log(IStatus.ERROR, "Errors occurred starting the SVN console", e); //$NON-NLS-1$ } SVNProviderPlugin.getPlugin().setSvnPromptUserPassword(new SVNPromptUserPassword()); SVNProviderPlugin.getPlugin().setSimpleDialogsHelper(new SimpleDialogsHelper()); SVNProviderPlugin.getPlugin().setSvnFileModificationValidatorPrompt(new SVNFileModificationValidatorPrompt()); showOutOfDateFoldersAction = new ShowOutOfDateFoldersAction(); } /** * @see Plugin#shutdown() */ public void stop(BundleContext ctxt) throws Exception { super.stop(ctxt); // TeamUI.removePropertyChangeListener(listener); try { if (repositoryManager != null) repositoryManager.shutdown(); } catch (TeamException e) { throw new CoreException(e.getStatus()); } console.shutdown(); } public void clearPasswordStoresFromConfiguration(boolean restart) throws Exception { Exception exception = null; File configFile = getConfigFile(); if (configFile.exists()) { File temp = null; boolean written = false; String newLine = System.getProperty("line.separator"); BufferedReader input = null; BufferedWriter output = null; try { temp = File.createTempFile("config", null, configFile.getParentFile()); input = new BufferedReader(new FileReader(configFile)); output = new BufferedWriter(new FileWriter(temp)); String line = null; boolean authSectionFound = false; boolean passwordStoresFound = false; boolean inAuthSection = false; while ((line = input.readLine()) != null){ if (line.startsWith("[auth]")) { authSectionFound = true; inAuthSection = true; } else { if (line.startsWith("[")) { if (inAuthSection && !passwordStoresFound) { output.write("password-stores =" + newLine); } inAuthSection = false; } } if (line.startsWith("password-stores =")) { passwordStoresFound = true; if (!line.trim().endsWith("password-stores =")) { line = "password-stores ="; } } if (line.startsWith("password-stores=")) { passwordStoresFound = true; if (!line.trim().endsWith("password-stores=")) { line = "password-stores="; } } output.write(line + newLine); } if (!authSectionFound) { output.write("[auth]" + newLine + "password-stores ="); } else { if (inAuthSection && !passwordStoresFound) { output.write("password-stores =" + newLine); } } written = true; } catch (Exception e) { exception = e; } finally { if (input != null) { try { input.close(); } catch (IOException e) {} } if (output != null) { try { output.close(); } catch (IOException e) {} } } if (exception != null) { throw exception; } if (written) { configFile.renameTo(new File(configFile.getParentFile(), "config_backup")); temp.renameTo(configFile); if (restart) { PlatformUI.getWorkbench().restart(); } } else { if (temp != null && temp.exists()) { temp.deleteOnExit(); } } } } public File getConfigFile() { File configDir; String configDirPath = getPreferenceStore().getString(ISVNUIConstants.PREF_SVNCONFIGDIR); if (configDirPath == null || configDirPath.trim().length() == 0) { File homeDirectory = new File(System.getProperty("user.home")); configDir = new File(homeDirectory, ".subversion"); } else { configDir = new File(configDirPath); } File configFile = new File(configDir, "config"); return configFile; } public String getPasswordStores() { String passwordStores = null; File configFile = getConfigFile(); if (configFile.exists()) { BufferedReader input = null; try { input = new BufferedReader(new FileReader(configFile)); String line = null; while ((line = input.readLine()) != null){ if (line.startsWith("password-stores =") || line.startsWith("password-stores=")) { if (!line.trim().endsWith("=")) { int index = line.indexOf("="); passwordStores = line.substring(index + 1); } break; } } } catch (Exception e) {} finally { if (input != null) { try { input.close(); } catch (IOException e) {} } } } return passwordStores; } public boolean passwordStoresConfiguredOnLinux() { if (System.getProperty("os.name").toLowerCase().indexOf("linux") == -1) { return false; } String svnInterface = getPreferenceStore().getString(ISVNUIConstants.PREF_SVNINTERFACE); if (svnInterface != null && !svnInterface.equals("javahl")) { return false; } boolean passwordStoresFound = false; boolean valueIsGnomeKeyring = false; File configFile = getConfigFile(); if (!configFile.exists()) { ISVNClientAdapter client = null; try { // This is ja hack to cause the config file to be created so that we // can offer to fix it. We are using a non-existant path so that it will // just end quickly. client = SVNProviderPlugin.getPlugin().getSVNClientManager().getSVNClient(); client.cleanup(new File("/This/is/just/a/dummy/file")); } catch (Exception e) {} finally { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } } if (!configFile.exists()) return false; BufferedReader input = null; try { input = new BufferedReader(new FileReader(configFile)); String line = null; while ((line = input.readLine()) != null){ if (line.startsWith("password-stores =")) { passwordStoresFound = true; if (!line.trim().endsWith("password-stores =")) { valueIsGnomeKeyring = line.indexOf("gnome-keyring") != -1; } break; } if (line.startsWith("password-stores=")) { passwordStoresFound = true; if (!line.trim().endsWith("password-stores=")) { valueIsGnomeKeyring = line.indexOf("gnome-keyring") != -1; } break; } } } catch (Exception e) {} finally { if (input != null) { try { input.close(); } catch (IOException e) {} } } return valueIsGnomeKeyring || !passwordStoresFound; } /** Returns all the commit dialog toolbar actions that were found from the extension point. */ public static SVNPluginAction[] getCommitDialogToolBarActions() { if (commitDialogToolBarActions == null) { ArrayList actionsList = new ArrayList(); IConfigurationElement[] elements = Platform.getExtensionRegistry().getConfigurationElementsFor(COMMIT_DIALOG_TOOLBAR_ACTIONS); for (int i = 0; i < elements.length; i++) { SVNPluginAction action = new SVNPluginAction(elements[i]); if (action.getDelegate() != null) { actionsList.add(action); } } commitDialogToolBarActions = new SVNPluginAction[actionsList.size()]; actionsList.toArray(commitDialogToolBarActions); } return commitDialogToolBarActions; } /** Returns the commit dialog compare actions found from the extension point. */ public static SVNPluginAction[] getCommitDialogCompareActions() { if (commitDialogCompareActions == null) { ArrayList actionsList = new ArrayList(); IConfigurationElement[] elements = Platform.getExtensionRegistry().getConfigurationElementsFor(COMMIT_DIALOG_COMPARE_ACTIONS); for (int i = 0; i < elements.length; i++) { SVNPluginAction action = new SVNPluginAction(elements[i]); if (action.getDelegate() != null) { actionsList.add(action); } } commitDialogCompareActions = new SVNPluginAction[actionsList.size()]; actionsList.toArray(commitDialogCompareActions); } return commitDialogCompareActions; } // Initialize the merge providers by searching the registry for users of the // mergeProviders extension point. public static WorkspaceAction[] getMergeProviders() throws Exception { if (mergeProviders == null) { ArrayList mergeProviderList = new ArrayList(); IExtensionRegistry extensionRegistry = Platform.getExtensionRegistry(); IConfigurationElement[] configurationElements = extensionRegistry.getConfigurationElementsFor(MERGE_PROVIDERS); for (int i = 0; i < configurationElements.length; i++) { IConfigurationElement configurationElement = configurationElements[i]; WorkspaceAction mergeProvider = (WorkspaceAction)configurationElement.createExecutableExtension("class"); //$NON-NLS-1$ mergeProvider.setName(configurationElement.getAttribute("name")); //$NON-NLS-1$ mergeProviderList.add(mergeProvider); } mergeProviders = new WorkspaceAction[mergeProviderList.size()]; mergeProviderList.toArray(mergeProviders); } return mergeProviders; } public static WorkspaceAction getDefaultMergeProvider() { String mergeProvider = plugin.getPreferenceStore().getString(ISVNUIConstants.PREF_MERGE_PROVIDER); if (mergeProvider != null) { for (int i = 0; i < mergeProviders.length; i++) { if (mergeProviders[i].getName().equals(mergeProvider)) { return mergeProviders[i]; } } } return mergeProviders[0]; } /** * Returns the standard display to be used. The method first checks, if * the thread calling this method has an associated display. If so, this * display is returned. Otherwise the method returns the default display. */ public static Display getStandardDisplay() { Display display= Display.getCurrent(); if (display == null) { display= Display.getDefault(); } return display; } /** * Returns the image descriptor for the given image ID. * Returns null if there is no such image. */ public ImageDescriptor getImageDescriptor(String id) { if (imageDescriptors == null) { imageDescriptors = new ImageDescriptors(); imageDescriptors.initializeImages(baseURL, getPreferenceStore().getInt(ISVNUIConstants.PREF_MENU_ICON_SET)); } return imageDescriptors.getImageDescriptor(id); } /** * Temporarily detach the console from the message source */ public void disableConsoleListener() { SVNProviderPlugin.getPlugin().setConsoleListener(null); } /** * Reconnect the console view to the message source */ public void enableConsoleListener() { SVNProviderPlugin.getPlugin().setConsoleListener(console); } public static String getCharset(String name, InputStream stream) throws IOException { IContentDescription description = getContentDescription(name, stream); return description == null ? null : description.getCharset(); } public static IContentDescription getContentDescription(String name, InputStream stream) throws IOException { // tries to obtain a description for this file contents IContentTypeManager contentTypeManager = Platform.getContentTypeManager(); try { return contentTypeManager.getDescriptionFor(stream, name, IContentDescription.ALL); } finally { if (stream != null) try { stream.close(); } catch (IOException e) { // Ignore exceptions on close } } } /** * Gets the one and only SVN console managed by this plugin * @return the SVN console */ public SVNOutputConsole getConsole() { return console; } public ShowOutOfDateFoldersAction getShowOutOfDateFoldersAction() { return showOutOfDateFoldersAction; } public org.osgi.service.prefs.Preferences getInstancePreferences() { return new InstanceScope().getNode(getBundle().getSymbolicName()); } public MergeFileAssociation[] getMergeFileAssociations() throws BackingStoreException { ArrayList associations = new ArrayList(); String[] childrenNames = MergeFileAssociation.getParentPreferences().childrenNames(); for (int i = 0; i < childrenNames.length; i++) { org.osgi.service.prefs.Preferences node = MergeFileAssociation.getParentPreferences().node(childrenNames[i]); MergeFileAssociation association = new MergeFileAssociation(); association.setFileType(childrenNames[i]); association.setMergeProgram(node.get("mergeProgram", "")); //$NON-NLS-1$, //$NON-NLS-1$ association.setParameters(node.get("parameters", "")); //$NON-NLS-1$, //$NON-NLS-1$ association.setType(node.getInt("type",MergeFileAssociation.BUILT_IN)); associations.add(association); } MergeFileAssociation[] associationArray = new MergeFileAssociation[associations.size()]; associations.toArray(associationArray); Arrays.sort(associationArray); return associationArray; } public MergeFileAssociation getMergeFileAssociation(String fileName) throws BackingStoreException { MergeFileAssociation[] mergeFileAssociations = getMergeFileAssociations(); for (int i = 0; i < mergeFileAssociations.length; i++) { if (mergeFileAssociations[i].getFileType().equals(fileName)) return mergeFileAssociations[i]; } for (int i = 0; i < mergeFileAssociations.length; i++) { if (mergeFileAssociations[i].matches(fileName)) return mergeFileAssociations[i]; } MergeFileAssociation mergeFileAssociation = new MergeFileAssociation(); IPreferenceStore preferenceStore = getPreferenceStore(); if (preferenceStore.getBoolean(ISVNUIConstants.PREF_MERGE_USE_EXTERNAL)) mergeFileAssociation.setType(MergeFileAssociation.DEFAULT_EXTERNAL); else mergeFileAssociation.setType(MergeFileAssociation.BUILT_IN); return mergeFileAssociation; } public static Image getImage(String key) { return getPlugin().getImageRegistry().get(key); } protected void initializeImageRegistry(ImageRegistry reg) { super.initializeImageRegistry(reg); reg.put(ISVNUIConstants.IMG_PROPERTIES, getImageDescriptor(ISVNUIConstants.IMG_PROPERTIES)); reg.put(ISVNUIConstants.IMG_FILEADD_PENDING, getImageDescriptor(ISVNUIConstants.IMG_FILEADD_PENDING)); reg.put(ISVNUIConstants.IMG_SYNCPANE, getImageDescriptor(ISVNUIConstants.IMG_SYNCPANE)); reg.put(ISVNUIConstants.IMG_FILEDELETE_PENDING, getImageDescriptor(ISVNUIConstants.IMG_FILEDELETE_PENDING)); reg.put(ISVNUIConstants.IMG_FILEMODIFIED_PENDING, getImageDescriptor(ISVNUIConstants.IMG_FILEMODIFIED_PENDING)); reg.put(ISVNUIConstants.IMG_FOLDERADD_PENDING, getImageDescriptor(ISVNUIConstants.IMG_FOLDERADD_PENDING)); reg.put(ISVNUIConstants.IMG_FOLDERDELETE_PENDING, getImageDescriptor(ISVNUIConstants.IMG_FOLDERDELETE_PENDING)); reg.put(ISVNUIConstants.IMG_FOLDERMODIFIED_PENDING, getImageDescriptor(ISVNUIConstants.IMG_FOLDERMODIFIED_PENDING)); reg.put(ISVNUIConstants.IMG_FOLDER, getImageDescriptor(ISVNUIConstants.IMG_FOLDER)); reg.put(ISVNUIConstants.IMG_AFFECTED_PATHS_COMPRESSED_MODE, getImageDescriptor(ISVNUIConstants.IMG_AFFECTED_PATHS_COMPRESSED_MODE)); reg.put(ISVNUIConstants.IMG_AFFECTED_PATHS_FLAT_MODE, getImageDescriptor(ISVNUIConstants.IMG_AFFECTED_PATHS_FLAT_MODE)); reg.put(ISVNUIConstants.IMG_AFFECTED_PATHS_TREE_MODE, getImageDescriptor(ISVNUIConstants.IMG_AFFECTED_PATHS_TREE_MODE)); reg.put(ISVNUIConstants.IMG_UPDATE_ALL, getImageDescriptor(ISVNUIConstants.IMG_UPDATE_ALL)); reg.put(ISVNUIConstants.IMG_COMMIT_ALL, getImageDescriptor(ISVNUIConstants.IMG_COMMIT_ALL)); reg.put(ISVNUIConstants.IMG_PROPERTY_CONFLICTED, getImageDescriptor(ISVNUIConstants.IMG_PROPERTY_CONFLICTED)); } // Deletes all files and subdirectories under dir. // Returns true if all delete was successful. private boolean deleteFolder(File folder) { if (folder.isDirectory()) { String[] children = folder.list(); for (int i=0; i< children.length; i++) { if (!deleteFolder(new File(folder, children[i]))) { return false; } } } // The folder should be empty so delete it return folder.delete(); } } SVNUIPreferenceInitializer.java000066400000000000000000000133301203611042400414630ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/uipackage org.tigris.subversion.subclipse.ui; import org.eclipse.core.runtime.preferences.AbstractPreferenceInitializer; import org.eclipse.core.runtime.preferences.DefaultScope; import org.eclipse.core.runtime.preferences.IEclipsePreferences; import org.eclipse.jface.dialogs.MessageDialogWithToggle; import org.eclipse.jface.resource.StringConverter; import org.eclipse.swt.graphics.RGB; import org.tigris.subversion.subclipse.ui.decorator.SVNDecoratorConfiguration; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; /** * This class initializes the default values for various SVN preferences */ public class SVNUIPreferenceInitializer extends AbstractPreferenceInitializer { /** * This method is called by the preference initializer to initialize default * preference values. Note that this method shouldn't be called by the * clients; it will be called automatically by the preference * initializer when the appropriate default preference node is accessed. */ public void initializeDefaultPreferences() { IEclipsePreferences node = new DefaultScope().getNode(SVNUIPlugin.ID); node.put(ISVNUIConstants.PREF_CONSOLE_COMMAND_COLOR, StringConverter.asString(new RGB(0, 0, 0))); node.put(ISVNUIConstants.PREF_CONSOLE_MESSAGE_COLOR, StringConverter.asString(new RGB(0, 0, 255))); node.put(ISVNUIConstants.PREF_CONSOLE_ERROR_COLOR, StringConverter.asString(new RGB(255, 0, 0))); node.putBoolean(ISVNUIConstants.PREF_SHOW_COMMENTS, true); node.putBoolean(ISVNUIConstants.PREF_WRAP_COMMENTS, true); node.putBoolean(ISVNUIConstants.PREF_SHOW_PATHS, true); node.putInt(ISVNUIConstants.PREF_AFFECTED_PATHS_MODE, ISVNUIConstants.MODE_FLAT); node.putInt(ISVNUIConstants.PREF_AFFECTED_PATHS_LAYOUT, ISVNUIConstants.LAYOUT_HORIZONTAL); node.putBoolean(ISVNUIConstants.PREF_CONSOLE_SHOW_ON_MESSAGE, false); node.putBoolean(ISVNUIConstants.PREF_CONSOLE_SHOW_ON_ERROR, true); node.putBoolean(ISVNUIConstants.PREF_CONSOLE_LIMIT_OUTPUT, true); node.putInt(ISVNUIConstants.PREF_CONSOLE_HIGH_WATER_MARK, 500000); node.put(ISVNUIConstants.PREF_FILETEXT_DECORATION, SVNDecoratorConfiguration.DEFAULT_FILETEXTFORMAT); node.put(ISVNUIConstants.PREF_FOLDERTEXT_DECORATION, SVNDecoratorConfiguration.DEFAULT_FOLDERTEXTFORMAT); node.put(ISVNUIConstants.PREF_PROJECTTEXT_DECORATION, SVNDecoratorConfiguration.DEFAULT_PROJECTTEXTFORMAT); node.put(ISVNUIConstants.PREF_ADDED_FLAG, SVNDecoratorConfiguration.DEFAULT_ADDED_FLAG); node.put(ISVNUIConstants.PREF_DIRTY_FLAG, SVNDecoratorConfiguration.DEFAULT_DIRTY_FLAG); node.put(ISVNUIConstants.PREF_EXTERNAL_FLAG, SVNDecoratorConfiguration.DEFAULT_EXTERNAL_FLAG); node.putBoolean(ISVNUIConstants.PREF_SHOW_EXTERNAL_DECORATION, true); node.putBoolean(ISVNUIConstants.PREF_SHOW_ADDED_DECORATION, true); node.putBoolean(ISVNUIConstants.PREF_SHOW_HASREMOTE_DECORATION, true); node.putBoolean(ISVNUIConstants.PREF_SHOW_DIRTY_DECORATION, true); node.putBoolean(ISVNUIConstants.PREF_SHOW_NEWRESOURCE_DECORATION, true); node.putBoolean(ISVNUIConstants.PREF_CALCULATE_DIRTY, true); node.putBoolean(ISVNUIConstants.PREF_USE_FONT_DECORATORS, false); node.putBoolean(ISVNUIConstants.PREF_SHOW_SYNCINFO_AS_TEXT, false); node.putBoolean(ISVNUIConstants.PREF_PROMPT_ON_MIXED_TAGS, true); node.putBoolean(ISVNUIConstants.PREF_PROMPT_ON_SAVING_IN_SYNC, true); node.putInt(ISVNUIConstants.PREF_SAVE_DIRTY_EDITORS, ISVNUIConstants.OPTION_PROMPT); node.putBoolean(ISVNUIConstants.PREF_SHOW_COMPARE_REVISION_IN_DIALOG, false); node.putBoolean(ISVNUIConstants.PREF_SHOW_UNADDED_RESOURCES_ON_COMMIT, true); node.putBoolean(ISVNUIConstants.PREF_SELECT_UNADDED_RESOURCES_ON_COMMIT, true); node.putBoolean(ISVNUIConstants.PREF_REMOVE_UNADDED_RESOURCES_ON_REPLACE, true); node.putBoolean(ISVNUIConstants.PREF_COMMIT_SET_DEFAULT_ENABLEMENT, false); node.put(ISVNUIConstants.PREF_ALLOW_COMMIT_WITH_WARNINGS, MessageDialogWithToggle.ALWAYS); node.put(ISVNUIConstants.PREF_ALLOW_COMMIT_WITH_ERRORS, MessageDialogWithToggle.PROMPT); node.putBoolean(ISVNUIConstants.PREF_UPDATE_TO_HEAD_IGNORE_EXTERNALS, false); node.putBoolean(ISVNUIConstants.PREF_UPDATE_TO_HEAD_ALLOW_UNVERSIONED_OBSTRUCTIONS, true); node.putInt(ISVNUIConstants.PREF_UPDATE_TO_HEAD_CONFLICT_HANDLING_TEXT_FILES, ISVNConflictResolver.Choice.postpone); node.putInt(ISVNUIConstants.PREF_UPDATE_TO_HEAD_CONFLICT_HANDLING_BINARY_FILES, ISVNConflictResolver.Choice.postpone); node.putInt(ISVNUIConstants.PREF_UPDATE_TO_HEAD_CONFLICT_HANDLING_PROPERTIES, ISVNConflictResolver.Choice.postpone); node.putBoolean(ISVNUIConstants.PREF_USE_JAVAHL_COMMIT_HACK, true); node.put(ISVNUIConstants.PREF_SVNINTERFACE, "javahl"); //$NON-NLS-1$ node.put(ISVNUIConstants.PREF_SVNCONFIGDIR, ""); //$NON-NLS-1$ node.putBoolean(ISVNUIConstants.PREF_FETCH_CHANGE_PATH_ON_DEMAND, false); node.putInt(ISVNUIConstants.PREF_LOG_ENTRIES_TO_FETCH, 25); node.putBoolean(ISVNUIConstants.PREF_STOP_ON_COPY, false); node.putBoolean(ISVNUIConstants.PREF_MERGE_USE_EXTERNAL, false); node.putBoolean(ISVNUIConstants.PREF_SUGGEST_MERGE_SOURCES, true); node.put(ISVNUIConstants.PREF_MERGE_PROGRAM_LOCATION,""); //$NON-NLS-1$ node.put(ISVNUIConstants.PREF_MERGE_PROGRAM_PARAMETERS,""); //$NON-NLS-1$ node.put(ISVNUIConstants.PREF_USE_QUICKDIFFANNOTATE, MessageDialogWithToggle.PROMPT); node.putInt(ISVNUIConstants.PREF_MENU_ICON_SET, ISVNUIConstants.MENU_ICON_SET_DEFAULT); } } SynchronizeWizard.java000066400000000000000000000054021203611042400400510ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui; import org.eclipse.core.resources.IResource; import org.eclipse.jface.wizard.IWizard; import org.eclipse.jface.wizard.Wizard; import org.eclipse.team.ui.TeamUI; import org.eclipse.team.ui.synchronize.ISynchronizeParticipant; import org.eclipse.team.ui.synchronize.SubscriberParticipant; import org.tigris.subversion.subclipse.core.sync.SVNWorkspaceSubscriber; import org.tigris.subversion.subclipse.ui.internal.GlobalRefreshResourceSelectionPage; import org.tigris.subversion.subclipse.ui.subscriber.SVNSynchronizeParticipant; public class SynchronizeWizard extends Wizard { private GlobalRefreshResourceSelectionPage selectionPage; private IWizard importWizard; public SynchronizeWizard() { setDefaultPageImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_SYNCH)); setNeedsProgressMonitor(false); } /* (non-Javadoc) * @see org.eclipse.jface.wizard.Wizard#getWindowTitle() */ public String getWindowTitle() { return Policy.bind("GlobalRefreshSubscriberPage.0"); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.eclipse.jface.wizard.Wizard#addPages() */ public void addPages() { selectionPage = new GlobalRefreshResourceSelectionPage(SVNWorkspaceSubscriber.getInstance().roots()); selectionPage.setTitle(org.tigris.subversion.subclipse.ui.Policy.bind("SynchronizeWizard.title")); //$NON-NLS-1$ selectionPage.setMessage(org.tigris.subversion.subclipse.ui.Policy.bind("SynchronizeWizard.message")); //$NON-NLS-1$ addPage(selectionPage); } /* (non-Javadoc) * @see org.eclipse.jface.wizard.IWizard#performFinish() */ public boolean performFinish() { if (importWizard != null) { return importWizard.performFinish(); } else { IResource[] resources = selectionPage.getRootResources(); if (resources != null && resources.length > 0) { SubscriberParticipant participant = new SVNSynchronizeParticipant(selectionPage.getSynchronizeScope()); TeamUI.getSynchronizeManager().addSynchronizeParticipants(new ISynchronizeParticipant[]{participant}); // We don't know in which site to show progress because a participant could actually be shown in multiple sites. participant.run(null /* no site */); } return true; } } } WorkspacePathValidator.java000066400000000000000000000034111203611042400407740ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui; import org.eclipse.core.runtime.IStatus; //import java.io.File; //import java.io.IOException; // //import org.eclipse.core.resources.ResourcesPlugin; //import org.eclipse.jface.dialogs.MessageDialog; //import org.eclipse.swt.widgets.Display; public class WorkspacePathValidator { public static boolean validateWorkspacePath() { return true; // File file = ResourcesPlugin.getWorkspace().getRoot().getLocation().toFile(); // String canonicalPath = null; // try { // canonicalPath = file.getCanonicalPath(); // } catch (IOException e) { // SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); // } // if (!file.getAbsolutePath().equals(canonicalPath)) { // MessageDialog.openError(Display.getCurrent().getActiveShell(), Policy.bind("WorkspacePathValidator.title"), // Policy.bind("WorkspacePathValidator.eclipsePath") + "\n\n" + file.getAbsolutePath() + // "\n\n" + Policy.bind("WorkspacePathValidator.fileSystemPath") + "\n\n" + canonicalPath + // "\n\n" + Policy.bind("WorkspacePathValidator.instructions")); // return false; // } // return true; } } 000077500000000000000000000000001203611042400351515ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actionsAddAction.java000066400000000000000000000121151203611042400376420ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Set; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.team.core.TeamException; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; /** * AddAction performs a 'svn add' command on the selected resources. If a * container is selected, its children are recursively added. */ public class AddAction extends WorkbenchWindowAction { /* * @see SVNAction#execute() */ public void execute(IAction action) throws InterruptedException, InvocationTargetException { // first we ask the user if he really want to add the selected resources if some of them are marked as ignored if (!promptForAddOfIgnored()) { return; } run(new WorkspaceModifyOperation() { public void execute(IProgressMonitor monitor) throws InvocationTargetException { try { // associate the resources with their respective RepositoryProvider Hashtable table = getProviderMapping(getSelectedResources()); Set keySet = table.keySet(); monitor.beginTask("", keySet.size() * 1000); //$NON-NLS-1$ monitor.setTaskName(Policy.bind("AddAction.adding")); //$NON-NLS-1$ Iterator iterator = keySet.iterator(); while (iterator.hasNext()) { IProgressMonitor subMonitor = Policy.subMonitorFor(monitor, 1000); SVNTeamProvider provider = (SVNTeamProvider)iterator.next(); List list = (List)table.get(provider); IResource[] providerResources = (IResource[])list.toArray(new IResource[list.size()]); provider.add(providerResources, IResource.DEPTH_INFINITE, subMonitor); } } catch (TeamException e) { throw new InvocationTargetException(e); } finally { monitor.done(); } } }, true /* cancelable */, PROGRESS_DIALOG); } /** * asks the user if he wants to add the resources if some of them are ignored * @return false if he answered no */ private boolean promptForAddOfIgnored() { IResource[] resources = getSelectedResources(); boolean prompt = false; for (int i = 0; i < resources.length; i++) { ISVNLocalResource resource = SVNWorkspaceRoot.getSVNResourceFor(resources[i]); try { if (resource.isIgnored()) { prompt = true; break; } } catch (SVNException e) { handle(e); } } if (prompt) { return MessageDialog.openQuestion(getShell(), Policy.bind("AddAction.addIgnoredTitle"), Policy.bind("AddAction.addIgnoredQuestion")); //$NON-NLS-1$ //$NON-NLS-2$ } return true; } /* * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("AddAction.addFailed"); //$NON-NLS-1$ } /** * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForManagedResources() */ protected boolean isEnabledForManagedResources() { return false; } /** * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForUnmanagedResources() */ protected boolean isEnabledForUnmanagedResources() { return true; } /** * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForIgnoredResources() */ protected boolean isEnabledForIgnoredResources() { return true; } /** * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForSVNResource(org.tigris.subversion.subclipse.core.ISVNResource) */ protected boolean isEnabledForSVNResource(ISVNLocalResource svnResource) throws SVNException { // Add to version control should never be enabled for linked resources IResource resource = svnResource.getIResource(); if (resource.isLinked()) return false; return super.isEnabledForSVNResource(svnResource); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#needsToSaveDirtyEditors() */ @Override protected boolean needsToSaveDirtyEditors() { return false; } protected String getImageId() { return ISVNUIConstants.IMG_MENU_ADD; } } AnnotateAction.java000066400000000000000000000043511203611042400407260ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.jface.action.IAction; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.operations.ShowAnnotationOperation; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardAnnotatePage; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardDialog; public class AnnotateAction extends SVNAction { protected void execute(IAction action) throws InvocationTargetException, InterruptedException { ISVNRemoteFile[] remoteFiles = getSelectedRemoteFiles(); SvnWizardAnnotatePage annotatePage = new SvnWizardAnnotatePage(remoteFiles[0]); SvnWizard wizard = new SvnWizard(annotatePage); SvnWizardDialog dialog = new SvnWizardDialog(getShell(), wizard); wizard.setParentDialog(dialog); if (dialog.open() == SvnWizardDialog.CANCEL) return; ShowAnnotationOperation showAnnotationOperation = new ShowAnnotationOperation(getTargetPart(), remoteFiles[0], annotatePage.getFromRevision(), annotatePage.getToRevision(), annotatePage.isIncludeMergedRevisions(), annotatePage.isIgnoreMimeType()); showAnnotationOperation.run(); // AnnotateDialog dialog = new AnnotateDialog(getShell(), getTargetPart(), remoteFiles[0]); // dialog.open(); } protected boolean isEnabled() throws TeamException { return getSelectedRemoteFiles().length == 1; } protected String getImageId() { return ISVNUIConstants.IMG_MENU_ANNOTATE; } } BranchTagAction.java000066400000000000000000000115731203611042400410120ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.eclipse.jface.wizard.WizardDialog; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.operations.BranchTagOperation; import org.tigris.subversion.subclipse.ui.wizards.BranchTagWizard; import org.tigris.subversion.subclipse.ui.wizards.SizePersistedWizardDialog; import org.tigris.subversion.svnclientadapter.SVNUrl; public class BranchTagAction extends WorkbenchWindowAction { protected void execute(IAction action) throws InvocationTargetException, InterruptedException { if (action != null && !action.isEnabled()) { action.setEnabled(true); } else { IResource[] resources = getSelectedResources(); BranchTagWizard wizard = new BranchTagWizard(resources); SizePersistedWizardDialog dialog = new SizePersistedWizardDialog(getShell(), wizard, "BranchTag"); //$NON-NLS-1$ wizard.setParentDialog(dialog); if (dialog.open() == WizardDialog.OK) { SVNUrl[] sourceUrls = wizard.getUrls(); SVNUrl destinationUrl = wizard.getToUrl(); String message = wizard.getComment(); boolean createOnServer = wizard.isCreateOnServer(); BranchTagOperation branchTagOperation = new BranchTagOperation(getTargetPart(), getSelectedResources(), sourceUrls, destinationUrl, createOnServer, wizard.getRevision(), message); branchTagOperation.setMakeParents(wizard.isMakeParents()); branchTagOperation.setMultipleTransactions(wizard.isSameStructure()); branchTagOperation.setNewAlias(wizard.getNewAlias()); branchTagOperation.switchAfterTagBranchOperation(wizard.isSwitchAfterBranchTag()); branchTagOperation.setSvnExternals(wizard.getSvnExternals()); branchTagOperation.run(); } } } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("BranchTagAction.branch"); //$NON-NLS-1$ } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForManagedResources() */ protected boolean isEnabledForManagedResources() { return true; } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForUnmanagedResources() */ protected boolean isEnabledForUnmanagedResources() { return false; } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForMultipleResources() */ protected boolean isEnabledForMultipleResources() { try { // Must all be from same repository. ISVNRepositoryLocation repository = null; IResource[] selectedResources = getSelectedResources(); for (int i = 0; i < selectedResources.length; i++) { ISVNRepositoryLocation compareToRepository = null; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(selectedResources[i]); if (svnResource == null || !svnResource.isManaged()) { return false; } LocalResourceStatus status = svnResource.getStatusFromCache(); if (status != null) { compareToRepository = status.getRepository(); } if (compareToRepository == null) { return false; } if (repository != null && !compareToRepository.equals(repository)) { return false; } repository = compareToRepository; } return true; } catch (Exception e) { return false; } } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForAddedResources() */ protected boolean isEnabledForAddedResources() { return false; } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_BRANCHTAG; } } CheckoutAsAction.java000066400000000000000000000037121203611042400412060ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.jface.action.IAction; import org.eclipse.jface.wizard.WizardDialog; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.WorkspacePathValidator; import org.tigris.subversion.subclipse.ui.wizards.CheckoutWizard; /** * Add a remote resource to the workspace. Current implementation: * - Works only for remote folders * - prompt for project name */ public class CheckoutAsAction extends SVNAction { /* * @see TeamAction#isEnabled() */ protected boolean isEnabled() { // return getSelectedRemoteFolders().length == 1; return getSelectedRemoteFolders().length > 0; } /* * @see IActionDelegate#run(IAction) */ public void execute(IAction action) throws InvocationTargetException, InterruptedException { if (!WorkspacePathValidator.validateWorkspacePath()) return; final ISVNRemoteFolder[] folders = getSelectedRemoteFolders(); CheckoutWizard wizard = new CheckoutWizard(folders); WizardDialog dialog = new WizardDialog(shell, wizard); dialog.open(); } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_CHECKOUTAS; } } CheckoutAsProjectAction.java000066400000000000000000000254551203611042400425450ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.io.File; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.WorkspacePathValidator; import org.tigris.subversion.subclipse.ui.operations.CheckoutAsProjectOperation; import org.tigris.subversion.subclipse.ui.util.IPromptCondition; import org.tigris.subversion.subclipse.ui.util.PromptingDialog; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * Add some remote resources to the workspace. Current implementation: * -Works only for remote folders * -Does not prompt for project name; uses folder name instead */ public class CheckoutAsProjectAction extends WorkspaceAction { protected IProject[] localFolders; protected ISVNRemoteFolder[] remoteFolders; protected IResource[] projects; protected boolean proceed; private ISVNRemoteFolder[] selectedFolders; private String projectName; private String projectNamePrefix; private String projectNameSuffix; private SVNRevision svnRevision = SVNRevision.HEAD; private int depth = ISVNCoreConstants.DEPTH_INFINITY; private boolean ignoreExternals = false; private boolean force = true; public CheckoutAsProjectAction() { super(); } public CheckoutAsProjectAction(ISVNRemoteFolder[] selectedFolders, String projectName, Shell shell) { super(); this.selectedFolders = selectedFolders; this.projectName = projectName; this.shell = shell; } public CheckoutAsProjectAction(ISVNRemoteFolder[] selectedFolders, String projectNamePrefix, String projectNameSuffix, Shell shell) { this(selectedFolders, null, shell); this.projectNamePrefix = projectNamePrefix; this.projectNameSuffix = projectNameSuffix; } /* * @see SVNAction#execute() */ public void execute(IAction action) throws InvocationTargetException, InterruptedException { if (!WorkspacePathValidator.validateWorkspacePath()) return; checkoutSelectionIntoWorkspaceDirectory(); } /** * checkout into a workspace directory, ie as a project * @throws InvocationTargetException * @throws InterruptedException */ protected void checkoutSelectionIntoWorkspaceDirectory() throws InvocationTargetException, InterruptedException { run(new WorkspaceModifyOperation() { public void execute(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { try { final ISVNRemoteFolder[] folders = getSelectedRemoteFolders(); final boolean renameMultipleProjects = shouldRenameMultipleProjects(); List targetProjects = new ArrayList(); Map targetFolders = new HashMap(); monitor.beginTask(null, 100); for (int i = 0; i < folders.length; i++) { proceed = true; if (folders[i].getRepository().getRepositoryRoot().toString().equals(folders[i].getUrl().toString())) { shell.getDisplay().syncExec(new Runnable() { public void run() { proceed = MessageDialog.openQuestion(shell, Policy.bind("CheckoutAsProjectAction.title"), Policy.bind("AddToWorkspaceAction.checkingOutRoot")); //$NON-NLS-1$ } }); } if (proceed) { IProject project; if (renameMultipleProjects) { String originalProjectName; try { originalProjectName = SVNWorkspaceRoot.getProjectName(folders[i], monitor); } catch (Exception e) { originalProjectName = folders[i].getName(); } final String newProjectName = modifyProjectName(originalProjectName); project = SVNWorkspaceRoot.getProject(newProjectName); } else if (projectName == null) { try { project = SVNWorkspaceRoot.getProject(folders[i],monitor); } catch (Exception e) { project = SVNWorkspaceRoot.getProject(folders[i].getName()); } } else { project = SVNWorkspaceRoot.getProject(projectName); } targetFolders.put(project.getName(), folders[i]); targetProjects.add(project); } else return; } projects = (IResource[]) targetProjects.toArray(new IResource[targetProjects.size()]); // if a project with the same name already exist, we ask the user if he want to overwrite it PromptingDialog prompt = new PromptingDialog(getShell(), projects, getOverwriteLocalAndFileSystemPrompt(), Policy.bind("ReplaceWithAction.confirmOverwrite"));//$NON-NLS-1$ projects = prompt.promptForMultiple(); if (projects.length != 0) { localFolders = new IProject[projects.length]; remoteFolders = new ISVNRemoteFolder[projects.length]; for (int i = 0; i < projects.length; i++) { localFolders[i] = (IProject)projects[i]; remoteFolders[i] = (ISVNRemoteFolder)targetFolders.get(projects[i].getName()); } } else proceed = false; } catch (Exception e) { throw new InvocationTargetException(e); } finally { monitor.done(); } } }, true /* cancelable */, PROGRESS_DIALOG); if (proceed) { CheckoutAsProjectOperation checkoutAsProjectOperation = new CheckoutAsProjectOperation(getTargetPart(), remoteFolders, localFolders); checkoutAsProjectOperation.setSvnRevision(svnRevision); checkoutAsProjectOperation.setDepth(depth); checkoutAsProjectOperation.setIgnoreExternals(ignoreExternals); checkoutAsProjectOperation.setForce(force); checkoutAsProjectOperation.run(); } } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#needsToSaveDirtyEditors() */ @Override protected boolean needsToSaveDirtyEditors() { return false; } /* * @see TeamAction#isEnabled() */ protected boolean isEnabled() { ISVNRemoteFolder[] resources = getSelectedRemoteFolders(); if (resources.length == 0) return false; for (int i = 0; i < resources.length; i++) { if (resources[i] instanceof ISVNRepositoryLocation) return false; } return true; } /** * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("AddToWorkspaceAction.checkoutFailed"); //$NON-NLS-1$ } protected static String getTaskName(ISVNRemoteFolder[] remoteFolders) { if (remoteFolders.length == 1) { ISVNRemoteFolder folder = remoteFolders[0]; String label = folder.getRepositoryRelativePath(); return Policy.bind("AddToWorkspace.taskName1", label); //$NON-NLS-1$ } else { return Policy.bind("AddToWorkspace.taskNameN", new Integer(remoteFolders.length).toString()); //$NON-NLS-1$ } } /** * get an IPromptCondition */ static public IPromptCondition getOverwriteLocalAndFileSystemPrompt() { return new IPromptCondition() { // prompt if resource in workspace exists or exists in local file system public boolean needsPrompt(IResource resource) { File localLocation = getFileLocation(resource); if(resource.exists() || localLocation.exists()) { return true; } return false; } public String promptMessage(IResource resource) { getFileLocation(resource); if(resource.exists()) { return Policy.bind("AddToWorkspaceAction.thisResourceExists", resource.getName());//$NON-NLS-1$ } else { return Policy.bind("AddToWorkspaceAction.thisExternalFileExists", resource.getName());//$NON-NLS-1$ } } private File getFileLocation(IResource resource) { return new File(resource.getParent().getLocation().toFile(), resource.getName()); } }; } protected ISVNRemoteFolder[] getSelectedRemoteFolders() { if (selectedFolders != null) return selectedFolders; return super.getSelectedRemoteFolders(); } public void setSvnRevision(SVNRevision svnRevision) { this.svnRevision = svnRevision; } public void setDepth(int depth) { this.depth = depth; } public void setIgnoreExternals(boolean ignoreExternals) { this.ignoreExternals = ignoreExternals; } public void setForce(boolean force) { this.force = force; } private String getProjectNamePrefix() { return projectNamePrefix; } private String getProjectNameSuffix() { return projectNameSuffix; } /** * @return true, if multiple projects should be checked out and project name * prefix and/or suffix is specified */ private boolean shouldRenameMultipleProjects() { final ISVNRemoteFolder[] folders = getSelectedRemoteFolders(); return ((folders != null) && (folders.length > 1) && ((getProjectNamePrefix() != null) || (getProjectNameSuffix() != null))); } /** * Modifies the original project name to have an optional prefix and/or suffix. * * @param originalProjectName the project name to modify * @return the project name with optional prefix and/or suffix */ private String modifyProjectName(String originalProjectName) { final StringBuffer buffer = new StringBuffer(); if (getProjectNamePrefix() != null) { buffer.append(getProjectNamePrefix().trim()); } buffer.append(originalProjectName); if (getProjectNameSuffix() != null) { buffer.append(getProjectNameSuffix().trim()); } return buffer.toString(); } } CheckoutIntoAction.java000066400000000000000000000214151203611042400415540ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.WorkspacePathValidator; import org.tigris.subversion.subclipse.ui.operations.CheckoutAsProjectOperation; import org.tigris.subversion.subclipse.ui.util.PromptingDialog; import org.tigris.subversion.svnclientadapter.SVNRevision; public class CheckoutIntoAction extends CheckoutAsProjectAction { protected IPath intoDir; private ISVNRemoteFolder[] selectedFolders; private String projectName; private String projectNamePrefix; private String projectNameSuffix; private String intoDirectory; private SVNRevision svnRevision = SVNRevision.HEAD; private int depth = ISVNCoreConstants.DEPTH_INFINITY; private boolean ignoreExternals = false; private boolean force = true; public CheckoutIntoAction(ISVNRemoteFolder[] selectedFolders, String projectName, String intoDirectory, Shell shell) { super(); this.selectedFolders = selectedFolders; this.projectName = projectName; this.intoDirectory = intoDirectory; this.shell = shell; } public CheckoutIntoAction(ISVNRemoteFolder[] selectedFolders, String projectNamePrefix, String projectNameSuffix, String intoDirectory, Shell shell) { this(selectedFolders, null, intoDirectory, shell); this.projectNamePrefix = projectNamePrefix; this.projectNameSuffix = projectNameSuffix; } /* * @see SVNAction#execute() */ public void execute(IAction action) throws InvocationTargetException, InterruptedException { if (intoDirectory == null) { if (!WorkspacePathValidator.validateWorkspacePath()) return; DirectoryDialog intoDirDia = new DirectoryDialog(shell); intoDirDia.setMessage(Policy.bind("CheckoutInto.message")); String intoDirString = intoDirDia.open(); if (intoDirString==null) { return; } intoDir = new Path(intoDirString); } else intoDir = new Path(intoDirectory); checkoutSelectionIntoWorkspaceDirectory(); } /** * checkout into a workspace directory, ie as a project * @throws InvocationTargetException * @throws InterruptedException */ protected void checkoutSelectionIntoWorkspaceDirectory() throws InvocationTargetException, InterruptedException { run(new WorkspaceModifyOperation() { public void execute(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { try { final ISVNRemoteFolder[] folders = getSelectedRemoteFolders(); final boolean renameMultipleProjects = shouldRenameMultipleProjects(); List targetProjects = new ArrayList(); Map targetFolders = new HashMap(); monitor.beginTask(null, 100); for (int i = 0; i < folders.length; i++) { proceed = true; if (folders[i].getRepository().getRepositoryRoot().toString().equals(folders[i].getUrl().toString())) { shell.getDisplay().syncExec(new Runnable() { public void run() { proceed = MessageDialog.openQuestion(shell, Policy.bind("CheckoutAsProjectAction.title"), Policy.bind("AddToWorkspaceAction.checkingOutRoot")); //$NON-NLS-1$ } }); } if (proceed) { IProject project; if (renameMultipleProjects) { String originalProjectName; try { originalProjectName = SVNWorkspaceRoot.getProjectName(folders[i], monitor); } catch (Exception e) { originalProjectName = folders[i].getName(); } final String newProjectName = modifyProjectName(originalProjectName); project = SVNWorkspaceRoot.getProject(newProjectName); } else if (projectName == null) { try { project = SVNWorkspaceRoot.getProject(folders[i],monitor); } catch (Exception e) { project = SVNWorkspaceRoot.getProject(folders[i].getName()); } } else { project = SVNWorkspaceRoot.getProject(projectName); } targetFolders.put(project.getName(), folders[i]); targetProjects.add(project); } else return; } projects = (IResource[]) targetProjects.toArray(new IResource[targetProjects.size()]); // if a project with the same name already exist, we ask the user if he want to overwrite it PromptingDialog prompt = new PromptingDialog(getShell(), projects, getOverwriteLocalAndFileSystemPrompt(), Policy.bind("ReplaceWithAction.confirmOverwrite"));//$NON-NLS-1$ projects = prompt.promptForMultiple(); if (projects.length != 0) { localFolders = new IProject[projects.length]; remoteFolders = new ISVNRemoteFolder[projects.length]; for (int i = 0; i < projects.length; i++) { localFolders[i] = (IProject)projects[i]; remoteFolders[i] = (ISVNRemoteFolder)targetFolders.get(projects[i].getName()); } } else { proceed = false; } } catch (Exception e) { throw new InvocationTargetException(e); } finally { monitor.done(); } } }, true /* cancelable */, PROGRESS_DIALOG); if (proceed) { CheckoutAsProjectOperation checkoutAsProjectOperation = new CheckoutAsProjectOperation(getTargetPart(), remoteFolders, localFolders, intoDir); checkoutAsProjectOperation.setSvnRevision(svnRevision); checkoutAsProjectOperation.setDepth(depth); checkoutAsProjectOperation.setIgnoreExternals(ignoreExternals); checkoutAsProjectOperation.setForce(force); checkoutAsProjectOperation.run(); } } protected ISVNRemoteFolder[] getSelectedRemoteFolders() { if (selectedFolders != null) return selectedFolders; return super.getSelectedRemoteFolders(); } public void setSvnRevision(SVNRevision svnRevision) { this.svnRevision = svnRevision; } public void setDepth(int depth) { this.depth = depth; } public void setIgnoreExternals(boolean ignoreExternals) { this.ignoreExternals = ignoreExternals; } public void setForce(boolean force) { this.force = force; } private String getProjectNamePrefix() { return projectNamePrefix; } private String getProjectNameSuffix() { return projectNameSuffix; } /** * @return true, if multiple projects should be checked out and project name * prefix and/or suffix is specified */ private boolean shouldRenameMultipleProjects() { final ISVNRemoteFolder[] folders = getSelectedRemoteFolders(); return ((folders != null) && (folders.length > 1) && ((getProjectNamePrefix() != null) || (getProjectNameSuffix() != null))); } /** * Modifies the original project name to have an optional prefix and/or suffix. * * @param originalProjectName the project name to modify * @return the project name with optional prefix and/or suffix */ private String modifyProjectName(String originalProjectName) { final StringBuffer buffer = new StringBuffer(); if (getProjectNamePrefix() != null) { buffer.append(getProjectNamePrefix().trim()); } buffer.append(originalProjectName); if (getProjectNameSuffix() != null) { buffer.append(getProjectNameSuffix().trim()); } return buffer.toString(); } } CheckoutUsingProjectWizardAction.java000066400000000000000000000231341203611042400444400ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.io.File; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceChangeEvent; import org.eclipse.core.resources.IResourceChangeListener; import org.eclipse.core.resources.IResourceDelta; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.team.core.TeamException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.NewProjectAction; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.WorkspacePathValidator; import org.tigris.subversion.subclipse.ui.operations.CheckoutAsProjectOperation; import org.tigris.subversion.subclipse.ui.util.IPromptCondition; import org.tigris.subversion.subclipse.ui.util.PromptingDialog; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * Add a remote resource to the workspace. Current implementation: * - Works only for remote folders * - prompt for project name */ public class CheckoutUsingProjectWizardAction extends SVNAction { ISVNRemoteFolder[] folders; private SVNRevision svnRevision = SVNRevision.HEAD; private int depth = ISVNCoreConstants.DEPTH_INFINITY; private boolean ignoreExternals = false; private boolean force = true; public CheckoutUsingProjectWizardAction(ISVNRemoteFolder[] folders) { super(); this.folders = folders; } /* * @see TeamAction#isEnabled() */ protected boolean isEnabled() { // return getSelectedRemoteFolders().length == 1; return folders.length > 0; } /* * @see IActionDelegate#run(IAction) */ public void execute(IAction action) throws InvocationTargetException, InterruptedException { if (!WorkspacePathValidator.validateWorkspacePath()) return; if (folders.length == 1){ if (folders[0].getRepository().getRepositoryRoot().toString().equals(folders[0].getUrl().toString())) { if (!MessageDialog.openQuestion(shell, Policy.bind("CheckoutAsAction.title"), Policy.bind("AddToWorkspaceAction.checkingOutRoot"))) return; //$NON-NLS-1$ } checkoutSingleProject(folders[0]); } } /** * checkout a remote folder as a project */ private void checkoutSingleProject(final ISVNRemoteFolder remoteFolder) throws InvocationTargetException, InterruptedException { // Fetch the members of the folder to see if they contain a .project file. final String remoteFolderName = remoteFolder.getName(); final boolean[] hasProjectMetaFile = new boolean[] { false }; run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { try { remoteFolder.members(monitor); } catch (TeamException e) { throw new InvocationTargetException(e); } } }, true /* cancelable */, PROGRESS_DIALOG); // Prompt outside a workspace runnable so that the project creation delta can be heard IProject newProject = null; IProjectDescription newDesc = null; if (hasProjectMetaFile[0]) { } else { newProject = getNewProject(remoteFolderName); if (newProject == null) return; } final IProject project = newProject; final IProjectDescription desc = newDesc; run(new WorkspaceModifyOperation() { public void execute(IProgressMonitor monitor) throws InvocationTargetException { try { monitor.beginTask(null, 100); monitor.setTaskName(Policy.bind("CheckoutAsAction.taskname", remoteFolderName, project.getName())); //$NON-NLS-1$ int used = 0; if (hasProjectMetaFile[0]) { used = 5; createAndOpenProject(project, desc, Policy.subMonitorFor(monitor, used)); } } catch (TeamException e) { throw new InvocationTargetException(e); } finally { monitor.done(); } } }, true /* cancelable */, PROGRESS_DIALOG); CheckoutAsProjectOperation checkoutAsProjectOperation = new CheckoutAsProjectOperation(getTargetPart(), new ISVNRemoteFolder[] { remoteFolder }, new IProject[] { project }); checkoutAsProjectOperation.setSvnRevision(svnRevision); checkoutAsProjectOperation.setDepth(depth); checkoutAsProjectOperation.setIgnoreExternals(ignoreExternals); checkoutAsProjectOperation.setForce(force); checkoutAsProjectOperation.run(); } /** * Creates a project and open it */ private void createAndOpenProject(IProject project, IProjectDescription desc, IProgressMonitor monitor) throws SVNException { try { monitor.beginTask(null, 5); if (project.exists()) { if (desc != null) { project.move(desc, true, Policy.subMonitorFor(monitor, 3)); } } else { if (desc == null) { // create in default location project.create(Policy.subMonitorFor(monitor, 3)); } else { // create in some other location project.create(desc, Policy.subMonitorFor(monitor, 3)); } } if (!project.isOpen()) { project.open(Policy.subMonitorFor(monitor, 2)); } } catch (CoreException e) { throw SVNException.wrapException(e); } finally { monitor.done(); } } /** * Get a new project. * * The suggestedName is not currently used but is a desired capability. */ private IProject getNewProject(String suggestedName) { NewProjectListener listener = new NewProjectListener(); ResourcesPlugin.getWorkspace().addResourceChangeListener(listener, IResourceChangeEvent.POST_CHANGE); (new NewProjectAction(PlatformUI.getWorkbench().getActiveWorkbenchWindow())).run(); ResourcesPlugin.getWorkspace().removeResourceChangeListener(listener); // Ensure that the project only has a single member which is the .project file IProject project = listener.getNewProject(); if (project == null) return null; try { IResource[] members = project.members(); if ((members.length == 0) ||(members.length == 1 && members[0].getName().equals(".project"))) { //$NON-NLS-1$ return project; } else { // prompt to overwrite PromptingDialog prompt = new PromptingDialog(getShell(), new IProject[] { project }, CheckoutUsingProjectWizardAction.getOverwriteLocalAndFileSystemPrompt(), Policy.bind("ReplaceWithAction.confirmOverwrite"));//$NON-NLS-1$ try { if (prompt.promptForMultiple().length == 1) return project; } catch (InterruptedException e) { } } } catch (CoreException e) { handle(e); } return null; } /** * Listener used to get the project by NewProjectAction */ class NewProjectListener implements IResourceChangeListener { private IProject newProject = null; /** * @see IResourceChangeListener#resourceChanged(IResourceChangeEvent) */ public void resourceChanged(IResourceChangeEvent event) { IResourceDelta root = event.getDelta(); IResourceDelta[] projectDeltas = root.getAffectedChildren(); for (int i = 0; i < projectDeltas.length; i++) { IResourceDelta delta = projectDeltas[i]; IResource resource = delta.getResource(); if (delta.getKind() == IResourceDelta.ADDED) { newProject = (IProject)resource; } } } /** * Gets the newProject. * @return Returns a IProject */ public IProject getNewProject() { return newProject; } } /** * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("CheckoutAsAction.checkoutFailed"); //$NON-NLS-1$ } /** * get an IPromptCondition */ static public IPromptCondition getOverwriteLocalAndFileSystemPrompt() { return new IPromptCondition() { // prompt if resource in workspace exists or exists in local file system public boolean needsPrompt(IResource resource) { File localLocation = getFileLocation(resource); if(resource.exists() || localLocation.exists()) { return true; } return false; } public String promptMessage(IResource resource) { return Policy.bind("CheckoutAsAction.confirmOverwrite", resource.getName());//$NON-NLS-1$ } private File getFileLocation(IResource resource) { return new File(resource.getParent().getLocation().toFile(), resource.getName()); } }; } public void setSvnRevision(SVNRevision svnRevision) { this.svnRevision = svnRevision; } public void setDepth(int depth) { this.depth = depth; } public void setIgnoreExternals(boolean ignoreExternals) { this.ignoreExternals = ignoreExternals; } public void setForce(boolean force) { this.force = force; } } CheckoutWizardAction.java000066400000000000000000000036451203611042400421100ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.widgets.Shell; import org.tigris.subversion.subclipse.ui.wizards.CheckoutWizard; /** * Action that launches the checkout wizard */ public class CheckoutWizardAction extends WorkbenchWindowAction { Shell shell; /* (non-Javadoc) * @see org.eclipse.team.internal.ccvs.ui.actions.CVSAction#execute(org.eclipse.jface.action.IAction) */ public void execute(IAction action) throws InvocationTargetException, InterruptedException { CheckoutWizard wizard = new CheckoutWizard(); WizardDialog dialog = new WizardDialog(shell, wizard); dialog.open(); } /* (non-Javadoc) * @see org.eclipse.ui.IActionDelegate#selectionChanged(org.eclipse.jface.action.IAction, org.eclipse.jface.viewers.ISelection) */ public void selectionChanged(IAction action, ISelection selection) { } /* (non-Javadoc) * @see org.eclipse.team.internal.ui.actions.TeamAction#isEnabled() */ public boolean isEnabled() { return true; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#needsToSaveDirtyEditors() */ @Override protected boolean needsToSaveDirtyEditors() { return false; } } CleanupAction.java000066400000000000000000000046551203611042400405530ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.jface.action.IAction; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.operations.CleanupOperation; /** * Action to recursively cleanup any locks in teh working copy */ public class CleanupAction extends WorkbenchWindowAction { protected void execute(final IAction action) throws InvocationTargetException, InterruptedException { new CleanupOperation(getTargetPart(), getSelectedResources()).run(); } /** * @see org.eclipse.team.internal.ccvs.ui.actions.CVSAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("CleanupAction.error"); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForSVNResource(org.tigris.subversion.subclipse.core.ISVNLocalResource) */ protected boolean isEnabledForSVNResource(ISVNLocalResource svnResource) throws SVNException { return svnResource.isFolder() && super.isEnabledForSVNResource(svnResource); } /** * @see org.eclipse.team.internal.ccvs.ui.actions.WorkspaceAction#isEnabledForAddedResources() */ protected boolean isEnabledForAddedResources() { return false; } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_CLEANUP; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#needsToSaveDirtyEditors() */ @Override protected boolean needsToSaveDirtyEditors() { return false; } } CommitAction.java000066400000000000000000000543041203611042400404100ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceVisitor; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.MessageDialogWithToggle; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; import org.eclipse.team.internal.core.subscribers.ActiveChangeSet; import org.eclipse.team.internal.core.subscribers.ChangeSet; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.commands.GetStatusCommand; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.core.util.File2Resource; import org.tigris.subversion.subclipse.core.util.Util; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.dialogs.CommitToTagsWarningDialog; import org.tigris.subversion.subclipse.ui.operations.CommitOperation; import org.tigris.subversion.subclipse.ui.settings.ProjectProperties; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardCommitPage; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardDialog; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.utils.SVNStatusUtils; /** * Action for checking in files to a subversion provider * Prompts the user for a release comment, and shows a selection * list of added and modified resources, including unversioned resources. * If selected, unversioned resources will be added to version control, * and committed. */ public class CommitAction extends WorkbenchWindowAction { protected String commitComment; protected IResource[] resourcesToCommit; protected String url; protected boolean hasUnaddedResources; protected boolean commit; protected boolean keepLocks; protected IResource[] selectedResources; private String proposedComment; private boolean canRunAsJob = true; // private boolean sharing; private HashMap statusMap; public CommitAction() { } public CommitAction(String proposedComment) { this.proposedComment = proposedComment; } /* * get non added resources and prompts for resources to be added * prompts for comments * add non added files * commit selected files * @see SVNAction#execute(IAction) */ public void execute(IAction action) throws InvocationTargetException, InterruptedException { statusMap = new HashMap(); final IResource[] resources = getSelectedResources(); final List resourcesToBeAdded = new ArrayList(); final List resourcesToBeDeleted = new ArrayList(); if (action != null && !action.isEnabled()) { action.setEnabled(true); } else { run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { try { // search for modified or added, non-ignored resources in the selection. IResource[] modified = getModifiedResources(resources, monitor); // if no changes since last commit, do not show commit dialog. if (modified.length == 0) { MessageDialog.openInformation(getShell(), Policy.bind("CommitDialog.title"), Policy.bind("CommitDialog.noChanges")); //$NON-NLS-1$ //$NON-NLS-2$ commit = false; } else { ProjectProperties projectProperties = ProjectProperties.getProjectProperties(modified[0]); commit = confirmCommit(modified, projectProperties); } // if commit was not canceled, create a list of any // unversioned resources that were selected and a list of any missing // resources that were selected. if (commit) { for (int i = 0; i < resourcesToCommit.length; i++) { IResource resource = resourcesToCommit[i]; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); if (svnResource.exists() && !svnResource.isManaged()) resourcesToBeAdded.add(resource); if (svnResource.getStatus().isMissing()) resourcesToBeDeleted.add(resource); } } } catch (TeamException e) { throw new InvocationTargetException(e); } } }, true /* cancelable */, PROGRESS_BUSYCURSOR); //$NON-NLS-1$ if (!commit) { return; // user canceled } CommitOperation commitOperation = new CommitOperation(getTargetPart(), resources, (IResource[]) resourcesToBeAdded.toArray(new IResource[resourcesToBeAdded.size()]), (IResource[]) resourcesToBeDeleted.toArray(new IResource[resourcesToBeDeleted.size()]), resourcesToCommit, commitComment, keepLocks); commitOperation.setCanRunAsJob(canRunAsJob); commitOperation.run(); } } /** * get the modified and unadded resources in resources parameter */ protected IResource[] getModifiedResources(IResource[] resources, IProgressMonitor iProgressMonitor) throws SVNException { boolean ignoreHiddenChanges = SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_IGNORE_HIDDEN_CHANGES); IResource[] allResources = getSelectedResources(true); List allSelections = new ArrayList(); for (int i = 0; i < allResources.length; i++) allSelections.add(allResources[i]); List conflictFiles = new ArrayList(); final List modified = new ArrayList(); List unversionedFolders = new ArrayList(); hasUnaddedResources = false; for (int i = 0; i < resources.length; i++) { IResource resource = resources[i]; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); // This check is for when the action is called with unmanaged resources if (svnResource.getRepository() == null) { continue; } // if only one resource selected, get url. Commit dialog displays this. if (resources.length == 1) { url = svnResource.getStatus().getUrlString(); if ((url == null) || (resource.getType() == IResource.FILE)) url = Util.getParentUrl(svnResource); } boolean descend = true; if (resource instanceof IContainer) { outer: for (int j = 0; j < allResources.length; j++) { if (allResources[j] == resource) continue; IContainer parent = allResources[j].getParent(); while (parent != null) { if (parent.equals(resource)) { descend = false; break outer; } parent = parent.getParent(); } } } // get adds, deletes, updates and property updates. GetStatusCommand command = new GetStatusCommand(svnResource, descend, false); command.run(iProgressMonitor); ISVNStatus[] statuses = command.getStatuses(); boolean switched = false; for (int j = 0; j < statuses.length; j++) { if (SVNStatusUtils.isReadyForCommit(statuses[j]) || SVNStatusUtils.isMissing(statuses[j])) { IResource currentResource = SVNWorkspaceRoot.getResourceFor(resource, statuses[j]); if (currentResource != null && (descend == true || allSelections.contains(currentResource))) { SVNProviderPlugin.getPlugin().getStatusCacheManager().updateCache(currentResource, statuses[j]); ISVNLocalResource localResource = SVNWorkspaceRoot.getSVNResourceFor(currentResource); if (!localResource.isIgnored()) { if (!SVNStatusUtils.isManaged(statuses[j])) { if (!Util.isHidden(currentResource)) { hasUnaddedResources = true; if ((currentResource.getType() != IResource.FILE) && !isSymLink(currentResource)) unversionedFolders.add(currentResource); else { if (!modified.contains(currentResource)) { modified.add(currentResource); if (currentResource instanceof IContainer) statusMap.put(currentResource, statuses[j].getPropStatus()); else statusMap.put(currentResource, statuses[j].getTextStatus()); } } } } else if (!ignoreHiddenChanges || !Util.isHidden(currentResource)) { if (!modified.contains(currentResource)) { if (statuses[j].isSwitched()) { switched = true; url = statuses[j].getUrlString(); } modified.add(currentResource); if (currentResource instanceof IContainer) statusMap.put(currentResource, statuses[j].getPropStatus()); else { statusMap.put(currentResource, statuses[j].getTextStatus()); if (SVNStatusUtils.isTextConflicted(statuses[j])) { IFile conflictNewFile = (IFile) File2Resource .getResource(statuses[j] .getConflictNew()); if (conflictNewFile != null) conflictFiles.add(conflictNewFile); IFile conflictOldFile = (IFile) File2Resource .getResource(statuses[j] .getConflictOld()); if (conflictOldFile != null) conflictFiles.add(conflictOldFile); IFile conflictWorkingFile = (IFile) File2Resource .getResource(statuses[j] .getConflictWorking()); if (conflictWorkingFile != null) conflictFiles.add(conflictWorkingFile); } } } } } } } } if (switched && modified.size() > 1) { url = null; } } IResource[] unaddedResources = getUnaddedResources(unversionedFolders, iProgressMonitor); for (int i = 0; i < unaddedResources.length; i++) if (!modified.contains(unaddedResources[i])) modified.add(unaddedResources[i]); Iterator iter = conflictFiles.iterator(); while (iter.hasNext()) { IFile conflictFile = (IFile)iter.next(); modified.remove(conflictFile); statusMap.remove(conflictFile); } return (IResource[]) modified.toArray(new IResource[modified.size()]); } public int getHighestProblemSeverity(IResource[] resources) { int mostSeriousSeverity = -1; for (int i = 0; i < resources.length; i++) { IResource resource = resources[i]; try { IMarker[] problems = resource.findMarkers(IMarker.PROBLEM, true, IResource.DEPTH_ZERO); for (int j = 0; j < problems.length; j++) { IMarker problem = problems[j]; int severity = problem.getAttribute(IMarker.SEVERITY, 0); if (severity > mostSeriousSeverity) { mostSeriousSeverity = severity; } } } catch (CoreException e) { } } return mostSeriousSeverity; } /** * prompt commit of selected resources. * @throws SVNException */ protected boolean confirmCommit(IResource[] modifiedResources, ProjectProperties projectProperties) throws SVNException { IPreferenceStore preferenceStore = SVNUIPlugin.getPlugin().getPreferenceStore(); boolean commitToTagsPathWithoutWarning = preferenceStore.getBoolean(ISVNUIConstants.PREF_COMMIT_TO_TAGS_PATH_WITHOUT_WARNING); if (!commitToTagsPathWithoutWarning && onTagPath(modifiedResources)) { // Warning - working copy appears to be on a tag path. CommitToTagsWarningDialog dialog = new CommitToTagsWarningDialog(getShell()); if (dialog.open() != CommitToTagsWarningDialog.OK) { return false; } } int highestProblemSeverity = getHighestProblemSeverity(modifiedResources); switch (highestProblemSeverity) { case IMarker.SEVERITY_WARNING: String allowCommitsWithWarnings = preferenceStore.getString(ISVNUIConstants.PREF_ALLOW_COMMIT_WITH_WARNINGS); if (MessageDialogWithToggle.PROMPT.equals(allowCommitsWithWarnings) || MessageDialogWithToggle.NEVER.equals(allowCommitsWithWarnings)) { MessageDialogWithToggle warningDialog = MessageDialogWithToggle.openYesNoQuestion(shell, Policy.bind("CommitWizard.commitResources"), Policy.bind("CommitWizard.warningMarkers"), Policy.bind("CommitWizard.warningQuestion"), false, preferenceStore, ISVNUIConstants.PREF_ALLOW_COMMIT_WITH_WARNINGS); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ if (IDialogConstants.YES_ID != warningDialog.getReturnCode()) { return false; } } break; case IMarker.SEVERITY_ERROR: String allowCommitsWithErrors = preferenceStore.getString(ISVNUIConstants.PREF_ALLOW_COMMIT_WITH_ERRORS); if (MessageDialogWithToggle.PROMPT.equals(allowCommitsWithErrors) || MessageDialogWithToggle.NEVER.equals(allowCommitsWithErrors)) { MessageDialogWithToggle errorDialog = MessageDialogWithToggle.openYesNoQuestion(shell, Policy.bind("CommitWizard.commitResources"), Policy.bind("CommitWizard.errorMarkers"), Policy.bind("CommitWizard.errorQuestion"), false, preferenceStore, ISVNUIConstants.PREF_ALLOW_COMMIT_WITH_ERRORS); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ if (IDialogConstants.YES_ID != errorDialog.getReturnCode()) { return false; } } break; } SvnWizardCommitPage commitPage = new SvnWizardCommitPage(modifiedResources, url, projectProperties, statusMap, null, false); // commitPage.setSharing(sharing); SvnWizard wizard = new SvnWizard(commitPage); SvnWizardDialog dialog = new SvnWizardDialog(getShell(), wizard); if (proposedComment == null || proposedComment.length() == 0) { commitPage.setComment(getProposedComment(modifiedResources)); } else { commitPage.setComment(proposedComment); } wizard.setParentDialog(dialog); boolean commitOK = (dialog.open() == SvnWizardDialog.OK); url = null; commitComment = commitPage.getComment(); resourcesToCommit = commitPage.getSelectedResources(); keepLocks = commitPage.isKeepLocks(); return commitOK; } private boolean onTagPath(IResource[] modifiedResources) throws SVNException { // Multiple resources selected. if (url == null) { IResource resource = modifiedResources[0]; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); String firstUrl = svnResource.getStatus().getUrlString(); if ((firstUrl == null) || (resource.getType() == IResource.FILE)) firstUrl = Util.getParentUrl(svnResource); if (firstUrl.indexOf("/tags/") != -1) return true; //$NON-NLS-1$ } // One resource selected. else if (url.indexOf("/tags/") != -1) return true; //$NON-NLS-1$ return false; } /** * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("CommitAction.commitFailed"); //$NON-NLS-1$ } /** * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForUnmanagedResources() */ protected boolean isEnabledForUnmanagedResources() { return true; } protected boolean isEnabled() throws TeamException { // invoke the inherited method so that overlaps are maintained IResource[] resources = super.getSelectedResources(); // disable if no resources are selected if(resources.length==0) return false; // validate enabled for each resource in the selection for (int i = 0; i < resources.length; i++) { IResource resource = resources[i]; // no SVN actions are enabled if the selection contains a linked resource if (SVNWorkspaceRoot.isLinkedResource(resource)) return false; // only enable for resources in a project shared with SVN if(RepositoryProvider.getProvider(resource.getProject(), SVNProviderPlugin.getTypeId()) == null) { return false; } // ensure that resource management state matches what the action requires ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); if (!isEnabledForSVNResource(svnResource)) { return false; } } return true; } /** * get the unadded resources in resources parameter */ private IResource[] getUnaddedResources(List resources, IProgressMonitor iProgressMonitor) throws SVNException { final List unadded = new ArrayList(); final SVNException[] exception = new SVNException[] { null }; for (Iterator iter = resources.iterator(); iter.hasNext();) { IResource resource = (IResource) iter.next(); if (resource.exists()) { // visit each resource deeply try { resource.accept(new IResourceVisitor() { public boolean visit(IResource aResource) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(aResource); // skip ignored resources and their children try { if (svnResource.isIgnored()) return false; // visit the children of shared resources if (svnResource.isManaged()) return true; if ((aResource.getType() == IResource.FOLDER) && isSymLink(aResource)) // don't traverse into symlink folders return false; } catch (SVNException e) { exception[0] = e; } // file/folder is unshared so record it unadded.add(aResource); return aResource.getType() == IResource.FOLDER; } }, IResource.DEPTH_INFINITE, false /* include phantoms */); } catch (CoreException e) { throw SVNException.wrapException(e); } if (exception[0] != null) throw exception[0]; } } if (unadded.size() > 0) hasUnaddedResources = true; return (IResource[]) unadded.toArray(new IResource[unadded.size()]); } protected boolean isSymLink(IResource resource) { File file = resource.getLocation().toFile(); try { if (!file.exists()) return true; else { String cnnpath = file.getCanonicalPath(); String abspath = file.getAbsolutePath(); return !abspath.equals(cnnpath); } } catch(IOException ex) { return true; } } protected IResource[] getSelectedResources() { if (selectedResources == null) return super.getSelectedResources(); else return selectedResources; } public void setSelectedResources(IResource[] selectedResources) { this.selectedResources = selectedResources; } /* * Get a proposed comment by looking at the active change sets */ private String getProposedComment(IResource[] resourcesToCommit) { StringBuffer comment = new StringBuffer(); ChangeSet[] sets = SVNProviderPlugin.getPlugin().getChangeSetManager().getSets(); int numMatchedSets = 0; for (int i = 0; i < sets.length; i++) { ChangeSet set = sets[i]; if (isUserSet(set) && containsOne(set, resourcesToCommit)) { if(numMatchedSets > 0) comment.append(System.getProperty("line.separator")); //$NON-NLS-1$ comment.append(set.getComment()); numMatchedSets++; } } return comment.toString(); } private boolean isUserSet(ChangeSet set) { if (set instanceof ActiveChangeSet) { ActiveChangeSet acs = (ActiveChangeSet) set; return acs.isUserCreated(); } return false; } private boolean containsOne(ChangeSet set, IResource[] resourcesToCommit) { for (int j = 0; j < resourcesToCommit.length; j++) { IResource resource = resourcesToCommit[j]; if (set.contains(resource)) { return true; } if (set instanceof ActiveChangeSet) { ActiveChangeSet acs = (ActiveChangeSet) set; if (acs.getDiffTree().members(resource).length > 0) return true; } } return false; } public boolean hasOutgoingChanges() { try { return getModifiedResources(selectedResources, new NullProgressMonitor()).length > 0; } catch (SVNException e) { } return false; } // public void setSharing(boolean sharing) { // this.sharing = sharing; // } protected String getImageId() { return ISVNUIConstants.IMG_MENU_COMMIT; } public void setCanRunAsJob(boolean canRunAsJob) { this.canRunAsJob = canRunAsJob; } } CompareRemoteResourcesAction.java000066400000000000000000000135341203611042400436150ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.compare.CompareUI; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNResource; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.resources.RemoteFolder; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.compare.ResourceEditionNode; import org.tigris.subversion.subclipse.ui.compare.SVNCompareEditorInput; import org.tigris.subversion.subclipse.ui.compare.SVNFolderCompareEditorInput; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * This action is used for comparing two arbitrary remote resources. This is * enabled in the repository explorer. */ public class CompareRemoteResourcesAction extends SVNAction { private ISVNRemoteResource[] remoteResources; private ISVNResource[] localResources; private SVNRevision[] pegRevisions; public void execute(IAction action) throws InvocationTargetException, InterruptedException { run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) { ISVNRemoteResource[] editions = getSelectedRemoteResources(); if (editions == null || editions.length != 2) { Object[] selectedObjects = selection.toArray(); if (selectedObjects.length == 2 && selectedObjects[0] instanceof ILogEntry && selectedObjects[1] instanceof ILogEntry) { ILogEntry logEntry1 = (ILogEntry)selectedObjects[0]; ILogEntry logEntry2 = (ILogEntry)selectedObjects[1]; try { ISVNRemoteFolder folder1 = new RemoteFolder(logEntry1.getResource().getRepository(), logEntry1.getResource().getUrl(), logEntry1.getRevision()); ISVNRemoteFolder folder2 = new RemoteFolder(logEntry2.getResource().getRepository(), logEntry2.getResource().getUrl(), logEntry2.getRevision()); compareFolders(folder1, folder2); } catch (Exception e) { } } else { MessageDialog.openError(getShell(), Policy.bind("CompareRemoteResourcesAction.unableToCompare"), Policy.bind("CompareRemoteResourcesAction.selectTwoResources")); //$NON-NLS-1$ //$NON-NLS-2$ } return; } if (editions[0] instanceof ISVNRemoteFolder && editions[1] instanceof ISVNRemoteFolder) { compareFolders((ISVNRemoteFolder)editions[0], (ISVNRemoteFolder)editions[1]); return; } ResourceEditionNode left = new ResourceEditionNode(editions[0]); ResourceEditionNode right = new ResourceEditionNode(editions[1]); CompareUI.openCompareEditorOnPage( new SVNCompareEditorInput(left, right), getTargetPage()); } private void compareFolders(ISVNRemoteFolder folder1, ISVNRemoteFolder folder2) { SVNRevision pegRevision1 = null; SVNRevision pegRevision2 = null; if (pegRevisions != null && pegRevisions.length > 0) { pegRevision1 = pegRevisions[0]; } else { pegRevision1 = SVNRevision.HEAD; } if (pegRevisions != null && pegRevisions.length > 1) { pegRevision2 = pegRevisions[1]; } else { pegRevision2 = pegRevision1; } SVNFolderCompareEditorInput compareEditorInput = new SVNFolderCompareEditorInput(folder1, pegRevision1, folder2, pegRevision2); if (localResources != null && localResources.length > 1) { compareEditorInput.setLocalResource1(localResources[0]); compareEditorInput.setLocalResource2(localResources[1]); } CompareUI.openCompareEditorOnPage(compareEditorInput, getTargetPage()); } }, false /* cancelable */, PROGRESS_BUSYCURSOR); } /* * @see TeamAction#isEnabled() */ protected boolean isEnabled() { ISVNRemoteResource[] resources = getSelectedRemoteResources(); boolean enabled = (resources.length == 2) && (resources[0].isContainer() == resources[1].isContainer()); if (!enabled) { Object[] selectedObjects = selection.toArray(); if (selectedObjects.length == 2 && selectedObjects[0] instanceof ILogEntry && selectedObjects[1] instanceof ILogEntry) { ILogEntry logEntry1 = (ILogEntry)selectedObjects[0]; ILogEntry logEntry2 = (ILogEntry)selectedObjects[1]; if (logEntry1.getResource() != null && logEntry1.getResource().isFolder() && logEntry2.getResource() != null && logEntry2.getResource().isFolder()) enabled = true; } } return enabled; } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_COMPARE; } public void setRemoteResources(ISVNRemoteResource[] remoteResources) { this.remoteResources = remoteResources; } public void setPegRevisions(SVNRevision[] pegRevisions) { this.pegRevisions = pegRevisions; } protected ISVNRemoteResource[] getSelectedRemoteResources() { if (remoteResources != null) return remoteResources; return super.getSelectedRemoteResources(); } public void setLocalResources(ISVNResource[] localResources) { this.localResources = localResources; } } CompareSvnPropertiesAction.java000066400000000000000000000060051203611042400433050ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actionspackage org.tigris.subversion.subclipse.ui.actions; import org.eclipse.compare.CompareUI; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Display; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.compare.IPropertyProvider; import org.tigris.subversion.subclipse.ui.compare.PropertyCompareLocalResourceNode; import org.tigris.subversion.subclipse.ui.compare.PropertyCompareRemoteResourceNode; import org.tigris.subversion.subclipse.ui.dialogs.ComparePropertiesDialog; import org.tigris.subversion.svnclientadapter.SVNRevision; public class CompareSvnPropertiesAction extends WorkbenchWindowAction { private IPropertyProvider right; private Exception exception; public void execute(IAction action) { exception = null; IResource[] resources = getSelectedResources(); IPropertyProvider left = null; right = null; if (resources != null && resources.length > 0) { left = new PropertyCompareLocalResourceNode(resources[0], true, null); if (resources.length > 1) { right = new PropertyCompareLocalResourceNode(resources[1], true, null); } else { final ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resources[0]); BusyIndicator.showWhile(Display.getDefault(), new Runnable() { public void run() { try { right = new PropertyCompareRemoteResourceNode(svnResource.getRemoteResource(SVNRevision.HEAD), SVNRevision.HEAD, true, null); } catch (SVNException e) { exception = e; } } }); if (exception != null) { MessageDialog.openError(getShell(), Policy.bind("CompareSvnPropertiesAction.0"), exception.getMessage()); //$NON-NLS-1$ return; } } } else { ISVNRemoteResource[] remoteResources = getSelectedRemoteResources(); if (remoteResources != null && remoteResources.length > 0) { left = new PropertyCompareRemoteResourceNode(remoteResources[0], SVNRevision.HEAD, true, null); if (remoteResources.length > 1) { right = new PropertyCompareRemoteResourceNode(remoteResources[1], SVNRevision.HEAD, true, null); } } } ComparePropertiesDialog dialog = new ComparePropertiesDialog(getShell(), left, right); if (dialog.open() == ComparePropertiesDialog.OK) { CompareUI.openCompareEditorOnPage(dialog.getInput(), getTargetPage()); } } @Override protected boolean isEnabled() throws TeamException { if (getSelectedResources() == null || getSelectedResources().length == 0) { return true; } return super.isEnabled(); } } CompareWithBaseRevisionAction.java000066400000000000000000000016141203611042400437100ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import org.tigris.subversion.svnclientadapter.SVNRevision; public class CompareWithBaseRevisionAction extends CompareWithRemoteAction { /** * Creates a new compare action that will compare against the BASE revision */ public CompareWithBaseRevisionAction() { super(SVNRevision.BASE); } } CompareWithHeadRevisionAction.java000066400000000000000000000016141203611042400436770ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import org.tigris.subversion.svnclientadapter.SVNRevision; public class CompareWithHeadRevisionAction extends CompareWithRemoteAction { /** * Creates a new compare action that will compare against the HEAD revision */ public CompareWithHeadRevisionAction() { super(SVNRevision.HEAD); } } CompareWithRemoteAction.java000066400000000000000000000155231203611042400425560ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.io.File; import org.eclipse.compare.CompareUI; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.RemoteFile; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.compare.SVNLocalBaseCompareInput; import org.tigris.subversion.subclipse.ui.compare.SVNLocalCompareInput; import org.tigris.subversion.subclipse.ui.compare.SVNLocalCompareSummaryInput; import org.tigris.subversion.subclipse.ui.operations.ShowDifferencesAsUnifiedDiffOperationWC; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.utils.Depth; public abstract class CompareWithRemoteAction extends WorkbenchWindowAction { private final SVNRevision revision; private boolean refresh; private boolean fileSelected; /** * Creates a new CompareWithRemoteAction for the specified revision * @param revision Revision to compare against. Only relative resisions (HEAD,BASE,PREVIOUS) shoudl be used */ public CompareWithRemoteAction(SVNRevision revision) { this.revision = revision; } public void execute(IAction action) { refresh = false; fileSelected = false; final IResource[] resources = getSelectedResources(); if (resources.length != 1 && !SVNRevision.BASE.equals(revision) && !SVNRevision.HEAD.equals(revision)) { return; } for (int i = 0; i < resources.length; i++) { if (resources[i] instanceof IFile) { fileSelected = true; if (!resources[i].isSynchronized(Depth.immediates)) { refresh = MessageDialog.openQuestion(getShell(), Policy.bind("DifferencesDialog.compare"), Policy.bind("CompareWithRemoteAction.fileChanged")); break; } } } try { final ISVNLocalResource[] localResources = new ISVNLocalResource[resources.length]; for (int i = 0; i < resources.length; i++) { localResources[i] = SVNWorkspaceRoot.getSVNResourceFor(resources[i]); } final ISVNLocalResource localResource = localResources[0]; run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) { try { if (refresh) { for (int i = 0; i < localResources.length; i++) { if (resources[i] instanceof IFile) { localResources[i].getResource().refreshLocal(Depth.immediates, monitor); } } } if (SVNRevision.BASE.equals(revision)) { if (localResources.length == 1 && localResource.getResource() instanceof IFile) { SVNLocalCompareInput compareInput = new SVNLocalCompareInput(localResource, revision); CompareUI.openCompareEditorOnPage( compareInput, getTargetPage()); } else { SVNLocalBaseCompareInput compareInput = new SVNLocalBaseCompareInput(localResources, revision); CompareUI.openCompareEditorOnPage( compareInput, getTargetPage()); } } else { if (!fileSelected) { SVNLocalCompareSummaryInput compareInput = new SVNLocalCompareSummaryInput(localResources, revision); CompareUI.openCompareEditorOnPage( compareInput, getTargetPage()); } else { ISVNRemoteFile remoteFile = new RemoteFile(localResource.getRepository(), localResource.getUrl(), revision); ((RemoteFile)remoteFile).setPegRevision(revision); SVNLocalCompareInput compareInput = new SVNLocalCompareInput(localResource, remoteFile); ShowDifferencesAsUnifiedDiffOperationWC operation = null; if (SVNRevision.HEAD.equals(revision)) { File file = File.createTempFile("revision", ".diff"); file.deleteOnExit(); operation = new ShowDifferencesAsUnifiedDiffOperationWC(getTargetPart(), localResource.getFile(), localResource.getUrl(), SVNRevision.HEAD, file); operation.setGraphicalCompare(true); operation.run(); } compareInput.setDiffOperation(operation); CompareUI.openCompareEditorOnPage( compareInput, getTargetPage()); } } } catch (Exception e) { handle(e, null, null); } } }, false /* cancelable */, PROGRESS_BUSYCURSOR); } catch (Exception e) { handle(e, null, null); } } /** * Enable for resources that are managed (using super) or whose parent is an SVN folder. * * @see org.eclipse.team.internal.ccvs.ui.actions.WorkspaceAction#isEnabledForCVSResource(org.eclipse.team.internal.ccvs.core.ICVSResource) */ protected boolean isEnabledForSVNResource(ISVNLocalResource svnResource) throws SVNException { if (svnResource.getResource() == null || !svnResource.getResource().exists()) { return false; } return super.isEnabledForSVNResource(svnResource) || svnResource.getParent().isManaged(); } /** * Added resources don't have any details to compare against * TODO if the addition is because of a copy this should be allowed (requires some way to get the remote resource from the original location) */ protected boolean isEnabledForAddedResources() { return false; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForInaccessibleResources() */ protected boolean isEnabledForInaccessibleResources() { // it can be useful to compare the content of a file that has been deleted with the remote resource // this is particulary useful for CompareWithBaseRevisionAction return true; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForMultipleResources() */ protected boolean isEnabledForMultipleResources() { return SVNRevision.BASE.equals(revision) || SVNRevision.HEAD.equals(revision); } protected String getImageId() { return ISVNUIConstants.IMG_MENU_COMPARE; } } CompareWithRevisionAction.java000066400000000000000000000146071203611042400431230ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.compare.CompareUI; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.TeamException; import org.eclipse.team.ui.SaveablePartDialog; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.commands.GetLogsCommand; import org.tigris.subversion.subclipse.core.history.AliasManager; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.compare.SVNCompareRevisionsInput; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.utils.Depth; /** * Used when you want to compare local resource with remote ones */ public class CompareWithRevisionAction extends WorkbenchWindowAction { private boolean refresh; /** * Returns the selected remote file */ protected ISVNRemoteFile getSelectedRemoteFile() { IResource[] resources = getSelectedResources(); if (resources.length != 1) return null; if (!(resources[0] instanceof IFile)) return null; IFile file = (IFile)resources[0]; try { return (ISVNRemoteFile)SVNWorkspaceRoot.getBaseResourceFor(file); } catch (TeamException e) { handle(e, null, null); return null; } } /* * @see SVNAction#execute(IAction) */ public void execute(IAction action) throws InvocationTargetException, InterruptedException { refresh = false; // Setup holders final ISVNRemoteFile[] file = new ISVNRemoteFile[] { null }; final ILogEntry[][] entries = new ILogEntry[][] { null }; // Get the selected file run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) { file[0] = getSelectedRemoteFile(); } }, false /* cancelable */, PROGRESS_BUSYCURSOR); if (file[0] == null) { // No revisions for selected file MessageDialog.openWarning(getShell(), Policy.bind("CompareWithRevisionAction.noRevisions"), Policy.bind("CompareWithRevisionAction.noRevisionsLong")); //$NON-NLS-1$ //$NON-NLS-2$ return; } if (!file[0].getResource().isSynchronized(Depth.immediates)) { refresh = MessageDialog.openQuestion(getShell(), Policy.bind("DifferencesDialog.compare"), Policy.bind("CompareWithRemoteAction.fileChanged")); } // Fetch the log entries run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { try { monitor.beginTask(Policy.bind("CompareWithRevisionAction.fetching"), 100); //$NON-NLS-1$ AliasManager tagManager = null; IResource[] resources = getSelectedResources(); if (refresh) resources[0].refreshLocal(Depth.immediates, monitor); if (resources.length == 1) tagManager = new AliasManager(resources[0]); GetLogsCommand logCmd = new GetLogsCommand(file[0], SVNRevision.HEAD, SVNRevision.HEAD, new SVNRevision.Number(0), false, 0, tagManager, false); logCmd.run(Policy.subMonitorFor(monitor, 100)); entries[0] = logCmd.getLogEntries(); monitor.done(); } catch (Exception e) { throw new InvocationTargetException(e); } } }, true /* cancelable */, PROGRESS_DIALOG); if (entries[0] == null) return; // Show the compare viewer run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { SVNCompareRevisionsInput input = new SVNCompareRevisionsInput((IFile)getSelectedResources()[0], entries[0]); if(SVNUIPlugin.getPlugin().getPreferenceStore().getBoolean(ISVNUIConstants.PREF_SHOW_COMPARE_REVISION_IN_DIALOG)) { // running with a null progress monitor is fine because we have already pre-fetched the log entries above. input.run(new NullProgressMonitor()); SaveablePartDialog cd = createCompareDialog(getShell(), input); cd.setBlockOnOpen(true); cd.open(); } else { CompareUI.openCompareEditorOnPage(input, getTargetPage()); } } }, false /* cancelable */, PROGRESS_BUSYCURSOR); } /** * Return the compare dialog to use to show the compare input. */ protected SaveablePartDialog createCompareDialog(Shell shell, SVNCompareRevisionsInput input) { return new SaveablePartDialog(shell, input); //$NON-NLS-1$ } /** * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("CompareWithRevisionAction.compare"); //$NON-NLS-1$ } /** * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForSVNResource(org.tigris.subversion.subclipse.core.ISVNResource) */ protected boolean isEnabledForSVNResource(ISVNLocalResource svnResource) throws SVNException { return (!svnResource.isFolder() && super.isEnabledForSVNResource(svnResource)); } /** * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForMultipleResources() */ protected boolean isEnabledForMultipleResources() { return false; } /** * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForAddedResources() */ protected boolean isEnabledForAddedResources() { return false; } protected String getImageId() { return ISVNUIConstants.IMG_MENU_COMPARE; } } ConfigurableMergeAction.java000066400000000000000000000030371203611042400425350ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actionspackage org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class ConfigurableMergeAction extends WorkbenchWindowAction { public ConfigurableMergeAction() { super(); } public void setActivePart(IAction action, IWorkbenchPart targetPart) { super.setActivePart(action, targetPart); SVNUIPlugin.getDefaultMergeProvider().setActivePart(action, targetPart); } public void selectionChanged(IAction action, ISelection sel) { super.selectionChanged(action, sel); SVNUIPlugin.getDefaultMergeProvider().selectionChanged(action, sel); } protected void execute(IAction action) throws InvocationTargetException, InterruptedException { SVNUIPlugin.getDefaultMergeProvider().execute(action); } protected String getErrorTitle() { return SVNUIPlugin.getDefaultMergeProvider().getErrorTitle(); } protected boolean isEnabledForManagedResources() { return SVNUIPlugin.getDefaultMergeProvider().isEnabledForManagedResources(); } protected boolean isEnabledForUnmanagedResources() { return SVNUIPlugin.getDefaultMergeProvider().isEnabledForUnmanagedResources(); } protected boolean isEnabledForMultipleResources() { return SVNUIPlugin.getDefaultMergeProvider().isEnabledForMultipleResources(); } protected String getImageId() { return SVNUIPlugin.getDefaultMergeProvider().getImageId(); } } ConfigureTagsAction.java000066400000000000000000000057341203611042400417230ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Messages; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardConfigureTagsPage; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardDialog; import org.tigris.subversion.svnclientadapter.ISVNProperty; public class ConfigureTagsAction extends WorkspaceAction { public ConfigureTagsAction() { super(); } protected void execute(IAction action) throws InvocationTargetException, InterruptedException { IResource[] resources = getSelectedResources(); ISVNLocalResource[] svnResources = new ISVNLocalResource[resources.length]; ISVNProperty lastProperty = null; for (int i = 0; i < resources.length; i++) { svnResources[i] = SVNWorkspaceRoot.getSVNResourceFor(resources[i]); try { ISVNProperty property = svnResources[i].getSvnProperty("subclipse:tags"); //$NON-NLS-1$ if (i > 0 && !propertiesEqual(property, lastProperty)) { MessageDialog.openError(getShell(), Messages.ConfigureTagsAction_1, Messages.ConfigureTagsAction_2); return; } lastProperty = property; } catch (SVNException e) {} } SvnWizardConfigureTagsPage configureTagsPage = new SvnWizardConfigureTagsPage(svnResources); SvnWizard wizard = new SvnWizard(configureTagsPage); SvnWizardDialog dialog = new SvnWizardDialog(getShell(), wizard); wizard.setParentDialog(dialog); dialog.open(); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#needsToSaveDirtyEditors() */ @Override protected boolean needsToSaveDirtyEditors() { return false; } private boolean propertiesEqual(ISVNProperty property1, ISVNProperty property2) { String value1 = null; String value2 = null; if (property1 != null) value1 = property1.getValue(); if (property2 != null) value2 = property2.getValue(); if (value1 == null) value1 = ""; //$NON-NLS-1$ if (value2 == null) value2 = ""; //$NON-NLS-1$ return value1.equals(value2); } } CopyAction.java000066400000000000000000000134311203611042400400660ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.io.File; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.IInputValidator; import org.eclipse.jface.dialogs.InputDialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Display; import org.eclipse.team.core.TeamException; import org.eclipse.ui.dialogs.ContainerSelectionDialog; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; public class CopyAction extends WorkbenchWindowAction { protected void execute(IAction action) throws InvocationTargetException, InterruptedException { final IResource[] resources = getSelectedResources(); final IProject project = resources[0].getProject(); ContainerSelectionDialog dialog = new ContainerSelectionDialog(getShell(), project, false, Policy.bind("CopyAction.selectionLabel")); //$NON-NLS-1$ if (dialog.open() == ContainerSelectionDialog.CANCEL) return; Object[] result = dialog.getResult(); if (result == null || result.length == 0) return; final Path path = (Path)result[0]; IProject selectedProject; File target = null; if (path.segmentCount() == 1) { selectedProject = ResourcesPlugin.getWorkspace().getRoot().getProject(path.toString()); target = selectedProject.getLocation().toFile(); } else { IFile targetFile = ResourcesPlugin.getWorkspace().getRoot().getFile(path); selectedProject = targetFile.getProject(); target = targetFile.getLocation().toFile(); } final IProject targetProject = selectedProject; final File destPath = target; BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { ISVNClientAdapter client = null; ISVNRepositoryLocation repository = null; try { ISVNLocalResource svnTargetResource = SVNWorkspaceRoot.getSVNResourceFor(targetProject); for (int i = 0; i < resources.length; i++) { final IResource resource = resources[i]; if (client == null) { repository = SVNWorkspaceRoot.getSVNResourceFor(resources[i]).getRepository(); client = repository.getSVNClient(); } File checkFile = new File(destPath.getPath() + File.separator + resource.getName()); File srcPath = new File(resource.getLocation().toString()); File newDestPath = new File(destPath.getPath() + File.separator + resource.getName()); if (checkFile.exists()) { IInputValidator inputValidator = new IInputValidator() { public String isValid(String newText) { if (newText.equals(resource.getName())) return Policy.bind("CopyAction.nameConflictSame"); //$NON-NLS-1$ return null; } }; InputDialog inputDialog = new InputDialog(getShell(), Policy.bind("CopyAction.nameConflictTitle"), Policy.bind("CopyAction.nameConflictMessage", resource.getName()), "Copy of " + resource.getName(), inputValidator); //$NON-NLS-1$ if (inputDialog.open() == InputDialog.CANCEL) return; String newName = inputDialog.getValue(); if (newName == null || newName.trim().length() == 0) return; newDestPath = new File(destPath.getPath() + File.separator + newName); } ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); boolean sameRepository = svnTargetResource != null && svnTargetResource.getRepository() != null && svnTargetResource.getRepository().getLocation().equals(svnResource.getRepository().getLocation()); if (sameRepository) client.copy(srcPath, newDestPath); else client.doExport(srcPath, newDestPath, true); SVNUIPlugin.getPlugin().getRepositoryManager().resourceCreated(null, null); } targetProject.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("CopyAction.copy"), e.getMessage()); //$NON-NLS-1$ } finally { if (repository != null) { repository.returnSVNClient(client); } } } }); } protected boolean isEnabled() throws TeamException { // Only enabled if all selections are from same project. boolean enabled = super.isEnabled(); if (!enabled) return false; IResource[] resources = getSelectedResources(); IProject project = null; for (int i = 0; i < resources.length; i++) { if (resources[i] instanceof IProject) return false; if (project != null && !resources[i].getProject().equals(project)) return false; project = resources[i].getProject(); } return true; } protected String getImageId() { return ISVNUIConstants.IMG_MENU_COPY; } } CopyRemoteResourceAction.java000066400000000000000000000033621203611042400427540ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import org.eclipse.jface.action.IAction; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.Transfer; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; /** * Copy selected remote resources to clipboard */ public class CopyRemoteResourceAction extends SVNAction { /* * (non-Javadoc) * * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#execute(org.eclipse.jface.action.IAction) */ protected void execute(IAction action) { ISVNRemoteResource remoteResources[] = getSelectedRemoteResources(); Clipboard clipboard = new Clipboard(getShell().getDisplay()); clipboard.setContents(new Object[]{remoteResources[0]}, new Transfer[]{RemoteResourceTransfer.getInstance()}); clipboard.dispose(); } /* * (non-Javadoc) * * @see org.eclipse.team.internal.ui.actions.TeamAction#isEnabled() */ protected boolean isEnabled() { return getSelectedRemoteResources().length == 1; } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_COPY; } }CopyUrlToClipboardAction.java000066400000000000000000000030331203611042400426710ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.jface.action.IAction; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.widgets.Display; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; public class CopyUrlToClipboardAction extends SVNAction { protected void execute(IAction action) throws InvocationTargetException, InterruptedException { Clipboard clipboard = new Clipboard(Display.getCurrent()); Transfer transfer = TextTransfer.getInstance(); ISVNRemoteResource[] selectedResources = getSelectedRemoteResources(); clipboard.setContents( new String[]{selectedResources[0].getUrl().toString()}, new Transfer[]{transfer}); clipboard.dispose(); } protected boolean isEnabled() throws TeamException { return getSelectedRemoteResources().length == 1; } } CreateRemoteFolderAction.java000066400000000000000000000042331203611042400426670ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import org.eclipse.jface.action.IAction; import org.eclipse.jface.wizard.WizardDialog; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.ui.wizards.ClosableWizardDialog; import org.tigris.subversion.subclipse.ui.wizards.NewRemoteFolderWizard; /** * Action to create a remote folder on repository */ public class CreateRemoteFolderAction extends SVNAction { /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#execute(org.eclipse.jface.action.IAction) */ protected void execute(IAction action){ ISVNRemoteFolder remoteFolder = null; if (selection.getFirstElement() instanceof ISVNRemoteFolder) remoteFolder = (ISVNRemoteFolder)selection.getFirstElement(); else if (selection.getFirstElement() instanceof ISVNRepositoryLocation) remoteFolder = ((ISVNRepositoryLocation)selection.getFirstElement()).getRootFolder(); else if (selection.getFirstElement() instanceof ISVNRemoteFile) remoteFolder = ((ISVNRemoteFile)selection.getFirstElement()).getParent(); NewRemoteFolderWizard wizard = new NewRemoteFolderWizard(remoteFolder); WizardDialog dialog = new ClosableWizardDialog(shell, wizard); wizard.setParentDialog(dialog); dialog.open(); } protected boolean isEnabled(){ return (selection.size() == 1); } } DeleteRemoteResourceAction.java000066400000000000000000000051761203611042400432510ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.repository.RepositoryManager; /** * Action to delete a remote resource on repository */ public class DeleteRemoteResourceAction extends SVNAction { /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#execute(org.eclipse.jface.action.IAction) */ protected void execute(IAction action) throws InvocationTargetException, InterruptedException { RepositoryManager manager = SVNUIPlugin.getPlugin().getRepositoryManager(); final String message = manager.promptForComment(getShell(), new IResource[]{}); if (message == null) return; // cancel run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { try { SVNProviderPlugin.getPlugin().getRepositoryResourcesManager(). deleteRemoteResources( getSelectedRemoteResources(),message,monitor); } catch (TeamException e) { throw new InvocationTargetException(e); } } }, true /* cancelable */, PROGRESS_BUSYCURSOR); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.eclipse.team.internal.ui.actions.TeamAction#isEnabled() */ protected boolean isEnabled() { return getSelectedRemoteResources().length > 0; } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_DELETE; } } EditConflictsAction.java000066400000000000000000000232541203611042400417120ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.CompareUI; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.osgi.service.prefs.BackingStoreException; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.core.util.File2Resource; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.conflicts.ConflictsCompareInput; import org.tigris.subversion.subclipse.ui.conflicts.MergeFileAssociation; import org.tigris.subversion.svnclientadapter.utils.Command; /** * Action to edit conflicts */ public class EditConflictsAction extends WorkbenchWindowAction { private IFile selectedResource; private Exception exception; public EditConflictsAction() { super(); } public EditConflictsAction(IFile selectedResource) { this(); this.selectedResource = selectedResource; } /** * edit the conflicts using built-in merger * * @param resource * @param conflictOldFile * @param conflictWorkingFile * @param conflictNewFile * @throws InvocationTargetException */ private void editConflictsInternal(IFile resource, IFile conflictOldFile, IFile conflictWorkingFile, IFile conflictNewFile) throws InvocationTargetException, InterruptedException { CompareConfiguration cc = new CompareConfiguration(); ConflictsCompareInput fInput = new ConflictsCompareInput(cc); fInput.setResources(conflictOldFile, conflictWorkingFile, conflictNewFile, (IFile) resource); CompareUI.openCompareEditorOnPage(fInput, getTargetPage()); } /** * edit the conflicts using an external merger * * @param resource * @param conflictOldFile * @param conflictWorkingFile * @param conflictNewFile * @throws InvocationTargetException */ private void editConflictsExternal(IFile resource, IFile conflictOldFile, IFile conflictWorkingFile, IFile conflictNewFile, String mergeProgramLocation, String mergeProgramParameters) throws CoreException, InvocationTargetException, InterruptedException { try { if (mergeProgramLocation.equals("")) { //$NON-NLS-1$ throw new SVNException(Policy .bind("EditConflictsAction.noMergeProgramConfigured")); //$NON-NLS-1$ } File mergeProgramFile = new File(mergeProgramLocation); if (!mergeProgramFile.exists()) { throw new SVNException(Policy .bind("EditConflictsAction.mergeProgramDoesNotExist")); //$NON-NLS-1$ } Command command = new Command(mergeProgramLocation); String[] parameters = mergeProgramParameters.split(" "); //$NON-NLS-1$ for (int i = 0; i < parameters.length; i++) { parameters[i] = replaceParameter(parameters[i], "${theirs}", //$NON-NLS-1$ conflictNewFile.getLocation().toFile() .getAbsolutePath()); parameters[i] = replaceParameter(parameters[i], "${yours}", //$NON-NLS-1$ conflictWorkingFile.getLocation().toFile() .getAbsolutePath()); parameters[i] = replaceParameter(parameters[i], "${base}", //$NON-NLS-1$ conflictOldFile.getLocation().toFile() .getAbsolutePath()); parameters[i] = replaceParameter(parameters[i], "${merged}", //$NON-NLS-1$ resource.getLocation().toFile().getAbsolutePath()); } command.setParameters(parameters); command.exec(); command.waitFor(); resource.refreshLocal(IResource.DEPTH_ZERO, null); } catch (IOException e) { throw new SVNException(Policy.bind("EditConflictsAction.1") + e.getMessage(), e); //$NON-NLS-1$ } } /* * (non-Javadoc) * * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#execute(org.eclipse.jface.action.IAction) */ protected void execute(final IAction action) throws InvocationTargetException, InterruptedException { IFile resource; if (selectedResource == null) resource = (IFile) getSelectedResources()[0]; else resource = selectedResource; ISVNLocalResource svnResource = SVNWorkspaceRoot .getSVNResourceFor(resource); try { IFile conflictNewFile = (IFile) File2Resource .getResource(svnResource.getStatus() .getConflictNew()); IFile conflictOldFile = (IFile) File2Resource .getResource(svnResource.getStatus() .getConflictOld()); IFile conflictWorkingFile = (IFile) File2Resource .getResource(svnResource.getStatus() .getConflictWorking()); if (conflictWorkingFile == null) { conflictWorkingFile = resource; } MergeFileAssociation mergeFileAssociation = null; try { mergeFileAssociation = SVNUIPlugin.getPlugin().getMergeFileAssociation(resource.getName()); } catch (BackingStoreException e) { mergeFileAssociation = new MergeFileAssociation(); } if (mergeFileAssociation.getType() == MergeFileAssociation.BUILT_IN) { editConflictsInternal(resource, conflictOldFile, conflictWorkingFile, conflictNewFile); } else if (mergeFileAssociation.getType() == MergeFileAssociation.DEFAULT_EXTERNAL) { IPreferenceStore preferenceStore = SVNUIPlugin.getPlugin().getPreferenceStore(); String mergeProgramLocation = preferenceStore.getString(ISVNUIConstants.PREF_MERGE_PROGRAM_LOCATION); String mergeProgramParameters = preferenceStore.getString(ISVNUIConstants.PREF_MERGE_PROGRAM_PARAMETERS); editConflictsExternal(resource, conflictOldFile, conflictWorkingFile, conflictNewFile, mergeProgramLocation, mergeProgramParameters); } else { editConflictsExternal(resource, conflictOldFile, conflictWorkingFile, conflictNewFile, mergeFileAssociation.getMergeProgram(), mergeFileAssociation.getParameters()); } } catch (Exception e) { exception = e; } if (exception != null) { throw new InvocationTargetException(exception); } } /* * (non-Javadoc) * * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("EditConflictsAction.errorTitle"); //$NON-NLS-1$ } /** * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForSVNResource(org.tigris.subversion.subclipse.core.ISVNResource) */ protected boolean isEnabledForSVNResource(ISVNLocalResource svnResource) { try { if (!super.isEnabledForSVNResource(svnResource)) { return false; } return svnResource.getStatusFromCache().isTextConflicted(); } catch (SVNException e) { return false; } } /** * Method isEnabledForAddedResources. * * @return boolean */ protected boolean isEnabledForMultipleResources() { return false; } private String replaceParameter(String input, String pattern, String value) { StringBuffer result = new StringBuffer(); //startIdx and idxOld delimit various chunks of input; these //chunks always end where pattern begins int startIdx = 0; int idxOld = 0; while ((idxOld = input.indexOf(pattern, startIdx)) >= 0) { //grab a part of input which does not include pattern result.append( input.substring(startIdx, idxOld) ); //add value to take place of pattern result.append( value ); //reset the startIdx to just after the current match, to see //if there are any further matches startIdx = idxOld + pattern.length(); } //the final chunk will go to the end of input result.append( input.substring(startIdx) ); return result.toString(); } protected String getImageId() { return ISVNUIConstants.IMG_MENU_EDITCONFLICT; } }EditPropertyConflictsAction.java000066400000000000000000000060331203611042400434530ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actionspackage org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.conflicts.EditPropertyConflictsWizard; import org.tigris.subversion.subclipse.ui.conflicts.PropertyConflict; import org.tigris.subversion.subclipse.ui.wizards.SizePersistedWizardDialog; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNProperty; public class EditPropertyConflictsAction extends WorkbenchWindowAction { private ISVNLocalResource svnResource; private String conflictSummary; private PropertyConflict[] propertyConflicts; private ISVNProperty[] remoteProperties; private Exception error; public EditPropertyConflictsAction() { super(); } protected void execute(final IAction action) throws InvocationTargetException, InterruptedException { error = null; BusyIndicator.showWhile(Display.getDefault(), new Runnable() { public void run() { IResource resource = getSelectedResources()[0]; svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); ISVNClientAdapter client = null; try { conflictSummary = PropertyConflict.getConflictSummary(svnResource); propertyConflicts = PropertyConflict.getPropertyConflicts(svnResource); client = svnResource.getRepository().getSVNClient(); remoteProperties = client.getProperties(svnResource.getUrl(), svnResource.getRevision(), svnResource.getRevision()); } catch (Exception e) { error = e; } finally { svnResource.getRepository().returnSVNClient(client); } } }); if (error != null) { handle(error); return; } EditPropertyConflictsWizard wizard = new EditPropertyConflictsWizard(svnResource, conflictSummary, propertyConflicts, remoteProperties, getTargetPart()); WizardDialog dialog = new SizePersistedWizardDialog(Display.getDefault().getActiveShell(), wizard, "EditPropertyConflicts"); //$NON-NLS-1$ dialog.open(); } protected boolean isEnabledForSVNResource(ISVNLocalResource svnResource) { try { if (!super.isEnabledForSVNResource(svnResource)) { return false; } return svnResource.getStatusFromCache().isPropConflicted(); } catch (SVNException e) { return false; } } protected boolean isEnabledForMultipleResources() { return false; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#needsToSaveDirtyEditors() */ @Override protected boolean needsToSaveDirtyEditors() { return false; } } ExportAction.java000066400000000000000000000052701203611042400404370ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.DirectoryDialog; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.operations.ExportOperation; public class ExportAction extends WorkbenchWindowAction { private IDialogSettings settings; private final static String settingsKey = "ExportAction.lastLocation"; //$NON-NLS-1$ public ExportAction() { super(); settings = SVNUIPlugin.getPlugin().getDialogSettings(); } protected void execute(IAction action) throws InvocationTargetException, InterruptedException { DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.SAVE); dialog.setText(Policy.bind("ExportAction.exportTo")); //$NON-NLS-1$ dialog.setFilterPath(getLastLocation()); String directory = dialog.open(); if (directory == null) return; saveLocation(directory); new ExportOperation(getTargetPart(), getSelectedResources(), directory).run(); } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_EXPORT; } private String getLastLocation() { String lastLocation = null; IResource[] resources = getSelectedResources(); // If just one resource selected, first see if this resource has // previously been exported. if (resources.length == 1) { lastLocation = settings.get(settingsKey + "." + resources[0].getFullPath()); //$NON-NLS-1$ } if (lastLocation == null) { lastLocation = settings.get(settingsKey); } return lastLocation; } private void saveLocation(String directory) { IResource[] resources = getSelectedResources(); if (resources.length == 1) { settings.put(settingsKey + "." + resources[0].getFullPath(), directory); //$NON-NLS-1$ } settings.put(settingsKey, directory); } } ExportRemoteFolderAction.java000066400000000000000000000030571203611042400427500ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.jface.action.IAction; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.dialogs.ExportRemoteFolderDialog; public class ExportRemoteFolderAction extends SVNAction { protected void execute(IAction action) throws InvocationTargetException, InterruptedException { ISVNRemoteResource[] resources = getSelectedRemoteResources(); ExportRemoteFolderDialog dialog = new ExportRemoteFolderDialog(getShell(), resources[0], getTargetPart()); dialog.open(); } protected boolean isEnabled() throws TeamException { return getSelectedRemoteResources().length == 1; } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_EXPORT; } } GenerateChangeLogAction.java000066400000000000000000000024131203611042400424540ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actionspackage org.tigris.subversion.subclipse.ui.actions; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.jface.action.Action; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.subclipse.core.history.LogEntry; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.dialogs.GenerateChangeLogDialog; public class GenerateChangeLogAction extends Action { private ISelectionProvider selectionProvider; public GenerateChangeLogAction(ISelectionProvider selectionProvider) { super(Policy.bind("HistoryView.generateChangeLog")); //$NON-NLS-1$ this.selectionProvider = selectionProvider; } public void run() { IStructuredSelection selection = (IStructuredSelection)selectionProvider.getSelection(); Iterator iter = selection.iterator(); List logEntries = new ArrayList(); while (iter.hasNext()) { Object object = iter.next(); if (object instanceof LogEntry) { logEntries.add((LogEntry)object); } } GenerateChangeLogDialog dialog = new GenerateChangeLogDialog(Display.getDefault().getActiveShell(), logEntries); dialog.open(); } } GenerateDiffFileAction.java000066400000000000000000000227411203611042400423030ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceVisitor; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.commands.GetStatusCommand; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.wizards.WizardDialogWithPersistedLocation; import org.tigris.subversion.subclipse.ui.wizards.generatediff.GenerateDiffFileWizard; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.SVNStatusKind; import org.tigris.subversion.svnclientadapter.utils.SVNStatusUtils; /** * Action to generate a patch file using the SVN diff command. * */ public class GenerateDiffFileAction extends WorkbenchWindowAction { private IResource[] modifiedResources; private ArrayList unaddedList; private HashMap statusMap; /** (Non-javadoc) * Method declared on IActionDelegate. * @throws InterruptedException * @throws InvocationTargetException */ public void execute(IAction action) throws InvocationTargetException, InterruptedException { statusMap = new HashMap(); unaddedList = new ArrayList(); String title = Policy.bind("GenerateSVNDiff.title"); //$NON-NLS-1$ final IResource[] resources = getSelectedResources(); run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { try { modifiedResources = getModifiedResources(resources, monitor); } catch (SVNException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } }, true, PROGRESS_BUSYCURSOR); if (modifiedResources == null || modifiedResources.length == 0) { MessageDialog.openInformation(getShell(), Policy.bind("GenerateSVNDiff.title"), Policy.bind("GenerateSVNDiff.noDiffsFoundMsg")); //$NON-NLS-1$ //$NON-NLS-1$ return; } IResource[] unaddedResources = new IResource[unaddedList.size()]; unaddedList.toArray(unaddedResources); GenerateDiffFileWizard wizard = new GenerateDiffFileWizard(new StructuredSelection(modifiedResources), unaddedResources, statusMap); wizard.setWindowTitle(title); wizard.setSelectedResources(getSelectedResources()); WizardDialog dialog = new WizardDialogWithPersistedLocation(getShell(), wizard, "GenerateDiffFileWizard"); //$NON-NLS-1$ dialog.setMinimumPageSize(350, 250); dialog.open(); } protected boolean isEnabled() throws TeamException { boolean isEnabled = super.isEnabled(); return isEnabled; } /** * @see org.eclipse.team.internal.ccvs.ui.actions.WorkspaceAction#isEnabledForMultipleResources() */ protected boolean isEnabledForMultipleResources() { return true; } /** * @see org.eclipse.team.internal.ccvs.ui.actions.WorkspaceAction#isEnabledForUnmanagedResources() */ protected boolean isEnabledForUnmanagedResources() { return true; } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_DIFF; } protected IResource[] getModifiedResources(IResource[] resources, IProgressMonitor iProgressMonitor) throws SVNException { final List modified = new ArrayList(); List unversionedFolders = new ArrayList(); for (int i = 0; i < resources.length; i++) { IResource resource = resources[i]; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); // This check is for when the action is called with unmanaged resources if (svnResource.getRepository() == null) { continue; } // get adds, deletes, updates and property updates. GetStatusCommand command = new GetStatusCommand(svnResource, true, false); command.run(iProgressMonitor); ISVNStatus[] statuses = command.getStatuses(); for (int j = 0; j < statuses.length; j++) { if (SVNStatusUtils.isReadyForCommit(statuses[j]) || SVNStatusUtils.isMissing(statuses[j])) { IResource currentResource = SVNWorkspaceRoot.getResourceFor(resource, statuses[j]); if (currentResource != null) { ISVNLocalResource localResource = SVNWorkspaceRoot.getSVNResourceFor(currentResource); if (!localResource.isIgnored()) { if (!SVNStatusUtils.isManaged(statuses[j])) { if (!isSymLink(currentResource)) { if (currentResource.getType() != IResource.FILE) unversionedFolders.add(currentResource); else if (!modified.contains(currentResource)) { modified.add(currentResource); if (currentResource instanceof IContainer) statusMap.put(currentResource, statuses[j].getPropStatus()); else statusMap.put(currentResource, statuses[j].getTextStatus()); if (addToUnadded(currentResource)) unaddedList.add(currentResource); } } } else if (!modified.contains(currentResource)) { modified.add(currentResource); if (currentResource instanceof IContainer) statusMap.put(currentResource, statuses[j].getPropStatus()); else statusMap.put(currentResource, statuses[j].getTextStatus()); } } } } } } // get unadded resources and add them to the list. IResource[] unaddedResources = getUnaddedResources(unversionedFolders, iProgressMonitor); for (int i = 0; i < unaddedResources.length; i++) { if (!modified.contains(unaddedResources[i])) { if (unaddedResources[i].getType() == IResource.FILE) { modified.add(unaddedResources[i]); statusMap.put(unaddedResources[i], SVNStatusKind.UNVERSIONED); } if (addToUnadded(unaddedResources[i])) unaddedList.add(unaddedResources[i]); } } return (IResource[]) modified.toArray(new IResource[modified.size()]); } private IResource[] getUnaddedResources(List resources, IProgressMonitor iProgressMonitor) throws SVNException { final List unadded = new ArrayList(); final SVNException[] exception = new SVNException[] { null }; for (Iterator iter = resources.iterator(); iter.hasNext();) { IResource resource = (IResource) iter.next(); if (resource.exists()) { // visit each resource deeply try { resource.accept(new IResourceVisitor() { public boolean visit(IResource aResource) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(aResource); // skip ignored resources and their children try { if (svnResource.isIgnored()) return false; // visit the children of shared resources if (svnResource.isManaged()) return true; if ((aResource.getType() == IResource.FOLDER) && isSymLink(aResource)) // don't traverse into symlink folders return false; } catch (SVNException e) { exception[0] = e; } // file/folder is unshared so record it unadded.add(aResource); return aResource.getType() == IResource.FOLDER; } }, IResource.DEPTH_INFINITE, false /* include phantoms */); } catch (CoreException e) { throw SVNException.wrapException(e); } if (exception[0] != null) throw exception[0]; } } return (IResource[]) unadded.toArray(new IResource[unadded.size()]); } protected boolean isSymLink(IResource resource) { File file = resource.getLocation().toFile(); try { if (!file.exists()) return true; else { String cnnpath = file.getCanonicalPath(); String abspath = file.getAbsolutePath(); return !abspath.equals(cnnpath); } } catch(IOException ex) { return true; } } private boolean addToUnadded(IResource resource) { IResource parent = resource; while (parent != null) { parent = parent.getParent(); if (unaddedList.contains(parent)) return false; } return true; } } IgnoreAction.java000066400000000000000000000067031203611042400404030ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.operation.IRunnableWithProgress; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.dialogs.IgnoreResourcesDialog; import org.tigris.subversion.subclipse.ui.operations.IgnoreOperation; public class IgnoreAction extends WorkbenchWindowAction { protected void execute(final IAction action) throws InvocationTargetException, InterruptedException { run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { IResource[] resources = getSelectedResources(); IgnoreResourcesDialog dialog = new IgnoreResourcesDialog(getShell(), resources); if (dialog.open() != IgnoreResourcesDialog.OK) return; new IgnoreOperation(getTargetPart(), resources, dialog).run(); //if (action != null) action.setEnabled(isEnabled()); } }, false /* cancelable */, PROGRESS_BUSYCURSOR); } /** * @see org.eclipse.team.internal.ccvs.ui.actions.CVSAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("IgnoreAction.ignore"); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForSVNResource(org.tigris.subversion.subclipse.core.ISVNLocalResource) */ protected boolean isEnabledForSVNResource(ISVNLocalResource svnResource) throws SVNException { //If the resource is a IProject then the action should not be enabled. if( svnResource.getIResource() instanceof IProject) return false; // If the parent is not managed there is no way to set the svn:ignore property if (!svnResource.getParent().isManaged()) { return false; } return super.isEnabledForSVNResource(svnResource); } /** * @see org.eclipse.team.internal.ccvs.ui.actions.WorkspaceAction#isEnabledForManagedResources() */ protected boolean isEnabledForManagedResources() { return false; } /** * @see org.eclipse.team.internal.ccvs.ui.actions.WorkspaceAction#isEnabledForUnmanagedResources() */ protected boolean isEnabledForUnmanagedResources() { return true; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#needsToSaveDirtyEditors() */ @Override protected boolean needsToSaveDirtyEditors() { return false; } protected String getImageId() { return ISVNUIConstants.IMG_MENU_IGNORE; } } ImportFolderAction.java000066400000000000000000000030231203611042400415560ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.jface.action.IAction; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.dialogs.ImportFolderDialog; public class ImportFolderAction extends SVNAction { protected void execute(IAction action) throws InvocationTargetException, InterruptedException { ISVNRemoteFolder[] folders = getSelectedRemoteFolders(); ImportFolderDialog dialog = new ImportFolderDialog(getShell(), folders[0], getTargetPart()); dialog.open(); } protected boolean isEnabled() throws TeamException { return getSelectedRemoteResources().length == 1; } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_IMPORTFOLDER; } } LockAction.java000066400000000000000000000107421203611042400400460ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import java.util.Hashtable; import java.util.Iterator; import java.util.Set; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.team.core.TeamException; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.commands.LockResourcesCommand; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardDialog; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardLockPage; public class LockAction extends WorkbenchWindowAction { protected void execute(IAction action) throws InvocationTargetException, InterruptedException { if (action != null && !action.isEnabled()) { action.setEnabled(true); } else { if (getSelectedResources() != null && getSelectedResources().length > 0) { final IResource[] resources = getSelectedResources(); SvnWizardLockPage lockPage = new SvnWizardLockPage(resources); SvnWizard wizard = new SvnWizard(lockPage); SvnWizardDialog dialog = new SvnWizardDialog(getShell(), wizard); wizard.setParentDialog(dialog); if (dialog.open() == SvnWizardDialog.OK) { final String comment = lockPage.getComment(); final boolean stealLock = lockPage.isStealLock(); run(new WorkspaceModifyOperation() { protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException { try { Hashtable table = getProviderMapping(getSelectedResources()); Set keySet = table.keySet(); Iterator iterator = keySet.iterator(); while (iterator.hasNext()) { SVNTeamProvider provider = (SVNTeamProvider)iterator.next(); LockResourcesCommand command = new LockResourcesCommand(provider.getSVNWorkspaceRoot(), resources, stealLock, comment); command.run(Policy.subMonitorFor(monitor,1000)); } } catch (TeamException e) { throw new InvocationTargetException(e); } finally { monitor.done(); } } }, true /* cancelable */, PROGRESS_DIALOG); } } } } /** * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForSVNResource(org.tigris.subversion.subclipse.core.ISVNResource) */ protected boolean isEnabledForSVNResource(ISVNLocalResource svnResource) { try { boolean enabled = super.isEnabledForSVNResource(svnResource); if (enabled) return !svnResource.getStatusFromCache().isLocked(); else return enabled; } catch (SVNException e) { return false; } } protected boolean isEnabledForAddedResources() { return false; } protected boolean isEnabledForIgnoredResources() { return false; } protected boolean isEnabledForUnmanagedResources() { return false; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#needsToSaveDirtyEditors() */ @Override protected boolean needsToSaveDirtyEditors() { return false; } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_LOCK; } } MarkDeletedAction.java000066400000000000000000000036261203611042400413420ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.operations.RemoveOperation; public class MarkDeletedAction extends WorkspaceAction { public MarkDeletedAction() { super(); } protected void execute(IAction action) throws InvocationTargetException, InterruptedException { RemoveOperation removeOperation = new RemoveOperation(getTargetPart(), getSelectedResources()); removeOperation.run(); } protected boolean isEnabled() throws TeamException { boolean enabled = super.isEnabled(); if (!enabled) return false; IResource[] resources = getSelectedResources(); for (int i = 0; i < resources.length; i++) { IResource resource = resources[i]; if (resource.exists()) return false; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); if (!svnResource.getStatusFromCache().isMissing()) return false; } return true; } protected boolean isEnabledForInaccessibleResources() { return true; } protected boolean isEnabledForAddedResources() { return false; } } MergeAction.java000066400000000000000000000061721203611042400402170ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.dialogs.MergeDialog; import org.tigris.subversion.subclipse.ui.operations.MergeOperation; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class MergeAction extends WorkbenchWindowAction { protected void execute(IAction action) throws InvocationTargetException, InterruptedException { if (action != null && !action.isEnabled()) { action.setEnabled(true); } else { IResource[] resources = getSelectedResources(); for (int i = 0; i < resources.length; i++) { MergeDialog dialog = new MergeDialog(getShell(), resources[i]); if (dialog.open() == MergeDialog.CANCEL) break; SVNUrl svnUrl1 = dialog.getFromUrl(); SVNRevision svnRevision1 = dialog.getFromRevision(); SVNUrl svnUrl2 = dialog.getToUrl(); SVNRevision svnRevision2 = dialog.getToRevision(); MergeOperation mergeOperation = new MergeOperation(getTargetPart(), getSelectedResources(), svnUrl1, svnRevision1, svnUrl2, svnRevision2); mergeOperation.setForce(dialog.isForce()); mergeOperation.setIgnoreAncestry(dialog.isIgnoreAncestry()); mergeOperation.run(); } } } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("MergeAction.merge"); //$NON-NLS-1$ } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForManagedResources() */ protected boolean isEnabledForManagedResources() { return true; } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForUnmanagedResources() */ protected boolean isEnabledForUnmanagedResources() { return false; } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForMultipleResources() */ protected boolean isEnabledForMultipleResources() { return false; } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_MERGE; } } MoveRemoteResourceAction.java000066400000000000000000000036311203611042400427470ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import org.eclipse.jface.action.IAction; import org.eclipse.jface.wizard.WizardDialog; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.wizards.ClosableWizardDialog; import org.tigris.subversion.subclipse.ui.wizards.MoveRemoteResourceWizard; /** * Action to move a remote resource on repository */ public class MoveRemoteResourceAction extends SVNAction { /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#execute(org.eclipse.jface.action.IAction) */ protected void execute(IAction action) { MoveRemoteResourceWizard wizard = new MoveRemoteResourceWizard((ISVNRemoteResource)selection.getFirstElement()); WizardDialog dialog = new ClosableWizardDialog(shell, wizard); wizard.setParentDialog(dialog); dialog.open(); } /* (non-Javadoc) * @see org.eclipse.team.internal.ui.actions.TeamAction#isEnabled() */ protected boolean isEnabled() { return (selection.size() == 1) && (selection.getFirstElement() instanceof ISVNRemoteResource); } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_MOVE; } } NewRepositoryAction.java000066400000000000000000000036361203611042400420130ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IViewActionDelegate; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.IWorkbenchWindowActionDelegate; import org.tigris.subversion.subclipse.ui.WorkspacePathValidator; import org.tigris.subversion.subclipse.ui.wizards.NewLocationWizard; public class NewRepositoryAction implements IWorkbenchWindowActionDelegate, IViewActionDelegate { Shell shell; /** * @see IWorkbenchWindowActionDelegate#dispose() */ public void dispose() { } /** * @see IWorkbenchWindowActionDelegate#init(IWorkbenchWindow) */ public void init(IWorkbenchWindow window) { this.shell = window.getShell(); } public void init(IViewPart view) { shell = view.getSite().getShell(); } /** * @see IActionDelegate#run(IAction) */ public void run(IAction action) { if (!WorkspacePathValidator.validateWorkspacePath()) return; NewLocationWizard wizard = new NewLocationWizard(); WizardDialog dialog = new WizardDialog(shell, wizard); dialog.open(); } /** * @see IActionDelegate#selectionChanged(IAction, ISelection) */ public void selectionChanged(IAction action, ISelection selection) { } } OpenLogEntryAction.java000066400000000000000000000077421203611042400415510ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.team.core.TeamException; import org.eclipse.ui.IEditorDescriptor; import org.eclipse.ui.IEditorRegistry; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.resources.RemoteResource; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.editor.RemoteFileEditorInput; import org.tigris.subversion.svnclientadapter.SVNRevision; public class OpenLogEntryAction extends SVNAction { /* * @see SVNAction#execute(IAction) */ public void execute(IAction action) throws InterruptedException, InvocationTargetException { run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { IWorkbench workbench = SVNUIPlugin.getPlugin().getWorkbench(); IEditorRegistry registry = workbench.getEditorRegistry(); IWorkbenchPage page = workbench.getActiveWorkbenchWindow().getActivePage(); final ISVNRemoteResource[] entries = getSelectedRemoteResources(); for (int i = 0; i < entries.length; i++) { ISVNRemoteResource remoteResource = entries[i]; if (!(remoteResource instanceof ISVNRemoteFile)) continue; ISVNRemoteFile file = (ISVNRemoteFile)remoteResource; if (file instanceof RemoteResource) { ((RemoteResource)file).setPegRevision(SVNRevision.HEAD); } String filename = remoteResource.getName(); IEditorDescriptor descriptor = registry.getDefaultEditor(filename); String id; if (descriptor == null) { id = "org.eclipse.ui.DefaultTextEditor"; //$NON-NLS-1$ } else { id = descriptor.getId(); } try { try { page.openEditor(new RemoteFileEditorInput(file, monitor), id); } catch (PartInitException e) { if (id.equals("org.eclipse.ui.DefaultTextEditor")) { //$NON-NLS-1$ throw e; } page.openEditor(new RemoteFileEditorInput(file, monitor), "org.eclipse.ui.DefaultTextEditor"); //$NON-NLS-1$ } } catch (PartInitException e) { throw new InvocationTargetException(e); } } } }, false, PROGRESS_BUSYCURSOR); //$NON-NLS-1$ } /* * @see TeamAction#isEnabled() */ protected boolean isEnabled() throws TeamException { ISVNRemoteResource[] resources = getSelectedRemoteResources(); if (resources.length == 0) return false; if (resources[0] == null) return false; return true; } } OpenRemoteFileAction.java000066400000000000000000000074311203611042400420340ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.ui.IEditorDescriptor; import org.eclipse.ui.IEditorRegistry; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PartInitException; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.resources.RemoteResource; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.editor.RemoteFileEditorInput; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * This action is used on ISVNRemoteFile or ILogEntry */ public class OpenRemoteFileAction extends SVNAction { private boolean usePegRevision; /* * @see SVNAction#execute(IAction) */ public void execute(IAction action) throws InterruptedException, InvocationTargetException { run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { IWorkbench workbench = SVNUIPlugin.getPlugin().getWorkbench(); IEditorRegistry registry = workbench.getEditorRegistry(); IWorkbenchPage page = workbench.getActiveWorkbenchWindow().getActivePage(); ISVNRemoteFile[] files = getSelectedRemoteFiles(); for (int i = 0; i < files.length; i++) { ISVNRemoteFile file = files[i]; String filename = file.getName(); IEditorDescriptor descriptor = registry.getDefaultEditor(filename); String id; if (descriptor == null) { descriptor = registry.findEditor(IEditorRegistry.SYSTEM_EXTERNAL_EDITOR_ID); } if (descriptor == null) { id = "org.eclipse.ui.DefaultTextEditor"; //$NON-NLS-1$ } else { id = descriptor.getId(); } try { try { if (usePegRevision && files[i] instanceof RemoteResource) ((RemoteResource)files[i]).setPegRevision(files[i].getRevision()); else ((RemoteResource)files[i]).setPegRevision(SVNRevision.HEAD); RemoteFileEditorInput input = new RemoteFileEditorInput(files[i],monitor); if (descriptor != null && descriptor.isOpenExternal()) { input.writeToTempFile(); } page.openEditor(input, id); } catch (PartInitException e) { if (id.equals("org.eclipse.ui.DefaultTextEditor")) { //$NON-NLS-1$ throw e; } else { RemoteFileEditorInput input = new RemoteFileEditorInput(files[i],monitor); page.openEditor(input, "org.eclipse.ui.DefaultTextEditor"); //$NON-NLS-1$ } } } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("OpenRemoteFileAction.0"), e.getMessage()); //$NON-NLS-1$ } } } }, false, PROGRESS_BUSYCURSOR); //$NON-NLS-1$ } /* * @see TeamAction#isEnabled() */ protected boolean isEnabled() { ISVNRemoteFile[] resources = getSelectedRemoteFiles(); if (resources.length == 0) return false; return true; } public void setUsePegRevision(boolean usePegRevision) { this.usePegRevision = usePegRevision; } } PasteRemoteResourceAction.java000066400000000000000000000064711203611042400431220ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.repository.RepositoryManager; /** * Paste remote resources to selected directory */ public class PasteRemoteResourceAction extends SVNAction { /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#execute(org.eclipse.jface.action.IAction) */ protected void execute(IAction action) throws InvocationTargetException, InterruptedException { Clipboard clipboard = new Clipboard(getShell().getDisplay()); final ISVNRemoteResource resource = (ISVNRemoteResource)clipboard.getContents(RemoteResourceTransfer.getInstance()); clipboard.dispose(); RepositoryManager manager = SVNUIPlugin.getPlugin().getRepositoryManager(); final String message = manager.promptForComment(getShell(), new IResource[]{}); if (message == null) return; // canceled ISVNRemoteResource selectedResource = getSelectedRemoteResources()[0]; final ISVNRemoteFolder destination = (selectedResource.isFolder()? (ISVNRemoteFolder)selectedResource:selectedResource.getParent()); run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor)throws InvocationTargetException { try { SVNProviderPlugin.getPlugin().getRepositoryResourcesManager(). copyRemoteResource(resource,destination,message,monitor); } catch (TeamException e) { throw new InvocationTargetException(e); } } }, true /* cancelable */, PROGRESS_BUSYCURSOR); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.eclipse.team.internal.ui.actions.TeamAction#isEnabled() */ protected boolean isEnabled() { if (getSelectedRemoteResources().length != 1) return false; boolean result; Clipboard clipboard = new Clipboard(getShell().getDisplay()); result = clipboard.getContents(RemoteResourceTransfer.getInstance()) != null; clipboard.dispose(); return result; } } RelocateAction.java000066400000000000000000000034251203611042400407140ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import java.util.Iterator; import org.eclipse.jface.action.IAction; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.repo.SVNRepositoryLocation; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.wizards.RelocateWizard; public class RelocateAction extends SVNAction { protected void execute(IAction action) throws InvocationTargetException, InterruptedException { Iterator iter = selection.iterator(); while (iter.hasNext()) { Object object = iter.next(); if (object instanceof SVNRepositoryLocation) { SVNRepositoryLocation repository = (SVNRepositoryLocation)object; RelocateWizard wizard = new RelocateWizard(repository); WizardDialog dialog = new WizardDialog(shell, wizard); dialog.open(); break; } } } protected boolean isEnabled() throws TeamException { return selection.size() == 1; } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_RELOCATE; } } RemoteResourcePropertiesAction.java000066400000000000000000000025311203611042400441730ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.jface.action.IAction; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.ui.dialogs.RemoteResourcePropertiesDialog; public class RemoteResourcePropertiesAction extends SVNAction { protected void execute(IAction action) throws InvocationTargetException, InterruptedException { ISVNRemoteResource[] remoteResources = getSelectedRemoteResources(); RemoteResourcePropertiesDialog dialog = new RemoteResourcePropertiesDialog(getShell(), remoteResources[0]); dialog.open(); } protected boolean isEnabled() throws TeamException { return getSelectedRemoteResources().length == 1; } } RemoteResourceTransfer.java000066400000000000000000000121521203611042400424650ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.DataInputStream; import java.io.DataOutputStream; import java.io.IOException; import java.util.Date; import org.eclipse.swt.dnd.ByteArrayTransfer; import org.eclipse.swt.dnd.TransferData; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.resources.RemoteFile; import org.tigris.subversion.subclipse.core.resources.RemoteFolder; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; import org.tigris.subversion.svnclientadapter.SVNRevision.Number; /** * This class is used when copying and pasting remote resources to/from clipboard * */ public class RemoteResourceTransfer extends ByteArrayTransfer { private static final String REMOTERESOURCENAME = "ISVNRemoteResource"; //$NON-NLS-1$ private static final int REMOTERESOURCEID = registerType(REMOTERESOURCENAME); private static RemoteResourceTransfer _instance = new RemoteResourceTransfer(); public static RemoteResourceTransfer getInstance () { return _instance; } public void javaToNative (Object object, TransferData transferData) { if (object == null || !(object instanceof ISVNRemoteResource)) return; if (isSupportedType(transferData)) { // write data to a byte array and then ask super to convert to pMedium byte[] buffer = toByteArray((ISVNRemoteResource) object); super.javaToNative(buffer, transferData); } } public Object nativeToJava(TransferData transferData){ if (!isSupportedType(transferData)) return null; byte[] buffer = (byte[])super.nativeToJava(transferData); if (buffer == null) return null; return fromByteArray(buffer); } public byte[] toByteArray(ISVNRemoteResource remoteResource) { try { ByteArrayOutputStream out = new ByteArrayOutputStream(); DataOutputStream writeOut = new DataOutputStream(out); // write 1 if remote resource is folder, 0 otherwise writeOut.writeBoolean(remoteResource.isFolder()); // we write the url of the remote resource writeOut.writeUTF(remoteResource.getUrl().toString()); // we write the url of the repository writeOut.writeUTF(remoteResource.getRepository().getUrl().toString()); // we write the revision writeOut.writeUTF(remoteResource.getRevision().toString()); // we write the last changed revision writeOut.writeUTF(remoteResource.getLastChangedRevision().toString()); writeOut.writeLong( remoteResource.getDate().getTime()); writeOut.writeUTF( remoteResource.getAuthor()); writeOut.close(); // converts a java byte[]to a platform specific representation return out.toByteArray(); } catch (IOException e) { return null; } } public Object fromByteArray(byte[] buffer) { try { ByteArrayInputStream in = new ByteArrayInputStream(buffer); DataInputStream readIn = new DataInputStream(in); boolean isFolder = readIn.readBoolean(); // first, we read the url of the remote resource SVNUrl urlResource = new SVNUrl(readIn.readUTF()); // then we read the url of the repository String location = readIn.readUTF(); // we read the revision SVNRevision revision = SVNRevision.getRevision(readIn.readUTF()); // we read the last changed revision SVNRevision.Number lastChangedRevision = ( Number) SVNRevision.getRevision(readIn.readUTF()); Date date = new Date(readIn.readLong()); String author = readIn.readUTF(); ISVNRepositoryLocation repositoryLocation = SVNProviderPlugin.getPlugin().getRepository(location); if (isFolder) { return new RemoteFolder(null, repositoryLocation,urlResource, revision, lastChangedRevision, date, author); } return new RemoteFile(null, repositoryLocation,urlResource, revision, lastChangedRevision, date, author); } catch(Exception ex) { return null; } } protected String[] getTypeNames(){ return new String[]{REMOTERESOURCENAME}; } protected int[] getTypeIds(){ return new int[] {REMOTERESOURCEID}; } } ReplaceWithBaseRevisionAction.java000066400000000000000000000014741203611042400437010ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import org.tigris.subversion.svnclientadapter.SVNRevision; /** */ public class ReplaceWithBaseRevisionAction extends ReplaceWithRemoteAction { public ReplaceWithBaseRevisionAction() { super(SVNRevision.BASE); } } ReplaceWithRemoteAction.java000066400000000000000000000041531203611042400425400ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.operations.ReplaceOperation; import org.tigris.subversion.svnclientadapter.SVNRevision; public class ReplaceWithRemoteAction extends WorkspaceAction { private final SVNRevision revision; public ReplaceWithRemoteAction() { this.revision = SVNRevision.HEAD; } public ReplaceWithRemoteAction(SVNRevision revision) { this.revision = revision; } public void execute(IAction action) throws InvocationTargetException, InterruptedException { IResource[] resources = null; try { resources = checkOverwriteOfDirtyResources(getSelectedResources()); } catch (TeamException e) { throw new InvocationTargetException(e); } // Peform the replace in the background ReplaceOperation replaceOperation = new ReplaceOperation(getTargetPart(), resources, this.revision); // replaceOperation.setResourcesToUpdate(getSelectedResources()); replaceOperation.run(); } /** * @see org.eclipse.team.internal.ccvs.ui.actions.CVSAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("ReplaceWithRemoteAction.problemMessage"); //$NON-NLS-1$ } /** * @see org.eclipse.team.internal.ccvs.ui.actions.WorkspaceAction#isEnabledForAddedResources() */ protected boolean isEnabledForAddedResources() { return false; } } ReplaceWithRevisionAction.java000066400000000000000000000070571203611042400431110ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.ui.SaveablePartDialog; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.compare.SVNCompareRevisionsInput; /** * Displays a compare dialog and allows the same behavior as the compare. In addition * a replace button is added to the dialog that will replace the local with the currently * selected revision. * * @since 3.0 */ public class ReplaceWithRevisionAction extends CompareWithRevisionAction { protected static final int REPLACE_ID = 10; private SVNCompareRevisionsInput input; protected class ReplaceCompareDialog extends SaveablePartDialog { private Button replaceButton; public ReplaceCompareDialog(Shell shell, SVNCompareRevisionsInput input) { super(shell, input); // Don't allow editing of the merge viewers in the replace input.getCompareConfiguration().setLeftEditable(false); input.getCompareConfiguration().setRightEditable(false); } /** * Add the replace button to the dialog. */ protected void createButtonsForButtonBar(Composite parent) { replaceButton = createButton(parent, REPLACE_ID, Policy.bind("ReplaceWithRevisionAction.replace"), true); //$NON-NLS-1$ replaceButton.setEnabled(false); input.getViewer().addSelectionChangedListener( new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent e) { ISelection s= e.getSelection(); replaceButton.setEnabled(s != null && ! s.isEmpty()); } } ); createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); //$NON-NLS-1$ // Don't call super because we don't want the OK button to appear } /** * If the replace button was pressed. */ protected void buttonPressed(int buttonId) { if(buttonId == REPLACE_ID) { try { input.replaceLocalWithCurrentlySelectedRevision(); } catch (CoreException e) { handle(e); } buttonId = IDialogConstants.OK_ID; } super.buttonPressed(buttonId); } } /* (non-Javadoc) * @see org.eclipse.team.internal.ccvs.ui.actions.CompareWithRevisionAction#createCompareDialog(org.eclipse.swt.widgets.Shell, org.eclipse.team.internal.ccvs.ui.CVSCompareRevisionsInput) */ protected SaveablePartDialog createCompareDialog(Shell shell, SVNCompareRevisionsInput input) { this.input = input; return new ReplaceCompareDialog(shell, input); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.eclipse.team.internal.ccvs.ui.actions.CompareWithRevisionAction#getActionTitle() */ protected String getActionTitle() { return Policy.bind("ReplaceWithRevisionAction.title"); //$NON-NLS-1$ } } ReplaceableIconAction.java000066400000000000000000000042541203611042400421670ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import org.eclipse.jface.action.IAction; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.internal.TeamAction; /** * Helper class for actions that are displayed in a toolbar */ public abstract class ReplaceableIconAction extends TeamAction { private IAction action = null; private boolean isInitialized = false; /** * Returns the id of the image for this menu entry * @return the id of the image for this menu entry */ protected String getImageId() { return null; } /* * @see org.eclipse.ui.actions.ActionDelegate#init(org.eclipse.jface.action.IAction) */ public void init(IAction action) { super.init(action); this.action = action; setIcon(); } /* * @see org.tigris.subversion.subclipse.ui.internal.TeamAction#setActivePart(org.eclipse.jface.action.IAction, org.eclipse.ui.IWorkbenchPart) */ public void setActivePart(IAction action, IWorkbenchPart targetPart) { super.setActivePart(action, targetPart); if (!isInitialized) { setIcon(); isInitialized = true; } } protected void setIcon() { String iconName = getImageId(); if (iconName != null && action != null) { ImageDescriptor descriptor = SVNUIPlugin.getPlugin().getImageDescriptor(iconName); action.setImageDescriptor(descriptor); } } /* * @see org.eclipse.ui.IWorkbenchWindowActionDelegate#dispose() */ public void dispose() { super.dispose(); action = null; } protected IAction getAction() { return action; } } RepositoryBranchTagAction.java000066400000000000000000000072751203611042400431160ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.operations.RepositoryBranchTagOperation; import org.tigris.subversion.subclipse.ui.wizards.BranchTagWizard; import org.tigris.subversion.subclipse.ui.wizards.ClosableWizardDialog; import org.tigris.subversion.subclipse.ui.wizards.SizePersistedWizardDialog; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class RepositoryBranchTagAction extends SVNAction { protected void execute(IAction action) throws InvocationTargetException, InterruptedException { ISVNRemoteResource[] resources = getSelectedRemoteResources(); BranchTagWizard wizard = new BranchTagWizard(resources); WizardDialog dialog = new SizePersistedWizardDialog(getShell(), wizard, "BranchTag"); //$NON-NLS-1$ if (dialog.open() == WizardDialog.OK) { SVNUrl[] sourceUrls = wizard.getUrls(); SVNUrl destinationUrl = wizard.getToUrl(); String message = wizard.getComment(); SVNRevision revision = wizard.getRevision(); boolean makeParents = wizard.isMakeParents(); ISVNClientAdapter client = null; try { ISVNRepositoryLocation repository = SVNProviderPlugin.getPlugin().getRepository(sourceUrls[0].toString()); if (repository != null) client = repository.getSVNClient(); if (client == null) client = SVNProviderPlugin.getPlugin().getSVNClientManager().getSVNClient(); RepositoryBranchTagOperation branchTagOperation = new RepositoryBranchTagOperation(getTargetPart(), client, sourceUrls, destinationUrl, revision, message, makeParents); branchTagOperation.setMultipleTransactions(wizard.isSameStructure()); branchTagOperation.run(); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("BranchTagDialog.title"), e.getMessage()); } finally { // BranchTagCommand will dispose. // SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } } } protected boolean isEnabled() throws TeamException { ISVNRepositoryLocation repository = null; ISVNRemoteResource[] resources = getSelectedRemoteResources(); for (int i = 0; i < resources.length; i++) { if (repository != null && !(resources[i].getRepository().equals(repository))) return false; repository = resources[i].getRepository(); } return true; } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_BRANCHTAG; } } ResolveAction.java000066400000000000000000000047731203611042400406040ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.jface.action.IAction; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.operations.ResolveOperation; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; /** * Action to mark conflicted file as resolved. */ public class ResolveAction extends WorkbenchWindowAction { private int resolution = ISVNConflictResolver.Choice.chooseMerged; protected void execute(final IAction action) throws InvocationTargetException, InterruptedException { new ResolveOperation(getTargetPart(), getSelectedResources(), resolution).run(); } /** * @see org.eclipse.team.internal.ccvs.ui.actions.CVSAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("ResolveAction.error"); //$NON-NLS-1$ } /** * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForSVNResource(org.tigris.subversion.subclipse.core.ISVNResource) */ protected boolean isEnabledForSVNResource(ISVNLocalResource svnResource) { try { if (!super.isEnabledForSVNResource(svnResource)) { return false; } LocalResourceStatus status = svnResource.getStatusFromCache(); return status.isTextConflicted() || status.isPropConflicted() || status.hasTreeConflict(); } catch (SVNException e) { return false; } } protected boolean isEnabledForInaccessibleResources() { return true; } protected String getImageId() { return ISVNUIConstants.IMG_MENU_RESOLVE; } public void setResolution(int resolution) { this.resolution = resolution; } } ResolveActionWithChoices.java000066400000000000000000000113351203611042400427260ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actionspackage org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.SVNTreeConflict; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.conflicts.ResolveTreeConflictWizard; import org.tigris.subversion.subclipse.ui.wizards.SizePersistedWizardDialog; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardDialog; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardMarkResolvedPage; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; import org.tigris.subversion.svnclientadapter.ISVNStatus; public class ResolveActionWithChoices extends ResolveAction { private int selectedResolution; private SVNTreeConflict treeConflict; protected void execute(IAction action) throws InvocationTargetException, InterruptedException { boolean folderSelected = false; boolean propertyConflicts = false; boolean textConflicts = false; boolean treeConflicts = false; boolean treeConflictDialogShown = false; IResource[] resources = getSelectedResources(); for (int i = 0; i < resources.length; i++) { if (resources[i] instanceof IContainer) { folderSelected = true; } if (!propertyConflicts || !textConflicts || !treeConflicts) { ISVNLocalResource resource = SVNWorkspaceRoot.getSVNResourceFor(resources[i]); try { LocalResourceStatus status = resource.getStatus(); if (status != null && status.isPropConflicted()) propertyConflicts = true; if (status != null && status.isTextConflicted()) textConflicts = true; if (status != null && status.hasTreeConflict()) treeConflicts = true; } catch (SVNException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } } if (resources.length == 1 && treeConflicts && !propertyConflicts && !textConflicts) { treeConflict = getTreeConflict(resources[0]); if (treeConflict != null) { ResolveTreeConflictWizard wizard = new ResolveTreeConflictWizard(treeConflict, getTargetPart()); WizardDialog dialog = new SizePersistedWizardDialog(Display.getDefault().getActiveShell(), wizard, "ResolveTreeConflict"); //$NON-NLS-1$ if (dialog.open() != WizardDialog.OK) return; treeConflictDialogShown = true; } } if (resources.length > 1 && treeConflicts) { if (!MessageDialog.openConfirm(getShell(), Policy.bind("ResolveOperation.taskName"), Policy.bind("ResolveAction.confirmTreeConflicts"))) return; //$NON-NLS-1$ //$NON-NLS-2$ setResolution(ISVNConflictResolver.Choice.chooseMerged); } else if (!treeConflictDialogShown) { SvnWizardMarkResolvedPage markResolvedPage = new SvnWizardMarkResolvedPage(resources); markResolvedPage.setPropertyConflicts(propertyConflicts); markResolvedPage.setTreeConflicts(treeConflicts); SvnWizard wizard = new SvnWizard(markResolvedPage); SvnWizardDialog dialog = new SvnWizardDialog(getShell(), wizard); wizard.setParentDialog(dialog); if (dialog.open() == SvnWizardDialog.CANCEL) return; setResolution(markResolvedPage.getResolution()); } if (!treeConflictDialogShown) super.execute(action); } private SVNTreeConflict getTreeConflict(final IResource resource) { BusyIndicator.showWhile(Display.getDefault(), new Runnable() { public void run() { ISVNClientAdapter client = null; try { client = SVNWorkspaceRoot.getSVNResourceFor(resource).getRepository().getSVNClient(); ISVNStatus[] statuses = client.getStatus(resource.getLocation().toFile(), true, true, true); for (int i = 0; i < statuses.length; i++) { if (statuses[i].hasTreeConflict()) { treeConflict = new SVNTreeConflict(statuses[i]); break; } } } catch (Exception e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } finally { SVNWorkspaceRoot.getSVNResourceFor(resource).getRepository().returnSVNClient(client); } } }); return treeConflict; } } RevertAction.java000066400000000000000000000236331203611042400404300ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.commands.GetStatusCommand; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.core.util.File2Resource; import org.tigris.subversion.subclipse.core.util.Util; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.operations.RevertOperation; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardDialog; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardRevertPage; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.SVNStatusKind; import org.tigris.subversion.svnclientadapter.utils.SVNStatusUtils; /** * Action to restore pristine working copy file */ public class RevertAction extends WorkbenchWindowAction { private String url; private IResource[] resourcesToRevert; private HashMap statusMap; private SvnWizardRevertPage revertPage; private IResource[] selectedResources; private boolean canRunAsJob = true; private boolean showNothingToRevertMessage = true; private boolean includesExternals; private boolean resourcesHidden; protected void execute(final IAction action) throws InvocationTargetException, InterruptedException { statusMap = new HashMap(); includesExternals = false; resourcesHidden = false; final IResource[] resources = getSelectedResources(); try { IResource[] modifiedResources = getModifiedResources(resources, new NullProgressMonitor()); if (!confirmRevert(modifiedResources)) return; RevertOperation revertOperation = null; if (revertPage != null && !revertPage.isResourceRemoved() && !includesExternals) { revertOperation = new RevertOperation(getTargetPart(), resources); revertOperation.setRecurse(true); revertOperation.setResourcesToRevert(resourcesToRevert); } else { revertOperation = new RevertOperation(getTargetPart(), resourcesToRevert); } revertOperation.setCanRunAsJob(canRunAsJob); revertOperation.run(); } catch (SVNException e) { if (!e.operationInterrupted()) { throw new InvocationTargetException(e); } } } /** * get the modified resources in resources parameter */ protected IResource[] getModifiedResources(IResource[] resources, IProgressMonitor iProgressMonitor) throws SVNException { boolean ignoreHiddenChanges = SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_IGNORE_HIDDEN_CHANGES); // if only one resource selected, get url. Revert dialog displays this. if (resources.length == 1) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resources[0]); url = svnResource.getStatus().getUrlString(); if ((url == null) || (resources[0].getType() == IResource.FILE)) url = Util.getParentUrl(svnResource); } ArrayList conflictFiles = new ArrayList(); final List modified = new ArrayList(); for (int i = 0; i < resources.length; i++) { IResource resource = resources[i]; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); // get adds, deletes, updates and property updates. GetStatusCommand command = new GetStatusCommand(svnResource, true, false); command.run(iProgressMonitor); ISVNStatus[] statuses = command.getStatuses(); for (int j = 0; j < statuses.length; j++) { if (statuses[j].isFileExternal() || SVNStatusKind.EXTERNAL.equals(statuses[j].getTextStatus())) { includesExternals = true; } boolean isManaged = SVNStatusUtils.isManaged(statuses[j]); if (SVNStatusUtils.isReadyForRevert(statuses[j]) || !isManaged) { IResource currentResource = SVNWorkspaceRoot.getResourceFor(resource, statuses[j]); if (currentResource != null) { ISVNLocalResource localResource = SVNWorkspaceRoot.getSVNResourceFor(currentResource); if (!localResource.isIgnored()) { if (isManaged || !Util.isSpecialEclipseFile(currentResource)) { boolean hidden = Util.isHidden(currentResource); if (ignoreHiddenChanges && hidden) { resourcesHidden = true; } if ((!ignoreHiddenChanges && isManaged) || !hidden) { modified.add(currentResource); if (currentResource instanceof IContainer) statusMap.put(currentResource, statuses[j].getPropStatus()); else { statusMap.put(currentResource, statuses[j].getTextStatus()); if (SVNStatusUtils.isTextConflicted(statuses[j])) { IFile conflictNewFile = (IFile) File2Resource .getResource(statuses[j] .getConflictNew()); if (conflictNewFile != null) conflictFiles.add(conflictNewFile); IFile conflictOldFile = (IFile) File2Resource .getResource(statuses[j] .getConflictOld()); if (conflictOldFile != null) conflictFiles.add(conflictOldFile); IFile conflictWorkingFile = (IFile) File2Resource .getResource(statuses[j] .getConflictWorking()); if (conflictWorkingFile != null) conflictFiles.add(conflictWorkingFile); } } } } } } } } } Iterator iter = conflictFiles.iterator(); while (iter.hasNext()) { IFile conflictFile = (IFile)iter.next(); modified.remove(conflictFile); statusMap.remove(conflictFile); } return (IResource[]) modified.toArray(new IResource[modified.size()]); } /** * prompt revert of selected resources. */ protected boolean confirmRevert(IResource[] modifiedResources) { if (modifiedResources.length == 0) { if (showNothingToRevertMessage) { MessageDialog.openInformation(Display.getDefault().getActiveShell(), Policy.bind("RevertAction.0"), Policy.bind("RevertAction.1")); //$NON-NLS-1$ //$NON-NLS-2$ } return false; } revertPage = new SvnWizardRevertPage(modifiedResources, url, statusMap, false); revertPage.setResourceRemoved(resourcesHidden); SvnWizard wizard = new SvnWizard(revertPage); SvnWizardDialog dialog = new SvnWizardDialog(getShell(), wizard); boolean revert = (dialog.open() == SvnWizardDialog.OK); url = null; resourcesToRevert = revertPage.getSelectedResources(); return revert; } /** * @see org.eclipse.team.internal.ccvs.ui.actions.CVSAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("RevertAction.error"); //$NON-NLS-1$ } /** * @see org.eclipse.team.internal.ccvs.ui.actions.WorkspaceAction#isEnabledForManagedResources() */ protected boolean isEnabledForManagedResources() { return true; } /** * @see org.eclipse.team.internal.ccvs.ui.actions.WorkspaceAction#isEnabledForUnmanagedResources() */ protected boolean isEnabledForUnmanagedResources() { return SVNUIPlugin.getPlugin().getPreferenceStore().getBoolean(ISVNUIConstants.PREF_REMOVE_UNADDED_RESOURCES_ON_REPLACE); } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForInaccessibleResources() */ protected boolean isEnabledForInaccessibleResources() { return true; } protected String getImageId() { return ISVNUIConstants.IMG_MENU_REVERT; } protected IResource[] getSelectedResources() { if (selectedResources == null) return super.getSelectedResources(); else return selectedResources; } public void setSelectedResources(IResource[] selectedResources) { this.selectedResources = selectedResources; } public void setCanRunAsJob(boolean canRunAsJob) { this.canRunAsJob = canRunAsJob; } public void setShowNothingToRevertMessage(boolean showNothingToRevertMessage) { this.showNothingToRevertMessage = showNothingToRevertMessage; } } SVNAction.java000066400000000000000000000340041203611042400376210ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNStatus; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.util.IPromptCondition; /** * SVNAction is the common superclass for all SVN actions. It provides * facilities for enablement handling, standard error handling, selection * retrieval and prompting. */ abstract public class SVNAction extends ReplaceableIconAction { private List accumulatedStatus = new ArrayList(); /** * Common run method for all SVN actions. */ final public void run(IAction action) { try { if (!beginExecution(action)) return; execute(action); endExecution(); } catch (InvocationTargetException e) { // Handle the exception and any accumulated errors handle(e); } catch (InterruptedException e) { // Show any problems that have occurred so far handle(null); } } /** * This method gets invoked before the SVNAction#execute(IAction) * method. It can preform any pre-checking and initialization required before * the action is executed. Subclasses may override but must invoke this * inherited method to ensure proper initialization of this superclass is performed. * These included preparation to accumulate IStatus and checking for dirty editors. */ protected boolean beginExecution(IAction action) { accumulatedStatus.clear(); if(needsToSaveDirtyEditors()) { if(!saveAllEditors()) { return false; } } return true; } /** * Actions must override to do their work. */ abstract protected void execute(IAction action) throws InvocationTargetException, InterruptedException; /** * This method gets invoked after SVNAction#execute(IAction) * if no exception occurred. Subclasses may override but should invoke this * inherited method to ensure proper handling oy any accumulated IStatus. */ protected void endExecution() { if ( ! accumulatedStatus.isEmpty()) { handle(null); } } /** * Add a status to the list of accumulated status. * These will be provided to method handle(Exception, IStatus[]) * when the action completes. */ protected void addStatus(IStatus status) { accumulatedStatus.add(status); } /** * Return the list of status accumulated so far by the action. This * will include any OK status that were added using addStatus(IStatus) */ protected IStatus[] getAccumulatedStatus() { return (IStatus[]) accumulatedStatus.toArray(new IStatus[accumulatedStatus.size()]); } /** * Return the title to be displayed on error dialogs. * Subclasses should override to present a custom message. */ protected String getErrorTitle() { return Policy.bind("SVNAction.errorTitle"); //$NON-NLS-1$ } /** * Return the title to be displayed on error dialogs when warnings occur. * Subclasses should override to present a custom message. */ protected String getWarningTitle() { return Policy.bind("SVNAction.warningTitle"); //$NON-NLS-1$ } /** * Return the message to be used for the parent MultiStatus when * multiple errors occur during an action. * Subclasses should override to present a custom message. */ protected String getMultiStatusMessage() { return Policy.bind("SVNAction.multipleProblemsMessage"); //$NON-NLS-1$ } /** * Return the status to be displayed in an error dialog for the given list * of non-OK status. * * This method can be overridden by subclasses. Returning an OK status will * prevent the error dialog from being shown. */ protected IStatus getStatusToDisplay(IStatus[] problems) { if (problems.length == 1) { return problems[0]; } MultiStatus combinedStatus = new MultiStatus(SVNUIPlugin.ID, 0, getMultiStatusMessage(), null); //$NON-NLS-1$ for (int i = 0; i < problems.length; i++) { combinedStatus.merge(problems[i]); } return combinedStatus; } /** * Method that implements generic handling of an exception. * * Thsi method will also use any accumulated status when determining what * information (if any) to show the user. * * @param exception the exception that occured (or null if none occured) * @param status any status accumulated by the action before the end of * the action or the exception occured. */ protected void handle(Exception exception) { if (exception instanceof SVNException) { if (((SVNException)exception).operationInterrupted()) { return; } } // Get the non-OK statii List problems = new ArrayList(); IStatus[] status = getAccumulatedStatus(); if (status != null) { for (int i = 0; i < status.length; i++) { IStatus iStatus = status[i]; if ( ! iStatus.isOK() || iStatus.getCode() == SVNStatus.SERVER_ERROR) { problems.add(iStatus); } } } // Handle the case where there are no problem statii if (problems.size() == 0) { if (exception == null) return; handle(exception, getErrorTitle(), null); return; } // For now, display both the exception and the problem status // Later, we can determine how to display both together if (exception != null) { handle(exception, getErrorTitle(), null); } String message = null; IStatus statusToDisplay = getStatusToDisplay((IStatus[]) problems.toArray(new IStatus[problems.size()])); if (statusToDisplay.isOK()) return; if (statusToDisplay.isMultiStatus() && statusToDisplay.getChildren().length == 1) { message = statusToDisplay.getMessage(); statusToDisplay = statusToDisplay.getChildren()[0]; } String title; if (statusToDisplay.getSeverity() == IStatus.ERROR) { title = getErrorTitle(); } else { title = getWarningTitle(); } SVNUIPlugin.openError(getShell(), title, message, new SVNException(statusToDisplay)); } /** * Convenience method for running an operation with the appropriate progress. * Any exceptions are propogated so they can be handled by the * SVNAction#run(IAction) error handling code. * * @param runnable the runnable which executes the operation * @param cancelable indicate if a progress monitor should be cancelable * @param progressKind one of PROGRESS_BUSYCURSOR or PROGRESS_DIALOG */ final protected void run(final IRunnableWithProgress runnable, boolean cancelable, int progressKind) throws InvocationTargetException, InterruptedException { final Exception[] exceptions = new Exception[] {null}; // Ensure that no repository view refresh happens until after the action final IRunnableWithProgress innerRunnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { SVNUIPlugin.getPlugin().getRepositoryManager().run(runnable, monitor); } }; switch (progressKind) { case PROGRESS_BUSYCURSOR : BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { try { innerRunnable.run(new NullProgressMonitor()); } catch (InvocationTargetException e) { exceptions[0] = e; } catch (InterruptedException e) { exceptions[0] = e; } } }); break; case PROGRESS_DIALOG : default : new ProgressMonitorDialog(getShell()).run(true, cancelable,/*cancelable, true, */innerRunnable); break; } if (exceptions[0] != null) { if (exceptions[0] instanceof InvocationTargetException) throw (InvocationTargetException)exceptions[0]; else throw (InterruptedException)exceptions[0]; } } /** * Answers if the action would like dirty editors to saved * based on the SVN preference before running the action. By * default, SVNActions do not save dirty editors. */ protected boolean needsToSaveDirtyEditors() { return false; } /** * Find the object associated with the selected object that is adapted to * the provided class. * * @param selection * @param c * @return Object */ public static Object getAdapter(Object selection, Class c) { if (c.isInstance(selection)) { return selection; } if (selection instanceof IAdaptable) { IAdaptable a = (IAdaptable) selection; Object adapter = a.getAdapter(c); if (c.isInstance(adapter)) { return adapter; } } return null; } /** * Get selected SVN remote folders */ protected ISVNRemoteFolder[] getSelectedRemoteFolders() { ArrayList resources = null; if (!selection.isEmpty()) { resources = new ArrayList(); Iterator elements = selection.iterator(); while (elements.hasNext()) { Object next = elements.next(); if (next instanceof ISVNRemoteFolder) { resources.add(next); continue; } if (next instanceof IAdaptable) { IAdaptable a = (IAdaptable) next; Object adapter = a.getAdapter(ISVNRemoteFolder.class); if (adapter instanceof ISVNRemoteFolder) { resources.add(adapter); continue; } } } } if (resources != null && !resources.isEmpty()) { return (ISVNRemoteFolder[])resources.toArray(new ISVNRemoteFolder[resources.size()]); } return new ISVNRemoteFolder[0]; } /** * Returns the selected remote files */ protected ISVNRemoteFile[] getSelectedRemoteFiles() { ArrayList resources = null; if (selection != null && !selection.isEmpty()) { resources = new ArrayList(); Iterator elements = selection.iterator(); while (elements.hasNext()) { Object next = elements.next(); if (next instanceof ISVNRemoteFile) { resources.add(next); continue; } if (next instanceof IAdaptable) { IAdaptable a = (IAdaptable) next; Object adapter = a.getAdapter(ISVNRemoteFile.class); if (adapter instanceof ISVNRemoteFile) { resources.add(adapter); continue; } } } } if (resources != null && !resources.isEmpty()) { ISVNRemoteFile[] result = new ISVNRemoteFile[resources.size()]; resources.toArray(result); return result; } return new ISVNRemoteFile[0]; } /** * Returns the selected remote resources */ protected ISVNRemoteResource[] getSelectedRemoteResources() { ArrayList resources = null; if (selection != null && !selection.isEmpty()) { resources = new ArrayList(); Iterator elements = selection.iterator(); while (elements.hasNext()) { Object next = elements.next(); if (next instanceof ISVNRemoteResource) { resources.add(next); continue; } if (next instanceof IAdaptable) { IAdaptable a = (IAdaptable) next; Object adapter = a.getAdapter(ISVNRemoteResource.class); if (adapter instanceof ISVNRemoteResource) { resources.add(adapter); continue; } } } } if (resources != null && !resources.isEmpty()) { ISVNRemoteResource[] result = new ISVNRemoteResource[resources.size()]; resources.toArray(result); return result; } return new ISVNRemoteResource[0]; } /** * Based on the SVN preference for saving dirty editors this method will either * ignore dirty editors, save them automatically, or prompt the user to save them. * * @return true if the command succeeded, and false * if at least one editor with unsaved changes was not saved */ private boolean saveAllEditors() { final int option = SVNUIPlugin.getPlugin().getPreferenceStore().getInt(ISVNUIConstants.PREF_SAVE_DIRTY_EDITORS); final boolean[] okToContinue = new boolean[] {true}; if (option != ISVNUIConstants.OPTION_NEVER) { Display.getDefault().syncExec(new Runnable() { public void run() { boolean confirm = option == ISVNUIConstants.OPTION_PROMPT; okToContinue[0] = PlatformUI.getWorkbench().saveAllEditors(confirm); } }); } return okToContinue[0]; } /** * @see org.tigris.subversion.subclipse.ui.actions.TeamAction#handle(java.lang.Exception, java.lang.String, java.lang.String) */ protected void handle(Exception exception, String title, String message) { SVNUIPlugin.openError(getShell(), title, message, exception, SVNUIPlugin.LOG_NONTEAM_EXCEPTIONS); } /** * A helper prompt condition for prompting for SVN dirty state. * @param dirtyResources Resources that have been modified * @return IPromptCondition that prompts when a resource is in the dirtyResources list */ public static IPromptCondition getOverwriteLocalChangesPrompt(final IResource[] dirtyResources) { return new IPromptCondition() { List resources = Arrays.asList(dirtyResources); public boolean needsPrompt(IResource resource) { return resources.contains(resource); } public String promptMessage(IResource resource) { return Policy.bind("ReplaceWithAction.localChanges", resource.getName());//$NON-NLS-1$ } }; } } SVNPluginAction.java000066400000000000000000000157641203611042400410140ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2008 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IConfigurationElement; import org.eclipse.core.runtime.Status; import org.eclipse.jface.action.Action; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.widgets.Event; import org.eclipse.team.core.TeamException; import org.eclipse.ui.IActionDelegate; import org.eclipse.ui.IActionDelegate2; import org.eclipse.ui.IPluginContribution; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.plugin.AbstractUIPlugin; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; /** * The action properties are created from the {@link IConfigurationElement} * such as the text, style, icon, tooltip, id, and state. * It also creates the {@link IActionDelegate} from the required "class" attribute. * * This action also passes selection changes to the delegate action. * * This class is quite similar to the PluginAction class in the org.eclipse.ui.workbench * plugin, but didn't want to depend on that plugin. * * @author Chris Callendar */ public class SVNPluginAction extends Action implements IPluginContribution, ISelectionChangedListener, ISelectionListener { /** Class attribute. Value class. */ public static final String ATT_CLASS = "class"; //$NON-NLS-1$ /** Icon attribute. Value icon. */ public static final String ATT_ICON = "icon"; //$NON-NLS-1$ /** Id attribute. Value id. */ public static final String ATT_ID = "id"; //$NON-NLS-1$ /** Label attribute. Value label. */ public static final String ATT_LABEL = "label"; //$NON-NLS-1$ /** Action state attribute. Value state. */ public static final String ATT_STATE = "state"; //$NON-NLS-1$ /** Action style attribute. Value style. */ public static final String ATT_STYLE = "style"; //$NON-NLS-1$ /** Tooltip attribute. Value tooltip. */ public static final String ATT_TOOLTIP = "tooltip"; //$NON-NLS-1$ private IConfigurationElement element; private IActionDelegate delegate; private String pluginId; public SVNPluginAction(IConfigurationElement element) { super(element.getAttribute(ATT_LABEL), getStyleFromElement(element)); this.element = element; pluginId = element.getContributor().getName(); createDelegate(); setId(element.getAttribute(ATT_ID)); setToolTipText(element.getAttribute(ATT_TOOLTIP)); if ((getStyle() == AS_RADIO_BUTTON) || (getStyle() == AS_CHECK_BOX)) { String bool = element.getAttribute(ATT_STATE); setChecked("true".equals(bool)); //$NON-NLS-1$ } String iconPath = element.getAttribute(ATT_ICON); if ((iconPath != null) && (iconPath.length() > 0)) { ImageDescriptor desc = AbstractUIPlugin.imageDescriptorFromPlugin(pluginId, iconPath); if (desc != null) { setImageDescriptor(desc); } } // Give delegate a chance to adjust enable state selectionChanged(StructuredSelection.EMPTY); } private static int getStyleFromElement(IConfigurationElement element) { String style = element.getAttribute(ATT_STYLE); if ("radio".equals(style)) { //$NON-NLS-1$ return AS_RADIO_BUTTON; } else if ("toggle".equals(style)) { //$NON-NLS-1$ return AS_CHECK_BOX; } return AS_PUSH_BUTTON; } public IActionDelegate getDelegate() { return delegate; } /** * Creates the delegate and refreshes its enablement. */ protected final void createDelegate() { // The runAttribute is null if delegate creation failed previously... if (delegate == null) { try { Object obj = element.createExecutableExtension(ATT_CLASS); if (obj instanceof IActionDelegate) { delegate = (IActionDelegate) obj; } } catch (Throwable e) { if (e instanceof CoreException) { SVNUIPlugin.log((CoreException)e); } else { SVNUIPlugin.log(new Status(Status.ERROR, SVNUIPlugin.ID, TeamException.UNABLE, "Internal plug-in action delegate error on creation.", e)); //$NON-NLS-1$ } } } } /* (non-Javadoc) * @see org.eclipse.ui.IPluginContribution#getLocalId() */ public String getLocalId() { return getId(); } /* (non-Javadoc) * @see org.eclipse.ui.IPluginContribution#getPluginId() */ public String getPluginId() { return pluginId; } /* (non-Javadoc) * @see org.eclipse.jface.action.Action#run() */ public void run() { if (delegate != null) { delegate.run(this); } } /* (non-Javadoc) * @see org.eclipse.jface.action.Action#runWithEvent(org.eclipse.swt.widgets.Event) */ public void runWithEvent(Event event) { if ((event != null) && (delegate instanceof IActionDelegate2)) { ((IActionDelegate2)delegate).runWithEvent(this, event); } else { run(); } } /** * Disposes this action. */ public void dispose() { if (delegate instanceof IActionDelegate2) { ((IActionDelegate2)delegate).dispose(); delegate = null; } } /** * Handles selection change. * @param selection the new selection */ public void selectionChanged(ISelection selection) { if (selection == null) { selection = StructuredSelection.EMPTY; } if (delegate != null) { delegate.selectionChanged(this, selection); } } /** * The SelectionChangedEventAction implementation of this * ISelectionChangedListener method calls * selectionChanged(IStructuredSelection) when the selection is * a structured one. */ public void selectionChanged(SelectionChangedEvent event) { selectionChanged(event.getSelection()); } /** * The SelectionChangedEventAction implementation of this * ISelectionListener method calls * selectionChanged(IStructuredSelection) when the selection is * a structured one. Subclasses may extend this method to react to the change. */ public void selectionChanged(IWorkbenchPart part, ISelection sel) { selectionChanged(sel); } } SVNPropertyAction.java000066400000000000000000000052231203611042400413670ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.io.File; import java.util.ArrayList; import java.util.Iterator; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.jface.viewers.IStructuredSelection; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.ISVNProperty; /** * ancestor to all actions that work on ISVNProperty objects */ abstract public class SVNPropertyAction extends SVNAction { /** * return the ISVNLocalResource associated to this property or null * @param svnProperty * @return */ protected ISVNLocalResource getSVNLocalResource(ISVNProperty svnProperty) { File file = svnProperty.getFile(); if (file == null || !file.exists()) { return null; } IPath pathEclipse; pathEclipse = new Path(file.getAbsolutePath()); // XXX IGORF ideally IResource should come from ISelection IResource[] resource = SVNWorkspaceRoot.getResourcesFor(pathEclipse);; if (resource.length == 0) { return null; } return SVNWorkspaceRoot.getSVNResourceFor(resource[0]); } /** * Returns the selected svn properties */ protected ISVNProperty[] getSelectedSvnProperties() { ArrayList resources = null; if (!selection.isEmpty()) { resources = new ArrayList(); Iterator elements = ((IStructuredSelection)selection).iterator(); while (elements.hasNext()) { Object next = elements.next(); if (next instanceof ISVNProperty) { resources.add(next); continue; } if (next instanceof IAdaptable) { IAdaptable a = (IAdaptable) next; Object adapter = a.getAdapter(ISVNProperty.class); if (adapter instanceof ISVNProperty) { resources.add(adapter); continue; } } } } if (resources != null && !resources.isEmpty()) { ISVNProperty[] result = new ISVNProperty[resources.size()]; resources.toArray(result); return result; } return new ISVNProperty[0]; } } SVNPropertyDeleteAction.java000066400000000000000000000064111203611042400425120ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.dialogs.DeletePropertyDialog; import org.tigris.subversion.svnclientadapter.ISVNProperty; /** * action to modify a property */ public class SVNPropertyDeleteAction extends SVNPropertyAction { /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#execute(org.eclipse.jface.action.IAction) */ protected void execute(IAction action) throws InvocationTargetException, InterruptedException { run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { ISVNProperty[] svnProperties = getSelectedSvnProperties(); boolean directory = svnProperties[0].getFile().isDirectory(); String message; if (svnProperties.length == 1) { message = Policy.bind("SVNPropertyDeleteAction.confirmSingle",svnProperties[0].getName()); //$NON-NLS-1$ } else { message = Policy.bind("SVNPropertyDeleteAction.confirmMultiple",Integer.toString(svnProperties.length)); //$NON-NLS-1$ } DeletePropertyDialog dialog = new DeletePropertyDialog(getShell(), message, directory); if (dialog.open() == DeletePropertyDialog.CANCEL) return; for (int i = 0; i < svnProperties.length;i++) { ISVNProperty svnProperty = svnProperties[i]; ISVNLocalResource svnResource = getSVNLocalResource(svnProperty); try { svnResource.deleteSvnProperty(svnProperty.getName(),dialog.isRecurse()); } catch (SVNException e) { throw new InvocationTargetException(e); } } } }, false /* cancelable */, PROGRESS_BUSYCURSOR); } /* (non-Javadoc) * @see org.eclipse.team.internal.ui.actions.TeamAction#isEnabled() */ protected boolean isEnabled() throws TeamException { return getSelectedSvnProperties().length > 0; } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("SVNPropertyDeleteAction.delete"); //$NON-NLS-1$ } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_PROPDELETE; } } SVNPropertyModifyAction.java000066400000000000000000000061541203611042400425430ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardDialog; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardSetPropertyPage; import org.tigris.subversion.svnclientadapter.ISVNProperty; /** * action to modify a property */ public class SVNPropertyModifyAction extends SVNPropertyAction { /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#execute(org.eclipse.jface.action.IAction) */ protected void execute(IAction action) throws InvocationTargetException, InterruptedException { run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { ISVNProperty svnProperty = getSelectedSvnProperties()[0]; ISVNLocalResource svnResource = getSVNLocalResource(svnProperty); SvnWizardSetPropertyPage setPropertyPage = new SvnWizardSetPropertyPage(svnResource, svnProperty); SvnWizard wizard = new SvnWizard(setPropertyPage); SvnWizardDialog dialog = new SvnWizardDialog(getShell(), wizard); wizard.setParentDialog(dialog); if (dialog.open() != SvnWizardDialog.OK) return; try { if (setPropertyPage.getPropertyValue() != null) { svnResource.setSvnProperty(setPropertyPage.getPropertyName(), setPropertyPage.getPropertyValue(),setPropertyPage.getRecurse()); } else { svnResource.setSvnProperty(setPropertyPage.getPropertyName(), setPropertyPage.getPropertyFile(),setPropertyPage.getRecurse()); } } catch (SVNException e) { throw new InvocationTargetException(e); } } }, false /* cancelable */, PROGRESS_BUSYCURSOR); } /* (non-Javadoc) * @see org.eclipse.team.internal.ui.actions.TeamAction#isEnabled() */ protected boolean isEnabled() throws TeamException { return getSelectedSvnProperties().length == 1; } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("SVNPropertyModifyAction.modify"); //$NON-NLS-1$ } } SVNPropertySaveAction.java000066400000000000000000000043501203611042400422060ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.io.ByteArrayInputStream; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.action.IAction; import org.eclipse.team.core.TeamException; import org.eclipse.ui.dialogs.SaveAsDialog; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.svnclientadapter.ISVNProperty; /** * action to save a property */ public class SVNPropertySaveAction extends SVNPropertyAction { /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#execute(org.eclipse.jface.action.IAction) */ protected void execute(IAction action) throws InvocationTargetException, InterruptedException { ISVNProperty svnProperty = getSelectedSvnProperties()[0]; SaveAsDialog dialog = new SaveAsDialog(getShell()); if (dialog.open() != SaveAsDialog.OK) return; IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile( dialog.getResult()); try { ByteArrayInputStream is = new ByteArrayInputStream(svnProperty.getData()); file.create(is, true, null); } catch (CoreException e) { throw new InvocationTargetException(e); } } /* (non-Javadoc) * @see org.eclipse.team.internal.ui.actions.TeamAction#isEnabled() */ protected boolean isEnabled() throws TeamException { return getSelectedSvnProperties().length == 1; } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("SVNPropertySaveAction.save"); //$NON-NLS-1$ } } SetSvnPropertyAction.java000066400000000000000000000100261203611042400421400ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardDialog; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardSetPropertyPage; /** * Set a new svn property on a given resource */ public class SetSvnPropertyAction extends WorkbenchWindowAction { protected void execute(final IAction action) throws InvocationTargetException, InterruptedException { if (action != null && !action.isEnabled()) { action.setEnabled(true); } else { if(getSelectedResources().length > 0) { run(new WorkspaceModifyOperation() { public void execute(IProgressMonitor monitor) throws InterruptedException, InvocationTargetException { IResource resource = getSelectedResources()[0]; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); SvnWizardSetPropertyPage setPropertyPage = new SvnWizardSetPropertyPage(svnResource); SvnWizard wizard = new SvnWizard(setPropertyPage); SvnWizardDialog dialog = new SvnWizardDialog(getShell(), wizard); wizard.setParentDialog(dialog); if (dialog.open() != SvnWizardDialog.OK) return; try { if (setPropertyPage.getPropertyValue() != null) { svnResource.setSvnProperty(setPropertyPage.getPropertyName(), setPropertyPage.getPropertyValue(),setPropertyPage.getRecurse()); } else { svnResource.setSvnProperty(setPropertyPage.getPropertyName(), setPropertyPage.getPropertyFile(),setPropertyPage.getRecurse()); } } catch (SVNException e) { throw new InvocationTargetException(e); } } }, false /* cancelable */, PROGRESS_BUSYCURSOR); } } } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("SetSvnPropertyAction.set"); //$NON-NLS-1$ } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForManagedResources() */ protected boolean isEnabledForManagedResources() { return true; } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForUnmanagedResources() */ protected boolean isEnabledForUnmanagedResources() { return false; } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForMultipleResources() */ protected boolean isEnabledForMultipleResources() { return false; } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_PROPSET; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#needsToSaveDirtyEditors() */ @Override protected boolean needsToSaveDirtyEditors() { return false; } } ShowAnnotationAction.java000066400000000000000000000073371203611042400421370ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.operations.ShowAnnotationOperation; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardAnnotatePage; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardDialog; public class ShowAnnotationAction extends WorkbenchWindowAction { /** * Action to open a SVN Annotate View */ public void execute(IAction action) throws InvocationTargetException, InterruptedException { // try to enable action if not enabled, for keyboard activated actions if (action != null && !action.isEnabled()) { action.setEnabled(true); } else { // Get the selected resource. final ISVNRemoteFile svnResource = getSingleSelectedSVNRemoteFile(); execute(svnResource); } } public void execute(final ISVNRemoteFile svnResource) throws InvocationTargetException, InterruptedException { if (svnResource == null) { return; } SvnWizardAnnotatePage annotatePage = new SvnWizardAnnotatePage(svnResource); SvnWizard wizard = new SvnWizard(annotatePage); SvnWizardDialog dialog = new SvnWizardDialog(getShell(), wizard); wizard.setParentDialog(dialog); if (dialog.open() == SvnWizardDialog.CANCEL) return; ShowAnnotationOperation showAnnotationOperation = new ShowAnnotationOperation(getTargetPart(), svnResource, annotatePage.getFromRevision(), annotatePage.getToRevision(), annotatePage.isIncludeMergedRevisions(), annotatePage.isIgnoreMimeType()); showAnnotationOperation.run(); } /** * Ony enabled for single resource selection */ protected boolean isEnabled() throws TeamException { ISVNRemoteFile resource = getSingleSelectedSVNRemoteFile(); return (resource != null); } /** * This action is called from one of a Resource Navigator a SVN Resource * Navigator or a History Log Viewer. Return the selected resource as an * ISVNRemoteFile * * @return ICVSResource * @throws SVNException */ protected ISVNRemoteFile getSingleSelectedSVNRemoteFile() { // Selected from a SVN Resource Navigator or History if (this.getSelectedRemoteFiles().length > 0) { ISVNRemoteFile[] svnResources = this.getSelectedRemoteFiles(); if (svnResources.length == 1) { return svnResources[0]; } } // Selected from a Resource Navigator IResource[] resources = getSelectedResources(); if (resources.length == 1 && resources[0].getType() == IResource.FILE ) { try { return (ISVNRemoteFile)SVNWorkspaceRoot.getBaseResourceFor(resources[0]); } catch (SVNException e) { return null; } } return null; } protected String getImageId() { return ISVNUIConstants.IMG_MENU_ANNOTATE; } } ShowDifferencesAsUnifiedDiffAction.java000066400000000000000000000150751203611042400446210ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNResource; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.resources.RemoteFile; import org.tigris.subversion.subclipse.core.resources.RemoteFolder; import org.tigris.subversion.subclipse.core.resources.RemoteResource; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.dialogs.DifferencesDialog; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class ShowDifferencesAsUnifiedDiffAction extends WorkbenchWindowAction { private boolean usePegRevision; private SVNRevision pegRevision1; private SVNRevision pegRevision2; protected void execute(IAction action) throws InvocationTargetException, InterruptedException { pegRevision1 = null; pegRevision2 = null; String fromRevision = null; String toRevision = null; ISVNResource[] selectedResources = getSelectedRemoteResources(); SVNUrl fromUrl = null; SVNUrl toUrl = null; if (selectedResources == null || (selectedResources.length == 0)) { Object[] selectedObjects = selection.toArray(); if (selectedObjects[0] instanceof ILogEntry) { selectedResources = new ISVNResource[2]; selectedResources[0] = ((ILogEntry)selectedObjects[0]).getResource(); fromRevision = ((ILogEntry)selectedObjects[0]).getRevision().toString(); ILogEntry logEntry1 = (ILogEntry)selectedObjects[0]; RemoteResource remoteResource; IResource resource1 = logEntry1.getResource().getResource(); if (resource1 != null) { try { ISVNRemoteResource baseResource = SVNWorkspaceRoot.getBaseResourceFor(resource1); if (baseResource != null) { pegRevision1 = baseResource.getLastChangedRevision(); } } catch (Exception e) {} } if (logEntry1.getResource().getResource() instanceof IContainer) { remoteResource = new RemoteFolder(logEntry1.getResource().getRepository(), logEntry1.getResource().getUrl(), logEntry1.getRevision()); } else { remoteResource = new RemoteFile(logEntry1.getResource().getRepository(), logEntry1.getResource().getUrl(), logEntry1.getRevision()); } fromUrl = remoteResource.getUrl(); if (selectedObjects.length > 1) { selectedResources[1] = ((ILogEntry)selectedObjects[1]).getResource(); toRevision = ((ILogEntry)selectedObjects[1]).getRevision().toString(); ILogEntry logEntry2 = (ILogEntry)selectedObjects[1]; IResource resource2 = logEntry2.getResource().getResource(); if (resource2 != null) { try { ISVNRemoteResource baseResource = SVNWorkspaceRoot.getBaseResourceFor(resource2); if (baseResource != null) { pegRevision2 = baseResource.getLastChangedRevision(); } } catch (Exception e) {} } if (logEntry2.getResource().getResource() instanceof IContainer) { remoteResource = new RemoteFolder(logEntry2.getResource().getRepository(), logEntry2.getResource().getUrl(), logEntry2.getRevision()); } else { remoteResource = new RemoteFile(logEntry2.getResource().getRepository(), logEntry2.getResource().getUrl(), logEntry2.getRevision()); } toUrl = remoteResource.getUrl(); } else { int from = Integer.parseInt(fromRevision); from--; toRevision = Integer.toString(from); toUrl = remoteResource.getUrl(); } } } else { if (selectedResources[0] instanceof ISVNRemoteResource) fromRevision = ((ISVNRemoteResource)selectedResources[0]).getRevision().toString(); if (selectedResources.length > 1 && selectedResources[1] instanceof ISVNRemoteResource) toRevision = ((ISVNRemoteResource)selectedResources[1]).getRevision().toString(); } if (pegRevision1 == null) { pegRevision1 = SVNRevision.HEAD; } if (pegRevision2 == null) { pegRevision2 = pegRevision1; } DifferencesDialog dialog = new DifferencesDialog(getShell(), null, selectedResources, new SVNRevision[] { pegRevision1, pegRevision2 }, getTargetPart()); dialog.setUsePegRevision(usePegRevision); dialog.setFromUrl(fromUrl); dialog.setToUrl(toUrl); if (!fromRevision.equals("HEAD")) dialog.setFromRevision(fromRevision); //$NON-NLS-1$ if (toRevision != null && !toRevision.equals("HEAD")) dialog.setToRevision(toRevision); //$NON-NLS-1$ dialog.open(); } protected boolean isEnabled() throws TeamException { Object[] selectedObjects = selection.toArray(); if (selectedObjects.length == 0 || selectedObjects.length > 2) return false; ISVNResource svnResource1 = null; ISVNResource svnResource2 = null; if (selectedObjects[0] instanceof ISVNResource) svnResource1 = (ISVNResource)selectedObjects[0]; else { if (selectedObjects[0] instanceof ILogEntry) svnResource1 = ((ILogEntry)selectedObjects[0]).getResource(); } if (svnResource1 == null) return false; if (selectedObjects.length > 1) { if (selectedObjects[1] instanceof ISVNResource) svnResource2 = (ISVNResource)selectedObjects[1]; else { if (selectedObjects[1] instanceof ILogEntry) svnResource2 = ((ILogEntry)selectedObjects[1]).getResource(); } if (!svnResource1.getRepository().getRepositoryRoot().toString().equals(svnResource2.getRepository().getRepositoryRoot().toString())) return false; return (svnResource1.isFolder() == svnResource2.isFolder()); } return true; } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_DIFF; } public void setUsePegRevision(boolean usePegRevision) { this.usePegRevision = usePegRevision; } } ShowDifferencesAsUnifiedDiffActionWC.java000066400000000000000000000135521203611042400450510ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.compare.CompareUI; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.RemoteFile; import org.tigris.subversion.subclipse.core.resources.RemoteFolder; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.compare.SVNLocalBranchTagCompareInput; import org.tigris.subversion.subclipse.ui.compare.SVNLocalCompareInput; import org.tigris.subversion.subclipse.ui.dialogs.ShowDifferencesAsUnifiedDiffDialogWC; import org.tigris.subversion.subclipse.ui.wizards.CheckoutWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardCompareMultipleResourcesWithBranchTagPage; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardDialog; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.utils.Depth; public class ShowDifferencesAsUnifiedDiffActionWC extends WorkbenchWindowAction { public ShowDifferencesAsUnifiedDiffActionWC() { super(); } protected void execute(IAction action) throws InvocationTargetException, InterruptedException { IResource[] resources = getSelectedResources(); boolean refreshFile = false; for (int i = 0; i < resources.length; i++) { if (resources[i] instanceof IFile && !resources[i].isSynchronized(Depth.immediates)) { if (refreshFile || MessageDialog.openQuestion(getShell(), Policy.bind("DifferencesDialog.compare"), Policy.bind("CompareWithRemoteAction.fileChanged"))) { refreshFile = true; try { resources[i].refreshLocal(Depth.immediates, new NullProgressMonitor()); } catch (CoreException e) { throw new InvocationTargetException(e); } } else { break; } } } if (resources.length > 1) { SvnWizardCompareMultipleResourcesWithBranchTagPage comparePage = new SvnWizardCompareMultipleResourcesWithBranchTagPage(resources); SvnWizard wizard = new SvnWizard(comparePage); SvnWizardDialog dialog = new SvnWizardDialog(getShell(), wizard); if (dialog.open() == SvnWizardDialog.OK) { ISVNLocalResource[] localResources = new ISVNLocalResource[resources.length]; for (int i = 0; i < resources.length; i++) { localResources[i] = SVNWorkspaceRoot.getSVNResourceFor(resources[i]); } try { SVNLocalBranchTagCompareInput compareInput = new SVNLocalBranchTagCompareInput(localResources, comparePage.getUrls(), comparePage.getRevision(), getTargetPart()); CompareUI.openCompareEditorOnPage( compareInput, getTargetPage()); } catch (SVNException e) { MessageDialog.openError(getShell(), Policy.bind("ShowDifferencesAsUnifiedDiffDialog.branchTag"), e.getMessage()); } } return; } ShowDifferencesAsUnifiedDiffDialogWC dialog = new ShowDifferencesAsUnifiedDiffDialogWC(getShell(), resources[0], getTargetPart()); if (dialog.open() == ShowDifferencesAsUnifiedDiffDialogWC.OK) { try { if (dialog.isDiffToOutputFile()) dialog.getOperation().run(); if (!dialog.isDiffToOutputFile()) { SVNRevision pegRevision = dialog.getPegRevision(); if (pegRevision == null) { pegRevision = SVNRevision.HEAD; } if (resources[0] instanceof IContainer) { ISVNRemoteFolder remoteFolder = new RemoteFolder(dialog.getSvnResource().getRepository(), dialog.getToUrl(), dialog.getToRevision()); ((RemoteFolder)remoteFolder).setPegRevision(pegRevision); SVNLocalCompareInput compareInput = new SVNLocalCompareInput(dialog.getSvnResource(), remoteFolder, pegRevision); compareInput.setDiffOperation(dialog.getOperation()); CompareUI.openCompareEditorOnPage( compareInput, getTargetPage()); } else { ISVNRemoteFile remoteFile = new RemoteFile(dialog.getSvnResource().getRepository(), dialog.getToUrl(), dialog.getToRevision()); ((RemoteFile)remoteFile).setPegRevision(pegRevision); SVNLocalCompareInput compareInput = new SVNLocalCompareInput(dialog.getSvnResource(), remoteFile, pegRevision); CompareUI.openCompareEditorOnPage( compareInput, getTargetPage()); } } } catch (SVNException e) { MessageDialog.openError(getShell(), Policy.bind("ShowDifferencesAsUnifiedDiffDialog.branchTag"), e.getMessage()); } } } protected boolean isEnabled() throws TeamException { // return getSelectedResources().length == 1; return true; } protected String getImageId() { return ISVNUIConstants.IMG_MENU_COMPARE; } } ShowHistoryAction.java000066400000000000000000000045041203611042400414570ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.team.ui.history.IHistoryView; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; /** * Show history for selected remote file */ public class ShowHistoryAction extends SVNAction { /* * @see SVNAction#executeIAction) */ public void execute(IAction action) throws InterruptedException, InvocationTargetException { run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) { ISVNRemoteResource[] resources = getSelectedRemoteResources(); if (resources.length == 0) resources = getSelectedRemoteFolders(); IHistoryView view = (IHistoryView)showView(ISVNUIConstants.HISTORY_VIEW_ID); if (view != null) { view.showHistoryFor(resources[0]); } } }, false /* cancelable */, PROGRESS_BUSYCURSOR); } /* * @see TeamAction#isEnabled() */ protected boolean isEnabled() { ISVNRemoteResource[] resources = getSelectedRemoteResources(); if (resources.length == 1) return true; if (resources.length == 0 && getSelectedRemoteFolders().length == 1) return true; return false; } /** * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("ShowHistoryAction.showHistory"); //$NON-NLS-1$ } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_SHOWHISTORY; } } ShowOutOfDateFoldersAction.java000066400000000000000000000027041203611042400431670ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actionspackage org.tigris.subversion.subclipse.ui.actions; import org.eclipse.jface.action.Action; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.subscriber.SVNSynchronizeParticipant; public class ShowOutOfDateFoldersAction extends Action { private SVNSynchronizeParticipant svnSynchronizeParticipant; public ShowOutOfDateFoldersAction() { super(); setText(Policy.bind("SyncAction.showOutOfDateFolders")); //$NON-NLS-1$ setChecked(SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_SHOW_OUT_OF_DATE_FOLDERS)); } public void setChecked(boolean checked) { super.setChecked(checked); SVNProviderPlugin.getPlugin().getPluginPreferences().setValue(ISVNCoreConstants.PREF_SHOW_OUT_OF_DATE_FOLDERS, isChecked()); if (svnSynchronizeParticipant != null) svnSynchronizeParticipant.refresh(svnSynchronizeParticipant.getResources(), Policy.bind("ShowOutOfDateFoldersAction.refreshTaskName"), Policy.bind("ShowOutOfDateFoldersAction.refreshTaskName"), SVNUIPlugin.getActivePage().getActivePart().getSite()); //$NON-NLS-1$, //$NON-NLS-1$ } public void setSvnSynchronizeParticipant( SVNSynchronizeParticipant svnSynchronizeParticipant) { this.svnSynchronizeParticipant = svnSynchronizeParticipant; } } ShowResourceInHistoryAction.java000066400000000000000000000055401203611042400434570ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.team.ui.history.IHistoryView; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; /** * Show history for selected local resource */ public class ShowResourceInHistoryAction extends WorkbenchWindowAction { /* * @see IActionDelegate#run(IAction) */ public void execute(IAction action) throws InterruptedException, InvocationTargetException { if (action != null && !action.isEnabled()) { action.setEnabled(true); } else { run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) { IResource[] resources = getSelectedResources(); if (resources.length != 1) return; IHistoryView view = (IHistoryView) showView(ISVNUIConstants.HISTORY_VIEW_ID); if (view != null) { view.showHistoryFor(resources[0]); } } }, false /* cancelable */, PROGRESS_BUSYCURSOR); } } /** * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("ShowHistoryAction.showHistory"); //$NON-NLS-1$ } /** * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForMultipleResources() */ protected boolean isEnabledForMultipleResources() { return false; } /** * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForAddedResources() */ protected boolean isEnabledForAddedResources() { return false; } /** * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForCopiedResources() */ protected boolean isEnabledForCopiedResources() { return true; } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_SHOWHISTORY; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#needsToSaveDirtyEditors() */ @Override protected boolean needsToSaveDirtyEditors() { return false; } } ShowSvnPropertiesAction.java000066400000000000000000000053231203611042400426410ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.svnproperties.SvnPropertiesView; /** * * Action for Show svn properties * * */ public class ShowSvnPropertiesAction extends WorkbenchWindowAction { protected void execute(IAction action) throws InvocationTargetException, InterruptedException { if (action != null && !action.isEnabled()) { action.setEnabled(true); } else { if (getSelectedResources() != null && getSelectedResources().length > 0) { IResource resource = (IResource)getSelectedResources()[0]; final ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); try { SvnPropertiesView view = (SvnPropertiesView)showView(SvnPropertiesView.VIEW_ID); if (view != null) view.showSvnProperties(svnResource); } catch (SVNException e) { throw new InvocationTargetException(e); } } } } protected boolean isEnabledForAddedResources() { return true; } protected boolean isEnabledForIgnoredResources() { return false; } protected boolean isEnabledForInaccessibleResources() { return false; } protected boolean isEnabledForManagedResources() { return true; } protected boolean isEnabledForMultipleResources() { return false; } protected boolean isEnabledForUnmanagedResources() { return false; } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_SHOWPROPERTY; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#needsToSaveDirtyEditors() */ @Override protected boolean needsToSaveDirtyEditors() { return false; } } ShowSvnRevPropertiesAction.java000066400000000000000000000061401203611042400433140ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.svnproperties.SvnRevPropertiesView; /** * * Action for Show svn revision properties * * */ public class ShowSvnRevPropertiesAction extends WorkbenchWindowAction { protected void execute(IAction action) throws InvocationTargetException, InterruptedException { if (action != null && !action.isEnabled()) { action.setEnabled(true); } else { if (getSelectedResources() != null && getSelectedResources().length > 0) { IResource resource = (IResource)getSelectedResources()[0]; final ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); try { SvnRevPropertiesView view = (SvnRevPropertiesView)showView(SvnRevPropertiesView.VIEW_ID); if (view != null) view.showSvnProperties(svnResource); view.refresh(); } catch (SVNException e) { throw new InvocationTargetException(e); } } } } protected boolean isEnabledForAddedResources() { return true; } protected boolean isEnabledForIgnoredResources() { return false; } protected boolean isEnabledForInaccessibleResources() { return false; } protected boolean isEnabledForManagedResources() { return true; } protected boolean isEnabledForMultipleResources() { return false; } protected boolean isEnabledForUnmanagedResources() { return false; } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_SHOWPROPERTY; // just re-use regular properties icon } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#needsToSaveDirtyEditors() */ @Override protected boolean needsToSaveDirtyEditors() { return false; } } ShowTreeConflictsAction.java000066400000000000000000000025471203611042400425670ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actionspackage org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.tigris.subversion.subclipse.ui.conflicts.TreeConflictsView; public class ShowTreeConflictsAction extends WorkbenchWindowAction { protected void execute(IAction action) throws InvocationTargetException, InterruptedException { if (action != null && !action.isEnabled()) { action.setEnabled(true); } else { IResource[] resources = getSelectedResources(); TreeConflictsView treeConflictsView = (TreeConflictsView)showView(TreeConflictsView.VIEW_ID); treeConflictsView.showTreeConflictsFor(resources[0]); } } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForManagedResources() */ protected boolean isEnabledForManagedResources() { return true; } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForUnmanagedResources() */ protected boolean isEnabledForUnmanagedResources() { return false; } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForMultipleResources() */ protected boolean isEnabledForMultipleResources() { return false; } } SwitchAction.java000066400000000000000000000130141203611042400404120ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.operations.SwitchOperation; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardDialog; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardSwitchPage; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * Action to switch to branch/tag */ public class SwitchAction extends WorkbenchWindowAction { private IResource[] selectedResources; private boolean canRunAsJob = true; protected void execute(IAction action) throws InvocationTargetException, InterruptedException { if (action != null && !action.isEnabled()) { action.setEnabled(true); } else { IResource[] resources = getSelectedResources(); // Use different wizard page name if multiple resources selected so that // page size and location will be saved and restored separately for // single selection switch and multiple selection switch. String pageName; if (resources.length > 1) pageName = "SwitchDialogWithConflictHandling.multiple"; else pageName = "SwitchDialogWithConflictHandling"; //$NON-NLS-1$ SvnWizardSwitchPage switchPage = new SvnWizardSwitchPage(pageName, resources); SvnWizard wizard = new SvnWizard(switchPage); SvnWizardDialog dialog = new SvnWizardDialog(getShell(), wizard); wizard.setParentDialog(dialog); if (dialog.open() == SvnWizardDialog.OK) { SVNUrl[] svnUrls = switchPage.getUrls(); SVNRevision svnRevision = switchPage.getRevision(); SwitchOperation switchOperation = new SwitchOperation(getTargetPart(), resources, svnUrls, svnRevision); switchOperation.setDepth(switchPage.getDepth()); switchOperation.setSetDepth(switchPage.isSetDepth()); switchOperation.setIgnoreExternals(switchPage.isIgnoreExternals()); switchOperation.setForce(switchPage.isForce()); switchOperation.setIgnoreAncestry(switchPage.isIgnoreAncestry()); switchOperation.setCanRunAsJob(canRunAsJob); switchOperation.setConflictResolver(switchPage.getConflictResolver()); switchOperation.run(); } } } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("SwitchAction.switch"); //$NON-NLS-1$ } protected IResource[] getSelectedResources() { if (selectedResources != null) return selectedResources; else return super.getSelectedResources(); } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForManagedResources() */ protected boolean isEnabledForManagedResources() { return true; } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForUnmanagedResources() */ protected boolean isEnabledForUnmanagedResources() { return false; } /* * (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForMultipleResources() */ protected boolean isEnabledForMultipleResources() { try { // Must all be from same repository. ISVNRepositoryLocation repository = null; IResource[] selectedResources = getSelectedResources(); for (int i = 0; i < selectedResources.length; i++) { ISVNRepositoryLocation compareToRepository = null; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(selectedResources[i]); if (svnResource == null || !svnResource.isManaged()) { return false; } LocalResourceStatus status = svnResource.getStatusFromCache(); if (status != null) { compareToRepository = status.getRepository(); } if (compareToRepository == null) { return false; } if (repository != null && !compareToRepository.equals(repository)) { return false; } repository = compareToRepository; } return true; } catch (Exception e) { return false; } } protected String getImageId() { return ISVNUIConstants.IMG_MENU_SWITCH; } public void setSelectedResources(IResource[] selectedResources) { this.selectedResources = selectedResources; } public void setCanRunAsJob(boolean canRunAsJob) { this.canRunAsJob = canRunAsJob; } } SyncAction.java000066400000000000000000000027411203611042400400720ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; /** * Action for catchup/release in popup menus. */ public class SyncAction extends WorkspaceAction { public void execute(IAction action) { } protected IResource[] getResourcesToSync() { return getSelectedResources(); } /** * Enable for resources that are managed (using super) or whose parent is a * SVN folder. * * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForSVNResource(org.tigris.subversion.subclipse.core.ISVNResource) */ protected boolean isEnabledForSVNResource(ISVNLocalResource svnResource) throws SVNException { return super.isEnabledForSVNResource(svnResource) || svnResource.getParent().isManaged(); } } SynchronizeAction.java000066400000000000000000000054611203611042400414730ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.eclipse.team.ui.TeamUI; import org.eclipse.team.ui.synchronize.ISynchronizeParticipant; import org.eclipse.team.ui.synchronize.ResourceScope; import org.eclipse.team.ui.synchronize.SubscriberParticipant; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.subscriber.SVNSynchronizeParticipant; /** * Action to synchronize the selected resources. This results * in a file-system participant being added to the synchronize view. */ public class SynchronizeAction extends WorkbenchWindowAction { /* (non-Javadoc) * @see org.eclipse.ui.IActionDelegate#run(org.eclipse.jface.action.IAction) */ public void execute(IAction action) throws InterruptedException, InvocationTargetException { if (action != null && !action.isEnabled()) { action.setEnabled(true); } else { IResource[] resources = getSelectedResources(); // First check if there is an existing matching participant SVNSynchronizeParticipant participant = (SVNSynchronizeParticipant)SubscriberParticipant.getMatchingParticipant(SVNSynchronizeParticipant.ID, resources); // If there isn't, create one and add to the manager if (participant == null) { participant = new SVNSynchronizeParticipant(new ResourceScope(resources)); TeamUI.getSynchronizeManager().addSynchronizeParticipants(new ISynchronizeParticipant[] {participant}); } // If called by the accelerator key, for some reason targetPart is null, thus the check if(getTargetPart() == null) { //System.out.println("site:null"+ SVNUIPlugin.getActivePage().getActivePart().getSite()); participant.refresh(resources, "Synchronizing", "Synchronizing " + participant.getName(), SVNUIPlugin.getActivePage().getActivePart().getSite()); } else { participant.refresh(resources, "Synchronizing", "Synchronizing " + participant.getName(), getTargetPart().getSite()); } } } protected String getImageId() { return ISVNUIConstants.IMG_MENU_SYNC; } } UnlockAction.java000066400000000000000000000070251203611042400404110ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import java.util.Hashtable; import java.util.Iterator; import java.util.Set; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.team.core.TeamException; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.commands.UnlockResourcesCommand; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; public class UnlockAction extends WorkbenchWindowAction { protected void execute(IAction action) throws InvocationTargetException, InterruptedException { if (action != null && !action.isEnabled()) { action.setEnabled(true); } else { if (getSelectedResources() != null && getSelectedResources().length > 0) { final IResource[] resources = getSelectedResources(); run(new WorkspaceModifyOperation() { protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException { try { Hashtable table = getProviderMapping(getSelectedResources()); Set keySet = table.keySet(); Iterator iterator = keySet.iterator(); while (iterator.hasNext()) { SVNTeamProvider provider = (SVNTeamProvider)iterator.next(); UnlockResourcesCommand command = new UnlockResourcesCommand(provider.getSVNWorkspaceRoot(), resources, false); command.run(Policy.subMonitorFor(monitor,1000)); } } catch (TeamException e) { throw new InvocationTargetException(e); } finally { monitor.done(); } } }, true /* cancelable */, PROGRESS_DIALOG); } } } /** * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForSVNResource(org.tigris.subversion.subclipse.core.ISVNResource) */ protected boolean isEnabledForSVNResource(ISVNLocalResource svnResource) { try { if (!super.isEnabledForSVNResource(svnResource)) { return false; } return svnResource.getStatusFromCache().isLocked(); } catch (SVNException e) { return false; } } /* * @see org.tigris.subversion.subclipse.ui.actions.ReplaceableIconAction#getImageId() */ protected String getImageId() { return ISVNUIConstants.IMG_MENU_LOCK; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#needsToSaveDirtyEditors() */ @Override protected boolean needsToSaveDirtyEditors() { return false; } } UnmanageAction.java000066400000000000000000000205421203611042400407100ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Set; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.tigris.subversion.subclipse.core.ISVNLocalFolder; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.internal.InfiniteSubProgressMonitor; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; /** * Unmanage action removes the svn feature from a project and optionally * deletes the SVN meta information that is stored on disk. */ public class UnmanageAction extends WorkspaceAction { // the dialog that will ask if we want to delete .SVN directory // from the project. It also allows to cancel the operation static class DeleteProjectDialog extends MessageDialog { private boolean deleteContent = false; private Button radio1; private Button radio2; DeleteProjectDialog(Shell parentShell, IProject[] projects) { super( parentShell, getTitle(projects), null, // accept the default window icon getMessage(projects), MessageDialog.QUESTION, new String[] {IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL}, 0); // yes is the default } static String getTitle(IProject[] projects) { if (projects.length == 1) return Policy.bind("Unmanage.title"); //$NON-NLS-1$ else return Policy.bind("Unmanage.titleN"); //$NON-NLS-1$ } static String getMessage(IProject[] projects) { if (projects.length == 1) { IProject project = projects[0]; return Policy.bind("Unmanage.message", project.getName()); //$NON-NLS-1$ } else { return Policy.bind("Unmanage.messageN", new Integer(projects.length).toString()); //$NON-NLS-1$ } } protected Control createCustomArea(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout()); radio1 = new Button(composite, SWT.RADIO); radio1.addSelectionListener(selectionListener); radio1.setText(Policy.bind("Unmanage.option2")); //$NON-NLS-1$ radio2 = new Button(composite, SWT.RADIO); radio2.addSelectionListener(selectionListener); radio2.setText(Policy.bind("Unmanage.option1")); //$NON-NLS-1$ // set initial state radio1.setSelection(deleteContent); radio2.setSelection(!deleteContent); PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.DISCONNECT_ACTION); return composite; } private SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Button button = (Button) e.widget; if (button.getSelection()) { deleteContent = (button == radio1); } } }; public boolean getDeleteContent() { return deleteContent; } } private boolean deleteContent = false; // true if we want to delete .svn directories, false otherwise /* * @see IActionDelegate#run(IAction) */ public void execute(IAction action) throws InterruptedException, InvocationTargetException { if(confirmDeleteProjects()) { run(getOperation(), true /* cancelable */, PROGRESS_DIALOG); } } /** * get the WorkspaceModifyOperation. The operation will : * - delete svn directories if this option has been chosen * - unmap the project * @return */ private IRunnableWithProgress getOperation() { return new WorkspaceModifyOperation() { public void execute(IProgressMonitor monitor) throws InvocationTargetException { try { // maps the selected resources (projects) to their providers Hashtable table = getProviderMapping(getSelectedResources()); Set keySet = table.keySet(); monitor.beginTask("", keySet.size() * 1000); //$NON-NLS-1$ monitor.setTaskName(Policy.bind("Unmanage.unmanaging")); //$NON-NLS-1$ Iterator iterator = keySet.iterator(); while (iterator.hasNext()) { IProgressMonitor subMonitor = new InfiniteSubProgressMonitor(monitor, 1000); subMonitor.beginTask(null, 100); SVNTeamProvider provider = (SVNTeamProvider)iterator.next(); // get the resources (projects) to unmanage for the given provider List list = (List)table.get(provider); IResource[] providerResources = (IResource[])list.toArray(new IResource[list.size()]); for (int i = 0; i < providerResources.length; i++) { // get the folder for the project IResource resource = providerResources[i]; ISVNLocalFolder folder = SVNWorkspaceRoot.getSVNFolderFor((IContainer) resource); try { if(deleteContent) { folder.unmanage(Policy.subMonitorFor(subMonitor, 10)); } } finally { // We want to remove the nature even if the unmanage operation fails RepositoryProvider.unmap((IProject)resource); } } } } catch (TeamException e) { throw new InvocationTargetException(e); } finally { monitor.done(); } } }; } /** * open the deltion confirmation dialog * returns true if deletion is confirmed */ boolean confirmDeleteProjects() { final int[] result = new int[] { MessageDialog.OK }; IProject[] projects = getSelectedProjects(); final DeleteProjectDialog dialog = new DeleteProjectDialog(shell, projects); shell.getDisplay().syncExec(new Runnable() { public void run() { result[0] = dialog.open(); } }); deleteContent = dialog.getDeleteContent(); // No longer need to show warning message if meta data is being deleted // since it is now possible to reconnect. // if (deleteContent && result[0] == 0) { // String title; // if (projects.length == 1) // title = Policy.bind("Unmanage.title"); //$NON-NLS-1$ // else // title = Policy.bind("Unmanage.titleN"); //$NON-NLS-1$ // return MessageDialog.openQuestion(shell, title, Policy.bind("Unmanage.deleteMeta"));//$NON-NLS-1$ // } return result[0] == 0; // YES } /** * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("Unmanage.unmanagingError");//$NON-NLS-1$ } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#needsToSaveDirtyEditors() */ @Override protected boolean needsToSaveDirtyEditors() { return false; } /** * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForSVNResource(org.tigris.subversion.subclipse.core.ISVNResource) */ protected boolean isEnabledForSVNResource(ISVNLocalResource svnResource) { IResource resource = svnResource.getIResource(); return resource != null && resource.getType() == IResource.PROJECT; } } UpdateAction.java000066400000000000000000000076201203611042400404010ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.eclipse.jface.preference.IPreferenceStore; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.conflicts.SVNConflictResolver; import org.tigris.subversion.subclipse.ui.operations.UpdateOperation; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * UpdateAction performs a 'svn update' command on the selected resources. * If conflicts are present (file has been changed both remotely and locally), * the changes will be merged into the local file such that the user must * resolve the conflicts. */ public class UpdateAction extends WorkbenchWindowAction { private IResource[] selectedResources; private int depth = ISVNCoreConstants.DEPTH_UNKNOWN; private boolean setDepth = false; protected boolean canRunAsJob = true; /* * @see IActionDelegate#run(IAction) */ public void execute(IAction action) throws InterruptedException, InvocationTargetException { if (action != null && !action.isEnabled()) { action.setEnabled(true); } else { IPreferenceStore store = SVNUIPlugin.getPlugin().getPreferenceStore(); IResource[] resources = getSelectedResources(); SVNConflictResolver conflictResolver = new SVNConflictResolver(resources[0], store.getInt(ISVNUIConstants.PREF_UPDATE_TO_HEAD_CONFLICT_HANDLING_TEXT_FILES), store.getInt(ISVNUIConstants.PREF_UPDATE_TO_HEAD_CONFLICT_HANDLING_BINARY_FILES), store.getInt(ISVNUIConstants.PREF_UPDATE_TO_HEAD_CONFLICT_HANDLING_PROPERTIES)); UpdateOperation updateOperation = new UpdateOperation(getTargetPart(), resources, SVNRevision.HEAD); updateOperation.setDepth(depth); updateOperation.setSetDepth(setDepth); updateOperation.setForce(store.getBoolean(ISVNUIConstants.PREF_UPDATE_TO_HEAD_ALLOW_UNVERSIONED_OBSTRUCTIONS)); updateOperation.setIgnoreExternals(store.getBoolean(ISVNUIConstants.PREF_UPDATE_TO_HEAD_IGNORE_EXTERNALS)); updateOperation.setCanRunAsJob(canRunAsJob); updateOperation.setConflictResolver(conflictResolver); updateOperation.run(); } } protected IResource[] getSelectedResources() { if (selectedResources == null) return super.getSelectedResources(); else return selectedResources; } /** * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("UpdateAction.updateerror"); //$NON-NLS-1$ } /** * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForAddedResources() */ protected boolean isEnabledForAddedResources() { return false; } protected String getImageId() { return ISVNUIConstants.IMG_MENU_UPDATE; } public void setCanRunAsJob(boolean canRunAsJob) { this.canRunAsJob = canRunAsJob; } public void setDepth(int depth) { this.depth = depth; } public void setSetDepth(boolean setDepth) { this.setDepth = setDepth; } public void setSelectedResources(IResource[] selectedResources) { this.selectedResources = selectedResources; } } UpdateDialogAction.java000066400000000000000000000047511203611042400415230ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actionspackage org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.ui.operations.UpdateOperation; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardDialog; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardUpdatePage; import org.tigris.subversion.svnclientadapter.SVNRevision; public class UpdateDialogAction extends UpdateAction { private long revision; private int depth = ISVNCoreConstants.DEPTH_UNKNOWN; private boolean setDepth = false; public void execute(IAction action) throws InterruptedException, InvocationTargetException { if (action != null && !action.isEnabled()) { action.setEnabled(true); } else { IResource[] resources = getSelectedResources(); String pageName; if (resources.length > 1) pageName = "UpdateDialogWithConflictHandling.multiple"; //$NON-NLS-1$ else pageName = "UpdateDialogWithConflictHandling"; //$NON-NLS-1$ SvnWizardUpdatePage updatePage = new SvnWizardUpdatePage(pageName, resources); updatePage.setDefaultRevision(revision); updatePage.setDepth(depth); updatePage.setSetDepth(setDepth); SvnWizard wizard = new SvnWizard(updatePage); SvnWizardDialog dialog = new SvnWizardDialog(getShell(), wizard); wizard.setParentDialog(dialog); if (dialog.open() == SvnWizardDialog.OK) { SVNRevision svnRevision = updatePage.getRevision(); UpdateOperation updateOperation = new UpdateOperation(getTargetPart(), resources, svnRevision); updateOperation.setDepth(updatePage.getDepth()); updateOperation.setSetDepth(updatePage.isSetDepth()); updateOperation.setForce(updatePage.isForce()); updateOperation.setIgnoreExternals(updatePage.isIgnoreExternals()); updateOperation.setCanRunAsJob(canRunAsJob); updateOperation.setConflictResolver(updatePage.getConflictResolver()); updateOperation.run(); } } } public void setRevision(long revision) { this.revision = revision; } public void setDepth(int depth) { this.depth = depth; } public void setSetDepth(boolean setDepth) { this.setDepth = setDepth; } } UpgradeAction.java000066400000000000000000000043631203611042400405470ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actionspackage org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.operations.UpgradeOperation; public class UpgradeAction extends WorkbenchWindowAction { protected void execute(final IAction action) throws InvocationTargetException, InterruptedException { String message; IResource[] resources = getSelectedResources(); if (resources.length == 1) { message = Policy.bind("UpgradeAction.confirm.single", resources[0].getName()); //$NON-NLS-1$ } else { message = Policy.bind("UpgradeAction.confirm.multiple"); //$NON-NLS-1$ } if (!MessageDialog.openConfirm(Display.getDefault().getActiveShell(), Policy.bind("UpgradeAction.title"), message)) { //$NON-NLS-1$ return; } new UpgradeOperation(getTargetPart(), getSelectedResources()).run(); } /** * @see org.eclipse.team.internal.ccvs.ui.actions.CVSAction#getErrorTitle() */ protected String getErrorTitle() { return Policy.bind("UpgradeAction.error"); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#isEnabledForSVNResource(org.tigris.subversion.subclipse.core.ISVNLocalResource) */ protected boolean isEnabledForSVNResource(ISVNLocalResource svnResource) throws SVNException { return svnResource.isFolder() && super.isEnabledForSVNResource(svnResource); } /** * @see org.eclipse.team.internal.ccvs.ui.actions.WorkspaceAction#isEnabledForAddedResources() */ protected boolean isEnabledForAddedResources() { return false; } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.actions.WorkspaceAction#needsToSaveDirtyEditors() */ @Override protected boolean needsToSaveDirtyEditors() { return false; } } WorkbenchWindowAction.java000066400000000000000000000020051203611042400422610ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.IWorkbenchWindowActionDelegate; /** * Helper class for actions that are displayed in a toolbar */ public abstract class WorkbenchWindowAction extends WorkspaceAction implements IWorkbenchWindowActionDelegate { /* * @see IWorkbenchWindowActionDelegate#init(IWorkbenchWindow) */ public void init(IWorkbenchWindow workbenchWindow) { setIcon(); } } WorkspaceAction.java000066400000000000000000000313471203611042400411200ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/actions/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.actions; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.Iterator; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorReference; import org.eclipse.ui.IFileEditorInput; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.commands.GetStatusCommand; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.util.PromptingDialog; import org.tigris.subversion.subclipse.ui.util.IPromptCondition; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.utils.SVNStatusUtils; /** * This class represents an action performed on a local SVN workspace */ public abstract class WorkspaceAction extends SVNAction { private String name; /** * Most SVN workspace actions modify the workspace and thus should * save dirty editors. * @see org.tigris.subversion.subclipse.ui.actions.SVNAction#needsToSaveDirtyEditors() */ protected boolean needsToSaveDirtyEditors() { IResource[] selectedResources = getSelectedResources(); if (selectedResources != null && selectedResources.length > 0) { IEditorReference[] editorReferences = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getEditorReferences(); for (IEditorReference editorReference : editorReferences) { if (editorReference.isDirty()) { try { IEditorInput editorInput = editorReference.getEditorInput(); if (editorInput instanceof IFileEditorInput) { IFile file = ((IFileEditorInput)editorInput).getFile(); if (needsToSave(file, selectedResources)) { return true; } } } catch (PartInitException e) {} } } } return false; } private boolean needsToSave(IFile file, IResource[] selectedResources) { if (file != null) { IResource parent = file; while (parent != null) { for (IResource selectedResource : selectedResources) { if (selectedResource.equals(parent)) { return true; } } parent = parent.getParent(); } } return false; } /** * The action is enabled for the appropriate resources. This method checks * that: *
    *
  1. there is no overlap between a selected file and folder (overlapping * folders is allowed because of logical vs. physical mapping problem in * views) *
  2. the state of the resources match the conditions provided by: *
      *
    • isEnabledForIgnoredResources() *
    • isEnabledForManagedResources() *
    • isEnabledForUnManagedResources() (i.e. not ignored and not managed) *
    *
* @see TeamAction#isEnabled() */ protected boolean isEnabled() throws TeamException { // invoke the inherited method so that overlaps are maintained IResource[] resources = super.getSelectedResources(); // disable if no resources are selected if(resources.length==0) return false; // disable properly for single resource enablement if (!isEnabledForMultipleResources() && resources.length != 1) return false; // validate enabled for each resource in the selection List folderPaths = new ArrayList(); List filePaths = new ArrayList(); for (int i = 0; i < resources.length; i++) { IResource resource = resources[i]; // only enable for accessible resources if ((! resource.isAccessible()) && (!isEnabledForInaccessibleResources())) return false; // no SVN actions are enabled if the selection contains a linked resource if (SVNWorkspaceRoot.isLinkedResource(resource)) return false; // only enable for resources in a project shared with SVN if(RepositoryProvider.getProvider(resource.getProject(), SVNProviderPlugin.getTypeId()) == null) { return false; } // collect files and folders separately to check for overlap later IPath resourceFullPath = resource.getFullPath(); if(resource.getType() == IResource.FILE) { filePaths.add(resourceFullPath); } else { folderPaths.add(resourceFullPath); } // ensure that resource management state matches what the action requires ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); if (!isEnabledForSVNResource(svnResource)) { return false; } } // Ensure that there is no overlap between files and folders // NOTE: folder overlap must be allowed because of logical vs. physical if(!folderPaths.isEmpty()) { for (Iterator fileIter = filePaths.iterator(); fileIter.hasNext();) { IPath resourcePath = (IPath) fileIter.next(); for (Iterator it = folderPaths.iterator(); it.hasNext();) { IPath folderPath = (IPath) it.next(); if (folderPath.isPrefixOf(resourcePath)) { return false; } } } } return true; } /** * Normally, actions are not availables for inaccessible resources * (files or folder which do not exist ...) */ protected boolean isEnabledForInaccessibleResources() { return false; } /** * Method isEnabledForSVNResource. * @param svnResource * @return boolean */ protected boolean isEnabledForSVNResource(ISVNLocalResource svnResource) throws SVNException { if (isEnabledForIgnoredResources() && isEnabledForManagedResources() && isEnabledForUnmanagedResources() && isEnabledForAddedResources() && isEnabledForCopiedResources()) { return true; } LocalResourceStatus status = svnResource.getStatusFromCache(); boolean managed = false; boolean ignored = false; boolean added = false; boolean copied = false; if (!isEnabledForIgnoredResources()) { if (!status.isManaged() && status.isIgnored()) { ignored = true; } else { ignored = svnResource.isIgnored(); } } if (!ignored) { managed = status.isManaged(); if (managed) { copied = status.isCopied(); added = status.isAdded(); } } if (managed && ! isEnabledForManagedResources()) return false; if ( ! managed && ! isEnabledForUnmanagedResources()) return false; if ( ignored && ! isEnabledForIgnoredResources()) return false; if (copied && added) { if (! isEnabledForCopiedResources()) return false; } else if (added && ! isEnabledForAddedResources()) { return false; } return true; } /** * Method isEnabledForIgnoredResources. * @return boolean */ protected boolean isEnabledForIgnoredResources() { return false; } /** * Method isEnabledForUnmanagedResources. * @return boolean */ protected boolean isEnabledForUnmanagedResources() { return false; } /** * Method isEnabledForManagedResources. * @return boolean */ protected boolean isEnabledForManagedResources() { return true; } /** * Method isEnabledForAddedResources. * @return boolean */ protected boolean isEnabledForAddedResources() { return true; } /** * Method isEnabledForCopiedResources. * @return boolean */ protected boolean isEnabledForCopiedResources() { //By default, handle copied as added. return isEnabledForAddedResources(); } /** * Method isEnabledForAddedResources. * @return boolean */ protected boolean isEnabledForMultipleResources() { return true; } /** * Method getNonOverlapping ensures that a resource is not covered more than once. * @param resources * @return IResource[] */ public static IResource[] getNonOverlapping(IResource[] resources) { // Sort the resources so the shortest paths are first List sorted = new ArrayList(); sorted.addAll(Arrays.asList(resources)); Collections.sort(sorted, new Comparator() { public int compare(Object arg0, Object arg1) { IResource resource0 = (IResource) arg0; IResource resource1 = (IResource) arg1; return resource0.getFullPath().segmentCount() - resource1.getFullPath().segmentCount(); } public boolean equals(Object arg0) { return false; } }); // Collect all non-overlapping resources List coveredPaths = new ArrayList(); for (Iterator iter = sorted.iterator(); iter.hasNext();) { IResource resource = (IResource) iter.next(); IPath resourceFullPath = resource.getFullPath(); boolean covered = false; for (Iterator it = coveredPaths.iterator(); it.hasNext();) { IPath path = (IPath) it.next(); if(path.isPrefixOf(resourceFullPath)) { covered = true; } } if (covered) { // if the resource is covered by a parent, remove it iter.remove(); } else { // if the resource is a non-covered folder, add it to the covered paths if (resource.getType() == IResource.FOLDER) { coveredPaths.add(resource.getFullPath()); } } } return (IResource[]) sorted.toArray(new IResource[sorted.size()]); } /** * Override to ensure that the selected resources so not overlap. * This method assumes that all actions are deep. * * @see org.tigris.subversion.subclipse.ui.actions.TeamAction#getSelectedResources() */ protected IResource[] getSelectedResources() { return getNonOverlapping(super.getSelectedResources()); } protected IResource[] getSelectedResources(boolean includeOverlapping) { if (includeOverlapping) return super.getSelectedResources(); else return getSelectedResources(); } protected IResource[] getModifiedResources(IResource[] resources, IProgressMonitor iProgressMonitor) throws SVNException { final List modified = new ArrayList(); for (int i = 0; i < resources.length; i++) { IResource resource = resources[i]; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); // get adds, deletes, updates and property updates. GetStatusCommand command = new GetStatusCommand(svnResource, true, false); command.run(iProgressMonitor); ISVNStatus[] statuses = command.getStatuses(); for (int j = 0; j < statuses.length; j++) { if (SVNStatusUtils.isReadyForRevert(statuses[j]) || !SVNStatusUtils.isManaged(statuses[j])) { IResource currentResource = SVNWorkspaceRoot.getResourceFor(resource, statuses[j]); if (currentResource != null) modified.add(currentResource); } } } return (IResource[]) modified.toArray(new IResource[modified.size()]); } /** * Prompts user to overwrite resources that are in the resources list and are modified * @param resources Resources to prompt for overwrite if modified * @return Array of resources that the user did want overwriting * @throws SVNException Exception getting state of SVN resources * @throws InterruptedException Prompt dialog was shut down abnormally */ protected IResource[] checkOverwriteOfDirtyResources(IResource[] resources) throws SVNException, InterruptedException { IResource[] dirtyResources = getModifiedResources(resources, null); if (dirtyResources == null || dirtyResources.length == 0) { return resources; } PromptingDialog dialog = new PromptingDialog(getShell(), dirtyResources, getPromptCondition(dirtyResources), Policy.bind("ReplaceWithAction.confirmOverwrite"));//$NON-NLS-1$ return dialog.promptForMultiple(); } /** * This is a helper for the SVN UI automated tests. It allows the tests to ignore prompting dialogs. * @param resources */ protected IPromptCondition getPromptCondition(IResource[] resources) { return getOverwriteLocalChangesPrompt(resources); } public String getName() { return name; } public void setName(String name) { this.name = name; } protected void execute(IAction action) throws InvocationTargetException, InterruptedException { // TODO Auto-generated method stub } } 000077500000000000000000000000001203611042400360465ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/annotationsAnnotateBlock.java000066400000000000000000000051411203611042400414360ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/annotations/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.annotations; import java.util.Date; import org.tigris.subversion.subclipse.ui.Policy; /** * Model for a SVN Annotate block. */ public class AnnotateBlock { private long revision = -1; private String user = ""; //$NON-NLS-1$ private int startLine = 0; private int endLine = 0; private Date date; public AnnotateBlock(long revision, String user, Date date, int startLine, int endLine) { this.revision = revision; this.user = user; this.date = date; this.startLine = startLine; this.endLine = endLine; } /** * @return int the last source line of the receiver */ public int getEndLine() { return endLine; } /** * @param line */ public void setEndLine(int line) { endLine = line; } /** * @return the revision the receiver occured in. */ public long getRevision() { return revision; } /** * @return the first source line number of the receiver */ public int getStartLine() { return startLine; } /** * Used by the default LabelProvider to display objects in a List View */ public String toString() { int delta = endLine - startLine + 1; String line = Policy.bind("SVNAnnotateBlock.lines"); //$NON-NLS-1$ if (delta == 1) { line = Policy.bind("SVNAnnotateBlock.line"); //$NON-NLS-1$ } return Policy.bind("SVNAnnotateBlock.userRevision", new Object[] { //$NON-NLS-1$ user, new Long(revision), String.valueOf(delta), line }); } /** * Answer true if the receiver contains the given line number, false otherwse. * @param i a line number * @return true if receiver contains a line number. */ public boolean contains(int i) { return (i >= startLine && i <= endLine); } /** * @return Returns the date. */ public Date getDate() { return this.date; } /** * @param date The date to set. */ public void setDate(Date date) { this.date = date; } /** * @return Returns the user. */ public String getUser() { return this.user; } /** * @param user The user to set. */ public void setUser(String user) { this.user = user; } } AnnotateBlocks.java000066400000000000000000000031561203611042400416250ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/annotations/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.annotations; import java.util.LinkedList; import java.util.List; import org.tigris.subversion.svnclientadapter.ISVNAnnotations; public class AnnotateBlocks { private List blocks = new LinkedList(); public AnnotateBlocks(ISVNAnnotations svnAnnotations) { for (int i = 0; svnAnnotations.getLine(i) != null;i++) { AnnotateBlock block = new AnnotateBlock( svnAnnotations.getRevision(i), svnAnnotations.getAuthor(i), svnAnnotations.getChanged(i), i,i); add(block); } } /** * Add an annotate block merging this block with the * previous block if it is part of the same change. * @param aBlock */ private void add(AnnotateBlock aBlock) { int size = blocks.size(); if (size == 0) { blocks.add(aBlock); } else { AnnotateBlock lastBlock = (AnnotateBlock) blocks.get(size - 1); if (lastBlock.getRevision() == aBlock.getRevision()) { lastBlock.setEndLine(aBlock.getStartLine()); } else { blocks.add(aBlock); } } } public List getAnnotateBlocks() { return blocks; } } AnnotateView.java000066400000000000000000000307321203611042400413220ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/annotations/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.annotations; import java.io.IOException; import java.io.InputStream; import java.util.Collection; import java.util.Iterator; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.text.BadLocationException; import org.eclipse.jface.text.IDocument; import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.IPostSelectionProvider; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.ListViewer; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.team.ui.history.IHistoryView; import org.eclipse.ui.IEditorDescriptor; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorRegistry; import org.eclipse.ui.IPartListener; import org.eclipse.ui.IReusableEditor; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin; import org.eclipse.ui.internal.registry.EditorDescriptor; import org.eclipse.ui.part.ViewPart; import org.eclipse.ui.texteditor.IDocumentProvider; import org.eclipse.ui.texteditor.ITextEditor; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.history.SVNHistoryPage; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * A view showing the results of the SVN Annotate Command. A linked * combination of a View of annotations, a source editor and the * Resource History View */ public class AnnotateView extends ViewPart implements ISelectionChangedListener { ITextEditor editor; IHistoryView historyView; IWorkbenchPage page; ListViewer viewer; IDocument document; Collection svnAnnotateBlocks; ISVNRemoteFile svnFile; InputStream contents; IStructuredSelection previousListSelection; ITextSelection previousTextSelection; boolean lastSelectionWasText = false; public static final String VIEW_ID = "org.tigris.subversion.subclipse.ui.annotations.AnnotateView"; //$NON-NLS-1$ private Composite top; private IPartListener partListener = new IPartListener() { public void partActivated(IWorkbenchPart part) { } public void partBroughtToTop(IWorkbenchPart part) { } public void partClosed(IWorkbenchPart part) { if (editor != null && part == editor) { disconnect(); } } public void partDeactivated(IWorkbenchPart part) { } public void partOpened(IWorkbenchPart part) { } }; public AnnotateView() { super(); } public void createPartControl(Composite parent) { this.top = parent; // Create default contents Label label = new Label(top, SWT.WRAP); label.setText(Policy.bind("SVNAnnotateView.viewInstructions")); //$NON-NLS-1$ label.setLayoutData(new GridData(GridData.FILL_BOTH)); top.layout(); } /** * Show the annotation view. * @param svnFile * @param svnAnnotateBlocks * @param contents * @throws PartInitException */ public void showAnnotations(ISVNRemoteFile svnFile, Collection svnAnnotateBlocks, InputStream contents) throws PartInitException { showAnnotations(svnFile, svnAnnotateBlocks, contents, true); } /** * Show the annotation view. * @param svnFile * @param svnAnnotateBlocks * @param contents * @param useHistoryView * @throws PartInitException */ public void showAnnotations(ISVNRemoteFile svnFile, Collection svnAnnotateBlocks, InputStream contents, boolean useHistoryView) throws PartInitException { // Disconnect from old annotation editor disconnect(); // Remove old viewer Control[] oldChildren = top.getChildren(); if (oldChildren != null) { for (int i = 0; i < oldChildren.length; i++) { oldChildren[i].dispose(); } } viewer = new ListViewer(top, SWT.SINGLE | SWT.H_SCROLL | SWT.V_SCROLL); viewer.setContentProvider(new ArrayContentProvider()); viewer.setLabelProvider(new LabelProvider()); viewer.addSelectionChangedListener(this); viewer.getControl().setLayoutData(new GridData(GridData.FILL_BOTH)); PlatformUI.getWorkbench().getHelpSystem().setHelp(viewer.getControl(), IHelpContextIds.ANNOTATIONS_VIEW); top.layout(); this.svnFile = svnFile; this.contents = contents; this.svnAnnotateBlocks = svnAnnotateBlocks; page = SVNUIPlugin.getActivePage(); viewer.setInput(svnAnnotateBlocks); editor = (ITextEditor) openEditor(); IDocumentProvider provider = editor.getDocumentProvider(); document = provider.getDocument(editor.getEditorInput()); setPartName(Policy.bind("SVNAnnotateView.showFileAnnotation", new Object[] {svnFile.getName()})); //$NON-NLS-1$ setTitleToolTip(svnFile.getName()); if (!useHistoryView) { return; } // Get hook to the HistoryView historyView = (IHistoryView)page.showView(ISVNUIConstants.HISTORY_VIEW_ID); if (historyView != null) { historyView.showHistoryFor(svnFile); } } protected void disconnect() { if(editor != null) { if (editor.getSelectionProvider() instanceof IPostSelectionProvider) { ((IPostSelectionProvider) editor.getSelectionProvider()).removePostSelectionChangedListener(this); } editor.getSite().getPage().removePartListener(partListener); editor = null; document = null; } } /** * Makes the view visible in the active perspective. If there * isn't a view registered null is returned. * Otherwise the opened view part is returned. */ public static AnnotateView openInActivePerspective() throws PartInitException { return (AnnotateView) SVNUIPlugin.getActivePage().showView(VIEW_ID); } /** * Selection changed in either the Annotate List View or the * Source editor. */ public void selectionChanged(SelectionChangedEvent event) { if (event.getSelection() instanceof IStructuredSelection) { listSelectionChanged((IStructuredSelection) event.getSelection()); } else if (event.getSelection() instanceof ITextSelection) { textSelectionChanged((ITextSelection) event.getSelection()); } } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#dispose() */ public void dispose() { disconnect(); } /** * A selection event in the Annotate Source Editor * @param event */ private void textSelectionChanged(ITextSelection selection) { // Track where the last selection event came from to avoid // a selection event loop. lastSelectionWasText = true; // Locate the annotate block containing the selected line number. AnnotateBlock match = null; for (Iterator iterator = svnAnnotateBlocks.iterator(); iterator.hasNext();) { AnnotateBlock block = (AnnotateBlock) iterator.next(); if (block.contains(selection.getStartLine())) { match = block; break; } } // Select the annotate block in the List View. if (match == null) { return; } StructuredSelection listSelection = new StructuredSelection(match); viewer.setSelection(listSelection, true); } /** * A selection event in the Annotate List View * @param selection */ private void listSelectionChanged(IStructuredSelection selection) { // If the editor was closed, reopen it. if (editor == null || editor.getSelectionProvider() == null) { try { contents.reset(); showAnnotations(svnFile, svnAnnotateBlocks, contents, false); } catch (PartInitException e) { return; } catch (IOException e) { return; } } ISelectionProvider selectionProvider = editor.getSelectionProvider(); if (selectionProvider == null) { // Failed to open the editor but what else can we do. return; } ITextSelection textSelection = (ITextSelection) selectionProvider.getSelection(); AnnotateBlock listSelection = null; try { listSelection = (AnnotateBlock) selection.getFirstElement(); } catch (ClassCastException cce) { return; } // IStructuredSelection#getFirstElement can return null if (listSelection == null) { return; } /** * Ignore event if the current text selection is already equal to the corresponding * list selection. Nothing to do. This prevents infinite event looping. * * Extra check to handle single line deltas */ if (textSelection.getStartLine() == listSelection.getStartLine() && textSelection.getEndLine() == listSelection.getEndLine() && selection.equals(previousListSelection)) { return; } // If the last selection was a text selection then bale to prevent a selection loop. if (!lastSelectionWasText) { try { int start = document.getLineOffset(listSelection.getStartLine()); int end = document.getLineOffset(listSelection.getEndLine() + 1); editor.selectAndReveal(start, end - start); if (editor != null && !page.isPartVisible(editor)) { page.activate(editor); } } catch (BadLocationException e) { // Ignore - nothing we can do. } } // Select the revision in the history view. if(historyView != null) { SVNHistoryPage page = (SVNHistoryPage)historyView.getHistoryPage(); page.selectRevision(new SVNRevision.Number(listSelection.getRevision())); } lastSelectionWasText = false; } /** * Try and open the correct registered editor type for the file. * @throws PartInitException Unable to create view */ private IEditorPart openEditor() throws PartInitException { // Open the editor IEditorPart part; IEditorRegistry registry; registry = SVNUIPlugin.getPlugin().getWorkbench().getEditorRegistry(); IEditorDescriptor descriptor = registry.getDefaultEditor(svnFile.getName()); // Determine if the registered editor is an ITextEditor. // There is currently no support from UI to determine this information. This // problem has been logged in: https://bugs.eclipse.org/bugs/show_bug.cgi?id=47362 // For now, use internal classes. String id; if (descriptor == null || !(descriptor instanceof EditorDescriptor) || !(((EditorDescriptor)descriptor).isInternal())) { id = IDEWorkbenchPlugin.DEFAULT_TEXT_EDITOR_ID; //$NON-NLS-1$ } else { try { Object obj = IDEWorkbenchPlugin.createExtension(((EditorDescriptor) descriptor).getConfigurationElement(), "class"); //$NON-NLS-1$ if (obj instanceof ITextEditor) { id = descriptor.getId(); } else { id = IDEWorkbenchPlugin.DEFAULT_TEXT_EDITOR_ID; } } catch (CoreException e) { id = IDEWorkbenchPlugin.DEFAULT_TEXT_EDITOR_ID; } } // Either reuse an existing editor or open a new editor of the correct type. if (editor != null && editor instanceof IReusableEditor && page.isPartVisible(editor) && editor.getSite().getId().equals(id)) { // We can reuse the editor ((IReusableEditor) editor).setInput(new RemoteAnnotationEditorInput(svnFile, contents)); part = editor; } else { // We can not reuse the editor so close the existing one and open a new one. if (editor != null) { page.closeEditor(editor, false); editor = null; } part = page.openEditor(new RemoteAnnotationEditorInput(svnFile, contents), id); } // Hook Editor post selection listener. ITextEditor editor = (ITextEditor) part; if (editor.getSelectionProvider() instanceof IPostSelectionProvider) { ((IPostSelectionProvider) editor.getSelectionProvider()).addPostSelectionChangedListener(this); } part.getSite().getPage().addPartListener(partListener); return part; } // This method implemented to be an ISelectionChangeListener but we // don't really care when the List or Editor get focus. public void setFocus() { return; } } RemoteAnnotationEditorInput.java000066400000000000000000000030401203611042400443630ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/annotations/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.annotations; import java.io.InputStream; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.team.core.TeamException; import org.eclipse.ui.IStorageEditorInput; import org.eclipse.ui.model.IWorkbenchAdapter; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.ui.editor.RemoteFileEditorInput; /** * An editor input for a cvs annotation response */ public class RemoteAnnotationEditorInput extends RemoteFileEditorInput implements IWorkbenchAdapter, IStorageEditorInput { InputStream contents; public RemoteAnnotationEditorInput(ISVNRemoteFile file, InputStream contents) { super(file,new NullProgressMonitor()); this.contents = contents; } protected void initializeStorage(ISVNRemoteFile file, IProgressMonitor monitor) throws TeamException { if (contents != null) { storage = new RemoteAnnotationStorage(file, contents); } } } RemoteAnnotationStorage.java000066400000000000000000000065731203611042400435370ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/annotations/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.annotations; import java.io.IOException; import java.io.InputStream; import org.eclipse.core.resources.IEncodedStorage; import org.eclipse.core.resources.IResourceStatus; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.PlatformObject; import org.eclipse.core.runtime.Status; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.SVNUrl; public class RemoteAnnotationStorage extends PlatformObject implements IEncodedStorage { private InputStream contents; private ISVNRemoteFile file; public RemoteAnnotationStorage(ISVNRemoteFile file, InputStream contents) { this.file = file; this.contents = contents; } /* * (non-Javadoc) * @see org.eclipse.core.resources.IStorage#getContents() */ public InputStream getContents() throws CoreException { try { // Contents are a ByteArrayInputStream which can be reset to the beginning contents.reset(); } catch (IOException e) { SVNUIPlugin.log(SVNException.wrapException(e)); } return contents; } /* * (non-Javadoc) * @see org.eclipse.core.resources.IEncodedStorage#getCharset() */ public String getCharset() throws CoreException { InputStream contents = getContents(); try { String charSet = SVNUIPlugin.getCharset(getName(), contents); return charSet; } catch (IOException e) { throw new SVNException(new Status(IStatus.ERROR, SVNUIPlugin.ID, IResourceStatus.FAILED_DESCRIBING_CONTENTS, Policy.bind("RemoteAnnotationStorage.1", getFullPath().toString()), e)); //$NON-NLS-1$ } finally { try { contents.close(); } catch (IOException e1) { // Ignore } } } /* * (non-Javadoc) * @see org.eclipse.core.resources.IStorage#getFullPath() */ public IPath getFullPath() { ISVNRepositoryLocation location = file.getRepository(); SVNUrl repositoryUrl = location.getRepositoryRoot(); String[] segments = repositoryUrl.getPathSegments(); IPath path = new Path(null, "/"); for (int i = 0; i < segments.length; i++) { path = path.append(segments[i]); } path = path.setDevice(repositoryUrl.getHost() + IPath.DEVICE_SEPARATOR); path = path.append(file.getRepositoryRelativePath()); return path; } /* * (non-Javadoc) * @see org.eclipse.core.resources.IStorage#getName() */ public String getName() { return file.getName(); } /* * (non-Javadoc) * @see org.eclipse.core.resources.IStorage#isReadOnly() */ public boolean isReadOnly() { return true; } } 000077500000000000000000000000001203611042400365305ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/authenticationKeyFileHistoryContentHandler.java000066400000000000000000000043201203611042400451350ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/authentication/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.authentication; import java.util.Vector; import org.xml.sax.Attributes; import org.xml.sax.helpers.DefaultHandler; class KeyFileHistoryContentHandler extends DefaultHandler { private StringBuffer buffer; private Vector keyFiles; public KeyFileHistoryContentHandler() { } public void characters(char[] chars, int startIndex, int length) { if (buffer == null) return; buffer.append(chars, startIndex, length); } public void startElement( String namespaceURI, String localName, String qName, Attributes atts) { String elementName = getElementName(namespaceURI, localName, qName); if (elementName.equals(KeyFilesManager.ELEMENT_KEYFILE)) { buffer = new StringBuffer(); return; } if (elementName.equals(KeyFilesManager.ELEMENT_KEYFILE_HISTORY)) { keyFiles = new Vector(KeyFilesManager.MAX_FILES); return; } } public void endElement(String namespaceURI, String localName, String qName) { String elementName = getElementName(namespaceURI, localName, qName); if (elementName.equals(KeyFilesManager.ELEMENT_KEYFILE)) { keyFiles.add(buffer.toString()); buffer = null; return; } if (elementName.equals(KeyFilesManager.ELEMENT_KEYFILE_HISTORY)) { KeyFilesManager.previousKeyFiles = new String[keyFiles.size()]; keyFiles.copyInto(KeyFilesManager.previousKeyFiles); return; } } private String getElementName(String namespaceURI, String localName, String qName) { if (localName != null && localName.length() > 0) { return localName; } else { return qName; } } } KeyFilesManager.java000066400000000000000000000122221203611042400424000ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/authentication/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.authentication; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Status; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.internal.XMLWriter; import org.xml.sax.InputSource; import org.xml.sax.SAXException; public class KeyFilesManager { // The previously remembered key file static String[] previousKeyFiles = new String[0]; static final int MAX_FILES = 5; private static final String KEYFILE_HIST_FILE = "keyFileHistory.xml"; //$NON-NLS-1$ static final String ELEMENT_KEYFILE = "KeyFile"; //$NON-NLS-1$ static final String ELEMENT_KEYFILE_HISTORY = "KeyFiles"; //$NON-NLS-1$ public String[] getPreviousKeyFiles() { return previousKeyFiles; } public void addKeyFile(String keyFile) { // Only add the key file if the first entry isn't the same already if (previousKeyFiles.length > 0 && previousKeyFiles[0].equals(keyFile)) return; // Insert the key file as the first element String[] newKeyFiles = new String[Math.min(previousKeyFiles.length + 1, MAX_FILES)]; newKeyFiles[0] = keyFile; for (int i = 1; i < newKeyFiles.length; i++) { newKeyFiles[i] = previousKeyFiles[i-1]; } previousKeyFiles = newKeyFiles; } public void loadKeyFileHistory() { IPath pluginStateLocation = SVNUIPlugin.getPlugin().getStateLocation().append(KEYFILE_HIST_FILE); File file = pluginStateLocation.toFile(); if (!file.exists()) return; try { BufferedInputStream is = new BufferedInputStream(new FileInputStream(file)); try { SAXParserFactory factory = SAXParserFactory.newInstance(); try { SAXParser parser = factory.newSAXParser(); parser.parse(new InputSource(is), new KeyFileHistoryContentHandler()); } catch (SAXException ex) { throw new SVNException(Policy.bind("RepositoryManager.parsingProblem", KEYFILE_HIST_FILE), ex); //$NON-NLS-1$ } catch (ParserConfigurationException e) { throw new SVNException(Policy.bind("RepositoryManager.parsingProblem", KEYFILE_HIST_FILE), e); //$NON-NLS-1$ } } finally { is.close(); } } catch (IOException e) { SVNUIPlugin.log(new Status(Status.ERROR, SVNUIPlugin.ID, TeamException.UNABLE, Policy.bind("RepositoryManager.ioException"), e)); //$NON-NLS-1$ } catch (TeamException e) { SVNUIPlugin.log(e.getStatus()); } } public void saveKeyFilesHistory() throws TeamException { IPath pluginStateLocation = SVNUIPlugin.getPlugin().getStateLocation(); File tempFile = pluginStateLocation.append(KEYFILE_HIST_FILE + ".tmp").toFile(); //$NON-NLS-1$ File histFile = pluginStateLocation.append(KEYFILE_HIST_FILE).toFile(); try { XMLWriter writer = new XMLWriter(new BufferedOutputStream(new FileOutputStream(tempFile))); try { writer.startTag(ELEMENT_KEYFILE_HISTORY, null, false); for (int i=0; i 0) || (passwordText.getText().trim().length() > 0)); } }; userText.addModifyListener(modifyListener); passwordText.addModifyListener(modifyListener); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(rtnGroup, IHelpContextIds.PASSWORD_PROMPT_DIALOG); if (username != null) passwordText.setFocus(); else userText.setFocus(); return rtnGroup; } public Button createButton(Composite parent, int id, String label, boolean isDefault) { Button button = super.createButton(parent, id, label, isDefault); if (id == IDialogConstants.OK_ID) { okButton = button; okButton.setEnabled(false); } return button; } protected void okPressed() { username = userText.getText().trim(); password = passwordText.getText().trim(); if (maySave) save = saveButton.getSelection(); super.okPressed(); } public boolean isSave() { return save; } public String getPassword() { return password; } public String getUsername() { return username; } } QuestionDialog.java000066400000000000000000000130261203611042400423240ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/authentication/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.authentication; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.TrayDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class QuestionDialog extends TrayDialog { private String realm; private String question; private boolean showAnswer; private boolean maySave; private Text answerText; private String answer; private boolean save; private Button saveButton; private boolean isPassphrasePrompt; private boolean isFilePrompt; private IDialogSettings settings = SVNUIPlugin.getPlugin().getDialogSettings(); private static final int WIDTH = 300; public QuestionDialog(Shell parentShell, String realm, String question, boolean showAnswer, boolean maySave) { super(parentShell); this.realm = realm; this.question = question; this.showAnswer = showAnswer; this.maySave = maySave; if (question != null) { isPassphrasePrompt = question.indexOf("certificate passphrase") != -1; //$NON-NLS-1$ if (!isPassphrasePrompt) { isFilePrompt = question.indexOf("certificate file") != -1; //$NON-NLS-1$ } } } protected Control createDialogArea(Composite parent) { Composite rtnGroup = (Composite)super.createDialogArea(parent); getShell().setText(Policy.bind("SVNPromptUserPassword.authentication")); //$NON-NLS-1$ GridLayout layout = new GridLayout(); layout.numColumns = 1; rtnGroup.setLayout(layout); rtnGroup.setLayoutData( new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); Group realmGroup = new Group(rtnGroup, SWT.NONE); if (isPassphrasePrompt) { realmGroup.setText(Policy.bind("QuestionDialog.clientCertificateFile")); //$NON-NLS-1$ } else { realmGroup.setText(Policy.bind("PasswordPromptDialog.repository")); //$NON-NLS-1$ } GridLayout realmLayout = new GridLayout(); realmLayout.numColumns = 1; realmGroup.setLayout(realmLayout); realmGroup.setLayoutData( new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); Text realmText = new Text(realmGroup, SWT.BORDER); GridData gd = new GridData(); gd.widthHint = WIDTH; realmText.setLayoutData(gd); realmText.setEditable(false); realmText.setText(realm); Group questionGroup = new Group(rtnGroup, SWT.NONE); questionGroup.setText(question); GridLayout questionLayout = new GridLayout(); questionLayout.numColumns = 2; questionGroup.setLayout(questionLayout); questionGroup.setLayoutData( new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); answerText = new Text(questionGroup, SWT.BORDER); gd = new GridData(); gd.widthHint = WIDTH; answerText.setLayoutData(gd); if (!showAnswer) answerText.setEchoChar('*'); //$NON-NLS-1$ if (isFilePrompt) { String previousCertificateFile = null; try { previousCertificateFile = settings.get("QuestionDialog.certificateFile." + realm); if (previousCertificateFile != null) { answerText.setText(previousCertificateFile); } } catch (Exception e) {} } if (isFilePrompt) { Button browseButton = new Button(questionGroup, SWT.PUSH); browseButton.setText(Policy.bind("browse")); //$NON-NLS-1$ browseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { FileDialog fileDialog = new FileDialog(getShell(), SWT.OPEN); fileDialog.setText("Select Client Certificate File"); String returnFile = fileDialog.open(); if (returnFile != null) answerText.setText(returnFile); } }); } if (maySave) { saveButton = new Button(rtnGroup, SWT.CHECK); saveButton.setText(Policy.bind("QuestionDialog.save")); //$NON-NLS-1$ gd = new GridData(); gd.horizontalSpan = 2; saveButton.setLayoutData(gd); } // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(rtnGroup, IHelpContextIds.QUESTION_DIALOG); answerText.setFocus(); return rtnGroup; } protected void okPressed() { answer = answerText.getText().trim(); if (maySave) save = saveButton.getSelection(); if (isFilePrompt) { //$NON-NLS-1$ settings.put("QuestionDialog.certificateFile." + realm, answer); //$NON-NLS-1$ } super.okPressed(); } public String getAnswer() { return answer; } public boolean isSave() { return save; } } SSHPromptDialog.java000066400000000000000000000241001203611042400423470ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/authentication/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.authentication; import java.util.Properties; import org.eclipse.jface.dialogs.TrayDialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class SSHPromptDialog extends TrayDialog { private String realm; private String username; private String password; private int sshPort; private String keyFile; private String passphrase; private boolean save; private boolean maySave; private Text userText; private Text passwordText; private Combo keyFileCombo; private Text passphraseText; private Button passwordButton; private Button keyFileButton; private Button browseButton; private Text sshPortText; private boolean portError; private Button saveButton; private Button okButton; private String[] keyFiles = new String[0]; private static int WIDTH = 300; public SSHPromptDialog(Shell parentShell, String realm, String username, int sshPort, boolean maySave) { super(parentShell); this.realm = realm; this.username = username; this.sshPort = sshPort; this.maySave = maySave; keyFiles = SVNUIPlugin.getPlugin().getRepositoryManager().getKeyFilesManager().getPreviousKeyFiles(); } protected Control createDialogArea(Composite parent) { Composite rtnGroup = (Composite)super.createDialogArea(parent); getShell().setText(Policy.bind("SSHPromptDialog.title")); //$NON-NLS-1$ GridLayout layout = new GridLayout(); layout.numColumns = 2; rtnGroup.setLayout(layout); rtnGroup.setLayoutData( new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); Label realmLabel = new Label(rtnGroup, SWT.NONE); realmLabel.setText(Policy.bind("PasswordPromptDialog.repository")); //$NON-NLS-1$ Text realmText = new Text(rtnGroup, SWT.BORDER); GridData gd = new GridData(); gd.widthHint = WIDTH; realmText.setLayoutData(gd); realmText.setEditable(false); realmText.setText(realm); Label userLabel = new Label(rtnGroup, SWT.NONE); userLabel.setText(Policy.bind("PasswordPromptDialog.username")); //$NON-NLS-1$ userText = new Text(rtnGroup, SWT.BORDER); gd = new GridData(); gd.widthHint = WIDTH; userText.setLayoutData(gd); userText.setText(username == null? "": username); Group radioGroup = new Group(rtnGroup, SWT.NONE); radioGroup.setText(Policy.bind("SSHPromptDialog.authentication")); //$NON-NLS-1$ GridLayout radioLayout = new GridLayout(); radioLayout.numColumns = 1; radioGroup.setLayout(radioLayout); gd = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL); gd.horizontalSpan = 2; radioGroup.setLayoutData(gd); passwordButton = new Button(radioGroup, SWT.RADIO); passwordButton.setText(Policy.bind("SSHPromptDialog.passwordauth")); //$NON-NLS-1$ keyFileButton = new Button(radioGroup, SWT.RADIO); keyFileButton.setText(Policy.bind("SSHPromptDialog.keyauth")); //$NON-NLS-1$ passwordButton.setSelection(true); Label pwdLabel = new Label(rtnGroup, SWT.NONE); pwdLabel.setText(Policy.bind("PasswordPromptDialog.password")); //$NON-NLS-1$ passwordText = new Text(rtnGroup, SWT.BORDER); gd = new GridData(); gd.widthHint = WIDTH; passwordText.setLayoutData(gd); passwordText.setEchoChar('*'); Label keyFileLabel = new Label (rtnGroup, SWT.NONE); keyFileLabel.setText(Policy.bind("SSHPromptDialog.keyfile")); //$NON-NLS-1$ Composite keyFileGroup = new Composite(rtnGroup, SWT.NONE); GridLayout keyFileLayout = new GridLayout(); keyFileLayout.numColumns = 2; keyFileLayout.marginWidth = 0; keyFileLayout.marginHeight = 0; keyFileGroup.setLayout(keyFileLayout); gd = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL); keyFileGroup.setLayoutData(gd); keyFileCombo = new Combo(keyFileGroup, SWT.BORDER); gd = new GridData(); gd.widthHint = WIDTH; keyFileCombo.setLayoutData(gd); keyFileCombo.setEnabled(false); if (keyFiles != null && keyFiles.length > 0) { for (int i = 0; i < keyFiles.length; i++) keyFileCombo.add(keyFiles[i]); keyFileCombo.setText(keyFiles[0]); } browseButton = new Button(keyFileGroup, SWT.PUSH); browseButton.setText(Policy.bind("SSHPromptDialog.browse")); //$NON-NLS-1$ browseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Properties properties = System.getProperties(); String home = (String)properties.get("user.home"); //$NON-NLS-1$ FileDialog fileDialog = new FileDialog(getShell(), SWT.OPEN); if (home != null) fileDialog.setFilterPath(home); String returnFile = fileDialog.open(); if (returnFile != null) keyFileCombo.setText(returnFile); } }); browseButton.setEnabled(false); Label passphraseLabel = new Label(rtnGroup, SWT.NONE); passphraseLabel.setText(Policy.bind("SSHPromptDialog.passphrase")); //$NON-NLS-1$ passphraseText = new Text(rtnGroup, SWT.BORDER); gd = new GridData(); gd.widthHint = WIDTH; passphraseText.setEchoChar('*'); passphraseText.setLayoutData(gd); passphraseText.setEnabled(false); Label portLabel = new Label(rtnGroup, SWT.NONE); portLabel.setText(Policy.bind("SSHPromptDialog.port")); //$NON-NLS-1$ sshPortText = new Text(rtnGroup, SWT.BORDER); gd = new GridData(); gd.widthHint = 40; sshPortText.setLayoutData(gd); sshPortText.setTextLimit(5); sshPortText.setText(Integer.toString(sshPort)); if (maySave) { saveButton = new Button(rtnGroup, SWT.CHECK); saveButton.setText(Policy.bind("SSHPromptDialog.save")); //$NON-NLS-1$ gd = new GridData(); gd.horizontalSpan = 2; saveButton.setLayoutData(gd); } ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent me) { okButton.setEnabled(canFinish()); } }; userText.addModifyListener(modifyListener); passwordText.addModifyListener(modifyListener); keyFileCombo.addModifyListener(modifyListener); SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (passwordButton.getSelection()) { keyFileCombo.setEnabled(false); browseButton.setEnabled(false); passphraseText.setEnabled(false); passwordText.setEnabled(true); passwordText.setFocus(); } else { keyFileCombo.setEnabled(true); browseButton.setEnabled(true); passphraseText.setEnabled(true); passwordText.setEnabled(false); keyFileCombo.setFocus(); } okButton.setEnabled(canFinish()); } }; passwordButton.addSelectionListener(selectionListener); keyFileButton.addSelectionListener(selectionListener); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(rtnGroup, IHelpContextIds.SSH_PROMPT_DIALOG); if (username != null) passwordText.setFocus(); else userText.setFocus(); return rtnGroup; } private boolean canFinish() { if (userText.getText().trim().length() == 0) return false; if (passwordButton.getSelection()) return passwordText.getText().trim().length() > 0; else return keyFileCombo.getText().trim().length() > 0; } public Button createButton(Composite parent, int id, String label, boolean isDefault) { Button button = super.createButton(parent, id, label, isDefault); if (id == IDialogConstants.OK_ID) { okButton = button; okButton.setEnabled(false); } return button; } protected void okPressed() { portError = false; try { sshPort = Integer.parseInt(sshPortText.getText().trim()); } catch (Exception e) { portError = true; MessageDialog.openError(getShell(), Policy.bind("SSHPromptDialog.invalidPortTitle"), Policy.bind("SSHPromptDialog.invalidPortMessage")); //$NON-NLS-1$ //$NON-NLS-1$ } if (portError) return; username = userText.getText().trim(); password = passwordText.getText().trim(); if (passwordButton.getSelection()) { keyFile = null; passphrase = null; } else { keyFile = keyFileCombo.getText().trim(); passphrase = passphraseText.getText().trim(); } if (maySave) save = saveButton.getSelection(); if (keyFile != null && keyFile.length() > 0) SVNUIPlugin.getPlugin().getRepositoryManager().getKeyFilesManager().addKeyFile(keyFile); super.okPressed(); } public boolean isSave() { return save; } public String getPassword() { return password; } public String getUsername() { return username; } public int getSshPort() { return sshPort; } public String getKeyFile() { return keyFile; } public String getPassphrase() { return passphrase; } } SSLClientCertificate.java000066400000000000000000000246421203611042400433460ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/authentication/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.authentication; import java.security.Provider; import java.security.Security; import java.util.Properties; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.TrayDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.AbstractClientAdapter; public class SSLClientCertificate extends TrayDialog { private String realm; private String certificate; private String passphrase; private boolean save; private boolean maySave; private boolean msCapi; private Button mscapiButton; private Combo keyFileCombo; private Text passphraseText; private Text aliasText; private Button browseButton; private Button saveButton; private Button okButton; private Button aliasButton; private String alias; private String[] keyFiles = new String[0]; private static int WIDTH = 300; public SSLClientCertificate(Shell parentShell, String realm, boolean maySave) { super(parentShell); this.realm = realm; this.maySave = maySave; keyFiles = SVNUIPlugin.getPlugin().getRepositoryManager().getKeyFilesManager().getPreviousKeyFiles(); } protected Control createDialogArea(Composite parent) { Composite rtnGroup = (Composite)super.createDialogArea(parent); getShell().setText(Policy.bind("SSLPromptDialog.title")); //$NON-NLS-1$ GridLayout layout = new GridLayout(); layout.numColumns = 2; rtnGroup.setLayout(layout); rtnGroup.setLayoutData( new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); Label realmLabel = new Label(rtnGroup, SWT.NONE); realmLabel.setText(Policy.bind("PasswordPromptDialog.repository")); //$NON-NLS-1$ Text realmText = new Text(rtnGroup, SWT.BORDER); GridData gd = new GridData(); gd.widthHint = WIDTH; realmText.setLayoutData(gd); realmText.setEditable(false); realmText.setText(realm); boolean mscapiSupport = false; Provider pjacapi = Security.getProvider("CAPI"); //$NON-NLS-1$ Provider pmscapi = Security.getProvider("SunMSCAPI"); //$NON-NLS-1$ // Check that Java supports MSCAPI if (pmscapi != null) { try { ClassLoader.getSystemClassLoader().loadClass("sun.security.mscapi.NONEwithRSASignature"); } catch (Exception e1) { pmscapi = null; } } String svnClientText = ""; //$NON-NLS-1$ if (SVNProviderPlugin.getPlugin() != null && SVNProviderPlugin.getPlugin().getSVNClientManager() != null) { svnClientText = SVNProviderPlugin.getPlugin().getSVNClientManager().getSvnClientInterface(); } // ms capi is only suported for windows and for provider SunMSCAPI and JACAPI from keyon // further ms capi is only supported from svnkit as client! if (AbstractClientAdapter.isOsWindows() && (pjacapi != null || pmscapi != null) && "svnkit".equals(svnClientText) ) { //$NON-NLS-1$ mscapiSupport = true; mscapiButton = new Button(rtnGroup, SWT.CHECK); mscapiButton.setText(Policy.bind("SSLClientCertificate.0")); //$NON-NLS-1$ gd = new GridData(); gd.horizontalSpan = 2; mscapiButton.setLayoutData(gd); SelectionListener mscapiSelectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (mscapiButton.getSelection()) { keyFileCombo.setEnabled(false); browseButton.setEnabled(false); passphraseText.setEnabled(false); aliasButton.setEnabled(true); } else { keyFileCombo.setEnabled(true); browseButton.setEnabled(true); passphraseText.setEnabled(true); aliasButton.setEnabled(false); aliasText.setText(""); //$NON-NLS-1$ } } }; mscapiButton.addSelectionListener(mscapiSelectionListener); Label aliasLabel = new Label(rtnGroup, SWT.NONE); aliasLabel.setText(Policy.bind("SSLClientCertificate.1")); //$NON-NLS-1$ Composite ailiasSelectGroup = new Composite(rtnGroup, SWT.NONE); GridLayout aliasLayout = new GridLayout(); aliasLayout.numColumns = 2; aliasLayout.marginWidth = 0; aliasLayout.marginHeight = 0; ailiasSelectGroup.setLayout(aliasLayout); gd = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL); ailiasSelectGroup.setLayoutData(gd); aliasText = new Text(ailiasSelectGroup, SWT.BORDER); gd = new GridData(); gd.widthHint = WIDTH; aliasText.setLayoutData(gd); aliasText.setEnabled(false); aliasButton = new Button(ailiasSelectGroup, SWT.PUSH); aliasButton.setText(Policy.bind("SSLClientCertificate.2")); //$NON-NLS-1$ SelectionListener msCapiCertificateSelectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { SSLClientCertificatesMSCapi dialog = new SSLClientCertificatesMSCapi(SVNUIPlugin.getStandardDisplay().getActiveShell(), realm); if (dialog.open() == SSLClientCertificatesMSCapi.OK) { aliasText.setText(dialog.getAlias()); } } }; aliasButton.addSelectionListener(msCapiCertificateSelectionListener); aliasButton.setEnabled(false); } Label keyFileLabel = new Label (rtnGroup, SWT.NONE); keyFileLabel.setText(Policy.bind("SSLPromptDialog.certificate")); //$NON-NLS-1$ Composite keyFileGroup = new Composite(rtnGroup, SWT.NONE); GridLayout keyFileLayout = new GridLayout(); keyFileLayout.numColumns = 2; keyFileLayout.marginWidth = 0; keyFileLayout.marginHeight = 0; keyFileGroup.setLayout(keyFileLayout); gd = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL); keyFileGroup.setLayoutData(gd); keyFileCombo = new Combo(keyFileGroup, SWT.BORDER); gd = new GridData(); gd.widthHint = WIDTH; keyFileCombo.setLayoutData(gd); keyFileCombo.setEnabled(true); boolean msCapiPreselected = false; if (mscapiSupport) { if (keyFiles != null && keyFiles.length > 0) { if (keyFiles[0] != null && keyFiles[0].startsWith("MSCAPI")) { //$NON-NLS-1$ msCapiPreselected = true; keyFileCombo.setEnabled(false); aliasButton.setEnabled(true); mscapiButton.setSelection(true); if (keyFiles[0].split(";").length > 1) { //$NON-NLS-1$ aliasText.setText(keyFiles[0].split(";")[1]); //$NON-NLS-1$ } } boolean textset = false; for (int i = 0; i < keyFiles.length; i++) { if (keyFiles[i] != null && keyFiles[i].startsWith("MSCAPI")) { //$NON-NLS-1$ continue; } if (!textset) { keyFileCombo.setText(keyFiles[i]); textset = true; } keyFileCombo.add(keyFiles[i]); } } } else { /* origin */ if (keyFiles != null && keyFiles.length > 0) { for (int i = 0; i < keyFiles.length; i++) keyFileCombo.add(keyFiles[i]); keyFileCombo.setText(keyFiles[0]); } } browseButton = new Button(keyFileGroup, SWT.PUSH); browseButton.setText(Policy.bind("SSHPromptDialog.browse")); //$NON-NLS-1$ browseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { Properties properties = System.getProperties(); String home = (String)properties.get("user.home"); //$NON-NLS-1$ FileDialog fileDialog = new FileDialog(getShell(), SWT.OPEN); if (home != null) fileDialog.setFilterPath(home); String returnFile = fileDialog.open(); if (returnFile != null) keyFileCombo.setText(returnFile); } }); browseButton.setEnabled(!msCapiPreselected); Label passphraseLabel = new Label(rtnGroup, SWT.NONE); passphraseLabel.setText(Policy.bind("SSHPromptDialog.passphrase")); //$NON-NLS-1$ passphraseText = new Text(rtnGroup, SWT.BORDER); gd = new GridData(); gd.widthHint = WIDTH; passphraseText.setEchoChar('*'); passphraseText.setLayoutData(gd); passphraseText.setEnabled(!msCapiPreselected); if (maySave) { saveButton = new Button(rtnGroup, SWT.CHECK); saveButton.setText(Policy.bind("SSHPromptDialog.save")); //$NON-NLS-1$ gd = new GridData(); gd.horizontalSpan = 2; saveButton.setLayoutData(gd); } return rtnGroup; } public Button createButton(Composite parent, int id, String label, boolean isDefault) { Button button = super.createButton(parent, id, label, isDefault); if (id == IDialogConstants.OK_ID) { okButton = button; okButton.setEnabled(true); } return button; } protected void okPressed() { passphrase = passphraseText.getText().trim(); if (aliasText != null) { alias = aliasText.getText().trim(); } if (mscapiButton != null) { msCapi = mscapiButton.getSelection(); } if (msCapi) { certificate = "MSCAPI"+(alias != null && !"".equals(alias)?";"+alias:""); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ } else { certificate = keyFileCombo.getText().trim(); } if (certificate.length() > 0) SVNUIPlugin.getPlugin().getRepositoryManager().getKeyFilesManager().addKeyFile(certificate); if (maySave) save = saveButton.getSelection(); super.okPressed(); } public boolean isSave() { return save; } public String getKeyFile() { return certificate; } public String getPassphrase() { return passphrase; } public boolean isMSCapi() { return msCapi; } public String getAlias() { return alias; } } SSLClientCertificatesMSCapi.java000066400000000000000000000065571203611042400445730ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/authenticationpackage org.tigris.subversion.subclipse.ui.authentication; import java.security.KeyStore; import java.security.Provider; import java.security.Security; import java.security.cert.Certificate; import java.security.cert.X509Certificate; import java.util.ArrayList; import java.util.Enumeration; import java.util.List; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.dialogs.ListDialog; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.util.ListContentProvider; public class SSLClientCertificatesMSCapi extends ListDialog { protected String alias; /** * * @param parent * @param url : the url from which we want to get the root url */ public SSLClientCertificatesMSCapi(Shell parent, String realm) { super(parent); // List list = new ArrayList(); List list = new ArrayList(); Provider pmscapi = Security.getProvider("SunMSCAPI"); //$NON-NLS-1$ Provider pjacapi = Security.getProvider("CAPI"); //$NON-NLS-1$ try { KeyStore keyStore = null; //use JACAPI if (pmscapi != null) { keyStore = KeyStore.getInstance("Windows-MY",pmscapi); //$NON-NLS-1$ pmscapi.setProperty("Signature.SHA1withRSA","sun.security.mscapi.RSASignature$SHA1"); //$NON-NLS-1$ //$NON-NLS-2$ } else if (pjacapi != null) { keyStore = KeyStore.getInstance("CAPI"); //$NON-NLS-1$ } if (keyStore != null) { keyStore.load(null, null); //for (Enumeration aliasEnumeration = keyStore.aliases();aliasEnumeration.hasMoreElements();) { for (Enumeration aliasEnumeration = keyStore.aliases();aliasEnumeration.hasMoreElements();) { String alias = (String) aliasEnumeration.nextElement(); String issuer = ""; //$NON-NLS-1$ Certificate cert = keyStore.getCertificate(alias); if (cert instanceof X509Certificate) { issuer = ((X509Certificate) cert).getIssuerDN().getName(); } list.add(new String[]{alias,issuer}); //keyStore.getCertificate(alias) } } } catch (Exception e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } setTitle(Policy.bind("SSLClientCertificatesMSCapi.0")); setAddCancelButton(true); LabelProvider lp = new LabelProvider(){ public String getText(Object element) { if (element == null) { return ""; //$NON-NLS-1$ } else if (element instanceof String[] && ((String[]) element).length > 1) { return ((String[]) element)[0] + " | issued by: " + ((String[]) element)[1]; //$NON-NLS-1$ } else { return element.toString(); } } }; setLabelProvider(lp); setMessage(Policy.bind("SSLClientCertificatesMSCapi.1")); setContentProvider(new ListContentProvider()); setInput(list); } public String getAlias() { if (getResult() != null && getResult().length>0) { Object result = getResult()[0]; if (result instanceof String[]) { this.alias = ((String[]) result)[0]; } else { this.alias = (String) result; } } return alias; } } SVNPromptUserPassword.java000066400000000000000000000172131203611042400436310ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/authentication/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.authentication; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.ISVNPromptUserPassword; public class SVNPromptUserPassword implements ISVNPromptUserPassword { private String username; private String password; private boolean allowedSave; private String realm; private boolean maySave; private boolean rtnCode; private int trust; private String info; private boolean allowPermanently; private boolean yesNoAnswer; private String question; private boolean yesIsDefault; private String answer; private boolean showAnswer; private int sshPort; private String keyFile; private String passPhrase; private boolean useMSCapi; public SVNPromptUserPassword() { super(); } public boolean askYesNo(String realm, String askQuestion, boolean askYesIsDefault) { question = askQuestion; yesIsDefault = askYesIsDefault; SVNUIPlugin.getStandardDisplay().syncExec(new Runnable() { public void run() { int defaultButton = 0; if (!yesIsDefault) defaultButton = 1; MessageDialog dialog = new MessageDialog(Display.getCurrent().getActiveShell(), Policy.bind("SVNPromptUserPassword.authentication"), //$NON-NLS-1$ null, question, MessageDialog.QUESTION, new String[] {IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL}, defaultButton); yesNoAnswer = (dialog.open() == 0); } }); return yesNoAnswer; } public String getUsername() { return username; } public String getPassword() { return password; } public int askTrustSSLServer(String trustInfo, boolean trustAllowPermanently) { info = trustInfo; allowPermanently = trustAllowPermanently; SVNUIPlugin.getStandardDisplay().syncExec(new Runnable() { public void run() { TrustSSLServerDialog dialog = new TrustSSLServerDialog(Display.getCurrent().getActiveShell(), info, allowPermanently); switch (dialog.open()) { case TrustSSLServerDialog.REJECT: trust = ISVNPromptUserPassword.Reject; break; case TrustSSLServerDialog.TEMPORARY: trust = ISVNPromptUserPassword.AcceptTemporary; break; case TrustSSLServerDialog.PERMANENT: trust = ISVNPromptUserPassword.AcceptPermanently; break; default: trust = TrustSSLServerDialog.REJECT; } } }); return trust; } public boolean prompt(String promptRealm, String promptUsername, boolean promptMaySave) { rtnCode = false; username = promptUsername; realm = promptRealm; maySave = promptMaySave; SVNUIPlugin.getStandardDisplay().syncExec(new Runnable() { public void run() { PasswordPromptDialog dialog = new PasswordPromptDialog(SVNUIPlugin.getStandardDisplay().getActiveShell(), realm, username, maySave); if (dialog.open() == PasswordPromptDialog.OK) { username = dialog.getUsername(); password = dialog.getPassword(); allowedSave = dialog.isSave(); rtnCode = true; } } }); return rtnCode; } public boolean promptUser(String promptRealm, String promptUsername, boolean promptMaySave) { rtnCode = false; username = promptUsername; realm = promptRealm; maySave = promptMaySave; SVNUIPlugin.getStandardDisplay().syncExec(new Runnable() { public void run() { UserPromptDialog dialog = new UserPromptDialog(SVNUIPlugin.getStandardDisplay().getActiveShell(), realm, username, maySave); if (dialog.open() == UserPromptDialog.OK) { username = dialog.getUsername(); allowedSave = dialog.isSave(); rtnCode = true; } } }); return rtnCode; } public String askQuestion(String askRealm, String askQuestion, boolean askShowAnswer, boolean askMaySave) { answer = null; realm = askRealm; maySave = askMaySave; showAnswer = askShowAnswer; question = askQuestion; if (question.indexOf("certificate") > 0) maySave = false; SVNUIPlugin.getStandardDisplay().syncExec(new Runnable() { public void run() { QuestionDialog dialog = new QuestionDialog(Display.getCurrent().getActiveShell(), realm, question, showAnswer, maySave); if (dialog.open() == QuestionDialog.OK) { allowedSave = dialog.isSave(); answer = dialog.getAnswer(); } } }); return answer; } public boolean userAllowedSave() { return allowedSave; } public int getSSHPort() { return sshPort; } public String getSSHPrivateKeyPassphrase() { return passPhrase; } public String getSSHPrivateKeyPath() { return keyFile; } public boolean promptSSH(String promptRealm, String promptUsername, int promptPort, boolean promptMaySave) { rtnCode = false; username = promptUsername; realm = promptRealm; maySave = promptMaySave; sshPort = promptPort; SVNUIPlugin.getStandardDisplay().syncExec(new Runnable() { public void run() { SSHPromptDialog dialog = new SSHPromptDialog(SVNUIPlugin.getStandardDisplay().getActiveShell(), realm, username, sshPort, maySave); if (dialog.open() == PasswordPromptDialog.OK) { username = dialog.getUsername(); password = dialog.getPassword(); sshPort = dialog.getSshPort(); keyFile = dialog.getKeyFile(); passPhrase = dialog.getPassphrase(); allowedSave = dialog.isSave(); rtnCode = true; } } }); return rtnCode; } public String getSSLClientCertPassword() { return passPhrase; } public String getSSLClientCertPath() { return keyFile; } public boolean useMSCapi() { return useMSCapi; } public boolean promptSSL(String promptRealm, boolean promptMaySave) { rtnCode = false; realm = promptRealm; maySave = promptMaySave; SVNUIPlugin.getStandardDisplay().syncExec(new Runnable() { public void run() { SSLClientCertificate dialog = new SSLClientCertificate(SVNUIPlugin.getStandardDisplay().getActiveShell(), realm, maySave); if (dialog.open() == PasswordPromptDialog.OK) { keyFile = dialog.getKeyFile(); useMSCapi = dialog.isMSCapi(); passPhrase = dialog.getPassphrase(); allowedSave = dialog.isSave(); rtnCode = true; } } }); return rtnCode; } } TrustSSLServerDialog.java000066400000000000000000000054161203611042400434130ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/authentication/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.authentication; import org.eclipse.jface.dialogs.TrayDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; public class TrustSSLServerDialog extends TrayDialog { private String info; private boolean allowPermanently; public static final int REJECT = 1; public static final int TEMPORARY = 0; public static final int PERMANENT = 2; public TrustSSLServerDialog(Shell parentShell, String info, boolean allowPermanently) { super(parentShell); this.info = info; this.allowPermanently = allowPermanently; } protected Control createDialogArea(Composite parent) { Composite rtnGroup = (Composite)super.createDialogArea(parent); getShell().setText(Policy.bind("TrustSSLServerDialog.title")); //$NON-NLS-1$ GridLayout layout = new GridLayout(); layout.numColumns = 1; rtnGroup.setLayout(layout); rtnGroup.setLayoutData( new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); Text infoText = new Text(rtnGroup, SWT.BORDER | SWT.WRAP | SWT.V_SCROLL); GridData data = new GridData(); data.widthHint = 600; data.heightHint = 100; infoText.setLayoutData(data); infoText.setEditable(false); infoText.setText(info); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(rtnGroup, IHelpContextIds.TRUST_SSL_SERVER_DIALOG); return rtnGroup; } protected void createButtonsForButtonBar(Composite parent) { createButton(parent, REJECT, Policy.bind("TrustSSLServerDialog.reject"), false); //$NON-NLS-1$ createButton(parent, TEMPORARY, Policy.bind("TrustSSLServerDialog.temporary"), true); //$NON-NLS-1$ if (allowPermanently) createButton(parent, PERMANENT, Policy.bind("TrustSSLServerDialog.permanent"), false); //$NON-NLS-1$ } protected void buttonPressed(int buttonId) { setReturnCode(buttonId); close(); } } UserPromptDialog.java000066400000000000000000000072571203611042400426460ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/authentication/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.authentication; import org.eclipse.jface.dialogs.TrayDialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; public class UserPromptDialog extends TrayDialog { private String realm; private String username; private boolean save; private boolean maySave; private Text userText; private Button saveButton; private Button okButton; private static int WIDTH = 300; public UserPromptDialog(Shell parentShell, String realm, String username, boolean maySave) { super(parentShell); this.realm = realm; this.username = username; this.maySave = maySave; } protected Control createDialogArea(Composite parent) { Composite rtnGroup = (Composite)super.createDialogArea(parent); getShell().setText(Policy.bind("UserPromptDialog.title")); //$NON-NLS-1$ GridLayout layout = new GridLayout(); layout.numColumns = 2; rtnGroup.setLayout(layout); rtnGroup.setLayoutData( new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); Label realmLabel = new Label(rtnGroup, SWT.NONE); realmLabel.setText(Policy.bind("PasswordPromptDialog.repository")); //$NON-NLS-1$ Text realmText = new Text(rtnGroup, SWT.BORDER); GridData gd = new GridData(); gd.widthHint = WIDTH; realmText.setLayoutData(gd); realmText.setEditable(false); realmText.setText(realm); Label userLabel = new Label(rtnGroup, SWT.NONE); userLabel.setText(Policy.bind("UserPromptDialog.username")); //$NON-NLS-1$ userText = new Text(rtnGroup, SWT.BORDER); gd = new GridData(); gd.widthHint = WIDTH; userText.setLayoutData(gd); userText.setText(username == null? "": username); userText.selectAll(); if (maySave) { saveButton = new Button(rtnGroup, SWT.CHECK); saveButton.setText(Policy.bind("UserPromptDialog.save")); //$NON-NLS-1$ gd = new GridData(); gd.horizontalSpan = 2; saveButton.setLayoutData(gd); } // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(rtnGroup, IHelpContextIds.USER_PROMPT_DIALOG); userText.setFocus(); return rtnGroup; } public Button createButton(Composite parent, int id, String label, boolean isDefault) { Button button = super.createButton(parent, id, label, isDefault); if (id == IDialogConstants.OK_ID) { okButton = button; okButton.setEnabled(true); } return button; } protected void okPressed() { username = userText.getText().trim(); if (maySave) save = saveButton.getSelection(); super.okPressed(); } public boolean isSave() { return save; } public String getUsername() { return username; } } 000077500000000000000000000000001203611042400353365ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/commentsCommentHistoryContentHandler.java000066400000000000000000000054761203611042400440320ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comments/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.comments; import java.util.Vector; import org.xml.sax.Attributes; import org.xml.sax.helpers.DefaultHandler; /** * Class used to read comment history using SAX */ class CommentHistoryContentHandler extends DefaultHandler { private StringBuffer buffer; private Vector comments; public CommentHistoryContentHandler() { } /** * @see ContentHandler#characters(char[], int, int) */ public void characters(char[] chars, int startIndex, int length) { if (buffer == null) return; buffer.append(chars, startIndex, length); } /** * @see ContentHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes) */ public void startElement( String namespaceURI, String localName, String qName, Attributes atts) { String elementName = getElementName(namespaceURI, localName, qName); if (elementName.equals(CommentsManager.ELEMENT_COMMIT_COMMENT)) { buffer = new StringBuffer(); return; } if (elementName.equals(CommentsManager.ELEMENT_COMMIT_HISTORY)) { comments = new Vector(CommentsManager.MAX_COMMENTS); return; } } /** * @see org.xml.sax.ContentHandler#endElement(java.lang.String, java.lang.String, java.lang.String) */ public void endElement(String namespaceURI, String localName, String qName) { String elementName = getElementName(namespaceURI, localName, qName); if (elementName.equals(CommentsManager.ELEMENT_COMMIT_COMMENT)) { comments.add(buffer.toString()); buffer = null; return; } if (elementName.equals(CommentsManager.ELEMENT_COMMIT_HISTORY)) { CommentsManager.previousComments = new String[comments.size()]; comments.copyInto(CommentsManager.previousComments); return; } } /* * Couldn't figure out from the SAX API exactly when localName vs. qName is used. * However, the XML for project sets doesn't use namespaces so either of the two names * is fine. Therefore, use whichever one is provided. */ private String getElementName(String namespaceURI, String localName, String qName) { if (localName != null && localName.length() > 0) { return localName; } else { return qName; } } } CommentTemplateEditDialog.java000066400000000000000000000200011203611042400432160ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comments/******************************************************************************* * Copyright (c) 2000, 2005 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.tigris.subversion.subclipse.ui.comments; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IInputValidator; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; /** * A simple input dialog for soliciting an input string from the user. *

* This concrete dialog class can be instantiated as is, or further subclassed as * required. *

*/ public class CommentTemplateEditDialog extends Dialog { /** * The title of the dialog. */ private String title; /** * The message to display, or null if none. */ private String message; /** * The input value; the empty string by default. */ private String value = "";//$NON-NLS-1$ /** * The input validator, or null if none. */ private IInputValidator validator; /** * Ok button widget. */ private Button okButton; /** * Input text widget. */ private Text text; /** * Error message label widget. */ private Text errorMessageText; /** * Creates an input dialog with OK and Cancel buttons. Note that the dialog * will have no visual representation (no widgets) until it is told to open. *

* Note that the open method blocks for input dialogs. *

* * @param parentShell * the parent shell, or null to create a top-level * shell * @param dialogTitle * the dialog title, or null if none * @param dialogMessage * the dialog message, or null if none * @param initialValue * the initial input value, or null if none * (equivalent to the empty string) * @param validator * an input validator, or null if none */ public CommentTemplateEditDialog(Shell parentShell, String dialogTitle, String dialogMessage, String initialValue, IInputValidator validator) { super(parentShell); this.title = dialogTitle; message = dialogMessage; if (initialValue == null) value = "";//$NON-NLS-1$ else value = initialValue; this.validator = validator; } /* * (non-Javadoc) Method declared on Dialog. */ protected void buttonPressed(int buttonId) { if (buttonId == IDialogConstants.OK_ID) { value = text.getText(); } else { value = null; } super.buttonPressed(buttonId); } /* * (non-Javadoc) * * @see org.eclipse.jface.window.Window#configureShell(org.eclipse.swt.widgets.Shell) */ protected void configureShell(Shell shell) { super.configureShell(shell); if (title != null) shell.setText(title); } /* * (non-Javadoc) * * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite) */ protected void createButtonsForButtonBar(Composite parent) { // create OK and Cancel buttons by default okButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); //do this here because setting the text will set enablement on the ok // button text.setFocus(); if (value != null) { text.setText(value); text.selectAll(); } } /* * (non-Javadoc) Method declared on Dialog. */ protected Control createDialogArea(Composite parent) { // create composite Composite composite = (Composite) super.createDialogArea(parent); // create message if (message != null) { Label label = new Label(composite, SWT.WRAP); label.setText(message); GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER); data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH); label.setLayoutData(data); label.setFont(parent.getFont()); } text = new Text(composite, SWT.MULTI | SWT.BORDER); GridData gd = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL); gd.heightHint = convertHeightInCharsToPixels(5); text.setLayoutData(gd); text.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { validateInput(); } }); errorMessageText = new Text(composite, SWT.READ_ONLY); errorMessageText.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); errorMessageText.setBackground(errorMessageText.getDisplay() .getSystemColor(SWT.COLOR_WIDGET_BACKGROUND)); applyDialogFont(composite); return composite; } /** * Returns the error message label. * * @return the error message label * @deprecated use setErrorMessage(String) instead */ protected Label getErrorMessageLabel() { return null; } /** * Returns the ok button. * * @return the ok button */ protected Button getOkButton() { return okButton; } /** * Returns the text area. * * @return the text area */ protected Text getText() { return text; } /** * Returns the validator. * * @return the validator */ protected IInputValidator getValidator() { return validator; } /** * Returns the string typed into this input dialog. * * @return the input string */ public String getValue() { return value; } /** * Validates the input. *

* The default implementation of this framework method delegates the request * to the supplied input validator object; if it finds the input invalid, * the error message is displayed in the dialog's message line. This hook * method is called whenever the text changes in the input field. *

*/ protected void validateInput() { String errorMessage = null; if (validator != null) { errorMessage = validator.isValid(text.getText()); } // Bug 16256: important not to treat "" (blank error) the same as null // (no error) setErrorMessage(errorMessage); } /** * Sets or clears the error message. * If not null, the OK button is disabled. * * @param errorMessage * the error message, or null to clear * @since 3.0 */ public void setErrorMessage(String errorMessage) { errorMessageText.setText(errorMessage == null ? "" : errorMessage); //$NON-NLS-1$ okButton.setEnabled(errorMessage == null); errorMessageText.getParent().update(); } } CommentTemplatesContentHandler.java000066400000000000000000000050531203611042400443160ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comments/******************************************************************************* * Copyright (c) 2000, 2005 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.tigris.subversion.subclipse.ui.comments; import java.util.Vector; import org.xml.sax.Attributes; import org.xml.sax.helpers.DefaultHandler; class CommentTemplatesContentHandler extends DefaultHandler { private StringBuffer buffer; private Vector comments; public CommentTemplatesContentHandler() { } /** * @see ContentHandler#characters(char[], int, int) */ public void characters(char[] chars, int startIndex, int length) { if (buffer == null) return; buffer.append(chars, startIndex, length); } /** * @see ContentHandler#startElement(java.lang.String, java.lang.String, java.lang.String, org.xml.sax.Attributes) */ public void startElement( String namespaceURI, String localName, String qName, Attributes atts) { String elementName = getElementName(localName, qName); if (elementName.equals(CommentsManager.ELEMENT_COMMIT_COMMENT)) { buffer = new StringBuffer(); return; } if (elementName.equals(CommentsManager.ELEMENT_COMMENT_TEMPLATES)) { comments = new Vector(); return; } } /** * @see org.xml.sax.ContentHandler#endElement(java.lang.String, java.lang.String, java.lang.String) */ public void endElement(String namespaceURI, String localName, String qName) { String elementName = getElementName(localName, qName); if (elementName.equals(CommentsManager.ELEMENT_COMMIT_COMMENT)) { comments.add(buffer.toString()); buffer = null; return; } if (elementName.equals(CommentsManager.ELEMENT_COMMENT_TEMPLATES)) { CommentsManager.commentTemplates = new String[comments.size()]; comments.copyInto(CommentsManager.commentTemplates); return; } } /* * Couldn't figure out from the SAX API exactly when localName vs. qName is used. * However, the XML for project sets doesn't use namespaces so either of the two names * is fine. Therefore, use whichever one is provided. */ private String getElementName(String localName, String qName) { if (localName != null && localName.length() > 0) { return localName; } return qName; } } CommentTemplatesPreferencePage.java000066400000000000000000000203431203611042400442600ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comments/******************************************************************************* * Copyright (c) 2005 Maik Schreiber. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Maik Schreiber - initial API and implementation *******************************************************************************/ package org.tigris.subversion.subclipse.ui.comments; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.jface.viewers.*; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.List; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Text; import org.eclipse.team.core.TeamException; import org.eclipse.ui.*; import org.tigris.subversion.subclipse.core.util.Util; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class CommentTemplatesPreferencePage extends PreferencePage implements IWorkbenchPreferencePage, ISelectionChangedListener { private ListViewer viewer; private Button editButton; private Button removeButton; private Text preview; protected Control createContents(Composite ancestor) { Composite parent = new Composite(ancestor, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; layout.numColumns = 1; parent.setLayout(layout); parent.setLayoutData(new GridData(GridData.FILL_BOTH)); createListAndButtons(parent); Label previewLabel = new Label(parent, SWT.NONE); previewLabel.setText(Policy.bind("CommentTemplatesPreferencePage.Preview")); //$NON-NLS-1$ preview = new Text(parent, SWT.MULTI | SWT.READ_ONLY | SWT.BORDER); GridData gd = new GridData(GridData.FILL_HORIZONTAL); gd.heightHint = convertHeightInCharsToPixels(5); preview.setLayoutData(gd); PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IHelpContextIds.COMMENT_TEMPLATE_PREFERENCE_PAGE); Dialog.applyDialogFont(ancestor); return parent; } private Composite createListAndButtons(Composite parent) { Composite listAndButtons = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; layout.numColumns = 2; listAndButtons.setLayout(layout); listAndButtons.setLayoutData(new GridData(GridData.FILL_BOTH)); viewer = new ListViewer(listAndButtons); viewer.setLabelProvider(new LabelProvider() { public String getText(Object element) { String template = (String) element; return Util.flattenText(template); } }); viewer.addSelectionChangedListener(this); viewer.setComparator(new ViewerComparator() { public int compare(Viewer viewer, Object e1, Object e2) { String template1 = Util.flattenText((String) e1); String template2 = Util.flattenText((String) e2); return template1.compareToIgnoreCase(template2); } }); viewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { editTemplate(); } }); List list = viewer.getList(); list.setLayoutData(new GridData(GridData.FILL_BOTH)); // populate list String[] templates = SVNUIPlugin.getPlugin().getRepositoryManager().getCommentsManager().getCommentTemplates(); for (int i = 0; i < templates.length; i++) { viewer.add(templates[i]); } createButtons(listAndButtons); return listAndButtons; } private void createButtons(Composite parent) { Composite buttons = new Composite(parent, SWT.NONE); buttons.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_BEGINNING)); GridLayout layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; buttons.setLayout(layout); Button newButton = new Button(buttons, SWT.PUSH); newButton.setText(Policy.bind("CommentTemplatesPreferencePage.New")); //$NON-NLS-1$ GridData data = new GridData(); data.horizontalAlignment = GridData.FILL; int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); data.widthHint = Math.max(widthHint, newButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); newButton.setLayoutData(data); newButton.setEnabled(true); newButton.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { newTemplate(); } }); editButton = new Button(buttons, SWT.PUSH); editButton.setText(Policy.bind("CommentTemplatesPreferencePage.Edit")); //$NON-NLS-1$ data = new GridData(); data.horizontalAlignment = GridData.FILL; widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); data.widthHint = Math.max(widthHint, editButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); editButton.setLayoutData(data); editButton.setEnabled(false); editButton.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { editTemplate(); } }); removeButton = new Button(buttons, SWT.PUSH); removeButton.setText(Policy.bind("CommentTemplatesPreferencePage.Remove")); data = new GridData(); data.horizontalAlignment = GridData.FILL; widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); data.widthHint = Math.max(widthHint, removeButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); removeButton.setLayoutData(data); removeButton.setEnabled(false); removeButton.addListener(SWT.Selection, new Listener() { public void handleEvent(Event e) { remove(); } }); } public void init(IWorkbench workbench) { setDescription(Policy.bind("CommentTemplatesPreferencePage.Description")); //$NON-NLS-1$ } public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection selection = (IStructuredSelection) event.getSelection(); switch (selection.size()) { case 0: editButton.setEnabled(false); removeButton.setEnabled(false); preview.setText(""); //$NON-NLS-1$ break; case 1: editButton.setEnabled(true); removeButton.setEnabled(true); preview.setText((String) selection.getFirstElement()); break; default: editButton.setEnabled(false); removeButton.setEnabled(true); preview.setText(""); //$NON-NLS-1$ break; } } void newTemplate() { CommentTemplateEditDialog dialog = new CommentTemplateEditDialog( getShell(), Policy.bind("CommentTemplatesPreferencePage.EditCommentTemplateTitle"), Policy.bind("CommentTemplatesPreferencePage.EditCommentTemplateMessage"), "", null); //$NON-NLS-1$ if (dialog.open() == Window.OK) { viewer.add(dialog.getValue()); } } void editTemplate() { IStructuredSelection selection = (IStructuredSelection) viewer.getSelection(); if (selection.size() == 1) { String oldTemplate = (String) selection.getFirstElement(); CommentTemplateEditDialog dialog = new CommentTemplateEditDialog( getShell(), Policy.bind("CommentTemplatesPreferencePage.EditCommentTemplateTitle"), Policy.bind("CommentTemplatesPreferencePage.EditCommentTemplateMessage"), oldTemplate, null); if (dialog.open() == Window.OK) { viewer.remove(oldTemplate); viewer.add(dialog.getValue()); } } } void remove() { IStructuredSelection selection = (IStructuredSelection) viewer.getSelection(); viewer.remove(selection.toArray()); } public boolean performOk() { int numTemplates = viewer.getList().getItemCount(); String[] templates = new String[numTemplates]; for (int i = 0; i < numTemplates; i++) { templates[i] = (String) viewer.getElementAt(i); } try { SVNUIPlugin.getPlugin().getRepositoryManager().getCommentsManager().replaceAndSaveCommentTemplates(templates); } catch (TeamException e) { SVNUIPlugin.openError(getShell(), null, null, e, SVNUIPlugin.LOG_OTHER_EXCEPTIONS); } return super.performOk(); } } CommentsManager.java000066400000000000000000000233021203611042400412610ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comments/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.comments; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; import javax.xml.parsers.SAXParserFactory; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.osgi.util.NLS; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.internal.XMLWriter; import org.xml.sax.InputSource; import org.xml.sax.SAXException; /** * the comments manager : holds previous comments */ public class CommentsManager { // The previously remembered comment static String[] previousComments = new String[0]; static String[] commentTemplates = new String[0]; static final int MAX_COMMENTS = 10; private static final String COMMENT_HIST_FILE = "commitCommentHistory.xml"; //$NON-NLS-1$ private static final String COMMENT_TEMPLATES_FILE = "commentTemplates.xml"; //$NON-NLS-1$ static final String ELEMENT_COMMIT_COMMENT = "CommitComment"; //$NON-NLS-1$ static final String ELEMENT_COMMIT_HISTORY = "CommitComments"; //$NON-NLS-1$ static final String ELEMENT_COMMENT_TEMPLATES = "CommitCommentTemplates"; //$NON-NLS-1$ /** * Answer the list of comments that were previously used when committing. * @return String[] */ public String[] getPreviousComments() { return previousComments; } /** * Method addComment. * @param string */ public void addComment(String comment) { // Make comment first element if it's already there int index = getCommentIndex(comment); if (index != -1) { makeFirstElement(index); return; } if (containsCommentTemplate(comment)) return; // Insert the comment as the first element String[] newComments = new String[Math.min(previousComments.length + 1, MAX_COMMENTS)]; newComments[0] = comment; for (int i = 1; i < newComments.length; i++) { newComments[i] = previousComments[i-1]; } previousComments = newComments; } private int getCommentIndex(String comment) { for (int i = 0; i < previousComments.length; i++) { if (previousComments[i].equals(comment)) { return i; } } return -1; } private void makeFirstElement(int index) { String[] newComments = new String[previousComments.length]; newComments[0] = previousComments[index]; System.arraycopy(previousComments, 0, newComments, 1, index); int maxIndex = previousComments.length - 1; if (index != maxIndex) { int nextIndex = (index + 1); System.arraycopy(previousComments, nextIndex, newComments, nextIndex, (maxIndex - index)); } previousComments = newComments; } /** * load the comment history */ public void loadCommentHistory() { IPath pluginStateLocation = SVNUIPlugin.getPlugin().getStateLocation().append(COMMENT_HIST_FILE); File file = pluginStateLocation.toFile(); if (!file.exists()) return; try { BufferedInputStream is = new BufferedInputStream(new FileInputStream(file)); try { SAXParserFactory factory = SAXParserFactory.newInstance(); try { SAXParser parser = factory.newSAXParser(); parser.parse(new InputSource(is), new CommentHistoryContentHandler()); } catch (SAXException ex) { throw new SVNException(Policy.bind("RepositoryManager.parsingProblem", COMMENT_HIST_FILE), ex); //$NON-NLS-1$ } catch (ParserConfigurationException e) { throw new SVNException(Policy.bind("RepositoryManager.parsingProblem", COMMENT_HIST_FILE), e); //$NON-NLS-1$ } } finally { is.close(); } } catch (IOException e) { SVNUIPlugin.log(new Status(IStatus.ERROR, SVNUIPlugin.ID, TeamException.UNABLE, Policy.bind("RepositoryManager.ioException"), e)); //$NON-NLS-1$ } catch (TeamException e) { SVNUIPlugin.log(e.getStatus()); } } /** * save the comments history */ public void saveCommentHistory() throws TeamException { IPath pluginStateLocation = SVNUIPlugin.getPlugin().getStateLocation(); File tempFile = pluginStateLocation.append(COMMENT_HIST_FILE + ".tmp").toFile(); //$NON-NLS-1$ File histFile = pluginStateLocation.append(COMMENT_HIST_FILE).toFile(); try { XMLWriter writer = new XMLWriter(new BufferedOutputStream(new FileOutputStream(tempFile))); try { writer.startTag(ELEMENT_COMMIT_HISTORY, null, false); for (int i=0; i 0) { MarginPainter marginPainter = new MarginPainter(sourceViewer); marginPainter.setMarginRulerColumn(widthMarker); marginPainter.setMarginRulerColor(Display.getCurrent().getSystemColor(SWT.COLOR_GRAY)); sourceViewer.addPainter(marginPainter); } sourceViewer.showAnnotations(false); sourceViewer.showAnnotationsOverview(false); if (isSpellingAnnotationEnabled()) { // to paint the annotations AnnotationPainter ap = new AnnotationPainter(sourceViewer, annotationAccess); ap.addAnnotationType(SPELLING_ERROR); ap.setAnnotationTypeColor(SPELLING_ERROR, getSpellingErrorColor(composite)); // this will draw the squiggles under the text sourceViewer.addPainter(ap); } Document document = new Document(initialText); // NOTE: Configuration must be applied before the document is set in order for // Hyperlink coloring to work. (Presenter needs document object up front) sourceViewer.configure(new SourceViewerConfig(annotationModel, document)); sourceViewer.setDocument(document, annotationModel); fTextField = sourceViewer.getTextWidget(); fTextField.addTraverseListener(this); fTextField.addModifyListener(this); fTextField.addFocusListener(this); fTextField.setWordWrap(mustWrapWord()); } private boolean mustWrapWord() { if (commentProperties != null && commentProperties.getLogWidthMarker() > 0) { return false; } return true; } private boolean isSpellingAnnotationEnabled() { // Need to determine how to ask the proper question to the AnnotationPreferences return true; } private Color getSpellingErrorColor(Composite composite) { AnnotationPreference pref = EditorsUI .getAnnotationPreferenceLookup().getAnnotationPreference( "org.eclipse.ui.workbench.texteditor.spelling"); // $NON-NLS-1$ String preferenceKey = pref.getColorPreferenceKey(); try { return fResources.createColor(PreferenceConverter.getColor(EditorsUI.getPreferenceStore(), preferenceKey)); } catch (DeviceResourceException e) { SVNUIPlugin.log(IStatus.ERROR, Policy.bind("internal"), e); //$NON-NLS-1$ return JFaceColors.getErrorText(composite.getDisplay()); } } public void modifyText(ModifyEvent e) { final String old = fText; fText = fTextField.getText(); firePropertyChangeChange(COMMENT_MODIFIED, old, fText); } public void keyTraversed(TraverseEvent e) { if (e.detail == SWT.TRAVERSE_RETURN && (e.stateMask & SWT.SHIFT) != 0) { e.doit = false; return; } if (e.detail == SWT.TRAVERSE_RETURN && (e.stateMask & SWT.CTRL) != 0) { e.doit = false; firePropertyChangeChange(OK_REQUESTED, null, null); } } public void focusGained(FocusEvent e) { if (fText.length() > 0) return; fTextField.removeModifyListener(this); try { fTextField.setText(fText); } finally { fTextField.addModifyListener(this); } } public void focusLost(FocusEvent e) { if (fText.length() > 0) return; fTextField.removeModifyListener(this); try { fTextField.setText(fMessage); fTextField.selectAll(); } finally { fTextField.addModifyListener(this); } } public void setEnabled(boolean enabled) { fTextField.setEnabled(enabled); } public void update(Observable o, Object arg) { if (arg instanceof String) { setText((String)arg); // triggers a modify event if (modifyListener != null) modifyListener.modifyText(null); } } public String getText() { return fText; } public int getCommentLength() { if (fTextField == null) return 0; if (fTextField.getText().equals(Policy.bind("CommitCommentArea_0"))) return 0; //$NON-NLS-1$ return fTextField.getText().trim().length(); } private void setText(String text) { if (text.length() == 0) { fTextField.setText(fMessage); fTextField.selectAll(); } else fTextField.setText(text); } public void setFocus() { fTextField.setFocus(); } } public class SourceViewerConfig extends SourceViewerConfiguration { private CommentSpellingReconcileStrategy strategy; public SourceViewerConfig(AnnotationModel annotationModel, Document document) { strategy = new CommentSpellingReconcileStrategy(annotationModel); strategy.setDocument(document); } public IReconciler getReconciler(ISourceViewer sourceViewer) { MonoReconciler reconciler = new MonoReconciler(strategy, false); reconciler.setIsIncrementalReconciler(false); reconciler.setProgressMonitor(new NullProgressMonitor()); reconciler.setDelay(200); return reconciler; } /* (non-Javadoc) * @see org.eclipse.jface.text.source.SourceViewerConfiguration#getTextHover(org.eclipse.jface.text.source.ISourceViewer, java.lang.String) */ public ITextHover getTextHover(ISourceViewer sourceViewer, String contentType) { return new DefaultTextHover(sourceViewer); } } public class CommentSpellingReconcileStrategy implements IReconcilingStrategy { /** The document to operate on. */ private IDocument fDocument; private SpellingContext fSpellingContext; private IAnnotationModel fAnnotationModel; public CommentSpellingReconcileStrategy(AnnotationModel annotationModel) { this.fAnnotationModel = annotationModel; fSpellingContext = new SpellingContext(); fSpellingContext.setContentType(Platform.getContentTypeManager().getContentType(IContentTypeManager.CT_TEXT)); } public void reconcile(DirtyRegion dirtyRegion, IRegion subRegion) { reconcile(subRegion); } public void reconcile(IRegion region) { SpellingProblemCollector collector = new SpellingProblemCollector(fAnnotationModel); EditorsUI.getSpellingService().check(fDocument, fSpellingContext, collector, null); } public void setDocument(IDocument document) { fDocument = document; } /** * Spelling problem collector that forwards {@link SpellingProblem}s as * {@link IProblem}s to the {@link org.eclipse.jdt.core.IProblemRequestor}. */ private class SpellingProblemCollector implements ISpellingProblemCollector { /** Annotation model */ private IAnnotationModel fAnnotationModel; /** Annotations to add */ private Map fAddAnnotations; /** * Initializes this collector with the given annotation model. * * @param annotationModel * the annotation model */ public SpellingProblemCollector(IAnnotationModel annotationModel) { fAnnotationModel = annotationModel; } /* * @see org.eclipse.ui.texteditor.spelling.ISpellingProblemCollector#accept(org.eclipse.ui.texteditor.spelling.SpellingProblem) */ public void accept(SpellingProblem problem) { fAddAnnotations.put(new Annotation(SPELLING_ERROR, false, problem.getMessage()), new Position(problem.getOffset(), problem.getLength())); } /* * @see org.eclipse.ui.texteditor.spelling.ISpellingProblemCollector#beginCollecting() */ public void beginCollecting() { fAddAnnotations = new HashMap(); } /* * @see org.eclipse.ui.texteditor.spelling.ISpellingProblemCollector#endCollecting() */ public void endCollecting() { List removeAnnotations = new ArrayList(); for(Iterator iter = fAnnotationModel.getAnnotationIterator(); iter.hasNext();) { Annotation annotation = (Annotation) iter.next(); if(SPELLING_ERROR.equals(annotation.getType())) removeAnnotations.add(annotation); } for(Iterator iter = removeAnnotations.iterator(); iter.hasNext();) fAnnotationModel.removeAnnotation((Annotation) iter.next()); for(Iterator iter = fAddAnnotations.keySet().iterator(); iter.hasNext();) { Annotation annotation = (Annotation) iter.next(); fAnnotationModel.addAnnotation(annotation, (Position) fAddAnnotations.get(annotation)); } fAddAnnotations = null; } } } private static class ComboBox extends Observable implements SelectionListener, FocusListener { private final String fMessage; private final String [] fComments; private String[] fCommentTemplates; private final Combo fCombo; public ComboBox(Composite composite, String message, String [] options, String[] commentTemplates) { fMessage= message; fComments= options; fCommentTemplates = commentTemplates; fCombo = new Combo(composite, SWT.READ_ONLY); fCombo.setLayoutData(SWTUtils.createHFillGridData()); fCombo.setVisibleItemCount(20); // populate the previous comment list populateList(); // We don't want to have an initial selection // (see bug 32078: http://bugs.eclipse.org/bugs/show_bug.cgi?id=32078) fCombo.addFocusListener(this); fCombo.addSelectionListener(this); } private void populateList() { fCombo.removeAll(); fCombo.add(fMessage); for (int i = 0; i < fCommentTemplates.length; i++) { fCombo.add(Policy.bind("CommitCommentArea_6") + ": " + //$NON-NLS-1$ Util.flattenText(fCommentTemplates[i])); } for (int i = 0; i < fComments.length; i++) { fCombo.add(Util.flattenText(fComments[i])); } fCombo.setText(fMessage); } public void widgetSelected(SelectionEvent e) { int index = fCombo.getSelectionIndex(); if (index > 0) { index--; setChanged(); // map from combo box index to array index String message; if (index < fCommentTemplates.length) { message = fCommentTemplates[index]; } else { message = fComments[index - fCommentTemplates.length]; } notifyObservers(message); } } public void widgetDefaultSelected(SelectionEvent e) { } public void focusGained(FocusEvent e) { } /* (non-Javadoc) * @see org.eclipse.swt.events.FocusListener#focusLost(org.eclipse.swt.events.FocusEvent) */ public void focusLost(FocusEvent e) { fCombo.removeSelectionListener(this); try { fCombo.setText(fMessage); } finally { fCombo.addSelectionListener(this); } } public void setEnabled(boolean enabled) { fCombo.setEnabled(enabled); } void setCommentTemplates(String[] templates) { fCommentTemplates = templates; populateList(); } } private static final String EMPTY_MESSAGE= Policy.bind("CommitCommentArea_0"); private static final String COMBO_MESSAGE= Policy.bind("CommitCommentArea_1"); public static final String OK_REQUESTED = "OkRequested";//$NON-NLS-1$ public static final String COMMENT_MODIFIED = "CommentModified";//$NON-NLS-1$ private TextBox fTextBox; private ComboBox fComboBox; private String fProposedComment; private Composite fComposite; private String enterCommentMessage; private CommentProperties commentProperties; private ModifyListener modifyListener; /** * Constructor for CommitCommentArea. * @param parentDialog * @param settings */ public CommitCommentArea(Dialog parentDialog, IDialogSettings settings) { super(parentDialog, settings); } public CommitCommentArea(Dialog parentDialog, IDialogSettings settings, CommentProperties commentProperties) { this(parentDialog, settings); this.commentProperties = commentProperties; } /** * Constructor for CommitCommentArea. * @param parentDialog * @param settings * @param enterCommentMessage */ public CommitCommentArea(Dialog parentDialog, IDialogSettings settings, String enterCommentMessage) { this(parentDialog, settings); this.enterCommentMessage = enterCommentMessage; } public CommitCommentArea(Dialog parentDialog, IDialogSettings settings, String enterCommentMessage, CommentProperties commentProperties) { this(parentDialog, settings, enterCommentMessage); this.commentProperties = commentProperties; } public Control createArea(Composite parent) { fComposite = createGrabbingComposite(parent, 1); initializeDialogUnits(fComposite); if (showLabel) { Label label = new Label(fComposite, SWT.NULL); label.setLayoutData(new GridData()); if (enterCommentMessage == null) label.setText(Policy.bind("ReleaseCommentDialog.enterComment")); //$NON-NLS-1$ else label.setText(enterCommentMessage); } fTextBox= new TextBox(fComposite, EMPTY_MESSAGE, getInitialComment()); final String [] comments = SVNUIPlugin.getPlugin().getRepositoryManager().getCommentsManager().getPreviousComments(); final String[] commentTemplates = SVNUIPlugin.getPlugin().getRepositoryManager().getCommentsManager().getCommentTemplates(); fComboBox= new ComboBox(fComposite, COMBO_MESSAGE, comments, commentTemplates); Link templatesPrefsLink = new Link(fComposite, 0); templatesPrefsLink.setText("Configure Comment Templates..."); //$NON-NLS-1$ templatesPrefsLink.addSelectionListener(new SelectionListener() { public void widgetDefaultSelected(SelectionEvent e) { openCommentTemplatesPreferencePage(); } public void widgetSelected(SelectionEvent e) { openCommentTemplatesPreferencePage(); } }); fComboBox.addObserver(fTextBox); return fComposite; } void openCommentTemplatesPreferencePage() { PreferencesUtil.createPreferenceDialogOn( null, "org.tigris.subversion.subclipse.ui.CommentTemplatesPreferences", //$NON-NLS-1$ new String[] { "org.tigris.subversion.subclipse.ui.CommentTemplatesPreferences" }, //$NON-NLS-1$ null).open(); fComboBox.setCommentTemplates( SVNUIPlugin.getPlugin().getRepositoryManager().getCommentsManager().getCommentTemplates()); } public String getComment() { return getComment(false); } public String getComment(boolean save) { final String comment= fTextBox.getText(); if (comment == null) return ""; //$NON-NLS-1$ if (save) addComment(comment); return comment; } public void addComment(String comment) { if (comment != null && comment.trim().length() > 0) SVNUIPlugin.getPlugin().getRepositoryManager().getCommentsManager().addComment(comment); } public String getCommentWithPrompt(Shell shell) { final String comment= getComment(false); if (comment.length() == 0) { final IPreferenceStore store= SVNUIPlugin.getPlugin().getPreferenceStore(); final String value= store.getString(ISVNUIConstants.PREF_ALLOW_EMPTY_COMMIT_COMMENTS); if (MessageDialogWithToggle.NEVER.equals(value)) return null; if (MessageDialogWithToggle.PROMPT.equals(value)) { final String title= Policy.bind("CommitCommentArea_2"); final String message= Policy.bind("CommitCommentArea_3"); final String toggleMessage= Policy.bind("CommitCommentArea_4"); final MessageDialogWithToggle dialog= MessageDialogWithToggle.openYesNoQuestion(shell, title, message, toggleMessage, false, store, ISVNUIConstants.PREF_ALLOW_EMPTY_COMMIT_COMMENTS); if (dialog.getReturnCode() != IDialogConstants.YES_ID) { fTextBox.setFocus(); return null; } } } return getComment(true); } public void setFocus() { if (fTextBox != null) { fTextBox.setFocus(); } } public void setProposedComment(String proposedComment) { if (proposedComment == null || proposedComment.length() == 0) { this.fProposedComment = null; } else { this.fProposedComment = proposedComment; } } public boolean hasCommitTemplate() { try { String commitTemplate = getCommitTemplate(); return commitTemplate != null && commitTemplate.length() > 0; } catch (SVNException e) { SVNUIPlugin.log(e); return false; } } public void setEnabled(boolean enabled) { fTextBox.setEnabled(enabled); fComboBox.setEnabled(enabled); } public Composite getComposite() { return fComposite; } public int getCommentLength() { if (fTextBox == null) return 0; return fTextBox.getCommentLength(); } protected void firePropertyChangeChange(String property, Object oldValue, Object newValue) { super.firePropertyChangeChange(property, oldValue, newValue); } private String getInitialComment() { if (fProposedComment != null) return fProposedComment; try { return getCommitTemplate(); } catch (SVNException e) { SVNUIPlugin.log(e); return ""; //$NON-NLS-1$ } } private String getCommitTemplate() throws SVNException { if ((commentProperties != null) && (commentProperties.getLogTemplate() != null)) { return commentProperties.getLogTemplate(); } return ""; //$NON-NLS-1$ } public void setModifyListener(ModifyListener modifyListener) { this.modifyListener = modifyListener; } public void setShowLabel(boolean showLabel) { this.showLabel = showLabel; } } ReleaseCommentDialog.java000066400000000000000000000051501203611042400422250ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comments/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.comments; import org.eclipse.core.resources.IResource; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; /** * Prompts the user for a multi-line comment for releasing to SVN. */ public class ReleaseCommentDialog extends Dialog { CommitCommentArea commitCommentArea; /** * ReleaseCommentDialog constructor. * * @param parentShell the parent of this dialog */ public ReleaseCommentDialog(Shell parentShell, IResource[] resourcesToCommit) { super(parentShell); int shellStyle = getShellStyle(); setShellStyle(shellStyle | SWT.RESIZE); commitCommentArea = new CommitCommentArea(this, null); } /* * @see Dialog#createDialogArea(Composite) */ protected Control createDialogArea(Composite parent) { getShell().setText(Policy.bind("ReleaseCommentDialog.title")); //$NON-NLS-1$ Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); commitCommentArea.createArea(composite); commitCommentArea.addPropertyChangeListener(new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { if (event.getProperty() == CommitCommentArea.OK_REQUESTED) okPressed(); } }); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.RELEASE_COMMENT_DIALOG); return composite; } /** * Returns the comment. * @return String */ public String getComment() { commitCommentArea.addComment(commitCommentArea.getComment()); return commitCommentArea.getComment(); } } 000077500000000000000000000000001203611042400351375ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/compareIPropertyProvider.java000066400000000000000000000003261203611042400414530ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comparepackage org.tigris.subversion.subclipse.ui.compare; public interface IPropertyProvider { public void getProperties(boolean recursive); public String getLabel(); public boolean isEditable(); } MultipleSelectionNode.java000066400000000000000000000011461203611042400422530ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comparepackage org.tigris.subversion.subclipse.ui.compare; import org.eclipse.compare.ITypedElement; import org.eclipse.compare.structuremergeviewer.IStructureComparator; import org.eclipse.swt.graphics.Image; public class MultipleSelectionNode implements IStructureComparator, ITypedElement { private Object[] children; public MultipleSelectionNode(Object[] children) { super(); this.children = children; } public Object[] getChildren() { return children; } public Image getImage() { return null; } public String getName() { return ""; } public String getType() { return UNKNOWN_TYPE; } } PropertyCompareInput.java000066400000000000000000000033551203611042400421630ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comparepackage org.tigris.subversion.subclipse.ui.compare; import java.lang.reflect.InvocationTargetException; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.CompareEditorInput; import org.eclipse.compare.structuremergeviewer.Differencer; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.ui.Policy; public class PropertyCompareInput extends CompareEditorInput { private IPropertyProvider left; private IPropertyProvider right; private boolean recursive; public PropertyCompareInput(IPropertyProvider left, IPropertyProvider right, boolean recursive) { super(new CompareConfiguration()); this.left = left; this.right = right; this.recursive = recursive; } @Override protected Object prepareInput(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { initLabels(); if (monitor != null) { monitor.subTask(Policy.bind("PropertyCompareInput.0") + left.getLabel()); //$NON-NLS-1$ } left.getProperties(recursive); if (monitor != null && monitor.isCanceled()) { return null; } if (monitor != null) { monitor.subTask(Policy.bind("PropertyCompareInput.0") + right.getLabel()); //$NON-NLS-1$ } right.getProperties(recursive); if (monitor != null && monitor.isCanceled()) { return null; } return new Differencer().findDifferences(false, monitor,null,null,left,right); } private void initLabels() { CompareConfiguration cc = getCompareConfiguration(); setTitle(Policy.bind("PropertyCompareInput.2")); //$NON-NLS-1$ cc.setLeftEditable(left.isEditable()); cc.setRightEditable(right.isEditable()); cc.setLeftLabel(left.getLabel()); cc.setRightLabel(right.getLabel()); } } PropertyCompareLocalResourceNode.java000066400000000000000000000071401203611042400444300ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comparepackage org.tigris.subversion.subclipse.ui.compare; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.eclipse.compare.CompareUI; import org.eclipse.compare.IStreamContentAccessor; import org.eclipse.compare.ITypedElement; import org.eclipse.compare.structuremergeviewer.IStructureComparator; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Status; import org.eclipse.swt.graphics.Image; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNProperty; public class PropertyCompareLocalResourceNode implements IStructureComparator, ITypedElement, IStreamContentAccessor, IPropertyProvider { private IResource resource; private boolean recursive; private ISVNProperty[] properties; private Object[] children; public PropertyCompareLocalResourceNode(IResource resource, boolean recursive, ISVNProperty[] properties) { this.resource = resource; this.recursive = recursive; this.properties = properties; } public InputStream getContents() throws CoreException { return null; } public String getName() { return resource.getName(); } public Image getImage() { return CompareUI.getImage(resource); } public String getType() { return FOLDER_TYPE; } public Object[] getChildren() { if (children == null) { List childList = new ArrayList(); for (ISVNProperty property : properties) { if (property.getFile().getAbsolutePath().equals(resource.getLocation().toOSString())) { childList.add(new PropertyComparePropertyNode(property)); } } if (recursive && resource instanceof IContainer) { try { IResource[] childResources = ((IContainer)resource).members(); for (IResource childResource : childResources) { PropertyCompareLocalResourceNode childNode = new PropertyCompareLocalResourceNode(childResource, true, properties); childList.add(childNode); } } catch (CoreException e) { SVNUIPlugin.log(e); } } children = new Object[childList.size()]; childList.toArray(children); } return children; } @Override public boolean equals(Object other) { if (!recursive) { return true; } if (other instanceof ITypedElement) { String otherName = ((ITypedElement) other).getName(); return getName().equals(otherName); } return super.equals(other); } public int hashCode() { return getName().hashCode(); } public void getProperties(boolean recursive) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); ISVNClientAdapter svnClient = null; try { svnClient = svnResource.getRepository().getSVNClient(); properties = svnClient.getProperties(resource.getLocation().toFile(), recursive); } catch (Exception e) { SVNUIPlugin.log(Status.ERROR, e.getMessage(), e); } finally { svnResource.getRepository().returnSVNClient(svnClient); } } public String getLabel() { return Policy.bind("PropertyCompareLocalResourceNode.0") + resource.getName(); //$NON-NLS-1$ } public boolean isEditable() { return true; } public IResource getResource() { return resource; } } PropertyComparePropertyNode.java000066400000000000000000000027551203611042400435210ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comparepackage org.tigris.subversion.subclipse.ui.compare; import java.io.ByteArrayInputStream; import java.io.InputStream; import org.eclipse.compare.IStreamContentAccessor; import org.eclipse.compare.ITypedElement; import org.eclipse.compare.structuremergeviewer.IStructureComparator; import org.eclipse.core.runtime.CoreException; import org.eclipse.swt.graphics.Image; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.ISVNProperty; public class PropertyComparePropertyNode implements IStructureComparator, ITypedElement, IStreamContentAccessor { private ISVNProperty property; public PropertyComparePropertyNode(ISVNProperty property) { this.property = property; } public InputStream getContents() throws CoreException { return new ByteArrayInputStream(property.getValue().getBytes()); } public String getName() { return property.getName(); } public Image getImage() { return SVNUIPlugin.getImage(ISVNUIConstants.IMG_PROPERTIES); } public String getType() { return "txt"; //$NON-NLS-1$ } public Object[] getChildren() { return null; } @Override public boolean equals(Object obj) { if (obj instanceof ITypedElement) { ITypedElement compareTo = (ITypedElement)obj; return getName().equals(compareTo.getName()); } return super.equals(obj); } public int hashCode() { return getName().hashCode(); } } PropertyCompareRemoteResourceNode.java000066400000000000000000000074631203611042400446410ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comparepackage org.tigris.subversion.subclipse.ui.compare; import java.io.InputStream; import java.util.ArrayList; import java.util.List; import org.eclipse.compare.CompareUI; import org.eclipse.compare.IStreamContentAccessor; import org.eclipse.compare.ITypedElement; import org.eclipse.compare.structuremergeviewer.IStructureComparator; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Status; import org.eclipse.swt.graphics.Image; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNProperty; import org.tigris.subversion.svnclientadapter.SVNRevision; public class PropertyCompareRemoteResourceNode implements IStructureComparator, ITypedElement, IStreamContentAccessor, IPropertyProvider { private ISVNRemoteResource remoteResource; private SVNRevision pegRevision; private boolean recursive; private ISVNProperty[] properties; private Object[] children; public PropertyCompareRemoteResourceNode(ISVNRemoteResource remoteResource, SVNRevision pegRevision, boolean recursive, ISVNProperty[] properties) { this.remoteResource = remoteResource; this.pegRevision = pegRevision; this.recursive = recursive; this.properties = properties; } public void getProperties(boolean recursive) { ISVNClientAdapter svnClient = null; try { svnClient = remoteResource.getRepository().getSVNClient(); properties = svnClient.getProperties(remoteResource.getUrl(), remoteResource.getRevision(), pegRevision, recursive); } catch (Exception e) { SVNUIPlugin.log(Status.ERROR, e.getMessage(), e); } finally { remoteResource.getRepository().returnSVNClient(svnClient); } } public String getLabel() { return Policy.bind("PropertyCompareRemoteResourceNode.0") + remoteResource.getName().replaceAll("%20", " ") + "@" + remoteResource.getRevision(); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ } public boolean isEditable() { return false; } public InputStream getContents() throws CoreException { return null; } public String getName() { return remoteResource.getName(); } public Image getImage() { return CompareUI.getImage(remoteResource); } public String getType() { return FOLDER_TYPE; } public Object[] getChildren() { if (children == null) { List childList = new ArrayList(); for (ISVNProperty property : properties) { if (property.getUrl().toString().equals(remoteResource.getUrl().toString())) { childList.add(new PropertyComparePropertyNode(property)); } } if (recursive && remoteResource.isContainer()) { try { ISVNRemoteResource[] childResources = remoteResource.members(new NullProgressMonitor()); for (ISVNRemoteResource childResource : childResources) { PropertyCompareRemoteResourceNode childNode = new PropertyCompareRemoteResourceNode(childResource, pegRevision, recursive, properties); childList.add(childNode); } } catch (CoreException e) { SVNUIPlugin.log(e); } } children = new Object[childList.size()]; childList.toArray(children); } return children; } public ISVNRemoteResource getRemoteResource() { return remoteResource; } @Override public boolean equals(Object other) { if (!recursive) { return true; } if (other instanceof ITypedElement) { String otherName = ((ITypedElement) other).getName(); return getName().equals(otherName); } return super.equals(other); } public int hashCode() { return getName().hashCode(); } } ResourceEditionNode.java000066400000000000000000000221171203611042400417160ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/compare/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.compare; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import org.eclipse.compare.CompareUI; import org.eclipse.compare.IEncodedStreamContentAccessor; import org.eclipse.compare.IStreamContentAccessor; import org.eclipse.compare.ITypedElement; import org.eclipse.compare.structuremergeviewer.IStructureComparator; import org.eclipse.core.internal.dtree.IComparator; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.graphics.Image; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.resources.RemoteFile; import org.tigris.subversion.subclipse.core.resources.RemoteFolder; import org.tigris.subversion.subclipse.core.util.Util; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * A class for comparing ISVNRemoteResource objects * *

*

 * ResourceEditionNode left = new ResourceEditionNode(editions[0]);
 * ResourceEditionNode right = new ResourceEditionNode(editions[1]);
 * CompareUI.openCompareEditorOnPage(new SVNCompareEditorInput(left, right), getTargetPage());
 * 
*

* */ public class ResourceEditionNode implements IStructureComparator, ITypedElement, IStreamContentAccessor, IEncodedStreamContentAccessor { private ISVNRemoteResource resource; private ResourceEditionNode[] children; private SVNLocalResourceNode localResource = null; private String charset = "UTF8"; private SVNRevision pegRevision; private boolean ignoreHiddenChanges = SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_IGNORE_HIDDEN_CHANGES); public ResourceEditionNode(ISVNRemoteResource resourceEdition) { this(resourceEdition, null); } /** * Creates a new ResourceEditionNode on the given resource edition. */ public ResourceEditionNode(ISVNRemoteResource resourceEdition, SVNRevision pegRevision) { this.resource = resourceEdition; this.pegRevision = pegRevision; if (pegRevision == null) { pegRevision = SVNRevision.HEAD; } if (resource instanceof RemoteFolder) { ((RemoteFolder)resource).setPegRevision(pegRevision); } else if (resource instanceof RemoteFile) { ((RemoteFile)resource).setPegRevision(pegRevision); } } /* * get the remote resource for this node */ public ISVNRemoteResource getRemoteResource() { return resource; } /** * Returns true if both resources names are identical. The content is not * considered. * * @see IComparator#equals */ public boolean equals(Object other) { if (other instanceof ITypedElement) { String otherName = ((ITypedElement) other).getName(); return getName().equals(otherName); } return super.equals(other); } /** * Enumerate children of this node (if any). * * @see IStructureComparator#getChildren */ public Object[] getChildren() { if (children == null) { children = new ResourceEditionNode[0]; ISVNLocalResource mylocalResource = null; if (localResource instanceof SVNLocalResourceNode) { mylocalResource = ((SVNLocalResourceNode)localResource).getLocalResource(); try { if (!mylocalResource.isDirty() && mylocalResource.getResource().getProjectRelativePath().toString().equals(getRemoteResource().getProjectRelativePath()) && mylocalResource.getStatus().getLastChangedRevision().equals(getRemoteResource().getLastChangedRevision())) { return children; } } catch(CoreException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } if (resource != null) { try { SVNUIPlugin.runWithProgress(null, true /* cancelable */, new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { try { ISVNRemoteResource[] members = resource .members(monitor); List nonHiddenChildren = new ArrayList(); for (int i = 0; i < members.length; i++) { if (!ignoreHiddenChanges || members[i].getResource() == null || !Util.isHidden(members[i].getResource(), false)) { ResourceEditionNode child = new ResourceEditionNode(members[i], pegRevision); SVNLocalResourceNode localNode = matchLocalResource((ISVNRemoteResource) members[i]); if (localNode != null) { child.setLocalResource(localNode); localNode.setRemoteResource(child); try { child.setCharset(localNode.getCharset()); } catch (CoreException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } nonHiddenChildren.add(child); } } children = new ResourceEditionNode[nonHiddenChildren.size()]; nonHiddenChildren.toArray(children); } catch (TeamException e) { throw new InvocationTargetException(e); } } }); } catch (InterruptedException e) { // operation canceled } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if (t instanceof TeamException) { SVNUIPlugin.log(((TeamException) t).getStatus()); } } } } return children; } /** * @see IStreamContentAccessor#getContents() */ public InputStream getContents() throws CoreException { if (resource == null || resource.isContainer()) { return null; } try { final InputStream[] holder = new InputStream[1]; SVNUIPlugin.runWithProgress(null, true, new IRunnableWithProgress() { public void run(IProgressMonitor monitor) { try { holder[0] = resource.getStorage(monitor).getContents(); } catch (CoreException e1) { SVNUIPlugin.log(e1); } } }); return holder[0]; } catch (InterruptedException e) { // operation canceled } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if (t instanceof TeamException) { throw new CoreException(((TeamException) t).getStatus()); } // should not get here } return new ByteArrayInputStream(new byte[0]); } /* * @see org.eclipse.compare.ITypedElement#getImage() */ public Image getImage() { return CompareUI.getImage(resource); } /* * Returns the name of this node. * * @see org.eclipse.compare.ITypedElement#getName() */ public String getName() { return resource == null ? "" : resource.getName(); //$NON-NLS-1$ } /** * Returns the comparison type for this node. * * @see org.eclipse.compare.ITypedElement#getType() */ public String getType() { if (resource == null) { return UNKNOWN_TYPE; } if (resource.isContainer()) { return FOLDER_TYPE; } String name = resource.getName(); name = name.substring(name.lastIndexOf('.') + 1); return name.length() == 0 ? UNKNOWN_TYPE : name; } /** * @see IComparator#equals */ public int hashCode() { return getName().hashCode(); } public String getCharset() throws CoreException { return charset; } public void setCharset(String charset) throws CoreException { this.charset = charset; } public void setLocalResource(SVNLocalResourceNode localResource){ this.localResource = localResource; } private SVNLocalResourceNode matchLocalResource(ISVNRemoteResource remoteNode){ if (localResource == null) return null; ISVNRemoteResource baseFolder = remoteNode; if (baseFolder.getParent() != null) { baseFolder = baseFolder.getParent(); } Object[] lrn = localResource.getChildren(); String remotePath=remoteNode.getRepositoryRelativePath(); remotePath = remotePath.replaceAll(baseFolder.getRepositoryRelativePath(),""); for(int i=0;i 0) projectRelativePath = projectRelativePath + "/"; } catch (Exception e) { } finally { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } } else { diffFiles = new File[1]; diffFiles[0] = diffFile; } } protected boolean contentsEqual(Object input1, Object input2) { int compare; if (input1 instanceof MultipleSelectionNode) { return true; } if (input1 instanceof SVNLocalResourceNode) { compare = compareStatusAndRevisions(input1, input2); } else { compare = compareEditions(input1, input2); } if (compare == NODE_EQUAL) { return true; } if (compare == NODE_NOT_EQUAL) { return false; } //revert to slow content comparison return super.contentsEqual(input1, input2); } /** * Called for every leaf or node compare to update progress information. */ protected void updateProgress(IProgressMonitor progressMonitor, Object node) { if (node instanceof ITypedElement) { ITypedElement element = (ITypedElement)node; progressMonitor.subTask(Policy.bind("CompareEditorInput.fileProgress", new String[] {element.getName()})); //$NON-NLS-1$ progressMonitor.worked(1); } } /** * Compares two nodes to determine if they are equal. Returns NODE_EQUAL * of they are the same, NODE_NOT_EQUAL if they are different, and * NODE_UNKNOWN if comparison was not possible. */ protected int compareStatusAndRevisions(Object left, Object right) { ISVNLocalResource localResource = null; if (left instanceof SVNLocalResourceNode) { localResource = ((SVNLocalResourceNode)left).getLocalResource(); } ISVNRemoteResource edition = null; if (right instanceof ResourceEditionNode) edition = ((ResourceEditionNode)right).getRemoteResource(); if (localResource == null || edition == null) { return NODE_UNKNOWN; } // if they're both non-files, they're the same if (localResource.isFolder() && edition.isContainer()) { return NODE_EQUAL; } // if they have different types, they're different if (localResource.isFolder() != edition.isContainer()) { return NODE_NOT_EQUAL; } String leftLocation = localResource.getRepository().getLocation(); String rightLocation = edition.getRepository().getLocation(); if (!leftLocation.equals(rightLocation)) { return NODE_UNKNOWN; } LocalResourceStatus localStatus = null; try { localStatus = localResource.getStatus(); if (localStatus == null) { return NODE_UNKNOWN; } if (!localResource.isDirty() && localResource.getResource().getProjectRelativePath().toString().equals(edition.getProjectRelativePath()) && localStatus.getLastChangedRevision().equals(edition.getLastChangedRevision())) { return NODE_EQUAL; } if(!localResource.isDirty() && !localResource.isFolder()) { if (changedResources == null && diffFiles != null) { parseDiffs(); } if (changedResources == null) { for (int i = 0; i < diffSummary.length; i++) { if(localResource.getResource().getProjectRelativePath().toString().equals(projectRelativePath) || localResource.getResource().getProjectRelativePath().toString().equals(projectRelativePath + diffSummary[i].getPath())) { return NODE_NOT_EQUAL; } } return NODE_EQUAL; } if (changedResources.contains(localResource.getResource().getLocation().toString())) { return NODE_NOT_EQUAL; } return NODE_EQUAL; } } catch (SVNException e) { return NODE_UNKNOWN; } return NODE_UNKNOWN; } /** * Compares two nodes to determine if they are equal. Returns NODE_EQUAL * of they are the same, NODE_NOT_EQUAL if they are different, and * NODE_UNKNOWN if comparison was not possible. */ protected int compareEditions(Object left, Object right) { // calculate the type for the left contribution ISVNRemoteResource leftEdition = null; if (left instanceof ResourceEditionNode) { leftEdition = ((ResourceEditionNode)left).getRemoteResource(); } // calculate the type for the right contribution ISVNRemoteResource rightEdition = null; if (right instanceof ResourceEditionNode) rightEdition = ((ResourceEditionNode)right).getRemoteResource(); // compare them if (leftEdition == null || rightEdition == null) { return NODE_UNKNOWN; } // if they're both non-files, they're the same if (leftEdition.isContainer() && rightEdition.isContainer()) { return NODE_EQUAL; } // if they have different types, they're different if (leftEdition.isContainer() != rightEdition.isContainer()) { return NODE_NOT_EQUAL; } String leftLocation = leftEdition.getRepository().getLocation(); String rightLocation = rightEdition.getRepository().getLocation(); if (!leftLocation.equals(rightLocation)) { return NODE_UNKNOWN; } if (leftEdition.getUrl().equals(rightEdition.getUrl()) && leftEdition.getLastChangedRevision().equals(rightEdition.getLastChangedRevision())) { return NODE_EQUAL; } else { // if(considerContentIfRevisionOrPathDiffers()) { return NODE_UNKNOWN; // } else { // return NODE_NOT_EQUAL; // } } } private void parseDiffs() { changedResources = new ArrayList(); for (int i = 0; i < diffFiles.length; i++) { parseFile(diffFiles[i]); } } private void parseFile(File diffFile) { // changedResources = new ArrayList(); BufferedReader input = null; try { input = new BufferedReader(new FileReader(diffFile)); String line = null; while ((line = input.readLine()) != null){ if (line.startsWith("Index:")) { changedResources.add(line.substring(7)); } } } catch (Exception e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if (input != null) { try { input.close(); } catch (IOException e) {} } } } // private boolean considerContentIfRevisionOrPathDiffers() { // return SVNUIPlugin.getPlugin().getPreferenceStore().getBoolean(ISVNUIConstants.PREF_CONSIDER_CONTENTS); //} // //public Viewer createDiffViewer(Composite parent) { // Viewer viewer = super.createDiffViewer(parent); // viewer.addSelectionChangedListener(new ISelectionChangedListener() { // public void selectionChanged(SelectionChangedEvent event) { // CompareConfiguration cc = getCompareConfiguration(); // setLabels(cc, (IStructuredSelection)event.getSelection()); // } // }); // return viewer; //} } SVNAbstractCompareEditorInput.java000066400000000000000000000032441203611042400436350ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comparepackage org.tigris.subversion.subclipse.ui.compare; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.CompareEditorInput; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; public abstract class SVNAbstractCompareEditorInput extends CompareEditorInput { public SVNAbstractCompareEditorInput(CompareConfiguration configuration) { super(configuration); } public Control createContents(Composite parent) { if (getCompareResult() instanceof String) { setMessage("Testing"); Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 2; composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); Label iconLabel = new Label(composite, SWT.WRAP); iconLabel.setImage(PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_ERROR_TSK)); Label errorLabel = new Label(composite, SWT.WRAP); GridData gd = new GridData(); gd.widthHint = 500; errorLabel.setLayoutData(gd); errorLabel.setText((String)getCompareResult()); parent.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE)); composite.setBackground(parent.getBackground()); errorLabel.setBackground(parent.getBackground()); iconLabel.setBackground(parent.getBackground()); return composite; } return super.createContents(parent); } } SVNCompareEditorInput.java000066400000000000000000000166201203611042400421530ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/compare/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.compare; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.ITypedElement; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.swt.graphics.Image; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.resources.RemoteResource; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * A compare input for comparing remote resources. Use SVNLocalCompareInput * when comparing resources in the workspace to remote resources. * Used from CompareRemoteResourcesAction */ public class SVNCompareEditorInput extends SVNAbstractCompareEditorInput { private ITypedElement left; private ITypedElement right; private ITypedElement ancestor; private Image leftImage; private Image rightImage; private Image ancestorImage; private String leftLabel; private String rightLabel; /** * Creates a new SVNCompareEditorInput. */ public SVNCompareEditorInput(ResourceEditionNode left, ResourceEditionNode right) { this(left, right, null); } /** * Creates a new SVNCompareEditorInput. */ public SVNCompareEditorInput(ResourceEditionNode left, ResourceEditionNode right, ResourceEditionNode ancestor) { super(new CompareConfiguration()); this.left = left; this.right = right; this.ancestor = ancestor; if (left != null) { this.leftImage = left.getImage(); if (left.getRemoteResource() instanceof RemoteResource) { if (((RemoteResource)left.getRemoteResource()).getPegRevision() == null) { ((RemoteResource)left.getRemoteResource()).setPegRevision(SVNRevision.HEAD); } } } if (right != null) { this.rightImage = right.getImage(); if (right.getRemoteResource() instanceof RemoteResource) { if (((RemoteResource)right.getRemoteResource()).getPegRevision() == null) { ((RemoteResource)right.getRemoteResource()).setPegRevision(SVNRevision.HEAD); } } } if (ancestor != null) { this.ancestorImage = ancestor.getImage(); } } /** * Returns the label for the given input element (which is a ResourceEditionNode). */ private String getLabel(ITypedElement element) { if (element instanceof ResourceEditionNode) { ISVNRemoteResource edition = ((ResourceEditionNode)element).getRemoteResource(); SVNRevision revision = edition.getLastChangedRevision(); if (revision == null) { revision = edition.getRevision(); } if (edition instanceof ISVNRemoteFile) { return Policy.bind("nameAndRevision", edition.getName(), revision.toString()); //$NON-NLS-1$ } if (edition.isContainer()) { return Policy.bind("SVNCompareEditorInput.inHead", edition.getName()); //$NON-NLS-1$ } else { return Policy.bind("SVNCompareEditorInput.repository", new Object[] {edition.getName(), revision.toString()}); //$NON-NLS-1$ } } return element.getName(); } /** * Returns the label for the given input element. (which is a ResourceEditionNode) */ private String getVersionLabel(ITypedElement element) { if (element instanceof ResourceEditionNode) { ISVNRemoteResource edition = ((ResourceEditionNode)element).getRemoteResource(); SVNRevision revision = edition.getLastChangedRevision(); if (revision == null) { revision = edition.getRevision(); } if (edition.isContainer()) { return Policy.bind("SVNCompareEditorInput.headLabel"); //$NON-NLS-1$ } else { return revision.toString(); } } return element.getName(); } /* * Returns a guess of the resource name being compared, for display * in the title. */ private String guessResourceName() { if (left != null) { return left.getName(); } if (right != null) { return right.getName(); } if (ancestor != null) { return ancestor.getName(); } return ""; //$NON-NLS-1$ } /** * Sets up the title and pane labels for the comparison view. */ private void initLabels() { CompareConfiguration cc = getCompareConfiguration(); ITypedElement left = this.left; ITypedElement right = this.right; ITypedElement ancestor = this.ancestor; if (left != null) { leftLabel = getLabel(left); cc.setLeftLabel(leftLabel); cc.setLeftImage(leftImage); } if (right != null) { rightLabel = getLabel(right); cc.setRightLabel(rightLabel); cc.setRightImage(rightImage); } if (ancestor != null) { cc.setAncestorLabel(getLabel(ancestor)); cc.setAncestorImage(ancestorImage); } String title; if (ancestor != null) { title = Policy.bind("SVNCompareEditorInput.titleAncestor", new Object[] {guessResourceName(), getVersionLabel(ancestor), getVersionLabel(left), getVersionLabel(right)} ); //$NON-NLS-1$ } else { String leftName = null; if (left != null) leftName = left.getName(); String rightName = null; if (right != null) rightName = right.getName(); if (leftName != null && !leftName.equals(rightName)) { title = Policy.bind("SVNCompareEditorInput.titleNoAncestorDifferent", new Object[] {leftName, getVersionLabel(left), rightName, getVersionLabel(right)} ); //$NON-NLS-1$ } else { title = Policy.bind("SVNCompareEditorInput.titleNoAncestor", new Object[] {guessResourceName(), getVersionLabel(left), getVersionLabel(right)} ); //$NON-NLS-1$ } } setTitle(title); } /* (Non-javadoc) * Method declared on CompareEditorInput */ public boolean isSaveNeeded() { return false; } /* (non-Javadoc) * Method declared on CompareEditorInput */ protected Object prepareInput(IProgressMonitor monitor) throws InterruptedException { final boolean threeWay = ancestor != null; if (right == null || left == null) { setMessage(Policy.bind("SVNCompareEditorInput.different")); //$NON-NLS-1$ return null; } initLabels(); try { // do the diff final Object[] result = new Object[] { null }; monitor.beginTask(Policy.bind("SVNCompareEditorInput.comparing"), 30); //$NON-NLS-1$ IProgressMonitor sub = new SubProgressMonitor(monitor, 30); sub.beginTask(Policy.bind("SVNCompareEditorInput.comparing"), 100); //$NON-NLS-1$ try { result[0] = new RevisionAwareDifferencer().findDifferences(threeWay, sub, null, ancestor, left, right); } finally { sub.done(); } return result[0]; } catch (OperationCanceledException e) { throw new InterruptedException(e.getMessage()); } catch (RuntimeException e) { return e.getMessage(); } finally { monitor.done(); } } public boolean canRunAsJob() { return true; } public String getLeftLabel() { return leftLabel; } public String getRightLabel() { return rightLabel; } } SVNCompareRevisionsInput.java000066400000000000000000000417471203611042400427160ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/compare/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.compare; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.CompareEditorInput; import org.eclipse.compare.CompareUI; import org.eclipse.compare.ITypedElement; import org.eclipse.compare.ResourceNode; import org.eclipse.compare.structuremergeviewer.DiffContainer; import org.eclipse.compare.structuremergeviewer.DiffNode; import org.eclipse.compare.structuremergeviewer.Differencer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.team.core.TeamException; import org.eclipse.team.core.variants.IResourceVariant; import org.eclipse.team.ui.ISaveableWorkbenchPart; import org.eclipse.ui.IPropertyListener; import org.eclipse.ui.IWorkbenchPartSite; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.resources.RemoteResource; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.compare.internal.Utilities; import org.tigris.subversion.subclipse.ui.history.HistoryTableProvider; import org.tigris.subversion.subclipse.ui.internal.Utils; import org.tigris.subversion.subclipse.ui.operations.UpdateOperation; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * A compare input for comparing local resource with remote ones * Used by CompareWithRevisionAction */ public class SVNCompareRevisionsInput extends CompareEditorInput implements ISaveableWorkbenchPart { private IFile resource; private ILogEntry[] logEntries; private TableViewer viewer; private Action getContentsAction; private Action getRevisionAction; private Shell shell; private HistoryTableProvider historyTableProvider; /** * the ITypedElement for the left element (ie the file) */ class TypedBufferedContent extends ResourceNode { public TypedBufferedContent(IFile resource) { super(resource); } protected InputStream createStream() throws CoreException { return ((IFile)getResource()).getContents(); } // used by getContentsAction public void setContent(byte[] contents) { if (contents == null) contents = new byte[0]; final InputStream is = new ByteArrayInputStream(contents); IRunnableWithProgress runnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { try { IFile file = resource; if (is != null) { if (!file.exists()) { file.create(is, false, monitor); } else { file.setContents(is, false, true, monitor); } } else { file.delete(false, true, monitor); } } catch (CoreException e) { throw new InvocationTargetException(e); } } }; try { new ProgressMonitorDialog(shell).run(false, false, runnable); } catch (InvocationTargetException e) { SVNUIPlugin.openError(SVNUIPlugin.getPlugin().getWorkbench().getActiveWorkbenchWindow().getShell(), Policy.bind("TeamFile.saveChanges", resource.getName()), null, e); //$NON-NLS-1$ } catch (InterruptedException e) { // Ignore } fireContentChanged(); } public ITypedElement replace(ITypedElement child, ITypedElement other) { return null; } } /** * This class is an edition node which knows the log entry it came from. */ class ResourceRevisionNode extends ResourceEditionNode { ILogEntry entry; public ResourceRevisionNode(ILogEntry entry) { super(entry.getRemoteResource()); this.entry = entry; if (entry.getRemoteResource() instanceof RemoteResource) { ((RemoteResource)entry.getRemoteResource()).setPegRevision(SVNRevision.HEAD); } } public ILogEntry getLogEntry() { return entry; } public String getName() { IResource resource = SVNCompareRevisionsInput.this.resource; try { ISVNRemoteFile currentEdition = (ISVNRemoteFile) SVNWorkspaceRoot.getBaseResourceFor(resource); if (currentEdition != null && currentEdition.getLastChangedRevision().equals(entry.getRevision())) { Policy.bind("currentRevision", entry.getRevision().toString()); //$NON-NLS-1$ } else { return entry.getRevision().toString(); } } catch (TeamException e) { handle(e); } return super.getName(); } } /** * A compare node that gets its label from the right element */ class VersionCompareDiffNode extends DiffNode implements IAdaptable { public VersionCompareDiffNode(ITypedElement left, ITypedElement right) { super(left, right); } public String getName() { return getRight().getName(); } public Object getAdapter(Class adapter) { if (adapter == ILogEntry.class) { return ((ResourceRevisionNode)getRight()).getLogEntry(); } return null; } } /** * A content provider which knows how to get the children of the diff container */ class VersionCompareContentProvider implements IStructuredContentProvider { public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } public Object[] getElements(Object inputElement) { if (inputElement instanceof DiffContainer) { return ((DiffContainer)inputElement).getChildren(); } return null; } } /** * creates a SVNCompareRevisionsInput */ public SVNCompareRevisionsInput(IFile resource, ILogEntry[] logEntries) { super(new CompareConfiguration()); this.resource = resource; this.logEntries = logEntries; updateCurrentEdition(); initializeActions(); } /* (non-Javadoc) * @see org.eclipse.compare.CompareEditorInput#createContents(org.eclipse.swt.widgets.Composite) */ public Control createContents(Composite parent) { Control c = super.createContents(parent); c.setLayoutData(new GridData(GridData.FILL_BOTH)); // This is a hack to get around a problem with initial sorting in OSx. historyTableProvider.setSortColumn(viewer, 0); historyTableProvider.setSortColumn(viewer, 0); return c; } /** * create the diff viewer : * - the table for the revisions of the file * - */ public Viewer createDiffViewer(Composite parent) { this.shell = parent.getShell(); viewer = getHistoryTableProvider().createTable(parent); Table table = viewer.getTable(); table.setData(CompareUI.COMPARE_VIEWER_TITLE, Policy.bind("SVNCompareRevisionsInput.structureCompare")); //$NON-NLS-1$ viewer.setContentProvider(new VersionCompareContentProvider()); MenuManager mm = new MenuManager(); mm.setRemoveAllWhenShown(true); mm.addMenuListener( new IMenuListener() { public void menuAboutToShow(IMenuManager mm) { mm.add(getContentsAction); mm.add(getRevisionAction); } } ); table.setMenu(mm.createContextMenu(table)); viewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { ISelection selection = event.getSelection(); if (!(selection instanceof IStructuredSelection)) { getContentsAction.setEnabled(false); getRevisionAction.setEnabled(false); return; } IStructuredSelection ss = (IStructuredSelection)selection; getContentsAction.setEnabled(ss.size() == 1); getRevisionAction.setEnabled(ss.size() == 1); } }); // Add F1 help. PlatformUI.getWorkbench().getHelpSystem().setHelp(table, IHelpContextIds.COMPARE_REVISIONS_VIEW); PlatformUI.getWorkbench().getHelpSystem().setHelp(getContentsAction, IHelpContextIds.GET_FILE_CONTENTS_ACTION); PlatformUI.getWorkbench().getHelpSystem().setHelp(getRevisionAction, IHelpContextIds.GET_FILE_REVISION_ACTION); viewer.resetFilters(); return viewer; } /** * initialize the labels : the title, the lft label and the right one */ private void initLabels() { CompareConfiguration cc = getCompareConfiguration(); String resourceName = resource.getName(); setTitle(Policy.bind("SVNCompareRevisionsInput.compareResourceAndVersions", new Object[] {resourceName})); //$NON-NLS-1$ cc.setLeftEditable(true); cc.setRightEditable(false); String leftLabel = Policy.bind("SVNCompareRevisionsInput.workspace", new Object[] {resourceName}); //$NON-NLS-1$ cc.setLeftLabel(leftLabel); String rightLabel = Policy.bind("SVNCompareRevisionsInput.repository", new Object[] {resourceName}); //$NON-NLS-1$ cc.setRightLabel(rightLabel); } /** * initialize the actions : * - getContentsAction : get the contents for the selected revision * - getRevisionAction : updates to the given revision */ private void initializeActions() { getContentsAction = new Action(Policy.bind("HistoryView.getContentsAction"), null) { //$NON-NLS-1$ public void run() { try { new ProgressMonitorDialog(shell).run(false, true, new WorkspaceModifyOperation() { protected void execute(IProgressMonitor monitor) throws InvocationTargetException { IStructuredSelection selection = (IStructuredSelection)viewer.getSelection(); if (selection.size() != 1) return; VersionCompareDiffNode node = (VersionCompareDiffNode)selection.getFirstElement(); ResourceEditionNode right = (ResourceEditionNode)node.getRight(); ISVNRemoteResource edition = right.getRemoteResource(); // Do the load. This just consists of setting the local contents. We don't // actually want to change the base. try { monitor.beginTask(null, 100); InputStream in = ((IResourceVariant)edition).getStorage(new SubProgressMonitor(monitor, 50)).getContents(); resource.setContents(in, false, true, new SubProgressMonitor(monitor, 50)); } catch (TeamException e) { throw new InvocationTargetException(e); } catch (CoreException e) { throw new InvocationTargetException(e); } finally { monitor.done(); } } }); } catch (InterruptedException e) { // Do nothing return; } catch (InvocationTargetException e) { handle(e); } // recompute the labels on the viewer updateCurrentEdition(); viewer.refresh(); } }; getRevisionAction = new Action(Policy.bind("HistoryView.getRevisionAction"), null) { //$NON-NLS-1$ public void run() { try { new ProgressMonitorDialog(shell).run(false, true, new WorkspaceModifyOperation(null) { protected void execute(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { IStructuredSelection selection = (IStructuredSelection)viewer.getSelection(); if (selection.size() != 1) return; VersionCompareDiffNode node = (VersionCompareDiffNode)selection.getFirstElement(); ResourceEditionNode right = (ResourceEditionNode)node.getRight(); final ISVNRemoteFile edition = (ISVNRemoteFile)right.getRemoteResource(); new UpdateOperation(null, resource, edition.getLastChangedRevision()).run(monitor); // recompute the labels on the viewer getHistoryTableProvider().setRemoteResource(edition); viewer.refresh(); } }); } catch (InterruptedException e) { // Do nothing return; } catch (InvocationTargetException e) { handle(e); } } }; } /** * Runs the compare operation and returns the compare result. */ protected Object prepareInput(IProgressMonitor monitor){ initLabels(); DiffNode diffRoot = new DiffNode(Differencer.NO_CHANGE); String localCharset = Utilities.getCharset(resource); for (int i = 0; i < logEntries.length; i++) { ITypedElement left = new TypedBufferedContent(resource); ResourceRevisionNode right = new ResourceRevisionNode(logEntries[i]); try { right.setCharset(localCharset); } catch (CoreException e) { } diffRoot.add(new VersionCompareDiffNode(left, right)); } return diffRoot; } /** * sets the file for the historyTableProvider * Used when file is changed (updated to a revision) */ private void updateCurrentEdition() { try { getHistoryTableProvider().setRemoteResource((ISVNRemoteFile) SVNWorkspaceRoot.getBaseResourceFor(resource)); } catch (TeamException e) { handle(e); } } private void handle(Exception e) { setMessage(SVNUIPlugin.openError(shell, null, null, e, SVNUIPlugin.LOG_NONTEAM_EXCEPTIONS).getMessage()); } /** * Returns the historyTableProvider. * @return HistoryTableProvider */ public HistoryTableProvider getHistoryTableProvider() { if (historyTableProvider == null) { historyTableProvider = new HistoryTableProvider(); } return historyTableProvider; } /** * Updates the contents of the local file with the contents of the currently selected LogEntry * TODO shouldn't it replace with the selected revision (taking the revision number with it) * @throws CoreException */ public void replaceLocalWithCurrentlySelectedRevision() throws CoreException { IStructuredSelection selection = (IStructuredSelection)viewer.getSelection(); if (selection.size() != 1) return; VersionCompareDiffNode node = (VersionCompareDiffNode)selection.getFirstElement(); ResourceRevisionNode right = (ResourceRevisionNode)node.getRight(); TypedBufferedContent left = (TypedBufferedContent)node.getLeft(); left.setContent(Utils.readBytes(right.getContents())); } /** * Gets the table viewer that will be diaplsying the log entries. * TODO this should not be public */ public TableViewer getViewer() { return viewer; } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#doSave(org.eclipse.core.runtime.IProgressMonitor) */ public void doSave(IProgressMonitor monitor) { try { saveChanges(monitor); } catch (CoreException e) { Utils.handle(e); } } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#doSaveAs() */ public void doSaveAs() { // noop } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#isDirty() */ public boolean isDirty() { return isSaveNeeded(); } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#isSaveAsAllowed() */ public boolean isSaveAsAllowed() { return false; } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#isSaveOnCloseNeeded() */ public boolean isSaveOnCloseNeeded() { return true; } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#addPropertyListener(org.eclipse.ui.IPropertyListener) */ public void addPropertyListener(IPropertyListener listener) { } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) */ public void createPartControl(Composite parent) { createContents(parent); } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#dispose() */ public void dispose() { } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#getSite() */ public IWorkbenchPartSite getSite() { return null; } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#getTitleToolTip() */ public String getTitleToolTip() { return null; } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#removePropertyListener(org.eclipse.ui.IPropertyListener) */ public void removePropertyListener(IPropertyListener listener) { } public boolean canRunAsJob() { return true; } } SVNFolderCompareEditorInput.java000066400000000000000000000204361203611042400433070ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comparepackage org.tigris.subversion.subclipse.ui.compare; import java.io.File; import java.util.ArrayList; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.ITypedElement; import org.eclipse.compare.structuremergeviewer.DiffNode; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.swt.graphics.Image; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNResource; import org.tigris.subversion.subclipse.core.resources.RemoteFolder; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNDiffSummary; import org.tigris.subversion.svnclientadapter.SVNNodeKind; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNDiffSummary.SVNDiffKind; import org.tigris.subversion.svnclientadapter.utils.Depth; public class SVNFolderCompareEditorInput extends SVNAbstractCompareEditorInput { private SummaryEditionNode left; private SVNRevision leftPegRevision; private SummaryEditionNode right; private SVNRevision rightPegRevision; private ISVNRemoteFolder folder1; private ISVNRemoteFolder folder2; private ITypedElement ancestor; private Image leftImage; private Image rightImage; private Image ancestorImage; private ISVNResource localResource1; private ISVNResource localResource2; // public SVNFolderCompareEditorInput(ISVNRemoteFolder folder1, ISVNRemoteFolder folder2) { // this(folder1, SVNRevision.HEAD, folder2, SVNRevision.HEAD); // } public SVNFolderCompareEditorInput(ISVNRemoteFolder folder1, SVNRevision pegRevision1, ISVNRemoteFolder folder2, SVNRevision pegRevision2) { super(new CompareConfiguration()); this.folder1 = folder1; this.folder2 = folder2; left = new SummaryEditionNode(folder1, pegRevision1); left.setRootFolder((RemoteFolder)folder1); left.setNodeType(SummaryEditionNode.LEFT); right = new SummaryEditionNode(folder2, pegRevision2); right.setRootFolder((RemoteFolder)folder2); right.setNodeType(SummaryEditionNode.RIGHT); } private String getLabel(ITypedElement element) { if (element instanceof SummaryEditionNode) { ISVNRemoteResource edition = ((SummaryEditionNode)element).getRemoteResource(); return Policy.bind("nameAndRevision", edition.getName(), edition.getRevision().toString()); //$NON-NLS-1$ } return element.getName(); } private String getVersionLabel(ITypedElement element) { if (element instanceof SummaryEditionNode) { ISVNRemoteResource edition = ((SummaryEditionNode)element).getRemoteResource(); return edition.getRevision().toString(); } return element.getName(); } private String guessResourceName() { if (left != null) { return left.getName(); } if (right != null) { return right.getName(); } if (ancestor != null) { return ancestor.getName(); } return ""; //$NON-NLS-1$ } private void initLabels() { CompareConfiguration cc = getCompareConfiguration(); ITypedElement left = this.left; ITypedElement right = this.right; ITypedElement ancestor = this.ancestor; if (left != null) { cc.setLeftLabel(getLabel(left)); cc.setLeftImage(leftImage); } if (right != null) { cc.setRightLabel(getLabel(right)); cc.setRightImage(rightImage); } if (ancestor != null) { cc.setAncestorLabel(getLabel(ancestor)); cc.setAncestorImage(ancestorImage); } String title; if (ancestor != null) { title = Policy.bind("SVNCompareEditorInput.titleAncestor", new Object[] {guessResourceName(), getVersionLabel(ancestor), getVersionLabel(left), getVersionLabel(right)} ); //$NON-NLS-1$ } else { String leftName = null; if (left != null) leftName = left.getName(); String rightName = null; if (right != null) rightName = right.getName(); if (leftName != null && !leftName.equals(rightName)) { title = Policy.bind("SVNCompareEditorInput.titleNoAncestorDifferent", new Object[] {leftName, getVersionLabel(left), rightName, getVersionLabel(right)} ); //$NON-NLS-1$ } else { title = Policy.bind("SVNCompareEditorInput.titleNoAncestor", new Object[] {guessResourceName(), getVersionLabel(left), getVersionLabel(right)} ); //$NON-NLS-1$ } } setTitle(title); } public boolean isSaveNeeded() { return false; } protected Object prepareInput(IProgressMonitor monitor) throws InterruptedException { final boolean threeWay = ancestor != null; if (right == null || left == null) { setMessage(Policy.bind("SVNCompareEditorInput.different")); //$NON-NLS-1$ return null; } initLabels(); final Object[] result = new Object[] { null }; ISVNClientAdapter svnClient = null; try { // do the diff monitor.beginTask(Policy.bind("SVNCompareEditorInput.comparing"), 30); //$NON-NLS-1$ IProgressMonitor sub = new SubProgressMonitor(monitor, 30); sub.beginTask(Policy.bind("SVNCompareEditorInput.comparing"), 100); //$NON-NLS-1$ try { svnClient = folder1.getRepository().getSVNClient(); SVNDiffSummary[] diffSummary = null; if (folder1.getRepositoryRelativePath().equals(folder2.getRepositoryRelativePath()) && localResource1 != null) { IResource resource1 = localResource1.getResource(); if (resource1 != null) { ISVNLocalResource svnResource1 = SVNWorkspaceRoot.getSVNResourceFor(resource1); if (svnResource1 != null) { SVNRevision pegRevision = svnResource1.getRevision(); if (pegRevision != null) { diffSummary = svnClient.diffSummarize(folder1.getUrl(), pegRevision, folder1.getRevision(), folder2.getRevision(), Depth.infinity, true); } } } else { diffSummary = svnClient.diffSummarize(folder1.getUrl(), SVNRevision.HEAD, folder1.getRevision(), folder2.getRevision(), Depth.infinity, true); } } if (diffSummary == null) diffSummary = svnClient.diffSummarize(folder1.getUrl(), folder1.getRevision(), folder2.getUrl(), folder2.getRevision(), Depth.infinity, true); diffSummary = getDiffSummaryWithSubfolders(diffSummary); left.setDiffSummary(diffSummary); right.setDiffSummary(diffSummary); left.setRoot(true); right.setRoot(true); result[0] = new SummaryDifferencer().findDifferences(threeWay, sub, null, ancestor, left, right); } finally { sub.done(); } if (result[0] instanceof DiffNode) { IDiffElement[] diffs = ((DiffNode)result[0]).getChildren(); if (diffs == null || diffs.length == 0) { result[0] = null; } } return result[0]; } catch (OperationCanceledException e) { throw new InterruptedException(e.getMessage()); } catch (Exception e) { return e.getMessage(); } finally { folder1.getRepository().returnSVNClient(svnClient); monitor.done(); } } private SVNDiffSummary[] getDiffSummaryWithSubfolders(SVNDiffSummary[] diffSummary) { ArrayList paths = new ArrayList(); ArrayList diffs = new ArrayList(); for (int i = 0; i < diffSummary.length; i++) { paths.add(diffSummary[i].getPath()); diffs.add(diffSummary[i]); } for (int i = 0; i < diffSummary.length; i++) { File file = new File(diffSummary[i].getPath()); while (file.getParentFile() != null) { file = file.getParentFile(); String path = file.getPath(); path = path.replaceAll("\\\\", "/"); if (!paths.contains(path)) { paths.add(path); SVNDiffSummary folder = new SVNDiffSummary(path, SVNDiffKind.NORMAL, false, SVNNodeKind.DIR.toInt()); diffs.add(folder); } } } diffSummary = new SVNDiffSummary[diffs.size()]; diffs.toArray(diffSummary); return diffSummary; } public void setLocalResource1(ISVNResource localResource1) { this.localResource1 = localResource1; } public void setLocalResource2(ISVNResource localResource2) { this.localResource2 = localResource2; } public boolean canRunAsJob() { return true; } } SVNLocalBaseCompareInput.java000066400000000000000000000154671203611042400425620ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comparepackage org.tigris.subversion.subclipse.ui.compare; import java.lang.reflect.InvocationTargetException; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.CompareEditorInput; import org.eclipse.compare.structuremergeviewer.DiffNode; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.swt.widgets.Composite; import org.eclipse.team.ui.ISaveableWorkbenchPart; import org.eclipse.ui.IPropertyListener; import org.eclipse.ui.IWorkbenchPartSite; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.commands.GetRemoteResourceCommand; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.internal.Utils; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class SVNLocalBaseCompareInput extends CompareEditorInput implements ISaveableWorkbenchPart { private final SVNRevision remoteRevision; private boolean readOnly; private SVNLocalResourceNode[] localResourceNodes; private ResourceEditionNode[] remoteResourceNodes; public SVNLocalBaseCompareInput(ISVNLocalResource[] resources, SVNRevision revision, boolean readOnly) throws SVNException, SVNClientException { super(new CompareConfiguration()); this.remoteRevision = revision; this.readOnly = readOnly; localResourceNodes = new SVNLocalResourceNode[resources.length]; remoteResourceNodes = new ResourceEditionNode[resources.length]; for (int i = 0; i < resources.length; i++) { localResourceNodes[i] = new SVNLocalResourceNode(resources[i]); ISVNRemoteResource remoteResource = null; LocalResourceStatus status = resources[i].getStatus(); if (status != null && status.isCopied()) { ISVNClientAdapter svnClient = null; try { svnClient = resources[i].getRepository().getSVNClient(); ISVNInfo info = svnClient.getInfoFromWorkingCopy(resources[i].getFile()); SVNUrl copiedFromUrl = info.getCopyUrl(); if (copiedFromUrl != null) { GetRemoteResourceCommand getRemoteResourceCommand = new GetRemoteResourceCommand(resources[i].getRepository(), copiedFromUrl, SVNRevision.HEAD); getRemoteResourceCommand.run(null); remoteResource = getRemoteResourceCommand.getRemoteResource(); } } finally { resources[i].getRepository().returnSVNClient(svnClient); } } if (remoteResource == null) remoteResource = resources[i].getRemoteResource(revision); remoteResourceNodes[i] = new ResourceEditionNode(remoteResource); remoteResourceNodes[i].setLocalResource(localResourceNodes[i]); localResourceNodes[i].setRemoteResource(remoteResourceNodes[i]); } } /** * Constructor which allows * @throws SVNException * creates a SVNLocalCompareInput, defaultin to read/write. */ public SVNLocalBaseCompareInput(ISVNLocalResource[] resources, SVNRevision revision) throws SVNException, SVNClientException { this(resources, revision, false); } private void initLabels() { CompareConfiguration cc = getCompareConfiguration(); cc.setLeftEditable(! readOnly); cc.setRightEditable(false); String title; String leftLabel; String rightLabel; if (localResourceNodes.length > 1) { title = Policy.bind("SVNLocalBaseCompareInput.0") + remoteRevision; //$NON-NLS-1$ leftLabel = Policy.bind("SVNLocalBaseCompareInput.1"); //$NON-NLS-1$ rightLabel = remoteRevision.toString(); } else { title = Policy.bind("SVNCompareRevisionsInput.compareResourceAndVersions", new Object[] {localResourceNodes[0].getName()}); //$NON-NLS-1$ leftLabel = Policy.bind("SVNCompareRevisionsInput.workspace", new Object[] {localResourceNodes[0].getName()}); //$NON-NLS-1$ rightLabel = Policy.bind("SVNCompareRevisionsInput.repository", new Object[] {localResourceNodes[0].getName()}); //$NON-NLS-1$ } setTitle(title); cc.setLeftLabel(leftLabel); cc.setRightLabel(rightLabel); } protected Object prepareInput(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { initLabels(); MultipleSelectionNode left = new MultipleSelectionNode(localResourceNodes); MultipleSelectionNode right = new MultipleSelectionNode(remoteResourceNodes); Object differences = new StatusAwareDifferencer().findDifferences(false, monitor,null,null,left,right); if (differences instanceof DiffNode) { DiffNode diffNode = (DiffNode)differences; if (!diffNode.hasChildren()) { return null; } } return differences; } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#doSave(org.eclipse.core.runtime.IProgressMonitor) */ public void doSave(IProgressMonitor monitor) { try { saveChanges(monitor); } catch (CoreException e) { Utils.handle(e); } } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#doSaveAs() */ public void doSaveAs() { // noop } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#isDirty() */ public boolean isDirty() { return isSaveNeeded(); } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#isSaveAsAllowed() */ public boolean isSaveAsAllowed() { return false; } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#isSaveOnCloseNeeded() */ public boolean isSaveOnCloseNeeded() { return true; } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#addPropertyListener(org.eclipse.ui.IPropertyListener) */ public void addPropertyListener(IPropertyListener listener) { } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) */ public void createPartControl(Composite parent) { createContents(parent); } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#dispose() */ public void dispose() { } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#getSite() */ public IWorkbenchPartSite getSite() { return null; } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#getTitleToolTip() */ public String getTitleToolTip() { return null; } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#removePropertyListener(org.eclipse.ui.IPropertyListener) */ public void removePropertyListener(IPropertyListener listener) { } } SVNLocalBranchTagCompareInput.java000066400000000000000000000141771203611042400435360ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comparepackage org.tigris.subversion.subclipse.ui.compare; import java.io.File; import java.lang.reflect.InvocationTargetException; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.CompareEditorInput; import org.eclipse.compare.structuremergeviewer.DiffNode; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.team.ui.ISaveableWorkbenchPart; import org.eclipse.ui.IPropertyListener; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPartSite; import org.tigris.subversion.subclipse.core.ISVNLocalFolder; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.RemoteFile; import org.tigris.subversion.subclipse.core.resources.RemoteFolder; import org.tigris.subversion.subclipse.ui.internal.Utils; import org.tigris.subversion.subclipse.ui.operations.ShowDifferencesAsUnifiedDiffOperationWC; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class SVNLocalBranchTagCompareInput extends CompareEditorInput implements ISaveableWorkbenchPart { private ISVNLocalResource[] resources; private SVNUrl[] urls; private SVNRevision remoteRevision; private IWorkbenchPart targetPart; private Exception getDiffException; private SVNLocalResourceNode[] localResourceNodes; private ResourceEditionNode[] remoteResourceNodes; public SVNLocalBranchTagCompareInput(ISVNLocalResource[] resources, SVNUrl[] urls, SVNRevision remoteRevision, IWorkbenchPart targetPart) throws SVNException { super(new CompareConfiguration()); this.resources = resources; this.urls = urls; this.remoteRevision = remoteRevision; this.targetPart = targetPart; localResourceNodes = new SVNLocalResourceNode[resources.length]; remoteResourceNodes = new ResourceEditionNode[resources.length]; for (int i = 0; i < resources.length; i++) { localResourceNodes[i] = new SVNLocalResourceNode(resources[i]); ISVNRemoteResource remoteResource; if (resources[i] instanceof ISVNLocalFolder) { remoteResource = new RemoteFolder(resources[i].getRepository(), urls[i], remoteRevision); } else { remoteResource = new RemoteFile(resources[i].getRepository(), urls[i], remoteRevision); } remoteResourceNodes[i] = new ResourceEditionNode(remoteResource); remoteResourceNodes[i].setLocalResource(localResourceNodes[i]); localResourceNodes[i].setRemoteResource(remoteResourceNodes[i]); } } private void initLabels() { CompareConfiguration cc = getCompareConfiguration(); setTitle("Compare and versions"); cc.setLeftEditable(true); cc.setRightEditable(false); String leftLabel = ""; cc.setLeftLabel(leftLabel); String rightLabel = "Repository"; cc.setRightLabel(rightLabel); } protected Object prepareInput(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { initLabels(); File[] diffFiles = new File[localResourceNodes.length]; try { for (int i = 0; i < localResourceNodes.length; i++) { File file = File.createTempFile("revision", ".diff"); file.deleteOnExit(); final ShowDifferencesAsUnifiedDiffOperationWC operation = new ShowDifferencesAsUnifiedDiffOperationWC(targetPart, localResourceNodes[i].getLocalResource().getFile(), remoteResourceNodes[i].getRemoteResource().getUrl(), remoteRevision, file); operation.setGraphicalCompare(true); Display.getDefault().syncExec(new Runnable() { public void run() { try { operation.run(); } catch (Exception e) {} } }); diffFiles[i] = operation.getFile(); } } catch (Exception e) {} MultipleSelectionNode left = new MultipleSelectionNode(localResourceNodes); MultipleSelectionNode right = new MultipleSelectionNode(remoteResourceNodes); Object differences = new RevisionAwareDifferencer(diffFiles).findDifferences(false, monitor,null,null,left,right); if (differences instanceof DiffNode) { DiffNode diffNode = (DiffNode)differences; if (!diffNode.hasChildren()) { return null; } } return differences; } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#doSave(org.eclipse.core.runtime.IProgressMonitor) */ public void doSave(IProgressMonitor monitor) { try { saveChanges(monitor); } catch (CoreException e) { Utils.handle(e); } } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#doSaveAs() */ public void doSaveAs() { // noop } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#isDirty() */ public boolean isDirty() { return isSaveNeeded(); } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#isSaveAsAllowed() */ public boolean isSaveAsAllowed() { return false; } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#isSaveOnCloseNeeded() */ public boolean isSaveOnCloseNeeded() { return true; } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#addPropertyListener(org.eclipse.ui.IPropertyListener) */ public void addPropertyListener(IPropertyListener listener) { } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) */ public void createPartControl(Composite parent) { createContents(parent); } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#dispose() */ public void dispose() { } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#getSite() */ public IWorkbenchPartSite getSite() { return null; } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#getTitleToolTip() */ public String getTitleToolTip() { return null; } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#removePropertyListener(org.eclipse.ui.IPropertyListener) */ public void removePropertyListener(IPropertyListener listener) { } } SVNLocalCompareInput.java000066400000000000000000000220661203611042400417600ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/compare/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.compare; import java.io.File; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.CompareEditorInput; import org.eclipse.compare.ITypedElement; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.swt.widgets.Composite; import org.eclipse.team.ui.ISaveableWorkbenchPart; import org.eclipse.ui.IPropertyListener; import org.eclipse.ui.IWorkbenchPartSite; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.commands.GetRemoteResourceCommand; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.compare.internal.Utilities; import org.tigris.subversion.subclipse.ui.internal.Utils; import org.tigris.subversion.subclipse.ui.operations.ShowDifferencesAsUnifiedDiffOperationWC; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * A compare input for comparing local resource with its remote revision * Perform textual check on: * - any local modification * - revision numbers don't match */ public class SVNLocalCompareInput extends CompareEditorInput implements ISaveableWorkbenchPart { private final SVNRevision remoteRevision; private ISVNLocalResource resource; private ISVNRemoteResource remoteResource; // the remote resource to compare to or null if it does not exist private SVNRevision pegRevision; private boolean readOnly; private File diffFile; private ShowDifferencesAsUnifiedDiffOperationWC diffOperation; /** * @throws SVNException * creates a SVNLocalCompareInput, allows setting whether the current local resource is read only or not. */ public SVNLocalCompareInput(ISVNLocalResource resource, SVNRevision revision, boolean readOnly) throws SVNException, SVNClientException { super(new CompareConfiguration()); this.remoteRevision = revision; this.readOnly = readOnly; this.resource = resource; LocalResourceStatus status = resource.getStatus(); if (status != null && status.isCopied()) { ISVNClientAdapter svnClient = null; try { svnClient = resource.getRepository().getSVNClient(); ISVNInfo info = svnClient.getInfoFromWorkingCopy(resource.getFile()); SVNUrl copiedFromUrl = info.getCopyUrl(); if (copiedFromUrl != null) { GetRemoteResourceCommand getRemoteResourceCommand = new GetRemoteResourceCommand(resource.getRepository(), copiedFromUrl, SVNRevision.HEAD); getRemoteResourceCommand.run(null); this.remoteResource = getRemoteResourceCommand.getRemoteResource(); } } finally { resource.getRepository().returnSVNClient(svnClient); } } // SVNRevision can be any valid revision : BASE, HEAD, number ... if (this.remoteResource == null) this.remoteResource = resource.getRemoteResource(revision); // remoteResouce can be null if there is no corresponding remote resource // (for example no base because resource has just been added) } /** * Constructor which allows * @throws SVNException * creates a SVNLocalCompareInput, defaultin to read/write. */ public SVNLocalCompareInput(ISVNLocalResource resource, SVNRevision revision) throws SVNException, SVNClientException { this(resource, revision, false); } public SVNLocalCompareInput(ISVNLocalResource resource, ISVNRemoteResource remoteResource) throws SVNException { this(resource, remoteResource, null); } /** * @throws SVNException * creates a SVNCompareRevisionsInput */ public SVNLocalCompareInput(ISVNLocalResource resource, ISVNRemoteResource remoteResource, SVNRevision pegRevision) throws SVNException { super(new CompareConfiguration()); this.resource = resource; this.remoteResource = remoteResource; this.remoteRevision = remoteResource.getRevision(); this.pegRevision = pegRevision; } /** * initialize the labels : the title, the lft label and the right one */ private void initLabels() { CompareConfiguration cc = getCompareConfiguration(); String resourceName = resource.getName(); setTitle(Policy.bind("SVNCompareRevisionsInput.compareResourceAndVersions", new Object[] {resourceName})); //$NON-NLS-1$ cc.setLeftEditable(! readOnly); cc.setRightEditable(false); String leftLabel = Policy.bind("SVNCompareRevisionsInput.workspace", new Object[] {resourceName}); //$NON-NLS-1$ cc.setLeftLabel(leftLabel); String remoteResourceName = null; if (remoteResource != null) { remoteResourceName = remoteResource.getName(); } else { remoteResourceName = resourceName; } String rightLabel = Policy.bind("SVNCompareRevisionsInput.repository", new Object[] {remoteResourceName}); //$NON-NLS-1$ cc.setRightLabel(rightLabel); } /** * Runs the compare operation and returns the compare result. */ protected Object prepareInput(IProgressMonitor monitor){ if (diffOperation != null) { try { diffOperation.run(monitor); diffFile = diffOperation.getFile(); } catch (Exception e) {} if (diffOperation.isCanceled() || monitor.isCanceled()) { return null; } } initLabels(); ITypedElement left = new SVNLocalResourceNode(resource); ResourceEditionNode right = new ResourceEditionNode(remoteResource, pegRevision); if(left.getType()==ITypedElement.FOLDER_TYPE){ right.setLocalResource((SVNLocalResourceNode) left); } if(right.getType()==ITypedElement.FOLDER_TYPE){ ((SVNLocalResourceNode)left).setRemoteResource((ResourceEditionNode) right); } String localCharset = Utilities.getCharset(resource.getIResource()); try { right.setCharset(localCharset); } catch (CoreException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } if (SVNRevision.BASE.equals(remoteRevision)) { return new StatusAwareDifferencer().findDifferences(false, monitor,null,null,left,right); } return new RevisionAwareDifferencer((SVNLocalResourceNode)left,right, diffFile, pegRevision).findDifferences(false, monitor,null,null,left,right); } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#doSave(org.eclipse.core.runtime.IProgressMonitor) */ public void doSave(IProgressMonitor monitor) { try { saveChanges(monitor); } catch (CoreException e) { Utils.handle(e); } } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#doSaveAs() */ public void doSaveAs() { // noop } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#isDirty() */ public boolean isDirty() { return isSaveNeeded(); } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#isSaveAsAllowed() */ public boolean isSaveAsAllowed() { return false; } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#isSaveOnCloseNeeded() */ public boolean isSaveOnCloseNeeded() { return true; } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#addPropertyListener(org.eclipse.ui.IPropertyListener) */ public void addPropertyListener(IPropertyListener listener) { } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) */ public void createPartControl(Composite parent) { createContents(parent); } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#dispose() */ public void dispose() { } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#getSite() */ public IWorkbenchPartSite getSite() { return null; } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#getTitleToolTip() */ public String getTitleToolTip() { return null; } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#removePropertyListener(org.eclipse.ui.IPropertyListener) */ public void removePropertyListener(IPropertyListener listener) { } public void setDiffOperation( ShowDifferencesAsUnifiedDiffOperationWC diffOperation) { this.diffOperation = diffOperation; } public void setDiffFile(File diffFile) { this.diffFile = diffFile; } public boolean canRunAsJob() { return true; } } SVNLocalCompareSummaryInput.java000066400000000000000000000274351203611042400433430ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comparepackage org.tigris.subversion.subclipse.ui.compare; import java.io.File; import java.util.ArrayList; import java.util.List; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.ITypedElement; import org.eclipse.compare.structuremergeviewer.DiffNode; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.swt.widgets.Composite; import org.eclipse.team.ui.ISaveableWorkbenchPart; import org.eclipse.ui.IPropertyListener; import org.eclipse.ui.IWorkbenchPartSite; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.client.StatusAndInfoCommand; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.RemoteFolder; import org.tigris.subversion.subclipse.core.resources.RemoteResourceStatus; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.compare.internal.Utilities; import org.tigris.subversion.subclipse.ui.internal.Utils; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNDiffSummary; import org.tigris.subversion.svnclientadapter.SVNNodeKind; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNStatusKind; import org.tigris.subversion.svnclientadapter.SVNDiffSummary.SVNDiffKind; public class SVNLocalCompareSummaryInput extends SVNAbstractCompareEditorInput implements ISaveableWorkbenchPart { private ISVNLocalResource[] resources; private final SVNRevision remoteRevision; private ISVNRemoteFolder[] remoteFolders; private boolean readOnly; public SVNLocalCompareSummaryInput(ISVNLocalResource[] resources, SVNRevision remoteRevision) throws SVNException { super(new CompareConfiguration()); this.resources = resources; this.remoteRevision = remoteRevision; remoteFolders = new RemoteFolder[resources.length]; for (int i = 0; i < resources.length; i++) { remoteFolders[i] = new RemoteFolder(resources[i].getRepository(), resources[i].getUrl(), remoteRevision); } } /** * initialize the labels : the title, the lft label and the right one */ private void initLabels() { CompareConfiguration cc = getCompareConfiguration(); cc.setLeftEditable(! readOnly); cc.setRightEditable(false); String title; String leftLabel; String rightLabel; if (resources.length > 1) { title = Policy.bind("SVNLocalBaseCompareInput.0") + remoteRevision; //$NON-NLS-1$ leftLabel = Policy.bind("SVNLocalBaseCompareInput.1"); //$NON-NLS-1$ rightLabel = remoteRevision.toString(); } else { title = Policy.bind("SVNCompareRevisionsInput.compareResourceAndVersions", new Object[] {resources[0].getName()}); //$NON-NLS-1$ leftLabel = Policy.bind("SVNCompareRevisionsInput.workspace", new Object[] {resources[0].getName()}); //$NON-NLS-1$ rightLabel = Policy.bind("SVNCompareRevisionsInput.repository", new Object[] {resources[0].getName()}); //$NON-NLS-1$ } setTitle(title); cc.setLeftLabel(leftLabel); cc.setRightLabel(rightLabel); } /** * Runs the compare operation and returns the compare result. */ protected Object prepareInput(IProgressMonitor monitor) throws InterruptedException { initLabels(); try { monitor.beginTask(Policy.bind("SVNCompareEditorInput.comparing"), 30); //$NON-NLS-1$ IProgressMonitor sub = new SubProgressMonitor(monitor, 30); sub.beginTask(Policy.bind("SVNCompareEditorInput.comparing"), 100); //$NON-NLS-1$ Object[] result = new Object[] { null }; ArrayList resourceSummaryNodeList = new ArrayList(); ArrayList summaryEditionNodeList = new ArrayList(); ISVNClientAdapter client = null; try { for (int i = 0; i < resources.length; i++) { ISVNLocalResource resource = resources[i]; ISVNRemoteFolder remoteFolder = remoteFolders[i]; SVNDiffSummary[] diffSummary = null; if (remoteFolder.getRevision().equals(SVNRevision.HEAD) && remoteFolder.getUrl().equals(resource.getUrl())) { StatusAndInfoCommand cmd = new StatusAndInfoCommand(SVNWorkspaceRoot.getSVNResourceFor( resource.getResource() ), true, false, true ); cmd.run(monitor); RemoteResourceStatus[] statuses = cmd.getRemoteResourceStatuses(); diffSummary = getDiffSummary(statuses, resource); } else { client = SVNProviderPlugin.getPlugin().getSVNClientManager().getSVNClient(); diffSummary = client.diffSummarize(new File(resource.getResource().getLocation().toString()), remoteFolder.getUrl(), remoteFolder.getRevision(), true); SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); client = null; } if (diffSummary != null && diffSummary.length > 0) { diffSummary = getDiffSummaryWithSubfolders(diffSummary); ITypedElement left = new SVNLocalResourceSummaryNode(resource, diffSummary, resource.getResource().getLocation().toString()); SummaryEditionNode right = new SummaryEditionNode(remoteFolder); right.setName(resource.getFile().getName()); right.setRootFolder((RemoteFolder)remoteFolder); right.setNodeType(SummaryEditionNode.RIGHT); right.setRoot(true); right.setDiffSummary(diffSummary); String localCharset = Utilities.getCharset(resource.getIResource()); try { right.setCharset(localCharset); } catch (CoreException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } resourceSummaryNodeList.add(left); summaryEditionNodeList.add(right); } } if (resourceSummaryNodeList.size() == 0) { result[0] = null; } else { Object[] resourceSummaryNodes = new Object[resourceSummaryNodeList.size()]; resourceSummaryNodeList.toArray(resourceSummaryNodes); Object[] summaryEditionNodes = new Object[summaryEditionNodeList.size()]; summaryEditionNodeList.toArray(summaryEditionNodes); MultipleSelectionNode left = new MultipleSelectionNode(resourceSummaryNodes); MultipleSelectionNode right = new MultipleSelectionNode(summaryEditionNodes); result[0] = new SummaryDifferencer().findDifferences(false, monitor, null, null, left, right); } } finally { sub.done(); if (client != null) { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } } if (result[0] instanceof DiffNode) { DiffNode diffNode = (DiffNode)result[0]; if (!diffNode.hasChildren()) { return null; } } return result[0]; } catch (OperationCanceledException e) { throw new InterruptedException(e.getMessage()); } catch (Exception e) { return e.getMessage(); } finally { monitor.done(); } } private SVNDiffSummary[] getDiffSummary(RemoteResourceStatus[] statuses, ISVNLocalResource resource) { List diffSummaryList = new ArrayList(); int rootPathLength = resource.getResource().getLocation().toString().length() + 1; for (int i = 0; i < statuses.length; i++) { if (statuses[i].getFile() != null && !statuses[i].getNodeKind().equals(SVNNodeKind.DIR)) { SVNStatusKind textStatus = statuses[i].getTextStatus(); boolean propertyChanges = !statuses[i].getPropStatus().equals(SVNStatusKind.NORMAL) && !statuses[i].getPropStatus().equals(SVNStatusKind.NONE); boolean localChanges = false; if (textStatus.equals(SVNStatusKind.NONE) && propertyChanges && statuses[i].getNodeKind().equals(SVNNodeKind.FILE)) { IFile file = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(new Path(statuses[i].getPath())); if (file != null) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(file); try { LocalResourceStatus localStatus = svnResource.getStatus(); if (localStatus != null) { localChanges = localStatus.isAdded() || localStatus.isDirty(); } } catch (SVNException e) {} } } if (!textStatus.equals(SVNStatusKind.NONE) || !propertyChanges || localChanges) { SVNDiffKind diffKind = null; if (statuses[i].getTextStatus().equals(SVNStatusKind.ADDED)) diffKind = SVNDiffKind.ADDED; else if (statuses[i].getTextStatus().equals(SVNStatusKind.DELETED)) diffKind = SVNDiffKind.DELETED; else diffKind = SVNDiffKind.MODIFIED; SVNDiffSummary diffSummary = new SVNDiffSummary(statuses[i].getPath().substring(rootPathLength).replaceAll("\\\\", "/"), diffKind, propertyChanges, statuses[i].getNodeKind().toInt()); //$NON-NLS-1$ //$NON-NLS-2$ diffSummaryList.add(diffSummary); } } } SVNDiffSummary[] diffSummaries = new SVNDiffSummary[diffSummaryList.size()]; diffSummaryList.toArray(diffSummaries); return diffSummaries; } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#doSave(org.eclipse.core.runtime.IProgressMonitor) */ public void doSave(IProgressMonitor monitor) { try { saveChanges(monitor); } catch (CoreException e) { Utils.handle(e); } } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#doSaveAs() */ public void doSaveAs() { // noop } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#isDirty() */ public boolean isDirty() { return isSaveNeeded(); } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#isSaveAsAllowed() */ public boolean isSaveAsAllowed() { return false; } /* (non-Javadoc) * @see org.eclipse.ui.ISaveablePart#isSaveOnCloseNeeded() */ public boolean isSaveOnCloseNeeded() { return true; } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#addPropertyListener(org.eclipse.ui.IPropertyListener) */ public void addPropertyListener(IPropertyListener listener) { } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) */ public void createPartControl(Composite parent) { createContents(parent); } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#dispose() */ public void dispose() { } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#getSite() */ public IWorkbenchPartSite getSite() { return null; } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#getTitleToolTip() */ public String getTitleToolTip() { return null; } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#removePropertyListener(org.eclipse.ui.IPropertyListener) */ public void removePropertyListener(IPropertyListener listener) { } public boolean canRunAsJob() { return true; } private SVNDiffSummary[] getDiffSummaryWithSubfolders(SVNDiffSummary[] diffSummary) { ArrayList paths = new ArrayList(); ArrayList diffs = new ArrayList(); for (int i = 0; i < diffSummary.length; i++) { paths.add(diffSummary[i].getPath()); diffs.add(diffSummary[i]); } for (int i = 0; i < diffSummary.length; i++) { File file = new File(diffSummary[i].getPath()); while (file.getParentFile() != null) { file = file.getParentFile(); String path = file.getPath(); path = path.replaceAll("\\\\", "/"); //$NON-NLS-1$ //$NON-NLS-2$ if (!paths.contains(path)) { paths.add(path); SVNDiffSummary folder = new SVNDiffSummary(path, SVNDiffKind.NORMAL, false, SVNNodeKind.DIR.toInt()); diffs.add(folder); } } } diffSummary = new SVNDiffSummary[diffs.size()]; diffs.toArray(diffSummary); return diffSummary; } } SVNLocalResourceNode.java000066400000000000000000000113731203611042400417460ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comparepackage org.tigris.subversion.subclipse.ui.compare; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import org.eclipse.compare.ITypedElement; import org.eclipse.compare.ResourceNode; import org.eclipse.compare.structuremergeviewer.IStructureComparator; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.subclipse.core.ISVNFolder; import org.tigris.subversion.subclipse.core.ISVNLocalFolder; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; /** * Node representing a local SVN file. We can query the status of the resource to determine if * it has changed. It is also used to write the contents back to the file when setContent is called. */ public class SVNLocalResourceNode extends ResourceNode { private final ISVNLocalResource svnResource; private ResourceEditionNode remoteResource = null; private ArrayList fChildren = null; public SVNLocalResourceNode(ISVNLocalResource svnResource) { super(svnResource.getIResource()); this.svnResource = svnResource; } protected InputStream createStream() throws CoreException { return ((IFile)getResource()).getContents(); } public ISVNLocalResource getLocalResource() { return svnResource; } public void setRemoteResource(ResourceEditionNode remote) { remoteResource = remote; } // @Override public String getName() { String name = svnResource.getFile().getName(); if (name == null) { name = svnResource.getName(); } if (name != null) { return name; } return super.getName(); } // used by getContentsAction public void setContent(byte[] contents) { if (contents == null) contents = new byte[0]; final InputStream is = new ByteArrayInputStream(contents); IRunnableWithProgress runnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { try { IFile file = (IFile)getResource(); if (is != null) { if (!file.exists()) { file.create(is, false, monitor); } else { file.setContents(is, false, true, monitor); } } else { file.delete(false, true, monitor); } } catch (CoreException e) { throw new InvocationTargetException(e); } } }; try { new ProgressMonitorDialog(Display.getDefault().getActiveShell()).run(false, false, runnable); } catch (InvocationTargetException e) { SVNUIPlugin.openError(SVNUIPlugin.getPlugin().getWorkbench().getActiveWorkbenchWindow().getShell(), Policy.bind("TeamFile.saveChanges", svnResource.getName()), null, e); //$NON-NLS-1$ } catch (InterruptedException e) { // Ignore } fireContentChanged(); } public Object[] getChildren() { if (fChildren == null) { fChildren= new ArrayList(); if (remoteResource instanceof ResourceEditionNode) { try { if (!getLocalResource().isDirty() && getLocalResource().getResource().getProjectRelativePath().toString().equals(remoteResource.getRemoteResource().getProjectRelativePath()) && getLocalResource().getStatus().getLastChangedRevision().equals(remoteResource.getRemoteResource().getLastChangedRevision())) { return fChildren.toArray(); } } catch(CoreException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } if (svnResource instanceof ISVNLocalFolder) { try { ISVNLocalResource[] members = (ISVNLocalResource[])((ISVNLocalFolder)svnResource).members(null, ISVNFolder.ALL_EXISTING_UNIGNORED_MEMBERS); for (int i= 0; i < members.length; i++) { IStructureComparator child= createChild(members[i]); if (child != null) fChildren.add(child); } } catch (CoreException ex) { // NeedWork } } } return fChildren.toArray(); } /* (non-Javadoc) * @see org.eclipse.compare.ResourceNode#createChild(org.eclipse.core.resources.IResource) */ protected IStructureComparator createChild(ISVNLocalResource child) { return new SVNLocalResourceNode(child); } public ITypedElement replace(ITypedElement child, ITypedElement other) { return null; } } SVNLocalResourceSummaryNode.java000066400000000000000000000112501203611042400433160ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comparepackage org.tigris.subversion.subclipse.ui.compare; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import org.eclipse.compare.ITypedElement; import org.eclipse.compare.ResourceNode; import org.eclipse.compare.structuremergeviewer.IStructureComparator; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.subclipse.core.ISVNFolder; import org.tigris.subversion.subclipse.core.ISVNLocalFolder; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.SVNDiffSummary; public class SVNLocalResourceSummaryNode extends ResourceNode { private final ISVNLocalResource svnResource; private ArrayList fChildren = null; private SVNDiffSummary[] diffSummary; private String rootLocation; public SVNLocalResourceSummaryNode(ISVNLocalResource svnResource, SVNDiffSummary[] diffSummary, String rootLocation) { super(svnResource.getIResource()); this.svnResource = svnResource; this.diffSummary = diffSummary; this.rootLocation = rootLocation; } protected InputStream createStream() throws CoreException { return ((IFile)getResource()).getContents(); } public ISVNLocalResource getLocalResource() { return svnResource; } // @Override public String getName() { String name = null; try { ISVNRemoteResource baseResource = svnResource.getBaseResource(); if (baseResource != null) { name = baseResource.getName(); } } catch (SVNException e) {} if (name != null) { return name; } return super.getName(); } // used by getContentsAction public void setContent(byte[] contents) { if (contents == null) contents = new byte[0]; final InputStream is = new ByteArrayInputStream(contents); IRunnableWithProgress runnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { try { IFile file = (IFile)getResource(); if (is != null) { if (!file.exists()) { file.create(is, false, monitor); } else { file.setContents(is, false, true, monitor); } } else { file.delete(false, true, monitor); } } catch (CoreException e) { throw new InvocationTargetException(e); } } }; try { new ProgressMonitorDialog(Display.getDefault().getActiveShell()).run(false, false, runnable); } catch (InvocationTargetException e) { SVNUIPlugin.openError(SVNUIPlugin.getPlugin().getWorkbench().getActiveWorkbenchWindow().getShell(), Policy.bind("TeamFile.saveChanges", svnResource.getName()), null, e); //$NON-NLS-1$ } catch (InterruptedException e) { // Ignore } fireContentChanged(); } public Object[] getChildren() { if (fChildren == null) { fChildren= new ArrayList(); if (svnResource instanceof ISVNLocalFolder) { try { ISVNLocalResource[] members = (ISVNLocalResource[])((ISVNLocalFolder)svnResource).members(null, ISVNFolder.ALL_EXISTING_UNIGNORED_MEMBERS); for (int i= 0; i < members.length; i++) { if (include(members[i])) { IStructureComparator child= createChild(members[i]); if (child != null) fChildren.add(child); } } } catch (CoreException ex) { // NeedWork } } } return fChildren.toArray(); } /* (non-Javadoc) * @see org.eclipse.compare.ResourceNode#createChild(org.eclipse.core.resources.IResource) */ protected IStructureComparator createChild(ISVNLocalResource child) { return new SVNLocalResourceSummaryNode(child, diffSummary, rootLocation); } public ITypedElement replace(ITypedElement child, ITypedElement other) { return null; } private boolean include(ISVNLocalResource member) { String relativeLocation = member.getResource().getLocation().toString().substring(rootLocation.length() + 1); for (int i = 0; i < diffSummary.length; i++) { if (diffSummary[i].getPath().equals(relativeLocation)) { return true; } } return false; } }StatusAwareDifferencer.java000066400000000000000000000020051203611042400423770ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comparepackage org.tigris.subversion.subclipse.ui.compare; import org.eclipse.compare.structuremergeviewer.Differencer; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; public class StatusAwareDifferencer extends Differencer { /* (non-Javadoc) * @see org.eclipse.compare.structuremergeviewer.Differencer#contentsEqual(java.lang.Object, java.lang.Object) */ protected boolean contentsEqual(Object left, Object right) { ISVNLocalResource local = null; if (left instanceof SVNLocalResourceNode) { local = ((SVNLocalResourceNode)left).getLocalResource(); } if (local == null || right == null) { return false; } try { if (!local.isManaged()) { return false; } return !(local.isDirty()); } catch (SVNException e) { } return super.contentsEqual(left, right); } } SummaryDifferencer.java000066400000000000000000000014651203611042400416020ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comparepackage org.tigris.subversion.subclipse.ui.compare; import org.eclipse.compare.ITypedElement; import org.eclipse.compare.structuremergeviewer.Differencer; import org.eclipse.core.runtime.IProgressMonitor; import org.tigris.subversion.subclipse.ui.Policy; public class SummaryDifferencer extends Differencer { public SummaryDifferencer() { super(); } protected boolean contentsEqual(Object input1, Object input2) { return false; } protected void updateProgress(IProgressMonitor progressMonitor, Object node) { if (node instanceof ITypedElement) { ITypedElement element = (ITypedElement)node; progressMonitor.subTask(Policy.bind("CompareEditorInput.fileProgress", new String[] {element.getName()})); //$NON-NLS-1$ progressMonitor.worked(1); } } } SummaryEditionNode.java000066400000000000000000000255721203611042400415740ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/comparepackage org.tigris.subversion.subclipse.ui.compare; import java.io.ByteArrayInputStream; import java.io.File; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Arrays; import org.eclipse.compare.CompareUI; import org.eclipse.compare.IEncodedStreamContentAccessor; import org.eclipse.compare.IStreamContentAccessor; import org.eclipse.compare.ITypedElement; import org.eclipse.compare.structuremergeviewer.IStructureComparator; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.graphics.Image; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.resources.RemoteFile; import org.tigris.subversion.subclipse.core.resources.RemoteFolder; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.SVNDiffSummary; import org.tigris.subversion.svnclientadapter.SVNNodeKind; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; import org.tigris.subversion.svnclientadapter.SVNDiffSummary.SVNDiffKind; public class SummaryEditionNode implements IStructureComparator, ITypedElement, IStreamContentAccessor, IEncodedStreamContentAccessor, Comparable { private ISVNRemoteResource resource; private SVNRevision pegRevision; private SummaryEditionNode[] children; private String charset = "UTF8"; private SVNDiffSummary[] diffSummary; private boolean root; private RemoteFolder rootFolder; private int nodeType = LEFT; private String name; public final static int LEFT = 0; public final static int RIGHT = 1; public SummaryEditionNode(ISVNRemoteResource resourceEdition) { this(resourceEdition, SVNRevision.HEAD); } public SummaryEditionNode(ISVNRemoteResource resourceEdition, SVNRevision pegRevision) { this.resource = resourceEdition; this.pegRevision = pegRevision; if (pegRevision == null) { pegRevision = SVNRevision.HEAD; } if (resource instanceof RemoteFolder) { ((RemoteFolder)resource).setPegRevision(pegRevision); } } public void setName(String name) { this.name = name; } public ISVNRemoteResource getRemoteResource() { return resource; } public boolean equals(Object other) { if (other instanceof ITypedElement) { String otherName = ((ITypedElement) other).getName(); return getName().equals(otherName); } return super.equals(other); } public Object[] getChildren() { if (children == null) { try { if (root) { children = getRoots(); } else if (!resource.isContainer()) children = new SummaryEditionNode[0]; else children = getChildNodes(); }catch (Exception e) {} } return children; } private SummaryEditionNode[] getChildNodes() throws Exception { ArrayList childNodes = new ArrayList(); for (int i = 0; i < diffSummary.length; i++) { if (include(diffSummary[i])) { if (diffSummary[i].getNodeKind() == SVNNodeKind.DIR.toInt()) { RemoteFolder remoteFolder = null; if (resource.getRevision() instanceof SVNRevision.Number) remoteFolder = new RemoteFolder(null, resource.getRepository(), new SVNUrl(rootFolder.getUrl().toString() + "/" + diffSummary[i].getPath()), resource.getRevision(), (SVNRevision.Number)resource.getRevision(), null, null); else remoteFolder = new RemoteFolder(resource.getRepository(), new SVNUrl(rootFolder.getUrl().toString() + "/" + diffSummary[i].getPath()), resource.getRevision()); remoteFolder.setPegRevision(pegRevision); if (isChild(remoteFolder)) { SummaryEditionNode node = new SummaryEditionNode(remoteFolder, pegRevision); node.setDiffSummary(diffSummary); node.setRootFolder(rootFolder); node.setNodeType(nodeType); childNodes.add(node); } } else { RemoteFile remoteFile = null; if (resource.getRevision() instanceof SVNRevision.Number) remoteFile = new RemoteFile(null, resource.getRepository(), new SVNUrl(rootFolder.getUrl().toString() + "/" + diffSummary[i].getPath()), resource.getRevision(), (SVNRevision.Number)resource.getRevision(), null, null); else remoteFile = new RemoteFile(resource.getRepository(), new SVNUrl(rootFolder.getUrl().toString() + "/" + diffSummary[i].getPath()), resource.getRevision()); remoteFile.setPegRevision(pegRevision); if (isChild(remoteFile)) { SummaryEditionNode node = new SummaryEditionNode(remoteFile, pegRevision); node.setDiffSummary(diffSummary); node.setRootFolder(rootFolder); node.setNodeType(nodeType); childNodes.add(node); } } } } SummaryEditionNode[] childNodeArray = new SummaryEditionNode[childNodes.size()]; childNodes.toArray(childNodeArray); Arrays.sort(childNodeArray); return childNodeArray; } private boolean isChild(ISVNRemoteResource remoteResource) { File parentFile = new File(resource.getRepositoryRelativePath()); File childFile = new File(remoteResource.getRepositoryRelativePath()); if (childFile.getParent() != null && childFile.getParentFile().equals(parentFile)) return true; else return false; } private SummaryEditionNode[] getRoots() throws Exception { ArrayList roots = new ArrayList(); for (int i = 0; i < diffSummary.length; i++) { if (include(diffSummary[i])) { File file = new File(diffSummary[i].getPath()); if (file.getParent() == null) { if (diffSummary[i].getNodeKind() == SVNNodeKind.DIR.toInt()) { RemoteFolder remoteFolder = null; if (resource.getRevision() instanceof SVNRevision.Number) remoteFolder = new RemoteFolder(null, resource.getRepository(), new SVNUrl(resource.getUrl().toString() + "/" + diffSummary[i].getPath()), resource.getRevision(), (SVNRevision.Number)resource.getRevision(), null, null); else remoteFolder = new RemoteFolder(resource.getRepository(), new SVNUrl(resource.getUrl().toString() + "/" + diffSummary[i].getPath()), resource.getRevision()); remoteFolder.setPegRevision(pegRevision); SummaryEditionNode node = new SummaryEditionNode(remoteFolder, pegRevision); node.setDiffSummary(diffSummary); node.setRootFolder((RemoteFolder)resource); node.setNodeType(nodeType); roots.add(node); } else { RemoteFile remoteFile = null; if (resource.getRevision() instanceof SVNRevision.Number) remoteFile = new RemoteFile(null, resource.getRepository(), new SVNUrl(resource.getUrl().toString() + "/" + diffSummary[i].getPath()), resource.getRevision(), (SVNRevision.Number)resource.getRevision(), null, null); else remoteFile = new RemoteFile(resource.getRepository(), new SVNUrl(resource.getUrl().toString() + "/" + diffSummary[i].getPath()), resource.getRevision()); remoteFile.setPegRevision(pegRevision); SummaryEditionNode node = new SummaryEditionNode(remoteFile, pegRevision); node.setDiffSummary(diffSummary); node.setRootFolder((RemoteFolder)resource); node.setNodeType(nodeType); // System.out.println(resource.getResource().getFullPath() + "/" + diffSummary[i].getPath()); // IFile localFile = ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(resource.getResource().getFullPath() + "/" + diffSummary[i].getPath())); // if (localFile != null) { // System.out.println(localFile.getProjectRelativePath()); // } roots.add(node); } } else { while (file.getParent() != null) { file = file.getParentFile(); } String path = file.getPath(); if (!roots.contains(path)) { RemoteFolder remoteFolder = null; if (resource.getRevision() instanceof SVNRevision.Number) remoteFolder = new RemoteFolder(null, resource.getRepository(), new SVNUrl(resource.getUrl().toString() + "/" + path), resource.getRevision(), (SVNRevision.Number)resource.getRevision(), null, null); else remoteFolder = new RemoteFolder(resource.getRepository(), new SVNUrl(resource.getUrl().toString() + "/" + path), resource.getRevision()); SummaryEditionNode node = new SummaryEditionNode(remoteFolder, pegRevision); node.setDiffSummary(diffSummary); node.setRootFolder((RemoteFolder)resource); node.setNodeType(nodeType); roots.add(node); } } } } SummaryEditionNode[] rootArray = new SummaryEditionNode[roots.size()]; roots.toArray(rootArray); Arrays.sort(rootArray); return rootArray; } public InputStream getContents() throws CoreException { if (resource == null || resource.isContainer()) { return null; } try { final InputStream[] holder = new InputStream[1]; SVNUIPlugin.runWithProgress(null, true, new IRunnableWithProgress() { public void run(IProgressMonitor monitor) { try { holder[0] = resource.getStorage(monitor).getContents(); } catch (CoreException e1) { // SVNUIPlugin.log(e1); } } }); return holder[0]; } catch (InterruptedException e) { // operation canceled } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if (t instanceof TeamException) { throw new CoreException(((TeamException) t).getStatus()); } // should not get here } return new ByteArrayInputStream(new byte[0]); } public Image getImage() { return CompareUI.getImage(resource); } public String getName() { if (name != null) { return name; } return resource == null ? "" : resource.getName(); //$NON-NLS-1$ } public String getType() { if (resource == null) { return UNKNOWN_TYPE; } if (resource.isContainer()) { return FOLDER_TYPE; } String name = resource.getName(); name = name.substring(name.lastIndexOf('.') + 1); return name.length() == 0 ? UNKNOWN_TYPE : name; } public int hashCode() { return getName().hashCode(); } public String getCharset() throws CoreException { return charset; } public void setCharset(String charset) throws CoreException { this.charset = charset; } public void setDiffSummary(SVNDiffSummary[] diffSummary) { this.diffSummary = diffSummary; } public void setRoot(boolean root) { this.root = root; } public int compareTo(Object obj) { if (obj instanceof SummaryEditionNode) { SummaryEditionNode compareTo = (SummaryEditionNode)obj; return resource.getRepositoryRelativePath().compareTo(compareTo.getRemoteResource().getRepositoryRelativePath()); } return 0; } public String toString() { return resource.toString(); } public void setRootFolder(RemoteFolder rootFolder) { this.rootFolder = rootFolder; } public void setNodeType(int nodeType) { this.nodeType = nodeType; } private boolean include(SVNDiffSummary diff) { if (diff.getDiffKind().equals(SVNDiffKind.ADDED) && nodeType == LEFT) return false; if (diff.getDiffKind().equals(SVNDiffKind.DELETED) && nodeType == RIGHT) return false; return true; } }UIBaseResourceStorage.java000066400000000000000000000024311203611042400421470ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/compare/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.compare; import org.eclipse.compare.IEncodedStreamContentAccessor; import org.tigris.subversion.subclipse.core.resources.BaseResource; import org.tigris.subversion.subclipse.core.resources.BaseResourceStorage; /** * This class does not add any functionality. It just adds the UI dependent interface * IEncodedStreamContentAccessor. * @see org.tigris.subversion.subclipse.core.resources.BaseResourceStorageFactory#current() */ public class UIBaseResourceStorage extends BaseResourceStorage implements IEncodedStreamContentAccessor { /** Do not use this constructor directly. * @param baseResource */ protected UIBaseResourceStorage(BaseResource baseResource) { super(baseResource); } } UIBaseResourceStorageFactory.java000066400000000000000000000026051203611042400435020ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/compare/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.compare; import org.tigris.subversion.subclipse.core.resources.BaseResource; import org.tigris.subversion.subclipse.core.resources.BaseResourceStorage; import org.tigris.subversion.subclipse.core.resources.IBaseResourceStorageFactory; /** * This factory creates instances that has UI specific dependencies */ public class UIBaseResourceStorageFactory implements IBaseResourceStorageFactory { /** * Creates a {@link org.tigris.subversion.subclipse.core.resources.BaseResourceStorage BaseResourceStorage} implementation * that implements the {@link org.eclipse.compare.IEncodedStreamContentAccessor IEncodedStreamContentAccessor} interface. * @return The created instance. */ public BaseResourceStorage createResourceStorage(BaseResource baseResource) { return new UIBaseResourceStorage(baseResource); } } 000077500000000000000000000000001203611042400367535ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/compare/internalBufferedResourceNode.java000066400000000000000000000065031203611042400436620ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/compare/internal/******************************************************************************* * copied from: org.eclipse.compare.internal.BufferedResourceNode * * Copyright (c) 2000, 2004 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.tigris.subversion.subclipse.ui.compare.internal; import java.io.*; import org.eclipse.core.resources.*; import org.eclipse.core.runtime.*; import org.eclipse.compare.*; import org.eclipse.compare.structuremergeviewer.IStructureComparator; /** * A buffer for a workspace resource. */ public class BufferedResourceNode extends ResourceNode { private boolean fDirty= false; private IFile fDeleteFile; /** * Creates a ResourceNode for the given resource. * * @param resource the resource */ public BufferedResourceNode(IResource resource) { super(resource); } /* * Returns true if buffer contains uncommitted changes. */ public boolean isDirty() { return fDirty; } protected IStructureComparator createChild(IResource child) { return new BufferedResourceNode(child); } public void setContent(byte[] contents) { fDirty= true; super.setContent(contents); } /* * Commits buffered contents to resource. */ public void commit(IProgressMonitor pm) throws CoreException { if (fDirty) { if (fDeleteFile != null) { fDeleteFile.delete(true, true, pm); return; } IResource resource= getResource(); if (resource instanceof IFile) { byte[] bytes= getContent(); ByteArrayInputStream is= new ByteArrayInputStream(bytes); try { IFile file= (IFile) resource; if (file.exists()) file.setContents(is, false, true, pm); else file.create(is, false, pm); fDirty= false; } finally { if (is != null) try { is.close(); } catch(IOException ex) { // Silently ignored } } } } } public ITypedElement replace(ITypedElement child, ITypedElement other) { if (child == null) { // add resource // create a node without a resource behind it! IResource resource= getResource(); if (resource instanceof IFolder) { IFolder folder= (IFolder) resource; IFile file= folder.getFile(other.getName()); child= new BufferedResourceNode(file); } } if (other == null) { // delete resource IResource resource= getResource(); if (resource instanceof IFolder) { IFolder folder= (IFolder) resource; IFile file= folder.getFile(child.getName()); if (file != null && file.exists()) { fDeleteFile= file; fDirty= true; } } return null; } if (other instanceof IStreamContentAccessor && child instanceof IEditableContent) { IEditableContent dst= (IEditableContent) child; try { InputStream is= ((IStreamContentAccessor)other).getContents(); byte[] bytes= Utilities.readBytes(is); if (bytes != null) dst.setContent(bytes); } catch (CoreException ex) { // NeedWork } } return child; } } Utilities.java000066400000000000000000000244351203611042400416010ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/compare/internal/******************************************************************************* * copied from: org.eclipse.compare.internal.Utilities * * Copyright (c) 2000, 2004 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.tigris.subversion.subclipse.ui.compare.internal; import java.io.BufferedReader; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.UnsupportedEncodingException; import java.text.MessageFormat; import java.util.ArrayList; import java.util.MissingResourceException; import java.util.ResourceBundle; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.CompareUI; import org.eclipse.compare.IEncodedStreamContentAccessor; import org.eclipse.compare.IStreamContentAccessor; import org.eclipse.core.resources.IEncodedStorage; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Widget; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPartSite; /** * Convenience and utility methods. */ public class Utilities { public static IWorkbenchPartSite findSite(Control c) { while (c != null && !c.isDisposed()) { Object data= c.getData(); if (data instanceof IWorkbenchPart) return ((IWorkbenchPart)data).getSite(); c= c.getParent(); } return null; } public static void setEnableComposite(Composite composite, boolean enable) { Control[] children= composite.getChildren(); for (int i= 0; i < children.length; i++) children[i].setEnabled(enable); } public static boolean getBoolean(CompareConfiguration cc, String key, boolean dflt) { if (cc != null) { Object value= cc.getProperty(key); if (value instanceof Boolean) return ((Boolean) value).booleanValue(); } return dflt; } public static boolean okToUse(Widget widget) { return widget != null && !widget.isDisposed(); } private static ArrayList internalGetResources(ISelection selection, Class type) { ArrayList tmp= new ArrayList(); if (selection instanceof IStructuredSelection) { Object[] s= ((IStructuredSelection)selection).toArray(); for (int i= 0; i < s.length; i++) { IResource resource= null; Object o= s[i]; if (type.isInstance(o)) { resource= (IResource) o; } else if (o instanceof IAdaptable) { IAdaptable a= (IAdaptable) o; Object adapter= a.getAdapter(IResource.class); if (type.isInstance(adapter)) resource= (IResource) adapter; } if (resource != null && resource.isAccessible()) tmp.add(resource); } } return tmp; } /* * Convenience method: extract all accessible IResources from given selection. * Never returns null. */ public static IResource[] getResources(ISelection selection) { ArrayList tmp= internalGetResources(selection, IResource.class); return (IResource[]) tmp.toArray(new IResource[tmp.size()]); } /* * Convenience method: extract all accessible IFiles from given selection. * Never returns null. */ public static IFile[] getFiles(ISelection selection) { ArrayList tmp= internalGetResources(selection, IFile.class); return (IFile[]) tmp.toArray(new IFile[tmp.size()]); } public static byte[] readBytes(InputStream in) { ByteArrayOutputStream bos= new ByteArrayOutputStream(); try { while (true) { int c= in.read(); if (c == -1) break; bos.write(c); } } catch (IOException ex) { return null; } finally { Utilities.close(in); try { bos.close(); } catch (IOException x) { // silently ignored } } return bos.toByteArray(); } public static String getIconPath(Display display) { return "icons/full/"; //$NON-NLS-1$ } public static void initToggleAction(IAction a, ResourceBundle bundle, String prefix, boolean checked) { String tooltip= null; if (checked) tooltip= getString(bundle, prefix + "tooltip.checked", null); //$NON-NLS-1$ else tooltip= getString(bundle, prefix + "tooltip.unchecked", null); //$NON-NLS-1$ if (tooltip == null) tooltip= getString(bundle, prefix + "tooltip", null); //$NON-NLS-1$ if (tooltip != null) a.setToolTipText(tooltip); String description= null; if (checked) description= getString(bundle, prefix + "description.checked", null); //$NON-NLS-1$ else description= getString(bundle, prefix + "description.unchecked", null); //$NON-NLS-1$ if (description == null) description= getString(bundle, prefix + "description", null); //$NON-NLS-1$ if (description != null) a.setDescription(description); } public static String getString(ResourceBundle bundle, String key, String dfltValue) { if (bundle != null) { try { return bundle.getString(key); } catch (MissingResourceException x) { // NeedWork } } return dfltValue; } public static String getFormattedString(ResourceBundle bundle, String key, String arg) { if (bundle != null) { try { return MessageFormat.format(bundle.getString(key), new String[] { arg }); } catch (MissingResourceException x) { // NeedWork } } return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ } public static String getString(String key) { try { return CompareUI.getResourceBundle().getString(key); } catch (MissingResourceException e) { return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ } } public static String getFormattedString(String key, String arg) { try { return MessageFormat.format(CompareUI.getResourceBundle().getString(key), new String[] { arg }); } catch (MissingResourceException e) { return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ } } public static String getFormattedString(String key, String arg0, String arg1) { try { return MessageFormat.format(CompareUI.getResourceBundle().getString(key), new String[] { arg0, arg1 }); } catch (MissingResourceException e) { return "!" + key + "!";//$NON-NLS-2$ //$NON-NLS-1$ } } public static String getString(ResourceBundle bundle, String key) { return getString(bundle, key, key); } public static int getInteger(ResourceBundle bundle, String key, int dfltValue) { if (bundle != null) { try { String s= bundle.getString(key); if (s != null) return Integer.parseInt(s); } catch (NumberFormatException x) { // NeedWork } catch (MissingResourceException x) { // NeedWork } } return dfltValue; } /** * Answers true if the given selection contains resources that don't * have overlapping paths and false otherwise. */ /* public static boolean isSelectionNonOverlapping() throws TeamException { IResource[] resources = getSelectedResources(); // allow operation for non-overlapping resource selections if(resources.length>0) { List validPaths = new ArrayList(2); for (int i = 0; i < resources.length; i++) { IResource resource = resources[i]; // only allow cvs resources to be selected if(RepositoryProvider.getProvider(resource.getProject(), CVSProviderPlugin.getTypeId()) == null) { return false; } // check if this resource overlaps other selections IPath resourceFullPath = resource.getFullPath(); if(!validPaths.isEmpty()) { for (Iterator it = validPaths.iterator(); it.hasNext();) { IPath path = (IPath) it.next(); if(path.isPrefixOf(resourceFullPath) || resourceFullPath.isPrefixOf(path)) { return false; } } } validPaths.add(resourceFullPath); // ensure that resources are managed ICVSResource cvsResource = CVSWorkspaceRoot.getCVSResourceFor(resource); if(cvsResource.isFolder()) { if( ! ((ICVSFolder)cvsResource).isCVSFolder()) return false; } else { if( ! cvsResource.isManaged()) return false; } } return true; } return false; } */ /* validate edit utilities */ /* * Returns null if an error occurred. */ public static String readString(InputStream is, String encoding) { if (is == null) return null; BufferedReader reader= null; try { StringBuffer buffer= new StringBuffer(); char[] part= new char[2048]; int read= 0; reader= new BufferedReader(new InputStreamReader(is, encoding)); while ((read= reader.read(part)) != -1) buffer.append(part, 0, read); return buffer.toString(); } catch (IOException ex) { // NeedWork } finally { if (reader != null) { try { reader.close(); } catch (IOException ex) { // silently ignored } } } return null; } public static String getCharset(IResource resource) { if (resource instanceof IEncodedStorage) { try { return ((IEncodedStorage)resource).getCharset(); } catch (CoreException ex) { // fall through } } return ResourcesPlugin.getEncoding(); } public static byte[] getBytes(String s, String encoding) { byte[] bytes= null; if (s != null) { try { bytes= s.getBytes(encoding); //$NON-NLS-1$ } catch (UnsupportedEncodingException e) { bytes= s.getBytes(); } } return bytes; } public static String readString(IStreamContentAccessor sa) throws CoreException { InputStream is= sa.getContents(); String encoding= null; if (sa instanceof IEncodedStreamContentAccessor) encoding= ((IEncodedStreamContentAccessor)sa).getCharset(); if (encoding == null) encoding= ResourcesPlugin.getEncoding(); return Utilities.readString(is, encoding); } public static void close(InputStream is) { if (is != null) { try { is.close(); } catch (IOException ex) { // silently ignored } } } } 000077500000000000000000000000001203611042400354755ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflictsBuiltInConflictsCompareInput.java000066400000000000000000000227031203611042400441060ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflicts/******************************************************************************* * Copyright (c) 2009 CollabNet. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * CollabNet - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.conflicts; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.CompareEditorInput; import org.eclipse.compare.IContentChangeListener; import org.eclipse.compare.IContentChangeNotifier; import org.eclipse.compare.ITypedElement; import org.eclipse.compare.structuremergeviewer.DiffNode; import org.eclipse.compare.structuremergeviewer.Differencer; import org.eclipse.compare.structuremergeviewer.IDiffContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.subclipse.core.util.File2Resource; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.compare.internal.Utilities; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; import org.tigris.subversion.svnclientadapter.SVNConflictDescriptor; public class BuiltInConflictsCompareInput extends CompareEditorInput { public static class MyDiffNode extends DiffNode { public MyDiffNode(IDiffContainer parent, int kind, ITypedElement ancestor, ITypedElement left, ITypedElement right) { super(parent, kind, ancestor, left, right); } public void fireChange() { super.fireChange(); } } private Object fRoot; private FileNode fAncestor; private FileNode fLeft; private FileNode fRight; private File fAncestorFile; private File fMineFile; private File fTheirsFile; private File fDestinationFile; private String fileName; private boolean neverSaved = true; private boolean isSaving = false; private boolean finished; private boolean resolved; private int resolution; private SVNConflictDescriptor conflictDescriptor; public BuiltInConflictsCompareInput(CompareConfiguration configuration, SVNConflictDescriptor conflictDescriptor) { super(configuration); this.conflictDescriptor = conflictDescriptor; } public void setResources(File ancestor, File mine, File theirs, File destination, String fileName) { fAncestorFile = ancestor; fMineFile = mine; fTheirsFile = theirs; fDestinationFile = destination; this.fileName = fileName; initializeCompareConfiguration(); } private String getType() { FileNode node = new FileNode(fMineFile); String s = node.getType(); if (s != null) return s; return ITypedElement.UNKNOWN_TYPE; } private void initializeCompareConfiguration() { CompareConfiguration cc = getCompareConfiguration(); cc.setLeftEditable(true); String leftLabel = "Merged - " + fileName; //$NON-NLS-1$ String rightLabel = "Theirs - " + fileName; //$NON-NLS-1$ String ancestorLabel = "Ancestor -" + fileName; //$NON-NLS-1$ cc.setLeftLabel(leftLabel); cc.setRightLabel(rightLabel); cc.setAncestorLabel(ancestorLabel); } protected Object prepareInput(IProgressMonitor pm) throws InvocationTargetException, InterruptedException { try { pm .beginTask( Utilities.getString("ResourceCompare.taskName"), IProgressMonitor.UNKNOWN); //$NON-NLS-1$ String charSet = getCharSet(); fAncestor = new FileNode(fAncestorFile) { public String getType() { return BuiltInConflictsCompareInput.this.getType(); } public boolean isEditable() { return false; } }; fAncestor.setCharSet(charSet); fLeft = new FileNode(fDestinationFile) { public String getType() { return BuiltInConflictsCompareInput.this.getType(); } }; fLeft.setCharSet(charSet); InputStream mineContents = new FileInputStream(fMineFile); byte[] contents; try { contents = new byte[mineContents.available()]; mineContents.read(contents); } finally { mineContents.close(); } fLeft.setContent(contents); // add after setting contents, otherwise we end up in a loop // makes sure that the diff gets re-run if we right-click and select Save on the left pane. // Requires that we have a isSaving flag to avoid recursion fLeft.addContentChangeListener( new IContentChangeListener() { public void contentChanged(IContentChangeNotifier source) { if (!isSaving) { try { saveChanges(new NullProgressMonitor()); } catch (CoreException e) { e.printStackTrace(); } } } }); fRight = new FileNode(fTheirsFile) { public String getType() { return BuiltInConflictsCompareInput.this.getType(); } public boolean isEditable() { return false; } }; fRight.setCharSet(charSet); String title = Policy.bind("BuiltInConflictsCompareInput.0") + fileName; //$NON-NLS-1$ setTitle(title); // Override the default difference visit method to use MyDiffNode // instead of just DiffNode Differencer d = new Differencer() { protected Object visit(Object data, int result, Object ancestor, Object left, Object right) { return new MyDiffNode((IDiffContainer) data, result, (ITypedElement)ancestor, (ITypedElement)left, (ITypedElement)right); } }; fRoot = d.findDifferences(true, pm, null, fAncestor, fLeft, fRight); return fRoot; } catch(IOException e) { throw new InvocationTargetException(e); } finally { pm.done(); } } private String getCharSet() { String charSet = null; String destFilePath = fDestinationFile.getAbsolutePath(); String workspacePath; int index = destFilePath.indexOf(File.separator + Policy.bind("BuiltInConflictsCompareInput.1") + File.separator); //$NON-NLS-1$ if (index == -1) { workspacePath = destFilePath; } else { workspacePath = destFilePath.substring(0, index) + File.separator + fileName; } File workspaceFile = new File(workspacePath); IFile destinationFile = (IFile) File2Resource .getResource(workspaceFile); if (destinationFile != null) { try { charSet = destinationFile.getCharset(); } catch (CoreException e) {} } return charSet; } public void saveChanges(IProgressMonitor pm) throws CoreException { try { isSaving = true; super.saveChanges(pm); fLeft.commit(pm); neverSaved = false; ((MyDiffNode)fRoot).fireChange(); } finally { isSaving = false; } } public boolean isSaveNeeded() { if (neverSaved) { return true; } else { return super.isSaveNeeded(); } } public Control createContents(Composite parent) { parent.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { handleInternalDispose(); } }); return super.createContents(parent); } protected void handleInternalDispose() { DialogWizard dialogWizard = new DialogWizard(DialogWizard.FINISHED_EDITING); dialogWizard.setConflictDescriptor(conflictDescriptor); ConflictWizardDialog dialog = new ConflictWizardDialog(Display.getDefault().getActiveShell(), dialogWizard); dialog.open(); resolution = dialogWizard.getResolution(); resolved = resolution != ISVNConflictResolver.Choice.postpone; finished = true; } public void handleExternalDispose() { DialogWizard dialogWizard = new DialogWizard(DialogWizard.FINISHED_EDITING); dialogWizard.setConflictDescriptor(conflictDescriptor); ConflictWizardDialog dialog = new ConflictWizardDialog(Display.getDefault().getActiveShell(), dialogWizard); dialog.open(); resolution = dialogWizard.getResolution(); resolved = resolution != ISVNConflictResolver.Choice.postpone; finished = true; } public boolean isFinished() { return finished; } public void setFinished(boolean finished) { this.finished = finished; } public boolean isResolved() { return resolved; } public int getResolution() { return resolution; } } BuiltInEditConflictsAction.java000066400000000000000000000173201203611042400435220ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflicts/******************************************************************************* * Copyright (c) 2009 CollabNet. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * CollabNet - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.conflicts; import java.io.File; import java.io.IOException; import java.lang.reflect.InvocationTargetException; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.CompareUI; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.action.IAction; import org.eclipse.jface.preference.IPreferenceStore; import org.osgi.service.prefs.BackingStoreException; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Messages; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.actions.WorkspaceAction; import org.tigris.subversion.subclipse.ui.conflicts.MergeFileAssociation; import org.tigris.subversion.svnclientadapter.SVNConflictDescriptor; import org.tigris.subversion.svnclientadapter.utils.Command; public class BuiltInEditConflictsAction extends WorkspaceAction { private File conflictNewFile; private File conflictOldFile; private File conflictWorkingFile; private File mergedFile; private BuiltInConflictsCompareInput builtInConflictsCompareInput; private String fileName; private SVNConflictDescriptor conflictDescriptor; public BuiltInEditConflictsAction(File conflictNewFile, File conflictOldFile, File conflictWorkingFile, File mergedFile, String fileName, SVNConflictDescriptor conflictDescriptor) { super(); this.conflictNewFile = conflictNewFile; this.conflictOldFile = conflictOldFile; this.conflictWorkingFile = conflictWorkingFile; this.mergedFile = mergedFile; this.fileName = fileName; this.conflictDescriptor = conflictDescriptor; } private void editConflictsInternal() throws InvocationTargetException, InterruptedException { CompareConfiguration cc = new CompareConfiguration(); cc.setLeftEditable(true); builtInConflictsCompareInput = new BuiltInConflictsCompareInput(cc, conflictDescriptor); builtInConflictsCompareInput.setResources(conflictOldFile, conflictWorkingFile, conflictNewFile, mergedFile, fileName); CompareUI.openCompareEditorOnPage(builtInConflictsCompareInput, getTargetPage()); } private void editConflictsExternal(String mergeProgramLocation, String mergeProgramParameters) throws CoreException, InvocationTargetException, InterruptedException { try { builtInConflictsCompareInput = new BuiltInConflictsCompareInput(new CompareConfiguration(), conflictDescriptor); if (mergeProgramLocation.equals("")) { //$NON-NLS-1$ throw new SVNException(Messages.BuiltInEditConflictsAction_0); } File mergeProgramFile = new File(mergeProgramLocation); if (!mergeProgramFile.exists()) { throw new SVNException(Messages.BuiltInEditConflictsAction_1); } Command command = new Command(mergeProgramLocation); String[] parameters = mergeProgramParameters.split(" "); //$NON-NLS-1$ for (int i = 0; i < parameters.length; i++) { parameters[i] = replaceParameter(parameters[i], "${theirs}", //$NON-NLS-1$ conflictNewFile.getAbsolutePath()); parameters[i] = replaceParameter(parameters[i], "${yours}", //$NON-NLS-1$ conflictWorkingFile.getAbsolutePath()); parameters[i] = replaceParameter(parameters[i], "${base}", //$NON-NLS-1$ conflictOldFile.getAbsolutePath()); parameters[i] = replaceParameter(parameters[i], "${merged}", //$NON-NLS-1$ mergedFile.getAbsolutePath()); } command.setParameters(parameters); command.exec(); command.waitFor(); builtInConflictsCompareInput.handleExternalDispose(); } catch (IOException e) { throw new SVNException(Messages.BuiltInEditConflictsAction_2 + e.getMessage(), e); } } protected void execute(IAction action) throws InvocationTargetException, InterruptedException { try { MergeFileAssociation mergeFileAssociation = null; try { mergeFileAssociation = SVNUIPlugin.getPlugin().getMergeFileAssociation(fileName); } catch (BackingStoreException e) { mergeFileAssociation = new MergeFileAssociation(); } if (mergeFileAssociation.getType() == MergeFileAssociation.BUILT_IN) { editConflictsInternal(); } else if (mergeFileAssociation.getType() == MergeFileAssociation.DEFAULT_EXTERNAL) { IPreferenceStore preferenceStore = SVNUIPlugin.getPlugin().getPreferenceStore(); String mergeProgramLocation = preferenceStore.getString(ISVNUIConstants.PREF_MERGE_PROGRAM_LOCATION); String mergeProgramParameters = preferenceStore.getString(ISVNUIConstants.PREF_MERGE_PROGRAM_PARAMETERS); editConflictsExternal(mergeProgramLocation, mergeProgramParameters); } else { editConflictsExternal(mergeFileAssociation.getMergeProgram(), mergeFileAssociation.getParameters()); } } catch (Exception e) { if (builtInConflictsCompareInput == null) builtInConflictsCompareInput = new BuiltInConflictsCompareInput(new CompareConfiguration(), conflictDescriptor); builtInConflictsCompareInput.setFinished(true); throw new InvocationTargetException(e); } } protected String getErrorTitle() { return Messages.BuiltInEditConflictsAction_3; } protected boolean isEnabledForSVNResource(ISVNLocalResource svnResource) { try { return conflictWorkingFile != null && svnResource.getStatusFromCache().isTextConflicted(); } catch (SVNException e) { return false; } } protected boolean isEnabledForMultipleResources() { return false; } private String replaceParameter(String input, String pattern, String value) { StringBuffer result = new StringBuffer(); //startIdx and idxOld delimit various chunks of input; these //chunks always end where pattern begins int startIdx = 0; int idxOld = 0; while ((idxOld = input.indexOf(pattern, startIdx)) >= 0) { //grab a part of input which does not include pattern result.append( input.substring(startIdx, idxOld) ); //add value to take place of pattern result.append( value ); //reset the startIdx to just after the current match, to see //if there are any further matches startIdx = idxOld + pattern.length(); } //the final chunk will go to the end of input result.append( input.substring(startIdx) ); return result.toString(); } protected String getImageId() { return ISVNUIConstants.IMG_MENU_EDITCONFLICT; } public BuiltInConflictsCompareInput getBuiltInConflictsCompareInput() { return builtInConflictsCompareInput; } } ConflictHandlingWizardPage.java000066400000000000000000000356571203611042400435440ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflicts/******************************************************************************* * Copyright (c) 2009 CollabNet. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * CollabNet - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.conflicts; import java.io.File; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.Path; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Messages; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.conflicts.MergeFileAssociation; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; import org.tigris.subversion.svnclientadapter.SVNConflictDescriptor; public class ConflictHandlingWizardPage extends WizardPage { private SVNConflictDescriptor conflictDescriptor; private IResource resource; private Button markConflictedButton; private Button chooseUserVersionButton; private Button chooseUserVersionForConflictsButton; private Button chooseIncomingVersionButton; private Button chooseIncomingVersionForConflictsButton; private Button chooseBaseVersionButton; private Button fileEditorButton; private Button conflictEditorButton; private Button applyToAllButton; private IDialogSettings settings; private final static String LAST_TEXT_CHOICE = "ConflictHandlingDialog.lastTextChoice"; //$NON-NLS-1$ private final static String LAST_BINARY_CHOICE = "ConflictHandlingDialog.lastBinaryChoice"; //$NON-NLS-1$ public ConflictHandlingWizardPage(String pageName) { super(pageName, Messages.ConflictHandlingWizardPage_0, SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_SVN)); settings = SVNUIPlugin.getPlugin().getDialogSettings(); } public void createControl(Composite parent) { Composite outerContainer = new Composite(parent,SWT.NONE); GridLayout outerLayout = new GridLayout(); outerLayout.numColumns = 1; outerContainer.setLayout(outerLayout); outerContainer.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); Composite composite = new Composite(outerContainer, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 1; composite.setLayout(layout); GridData data = new GridData(GridData.FILL_BOTH); composite.setLayoutData(data); IResource conflictResource = SVNWorkspaceRoot.getResourceFor(this.resource, new Path(conflictDescriptor.getPath())); Label label = new Label(composite, SWT.WRAP); if (conflictResource == null) { String workspaceLocation = resource.getWorkspace().getRoot().getLocation().toString(); String relativePath; if (conflictDescriptor.getPath().startsWith(workspaceLocation)) relativePath = conflictDescriptor.getPath().substring(workspaceLocation.length() + 1); else relativePath = conflictDescriptor.getPath(); label.setText(Messages.ConflictHandlingWizardPage_1 + convertTempFileName(relativePath)); } else label.setText(Messages.ConflictHandlingWizardPage_2 + conflictResource.getFullPath().makeRelative().toOSString()); data = new GridData(); data.widthHint = 500; label.setLayoutData(data); new Label(composite, SWT.NONE); Group conflictGroup = new Group(composite, SWT.NULL); conflictGroup.setText(Messages.ConflictHandlingWizardPage_3); GridLayout conflictLayout = new GridLayout(); conflictLayout.numColumns = 1; conflictGroup.setLayout(conflictLayout); data = new GridData(GridData.FILL_BOTH); conflictGroup.setLayoutData(data); markConflictedButton = new Button(conflictGroup, SWT.RADIO); markConflictedButton.setText(Messages.ConflictHandlingWizardPage_4); if (conflictDescriptor.getMyPath() != null) { chooseUserVersionButton = new Button(conflictGroup, SWT.RADIO); if (conflictDescriptor.getConflictKind() == SVNConflictDescriptor.Kind.property) { chooseUserVersionButton.setText(Messages.ConflictHandlingWizardPage_5); } else { chooseUserVersionButton.setText(Messages.ConflictHandlingWizardPage_6); if (!conflictDescriptor.isBinary()) { chooseUserVersionForConflictsButton = new Button(conflictGroup, SWT.RADIO); chooseUserVersionForConflictsButton.setText(Messages.ConflictHandlingWizardPage_16); } } } if (conflictDescriptor.getTheirPath() != null) { chooseIncomingVersionButton = new Button(conflictGroup, SWT.RADIO); if (conflictDescriptor.getConflictKind() == SVNConflictDescriptor.Kind.property) { chooseIncomingVersionButton.setText(Messages.ConflictHandlingWizardPage_7); } else { chooseIncomingVersionButton.setText(Messages.ConflictHandlingWizardPage_8); if (!conflictDescriptor.isBinary()) { chooseIncomingVersionForConflictsButton = new Button(conflictGroup, SWT.RADIO); chooseIncomingVersionForConflictsButton.setText(Messages.ConflictHandlingWizardPage_17); } } } if (!conflictDescriptor.isBinary()) { if (conflictDescriptor.getConflictKind() != SVNConflictDescriptor.Kind.property && fileExists(conflictDescriptor.getMergedPath())) { fileEditorButton = new Button(conflictGroup, SWT.RADIO); fileEditorButton.setText(Messages.ConflictHandlingWizardPage_9); } } if (showConflictEditorOption()) { conflictEditorButton = new Button(conflictGroup, SWT.RADIO); if (conflictDescriptor.getConflictKind() == SVNConflictDescriptor.Kind.property && conflictDescriptor.getMergedPath() == null) conflictEditorButton.setText(Messages.ConflictHandlingWizardPage_10); else conflictEditorButton.setText(Messages.ConflictHandlingWizardPage_11); } int lastChoice = ISVNConflictResolver.Choice.postpone; try { if (conflictDescriptor.isBinary()) lastChoice = settings.getInt(LAST_BINARY_CHOICE); else lastChoice = settings.getInt(LAST_TEXT_CHOICE); } catch (Exception e) {} if (lastChoice == ISVNConflictResolver.Choice.postpone) markConflictedButton.setSelection(true); else if (lastChoice == ISVNConflictResolver.Choice.chooseMine && chooseUserVersionForConflictsButton != null) chooseUserVersionForConflictsButton.setSelection(true); else if (lastChoice == ISVNConflictResolver.Choice.chooseMineFull && chooseUserVersionButton != null) chooseUserVersionButton.setSelection(true); else if (lastChoice == ISVNConflictResolver.Choice.chooseTheirs && chooseIncomingVersionForConflictsButton != null) chooseIncomingVersionForConflictsButton.setSelection(true); else if (lastChoice == ISVNConflictResolver.Choice.chooseTheirsFull && chooseIncomingVersionButton != null) chooseIncomingVersionButton.setSelection(true); else if (lastChoice == ISVNConflictResolver.Choice.chooseBase && chooseBaseVersionButton != null) chooseBaseVersionButton.setSelection(true); if (lastChoice == ConflictResolution.CONFLICT_EDITOR && conflictEditorButton != null) conflictEditorButton.setSelection(true); if (!conflictDescriptor.isBinary()) { if (conflictDescriptor.getConflictKind() != SVNConflictDescriptor.Kind.property && lastChoice == ConflictResolution.FILE_EDITOR) fileEditorButton.setSelection(true); } SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (conflictDescriptor.isBinary()) { if (markConflictedButton.getSelection()) settings.put(LAST_BINARY_CHOICE, ISVNConflictResolver.Choice.postpone); else if (chooseUserVersionButton != null && chooseUserVersionButton.getSelection()) settings.put(LAST_BINARY_CHOICE, ISVNConflictResolver.Choice.chooseMineFull); else if (chooseIncomingVersionButton != null && chooseIncomingVersionButton.getSelection()) settings.put(LAST_BINARY_CHOICE, ISVNConflictResolver.Choice.chooseTheirsFull); else if (chooseBaseVersionButton != null && chooseBaseVersionButton.getSelection()) settings.put(LAST_BINARY_CHOICE, ISVNConflictResolver.Choice.chooseBase); } else { if (markConflictedButton.getSelection()) settings.put(LAST_TEXT_CHOICE, ISVNConflictResolver.Choice.postpone); else if (chooseUserVersionButton != null && chooseUserVersionButton.getSelection()) settings.put(LAST_TEXT_CHOICE, ISVNConflictResolver.Choice.chooseMineFull); else if (chooseUserVersionForConflictsButton != null && chooseUserVersionForConflictsButton.getSelection()) settings.put(LAST_TEXT_CHOICE, ISVNConflictResolver.Choice.chooseMine); else if (chooseIncomingVersionButton != null && chooseIncomingVersionButton.getSelection()) settings.put(LAST_TEXT_CHOICE, ISVNConflictResolver.Choice.chooseTheirsFull); else if (chooseIncomingVersionForConflictsButton != null && chooseIncomingVersionForConflictsButton.getSelection()) settings.put(LAST_TEXT_CHOICE, ISVNConflictResolver.Choice.chooseTheirs); else if (chooseBaseVersionButton != null && chooseBaseVersionButton.getSelection()) settings.put(LAST_TEXT_CHOICE, ISVNConflictResolver.Choice.chooseBase); else if (fileEditorButton != null && fileEditorButton.getSelection()) settings.put(LAST_TEXT_CHOICE, ConflictResolution.FILE_EDITOR); } if (conflictEditorButton != null && conflictEditorButton.getSelection()) settings.put(LAST_TEXT_CHOICE, ConflictResolution.CONFLICT_EDITOR); } }; markConflictedButton.addSelectionListener(selectionListener); if (chooseIncomingVersionButton != null) chooseIncomingVersionButton.addSelectionListener(selectionListener); if (chooseIncomingVersionForConflictsButton != null) chooseIncomingVersionForConflictsButton.addSelectionListener(selectionListener); if (chooseUserVersionButton != null) chooseUserVersionButton.addSelectionListener(selectionListener); if (chooseUserVersionForConflictsButton != null) chooseUserVersionForConflictsButton.addSelectionListener(selectionListener); if (chooseBaseVersionButton != null) chooseBaseVersionButton.addSelectionListener(selectionListener); if (!conflictDescriptor.isBinary()) { if (fileEditorButton != null) fileEditorButton.addSelectionListener(selectionListener); } if (conflictEditorButton != null) conflictEditorButton.addSelectionListener(selectionListener); applyToAllButton = new Button(composite, SWT.CHECK); if (conflictDescriptor.getConflictKind() == SVNConflictDescriptor.Kind.property) applyToAllButton.setText(Messages.ConflictHandlingWizardPage_12); else if (conflictDescriptor.isBinary()) applyToAllButton.setText(Messages.ConflictHandlingWizardPage_13); else applyToAllButton.setText(Messages.ConflictHandlingWizardPage_14); File file = new File(conflictDescriptor.getPath()); if (conflictDescriptor.getConflictKind() == SVNConflictDescriptor.Kind.property) setMessage("SVN cannot automatically merge property " + conflictDescriptor.getPropertyName() + Messages.ConflictHandlingWizardPage_15 + convertTempFileName(file.getName()) + "."); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ else setMessage("SVN cannot automatically merge file " + convertTempFileName(file.getName()) + "."); //$NON-NLS-1$ //$NON-NLS-1$ //$NON-NLS-2$ setControl(outerContainer); } public void setConflictDescriptor(SVNConflictDescriptor conflictDescriptor) { this.conflictDescriptor = conflictDescriptor; } public ConflictResolution getConflictResolution() { int resolution = ISVNConflictResolver.Choice.postpone; if (markConflictedButton.getSelection()) resolution = ISVNConflictResolver.Choice.postpone; else if (chooseIncomingVersionButton != null && chooseIncomingVersionButton.getSelection()) resolution = ISVNConflictResolver.Choice.chooseTheirsFull; else if (chooseIncomingVersionForConflictsButton != null && chooseIncomingVersionForConflictsButton.getSelection()) resolution = ISVNConflictResolver.Choice.chooseTheirs; else if (chooseUserVersionButton != null && chooseUserVersionButton.getSelection()) resolution = ISVNConflictResolver.Choice.chooseMineFull; else if (chooseUserVersionForConflictsButton != null && chooseUserVersionForConflictsButton.getSelection()) resolution = ISVNConflictResolver.Choice.chooseMine; else if (chooseBaseVersionButton != null && chooseBaseVersionButton.getSelection()) resolution = ISVNConflictResolver.Choice.chooseBase; if (!conflictDescriptor.isBinary()) { if (fileEditorButton != null && fileEditorButton.getSelection()) resolution = ConflictResolution.FILE_EDITOR; } if (conflictEditorButton != null && conflictEditorButton.getSelection()) resolution = ConflictResolution.CONFLICT_EDITOR; ConflictResolution conflictResolution = new ConflictResolution(conflictDescriptor, resolution); conflictResolution.setApplyToAll(applyToAllButton.getSelection()); return conflictResolution; } public void setResource(IResource resource) { this.resource = resource; } // This is a workaround for an SVNKit bug that is causing the // conflict descriptor path to come in as a temp file path // rather than the actual conflicted resource path. private String convertTempFileName(String name) { if (name.endsWith(".tmp")) { //$NON-NLS-1$ String newName = name.substring(0, name.length() - 4); int index = newName.lastIndexOf("."); //$NON-NLS-1$ if (index != -1) { if (newName.substring(index).indexOf("/") == -1) { //$NON-NLS-1$ newName = newName.substring(0, index); return newName; } } } return name; } private boolean fileExists(String path) { if (path != null && path.length() > 0) { File file = new File(path); return file.exists(); } return false; } private boolean showConflictEditorOption() { if (!fileExists(conflictDescriptor.getBasePath())) { return false; } if (conflictDescriptor.isBinary()) { File pathFile = new File(conflictDescriptor.getPath()); try { MergeFileAssociation[] mergeFileAssociations = SVNUIPlugin.getPlugin().getMergeFileAssociations(); if (mergeFileAssociations != null) { for (int i = 0; i < mergeFileAssociations.length; i++) { if (mergeFileAssociations[i].matches(pathFile.getName()) || mergeFileAssociations[i].getFileType().equals(pathFile.getName())) { return true; } } } } catch (Exception e) {} return false; } return true; } } ConflictResolution.java000066400000000000000000000024041203611042400421650ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflictspackage org.tigris.subversion.subclipse.ui.conflicts; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; import org.tigris.subversion.svnclientadapter.SVNConflictDescriptor; public class ConflictResolution { private SVNConflictDescriptor conflictDescriptor; private int resolution; private String mergedPath; private boolean applyToAll; public final static int FILE_EDITOR = 20; public final static int CONFLICT_EDITOR = 21; public ConflictResolution(SVNConflictDescriptor conflictDescriptor, int resolution) { super(); this.conflictDescriptor = conflictDescriptor; this.resolution = resolution; } public SVNConflictDescriptor getConflictDescriptor() { return conflictDescriptor; } public int getResolution() { return resolution; } public boolean isResolved() { return resolution != ISVNConflictResolver.Choice.postpone; } public String getMergedPath() { if (mergedPath == null) return conflictDescriptor.getMergedPath(); else return mergedPath; } public void setMergedPath(String mergedPath) { this.mergedPath = mergedPath; } public boolean isApplyToAll() { return applyToAll; } public void setApplyToAll(boolean applyToAll) { this.applyToAll = applyToAll; } } ConflictWizardDialog.java000066400000000000000000000025631203611042400424100ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflictspackage org.tigris.subversion.subclipse.ui.conflicts; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.wizard.IWizard; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.tigris.subversion.subclipse.ui.Messages; public class ConflictWizardDialog extends WizardDialog { public boolean yesNo; public ConflictWizardDialog(Shell parentShell, IWizard newWizard) { super(parentShell, newWizard); } public ConflictWizardDialog(Shell parentShell, IWizard newWizard, boolean yesNo) { this(parentShell, newWizard); this.yesNo = yesNo; } protected void createButtonsForButtonBar(Composite parent) { super.createButtonsForButtonBar(parent); if (yesNo) { Button cancelButton = getButton(IDialogConstants.CANCEL_ID); if (cancelButton != null) cancelButton.setText(Messages.ConflictWizardDialog_0); } } protected Button createButton(Composite parent, int id, String label, boolean defaultButton) { String customLabel; if (id == IDialogConstants.FINISH_ID) { if (yesNo) customLabel = Messages.ConflictWizardDialog_1; else customLabel = Messages.ConflictWizardDialog_2; } else customLabel = label; return super.createButton(parent, id, customLabel, defaultButton); } } ConflictsCompareInput.java000066400000000000000000000233351203611042400426210ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflicts/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.conflicts; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.CompareEditorInput; import org.eclipse.compare.IContentChangeListener; import org.eclipse.compare.IContentChangeNotifier; import org.eclipse.compare.ITypedElement; import org.eclipse.compare.structuremergeviewer.DiffNode; import org.eclipse.compare.structuremergeviewer.Differencer; import org.eclipse.compare.structuremergeviewer.IDiffContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.compare.internal.BufferedResourceNode; import org.tigris.subversion.subclipse.ui.compare.internal.Utilities; /** * CompareEditorInput to resolve conflicts. * *

* We start by copying the content of mine resource to destination resource * (without saving) and we tell that save is needed. So each time user edits * conflicts, content of left panel is in fact content of mine resource.
* We could probably detect if destination resource contains " < < < < < < < < * .mine" and if not, don't copy the content of mine resource to destination * resource. *

*/ public class ConflictsCompareInput extends CompareEditorInput { /** * This class is only here so we can make the fireChange method public. * We want to invoke this when we do a save so that the synchronization * markers get updated. */ public static class MyDiffNode extends DiffNode { public MyDiffNode(IDiffContainer parent, int kind, ITypedElement ancestor, ITypedElement left, ITypedElement right) { super(parent, kind, ancestor, left, right); } public void fireChange() { super.fireChange(); } } private Object fRoot; private BufferedResourceNode fAncestor; private BufferedResourceNode fLeft; private BufferedResourceNode fRight; private IFile fAncestorResource; private IFile fMineResource; private IFile fTheirsResource; private IFile fDestinationResource; // we use this trick because we can't use setDirty which does not work as I // expected private boolean neverSaved = true; // use this to avoid recursion in saveChanges private boolean isSaving = false; /** * Creates an compare editor input for the given selection. */ public ConflictsCompareInput(CompareConfiguration config) { super(config); } public void setResources(IFile ancestor, IFile mine, IFile theirs, IFile destination) { fAncestorResource = ancestor; fMineResource = mine; fTheirsResource = theirs; fDestinationResource = destination; initializeCompareConfiguration(); } private String getType() { String s = fDestinationResource.getFileExtension(); if (s != null) return s; return ITypedElement.UNKNOWN_TYPE; } /** * Initializes the labels in the compare configuration. */ private void initializeCompareConfiguration() { CompareConfiguration cc = getCompareConfiguration(); String leftLabel = "Merged - " + fDestinationResource.getName(); //$NON-NLS-1$ String rightLabel = "Theirs - " + fTheirsResource.getName(); //$NON-NLS-1$ String ancestorLabel = "Ancestor -" + fAncestorResource.getName(); //$NON-NLS-1$ cc.setLeftLabel(leftLabel); cc.setRightLabel(rightLabel); cc.setAncestorLabel(ancestorLabel); } /* * (non-Javadoc) * * @see org.eclipse.compare.CompareEditorInput#prepareInput(org.eclipse.core.runtime.IProgressMonitor) */ protected Object prepareInput(IProgressMonitor pm) throws InvocationTargetException, InterruptedException { try { pm .beginTask( Utilities.getString("ResourceCompare.taskName"), IProgressMonitor.UNKNOWN); //$NON-NLS-1$ if (fMineResource != null) { fMineResource.refreshLocal(IResource.DEPTH_ZERO, Policy .subMonitorFor(pm, IProgressMonitor.UNKNOWN)); } if (fTheirsResource != null) { fTheirsResource.refreshLocal(IResource.DEPTH_ZERO, Policy .subMonitorFor(pm, IProgressMonitor.UNKNOWN)); } if (fAncestorResource != null) { fAncestorResource.refreshLocal(IResource.DEPTH_ZERO, Policy .subMonitorFor(pm, IProgressMonitor.UNKNOWN)); } if (fDestinationResource != null) { fDestinationResource.refreshLocal(IResource.DEPTH_ZERO, Policy .subMonitorFor(pm, IProgressMonitor.UNKNOWN)); } fAncestor = new BufferedResourceNode(fAncestorResource) { public String getType() { return ConflictsCompareInput.this.getType(); } public boolean isEditable() { return false; } public String getCharset() { try { return fDestinationResource.getCharset(); } catch (CoreException e) { return null; } } }; fLeft = new BufferedResourceNode(fDestinationResource) { public String getType() { return ConflictsCompareInput.this.getType(); } public String getCharset() { try { return fDestinationResource.getCharset(); } catch (CoreException e) { return null; } } }; final IFile resource = fMineResource != null ? fMineResource : fDestinationResource; InputStream mineContents = resource.getContents(); byte[] contents; try { contents = new byte[mineContents.available()]; mineContents.read(contents); } finally { mineContents.close(); } fLeft.setContent(contents); // add after setting contents, otherwise we end up in a loop // makes sure that the diff gets re-run if we right-click and select Save on the left pane. // Requires that we have a isSaving flag to avoid recursion fLeft.addContentChangeListener( new IContentChangeListener() { public void contentChanged(IContentChangeNotifier source) { if (!isSaving) { try { saveChanges(new NullProgressMonitor()); } catch (CoreException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } } }); fRight = new BufferedResourceNode(fTheirsResource) { public String getType() { return ConflictsCompareInput.this.getType(); } public boolean isEditable() { return false; } public String getCharset() { try { return fDestinationResource.getCharset(); } catch (CoreException e) { return null; } } }; String title = "Conflicts on " + fDestinationResource.getName(); //$NON-NLS-1$ setTitle(title); // Override the default difference visit method to use MyDiffNode // instead of just DiffNode Differencer d = new Differencer() { protected Object visit(Object data, int result, Object ancestor, Object left, Object right) { return new MyDiffNode((IDiffContainer) data, result, (ITypedElement)ancestor, (ITypedElement)left, (ITypedElement)right); } }; fRoot = d.findDifferences(true, pm, null, fAncestor, fLeft, fRight); return fRoot; } catch (CoreException e) { throw new InvocationTargetException(e); } catch (IOException e) { throw new InvocationTargetException(e); } finally { pm.done(); } } /* * (non-Javadoc) * * @see org.eclipse.compare.CompareEditorInput#saveChanges(org.eclipse.core.runtime.IProgressMonitor) */ public void saveChanges(IProgressMonitor pm) throws CoreException { try { isSaving = true; super.saveChanges(pm); fLeft.commit(pm); neverSaved = false; ((MyDiffNode)fRoot).fireChange(); } finally { isSaving = false; } } public boolean isSaveNeeded() { if (neverSaved) { return true; } else { return super.isSaveNeeded(); } } }DialogWizard.java000066400000000000000000000075551203611042400407340ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflictspackage org.tigris.subversion.subclipse.ui.conflicts; import org.eclipse.core.resources.IResource; import org.eclipse.jface.wizard.Wizard; import org.tigris.subversion.subclipse.ui.Messages; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; import org.tigris.subversion.svnclientadapter.SVNConflictDescriptor; public class DialogWizard extends Wizard { private SVNConflictDescriptor conflictDescriptor; private String myValue; private String incomingValue; private String valueToUse; private IResource[] resources; private boolean conflictResolved; private int resolution; private volatile ConflictResolution conflictResolution; private FinishedEditingWizardPage finishedEditingWizardPage; private ConflictHandlingWizardPage conflictHandlingWizardPage; private PropertyValueSelectionWizardPage propertyValueSelectionWizardPage; public int type; public final static int CONFLICT_HANDLING = 0; public final static int FINISHED_EDITING = 1; public final static int PROPERTY_VALUE_SELECTION = 2; public DialogWizard(int type) { super(); this.type = type; } public void addPages() { super.addPages(); if (type == FINISHED_EDITING) { setWindowTitle(Messages.DialogWizard_0); boolean propertyConflict = conflictDescriptor != null && conflictDescriptor.getConflictKind() == SVNConflictDescriptor.Kind.property; finishedEditingWizardPage = new FinishedEditingWizardPage("finishedEditing", propertyConflict); //$NON-NLS-1$ addPage(finishedEditingWizardPage); } if (type == CONFLICT_HANDLING) { setWindowTitle(Messages.DialogWizard_1); conflictHandlingWizardPage = new ConflictHandlingWizardPage("handleConflict"); //$NON-NLS-1$ conflictHandlingWizardPage.setConflictDescriptor(conflictDescriptor); conflictHandlingWizardPage.setResource(resources[0]); addPage(conflictHandlingWizardPage); } if (type == PROPERTY_VALUE_SELECTION) { setWindowTitle(Messages.DialogWizard_2); propertyValueSelectionWizardPage = new PropertyValueSelectionWizardPage("propertyValueSelection"); //$NON-NLS-1$ propertyValueSelectionWizardPage.setConflictDescriptor(conflictDescriptor); propertyValueSelectionWizardPage.setMyValue(myValue); propertyValueSelectionWizardPage.setIncomingValue(incomingValue); propertyValueSelectionWizardPage.setResource(resources[0]); addPage(propertyValueSelectionWizardPage); } } public boolean performFinish() { if (type == FINISHED_EDITING) { resolution = finishedEditingWizardPage.getResolution(); conflictResolved = resolution != ISVNConflictResolver.Choice.postpone; } if (type == CONFLICT_HANDLING) { conflictResolution = conflictHandlingWizardPage.getConflictResolution(); } if (type == PROPERTY_VALUE_SELECTION) { conflictResolved = true; valueToUse = propertyValueSelectionWizardPage.getValue(); } return true; } public boolean performCancel() { if (type == CONFLICT_HANDLING) conflictResolution = conflictHandlingWizardPage.getConflictResolution(); if (type == PROPERTY_VALUE_SELECTION) { valueToUse = propertyValueSelectionWizardPage.getValue(); conflictResolved = false; } return super.performCancel(); } public boolean isConflictResolved() { return conflictResolved; } public ConflictResolution getConflictResolution() { return conflictResolution; } public void setConflictDescriptor(SVNConflictDescriptor conflictDescriptor) { this.conflictDescriptor = conflictDescriptor; } public void setResources(IResource[] resources) { this.resources = resources; } public int getResolution() { return resolution; } public void setMyValue(String myValue) { this.myValue = myValue; } public void setIncomingValue(String incomingValue) { this.incomingValue = incomingValue; } public String getValueToUse() { return valueToUse; } } DiffMergePreferencePage.java000066400000000000000000000413731203611042400427740ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflicts/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.conflicts; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.ListDialog; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.actions.WorkspaceAction; /** * Preference page to set the program for merge * * @author cedric chabanois (cchab at tigris.org) */ public class DiffMergePreferencePage extends PreferencePage implements IWorkbenchPreferencePage { private Text mergeProgramLocationText; private Text mergeProgramParametersText; private Button mergeProgramParametersButton; private Button builtInMergeRadioButton; private Button externalMergeRadioButton; private Button browseMergeProgramButton; private Combo mergeImplementationCombo; private Button suggestMergeSourcesButton; private WorkspaceAction[] mergeProviders; class StringPair { String s1; String s2; } /** * creates a label */ private Label createLabel(Composite parent, String text, int span, int horizontalIndent) { Label label = new Label(parent, SWT.LEFT); label.setText(text); GridData data = new GridData(); data.horizontalSpan = span; data.horizontalAlignment = GridData.FILL; data.horizontalIndent = horizontalIndent; label.setLayoutData(data); return label; } /** * creates a label which the user can copy to clipboard (in fact it is a * Text) */ private Text createCopiableLabel(Composite parent, String text, int span, int horizontalIndent) { Text textControl = new Text(parent, SWT.READ_ONLY); textControl.setText(text); GridData data = new GridData(); data.horizontalAlignment = GridData.FILL; data.horizontalSpan = span; data.horizontalAlignment = GridData.FILL; data.horizontalIndent = horizontalIndent; textControl.setLayoutData(data); return textControl; } /** * creates a radio button */ private Button createRadio(Composite parent, String label, int span) { Button button = new Button(parent, SWT.RADIO); button.setText(label); GridData data = new GridData(); data.horizontalSpan = span; button.setLayoutData(data); return button; } /** * creates a Text control */ private Text createText(Composite parent, int widthHint) { Text textControl = new Text(parent, SWT.SINGLE | SWT.BORDER); GridData gridData = new GridData(); gridData.horizontalAlignment = GridData.FILL; gridData.widthHint = widthHint; gridData.grabExcessHorizontalSpace = true; textControl.setLayoutData(gridData); return textControl; } /* * (non-Javadoc) * * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite) */ protected Control createContents(Composite parent) { Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 2; composite.setLayout(layout); GridData gridData = new GridData(); gridData.horizontalAlignment = GridData.FILL; composite.setLayoutData(gridData); Label mergeImplementationLabel = new Label(composite, SWT.NONE); mergeImplementationLabel.setText(Policy.bind("DiffMergePreferencePage.mergeImplementation")); //$NON-NLS-1$ mergeImplementationCombo = new Combo(composite, SWT.READ_ONLY); gridData = new GridData(); gridData.horizontalAlignment = GridData.FILL; gridData.grabExcessHorizontalSpace = true; mergeImplementationCombo.setLayoutData(gridData); mergeImplementationCombo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { suggestMergeSourcesButton.setVisible(mergeImplementationCombo.getText().equals("CollabNet Desktop")); //$NON-NLS-1$ } }); try { mergeProviders = SVNUIPlugin.getMergeProviders(); for (int i = 0; i < mergeProviders.length; i++) mergeImplementationCombo.add(mergeProviders[i].getName()); } catch (Exception e) {} suggestMergeSourcesButton = new Button(composite, SWT.CHECK); suggestMergeSourcesButton.setText(Policy.bind("DiffMergePreferencePage.1")); //$NON-NLS-1$ gridData = new GridData(); gridData.horizontalSpan = 2; suggestMergeSourcesButton.setLayoutData(gridData); // Group "Merge program" Group group = new Group(composite, SWT.NULL); group.setText(Policy.bind("DiffMergePreferencePage.mergeProgramGroup")); //$NON-NLS-1$ gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 2; group.setLayoutData(gridData); layout = new GridLayout(); layout.numColumns = 3; group.setLayout(layout); // program used to resolve conflicted files Listener updateEnablementsListener = new Listener() { public void handleEvent(Event event) { updateEnablements(); } }; builtInMergeRadioButton = createRadio(group, Policy .bind("DiffMergePreferencePage.builtInMerge"), 3); //$NON-NLS-1$ builtInMergeRadioButton.addListener(SWT.Selection, updateEnablementsListener); externalMergeRadioButton = createRadio(group, Policy .bind("DiffMergePreferencePage.externalMerge"), 1); //$NON-NLS-1$ externalMergeRadioButton.addListener(SWT.Selection, updateEnablementsListener); mergeProgramLocationText = createText(group, 200); mergeProgramLocationText.setEditable(false); browseMergeProgramButton = new Button(group, SWT.NONE); browseMergeProgramButton.setText(Policy .bind("DiffMergePreferencePage.browse")); //$NON-NLS-1$ gridData = new GridData(); gridData.horizontalAlignment = GridData.FILL; browseMergeProgramButton.setLayoutData(gridData); browseMergeProgramButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { FileDialog fileDialog = new FileDialog(getShell(), SWT.OPEN); String res = fileDialog.open(); if (res != null) { mergeProgramLocationText.setText(res); } } }); // parameters createLabel(group, Policy .bind("DiffMergePreferencePage.mergeProgramParameters"), 1, 20); //$NON-NLS-1$ Control[] formatEditorControl = createFormatEditorControl( group, Policy.bind("DiffMergePreferencePage.mergeProgramVariables"), getMergeBindingDescriptions()); //$NON-NLS-1$ mergeProgramParametersText = (Text) formatEditorControl[0]; mergeProgramParametersButton = (Button) formatEditorControl[1]; createLabel(group, Policy .bind("DiffMergePreferencePage.tortoiseMergeComment1"), 3, 20); //$NON-NLS-1$ createCopiableLabel(group, Policy .bind("DiffMergePreferencePage.tortoiseMergeComment2"), //$NON-NLS-1$ 3, 20); initializeValues(); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; mergeProgramParametersText.addFocusListener(focusListener); PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IHelpContextIds.DIFF_MERGE_PREFERENCE_PAGE); return composite; } protected Control[] createFormatEditorControl(Composite composite, String buttonText, final Map supportedBindings) { Text format = new Text(composite, SWT.BORDER); format.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Button b = new Button(composite, SWT.NONE); b.setText(buttonText); GridData data = new GridData(); data.horizontalAlignment = GridData.FILL; b.setLayoutData(data); final Text formatToInsert = format; b.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { addVariables(formatToInsert, supportedBindings); } }); return new Control[] { format, b }; } /** * Add another variable to the given target. The variable is inserted at * current position A ListSelectionDialog is shown and the choose the * variables to add */ private void addVariables(Text target, Map bindings) { final List variables = new ArrayList(bindings.size()); ILabelProvider labelProvider = new LabelProvider() { public String getText(Object element) { return ((StringPair) element).s1 + " - " + ((StringPair) element).s2; //$NON-NLS-1$ } }; IStructuredContentProvider contentsProvider = new IStructuredContentProvider() { public Object[] getElements(Object inputElement) { return variables.toArray(new StringPair[variables.size()]); } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } }; for (Iterator it = bindings.keySet().iterator(); it.hasNext();) { StringPair variable = new StringPair(); variable.s1 = (String) it.next(); // variable variable.s2 = (String) bindings.get(variable.s1); // description variables.add(variable); } ListDialog dialog = new ListDialog(this.getShell()); dialog.setContentProvider(contentsProvider); dialog.setAddCancelButton(true); dialog.setLabelProvider(labelProvider); dialog.setInput(variables); dialog.setTitle(Policy .bind("DiffMergePreferencePage.addVariableDialogTitle")); //$NON-NLS-1$ if (dialog.open() != ListDialog.OK) return; Object[] result = dialog.getResult(); for (int i = 0; i < result.length; i++) { target.insert("${" + ((StringPair) result[i]).s1 + "}"); //$NON-NLS-1$ //$NON-NLS-2$ } } /** * get the map of {variable,description} to use for merge program */ private Map getMergeBindingDescriptions() { Map bindings = new HashMap(); bindings .put( "merged", Policy.bind("DiffMergePreferencePage.mergedVariableComment")); //$NON-NLS-1$ //$NON-NLS-2$ bindings .put( "theirs", Policy.bind("DiffMergePreferencePage.theirsVariableComment")); //$NON-NLS-1$ //$NON-NLS-2$ bindings .put( "yours", Policy.bind("DiffMergePreferencePage.yoursVariableComment")); //$NON-NLS-1$ //$NON-NLS-2$ bindings .put( "base", Policy.bind("DiffMergePreferencePage.baseVariableComment"));//$NON-NLS-1$ //$NON-NLS-2$ return bindings; } /* * (non-Javadoc) * * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) */ public void init(IWorkbench workbench) { } /** * Initializes states of the controls from the preference store. */ private void initializeValues() { IPreferenceStore store = getPreferenceStore(); String mergeProviderPreference = store.getString(ISVNUIConstants.PREF_MERGE_PROVIDER); if (mergeProviderPreference == null) mergeProviders[0].getName(); for (int i = 0; i < mergeProviders.length; i++) { if (mergeProviders[i].getName().equals(mergeProviderPreference)) { mergeImplementationCombo.setText(mergeProviders[i].getName()); break; } } if (mergeImplementationCombo.getText().length() == 0) mergeImplementationCombo.setText(mergeProviders[0].getName()); suggestMergeSourcesButton.setSelection(store.getBoolean(ISVNUIConstants.PREF_SUGGEST_MERGE_SOURCES)); suggestMergeSourcesButton.setVisible(mergeImplementationCombo.getText().equals("CollabNet Desktop")); //$NON-NLS-1$ mergeProgramLocationText.setText(store .getString(ISVNUIConstants.PREF_MERGE_PROGRAM_LOCATION)); mergeProgramParametersText.setText(store .getString(ISVNUIConstants.PREF_MERGE_PROGRAM_PARAMETERS)); if (store.getBoolean(ISVNUIConstants.PREF_MERGE_USE_EXTERNAL)) { builtInMergeRadioButton.setSelection(false); externalMergeRadioButton.setSelection(true); } else { builtInMergeRadioButton.setSelection(true); externalMergeRadioButton.setSelection(false); } updateEnablements(); } private void updateEnablements() { if (builtInMergeRadioButton.getSelection()) { browseMergeProgramButton.setEnabled(false); mergeProgramParametersText.setEnabled(false); mergeProgramParametersButton.setEnabled(false); mergeProgramLocationText.setEnabled(false); } else { browseMergeProgramButton.setEnabled(true); mergeProgramParametersText.setEnabled(true); mergeProgramParametersButton.setEnabled(true); mergeProgramLocationText.setEnabled(true); } } /** * Defaults was clicked. Restore the SVN preferences to their default values */ protected void performDefaults() { super.performDefaults(); initializeValues(); } /** * OK was clicked. Store the SVN preferences. * * @return whether it is okay to close the preference page */ public boolean performOk() { IPreferenceStore store = getPreferenceStore(); store.setValue(ISVNUIConstants.PREF_MERGE_PROVIDER, mergeImplementationCombo.getText()); store.setValue(ISVNUIConstants.PREF_SUGGEST_MERGE_SOURCES, suggestMergeSourcesButton.getSelection()); store.setValue(ISVNUIConstants.PREF_MERGE_PROGRAM_LOCATION, mergeProgramLocationText.getText()); store.setValue(ISVNUIConstants.PREF_MERGE_PROGRAM_PARAMETERS, mergeProgramParametersText.getText()); store.setValue(ISVNUIConstants.PREF_MERGE_USE_EXTERNAL, externalMergeRadioButton.getSelection()); return true; } /* * (non-Javadoc) * * @see org.eclipse.jface.preference.PreferencePage#doGetPreferenceStore() */ protected IPreferenceStore doGetPreferenceStore() { return SVNUIPlugin.getPlugin().getPreferenceStore(); } }EditPropertyConflictsWizard.java000066400000000000000000000064771203611042400440360ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflictspackage org.tigris.subversion.subclipse.ui.conflicts; import org.eclipse.core.resources.IResource; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.Wizard; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.Messages; import org.tigris.subversion.subclipse.ui.operations.ResolveOperation; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; import org.tigris.subversion.svnclientadapter.ISVNProperty; public class EditPropertyConflictsWizard extends Wizard { private ISVNLocalResource svnResource; private String conflictSummary; private PropertyConflict[] propertyConflicts; private ISVNProperty[] remoteProperties; private EditPropertyConflictsWizardSummaryPage summaryPage; private IWorkbenchPart targetPart; public EditPropertyConflictsWizard(ISVNLocalResource svnResource, String conflictSummary, PropertyConflict[] propertyConflicts, ISVNProperty[] remoteProperties, IWorkbenchPart targetPart) { super(); this.svnResource = svnResource; this.conflictSummary = conflictSummary; this.propertyConflicts = propertyConflicts; this.remoteProperties = remoteProperties; this.targetPart = targetPart; } public void addPages() { super.addPages(); setWindowTitle(Messages.EditPropertyConflictsWizard_0); summaryPage = new EditPropertyConflictsWizardSummaryPage(); addPage(summaryPage); for (int i = 0; i < propertyConflicts.length; i++) { EditPropertyConflictsWizardPropertyPage propertyPage = new EditPropertyConflictsWizardPropertyPage(propertyConflicts[i]); addPage(propertyPage); } } public boolean performFinish() { IWizardPage[] pages = getPages(); for (int i = 0; i < pages.length; i++) { if (pages[i] instanceof EditPropertyConflictsWizardPropertyPage) { EditPropertyConflictsWizardPropertyPage propertyPage = (EditPropertyConflictsWizardPropertyPage)pages[i]; try { boolean deleteProperty = false; if (propertyPage.incomingSelected() && propertyPage.getRemoteProperty() == null && propertyPage.getPropertyValue().trim().length() == 0) { deleteProperty = true; } if (deleteProperty) { svnResource.deleteSvnProperty(propertyPage.getPropertyName(), false); } else { svnResource.setSvnProperty(propertyPage.getPropertyName(), propertyPage.getPropertyValue(), false); } } catch (SVNException e) { MessageDialog.openError(getShell(), getWindowTitle(), e.getMessage()); return false; } } } if (summaryPage.markResolvedButton.getSelection()) { IResource resource = svnResource.getResource(); IResource[] selectedResources = { resource }; try { new ResolveOperation(targetPart, selectedResources, ISVNConflictResolver.Choice.chooseMerged).run(); } catch (Exception e) { MessageDialog.openError(getShell(), getWindowTitle(), e.getMessage()); return false; } } return true; } public ISVNLocalResource getSvnResource() { return svnResource; } public String getConflictSummary() { return conflictSummary; } public PropertyConflict[] getPropertyConflicts() { return propertyConflicts; } public ISVNProperty[] getRemoteProperties() { return remoteProperties; } } EditPropertyConflictsWizardPropertyPage.java000066400000000000000000000117041203611042400463650ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflictspackage org.tigris.subversion.subclipse.ui.conflicts; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Text; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Messages; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.ISVNProperty; public class EditPropertyConflictsWizardPropertyPage extends WizardPage { private PropertyConflict propertyConflict; private ISVNProperty remoteProperty; private String propertyValue; private Button myValueButton; private Text myValueText; private Button incomingValueButton; private Text incomingValueText; public EditPropertyConflictsWizardPropertyPage(PropertyConflict propertyConflict) { super(propertyConflict.getPropertyName(), propertyConflict.getPropertyName(), SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_SVN)); this.propertyConflict = propertyConflict; } public void createControl(Composite parent) { EditPropertyConflictsWizard wizard = (EditPropertyConflictsWizard)getWizard(); ISVNLocalResource svnResource = wizard.getSvnResource(); try { ISVNProperty[] properties = svnResource.getSvnProperties(); for (int i = 0; i < properties.length; i++) { if (properties[i].getName().equals(propertyConflict.getPropertyName())) { propertyValue = properties[i].getValue(); break; } } } catch (SVNException e) {} ISVNProperty[] remoteProperties = wizard.getRemoteProperties(); for (int i = 0; i < remoteProperties.length; i++) { if (remoteProperties[i].getName().equals(propertyConflict.getPropertyName())) { remoteProperty = remoteProperties[i]; break; } } Composite outerContainer = new Composite(parent,SWT.NONE); outerContainer.setLayout(new GridLayout()); outerContainer.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); myValueButton = new Button(outerContainer, SWT.RADIO); myValueButton.setText(Messages.EditPropertyConflictsWizardPropertyPage_0); myValueText = new Text(outerContainer, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.H_SCROLL | SWT.V_SCROLL); GridData data = new GridData(GridData.FILL_BOTH); data.heightHint = 100; data.widthHint = 400; data.horizontalIndent = 30; data.grabExcessHorizontalSpace = true; myValueText.setLayoutData(data); if (propertyValue != null) { myValueText.setText(propertyValue); } incomingValueButton = new Button(outerContainer, SWT.RADIO); incomingValueButton.setText(Messages.EditPropertyConflictsWizardPropertyPage_1); incomingValueText = new Text(outerContainer, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.H_SCROLL | SWT.V_SCROLL); data = new GridData(GridData.FILL_BOTH); data.horizontalSpan = 2; data.heightHint = 100; data.widthHint = 400; data.horizontalIndent = 30; data.grabExcessHorizontalSpace = true; incomingValueText.setLayoutData(data); if (remoteProperty != null) { incomingValueText.setText(remoteProperty.getValue()); } myValueButton.setSelection(true); SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent evt) { if (incomingValueButton.getSelection()) { propertyValue = incomingValueText.getText(); } else { propertyValue = myValueText.getText(); } } }; myValueButton.addSelectionListener(selectionListener); incomingValueButton.addSelectionListener(selectionListener); ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent evt) { if (evt.getSource() == myValueText && myValueButton.getSelection()) { propertyValue = myValueText.getText(); } if (evt.getSource() == incomingValueText && incomingValueButton.getSelection()) { propertyValue = incomingValueText.getText(); } } }; myValueText.addModifyListener(modifyListener); incomingValueText.addModifyListener(modifyListener); setControl(outerContainer); setMessage(Messages.EditPropertyConflictsWizardPropertyPage_2 + propertyConflict.getPropertyName() + Messages.EditPropertyConflictsWizardPropertyPage_3); } public String getPropertyName() { return propertyConflict.getPropertyName(); } public String getPropertyValue() { return propertyValue; } public boolean incomingSelected() { return incomingValueButton.getSelection(); } public ISVNProperty getRemoteProperty() { return remoteProperty; } } EditPropertyConflictsWizardSummaryPage.java000066400000000000000000000045131203611042400461760ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflictspackage org.tigris.subversion.subclipse.ui.conflicts; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Text; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Messages; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class EditPropertyConflictsWizardSummaryPage extends WizardPage { protected Button markResolvedButton; public EditPropertyConflictsWizardSummaryPage() { super("summary", Messages.EditPropertyConflictsWizardSummaryPage_1, SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_SVN)); //$NON-NLS-1$ } public void createControl(Composite parent) { EditPropertyConflictsWizard wizard = (EditPropertyConflictsWizard)getWizard(); Composite outerContainer = new Composite(parent,SWT.NONE); outerContainer.setLayout(new GridLayout()); outerContainer.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); Group summaryGroup = new Group(outerContainer, SWT.NULL); GridLayout summaryLayout = new GridLayout(); summaryLayout.numColumns = 1; summaryGroup.setLayout(summaryLayout); GridData data = new GridData(GridData.FILL_BOTH); summaryGroup.setLayoutData(data); summaryGroup.setText(Messages.EditPropertyConflictsWizardSummaryPage_2); Text summaryText = new Text(summaryGroup, SWT.READ_ONLY | SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.H_SCROLL | SWT.V_SCROLL); data = new GridData(GridData.FILL_BOTH); data.heightHint = 100; data.widthHint = 400; data.grabExcessHorizontalSpace = true; summaryText.setLayoutData(data); summaryText.setText(wizard.getConflictSummary()); markResolvedButton = new Button(outerContainer, SWT.CHECK); markResolvedButton.setText(Messages.EditPropertyConflictsWizardSummaryPage_3); try { markResolvedButton.setVisible(!wizard.getSvnResource().getStatus().isTextConflicted()); } catch (SVNException e) {} setControl(outerContainer); setMessage(wizard.getSvnResource().getName() + Messages.EditPropertyConflictsWizardSummaryPage_4); } } ExternalFileEditorInput.java000066400000000000000000000066541203611042400431240ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflicts/******************************************************************************* * Copyright (c) 2009 CollabNet. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * CollabNet - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.conflicts; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.core.resources.IStorage; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.IPathEditorInput; import org.eclipse.ui.IPersistableElement; import org.eclipse.ui.IStorageEditorInput; import org.eclipse.ui.editors.text.ILocationProvider; import org.eclipse.ui.model.IWorkbenchAdapter; public class ExternalFileEditorInput implements IPathEditorInput, IStorageEditorInput, ILocationProvider { private class WorkbenchAdapter implements IWorkbenchAdapter { public Object[] getChildren(Object o) { return null; } public ImageDescriptor getImageDescriptor(Object object) { return null; } public String getLabel(Object o) { return ((ExternalFileEditorInput)o).getName(); } public Object getParent(Object o) { return null; } } private IFileStore fFileStore; private WorkbenchAdapter fWorkbenchAdapter= new WorkbenchAdapter(); private IStorage fStorage; private IPath fPath; public ExternalFileEditorInput(IFileStore fileStore) { fFileStore= fileStore; fWorkbenchAdapter= new WorkbenchAdapter(); } public boolean exists() { return fFileStore.fetchInfo().exists(); } public ImageDescriptor getImageDescriptor() { return null; } public String getName() { return fFileStore.getName(); } public IPersistableElement getPersistable() { return null; } public String getToolTipText() { return fFileStore.toString(); } public Object getAdapter(Class adapter) { if (ILocationProvider.class.equals(adapter)) return this; if (IWorkbenchAdapter.class.equals(adapter)) return fWorkbenchAdapter; return Platform.getAdapterManager().getAdapter(this, adapter); } public IPath getPath(Object element) { if (element instanceof ExternalFileEditorInput) return ((ExternalFileEditorInput)element).getPath(); return null; } public IPath getPath() { if (fPath == null) fPath= new Path(fFileStore.toURI().getPath()); return fPath; } public boolean equals(Object o) { if (o == this) return true; if (o instanceof ExternalFileEditorInput) { ExternalFileEditorInput input= (ExternalFileEditorInput) o; return fFileStore.equals(input.fFileStore); } if (o instanceof IPathEditorInput) { IPathEditorInput input= (IPathEditorInput)o; return getPath().equals(input.getPath()); } return false; } public int hashCode() { return fFileStore.hashCode(); } public IStorage getStorage() throws CoreException { if (fStorage == null) fStorage= new ExternalFileStorage(fFileStore); return fStorage; } } ExternalFileStorage.java000066400000000000000000000030641203611042400422520ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflicts/******************************************************************************* * Copyright (c) 2009 CollabNet. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * CollabNet - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.conflicts; import java.io.InputStream; import org.eclipse.core.filesystem.EFS; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.core.resources.IStorage; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; public class ExternalFileStorage implements IStorage { private IFileStore fFileStore; private IPath fFullPath; public ExternalFileStorage(IFileStore fileStore) { fFileStore= fileStore; } public InputStream getContents() throws CoreException { return fFileStore.openInputStream(EFS.NONE, null); } public IPath getFullPath() { if (fFullPath == null) fFullPath= new Path(fFileStore.toURI().getPath()); return fFullPath; } public String getName() { return fFileStore.getName(); } public boolean isReadOnly() { return fFileStore.fetchInfo().getAttribute(EFS.ATTRIBUTE_READ_ONLY); } public Object getAdapter(Class adapter) { return null; } } FileNode.java000066400000000000000000000054621203611042400400340ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflicts/******************************************************************************* * Copyright (c) 2009 CollabNet. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * CollabNet - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.conflicts; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.InputStream; import org.eclipse.compare.BufferedContent; import org.eclipse.compare.IEditableContent; import org.eclipse.compare.IEncodedStreamContentAccessor; import org.eclipse.compare.ITypedElement; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.swt.graphics.Image; public class FileNode extends BufferedContent implements ITypedElement, IEditableContent, IEncodedStreamContentAccessor { private File file; private String charSet; public FileNode(File file) { super(); this.file = file; Assert.isNotNull(file); } public void setCharSet(String charSet) { this.charSet = charSet; } public File getFile() { return file; } public String getName() { return file.getName(); } public String getPrefix() { String prefix = null; int index = getName().indexOf("."); //$NON-NLS-1$ if (index == -1) prefix = getName(); else prefix = getName().substring(0, index); while (prefix.length() < 3) prefix = prefix + "_"; //$NON-NLS-1$ return prefix; } public String getType() { int index = getName().indexOf("."); //$NON-NLS-1$ if (index != -1 && getName().length() > index + 1) { return getName().substring(index + 1); } return ITypedElement.TEXT_TYPE; } protected InputStream createStream() throws CoreException { try { return new FileInputStream(file); } catch (FileNotFoundException e) { return null; } } public void commit(IProgressMonitor pm) throws CoreException { byte[] bytes= getContent(); FileOutputStream os; try { os = new FileOutputStream(file); os.write(bytes); os.close(); } catch (Exception e) { e.printStackTrace(); } } public boolean isEditable() { return true; } public boolean isReadOnly() { return false; } public Image getImage() { return null; } public ITypedElement replace(ITypedElement dest, ITypedElement src) { return null; } public String getCharset() throws CoreException { return charSet; } } FinishedEditingWizardPage.java000066400000000000000000000124051203611042400433550ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflicts/******************************************************************************* * Copyright (c) 2009 CollabNet. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * CollabNet - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.conflicts; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Messages; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; public class FinishedEditingWizardPage extends WizardPage { private boolean propertyConflict; protected Button yesButton; protected Button noButton; private Group optionGroup; private Button markConflictedButton; private Button chooseUserVersionButton; private Button chooseUserVersionForConflictsButton; private Button chooseIncomingVersionButton; private Button chooseIncomingVersionForConflictsButton; private Button chooseBaseVersionButton; public FinishedEditingWizardPage(String pageName, boolean propertyConflict) { super(pageName, Messages.FinishedEditingWizardPage_0, SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_SVN)); this.propertyConflict = propertyConflict; } public void createControl(Composite parent) { Composite outerContainer = new Composite(parent,SWT.NONE); GridLayout outerLayout = new GridLayout(); outerLayout.numColumns = 1; outerContainer.setLayout(outerLayout); outerContainer.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); Composite composite = new Composite(outerContainer, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 1; composite.setLayout(layout); GridData data = new GridData(GridData.FILL_BOTH); composite.setLayoutData(data); yesButton = new Button(composite, SWT.RADIO); yesButton.setText(Messages.FinishedEditingWizardPage_1); noButton = new Button(composite, SWT.RADIO); noButton.setText(Messages.FinishedEditingWizardPage_2); noButton.setSelection(true); optionGroup = new Group(composite, SWT.NONE); optionGroup.setText(Messages.FinishedEditingWizardPage_3); GridLayout optionLayout = new GridLayout(); optionLayout.numColumns = 1; optionGroup.setLayout(optionLayout); data = new GridData(GridData.FILL_BOTH); optionGroup.setLayoutData(data); markConflictedButton = new Button(optionGroup, SWT.RADIO); markConflictedButton.setText(Messages.FinishedEditingWizardPage_4); chooseUserVersionButton = new Button(optionGroup, SWT.RADIO); chooseUserVersionButton.setText(Messages.FinishedEditingWizardPage_5); if (!propertyConflict) { chooseUserVersionForConflictsButton = new Button(optionGroup, SWT.RADIO); chooseUserVersionForConflictsButton.setText(Messages.FinishedEditingWizardPage_9); } chooseIncomingVersionButton = new Button(optionGroup, SWT.RADIO); chooseIncomingVersionButton.setText(Messages.FinishedEditingWizardPage_6); if (!propertyConflict) { chooseIncomingVersionForConflictsButton = new Button(optionGroup, SWT.RADIO); chooseIncomingVersionForConflictsButton.setText(Messages.FinishedEditingWizardPage_10); } chooseBaseVersionButton = new Button(optionGroup, SWT.RADIO); chooseBaseVersionButton.setText(Messages.FinishedEditingWizardPage_7); markConflictedButton.setSelection(true); SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { optionGroup.setVisible(noButton.getSelection()); } }; yesButton.addSelectionListener(selectionListener); noButton.addSelectionListener(selectionListener); setMessage(Messages.FinishedEditingWizardPage_8); setControl(outerContainer); } public int getResolution() { if (yesButton.getSelection()) return ISVNConflictResolver.Choice.chooseMerged; else { if (chooseUserVersionButton.getSelection()) return ISVNConflictResolver.Choice.chooseMineFull; else if (chooseIncomingVersionButton.getSelection()) return ISVNConflictResolver.Choice.chooseTheirsFull; else if (chooseBaseVersionButton.getSelection()) return ISVNConflictResolver.Choice.chooseBase; else if (chooseUserVersionForConflictsButton != null && chooseUserVersionForConflictsButton.getSelection()) return ISVNConflictResolver.Choice.chooseMine; else if (chooseIncomingVersionForConflictsButton != null && chooseIncomingVersionForConflictsButton.getSelection()) return ISVNConflictResolver.Choice.chooseTheirs; else return ISVNConflictResolver.Choice.postpone; } } } MergeFileAssociation.java000066400000000000000000000043631203611042400424020ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflictspackage org.tigris.subversion.subclipse.ui.conflicts; import org.osgi.service.prefs.BackingStoreException; import org.osgi.service.prefs.Preferences; import org.tigris.subversion.subclipse.core.util.StringMatcher; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class MergeFileAssociation implements Comparable { private String fileType; private int type; private String mergeProgram; private String parameters; public final static int BUILT_IN = 0; public final static int DEFAULT_EXTERNAL = 1; public final static int CUSTOM_EXTERNAL = 2; public static final String PREF_MERGE_FILE_ASSOCIATIONS_NODE = "mergeFileAssociations"; //$NON-NLS-1$ public String getFileType() { return fileType; } public void setFileType(String fileType) { this.fileType = fileType; } public int getType() { return type; } public void setType(int type) { this.type = type; } public String getMergeProgram() { return mergeProgram; } public void setMergeProgram(String mergeProgram) { this.mergeProgram = mergeProgram; } public String getParameters() { return parameters; } public void setParameters(String parameters) { this.parameters = parameters; } public static Preferences getParentPreferences() { return SVNUIPlugin.getPlugin().getInstancePreferences().node(PREF_MERGE_FILE_ASSOCIATIONS_NODE); } public boolean matches(String fileName) { StringMatcher stringMatcher = new StringMatcher(getFileType(), false, false); return stringMatcher.match(fileName); } public int compareTo(Object object) { if (!(object instanceof MergeFileAssociation)) toString().compareTo(object.toString()); MergeFileAssociation compareTo = (MergeFileAssociation)object; return fileType.compareTo(compareTo.getFileType()); } public boolean equals(Object object) { if (!(object instanceof MergeFileAssociation)) return false; MergeFileAssociation compareTo = (MergeFileAssociation)object; return fileType.equals(compareTo.getFileType()); } public int hashCode() { return fileType.hashCode(); } public boolean remove() { Preferences node = MergeFileAssociation.getParentPreferences().node(getFileType()); if (node != null) { try { node.removeNode(); } catch (BackingStoreException e) { } } return false; } } MergeFileAssociationPreferencePage.java000066400000000000000000000566621203611042400452070ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflictspackage org.tigris.subversion.subclipse.ui.conflicts; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ColumnLayoutData; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.ListDialog; import org.osgi.service.prefs.BackingStoreException; import org.osgi.service.prefs.Preferences; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class MergeFileAssociationPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { private Table table; private TableViewer viewer; private Button removeButton; private Group mergeProgramGroup; private Text defaultProgramLocationText; private Text defaultProgramParametersText; private Combo customProgramLocationCombo; private Text customProgramParametersText; private Button builtInMergeRadioButton; private Button externalMergeRadioButton; private Button customMergeRadioButton; private Button browseMergeProgramButton; private Button variablesButton; private IPreferenceStore store; private MergeFileAssociation[] mergeFileAssociations; private boolean associationsUpdated = false; private boolean updating = true; private static ArrayList images; class StringPair { String s1; String s2; } private String[] columnHeaders = {""}; //$NON-NLS-1$ private ColumnLayoutData columnLayouts[] = { new ColumnWeightData(100, 100, true)}; protected Control createContents(Composite parent) { images = new ArrayList(); store = SVNUIPlugin.getPlugin().getPreferenceStore(); mergeFileAssociations = getMergeFileAssociations(); Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 2; composite.setLayout(layout); GridData gridData = new GridData(); gridData.horizontalAlignment = GridData.FILL; composite.setLayoutData(gridData); Label fileTypesLabel = new Label(composite, SWT.NONE); gridData = new GridData(); gridData.horizontalSpan = 2; fileTypesLabel.setLayoutData(gridData); fileTypesLabel.setText(Policy.bind("MergeFileAssociationPreferencePage.fileTypes")); //$NON-NLS-1$ table = new Table(composite, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION); table.setLinesVisible(false); gridData = new GridData(); gridData.widthHint = 400; gridData.heightHint = 200; table.setLayoutData(gridData); TableLayout tableLayout = new TableLayout(); table.setLayout(tableLayout); table.setHeaderVisible(false); viewer = new TableViewer(table); viewer.setContentProvider(new MergeFileAssociationsContentProvider()); viewer.setLabelProvider(new MergeFileAssociationsLabelProvider()); for (int i = 0; i < columnHeaders.length; i++) { tableLayout.addColumnData(columnLayouts[i]); TableColumn tc = new TableColumn(table, SWT.NONE,i); tc.setResizable(columnLayouts[i].resizable); tc.setText(columnHeaders[i]); } viewer.setInput(this); Composite buttonGroup = new Composite(composite, SWT.NULL); gridData = new GridData(GridData.FILL_HORIZONTAL); buttonGroup.setLayoutData(gridData); GridLayout buttonLayout = new GridLayout(); buttonLayout.numColumns = 1; buttonGroup.setLayout(buttonLayout); Button addButton = new Button(buttonGroup, SWT.PUSH); addButton.setText(Policy.bind("MergeFileAssociationPreferencePage.add")); //$NON-NLS-1$ gridData = new GridData(); gridData.horizontalAlignment = GridData.FILL; addButton.setLayoutData(gridData); addButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { addFileType(); } }); removeButton = new Button(buttonGroup, SWT.PUSH); removeButton.setText(Policy.bind("MergeFileAssociationPreferencePage.remove")); //$NON-NLS-1$ gridData = new GridData(); gridData.horizontalAlignment = GridData.FILL; removeButton.setLayoutData(gridData); removeButton.setEnabled(false); removeButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { removeFileType(); } }); mergeProgramGroup = new Group(composite, SWT.NULL); mergeProgramGroup.setText(Policy.bind("MergeFileAssociationPreferencePage.mergeProgramGroup")); //$NON-NLS-1$ gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 2; mergeProgramGroup.setLayoutData(gridData); GridLayout mergeProgramGroupLayout = new GridLayout(); mergeProgramGroupLayout.numColumns = 3; mergeProgramGroup.setLayout(mergeProgramGroupLayout); builtInMergeRadioButton = new Button(mergeProgramGroup, SWT.RADIO); builtInMergeRadioButton.setText(Policy.bind("DiffMergePreferencePage.builtInMerge")); //$NON-NLS-1$ gridData = new GridData(); gridData.horizontalSpan = 3; builtInMergeRadioButton.setLayoutData(gridData); externalMergeRadioButton = new Button(mergeProgramGroup, SWT.RADIO); externalMergeRadioButton.setText(Policy.bind("MergeFileAssociationPreferencePage.defaultExternal")); //$NON-NLS-1$ gridData = new GridData(); defaultProgramLocationText = new Text(mergeProgramGroup, SWT.BORDER); defaultProgramLocationText.setEnabled(false); gridData = new GridData(); gridData.horizontalSpan = 2; gridData.widthHint = 400; defaultProgramLocationText.setLayoutData(gridData); Label defaultParametersLabel = new Label(mergeProgramGroup, SWT.NONE); defaultParametersLabel.setText(Policy.bind("DiffMergePreferencePage.mergeProgramParameters")); //$NON-NLS-1$ gridData = new GridData(); gridData.horizontalAlignment = SWT.RIGHT; defaultParametersLabel.setLayoutData(gridData); defaultProgramParametersText = new Text(mergeProgramGroup, SWT.BORDER); defaultProgramParametersText.setEnabled(false); gridData = new GridData(); gridData.horizontalSpan = 2; gridData.widthHint = 400; defaultProgramParametersText.setLayoutData(gridData); defaultProgramLocationText.setText(store .getString(ISVNUIConstants.PREF_MERGE_PROGRAM_LOCATION)); defaultProgramParametersText.setText(store .getString(ISVNUIConstants.PREF_MERGE_PROGRAM_PARAMETERS)); customMergeRadioButton = new Button(mergeProgramGroup, SWT.RADIO); customMergeRadioButton.setText(Policy.bind("MergeFileAssociationPreferencePage.customExternal")); //$NON-NLS-1$ customProgramLocationCombo = new Combo(mergeProgramGroup, SWT.BORDER); gridData = new GridData(); gridData.widthHint = 400; customProgramLocationCombo.setLayoutData(gridData); customProgramLocationCombo.setEnabled(false); for (int i = 0; i < mergeFileAssociations.length; i++) { if (mergeFileAssociations[i].getType() == MergeFileAssociation.CUSTOM_EXTERNAL) { if (customProgramLocationCombo.indexOf(mergeFileAssociations[i].getMergeProgram()) == -1) customProgramLocationCombo.add(mergeFileAssociations[i].getMergeProgram()); } } browseMergeProgramButton = new Button(mergeProgramGroup, SWT.PUSH); browseMergeProgramButton.setText(Policy.bind("DiffMergePreferencePage.browse")); //$NON-NLS-1$ gridData = new GridData(); gridData.horizontalAlignment = GridData.FILL; browseMergeProgramButton.setLayoutData(gridData); browseMergeProgramButton.setEnabled(false); browseMergeProgramButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { FileDialog fileDialog = new FileDialog(getShell(), SWT.OPEN); String res = fileDialog.open(); if (res != null) { customProgramLocationCombo.setText(res); } } }); Label customParametersLabel = new Label(mergeProgramGroup, SWT.NONE); customParametersLabel.setText(Policy.bind("DiffMergePreferencePage.mergeProgramParameters")); //$NON-NLS-1$ gridData = new GridData(); gridData.horizontalAlignment = SWT.RIGHT; customParametersLabel.setLayoutData(gridData); customProgramParametersText = new Text(mergeProgramGroup, SWT.BORDER); defaultProgramParametersText.setEnabled(false); gridData = new GridData(); gridData.widthHint = 400; customProgramParametersText.setLayoutData(gridData); variablesButton = new Button(mergeProgramGroup, SWT.PUSH); variablesButton.setText(Policy.bind("DiffMergePreferencePage.mergeProgramVariables")); //$NON-NLS-1$ gridData = new GridData(); gridData.horizontalAlignment = GridData.FILL; variablesButton.setLayoutData(gridData); variablesButton.setEnabled(false); final Text formatToInsert = customProgramParametersText; variablesButton.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { addVariables(formatToInsert, getMergeBindingDescriptions()); } }); mergeProgramGroup.setEnabled(false); viewer.getTable().addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { updating = false; removeButton.setEnabled(!viewer.getSelection().isEmpty()); mergeProgramGroup.setEnabled(!viewer.getSelection().isEmpty()); IStructuredSelection selection = (IStructuredSelection)viewer.getSelection(); MergeFileAssociation mergeFileAssociation = (MergeFileAssociation)selection.getFirstElement(); if (mergeFileAssociation != null) { switch (mergeFileAssociation.getType()) { case MergeFileAssociation.BUILT_IN: builtInMergeRadioButton.setSelection(true); externalMergeRadioButton.setSelection(false); customMergeRadioButton.setSelection(false); break; case MergeFileAssociation.DEFAULT_EXTERNAL: externalMergeRadioButton.setSelection(true); builtInMergeRadioButton.setSelection(false); customMergeRadioButton.setSelection(false); break; case MergeFileAssociation.CUSTOM_EXTERNAL: customMergeRadioButton.setSelection(true); builtInMergeRadioButton.setSelection(false); externalMergeRadioButton.setSelection(false); break; default: break; } if (mergeFileAssociation.getMergeProgram() == null) customProgramLocationCombo.setText(""); //$NON-NLS-1$ else customProgramLocationCombo.setText(mergeFileAssociation.getMergeProgram()); if (mergeFileAssociation.getParameters() == null) customProgramParametersText.setText(""); //$NON-NLS-1$ else customProgramParametersText.setText(mergeFileAssociation.getParameters()); customProgramLocationCombo.setEnabled(customMergeRadioButton.getSelection()); customProgramParametersText.setEnabled(customMergeRadioButton.getSelection()); browseMergeProgramButton.setEnabled(customMergeRadioButton.getSelection()); variablesButton.setEnabled(customMergeRadioButton.getSelection()); } updating = true; } }); SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { customProgramLocationCombo.setEnabled(customMergeRadioButton.getSelection()); customProgramParametersText.setEnabled(customMergeRadioButton.getSelection()); browseMergeProgramButton.setEnabled(customMergeRadioButton.getSelection()); variablesButton.setEnabled(customMergeRadioButton.getSelection()); if (e.getSource() == customMergeRadioButton && customMergeRadioButton.getSelection()) customProgramLocationCombo.setFocus(); if (e.getSource() == customProgramLocationCombo) { for (int i = 0; i < mergeFileAssociations.length; i++) { if (mergeFileAssociations[i].getType() == MergeFileAssociation.CUSTOM_EXTERNAL) { if (mergeFileAssociations[i].getMergeProgram().equals(customProgramLocationCombo.getText())) { customProgramParametersText.setText(mergeFileAssociations[i].getParameters()); break; } } } } if (e.getSource() instanceof Button) { IStructuredSelection selection = (IStructuredSelection)viewer.getSelection(); MergeFileAssociation mergeFileAssociation = (MergeFileAssociation)selection.getFirstElement(); if (mergeFileAssociation != null) { int type = mergeFileAssociation.getType(); if (builtInMergeRadioButton.getSelection()) type = MergeFileAssociation.BUILT_IN; else if (externalMergeRadioButton.getSelection()) type = MergeFileAssociation.DEFAULT_EXTERNAL; else if (customMergeRadioButton.getSelection()) type = MergeFileAssociation.CUSTOM_EXTERNAL; if (type != mergeFileAssociation.getType()) { associationsUpdated = true; mergeFileAssociation.setType(type); } } } } }; builtInMergeRadioButton.addSelectionListener(selectionListener); externalMergeRadioButton.addSelectionListener(selectionListener); customMergeRadioButton.addSelectionListener(selectionListener); customProgramLocationCombo.addSelectionListener(selectionListener); ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { IStructuredSelection selection = (IStructuredSelection)viewer.getSelection(); MergeFileAssociation mergeFileAssociation = (MergeFileAssociation)selection.getFirstElement(); if (updating && mergeFileAssociation != null) { associationsUpdated = true; mergeFileAssociation.setMergeProgram(customProgramLocationCombo.getText().trim()); mergeFileAssociation.setParameters(customProgramParametersText.getText().trim()); } } }; customProgramLocationCombo.addModifyListener(modifyListener); customProgramParametersText.addModifyListener(modifyListener); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; customProgramParametersText.addFocusListener(focusListener); return composite; } public void init(IWorkbench workbench) { noDefaultAndApplyButton(); } public boolean performOk() { MergeFileAssociation[] currentAssociations = getMergeFileAssociations(); for (int i = 0; i < currentAssociations.length; i++) { currentAssociations[i].remove(); } for (int i = 0; i < mergeFileAssociations.length; i++) { Preferences prefs = MergeFileAssociation.getParentPreferences().node(mergeFileAssociations[i].getFileType()); if (mergeFileAssociations[i].getMergeProgram() == null) prefs.put("mergeProgram", ""); //$NON-NLS-1$ //$NON-NLS-1$ //$NON-NLS-2$ else prefs.put("mergeProgram", mergeFileAssociations[i].getMergeProgram()); //$NON-NLS-1$ if (mergeFileAssociations[i].getParameters() == null)prefs.put("parameters", ""); //$NON-NLS-1$ //$NON-NLS-1$ //$NON-NLS-2$ else prefs.put("parameters", mergeFileAssociations[i].getParameters()); //$NON-NLS-1$ prefs.putInt("type", mergeFileAssociations[i].getType()); //$NON-NLS-1$ try { prefs.flush(); } catch (BackingStoreException e) {} } return super.performOk(); } public boolean performCancel() { if (associationsUpdated) { if (MessageDialog.openQuestion(getShell(), Policy.bind("MergeFileAssociationPreferencePage.title"), Policy.bind("MergeFileAssociationPreferencePage.confirmCancel"))) //$NON-NLS-1$ //$NON-NLS-1$ //$NON-NLS-2$ performOk(); } return super.performCancel(); } public void dispose() { Iterator iter = images.iterator(); while(iter.hasNext()) { Image image = (Image)iter.next(); image.dispose(); } super.dispose(); } private void addFileType() { NewMergeFileAssociationWizard wizard = new NewMergeFileAssociationWizard(mergeFileAssociations); WizardDialog dialog = new WizardDialog(Display.getCurrent().getActiveShell(), wizard); if (dialog.open() == WizardDialog.CANCEL) return; associationsUpdated = true; ArrayList associationsList = new ArrayList(); for (int i = 0; i < mergeFileAssociations.length; i++) associationsList.add(mergeFileAssociations[i]); associationsList.add(wizard.getMergeFileAssociation()); mergeFileAssociations = new MergeFileAssociation[associationsList.size()]; associationsList.toArray(mergeFileAssociations); Arrays.sort(mergeFileAssociations); viewer.refresh(); } private void removeFileType() { associationsUpdated = true; ArrayList associationsList = new ArrayList(); for (int i = 0; i < mergeFileAssociations.length; i++) associationsList.add(mergeFileAssociations[i]); IStructuredSelection selection = (IStructuredSelection)viewer.getSelection(); Iterator iter = selection.iterator(); while (iter.hasNext()) { associationsList.remove(iter.next()); } mergeFileAssociations = new MergeFileAssociation[associationsList.size()]; associationsList.toArray(mergeFileAssociations); viewer.refresh(); builtInMergeRadioButton.setSelection(false); externalMergeRadioButton.setSelection(false); customMergeRadioButton.setSelection(false); customProgramLocationCombo.setText(""); //$NON-NLS-1$ customProgramParametersText.setText(""); //$NON-NLS-1$ } private MergeFileAssociation[] getMergeFileAssociations() { try { return SVNUIPlugin.getPlugin().getMergeFileAssociations(); } catch (BackingStoreException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); return new MergeFileAssociation[0]; } } class MergeFileAssociationsContentProvider implements IStructuredContentProvider { public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } public Object[] getElements(Object obj) { return mergeFileAssociations; } } static class MergeFileAssociationsLabelProvider extends LabelProvider implements ITableLabelProvider { public String getColumnText(Object element, int columnIndex) { MergeFileAssociation mergeFileAssociation = (MergeFileAssociation)element; switch (columnIndex) { case 0: return mergeFileAssociation.getFileType(); } return ""; //$NON-NLS-1$ } public Image getColumnImage(Object element, int columnIndex) { MergeFileAssociation mergeFileAssociation = (MergeFileAssociation)element; ImageDescriptor id = PlatformUI.getWorkbench().getEditorRegistry().getImageDescriptor(mergeFileAssociation.getFileType()); if (id == null) id = PlatformUI.getWorkbench().getEditorRegistry().getImageDescriptor("file.txt"); //$NON-NLS-1$ if (id != null) { Image image = id.createImage(); images.add(image); return image; } return null; } } private void addVariables(Text target, Map bindings) { final List variables = new ArrayList(bindings.size()); ILabelProvider labelProvider = new LabelProvider() { public String getText(Object element) { return ((StringPair) element).s1 + " - " + ((StringPair) element).s2; //$NON-NLS-1$ } }; IStructuredContentProvider contentsProvider = new IStructuredContentProvider() { public Object[] getElements(Object inputElement) { return variables.toArray(new StringPair[variables.size()]); } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } }; for (Iterator it = bindings.keySet().iterator(); it.hasNext();) { StringPair variable = new StringPair(); variable.s1 = (String) it.next(); // variable variable.s2 = (String) bindings.get(variable.s1); // description variables.add(variable); } ListDialog dialog = new ListDialog(this.getShell()); dialog.setContentProvider(contentsProvider); dialog.setAddCancelButton(true); dialog.setLabelProvider(labelProvider); dialog.setInput(variables); dialog.setTitle(Policy .bind("DiffMergePreferencePage.addVariableDialogTitle")); //$NON-NLS-1$ if (dialog.open() != ListDialog.OK) return; Object[] result = dialog.getResult(); for (int i = 0; i < result.length; i++) { target.insert("${" + ((StringPair) result[i]).s1 + "}"); //$NON-NLS-1$ //$NON-NLS-2$ } } private Map getMergeBindingDescriptions() { Map bindings = new HashMap(); bindings .put( "merged", Policy.bind("DiffMergePreferencePage.mergedVariableComment")); //$NON-NLS-1$ //$NON-NLS-2$ bindings .put( "theirs", Policy.bind("DiffMergePreferencePage.theirsVariableComment")); //$NON-NLS-1$ //$NON-NLS-2$ bindings .put( "yours", Policy.bind("DiffMergePreferencePage.yoursVariableComment")); //$NON-NLS-1$ //$NON-NLS-2$ bindings .put( "base", Policy.bind("DiffMergePreferencePage.baseVariableComment"));//$NON-NLS-1$ //$NON-NLS-2$ return bindings; } } NewMergeFileAssociationWizard.java000066400000000000000000000034021203611042400442260ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflictspackage org.tigris.subversion.subclipse.ui.conflicts; import org.eclipse.jface.wizard.Wizard; import org.eclipse.team.internal.ui.TeamUIMessages; import org.tigris.subversion.subclipse.ui.Policy; public class NewMergeFileAssociationWizard extends Wizard { private MergeFileAssociation[] mergeFileAssociations; private NewMergeFileAssociationWizardPage mainPage; private MergeFileAssociation mergeFileAssociation; public NewMergeFileAssociationWizard(MergeFileAssociation[] mergeFileAssociations) { this.mergeFileAssociations = mergeFileAssociations; setWindowTitle(TeamUIMessages.TextPreferencePage_6); } public void addPages() { mainPage = new NewMergeFileAssociationWizardPage("mainPage", Policy.bind("NewMergeFileAssociationWizard.heading"), null, mergeFileAssociations); //$NON-NLS-1$ //$NON-NLS-2$ mainPage.setDescription(Policy.bind("NewMergeFileAssociationWizard.description")); //$NON-NLS-1$ addPage(mainPage); } public boolean performFinish() { mergeFileAssociation = new MergeFileAssociation(); mergeFileAssociation.setFileType(mainPage.fileTypeText.getText().trim()); if (mainPage.builtInMergeRadioButton.getSelection()) mergeFileAssociation.setType(MergeFileAssociation.BUILT_IN); else if (mainPage.externalMergeRadioButton.getSelection()) mergeFileAssociation.setType(MergeFileAssociation.DEFAULT_EXTERNAL); else if (mainPage.customMergeRadioButton.getSelection()) { mergeFileAssociation.setType(MergeFileAssociation.CUSTOM_EXTERNAL); mergeFileAssociation.setMergeProgram(mainPage.customProgramLocationCombo.getText().trim()); mergeFileAssociation.setParameters(mainPage.customProgramParametersText.getText().trim()); } return true; } public MergeFileAssociation getMergeFileAssociation() { return mergeFileAssociation; } } NewMergeFileAssociationWizardPage.java000066400000000000000000000324371203611042400450350ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflictspackage org.tigris.subversion.subclipse.ui.conflicts; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.dialogs.ListDialog; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class NewMergeFileAssociationWizardPage extends WizardPage { private MergeFileAssociation[] mergeFileAssociations; protected Text fileTypeText; private Text defaultProgramLocationText; private Text defaultProgramParametersText; protected Combo customProgramLocationCombo; protected Text customProgramParametersText; protected Button builtInMergeRadioButton; protected Button externalMergeRadioButton; protected Button customMergeRadioButton; private Button browseMergeProgramButton; private Button variablesButton; class StringPair { String s1; String s2; } public NewMergeFileAssociationWizardPage(String pageName, String title, ImageDescriptor titleImage, MergeFileAssociation[] mergeFileAssociations) { super(pageName, title, titleImage); this.mergeFileAssociations = mergeFileAssociations; } public void createControl(Composite parent) { setPageComplete(false); IPreferenceStore store = SVNUIPlugin.getPlugin().getPreferenceStore(); Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 2; composite.setLayout(layout); GridData gridData = new GridData(); gridData.horizontalAlignment = GridData.FILL; composite.setLayoutData(gridData); Label fileTypeLabel = new Label(composite, SWT.NONE); fileTypeLabel.setText(Policy.bind("NewMergeFileAssociationWizardPage.fileType")); //$NON-NLS-1$ fileTypeText = new Text(composite, SWT.BORDER); gridData = new GridData(); gridData.widthHint = 300; fileTypeText.setLayoutData(gridData); Group mergeProgramGroup = new Group(composite, SWT.NULL); mergeProgramGroup.setText(Policy.bind("MergeFileAssociationPreferencePage.mergeProgramGroup")); //$NON-NLS-1$ gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 2; mergeProgramGroup.setLayoutData(gridData); GridLayout mergeProgramGroupLayout = new GridLayout(); mergeProgramGroupLayout.numColumns = 3; mergeProgramGroup.setLayout(mergeProgramGroupLayout); builtInMergeRadioButton = new Button(mergeProgramGroup, SWT.RADIO); builtInMergeRadioButton.setText(Policy.bind("DiffMergePreferencePage.builtInMerge")); //$NON-NLS-1$ gridData = new GridData(); gridData.horizontalSpan = 3; builtInMergeRadioButton.setLayoutData(gridData); externalMergeRadioButton = new Button(mergeProgramGroup, SWT.RADIO); externalMergeRadioButton.setText(Policy.bind("MergeFileAssociationPreferencePage.defaultExternal")); //$NON-NLS-1$ gridData = new GridData(); defaultProgramLocationText = new Text(mergeProgramGroup, SWT.BORDER); defaultProgramLocationText.setEnabled(false); gridData = new GridData(); gridData.horizontalSpan = 2; gridData.widthHint = 400; defaultProgramLocationText.setLayoutData(gridData); Label defaultParametersLabel = new Label(mergeProgramGroup, SWT.NONE); defaultParametersLabel.setText(Policy.bind("DiffMergePreferencePage.mergeProgramParameters")); //$NON-NLS-1$ gridData = new GridData(); gridData.horizontalAlignment = SWT.RIGHT; defaultParametersLabel.setLayoutData(gridData); defaultProgramParametersText = new Text(mergeProgramGroup, SWT.BORDER); defaultProgramParametersText.setEnabled(false); gridData = new GridData(); gridData.horizontalSpan = 2; gridData.widthHint = 400; defaultProgramParametersText.setLayoutData(gridData); defaultProgramLocationText.setText(store .getString(ISVNUIConstants.PREF_MERGE_PROGRAM_LOCATION)); defaultProgramParametersText.setText(store .getString(ISVNUIConstants.PREF_MERGE_PROGRAM_PARAMETERS)); customMergeRadioButton = new Button(mergeProgramGroup, SWT.RADIO); customMergeRadioButton.setText(Policy.bind("MergeFileAssociationPreferencePage.customExternal")); //$NON-NLS-1$ customProgramLocationCombo = new Combo(mergeProgramGroup, SWT.BORDER); gridData = new GridData(); gridData.widthHint = 400; customProgramLocationCombo.setLayoutData(gridData); for (int i = 0; i < mergeFileAssociations.length; i++) { if (mergeFileAssociations[i].getType() == MergeFileAssociation.CUSTOM_EXTERNAL) { if (customProgramLocationCombo.indexOf(mergeFileAssociations[i].getMergeProgram()) == -1) customProgramLocationCombo.add(mergeFileAssociations[i].getMergeProgram()); } } browseMergeProgramButton = new Button(mergeProgramGroup, SWT.PUSH); browseMergeProgramButton.setText(Policy.bind("DiffMergePreferencePage.browse")); //$NON-NLS-1$ gridData = new GridData(); gridData.horizontalAlignment = GridData.FILL; browseMergeProgramButton.setLayoutData(gridData); browseMergeProgramButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent event) { FileDialog fileDialog = new FileDialog(getShell(), SWT.OPEN); String res = fileDialog.open(); if (res != null) { customProgramLocationCombo.setText(res); } } }); Label customParametersLabel = new Label(mergeProgramGroup, SWT.NONE); customParametersLabel.setText(Policy.bind("NewMergeFileAssociationWizardPage.customParameters")); //$NON-NLS-1$ gridData = new GridData(); gridData.horizontalAlignment = SWT.RIGHT; customParametersLabel.setLayoutData(gridData); customProgramParametersText = new Text(mergeProgramGroup, SWT.BORDER); gridData = new GridData(); gridData.widthHint = 400; customProgramParametersText.setLayoutData(gridData); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; fileTypeText.addFocusListener(focusListener); customProgramParametersText.addFocusListener(focusListener); variablesButton = new Button(mergeProgramGroup, SWT.PUSH); variablesButton.setText(Policy.bind("DiffMergePreferencePage.mergeProgramVariables")); //$NON-NLS-1$ gridData = new GridData(); gridData.horizontalAlignment = GridData.FILL; variablesButton.setLayoutData(gridData); final Text formatToInsert = customProgramParametersText; variablesButton.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { addVariables(formatToInsert, getMergeBindingDescriptions()); } }); customMergeRadioButton.setSelection(true); ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(canFinish()); } }; fileTypeText.addModifyListener(modifyListener); customProgramLocationCombo.addModifyListener(modifyListener); SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { setPageComplete(canFinish()); customProgramLocationCombo.setEnabled(customMergeRadioButton.getSelection()); customProgramParametersText.setEnabled(customMergeRadioButton.getSelection()); if (e.getSource() == customMergeRadioButton && customMergeRadioButton.getSelection()) customProgramLocationCombo.setFocus(); if (e.getSource() == customProgramLocationCombo) { for (int i = 0; i < mergeFileAssociations.length; i++) { if (mergeFileAssociations[i].getType() == MergeFileAssociation.CUSTOM_EXTERNAL) { if (mergeFileAssociations[i].getMergeProgram().equals(customProgramLocationCombo.getText())) { customProgramParametersText.setText(mergeFileAssociations[i].getParameters()); break; } } } } } }; builtInMergeRadioButton.addSelectionListener(selectionListener); externalMergeRadioButton.addSelectionListener(selectionListener); customMergeRadioButton.addSelectionListener(selectionListener); customProgramLocationCombo.addSelectionListener(selectionListener); fileTypeText.setFocus(); setControl(composite); } private boolean canFinish() { setErrorMessage(null); if (fileTypeText.getText().trim().length() == 0) return false; if (fileTypeText.getText().indexOf(".") == -1) return false; //$NON-NLS-1$ for (int i = 0; i < mergeFileAssociations.length; i++) { if (mergeFileAssociations[i].getFileType().equals(fileTypeText.getText().trim())) { String[] fileType = { fileTypeText.getText().trim() }; setErrorMessage(Policy.bind("NewMergeFileAssociationWizardPage.fileTypeExists", fileType)); //$NON-NLS-1$ return false; } } if (customMergeRadioButton.getSelection()) { if (customProgramLocationCombo.getText().trim().length() == 0) return false; } return true; } private void addVariables(Text target, Map bindings) { final List variables = new ArrayList(bindings.size()); ILabelProvider labelProvider = new LabelProvider() { public String getText(Object element) { return ((StringPair) element).s1 + " - " + ((StringPair) element).s2; //$NON-NLS-1$ } }; IStructuredContentProvider contentsProvider = new IStructuredContentProvider() { public Object[] getElements(Object inputElement) { return variables.toArray(new StringPair[variables.size()]); } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } }; for (Iterator it = bindings.keySet().iterator(); it.hasNext();) { StringPair variable = new StringPair(); variable.s1 = (String) it.next(); // variable variable.s2 = (String) bindings.get(variable.s1); // description variables.add(variable); } ListDialog dialog = new ListDialog(this.getShell()); dialog.setContentProvider(contentsProvider); dialog.setAddCancelButton(true); dialog.setLabelProvider(labelProvider); dialog.setInput(variables); dialog.setTitle(Policy .bind("DiffMergePreferencePage.addVariableDialogTitle")); //$NON-NLS-1$ if (dialog.open() != ListDialog.OK) return; Object[] result = dialog.getResult(); for (int i = 0; i < result.length; i++) { target.insert("${" + ((StringPair) result[i]).s1 + "}"); //$NON-NLS-1$ //$NON-NLS-2$ } } private Map getMergeBindingDescriptions() { Map bindings = new HashMap(); bindings .put( "merged", Policy.bind("DiffMergePreferencePage.mergedVariableComment")); //$NON-NLS-1$ //$NON-NLS-2$ bindings .put( "theirs", Policy.bind("DiffMergePreferencePage.theirsVariableComment")); //$NON-NLS-1$ //$NON-NLS-2$ bindings .put( "yours", Policy.bind("DiffMergePreferencePage.yoursVariableComment")); //$NON-NLS-1$ //$NON-NLS-2$ bindings .put( "base", Policy.bind("DiffMergePreferencePage.baseVariableComment"));//$NON-NLS-1$ //$NON-NLS-2$ return bindings; } } OpenFileInSystemEditorAction.java000066400000000000000000000026521203611042400440470ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflictspackage org.tigris.subversion.subclipse.ui.conflicts; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.actions.OpenFileAction; import org.tigris.subversion.subclipse.core.resources.SVNTreeConflict; public class OpenFileInSystemEditorAction extends OpenFileAction { private ISelectionProvider selectionProvider; public OpenFileInSystemEditorAction(IWorkbenchPage page, ISelectionProvider selectionProvider) { super(page); this.selectionProvider = selectionProvider; } protected List getSelectedResources() { ArrayList openableFiles = new ArrayList(); IStructuredSelection selection = (IStructuredSelection)selectionProvider.getSelection(); Iterator iter = selection.iterator(); while (iter.hasNext()) { Object element = iter.next(); if (element instanceof SVNTreeConflict) { SVNTreeConflict treeConflict = (SVNTreeConflict)element; IResource resource = treeConflict.getResource(); if (resource instanceof IFile && resource.exists()) { openableFiles.add(resource); } } } return openableFiles; } protected List getSelectedNonResources() { return Collections.EMPTY_LIST; } } PropertyConflict.java000066400000000000000000000072361203611042400416560ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflictspackage org.tigris.subversion.subclipse.ui.conflicts; import java.io.BufferedReader; import java.io.File; import java.io.FileReader; import java.io.IOException; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.Path; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.svnclientadapter.ISVNProperty; public class PropertyConflict { private String propertyName; private String oldLocalValue; private String newLocalValue; private String oldIncomingValue; private String newIncomingValue; public String getPropertyName() { return propertyName; } public void setPropertyName(String propertyName) { this.propertyName = propertyName; } public String getOldLocalValue() { return oldLocalValue; } public void setOldLocalValue(String oldLocalValue) { this.oldLocalValue = oldLocalValue; } public String getNewLocalValue() { return newLocalValue; } public void setNewLocalValue(String newLocalValue) { this.newLocalValue = newLocalValue; } public String getOldIncomingValue() { return oldIncomingValue; } public void setOldIncomingValue(String oldIncomingValue) { this.oldIncomingValue = oldIncomingValue; } public String getNewIncomingValue() { return newIncomingValue; } public void setNewIncomingValue(String newIncomingValue) { this.newIncomingValue = newIncomingValue; } public boolean equals(Object obj) { if (obj instanceof PropertyConflict) { PropertyConflict compareTo = (PropertyConflict)obj; return compareTo.getPropertyName().equals(propertyName); } return super.equals(obj); } public static PropertyConflict[] getPropertyConflicts(ISVNLocalResource svnResource) throws Exception { PropertyConflict[] propertyConflicts = null; String conflictFileContents = getConflictSummary(svnResource); if (conflictFileContents != null) { List propertyConflictList = new ArrayList(); ISVNProperty[] properties = svnResource.getSvnProperties(); for (int i = 0; i < properties.length; i++) { if (conflictFileContents.indexOf("property '" + properties[i].getName() + "'") != -1) { PropertyConflict conflict = new PropertyConflict(); conflict.setPropertyName(properties[i].getName()); propertyConflictList.add(conflict); } } propertyConflicts = new PropertyConflict[propertyConflictList.size()]; propertyConflictList.toArray(propertyConflicts); } return propertyConflicts; } public static String getConflictSummary(ISVNLocalResource svnResource) throws Exception { String conflictSummary = null; IResource resource = svnResource.getResource(); IResource conflictFile = null; if (resource instanceof IContainer) { conflictFile = ((IContainer)resource).getFile(new Path("dir_conflicts.prej")); } else { IContainer parent = resource.getParent(); if (parent != null) { conflictFile = parent.getFile(new Path(resource.getName() + ".prej")); } } if (conflictFile != null && conflictFile.exists()) { conflictSummary = getConflictFileContents(new File(conflictFile.getLocation().toString())); } return conflictSummary; } private static String getConflictFileContents(File conflictFile) throws IOException { StringBuffer fileData = new StringBuffer(); BufferedReader reader = new BufferedReader(new FileReader(conflictFile)); char[] buf = new char[1024]; int numRead = 0; while((numRead=reader.read(buf)) != -1){ String readData = String.valueOf(buf, 0, numRead); fileData.append(readData); buf = new char[1024]; } reader.close(); return fileData.toString(); } } PropertyValueSelectionWizardPage.java000066400000000000000000000161671203611042400450200ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflicts/******************************************************************************* * Copyright (c) 2009 CollabNet. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * CollabNet - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.conflicts; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.Path; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Messages; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.SVNConflictDescriptor; public class PropertyValueSelectionWizardPage extends WizardPage { private SVNConflictDescriptor conflictDescriptor; private IResource resource; private String myValue; private String incomingValue; private IDialogSettings settings; private Button myValueButton; private Text myValueText; private Button incomingValueButton; private Text incomingValueText; private final static String LAST_CHOICE = "PropertyValueSelectionWizardPage.lastChoice"; //$NON-NLS-1$ public PropertyValueSelectionWizardPage(String pageName) { super(pageName, Messages.PropertyValueSelectionWizardPage_0, SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_SVN)); settings = SVNUIPlugin.getPlugin().getDialogSettings(); } public void createControl(Composite parent) { Composite outerContainer = new Composite(parent,SWT.NONE); GridLayout outerLayout = new GridLayout(); outerLayout.numColumns = 1; outerContainer.setLayout(outerLayout); outerContainer.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); Composite composite = new Composite(outerContainer, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 2; composite.setLayout(layout); GridData data = new GridData(GridData.FILL_BOTH); composite.setLayoutData(data); IResource resource = SVNWorkspaceRoot.getResourceFor(this.resource, new Path(conflictDescriptor.getPath())); Label resourceLabel = new Label(composite, SWT.NONE); data = new GridData(GridData.HORIZONTAL_ALIGN_END); resourceLabel.setLayoutData(data); resourceLabel.setText(Messages.PropertyValueSelectionWizardPage_1); Label resourceNameLabel = new Label(composite, SWT.WRAP); resourceNameLabel.setText(resource.getFullPath().makeRelative().toOSString()); data = new GridData(); data.widthHint = 500; resourceNameLabel.setLayoutData(data); Label propertyLabel = new Label(composite, SWT.NONE); propertyLabel.setText(Messages.PropertyValueSelectionWizardPage_2); Label propertyNameLabel = new Label(composite, SWT.WRAP); propertyNameLabel.setText(conflictDescriptor.getPropertyName()); data = new GridData(); data.widthHint = 500; propertyNameLabel.setLayoutData(data); new Label(composite, SWT.NONE); new Label(composite, SWT.NONE); myValueButton = new Button(composite, SWT.RADIO); data = new GridData(); data.horizontalSpan = 2; myValueButton.setLayoutData(data); myValueButton.setText(Messages.PropertyValueSelectionWizardPage_3); myValueText = new Text(composite, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.H_SCROLL | SWT.V_SCROLL); data = new GridData(GridData.FILL_BOTH); data.horizontalSpan = 2; data.heightHint = 100; data.widthHint = 400; data.horizontalIndent = 30; data.grabExcessHorizontalSpace = true; myValueText.setLayoutData(data); myValueText.setText(myValue); incomingValueButton = new Button(composite, SWT.RADIO); data = new GridData(); data.horizontalSpan = 2; incomingValueButton.setLayoutData(data); incomingValueButton.setText(Messages.PropertyValueSelectionWizardPage_4); incomingValueText = new Text(composite, SWT.BORDER | SWT.MULTI | SWT.WRAP | SWT.H_SCROLL | SWT.V_SCROLL); data = new GridData(GridData.FILL_BOTH); data.horizontalSpan = 2; data.heightHint = 100; data.widthHint = 400; data.horizontalIndent = 30; data.grabExcessHorizontalSpace = true; incomingValueText.setLayoutData(data); incomingValueText.setText(incomingValue); String lastChoice = settings.get(LAST_CHOICE); if (lastChoice != null && lastChoice.equals("incoming")) { //$NON-NLS-1$ myValueText.setEditable(false); incomingValueButton.setSelection(true); incomingValueText.setFocus(); } else { incomingValueText.setEditable(false); myValueButton.setSelection(true); myValueText.setFocus(); } SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (incomingValueButton.getSelection()) { settings.put(LAST_CHOICE, "incoming"); //$NON-NLS-1$ incomingValueText.setEditable(true); myValueText.setEditable(false); incomingValueText.setFocus(); } else { settings.put(LAST_CHOICE, "mine"); //$NON-NLS-1$ myValueText.setEditable(true); incomingValueText.setEditable(false); myValueText.setFocus(); } } }; myValueButton.addSelectionListener(selectionListener); incomingValueButton.addSelectionListener(selectionListener); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; myValueText.addFocusListener(focusListener); incomingValueText.addFocusListener(focusListener); setMessage(Messages.PropertyValueSelectionWizardPage_5); setControl(outerContainer); } public String getValue() { if (myValueButton.getSelection()) return myValueText.getText().trim(); else return incomingValueText.getText().trim(); } public void setConflictDescriptor(SVNConflictDescriptor conflictDescriptor) { this.conflictDescriptor = conflictDescriptor; } public void setMyValue(String myValue) { this.myValue = myValue; } public void setIncomingValue(String incomingValue) { this.incomingValue = incomingValue; } public void setResource(IResource resource) { this.resource = resource; } } ResolveTreeConflictAction.java000066400000000000000000000025441203611042400434240ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflictspackage org.tigris.subversion.subclipse.ui.conflicts; import org.eclipse.jface.action.Action; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.resources.SVNTreeConflict; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.wizards.SizePersistedWizardDialog; public class ResolveTreeConflictAction extends Action { private ISelectionProvider selectionProvider; private IWorkbenchPart targetPart; public ResolveTreeConflictAction(ISelectionProvider selectionProvider, IWorkbenchPart targetPart) { super(); this.selectionProvider = selectionProvider; this.targetPart = targetPart; setText(Policy.bind("ResolveTreeConflictAction.text")); //$NON-NLS-1$ } public void run() { IStructuredSelection selection = (IStructuredSelection)selectionProvider.getSelection(); SVNTreeConflict treeConflict = (SVNTreeConflict)selection.getFirstElement(); ResolveTreeConflictWizard wizard = new ResolveTreeConflictWizard(treeConflict, targetPart); WizardDialog dialog = new SizePersistedWizardDialog(Display.getDefault().getActiveShell(), wizard, "ResolveTreeConflict"); //$NON-NLS-1$ dialog.open(); } } ResolveTreeConflictWizard.java000066400000000000000000000414061203611042400434470ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflictspackage org.tigris.subversion.subclipse.ui.conflicts; import java.io.File; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.compare.CompareUI; import org.eclipse.compare.internal.CompareAction; import org.eclipse.compare.internal.CompareEditor; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.Wizard; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IPartListener2; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPartReference; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.commands.GetStatusCommand; import org.tigris.subversion.subclipse.core.commands.RevertResourcesCommand; import org.tigris.subversion.subclipse.core.resources.SVNTreeConflict; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Messages; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.compare.SVNLocalCompareInput; import org.tigris.subversion.subclipse.ui.operations.ResolveOperation; import org.tigris.subversion.subclipse.ui.operations.ShowDifferencesAsUnifiedDiffOperationWC; import org.tigris.subversion.subclipse.ui.wizards.SizePersistedWizardDialog; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.ISVNLogMessage; import org.tigris.subversion.svnclientadapter.ISVNLogMessageChangePath; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNStatusKind; import org.tigris.subversion.svnclientadapter.SVNUrl; public class ResolveTreeConflictWizard extends Wizard { private SVNTreeConflict treeConflict; private IWorkbenchPart targetPart; private ISVNLocalResource svnResource; private ResolveTreeConflictWizardMainPage mainPage; // private ISVNClientAdapter svnClient; private ISVNStatus[] statuses; private boolean copiedToRetrieved; private boolean remoteCopiedToRetrieved; private ISVNStatus copiedTo; private ISVNStatus remoteCopiedTo; private ISVNLogMessage[] logMessages; private boolean added; private Exception mergeException; private Exception revertException; private boolean compare; private File mergePath; private ISVNClientAdapter svnClient; public ResolveTreeConflictWizard(SVNTreeConflict treeConflict, IWorkbenchPart targetPart) { super(); this.treeConflict = treeConflict; this.targetPart = targetPart; svnResource = SVNWorkspaceRoot.getSVNResourceFor(treeConflict.getResource()); try { added = svnResource.isAdded(); } catch (SVNException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } public void addPages() { super.addPages(); setWindowTitle(Messages.ResolveTreeConflictWizard_title + treeConflict.getResource().getName()); mainPage = new ResolveTreeConflictWizardMainPage(); addPage(mainPage); } public boolean needsProgressMonitor() { return true; } public boolean performFinish() { compare = mainPage.getCompare(); if (mainPage.getMergeFromRepository()) { try { final SVNUrl url = new SVNUrl(mainPage.getMergeFromUrl()); SVNRevision revision1; if (treeConflict.getConflictDescriptor().getSrcLeftVersion().getPegRevision() == treeConflict.getConflictDescriptor().getSrcRightVersion().getPegRevision()) revision1 = new SVNRevision.Number(treeConflict.getConflictDescriptor().getSrcLeftVersion().getPegRevision() - 1); else revision1 = new SVNRevision.Number(treeConflict.getConflictDescriptor().getSrcLeftVersion().getPegRevision()); final SVNRevision revision2 = new SVNRevision.Number(treeConflict.getConflictDescriptor().getSrcRightVersion().getPegRevision()); if (treeConflict.getConflictDescriptor().getSrcLeftVersion().getPegRevision() == treeConflict.getConflictDescriptor().getSrcRightVersion().getPegRevision()) revision1 = new SVNRevision.Number(treeConflict.getConflictDescriptor().getSrcLeftVersion().getPegRevision() - 1); final IResource mergeTarget = mainPage.getMergeTarget(); final SVNRevision rev1 = revision1; svnClient = svnResource.getRepository().getSVNClient(); mergeException = null; BusyIndicator.showWhile(Display.getDefault(), new Runnable() { public void run() { try { mergePath = mergeTarget.getLocation().toFile(); svnClient.merge(url, rev1, url, revision2, mergePath, true, false, false, true); try { // Refresh the resource after merge if (mergeTarget.getParent() != null) mergeTarget.getParent().refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); else mergeTarget.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); } catch (CoreException e1) {} } catch (Exception e) { mergeException = e; } } }); if (mergeException != null) { SVNUIPlugin.log(IStatus.ERROR, mergeException.getMessage(), mergeException); MessageDialog.openError(getShell(), Messages.ResolveTreeConflictWizard_mergeError, mergeException.getMessage()); return false; } } catch (Exception e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); MessageDialog.openError(getShell(), Messages.ResolveTreeConflictWizard_mergeError, e.getMessage()); return false; } finally { svnResource.getRepository().returnSVNClient(svnClient); } } if (mainPage.getCompare()) { if (mainPage.getCompareResource2() == null) { ISVNLocalResource svnCompareResource = mainPage.getSvnCompareResource(); if (svnCompareResource == null) svnCompareResource = svnResource; ISVNRemoteResource remoteResource = mainPage.getRemoteResource(); try { File file = File.createTempFile("revision", ".diff"); file.deleteOnExit(); File path = new File(svnCompareResource.getResource().getLocation().toString()); SVNUrl toUrl = remoteResource.getUrl(); SVNRevision toRevision = remoteResource.getRevision(); ShowDifferencesAsUnifiedDiffOperationWC operation = new ShowDifferencesAsUnifiedDiffOperationWC(targetPart, path, toUrl, toRevision, file); SVNLocalCompareInput compareInput = new SVNLocalCompareInput(svnCompareResource, remoteResource); compareInput.setDiffOperation(operation); CompareUI.openCompareEditorOnPage( compareInput, targetPart.getSite().getPage()); CompareCloseListener closeListener = new CompareCloseListener(Messages.ResolveTreeConflictWizard_compare + svnCompareResource.getName() + " "); //$NON-NLS-1$ targetPart.getSite().getPage().addPartListener(closeListener); } catch (Exception e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); MessageDialog.openError(getShell(), Messages.ResolveTreeConflictWizard_compareError, e.getMessage()); return false; } } else { ISelection selection = new IStructuredSelection() { public Object getFirstElement() { return mainPage.getCompareResource1(); } public Iterator iterator() { return toList().iterator(); } public int size() { return 2; } public Object[] toArray() { IResource[] compareResources = { mainPage.getCompareResource1(), mainPage.getCompareResource2() }; return compareResources; } public List toList() { List compareList = new ArrayList(); compareList.add(mainPage.getCompareResource1()); compareList.add(mainPage.getCompareResource2()); return compareList; } public boolean isEmpty() { return false; } }; CompareAction compareAction = new CompareAction(); compareAction.setActivePart(null, targetPart); IAction action = new Action() { }; compareAction.selectionChanged(action, selection); compareAction.run(selection); CompareCloseListener closeListener = new CompareCloseListener(Messages.ResolveTreeConflictWizard_compare2 + mainPage.getCompareResource1().getName() + "' - '" + mainPage.getCompareResource2().getName() + "')"); //$NON-NLS-1$ //$NON-NLS-2$ targetPart.getSite().getPage().addPartListener(closeListener); } } if (mainPage.getRevertResource() != null) { revertException = null; BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { try { IResource[] revertResources = { mainPage.getRevertResource() }; RevertResourcesCommand revertCommand = new RevertResourcesCommand(svnResource.getWorkspaceRoot(), revertResources); revertCommand.run(new NullProgressMonitor()); } catch (Exception e) { revertException = e; } } }); if (revertException != null) { SVNUIPlugin.log(IStatus.ERROR, revertException.getMessage(), revertException); MessageDialog.openError(getShell(), Messages.ResolveTreeConflictWizard_revertError, revertException.getMessage()); return false; } } if (mainPage.getDeleteResource() != null) { try { mainPage.getDeleteResource().delete(true, new NullProgressMonitor()); } catch (CoreException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); MessageDialog.openError(getShell(), Messages.ResolveTreeConflictWizard_deleteError, e.getMessage()); return false; } } if (mainPage.getMarkResolved()) { try { IResource[] resolvedResources = { treeConflict.getResource() }; ResolveOperation resolveOperation = new ResolveOperation(targetPart, resolvedResources, ISVNConflictResolver.Choice.chooseMerged) { protected boolean canRunAsJob() { return false; } }; resolveOperation.run(); // svnClient = getSvnClient(); // svnClient.resolve(treeConflict.getStatus().getFile(), ISVNConflictResolver.Choice.chooseMerged); IResource[] refreshResources = { svnResource.getResource() }; TreeConflictsView.refresh(refreshResources); } catch (Exception e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); MessageDialog.openError(getShell(), Messages.ResolveTreeConflictWizard_markResolvedError, e.getMessage()); return false; } } return true; } public SVNTreeConflict getTreeConflict() { return treeConflict; } public ISVNLocalResource getSvnResource() { return svnResource; } public boolean isAdded() { return added; } public ISVNStatus getLocalCopiedTo(boolean getAll) throws SVNException, SVNClientException { String endsWithCheck = treeConflict.getConflictDescriptor().getSrcRightVersion().getPathInRepos(); IProject project = svnResource.getResource().getProject(); if (project != null) { int index = endsWithCheck.indexOf("/" + project.getName() + "/"); //$NON-NLS-1$ //$NON-NLS-2$ if (index != -1) endsWithCheck = endsWithCheck.substring(index); } if (copiedTo == null && !copiedToRetrieved) { statuses = getStatuses(getAll); ISVNClientAdapter svnClient = svnResource.getRepository().getSVNClient(); for (int i = 0; i < statuses.length; i++) { if (statuses[i].isCopied() && statuses[i].getTextStatus().equals(SVNStatusKind.ADDED)) { ISVNInfo info = svnClient.getInfoFromWorkingCopy(statuses[i].getFile()); if (info.getCopyUrl() != null) { if ((svnResource.getUrl() != null && info.getCopyUrl().toString().equals(svnResource.getUrl().toString())) || (info.getCopyUrl().toString().endsWith(endsWithCheck))) { copiedTo = statuses[i]; break; } } } } svnResource.getRepository().returnSVNClient(svnClient); } copiedToRetrieved = true; return copiedTo; } public ISVNStatus getRemoteCopiedTo(boolean getAll) throws Exception { if (remoteCopiedTo == null && !remoteCopiedToRetrieved) { remoteCopiedToRetrieved = true; logMessages = getLogMessages(); if (logMessages != null) { for (int i = 0; i < logMessages.length; i++) { ISVNLogMessageChangePath[] changePaths = logMessages[i].getChangedPaths(); for (int j = 0; j < changePaths.length; j++) { if (changePaths[j].getAction() == 'A' && changePaths[j].getCopySrcPath() != null) { if ((svnResource.getUrl() != null && svnResource.getUrl().toString().endsWith(changePaths[j].getCopySrcPath())) || changePaths[j].getCopySrcPath().endsWith(svnResource.getIResource().getFullPath().toString())) { statuses = getStatuses(getAll); for (int k = 0; k < statuses.length; k++) { if (statuses[k].getUrl() != null && statuses[k].getUrl().toString().endsWith(changePaths[j].getPath())) { remoteCopiedTo = statuses[k]; return remoteCopiedTo; } } } } } } } } return remoteCopiedTo; } public ISVNStatus[] getAdds() throws SVNException { List adds = new ArrayList(); statuses = getStatuses(false); for (int i = 0; i < statuses.length; i++) { if (statuses[i].getTextStatus().equals(SVNStatusKind.ADDED)) adds.add(statuses[i]); } ISVNStatus[] addArray = new ISVNStatus[adds.size()]; adds.toArray(addArray); return addArray; } public boolean isCompare() { return compare; } private ISVNStatus[] getStatuses(boolean getAll) throws SVNException { if (statuses == null) { IProject project = treeConflict.getResource().getProject(); if (project == null) return new ISVNStatus[0]; ISVNLocalResource svnProject = SVNWorkspaceRoot.getSVNResourceFor(project); GetStatusCommand command = new GetStatusCommand(svnProject, true, getAll); command.run(new NullProgressMonitor()); statuses = command.getStatuses(); } return statuses; } /** * @return Returns the mergePath. */ public File getMergePath() { return mergePath; } private ISVNLogMessage[] getLogMessages() throws Exception { if (logMessages == null) { ISVNClientAdapter svnClient = null; try { svnClient = svnResource.getRepository().getSVNClient(); IProject project = treeConflict.getResource().getProject(); ISVNLocalResource svnProject = SVNWorkspaceRoot.getSVNResourceFor(project); SVNRevision revision1 = new SVNRevision.Number(treeConflict.getConflictDescriptor().getSrcLeftVersion().getPegRevision()); SVNRevision revision2 = new SVNRevision.Number(treeConflict.getConflictDescriptor().getSrcRightVersion().getPegRevision()); logMessages = svnClient.getLogMessages(svnProject.getUrl(), revision1, revision2, true); } catch (Exception e) { throw e; } finally { svnResource.getRepository().returnSVNClient(svnClient); } } return logMessages; } class CompareCloseListener implements IPartListener2 { private String compareName; public CompareCloseListener(String compareName) { this.compareName = compareName; } public void partClosed(IWorkbenchPartReference partRef) { IWorkbenchPart part = partRef.getPart(false); if (part instanceof CompareEditor) { CompareEditor editor = (CompareEditor)part; IEditorInput input = editor.getEditorInput(); String name = input.getName(); if (name != null && name.startsWith(compareName)) { targetPart.getSite().getPage().removePartListener(this); if (MessageDialog.openQuestion(getShell(), Messages.ResolveTreeConflictWizard_editorClosed, Messages.ResolveTreeConflictWizard_promptToReolve + treeConflict.getResource().getName() + "?")) { //$NON-NLS-1$ ResolveTreeConflictWizard wizard = new ResolveTreeConflictWizard(treeConflict, targetPart); WizardDialog dialog = new SizePersistedWizardDialog(Display.getDefault().getActiveShell(), wizard, "ResolveTreeConflict"); //$NON-NLS-1$ dialog.open(); } } } } public void partActivated(IWorkbenchPartReference partRef) {} public void partBroughtToTop(IWorkbenchPartReference partRef) {} public void partDeactivated(IWorkbenchPartReference partRef) {} public void partHidden(IWorkbenchPartReference partRef) {} public void partInputChanged(IWorkbenchPartReference partRef) {} public void partOpened(IWorkbenchPartReference partRef) {} public void partVisible(IWorkbenchPartReference partRef) {} } } ResolveTreeConflictWizardMainPage.java000066400000000000000000001206771203611042400450610ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflictspackage org.tigris.subversion.subclipse.ui.conflicts; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.dialogs.ContainerSelectionDialog; import org.eclipse.ui.dialogs.ResourceSelectionDialog; import org.eclipse.ui.dialogs.SelectionDialog; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.commands.GetRemoteResourceCommand; import org.tigris.subversion.subclipse.core.resources.SVNTreeConflict; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.core.util.File2Resource; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Messages; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.ISVNStatus; import org.tigris.subversion.svnclientadapter.SVNConflictDescriptor; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class ResolveTreeConflictWizardMainPage extends WizardPage { private Button mergeFromRepositoryButton; private Button compareButton; private Button revertButton; private Button deleteButton1; private Button deleteButton2; private Button markResolvedButton; private Button option1Button; private Button option2Button; private Button option3Button; private Group option1Group; private Group option2Group; private Text mergeTargetText; private Combo mergeTargetCombo; private Label compareLabel; private Combo revertCombo; private boolean markResolvedEnabled = true; private ISVNStatus copiedTo; private ISVNStatus remoteCopiedTo; private ISVNStatus[] adds; private IResource mergeTarget; private IResource theirs; private IResource mine; private IResource revertResource; private IResource deleteResource1; private IResource deleteResource2; private ISVNLocalResource svnCompareResource; private IResource compareResource1; private IResource compareResource2; private ISVNRemoteResource remoteResource; private String mergeFromUrl; private SVNTreeConflict treeConflict; public ResolveTreeConflictWizardMainPage() { super("main", Messages.ResolveTreeConflictWizardMainPage_specifySteps, SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_RESOLVE_TREE_CONFLICT)); //$NON-NLS-1$ } public void createControl(Composite parent) { ResolveTreeConflictWizard wizard = (ResolveTreeConflictWizard)getWizard(); treeConflict = wizard.getTreeConflict(); Composite outerContainer = new Composite(parent,SWT.NONE); outerContainer.setLayout(new GridLayout()); outerContainer.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); Group detailsGroup = new Group(outerContainer, SWT.NONE); detailsGroup.setText(Messages.ResolveTreeConflictWizardMainPage_conflictDescription); GridLayout detailsLayout = new GridLayout(); detailsLayout.numColumns = 2; detailsGroup.setLayout(detailsLayout); detailsGroup.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); Label label = new Label(detailsGroup, SWT.NONE); label.setText(treeConflict.getDescription()); GridData gd = new GridData(); gd.horizontalSpan = 2; label.setLayoutData(gd); label = new Label(detailsGroup, SWT.NONE); gd = new GridData(); gd.horizontalSpan = 2; label.setLayoutData(gd); label = new Label(detailsGroup, SWT.NONE); label.setText(Messages.ResolveTreeConflictWizardMainPage_sourceLeft); label = new Label(detailsGroup, SWT.WRAP); if (treeConflict.getConflictDescriptor().getSrcLeftVersion() != null) { label.setText(treeConflict.getConflictDescriptor().getSrcLeftVersion().toString()); } gd = new GridData(); gd.widthHint = 500; label.setLayoutData(gd); label = new Label(detailsGroup, SWT.NONE); gd = new GridData(); gd.horizontalSpan = 2; label.setLayoutData(gd); label = new Label(detailsGroup, SWT.NONE); label.setText(Messages.ResolveTreeConflictWizardMainPage_sourceRight); label = new Label(detailsGroup, SWT.WRAP); if (treeConflict.getConflictDescriptor().getSrcRightVersion() != null) { label.setText(treeConflict.getConflictDescriptor().getSrcRightVersion().toString()); } gd = new GridData(); gd.widthHint = 500; label.setLayoutData(gd); Group resolutionGroup = new Group(outerContainer, SWT.NONE); resolutionGroup.setText(Messages.ResolveTreeConflictWizardMainPage_resolutionSteps); GridLayout resolutionLayout = new GridLayout(); resolutionLayout.numColumns = 1; resolutionGroup.setLayout(resolutionLayout); resolutionGroup.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); SVNConflictDescriptor conflictDescriptor = treeConflict.getConflictDescriptor(); int reason = conflictDescriptor.getReason(); int action = conflictDescriptor.getAction(); int operation = conflictDescriptor.getOperation(); if ((reason == SVNConflictDescriptor.Reason.deleted || reason == SVNConflictDescriptor.Reason.missing) && action == SVNConflictDescriptor.Action.edit) { if (operation == SVNConflictDescriptor.Operation._merge) remoteCopiedTo = getRemoteCopiedTo(true); else copiedTo = getCopiedTo(false); getRemoteResource(wizard, treeConflict); compareButton = new Button(resolutionGroup, SWT.CHECK); compareButton.setText(Messages.ResolveTreeConflictWizardMainPage_compare + conflictDescriptor.getSrcRightVersion().getPathInRepos() + Messages.ResolveTreeConflictWizardMainPage_compareTo); compareLabel = new Label(resolutionGroup, SWT.NONE); compareLabel.setText(Messages.ResolveTreeConflictWizardMainPage_compareEditorInformation); compareLabel.setVisible(false); mergeFromRepositoryButton = new Button(resolutionGroup, SWT.CHECK); mergeFromRepositoryButton.setText(Messages.ResolveTreeConflictWizardMainPage_merge + conflictDescriptor.getSrcRightVersion().getPathInRepos() + Messages.ResolveTreeConflictWizardMainPage_intoTarget); Group mergeTargetGroup = new Group(resolutionGroup, SWT.NONE); mergeTargetGroup.setText(Messages.ResolveTreeConflictWizardMainPage_compareMergeTarget); GridLayout mergeTargetLayout = new GridLayout(); mergeTargetLayout.numColumns = 2; mergeTargetGroup.setLayout(mergeTargetLayout); mergeTargetGroup.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); mergeTargetText = new Text(mergeTargetGroup, SWT.BORDER | SWT.READ_ONLY); gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); mergeTargetText.setLayoutData(gd); if (copiedTo != null) { mergeTarget = File2Resource.getResource(copiedTo.getFile()); svnCompareResource = SVNWorkspaceRoot.getSVNResourceFor(mergeTarget); mergeTargetText.setText(mergeTarget.getFullPath().toString()); } else if (remoteCopiedTo != null) { mergeTarget = File2Resource.getResource(remoteCopiedTo.getFile()); svnCompareResource = SVNWorkspaceRoot.getSVNResourceFor(mergeTarget); mergeTargetText.setText(mergeTarget.getFullPath().toString()); } else { setPageComplete(false); } Button selectMergeTargetButton = new Button(mergeTargetGroup, SWT.PUSH); selectMergeTargetButton.setText(Messages.ResolveTreeConflictWizardMainPage_browse); selectMergeTargetButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent evt) { String title; if (mergeFromRepositoryButton == null && compareButton != null) title = Messages.ResolveTreeConflictWizardMainPage_selectCompareTarget; else if (compareButton == null && mergeFromRepositoryButton != null) title = Messages.ResolveTreeConflictWizardMainPage_selectMergeTarget; else title = Messages.ResolveTreeConflictWizardMainPage_selectCompareMergeTarget; SelectionDialog dialog; boolean container = isContainer(); if (container) dialog = new ContainerSelectionDialog(getShell(), treeConflict.getResource().getProject(), false, title); else dialog = new ResourceSelectionDialog(getShell(), treeConflict.getResource().getProject(), title); if (dialog.open() == SelectionDialog.OK) { Object[] selectedResources = dialog.getResult(); IResource selectedResource = null; if (selectedResources != null && selectedResources.length > 0) { if (selectedResources[0] instanceof IResource) selectedResource = (IResource)selectedResources[0]; if (selectedResources[0] instanceof Path) { Path path = (Path)selectedResources[0]; selectedResource = ResourcesPlugin.getWorkspace().getRoot().getFolder(path); } } if (selectedResource != null) { mergeTarget = selectedResource; svnCompareResource = SVNWorkspaceRoot.getSVNResourceFor(mergeTarget); mergeTargetText.setText(mergeTarget.getFullPath().toString()); setPageComplete(true); } } } }); mergeFromRepositoryButton.setSelection(true); SelectionListener choiceListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent evt) { if (compareButton.getSelection() || (mergeFromRepositoryButton != null && mergeFromRepositoryButton.getSelection())) setPageComplete((mergeTargetText != null && mergeTargetText.getText().length() > 0) || (mergeTargetCombo != null && mergeTargetCombo.getText().length() > 0)); else setPageComplete(true); if (compareButton.getSelection()) { compareLabel.setVisible(true); mergeFromRepositoryButton.setEnabled(false); markResolvedButton.setEnabled(false); } else { compareLabel.setVisible(false); mergeFromRepositoryButton.setEnabled(true); markResolvedButton.setEnabled(true); } } }; compareButton.addSelectionListener(choiceListener); if (mergeFromRepositoryButton != null) mergeFromRepositoryButton.addSelectionListener(choiceListener); } if (reason == SVNConflictDescriptor.Reason.edited && action == SVNConflictDescriptor.Action.delete) { compareButton = new Button(resolutionGroup, SWT.CHECK); String name; boolean container = isContainer(); if (container) name = treeConflict.getResource().getFullPath().toString(); else name = treeConflict.getResource().getName(); compareButton.setText(Messages.ResolveTreeConflictWizardMainPage_compare + name + Messages.ResolveTreeConflictWizardMainPage_to); compareButton.setSelection(false); if (operation != SVNConflictDescriptor.Operation._switch) { compareLabel = new Label(resolutionGroup, SWT.NONE); compareLabel.setText(Messages.ResolveTreeConflictWizardMainPage_compareEditorInformation); compareLabel.setVisible(false); } compareResource2 = treeConflict.getResource(); if (operation == SVNConflictDescriptor.Operation._merge) { try { adds = wizard.getAdds(); } catch (SVNException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } mergeFromRepositoryButton = new Button(resolutionGroup, SWT.CHECK); if (container) name = treeConflict.getResource().getFullPath().toString(); else name = treeConflict.getResource().getName(); mergeFromRepositoryButton.setText(Messages.ResolveTreeConflictWizardMainPage_merge + name + Messages.ResolveTreeConflictWizardMainPage_into); mergeFromRepositoryButton.setSelection(true); mergeFromUrl = wizard.getSvnResource().getUrl().toString(); } else { remoteCopiedTo = getRemoteCopiedTo(false); } Composite mergeTargetGroup = new Composite(resolutionGroup, SWT.NONE); GridLayout mergeTargetLayout = new GridLayout(); mergeTargetLayout.numColumns = 2; mergeTargetGroup.setLayout(mergeTargetLayout); mergeTargetGroup.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); if (adds == null || adds.length == 0) { mergeTargetText = new Text(mergeTargetGroup, SWT.BORDER | SWT.READ_ONLY); gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); mergeTargetText.setLayoutData(gd); } else { mergeTargetCombo = new Combo(mergeTargetGroup, SWT.BORDER | SWT.READ_ONLY); gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); mergeTargetCombo.setLayoutData(gd); mergeTargetCombo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent evt) { ISVNStatus selectedAdd = adds[mergeTargetCombo.getSelectionIndex()]; mergeTarget = File2Resource.getResource(selectedAdd.getFile()); compareResource1 = mergeTarget; } }); } if (adds != null && adds.length > 0) { for (int i = 0; i < adds.length; i++) { IResource mergeTargetResource = File2Resource.getResource(adds[i].getFile()); mergeTargetCombo.add(mergeTargetResource.getFullPath().toString()); } mergeTargetCombo.select(0); mergeTarget = File2Resource.getResource(adds[0].getFile()); compareResource1 = mergeTarget; } else if (remoteCopiedTo != null) { mergeTarget = File2Resource.getResource(remoteCopiedTo.getFile()); mergeTargetText.setText(mergeTarget.getFullPath().toString()); compareResource1 = mergeTarget; } // else setPageComplete(false); Button selectMergeTargetButton = new Button(mergeTargetGroup, SWT.PUSH); selectMergeTargetButton.setText(Messages.ResolveTreeConflictWizardMainPage_browse); selectMergeTargetButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent evt) { String title; if (mergeFromRepositoryButton == null && compareButton != null) title = Messages.ResolveTreeConflictWizardMainPage_selectCompareTarget; else if (compareButton == null && mergeFromRepositoryButton != null) title = Messages.ResolveTreeConflictWizardMainPage_selectMergeTarget; else title = Messages.ResolveTreeConflictWizardMainPage_selectCompareMergeTarget; SelectionDialog dialog; boolean container = isContainer(); if (container) dialog = new ContainerSelectionDialog(getShell(), treeConflict.getResource().getProject(), false, title); else dialog = new ResourceSelectionDialog(getShell(), treeConflict.getResource().getProject(), title); if (dialog.open() == SelectionDialog.OK) { Object[] selectedResources = dialog.getResult(); IResource selectedResource = null; if (selectedResources != null && selectedResources.length > 0) { if (selectedResources[0] instanceof IResource) selectedResource = (IResource)selectedResources[0]; if (selectedResources[0] instanceof Path) { Path path = (Path)selectedResources[0]; selectedResource = ResourcesPlugin.getWorkspace().getRoot().getFolder(path); } } if (selectedResource != null) { mergeTarget = selectedResource; compareResource1 = mergeTarget; if (mergeTargetText == null) mergeTargetCombo.setText(mergeTarget.getFullPath().toString()); else mergeTargetText.setText(mergeTarget.getFullPath().toString()); setPageComplete(true); } } } }); if (operation == SVNConflictDescriptor.Operation._switch) { compareLabel = new Label(resolutionGroup, SWT.NONE); compareLabel.setText(Messages.ResolveTreeConflictWizardMainPage_compareEditorInformation); compareLabel.setVisible(false); } if (operation != SVNConflictDescriptor.Operation._merge) { revertResource = treeConflict.getResource(); if (wizard.isAdded()) { revertButton = new Button(resolutionGroup, SWT.CHECK); if (revertResource instanceof IContainer) name = revertResource.getFullPath().toString(); else name = revertResource.getName(); revertButton.setText(Messages.ResolveTreeConflictWizardMainPage_revert + name + Messages.ResolveTreeConflictWizardMainPage_conflictWillBeResolved); revertButton.setSelection(true); } deleteResource1 = treeConflict.getResource(); deleteButton1 = new Button(resolutionGroup, SWT.CHECK); if (deleteResource1 instanceof IContainer) name = deleteResource1.getFullPath().toString(); else name = deleteResource1.getName(); if (wizard.isAdded()) deleteButton1.setText(Messages.ResolveTreeConflictWizardMainPage_remove + name + Messages.ResolveTreeConflictWizardMainPage_fromWorkingCopy); else deleteButton1.setText(Messages.ResolveTreeConflictWizardMainPage_delete + name); deleteButton1.setSelection(true); if (wizard.isAdded()) markResolvedEnabled = false; SelectionListener choiceListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent evt) { if (compareButton.getSelection() || (mergeFromRepositoryButton != null && mergeFromRepositoryButton.getSelection())) setPageComplete((mergeTargetText != null && mergeTargetText.getText().length() > 0) || (mergeTargetCombo != null && mergeTargetCombo.getText().length() > 0)); else setPageComplete(true); if (compareButton.getSelection()) { compareLabel.setVisible(true); if (revertButton != null) revertButton.setEnabled(false); deleteButton1.setEnabled(false); markResolvedButton.setEnabled(false); } else { compareLabel.setVisible(false); if (revertButton != null) { revertButton.setEnabled(true); deleteButton1.setEnabled(true); markResolvedButton.setEnabled(true); if (revertButton.getSelection()) { deleteButton1.setEnabled(true); markResolvedButton.setSelection(false); markResolvedButton.setEnabled(false); } else { deleteButton1.setSelection(false); deleteButton1.setEnabled(false); markResolvedButton.setEnabled(true); } } } } }; compareButton.addSelectionListener(choiceListener); if (mergeFromRepositoryButton != null) mergeFromRepositoryButton.addSelectionListener(choiceListener); if (revertButton != null) revertButton.addSelectionListener(choiceListener); deleteButton1.addSelectionListener(choiceListener); } if (operation == SVNConflictDescriptor.Operation._merge) { if (treeConflict.getResource().exists()) { deleteResource1 = treeConflict.getResource(); deleteButton1 = new Button(resolutionGroup, SWT.CHECK); if (deleteResource1 instanceof IContainer) name = deleteResource1.getFullPath().toString(); else name = deleteResource1.getName(); deleteButton1.setText(Messages.ResolveTreeConflictWizardMainPage_delete + name); deleteButton1.setSelection(true); markResolvedEnabled = false; if (markResolvedButton != null) { markResolvedButton.setSelection(true); markResolvedButton.setEnabled(false); } } SelectionListener choiceListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent evt) { if (!compareButton.getSelection() && !mergeFromRepositoryButton.getSelection()) setPageComplete(true); else setPageComplete((mergeTargetText != null && mergeTargetText.getText().length() > 0) || (mergeTargetCombo != null && mergeTargetCombo.getText().length() > 0)); if (compareButton.getSelection()) { compareLabel.setVisible(true); if (mergeFromRepositoryButton != null) mergeFromRepositoryButton.setEnabled(false); if (deleteButton1 != null) deleteButton1.setEnabled(false); if (markResolvedButton != null) markResolvedButton.setEnabled(false); } else { compareLabel.setVisible(false); if (mergeFromRepositoryButton != null) mergeFromRepositoryButton.setEnabled(true); if (deleteButton1 != null) { deleteButton1.setEnabled(true); if (deleteButton1.getSelection() && markResolvedButton != null) { markResolvedButton.setSelection(true); markResolvedButton.setEnabled(false); } } if (markResolvedButton != null) { if (deleteButton1 == null || !deleteButton1.getSelection()) { markResolvedButton.setEnabled(true); } } } } }; compareButton.addSelectionListener(choiceListener); mergeFromRepositoryButton.addSelectionListener(choiceListener); if (deleteButton1 != null) { deleteButton1.addSelectionListener(choiceListener); } } } if (reason == SVNConflictDescriptor.Reason.deleted && action == SVNConflictDescriptor.Action.delete && operation != SVNConflictDescriptor.Operation._merge) { copiedTo = getCopiedTo(true); remoteCopiedTo = getRemoteCopiedTo(true); theirs = null; mine = null; if (remoteCopiedTo != null) theirs = File2Resource.getResource(remoteCopiedTo.getFile()); if (copiedTo != null) mine = File2Resource.getResource(copiedTo.getFile()); if (mine != null && mine.exists() && theirs != null && theirs.exists()) { compareButton = new Button(resolutionGroup, SWT.CHECK); String name; if (mine instanceof IContainer) name = mine.getFullPath().toString(); else name = mine.getName(); compareButton.setText(Messages.ResolveTreeConflictWizardMainPage_compare + name + Messages.ResolveTreeConflictWizardMainPage_to2 + theirs.getName()); compareButton.setSelection(false); compareResource1 = mine; compareResource2 = theirs; compareLabel = new Label(resolutionGroup, SWT.NONE); compareLabel.setText(Messages.ResolveTreeConflictWizardMainPage_compareEditorInformation); compareLabel.setVisible(false); compareButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent evt) { compareLabel.setVisible(compareButton.getSelection()); if (option1Button != null) option1Button.setEnabled(!compareButton.getSelection()); if (option1Group != null) option1Group.setEnabled(!compareButton.getSelection()); if (option2Button != null) option2Button.setEnabled(!compareButton.getSelection()); if (option2Group != null) option2Group.setEnabled(!compareButton.getSelection()); if (option3Button != null) option3Button.setEnabled(!compareButton.getSelection()); markResolvedButton.setEnabled(!compareButton.getSelection()); } }); } if (mine != null && mine.exists()) { option1Button = new Button(resolutionGroup, SWT.RADIO); option1Button.setText(Messages.ResolveTreeConflictWizardMainPage_choose + mine.getFullPath()); option1Button.setSelection(true); option1Group = new Group(resolutionGroup, SWT.NONE); String name; if (mine instanceof IContainer) name = mine.getFullPath().toString(); else name = mine.getName(); option1Group.setText(name); GridLayout option1Layout = new GridLayout(); option1Layout.numColumns = 1; option1Group.setLayout(option1Layout); option1Group.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); if (theirs != null && theirs.exists()) { deleteResource1 = theirs; deleteButton1 = new Button(option1Group, SWT.CHECK); if (deleteResource1 instanceof IContainer) name = deleteResource1.getFullPath().toString(); else name = deleteResource1.getName(); deleteButton1.setText(Messages.ResolveTreeConflictWizardMainPage_delete + name); deleteButton1.setSelection(true); } else option1Group.setVisible(false); } if (theirs != null && theirs.exists()) { option2Button = new Button(resolutionGroup, SWT.RADIO); option2Button.setText(Messages.ResolveTreeConflictWizardMainPage_choose + theirs.getFullPath()); if (option1Button == null) option2Button.setSelection(true); option2Group = new Group(resolutionGroup, SWT.NONE); String name; if (theirs instanceof IContainer) name = theirs.getFullPath().toString(); else name = theirs.getName(); option2Group.setText(name); GridLayout option2Layout = new GridLayout(); option2Layout.numColumns = 1; option2Group.setLayout(option2Layout); option2Group.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); if (mine != null && mine.exists()) { ISVNLocalResource myResource = SVNWorkspaceRoot.getSVNResourceFor(mine); try { if (myResource.getStatus().isAdded()) { revertResource = mine; revertButton = new Button(option2Group, SWT.CHECK); if (mine instanceof IContainer) name = mine.getFullPath().toString(); else name = mine.getName(); revertButton.setText(Messages.ResolveTreeConflictWizardMainPage_revert + name); revertButton.setSelection(true); } } catch (SVNException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } deleteResource2 = mine; deleteButton2 = new Button(option2Group, SWT.CHECK); if (deleteResource2 instanceof IContainer) name = deleteResource2.getFullPath().toString(); else name = deleteResource2.getName(); deleteButton2.setText(Messages.ResolveTreeConflictWizardMainPage_remove + name + Messages.ResolveTreeConflictWizardMainPage_fromWorkingCopy); deleteButton2.setSelection(true); option2Group.setEnabled(option1Button == null); } else option2Group.setVisible(false); } if (mine != null && mine.exists() && theirs != null && theirs.exists()) { option3Button = new Button(resolutionGroup, SWT.RADIO); option3Button.setText(Messages.ResolveTreeConflictWizardMainPage_chooseBoth); } SelectionListener optionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent evt) { if (option1Button != null && option1Button.getSelection()) { option1Group.setEnabled(true); if (option2Group != null) option2Group.setEnabled(false); } if (option2Button != null && option2Button.getSelection()) { option2Group.setEnabled(true); if (option1Group != null) option1Group.setEnabled(false); } if (option3Button.getSelection()) { option1Group.setEnabled(false); option2Group.setEnabled(false); } if (revertButton != null) { if (revertButton.getSelection()) { deleteButton2.setEnabled(true); } else { deleteButton2.setEnabled(false); deleteButton2.setSelection(false); } } } }; if (option1Button != null) option1Button.addSelectionListener(optionListener); if (option2Button != null) option2Button.addSelectionListener(optionListener); if (option3Button != null) option3Button.addSelectionListener(optionListener); if (revertButton != null) revertButton.addSelectionListener(optionListener); } if (reason == SVNConflictDescriptor.Reason.deleted && action == SVNConflictDescriptor.Action.delete && operation == SVNConflictDescriptor.Operation._merge) { remoteCopiedTo = getRemoteCopiedTo(true); if (remoteCopiedTo != null) mine = File2Resource.getResource(remoteCopiedTo.getFile()); if (mine != null && mine.exists()) { try { adds = wizard.getAdds(); } catch (SVNException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } option1Button = new Button(resolutionGroup, SWT.RADIO); option1Button.setText(Messages.ResolveTreeConflictWizardMainPage_choose + mine.getFullPath()); option1Button.setSelection(true); if (adds != null && adds.length > 0) { option1Group = new Group(resolutionGroup, SWT.NONE); String name; if (mine instanceof IContainer) name = mine.getFullPath().toString(); else name = mine.getName(); option1Group.setText(name); GridLayout option1Layout = new GridLayout(); option1Layout.numColumns = 1; option1Group.setLayout(option1Layout); option1Group.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); if (adds.length == 1) { revertResource = File2Resource.getResource(adds[0].getFile()); revertButton = new Button(option1Group, SWT.CHECK); if (revertResource instanceof IContainer) name = revertResource.getFullPath().toString(); else name = revertResource.getName(); revertButton.setText(Messages.ResolveTreeConflictWizardMainPage_revert + name); revertButton.setSelection(true); deleteResource1 = File2Resource.getResource(adds[0].getFile()); deleteButton1 = new Button(option1Group, SWT.CHECK); if (deleteResource1 instanceof IContainer) name = deleteResource1.getFullPath().toString(); else name = deleteResource1.getName(); deleteButton1.setText(Messages.ResolveTreeConflictWizardMainPage_remove + name + Messages.ResolveTreeConflictWizardMainPage_fromWorkingCopy); deleteButton1.setSelection(true); } else { revertButton = new Button(option1Group, SWT.CHECK); revertButton.setText(Messages.ResolveTreeConflictWizardMainPage_revertSelected); revertCombo = new Combo(option1Group, SWT.BORDER | SWT.READ_ONLY); gd = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); revertCombo.setLayoutData(gd); revertCombo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent evt) { ISVNStatus selectedRevert = adds[revertCombo.getSelectionIndex()]; revertResource = File2Resource.getResource(selectedRevert.getFile()); deleteResource1 = revertResource; } }); for (int i = 0; i < adds.length; i++) { IResource revertResource = File2Resource.getResource(adds[i].getFile()); revertCombo.add(revertResource.getFullPath().toString()); } revertCombo.select(0); revertResource = File2Resource.getResource(adds[0].getFile()); deleteResource1 = revertResource; deleteButton1 = new Button(option1Group, SWT.CHECK); deleteButton1.setText(Messages.ResolveTreeConflictWizardMainPage_removeSelected); deleteButton1.setEnabled(false); setPageComplete(false); } } option2Button = new Button(resolutionGroup, SWT.RADIO); option2Group = new Group(resolutionGroup, SWT.NONE); GridLayout option2Layout = new GridLayout(); option2Layout.numColumns = 1; option2Group.setLayout(option2Layout); option2Group.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); if (adds == null || adds.length != 1) { option2Button.setText(Messages.ResolveTreeConflictWizardMainPage_chooseIncoming); option2Group.setText(Messages.ResolveTreeConflictWizardMainPage_incoming); } else { IResource addResource = File2Resource.getResource(adds[0].getFile()); option2Button.setText(Messages.ResolveTreeConflictWizardMainPage_choose + addResource.getFullPath()); String name; if (addResource instanceof IContainer) name = addResource.getFullPath().toString(); else name = addResource.getName(); option2Group.setText(name); } deleteResource2 = mine; deleteButton2 = new Button(option2Group, SWT.CHECK); String name; if (deleteResource2 instanceof IContainer) name = deleteResource2.getFullPath().toString(); else name = deleteResource2.getName(); deleteButton2.setText(Messages.ResolveTreeConflictWizardMainPage_delete + name); deleteButton2.setSelection(true); option2Group.setEnabled(false); option3Button = new Button(resolutionGroup, SWT.RADIO); option3Button.setText(Messages.ResolveTreeConflictWizardMainPage_chooseBoth); SelectionListener choiceListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent evt) { if (option1Group != null) option1Group.setEnabled(option1Button.getSelection()); if (option2Group != null) option2Group.setEnabled(option2Button.getSelection()); if (revertButton != null && deleteButton1 != null) { if (revertButton.getSelection()) { deleteButton1.setEnabled(true); } else { deleteButton1.setEnabled(false); deleteButton1.setSelection(false); } } if (option1Button.getSelection()) { setPageComplete(revertButton == null || revertButton.getSelection()); } if (option2Button.getSelection()) { setPageComplete(deleteButton2 == null || deleteButton2.getSelection()); } if (option3Button.getSelection()) setPageComplete(true); } }; option1Button.addSelectionListener(choiceListener); option2Button.addSelectionListener(choiceListener); option3Button.addSelectionListener(choiceListener); if (revertButton != null) revertButton.addSelectionListener(choiceListener); if (deleteButton2 != null) deleteButton2.addSelectionListener(choiceListener); if (revertButton != null) revertButton.addSelectionListener(choiceListener); } } if ((reason == SVNConflictDescriptor.Reason.added && action == SVNConflictDescriptor.Action.add && (operation == SVNConflictDescriptor.Operation._update || operation == SVNConflictDescriptor.Operation._merge)) || (reason == SVNConflictDescriptor.Reason.obstructed && action == SVNConflictDescriptor.Action.add && operation == SVNConflictDescriptor.Operation._merge)) { compareButton = new Button(resolutionGroup, SWT.CHECK); String name; boolean container = isContainer(); if (container) name = treeConflict.getResource().getFullPath().toString(); else name = treeConflict.getResource().getName(); compareButton.setText(Messages.ResolveTreeConflictWizardMainPage_compare + name + Messages.ResolveTreeConflictWizardMainPage_to2 + treeConflict.getConflictDescriptor().getSrcRightVersion().getPathInRepos() + Messages.ResolveTreeConflictWizardMainPage_inRepository); compareButton.setSelection(false); compareResource1 = treeConflict.getResource(); getRemoteResource(wizard, treeConflict); compareLabel = new Label(resolutionGroup, SWT.NONE); compareLabel.setText(Messages.ResolveTreeConflictWizardMainPage_compareEditorInformation); compareLabel.setVisible(false); SelectionListener choiceListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent evt) { if (compareButton.getSelection()) { compareLabel.setVisible(true); markResolvedButton.setEnabled(false); } else { compareLabel.setVisible(false); markResolvedButton.setEnabled(true); } } }; compareButton.addSelectionListener(choiceListener); } if (conflictDescriptor.getSrcLeftVersion() == null) { revertButton = new Button(resolutionGroup, SWT.CHECK); revertResource = treeConflict.getResource(); String name; if (revertResource instanceof IContainer) name = revertResource.getFullPath().toString(); else name = revertResource.getName(); revertButton.setText(Messages.ResolveTreeConflictWizardMainPage_revert + name + Messages.ResolveTreeConflictWizardMainPage_conflictWillBeResolved); revertButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (revertButton.getSelection()) { markResolvedButton.setSelection(false); } markResolvedButton.setEnabled(!revertButton.getSelection()); } }); } markResolvedButton = new Button(resolutionGroup, SWT.CHECK); markResolvedButton.setText(Messages.ResolveTreeConflictWizardMainPage_markResolved); markResolvedButton.setSelection(true); if (markResolvedEnabled) { markResolvedButton.setSelection(true); } else { markResolvedButton.setEnabled(false); } setMessage(Messages.ResolveTreeConflictWizardMainPage_message); setControl(outerContainer); } private void getRemoteResource(ResolveTreeConflictWizard wizard, final SVNTreeConflict treeConflict) { ISVNRepositoryLocation repository = wizard.getSvnResource().getRepository(); SVNRevision revision = new SVNRevision.Number(treeConflict.getConflictDescriptor().getSrcRightVersion().getPegRevision()); try { SVNUrl url = new SVNUrl(treeConflict.getConflictDescriptor().getSrcRightVersion().getReposURL() + "/" + treeConflict.getConflictDescriptor().getSrcRightVersion().getPathInRepos()); //$NON-NLS-1$ GetRemoteResourceCommand command = new GetRemoteResourceCommand(repository, url, revision); command.run(new NullProgressMonitor()); remoteResource = command.getRemoteResource(); } catch (Exception e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } public boolean getMergeFromRepository() { if (compareButton != null && compareButton.getSelection()) return false; return mergeFromRepositoryButton != null && mergeFromRepositoryButton.getSelection(); } public boolean getCompare() { return compareButton != null && compareButton.getSelection(); } public boolean getMarkResolved() { return !getCompare() && markResolvedButton.getSelection(); } public IResource getMergeTarget() { return mergeTarget; } public IResource getRevertResource() { if (getCompare()) return null; if (revertButton != null && revertButton.isEnabled() && revertButton.getSelection()) return revertResource; else return null; } public IResource getDeleteResource() { if (getCompare()) return null; if (deleteButton1 != null && deleteButton1.isEnabled() && deleteButton1.getSelection()) return deleteResource1; if (deleteButton2 != null && deleteButton2.isEnabled() && deleteButton2.getSelection()) return deleteResource2; return null; } public IResource getCompareResource1() { return compareResource1; } public IResource getCompareResource2() { return compareResource2; } public ISVNRemoteResource getRemoteResource() { return remoteResource; } public ISVNLocalResource getSvnCompareResource() { return svnCompareResource; } public String getMergeFromUrl() { if (mergeFromUrl == null) return treeConflict.getConflictDescriptor().getSrcRightVersion().getReposURL() + "/" + treeConflict.getConflictDescriptor().getSrcRightVersion().getPathInRepos(); //$NON-NLS-1$ else return mergeFromUrl; } private ISVNStatus getCopiedTo(final boolean getAll) { IRunnableWithProgress runnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { monitor.setTaskName(Messages.ResolveTreeConflictWizardMainPage_lookingForCopiedToUrl); monitor.beginTask(Messages.ResolveTreeConflictWizardMainPage_lookingForCopiedToUrl, IProgressMonitor.UNKNOWN); ResolveTreeConflictWizard wizard = (ResolveTreeConflictWizard)getWizard(); try { copiedTo = wizard.getLocalCopiedTo(getAll); } catch (Exception e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } monitor.done(); } }; try { getContainer().run(false, false, runnable); } catch (Exception e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } return copiedTo; } private ISVNStatus getRemoteCopiedTo(final boolean getAll) { IRunnableWithProgress runnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { monitor.setTaskName(Messages.ResolveTreeConflictWizardMainPage_lookingForCopiedToUrl); monitor.beginTask(Messages.ResolveTreeConflictWizardMainPage_lookingForCopiedToUrl, IProgressMonitor.UNKNOWN); ResolveTreeConflictWizard wizard = (ResolveTreeConflictWizard)getWizard(); try { remoteCopiedTo = wizard.getRemoteCopiedTo(getAll); } catch (Exception e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } monitor.done(); } }; try { getContainer().run(false, false, runnable); } catch (Exception e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } return remoteCopiedTo; } private boolean isContainer() { boolean container; if (treeConflict.getResource().exists()) { container = treeConflict.getResource() instanceof IContainer; } else { if (svnCompareResource == null || !svnCompareResource.exists()) { container = treeConflict.getResource().getName().indexOf(".") == -1; } else { container = svnCompareResource.isFolder(); } } return container; } } SVNConflictResolver.java000066400000000000000000000445761203611042400422320ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflictspackage org.tigris.subversion.subclipse.ui.conflicts; import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.FileReader; import java.io.IOException; import java.io.InputStream; import java.io.PrintStream; import java.util.ArrayList; import java.util.Iterator; import org.eclipse.core.filesystem.EFS; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.content.IContentType; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.IEditorDescriptor; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorRegistry; import org.eclipse.ui.IPartListener2; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchPartReference; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.editors.text.EditorsUI; import org.tigris.subversion.subclipse.ui.Messages; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNConflictDescriptor; import org.tigris.subversion.svnclientadapter.SVNConflictResult; public class SVNConflictResolver implements ISVNConflictResolver { private IResource resource; private int textHandling = ISVNConflictResolver.Choice.postpone; private int binaryHandling = ISVNConflictResolver.Choice.postpone; private int propertyHandling = ISVNConflictResolver.Choice.postpone; private ArrayList conflictResolutions = new ArrayList(); private volatile DialogWizard dialogWizard; private boolean finished; private int resolution; private IWorkbenchPart part; private File workingTempFile; private File mergeTempFile; private File mergedFile; private boolean wait = false; private ConflictResolution applyToAllTextResolution; private ConflictResolution applyToAllBinaryResolution; private ConflictResolution applyToAllPropertyResolution; public SVNConflictResolver() { super(); } public SVNConflictResolver(IResource resource, int textHandling, int binaryHandling, int propertyHandling) { this(); this.resource = resource; this.textHandling = textHandling; this.binaryHandling = binaryHandling; this.propertyHandling = propertyHandling; } public SVNConflictResult resolve(SVNConflictDescriptor descrip) throws SVNClientException { if (descrip.getReason() == SVNConflictDescriptor.Reason.edited || (descrip.getReason() == SVNConflictDescriptor.Reason.obstructed && descrip.getConflictKind() == SVNConflictDescriptor.Kind.property)) { if (descrip.isBinary()) { int handling; if (descrip.getConflictKind() == SVNConflictDescriptor.Kind.property) handling = propertyHandling; else handling = binaryHandling; if (handling == ISVNConflictResolver.Choice.chooseMerged) { ConflictResolution conflictResolution = getConflictResolution(descrip); conflictResolutions.add(conflictResolution); return new SVNConflictResult(conflictResolution.getResolution(), descrip.getMergedPath()); } else { conflictResolutions.add(new ConflictResolution(descrip, handling)); return new SVNConflictResult(handling, descrip.getMergedPath()); } } else { int handling; if (descrip.getConflictKind() == SVNConflictDescriptor.Kind.property) handling = propertyHandling; else handling = textHandling; if (handling == ISVNConflictResolver.Choice.chooseMerged) { ConflictResolution conflictResolution = getConflictResolution(descrip); conflictResolutions.add(conflictResolution); return new SVNConflictResult(conflictResolution.getResolution(), conflictResolution.getMergedPath()); } else { conflictResolutions.add(new ConflictResolution(descrip, handling)); return new SVNConflictResult(handling, descrip.getMergedPath()); } } } else { return new SVNConflictResult(ISVNConflictResolver.Choice.postpone, descrip.getMergedPath()); } } private ConflictResolution getConflictResolution(final SVNConflictDescriptor descrip) { wait = false; dialogWizard = null; ConflictResolution conflictResolution = null; if (descrip.getConflictKind() == SVNConflictDescriptor.Kind.property && applyToAllPropertyResolution != null) conflictResolution = new ConflictResolution(descrip, applyToAllPropertyResolution.getResolution()); else if (descrip.isBinary() && applyToAllBinaryResolution != null) conflictResolution = new ConflictResolution(descrip, applyToAllBinaryResolution.getResolution()); else if (descrip.getConflictKind() != SVNConflictDescriptor.Kind.property && !descrip.isBinary() && applyToAllTextResolution != null) conflictResolution = new ConflictResolution(descrip, applyToAllTextResolution.getResolution()); if (conflictResolution == null) { Display.getDefault().asyncExec(new Runnable() { public void run() { dialogWizard = new DialogWizard(DialogWizard.CONFLICT_HANDLING); dialogWizard.setConflictDescriptor(descrip); dialogWizard.setResources(new IResource[] { resource }); ConflictWizardDialog dialog = new ConflictWizardDialog(Display.getDefault().getActiveShell(), dialogWizard); dialog.open(); } }); while (dialogWizard == null || dialogWizard.getConflictResolution() == null) { try { Thread.sleep(10); } catch (InterruptedException e) { // we're still waiting... } } conflictResolution = dialogWizard.getConflictResolution(); if (conflictResolution.isApplyToAll()) { if (descrip.getConflictKind() == SVNConflictDescriptor.Kind.property) applyToAllPropertyResolution = conflictResolution; else if (descrip.isBinary()) applyToAllBinaryResolution = conflictResolution; else applyToAllTextResolution = conflictResolution; } } try { if (conflictResolution.getResolution() == ConflictResolution.FILE_EDITOR) { finished = false; workingTempFile = null; File pathFile = new File(descrip.getPath()); mergedFile = new File(descrip.getMergedPath()); try { workingTempFile = createTempFile(pathFile); copyFile(mergedFile, workingTempFile); } catch (IOException e) { e.printStackTrace(); } IFileStore fileStore = EFS.getLocalFileSystem().getStore(new Path(workingTempFile.getAbsolutePath())); final IWorkbenchPage page = part.getSite().getPage(); final IEditorInput editorInput = new ExternalFileEditorInput(fileStore); final String editorId= getEditorId(fileStore); Display.getDefault().asyncExec(new Runnable() { public void run() { try { final IEditorPart editorPart = page.openEditor(editorInput, editorId); if (editorPart == null) { resolution = ISVNConflictResolver.Choice.postpone; finished = true; } else { IPartListener2 closeListener = new IPartListener2() { public void partClosed(IWorkbenchPartReference partRef) { if (partRef.getPart(false) == editorPart) { finishEditing(descrip); } } public void partActivated(IWorkbenchPartReference partRef) {} public void partBroughtToTop(IWorkbenchPartReference partRef) {} public void partDeactivated(IWorkbenchPartReference partRef) {} public void partHidden(IWorkbenchPartReference partRef) {} public void partInputChanged(IWorkbenchPartReference partRef) {} public void partOpened(IWorkbenchPartReference partRef) {} public void partVisible(IWorkbenchPartReference partRef) {} }; page.addPartListener(closeListener); } } catch (PartInitException e) { // TODO Auto-generated catch block e.printStackTrace(); } } }); while (!finished) { try { Thread.sleep(1000); } catch (InterruptedException e) {} } conflictResolution = new ConflictResolution(descrip, resolution); if (!conflictResolution.isResolved()) { if (descrip.getConflictKind() == SVNConflictDescriptor.Kind.property) applyToAllPropertyResolution = null; else if (descrip.isBinary()) applyToAllBinaryResolution = null; else applyToAllTextResolution = null; } } if (conflictResolution.getResolution() == ConflictResolution.CONFLICT_EDITOR) { File pathFile = new File(descrip.getPath()); File conflictNewFile = new File(descrip.getTheirPath()); File conflictWorkingFile = new File(descrip.getMyPath()); if (descrip.getConflictKind() == SVNConflictDescriptor.Kind.property && descrip.getMergedPath() == null) { try { final String theirValue = getPropertyValue(conflictNewFile); final String myValue = getPropertyValue(conflictWorkingFile); dialogWizard = null; Display.getDefault().asyncExec(new Runnable() { public void run() { dialogWizard = new DialogWizard(DialogWizard.PROPERTY_VALUE_SELECTION); dialogWizard.setConflictDescriptor(descrip); dialogWizard.setMyValue(myValue); dialogWizard.setIncomingValue(theirValue); dialogWizard.setResources(new IResource[] { resource }); ConflictWizardDialog dialog = new ConflictWizardDialog(Display.getDefault().getActiveShell(), dialogWizard); dialog.open(); } }); while (dialogWizard == null || dialogWizard.getValueToUse() == null) {} String valueToUse = dialogWizard.getValueToUse(); if (!dialogWizard.isConflictResolved()) { conflictResolution = new ConflictResolution(descrip, ISVNConflictResolver.Choice.postpone); return conflictResolution; } else { mergeTempFile = createTempFile(pathFile); setPropertyValue(mergeTempFile, valueToUse); conflictResolution = new ConflictResolution(descrip, ISVNConflictResolver.Choice.chooseMerged); conflictResolution.setMergedPath(mergeTempFile.getAbsolutePath()); return conflictResolution; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } workingTempFile = null; mergeTempFile = null; File mergedFile; if (descrip.getMergedPath() == null) { mergedFile = new File(descrip.getPath()); } else { mergedFile = new File(descrip.getMergedPath()); } try { workingTempFile = createTempFile(pathFile); copyFile(conflictWorkingFile, workingTempFile); mergeTempFile = createTempFile(pathFile); copyFile(mergedFile, mergeTempFile); } catch (IOException e) { e.printStackTrace(); } File conflictOldFile = new File(descrip.getBasePath()); final BuiltInEditConflictsAction editConflictsAction = new BuiltInEditConflictsAction(conflictNewFile, conflictOldFile, workingTempFile, mergedFile, pathFile.getName(), descrip); Display.getDefault().asyncExec(new Runnable() { public void run() { editConflictsAction.run(null); } }); while (editConflictsAction.getBuiltInConflictsCompareInput() == null || !editConflictsAction.getBuiltInConflictsCompareInput().isFinished()) { try { Thread.sleep(1000); } catch (InterruptedException e) {} } if (editConflictsAction.getBuiltInConflictsCompareInput().isResolved()) { conflictResolution = new ConflictResolution(descrip, editConflictsAction.getBuiltInConflictsCompareInput().getResolution()); } else { conflictResolution = new ConflictResolution(descrip, editConflictsAction.getBuiltInConflictsCompareInput().getResolution()); if (descrip.getConflictKind() == SVNConflictDescriptor.Kind.property) applyToAllPropertyResolution = null; else if (descrip.isBinary()) applyToAllBinaryResolution = null; else applyToAllTextResolution = null; try { copyFile(mergeTempFile, mergedFile); } catch (IOException e) { e.printStackTrace(); } } } } catch (final RuntimeException re) { conflictResolution = new ConflictResolution(descrip, ISVNConflictResolver.Choice.postpone); wait = true; Display.getDefault().asyncExec(new Runnable() { public void run() { MessageDialog.openError(Display.getDefault().getActiveShell(), Messages.SVNConflictResolver_0, Messages.SVNConflictResolver_1 + re.getLocalizedMessage() + Messages.SVNConflictResolver_2); re.printStackTrace(); wait = false; } }); } while (wait) {} return conflictResolution; } private File createTempFile(File baseOnFile) throws IOException { try { FileNode fileNode = new FileNode(baseOnFile); File tempFile = File.createTempFile(fileNode.getPrefix(), "." + fileNode.getType()); //$NON-NLS-1$ tempFile.deleteOnExit(); return tempFile; } catch (RuntimeException e) { throw e; } } private String getEditorId(IFileStore file) { IWorkbench workbench = PlatformUI.getWorkbench(); IEditorRegistry editorRegistry= workbench.getEditorRegistry(); IEditorDescriptor descriptor= editorRegistry.getDefaultEditor(file.getName(), getContentType(file)); // check the OS for in-place editor (OLE on Win32) if (descriptor == null && editorRegistry.isSystemInPlaceEditorAvailable(file.getName())) descriptor= editorRegistry.findEditor(IEditorRegistry.SYSTEM_INPLACE_EDITOR_ID); // check the OS for external editor if (descriptor == null && editorRegistry.isSystemExternalEditorAvailable(file.getName())) descriptor= editorRegistry.findEditor(IEditorRegistry.SYSTEM_EXTERNAL_EDITOR_ID); if (descriptor != null) return descriptor.getId(); return EditorsUI.DEFAULT_TEXT_EDITOR_ID; } private IContentType getContentType (IFileStore fileStore) { if (fileStore == null) return null; InputStream stream= null; try { stream= fileStore.openInputStream(EFS.NONE, null); return Platform.getContentTypeManager().findContentTypeFor(stream, fileStore.getName()); } catch (IOException x) { return null; } catch (CoreException x) { return null; } finally { try { if (stream != null) stream.close(); } catch (IOException x) { } } } private void finishEditing(SVNConflictDescriptor descrip) { DialogWizard dialogWizard = new DialogWizard(DialogWizard.FINISHED_EDITING); dialogWizard.setConflictDescriptor(descrip); ConflictWizardDialog dialog = new ConflictWizardDialog(Display.getDefault().getActiveShell(), dialogWizard); dialog.open(); try { copyFile(workingTempFile, mergedFile); } catch (IOException e) { e.printStackTrace(); } resolution = dialogWizard.getResolution(); finished = true; } public ConflictResolution[] getConflictResolutions() { ConflictResolution[] conflictResolutionArray = new ConflictResolution[conflictResolutions.size()]; conflictResolutions.toArray(conflictResolutionArray); return conflictResolutionArray; } public int getTextHandling() { return textHandling; } public int getBinaryHandling() { return binaryHandling; } public int getResolvedConflictCount(int conflictKind) { if (textHandling == ISVNConflictResolver.Choice.postpone && binaryHandling == ISVNConflictResolver.Choice.postpone) return 0; int resolvedConflicts = 0; Iterator iter = conflictResolutions.iterator(); while (iter.hasNext()) { ConflictResolution conflictResolution = iter.next(); if (conflictResolution.getResolution() != ISVNConflictResolver.Choice.postpone && conflictResolution.getConflictDescriptor().getConflictKind() == conflictKind) resolvedConflicts++; } return resolvedConflicts; } public void setPart(IWorkbenchPart part) { this.part = part; } private void copyFile(File fromFile, File toFile) throws IOException { FileInputStream from = null; FileOutputStream to = null; try { from = new FileInputStream(fromFile); to = new FileOutputStream(toFile); byte[] buffer = new byte[4096]; int bytes_read; while ((bytes_read = from.read(buffer)) != -1) to.write(buffer, 0, bytes_read); } finally { if (from != null) try { from.close(); } catch (IOException e) {} if (to != null) try { to.close(); } catch (IOException e) {} } } private String getPropertyValue(File propertyFile) throws IOException { StringBuffer fileData = new StringBuffer(); BufferedReader reader = new BufferedReader(new FileReader(propertyFile)); char[] buf = new char[1024]; int numRead = 0; while((numRead=reader.read(buf)) != -1){ String readData = String.valueOf(buf, 0, numRead); fileData.append(readData); buf = new char[1024]; } reader.close(); return fileData.toString(); } private void setPropertyValue(File propertyFile, String value) throws IOException { FileOutputStream out = new FileOutputStream(propertyFile); PrintStream p = new PrintStream(out); p.print(value); p.close(); } public static String getResolutionDescription(String resolution) { if (resolution == null || resolution.trim().length() == 0 || resolution.equals("0")) return "Unresolved"; //$NON-NLS-1$ //$NON-NLS-2$ if (resolution.equals("Y")) return "Resolution unknown"; //$NON-NLS-1$ //$NON-NLS-2$ int res = Integer.parseInt(resolution); switch (res) { case ISVNConflictResolver.Choice.chooseBase: return "Base version used"; //$NON-NLS-1$ case ISVNConflictResolver.Choice.chooseTheirsFull: return "Incoming version used"; //$NON-NLS-1$ case ISVNConflictResolver.Choice.chooseMineFull: return "Local version used"; //$NON-NLS-1$ case ISVNConflictResolver.Choice.chooseTheirs: return "Incoming version used for conflicted hunks"; //$NON-NLS-1$ case ISVNConflictResolver.Choice.chooseMine: return "Local version used for conflicted hunks"; //$NON-NLS-1$ case ISVNConflictResolver.Choice.chooseMerged: return "Merged version used"; //$NON-NLS-1$ default: return "Unresolved"; //$NON-NLS-1$ } } } TreeConflictsView.java000066400000000000000000000363051203611042400417460ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/conflictspackage org.tigris.subversion.subclipse.ui.conflicts; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.Iterator; import java.util.List; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.viewers.ColumnLayoutData; import org.eclipse.jface.viewers.ColumnPixelData; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.IOpenListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.OpenEvent; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.window.SameShellProvider; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.ui.actions.OpenWithMenu; import org.eclipse.ui.dialogs.PropertyDialogAction; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.ui.part.ViewPart; import org.tigris.subversion.subclipse.core.resources.SVNTreeConflict; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNStatus; public class TreeConflictsView extends ViewPart { public static final String VIEW_ID = "org.tigris.subversion.subclipse.ui.conflicts.TreeConflictsView"; //$NON-NLS-1$ private IResource resource; private List treeConflicts; private ArrayList folderList; private TreeViewer treeViewer; private Action refreshAction; private OpenFileInSystemEditorAction openAction; private IDialogSettings settings = SVNUIPlugin.getPlugin().getDialogSettings(); private boolean disposed; private static TreeConflictsView view; private String[] columnHeaders = {Policy.bind("TreeConflictsView.resource"), Policy.bind("TreeConflictsView.description")}; //$NON-NLS-1$ //$NON-NLS-2$ private ColumnLayoutData columnLayouts[] = { new ColumnWeightData(75, 75, true), new ColumnWeightData(450, 450, true)}; public TreeConflictsView() { super(); view = this; } public void createPartControl(Composite parent) { GridLayout layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; layout.numColumns = 1; parent.setLayout(layout); treeViewer = new TreeViewer(parent, SWT.FULL_SELECTION); treeViewer.setLabelProvider(new ConflictsLabelProvider()); treeViewer.setContentProvider(new ConflictsContentProvider()); treeViewer.setUseHashlookup(true); GridData layoutData = new GridData(); layoutData.grabExcessHorizontalSpace = true; layoutData.grabExcessVerticalSpace = true; layoutData.horizontalAlignment = GridData.FILL; layoutData.verticalAlignment = GridData.FILL; treeViewer.getControl().setLayoutData(layoutData); TableLayout tableLayout = new TableLayout(); treeViewer.getTree().setLayout(tableLayout); DisposeListener disposeListener = new DisposeListener() { public void widgetDisposed(DisposeEvent e) { TreeColumn col = (TreeColumn)e.getSource(); if (col.getWidth() > 0) settings.put("TreeConflictsView.col." + col.getText(), col.getWidth()); //$NON-NLS-1$ } }; for (int i = 0; i < columnHeaders.length; i++) { TreeColumn tc = new TreeColumn(treeViewer.getTree(), SWT.NONE,i); tc.setResizable(columnLayouts[i].resizable); tc.setText(columnHeaders[i]); setColumnWidth(tableLayout, disposeListener, tc, i); } treeViewer.getTree().setHeaderVisible(true); treeViewer.getTree().setLinesVisible(false); treeViewer.setInput(this); treeViewer.addOpenListener(new IOpenListener() { public void open(OpenEvent evt) { openAction.run(); } }); createMenus(); createToolbar(); String path = settings.get("TreeConflictsView.resource"); //$NON-NLS-1$ if (path != null) { boolean container = settings.getBoolean("TreeConflictsView.container"); //$NON-NLS-1$ if (container) resource = ResourcesPlugin.getWorkspace().getRoot().getContainerForLocation(new Path(path)); else resource = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(new Path(path)); } if (resource == null) setContentDescription(Policy.bind("TreeConflictsView.noResource")); //$NON-NLS-1$ else setContentDescription(resource.getFullPath().toString()); } private void setColumnWidth(TableLayout layout, DisposeListener disposeListener, TreeColumn col, int colIndex) { String columnWidth = null; columnWidth = settings.get("TreeConflictsView.col." + col.getText()); //$NON-NLS-1$ //$NON-NLS-1$ if (columnWidth == null || columnWidth.equals("0")) layout.addColumnData(columnLayouts[colIndex]); //$NON-NLS-1$ else layout.addColumnData(new ColumnPixelData(Integer.parseInt(columnWidth), true)); col.addDisposeListener(disposeListener); } public void setFocus() { treeViewer.getControl().setFocus(); } public void showTreeConflictsFor(IResource resource) { this.resource = resource; refreshAction.setEnabled(true); setContentDescription(resource.getFullPath().toString()); if (resource.getFullPath() != null) { settings.put("TreeConflictsView.resource", resource.getLocation().toString()); //$NON-NLS-1$ settings.put("TreeConflictsView.container", resource instanceof IContainer); //$NON-NLS-1$ } refresh(); } public void dispose() { disposed = true; super.dispose(); } public boolean isDisposed() { return disposed; } public IResource getResource() { return resource; } public static boolean refresh(IResource[] resources) { if (view == null || view.isDisposed() || view.getResource() == null) return false; for (int i = 0; i < resources.length; i++) { if (view.getResource().equals(resources[i]) || resources[i].getFullPath().toString().startsWith(view.getResource().getFullPath().toString())) { Display.getDefault().asyncExec(new Runnable() { public void run() { view.refresh(); } }); return true; } } return false; } public void refresh() { if (disposed || resource == null) return; BusyIndicator.showWhile(Display.getDefault(), new Runnable() { public void run() { folderList = new ArrayList(); treeConflicts = new ArrayList(); ISVNClientAdapter client = null; try { client = SVNWorkspaceRoot.getSVNResourceFor(resource).getRepository().getSVNClient(); ISVNStatus[] statuses = client.getStatus(resource.getLocation().toFile(), true, false, true); for (int i = 0; i < statuses.length; i++) { if (statuses[i].hasTreeConflict()) { SVNTreeConflict treeConflict = new SVNTreeConflict(statuses[i]); IResource treeConflictResource = treeConflict.getResource(); if (treeConflictResource instanceof IContainer && !folderList.contains(treeConflictResource)) { folderList.add(treeConflict); } if (!(treeConflictResource instanceof IContainer)) { IContainer parent = treeConflictResource.getParent(); if (parent != null && !(parent instanceof IWorkspaceRoot) && !folderList.contains(parent)) { folderList.add(parent); } } treeConflicts.add(treeConflict); } } treeViewer.refresh(); treeViewer.expandAll(); } catch (Exception e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } finally { SVNWorkspaceRoot.getSVNResourceFor(resource).getRepository().returnSVNClient(client); } } }); } private void createMenus() { openAction = new OpenFileInSystemEditorAction(getSite().getPage(), treeViewer); MenuManager menuMgr = new MenuManager("#TreeConflictsViewPopupMenu"); //$NON-NLS-1$ menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { fillContextMenu(manager); } }); Menu menu = menuMgr.createContextMenu(treeViewer.getControl()); treeViewer.getControl().setMenu(menu); getSite().registerContextMenu(menuMgr, treeViewer); } private void createToolbar() { IToolBarManager toolbarManager = getViewSite().getActionBars().getToolBarManager(); toolbarManager.add(getRefreshAction()); toolbarManager.add(new Separator()); toolbarManager.update(false); } private Action getRefreshAction() { if (refreshAction == null) { refreshAction = new Action(Policy.bind("TreeConflictsView.refresh"), SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_REFRESH_ENABLED)) { //$NON-NLS-1$ public void run() { refresh(); } }; refreshAction.setToolTipText(Policy.bind("TreeConflictsView.refreshView")); //$NON-NLS-1$ refreshAction.setDisabledImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_REFRESH_DISABLED)); refreshAction.setHoverImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_REFRESH)); if (resource == null) refreshAction.setEnabled(false); } return refreshAction; } private void fillContextMenu(IMenuManager manager) { if (resource != null) { boolean conflictSelected = false; boolean enableOpen = false; IStructuredSelection selection = (IStructuredSelection)treeViewer.getSelection(); Iterator iter = selection.iterator(); while (iter.hasNext()) { Object element = iter.next(); if (element instanceof SVNTreeConflict) { conflictSelected = true; SVNTreeConflict treeConflict = (SVNTreeConflict)element; if (treeConflict.getResource() instanceof IFile && treeConflict.getResource().exists()) { enableOpen = true; break; } } } if (enableOpen) { manager.add(openAction); } if (enableOpen && selection.size() == 1) { MenuManager submenu = new MenuManager(Policy.bind("TreeConflictsView.openWith")); //$NON-NLS-1$ SVNTreeConflict treeConflict = (SVNTreeConflict)selection.getFirstElement(); submenu.add(new OpenWithMenu(getSite().getPage(), treeConflict.getResource())); manager.add(submenu); } manager.add(new Separator()); if (selection.size() == 1) { if (conflictSelected) { manager.add(new ResolveTreeConflictAction(treeViewer, this)); } PropertyDialogAction propertiesAction = new PropertyDialogAction(new SameShellProvider(Display.getDefault().getActiveShell()), treeViewer); manager.add(propertiesAction); manager.add(new Separator()); } manager.add(getRefreshAction()); } } class ConflictsContentProvider extends WorkbenchContentProvider { public Object getParent(Object element) { return null; } public boolean hasChildren(Object element) { if (element instanceof SVNTreeConflict) { return (((SVNTreeConflict)element).getResource() instanceof IContainer); } else return true; } public Object[] getElements(Object inputElement) { return getChildren(inputElement); } public Object[] getChildren(Object parentElement) { if (treeConflicts == null) return new Object[0]; if (parentElement instanceof TreeConflictsView) { Object[] folderArray = new Object[folderList.size()]; folderList.toArray(folderArray); sort(folderArray); return folderArray; } if (parentElement instanceof IContainer) { return getFolderChildren((IResource)parentElement); } if (parentElement instanceof SVNTreeConflict) { if (((SVNTreeConflict)parentElement).getResource() instanceof IContainer) { return getFolderChildren(((SVNTreeConflict)parentElement).getResource()); } } return new Object[0]; } private Object[] getFolderChildren(IResource parentElement) { List childList = new ArrayList(); Iterator iter = treeConflicts.iterator(); while (iter.hasNext()) { SVNTreeConflict treeConflict = (SVNTreeConflict)iter.next(); if ((!(treeConflict.getResource() instanceof IContainer)) && treeConflict.getResource().getParent() != null && treeConflict.getResource().getParent().getFullPath().toString().equals(parentElement.getFullPath().toString())) childList.add(treeConflict); } Object[] children = new Object[childList.size()]; childList.toArray(children); sort(children); return children; } private void sort(Object[] items) { Arrays.sort(items, new Comparator() { public int compare(Object o1, Object o2) { IResource r1; IResource r2; if (o1 instanceof IResource) r1 = (IResource)o1; else { SVNTreeConflict tc = (SVNTreeConflict)o1; r1 = tc.getResource(); } if (o2 instanceof IResource) r2 = (IResource)o2; else { SVNTreeConflict tc = (SVNTreeConflict)o2; r2 = tc.getResource(); } return r1.getFullPath().toString().compareTo(r2.getFullPath().toString()); } }); } } class ConflictsLabelProvider extends LabelProvider implements ITableLabelProvider { public Image getColumnImage(Object element, int columnIndex) { if (columnIndex == 0) { IResource elementResource; if (element instanceof SVNTreeConflict) elementResource = ((SVNTreeConflict)element).getResource(); else elementResource = (IResource)element; Image image; if (!elementResource.exists() && elementResource.getName().indexOf(".") == -1) { //$NON-NLS-1$ image = WorkbenchLabelProvider.getDecoratingWorkbenchLabelProvider().getImage(ResourcesPlugin.getWorkspace().getRoot().getFolder(new Path(elementResource.getFullPath().toString()))); } else { image = WorkbenchLabelProvider.getDecoratingWorkbenchLabelProvider().getImage(elementResource); } return image; } return null; } public String getColumnText(Object element, int columnIndex) { switch (columnIndex) { case 0: if (element instanceof SVNTreeConflict) { SVNTreeConflict treeConflict = (SVNTreeConflict)element; if (treeConflict.getResource() instanceof IContainer) return treeConflict.getResource().getFullPath().toString(); else return treeConflict.getResource().getName(); } else { return ((IResource)element).getFullPath().toString(); } case 1: if (element instanceof SVNTreeConflict) return ((SVNTreeConflict)element).getDescription(); else return ""; //$NON-NLS-1$ default: break; } return null; } } } 000077500000000000000000000000001203611042400351535ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/consoleConsoleDocument.java000066400000000000000000000054341203611042400411250ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/console/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.console; /** * Simple circular buffer that stores a fix number of lines. */ public class ConsoleDocument { public static final int COMMAND = 0; // command text public static final int MESSAGE = 1; // message received public static final int ERROR = 2; // error received public static final int STATUS = 3; // status text public static final int DELIMITER = 4; // delimiter text between runs private int[] lineTypes; private String[] lines; private int writeIndex = 0; private int readIndex = 0; private static final int BUFFER_SIZE = 200; protected static class ConsoleLine { public String line; public int type; ConsoleLine(String line, int type) { this.line = line; this.type = type; } } /** * Creates an empty console document. */ public ConsoleDocument() { } /** * Clears the console document. */ public void clear() { lineTypes = null; lines = null; writeIndex = 0; readIndex = 0; } /** * Appends a line of the specified type to the end of the console. */ public void appendConsoleLine(int type, String line) { if(lines == null) { lines = new String[BUFFER_SIZE]; lineTypes = new int[BUFFER_SIZE]; } lines[writeIndex] = line; lineTypes[writeIndex] = type; if(++writeIndex >= BUFFER_SIZE) { writeIndex = 0; } if(writeIndex == readIndex) { if(++readIndex >= BUFFER_SIZE) { readIndex = 0; } } } public ConsoleLine[] getLines() { if(isEmpty()) return new ConsoleLine[0]; ConsoleLine[] docLines = new ConsoleLine[readIndex > writeIndex ? BUFFER_SIZE : writeIndex]; int index = readIndex; for (int i = 0; i < docLines.length; i++) { docLines[i] = new ConsoleLine(lines[index], lineTypes[index]); if (++index >= BUFFER_SIZE) { index = 0; } } return docLines; } public boolean isEmpty() { return writeIndex == readIndex; } } ConsolePreferencesPage.java000066400000000000000000000132101203611042400423740ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/console/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.console; import org.eclipse.jface.preference.BooleanFieldEditor; import org.eclipse.jface.preference.ColorFieldEditor; import org.eclipse.jface.preference.FieldEditorPreferencePage; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.IntegerFieldEditor; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class ConsolePreferencesPage extends FieldEditorPreferencePage implements IWorkbenchPreferencePage { public ConsolePreferencesPage() { super(GRID); setPreferenceStore(SVNUIPlugin.getPlugin().getPreferenceStore()); } private ColorFieldEditor commandColorEditor; private ColorFieldEditor messageColorEditor; private ColorFieldEditor errorColorEditor; private BooleanFieldEditor showOnMessage; private BooleanFieldEditor showOnError; private BooleanFieldEditor restrictOutput; private IntegerFieldEditor highWaterMark; protected void createFieldEditors() { Composite composite = getFieldEditorParent(); IPreferenceStore store = getPreferenceStore(); restrictOutput = new BooleanFieldEditor(ISVNUIConstants.PREF_CONSOLE_LIMIT_OUTPUT, Policy.bind("ConsolePreferencePage.limitOutput"), composite); addField(restrictOutput); highWaterMark = new IntegerFieldEditor(ISVNUIConstants.PREF_CONSOLE_HIGH_WATER_MARK, Policy.bind("ConsolePreferencePage.highWaterMark"), composite); highWaterMark.setValidRange(1000, Integer.MAX_VALUE - 1); addField(highWaterMark); highWaterMark.setEnabled(store.getBoolean(ISVNUIConstants.PREF_CONSOLE_LIMIT_OUTPUT), composite); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; highWaterMark.getTextControl(composite).addFocusListener(focusListener); showOnMessage = new BooleanFieldEditor(ISVNUIConstants.PREF_CONSOLE_SHOW_ON_MESSAGE, Policy.bind("ConsolePreferencePage.showOnMessage"), composite); //$NON-NLS-1$ addField(showOnMessage); showOnError = new BooleanFieldEditor(ISVNUIConstants.PREF_CONSOLE_SHOW_ON_ERROR, Policy.bind("ConsolePreferencePage.showOnError"), composite); //$NON-NLS-1$ addField(showOnError); createLabel(composite, Policy.bind("ConsolePreferencePage.consoleColorSettings")); //$NON-NLS-1$ commandColorEditor = createColorFieldEditor(ISVNUIConstants.PREF_CONSOLE_COMMAND_COLOR, Policy.bind("ConsolePreferencePage.commandColor"), composite); //$NON-NLS-1$ addField(commandColorEditor); messageColorEditor = createColorFieldEditor(ISVNUIConstants.PREF_CONSOLE_MESSAGE_COLOR, Policy.bind("ConsolePreferencePage.messageColor"), composite); //$NON-NLS-1$ addField(messageColorEditor); errorColorEditor = createColorFieldEditor(ISVNUIConstants.PREF_CONSOLE_ERROR_COLOR, Policy.bind("ConsolePreferencePage.errorColor"), composite); //$NON-NLS-1$ addField(errorColorEditor); PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IHelpContextIds.CONSOLE_PREFERENCE_PAGE); } public void propertyChange(PropertyChangeEvent event) { super.propertyChange(event); highWaterMark.setEnabled(restrictOutput.getBooleanValue(), getFieldEditorParent()); } /** * Utility method that creates a label instance * and sets the default layout data. * * @param parent the parent for the new label * @param text the text for the new label * @return the new label */ private Label createLabel(Composite parent, String text) { Label label = new Label(parent, SWT.LEFT); label.setText(text); GridData data = new GridData(); data.horizontalSpan = 2; data.horizontalAlignment = GridData.FILL; label.setLayoutData(data); return label; } /** * Creates a new color field editor. */ private ColorFieldEditor createColorFieldEditor(String preferenceName, String label, Composite parent) { ColorFieldEditor editor = new ColorFieldEditor(preferenceName, label, parent); editor.setPage(this); editor.setPreferenceStore(getPreferenceStore()); return editor; } /* (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPreferencePage#init(org.eclipse.ui.IWorkbench) */ public void init(IWorkbench workbench) { } /* (non-Javadoc) * @see org.eclipse.jface.preference.IPreferencePage#performOk() */ public boolean performOk() { SVNUIPlugin.getPlugin().savePluginPreferences(); return super.performOk(); } } ConsoleRemoveAction.java000066400000000000000000000025461203611042400417430ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/console/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.console; import org.eclipse.jface.action.Action; import org.eclipse.team.ui.TeamImages; import org.tigris.subversion.subclipse.ui.Policy; /** * Action that removed the SVN console from the console view. The console * can be re-added via the console view "Open Console" drop-down. * */ public class ConsoleRemoveAction extends Action { ConsoleRemoveAction() { this.setText(Policy.bind("ConsoleRemoveAction.label")); //$NON-NLS-1$ setToolTipText(Policy.bind("ConsoleRemoveAction.tooltip")); //$NON-NLS-1$ setImageDescriptor(TeamImages.getImageDescriptor("elcl16/participant_rem.gif")); //$NON-NLS-1$ setDisabledImageDescriptor(TeamImages.getImageDescriptor("dlcl16/participant_rem.gif")); //$NON-NLS-1$ } public void run() { SVNOutputConsoleFactory.closeConsole(); } }PathMatcher.java000066400000000000000000000126351203611042400402250ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/console/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.console; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.content.IContentDescription; import org.eclipse.jface.text.BadLocationException; import org.eclipse.ui.IEditorDescriptor; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorRegistry; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.console.IHyperlink; import org.eclipse.ui.console.IPatternMatchListenerDelegate; import org.eclipse.ui.console.PatternMatchEvent; import org.eclipse.ui.console.TextConsole; import org.eclipse.ui.part.FileEditorInput; public class PathMatcher implements IPatternMatchListenerDelegate { private static Pattern[] PATTERNS = new Pattern[] { Pattern.compile(".*\\s+[SAUCDGMRE]\\s+([^\r\n]+)"), Pattern.compile(".*\\s+Sending\\s+([^\r\n]+)"), Pattern.compile(".*\\s+Adding\\s+([^\r\n]+)"), Pattern.compile(".*\\s+Deleting\\s+([^\r\n]+)"), Pattern.compile(".*\\s+Replacing\\s+([^\r\n]+)"), Pattern.compile(".*\\s+Reverted\\s+([^\r\n]+)"), }; /** * The console associated with this line tracker */ private TextConsole fConsole; /* (non-Javadoc) * @see org.eclipse.ui.console.IPatternMatchListenerDelegate#connect(org.eclipse.ui.console.IConsole) */ public void connect(TextConsole console) { fConsole = console; } /* (non-Javadoc) * @see org.eclipse.ui.console.IPatternMatchListenerDelegate#disconnect() */ public void disconnect() { fConsole = null; } public void matchFound(PatternMatchEvent event) { if (fConsole != null) { // all lines will be matched. // select those: // [AUCDGMR][wsp](path)[newline or end of input] // \s+[AUCDGMR]\s+([a-zA-Z]:/[^\r\n]+) // (Sending)(Replacing)(Deleting)(Adding)(Reverted)[wsp](path)[newline or end of input] int offset = event.getOffset(); int length = event.getLength(); String path; try { path = fConsole.getDocument().get(offset, length); if (path == null) { return; } } catch (BadLocationException e) { return; } int start = 0; for (int i = 0; i < PATTERNS.length; i++) { Pattern pattern = PATTERNS[i]; Matcher matcher = pattern.matcher(path); while(matcher.find(start)) { length = matcher.end(1) - matcher.start(1); String link = path.substring(matcher.start(1), matcher.end(1)); if (link != null) { try { fConsole.addHyperlink(new FileHyperlink(link), offset + matcher.start(1), length); } catch (BadLocationException e) { } return; } start = matcher.end(); } } } } private static class FileHyperlink implements IHyperlink { private String myPath; public FileHyperlink(String path) { myPath = path; } public void linkEntered() { } public void linkExited() { } public void linkActivated() { IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if (window == null || window.getActivePage() == null) { return; } IWorkbenchPage page = window.getActivePage(); if (ResourcesPlugin.getWorkspace().getRoot() == null) { return; } IPath path = Path.fromOSString(myPath); // JavaHL prints out the path relative to the current device when committing if (!path.isAbsolute()) { path = path.makeAbsolute().setDevice(ResourcesPlugin.getWorkspace().getRoot().getLocation().getDevice()); } IFile file = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(path); if (file == null || !file.exists()) { if (path != null && !path.isAbsolute() && path.segmentCount() > 1) { path = path.removeFirstSegments(1); file = ResourcesPlugin.getWorkspace().getRoot().getFile(path); } } if (file == null || !file.exists()) { return; } IEditorRegistry registry = PlatformUI.getWorkbench().getEditorRegistry(); if (registry == null) { return; } IEditorDescriptor descriptor = null; try { IContentDescription contentDescription = file.getContentDescription(); descriptor = registry.getDefaultEditor(path.lastSegment(), contentDescription != null ? contentDescription.getContentType(): null); } catch (CoreException e) { } if (descriptor == null) { descriptor = registry.findEditor(IEditorRegistry.SYSTEM_EXTERNAL_EDITOR_ID); } if (descriptor == null) { return; } IEditorInput input = new FileEditorInput(file); try { page.openEditor(input, descriptor.getId()); } catch (PartInitException e) { } } } } SVNConsolePageParticipant.java000066400000000000000000000030741203611042400430070ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/console/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.console; import org.eclipse.ui.IActionBars; import org.eclipse.ui.console.*; import org.eclipse.ui.console.IConsole; import org.eclipse.ui.console.IConsolePageParticipant; import org.eclipse.ui.part.IPageBookViewPage; /** * Console helper that allows contributing actions to the console view when * the SVN console is visible. Added to the console via an extension point * from org.eclipse.ui.console. * */ public class SVNConsolePageParticipant implements IConsolePageParticipant { private ConsoleRemoveAction consoleRemoveAction; public void init(IPageBookViewPage page, IConsole console) { this.consoleRemoveAction = new ConsoleRemoveAction(); IActionBars bars = page.getSite().getActionBars(); bars.getToolBarManager().appendToGroup(IConsoleConstants.LAUNCH_GROUP, consoleRemoveAction); } public void dispose() { this.consoleRemoveAction = null; } public void activated() { } public void deactivated() { } public Object getAdapter(Class adapter) { return null; } }SVNOutputConsole.java000066400000000000000000000272131203611042400412350ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/console/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.console; import java.io.File; import java.io.IOException; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferenceConverter; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.widgets.Display; import org.eclipse.ui.console.ConsolePlugin; import org.eclipse.ui.console.IConsole; import org.eclipse.ui.console.IConsoleManager; import org.eclipse.ui.console.IOConsole; import org.eclipse.ui.console.IOConsoleOutputStream; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.client.IConsoleListener; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.SVNNodeKind; /** * Console that shows the output of SVN commands. It is shown as a page in the generic * console view. It supports coloring for message, command, and error lines in addition * the font can be configured. * * @since 3.0 */ public class SVNOutputConsole extends IOConsole implements IConsoleListener, IPropertyChangeListener { /** Constant used to define consoles that have the ability to output subversion information */ public static final String SVN_CONSOLE_TYPE = "SVN"; // created colors for each line type - must be disposed at shutdown private Color commandColor; private Color messageColor; private Color errorColor; // streams for each command type - each stream has its own color private IOConsoleOutputStream commandStream; private IOConsoleOutputStream messageStream; private IOConsoleOutputStream errorStream; // preferences for showing the SVN console when SVN output is provided private boolean showOnError; private boolean showOnMessage; private ConsoleDocument document; // Indicates whether the console is visible in the Console view private boolean visible = false; // Indicates whether the console's streams have been initialized private boolean initialized = false; /** * Used to notify this console of lifecycle methods init() * and dispose(). */ class MyLifecycle implements org.eclipse.ui.console.IConsoleListener { public void consolesAdded(IConsole[] consoles) { for (int i = 0; i < consoles.length; i++) { IConsole console = consoles[i]; if (console == SVNOutputConsole.this) { init(); } } } public void consolesRemoved(IConsole[] consoles) { for (int i = 0; i < consoles.length; i++) { IConsole console = consoles[i]; if (console == SVNOutputConsole.this) { ConsolePlugin.getDefault().getConsoleManager().removeConsoleListener(this); dispose(); } } } } /** * Constructor initializes preferences and colors but doesn't create the console * page yet. */ public SVNOutputConsole() { super("SVN", SVN_CONSOLE_TYPE, SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_SVN_CONSOLE)); //$NON-NLS-1$ // setup console showing preferences showOnMessage = SVNUIPlugin.getPlugin().getPreferenceStore().getBoolean(ISVNUIConstants.PREF_CONSOLE_SHOW_ON_MESSAGE); showOnError = SVNUIPlugin.getPlugin().getPreferenceStore().getBoolean(ISVNUIConstants.PREF_CONSOLE_SHOW_ON_ERROR); document = new ConsoleDocument(); SVNProviderPlugin.getPlugin().setConsoleListener(SVNOutputConsole.this); SVNUIPlugin.getPlugin().getPreferenceStore().addPropertyChangeListener(SVNOutputConsole.this); } /* (non-Javadoc) * @see org.eclipse.ui.console.AbstractConsole#init() */ protected void init() { // Called when console is added to the console view super.init(); initLimitOutput(); // Ensure that initialization occurs in the ui thread SVNUIPlugin.getStandardDisplay().asyncExec(new Runnable() { public void run() { JFaceResources.getFontRegistry().addListener(SVNOutputConsole.this); initializeStreams(); dump(); } }); } private void initLimitOutput() { IPreferenceStore store = SVNUIPlugin.getPlugin().getPreferenceStore(); if(store.getBoolean(ISVNUIConstants.PREF_CONSOLE_LIMIT_OUTPUT)) { setWaterMarks(1000, store.getInt(ISVNUIConstants.PREF_CONSOLE_HIGH_WATER_MARK)); } else { setWaterMarks(-1, 0); } } /* * Initialize thre streams of the console. Must be * called from the UI thread. */ private void initializeStreams() { synchronized(document) { if (!initialized) { commandStream = newOutputStream(); errorStream = newOutputStream(); messageStream = newOutputStream(); // install colors commandColor = createColor(SVNUIPlugin.getStandardDisplay(), ISVNUIConstants.PREF_CONSOLE_COMMAND_COLOR); commandStream.setColor(commandColor); messageColor = createColor(SVNUIPlugin.getStandardDisplay(), ISVNUIConstants.PREF_CONSOLE_MESSAGE_COLOR); messageStream.setColor(messageColor); errorColor = createColor(SVNUIPlugin.getStandardDisplay(), ISVNUIConstants.PREF_CONSOLE_ERROR_COLOR); errorStream.setColor(errorColor); // install font setFont(JFaceResources.getFontRegistry().get(ISVNUIConstants.PREF_CONSOLE_FONT)); initialized = true; } } } /* (non-Javadoc) * @see org.eclipse.ui.console.AbstractConsole#getHelpContextId() */ public String getHelpContextId() { return IHelpContextIds.CONSOLE_VIEW; } private void dump() { synchronized(document) { visible = true; ConsoleDocument.ConsoleLine[] lines = document.getLines(); for (int i = 0; i < lines.length; i++) { ConsoleDocument.ConsoleLine line = lines[i]; appendLine(line.type, line.line); } document.clear(); } } private void appendLine(int type, String line) { synchronized(document) { if(visible) { try { switch(type) { case ConsoleDocument.COMMAND: commandStream.write(line); commandStream.write('\n'); break; case ConsoleDocument.MESSAGE: messageStream.write(" " + line); //$NON-NLS-1$ messageStream.write('\n'); break; case ConsoleDocument.ERROR: errorStream.write(" " + line); //$NON-NLS-1$ errorStream.write('\n'); break; } } catch (IOException e) { SVNUIPlugin.log(0, e.getMessage(), e); } } else { document.appendConsoleLine(type, line); } } } private void bringConsoleToFront() { IConsoleManager manager = ConsolePlugin.getDefault().getConsoleManager(); if(! visible) { manager.addConsoles(new IConsole[] {this}); } manager.showConsoleView(this); } /* (non-Javadoc) * @see org.eclipse.ui.console.MessageConsole#dispose() */ protected void dispose() { // Here we can't call super.dispose() because we actually want the partitioner to remain // connected, but we won't show lines until the console is added to the console manager // again. // Called when console is removed from the console view synchronized (document) { visible = false; JFaceResources.getFontRegistry().removeListener(this); } } /** * Clean-up created fonts. */ public void shutdown() { // Call super dispose because we want the partitioner to be // disconnected. super.dispose(); if (commandColor != null) commandColor.dispose(); if (messageColor != null) messageColor.dispose(); if (errorColor != null) errorColor.dispose(); SVNUIPlugin.getPlugin().getPreferenceStore().removePropertyChangeListener(this); } /* (non-Javadoc) * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent) */ public void propertyChange(PropertyChangeEvent event) { String property = event.getProperty(); // colors if (visible) { if (property.equals(ISVNUIConstants.PREF_CONSOLE_COMMAND_COLOR)) { Color newColor = createColor(SVNUIPlugin.getStandardDisplay(), ISVNUIConstants.PREF_CONSOLE_COMMAND_COLOR); commandStream.setColor(newColor); commandColor.dispose(); commandColor = newColor; } else if (property.equals(ISVNUIConstants.PREF_CONSOLE_MESSAGE_COLOR)) { Color newColor = createColor(SVNUIPlugin.getStandardDisplay(), ISVNUIConstants.PREF_CONSOLE_MESSAGE_COLOR); messageStream.setColor(newColor); messageColor.dispose(); messageColor = newColor; } else if (property.equals(ISVNUIConstants.PREF_CONSOLE_ERROR_COLOR)) { Color newColor = createColor(SVNUIPlugin.getStandardDisplay(), ISVNUIConstants.PREF_CONSOLE_ERROR_COLOR); errorStream.setColor(newColor); errorColor.dispose(); errorColor = newColor; // font } else if (property.equals(ISVNUIConstants.PREF_CONSOLE_FONT)) { setFont(JFaceResources.getFontRegistry().get(ISVNUIConstants.PREF_CONSOLE_FONT)); } else if(property.equals(ISVNUIConstants.PREF_CONSOLE_LIMIT_OUTPUT)) { initLimitOutput(); } } // show preferences if(property.equals(ISVNUIConstants.PREF_CONSOLE_SHOW_ON_MESSAGE)) { Object value = event.getNewValue(); if(value instanceof String) { showOnMessage = Boolean.getBoolean((String)event.getNewValue()); } else { showOnMessage = ((Boolean)value).booleanValue(); } } // Show on error if(property.equals(ISVNUIConstants.PREF_CONSOLE_SHOW_ON_ERROR)) { Object value = event.getNewValue(); if(value instanceof String) { showOnError = Boolean.getBoolean((String)event.getNewValue()); } else { showOnError = ((Boolean)value).booleanValue(); } } } /** * Returns a color instance based on data from a preference field. */ private Color createColor(Display display, String preference) { RGB rgb = PreferenceConverter.getColor(SVNUIPlugin.getPlugin().getPreferenceStore(), preference); return new Color(display, rgb); } public void logCommandLine(String commandLine) { if (showOnMessage) { bringConsoleToFront(); } appendLine(ConsoleDocument.DELIMITER, Policy.bind("Console.preExecutionDelimiter")); //$NON-NLS-1$ appendLine(ConsoleDocument.COMMAND, commandLine); } public void logMessage(String message) { if (showOnMessage) { bringConsoleToFront(); } appendLine(ConsoleDocument.MESSAGE, " " + message); //$NON-NLS-1$ } public void logRevision(long revision, String path) { } public void logCompleted(String message) { if (showOnMessage) { bringConsoleToFront(); } appendLine(ConsoleDocument.MESSAGE, " " + message); //$NON-NLS-1$ } public void logError(String message) { if (showOnMessage || showOnError) { bringConsoleToFront(); } appendLine(ConsoleDocument.ERROR, " " + message); //$NON-NLS-1$ } public void onNotify(File path, SVNNodeKind kind) { } public void setCommand(int command) { } }SVNOutputConsoleFactory.java000066400000000000000000000035531203611042400425660ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/console/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.console; import org.eclipse.ui.console.ConsolePlugin; import org.eclipse.ui.console.IConsole; import org.eclipse.ui.console.IConsoleFactory; import org.eclipse.ui.console.IConsoleManager; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class SVNOutputConsoleFactory implements IConsoleFactory { /* (non-Javadoc) * @see org.eclipse.ui.console.IConsoleFactory#openConsole() */ public void openConsole() { showConsole(); } public static void showConsole() { SVNOutputConsole console = SVNUIPlugin.getPlugin().getConsole(); if (console != null) { IConsoleManager manager = ConsolePlugin.getDefault().getConsoleManager(); IConsole[] existing = manager.getConsoles(); boolean exists = false; for (int i = 0; i < existing.length; ++i) { if(console == existing[i]) exists = true; } if(! exists) manager.addConsoles(new IConsole[] {console}); manager.showConsoleView(console); } } public static void closeConsole() { IConsoleManager manager = ConsolePlugin.getDefault().getConsoleManager(); SVNOutputConsole console = SVNUIPlugin.getPlugin().getConsole(); if (console != null) { manager.removeConsoles(new IConsole[] {console}); ConsolePlugin.getDefault().getConsoleManager().addConsoleListener(console.new MyLifecycle()); } } }TextViewerAction.java000066400000000000000000000031141203611042400412610ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/console/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.console; import org.eclipse.jface.action.Action; import org.eclipse.jface.text.ITextOperationTarget; import org.eclipse.jface.text.ITextViewer; import org.eclipse.ui.texteditor.IUpdate; /** * Used by ConsoleView */ public class TextViewerAction extends Action implements IUpdate { private int operationCode = -1; private ITextOperationTarget operationTarget; public TextViewerAction(ITextViewer viewer, int operationCode) { this.operationCode = operationCode; operationTarget = viewer.getTextOperationTarget(); update(); } public void update() { boolean wasEnabled = isEnabled(); boolean isEnabled = (operationTarget != null && operationTarget.canDoOperation(operationCode)); setEnabled(isEnabled); if (wasEnabled != isEnabled) { firePropertyChange(ENABLED, wasEnabled ? Boolean.TRUE : Boolean.FALSE, isEnabled ? Boolean.TRUE : Boolean.FALSE); } } public void run() { if (operationCode != -1 && operationTarget != null) { operationTarget.doOperation(operationCode); } } } 000077500000000000000000000000001203611042400354735ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/decoratorAcceptMineResolution.java000066400000000000000000000040641203611042400424360ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/decorator/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.decorator; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.ui.IMarkerResolution; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.operations.ResolveOperation; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; public class AcceptMineResolution implements IMarkerResolution { /* (non-Javadoc) * @see org.eclipse.ui.IMarkerResolution#getLabel() */ public String getLabel() { return Policy.bind("AcceptMine.label"); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.eclipse.ui.IMarkerResolution#run(org.eclipse.core.resources.IMarker) */ public void run(IMarker marker) { try { new ResolveOperation(null, new IResource[] {marker.getResource()}, ISVNConflictResolver.Choice.chooseMineFull).run(new NullProgressMonitor()); } catch (InvocationTargetException e) { if (e.getTargetException() instanceof SVNException) { SVNUIPlugin.log((SVNException)e.getTargetException()); } else { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } catch (InterruptedException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } } AcceptTheirsResolution.java000066400000000000000000000041041203611042400427770ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/decorator/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.decorator; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.ui.IMarkerResolution; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.operations.ResolveOperation; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; public class AcceptTheirsResolution implements IMarkerResolution { /* (non-Javadoc) * @see org.eclipse.ui.IMarkerResolution#getLabel() */ public String getLabel() { return Policy.bind("AcceptTheirs.label"); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.eclipse.ui.IMarkerResolution#run(org.eclipse.core.resources.IMarker) */ public void run(IMarker marker) { try { new ResolveOperation(null, new IResource[] {marker.getResource()}, ISVNConflictResolver.Choice.chooseTheirsFull).run(new NullProgressMonitor()); } catch (InvocationTargetException e) { if (e.getTargetException() instanceof SVNException) { SVNUIPlugin.log((SVNException)e.getTargetException()); } else { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } catch (InterruptedException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } } ConflictResolution.java000066400000000000000000000022621203611042400421650ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/decorator/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.decorator; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; import org.eclipse.ui.IMarkerResolution; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.actions.EditConflictsAction; public class ConflictResolution implements IMarkerResolution { public ConflictResolution() { super(); } public String getLabel() { return Policy.bind("SyncAction.conflicts"); //$NON-NLS-1$ } public void run(IMarker marker) { new EditConflictsAction((IFile)marker.getResource()).run(null); } } ConflictResolutionGenerator.java000066400000000000000000000043551203611042400440410ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/decorator/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.decorator; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IMarker; import org.eclipse.ui.IMarkerResolution; import org.eclipse.ui.IMarkerResolutionGenerator2; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class ConflictResolutionGenerator implements IMarkerResolutionGenerator2 { private boolean textConflict; private boolean propertyConflict; private boolean treeConflict; public ConflictResolutionGenerator() { super(); } public boolean hasResolutions(IMarker marker) { return true; } public IMarkerResolution[] getResolutions(IMarker marker) { List conflictResolutions = new ArrayList(); try { if (marker.getAttribute("textConflict") != null && marker.getAttribute("textConflict").toString().equals("true")) { //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ conflictResolutions.add(new EditConflictsResolution()); conflictResolutions.add(new AcceptMineResolution()); conflictResolutions.add(new AcceptTheirsResolution()); } } catch (Exception e) { SVNUIPlugin.log(e.getMessage()); } conflictResolutions.add(new MarkAsResolvedResolution()); IMarkerResolution[] resolutionArray = new IMarkerResolution[conflictResolutions.size()]; conflictResolutions.toArray(resolutionArray); return resolutionArray; } public void setTextConflict(boolean textConflict) { this.textConflict = textConflict; } public void setPropertyConflict(boolean propertyConflict) { this.propertyConflict = propertyConflict; } public void setTreeConflict(boolean treeConflict) { this.treeConflict = treeConflict; } } EditConflictsResolution.java000066400000000000000000000022731203611042400431600ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/decorator/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.decorator; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IMarker; import org.eclipse.ui.IMarkerResolution; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.actions.EditConflictsAction; public class EditConflictsResolution implements IMarkerResolution { public EditConflictsResolution() { super(); } public String getLabel() { return Policy.bind("EditConflicts.Label"); //$NON-NLS-1$ } public void run(IMarker marker) { new EditConflictsAction((IFile)marker.getResource()).run(null); } } IDecoratorComponent.java000066400000000000000000000012751203611042400422610ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/decorator/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.decorator; import java.util.Map; interface IDecoratorComponent { String getValue(Map bindings); } MarkAsResolvedResolution.java000066400000000000000000000040741203611042400433110ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/decorator/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.decorator; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IMarker; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.ui.IMarkerResolution; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.operations.ResolveOperation; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; public class MarkAsResolvedResolution implements IMarkerResolution { /* (non-Javadoc) * @see org.eclipse.ui.IMarkerResolution#getLabel() */ public String getLabel() { return Policy.bind("MarkResolved.label"); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.eclipse.ui.IMarkerResolution#run(org.eclipse.core.resources.IMarker) */ public void run(IMarker marker) { try { new ResolveOperation(null, new IResource[] {marker.getResource()}, ISVNConflictResolver.Choice.chooseMerged).run(new NullProgressMonitor()); } catch (InvocationTargetException e) { if (e.getTargetException() instanceof SVNException) { SVNUIPlugin.log((SVNException)e.getTargetException()); } else { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } catch (InterruptedException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } } SVNDecoratorConfiguration.java000066400000000000000000000170401203611042400434010ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/decorator/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.decorator; import java.util.ArrayList; import java.util.Map; import org.eclipse.jface.viewers.IDecoration; public class SVNDecoratorConfiguration { /** * Decorator component that represents static text in the format string */ private static class ConstantValueDecoratorComponent implements IDecoratorComponent { private final String value; public ConstantValueDecoratorComponent(String value) { this.value = value; } public String getValue(Map bindings) { return value; } public String toString() { return '"' + value + '"'; } } /** * Decorator component that represents a placeholder for a value */ private static class MappedValueDecoratorComponent implements IDecoratorComponent { private final String key; public MappedValueDecoratorComponent(String key) { this.key = key; } public String getValue(Map bindings) { return (String)bindings.get(key); } public String toString() { return '{' + key + '}'; } } public static final String RESOURCE_NAME = "name"; //$NON-NLS-1$ public static final String RESOURCE_REVISION = "revision"; //$NON-NLS-1$ public static final String RESOURCE_AUTHOR = "author"; //$NON-NLS-1$ public static final String RESOURCE_DATE = "date"; //$NON-NLS-1$ public static final String RESOURCE_URL = "url"; //$NON-NLS-1$ public static final String RESOURCE_URL_SHORT = "url_short"; //$NON-NLS-1$ public static final String RESOURCE_LABEL = "label"; //$NON-NLS-1$ // bindings for resource states public static final String DIRTY_FLAG = "dirty_flag"; //$NON-NLS-1$ public static final String ADDED_FLAG = "added_flag"; //$NON-NLS-1$ public static final String EXTERNAL_FLAG = "external_flag"; //$NON-NLS-1$ public static final String DEFAULT_DIRTY_FLAG = ""; //$NON-NLS-1$ public static final String DEFAULT_ADDED_FLAG = ""; //$NON-NLS-1$ public static final String DEFAULT_EXTERNAL_FLAG = ""; //$NON-NLS-1$ // default text decoration formats public static final String DEFAULT_FILETEXTFORMAT = "{added_flag}{dirty_flag}{name} {revision} {date} {author}"; //$NON-NLS-1$ public static final String DEFAULT_FOLDERTEXTFORMAT = "{external_flag}{added_flag}{dirty_flag}{name} "; //$NON-NLS-1$ public static final String DEFAULT_PROJECTTEXTFORMAT = "{dirty_flag}{name} [{url_short}]"; //$NON-NLS-1$ // font and color definition ids public static final String OUTGOING_CHANGE_FOREGROUND_COLOR = "svn_outgoing_change_foreground_color"; //$NON-NLS-1$ public static final String OUTGOING_CHANGE_BACKGROUND_COLOR = "svn_outgoing_change_background_color"; //$NON-NLS-1$ public static final String OUTGOING_CHANGE_FONT = "svn_outgoing_change_font"; //$NON-NLS-1$ public static final String IGNORED_FOREGROUND_COLOR = "svn_ignored_resource_foreground_color"; //$NON-NLS-1$ public static final String IGNORED_BACKGROUND_COLOR = "svn_ignored_resource_background_color"; //$NON-NLS-1$ public static final String IGNORED_FONT = "svn_ignored_resource_font"; //$NON-NLS-1$ /** * add a prefix and a suffix depending on format string and the bindings * @param decoration * @param format * @param bindings */ public static void decorate(IDecoration decoration, IDecoratorComponent[][] format, Map bindings) { String[] prefixSuffix = decorate(format, bindings); decoration.addPrefix(prefixSuffix[0]); decoration.addSuffix(prefixSuffix[1]); } /** * add a prefix and a suffix to name depending on format string and the bindings * @param name * @param format * @param bindings * @return */ public static String decorate(String name, String formatString, Map bindings) { IDecoratorComponent[][] format = compileFormatString(formatString); String[] prefixSuffix = decorate(format, bindings); return prefixSuffix[0] + name + prefixSuffix[1]; } /** * Creates a list of prefix and suffix decorator components * @param format Format to create components from * @param bindings Bindings to link components to * @return Decorator components for prefix and suffix */ public static IDecoratorComponent[][] compileFormatString(String format) { int length = format.length(); int start = -1; int end = length; boolean isPrefix = true; ArrayList prefix = new ArrayList(); ArrayList suffix = new ArrayList(); while ((start + 1) < length) { if ((end = format.indexOf('{', start)) > -1) { if (start + 1 != end) { IDecoratorComponent component = new ConstantValueDecoratorComponent(format.substring(start + 1, end)); if (isPrefix) { prefix.add(component); } else { suffix.add(component); } } if ((start = format.indexOf('}', end)) > -1) { String key = format.substring(end + 1, start); //We use the RESOURCE_NAME key to determine if we are doing the prefix or suffix. The name isn't actually part of either. if (key.equals(RESOURCE_NAME)) { // Start working on the suffix isPrefix = false; } else { IDecoratorComponent component = new MappedValueDecoratorComponent(key); if (isPrefix) { prefix.add(component); } else { suffix.add(component); } } } else { // No closing brace, so it is not a variable IDecoratorComponent component = new ConstantValueDecoratorComponent(format.substring(end)); if (isPrefix) { prefix.add(component); } else { suffix.add(component); } break; } } else { // No variables, just text IDecoratorComponent component = new ConstantValueDecoratorComponent(format.substring(start + 1)); if (isPrefix) { prefix.add(component); } else { suffix.add(component); } break; } } return new IDecoratorComponent[][] { (IDecoratorComponent[])prefix.toArray(new IDecoratorComponent[prefix.size()]), (IDecoratorComponent[])suffix.toArray(new IDecoratorComponent[suffix.size()])}; } /** * get the suffix and the prefix depending on the format string and the bindings * the first element is the prefix, the second is the suffix * ex : * format = "{added_flag}{dirty_flag}{name} {revision} {date} {author}" * bindings = { "added_flag"="*", "revision"="182", date="13/10/03 14:25","author"="cchab"} * ==> prefix= "*" * ==> suffix= " 182 13/10/03 14:25 cchab" */ public static String[] decorate(IDecoratorComponent[][] format, Map bindings) { StringBuffer prefix = new StringBuffer(80); StringBuffer suffix = new StringBuffer(80); for (int iPrefix = 0; iPrefix < format[0].length; iPrefix++) { String value = format[0][iPrefix].getValue(bindings); if (value != null) { prefix.append(value); } } for (int iSuffix = 0; iSuffix < format[1].length; iSuffix++) { String value = format[1][iSuffix].getValue(bindings); if (value != null) { suffix.append(value); } } return new String[] {prefix.toString(), suffix.toString()}; } } SVNLightweightDecorator.java000066400000000000000000000702131203611042400430520ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/decorator/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.decorator; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceVisitor; import org.eclipse.core.resources.mapping.ResourceMapping; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.IDecoration; import org.eclipse.jface.viewers.ILightweightLabelDecorator; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.LabelProviderChangedEvent; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.widgets.Display; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.ui.ISharedImages; import org.eclipse.team.ui.TeamImages; import org.eclipse.team.ui.TeamUI; import org.eclipse.ui.IContributorResourceAdapter; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.themes.ITheme; import org.tigris.subversion.subclipse.core.IResourceStateChangeListener; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.core.util.Util; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.SVNStatusKind; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * The decorator for svn resources */ public class SVNLightweightDecorator extends LabelProvider implements ILightweightLabelDecorator, IResourceStateChangeListener, IPropertyChangeListener { private static String[] fonts = new String[] { SVNDecoratorConfiguration.IGNORED_FONT, SVNDecoratorConfiguration.OUTGOING_CHANGE_FONT}; private static String[] colors = new String[] { SVNDecoratorConfiguration.OUTGOING_CHANGE_BACKGROUND_COLOR, SVNDecoratorConfiguration.OUTGOING_CHANGE_FOREGROUND_COLOR, SVNDecoratorConfiguration.IGNORED_BACKGROUND_COLOR, SVNDecoratorConfiguration.IGNORED_FOREGROUND_COLOR}; // Images cached for better performance private static ImageDescriptor dirty; private static ImageDescriptor checkedIn; private static ImageDescriptor deleted; private static ImageDescriptor switched; private static ImageDescriptor added; private static ImageDescriptor newResource; private static ImageDescriptor conflicted; private static ImageDescriptor propertyConflicted; private static ImageDescriptor merged; private static ImageDescriptor external; private static ImageDescriptor locked; private static ImageDescriptor needsLock; private static ImageDescriptor treeConflict; private static IPropertyChangeListener propertyListener; protected boolean computeDeepDirtyCheck; protected IDecoratorComponent[][] folderDecoratorFormat; protected IDecoratorComponent[][] projectDecoratorFormat; protected IDecoratorComponent[][] fileDecoratorFormat; protected String dirtyFlag; protected String addedFlag; protected String externalFlag; protected boolean showNewResources; protected boolean showDirty; protected boolean showAdded; protected boolean showExternal; protected boolean showHasRemote; protected DateFormat dateFormat; /* * Define a cached image descriptor which only creates the image data once */ public static class CachedImageDescriptor extends ImageDescriptor { ImageDescriptor descriptor; ImageData data; public CachedImageDescriptor(ImageDescriptor descriptor) { this.descriptor = descriptor; } public ImageData getImageData() { if (data == null) { data = descriptor.getImageData(); } return data; } } static { dirty = new CachedImageDescriptor(TeamImages.getImageDescriptor(ISharedImages.IMG_DIRTY_OVR)); checkedIn = new CachedImageDescriptor(TeamImages.getImageDescriptor(ISharedImages.IMG_CHECKEDIN_OVR)); added = new CachedImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_ADDED)); merged = new CachedImageDescriptor(TeamImages.getImageDescriptor(ISharedImages.IMG_DIRTY_OVR)); newResource = new CachedImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_QUESTIONABLE)); external = new CachedImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_EXTERNAL)); locked = new CachedImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_LOCKED)); needsLock = new CachedImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_NEEDSLOCK)); conflicted = new CachedImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_CONFLICTED)); deleted = new CachedImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_DELETED)); switched = new CachedImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_SWITCHED)); treeConflict = new CachedImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_TREE_CONFLICT)); propertyConflicted = new CachedImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_PROPERTY_CONFLICTED)); } public SVNLightweightDecorator() { IPreferenceStore store = SVNUIPlugin.getPlugin().getPreferenceStore(); computeDeepDirtyCheck = store.getBoolean(ISVNUIConstants.PREF_CALCULATE_DIRTY); folderDecoratorFormat = SVNDecoratorConfiguration.compileFormatString(store.getString(ISVNUIConstants.PREF_FOLDERTEXT_DECORATION)); projectDecoratorFormat = SVNDecoratorConfiguration.compileFormatString(store.getString(ISVNUIConstants.PREF_PROJECTTEXT_DECORATION)); fileDecoratorFormat = SVNDecoratorConfiguration.compileFormatString(store.getString(ISVNUIConstants.PREF_FILETEXT_DECORATION)); dirtyFlag = store.getString(ISVNUIConstants.PREF_DIRTY_FLAG); addedFlag = store.getString(ISVNUIConstants.PREF_ADDED_FLAG); externalFlag = store.getString(ISVNUIConstants.PREF_EXTERNAL_FLAG); showNewResources = store.getBoolean(ISVNUIConstants.PREF_SHOW_NEWRESOURCE_DECORATION); showDirty = store.getBoolean(ISVNUIConstants.PREF_SHOW_DIRTY_DECORATION); showAdded = store.getBoolean(ISVNUIConstants.PREF_SHOW_ADDED_DECORATION); showExternal = store.getBoolean(ISVNUIConstants.PREF_SHOW_EXTERNAL_DECORATION); showHasRemote = store.getBoolean(ISVNUIConstants.PREF_SHOW_HASREMOTE_DECORATION); String dateFormatPattern = store.getString(ISVNUIConstants.PREF_DATEFORMAT_DECORATION); setDateFormat(dateFormatPattern); propertyListener = new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { if (ISVNUIConstants.PREF_CALCULATE_DIRTY.equals(event.getProperty())) { computeDeepDirtyCheck = getBoolean(event); } else if (ISVNUIConstants.PREF_FOLDERTEXT_DECORATION.equals(event.getProperty())) { folderDecoratorFormat = SVNDecoratorConfiguration.compileFormatString((String)event.getNewValue()); } else if (ISVNUIConstants.PREF_PROJECTTEXT_DECORATION.equals(event.getProperty())) { projectDecoratorFormat = SVNDecoratorConfiguration.compileFormatString((String)event.getNewValue()); } else if (ISVNUIConstants.PREF_FILETEXT_DECORATION.equals(event.getProperty())) { fileDecoratorFormat = SVNDecoratorConfiguration.compileFormatString((String)event.getNewValue()); } else if (ISVNUIConstants.PREF_DIRTY_FLAG.equals(event.getProperty())) { dirtyFlag = (String)event.getNewValue(); } else if (ISVNUIConstants.PREF_ADDED_FLAG.equals(event.getProperty())) { addedFlag = (String)event.getNewValue(); } else if (ISVNUIConstants.PREF_EXTERNAL_FLAG.equals(event.getProperty())) { externalFlag = (String)event.getNewValue(); } else if (ISVNUIConstants.PREF_SHOW_NEWRESOURCE_DECORATION.equals(event.getProperty())){ showNewResources = getBoolean(event); } else if (ISVNUIConstants.PREF_SHOW_DIRTY_DECORATION.equals(event.getProperty())) { showDirty = getBoolean(event); } else if (ISVNUIConstants.PREF_SHOW_ADDED_DECORATION.equals(event.getProperty())) { showAdded = getBoolean(event); } else if (ISVNUIConstants.PREF_SHOW_EXTERNAL_DECORATION.equals(event.getProperty())) { showExternal = getBoolean(event); } else if (ISVNUIConstants.PREF_SHOW_HASREMOTE_DECORATION.equals(event.getProperty())) { showHasRemote = getBoolean(event); } else if (ISVNUIConstants.PREF_DATEFORMAT_DECORATION.equals(event.getProperty())) { String dateFormatPattern = (String)event.getNewValue(); setDateFormat(dateFormatPattern); } } }; store.addPropertyChangeListener(propertyListener); SVNProviderPlugin.addResourceStateChangeListener(this); // This is an optimization to ensure that while decorating our fonts and colors are // pre-created and decoration can occur without having to syncExec. ensureFontAndColorsCreated(fonts, colors); PlatformUI.getWorkbench().getThemeManager().getCurrentTheme().addPropertyChangeListener(this); // SVNProviderPlugin.broadcastDecoratorEnablementChanged(true /* enabled */); } /** * This method will ensure that the fonts and colors used by the decorator * are cached in the registries. This avoids having to syncExec when * decorating since we ensure that the fonts and colors are pre-created. * * @param fonts fonts ids to cache * @param colors color ids to cache */ private void ensureFontAndColorsCreated(final String[] fonts, final String[] colors) { SVNUIPlugin.getStandardDisplay().syncExec(new Runnable() { public void run() { ITheme theme = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme(); for (int i = 0; i < colors.length; i++) { theme.getColorRegistry().get(colors[i]); } for (int i = 0; i < fonts.length; i++) { theme.getFontRegistry().get(fonts[i]); } } }); } private boolean getBoolean(PropertyChangeEvent event) { if (event.getNewValue() instanceof String) return ((String)event.getNewValue()).equalsIgnoreCase("true"); //$NON-NLS-1$ if (event.getNewValue() instanceof Boolean) return ((Boolean)event.getNewValue()).booleanValue(); return false; } /** * tells if given svn resource is dirty or not */ public static boolean isDirty(final ISVNLocalResource svnResource, LocalResourceStatus status) { try { if (!svnResource.exists()) return false; if (svnResource.getIResource().getType() == IResource.FILE) { // for files, we want that only modified files to be considered as dirty // LocalResourceStatus status = svnResource.getStatusFromCache(); return ((status.isTextModified() || status.isPropModified() || status.isReplaced() || status.isAdded()) && !status.isIgnored() && !svnResource.isIgnored()); } else { // a container with an added file, deleted file, conflicted file ... is considered as dirty return svnResource.isDirty(); } } catch (SVNException e) { //if we get an error report it to the log but assume dirty if (!e.operationInterrupted()) { SVNUIPlugin.log(e.getStatus()); } return true; } } /** * Returns the resource for the given input object, or * null if there is no resource associated with it. * * @param object the object to find the resource for * @return the resource for the given object, or null */ private IResource getResource(Object object) { if (object instanceof ResourceMapping) { object = ((ResourceMapping) object).getModelObject(); return getModelObjectResource(object); } if (object instanceof IResource) { return (IResource) object; } if (object instanceof IAdaptable) { return (IResource) ((IAdaptable) object).getAdapter( IResource.class); } return null; } public static IResource getModelObjectResource(Object o) { IResource resource = null; if (o instanceof IResource) { resource = (IResource) o; } else if (o instanceof IAdaptable) { IAdaptable adaptable = (IAdaptable) o; resource = (IResource)adaptable.getAdapter(IResource.class); if (resource == null) { IContributorResourceAdapter adapter = (IContributorResourceAdapter)adaptable.getAdapter(IContributorResourceAdapter.class); if (adapter != null) resource = adapter.getAdaptedResource(adaptable); } } return resource; } /** * This method should only be called by the decorator thread. * * @see org.eclipse.jface.viewers.ILightweightLabelDecorator#decorate(java.lang.Object, org.eclipse.jface.viewers.IDecoration) */ public void decorate(Object element, IDecoration decoration) { IResource resource = getResource(element); if (resource != null && resource.getType() == IResource.ROOT) return; boolean isIgnored = false; SVNTeamProvider svnProvider = null; ISVNLocalResource svnResource = null; if (resource != null) { // get the team provider svnProvider = (SVNTeamProvider)RepositoryProvider.getProvider(resource.getProject(), SVNProviderPlugin.getTypeId()); if (svnProvider == null) return; // if the resource is ignored return an empty decoration. This will // force a decoration update event and clear the existing SVN decoration. svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); try { if (svnResource.isIgnored()) { isIgnored = true; // return; } } catch (SVNException e) { // The was an exception in isIgnored. Don't decorate //todo should log this error return; } } // determine a if resource has outgoing changes (e.g. is dirty). boolean isDirty = false; boolean isUnversioned = false; if (resource == null) { if (element instanceof ResourceMapping) { IProject[] projects = ((ResourceMapping)element).getProjects(); if (projects != null) { for (IProject project : projects) { ISVNLocalResource svnProjectResource = SVNWorkspaceRoot.getSVNResourceFor(project); if (svnProjectResource != null) { try { if (svnProjectResource.isDirty()) { decoration.addOverlay(dirty); return; } } catch (SVNException e) { return; } } } } } return; } else { LocalResourceStatus status = null; if (!isIgnored) { try { status = svnResource.getStatusFromCache(); isDirty = SVNLightweightDecorator.isDirty(svnResource, status); } catch (SVNException e) { if (!e.operationInterrupted()) { SVNUIPlugin.log(e.getStatus()); isDirty = true; } } if (status != null) { isUnversioned = status.isUnversioned(); } // if (resource.getType() == IResource.FILE || computeDeepDirtyCheck) { //// isDirty = SVNLightweightDecorator.isDirty(svnResource); // isDirty = SVNLightweightDecorator.isDirty(svnResource, status); // } // try { // status = svnResource.getStatusFromCache(); // isUnversioned = status.isUnversioned(); // } catch (SVNException e1) { // if (!e1.operationInterrupted()) { // SVNUIPlugin.log(e1.getStatus()); // } // } decorateTextLabel(svnResource, status, decoration, isDirty); } computeColorsAndFonts(isIgnored, isDirty || isUnversioned, decoration); if (!isIgnored) { ImageDescriptor overlay = getOverlay(svnResource, status, isDirty, svnProvider); if(overlay != null) { //actually sending null arg would work but this makes logic clearer decoration.addOverlay(overlay); } } } } private void computeColorsAndFonts(boolean isIgnored, boolean isDirty, IDecoration decoration) { if (!SVNUIPlugin.getPlugin().getPreferenceStore().getBoolean(ISVNUIConstants.PREF_USE_FONT_DECORATORS)) return; ITheme current = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme(); if(isIgnored) { decoration.setBackgroundColor(current.getColorRegistry().get(SVNDecoratorConfiguration.IGNORED_BACKGROUND_COLOR)); decoration.setForegroundColor(current.getColorRegistry().get(SVNDecoratorConfiguration.IGNORED_FOREGROUND_COLOR)); decoration.setFont(current.getFontRegistry().get(SVNDecoratorConfiguration.IGNORED_FONT)); } else if(isDirty) { decoration.setBackgroundColor(current.getColorRegistry().get(SVNDecoratorConfiguration.OUTGOING_CHANGE_BACKGROUND_COLOR)); decoration.setForegroundColor(current.getColorRegistry().get(SVNDecoratorConfiguration.OUTGOING_CHANGE_FOREGROUND_COLOR)); decoration.setFont(current.getFontRegistry().get(SVNDecoratorConfiguration.OUTGOING_CHANGE_FONT)); } } /** * decorate the text label of the given resource. * This method assumes that only one thread will be accessing it at a time. */ protected void decorateTextLabel(ISVNLocalResource svnResource, LocalResourceStatus status, IDecoration decoration, boolean isDirty) { Map bindings = new HashMap(6); // if the resource does not have a location then return. This can happen if the resource // has been deleted after we where asked to decorate it. if (svnResource.getIResource().getLocation() == null) { return; } if (status.isUnversioned()) return; // get the format IDecoratorComponent[][] format; int type = svnResource.getIResource().getType(); if (type == IResource.FOLDER) { format = folderDecoratorFormat; } else if (type == IResource.PROJECT) { format = projectDecoratorFormat; } else { format = fileDecoratorFormat; } // fill the bindings if (isDirty & !status.isAdded()) { bindings.put(SVNDecoratorConfiguration.DIRTY_FLAG, dirtyFlag); } if (status.getUrlString() != null) { String label = status.getRepository().getLabel(); bindings.put( SVNDecoratorConfiguration.RESOURCE_LABEL, label == null ? status.getUrlString() : label); bindings.put( SVNDecoratorConfiguration.RESOURCE_URL, Util.unescape(status.getUrlString())); // short url is the path relative to root url of repository SVNUrl repositoryRoot = status.getRepository().getRepositoryRoot(); if (repositoryRoot != null) { int urlLen = status.getUrlString().length(); int rootLen = repositoryRoot.toString().length()+1; String shortUrl; if (urlLen > rootLen) shortUrl = status.getUrlString().substring(rootLen); else shortUrl = status.getUrlString(); bindings.put( SVNDecoratorConfiguration.RESOURCE_URL_SHORT, Util.unescape(shortUrl)); } } if (status.isAdded()) { bindings.put(SVNDecoratorConfiguration.ADDED_FLAG, addedFlag); } else if (SVNStatusKind.EXTERNAL.equals(status.getTextStatus())) { bindings.put(SVNDecoratorConfiguration.EXTERNAL_FLAG, externalFlag); } else { if ((status.getTextStatus() != SVNStatusKind.UNVERSIONED) && (status.getTextStatus() != SVNStatusKind.ADDED)) { if (status.getLastChangedRevision() != null) { bindings.put( SVNDecoratorConfiguration.RESOURCE_REVISION, status.getLastChangedRevision().toString()); } if (status.getLastCommitAuthor() != null) { bindings.put( SVNDecoratorConfiguration.RESOURCE_AUTHOR, status.getLastCommitAuthor()); } } if (status.getLastChangedDate() != null) { bindings.put( SVNDecoratorConfiguration.RESOURCE_DATE, dateFormat.format(status.getLastChangedDate())); } } SVNDecoratorConfiguration.decorate(decoration, format, bindings); } /* Determine and return the overlay icon to use. * We only get to use one, so if many are applicable at once we chose the * one we think is the most important to show. * Return null if no overlay is to be used. */ protected ImageDescriptor getOverlay(ISVNLocalResource svnResource, LocalResourceStatus status, boolean isDirty, SVNTeamProvider provider) { // Tree conflict if (status.hasTreeConflict()) return treeConflict; // show newResource icon if (showNewResources) { try { if (svnResource.exists()) { boolean isNewResource = false; if (!svnResource.isManaged()) { isNewResource = true; } if (isNewResource) { return newResource; } } } catch (SVNException e) { if (!e.operationInterrupted()) { SVNUIPlugin.log(e.getStatus()); } return null; } } if (showExternal) { if (status.isFileExternal() || SVNStatusKind.EXTERNAL.equals(status.getTextStatus())) { return external; } } // show dirty icon if(showDirty && isDirty) { if (svnResource.getIResource().getType() == IResource.FOLDER) { if (status.isDeleted()) { return deleted; } } if (status.isAdded()) return added; else return dirty; } // show added icon if (showAdded) { if (status.isTextConflicted()) { return conflicted; } if (status.isPropConflicted()) { return propertyConflicted; } if (status.isTextMerged()) { return merged; } if (status.isAdded()) { return added; } if (status.isLocked()) { return locked; } if (status.isReadOnly()) { return needsLock; } } //show deleted icon (on directories only) //ignore preferences use show this sort of overlay allways if (true) { if (status.isDeleted()) { return deleted; } } // Simplest is that is has remote. if (showHasRemote) { if (status.isSwitched()) { return switched; } else if (status.hasRemote()) { return checkedIn; } } //nothing matched return null; } /* * Perform a blanket refresh of all SVN decorations */ public static void refresh() { SVNUIPlugin.getPlugin().getWorkbench().getDecoratorManager().update(SVNUIPlugin.DECORATOR_ID); } /* * Update the decorators for every resource in project */ public void refresh(IProject project) { final List resources = new ArrayList(); try { project.accept(new IResourceVisitor() { public boolean visit(IResource resource) { resources.add(resource); return true; } }); postLabelEvent(new LabelProviderChangedEvent(this, resources.toArray())); } catch (CoreException e) { SVNProviderPlugin.log(e.getStatus()); } } /** * @see org.tigris.subversion.subclipse.core.IResourceStateChangeListener#resourceSyncInfoChanged(org.eclipse.core.resources.IResource[]) */ public void resourceSyncInfoChanged(IResource[] changedResources) { resourceStateChanged(changedResources); } /** * @see org.tigris.subversion.subclipse.core.IResourceStateChangeListener#resourceModificationStateChanged(org.eclipse.core.resources.IResource[]) */ public void resourceModified(IResource[] changedResources) { resourceStateChanged(changedResources); } /** * @see org.tigris.subversion.subclipse.core.IResourceStateChangeListener#resourceStateChanged(org.eclipse.core.resources.IResource[]) */ public void resourceStateChanged(IResource[] changedResources) { // add depth first so that update thread processes parents first. //System.out.println(">> State Change Event"); Set resourcesToUpdate = new HashSet(); for (int i = 0; i < changedResources.length; i++) { IResource resource = changedResources[i]; if (resource != null) { if (resource.exists()) { if(computeDeepDirtyCheck) { IResource current = resource; while ((current.getType() != IResource.ROOT) && (!resourcesToUpdate.contains(current))) { resourcesToUpdate.add(current); current = current.getParent(); } } else { resourcesToUpdate.add(resource); } } else { // If deleting a resource, force a decorator refresh of the parent folders. // (We can no longer count on .svn folder updates forcing refresh) try { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); if (!svnResource.isIgnored()) { IResource current = resource.getParent(); while (current.getType() != IResource.ROOT) { if (current.exists() && SVNWorkspaceRoot.getSVNResourceFor(current).isManaged()) { resourcesToUpdate.add(current); } current = current.getParent(); } } } catch (SVNException e) { } } } } postLabelEvent(new LabelProviderChangedEvent(this, resourcesToUpdate.toArray())); } /** * @see org.tigris.subversion.subclipse.core.IResourceStateChangeListener#projectConfigured(org.eclipse.core.resources.IProject) */ public void projectConfigured(IProject project) { refresh(project); } /** * @see org.tigris.subversion.subclipse.core.IResourceStateChangeListener#projectDeconfigured(org.eclipse.core.resources.IProject) */ public void projectDeconfigured(IProject project) { refresh(project); } public void initialize() {}; /** * Post the label event to the UI thread * * @param events the events to post */ private void postLabelEvent(final LabelProviderChangedEvent event) { Display.getDefault().asyncExec(new Runnable() { public void run() { fireLabelProviderChanged(event); } }); } /* (non-Javadoc) * @see org.eclipse.jface.util.IPropertyChangeListener#propertyChange(org.eclipse.jface.util.PropertyChangeEvent) */ public void propertyChange(PropertyChangeEvent event) { if (isEventOfInterest(event)) { ensureFontAndColorsCreated(fonts, colors); refresh(); } } private boolean isEventOfInterest(PropertyChangeEvent event) { String prop = event.getProperty(); return prop.equals(TeamUI.GLOBAL_IGNORES_CHANGED) || prop.equals(TeamUI.GLOBAL_FILE_TYPES_CHANGED) || prop.equals(SVNUIPlugin.P_DECORATORS_CHANGED) || prop.equals(SVNDecoratorConfiguration.OUTGOING_CHANGE_BACKGROUND_COLOR) || prop.equals(SVNDecoratorConfiguration.OUTGOING_CHANGE_FOREGROUND_COLOR) || prop.equals(SVNDecoratorConfiguration.OUTGOING_CHANGE_FONT) || prop.equals(SVNDecoratorConfiguration.IGNORED_FOREGROUND_COLOR) || prop.equals(SVNDecoratorConfiguration.IGNORED_BACKGROUND_COLOR) || prop.equals(SVNDecoratorConfiguration.IGNORED_FONT); } /* (non-Javadoc) * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose() */ public void dispose() { super.dispose(); PlatformUI.getWorkbench().getThemeManager().getCurrentTheme().removePropertyChangeListener(this); TeamUI.removePropertyChangeListener(this); SVNUIPlugin.getPlugin().getPreferenceStore().removePropertyChangeListener(propertyListener); SVNProviderPlugin.removeResourceStateChangeListener(this); // SVNProviderPlugin.broadcastDecoratorEnablementChanged(false /* disabled */); } private void setDateFormat(String dateFormatPattern) { if (dateFormatPattern == null || dateFormatPattern.length() == 0) { dateFormat = DateFormat.getInstance(); } else { try { dateFormat = new SimpleDateFormat(dateFormatPattern); } catch (Exception e) { dateFormat = DateFormat.getInstance(); } } } } 000077500000000000000000000000001203611042400351335ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogsAdaptableResourceList.java000066400000000000000000000035531203611042400422250ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.model.IWorkbenchAdapter; /** * This class acts as a resource list that can be used in table widgets. */ public class AdaptableResourceList implements IAdaptable, IWorkbenchAdapter { IResource[] resources; public AdaptableResourceList(IResource[] resources) { this.resources = resources; } /** * @see org.eclipse.core.runtime.IAdaptable#getAdapter(Class) */ public Object getAdapter(Class adapter) { if (adapter == IWorkbenchAdapter.class) return this; return null; } /** * @see org.eclipse.ui.model.IWorkbenchAdapter#getChildren(Object) */ public Object[] getChildren(Object o) { return resources; } /** * @see org.eclipse.ui.model.IWorkbenchAdapter#getImageDescriptor(java.lang.Object) */ public ImageDescriptor getImageDescriptor(Object object) { return null; } /** * @see org.eclipse.ui.model.IWorkbenchAdapter#getLabel(java.lang.Object) */ public String getLabel(Object o) { return o == null ? "" : o.toString();//$NON-NLS-1$ } /** * @see org.eclipse.ui.model.IWorkbenchAdapter#getParent(java.lang.Object) */ public Object getParent(Object o) { return null; } } AddToVersionControlDialog.java000066400000000000000000000211051203611042400430170ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import java.util.Arrays; import java.util.List; import org.eclipse.core.resources.IResource; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.util.DetailsDialog; /** * This dialog allows the user to add a set of resources to version control. * They can either all be added or the user can choose which to add from a * details list. * This dialog is used when user wants to commit some files which are not under revision * control */ public class AddToVersionControlDialog extends DetailsDialog { private static final int WIDTH_HINT = 350; private final static int SELECTION_HEIGHT_HINT = 100; private IResource[] unaddedResources; private Object[] resourcesToAdd; private CheckboxTableViewer listViewer; /** * Constructor for AddToVersionControlDialog. * @param parentShell */ public AddToVersionControlDialog(Shell parentShell, IResource[] unaddedResources) { super(parentShell, Policy.bind("AddToVersionControlDialog.title")); //$NON-NLS-1$ this.unaddedResources = unaddedResources; } /** * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) */ protected void createMainDialogArea(Composite parent) { Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.ADD_TO_VERSION_CONTROL_DIALOG); // add a description label if (unaddedResources.length==1) { createWrappingLabel(composite, Policy.bind("AddToVersionControlDialog.thereIsAnUnaddedResource", new Integer(unaddedResources.length).toString())); //$NON-NLS-1$ } else { createWrappingLabel(composite, Policy.bind("AddToVersionControlDialog.thereAreUnaddedResources", new Integer(unaddedResources.length).toString())); //$NON-NLS-1$ } } /** * @see org.eclipse.team.internal.ui.DetailsDialog#createDropDownDialogArea(org.eclipse.swt.widgets.Composite) */ protected Composite createDropDownDialogArea(Composite parent) { // create a composite with standard margins and spacing Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); composite.setFont(parent.getFont()); addUnaddedResourcesArea(composite); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.ADD_TO_VERSION_CONTROL_DIALOG); return composite; } private void addUnaddedResourcesArea(Composite composite) { // add a description label createWrappingLabel(composite, Policy.bind("ReleaseCommentDialog.unaddedResources")); //$NON-NLS-1$ // add the selectable checkbox list listViewer = CheckboxTableViewer.newCheckList(composite, SWT.BORDER); GridData data = new GridData(GridData.FILL_BOTH); data.heightHint = SELECTION_HEIGHT_HINT; data.widthHint = WIDTH_HINT; listViewer.getTable().setLayoutData(data); // set the contents of the list listViewer.setLabelProvider(new WorkbenchLabelProvider() { protected String decorateText(String input, Object element) { if (element instanceof IResource) return ((IResource)element).getFullPath().toString(); else return input; } }); listViewer.setContentProvider(new WorkbenchContentProvider()); listViewer.setInput(new AdaptableResourceList(unaddedResources)); if (resourcesToAdd == null) { listViewer.setAllChecked(true); } else { listViewer.setCheckedElements(resourcesToAdd); } listViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { resourcesToAdd = listViewer.getCheckedElements(); } }); addSelectionButtons(composite); } /** * Add the selection and deselection buttons to the dialog. * @param composite org.eclipse.swt.widgets.Composite */ private void addSelectionButtons(Composite composite) { Composite buttonComposite = new Composite(composite, SWT.RIGHT); GridLayout layout = new GridLayout(); layout.numColumns = 2; buttonComposite.setLayout(layout); GridData data = new GridData(GridData.HORIZONTAL_ALIGN_END | GridData.GRAB_HORIZONTAL); data.grabExcessHorizontalSpace = true; composite.setData(data); Button selectButton = createButton(buttonComposite, IDialogConstants.SELECT_ALL_ID, Policy.bind("ReleaseCommentDialog.selectAll"), false); //$NON-NLS-1$ SelectionListener listener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { listViewer.setAllChecked(true); resourcesToAdd = null; } }; selectButton.addSelectionListener(listener); Button deselectButton = createButton(buttonComposite, IDialogConstants.DESELECT_ALL_ID, Policy.bind("ReleaseCommentDialog.deselectAll"), false); //$NON-NLS-1$ listener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { listViewer.setAllChecked(false); resourcesToAdd = new Object[0]; } }; deselectButton.addSelectionListener(listener); } /** * @see org.eclipse.team.internal.ui.DetailsDialog#updateEnablements() */ protected void updateEnablements() { } /** * Returns the resourcesToAdd. * @return IResource[] */ public IResource[] getResourcesToAdd() { if (resourcesToAdd == null) { return unaddedResources; } else { List result = Arrays.asList(resourcesToAdd); return (IResource[]) result.toArray(new IResource[result.size()]); } } protected static final int LABEL_WIDTH_HINT = 400; protected Label createWrappingLabel(Composite parent, String text) { Label label = new Label(parent, SWT.LEFT | SWT.WRAP); label.setText(text); GridData data = new GridData(); data.horizontalSpan = 1; data.horizontalAlignment = GridData.FILL; data.horizontalIndent = 0; data.grabExcessHorizontalSpace = true; data.widthHint = LABEL_WIDTH_HINT; label.setLayoutData(data); return label; } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#createButtonsForButtonBar(org.eclipse.swt.widgets.Composite) */ protected void createButtonsForButtonBar(Composite parent) { createButton(parent, IDialogConstants.YES_ID, IDialogConstants.YES_LABEL, true); createButton(parent, IDialogConstants.NO_ID, IDialogConstants.NO_LABEL, true); super.createButtonsForButtonBar(parent); } /* (non-Javadoc) * @see org.eclipse.team.internal.ui.DetailsDialog#includeOkButton() */ protected boolean includeOkButton() { return false; } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int) */ protected void buttonPressed(int id) { // hijack yes and no buttons to set the correct return // codes. if(id == IDialogConstants.YES_ID || id == IDialogConstants.NO_ID) { setReturnCode(id); close(); } else { super.buttonPressed(id); } } } BranchTagPropertyUpdateDialog.java000066400000000000000000000145501203611042400436640ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import org.eclipse.core.resources.IResource; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.history.Alias; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; public class BranchTagPropertyUpdateDialog extends SvnDialog { private IResource resource; private Alias newAlias; private ISVNLocalResource svnResource; private Text revisionText; private Text nameText; private Text pathText; private Button branchButton; private Button okButton; public BranchTagPropertyUpdateDialog(Shell parentShell, IResource resource, Alias newAlias, String id) { super(parentShell, id); this.resource = resource; this.newAlias = newAlias; } protected Control createDialogArea(Composite parent) { getShell().setText(Policy.bind("BranchTagPropertyUpdateDialog.title")); //$NON-NLS-1$ Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite urlGroup = new Composite(composite, SWT.NONE); GridLayout urlLayout = new GridLayout(); urlLayout.numColumns = 2; urlGroup.setLayout(urlLayout); urlGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Label urlLabel = new Label(urlGroup, SWT.NONE); urlLabel.setText(Policy.bind("ConfigureTagsDialog.url")); //$NON-NLS-1$ Text urlText = new Text(urlGroup, SWT.BORDER); GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); urlText.setLayoutData(data); urlText.setEditable(false); svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); try { urlText.setText(svnResource.getStatus().getUrlString()); } catch (SVNException e) {} Label textLabel = createWrappingLabel(composite, Policy.bind("BranchTagPropertyUpdateDialog.text"), 0 /* indent */, 1 /* columns */); //$NON-NLS-1$ textLabel.setText(Policy.bind("BranchTagPropertyUpdateDialog.text")); //$NON-NLS-1$ Group tagGroup = new Group(composite, SWT.NONE); GridLayout tagLayout = new GridLayout(); tagLayout.numColumns = 2; tagGroup.setLayout(tagLayout); tagGroup.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL)); Label revisionLabel = new Label(tagGroup, SWT.NONE); revisionLabel.setText(Policy.bind("ConfigureTagsDialog.revision")); //$NON-NLS-1$ revisionText = new Text(tagGroup, SWT.BORDER); data = new GridData(); data.widthHint = 50; revisionText.setLayoutData(data); revisionText.setText(Integer.toString(newAlias.getRevision())); Label nameLabel = new Label(tagGroup, SWT.NONE); nameLabel.setText(Policy.bind("ConfigureTagsDialog.name")); //$NON-NLS-1$ nameText = new Text(tagGroup, SWT.BORDER); data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); nameText.setLayoutData(data); nameText.setText(newAlias.getName()); Label pathLabel = new Label(tagGroup, SWT.NONE); pathLabel.setText(Policy.bind("ConfigureTagsDialog.path")); //$NON-NLS-1$ pathText = new Text(tagGroup, SWT.BORDER); data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); pathText.setLayoutData(data); pathText.setText(newAlias.getRelativePath()); branchButton = new Button(tagGroup, SWT.CHECK); branchButton.setText(Policy.bind("ConfigureTagsDialog.branch")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; branchButton.setLayoutData(data); branchButton.setSelection(newAlias.isBranch()); ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { okButton.setEnabled(revisionText.getText().trim().length() > 0 && nameText.getText().trim().length() > 0 && pathText.getText().trim().length() > 0); } }; revisionText.addModifyListener(modifyListener); nameText.addModifyListener(modifyListener); pathText.addModifyListener(modifyListener); FocusListener focusListener = new FocusListener() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; revisionText.addFocusListener(focusListener); nameText.addFocusListener(focusListener); pathText.addFocusListener(focusListener); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.BRANCH_TAG_PROPERTY_UPDATE_DIALOG); return composite; } protected void okPressed() { newAlias.setBranch(branchButton.getSelection()); newAlias.setName(nameText.getText().trim()); newAlias.setRelativePath(pathText.getText().trim()); newAlias.setRevision(Integer.parseInt(revisionText.getText().trim())); super.okPressed(); } protected Button createButton( Composite parent, int id, String label, boolean defaultButton) { Button button = super.createButton(parent, id, label, defaultButton); if (id == IDialogConstants.OK_ID) okButton = button; return button; } public Alias getNewAlias() { return newAlias; } } ChooseRootUrlDialog.java000066400000000000000000000044741203611042400416760ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import java.util.ArrayList; import java.util.List; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.dialogs.ListDialog; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.util.ListContentProvider; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * Dialog that ask the user to give the root repository url of the given url */ public class ChooseRootUrlDialog extends ListDialog { private SVNUrl url; /** * * @param parent * @param url : the url from which we want to get the root url */ public ChooseRootUrlDialog(Shell parent, SVNUrl url) { super(parent); this.url = url; List list = new ArrayList(); // we want the user can select "no root url", ie a blank url list.add(""); // we cannot add null, we would have a NullPointerException //$NON-NLS-1$ SVNUrl possibleRoot = this.url; while (possibleRoot != null) { list.add(possibleRoot); possibleRoot = possibleRoot.getParent(); } setTitle(Policy.bind("ChooseRootUrlDialog.rootUrlDialogTitle")); //$NON-NLS-1$ setAddCancelButton(true); setLabelProvider(new LabelProvider()); setMessage(Policy.bind("ChooseRootUrlDialog.chooseRootUrl")); //$NON-NLS-1$ setContentProvider(new ListContentProvider()); setInput(list); } /** * get the chosen root url * @return */ public SVNUrl getRootUrl() { Object result = getResult()[0]; if ("".equals(result)) { //$NON-NLS-1$ return null; } else { return (SVNUrl)result; } } } ChooseUrlDialog.java000066400000000000000000000417331203611042400410310ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Iterator; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.dialogs.TrayDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IColorProvider; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IFontProvider; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.history.Alias; import org.tigris.subversion.subclipse.core.history.AliasManager; import org.tigris.subversion.subclipse.core.history.Branches; import org.tigris.subversion.subclipse.core.history.Tags; import org.tigris.subversion.subclipse.core.repo.ISVNListener; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.RepositoryRootFolder; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.actions.CreateRemoteFolderAction; import org.tigris.subversion.subclipse.ui.actions.DeleteRemoteResourceAction; import org.tigris.subversion.subclipse.ui.repository.RepositoryFilters; import org.tigris.subversion.subclipse.ui.repository.model.AllRootsElement; import org.tigris.subversion.subclipse.ui.repository.model.RemoteContentProvider; public class ChooseUrlDialog extends TrayDialog { private static final int LIST_HEIGHT_HINT = 250; private static final int LIST_WIDTH_HINT = 450; private TreeViewer treeViewer; private Action refreshAction; private Action newFolderAction; private Action deleteFolderAction; private String url; private String name; private String[] urls; private String[] names; private IResource resource; private String message; private boolean multipleSelect = false; private ISVNRepositoryLocation repositoryLocation; private boolean foldersOnly = false; private boolean includeBranchesAndTags = true; private IDialogSettings settings; private RemoteContentProvider contentProvider; private static boolean needsRefresh = true; private boolean saveLocation = true; static { ISVNListener repositoryListener = new ISVNListener() { public void remoteResourceCopied(ISVNRemoteResource source, ISVNRemoteFolder destination) { needsRefresh = true; } public void remoteResourceCreated(ISVNRemoteFolder parent, String resourceName) { needsRefresh = true; } public void remoteResourceDeleted(ISVNRemoteResource resource) { needsRefresh = true; } public void remoteResourceMoved(ISVNRemoteResource resource, ISVNRemoteFolder destinationFolder, String destinationResourceName) { needsRefresh = true; } public void repositoryAdded(ISVNRepositoryLocation root) { needsRefresh = true; } public void repositoryModified(ISVNRepositoryLocation root) { needsRefresh = true; } public void repositoryRemoved(ISVNRepositoryLocation root) { needsRefresh = true; } }; SVNProviderPlugin.getPlugin().getRepositoryResourcesManager().addRepositoryListener(repositoryListener); } public ChooseUrlDialog(Shell parentShell, IResource resource) { super(parentShell); int shellStyle = getShellStyle(); setShellStyle(shellStyle | SWT.RESIZE); this.resource = resource; refreshAction = new Action(Policy.bind("ChooseUrlDialog.refresh"), SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_REFRESH_ENABLED)) { //$NON-NLS-1$ public void run() { refreshViewer(true); } }; newFolderAction = new Action(Policy.bind("NewRemoteFolderWizard.title")) { //$NON-NLS-1$ public void run() { CreateRemoteFolderAction createAction = new CreateRemoteFolderAction(); createAction.selectionChanged(null, treeViewer.getSelection()); createAction.run(null); refreshViewer(true); } }; deleteFolderAction = new Action(Policy.bind("ChooseUrlDialog.delete")) { //$NON-NLS-1$ public void run() { DeleteRemoteResourceAction deleteAction = new DeleteRemoteResourceAction(); deleteAction.selectionChanged(null, treeViewer.getSelection()); deleteAction.run(null); refreshViewer(true); } }; settings = SVNUIPlugin.getPlugin().getDialogSettings(); if (needsRefresh) refreshRepositoriesFolders(); } protected Control createDialogArea(Composite parent) { getShell().setText(Policy.bind("ChooseUrlDialog.title")); //$NON-NLS-1$ Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); if (message != null) { Label messageLabel = new Label(composite, SWT.NONE); messageLabel.setText(message); } if (multipleSelect) treeViewer = new TreeViewer(composite, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI); else treeViewer = new TreeViewer(composite, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL); contentProvider = new RemoteContentProvider(); contentProvider.setIncludeBranchesAndTags(includeBranchesAndTags); contentProvider.setResource(resource); treeViewer.setContentProvider(contentProvider); if( foldersOnly ) treeViewer.addFilter(RepositoryFilters.FOLDERS_ONLY); // treeViewer.setLabelProvider(new WorkbenchLabelProvider()); treeViewer.setLabelProvider(new RemoteLabelProvider()); ISVNRepositoryLocation repository = null; if (repositoryLocation == null) { if (resource == null) treeViewer.setInput(new AllRootsElement()); else { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); try { LocalResourceStatus status = svnResource.getStatus(); if (status != null) { repository = svnResource.getStatus().getRepository(); } } catch (SVNException e1) {} if (repository == null) { repository = svnResource.getRepository(); } if (!repository.getUrl().toString().equals(repository.getRepositoryRoot().toString())) { RepositoryRootFolder rootFolder = new RepositoryRootFolder(repository, repository.getRepositoryRoot(), repository.getRootFolder().getRevision()); contentProvider.setRootFolder(rootFolder); } } } else { repository = repositoryLocation; } if (repository == null) treeViewer.setInput(new AllRootsElement()); else { try { repository.validateConnection(new NullProgressMonitor()); treeViewer.setInput(repository); } catch (SVNException e) { MessageDialog.openError(getShell(), Policy.bind("ChooseUrlDialog.title"), e.getMessage()); saveLocation = false; cancelPressed(); return composite; } } GridData data = new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL); data.heightHint = LIST_HEIGHT_HINT; data.widthHint = LIST_WIDTH_HINT; treeViewer.getControl().setLayoutData(data); // when F5 is pressed, refresh treeViewer.getControl().addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent event) { if (event.keyCode == SWT.F5) { refreshAction.run(); } } }); treeViewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent e) { okPressed(); } }); // Create the popup menu MenuManager menuMgr = new MenuManager(); Tree tree = treeViewer.getTree(); Menu menu = menuMgr.createContextMenu(tree); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { manager.add(newFolderAction); if (!treeViewer.getSelection().isEmpty()) manager.add(deleteFolderAction); manager.add(refreshAction); } }); menuMgr.setRemoveAllWhenShown(true); tree.setMenu(menu); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.CHOOSE_URL_DIALOG); return composite; } @Override public int open() { try { return super.open(); } catch (Exception e) { return CANCEL; } } protected void refreshViewer(boolean refreshRepositoriesFolders) { if (treeViewer == null) return; contentProvider.setUseDeferredContentManager(false); Object[] expandedObjects = treeViewer.getExpandedElements(); if (refreshRepositoriesFolders) { refreshRepositoriesFolders(); } treeViewer.refresh(); treeViewer.setExpandedElements(expandedObjects); contentProvider.setUseDeferredContentManager(true); } private void refreshRepositoriesFolders() { IRunnableWithProgress runnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { SVNProviderPlugin.getPlugin().getRepositories().refreshRepositoriesFolders(monitor); needsRefresh = false; } }; try { new ProgressMonitorDialog(getShell()).run(true, false, runnable); } catch (Exception e) { SVNUIPlugin.openError(getShell(), null, null, e, SVNUIPlugin.LOG_TEAM_EXCEPTIONS); } } protected void okPressed() { saveLocation(); ISelection selection = treeViewer.getSelection(); if (!selection.isEmpty() && (selection instanceof IStructuredSelection)) { IStructuredSelection structured = (IStructuredSelection)selection; Object first = structured.getFirstElement(); if (first instanceof ISVNRemoteResource) { url = ((ISVNRemoteResource)first).getUrl().toString(); name = ((ISVNRemoteResource)first).getName(); } if (first instanceof ISVNRepositoryLocation) url = ((ISVNRepositoryLocation)first).getUrl().toString(); if (first instanceof Alias) url = AliasManager.transformUrl(resource, (Alias)first); ArrayList urlArray = new ArrayList(); ArrayList nameArray = new ArrayList(); Iterator iter = structured.iterator(); while (iter.hasNext()) { Object selectedItem = iter.next(); if (selectedItem instanceof ISVNRemoteResource) { urlArray.add(((ISVNRemoteResource)selectedItem).getUrl().toString()); nameArray.add(((ISVNRemoteResource)selectedItem).getName()); } } urls = new String[urlArray.size()]; urlArray.toArray(urls); names = new String[nameArray.size()]; nameArray.toArray(names); } super.okPressed(); } protected void cancelPressed() { if (saveLocation) { saveLocation(); } super.cancelPressed(); } private void saveLocation() { int x = getShell().getLocation().x; int y = getShell().getLocation().y; settings.put("ChooseUrlDialog.location.x", x); //$NON-NLS-1$ settings.put("ChooseUrlDialog.location.y", y); //$NON-NLS-1$ x = getShell().getSize().x; y = getShell().getSize().y; settings.put("ChooseUrlDialog.size.x", x); //$NON-NLS-1$ settings.put("ChooseUrlDialog.size.y", y); //$NON-NLS-1$ } protected Point getInitialLocation(Point initialSize) { try { int x = settings.getInt("ChooseUrlDialog.location.x"); //$NON-NLS-1$ int y = settings.getInt("ChooseUrlDialog.location.y"); //$NON-NLS-1$ return new Point(x, y); } catch (NumberFormatException e) {} return super.getInitialLocation(initialSize); } protected Point getInitialSize() { try { int x = settings.getInt("ChooseUrlDialog.size.x"); //$NON-NLS-1$ int y = settings.getInt("ChooseUrlDialog.size.y"); //$NON-NLS-1$ return new Point(x, y); } catch (NumberFormatException e) {} return super.getInitialSize(); } public String getUrl() { return url; } public void setRepositoryLocation(ISVNRepositoryLocation repositoryLocation) { this.repositoryLocation = repositoryLocation; } public void setFoldersOnly(boolean foldersOnly) { this.foldersOnly = foldersOnly; } class RemoteLabelProvider extends LabelProvider implements IColorProvider, IFontProvider{ private WorkbenchLabelProvider workbenchLabelProvider = new WorkbenchLabelProvider(); public Color getForeground(Object element) { return workbenchLabelProvider.getForeground(element); } public Color getBackground(Object element) { return workbenchLabelProvider.getBackground(element); } public Font getFont(Object element) { return workbenchLabelProvider.getFont(element); } public Image getImage(Object element) { if (element instanceof Branches) return SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_BRANCHES_CATEGORY).createImage(); if (element instanceof Tags) return SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_VERSIONS_CATEGORY).createImage(); if (element instanceof Alias) { if (((Alias)element).isBranch()) return SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_BRANCH).createImage(); else return SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_PROJECT_VERSION).createImage(); } if (element instanceof RepositoryRootFolder) return SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_REPOSITORY).createImage(); return workbenchLabelProvider.getImage(element); } public String getText(Object element) { if (element instanceof Branches) return Policy.bind("ChooseUrlDialog.branches"); //$NON-NLS-1$ if (element instanceof Tags) return Policy.bind("ChooseUrlDialog.tags"); //$NON-NLS-1$ if (element instanceof Alias) return ((Alias)element).getName(); return workbenchLabelProvider.getText(element); } } public void setIncludeBranchesAndTags(boolean includeBranchesAndTags) { this.includeBranchesAndTags = includeBranchesAndTags; } public String getName() { return name; } public void setMessage(String message) { this.message = message; } public void setMultipleSelect(boolean multipleSelect) { this.multipleSelect = multipleSelect; } public String[] getNames() { return names; } public String[] getUrls() { return urls; } } CommitToTagsWarningDialog.java000066400000000000000000000052231203611042400430200ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogspackage org.tigris.subversion.subclipse.ui.dialogs; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class CommitToTagsWarningDialog extends Dialog { private Button doNotShowWarningAgainButton; public CommitToTagsWarningDialog(Shell parentShell) { super(parentShell); } protected Control createDialogArea(Composite parent) { getShell().setText(Policy.bind("CommitDialog.title")); //$NON-NLS-1$ Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 2; composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); Label label = new Label(composite, SWT.NONE); label.setImage(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WARNING).createImage()); Label warningLabel = new Label(composite, SWT.WRAP); GridData gd = new GridData(); gd.widthHint = 500; warningLabel.setLayoutData(gd); warningLabel.setText(Policy.bind("CommitDialog.tag")); //$NON-NLS-1$ new Label(composite, SWT.NONE); new Label(composite, SWT.NONE); doNotShowWarningAgainButton = new Button(composite, SWT.CHECK); doNotShowWarningAgainButton.setText(Policy.bind("CommitDialog.doNotShowTagWarningAgain")); //$NON-NLS-1$ gd = new GridData(); gd.horizontalSpan = 2; doNotShowWarningAgainButton.setLayoutData(gd); return composite; } protected void okPressed() { if (doNotShowWarningAgainButton.getSelection()) { IPreferenceStore preferenceStore = SVNUIPlugin.getPlugin().getPreferenceStore(); preferenceStore.setValue(ISVNUIConstants.PREF_COMMIT_TO_TAGS_PATH_WITHOUT_WARNING, true); } super.okPressed(); } protected Button createButton(Composite parent, int id, String label, boolean defaultButton) { Button button; if (id == IDialogConstants.OK_ID) { button = super.createButton(parent, id, IDialogConstants.YES_LABEL, defaultButton); } else if (id == IDialogConstants.CANCEL_ID) { button = super.createButton(parent, id, IDialogConstants.NO_LABEL, defaultButton); } else { button = super.createButton(parent, id, label, defaultButton); } return button; } } CompareDialog.java000066400000000000000000000121571203611042400405120ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copied from package org.eclipse.compare.internal.CompareDialog, but features * regarding writing the resource is taken out. * * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import java.lang.reflect.InvocationTargetException; import org.eclipse.compare.CompareEditorInput; import org.eclipse.jface.dialogs.TrayDialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.util.Assert; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class CompareDialog extends TrayDialog { private CompareEditorInput compareEditorInput; private IDialogSettings settings; public CompareDialog(Shell shell, CompareEditorInput input) { super(shell); setShellStyle(getShellStyle() | SWT.RESIZE | SWT.MAX); Assert.isNotNull(input); compareEditorInput= input; settings = SVNUIPlugin.getPlugin().getDialogSettings(); } private boolean compareResultOK(CompareEditorInput input) { final Shell shell= getShell(); try { // run operation in separate thread and make it canceable SVNUIPlugin.getPlugin().getWorkbench().getProgressService().run(true, true, input); String message= input.getMessage(); if (message != null) { MessageDialog.openError(shell, Policy.bind("CompareDialog.compareFailed"), message); //$NON-NLS-1$ return false; } if (input.getCompareResult() == null) { MessageDialog.openInformation(shell, input.getTitle(), Policy.bind("CompareDialog.noDifferences")); //$NON-NLS-2$ //$NON-NLS-1$ return false; } return true; } catch (InterruptedException x) { // cancelled by user } catch (InvocationTargetException x) { MessageDialog.openError(shell, Policy.bind("CompareDialog.compareFailed"), x.getTargetException().getMessage()); //$NON-NLS-1$ } return false; } protected Point getInitialLocation(Point initialSize) { try { int x = settings.getInt("CompareDialog.location.x"); //$NON-NLS-1$ int y = settings.getInt("CompareDialog.location.y"); //$NON-NLS-1$ return new Point(x, y); } catch (NumberFormatException e) {} return super.getInitialLocation(initialSize); } protected Point getInitialSize() { try { int x = settings.getInt("CompareDialog.size.x"); //$NON-NLS-1$ int y = settings.getInt("CompareDialog.size.y"); //$NON-NLS-1$ return new Point(x, y); } catch (NumberFormatException e) {} return new Point(getShell().getSize().x-300, getShell().getSize().y-100); } public int open() { if (compareResultOK(compareEditorInput)) return super.open(); else return IDialogConstants.ABORT_ID; } /* (non-Javadoc) * Method declared on Dialog. */ protected void createButtonsForButtonBar(Composite parent) { createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); //$NON-NLS-1$ } /* (non-Javadoc) * Method declared on Dialog. */ protected Control createDialogArea(Composite parent2) { Composite parent= (Composite) super.createDialogArea(parent2); Control c= compareEditorInput.createContents(parent); c.setLayoutData(new GridData(GridData.FILL_BOTH)); // Assert.isTrue(! compareEditorInput.getCompareConfiguration().isLeftEditable()); // Assert.isTrue(! compareEditorInput.getCompareConfiguration().isRightEditable()); Shell shell= c.getShell(); shell.setText(compareEditorInput.getTitle()); shell.setImage(compareEditorInput.getTitleImage()); PlatformUI.getWorkbench().getHelpSystem().setHelp(parent, IHelpContextIds.COMPARE_DIALOG); applyDialogFont(parent); return parent; } protected void cancelPressed() { saveLocation(); super.cancelPressed(); } protected void okPressed() { saveLocation(); super.okPressed(); } private void saveLocation() { int x = getShell().getLocation().x; int y = getShell().getLocation().y; settings.put("CompareDialog.location.x", x); //$NON-NLS-1$ settings.put("CompareDialog.location.y", y); //$NON-NLS-1$ x = getShell().getSize().x; y = getShell().getSize().y; settings.put("CompareDialog.size.x", x); //$NON-NLS-1$ settings.put("CompareDialog.size.y", y); //$NON-NLS-1$ } } ComparePropertiesDialog.java000066400000000000000000000460631203611042400425720ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogspackage org.tigris.subversion.subclipse.ui.dialogs; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.dialogs.ElementTreeSelectionDialog; import org.eclipse.ui.model.BaseWorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.resources.RemoteFolder; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.compare.IPropertyProvider; import org.tigris.subversion.subclipse.ui.compare.PropertyCompareInput; import org.tigris.subversion.subclipse.ui.compare.PropertyCompareLocalResourceNode; import org.tigris.subversion.subclipse.ui.compare.PropertyCompareRemoteResourceNode; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class ComparePropertiesDialog extends SvnDialog { private IPropertyProvider left; private IPropertyProvider right; private ISVNRepositoryLocation repository; private Button fromWorkingCopyButton; private Text fromWorkingCopyText; private Button fromWorkingCopyBrowseButton; private Button fromRepositoryButton; private Text fromRepositoryText; private Button fromRepositoryBrowseButton; private Button fromHeadButton; private Label fromRevisionLabel; private Text fromRevisionText; private Button fromRevisionBrowseButton; private Button toWorkingCopyButton; private Text toWorkingCopyText; private Button toWorkingCopyBrowseButton; private Button toRepositoryButton; private Text toRepositoryText; private Button toRepositoryBrowseButton; private Button toHeadButton; private Label toRevisionLabel; private Text toRevisionText; private Button toRevisionBrowseButton; private Button recursiveButton; private PropertyCompareInput input; private Button okButton; private IResource fromLocalResource; private IResource toLocalResource; public ComparePropertiesDialog(Shell shell, IPropertyProvider left, IPropertyProvider right) { super(shell, "ComparePropertiesDialog2"); //$NON-NLS-1$ this.left = left; this.right = right; } protected Control createDialogArea(Composite parent) { getShell().setText(Policy.bind("ComparePropertiesDialog.1")); //$NON-NLS-1$ Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); Group fromGroup = new Group(composite, SWT.NULL); fromGroup.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.compareFrom")); //$NON-NLS-1$ GridLayout fromLayout = new GridLayout(); fromLayout.numColumns = 3; fromGroup.setLayout(fromLayout); GridData data = new GridData(SWT.FILL, SWT.FILL, true, false); fromGroup.setLayoutData(data); fromWorkingCopyButton = new Button(fromGroup, SWT.RADIO); fromWorkingCopyButton.setText(Policy.bind("ComparePropertiesDialog.2")); //$NON-NLS-1$ fromWorkingCopyText = new Text(fromGroup, SWT.BORDER | SWT.READ_ONLY); data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); data.widthHint = 600; fromWorkingCopyText.setLayoutData(data); fromWorkingCopyBrowseButton = new Button(fromGroup, SWT.PUSH); fromWorkingCopyBrowseButton.setText(Policy.bind("ComparePropertiesDialog.3")); //$NON-NLS-1$ fromRepositoryButton = new Button(fromGroup, SWT.RADIO); fromRepositoryButton.setText(Policy.bind("ComparePropertiesDialog.4")); //$NON-NLS-1$ fromRepositoryText = new Text(fromGroup, SWT.BORDER); data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); data.widthHint = 600; fromRepositoryText.setLayoutData(data); fromRepositoryBrowseButton = new Button(fromGroup, SWT.PUSH); fromRepositoryBrowseButton.setText(Policy.bind("ComparePropertiesDialog.3")); //$NON-NLS-1$ fromHeadButton = new Button(fromGroup, SWT.CHECK); data = new GridData(); data.horizontalSpan = 3; fromHeadButton.setLayoutData(data); fromHeadButton.setText(Policy.bind("ComparePropertiesDialog.6")); //$NON-NLS-1$ fromHeadButton.setSelection(true); Composite fromRevisionGroup = new Composite(fromGroup, SWT.NONE); GridLayout fromRevisionLayout = new GridLayout(); fromRevisionLayout.numColumns = 3; fromRevisionLayout.marginHeight = 0; fromRevisionLayout.marginWidth = 0; fromRevisionGroup.setLayout(fromRevisionLayout); data = new GridData(); data.horizontalSpan = 3; fromRevisionGroup.setLayoutData(data); fromRevisionLabel = new Label(fromRevisionGroup, SWT.NONE); fromRevisionLabel.setText(Policy.bind("ComparePropertiesDialog.7")); //$NON-NLS-1$ fromRevisionLabel.setEnabled(false); fromRevisionText = new Text(fromRevisionGroup, SWT.BORDER); data = new GridData(); data.widthHint = 40; fromRevisionText.setLayoutData(data); fromRevisionText.setEnabled(false); fromRevisionBrowseButton = new Button(fromRevisionGroup, SWT.PUSH); fromRevisionBrowseButton.setText(Policy.bind("ComparePropertiesDialog.3")); //$NON-NLS-1$ fromRevisionBrowseButton.setEnabled(false); Group toGroup = new Group(composite, SWT.NULL); toGroup.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.compareTo")); //$NON-NLS-1$ GridLayout toLayout = new GridLayout(); toLayout.numColumns = 3; toGroup.setLayout(toLayout); data = new GridData(SWT.FILL, SWT.FILL, true, false); toGroup.setLayoutData(data); toWorkingCopyButton = new Button(toGroup, SWT.RADIO); toWorkingCopyButton.setText(Policy.bind("ComparePropertiesDialog.2")); //$NON-NLS-1$ toWorkingCopyText = new Text(toGroup, SWT.BORDER | SWT.READ_ONLY); data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); data.widthHint = 600; toWorkingCopyText.setLayoutData(data); toWorkingCopyBrowseButton = new Button(toGroup, SWT.PUSH); toWorkingCopyBrowseButton.setText(Policy.bind("ComparePropertiesDialog.3")); //$NON-NLS-1$ toRepositoryButton = new Button(toGroup, SWT.RADIO); toRepositoryButton.setText(Policy.bind("ComparePropertiesDialog.4")); //$NON-NLS-1$ toRepositoryText = new Text(toGroup, SWT.BORDER); data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); data.widthHint = 600; toRepositoryText.setLayoutData(data); toRepositoryBrowseButton = new Button(toGroup, SWT.PUSH); toRepositoryBrowseButton.setText(Policy.bind("ComparePropertiesDialog.3")); //$NON-NLS-1$ toHeadButton = new Button(toGroup, SWT.CHECK); data = new GridData(); data.horizontalSpan = 3; toHeadButton.setLayoutData(data); toHeadButton.setText(Policy.bind("ComparePropertiesDialog.6")); //$NON-NLS-1$ toHeadButton.setSelection(true); Composite toRevisionGroup = new Composite(toGroup, SWT.NONE); GridLayout toRevisionLayout = new GridLayout(); toRevisionLayout.numColumns = 3; toRevisionLayout.marginHeight = 0; toRevisionLayout.marginWidth = 0; toRevisionGroup.setLayout(toRevisionLayout); data = new GridData(); data.horizontalSpan = 3; toRevisionGroup.setLayoutData(data); toRevisionLabel = new Label(toRevisionGroup, SWT.NONE); toRevisionLabel.setText(Policy.bind("ComparePropertiesDialog.7")); //$NON-NLS-1$ toRevisionLabel.setEnabled(false); toRevisionText = new Text(toRevisionGroup, SWT.BORDER); data = new GridData(); data.widthHint = 40; toRevisionText.setLayoutData(data); toRevisionText.setEnabled(false); toRevisionBrowseButton = new Button(toRevisionGroup, SWT.PUSH); toRevisionBrowseButton.setText(Policy.bind("ComparePropertiesDialog.3")); //$NON-NLS-1$ toRevisionBrowseButton.setEnabled(false); recursiveButton = new Button(composite, SWT.CHECK); recursiveButton.setText(Policy.bind("ComparePropertiesDialog.16")); //$NON-NLS-1$ if (left != null) { if (left instanceof PropertyCompareLocalResourceNode) { fromWorkingCopyText.setText(((PropertyCompareLocalResourceNode)left).getResource().getFullPath().toString()); fromWorkingCopyButton.setSelection(true); fromRepositoryText.setEnabled(false); fromRepositoryBrowseButton.setEnabled(false); fromHeadButton.setEnabled(false); fromLocalResource = ((PropertyCompareLocalResourceNode)left).getResource(); } else if (left instanceof PropertyCompareRemoteResourceNode) { fromRepositoryText.setText(((PropertyCompareRemoteResourceNode)left).getRemoteResource().getUrl().toString()); fromRepositoryButton.setSelection(true); fromWorkingCopyText.setEnabled(false); fromWorkingCopyBrowseButton.setEnabled(false); fromHeadButton.setEnabled(true); } } if (right == null) { right = left; } if (right != null) { if (right instanceof PropertyCompareLocalResourceNode) { toWorkingCopyText.setText(((PropertyCompareLocalResourceNode)right).getResource().getFullPath().toString()); toWorkingCopyButton.setSelection(true); toRepositoryText.setEnabled(false); toRepositoryBrowseButton.setEnabled(false); toHeadButton.setEnabled(false); repository = SVNWorkspaceRoot.getSVNResourceFor(((PropertyCompareLocalResourceNode)right).getResource()).getRepository(); toLocalResource = ((PropertyCompareLocalResourceNode)right).getResource(); } else if (right instanceof PropertyCompareRemoteResourceNode) { toRepositoryText.setText(((PropertyCompareRemoteResourceNode)right).getRemoteResource().getUrl().toString()); toRepositoryButton.setSelection(true); toWorkingCopyText.setEnabled(false); toWorkingCopyBrowseButton.setEnabled(false); toHeadButton.setEnabled(true); repository = ((PropertyCompareRemoteResourceNode)right).getRemoteResource().getRepository(); } } ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { okButton.setEnabled(canFinish()); } }; fromWorkingCopyText.addModifyListener(modifyListener); fromRepositoryText.addModifyListener(modifyListener); fromRevisionText.addModifyListener(modifyListener); toWorkingCopyText.addModifyListener(modifyListener); toRepositoryText.addModifyListener(modifyListener); toRevisionText.addModifyListener(modifyListener); SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (e.getSource() == fromWorkingCopyBrowseButton || e.getSource() == toWorkingCopyBrowseButton) { ElementTreeSelectionDialog dialog = new ElementTreeSelectionDialog(getShell(), new WorkbenchLabelProvider(), new BaseWorkbenchContentProvider()); dialog.setTitle(Policy.bind("ComparePropertiesDialog.1")); //$NON-NLS-1$ dialog.setMessage(Policy.bind("ComparePropertiesDialog.18")); //$NON-NLS-1$ dialog.setInput(ResourcesPlugin.getWorkspace().getRoot()); if (dialog.open() != ElementTreeSelectionDialog.CANCEL) { Object result = dialog.getFirstResult(); if (result instanceof IResource) { if (e.getSource() == fromWorkingCopyBrowseButton) { fromWorkingCopyText.setText(((IResource)result).getFullPath().toString()); fromLocalResource = (IResource)result; } else { toWorkingCopyText.setText(((IResource)result).getFullPath().toString()); toLocalResource = (IResource)result; } } } } else if (e.getSource() == fromRepositoryBrowseButton || e.getSource() == toRepositoryBrowseButton) { ChooseUrlDialog dialog = new ChooseUrlDialog(getShell(), null); dialog.setRepositoryLocation(repository); if (dialog.open() != ChooseUrlDialog.CANCEL) { String url = dialog.getUrl(); if (url != null) { if (e.getSource() == fromRepositoryBrowseButton) { fromRepositoryText.setText(url); } else { toRepositoryText.setText(url); } } } } else if (e.getSource() == fromRevisionBrowseButton || e.getSource() == toRevisionBrowseButton) { try { SVNUrl url = null; if (e.getSource() == fromRevisionBrowseButton) { url = new SVNUrl(fromRepositoryText.getText().trim()); } else { url = new SVNUrl(toRepositoryText.getText().trim()); } ISVNRemoteResource remoteResource = repository.getRemoteFile(url); HistoryDialog dialog = new HistoryDialog(getShell(), remoteResource); if (dialog.open() != HistoryDialog.CANCEL) { ILogEntry[] selectedEntries = dialog.getSelectedLogEntries(); if (selectedEntries.length > 0) { if (e.getSource() == fromRevisionBrowseButton) { fromRevisionText.setText(Long.toString(selectedEntries[selectedEntries.length - 1].getRevision().getNumber())); } else { toRevisionText.setText(Long.toString(selectedEntries[selectedEntries.length - 1].getRevision().getNumber())); } } } } catch (Exception exc) { MessageDialog.openError(getShell(), Policy.bind("ComparePropertiesDialog.1"), exc.getMessage()); //$NON-NLS-1$ } } setEnablement(); okButton.setEnabled(canFinish()); } }; fromWorkingCopyButton.addSelectionListener(selectionListener); fromWorkingCopyBrowseButton.addSelectionListener(selectionListener); fromRepositoryButton.addSelectionListener(selectionListener); fromRepositoryBrowseButton.addSelectionListener(selectionListener); fromHeadButton.addSelectionListener(selectionListener); fromRevisionBrowseButton.addSelectionListener(selectionListener); toWorkingCopyButton.addSelectionListener(selectionListener); toWorkingCopyBrowseButton.addSelectionListener(selectionListener); toRepositoryButton.addSelectionListener(selectionListener); toRepositoryBrowseButton.addSelectionListener(selectionListener); toHeadButton.addSelectionListener(selectionListener); toRevisionBrowseButton.addSelectionListener(selectionListener); return composite; } @Override protected void okPressed() { try { if (fromWorkingCopyButton.getSelection()) { left = new PropertyCompareLocalResourceNode(fromLocalResource, recursiveButton.getSelection(), null); } else { SVNRevision revision = null; if (fromHeadButton.getSelection()) { revision = SVNRevision.HEAD; } else { revision = new SVNRevision.Number(Long.parseLong(fromRevisionText.getText())); } RemoteFolder remoteFolder = new RemoteFolder(repository, new SVNUrl(fromRepositoryText.getText().trim()), revision); left = new PropertyCompareRemoteResourceNode(remoteFolder, revision, recursiveButton.getSelection(), null); } if (toWorkingCopyButton.getSelection()) { right = new PropertyCompareLocalResourceNode(toLocalResource, recursiveButton.getSelection(), null); } else { SVNRevision revision = null; if (toHeadButton.getSelection()) { revision = SVNRevision.HEAD; } else { revision = new SVNRevision.Number(Long.parseLong(toRevisionText.getText())); } RemoteFolder remoteFolder = new RemoteFolder(repository, new SVNUrl(toRepositoryText.getText().trim()), revision); right = new PropertyCompareRemoteResourceNode(remoteFolder, revision, recursiveButton.getSelection(), null); } input = new PropertyCompareInput(left, right, recursiveButton.getSelection()); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("ComparePropertiesDialog.1"), e.getMessage()); //$NON-NLS-1$ return; } super.okPressed(); } protected Button createButton(Composite parent, int id, String label, boolean defaultButton) { Button button = super.createButton(parent, id, label, defaultButton); if (id == IDialogConstants.OK_ID) { okButton = button; okButton.setEnabled(left != null); } return button; } public PropertyCompareInput getInput() { return input; } private boolean canFinish() { if (fromWorkingCopyButton.getSelection() && fromWorkingCopyText.getText().trim().length() == 0) { return false; } else if (fromRepositoryButton.getSelection()) { if (fromRepositoryText.getText().trim().length() == 0) { return false; } if (!fromHeadButton.getSelection()) { if (fromRevisionText.getText().trim().length() == 0) { return false; } } } if (toWorkingCopyButton.getSelection() && toWorkingCopyText.getText().trim().length() == 0) { return false; } else if (toRepositoryButton.getSelection()) { if (toRepositoryText.getText().trim().length() == 0) { return false; } if (!toHeadButton.getSelection()) { if (toRevisionText.getText().trim().length() == 0) { return false; } } } return true; } private void setEnablement() { fromWorkingCopyText.setEnabled(fromWorkingCopyButton.getSelection()); fromWorkingCopyBrowseButton.setEnabled(fromWorkingCopyButton.getSelection()); fromRepositoryText.setEnabled(fromRepositoryButton.getSelection()); fromRepositoryBrowseButton.setEnabled(fromRepositoryButton.getSelection()); fromHeadButton.setEnabled(fromRepositoryButton.getSelection()); fromRevisionLabel.setEnabled(fromRepositoryButton.getSelection() && !fromHeadButton.getSelection()); fromRevisionText.setEnabled(fromRepositoryButton.getSelection() && !fromHeadButton.getSelection()); fromRevisionBrowseButton.setEnabled(fromRepositoryButton.getSelection() && !fromHeadButton.getSelection() && fromRepositoryText.getText().trim().length() > 0); toWorkingCopyText.setEnabled(toWorkingCopyButton.getSelection()); toWorkingCopyBrowseButton.setEnabled(toWorkingCopyButton.getSelection()); toRepositoryText.setEnabled(toRepositoryButton.getSelection()); toRepositoryBrowseButton.setEnabled(toRepositoryButton.getSelection()); toHeadButton.setEnabled(toRepositoryButton.getSelection()); toRevisionLabel.setEnabled(toRepositoryButton.getSelection() && !toHeadButton.getSelection()); toRevisionText.setEnabled(toRepositoryButton.getSelection() && !toHeadButton.getSelection()); toRevisionBrowseButton.setEnabled(toRepositoryButton.getSelection() && !toHeadButton.getSelection() && toRepositoryText.getText().trim().length() > 0); } } DateSelectionDialog.java000066400000000000000000000235471203611042400416540ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import java.text.DateFormat; import java.text.ParseException; import java.util.Calendar; import java.util.Date; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Spinner; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.util.DaySelectionCanvas; /** * Dialog for selecting a date. The dialog can be used to select * a day, month and year. The dialog is based on the GregorianCalendar. * Double clicking the day will result in closing the dialog and * storing the selected date. */ public class DateSelectionDialog extends Dialog { private Date date; private Composite dateComp; private DaySelectionCanvas daysComp; private Spinner yearSpinner; private Combo monthCombo; private boolean refreshing; /** * Constructs a new dialog for selecting a date * @param shell shell used for this dialog * @param dateString date to be initially selected in the dialog */ public DateSelectionDialog(Shell parent, String dateString) { super(parent); this.setShellStyle(SWT.CLOSE); this.date = parseDate(dateString); } public Date getDate() { return date; } /* * (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#createContents(org.eclipse.swt.widgets.Composite) */ protected Control createContents(Composite parent) { getShell().setText(Policy.bind("DateSelectionDialog.title")); //$NON-NLS-1$ Composite composite = new Composite(parent, SWT.NONE); composite.setLayout(new GridLayout()); // Upper component for displaying the month and year dateComp = new Composite(composite, SWT.NONE); GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = 2; dateComp.setLayout(gridLayout); dateComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); monthCombo = new Combo(dateComp, SWT.SINGLE | SWT.READ_ONLY); monthCombo.add(Policy.bind("DateSelectionDialog.january")); //$NON-NLS-1$ monthCombo.add(Policy.bind("DateSelectionDialog.february")); //$NON-NLS-1$ monthCombo.add(Policy.bind("DateSelectionDialog.march")); //$NON-NLS-1$ monthCombo.add(Policy.bind("DateSelectionDialog.april")); //$NON-NLS-1$ monthCombo.add(Policy.bind("DateSelectionDialog.may")); //$NON-NLS-1$ monthCombo.add(Policy.bind("DateSelectionDialog.june")); //$NON-NLS-1$ monthCombo.add(Policy.bind("DateSelectionDialog.july")); //$NON-NLS-1$ monthCombo.add(Policy.bind("DateSelectionDialog.august")); //$NON-NLS-1$ monthCombo.add(Policy.bind("DateSelectionDialog.september")); //$NON-NLS-1$ monthCombo.add(Policy.bind("DateSelectionDialog.october")); //$NON-NLS-1$ monthCombo.add(Policy.bind("DateSelectionDialog.november")); //$NON-NLS-1$ monthCombo.add(Policy.bind("DateSelectionDialog.december")); //$NON-NLS-1$ monthCombo.setLayoutData(new GridData(GridData.HORIZONTAL_ALIGN_BEGINNING)); Calendar calendar = DateFormat.getDateTimeInstance().getCalendar(); calendar.setTime(date); yearSpinner = new Spinner(dateComp, SWT.BORDER); yearSpinner.setValues(calendar.get(Calendar.YEAR), calendar.getActualMinimum(Calendar.YEAR), calendar.getActualMaximum(Calendar.YEAR), 0, 1, 1); yearSpinner.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_END)); // Lower component for displaying the day selection daysComp = new DaySelectionCanvas(composite, SWT.BORDER); daysComp.setLayoutData(new GridData(GridData.FILL_BOTH)); String[] header = new String[7]; header[0] = Policy.bind("DateSelectionDialog.monday"); //$NON-NLS-1$ header[1] = Policy.bind("DateSelectionDialog.tuesday"); //$NON-NLS-1$ header[2] = Policy.bind("DateSelectionDialog.wednesday"); //$NON-NLS-1$ header[3] = Policy.bind("DateSelectionDialog.thursday"); //$NON-NLS-1$ header[4] = Policy.bind("DateSelectionDialog.friday"); //$NON-NLS-1$ header[5] = Policy.bind("DateSelectionDialog.saturday"); //$NON-NLS-1$ header[6] = Policy.bind("DateSelectionDialog.sunday"); //$NON-NLS-1$ daysComp.setHeader(header); monthCombo.addModifyListener(new ModifyListener() { /* * (non-Javadoc) * @see org.eclipse.swt.events.ModifyListener#modifyText(org.eclipse.swt.events.ModifyEvent) */ public void modifyText(ModifyEvent e) { if (!refreshing) refreshDays(monthCombo.getSelectionIndex(), yearSpinner.getSelection()); } }); yearSpinner.addSelectionListener(new SelectionAdapter() { /* * (non-Javadoc) * @see org.eclipse.swt.events.SelectionAdapter#widgetDefaultSelected(org.eclipse.swt.events.SelectionEvent) */ public void widgetDefaultSelected(SelectionEvent e) { if (!refreshing) refreshDays(monthCombo.getSelectionIndex(), yearSpinner.getSelection()); } }); yearSpinner.addFocusListener(new FocusAdapter() { /* * (non-Javadoc) * @see org.eclipse.swt.events.FocusAdapter#focusLost(org.eclipse.swt.events.FocusEvent) */ public void focusLost(FocusEvent e) { refreshDays(monthCombo.getSelectionIndex(), yearSpinner.getSelection()); } }); yearSpinner.addMouseListener(new MouseAdapter() { /* * (non-Javadoc) * @see org.eclipse.swt.events.MouseAdapter#mouseDown(org.eclipse.swt.events.MouseEvent) */ public void mouseDown(MouseEvent e) { refreshDays(monthCombo.getSelectionIndex(), yearSpinner.getSelection()); } }); daysComp.addMouseListener(new MouseAdapter() { /* * (non-Javadoc) * @see org.eclipse.swt.events.MouseAdapter#mouseDoubleClick(org.eclipse.swt.events.MouseEvent) */ public void mouseDoubleClick(MouseEvent e) { int day = daysComp.getSelectedDay(); if (day > 0) { Calendar calendar = DateFormat.getDateTimeInstance().getCalendar(); calendar.setTime(date); calendar.set(Calendar.DAY_OF_MONTH, day); calendar.set(Calendar.MONTH, monthCombo.getSelectionIndex()); calendar.set(Calendar.YEAR, yearSpinner.getSelection()); date = calendar.getTime(); close(); } } }); // Display the date refreshDate(); return composite; } /** * Parse the date string to a new Date object. If the date * string is not parsable the current date is returned. * @param date date string to be parsed * @return Date object representing the date string */ private Date parseDate(String date) { Calendar calendar = Calendar.getInstance(); try { calendar.setTime(DateFormat.getDateInstance(DateFormat.SHORT).parse(date)); } catch (ParseException e) { } calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.SECOND, 0); return calendar.getTime(); } /** * Refresh the days displayed in this dialog. The days of the given * month combined with the year will be displayed. * @param month month for which to display the days * @param year year for which to display the days */ private void refreshDays(int month, int year) { Calendar calendar = DateFormat.getDateTimeInstance().getCalendar(); calendar.setTime(date); calendar.set(Calendar.DAY_OF_MONTH, 1); calendar.set(Calendar.MONTH, month); calendar.set(Calendar.YEAR, year); int day = daysComp.getSelectedDay(); if (day > 0) { if (day > calendar.getActualMaximum(Calendar.DAY_OF_MONTH)) { day = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); } calendar.set(Calendar.DAY_OF_MONTH, day); } date = calendar.getTime(); refreshDate(); } /** * Sets the days to be displayed. The last days of the * previous month are included, just like the first days * of the next month. * * The size of a DaySelectionCanvas is assumed to be 6 x 7 (rows x columns). */ private void refreshDate() { refreshing = true; Calendar calendar = DateFormat.getDateTimeInstance().getCalendar(); calendar.setTime(date); int day = calendar.get(Calendar.DAY_OF_MONTH); yearSpinner.setSelection(calendar.get(Calendar.YEAR)); monthCombo.select(calendar.get(Calendar.MONTH)); int maxDays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); calendar.add(Calendar.MONTH, -1); int prevMaxDays = calendar.getActualMaximum(Calendar.DAY_OF_MONTH); calendar.add(Calendar.MONTH, 1); calendar.set(Calendar.DAY_OF_MONTH, 1); int weekDay = calendar.get(Calendar.DAY_OF_WEEK); int convertedWeekDay = (weekDay + 5) % 7; boolean addFirstWeek = false; int remainingDays = (42 - maxDays) - convertedWeekDay; if ((remainingDays - convertedWeekDay) > 7) { addFirstWeek = true; } int[] days = new int[42]; int i=0; int numPrefix = convertedWeekDay; if (addFirstWeek) { numPrefix += 7; } for (; i < numPrefix; i++) { days[i] = prevMaxDays - numPrefix + i + 1; } int numMonth = numPrefix + maxDays; for (; i < numMonth; i++) { days[i] = i - numPrefix + 1; } for (; i < days.length; i++) { days[i] = i - numMonth + 1; } daysComp.setDays(days); daysComp.setSelectedDay(day); refreshing = false; } } DeletePropertyDialog.java000066400000000000000000000037141203611042400420720ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogspackage org.tigris.subversion.subclipse.ui.dialogs; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.tigris.subversion.subclipse.ui.Policy; public class DeletePropertyDialog extends Dialog { private String message; private boolean directory; private Button recurseButton; private boolean recurse; public DeletePropertyDialog(Shell parentShell, String message, boolean directory) { super(parentShell); this.message = message; this.directory = directory; } protected Control createDialogArea(Composite parent) { getShell().setText(Policy.bind("SVNPropertyDeleteAction.title")); //$NON-NLS-1$ Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 2; composite.setLayout(layout); Label questionLabel = new Label(composite, SWT.NONE); questionLabel.setImage(getShell().getDisplay().getSystemImage(SWT.ICON_QUESTION)); Label confirmLabel = new Label(composite, SWT.WRAP); GridData data = new GridData(); data.widthHint = 400; confirmLabel.setText(message); if (directory) { new Label(composite, SWT.NONE); recurseButton = new Button(composite, SWT.CHECK); recurseButton.setText(Policy.bind("SVNPropertyDeleteAction.recurse")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; recurseButton.setLayoutData(data); } return composite; } protected void okPressed() { if (directory) recurse = recurseButton.getSelection(); super.okPressed(); } public boolean isRecurse() { return recurse; } protected Image getImage() { return getShell().getDisplay().getSystemImage(SWT.ICON_QUESTION); } } DialogArea.java000066400000000000000000000147371203611042400400020ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.FontMetrics; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; /** * This class provides facilities to allow common widget groupings to be shared * by mulitple dialogs or wizards. */ public abstract class DialogArea { protected static final int LABEL_WIDTH_HINT = 400; protected Dialog parentDialog; protected FontMetrics fontMetrics; protected IDialogSettings settings; protected List listeners; public DialogArea(Dialog parentDialog, IDialogSettings settings) { this.listeners = new ArrayList(); this.parentDialog = parentDialog; this.settings = settings; } /** * Listener for property change events. The only event of interest is for * property SELECTED_WORKING_SET which contains the selected working set or * null if none is selected. * * @param listener */ public void addPropertyChangeListener(IPropertyChangeListener listener) { if (!listeners.contains(listener)) listeners.add(listener); } /** * Remove the provided listener from the receiver. * * @param listener */ public void removePropertyChangeListener(IPropertyChangeListener listener) { listeners.remove(listener); } protected void firePropertyChangeChange(String property, Object oldValue, Object newValue) { PropertyChangeEvent event = new PropertyChangeEvent(this, property, oldValue, newValue); for (Iterator iter = listeners.iterator(); iter.hasNext();) { IPropertyChangeListener listener = (IPropertyChangeListener) iter.next(); listener.propertyChange(event); } } /** * Code copied from org.eclipse.jface.dialogs.Dialog to obtain * a FontMetrics. * * @param control a control from which to obtain the current font * * @see org.eclipse.jface.dialogs.Dialog */ protected void initializeDialogUnits(Control control) { // Compute and store a font metric GC gc = new GC(control); gc.setFont(control.getFont()); fontMetrics = gc.getFontMetrics(); gc.dispose(); } public abstract Control createArea(Composite parent); /** * Returns the shell. * @return Shell */ protected Shell getShell() { if (parentDialog == null) return Display.getCurrent().getActiveShell(); return parentDialog.getShell(); } protected Button createCheckbox(Composite parent, String label, int span) { Button button = new Button(parent, SWT.CHECK | SWT.LEFT); button.setText(label); button.setFont(parent.getFont()); GridData data = new GridData(); data.horizontalSpan = span; button.setLayoutData(data); return button; } protected Button createButton(Composite parent, String label, int style) { Button button = new Button(parent, SWT.PUSH); button.setText(label); // we need to explicitly set the font to the parent's font for dialogs button.setFont(parent.getFont()); GridData data = new GridData(style); int widthHint = Dialog.convertHorizontalDLUsToPixels(fontMetrics, IDialogConstants.BUTTON_WIDTH); data.widthHint = Math.max(widthHint, button.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); button.setLayoutData(data); return button; } protected Button createRadioButton(Composite parent, String label, int span) { Button button = new Button(parent, SWT.RADIO); button.setText(label); GridData data = new GridData(); data.horizontalSpan = span; button.setLayoutData(data); return button; } protected Label createWrappingLabel(Composite parent, String text, int horizontalSpan) { Label label = new Label(parent, SWT.LEFT | SWT.WRAP); label.setText(text); label.setFont(parent.getFont()); GridData data = new GridData(); data.horizontalSpan = horizontalSpan; data.horizontalAlignment = GridData.FILL; data.grabExcessHorizontalSpace = true; data.widthHint = LABEL_WIDTH_HINT; label.setLayoutData(data); return label; } /** * Creates composite control and sets the default layout data. * * @param parent the parent of the new composite * @param numColumns the number of columns for the new composite * @return the newly-created coposite */ protected Composite createComposite(Composite parent, int numColumns) { Composite composite = new Composite(parent, SWT.NULL); composite.setFont(parent.getFont()); // GridLayout GridLayout layout = new GridLayout(); layout.numColumns = numColumns; composite.setLayout(layout); // GridData GridData data = new GridData(); data.verticalAlignment = GridData.FILL; data.horizontalAlignment = GridData.FILL; composite.setLayoutData(data); return composite; } /** * Creates composite control and sets the default layout data. * * @param parent the parent of the new composite * @param numColumns the number of columns for the new composite * @return the newly-created coposite */ protected Composite createGrabbingComposite(Composite parent, int numColumns) { Composite composite = new Composite(parent, SWT.NULL); composite.setFont(parent.getFont()); // GridLayout GridLayout layout = new GridLayout(); layout.numColumns = numColumns; composite.setLayout(layout); // GridData GridData data = new GridData(); data.verticalAlignment = GridData.FILL; data.horizontalAlignment = GridData.FILL; data.grabExcessHorizontalSpace = true; data.grabExcessVerticalSpace = true; composite.setLayoutData(data); return composite; } } DifferencesDialog.java000066400000000000000000000565141203611042400413460ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogspackage org.tigris.subversion.subclipse.ui.dialogs; import java.io.File; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNResource; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.resources.RemoteFile; import org.tigris.subversion.subclipse.core.resources.RemoteFolder; import org.tigris.subversion.subclipse.core.resources.RemoteResource; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.actions.CompareRemoteResourcesAction; import org.tigris.subversion.subclipse.ui.operations.ShowDifferencesAsUnifiedDiffOperation; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class DifferencesDialog extends SvnDialog { private ISVNResource[] remoteResources; private SVNRevision[] pegRevisions; private String title; private IWorkbenchPart targetPart; private ISVNResource fromResource; private ISVNResource toResource; private Button compareButton; private Button diffButton; private Text fileText; private Button browseButton; private Text fromUrlText; private Button fromHeadButton; private Text fromRevisionText; private Button fromLogButton; private Text toUrlText; private Button toHeadButton; private Text toRevisionText; private Button toLogButton; private Button okButton; private boolean success; private String fromRevision; private String toRevision; private boolean usePegRevision; private SVNUrl fromUrl; private SVNUrl toUrl; public DifferencesDialog(Shell parentShell, String title, ISVNResource[] remoteResources, IWorkbenchPart targetPart) { this(parentShell, title, remoteResources, new SVNRevision[] { SVNRevision.HEAD, SVNRevision.HEAD }, targetPart); } public DifferencesDialog(Shell parentShell, String title, ISVNResource[] remoteResources, SVNRevision[] pegRevisions, IWorkbenchPart targetPart) { super(parentShell, "DifferencesDialog"); //$NON-NLS-1$ this.title = title; this.remoteResources = remoteResources; this.pegRevisions = pegRevisions; this.targetPart = targetPart; fromResource = this.remoteResources[0]; if (this.remoteResources.length == 1 || this.remoteResources[1] == null) { this.remoteResources = new ISVNResource[2]; this.remoteResources[0] = fromResource; this.remoteResources[1] = fromResource; } toResource = this.remoteResources[1]; } protected Control createDialogArea(Composite parent) { if (title == null) getShell().setText(Policy.bind("DifferencesDialog.compare")); //$NON-NLS-1$ else getShell().setText(title); Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); Group fromGroup = new Group(composite, SWT.NULL); fromGroup.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.compareFrom")); //$NON-NLS-1$ fromGroup.setLayout(new GridLayout(3, false)); fromGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); Label fromUrlLabel = new Label(fromGroup, SWT.NONE); fromUrlLabel.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.url")); //$NON-NLS-1$ fromUrlText = new Text(fromGroup, SWT.BORDER); fromUrlText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); if (fromUrl == null) { fromUrlText.setText(remoteResources[0].getUrl().toString()); } else { fromUrlText.setText(fromUrl.toString()); } Button bb = new Button(fromGroup, SWT.PUSH); bb.setText(Policy.bind("SwitchDialog.browse")); //$NON-NLS-1$ bb.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { ChooseUrlDialog dialog = new ChooseUrlDialog(getShell(), fromResource.getResource()); if ((dialog.open() == ChooseUrlDialog.OK) && (dialog.getUrl() != null)) { fromUrlText.setText(dialog.getUrl()); } } }); Composite fromRevisionGroup = new Composite(fromGroup, SWT.NULL); GridLayout fromRevisionLayout = new GridLayout(); fromRevisionLayout.numColumns = 3; fromRevisionLayout.marginWidth = 0; fromRevisionLayout.marginHeight = 0; fromRevisionGroup.setLayout(fromRevisionLayout); fromRevisionGroup.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1)); fromHeadButton = new Button(fromRevisionGroup, SWT.CHECK); fromHeadButton.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.head")); //$NON-NLS-1$ GridData data = new GridData(); data.horizontalSpan = 3; fromHeadButton.setLayoutData(data); Label fromRevisionLabel = new Label(fromRevisionGroup, SWT.NONE); fromRevisionLabel.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.revision")); //$NON-NLS-1$ fromHeadButton.setSelection(true); fromRevisionText = new Text(fromRevisionGroup, SWT.BORDER); fromRevisionText.setLayoutData(new GridData(40, SWT.DEFAULT)); fromRevisionText.setEnabled(false); fromLogButton = new Button(fromRevisionGroup, SWT.PUSH); fromLogButton.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.showLog")); //$NON-NLS-1$ fromLogButton.setEnabled(false); fromLogButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { showLog(e.getSource()); } }); Group toGroup = new Group(composite, SWT.NULL); toGroup.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.compareTo")); //$NON-NLS-1$ toGroup.setLayout(new GridLayout(3, false)); toGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); Label toUrlLabel = new Label(toGroup, SWT.NONE); toUrlLabel.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.url")); //$NON-NLS-1$ toUrlText = new Text(toGroup, SWT.BORDER); toUrlText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); if (toUrl == null) { if (remoteResources.length < 2 || remoteResources[1] == null) toUrlText.setText(remoteResources[0].getUrl().toString()); else toUrlText.setText(remoteResources[1].getUrl().toString()); } else { toUrlText.setText(toUrl.toString()); } bb = new Button(toGroup, SWT.PUSH); bb.setText(Policy.bind("SwitchDialog.browse")); //$NON-NLS-1$ bb.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { IResource resouce = null; if (remoteResources.length < 2 || remoteResources[1] == null) resouce = remoteResources[0].getResource(); else resouce = remoteResources[1].getResource(); ChooseUrlDialog dialog = new ChooseUrlDialog(getShell(), resouce); if ((dialog.open() == ChooseUrlDialog.OK) && (dialog.getUrl() != null)) { toUrlText.setText(dialog.getUrl()); } } }); Composite toRevisionGroup = new Composite(toGroup, SWT.NULL); GridLayout toRevisionLayout = new GridLayout(); toRevisionLayout.numColumns = 3; toRevisionLayout.marginWidth = 0; toRevisionLayout.marginHeight = 0; toRevisionGroup.setLayout(toRevisionLayout); toRevisionGroup.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1)); toHeadButton = new Button(toRevisionGroup, SWT.CHECK); toHeadButton.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.toHead")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 3; toHeadButton.setLayoutData(data); Label toRevisionLabel = new Label(toRevisionGroup, SWT.NONE); toRevisionLabel.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.toRevision")); //$NON-NLS-1$ toHeadButton.setSelection(true); toRevisionText = new Text(toRevisionGroup, SWT.BORDER); toRevisionText.setLayoutData(new GridData(40, SWT.DEFAULT)); toRevisionText.setEnabled(false); toLogButton = new Button(toRevisionGroup, SWT.PUSH); toLogButton.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.showToLog")); //$NON-NLS-1$ toLogButton.setEnabled(false); toLogButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { showLog(e.getSource()); } }); if (fromRevision != null) { fromRevisionText.setText(fromRevision); fromRevisionText.setEnabled(true); fromLogButton.setEnabled(true); fromHeadButton.setSelection(false); } if (toRevision == null) { if (fromResource == toResource) { if (fromRevision == null) { ISVNRemoteResource resource = (ISVNRemoteResource)fromResource; String fromRev = resource.getLastChangedRevision().toString(); int from = Integer.parseInt(fromRev); from--; toRevision = Integer.toString(from); } else { int from = Integer.parseInt(fromRevision); from--; toRevision = Integer.toString(from); } } else { ISVNRemoteResource resource = (ISVNRemoteResource)toResource; toRevision = resource.getLastChangedRevision().toString(); } } if (toRevision != null) { toRevisionText.setText(toRevision); toRevisionText.setEnabled(true); toLogButton.setEnabled(true); toHeadButton.setSelection(false); } Group fileGroup = new Group(composite, SWT.NULL); fileGroup.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.compareType")); //$NON-NLS-1$ fileGroup.setLayout(new GridLayout(3, false)); fileGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); compareButton = new Button(fileGroup, SWT.RADIO); compareButton.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.graphical")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 3; compareButton.setLayoutData(data); diffButton = new Button(fileGroup, SWT.RADIO); diffButton.setText(Policy.bind("DifferencesDialog.diff")); //$NON-NLS-1$ compareButton.setSelection(true); fileText = new Text(fileGroup, SWT.BORDER); data = new GridData(SWT.FILL, SWT.CENTER, true, false); data.widthHint = 450; fileText.setLayoutData(data); fileText.setEnabled(false); browseButton = new Button(fileGroup, SWT.PUSH); browseButton.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.browse")); //$NON-NLS-1$ browseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { FileDialog dialog = new FileDialog(getShell(), SWT.SAVE); dialog.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.fileDialogText")); //$NON-NLS-1$ dialog.setFileName("revision.diff"); //$NON-NLS-1$ String outFile = dialog.open(); if (outFile != null) fileText.setText(outFile); } }); ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { setOkButtonStatus(); } }; SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { fromRevisionText.setEnabled(!fromHeadButton.getSelection()); fromLogButton.setEnabled(!fromHeadButton.getSelection()); toRevisionText.setEnabled(!toHeadButton.getSelection()); toLogButton.setEnabled(!toHeadButton.getSelection()); setOkButtonStatus(); if (e.getSource() == fromHeadButton && !fromHeadButton.getSelection()) { fromRevisionText.selectAll(); fromRevisionText.setFocus(); } if (e.getSource() == toHeadButton && !toHeadButton.getSelection()) { toRevisionText.selectAll(); toRevisionText.setFocus(); } } }; SelectionListener compareTypeListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (diffButton.getSelection()) { fileText.setEnabled(true); browseButton.setEnabled(true); fileText.selectAll(); fileText.setFocus(); } else { fileText.setEnabled(false); browseButton.setEnabled(false); } setOkButtonStatus(); } }; fileText.addModifyListener(modifyListener); fromRevisionText.addModifyListener(modifyListener); toRevisionText.addModifyListener(modifyListener); fromHeadButton.addSelectionListener(selectionListener); toHeadButton.addSelectionListener(selectionListener); compareButton.addSelectionListener(compareTypeListener); diffButton.addSelectionListener(compareTypeListener); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; fromRevisionText.addFocusListener(focusListener); toRevisionText.addFocusListener(focusListener); fileText.addFocusListener(focusListener); // Set F1 Help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.SHOW_UNIFIED_DIFF_DIALOG); return composite; } protected void createButtonsForButtonBar(Composite parent) { Button toggleFromToButton = createButton(parent, 2, Policy.bind("ShowDifferencesAsUnifiedDiffDialog.swap"), false); //$NON-NLS-1$ toggleFromToButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { String fromUrl = fromUrlText.getText().trim(); boolean fromHeadRevision = fromHeadButton.getSelection(); String fromRevision = fromRevisionText.getText().trim(); String toUrl = toUrlText.getText().trim(); boolean toHeadRevision = toHeadButton.getSelection(); String toRevision = toRevisionText.getText().trim(); fromUrlText.setText(toUrl); toUrlText.setText(fromUrl); if (toHeadRevision) { fromHeadButton.setSelection(true); } else { fromHeadButton.setSelection(false); } if (fromHeadRevision) { toHeadButton.setSelection(true); } else { toHeadButton.setSelection(false); } fromRevisionText.setText(toRevision); toRevisionText.setText(fromRevision); if (fromResource == remoteResources[0]) fromResource = remoteResources[1]; else fromResource = remoteResources[0]; fromRevisionText.setEnabled(!fromHeadButton.getSelection()); toRevisionText.setEnabled(!toHeadButton.getSelection()); setOkButtonStatus(); } }); super.createButtonsForButtonBar(parent); } protected Button createButton(Composite parent, int id, String label, boolean defaultButton) { Button button = super.createButton(parent, id, label, defaultButton); if (id == IDialogConstants.OK_ID) { okButton = button; } return button; } protected void okPressed() { success = true; if (diffButton.getSelection()) diff(); if (compareButton.getSelection()) compare(); if (!success) return; super.okPressed(); } private void diff() { final File file = new File(fileText.getText().trim()); if (file.exists()) { if (!MessageDialog.openQuestion(getShell(), Policy.bind("HistoryView.showDifferences"), Policy.bind("HistoryView.overwriteOutfile", file.getName()))) return; } BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { try { SVNUrl fromUrl = null; SVNUrl toUrl = null; SVNRevision fromRevision; SVNRevision toRevision; if (fromHeadButton.getSelection()) fromRevision = SVNRevision.HEAD; else { int fromRevisionInt = Integer.parseInt(fromRevisionText.getText().trim()); long fromRevisionLong = fromRevisionInt; fromRevision = new SVNRevision.Number(fromRevisionLong); } if (toHeadButton.getSelection()) toRevision = SVNRevision.HEAD; else { int toRevisionInt = Integer.parseInt(toRevisionText.getText().trim()); long toRevisionLong = toRevisionInt; toRevision = new SVNRevision.Number(toRevisionLong); } fromUrl = new SVNUrl(fromUrlText.getText().trim()); toUrl = new SVNUrl(toUrlText.getText().trim()); ShowDifferencesAsUnifiedDiffOperation operation = new ShowDifferencesAsUnifiedDiffOperation(targetPart, fromUrl, fromRevision, toUrl, toRevision, file); operation.setLocalResource(remoteResources[0]); operation.run(); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("HistoryView.showDifferences"), e.getMessage()); success = false; } } }); } private void compare() { if (fromResource instanceof ISVNRemoteResource && toResource != null && toResource instanceof ISVNRemoteResource) { SVNUrl fromUrl = null; SVNUrl toUrl = null; SVNRevision fromRevision; SVNRevision toRevision; if (fromHeadButton.getSelection()) fromRevision = SVNRevision.HEAD; else { int fromRevisionInt = Integer.parseInt(fromRevisionText.getText().trim()); long fromRevisionLong = fromRevisionInt; fromRevision = new SVNRevision.Number(fromRevisionLong); } if (toHeadButton.getSelection()) toRevision = SVNRevision.HEAD; else { int toRevisionInt = Integer.parseInt(toRevisionText.getText().trim()); long toRevisionLong = toRevisionInt; toRevision = new SVNRevision.Number(toRevisionLong); } try { fromUrl = new SVNUrl(fromUrlText.getText().trim()); toUrl = new SVNUrl(toUrlText.getText().trim()); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("DifferencesDialog.compare"), e.getMessage()); success = false; return; } ISVNRemoteResource resource1 = null; SVNRevision.Number lastChangedRevision1 = null; ISVNRemoteResource resource2 = null; SVNRevision.Number lastChangedRevision2 = null; if (fromRevision instanceof SVNRevision.Number) { lastChangedRevision1 = (SVNRevision.Number)fromRevision; } else { lastChangedRevision1 = ((ISVNRemoteResource)remoteResources[0]).getLastChangedRevision(); } if (fromResource.isFolder()) resource1 = new RemoteFolder(null, fromResource.getRepository(), fromUrl, fromRevision, lastChangedRevision1, null, null); else resource1 = new RemoteFile(null, fromResource.getRepository(), fromUrl, fromRevision, lastChangedRevision1, null, null); if (fromRevision instanceof SVNRevision.Number) { if (usePegRevision && resource1 instanceof RemoteResource) { ((RemoteResource)resource1).setPegRevision(fromRevision); } } if (toRevision instanceof SVNRevision.Number) { lastChangedRevision2 = (SVNRevision.Number)toRevision; } else { lastChangedRevision2 = ((ISVNRemoteResource)remoteResources[1]).getLastChangedRevision(); } if (toResource.isFolder()) resource2 = new RemoteFolder(null, toResource.getRepository(), toUrl, toRevision, lastChangedRevision2, null, null); else resource2 = new RemoteFile(null, toResource.getRepository(), toUrl, toRevision, lastChangedRevision2, null, null); if (toRevision instanceof SVNRevision.Number) { if (usePegRevision && resource2 instanceof RemoteResource) { ((RemoteResource)resource2).setPegRevision(toRevision); } } ISVNRemoteResource[] remotes = { resource1, resource2 }; CompareRemoteResourcesAction compareAction = new CompareRemoteResourcesAction(); compareAction.setRemoteResources(remotes); compareAction.setPegRevisions(pegRevisions); compareAction.setLocalResources(remoteResources); try { compareAction.execute(null); } catch (InvocationTargetException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } catch (InterruptedException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } } private void setOkButtonStatus() { boolean canFinish = true; if (diffButton.getSelection() && fileText.getText().trim().length() == 0) canFinish = false; if (!fromHeadButton.getSelection() && fromRevisionText.getText().trim().length() == 0) canFinish = false; if (!toHeadButton.getSelection() && toRevisionText.getText().trim().length() == 0) canFinish = false; okButton.setEnabled(canFinish); } private void showLog(Object sourceButton) { // TODO here calculate the real from and to resources from the urls in the textfields ??? HistoryDialog dialog = null; if (sourceButton == fromLogButton) { if (fromResource instanceof ISVNRemoteResource) { if (fromResource == remoteResources[0]) dialog = new HistoryDialog(getShell(), (ISVNRemoteResource)remoteResources[0]); else dialog = new HistoryDialog(getShell(), (ISVNRemoteResource)remoteResources[1]); } else { if (fromResource == remoteResources[0]) dialog = new HistoryDialog(getShell(), ((ISVNResource)remoteResources[0]).getResource()); else dialog = new HistoryDialog(getShell(), ((ISVNResource)remoteResources[1]).getResource()); } if (dialog.open() == HistoryDialog.CANCEL) return; ILogEntry[] selectedEntries = dialog.getSelectedLogEntries(); if (selectedEntries.length == 0) return; fromRevisionText.setText(Long.toString(selectedEntries[selectedEntries.length - 1].getRevision().getNumber())); } else { if (fromResource instanceof ISVNRemoteResource) { if (fromResource == remoteResources[0]) dialog = new HistoryDialog(getShell(), (ISVNRemoteResource)remoteResources[1]); else dialog = new HistoryDialog(getShell(), (ISVNRemoteResource)remoteResources[0]); } else { if (fromResource == remoteResources[0]) dialog = new HistoryDialog(getShell(), ((ISVNResource)remoteResources[1]).getResource()); else dialog = new HistoryDialog(getShell(), ((ISVNRemoteResource)remoteResources[0]).getResource()); } if (dialog.open() == HistoryDialog.CANCEL) return; ILogEntry[] selectedEntries = dialog.getSelectedLogEntries(); if (selectedEntries.length == 0) return; toRevisionText.setText(Long.toString(selectedEntries[selectedEntries.length - 1].getRevision().getNumber())); } setOkButtonStatus(); } public void setFromRevision(String fromRevision) { this.fromRevision = fromRevision; } public void setToRevision(String toRevision) { this.toRevision = toRevision; } public void setUsePegRevision(boolean usePegRevision) { this.usePegRevision = usePegRevision; } /** * @param fromUrl The fromUrl to set. */ public void setFromUrl(SVNUrl fromUrl) { this.fromUrl = fromUrl; } /** * @param toUrl The toUrl to set. */ public void setToUrl(SVNUrl toUrl) { this.toUrl = toUrl; } } ExportRemoteFolderDialog.java000066400000000000000000000213271203611042400427140ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import java.io.File; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.operations.ExportRemoteFolderOperation; import org.tigris.subversion.svnclientadapter.SVNRevision; public class ExportRemoteFolderDialog extends SvnDialog { private ISVNRemoteResource remoteResource; private IWorkbenchPart targetPart; private Text directoryText; private Text revisionText; private Button logButton; private Button headButton; public ExportRemoteFolderDialog(Shell parentShell, ISVNRemoteResource remoteResource, IWorkbenchPart targetPart) { super(parentShell, "ExportRemoteFolderDialog"); //$NON-NLS-1$ this.remoteResource = remoteResource; this.targetPart = targetPart; } protected Control createDialogArea(Composite parent) { getShell().setText(Policy.bind("ExportRemoteFolderAction.directoryDialogText")); //$NON-NLS-1$ Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 1; composite.setLayout(layout); GridData data = new GridData(GridData.FILL_BOTH); composite.setLayoutData(data); Composite repositoryGroup = new Composite(composite, SWT.NULL); GridLayout repositoryLayout = new GridLayout(); repositoryLayout.numColumns = 2; repositoryGroup.setLayout(repositoryLayout); data = new GridData(GridData.FILL_BOTH); repositoryGroup.setLayoutData(data); Label urlLabel = new Label(repositoryGroup, SWT.NONE); urlLabel.setText(Policy.bind("ExportRemoteFolderDialog.url")); data = new GridData(); data.horizontalSpan = 2; urlLabel.setLayoutData(data); Text urlText = new Text(repositoryGroup, SWT.BORDER); data = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1); urlText.setLayoutData(data); urlText.setEditable(false); urlText.setText(remoteResource.getUrl().toString()); Label directoryLabel = new Label(repositoryGroup, SWT.NONE); directoryLabel.setText(Policy.bind("ExportRemoteFolderDialog.directory")); data = new GridData(); data.horizontalSpan = 2; directoryLabel.setLayoutData(data); directoryText = new Text(repositoryGroup, SWT.BORDER); data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); directoryText.setLayoutData(data); directoryText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setOkButtonStatus(); } }); Button directoryBrowseButton = new Button(repositoryGroup, SWT.PUSH); directoryBrowseButton.setText(Policy.bind("ExportRemoteFolderDialog.browse")); directoryBrowseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.SAVE); dialog.setText(Policy.bind("ExportRemoteFolderAction.directoryDialogText")); String directory = dialog.open(); if (directory != null) { directoryText.setText(directory); setOkButtonStatus(); } } }); Composite revisionGroup = new Composite(repositoryGroup, SWT.NULL); GridLayout revisionLayout = new GridLayout(); revisionLayout.numColumns = 3; revisionLayout.marginWidth = 0; revisionLayout.marginHeight = 0; revisionGroup.setLayout(revisionLayout); data = new GridData(GridData.FILL_BOTH); data.horizontalSpan = 2; revisionGroup.setLayoutData(data); headButton = new Button(revisionGroup, SWT.CHECK); headButton.setText(Policy.bind("ExportRemoteFolderDialog.head")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 3; headButton.setLayoutData(data); Label revisionLabel = new Label(revisionGroup, SWT.NONE); revisionLabel.setText(Policy.bind("ExportRemoteFolderDialog.revision")); //$NON-NLS-1$ revisionText = new Text(revisionGroup, SWT.BORDER); data = new GridData(); data.widthHint = 40; revisionText.setLayoutData(data); revisionText.setEnabled(false); logButton = new Button(revisionGroup, SWT.PUSH); logButton.setText(Policy.bind("MergeDialog.showLog")); //$NON-NLS-1$ logButton.setEnabled(false); logButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { showLog(); } }); if(SVNRevision.HEAD.equals(remoteResource.getRevision())) { headButton.setSelection(true); } else { revisionText.setText(remoteResource.getRevision().toString()); revisionText.setEnabled(true); logButton.setEnabled(true); } revisionText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setOkButtonStatus(); } }); SelectionListener listener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { revisionText.setEnabled(!headButton.getSelection()); logButton.setEnabled(!headButton.getSelection()); setOkButtonStatus(); if (!headButton.getSelection()) { revisionText.selectAll(); revisionText.setFocus(); } } }; headButton.addSelectionListener(listener); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.EXPORT_REMOTE_FOLDER_DIALOG); directoryText.setFocus(); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; revisionText.addFocusListener(focusListener); directoryText.addFocusListener(focusListener); return composite; } private void setOkButtonStatus() { getButton(IDialogConstants.OK_ID).setEnabled((directoryText.getText().trim().length() > 0) && (headButton.getSelection() || (revisionText.getText().trim().length() > 0))); } protected void showLog() { HistoryDialog dialog = new HistoryDialog(getShell(), remoteResource); if (dialog.open() == HistoryDialog.CANCEL) return; ILogEntry[] selectedEntries = dialog.getSelectedLogEntries(); if (selectedEntries.length == 0) return; revisionText.setText(Long.toString(selectedEntries[selectedEntries.length - 1].getRevision().getNumber())); setOkButtonStatus(); } protected void okPressed() { boolean success = true; SVNRevision revision = null; if (headButton.getSelection()) revision = SVNRevision.HEAD; else { int revisionNumber = Integer.parseInt(revisionText.getText().trim()); long revisionLong = revisionNumber; revision = new SVNRevision.Number(revisionLong); } File directory = new File(directoryText.getText().trim() + File.separator + remoteResource.getName()); try { new ExportRemoteFolderOperation(targetPart, remoteResource, directory, revision).run(); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("ExportRemoteFolderAction.directoryDialogText"), e.getMessage()); //$NON-NLS-1$ success = false; } if (!success) return; super.okPressed(); } } GenerateChangeLogDialog.java000066400000000000000000000267101203611042400424260ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogspackage org.tigris.subversion.subclipse.ui.dialogs; import java.io.BufferedWriter; import java.io.File; import java.io.FileWriter; import java.util.List; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.tigris.subversion.subclipse.core.history.LogEntry; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class GenerateChangeLogDialog extends SvnDialog { private List logEntries; private Button svnLogButton; private Button svnLogAndPathsButton; private Button gnuButton; private Button clipboardButton; private Button fileButton; private Text fileText; private Button browseButton; private Text previewText; private Button okButton; private IDialogSettings settings; private int lastFormat; private int lastOutput; private String changeLogPreview; private Exception exception; public final static int CLIPBOARD = 0; public final static int FILESYSTEM = 1; private final static String LAST_OUTPUT = "GenerateChangeLogDialog.lastOutput"; //$NON-NLS-1$ public final static int SVN_LOG = 0; public final static int SVN_LOG_WITH_PATHS = 1; public final static int GNU = 2; private final static String LAST_FORMAT = "GenerateChangeLogDialog.lastFormat"; //$NON-NLS-1$ public GenerateChangeLogDialog(Shell shell, List logEntries) { super(shell, "GenerateChangeLogDialog"); //$NON-NLS-1$ this.logEntries = logEntries; settings = SVNUIPlugin.getPlugin().getDialogSettings(); try { lastFormat = settings.getInt(LAST_FORMAT); } catch (Exception e) {} try { lastOutput = settings.getInt(LAST_OUTPUT); } catch (Exception e) {} } protected Control createDialogArea(Composite parent) { getShell().setText(Policy.bind("GenerateChangeLogDialog.title")); //$NON-NLS-1$ Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); Group formatGroup = new Group(composite, SWT.NULL); formatGroup.setText(Policy.bind("GenerateChangeLogDialog.outputFormat")); //$NON-NLS-1$ GridLayout formatLayout = new GridLayout(); formatLayout.numColumns = 1; formatGroup.setLayout(formatLayout); GridData data = new GridData(GridData.FILL_HORIZONTAL); formatGroup.setLayoutData(data); svnLogButton = new Button(formatGroup, SWT.RADIO); svnLogButton.setText(Policy.bind("GenerateChangeLogDialog.svnLog")); //$NON-NLS-1$ svnLogAndPathsButton = new Button(formatGroup, SWT.RADIO); svnLogAndPathsButton.setText(Policy.bind("GenerateChangeLogDialog.svnLogAndPaths")); //$NON-NLS-1$ gnuButton = new Button(formatGroup, SWT.RADIO); gnuButton.setText(Policy.bind("GenerateChangeLogDialog.gnu")); //$NON-NLS-1$ Group outputGroup = new Group(composite, SWT.NULL); outputGroup.setText(Policy.bind("GenerateChangeLogDialog.saveTo")); //$NON-NLS-1$ GridLayout outputLayout = new GridLayout(); outputLayout.numColumns = 2; outputGroup.setLayout(outputLayout); data = new GridData(GridData.FILL_HORIZONTAL); outputGroup.setLayoutData(data); clipboardButton = new Button(outputGroup, SWT.RADIO); clipboardButton.setText(Policy.bind("GenerateChangeLogDialog.clipboard")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; clipboardButton.setLayoutData(data); fileButton = new Button(outputGroup, SWT.RADIO); fileButton.setText(Policy.bind("GenerateChangeLogDialog.fileSystem")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; fileButton.setLayoutData(data); fileText = new Text(outputGroup, SWT.BORDER); data = new GridData(); data.widthHint = 450; fileText.setLayoutData(data); fileText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { okButton.setEnabled(canFinish()); } }); browseButton = new Button(outputGroup, SWT.NULL); browseButton.setText(Policy.bind("GenerateSVNDiff.Browse")); //$NON-NLS-1$ browseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { FileDialog d = new FileDialog(getShell(), SWT.PRIMARY_MODAL | SWT.SAVE); d.setText(Policy.bind("GenerateChangeLogDialog.saveAs")); //$NON-NLS-1$ d.setFileName(Policy.bind("GenerateChangeLogDialog.changeLogTxt")); //$NON-NLS-1$ String file = d.open(); if(file!=null) { IPath path = new Path(file); fileText.setText(path.toOSString()); } } }); if (lastOutput == FILESYSTEM) { fileText.setFocus(); } else { fileText.setEnabled(false); browseButton.setEnabled(false); } SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (e.getSource() == clipboardButton || e.getSource() == fileButton) { if (fileButton.getSelection()) settings.put(LAST_OUTPUT, FILESYSTEM); else settings.put(LAST_OUTPUT, CLIPBOARD); fileText.setEnabled(fileButton.getSelection()); if (e.getSource() == fileButton && fileButton.getSelection()) fileText.setFocus(); browseButton.setEnabled(fileButton.getSelection()); okButton.setEnabled(canFinish()); } else { if (svnLogButton.getSelection()) settings.put(LAST_FORMAT, SVN_LOG); else if (svnLogAndPathsButton.getSelection()) settings.put(LAST_FORMAT, SVN_LOG_WITH_PATHS); else settings.put(LAST_FORMAT, GNU); generateChangeLog(true); } } }; svnLogButton.addSelectionListener(selectionListener); svnLogAndPathsButton.addSelectionListener(selectionListener); gnuButton.addSelectionListener(selectionListener); clipboardButton.addSelectionListener(selectionListener); gnuButton.addSelectionListener(selectionListener); switch (lastFormat) { case SVN_LOG: svnLogButton.setSelection(true); break; case SVN_LOG_WITH_PATHS: svnLogAndPathsButton.setSelection(true); break; case GNU: gnuButton.setSelection(true); break; default: svnLogButton.setSelection(true); break; } switch (lastOutput) { case CLIPBOARD: clipboardButton.setSelection(true); break; case FILESYSTEM: fileButton.setSelection(true); break; default: clipboardButton.setSelection(true); break; } FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; fileText.addFocusListener(focusListener); Group previewGroup = new Group(composite, SWT.NULL); previewGroup.setText(Policy.bind("GenerateChangeLogDialog.3")); //$NON-NLS-1$ GridLayout previewLayout = new GridLayout(); previewLayout.numColumns = 1; previewGroup.setLayout(previewLayout); data = new GridData(GridData.FILL_BOTH); previewGroup.setLayoutData(data); previewText = new Text(previewGroup, SWT.BORDER | SWT.MULTI | SWT.READ_ONLY | SWT.H_SCROLL | SWT.V_SCROLL); data = new GridData(GridData.FILL_BOTH); data.horizontalSpan = 2; data.heightHint = 200; data.widthHint = 500; data.grabExcessHorizontalSpace = true; previewText.setLayoutData(data); generateChangeLog(true); return composite; } protected void okPressed() { if (fileButton.getSelection()) { File file = new File(fileText.getText().trim()); if (file.exists()) { String title = Policy.bind("GenerateSVNDiff.overwriteTitle"); //$NON-NLS-1$ String msg = Policy.bind("GenerateSVNDiff.overwriteMsg"); //$NON-NLS-1$ final MessageDialog messageDialog = new MessageDialog(Display.getDefault().getActiveShell(), title, null, msg, MessageDialog.QUESTION, new String[] { IDialogConstants.YES_LABEL, IDialogConstants.CANCEL_LABEL }, 0); if (!(messageDialog.open() == MessageDialog.OK)) return; } } if (!generateChangeLog(false)) { return; } super.okPressed(); } protected Button createButton(Composite parent, int id, String label, boolean defaultButton) { Button button = super.createButton(parent, id, label, defaultButton); if (id == IDialogConstants.OK_ID) { okButton = button; if (lastOutput == FILESYSTEM) okButton.setEnabled(false); } return button; } private boolean generateChangeLog(final boolean preview) { exception = null; BusyIndicator.showWhile(Display.getDefault(), new Runnable() { public void run() { try { if (!preview && fileButton.getSelection()) { File file = new File(fileText.getText().trim()); if (!file.exists()) file.createNewFile(); BufferedWriter writer = new BufferedWriter(new FileWriter(file)); for (LogEntry logEntry : logEntries) { if (gnuButton.getSelection()) writer.write(logEntry.getGnuLog()); //$NON-NLS-2$ else writer.write(logEntry.getChangeLog(svnLogAndPathsButton.getSelection())); //$NON-NLS-2$ } writer.close(); } else { StringBuffer changeLog = new StringBuffer(); for (LogEntry logEntry : logEntries) { if (gnuButton.getSelection()) changeLog.append(logEntry.getGnuLog()); //$NON-NLS-2$ else changeLog.append(logEntry.getChangeLog(svnLogAndPathsButton.getSelection())); //$NON-NLS-2$ } if (preview) { changeLogPreview = changeLog.toString().trim(); } else { TextTransfer plainTextTransfer = TextTransfer.getInstance(); Clipboard clipboard= new Clipboard(Display.getDefault()); clipboard.setContents( new String[] {changeLog.toString().trim()}, new Transfer[]{plainTextTransfer}); clipboard.dispose(); } } } catch (Exception e) { exception = e; } } }); if (exception != null) { MessageDialog.openError(Display.getDefault().getActiveShell(), Policy.bind("HistoryView.generateChangeLog"), exception.getMessage()); //$NON-NLS-1$ return false; } if (preview && changeLogPreview != null) { previewText.setText(changeLogPreview); } return true; } private boolean canFinish() { if (fileButton.getSelection()) { if (fileText.getText().trim().length() == 0) return false; File file = new File(fileText.getText().trim()); return isValidFile(file); } return true; } private boolean isValidFile(File file) { if (!file.isAbsolute()) return false; if (file.isDirectory()) return false; File parent = file.getParentFile(); if (parent==null) return false; if (!parent.exists()) return false; if (!parent.isDirectory()) return false; return true; } } HistoryDialog.java000066400000000000000000000600131203611042400405570ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import java.util.ArrayList; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import java.util.TreeMap; import org.eclipse.core.resources.IResource; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.TrayDialog; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.TextViewer; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.TeamException; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.commands.GetLogsCommand; import org.tigris.subversion.subclipse.core.history.AliasManager; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.history.LogEntry; import org.tigris.subversion.subclipse.core.history.LogEntryChangePath; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.history.ChangePathsTreeViewer; import org.tigris.subversion.subclipse.ui.history.HistoryFolder; import org.tigris.subversion.subclipse.ui.history.HistoryTableProvider; import org.tigris.subversion.subclipse.ui.settings.ProjectProperties; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNProperty; import org.tigris.subversion.svnclientadapter.SVNRevision; public class HistoryDialog extends TrayDialog { private IResource resource; private ISVNRemoteResource remoteResource; private SashForm sashForm; private HistoryTableProvider historyTableProvider; private ChangePathsTreeViewer changePathsViewer; private TableViewer tableHistoryViewer; private TextViewer textViewer; private Button stopOnCopyButton; private Button getAllButton; private Button getNextButton; private AliasManager tagManager; private ILogEntry[] entries; private IDialogSettings settings; private ILogEntry[] selectedEntries; private IPreferenceStore store; private SVNRevision revisionStart = SVNRevision.HEAD; private boolean getNextEnabled = true; private ProjectProperties projectProperties; private boolean includeTags = true; private boolean includeBugs = false; private static final int WIDTH_HINT = 500; private final static int LOG_HEIGHT_HINT = 200; private final static int COMMENT_HEIGHT_HINT = 100; public HistoryDialog(Shell parentShell, IResource resource) { super(parentShell); int shellStyle = getShellStyle(); setShellStyle(shellStyle | SWT.RESIZE); this.resource = resource; settings = SVNUIPlugin.getPlugin().getDialogSettings(); store = SVNUIPlugin.getPlugin().getPreferenceStore(); } public HistoryDialog(Shell parentShell, ISVNRemoteResource remoteResource) { super(parentShell); int shellStyle = getShellStyle(); setShellStyle(shellStyle | SWT.RESIZE); this.remoteResource = remoteResource; settings = SVNUIPlugin.getPlugin().getDialogSettings(); store = SVNUIPlugin.getPlugin().getPreferenceStore(); } protected Control createDialogArea(Composite parent) { if (store.getInt(ISVNUIConstants.PREF_LOG_ENTRIES_TO_FETCH) == 0) { getAllLogEntries(); } else { getLogEntries(); } if (resource == null) { getShell().setText(Policy.bind("HistoryDialog.title") + " - " + remoteResource.getName()); //$NON-NLS-1$ //$NON-NLS-2$ setIncludeBugsAndTags(remoteResource); } else { getShell().setText(Policy.bind("HistoryDialog.title") + " - " + resource.getName()); //$NON-NLS-1$ //$NON-NLS-2$ setIncludeBugsAndTags(resource); } Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.verticalSpacing = 0; layout.marginHeight = 0; composite.setLayout(layout); GridData data = new GridData(GridData.FILL_BOTH); composite.setLayoutData(data); sashForm = new SashForm(composite, SWT.VERTICAL); GridLayout sashLayout = new GridLayout(); sashLayout.verticalSpacing = 0; sashLayout.marginHeight = 0; sashForm.setLayout(sashLayout); sashForm.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite historyGroup = new Composite(sashForm, SWT.NULL); GridLayout historyLayout = new GridLayout(); historyLayout.verticalSpacing = 0; historyLayout.marginHeight = 0; historyLayout.marginTop = 5; historyGroup.setLayout(historyLayout); historyGroup.setLayoutData(new GridData(GridData.FILL_BOTH)); historyTableProvider = new HistoryTableProvider(SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI | SWT.FULL_SELECTION | SWT.BORDER, "HistoryDialog"); //$NON-NLS-1$ historyTableProvider.setIncludeBugs(includeBugs); historyTableProvider.setProjectProperties(projectProperties); historyTableProvider.setIncludeMergeRevisions(false); historyTableProvider.setIncludeTags(includeTags); historyTableProvider.setRemoteResource(remoteResource); tableHistoryViewer = historyTableProvider.createTable(historyGroup); data = new GridData(GridData.FILL_BOTH); data.widthHint = WIDTH_HINT; data.heightHint = LOG_HEIGHT_HINT; tableHistoryViewer.getTable().setLayoutData(data); tableHistoryViewer.setContentProvider(new IStructuredContentProvider() { public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } public Object[] getElements(Object inputElement) { return entries; } }); tableHistoryViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { ISelection selection = event.getSelection(); if (selection == null || !(selection instanceof IStructuredSelection)) { textViewer.setDocument(new Document("")); //$NON-NLS-1$ changePathsViewer.setInput(null); return; } IStructuredSelection ss = (IStructuredSelection)selection; if (ss.size() != 1) { textViewer.setDocument(new Document("")); //$NON-NLS-1$ changePathsViewer.setInput(null); return; } LogEntry entry = (LogEntry)ss.getFirstElement(); textViewer.setDocument(new Document(entry.getComment())); changePathsViewer.setCurrentLogEntry(entry); changePathsViewer.setInput(entry); } }); tableHistoryViewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { okPressed(); } }); tableHistoryViewer.setInput(remoteResource); tableHistoryViewer.resetFilters(); Composite commentGroup = new Composite(sashForm, SWT.NULL); GridLayout commentLayout = new GridLayout(); commentLayout.verticalSpacing = 0; commentLayout.marginHeight = 0; commentGroup.setLayout(commentLayout); commentGroup.setLayoutData(new GridData(GridData.FILL_BOTH)); textViewer = new TextViewer(commentGroup, SWT.WRAP | SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.READ_ONLY); data = new GridData(GridData.FILL_BOTH); data.heightHint = COMMENT_HEIGHT_HINT; data.widthHint = WIDTH_HINT; textViewer.getControl().setLayoutData(data); Composite pathGroup = new Composite(sashForm, SWT.NULL); GridLayout pathLayout = new GridLayout(); pathLayout.verticalSpacing = 0; pathLayout.marginHeight = 0; pathGroup.setLayout(pathLayout); pathGroup.setLayoutData(new GridData(GridData.FILL_BOTH)); ChangePathsTreeContentProvider contentProvider = new ChangePathsTreeContentProvider(); changePathsViewer = new ChangePathsTreeViewer(pathGroup, contentProvider); stopOnCopyButton = new Button(composite, SWT.CHECK); data = new GridData(); data.verticalIndent = 5; data.horizontalIndent = 5; stopOnCopyButton.setLayoutData(data); stopOnCopyButton.setText(Policy.bind("HistoryView.stopOnCopy")); stopOnCopyButton.setSelection(store.getBoolean(ISVNUIConstants.PREF_STOP_ON_COPY)); stopOnCopyButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { store.setValue(ISVNUIConstants.PREF_STOP_ON_COPY, stopOnCopyButton.getSelection()); revisionStart = SVNRevision.HEAD; getLogEntries(); tableHistoryViewer.refresh(); } }); try { int[] weights = new int[3]; weights[0] = settings.getInt("HistoryDialog.weights.0"); //$NON-NLS-1$ weights[1] = settings.getInt("HistoryDialog.weights.1"); //$NON-NLS-1$ weights[2] = settings.getInt("HistoryDialog.weights.2"); //$NON-NLS-1$ sashForm.setWeights(weights); } catch (Exception e) {} // This is a hack to get around a problem with the initial sorting on OSx historyTableProvider.setSortColumn(tableHistoryViewer, 0); historyTableProvider.setSortColumn(tableHistoryViewer, 0); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.HISTORY_DIALOG); return composite; } private void setIncludeBugsAndTags(IResource res) { try { projectProperties = ProjectProperties.getProjectProperties(resource); includeBugs = projectProperties != null; includeTags = tagsPropertySet(res); } catch (SVNException e) { SVNUIPlugin.openError(getShell(), null, null, e); } } private boolean tagsPropertySet(IResource res) { if (res == null) return false; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(res); try { if (svnResource.isManaged()) { ISVNProperty property = null; property = svnResource.getSvnProperty("subclipse:tags"); //$NON-NLS-1$ if (property != null && property.getValue() != null) return true; } } catch (SVNException e) {} return false; } private boolean tagsPropertySet(ISVNRemoteResource res) { ISVNClientAdapter client = null; try { client = SVNProviderPlugin.getPlugin().getSVNClient(); ISVNProperty property = null; SVNProviderPlugin.disableConsoleLogging(); property = client.propertyGet(res.getUrl(), "subclipse:tags"); //$NON-NLS-1$ SVNProviderPlugin.enableConsoleLogging(); if (property != null && property.getValue() != null) return true; } catch (Exception e) { SVNProviderPlugin.enableConsoleLogging(); } finally { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } return false; } private void setIncludeBugsAndTags(ISVNRemoteResource res) { projectProperties = null; try { projectProperties = ProjectProperties.getProjectProperties(res); } catch (SVNException e) { SVNUIPlugin.openError(Display.getCurrent().getActiveShell(), null, null, e); } includeBugs = projectProperties != null; includeTags = tagsPropertySet(res); } private void getLogEntries() { BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { try { if (remoteResource == null) { ISVNLocalResource localResource = SVNWorkspaceRoot.getSVNResourceFor(resource); if ( localResource != null && !localResource.getStatus().isAdded() && localResource.getStatus().isManaged() ) { remoteResource = localResource.getBaseResource(); } } if (remoteResource != null) { if (SVNUIPlugin.getPlugin().getPreferenceStore().getBoolean(ISVNUIConstants.PREF_SHOW_TAGS_IN_REMOTE)) tagManager = new AliasManager(remoteResource.getUrl()); SVNRevision pegRevision = remoteResource.getRevision(); SVNRevision revisionEnd = new SVNRevision.Number(0); boolean stopOnCopy = store.getBoolean(ISVNUIConstants.PREF_STOP_ON_COPY); int entriesToFetch = store.getInt(ISVNUIConstants.PREF_LOG_ENTRIES_TO_FETCH); long limit = entriesToFetch; entries = getLogEntries(remoteResource, pegRevision, revisionStart, revisionEnd, stopOnCopy, limit + 1, tagManager); long entriesLength = entries.length; if (entriesLength > limit) { ILogEntry[] fetchedEntries = new ILogEntry[entries.length - 1]; for (int i = 0; i < entries.length - 1; i++) fetchedEntries[i] = entries[i]; entries = fetchedEntries; } else getNextEnabled = false; if (entries.length > 0) { ILogEntry lastEntry = entries[entries.length - 1]; long lastEntryNumber = lastEntry.getRevision().getNumber(); revisionStart = new SVNRevision.Number(lastEntryNumber - 1); } } } catch (TeamException e) { SVNUIPlugin.openError(Display.getCurrent().getActiveShell(), null, null, e); } } }); } private void getNextLogEntries() { BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { try { if (remoteResource == null) { ISVNLocalResource localResource = SVNWorkspaceRoot.getSVNResourceFor(resource); if ( localResource != null && !localResource.getStatus().isAdded() && localResource.getStatus().isManaged() ) { remoteResource = localResource.getBaseResource(); } } if (remoteResource != null) { SVNRevision pegRevision = remoteResource.getRevision(); SVNRevision revisionEnd = new SVNRevision.Number(0); boolean stopOnCopy = store.getBoolean(ISVNUIConstants.PREF_STOP_ON_COPY); int entriesToFetch = store.getInt(ISVNUIConstants.PREF_LOG_ENTRIES_TO_FETCH); long limit = entriesToFetch; ILogEntry[] nextEntries = getLogEntries(remoteResource, pegRevision, revisionStart, revisionEnd, stopOnCopy, limit + 1, tagManager); long entriesLength = nextEntries.length; if (entriesLength > limit) { ILogEntry[] fetchedEntries = new ILogEntry[nextEntries.length - 1]; for (int i = 0; i < nextEntries.length - 1; i++) fetchedEntries[i] = nextEntries[i]; getNextButton.setEnabled(true); } else getNextButton.setEnabled(false); ArrayList entryArray = new ArrayList(); if (entries == null) entries = new ILogEntry[0]; for (int i = 0; i < entries.length; i++) entryArray.add(entries[i]); for (int i = 0; i < nextEntries.length; i++) entryArray.add(nextEntries[i]); entries = new ILogEntry[entryArray.size()]; entryArray.toArray(entries); if (entries.length > 0) { ILogEntry lastEntry = entries[entries.length - 1]; long lastEntryNumber = lastEntry.getRevision().getNumber(); revisionStart = new SVNRevision.Number(lastEntryNumber - 1); } } } catch (TeamException e) { SVNUIPlugin.openError(Display.getCurrent().getActiveShell(), null, null, e); } } }); ISelection selection = tableHistoryViewer.getSelection(); tableHistoryViewer.refresh(); tableHistoryViewer.setSelection(selection); } private void getAllLogEntries() { BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { try { if (remoteResource == null) { ISVNLocalResource localResource = SVNWorkspaceRoot.getSVNResourceFor(resource); if ( localResource != null && !localResource.getStatus().isAdded() && localResource.getStatus().isManaged() ) { remoteResource = localResource.getBaseResource(); } } if (remoteResource != null) { if (SVNUIPlugin.getPlugin().getPreferenceStore().getBoolean(ISVNUIConstants.PREF_SHOW_TAGS_IN_REMOTE)) tagManager = new AliasManager(remoteResource.getUrl()); SVNRevision pegRevision = remoteResource.getRevision(); SVNRevision revisionEnd = new SVNRevision.Number(0); revisionStart = SVNRevision.HEAD; boolean stopOnCopy = store.getBoolean(ISVNUIConstants.PREF_STOP_ON_COPY); long limit = 0; entries = getLogEntries(remoteResource, pegRevision, revisionStart, revisionEnd, stopOnCopy, limit, tagManager); if (getNextButton != null) getNextButton.setEnabled(false); } } catch (TeamException e) { SVNUIPlugin.openError(Display.getCurrent().getActiveShell(), null, null, e); } } }); if (tableHistoryViewer != null) tableHistoryViewer.refresh(); } protected ILogEntry[] getLogEntries(ISVNRemoteResource remoteResource, SVNRevision pegRevision, SVNRevision revisionStart, SVNRevision revisionEnd, boolean stopOnCopy, long limit, AliasManager tagManager) throws TeamException { GetLogsCommand logCmd = new GetLogsCommand(remoteResource, pegRevision, revisionStart, revisionEnd, stopOnCopy, limit, tagManager, false); logCmd.run(null); return logCmd.getLogEntries(); } protected void cancelPressed() { saveLocation(); super.cancelPressed(); } protected void okPressed() { saveLocation(); store.setValue(ISVNUIConstants.PREF_STOP_ON_COPY, stopOnCopyButton.getSelection()); IStructuredSelection selection = (IStructuredSelection)tableHistoryViewer.getSelection(); selectedEntries = new ILogEntry[selection.size()]; Iterator iter = selection.iterator(); int i = 0; while (iter.hasNext()) selectedEntries[i++] = (ILogEntry)iter.next(); super.okPressed(); } protected void createButtonsForButtonBar(Composite parent) { getAllButton = createButton(parent, 2, Policy.bind("HistoryView.getAll"), false); //$NON-NLS-1$ getAllButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { getAllLogEntries(); } }); int entriesToFetch = store.getInt(ISVNUIConstants.PREF_LOG_ENTRIES_TO_FETCH); if (entriesToFetch > 0) { getNextButton = createButton(parent, 3, Policy.bind("HistoryView.getNext") + " " + entriesToFetch, false); //$NON-NLS-1$ getNextButton.setEnabled(getNextEnabled); getNextButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { getNextLogEntries(); } }); } super.createButtonsForButtonBar(parent); } protected Point getInitialLocation(Point initialSize) { try { int x = settings.getInt("HistoryDialog.location.x"); //$NON-NLS-1$ int y = settings.getInt("HistoryDialog.location.y"); //$NON-NLS-1$ return new Point(x, y); } catch (NumberFormatException e) {} return super.getInitialLocation(initialSize); } protected Point getInitialSize() { try { int x = settings.getInt("HistoryDialog.size.x"); //$NON-NLS-1$ int y = settings.getInt("HistoryDialog.size.y"); //$NON-NLS-1$ return new Point(x, y); } catch (NumberFormatException e) {} return new Point(400, 400); } private void saveLocation() { int x = getShell().getLocation().x; int y = getShell().getLocation().y; settings.put("HistoryDialog.location.x", x); //$NON-NLS-1$ settings.put("HistoryDialog.location.y", y); //$NON-NLS-1$ x = getShell().getSize().x; y = getShell().getSize().y; settings.put("HistoryDialog.size.x", x); //$NON-NLS-1$ settings.put("HistoryDialog.size.y", y); //$NON-NLS-1$ int[] weights = sashForm.getWeights(); for (int i = 0; i < weights.length; i++) settings.put("HistoryDialog.weights." + i, weights[i]); //$NON-NLS-1$ } public ILogEntry[] getSelectedLogEntries() { return selectedEntries; } static class ChangePathsTreeContentProvider implements ITreeContentProvider { ChangePathsTreeContentProvider() { } public Object[] getChildren(Object parentElement) { if(parentElement instanceof HistoryFolder) { return ((HistoryFolder) parentElement).getChildren(); } return null; } public Object getParent(Object element) { return null; } public boolean hasChildren(Object element) { if(element instanceof HistoryFolder) { HistoryFolder folder = (HistoryFolder) element; return folder.getChildren().length > 0; } return false; } public Object[] getElements(Object inputElement) { ILogEntry logEntry = (ILogEntry) inputElement; return getGroups(logEntry.getLogEntryChangePaths()); } private Object[] getGroups(LogEntryChangePath[] changePaths) { // 1st pass. Collect folder names Set folderNames = new HashSet(); for(int i = 0; i < changePaths.length; i++) { folderNames.add(getFolderName(changePaths[ i])); } // 2nd pass. Sorting out explicitly changed folders TreeMap folders = new TreeMap(); for(int i = 0; i < changePaths.length; i++) { LogEntryChangePath changePath = changePaths[ i]; String path = changePath.getPath(); if(folderNames.contains(path)) { // changed folder HistoryFolder folder = (HistoryFolder) folders.get(path); if(folder == null) { folder = new HistoryFolder(changePath); folders.put(path, folder); } } else { // changed resource path = getFolderName(changePath); HistoryFolder folder = (HistoryFolder) folders.get(path); if(folder == null) { folder = new HistoryFolder(path); folders.put(path, folder); } folder.add(changePath); } } return folders.values().toArray(new Object[folders.size()]); } private String getFolderName(LogEntryChangePath changePath) { String path = changePath.getPath(); int n = path.lastIndexOf('/'); return n > -1 ? path.substring(0, n) : path; } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } } } HistorySearchDialog.java000066400000000000000000000475221203611042400417170ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import java.text.DateFormat; import java.text.ParseException; import java.util.ArrayList; import java.util.Calendar; import java.util.Date; import java.util.List; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * Dialog for searching the history of a resource in the repository. * The dialog is available from the history view. A search with this * dialog results in a filter being created for the table viewed in the * history view. Only history entries matching the dialog's fields * will be displayed in the history view. */ public class HistorySearchDialog extends SvnDialog { private ISVNRemoteResource remoteResource; private Text selectedResourceText; private Text userText; private Combo commentCombo; private Text startDateText; private Text endDateText; private Button regExpButton; private Button searchAllButton; private Button fetchButton; private Text startRevisionText; private Button startLogButton; private Text endRevisionText; private Button endLogButton; private String user; private String comment; private Date startDate; private Date endDate; private SVNRevision.Number startRevision; private SVNRevision.Number endRevision; private boolean searchAll = true; private boolean regExp; private boolean autoFetchLogs; private String oldStartRevision; private String oldEndRevision; private boolean revisionsChanged; private List previousComments; /** * Constructs a new dialog for searching revision history. * @param shell shell used for this dialog * @param remoteResource resource for which the search is selected */ public HistorySearchDialog(Shell shell, ISVNRemoteResource remoteResource) { super(shell, "HistorySearchDialog"); //$NON-NLS-1$ this.remoteResource = remoteResource; } /* * (non-Javadoc) * @see org.eclipse.jface.dialogs.Dialog#createDialogArea(org.eclipse.swt.widgets.Composite) */ protected Control createDialogArea(Composite parent) { getShell().setText(Policy.bind("HistorySearchDialog.title")); //$NON-NLS-1$ Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.SEARCH_HISTORY_DIALOG); Composite top = new Composite(composite, SWT.NULL); GridLayout topLayout = new GridLayout(); topLayout.numColumns = 2; top.setLayout(topLayout); top.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); Label resourceLabel = new Label(top, SWT.NONE); resourceLabel.setText(Policy.bind("HistorySearchDialog.resource")); //$NON-NLS-1$ selectedResourceText = new Text(top, SWT.BORDER); selectedResourceText.setText(remoteResource.getUrl().toString()); selectedResourceText.setEditable(false); GridData gdSelectedResourceText = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); selectedResourceText.setLayoutData(gdSelectedResourceText); regExpButton = new Button(top, SWT.CHECK); regExpButton.setText(Policy.bind("HistorySearchDialog.regExp")); //$NON-NLS-1$ GridData gdRegExpButton = new GridData(GridData.FILL_HORIZONTAL); gdRegExpButton.horizontalSpan = 2; regExpButton.setLayoutData(gdRegExpButton); regExpButton.setSelection(regExp); Group search = new Group(composite, SWT.NONE); search.setText(Policy.bind("HistorySearchDialog.searchTitle")); //$NON-NLS-1$ GridLayout searchLayout = new GridLayout(); searchLayout.numColumns = 2; search.setLayout(searchLayout); search.setLayoutData(new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL)); Label userLabel = new Label(search, SWT.NONE); userLabel.setText(Policy.bind("HistorySearchDialog.user")); //$NON-NLS-1$ userText = new Text(search, SWT.BORDER); userText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); if (user != null) { userText.setText(user); } Label commentLabel = new Label(search, SWT.NONE); commentLabel.setText(Policy.bind("HistorySearchDialog.comment")); //$NON-NLS-1$ commentCombo = new Combo(search, SWT.DROP_DOWN); commentCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); fillCommentCombo(commentCombo); fetchButton = new Button(search, SWT.CHECK); GridData gdFetchButton = new GridData(GridData.FILL_HORIZONTAL); gdFetchButton.horizontalSpan = 2; fetchButton.setLayoutData(gdFetchButton); fetchButton.setText(Policy.bind("HistorySearchDialog.fetchLogIfNeeded")); //$NON-NLS-1$ fetchButton.setSelection(autoFetchLogs); searchAllButton = new Button(search, SWT.CHECK); GridData gdSearchAllButton = new GridData(GridData.FILL_HORIZONTAL); gdSearchAllButton.horizontalSpan = 2; searchAllButton.setLayoutData(gdSearchAllButton); searchAllButton.setText(Policy.bind("HistorySearchDialog.searchAllLogs")); //$NON-NLS-1$ searchAllButton.setSelection(searchAll); final Label dateLabel = new Label(search, SWT.NONE); dateLabel.setText(Policy.bind("HistorySearchDialog.date")); //$NON-NLS-1$ dateLabel.setEnabled(!searchAll); Composite dateComp = new Composite(search, SWT.NONE); GridLayout dateCompLayout = new GridLayout(); dateCompLayout.numColumns = 5; dateCompLayout.marginHeight = 0; dateCompLayout.marginWidth = 0; dateComp.setLayout(dateCompLayout); dateComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); startDateText = new Text(dateComp, SWT.BORDER); startDateText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); if (startDate == null && startRevision == null && endRevision == null) { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MONTH, -1); startDate = calendar.getTime(); } if (startDate != null) { startDateText.setText(formatDate(startDate)); startDateText.setData(startDate); } startDateText.setEnabled(!searchAll); final Button selectStartDateButton = new Button(dateComp, SWT.NONE); selectStartDateButton.setText(Policy.bind("HistorySearchDialog.startDateButton")); //$NON-NLS-1$ selectStartDateButton.setEnabled(!searchAll); final Label midDataLabel = new Label(dateComp, SWT.NONE); midDataLabel.setText(Policy.bind("HistorySearchDialog.midDate")); //$NON-NLS-1$ midDataLabel.setEnabled(!searchAll); endDateText = new Text(dateComp, SWT.BORDER); endDateText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); if (endDate == null && startRevision == null && endRevision == null) { endDate = Calendar.getInstance().getTime(); } if (endDate != null) { endDateText.setText(formatDate(endDate)); endDateText.setData(endDate); } endDateText.setEnabled(!searchAll); final Button selectEndDateButton = new Button(dateComp, SWT.NONE); selectEndDateButton.setText(Policy.bind("HistorySearchDialog.endDateButton")); //$NON-NLS-1$ selectEndDateButton.setEnabled(!searchAll); final Label revisionLabel = new Label(search, SWT.NONE); revisionLabel.setText(Policy.bind("HistorySearchDialog.revision")); //$NON-NLS-1$ revisionLabel.setEnabled(!searchAll); Composite revisionComp = new Composite(search, SWT.NONE); GridLayout revisionCompLayout = new GridLayout(); revisionCompLayout.numColumns = 5; revisionCompLayout.marginHeight = 0; revisionCompLayout.marginWidth = 0; revisionComp.setLayout(revisionCompLayout); revisionComp.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); startRevisionText = new Text(revisionComp, SWT.BORDER); startRevisionText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); if (startRevision != null) startRevisionText.setText(startRevision.toString()); startRevisionText.setEnabled(!searchAll); startLogButton = new Button(revisionComp, SWT.PUSH); startLogButton.setText(Policy.bind("HistorySearchDialog.startRevisionButton")); //$NON-NLS-1$ startLogButton.setEnabled(!searchAll); final Label endRevisionLabel = new Label(revisionComp, SWT.NONE); endRevisionLabel.setText(Policy.bind("HistorySearchDialog.endRevision")); //$NON-NLS-1$ endRevisionLabel.setEnabled(!searchAll); endRevisionText = new Text(revisionComp, SWT.BORDER); endRevisionText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); if (endRevision != null) endRevisionText.setText(endRevision.toString()); endRevisionText.setEnabled(!searchAll); endLogButton = new Button(revisionComp, SWT.PUSH); endLogButton.setText(Policy.bind("HistorySearchDialog.endRevisionButton")); //$NON-NLS-1$ endLogButton.setEnabled(!searchAll); // Enabling and disabling the widgets when the search all button // is checked or unchecked searchAllButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (searchAllButton.getSelection()) { dateLabel.setEnabled(false); midDataLabel.setEnabled(false); selectStartDateButton.setEnabled(false); selectEndDateButton.setEnabled(false); startDateText.setEnabled(false); endDateText.setEnabled(false); revisionLabel.setEnabled(false); startRevisionText.setEnabled(false); startLogButton.setEnabled(false); endRevisionLabel.setEnabled(false); endRevisionText.setEnabled(false); endLogButton.setEnabled(false); } else { dateLabel.setEnabled(true); midDataLabel.setEnabled(true); selectStartDateButton.setEnabled(true); selectEndDateButton.setEnabled(true); startDateText.setEnabled(true); endDateText.setEnabled(true); revisionLabel.setEnabled(true); startRevisionText.setEnabled(true); startLogButton.setEnabled(true); endRevisionLabel.setEnabled(true); endRevisionText.setEnabled(true); endLogButton.setEnabled(true); } } }); // Open the date selection dialog to select a start date selectStartDateButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { String start = null; if (startDateText.getText().trim().length() == 0) { Calendar calendar = Calendar.getInstance(); calendar.add(Calendar.MONTH, -1); Date date = calendar.getTime(); start = formatDate(date); } else { start = startDateText.getText(); if (parseDate(start) == null) { return; } } DateSelectionDialog dsd = new DateSelectionDialog(getShell(), start); //$NON-NLS-1$ if (dsd.open() == Window.OK) { Date startDate = dsd.getDate(); startDateText.setText(formatDate(startDate)); startDateText.setData(startDate); if (endDateText.getText().trim().length() > 0) { Date endDate = (Date)endDateText.getData(); if (!startDate.before(endDate)) { endDateText.setText(formatDate(startDate)); endDateText.setData(startDate); } } } } }); // Open the date selection dialog to select an end date selectEndDateButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { String end = null; if (endDateText.getText().trim().length() == 0) { Date date = Calendar.getInstance().getTime(); end = formatDate(date); } else { end = endDateText.getText(); if (parseDate(end) == null) { return; } } DateSelectionDialog dsd = new DateSelectionDialog(getShell(), end); //$NON-NLS-1$ if (dsd.open() == Window.OK) { Date endDate = dsd.getDate(); endDateText.setText(formatDate(endDate)); endDateText.setData(endDate); if (startDateText.getText().trim().length() > 0) { Date startDate = (Date)startDateText.getData(); if (!endDate.after(startDate)) { startDateText.setText(formatDate(endDate)); startDateText.setData(endDate); } } } } }); SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (e.getSource() == startLogButton) showLog(startRevisionText); else showLog(endRevisionText); } }; startLogButton.addSelectionListener(selectionListener); endLogButton.addSelectionListener(selectionListener); // Set focus to the user search field userText.setFocus(); userText.setSelection(0, userText.getText().length()); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; userText.addFocusListener(focusListener); startDateText.addFocusListener(focusListener); endDateText.addFocusListener(focusListener); oldStartRevision = startRevisionText.getText(); oldEndRevision = endRevisionText.getText(); return composite; } private void showLog(Text revisionText) { HistoryDialog dialog = new HistoryDialog(getShell(), remoteResource); if (dialog.open() == HistoryDialog.CANCEL) return; ILogEntry[] selectedEntries = dialog.getSelectedLogEntries(); if (selectedEntries.length == 0) return; revisionText.setText(Long.toString(selectedEntries[selectedEntries.length - 1].getRevision().getNumber())); } public void setRemoteResource(ISVNRemoteResource remoteResource) { this.remoteResource = remoteResource; } public String getUser() { return user; } public String getComment() { return comment; } public Date getStartDate() { return startDate; } public Date getEndDate() { return endDate; } public SVNRevision.Number getStartRevision() { return startRevision; } public SVNRevision.Number getEndRevision() { return endRevision; } public boolean getRegExp() { return regExp; } public boolean getAutoFetchLogs() { return autoFetchLogs; } public boolean getSearchAllLogs() { return searchAll; } /** * Called when the OK-button of the dialog is pressed. The data entered * in the fields is stored in attributes. The attributes can later be * accessed by calls to the get-functions. */ protected void okPressed() { if (searchAllButton.getSelection()) { startDate = null; endDate = null; startRevision = null; endRevision = null; } else { Date tempStartDate = null; Date tempEndDate = null; if (startDateText.getText().trim().length() == 0) startDate = null; else { tempStartDate = parseDate(startDateText.getText()); if (tempStartDate == null) return; } if (endDateText.getText().trim().length() == 0) endDate = null; else { tempEndDate = parseDate(endDateText.getText()); if (tempEndDate == null) return; } if (tempStartDate != null && tempEndDate != null) { Calendar calendar = Calendar.getInstance(); calendar.setTime(tempEndDate); calendar.set(Calendar.HOUR_OF_DAY, calendar.getActualMaximum(Calendar.HOUR_OF_DAY)); calendar.set(Calendar.MINUTE, calendar.getActualMaximum(Calendar.MINUTE)); calendar.set(Calendar.SECOND, calendar.getActualMaximum(Calendar.SECOND)); tempEndDate = calendar.getTime(); if (!tempEndDate.after(tempStartDate)) { MessageDialog.openError(getShell(), Policy.bind("HistorySearchDialog.dateSequenceErrorTitle"), Policy.bind("HistorySearchDialog.dateSequenceErrorMessage")); //$NON-NLS-1$ //$NON-NLS-2$ return; } } endDate = tempEndDate; startDate = tempStartDate; if (startRevisionText.getText().trim().length() > 0) { try { startRevision = (SVNRevision.Number)SVNRevision.getRevision(startRevisionText.getText().trim()); } catch (ParseException e) { MessageDialog.openError(getShell(), Policy.bind("HistorySearchDialog.revisionParseErrorTitle"), Policy.bind("HistorySearchDialog.revisionParseErrorMessage")); //$NON-NLS-1$ //$NON-NLS-2$ return; } } else startRevision = null; if (endRevisionText.getText().trim().length() > 0) { try { endRevision = (SVNRevision.Number)SVNRevision.getRevision(endRevisionText.getText().trim()); } catch (ParseException e) { MessageDialog.openError(getShell(), Policy.bind("HistorySearchDialog.revisionParseErrorTitle"), Policy.bind("HistorySearchDialog.revisionParseErrorMessage")); //$NON-NLS-1$ //$NON-NLS-2$ return; } } else endRevision = null; if (startRevision != null && endRevision != null && startRevision.getNumber() > endRevision.getNumber()) { MessageDialog.openError(getShell(), Policy.bind("HistorySearchDialog.revisionSequenceErrorTitle"), Policy.bind("HistorySearchDialog.revisionSequenceErrorMessage")); //$NON-NLS-1$ //$NON-NLS-2$ return; } } if (userText.getText().trim().length() > 0) user = userText.getText(); else user = null; if (commentCombo.getText().trim().length() > 0) comment = commentCombo.getText(); else comment = null; autoFetchLogs = fetchButton.getSelection(); searchAll = searchAllButton.getSelection(); regExp = regExpButton.getSelection(); if (comment != null && comment.trim().length() > 0) { previousComments.add(comment); } revisionsChanged = !startRevisionText.getText().trim().equals(oldStartRevision) || !endRevisionText.getText().trim().equals(oldEndRevision); super.okPressed(); } /** * Format a date in the local representation. * @param date date to be formatted * @return a string containing the formatted date */ private String formatDate(Date date) { return DateFormat.getDateInstance(DateFormat.SHORT).format(date); } /** * Parses a date in a string to a Date * @param date date string to be parsed * @return a new Date object which represents the parsed date */ private Date parseDate(String date) { try { return DateFormat.getDateInstance(DateFormat.SHORT).parse(date); } catch (ParseException e) { MessageDialog.openError(getShell(), Policy.bind("HistorySearchDialog.dateParseErrorTitle"), Policy.bind("HistorySearchDialog.dateParseErrorMessage")); //$NON-NLS-1$ //$NON-NLS-2$ return null; return null; } } /** * Fill the comments combobox with previous search entries. * @param combo combobox to be filled */ private void fillCommentCombo(Combo combo) { if (previousComments == null) { previousComments = new ArrayList(); } for (int i=previousComments.size()-1; i >= 0; i--) { combo.add(((String)previousComments.get(i))); } combo.select(0); } public void setStartRevision(SVNRevision.Number startRevision) { this.startRevision = startRevision; } public void setEndRevision(SVNRevision.Number endRevision) { this.endRevision = endRevision; } public void setSearchAll(boolean searchAll) { this.searchAll = searchAll; } public boolean isRevisionsChanged() { return revisionsChanged; } } IgnoreResourcesDialog.java000066400000000000000000000226031203611042400422370ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import org.eclipse.core.resources.IResource; import org.eclipse.jface.dialogs.TrayDialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.resource.JFaceColors; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.util.FileNameMatcher; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; /** * the dialog used to add patterns to svn:ignore */ public class IgnoreResourcesDialog extends TrayDialog { // resources that should be ignored private IResource[] resources; // preference keys private final String ACTION_KEY = "Action"; //$NON-NLS-1$ private static final int ADD_NAME_ENTRY = 0; private static final int ADD_EXTENSION_ENTRY = 1; private static final int ADD_CUSTOM_ENTRY = 2; // dialogs settings that are persistent between workbench sessions private IDialogSettings settings; // buttons private Button addNameEntryButton; private Button addExtensionEntryButton; private Button addCustomEntryButton; private Text customEntryText; private Label statusMessageLabel; private int selectedAction; private String customPattern; private static final int LABEL_INDENT_WIDTH = 32; /** * Creates a new dialog for ignoring resources. * @param shell the parent shell * @param resources the array of resources to be ignored */ public IgnoreResourcesDialog(Shell shell, IResource[] resources) { super(shell); this.resources = resources; IDialogSettings workbenchSettings = SVNUIPlugin.getPlugin().getDialogSettings(); this.settings = workbenchSettings.getSection("IgnoreResourcesDialog");//$NON-NLS-1$ if (settings == null) { this.settings = workbenchSettings.addNewSection("IgnoreResourcesDialog");//$NON-NLS-1$ } try { selectedAction = settings.getInt(ACTION_KEY); } catch (NumberFormatException e) { selectedAction = ADD_NAME_ENTRY; } } /** * Determines the ignore pattern to use for a resource given the selected action. * * @param resource the resource * @return the ignore pattern for the specified resource */ public String getIgnorePatternFor(IResource resource) { switch (selectedAction) { case ADD_NAME_ENTRY: return resource.getName(); case ADD_EXTENSION_ENTRY: { String extension = resource.getFileExtension(); return (extension == null) ? resource.getName() : "*." + extension; //$NON-NLS-1$ } case ADD_CUSTOM_ENTRY: return customPattern; } throw new IllegalStateException(); } /* (non-Javadoc) * Method declared on Dialog. */ protected void createButtonsForButtonBar(Composite parent) { createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); } /* (non-Javadoc) * Method declared on Dialog. */ protected void configureShell(Shell newShell) { super.configureShell(newShell); if (resources.length == 1) { newShell.setText(Policy.bind("IgnoreResourcesDialog.titleSingle", resources[0].getName())); //$NON-NLS-1$ } else { newShell.setText(Policy.bind("IgnoreResourcesDialog.titleMany", Integer.toString(resources.length))); //$NON-NLS-1$ } } /* (non-Javadoc) * Method declared on Dialog. */ protected Control createContents(Composite parent) { Control control = super.createContents(parent); updateEnablements(); return control; } /* (non-Javadoc) * Method declared on Dialog. */ protected Control createDialogArea(Composite parent) { Composite top = new Composite(parent, SWT.NONE); top.setLayout(new GridLayout()); PlatformUI.getWorkbench().getHelpSystem().setHelp(top, IHelpContextIds.ADD_TO_SVNIGNORE); createIndentedLabel(top, Policy.bind("IgnoreResourcesDialog.prompt"), 0); //$NON-NLS-1$ Listener selectionListener = new Listener() { public void handleEvent(Event event) { updateEnablements(); } }; Listener modifyListener = new Listener() { public void handleEvent(Event event) { validate(); } }; addNameEntryButton = createRadioButton(top, Policy.bind("IgnoreResourcesDialog.addNameEntryButton")); //$NON-NLS-1$ addNameEntryButton.addListener(SWT.Selection, selectionListener); addNameEntryButton.setSelection(selectedAction == ADD_NAME_ENTRY); createIndentedLabel(top, Policy.bind("IgnoreResourcesDialog.addNameEntryExample"), LABEL_INDENT_WIDTH); //$NON-NLS-1$ addExtensionEntryButton = createRadioButton(top, Policy.bind("IgnoreResourcesDialog.addExtensionEntryButton")); //$NON-NLS-1$ addExtensionEntryButton.addListener(SWT.Selection, selectionListener); addExtensionEntryButton.setSelection(selectedAction == ADD_EXTENSION_ENTRY); createIndentedLabel(top, Policy.bind("IgnoreResourcesDialog.addExtensionEntryExample"), LABEL_INDENT_WIDTH); //$NON-NLS-1$ addCustomEntryButton = createRadioButton(top, Policy.bind("IgnoreResourcesDialog.addCustomEntryButton")); //$NON-NLS-1$ addCustomEntryButton.addListener(SWT.Selection, selectionListener); addCustomEntryButton.setSelection(selectedAction == ADD_CUSTOM_ENTRY); createIndentedLabel(top, Policy.bind("IgnoreResourcesDialog.addCustomEntryExample"), LABEL_INDENT_WIDTH); //$NON-NLS-1$ customEntryText = createIndentedText(top, resources[0].getName(), LABEL_INDENT_WIDTH); customEntryText.addListener(SWT.Modify, modifyListener); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; customEntryText.addFocusListener(focusListener); statusMessageLabel = createIndentedLabel(top, "", 0); //$NON-NLS-1$ statusMessageLabel.setFont(parent.getFont()); return top; } /* (non-Javadoc) * Method declared on Dialog. */ protected void okPressed() { settings.put(ACTION_KEY, selectedAction); super.okPressed(); } private Label createIndentedLabel(Composite parent, String text, int indent) { Label label = new Label(parent, SWT.LEFT); label.setText(text); GridData data = new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.FILL_HORIZONTAL); data.horizontalIndent = indent; label.setLayoutData(data); return label; } private Text createIndentedText(Composite parent, String text, int indent) { Text textbox = new Text(parent, SWT.BORDER); textbox.setText(text); GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL); data.horizontalIndent = indent; textbox.setLayoutData(data); return textbox; } private Button createRadioButton(Composite parent, String text) { Button button = new Button(parent, SWT.RADIO); button.setText(text); button.setLayoutData(new GridData(GridData.VERTICAL_ALIGN_FILL | GridData.FILL_HORIZONTAL)); return button; } private void updateEnablements() { if (addNameEntryButton.getSelection()) { selectedAction = ADD_NAME_ENTRY; } else if (addExtensionEntryButton.getSelection()) { selectedAction = ADD_EXTENSION_ENTRY; } else if (addCustomEntryButton.getSelection()) { selectedAction = ADD_CUSTOM_ENTRY; customEntryText.setFocus(); } customEntryText.setEnabled(selectedAction == ADD_CUSTOM_ENTRY); validate(); } private void validate() { if (selectedAction == ADD_CUSTOM_ENTRY) { customPattern = customEntryText.getText(); if (customPattern.length() == 0) { setError(Policy.bind("IgnoreResourcesDialog.patternMustNotBeEmpty")); //$NON-NLS-1$ return; } // we check that the pattern match all the files FileNameMatcher matcher = new FileNameMatcher(new String[] { customPattern }); for (int i = 0; i < resources.length; i++) { String name = resources[i].getName(); if (! matcher.match(name)) { setError(Policy.bind("IgnoreResourcesDialog.patternDoesNotMatchFile", name)); //$NON-NLS-1$ return; } } } setError(null); } private void setError(String text) { if (text == null) { statusMessageLabel.setText(""); //$NON-NLS-1$ getButton(IDialogConstants.OK_ID).setEnabled(true); } else { statusMessageLabel.setText(text); statusMessageLabel.setForeground(JFaceColors.getErrorText(getShell().getDisplay())); getButton(IDialogConstants.OK_ID).setEnabled(false); } } } ImportFolderDialog.java000066400000000000000000000151121203611042400415240ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import java.io.File; import org.eclipse.jface.dialogs.TrayDialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.comments.CommitCommentArea; import org.tigris.subversion.subclipse.ui.operations.ImportOperation; public class ImportFolderDialog extends TrayDialog { private ISVNRemoteFolder remoteFolder; private IWorkbenchPart targetPart; private Text directoryText; private Button recurseButton; private CommitCommentArea commitCommentArea; private Button okButton; public ImportFolderDialog(Shell parentShell, ISVNRemoteFolder remoteFolder, IWorkbenchPart targetPart) { super(parentShell); setShellStyle(SWT.SHELL_TRIM); this.remoteFolder = remoteFolder; this.targetPart = targetPart; commitCommentArea = new CommitCommentArea(this, null, Policy.bind("ImportFolderDialog.comment")); //$NON-NLS-1$ } protected Control createDialogArea(Composite parent) { getShell().setText(Policy.bind("ImportFolderDialog.title")); //$NON-NLS-1$ Composite composite = new Composite(parent, SWT.NULL); GridLayout gridLayout = new GridLayout(); gridLayout.marginHeight = 0; composite.setLayout(gridLayout); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite repositoryComposite = new Composite(composite, SWT.NONE); repositoryComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); repositoryComposite.setLayout(new GridLayout()); Group repositoryGroup = new Group(repositoryComposite, SWT.NULL); repositoryGroup.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); repositoryGroup.setText(Policy.bind("ExportRemoteFolderDialog.repository")); //$NON-NLS-1$ repositoryGroup.setLayout(new GridLayout(2, false)); Label urlLabel = new Label(repositoryGroup, SWT.NONE); urlLabel.setText(Policy.bind("ExportRemoteFolderDialog.url")); GridData data = new GridData(SWT.LEFT, SWT.CENTER, true, false, 2, 1); urlLabel.setLayoutData(data); Text urlText = new Text(repositoryGroup, SWT.BORDER); data = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1); data.widthHint = 600; urlText.setLayoutData(data); urlText.setEditable(false); urlText.setText(remoteFolder.getUrl().toString()); Label directoryLabel = new Label(repositoryGroup, SWT.NONE); directoryLabel.setText(Policy.bind("ImportFolderDialog.directory")); data = new GridData(SWT.LEFT, SWT.CENTER, true, false, 2, 1); directoryLabel.setLayoutData(data); directoryText = new Text(repositoryGroup, SWT.BORDER); data = new GridData(SWT.FILL, SWT.CENTER, true, false); data.widthHint = 600; directoryText.setLayoutData(data); directoryText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setOkButtonStatus(); } }); Button directoryBrowseButton = new Button(repositoryGroup, SWT.PUSH); directoryBrowseButton.setText(Policy.bind("ExportRemoteFolderDialog.browse")); directoryBrowseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { DirectoryDialog dialog = new DirectoryDialog(getShell(), SWT.SAVE); dialog.setText(Policy.bind("ImportFolderDialog.title")); String directory = dialog.open(); if (directory != null) { directoryText.setText(directory); setOkButtonStatus(); } } }); recurseButton = new Button(repositoryGroup, SWT.CHECK); recurseButton.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, true, false)); recurseButton.setText(Policy.bind("ImportFolderDialog.recurse")); recurseButton.setSelection(true); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; directoryText.addFocusListener(focusListener); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.IMPORT_FOLDER_DIALOG); commitCommentArea.createArea(composite); directoryText.setFocus(); return composite; } protected Button createButton(Composite parent, int id, String label, boolean defaultButton) { Button button = super.createButton(parent, id, label, defaultButton); if (id == IDialogConstants.OK_ID) { okButton = button; okButton.setEnabled(false); } return button; } private void setOkButtonStatus() { okButton.setEnabled(directoryText.getText().trim().length() > 0); } protected void okPressed() { boolean success = true; try { File directory = new File(directoryText.getText().trim()); commitCommentArea.addComment(commitCommentArea.getComment()); new ImportOperation(targetPart, remoteFolder, directory, commitCommentArea.getComment(), recurseButton.getSelection()).run(); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("ImportFolderDialog.title"), e.getMessage()); //$NON-NLS-1$ success = false; } if (!success) return; super.okPressed(); } } LoadErrorDialog.java000066400000000000000000000057041203611042400410150ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogspackage org.tigris.subversion.subclipse.ui.dialogs; import java.net.URL; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.forms.events.HyperlinkAdapter; import org.eclipse.ui.forms.events.HyperlinkEvent; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Hyperlink; import org.tigris.subversion.subclipse.ui.Messages; public class LoadErrorDialog extends SvnDialog { private String loadErrors; public LoadErrorDialog(Shell shell, String loadErrors) { super(shell, "passwordStores"); //$NON-NLS-1$ this.loadErrors = loadErrors; } protected Control createDialogArea(Composite parent) { getShell().setText(Messages.LoadErrorDialog_0); Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); Label problemLabel = new Label(composite, SWT.WRAP); problemLabel.setText(Messages.LoadErrorDialog_1); GridData gd = new GridData(); gd.widthHint = 500; problemLabel.setLayoutData(gd); new Label(composite, SWT.NONE); Label linkLabel = new Label(composite, SWT.WRAP); linkLabel.setText(Messages.LoadErrorDialog_2); gd = new GridData(); gd.widthHint = 500; linkLabel.setLayoutData(gd); new Label(composite, SWT.NONE); FormToolkit toolkit = new FormToolkit(parent.getDisplay()); toolkit.setBackground(parent.getBackground()); Hyperlink infoLink = toolkit.createHyperlink(composite, "http://subclipse.tigris.org/wiki/JavaHL", SWT.NONE); //$NON-NLS-1$ infoLink.addHyperlinkListener(new HyperlinkAdapter() { public void linkActivated(HyperlinkEvent evt) { try { PlatformUI.getWorkbench().getBrowserSupport().getExternalBrowser().openURL(new URL("http://subclipse.tigris.org/wiki/JavaHL")); //$NON-NLS-1$ } catch (Exception e) {} } }); new Label(composite, SWT.NULL); Group errorGroup = new Group(composite, SWT.NULL); GridLayout errorLayout = new GridLayout(); errorGroup.setLayout(errorLayout); gd = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH); errorGroup.setLayoutData(gd); errorGroup.setText(Messages.LoadErrorDialog_4); Text errorText = new Text(errorGroup, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI | SWT.WRAP); gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL | GridData.VERTICAL_ALIGN_FILL | GridData.GRAB_VERTICAL); gd.heightHint = 300; errorText.setLayoutData(gd); if (loadErrors != null) { errorText.setText(loadErrors); } return composite; } } MergeDialog.java000066400000000000000000000570131203611042400401630ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import java.io.File; import java.net.MalformedURLException; import java.text.ParseException; import org.eclipse.core.resources.IResource; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.util.UrlCombo; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class MergeDialog extends SvnDialog { private static final int REVISION_WIDTH_HINT = 40; private UrlCombo fromUrlCombo; private Button fromBrowseButton; private Text fromRevisionText; private Button fromHeadButton; private Button useFromUrlButton; private UrlCombo toUrlCombo; private Button toBrowseButton; private Text toRevisionText; private Button toHeadButton; private Button ignoreAncestryButton; private Button forceButton; private Button okButton; private Button diffButton; private Button dryRunButton; private IResource resource; private SVNUrl fromUrl; private SVNRevision fromRevision; private SVNUrl toUrl; private SVNRevision toRevision; private boolean force; private boolean ignoreAncestry; private ISVNLocalResource svnResource; private File diffFile; private File file; private ISVNClientAdapter svnClient; public MergeDialog(Shell parentShell, IResource resource) { super(parentShell, "MergeDialog"); this.resource = resource; } /* * @see Dialog#createDialogArea(Composite) */ protected Control createDialogArea(Composite parent) { getShell().setText(Policy.bind("MergeDialog.title")); //$NON-NLS-1$ Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); GridData data = new GridData(GridData.FILL_BOTH); composite.setLayoutData(data); Label label = new Label(composite, SWT.NONE); label.setText(Policy.bind("MergeDialog.text")); //$NON-NLS-1$ svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); String urlString = null; try { urlString = svnResource.getStatus().getUrlString(); } catch (SVNException e1) {} Group fromGroup = new Group(composite, SWT.NULL); fromGroup.setText(Policy.bind("MergeDialog.from")); //$NON-NLS-1$ GridLayout fromLayout = new GridLayout(); fromLayout.numColumns = 2; fromGroup.setLayout(fromLayout); data = new GridData(GridData.FILL_BOTH); fromGroup.setLayoutData(data); fromUrlCombo = new UrlCombo(fromGroup, SWT.NONE); fromUrlCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); fromUrlCombo.init(resource.getProject().getName()); if (urlString != null) { fromUrlCombo.setText(urlString); } fromBrowseButton = new Button(fromGroup, SWT.PUSH); fromBrowseButton.setText(Policy.bind("SwitchDialog.browse")); //$NON-NLS-1$ Composite fromRevisionComposite = new Composite(fromGroup, SWT.NULL); GridLayout fromRevisionLayout = new GridLayout(); fromRevisionLayout.numColumns = 3; fromRevisionComposite.setLayout(fromRevisionLayout); data = new GridData(GridData.FILL_BOTH); fromRevisionComposite.setLayoutData(data); fromHeadButton = new Button(fromRevisionComposite, SWT.CHECK); fromHeadButton.setText(Policy.bind("MergeDialog.fromHead")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 3; fromHeadButton.setLayoutData(data); Label fromRevisionLabel = new Label(fromRevisionComposite, SWT.NONE); fromRevisionLabel.setText(Policy.bind("MergeDialog.revision")); //$NON-NLS-1$ fromRevisionText = new Text(fromRevisionComposite, SWT.BORDER); data = new GridData(); data.widthHint = REVISION_WIDTH_HINT; fromRevisionText.setLayoutData(data); Button fromLogButton = new Button(fromRevisionComposite, SWT.PUSH); fromLogButton.setText(Policy.bind("MergeDialog.showLog")); //$NON-NLS-1$ fromLogButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { showLog(fromRevisionText); } }); SelectionListener fromListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { fromRevisionText.setEnabled(!fromHeadButton.getSelection()); setOkButtonStatus(); if (!fromHeadButton.getSelection()) { fromRevisionText.selectAll(); fromRevisionText.setFocus(); } } }; fromHeadButton.addSelectionListener(fromListener); Group toGroup = new Group(composite, SWT.NULL); toGroup.setText(Policy.bind("MergeDialog.to")); //$NON-NLS-1$ GridLayout toLayout = new GridLayout(); toLayout.numColumns = 2; toGroup.setLayout(toLayout); data = new GridData(GridData.FILL_BOTH); toGroup.setLayoutData(data); Composite useFromComposite = new Composite(toGroup, SWT.NULL); GridLayout useFromLayout = new GridLayout(); useFromComposite.setLayout(useFromLayout); data = new GridData(GridData.FILL_BOTH); data.horizontalSpan = 2; useFromComposite.setLayoutData(data); useFromUrlButton = new Button(useFromComposite, SWT.CHECK); useFromUrlButton.setSelection(true); useFromUrlButton.setText(Policy.bind("MergeDialog.useFrom")); //$NON-NLS-1$ toUrlCombo = new UrlCombo(toGroup, SWT.NONE); toUrlCombo.init(resource.getProject().getName()); toUrlCombo.setText(fromUrlCombo.getText()); toUrlCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); toUrlCombo.getCombo().setVisible(false); toBrowseButton = new Button(toGroup, SWT.PUSH); toBrowseButton.setText(Policy.bind("MergeDialog.browseTo")); //$NON-NLS-1$ toBrowseButton.setVisible(false); Composite toRevisionComposite = new Composite(toGroup, SWT.NULL); GridLayout toRevisionLayout = new GridLayout(); toRevisionLayout.numColumns = 3; toRevisionComposite.setLayout(toRevisionLayout); data = new GridData(GridData.FILL_BOTH); toRevisionComposite.setLayoutData(data); toHeadButton = new Button(toRevisionComposite, SWT.CHECK); toHeadButton.setText(Policy.bind("MergeDialog.toHead")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 3; toHeadButton.setLayoutData(data); Label toRevisionLabel = new Label(toRevisionComposite, SWT.NONE); toRevisionLabel.setText(Policy.bind("MergeDialog.toRevision")); //$NON-NLS-1$ toRevisionText = new Text(toRevisionComposite, SWT.BORDER); data = new GridData(); data.widthHint = REVISION_WIDTH_HINT; toRevisionText.setLayoutData(data); Button toLogButton = new Button(toRevisionComposite, SWT.PUSH); toLogButton.setText(Policy.bind("MergeDialog.showToLog")); //$NON-NLS-1$ toLogButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { showLog(toRevisionText); } }); SelectionListener toListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { toRevisionText.setEnabled(!toHeadButton.getSelection()); setOkButtonStatus(); if (!toHeadButton.getSelection()) { toRevisionText.selectAll(); toRevisionText.setFocus(); } } }; toHeadButton.addSelectionListener(toListener); SelectionListener browseListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { ChooseUrlDialog dialog = new ChooseUrlDialog(getShell(), resource); if ((dialog.open() == ChooseUrlDialog.OK) && (dialog.getUrl() != null)) { if (e.getSource() == fromBrowseButton) { fromUrlCombo.setText(dialog.getUrl()); if (useFromUrlButton.getSelection()) toUrlCombo.setText(dialog.getUrl()); } else toUrlCombo.setText(dialog.getUrl()); setOkButtonStatus(); } } }; fromBrowseButton.addSelectionListener(browseListener); toBrowseButton.addSelectionListener(browseListener); useFromUrlButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (useFromUrlButton.getSelection()) toUrlCombo.setText(fromUrlCombo.getText()); toBrowseButton.setVisible(!useFromUrlButton.getSelection()); toUrlCombo.getCombo().setVisible(!useFromUrlButton.getSelection()); setOkButtonStatus(); } }); fromUrlCombo.getCombo().addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { if (useFromUrlButton.getSelection()) toUrlCombo.setText(fromUrlCombo.getText()); } }); fromUrlCombo.getCombo().addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (useFromUrlButton.getSelection()) toUrlCombo.setText(fromUrlCombo.getText()); } }); ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { setOkButtonStatus(); } }; fromUrlCombo.getCombo().addModifyListener(modifyListener); fromRevisionText.addModifyListener(modifyListener); toUrlCombo.getCombo().addModifyListener(modifyListener); toRevisionText.addModifyListener(modifyListener); Composite ignoreComposite = new Composite(composite, SWT.NULL); GridLayout ignoreLayout = new GridLayout(); ignoreLayout.numColumns = 2; ignoreComposite.setLayout(ignoreLayout); data = new GridData(GridData.FILL_HORIZONTAL); ignoreComposite.setLayoutData(data); ignoreAncestryButton = new Button(ignoreComposite, SWT.CHECK); ignoreAncestryButton.setText(Policy.bind("MergeDialog.ignoreAncestry")); //$NON-NLS-1$ forceButton = new Button(ignoreComposite, SWT.CHECK); forceButton.setText(Policy.bind("MergeDialog.force")); //$NON-NLS-1$ Group workingGroup = new Group(composite, SWT.NULL); GridLayout workingLayout = new GridLayout(); workingLayout.numColumns = 2; workingGroup.setLayout(workingLayout); data = new GridData(GridData.FILL_HORIZONTAL); workingGroup.setLayoutData(data); Composite workingComposite = new Composite(workingGroup, SWT.NULL); workingComposite.setLayout(new GridLayout()); data = new GridData(GridData.FILL_HORIZONTAL); workingComposite.setLayoutData(data); Label workingLabel = new Label(workingComposite, SWT.NONE); workingLabel.setText(Policy.bind("MergeDialog.workingCopy")); //$NON-NLS-1$ Text workingText = new Text(workingComposite, SWT.BORDER | SWT.READ_ONLY); data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); workingText.setLayoutData(data); // workingText.setText(resource.getWorkspace().getRoot().getLocation().toString()); workingText.setText(resource.getLocation().toString()); Label repositoryLabel = new Label(workingComposite, SWT.NONE); repositoryLabel.setText(Policy.bind("MergeDialog.repositoryUrl")); //$NON-NLS-1$ Text repositoryText = new Text(workingComposite, SWT.BORDER | SWT.READ_ONLY); data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); repositoryText.setLayoutData(data); if (urlString != null)repositoryText.setText(urlString); Button workingLogButton = new Button(workingGroup, SWT.PUSH); workingLogButton.setText(Policy.bind("MergeDialog.showWorkingLog")); //$NON-NLS-1$ workingLogButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { showLog(null); } }); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; fromRevisionText.addFocusListener(focusListener); toRevisionText.addFocusListener(focusListener); fromUrlCombo.getCombo().setFocus(); PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.MERGE_DIALOG); return composite; } protected void createButtonsForButtonBar(Composite parent) { dryRunButton = createButton(parent, 2, Policy.bind("MergeDialog.dryRun"), false); //$NON-NLS-1$ dryRunButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { dryRun(); } }); dryRunButton.setEnabled(false); diffButton = createButton(parent, 3, Policy.bind("MergeDialog.diff"), false); //$NON-NLS-1$ diffButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { diff(); } }); diffButton.setEnabled(false); super.createButtonsForButtonBar(parent); } private void dryRun() { try { svnClient = svnResource.getRepository().getSVNClient(); file = resource.getLocation().toFile(); fromUrl = new SVNUrl(fromUrlCombo.getText()); toUrl = new SVNUrl(toUrlCombo.getText()); if (fromHeadButton.getSelection()) fromRevision = SVNRevision.HEAD; else fromRevision = SVNRevision.getRevision(fromRevisionText.getText().trim()); if (toHeadButton.getSelection()) toRevision = SVNRevision.HEAD; else toRevision = SVNRevision.getRevision(toRevisionText.getText().trim()); BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { try { svnClient.merge(fromUrl, fromRevision, toUrl, toRevision, file, forceButton.getSelection(), true, true, ignoreAncestryButton.getSelection()); } catch (SVNClientException e) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.dryRun"), e.toString()); //$NON-NLS-1$ } } }); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.dryRun"), e.toString()); //$NON-NLS-1$ } finally { svnResource.getRepository().returnSVNClient(svnClient); } } private void diff() { FileDialog dialog = new FileDialog(getShell(), SWT.SAVE); dialog.setText(Policy.bind("MergeDialog.diffTitle")); //$NON-NLS-1$ String returnFile = dialog.open(); if (returnFile == null) return; diffFile = new File(returnFile); try { svnClient = svnResource.getRepository().getSVNClient(); fromUrl = new SVNUrl(fromUrlCombo.getText()); toUrl = new SVNUrl(toUrlCombo.getText()); if (fromHeadButton.getSelection()) fromRevision = SVNRevision.HEAD; else fromRevision = SVNRevision.getRevision(fromRevisionText.getText().trim()); if (toHeadButton.getSelection()) toRevision = SVNRevision.HEAD; else toRevision = SVNRevision.getRevision(toRevisionText.getText().trim()); BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { try { svnClient.diff(fromUrl, fromRevision, toUrl, toRevision, diffFile, true); } catch (SVNClientException e) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.diff"), e.toString()); //$NON-NLS-1$ } } }); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.diff"), e.toString()); //$NON-NLS-1$ } finally { svnResource.getRepository().returnSVNClient(svnClient); } } private void showLog(Text text) { ISVNRemoteResource remoteResource = null; if (text == fromRevisionText) { try { fromUrl = new SVNUrl(fromUrlCombo.getText()); remoteResource = svnResource.getRepository().getRemoteFile(fromUrl); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.showLog"), e.toString()); //$NON-NLS-1$ return; } if (remoteResource == null) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.showLog"), Policy.bind("MergeDialog.urlError") + " " + fromUrlCombo.getText()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ return; } } if (text == toRevisionText) { try { toUrl = new SVNUrl(toUrlCombo.getText()); remoteResource = svnResource.getRepository().getRemoteFile(toUrl); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.showLog"), e.toString()); //$NON-NLS-1$ return; } if (remoteResource == null) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.showLog"), Policy.bind("MergeDialog.urlError") + " " + toUrlCombo.getText()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ return; } } HistoryDialog dialog = null; if ((text == fromRevisionText) || (text == toRevisionText)) dialog = new HistoryDialog(getShell(), remoteResource); else dialog = new HistoryDialog(getShell(), resource); if (dialog.open() == HistoryDialog.CANCEL) return; ILogEntry[] selectedEntries = dialog.getSelectedLogEntries(); if (selectedEntries.length == 0) return; if ((text != null) && useFromUrlButton.getSelection()) { fromRevisionText.setText(Long.toString(selectedEntries[selectedEntries.length - 1].getRevision().getNumber() - 1)); fromHeadButton.setSelection(false); toRevisionText.setText(Long.toString(selectedEntries[0].getRevision().getNumber())); toHeadButton.setSelection(false); fromRevisionText.setEnabled(true); toRevisionText.setEnabled(true); return; } if ((text == fromRevisionText) || ((text == null) && (fromRevisionText.getText().trim().length() == 0))) { fromRevisionText.setText(Long.toString(selectedEntries[0].getRevision().getNumber())); fromHeadButton.setSelection(false); fromRevisionText.setEnabled(true); } if (text == toRevisionText) { toRevisionText.setText(Long.toString(selectedEntries[0].getRevision().getNumber())); toHeadButton.setSelection(false); toRevisionText.setEnabled(true); } } protected void okPressed() { force = forceButton.getSelection(); ignoreAncestry = ignoreAncestryButton.getSelection(); fromUrlCombo.saveUrl(); if (!toUrlCombo.getText().equals(fromUrlCombo.getText())) toUrlCombo.saveUrl(); try { fromUrl = new SVNUrl(fromUrlCombo.getText()); if (fromHeadButton.getSelection()) fromRevision = SVNRevision.HEAD; else { try { fromRevision = SVNRevision.getRevision(fromRevisionText.getText().trim()); } catch (ParseException e1) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.title"), Policy.bind("MergeDialog.invalidFrom")); //$NON-NLS-1$ //$NON-NLS-2$ return; } } if (useFromUrlButton.getSelection()) toUrl = new SVNUrl(fromUrlCombo.getText()); toUrl = new SVNUrl(toUrlCombo.getText()); if (toHeadButton.getSelection()) toRevision = SVNRevision.HEAD; else { try { toRevision = SVNRevision.getRevision(toRevisionText.getText().trim()); } catch (ParseException e1) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.title"), Policy.bind("MergeDialog.invalidTo")); //$NON-NLS-1$ //$NON-NLS-2$ return; } } } catch (MalformedURLException e) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.title"), e.getMessage()); //$NON-NLS-1$ return; } super.okPressed(); } protected Button createButton(Composite parent, int id, String label, boolean defaultButton) { Button button = super.createButton(parent, id, label, defaultButton); if (id == IDialogConstants.OK_ID) { okButton = button; okButton.setText(Policy.bind("MergeDialog.mergeButton")); //$NON-NLS-1$ okButton.setEnabled(false); } return button; } private void setOkButtonStatus() { boolean canFinish = true; if (!fromHeadButton.getSelection() && (fromRevisionText.getText().trim().length() == 0)) canFinish = false; else if (!toHeadButton.getSelection() && (toRevisionText.getText().trim().length() == 0)) canFinish = false; okButton.setEnabled(canFinish); diffButton.setEnabled(canFinish); dryRunButton.setEnabled(canFinish); } public SVNRevision getFromRevision() { return fromRevision; } public SVNUrl getFromUrl() { return fromUrl; } public SVNRevision getToRevision() { return toRevision; } public SVNUrl getToUrl() { return toUrl; } public boolean isForce() { return force; } public boolean isIgnoreAncestry() { return ignoreAncestry; } } RemoteResourcePropertiesDialog.java000066400000000000000000000260661203611042400441500ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import java.util.Date; import org.eclipse.jface.dialogs.TrayDialog; import org.eclipse.jface.viewers.ColumnLayoutData; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.ISVNProperty; import org.tigris.subversion.svnclientadapter.SVNRevision; public class RemoteResourcePropertiesDialog extends TrayDialog { private ISVNRemoteResource remoteResource; private ISVNInfo svnInfo; private ISVNProperty[] properties; private String errorMessage; private ColumnLayoutData columnLayouts[] = { new ColumnWeightData(75, 75, true), new ColumnWeightData(200, 200, true)}; private String columnHeaders[] = { Policy.bind("RemoteResourcePropertiesDialog.property"), Policy.bind("RemoteResourcePropertiesDialog.value") }; public RemoteResourcePropertiesDialog(Shell parentShell, ISVNRemoteResource remoteResource) { super(parentShell); setShellStyle(SWT.CLOSE | SWT.TITLE | SWT.RESIZE); this.remoteResource = remoteResource; } protected Control createDialogArea(Composite parent) { BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { ISVNClientAdapter client = null; try { client = SVNProviderPlugin.getPlugin().getSVNClientManager().getSVNClient(); SVNProviderPlugin.disableConsoleLogging(); svnInfo = client.getInfo(remoteResource.getUrl()); properties = client.getProperties(remoteResource.getUrl(), SVNRevision.HEAD, SVNRevision.HEAD, false); SVNProviderPlugin.enableConsoleLogging(); } catch (Exception e) { errorMessage = e.getMessage(); SVNProviderPlugin.enableConsoleLogging(); } finally { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } } }); getShell().setText(Policy.bind("RemoteResourcePropertiesDialog.title")); //$NON-NLS-1$ Composite composite = new Composite(parent, SWT.NULL); GridLayout gridLayout = new GridLayout(); gridLayout.marginTop = 5; gridLayout.marginWidth = 10; gridLayout.numColumns = 2; composite.setLayout(gridLayout); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); if (svnInfo == null) { Text errorText = new Text(composite, SWT.V_SCROLL | SWT.WRAP | SWT.READ_ONLY); GridData data = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1); data.widthHint = 600; data.heightHint = 100; errorText.setLayoutData(data); errorText.setEditable(false); errorText.setText(errorMessage); errorText.setBackground(composite.getBackground()); return composite; } Label urlLabel = new Label(composite, SWT.NONE); urlLabel.setText(Policy.bind("RemoteResourcePropertiesDialog.url")); Text urlText = new Text(composite, SWT.READ_ONLY); GridData data = new GridData(SWT.FILL, SWT.FILL, true, false); data.widthHint = 600; urlText.setLayoutData(data); urlText.setEditable(false); urlText.setText(remoteResource.getUrl().toString()); urlText.setBackground(composite.getBackground()); Label authorLabel = new Label(composite, SWT.NONE); authorLabel.setText(Policy.bind("RemoteResourcePropertiesDialog.author")); Text authorText = new Text(composite, SWT.READ_ONLY); authorText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); authorText.setEditable(false); if (svnInfo.getLastCommitAuthor() != null) authorText.setText(svnInfo.getLastCommitAuthor()); authorText.setBackground(composite.getBackground()); Label revisionLabel = new Label(composite, SWT.NONE); revisionLabel.setText(Policy.bind("RemoteResourcePropertiesDialog.revision")); Text revisionText = new Text(composite, SWT.READ_ONLY); revisionText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); revisionText.setEditable(false); if (svnInfo.getLastChangedRevision() != null) revisionText.setText(svnInfo.getLastChangedRevision().toString()); revisionText.setBackground(composite.getBackground()); Label dateLabel = new Label(composite, SWT.NONE); dateLabel.setText(Policy.bind("RemoteResourcePropertiesDialog.date")); Text dateText = new Text(composite, SWT.READ_ONLY); dateText.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); dateText.setEditable(false); if (svnInfo.getLastChangedDate() != null) dateText.setText(svnInfo.getLastChangedDate().toString()); dateText.setBackground(composite.getBackground()); if (remoteResource instanceof ISVNRemoteFile) { String lockOwner = null; try { lockOwner = svnInfo.getLockOwner(); } catch (Exception e) { } if (lockOwner != null) { Label lockOwnerLabel = new Label(composite, SWT.NONE); lockOwnerLabel.setText(Policy.bind("RemoteResourcePropertiesDialog.lockOwner")); Text lockOwnerText = new Text(composite, SWT.READ_ONLY); data = new GridData(SWT.FILL, SWT.FILL, true, false); data.widthHint = 600; lockOwnerText.setLayoutData(data); lockOwnerText.setEditable(false); lockOwnerText.setText(svnInfo.getLockOwner()); lockOwnerText.setBackground(composite.getBackground()); } Date lockCreationDate = null; try { lockCreationDate = svnInfo.getLockCreationDate(); } catch (Exception e) { } if (lockCreationDate != null) { Label lockCreatedLabel = new Label(composite, SWT.NONE); lockCreatedLabel.setText(Policy.bind("RemoteResourcePropertiesDialog.lockCreated")); Text lockCreatedText = new Text(composite, SWT.READ_ONLY); data = new GridData(SWT.FILL, SWT.FILL, true, false); data.widthHint = 600; lockCreatedText.setLayoutData(data); lockCreatedText.setEditable(false); lockCreatedText.setText(svnInfo.getLockCreationDate().toString()); lockCreatedText.setBackground(composite.getBackground()); } String lockComment = null; try { lockComment = svnInfo.getLockComment(); } catch (Exception e) { } if (lockComment != null) { Label lockCommentLabel = new Label(composite, SWT.NONE); lockCommentLabel.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false)); lockCommentLabel.setText(Policy.bind("RemoteResourcePropertiesDialog.lockComment")); Text lockCommentText = new Text(composite, SWT.V_SCROLL | SWT.WRAP | SWT.READ_ONLY); GridData lockCommentTextData = new GridData(SWT.FILL, SWT.FILL, true, false); lockCommentTextData.heightHint = 100; lockCommentTextData.widthHint = 600; lockCommentText.setLayoutData(lockCommentTextData); lockCommentText.setEditable(false); lockCommentText.setText(svnInfo.getLockComment()); lockCommentText.setBackground(composite.getBackground()); } } SashForm sashForm = new SashForm(composite, SWT.VERTICAL); GridData gd_sashForm = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1); gd_sashForm.heightHint = 244; sashForm.setLayoutData(gd_sashForm); final Table table = new Table(sashForm, SWT.FULL_SELECTION | SWT.BORDER); final Text text = new Text(sashForm, SWT.V_SCROLL | SWT.MULTI | SWT.READ_ONLY | SWT.BORDER | SWT.WRAP); final TableViewer viewer = new TableViewer(table); viewer.setUseHashlookup(true); TableLayout tableLayout = new TableLayout(); for (int i = 0; i < columnHeaders.length; i++) { tableLayout.addColumnData(columnLayouts[i]); TableColumn tc = new TableColumn(table, SWT.NONE,i); tc.setResizable(columnLayouts[i].resizable); tc.setText(columnHeaders[i]); } table.setLayout(tableLayout); table.setLinesVisible(true); table.setHeaderVisible(true); table.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { IStructuredSelection selection = (IStructuredSelection) viewer.getSelection(); ISVNProperty property = (ISVNProperty) selection.getFirstElement(); text.setText(property.getValue()); } }); GridData gd_table = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1); gd_table.verticalIndent = 5; gd_table.heightHint = 150; table.setLayoutData(gd_table); viewer.setContentProvider(new RemoteResourceContentProvider()); viewer.setLabelProvider(new RemoteResourceLabelProvider()); viewer.setInput(remoteResource); sashForm.setWeights(new int[] {128, 113 }); // set f1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.REMOTE_RESOURCE_PROPERTIES_DIALOG); return composite; } class RemoteResourceContentProvider implements IStructuredContentProvider { public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } public Object[] getElements(Object arg0) { return properties; } } class RemoteResourceLabelProvider extends LabelProvider implements ITableLabelProvider { public String getColumnText(Object element, int columnIndex) { if ((columnIndex >= 0) && (columnIndex <= 1)) { ISVNProperty property = (ISVNProperty)element; switch (columnIndex) { case 0: return property.getName(); case 1: return property.getValue(); default: return ""; } } return ""; } public Image getColumnImage(Object element, int columnIndex) { return null; } } } ResourceLabelProvider.java000066400000000000000000000025321203611042400422420ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import org.eclipse.core.resources.IResource; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.model.WorkbenchLabelProvider; public class ResourceLabelProvider extends WorkbenchLabelProvider implements ITableLabelProvider { public Image getColumnImage(Object element, int columnIndex) { if (columnIndex == 0) { return getImage(element); } return null; } public String getColumnText(Object element, int columnIndex) { String result = null; switch (columnIndex) { case 0 : result = ((IResource)element).getFullPath().toString(); break; default: result = ""; //$NON-NLS-1$ break; } return result; } } ResourceWithStatusLabelProvider.java000066400000000000000000000055641203611042400443120ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import org.eclipse.core.resources.IResource; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.swt.graphics.Image; import org.eclipse.ui.model.WorkbenchLabelProvider; public class ResourceWithStatusLabelProvider extends WorkbenchLabelProvider implements ITableLabelProvider { private final String baseUrl; public ResourceWithStatusLabelProvider(String baseUrl) { this.baseUrl = baseUrl; } public String getColumnText(Object element, int columnIndex) { String result = null; switch (columnIndex) { case 0 : result = ""; //$NON-NLS-1$ break; case 1: if (this.baseUrl == null) result = ((IResource)element).getFullPath().toString(); else result = getResource((IResource)element); if (result.length() == 0) result = ((IResource)element).getFullPath().toString(); break; case 2: result = ResourceWithStatusUtil.getStatus((IResource)element); break; case 3: result = ResourceWithStatusUtil.getPropertyStatus((IResource)element); break; default: result = ""; //$NON-NLS-1$ break; } return result; } // Strip off segments of path that are included in URL. private String getResource(IResource resource) { String[] segments = resource.getFullPath().segments(); StringBuffer path = new StringBuffer(); for (int i = 0; i < segments.length; i++) { path.append("/" + segments[i]); //$NON-NLS-1$ if (this.baseUrl.endsWith(path.toString())) { if (i == (segments.length - 2)) return resource.getFullPath().toString().substring(path.length() + 1); else return resource.getFullPath().toString().substring(path.length()); } } return resource.getFullPath().toString(); } public Image getColumnImage(Object element, int columnIndex) { if (columnIndex == 1) { return getImage(element); } return null; } public void addListener(ILabelProviderListener listener) { } public void dispose() { } public boolean isLabelProperty(Object element, String property) { return false; } public void removeListener(ILabelProviderListener listener) { } }ResourceWithStatusSorter.java000066400000000000000000000045421203611042400430310ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import org.eclipse.core.resources.IResource; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; public class ResourceWithStatusSorter extends ViewerSorter { private boolean reversed = false; private int sortedColumnNumber; private static final int NUM_COLUMNS = 4; private static final int[][] SORT_ORDERS_BY_COLUMN = { {0, 1, 2, 3}, /* check */ {1, 0, 2, 3}, /* resource */ {2, 0, 1, 3}, /* status */ {3, 0, 1, 2}, /* prop status */ }; public ResourceWithStatusSorter(int sortedColumnNumber) { this.sortedColumnNumber = sortedColumnNumber; } public int compare(Viewer viewer, Object e1, Object e2) { IResource r1 = (IResource)e1; IResource r2 = (IResource)e2; int[] columnSortOrder = SORT_ORDERS_BY_COLUMN[sortedColumnNumber]; int result = 0; for (int i = 0; i < NUM_COLUMNS; ++i) { result = compareColumnValue(columnSortOrder[i], r1, r2); if (result != 0) break; } if (reversed) result = -result; return result; } private int compareColumnValue(int columnNumber, IResource r1, IResource r2) { switch (columnNumber) { case 0: /* check */ return 0; case 1: /* resource */ return collator.compare(r1.getFullPath().toString(), r2.getFullPath().toString()); case 2: /* status */ return collator.compare(ResourceWithStatusUtil.getStatus(r1), ResourceWithStatusUtil.getStatus(r2)); case 3: /* prop status */ return collator.compare(ResourceWithStatusUtil.getPropertyStatus(r1), ResourceWithStatusUtil.getPropertyStatus(r2)); default: return 0; } } public int getColumnNumber() { return sortedColumnNumber; } public boolean isReversed() { return reversed; } public void setReversed(boolean newReversed) { reversed = newReversed; } } ResourceWithStatusUtil.java000066400000000000000000000105421203611042400424650ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import org.eclipse.core.resources.IResource; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.svnclientadapter.SVNStatusKind; public final class ResourceWithStatusUtil { private ResourceWithStatusUtil() { } public static SVNStatusKind getStatusKind(IResource resource) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); SVNStatusKind statusKind = null; try { LocalResourceStatus status = svnResource.getStatus(); if (status.isTextConflicted()) statusKind = SVNStatusKind.CONFLICTED; else if (status.isAdded()) statusKind = SVNStatusKind.ADDED; else if (status.isDeleted()) statusKind = SVNStatusKind.DELETED; else if (status.isMissing()) statusKind = SVNStatusKind.MISSING; else if (status.isReplaced()) statusKind = SVNStatusKind.REPLACED; else if (status.isTextModified()) statusKind = SVNStatusKind.MODIFIED; else if (!status.isManaged()) statusKind = SVNStatusKind.UNVERSIONED; } catch (TeamException e) {} return statusKind; } public static String getStatus(IResource resource) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); String result = null; try { LocalResourceStatus status = svnResource.getStatus(); if (status.isTextConflicted()) result = Policy.bind("CommitDialog.conflicted"); //$NON-NLS-1$ else if (status.isAdded()) result = Policy.bind("CommitDialog.added"); //$NON-NLS-1$ else if (status.isDeleted()) result = Policy.bind("CommitDialog.deleted"); //$NON-NLS-1$ else if (status.isMissing()) result = Policy.bind("CommitDialog.missing"); //$NON-NLS-1$ else if (status.isReplaced()) result = Policy.bind("CommitDialog.replaced"); //$NON-NLS-1$ else if (status.isTextModified()) result = Policy.bind("CommitDialog.modified"); //$NON-NLS-1$ else if (!status.isManaged()) result = Policy.bind("CommitDialog.unversioned"); //$NON-NLS-1$ else result = ""; //$NON-NLS-1$ } catch (TeamException e) { result = ""; //$NON-NLS-1$ } return result; } public static String getPropertyStatus(IResource resource) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); String result = null; try { LocalResourceStatus status = svnResource.getStatus(); if (status.isPropConflicted()) result = Policy.bind("CommitDialog.conflicted"); //$NON-NLS-1$ else if ((svnResource.getStatus() != null) && (svnResource.getStatus().getPropStatus() != null) && (svnResource.getStatus().getPropStatus().equals(SVNStatusKind.MODIFIED))) result = Policy.bind("CommitDialog.modified"); //$NON-NLS-1$ else result = ""; //$NON-NLS-1$ } catch (TeamException e) { result = ""; //$NON-NLS-1$ } return result; } } SetCommitPropertiesDialog.java000066400000000000000000000303331203611042400431010ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import org.eclipse.core.resources.IResource; import org.eclipse.jface.dialogs.TrayDialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.comments.CommitCommentArea; import org.tigris.subversion.subclipse.ui.settings.CommentProperties; import org.tigris.subversion.subclipse.ui.settings.ProjectProperties; import org.tigris.subversion.subclipse.ui.util.LinkList; import org.tigris.subversion.svnclientadapter.SVNRevision; public class SetCommitPropertiesDialog extends TrayDialog { private CommitCommentArea commitCommentArea; private ProjectProperties projectProperties; private Text issueText; private Text committerText; private String issue; private String author; private IDialogSettings settings; private SVNRevision revision; private Button okButton; private CommentProperties commentProperties; public SetCommitPropertiesDialog(Shell parentShell, SVNRevision revision, IResource theResource, ProjectProperties projectProperties) { super(parentShell); int shellStyle = getShellStyle(); setShellStyle(shellStyle | SWT.RESIZE); try { if (theResource != null) commentProperties = CommentProperties.getCommentProperties(theResource); } catch (SVNException e1) { // So what! } commitCommentArea = new CommitCommentArea(this, null, commentProperties); if ((commentProperties != null) && (commentProperties.getMinimumLogMessageSize() != 0)) { ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { okButton.setEnabled(commitCommentArea.getComment().trim().length() >= commentProperties.getMinimumLogMessageSize()); } }; commitCommentArea.setModifyListener(modifyListener); } this.revision = revision; this.projectProperties = projectProperties; settings = SVNUIPlugin.getPlugin().getDialogSettings(); } /* * @see Dialog#createDialogArea(Composite) */ protected Control createDialogArea(Composite parent) { getShell().setText(Policy.bind("SetCommitPropertiesDialog.revisionNumber", revision.toString())); //$NON-NLS-1$//$NON-NLS-2$ Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); if (projectProperties != null) { if (projectProperties.getMessage() != null) { addBugtrackingArea(composite); } } commitCommentArea.createArea(composite); commitCommentArea.addPropertyChangeListener(new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { if (event.getProperty() == CommitCommentArea.OK_REQUESTED) okPressed(); } }); addCommitterName(composite); if (author != null) committerText.setText(author); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; committerText.addFocusListener(focusListener); if (issueText != null) issueText.addFocusListener(focusListener); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.CHANGE_REVPROPS); return composite; } private void addBugtrackingArea(Composite composite) { Composite bugtrackingComposite = new Composite(composite, SWT.NULL); GridLayout bugtrackingLayout = new GridLayout(); bugtrackingLayout.numColumns = 2; bugtrackingComposite.setLayout(bugtrackingLayout); Label label = new Label(bugtrackingComposite, SWT.NONE); label.setText(projectProperties.getLabel()); issueText = new Text(bugtrackingComposite, SWT.BORDER); GridData data = new GridData(); data.widthHint = 150; issueText.setLayoutData(data); } private void addCommitterName(Composite composite) { Composite committerComposite = new Composite(composite, SWT.NULL); GridLayout committerLayout = new GridLayout(); committerLayout.numColumns = 2; committerComposite.setLayout(committerLayout); Label label = new Label(committerComposite, SWT.NONE); label.setText(Policy.bind("SetCommitPropertiesDialog.user")); committerText = new Text(committerComposite, SWT.BORDER); GridData data = new GridData(); data.widthHint = 150; committerText.setLayoutData(data); } protected void okPressed() { saveLocation(); if (confirmUserData() == false) { return; } if (committerText.getText().trim().length() == 0) { MessageDialog.openError(getShell(), Policy.bind("SetCommitPropertiesDialog.title"), Policy.bind("SetCommitPropertiesDialog.noAuthor")); //$NON-NLS-1$ //$NON-NLS-2$ committerText.selectAll(); committerText.setFocus(); return; //$NON-NLS-1$ } author = committerText.getText().trim(); super.okPressed(); } private boolean confirmUserData() { if (projectProperties != null) { int issueCount = 0; if (projectProperties.getMessage() != null) { issue = issueText.getText().trim(); if (issue.length() > 0) { String issueError = projectProperties.validateIssue(issue); if (issueError != null) { MessageDialog.openError(getShell(), Policy.bind("SetCommitPropertiesDialog.title"), issueError); //$NON-NLS-1$ issueText.selectAll(); issueText.setFocus(); return false; } else { issueCount++; } } } if (projectProperties.getLogregex() != null) { try { LinkList linkList = projectProperties.getLinkList(commitCommentArea.getComment()); String[] urls = linkList.getUrls(); issueCount += urls.length; } catch (Exception e) { handle(e, null, null); } } if(projectProperties.isWarnIfNoIssue()) { if (issueCount == 0) { if ((projectProperties.getMessage() != null) && (projectProperties.getLogregex() == null)) { if (!MessageDialog.openQuestion(getShell(), Policy.bind("SetCommitPropertiesDialog.title"), Policy.bind("SetCommitPropertiesDialog.0", projectProperties.getLabel()))) { //$NON-NLS-1$ //$NON-NLS-2$ issueText.setFocus(); return false; //$NON-NLS-1$ } } else if ((projectProperties.getMessage() == null) && (projectProperties.getLogregex() != null)) { if (!MessageDialog.openQuestion(getShell(), Policy.bind("SetCommitPropertiesDialog.title"), Policy.bind("SetCommitPropertiesDialog.1", projectProperties.getLabel()))) { //$NON-NLS-1$ //$NON-NLS-2$ commitCommentArea.setFocus(); return false; //$NON-NLS-1$ } } else if ((projectProperties.getMessage() != null) && (projectProperties.getLogregex() != null)) { if (!MessageDialog.openQuestion(getShell(), Policy.bind("SetCommitPropertiesDialog.title"), Policy.bind("SetCommitPropertiesDialog.2", projectProperties.getLabel()))) { //$NON-NLS-1$ //$NON-NLS-2$ commitCommentArea.setFocus(); return false; //$NON-NLS-1$ } } } } } return true; } protected void cancelPressed() { saveLocation(); super.cancelPressed(); } private void saveLocation() { int x = getShell().getLocation().x; int y = getShell().getLocation().y; settings.put("SetCommitPropertiesDialog.location.x", x); //$NON-NLS-1$ settings.put("SetCommitPropertiesDialog.location.y", y); //$NON-NLS-1$ x = getShell().getSize().x; y = getShell().getSize().y; settings.put("SetCommitPropertiesDialog.size.x", x); //$NON-NLS-1$ settings.put("SetCommitPropertiesDialog.size.y", y); //$NON-NLS-1$ } protected Point getInitialLocation(Point initialSize) { try { int x = settings.getInt("SetCommitPropertiesDialog.location.x"); //$NON-NLS-1$ int y = settings.getInt("SetCommitPropertiesDialog.location.y"); //$NON-NLS-1$ return new Point(x, y); } catch (NumberFormatException e) {} return super.getInitialLocation(initialSize); } protected Point getInitialSize() { try { int x = settings.getInt("SetCommitPropertiesDialog.size.x"); //$NON-NLS-1$ int y = settings.getInt("SetCommitPropertiesDialog.size.y"); //$NON-NLS-1$ return new Point(x, y); } catch (NumberFormatException e) {} return super.getInitialSize(); } /** * Returns the comment. * @return String */ public String getComment() { String comment; if ((projectProperties != null) && (issue != null) && (issue.length() > 0)) { if (projectProperties.isAppend()) comment = commitCommentArea.getComment() + "\n" + projectProperties.getResolvedMessage(issue) + "\n"; //$NON-NLS-1$ //$NON-NLS-2$ else comment = projectProperties.getResolvedMessage(issue) + "\n" + commitCommentArea.getComment(); //$NON-NLS-1$ } else comment = commitCommentArea.getComment(); commitCommentArea.addComment(commitCommentArea.getComment()); return comment; } protected Button createButton( Composite parent, int id, String label, boolean defaultButton) { Button button = super.createButton(parent, id, label, defaultButton); if (id == IDialogConstants.OK_ID) { okButton = button; if ((commentProperties != null) && (commentProperties.getMinimumLogMessageSize() != 0)) { okButton.setEnabled(false); } } return button; } protected static final int LABEL_WIDTH_HINT = 400; protected Label createWrappingLabel(Composite parent) { Label label = new Label(parent, SWT.LEFT | SWT.WRAP); GridData data = new GridData(); data.horizontalSpan = 1; data.horizontalAlignment = GridData.FILL; data.horizontalIndent = 0; data.grabExcessHorizontalSpace = true; data.widthHint = LABEL_WIDTH_HINT; label.setLayoutData(data); return label; } public void setOldComment(String comment) { commitCommentArea.setProposedComment(comment); } public void setOldAuthor(String oldAuthor) { this.author = oldAuthor; } public String getAuthor() { return author; } protected void handle(Exception exception, String title, String message) { SVNUIPlugin.openError(getShell(), title, message, exception, SVNUIPlugin.LOG_NONTEAM_EXCEPTIONS); } } ShowDifferencesAsUnifiedDiffDialog.java000066400000000000000000000407471203611042400445710ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import java.io.File; import org.eclipse.jface.dialogs.TrayDialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNResource; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.operations.ShowDifferencesAsUnifiedDiffOperation; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class ShowDifferencesAsUnifiedDiffDialog extends TrayDialog { // private ISVNRemoteResource[] remoteResources; private ISVNResource[] remoteResources; private IWorkbenchPart targetPart; // private ISVNRemoteResource fromResource; private ISVNResource fromResource; private Text fileText; private Text fromUrlText; private Button fromHeadButton; private Button fromRevisionButton; private Text fromRevisionText; private Button fromLogButton; private Text toUrlText; private Button toHeadButton; private Button toRevisionButton; private Text toRevisionText; private Button toLogButton; private Button okButton; private boolean success; private String fromRevision; private String toRevision; public ShowDifferencesAsUnifiedDiffDialog(Shell parentShell, ISVNResource[] remoteResources, IWorkbenchPart targetPart) { super(parentShell); this.remoteResources = remoteResources; this.targetPart = targetPart; fromResource = remoteResources[0]; } protected Control createDialogArea(Composite parent) { getShell().setText(Policy.bind("HistoryView.showDifferences")); //$NON-NLS-1$ Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite fileGroup = new Composite(composite, SWT.NULL); GridLayout fileLayout = new GridLayout(); fileLayout.numColumns = 3; fileGroup.setLayout(fileLayout); GridData data = new GridData(SWT.FILL, SWT.FILL, true, false); fileGroup.setLayoutData(data); Label fileLabel = new Label(fileGroup, SWT.NONE); fileLabel.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.file")); //$NON-NLS-1$ fileText = new Text(fileGroup, SWT.BORDER); data = new GridData(SWT.LEFT, SWT.CENTER, true, false); data.widthHint = 300; fileText.setLayoutData(data); Button browseButton = new Button(fileGroup, SWT.PUSH); browseButton.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.fileBrowse")); //$NON-NLS-1$ browseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { FileDialog dialog = new FileDialog(getShell(), SWT.SAVE); dialog.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.fileDialogText")); //$NON-NLS-1$ dialog.setFileName("revision.diff"); //$NON-NLS-1$ String outFile = dialog.open(); if (outFile != null) fileText.setText(outFile); } }); Group fromGroup = new Group(composite, SWT.NULL); fromGroup.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.compareFrom")); //$NON-NLS-1$ GridLayout fromLayout = new GridLayout(); fromLayout.numColumns = 2; fromGroup.setLayout(fromLayout); data = new GridData(SWT.FILL, SWT.FILL, true, false); fromGroup.setLayoutData(data); Label fromUrlLabel = new Label(fromGroup, SWT.NONE); fromUrlLabel.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.url")); //$NON-NLS-1$ fromUrlText = new Text(fromGroup, SWT.BORDER); fromUrlText.setEditable(false); data = new GridData(SWT.FILL, SWT.CENTER, false, false); data.widthHint = 300; fromUrlText.setLayoutData(data); fromUrlText.setText(remoteResources[0].getUrl().toString()); Group fromRevisionGroup = new Group(fromGroup, SWT.NULL); fromRevisionGroup.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.revision")); //$NON-NLS-1$ GridLayout fromRevisionLayout = new GridLayout(); fromRevisionLayout.numColumns = 3; fromRevisionGroup.setLayout(fromRevisionLayout); data = new GridData(SWT.FILL, SWT.TOP, true, false, 3, 1); fromRevisionGroup.setLayoutData(data); fromHeadButton = new Button(fromRevisionGroup, SWT.RADIO); fromHeadButton.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.head")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 3; fromHeadButton.setLayoutData(data); fromRevisionButton = new Button(fromRevisionGroup, SWT.RADIO); fromRevisionButton.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.revision")); //$NON-NLS-1$ fromHeadButton.setSelection(true); fromRevisionText = new Text(fromRevisionGroup, SWT.BORDER); data = new GridData(); data.widthHint = 40; fromRevisionText.setLayoutData(data); fromRevisionText.setEnabled(false); fromLogButton = new Button(fromRevisionGroup, SWT.PUSH); fromLogButton.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.showLog")); //$NON-NLS-1$ fromLogButton.setEnabled(false); fromLogButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { showLog(e.getSource()); } }); Group toGroup = new Group(composite, SWT.NULL); toGroup.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.compareTo")); //$NON-NLS-1$ GridLayout toLayout = new GridLayout(); toLayout.numColumns = 2; toGroup.setLayout(toLayout); data = new GridData(SWT.FILL, SWT.FILL, true, false); toGroup.setLayoutData(data); Label toUrlLabel = new Label(toGroup, SWT.NONE); toUrlLabel.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.url")); //$NON-NLS-1$ toUrlText = new Text(toGroup, SWT.BORDER); toUrlText.setEditable(false); data = new GridData(SWT.FILL, SWT.CENTER, false, false); data.widthHint = 300; toUrlText.setLayoutData(data); toUrlText.setText(remoteResources[1].getUrl().toString()); Group toRevisionGroup = new Group(toGroup, SWT.NULL); toRevisionGroup.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.revision")); //$NON-NLS-1$ GridLayout toRevisionLayout = new GridLayout(); toRevisionLayout.numColumns = 3; toRevisionGroup.setLayout(toRevisionLayout); data = new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1); toRevisionGroup.setLayoutData(data); toHeadButton = new Button(toRevisionGroup, SWT.RADIO); toHeadButton.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.head")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 3; toHeadButton.setLayoutData(data); toRevisionButton = new Button(toRevisionGroup, SWT.RADIO); toRevisionButton.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.revision")); //$NON-NLS-1$ toHeadButton.setSelection(true); toRevisionText = new Text(toRevisionGroup, SWT.BORDER); data = new GridData(); data.widthHint = 40; toRevisionText.setLayoutData(data); toRevisionText.setEnabled(false); toLogButton = new Button(toRevisionGroup, SWT.PUSH); toLogButton.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.showLog")); //$NON-NLS-1$ toLogButton.setEnabled(false); toLogButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { showLog(e.getSource()); } }); if (fromRevision != null) { fromRevisionText.setText(fromRevision); fromRevisionText.setEnabled(true); fromLogButton.setEnabled(true); fromRevisionButton.setSelection(true); fromHeadButton.setSelection(false); } if (toRevision != null) { toRevisionText.setText(toRevision); toRevisionText.setEnabled(true); toLogButton.setEnabled(true); toRevisionButton.setSelection(true); toHeadButton.setSelection(false); } fileText.setFocus(); ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { setOkButtonStatus(); } }; SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { fromRevisionText.setEnabled(fromRevisionButton.getSelection()); fromLogButton.setEnabled(fromRevisionButton.getSelection()); toRevisionText.setEnabled(toRevisionButton.getSelection()); toLogButton.setEnabled(toRevisionButton.getSelection()); setOkButtonStatus(); if (e.getSource() == fromRevisionButton && fromRevisionButton.getSelection()) { fromRevisionText.selectAll(); fromRevisionText.setFocus(); } if (e.getSource() == toRevisionButton && toRevisionButton.getSelection()) { toRevisionText.selectAll(); toRevisionText.setFocus(); } } }; fileText.addModifyListener(modifyListener); fromRevisionText.addModifyListener(modifyListener); toRevisionText.addModifyListener(modifyListener); fromHeadButton.addSelectionListener(selectionListener); fromRevisionButton.addSelectionListener(selectionListener); toHeadButton.addSelectionListener(selectionListener); toRevisionButton.addSelectionListener(selectionListener); // Set F1 Help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.SHOW_UNIFIED_DIFF_DIALOG); return composite; } protected void createButtonsForButtonBar(Composite parent) { Button toggleFromToButton = createButton(parent, 2, Policy.bind("ShowDifferencesAsUnifiedDiffDialog.swap"), false); //$NON-NLS-1$ toggleFromToButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { String fromUrl = fromUrlText.getText().trim(); boolean fromHeadRevision = fromHeadButton.getSelection(); String fromRevision = fromRevisionText.getText().trim(); String toUrl = toUrlText.getText().trim(); boolean toHeadRevision = toHeadButton.getSelection(); String toRevision = toRevisionText.getText().trim(); fromUrlText.setText(toUrl); toUrlText.setText(fromUrl); if (toHeadRevision) { fromHeadButton.setSelection(true); fromRevisionButton.setSelection(false); } else { fromHeadButton.setSelection(false); fromRevisionButton.setSelection(true); } if (fromHeadRevision) { toHeadButton.setSelection(true); toRevisionButton.setSelection(false); } else { toHeadButton.setSelection(false); toRevisionButton.setSelection(true); } fromRevisionText.setText(toRevision); toRevisionText.setText(fromRevision); if (fromResource == remoteResources[0]) fromResource = remoteResources[1]; else fromResource = remoteResources[0]; fromRevisionText.setEnabled(fromRevisionButton.getSelection()); toRevisionText.setEnabled(toRevisionButton.getSelection()); setOkButtonStatus(); } }); super.createButtonsForButtonBar(parent); } protected Button createButton(Composite parent, int id, String label, boolean defaultButton) { Button button = super.createButton(parent, id, label, defaultButton); if (id == IDialogConstants.OK_ID) { okButton = button; okButton.setEnabled(false); } return button; } protected void okPressed() { success = true; final File file = new File(fileText.getText().trim()); if (file.exists()) { if (!MessageDialog.openQuestion(getShell(), Policy.bind("HistoryView.showDifferences"), Policy.bind("HistoryView.overwriteOutfile", file.getName()))) return; } BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { try { SVNUrl fromUrl = null; SVNUrl toUrl = null; SVNRevision fromRevision; SVNRevision toRevision; if (fromHeadButton.getSelection()) fromRevision = SVNRevision.HEAD; else { int fromRevisionInt = Integer.parseInt(fromRevisionText.getText().trim()); long fromRevisionLong = fromRevisionInt; fromRevision = new SVNRevision.Number(fromRevisionLong); } if (toHeadButton.getSelection()) toRevision = SVNRevision.HEAD; else { int toRevisionInt = Integer.parseInt(toRevisionText.getText().trim()); long toRevisionLong = toRevisionInt; toRevision = new SVNRevision.Number(toRevisionLong); } if (fromResource == remoteResources[0]) { fromUrl = remoteResources[0].getUrl(); toUrl = remoteResources[1].getUrl(); } else { fromUrl = remoteResources[1].getUrl(); toUrl = remoteResources[0].getUrl(); } new ShowDifferencesAsUnifiedDiffOperation(targetPart, fromUrl, fromRevision, toUrl, toRevision, file).run(); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("HistoryView.showDifferences"), e.getMessage()); success = false; } } }); if (!success) return; super.okPressed(); } private void setOkButtonStatus() { boolean canFinish = true; if (fileText.getText().trim().length() == 0) canFinish = false; if (fromRevisionButton.getSelection() && fromRevisionText.getText().trim().length() == 0) canFinish = false; if (toRevisionButton.getSelection() && toRevisionText.getText().trim().length() == 0) canFinish = false; okButton.setEnabled(canFinish); } private void showLog(Object sourceButton) { HistoryDialog dialog = null; if (sourceButton == fromLogButton) { if (fromResource instanceof ISVNRemoteResource) { if (fromResource == remoteResources[0]) dialog = new HistoryDialog(getShell(), (ISVNRemoteResource)remoteResources[0]); else dialog = new HistoryDialog(getShell(), (ISVNRemoteResource)remoteResources[1]); } else { if (fromResource == remoteResources[0]) dialog = new HistoryDialog(getShell(), ((ISVNResource)remoteResources[0]).getResource()); else dialog = new HistoryDialog(getShell(), ((ISVNResource)remoteResources[1]).getResource()); } if (dialog.open() == HistoryDialog.CANCEL) return; ILogEntry[] selectedEntries = dialog.getSelectedLogEntries(); if (selectedEntries.length == 0) return; fromRevisionText.setText(Long.toString(selectedEntries[selectedEntries.length - 1].getRevision().getNumber())); } else { if (fromResource instanceof ISVNRemoteResource) { if (fromResource == remoteResources[0]) dialog = new HistoryDialog(getShell(), (ISVNRemoteResource)remoteResources[1]); else dialog = new HistoryDialog(getShell(), (ISVNRemoteResource)remoteResources[0]); } else { if (fromResource == remoteResources[0]) dialog = new HistoryDialog(getShell(), ((ISVNResource)remoteResources[1]).getResource()); else dialog = new HistoryDialog(getShell(), ((ISVNRemoteResource)remoteResources[0]).getResource()); } if (dialog.open() == HistoryDialog.CANCEL) return; ILogEntry[] selectedEntries = dialog.getSelectedLogEntries(); if (selectedEntries.length == 0) return; toRevisionText.setText(Long.toString(selectedEntries[selectedEntries.length - 1].getRevision().getNumber())); } setOkButtonStatus(); } public void setFromRevision(String fromRevision) { this.fromRevision = fromRevision; } public void setToRevision(String toRevision) { this.toRevision = toRevision; } } ShowDifferencesAsUnifiedDiffDialogWC.java000066400000000000000000000364471203611042400450250ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogs/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.dialogs; import java.io.File; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.operations.ShowDifferencesAsUnifiedDiffOperationWC; import org.tigris.subversion.subclipse.ui.util.UrlCombo; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.SVNNodeKind; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class ShowDifferencesAsUnifiedDiffDialogWC extends SvnDialog { private IResource resource; private IWorkbenchPart targetPart; private String selectedResourceUrl; private Button compareButton; private Button diffButton; private Text fileText; private Button browseButton; private UrlCombo toUrlText; private Button toHeadButton; private Text toRevisionText; private Button toLogButton; private Button okButton; private boolean success; private File file; private SVNUrl toUrl; private SVNRevision toRevision; private SVNRevision pegRevision; private ISVNLocalResource svnResource; private boolean diffToOutputFile; private ShowDifferencesAsUnifiedDiffOperationWC operation; public ShowDifferencesAsUnifiedDiffDialogWC(Shell parentShell, IResource resource, IWorkbenchPart targetPart) { super(parentShell, "ShowDifferencesAsUnifiedDiffDialogWC"); //$NON-NLS-1$ this.resource = resource; this.targetPart = targetPart; } protected Control createDialogArea(Composite parent) { getShell().setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.branchTag")); //$NON-NLS-1$ Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); Group fromGroup = new Group(composite, SWT.NULL); fromGroup.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.compareFrom")); //$NON-NLS-1$ GridLayout fromLayout = new GridLayout(); fromLayout.numColumns = 2; fromGroup.setLayout(fromLayout); GridData data = new GridData(SWT.FILL, SWT.FILL, true, false); fromGroup.setLayoutData(data); Label pathLabel = new Label(fromGroup, SWT.NONE); pathLabel.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.path")); //$NON-NLS-1$ Text pathText = new Text(fromGroup, SWT.BORDER); data = new GridData(GridData.FILL_HORIZONTAL); pathText.setLayoutData(data); pathText.setEditable(false); pathText.setText(resource.getFullPath().toString()); Group toGroup = new Group(composite, SWT.NULL); toGroup.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.compareTo")); //$NON-NLS-1$ GridLayout toLayout = new GridLayout(); toLayout.numColumns = 3; toGroup.setLayout(toLayout); data = new GridData(SWT.FILL, SWT.FILL, true, false); toGroup.setLayoutData(data); Label toUrlLabel = new Label(toGroup, SWT.NONE); toUrlLabel.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.url")); //$NON-NLS-1$ toUrlText = new UrlCombo(toGroup, SWT.NONE); toUrlText.init(resource.getProject().getName()); toUrlText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); ISVNLocalResource localResource = SVNWorkspaceRoot.getSVNResourceFor(resource); if (localResource != null && localResource.getUrl() != null) { selectedResourceUrl = localResource.getUrl().toString(); toUrlText.setText(selectedResourceUrl); } Button urlBrowseButton = new Button(toGroup, SWT.PUSH); urlBrowseButton.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.browse")); //$NON-NLS-1$ urlBrowseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { ChooseUrlDialog dialog = new ChooseUrlDialog(getShell(), resource); if (resource instanceof IContainer) dialog.setFoldersOnly(true); if (dialog.open() == ChooseUrlDialog.CANCEL) return; String url = dialog.getUrl(); if (url != null) toUrlText.setText(url); setOkButtonStatus(); } }); Composite toRevisionGroup = new Composite(toGroup, SWT.NULL); GridLayout toRevisionLayout = new GridLayout(); toRevisionLayout.numColumns = 3; toRevisionLayout.marginWidth = 0; toRevisionLayout.marginHeight = 0; toRevisionGroup.setLayout(toRevisionLayout); data = new GridData(GridData.FILL_BOTH); data.horizontalSpan = 3; toRevisionGroup.setLayoutData(data); toHeadButton = new Button(toRevisionGroup, SWT.CHECK); toHeadButton.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.head")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 3; toHeadButton.setLayoutData(data); toHeadButton.setSelection(true); Label revisionLabel = new Label(toRevisionGroup, SWT.NONE); revisionLabel.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.revision")); //$NON-NLS-1$ toRevisionText = new Text(toRevisionGroup, SWT.BORDER); data = new GridData(); data.widthHint = 40; toRevisionText.setLayoutData(data); toRevisionText.setEnabled(false); toLogButton = new Button(toRevisionGroup, SWT.PUSH); toLogButton.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.showLog")); //$NON-NLS-1$ toLogButton.setEnabled(false); toLogButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { showLog(e.getSource()); } }); Group fileGroup = new Group(composite, SWT.NULL); fileGroup.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.compareType")); //$NON-NLS-1$ GridLayout fileLayout = new GridLayout(); fileLayout.numColumns = 3; fileGroup.setLayout(fileLayout); data = new GridData(SWT.FILL, SWT.FILL, true, false); fileGroup.setLayoutData(data); compareButton = new Button(fileGroup, SWT.RADIO); compareButton.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.graphical")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 3; compareButton.setLayoutData(data); diffButton = new Button(fileGroup, SWT.RADIO); diffButton.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.diff")); //$NON-NLS-1$ compareButton.setSelection(true); fileText = new Text(fileGroup, SWT.BORDER); data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); fileText.setLayoutData(data); fileText.setEnabled(false); browseButton = new Button(fileGroup, SWT.PUSH); browseButton.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.fileBrowse")); //$NON-NLS-1$ browseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { FileDialog dialog = new FileDialog(getShell(), SWT.SAVE); dialog.setText(Policy.bind("ShowDifferencesAsUnifiedDiffDialog.fileDialogText")); //$NON-NLS-1$ dialog.setFileName("revision.diff"); //$NON-NLS-1$ String outFile = dialog.open(); if (outFile != null) fileText.setText(outFile); } }); toUrlText.setFocus(); ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { setOkButtonStatus(); } }; SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { toRevisionText.setEnabled(!toHeadButton.getSelection()); toLogButton.setEnabled(!toHeadButton.getSelection() && toUrlText.getText().trim().length() > 0); setOkButtonStatus(); if (e.getSource() == toHeadButton && !toHeadButton.getSelection()) { toRevisionText.selectAll(); toRevisionText.setFocus(); } } }; SelectionListener compareTypeListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (diffButton.getSelection()) { fileText.setEnabled(true); browseButton.setEnabled(true); fileText.selectAll(); fileText.setFocus(); } else { fileText.setEnabled(false); browseButton.setEnabled(false); } setOkButtonStatus(); } }; fileText.addModifyListener(modifyListener); toUrlText.getCombo().addModifyListener(modifyListener); toRevisionText.addModifyListener(modifyListener); toHeadButton.addSelectionListener(selectionListener); compareButton.addSelectionListener(compareTypeListener); diffButton.addSelectionListener(compareTypeListener); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; toRevisionText.addFocusListener(focusListener); fileText.addFocusListener(focusListener); return composite; } protected Button createButton(Composite parent, int id, String label, boolean defaultButton) { Button button = super.createButton(parent, id, label, defaultButton); if (id == IDialogConstants.OK_ID) { okButton = button; if (toUrlText != null && toUrlText.getText().trim().length() == 0) { okButton.setEnabled(false); } } return button; } protected void okPressed() { success = true; BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { ISVNRepositoryLocation repository = null; ISVNClientAdapter svnClient = null; try { if (toHeadButton.getSelection()) toRevision = SVNRevision.HEAD; else { int toRevisionInt = Integer.parseInt(toRevisionText.getText().trim()); long toRevisionLong = toRevisionInt; toRevision = new SVNRevision.Number(toRevisionLong); } toUrl = new SVNUrl(toUrlText.getText().trim()); File path = new File(resource.getLocation().toString()); svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); pegRevision = null; if (toUrlText.getText().equals(selectedResourceUrl)) { ISVNRemoteResource baseResource = svnResource.getBaseResource(); if (baseResource != null) { pegRevision = baseResource.getLastChangedRevision(); } } if (pegRevision == null) { pegRevision = toRevision; } repository = svnResource.getRepository(); svnClient = repository.getSVNClient(); ISVNInfo svnInfo = svnClient.getInfo(toUrl, toRevision, pegRevision); SVNNodeKind nodeKind = svnInfo.getNodeKind(); if (resource instanceof IContainer) { if (nodeKind.toInt() == SVNNodeKind.FILE.toInt()) { MessageDialog.openError(getShell(), Policy.bind("ShowDifferencesAsUnifiedDiffDialog.branchTag"), Policy.bind("ShowDifferencesAsUnifiedDiffDialog.fileToFolder")); success = false; return; } } else { if (nodeKind.toInt() == SVNNodeKind.DIR.toInt()) { MessageDialog.openError(getShell(), Policy.bind("ShowDifferencesAsUnifiedDiffDialog.branchTag"), Policy.bind("ShowDifferencesAsUnifiedDiffDialog.fileToFolder")); success = false; return; } } if (diffButton.getSelection()) { diffToOutputFile = true; file = new File(fileText.getText().trim()); if (file.exists()) { if (!MessageDialog.openQuestion(getShell(), Policy.bind("HistoryView.showDifferences"), Policy.bind("HistoryView.overwriteOutfile", file.getName()))) return; } } else { file = File.createTempFile("revision", ".diff"); file.deleteOnExit(); diffToOutputFile = false; success = true; } operation = new ShowDifferencesAsUnifiedDiffOperationWC(targetPart, path, toUrl, toRevision, file); operation.setGraphicalCompare(!diffButton.getSelection()); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("HistoryView.showDifferences"), e.getMessage()); success = false; } finally { if (repository != null) { repository.returnSVNClient(svnClient); } } } }); if (!success) return; toUrlText.saveUrl(); super.okPressed(); } private void setOkButtonStatus() { boolean canFinish = true; if (diffButton.getSelection() && fileText.getText().trim().length() == 0) canFinish = false; if (toUrlText.getText().trim().length() == 0) canFinish = false; if (!toHeadButton.getSelection() && toRevisionText.getText().trim().length() == 0) canFinish = false; okButton.setEnabled(canFinish); } private void showLog(Object sourceButton) { try { SVNUrl url = new SVNUrl(toUrlText.getText().trim()); ISVNRemoteResource remoteResource = SVNWorkspaceRoot.getSVNResourceFor(resource).getRepository().getRemoteFile(url); HistoryDialog dialog = new HistoryDialog(getShell(), remoteResource); if (dialog.open() == HistoryDialog.CANCEL) return; ILogEntry[] selectedEntries = dialog.getSelectedLogEntries(); if (selectedEntries.length == 0) return; toRevisionText.setText(Long.toString(selectedEntries[selectedEntries.length - 1].getRevision().getNumber())); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("HistoryView.showDifferences"), e.getMessage()); //$NON-NLS-1$ } setOkButtonStatus(); } public ShowDifferencesAsUnifiedDiffOperationWC getOperation() { return operation; } public SVNUrl getToUrl() { return toUrl; } public SVNRevision getToRevision() { return toRevision; } public SVNRevision getPegRevision() { return pegRevision; } public ISVNLocalResource getSvnResource() { return svnResource; } public boolean isDiffToOutputFile() { return diffToOutputFile; } public File getFile() { return file; } } ShowRevisionsDialog.java000066400000000000000000000455431203611042400417530ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogspackage org.tigris.subversion.subclipse.ui.dialogs; import java.io.File; import java.text.DateFormat; import java.util.Date; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.TrayDialog; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.TextViewer; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeColumn; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.ui.model.WorkbenchContentProvider; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.history.AliasManager; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.history.LogEntry; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.history.ChangePathsFlatViewer; import org.tigris.subversion.subclipse.ui.history.ChangePathsTableProvider; import org.tigris.subversion.subclipse.ui.history.ChangePathsTreeViewer; import org.tigris.subversion.subclipse.ui.history.SVNHistoryPage; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class ShowRevisionsDialog extends TrayDialog { private ILogEntry logEntry; private IResource resource; private ISVNRemoteResource remoteResource; private boolean includeTags; private SashForm sashForm; private StructuredViewer changePathsViewer; private TreeViewer treeHistoryViewer; private TextViewer textViewer; private IAction showDifferencesAsUnifiedDiffAction; private IDialogSettings settings; private TreeColumn revisionColumn; private TreeColumn tagsColumn; private TreeColumn dateColumn; private TreeColumn authorColumn; private TreeColumn commentColumn; private SVNHistoryPage historyPage; private String title; private boolean selectFirst; private static final int WIDTH_HINT = 500; private final static int LOG_HEIGHT_HINT = 200; private final static int COMMENT_HEIGHT_HINT = 100; //column constants private final static int COL_REVISION = 0; private final static int COL_TAGS = 1; private final static int COL_DATE = 2; private final static int COL_AUTHOR = 3; private final static int COL_COMMENT = 4; public ShowRevisionsDialog(Shell parentShell, ILogEntry logEntry, IResource resource, boolean includeTags, SVNHistoryPage historyPage) { super(parentShell); int shellStyle = getShellStyle(); setShellStyle(shellStyle | SWT.RESIZE); this.logEntry = logEntry; this.resource = resource; this.includeTags = includeTags; this.historyPage = historyPage; settings = SVNUIPlugin.getPlugin().getDialogSettings(); } public ShowRevisionsDialog(Shell parentShell, ILogEntry logEntry, ISVNRemoteResource remoteResource, boolean includeTags, SVNHistoryPage historyPage) { super(parentShell); int shellStyle = getShellStyle(); setShellStyle(shellStyle | SWT.RESIZE); this.logEntry = logEntry; this.remoteResource = remoteResource; this.includeTags = includeTags; this.historyPage = historyPage; settings = SVNUIPlugin.getPlugin().getDialogSettings(); } protected Control createDialogArea(Composite parent) { if (title == null) getShell().setText(Policy.bind("HistoryView.showMergedRevisions")); //$NON-NLS-1$ else getShell().setText(title); Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); GridData data = new GridData(GridData.FILL_BOTH); composite.setLayoutData(data); sashForm = new SashForm(composite, SWT.VERTICAL); sashForm.setLayout(new GridLayout()); sashForm.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite historyGroup = new Composite(sashForm, SWT.NULL); historyGroup.setLayout(new GridLayout()); historyGroup.setLayoutData(new GridData(GridData.FILL_BOTH)); Tree tree = new Tree(historyGroup, SWT.BORDER | SWT.FULL_SELECTION); treeHistoryViewer = new TreeViewer(tree); data = new GridData(GridData.FILL_BOTH); data.widthHint = WIDTH_HINT; data.heightHint = LOG_HEIGHT_HINT; treeHistoryViewer.getTree().setLayoutData(data); treeHistoryViewer.getTree().setHeaderVisible(true); revisionColumn = new TreeColumn(treeHistoryViewer.getTree(), SWT.NONE); revisionColumn.setResizable(true); revisionColumn.setText(Policy.bind("HistoryView.revision")); //$NON-NLS-1$ int revisionWidth = 75; int tagsWidth = 225; int dateWidth = 100; int authorWidth = 100; int commentWidth = 300; try { revisionWidth = settings.getInt("ShowRevisionsDialog.width_revision"); dateWidth = settings.getInt("ShowRevisionsDialog.width_date"); authorWidth = settings.getInt("ShowRevisionsDialog.width_author"); commentWidth = settings.getInt("ShowRevisionsDialog.width_comment"); tagsWidth = settings.getInt("ShowRevisionsDialog.width_tag"); } catch (Exception e) {} revisionColumn.setWidth(revisionWidth); if (includeTags) { tagsColumn = new TreeColumn(treeHistoryViewer.getTree(), SWT.NONE); tagsColumn.setResizable(true); tagsColumn.setText(Policy.bind("HistoryView.tags")); //$NON-NLS-1$ tagsColumn.setWidth(tagsWidth); } dateColumn = new TreeColumn(treeHistoryViewer.getTree(), SWT.NONE); dateColumn.setResizable(true); dateColumn.setText(Policy.bind("HistoryView.date")); //$NON-NLS-1$ dateColumn.setWidth(dateWidth); authorColumn = new TreeColumn(treeHistoryViewer.getTree(), SWT.NONE); authorColumn.setResizable(true); authorColumn.setText(Policy.bind("HistoryView.author")); //$NON-NLS-1$ authorColumn.setWidth(authorWidth); commentColumn = new TreeColumn(treeHistoryViewer.getTree(), SWT.NONE); commentColumn.setResizable(true); commentColumn.setText(Policy.bind("HistoryView.comment")); //$NON-NLS-1$ commentColumn.setWidth(commentWidth); treeHistoryViewer.setLabelProvider(new ITableLabelProvider() { public Image getColumnImage(Object element, int columnIndex) { return null; } public String getColumnText(Object element, int columnIndex) { ILogEntry entry = (ILogEntry)element; int index = columnIndex; if (index > 0 && !includeTags) index++; switch (index) { case COL_REVISION: String revision = entry.getRevision().toString(); return revision; case COL_TAGS: return AliasManager.getAliasesAsString(entry.getTags()); case COL_DATE: Date date = entry.getDate(); if (date == null) return Policy.bind("notAvailable"); //$NON-NLS-1$ return DateFormat.getInstance().format(date); case COL_AUTHOR: if(entry.getAuthor() == null) return Policy.bind("noauthor"); //$NON-NLS-1$ return entry.getAuthor(); case COL_COMMENT: String comment = entry.getComment(); if (comment == null) return ""; //$NON-NLS-1$ int rIndex = comment.indexOf("\r"); //$NON-NLS-1$ int nIndex = comment.indexOf("\n"); //$NON-NLS-1$ if( (rIndex == -1) && (nIndex == -1) ) return comment; if( (rIndex == 0) || (nIndex == 0) ) return Policy.bind("HistoryView.[...]_4"); //$NON-NLS-1$ if(rIndex != -1) return Policy.bind("SVNCompareRevisionsInput.truncate", comment.substring(0, rIndex)); //$NON-NLS-1$ else return Policy.bind("SVNCompareRevisionsInput.truncate", comment.substring(0, nIndex)); //$NON-NLS-1$ } return null; } public void addListener(ILabelProviderListener listener) { } public void dispose() { } public boolean isLabelProperty(Object element, String property) { return false; } public void removeListener(ILabelProviderListener listener) { } }); treeHistoryViewer.setContentProvider(new WorkbenchContentProvider() { public Object[] getChildren(Object element) { if (element instanceof ILogEntry) { return ((ILogEntry)element).getChildMessages(); } ILogEntry[] logEntries = { logEntry }; return logEntries; } public Object[] getElements(Object element) { return getChildren(element); } public boolean hasChildren(Object element) { if (element instanceof ILogEntry) { return ((ILogEntry)element).getNumberOfChildren() > 0; } return false; } }); treeHistoryViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { ISelection selection = event.getSelection(); if (selection == null || !(selection instanceof IStructuredSelection)) { textViewer.setDocument(new Document("")); //$NON-NLS-1$ changePathsViewer.setInput(null); return; } IStructuredSelection ss = (IStructuredSelection)selection; if (ss.size() != 1) { textViewer.setDocument(new Document("")); //$NON-NLS-1$ changePathsViewer.setInput(null); return; } LogEntry entry = (LogEntry)ss.getFirstElement(); textViewer.setDocument(new Document(entry.getComment())); changePathsViewer.setInput(entry); } }); if (resource == null) treeHistoryViewer.setInput(remoteResource); else treeHistoryViewer.setInput(resource); treeHistoryViewer.resetFilters(); treeHistoryViewer.expandToLevel(2); MenuManager menuMgr = new MenuManager(); Menu menu = menuMgr.createContextMenu(treeHistoryViewer.getTree()); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager menuMgr) { fillTreeMenu(menuMgr); } }); menuMgr.setRemoveAllWhenShown(true); treeHistoryViewer.getTree().setMenu(menu); Composite commentGroup = new Composite(sashForm, SWT.NULL); commentGroup.setLayout(new GridLayout()); commentGroup.setLayoutData(new GridData(GridData.FILL_BOTH)); textViewer = new TextViewer(commentGroup, SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI | SWT.BORDER | SWT.READ_ONLY); data = new GridData(GridData.FILL_BOTH); data.heightHint = COMMENT_HEIGHT_HINT; data.widthHint = WIDTH_HINT; textViewer.getControl().setLayoutData(data); Composite pathGroup = new Composite(sashForm, SWT.NULL); pathGroup.setLayout(new GridLayout()); pathGroup.setLayoutData(new GridData(GridData.FILL_BOTH)); IPreferenceStore store = SVNUIPlugin.getPlugin().getPreferenceStore(); int mode = store.getInt(ISVNUIConstants.PREF_AFFECTED_PATHS_MODE); IStructuredContentProvider contentProvider = new IStructuredContentProvider() { public Object[] getElements(Object inputElement) { if ((inputElement == null) || (!(inputElement instanceof ILogEntry))) { return null; } ILogEntry logEntry = (ILogEntry)inputElement; return logEntry.getLogEntryChangePaths(); } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } }; switch(mode) { case ISVNUIConstants.MODE_COMPRESSED: changePathsViewer = new ChangePathsTreeViewer(pathGroup, historyPage); break; case ISVNUIConstants.MODE_FLAT2: changePathsViewer = new ChangePathsFlatViewer(pathGroup, historyPage); break; default: changePathsViewer = new ChangePathsTableProvider(pathGroup, contentProvider); break; } try { int[] weights = new int[3]; weights[0] = settings.getInt("ShowRevisionsDialog.weights.0"); //$NON-NLS-1$ weights[1] = settings.getInt("ShowRevisionsDialog.weights.1"); //$NON-NLS-1$ weights[2] = settings.getInt("ShowRevisionsDialog.weights.2"); //$NON-NLS-1$ sashForm.setWeights(weights); } catch (Exception e) {} if (selectFirst && treeHistoryViewer.getTree().getItemCount() > 0) { TreeItem item = treeHistoryViewer.getTree().getItem(0); treeHistoryViewer.getTree().setSelection(item); // Method not available in 3.3 // treeHistoryViewer.getTree().select(item); treeHistoryViewer.setSelection(treeHistoryViewer.getSelection()); changePathsViewer.refresh(); if (changePathsViewer instanceof ChangePathsTreeViewer) ((ChangePathsTreeViewer)changePathsViewer).expandAll(); } return composite; } private void fillTreeMenu(IMenuManager manager) { ISelection sel = treeHistoryViewer.getSelection(); if( !sel.isEmpty()) { if(sel instanceof IStructuredSelection) { if(((IStructuredSelection) sel).size() == 1) { manager.add(getShowDifferencesAsUnifiedDiffAction()); } } } } // get differences as unified diff action (context menu) private IAction getShowDifferencesAsUnifiedDiffAction() { if(showDifferencesAsUnifiedDiffAction == null) { showDifferencesAsUnifiedDiffAction = new Action( Policy.bind("HistoryView.showDifferences"), SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_MENU_DIFF)) { //$NON-NLS-1$ public void run() { ISelection selection = treeHistoryViewer.getSelection(); if( !(selection instanceof IStructuredSelection)) return; IStructuredSelection ss = (IStructuredSelection)selection; ILogEntry currentSelection = (ILogEntry)ss.getFirstElement(); FileDialog dialog = new FileDialog(getShell(), SWT.SAVE); dialog.setText("Select Unified Diff Output File"); dialog.setFileName("revision" + currentSelection.getRevision().getNumber() + ".diff"); //$NON-NLS-1$ String outFile = dialog.open(); if(outFile != null) { final SVNUrl url = currentSelection.getResource().getUrl(); final SVNRevision oldUrlRevision = new SVNRevision.Number(currentSelection.getRevision().getNumber() - 1); final SVNRevision newUrlRevision = currentSelection.getRevision(); final File file = new File(outFile); if(file.exists()) { if( !MessageDialog.openQuestion(getShell(), Policy.bind("HistoryView.showDifferences"), Policy .bind("HistoryView.overwriteOutfile", file.getName()))) return; } BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { ISVNClientAdapter client = null; try { client = SVNProviderPlugin.getPlugin().getSVNClientManager().getSVNClient(); client.diff(url, oldUrlRevision, newUrlRevision, file, true); } catch(Exception e) { MessageDialog.openError(getShell(), Policy.bind("HistoryView.showDifferences"), e .getMessage()); } finally { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } } }); } } }; } return showDifferencesAsUnifiedDiffAction; } protected void cancelPressed() { saveLocation(); super.cancelPressed(); } protected void okPressed() { saveLocation(); super.okPressed(); } public void setSelectFirst(boolean selectFirst) { this.selectFirst = selectFirst; } public void setTitle(String title) { this.title = title; } protected Point getInitialLocation(Point initialSize) { try { int x = settings.getInt("ShowRevisionsDialog.location.x"); //$NON-NLS-1$ int y = settings.getInt("ShowRevisionsDialog.location.y"); //$NON-NLS-1$ return new Point(x, y); } catch (NumberFormatException e) {} return super.getInitialLocation(initialSize); } protected Point getInitialSize() { try { int x = settings.getInt("ShowRevisionsDialog.size.x"); //$NON-NLS-1$ int y = settings.getInt("ShowRevisionsDialog.size.y"); //$NON-NLS-1$ return new Point(x, y); } catch (NumberFormatException e) {} return new Point(400, 400); } private void saveLocation() { settings.put("ShowRevisionsDialog.width_revision", revisionColumn.getWidth()); //$NON-NLS-1$ settings.put("ShowRevisionsDialog.width_date", dateColumn.getWidth()); //$NON-NLS-1$ settings.put("ShowRevisionsDialog.width_author", authorColumn.getWidth()); //$NON-NLS-1$ settings.put("ShowRevisionsDialog.width_comment", commentColumn.getWidth()); //$NON-NLS-1$ if (tagsColumn != null) settings.put("ShowRevisionsDialog.width_tags", tagsColumn.getWidth()); //$NON-NLS-1$ int x = getShell().getLocation().x; int y = getShell().getLocation().y; settings.put("ShowRevisionsDialog.location.x", x); //$NON-NLS-1$ settings.put("ShowRevisionsDialog.location.y", y); //$NON-NLS-1$ x = getShell().getSize().x; y = getShell().getSize().y; settings.put("ShowRevisionsDialog.size.x", x); //$NON-NLS-1$ settings.put("ShowRevisionsDialog.size.y", y); //$NON-NLS-1$ int[] weights = sashForm.getWeights(); for (int i = 0; i < weights.length; i++) settings.put("ShowRevisionsDialog.weights." + i, weights[i]); //$NON-NLS-1$ } } SvnDialog.java000066400000000000000000000050371203611042400376710ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogspackage org.tigris.subversion.subclipse.ui.dialogs; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.TrayDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public abstract class SvnDialog extends TrayDialog { private String id; private IDialogSettings settings = SVNUIPlugin.getPlugin().getDialogSettings(); protected static final int LABEL_WIDTH_HINT = 400; public SvnDialog(Shell shell, String id) { super(shell); this.id = id; int shellStyle = getShellStyle(); setShellStyle(shellStyle | SWT.RESIZE); } protected void cancelPressed() { saveLocation(); super.cancelPressed(); } protected void okPressed() { saveLocation(); super.okPressed(); } protected Point getInitialLocation(Point initialSize) { if (id != null) { try { int x = settings.getInt(id + ".location.x"); //$NON-NLS-1$ int y = settings.getInt(id + ".location.y"); //$NON-NLS-1$ return new Point(x, y); } catch (NumberFormatException e) {} } return super.getInitialLocation(initialSize); } protected Point getInitialSize() { if (id != null) { try { int x = settings.getInt(id + ".size.x"); //$NON-NLS-1$ int y = settings.getInt(id + ".size.y"); //$NON-NLS-1$ return new Point(x, y); } catch (NumberFormatException e) {} } return super.getInitialSize(); } protected void saveLocation() { if (id != null) { int x = getShell().getLocation().x; int y = getShell().getLocation().y; settings.put(id + ".location.x", x); //$NON-NLS-1$ settings.put(id + ".location.y", y); //$NON-NLS-1$ x = getShell().getSize().x; y = getShell().getSize().y; settings.put(id + ".size.x", x); //$NON-NLS-1$ settings.put(id + ".size.y", y); //$NON-NLS-1$ } } protected Label createWrappingLabel(Composite parent, String text, int indent, int horizontalSpan) { Label label = new Label(parent, SWT.LEFT | SWT.WRAP); label.setText(text); GridData data = new GridData(); data.horizontalSpan = horizontalSpan; data.horizontalAlignment = GridData.FILL; data.horizontalIndent = indent; data.grabExcessHorizontalSpace = true; data.widthHint = LABEL_WIDTH_HINT; label.setLayoutData(data); return label; } } UnsupportedPasswordStoresDialog.java000066400000000000000000000077471203611042400444100ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/dialogspackage org.tigris.subversion.subclipse.ui.dialogs; import java.net.URL; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.forms.events.HyperlinkAdapter; import org.eclipse.ui.forms.events.HyperlinkEvent; import org.eclipse.ui.forms.widgets.FormToolkit; import org.eclipse.ui.forms.widgets.Hyperlink; import org.tigris.subversion.subclipse.ui.Messages; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class UnsupportedPasswordStoresDialog extends SvnDialog { public UnsupportedPasswordStoresDialog(Shell shell) { super(shell, "passwordStores"); //$NON-NLS-1$ } protected Control createDialogArea(Composite parent) { getShell().setText(Messages.UnsupportedPasswordStoresDialog_0); Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); Label problemLabel = new Label(composite, SWT.WRAP); problemLabel.setText(Messages.UnsupportedPasswordStoresDialog_1); GridData gd = new GridData(); gd.widthHint = 500; problemLabel.setLayoutData(gd); new Label(composite, SWT.NONE); Composite linkGroup = new Composite(composite, SWT.NULL); GridLayout linkLayout = new GridLayout(); linkLayout.numColumns = 2; linkLayout.marginWidth = 0; linkLayout.marginHeight = 0; linkGroup.setLayout(linkLayout); gd = new GridData(GridData.FILL_HORIZONTAL); linkGroup.setLayoutData(gd); Label linkLabel = new Label(linkGroup, SWT.NONE); linkLabel.setText(Messages.UnsupportedPasswordStoresDialog_2); FormToolkit toolkit = new FormToolkit(parent.getDisplay()); toolkit.setBackground(parent.getBackground()); Hyperlink infoLink = toolkit.createHyperlink(linkGroup, Messages.UnsupportedPasswordStoresDialog_3, SWT.NONE); infoLink.addHyperlinkListener(new HyperlinkAdapter() { public void linkActivated(HyperlinkEvent evt) { try { PlatformUI.getWorkbench().getBrowserSupport().getExternalBrowser().openURL(new URL("http://subclipse.tigris.org/wiki/JavaHL#head-3a1d2d3c54791d2d751794e5d6645f1d77d95b32")); //$NON-NLS-1$ } catch (Exception e) {} } }); new Label(linkGroup, SWT.NONE); Group configGroup = new Group(composite, SWT.NULL); GridLayout configLayout = new GridLayout(); configLayout.numColumns = 2; configLayout.marginWidth = 0; configLayout.marginHeight = 0; configGroup.setLayout(configLayout); gd = new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL); configGroup.setLayoutData(gd); configGroup.setText(Messages.UnsupportedPasswordStoresDialog_5); Label fileLabel = new Label(configGroup, SWT.NONE); fileLabel.setText(Messages.UnsupportedPasswordStoresDialog_6); Text fileText = new Text(configGroup, SWT.READ_ONLY | SWT.BORDER); gd = new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL); fileText.setLayoutData(gd); fileText.setText(SVNUIPlugin.getPlugin().getConfigFile().getAbsolutePath()); Label storesLabel = new Label(configGroup, SWT.NONE); storesLabel.setText(Messages.UnsupportedPasswordStoresDialog_7); Text storesText = new Text(configGroup, SWT.READ_ONLY | SWT.BORDER); gd = new GridData(GridData.GRAB_HORIZONTAL | GridData.FILL_HORIZONTAL); storesText.setLayoutData(gd); String passwordStores = SVNUIPlugin.getPlugin().getPasswordStores(); if (passwordStores == null) { passwordStores = "gnome-keyring"; } storesText.setText(passwordStores); new Label(composite, SWT.NONE); Label editLabel = new Label(composite, SWT.WRAP); editLabel.setText(Messages.UnsupportedPasswordStoresDialog_8); gd = new GridData(); gd.widthHint = 500; editLabel.setLayoutData(gd); fileText.setFocus(); return composite; } } 000077500000000000000000000000001203611042400347775ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/editorRemoteFileEditorInput.java000066400000000000000000000205031203611042400420640ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/editor/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.editor; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import org.eclipse.core.resources.IStorage; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.team.core.TeamException; import org.eclipse.team.core.variants.IResourceVariant; import org.eclipse.ui.IPathEditorInput; import org.eclipse.ui.IPersistableElement; import org.eclipse.ui.IStorageEditorInput; import org.eclipse.ui.model.IWorkbenchAdapter; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * An editor input for a file in a repository. */ public class RemoteFileEditorInput implements IWorkbenchAdapter, IStorageEditorInput, IPathEditorInput { private ISVNRemoteFile file; protected IStorage storage; private File tempFile; /** * Creates FileEditionEditorInput on the given file. */ public RemoteFileEditorInput(ISVNRemoteFile file, IProgressMonitor monitor) { this.file = file; try { initializeStorage(file, monitor); } catch (TeamException e) { // Log and continue SVNUIPlugin.log(e); } } /** * Initialize the strogae of this instance from the given file. * @param file the file being displayed * @param monitor a progress monitor */ protected void initializeStorage(ISVNRemoteFile file, IProgressMonitor monitor) throws TeamException { // Cache the contents of the file for use in the editor storage = ((IResourceVariant)file).getStorage(monitor); } /** * Returns whether the editor input exists. *

* This method is primarily used to determine if an editor input should * appear in the "File Most Recently Used" menu. An editor input will appear * in the list until the return value of exists becomes * false or it drops off the bottom of the list. * * @return true if the editor input exists; false * otherwise */ public boolean exists() { return true; } public boolean equals(Object o) { if (!(o instanceof RemoteFileEditorInput)) return false; RemoteFileEditorInput input = (RemoteFileEditorInput)o; return file.equals(input.file); } /** * Returns an object which is an instance of the given class * associated with this object. Returns null if * no such object can be found. * * @param adapter the adapter class to look up * @return a object castable to the given class, * or null if this object does not * have an adapter for the given class */ public Object getAdapter(Class adapter) { if (adapter == IWorkbenchAdapter.class) { return this; } return null; } /** * Returns the children of this object. When this object * is displayed in a tree, the returned objects will be this * element's children. Returns an empty array if this * object has no children. * * @param object The object to get the children for. */ public Object[] getChildren(Object o) { return new Object[0]; } /** * Returns the content type of the input. For instance, if the input * wraps an IFile the content type would be derived from * the extension or mime type. If the input wraps another object it * may just be the object type. The content type is used for * editor mapping. */ public String getContentType() { String name = file.getName(); return name.substring(name.lastIndexOf('.')+1); } /** * Returns the image descriptor for this input. * * @return the image descriptor for this input */ public ImageDescriptor getImageDescriptor() { IWorkbenchAdapter fileAdapter = (IWorkbenchAdapter)file.getAdapter(IWorkbenchAdapter.class); return fileAdapter == null ? null : fileAdapter.getImageDescriptor(file); } /** * @see IWorkbenchAdapter#getImageDescriptor */ public ImageDescriptor getImageDescriptor(Object object) { IWorkbenchAdapter fileAdapter = (IWorkbenchAdapter)file.getAdapter(IWorkbenchAdapter.class); return fileAdapter == null ? null : fileAdapter.getImageDescriptor(file); } /** * @see IWorkbenchAdapter#getLabel */ public String getLabel(Object o) { return file.getName(); } /** * Returns the input name for display purposes. For instance, if * the fully qualified input name is "a\b\MyFile.gif" the return value for * getName is "MyFile.gif". */ public String getName() { String name = file.getName(); SVNRevision.Number revision = file.getLastChangedRevision(); return Policy.bind("nameAndRevision", name, (revision != null) ? revision.toString() : ""); //$NON-NLS-1$ //$NON-NLS-2$ } /** * Returns the logical parent of the given object in its tree. * Returns null if there is no parent, or if this object doesn't * belong to a tree. * * @param object The object to get the parent for. */ public Object getParent(Object o) { return null; } /* * Returns an interface used to persist the object. If the editor input * cannot be persisted this method returns null. */ public IPersistableElement getPersistable() { //not persistable return null; } /** * Returns the underlying IStorage object. * * @return an IStorage object. * @exception CoreException if this method fails */ public IStorage getStorage() throws CoreException { if (storage == null) { initializeStorage(file, new NullProgressMonitor()); } return storage; } /** * Returns the tool tip text for this editor input. This text * is used to differentiate between two input with the same name. * For instance, MyClass.java in folder X and MyClass.java in folder Y. *

* The format of the path will vary with each input type. For instance, * if the editor input is of type IFileEditorInput this method * should return the fully qualified resource path. For editor input of * other types it may be different. *

* @return the tool tip text */ public String getToolTipText() { SVNUrl url = file.getUrl(); return url.toString(); } /** * Returns the remote SVN file shown in this editor input. * @return the remote file handle. */ public ISVNRemoteFile getSVNRemoteFile() { return file; } public IPath getPath() { try { return new Path(writeToTempFile().getAbsolutePath()); } catch (Exception e) { SVNUIPlugin.log(0, e.getMessage(), e); } return null; } public File writeToTempFile() throws IOException, CoreException { if (tempFile == null) { InputStream in = null; BufferedOutputStream fOut = null; tempFile = null; // Save InputStream to the file. in = this.getStorage().getContents(); try { tempFile = File.createTempFile("svn", "." + this.getContentType()); //$NON-NLS-1$ //$NON-NLS-2$ } catch (Exception e) { throw new IOException (Policy.bind("RemoteFileEditorInput.3") + e.toString()); //$NON-NLS-1$ } try { tempFile.deleteOnExit(); fOut = new BufferedOutputStream(new FileOutputStream(tempFile)); byte[] buffer = new byte[32 * 1024]; int bytesRead = 0; while ((bytesRead = in.read(buffer)) != -1) { fOut.write(buffer, 0, bytesRead); } } catch (Exception e) { throw new IOException(Policy.bind("RemoteFileEditorInput.4") + e.toString()); //$NON-NLS-1$ } finally { if (in != null) { in.close(); } if (fOut != null) { fOut.close(); } } } return tempFile; } } RemoteFileStorage.java000066400000000000000000000053131203611042400412240ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/editor/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.editor; import java.io.ByteArrayInputStream; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.resources.IStorage; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.PlatformObject; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.team.core.TeamException; import org.eclipse.team.core.variants.IResourceVariant; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class RemoteFileStorage extends PlatformObject implements IStorage { ISVNRemoteFile file; public RemoteFileStorage(ISVNRemoteFile file) { this.file = file; } /** * Returns an open input stream on the contents of this file. * The client is responsible for closing the stream when finished. * * @return an input stream containing the contents of the file * @exception CoreException if this method fails. */ public InputStream getContents() throws CoreException { try { final InputStream[] holder = new InputStream[1]; SVNUIPlugin.runWithProgress(null, true /*cancelable*/, new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { try { holder[0] = ((IResourceVariant)file).getStorage(monitor).getContents(); } catch (TeamException e) { throw new InvocationTargetException(e); }catch(CoreException e){ throw new InvocationTargetException(e); } } }); return holder[0]; } catch (InterruptedException e) { // operation canceled } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if (t instanceof TeamException) { throw new CoreException(((TeamException) t).getStatus()); } // should not get here } return new ByteArrayInputStream(new byte[0]); } public IPath getFullPath() { return null; } public String getName() { return file.getName(); } public boolean isReadOnly() { // can't edit remote files return true; } } 000077500000000000000000000000001203611042400352125ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/historyChangePathsFlatViewer.java000066400000000000000000000241111203611042400422320ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/history/******************************************************************************* * Copyright (c) 2007 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.history; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.viewers.IColorProvider; import org.eclipse.jface.viewers.IFontProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableItem; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNResource; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.history.LogEntryChangePath; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * Flat list representation of the affected paths panel. * * @author Eugene Kuleshov */ public class ChangePathsFlatViewer extends TableViewer { ILogEntry currentLogEntry; Font currentPathFont; public ChangePathsFlatViewer(Composite parent, SVNHistoryPage page) { super(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI /* SWT.FULL_SELECTION */); GridData data = new GridData(GridData.FILL_BOTH); getControl().setLayoutData(data); getControl().addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { if (currentPathFont != null) { currentPathFont.dispose(); } } }); setLabelProvider(new ChangePathLabelProvider()); setContentProvider(new ChangePathsFlatContentProvider(page)); getTable().setHeaderVisible(false); getTable().setLinesVisible(false); } protected void inputChanged(Object input, Object oldInput) { super.inputChanged(input, oldInput); this.currentLogEntry = (ILogEntry) input; TableItem[] items = ((Table) getControl()).getItems(); if (items != null && items.length > 0) { setSelection(new StructuredSelection(items[0])); ((Table) getControl()).showSelection(); } } /** * The label provider. */ class ChangePathLabelProvider extends LabelProvider implements IFontProvider, IColorProvider { public String getText(Object element) { if (element instanceof LogEntryChangePath) { LogEntryChangePath changePath = (LogEntryChangePath) element; String path = changePath.getPath(); // int n = path.lastIndexOf('/'); // if (n > -1) // path = path.substring(n + 1); if (changePath.getCopySrcPath() == null) { return path; } return path + " [" + //$NON-NLS-1$ Policy.bind("ChangePathsTableProvider.copiedfrom", //$NON-NLS-1$ changePath.getCopySrcPath(), changePath.getCopySrcRevision() .toString()) + "]"; } else if (element instanceof HistoryFolder) { HistoryFolder f = (HistoryFolder) element; if (f.getCopySrcPath() == null) { return f.getPath() + (f.getChildCount() == 0 ? "" : " [" + f.getChildCount() + "]"); } return f.getPath() + (f.getChildCount() == 0 ? " [" : " [" + f.getChildCount() + "] [") + Policy.bind("ChangePathsTableProvider.copiedfrom", //$NON-NLS-1$ f.getCopySrcPath(), f.getCopySrcRevision().toString()) + "]"; } return element.toString(); } public Image getImage(Object element) { String id = null; if (element instanceof LogEntryChangePath) { LogEntryChangePath changePath = (LogEntryChangePath) element; switch (changePath.getAction()) { case 'A': id = ISVNUIConstants.IMG_FILEADD_PENDING; break; case 'D': id = ISVNUIConstants.IMG_FILEDELETE_PENDING; break; // case 'M': default: id = ISVNUIConstants.IMG_FILEMODIFIED_PENDING; break; } } else if (element instanceof HistoryFolder) { HistoryFolder folder = (HistoryFolder) element; if (folder.getChildren().length == 0) { switch (folder.getAction()) { case 'A': id = ISVNUIConstants.IMG_FILEADD_PENDING; break; case 'D': id = ISVNUIConstants.IMG_FILEDELETE_PENDING; break; // case 'M': default: id = ISVNUIConstants.IMG_FILEMODIFIED_PENDING; break; } } else { switch (folder.getAction()) { case 'A': id = ISVNUIConstants.IMG_FOLDERADD_PENDING; break; case 'D': id = ISVNUIConstants.IMG_FOLDERDELETE_PENDING; break; case 'M': id = ISVNUIConstants.IMG_FOLDERMODIFIED_PENDING; break; default: id = ISVNUIConstants.IMG_FOLDER; break; } } } if (id == null) return null; return SVNUIPlugin.getImage(id); } /* * (non-Javadoc) * * @see org.eclipse.jface.viewers.IFontProvider#getFont(java.lang.Object) */ public Font getFont(Object element) { if (element == null || currentLogEntry == null || !(element instanceof LogEntryChangePath)) { return null; } ISVNRemoteResource remoteResource = currentLogEntry.getRemoteResource(); if (remoteResource == null) { return null; } SVNUrl currentUrl = remoteResource.getUrl(); if (currentUrl == null) { return null; } SVNUrl url = ((LogEntryChangePath) element).getUrl(); if (currentUrl.equals(url)) { if (currentPathFont == null) { Font defaultFont = JFaceResources.getDefaultFont(); FontData[] data = defaultFont.getFontData(); for (int i = 0; i < data.length; i++) { data[i].setStyle(SWT.BOLD); } currentPathFont = new Font(getControl().getDisplay(), data); } return currentPathFont; } return null; } public Color getBackground(Object element) { return null; } public Color getForeground(Object element) { if (currentLogEntry == null) { return null; } ISVNResource resource = currentLogEntry.getResource(); if (resource == null) return null; boolean isPartOfSelection = false; if (element instanceof HistoryFolder) { HistoryFolder historyFolder = (HistoryFolder)element; isPartOfSelection = (resource.getRepository().getUrl().toString() + historyFolder.getPath()).startsWith(currentLogEntry.getResource().getUrl().toString()); } if (element instanceof LogEntryChangePath) { LogEntryChangePath logEntryChangePath = (LogEntryChangePath)element; isPartOfSelection = (resource.getRepository().getUrl().toString() + logEntryChangePath.getPath()).startsWith(currentLogEntry.getResource().getUrl().toString()); } if (!isPartOfSelection) return Display.getDefault().getSystemColor(SWT.COLOR_GRAY); return null; } } static final LogEntryChangePath[] EMPTY_CHANGE_PATHS = new LogEntryChangePath[0]; static class ChangePathsFlatContentProvider implements ITreeContentProvider { private final SVNHistoryPage page; ChangePathsFlatContentProvider(SVNHistoryPage page) { this.page = page; } public Object[] getChildren(Object parentElement) { if (page != null && !page.isShowChangePaths()) return null; if (parentElement instanceof HistoryFolder) { return ((HistoryFolder) parentElement).getChildren(); } return null; } public Object getParent(Object element) { return null; } public boolean hasChildren(Object element) { if (element instanceof HistoryFolder) { HistoryFolder folder = (HistoryFolder) element; return folder.getChildren().length > 0; } return false; } public Object[] getElements(Object inputElement) { if ((page != null && !this.page.isShowChangePaths()) || !(inputElement instanceof ILogEntry)) { return EMPTY_CHANGE_PATHS; } if (page != null && this.page.currentLogEntryChangePath != null) { } ILogEntry logEntry = (ILogEntry) inputElement; if (SVNProviderPlugin.getPlugin().getSVNClientManager() .isFetchChangePathOnDemand()) { if (page != null && this.page.currentLogEntryChangePath != null) { return getGroups(this.page.currentLogEntryChangePath); } if (page != null) this.page.scheduleFetchChangePathJob(logEntry); return EMPTY_CHANGE_PATHS; } return getGroups(logEntry.getLogEntryChangePaths()); } private Object[] getGroups(LogEntryChangePath[] changePaths) { return changePaths; } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { if (page != null) this.page.currentLogEntryChangePath = null; } } public void setCurrentLogEntry(ILogEntry currentLogEntry) { this.currentLogEntry = currentLogEntry; } } ChangePathsTableProvider.java000066400000000000000000000335151203611042400427340ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/history/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.history; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.IColorProvider; import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.IFontProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNResource; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.history.LogEntryChangePath; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * This class provides the table and it's required components for a change path * This is used from HistoryView */ public class ChangePathsTableProvider extends TableViewer { ILogEntry currentLogEntry; Font currentPathFont; public ChangePathsTableProvider(Composite parent, IContentProvider contentProvider) { super(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI | SWT.FULL_SELECTION); TableLayout layout = new TableLayout(); GridData data = new GridData(GridData.FILL_BOTH); Table table = (Table) getControl(); table.setHeaderVisible(true); table.setLinesVisible(true); table.setLayoutData(data); table.setLayout(layout); table.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { if(currentPathFont != null) { currentPathFont.dispose(); } } }); createColumns(table, layout); setLabelProvider(new ChangePathLabelProvider()); setContentProvider(contentProvider); ChangePathsSorter sorter = new ChangePathsSorter(COL_PATH); setSorter(sorter); table.setSortDirection(SWT.UP); } /** * Constructor for HistoryTableProvider. */ public ChangePathsTableProvider(Composite parent, SVNHistoryPage page) { this(parent, new ChangePathsTableContentProvider(page)); } protected void inputChanged(Object input, Object oldInput) { super.inputChanged(input, oldInput); this.currentLogEntry = (ILogEntry) input; } /** * Creates the columns for the history table. */ private void createColumns(Table table, TableLayout layout) { SelectionListener headerListener = getColumnListener(); // action TableColumn col = new TableColumn(table, SWT.NONE); col.setResizable(true); col.setText(Policy.bind("ChangePathsTableProvider.action")); //$NON-NLS-1$ col.addSelectionListener(headerListener); layout.addColumnData(new ColumnWeightData(10, true)); // path col = new TableColumn(table, SWT.NONE); col.setResizable(true); col.setText(Policy.bind("ChangePathsTableProvider.path")); //$NON-NLS-1$ col.addSelectionListener(headerListener); layout.addColumnData(new ColumnWeightData(45, true)); table.setSortColumn(col); // description col = new TableColumn(table, SWT.NONE); col.setResizable(true); col.setText(Policy.bind("ChangePathsTableProvider.description")); //$NON-NLS-1$ col.addSelectionListener(headerListener); layout.addColumnData(new ColumnWeightData(50, true)); } /** * Adds the listener that sets the sorter. */ private SelectionListener getColumnListener() { /** * This class handles selections of the column headers. * Selection of the column header will cause resorting * of the shown paths using that column's sorter. * Repeated selection of the header will toggle * sorting order (ascending versus descending). */ return new SelectionAdapter() { /** * Handles the case of user selecting the * header area. *

If the column has not been selected previously, * it will set the sorter of that column to be * the current sorter. Repeated * presses on the same column header will * toggle sorting order (ascending/descending). */ public void widgetSelected(SelectionEvent e) { // column selected - need to sort int column = getTable().indexOf((TableColumn) e.widget); ChangePathsSorter oldSorter = (ChangePathsSorter)getSorter(); if (oldSorter != null && column == oldSorter.getColumnNumber()) { oldSorter.setReversed(!oldSorter.isReversed()); refresh(); } else { setSorter(new ChangePathsSorter(column)); } getTable().setSortColumn((TableColumn)e.widget); if (getTable().getSortDirection() == SWT.UP) getTable().setSortDirection(SWT.DOWN); else getTable().setSortDirection(SWT.UP); } }; } //column constants private static final int COL_ACTION = 0; private static final int COL_PATH = 1; private static final int COL_DESCRIPTION = 2; /** * The label provider. */ class ChangePathLabelProvider extends LabelProvider implements ITableLabelProvider, IFontProvider, IColorProvider { public Image getColumnImage(Object element, int columnIndex) { return null; } public String getColumnText(Object element, int columnIndex) { LogEntryChangePath changePath = (LogEntryChangePath)element; if (changePath == null) return ""; //$NON-NLS-1$ switch (columnIndex) { case COL_ACTION: return ""+changePath.getAction(); //$NON-NLS-1$ case COL_PATH: return changePath.getPath(); case COL_DESCRIPTION: if (changePath.getCopySrcPath() != null) { return Policy.bind("ChangePathsTableProvider.copiedfrom", //$NON-NLS-1$ changePath.getCopySrcPath(), changePath.getCopySrcRevision().toString()); } return ""; //$NON-NLS-1$ } return ""; //$NON-NLS-1$ } /* * (non-Javadoc) * @see org.eclipse.jface.viewers.IFontProvider#getFont(java.lang.Object) */ public Font getFont(Object element) { if(currentLogEntry==null || element==null) { return null; } SVNUrl url = ((LogEntryChangePath)element).getUrl(); ISVNRemoteResource remoteResource = currentLogEntry.getRemoteResource(); if (remoteResource == null) { return null; } SVNUrl currentUrl = remoteResource.getUrl(); if (currentUrl == null || !currentUrl.equals(url)) { return null; } if (currentPathFont == null) { Font defaultFont = JFaceResources.getDefaultFont(); FontData[] data = defaultFont.getFontData(); for (int i = 0; i < data.length; i++) { data[i].setStyle(SWT.BOLD); } currentPathFont = new Font(getControl().getDisplay(), data); } return currentPathFont; } public Color getBackground(Object element) { return null; } public Color getForeground(Object element) { if (currentLogEntry == null) { return null; } ISVNResource resource = currentLogEntry.getResource(); if (resource == null) return null; boolean isPartOfSelection = false; if (element instanceof HistoryFolder) { HistoryFolder historyFolder = (HistoryFolder)element; isPartOfSelection = (resource.getRepository().getUrl().toString() + historyFolder.getPath()).startsWith(currentLogEntry.getResource().getUrl().toString()); } if (element instanceof LogEntryChangePath) { LogEntryChangePath logEntryChangePath = (LogEntryChangePath)element; isPartOfSelection = (resource.getRepository().getUrl().toString() + logEntryChangePath.getPath()).startsWith(currentLogEntry.getResource().getUrl().toString()); } if (!isPartOfSelection) return Display.getDefault().getSystemColor(SWT.COLOR_GRAY); return null; } } static final LogEntryChangePath[] EMPTY_CHANGE_PATHS = new LogEntryChangePath[ 0]; static class ChangePathsTableContentProvider implements IStructuredContentProvider { private final SVNHistoryPage page; ChangePathsTableContentProvider(SVNHistoryPage page) { this.page = page; } public Object[] getElements(Object inputElement) { if( !this.page.isShowChangePaths() || !(inputElement instanceof ILogEntry)) { return EMPTY_CHANGE_PATHS; } ILogEntry logEntry = (ILogEntry) inputElement; if(SVNProviderPlugin.getPlugin().getSVNClientManager().isFetchChangePathOnDemand()) { if(this.page.currentLogEntryChangePath != null) { return this.page.currentLogEntryChangePath; } this.page.scheduleFetchChangePathJob(logEntry); return EMPTY_CHANGE_PATHS; } return logEntry.getLogEntryChangePaths(); } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { this.page.currentLogEntryChangePath = null; } } /** * The change paths sorter */ class ChangePathsSorter extends ViewerSorter { private boolean reversed = false; private int columnNumber; // column headings: "Revision" "Tags" "Date" "Author" "Comment" private int[][] SORT_ORDERS_BY_COLUMN = { {COL_ACTION, COL_PATH, COL_DESCRIPTION }, /* action */ {COL_PATH, COL_ACTION, COL_DESCRIPTION }, /* path */ {COL_DESCRIPTION, COL_ACTION, COL_PATH} /* description */ }; /** * The constructor. */ public ChangePathsSorter(int columnNumber) { this.columnNumber = columnNumber; } /** * Compares two changed paths, sorting first by the main column of this sorter, * then by subsequent columns, depending on the column sort order. */ public int compare(Viewer viewer, Object o1, Object o2) { LogEntryChangePath p1 = (LogEntryChangePath)o1; LogEntryChangePath p2 = (LogEntryChangePath)o2; int result = 0; if (p1 == null || p2 == null) { result = super.compare(viewer, o1, o2); } else { int[] columnSortOrder = SORT_ORDERS_BY_COLUMN[columnNumber]; for (int i = 0; i < columnSortOrder.length; ++i) { result = compareColumnValue(columnSortOrder[i], p1, p2); if (result != 0) break; } } if (reversed) result = -result; return result; } /** * Compares two markers, based only on the value of the specified column. */ int compareColumnValue(int columnNumber, LogEntryChangePath p1, LogEntryChangePath p2) { switch (columnNumber) { case COL_ACTION: /* action */ return getCollator().compare("" + p1.getAction(), "" + p2.getAction()); case COL_PATH: /* path */ return getCollator().compare(p1.getPath(), p2.getPath()); case COL_DESCRIPTION: /* description */ String d1; String d2; if (p1.getCopySrcPath() != null) { d1 = Policy.bind("ChangePathsTableProvider.copiedfrom", //$NON-NLS-1$ p1.getCopySrcPath(), p1.getCopySrcRevision().toString()); } else { d1 = ""; //$NON-NLS-1$ } if (p2.getCopySrcPath() != null) { d2 = Policy.bind("ChangePathsTableProvider.copiedfrom", //$NON-NLS-1$ p2.getCopySrcPath(), p2.getCopySrcRevision().toString()); } else { d2 = ""; //$NON-NLS-1$ } return getCollator().compare(d1, d2); default: return 0; } } /** * Returns the number of the column by which this is sorting. */ public int getColumnNumber() { return columnNumber; } /** * Returns true for descending, or false * for ascending sorting order. */ public boolean isReversed() { return reversed; } /** * Sets the sorting order. */ public void setReversed(boolean newReversed) { reversed = newReversed; } } public void setCurrentLogEntry(ILogEntry currentLogEntry) { this.currentLogEntry = currentLogEntry; } } ChangePathsTreeViewer.java000066400000000000000000000275711203611042400422600ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/history/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.history; import java.util.HashSet; import java.util.Set; import java.util.TreeMap; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.viewers.IColorProvider; import org.eclipse.jface.viewers.IContentProvider; import org.eclipse.jface.viewers.IFontProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNResource; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.history.LogEntryChangePath; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * Compressed folder representation of the affected paths panel. * * @author Eugene Kuleshov */ public class ChangePathsTreeViewer extends TreeViewer { ILogEntry currentLogEntry; Font currentPathFont; public ChangePathsTreeViewer(Composite parent, SVNHistoryPage page) { this(parent, new ChangePathsTreeContentProvider(page)); } public ChangePathsTreeViewer(Composite parent, IContentProvider contentProvider) { super(parent, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI /*| SWT.FULL_SELECTION*/); GridData data = new GridData(GridData.FILL_BOTH); getControl().setLayoutData(data); getControl().addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { if(currentPathFont != null) { currentPathFont.dispose(); } } }); setLabelProvider(new ChangePathLabelProvider()); setContentProvider(contentProvider); } protected void inputChanged(Object input, Object oldInput) { super.inputChanged(input, oldInput); this.currentLogEntry = (ILogEntry) input; expandAll(); } /** * The label provider. */ class ChangePathLabelProvider extends LabelProvider implements IFontProvider, IColorProvider { public String getText(Object element) { if(element instanceof LogEntryChangePath) { LogEntryChangePath changePath = (LogEntryChangePath) element; String path = changePath.getPath(); int n = path.lastIndexOf('/'); if(n>-1) path = path.substring(n+1); if (changePath.getCopySrcPath() == null) { return path; } return path + " [" + //$NON-NLS-1$ Policy.bind("ChangePathsTableProvider.copiedfrom", //$NON-NLS-1$ changePath.getCopySrcPath(), changePath.getCopySrcRevision().toString())+"]"; } else if(element instanceof HistoryFolder) { HistoryFolder f = (HistoryFolder) element; if(f.getCopySrcPath()==null) { return f.getPath() + (f.getChildCount()==0 ? "" : " ["+f.getChildCount()+"]"); } return f.getPath() + (f.getChildCount()==0 ? " [" : " ["+f.getChildCount()+"] [") + Policy.bind("ChangePathsTableProvider.copiedfrom", //$NON-NLS-1$ f.getCopySrcPath(), f.getCopySrcRevision().toString())+"]"; } return element.toString(); } public Image getImage(Object element) { String id = null; if(element instanceof LogEntryChangePath) { LogEntryChangePath changePath = (LogEntryChangePath)element; switch(changePath.getAction()) { case 'A': id = ISVNUIConstants.IMG_FILEADD_PENDING; break; case 'D': id = ISVNUIConstants.IMG_FILEDELETE_PENDING; break; // case 'M': default: id = ISVNUIConstants.IMG_FILEMODIFIED_PENDING; break; } } else if(element instanceof HistoryFolder) { HistoryFolder folder = (HistoryFolder) element; if(folder.getChildren().length==0) { switch(folder.getAction()) { case 'A': id = ISVNUIConstants.IMG_FILEADD_PENDING; break; case 'D': id = ISVNUIConstants.IMG_FILEDELETE_PENDING; break; // case 'M': default: id = ISVNUIConstants.IMG_FILEMODIFIED_PENDING; break; } } else { switch(folder.getAction()) { case 'A': id = ISVNUIConstants.IMG_FOLDERADD_PENDING; break; case 'D': id = ISVNUIConstants.IMG_FOLDERDELETE_PENDING; break; case 'M': id = ISVNUIConstants.IMG_FOLDERMODIFIED_PENDING; break; default: id = ISVNUIConstants.IMG_FOLDER; break; } } } if(id==null) return null; return SVNUIPlugin.getImage(id); } /* * (non-Javadoc) * @see org.eclipse.jface.viewers.IFontProvider#getFont(java.lang.Object) */ public Font getFont(Object element) { if(element==null || currentLogEntry==null || !(element instanceof LogEntryChangePath)) { return null; } ISVNRemoteResource remoteResource = currentLogEntry.getRemoteResource(); if (remoteResource == null) { return null; } SVNUrl currentUrl = remoteResource.getUrl(); if (currentUrl == null) { return null; } SVNUrl url = ((LogEntryChangePath)element).getUrl(); if (currentUrl.equals(url)) { if (currentPathFont == null) { Font defaultFont = JFaceResources.getDefaultFont(); FontData[] data = defaultFont.getFontData(); for (int i = 0; i < data.length; i++) { data[i].setStyle(SWT.BOLD); } currentPathFont = new Font(getControl().getDisplay(), data); } return currentPathFont; } return null; } public Color getBackground(Object element) { return null; } public Color getForeground(Object element) { if (currentLogEntry == null) { return null; } ISVNResource resource = currentLogEntry.getResource(); if (resource == null) return null; boolean isPartOfSelection = false; if (element instanceof HistoryFolder) { HistoryFolder historyFolder = (HistoryFolder)element; isPartOfSelection = (resource.getRepository().getUrl().toString() + historyFolder.getPath()).startsWith(currentLogEntry.getResource().getUrl().toString()); } if (element instanceof LogEntryChangePath) { LogEntryChangePath logEntryChangePath = (LogEntryChangePath)element; isPartOfSelection = (resource.getRepository().getUrl().toString() + logEntryChangePath.getPath()).startsWith(currentLogEntry.getResource().getUrl().toString()); } if (!isPartOfSelection) return Display.getDefault().getSystemColor(SWT.COLOR_GRAY); return null; } } static final LogEntryChangePath[] EMPTY_CHANGE_PATHS = new LogEntryChangePath[0]; static class ChangePathsTreeContentProvider implements ITreeContentProvider { private final SVNHistoryPage page; ChangePathsTreeContentProvider(SVNHistoryPage page) { this.page = page; } public Object[] getChildren(Object parentElement) { if (page != null && !page.isShowChangePaths()) return null; if(parentElement instanceof HistoryFolder) { return ((HistoryFolder) parentElement).getChildren(); } return null; } public Object getParent(Object element) { return null; } public boolean hasChildren(Object element) { if(element instanceof HistoryFolder) { HistoryFolder folder = (HistoryFolder) element; return folder.getChildren().length > 0; } return false; } public Object[] getElements(Object inputElement) { if((page != null && !this.page.isShowChangePaths()) || !(inputElement instanceof ILogEntry)) { return EMPTY_CHANGE_PATHS; } if(page != null && this.page.currentLogEntryChangePath != null) { } ILogEntry logEntry = (ILogEntry) inputElement; if(SVNProviderPlugin.getPlugin().getSVNClientManager().isFetchChangePathOnDemand()) { if(page != null && this.page.currentLogEntryChangePath != null) { return getGroups(this.page.currentLogEntryChangePath); } if (page != null) this.page.scheduleFetchChangePathJob(logEntry); return EMPTY_CHANGE_PATHS; } return getGroups(logEntry.getLogEntryChangePaths()); } private Object[] getGroups(LogEntryChangePath[] changePaths) { // 1st pass. Collect folder names Set folderNames = new HashSet(); for(int i = 0; i < changePaths.length; i++) { folderNames.add(getFolderName(changePaths[ i])); } // 2nd pass. Sorting out explicitly changed folders TreeMap folders = new TreeMap(); for(int i = 0; i < changePaths.length; i++) { LogEntryChangePath changePath = changePaths[ i]; String path = changePath.getPath(); if(folderNames.contains(path)) { // changed folder HistoryFolder folder = (HistoryFolder) folders.get(path); if(folder == null) { folder = new HistoryFolder(changePath); folders.put(path, folder); } } else { // changed resource path = getFolderName(changePath); HistoryFolder folder = (HistoryFolder) folders.get(path); if(folder == null) { folder = new HistoryFolder(path); folders.put(path, folder); } folder.add(changePath); } } return folders.values().toArray(new Object[folders.size()]); } private String getFolderName(LogEntryChangePath changePath) { String path = changePath.getPath(); int n = path.lastIndexOf('/'); return n > -1 ? path.substring(0, n) : path; } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { if (page != null) this.page.currentLogEntryChangePath = null; } } public void setCurrentLogEntry(ILogEntry currentLogEntry) { this.currentLogEntry = currentLogEntry; } } HistoryFolder.java000066400000000000000000000040721203611042400406550ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/history/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.history; import java.util.ArrayList; import java.util.List; import org.tigris.subversion.subclipse.core.history.LogEntryChangePath; import org.tigris.subversion.svnclientadapter.SVNRevision.Number; /** * Node representing compressed folder on affected paths panel. * * @author Eugene Kuleshov */ public class HistoryFolder { private final String path; private final char action; private final String copySrcPath; private final Number copySrcRevision; private final List children = new ArrayList(); public HistoryFolder(String path) { this.path = path; this.action = '?'; this.copySrcPath = null; this.copySrcRevision = null; } public HistoryFolder(LogEntryChangePath changePath) { this.path = changePath.getPath(); this.action = changePath.getAction(); this.copySrcPath = changePath.getCopySrcPath(); this.copySrcRevision = changePath.getCopySrcRevision(); } public String getPath() { return path; } public char getAction() { return action; } public String getCopySrcPath() { return copySrcPath; } public Number getCopySrcRevision() { return copySrcRevision; } public void add(LogEntryChangePath changePath) { children.add(changePath); } public Object[] getChildren() { return children.toArray(); } public int getChildCount() { return children.size(); } } HistorySearchViewerFilter.java000066400000000000000000000201141203611042400431720ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/history/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.history; import java.util.Date; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * The HistorySearchViewerFilter is a ViewerFilter that can be applied * to the table of the history search in order to filter entries from * the table. Entries matching the select-method will be displayed in the * table. The entries that don't match will be hidden. * * The filter takes a user-string, comment-string, start date and end date * as parameters. All entries matching these parameters will be selected. * If any of the parameters is null the parameter is treated as a don't care. * * Using '*', '?' and '\' simple pattern matching can be used for the user and * comment fields. * is used for any string, ? for any character and \ is the * escape character. */ public class HistorySearchViewerFilter extends ViewerFilter { private final String user; private final String comment; private final Date startDate; private final Date endDate; private final boolean regExp; private final SVNRevision.Number startRevision; private final SVNRevision.Number endRevision; private final char CHAR_MATCH_MANY = '*'; private final char CHAR_MATCH_ONE = '?'; private final char CHAR_MATCH_ESCAPE = '\\'; /*** * Construct a new HistorySearchViewerFilter * @param user user to filter on * @param comment comment to filter on * @param startDate filtered entries must be dated after this date * @param endDate filtered entries must be dated before this date * @param regExp whether or not pattern matching should be used * @param startRevision * @param endRevision */ public HistorySearchViewerFilter(String user, String comment, Date startDate, Date endDate, boolean regExp, SVNRevision.Number startRevision, SVNRevision.Number endRevision) { this.user = user; this.comment = comment; this.startDate = startDate; this.endDate = endDate; this.regExp = regExp; this.startRevision = startRevision; this.endRevision = endRevision; } /** * Returns whether the given element matches the user, comment, start and * end date of this filter. * @param viewer the viewer * @param parentElement the parent element * @param element the element * @return true if element is included in the * filtered set, and false if excluded */ public boolean select(Viewer viewer, Object parentElement, Object element) { if (element instanceof ILogEntry) { ILogEntry logEntry = (ILogEntry)element; return (filterDate(logEntry, startDate, endDate) && filterRevision(logEntry, startRevision, endRevision) && filterUser(logEntry, user) && filterComment(logEntry, comment)); } return false; } /** * Returns if the logEntry's author matches the given user string. * @param logEntry log entry to be checked * @param user user string to be filtered on * @return true iff the logEntry matches the user string, * false otherwise */ private boolean filterUser(ILogEntry logEntry, String user) { if (user == null) return true; if (regExp) { return matchesExpression(logEntry.getAuthor(), user + CHAR_MATCH_MANY); } else { return containsExpression(logEntry.getAuthor(), user); } } /** * Returns if the logEntry's comment matches the given comment string. * @param logEntry log entry to be checked * @param comment comment string to be filtered on * @return true iff the logEntry matches the comment string, * false otherwise */ private boolean filterComment(ILogEntry logEntry, String comment) { if (comment == null) return true; if (regExp) { return matchesExpression(logEntry.getComment(), comment + CHAR_MATCH_MANY); } else { return containsExpression(logEntry.getComment(), comment); } } /** * Returns if the logEntry's date matches the given start and end date. * @param logEntry log entry to be checked * @param startDate start date to be filtered on * @param endDate end date to be filtered on * @return true iff the logEntry matches the start and end date, * false otherwise */ private boolean filterDate(ILogEntry logEntry, Date startDate, Date endDate) { Date date = logEntry.getDate(); if (date == null) { return true; } if ((startDate != null) && date.before(startDate)) { return false; } if ((endDate != null) && date.after(endDate)) { return false; } return true; } private boolean filterRevision(ILogEntry logEntry, SVNRevision.Number startRevision, SVNRevision.Number endRevision) { SVNRevision.Number revision = logEntry.getRevision(); if (revision == null) return true; if (startRevision != null && revision.getNumber() < startRevision.getNumber()) return false; if (endRevision != null && revision.getNumber() > endRevision.getNumber()) return false; return true; } /** * Checks if the toSearch string matches the given expression. * @param toSearch string to be searched * @param expression string to match the toSearch string against * @return true iff toSearch matches expression, * false otherwise */ private boolean matchesExpression(String toSearch, String expression) { if (toSearch == null || expression == null) { return false; } int toSearchIndex = 0; int exprIndex = 0; while ((exprIndex < expression.length()) && (toSearchIndex < toSearch.length())) { // Match the escape operator if (expression.charAt(exprIndex) == CHAR_MATCH_ESCAPE) { exprIndex++; if (exprIndex == expression.length()) { return false; } if (expression.charAt(exprIndex) == toSearch.charAt(toSearchIndex)) { exprIndex++; toSearchIndex++; } else { return false; } } // Match the many operator else if (expression.charAt(exprIndex) == CHAR_MATCH_MANY) { String partExpr = expression.substring(exprIndex+1); for (int j=toSearchIndex; j<=toSearch.length(); j++) { if (matchesExpression(toSearch.substring(j), partExpr)) { return true; } } return false; } // Match the one random character operator else if (expression.charAt(exprIndex) == CHAR_MATCH_ONE) { return matchesExpression(toSearch.substring(toSearchIndex+1), expression.substring(exprIndex+1)); } // Check if the character matches the expressions character else if (toSearch.charAt(toSearchIndex) == expression.charAt(exprIndex)) { toSearchIndex++; exprIndex++; } // No matches, so return false else { return false; } } for (int i=exprIndex; itrue iff toSearch contains expression, * false otherwise */ private boolean containsExpression(String toSearch, String expression) { if (toSearch == null) { return false; } return toSearch.equals(expression) || toSearch.indexOf(expression) >= 0; } public SVNRevision.Number getStartRevision() { return startRevision; } public SVNRevision.Number getEndRevision() { return endRevision; } } HistoryTableProvider.java000066400000000000000000000456571203611042400422220ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/history/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.history; import java.text.DateFormat; import java.util.ArrayList; import java.util.Date; import java.util.List; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.viewers.ColumnPixelData; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.IFontProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerSorter; import org.eclipse.swt.SWT; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.FontData; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.history.AliasManager; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.settings.ProjectProperties; import org.tigris.subversion.subclipse.ui.util.LinkList; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * This class provides the table and it's required components for a file's revision * history * This is used from HistoryView and SVNCompareRevisionsInput */ public class HistoryTableProvider { private ISVNRemoteResource currentRemoteResource; private SVNRevision.Number currentRevision; private TableViewer viewer; private Font currentRevisionFont; private boolean includeMergeRevisions = true; private boolean includeTags = true; private boolean includeBugs = false; private int style; private IDialogSettings settings = SVNUIPlugin.getPlugin().getDialogSettings(); private String id; /** * Constructor for HistoryTableProvider. */ public HistoryTableProvider() { this(SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI | SWT.FULL_SELECTION, null); } public HistoryTableProvider(int style, String id) { super(); this.style = style; this.id = id; } ProjectProperties projectProperties = null; //column constants private final static int COL_REVISION = 0; private final static int COL_MERGED_REVISIONS = 1; private final static int COL_TAGS = 2; private final static int COL_DATE = 3; private final static int COL_AUTHOR = 4; private final static int COL_COMMENT = 5; private final static int COL_BUGS = 6; /** * The history label provider. */ class HistoryLabelProvider extends LabelProvider implements ITableLabelProvider, IFontProvider { public Image getColumnImage(Object element, int columnIndex) { return null; } public String getColumnText(Object element, int columnIndex) { ILogEntry entry = adaptToLogEntry(element); if (entry == null) return ""; //$NON-NLS-1$ int index = columnIndex; if (columnIndex > 0 && !includeMergeRevisions) index++; if (index > 1 && !includeTags) index++; switch (index) { case COL_REVISION: String revision = entry.getRevision().toString(); if (currentRemoteResource != null && entry.getRevision().equals( currentRemoteResource.getLastChangedRevision())) { revision = Policy.bind("currentRevision", revision); //$NON-NLS-1$ } return revision; case COL_MERGED_REVISIONS: return entry.getMergedRevisionsAsString(); case COL_TAGS: return AliasManager.getAliasesAsString(entry.getTags()); case COL_DATE: Date date = entry.getDate(); if (date == null) return Policy.bind("notAvailable"); //$NON-NLS-1$ return DateFormat.getInstance().format(date); case COL_AUTHOR: if(entry.getAuthor() == null) return Policy.bind("noauthor"); //$NON-NLS-1$ return entry.getAuthor(); case COL_COMMENT: String comment = entry.getComment(); if (comment == null) return ""; //$NON-NLS-1$ else return comment.replaceAll("\r", " ").replaceAll("\n", " "); //$NON-NLS-1$ //$NON-NLS-2$ // int rIndex = comment.indexOf("\r"); //$NON-NLS-1$ // int nIndex = comment.indexOf("\n"); //$NON-NLS-1$ // if( (rIndex == -1) && (nIndex == -1) ) // return comment; // // if( (rIndex == 0) || (nIndex == 0) ) // return Policy.bind("HistoryView.[...]_4"); //$NON-NLS-1$ // // if(rIndex != -1) // return Policy.bind("SVNCompareRevisionsInput.truncate", comment.substring(0, rIndex)); //$NON-NLS-1$ // else // return Policy.bind("SVNCompareRevisionsInput.truncate", comment.substring(0, nIndex)); //$NON-NLS-1$ case COL_BUGS: return getBugstringFromComment( entry.getComment() ); } return ""; //$NON-NLS-1$ } /* * (non-Javadoc) * @see org.eclipse.jface.viewers.IFontProvider#getFont(java.lang.Object) */ public Font getFont(Object element) { ILogEntry entry = adaptToLogEntry(element); if (entry == null) return null; SVNRevision revision = entry.getRevision(); SVNRevision currentRevision = getCurrentRevision(); if (currentRevision != null && currentRevision.equals(revision)) { if (currentRevisionFont == null) { Font defaultFont = JFaceResources.getDefaultFont(); FontData[] data = defaultFont.getFontData(); for (int i = 0; i < data.length; i++) { data[i].setStyle(SWT.BOLD); } currentRevisionFont = new Font(viewer.getTable().getDisplay(), data); } return currentRevisionFont; } return null; } } private String getBugstringFromComment( String comment ) { String display = ""; if( projectProperties != null ) { LinkList ll = projectProperties.getLinkList( comment ); String[] texts = ll.getTexts(); for( int i = 0; texts != null && texts.length > i ; i++ ) { display += texts[i]; display += " "; } } return display; } /** * The history sorter */ class HistorySorter extends ViewerSorter { private boolean reversed = false; private int columnNumber; // private VersionCollator versionCollator = new VersionCollator(); // column headings: "Revision" "Merged Revisions" "Tags" "Date" "Author" "Comment" "Bug-ID" private int[][] SORT_ORDERS_BY_COLUMN = { {COL_REVISION, COL_MERGED_REVISIONS, COL_TAGS, COL_DATE, COL_AUTHOR, COL_COMMENT }, /* revision */ {COL_MERGED_REVISIONS, COL_REVISION, COL_TAGS, COL_DATE, COL_AUTHOR, COL_COMMENT }, /* merged revisions */ {COL_TAGS, COL_REVISION, COL_MERGED_REVISIONS, COL_DATE, COL_AUTHOR, COL_COMMENT }, /* tags */ {COL_DATE, COL_REVISION, COL_MERGED_REVISIONS, COL_TAGS, COL_AUTHOR, COL_COMMENT}, /* date */ {COL_AUTHOR, COL_REVISION, COL_MERGED_REVISIONS, COL_TAGS, COL_DATE, COL_COMMENT}, /* author */ {COL_COMMENT, COL_REVISION, COL_MERGED_REVISIONS, COL_TAGS, COL_DATE, COL_AUTHOR}, /* comment */ {COL_BUGS, COL_REVISION, COL_MERGED_REVISIONS, COL_TAGS, COL_DATE, COL_COMMENT} /* Bug-ID */ }; /** * The constructor. */ public HistorySorter(int columnNumber) { this.columnNumber = columnNumber; } /** * Compares two log entries, sorting first by the main column of this sorter, * then by subsequent columns, depending on the column sort order. */ public int compare(Viewer viewer, Object o1, Object o2) { ILogEntry e1 = adaptToLogEntry(o1); ILogEntry e2 = adaptToLogEntry(o2); int result = 0; if (e1 == null || e2 == null) { result = super.compare(viewer, o1, o2); } else { int[] columnSortOrder = SORT_ORDERS_BY_COLUMN[columnNumber];; for (int i = 0; i < columnSortOrder.length; ++i) { result = compareColumnValue(columnSortOrder[i], e1, e2); if (result != 0) break; } } if (reversed) result = -result; return result; } /** * Compares two markers, based only on the value of the specified column. */ int compareColumnValue(int columnNumber, ILogEntry e1, ILogEntry e2) { int column = columnNumber; if (column > 0 && !includeMergeRevisions) column++; if (column > 1 && !includeTags) column++; switch (column) { case COL_REVISION: /* revision */ return (e2.getRevision().getNumber() 0) settings.put("HistoryTableProvider." + id + "." + col.getText(), col.getWidth()); //$NON-NLS-1$ //$NON-NLS-1$ } }; SelectionListener headerListener = getColumnListener(viewer); // revision TableColumn col = new TableColumn(table, SWT.NONE); col.setResizable(true); col.setText(Policy.bind("HistoryView.revision")); //$NON-NLS-1$ col.addSelectionListener(headerListener); setColumnWidth(layout, disposeListener, col, 10); table.setSortColumn(col); // merged revisions if (includeMergeRevisions) { col = new TableColumn(table, SWT.NONE); col.setResizable(true); col.setText(Policy.bind("HistoryView.mergedRevisions")); //$NON-NLS-1$ col.addSelectionListener(headerListener); setColumnWidth(layout, disposeListener, col, 30); } // tags if (includeTags) { col = new TableColumn(table, SWT.NONE); col.setResizable(true); col.setText(Policy.bind("HistoryView.tags")); //$NON-NLS-1$ col.addSelectionListener(headerListener); setColumnWidth(layout, disposeListener, col, 30); } // creation date col = new TableColumn(table, SWT.NONE); col.setResizable(true); col.setText(Policy.bind("HistoryView.date")); //$NON-NLS-1$ col.addSelectionListener(headerListener); setColumnWidth(layout, disposeListener, col, 25); // author col = new TableColumn(table, SWT.NONE); col.setResizable(true); col.setText(Policy.bind("HistoryView.author")); //$NON-NLS-1$ col.addSelectionListener(headerListener); setColumnWidth(layout, disposeListener, col, 20); //comment col = new TableColumn(table, SWT.NONE); col.setResizable(true); col.setText(Policy.bind("HistoryView.comment")); //$NON-NLS-1$ col.addSelectionListener(headerListener); setColumnWidth(layout, disposeListener, col, 50); //bugs if (includeBugs) { col = new TableColumn(table, SWT.NONE); col.setResizable(true); String label = projectProperties.getLabel(); if (label != null && label.trim().length() > 0) { label = label.trim(); // many have i guess labels that ends with : strip that one for the table header. if (label.endsWith(":")) label = label.substring(0,label.length()-1); col.setText(label); } else { col.setText(Policy.bind("HistoryView.bugs")); //$NON-NLS-1$ } col.addSelectionListener(headerListener); setColumnWidth(layout, disposeListener, col, 10); } } private void setColumnWidth(TableLayout layout, DisposeListener disposeListener, TableColumn col, int defaultWidth) { String columnWidth = null; if (id != null) columnWidth = settings.get("HistoryTableProvider." + id + "." + col.getText()); //$NON-NLS-1$ //$NON-NLS-1$ if (columnWidth == null || columnWidth.equals("0")) layout.addColumnData(new ColumnWeightData(defaultWidth, true)); //$NON-NLS-1$ else layout.addColumnData(new ColumnPixelData(Integer.parseInt(columnWidth), true)); if (id != null) col.addDisposeListener(disposeListener); } /** * Adds the listener that sets the sorter. */ private SelectionListener getColumnListener(final TableViewer tableViewer) { /** * This class handles selections of the column headers. * Selection of the column header will cause resorting * of the shown tasks using that column's sorter. * Repeated selection of the header will toggle * sorting order (ascending versus descending). */ return new SelectionAdapter() { /** * Handles the case of user selecting the * header area. *

If the column has not been selected previously, * it will set the sorter of that column to be * the current tasklist sorter. Repeated * presses on the same column header will * toggle sorting order (ascending/descending). */ public void widgetSelected(SelectionEvent e) { List checkedItems = new ArrayList(); TableItem[] items = tableViewer.getTable().getItems(); for (int i = 0; i < items.length; i++) { if (items[i].getChecked()) checkedItems.add(items[i].getData()); } // column selected - need to sort int column = tableViewer.getTable().indexOf((TableColumn) e.widget); setSortColumn(tableViewer, column); items = tableViewer.getTable().getItems(); for (int i = 0; i < items.length; i++) { if (checkedItems.contains(items[i].getData())) items[i].setChecked(true); } } }; } private SVNRevision.Number getRevision(ISVNRemoteResource currentEdition) { if (currentEdition == null) return SVNRevision.INVALID_REVISION; return currentEdition.getLastChangedRevision(); } public void setRemoteResource(ISVNRemoteResource remoteResource) { this.currentRemoteResource = remoteResource; this.currentRevision = getRevision(remoteResource); } /** * get the current revision (ie the lastChangedRevision of the remoteResource) */ public SVNRevision.Number getCurrentRevision() { return currentRevision; } /** * get the remote resource from which we want the history * @return */ public ISVNRemoteResource getRemoteResource() { return this.currentRemoteResource; } public void setIncludeMergeRevisions(boolean includeMergeRevisions) { this.includeMergeRevisions = includeMergeRevisions; } public void setIncludeTags(boolean includeTags) { this.includeTags = includeTags; } public boolean isIncludeTags() { return includeTags; } public void setIncludeBugs(boolean includeBugs) { this.includeBugs = includeBugs; } public boolean isIncludeBugs() { return this.projectProperties != null; } public void setProjectProperties(ProjectProperties projectProperties) { this.projectProperties = projectProperties; } public void setSortColumn(final TableViewer tableViewer, int column) { HistorySorter oldSorter = (HistorySorter)tableViewer.getSorter(); if (oldSorter != null && column == oldSorter.getColumnNumber()) { oldSorter.setReversed(!oldSorter.isReversed()); if (oldSorter.isReversed()) tableViewer.getTable().setSortDirection(SWT.DOWN); else tableViewer.getTable().setSortDirection(SWT.UP); tableViewer.refresh(); } else { HistorySorter newSorter = new HistorySorter(column); if (column == 0) newSorter.setReversed(true); tableViewer.setSorter(newSorter); if (column == 0)tableViewer.getTable().setSortDirection(SWT.DOWN); else tableViewer.getTable().setSortDirection(SWT.UP); } // tableViewer.getTable().setSortColumn((TableColumn)e.widget); tableViewer.getTable().setSortColumn(tableViewer.getTable().getColumn(column)); } } RemoteResourceDropAdapter.java000066400000000000000000000022171203611042400431500ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/history/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.history; import org.eclipse.team.ui.history.IHistoryView; import org.eclipse.ui.part.IDropActionDelegate; import org.tigris.subversion.subclipse.ui.actions.RemoteResourceTransfer; public class RemoteResourceDropAdapter implements IDropActionDelegate { public boolean run(Object source, Object target) { if (source != null && target instanceof IHistoryView) { RemoteResourceTransfer transfer = RemoteResourceTransfer.getInstance(); Object file = transfer.fromByteArray((byte[]) source); ((IHistoryView) target).showHistoryFor(file); } return false; } } SVNHistoryPage.java000066400000000000000000003470131203611042400407120ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/history/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.history; import java.io.File; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import java.net.URL; import java.util.ArrayList; import java.util.Collections; import java.util.Date; import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IAction; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.JFaceColors; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.IRegion; import org.eclipse.jface.text.ITextOperationTarget; import org.eclipse.jface.text.ITextViewer; import org.eclipse.jface.text.Region; import org.eclipse.jface.text.TextViewer; import org.eclipse.jface.text.hyperlink.IHyperlink; import org.eclipse.jface.text.hyperlink.IHyperlinkDetector; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.jface.text.source.SourceViewer; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.StructuredViewer; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.eclipse.jface.window.Window; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.events.KeyListener; import org.eclipse.swt.graphics.Cursor; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.program.Program; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.TableItem; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; import org.eclipse.team.core.variants.IResourceVariant; import org.eclipse.team.ui.history.HistoryPage; import org.eclipse.team.ui.history.IHistoryPageSite; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.ContainerSelectionDialog; import org.eclipse.ui.editors.text.EditorsUI; import org.eclipse.ui.editors.text.TextSourceViewerConfiguration; import org.eclipse.ui.part.IPageSite; import org.eclipse.ui.texteditor.ITextEditorActionConstants; import org.tigris.subversion.subclipse.core.IResourceStateChangeListener; import org.tigris.subversion.subclipse.core.ISVNLocalFile; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNStatus; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.commands.ChangeCommitPropertiesCommand; import org.tigris.subversion.subclipse.core.commands.GetLogsCommand; import org.tigris.subversion.subclipse.core.history.AliasManager; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.history.LogEntry; import org.tigris.subversion.subclipse.core.history.LogEntryChangePath; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.RemoteFolder; import org.tigris.subversion.subclipse.core.resources.RemoteResource; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.CancelableSVNLogMessageCallback; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.actions.ExportRemoteFolderAction; import org.tigris.subversion.subclipse.ui.actions.GenerateChangeLogAction; import org.tigris.subversion.subclipse.ui.actions.OpenRemoteFileAction; import org.tigris.subversion.subclipse.ui.actions.ShowAnnotationAction; import org.tigris.subversion.subclipse.ui.actions.ShowDifferencesAsUnifiedDiffAction; import org.tigris.subversion.subclipse.ui.actions.ShowHistoryAction; import org.tigris.subversion.subclipse.ui.actions.WorkspaceAction; import org.tigris.subversion.subclipse.ui.console.TextViewerAction; import org.tigris.subversion.subclipse.ui.dialogs.HistorySearchDialog; import org.tigris.subversion.subclipse.ui.dialogs.SetCommitPropertiesDialog; import org.tigris.subversion.subclipse.ui.dialogs.ShowRevisionsDialog; import org.tigris.subversion.subclipse.ui.internal.Utils; import org.tigris.subversion.subclipse.ui.operations.BranchTagOperation; import org.tigris.subversion.subclipse.ui.operations.MergeOperation; import org.tigris.subversion.subclipse.ui.operations.ReplaceOperation; import org.tigris.subversion.subclipse.ui.operations.SwitchOperation; import org.tigris.subversion.subclipse.ui.settings.ProjectProperties; import org.tigris.subversion.subclipse.ui.svnproperties.SvnRevPropertiesView; import org.tigris.subversion.subclipse.ui.util.EmptySearchViewerFilter; import org.tigris.subversion.subclipse.ui.util.LinkList; import org.tigris.subversion.subclipse.ui.wizards.BranchTagWizard; import org.tigris.subversion.subclipse.ui.wizards.ClosableWizardDialog; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardDialog; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardSwitchPage; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNProperty; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNRevisionRange; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * IHistoryPage for generic history view * * @author Eugene Kuleshov (migration from legacy history view) */ public class SVNHistoryPage extends HistoryPage implements IResourceStateChangeListener, KeyListener { private SashForm svnHistoryPageControl; private SashForm innerSashForm; private HistorySearchDialog historySearchDialog; HistoryTableProvider historyTableProvider; TableViewer tableHistoryViewer; StructuredViewer changePathsViewer; TextViewer textViewer; private boolean showComments; private boolean showAffectedPaths; private boolean wrapCommentsText; boolean shutdown = false; private ProjectProperties projectProperties; private Composite tableParent; private static HistorySearchViewerFilter historySearchViewerFilter; // cached for efficiency ILogEntry[] entries; LogEntryChangePath[] currentLogEntryChangePath; ILogEntry lastEntry; SVNRevision revisionStart = SVNRevision.HEAD; AbstractFetchJob fetchLogEntriesJob = null; AbstractFetchJob fetchAllLogEntriesJob = null; AbstractFetchJob fetchNextLogEntriesJob = null; FetchChangePathJob fetchChangePathJob = null; AliasManager tagManager; IResource resource; ISVNRemoteResource remoteResource; ISelection selection; private SVNRevisionRange[] revisionRanges; private boolean revertEnabled; private IAction searchAction; private IAction clearSearchAction; private IAction getNextAction; private IAction getAllAction; private IAction toggleStopOnCopyAction; private IAction toggleIncludeMergedRevisionsAction; private IAction toggleShowComments; private IAction toggleWrapCommentsAction; private IAction toggleShowAffectedPathsAction; private IAction openAction; private IAction getContentsAction; private IAction updateToRevisionAction; private IAction openChangedPathAction; private IAction showHistoryAction; private IAction showRevisionPropertiesAction; private IAction compareAction; private IAction showAnnotationAction; private IAction exportAction; private IAction createTagFromRevisionChangedPathAction; private IAction copyChangedPathAction; // private IAction switchChangedPathAction; // private IAction revertChangesChangedPathAction; private IAction createTagFromRevisionAction; private IAction setCommitPropertiesAction; private IAction showRevisionsAction; private IAction revertChangesAction; private IAction refreshAction; private IAction switchAction; private GenerateChangeLogAction generateChangeLogAction; private ToggleAffectedPathsOptionAction[] toggleAffectedPathsLayoutActions; private ToggleAffectedPathsOptionAction[] toggleAffectedPathsModeActions; private TextViewerAction copyAction; private TextViewerAction selectAllAction; private LinkList linkList; private Cursor handCursor; private Cursor busyCursor; private IPreferenceStore store = SVNUIPlugin.getPlugin().getPreferenceStore(); private boolean includeTags = true; private boolean includeBugs = false; public SVNHistoryPage(Object object) { SVNProviderPlugin.addResourceStateChangeListener(this); } public void dispose() { super.dispose(); SVNProviderPlugin.removeResourceStateChangeListener(this); if(busyCursor!=null) { busyCursor.dispose(); } if(handCursor!=null) { handCursor.dispose(); } } public Control getControl() { return svnHistoryPageControl; } public void setFocus() { // TODO Auto-generated method stub } public String getDescription() { // TODO Auto-generated method stub return null; } public String getName() { return remoteResource == null ? null : remoteResource.getRepositoryRelativePath() + Policy.bind("SVNHistoryPage.0") //$NON-NLS-1$ + remoteResource.getRepository(); } public boolean isValidInput(Object object) { if(object instanceof IResource) { RepositoryProvider provider = RepositoryProvider.getProvider(((IResource) object).getProject()); return provider instanceof SVNTeamProvider; } else if(object instanceof ISVNRemoteResource) { return true; } // TODO // } else if(object instanceof CVSFileRevision) { // return true; // } else if(object instanceof CVSLocalFileRevision) { // return true; return false; } public void refresh() { entries = null; lastEntry = null; revisionStart = SVNRevision.HEAD; // show a Busy Cursor during refresh BusyIndicator.showWhile(tableHistoryViewer.getTable().getDisplay(), new Runnable() { public void run() { if(resource != null) { try { remoteResource = SVNWorkspaceRoot.getBaseResourceFor(resource); historyTableProvider.setRemoteResource(remoteResource); projectProperties = ProjectProperties.getProjectProperties(resource); historyTableProvider.setProjectProperties(projectProperties); } catch(SVNException e) { } } if (tableHistoryViewer.getInput() == null) tableHistoryViewer.setInput(remoteResource); tableHistoryViewer.refresh(); tableHistoryViewer.resetFilters(); Object firstElement = tableHistoryViewer.getElementAt(0); if (firstElement != null) { tableHistoryViewer.reveal(firstElement); } getClearSearchAction().setEnabled(false); } }); } public Object getAdapter(Class adapter) { // TODO Auto-generated method stub return null; } public boolean inputSet() { Object input = getInput(); if(input instanceof IResource) { IResource res = (IResource) input; RepositoryProvider teamProvider = RepositoryProvider.getProvider(res.getProject(), SVNProviderPlugin.getTypeId()); if(teamProvider != null) { try { ISVNLocalResource localResource = SVNWorkspaceRoot.getSVNResourceFor(res); LocalResourceStatus localResourceStatus = (localResource != null) ? localResource.getStatus() : null; if(localResource != null && localResourceStatus.isManaged() && (!localResourceStatus.isAdded() || localResourceStatus.isCopied())) { this.resource = res; this.remoteResource = localResource.getBaseResource(); this.projectProperties = ProjectProperties.getProjectProperties(res); boolean includeBugs = projectProperties != null; boolean includeTags = tagsPropertySet(res); if (includeTags != this.includeTags || this.includeBugs != includeBugs ) { this.includeTags = includeTags; this.includeBugs = includeBugs; refreshTable(); } this.historyTableProvider.setRemoteResource(this.remoteResource); this.historyTableProvider.setProjectProperties(this.projectProperties); if (historySearchViewerFilter != null) { // HistorySearchViewerFilter[] filters = { historySearchViewerFilter }; // this.tableHistoryViewer.setFilters(filters); this.tableHistoryViewer.resetFilters(); this.tableHistoryViewer.addFilter(historySearchViewerFilter); historySearchDialog = new HistorySearchDialog(getSite().getShell(), remoteResource); historySearchDialog.setSearchAll(false); historySearchDialog.setStartRevision(historySearchViewerFilter.getStartRevision()); historySearchDialog.setEndRevision(historySearchViewerFilter.getEndRevision()); historySearchViewerFilter = null; getClearSearchAction().setEnabled(true); } else { this.tableHistoryViewer.resetFilters(); getClearSearchAction().setEnabled(false); } this.tableHistoryViewer.setInput(this.remoteResource); // setContentDescription(Policy.bind("HistoryView.titleWithArgument", // baseResource.getName())); //$NON-NLS-1$ // setTitleToolTip(baseResource.getRepositoryRelativePath()); return true; } } catch(TeamException e) { SVNUIPlugin.openError(getSite().getShell(), null, null, e); } } } else if(input instanceof ISVNRemoteResource) { this.resource = null; this.remoteResource = (ISVNRemoteResource) input; boolean includeTags = tagsPropertySet(remoteResource); if (includeTags != this.includeTags) { this.includeTags = includeTags; refreshTable(); } try { this.projectProperties = ProjectProperties.getProjectProperties(this.remoteResource); } catch (SVNException e) { if (!e.operationInterrupted()) { SVNUIPlugin.openError(getSite().getShell(), null, null, e); } } boolean includeBugs = projectProperties != null; if (includeTags != this.includeTags || this.includeBugs != includeBugs ) { this.includeTags = includeTags; this.includeBugs = includeBugs; refreshTable(); } this.historyTableProvider.setRemoteResource(this.remoteResource); this.historyTableProvider.setProjectProperties(this.projectProperties); if (historySearchViewerFilter != null) { // HistorySearchViewerFilter[] filters = { historySearchViewerFilter }; // this.tableHistoryViewer.setFilters(filters); this.tableHistoryViewer.resetFilters(); this.tableHistoryViewer.addFilter(historySearchViewerFilter); historySearchDialog = new HistorySearchDialog(getSite().getShell(), remoteResource); historySearchDialog.setSearchAll(false); historySearchDialog.setStartRevision(historySearchViewerFilter.getStartRevision()); historySearchDialog.setEndRevision(historySearchViewerFilter.getEndRevision()); historySearchViewerFilter = null; getClearSearchAction().setEnabled(true); } else { this.tableHistoryViewer.resetFilters(); getClearSearchAction().setEnabled(false); } this.tableHistoryViewer.setInput(this.remoteResource); // setContentDescription(Policy.bind("HistoryView.titleWithArgument", // remoteResource.getName())); //$NON-NLS-1$ // setTitleToolTip(remoteResource.getRepositoryRelativePath()); return true; } return false; } private boolean tagsPropertySet(IResource resource) { if (resource == null) return false; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); try { if (svnResource.isManaged()) { ISVNProperty property = null; property = svnResource.getSvnProperty("subclipse:tags"); //$NON-NLS-1$ if (property != null && property.getValue() != null) return true; } } catch (SVNException e) {} IResource checkResource = resource; while (checkResource.getParent() != null) { checkResource = checkResource.getParent(); if (checkResource.getParent() == null) return false; svnResource = SVNWorkspaceRoot.getSVNResourceFor(checkResource); try { if (svnResource.isManaged()) { ISVNProperty property = null; property = svnResource.getSvnProperty("subclipse:tags"); //$NON-NLS-1$ if (property != null && property.getValue() != null) return true; } } catch (SVNException e) {} } return false; } private boolean tagsPropertySet(ISVNRemoteResource resource) { ISVNClientAdapter client = null; try { client = SVNProviderPlugin.getPlugin().getSVNClient(); ISVNProperty property = null; SVNProviderPlugin.disableConsoleLogging(); property = client.propertyGet(resource.getUrl(), "subclipse:tags"); //$NON-NLS-1$ if (property != null && property.getValue() != null) { SVNProviderPlugin.enableConsoleLogging(); return true; } ISVNRemoteResource checkResource = resource; while (checkResource.getParent() != null) { checkResource = checkResource.getParent(); property = client.propertyGet(checkResource.getUrl(), "subclipse:tags"); //$NON-NLS-1$ if (property != null && property.getValue() != null) { SVNProviderPlugin.enableConsoleLogging(); return true; } } } catch (Exception e) { SVNProviderPlugin.enableConsoleLogging(); } finally { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } return false; } public void createControl(Composite parent) { this.busyCursor = new Cursor(parent.getDisplay(), SWT.CURSOR_WAIT); this.handCursor = new Cursor(parent.getDisplay(), SWT.CURSOR_HAND); this.showComments = store.getBoolean(ISVNUIConstants.PREF_SHOW_COMMENTS); this.wrapCommentsText = store.getBoolean(ISVNUIConstants.PREF_WRAP_COMMENTS); this.showAffectedPaths = store.getBoolean(ISVNUIConstants.PREF_SHOW_PATHS); this.svnHistoryPageControl = new SashForm(parent, SWT.VERTICAL); this.svnHistoryPageControl.setLayoutData(new GridData(GridData.FILL_BOTH)); this.toggleAffectedPathsModeActions = new ToggleAffectedPathsOptionAction[] { new ToggleAffectedPathsOptionAction(this, "HistoryView.affectedPathsTableLayout", //$NON-NLS-1$ ISVNUIConstants.IMG_AFFECTED_PATHS_TABLE_MODE, ISVNUIConstants.PREF_AFFECTED_PATHS_MODE, ISVNUIConstants.MODE_FLAT), new ToggleAffectedPathsOptionAction(this, "HistoryView.affectedPathsFlatLayout", //$NON-NLS-1$ ISVNUIConstants.IMG_AFFECTED_PATHS_FLAT_MODE, ISVNUIConstants.PREF_AFFECTED_PATHS_MODE, ISVNUIConstants.MODE_FLAT2), new ToggleAffectedPathsOptionAction(this, "HistoryView.affectedPathsCompressedLayout", //$NON-NLS-1$ ISVNUIConstants.IMG_AFFECTED_PATHS_COMPRESSED_MODE, ISVNUIConstants.PREF_AFFECTED_PATHS_MODE, ISVNUIConstants.MODE_COMPRESSED), }; this.toggleAffectedPathsLayoutActions = new ToggleAffectedPathsOptionAction[] { new ToggleAffectedPathsOptionAction(this, "HistoryView.affectedPathsHorizontalLayout", //$NON-NLS-1$ ISVNUIConstants.IMG_AFFECTED_PATHS_HORIZONTAL_LAYOUT, ISVNUIConstants.PREF_AFFECTED_PATHS_LAYOUT, ISVNUIConstants.LAYOUT_HORIZONTAL), new ToggleAffectedPathsOptionAction(this, "HistoryView.affectedPathsVerticalLayout", //$NON-NLS-1$ ISVNUIConstants.IMG_AFFECTED_PATHS_VERTICAL_LAYOUT, ISVNUIConstants.PREF_AFFECTED_PATHS_LAYOUT, ISVNUIConstants.LAYOUT_VERTICAL), }; createTableHistory(svnHistoryPageControl); createAffectedPathsViewer(); contributeActions(); svnHistoryPageControl.setWeights(new int[] { 70, 30}); // set F1 help // PlatformUI.getWorkbench().getHelpSystem().setHelp(svnHistoryPageControl, // IHelpContextIds.RESOURCE_HISTORY_VIEW); // initDragAndDrop(); // add listener for editor page activation - this is to support editor // linking // getSite().getPage().addPartListener(partListener); // getSite().getPage().addPartListener(partListener2); } protected void createTableHistory(Composite parent) { boolean redraw = false; if (tableParent == null) { tableParent = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 1; layout.marginHeight = 0; layout.marginWidth = 0; tableParent.setLayout(layout); GridData gridData = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL); gridData.horizontalIndent = 0; gridData.verticalIndent = 0; tableParent.setLayoutData(gridData); } else { Control[] children = tableParent.getChildren(); for (int i = 0; i < children.length; i++) { children[i].dispose(); } redraw = true; } this.historyTableProvider = new HistoryTableProvider(SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI | SWT.FULL_SELECTION, "SVNHistoryPage"); //$NON-NLS-1$ this.historyTableProvider.setRemoteResource(remoteResource); this.historyTableProvider.setProjectProperties( this.projectProperties ); historyTableProvider.setIncludeMergeRevisions(store.getBoolean(ISVNUIConstants.PREF_INCLUDE_MERGED_REVISIONS)); historyTableProvider.setIncludeTags(includeTags); historyTableProvider.setIncludeBugs(includeBugs); this.tableHistoryViewer = historyTableProvider.createTable(tableParent); if (redraw) { tableParent.layout(true); tableParent.redraw(); } this.tableHistoryViewer.getTable().addKeyListener(this); // set the content provider for the table this.tableHistoryViewer.setContentProvider(new IStructuredContentProvider() { public Object[] getElements(Object inputElement) { // Short-circuit to optimize if(entries != null) return entries; if( !(inputElement instanceof ISVNRemoteResource)) return null; final ISVNRemoteResource remoteResource = (ISVNRemoteResource) inputElement; int entriesToFetch = store.getInt(ISVNUIConstants.PREF_LOG_ENTRIES_TO_FETCH); // If we are filtering by revision range, override entries to fetch. if (historySearchDialog != null && !historySearchDialog.getSearchAllLogs()) { if (historySearchDialog.getStartRevision() != null || historySearchDialog.getEndRevision() != null) { if (getClearSearchAction().isEnabled()) entriesToFetch = 0; } } if (entriesToFetch > 0) fetchLogEntriesJob = new FetchLogEntriesJob(); else fetchLogEntriesJob = new FetchAllLogEntriesJob(); if(fetchLogEntriesJob.getState() != Job.NONE) { fetchLogEntriesJob.cancel(); try { fetchLogEntriesJob.join(); } catch(InterruptedException e) { SVNUIPlugin.log(new SVNException( Policy.bind("HistoryView.errorFetchingEntries", remoteResource.getName()), e)); //$NON-NLS-1$ } } fetchLogEntriesJob.setRemoteFile(remoteResource); Utils.schedule(fetchLogEntriesJob, SVNUIPlugin.getPlugin().getWorkbench().getActiveWorkbenchWindow() .getActivePage().getActivePart().getSite()); return new Object[ 0]; } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { entries = null; lastEntry = null; revisionStart = SVNRevision.HEAD; } }); // set the selectionchanged listener for the table // updates the comments and affected paths when selection changes this.tableHistoryViewer.addSelectionChangedListener(new ISelectionChangedListener() { private ILogEntry currentLogEntry; private int currentSelectionSize = -1; public void selectionChanged(SelectionChangedEvent event) { ISelection selection = event.getSelection(); ILogEntry logEntry = getLogEntry((IStructuredSelection) selection); if(logEntry != currentLogEntry || ((IStructuredSelection) selection).size() != currentSelectionSize) { this.currentLogEntry = logEntry; this.currentSelectionSize = ((IStructuredSelection) selection).size(); updatePanels(selection); } SVNHistoryPage.this.selection = selection; } }); // Double click open action this.tableHistoryViewer.getTable().addListener(SWT.DefaultSelection, new Listener() { public void handleEvent(Event e) { getOpenRemoteFileAction().run(); } }); // Contribute actions to popup menu for the table { MenuManager menuMgr = new MenuManager(); Menu menu = menuMgr.createContextMenu(tableHistoryViewer.getTable()); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager menuMgr) { fillTableMenu(menuMgr); } }); menuMgr.setRemoveAllWhenShown(true); tableHistoryViewer.getTable().setMenu(menu); getHistoryPageSite().getPart().getSite().registerContextMenu(menuMgr, tableHistoryViewer); } if (redraw) { parent.layout(true); parent.redraw(); } } public void refreshTable() { createTableHistory(svnHistoryPageControl); } private void fillChangePathsMenu(IMenuManager manager) { // // Commented out Get Contents, Revert and Switch options until when/if // they can be fixed. Problem is that we need a way to get the local // resource from the LogEntryChangePath. // IStructuredSelection sel = (IStructuredSelection)changePathsViewer.getSelection(); if (sel.size() == 1) { if (sel.getFirstElement() instanceof LogEntryChangePath) { // manager.add(getGetContentsAction()); } manager.add(getCreateTagFromRevisionChangedPathAction()); } // manager.add(getRevertChangesChangedPathAction()); // manager.add(getSwitchChangedPathAction()); manager.add(new Separator("exportImportGroup")); //$NON-NLS-1$ if (sel.size() == 1) { if (sel.getFirstElement() instanceof LogEntryChangePath) { manager.add(getExportAction()); if (((LogEntryChangePath)sel.getFirstElement()).getAction() == 'D') { manager.add(getCopyChangedPathAction()); } } } manager.add(new Separator("openGroup")); //$NON-NLS-1$ if (sel.size() == 1) { if (sel.getFirstElement() instanceof LogEntryChangePath) { manager.add(getShowAnnotationAction()); } manager.add(getCompareAction()); } if (sel.getFirstElement() instanceof LogEntryChangePath) { manager.add(getOpenChangedPathAction()); } if (sel.size() == 1) manager.add(getShowHistoryAction()); } private void fillTableMenu(IMenuManager manager) { // file actions go first (view file) manager.add(new Separator(IWorkbenchActionConstants.GROUP_FILE)); // Add the "Add to Workspace" action if 1 revision is selected. ISelection sel = tableHistoryViewer.getSelection(); if( !sel.isEmpty()) { if(sel instanceof IStructuredSelection) { if(((IStructuredSelection) sel).size() == 1) { if(resource != null && resource instanceof IFile) { manager.add(getGetContentsAction()); manager.add(getUpdateToRevisionAction()); } // manager.add(getShowDifferencesAsUnifiedDiffAction()); // if (resource != null) { manager.add(getCreateTagFromRevisionAction()); // } manager.add(getSetCommitPropertiesAction()); manager.add(getShowRevisionPropertiesAction()); ILogEntry logEntry = (ILogEntry)((IStructuredSelection)sel).getFirstElement(); if (logEntry.getNumberOfChildren() > 0) manager.add(getShowRevisionsAction()); } if(resource != null) { manager.add(getRevertChangesAction()); if(((IStructuredSelection) sel).size() == 1) manager.add(getSwitchAction()); } manager.add(new Separator("exportImportGroup")); //$NON-NLS-1$ getGenerateChangeLogAction().setEnabled(!store.getBoolean(ISVNUIConstants.PREF_FETCH_CHANGE_PATH_ON_DEMAND)); manager.add(getGenerateChangeLogAction()); } } manager.add(new Separator("additions")); //$NON-NLS-1$ manager.add(getRefreshAction()); manager.add(new Separator("additions-end")); //$NON-NLS-1$ } public void createAffectedPathsViewer() { int[] weights = null; weights = svnHistoryPageControl.getWeights(); if(innerSashForm != null) { innerSashForm.dispose(); } if(changePathsViewer != null) { changePathsViewer.getControl().dispose(); } int mode = store.getInt(ISVNUIConstants.PREF_AFFECTED_PATHS_MODE); int layout = store.getInt(ISVNUIConstants.PREF_AFFECTED_PATHS_LAYOUT); if(layout==ISVNUIConstants.LAYOUT_HORIZONTAL) { innerSashForm = new SashForm(svnHistoryPageControl, SWT.HORIZONTAL); } else { innerSashForm = new SashForm(svnHistoryPageControl, SWT.VERTICAL); createText(innerSashForm); } switch(mode) { case ISVNUIConstants.MODE_COMPRESSED: changePathsViewer = new ChangePathsTreeViewer(innerSashForm, this); break; case ISVNUIConstants.MODE_FLAT2: changePathsViewer = new ChangePathsFlatViewer(innerSashForm, this); break; default: changePathsViewer = new ChangePathsTableProvider(innerSashForm, this); break; } changePathsViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { SVNHistoryPage.this.selection = changePathsViewer.getSelection(); } }); changePathsViewer.getControl().addListener(SWT.DefaultSelection, new Listener() { public void handleEvent(Event e) { getOpenChangedPathAction().run(); } }); // Contribute actions to changed paths pane MenuManager menuMgr = new MenuManager(); Menu menu = menuMgr.createContextMenu(changePathsViewer.getControl()); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager menuMgr) { fillChangePathsMenu(menuMgr); } }); menuMgr.setRemoveAllWhenShown(true); changePathsViewer.getControl().setMenu(menu); if(layout==ISVNUIConstants.LAYOUT_HORIZONTAL) { createText(innerSashForm); } setViewerVisibility(); innerSashForm.layout(); if(weights!=null && weights.length==2) { svnHistoryPageControl.setWeights(weights); } svnHistoryPageControl.layout(); updatePanels(tableHistoryViewer.getSelection()); } /** * Create the TextViewer for the logEntry comments */ protected void createText(Composite parent) { // this.textViewer = new TextViewer(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI | SWT.READ_ONLY); SourceViewer result = new SourceViewer(parent, null, null, true, SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI | SWT.READ_ONLY); result.getTextWidget().setIndent(2); result.configure(new TextSourceViewerConfiguration(EditorsUI.getPreferenceStore()) { public Map getHyperlinkDetectorTargets(ISourceViewer sourceViewer) { return Collections.singletonMap("org.eclipse.ui.DefaultTextEditor.Subclipse", //$NON-NLS-1$ new IAdaptable() { public Object getAdapter(Class adapter) { if(adapter==IResource.class && getInput() instanceof IResource) { return getInput(); } else if(adapter==ISVNRemoteResource.class && getInput() instanceof ISVNRemoteResource) { return getInput(); } return Platform.getAdapterManager().getAdapter(SVNHistoryPage.this, adapter); } }); } public int getHyperlinkStateMask(ISourceViewer sourceViewer) { return SWT.NONE; } public IHyperlinkDetector[] getHyperlinkDetectors(ISourceViewer sourceViewer) { IHyperlinkDetector[] detectors = super.getHyperlinkDetectors(sourceViewer); IHyperlinkDetector[] newDetectors; if(detectors==null) { newDetectors = new IHyperlinkDetector[1]; } else { newDetectors = new IHyperlinkDetector[detectors.length + 1]; System.arraycopy(detectors, 0, newDetectors, 0, detectors.length); } newDetectors[newDetectors.length - 1] = new IHyperlinkDetector() { public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) { if(linkList==null || !linkList.isLinkAt(region.getOffset())) { return null; } final String linkUrl = linkList.getLinkAt(region.getOffset()); final int[] linkRange = linkList.getLinkRange(region.getOffset()); return new IHyperlink[] { new IHyperlink() { public IRegion getHyperlinkRegion() { return new Region(linkRange[0], linkRange[1]); } public void open() { try { URL url = new URL(linkUrl); PlatformUI.getWorkbench().getBrowserSupport().createBrowser("Subclipse").openURL(url); //$NON-NLS-1$ } catch (Exception e1) { Program.launch(linkUrl); } } public String getHyperlinkText() { return null; } public String getTypeLabel() { return null; } }}; } }; return newDetectors; } }); this.textViewer = result; this.textViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { copyAction.update(); } }); Font font = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme().getFontRegistry().get( ISVNUIConstants.SVN_COMMENT_FONT); if(font != null) { this.textViewer.getTextWidget().setFont(font); } // Create actions for the text editor (copy and select all) copyAction = new TextViewerAction(this.textViewer, ITextOperationTarget.COPY); copyAction.setText(Policy.bind("HistoryView.copy")); //$NON-NLS-1$ selectAllAction = new TextViewerAction(this.textViewer, ITextOperationTarget.SELECT_ALL); selectAllAction.setText(Policy.bind("HistoryView.selectAll")); //$NON-NLS-1$ IHistoryPageSite parentSite = getHistoryPageSite(); IPageSite pageSite = parentSite.getWorkbenchPageSite(); IActionBars actionBars = pageSite.getActionBars(); actionBars.setGlobalActionHandler(ITextEditorActionConstants.COPY, copyAction); actionBars.setGlobalActionHandler(ITextEditorActionConstants.SELECT_ALL, selectAllAction); actionBars.updateActionBars(); // Contribute actions to popup menu for the comments area { MenuManager menuMgr = new MenuManager(); menuMgr.setRemoveAllWhenShown(true); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager menuMgr) { menuMgr.add(copyAction); menuMgr.add(selectAllAction); } }); StyledText text = this.textViewer.getTextWidget(); Menu menu = menuMgr.createContextMenu(text); text.setMenu(menu); } } private void contributeActions() { toggleShowComments = new Action(Policy.bind("HistoryView.showComments"), //$NON-NLS-1$ SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_COMMENTS)) { public void run() { showComments = isChecked(); setViewerVisibility(); store.setValue(ISVNUIConstants.PREF_SHOW_COMMENTS, showComments); } }; toggleShowComments.setChecked(showComments); // PlatformUI.getWorkbench().getHelpSystem().setHelp(toggleTextAction, // IHelpContextIds.SHOW_COMMENT_IN_HISTORY_ACTION); // Toggle wrap comments action toggleWrapCommentsAction = new Action(Policy.bind("HistoryView.wrapComments")) { //$NON-NLS-1$ public void run() { wrapCommentsText = isChecked(); setViewerVisibility(); store.setValue(ISVNUIConstants.PREF_WRAP_COMMENTS, wrapCommentsText); } }; toggleWrapCommentsAction.setChecked(wrapCommentsText); // PlatformUI.getWorkbench().getHelpSystem().setHelp(toggleTextWrapAction, // IHelpContextIds.SHOW_TAGS_IN_HISTORY_ACTION); // Toggle path visible action toggleShowAffectedPathsAction = new Action(Policy.bind("HistoryView.showAffectedPaths"), //$NON-NLS-1$ SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_AFFECTED_PATHS_FLAT_MODE)) { public void run() { showAffectedPaths = isChecked(); setViewerVisibility(); store.setValue(ISVNUIConstants.PREF_SHOW_PATHS, showAffectedPaths); } }; toggleShowAffectedPathsAction.setChecked(showAffectedPaths); // PlatformUI.getWorkbench().getHelpSystem().setHelp(toggleListAction, // IHelpContextIds.SHOW_TAGS_IN_HISTORY_ACTION); // Toggle stop on copy action toggleStopOnCopyAction = new Action(Policy.bind("HistoryView.stopOnCopy")) { //$NON-NLS-1$ public void run() { refresh(); SVNUIPlugin.getPlugin().getPreferenceStore().setValue(ISVNUIConstants.PREF_STOP_ON_COPY, toggleStopOnCopyAction.isChecked()); } }; toggleStopOnCopyAction.setChecked(store.getBoolean(ISVNUIConstants.PREF_STOP_ON_COPY)); // Toggle include merged revisions action toggleIncludeMergedRevisionsAction = new Action(Policy.bind("HistoryView.includeMergedRevisions")) { //$NON-NLS-1$ public void run() { store.setValue(ISVNUIConstants.PREF_INCLUDE_MERGED_REVISIONS, toggleIncludeMergedRevisionsAction.isChecked()); refreshTable(); refresh(); } }; toggleIncludeMergedRevisionsAction.setChecked(store.getBoolean(ISVNUIConstants.PREF_INCLUDE_MERGED_REVISIONS)); IHistoryPageSite parentSite = getHistoryPageSite(); IPageSite pageSite = parentSite.getWorkbenchPageSite(); IActionBars actionBars = pageSite.getActionBars(); // Contribute toggle text visible to the toolbar drop-down IMenuManager actionBarsMenu = actionBars.getMenuManager(); actionBarsMenu.add(getGetNextAction()); actionBarsMenu.add(getGetAllAction()); actionBarsMenu.add(toggleStopOnCopyAction); actionBarsMenu.add(toggleIncludeMergedRevisionsAction); actionBarsMenu.add(new Separator()); actionBarsMenu.add(toggleWrapCommentsAction); actionBarsMenu.add(new Separator()); actionBarsMenu.add(toggleShowComments); actionBarsMenu.add(toggleShowAffectedPathsAction); actionBarsMenu.add(new Separator()); for (int i = 0; i < toggleAffectedPathsModeActions.length; i++) { actionBarsMenu.add(toggleAffectedPathsModeActions[i]); } actionBarsMenu.add(new Separator()); for (int i = 0; i < toggleAffectedPathsLayoutActions.length; i++) { actionBarsMenu.add(toggleAffectedPathsLayoutActions[i]); } // Create the local tool bar IToolBarManager tbm = actionBars.getToolBarManager(); // tbm.add(getRefreshAction()); tbm.add(new Separator()); tbm.add(getSearchAction()); tbm.add(getClearSearchAction()); tbm.add(new Separator()); tbm.add(toggleShowComments); tbm.add(toggleShowAffectedPathsAction); tbm.add(new Separator()); tbm.add(getGetNextAction()); tbm.add(getGetAllAction()); // tbm.add(getLinkWithEditorAction()); tbm.update(false); actionBars.updateActionBars(); } ILogEntry getLogEntry(IStructuredSelection ss) { if(ss.getFirstElement() instanceof LogEntryChangePath) { return ((LogEntryChangePath) ss.getFirstElement()).getLogEntry(); } return (ILogEntry) ss.getFirstElement(); } void updatePanels(ISelection selection) { if(selection == null || !(selection instanceof IStructuredSelection)) { textViewer.setDocument(new Document("")); //$NON-NLS-1$ changePathsViewer.setInput(null); return; } IStructuredSelection ss = (IStructuredSelection) selection; if(ss.size() != 1) { textViewer.setDocument(new Document("")); //$NON-NLS-1$ changePathsViewer.setInput(null); return; } LogEntry entry = (LogEntry) ss.getFirstElement(); textViewer.setDocument(new Document(entry.getComment())); StyledText text = textViewer.getTextWidget(); // TODO move this logic into the hyperlink detector created in createText() if(projectProperties == null) { linkList = ProjectProperties.getUrls(entry.getComment()); } else { linkList = projectProperties.getLinkList(entry.getComment()); } if(linkList != null) { int[][] linkRanges = linkList.getLinkRanges(); // String[] urls = linkList.getUrls(); for(int i = 0; i < linkRanges.length; i++) { text.setStyleRange(new StyleRange(linkRanges[ i][ 0], linkRanges[ i][ 1], JFaceColors.getHyperlinkText(Display.getCurrent()), null)); } } if (changePathsViewer instanceof ChangePathsTreeViewer) { ((ChangePathsTreeViewer)changePathsViewer).setCurrentLogEntry(entry); } if (changePathsViewer instanceof ChangePathsFlatViewer) { ((ChangePathsFlatViewer)changePathsViewer).setCurrentLogEntry(entry); } if (changePathsViewer instanceof ChangePathsTableProvider) { ((ChangePathsTableProvider)changePathsViewer).setCurrentLogEntry(entry); } changePathsViewer.setInput(entry); } void setViewerVisibility() { if(showComments && showAffectedPaths) { svnHistoryPageControl.setMaximizedControl(null); innerSashForm.setMaximizedControl(null); } else if(showComments) { svnHistoryPageControl.setMaximizedControl(null); innerSashForm.setMaximizedControl(textViewer.getTextWidget()); } else if(showAffectedPaths) { svnHistoryPageControl.setMaximizedControl(null); innerSashForm.setMaximizedControl(changePathsViewer.getControl()); } else { svnHistoryPageControl.setMaximizedControl(tableParent); } changePathsViewer.refresh(); textViewer.getTextWidget().setWordWrap(wrapCommentsText); } void setCurrentLogEntryChangePath(final LogEntryChangePath[] currentLogEntryChangePath) { this.currentLogEntryChangePath = currentLogEntryChangePath; if( !shutdown) { // Getting the changePaths /* * final SVNRevision.Number revisionId = * remoteResource.getLastChangedRevision(); */ getSite().getShell().getDisplay().asyncExec(new Runnable() { public void run() { if(currentLogEntryChangePath != null && changePathsViewer != null && !changePathsViewer.getControl().isDisposed()) { // once we got the changePath, we refresh the table changePathsViewer.refresh(); // selectRevision(revisionId); } } }); } } /** * Select the revision in the receiver. */ public void selectRevision(SVNRevision.Number revision) { if(entries == null) { return; } ILogEntry entry = null; for(int i = 0; i < entries.length; i++) { if(entries[ i].getRevision().equals(revision)) { entry = entries[ i]; break; } } if(entry != null) { IStructuredSelection selection = new StructuredSelection(entry); tableHistoryViewer.setSelection(selection, true); } } public void scheduleFetchChangePathJob(ILogEntry logEntry) { if(fetchChangePathJob == null) { fetchChangePathJob = new FetchChangePathJob(); } if(fetchChangePathJob.getState() != Job.NONE) { fetchChangePathJob.cancel(); try { fetchChangePathJob.join(); } catch(InterruptedException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); // SVNUIPlugin.log(new // SVNException(Policy.bind("HistoryView.errorFetchingEntries", // remoteResource.getName()), e)); //$NON-NLS-1$ } } fetchChangePathJob.setLogEntry(logEntry); Utils.schedule(fetchChangePathJob, getSite()); } public boolean isShowChangePaths() { return showAffectedPaths; } private SVNRevision getSelectedRevision() { IStructuredSelection sel = (IStructuredSelection)tableHistoryViewer.getSelection(); if (sel.getFirstElement() instanceof ILogEntry) { return ((ILogEntry)sel.getFirstElement()).getRevision(); } return null; } private IAction getOpenRemoteFileAction() { if(openAction == null) { openAction = new Action() { public void run() { OpenRemoteFileAction delegate = new OpenRemoteFileAction(); delegate.init(this); delegate.selectionChanged(this, tableHistoryViewer.getSelection()); if(isEnabled()) { try { // disableEditorActivation = true; delegate.run(this); } finally { // disableEditorActivation = false; } } } }; } return openAction; } private boolean isFile() { IStructuredSelection sel = (IStructuredSelection)changePathsViewer.getSelection(); if (sel.size() == 1 && sel.getFirstElement() instanceof LogEntryChangePath) { LogEntryChangePath changePath = (LogEntryChangePath)sel.getFirstElement(); try { return changePath.getRemoteResource() instanceof ISVNRemoteFile; } catch (SVNException e) {} } return false; } // open changed Path (double-click) private IAction getOpenChangedPathAction() { if(openChangedPathAction == null) { openChangedPathAction = new Action("Open") { //$NON-NLS-1$ public void run() { if (!isFile()) { MessageDialog.openError(Display.getDefault().getActiveShell(), Policy.bind("SVNHistoryPage.7"), Policy.bind("SVNHistoryPage.8")); //$NON-NLS-1$ //$NON-NLS-2$ return; } OpenRemoteFileAction delegate = new OpenRemoteFileAction(); delegate.setUsePegRevision(true); delegate.init(this); delegate.selectionChanged(this, changePathsViewer.getSelection()); if(isEnabled()) { try { delegate.run(this); } finally { // disableEditorActivation = false; } } } }; } // openChangedPathAction.setEnabled(isFile()); return openChangedPathAction; } private IAction getShowHistoryAction() { if(showHistoryAction == null) { showHistoryAction = new Action("Show History", SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_MENU_SHOWHISTORY)) { //$NON-NLS-1$ public void run() { HistoryAction delegate = new HistoryAction(); delegate.selectionChanged(this, changePathsViewer.getSelection()); delegate.run(this); } }; } return showHistoryAction; } private IAction getCopyChangedPathAction() { if (copyChangedPathAction == null) { copyChangedPathAction = new Action(Policy.bind("HistoryView.copyChangedPath")) { //$NON-NLS-1$ public void run() { ContainerSelectionDialog dialog = new ContainerSelectionDialog(Display.getDefault().getActiveShell(), null, false, Policy.bind("CopyAction.selectionLabel")); //$NON-NLS-1$ if (dialog.open() == ContainerSelectionDialog.OK) { Object[] result = dialog.getResult(); if (result == null || result.length == 0) return; final Path path = (Path)result[0]; IProject selectedProject; File target = null; if (path.segmentCount() == 1) { selectedProject = ResourcesPlugin.getWorkspace().getRoot().getProject(path.toString()); target = selectedProject.getLocation().toFile(); } else { IFile targetFile = ResourcesPlugin.getWorkspace().getRoot().getFile(path); selectedProject = targetFile.getProject(); target = targetFile.getLocation().toFile(); } final IProject targetProject = selectedProject; final File destPath = target; BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { ISVNClientAdapter client = null; try { IStructuredSelection sel = (IStructuredSelection)changePathsViewer.getSelection(); if (sel.getFirstElement() instanceof LogEntryChangePath) { LogEntryChangePath changePath = (LogEntryChangePath)sel.getFirstElement(); SVNRevision revision = changePath.getRevision(); if (changePath.getAction() == 'D') { long rev = Long.parseLong(revision.toString()); rev--; revision = new SVNRevision.Number(rev); } client = SVNProviderPlugin.getPlugin().getSVNClient(); client.copy(changePath.getUrl(), destPath, revision, revision, true, false); targetProject.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); SVNUIPlugin.getPlugin().getRepositoryManager().resourceCreated(null, null); } } catch (Exception e) { MessageDialog.openError(Display.getDefault().getActiveShell(), Policy.bind("HistoryView.copyError"), e.getMessage()); //$NON-NLS-1$ } finally { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } } }); } } }; } return copyChangedPathAction; } private IAction getExportAction() { if(exportAction == null) { exportAction = new Action("Export...", SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_MENU_EXPORT)) { //$NON-NLS-1$ public void run() { ExportAction delegate = new ExportAction(); delegate.selectionChanged(this, changePathsViewer.getSelection()); delegate.run(this); } }; } return exportAction; } private IAction getShowAnnotationAction() { if(showAnnotationAction == null) { showAnnotationAction = new Action("Show Annotation", SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_MENU_ANNOTATE)) { //$NON-NLS-1$ public void run() { if (!isFile()) { MessageDialog.openError(Display.getDefault().getActiveShell(), Policy.bind("SVNHistoryPage.11"), Policy.bind("SVNHistoryPage.12")); //$NON-NLS-1$ //$NON-NLS-2$ return; } AnnotationAction delegate = new AnnotationAction(); delegate.selectionChanged(this, changePathsViewer.getSelection()); delegate.run(this); } }; } // showAnnotationAction.setEnabled(isFile()); return showAnnotationAction; } private IAction getCompareAction() { if(compareAction == null) { compareAction = new Action("Compare...") { //$NON-NLS-1$ public void run() { CompareAction delegate = new CompareAction(); delegate.selectionChanged(this, changePathsViewer.getSelection()); delegate.run(this); } }; } return compareAction; } private IAction getCreateTagFromRevisionChangedPathAction() { if(createTagFromRevisionChangedPathAction == null) { createTagFromRevisionChangedPathAction = new Action() { //$NON-NLS-1$ public void run() { SVNRevision selectedRevision = null; ISelection selection = changePathsViewer.getSelection(); if( !(selection instanceof IStructuredSelection)) return; IStructuredSelection sel = (IStructuredSelection)selection; ISVNRemoteResource remoteResource = null; if (sel.getFirstElement() instanceof LogEntryChangePath) { try { remoteResource = ((LogEntryChangePath)sel.getFirstElement()).getRemoteResource(); selectedRevision = remoteResource.getRevision(); } catch (SVNException e) {} } else if (sel.getFirstElement() instanceof HistoryFolder) { HistoryFolder historyFolder = (HistoryFolder)sel.getFirstElement(); Object[] children = historyFolder.getChildren(); if (children != null && children.length > 0 && children[0] instanceof LogEntryChangePath) { LogEntryChangePath changePath = (LogEntryChangePath)children[0]; try { remoteResource = changePath.getRemoteResource().getRepository().getRemoteFolder(historyFolder.getPath()); selectedRevision = getSelectedRevision(); } catch (SVNException e) {} } } if (remoteResource == null) return; ISVNRemoteResource[] remoteResources = { remoteResource }; BranchTagWizard wizard = new BranchTagWizard(remoteResources); wizard.setRevisionNumber(Long.parseLong(selectedRevision.toString())); WizardDialog dialog = new ClosableWizardDialog(getSite().getShell(), wizard); if (dialog.open() == WizardDialog.OK) { final SVNUrl sourceUrl = wizard.getUrl(); final SVNUrl destinationUrl = wizard.getToUrl(); final String message = wizard.getComment(); final SVNRevision revision = wizard.getRevision(); final boolean makeParents = wizard.isMakeParents(); try { BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { ISVNClientAdapter client = null; try { client = SVNProviderPlugin.getPlugin().getSVNClientManager().getSVNClient(); client.copy(sourceUrl, destinationUrl, message, revision, makeParents); SVNUIPlugin.getPlugin().getRepositoryManager().resourceCreated(null, null); } catch(Exception e) { MessageDialog.openError(getSite().getShell(), Policy.bind("HistoryView.createTagFromRevision"), e //$NON-NLS-1$ .getMessage()); } finally { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } } }); } catch(Exception e) { MessageDialog.openError(getSite().getShell(), Policy.bind("HistoryView.createTagFromRevision"), e //$NON-NLS-1$ .getMessage()); } } // SvnWizardBranchTagPage branchTagPage = new SvnWizardBranchTagPage(remoteResource); // branchTagPage.setRevisionNumber(Long.parseLong(selectedRevision.toString())); // SvnWizard wizard = new SvnWizard(branchTagPage); // SvnWizardDialog dialog = new SvnWizardDialog(getSite().getShell(), wizard); // wizard.setParentDialog(dialog); // if (!(dialog.open() == SvnWizardDialog.OK)) return; // final SVNUrl sourceUrl = branchTagPage.getUrl(); // final SVNUrl destinationUrl = branchTagPage.getToUrl(); // final String message = branchTagPage.getComment(); // final SVNRevision revision = branchTagPage.getRevision(); // final boolean makeParents = branchTagPage.isMakeParents(); // try { // BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { // public void run() { // try { // ISVNClientAdapter client = SVNProviderPlugin.getPlugin().getSVNClientManager().createSVNClient(); // client.copy(sourceUrl, destinationUrl, message, revision, makeParents); // } catch(Exception e) { // MessageDialog.openError(getSite().getShell(), Policy.bind("HistoryView.createTagFromRevision"), e // .getMessage()); // } // } // }); // } catch(Exception e) { // MessageDialog.openError(getSite().getShell(), Policy.bind("HistoryView.createTagFromRevision"), e // .getMessage()); // } } }; } ISelection selection = changePathsViewer.getSelection(); if(selection instanceof IStructuredSelection) { IStructuredSelection sel = (IStructuredSelection) selection; SVNRevision selectedRevision = null; if(sel.size() == 1) { // ISVNRemoteResource remoteResource = null; if (sel.getFirstElement() instanceof LogEntryChangePath && ((LogEntryChangePath)sel.getFirstElement()).getAction() != 'D') { // try { // remoteResource = ((LogEntryChangePath)sel.getFirstElement()).getRemoteResource(); selectedRevision = ((LogEntryChangePath)sel.getFirstElement()).getRevision(); // selectedRevision = remoteResource.getRevision(); // } catch (SVNException e) {} } else if (sel.getFirstElement() instanceof HistoryFolder) { HistoryFolder historyFolder = (HistoryFolder)sel.getFirstElement(); Object[] children = historyFolder.getChildren(); if (children != null && children.length > 0 && children[0] instanceof LogEntryChangePath) { selectedRevision = getSelectedRevision(); } } createTagFromRevisionChangedPathAction.setEnabled(selectedRevision != null); if (selectedRevision == null) { createTagFromRevisionChangedPathAction.setText(Policy.bind("HistoryView.createTagFromRevision", "" //$NON-NLS-1$ //$NON-NLS-2$ + ((LogEntryChangePath)sel.getFirstElement()).getRevision())); } else { createTagFromRevisionChangedPathAction.setText(Policy.bind("HistoryView.createTagFromRevision", "" //$NON-NLS-1$ //$NON-NLS-2$ + selectedRevision)); } } } createTagFromRevisionChangedPathAction.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_MENU_BRANCHTAG)); return createTagFromRevisionChangedPathAction; } class AnnotationAction extends ShowAnnotationAction { public IStructuredSelection fSelection; public AnnotationAction() { super(); } protected ISVNRemoteFile getSingleSelectedSVNRemoteFile() { ISVNRemoteResource remoteResource = null; if (fSelection.getFirstElement() instanceof LogEntryChangePath) { try { remoteResource = ((LogEntryChangePath)fSelection.getFirstElement()).getRemoteResource(); if (remoteResource instanceof RemoteResource) { ((RemoteResource)remoteResource).setPegRevision(((LogEntryChangePath)fSelection.getFirstElement()).getRevision()); } } catch (SVNException e) {} } return (ISVNRemoteFile)remoteResource; } protected boolean isEnabled() { return true; } public void selectionChanged(IAction action, ISelection sel) { if (sel instanceof IStructuredSelection) { fSelection= (IStructuredSelection) sel; } } } class HistoryAction extends ShowHistoryAction { public IStructuredSelection fSelection; public HistoryAction() { super(); } protected ISVNRemoteResource[] getSelectedRemoteResources() { ISVNRemoteResource remoteResource = null; if (fSelection.getFirstElement() instanceof LogEntryChangePath) { try { remoteResource = ((LogEntryChangePath)fSelection.getFirstElement()).getRemoteResource(); } catch (SVNException e) {} } else if (fSelection.getFirstElement() instanceof HistoryFolder) { HistoryFolder historyFolder = (HistoryFolder)fSelection.getFirstElement(); Object[] children = historyFolder.getChildren(); if (children != null && children.length > 0 && children[0] instanceof LogEntryChangePath) { LogEntryChangePath changePath = (LogEntryChangePath)children[0]; try { remoteResource = changePath.getRemoteResource().getRepository().getRemoteFolder(historyFolder.getPath()); } catch (SVNException e) {} } } if (remoteResource != null) { ISVNRemoteResource[] selectedResource = { remoteResource }; return selectedResource; } return new ISVNRemoteResource[0]; } protected boolean isEnabled() { return true; } public void selectionChanged(IAction action, ISelection sel) { if (sel instanceof IStructuredSelection) { fSelection= (IStructuredSelection) sel; } } } class ExportAction extends ExportRemoteFolderAction { public IStructuredSelection fSelection; public ExportAction() { super(); } protected ISVNRemoteResource[] getSelectedRemoteResources() { ISVNRemoteResource remoteResource = null; if (fSelection.getFirstElement() instanceof LogEntryChangePath) { try { remoteResource = ((LogEntryChangePath)fSelection.getFirstElement()).getRemoteResource(); } catch (SVNException e) {} } if (remoteResource != null) { ISVNRemoteResource[] selectedResource = { remoteResource }; return selectedResource; } return new ISVNRemoteResource[0]; } protected boolean isEnabled() { return true; } public void selectionChanged(IAction action, ISelection sel) { if (sel instanceof IStructuredSelection) { fSelection= (IStructuredSelection) sel; } } } class CompareAction extends ShowDifferencesAsUnifiedDiffAction { public IStructuredSelection fSelection; public CompareAction() { super(); setUsePegRevision(true); } protected ISVNRemoteResource[] getSelectedRemoteResources() { ISVNRemoteResource remoteResource = null; if (fSelection.getFirstElement() instanceof LogEntryChangePath) { try { remoteResource = ((LogEntryChangePath)fSelection.getFirstElement()).getRemoteResource(); if (remoteResource instanceof RemoteResource) { ((RemoteResource) remoteResource).setPegRevision(((LogEntryChangePath)fSelection.getFirstElement()).getRevision()); } } catch (SVNException e) {} } else if (fSelection.getFirstElement() instanceof HistoryFolder) { HistoryFolder historyFolder = (HistoryFolder)fSelection.getFirstElement(); Object[] children = historyFolder.getChildren(); if (children != null && children.length > 0 && children[0] instanceof LogEntryChangePath) { LogEntryChangePath changePath = (LogEntryChangePath)children[0]; try { ISVNRemoteResource changePathResource = changePath.getRemoteResource(); ISVNRemoteResource remoteFolder = changePathResource.getRepository().getRemoteFolder(historyFolder.getPath()); remoteResource = new RemoteFolder(null, changePathResource.getRepository(), remoteFolder.getUrl(), changePathResource.getRevision(), (SVNRevision.Number)changePathResource.getRevision(), null, null); } catch (SVNException e) {} } } if (remoteResource != null) { ISVNRemoteResource[] selectedResource = { remoteResource }; return selectedResource; } return new ISVNRemoteResource[0]; } protected boolean isEnabled() { return true; } public void selectionChanged(IAction action, ISelection sel) { if (sel instanceof IStructuredSelection) { fSelection= (IStructuredSelection) sel; } } } // get contents Action (context menu) private IAction getGetContentsAction() { if(getContentsAction == null) { getContentsAction = getContextMenuAction(Policy.bind("HistoryView.getContentsAction"), new IWorkspaceRunnable() { //$NON-NLS-1$ public void run(IProgressMonitor monitor) throws CoreException { ISelection selection = getSelection(); if( !(selection instanceof IStructuredSelection)) return; IStructuredSelection ss = (IStructuredSelection) selection; ISVNRemoteFile remoteFile = (ISVNRemoteFile) getLogEntry(ss).getRemoteResource(); monitor.beginTask(null, 100); try { if(remoteFile != null) { if(confirmOverwrite()) { if (remoteFile instanceof RemoteResource) { if (resource != null) { ISVNLocalResource localResource = SVNWorkspaceRoot.getSVNResourceFor(resource); ((RemoteResource)remoteFile).setPegRevision(localResource.getRevision()); } else { ((RemoteResource)remoteFile).setPegRevision(SVNRevision.HEAD); } } InputStream in = ((IResourceVariant) remoteFile).getStorage(new SubProgressMonitor(monitor, 50)) .getContents(); IFile file = (IFile) resource; file.setContents(in, false, true, new SubProgressMonitor(monitor, 50)); } } } catch(TeamException e) { throw new CoreException(e.getStatus()); } finally { monitor.done(); } } }); PlatformUI.getWorkbench().getHelpSystem().setHelp(getContentsAction, IHelpContextIds.GET_FILE_CONTENTS_ACTION); } return getContentsAction; } // update to the selected revision (context menu) private IAction getUpdateToRevisionAction() { if(updateToRevisionAction == null) { updateToRevisionAction = getContextMenuAction( Policy.bind("HistoryView.getRevisionAction"), new IWorkspaceRunnable() { //$NON-NLS-1$ public void run(IProgressMonitor monitor) throws CoreException { ISelection selection = getSelection(); if( !(selection instanceof IStructuredSelection)) return; IStructuredSelection ss = (IStructuredSelection) selection; ISVNRemoteFile remoteFile = (ISVNRemoteFile) getLogEntry(ss).getRemoteResource(); try { if(remoteFile != null) { if(confirmOverwrite()) { IFile file = (IFile) resource; new ReplaceOperation(getSite().getPage().getActivePart(), file, remoteFile.getLastChangedRevision()) .run(monitor); historyTableProvider.setRemoteResource(remoteFile); historyTableProvider.setProjectProperties(ProjectProperties.getProjectProperties(resource)); Display.getDefault().asyncExec(new Runnable() { public void run() { tableHistoryViewer.refresh(); } }); } } } catch(InvocationTargetException e) { throw new CoreException(new SVNStatus(IStatus.ERROR, 0, e.getMessage())); } catch(InterruptedException e) { // Cancelled by user } } }); PlatformUI.getWorkbench().getHelpSystem().setHelp(updateToRevisionAction, IHelpContextIds.GET_FILE_REVISION_ACTION); } return updateToRevisionAction; } // get switch action (context menu) private IAction getSwitchAction() { if (switchAction == null) { switchAction = new Action() { public void run() { if(selection instanceof IStructuredSelection) { IStructuredSelection ss = (IStructuredSelection) selection; if(ss.size() == 1) { ILogEntry currentSelection = getLogEntry(ss); IResource[] resources = { resource }; SvnWizardSwitchPage switchPage = new SvnWizardSwitchPage(resources, currentSelection.getRevision().getNumber()); SvnWizard wizard = new SvnWizard(switchPage); SvnWizardDialog dialog = new SvnWizardDialog(getSite().getShell(), wizard); wizard.setParentDialog(dialog); if (dialog.open() == SvnWizardDialog.OK) { SVNUrl[] svnUrls = switchPage.getUrls(); SVNRevision svnRevision = switchPage.getRevision(); SwitchOperation switchOperation = new SwitchOperation(getSite().getPage().getActivePart(), resources, svnUrls, svnRevision); switchOperation.setDepth(switchPage.getDepth()); switchOperation.setSetDepth(switchPage.isSetDepth()); switchOperation.setIgnoreExternals(switchPage.isIgnoreExternals()); switchOperation.setForce(switchPage.isForce()); switchOperation.setIgnoreAncestry(switchPage.isIgnoreAncestry()); switchOperation.setConflictResolver(switchPage.getConflictResolver()); try { switchOperation.run(); } catch (Exception e) { MessageDialog.openError(getSite().getShell(), switchAction.getText(), e .getMessage()); } } } } } }; } ISelection selection = getSelection(); if(selection instanceof IStructuredSelection) { IStructuredSelection ss = (IStructuredSelection) selection; if(ss.size() == 1) { ILogEntry currentSelection = getLogEntry(ss); switchAction.setText(Policy.bind("HistoryView.switchToRevision", "" //$NON-NLS-1$ //$NON-NLS-2$ + currentSelection.getRevision().getNumber())); } } switchAction.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_MENU_SWITCH)); return switchAction; } // get create tag from revision action (context menu) private IAction getCreateTagFromRevisionAction() { if(createTagFromRevisionAction == null) { createTagFromRevisionAction = new Action() { public void run() { ISelection selection = getSelection(); if( !(selection instanceof IStructuredSelection)) return; ILogEntry currentSelection = getLogEntry((IStructuredSelection) selection); BranchTagWizard wizard; if (resource == null) { ISVNRemoteResource[] remoteResources = { historyTableProvider.getRemoteResource() }; wizard = new BranchTagWizard(remoteResources); } else { IResource[] resources = { resource }; wizard = new BranchTagWizard(resources); } wizard.setRevisionNumber(currentSelection.getRevision().getNumber()); WizardDialog dialog = new ClosableWizardDialog(getSite().getShell(), wizard); if (dialog.open() == WizardDialog.OK) { final SVNUrl sourceUrl =wizard.getUrl(); final SVNUrl destinationUrl = wizard.getToUrl(); final String message = wizard.getComment(); final SVNRevision revision = wizard.getRevision(); final boolean makeParents = wizard.isMakeParents(); boolean createOnServer = wizard.isCreateOnServer(); IResource[] resources = { resource }; try { if(resource == null) { BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { ISVNClientAdapter client = null; try { client = SVNProviderPlugin.getPlugin().getSVNClientManager().getSVNClient(); client.copy(sourceUrl, destinationUrl, message, revision, makeParents); SVNUIPlugin.getPlugin().getRepositoryManager().resourceCreated(null, null); } catch(Exception e) { MessageDialog.openError(getSite().getShell(), Policy.bind("HistoryView.createTagFromRevision"), e //$NON-NLS-1$ .getMessage()); } finally { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } } }); } else { BranchTagOperation branchTagOperation = new BranchTagOperation(getSite().getPage().getActivePart(), resources, new SVNUrl[] { sourceUrl }, destinationUrl, createOnServer, wizard.getRevision(), message); branchTagOperation.setMakeParents(makeParents); branchTagOperation.setNewAlias(wizard.getNewAlias()); branchTagOperation.run(); } } catch(Exception e) { MessageDialog.openError(getSite().getShell(), Policy.bind("HistoryView.createTagFromRevision"), e //$NON-NLS-1$ .getMessage()); } } } }; } ISelection selection = getSelection(); if(selection instanceof IStructuredSelection) { IStructuredSelection ss = (IStructuredSelection) selection; if(ss.size() == 1) { ILogEntry currentSelection = getLogEntry(ss); createTagFromRevisionAction.setText(Policy.bind("HistoryView.createTagFromRevision", "" //$NON-NLS-1$ //$NON-NLS-2$ + currentSelection.getRevision().getNumber())); } } createTagFromRevisionAction.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_MENU_BRANCHTAG)); return createTagFromRevisionAction; } private IAction getSetCommitPropertiesAction() { // set Action (context menu) if(setCommitPropertiesAction == null) { setCommitPropertiesAction = new Action(Policy.bind("HistoryView.setCommitProperties")) { //$NON-NLS-1$ public void run() { try { final ISelection selection = getSelection(); if( !(selection instanceof IStructuredSelection)) return; final ILogEntry ourSelection = getLogEntry((IStructuredSelection) selection); // Failing that, try the resource originally selected by the user if // from the Team menu // TODO: Search all paths from currentSelection and find the // shortest path and // get the resources for that instance (in order to get the 'best' // "bugtraq" properties) final ProjectProperties projectProperties = (resource != null) ? ProjectProperties .getProjectProperties(resource) : (ourSelection.getRemoteResource() != null) ? ProjectProperties.getProjectProperties(ourSelection .getRemoteResource()) : ProjectProperties.getProjectProperties(remoteResource); // will return null! final ISVNResource svnResource = ourSelection.getRemoteResource() != null ? ourSelection .getRemoteResource() : ourSelection.getResource(); SetCommitPropertiesDialog dialog = new SetCommitPropertiesDialog(getSite().getShell(), ourSelection .getRevision(), resource, projectProperties); // Set previous text - the text to edit dialog.setOldAuthor(ourSelection.getAuthor()); dialog.setOldComment(ourSelection.getComment()); boolean doCommit = (dialog.open() == Window.OK); if(doCommit) { final String author; final String commitComment; if(ourSelection.getAuthor().equals(dialog.getAuthor())) author = null; else author = dialog.getAuthor(); if(ourSelection.getComment().equals(dialog.getComment())) commitComment = null; else commitComment = dialog.getComment(); final ChangeCommitPropertiesCommand command = new ChangeCommitPropertiesCommand(svnResource .getRepository(), ourSelection.getRevision(), commitComment, author); PlatformUI.getWorkbench().getProgressService().run(true, true, new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { try { command.run(monitor); } catch(SVNException e) { throw new InvocationTargetException(e); } finally { if(ourSelection instanceof LogEntry) { LogEntry logEntry = (LogEntry) ourSelection; if (command.isLogMessageChanged()) logEntry.setComment(commitComment); if (command.isAuthorChanged()) logEntry.setAuthor(author); } getSite().getShell().getDisplay().asyncExec(new Runnable() { public void run() { tableHistoryViewer.refresh(); tableHistoryViewer.setSelection(selection, true); } }); } } }); } } catch(InvocationTargetException e) { SVNUIPlugin.openError(getSite().getShell(), null, null, e, SVNUIPlugin.LOG_NONTEAM_EXCEPTIONS); } catch(InterruptedException e) { // Do nothing } catch(SVNException e) { // TODO Auto-generated catch block SVNUIPlugin.openError(getSite().getShell(), null, null, e, SVNUIPlugin.LOG_TEAM_EXCEPTIONS); } } // we don't allow multiple selection public boolean isEnabled() { ISelection selection = getSelection(); return selection instanceof IStructuredSelection && ((IStructuredSelection) selection).size() == 1; } }; } return setCommitPropertiesAction; } private IAction getShowRevisionPropertiesAction() { if(showRevisionPropertiesAction == null) { showRevisionPropertiesAction = new Action(Policy.bind("HistoryView.showRevisionProperties")) { //$NON-NLS-1$ public void run() { try { final ISelection selection = getSelection(); if( !(selection instanceof IStructuredSelection)) return; final ILogEntry ourSelection = getLogEntry((IStructuredSelection) selection); ISVNRemoteResource selectionRemoteResource = ourSelection.getRemoteResource(); SvnRevPropertiesView revPropsView = null; try { revPropsView = (SvnRevPropertiesView)getSite().getPage().showView(SvnRevPropertiesView.VIEW_ID); } catch (PartInitException e) { SVNUIPlugin.openError(getSite().getShell(), null, null, e, SVNUIPlugin.LOG_TEAM_EXCEPTIONS); } if (revPropsView != null) { revPropsView.showSvnProperties(selectionRemoteResource); revPropsView.refresh(); } } catch(SVNException e) { SVNUIPlugin.openError(getSite().getShell(), null, null, e, SVNUIPlugin.LOG_TEAM_EXCEPTIONS); } } // we don't allow multiple selection public boolean isEnabled() { ISelection selection = getSelection(); return selection instanceof IStructuredSelection && ((IStructuredSelection) selection).size() == 1; } }; } return showRevisionPropertiesAction; } private IAction getShowRevisionsAction() { if (showRevisionsAction == null) { showRevisionsAction = new Action(Policy.bind("HistoryView.showMergedRevisions")) { //$NON-NLS-1$ public void run() { ISelection selection = getSelection(); if( !(selection instanceof IStructuredSelection)) return; IStructuredSelection ss = (IStructuredSelection) selection; ILogEntry logEntry = (ILogEntry)ss.getFirstElement(); ShowRevisionsDialog dialog = null; if (resource != null) dialog = new ShowRevisionsDialog(getSite().getShell(), logEntry, resource, includeTags, SVNHistoryPage.this); else if (remoteResource != null) dialog = new ShowRevisionsDialog(getSite().getShell(), logEntry, remoteResource, includeTags, SVNHistoryPage.this); if (dialog != null) dialog.open(); } }; } return showRevisionsAction; } private SVNRevisionRange[] getRevisionRanges() { List revisionRanges = new ArrayList(); ISelection selection = getSelection(); if (selection instanceof IStructuredSelection) { IStructuredSelection ss = (IStructuredSelection)selection; List selectionList = ss.toList(); TableItem[] items = tableHistoryViewer.getTable().getItems(); SVNRevision revision1 = null; SVNRevision revision2 = null; for (int i = 0; i < items.length; i++) { if (items[i].getData() instanceof ILogEntry) { ILogEntry logEntry = (ILogEntry)items[i].getData(); if (selectionList.contains(logEntry)) { if (revision1 == null) { revision1 = logEntry.getRevision(); } revision2 = logEntry.getRevision(); revertEnabled = true; LogEntryChangePath[] changePaths = logEntry.getLogEntryChangePaths(); if (changePaths != null) { for (LogEntryChangePath changePath : changePaths) { if (changePath.getPath().equals(remoteResource.getRepositoryRelativePath())) { if (changePath.getAction() == 'A') { revertEnabled = false; } break; } } } } else { if (revision1 != null) { SVNRevisionRange revisionRange = new SVNRevisionRange(revision1, revision2); revisionRanges.add(revisionRange); revision1 = null; revision2 = null; } } } } if (revision1 != null) { SVNRevisionRange revisionRange = new SVNRevisionRange(revision1, revision2); revisionRanges.add(revisionRange); } } SVNRevisionRange[] revisionRangeArray = new SVNRevisionRange[revisionRanges.size()]; revisionRanges.toArray(revisionRangeArray); return revisionRangeArray; } // get revert changes action (context menu) private IAction getRevertChangesAction() { revisionRanges = getRevisionRanges(); if(revertChangesAction == null) { revertChangesAction = new Action() { public void run() { ISelection selection = getSelection(); if( !(selection instanceof IStructuredSelection)) return; final IStructuredSelection ss = (IStructuredSelection) selection; if(ss.size() == 1) { if( !MessageDialog.openConfirm(getSite().getShell(), Policy.bind("HistoryView.revertRevision"), Policy.bind( "HistoryView.confirmRevertRevision", resource.getFullPath().toString()))) //$NON-NLS-1$ return; } else { if( !MessageDialog.openConfirm(getSite().getShell(), Policy.bind("HistoryView.revertRevisions"), Policy.bind( "HistoryView.confirmRevertRevisions", resource.getFullPath().toString()))) //$NON-NLS-1$ return; } BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { ILogEntry firstElement = getFirstElement(); ILogEntry lastElement = getLastElement(); final SVNUrl path1 = firstElement.getResource().getUrl(); final SVNUrl path2 = lastElement.getResource().getUrl(); final IResource[] resources = { resource}; try { for (int i = 0; i < revisionRanges.length; i++) { final SVNRevision revision1 = revisionRanges[i].getFromRevision(); final SVNRevision revision2 = new SVNRevision.Number(((SVNRevision.Number)revisionRanges[i].getToRevision()).getNumber() - 1); WorkspaceAction mergeAction = new WorkspaceAction() { protected void execute(IAction action) throws InvocationTargetException, InterruptedException { new MergeOperation(getSite().getPage().getActivePart(), resources, path1, revision1, path2, revision2).run(); } }; mergeAction.run(null); } } catch(Exception e) { MessageDialog.openError(getSite().getShell(), revertChangesAction.getText(), e.getMessage()); } } }); } }; } ISelection selection = getSelection(); if(selection instanceof IStructuredSelection) { IStructuredSelection ss = (IStructuredSelection) selection; if(ss.size() == 1) { ILogEntry currentSelection = getLogEntry(ss); revertChangesAction.setText(Policy.bind("HistoryView.revertChangesFromRevision", "" //$NON-NLS-1$ //$NON-NLS-2$ + currentSelection.getRevision().getNumber())); } if(ss.size() > 1) { revertChangesAction.setText(Policy.bind("HistoryView.revertChangesFromRevisions")); //$NON-NLS-1$ } } revertChangesAction.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_MENU_MARKMERGED)); revertChangesAction.setEnabled(revertEnabled); return revertChangesAction; } private GenerateChangeLogAction getGenerateChangeLogAction() { if (generateChangeLogAction == null) generateChangeLogAction = new GenerateChangeLogAction(new ISelectionProvider() { public void addSelectionChangedListener(ISelectionChangedListener listener) { } public ISelection getSelection() { return SVNHistoryPage.this.getSelection(); } public void removeSelectionChangedListener(ISelectionChangedListener listener) { } public void setSelection(ISelection selection) { } }); return generateChangeLogAction; } // Refresh action (toolbar) private IAction getRefreshAction() { if(refreshAction == null) { SVNUIPlugin plugin = SVNUIPlugin.getPlugin(); refreshAction = new Action( Policy.bind("HistoryView.refreshLabel"), plugin.getImageDescriptor(ISVNUIConstants.IMG_REFRESH_ENABLED)) { //$NON-NLS-1$ public void run() { refresh(); } }; refreshAction.setToolTipText(Policy.bind("HistoryView.refresh")); //$NON-NLS-1$ refreshAction.setDisabledImageDescriptor(plugin.getImageDescriptor(ISVNUIConstants.IMG_REFRESH_DISABLED)); refreshAction.setHoverImageDescriptor(plugin.getImageDescriptor(ISVNUIConstants.IMG_REFRESH)); } return refreshAction; } // Search action (toolbar) private IAction getSearchAction() { if (searchAction == null) { SVNUIPlugin plugin = SVNUIPlugin.getPlugin(); searchAction = new Action( Policy.bind("HistoryView.search"), plugin.getImageDescriptor(ISVNUIConstants.IMG_FILTER_HISTORY)) { //$NON-NLS-1$ public void run() { if (historySearchDialog == null) { historySearchDialog = new HistorySearchDialog(getSite().getShell(), remoteResource); } historySearchDialog.setRemoteResource(remoteResource); if (historySearchDialog.open() == Window.OK) { searchAction.setEnabled(false); Utils.schedule(new SearchHistoryJob(), SVNUIPlugin.getPlugin().getWorkbench().getActiveWorkbenchWindow() .getActivePage().getActivePart().getSite()); } } }; searchAction.setDisabledImageDescriptor(plugin.getImageDescriptor(ISVNUIConstants.IMG_FILTER_HISTORY_DISABLED)); } return searchAction; } // Clear search action (toolbar) private IAction getClearSearchAction() { if (clearSearchAction == null) { SVNUIPlugin plugin = SVNUIPlugin.getPlugin(); clearSearchAction = new Action( Policy.bind("HistoryView.clearSearch"), plugin.getImageDescriptor(ISVNUIConstants.IMG_CLEAR)) { //$NON-NLS-1$ public void run() { BusyIndicator.showWhile(tableHistoryViewer.getTable().getDisplay(), new Runnable() { public void run() { ViewerFilter[] filters = tableHistoryViewer.getFilters(); for (int i=0; i firstElement.getRevision().getNumber()) firstElement = element; } } return firstElement; } private ILogEntry getLastElement() { ILogEntry lastElement = null; ISelection selection = getSelection(); if(selection instanceof IStructuredSelection) { IStructuredSelection ss = (IStructuredSelection) selection; Iterator iter = ss.iterator(); while(iter.hasNext()) { ILogEntry element = (ILogEntry) iter.next(); if(lastElement == null || element.getRevision().getNumber() < lastElement.getRevision().getNumber()) lastElement = element; } } return lastElement; } private final class GetNextAction extends Action implements IPropertyChangeListener { GetNextAction() { super(Policy.bind("HistoryView.getNext"), SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_GET_NEXT)); //$NON-NLS-1$ updateFromProperties(); SVNUIPlugin.getPlugin().getPreferenceStore().addPropertyChangeListener(this); } public void run() { final ISVNRemoteResource remoteResource = historyTableProvider.getRemoteResource(); if(fetchNextLogEntriesJob == null) { fetchNextLogEntriesJob = new FetchNextLogEntriesJob(); } if(fetchNextLogEntriesJob.getState() != Job.NONE) { fetchNextLogEntriesJob.cancel(); try { fetchNextLogEntriesJob.join(); } catch(InterruptedException e) { SVNUIPlugin.log(new SVNException(Policy .bind("HistoryView.errorFetchingEntries", remoteResource.getName()), e)); //$NON-NLS-1$ } } fetchNextLogEntriesJob.setRemoteFile(remoteResource); Utils.schedule(fetchNextLogEntriesJob, getSite()); } public void propertyChange(PropertyChangeEvent event) { if(ISVNUIConstants.PREF_LOG_ENTRIES_TO_FETCH.equals(event.getProperty())) { updateFromProperties(); } } private void updateFromProperties() { int entriesToFetch = SVNUIPlugin.getPlugin().getPreferenceStore().getInt(ISVNUIConstants.PREF_LOG_ENTRIES_TO_FETCH); setToolTipText(Policy.bind("HistoryView.getNext") + " " + entriesToFetch); //$NON-NLS-1$ //$NON-NLS-2$ if(entriesToFetch <= 0) { setEnabled(false); } } } private class FetchLogEntriesJob extends AbstractFetchJob { public ISVNRemoteResource remoteResource; public FetchLogEntriesJob() { super(Policy.bind("HistoryView.fetchHistoryJob")); //$NON-NLS-1$; } public void setRemoteFile(ISVNRemoteResource resource) { this.remoteResource = resource; } public IStatus run(IProgressMonitor monitor) { try { if(remoteResource != null && !shutdown) { if(resource == null) { if(remoteResource == null || !SVNUIPlugin.getPlugin().getPreferenceStore().getBoolean(ISVNUIConstants.PREF_SHOW_TAGS_IN_REMOTE)) { tagManager = null; } else { tagManager = new AliasManager(remoteResource.getUrl()); } } else { tagManager = new AliasManager(resource); } final SVNRevision pegRevision = remoteResource.getRevision(); SVNRevision revisionEnd = new SVNRevision.Number(0); boolean stopOnCopy = toggleStopOnCopyAction.isChecked(); boolean includeMergedRevisions = toggleIncludeMergedRevisionsAction.isChecked(); int entriesToFetch = store.getInt(ISVNUIConstants.PREF_LOG_ENTRIES_TO_FETCH); long limit = entriesToFetch; try { entries = getLogEntries(monitor, remoteResource, pegRevision, revisionStart, revisionEnd, stopOnCopy, limit + 1, tagManager, includeMergedRevisions); } catch (TeamException e) { if (revisionStart.equals(SVNRevision.HEAD) && pegRevision != null && e.getMessage() != null && e.getMessage().contains("svn: Unable to find repository location")) { revisionStart = pegRevision; entries = getLogEntries(monitor, remoteResource, pegRevision, revisionStart, revisionEnd, stopOnCopy, limit + 1, tagManager, includeMergedRevisions); } else { throw e; } } long entriesLength = entries.length; if(entriesLength > limit) { ILogEntry[] fetchedEntries = new ILogEntry[ entries.length - 1]; for(int i = 0; i < entries.length - 1; i++) { fetchedEntries[ i] = entries[ i]; } entries = fetchedEntries; getNextAction.setEnabled(true); } else { getNextAction.setEnabled(false); } final SVNRevision.Number revisionId = remoteResource.getLastChangedRevision(); getSite().getShell().getDisplay().asyncExec(new Runnable() { public void run() { if(entries != null && tableHistoryViewer != null && !tableHistoryViewer.getTable().isDisposed()) { // once we got the entries, we refresh the table if(entries.length > 0) { lastEntry = entries[ entries.length - 1]; long lastEntryNumber = lastEntry.getRevision().getNumber(); revisionStart = new SVNRevision.Number(lastEntryNumber - 1); } tableHistoryViewer.refresh(); selectRevision(revisionId); } } }); } return Status.OK_STATUS; } catch(TeamException e) { if (e instanceof SVNException) { if (((SVNException)e).operationInterrupted()) { return Status.OK_STATUS; } } return e.getStatus(); } } } private class FetchNextLogEntriesJob extends AbstractFetchJob { public ISVNRemoteResource remoteResource; public FetchNextLogEntriesJob() { super(Policy.bind("HistoryView.fetchHistoryJob")); //$NON-NLS-1$; } public void setRemoteFile(ISVNRemoteResource resource) { this.remoteResource = resource; } public IStatus run(IProgressMonitor monitor) { try { if(remoteResource != null && !shutdown) { SVNRevision pegRevision = remoteResource.getRevision(); SVNRevision revisionEnd = new SVNRevision.Number(0); boolean stopOnCopy = toggleStopOnCopyAction.isChecked(); boolean includeMergedRevisions = toggleIncludeMergedRevisionsAction.isChecked(); int entriesToFetch = store.getInt(ISVNUIConstants.PREF_LOG_ENTRIES_TO_FETCH); long limit = entriesToFetch; ILogEntry[] nextEntries = getLogEntries(monitor, remoteResource, pegRevision, revisionStart, revisionEnd, stopOnCopy, limit + 1, tagManager, includeMergedRevisions); long entriesLength = nextEntries.length; ILogEntry[] fetchedEntries = null; if(entriesLength > limit) { fetchedEntries = new ILogEntry[ nextEntries.length - 1]; for(int i = 0; i < nextEntries.length - 1; i++) fetchedEntries[ i] = nextEntries[ i]; getNextAction.setEnabled(true); } else { fetchedEntries = new ILogEntry[ nextEntries.length]; for(int i = 0; i < nextEntries.length; i++) fetchedEntries[ i] = nextEntries[ i]; getNextAction.setEnabled(false); } ArrayList entryArray = new ArrayList(); if(entries == null) entries = new ILogEntry[ 0]; for(int i = 0; i < entries.length; i++) entryArray.add(entries[ i]); for(int i = 0; i < fetchedEntries.length; i++) entryArray.add(fetchedEntries[ i]); entries = new ILogEntry[ entryArray.size()]; entryArray.toArray(entries); getSite().getShell().getDisplay().asyncExec(new Runnable() { public void run() { if(entries != null && tableHistoryViewer != null && !tableHistoryViewer.getTable().isDisposed()) { // once we got the entries, we refresh the table ISelection selection = tableHistoryViewer.getSelection(); tableHistoryViewer.refresh(); tableHistoryViewer.setSelection(selection); } } }); if(entries.length > 0) { lastEntry = entries[ entries.length - 1]; long lastEntryNumber = lastEntry.getRevision().getNumber(); revisionStart = new SVNRevision.Number(lastEntryNumber - 1); } } return Status.OK_STATUS; } catch(TeamException e) { return e.getStatus(); } } } private abstract class AbstractFetchJob extends Job { public AbstractFetchJob(String name) { super(name); } public abstract void setRemoteFile(ISVNRemoteResource resource); protected ILogEntry[] getLogEntries(IProgressMonitor monitor, ISVNRemoteResource remoteResource, SVNRevision pegRevision, SVNRevision revisionStart, SVNRevision revisionEnd, boolean stopOnCopy, long limit, AliasManager tagManager, boolean includeMergedRevisions) throws TeamException { // If filtering by revision range, pass upper/lower revisions to API and override limit. SVNRevision start = revisionStart; SVNRevision end = revisionEnd; long fetchLimit = limit; if (historySearchDialog != null && !historySearchDialog.getSearchAllLogs()) { if (historySearchDialog.getStartRevision() != null || historySearchDialog.getEndRevision() != null) { if (getClearSearchAction().isEnabled()) { if (historySearchDialog.getStartRevision() != null) end = historySearchDialog.getStartRevision(); if (historySearchDialog.getEndRevision() != null) start = historySearchDialog.getEndRevision(); fetchLimit = 0; getGetNextAction().setEnabled(false); } } } ISVNClientAdapter svnClient = remoteResource.getRepository().getSVNClient(); try { CancelableSVNLogMessageCallback callback = new CancelableSVNLogMessageCallback(monitor, svnClient); GetLogsCommand logCmd = new GetLogsCommand(remoteResource, pegRevision, start, end, stopOnCopy, fetchLimit, tagManager, includeMergedRevisions); logCmd.setCallback(callback); logCmd.run(monitor); return logCmd.getLogEntries(); } finally { remoteResource.getRepository().returnSVNClient(svnClient); } } } private class FetchAllLogEntriesJob extends AbstractFetchJob { public ISVNRemoteResource remoteResource; public FetchAllLogEntriesJob() { super(Policy.bind("HistoryView.fetchHistoryJob")); //$NON-NLS-1$; } public void setRemoteFile(ISVNRemoteResource resource) { this.remoteResource = resource; } public IStatus run(IProgressMonitor monitor) { try { if(remoteResource != null && !shutdown) { if(resource == null) { if(remoteResource == null || !SVNUIPlugin.getPlugin().getPreferenceStore().getBoolean(ISVNUIConstants.PREF_SHOW_TAGS_IN_REMOTE)) tagManager = null; else tagManager = new AliasManager(remoteResource.getUrl()); } else tagManager = new AliasManager(resource); SVNRevision pegRevision = remoteResource.getRevision(); SVNRevision revisionEnd = new SVNRevision.Number(0); boolean stopOnCopy = toggleStopOnCopyAction.isChecked(); boolean includeMergedRevisions = toggleIncludeMergedRevisionsAction.isChecked(); long limit = 0; entries = getLogEntries(monitor, remoteResource, pegRevision, SVNRevision.HEAD, revisionEnd, stopOnCopy, limit, tagManager, includeMergedRevisions); final SVNRevision.Number revisionId = remoteResource.getLastChangedRevision(); getSite().getShell().getDisplay().asyncExec(new Runnable() { public void run() { if(entries != null && tableHistoryViewer != null && !tableHistoryViewer.getTable().isDisposed()) { // once we got the entries, we refresh the table if(entries.length > 0) { lastEntry = entries[ entries.length - 1]; long lastEntryNumber = lastEntry.getRevision().getNumber(); revisionStart = new SVNRevision.Number(lastEntryNumber - 1); } tableHistoryViewer.refresh(); selectRevision(revisionId); } } }); } return Status.OK_STATUS; } catch(TeamException e) { return e.getStatus(); } } } private class SearchHistoryJob extends Job { public SearchHistoryJob() { super(""); //$NON-NLS-1$ } public IStatus run(IProgressMonitor monitor) { if (!historySearchDialog.getSearchAllLogs() && (historySearchDialog.getStartRevision() != null || historySearchDialog.getEndRevision() != null)) { final ISVNRemoteResource remoteResource = historyTableProvider.getRemoteResource(); if(fetchAllLogEntriesJob == null) { fetchAllLogEntriesJob = new FetchAllLogEntriesJob(); } if(fetchAllLogEntriesJob.getState() != Job.NONE) { fetchAllLogEntriesJob.cancel(); } fetchAllLogEntriesJob.setRemoteFile(remoteResource); Utils.schedule(fetchAllLogEntriesJob, getSite()); } else { Date startDate = historySearchDialog.getStartDate(); setEmptyViewerFilter(); // Fetch log entries until start date if (historySearchDialog.getAutoFetchLogs()) { if (!historySearchDialog.getSearchAllLogs()) { Date lastDate = null; if (lastEntry != null) { lastDate = lastEntry.getDate(); } int numEntries = entries.length; int prevNumEntries = -1; while ((numEntries != prevNumEntries) && ((lastDate == null) || (startDate == null) || (startDate.compareTo(lastDate) <= 0))) { if (monitor.isCanceled()) { getSearchAction().setEnabled(true); removeEmptyViewerFilter(); return Status.CANCEL_STATUS; } final ISVNRemoteResource remoteResource = historyTableProvider.getRemoteResource(); if(fetchNextLogEntriesJob == null) { fetchNextLogEntriesJob = new FetchNextLogEntriesJob(); } if(fetchNextLogEntriesJob.getState() != Job.NONE) { fetchNextLogEntriesJob.cancel(); } fetchNextLogEntriesJob.setRemoteFile(remoteResource); Utils.schedule(fetchNextLogEntriesJob, getSite()); try { fetchNextLogEntriesJob.join(); } catch(InterruptedException e) { SVNUIPlugin.log(new SVNException( Policy.bind("HistoryView.errorFetchingEntries", remoteResource.getName()), e)); //$NON-NLS-1$ } if (entries.length == 0) { break; } lastDate = lastEntry.getDate(); prevNumEntries = numEntries; numEntries = entries.length; } } else { final ISVNRemoteResource remoteResource = historyTableProvider.getRemoteResource(); if(fetchAllLogEntriesJob == null) { fetchAllLogEntriesJob = new FetchAllLogEntriesJob(); } if(fetchAllLogEntriesJob.getState() != Job.NONE) { fetchAllLogEntriesJob.cancel(); } fetchAllLogEntriesJob.setRemoteFile(remoteResource); Utils.schedule(fetchAllLogEntriesJob, getSite()); } } } final HistorySearchViewerFilter viewerFilter = new HistorySearchViewerFilter( historySearchDialog.getUser(), historySearchDialog.getComment(), historySearchDialog.getStartDate(), historySearchDialog.getEndDate(), historySearchDialog.getRegExp(), historySearchDialog.getStartRevision(), historySearchDialog.getEndRevision()); getSite().getShell().getDisplay().asyncExec(new Runnable() { public void run() { BusyIndicator.showWhile(tableHistoryViewer.getTable().getDisplay(), new Runnable() { public void run() { getClearSearchAction().run(); tableHistoryViewer.addFilter(viewerFilter); getClearSearchAction().setEnabled(true); getSearchAction().setEnabled(true); } }); } }); removeEmptyViewerFilter(); return Status.OK_STATUS; } private void setEmptyViewerFilter() { getSite().getShell().getDisplay().asyncExec(new Runnable() { public void run() { tableHistoryViewer.addFilter(new EmptySearchViewerFilter()); } }); } private void removeEmptyViewerFilter() { getSite().getShell().getDisplay().asyncExec(new Runnable() { public void run() { ViewerFilter[] filters = tableHistoryViewer.getFilters(); for (int i=0; iIHistoryPageSource implementation for Subclipse history * * @author Eugene Kuleshov */ public class SVNHistoryPageSource extends HistoryPageSource { public boolean canShowHistoryFor(Object object) { if (object instanceof IResource) { IResource resource = (IResource)object; ISVNLocalResource localResource = SVNWorkspaceRoot.getSVNResourceFor(resource); if (localResource != null) { try { if (!localResource.isManaged()) { return false; } if (localResource.isAdded() && !localResource.getStatus().isCopied()) { return false; } } catch (Exception e) { SVNUIPlugin.log(Status.ERROR, e.getMessage(), e); } } } return (object instanceof IResource && ((IResource) object).getType() != IResource.ROOT) || (object instanceof ISVNRemoteResource); } public Page createPage(Object object) { SVNHistoryPage page = new SVNHistoryPage(object); return page; } } 000077500000000000000000000000001203611042400353255ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/internalContainerCheckedTreeViewer.java000066400000000000000000000135361203611042400433730ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/internal/******************************************************************************* * copied from: org.eclipse.ui.internal.dialogs.ContainerCheckedTreeViewer * * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.tigris.subversion.subclipse.ui.internal; import java.util.ArrayList; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Item; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.swt.widgets.Widget; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTreeViewer; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.ITreeViewerListener; import org.eclipse.jface.viewers.TreeExpansionEvent; /** * CheckboxTreeViewer with special behaviour of the checked / gray state on * container (non-leaf) nodes: * The grayed state is used to visualize the checked state of its children. * Containers are checked and non-gary if all contained leafs are checked. The * container is grayed if some but not all leafs are checked. */ public class ContainerCheckedTreeViewer extends CheckboxTreeViewer { /** * Constructor for ContainerCheckedTreeViewer. * @see CheckboxTreeViewer#CheckboxTreeViewer(Composite) */ public ContainerCheckedTreeViewer(Composite parent) { super(parent); initViewer(); } /** * Constructor for ContainerCheckedTreeViewer. * @see CheckboxTreeViewer#CheckboxTreeViewer(Composite,int) */ public ContainerCheckedTreeViewer(Composite parent, int style) { super(parent, style); initViewer(); } /** * Constructor for ContainerCheckedTreeViewer. * @see CheckboxTreeViewer#CheckboxTreeViewer(Tree) */ public ContainerCheckedTreeViewer(Tree tree) { super(tree); initViewer(); } private void initViewer() { setUseHashlookup(true); addCheckStateListener(new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent event) { doCheckStateChanged(event.getElement()); } }); addTreeListener(new ITreeViewerListener() { public void treeCollapsed(TreeExpansionEvent event) { } public void treeExpanded(TreeExpansionEvent event) { Widget item= findItem(event.getElement()); if (item instanceof TreeItem) { initializeItem((TreeItem) item); } } }); } protected void doCheckStateChanged(Object element) { Widget item= findItem(element); if (item instanceof TreeItem) { TreeItem treeItem= (TreeItem) item; treeItem.setGrayed(false); updateChildrenItems(treeItem); updateParentItems(treeItem.getParentItem()); } } /** * The item has expanded. Updates the checked state of its children. */ private void initializeItem(TreeItem item) { if (item.getChecked() && !item.getGrayed()) { updateChildrenItems((TreeItem) item); } } /** * Updates the check state of all created children */ private void updateChildrenItems(TreeItem parent) { Item[] children= getChildren(parent); boolean state= parent.getChecked(); for (int i= 0; i < children.length; i++) { TreeItem curr= (TreeItem) children[i]; if (curr.getData() != null && ((curr.getChecked() != state) || curr.getGrayed())) { curr.setChecked(state); curr.setGrayed(false); updateChildrenItems(curr); } } } /** * Updates the check / gray state of all parent items */ private void updateParentItems(TreeItem item) { if (item != null) { Item[] children= getChildren(item); boolean containsChecked= false; boolean containsUnchecked= false; for (int i= 0; i < children.length; i++) { TreeItem curr= (TreeItem) children[i]; containsChecked |= curr.getChecked(); containsUnchecked |= (!curr.getChecked() || curr.getGrayed()); } item.setChecked(containsChecked); item.setGrayed(containsChecked && containsUnchecked); updateParentItems(item.getParentItem()); } } /* * @see ICheckable#setChecked(Object, boolean) */ public boolean setChecked(Object element, boolean state) { if (super.setChecked(element, state)) { doCheckStateChanged(element); return true; } return false; } /* * @see CheckboxTreeViewer#setCheckedElements(Object[]) */ public void setCheckedElements(Object[] elements) { super.setCheckedElements(elements); for (int i= 0; i < elements.length; i++) { doCheckStateChanged(elements[i]); } } /* * @see AbstractTreeViewer#setExpanded(Item, boolean) */ protected void setExpanded(Item item, boolean expand) { super.setExpanded(item, expand); if (expand && item instanceof TreeItem) { initializeItem((TreeItem) item); } } /* * @see CheckboxTreeViewer#getCheckedElements() */ public Object[] getCheckedElements() { Object[] checked= super.getCheckedElements(); // add all items that are children of a checked node but not created yet ArrayList result= new ArrayList(); for (int i= 0; i < checked.length; i++) { Object curr= checked[i]; result.add(curr); Widget item= findItem(curr); if (item != null) { Item[] children= getChildren(item); // check if contains the dummy node if (children.length == 1 && children[0].getData() == null) { // not yet created collectChildren(curr, result); } } } return result.toArray(); } private void collectChildren(Object element, ArrayList result) { Object[] filteredChildren= getFilteredChildren(element); for (int i= 0; i < filteredChildren.length; i++) { Object curr= filteredChildren[i]; result.add(curr); collectChildren(curr, result); } } } GlobalRefreshResourceSelectionPage.java000066400000000000000000000370741203611042400450750ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/internal/******************************************************************************* * copied from: org.eclipse.team.internal.ui.synchronize.GlobalRefreshResourceSelectionPage * * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.tigris.subversion.subclipse.ui.internal; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import java.util.StringTokenizer; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.DecoratingLabelProvider; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.team.ui.synchronize.ISynchronizeScope; import org.eclipse.team.ui.synchronize.ResourceScope; import org.eclipse.team.ui.synchronize.WorkingSetScope; import org.eclipse.team.ui.synchronize.WorkspaceScope; import org.eclipse.ui.IWorkingSet; import org.eclipse.ui.IWorkingSetManager; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.IWorkingSetSelectionDialog; import org.eclipse.ui.ide.IDE; import org.eclipse.ui.model.BaseWorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.ui.views.navigator.ResourceSorter; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; /** * Page that allows the user to select a set of resources that are managed by a subscriber * participant. Callers can provide a scope hint to determine the initial selection for the * resource list. By default, the resources in the current selection are checked, otherwise * all resources are checked. * * @see SubscriberRefreshWizard * @since 3.0 */ public class GlobalRefreshResourceSelectionPage extends WizardPage { private boolean scopeCheckingElement = false; // Set of scope hint to determine the initial selection private Button participantScope; private Button selectedResourcesScope; private Button workingSetScope; // The checked tree viewer private ContainerCheckedTreeViewer fViewer; // Working set label and holder private Text workingSetLabel; private IWorkingSet[] workingSets; private List resources; private IDialogSettings settings; // dialog settings /** * Settings constant for section name (value SynchronizeResourceSelectionDialog). */ private static final String STORE_SECTION = "SynchronizeResourceSelectionDialog"; //$NON-NLS-1$ /** * Settings constant for working sets (value SynchronizeResourceSelectionDialog.STORE_WORKING_SET). */ private static final String STORE_WORKING_SETS = "SynchronizeResourceSelectionDialog.STORE_WORKING_SETS"; //$NON-NLS-1$ /** * Content provider that accepts a SubscriberParticipant as input and * returns the participants root resources. */ class MyContentProvider extends BaseWorkbenchContentProvider { public Object[] getChildren(Object element) { if(element instanceof List) { return (IResource[]) ((List)element).toArray(new IResource[((List)element).size()]); } return super.getChildren(element); } } /** * Label decorator that will display the full path for participant roots that are folders. This * is useful for participants that have non-project roots. */ class MyLabelProvider extends LabelProvider { private LabelProvider workbenchProvider = new WorkbenchLabelProvider(); public String getText(Object element) { if(element instanceof IContainer) { IContainer c = (IContainer)element; if(c.getType() != IResource.PROJECT && resources.contains(c)) { return c.getFullPath().toString(); } } return workbenchProvider.getText(element); } public Image getImage(Object element) { return workbenchProvider.getImage(element); } } /** * Create a new page for the given participant. The scope hint will determine the initial selection. * * @param participant the participant to synchronize */ public GlobalRefreshResourceSelectionPage(IResource[] resources) { super(Policy.bind("GlobalRefreshResourceSelectionPage.1")); //$NON-NLS-1$ // Caching the roots so that the decorator doesn't have to recompute all the time. this.resources = Arrays.asList(resources); setDescription(Policy.bind("GlobalRefreshResourceSelectionPage.2")); //$NON-NLS-1$ setTitle(Policy.bind("GlobalRefreshResourceSelectionPage.3")); //$NON-NLS-1$ IDialogSettings s = SVNUIPlugin.getPlugin().getDialogSettings(); this.settings = s.getSection(STORE_SECTION); if(settings == null) { settings = s.addNewSection(STORE_SECTION); } } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) */ public void createControl(Composite parent2) { Composite top = new Composite(parent2, SWT.NULL); top.setLayout(new GridLayout()); initializeDialogUnits(top); GridData data = new GridData(GridData.FILL_BOTH); data.widthHint = 50; top.setLayoutData(data); setControl(top); Label l = new Label(top, SWT.NULL); l.setText(Policy.bind("GlobalRefreshResourceSelectionPage.5")); //$NON-NLS-1$ // The viewer fViewer = new ContainerCheckedTreeViewer(top, SWT.BORDER); data = new GridData(GridData.FILL_BOTH); //data.widthHint = 200; data.heightHint = 100; fViewer.getControl().setLayoutData(data); fViewer.setContentProvider(new MyContentProvider()); fViewer.setLabelProvider(new DecoratingLabelProvider(new MyLabelProvider(), PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator())); fViewer.addCheckStateListener(new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent event) { updateOKStatus(); } }); fViewer.setSorter(new ResourceSorter(ResourceSorter.NAME)); fViewer.setInput(resources); Composite selectGroup = new Composite(top, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 2; layout.marginHeight = 0; layout.marginWidth = 0; //layout.makeColumnsEqualWidth = false; selectGroup.setLayout(layout); data = new GridData(GridData.FILL_HORIZONTAL); selectGroup.setLayoutData(data); Button selectAll = new Button(selectGroup, SWT.NULL); selectAll.setText(Policy.bind("GlobalRefreshResourceSelectionPage.12")); //$NON-NLS-1$ selectAll.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { participantScope.setSelection(true); selectedResourcesScope.setSelection(false); workingSetScope.setSelection(false); updateParticipantScope(); scopeCheckingElement = true; updateOKStatus(); scopeCheckingElement = false; } }); setButtonLayoutData(selectAll); Button deSelectAll = new Button(selectGroup, SWT.NULL); deSelectAll.setText(Policy.bind("GlobalRefreshResourceSelectionPage.13")); //$NON-NLS-1$ deSelectAll.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { fViewer.setCheckedElements(new Object[0]); updateOKStatus(); } }); setButtonLayoutData(deSelectAll); // Scopes Group scopeGroup = new Group(top, SWT.NULL); scopeGroup.setText(Policy.bind("GlobalRefreshResourceSelectionPage.6")); //$NON-NLS-1$ layout = new GridLayout(); layout.numColumns = 3; layout.makeColumnsEqualWidth = false; scopeGroup.setLayout(layout); data = new GridData(GridData.FILL_HORIZONTAL); data.widthHint = 50; scopeGroup.setLayoutData(data); participantScope = new Button(scopeGroup, SWT.RADIO); participantScope.setText(Policy.bind("GlobalRefreshResourceSelectionPage.7")); //$NON-NLS-1$ participantScope.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { updateParticipantScope(); } }); selectedResourcesScope = new Button(scopeGroup, SWT.RADIO); selectedResourcesScope.setText(Policy.bind("GlobalRefreshResourceSelectionPage.8")); //$NON-NLS-1$ selectedResourcesScope.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { updateSelectedResourcesScope(); } }); data = new GridData(); data.horizontalSpan = 2; selectedResourcesScope.setLayoutData(data); workingSetScope = new Button(scopeGroup, SWT.RADIO); workingSetScope.setText(Policy.bind("GlobalRefreshResourceSelectionPage.10")); //$NON-NLS-1$ workingSetScope.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (workingSetScope.getSelection()) { updateWorkingSetScope(); } } }); workingSetLabel = new Text(scopeGroup, SWT.BORDER); workingSetLabel.setEditable(false); data = new GridData(GridData.FILL_HORIZONTAL); workingSetLabel.setLayoutData(data); Button selectWorkingSetButton = new Button(scopeGroup, SWT.NULL); selectWorkingSetButton.setText(Policy.bind("GlobalRefreshResourceSelectionPage.11")); //$NON-NLS-1$ selectWorkingSetButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { selectWorkingSetAction(); } }); data = new GridData(GridData.HORIZONTAL_ALIGN_END); selectWorkingSetButton.setLayoutData(data); Dialog.applyDialogFont(selectWorkingSetButton); initializeScopingHint(); Dialog.applyDialogFont(top); } /** * Allow the finish button to be pressed if there are checked resources. * */ protected void updateOKStatus() { if(fViewer != null) { if(! scopeCheckingElement) { if(! selectedResourcesScope.getSelection()) { selectedResourcesScope.setSelection(true); participantScope.setSelection(false); workingSetScope.setSelection(false); updateSelectedResourcesScope(); } } setPageComplete(areAnyElementsChecked() != null); } else { setPageComplete(false); } } /** * Returns true if any of the root resources are grayed. */ private IResource areAnyElementsChecked() { TreeItem[] item = fViewer.getTree().getItems(); for (int i = 0; i < item.length; i++) { TreeItem child = item[i]; if(child.getChecked() || child.getGrayed()) { return (IResource)child.getData(); } } return null; } /** * Return the list of top-most resources that have been checked. * * @return the list of top-most resources that have been checked or an * empty list if nothing is selected. */ public IResource[] getRootResources() { TreeItem[] item = fViewer.getTree().getItems(); List checked = new ArrayList(); for (int i = 0; i < item.length; i++) { TreeItem child = item[i]; collectCheckedItems(child, checked); } return (IResource[]) checked.toArray(new IResource[checked.size()]); } public ISynchronizeScope getSynchronizeScope() { if (workingSetScope.getSelection()) { return new WorkingSetScope(workingSets); } if (participantScope.getSelection()) { return new WorkspaceScope(); } return new ResourceScope(getRootResources()); } private void initializeScopingHint() { String working_sets = settings.get(STORE_WORKING_SETS); if (working_sets == null) { participantScope.setSelection(true); updateParticipantScope(); } else { StringTokenizer st = new StringTokenizer(working_sets, " ,"); //$NON-NLS-1$ ArrayList ws = new ArrayList(); while (st.hasMoreTokens()) { String workingSetName = st.nextToken(); if (workingSetName != null && workingSetName.equals("") == false) { //$NON-NLS-1$ IWorkingSetManager workingSetManager = PlatformUI.getWorkbench().getWorkingSetManager(); IWorkingSet workingSet = workingSetManager.getWorkingSet(workingSetName); if (workingSet != null) { ws.add(workingSet); } } } if(! ws.isEmpty()) { this.workingSets = (IWorkingSet[]) ws.toArray(new IWorkingSet[ws.size()]); updateWorkingSetScope(); updateWorkingSetLabel(); participantScope.setSelection(false); selectedResourcesScope.setSelection(false); workingSetScope.setSelection(true); } } } /* (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#dispose() */ public void dispose() { if(workingSets != null && workingSetScope.getSelection()) { String concatsWorkingSets = makeWorkingSetLabel(); settings.put(STORE_WORKING_SETS, concatsWorkingSets); } else { settings.put(STORE_WORKING_SETS, (String)null); } } private void updateParticipantScope() { if(participantScope.getSelection()) { scopeCheckingElement = true; fViewer.setCheckedElements(resources.toArray()); setPageComplete(getRootResources().length > 0); scopeCheckingElement = false; } } private void updateSelectedResourcesScope() { setPageComplete(getRootResources().length > 0); } private void selectWorkingSetAction() { IWorkingSetManager manager = PlatformUI.getWorkbench().getWorkingSetManager(); IWorkingSetSelectionDialog dialog = manager.createWorkingSetSelectionDialog(getShell(), true); dialog.open(); IWorkingSet[] sets = dialog.getSelection(); if(sets != null) { workingSets = sets; } else { // dialog cancelled return; } updateWorkingSetScope(); updateWorkingSetLabel(); participantScope.setSelection(false); selectedResourcesScope.setSelection(false); workingSetScope.setSelection(true); } private void updateWorkingSetScope() { if(workingSets != null) { List allWorkingSetResources = new ArrayList(); for (int i = 0; i < workingSets.length; i++) { IWorkingSet set = workingSets[i]; allWorkingSetResources.addAll(IDE.computeSelectedResources(new StructuredSelection(set.getElements()))); } scopeCheckingElement = true; fViewer.setCheckedElements(allWorkingSetResources.toArray(new IResource[allWorkingSetResources.size()])); scopeCheckingElement = false; setPageComplete(true); } else { scopeCheckingElement = true; fViewer.setCheckedElements(new Object[0]); scopeCheckingElement = false; setPageComplete(false); } } private void collectCheckedItems(TreeItem item, List checked) { if(item.getChecked() && !item.getGrayed()) { checked.add(item.getData()); } else if(item.getGrayed()) { TreeItem[] children = item.getItems(); for (int i = 0; i < children.length; i++) { TreeItem child = children[i]; collectCheckedItems(child, checked); } } } private void updateWorkingSetLabel() { if (workingSets == null) { workingSetLabel.setText(Policy.bind("StatisticsPanel.noWorkingSet")); //$NON-NLS-1$ } else { workingSetLabel.setText(makeWorkingSetLabel()); } } /** * @return */ private String makeWorkingSetLabel() { StringBuffer buffer = new StringBuffer(); for (int i = 0; i < workingSets.length; i++) { IWorkingSet set = workingSets[i]; if(i != 0) buffer.append(" ,"); //$NON-NLS-1$ buffer.append(set.getName()); } return buffer.toString(); } } PixelConverter.java000066400000000000000000000030331203611042400411400ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/internal/******************************************************************************* * Copyright (c) 2000, 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.tigris.subversion.subclipse.ui.internal; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.swt.graphics.FontMetrics; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.widgets.Control; public class PixelConverter { private final FontMetrics fFontMetrics; public PixelConverter(Control control) { GC gc = new GC(control); try { gc.setFont(control.getFont()); fFontMetrics= gc.getFontMetrics(); } finally { gc.dispose(); } } public int convertHeightInCharsToPixels(int chars) { return Dialog.convertHeightInCharsToPixels(fFontMetrics, chars); } public int convertHorizontalDLUsToPixels(int dlus) { return Dialog.convertHorizontalDLUsToPixels(fFontMetrics, dlus); } public int convertVerticalDLUsToPixels(int dlus) { return Dialog.convertVerticalDLUsToPixels(fFontMetrics, dlus); } public int convertWidthInCharsToPixels(int chars) { return Dialog.convertWidthInCharsToPixels(fFontMetrics, chars); } } SWTUtils.java000066400000000000000000000241251203611042400376720ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/internal/******************************************************************************* * Copyright (c) 2000, 2005 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.tigris.subversion.subclipse.ui.internal; import org.eclipse.core.runtime.Assert; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.*; import org.eclipse.ui.dialogs.PreferenceLinkArea; import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer; /** * */ public class SWTUtils { public static final int MARGINS_DEFAULT= -1; public static final int MARGINS_NONE= 0; public static final int MARGINS_DIALOG= 1; public static PreferenceLinkArea createPreferenceLink(IWorkbenchPreferenceContainer container, Composite parent, String pageId, String text) { final PreferenceLinkArea area = new PreferenceLinkArea(parent, SWT.NONE, pageId, text, container, null); return area; } public static GridData createGridData(int width, int height, boolean hFill, boolean vFill) { return createGridData(width, height, hFill ? SWT.FILL : SWT.BEGINNING, vFill ? SWT.FILL : SWT.CENTER, hFill, vFill); } public static GridData createGridData(int width, int height, int hAlign, int vAlign, boolean hGrab, boolean vGrab) { final GridData gd= new GridData(hAlign, vAlign, hGrab, vGrab); gd.widthHint= width; gd.heightHint= height; return gd; } public static GridData createHFillGridData() { return createHFillGridData(1); } public static GridData createHFillGridData(int span) { final GridData gd= createGridData(0, SWT.DEFAULT, SWT.FILL, SWT.CENTER, true, false); gd.horizontalSpan= span; return gd; } public static Composite createHFillComposite(Composite parent, int margins) { return createHFillComposite(parent, margins, 1); } public static Composite createHFillComposite(Composite parent, int margins, int columns) { final Composite composite= new Composite(parent, SWT.NONE); composite.setFont(parent.getFont()); composite.setLayoutData(createHFillGridData()); composite.setLayout(createGridLayout(columns, new PixelConverter(parent), margins)); return composite; } public static Composite createHVFillComposite(Composite parent, int margins) { return createHVFillComposite(parent, margins, 1); } public static Composite createHVFillComposite(Composite parent, int margins, int columns) { final Composite composite= new Composite(parent, SWT.NONE); composite.setFont(parent.getFont()); composite.setLayoutData(createHVFillGridData()); composite.setLayout(createGridLayout(columns, new PixelConverter(parent), margins)); return composite; } /** * Groups */ public static Group createHFillGroup(Composite parent, String text, int margins) { return createHFillGroup(parent, text, margins, 1); } public static Group createHFillGroup(Composite parent, String text, int margins, int rows) { final Group group= new Group(parent, SWT.NONE); group.setFont(parent.getFont()); group.setLayoutData(createHFillGridData()); if (text != null) group.setText(text); group.setLayout(createGridLayout(rows, new PixelConverter(parent), margins)); return group; } public static Group createHVFillGroup(Composite parent, String text, int margins) { return createHVFillGroup(parent, text, margins, 1); } public static Group createHVFillGroup(Composite parent, String text, int margins, int rows) { final Group group= new Group(parent, SWT.NONE); group.setFont(parent.getFont()); group.setLayoutData(createHVFillGridData()); if (text != null) group.setText(text); group.setLayout(createGridLayout(rows, new PixelConverter(parent), margins)); return group; } /** * Grid data */ public static GridData createHVFillGridData() { return createHVFillGridData(1); } public static GridData createHVFillGridData(int span) { final GridData gd= createGridData(0, 0, true, true); gd.horizontalSpan= span; return gd; } /** * Create a grid layout with the specified number of columns and the * standard spacings. * * @param numColumns * the number of columns * @param converter * the pixel converter * @param margins * One of MARGINS_DEFAULT, * MARGINS_NONE or MARGINS_DIALOG. * @return the grid layout */ public static GridLayout createGridLayout(int numColumns, PixelConverter converter, int margins) { Assert.isTrue(margins == MARGINS_DEFAULT || margins == MARGINS_NONE || margins == MARGINS_DIALOG); final GridLayout layout= new GridLayout(numColumns, false); layout.horizontalSpacing= converter.convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); layout.verticalSpacing= converter.convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); switch (margins) { case MARGINS_NONE: layout.marginLeft= layout.marginRight= 0; layout.marginTop= layout.marginBottom= 0; break; case MARGINS_DIALOG: layout.marginLeft= layout.marginRight= converter.convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); layout.marginTop= layout.marginBottom= converter.convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); break; case MARGINS_DEFAULT: layout.marginLeft= layout.marginRight= layout.marginWidth; layout.marginTop= layout.marginBottom= layout.marginHeight; } layout.marginWidth= layout.marginHeight= 0; return layout; } public static Label createLabel(Composite parent, String message) { return createLabel(parent, message, 1); } public static Label createLabel(Composite parent, String message, int span) { final Label label= new Label(parent, SWT.WRAP); if (message != null) label.setText(message); label.setLayoutData(createHFillGridData(span)); return label; } public static Button createCheckBox(Composite parent, String message) { return createCheckBox(parent, message, 1); } public static Button createCheckBox(Composite parent, String message, int span) { final Button button= new Button(parent, SWT.CHECK); button.setText(message); button.setLayoutData(createHFillGridData(span)); return button; } public static Button createRadioButton(Composite parent, String message) { return createRadioButton(parent, message, 1); } public static Button createRadioButton(Composite parent, String message, int span) { final Button button= new Button(parent, SWT.RADIO); button.setText(message); button.setLayoutData(createHFillGridData(span)); return button; } public static Text createText(Composite parent) { return createText(parent, 1); } public static Text createText(Composite parent, int span) { final Text text= new Text(parent, SWT.SINGLE | SWT.BORDER); text.setLayoutData(createHFillGridData(span)); return text; } public static Control createPlaceholder(Composite parent, int heightInChars, int span) { Assert.isTrue(heightInChars > 0); final Control placeHolder= new Composite(parent, SWT.NONE); final GridData gd= new GridData(SWT.BEGINNING, SWT.TOP, false, false); gd.heightHint= new PixelConverter(parent).convertHeightInCharsToPixels(heightInChars); gd.horizontalSpan= span; placeHolder.setLayoutData(gd); return placeHolder; } public static Control createPlaceholder(Composite parent, int heightInChars) { return createPlaceholder(parent, heightInChars, 1); } public static PixelConverter createDialogPixelConverter(Control control) { Dialog.applyDialogFont(control); return new PixelConverter(control); } public static int calculateControlSize(PixelConverter converter, Control [] controls) { return calculateControlSize(converter, controls, 0, controls.length - 1); } public static int calculateControlSize(PixelConverter converter, Control [] controls, int start, int end) { int minimum= converter.convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); for (int i = start; i <= end; i++) { final int length= controls[i].computeSize(SWT.DEFAULT, SWT.DEFAULT).x; if (minimum < length) minimum= length; } return minimum; } public static void equalizeControls(PixelConverter converter, Control [] controls) { equalizeControls(converter, controls, 0, controls.length - 1); } public static void equalizeControls(PixelConverter converter, Control [] controls, int start, int end) { final int size= calculateControlSize(converter, controls, start, end); for (int i = start; i <= end; i++) { final Control button= controls[i]; if (button.getLayoutData() instanceof GridData) { ((GridData)button.getLayoutData()).widthHint= size; } } } public static int getWidthInCharsForLongest(PixelConverter converter, String [] strings) { int minimum= 0; for (int i = 0; i < strings.length; i++) { final int length= converter.convertWidthInCharsToPixels(strings[i].length()); if (minimum < length) minimum= length; } return minimum; } } ScopableSubscriberParticipant.java000066400000000000000000000041511203611042400441440ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/internal/******************************************************************************* * copied from: org.eclipse.team.internal.ui.synchronize.ScopableSubscriberParticipant * * Copyright (c) 2000, 2004 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.tigris.subversion.subclipse.ui.internal; import org.eclipse.core.runtime.CoreException; import org.eclipse.team.core.subscribers.Subscriber; import org.eclipse.team.ui.synchronize.ISynchronizeParticipantDescriptor; import org.eclipse.team.ui.synchronize.ISynchronizeScope; import org.eclipse.team.ui.synchronize.SubscriberParticipant; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; /** * subscriber particpant that supports filtering using scopes. */ public abstract class ScopableSubscriberParticipant extends SubscriberParticipant { /** * No arg contructor used to create workspace scope and for * creation of persisted participant after startup */ public ScopableSubscriberParticipant() { } public ScopableSubscriberParticipant(ISynchronizeScope scope) { super(scope); } /* (non-Javadoc) * @see org.eclipse.team.ui.synchronize.subscriber.SubscriberParticipant#setSubscriber(org.eclipse.team.core.subscribers.Subscriber) */ protected void setSubscriber(Subscriber subscriber) { super.setSubscriber(subscriber); try { ISynchronizeParticipantDescriptor descriptor = getDescriptor(); setInitializationData(descriptor); } catch (CoreException e) { SVNUIPlugin.log(e); } if (getSecondaryId() == null) { setSecondaryId(Long.toString(System.currentTimeMillis())); } } /** * Return the descriptor for this participant * @return the descriptor for this participant */ protected abstract ISynchronizeParticipantDescriptor getDescriptor(); } TeamAction.java000066400000000000000000000311701203611042400402160ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/internal/******************************************************************************* * copied from: org.eclipse.team.internal.ui.actions.TeamAction * * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.tigris.subversion.subclipse.ui.internal; import java.lang.reflect.Array; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Hashtable; import java.util.Iterator; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceStatus; import org.eclipse.core.resources.mapping.ResourceMapping; import org.eclipse.core.resources.mapping.ResourceTraversal; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.text.ITextSelection; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; import org.eclipse.ui.IEditorInput; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IObjectActionDelegate; import org.eclipse.ui.IViewActionDelegate; import org.eclipse.ui.IViewPart; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.actions.ActionDelegate; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; /** * The abstract superclass of all Team actions. This class contains some convenience * methods for getting selected objects and mapping selected objects to their * providers. * * Team providers may subclass this class when creating their actions. * Team providers may also instantiate or subclass any of the * subclasses of TeamAction provided in this package. */ public abstract class TeamAction extends ActionDelegate implements IObjectActionDelegate, IViewActionDelegate { // The current selection protected IStructuredSelection selection; // The shell, required for the progress dialog protected Shell shell; // Constants for determining the type of progress. Subclasses may // pass one of these values to the run method. public final static int PROGRESS_DIALOG = 1; public final static int PROGRESS_BUSYCURSOR = 2; private IWorkbenchPart targetPart; /** * Creates an array of the given class type containing all the * objects in the selection that adapt to the given class. * * @param selection * @param c * @return */ public static Object[] getSelectedAdaptables(ISelection selection, Class c) { ArrayList result = null; if (selection != null && !selection.isEmpty()) { result = new ArrayList(); Iterator elements = ((IStructuredSelection) selection).iterator(); while (elements.hasNext()) { Object adapter = getAdapter(elements.next(), c); if (c.isInstance(adapter)) { result.add(adapter); } } } if (result != null && !result.isEmpty()) { return result.toArray((Object[])Array.newInstance(c, result.size())); } return (Object[])Array.newInstance(c, 0); } /** * Find the object associated with the given object when it is adapted to * the provided class. Null is returned if the given object does not adapt * to the given class * * @param selection * @param c * @return Object */ public static Object getAdapter(Object adaptable, Class c) { if (c.isInstance(adaptable)) { return adaptable; } if (adaptable instanceof IAdaptable) { IAdaptable a = (IAdaptable) adaptable; Object adapter = a.getAdapter(c); if (c.isInstance(adapter)) { return adapter; } } return null; } /** * Returns the selected projects. * * @return the selected projects */ protected IProject[] getSelectedProjects() { IResource[] selectedResources = getSelectedResources(); if (selectedResources.length == 0) return new IProject[0]; ArrayList projects = new ArrayList(); for (int i = 0; i < selectedResources.length; i++) { IResource resource = selectedResources[i]; if (resource.getType() == IResource.PROJECT) { projects.add(resource); } } return (IProject[]) projects.toArray(new IProject[projects.size()]); } /** * Returns an array of the given class type c that contains all * instances of c that are either contained in the selection or * are adapted from objects contained in the selection. * * @param c * @return */ protected Object[] getSelectedResources(Class c) { return getSelectedAdaptables(selection, c); } /** * Returns the selected resources. * * @return the selected resources */ protected IResource[] getSelectedResources() { ArrayList resourceArray = new ArrayList(); IResource[] resources = (IResource[])getSelectedResources(IResource.class); for (int i = 0; i < resources.length; i++) resourceArray.add(resources[i]); ResourceMapping[] resourceMappings = (ResourceMapping[])getSelectedAdaptables(selection, ResourceMapping.class); for (int i = 0; i < resourceMappings.length; i++) { ResourceMapping resourceMapping = (ResourceMapping)resourceMappings[i]; try { ResourceTraversal[] traversals = resourceMapping.getTraversals(null, null); for (int j = 0; j < traversals.length; j++) { IResource[] traversalResources = traversals[j].getResources(); for (int k = 0; k < traversalResources.length; k++) { if (!resourceArray.contains(traversalResources[k])) resourceArray.add(traversalResources[k]); } } } catch (CoreException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } IResource[] selectedResources = new IResource[resourceArray.size()]; resourceArray.toArray(selectedResources); return selectedResources; } /** * Convenience method for getting the current shell. * * @return the shell */ public Shell getShell() { if (shell != null) { return shell; } else { IWorkbench workbench = SVNUIPlugin.getPlugin().getWorkbench(); if (workbench == null) return null; IWorkbenchWindow window = workbench.getActiveWorkbenchWindow(); if (window == null) return null; return window.getShell(); } } /** * Convenience method for running an operation with progress and * error feedback. * * @param runnable the runnable which executes the operation * @param problemMessage the message to display in the case of errors * @param progressKind one of PROGRESS_BUSYCURSOR or PROGRESS_DIALOG */ final protected void run(final IRunnableWithProgress runnable, final String problemMessage, int progressKind) { final Exception[] exceptions = new Exception[] {null}; switch (progressKind) { case PROGRESS_BUSYCURSOR : BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { try { runnable.run(new NullProgressMonitor()); } catch (InvocationTargetException e) { exceptions[0] = e; } catch (InterruptedException e) { exceptions[0] = null; } } }); break; default : case PROGRESS_DIALOG : try { new ProgressMonitorDialog(getShell()).run(true, true, runnable); } catch (InvocationTargetException e) { exceptions[0] = e; } catch (InterruptedException e) { exceptions[0] = null; } break; } if (exceptions[0] != null) { handle(exceptions[0], null, problemMessage); } } /* * Method declared on IActionDelegate. */ public void selectionChanged(IAction action, ISelection sel) { if (sel instanceof IStructuredSelection) { this.selection = (IStructuredSelection) sel; if (action != null) { setActionEnablement(action); } } if (sel instanceof ITextSelection){ IEditorPart part = getTargetPage().getActiveEditor(); if (part != null) { IEditorInput input = part.getEditorInput(); IResource r = (IResource) input.getAdapter(IResource.class); if (r != null) { switch(r.getType()){ case IResource.FILE: this.selection = new StructuredSelection(r); if (action != null) { setActionEnablement(action); } break; } } // set selection to current editor file; } } } /** * Method invoked from selectionChanged(IAction, ISelection) * to set the enablement status of the action. The instance variable * selection will contain the latest selection so the methods * getSelectedResources() and getSelectedProjects() * will provide the proper objects. * * This method can be overridden by subclasses but should not be invoked by them. */ protected void setActionEnablement(IAction action) { try { action.setEnabled(isEnabled()); } catch (TeamException e) { if (e.getStatus().getCode() == IResourceStatus.OUT_OF_SYNC_LOCAL) { // Enable the action to allow the user to discover the problem action.setEnabled(true); } else { action.setEnabled(false); // We should not open a dialog when determining menu enablements so log it instead SVNUIPlugin.log(e); } } } /* * Method declared on IObjectActionDelegate. */ public void setActivePart(IAction action, IWorkbenchPart targetPart) { if(targetPart != null) { this.shell = targetPart.getSite().getShell(); this.targetPart = targetPart; } } /** * Shows the given errors to the user. * * @param status the status containing the error * @param title the title of the error dialog * @param message the message for the error dialog * @param shell the shell to open the error dialog in */ protected void handle(Exception exception, String title, String message) { Utils.handleError(getShell(), exception, title, message); } /** * Concrete action enablement code. * Subclasses must implement. * * @return whether the action is enabled * @throws TeamException if an error occurs during enablement detection */ abstract protected boolean isEnabled() throws TeamException; /** * Convenience method that maps the selected resources to their providers. * The returned Hashtable has keys which are ITeamProviders, and values * which are Lists of IResources that are shared with that provider. * * @return a hashtable mapping providers to their selected resources */ protected Hashtable getProviderMapping() { return getProviderMapping(getSelectedResources()); } /** * Convenience method that maps the given resources to their providers. * The returned Hashtable has keys which are ITeamProviders, and values * which are Lists of IResources that are shared with that provider. * * @return a hashtable mapping providers to their resources */ protected Hashtable getProviderMapping(IResource[] resources) { Hashtable result = new Hashtable(); for (int i = 0; i < resources.length; i++) { RepositoryProvider provider = RepositoryProvider.getProvider(resources[i].getProject()); List list = (List)result.get(provider); if (list == null) { list = new ArrayList(); result.put(provider, list); } list.add(resources[i]); } return result; } /** * @return IWorkbenchPart */ protected IWorkbenchPart getTargetPart() { return targetPart; } /** * Return the path that was active when the menu item was selected. * @return IWorkbenchPage */ protected IWorkbenchPage getTargetPage() { if (getTargetPart() == null) return SVNUIPlugin.getActivePage(); return getTargetPart().getSite().getPage(); } /** * Show the view with the given ID in the perspective from which the action * was executed. Returns null if the view is not registered. * * @param viewId * @return IViewPart */ protected IViewPart showView(String viewId) { try { return getTargetPage().showView(viewId); } catch (PartInitException pe) { return null; } } /* (non-Javadoc) * @see org.eclipse.ui.IViewActionDelegate#init(org.eclipse.ui.IViewPart) */ public void init(IViewPart view) { targetPart = view; } } Utils.java000066400000000000000000000144261203611042400372770ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/internal/******************************************************************************* * copied from: org.eclipse.team.internal.ui.Utils * * Copyright (c) 2000, 2003 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/cpl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.tigris.subversion.subclipse.ui.internal; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.TeamException; import org.eclipse.ui.IWorkbenchSite; import org.eclipse.ui.progress.IWorkbenchSiteProgressService; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class Utils { public static void schedule(Job job, IWorkbenchSite site) { if (site != null) { IWorkbenchSiteProgressService siteProgress = (IWorkbenchSiteProgressService) site.getAdapter(IWorkbenchSiteProgressService.class); if (siteProgress != null) { siteProgress.schedule(job, 0, true /* use half-busy cursor */); return; } } job.schedule(); } public static byte[] readBytes(InputStream in) { ByteArrayOutputStream bos= new ByteArrayOutputStream(); try { while (true) { int c= in.read(); if (c == -1) break; bos.write(c); } } catch (IOException ex) { return null; } finally { if (in != null) { try { in.close(); } catch (IOException x) { // silently ignored } } try { bos.close(); } catch (IOException x) { // silently ignored } } return bos.toByteArray(); } /* * This method is only for use by the Target Management feature (see bug * 16509). @param t */ public static void handle(final Throwable exception) { Utils.getStandardDisplay().asyncExec(new Runnable() { public void run() { IStatus error = null; Throwable t = exception; if (t instanceof InvocationTargetException) { t = ((InvocationTargetException) t).getTargetException(); } if (t instanceof CoreException) { error = ((CoreException) t).getStatus(); } else if (t instanceof TeamException) { error = ((TeamException) t).getStatus(); } else { error = new Status(IStatus.ERROR, SVNUIPlugin.ID, 1, Policy.bind("simpleInternal"), t); //$NON-NLS-1$ } Shell shell = new Shell(Display.getDefault()); if (error.getSeverity() == IStatus.INFO) { MessageDialog.openInformation(shell, Policy.bind("information"), error.getMessage()); //$NON-NLS-1$ } else { ErrorDialog.openError(shell, Policy.bind("exception"), null, error); //$NON-NLS-1$ } shell.dispose(); // Let's log non-team exceptions if (!(t instanceof TeamException)) { SVNUIPlugin.log(error.getSeverity(), error.getMessage(), t); } } }); } /** * Returns the standard display to be used. The method first checks, if * the thread calling this method has an associated display. If so, this * display is returned. Otherwise the method returns the default display. */ public static Display getStandardDisplay() { Display display= Display.getCurrent(); if (display == null) { display= Display.getDefault(); } return display; } /** * Convenience method for logging statuses to the plugin log * * @param status the status to log */ public static void log(IStatus status) { SVNUIPlugin.getPlugin().getLog().log(status); } /** * Convenience method for logging a TeamException in such a way that the * stacktrace is logged as well. * @param e */ public static void log(CoreException e) { IStatus status = e.getStatus(); log (status.getSeverity(), status.getMessage(), e); } /** * Log the given exception along with the provided message and severity indicator */ public static void log(int severity, String message, Throwable e) { log(new Status(severity, SVNUIPlugin.ID, 0, message, e)); } /** * Shows the given errors to the user. * @param Exception * the exception containing the error * @param title * the title of the error dialog * @param message * the message for the error dialog * @param shell * the shell to open the error dialog in */ public static void handleError(Shell shell, Exception exception, String title, String message) { IStatus status = null; boolean log = false; boolean dialog = false; Throwable t = exception; if (exception instanceof TeamException) { status = ((TeamException) exception).getStatus(); log = false; dialog = true; } else if (exception instanceof InvocationTargetException) { t = ((InvocationTargetException) exception).getTargetException(); if (t instanceof TeamException) { status = ((TeamException) t).getStatus(); log = false; dialog = true; } else if (t instanceof CoreException) { status = ((CoreException) t).getStatus(); log = true; dialog = true; } else if (t instanceof InterruptedException) { return; } else { status = new Status(IStatus.ERROR, SVNUIPlugin.ID, 1, Policy.bind("TeamAction.internal"), t); //$NON-NLS-1$ log = true; dialog = true; } } if (status == null) return; if (!status.isOK()) { IStatus toShow = status; if (status.isMultiStatus()) { IStatus[] children = status.getChildren(); if (children.length == 1) { toShow = children[0]; } } if (title == null) { title = status.getMessage(); } if (message == null) { message = status.getMessage(); } if (dialog && shell != null) { ErrorDialog.openError(shell, title, message, toShow); } if (log || shell == null) { SVNUIPlugin.log(toShow.getSeverity(), message, t); } } } } XMLWriter.java000066400000000000000000000065101203611042400400270ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/internal/******************************************************************************* * copied from: org.eclipse.core.internal.resources.XMLWriter * * Copyright (c) 2000, 2004 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.tigris.subversion.subclipse.ui.internal; import java.io.*; import java.util.*; /** * A simple XML writer. */ public class XMLWriter extends PrintWriter { protected int tab; /* constants */ protected static final String XML_VERSION = ""; //$NON-NLS-1$ public XMLWriter(OutputStream output) throws UnsupportedEncodingException { super(new OutputStreamWriter(output, "UTF8")); //$NON-NLS-1$ tab = 0; println(XML_VERSION); } public void endTag(String name) { tab--; printTag('/' + name, null); } public void printSimpleTag(String name, Object value) { if (value != null) { printTag(name, null, true, false); print(getEscaped(String.valueOf(value))); printTag('/' + name, null, false, true); } } public void printTabulation() { for (int i = 0; i < tab; i++) super.print('\t'); } public void printTag(String name, HashMap parameters) { printTag(name, parameters, true, true); } public void printTag(String name, HashMap parameters, boolean shouldTab, boolean newLine) { StringBuffer sb = new StringBuffer(); sb.append("<"); //$NON-NLS-1$ sb.append(name); if (parameters != null) for (Iterator it = parameters.keySet().iterator(); it.hasNext();) { sb.append(" "); //$NON-NLS-1$ String key = (String) it.next(); sb.append(key); sb.append("=\""); //$NON-NLS-1$ sb.append(getEscaped(String.valueOf(parameters.get(key)))); sb.append("\""); //$NON-NLS-1$ } sb.append(">"); //$NON-NLS-1$ if (shouldTab) printTabulation(); if (newLine) println(sb.toString()); else print(sb.toString()); } public void startTag(String name, HashMap parameters) { startTag(name, parameters, true); } public void startTag(String name, HashMap parameters, boolean newLine) { printTag(name, parameters, true, newLine); tab++; } private static void appendEscapedChar(StringBuffer buffer, char c) { String replacement = getReplacement(c); if (replacement != null) { buffer.append('&'); buffer.append(replacement); buffer.append(';'); } else { buffer.append(c); } } public static String getEscaped(String s) { StringBuffer result = new StringBuffer(s.length() + 10); for (int i = 0; i < s.length(); ++i) appendEscapedChar(result, s.charAt(i)); return result.toString(); } private static String getReplacement(char c) { // Encode special XML characters into the equivalent character references. // These five are defined by default for all XML documents. switch (c) { case '<' : return "lt"; //$NON-NLS-1$ case '>' : return "gt"; //$NON-NLS-1$ case '"' : return "quot"; //$NON-NLS-1$ case '\'' : return "apos"; //$NON-NLS-1$ case '&' : return "amp"; //$NON-NLS-1$ } return null; } } messages.properties000066400000000000000000003206401203611042400374430ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui#****************************************************************************** # Copyright (c) 2003, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ ShowOutOfDateFoldersAction.refreshTaskName=Synchronizing AddAction.addFailed=Error occurred during Add AddAction.addIgnoredQuestion=You have explicitly asked to version control one or more resources that otherwise would have been ignored. Continue? AddAction.addIgnoredTitle=Add Ignored Resource? AddAction.adding=Adding... AddKeywordsAction.addKeywordsFailed=Error changing svn:keywords properties AddKeywordsDialog.headUrl.description=full url to the latest version of the file in the repository AddKeywordsDialog.headUrl.sample=$HeadURL: http://svn.collab.net/repos/subclipse/trunk/readme.txt $ AddKeywordsDialog.id.description=compressed combination of the other keywords AddKeywordsDialog.id.sample=$Id: AddKeywordsDialog.java 148 2003-11-02 22:35:43Z cchab $ AddKeywordsDialog.description=description AddKeywordsDialog.lastChangedBy.description=last known user to change this file in the repository AddKeywordsDialog.lastChangedBy.sample=$LastChangedBy: cchab $ AddKeywordsDialog.lastChangedDate.description=last time the file was known to have been changed in the repository AddKeywordsDialog.lastChangedDate.sample=$LastChangedDate: 2002-07-22 21:42:37 -0700 (Mon, 22 Jul 2002) $ AddKeywordsDialog.lastChangedRevision.description=last known revision in which the file changed in the repository AddKeywordsDialog.lastChangedRevision.sample=$LastChangedRevision: 144 $ AddKeywordsDialog.selectKeywords=Select keywords to set on selected files : AddKeywordsDialog.title=Add keywords AddKeywordsDialog.keyword=keyword AddKeywordsDialog.sample=sample AddToBranchAction.enterTag=Enter Branch Tag AddToBranchAction.enterTagLong=Enter the name of the branch: AddToVersionControlDialog.thereAreUnaddedResources=There are {0} resources that are not under SVN version control. Do you want to add them? AddToVersionControlDialog.thereIsAnUnaddedResource=There is {0} resource that is not under SVN version control. Do you want to add it? AddToVersionControlDialog.title=Add to SVN Version Control AddToWorkspace.taskName1=Checking out ''{0}'' from SVN AddToWorkspace.taskNameN=Checking out {0} folders from SVN AddToWorkspaceAction.checkoutFailed=Problems encountered performing checkout AddToWorkspaceAction.confirmOverwrite=Confirm Overwrite AddToWorkspaceAction.thisExternalFileExists=The folder ''{0}'' exists in the local file system and will be deleted. Proceed? AddToWorkspaceAction.thisResourceExists=The resource ''{0}'' already exists in the workspace and will be deleted. Proceed? AddToWorkspaceAction.checkingOutRoot=You appear to be checking out the root of your repository. Are you sure that this is what you want to do? If your repository contains any branches or tags all of them will be checked out. CannotSharePage_0=\ cannot be shared because it does not exist in the workspace, or is not stored in the local file system. CannotSharePage_1=Project cannot be shared. CannotSharePage_2=Project CheckoutAsProjectAction.title=Check Out As Project CheckoutAsAction.title=Check Out As... Advanced_options_19=Advanced options After_configuring_the_project__1=After configuring the project: AlternateUserValidationDialog.Cancel_7=Cancel AlternateUserValidationDialog.Enter_Password_2=Enter Password AlternateUserValidationDialog.OK_6=OK AlternateUserValidationDialog.message=Enter the password for {0}: AutoDefineTagsAction.defineTags = Auto-discover tags Automatically_import_the_local_resources_into_the_repository_3=Automatically import the local resources into the repository AvoidableMessageDialog.dontShowAgain=Don't show this again BranchCategory.Branches_1=Branches ChangeListener.Deleting_SVN_folders_1=Deleting SVN folders ChangeListener.Do_not_ask_me_about_this_again_3=Do not ask me about this again ChangeListener.Folders_cannot_be_deleted_from_a_SVN_server_from_the_client._To_delete_the_folder_2=Folders cannot be deleted from a SVN server from the client. To delete the folder ChangePathsTableProvider.action=Action ChangePathsTableProvider.path=Affected paths ChangePathsTableProvider.description=Description ChangePathsTableProvider.copiedfrom=from {0}:{1} CheckoutAsAction.checkoutFailed=Problems encountered performing checkout CheckoutAsAction.confirmOverwrite=The project you created, {0}, contains resources other than the standard .project file. If any of those resources have the same name and relative location of a resource you are checking out, the local resource will be replaced with the resource from the repository. CheckoutAsAction.enterLocationTitle=Check Out {0} Projects As... CheckoutAsAction.enterProjectTitle=Check Out {0} As... CheckoutAsAction.multiCheckout=Checking out {0} projects from SVN CheckoutAsAction.taskname=Checking out "{0}" from SVN as "{1}" CheckoutInto.message=Select the folder into which you want this project checked out. A new folder, named for the project, will be created inside the folder you choose. CheckoutIntoProjectSelectionPage.description=Choose the name and parent folder where ''{0}'' should be checked out to. CheckoutIntoProjectSelectionPage.invalidFolderName=''{0}'' is not a valid folder name CheckoutIntoProjectSelectionPage.name=Target folder &name: CheckoutIntoProjectSelectionPage.recurse=&Checkout subfolders CheckoutIntoProjectSelectionPage.showAll=Show all valid target projects CheckoutIntoProjectSelectionPage.showLabel=&Filter project list: CheckoutIntoProjectSelectionPage.showSameRepo=Show projects shared with the same repository CheckoutIntoProjectSelectionPage.showUnshared=Show unshared projects CheckoutIntoProjectSelectionPage.treeLabel=&Parent of target folder: CheckoutIntoWizard.,mappingAlredyExists=Cannot add remote folder ''{0}'' to project ''{1}'' as ''{2}'' because local folder ''{3}'' is already mapped to that folder. CheckoutIntoWizard.confirmOverwrite=Confirm Overwrite CheckoutIntoWizard.error=Checkout Error CheckoutIntoWizard.projectSelectionPageDescription=Select the local folder that is the target of the checkout operation. CheckoutIntoWizard.projectSelectionPageTitle=Select local folder CheckoutIntoWizard.thisResourceExists=The resource ''{0}'' already exists in the workspace. Overwrite? CheckoutIntoWizard.title=Checkout Into ChooseRootUrlDialog.rootUrlDialogTitle=Root repository url ChooseRootUrlDialog.chooseRootUrl=Choose root repository url : CommentCommitWizardPage.pageDescription=Enter commit message CommentCommitWizardPage.pageTitle=Commit CommentTemplatesPreferencePage.Description=&Create, edit or remove comment templates: CommentTemplatesPreferencePage.New=&New... CommentTemplatesPreferencePage.Edit=&Edit... CommentTemplatesPreferencePage.Remove=&Remove CommentTemplatesPreferencePage.Preview=Previe&w: CommentTemplatesPreferencePage.EditCommentTemplateTitle=Enter Comment Template CommentTemplatesPreferencePage.EditCommentTemplateMessage=Please enter a comment template: CommitAction.commitFailed=Problems encountered performing commit CommitSyncAction.cancelRelease=Cancel the release operation. CommitSyncAction.errorCommitting=An error occurred while committing changes. CommitSyncAction.questionRelease=You have changes that conflict with the server. Release those changes? CommitSyncAction.releaseAll=Release all changes, overriding any conflicting changes on the server. CommitSyncAction.releasePart=Only release the changes that don't conflict with changes on the server. CommitSyncAction.titleRelease=Release Conflicts? CompareEditorInput.fileProgress=Comparing SVN file: {0} ComparePropertiesDialog.1=Compare SVN Properties ComparePropertiesDialog.16=Recursive ComparePropertiesDialog.18=Select the working copy resource: ComparePropertiesDialog.2=Working copy: ComparePropertiesDialog.3=Select... ComparePropertiesDialog.4=Repository: ComparePropertiesDialog.6=Compare with HEAD Revision ComparePropertiesDialog.7=Revision: CompareSvnPropertiesAction.0=Compare SVN Properties CompareWithRemoteAction.compare=Error Comparing with Latest CompareWithRemoteAction.fetching=Comparing with latest from repository... CompareWithRemoteAction.noRemote=No Remote Resource CompareWithRemoteAction.noRemoteLong=The selected resource has no remote resource to compare with. CompareWithRemoteAction.fileChanged=The file has changed on the file system. Do you want to load the changes? CompareWithRevisionAction.compare=Error Comparing with Revision CompareWithRevisionAction.fetching=Fetching revisions from repository... CompareWithRevisionAction.noRevisions=No Revisions CompareWithRevisionAction.noRevisionsLong=The selected resource has no revisions to compare with. CompareWithTagAction.fetching=Fetching resources with tag {0}... CompareWithTagAction.message=Compare with Branch or Version CompareWithTagAction.noRemote=No Remote Resource CompareWithTagAction.noRemoteLong=The selected tag has no remote resource to compare with. CompareWithTagAction.replace=Error Comparing With Branch or Version DialogWizard_0=Resolve Conflict DialogWizard_1=Handle Conflict DialogWizard_2=Handle Conflict DifferencesDialog.compare=Compare ConfigurationWizardAutoconnectPage.connectionType=Connection type: ConfigurationWizardAutoconnectPage.default=Default ConfigurationWizardAutoconnectPage.description=Your project already has SVN/ directories. It was probably previously shared, or checked out using another tool. It will be automatically shared using the following information. ConfigurationWizardAutoconnectPage.host=Host: ConfigurationWizardAutoconnectPage.module=Folder: ConfigurationWizardAutoconnectPage.noSVNDirectory=Could not find SVN/ directory ConfigurationWizardAutoconnectPage.noSyncInfo=Could not get folder information ConfigurationWizardAutoconnectPage.port=Port: ConfigurationWizardAutoconnectPage.repositoryPath=Repository path: ConfigurationWizardAutoconnectPage.user=User: ConfigurationWizardAutoconnectPage.validate=&Validate Connection on Finish ConfigurationWizardMainPage.Authentication_2=Authentication ConfigurationWizardMainPage.Connection_3=Connection ConfigurationWizardMainPage.Location_1=Location ConfigurationWizardMainPage.connection=&Connection type: ConfigurationWizardMainPage.invalidHostName=Invalid Host Name ConfigurationWizardMainPage.invalidPathWithSlashes=The repository path cannot contain a double slash (//) ConfigurationWizardMainPage.invalidPathWithSpaces=The repository path cannot have segments with leading or trailing spaces ConfigurationWizardMainPage.invalidPort=Invalid Port ConfigurationWizardMainPage.invalidUrl=The repository path must be a valid URL {0} ConfigurationWizardMainPage.invalidUserName=Invalid User Name ConfigurationWizardMainPage.password=&Password: ConfigurationWizardMainPage.repositoryPath=&Repository path: ConfigurationWizardMainPage.url=&Url: ConfigurationWizardMainPage.useDefaultPort=Use &Default Port ConfigurationWizardMainPage.usePort=Use Por&t: ConfigurationWizardMainPage.userName=&User: ConfigurationWizardMainPage.rootUrl=Root url : ConfigurationWizardMainPage.browseRootUrl=Browse ... ConfigurationWizardMainPage.rootUrlWarning=If your repository url is http://mycompany.com/repository/trunk/project, \nyour root repository url is probably http://mycompany.com/repository ConfigureTagsAction_1=Configure Branches/Tags ConfigureTagsAction_2=The 'subclipse:tags' property must be the same for all selected resources to configure branches and tags for multiple resources at once. ConfigureTagsFromRepoViewConfigure_Tag_Error_1=Configure Tag Error Configure_the_options_used_for_the_SVN_diff_command_20=Configure the options used for the SVN diff command Console.clearOutput=Clear Output Console.copy=Copy Console.couldNotFormatTime=An error occurred formatting the output time for the SVN console. Console.error=Error: {0} Console.info=Info: {0} Console.postExecutionDelimiter=*** Console.preExecutionDelimiter=*** Console.resultAborted=operation canceled {0} Console.resultException=failed due to an internal error {0} Console.resultOk=ok {0} Console.resultServerError={0} {1} Console.resultTimeFormat='(took 'm:ss.SSS')' Console.resultWarnings={0} {1} Console.selectAll=Select All Console.warning=Warning: {0} ConsoleRemoveAction.label=Close SVN Console ConsoleRemoveAction.tooltip=Close SVN console ConsolePreferencePage.commandColor=Command &Line: ConsolePreferencePage.consoleColorSettings=Console text color settings. ConsolePreferencePage.errorColor=E&rror: ConsolePreferencePage.font=Console font setting: ConsolePreferencePage.messageColor=&Message: ConsolePreferencePage.showOnError=Show SVN console automatically when an &error is encountered ConsolePreferencePage.showOnMessage=Show SVN console automatically when &command is run ConsolePreferencePage.limitOutput=&Limit console output ConsolePreferencePage.highWaterMark=Console &buffer size (characters): ContentAction.Changing_this_setting_will_involve_contacting_the_server_and_may_be_long-running_2=Changing this setting will involve contacting the server and may be long-running ContentAction.Confirm_Long_Operation_1=Confirm Long Operation Context_14=&Context RefreshNodeAction.title=Refresh Revision/Merge info UpdateCacheAction.title=Build/Update Revision Graph Cache DeleteCacheAction.title=Clear Revision Graph Cache DeleteCacheAction.noCache=No revision graph cache exists for selected repository. DeleteCacheAction.confirm=Are you sure you want to clear the revision graph repository for {0}? DeleteCacheAction.deleteError=Could not delete {0}. NewMergeFileAssociationWizard.heading=Define a New File Type NewMergeFileAssociationWizard.description=Enter file type to add: (*.doc or report.doc for example) NewMergeFileAssociationWizardPage.fileTypeExists=Association already defined for file type {0} NewMergeFileAssociationWizardPage.fileType=&File type: NewMergeFileAssociationWizardPage.customParameters=Pa&rameters : MergeFileAssociationPreferencePage.fileTypes=File types: MergeFileAssociationPreferencePage.mergeProgramGroup=Conflict Resolution Program MergeFileAssociationPreferencePage.defaultExternal=&Default external MergeFileAssociationPreferencePage.customExternal=&Custom external MergeFileAssociationPreferencePage.add=&Add... MergeFileAssociationPreferencePage.remove=&Remove MergeFileAssociationPreferencePage.title=Merge File Associations MergeFileAssociationPreferencePage.confirmCancel=Merge file associations have been updated. Do you wish to save your changes? DiffAction.diff=Diff DiffMergePreferencePage.1=Suggest merge sources DiffMergePreferencePage.mergeImplementation=&Merge implementation: DiffMergePreferencePage.mergeProgramGroup=&Conflict Resolution Program DiffMergePreferencePage.builtInMerge=&Built-in DiffMergePreferencePage.externalMerge=&External DiffMergePreferencePage.browse=Br&owse... DiffMergePreferencePage.mergeProgramParameters=&Parameters : DiffMergePreferencePage.mergeProgramVariables=&Variables DiffMergePreferencePage.tortoiseMergeComment1=For TortoiseMerge, the parameters are : DiffMergePreferencePage.tortoiseMergeComment2=/theirs:"${theirs}" /base:"${base}" /mine:"${yours}" /merged:"${merged}" DiffMergePreferencePage.addVariableDialogTitle=Add variable DiffMergePreferencePage.mergedVariableComment=the conflicted file, where to merge DiffMergePreferencePage.theirsVariableComment=the file as it is in the repository DiffMergePreferencePage.yoursVariableComment=your own file, with your changes DiffMergePreferencePage.baseVariableComment=the original file without your changes DiffNewFilesDialog.title=Include Unversioned Files in Patch DiffNewFilesDialog.resources=Checked resources will be included in the patch. Do_nothing_5=Do nothing EditConflictsAction.1=Error occurred attempting to run external conflict resolution program:\n\n EditConflictsAction.errorTitle=Edit conflicts EditConflictsAction.noMergeProgramConfigured=No merge program configured EditConflictsAction.mergeProgramDoesNotExist=Configured merge program does not exist anymore EditorsAction.classNotInitialized={0} not initialized EditorsDialog.question=The resource already has editors. Do you still want to edit the resource? EditorsDialog.title=Editors EditorsView.computer=Computer name EditorsView.date=Date EditorsView.file=File name EditorsView.user=User name Example__1=Example: ExtMethodPreferencePage_Add_Variable=&Add Variable... ExtMethodPreferencePage_Browse=&Browse... ExtMethodPreferencePage_Details=Select a program or script ExtMethodPreferencePage_SVN_SERVER__7=SVN_&SERVER: ExtMethodPreferencePage_message=These variables define the external connection program to use with the \'ext\' connection method.\nThese values should be the same as the \'ext\' SVN command-line environment variable settings. FinishedEditingWizardPage_0=Resolve Conflict FinishedEditingWizardPage_1=&Yes. I resolved all of the conflicts in the file. Mark conflict resolved. FinishedEditingWizardPage_10=Resolve conflicts in local file with changes from incoming file. FinishedEditingWizardPage_2=&No. I could not resolve all of the conflicts. FinishedEditingWizardPage_3=What do you want to do? FinishedEditingWizardPage_4=Mark file as &conflicted and I will deal with it later. FinishedEditingWizardPage_5=Resolve the conflict by using &my version of the file. FinishedEditingWizardPage_6=Resolve the conflict by using the &incoming version of the file. FinishedEditingWizardPage_7=Resolve the conflict by using the &base version of the file. FinishedEditingWizardPage_8=Are you done resolving conflicts for this file? FinishedEditingWizardPage_9=Resolve conflicts in local file with my changes. FixTypeAction.fix=Fix Types ForceCommitSyncAction.Outgoing_Changes_Not_Added_1=Outgoing Changes Not Added ForceCommitSyncAction.You_have_chosen_to_commit_new_resources_which_have_not_been_added_to_version_control._Do_you_wish_to_add_them_to_version_control_now__2=You have chosen to commit new resources which have not been added to version control. Do you wish to add them to version control now? GenerateSVNDiff.AdvancedOptions=Advanced options GenerateSVNDiff.Browse=&Browse... GenerateSVNDiff.ConfigureOptions=Configure the options used for the SVN diff command GenerateSVNDiff.EnterFilename=Enter a valid file name or select the clipboard option GenerateSVNDiff.FileName=Fi&le name: GenerateSVNDiff.RecurseOption=&Recurse into sub-folders GenerateSVNDiff.SaveInFileSystem=Sa&ve In File System GenerateSVNDiff.SaveInWorkspace=Save In &Workspace GenerateSVNDiff.SavePatchAs==Save Patch As GenerateSVNDiff.SaveToClipboard=&Save To Clipboard GenerateSVNDiff.SelectFolderAndFilename=Select a fol&der then type in the file name: GenerateSVNDiff.error=Error running the SVN diff command GenerateSVNDiff.noDiffsFoundMsg=No differences found. GenerateSVNDiff.noDiffsFoundTitle=SVN diff GenerateSVNDiff.overwriteMsg=A file with that name already exists. Overwrite? GenerateSVNDiff.overwriteTitle=Confirm Overwrite GenerateSVNDiff.pageDescription=The results of the SVN diff command can be used as an input file for the Apply Patch wizard. GenerateSVNDiff.pageTitle=Run and save SVN diff results in a file GenerateSVNDiff.patchTxt=patch.txt GenerateSVNDiff.title=Create Patch GenerateSVNDiff.working=Running SVN diff... GenerateSVNDiff.Changes=Changes GenerateSVNDiff.validFileName=Please enter a valid Workspace file name. GenerateSVNDiff.workspaceDialogTitle=Save Patch in Workspace GenerateSVNDiff.workspaceDialogMessage=Select a folder in the Workspace and type in the patch name. OptionsPage.patchRoot=Patch Root OptionsPage.workspace=&Workspace (Multi-project Apply Patch wizard specific) OptionsPage.project=&Project OptionsPage.selection=S&election GenerateChangeLogDialog.3=Preview: GenerateChangeLogDialog.title=Generate ChangeLog GenerateChangeLogDialog.outputFormat=Output format: GenerateChangeLogDialog.svnLog=&svn log GenerateChangeLogDialog.svnLogAndPaths=svn log with &affected paths GenerateChangeLogDialog.gnu=&GNU ChangeLog GenerateChangeLogDialog.saveTo=Save to: GenerateChangeLogDialog.clipboard=&Clipboard GenerateChangeLogDialog.fileSystem=&File system GenerateChangeLogDialog.saveAs=Save ChangeLog As GenerateChangeLogDialog.changeLogTxt=changeLog.txt WorkspaceDialog.fileName=File name: WorkspaceDialog.enterFileName=Please enter a file name. WorkspaceDialog.multipleSegments=File name cannot contain multiple segments. ResourceSelectionTree.remove=Remove from View ResourceSelectionTree.SelectAll=Select &All ResourceSelectionTree.DeselectAll=&Deselect All ResourceSelectionTree.SelectUnversioned=Select Unversioned ResourceSelectionTree.DeselectUnversioned=Deselect Unversioned ResourceSelectionTree.compressedFolders=Compressed Folders ResourceSelectionTree.tree=Tree ResourceSelectionTree.flat=Flat GetSyncAction.cancelCatchup=Cancel the catch up operation. GetSyncAction.catchupAll=Catch up to all incoming changes, overriding any conflicting local changes. GetSyncAction.catchupPart=Only catch up to the changes that don't conflict with local changes. GetSyncAction.questionCatchup=You have local changes which you are about to overwrite. Should the conflicting changes be added? GetSyncAction.titleCatchup=Catch up Over Conflicts? GroupedByVersionCategory.Versions_1=Versions HistoryFilterDialog.author = &Author: HistoryFilterDialog.comment = &Comment containing: HistoryFilterDialog.fromDate = &From date (M/D/Y) : HistoryFilterDialog.matchingAll = a&ll of the provided criteria HistoryFilterDialog.matchingAny = a&ny of the provided criteria HistoryFilterDialog.showMatching = Show entries matching: HistoryFilterDialog.title = Filter Resource History HistoryFilterDialog.toDate = &To date (M/D/Y) : HistoryView.copyChangedPath=Copy... HistoryView.copyError=Copy Error HistoryView.[...]_4=[...] HistoryView.author=Author HistoryView.comment=Comment HistoryView.bugs=Bug-ID HistoryView.copy=&Copy HistoryView.date=Date HistoryView.showDifferences=Create Unified Diff HistoryView.createTagFromRevision=Create Branch/Tag from Revision {0} HistoryView.switchToRevision=Switch to Revision {0} HistoryView.overwriteOutfile=File "{0}" already exists. Do you want to overwrite it? HistoryView.revertChangesFromRevision=Revert Changes from Revision {0} HistoryView.revertChangesFromRevisions=Revert Changes from Selected Revisions HistoryView.revertRevision=Revert Revision HistoryView.revertRevisions=Revert Revisions HistoryView.confirmRevertRevision=Do you really want to revert all changes to {0} which were made in this revision? HistoryView.confirmRevertRevisions=Do you really want to revert all changes to {0} which were made in these revisions? HistoryView.confirmRevertChangedPathRevision=Do you really want to revert all changes to {0} which were made in this revision? HistoryView.confirmRevertChangedPathsRevision=Do you really want to revert all changes to these resources which were made in this revision? HistoryView.getContentsAction=&Get Contents HistoryView.getRevisionAction=Get &Revision HistoryView.linkWithLabel=Link with Editor HistoryView.getAll=Get &All HistoryView.getNext=&Next HistoryView.clearSearch=Clear history search HistoryView.search=Search history HistoryView.overwriteMsg=You have local changes. Do you want to overwrite them? HistoryView.overwriteTitle=Overwrite local changes? HistoryView.refresh=Refresh View HistoryView.refreshLabel=&Refresh View HistoryView.revision=Revision HistoryView.tags=Tags HistoryView.mergedRevisions=Merged Revisions HistoryView.selectAll=Select &All HistoryView.showComments=Show Comments HistoryView.wrapComments=Wrap Comments HistoryView.showAffectedPaths=Show Affected Paths HistoryView.stopOnCopy=&Stop on Copy/Rename HistoryView.includeMergedRevisions=Include merged revisions HistoryView.tagWithExistingAction=&Tag with Existing... HistoryView.tags=Tags HistoryView.title=SVN Resource History HistoryView.titleWithArgument=SVN Resource History ({0}) HistoryView.fetchHistoryJob=Fetching SVN revision history HistoryView.fetchChangePathJob=Fetching affected paths HistoryView.errorFetchingEntries=Error fetching entries for {0} HistoryView.generateChangeLog=Generate ChangeLog... HistoryView.setCommitProperties=&Set Commit Properties HistoryView.showMergedRevisions=Show Merged Revisions HistoryView.affectedPathsTableLayout=&Table HistoryView.affectedPathsFlatLayout=&Flat HistoryView.affectedPathsCompressedLayout=&Compressed Folders HistoryView.affectedPathsHorizontalLayout=&Horizontal Layout HistoryView.affectedPathsVerticalLayout=&Vertical Layout HistoryView.showRevisionProperties=Show R&evision Properties HistorySearchDialog.comment=&Comment HistorySearchDialog.date=Start &date HistorySearchDialog.revision=Start &revision HistorySearchDialog.endRevision=End re&vision HistorySearchDialog.startRevisionButton=Sele&ct... HistorySearchDialog.endRevisionButton=Selec&t... HistorySearchDialog.revisionSequenceErrorTitle=Start revision greater than end revision HistorySearchDialog.revisionSequenceErrorMessage=Start revision must be less than end revision HistorySearchDialog.revisionParseErrorTitle=Error parsing revision HistorySearchDialog.revisionParseErrorMessage=Revision could not be parsed HistorySearchDialog.dateParseErrorMessage=Date could not be parsed HistorySearchDialog.dateParseErrorTitle=Error parsing date HistorySearchDialog.dateSequenceErrorMessage=End date must be later than start date HistorySearchDialog.dateSequenceErrorTitle=Start date after end date HistorySearchDialog.endDateButton=Selec&t... HistorySearchDialog.fetchLogIfNeeded=Automatically &fetch logs for search period HistorySearchDialog.midDate=E&nd date HistorySearchDialog.resource=Selected resource HistorySearchDialog.regExp=&Enable special characters (* = any string, ? = any character, \\ = escape for literals) HistorySearchDialog.searchAllLogs=&Search all logs HistorySearchDialog.searchTitle=Search HistorySearchDialog.startDateButton=Se&lect... HistorySearchDialog.title=Search history HistorySearchDialog.user=&Author DateSelectionDialog.title=Select date DateSelectionDialog.january=January DateSelectionDialog.february=February DateSelectionDialog.march=March DateSelectionDialog.april=April DateSelectionDialog.may=May DateSelectionDialog.june=June DateSelectionDialog.july=July DateSelectionDialog.august=August DateSelectionDialog.september=September DateSelectionDialog.october=October DateSelectionDialog.november=November DateSelectionDialog.december=December DateSelectionDialog.monday=M DateSelectionDialog.tuesday=T DateSelectionDialog.wednesday=W DateSelectionDialog.thursday=T DateSelectionDialog.friday=F DateSelectionDialog.saturday=S DateSelectionDialog.sunday=S MarkDeletedAction.label=Mark as Deleted ImportFolderDialog.title=Import Folder ImportFolderDialog.directory=&Import directory: ImportFolderDialog.comment=&Comment: ImportFolderDialog.recurse=&Recurse through subdirectories ExportAction.export=Export ExportAction.exportTo=Export To ExportRemoteFolderAction.directoryDialogText=Export Remote Folder ExportRemoteFolderDialog.repository=Repository ExportRemoteFolderDialog.url=&URL of repository: ExportRemoteFolderDialog.directory=&Export directory: ExportRemoteFolderDialog.browse=&Browse... ExportRemoteFolderDialog.directoryError=Export directory does not exist. ExportRemoteFolderDialog.head=Export &HEAD revision ExportRemoteFolderDialog.revision=&Revision: ShowDifferencesAsUnifiedDiffDialog.branchTag=Compare with Branch/Tag ShowDifferencesAsUnifiedDiffDialog.fileToFolder=You cannot compare a file to a folder. ShowDifferencesAsUnifiedDiffDialog.file=Output file: ShowDifferencesAsUnifiedDiffDialog.browse=S&elect... ShowDifferencesAsUnifiedDiffDialog.fileBrowse=Br&owse... ShowDifferencesAsUnifiedDiffDialog.fileDialogText=Select Unified Diff Output File ShowDifferencesAsUnifiedDiffDialog.compareFrom=Compare from: ShowDifferencesAsUnifiedDiffDialog.compareTo=Compare to: ShowDifferencesAsUnifiedDiffDialog.url=&URL: ShowDifferencesAsUnifiedDiffDialog.revision=&Revision: ShowDifferencesAsUnifiedDiffDialog.toRevision=Re&vision: ShowDifferencesAsUnifiedDiffDialog.head=Compare with &HEAD Revision ShowDifferencesAsUnifiedDiffDialog.toHead=Compare with H&EAD Revision ShowDifferencesAsUnifiedDiffDialog.showLog=Se&lect... ShowDifferencesAsUnifiedDiffDialog.showToLog=Selec&t... ShowDifferencesAsUnifiedDiffDialog.swap=&Swap From and To ShowDifferencesAsUnifiedDiffDialog.path=&Path: ShowDifferencesAsUnifiedDiffDialog.graphical=&Graphical ShowDifferencesAsUnifiedDiffDialog.diff=Unified diff to output &file: DifferencesDialog.diff=&Unified diff to output file: ShowDifferencesAsUnifiedDiffDialog.compareType=Compare type: AnnotateDialog.title=Show Annotation AnnotateDialog.message=Show annotation for {0} AnnotateDialog.url=&URL: AnnotateDialog.from=From Revision: AnnotateDialog.to=To Revision: AnnotateDialog.revision=&Revision: AnnotateDialog.toRevision=Re&vision: AnnotateDialog.head=&HEAD Revision AnnotateDialog.showLog=Se&lect... AnnotateDialog.showToLog=Selec&t... AnnotateDialog.includeMerged=Include &merged revisions AnnotateDialog.ignoreMimeType=&Ignore Mime type AnnotateDialog.invalidFromRevision=Invalid from revision AnnotateDialog.invalidToRevision=Invalid to revision Icon_Overlays_24=&Icons IgnoreAction.ignore=Error Ignoring Resource IgnoreOperation.taskName=Ignore Resource IgnoreOperation.0=Ignoring {0} IgnoreResourcesDialog.addCustomEntryButton=&Custom pattern IgnoreResourcesDialog.addCustomEntryExample=The wildcard characters ''*'' and ''?'' are permitted. IgnoreResourcesDialog.addExtensionEntryButton=&Wildcard extension IgnoreResourcesDialog.addExtensionEntryExample=Examples: *.so, *.rcfile, bin IgnoreResourcesDialog.addNameEntryButton=&Resource(s) by name IgnoreResourcesDialog.addNameEntryExample=Examples: file1.so, file2.so, .rcfile, bin IgnoreResourcesDialog.patternDoesNotMatchFile=Pattern does not match all selected resources: e.g. {0} IgnoreResourcesDialog.patternMustNotBeEmpty=Pattern must not be empty. IgnoreResourcesDialog.prompt=Select what to add to the svn:ignore properties(s): IgnoreResourcesDialog.titleMany=Add {0} resources to svn:ignore IgnoreResourcesDialog.titleSingle=Add {0} to svn:ignore ListSelectionArea.deselectAll=&Deselect All ListSelectionArea.selectAll=&Select All MergeAction.saveChanges=You have unsaved changes that will be saved before the action is performed. MergeAction.saveChangesTitle=Save Changes MergeEditorInput.title=Merge {0} with {1} MergeWizard.end=Select where you want to merge the changes from MergeWizard.preparing=Preparing merge wizard MergeWizard.preparingEnd=Fetching tags for end page MergeWizard.preparingStart=Fetching tags for start page MergeWizard.start=Select the merge start point MergeWizard.title=Merge MergeWizardEndPage.branches=Branches MergeWizardEndPage.description=This is the version or branch that contains the work you would like to merge. MergeWizardEndPage.duplicateTagSelected=Cannot select {0} because it has already been selected as the start tag. MergeWizardStartPage.description=This is the version you created when you branched. ModuleSelectionPage.moduleIsProject=Use &project name as folder name ModuleSelectionPage.specifyModule=Use specified &folder name: ModulesCategory.label=Folders MoveRemoteFolderWizard.heading=Move or rename a remote resource MoveRemoteResourceWizardMainPage.invalidUrl=Invalid url MoveRemoteResourceWizardMainPage.resourceName=Resource destination name : MoveRemoteResourceWizardMainPage.selectParentUrl=Enter or select the url of destination parent folder : MoveTagAction.errorMessage=Error Tagging MoveTagAction.message=&Select the tag to be moved: MoveTagAction.title=Tag with Existing Tag NewLocationWizard.description=Add a new SVN Repository to the SVN Repositories view NewLocationWizard.exception=Unable to create repository location NewLocationWizard.heading=Add a new SVN Repository NewLocationWizard.title=Add SVN Repository NewLocationWizard.validationFailedText=Error validating location: "{0}"\n\nKeep location anyway? NewLocationWizard.validationFailedTitle=Unable to Validate CheckoutWizard.title=Checkout from SVN CheckoutWizard.head=Check out HEAD revision CheckoutWizard.revision=Revision: CheckoutWizardLocationPage.heading=Select/Create Location CheckoutWizardLocationPage.text=Select an existing repository location or create a new location. CheckoutWizardLocationPage.new=Create a new repository location CheckoutWizardLocationPage.existing=Use existing repository location: CheckoutWizardSelectionPage.heading=Select Folder CheckoutWizardSelectionPage.text=Select the folder to be checked out from SVN. CheckoutWizardCheckoutAsPage.heading=Check Out As CheckoutWizardCheckoutAsPage.text=Select the method of check out and the revision to check out. CheckoutWizardProjectPage.heading=Check Out As CheckoutWizardProjectPage.text=Select the project location. CheckoutWizardProjectPage.default=Use default workspace location CheckoutWizardProjectPage.location=Location: CheckoutWizardProjectPage.browse=Browse... CheckoutWizardProjectPage.revision=Revision to check out: CheckoutWizardCheckoutAsPage.multiple=Choose how to check out the {0} folders CheckoutWizardCheckoutAsPage.projects=Check out into the workspace as projects CheckoutWizardCheckoutAsPage.existing=Check out into an existing project CheckoutWizardCheckoutAsPage.single=Choose how to check out folder {0} CheckoutWizardCheckoutAsPage.wizard=Check out as a project configured using the New Project Wizard CheckoutWizardCheckoutAsPage.project=Check out as a project in the workspace CheckoutWizardCheckoutAsPage.projectName=Project Name: CheckoutWizardCheckoutAsPage.projectNaming=Project naming: CheckoutWizardCheckoutAsPage.namePreview=Preview: CheckoutWizardCheckoutAsPage.notAvailable=(Only available when the .project file does not exist in the repository) RelocateWizard.title=Relocate RelocateWizard.heading=Repository RelocateWizard.warning=Are you sure you want to relocate the repository? RelocateWizard.warningMessage1=The Relocate command is only used if the URL of the repository root has changed due to a server IP address change, protocol change (e.g. http:// to https://) or a change of the repository root path in the server setup. RelocateWizard.warningMessage2=This is a very infrequently used operation and applies neither if you want to move to another Subversion repository nor if you want to switch to another branch or directory within the same repository.\n\nAn improperly used Relocate command may corrupt your working copy! If you are unsure whether Relocate is the correct operation, it probably is not and you should consult Help. RelocateWizard.projects=Projects that will be relocated: RelocateWizard.newUrl=Enter new URL RelocateWizard.urlLabel=URL: RelocateWizard.newUrlLabel=New URL: NewRemoteFolderWizard.heading=Create a new remote folder NewRemoteFolderWizard.title=New remote folder NewRemoteFolderWizardMainPage.folderName=Folder name : NewRemoteFolderWizardMainPage.invalidUrl=Invalid url NewRemoteFolderWizardMainPage.selectParentUrl=Enter or select the url of parent folder : OpenActionGroup.openWith=Open Wit&h OpenLogEntryAction.deleted=The selected revision represents a deletion. It cannot be opened. OpenLogEntryAction.deletedTitle=Resource is Deleted Open_the_Synchronize_view_on_the_project_2=Open the Synchronize view on the project PendingOperationsView.description=Description PendingOperationsView.hasBeenAdded={0} has been added locally PendingOperationsView.hasBeenCopied={0} has been copied locally (from {1}) PendingOperationsView.hasBeenDeleted={0} has been deleted locally PendingOperationsView.hasBeenModified={0} has been modified locally PendingOperationsView.missing={0} is missing PendingOperationsView.infolder=In Folder PendingOperationsView.refresh=Refresh View PendingOperationsView.refreshLabel=&Refresh View PendingOperationsView.resource=Resource PendingOperationsView.showAddedResources=Show added resources PendingOperationsView.showDeletedResources=Show deleted resources PendingOperationsView.showModifiedResources=Show modified resources PendingOperationsView.titleWithArgument=Pending svn operations in {0} PendingOperationsView.computeStatusJob=Computing pending SVN operations PendingOperationsView.errorComputingStatus=Error computing pending operations RefreshRemoteProjectSelectionPage.noWorkingSet=Do not &use a working set RefreshRemoteProjectSelectionPage.pageDescription=Select the remote projects whose tags should be refreshed. RefreshRemoteProjectSelectionPage.pageTitle=Select Projects RefreshRemoteProjectSelectionPage.selectRemoteProjects=This wizard helps discover the tags associated with one or more remote projects. &Check the projects whose tags you wish to refresh. RefreshRemoteProjectSelectionPage.workingSet=Select a &working set (matching projects will be checked): RefreshTagsAction.message=Repository ''{0}'' has {1} projects to refresh. Continue? RefreshTagsAction.title=Refresh Branch and Version Tags? ReleaseCommentDialog.choosePrevious=Choose a &previously entered comment: ReleaseCommentDialog.clearTextArea=&Reset Comment ReleaseCommentDialog.deselectAll=D&eselect All ReleaseCommentDialog.enterComment=Edit the commit &comment: ReleaseCommentDialog.selectAll=&Select All ReleaseCommentDialog.title=Commit ReleaseCommentDialog.unaddedResources=Checked resources will be &added to SVN version control. RevertDialog.title=Revert RevertDialog.resources=Local changes will be removed. RevertDialog.url=URL: RevertDialog.multiple=Multiple paths selected CommitDialog.message=Enter a comment for the commit operation. CommitDialog.title=Commit CommitDialog.commitTo=Commit to: CommitDialog.commitToChangeSet=Commit Change Set: CommitDialog.tag=Warning: Your working copy appears to be on a tag path! You should first switch to a branch or the main trunk before committing. Do you wish to commit without switching? CommitDialog.doNotShowTagWarningAgain=Do not show this warning again CommitDialog.multiple=Multiple targets selected CommitDialog.noChanges=No files were changed or added since the last commit. CommitDialog.resources=Checked resources will be &committed to SVN version control. CommitDialog.status=Text Status CommitDialog.property=Property Status CommitDialog.conflicted=conflicted CommitDialog.added=added CommitDialog.unversioned=unversioned CommitDialog.deleted=deleted CommitDialog.missing=missing CommitDialog.replaced=replaced CommitDialog.modified=modified CommitDialog.propertiesModified=properties modified CommitDialog.deselectUnadded=Deselect &Unversioned CommitDialog.0={0} has not been entered. Do you wish to commit anyway? CommitDialog.1=No issue key was found in your log message. Do you wish to commit anyway? CommitDialog.2={0} has not been entered and no issue key was found in your log message. Do you wish to commit anyway? CommitDialog.number={0} must contain all numeric characters, or be left blank (commas can be used as separators). CommitDialog.keepLocks=&Keep locks CommitDialog.showCompare=&Show file content changes pane CommitDialog.includeUnversioned=Show &unversioned files CommitDialog.unselectedPropChangeChildren=If a folder delete and a folder property change are both committed,\nthen all files beneath the folder property change must also be committed. CommitDialog.parentDeleted=If a folder delete is committed, then all children of that folder must also be deleted. CommitWizard.commitResources=Commit resources CommitWizard.warningMarkers=One or more of the files being committed contain warnings. Do you want to proceed with the commit? CommitWizard.errorMarkers=One or more of the files being committed contain errors. Do you want to proceed with the commit? CommitWizard.warningQuestion=Always allow commits with warnings CommitWizard.errorQuestion=Always allow commits with errors SetCommitPropertiesDialog.title=Set Revision Properties SetCommitPropertiesDialog.revisionNumber=Set new revision comment for revision {0} SetCommitPropertiesDialog.0={0} has not been entered. Do you wish to commit anyway? SetCommitPropertiesDialog.1=No issue key was found in your log message. Do you wish to commit anyway? SetCommitPropertiesDialog.2={0} has not been entered and no issue key was found in your log message. Do you wish to commit anyway? SetCommitPropertiesDialog.user=&Author: SetCommitPropertiesDialog.noAuthor=Author has not been entered. You must enter the name of an author for this revision. SVNPromptUserPassword.authentication=Subversion Authentication browse=Browse... PasswordPromptDialog.title=Enter Username and Password PasswordPromptDialog.repository=Repository: PasswordPromptDialog.username=Username: PasswordPromptDialog.password=Password: PasswordPromptDialog.save=Save Password: Preferences_0=Unsupported Password Stores PropertyCompareInput.0=Getting PropertyCompareInput.2=Compare SVN Properties PropertyCompareLocalResourceNode.0=Working copy properties: PropertyCompareRemoteResourceNode.0=Repository properties: PropertyValueSelectionWizardPage_0=Handle Conflict PropertyValueSelectionWizardPage_1=Resource: PropertyValueSelectionWizardPage_2=Property name: PropertyValueSelectionWizardPage_3=Use &my value: PropertyValueSelectionWizardPage_4=Use &incoming value: PropertyValueSelectionWizardPage_5=Select the property value to use. Selected value can be edited. UserPromptDialog.title=Enter SVN Author Name UserPromptDialog.username=&Author Name UserPromptDialog.save=&Save author name QuestionDialog.save=Save Answer: QuestionDialog.clientCertificateFile=client certificate file: TrustSSLServerDialog.title=Accept Digital Certificate TrustSSLServerDialog.reject=Reject TrustSSLServerDialog.temporary=Accept Temporarily TrustSSLServerDialog.permanent=Accept Permanently HistoryDialog.title=Resource History CopyAction.selectionLabel=Copy To CopyAction.copy=Copy CopyAction.nameConflictTitle=Name Conflict CopyAction.nameConflictMessage=Enter a new name for ''{0}'': CopyAction.nameConflictSame=A new name must be entered. MergeDialog.fromHead=Merge from &HEAD revision MergeDialog.toHead=Merge to HEA&D revision MergeDialog.revision=&Revision: MergeDialog.toRevision=Re&vision: MergeDialog.urlError=Invalid URL: MergeDialog.dryRun=Dr&y Run MergeDialog.diff=U&nified Diff MergeDialog.mergeButton=&Merge MergeDialog.showLog=Se&lect... MergeDialog.showToLog=Selec&t... MergeDialog.showWorkingLog=Sele&ct... MergeDialog.ignoreAncestry=&Ignore ancestry MergeDialog.force=&Allow unversioned obstructions MergeDialog.text=Specify the revision range which you want to merge: MergeDialog.title=Merge MergeDialog.url=Merge changes into the current working copy which points to the URL: MergeDialog.from=From: (start URL and revision of the range to merge) MergeDialog.to=To: (end URL and revision of the range to merge) MergeDialog.useFrom=Use "&From:" URL MergeDialog.browseTo=S&elect... MergeDialog.invalidFrom=Invalid "From:" revision number. MergeDialog.invalidTo=Invalid "To:" revision number. MergeDialog.diffTitle=Create Unified Diff File MergeDialog.workingCopy=The result of the merge is stored in the working copy at: MergeDialog.repositoryUrl=which points to the repository at URL: UpdateDialog.title=Update Resources UpdateDialog.update=Update UpdateDialog.message=Update the working copy. UpdateDialog.invalid=Invalid revision number. SwitchDialog.switch=Switch SwitchDialog.title=Switch to Branch/Tag SwitchDialog.message=Update the working copy to another revision and/or location. SwitchDialog.excludeAndSwitchError=Cannot both exclude and switch a path SwitchDialog.resources=Resources: SwitchDialog.url=&To URL: SwitchDialog.revision=&Revision SwitchDialog.head=&Head Revision SwitchDialog.browse=&Select... SwitchDialog.invalid=Invalid revision number. SvnWizardCompareMultipleResourcesWithBranchTagPage.0=Compare SvnWizardCompareMultipleResourcesWithBranchTagPage.1=Compare with HEAD revision SvnWizardCompareMultipleResourcesWithBranchTagPage.8=Compare the working copy with another revision and/or location SvnWizardConfigureTagsPage.0=Multiple resources selected SvnWizardSwitchPage.0=Ignore ancestry SvnWizardSwitchPage.head=Switch to &HEAD revision SvnWizardSwitchPage.revision=&Revision: SvnDialog.depth=&Depth: SvnDialog.setDepth=Change working copy to specified &depth SvnDialog.ignoreExternals=&Ignore externals SvnDialog.force=&Allow unversioned obstructions SwitchAction.switch=Problem encountered performing switch SvnWizardUpdatePage.0=Conflict handling: SvnWizardUpdatePage.1=Text files: SvnWizardUpdatePage.10=Prompt me for each conflict and let me decide SvnWizardUpdatePage.11=Mark conflicts, let me resolve them later SvnWizardUpdatePage.2=Prompt me for each conflict and let me decide SvnWizardUpdatePage.3=Mark conflicts, let me resolve them later SvnWizardUpdatePage.4=Binary files: SvnWizardUpdatePage.5=Prompt me for each conflict and let me decide SvnWizardUpdatePage.6=Mark conflicts, let me resolve them later SvnWizardUpdatePage.7=Resolve the conflict by using my version of the file SvnWizardUpdatePage.8=Resolve the conflict by using the incoming version of the file SvnWizardUpdatePage.9=Property conflicts: SvnWizardUpdatePage.head=Update to &HEAD revision SvnWizardUpdatePage.revision=&Revision: MergeAction.merge=Problem encountered performing merge LoadErrorDialog_0=Subversion Native Library Not Available LoadErrorDialog_1=Subclipse talks to Subversion via a Java API that requires access to native libraries. Those libraries were either not found or an incompatible version was loaded. The errors are displayed below. LoadErrorDialog_2=Information on getting a proper version installed and visible to Eclipse is available here: LoadErrorDialog_4=Errors: LockDialog.enterComment=Enter comment: LockDialog.stealLock=&Steal lock LockDialog.title=Lock LockDialog.message=Enter a comment for the lock operation. LockDialog.resources=These resources will be locked. RemoteResourcePropertiesDialog.title=Properties RemoteResourcePropertiesDialog.info=Information: RemoteResourcePropertiesDialog.url=URL: RemoteResourcePropertiesDialog.author=Last changed author: RemoteResourcePropertiesDialog.revision=Last changed revision: RemoteResourcePropertiesDialog.date=Last changed date: RemoteResourcePropertiesDialog.lockOwner=Lock owner: RemoteResourcePropertiesDialog.lockCreated=Lock created: RemoteResourcePropertiesDialog.lockComment=Lock comment: RemoteResourcePropertiesDialog.properties=Properties: RemoteResourcePropertiesDialog.property=Property RemoteResourcePropertiesDialog.value=Value NewRepositoryDialog.title=Create SVN Repository NewRepositoryDialog.message=Create a new SVN Repository NewRepositoryDialog.folder=Create repository in folder: NewRepositoryDialog.connection=Create connection to new repository NewRepositoryDialog.alreadyExists=The specified repository location already exists. NewRepositoryDialog.browse=Browse... NewRepositoryDialog.browseTitle=Create Repository in Folder NewRepositoryDialog.browseMessage=Select the folder in which to create the repository. BranchTagWizardRepositoryPage.heading=Repository Location BranchTagWizardRepositoryPage.message=Enter or select the target URL for the copy. BranchTagWizardCopyPage.0=Path BranchTagWizardCopyPage.1=URL BranchTagWizardCopyPage.2=Revision BranchTagWizardCopyPage.3=Fixed at Revision BranchTagWizardCopyPage.5=Set explicit revision for these externals: BranchTagWizardCopyPage.6=Select All BranchTagWizardCopyPage.7=Deselect All BranchTagWizardCopyPage.8=svn:externals BranchTagWizardCopyPage.heading=Copy Revision BranchTagWizardCopyPage.message=Enter or select the revision to be copied. BranchTagWizardCommentPage.heading=Branch/Tag Comment BranchTagWizardCommentPage.message=Enter the branch/tag comment. BranchTagDialog.title=Create Branch/Tag BranchTagDialog.message=Create a branch/tag based on workspace or repository version. BranchTagDialog.makeParents=Create any intermediate folders that are &missing BranchTagDialog.sameStructure=&Preserve folder structure (may require multiple commits) BranchTagDialog.createCopy=Create copy in the repository from: BranchTagDialog.head=&HEAD revision in the repository BranchTagDialog.revision=&Specific revision in the repository BranchTagDialog.working=&Working copy BranchTagDialog.0={0} has not been entered. Do you wish to copy (branch/tag) anyway? BranchTagDialog.1=No issue key was found in your log message. Do you wish to copy (branch/tag) anyway? BranchTagDialog.2={0} has not been entered and no issue key was found in your log message. Do you wish to copy (branch/tag) anyway? BranchTagDialog.enterComment=Edit the branch/tag &comment: BranchTagDialog.repository=Repository BranchTagDialog.url=&From WC at URL: BranchTagDialog.fromUrl=&From URL: BranchTagDialog.toUrl=Copy &to URL: BranchTagDialog.server=Create the branch/tag directly on the server BranchTagDialog.switchAfterTagBranch=Sw&itch working copy to new branch/tag BranchTagDialog.resources=Resources: BranchTagDialog.alreadyExists=''{0}'' already exists. BranchTagAction.branch=Problem encountered performing branch/tag ChooseUrlDialog.title=Repository Browser ChooseUrlDialog.refresh=Refresh ChooseUrlDialog.delete=Delete... ChooseUrlDialog.branches=Branches ChooseUrlDialog.tags=Tags BranchTagPropertyUpdateDialog.title=Update Branch/Tag Property BranchTagPropertyUpdateDialog.text=The folder you are copying contains the subclipse:tags property. Confirm the information that\nwill be added to the property and click OK to update the property.\n\nNOTE: The property change will need to be committed after the copy operation completes. ConfigureTagsDialog.title=Configure Branches/Tags ConfigureTagsDialog.url=&URL: ConfigureTagsDialog.text=Right-click on one or more folders to add the branch/tag to the configuration. ConfigureTagsDialog.revision=&Revision: ConfigureTagsDialog.name=&Name: ConfigureTagsDialog.path=Relative &path: ConfigureTagsDialog.branch=Bran&ch ConfigureTagsDialog.apply=&Apply ConfigureTagsDialog.delete=&Delete ConfigureTagsDialog.add=Add ConfigureTagsDialog.addTag=Add Tag ConfigureTagsDialog.addBranch=Add Branch ConfigureTagsDialog.loadTagsMessage=Select the folders for which you wish to create tags. Use Shift-click or Ctrl-click to select multiple. ConfigureTagsDialog.loadBranchesMessage=Select the folders for which you wish to create branches. Use Shift-click or Ctrl-click to select multiple. ConfigureTagsDialog.browse=&Select... ConfigureTagsDialog.newBranch=New Branch ConfigureTagsDialog.newTag=New Tag ConfigureTagsDialog.branchHeader=Branch: ConfigureTagsDialog.tagHeader=Tag: ConfigureTagsDialog.confirmExit=Are you sure you want to exit without updating? ConfigureTagsDialog.pendingUpdate=You have made changes to the previously selected branch or tag. Do you wish to apply these changes? ConflictHandlingWizardPage_0=Handle Conflict ConflictHandlingWizardPage_1=Resource: ConflictHandlingWizardPage_10=&Review conflicting property values and decide which to use. ConflictHandlingWizardPage_11=Launch a &graphical conflict resolution editor. ConflictHandlingWizardPage_12=&Apply to all property conflicts ConflictHandlingWizardPage_13=&Apply to all binary conflicts ConflictHandlingWizardPage_14=&Apply to all text conflicts ConflictHandlingWizardPage_15=\ for resource ConflictHandlingWizardPage_16=Resolve conflicts in local file with my changes. ConflictHandlingWizardPage_17=Resolve conflicts in local file with changes from incoming file. ConflictHandlingWizardPage_2=Resource: ConflictHandlingWizardPage_3=What do you want to do? ConflictHandlingWizardPage_4=Mark as &conflicted. I will deal with it later. ConflictHandlingWizardPage_5=Resolve the conflict by using &my version of the property. ConflictHandlingWizardPage_6=Resolve the conflict by using &my version of the file. ConflictHandlingWizardPage_7=Resolve the conflict by using the &incoming version of the property. ConflictHandlingWizardPage_8=Resolve the conflict by using the &incoming version of the file. ConflictHandlingWizardPage_9=Let me &edit the file with conflict markers inserted. ConflictWizardDialog_0=No ConflictWizardDialog_1=Yes ConflictWizardDialog_2=OK RemoteFileEditorInput.3=Failed to create temporary file to open with external editor: RemoteFileEditorInput.4=Failed to get file contents: RemoteFileEditorInput.fullPathAndRevision={0} {1} RemoteFolderElement.nameAndTag={0} {1} RemoteRootAction.Projects_in_the_local_workspace_are_shared_with__2=Projects in the local workspace are shared with {0}. This location cannot be discarded until all local projects are disconnected from it. RemoteRootAction.The_projects_that_are_shared_with_the_above_repository_are__4=The projects that are shared with the above repository are: RemoteRootAction.Unable_to_Discard_Location_1=Unable to Discard Location RemoteRootAction.label=Discard location RemoteViewPart.workingSetToolTip=Working Set: {0} RemoveRootAction.removeRoot=Error Discarding Location RemoveRootAction.removeRoot_3=RemoveRootAction.removeRoot ReplaceWithAction.calculatingDirtyResources=Finding outgoing changes... ReplaceWithAction.confirmOverwrite=Confirm Overwrite ReplaceWithAction.localChanges={0} has local changes which you are about to overwrite. Do you wish to overwrite? ReplaceWithLatestAction.multipleBranches=&Latest from Branches ReplaceWithLatestAction.multipleTags=&Latest from Repository ReplaceWithLatestAction.multipleVersions=&Versions from Repository ReplaceWithLatestAction.singleBranch=&Latest from Branch {0} ReplaceWithLatestAction.singleHEAD=&Latest from {0} ReplaceWithLatestAction.singleVersion=&Version {0} ReplaceWithRemoteAction.problemMessage=Error Replacing With Latest From Repository ReplaceWithRemoteAction.replacing=Replacing ReplaceWithRevisionAction.replace=&Replace ReplaceWithRevisionAction.title=Replace With Revision ReplaceWithTagAction.message=Replace with Branch or Version ReplaceWithTagAction.mixingTags=You are mixing tags within a project. This may cause confusion \n when synchronizing with the repository. Synchronize uses the tag information associated with \n each resource to determine the remote resource with which the local resource is compared. \n For example, with version tags, the state of the tagged resources never change so you will \n not see changes made to the resources in HEAD (or other branches). Do you wish to continue? ReplaceWithTagAction.replace=Error Replacing With Tag ReplaceWithTagAction.replacing=Replacing with tag {0} RepositoriesView.CannotGetRevision=Cannot get revision RepositoriesView.NItemsSelected={0} items selected RepositoriesView.OneItemSelected=1 item selected RepositoriesView.ResourceInRepository={0} in {1} RepositoriesView.collapseAll=Collapse All RepositoriesView.collapseAllTooltip=Collapse All RepositoriesView.deselectWorkingSet=Deselect Working Set RepositoriesView.editWorkingSet=Edit Active Working Set... RepositoriesView.new=&Repository Location... RepositoriesView.newAnonSVN=&Anonymous Repository Location to dev.eclipse.org... RepositoriesView.newSubmenu=&New RepositoriesView.newRepository=New repository... RepositoriesView.newWorkingSet=Select Working Set... RepositoriesView.refresh=&Refresh View RepositoriesView.refreshTooltip=Refresh View RepositoriesView.refreshPopup=Refresh RepositoriesView.workingSetMenuItem={0} {1} RepositoriesViewContentHandler.errorCreatingRoot=An error occurred trying to create repository ''{0}''. RepositoriesViewContentHandler.missingAttribute=Required attribute ''{1}'' missing from tag ''{0}'' while reading repositories View configuration file. RepositoriesViewContentHandler.unmatchedTag=No matching end tag found for tag ''{0}'' while reading repositories View configuration file. RepositoryDialog.description=Select a repository to connect your project to RepositoryDialog.getRepository=Select a repository RepositoryManager.addErrorNotAssociated=Some of the resources are not associated with a shared project RepositoryManager.adding=Adding RepositoryManager.committing=Committing RepositoryManager.deleting=Deleting RepositoryManager.getting=Getting RepositoryManager.ioException=An IO Exception occurred while reading the state file RepositoryManager.parsingProblem=An error occurred parsing file ''{0}''. RepositoryManager.rename=An IO Exception occurred while renaming the state file RepositoryManager.save=An IO Exception occurred while saving the state file RepositoryManager.updating=Updating RepositoryRoot.folderInfoMissing=Local folder ''{0}'' is not properly mapped to a remote folder. SVNFoldersExistWarningPage.description=This project appears to contain Subversion metadata folders. If you continue, those folders will be deleted, and the Subversion information will be lost. In order for Subclipse to automatically reconnect a project to a repository, the project root folder needs to contain a Subversion metadata folder. Most likely it doesn't, or you would not see this message. SVNFoldersExistWarningPage.continue=&Continue and have Subclipse just remove those folders for you SVNFoldersExistWarningPage.folders=SVN metadata folders RepositorySelectionPage.description=This wizard will help you to share your files with the SVN repository for the first time. Your project will automatically be imported into the SVN repository, and the Commit dialog will open to allow you to commit your resources. RepositorySelectionPage.useExisting=Use &existing repository location: RepositorySelectionPage.useNew=&Create a new repository location ResourcePropertiesPage.checkedIn=Checked In ResourcePropertiesPage.checkedOut=Checked Out ResourcePropertiesPage.error=Error ResourcePropertiesPage.notManaged=Not managed by SVN ResourcePropertiesPage.notVersioned=not versioned ResourcePropertiesPage.state=State ResourcePropertiesPage.status=Status ResourcePropertiesPage.versioned=versioned RestoreFromRepositoryAction.noFilesMessage=There were no deleted files found on the repository in folder ''{0}''. RestoreFromRepositoryAction.noFilesTitle=No Deleted Files Found RestoreFromRepositoryFileSelectionPage.emptyRevisionPane=Remote revisions of selected file: RestoreFromRepositoryFileSelectionPage.fileContentPaneTitle={0} {1} in ''{2}'' RestoreFromRepositoryFileSelectionPage.fileExists=File ''{0}'' already exists locally. RestoreFromRepositoryFileSelectionPage.fileSelectionPaneTitle={0} - Select file to be restored: RestoreFromRepositoryFileSelectionPage.fileToRestore={0} ({1} to be restored) RestoreFromRepositoryFileSelectionPage.revisionSelectionPaneTitle={0} - Check revision to be restored: RestoreFromRepositoryWizard.fileSelectionPageDescription=Select the revision of each file that should be restored. RestoreFromRepositoryWizard.fileSelectionPageTitle=Restore from Repository Run_update_4=Run update S&how_is_added_27=Indi&cate is added SVNAction.disabledMessage=The chosen operation is not enabled. SVNAction.disabledTitle=Information SVNAction.errorTitle=Errors occurred SVNAction.mixingTags=You are mixing tags within a project. Beware that synchronization uses the tag information associated with each resource to determine the remote resource with which the local resource is compared. \n\nThis means that the part(s) of your project that you are replacing with another tag will be synchronized with the tag ''{0}'' while other resources in the project will be synchronized with another tag. \n\nDo you wish to continue? SVNAction.mixingTagsTitle=Confirm Mixing Tags SVNAction.multipleProblemsMessage=Multiple problems occurred: SVNAction.refreshMultipleQuestion={0} Would you like to refresh the projects of the selected resources? SVNAction.refreshQuestion={0} Would you like to refresh project ''{1}''? SVNAction.refreshTitle=Refresh Project? SVNAction.warningTitle=Warnings occurred SVNAddResolutionGenerator.Add_Resource_and_Children_to_SVN_2=Add Resource and Children to SVN SVNAddResolutionGenerator.Add_Resource_to_SVN_1=Add Resource to SVN SVNAddResolutionGenerator.Add_to_.svnignore_3=Add to .svnSVNignore SVNCatchupReleaseViewer.No_workspace_file_1=No workspace file SVNCatchupReleaseViewer.Select_&Outgoing_Additions_1=Select New Reso&urces SVNCatchupReleaseViewer.addAction=&Add to Version Control SVNCatchupReleaseViewer.commit=&Commit... SVNCatchupReleaseViewer.commonFile=Common file: {0} SVNCatchupReleaseViewer.commonFileRevision=Common file: {0} {1} SVNCatchupReleaseViewer.confirmMerge=Mark as Mer&ged SVNCatchupReleaseViewer.fileDecoration={0} ({1}) SVNCatchupReleaseViewer.folderDecoration={0} {1} SVNCatchupReleaseViewer.forceCommit=Override and Co&mmit... SVNCatchupReleaseViewer.forceUpdate=Override and U&pdate SVNCatchupReleaseViewer.ignore=A&dd to svn:ignore SVNCatchupReleaseViewer.labelWithSyncKind={0} {1} SVNCatchupReleaseViewer.mergeUpdate=&Merge Changes into Local Copy SVNCatchupReleaseViewer.noCommonFile=No common file SVNCatchupReleaseViewer.noRepositoryFile=No repository file SVNCatchupReleaseViewer.repositoryFile=Repository file: {0} SVNCatchupReleaseViewer.repositoryFileRevision=Repository file: {0} {1} [{2}] SVNCatchupReleaseViewer.showInHistory=Show in &Resource History SVNCatchupReleaseViewer.update=&Update from Repository SVNCatchupReleaseViewer.workspaceFile=Workspace file: {0} SVNCompareEditorInput.branchLabel= SVNCompareEditorInput.comparing=Comparing... SVNCompareEditorInput.different=Cannot compare resources of different kind. SVNCompareEditorInput.headLabel= SVNCompareEditorInput.inBranch={0} in {1} SVNCompareEditorInput.inHead={0} in HEAD SVNCompareEditorInput.noRepositoryFile=No repository file SVNCompareEditorInput.noWorkspaceFile=No workspace file SVNCompareEditorInput.repository=Repository: {0} {1} SVNCompareEditorInput.titleAncestor=Compare {0} {1}-{2} and {3} SVNCompareEditorInput.titleNoAncestor=Compare {0} {1} and {2} SVNCompareEditorInput.titleNoAncestorDifferent=Compare {0} {1} and {2} {3} SVNCompareEditorInput.workspace=Workspace: {0} SVNCompareEditorInput.workspaceLabel= SVNCompareRevisionsInput.addToWorkspace=Get SVNCompareRevisionsInput.compareResourceAndVersions=Compare {0} and versions SVNCompareRevisionsInput.errorReplacingMessage=Resource(s) could not be loaded. A communication error may have occurred, or \n the resource(s) may not exist on the server, or you may \n not have permission to access them. SVNCompareRevisionsInput.errorReplacingTitle=Unable to Replace SVNCompareRevisionsInput.repository=Repository file: {0} SVNCompareRevisionsInput.structureCompare=Structure Compare SVNCompareRevisionsInput.truncate={0}[...] SVNCompareRevisionsInput.workspace=Workspace file: {0} SVNDecorator.fileDecorationNoTag={0} [{1}] SVNDecorator.fileDecorationWithTag={0} [{1}:{2}] SVNDecorator.folderDecoration={0} [{1}] SVNDecorator.projectDecoration={0} [{1}] SVNDecorator.projectDecorationWithTag={0} [{1} {2}] SVNDecoratorPreferencesPage.0=Date Format: SVNDecoratorPreferencesPage.AddVariables=Add Variables SVNDecoratorPreferencesPage.addVariables=Add &Variables... SVNDecoratorPreferencesPage.authorVariable=name of the author SVNDecoratorPreferencesPage.computeDeep=&Compute deep outgoing state for folders (disabling this will improve decorator performance) SVNDecoratorPreferencesPage.useFontDecorators=&Enable font and color decorations (disabling this will improve decorator performance) SVNDecoratorPreferencesPage.dateVariable=last changed SVNDecoratorPreferencesPage.description=SVN Decorator settings: SVNDecoratorPreferencesPage.preview=Preview: SVNDecoratorPreferencesPage.fileFormat=&File Format: SVNDecoratorPreferencesPage.flagAddedVariable=flag indicating that the resource has been added to the server SVNDecoratorPreferencesPage.flagDirtyVariable=flag indicating that the resource has outgoing changes SVNDecoratorPreferencesPage.flagExternalVariable=flag indicating that the folder is external SVNDecoratorPreferencesPage.folderFormat=F&older Format: SVNDecoratorPreferencesPage.generalDescription=Set general properties of SVN decorators: SVNDecoratorPreferencesPage.labelDecorationsLink=See ''{0}'' to enable SVN decorations. SVNDecoratorPreferencesPage.colorsAndFontsLink=See ''{0}'' to configure the font and color decorations. SVNDecoratorPreferencesPage.generalTabFolder=&General SVNDecoratorPreferencesPage.iconDescription=Choose which SVN resource states should be indicated using an icon decorator: SVNDecoratorPreferencesPage.labelDecorationAdded=Label decora&tion for added: SVNDecoratorPreferencesPage.labelDecorationOutgoing=&Label decoration for outgoing: SVNDecoratorPreferencesPage.labelDecorationExternal=Label decoration for &external: SVNDecoratorPreferencesPage.nameResourceVariable=name of the resource being decorated SVNDecoratorPreferencesPage.externalResources=Indicate is &external resource SVNDecoratorPreferencesPage.newResources=Indicate is &new resource SVNDecoratorPreferencesPage.projectFormat=&Project Format: SVNDecoratorPreferencesPage.remoteLocationVariable=url of remote repository SVNDecoratorPreferencesPage.remoteLocationVariableShort=path relative to repository root url SVNDecoratorPreferencesPage.remoteLocationLabel=remote repository label SVNDecoratorPreferencesPage.revisionResourceVariable=last revision loaded into workspace SVNDecoratorPreferencesPage.selectFormats=Select the format for file, folders, and project text labels: SVNDecoratorPreferencesPage.selectVariablesToAdd=Select the &variables to add to the decoration format: SVNDecoratorPreferencesPage.showSyncInfoInLabel=Show all synchronization information in a resource's text label SVNDecoratorPreferencesPage.synchronizeDescription=Set the properties of SVN decorators for the Synchronize view: SVNDecoratorPreferencesPage.synchronizeTabFolder=S&ynchronize View SVNDecoratorPreferencesPage.textLabel=T&ext SVNFilePropertiesPage.baseRevision=Base revision: SVNFilePropertiesPage.baseTimestamp=Base timestamp: SVNFilePropertiesPage.date={0} (Date) SVNFilePropertiesPage.dirty=Dirty: SVNFilePropertiesPage.error=An error occurred while creating this page. SVNFilePropertiesPage.ignored=The file is ignored by SVN. SVNFilePropertiesPage.isAdded=This file has been added to SVN control but has not been committed SVNFilePropertiesPage.modified=Modified: SVNFilePropertiesPage.none=(none) SVNFilePropertiesPage.notAvailable=Not Available SVNFilePropertiesPage.notManaged=The file is not managed by SVN. SVNFilePropertiesPage.permissions=Permissions: SVNFilePropertiesPage.version={0} (Version) SVNFolderPropertiesPage.disconnect=&Disconnect... SVNFolderPropertiesPage.disconnectQuestion=Disconnecting the folder from SVN control will delete the SVN synchronization information for the folder. Are you sure you want to disconnect? SVNFolderPropertiesPage.disconnectTitle=Disconnect folder? SVNFolderPropertiesPage.ignored=The folder is ignored by SVN. SVNFolderPropertiesPage.notManaged=The folder is not managed by SVN. SVNFolderPropertiesPage.repository=Repository path: SVNFolderPropertiesPage.root=Repository root: SVNFolderPropertiesPage.static=Static: SVNLocalBaseCompareInput.0=Compare and SVNLocalBaseCompareInput.1=Workspace SVNLocalCompareEditorInput.title=SVN Compare [{0}] SVNOperationCancelledException.operationCancelled=Operation Cancelled SVNPreferencePage.&Never_2=&Never SVNPreferencePage.&Prompt_3=P&rompt SVNPreferencePage.Auto-&save_4=&Auto-save SVNPreferencePage.Save_dirty_editors_before_SVN_operations_1=Save dirty editors before SVN operations SVNPreferencePage.calculateDeepDecoration=Calculate Deep SVN Decorators (slow) SVNPreferencePage.commandLineNotAvailable=Command line interface is not available. Check your environment. SVNPreferencePage.compressionLevel=Compression &level: SVNPreferencePage.considerContentsInCompare=Con&sider file contents in comparisons SVNPreferencePage.defaultTextKSubst=Default &keyword substitution: SVNPreferencePage.description=General SVN settings: SVNPreferencePage.determineVersionEnabled=&Validate server version compatibility on first connection SVNPreferencePage.javahlNotAvailable=JavaHL interface is not available. Check your environment. SVNPreferencePage.javaSvnNotAvailable=SVNKit interface is not available. Check your environment. SVNPreferencePage.level0=0 (disabled) SVNPreferencePage.level1=1 (lowest compression) SVNPreferencePage.level2=2 SVNPreferencePage.level3=3 SVNPreferencePage.level4=4 SVNPreferencePage.level5=5 SVNPreferencePage.level6=6 SVNPreferencePage.level7=7 SVNPreferencePage.level8=8 SVNPreferencePage.level9=9 (highest compression) SVNPreferencePage.notquiet=Verbose SVNPreferencePage.pruneEmptyDirectories=&Prune empty directories SVNPreferencePage.quietness=&Quietness level: SVNPreferencePage.reallyquiet=Very quiet SVNPreferencePage.replaceUnmanaged=&Delete unmanaged resources on replace SVNPreferencePage.repositoriesAreBinary=&Treat all new files as binary SVNPreferencePage.showAddRemoveMarkers=Show deleted file &markers SVNPreferencePage.showCompareMergeInSync=Show revision &comparisons in a dialog SVNPreferencePage.fetchChangePathOnDemand=&Fetch affected paths on demand SVNPreferencePage.showTags=Show &tags in remote history view SVNPreferencePage.showOutOfDateFolders=Show &out of date folders SVNPreferencePage.useJavaHLCommitHack=JavaHL: Commit across &multiple projects atomically SVNPreferencePage.shareNestedProjects=Automatically share nested projects SVNPreferencePage.warnOnCommitToTagPath=Show warning message before committing to tag path SVNPreferencePage.logEntriesToFetch=Default number of &log messages (0=Get All) SVNPreferencePage.showUnadded=Show unversioned resources on commit SVNPreferencePage.selectUnadded=Select &unversioned resources on commit SVNPreferencePage.removeOnReplace=&Remove unversioned resource on replace SVNPreferencePage.silentWarningMessage= In "Very Quiet" mode, some SVN servers may not communicate important information about errors that have occurred. You may want to consider using "Somewhat quiet" mode instead. SVNPreferencePage.silentWarningTitle="Very Quiet" mode is dangerous SVNPreferencePage.somewhatquiet=Somewhat quiet SVNPreferencePage.svnClientInterface=SVN interface: SVNPreferencePage.svncommandline=SVN command line SVNPreferencePage.client=Cl&ient: SVNPreferencePage.svnjavahl=JavaHL (JNI) SVNPreferencePage.javasvn=SVNKit (Pure Java) SVNPreferencePage.timeoutValue=&Communication timeout (in seconds): SVNPreferencesPage.0=Ignore changes to hidden resources SVNPreferencesPage.1=Ignore managed derived resources SVNPreferencesPage.Timeout_must_be_a_number_2=Timeout must be a number SVNPreferencesPage.Timeout_must_not_be_negative_1=Timeout must not be negative SVNPreferencePage.configurationLocation=Configuration location : SVNPreferencePage.useDefaultConfigLocation=Use d&efault config location SVNPreferencePage.useDirectoryConfig=Use director&y : SVNPreferencePage.browseDirectory=&Browse... SVNPreferencePage.svnConfigDirDoesNotExist=Svn config directory does not exist. SVNPreferencePage.isNotSvnConfigDir=Selected directory is not a svn config dir SVNPreferencePage.useQuickdiffAnnotateGroup=Use Quick Diff annotate mode for local file annotations SVNPreferencePage.commitWithWarnings=Commit resources with warnings SVNPreferencePage.commitWithErrors=Commit resources with errors SVNProjectPropertiesPage.Change_Sharing_5=&Change Sharing... SVNProjectPropertiesPage.Select_a_Repository_1=Select a Repository SVNProjectPropertiesPage.Select_a_SVN_repository_location_to_share_the_project_with__2=Select a compatible SVN repository location to share the project with: SVNProjectPropertiesPage.You_can_change_the_sharing_of_this_project_to_another_repository_location._However,_this_is_only_possible_if_the_new_location_is___compatible___(on_the_same_host_with_the_same_repository_path)._1=You can change the sharing of this project to another repository location. However, this is only possible if the new location is \"compatible\" (on the same host with the same repository path). SVNProjectPropertiesPage.clearReadOnly=Setting all files writable SVNProjectPropertiesPage.configureForWatchEdit=Enable watch/edit for this project SVNProjectPropertiesPage.connectionType=Connection type: SVNProjectPropertiesPage.fetchAbsentDirectoriesOnUpdate=&Fetch absent or new directories when updating SVNProjectPropertiesPage.progressTaskName=Updating project's SVN properties SVNProjectPropertiesPage.setReadOnly=Setting all files read-only SVNProjectPropertiesPage.user=User: SVNProjectSetSerializer.Confirm_Overwrite_Project_8=Confirm Overwrite Project SVNProjectSetSerializer.The_project_{0}_already_exists._Do_you_wish_to_overwrite_it__9=The project {0} already exists. Do you wish to overwrite it? SVNPropertiesPage.connectionType=&Connection type: SVNPropertiesPage.defaultPort=Default SVNPropertiesPage.host=Host: SVNPropertiesPage.module=Folder: SVNPropertiesPage.password=&Password: SVNPropertiesPage.path=Repository path: SVNPropertiesPage.update=Change &Tag... SVNPropertiesPage.user=&User: SVNPropertiesPage.virtualModule= SVNPropertyDeleteAction.confirmMultiple=Are you sure you want to delete these {0} properties ? SVNPropertyDeleteAction.confirmSingle=Are you sure you want to delete property ''{0}'' ? SVNPropertyDeleteAction.delete=Problem encountered while deleting property SVNPropertyDeleteAction.title=Confirm property delete SVNPropertyDeleteAction.recurse=Delete property &recursively SVNPropertyModifyAction.modify=Problem encountered while setting property SVNRefreshRemoteProjectWizard.title=Refresh Branches SVNRemoteFilePropertySource.author=Author SVNRemoteFilePropertySource.comment=Comment SVNRemoteFilePropertySource.date=Date SVNRemoteFilePropertySource.name=Name SVNRemoteFilePropertySource.revision=Revision SVNRemoteFilePropertySource.lock=Lock SVNRemoteFilePropertySource.lock.owner=Owner SVNRemoteFilePropertySource.lock.token=Token SVNRemoteFilePropertySource.lock.comment=Comment SVNRemoteFilePropertySource.lock.creation.date=Creation date SVNRemoteFilePropertySource.lock.expiration.date=Expiration date SVNRemoteFolderPropertySource.name=Name SVNRemoteFolderPropertySource.none=(none) SVNRemoveResloutionGenerator.Commit_Deletion_to_SVN_1=Commit Deletion to SVN SVNRemoveResloutionGenerator.No_local_history_available._Try_undoing_from_the_server_3=No local history available. Try undoing from the server SVNRemoveResloutionGenerator.Undo_Deletion_from_Local_History_2=Undo Deletion from Local History SVNRemoveResloutionGenerator.Undo_Deletion_from_SVN_Server_4=Undo Deletion from SVN Server SVNRemoveResolutionGenerator.Commit_Deletion_to_SVN_1=Commit Deletion to SVN SVNRemoveResolutionGenerator.No_local_history_available._Try_undoing_from_the_server_3=No local history available. Try undoing from the server SVNRemoveResolutionGenerator.Undo_Deletion_from_Local_History_2=Undo Deletion from Local History SVNRemoveResolutionGenerator.Undo_Deletion_from_SVN_Server_4=Undo Deletion from SVN Server SVNRepositoryLocationPropertySource.default=Default SVNRepositoryLocationPropertySource.host=Host SVNRepositoryLocationPropertySource.method=Connection Method SVNRepositoryLocationPropertySource.root=Root SVNRepositoryLocationPropertySource.user=User SVNRepositoryPropertiesPage.Confirm_Project_Sharing_Changes_1=Confirm Project Sharing Changes SVNRepositoryPropertiesPage.There_are_projects_in_the_workspace_shared_with_this_repository_2=There are projects in the workspace shared with this repository. The projects will be updated with the new information that you have entered SVNRepositoryPropertiesPage.sharedProject=The projects that are shared with {0} are: SVNRepositoryPropertiesPage.useCustomLabel=Use a custom &label: SVNRepositoryPropertiesPage.useDefaultProgramName=Expect the &default program name "SVN" in text message prefixes from this server SVNRepositoryPropertiesPage.useLocationAsLabel=Use the &repository identification string as the label SVNRepositoryPropertiesPage.useProgramName=Expect a custom &program name: SVNSyncCompareInput.confirmMergeMessage=Your changes have been saved. When you are finished, \n select 'Mark as Merged' to make this file an outgoing change. SVNSyncCompareInput.confirmMergeMessageTitle=Information SVNSyncCompareInput.filteringOutgoingChanges=Accumulating resources with outgoing changes SVNSyncCompareInput.projectDeleted=Project ''{0}'' has been deleted locally and cannot be synchronized. SVNSyncSet.conflicts={0} conflicts, SVNSyncSet.incomings={0} incoming change(s), SVNSyncSet.new={0} new resource(s). SVNSyncSet.noConflicts=No conflicts, SVNSyncSet.noIncomings=no incoming changes, SVNSyncSet.noNew=no new resources. SVNSyncSet.noOutgoings=no outgoing changes, SVNSyncSet.outgoings={0} outgoing change(s), SVNUIPlugin.refreshMultipleQuestion={0} Would you like to refresh the selected resources? SVNUIPlugin.refreshQuestion={0} Would you like to refresh resource ''{1}''? SVNUIPlugin.refreshTitle=Refresh Resource? SVNWorkingSetFolderSelectionPage.duplicateWorkingSetName=A working set of the specific name already exists. SVNWorkingSetFolderSelectionPage.invalidWorkingSetName=The name must contain only letters and digits. SVNWorkingSetFolderSelectionPage.mustSelectFolder=At least one folder must be checked. SVNWorkingSetFolderSelectionPage.name=&Working set name: SVNWorkingSetFolderSelectionPage.projectSelectionPageDescription=Enter a working set name and select the working set folders. SVNWorkingSetFolderSelectionPage.projectSelectionPageTitle=SVN Working Set SVNWorkingSetFolderSelectionPage.refresh=&Refresh Contents SVNWorkingSetFolderSelectionPage.treeLabel=Working &set contents: SetSvnPropertyAction.set=Problem encountered while setting property SetSvnPropertyDialog.anotherPropertyHasSameName=Another property has the same name SetSvnPropertyDialog.browse=&Browse... SetSvnPropertyDialog.enterTextProperty=&Enter a text property SetSvnPropertyDialog.fileDoesNotExist=Selected file does not exist SetSvnPropertyDialog.propertyContent=Property content SetSvnPropertyDialog.propertyName=&Property name : SetSvnPropertyDialog.setPropertyRecursively=&Set property recursively SetSvnPropertyDialog.title=Set Property SetSvnPropertyDialog.message=Set a svn property. SetSvnPropertyDialog.useFile=Use a &file SetSvnPropertyDialog.boolean=Property value must be true or false SetSvnPropertyDialog.number=Property value must be numeric SetSvnPropertyDialog.url=Property value must be a valid URL SetSvnPropertyDialog.recurseRequired=Property is not valid for folders. Select 'Set property recursively' to apply the property to all child files. SharingWizard.initialImport=Initial import. SharingWizard.autoConnectOneOTitle=Connect Project from Eclipse 1.0 to Repository SharingWizard.autoConnectTitle=Connect Project to Repository SharingWizard.autoConnectTitleDescription=Project is already configured with SVN repository information. SharingWizard.couldNotImport=Remote Project Exists SharingWizard.couldNotImportLong=Warning: The specified folder already exists in the repository. If you continue, that folder will be checked out to your local workspace and your project will be connected to this existing location. Do you want to continue? SharingWizard.description=Configure a Project to Use SVN SharingWizard.enterInformation=Enter Repository Location Information SharingWizard.svnFolderExists=Warning: Project contains Subversion metadata folders. SharingWizard.enterInformationDescription=Define the location and protocol required to connect with an existing SVN repository. SharingWizard.enterModuleName=Enter Folder Name SharingWizard.url=URL: SharingWizard.browse=&Select... SharingWizard.cannotExist=The folder indicated by the URL cannot already exist. SharingWizard.enterModuleNameDescription=Select the name of the folder in the SVN repository. SharingWizard.heading=Configure a Project to Use SVN SharingWizard.importTitle=Share Project with SVN Repository SharingWizard.importTitleDescription=Select an existing repository location or create a new location. SharingWizard.readyToFinish=Ready to Share Project SharingWizard.readyToFinishDescription=Select Finish to import the project into the SVN repository. SharingWizard.selectTag=&Select the tag to synchronize with: SharingWizard.selectTagTitle=Select Tag SharingWizard.title=Share Project SharingWizard.0=Synchronizing SharingWizard.1=Synchronizing {0} SharingWizard.validationFailedText={0}. Set project sharing anyway? SharingWizard.validationFailedTitle=Unable to Validate SharingWizardFinishPage.message=The wizard has all the information necessary to share your project with the SVN repository. When you click \"Finish\", the wizard will import your project into the repository and open the Synchronize view to allow you to commit your resources. Sho&w_outgoing_25=Indicate is out&going ShowHistoryAction.noHistory=No History Available ShowHistoryAction.noHistoryLong=No resource history available for selected resources. ShowHistoryAction.showHistory=Error occurred performing Show History ViewGraphAction.viewGraph=Error occurred performing View File History as Graph Show_has_&remote_26=Indicate &has remote Standard_15=&Standard SVNAnnotateBlock.lines=lines SVNAnnotateBlock.line=line SVNAnnotateBlock.userRevision={0} {1} ({2} {3}) SVNAnnotateView.viewInstructions=This view shows annotations for a file in SVN. Select a file and then choose \"Team->Show Annotation\" from the context menu. SVNAnnotateView.showFileAnnotation=SVN Annotate - {0} SVNRepositoryPropertiesPage.useRepositoryUrlAsLabel=Use the &repository url as the label SVNRepositoryPropertiesPage.useCustomLabel=Use a &custom label : SVNRepositoryPropertiesPage.login=&Login : SVNRepositoryPropertiesPage.password=&Password : SVNRepositoryPropertiesPage.repositoryUrl=Repository &url : SVNRepositoryPropertiesPage.repositoryRootUrl=Repository roo&t url : SVNRepositoryPropertiesPage.browseRootUrl=&Select... SVNRepositoryPropertiesPage.rootUrlWarning=If your repository url is http://mycompany.com/repository/trunk/project, \nyour root repository url is probably http://mycompany.com/repository SVNPropertyPage.path=Path: SVNPropertyPage.ignored=Ignored: SVNPropertyPage.managed=Managed: SVNPropertyPage.switched=Switched: SVNPropertyPage.wcLocked=Working copy locked SVNPropertyPage.url=Url: SVNPropertyPage.name=Name: SVNPropertyPage.repositoryRoot=Repository Root: SVNPropertyPage.uuid=Repository UUID: SVNPropertyPage.changedRevision=Last Changed Revision: SVNPropertyPage.changedDate=Last Changed Date: SVNPropertyPage.changedAuthor=Last Commit Author: SVNPropertyPage.status=Status: SVNPropertyPage.propStatus=Properties Status: SVNPropertyPage.merged=Merged: SVNPropertyPage.deleted=Deleted: SVNPropertyPage.modified=Modified: SVNPropertyPage.added=Added: SVNPropertyPage.revision=Revision: SVNPropertyPage.copied=Copied: SVNPropertyPage.copiedFrom=Copied From URL: SVNPropertyPage.lockOwner=Lock Owner: SVNPropertyPage.lockCreationDate=Lock Creation Date: SVNPropertyPage.lockComment=Lock Comment: SVNPropertyPage.treeConflict=Tree Conflict: SvnPropertiesView.addPropertyLabel=Add a property SvnPropertiesView.addPropertyTooltip=Add a svn property SvnPropertiesView.deletePropertyLabel=Delete the property SvnPropertiesView.errorAddMessage=Can't add the new property SvnPropertiesView.errorAddTitle=Add property SvnPropertiesView.modifyPropertyLabel=Modify the property SvnPropertiesView.propertyName=name SvnPropertiesView.propertyValue=value SvnPropertiesView.refresh=Refresh View SvnPropertiesView.refreshLabel=&Refresh View SvnPropertiesView.titleWithArgument=Svn properties for {0} SvnPropertiesView.deletePropertyLabel=Delete the property SvnPropertiesView.resourceNotManaged=Resource is not managed SvnPropertiesView.somePropertiesModified=Some properties have been modified since last commit SvnPropertiesView.noPropertiesModified=No properties have been modified since last commit SvnPropertiesView.conflictOnProperties=Conflict on one or more properties SvnPropertiesView.errorGettingStatus=Error while getting resource status SvnPropertiesView.addKeywordsLabel=Set keywords SvnPropertiesView.addKeywordsTooltip=Set keywords SvnPropertiesView.errorAddKeywordsTitle=Set keywords SvnPropertiesView.errorAddKeywordsMessage=Can't set keywords SvnRevPropertiesView.titleWithTwoArguments=Svn revision {0} properties for {1} SvnRevPropertiesView.titleWithOneArgument=Svn revision properties for {0} TreeConflictsView.resource=Resource TreeConflictsView.description=Description TreeConflictsView.noResource=No resource selected TreeConflictsView.refresh=Refresh TreeConflictsView.refreshView=Refresh View TreeConflictsView.openWith=Open With ResolveTreeConflictAction.text=Resolve... ResolveTreeConflictWizard_compare=Compare ResolveTreeConflictWizard_compare2=Compare (' ResolveTreeConflictWizard_compareError=Compare Error ResolveTreeConflictWizard_deleteError=Delete Error ResolveTreeConflictWizard_editorClosed=Compare Editor Closed ResolveTreeConflictWizard_markResolvedError=Mark Resolved Error ResolveTreeConflictWizard_mergeError=Merge Error ResolveTreeConflictWizard_promptToReolve=Do you want to reopen the Resolve Tree Conflict dialog in order to resolve the conflict on ResolveTreeConflictWizard_revertError=Revert Error ResolveTreeConflictWizard_title=Resolve Tree Conflict on ResolveTreeConflictWizardMainPage_browse=Browse... ResolveTreeConflictWizardMainPage_choose=Choose ResolveTreeConflictWizardMainPage_chooseBoth=Choose both (just mark conflict resolved) ResolveTreeConflictWizardMainPage_chooseIncoming=Choose incoming ResolveTreeConflictWizardMainPage_compare=Compare ResolveTreeConflictWizardMainPage_compareEditorInformation=You will be prompted with the following options when the compare editor is closed: ResolveTreeConflictWizardMainPage_compareMergeTarget=Compare/Merge Target: ResolveTreeConflictWizardMainPage_compareTo=\ to Compare/Merge target: ResolveTreeConflictWizardMainPage_conflictDescription=Conflict description: ResolveTreeConflictWizardMainPage_conflictWillBeResolved=\ (conflict will be resolved) ResolveTreeConflictWizardMainPage_delete=Delete ResolveTreeConflictWizardMainPage_fromWorkingCopy=\ from working copy ResolveTreeConflictWizardMainPage_incoming=Incoming ResolveTreeConflictWizardMainPage_inRepository=\ in repository. ResolveTreeConflictWizardMainPage_into=\ into: ResolveTreeConflictWizardMainPage_intoTarget=\ into Compare/Merge target: ResolveTreeConflictWizardMainPage_lookingForCopiedToUrl=Looking for copied-to URL ResolveTreeConflictWizardMainPage_markResolved=Mark conflict resolved ResolveTreeConflictWizardMainPage_merge=Merge ResolveTreeConflictWizardMainPage_message=Specify the steps to take to resolve the tree conflict ResolveTreeConflictWizardMainPage_remove=Remove ResolveTreeConflictWizardMainPage_removeSelected=Remove the selected resource from working copy ResolveTreeConflictWizardMainPage_resolutionSteps=Resolution steps: ResolveTreeConflictWizardMainPage_revert=Revert ResolveTreeConflictWizardMainPage_revertSelected=Revert the selected resource: ResolveTreeConflictWizardMainPage_selectMergeTarget=Select merge target ResolveTreeConflictWizardMainPage_selectCompareTarget=Select compare target ResolveTreeConflictWizardMainPage_selectCompareMergeTarget=Select compare/merge target ResolveTreeConflictWizardMainPage_sourceLeft=Source left: ResolveTreeConflictWizardMainPage_sourceRight=Source right: ResolveTreeConflictWizardMainPage_specifySteps=Specify steps ResolveTreeConflictWizardMainPage_to=\ to: ResolveTreeConflictWizardMainPage_to2=\ to SyncAction.override.confirm=This action will remove your local changes. Are you sure that you want to revert your local changes and replace them with the file from the repository? SyncAction.override.title=Override and Update SyncAction.commit=&Commit... SyncAction.createPatch=Create Patch... SyncAction.showOutOfDateFolders=Show out of date folders SyncAction.commit.conflict.title=Confirm Commit SyncAction.commit.conflict.question=You have conflicts that still need to be resolved.\n\nDo you want to continue and commit the changes that do not have conflicts? SyncAction.conflicts=&Edit Conflicts SyncAction.history=Show &History SyncAction.properties=Show &Properties SyncAction.resolve=Mar&k Resolved... SyncAction.markMerged=Mark as &Merged SyncAction.override=O&verride and Update SyncAction.revert=&Revert... SyncAction.sync=&Synchronize SyncAction.add=&Add to Version Control SyncAction.ignore=A&dd to svn:ignore SyncAction.update=&Update SyncAction.updateAll=Update All Incoming Changes SyncAction.updateConfirm=Are you sure you want to update {0} resources? SyncAction.commitAll=Commit All Outgoing Changes... SyncAction.update.conflict.title=Confirm Update SyncAction.update.conflict.question=You have local changes that conflict with the server. Update will attempt to merge those changes.\n\nDo you want to Continue? SyncAction.expandAll = Expand All SyncAction.expandAllTooltip = Expand All SynchronizeProjectsDialog.allSharedProjects=Include &all projects shared with SVN SynchronizeProjectsDialog.selectProjects=Projects to be synchronized SynchronizeProjectsDialog.sharedWorkingSetProjects=Include &working set resources shared with SVN: SynchronizeProjectsDialog.syncOutgoingChanges=Only synchronize projects with outgoing &changes SynchronizeProjectsDialog.title=Synchronize SVN Projects SynchronizeView.standardIncomingChangeSetComment=Commit message could not be retrieved SynchronizeView.collectingChangeSets=Collecting SVN change sets SynchronizeWizard.title=Synchronize SVN SynchronizeWizard.message=Select the resources or working sets to be synchronized. TagAction.enterTag=Please enter a version tag: TagAction.existingVersions=Existing Versions: TagAction.tagAlreadyExists=Version tag already exists. TagAction.tagErrorTitle=Tagging Error TagAction.tagProblemsMessage=Problems reported tagging the resource. TagAction.tagProblemsMessageMultiple=Problems tagging the resources. {0} project(s) successfully tagged and {1} project(s) with errors. TagAction.tagResources=Tag Resources TagAction.tagWarningTitle=Tagging Warning TagAction.uncommittedChanges=You are tagging ''{0}'' that has uncommitted changes. These changes are not in the repository and will not be included in the version you are creating. Do you still want to tag this resource? TagAction.uncommittedChangesTitle=Confirm Uncommitted Changes TagInRepositoryAction.tagProblemsMessage=Problems reported tagging the resource. TagInRepositoryAction.tagProblemsMessageMultiple=Problems reported tagging the resources. TagSelectionDialog.Select_a_Tag_1=&Select a branch or version: TagSelectionDialog.recurseOption=Recurse into sub-&folders TagetLocationSelectionDialog.alreadyExists=Project {0} already exists. TagetLocationSelectionDialog.invalidLocation=Invalid location path. TagetLocationSelectionDialog.locationEmpty=Project contents directory must be specified. TargetLocationSelectionDialog.browseLabel=&Browse... TargetLocationSelectionDialog.locationLabel=&Location: TargetLocationSelectionDialog.messageForMulti=Select the parent directory for the {0} projects. TargetLocationSelectionDialog.messageForSingle=Select the parent directory for project {0}. TargetLocationSelectionDialog.parentDirectoryLabel=&Directory: TargetLocationSelectionDialog.projectNameLabel=&Project Name: TargetLocationSelectionDialog.useDefaultLabel=Use default &workspace location Uneditaction.confirmMessage=Overwrite local changes to edited files? Uneditaction.confirmTitle=Confirm Unedit Unmanage.message=Are you sure you want to disconnect SVN from ''{0}''? Unmanage.message=Are you sure you want to disconnect SVN from ''{0}''? Unmanage.messageN=Are you sure you want to disconnect SVN from these {0} projects? Unmanage.messageN=Are you sure you want to disconnect SVN from these {0} projects? Unmanage.option1=Do not delete the SVN meta information (e.g. SVN sub-directories). Unmanage.option2=Also delete the SVN meta information from the file system. Unmanage.deleteMeta=If you delete the SVN Meta information you will NOT be able to reconnect this project to your repository. You will either need to share it to a new location or delete the project and check it out again. Do you want to continue? Unmanage.title=Confirm Disconnect from SVN Unmanage.titleN=Confirm Multiple Project Disconnect from SVN Unmanage.unmanage=Disconnect from SVN Unmanage.unmanaging=Disconnecting from SVN... Unmanage.unmanagingError=Errors occurred while disconnecting UpdateAction.updateerror=Problems encountered performing update UpdateAction.updating=Updating... UpdateMergeActionProblems_merging_remote_resources_into_workspace_1=Problems merging remote resources into workspace UpdateMergeActionProblems_merging_remote_resources_into_workspace_2=Problems merging remote resources into workspace UpdateSyncAction.Conflicting_changes_found_1=Conflicting changes found UpdateSyncAction.Only_update_resources_that_can_be_automatically_merged_3=Only update resources that can be automatically merged UpdateSyncAction.Overwrite_local_changes__5=Overwrite local changes? UpdateSyncAction.Update_all_resources,_overwriting_local_changes_with_remote_contents_4=Update all resources, overwriting local changes with remote contents UpdateSyncAction.You_have_local_changes_you_are_about_to_overwrite._Do_you_wish_to_continue__6=You have local changes you are about to overwrite. Do you wish to continue? UpdateSyncAction.You_have_local_changes_you_are_about_to_overwrite_2=You have local changes you are about to overwrite UpdateSyncAction.errorUpdating=An error occurred while updating changes. UpdateWizard.title=Update UpdateWizard.updatePage=Update UpdateWizardPage.description=&Select a tag to update the project sharing to: UpdateWizardPage.overwrite=&Overwrite local changes UserValidationDialog.labelPassword=Enter a password for {0} in the following repository: {1} UserValidationDialog.labelUser=Enter a user name and password for the following repository: {0} UserValidationDialog.password=Password: UserValidationDialog.required=Password Required UserValidationDialog.user=User name: Validate_Connection_on_Finish_7=Validate Location on Finish VersionCategory.Versions_1=Versions VersionsElement.versions=Versions WorkbenchUserAuthenticator.The_operation_was_canceled_by_the_user_1=The operation was canceled by the user WorkbenchUserAuthenticator.cancelled=Operation cancelled because login cancelled WorkbenchUserAuthenticator.errorFlushing=Error occurred while flushing password for {0} WorkbenchUserAuthenticator.errorSaving=Error occurred while saving password for {0} WorkingSetSelectionArea.workingSetOther=&Other... WorkingSetSelectionDialog.detailsButton.label= &Edit... WorkingSetSelectionDialog.message.multiSelect= &Select SVN working sets: WorkingSetSelectionDialog.message= &Select a SVN working set: WorkingSetSelectionDialog.newButton.label= &New... WorkingSetSelectionDialog.removeButton.label= &Remove WorkingSetSelectionDialog.title.multiSelect= Select SVN Working Sets WorkingSetSelectionDialog.title= Select SVN Working Set buildError=A build error occurred after the SVN operation completed. confirmOverwrite=The project already exists in the workspace. Its contents will be overwritten. confirmOverwriteTitle=Confirm Overwrite Project currentRevision=*{0} details=Press the details button for more information. error=Error exception=Server Exception flag_indicating_that_the_folder_has_a_child_resource_with_outgoing_changes_41=flag indicating that the folder has a child resource with outgoing changes information=Server Information internal=An internal error has occurred, consult the error log for details. keyword_substitution_rule_for_the_resource_44=keyword substitution rule for the resource localChanges=You have local changes which you are about to overwrite. Do you wish to continue? moveRemoteFolderWizard.title=Move remote resource nameAndRevision={0} {1} no=&No prompt=&Prompt noauthor=(no author) notAvailable=Not Available ok=OK question=Question repository_home_directory_on_server_39=repository home directory on server root_relative_directory_40=root relative directory separator=/ simpleInternal=Internal error svn=SVN the_connection_method_(e.g._pserver,_ssh)_37=the connection method (e.g. pserver, ssh) the_repository_location__s_hostname_36=the repository location\'s hostname the_tag_applied_to_the_resource_(version,_branch,_or_date)_35=the tag applied to the resource (version, branch, or date) the_tag_applied_to_the_resource_43=the tag applied to the resource user_name_for_the_connection_38=user name for the connection yes=&Yes LockOperation.taskName=SVN Lock LockOperation.0=Locking {0} UnlockOperation.taskName=SVN Unlock UnlockOperation.0=Unlocking {0} UnsupportedPasswordStoresDialog_0=Unsupported Password Stores UnsupportedPasswordStoresDialog_1=Subversion 1.6 contains a bug that causes Eclipse to crash when Subversion tries to interact with the GNOME keyring via the Subversion JavaHL API. We recommend that you disable this feature so that you can use Subversion from Eclipse. UnsupportedPasswordStoresDialog_2=For more information, go UnsupportedPasswordStoresDialog_3=here. UnsupportedPasswordStoresDialog_5=SVN Configuration: UnsupportedPasswordStoresDialog_6=Configuration file: UnsupportedPasswordStoresDialog_7=Current password-stores value: UnsupportedPasswordStoresDialog_8=Click OK to allow Subclipse to remove the current password-stores value from the configuration file. The current configuration file will be saved as config_backup. ExportOperation.taskName=SVN Export ExportOperation.0=Exporting {0} ImportOperation.taskName=SVN Import ImportOperation.0=Importing {0} BranchTagOperation.taskName=SVN Branch/Tag BranchTagOperation.0=Creating Branch/Tag {0} BranchTagOperation.3=Subclipse auto commit: changed externals to fixed revision. BuiltInConflictsCompareInput.0=Conflicts on BuiltInConflictsCompareInput.1=.svn BuiltInEditConflictsAction_0=No merge program configured BuiltInEditConflictsAction_1=Configured merge program does not exist anymore BuiltInEditConflictsAction_2=Error occurred attempting to run external conflict resolution program:\n\n BuiltInEditConflictsAction_3=Edit conflicts SwitchOperation.taskName=SVN Switch CheckoutAsProjectOperation.taskName=SVN Checkout CommitOperation.taskName=SVN Commit MergeOperation.taskName=SVN Merge SwitchOperation.0=Switching {0} CheckoutAsProjectOperation.0=Checking out {0} SVNProvider.Creating_project_1=Creating project ''{0}'' MergeOperation.0=Merging {0} UpdateOperation.taskName=SVN Update UpdateOperation.0=Updating {0} ReplaceOperation.taskName=SVN Replace with latest ReplaceOperation.0=Replacing {0} UpgradeOperation.taskName=SVN Upgrade UpgradeOperation.0=Upgrading {0} UpgradeAction.title=Upgrade Working Copy UpgradeAction.error=Upgrade Failed UpgradeAction.confirm.single=Are you sure you want to upgrade {0}?\n\nThis operation cannot be undone. UpgradeAction.confirm.multiple=Are you sure you want to upgrade the selected resources?\n\nThis operation cannot be undone. CleanupAction.error=Cleanup Failed CleanupOperation.taskName=SVN Cleanup CleanupOperation.0=Cleaning up {0} ResolveAction.error=Resolve Failed ResolveAction.confirmTreeConflicts=Mark tree conflicts resolved for the selected files? ResolveAction.confirm=Mark property conflicts resolved for {0}? ResolveAction.confirmMultiple=Mark property conflicts resolved for the selected files? ResolveOperation.taskName=Mark Resolved ResolveOperation.0=Mark {0} as Resolved ResolveDialog.file=File: {0} ResolveDialog.multipleFiles=Multiple files selected. ResolveDialog.question=What do you want to do? ResolveDialog.resolved=Conflicts have been &resolved in the file. ResolveDialog.useMine=Resolve the conflict by using &my version of the file. ResolveDialog.useTheirs=Resolve the conflict by using the &incoming version of the file. ResolveDialog.useBase=Resolve the conflict by using the &base version of the file. ResolveDialog.message=Decide how to resolve conflict on {0}. ResolveDialog.messageMultiple=Decide how to resolve conflicts on the selected files. ResolveDialog.propertyConflict=The selected file has property conflicts. Property conflicts will be marked resolved. The following choices apply to non-property conflicts only. ResolveDialog.propertyConflictMultiple=The selected files have property conflicts. Property conflicts will be marked resolved. The following choices apply to non-property conflicts only. ResolveDialog.treeConflict=The selected file has a tree conflict. Tree conflict will be marked resolved. The following choices apply to non-tree conflicts only. ResolveDialog.treeConflictMultiple=The selected files have tree conflicts. Tree conflicts will be marked resolved. The following choices apply to non-tree conflicts only. ResolveDialog.nonPropertyOnly=The following choices do not apply to properties: ResolveDialog.nonTreeOnly=The following choices do not apply to tree conflicts: RevertAction.0=Revert RevertAction.1=There are no changes to revert. RevertAction.error=Revert Failed RevertOperation.taskName=Revert Changes RevertOperation.0=Revert Changes to {0} AnnotateOperation.taskName=Show Annotations AnnotateOperation.0=Show Annotations for {0} AnnotateOperation_QDAnnotateTitle=Quick Diff Annotate AnnotateOperation_QDAnnotateMessage=Do you wish to view annotations using quick diff? AnnotateOperation_4=&Remember my decision SVNOperation.0=Errors occured in {0} of {1} operations. SVNOperation.operationCancelled=Operation cancelled. SVNConflictResolver_0=Handle Conflict SVNConflictResolver_1=Conflict could not be handled due to unexpected error:\n\n SVNConflictResolver_2=\n\nConflict must be resolved at a later time. SVNConflicts=Conflicting SVN updates SVNHistoryPage.0=\ in SVNHistoryPage.11=Show Annotation SVNHistoryPage.12=Show Annotation is only valid for files. SVNHistoryPage.7=Open SVNHistoryPage.8=Open is only valid for files. AcceptMine.label=Accept my revision AcceptTheirs.label=Accept their revision MarkResolved.label=Mark conflict as resolved EditConflicts.Label=Edit Conflicts EditPropertyConflictsWizard_0=Edit Property Conflicts EditPropertyConflictsWizardPropertyPage_0=Use my value: EditPropertyConflictsWizardPropertyPage_1=Use repository value: EditPropertyConflictsWizardPropertyPage_2=Select the EditPropertyConflictsWizardPropertyPage_3=\ property value to use. Selected value can be edited. EditPropertyConflictsWizardSummaryPage_1=Conflict Summary EditPropertyConflictsWizardSummaryPage_2=Conflict Summary: EditPropertyConflictsWizardSummaryPage_3=Conflicts have been resolved EditPropertyConflictsWizardSummaryPage_4=\ property conflicts. SSHPromptDialog.title=Enter SSH Credentials SSHPromptDialog.authentication=Authentication SSHPromptDialog.passwordauth=Use password authentication SSHPromptDialog.keyauth=Use private key authentication SSHPromptDialog.keyfile=Key file: SSHPromptDialog.browse=Browse... SSHPromptDialog.passphrase=Passphrase: SSHPromptDialog.port=Port number: SSHPromptDialog.save=Save information SSHPromptDialog.invalidPortTitle=Invalid Port Number SSHPromptDialog.invalidPortMessage=Please enter a valid numeric port number. SSLClientCertificate.0=Get Certificate from Windows store (MSCAPI) SSLClientCertificate.1=Alias: SSLClientCertificate.2=Select alias SSLClientCertificatesMSCapi.0=Select Certificate Alias SSLClientCertificatesMSCapi.1=select the right certificate alias SSLPromptDialog.title=Provide SSL Client Certificate SSLPromptDialog.certificate=Client certificate: # TODO The following keys were taken from internal Team and CVS message bundles GlobalRefreshSubscriberPage.0=Unknown RemoteAnnotationStorage.1=As error occurred computing the content type of remote resource {0}GlobalRefreshResourceSelectionPage.1=Synchronize GlobalRefreshResourceSelectionPage.2=Select the resources to synchronize or select a scope to automatically select a group of resources. GlobalRefreshResourceSelectionPage.3=Synchronize GlobalRefreshResourceSelectionPage.4=There are no resources to synchronize. GlobalRefreshResourceSelectionPage.5=Available resources to Synchronize: GlobalRefreshResourceSelectionPage.6=Scope GlobalRefreshResourceSelectionPage.7=W&orkspace GlobalRefreshResourceSelectionPage.8=&Selected Resources GlobalRefreshResourceSelectionPage.9=&Enclosing Projects GlobalRefreshResourceSelectionPage.10=&Working Set: GlobalRefreshResourceSelectionPage.11=&Choose... GlobalRefreshResourceSelectionPage.12=Select &All GlobalRefreshResourceSelectionPage.13=&Deselect All StatisticsPanel.noWorkingSet= TeamAction.internal=Internal error occurred. WorkspacePathValidator.title=Workspace Path Validation Error WorkspacePathValidator.eclipsePath=Your Eclipse workspace path is: WorkspacePathValidator.fileSystemPath=But the actual file system path is: WorkspacePathValidator.instructions=Subclipse will not operate correctly unless the values are exactly the same. Use the Switch Workspace option or change the -data parameter on your shortcut so that the Eclipse value matches the file system value. See: http://subclipse.tigris.org/faq.html#path-case FetchMembersOperation.taskName=Fetching... {0} FetchMembersOperation.message=Fetching children of {0} RemoteFolderElement_fetchingRemoteMembers.message=Fetching children of {0} WorkspaceChangeSetCapability_1=New Set WorkspaceChangeSetCapability_2=New Change Set WorkspaceChangeSetCapability_3=Enter the name and comment for the new change set WorkspaceChangeSetCapability_7=Edit Change Set Comment WorkspaceChangeSetCapability_8=Edit the name and comment for the change set OpenChangeSetAction_0=[{0}] ({1}) OpenChangeSetAction_1=SVN Change OpenCommitSetAction_20=Open Change in Compare Editor OpenCommitSetAction_21=Could not determine the repository location of the selected resources OpenRemoteFileAction.0=Open CVSChangeSetCollector_0=Unassigned Remote Changes CVSChangeSetCollector_4=Retrieving revision histories WorkspaceSubscriberContext_0=Could not update the meta-data for file {0} due to inconsistent internal state. CommitSetDialog_0=&Name: CommitSetDialog_2=Use the &title as the commit comment CommitSetDialog_3=Enter a commit &comment CommitCommentArea_0= CommitCommentArea_1= CommitCommentArea_2=Empty commit comment CommitCommentArea_3=The commit comment is empty. Are you sure you would like to continue with an empty comment? CommitCommentArea_4=Re&member decision? CommitCommentArea_5=Configure Comment Templates... CommitCommentArea_6=Template MenuIconsPreferencePage.restart=Note: You will need to restart the workbench for the changes to take effect. MenuIconsPreferencePage.iconSet=Icon Set MenuIconsPreferencePage.default=De&fault messages_ja.properties000066400000000000000000005032551203611042400401220ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) #****************************************************************************** # Copyright (c) 2005, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ #Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) AcceptMine.label = \u30ED\u30FC\u30AB\u30EB\u306E\u30EA\u30D3\u30B8\u30E7\u30F3\u3092\u5229\u7528 AcceptTheirs.label = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306E\u30EA\u30D3\u30B8\u30E7\u30F3\u3092\u5229\u7528 AddAction.addFailed = \u8FFD\u52A0\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 AddAction.addIgnoredQuestion = \u30D0\u30FC\u30B8\u30E7\u30F3\u7BA1\u7406\u3092\u884C\u308F\u306A\u3051\u308C\u3070\u7121\u8996\u3055\u308C\u308B 1 \u3064\u307E\u305F\u306F\u8907\u6570\u306E\u30EA\u30BD\u30FC\u30B9\u306B\u5BFE\u3057\u3001\u30D0\u30FC\u30B8\u30E7\u30F3\u7BA1\u7406\u3059\u308B\u3088\u3046\u660E\u793A\u7684\u306B\u8981\u6C42\u3057\u307E\u3057\u305F\u3002 \u7D9A\u884C\u3057\u307E\u3059\u304B? AddAction.addIgnoredTitle = \u7121\u8996\u3055\u308C\u305F\u30EA\u30BD\u30FC\u30B9\u3092\u8FFD\u52A0\u3057\u307E\u3059\u304B? AddAction.adding = \u8FFD\u52A0\u4E2D... AddKeywordsAction.addKeywordsFailed = svn:keywords\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u5909\u66F4\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 AddKeywordsDialog.description = \u8A73\u7D30 AddKeywordsDialog.headUrl.description = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306E\u4E2D\u306E\u30D5\u30A1\u30A4\u30EB\u306E\u6700\u65B0\u30D0\u30FC\u30B8\u30E7\u30F3\u306E\u305F\u3081\u306E\u5B8C\u5168\u306AURL AddKeywordsDialog.headUrl.sample = $HeadURL: http://svn.collab.net/repos/subclipse/trunk/readme.txt $ AddKeywordsDialog.id.description = \u5727\u7E2E\u3055\u308C\u305F\u4ED6\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u306E\u7D44\u307F\u5408\u308F\u305B AddKeywordsDialog.id.sample = $Id: AddKeywordsDialog.java 148 2003-11-02 22:35:43Z cchab $ AddKeywordsDialog.keyword = \u30AD\u30FC\u30EF\u30FC\u30C9 AddKeywordsDialog.lastChangedBy.description = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u4E2D\u306E\u3053\u306E\u30D5\u30A1\u30A4\u30EB\u306E\u6700\u5F8C\u306E\u5909\u66F4\u8005 AddKeywordsDialog.lastChangedBy.sample = $LastChangedBy: cchab $ AddKeywordsDialog.lastChangedDate.description = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u4E2D\u306E\u30D5\u30A1\u30A4\u30EB\u306E\u6700\u5F8C\u306E\u66F4\u65B0\u65E5\u6642 AddKeywordsDialog.lastChangedDate.sample = $LastChangedDate: 2002-07-22 21:42:37 -0700 (Mon, 22 Jul 2002) $ AddKeywordsDialog.lastChangedRevision.description = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u4E2D\u306E\u30D5\u30A1\u30A4\u30EB\u306E\u6700\u5F8C\u306E\u30EA\u30D3\u30B8\u30E7\u30F3 AddKeywordsDialog.lastChangedRevision.sample = $LastChangedRevision: 144 $ AddKeywordsDialog.sample = \u30B5\u30F3\u30D7\u30EB AddKeywordsDialog.selectKeywords = \u9078\u629E\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u306B\u30BB\u30C3\u30C8\u3059\u308B\u30AD\u30FC\u30EF\u30FC\u30C9\u3092\u9078\u629E : AddKeywordsDialog.title = \u30AD\u30FC\u30EF\u30FC\u30C9 AddToBranchAction.enterTag = \u30D6\u30E9\u30F3\u30C1\u30FB\u30BF\u30B0\u306E\u5165\u529B AddToBranchAction.enterTagLong = \u30D6\u30E9\u30F3\u30C1\u306E\u540D\u524D\u3092\u5165\u529B\u3057\u307E\u3059: AddToVersionControlDialog.thereAreUnaddedResources = SVN \u30D0\u30FC\u30B8\u30E7\u30F3\u7BA1\u7406\u306E\u3082\u3068\u306B\u306A\u3044 {0} \u30EA\u30BD\u30FC\u30B9\u304C\u3042\u308A\u307E\u3059\u3002 \u8FFD\u52A0\u3057\u307E\u3059\u304B? AddToVersionControlDialog.thereIsAnUnaddedResource = SVN \u30D0\u30FC\u30B8\u30E7\u30F3\u7BA1\u7406\u306E\u3082\u3068\u306B\u306A\u3044 {0} \u30EA\u30BD\u30FC\u30B9\u304C\u3042\u308A\u307E\u3059\u3002 \u8FFD\u52A0\u3057\u307E\u3059\u304B? AddToVersionControlDialog.title = SVN \u30D0\u30FC\u30B8\u30E7\u30F3\u7BA1\u7406\u306B\u8FFD\u52A0 AddToWorkspace.taskName1 = SVN \u304B\u3089 ''{0}'' \u3092\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u3057\u3066\u3044\u307E\u3059 AddToWorkspace.taskNameN = SVN \u304B\u3089 {0} \u30D5\u30A9\u30EB\u30C0\u3092\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u3057\u3066\u3044\u307E\u3059 AddToWorkspaceAction.checkingOutRoot = \u30EA\u30DD\u30B8\u30C8\u30EA\u306E\u30EB\u30FC\u30C8\u304B\u3089\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u307E\u3059\u3002\u30D6\u30E9\u30F3\u30C1\u3084\u30BF\u30B0\u3092\u542B\u3093\u3067\u3044\u305F\u5834\u5408\u3001\u305D\u308C\u3089\u3059\u3079\u3066\u3092\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u3059\u308B\u3053\u3068\u306B\u306A\u308A\u307E\u3059\u304C\u3001\u7D9A\u884C\u3057\u307E\u3059\u304B? AddToWorkspaceAction.checkoutFailed = \u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u306E\u5B9F\u884C\u4E2D\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 AddToWorkspaceAction.confirmOverwrite = \u4E0A\u66F8\u304D\u306E\u78BA\u8A8D AddToWorkspaceAction.thisExternalFileExists = \u30D5\u30A9\u30EB\u30C0''{0}''\u306F\u30ED\u30FC\u30AB\u30EB\u30D5\u30A1\u30A4\u30EB\u30B7\u30B9\u30C6\u30E0\u4E0A\u306B\u5B58\u5728\u3057\u307E\u3059\u3002\u5B9F\u884C\u3057\u307E\u3059\u304B? AddToWorkspaceAction.thisResourceExists = \u65E2\u306B\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u4E0A\u306B\u5B58\u5728\u3059\u308B\u30EA\u30BD\u30FC\u30B9''{0}''\u306F\u524A\u9664\u3055\u308C\u307E\u3059\u3002\u5B9F\u884C\u3057\u307E\u3059\u304B? Advanced_options_19 = \u62E1\u5F35\u30AA\u30D7\u30B7\u30E7\u30F3 After_configuring_the_project__1 = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u69CB\u6210\u5F8C: AlternateUserValidationDialog.Cancel_7 = \u30AD\u30E3\u30F3\u30BB\u30EB AlternateUserValidationDialog.Enter_Password_2 = \u30D1\u30B9\u30EF\u30FC\u30C9\u306E\u5165\u529B AlternateUserValidationDialog.OK_6 = OK AlternateUserValidationDialog.message = {0} \u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: AnnotateDialog.from = \u8D77\u70B9\u306E\u30EA\u30D3\u30B8\u30E7\u30F3: AnnotateDialog.revision = \u30EA\u30D3\u30B8\u30E7\u30F3: AnnotateDialog.title = \u6CE8\u91C8 AnnotateDialog.to = \u7D42\u70B9\u306E\u30EA\u30D3\u30B8\u30E7\u30F3: AnnotateDialog.url = URL: AnnotateOperation.0 = {0} \u306E\u6CE8\u91C8\u3092\u8868\u793A AnnotateOperation.taskName = \u6CE8\u91C8\u3092\u8868\u793A AnnotateOperation_4 = \u3053\u306E\u6C7A\u5B9A\u3092\u4FDD\u5B58 AnnotateOperation_QDAnnotateMessage = \u30AF\u30A4\u30C3\u30AFDiff\u3092\u4F7F\u3063\u3066\u6CE8\u91C8\u3092\u8868\u793A\u3057\u307E\u3059\u304B\uFF1F AnnotateOperation_QDAnnotateTitle = \u30AF\u30A4\u30C3\u30AFDiff\u6CE8\u91C8 AutoDefineTagsAction.defineTags = \u30BF\u30B0\u306E\u81EA\u52D5\u767A\u898B Automatically_import_the_local_resources_into_the_repository_3 = \u30ED\u30FC\u30AB\u30EB\u30FB\u30EA\u30BD\u30FC\u30B9\u3092\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306B\u81EA\u52D5\u7684\u306B\u30A4\u30F3\u30DD\u30FC\u30C8 AvoidableMessageDialog.dontShowAgain = \u4EE5\u964D\u3053\u308C\u3092\u8868\u793A\u3057\u306A\u3044 BranchCategory.Branches_1 = \u30D6\u30E9\u30F3\u30C1 BranchTagAction.branch = \u30D6\u30E9\u30F3\u30C1/\u30BF\u30B0\u306E\u8FFD\u52A0\u4E2D\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 BranchTagDialog.0 = {0}\u306F\u8FFD\u52A0\u3055\u308C\u307E\u305B\u3093\u3067\u3057\u305F\u3002\u3068\u306B\u304B\u304F\u30D6\u30E9\u30F3\u30C1/\u30BF\u30B0\u3092\u30B3\u30D4\u30FC\u3057\u307E\u3059\u304B? BranchTagDialog.createCopy = \u6B21\u306E\u5834\u6240\u304B\u3089\u30EA\u30DD\u30B8\u30C8\u30EA\u3078\u30B3\u30D4\u30FC\u3092\u4F5C\u6210: BranchTagDialog.enterComment = \u30D6\u30E9\u30F3\u30C1/\u30BF\u30B0\u30B3\u30E1\u30F3\u30C8\u306E\u7DE8\u96C6(&c): BranchTagDialog.fromUrl = \u30B3\u30D4\u30FC\u5143\u306EURL: BranchTagDialog.head = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306EHEAD\u30EA\u30D3\u30B8\u30E7\u30F3 BranchTagDialog.note = \u6CE8\u610F: \u4F5C\u696D\u30B3\u30D4\u30FC\u306B\u4EE5\u524D\u306E\u30D1\u30B9\u304C\u6B8B\u3063\u3066\u3044\u307E\u3059\u3002\u4ECA\u5F8C\u306E\u5909\u66F4\u3092\u4ECA\u4F5C\u6210\u3057\u305F\u30B3\u30D4\u30FC\u306B\u53CD\u6620\u3055\u305B\u305F\u3044\u5834\u5408\u306F\u3001\u305D\u306E\u30B3\u30D4\u30FC\u306E\u30D1\u30B9\u3078\u79FB\u52D5\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u306E\u3067\u3001\u5207\u308A\u66FF\u3048\u64CD\u4F5C\u3092\u884C\u3063\u3066\u304F\u3060\u3055\u3044\u3002 BranchTagDialog.repository = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC BranchTagDialog.revision = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u5185\u306E\u30EA\u30D3\u30B8\u30E7\u30F3\u3092\u9078\u629E BranchTagDialog.server = \u30D6\u30E9\u30F3\u30C1/\u30BF\u30B0\u3092\u30B5\u30FC\u30D0\u30FC\u4E0A\u306B\u76F4\u63A5\u4F5C\u6210 BranchTagDialog.switchAfterTagBranch = \u4F5C\u696D\u30B3\u30D4\u30FC\u3092\u65B0\u3057\u3044\u30D6\u30E9\u30F3\u30C1/\u30BF\u30B0\u306B\u5207\u308A\u66FF\u3048\u308B BranchTagDialog.title = \u30B3\u30D4\u30FC (\u30D6\u30E9\u30F3\u30C1/\u30BF\u30B0) BranchTagDialog.toUrl = \u30B3\u30D4\u30FC\u5148\u306EURL: BranchTagDialog.url = \u30B3\u30D4\u30FC\u5143\u306E\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u306EURL: BranchTagDialog.working = \u4F5C\u696D\u30B3\u30D4\u30FC BranchTagOperation.0 = \u30D6\u30E9\u30F3\u30C1/\u30BF\u30B0\u306E\u4F5C\u6210 {0} BranchTagOperation.taskName = SVN \u30D6\u30E9\u30F3\u30C1/\u30BF\u30B0 BranchTagPropertyUpdateDialog.text = \u30B3\u30D4\u30FC\u3059\u308B\u30D5\u30A9\u30EB\u30C0\u540D\u306Fsubclipse:tags\u30D7\u30ED\u30D1\u30C6\u30A3\u306B\u542B\u307E\u308C\u307E\u3059\u3002\u30D7\u30ED\u30D1\u30C6\u30A3\u306B\u8FFD\u52A0\u3055\u308C\u308B\u60C5\u5831\u3092\u78BA\u8A8D\u3057\u3066\r\nOK\u30DC\u30BF\u30F3\u3092\u30AF\u30EA\u30C3\u30AF\u3057\u3066\u304F\u3060\u3055\u3044\u3002\r\n\r\n\u6CE8\u610F: \u30B3\u30D4\u30FC\u64CD\u4F5C\u304C\u7D42\u4E86\u3057\u305F\u5F8C\u3001\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u5909\u66F4\u3092\u30B3\u30DF\u30C3\u30C8\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002 BranchTagPropertyUpdateDialog.title = \u30D6\u30E9\u30F3\u30C1/\u30BF\u30B0\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u66F4\u65B0 CVSChangeSetCollector_0 = \u30EA\u30E2\u30FC\u30C8\u306B\u5909\u66F4\u306A\u3057 CVSChangeSetCollector_4 = \u30EA\u30D3\u30B8\u30E7\u30F3\u30FB\u30D2\u30B9\u30C8\u30EA\u30FC\u3092\u691C\u7D22\u4E2D ChangeListener.Deleting_SVN_folders_1 = SVN \u30D5\u30A9\u30EB\u30C0\u306E\u524A\u9664 ChangeListener.Do_not_ask_me_about_this_again_3 = \u4ECA\u5F8C\u3053\u306E\u8CEA\u554F\u3092\u8868\u793A\u3057\u306A\u3044 ChangeListener.Folders_cannot_be_deleted_from_a_SVN_server_from_the_client._To_delete_the_folder_2 = SVN \u30B5\u30FC\u30D0\u30FC\u306E\u30D5\u30A9\u30EB\u30C0\u306F\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\u304B\u3089\u524A\u9664\u3067\u304D\u307E\u305B\u3093\u3002 \u30D5\u30A9\u30EB\u30C0\u3092\u524A\u9664\u3059\u308B\u306B\u306F ChangePathsTableProvider.action = \u30A2\u30AF\u30B7\u30E7\u30F3 ChangePathsTableProvider.copiedfrom = \u30B3\u30D4\u30FC\u5143 {0}:{1} ChangePathsTableProvider.description = \u8A73\u7D30 ChangePathsTableProvider.path = \u5F71\u97FF\u3092\u3046\u3051\u305F\u30D1\u30B9 CheckoutAsAction.checkoutFailed = \u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u306E\u5B9F\u884C\u4E2D\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 CheckoutAsAction.confirmOverwrite = \u4F5C\u6210\u3057\u305F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8{0}\u306F\u6A19\u6E96\u306E.project\u30D5\u30A1\u30A4\u30EB\u4EE5\u5916\u306E\u30EA\u30BD\u30FC\u30B9\u3092\u542B\u3093\u3067\u3044\u307E\u3059\u3002\u3059\u3079\u3066\u306E\u30EA\u30BD\u30FC\u30B9\u540D\u3084\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u3057\u3066\u3044\u308B\u30EA\u30BD\u30FC\u30B9\u306E\u76F8\u5BFE\u30D1\u30B9\u304C\u540C\u3058\u5834\u5408\u3001\u30ED\u30FC\u30AB\u30EB\u306E\u30EA\u30BD\u30FC\u30B9\u306F\u30EA\u30DD\u30B8\u30C8\u30EA\u306E\u30EA\u30BD\u30FC\u30B9\u306B\u7F6E\u304D\u63DB\u308F\u308A\u307E\u3059\u3002 CheckoutAsAction.enterLocationTitle = {0} \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5225\u540D\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8... CheckoutAsAction.enterProjectTitle = {0} \u306E\u5225\u540D\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8... CheckoutAsAction.multiCheckout = SVN \u304B\u3089 {0} \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u3057\u3066\u3044\u307E\u3059 CheckoutAsAction.taskname = SVN \u304B\u3089 "{0}" \u3092 "{1}" \u3068\u3057\u3066\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u3057\u3066\u3044\u307E\u3059 CheckoutAsAction.title = \u5225\u540D\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8 CheckoutAsProjectAction.title = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3068\u3057\u3066\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8 CheckoutAsProjectOperation.0 = {0}\u3092\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u4E2D CheckoutAsProjectOperation.taskName = SVN\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8 CheckoutInto.message = \u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u3057\u305F\u3044\u30D5\u30A9\u30EB\u30C0\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u9078\u629E\u3057\u305F\u30D5\u30A9\u30EB\u30C0\u306E\u4E2D\u306B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u540D\u306E\u30D5\u30A9\u30EB\u30C0\u304C\u65B0\u898F\u4F5C\u6210\u3055\u308C\u307E\u3059\u3002 CheckoutIntoProjectSelectionPage.description = ''{0}'' \u306E\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u5148\u3068\u306A\u308B\u540D\u524D\u304A\u3088\u3073\u89AA\u30D5\u30A9\u30EB\u30C0\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002 CheckoutIntoProjectSelectionPage.invalidFolderName = ''{0}'' \u306F\u7121\u52B9\u306A\u30D5\u30A9\u30EB\u30C0\u540D\u3067\u3059\u3002 CheckoutIntoProjectSelectionPage.name = \u30BF\u30FC\u30B2\u30C3\u30C8\u30FB\u30D5\u30A9\u30EB\u30C0\u540D(&N): CheckoutIntoProjectSelectionPage.recurse = \u30B5\u30D6\u30D5\u30A9\u30EB\u30C0\u306E\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8(&C) CheckoutIntoProjectSelectionPage.showAll = \u3059\u3079\u3066\u306E\u6709\u52B9\u306A\u30BF\u30FC\u30B2\u30C3\u30C8\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u8868\u793A\u3057\u307E\u3059\u3002 CheckoutIntoProjectSelectionPage.showLabel = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30FB\u30EA\u30B9\u30C8\u306E\u30D5\u30A3\u30EB\u30BF(&F): CheckoutIntoProjectSelectionPage.showSameRepo = \u540C\u3058\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u3068\u5171\u7528\u3059\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u8868\u793A\u3057\u307E\u3059\u3002 CheckoutIntoProjectSelectionPage.showUnshared = \u672A\u5171\u7528\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u8868\u793A\u3057\u307E\u3059\u3002 CheckoutIntoProjectSelectionPage.treeLabel = \u30BF\u30FC\u30B2\u30C3\u30C8\u30FB\u30D5\u30A9\u30EB\u30C0\u306E\u89AA(&P): CheckoutIntoWizard.,mappingAlredyExists = \u30ED\u30FC\u30AB\u30EB\u30FB\u30D5\u30A9\u30EB\u30C0 ''{3}'' \u304C\u3059\u3067\u306B\u30EA\u30E2\u30FC\u30C8\u30FB\u30D5\u30A9\u30EB\u30C0 ''{0}'' \u306B\u30DE\u30C3\u30D7\u3055\u308C\u3066\u3044\u308B\u305F\u3081\u3001\u3053\u306E\u30D5\u30A9\u30EB\u30C0\u3092 ''{2}'' \u3068\u3057\u3066\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 ''{1}'' \u306B\u8FFD\u52A0\u3067\u304D\u307E\u305B\u3093\u3002 CheckoutIntoWizard.confirmOverwrite = \u4E0A\u66F8\u304D\u306E\u78BA\u8A8D CheckoutIntoWizard.error = \u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u30FB\u30A8\u30E9\u30FC CheckoutIntoWizard.projectSelectionPageDescription = \u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u64CD\u4F5C\u306E\u30BF\u30FC\u30B2\u30C3\u30C8\u3068\u306A\u308B\u30ED\u30FC\u30AB\u30EB\u30FB\u30D5\u30A9\u30EB\u30C0\u3092\u9078\u629E\u3057\u307E\u3059\u3002 CheckoutIntoWizard.projectSelectionPageTitle = \u30ED\u30FC\u30AB\u30EB\u30FB\u30D5\u30A9\u30EB\u30C0\u306E\u9078\u629E CheckoutIntoWizard.thisResourceExists = \u30EA\u30BD\u30FC\u30B9 ''{0}'' \u306F\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u306B\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059\u3002 \u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B? CheckoutIntoWizard.title = \u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8 CheckoutWizard.title = SVN\u304B\u3089\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8 CheckoutWizardCheckoutAsPage.existing = \u5B58\u5728\u3059\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3078\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8 CheckoutWizardCheckoutAsPage.heading = \u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u30AA\u30D7\u30B7\u30E7\u30F3 CheckoutWizardCheckoutAsPage.multiple = {0}\u500B\u306E\u30D5\u30A9\u30EB\u30C0\u3092\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u3059\u308B\u65B9\u6CD5\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044 CheckoutWizardCheckoutAsPage.notAvailable = \uFF08\u30EA\u30DD\u30B8\u30C8\u30EA\u306B.project\u30D5\u30A1\u30A4\u30EB\u304C\u5B58\u5728\u3057\u306A\u3044\u5834\u5408\u306E\u307F\u6709\u52B9\uFF09 CheckoutWizardCheckoutAsPage.project = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3068\u3057\u3066\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u3078\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8 CheckoutWizardCheckoutAsPage.projectName = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u540D: CheckoutWizardCheckoutAsPage.projects = \u8907\u6570\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3068\u3057\u3066\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u3078\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8 CheckoutWizardCheckoutAsPage.single = \u30D5\u30A9\u30EB\u30C0 {0} \u3092\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u3059\u308B\u65B9\u6CD5\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044 CheckoutWizardCheckoutAsPage.text = \u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u306E\u65B9\u6CD5\u3068\u30EA\u30D3\u30B8\u30E7\u30F3\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002 CheckoutWizardCheckoutAsPage.wizard = \u65B0\u898F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30A6\u30A3\u30B6\u30FC\u30C9\u3092\u4F7F\u3063\u3066\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3068\u3057\u3066\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8 CheckoutWizardLocationPage.existing = \u65E2\u5B58\u306E\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\u5229\u7528: CheckoutWizardLocationPage.heading = \u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\u9078\u629E/\u751F\u6210 CheckoutWizardLocationPage.new = \u65B0\u898F\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u751F\u6210 CheckoutWizardLocationPage.text = \u65E2\u5B58\u306E\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\uFF65\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u9078\u629E\u3059\u308B\u304B\u65B0\u898F\u306E\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u4F5C\u6210\u3057\u3066\u304F\u3060\u3055\u3044\u3002 CheckoutWizardProjectPage.browse = \u53C2\u7167... CheckoutWizardProjectPage.default = \u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u3092\u4F7F\u7528 CheckoutWizardProjectPage.heading = \u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u30AA\u30D7\u30B7\u30E7\u30F3 CheckoutWizardProjectPage.location = \u30ED\u30B1\u30FC\u30B7\u30E7\u30F3: CheckoutWizardProjectPage.revision = \u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u3059\u308B\u30EA\u30D3\u30B8\u30E7\u30F3: CheckoutWizardProjectPage.text = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002 CheckoutWizardSelectionPage.heading = \u30D5\u30A9\u30EB\u30C0\u306E\u9078\u629E CheckoutWizardSelectionPage.text = SVN\u304B\u3089\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u3059\u308B\u30D5\u30A9\u30EB\u30C0\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002 ChooseRootUrlDialog.chooseRootUrl = \u30EB\u30FC\u30C8\u30FB\u30EA\u30DD\u30B8\u30C8\u30EA\u30FCURL\u3092\u9078\u629E : ChooseRootUrlDialog.rootUrlDialogTitle = \u30EB\u30FC\u30C8\u30FB\u30EA\u30DD\u30B8\u30C8\u30EA\u30FCURL ChooseUrlDialog.branches = \u30D6\u30E9\u30F3\u30C1 ChooseUrlDialog.delete = \u524A\u9664... ChooseUrlDialog.refresh = \u66F4\u65B0 ChooseUrlDialog.tags = \u30BF\u30B0 ChooseUrlDialog.title = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30D6\u30E9\u30A6\u30B6 CleanupAction.error = \u30AF\u30EA\u30FC\u30F3\u30A2\u30C3\u30D7\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002 CleanupOperation.0 = {0}\u3092\u30AF\u30EA\u30FC\u30F3\u30A2\u30C3\u30D7\u3057\u307E\u3059\u3002 CleanupOperation.taskName = SVN\u30AF\u30EA\u30FC\u30F3\u30A2\u30C3\u30D7 CommentCommitWizardPage.pageDescription = \u30B3\u30DF\u30C3\u30C8\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002 CommentCommitWizardPage.pageTitle = \u30B3\u30DF\u30C3\u30C8 CommentTemplatesPreferencePage.Description = \u30B3\u30E1\u30F3\u30C8\u30FB\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306E\u4F5C\u6210\u3001\u7DE8\u96C6\u3001\u524A\u9664(&C): CommentTemplatesPreferencePage.Edit = \u7DE8\u96C6(&E)... CommentTemplatesPreferencePage.EditCommentTemplateMessage = \u30B3\u30E1\u30F3\u30C8\uFF65\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: CommentTemplatesPreferencePage.EditCommentTemplateTitle = \u30B3\u30E1\u30F3\u30C8\uFF65\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u306E\u5165\u529B CommentTemplatesPreferencePage.New = \u65B0\u898F(&N)... CommentTemplatesPreferencePage.Preview = \u30D7\u30EC\u30D3\u30E5\u30FC(&w)... CommentTemplatesPreferencePage.Remove = \u524A\u9664(&R) CommitAction.commitFailed = \u30B3\u30DF\u30C3\u30C8\u306E\u5B9F\u884C\u4E2D\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 CommitCommentArea_0 = <\u30B3\u30DF\u30C3\u30C8\u30B3\u30E1\u30F3\u30C8\u3092\u5165\u529B\u3059\u308B\u306B\u306F\u3053\u3053\u3092\u30AF\u30EA\u30C3\u30AF> CommitCommentArea_1 = <\u4EE5\u524D\u306B\u5165\u529B\u3057\u305F\u30B3\u30E1\u30F3\u30C8\u3092\u9078\u629E> CommitCommentArea_2 = \u30B3\u30DF\u30C3\u30C8\u30B3\u30E1\u30F3\u30C8\u304C\u7A7A\u3067\u3059 CommitCommentArea_3 = \u30B3\u30DF\u30C3\u30C8\u30B3\u30E1\u30F3\u30C8\u304C\u7A7A\u3067\u3059\u3002\u3053\u306E\u307E\u307E\u7D9A\u884C\u3057\u307E\u3059\u304B\uFF1F CommitCommentArea_4 = \u6C7A\u5B9A\u3092\u4FDD\u6301\u3057\u307E\u3059\u304B\uFF1F(&m) CommitCommentArea_5 = \u30B3\u30E1\u30F3\u30C8\u30FB\u30C6\u30F3\u30D7\u30EC\u30FC\u30C8\u3092\u69CB\u6210\u4E2D... CommitCommentArea_6 = \u30C6\u30F3\u30D7\u30EC\u30FC\u30C8 CommitDialog.0 = {0}\u306F\u5165\u529B\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u30B3\u30DF\u30C3\u30C8\u3057\u307E\u3059\u304B? CommitDialog.added = \u8FFD\u52A0 CommitDialog.commitTo = \u30B3\u30DF\u30C3\u30C8\u5148: CommitDialog.conflicted = \u7AF6\u5408 CommitDialog.deleted = \u524A\u9664 CommitDialog.deselectUnadded = \u30D0\u30FC\u30B8\u30E7\u30F3\u672A\u7BA1\u7406\u306E\u9078\u629E\u89E3\u9664(&U) CommitDialog.keepLocks = \u30ED\u30C3\u30AF\u3092\u53D6\u5F97 CommitDialog.missing = \u6B20\u843D CommitDialog.modified = \u5909\u66F4 CommitDialog.multiple = \u8907\u6570\u306E\u30BF\u30FC\u30B2\u30C3\u30C8\u304C\u9078\u629E\u3055\u308C\u307E\u3057\u305F CommitDialog.noChanges = \u6700\u5F8C\u306E\u30B3\u30DF\u30C3\u30C8\u304B\u3089\u30D5\u30A1\u30A4\u30EB\u306E\u5909\u66F4\u3082\u3057\u304F\u306F\u8FFD\u52A0\u306F\u3042\u308A\u307E\u305B\u3093. CommitDialog.number = {0}\u306F\u6570\u5B57\u3082\u3057\u304F\u306F\u7A7A\u6B04\u3067\u3067\u306A\u3051\u308C\u3070\u3044\u3051\u307E\u305B\u3093(\u30AB\u30F3\u30DE\u306F\u30BB\u30D1\u30EC\u30FC\u30BF\u3068\u3057\u3066\u5229\u7528\u3067\u304D\u307E\u3059)\u3002 CommitDialog.propertiesModified = \u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u5909\u66F4 CommitDialog.property = \u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u72B6\u614B CommitDialog.replaced = \u7F6E\u63DB CommitDialog.resources = \u9078\u629E\u3055\u308C\u305F\u30EA\u30BD\u30FC\u30B9\u306FSVN\u30D0\u30FC\u30B8\u30E7\u30F3\u30B3\u30F3\u30C8\u30ED\u30FC\u30EB\u306E\u305F\u3081\u306B\u30B3\u30DF\u30C3\u30C8\u3055\u308C\u307E\u3059\u3002 CommitDialog.status = \u30C6\u30AD\u30B9\u30C8\u30B9\u30C6\u30FC\u30BF\u30B9 CommitDialog.tag = \u8B66\u544A: \u30EF\u30FC\u30AD\u30F3\u30B0\u30B3\u30D4\u30FC\u304C\u30BF\u30B0\u30D1\u30B9\u4E0A\u306B\u3042\u308A\u307E\u3059\u3002\u30B3\u30DF\u30C3\u30C8\u3059\u308B\u524D\u306B\u30D6\u30E9\u30F3\u30C1\u3082\u3057\u304F\u304B\u30E1\u30A4\u30F3\u30C8\u30E9\u30F3\u30AF\u306B\u5207\u308A\u63DB\u3048\u308B\u3079\u304D\u3067\u3059\u3002\u5207\u308A\u63DB\u3048\u3092\u884C\u308F\u305A\u306B\u30B3\u30DF\u30C3\u30C8\u3057\u307E\u3059\u304B? CommitDialog.title = \u30B3\u30DF\u30C3\u30C8 CommitDialog.unselectedPropChangeChildren = \u30D5\u30A9\u30EB\u30C0\u306E\u524A\u9664\u3068\u30D5\u30A9\u30EB\u30C0\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u4E21\u65B9\u3092\u9078\u629E\u3057\u305F\u5834\u5408\u3001\r\n\u305D\u306E\u30D5\u30A9\u30EB\u30C0\u306E\u76F4\u4E0B\u306E\u5168\u3066\u306E\u30D5\u30A1\u30A4\u30EB\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u5909\u66F4\u3082\u9078\u629E\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002 CommitDialog.unversioned = \u30D0\u30FC\u30B8\u30E7\u30F3\u672A\u7BA1\u7406 CommitOperation.taskName = SVN\u30B3\u30DF\u30C3\u30C8 CommitSetDialog_0 = \u540D\u524D(&N): CommitSetDialog_2 = \u30B3\u30DF\u30C3\u30C8\u30FB\u30B3\u30E1\u30F3\u30C8\u3068\u3057\u3066\u30BF\u30A4\u30C8\u30EB\u3092\u3057\u3088\u3046(&t) CommitSetDialog_3 = \u30B3\u30DF\u30C3\u30C8\u30FB\u30B3\u30E1\u30F3\u30C8\u3092\u5165\u529B(&c) CommitSyncAction.cancelRelease = \u30EA\u30EA\u30FC\u30B9\u64CD\u4F5C\u3092\u30AD\u30E3\u30F3\u30BB\u30EB\u3057\u307E\u3059\u3002 CommitSyncAction.errorCommitting = \u5909\u66F4\u306E\u30B3\u30DF\u30C3\u30C8\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 CommitSyncAction.questionRelease = \u30B5\u30FC\u30D0\u30FC\u3068\u7AF6\u5408\u3057\u3066\u3044\u308B\u5909\u66F4\u304C\u3042\u308A\u307E\u3059\u3002 \u3053\u308C\u3089\u306E\u5909\u66F4\u3092\u30EA\u30EA\u30FC\u30B9\u3057\u307E\u3059\u304B? CommitSyncAction.releaseAll = \u3059\u3079\u3066\u306E\u5909\u66F4\u3092\u30EA\u30EA\u30FC\u30B9\u3057\u3066\u3001\u30B5\u30FC\u30D0\u30FC\u4E0A\u306E\u3059\u3079\u3066\u306E\u7AF6\u5408\u5909\u66F4\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3059\u3002 CommitSyncAction.releasePart = \u30B5\u30FC\u30D0\u30FC\u4E0A\u306E\u5909\u66F4\u3068\u7AF6\u5408\u3057\u3066\u3044\u306A\u3044\u5909\u66F4\u306E\u307F\u30EA\u30EA\u30FC\u30B9\u3057\u307E\u3059\u3002 CommitSyncAction.titleRelease = \u4E0A\u66F8\u304D\u306E\u78BA\u8A8D CompareEditorInput.fileProgress = SVN \u30D5\u30A1\u30A4\u30EB\u3092\u6BD4\u8F03\u4E2D: {0} CompareWithRemoteAction.compare = \u6700\u65B0\u3068\u306E\u6BD4\u8F03\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 CompareWithRemoteAction.fetching = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u304B\u3089\u306E\u6700\u65B0\u3068\u6BD4\u8F03\u4E2D... CompareWithRemoteAction.noRemote = \u30EA\u30E2\u30FC\u30C8\u30FB\u30EA\u30BD\u30FC\u30B9\u304C\u3042\u308A\u307E\u305B\u3093\u3002 CompareWithRemoteAction.noRemoteLong = \u9078\u629E\u3055\u308C\u305F\u30EA\u30BD\u30FC\u30B9\u306F\u3001\u6BD4\u8F03\u3059\u308B\u30EA\u30E2\u30FC\u30C8\u30FB\u30EA\u30BD\u30FC\u30B9\u3092\u6301\u3063\u3066\u3044\u307E\u305B\u3093\u3002 CompareWithRevisionAction.compare = \u30EA\u30D3\u30B8\u30E7\u30F3\u3068\u306E\u6BD4\u8F03\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 CompareWithRevisionAction.fetching = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u304B\u3089\u30EA\u30D3\u30B8\u30E7\u30F3\u3092\u53D6\u308A\u51FA\u3057\u4E2D... CompareWithRevisionAction.noRevisions = \u30EA\u30D3\u30B8\u30E7\u30F3\u304C\u3042\u308A\u307E\u305B\u3093\u3002 CompareWithRevisionAction.noRevisionsLong = \u9078\u629E\u3055\u308C\u305F\u30EA\u30BD\u30FC\u30B9\u306F\u3001\u6BD4\u8F03\u3059\u308B\u30EA\u30D3\u30B8\u30E7\u30F3\u3092\u6301\u3063\u3066\u3044\u307E\u305B\u3093\u3002 CompareWithTagAction.fetching = \u30BF\u30B0 {0} \u3092\u6301\u3064\u30EA\u30BD\u30FC\u30B9\u3092\u53D6\u308A\u51FA\u3057\u4E2D... CompareWithTagAction.message = \u30D6\u30E9\u30F3\u30C1\u307E\u305F\u306F\u30D0\u30FC\u30B8\u30E7\u30F3\u3068\u306E\u6BD4\u8F03 CompareWithTagAction.noRemote = \u30EA\u30E2\u30FC\u30C8\u30FB\u30EA\u30BD\u30FC\u30B9\u304C\u3042\u308A\u307E\u305B\u3093\u3002 CompareWithTagAction.noRemoteLong = \u9078\u629E\u3055\u308C\u305F\u30BF\u30B0\u306F\u3001\u6BD4\u8F03\u3059\u308B\u30EA\u30E2\u30FC\u30C8\u30FB\u30EA\u30BD\u30FC\u30B9\u3092\u6301\u3063\u3066\u3044\u307E\u305B\u3093\u3002 CompareWithTagAction.replace = \u30D6\u30E9\u30F3\u30C1\u307E\u305F\u306F\u30D0\u30FC\u30B8\u30E7\u30F3\u3068\u306E\u6BD4\u8F03\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 ConfigurationWizardAutoconnectPage.connectionType = \u63A5\u7D9A\u30BF\u30A4\u30D7: ConfigurationWizardAutoconnectPage.default = \u30C7\u30D5\u30A9\u30EB\u30C8 ConfigurationWizardAutoconnectPage.description = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u306F\u3059\u3067\u306B SVN/ \u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30FC\u304C\u3042\u308A\u307E\u3059\u3002 \u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u524D\u306B\u5171\u7528\u3055\u308C\u3066\u3044\u305F\u304B\u3001\u307E\u305F\u306F\u5225\u306E\u30C4\u30FC\u30EB\u3092\u4F7F\u7528\u3057\u3066\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u3055\u308C\u305F\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002 \u6B21\u306E\u60C5\u5831\u3092\u4F7F\u7528\u3057\u3066\u81EA\u52D5\u7684\u306B\u5171\u7528\u3055\u308C\u307E\u3059\u3002 ConfigurationWizardAutoconnectPage.host = \u30DB\u30B9\u30C8: ConfigurationWizardAutoconnectPage.module = \u30D5\u30A9\u30EB\u30C0: ConfigurationWizardAutoconnectPage.noSVNDirectory = SVN/ \u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30FC\u3092\u898B\u3064\u3051\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002 ConfigurationWizardAutoconnectPage.noSyncInfo = \u30D5\u30A9\u30EB\u30C0\u60C5\u5831\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002 ConfigurationWizardAutoconnectPage.port = \u30DD\u30FC\u30C8: ConfigurationWizardAutoconnectPage.repositoryPath = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30D1\u30B9: ConfigurationWizardAutoconnectPage.user = \u30E6\u30FC\u30B6\u30FC: ConfigurationWizardAutoconnectPage.validate = \u7D42\u4E86\u6642\u306B\u63A5\u7D9A\u3092\u691C\u8A3C(&V) ConfigurationWizardMainPage.Authentication_2 = \u8A8D\u8A3C ConfigurationWizardMainPage.Connection_3 = \u63A5\u7D9A ConfigurationWizardMainPage.Location_1 = \u30ED\u30B1\u30FC\u30B7\u30E7\u30F3 ConfigurationWizardMainPage.browseRootUrl = \u53C2\u7167 ... ConfigurationWizardMainPage.connection = \u63A5\u7D9A\u30BF\u30A4\u30D7(&C): ConfigurationWizardMainPage.invalidHostName = \u7121\u52B9\u306A\u30DB\u30B9\u30C8\u540D ConfigurationWizardMainPage.invalidPathWithSlashes = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30D1\u30B9\u306B\u306F\u30C0\u30D6\u30EB\u30FB\u30B9\u30E9\u30C3\u30B7\u30E5 (//) \u3092\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093\u3002 ConfigurationWizardMainPage.invalidPathWithSpaces = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30D1\u30B9\u306F\u5148\u982D\u307E\u305F\u306F\u672B\u5C3E\u306B\u30B9\u30DA\u30FC\u30B9\u306E\u4ED8\u3044\u305F\u30BB\u30B0\u30E1\u30F3\u30C8\u3092\u6301\u3064\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002 ConfigurationWizardMainPage.invalidPort = \u7121\u52B9\u306A\u30DD\u30FC\u30C8 ConfigurationWizardMainPage.invalidUrl = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306E\u30D1\u30B9{0}\u306F\u4E0D\u6B63\u3067\u3059\u3002\u59A5\u5F53\u306AURL\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002 ConfigurationWizardMainPage.invalidUserName = \u7121\u52B9\u306A\u30E6\u30FC\u30B6\u30FC\u540D ConfigurationWizardMainPage.password = \u30D1\u30B9\u30EF\u30FC\u30C9(&P): ConfigurationWizardMainPage.repositoryPath = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30D1\u30B9(&R): ConfigurationWizardMainPage.rootUrl = \u30EB\u30FC\u30C8URL: ConfigurationWizardMainPage.rootUrlWarning = \u3082\u3057\u30EA\u30DD\u30B8\u30C8\u30EA\u30FCURL\u304Chttp://mycompany.com/repository/trunk/project\u3067\u3042\u308C\u3070\u3001\r\n\u30EB\u30FC\u30C8\u30FB\u30EA\u30DD\u30B8\u30C8\u30EAURL\u306F\u304A\u305D\u3089\u304Fhttp://mycompany.com/repository\u3067\u3059\u3002 ConfigurationWizardMainPage.url = &Url: ConfigurationWizardMainPage.useDefaultPort = \u30C7\u30D5\u30A9\u30EB\u30C8\u30FB\u30DD\u30FC\u30C8\u3092\u4F7F\u7528(&O) ConfigurationWizardMainPage.usePort = \u30DD\u30FC\u30C8\u306E\u4F7F\u7528(&T): ConfigurationWizardMainPage.userName = \u30E6\u30FC\u30B6\u30FC(&U): ConfigureTagsDialog.add = \u8FFD\u52A0 ConfigureTagsDialog.addBranch = \u30D6\u30E9\u30F3\u30C1\u3092\u8FFD\u52A0 ConfigureTagsDialog.addTag = \u30BF\u30B0\u3092\u8FFD\u52A0 ConfigureTagsDialog.apply = \u9069\u7528 ConfigureTagsDialog.branch = \u30D6\u30E9\u30F3\u30C1 ConfigureTagsDialog.branchHeader = \u30D6\u30E9\u30F3\u30C1: ConfigureTagsDialog.browse = \u53C2\u7167 ConfigureTagsDialog.confirmExit = \u66F4\u65B0\u305B\u305A\u306B\u4E2D\u65AD\u3057\u307E\u3059\u304B? ConfigureTagsDialog.delete = \u524A\u9664 ConfigureTagsDialog.loadBranchesMessage = \u30D6\u30E9\u30F3\u30C1\u3092\u4F5C\u6210\u3057\u305F\u3044\u30D5\u30A9\u30EB\u30C0\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u8907\u6570\u9078\u629E\u306B\u306FShift+\u30AF\u30EA\u30C3\u30AF\u3084Ctrl+\u30AF\u30EA\u30C3\u30AF\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002 ConfigureTagsDialog.loadTagsMessage = \u30BF\u30B0\u3092\u4F5C\u6210\u3057\u305F\u3044\u30D5\u30A9\u30EB\u30C0\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u8907\u6570\u9078\u629E\u306B\u306FShift+\u30AF\u30EA\u30C3\u30AF\u3084Ctrl+\u30AF\u30EA\u30C3\u30AF\u3092\u4F7F\u3063\u3066\u304F\u3060\u3055\u3044\u3002 ConfigureTagsDialog.name = \u540D\u524D: ConfigureTagsDialog.newBranch = \u65B0\u898F\u30D6\u30E9\u30F3\u30C1: ConfigureTagsDialog.newTag = \u65B0\u898F\u30BF\u30B0: ConfigureTagsDialog.path = \u76F8\u5BFE\u30D1\u30B9: ConfigureTagsDialog.pendingUpdate = \u9078\u629E\u3057\u305F\u30D6\u30E9\u30F3\u30C1\u307E\u305F\u306F\u30BF\u30B0\u306B\u5909\u66F4\u304C\u52A0\u3048\u3089\u308C\u3066\u3044\u307E\u3059\u3002\u3053\u308C\u3089\u306E\u5909\u66F4\u3092\u9069\u7528\u3057\u307E\u3059\u304B? ConfigureTagsDialog.revision = \u30EA\u30D3\u30B8\u30E7\u30F3: ConfigureTagsDialog.tagHeader = \u30BF\u30B0: ConfigureTagsDialog.text = \u8A2D\u5B9A\u306B\u52A0\u3048\u305F\u3044\u30D6\u30E9\u30F3\u30C1/\u30BF\u30B0\u3092\u793A\u3059\u30D5\u30A9\u30EB\u30C0\u30921\u3064\u4EE5\u4E0A\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002\r\n\u305D\u306E\u5F8C\u53F3\u30AF\u30EA\u30C3\u30AF\u3057\u3001\u9069\u5207\u306A\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u9078\u3093\u3067\u304F\u3060\u3055\u3044\u3002 ConfigureTagsDialog.title = \u30D6\u30E9\u30F3\u30C1/\u30BF\u30B0\u306E\u8A2D\u5B9A ConfigureTagsDialog.url = URL: ConfigureTagsFromRepoViewConfigure_Tag_Error_1 = \u30BF\u30B0\u306E\u69CB\u6210\u30A8\u30E9\u30FC Configure_the_options_used_for_the_SVN_diff_command_20 = SVN diff \u30B3\u30DE\u30F3\u30C9\u3067\u4F7F\u7528\u3055\u308C\u308B\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u69CB\u6210\u3057\u307E\u3059\u3002 Console.clearOutput = \u51FA\u529B\u306E\u30AF\u30EA\u30A2 Console.copy = \u30B3\u30D4\u30FC Console.couldNotFormatTime = SVN \u30B3\u30F3\u30BD\u30FC\u30EB\u306E\u51FA\u529B\u6642\u9593\u306E\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 Console.error = \u30A8\u30E9\u30FC: {0} Console.info = \u60C5\u5831: {0} Console.postExecutionDelimiter = *** Console.preExecutionDelimiter = *** Console.resultAborted = \u64CD\u4F5C\u306F\u30AD\u30E3\u30F3\u30BB\u30EB\u3055\u308C\u307E\u3057\u305F {0} Console.resultException = \u5185\u90E8\u30A8\u30E9\u30FC {0} \u306E\u305F\u3081\u306B\u5931\u6557\u3057\u307E\u3057\u305F\u3002 Console.resultOk = ok {0} Console.resultServerError = {0} {1} Console.resultTimeFormat = '(took 'm:ss.SSS')' Console.resultWarnings = {0} {1} Console.selectAll = \u3059\u3079\u3066\u9078\u629E Console.warning = \u8B66\u544A: {0} ConsolePreferencePage.commandColor = \u30B3\u30DE\u30F3\u30C9\u884C(&L): ConsolePreferencePage.consoleColorSettings = \u30B3\u30F3\u30BD\u30FC\u30EB\u30FB\u30C6\u30AD\u30B9\u30C8\u306E\u8272\u8A2D\u5B9A: ConsolePreferencePage.errorColor = \u30A8\u30E9\u30FC(&R): ConsolePreferencePage.font = \u30B3\u30F3\u30BD\u30FC\u30EB\u30FB\u30D5\u30A9\u30F3\u30C8\u8A2D\u5B9A: ConsolePreferencePage.highWaterMark = \u30B3\u30F3\u30BD\u30FC\u30EB\u30FB\u30D0\u30C3\u30D5\u30A1\u30B5\u30A4\u30BA\uFF08\u6587\u5B57\u6570\uFF09(&b): ConsolePreferencePage.limitOutput = \u30B3\u30F3\u30BD\u30FC\u30EB\u51FA\u529B\u3092\u5236\u9650(&L) ConsolePreferencePage.messageColor = \u30E1\u30C3\u30BB\u30FC\u30B8(&M): ConsolePreferencePage.showOnError = \u30A8\u30E9\u30FC\u767A\u751F\u6642\u306BSVN\u30B3\u30F3\u30BD\u30FC\u30EB\u3092\u81EA\u52D5\u8868\u793A ConsolePreferencePage.showOnMessage = \u30B3\u30DE\u30F3\u30C9\u5B9F\u884C\u6642\u306BSVN\u30B3\u30F3\u30BD\u30FC\u30EB\u3092\u81EA\u52D5\u8868\u793A ConsoleRemoveAction.label = SVN\u30B3\u30F3\u30BD\u30FC\u30EB\u3092\u9589\u3058\u308B ConsoleRemoveAction.tooltip = SVN\u30B3\u30F3\u30BD\u30FC\u30EB\u3092\u9589\u3058\u308B ContentAction.Changing_this_setting_will_involve_contacting_the_server_and_may_be_long-running_2 = \u3053\u306E\u8A2D\u5B9A\u3092\u5909\u66F4\u3059\u308B\u3068\u3001\u30B5\u30FC\u30D0\u30FC\u3068\u306E\u63A5\u7D9A\u304C\u5FC5\u8981\u306B\u306A\u308B\u305F\u3081\u3001\u6642\u9593\u304C\u304B\u304B\u308B\u53EF\u80FD\u6027\u304C\u3042\u308A\u307E\u3059\u3002 ContentAction.Confirm_Long_Operation_1 = \u9577\u3044\u64CD\u4F5C\u306E\u78BA\u8A8D Context_14 = \u30B3\u30F3\u30C6\u30AD\u30B9\u30C8(&C) CopyAction.copy = \u30B3\u30D4\u30FC CopyAction.nameConflictMessage = ''{0}'\u306E\u65B0\u3057\u3044\u540D\u524D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: CopyAction.nameConflictSame = \u65B0\u3057\u3044\u540D\u524D\u306F\u5FC5\u9808\u3067\u3059\u3002 CopyAction.nameConflictTitle = \u540D\u524D\u885D\u7A81 CopyAction.selectionLabel = \u30B3\u30D4\u30FC\u5148 DateSelectionDialog.april = 4\u6708 DateSelectionDialog.august = 8\u6708 DateSelectionDialog.december = 12\u6708 DateSelectionDialog.february = 2\u6708 DateSelectionDialog.friday = \u91D1 DateSelectionDialog.january = 1\u6708 DateSelectionDialog.july = 7\u6708 DateSelectionDialog.june = 6\u6708 DateSelectionDialog.march = 3\u6708 DateSelectionDialog.may = 5\u6708 DateSelectionDialog.monday = \u6708 DateSelectionDialog.november = 11\u6708 DateSelectionDialog.october = 10\u6708 DateSelectionDialog.saturday = \u571F DateSelectionDialog.september = 9\u6708 DateSelectionDialog.sunday = \u65E5 DateSelectionDialog.thursday = \u6728 DateSelectionDialog.title = \u65E5\u4ED8\u9078\u629E DateSelectionDialog.tuesday = \u706B DateSelectionDialog.wednesday = \u6C34 DiffAction.diff = \u76F8\u9055 DiffMergePreferencePage.addVariableDialogTitle = \u5909\u6570\u306E\u8FFD\u52A0 DiffMergePreferencePage.baseVariableComment = \u5909\u66F4\u3092\u7121\u8996\u3057\u305F\u30AA\u30EA\u30B8\u30CA\u30EB\u306E\u30D5\u30A1\u30A4\u30EB DiffMergePreferencePage.browse = \u53C2\u7167... DiffMergePreferencePage.builtInMerge = \u30D3\u30EB\u30C8\u30A4\u30F3 DiffMergePreferencePage.externalMerge = \u5916\u90E8 DiffMergePreferencePage.mergeProgramGroup = \u30DE\u30FC\u30B8\u30D7\u30ED\u30B0\u30E9\u30E0 DiffMergePreferencePage.mergeProgramParameters = \u30D1\u30E9\u30E1\u30FC\u30BF : DiffMergePreferencePage.mergeProgramVariables = \u5909\u6570 DiffMergePreferencePage.mergedVariableComment = \u30DE\u30FC\u30B8\u3059\u308B\u7AF6\u5408\u3057\u305F\u30D5\u30A1\u30A4\u30EB DiffMergePreferencePage.theirsVariableComment = \u30EA\u30DD\u30B8\u30C8\u30EA\u4E0A\u306E\u30D5\u30A1\u30A4\u30EB DiffMergePreferencePage.tortoiseMergeComment1 = Tortoise\u30DE\u30FC\u30B8\u306E\u30D1\u30E9\u30E1\u30FC\u30BF : DiffMergePreferencePage.tortoiseMergeComment2 = /theirs:"${theirs}" /base:"${base}" /mine:"${yours}" /merged:"${merged}" DiffMergePreferencePage.yoursVariableComment = \u5909\u66F4\u3092\u542B\u3080\u30ED\u30FC\u30AB\u30EB\u306E\u30D5\u30A1\u30A4\u30EB DiffNewFilesDialog.resources = \u30C1\u30A7\u30C3\u30AF\u3057\u305F\u30EA\u30BD\u30FC\u30B9\u304C\u30D1\u30C3\u30C1\u306B\u542B\u307E\u308C\u307E\u3059\u3002 DiffNewFilesDialog.title = \u30D1\u30C3\u30C1\u306B\u30D0\u30FC\u30B8\u30E7\u30F3\u7BA1\u7406\u3057\u3066\u3044\u306A\u3044\u30D5\u30A1\u30A4\u30EB\u3092\u542B\u3080 Do_nothing_5 = \u4F55\u3082\u3057\u306A\u3044 EditConflicts.Label = \u7AF6\u5408\u306E\u7DE8\u96C6 EditConflictsAction.errorTitle = \u7AF6\u5408\u306E\u7DE8\u96C6 EditConflictsAction.mergeProgramDoesNotExist = \u8A2D\u5B9A\u3055\u308C\u305F\u30DE\u30FC\u30B8\u30D7\u30ED\u30B0\u30E9\u30E0\u306F\u5B58\u5728\u3057\u307E\u305B\u3093 EditConflictsAction.noMergeProgramConfigured = \u30DE\u30FC\u30B8\u30D7\u30ED\u30B0\u30E9\u30E0\u304C\u8A2D\u5B9A\u3055\u308C\u3066\u3044\u307E\u305B\u3093 EditorsAction.classNotInitialized = {0} \u306F\u521D\u671F\u5316\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002 EditorsDialog.question = \u30EA\u30BD\u30FC\u30B9\u306B\u306F\u3059\u3067\u306B\u30A8\u30C7\u30A3\u30BF\u30FC\u304C\u3042\u308A\u307E\u3059\u3002 \u3053\u306E\u30EA\u30BD\u30FC\u30B9\u3092\u5909\u66F4\u3057\u3001SVN \u7DE8\u96C6\u901A\u77E5\u3092\u30B5\u30FC\u30D0\u30FC\u306B\u9001\u4FE1\u3057\u307E\u3059\u304B? EditorsDialog.title = \u30A8\u30C7\u30A3\u30BF\u30FC EditorsView.computer = \u30B3\u30F3\u30D4\u30E5\u30FC\u30BF\u30FC\u540D EditorsView.date = \u65E5\u4ED8 EditorsView.file = \u30D5\u30A1\u30A4\u30EB\u540D EditorsView.user = \u30E6\u30FC\u30B6\u30FC\u540D Example__1 = \u4F8B: ExportAction.export = \u30A8\u30AF\u30B9\u30DD\u30FC\u30C8 ExportAction.exportTo = \u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u5148 ExportOperation.0 = {0}\u3092\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8 ExportOperation.taskName = SVN\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8 ExportRemoteFolderAction.directoryDialogText = \u30EA\u30E2\u30FC\u30C8\u30D5\u30A9\u30EB\u30C0\u3092\u30A8\u30AF\u30B9\u30DD\u30FC\u30C8 ExportRemoteFolderDialog.browse = \u53C2\u7167... ExportRemoteFolderDialog.directory = \u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3059\u308B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA: ExportRemoteFolderDialog.directoryError = \u30A8\u30AF\u30B9\u30DD\u30FC\u30C8\u3059\u308B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u304C\u5B58\u5728\u3057\u307E\u305B\u3093\u3002 ExportRemoteFolderDialog.repository = \u30EA\u30DD\u30B8\u30C8\u30EA ExportRemoteFolderDialog.url = \u30EA\u30DD\u30B8\u30C8\u30EA\u306EURL ExtMethodPreferencePage_Add_Variable = \u5909\u6570\u306E\u8FFD\u52A0(&A)... ExtMethodPreferencePage_Browse = \u53C2\u7167(&B)... ExtMethodPreferencePage_Details = \u30D7\u30ED\u30B0\u30E9\u30E0\u307E\u305F\u306F\u30B9\u30AF\u30EA\u30D7\u30C8\u306E\u9078\u629E ExtMethodPreferencePage_SVN_SERVER__7 = SVN\u30B5\u30FC\u30D0\u30FC(&S): ExtMethodPreferencePage_message = \u3053\u308C\u3089\u306E\u5909\u6570\u306F\u3001'ext' \u63A5\u7D9A\u30E1\u30BD\u30C3\u30C9\u3068\u3068\u3082\u306B\u4F7F\u7528\u3059\u308B\u5916\u90E8\u63A5\u7D9A\u30D7\u30ED\u30B0\u30E9\u30E0\u3092\u5B9A\u7FA9\u3057\u307E\u3059\u3002 \r\n\u3053\u308C\u3089\u306E\u5024\u306F\u3001'ext' SVN \u30B3\u30DE\u30F3\u30C9\u884C\u74B0\u5883\u5909\u6570\u8A2D\u5B9A\u3068\u540C\u3058\u3067\u306A\u3051\u308C\u3070\u306A\u308A\u307E\u305B\u3093\u3002 FetchMembersOperation.message = {0}\u306E\u5B50\u3092\u53D6\u308A\u51FA\u3057 FetchMembersOperation.taskName = {0}\u3092\u53D6\u308A\u51FA\u3057... FixTypeAction.fix = \u4FEE\u6B63\u578B ForceCommitSyncAction.Outgoing_Changes_Not_Added_1 = \u767A\u4FE1\u5909\u66F4\u306F\u8FFD\u52A0\u3055\u308C\u307E\u305B\u3093\u3002 ForceCommitSyncAction.You_have_chosen_to_commit_new_resources_which_have_not_been_added_to_version_control._Do_you_wish_to_add_them_to_version_control_now__2 = \u30D0\u30FC\u30B8\u30E7\u30F3\u7BA1\u7406\u306B\u8FFD\u52A0\u3055\u308C\u3066\u3044\u306A\u3044\u65B0\u898F\u30EA\u30BD\u30FC\u30B9\u3092\u30B3\u30DF\u30C3\u30C8\u3059\u308B\u3088\u3046\u306B\u9078\u629E\u3057\u307E\u3057\u305F\u3002 \u30D0\u30FC\u30B8\u30E7\u30F3\u7BA1\u7406\u306B\u8FFD\u52A0\u3057\u307E\u3059\u304B ? GenerateSVNDiff.AdvancedOptions = \u62E1\u5F35\u30AA\u30D7\u30B7\u30E7\u30F3 GenerateSVNDiff.Browse = \u53C2\u7167(&O)... GenerateSVNDiff.ConfigureOptions = SVN diff\u30B3\u30DE\u30F3\u30C9\u3067\u5229\u7528\u3055\u308C\u308B\u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u8A2D\u5B9A GenerateSVNDiff.EnterFilename = \u6709\u52B9\u306A\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u5165\u529B\u3059\u308B\u304B\u3001\u307E\u305F\u306F\u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u30FB\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002 GenerateSVNDiff.FileName = \u30D5\u30A1\u30A4\u30EB\u540D(&L): GenerateSVNDiff.RecurseOption = \u30B5\u30D6\u30D5\u30A9\u30EB\u30C0\u306B\u518D\u5E30(&R) GenerateSVNDiff.SaveInFileSystem = \u30D5\u30A1\u30A4\u30EB\u30FB\u30B7\u30B9\u30C6\u30E0\u306B\u4FDD\u7BA1(&V) GenerateSVNDiff.SaveInWorkspace = \u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u306B\u4FDD\u7BA1(&W) GenerateSVNDiff.SavePatchAs = =Save Patch As GenerateSVNDiff.SaveToClipboard = \u30AF\u30EA\u30C3\u30D7\u30DC\u30FC\u30C9\u306B\u30B3\u30D4\u30FC(&S) GenerateSVNDiff.SelectFolderAndFilename = \u30D5\u30A9\u30EB\u30C0\u30FC\u3092\u9078\u629E\u3057\u3066\u3001\u30D5\u30A1\u30A4\u30EB\u540D\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044(&D): GenerateSVNDiff.error = SVN diff \u30B3\u30DE\u30F3\u30C9\u306E\u5B9F\u884C\u3067\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 GenerateSVNDiff.noDiffsFoundMsg = \u9055\u3044\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002 GenerateSVNDiff.noDiffsFoundTitle = SVN diff GenerateSVNDiff.overwriteMsg = \u3053\u306E\u540D\u524D\u306E\u30D5\u30A1\u30A4\u30EB\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059\u3002 \u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B? GenerateSVNDiff.overwriteTitle = \u4E0A\u66F8\u304D\u306E\u78BA\u8A8D GenerateSVNDiff.pageDescription = SVN diff\u30B3\u30DE\u30F3\u30C9\u306E\u7D50\u679C\u306F\u300C\u30D1\u30C3\u30C1\u306E\u9069\u7528\u300D\u30A6\u30A3\u30B6\u30FC\u30C9\u306E\u5165\u529B\u30D5\u30A1\u30A4\u30EB\u3068\u3057\u3066\u4F7F\u7528\u3067\u304D\u307E\u3059\u3002 GenerateSVNDiff.pageTitle = SVN diff \u3092\u5B9F\u884C\u3057\u3066\u7D50\u679C\u3092\u30D5\u30A1\u30A4\u30EB\u306B\u4FDD\u7BA1 GenerateSVNDiff.patchTxt = patch.txt GenerateSVNDiff.title = \u30D1\u30C3\u30C1\u306E\u4F5C\u6210 GenerateSVNDiff.working = SVN diff \u3092\u5B9F\u884C\u4E2D... GetSyncAction.cancelCatchup = \u30AD\u30E3\u30C3\u30C1\u30A2\u30C3\u30D7\u64CD\u4F5C\u3092\u30AD\u30E3\u30F3\u30BB\u30EB\u3057\u307E\u3059\u3002 GetSyncAction.catchupAll = \u3059\u3079\u3066\u306E\u5909\u66F4\u7B87\u6240\u3092\u30AD\u30E3\u30C3\u30C1\u30A2\u30C3\u30D7\u3057\u3066\u3001\u7AF6\u5408\u3057\u3066\u3044\u308B\u30ED\u30FC\u30AB\u30EB\u5909\u66F4\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3059\u3002 GetSyncAction.catchupPart = \u30ED\u30FC\u30AB\u30EB\u5909\u66F4\u3068\u7AF6\u5408\u3057\u3066\u3044\u306A\u3044\u5909\u66F4\u306B\u306E\u307F\u30AD\u30E3\u30C3\u30C1\u30A2\u30C3\u30D7\u3057\u307E\u3059\u3002 GetSyncAction.questionCatchup = \u4E0A\u66F8\u304D\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308B\u3082\u306E\u306F\u3001\u30ED\u30FC\u30AB\u30EB\u306B\u5909\u66F4\u3055\u308C\u3066\u3044\u307E\u3059\u3002 \u7AF6\u5408\u3057\u3066\u3044\u308B\u5909\u66F4\u3092\u8FFD\u52A0\u3057\u307E\u3059\u304B? GetSyncAction.titleCatchup = \u7AF6\u5408\u3092\u30AD\u30E3\u30C3\u30C1\u30A2\u30C3\u30D7\u3057\u307E\u3059\u304B? GlobalRefreshResourceSelectionPage.10 = \u30EF\u30FC\u30AD\u30F3\u30B0\u30BB\u30C3\u30C8(&W): GlobalRefreshResourceSelectionPage.11 = \u9078\u629E(&C)... GlobalRefreshResourceSelectionPage.12 = \u3059\u3079\u3066\u9078\u629E(&A) GlobalRefreshResourceSelectionPage.13 = \u9078\u629E\u3092\u3059\u3079\u3066\u89E3\u9664(&D) GlobalRefreshResourceSelectionPage.2 = \u540C\u671F\u3059\u308B\u30EA\u30BD\u30FC\u30B9\u3082\u3057\u304F\u306F\u30B0\u30EB\u30FC\u30D7\u5316\u3055\u308C\u305F\u30EA\u30BD\u30FC\u30B9\u3092\u81EA\u52D5\u7684\u306B\u9078\u629E\u3059\u308B\u30B9\u30B3\u30FC\u30D7\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002 GlobalRefreshResourceSelectionPage.3 = \u540C\u671F\u5316 GlobalRefreshResourceSelectionPage.4 = \u540C\u671F\u3059\u308B\u30EA\u30BD\u30FC\u30B9\u304C\u3042\u308A\u307E\u305B\u3093 GlobalRefreshResourceSelectionPage.5 = \u540C\u671F\u53EF\u80FD\u306A\u30EA\u30BD\u30FC\u30B9: GlobalRefreshResourceSelectionPage.6 = \u30B9\u30B3\u30FC\u30D7 GlobalRefreshResourceSelectionPage.7 = \u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9(&o) GlobalRefreshResourceSelectionPage.8 = \u9078\u629E\u3055\u308C\u305F\u30EA\u30BD\u30FC\u30B9(&S) GlobalRefreshResourceSelectionPage.9 = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u9589\u3058\u308B(&E) GlobalRefreshSubscriberPage.0 = \u4E0D\u660E GroupedByVersionCategory.Versions_1 = \u30D0\u30FC\u30B8\u30E7\u30F3 HistoryDialog.title = \u30EA\u30BD\u30FC\u30B9 History HistoryFilterDialog.author = \u4F5C\u6210\u8005(&A): HistoryFilterDialog.comment = \u30B3\u30E1\u30F3\u30C8\u306B\u306F\u6B21\u304C\u542B\u307E\u308C\u3066\u3044\u307E\u3059(&C): HistoryFilterDialog.fromDate = \u958B\u59CB\u65E5\u4ED8 (M/D/Y)(&F): HistoryFilterDialog.matchingAll = \u6307\u5B9A\u3055\u308C\u305F\u3059\u3079\u3066\u306E\u57FA\u6E96(&L) HistoryFilterDialog.matchingAny = \u6307\u5B9A\u3055\u308C\u305F\u4EFB\u610F\u306E\u57FA\u6E96(&N) HistoryFilterDialog.showMatching = \u4E00\u81F4\u3059\u308B\u30A8\u30F3\u30C8\u30EA\u30FC\u3092\u8868\u793A: HistoryFilterDialog.title = \u30EA\u30BD\u30FC\u30B9\u30FB\u30D2\u30B9\u30C8\u30EA\u30FC\u3092\u30D5\u30A3\u30EB\u30BF\u30FC\u3059\u308B HistoryFilterDialog.toDate = \u7D42\u4E86\u65E5\u4ED8 (M/D/Y)(&T): HistorySearchDialog.comment = \u30B3\u30E1\u30F3\u30C8 HistorySearchDialog.date = \u958B\u59CB\u65E5 HistorySearchDialog.dateParseErrorMessage = \u65E5\u4ED8\u304C\u89E3\u6790\u3067\u304D\u307E\u305B\u3093 HistorySearchDialog.dateParseErrorTitle = \u65E5\u4ED8\u89E3\u6790\u30A8\u30E9\u30FC HistorySearchDialog.dateSequenceErrorMessage = \u7D42\u4E86\u65E5\u306F\u958B\u59CB\u65E5\u3088\u308A\u5F8C\u3067\u306A\u3051\u308C\u3070\u3044\u3051\u307E\u305B\u3093 HistorySearchDialog.dateSequenceErrorTitle = \u958B\u59CB\u65E5\u3068\u7D42\u4E86\u65E5 HistorySearchDialog.endDateButton = \u9078\u629E... HistorySearchDialog.fetchLogIfNeeded = \u691C\u7D22\u7BC4\u56F2\u306E\u30ED\u30B0\u3092\u81EA\u52D5\u7684\u306B\u53D6\u308A\u51FA\u3057 HistorySearchDialog.midDate = \u7D42\u4E86\u65E5 HistorySearchDialog.regExp = \u7279\u6B8A\u6587\u5B57\u3092\u5229\u7528 (* = \u4EFB\u610F\u306E\u6587\u5B57\u5217\u3001? =\u3000\u4EFB\u610F\u306E\u6587\u5B57\u3001 \\ = \u30A8\u30B9\u30B1\u30FC\u30D7) HistorySearchDialog.resource = \u9078\u629E\u3057\u305F\u30EA\u30BD\u30FC\u30B9 HistorySearchDialog.searchAllLogs = \u5168\u3066\u306E\u30ED\u30B0\u3092\u691C\u7D22 HistorySearchDialog.searchTitle = \u691C\u7D22 HistorySearchDialog.startDateButton = \u9078\u629E... HistorySearchDialog.title = \u30D2\u30B9\u30C8\u30EA\u30FC\u691C\u7D22 HistorySearchDialog.user = \u4F5C\u6210\u8005 HistoryView.[...]_4 = [...] HistoryView.affectedPathsCompressedLayout = \u968E\u5C64\u8868\u793A(&C) HistoryView.affectedPathsFlatLayout = \u30D5\u30E9\u30C3\u30C8\u8868\u793A(&F) HistoryView.affectedPathsHorizontalLayout = \u6A2A\u306B\u8868\u793A(&H) HistoryView.affectedPathsVerticalLayout = \u7E26\u306B\u8868\u793A(&V) HistoryView.author = \u4F5C\u6210\u8005 HistoryView.clearSearch = \u30D2\u30B9\u30C8\u30EA\u30FC\u691C\u7D22\u3092\u30AF\u30EA\u30A2 HistoryView.comment = \u30B3\u30E1\u30F3\u30C8 HistoryView.confirmRevertRevision = \u672C\u5F53\u306B\u3053\u306E\u30EA\u30D3\u30B8\u30E7\u30F3\u3067\u4F5C\u6210\u3055\u308C\u305F{0}\u3078\u306E\u3059\u3079\u3066\u306E\u5909\u66F4\u3092\u53D6\u308A\u6D88\u3057\u307E\u3059\u304B? HistoryView.confirmRevertRevisions = \u672C\u5F53\u306B\u3053\u308C\u3089\u306E\u30EA\u30D3\u30B8\u30E7\u30F3\u3067\u4F5C\u6210\u3055\u308C\u305F{0}\u3078\u306E\u3059\u3079\u3066\u306E\u5909\u66F4\u3092\u53D6\u308A\u6D88\u3057\u307E\u3059\u304B? HistoryView.copy = \u30B3\u30D4\u30FC(&C) HistoryView.createTagFromRevision = \u30EA\u30D3\u30B8\u30E7\u30F3\u304B\u3089\u30D6\u30E9\u30F3\u30C1/\u30BF\u30B0\u3092\u4F5C\u6210 HistoryView.date = \u65E5\u4ED8 HistoryView.errorFetchingEntries = {0} \u306E\u30A8\u30F3\u30C8\u30EA\u30FC\u53D6\u308A\u51FA\u3057\u30A8\u30E9\u30FC HistoryView.fetchChangePathJob = \u5F71\u97FF\u3092\u53D7\u3051\u305F\u30D1\u30B9\u3092\u53D6\u308A\u51FA\u3057\u4E2D HistoryView.fetchHistoryJob = SVN \u30EA\u30D3\u30B8\u30E7\u30F3\u30D2\u30B9\u30C8\u30EA\u30FC\u306E\u53D6\u308A\u51FA\u3057\u4E2D HistoryView.getAll = \u3059\u3079\u3066\u3092\u53D6\u5F97 HistoryView.getContentsAction = \u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u53D6\u5F97(&G) HistoryView.getNext = \u6B21\u3078 HistoryView.getRevisionAction = \u30EA\u30D3\u30B8\u30E7\u30F3\u306E\u53D6\u5F97(&R) HistoryView.linkWithLabel = \u30A8\u30C7\u30A3\u30BF\u30FC\u306B\u30EA\u30F3\u30AF HistoryView.overwriteMsg = \u30ED\u30FC\u30AB\u30EB\u5909\u66F4\u304C\u3042\u308A\u307E\u3059\u3002 \u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B? HistoryView.overwriteOutfile = \u30D5\u30A1\u30A4\u30EB"{0}"\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059\u3002\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B? HistoryView.overwriteTitle = \u30ED\u30FC\u30AB\u30EB\u5909\u66F4\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B ? HistoryView.refresh = \u30D3\u30E5\u30FC\u306E\u66F4\u65B0 HistoryView.refreshLabel = \u30D3\u30E5\u30FC\u306E\u66F4\u65B0(&R) HistoryView.revertChangesFromRevision = \u30EA\u30D3\u30B8\u30E7\u30F3{0}\u306E\u5909\u66F4\u3092\u53D6\u308A\u6D88\u3057 HistoryView.revertChangesFromRevisions = \u30EA\u30D3\u30B8\u30E7\u30F3{0}\u304B\u3089\u30EA\u30D3\u30B8\u30E7\u30F3{1}\u307E\u3067\u306E\u5909\u66F4\u3092\u53D6\u308A\u6D88\u3057 HistoryView.revision = \u30EA\u30D3\u30B8\u30E7\u30F3 HistoryView.search = \u30D2\u30B9\u30C8\u30EA\u30FC\u3092\u691C\u7D22 HistoryView.selectAll = \u3059\u3079\u3066\u9078\u629E(&A) HistoryView.setCommitProperties = \u30B3\u30DF\u30C3\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u8A2D\u5B9A(&S) HistoryView.showAffectedPaths = \u5F71\u97FF\u3092\u53D7\u3051\u305F\u30D1\u30B9\u306E\u8868\u793A HistoryView.showComments = \u30B3\u30E1\u30F3\u30C8\u30FB\u30D3\u30E5\u30FC\u30A2\u30FC\u306E\u8868\u793A HistoryView.showDifferences = \u30E6\u30CB\u30D5\u30A1\u30A4\u30C9Diff\u3092\u751F\u6210 HistoryView.stopOnCopy = \u30B3\u30D4\u30FC/\u540D\u524D\u5909\u66F4\u4EE5\u524D\u3092\u975E\u8868\u793A HistoryView.tagWithExistingAction = \u65E2\u5B58\u30BF\u30B0\u3067\u30BF\u30B0\u4ED8\u3051(&T)... HistoryView.tags = \u30BF\u30B0 HistoryView.title = SVN \u30EA\u30BD\u30FC\u30B9\u30FB\u30D2\u30B9\u30C8\u30EA\u30FC HistoryView.titleWithArgument = SVN \u30EA\u30BD\u30FC\u30B9\u30FB\u30D2\u30B9\u30C8\u30EA\u30FC ({0}) HistoryView.wrapComments = \u30B3\u30E1\u30F3\u30C8\u3092\u6298\u308A\u8FD4\u3057 Icon_Overlays_24 = \u30A2\u30A4\u30B3\u30F3(&I) IgnoreAction.ignore = \u30EA\u30BD\u30FC\u30B9\u306E\u7121\u8996\u3067\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 IgnoreOperation.0 = {0} \u3092\u7121\u8996 IgnoreOperation.taskName = \u30EA\u30BD\u30FC\u30B9\u306E\u7121\u8996 IgnoreResourcesDialog.addCustomEntryButton = \u30AB\u30B9\u30BF\u30E0\u30FB\u30D1\u30BF\u30FC\u30F3 IgnoreResourcesDialog.addCustomEntryExample = \u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9\u6587\u5B57 ''*'' \u304A\u3088\u3073 ''?'' \u304C\u4F7F\u7528\u3067\u304D\u307E\u3059\u3002 IgnoreResourcesDialog.addExtensionEntryButton = \u30EF\u30A4\u30EB\u30C9\u30AB\u30FC\u30C9\u306E\u62E1\u5F35\u5B50 IgnoreResourcesDialog.addExtensionEntryExample = \u4F8B: *.so, *.rcfile, bin IgnoreResourcesDialog.addNameEntryButton = \u540D\u524D\u5225\u30EA\u30BD\u30FC\u30B9 IgnoreResourcesDialog.addNameEntryExample = \u4F8B: file1.so, file2.so, .rcfile, bin IgnoreResourcesDialog.patternDoesNotMatchFile = \u30D1\u30BF\u30FC\u30F3\u304C\u9078\u629E\u3055\u308C\u305F\u9078\u629E\u3055\u308C\u305F\u30EA\u30BD\u30FC\u30B9\u3068\u3059\u3079\u3066\u4E00\u81F4\u3057\u307E\u305B\u3093: \u4F8B {0} IgnoreResourcesDialog.patternMustNotBeEmpty = \u30D1\u30BF\u30FC\u30F3\u306F\u7A7A\u306B\u306F\u3067\u304D\u307E\u305B\u3093\u3002 IgnoreResourcesDialog.prompt = svn:ignore\u30D7\u30ED\u30D1\u30C6\u30A3\u306B\u8FFD\u52A0\u3059\u308B\u3082\u306E\u3092\u9078\u629E\u3059\u308B: IgnoreResourcesDialog.titleMany = {0} \u30EA\u30BD\u30FC\u30B9\u3092svn:ignore\u30D7\u30ED\u30D1\u30C6\u30A3\u306B\u8FFD\u52A0\u3057\u307E\u3059\u3002 IgnoreResourcesDialog.titleSingle = {0} \u3092svn:ignore\u30D7\u30ED\u30D1\u30C6\u30A3\u306B\u8FFD\u52A0 ImportFolderDialog.comment = \u30B3\u30E1\u30F3\u30C8: ImportFolderDialog.directory = \u30A4\u30F3\u30DD\u30FC\u30C8\u3059\u308B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA: ImportFolderDialog.recurse = \u30B5\u30D6\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3082\u518D\u5E30\u7684\u306B\u30A4\u30F3\u30DD\u30FC\u30C8 ImportFolderDialog.title = \u30A4\u30F3\u30DD\u30FC\u30C8\u30D5\u30A9\u30EB\u30C0 ImportOperation.0 = {0}\u3092\u30A4\u30F3\u30DD\u30FC\u30C8 ImportOperation.taskName = SVN\u30A4\u30F3\u30DD\u30FC\u30C8 ListSelectionArea.deselectAll = \u9078\u629E\u3092\u3059\u3079\u3066\u89E3\u9664(&D) ListSelectionArea.selectAll = \u3059\u3079\u3066\u9078\u629E(&S) LockDialog.enterComment = \u30B3\u30E1\u30F3\u30C8\u306E\u5165\u529B: LockDialog.resources = \u3053\u308C\u3089\u306E\u30EA\u30BD\u30FC\u30B9\u306F\u30ED\u30C3\u30AF\u3055\u308C\u307E\u3059\u3002 LockDialog.stealLock = \u30ED\u30C3\u30AF\u306E\u5F37\u5236\u53D6\u5F97 LockDialog.title = \u30ED\u30C3\u30AF LockOperation.0 = {0}\u3092\u30ED\u30C3\u30AF\u4E2D LockOperation.taskName = SVN\u30ED\u30C3\u30AF MarkDeletedAction.label = \u524A\u9664\u3068\u3057\u3066\u30DE\u30FC\u30AF MarkResolved.label = \u7AF6\u5408\u3092\u89E3\u6C7A\u6E08\u307F\u306B\u30DE\u30FC\u30AF MenuIconsPreferencePage.default = \u30C7\u30D5\u30A9\u30EB\u30C8 MenuIconsPreferencePage.iconSet = \u30A2\u30A4\u30B3\u30F3\u96C6\u5408 MenuIconsPreferencePage.restart = \u6CE8\u610F: \u3053\u306E\u5909\u66F4\u3092\u6709\u52B9\u306B\u3059\u308B\u306B\u306F\u30EF\u30FC\u30AF\u30D9\u30F3\u30C1\u3092\u518D\u8D77\u52D5\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002 MergeAction.merge = \u30DE\u30FC\u30B8\u4E2D\u306B\u554F\u984C\u304C\u767A\u751F MergeAction.saveChanges = \u30A2\u30AF\u30B7\u30E7\u30F3\u304C\u5B9F\u884C\u3055\u308C\u308B\u524D\u306B\u4FDD\u7BA1\u3055\u308C\u308B\u3001\u672A\u4FDD\u7BA1\u306E\u5909\u66F4\u304C\u3042\u308A\u307E\u3059\u3002 MergeAction.saveChangesTitle = \u5909\u66F4\u3092\u4FDD\u7BA1 MergeDialog.diff = \u30E6\u30CB\u30D5\u30A1\u30A4\u30C9Diff MergeDialog.diffTitle = \u30E6\u30CB\u30D5\u30A1\u30A4\u30C9Diff\u30D5\u30A1\u30A4\u30EB\u3092\u4F5C\u6210 MergeDialog.dryRun = \u30DE\u30FC\u30B8\u5F8C\u306E\u72B6\u614B\u78BA\u8A8D MergeDialog.force = \u5F37\u5236 MergeDialog.from = From: (\u30DE\u30FC\u30B8\u306E\u958B\u59CBURL\u3068\u30EA\u30D3\u30B8\u30E7\u30F3) MergeDialog.ignoreAncestry = \u7956\u5148\u3092\u7121\u8996 MergeDialog.invalidFrom = "From:" \u30EA\u30D3\u30B8\u30E7\u30F3\u756A\u53F7\u304C\u4E0D\u6B63\u3067\u3059\u3002 MergeDialog.invalidTo = \u30EA\u30D3\u30B8\u30E7\u30F3\u756A\u53F7\u306E"To:"\u304C\u4E0D\u6B63\u3067\u3059\u3002 MergeDialog.repositoryUrl = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306EURL: MergeDialog.showLog = \u30ED\u30B0\u3092\u8868\u793A MergeDialog.text = \u30DE\u30FC\u30B8\u3057\u305F\u3044\u30EA\u30D3\u30B8\u30E7\u30F3\u306E\u7BC4\u56F2\u3092\u6307\u5B9A: MergeDialog.title = \u30DE\u30FC\u30B8 MergeDialog.to = To: (URL\u3068\u30DE\u30FC\u30B8\u3059\u308B\u7BC4\u56F2\u306E\u30EA\u30D3\u30B8\u30E7\u30F3) MergeDialog.url = \u30DE\u30FC\u30B8\u3092\u884C\u3046\u3068\u3001\u6B21\u306EURL\u3092\u6307\u3059\u73FE\u5728\u306E\u4F5C\u696D\u30B3\u30D4\u30FC\u304C\u5909\u66F4\u3055\u308C\u307E\u3059: MergeDialog.urlError = \u4E0D\u6B63\u306AURL: MergeDialog.useFrom = "From:"\u306EURL\u3092\u5229\u7528 MergeDialog.workingCopy = \u4F5C\u696D\u30B3\u30D4\u30FC\u4E2D\u306E\u30DE\u30FC\u30B8\u7D50\u679C\u306E\u5834\u6240: MergeEditorInput.title = {0} \u3068 {1} \u306E\u30DE\u30FC\u30B8 MergeOperation.0 = {0} \u3092\u30DE\u30FC\u30B8\u4E2D MergeOperation.taskName = SVN\u30DE\u30FC\u30B8 MergeWizard.end = \u5909\u66F4\u306E\u30DE\u30FC\u30B8\u3092\u958B\u59CB\u3057\u305F\u3044\u5834\u6240\u9078\u629E\u3057\u307E\u3059\u3002 MergeWizard.preparing = \u30DE\u30FC\u30B8\u306E\u6E96\u5099\u30A6\u30A3\u30B6\u30FC\u30C9 MergeWizard.preparingEnd = \u6700\u7D42\u30DA\u30FC\u30B8\u306E\u30BF\u30B0\u3092\u53D6\u308A\u8FBC\u307F\u4E2D MergeWizard.preparingStart = \u958B\u59CB\u30DA\u30FC\u30B8\u306E\u30BF\u30B0\u3092\u53D6\u308A\u8FBC\u307F\u4E2D MergeWizard.start = \u30DE\u30FC\u30B8\u306E\u958B\u59CB\u70B9\u3092\u9078\u629E MergeWizard.title = \u30DE\u30FC\u30B8 MergeWizardEndPage.branches = \u30D6\u30E9\u30F3\u30C1 MergeWizardEndPage.description = \u3053\u308C\u306F\u3001\u30DE\u30FC\u30B8\u3057\u305F\u3044\u4F5C\u696D\u3092\u542B\u3080\u30D0\u30FC\u30B8\u30E7\u30F3\u307E\u305F\u306F\u30D6\u30E9\u30F3\u30C1\u3067\u3059\u3002 MergeWizardEndPage.duplicateTagSelected = {0} \u306F\u3001\u958B\u59CB\u30BF\u30B0\u3068\u3057\u3066\u3059\u3067\u306B\u9078\u629E\u3055\u308C\u3066\u3044\u308B\u306E\u3067\u3001\u9078\u629E\u3067\u304D\u307E\u305B\u3093\u3002 MergeWizardStartPage.description = \u3053\u308C\u306F\u3001\u30D6\u30E9\u30F3\u30C1\u3092\u884C\u3063\u305F\u3068\u304D\u306B\u4F5C\u6210\u3057\u305F\u30D0\u30FC\u30B8\u30E7\u30F3\u3067\u3059\u3002 ModuleSelectionPage.moduleIsProject = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u540D\u3092\u30D5\u30A9\u30EB\u30C0\u540D\u3068\u3057\u3066\u4F7F\u7528 ModuleSelectionPage.specifyModule = \u6307\u5B9A\u3057\u305F\u30D5\u30A9\u30EB\u30C0\u540D\u3092\u4F7F\u7528: ModulesCategory.label = \u30D5\u30A9\u30EB\u30C0 MoveRemoteFolderWizard.heading = \u30EA\u30E2\u30FC\u30C8\u30FB\u30EA\u30BD\u30FC\u30B9\u306E\u79FB\u52D5\u3082\u3057\u304F\u306F\u540D\u524D\u5909\u66F4 MoveRemoteResourceWizardMainPage.invalidUrl = \u4E0D\u6B63\u306AURL MoveRemoteResourceWizardMainPage.resourceName = \u30EA\u30BD\u30FC\u30B9\u306E\u79FB\u52D5\u5148\u540D : MoveRemoteResourceWizardMainPage.selectParentUrl = \u79FB\u52D5\u5148\u306E\u89AA\u30D5\u30A9\u30EB\u30C0\u3092\u9078\u629E\u3082\u3057\u304F\u306F\u5165\u529B : MoveTagAction.errorMessage = \u30BF\u30B0\u4ED8\u3051\u30A8\u30E9\u30FC MoveTagAction.message = \u79FB\u52D5\u3059\u308B\u30BF\u30B0\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044(&S): MoveTagAction.title = \u65E2\u5B58\u30BF\u30B0\u3067\u30BF\u30B0\u4ED8\u3051 NewLocationWizard.description = \u65B0\u3057\u3044 SVN \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u3092\u300CSVN \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u300D\u30D3\u30E5\u30FC\u306B\u8FFD\u52A0\u3057\u307E\u3059\u3002 NewLocationWizard.exception = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u4F5C\u6210\u3067\u304D\u307E\u305B\u3093\u3002 NewLocationWizard.heading = \u65B0\u898F SVN \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306E\u8FFD\u52A0 NewLocationWizard.title = SVN \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306E\u8FFD\u52A0 NewLocationWizard.validationFailedText = \u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\u691C\u8A3C\u4E2D\u306B\u30A8\u30E9\u30FC: "{0}"\r\n\r\n\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u4FDD\u6301\u3057\u307E\u3059\u304B? NewLocationWizard.validationFailedTitle = \u691C\u8A3C\u4E0D\u80FD NewRemoteFolderWizard.heading = \u65B0\u3057\u3044\u30EA\u30E2\u30FC\u30C8\u30D5\u30A9\u30EB\u30C0\u306E\u4F5C\u6210 NewRemoteFolderWizard.title = \u65B0\u3057\u3044\u30EA\u30E2\u30FC\u30C8\u30D5\u30A9\u30EB\u30C0 NewRemoteFolderWizardMainPage.folderName = \u30D5\u30A9\u30EB\u30C0\u540D : NewRemoteFolderWizardMainPage.invalidUrl = \u4E0D\u6B63\u306AURL NewRemoteFolderWizardMainPage.selectParentUrl = \u89AA\u30D5\u30A9\u30EB\u30C0\u306EURL\u3092\u9078\u629E\u3082\u3057\u304F\u306F\u5165\u529B : OpenActionGroup.openWith = \u958B\u304F(&h) OpenChangeSetAction_0 = [{0}] ({1}) OpenChangeSetAction_1 = SVN\u30C1\u30A7\u30F3\u30B8 OpenCommitSetAction_20 = \u6BD4\u8F03\u30A8\u30C7\u30A3\u30BF\u3067\u5909\u66F4\u3092\u958B\u304F OpenCommitSetAction_21 = \u9078\u629E\u3055\u308C\u305F\u30EA\u30BD\u30FC\u30B9\u306E\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306E\u5834\u6240\u304C\u78BA\u5B9A\u3067\u304D\u307E\u305B\u3093 OpenLogEntryAction.deleted = \u9078\u629E\u3055\u308C\u305F\u30EA\u30D3\u30B8\u30E7\u30F3\u306F\u524A\u9664\u3092\u8868\u3057\u307E\u3059\u3002 \u3053\u308C\u3092\u958B\u304F\u3053\u3068\u306F\u3067\u304D\u307E\u305B\u3093\u3002 OpenLogEntryAction.deletedTitle = \u30EA\u30BD\u30FC\u30B9\u304C\u524A\u9664\u3055\u308C\u307E\u3057\u305F\u3002 Open_the_Synchronize_view_on_the_project_2 = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3067\u300C\u540C\u671F\u5316\u300D\u30D3\u30E5\u30FC\u3092\u958B\u304F PasswordPromptDialog.password = \u30D1\u30B9\u30EF\u30FC\u30C9: PasswordPromptDialog.repository = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC: PasswordPromptDialog.save = \u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u4FDD\u5B58: PasswordPromptDialog.title = \u30E6\u30FC\u30B6\u30FC\u540D\u3068\u30D1\u30B9\u30EF\u30FC\u30C9\u306E\u5165\u529B PasswordPromptDialog.username = \u30E6\u30FC\u30B6\u30FC\u540D: PendingOperationsView.computeStatusJob = \u672A\u6C7A\u5B9A\u306ESVN\u64CD\u4F5C\u3092\u8A08\u7B97\u4E2D PendingOperationsView.description = \u8A73\u7D30 PendingOperationsView.errorComputingStatus = \u672A\u6C7A\u5B9A\u306E\u64CD\u4F5C\u306E\u8A08\u7B97\u4E2D\u306B\u30A8\u30E9\u30FC\u767A\u751F PendingOperationsView.hasBeenAdded = {0} \u306F\u30ED\u30FC\u30AB\u30EB\u3067\u8FFD\u52A0\u3055\u308C\u3066\u3044\u307E\u3059\u3002 PendingOperationsView.hasBeenCopied = {0} \u306F\u30ED\u30FC\u30AB\u30EB\u3067\u30B3\u30D4\u30FC\u3055\u308C\u3066\u3044\u307E\u3059\u3002(\u30B3\u30D4\u30FC\u5143 {1}) PendingOperationsView.hasBeenDeleted = {0} \u306F\u30ED\u30FC\u30AB\u30EB\u3067\u524A\u9664\u3055\u308C\u3066\u3044\u307E\u3059\u3002 PendingOperationsView.hasBeenModified = {0} \u306F\u30ED\u30FC\u30AB\u30EB\u3067\u5909\u66F4\u3055\u308C\u3066\u3044\u307E\u3059\u3002 PendingOperationsView.infolder = \u30D5\u30A9\u30EB\u30C0 PendingOperationsView.missing = {0}\u306F\u5B58\u5728\u3057\u307E\u305B\u3093\u3002 PendingOperationsView.refresh = \u30D3\u30E5\u30FC\u306E\u66F4\u65B0 PendingOperationsView.refreshLabel = \u30D3\u30E5\u30FC\u306E\u66F4\u65B0(&R) PendingOperationsView.resource = \u30EA\u30BD\u30FC\u30B9 PendingOperationsView.showAddedResources = \u8FFD\u52A0\u3055\u308C\u305F\u30EA\u30BD\u30FC\u30B9\u3092\u8868\u793A PendingOperationsView.showDeletedResources = \u524A\u9664\u3055\u308C\u305F\u30EA\u30BD\u30FC\u30B9\u3092\u8868\u793A PendingOperationsView.showModifiedResources = \u5909\u66F4\u3055\u308C\u305F\u30EA\u30BD\u30FC\u30B9\u3092\u8868\u793A PendingOperationsView.titleWithArgument = {0}\u306E\u672A\u6C7A\u5B9A\u64CD\u4F5C QuestionDialog.save = Save Answer: RefreshRemoteProjectSelectionPage.noWorkingSet = \u30EF\u30FC\u30AD\u30F3\u30B0\u30FB\u30BB\u30C3\u30C8\u3092\u4F7F\u7528\u3057\u306A\u3044(&U) RefreshRemoteProjectSelectionPage.pageDescription = \u30BF\u30B0\u3092\u66F4\u65B0\u3059\u308B\u30EA\u30E2\u30FC\u30C8\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u9078\u629E\u3057\u307E\u3059\u3002 RefreshRemoteProjectSelectionPage.pageTitle = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u9078\u629E RefreshRemoteProjectSelectionPage.selectRemoteProjects = \u3053\u306E\u30A6\u30A3\u30B6\u30FC\u30C9\u306F\u30011 \u3064\u4EE5\u4E0A\u306E\u30EA\u30E2\u30FC\u30C8\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u95A2\u9023\u4ED8\u3051\u3089\u308C\u305F\u30BF\u30B0\u3092\u898B\u3064\u3051\u308B\u3068\u304D\u306B\u5F79\u7ACB\u3061\u307E\u3059\u3002 \u66F4\u65B0\u3057\u305F\u3044\u30BF\u30B0\u306E\u3042\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u30C1\u30A7\u30C3\u30AF\u3057\u3066\u304F\u3060\u3055\u3044\u3002(&C) RefreshRemoteProjectSelectionPage.workingSet = \u30EF\u30FC\u30AD\u30F3\u30B0\u30FB\u30BB\u30C3\u30C8\u306E\u9078\u629E (\u4E00\u81F4\u3059\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u304C\u30C1\u30A7\u30C3\u30AF\u3055\u308C\u307E\u3059)(&W): RefreshTagsAction.message = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC ''{0}'' \u306B\u3001\u66F4\u65B0\u3055\u308C\u308B {1} \u500B\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u304C\u3042\u308A\u307E\u3059\u3002 \u7D9A\u884C\u3057\u307E\u3059\u304B? RefreshTagsAction.title = \u30D6\u30E9\u30F3\u30C1\u304A\u3088\u3073\u30D0\u30FC\u30B8\u30E7\u30F3\u30FB\u30BF\u30B0\u3092\u66F4\u65B0\u3057\u307E\u3059\u304B? ReleaseCommentDialog.choosePrevious = \u524D\u306B\u5165\u529B\u3057\u305F\u30B3\u30E1\u30F3\u30C8\u3092\u9078\u629E(&P): ReleaseCommentDialog.clearTextArea = \u30B3\u30E1\u30F3\u30C8\u306E\u30EA\u30BB\u30C3\u30C8(&R) ReleaseCommentDialog.deselectAll = \u9078\u629E\u3092\u3059\u3079\u3066\u89E3\u9664(&E) ReleaseCommentDialog.enterComment = \u30B3\u30DF\u30C3\u30C8\u30FB\u30B3\u30E1\u30F3\u30C8\u306E\u7DE8\u96C6(&C): ReleaseCommentDialog.selectAll = \u3059\u3079\u3066\u9078\u629E(&S) ReleaseCommentDialog.title = \u30B3\u30DF\u30C3\u30C8 ReleaseCommentDialog.unaddedResources = \u9078\u629E\u3055\u308C\u305F\u30EA\u30BD\u30FC\u30B9\u304C SVN \u30D0\u30FC\u30B8\u30E7\u30F3\u7BA1\u7406\u306B\u8FFD\u52A0\u3055\u308C\u307E\u3059(&A) RelocateWizard.heading = \u30EA\u30DD\u30B8\u30C8\u30EA RelocateWizard.newUrl = \u65B0\u898FURL\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044 RelocateWizard.newUrlLabel = \u65B0\u898FURL: RelocateWizard.projects = \u518D\u914D\u7F6E\u3059\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8: RelocateWizard.title = \u518D\u914D\u7F6E RelocateWizard.urlLabel = URL: RelocateWizard.warning = \u672C\u5F53\u306B\u30EA\u30DD\u30B8\u30C8\u30EA\u3092\u518D\u914D\u7F6E\u3057\u307E\u3059\u304B\uFF1F RelocateWizard.warningMessage1 = \u518D\u914D\u7F6E\u30B3\u30DE\u30F3\u30C9\u306F\u3001\u30B5\u30FC\u30D0\u306EIP\u30A2\u30C9\u30EC\u30B9\u306E\u5909\u66F4\u3084\u30D7\u30ED\u30C8\u30B3\u30EB\u5909\u66F4\uFF08e.g. http:// \u304B\u3089 https://\uFF09\u3001\u30B5\u30FC\u30D0\u8A2D\u5B9A\u306E\u30EA\u30DD\u30B8\u30C8\u30EA\u306E\u30EB\u30FC\u30C8\u30FB\u30D1\u30B9\u306E\u5909\u66F4\u306B\u3088\u3063\u3066\u3001\u30EA\u30DD\u30B8\u30C8\u30EA\u306E\u30EB\u30FC\u30C8URL\u304C\u5909\u308F\u308B\u5834\u5408\u306B\u3060\u3051\u4F7F\u3044\u307E\u3059\u3002 RelocateWizard.warningMessage2 = \u3053\u308C\u306F\u307E\u308C\u306A\u64CD\u4F5C\u3067\u3001\u4ED6\u306ESubversion\u306E\u30EA\u30DD\u30B8\u30C8\u30EA\u306B\u79FB\u52D5\u3055\u305B\u305F\u3044\u5834\u5408\u3084\u3001\u540C\u3058\u30EA\u30DD\u30B8\u30C8\u30EA\u5185\u3067\u5225\u306E\u30D6\u30E9\u30F3\u30C1\u3084\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306B\u7F6E\u63DB\u3057\u305F\u3044\u5834\u5408\u306B\u306F\u9069\u7528\u3067\u304D\u307E\u305B\u3093\u3002\r\n\r\n\u8AA4\u3063\u3066\u518D\u914D\u7F6E\u30B3\u30DE\u30F3\u30C9\u3092\u3064\u304B\u3046\u3068\u3001\u4F5C\u696D\u30B3\u30D4\u30FC\u304C\u6C5A\u308C\u307E\u3059\u3002\u518D\u914D\u7F6E\u304C\u6B63\u3057\u3044\u64CD\u4F5C\u304B\u3069\u3046\u304B\u78BA\u4FE1\u304C\u6301\u3066\u306A\u3044\u3068\u304D\u306F\u30D8\u30EB\u30D7\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002 RemoteAnnotationStorage.1 = \u30EA\u30E2\u30FC\u30C8\u30FB\u30EA\u30BD\u30FC\u30B9 {0} \u306E\u30B3\u30F3\u30C6\u30F3\u30C4\u578B\u3092\u8A08\u7B97\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 RemoteFileEditorInput.fullPathAndRevision = {0} {1} RemoteFolderElement.nameAndTag = {0} {1} RemoteFolderElement_fetchingRemoteMembers.message = {0}\u306E\u5B50\u3092\u53D6\u308A\u51FA\u3057 RemoteResourcePropertiesDialog.author = \u6700\u65B0\u306E\u5909\u66F4\u8005: RemoteResourcePropertiesDialog.date = \u6700\u65B0\u306E\u5909\u66F4\u65E5: RemoteResourcePropertiesDialog.info = \u60C5\u5831: RemoteResourcePropertiesDialog.lockComment = \u30ED\u30C3\u30AF\u30B3\u30E1\u30F3\u30C8: RemoteResourcePropertiesDialog.lockCreated = \u30ED\u30C3\u30AF\u751F\u6210: RemoteResourcePropertiesDialog.lockOwner = \u30ED\u30C3\u30AF\u4FDD\u6301\u8005: RemoteResourcePropertiesDialog.properties = \u30D7\u30ED\u30D1\u30C6\u30A3: RemoteResourcePropertiesDialog.property = \u30D7\u30ED\u30D1\u30C6\u30A3: RemoteResourcePropertiesDialog.revision = \u6700\u65B0\u306E\u5909\u66F4\u30EA\u30D3\u30B8\u30E7\u30F3: RemoteResourcePropertiesDialog.title = \u30D7\u30ED\u30D1\u30C6\u30A3 RemoteResourcePropertiesDialog.url = URL: RemoteResourcePropertiesDialog.value = \u5024 RemoteRootAction.Projects_in_the_local_workspace_are_shared_with__2 = \u30ED\u30FC\u30AB\u30EB\u30FB\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F {0} \u3068\u5171\u7528\u3055\u308C\u3066\u3044\u307E\u3059\u3002 \u3053\u306E\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u306F\u3001\u3059\u3079\u3066\u306E\u30ED\u30FC\u30AB\u30EB\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u304C\u5207\u65AD\u3055\u308C\u308B\u307E\u3067\u5EC3\u68C4\u3067\u304D\u307E\u305B\u3093\u3002 RemoteRootAction.The_projects_that_are_shared_with_the_above_repository_are__4 = \u4E0A\u8A18\u306E\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u3068\u5171\u7528\u3055\u308C\u3066\u3044\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8: RemoteRootAction.Unable_to_Discard_Location_1 = \u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u7834\u68C4\u3067\u304D\u307E\u305B\u3093\u3002 RemoteRootAction.label = \u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\u5EC3\u68C4 RemoteViewPart.workingSetToolTip = \u30EF\u30FC\u30AD\u30F3\u30B0\u30FB\u30BB\u30C3\u30C8: {0} RemoveRootAction.removeRoot = \u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\u7834\u68C4\u3067\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 RemoveRootAction.removeRoot_3 = RemoveRootAction.removeRoot ReplaceOperation.0 = {0} \u3092\u7F6E\u63DB\u4E2D ReplaceOperation.taskName = SVN \u7F6E\u63DB ReplaceWithAction.calculatingDirtyResources = \u767A\u4FE1\u5909\u66F4\u306E\u691C\u7D22\u4E2D... ReplaceWithAction.confirmOverwrite = \u4E0A\u66F8\u304D\u306E\u78BA\u8A8D ReplaceWithAction.localChanges = {0} \u306B\u306F\u3001\u4E0A\u66F8\u304D\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308B\u30ED\u30FC\u30AB\u30EB\u5909\u66F4\u304C\u3042\u308A\u307E\u3059\u3002 \u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B? ReplaceWithLatestAction.multipleBranches = \u30D6\u30E9\u30F3\u30C1\u304B\u3089\u6700\u65B0(&L) ReplaceWithLatestAction.multipleTags = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u304B\u3089\u6700\u65B0(&L) ReplaceWithLatestAction.multipleVersions = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u304B\u3089\u30D0\u30FC\u30B8\u30E7\u30F3(&V) ReplaceWithLatestAction.singleBranch = \u30D6\u30E9\u30F3\u30C1\u304B\u3089\u6700\u65B0(&L) {0} ReplaceWithLatestAction.singleHEAD = {0} \u304B\u3089\u6700\u65B0(&L) ReplaceWithLatestAction.singleVersion = \u30D0\u30FC\u30B8\u30E7\u30F3(&V) {0} ReplaceWithRemoteAction.problemMessage = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u304B\u3089\u306E\u6700\u65B0\u306B\u7F6E\u63DB\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 ReplaceWithRemoteAction.replacing = \u7F6E\u63DB ReplaceWithRevisionAction.replace = \u7F6E\u63DB(&R) ReplaceWithRevisionAction.title = \u30EA\u30D3\u30B8\u30E7\u30F3\u3078\u7F6E\u63DB ReplaceWithTagAction.message = \u30D6\u30E9\u30F3\u30C1\u307E\u305F\u306F\u30D0\u30FC\u30B8\u30E7\u30F3\u3068\u7F6E\u63DB\u3057\u307E\u3059\u3002 ReplaceWithTagAction.mixingTags = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5185\u306B\u30BF\u30B0\u304C\u6DF7\u5728\u3057\u3066\u3044\u307E\u3059\u3002 \u3053\u306E\u305F\u3081\u306B\u3001\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u3068\u306E\u540C\u671F\u3067\u6DF7\u4E71\u3059\u308B\u3053\u3068\u304C\u3042\u308A\u307E\u3059\u3002 \r\n\u540C\u671F\u5316\u306F\u3001\u5404\u30EA\u30BD\u30FC\u30B9\u306B\u95A2\u9023\u4ED8\u3051\u3089\u308C\u305F\u30BF\u30B0\u60C5\u5831\u3092\u4F7F\u7528\u3057\u3066\u3001\u30ED\u30FC\u30AB\u30EB\u30FB\u30EA\u30BD\u30FC\u30B9\u3068\u6BD4\u8F03\u3059\u308B\u30EA\u30E2\u30FC\u30C8\u30FB\u30EA\u30BD\u30FC\u30B9\u3092\r\n\u5224\u5225\u3057\u307E\u3059\u3002 \u305F\u3068\u3048\u3070\u30D0\u30FC\u30B8\u30E7\u30F3\u30FB\u30BF\u30B0\u3067\u306F\u3001\u30BF\u30B0\u4ED8\u304D\u30EA\u30BD\u30FC\u30B9\u306E\u72B6\u614B\u306F\u5909\u308F\u3089\u306A\u3044\u305F\u3081\u3001\r\nHEAD (\u307E\u305F\u306F\u4ED6\u306E\u30D6\u30E9\u30F3\u30C1) \u5185\u306E\u30EA\u30BD\u30FC\u30B9\u306B\u5BFE\u3057\u3066\u884C\u3063\u305F\u5909\u66F4\u306F\u308F\u304B\u308A\u307E\u305B\u3093\u3002 \u7D9A\u884C\u3057\u307E\u3059\u304B? ReplaceWithTagAction.replace = \u30BF\u30B0\u306B\u7F6E\u63DB\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 ReplaceWithTagAction.replacing = \u30BF\u30B0 {0} \u306B\u7F6E\u63DB\u4E2D RepositoriesView.CannotGetRevision = \u30EA\u30D3\u30B8\u30E7\u30F3\u3092\u53D6\u5F97\u3067\u304D\u307E\u305B\u3093\u3002 RepositoriesView.NItemsSelected = {0} \u9805\u76EE\u304C\u9078\u629E\u3055\u308C\u307E\u3057\u305F RepositoriesView.OneItemSelected = 1 \u9805\u76EE\u304C\u9078\u629E\u3055\u308C\u307E\u3057\u305F\u3002 RepositoriesView.ResourceInRepository = {1} \u5185\u306E {0} RepositoriesView.collapseAll = \u3059\u3079\u3066\u3092\u7E2E\u5C0F\u8868\u793A RepositoriesView.collapseAllTooltip = \u3059\u3079\u3066\u3092\u7E2E\u5C0F\u8868\u793A RepositoriesView.deselectWorkingSet = \u30EF\u30FC\u30AD\u30F3\u30B0\u30FB\u30BB\u30C3\u30C8\u306E\u9078\u629E\u89E3\u9664 RepositoriesView.editWorkingSet = \u30A2\u30AF\u30C6\u30A3\u30D6\u306A\u30EF\u30FC\u30AD\u30F3\u30B0\u30FB\u30BB\u30C3\u30C8\u306E\u7DE8\u96C6... RepositoriesView.new = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3(&R)... RepositoriesView.newAnonSVN = dev.eclipse.org \u3078\u306E\u7121\u540D\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3(&A)... RepositoriesView.newSubmenu = \u65B0\u898F(&N) RepositoriesView.newWorkingSet = \u30EF\u30FC\u30AD\u30F3\u30B0\u30FB\u30BB\u30C3\u30C8\u306E\u9078\u629E... RepositoriesView.refresh = \u30D3\u30E5\u30FC\u306E\u66F4\u65B0(&R) RepositoriesView.refreshPopup = \u66F4\u65B0 RepositoriesView.refreshTooltip = \u30D3\u30E5\u30FC\u306E\u66F4\u65B0 RepositoriesView.workingSetMenuItem = {0} {1} RepositoriesViewContentHandler.errorCreatingRoot = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC ''{0}'' \u3092\u4F5C\u6210\u3057\u3088\u3046\u3068\u3057\u3066\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 RepositoriesViewContentHandler.missingAttribute = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30D3\u30E5\u30FC\u69CB\u6210\u30D5\u30A1\u30A4\u30EB\u306E\u8AAD\u307F\u53D6\u308A\u3067\u3001\u30BF\u30B0 ''{0}'' \u306B\u5FC5\u8981\u5C5E\u6027 ''{1}'' \u304C\u3042\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002 RepositoriesViewContentHandler.unmatchedTag = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30D3\u30E5\u30FC\u69CB\u6210\u30D5\u30A1\u30A4\u30EB\u306E\u8AAD\u307F\u53D6\u308A\u3067\u3001\u30BF\u30B0 ''{0}'' \u306B\u5BFE\u5FDC\u3059\u308B\u7D42\u4E86\u30BF\u30B0\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002 RepositoryDialog.description = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u63A5\u7D9A\u3059\u308B\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u3092\u9078\u629E\u3057\u307E\u3059\u3002 RepositoryDialog.getRepository = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306E\u9078\u629E RepositoryManager.addErrorNotAssociated = \u5E7E\u3064\u304B\u306E\u30EA\u30BD\u30FC\u30B9\u306F\u5171\u6709\u3055\u308C\u305F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u95A2\u9023\u4ED8\u3051\u3089\u308C\u3066\u3044\u307E\u305B\u3093\u3002 RepositoryManager.adding = \u8FFD\u52A0\u4E2D RepositoryManager.committing = \u30B3\u30DF\u30C3\u30C8\u4E2D RepositoryManager.deleting = \u524A\u9664\u4E2D RepositoryManager.getting = \u53D6\u5F97\u4E2D RepositoryManager.ioException = \u72B6\u614B\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u307F\u53D6\u308A\u4E2D\u306B\u5165\u51FA\u529B\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 RepositoryManager.parsingProblem = \u30D5\u30A1\u30A4\u30EB ''{0}'' \u306E\u69CB\u6587\u89E3\u6790\u3067\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 RepositoryManager.rename = \u72B6\u614B\u30D5\u30A1\u30A4\u30EB\u306E\u540D\u524D\u3092\u5909\u66F4\u4E2D\u306B\u5165\u51FA\u529B\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 RepositoryManager.save = \u72B6\u614B\u30D5\u30A1\u30A4\u30EB\u3092\u4FDD\u7BA1\u4E2D\u306B\u5165\u51FA\u529B\u4F8B\u5916\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 RepositoryManager.updating = \u66F4\u65B0\u4E2D RepositoryRoot.folderInfoMissing = \u30ED\u30FC\u30AB\u30EB\u30FB\u30D5\u30A9\u30EB\u30C0 ''{0}'' \u304C\u30EA\u30E2\u30FC\u30C8\u30FB\u30D5\u30A9\u30EB\u30C0\u306B\u6B63\u3057\u304F\u30DE\u30C3\u30D7\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002 RepositorySelectionPage.description = \u3053\u306E\u30A6\u30A3\u30B6\u30FC\u30C9\u306F\u3001\u521D\u3081\u3066\u30D5\u30A1\u30A4\u30EB\u3092 SVN \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u3068\u5171\u7528\u3059\u308B\u3068\u304D\u306B\u5F79\u7ACB\u3061\u307E\u3059\u3002 \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F SVN \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306B\u81EA\u52D5\u7684\u306B\u30A4\u30F3\u30DD\u30FC\u30C8\u3055\u308C\u3001\u7D9A\u3044\u3066\u300C\u540C\u671F\u5316\u300D\u30D3\u30E5\u30FC\u304C\u958B\u3044\u3066\u3001\u30EA\u30BD\u30FC\u30B9\u3092\u30B3\u30DF\u30C3\u30C8\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002 RepositorySelectionPage.useExisting = \u65E2\u5B58\u306E\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u4F7F\u7528(&U): RepositorySelectionPage.useNew = \u65B0\u3057\u3044\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u4F5C\u6210(&C) ResolveAction.error = \u89E3\u6C7A\u306B\u5931\u6557 ResolveOperation.0 = {0}\u3092\u89E3\u6C7A\u6E08\u307F\u306B\u30DE\u30FC\u30AF\u3057\u307E\u3059 ResolveOperation.taskName = \u89E3\u6C7A\u6E08\u307F\u306B\u30DE\u30FC\u30AF ResourcePropertiesPage.checkedIn = \u30C1\u30A7\u30C3\u30AF\u30A4\u30F3\u6E08\u307F ResourcePropertiesPage.checkedOut = \u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u6E08\u307F ResourcePropertiesPage.error = \u30A8\u30E9\u30FC ResourcePropertiesPage.notManaged = SVN \u306B\u3088\u3063\u3066\u7BA1\u7406\u3055\u308C\u3066\u3044\u307E\u305B\u3093 ResourcePropertiesPage.notVersioned = \u30D0\u30FC\u30B8\u30E7\u30F3\u7BA1\u7406\u3055\u308C\u3066\u3044\u307E\u305B\u3093 ResourcePropertiesPage.state = \u72B6\u614B ResourcePropertiesPage.status = \u72B6\u6CC1 ResourcePropertiesPage.versioned = \u30D0\u30FC\u30B8\u30E7\u30F3\u7BA1\u7406\u3055\u308C\u3066\u3044\u307E\u3059 RestoreFromRepositoryAction.noFilesMessage = \u30D5\u30A9\u30EB\u30C0 ''{0}'' \u4E2D\u306B\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u3067\u524A\u9664\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3067\u3057\u305F\u3002 RestoreFromRepositoryAction.noFilesTitle = \u524A\u9664\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u304C\u898B\u3064\u304B\u308A\u307E\u305B\u3093\u3002 RestoreFromRepositoryFileSelectionPage.emptyRevisionPane = \u9078\u629E\u3057\u305F\u30D5\u30A1\u30A4\u30EB\u306E\u30EA\u30E2\u30FC\u30C8\u30EA\u30D3\u30B8\u30E7\u30F3: RestoreFromRepositoryFileSelectionPage.fileContentPaneTitle = ''{2}'' \u5185\u306E {0} {1} RestoreFromRepositoryFileSelectionPage.fileExists = \u30D5\u30A1\u30A4\u30EB ''{0}'' \u306F\u3059\u3067\u306B\u30ED\u30FC\u30AB\u30EB\u3067\u5B58\u5728\u3057\u307E\u3059\u3002 RestoreFromRepositoryFileSelectionPage.fileSelectionPaneTitle = {0} - \u5FA9\u5143\u3059\u308B\u30D5\u30A1\u30A4\u30EB\u306E\u9078\u629E: RestoreFromRepositoryFileSelectionPage.fileToRestore = {0} (\u5FA9\u5143\u3059\u308B {1}) RestoreFromRepositoryFileSelectionPage.revisionSelectionPaneTitle = {0} - \u5FA9\u5143\u3059\u308B\u30EA\u30D3\u30B8\u30E7\u30F3\u3092\u30C1\u30A7\u30C3\u30AF: RestoreFromRepositoryWizard.fileSelectionPageDescription = \u5404\u30D5\u30A1\u30A4\u30EB\u306E\u5FA9\u5143\u3059\u308B\u30EA\u30D3\u30B8\u30E7\u30F3\u3092\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002 RestoreFromRepositoryWizard.fileSelectionPageTitle = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u304B\u3089\u5FA9\u5143 RevertAction.error = \u5FA9\u5143\u5931\u6557 RevertDialog.multiple = \u8907\u6570\u306E\u30D1\u30B9\u304C\u9078\u629E\u3055\u308C\u3066\u3044\u307E\u3059\u3002 RevertDialog.resources = \u30ED\u30FC\u30AB\u30EB\u306E\u5909\u66F4\u3092\u53D6\u308A\u6D88\u3059\u30EA\u30BD\u30FC\u30B9\u3092\u30C1\u30A7\u30C3\u30AF\u3057\u3066\u304F\u3060\u3055\u3044\u3002 RevertDialog.title = \u5FA9\u5143 RevertDialog.url = URL: RevertOperation.0 = \u5909\u66F4\u3092\u53D6\u308A\u6D88\u3057\u3066{0}\u3078 RevertOperation.taskName = \u5909\u66F4\u306E\u53D6\u308A\u6D88\u3057 Run_update_4 = \u66F4\u65B0\u306E\u5B9F\u884C S&how_is_added_27 = \u8FFD\u52A0\u3055\u308C\u305F\u3053\u3068\u3092\u793A\u3059(&C) SSHPromptDialog.authentication = \u8A8D\u8A3C SSHPromptDialog.browse = \u53C2\u7167... SSHPromptDialog.invalidPortMessage = \u6709\u52B9\u306A\u30DD\u30FC\u30C8\u756A\u53F7\u3092\u534A\u89D2\u6570\u5B57\u3067\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002 SSHPromptDialog.invalidPortTitle = \u7121\u52B9\u306A\u30DD\u30FC\u30C8\u756A\u53F7 SSHPromptDialog.keyauth = \u30D7\u30E9\u30A4\u30D9\u30FC\u30C8\u30FB\u30AD\u30FC\u8A8D\u8A3C\u3092\u4F7F\u3046 SSHPromptDialog.keyfile = \u30AD\u30FC\u30D5\u30A1\u30A4\u30EB: SSHPromptDialog.passphrase = \u30D1\u30B9\u30D5\u30EC\u30FC\u30BA: SSHPromptDialog.passwordauth = \u30D1\u30B9\u30EF\u30FC\u30C9\u8A8D\u8A3C\u3092\u4F7F\u3046 SSHPromptDialog.port = \u30DD\u30FC\u30C8\u756A\u53F7: SSHPromptDialog.save = \u60C5\u5831\u3092\u4FDD\u5B58 SSHPromptDialog.title = SSH\u8A3C\u660E\u66F8\u306E\u5165\u529B SSLPromptDialog.certificate = \u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\u8A3C\u660E\u66F8: SSLPromptDialog.title = SSL\u30AF\u30E9\u30A4\u30A2\u30F3\u30C8\u8A3C\u660E\u66F8\u306E\u6E96\u5099 SVNAction.disabledMessage = \u9078\u629E\u3055\u308C\u305F\u64CD\u4F5C\u306F\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093\u3002 SVNAction.disabledTitle = \u60C5\u5831 SVNAction.errorTitle = \u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 SVNAction.mixingTags = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5185\u306B\u30BF\u30B0\u304C\u6DF7\u5728\u3057\u3066\u3044\u307E\u3059\u3002 \u540C\u671F\u5316\u306F\u3001\u5404\u30EA\u30BD\u30FC\u30B9\u306B\u95A2\u9023\u4ED8\u3051\u3089\u308C\u305F\u30BF\u30B0\u60C5\u5831\u3092\u4F7F\u7528\u3057\u3066\u3001\u30ED\u30FC\u30AB\u30EB\u30FB\u30EA\u30BD\u30FC\u30B9\u3068\u6BD4\u8F03\u3059\u308B\u30EA\u30E2\u30FC\u30C8\u30FB\u30EA\u30BD\u30FC\u30B9\u3092\u5224\u5225\u3059\u308B\u3053\u3068\u306B\u6CE8\u610F\u3057\u3066\u304F\u3060\u3055\u3044\u3002\r\n\r\n\u3053\u308C\u306F\u3001\u5225\u306E\u30BF\u30B0\u3078\u7F6E\u63DB\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u4E00\u90E8\u306F\u30BF\u30B0 ''{0}''\u3068\u3001\u305D\u308C\u4EE5\u5916\u306F\u307E\u305F\u5225\u306E\u30BF\u30B0\u3068\u540C\u671F\u5316\u3055\u308C\u308B\u3053\u3068\u3092\u610F\u5473\u3057\u307E\u3059\u3002\r\n\r\n\u7D9A\u884C\u3057\u307E\u3059\u304B? SVNAction.mixingTagsTitle = \u6DF7\u5408\u30BF\u30B0\u306E\u78BA\u8A8D SVNAction.multipleProblemsMessage = \u8907\u6570\u306E\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F: SVNAction.refreshMultipleQuestion = {0} \u9078\u629E\u3057\u305F\u30EA\u30BD\u30FC\u30B9\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u66F4\u65B0\u3057\u307E\u3059\u304B? SVNAction.refreshQuestion = {0} \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 ''{1}'' \u3092\u66F4\u65B0\u3057\u307E\u3059\u304B? SVNAction.refreshTitle = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u66F4\u65B0\u3057\u307E\u3059\u304B? SVNAction.warningTitle = \u8B66\u544A\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 SVNAddResolutionGenerator.Add_Resource_and_Children_to_SVN_2 = \u30EA\u30BD\u30FC\u30B9\u3068\u305D\u306E\u5B50\u3092SVN\u306B\u8FFD\u52A0 SVNAddResolutionGenerator.Add_Resource_to_SVN_1 = \u30EA\u30BD\u30FC\u30B9\u3092SVN\u3078\u8FFD\u52A0 SVNAddResolutionGenerator.Add_to_.svnignore_3 = .svnSVNignore\u3078\u8FFD\u52A0 SVNAnnotateBlock.line = \u884C SVNAnnotateBlock.lines = \u884C SVNAnnotateBlock.userRevision = {0} {1} ({2} {3}) SVNAnnotateView.showFileAnnotation = SVN \u6CE8\u91C8 - {0} SVNAnnotateView.viewInstructions = \u3053\u306E\u30D3\u30E5\u30FC\u306F SVN \u5185\u306E\u30D5\u30A1\u30A4\u30EB\u306E\u6CE8\u91C8\u3092\u8868\u793A\u3057\u307E\u3059\u3002 \u30D5\u30A1\u30A4\u30EB\u3092\u9078\u629E\u3057\u3066\u3001\u30B3\u30F3\u30C6\u30AD\u30B9\u30C8\u30FB\u30E1\u30CB\u30E5\u30FC\u304B\u3089\u300C\u30C1\u30FC\u30E0\u300D->\u300C\u6CE8\u91C8\u306E\u8868\u793A\u300D\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002 SVNCatchupReleaseViewer.No_workspace_file_1 = \u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306F\u3042\u308A\u307E\u305B\u3093\u3002 SVNCatchupReleaseViewer.Select_&Outgoing_Additions_1 = \u65B0\u898F\u30EA\u30BD\u30FC\u30B9\u306E\u9078\u629E(&U) SVNCatchupReleaseViewer.addAction = \u30D0\u30FC\u30B8\u30E7\u30F3\u7BA1\u7406\u306B\u8FFD\u52A0(&A) SVNCatchupReleaseViewer.commit = \u30B3\u30DF\u30C3\u30C8(&C)... SVNCatchupReleaseViewer.commonFile = \u5171\u901A\u30D5\u30A1\u30A4\u30EB: {0} SVNCatchupReleaseViewer.commonFileRevision = \u5171\u901A\u30D5\u30A1\u30A4\u30EB: {0} {1} SVNCatchupReleaseViewer.confirmMerge = \u30DE\u30FC\u30B8\u6E08\u307F\u3068\u3057\u3066\u30DE\u30FC\u30AF(&G) SVNCatchupReleaseViewer.fileDecoration = {0} ({1}) SVNCatchupReleaseViewer.folderDecoration = {0} {1} SVNCatchupReleaseViewer.forceCommit = \u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u304A\u3088\u3073\u30B3\u30DF\u30C3\u30C8(&M)... SVNCatchupReleaseViewer.forceUpdate = \u30AA\u30FC\u30D0\u30FC\u30E9\u30A4\u30C9\u304A\u3088\u3073\u66F4\u65B0(&P) SVNCatchupReleaseViewer.ignore = svn:ignore\u30D7\u30ED\u30D1\u30C6\u30A3\u306B\u8FFD\u52A0(&D) SVNCatchupReleaseViewer.labelWithSyncKind = {0} {1} SVNCatchupReleaseViewer.mergeUpdate = \u5909\u66F4\u3092\u30ED\u30FC\u30AB\u30EB\u30FB\u30B3\u30D4\u30FC\u306B\u30DE\u30FC\u30B8(&M) SVNCatchupReleaseViewer.noCommonFile = \u5171\u901A\u30D5\u30A1\u30A4\u30EB\u306F\u3042\u308A\u307E\u305B\u3093 SVNCatchupReleaseViewer.noRepositoryFile = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30D5\u30A1\u30A4\u30EB\u306F\u3042\u308A\u307E\u305B\u3093 SVNCatchupReleaseViewer.repositoryFile = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30D5\u30A1\u30A4\u30EB: {0} SVNCatchupReleaseViewer.repositoryFileRevision = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30D5\u30A1\u30A4\u30EB: {0} {1} [{2}] SVNCatchupReleaseViewer.showInHistory = \u30EA\u30BD\u30FC\u30B9\u30FB\u30D2\u30B9\u30C8\u30EA\u30FC\u306B\u8868\u793A(&R) SVNCatchupReleaseViewer.update = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u304B\u3089\u66F4\u65B0(&U) SVNCatchupReleaseViewer.workspaceFile = \u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB: {0} SVNCompareEditorInput.branchLabel = <\u30D6\u30E9\u30F3\u30C1-{0}> SVNCompareEditorInput.comparing = \u6BD4\u8F03\u4E2D... SVNCompareEditorInput.different = \u7570\u306A\u308B\u7A2E\u985E\u306E\u30EA\u30BD\u30FC\u30B9\u3068\u6BD4\u8F03\u3067\u304D\u307E\u305B\u3093\u3002 SVNCompareEditorInput.headLabel = SVNCompareEditorInput.inBranch = {1} \u5185\u306E {0} SVNCompareEditorInput.inHead = HEAD \u5185\u306E {0} SVNCompareEditorInput.noRepositoryFile = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30D5\u30A1\u30A4\u30EB\u306F\u3042\u308A\u307E\u305B\u3093 SVNCompareEditorInput.noWorkspaceFile = \u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB\u306F\u3042\u308A\u307E\u305B\u3093 SVNCompareEditorInput.repository = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC: {0} {1} SVNCompareEditorInput.titleAncestor = {0} {1}-{2} \u304A\u3088\u3073 {3} \u306E\u6BD4\u8F03 SVNCompareEditorInput.titleNoAncestor = {0} {1} \u304A\u3088\u3073 {2} \u306E\u6BD4\u8F03 SVNCompareEditorInput.titleNoAncestorDifferent = {0} {1} \u304A\u3088\u3073 {2} {3} \u306E\u6BD4\u8F03 SVNCompareEditorInput.workspace = \u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9: {0} SVNCompareEditorInput.workspaceLabel = <\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9> SVNCompareRevisionsInput.addToWorkspace = \u53D6\u5F97 SVNCompareRevisionsInput.compareResourceAndVersions = {0} <\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9> \u3068\u30EA\u30D3\u30B8\u30E7\u30F3\u306E\u6BD4\u8F03 SVNCompareRevisionsInput.errorReplacingMessage = \u30EA\u30BD\u30FC\u30B9\u3092\u30ED\u30FC\u30C9\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002 \u901A\u4FE1\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u305F\u3001\u30EA\u30BD\u30FC\u30B9\u304C\u30B5\u30FC\u30D0\u30FC\u4E0A\u306B\u5B58\u5728\u3057\u306A\u3044\u3001\r\n\u305D\u308C\u3089\u306E\u30EA\u30BD\u30FC\u30B9\u3078\u306E\u30A2\u30AF\u30BB\u30B9\u6A29\u304C\u306A\u3044\u3001\u306E\u3044\u305A\u308C\u304B\u3067\u3059\u3002 SVNCompareRevisionsInput.errorReplacingTitle = \u7F6E\u63DB\u3067\u304D\u307E\u305B\u3093 SVNCompareRevisionsInput.repository = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30D5\u30A1\u30A4\u30EB: {0} SVNCompareRevisionsInput.structureCompare = \u69CB\u9020\u4F53\u306E\u6BD4\u8F03 SVNCompareRevisionsInput.truncate = {0}[...] SVNCompareRevisionsInput.workspace = \u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u30FB\u30D5\u30A1\u30A4\u30EB: {0} SVNConflicts = SVN\u66F4\u65B0\u3067\u7AF6\u5408 SVNDecorator.fileDecorationNoTag = {0} [{1}] SVNDecorator.fileDecorationWithTag = {0} [{1}:{2}] SVNDecorator.folderDecoration = {0} [{1}] SVNDecorator.projectDecoration = {0} [{1}] SVNDecorator.projectDecorationWithTag = {0} [{1} {2}] SVNDecoratorPreferencesPage.AddVariables = \u5909\u6570\u306E\u8FFD\u52A0 SVNDecoratorPreferencesPage.addVariables = \u5909\u6570\u306E\u8FFD\u52A0(&V)... SVNDecoratorPreferencesPage.authorVariable = \u4F5C\u6210\u8005\u306E\u540D\u524D SVNDecoratorPreferencesPage.colorsAndFontsLink = \u30D5\u30A9\u30F3\u30C8\u3068\u8272\u88C5\u98FE\u3092\u8A2D\u5B9A\u3059\u308B\u306B\u306F ''{0}'' \u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044 SVNDecoratorPreferencesPage.computeDeep = \u6DF1\u3044\u30D5\u30A9\u30EB\u30C0\u306E\u767A\u4FE1\u72B6\u614B\u3092\u8A08\u7B97(&C) (\u3053\u308C\u3092\u4F7F\u7528\u4E0D\u53EF\u306B\u3059\u308B\u3068\u3001\u30C7\u30B3\u30EC\u30FC\u30BF\u30FC\u306E\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u304C\u5411\u4E0A\u3057\u307E\u3059) SVNDecoratorPreferencesPage.dateVariable = \u6700\u7D42\u66F4\u65B0\u65E5\u6642 SVNDecoratorPreferencesPage.description = SVN \u30C7\u30B3\u30EC\u30FC\u30BF\u30FC\u8A2D\u5B9A: SVNDecoratorPreferencesPage.externalResources = \u5916\u90E8\u306E\u30EA\u30BD\u30FC\u30B9\u304C\u3042\u308B\u3053\u3068\u3092\u793A\u3059(&e) SVNDecoratorPreferencesPage.fileFormat = \u30D5\u30A1\u30A4\u30EB\u30FB\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8(&F): SVNDecoratorPreferencesPage.flagAddedVariable = \u30B5\u30FC\u30D0\u306B\u8FFD\u52A0\u3055\u308C\u305F\u30EA\u30BD\u30FC\u30B9\u3092\u8868\u3059\u30D5\u30E9\u30B0 SVNDecoratorPreferencesPage.flagDirtyVariable = \u767A\u4FE1\u5909\u66F4\u3092\u6301\u3064\u30EA\u30BD\u30FC\u30B9\u3092\u8868\u3059\u30D5\u30E9\u30B0 SVNDecoratorPreferencesPage.flagExternalVariable = \u5916\u90E8\u306E\u30D5\u30A9\u30EB\u30C0\u3092\u793A\u3059\u30D5\u30E9\u30B0 SVNDecoratorPreferencesPage.folderFormat = \u30D5\u30A9\u30EB\u30C0\u30FC\u30FB\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8(&O): SVNDecoratorPreferencesPage.generalDescription = SVN \u30C7\u30B3\u30EC\u30FC\u30BF\u30FC\u306E\u4E00\u822C\u30D7\u30ED\u30D1\u30C6\u30A3\u30FC\u3092\u8A2D\u5B9A\u3057\u307E\u3059: SVNDecoratorPreferencesPage.generalTabFolder = \u4E00\u822C(&G) SVNDecoratorPreferencesPage.iconDescription = \u30A2\u30A4\u30B3\u30F3\u30FB\u30C7\u30B3\u30EC\u30FC\u30BF\u30FC\u3092\u4F7F\u7528\u3057\u3066\u3069\u306E SVN \u30EA\u30BD\u30FC\u30B9\u72B6\u614B\u3092\u793A\u3059\u304B\u3092\u9078\u629E\u3057\u307E\u3059: SVNDecoratorPreferencesPage.labelDecorationAdded = \u8FFD\u52A0\u306E\u30E9\u30D9\u30EB\u88C5\u98FE(&t): SVNDecoratorPreferencesPage.labelDecorationExternal = \u5916\u90E8\u306E\u30E9\u30D9\u30EB\u88C5\u98FE(&e): SVNDecoratorPreferencesPage.labelDecorationOutgoing = \u767A\u4FE1\u306E\u30E9\u30D9\u30EB\u88C5\u98FE(&L): SVNDecoratorPreferencesPage.labelDecorationsLink = SVN\u88C5\u98FE\u3092\u5229\u7528\u53EF\u80FD\u306B\u3059\u308B\u306B\u306F ''{0}'' \u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044 SVNDecoratorPreferencesPage.nameResourceVariable = \u88C5\u98FE\u3059\u308B\u30EA\u30BD\u30FC\u30B9\u306E\u540D\u524D SVNDecoratorPreferencesPage.newResources = \u65B0\u898F\u30EA\u30BD\u30FC\u30B9\u304C\u3042\u308B\u3053\u3068\u3092\u793A\u3059(&N) SVNDecoratorPreferencesPage.preview = \u30D7\u30EC\u30D3\u30E5\u30FC: SVNDecoratorPreferencesPage.projectFormat = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30FB\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8(&P): SVNDecoratorPreferencesPage.remoteLocationLabel = \u30EA\u30E2\u30FC\u30C8\u30FB\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30E9\u30D9\u30EB SVNDecoratorPreferencesPage.remoteLocationVariable = \u30EA\u30E2\u30FC\u30C8\u30FB\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306EURL SVNDecoratorPreferencesPage.remoteLocationVariableShort = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306E\u30EB\u30FC\u30C8URL\u3078\u306E\u76F8\u5BFE\u30D1\u30B9 SVNDecoratorPreferencesPage.revisionResourceVariable = \u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u306B\u30ED\u30FC\u30C9\u3055\u308C\u305F\u6700\u7D42\u30EA\u30D3\u30B8\u30E7\u30F3 SVNDecoratorPreferencesPage.selectFormats = \u30D5\u30A1\u30A4\u30EB\u3001\u30D5\u30A9\u30EB\u30C0\u3001\u304A\u3088\u3073\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30FB\u30C6\u30AD\u30B9\u30C8\u30FB\u30E9\u30D9\u30EB\u306E\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044: SVNDecoratorPreferencesPage.selectVariablesToAdd = \u88C5\u98FE\u30D5\u30A9\u30FC\u30DE\u30C3\u30C8\u306B\u8FFD\u52A0\u3059\u308B\u5909\u6570\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044(&V): SVNDecoratorPreferencesPage.showSyncInfoInLabel = \u3059\u3079\u3066\u306E\u540C\u671F\u60C5\u5831\u3092\u30EA\u30BD\u30FC\u30B9\u306E\u30C6\u30AD\u30B9\u30C8\u30FB\u30E9\u30D9\u30EB\u306B\u8868\u793A SVNDecoratorPreferencesPage.synchronizeDescription = \u300C\u540C\u671F\u5316\u300D\u30D3\u30E5\u30FC\u306B\u3064\u3044\u3066 SVN \u30C7\u30B3\u30EC\u30FC\u30BF\u30FC\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u30FC\u3092\u8A2D\u5B9A\u3057\u307E\u3059: SVNDecoratorPreferencesPage.synchronizeTabFolder = \u300C\u540C\u671F\u5316\u300D\u30D3\u30E5\u30FC(&Y) SVNDecoratorPreferencesPage.textLabel = \u30C6\u30AD\u30B9\u30C8(&E) SVNDecoratorPreferencesPage.useFontDecorators = \u30D5\u30A9\u30F3\u30C8\u3068\u8272\u88C5\u98FE\u3092\u5229\u7528\u53EF\u80FD\u306B\u3059\u308B(&E) \uFF08\u3053\u308C\u3092\u4F7F\u7528\u4E0D\u53EF\u306B\u3059\u308B\u3068\u3001\u30C7\u30B3\u30EC\u30FC\u30BF\u30FC\u306E\u30D1\u30D5\u30A9\u30FC\u30DE\u30F3\u30B9\u304C\u5411\u4E0A\u3057\u307E\u3059\uFF09 SVNFilePropertiesPage.baseRevision = \u57FA\u672C\u30EA\u30D3\u30B8\u30E7\u30F3: SVNFilePropertiesPage.baseTimestamp = \u57FA\u672C\u30BF\u30A4\u30E0\u30FB\u30B9\u30BF\u30F3\u30D7: SVNFilePropertiesPage.date = {0} (\u65E5\u4ED8) SVNFilePropertiesPage.dirty = \u7DE8\u96C6\u4E2D: SVNFilePropertiesPage.error = \u3053\u306E\u30DA\u30FC\u30B8\u306E\u4F5C\u6210\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 SVNFilePropertiesPage.ignored = \u30D5\u30A1\u30A4\u30EB\u306F SVN \u306B\u3088\u3063\u3066\u7121\u8996\u3055\u308C\u307E\u3059\u3002 SVNFilePropertiesPage.isAdded = \u3053\u306E\u30D5\u30A1\u30A4\u30EB\u306F SVN \u5236\u5FA1\u306B\u8FFD\u52A0\u3055\u308C\u307E\u3057\u305F\u304C\u3001\u30B3\u30DF\u30C3\u30C8\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002 SVNFilePropertiesPage.modified = \u5909\u66F4: SVNFilePropertiesPage.none = \u30D8\u30C3\u30C9 SVNFilePropertiesPage.notAvailable = \u4F7F\u7528\u4E0D\u53EF SVNFilePropertiesPage.notManaged = \u30D5\u30A1\u30A4\u30EB\u304C SVN \u306B\u3088\u3063\u3066\u7BA1\u7406\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002 SVNFilePropertiesPage.permissions = \u8A31\u53EF: SVNFilePropertiesPage.version = {0} (\u30D0\u30FC\u30B8\u30E7\u30F3) SVNFolderPropertiesPage.disconnect = \u5207\u65AD(&D)... SVNFolderPropertiesPage.disconnectQuestion = \u30D5\u30A9\u30EB\u30C0\u3092 SVN \u5236\u5FA1\u304B\u3089\u5207\u65AD\u3059\u308B\u3068\u3001\u30D5\u30A9\u30EB\u30C0\u306E SVN \u540C\u671F\u60C5\u5831\u304C\u524A\u9664\u3055\u308C\u307E\u3059\u3002 \u5207\u65AD\u3057\u307E\u3059\u304B? SVNFolderPropertiesPage.disconnectTitle = \u30D5\u30A9\u30EB\u30C0\u3092\u5207\u65AD\u3057\u307E\u3059\u304B? SVNFolderPropertiesPage.ignored = \u30D5\u30A9\u30EB\u30C0\u306F SVN \u306B\u3088\u3063\u3066\u7121\u8996\u3055\u308C\u307E\u3059\u3002 SVNFolderPropertiesPage.notManaged = \u30D5\u30A9\u30EB\u30C0\u306F SVN \u306B\u3088\u3063\u3066\u7BA1\u7406\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002 SVNFolderPropertiesPage.repository = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30D1\u30B9: SVNFolderPropertiesPage.root = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30EB\u30FC\u30C8: SVNFolderPropertiesPage.static = static : SVNLocalCompareEditorInput.title = SVN \u6BD4\u8F03 [{0}] SVNOperation.0 = {1} \u64CD\u4F5C\u306E {0} \u3067\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 SVNOperationCancelledException.operationCancelled = \u64CD\u4F5C\u304C\u30AD\u30E3\u30F3\u30BB\u30EB\u3055\u308C\u307E\u3057\u305F SVNPreferencePage.&Never_2 = \u4F55\u3082\u3057\u306A\u3044(&N) SVNPreferencePage.&Prompt_3 = \u30D7\u30ED\u30F3\u30D7\u30C8(&R) SVNPreferencePage.Auto-&save_4 = \u81EA\u52D5\u3067\u4FDD\u7BA1(&A) SVNPreferencePage.Save_dirty_editors_before_SVN_operations_1 = SVN \u64CD\u4F5C\u524D\u306B\u7DE8\u96C6\u4E2D\u306E\u30A8\u30C7\u30A3\u30BF\u30FC\u3092\u4FDD\u7BA1 SVNPreferencePage.browseDirectory = \u53C2\u7167... SVNPreferencePage.calculateDeepDecoration = SVN\u88C5\u98FE\u3092\u6DF1\u304F\u8A08\u7B97(\u9045\u3044) SVNPreferencePage.commandLineNotAvailable = \u30B3\u30DE\u30F3\u30C9\u30E9\u30A4\u30F3\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002\u74B0\u5883\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002 SVNPreferencePage.compressionLevel = \u5727\u7E2E\u30EC\u30D9\u30EB(&L): SVNPreferencePage.configurationLocation = \u8A2D\u5B9A\u30D5\u30A1\u30A4\u30EB\u306E\u5834\u6240 : SVNPreferencePage.considerContentsInCompare = \u6BD4\u8F03\u3067\u30D5\u30A1\u30A4\u30EB\u30FB\u30B3\u30F3\u30C6\u30F3\u30C4\u3092\u8003\u616E(&S) SVNPreferencePage.defaultTextKSubst = \u30C7\u30D5\u30A9\u30EB\u30C8\u30FB\u30AD\u30FC\u30EF\u30FC\u30C9\u4EE3\u5165(&K) SVNPreferencePage.description = \u4E00\u822C SVN \u8A2D\u5B9A: SVNPreferencePage.determineVersionEnabled = \u6700\u521D\u306E\u63A5\u7D9A\u3067\u30B5\u30FC\u30D0\u30FC\u30FB\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u691C\u8A3C(&V) SVNPreferencePage.fetchChangePathOnDemand = \u5F71\u97FF\u3055\u308C\u308B\u30D1\u30B9\u3092\u5373\u5EA7\u306B\u53D6\u308A\u51FA\u3057 SVNPreferencePage.isNotSvnConfigDir = \u9078\u629E\u3055\u308C\u305F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306FSVN\u306E\u8A2D\u5B9A\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002 SVNPreferencePage.javaSvnNotAvailable = SVNKit\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002\u74B0\u5883\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002 SVNPreferencePage.javahlNotAvailable = JavaHL\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9\u306F\u5229\u7528\u3067\u304D\u307E\u305B\u3093\u3002\u74B0\u5883\u3092\u78BA\u8A8D\u3057\u3066\u304F\u3060\u3055\u3044\u3002 SVNPreferencePage.javasvn = SVNKit (Pure Java) SVNPreferencePage.level0 = 0 (\u7121\u52B9) SVNPreferencePage.level1 = 1 (\u6700\u5C0F\u5727\u7E2E) SVNPreferencePage.level2 = 2 SVNPreferencePage.level3 = 3 SVNPreferencePage.level4 = 4 SVNPreferencePage.level5 = 5 SVNPreferencePage.level6 = 6 SVNPreferencePage.level7 = 7 SVNPreferencePage.level8 = 8 SVNPreferencePage.level9 = 9 (\u6700\u5927\u5727\u7E2E) SVNPreferencePage.logEntriesToFetch = \u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u30ED\u30B0\u30E1\u30C3\u30BB\u30FC\u30B8\u6570 (0=\u5168\u53D6\u5F97) SVNPreferencePage.notquiet = \u8A73\u7D30 SVNPreferencePage.pruneEmptyDirectories = \u7A7A\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30FC\u306E\u6574\u7406(&P) SVNPreferencePage.quietness = \u30E1\u30C3\u30BB\u30FC\u30B8\u51FA\u529B\u30EC\u30D9\u30EB(&Q): SVNPreferencePage.reallyquiet = \u91CD\u5927\u30A8\u30E9\u30FC SVNPreferencePage.removeOnReplace = \u7F6E\u63DB\u6642\u306B\u30D0\u30FC\u30B8\u30E7\u30F3\u7BA1\u7406\u3057\u3066\u3044\u306A\u3044\u30EA\u30BD\u30FC\u30B9\u3092\u524A\u9664(&R) SVNPreferencePage.replaceUnmanaged = \u7F6E\u63DB\u6642\u306B\u7BA1\u7406\u5BFE\u8C61\u5916\u30EA\u30BD\u30FC\u30B9\u3092\u524A\u9664(&D) SVNPreferencePage.repositoriesAreBinary = \u3059\u3079\u3066\u306E\u65B0\u898F\u30D5\u30A1\u30A4\u30EB\u3092\u30D0\u30A4\u30CA\u30EA\u30FC\u3068\u3057\u3066\u6271\u3046(&T) SVNPreferencePage.selectUnadded = \u30B3\u30DF\u30C3\u30C8\u6642\u306B\u30D0\u30FC\u30B8\u30E7\u30F3\u7BA1\u7406\u3055\u308C\u3066\u3044\u306A\u3044\u30EA\u30BD\u30FC\u30B9\u3092\u9078\u629E(&u) SVNPreferencePage.showAddRemoveMarkers = \u524A\u9664\u3055\u308C\u305F\u30D5\u30A1\u30A4\u30EB\u30FB\u30DE\u30FC\u30AB\u30FC\u3092\u8868\u793A(&M) SVNPreferencePage.showCompareMergeInSync = \u30C0\u30A4\u30A2\u30ED\u30B0\u306B\u30EA\u30D3\u30B8\u30E7\u30F3\u6BD4\u8F03\u3092\u8868\u793A(&C) SVNPreferencePage.showOutOfDateFolders = \u4F7F\u308F\u308C\u3066\u3044\u306A\u3044\u30D5\u30A9\u30EB\u30C0\u3092\u8868\u793A SVNPreferencePage.showTags = \u30EA\u30E2\u30FC\u30C8\u30FB\u30D2\u30B9\u30C8\u30EA\u30FC\u30FB\u30D3\u30E5\u30FC\u3067\u30BF\u30B0\u3092\u8868\u793A SVNPreferencePage.showUnadded = \u30B3\u30DF\u30C3\u30C8\u6642\u306B\u30D0\u30FC\u30B8\u30E7\u30F3\u7BA1\u7406\u3055\u308C\u3066\u3044\u306A\u3044\u30EA\u30BD\u30FC\u30B9\u3092\u8868\u793A SVNPreferencePage.silentWarningMessage = \u300C\u91CD\u5927\u30A8\u30E9\u30FC\u300D\u30E2\u30FC\u30C9\u3067\u306F\u3001\u4E00\u90E8\u306E SVN \u30B5\u30FC\u30D0\u30FC\u304C\u3001\u767A\u751F\u3057\u305F\u30A8\u30E9\u30FC\u306B\u95A2\u3059\u308B\u91CD\u8981\u306A\u60C5\u5831\u3092\u5831\u544A\u3057\u306A\u3044\u5834\u5408\u304C\u3042\u308A\u307E\u3059\u3002 \u4EE3\u308F\u308A\u306B\u300C\u8B66\u544A\u3068\u30A8\u30E9\u30FC\u300D\u30E2\u30FC\u30C9\u306E\u4F7F\u7528\u3092\u8003\u616E\u3057\u3066\u304F\u3060\u3055\u3044\u3002 SVNPreferencePage.silentWarningTitle = \u300C\u91CD\u5927\u30A8\u30E9\u30FC\u300D\u30E2\u30FC\u30C9\u306F\u5371\u967A\u3067\u3059\u3002 SVNPreferencePage.somewhatquiet = \u8B66\u544A\u3068\u30A8\u30E9\u30FC SVNPreferencePage.svnClientInterface = SVN\u30A4\u30F3\u30BF\u30D5\u30A7\u30FC\u30B9: SVNPreferencePage.svnConfigDirDoesNotExist = SVN\u8A2D\u5B9A\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u306F\u5B58\u5728\u3057\u307E\u305B\u3093\u3002 SVNPreferencePage.svncommandline = SVN\u30B3\u30DE\u30F3\u30C9\u30E9\u30A4\u30F3 SVNPreferencePage.svnjavahl = JavaHL (JNI) SVNPreferencePage.timeoutValue = \u901A\u4FE1\u30BF\u30A4\u30E0\u30A2\u30A6\u30C8 (\u79D2)(&C): SVNPreferencePage.useDefaultConfigLocation = \u30C7\u30D5\u30A9\u30EB\u30C8\u306E\u8A2D\u5B9A\u306E\u5834\u6240\u3092\u5229\u7528 SVNPreferencePage.useDirectoryConfig = \u5229\u7528\u3059\u308B\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA : SVNPreferencePage.useQuickdiffAnnotateGroup = \u30ED\u30FC\u30AB\u30EB\u30D5\u30A1\u30A4\u30EB\u306E\u6CE8\u91C8\u306B\u30AF\u30A4\u30C3\u30AFDiff\u6CE8\u91C8\u30E2\u30FC\u30C9\u3092\u4F7F\u7528 SVNPreferencesPage.Timeout_must_be_a_number_2 = \u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u306E\u5024\u306F\u6570\u5024\u3067\u306A\u3051\u308C\u3070\u306A\u308A\u307E\u305B\u3093\u3002 SVNPreferencesPage.Timeout_must_not_be_negative_1 = \u30BF\u30A4\u30E0\u30A2\u30A6\u30C8\u306F\u30DE\u30A4\u30CA\u30B9\u306B\u306F\u3067\u304D\u307E\u305B\u3093\u3002 SVNProjectPropertiesPage.Change_Sharing_5 = \u5171\u7528\u306E\u5909\u66F4(&C)... SVNProjectPropertiesPage.Select_a_Repository_1 = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306E\u9078\u629E SVNProjectPropertiesPage.Select_a_SVN_repository_location_to_share_the_project_with__2 = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u5171\u7528\u3059\u308B\u4E92\u63DB SVN \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044: SVNProjectPropertiesPage.You_can_change_the_sharing_of_this_project_to_another_repository_location._However,_this_is_only_possible_if_the_new_location_is___compatible___(on_the_same_host_with_the_same_repository_path)._1 = \u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5171\u7528\u3092\u3001\u5225\u306E\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u306B\u5909\u66F4\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u3059\u3002 \u305F\u3060\u3057\u3001\u3053\u308C\u306F\u65B0\u3057\u3044\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u306B\u300C\u4E92\u63DB\u6027\u304C\u3042\u308B\u300D(\u540C\u3058\u30DB\u30B9\u30C8\u4E0A\u306B\u3042\u308A\u3001\u540C\u3058\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30D1\u30B9\u3092\u6301\u3064) \u5834\u5408\u306B\u306E\u307F\u53EF\u80FD\u3067\u3059\u3002 SVNProjectPropertiesPage.clearReadOnly = \u3059\u3079\u3066\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u66F8\u304D\u8FBC\u307F\u53EF\u80FD\u306B\u8A2D\u5B9A SVNProjectPropertiesPage.configureForWatchEdit = \u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u76E3\u8996/\u7DE8\u96C6\u3092\u53EF\u80FD\u306B\u3059\u308B SVNProjectPropertiesPage.connectionType = \u63A5\u7D9A\u30BF\u30A4\u30D7: SVNProjectPropertiesPage.fetchAbsentDirectoriesOnUpdate = \u66F4\u65B0\u6642\u306B\u6B20\u843D\u3057\u305F\u307E\u305F\u306F\u65B0\u898F\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30FC\u3092\u53D6\u308A\u51FA\u3059(&F) SVNProjectPropertiesPage.progressTaskName = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E SVN \u30D7\u30ED\u30D1\u30C6\u30A3\u30FC\u306E\u66F4\u65B0 SVNProjectPropertiesPage.setReadOnly = \u3059\u3079\u3066\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u8AAD\u307F\u53D6\u308A\u5C02\u7528\u306B\u8A2D\u5B9A SVNProjectPropertiesPage.user = \u30E6\u30FC\u30B6\u30FC: SVNProjectSetSerializer.Confirm_Overwrite_Project_8 = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u4E0A\u66F8\u304D\u3092\u78BA\u8A8D SVNProjectSetSerializer.The_project_{0}_already_exists._Do_you_wish_to_overwrite_it__9 = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 {0} \u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059\u3002 \u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B ? SVNPromptUserPassword.authentication = Subversion\u306E\u8A8D\u8A3C SVNPropertiesPage.connectionType = \u63A5\u7D9A\u30BF\u30A4\u30D7(&C): SVNPropertiesPage.defaultPort = \u30C7\u30D5\u30A9\u30EB\u30C8(&F) SVNPropertiesPage.host = \u30DB\u30B9\u30C8(&H): SVNPropertiesPage.module = \u30D5\u30A9\u30EB\u30C0: SVNPropertiesPage.password = \u30D1\u30B9\u30EF\u30FC\u30C9(&P): SVNPropertiesPage.path = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30D1\u30B9(&A): SVNPropertiesPage.update = \u30BF\u30B0\u306E\u5909\u66F4(&T)... SVNPropertiesPage.user = \u30E6\u30FC\u30B6\u30FC(&U): SVNPropertiesPage.virtualModule = <\u5BFE\u5FDC\u3059\u308B\u30EA\u30E2\u30FC\u30C8\u30FB\u30D5\u30A9\u30EB\u30C0\u304C\u3042\u308A\u307E\u305B\u3093> SVNPropertyDeleteAction.confirmMultiple = \u672C\u5F53\u306B\u30D7\u30ED\u30D1\u30C6\u30A3{0}\u3092\u524A\u9664\u3057\u307E\u3059\u304B? SVNPropertyDeleteAction.confirmSingle = \u672C\u5F53\u306B''{0}''\u3092\u524A\u9664\u3057\u307E\u3059\u304B? SVNPropertyDeleteAction.delete = \u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u524A\u9664\u4E2D\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F SVNPropertyDeleteAction.title = \u30D7\u30ED\u30D1\u30C6\u30A3\u524A\u9664\u306E\u78BA\u8A8D SVNPropertyModifyAction.modify = \u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u8A2D\u5B9A\u4E2D\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F SVNPropertyPage.added = \u8FFD\u52A0 SVNPropertyPage.changedAuthor = \u6700\u7D42\u66F4\u65B0\u8005 SVNPropertyPage.changedDate = \u6700\u7D42\u66F4\u65B0\u65E5\u6642 SVNPropertyPage.changedRevision = \u6700\u7D42\u66F4\u65B0\u30EA\u30D3\u30B8\u30E7\u30F3 SVNPropertyPage.copied = \u30B3\u30D4\u30FC SVNPropertyPage.copiedFrom = \u30B3\u30D4\u30FC\u5143URL SVNPropertyPage.deleted = \u524A\u9664 SVNPropertyPage.ignored = \u7121\u8996 SVNPropertyPage.lockComment = \u30ED\u30C3\u30AF\u30B3\u30E1\u30F3\u30C8 SVNPropertyPage.lockCreationDate = \u30ED\u30C3\u30AF\u65E5 SVNPropertyPage.lockOwner = \u30ED\u30C3\u30AF\u4FDD\u6301\u8005 SVNPropertyPage.managed = \u7BA1\u7406 SVNPropertyPage.merged = \u30DE\u30FC\u30B8 SVNPropertyPage.modified = \u66F4\u65B0 SVNPropertyPage.path = \u30D1\u30B9: SVNPropertyPage.revision = \u30EA\u30D3\u30B8\u30E7\u30F3: SVNPropertyPage.status = \u72B6\u614B SVNPropertyPage.switched = Switched SVNPropertyPage.url = URL: SVNPropertyPage.wcLocked = Working copy locked SVNRefreshRemoteProjectWizard.title = \u30D6\u30E9\u30F3\u30C1\u306E\u66F4\u65B0 SVNRemoteFilePropertySource.author = \u4F5C\u6210\u8005 SVNRemoteFilePropertySource.comment = \u30B3\u30E1\u30F3\u30C8 SVNRemoteFilePropertySource.date = \u65E5\u4ED8 SVNRemoteFilePropertySource.name = \u540D\u524D SVNRemoteFilePropertySource.revision = \u30EA\u30D3\u30B8\u30E7\u30F3 SVNRemoteFolderPropertySource.name = \u540D\u524D SVNRemoteFolderPropertySource.none = (\u306A\u3057) SVNRemoveResloutionGenerator.Commit_Deletion_to_SVN_1 = \u524A\u9664\u3092SVN\u306B\u30B3\u30DF\u30C3\u30C8 SVNRemoveResloutionGenerator.No_local_history_available._Try_undoing_from_the_server_3 = \u30ED\u30FC\u30AB\u30EB\u30D2\u30B9\u30C8\u30EA\u30FC\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u30B5\u30FC\u30D0\u304B\u3089\u53D6\u308A\u6D88\u3057\u3092\u8A66\u307F\u3066\u304F\u3060\u3055\u3044\u3002 SVNRemoveResloutionGenerator.Undo_Deletion_from_Local_History_2 = \u30ED\u30FC\u30AB\u30EB\u30D2\u30B9\u30C8\u30EA\u30FC\u304B\u3089\u524A\u9664\u306E\u53D6\u308A\u6D88\u3057 SVNRemoveResloutionGenerator.Undo_Deletion_from_SVN_Server_4 = SVN\u30B5\u30FC\u30D0\u304B\u3089\u524A\u9664\u3092\u53D6\u308A\u6D88\u3057 SVNRemoveResolutionGenerator.Commit_Deletion_to_SVN_1 = \u524A\u9664\u3092SVN\u3078\u30B3\u30DF\u30C3\u30C8 SVNRemoveResolutionGenerator.No_local_history_available._Try_undoing_from_the_server_3 = \u6709\u52B9\u306A\u30ED\u30FC\u30AB\u30EB\uFF65\u30D2\u30B9\u30C8\u30EA\u30FC\u304C\u3042\u308A\u307E\u305B\u3093\u3002\u30B5\u30FC\u30D0\u304B\u3089\u53D6\u308A\u6D88\u3057\u3092\u884C\u3063\u3066\u307F\u3066\u304F\u3060\u3055\u3044\u3002 SVNRemoveResolutionGenerator.Undo_Deletion_from_Local_History_2 = \u30ED\u30FC\u30AB\u30EB\uFF65\u30D2\u30B9\u30C8\u30EA\u30FC\u304B\u3089\u524A\u9664\u3092\u53D6\u308A\u6D88\u3057 SVNRemoveResolutionGenerator.Undo_Deletion_from_SVN_Server_4 = SVN\u30B5\u30FC\u30D0\u304B\u3089\u524A\u9664\u3092\u53D6\u308A\u6D88\u3057 SVNRepositoryLocationPropertySource.default = \u30C7\u30D5\u30A9\u30EB\u30C8 SVNRepositoryLocationPropertySource.host = \u30DB\u30B9\u30C8 SVNRepositoryLocationPropertySource.method = \u63A5\u7D9A\u30E1\u30BD\u30C3\u30C9 SVNRepositoryLocationPropertySource.root = \u30EB\u30FC\u30C8 SVNRepositoryLocationPropertySource.user = \u30E6\u30FC\u30B6\u30FC SVNRepositoryPropertiesPage.Confirm_Project_Sharing_Changes_1 = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5171\u7528\u5909\u66F4\u306E\u78BA\u8A8D SVNRepositoryPropertiesPage.There_are_projects_in_the_workspace_shared_with_this_repository_2 = \u3053\u306E\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u3068\u5171\u7528\u3055\u308C\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u304C\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u306B\u3042\u308A\u307E\u3059\u3002 \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u3001\u5165\u529B\u3055\u308C\u305F\u65B0\u3057\u3044\u60C5\u5831\u3067\u66F4\u65B0\u3055\u308C\u307E\u3059\u3002 SVNRepositoryPropertiesPage.browseRootUrl = \u53C2\u7167 ... SVNRepositoryPropertiesPage.login = \u30ED\u30B0\u30A4\u30F3 : SVNRepositoryPropertiesPage.password = \u30D1\u30B9\u30EF\u30FC\u30C9 : SVNRepositoryPropertiesPage.repositoryRootUrl = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30EB\u30FC\u30C8URL : SVNRepositoryPropertiesPage.repositoryUrl = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC URL : SVNRepositoryPropertiesPage.rootUrlWarning = \u3082\u3057\u30EA\u30DD\u30B8\u30C8\u30EA\u30FCURL\u304Chttp://mycompany.com/repository/trunk/project\u3067\u3042\u308C\u3070\u3001\n\u30EB\u30FC\u30C8\u30FB\u30EA\u30DD\u30B8\u30C8\u30EAURL\u306F\u304A\u305D\u3089\u304Fhttp://mycompany.com/repository\u3067\u3059\u3002 SVNRepositoryPropertiesPage.sharedProject = {0} \u3068\u5171\u7528\u3055\u308C\u3066\u3044\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8: SVNRepositoryPropertiesPage.useCustomLabel = \u30AB\u30B9\u30BF\u30E0\u30FB\u30E9\u30D9\u30EB\u3092\u4F7F\u7528\u3059\u308B(&L): SVNRepositoryPropertiesPage.useDefaultProgramName = \u3053\u306E\u30B5\u30FC\u30D0\u30FC\u304B\u3089\u306E\u30C6\u30AD\u30B9\u30C8\u30FB\u30E1\u30C3\u30BB\u30FC\u30B8\u63A5\u982D\u90E8\u306B\u30C7\u30D5\u30A9\u30EB\u30C8\u30FB\u30D7\u30ED\u30B0\u30E9\u30E0\u540D "cvs" \u304C\u3042\u308B\u3053\u3068\u3092\u4E88\u671F\u3059\u308B(&D) SVNRepositoryPropertiesPage.useLocationAsLabel = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u8B58\u5225\u30B9\u30C8\u30EA\u30F3\u30B0\u3092\u30E9\u30D9\u30EB\u3068\u3057\u3066\u4F7F\u7528\u3059\u308B(&R) SVNRepositoryPropertiesPage.useProgramName = \u30AB\u30B9\u30BF\u30E0\u30FB\u30D7\u30ED\u30B0\u30E9\u30E0\u540D\u3092\u4E88\u671F\u3059\u308B(&P): SVNRepositoryPropertiesPage.useRepositoryUrlAsLabel = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FCURL\u3092\u30E9\u30D9\u30EB\u3068\u3057\u3066\u5229\u7528 SVNSyncCompareInput.confirmMergeMessage = \u5909\u66F4\u304C\u4FDD\u7BA1\u3055\u308C\u307E\u3057\u305F\u3002 \u7D42\u4E86\u3057\u305F\u3089\u3001\r\n\u300C\u30DE\u30FC\u30B8\u6E08\u307F\u3068\u3057\u3066\u30DE\u30FC\u30AF\u300D\u3092\u9078\u629E\u3057\u3066\u3001\u3053\u306E\u30D5\u30A1\u30A4\u30EB\u3092\u767A\u4FE1\u5909\u66F4\u3068\u3057\u307E\u3059\u3002 SVNSyncCompareInput.confirmMergeMessageTitle = \u60C5\u5831 SVNSyncCompareInput.filteringOutgoingChanges = \u767A\u4FE1\u5909\u66F4\u3092\u6301\u3064\u30EA\u30BD\u30FC\u30B9\u306E\u7D2F\u7A4D SVNSyncCompareInput.projectDeleted = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 ''{0}'' \u306F\u3001\u30ED\u30FC\u30AB\u30EB\u3067\u524A\u9664\u3055\u308C\u3001\u540C\u671F\u5316\u3067\u304D\u307E\u305B\u3093\u3002 SVNSyncSet.conflicts = {0} \u500B\u306E\u7AF6\u5408\u3001 SVNSyncSet.incomings = {0} \u500B\u306E\u8FFD\u52A0\u3055\u308C\u305F\u5909\u66F4\u3001 SVNSyncSet.new = {0} \u500B\u306E\u65B0\u898F\u30EA\u30BD\u30FC\u30B9\u3002 SVNSyncSet.noConflicts = \u7AF6\u5408\u306A\u3057\u3001 SVNSyncSet.noIncomings = \u5909\u66F4\u7B87\u6240\u306A\u3057\u3001 SVNSyncSet.noNew = \u65B0\u898F\u30EA\u30BD\u30FC\u30B9\u306A\u3057\u3002 SVNSyncSet.noOutgoings = \u767A\u4FE1\u5909\u66F4\u306A\u3057\u3001 SVNSyncSet.outgoings = {0} \u500B\u306E\u767A\u4FE1\u5909\u66F4\u3001 SVNUIPlugin.refreshMultipleQuestion = {0} \u9078\u629E\u3057\u305F\u30EA\u30BD\u30FC\u30B9\u3092\u66F4\u65B0\u3057\u307E\u3059\u304B? SVNUIPlugin.refreshQuestion = {0} \u30EA\u30BD\u30FC\u30B9 ''{1}'' \u3092\u66F4\u65B0\u3057\u307E\u3059\u304B? SVNUIPlugin.refreshTitle = \u30EA\u30BD\u30FC\u30B9\u3092\u66F4\u65B0\u3057\u307E\u3059\u304B? SVNWorkingSetFolderSelectionPage.duplicateWorkingSetName = \u7279\u5B9A\u306E\u540D\u524D\u306E\u30EF\u30FC\u30AD\u30F3\u30B0\u30FB\u30BB\u30C3\u30C8\u304C\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059\u3002 SVNWorkingSetFolderSelectionPage.invalidWorkingSetName = \u540D\u524D\u306B\u306F\u6587\u5B57\u3068\u6570\u5B57\u3057\u304B\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093\u3002 SVNWorkingSetFolderSelectionPage.mustSelectFolder = \u5C11\u306A\u304F\u3068\u3082 1 \u3064\u306E\u30D5\u30A9\u30EB\u30C0\u3092\u30C1\u30A7\u30C3\u30AF\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002 SVNWorkingSetFolderSelectionPage.name = \u30EF\u30FC\u30AD\u30F3\u30B0\u30FB\u30BB\u30C3\u30C8\u540D(&W): SVNWorkingSetFolderSelectionPage.projectSelectionPageDescription = \u30EF\u30FC\u30AD\u30F3\u30B0\u30FB\u30BB\u30C3\u30C8\u540D\u3092\u5165\u529B\u3057\u3001\u30EF\u30FC\u30AD\u30F3\u30B0\u30FB\u30BB\u30C3\u30C8\u30FB\u30D5\u30A9\u30EB\u30C0\u3092\u9078\u629E\u3057\u307E\u3059\u3002 SVNWorkingSetFolderSelectionPage.projectSelectionPageTitle = SVN \u30EF\u30FC\u30AD\u30F3\u30B0\u30FB\u30BB\u30C3\u30C8 SVNWorkingSetFolderSelectionPage.refresh = \u30B3\u30F3\u30C6\u30F3\u30C4\u306E\u66F4\u65B0(&R) SVNWorkingSetFolderSelectionPage.treeLabel = \u30EF\u30FC\u30AD\u30F3\u30B0\u30FB\u30BB\u30C3\u30C8\u306E\u5185\u5BB9(&S): SetCommitPropertiesDialog.0 = {0}\u306F\u5165\u529B\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u3068\u306B\u304B\u304F\u30B3\u30DF\u30C3\u30C8\u3057\u307E\u3059\u304B? SetCommitPropertiesDialog.noAuthor = \u4F5C\u6210\u8005\u304C\u5165\u529B\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002\u3053\u306E\u30EA\u30D3\u30B8\u30E7\u30F3\u306E\u4F5C\u6210\u8005\u306E\u540D\u524D\u3092\u5165\u529B\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002 SetCommitPropertiesDialog.revisionNumber = \u30EA\u30D3\u30B8\u30E7\u30F3{0}\u306E\u305F\u3081\u306E\u65B0\u3057\u3044\u30EA\u30D3\u30B8\u30E7\u30F3\u30FB\u30B3\u30E1\u30F3\u30C8\u3092\u8A2D\u5B9A SetCommitPropertiesDialog.title = \u30EA\u30D3\u30B8\u30E7\u30F3\u30FB\u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u8A2D\u5B9A SetCommitPropertiesDialog.user = \u4F5C\u6210\u8005: SetSvnPropertyAction.set = \u30D7\u30ED\u30D1\u30C6\u30A3\u8A2D\u5B9A\u4E2D\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F SetSvnPropertyDialog.anotherPropertyHasSameName = \u540C\u3058\u540D\u524D\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u304C\u65E2\u306B\u5B58\u5728\u3057\u307E\u3059 SetSvnPropertyDialog.boolean = \u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u5024\u306Ftrue\u3082\u3057\u304F\u306Ffalse\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059 SetSvnPropertyDialog.browse = \u53C2\u7167... SetSvnPropertyDialog.enterTextProperty = \u30C6\u30AD\u30B9\u30C8\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002 SetSvnPropertyDialog.fileDoesNotExist = \u9078\u629E\u3057\u305F\u30D5\u30A1\u30A4\u30EB\u306F\u5B58\u5728\u3057\u307E\u305B\u3093\u3002 SetSvnPropertyDialog.number = \u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u5024\u306B\u306F\u6570\u5B57\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002 SetSvnPropertyDialog.propertyContent = \u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u5185\u5BB9 SetSvnPropertyDialog.propertyName = \u30D7\u30ED\u30D1\u30C6\u30A3\u540D: SetSvnPropertyDialog.recurseRequired = \u30D7\u30ED\u30D1\u30C6\u30A3\u306F\u30D5\u30A9\u30EB\u30C0\u306B\u5BFE\u3057\u3066\u6709\u52B9\u3067\u306F\u3042\u308A\u307E\u305B\u3093\u3002\u5168\u3066\u306E\u5B50\u30D5\u30A1\u30A4\u30EB\u306B\u9069\u7528\u3059\u308B\u306B\u306F\u3001\u300C\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u518D\u5E30\u7684\u306B\u8A2D\u5B9A\u300D\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044\u3002 SetSvnPropertyDialog.setPropertyRecursively = \u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u518D\u5E30\u7684\u306B\u8A2D\u5B9A SetSvnPropertyDialog.shellText = svn\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u8A2D\u5B9A SetSvnPropertyDialog.url = \u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u5024\u306F\u59A5\u5F53\u306AURL\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002 SetSvnPropertyDialog.useFile = \u30D5\u30A1\u30A4\u30EB\u3092\u5229\u7528 SharingWizard.0 = \u540C\u671F\u4E2D SharingWizard.1 = {0} \u3092\u540C\u671F\u4E2D SharingWizard.autoConnectOneOTitle = Eclipse 1.0 \u304B\u3089\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u63A5\u7D9A SharingWizard.autoConnectTitle = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306B\u63A5\u7D9A SharingWizard.autoConnectTitleDescription = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306F\u3059\u3067\u306B SVN \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u60C5\u5831\u3067\u69CB\u6210\u3055\u308C\u3066\u3044\u307E\u3059\u3002 SharingWizard.browse = \u53C2\u7167... SharingWizard.cannotExist = \u3053\u306EURL\u306E\u30D5\u30A9\u30EB\u30C0\u306F\u5B58\u5728\u3057\u307E\u305B\u3093\u3002 SharingWizard.couldNotImport = \u30EA\u30E2\u30FC\u30C8\u30FB\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u304C\u5B58\u5728\u3057\u307E\u3059\u3002 SharingWizard.couldNotImportLong = \u30D5\u30A9\u30EB\u30C0 ''{0}'' \u306F\u3059\u3067\u306B\u30EA\u30E2\u30FC\u30C8\u3067\u5B58\u5728\u3057\u307E\u3059\u3002 \u65E2\u5B58\u306E\u3082\u306E\u3068\u7570\u306A\u308B\u30D5\u30A9\u30EB\u30C0\u540D\u3092\u8A2D\u5B9A\u3057\u3066\u304F\u3060\u3055\u3044\u3002 SharingWizard.description = SVN \u3092\u4F7F\u7528\u3059\u308B\u305F\u3081\u306B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u69CB\u6210\u3057\u307E\u3059\u3002 SharingWizard.enterInformation = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u60C5\u5831\u306E\u5165\u529B SharingWizard.enterInformationDescription = \u65E2\u5B58\u306E SVN \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u3078\u306E\u63A5\u7D9A\u306B\u5FC5\u8981\u306A\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u304A\u3088\u3073\u30D7\u30ED\u30C8\u30B3\u30EB\u3092\u5B9A\u7FA9\u3057\u307E\u3059\u3002 SharingWizard.enterModuleName = \u30D5\u30A9\u30EB\u30C0\u540D\u306E\u5165\u529B SharingWizard.enterModuleNameDescription = SVN \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u5185\u306E\u30D5\u30A9\u30EB\u30C0\u306E\u540D\u524D\u3092\u9078\u629E\u3057\u307E\u3059\u3002 SharingWizard.heading = SVN \u3092\u4F7F\u7528\u3059\u308B\u305F\u3081\u306B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u69CB\u6210\u3057\u307E\u3059\u3002 SharingWizard.importTitle = SVN \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u3068\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5171\u7528 SharingWizard.importTitleDescription = \u65E2\u5B58\u306E\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u9078\u629E\u3059\u308B\u304B\u3001\u65B0\u898F\u306E\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u4F5C\u6210\u3057\u3066\u304F\u3060\u3055\u3044\u3002 SharingWizard.initialImport = \u521D\u671F\u30A4\u30F3\u30DD\u30FC\u30C8\u3002 SharingWizard.readyToFinish = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5171\u6709\u306E\u6E96\u5099\u5B8C\u4E86 SharingWizard.readyToFinishDescription = SVN\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u3078\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u30A4\u30F3\u30DD\u30FC\u30C8\u3059\u308B\u306B\u306F\u7D42\u4E86\u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044\u3002 SharingWizard.selectTag = \u540C\u671F\u5316\u3059\u308B\u30BF\u30B0\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044(&S): SharingWizard.selectTagTitle = \u30BF\u30B0\u306E\u9078\u629E SharingWizard.title = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5171\u7528 SharingWizard.url = URL: SharingWizard.validationFailedText = {0}\u3002 \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u5171\u7528\u3092\u8A2D\u5B9A\u3057\u307E\u3059\u304B? SharingWizard.validationFailedTitle = \u691C\u8A3C\u4E0D\u80FD SharingWizardFinishPage.message = \u30A6\u30A3\u30B6\u30FC\u30C9\u306B\u306F\u3001\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092 SVN \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u3068\u5171\u7528\u3059\u308B\u305F\u3081\u306B\u5FC5\u8981\u306A\u3059\u3079\u3066\u306E\u60C5\u5831\u304C\u3042\u308A\u307E\u3059\u3002 \u300C\u7D42\u4E86\u300D\u3092\u30AF\u30EA\u30C3\u30AF\u3059\u308B\u3068\u3001\u30A6\u30A3\u30B6\u30FC\u30C9\u306F\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306B\u30A4\u30F3\u30DD\u30FC\u30C8\u3057\u3001\u30EA\u30BD\u30FC\u30B9\u3092\u30B3\u30DF\u30C3\u30C8\u3067\u304D\u308B\u300C\u540C\u671F\u5316\u300D\u30D3\u30E5\u30FC\u3092\u958B\u304D\u307E\u3059\u3002 Sho&w_outgoing_25 = \u767A\u4FE1\u304C\u3042\u308B\u3053\u3068\u3092\u793A\u3059(&g) ShowDifferencesAsUnifiedDiffDialog.branchTag = \u30D6\u30E9\u30F3\u30C1/\u30BF\u30B0\u3068\u6BD4\u8F03 ShowDifferencesAsUnifiedDiffDialog.browse = \u53C2\u7167... ShowDifferencesAsUnifiedDiffDialog.compareFrom = \u6BD4\u8F03\u5143: ShowDifferencesAsUnifiedDiffDialog.compareTo = \u6BD4\u8F03\u5BFE\u8C61: ShowDifferencesAsUnifiedDiffDialog.compareType = \u6BD4\u8F03\u30BF\u30A4\u30D7: ShowDifferencesAsUnifiedDiffDialog.diff = \u30E6\u30CB\u30D5\u30A1\u30A4\u30C9diff\u3092\u51FA\u529B\u3059\u308B\u30D5\u30A1\u30A4\u30EB: ShowDifferencesAsUnifiedDiffDialog.file = \u51FA\u529B\u30D5\u30A1\u30A4\u30EB: ShowDifferencesAsUnifiedDiffDialog.fileDialogText = \u30E6\u30CB\u30D5\u30A1\u30A4\u30C9Diff\u51FA\u529B\u30D5\u30A1\u30A4\u30EB\u306E\u9078\u629E ShowDifferencesAsUnifiedDiffDialog.fileToFolder = \u30D5\u30A1\u30A4\u30EB\u306F\u30D5\u30A9\u30EB\u30C0\u3068\u6BD4\u8F03\u3067\u304D\u307E\u305B\u3093\u3002 ShowDifferencesAsUnifiedDiffDialog.graphical = \u30B0\u30E9\u30D5\u30A3\u30AB\u30EB ShowDifferencesAsUnifiedDiffDialog.head = \u6700\u65B0\u30EA\u30D3\u30B8\u30E7\u30F3 ShowDifferencesAsUnifiedDiffDialog.path = \u30D1\u30B9: ShowDifferencesAsUnifiedDiffDialog.revision = \u30EA\u30D3\u30B8\u30E7\u30F3 ShowDifferencesAsUnifiedDiffDialog.showLog = \u30ED\u30B0\u3092\u8868\u793A ShowDifferencesAsUnifiedDiffDialog.swap = \u6BD4\u8F03\u5143\u3068\u6BD4\u8F03\u5BFE\u8C61\u3092\u5165\u308C\u66FF\u3048 ShowDifferencesAsUnifiedDiffDialog.url = URL: ShowHistoryAction.noHistory = \u30D2\u30B9\u30C8\u30EA\u30FC\u306F\u3042\u308A\u307E\u305B\u3093 ShowHistoryAction.noHistoryLong = \u9078\u629E\u3055\u308C\u305F\u30EA\u30BD\u30FC\u30B9\u306E\u30EA\u30BD\u30FC\u30B9\u30FB\u30D2\u30B9\u30C8\u30EA\u30FC\u306F\u4F7F\u7528\u3067\u304D\u307E\u305B\u3093\u3002 ShowHistoryAction.showHistory = \u30D2\u30B9\u30C8\u30EA\u30FC\u306E\u8868\u793A\u3092\u5B9F\u884C\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 ShowOutOfDateFoldersAction.refreshTaskName = \u540C\u671F\u5316 Show_has_&remote_26 = \u30EA\u30E2\u30FC\u30C8\u304C\u3042\u308B\u3053\u3068\u3092\u793A\u3059(&H) Standard_15 = \u6A19\u6E96(&S) StatisticsPanel.noWorkingSet = SvnPropertiesView.addKeywordsLabel = \u30AD\u30FC\u30EF\u30FC\u30C9\u8A2D\u5B9A SvnPropertiesView.addKeywordsTooltip = \u30AD\u30FC\u30EF\u30FC\u30C9\u8A2D\u5B9A SvnPropertiesView.addPropertyLabel = \u30D7\u30ED\u30D1\u30C6\u30A3\u8FFD\u52A0 SvnPropertiesView.addPropertyTooltip = svn\u30D7\u30ED\u30D1\u30C6\u30A3\u8FFD\u52A0 SvnPropertiesView.conflictOnProperties = 1\u3064\u3082\u3057\u304F\u306F\u8907\u6570\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u304C\u7AF6\u5408 SvnPropertiesView.deletePropertyLabel = \u30D7\u30ED\u30D1\u30C6\u30A3\u524A\u9664 SvnPropertiesView.errorAddKeywordsMessage = \u30AD\u30FC\u30EF\u30FC\u30C9\u3092\u8A2D\u5B9A\u3067\u304D\u307E\u305B\u3093 SvnPropertiesView.errorAddKeywordsTitle = \u30AD\u30FC\u30EF\u30FC\u30C9\u306E\u8A2D\u5B9A SvnPropertiesView.errorAddMessage = \u65B0\u3057\u3044\u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u8FFD\u52A0\u3067\u304D\u307E\u305B\u3093 SvnPropertiesView.errorAddTitle = \u30D7\u30ED\u30D1\u30C6\u30A3\u8FFD\u52A0 SvnPropertiesView.errorGettingStatus = \u30EA\u30BD\u30FC\u30B9\u306E\u72B6\u614B\u53D6\u5F97\u4E2D\u306B\u30A8\u30E9\u30FC SvnPropertiesView.modifyPropertyLabel = \u30D7\u30ED\u30D1\u30C6\u30A3\u306E\u5909\u66F4 SvnPropertiesView.noPropertiesModified = \u6700\u5F8C\u306E\u30B3\u30DF\u30C3\u30C8\u3067\u30D7\u30ED\u30D1\u30C6\u30A3\u306F\u5909\u66F4\u3055\u308C\u3066\u3044\u307E\u305B\u3093 SvnPropertiesView.propertyName = \u540D\u524D SvnPropertiesView.propertyValue = \u5024 SvnPropertiesView.refresh = \u30D3\u30E5\u30FC\u306E\u66F4\u65B0 SvnPropertiesView.refreshLabel = \u30D3\u30E5\u30FC\u306E\u66F4\u65B0(&R) SvnPropertiesView.resourceNotManaged = \u30EA\u30BD\u30FC\u30B9\u306F\u7BA1\u7406\u3055\u308C\u3066\u3044\u307E\u305B\u3093\u3002 SvnPropertiesView.somePropertiesModified = \u6700\u5F8C\u306E\u30B3\u30DF\u30C3\u30C8\u3067\u5E7E\u3064\u304B\u306E\u30D7\u30ED\u30D1\u30C6\u30A3\u5909\u66F4\u3055\u308C\u3066\u3044\u307E\u3059\u3002 SvnPropertiesView.titleWithArgument = {0}\u306E\u305F\u3081\u306ESVN\u30D7\u30ED\u30D1\u30C6\u30A3 SwitchAction.switch = \u5207\u308A\u63DB\u3048\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F SwitchDialog.browse = \u53C2\u7167... SwitchDialog.head = \u30D8\u30C3\u30C9\u30FB\u30EA\u30D3\u30B8\u30E7\u30F3 SwitchDialog.invalid = \u4E0D\u6B63\u306A\u30EA\u30D3\u30B8\u30E7\u30F3\u756A\u53F7\u3067\u3059\u3002 SwitchDialog.revision = \u30EA\u30D3\u30B8\u30E7\u30F3 SwitchDialog.title = \u30D6\u30E9\u30F3\u30C1/\u30BF\u30B0\u306E\u5207\u308A\u63DB\u3048 SwitchDialog.url = To URL: SwitchOperation.0 = {0}\u306B\u5207\u308A\u63DB\u3048\u3066\u3044\u307E\u3059 SwitchOperation.taskName = SVN\u5207\u308A\u63DB\u3048 SyncAction.add = \u30D0\u30FC\u30B8\u30E7\u30F3\u7BA1\u7406\u306B\u8FFD\u52A0(&A) SyncAction.commit = \u30B3\u30DF\u30C3\u30C8(&C)... SyncAction.commit.conflict.question = \u89E3\u6C7A\u3059\u308B\u5FC5\u8981\u306E\u3042\u308B\u7AF6\u5408\u304C\u5B58\u5728\u3057\u307E\u3059\u3002\r\n\r\n\u7AF6\u5408\u304C\u767A\u751F\u3057\u3066\u3044\u306A\u3044\u5909\u66F4\u3060\u3051\u30B3\u30DF\u30C3\u30C8\u3092\u7D9A\u884C\u3057\u307E\u3059\u304B? SyncAction.commit.conflict.title = \u30B3\u30DF\u30C3\u30C8\u306E\u78BA\u8A8D SyncAction.conflicts = \u7AF6\u5408\u306E\u7DE8\u96C6(&E) SyncAction.history = \u30D2\u30B9\u30C8\u30EA\u30FC\u3092\u8868\u793A(&H) SyncAction.ignore = svn:ignore\u306B\u8FFD\u52A0(&D) SyncAction.markMerged = \u30DE\u30FC\u30B8\u3068\u3057\u3066\u30DE\u30FC\u30AF(&M) SyncAction.override = \u4E0A\u66F8\u304D\u3057\u3066\u66F4\u65B0(&V) SyncAction.override.confirm = \u3053\u306E\u64CD\u4F5C\u306F\u30ED\u30FC\u30AB\u30EB\u306E\u5909\u66F4\u3092\u6D88\u53BB\u3057\u307E\u3059\u3002\u30ED\u30FC\u30AB\u30EB\u306E\u5909\u66F4\u5185\u5BB9\u3092\u53D6\u308A\u6D88\u3057\u3066\u30EA\u30DD\u30B8\u30C8\u30EA\u306E\u30D5\u30A1\u30A4\u30EB\u3068\u7F6E\u304D\u63DB\u3048\u307E\u3059\u304B? SyncAction.override.title = \u4E0A\u66F8\u304D\u3057\u3066\u66F4\u65B0 SyncAction.properties = \u30D7\u30ED\u30D1\u30C6\u30A3\u3092\u8868\u793A(&P) SyncAction.resolve = \u89E3\u6C7A\u3068\u3057\u3066\u30DE\u30FC\u30AF(&K) SyncAction.revert = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u304B\u3089\u5FA9\u5143(&R)... SyncAction.showOutOfDateFolders = \u4F7F\u308F\u308C\u3066\u3044\u306A\u3044\u30D5\u30A9\u30EB\u30C0\u3092\u8868\u793A SyncAction.sync = \u540C\u671F\u5316(&S) SyncAction.update = \u66F4\u65B0(&U) SyncAction.update.conflict.question = \u30B5\u30FC\u30D0\u30FC\u4E0A\u306E\u30EA\u30BD\u30FC\u30B9\u3068\u7AF6\u5408\u3057\u3066\u3044\u308B\u5909\u66F4\u304C\u3042\u308A\u307E\u3059\u3002\u66F4\u65B0\u64CD\u4F5C\u306F\u305D\u308C\u3089\u306E\u5909\u66F4\u3092\u30DE\u30FC\u30B8\u3057\u307E\u3059\u3002\r\n\r\n\u7D9A\u884C\u3057\u307E\u3059\u304B? SyncAction.update.conflict.title = \u66F4\u65B0\u306E\u78BA\u8A8D SynchronizeProjectsDialog.allSharedProjects = SVN \u3068\u5171\u7528\u3055\u308C\u3066\u3044\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u3059\u3079\u3066\u7D44\u307F\u8FBC\u3080(&A) SynchronizeProjectsDialog.selectProjects = \u540C\u671F\u5316\u3059\u308B\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 SynchronizeProjectsDialog.sharedWorkingSetProjects = SVN \u3068\u5171\u7528\u3055\u308C\u3066\u3044\u308B\u30EF\u30FC\u30AD\u30F3\u30B0\u30FB\u30BB\u30C3\u30C8\u3092\u3059\u3079\u3066\u7D44\u307F\u8FBC\u3080(&W): SynchronizeProjectsDialog.syncOutgoingChanges = \u767A\u4FE1\u5909\u66F4\u3092\u6301\u3064\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u307F\u540C\u671F\u5316(&C) SynchronizeProjectsDialog.title = SVN \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u540C\u671F\u5316 SynchronizeView.standardIncomingChangeSetComment = \u30B3\u30DF\u30C3\u30C8\u30E1\u30C3\u30BB\u30FC\u30B8\u3092\u691C\u7D22\u3067\u304D\u307E\u305B\u3093 SynchronizeWizard.message = \u540C\u671F\u3055\u308C\u308B\u30EA\u30BD\u30FC\u30B9\u3082\u3057\u304F\u306F\u30EF\u30FC\u30AD\u30F3\u30B0\u30BB\u30C3\u30C8\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044\u3002 SynchronizeWizard.title = SVN\u306E\u540C\u671F TagAction.enterTag = \u30D0\u30FC\u30B8\u30E7\u30F3\u30FB\u30BF\u30B0\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: TagAction.existingVersions = \u65E2\u5B58\u306E\u30D0\u30FC\u30B8\u30E7\u30F3: TagAction.tagAlreadyExists = \u30D0\u30FC\u30B8\u30E7\u30F3\u30FB\u30BF\u30B0\u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059\u3002 TagAction.tagErrorTitle = \u30BF\u30B0\u4ED8\u3051\u30A8\u30E9\u30FC TagAction.tagProblemsMessage = \u30EA\u30BD\u30FC\u30B9\u306E\u30BF\u30B0\u4ED8\u3051\u3067\u554F\u984C\u304C\u5831\u544A\u3055\u308C\u307E\u3057\u305F\u3002 TagAction.tagProblemsMessageMultiple = \u30EA\u30BD\u30FC\u30B9\u306E\u30BF\u30B0\u4ED8\u3051\u3067\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 {0} \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u304C\u6B63\u5E38\u306B\u30BF\u30B0\u4ED8\u3051\u3055\u308C\u3001{1} \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306B\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3057\u305F\u3002 TagAction.tagResources = \u30BF\u30B0\u30FB\u30EA\u30BD\u30FC\u30B9 TagAction.tagWarningTitle = \u30BF\u30B0\u4ED8\u3051\u8B66\u544A TagAction.uncommittedChanges = \u30B3\u30DF\u30C3\u30C8\u3055\u308C\u3066\u3044\u306A\u3044\u5909\u66F4\u3092\u6301\u3064 ''{0}'' \u3092\u30BF\u30B0\u4ED8\u3051\u3057\u3066\u3044\u307E\u3059\u3002 \u3053\u308C\u3089\u306E\u5909\u66F4\u306F\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u5185\u306B\u306A\u304F\u3001\u4F5C\u6210\u3057\u3066\u3044\u308B\u30D0\u30FC\u30B8\u30E7\u30F3\u306B\u306F\u7D44\u307F\u8FBC\u307E\u308C\u307E\u305B\u3093\u3002 \u3053\u306E\u30EA\u30BD\u30FC\u30B9\u3092\u30BF\u30B0\u4ED8\u3051\u3057\u307E\u3059\u304B? TagAction.uncommittedChangesTitle = \u30B3\u30DF\u30C3\u30C8\u3055\u308C\u3066\u3044\u306A\u3044\u5909\u66F4\u306E\u78BA\u8A8D TagInRepositoryAction.tagProblemsMessage = \u30EA\u30BD\u30FC\u30B9\u306E\u30BF\u30B0\u4ED8\u3051\u3067\u554F\u984C\u304C\u5831\u544A\u3055\u308C\u307E\u3057\u305F\u3002 TagInRepositoryAction.tagProblemsMessageMultiple = \u30EA\u30BD\u30FC\u30B9\u306E\u30BF\u30B0\u4ED8\u3051\u3067\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 {0} \u30EA\u30BD\u30FC\u30B9\u304C\u6B63\u5E38\u306B\u30BF\u30B0\u4ED8\u3051\u3055\u308C\u3001{1} \u30EA\u30BD\u30FC\u30B9\u306B\u30A8\u30E9\u30FC\u304C\u3042\u308A\u307E\u3057\u305F\u3002 TagSelectionDialog.Select_a_Tag_1 = \u30D6\u30E9\u30F3\u30C1\u307E\u305F\u306F\u30D0\u30FC\u30B8\u30E7\u30F3\u3092\u9078\u629E\u3057\u3066\u304F\u3060\u3055\u3044(&S): TagSelectionDialog.recurseOption = \u30B5\u30D6\u30D5\u30A9\u30EB\u30C0\u306B\u518D\u5E30(&F) TagetLocationSelectionDialog.alreadyExists = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 {0} \u306F\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059\u3002 TagetLocationSelectionDialog.invalidLocation = \u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u30FB\u30D1\u30B9\u304C\u7121\u52B9\u3067\u3059\u3002 TagetLocationSelectionDialog.locationEmpty = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u30FB\u30B3\u30F3\u30C6\u30F3\u30C4\u30FB\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30FC\u3092\u6307\u5B9A\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002 TargetLocationSelectionDialog.browseLabel = \u53C2\u7167(&B)... TargetLocationSelectionDialog.locationLabel = \u30ED\u30B1\u30FC\u30B7\u30E7\u30F3(&L): TargetLocationSelectionDialog.messageForMulti = {0} \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u89AA\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30FC\u3092\u9078\u629E\u3057\u307E\u3059\u3002 TargetLocationSelectionDialog.messageForSingle = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8 {0} \u306E\u89AA\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30FC\u3092\u9078\u629E\u3057\u307E\u3059\u3002 TargetLocationSelectionDialog.parentDirectoryLabel = \u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30FC(&D): TargetLocationSelectionDialog.projectNameLabel = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u540D(&P): TargetLocationSelectionDialog.useDefaultLabel = \u30C7\u30D5\u30A9\u30EB\u30C8\u30FB\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u30FB\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\u4F7F\u7528(&W) TeamAction.internal = \u5185\u90E8\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 TrustSSLServerDialog.permanent = \u6C38\u4E45\u306B\u627F\u8AFE TrustSSLServerDialog.reject = \u62D2\u5426 TrustSSLServerDialog.temporary = \u4E00\u6642\u7684\u306B\u627F\u8AFE TrustSSLServerDialog.title = \u96FB\u5B50\u7F72\u540D\u306E\u627F\u8AFE Uneditaction.confirmMessage = \u7DE8\u96C6\u6E08\u307F\u30D5\u30A1\u30A4\u30EB\u3078\u306E\u30ED\u30FC\u30AB\u30EB\u5909\u66F4\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B? Uneditaction.confirmTitle = \u7DE8\u96C6\u53D6\u308A\u6D88\u3057\u306E\u78BA\u8A8D UnlockOperation.0 = {0}\u306E\u30ED\u30C3\u30AF\u3092\u89E3\u9664\u3057\u307E\u3059\u3002 UnlockOperation.taskName = SVN\u30ED\u30C3\u30AF\u89E3\u9664 Unmanage.deleteMeta = SVN\u30E1\u30BF\u60C5\u5831\u3092\u524A\u9664\u3059\u308B\u3068\u3001\u3053\u306E\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u3092\u30EA\u30DD\u30B8\u30C8\u30EA\u306B\u518D\u63A5\u7D9A\u5E2D\u306A\u304F\u306A\u308A\u307E\u3059\u3002\u65B0\u3057\u304F\u5171\u7528\u3059\u308B\u304B\u3001\u3044\u3063\u305F\u3093\u524A\u9664\u3057\u3066\u30C1\u30A7\u30C3\u30AF\u30A2\u30A6\u30C8\u3057\u306A\u304A\u3059\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059\u3002\u7D9A\u884C\u3057\u307E\u3059\u304B? Unmanage.message = SVN \u3092 ''{0}'' \u304B\u3089\u5207\u65AD\u3057\u307E\u3059\u304B? Unmanage.messageN = SVN \u3092\u3053\u308C\u3089\u306E {0} \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u304B\u3089\u5207\u65AD\u3057\u307E\u3059\u304B? Unmanage.option1 = SVN \u30E1\u30BF\u60C5\u5831 (SVN \u30B5\u30D6\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30FC\u306A\u3069) \u3092\u524A\u9664\u3057\u306A\u3044\u3067\u304F\u3060\u3055\u3044\u3002 Unmanage.option2 = \u30D5\u30A1\u30A4\u30EB\u30FB\u30B7\u30B9\u30C6\u30E0\u304B\u3089 SVN \u30E1\u30BF\u60C5\u5831\u3082\u524A\u9664\u3057\u307E\u3059\u3002 Unmanage.title = SVN \u304B\u3089\u306E\u5207\u65AD\u3092\u78BA\u8A8D Unmanage.titleN = SVN \u304B\u3089\u306E\u8907\u6570\u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u5207\u65AD\u3092\u78BA\u8A8D Unmanage.unmanage = SVN \u304B\u3089\u5207\u65AD Unmanage.unmanaging = SVN \u304B\u3089\u5207\u65AD\u4E2D... Unmanage.unmanagingError = \u5207\u65AD\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 UpdateAction.updateerror = \u66F4\u65B0\u306E\u5B9F\u884C\u4E2D\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 UpdateAction.updating = \u66F4\u65B0\u4E2D... UpdateMergeActionProblems_merging_remote_resources_into_workspace_1 = \u30EA\u30E2\u30FC\u30C8\u30FB\u30EA\u30BD\u30FC\u30B9\u3092\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u306B\u30DE\u30FC\u30B8\u4E2D\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 UpdateMergeActionProblems_merging_remote_resources_into_workspace_2 = \u30EA\u30E2\u30FC\u30C8\u30FB\u30EA\u30BD\u30FC\u30B9\u3092\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u306B\u30DE\u30FC\u30B8\u4E2D\u306B\u554F\u984C\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 UpdateOperation.0 = {0} \u3092\u66F4\u65B0\u4E2D UpdateOperation.taskName = SVN \u66F4\u65B0 UpdateSyncAction.Conflicting_changes_found_1 = \u77DB\u76FE\u3059\u308B\u5909\u66F4\u304C\u898B\u3064\u304B\u308A\u307E\u3057\u305F\u3002 UpdateSyncAction.Only_update_resources_that_can_be_automatically_merged_3 = \u81EA\u52D5\u7684\u306B\u30DE\u30FC\u30B8\u53EF\u80FD\u306A\u30EA\u30BD\u30FC\u30B9\u306E\u307F\u66F4\u65B0\u3057\u307E\u3059\u3002 UpdateSyncAction.Overwrite_local_changes__5 = \u30ED\u30FC\u30AB\u30EB\u5909\u66F4\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3059\u304B ? UpdateSyncAction.Update_all_resources,_overwriting_local_changes_with_remote_contents_4 = \u3059\u3079\u3066\u306E\u30EA\u30BD\u30FC\u30B9\u3092\u66F4\u65B0\u3057\u3066\u3001\u30EA\u30E2\u30FC\u30C8\u30FB\u30B3\u30F3\u30C6\u30F3\u30C4\u3067\u30ED\u30FC\u30AB\u30EB\u5909\u66F4\u3092\u4E0A\u66F8\u304D\u3057\u307E\u3059\u3002 UpdateSyncAction.You_have_local_changes_you_are_about_to_overwrite._Do_you_wish_to_continue__6 = \u4E0A\u66F8\u304D\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308B\u30ED\u30FC\u30AB\u30EB\u5909\u66F4\u304C\u3042\u308A\u307E\u3059\u3002 \u7D9A\u884C\u3057\u307E\u3059\u304B? UpdateSyncAction.You_have_local_changes_you_are_about_to_overwrite_2 = \u4E0A\u66F8\u304D\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308B\u30ED\u30FC\u30AB\u30EB\u5909\u66F4\u304C\u3042\u308A\u307E\u3059\u3002 UpdateSyncAction.errorUpdating = \u5909\u66F4\u306E\u66F4\u65B0\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 UpdateWizard.title = \u66F4\u65B0 UpdateWizard.updatePage = \u30AA\u30D7\u30B7\u30E7\u30F3\u306E\u66F4\u65B0 UpdateWizardPage.description = \u66F4\u65B0\u306E\u305F\u3081\u306E\u305D\u306E\u4ED6\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u9078\u629E\u3057\u307E\u3059\u3002 UpdateWizardPage.overwrite = \u30ED\u30FC\u30AB\u30EB\u306E\u5909\u66F4\u3092\u4E0A\u66F8\u304D(&O) UserPromptDialog.save = \u4F5C\u6210\u8005\u306E\u540D\u524D\u3092\u4FDD\u5B58(&S) UserPromptDialog.title = SVN\u4F5C\u6210\u8005\u306E\u540D\u524D\u3092\u5165\u529B UserPromptDialog.username = \u4F5C\u6210\u8005\u540D(&A) UserValidationDialog.labelPassword = \u6B21\u306E\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: {1} UserValidationDialog.labelUser = \u6B21\u306E\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u306E\u30E6\u30FC\u30B6\u540D\u3068\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u5165\u529B\u3057\u3066\u304F\u3060\u3055\u3044: {0} UserValidationDialog.password = \u30D1\u30B9\u30EF\u30FC\u30C9(&P): UserValidationDialog.required = \u30D1\u30B9\u30EF\u30FC\u30C9\u304C\u5FC5\u8981\u3067\u3059 UserValidationDialog.user = \u30E6\u30FC\u30B6\u30FC\u540D(&U): Validate_Connection_on_Finish_7 = \u7D42\u4E86\u6642\u306B\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u3092\u691C\u8A3C VersionCategory.Versions_1 = \u30D0\u30FC\u30B8\u30E7\u30F3 VersionsElement.versions = \u30D0\u30FC\u30B8\u30E7\u30F3 WorkbenchUserAuthenticator.The_operation_was_canceled_by_the_user_1 = \u64CD\u4F5C\u304C\u30E6\u30FC\u30B6\u30FC\u306B\u3088\u3063\u3066\u30AD\u30E3\u30F3\u30BB\u30EB\u3055\u308C\u307E\u3057\u305F\u3002 WorkbenchUserAuthenticator.cancelled = \u64CD\u4F5C\u306F\u30ED\u30B0\u30A4\u30F3\u304C\u30AD\u30E3\u30F3\u30BB\u30EB\u3055\u308C\u305F\u305F\u3081\u30AD\u30E3\u30F3\u30BB\u30EB\u3055\u308C\u307E\u3057\u305F\u3002 WorkbenchUserAuthenticator.errorFlushing = {0} \u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u30D5\u30E9\u30C3\u30B7\u30E5\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 WorkbenchUserAuthenticator.errorSaving = {0} \u306E\u30D1\u30B9\u30EF\u30FC\u30C9\u3092\u4FDD\u7BA1\u4E2D\u306B\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 WorkingSetSelectionArea.workingSetOther = \u305D\u306E\u4ED6(&O)... WorkingSetSelectionDialog.detailsButton.label = \u7DE8\u96C6(&E)... WorkingSetSelectionDialog.message = SVN \u30EF\u30FC\u30AD\u30F3\u30B0\u30FB\u30BB\u30C3\u30C8\u306E\u9078\u629E(&S): WorkingSetSelectionDialog.message.multiSelect = SVN \u30EF\u30FC\u30AD\u30F3\u30B0\u30FB\u30BB\u30C3\u30C8\u306E\u9078\u629E(&S): WorkingSetSelectionDialog.newButton.label = \u65B0\u898F(&N)... WorkingSetSelectionDialog.removeButton.label = \u9664\u53BB(&R) WorkingSetSelectionDialog.title = SVN \u30EF\u30FC\u30AD\u30F3\u30B0\u30FB\u30BB\u30C3\u30C8\u306E\u9078\u629E WorkingSetSelectionDialog.title.multiSelect = SVN \u30EF\u30FC\u30AD\u30F3\u30B0\u30FB\u30BB\u30C3\u30C8\u306E\u9078\u629E WorkspaceChangeSetCapability_1 = \u65B0\u898F\u30BB\u30C3\u30C8 WorkspaceChangeSetCapability_2 = \u65B0\u898F\u30C1\u30A7\u30F3\u30B8\u30BB\u30C3\u30C8 WorkspaceChangeSetCapability_3 = \u65B0\u898F\u30C1\u30A7\u30F3\u30B8\u30BB\u30C3\u30C8\u306E\u540D\u524D\u3068\u30B3\u30E1\u30F3\u30C8\u3092\u5165\u529B WorkspaceChangeSetCapability_7 = \u30C1\u30A7\u30F3\u30B8\u30BB\u30C3\u30C8\u30FB\u30B3\u30E1\u30F3\u30C8\u3092\u7DE8\u96C6 WorkspaceChangeSetCapability_8 = \u30C1\u30A7\u30F3\u30B8\u30BB\u30C3\u30C8\u306E\u540D\u524D\u3068\u30B3\u30E1\u30F3\u30C8\u3092\u7DE8\u96C6 WorkspacePathValidator.eclipsePath = \u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u306E\u30D1\u30B9: WorkspacePathValidator.fileSystemPath = \u3068\u3053\u308D\u304C\u3001\u5B9F\u969B\u306E\u30D5\u30A1\u30A4\u30EB\u30B7\u30B9\u30C6\u30E0\u306E\u30D1\u30B9: WorkspacePathValidator.instructions = \u5024\u304C\u6B63\u78BA\u306B\u540C\u3058\u3067\u306A\u3044\u3068Subclipse\u306F\u64CD\u4F5C\u3092\u6B63\u3057\u304F\u5B8C\u4E86\u3059\u308B\u3053\u3068\u304C\u3067\u304D\u307E\u305B\u3093\u3002\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u306E\u30AA\u30D7\u30B7\u30E7\u30F3\u3092\u5909\u66F4\u3059\u308B\u304B\u3001\u30D5\u30A1\u30A4\u30EB\u30B7\u30B9\u30C6\u30E0\u306E\u5024\u3068\u30DE\u30C3\u30C1\u3059\u308B\u3088\u3046\u306BEclipse\u306E\u30B7\u30E7\u30FC\u30C8\u30AB\u30C3\u30C8\u4E2D\u306E-data\u30D1\u30E9\u30E1\u30FC\u30BF\u3092\u5909\u66F4\u3057\u3066Eclipse\u3092\u8D77\u52D5\u3057\u3066\u304F\u3060\u3055\u3044\u3002\u53C2\u7167: http://subclipse.tigris.org/faq.html#path-case WorkspacePathValidator.title = \u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u30D1\u30B9\u306E\u4E0D\u6574\u5408\u30A8\u30E9\u30FC WorkspaceSubscriberContext_0 = \u5185\u90E8\u72B6\u614B\u306E\u77DB\u76FE\u306E\u305F\u3081\u3001\u30D5\u30A1\u30A4\u30EB{0}\u306E\u30E1\u30BF\u30C7\u30FC\u30BF\u3092\u66F4\u65B0\u3067\u304D\u307E\u305B\u3093\u3067\u3057\u305F\u3002 buildError = SVN \u64CD\u4F5C\u306E\u5B8C\u4E86\u5F8C\u306B\u30D3\u30EB\u30C9\u30FB\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002 confirmOverwrite = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u304C\u30EF\u30FC\u30AF\u30B9\u30DA\u30FC\u30B9\u306B\u3059\u3067\u306B\u5B58\u5728\u3057\u307E\u3059\u3002 \u305D\u306E\u5185\u5BB9\u304C\u4E0A\u66F8\u304D\u3055\u308C\u307E\u3059\u3002 confirmOverwriteTitle = \u30D7\u30ED\u30B8\u30A7\u30AF\u30C8\u306E\u4E0A\u66F8\u304D\u3092\u78BA\u8A8D currentRevision = *{0} details = \u8A73\u3057\u304F\u306F\u300C\u8A73\u7D30\u300D\u30DC\u30BF\u30F3\u3092\u62BC\u3057\u3066\u304F\u3060\u3055\u3044\u3002 error = \u30A8\u30E9\u30FC exception = \u30B5\u30FC\u30D0\u30FC\u4F8B\u5916 flag_indicating_that_the_folder_has_a_child_resource_with_outgoing_changes_41 = \u767A\u4FE1\u5909\u66F4\u3092\u6301\u3064\u5B50\u30EA\u30BD\u30FC\u30B9\u304C\u30D5\u30A9\u30EB\u30C0\u306B\u3042\u308B\u3053\u3068\u3092\u793A\u3059\u30D5\u30E9\u30B0 information = \u30B5\u30FC\u30D0\u30FC\u60C5\u5831 internal = \u5185\u90E8\u30A8\u30E9\u30FC\u304C\u767A\u751F\u3057\u307E\u3057\u305F\u3002\u8A73\u3057\u304F\u306F\u30A8\u30E9\u30FC\u30FB\u30ED\u30B0\u3092\u53C2\u7167\u3057\u3066\u304F\u3060\u3055\u3044\u3002 keyword_substitution_rule_for_the_resource_44 = \u30EA\u30BD\u30FC\u30B9\u306E\u30AD\u30FC\u30EF\u30FC\u30C9\u7F6E\u63DB\u898F\u5247 localChanges = \u4E0A\u66F8\u304D\u3057\u3088\u3046\u3068\u3057\u3066\u3044\u308B\u3082\u306E\u306F\u3001\u30ED\u30FC\u30AB\u30EB\u3067\u5909\u66F4\u3055\u308C\u3066\u3044\u307E\u3059\u3002 \u7D9A\u884C\u3057\u307E\u3059\u304B? moveRemoteFolderWizard.title = \u30EA\u30E2\u30FC\u30C8\u306E\u30EA\u30BD\u30FC\u30B9\u306E\u79FB\u52D5 nameAndRevision = {0} {1} no = \u3044\u3044\u3048 noauthor = (\u4F5C\u8005\u306A\u3057) notAvailable = \u4F7F\u7528\u4E0D\u53EF ok = OK prompt = \u30D7\u30ED\u30F3\u30D7\u30C8 question = \u8CEA\u554F repository_home_directory_on_server_39 = \u30B5\u30FC\u30D0\u30FC\u4E0A\u306E\u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30DB\u30FC\u30E0\u30FB\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30FC root_relative_directory_40 = \u30EB\u30FC\u30C8\u76F8\u5BFE\u30C7\u30A3\u30EC\u30AF\u30C8\u30EA\u30FC separator = / simpleInternal = \u5185\u90E8\u30A8\u30E9\u30FC svn = SVN the_connection_method_(e.g._pserver,_ssh)_37 = \u63A5\u7D9A\u30E1\u30BD\u30C3\u30C9 (pserver\u3001ssh \u306A\u3069) the_repository_location__s_hostname_36 = \u30EA\u30DD\u30B8\u30C8\u30EA\u30FC\u30FB\u30ED\u30B1\u30FC\u30B7\u30E7\u30F3\u306E\u30DB\u30B9\u30C8\u540D the_tag_applied_to_the_resource_(version,_branch,_or_date)_35 = \u30EA\u30BD\u30FC\u30B9\u306B\u9069\u7528\u3055\u308C\u308B\u30BF\u30B0 (\u30D0\u30FC\u30B8\u30E7\u30F3\u3001\u30D6\u30E9\u30F3\u30C1\u3001\u307E\u305F\u306F\u65E5\u4ED8) the_tag_applied_to_the_resource_43 = \u30EA\u30BD\u30FC\u30B9\u306B\u9069\u7528\u3059\u308B\u30BF\u30B0 user_name_for_the_connection_38 = \u63A5\u7D9A\u7528\u306E\u30E6\u30FC\u30B6\u30FC\u540D yes = \u306F\u3044 messages_zh.properties000066400000000000000000003616661203611042400401610ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) #****************************************************************************** # Copyright (c) 2005, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ #Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) #Translated by fcoffee. AcceptMine.label = \u63A5\u53D7\u672C\u5730\u4FEE\u8BA2 AcceptTheirs.label = \u63A5\u53D7\u8FDC\u7A0B\u4FEE\u8BA2 AddAction.addFailed = \u6DFB\u52A0\u671F\u95F4\u53D1\u751F\u4E86\u9519\u8BEF AddAction.addIgnoredQuestion = \u5DF2\u663E\u5F0F\u8BF7\u6C42\u5BF9\u4E00\u4E2A\u6216\u591A\u4E2A\u8D44\u6E90\u8FDB\u884C\u7248\u672C\u63A7\u5236\uFF0C\u5426\u5219\u5C06\u5FFD\u7565\u8FD9\u4E9B\u8D44\u6E90\u3002\u8981\u7EE7\u7EED\u5417\uFF1F AddAction.addIgnoredTitle = \u8981\u6DFB\u52A0\u5DF2\u5FFD\u7565\u7684\u8D44\u6E90\u5417\uFF1F AddAction.adding = \u6B63\u5728\u6DFB\u52A0... AddKeywordsAction.addKeywordsFailed = \u66F4\u6539 svn:keywords \u5C5E\u6027\u65F6\u53D1\u751F\u9519\u8BEF AddKeywordsDialog.description = \u63CF\u8FF0 AddKeywordsDialog.headUrl.description = \u8D44\u6E90\u5E93\u4E2D\u6587\u4EF6\u6700\u65B0\u7248\u672C\u7684\u5B8C\u6574 URL AddKeywordsDialog.headUrl.sample = $HeadURL: http://svn.collab.net/repos/subclipse/trunk/readme.txt $ AddKeywordsDialog.id.description = \u5176\u5B83\u5173\u952E\u5B57\u7684\u538B\u7F29\u96C6\u5408 AddKeywordsDialog.id.sample = $Id: AddKeywordsDialog.java 148 2003-11-02 22:35:43Z cchab $ AddKeywordsDialog.keyword = \u5173\u952E\u5B57 AddKeywordsDialog.lastChangedBy.description = \u6700\u540E\u66F4\u6539\u8D44\u6E90\u5E93\u4E2D\u6B64\u6587\u4EF6\u7684\u7528\u6237 AddKeywordsDialog.lastChangedBy.sample = $LastChangedBy: cchab $ AddKeywordsDialog.lastChangedDate.description = \u8D44\u6E90\u5E93\u4E2D\u6B64\u6587\u4EF6\u7684\u6700\u540E\u66F4\u6539\u65F6\u95F4 AddKeywordsDialog.lastChangedDate.sample = $LastChangedDate: 2002-07-22 21:42:37 -0700 (Mon, 22 Jul 2002) $ AddKeywordsDialog.lastChangedRevision.description = \u8D44\u6E90\u5E93\u4E2D\u6B64\u6587\u4EF6\u7684\u6700\u540E\u4FEE\u8BA2\u7248 AddKeywordsDialog.lastChangedRevision.sample = $LastChangedRevision: 144 $ AddKeywordsDialog.sample = \u793A\u4F8B AddKeywordsDialog.selectKeywords = \u4E3A\u6240\u9009\u7684\u6587\u4EF6\u9009\u62E9\u8981\u8BBE\u7F6E\u7684\u5173\u952E\u5B57\uFF1A AddKeywordsDialog.title = \u6DFB\u52A0\u5173\u952E\u5B57 AddToBranchAction.enterTag = \u8F93\u5165\u5206\u652F\u6807\u8BB0 AddToBranchAction.enterTagLong = \u8F93\u5165\u5206\u652F\u540D\u79F0\uFF1A AddToVersionControlDialog.thereAreUnaddedResources = \u5B58\u5728\u4E0D\u53D7 SVN \u7248\u672C\u63A7\u5236\u7684 {0} \u4E2A\u8D44\u6E90\u3002\u60F3\u8981\u6DFB\u52A0\u5B83\u4EEC\u5417\uFF1F AddToVersionControlDialog.thereIsAnUnaddedResource = \u5B58\u5728\u4E0D\u53D7 SVN \u7248\u672C\u63A7\u5236\u7684 {0} \u4E2A\u8D44\u6E90\u3002\u60F3\u8981\u6DFB\u52A0\u5B83\u5417\uFF1F AddToVersionControlDialog.title = \u6DFB\u52A0\u81F3 SVN \u7248\u672C\u63A7\u5236 AddToWorkspace.taskName1 = \u6B63\u5728\u4ECE SVN \u53D6\u51FA \u201C{0}\u201D AddToWorkspace.taskNameN = \u6B63\u5728\u4ECE SVN \u53D6\u51FA {0} \u4E2A\u6587\u4EF6\u5939 AddToWorkspaceAction.checkingOutRoot = \u60A8\u4F3C\u4E4E\u6B63\u5728\u53D6\u51FA\u8D44\u6E90\u5E93\u7684\u6839\u76EE\u5F55\u3002\u60A8\u786E\u5B9A\u8FD9\u662F\u60A8\u60F3\u8981\u505A\u7684\u5417\uFF1F\u5982\u679C\u8D44\u6E90\u5E93\u5305\u62EC\u5206\u652F\u6216\u6807\u7B7E\u90A3\u4E48\u5B83\u4EEC\u5C06\u4F1A\u88AB\u5168\u90E8\u53D6\u51FA\u3002 AddToWorkspaceAction.checkoutFailed = \u6267\u884C\u53D6\u51FA\u65F6\u53D1\u751F\u95EE\u9898\u3002 AddToWorkspaceAction.confirmOverwrite = \u786E\u8BA4\u8986\u76D6 AddToWorkspaceAction.thisExternalFileExists = \u6587\u4EF6\u5939\u201C{0}\u201D\u5B58\u5728\u4E8E\u672C\u5730\u6587\u4EF6\u7CFB\u7EDF\u4E2D\uFF0C\u5C06\u5220\u9664\u8BE5\u6587\u4EF6\u5939\u3002\u8981\u7EE7\u7EED\u5417\uFF1F AddToWorkspaceAction.thisResourceExists = \u8D44\u6E90\u201C{0}\u201D\u5728\u5DE5\u4F5C\u7A7A\u95F4\u4E2D\u5DF2\u5B58\u5728\uFF0C\u5C06\u5220\u9664\u8BE5\u8D44\u6E90\u3002\u8981\u7EE7\u7EED\u5417\uFF1F Advanced_options_19 = \u9AD8\u7EA7\u9009\u9879 After_configuring_the_project__1 = \u914D\u7F6E\u9879\u76EE\u4E4B\u540E\uFF1A AlternateUserValidationDialog.Cancel_7 = \u53D6\u6D88 AlternateUserValidationDialog.Enter_Password_2 = \u8F93\u5165\u5BC6\u7801 AlternateUserValidationDialog.OK_6 = \u786E\u5B9A AlternateUserValidationDialog.message = \u8F93\u5165 {0} \u7684\u5BC6\u7801\uFF1A AnnotateDialog.from = \u4ECE\u4FEE\u8BA2\u7248\uFF1A AnnotateDialog.revision = \u4FEE\u8BA2\u7248\uFF1A AnnotateDialog.title = \u6CE8\u91CA AnnotateDialog.to = \u5230\u4FEE\u8BA2\u7248\uFF1A AnnotateDialog.url = URL\uFF1A AnnotateOperation.0 = \u663E\u793A {0} \u7684\u6CE8\u91CA AnnotateOperation.taskName = \u663E\u793A\u6CE8\u91CA AnnotateOperation_4 = \u4FDD\u5B58\u6211\u7684\u8BBE\u5B9A AnnotateOperation_QDAnnotateMessage = \u5E0C\u671B\u4F7F\u7528\u5FEB\u901F\u6BD4\u8F83\u6765\u663E\u793A\u6CE8\u91CA\u5417\uFF1F AnnotateOperation_QDAnnotateTitle = \u5FEB\u901F\u6BD4\u8F83\u6CE8\u91CA AutoDefineTagsAction.defineTags = \u81EA\u52A8\u53D1\u73B0\u6807\u8BB0 Automatically_import_the_local_resources_into_the_repository_3 = \u81EA\u52A8\u5C06\u672C\u5730\u8D44\u6E90\u5BFC\u5165\u81F3\u8D44\u6E90\u5E93 AvoidableMessageDialog.dontShowAgain = \u4E0D\u518D\u663E\u793A BranchCategory.Branches_1 = \u5206\u652F BranchTagAction.branch = \u521B\u5EFA\u5206\u652F\uFF0F\u6807\u8BB0\u65F6\u51FA\u73B0\u95EE\u9898 BranchTagDialog.0 = {0} \u672A\u8F93\u5165\u3002\u4ECD\u7136\u8981\u590D\u5236\uFF08\u5206\u652F\uFF0F\u6807\u8BB0\uFF09\u5417\uFF1F BranchTagDialog.createCopy = \u4ECE\u8D44\u6E90\u5E93\u4E2D\u521B\u5EFA\u590D\u672C\uFF1A BranchTagDialog.enterComment = \u8F93\u5165\u5206\u652F\uFF0F\u6807\u8BB0\u7684\u6CE8\u91CA(&C)\uFF1A BranchTagDialog.fromUrl = \u4ECE URL\uFF1A BranchTagDialog.head = HEAD \u4FEE\u8BA2\u7248 BranchTagDialog.note = \u6CE8\u610F\uFF1A\u60A8\u7684\u5DE5\u4F5C\u590D\u672C\u4F1A\u4FDD\u6301\u4E3A\u4EE5\u524D\u7684\u76EE\u5F55\u3002\u5982\u679C\u60A8\u60F3\u5C06\u4EE5\u540E\u7684\u66F4\u6539\u63D0\u4EA4\u5230\u5C06\u8981\u521B\u5EFA\u7684\u590D\u672C\u76EE\u5F55\uFF0C\u90A3\u4E48\u5FC5\u987B\u5207\u6362\u5230\u8BE5\u590D\u672C\u7684\u76EE\u5F55\u3002\u4F7F\u7528\u201C\u5207\u6362\u201D\u64CD\u4F5C\u53EF\u4EE5\u8FBE\u5230\u6B64\u76EE\u7684\u3002 BranchTagDialog.repository = \u8D44\u6E90\u5E93 BranchTagDialog.revision = \u6307\u5B9A\u8D44\u6E90\u5E93\u4E2D\u7684\u4FEE\u8BA2\u7248 BranchTagDialog.server = \u7ACB\u5373\u521B\u5EFA\u5206\u652F\uFF0F\u6807\u8BB0\u5230\u670D\u52A1\u5668 BranchTagDialog.switchAfterTagBranch = \u5207\u6362\u5DE5\u4F5C\u590D\u672C\u4E3A\u65B0\u7684\u5206\u652F\uFF0F\u6807\u8BB0 BranchTagDialog.title = \u590D\u672C\uFF08\u5206\u652F\uFF0F\u6807\u8BB0\uFF09 BranchTagDialog.toUrl = \u5230 URL\uFF1A BranchTagDialog.url = \u4ECE\u6B64\u5DE5\u4F5C\u590D\u672C\uFF1A BranchTagDialog.working = \u5DE5\u4F5C\u590D\u672C BranchTagOperation.0 = \u6B63\u5728\u521B\u5EFA\u5206\u652F\uFF0F\u6807\u8BB0 {0} BranchTagOperation.taskName = SVN \u5206\u652F\uFF0F\u6807\u8BB0 BranchTagPropertyUpdateDialog.text = \u60A8\u6B63\u5728\u590D\u5236\u7684\u6587\u4EF6\u5939\u5305\u542B\u6709 subclipse:tags \u5C5E\u6027\u3002\u8BF7\u786E\u8BA4\u5C06\u8981\u6DFB\u52A0\u5230\u5C5E\u6027\u4E2D\u7684\u4FE1\u606F\u5E76\u6309\u201C\u786E\u5B9A\u201D\u66F4\u65B0\u5C5E\u6027\u3002\r\n\r\n\u63D0\u793A\uFF1A\u590D\u5236\u64CD\u4F5C\u5B8C\u6210\u540E\u5FC5\u987B\u63D0\u4EA4\u5BF9\u5C5E\u6027\u7684\u66F4\u6539\u3002 BranchTagPropertyUpdateDialog.title = \u66F4\u65B0\u5206\u652F\uFF0F\u6807\u8BB0\u5C5E\u6027 CVSChangeSetCollector_0 = \u672A\u6307\u5B9A\u7684\u8FDC\u7A0B\u4FEE\u6539 CVSChangeSetCollector_4 = \u6B63\u5728\u8BBF\u5B58\u7248\u672C\u5386\u53F2\u8BB0\u5F55 ChangeListener.Deleting_SVN_folders_1 = \u6B63\u5728\u5220\u9664 SVN \u6587\u4EF6\u5939 ChangeListener.Do_not_ask_me_about_this_again_3 = \u4E0D\u518D\u63D0\u95EE ChangeListener.Folders_cannot_be_deleted_from_a_SVN_server_from_the_client._To_delete_the_folder_2 = \u5BA2\u6237\u7AEF\u672A\u80FD\u4ECE\u670D\u52A1\u5668\u4E0A\u5220\u9664\u6587\u4EF6\u5939\u3002\u8981\u5220\u9664\u6587\u4EF6\u5939 ChangePathsTableProvider.action = \u52A8\u4F5C ChangePathsTableProvider.copiedfrom = \u4E8E {0}:{1} ChangePathsTableProvider.description = \u63CF\u8FF0 ChangePathsTableProvider.path = \u53D7\u5F71\u54CD\u7684\u76EE\u5F55 CheckoutAsAction.checkoutFailed = \u6267\u884C\u68C0\u51FA\u64CD\u4F5C\u65F6\u51FA\u73B0\u95EE\u9898 CheckoutAsAction.confirmOverwrite = \u60A8\u521B\u5EFA\u7684\u9879\u76EE {0} \u5305\u542B\u6709\u6807\u51C6 .project \u6587\u4EF6\u4E4B\u5916\u7684\u8D44\u6E90\u3002\u5982\u679C\u5B83\u4EEC\u548C\u6B63\u5728\u68C0\u51FA\u7684\u8D44\u6E90\u6709\u76F8\u540C\u7684\u540D\u79F0\u548C\u76F8\u5BF9\u4F4D\u7F6E\uFF0C\u90A3\u4E48\u672C\u5730\u8D44\u6E90\u5C06\u4F1A\u88AB\u4ECE\u8D44\u6E90\u5E93\u68C0\u51FA\u7684\u8D44\u6E90\u6240\u53D6\u4EE3\u3002 CheckoutAsAction.enterLocationTitle = \u68C0\u51FA {0} \u4E2A\u9879\u76EE\u4E3A... CheckoutAsAction.enterProjectTitle = \u68C0\u51FA {0} \u4E3A... CheckoutAsAction.multiCheckout = \u6B63\u5728\u4ECE SVN \u68C0\u51FA {0} \u4E2A\u9879\u76EE CheckoutAsAction.taskname = \u4ECE SVN \u68C0\u51FA\u201C{0}\u201D\u4E3A\u201C{1}\u201D CheckoutAsAction.title = \u68C0\u51FA\u4E3A... CheckoutAsProjectAction.title = \u68C0\u51FA\u4E3A\u9879\u76EE CheckoutAsProjectOperation.0 = \u6B63\u5728\u68C0\u51FA {0} CheckoutAsProjectOperation.taskName = SVN \u68C0\u51FA CheckoutInto.message = \u9009\u62E9\u8981\u5C06\u6B64\u9879\u76EE\u68C0\u51FA\u5230\u7684\u6587\u4EF6\u5939\u3002\u4EE5\u6B64\u9879\u76EE\u540D\u79F0\u547D\u540D\u7684\u6587\u4EF6\u5939\u5C06\u88AB\u521B\u5EFA\u5230\u6240\u9009\u7684\u6587\u4EF6\u5939\u4E2D\u3002 CheckoutIntoProjectSelectionPage.description = \u9009\u62E9\u201C{0}\u201D\u8981\u68C0\u51FA\u5230\u7684\u7236\u6587\u4EF6\u5939\uFF1A CheckoutIntoProjectSelectionPage.invalidFolderName = \u6587\u4EF6\u5939\u201C{0}\u201D\u4E0D\u53EF\u7528 CheckoutIntoProjectSelectionPage.name = \u76EE\u6807\u6587\u4EF6\u5939(&N)\uFF1A CheckoutIntoProjectSelectionPage.recurse = \u68C0\u51FA\u5B50\u6587\u4EF6\u5939(&C) CheckoutIntoProjectSelectionPage.showAll = \u663E\u793A\u5168\u90E8\u53EF\u7528\u7684\u76EE\u6807\u9879\u76EE CheckoutIntoProjectSelectionPage.showLabel = \u8FC7\u6EE4\u9879\u76EE\u5217\u8868(&F)\uFF1A CheckoutIntoProjectSelectionPage.showSameRepo = \u663E\u793A\u5171\u4EAB\u5728\u6B64\u8D44\u6E90\u5E93\u4E2D\u7684\u9879\u76EE CheckoutIntoProjectSelectionPage.showUnshared = \u663E\u793A\u672A\u5171\u4EAB\u7684\u9879\u76EE CheckoutIntoProjectSelectionPage.treeLabel = \u76EE\u6807\u6587\u4EF6\u5939\u7684\u7236\u6587\u4EF6\u5939\uFF1A CheckoutIntoWizard.,mappingAlredyExists = \u4E0D\u80FD\u5C06\u8FDC\u7A0B\u6587\u4EF6\u5939\u201C{0}\u201D\u6DFB\u52A0\u81F3\u9879\u76EE\u201C{1}\u201D\u7684\u201C{2}\u201D\u4E2D\uFF0C\u56E0\u4E3A\u672C\u5730\u6587\u4EF6\u5939\u201C{3}\u201D\u5DF2\u7ECF\u6620\u5C04\u5230\u6B64\u6587\u4EF6\u5939\u3002 CheckoutIntoWizard.confirmOverwrite = \u786E\u8BA4\u8986\u76D6 CheckoutIntoWizard.error = \u68C0\u51FA\u5931\u8D25 CheckoutIntoWizard.projectSelectionPageDescription = \u4E3A\u68C0\u51FA\u64CD\u4F5C\u9009\u62E9\u672C\u5730\u6587\u4EF6\u5939\u3002 CheckoutIntoWizard.projectSelectionPageTitle = \u9009\u62E9\u672C\u5730\u6587\u4EF6\u5939 CheckoutIntoWizard.thisResourceExists = \u8D44\u6E90\u201C{0}\u201D\u5B58\u5728\u4E8E\u5DE5\u4F5C\u7A7A\u95F4\u4E2D\uFF0C\u8981\u8986\u76D6\u5417\uFF1F CheckoutIntoWizard.title = \u68C0\u51FA\u81F3 CheckoutWizard.title = \u4ECE SVN \u68C0\u51FA CheckoutWizardCheckoutAsPage.existing = \u68C0\u51FA\u81F3\u73B0\u6709\u9879\u76EE\u4E2D CheckoutWizardCheckoutAsPage.heading = \u68C0\u51FA\u4E3A CheckoutWizardCheckoutAsPage.multiple = \u9009\u62E9\u68C0\u51FA\u8FD9 {0} \u4E2A\u6587\u4EF6\u5939\u7684\u65B9\u5F0F CheckoutWizardCheckoutAsPage.notAvailable = \uFF08\u4EC5\u5F53\u8D44\u6E90\u5E93\u4E2D\u4E0D\u5B58\u5728 .project \u6587\u4EF6\u65F6\u624D\u53EF\u7528\uFF09 CheckoutWizardCheckoutAsPage.project = \u505A\u4E3A\u5DE5\u4F5C\u7A7A\u95F4\u4E2D\u7684\u9879\u76EE\u68C0\u51FA CheckoutWizardCheckoutAsPage.projectName = \u9879\u76EE\u540D\u79F0\uFF1A CheckoutWizardCheckoutAsPage.projects = \u505A\u4E3A\u5DE5\u4F5C\u7A7A\u95F4\u4E2D\u7684\u591A\u4E2A\u9879\u76EE\u68C0\u51FA CheckoutWizardCheckoutAsPage.single = \u9009\u62E9\u68C0\u51FA\u6587\u4EF6\u5939 {0} \u7684\u65B9\u5F0F CheckoutWizardCheckoutAsPage.text = \u9009\u62E9\u68C0\u51FA\u7684\u65B9\u5F0F\u3002 CheckoutWizardCheckoutAsPage.wizard = \u505A\u4E3A\u65B0\u9879\u76EE\u68C0\u51FA\uFF0C\u5E76\u4F7F\u7528\u65B0\u5EFA\u9879\u76EE\u5411\u5BFC\u8FDB\u884C\u914D\u7F6E CheckoutWizardLocationPage.existing = \u4F7F\u7528\u73B0\u6709\u7684\u8D44\u6E90\u5E93\u4F4D\u7F6E\uFF1A CheckoutWizardLocationPage.heading = \u9009\u62E9\uFF0F\u65B0\u5EFA\u4F4D\u7F6E CheckoutWizardLocationPage.new = \u521B\u5EFA\u65B0\u7684\u8D44\u6E90\u5E93\u4F4D\u7F6E CheckoutWizardLocationPage.text = \u9009\u62E9\u73B0\u6709\u7684\u8D44\u6E90\u5E93\u4F4D\u7F6E\u6216\u521B\u5EFA\u65B0\u4F4D\u7F6E\u3002 CheckoutWizardProjectPage.browse = \u6D4F\u89C8... CheckoutWizardProjectPage.default = \u4F7F\u7528\u7F3A\u7701\u5DE5\u4F5C\u7A7A\u95F4 CheckoutWizardProjectPage.heading = \u68C0\u51FA\u4E3A CheckoutWizardProjectPage.location = \u4F4D\u7F6E\uFF1A CheckoutWizardProjectPage.revision = \u8981\u68C0\u51FA\u7684\u7248\u672C\uFF1A CheckoutWizardProjectPage.text = \u9009\u62E9\u9879\u76EE\u4F4D\u7F6E\u3002 CheckoutWizardSelectionPage.heading = \u9009\u62E9\u6587\u4EF6\u5939 CheckoutWizardSelectionPage.text = \u9009\u62E9\u8981\u4ECE SVN \u68C0\u51FA\u7684\u6587\u4EF6\u5939\u3002 ChooseRootUrlDialog.chooseRootUrl = \u9009\u62E9\u8D44\u6E90\u5E93\u6839\u8DEF\u5F84\uFF1A ChooseRootUrlDialog.rootUrlDialogTitle = \u8D44\u6E90\u5E93\u6839\u8DEF\u5F84 ChooseUrlDialog.branches = \u5206\u652F ChooseUrlDialog.delete = \u5220\u9664... ChooseUrlDialog.refresh = \u5237\u65B0 ChooseUrlDialog.tags = \u6807\u8BB0 ChooseUrlDialog.title = \u8D44\u6E90\u5E93\u6D4F\u89C8\u5668 CleanupAction.error = \u6E05\u7406\u5931\u8D25 CleanupOperation.0 = \u6B63\u5728\u6E05\u7406 {0} CleanupOperation.taskName = SVN \u6E05\u7406 CommentCommitWizardPage.pageDescription = \u8F93\u5165\u63D0\u4EA4\u4FE1\u606F CommentCommitWizardPage.pageTitle = \u63D0\u4EA4 CommentTemplatesPreferencePage.Description = \u521B\u5EFA\u3001\u7F16\u8F91\u6216\u79FB\u9664\u6CE8\u91CA\u6A21\u677F(&C)\uFF1A CommentTemplatesPreferencePage.Edit = \u7F16\u8F91(&E)... CommentTemplatesPreferencePage.EditCommentTemplateMessage = \u8BF7\u8F93\u5165\u6CE8\u91CA\u6A21\u677F\uFF1A CommentTemplatesPreferencePage.EditCommentTemplateTitle = \u8F93\u5165\u6CE8\u91CA\u6A21\u677F CommentTemplatesPreferencePage.New = \u65B0\u5EFA(&N)... CommentTemplatesPreferencePage.Preview = \u9884\u89C8(&W)\uFF1A CommentTemplatesPreferencePage.Remove = \u79FB\u9664(&R) CommitAction.commitFailed = \u6267\u884C\u63D0\u4EA4\u65F6\u51FA\u73B0\u95EE\u9898 CommitCommentArea_0 = <\u5355\u51FB\u6B64\u5904\u8F93\u5165\u63D0\u4EA4\u6CE8\u91CA> CommitCommentArea_1 = <\u9009\u62E9\u4EE5\u524D\u7684\u6CE8\u91CA> CommitCommentArea_2 = \u7A7A\u6CE8\u91CA CommitCommentArea_3 = \u63D0\u4EA4\u6CE8\u91CA\u4E3A\u7A7A\uFF0C\u786E\u5B9A\u7EE7\u7EED\u63D0\u4EA4\u64CD\u4F5C\u5417\uFF1F CommitCommentArea_4 = \u4FDD\u5B58\u8BBE\u5B9A(&M)\uFF1F CommitCommentArea_5 = \u6B63\u5728\u914D\u7F6E\u6CE8\u91CA\u6A21\u677F... CommitCommentArea_6 = \u6A21\u677F CommitDialog.0 = {0} \u672A\u8F93\u5165\u3002\u4ECD\u8981\u7EE7\u7EED\u63D0\u4EA4\u5417\uFF1F CommitDialog.added = \u5DF2\u6DFB\u52A0 CommitDialog.commitTo = \u63D0\u4EA4\u5230\uFF1A CommitDialog.conflicted = \u51B2\u7A81 CommitDialog.deleted = \u5220\u9664 CommitDialog.deselectUnadded = \u4E0D\u9009\u4E2D\u672A\u52A0\u5165\u7248\u672C\u63A7\u5236\u7684(&U) CommitDialog.keepLocks = \u4FDD\u6301\u9501\u5B9A CommitDialog.missing = \u4E0D\u5B58\u5728 CommitDialog.modified = \u4FEE\u6539 CommitDialog.multiple = \u9009\u62E9\u4E86\u591A\u4E2A\u76EE\u6807 CommitDialog.noChanges = \u4E0A\u6B21\u63D0\u4EA4\u540E\u6CA1\u6709\u66F4\u6539\u6216\u6DFB\u52A0\u7684\u6587\u4EF6\u3002 CommitDialog.number = {0} \u5FC5\u987B\u5168\u90E8\u662F\u6570\u5B57\uFF0C\u6216\u8005\u662F\u7A7A\u767D\uFF08\u9017\u53F7\u505A\u4E3A\u5206\u9694\u7B26\uFF09\u3002 CommitDialog.propertiesModified = \u5C5E\u6027\u5DF2\u4FEE\u6539 CommitDialog.property = \u5C5E\u6027\u72B6\u6001 CommitDialog.replaced = \u5DF2\u66FF\u6362 CommitDialog.resources = \u9009\u4E2D\u7684\u8D44\u6E90\u5C06\u88AB\u63D0\u4EA4\u5230 SVN \u7248\u672C\u63A7\u5236\u3002 CommitDialog.status = \u6587\u672C\u72B6\u6001 CommitDialog.tag = \u8B66\u544A\uFF1A\u60A8\u7684\u5DE5\u4F5C\u590D\u672C\u4F3C\u4E4E\u662F\u4E00\u4E2A\u6807\u8BB0\u76EE\u5F55\uFF01\u63D0\u4EA4\u524D\u53EF\u4EE5\u5148\u5207\u6362\u5230\u4E00\u4E2A\u5206\u652F\u6216\u4E3B\u7EBF\uFF0C\u4E0D\u5207\u6362\u76F4\u63A5\u63D0\u4EA4\u5417\uFF1F CommitDialog.title = \u63D0\u4EA4 CommitDialog.unselectedPropChangeChildren = \u5982\u679C\u540C\u65F6\u9009\u4E2D\u6587\u4EF6\u5939\u5220\u9664\u548C\u6587\u4EF6\u5939\u5C5E\u6027\u66F4\u6539\uFF0C\r\n\u90A3\u4E48\u6240\u6709\u5C5E\u4E8E\u5728\u6B64\u6587\u4EF6\u5939\u5C5E\u6027\u7684\u6587\u4EF6\u4E5F\u5FC5\u987B\u9009\u4E2D\u3002 CommitDialog.unversioned = \u672A\u52A0\u5165\u7248\u672C\u63A7\u5236 CommitOperation.taskName = SVN \u63D0\u4EA4 CommitSetDialog_0 = \u540D\u79F0(&N)\uFF1A CommitSetDialog_2 = \u5C06\u6807\u9898\u7528\u505A\u63D0\u4EA4\u6CE8\u91CA(&T) CommitSetDialog_3 = \u8F93\u5165\u63D0\u4EA4\u6CE8\u91CA(&C) CommitSyncAction.cancelRelease = \u53D6\u6D88\u53D1\u5E03\u64CD\u4F5C\u3002 CommitSyncAction.errorCommitting = \u63D0\u4EA4\u66F4\u6539\u65F6\u51FA\u73B0\u9519\u8BEF\u3002 CommitSyncAction.questionRelease = \u5177\u6709\u4E0E\u670D\u52A1\u5668\u76F8\u51B2\u7A81\u7684\u66F4\u6539\u3002\u8981\u53D1\u5E03\u90A3\u4E9B\u66F4\u6539\u5417\uFF1F CommitSyncAction.releaseAll = \u53D1\u5E03\u6240\u6709\u66F4\u6539\uFF0C\u8986\u76D6\u670D\u52A1\u5668\u4E0A\u51B2\u7A81\u7684\u6240\u6709\u66F4\u6539\u3002 CommitSyncAction.releasePart = \u53EA\u53D1\u5E03\u672A\u4E0E\u670D\u52A1\u5668\u4E0A\u7684\u66F4\u6539\u51B2\u7A81\u7684\u66F4\u6539\u3002 CommitSyncAction.titleRelease = \u786E\u8BA4\u53D1\u5E03 CompareEditorInput.fileProgress = \u6B63\u5728\u6BD4\u8F83 SVN \u6587\u4EF6\uFF1A{0} CompareWithRemoteAction.compare = \u4E0E\u8D44\u6E90\u5E93\u4E2D\u6700\u540E\u7248\u672C\u8FDB\u884C\u6BD4\u8F83\u65F6\u53D1\u751F\u9519\u8BEF CompareWithRemoteAction.fetching = \u6B63\u5728\u4E0E\u8D44\u6E90\u5E93\u4E2D\u6700\u540E\u7248\u672C\u8FDB\u884C\u6BD4\u8F83... CompareWithRemoteAction.noRemote = \u65E0\u8FDC\u7A0B\u8D44\u6E90 CompareWithRemoteAction.noRemoteLong = \u9009\u62E9\u7684\u8D44\u6E90\u6CA1\u6709\u4E0E\u4E4B\u76F8\u5BF9\u5E94\u7684\u8FDC\u7A0B\u8D44\u6E90\u53EF\u4EE5\u6BD4\u8F83\u3002 CompareWithRevisionAction.compare = \u4E0E\u4FEE\u8BA2\u7248\u8FDB\u884C\u6BD4\u8F83\u65F6\u53D1\u751F\u9519\u8BEF CompareWithRevisionAction.fetching = \u6B63\u5728\u4ECE\u8D44\u6E90\u5E93\u68C0\u7D22\u4FEE\u8BA2\u7248... CompareWithRevisionAction.noRevisions = \u65E0\u4FEE\u8BA2\u7248 CompareWithRevisionAction.noRevisionsLong = \u9009\u62E9\u7684\u8D44\u6E90\u6CA1\u6709\u53EF\u6BD4\u8F83\u7684\u4FEE\u8BA2\u7248\u3002 CompareWithTagAction.fetching = \u6B63\u5728\u68C0\u7D22\u542B\u6709\u6807\u8BB0 {0} \u7684\u8D44\u6E90... CompareWithTagAction.message = \u4E0E\u5206\u652F\uFF0F\u7248\u672C\u8FDB\u884C\u6BD4\u8F83 CompareWithTagAction.noRemote = \u65E0\u8FDC\u7A0B\u8D44\u6E90 CompareWithTagAction.noRemoteLong = \u9009\u62E9\u7684\u6807\u7B7E\u6CA1\u6709\u53EF\u6BD4\u8F83\u7684\u8FDC\u7A0B\u8D44\u6E90\u3002 CompareWithTagAction.replace = \u6BD4\u8F83\u5206\u652F\uFF0F\u7248\u672C\u65F6\u53D1\u751F\u9519\u8BEF\u3002 ConfigurationWizardAutoconnectPage.connectionType = \u8FDE\u63A5\u7C7B\u578B\uFF1A ConfigurationWizardAutoconnectPage.default = \u7F3A\u7701 ConfigurationWizardAutoconnectPage.description = \u9879\u76EE\u5DF2\u6709 SVN/ \u76EE\u5F55\u3002\u6709\u53EF\u80FD\u5B83\u5148\u524D\u5DF2\u5171\u4EAB\uFF0C\u6216\u662F\u4F7F\u7528\u53E6\u4E00\u5DE5\u5177\u53D6\u51FA\u7684\u3002\u5C06\u81EA\u52A8\u5730\u4F7F\u7528\u4EE5\u4E0B\u4FE1\u606F\u8FDB\u884C\u5171\u4EAB\u3002 ConfigurationWizardAutoconnectPage.host = \u4E3B\u673A\uFF1A ConfigurationWizardAutoconnectPage.module = \u6A21\u5757\uFF1A ConfigurationWizardAutoconnectPage.noSVNDirectory = \u627E\u4E0D\u5230 SVN/ \u76EE\u5F55 ConfigurationWizardAutoconnectPage.noSyncInfo = \u672A\u80FD\u83B7\u53D6\u6587\u4EF6\u5939\u4FE1\u606F ConfigurationWizardAutoconnectPage.port = \u7AEF\u53E3\uFF1A ConfigurationWizardAutoconnectPage.repositoryPath = \u8D44\u6E90\u5E93\u8DEF\u5F84\uFF1A ConfigurationWizardAutoconnectPage.user = \u7528\u6237\uFF1A ConfigurationWizardAutoconnectPage.validate = \u5728\u5B8C\u6210\u65F6\u9A8C\u8BC1\u8FDE\u63A5(&V) ConfigurationWizardMainPage.Authentication_2 = \u8BA4\u8BC1 ConfigurationWizardMainPage.Connection_3 = \u8FDE\u63A5 ConfigurationWizardMainPage.Location_1 = \u4F4D\u7F6E ConfigurationWizardMainPage.browseRootUrl = \u6D4F\u89C8... ConfigurationWizardMainPage.connection = \u8FDE\u63A5\u7C7B\u578B\uFF1A ConfigurationWizardMainPage.invalidHostName = \u4E3B\u673A\u540D\u65E0\u6548 ConfigurationWizardMainPage.invalidPathWithSlashes = \u5B58\u50A8\u5E93\u8DEF\u5F84\u4E2D\u4E0D\u80FD\u5305\u542B\u53CC\u659C\u6760\uFF08//\uFF09 ConfigurationWizardMainPage.invalidPathWithSpaces = \u5B58\u50A8\u5E93\u8DEF\u5F84\u4E0D\u80FD\u6709\u5E26\u6709\u524D\u5BFC\u6216\u7ED3\u5C3E\u7A7A\u683C\u7684\u6BB5 ConfigurationWizardMainPage.invalidPort = \u7AEF\u53E3\u53F7\u65E0\u6548 ConfigurationWizardMainPage.invalidUrl = \u8D44\u6E90\u5E93\u8DEF\u5F84\u5FC5\u987B\u662F\u6709\u6548\u7684 URL {0} ConfigurationWizardMainPage.invalidUserName = \u7528\u6237\u540D\u65E0\u6548 ConfigurationWizardMainPage.password = \u5BC6\u7801(&P) ConfigurationWizardMainPage.repositoryPath = \u8D44\u6E90\u5E93\u8DEF\u5F84(&R)\uFF1A ConfigurationWizardMainPage.rootUrl = \u6839\u8DEF\u5F84\uFF1A ConfigurationWizardMainPage.rootUrlWarning = \u5982\u679C\u60A8\u7684\u8D44\u6E90\u5E93\u8DEF\u5F84\u662F http://mycompany.com/repository/trunk/project\uFF0C\r\n\u90A3\u4E48\u5BF9\u5E94\u7684\u8D44\u6E90\u5E93\u6839\u8DEF\u5F84\u5E94\u8BE5\u662F http://mycompany.com/repository \u3002 ConfigurationWizardMainPage.url = &URL\uFF1A ConfigurationWizardMainPage.useDefaultPort = \u4F7F\u7528\u7F3A\u7701\u7AEF\u53E3(&D) ConfigurationWizardMainPage.usePort = \u4F7F\u7528\u7AEF\u53E3(&T)\uFF1A ConfigurationWizardMainPage.userName = \u7528\u6237(&U)\uFF1A ConfigureTagsDialog.add = \u6DFB\u52A0 ConfigureTagsDialog.addBranch = \u6DFB\u52A0\u5206\u652F ConfigureTagsDialog.addTag = \u6DFB\u52A0\u6807\u8BB0 ConfigureTagsDialog.apply = \u5E94\u7528 ConfigureTagsDialog.branch = \u5206\u652F ConfigureTagsDialog.branchHeader = \u5206\u652F\uFF1A ConfigureTagsDialog.browse = \u6D4F\u89C8... ConfigureTagsDialog.confirmExit = \u786E\u5B9A\u4E0D\u66F4\u65B0\u76F4\u63A5\u9000\u51FA\u5417\uFF1F ConfigureTagsDialog.delete = \u5220\u9664 ConfigureTagsDialog.loadBranchesMessage = \u9009\u62E9\u8981\u521B\u5EFA\u5206\u652F\u7684\u6587\u4EF6\u5939\u3002\u591A\u9009\u8BF7\u4F7F\u7528 Shift+\u5355\u51FB \u6216 Ctrl+\u5355\u51FB\u3002 ConfigureTagsDialog.loadTagsMessage = \u9009\u62E9\u8981\u521B\u5EFA\u6807\u8BB0\u7684\u6587\u4EF6\u5939\u3002\u591A\u9009\u8BF7\u4F7F\u7528 Shift+\u5355\u51FB \u6216 Ctrl+\u5355\u51FB\u3002 ConfigureTagsDialog.name = \u540D\u79F0\uFF1A ConfigureTagsDialog.newBranch = \u65B0\u5EFA\u5206\u652F ConfigureTagsDialog.newTag = \u65B0\u5EFA\u6807\u8BB0 ConfigureTagsDialog.path = \u76F8\u5BF9\u8DEF\u5F84\uFF1A ConfigureTagsDialog.pendingUpdate = \u60A8\u5DF2\u7ECF\u5BF9\u524D\u9762\u9009\u62E9\u7684\u5206\u652F\u6216\u6807\u8BB0\u505A\u4E86\u66F4\u6539\u3002\u5E0C\u671B\u5E94\u7528\u8FD9\u4E9B\u66F4\u6539\u5417\uFF1F ConfigureTagsDialog.revision = \u4FEE\u8BA2\u7248\uFF1A ConfigureTagsDialog.tagHeader = \u6807\u8BB0\uFF1A ConfigureTagsDialog.text = \u9009\u62E9\u4E00\u6216\u591A\u4E2A\u8981\u6DFB\u52A0\u5230\u914D\u7F6E\u4E2D\u7684\u5206\u652F\uFF0F\u6807\u8BB0\u6587\u4EF6\u5939\u3002\u7136\u540E\u53F3\u952E\u5355\u51FB\u5E76\u9009\u62E9\u9002\u5F53\u7684\u9009\u9879\u4EE5\u5C06\u5206\u652F\uFF0F\u6807\u8BB0\u6DFB\u52A0\u5230\u914D\u7F6E\u4E2D\u3002 ConfigureTagsDialog.title = \u914D\u7F6E\u5206\u652F\uFF0F\u6807\u8BB0 ConfigureTagsDialog.url = URL\uFF1A ConfigureTagsFromRepoViewConfigure_Tag_Error_1 = \u914D\u7F6E\u6807\u8BB0\u9519\u8BEF Configure_the_options_used_for_the_SVN_diff_command_20 = \u914D\u7F6E\u7528\u4E8E SVN diff \u547D\u4EE4\u7684\u9009\u9879 Console.clearOutput = \u6E05\u9664\u8F93\u51FA Console.copy = \u590D\u5236 Console.couldNotFormatTime = \u4E3A SVN \u63A7\u5236\u53F0\u683C\u5F0F\u5316\u8F93\u51FA\u65F6\u95F4\u65F6\u53D1\u751F\u9519\u8BEF\u3002 Console.error = \u9519\u8BEF\uFF1A{0} Console.info = \u4FE1\u606F\uFF1A{0} Console.postExecutionDelimiter = *** Console.preExecutionDelimiter = *** Console.resultAborted = \u64CD\u4F5C\u5DF2\u53D6\u6D88 {0} Console.resultException = \u7531\u4E8E\u5185\u90E8\u9519\u8BEF {0} \u800C\u5931\u8D25 Console.resultOk = \u786E\u5B9A {0} Console.resultServerError = {0} {1} Console.resultTimeFormat = \u201C\uFF08\u8017\u65F6\u201Cm:ss.SSS\u201D\uFF09\u201D Console.resultWarnings = {0} {1} Console.selectAll = \u5168\u90E8\u9009\u4E2D Console.warning = \u8B66\u544A\uFF1A{0} ConsolePreferencePage.commandColor = \u547D\u4EE4\u884C(&L)\uFF1A ConsolePreferencePage.consoleColorSettings = \u63A7\u5236\u53F0\u6587\u672C\u989C\u8272\u8BBE\u7F6E\uFF1A ConsolePreferencePage.errorColor = \u9519\u8BEF(&R)\uFF1A ConsolePreferencePage.font = \u63A7\u5236\u53F0\u5B57\u4F53\u8BBE\u7F6E\uFF1A ConsolePreferencePage.highWaterMark = \u63A7\u5236\u53F0\u7F13\u51B2\u533A\u5927\u5C0F\uFF08\u5B57\u7B26\u6570\uFF09(&B)\uFF1A ConsolePreferencePage.limitOutput = \u9650\u5236\u63A7\u5236\u53F0\u8F93\u51FA(&L) ConsolePreferencePage.messageColor = \u6D88\u606F(&M)\uFF1A ConsolePreferencePage.showOnError = \u5F53\u53D1\u751F\u9519\u8BEF\u65F6\uFF0C\u81EA\u52A8\u663E\u793A SVN \u63A7\u5236\u53F0 ConsolePreferencePage.showOnMessage = \u5F53\u547D\u4EE4\u8FD0\u884C\u65F6\uFF0C\u81EA\u52A8\u663E\u793A SVN \u63A7\u5236\u53F0 ConsoleRemoveAction.label = \u5173\u95ED SVN \u63A7\u5236\u53F0 ConsoleRemoveAction.tooltip = \u5173\u95ED SVN \u63A7\u5236\u53F0 ContentAction.Changing_this_setting_will_involve_contacting_the_server_and_may_be_long-running_2 = \u5BF9\u6B64\u8BBE\u7F6E\u7684\u66F4\u6539\u5C06\u4F1A\u8FDE\u63A5\u670D\u52A1\u5668\u5E76\u4E14\u53EF\u80FD\u4F1A\u957F\u65F6\u95F4\u8FD0\u884C\u3002 ContentAction.Confirm_Long_Operation_1 = \u8017\u65F6\u64CD\u4F5C\u786E\u8BA4 Context_14 = \u4E0A\u4E0B\u6587(&C) CopyAction.copy = \u590D\u5236 CopyAction.nameConflictMessage = \u4E3A \u201C{0}\u201D \u8F93\u5165\u65B0\u540D\u79F0\uFF1A CopyAction.nameConflictSame = \u5FC5\u987B\u8F93\u5165\u65B0\u540D\u79F0\u3002 CopyAction.nameConflictTitle = \u540D\u79F0\u51B2\u7A81 CopyAction.selectionLabel = \u590D\u5236\u5230 DateSelectionDialog.april = \u56DB\u6708 DateSelectionDialog.august = \u516B\u6708 DateSelectionDialog.december = \u5341\u4E8C\u6708 DateSelectionDialog.february = \u4E8C\u6708 DateSelectionDialog.friday = \u5468\u4E94 DateSelectionDialog.january = \u4E00\u6708 DateSelectionDialog.july = \u4E03\u6708 DateSelectionDialog.june = \u516D\u6708 DateSelectionDialog.march = \u4E09\u6708 DateSelectionDialog.may = \u4E94\u6708 DateSelectionDialog.monday = \u5468\u4E00 DateSelectionDialog.november = \u5341\u4E00\u6708 DateSelectionDialog.october = \u5341\u6708 DateSelectionDialog.saturday = \u5468\u516D DateSelectionDialog.september = \u4E5D\u6708 DateSelectionDialog.sunday = \u5468\u65E5 DateSelectionDialog.thursday = \u5468\u56DB DateSelectionDialog.title = \u9009\u62E9\u65E5\u671F DateSelectionDialog.tuesday = \u5468\u4E8C DateSelectionDialog.wednesday = \u5468\u4E09 DiffAction.diff = \u5DEE\u5F02 DiffMergePreferencePage.addVariableDialogTitle = \u6DFB\u52A0\u53D8\u91CF DiffMergePreferencePage.baseVariableComment = \u5FFD\u7565\u4E86\u66F4\u6539\u7684\u539F\u59CB\u6587\u4EF6 DiffMergePreferencePage.browse = \u6D4F\u89C8... DiffMergePreferencePage.builtInMerge = \u5185\u5EFA DiffMergePreferencePage.externalMerge = \u5916\u90E8 DiffMergePreferencePage.mergeProgramGroup = \u5408\u5E76\u7A0B\u5E8F DiffMergePreferencePage.mergeProgramParameters = \u53C2\u6570\uFF1A DiffMergePreferencePage.mergeProgramVariables = \u53D8\u91CF DiffMergePreferencePage.mergedVariableComment = \u8981\u5408\u5E76\u51B2\u7A81\u6587\u4EF6\u7684\u4F4D\u7F6E DiffMergePreferencePage.theirsVariableComment = \u8D44\u6E90\u5E93\u4E2D\u7684\u6587\u4EF6 DiffMergePreferencePage.tortoiseMergeComment1 = \u4F7F\u7528 TortoiseMerge \u65F6\u53C2\u6570\u4E3A\uFF1A DiffMergePreferencePage.tortoiseMergeComment2 = /theirs:"${theirs}" /base:"${base}" /mine:"${yours}" /merged:"${merged}" DiffMergePreferencePage.yoursVariableComment = \u5305\u542B\u66F4\u6539\u7684\u672C\u5730\u6587\u4EF6 DiffNewFilesDialog.resources = \u9009\u4E2D\u7684\u8D44\u6E90\u5C06\u88AB\u5305\u542B\u5230\u8865\u4E01\u4E2D\u3002 DiffNewFilesDialog.title = \u5C06\u672A\u7BA1\u7406\u7684\u6587\u4EF6\u5305\u542B\u5230\u8865\u4E01\u4E2D Do_nothing_5 = \u65E0\u52A8\u4F5C EditConflicts.Label = \u7F16\u8F91\u51B2\u7A81 EditConflictsAction.errorTitle = \u7F16\u8F91\u51B2\u7A81 EditConflictsAction.mergeProgramDoesNotExist = \u914D\u7F6E\u7684\u5408\u5E76\u7A0B\u5E8F\u5DF2\u7ECF\u4E0D\u5B58\u5728 EditConflictsAction.noMergeProgramConfigured = \u672A\u914D\u7F6E\u5408\u5E76\u7A0B\u5E8F EditorsAction.classNotInitialized = {0} \u672A\u521D\u59CB\u5316 EditorsDialog.question = \u8D44\u6E90\u5DF2\u7ECF\u5728\u7F16\u8F91\u5668\u4E2D\u6253\u5F00\uFF0C\u4ECD\u7136\u8981\u7F16\u8F91\u5B83\u5417\uFF1F EditorsDialog.title = \u7F16\u8F91\u5668 EditorsView.computer = \u8BA1\u7B97\u673A\u540D EditorsView.date = \u65E5\u671F EditorsView.file = \u6587\u4EF6\u540D EditorsView.user = \u7528\u6237\u540D Example__1 = \u793A\u4F8B\uFF1A ExportAction.export = \u5BFC\u51FA ExportAction.exportTo = \u5BFC\u51FA\u81F3 ExportOperation.0 = \u6B63\u5728\u5BFC\u51FA {0} ExportOperation.taskName = SVN \u5BFC\u51FA ExportRemoteFolderAction.directoryDialogText = \u5BFC\u51FA\u8FDC\u7A0B\u6587\u4EF6\u5939 ExportRemoteFolderDialog.browse = \u6D4F\u89C8... ExportRemoteFolderDialog.directory = \u5BFC\u51FA\u76EE\u5F55\uFF1A ExportRemoteFolderDialog.directoryError = \u5BFC\u51FA\u76EE\u5F55\u4E0D\u5B58\u5728\u3002 ExportRemoteFolderDialog.repository = \u8D44\u6E90\u5E93 ExportRemoteFolderDialog.url = \u8D44\u6E90\u5E93 URL\uFF1A ExtMethodPreferencePage_Add_Variable = \u6DFB\u52A0\u53D8\u91CF(&A)... ExtMethodPreferencePage_Browse = \u6D4F\u89C8(&B)... ExtMethodPreferencePage_Details = \u9009\u62E9\u7A0B\u5E8F\u6216\u811A\u672C ExtMethodPreferencePage_SVN_SERVER__7 = SVN \u670D\u52A1\u5668(&S)\uFF1A ExtMethodPreferencePage_message = \u8FD9\u4E9B\u53D8\u91CF\u5B9A\u4E49\u4E86\u8981\u4E0E\u201Cext\u201D\u8FDE\u63A5\u65B9\u6CD5\u914D\u5408\u4F7F\u7528\u7684\u5916\u90E8\u8FDE\u63A5\u7A0B\u5E8F\u3002\r\n\u8FD9\u4E9B\u503C\u5E94\u8BE5\u4E0E\u201Cext\u201DSVN \u547D\u4EE4\u884C\u73AF\u5883\u53D8\u91CF\u8BBE\u7F6E\u76F8\u540C\u3002 FetchMembersOperation.message = \u6B63\u5728\u68C0\u7D22 {0} \u7684\u5B50\u4EE3 FetchMembersOperation.taskName = \u6B63\u5728\u68C0\u7D22...{0} FixTypeAction.fix = \u4FEE\u6B63\u7C7B\u578B ForceCommitSyncAction.Outgoing_Changes_Not_Added_1 = \u4F20\u51FA\u66F4\u6539\u4E0D\u5305\u542B\u6DFB\u52A0 ForceCommitSyncAction.You_have_chosen_to_commit_new_resources_which_have_not_been_added_to_version_control._Do_you_wish_to_add_them_to_version_control_now__2 = \u60A8\u8981\u63D0\u4EA4\u7684\u9009\u62E9\u4E2D\u5305\u542B\u4E86\u8FD8\u672A\u52A0\u5165\u81F3\u7248\u672C\u63A7\u5236\u7684\u65B0\u8D44\u6E90\uFF0C\u8981\u73B0\u5728\u628A\u5B83\u4EEC\u52A0\u5165\u5230\u7248\u672C\u63A7\u5236\u5417\uFF1F GenerateSVNDiff.AdvancedOptions = \u9AD8\u7EA7\u9009\u9879 GenerateSVNDiff.Browse = \u6D4F\u89C8(&O)... GenerateSVNDiff.ConfigureOptions = \u914D\u7F6E\u7528\u4E8E SVN diff \u547D\u4EE4\u7684\u9009\u9879 GenerateSVNDiff.EnterFilename = \u8F93\u5165\u6709\u6548\u7684\u6587\u4EF6\u540D\u6216\u9009\u62E9\u526A\u8D34\u677F\u9009\u9879\u3002 GenerateSVNDiff.FileName = \u6587\u4EF6\u540D(&F)\uFF1A GenerateSVNDiff.RecurseOption = \u9012\u5F52\u5230\u5B50\u6587\u4EF6\u5939(&R) GenerateSVNDiff.SaveInFileSystem = \u4FDD\u5B58\u5230\u6587\u4EF6\u7CFB\u7EDF(&V) GenerateSVNDiff.SaveInWorkspace = \u4FDD\u5B58\u5230\u5DE5\u4F5C\u7A7A\u95F4(&W) GenerateSVNDiff.SavePatchAs = \u8865\u4E01\u53E6\u5B58\u4E3A GenerateSVNDiff.SaveToClipboard = \u4FDD\u5B58\u5230\u526A\u8D34\u677F(&S) GenerateSVNDiff.SelectFolderAndFilename = \u9009\u62E9\u4E00\u4E2A\u6587\u4EF6\u5939\uFF0C\u7136\u540E\u8F93\u5165\u6587\u4EF6\u540D\uFF1A GenerateSVNDiff.error = \u8FD0\u884C SVN diff \u547D\u4EE4\u65F6\u53D1\u751F\u9519\u8BEF GenerateSVNDiff.noDiffsFoundMsg = \u672A\u53D1\u73B0\u5DEE\u5F02\u3002 GenerateSVNDiff.noDiffsFoundTitle = SVN \u6BD4\u8F83 GenerateSVNDiff.overwriteMsg = \u5B58\u5728\u76F8\u540C\u540D\u79F0\u7684\u6587\u4EF6\uFF0C\u8981\u8986\u76D6\u5417\uFF1F GenerateSVNDiff.overwriteTitle = \u786E\u8BA4\u8986\u76D6 GenerateSVNDiff.pageDescription = SVN diff \u547D\u4EE4\u7684\u8F93\u51FA\u7ED3\u679C\u53EF\u4EE5\u7528\u4F5C\u5E94\u7528\u8865\u4E01\u5411\u5BFC\u7684\u8F93\u5165\u6587\u4EF6\u3002 GenerateSVNDiff.pageTitle = \u8FD0\u884C SVN diff \u547D\u4EE4\u5E76\u628A\u8F93\u51FA\u7ED3\u679C\u4FDD\u5B58\u5230\u6587\u4EF6\u3002 GenerateSVNDiff.patchTxt = patch.txt GenerateSVNDiff.title = \u521B\u5EFA\u8865\u4E01 GenerateSVNDiff.working = \u6B63\u5728\u8FD0\u884C SVN diff... GetSyncAction.cancelCatchup = \u53D6\u6D88\u5E94\u7528\u8865\u4E01\u64CD\u4F5C\u3002 GetSyncAction.catchupAll = \u5E94\u7528\u6240\u6709\u4F20\u5165\u66F4\u6539\uFF0C\u8986\u76D6\u51B2\u7A81\u7684\u672C\u5730\u66F4\u6539\u3002 GetSyncAction.catchupPart = \u53EA\u5E94\u7528\u4E0D\u4E0E\u672C\u5730\u66F4\u6539\u76F8\u51B2\u7A81\u7684\u66F4\u6539\u3002 GetSyncAction.questionCatchup = \u5177\u6709\u5C06\u8981\u8986\u76D6\u7684\u672C\u5730\u66F4\u6539\u3002\u8981\u6DFB\u52A0\u51B2\u7A81\u7684\u66F4\u6539\u5417\uFF1F GetSyncAction.titleCatchup = \u5FFD\u7565\u51B2\u7A81\u5E94\u7528\u8865\u4E01\uFF1F GlobalRefreshResourceSelectionPage.1 = \u540C\u6B65 GlobalRefreshResourceSelectionPage.10 = \u5DE5\u4F5C\u96C6(&W)\uFF1A GlobalRefreshResourceSelectionPage.11 = \u9009\u62E9(&C)... GlobalRefreshResourceSelectionPage.12 = \u5168\u90E8\u9009\u4E2D(&A) GlobalRefreshResourceSelectionPage.13 = \u5168\u90E8\u4E0D\u9009(&D) GlobalRefreshResourceSelectionPage.2 = \u9009\u62E9\u5C06\u8981\u540C\u6B65\u7684\u8D44\u6E90\u6216\u8005\u6307\u5B9A\u4E00\u4E2A\u8303\u56F4\u4EE5\u8FDB\u884C\u81EA\u52A8\u9009\u62E9\u3002 GlobalRefreshResourceSelectionPage.3 = \u540C\u6B65 GlobalRefreshResourceSelectionPage.4 = \u6CA1\u6709\u9700\u8981\u540C\u6B65\u7684\u8D44\u6E90\u3002 GlobalRefreshResourceSelectionPage.5 = \u53EF\u540C\u6B65\u7684\u8D44\u6E90\uFF1A GlobalRefreshResourceSelectionPage.6 = \u8303\u56F4 GlobalRefreshResourceSelectionPage.7 = \u5DE5\u4F5C\u7A7A\u95F4(&O) GlobalRefreshResourceSelectionPage.8 = \u9009\u62E9\u7684\u8D44\u6E90(&S) GlobalRefreshResourceSelectionPage.9 = \u5173\u95ED\u7684\u9879\u76EE GlobalRefreshSubscriberPage.0 = \u672A\u77E5 GroupedByVersionCategory.Versions_1 = \u7248\u672C HistoryDialog.title = \u8D44\u6E90\u5386\u53F2\u8BB0\u5F55 HistoryFilterDialog.author = \u4F5C\u8005(&A)\uFF1A HistoryFilterDialog.comment = \u5305\u62EC\u6CE8\u91CA(&C)\uFF1A HistoryFilterDialog.fromDate = \u5F00\u59CB\u65E5\u671F\uFF08M/D/Y\uFF09(&F)\uFF1A HistoryFilterDialog.matchingAll = \u6240\u63D0\u4F9B\u7684\u6240\u6709\u6761\u4EF6(&L) HistoryFilterDialog.matchingAny = \u6240\u63D0\u4F9B\u7684\u4EFB\u4E00\u6761\u4EF6(&N) HistoryFilterDialog.showMatching = \u663E\u793A\u76F8\u5339\u914D\u7684\u6761\u76EE\uFF1A HistoryFilterDialog.title = \u8FC7\u6EE4\u8D44\u6E90\u5386\u53F2\u8BB0\u5F55 HistoryFilterDialog.toDate = \u7ED3\u675F\u65E5\u671F\uFF08M/D/Y\uFF09(&T)\uFF1A HistorySearchDialog.comment = \u6CE8\u91CA HistorySearchDialog.date = \u8D77\u59CB\u65E5\u671F HistorySearchDialog.dateParseErrorMessage = \u9519\u8BEF\u7684\u65E5\u671F\u683C\u5F0F HistorySearchDialog.dateParseErrorTitle = \u65E5\u671F\u89E3\u6790\u9519\u8BEF HistorySearchDialog.dateSequenceErrorMessage = \u7EC8\u6B62\u65E5\u671F\u5FC5\u987B\u665A\u4E8E\u8D77\u59CB\u65E5\u671F HistorySearchDialog.dateSequenceErrorTitle = \u65E5\u671F\u8303\u56F4\u9519\u8BEF HistorySearchDialog.endDateButton = \u9009\u62E9... HistorySearchDialog.fetchLogIfNeeded = \u67E5\u627E\u671F\u95F4\u81EA\u52A8\u68C0\u7D22\u65E5\u5FD7 HistorySearchDialog.midDate = \u7EC8\u6B62\u65E5\u671F HistorySearchDialog.regExp = \u5141\u8BB8\u7279\u6B8A\u5B57\u7B26\uFF08* = \u4EFB\u4F55\u5B57\u7B26\u4E32\uFF0C? = \u4EFB\u4F55\u5B57\u7B26\uFF0C = \u8F6C\u4E49\u5B57\u7B26\uFF09 HistorySearchDialog.resource = \u9009\u4E2D\u7684\u8D44\u6E90 HistorySearchDialog.searchAllLogs = \u67E5\u627E\u6240\u6709\u65E5\u5FD7 HistorySearchDialog.searchTitle = \u67E5\u627E HistorySearchDialog.startDateButton = \u9009\u62E9... HistorySearchDialog.title = \u67E5\u627E\u5386\u53F2 HistorySearchDialog.user = \u4F5C\u8005 HistoryView.[...]_4 = [...] HistoryView.affectedPathsCompressedLayout = \u5206\u5C42\u663E\u793A(&C) HistoryView.affectedPathsFlatLayout = \u5E73\u9762\u663E\u793A(&F) HistoryView.affectedPathsHorizontalLayout = \u6C34\u5E73\u5E03\u5C40(&H) HistoryView.affectedPathsVerticalLayout = \u5782\u76F4\u5E03\u5C40(&V) HistoryView.author = \u4F5C\u8005 HistoryView.clearSearch = \u6E05\u9664\u67E5\u627E\u5386\u53F2 HistoryView.comment = \u6CE8\u91CA HistoryView.confirmRevertRevision = \u786E\u5B9A\u8981\u5C06\u5BF9\u8FD9\u4E2A\u4FEE\u8BA2\u7248\u7684\u66F4\u6539\u56DE\u590D\u81F3 {0} \u5417\uFF1F HistoryView.confirmRevertRevisions = \u786E\u5B9A\u8981\u5C06\u5BF9\u8FD9\u4E9B\u4FEE\u8BA2\u7248\u7684\u66F4\u6539\u56DE\u590D\u81F3 {0} \u5417\uFF1F HistoryView.copy = \u590D\u5236(&C) HistoryView.createTagFromRevision = \u4ECE\u4FEE\u8BA2\u7248\u521B\u5EFA\u5206\u652F\uFF0F\u6807\u8BB0 HistoryView.date = \u65E5\u671F HistoryView.errorFetchingEntries = \u8BBF\u5B58 {0} \u7684\u6761\u76EE\u65F6\u51FA\u9519 HistoryView.fetchChangePathJob = \u6B63\u5728\u8BBF\u5B58\u53D7\u5F71\u54CD\u7684\u76EE\u5F55 HistoryView.fetchHistoryJob = \u6B63\u5728\u8BBF\u5B58 SVN \u4FEE\u8BA2\u7248\u5386\u53F2\u8BB0\u5F55 HistoryView.getAll = \u83B7\u53D6\u5168\u90E8 HistoryView.getContentsAction = \u83B7\u53D6\u5185\u5BB9(&G) HistoryView.getNext = \u4E0B HistoryView.getRevisionAction = \u83B7\u53D6\u4FEE\u8BA2\u7248(&R) HistoryView.linkWithLabel = \u4F7F\u7528\u7F16\u8F91\u5668\u94FE\u63A5 HistoryView.overwriteMsg = \u5177\u6709\u672C\u5730\u66F4\u6539\uFF0C\u60F3\u8981\u8986\u76D6\u5B83\u4EEC\u5417\uFF1F HistoryView.overwriteOutfile = \u6587\u4EF6\u201C{0}\u201D\u5DF2\u7ECF\u5B58\u5728\u3002\u8981\u8986\u76D6\u5417\uFF1F HistoryView.overwriteTitle = \u8986\u76D6\u672C\u5730\u66F4\u6539\u5417\uFF1F HistoryView.refresh = \u5237\u65B0\u89C6\u56FE HistoryView.refreshLabel = \u5237\u65B0\u89C6\u56FE(&R) HistoryView.revertChangesFromRevision = \u4ECE\u4FEE\u8BA2\u7248 {0} \u56DE\u590D\u66F4\u6539 HistoryView.revertChangesFromRevisions = \u5C06\u66F4\u6539\u4ECE\u4FEE\u8BA2\u7248 {0} \u56DE\u590D\u81F3\u4FEE\u8BA2\u7248 {1} HistoryView.revision = \u4FEE\u8BA2 HistoryView.search = \u67E5\u627E\u5386\u53F2 HistoryView.selectAll = \u5168\u90E8\u9009\u4E2D(&A) HistoryView.setCommitProperties = \u8BBE\u7F6E\u63D0\u4EA4\u5C5E\u6027(&S) HistoryView.showAffectedPaths = \u663E\u793A\u53D7\u5F71\u54CD\u7684\u76EE\u5F55 HistoryView.showComments = \u663E\u793A\u6CE8\u91CA\u67E5\u770B\u5668 HistoryView.showDifferences = \u521B\u5EFA\u5355\u4E00\u5DEE\u5F02\u6587\u4EF6 HistoryView.stopOnCopy = \u4E2D\u6B62\u590D\u5236\uFF0F\u91CD\u547D\u540D HistoryView.tagWithExistingAction = \u4F7F\u7528\u73B0\u6709\u7684\u6807\u8BB0(&T)... HistoryView.tags = \u6807\u8BB0 HistoryView.title = SVN \u8D44\u6E90\u5386\u53F2\u8BB0\u5F55 HistoryView.titleWithArgument = SVN \u8D44\u6E90\u5386\u53F2\u8BB0\u5F55\uFF08{0}\uFF09 HistoryView.wrapComments = \u6298\u884C\u663E\u793A\u6CE8\u91CA Icon_Overlays_24 = \u56FE\u6807\u4FEE\u9970(&I) IgnoreAction.ignore = \u5FFD\u7565\u8D44\u6E90\u65F6\u53D1\u751F\u9519\u8BEF\u3002 IgnoreOperation.0 = \u5FFD\u7565 {0} IgnoreOperation.taskName = \u5FFD\u7565\u8D44\u6E90 IgnoreResourcesDialog.addCustomEntryButton = \u5B9A\u5236\u6A21\u5F0F IgnoreResourcesDialog.addCustomEntryExample = \u5141\u8BB8\u4F7F\u7528\u901A\u914D\u7B26\u201C*\u201D\u548C\u201C?\u201D\u3002 IgnoreResourcesDialog.addExtensionEntryButton = \u901A\u914D\u7B26\u6269\u5C55 IgnoreResourcesDialog.addExtensionEntryExample = \u793A\u4F8B\uFF1A*.so, *.rcfile, bin IgnoreResourcesDialog.addNameEntryButton = \u6309\u540D\u79F0\u6392\u5E8F\u7684\u8D44\u6E90 IgnoreResourcesDialog.addNameEntryExample = \u793A\u4F8B\uFF1Afile1.so, file2.so, .rcfile, bin IgnoreResourcesDialog.patternDoesNotMatchFile = \u6A21\u5F0F\u4E0E\u9009\u62E9\u7684\u6240\u6709\u8D44\u6E90\u90FD\u4E0D\u5339\u914D\uFF1A\u4F8B\u5982\uFF0C{0} IgnoreResourcesDialog.patternMustNotBeEmpty = \u6A21\u5F0F\u4E0D\u80FD\u662F\u7A7A\u7684\u3002 IgnoreResourcesDialog.prompt = \u9009\u62E9\u8981\u6DFB\u52A0\u81F3 svn:ignore \u5C5E\u6027\u7684\u5185\u5BB9\uFF1A IgnoreResourcesDialog.titleMany = \u5C06 {0} \u4E2A\u8D44\u6E90\u6DFB\u52A0\u81F3 svn:ignore IgnoreResourcesDialog.titleSingle = \u5C06 {0} \u6DFB\u52A0\u81F3 svn:ignore ImportFolderDialog.comment = \u6CE8\u91CA\uFF1A ImportFolderDialog.directory = \u5BFC\u5165\u76EE\u5F55\uFF1A ImportFolderDialog.recurse = \u9012\u5F52\u5230\u5B50\u76EE\u5F55 ImportFolderDialog.title = \u5BFC\u5165\u6587\u4EF6\u5939 ImportOperation.0 = \u6B63\u5728\u5BFC\u5165 {0} ImportOperation.taskName = SVN \u5BFC\u5165 ListSelectionArea.deselectAll = \u5168\u90E8\u4E0D\u9009(&D) ListSelectionArea.selectAll = \u5168\u90E8\u9009\u4E2D(&S) LockDialog.enterComment = \u8F93\u5165\u6CE8\u91CA\uFF1A LockDialog.resources = \u8FD9\u4E9B\u8D44\u6E90\u5C06\u88AB\u9501\u5B9A\u3002 LockDialog.stealLock = \u5F3A\u5236\u9501\u5B9A LockDialog.title = \u9501\u5B9A LockOperation.0 = \u6B63\u5728\u9501\u5B9A {0} LockOperation.taskName = SVN \u9501\u5B9A MarkDeletedAction.label = \u6807\u8BB0\u4E3A\u5220\u9664 MarkResolved.label = \u6807\u8BB0\u4E3A\u89E3\u51B3 MenuIconsPreferencePage.default = \u9ED8\u8BA4 MenuIconsPreferencePage.iconSet = \u56FE\u6807\u96C6 MenuIconsPreferencePage.restart = \u63D0\u793A\uFF1A\u60A8\u9700\u8981\u91CD\u65B0\u542F\u52A8\u5DE5\u4F5C\u533A\u4EE5\u4F7F\u66F4\u6539\u751F\u6548\u3002 MergeAction.merge = \u6267\u884C\u5408\u5E76\u64CD\u4F5C\u65F6\u53D1\u751F\u4E86\u95EE\u9898 MergeAction.saveChanges = \u5177\u6709\u672A\u4FDD\u5B58\u7684\u66F4\u6539\uFF0C\u4FDD\u5B58\u540E\u7EE7\u7EED\u3002 MergeAction.saveChangesTitle = \u4FDD\u5B58\u66F4\u6539 MergeDialog.diff = \u5355\u4E00\u5DEE\u5F02\u6587\u4EF6 MergeDialog.diffTitle = \u521B\u5EFA\u5355\u4E00\u5DEE\u5F02\u6587\u4EF6 MergeDialog.dryRun = \u9884\u89C8 MergeDialog.force = \u5F3A\u5236 MergeDialog.from = \u8D77\u59CB\u8DEF\u5F84\uFF1A\uFF08\u8981\u5408\u5E76\u7684\u8D77\u59CB\u8DEF\u5F84\u548C\u4FEE\u8BA2\u8303\u56F4\uFF09 MergeDialog.ignoreAncestry = \u5FFD\u7565\u4E0A\u7EA7 MergeDialog.invalidFrom = \u8D77\u59CB\u4FEE\u8BA2\u7248\u65E0\u6548\u3002 MergeDialog.invalidTo = \u76EE\u6807\u4FEE\u8BA2\u7248\u65E0\u6548\u3002 MergeDialog.repositoryUrl = \u6307\u5411\u8D44\u6E90\u5E93\u7684\u8DEF\u5F84\uFF1A MergeDialog.showLog = \u663E\u793A\u65E5\u5FD7 MergeDialog.text = \u6307\u5B9A\u8981\u5408\u5E76\u7684\u4FEE\u8BA2\u8303\u56F4\uFF1A MergeDialog.title = \u5408\u5E76 MergeDialog.to = \u76EE\u6807\u8DEF\u5F84\uFF1A\uFF08\u8981\u5408\u5E76\u7684\u7ED3\u675F\u8DEF\u5F84\u548C\u4FEE\u8BA2\u8303\u56F4\uFF09 MergeDialog.url = \u5408\u5E76\u66F4\u6539\u5230\u5F53\u524D\u5DE5\u4F5C\u590D\u672C\uFF1A MergeDialog.urlError = \u65E0\u6548\u7684 URL\uFF1A MergeDialog.useFrom = \u4F7F\u7528\u201C\u8D77\u59CB\u8DEF\u5F84\u201D MergeDialog.workingCopy = \u5408\u5E76\u7ED3\u679C\u4FDD\u5B58\u5230\u5DE5\u4F5C\u590D\u672C\uFF1A MergeEditorInput.title = \u5408\u5E76 {0} \u548C {1} MergeOperation.0 = \u6B63\u5728\u5408\u5E76 {0} MergeOperation.taskName = SVN \u5408\u5E76 MergeWizard.end = \u9009\u62E9\u5F85\u5408\u5E76\u66F4\u6539\u7684\u4F4D\u7F6E MergeWizard.preparing = \u6B63\u5728\u51C6\u5907\u5408\u5E76\u5411\u5BFC MergeWizard.preparingEnd = \u6B63\u5728\u8BBF\u5B58\u7ED3\u675F\u9875\u6807\u8BB0 MergeWizard.preparingStart = \u6B63\u5728\u8BBF\u5B58\u8D77\u59CB\u9875\u6807\u8BB0 MergeWizard.start = \u9009\u62E9\u5408\u5E76\u8D77\u59CB\u70B9 MergeWizard.title = \u5408\u5E76 MergeWizardEndPage.branches = \u5206\u652F MergeWizardEndPage.description = \u5305\u542B\u5C06\u8981\u8FDB\u884C\u5408\u5E76\u5DE5\u4F5C\u7684\u7248\u672C\u6216\u5206\u652F\u3002 MergeWizardEndPage.duplicateTagSelected = \u4E0D\u80FD\u9009\u62E9 {0}\uFF0C\u56E0\u4E3A\u5B83\u5DF2\u7ECF\u88AB\u6307\u5B9A\u4E3A\u8D77\u59CB\u6807\u8BB0\u3002 MergeWizardStartPage.description = \u5206\u652F\u64CD\u4F5C\u540E\u5C06\u8981\u521B\u5EFA\u7684\u7248\u672C\u3002 ModuleSelectionPage.moduleIsProject = \u4F7F\u7528\u9879\u76EE\u540D\u79F0\u505A\u4E3A\u6587\u4EF6\u5939\u540D ModuleSelectionPage.specifyModule = \u4F7F\u7528\u6307\u5B9A\u7684\u6A21\u5757\u540D\uFF1A ModulesCategory.label = \u6A21\u5757 MoveRemoteFolderWizard.heading = \u79FB\u52A8\uFF0F\u91CD\u547D\u540D\u8FDC\u7A0B\u8D44\u6E90 MoveRemoteResourceWizardMainPage.invalidUrl = \u65E0\u6548\u7684 URL MoveRemoteResourceWizardMainPage.resourceName = \u8D44\u6E90\u7684\u76EE\u6807\u540D\uFF1A MoveRemoteResourceWizardMainPage.selectParentUrl = \u8F93\u5165\u6216\u9009\u62E9\u7236\u6587\u4EF6\u5939\u8DEF\u5F84\uFF1A MoveTagAction.errorMessage = \u521B\u5EFA\u6807\u8BB0\u65F6\u53D1\u751F\u9519\u8BEF MoveTagAction.message = \u9009\u62E9\u8981\u79FB\u52A8\u7684\u6807\u8BB0(&S)\uFF1A MoveTagAction.title = \u4F7F\u7528\u5DF2\u6709\u6807\u8BB0 NewLocationWizard.description = \u5C06\u65B0\u7684 SVN \u8D44\u6E90\u5E93\u6DFB\u52A0\u81F3\u201CSVN \u8D44\u6E90\u5E93\u201D\u89C6\u56FE\u3002 NewLocationWizard.exception = \u65E0\u6CD5\u521B\u5EFA\u8D44\u6E90\u5E93\u4F4D\u7F6E\u3002 NewLocationWizard.heading = \u6DFB\u52A0\u65B0\u7684 SVN \u8D44\u6E90\u5E93 NewLocationWizard.title = \u6DFB\u52A0 SVN \u8D44\u6E90\u5E93 NewLocationWizard.validationFailedText = \u9A8C\u8BC1\u4F4D\u7F6E\u65F6\u53D1\u751F\u9519\u8BEF\uFF1A\u201C{0}\u201D\r\n\r\n\u4ECD\u8981\u4FDD\u7559\u6B64\u4F4D\u7F6E\u5417\uFF1F NewLocationWizard.validationFailedTitle = \u65E0\u6CD5\u9A8C\u8BC1 NewRemoteFolderWizard.heading = \u521B\u5EFA\u65B0\u7684\u8FDC\u7A0B\u6587\u4EF6\u5939 NewRemoteFolderWizard.title = \u65B0\u5EFA\u8FDC\u7A0B\u6587\u4EF6\u5939 NewRemoteFolderWizardMainPage.folderName = \u6587\u4EF6\u5939\uFF1A NewRemoteFolderWizardMainPage.invalidUrl = \u65E0\u6548\u7684 URL NewRemoteFolderWizardMainPage.selectParentUrl = \u8F93\u5165\u6216\u9009\u62E9\u7236\u6587\u4EF6\u5939\u7684URL\uFF1A OpenActionGroup.openWith = \u6253\u5F00\u65B9\u5F0F(&H) OpenChangeSetAction_0 = [{0}] ({1}) OpenChangeSetAction_1 = SVN \u66F4\u6539 OpenCommitSetAction_20 = \u5728\u6BD4\u8F83\u7F16\u8F91\u5668\u4E2D\u6253\u5F00\u66F4\u6539 OpenCommitSetAction_21 = \u65E0\u6CD5\u786E\u5B9A\u6240\u9009\u8D44\u6E90\u7684\u8D44\u6E90\u5E93\u4F4D\u7F6E OpenLogEntryAction.deleted = \u9009\u62E9\u7684\u4FEE\u8BA2\u7248\u5DF2\u7ECF\u5220\u9664\uFF0C\u65E0\u6CD5\u6253\u5F00\u3002 OpenLogEntryAction.deletedTitle = \u8D44\u6E90\u5DF2\u5220\u9664 Open_the_Synchronize_view_on_the_project_2 = \u6253\u5F00\u9879\u76EE\u7684\u540C\u6B65\u89C6\u56FE PasswordPromptDialog.password = \u5BC6\u7801\uFF1A PasswordPromptDialog.repository = \u8D44\u6E90\u5E93\uFF1A PasswordPromptDialog.save = \u4FDD\u5B58\u5BC6\u7801\uFF1A PasswordPromptDialog.title = \u8F93\u5165\u7528\u6237\u540D\u548C\u5BC6\u7801 PasswordPromptDialog.username = \u7528\u6237\u540D\uFF1A PendingOperationsView.computeStatusJob = \u6B63\u5728\u8BA1\u7B97\u672A\u843D\u5B9E\u7684 SVN \u64CD\u4F5C PendingOperationsView.description = \u63CF\u8FF0 PendingOperationsView.errorComputingStatus = \u8BA1\u7B97\u672A\u843D\u5B9E\u7684 SVN \u64CD\u4F5C\u65F6\u53D1\u751F\u9519\u8BEF PendingOperationsView.hasBeenAdded = {0} \u5DF2\u6DFB\u52A0 PendingOperationsView.hasBeenCopied = {0} \u5DF2\u590D\u5236\uFF08\u4ECE {1}\uFF09 PendingOperationsView.hasBeenDeleted = {0} \u5DF2\u5220\u9664 PendingOperationsView.hasBeenModified = {0} \u5DF2\u4FEE\u6539 PendingOperationsView.infolder = \u6587\u4EF6\u5939\u5185 PendingOperationsView.missing = {0} \u4E0D\u5B58\u5728 PendingOperationsView.refresh = \u5237\u65B0\u89C6\u56FE PendingOperationsView.refreshLabel = \u5237\u65B0\u89C6\u56FE(&R) PendingOperationsView.resource = \u8D44\u6E90 PendingOperationsView.showAddedResources = \u663E\u793A\u6DFB\u52A0\u7684\u8D44\u6E90 PendingOperationsView.showDeletedResources = \u663E\u793A\u5220\u9664\u7684\u8D44\u6E90 PendingOperationsView.showModifiedResources = \u663E\u793A\u4FEE\u6539\u7684\u8D44\u6E90 PendingOperationsView.titleWithArgument = {0} \u4E2D\u672A\u843D\u5B9E\u7684 SVN \u64CD\u4F5C QuestionDialog.save = \u4FDD\u5B58\u5E94\u7B54\uFF1A RefreshRemoteProjectSelectionPage.noWorkingSet = \u4E0D\u4F7F\u7528\u5DE5\u4F5C\u96C6(&U) RefreshRemoteProjectSelectionPage.pageDescription = \u663E\u793A\u8981\u5237\u65B0\u6807\u8BB0\u7684\u8FDC\u7A0B\u9879\u76EE\u3002 RefreshRemoteProjectSelectionPage.pageTitle = \u9009\u62E9\u9879\u76EE RefreshRemoteProjectSelectionPage.selectRemoteProjects = \u8FD9\u4E2A\u5411\u5BFC\u5E2E\u52A9\u53D1\u73B0\u4E0E\u6B64\u6807\u8BB0\u5173\u8054\u7684\u4E00\u4E2A\u6216\u591A\u4E2A\u8FDC\u7A0B\u9879\u76EE\u3002\u9009\u4E2D\u8981\u5237\u65B0\u6807\u8BB0\u7684\u9879\u76EE(&C)\u3002 RefreshRemoteProjectSelectionPage.workingSet = \u9009\u62E9\u5DE5\u4F5C\u96C6\uFF08\u5339\u914D\u7684\u9879\u76EE\u5C06\u88AB\u9009\u4E2D\uFF09(&W)\uFF1A RefreshTagsAction.message = \u8D44\u6E90\u5E93\u201C{0}\u201D\u4E2D\u6709 {1} \u4E2A\u9879\u76EE\u8981\u5237\u65B0\uFF0C\u7EE7\u7EED\u5417\uFF1F RefreshTagsAction.title = \u5237\u65B0\u5206\u652F\u548C\u7248\u672C\u6807\u8BB0\uFF1F ReleaseCommentDialog.choosePrevious = \u9009\u62E9\u4EE5\u524D\u7684\u6CE8\u91CA(&P)\uFF1A ReleaseCommentDialog.clearTextArea = \u91CD\u7F6E\u6CE8\u91CA(&R) ReleaseCommentDialog.deselectAll = \u5168\u90E8\u4E0D\u9009(&E) ReleaseCommentDialog.enterComment = \u7F16\u8F91\u63D0\u4EA4\u6CE8\u91CA(&C)\uFF1A ReleaseCommentDialog.selectAll = \u5168\u90E8\u9009\u4E2D(&S) ReleaseCommentDialog.title = \u63D0\u4EA4 ReleaseCommentDialog.unaddedResources = \u9009\u4E2D\u7684\u8D44\u6E90\u5C06\u88AB\u6DFB\u52A0\u81F3 SVN \u7248\u672C\u63A7\u5236(&A)\u3002 RelocateWizard.heading = \u8D44\u6E90\u5E93 RelocateWizard.newUrl = \u8F93\u5165\u65B0\u7684 URL RelocateWizard.newUrlLabel = \u65B0 URL\uFF1A RelocateWizard.projects = \u5C06\u88AB\u91CD\u65B0\u5B9A\u4F4D\u7684\u9879\u76EE\uFF1A RelocateWizard.title = \u91CD\u65B0\u5B9A\u4F4D RelocateWizard.urlLabel = URL\uFF1A RelocateWizard.warning = \u786E\u5B9A\u8981\u91CD\u65B0\u5B9A\u4F4D\u8D44\u6E90\u5E93\u5417\uFF1F RelocateWizard.warningMessage1 = \u91CD\u65B0\u5B9A\u4F4D\u4EC5\u7528\u4E8E\u670D\u52A1\u5668 IP \u5730\u5740\u66F4\u6539\u3001\u901A\u8BAF\u534F\u8BAE\uFF08\u4F8B\u5982\uFF1Ahttp:// \u6539\u4E3A https://\uFF09\u66F4\u6539\u6216\u8005\u670D\u52A1\u5668\u8BBE\u7F6E\u66F4\u6539\u6240\u5BFC\u81F4\u7684\u8D44\u6E90\u5E93\u6839\u8DEF\u5F84\u66F4\u6539\u3002 RelocateWizard.warningMessage2 = \u8FD9\u662F\u4E00\u4E2A\u6781\u5C11\u4F1A\u4F7F\u7528\u5230\u7684\u64CD\u4F5C\u3002\u5982\u679C\u4F60\u60F3\u505A\u7684\u53EA\u662F\u8F6C\u79FB\u5230\u5176\u5B83\u7684 SVN \u8D44\u6E90\u5E93\u6216\u662F\u5F53\u524D\u8D44\u6E90\u5E93\u5B58\u4E2D\u5207\u6362\u5230\u5176\u5B83\u7684\u5206\u652F\u6216\u76EE\u5F55\uFF0C\u8BF7\u4E0D\u8981\u4F7F\u7528\u6B64\u64CD\u4F5C\u3002\r\n\r\n\u4E0D\u6070\u5F53\u7684\u4F7F\u7528\u91CD\u65B0\u5B9A\u4F4D\u64CD\u4F5C\u53EF\u80FD\u4F1A\u635F\u574F\u4F60\u7684\u5DE5\u4F5C\u590D\u672C\uFF01\u5982\u679C\u4F60\u4E0D\u80FD\u80AF\u5B9A\u5B83\u662F\u5426\u6070\u5F53\uFF0C\u8BF7\u67E5\u627E\u5E2E\u52A9\u6587\u6863\u3002 RemoteAnnotationStorage.1 = \u8BA1\u7B97\u8FDC\u7A0B\u8D44\u6E90 {0} \u7684\u6587\u4EF6\u7C7B\u578B\u65F6\u51FA\u9519 RemoteFileEditorInput.fullPathAndRevision = {0} {1} RemoteFolderElement.nameAndTag = {0} {1} RemoteFolderElement_fetchingRemoteMembers.message = \u6B63\u5728\u68C0\u7D22 {0} \u7684\u5B50\u4EE3 RemoteResourcePropertiesDialog.author = \u6700\u65B0\u4FEE\u6539\u8005\uFF1A RemoteResourcePropertiesDialog.date = \u6700\u65B0\u4FEE\u6539\u65E5\u671F\uFF1A RemoteResourcePropertiesDialog.info = \u4FE1\u606F\uFF1A RemoteResourcePropertiesDialog.lockComment = \u9501\u5B9A\u6CE8\u91CA\uFF1A RemoteResourcePropertiesDialog.lockCreated = \u9501\u5B9A\u521B\u5EFA\u65E5\u671F\uFF1A RemoteResourcePropertiesDialog.lockOwner = \u9501\u5B9A\u62E5\u6709\u8005\uFF1A RemoteResourcePropertiesDialog.properties = \u5C5E\u6027\uFF1A RemoteResourcePropertiesDialog.property = \u5C5E\u6027 RemoteResourcePropertiesDialog.revision = \u6700\u65B0\u4FEE\u8BA2\u7248\uFF1A RemoteResourcePropertiesDialog.title = \u5C5E\u6027 RemoteResourcePropertiesDialog.url = URL\uFF1A RemoteResourcePropertiesDialog.value = \u503C RemoteRootAction.Projects_in_the_local_workspace_are_shared_with__2 = \u672C\u5730\u5DE5\u4F5C\u7A7A\u95F4\u4E2D\u7684\u9879\u76EE\u5DF2\u7ECF\u5171\u4EAB\u5728 {0}\uFF0C\u53EA\u6709\u6240\u6709\u672C\u5730\u9879\u76EE\u90FD\u4ECE\u6B64\u4F4D\u7F6E\u65AD\u5F00\u8FDE\u63A5\u540E\u624D\u80FD\u5E9F\u5F03\u6B64\u4F4D\u7F6E\u3002 RemoteRootAction.The_projects_that_are_shared_with_the_above_repository_are__4 = \u5171\u4EAB\u5230\u4E0A\u8FF0\u8D44\u6E90\u5E93\u7684\u9879\u76EE\uFF1A RemoteRootAction.Unable_to_Discard_Location_1 = \u65E0\u6CD5\u5E9F\u5F03\u4F4D\u7F6E RemoteRootAction.label = \u5E9F\u5F03\u4F4D\u7F6E RemoteViewPart.workingSetToolTip = \u5DE5\u4F5C\u96C6\uFF1A{0} RemoveRootAction.removeRoot = \u5E9F\u5F03\u4F4D\u7F6E\u65F6\u53D1\u751F\u9519\u8BEF RemoveRootAction.removeRoot_3 = RemoveRootAction.removeRoot ReplaceOperation.0 = \u6B63\u5728\u66FF\u6362 {0} ReplaceOperation.taskName = SVN \u66FF\u6362 ReplaceWithAction.calculatingDirtyResources = \u6B63\u5728\u67E5\u627E\u4F20\u51FA\u66F4\u6539... ReplaceWithAction.confirmOverwrite = \u786E\u8BA4\u8986\u76D6 ReplaceWithAction.localChanges = {0} \u5177\u6709\u5C06\u88AB\u8986\u76D6\u7684\u672C\u5730\u66F4\u6539\u3002\u8981\u7EE7\u7EED\u5417\uFF1F ReplaceWithLatestAction.multipleBranches = \u5206\u652F\u4E2D\u7684\u6700\u65B0\u7248\u672C(&L) ReplaceWithLatestAction.multipleTags = \u8D44\u6E90\u5E93\u4E2D\u7684\u6700\u65B0\u7248\u672C(&L) ReplaceWithLatestAction.multipleVersions = \u8D44\u6E90\u5E93\u4E2D\u7684\u7248\u672C(&V) ReplaceWithLatestAction.singleBranch = \u5206\u652F {0} \u7684\u6700\u65B0\u7248\u672C(&L) ReplaceWithLatestAction.singleHEAD = {0} \u7684\u6700\u65B0\u7248\u672C(&L) ReplaceWithLatestAction.singleVersion = \u7248\u672C {0} (&V) ReplaceWithRemoteAction.problemMessage = \u7528\u8D44\u6E90\u5E93\u4E2D\u6700\u65B0\u7248\u672C\u66FF\u6362\u65F6\u53D1\u751F\u9519\u8BEF ReplaceWithRemoteAction.replacing = \u6B63\u5728\u66FF\u6362 ReplaceWithRevisionAction.replace = \u66FF\u6362(&R) ReplaceWithRevisionAction.title = \u66FF\u6362\u4FEE\u8BA2\u7248 ReplaceWithTagAction.message = \u66FF\u6362\u5206\u652F\uFF0F\u7248\u672C ReplaceWithTagAction.mixingTags = \u60A8\u6B63\u5728\u4E00\u4E2A\u9879\u76EE\u4E2D\u6DF7\u7528\u6807\u8BB0\u3002\u8FD9\u53EF\u80FD\u4F1A\u9020\u6210\u4E0E\u8D44\u6E90\u5E93\u5B58\u540C\u6B65\u65F6\u53D1\u751F\u6DF7\u4E71\u3002\u8D44\u6E90\u5728\u540C\u6B65\u65F6\u4F1A\u901A\r\n\u8FC7\u6807\u8BB0\u4FE1\u606F\u6765\u51B3\u5B9A\u7528\u6765\u4E0E\u672C\u5730\u8D44\u6E90\u505A\u6BD4\u8F83\u7684\u8FDC\u7A0B\u8D44\u6E90\u3002\u4F8B\u5982\uFF0C\u5982\u679C\u4F7F\u7528\u7248\u672C\u6807\u8BB0\uFF0C\u90A3\u8FD9\u4E9B\u52A0\r\n\u4E0A\u6807\u8BB0\u7684\u8D44\u6E90\u5C06\u6C38\u8FDC\u4E0D\u4F1A\u53D1\u751F\u66F4\u6539\uFF0C\u56E0\u6B64\uFF0C\u60A8\u5C06\u4E0D\u4F1A\u770B\u5230\u4EFB\u4F55\u5728 HEAD \uFF08\u6216\u5176\u5B83\u5206\u652F\uFF09\u4E0A\u53D1\r\n\u751F\u7684\u66F4\u6539\uFF0C\u786E\u5B9A\u8981\u7EE7\u7EED\u5417\uFF1F ReplaceWithTagAction.replace = \u66FF\u6362\u6807\u8BB0\u65F6\u51FA\u9519 ReplaceWithTagAction.replacing = \u6B63\u5728\u66FF\u6362\u6807\u8BB0 {0} RepositoriesView.CannotGetRevision = \u65E0\u6CD5\u83B7\u53D6\u4FEE\u8BA2\u7248 RepositoriesView.NItemsSelected = {0} \u9879\u5DF2\u9009\u4E2D RepositoriesView.OneItemSelected = 1 \u9879\u5DF2\u9009\u4E2D RepositoriesView.ResourceInRepository = {1} \u5185\u7684 {0} RepositoriesView.collapseAll = \u5168\u90E8\u6298\u53E0 RepositoriesView.collapseAllTooltip = \u5168\u90E8\u6298\u53E0 RepositoriesView.deselectWorkingSet = \u4E0D\u9009\u4E2D\u5DE5\u4F5C\u96C6 RepositoriesView.editWorkingSet = \u7F16\u8F91\u5F53\u524D\u5DE5\u4F5C\u96C6... RepositoriesView.new = \u8D44\u6E90\u5E93\u4F4D\u7F6E(&R)... RepositoriesView.newAnonSVN = \u533F\u540D\u8D44\u6E90\u5E93\u4F4D\u7F6E dev.eclipse.org... RepositoriesView.newSubmenu = \u65B0\u5EFA(&N) RepositoriesView.newWorkingSet = \u9009\u62E9\u5DE5\u4F5C\u96C6... RepositoriesView.refresh = \u5237\u65B0\u89C6\u56FE(&R) RepositoriesView.refreshPopup = \u5237\u65B0 RepositoriesView.refreshTooltip = \u5237\u65B0\u89C6\u56FE RepositoriesView.workingSetMenuItem = {0} {1} RepositoriesViewContentHandler.errorCreatingRoot = \u5C1D\u8BD5\u521B\u5EFA\u8D44\u6E90\u5E93\u201C{0}\u201D\u65F6\u53D1\u751F\u9519\u8BEF\u3002 RepositoriesViewContentHandler.missingAttribute = \u8BFB\u53D6\u8D44\u6E90\u5E93\u89C6\u56FE\u914D\u7F6E\u6587\u4EF6\u65F6\u53D1\u751F\u9519\u8BEF\uFF1A\u6807\u7B7E\u201C{0}\u201D\u7684\u5FC5\u9700\u5C5E\u6027\u201C{1}\u201D\u4E0D\u5B58\u5728\u3002 RepositoriesViewContentHandler.unmatchedTag = \u8BFB\u53D6\u8D44\u6E90\u5E93\u89C6\u56FE\u914D\u7F6E\u6587\u4EF6\u65F6\u53D1\u751F\u9519\u8BEF\uFF1A\u6807\u7B7E\u201C{0}\u201D\u6CA1\u6709\u5BF9\u5E94\u7684\u7ED3\u675F\u6807\u7B7E\u3002 RepositoryDialog.description = \u4E3A\u60A8\u7684\u9879\u76EE\u9009\u62E9\u8981\u8FDE\u63A5\u81F3\u7684\u8D44\u6E90\u5E93 RepositoryDialog.getRepository = \u9009\u62E9\u8D44\u6E90\u5E93 RepositoryManager.addErrorNotAssociated = \u90E8\u5206\u8D44\u6E90\u6CA1\u6709\u4E0E\u4E00\u4E2A\u5171\u4EAB\u7684\u9879\u76EE\u76F8\u5173\u8054 RepositoryManager.adding = \u6B63\u5728\u6DFB\u52A0 RepositoryManager.committing = \u6B63\u5728\u63D0\u4EA4 RepositoryManager.deleting = \u6B63\u5728\u5220\u9664 RepositoryManager.getting = \u6B63\u5728\u83B7\u53D6 RepositoryManager.ioException = \u8BFB\u53D6\u72B6\u6001\u6587\u4EF6\u65F6\u53D1\u751F I/O \u5F02\u5E38\u3002 RepositoryManager.parsingProblem = \u89E3\u6790\u6587\u4EF6\u201C{0}\u201D\u65F6\u53D1\u751F\u9519\u8BEF\u3002 RepositoryManager.rename = \u91CD\u547D\u540D\u72B6\u6001\u6587\u4EF6\u65F6\u53D1\u751F I/O \u5F02\u5E38\u3002 RepositoryManager.save = \u4FDD\u5B58\u72B6\u6001\u6587\u4EF6\u65F6\u53D1\u751F I/O \u5F02\u5E38\u3002 RepositoryManager.updating = \u6B63\u5728\u66F4\u65B0 RepositoryRoot.folderInfoMissing = \u672C\u5730\u6587\u4EF6\u5939\u201C{0}\u201D\u6CA1\u6709\u6070\u5F53\u7684\u6620\u5C04\u5230\u8FDC\u7A0B\u6587\u4EF6\u5939\u3002 RepositorySelectionPage.description = \u8FD9\u4E2A\u5411\u5BFC\u5C06\u5E2E\u52A9\u60A8\u5C06\u60A8\u7684\u6587\u4EF6\u5171\u4EAB\u5230 SVN \u8D44\u6E90\u5E93\u3002\u60A8\u7684\u9879\u76EE\u5C06\u4F1A\u81EA\u52A8\u5BFC\u5165\u5230 SVN \u8D44\u6E90\u5E93\u4E2D\uFF0C\u540C\u65F6\u4F1A\u6253\u5F00\u540C\u6B65\u89C6\u56FE\u4EE5\u5141\u8BB8\u60A8\u63D0\u4EA4\u60A8\u7684\u8D44\u6E90\u3002 RepositorySelectionPage.useExisting = \u4F7F\u7528\u5DF2\u6709\u8D44\u6E90\u5E93\u4F4D\u7F6E(&U)\uFF1A RepositorySelectionPage.useNew = \u521B\u5EFA\u65B0\u7684\u8D44\u6E90\u5E93\u4F4D\u7F6E(&C) ResolveAction.error = \u89E3\u51B3\u51B2\u7A81\u5931\u8D25 ResolveOperation.0 = \u6807\u8BB0 {0} \u4E3A\u89E3\u51B3 ResolveOperation.taskName = \u6807\u8BB0\u4E3A\u89E3\u51B3 ResourcePropertiesPage.checkedIn = \u5BFC\u5165 ResourcePropertiesPage.checkedOut = \u53D6\u51FA ResourcePropertiesPage.error = \u9519\u8BEF ResourcePropertiesPage.notManaged = \u4E0D\u53D7 SVN \u7BA1\u7406 ResourcePropertiesPage.notVersioned = \u672A\u52A0\u5165\u7248\u672C\u63A7\u5236 ResourcePropertiesPage.state = \u72B6\u6001 ResourcePropertiesPage.status = \u72B6\u6001 ResourcePropertiesPage.versioned = \u5DF2\u52A0\u5165\u7248\u672C\u63A7\u5236 RestoreFromRepositoryAction.noFilesMessage = \u5728\u8D44\u6E90\u5E93\u6587\u4EF6\u5939\u201C{0}\u201D\u4E2D\u627E\u4E0D\u5230\u5220\u9664\u7684\u6587\u4EF6\u3002 RestoreFromRepositoryAction.noFilesTitle = \u627E\u4E0D\u5230\u5220\u9664\u7684\u6587\u4EF6 RestoreFromRepositoryFileSelectionPage.emptyRevisionPane = \u6240\u9009\u6587\u4EF6\u7684\u8FDC\u7A0B\u4FEE\u8BA2\u7248\uFF1A RestoreFromRepositoryFileSelectionPage.fileContentPaneTitle = \u201C{2}\u201D\u5185\u7684 {0} {1} RestoreFromRepositoryFileSelectionPage.fileExists = \u6587\u4EF6\u201C{0}\u201D\u5DF2\u5B58\u5728\u3002 RestoreFromRepositoryFileSelectionPage.fileSelectionPaneTitle = {0} - \u9009\u62E9\u8981\u8FD8\u539F\u7684\u6587\u4EF6\uFF1A RestoreFromRepositoryFileSelectionPage.fileToRestore = {0} \uFF08{1} \u5C06\u88AB\u8FD8\u539F\uFF09 RestoreFromRepositoryFileSelectionPage.revisionSelectionPaneTitle = {0} - \u9009\u62E9\u8981\u8FD8\u539F\u7684\u4FEE\u8BA2\u7248\uFF1A RestoreFromRepositoryWizard.fileSelectionPageDescription = \u4E3A\u6BCF\u4E2A\u6587\u4EF6\u9009\u62E9\u8981\u8FD8\u539F\u7684\u4FEE\u8BA2\u7248\u3002 RestoreFromRepositoryWizard.fileSelectionPageTitle = \u4ECE\u8D44\u6E90\u5E93\u8FD8\u539F RevertAction.error = \u56DE\u590D\u5931\u8D25 RevertDialog.multiple = \u9009\u62E9\u4E86\u591A\u4E2A\u8DEF\u5F84 RevertDialog.resources = \u9009\u4E2D\u7684\u8D44\u6E90\u5C06\u88AB\u56DE\u590D\u3002 RevertDialog.title = \u56DE\u590D RevertDialog.url = URL\uFF1A RevertOperation.0 = \u56DE\u590D\u66F4\u6539\u81F3 {0} RevertOperation.taskName = \u56DE\u590D\u66F4\u6539 Run_update_4 = \u8FD0\u884C\u66F4\u65B0 S&how_is_added_27 = \u6DFB\u52A0\u7684\u8D44\u6E90(&C) SSHPromptDialog.authentication = \u8BA4\u8BC1 SSHPromptDialog.browse = \u6D4F\u89C8... SSHPromptDialog.invalidPortMessage = \u8BF7\u8F93\u5165\u6709\u6548\u7684\u7AEF\u53E3\u53F7\u3002 SSHPromptDialog.invalidPortTitle = \u7AEF\u53E3\u53F7\u65E0\u6548 SSHPromptDialog.keyauth = \u4F7F\u7528\u79C1\u6709\u5BC6\u94A5\u8BA4\u8BC1 SSHPromptDialog.keyfile = \u5BC6\u94A5\u6587\u4EF6\uFF1A SSHPromptDialog.passphrase = \u5BC6\u7801\uFF1A SSHPromptDialog.passwordauth = \u4F7F\u7528\u5BC6\u7801\u8BA4\u8BC1 SSHPromptDialog.port = \u7AEF\u53E3\u53F7\uFF1A SSHPromptDialog.save = \u4FDD\u5B58\u4FE1\u606F SSHPromptDialog.title = \u8F93\u5165 SSH \u8BC1\u4E66 SSLPromptDialog.certificate = \u5BA2\u6237\u8BC1\u4E66 SSLPromptDialog.title = \u63D0\u4F9B SSL \u5BA2\u6237\u8BC1\u4E66 SVNAction.disabledMessage = \u4E0D\u5141\u8BB8\u6240\u9009\u62E9\u7684\u64CD\u4F5C\u3002 SVNAction.disabledTitle = \u4FE1\u606F SVNAction.errorTitle = \u53D1\u751F\u9519\u8BEF SVNAction.mixingTags = SVNAction.mixingTagsTitle = \u786E\u8BA4\u6DF7\u5408\u6807\u8BB0 SVNAction.multipleProblemsMessage = \u53D1\u751F\u4E86\u591A\u4E2A\u95EE\u9898\uFF1A SVNAction.refreshMultipleQuestion = {0} \u8981\u5237\u65B0\u5305\u542B\u9009\u62E9\u8D44\u6E90\u7684\u9879\u76EE\u5417\uFF1F SVNAction.refreshQuestion = {0} \u8981\u5237\u65B0\u9879\u76EE\u201C{0}\u201D\u5417\uFF1F SVNAction.refreshTitle = \u5237\u65B0\u9879\u76EE\uFF1F SVNAction.warningTitle = \u53D1\u751F\u8B66\u544A SVNAddResolutionGenerator.Add_Resource_and_Children_to_SVN_2 = \u5C06\u8D44\u6E90\u53CA\u5176\u5B50\u4EE3\u6DFB\u52A0\u81F3 SVN SVNAddResolutionGenerator.Add_Resource_to_SVN_1 = \u5C06\u8D44\u6E90\u6DFB\u52A0\u81F3 SVN SVNAddResolutionGenerator.Add_to_.svnignore_3 = \u6DFB\u52A0\u81F3 .svnSVNignore SVNAnnotateBlock.line = \u884C SVNAnnotateBlock.lines = \u884C SVNAnnotateBlock.userRevision = {0} {1} ({2} {3}) SVNAnnotateView.showFileAnnotation = SVN \u6CE8\u91CA - {0} SVNAnnotateView.viewInstructions = \u6B64\u89C6\u56FE\u663E\u793A SVN \u4E2D\u7684\u6587\u4EF6\u7684\u6CE8\u91CA\u3002\u9009\u62E9\u6587\u4EF6\uFF0C\u7136\u540E\u4ECE\u4E0A\u4E0B\u6587\u83DC\u5355\u4E2D\u9009\u62E9\u201C\u5C0F\u7EC4\u201D->\u201C\u663E\u793A\u6CE8\u91CA\u201D\u3002 SVNCatchupReleaseViewer.No_workspace_file_1 = \u65E0\u5DE5\u4F5C\u7A7A\u95F4\u6587\u4EF6 SVNCatchupReleaseViewer.Select_&Outgoing_Additions_1 = \u9009\u62E9\u65B0\u8D44\u6E90(&U) SVNCatchupReleaseViewer.addAction = \u6DFB\u52A0\u81F3\u7248\u672C\u63A7\u5236(&A) SVNCatchupReleaseViewer.commit = \u63D0\u4EA4(&C)... SVNCatchupReleaseViewer.commonFile = \u516C\u5171\u6587\u4EF6\uFF1A{0} SVNCatchupReleaseViewer.commonFileRevision = \u516C\u5171\u6587\u4EF6\uFF1A{0} {1} SVNCatchupReleaseViewer.confirmMerge = \u6807\u8BB0\u4E3A\u5408\u5E76(&G) SVNCatchupReleaseViewer.fileDecoration = {0} \uFF08{1}\uFF09 SVNCatchupReleaseViewer.folderDecoration = {0} {1} SVNCatchupReleaseViewer.forceCommit = \u8986\u76D6\u548C\u63D0\u4EA4(&M)... SVNCatchupReleaseViewer.forceUpdate = \u8986\u76D6\u548C\u66F4\u65B0(&P) SVNCatchupReleaseViewer.ignore = \u6DFB\u52A0\u81F3 svn:ignore (&D) SVNCatchupReleaseViewer.labelWithSyncKind = {0} {1} SVNCatchupReleaseViewer.mergeUpdate = \u5408\u5E76\u66F4\u6539\u81F3\u672C\u5730\u590D\u672C(&M) SVNCatchupReleaseViewer.noCommonFile = \u65E0\u516C\u5171\u6587\u4EF6 SVNCatchupReleaseViewer.noRepositoryFile = \u65E0\u8D44\u6E90\u5E93\u6587\u4EF6 SVNCatchupReleaseViewer.repositoryFile = \u8D44\u6E90\u5E93\u6587\u4EF6\uFF1A{0} SVNCatchupReleaseViewer.repositoryFileRevision = \u8D44\u6E90\u5E93\u6587\u4EF6\uFF1A{0} {1} [{2}] SVNCatchupReleaseViewer.showInHistory = \u5728\u8D44\u6E90\u5386\u53F2\u8BB0\u5F55\u4E2D\u663E\u793A(&R) SVNCatchupReleaseViewer.update = \u4ECE\u8D44\u6E90\u5E93\u66F4\u65B0(&U) SVNCatchupReleaseViewer.workspaceFile = \u5DE5\u4F5C\u7A7A\u95F4\u6587\u4EF6\uFF1A{0} SVNCompareEditorInput.branchLabel = <\u5206\u652F - {0}> SVNCompareEditorInput.comparing = \u6B63\u5728\u6BD4\u8F83... SVNCompareEditorInput.different = \u4E0D\u80FD\u6BD4\u8F83\u4E0D\u540C\u7C7B\u578B\u7684\u8D44\u6E90\u3002 SVNCompareEditorInput.headLabel = SVNCompareEditorInput.inBranch = {0} \u5185\u7684 {1} SVNCompareEditorInput.inHead = HEAD \u5185\u7684 {0} SVNCompareEditorInput.noRepositoryFile = \u65E0\u8D44\u6E90\u5E93\u6587\u4EF6 SVNCompareEditorInput.noWorkspaceFile = \u65E0\u5DE5\u4F5C\u7A7A\u95F4\u6587\u4EF6 SVNCompareEditorInput.repository = \u8D44\u6E90\u5E93\uFF1A{0} {1} SVNCompareEditorInput.titleAncestor = {0} {1}-{2} \u548C {3} \u7684\u6BD4\u8F83 SVNCompareEditorInput.titleNoAncestor = {0} {1} \u548C {2} \u7684\u6BD4\u8F83 SVNCompareEditorInput.titleNoAncestorDifferent = {0} {1} \u548C {2} {3} \u7684\u6BD4\u8F83 SVNCompareEditorInput.workspace = \u5DE5\u4F5C\u7A7A\u95F4\uFF1A{0} SVNCompareEditorInput.workspaceLabel = <\u5DE5\u4F5C\u7A7A\u95F4> SVNCompareRevisionsInput.addToWorkspace = \u83B7\u53D6 SVNCompareRevisionsInput.compareResourceAndVersions = {0} <\u5DE5\u4F5C\u7A7A\u95F4> \u548C \u7248\u672C\u7684\u6BD4\u8F83 SVNCompareRevisionsInput.errorReplacingMessage = \u8D44\u6E90\u65E0\u6CD5\u52A0\u8F7D\u3002\u53EF\u80FD\u53D1\u751F\u4E86\u901A\u8BAF\u9519\u8BEF\uFF0C\u6216\u8005\u53EF\u80FD\u8D44\u6E90\u5728\u670D\u52A1\u5668\u4E0A\u4E0D\u5B58\u5728\uFF0C\u6216\u8005\u53EF\u80FD\u60A8\u6CA1\u6709\u8BBF\u95EE\u5B83\u4EEC\u7684\u6743\u9650\u3002 SVNCompareRevisionsInput.errorReplacingTitle = \u4E0D\u80FD\u66FF\u6362 SVNCompareRevisionsInput.repository = \u8D44\u6E90\u5E93\u6587\u4EF6\uFF1A{0} SVNCompareRevisionsInput.structureCompare = \u7ED3\u6784\u6BD4\u8F83 SVNCompareRevisionsInput.truncate = {0}[...] SVNCompareRevisionsInput.workspace = \u5DE5\u4F5C\u7A7A\u95F4\u6587\u4EF6\uFF1A{0} SVNConflicts = \u51B2\u7A81\u7684 SVN \u66F4\u65B0 SVNDecorator.fileDecorationNoTag = {0} [{1}] SVNDecorator.fileDecorationWithTag = {0} [{1}\uFF1A{2}] SVNDecorator.folderDecoration = {0} [{1}] SVNDecorator.projectDecoration = {0} [{1}] SVNDecorator.projectDecorationWithTag = {0} [{1} {2}] SVNDecoratorPreferencesPage.AddVariables = \u6DFB\u52A0\u53D8\u91CF SVNDecoratorPreferencesPage.addVariables = \u6DFB\u52A0\u53D8\u91CF(&V)... SVNDecoratorPreferencesPage.authorVariable = \u4F5C\u8005\u540D\u79F0 SVNDecoratorPreferencesPage.colorsAndFontsLink = \u70B9\u51FB ''{0}'' \u53EF\u4EE5\u914D\u7F6E\u5B57\u4F53\u548C\u989C\u8272\u4FEE\u9970\u3002 SVNDecoratorPreferencesPage.computeDeep = \u8BA1\u7B97\u6587\u4EF6\u5939\u7684\u6DF1\u5EA6\u4F20\u51FA\u72B6\u6001(&C)\uFF08\u7981\u7528\u6B64\u9879\u5C06\u6539\u5584\u4FEE\u9970\u7B26\u6027\u80FD\uFF09 SVNDecoratorPreferencesPage.dateVariable = \u6700\u65B0\u66F4\u6539 SVNDecoratorPreferencesPage.description = SVN \u6807\u7B7E\u4FEE\u9970\u8BBE\u7F6E\uFF1A SVNDecoratorPreferencesPage.externalResources = \u6807\u793A\u5916\u90E8\u8D44\u6E90(&E) SVNDecoratorPreferencesPage.fileFormat = \u6587\u4EF6\u683C\u5F0F(&F)\uFF1A SVNDecoratorPreferencesPage.flagAddedVariable = \u6307\u793A\u5DF2\u5C06\u8D44\u6E90\u6DFB\u52A0\u81F3\u670D\u52A1\u5668\u7684\u6807\u5FD7 SVNDecoratorPreferencesPage.flagDirtyVariable = \u6307\u793A\u6587\u4EF6\u5E26\u6709\u4F20\u51FA\u66F4\u6539\u7684\u6807\u5FD7 SVNDecoratorPreferencesPage.flagExternalVariable = \u6307\u793A\u5916\u90E8\u6587\u4EF6\u5939\u7684\u6807\u5FD7 SVNDecoratorPreferencesPage.folderFormat = \u6587\u4EF6\u5939\u4FEE\u9970(&O)\uFF1A SVNDecoratorPreferencesPage.generalDescription = \u8BBE\u7F6E SVN \u4FEE\u9970\u7B26\u7684\u5E38\u89C4\u5C5E\u6027\uFF1A SVNDecoratorPreferencesPage.generalTabFolder = \u5E38\u89C4(&G) SVNDecoratorPreferencesPage.iconDescription = \u9009\u62E9\u8981\u6DFB\u52A0\u56FE\u6807\u4FEE\u9970\u7684 SVN \u8D44\u6E90\u72B6\u6001\uFF1A SVNDecoratorPreferencesPage.labelDecorationAdded = \u6DFB\u52A0\u4FEE\u9970(&T)\uFF1A SVNDecoratorPreferencesPage.labelDecorationExternal = \u5916\u90E8\u4FEE\u9970(&E)\uFF1A SVNDecoratorPreferencesPage.labelDecorationOutgoing = \u4F20\u51FA\u4FEE\u9970(&L)\uFF1A SVNDecoratorPreferencesPage.labelDecorationsLink = \u70B9\u51FB''{0}''\u4EE5\u542F\u7528 SVN \u4FEE\u9970\u3002 SVNDecoratorPreferencesPage.nameResourceVariable = \u6240\u4FEE\u9970\u8D44\u6E90\u7684\u540D\u79F0 SVNDecoratorPreferencesPage.newResources = \u65B0\u5EFA\u8D44\u6E90(&N) SVNDecoratorPreferencesPage.preview = \u9884\u89C8\uFF1A SVNDecoratorPreferencesPage.projectFormat = \u9879\u76EE\u4FEE\u9970(&P)\uFF1A SVNDecoratorPreferencesPage.remoteLocationLabel = \u8FDC\u7A0B\u8D44\u6E90\u5E93\u6807\u7B7E SVNDecoratorPreferencesPage.remoteLocationVariable = \u8FDC\u7A0B\u8D44\u6E90\u5E93\u8DEF\u5F84 SVNDecoratorPreferencesPage.remoteLocationVariableShort = \u8D44\u6E90\u5E93\u76F8\u5BF9\u8DEF\u5F84 SVNDecoratorPreferencesPage.revisionResourceVariable = \u5DF2\u88C5\u5165\u5DE5\u4F5C\u7A7A\u95F4\u7684\u4E0A\u4E00\u4FEE\u8BA2 SVNDecoratorPreferencesPage.selectFormats = \u9009\u62E9\u6587\u4EF6\u3001\u76EE\u5F55\u3001\u9879\u76EE\u7684\u4FEE\u9970\u7B26\u683C\u5F0F\uFF1A SVNDecoratorPreferencesPage.selectVariablesToAdd = \u9009\u62E9\u8981\u6DFB\u52A0\u81F3\u4FEE\u9970\u683C\u5F0F\u7684\u53D8\u91CF(&V)\uFF1A SVNDecoratorPreferencesPage.showSyncInfoInLabel = \u5728\u8D44\u6E90\u7684\u4FEE\u9970\u7B26\u4E2D\u663E\u793A\u6240\u6709\u540C\u6B65\u4FE1\u606F SVNDecoratorPreferencesPage.synchronizeDescription = \u4E3A\u540C\u6B65\u89C6\u56FE\u8BBE\u7F6E SVN \u4FEE\u9970\u7B26\u7684\u5C5E\u6027\uFF1A SVNDecoratorPreferencesPage.synchronizeTabFolder = \u540C\u6B65\u89C6\u56FE(&Y) SVNDecoratorPreferencesPage.textLabel = \u6587\u672C\u4FEE\u9970(&E) SVNDecoratorPreferencesPage.useFontDecorators = \u542F\u7528\u5B57\u4F53\uFF0F\u989C\u8272\u4FEE\u9970\uFF08\u7981\u7528\u6B64\u9879\u53EF\u4EE5\u6539\u5584\u4FEE\u9970\u7684\u6027\u80FD\uFF09 SVNFilePropertiesPage.baseRevision = \u57FA\u672C\u4FEE\u8BA2\u7248\uFF1A SVNFilePropertiesPage.baseTimestamp = \u57FA\u672C\u65F6\u95F4\u6233\uFF1A SVNFilePropertiesPage.date = {0}\uFF08\u65E5\u671F\uFF09 SVNFilePropertiesPage.dirty = \u5931\u6548\uFF1A SVNFilePropertiesPage.error = \u521B\u5EFA\u6B64\u9875\u9762\u65F6\u53D1\u751F\u9519\u8BEF\u3002 SVNFilePropertiesPage.ignored = \u6587\u4EF6\u5DF2\u88AB SVN \u5FFD\u7565\u3002 SVNFilePropertiesPage.isAdded = \u6587\u4EF6\u5DF2\u6DFB\u52A0\u81F3 SVN \u63A7\u5236\u4F46\u8FD8\u6CA1\u6709\u63D0\u4EA4\u3002 SVNFilePropertiesPage.modified = \u5DF2\u4FEE\u6539\uFF1A SVNFilePropertiesPage.none = \uFF08\u65E0\uFF09 SVNFilePropertiesPage.notAvailable = \u4E0D\u53EF\u7528 SVNFilePropertiesPage.notManaged = \u6587\u4EF6\u672A\u88AB SVN \u7BA1\u7406\u3002 SVNFilePropertiesPage.permissions = \u8BB8\u53EF\uFF1A SVNFilePropertiesPage.version = {0}\uFF08\u7248\u672C\uFF09 SVNFolderPropertiesPage.disconnect = \u65AD\u5F00\u8FDE\u63A5(&D)... SVNFolderPropertiesPage.disconnectQuestion = \u5C06\u6587\u4EF6\u5939\u4E0E SVN \u63A7\u5236\u65AD\u5F00\u8FDE\u63A5\u4F1A\u540C\u5220\u9664\u6587\u4EF6\u5939\u7684 SVN \u540C\u6B65\u4FE1\u606F\u3002\u786E\u5B9A\u8981\u65AD\u5F00\u8FDE\u63A5\u5417\uFF1F SVNFolderPropertiesPage.disconnectTitle = \u4E0E\u6587\u4EF6\u5939\u65AD\u5F00\u8FDE\u63A5\u5417\uFF1F SVNFolderPropertiesPage.ignored = \u6587\u4EF6\u5939\u5DF2\u88AB SVN \u5FFD\u7565\u3002 SVNFolderPropertiesPage.notManaged = \u6587\u4EF6\u5939\u672A\u88AB SVN \u7BA1\u7406\u3002 SVNFolderPropertiesPage.repository = \u8D44\u6E90\u5E93\u8DEF\u5F84\uFF1A SVNFolderPropertiesPage.root = \u8D44\u6E90\u5E93\u6839\u76EE\u5F55\uFF1A SVNFolderPropertiesPage.static = \u9759\u6001\uFF1A SVNLocalCompareEditorInput.title = SVN \u6BD4\u8F83 [{0}] SVNOperation.0 = {0}\uFF0F{1} \u4E2A\u64CD\u4F5C\u53D1\u751F\u9519\u8BEF\u3002 SVNOperationCancelledException.operationCancelled = \u64CD\u4F5C\u5DF2\u53D6\u6D88 SVNPreferencePage.&Never_2 = \u4ECE\u4E0D(&N) SVNPreferencePage.&Prompt_3 = \u63D0\u793A(&R) SVNPreferencePage.Auto-&save_4 = \u81EA\u52A8\u4FDD\u5B58(&A) SVNPreferencePage.Save_dirty_editors_before_SVN_operations_1 = \u5728\u6267\u884C SVN \u64CD\u4F5C\u4E4B\u524D\u81EA\u52A8\u4FDD\u5B58\u5DF2\u53D1\u751F\u4FEE\u6539\u7684\u7F16\u8F91\u5668 SVNPreferencePage.browseDirectory = \u6D4F\u89C8... SVNPreferencePage.calculateDeepDecoration = \u8BA1\u7B97\u6DF1\u5EA6 SVN \u4FEE\u9970\u7B26\uFF08\u6162\uFF09 SVNPreferencePage.commandLineNotAvailable = \u547D\u4EE4\u884C\u63A5\u53E3\u4E0D\u53EF\u7528\u3002\u8BF7\u68C0\u67E5\u73AF\u5883\u53D8\u91CF\u8BBE\u7F6E\u3002 SVNPreferencePage.compressionLevel = \u538B\u7F29\u7EA7\u522B(&L)\uFF1A SVNPreferencePage.configurationLocation = \u914D\u7F6E\u4F4D\u7F6E\uFF1A SVNPreferencePage.considerContentsInCompare = \u6BD4\u8F83\u65F6\u8003\u8651\u6587\u4EF6\u5185\u5BB9(&S) SVNPreferencePage.defaultTextKSubst = \u7F3A\u7701\u5173\u952E\u5B57\u7F6E\u6362(&K)\uFF1A SVNPreferencePage.description = \u5E38\u89C4 SVN \u8BBE\u7F6E\uFF1A SVNPreferencePage.determineVersionEnabled = \u9996\u6B21\u8FDE\u63A5\u65F6\u9A8C\u8BC1\u670D\u52A1\u5668\u7248\u672C\u517C\u5BB9\u6027(&V) SVNPreferencePage.fetchChangePathOnDemand = \u9700\u8981\u65F6\u5217\u4E3E\u53D7\u5F71\u54CD\u7684\u8DEF\u5F84 SVNPreferencePage.isNotSvnConfigDir = \u6240\u9009\u7684\u76EE\u5F55\u4E0D\u662F SVN \u914D\u7F6E\u76EE\u5F55\u3002 SVNPreferencePage.javaSvnNotAvailable = SVNKit\u3000\u63A5\u53E3\u4E0D\u53EF\u7528\u3002\u8BF7\u68C0\u67E5\u73AF\u5883\u53D8\u91CF\u8BBE\u7F6E\u3002 SVNPreferencePage.javahlNotAvailable = JavaHL \u63A5\u53E3\u4E0D\u53EF\u7528\u3002\u68C0\u67E5\u73AF\u5883\u53D8\u91CF\u8BBE\u7F6E\u3002 SVNPreferencePage.javasvn = SVNKit\uFF08\u7EAFJava\uFF09 SVNPreferencePage.level0 = 0\uFF08\u7981\u7528\uFF09 SVNPreferencePage.level1 = 1\uFF08\u6700\u4F4E\u538B\u7F29\uFF09 SVNPreferencePage.level2 = 2 SVNPreferencePage.level3 = 3 SVNPreferencePage.level4 = 4 SVNPreferencePage.level5 = 5 SVNPreferencePage.level6 = 6 SVNPreferencePage.level7 = 7 SVNPreferencePage.level8 = 8 SVNPreferencePage.level9 = 9\uFF08\u6700\u9AD8\u538B\u7F29\uFF09 SVNPreferencePage.logEntriesToFetch = \u7F3A\u7701\u65E5\u5FD7\u6D88\u606F\u6570\uFF080=\u5168\u90E8\uFF09 SVNPreferencePage.notquiet = \u8BE6\u7EC6 SVNPreferencePage.pruneEmptyDirectories = \u6E05\u7406\u7A7A\u76EE\u5F55(&P) SVNPreferencePage.quietness = \u5B89\u9759\u7EA7\u522B(&Q)\uFF1A SVNPreferencePage.reallyquiet = \u975E\u5E38\u5B89\u9759 SVNPreferencePage.removeOnReplace = \u66FF\u6362\u65F6\u5220\u9664\u672A\u52A0\u5165\u7248\u672C\u63A7\u5236\u7684\u8D44\u6E90(&R) SVNPreferencePage.replaceUnmanaged = \u66FF\u6362\u65F6\u5220\u9664\u672A\u7BA1\u7406\u7684\u8D44\u6E90(&D) SVNPreferencePage.repositoriesAreBinary = \u5C06\u6240\u6709\u65B0\u6587\u4EF6\u89C6\u4E3A\u4E8C\u8FDB\u5236\u6587\u4EF6(&T) SVNPreferencePage.selectUnadded = \u63D0\u4EA4\u65F6\u9009\u4E2D\u672A\u52A0\u5165\u7248\u672C\u63A7\u5236\u7684\u8D44\u6E90(&U) SVNPreferencePage.showAddRemoveMarkers = \u663E\u793A\u5DF2\u5220\u9664\u6587\u4EF6\u7684\u6807\u8BB0\u7B26\u53F7(&M) SVNPreferencePage.showCompareMergeInSync = \u5C06\u7248\u672C\u6BD4\u8F83\u663E\u793A\u5230\u5BF9\u8BDD\u6846\u4E2D(&C) SVNPreferencePage.showOutOfDateFolders = \u663E\u793A\u8FC7\u671F\u76EE\u5F55 SVNPreferencePage.showTags = \u5728\u8FDC\u7A0B\u5386\u53F2\u8BB0\u5F55\u89C6\u56FE\u4E2D\u663E\u793A\u6807\u8BB0 SVNPreferencePage.showUnadded = \u63D0\u4EA4\u65F6\u663E\u793A\u672A\u52A0\u5165\u7248\u672C\u63A7\u5236\u7684\u8D44\u6E90 SVNPreferencePage.silentWarningMessage = \u5728\u201C\u975E\u5E38\u5B89\u9759\u201D\u65B9\u5F0F\u4E2D\uFF0C\u67D0\u4E9B SVN \u670D\u52A1\u5668\u53EF\u80FD\u4E0D\u80FD\u4F20\u9001\u6709\u5173\u5DF2\u53D1\u751F\u7684\u9519\u8BEF\u7684\u91CD\u8981\u4FE1\u606F\u3002\u56E0\u6B64\u60A8\u53EF\u4EE5\u8003\u8651\u6539\u4E3A\u4F7F\u7528\u201C\u6BD4\u8F83\u5B89\u9759\u201D\u65B9\u5F0F\u3002 SVNPreferencePage.silentWarningTitle = \u201C\u975E\u5E38\u5B89\u9759\u201D\u65B9\u5F0F\u5B58\u5728\u5371\u9669\u3002 SVNPreferencePage.somewhatquiet = \u6BD4\u8F83\u5B89\u9759 SVNPreferencePage.svnClientInterface = SVN \u63A5\u53E3\uFF1A SVNPreferencePage.svnConfigDirDoesNotExist = SVN \u914D\u7F6E\u76EE\u5F55\u4E0D\u5B58\u5728\u3002 SVNPreferencePage.svncommandline = SVN \u547D\u4EE4\u884C SVNPreferencePage.svnjavahl = JavaHL\uFF08JNI\uFF09 SVNPreferencePage.timeoutValue = \u901A\u8BAF\u8D85\u65F6\uFF08\u79D2\uFF09(&C) SVNPreferencePage.useDefaultConfigLocation = \u4F7F\u7528\u7F3A\u7701\u914D\u7F6E\u4F4D\u7F6E SVNPreferencePage.useDirectoryConfig = \u4F7F\u7528\u76EE\u5F55\uFF1A SVNPreferencePage.useQuickdiffAnnotateGroup = \u4E3A\u672C\u5730\u6587\u4EF6\u6CE8\u91CA\u4F7F\u7528\u5FEB\u901F\u6BD4\u8F83\u6A21\u5F0F SVNPreferencesPage.Timeout_must_be_a_number_2 = \u8D85\u65F6\u5FC5\u987B\u662F\u4E00\u4E2A\u6570\u5B57 SVNPreferencesPage.Timeout_must_not_be_negative_1 = \u901A\u8BAF\u8D85\u65F6\u4E0D\u80FD\u662F\u8D1F\u6570 SVNProjectPropertiesPage.Change_Sharing_5 = \u66F4\u6539\u5171\u4EAB(&C)... SVNProjectPropertiesPage.Select_a_Repository_1 = \u9009\u62E9\u8D44\u6E90\u5E93 SVNProjectPropertiesPage.Select_a_SVN_repository_location_to_share_the_project_with__2 = \u9009\u62E9\u8981\u5171\u4EAB\u9879\u76EE\u7684\u517C\u5BB9 SVN \u8D44\u6E90\u5E93\u4F4D\u7F6E\uFF1A SVNProjectPropertiesPage.You_can_change_the_sharing_of_this_project_to_another_repository_location._However,_this_is_only_possible_if_the_new_location_is___compatible___(on_the_same_host_with_the_same_repository_path)._1 = \u53EF\u4EE5\u5C06\u6B64\u9879\u76EE\u7684\u5171\u4EAB\u66F4\u6539\u4E3A\u53E6\u4E00\u8D44\u6E90\u5E93\u4F4D\u7F6E\u3002\u4F46\u662F\uFF0C\u4EC5\u5F53\u65B0\u4F4D\u7F6E\u662F\u201C\u517C\u5BB9\u201D\uFF08\u5728\u5177\u6709\u76F8\u540C\u8D44\u6E90\u5E93\u8DEF\u5F84\u7684\u540C\u4E00\u4E3B\u673A\u4E0A\uFF09\uFF0C\u8FD9\u624D\u662F\u53EF\u80FD\u7684\u3002 SVNProjectPropertiesPage.clearReadOnly = \u6E05\u9664\u6240\u6709\u6587\u4EF6\u7684\u53EA\u8BFB\u5C5E\u6027 SVNProjectPropertiesPage.configureForWatchEdit = \u5141\u8BB8\u67E5\u770B\uFF0F\u7F16\u8F91\u6B64\u9879\u76EE SVNProjectPropertiesPage.connectionType = \u8FDE\u63A5\u7C7B\u578B\uFF1A SVNProjectPropertiesPage.fetchAbsentDirectoriesOnUpdate = \u66F4\u65B0\u65F6\u5217\u4E3E\u7F3A\u5C11\u7684\u6216\u65B0\u5EFA\u7684\u76EE\u5F55(&F) SVNProjectPropertiesPage.progressTaskName = \u6B63\u5728\u66F4\u6539\u9879\u76EE\u7684 SVN \u5C5E\u6027 SVNProjectPropertiesPage.setReadOnly = \u5C06\u6240\u6709\u6587\u4EF6\u8BBE\u4E3A\u53EA\u8BFB SVNProjectPropertiesPage.user = \u7528\u6237\uFF1A SVNProjectSetSerializer.Confirm_Overwrite_Project_8 = \u786E\u5B9A\u8986\u76D6\u9879\u76EE SVNProjectSetSerializer.The_project_{0}_already_exists._Do_you_wish_to_overwrite_it__9 = \u9879\u76EE {0} \u5DF2\u7ECF\u5B58\u5728\u3002\u8981\u8986\u76D6\u5B83\u5417\uFF1F SVNPromptUserPassword.authentication = SVN \u8BA4\u8BC1 SVNPropertiesPage.connectionType = \u8FDE\u63A5\u7C7B\u578B(&C)\uFF1A SVNPropertiesPage.defaultPort = \u7F3A\u7701 SVNPropertiesPage.host = \u4E3B\u673A\uFF1A SVNPropertiesPage.module = \u6A21\u5757\uFF1A SVNPropertiesPage.password = \u5BC6\u7801(&P)\uFF1A SVNPropertiesPage.path = \u8D44\u6E90\u5E93\u8DEF\u5F84\uFF1A SVNPropertiesPage.update = \u66F4\u6539\u6807\u8BB0(&T)... SVNPropertiesPage.user = \u7528\u6237(&U)\uFF1A SVNPropertiesPage.virtualModule = <\u6CA1\u6709\u4EFB\u4F55\u76F8\u5BF9\u5E94\u7684\u8FDC\u7A0B\u6587\u4EF6\u5939> SVNPropertyDeleteAction.confirmMultiple = \u60A8\u786E\u5B9A\u8981\u5220\u9664\u8FD9 {0} \u4E2A\u5C5E\u6027\u5417\uFF1F SVNPropertyDeleteAction.confirmSingle = \u60A8\u786E\u5B9A\u8981\u5220\u9664\u201C{0}\u201D\u5417\uFF1F SVNPropertyDeleteAction.delete = \u5220\u9664\u5C5E\u6027\u65F6\u51FA\u73B0\u95EE\u9898 SVNPropertyDeleteAction.title = \u786E\u8BA4\u5220\u9664\u5C5E\u6027 SVNPropertyModifyAction.modify = \u8BBE\u7F6E\u5C5E\u6027\u65F6\u51FA\u73B0\u95EE\u9898 SVNPropertyPage.added = \u5DF2\u6DFB\u52A0 SVNPropertyPage.changedAuthor = \u6700\u65B0\u63D0\u4EA4\u8005 SVNPropertyPage.changedDate = \u6700\u65B0\u4FEE\u6539\u65E5\u671F SVNPropertyPage.changedRevision = \u6700\u65B0\u4FEE\u8BA2\u7248 SVNPropertyPage.copied = \u5DF2\u590D\u5236 SVNPropertyPage.copiedFrom = URL \u590D\u5236\u4E8E SVNPropertyPage.deleted = \u5DF2\u5220\u9664 SVNPropertyPage.ignored = \u5DF2\u5FFD\u7565 SVNPropertyPage.lockComment = \u9501\u5B9A\u6CE8\u91CA SVNPropertyPage.lockCreationDate = \u9501\u5B9A\u521B\u5EFA\u65E5\u671F SVNPropertyPage.lockOwner = \u9501\u5B9A\u62E5\u6709\u8005 SVNPropertyPage.managed = \u5DF2\u7BA1\u7406 SVNPropertyPage.merged = \u5DF2\u5408\u5E76 SVNPropertyPage.modified = \u5DF2\u4FEE\u6539 SVNPropertyPage.path = \u8DEF\u5F84 SVNPropertyPage.revision = \u4FEE\u8BA2 SVNPropertyPage.status = \u72B6\u6001 SVNPropertyPage.switched = Switched SVNPropertyPage.url = URL SVNPropertyPage.wcLocked = Working copy locked SVNRefreshRemoteProjectWizard.title = \u5237\u65B0\u5206\u652F SVNRemoteFilePropertySource.author = \u4F5C\u8005 SVNRemoteFilePropertySource.comment = \u6CE8\u91CA SVNRemoteFilePropertySource.date = \u65E5\u671F SVNRemoteFilePropertySource.name = \u540D\u79F0 SVNRemoteFilePropertySource.revision = \u4FEE\u8BA2 SVNRemoteFolderPropertySource.name = \u540D\u79F0 SVNRemoteFolderPropertySource.none = \uFF08\u65E0\uFF09 SVNRemoveResloutionGenerator.Commit_Deletion_to_SVN_1 = \u5C06\u5220\u9664\u63D0\u4EA4\u5230 SVN SVNRemoveResloutionGenerator.No_local_history_available._Try_undoing_from_the_server_3 = \u65E0\u672C\u5730\u5386\u53F2\u8BB0\u5F55\u53EF\u7528\u3002\u5C1D\u8BD5\u4ECE\u670D\u52A1\u5668\u64A4\u6D88 SVNRemoveResloutionGenerator.Undo_Deletion_from_Local_History_2 = \u4ECE\u672C\u5730\u5386\u53F2\u8BB0\u5F55\u64A4\u6D88\u5220\u9664 SVNRemoveResloutionGenerator.Undo_Deletion_from_SVN_Server_4 = \u4ECE SVN \u670D\u52A1\u5668\u64A4\u6D88\u5220\u9664 SVNRemoveResolutionGenerator.Commit_Deletion_to_SVN_1 = \u5C06\u5220\u9664\u63D0\u4EA4\u5230 SVN SVNRemoveResolutionGenerator.No_local_history_available._Try_undoing_from_the_server_3 = \u65E0\u672C\u5730\u5386\u53F2\u8BB0\u5F55\u53EF\u7528\u3002\u5C1D\u8BD5\u4ECE\u670D\u52A1\u5668\u64A4\u6D88 SVNRemoveResolutionGenerator.Undo_Deletion_from_Local_History_2 = \u4ECE\u672C\u5730\u5386\u53F2\u8BB0\u5F55\u64A4\u6D88\u5220\u9664 SVNRemoveResolutionGenerator.Undo_Deletion_from_SVN_Server_4 = \u4ECE SVN \u670D\u52A1\u5668\u64A4\u6D88\u5220\u9664 SVNRepositoryLocationPropertySource.default = \u7F3A\u7701 SVNRepositoryLocationPropertySource.host = \u4E3B\u673A SVNRepositoryLocationPropertySource.method = \u8FDE\u63A5\u65B9\u6CD5 SVNRepositoryLocationPropertySource.root = \u6839\u76EE\u5F55 SVNRepositoryLocationPropertySource.user = \u7528\u6237 SVNRepositoryPropertiesPage.Confirm_Project_Sharing_Changes_1 = \u786E\u8BA4\u9879\u76EE\u5171\u4EAB\u66F4\u6539 SVNRepositoryPropertiesPage.There_are_projects_in_the_workspace_shared_with_this_repository_2 = \u8FD9\u4E9B\u662F\u5DE5\u4F5C\u7A7A\u95F4\u4E2D\u5DF2\u5171\u4EAB\u81F3\u6B64\u8D44\u6E90\u5E93\u7684\u9879\u76EE\u3002\u5B83\u4EEC\u5C06\u4F1A\u4F7F\u7528\u60A8\u8F93\u5165\u7684\u4FE1\u606F\u66F4\u65B0\u3002 SVNRepositoryPropertiesPage.browseRootUrl = \u6D4F\u89C8... SVNRepositoryPropertiesPage.login = \u767B\u5F55\uFF1A SVNRepositoryPropertiesPage.password = \u5BC6\u7801\uFF1A SVNRepositoryPropertiesPage.repositoryRootUrl = \u8D44\u6E90\u5E93\u6839 URL\uFF1A SVNRepositoryPropertiesPage.repositoryUrl = \u8D44\u6E90\u5E93 URL\uFF1A SVNRepositoryPropertiesPage.rootUrlWarning = \u5982\u679C\u60A8\u7684\u8D44\u6E90\u5E93\u8DEF\u5F84\u662F http://mycompany.com/repository/trunk/project\uFF0C\r\n\u90A3\u4E48\u60A8\u7684\u8D44\u6E90\u5E93\u6839\u8DEF\u5F84\u5E94\u8BE5\u662F http://mycompany.com/repository\u3002 SVNRepositoryPropertiesPage.sharedProject = \u5171\u4EAB\u4E8E {0} \u7684\u9879\u76EE\uFF1A SVNRepositoryPropertiesPage.useCustomLabel = \u4F7F\u7528\u5B9A\u5236\u6807\u7B7E\uFF1A SVNRepositoryPropertiesPage.useDefaultProgramName = \u671F\u671B\u6765\u81EA\u670D\u52A1\u5668\u7684\u6587\u672C\u6D88\u606F\u524D\u7F00\u662F\u9ED8\u8BA4\u7684\u7A0B\u5E8F\u540D\u201CSVN\u201D(&D) SVNRepositoryPropertiesPage.useLocationAsLabel = \u5C06\u8D44\u6E90\u5E93\u6807\u8BC6\u5B57\u7B26\u4E32\u7528\u4F5C\u6807\u7B7E SVNRepositoryPropertiesPage.useProgramName = \u671F\u671B\u4E00\u4E2A\u81EA\u5B9A\u7684\u7A0B\u5E8F\u540D(&P)\uFF1A SVNRepositoryPropertiesPage.useRepositoryUrlAsLabel = \u5C06\u8D44\u6E90\u5E93URL\u7528\u4F5C\u6807\u7B7E SVNSyncCompareInput.confirmMergeMessage = \u66F4\u6539\u5C06\u88AB\u4FDD\u5B58\u3002\u5F53\u4FDD\u5B58\u5B8C\u6210\u65F6\uFF0C\u9009\u62E9\u201C\u6807\u8BB0\u4E3A\u5408\u5E76\u201D\u4EE5\u4FBF\u4F7F\u6B64\u6587\u4EF6\u5177\u6709\u4F20\u51FA\u66F4\u6539\u3002 SVNSyncCompareInput.confirmMergeMessageTitle = \u4FE1\u606F SVNSyncCompareInput.filteringOutgoingChanges = \u6B63\u5728\u6536\u96C6\u5177\u6709\u4F20\u51FA\u66F4\u6539\u7684\u8D44\u6E90 SVNSyncCompareInput.projectDeleted = \u9879\u76EE\u201C{0}\u201D\u5DF2\u7ECF\u5220\u9664\uFF0C\u6240\u4EE5\u65E0\u6CD5\u540C\u6B65\u3002 SVNSyncSet.conflicts = {0} \u4E2A\u51B2\u7A81\u3001 SVNSyncSet.incomings = {0} \u4E2A\u4F20\u5165\u66F4\u6539\u3001 SVNSyncSet.new = {0} \u4E2A\u65B0\u5EFA\u8D44\u6E90\u3002 SVNSyncSet.noConflicts = \u65E0\u51B2\u7A81\u3001 SVNSyncSet.noIncomings = \u65E0\u4F20\u5165\u66F4\u6539\u3001 SVNSyncSet.noNew = \u65E0\u65B0\u5EFA\u8D44\u6E90\u3002 SVNSyncSet.noOutgoings = \u65E0\u4F20\u51FA\u66F4\u6539\u3001 SVNSyncSet.outgoings = {0} \u4E2A\u4F20\u51FA\u66F4\u6539\u3001 SVNUIPlugin.refreshMultipleQuestion = {0} \u8981\u5237\u65B0\u6240\u9009\u7684\u8D44\u6E90\u5417\uFF1F SVNUIPlugin.refreshQuestion = {0} \u8981\u5237\u65B0\u8D44\u6E90 \u201C{1}\u201D \u5417\uFF1F SVNUIPlugin.refreshTitle = \u5237\u65B0\u8D44\u6E90\u5417\uFF1F SVNWorkingSetFolderSelectionPage.duplicateWorkingSetName = \u6307\u5B9A\u540D\u79F0\u7684\u5DE5\u4F5C\u96C6\u5DF2\u5B58\u5728\u3002 SVNWorkingSetFolderSelectionPage.invalidWorkingSetName = \u540D\u79F0\u53EA\u80FD\u5305\u542B\u5B57\u7B26\u548C\u6570\u5B57\u3002 SVNWorkingSetFolderSelectionPage.mustSelectFolder = \u5FC5\u9700\u81F3\u5C11\u9009\u4E2D\u4E00\u4E2A\u6587\u4EF6\u5939\u3002 SVNWorkingSetFolderSelectionPage.name = \u5DE5\u4F5C\u96C6\u540D(&W)\uFF1A SVNWorkingSetFolderSelectionPage.projectSelectionPageDescription = \u8F93\u5165\u5DE5\u4F5C\u96C6\u540D\u5E76\u9009\u62E9\u5DE5\u4F5C\u96C6\u6587\u4EF6\u5939\u3002 SVNWorkingSetFolderSelectionPage.projectSelectionPageTitle = SVN \u5DE5\u4F5C\u96C6 SVNWorkingSetFolderSelectionPage.refresh = \u5237\u65B0\u5185\u5BB9(&R) SVNWorkingSetFolderSelectionPage.treeLabel = \u5DE5\u4F5C\u96C6\u5185\u5BB9(&S)\uFF1A SetCommitPropertiesDialog.0 = \u672A\u8F93\u5165 {0}\u3002\u4ECD\u8981\u7EE7\u7EED\u63D0\u4EA4\u5417\uFF1F SetCommitPropertiesDialog.noAuthor = \u672A\u8F93\u5165\u4F5C\u8005\u3002\u5FC5\u987B\u8F93\u5165\u6B64\u4FEE\u8BA2\u7684\u4F5C\u8005\u540D\u3002 SetCommitPropertiesDialog.revisionNumber = \u8BBE\u7F6E\u4FEE\u8BA2\u7248 {0} \u7684\u65B0\u4FEE\u8BA2\u6CE8\u91CA SetCommitPropertiesDialog.title = \u8BBE\u7F6E\u4FEE\u8BA2\u5C5E\u6027 SetCommitPropertiesDialog.user = \u4F5C\u8005\uFF1A SetSvnPropertyAction.set = \u8BBE\u7F6E\u5C5E\u6027\u65F6\u53D1\u751F\u95EE\u9898\u3002 SetSvnPropertyDialog.anotherPropertyHasSameName = \u540C\u540D\u5C5E\u6027\u5DF2\u5B58\u5728\u3002 SetSvnPropertyDialog.boolean = \u5C5E\u6027\u503C\u5FC5\u987B\u662F true \u6216 false SetSvnPropertyDialog.browse = \u6D4F\u89C8... SetSvnPropertyDialog.enterTextProperty = \u8F93\u5165\u6587\u672C\u5C5E\u6027 SetSvnPropertyDialog.fileDoesNotExist = \u6240\u9009\u7684\u6587\u4EF6\u4E0D\u5B58\u5728 SetSvnPropertyDialog.number = \u5C5E\u6027\u503C\u5FC5\u987B\u662F\u6570\u5B57 SetSvnPropertyDialog.propertyContent = \u5C5E\u6027\u5185\u5BB9 SetSvnPropertyDialog.propertyName = \u5C5E\u6027\u540D\uFF1A SetSvnPropertyDialog.recurseRequired = \u5C5E\u6027\u4E0D\u80FD\u5E94\u7528\u4E8E\u6587\u4EF6\u5939\u3002\u9009\u62E9\u201C\u9012\u5F52\u8BBE\u7F6E\u5C5E\u6027\u201D\u5C06\u5C5E\u6027\u5E94\u7528\u5230\u6240\u6709\u7684\u5B50\u6587\u4EF6\u3002 SetSvnPropertyDialog.setPropertyRecursively = \u9012\u5F52\u8BBE\u7F6E\u5C5E\u6027 SetSvnPropertyDialog.shellText = \u8BBE\u7F6E svn \u5C5E\u6027 SetSvnPropertyDialog.url = \u5C5E\u6027\u503C\u5FC5\u987B\u662F\u6709\u6548\u7684 URL SetSvnPropertyDialog.useFile = \u4F7F\u7528\u6587\u4EF6 SharingWizard.0 = \u6B63\u5728\u540C\u6B65 SharingWizard.1 = \u6B63\u5728\u540C\u6B65 {0} SharingWizard.autoConnectOneOTitle = \u5C06 Eclipse 1.0 \u4E2D\u7684\u9879\u76EE\u8FDE\u63A5\u81F3\u8D44\u6E90\u5E93 SharingWizard.autoConnectTitle = \u5C06\u9879\u76EE\u8FDE\u63A5\u81F3\u8D44\u6E90\u5E93 SharingWizard.autoConnectTitleDescription = \u5DF2\u7ECF\u4E3A\u9879\u76EE\u914D\u7F6E\u4E86 SVN \u8D44\u6E90\u5E93\u4FE1\u606F SharingWizard.browse = \u6D4F\u89C8... SharingWizard.cannotExist = URL \u6307\u793A\u7684\u6587\u4EF6\u5939\u4E0D\u5B58\u5728\u3002 SharingWizard.couldNotImport = \u8FDC\u7A0B\u9879\u76EE\u5DF2\u5B58\u5728 SharingWizard.couldNotImportLong = \u6587\u4EF6\u5939\u201C{0}\u201D\u5DF2\u5B58\u5728\u4E8E\u8D44\u6E90\u5E93\u4E2D\u3002\u5FC5\u987B\u6307\u5B9A\u672A\u88AB\u4F7F\u7528\u7684\u6587\u4EF6\u5939\u540D\u3002 SharingWizard.description = \u914D\u7F6E\u4F7F\u7528 SVN \u7684\u9879\u76EE SharingWizard.enterInformation = \u8F93\u5165\u8D44\u6E90\u5E93\u4F4D\u7F6E\u4FE1\u606F SharingWizard.enterInformationDescription = \u5B9A\u4E49\u8FDE\u63A5\u81F3\u73B0\u6709 SVN \u8D44\u6E90\u5E93\u6240\u5FC5\u9700\u7684\u4F4D\u7F6E\u548C\u534F\u8BAE\u4FE1\u606F\u3002 SharingWizard.enterModuleName = \u8F93\u5165\u6587\u4EF6\u5939\u540D SharingWizard.enterModuleNameDescription = \u9009\u62E9 SVN \u8D44\u6E90\u5E93\u4E2D\u7684\u6587\u4EF6\u5939\u540D\u3002 SharingWizard.heading = \u914D\u7F6E\u4F7F\u7528 SVN \u7684\u9879\u76EE SharingWizard.importTitle = \u5C06\u9879\u76EE\u5171\u4EAB\u81F3 SVN \u8D44\u6E90\u5E93 SharingWizard.importTitleDescription = \u9009\u62E9\u73B0\u6709\u8D44\u6E90\u5E93\u4F4D\u7F6E\u6216\u521B\u5EFA\u65B0\u4F4D\u7F6E\u3002 SharingWizard.initialImport = \u521D\u59CB\u5BFC\u5165\u3002 SharingWizard.readyToFinish = \u51C6\u5907\u5F00\u59CB\u5171\u4EAB\u9879\u76EE SharingWizard.readyToFinishDescription = \u70B9\u51FB\u201C\u5B8C\u6210\u201D\u5C06\u9879\u76EE\u5BFC\u5165\u5230 SVN \u8D44\u6E90\u5E93\u4E2D\u3002 SharingWizard.selectTag = \u4E3A\u540C\u6B65\u9009\u62E9\u6807\u8BB0(&S)\uFF1A SharingWizard.selectTagTitle = \u9009\u62E9\u6807\u8BB0 SharingWizard.title = \u5171\u4EAB\u9879\u76EE SharingWizard.url = URL\uFF1A SharingWizard.validationFailedText = {0}\u3002\u4ECD\u8981\u8BBE\u7F6E\u9879\u76EE\u5171\u4EAB\u5417\uFF1F SharingWizard.validationFailedTitle = \u65E0\u6CD5\u9A8C\u8BC1 SharingWizardFinishPage.message = \u5411\u5BFC\u5DF2\u7ECF\u6536\u96C6\u5230\u5C06\u60A8\u7684\u9879\u76EE\u5171\u4EAB\u81F3 SVN \u8D44\u6E90\u5E93\u6240\u9700\u8981\u7684\u5168\u90E8\u4FE1\u606F\u3002\u70B9\u51FB\u201C\u5B8C\u6210\u201D\uFF0C\u5411\u5BFC\u5C06\u4F1A\u5C06\u60A8\u7684\u9879\u76EE\u5BFC\u5165\u81F3\u8D44\u6E90\u5E93\u4E2D\u5E76\u6253\u5F00\u540C\u6B65\u89C6\u56FE\u4EE5\u4FBF\u60A8\u63D0\u4EA4\u8D44\u6E90\u3002 Sho&w_outgoing_25 = \u4F20\u51FA\u66F4\u6539(&G) ShowDifferencesAsUnifiedDiffDialog.branchTag = \u4E0E\u5206\u652F\uFF0F\u6807\u8BB0\u8FDB\u884C\u6BD4\u8F83 ShowDifferencesAsUnifiedDiffDialog.browse = \u6D4F\u89C8... ShowDifferencesAsUnifiedDiffDialog.compareFrom = \u6BD4\u8F83\u6765\u6E90\uFF1A ShowDifferencesAsUnifiedDiffDialog.compareTo = \u6BD4\u8F83\u5BF9\u8C61\uFF1A ShowDifferencesAsUnifiedDiffDialog.compareType = \u6BD4\u8F83\u7C7B\u578B\uFF1A ShowDifferencesAsUnifiedDiffDialog.diff = \u5355\u4E00\u5DEE\u5F02\u8F93\u51FA\u6587\u4EF6\uFF1A ShowDifferencesAsUnifiedDiffDialog.file = \u8F93\u51FA\u6587\u4EF6\uFF1A ShowDifferencesAsUnifiedDiffDialog.fileDialogText = \u4E3A\u5355\u4E00\u5DEE\u5F02\u9009\u62E9\u8F93\u51FA\u6587\u4EF6 ShowDifferencesAsUnifiedDiffDialog.fileToFolder = \u4E0D\u80FD\u5C06\u6587\u4EF6\u4E0E\u6587\u4EF6\u5939\u505A\u6BD4\u8F83\u3002 ShowDifferencesAsUnifiedDiffDialog.graphical = \u56FE\u5F62 ShowDifferencesAsUnifiedDiffDialog.head = \u6700\u65B0\u4FEE\u8BA2\u7248 ShowDifferencesAsUnifiedDiffDialog.path = \u8DEF\u5F84\uFF1A ShowDifferencesAsUnifiedDiffDialog.revision = \u4FEE\u8BA2\u7248 ShowDifferencesAsUnifiedDiffDialog.showLog = \u663E\u793A\u65E5\u5FD7 ShowDifferencesAsUnifiedDiffDialog.swap = \u4EA4\u6362\u6BD4\u8F83\u5BF9\u8C61 ShowDifferencesAsUnifiedDiffDialog.url = URL\uFF1A ShowHistoryAction.noHistory = \u65E0\u5386\u53F2\u8BB0\u5F55\u53EF\u7528 ShowHistoryAction.noHistoryLong = \u6240\u9009\u7684\u8D44\u6E90\u65E0\u53EF\u7528\u7684\u5386\u53F2\u8BB0\u5F55 ShowHistoryAction.showHistory = \u663E\u793A\u5386\u53F2\u8BB0\u5F55\u65F6\u53D1\u751F\u95EE\u9898 ShowOutOfDateFoldersAction.refreshTaskName = \u6B63\u5728\u540C\u6B65 Show_has_&remote_26 = \u8FDC\u7A0B\u8D44\u6E90 Standard_15 = \u6807\u51C6(&S) StatisticsPanel.noWorkingSet = <\u65E0\u5DE5\u4F5C\u96C6> SvnPropertiesView.addKeywordsLabel = \u8BBE\u7F6E\u5173\u952E\u5B57 SvnPropertiesView.addKeywordsTooltip = \u8BBE\u7F6E\u5173\u952E\u5B57 SvnPropertiesView.addPropertyLabel = \u6DFB\u52A0\u5C5E\u6027 SvnPropertiesView.addPropertyTooltip = \u6DFB\u52A0 svn \u5C5E\u6027 SvnPropertiesView.conflictOnProperties = \u4E00\u6216\u591A\u4E2A\u5C5E\u6027\u51B2\u7A81 SvnPropertiesView.deletePropertyLabel = \u5220\u9664\u5C5E\u6027 SvnPropertiesView.errorAddKeywordsMessage = \u4E0D\u80FD\u8BBE\u7F6E\u5173\u952E\u5B57 SvnPropertiesView.errorAddKeywordsTitle = \u8BBE\u7F6E\u5173\u952E\u5B57 SvnPropertiesView.errorAddMessage = \u4E0D\u80FD\u6DFB\u52A0\u65B0\u5C5E\u6027 SvnPropertiesView.errorAddTitle = \u6DFB\u52A0\u5C5E\u6027 SvnPropertiesView.errorGettingStatus = \u83B7\u53D6\u8D44\u6E90\u72B6\u6001\u65F6\u53D1\u751F\u9519\u8BEF SvnPropertiesView.modifyPropertyLabel = \u4FEE\u6539\u5C5E\u6027 SvnPropertiesView.noPropertiesModified = \u6700\u8FD1\u4E00\u6B21\u63D0\u4EA4\u540E\u6CA1\u6709\u5C5E\u6027\u53D1\u751F\u6539\u53D8 SvnPropertiesView.propertyName = \u540D\u79F0 SvnPropertiesView.propertyValue = \u503C SvnPropertiesView.refresh = \u5237\u65B0\u89C6\u56FE SvnPropertiesView.refreshLabel = \u5237\u65B0\u89C6\u56FE(&R) SvnPropertiesView.resourceNotManaged = \u8D44\u6E90\u672A\u88AB\u7BA1\u7406 SvnPropertiesView.somePropertiesModified = \u6700\u8FD1\u4E00\u6B21\u63D0\u4EA4\u540E\u90E8\u5206\u5C5E\u6027\u5DF2\u53D1\u751F\u6539\u53D8 SvnPropertiesView.titleWithArgument = {0} \u7684 SVN \u5C5E\u6027 SwitchAction.switch = \u6267\u884C\u5207\u6362\u65F6\u51FA\u73B0\u95EE\u9898\u3002 SwitchDialog.browse = \u6D4F\u89C8... SwitchDialog.head = \u6700\u65B0\u4FEE\u8BA2\u7248 SwitchDialog.invalid = \u65E0\u6548\u7684\u4FEE\u8BA2\u7248\u672C\u53F7\u3002 SwitchDialog.revision = \u4FEE\u8BA2\u7248 SwitchDialog.title = \u5207\u6362\u81F3\u5206\u652F/\u6807\u8BB0 SwitchDialog.url = \u81F3 URL\uFF1A SwitchOperation.0 = \u6B63\u5728\u5207\u6362 {0} SwitchOperation.taskName = SVN \u5207\u6362 SyncAction.add = \u6DFB\u52A0\u81F3\u7248\u672C\u63A7\u5236(&A) SyncAction.commit = \u63D0\u4EA4(&C)... SyncAction.commit.conflict.question = \u5177\u6709\u9700\u8981\u89E3\u51B3\u7684\u51B2\u7A81\u3002\u7EE7\u7EED\u63D0\u4EA4\u6CA1\u6709\u51B2\u7A81\u7684\u66F4\u6539\uFF1F SyncAction.commit.conflict.title = \u786E\u8BA4\u63D0\u4EA4 SyncAction.conflicts = \u7F16\u8F91\u51B2\u7A81(&E) SyncAction.history = \u5728\u8D44\u6E90\u5386\u53F2\u8BB0\u5F55\u4E2D\u663E\u793A(&H) SyncAction.ignore = \u6DFB\u52A0\u81F3 svn:ignore(&D) SyncAction.markMerged = \u6807\u8BB0\u4E3A\u5408\u5E76(&M) SyncAction.override = \u8986\u76D6\uFF0F\u66F4\u65B0(&V) SyncAction.override.confirm = \u6267\u884C\u6B64\u52A8\u4F5C\u5C06\u5220\u9664\u60A8\u7684\u672C\u5730\u66F4\u6539\u3002\u786E\u5B9A\u8981\u56DE\u590D\u672C\u5730\u66F4\u6539\u5E76\u4E14\u66FF\u6362\u4E3A\u8D44\u6E90\u5E93\u4E2D\u7684\u6587\u4EF6\u5417\uFF1F SyncAction.override.title = \u8986\u76D6\uFF0F\u66F4\u65B0 SyncAction.properties = \u663E\u793A\u5C5E\u6027(&P) SyncAction.resolve = \u6807\u8BB0\u4E3A\u89E3\u51B3(&K) SyncAction.revert = \u56DE\u590D(&R)... SyncAction.showOutOfDateFolders = \u663E\u793A\u8FC7\u671F\u76EE\u5F55 SyncAction.sync = \u540C\u6B65(&S) SyncAction.update = \u66F4\u65B0(&U) SyncAction.update.conflict.question = \u5177\u6709\u4E0E\u670D\u52A1\u5668\u76F8\u51B2\u7A81\u7684\u672C\u5730\u66F4\u6539\u3002\u66F4\u65B0\u64CD\u4F5C\u5C06\u5C1D\u8BD5\u5408\u5E76\u5B83\u4EEC\u3002\u8981\u7EE7\u7EED\u5417\uFF1F SyncAction.update.conflict.title = \u786E\u8BA4\u66F4\u65B0 SynchronizeProjectsDialog.allSharedProjects = \u5305\u62EC\u6240\u6709\u5171\u4EAB\u81F3 SVN \u7684\u9879\u76EE(&A)\uFF1A SynchronizeProjectsDialog.selectProjects = \u5C06\u8981\u8FDB\u884C\u540C\u6B65\u7684\u9879\u76EE SynchronizeProjectsDialog.sharedWorkingSetProjects = \u5305\u62EC\u5171\u4EAB\u81F3 SVN \u7684\u5DE5\u4F5C\u96C6\u8D44\u6E90(&W)\uFF1A SynchronizeProjectsDialog.syncOutgoingChanges = \u53EA\u540C\u6B65\u5177\u6709\u4F20\u51FA\u66F4\u6539\u7684\u9879\u76EE(&C) SynchronizeProjectsDialog.title = \u540C\u6B65 SVN \u9879\u76EE SynchronizeView.standardIncomingChangeSetComment = \u65E0\u6CD5\u83B7\u53D6\u63D0\u4EA4\u4FE1\u606F SynchronizeWizard.message = \u9009\u62E9\u5C06\u8981\u8FDB\u884C\u540C\u6B65\u7684\u8D44\u6E90\u6216\u5DE5\u4F5C\u96C6\u3002 SynchronizeWizard.title = \u540C\u6B65 SVN TagAction.enterTag = \u8BF7\u8F93\u5165\u7248\u672C\u6807\u8BB0\uFF1A TagAction.existingVersions = \u73B0\u6709\u7248\u672C\uFF1A TagAction.tagAlreadyExists = \u7248\u672C\u6807\u8BB0\u5DF2\u5B58\u5728\u3002 TagAction.tagErrorTitle = \u6807\u8BB0\u9519\u8BEF TagAction.tagProblemsMessage = \u6807\u8BB0\u8D44\u6E90\u65F6\u62A5\u544A\u4E86\u9519\u8BEF\u3002 TagAction.tagProblemsMessageMultiple = \u6807\u8BB0\u8D44\u6E90\u65F6\u53D1\u751F\u4E86\u95EE\u9898\u3002\u6210\u529F\u6807\u8BB0\u4E86 {0} \u4E2A\u9879\u76EE\u5E76\u4E14\u6709 {1} \u4E2A\u9879\u76EE\u5B58\u5728\u9519\u8BEF\u3002 TagAction.tagResources = \u6807\u8BB0\u8D44\u6E90 TagAction.tagWarningTitle = \u6807\u8BB0\u8B66\u544A TagAction.uncommittedChanges = \u60A8\u6B63\u5728\u6807\u8BB0\u5177\u6709\u672A\u63D0\u4EA4\u7684\u66F4\u6539\u7684\u201C{0}\u201D\u3002\u8FD9\u4E9B\u66F4\u6539\u4E0D\u5728\u8D44\u6E90\u5E93\u4E2D\u5E76\u4E14\u5C06\u4E0D\u4F1A\u5305\u62EC\u5728\u60A8\u6B63\u5728\u521B\u5EFA\u7684\u7248\u672C\u4E2D\u3002\u4ECD\u7136\u8981\u7EE7\u7EED\u6807\u8BB0\u6B64\u8D44\u6E90\u5417\uFF1F TagAction.uncommittedChangesTitle = \u786E\u8BA4\u672A\u63D0\u4EA4\u7684\u66F4\u6539 TagInRepositoryAction.tagProblemsMessage = \u6807\u8BB0\u8D44\u6E90\u65F6\u62A5\u544A\u4E86\u95EE\u9898\u3002 TagInRepositoryAction.tagProblemsMessageMultiple = \u6807\u8BB0\u8D44\u6E90\u65F6\u62A5\u544A\u4E86\u95EE\u9898\u3002 TagSelectionDialog.Select_a_Tag_1 = \u9009\u62E9\u5206\u652F\u6216\u7248\u672C(&S)\uFF1A TagSelectionDialog.recurseOption = \u9012\u5F52\u81F3\u5B50\u6587\u4EF6\u5939\u4E2D(&F) TagetLocationSelectionDialog.alreadyExists = \u9879\u76EE {0} \u5DF2\u5B58\u5728\u3002 TagetLocationSelectionDialog.invalidLocation = \u65E0\u6548\u7684\u4F4D\u7F6E\u8DEF\u5F84\u3002 TagetLocationSelectionDialog.locationEmpty = \u5FC5\u987B\u6307\u5B9A\u9879\u76EE\u7684\u5185\u5BB9\u76EE\u5F55\u3002 TargetLocationSelectionDialog.browseLabel = \u6D4F\u89C8(&B)... TargetLocationSelectionDialog.locationLabel = \u4F4D\u7F6E(&L)\uFF1A TargetLocationSelectionDialog.messageForMulti = \u4E3A {0} \u4E2A\u9879\u76EE\u9009\u62E9\u4E0A\u7EA7\u76EE\u5F55\u3002 TargetLocationSelectionDialog.messageForSingle = \u4E3A\u9879\u76EE {0} \u9009\u62E9\u4E0A\u7EA7\u76EE\u5F55\u3002 TargetLocationSelectionDialog.parentDirectoryLabel = \u76EE\u5F55(&D)\uFF1A TargetLocationSelectionDialog.projectNameLabel = \u9879\u76EE\u540D\u79F0(&P)\uFF1A TargetLocationSelectionDialog.useDefaultLabel = \u4F7F\u7528\u7F3A\u7701\u5DE5\u4F5C\u7A7A\u95F4\u4F4D\u7F6E(&W) TeamAction.internal = \u53D1\u751F\u5185\u90E8\u9519\u8BEF\u3002 TrustSSLServerDialog.permanent = \u6C38\u4E45\u63A5\u53D7 TrustSSLServerDialog.reject = \u62D2\u7EDD TrustSSLServerDialog.temporary = \u6682\u65F6\u63A5\u53D7 TrustSSLServerDialog.title = \u63A5\u53D7\u6570\u5B57\u8BC1\u4E66 Uneditaction.confirmMessage = \u8986\u76D6\u5BF9\u5DF2\u7F16\u8F91\u6587\u4EF6\u7684\u672C\u5730\u66F4\u6539\u5417\uFF1F Uneditaction.confirmTitle = \u786E\u8BA4\u53D6\u6D88\u7F16\u8F91 UnlockOperation.0 = \u6B63\u5728\u89E3\u9501 {0} UnlockOperation.taskName = SVN \u89E3\u9501 Unmanage.deleteMeta = \u5982\u679C\u9009\u62E9\u5220\u9664 SVN \u5143\u4FE1\u606F\uFF0C\u90A3\u4E48\u5C06\u65E0\u6CD5\u518D\u5C06\u6B64\u9879\u76EE\u91CD\u65B0\u8FDE\u63A5\u5230\u60A8\u7684\u8D44\u6E90\u5E93\u3002\u60A8\u53EF\u4EE5\u9009\u62E9\u5C06\u5B83\u5171\u4EAB\u5230\u65B0\u7684\u4F4D\u7F6E\u6216\u8005\u5220\u9664\u9879\u76EE\u7136\u540E\u91CD\u65B0\u53D6\u51FA\u5B83\u3002\u786E\u5B9A\u8981\u7EE7\u7EED\u5417\uFF1F Unmanage.message = \u786E\u5B9A\u8981\u5C06 SVN \u4E0E\u201C{0}\u201D\u65AD\u5F00\u8FDE\u63A5\u5417\uFF1F Unmanage.messageN = \u786E\u5B9A\u8981\u5C06 SVN \u4E0E\u8FD9 {0} \u4E2A\u9879\u76EE\u65AD\u5F00\u8FDE\u63A5\u5417\uFF1F Unmanage.option1 = \u4E0D\u5220\u9664 SVN \u5143\u4FE1\u606F\uFF08\u4F8B\u5982\uFF1ASVN \u5B50\u76EE\u5F55\uFF09\u3002 Unmanage.option2 = \u5E76\u4E14\u4ECE\u6587\u4EF6\u7CFB\u7EDF\u4E2D\u5220\u9664 SVN \u5143\u4FE1\u606F\u3002 Unmanage.title = \u786E\u8BA4\u4E0E SVN \u65AD\u5F00\u8FDE\u63A5 Unmanage.titleN = \u786E\u8BA4\u5C06\u591A\u4E2A\u9879\u76EE\u4E0E SVN \u65AD\u5F00\u8FDE\u63A5 Unmanage.unmanage = \u4ECE SVN \u65AD\u5F00\u8FDE\u63A5 Unmanage.unmanaging = \u6B63\u5728\u4ECE SVN \u65AD\u5F00\u8FDE\u63A5... Unmanage.unmanagingError = \u65AD\u5F00\u8FDE\u63A5\u65F6\u53D1\u751F\u9519\u8BEF UpdateAction.updateerror = \u66F4\u65B0\u65F6\u9047\u5230\u95EE\u9898 UpdateAction.updating = \u6B63\u5728\u66F4\u65B0... UpdateMergeActionProblems_merging_remote_resources_into_workspace_1 = \u5C06\u8FDC\u7A0B\u8D44\u6E90\u5408\u5E76\u5230\u5DE5\u4F5C\u7A7A\u95F4\u65F6\u9047\u5230\u95EE\u9898 UpdateMergeActionProblems_merging_remote_resources_into_workspace_2 = \u5C06\u8FDC\u7A0B\u8D44\u6E90\u5408\u5E76\u5230\u5DE5\u4F5C\u7A7A\u95F4\u65F6\u9047\u5230\u95EE\u9898 UpdateOperation.0 = \u6B63\u5728\u66F4\u65B0 {0} UpdateOperation.taskName = SVN \u66F4\u65B0 UpdateSyncAction.Conflicting_changes_found_1 = \u53D1\u73B0\u5177\u6709\u51B2\u7A81\u7684\u66F4\u6539 UpdateSyncAction.Only_update_resources_that_can_be_automatically_merged_3 = \u53EA\u66F4\u65B0\u53EF\u4EE5\u81EA\u52A8\u5408\u5E76\u7684\u8D44\u6E90 UpdateSyncAction.Overwrite_local_changes__5 = \u8986\u76D6\u672C\u5730\u66F4\u6539\uFF1F UpdateSyncAction.Update_all_resources,_overwriting_local_changes_with_remote_contents_4 = \u66F4\u65B0\u6240\u6709\u8D44\u6E90\uFF0C\u7528\u8FDC\u7A0B\u5185\u5BB9\u8986\u76D6\u672C\u5730\u66F4\u6539\u3002 UpdateSyncAction.You_have_local_changes_you_are_about_to_overwrite._Do_you_wish_to_continue__6 = \u5177\u6709\u5C06\u88AB\u8986\u76D6\u7684\u672C\u5730\u66F4\u6539\u3002\u8981\u7EE7\u7EED\u5417\uFF1F UpdateSyncAction.You_have_local_changes_you_are_about_to_overwrite_2 = \u5177\u6709\u5C06\u88AB\u8986\u76D6\u7684\u672C\u5730\u66F4\u6539 UpdateSyncAction.errorUpdating = \u66F4\u65B0\u66F4\u6539\u65F6\u9047\u5230\u9519\u8BEF\u3002 UpdateWizard.title = \u66F4\u65B0 UpdateWizard.updatePage = \u66F4\u65B0 UpdateWizardPage.description = \u4E3A\u5171\u4EAB\u7684\u9879\u76EE\u9009\u62E9\u6807\u8BB0\u4EE5\u8FDB\u884C\u66F4\u65B0(&S)\uFF1A UpdateWizardPage.overwrite = \u8986\u76D6\u672C\u5730\u66F4\u6539(&O) UserPromptDialog.save = \u4FDD\u5B58\u4F5C\u8005\u59D3\u540D(&S) UserPromptDialog.title = \u7F16\u8F91 SVN \u4F5C\u8005\u59D3\u540D UserPromptDialog.username = \u4F5C\u8005\u59D3\u540D(&A) UserValidationDialog.labelPassword = \u8F93\u5165\u8D44\u6E90\u5E93 {0} \u4E2D\u7684 {1} \u7684\u5BC6\u7801 UserValidationDialog.labelUser = \u8F93\u5165\u8D44\u6E90\u5E93 {0} \u7684\u7528\u6237\u540D\u53CA\u5BC6\u7801 UserValidationDialog.password = \u5BC6\u7801\uFF1A UserValidationDialog.required = \u5BC6\u7801\u662F\u5FC5\u9700\u7684 UserValidationDialog.user = \u7528\u6237\u540D\uFF1A Validate_Connection_on_Finish_7 = \u5B8C\u6210\u65F6\u9A8C\u8BC1\u4F4D\u7F6E VersionCategory.Versions_1 = \u7248\u672C VersionsElement.versions = \u7248\u672C WorkbenchUserAuthenticator.The_operation_was_canceled_by_the_user_1 = \u7528\u6237\u5DF2\u53D6\u6D88\u64CD\u4F5C WorkbenchUserAuthenticator.cancelled = \u7531\u4E8E\u53D6\u6D88\u4E86\u767B\u5F55\uFF0C\u6240\u4EE5\u64CD\u4F5C\u4E5F\u53D6\u6D88\u4E86 WorkbenchUserAuthenticator.errorFlushing = \u4E3A {0} \u66F4\u65B0\u5BC6\u7801\u65F6\u53D1\u751F\u9519\u8BEF WorkbenchUserAuthenticator.errorSaving = \u4E3A {0} \u4FDD\u5B58\u5BC6\u7801\u65F6\u53D1\u751F\u9519\u8BEF WorkingSetSelectionArea.workingSetOther = \u5176\u5B83(&O)... WorkingSetSelectionDialog.detailsButton.label = \u7F16\u8F91(&E)... WorkingSetSelectionDialog.message = \u9009\u62E9 SVN \u5DE5\u4F5C\u96C6(&S)\uFF1A WorkingSetSelectionDialog.message.multiSelect = \u9009\u62E9 SVN \u5DE5\u4F5C\u96C6(&S)\uFF1A WorkingSetSelectionDialog.newButton.label = \u65B0\u5EFA(&N)... WorkingSetSelectionDialog.removeButton.label = \u79FB\u9664(&R) WorkingSetSelectionDialog.title = \u9009\u62E9 SVN \u5DE5\u4F5C\u96C6 WorkingSetSelectionDialog.title.multiSelect = \u9009\u62E9 SVN \u5DE5\u4F5C\u96C6 WorkspaceChangeSetCapability_1 = \u65B0\u5DE5\u4F5C\u96C6 WorkspaceChangeSetCapability_2 = \u65B0\u4FEE\u6539\u96C6 WorkspaceChangeSetCapability_3 = \u4E3A\u65B0\u4FEE\u6539\u96C6\u8F93\u5165\u540D\u79F0\u548C\u6CE8\u91CA WorkspaceChangeSetCapability_7 = \u7F16\u8F91\u4FEE\u6539\u96C6\u6CE8\u91CA WorkspaceChangeSetCapability_8 = \u7F16\u8F91\u65B0\u4FEE\u6539\u96C6\u7684\u540D\u79F0\u548C\u6CE8\u91CA WorkspacePathValidator.eclipsePath = \u60A8\u7684 Eclipse \u5DE5\u4F5C\u7A7A\u95F4\u8DEF\u5F84\u4E3A\uFF1A WorkspacePathValidator.fileSystemPath = \u4F46\u662F\u5F53\u524D\u6587\u4EF6\u7CFB\u7EDF\u8DEF\u5F84\u4E3A\uFF1A WorkspacePathValidator.instructions = \u9664\u975E\u5B83\u4EEC\u76F8\u540C\uFF0C\u5426\u5219 Subclipse \u4E0D\u80FD\u6B63\u786E\u6267\u884C\u64CD\u4F5C\u3002\u4F7F\u7528\u201C\u5207\u6362\u5DE5\u4F5C\u7A7A\u95F4\u201D\u9009\u9879\u6216\u8005\u66F4\u6539\u60A8\u7684\u5FEB\u6377\u65B9\u5F0F\u4E2D -data \u53C2\u6570\u4F7F Eclipse \u503C\u80FD\u548C\u6587\u4EF6\u7CFB\u7EDF\u503C\u76F8\u5339\u914D\u3002 WorkspacePathValidator.title = \u5DE5\u4F5C\u7A7A\u95F4\u8DEF\u5F84\u9A8C\u8BC1\u9519\u8BEF WorkspaceSubscriberContext_0 = buildError = SVN \u64CD\u4F5C\u5B8C\u6210\u540E\u53D1\u751F\u6784\u5EFA\u9519\u8BEF\u3002 confirmOverwrite = \u9879\u76EE\u5B58\u5728\u4E8E\u5DE5\u4F5C\u7A7A\u95F4\u4E2D\uFF0C\u5B83\u7684\u5185\u5BB9\u5C06\u88AB\u8986\u76D6\u3002 confirmOverwriteTitle = \u786E\u8BA4\u8986\u76D6\u9879\u76EE currentRevision = *{0} details = \u66F4\u591A\u4FE1\u606F\u8BF7\u5355\u51FB\u201C\u8BE6\u7EC6\u201D\u6309\u94AE\u3002 error = \u9519\u8BEF exception = \u670D\u52A1\u5668\u5F02\u5E38 flag_indicating_that_the_folder_has_a_child_resource_with_outgoing_changes_41 = \u6307\u793A\u6587\u4EF6\u5939\u5305\u542B\u5E26\u6709\u4F20\u51FA\u66F4\u6539\u7684\u5B50\u8D44\u6E90\u7684\u6807\u5FD7 information = \u670D\u52A1\u5668\u4FE1\u606F internal = \u53D1\u751F\u5185\u90E8\u9519\u8BEF\uFF0C\u8BE6\u7EC6\u4FE1\u606F\u8BF7\u67E5\u770B\u9519\u8BEF\u65E5\u5FD7\u3002 keyword_substitution_rule_for_the_resource_44 = \u8D44\u6E90\u7684\u5173\u952E\u5B57\u66FF\u6362\u89C4\u5219 localChanges = \u5177\u6709\u5C06\u88AB\u8986\u76D6\u7684\u672C\u5730\u66F4\u6539\u3002\u8981\u7EE7\u7EED\u5417\uFF1F moveRemoteFolderWizard.title = \u79FB\u52A8\u8FDC\u7A0B\u8D44\u6E90 nameAndRevision = {0} {1} no = \u5426 noauthor = \uFF08\u65E0\u4F5C\u8005\uFF09 notAvailable = \u4E0D\u53EF\u7528 ok = \u786E\u5B9A prompt = \u63D0\u793A question = \u63D0\u95EE repository_home_directory_on_server_39 = \u670D\u52A1\u5668\u4E0A\u7684\u8D44\u6E90\u5E93\u4E3B\u76EE\u5F55 root_relative_directory_40 = \u6839\u76F8\u5BF9\u76EE\u5F55 separator = / simpleInternal = \u5185\u90E8\u9519\u8BEF svn = SVN the_connection_method_(e.g._pserver,_ssh)_37 = \u8FDE\u63A5\u65B9\u6CD5\uFF08\u4F8B\u5982\uFF1Apserver\uFF0Cssh\uFF09 the_repository_location__s_hostname_36 = \u8D44\u6E90\u5E93\u4F4D\u7F6E\u7684\u4E3B\u673A\u540D the_tag_applied_to_the_resource_(version,_branch,_or_date)_35 = \u5E94\u7528\u4E8E\u8D44\u6E90\u7684\u6807\u8BB0\uFF08\u7248\u672C\u3001\u5206\u652F\u6216\u65E5\u671F\uFF09 the_tag_applied_to_the_resource_43 = \u5E94\u7528\u4E8E\u8D44\u6E90\u7684\u6807\u8BB0 user_name_for_the_connection_38 = \u8FDE\u63A5\u7528\u6237\u540D yes = \u662F messages_zh_TW.properties000066400000000000000000003567251203611042400405730ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui#Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) #****************************************************************************** # Copyright (c) 2005, 2006 Subclipse project and others. # All rights reserved. This program and the accompanying materials # are made available under the terms of the Eclipse Public License v1.0 # which accompanies this distribution, and is available at # http://www.eclipse.org/legal/epl-v10.html # # Contributors: # Subclipse project committers - initial API and implementation #*****************************************************************************/ #Generated by ResourceBundle Editor (http://eclipse-rbe.sourceforge.net) AcceptMine.label = \u63A5\u53D7\u672C\u5730\u4FEE\u8A02\u7248\u672C AcceptTheirs.label = \u63A5\u53D7\u9060\u7AEF\u7684\u4FEE\u8A02\u7248\u672C AddAction.addFailed = \u65B0\u589E\u904E\u7A0B\u4E2D\u767C\u751F\u932F\u8AA4 AddAction.addIgnoredQuestion = \u4F60\u8981\u6C42\u65B0\u589E\u4E00\u500B\u6216\u591A\u500B\u6A94\u6848\u5230\u7248\u672C\u63A7\u7BA1\u7CFB\u7D71\u4E2D\uFF0C\u7248\u672C\u63A7\u7BA1\u7CFB\u7D71\u5C0D\u9019\u4E9B\u6A94\u6848\u9810\u8A2D\u70BA\u5FFD\u7565\uFF0C\u8981\u7E7C\u7E8C\u55CE? AddAction.addIgnoredTitle = \u65B0\u589E\u5DF2\u5FFD\u7565\u7684\u6A94\u6848\u55CE? AddAction.adding = \u6B63\u5728\u65B0\u589E... AddKeywordsAction.addKeywordsFailed = \u8B8A\u66F4 svn:keywords \u5C6C\u6027\u6642\u767C\u751F\u932F\u8AA4 AddKeywordsDialog.description = \u8AAA\u660E AddKeywordsDialog.headUrl.description = \u6A94\u6848\u5EAB\u4E2D\u6A94\u6848\u6700\u65B0\u7248\u672C\u7684\u5B8C\u6574 URL AddKeywordsDialog.headUrl.sample = $HeadURL: http://svn.collab.net/repos/subclipse/trunk/readme.txt $ AddKeywordsDialog.id.description = \u5176\u4ED6\u95DC\u9375\u5B57\u7D44\u5408\u7684\u58D3\u7E2E AddKeywordsDialog.id.sample = $Id: AddKeywordsDialog.java 148 2003-11-02 22:35:43Z cchab $ AddKeywordsDialog.keyword = \u95DC\u9375\u5B57 AddKeywordsDialog.lastChangedBy.description = \u6700\u5F8C\u4FEE\u6539\u6A94\u6848\u5EAB\u4E2D\u6B64\u6A94\u6848\u7684\u4F7F\u7528\u8005 AddKeywordsDialog.lastChangedBy.sample = $LastChangedBy: cchab $ AddKeywordsDialog.lastChangedDate.description = \u6A94\u6848\u5EAB\u4E2D\u6B64\u6A94\u6848\u7684\u6700\u5F8C\u4FEE\u6539\u6642\u9593 AddKeywordsDialog.lastChangedDate.sample = $LastChangedDate: 2002-07-22 21:42:37 -0700 (Mon, 22 Jul 2002) $ AddKeywordsDialog.lastChangedRevision.description = \u6A94\u6848\u5EAB\u4E2D\u6B64\u6587\u4EF6\u7684\u6700\u65B0\u4FEE\u8A02\u7248\u672C AddKeywordsDialog.lastChangedRevision.sample = $LastChangedRevision: 144 $ AddKeywordsDialog.sample = \u7BC4\u4F8B AddKeywordsDialog.selectKeywords = \u9078\u64C7\u8981\u8A2D\u5B9A\u5728\u9078\u53D6\u6A94\u6848\u4E0A\u7684\u95DC\u9375\u5B57 AddKeywordsDialog.title = \u65B0\u589E\u95DC\u9375\u5B57 AddToBranchAction.enterTag = \u8F38\u5165\u5206\u652F\u6A19\u8A18 AddToBranchAction.enterTagLong = \u8F38\u5165\u5206\u652F\u6A19\u8A18\u540D\u7A31: AddToVersionControlDialog.thereAreUnaddedResources = \u6709 {0} \u500B\u6A94\u6848\u672A\u53D7SVN \u7248\u672C\u63A7\u7BA1\u3002\u8981\u65B0\u589E\u5B83\u5011\u55CE? AddToVersionControlDialog.thereIsAnUnaddedResource = \u6709 {0} \u500B\u4E0D\u53D7 SVN \u7248\u672C\u63A7\u7BA1\u7684\u6A94\u6848\u3002\u8981\u65B0\u589E\u5B83\u55CE? AddToVersionControlDialog.title = \u65B0\u589E\u81F3 SVN \u7248\u672C\u63A7\u7BA1 AddToWorkspace.taskName1 = \u6B63\u5728\u7531SVN\u53D6\u51FA ``{0}'' AddToWorkspace.taskNameN = \u6B63\u5728\u7531 SVN \u53D6\u51FA {0} \u500B\u8CC7\u6599\u593E AddToWorkspaceAction.checkingOutRoot = \u60A8\u4F3C\u4E4E\u6B63\u5728\u53D6\u51FA\u6A94\u6848\u5EAB\u7684\u6839\u76EE\u9304\u3002\u60A8\u78BA\u5B9A\u9019\u662F\u60A8\u5E0C\u671B\u7684\u884C\u70BA\u55CE? \u5982\u679C\u6A94\u6848\u5EAB\u4E2D\u5305\u542B\u5206\u652F\u6216\u6A19\u8A18\uFF0C\u90A3\u5B83\u5011\u6703\u5168\u90E8\u88AB\u53D6\u51FA\u3002 AddToWorkspaceAction.checkoutFailed = \u53D6\u51FA\u904E\u7A0B\u767C\u751F\u554F\u984C AddToWorkspaceAction.confirmOverwrite = \u78BA\u5B9A\u8986\u5BEB AddToWorkspaceAction.thisExternalFileExists = \u8CC7\u6599\u593E ``{0}'' \u5B58\u5728\u65BC\u672C\u5730\u7684\u6A94\u6848\u7CFB\u7D71\u4E2D\uFF0C\u8A72\u8CC7\u6599\u593E\u5C07\u88AB\u522A\u9664\u3002\u8981\u7E7C\u7E8C\u55CE? AddToWorkspaceAction.thisResourceExists = \u6A94\u6848 ``{0}'' \u5DF2\u5B58\u5728\u5DE5\u4F5C\u5340\uFF0C\u5C07\u522A\u9664\u8A72\u6A94\u6848\u3002\u8981\u7E7C\u7E8C\u55CE? Advanced_options_19 = \u9032\u968E\u9078\u9805 After_configuring_the_project__1 = \u8A2D\u5B9A\u5C08\u6848\u4E4B\u5F8C\uFF1A AlternateUserValidationDialog.Cancel_7 = \u53D6\u6D88 AlternateUserValidationDialog.Enter_Password_2 = \u8F38\u5165\u5BC6\u78BC AlternateUserValidationDialog.OK_6 = \u78BA\u5B9A AlternateUserValidationDialog.message = \u8F38\u5165 {0} \u7684\u5BC6\u78BC\uFF1A AnnotateDialog.from = \u5F9E\u4FEE\u8A02\u7248\u672C\uFF1A AnnotateDialog.revision = \u4FEE\u8A02\u7248\u672C\uFF1A AnnotateDialog.title = \u8A3B\u89E3 AnnotateDialog.to = \u5230\u4FEE\u8A02\u7248\u672C\uFF1A AnnotateDialog.url = URL: AnnotateOperation.0 = \u986F\u793A {0} \u7684\u8A3B\u89E3 AnnotateOperation.taskName = \u986F\u793A\u8A3B\u89E3 AnnotateOperation_4 = \u5132\u5B58\u6211\u7684\u8A2D\u5B9A AnnotateOperation_QDAnnotateMessage = \u8981\u4F7F\u7528\u5FEB\u901F\u6BD4\u8F03\u4F86\u986F\u793A\u6CE8\u91CB\u55CE? AnnotateOperation_QDAnnotateTitle = \u5FEB\u901F\u6BD4\u8F03\u8A3B\u91CB AutoDefineTagsAction.defineTags = \u81EA\u52D5\u627E\u51FA\u6A19\u8A18 Automatically_import_the_local_resources_into_the_repository_3 = \u81EA\u52D5\u5C07\u672C\u6A5F\u6A94\u6848\u52A0\u5165\u5230\u6A94\u6848\u5EAB\u4E2D AvoidableMessageDialog.dontShowAgain = \u4E0D\u518D\u986F\u793A\u6B64\u8A0A\u606F BranchCategory.Branches_1 = \u5206\u652F BranchTagAction.branch = \u5EFA\u7ACB\u5206\u652F/\u6A19\u8A18\u6642\u51FA\u73FE\u554F\u984C BranchTagDialog.0 = \u672A\u8F38\u5165 {0} \u3002\u8981\u7E7C\u7E8C\u8907\u88FD (\u5206\u652F/\u6A19\u8A18) \u55CE? BranchTagDialog.createCopy = \u7531\u6A94\u6848\u5EAB\u4E2D\u5EFA\u7ACB\u526F\u672C: BranchTagDialog.enterComment = \u8F38\u5165\u5206\u652F/\u6A19\u8A18\u7684\u8A3B\u91CB(&C): BranchTagDialog.fromUrl = \u7531 URL : BranchTagDialog.head = \u6700\u65B0\u4FEE\u8A02\u7248\u672C(HEAD) BranchTagDialog.note = \u6CE8\u610F: \u4F60\u7684\u5DE5\u4F5C\u5340\u4ECD\u7136\u6703\u4FDD\u6301\u4E4B\u524D\u7684\u76EE\u9304\u3002\u5982\u679C\u4F60\u60F3\u5C07\u5F80\u5F8C\u7684\u8B8A\u66F4\u9001\u4EA4\u5230\u5C07\u8981\u5EFA\u7ACB\u7684\u526F\u672C\u76EE\u9304\uFF0C\u4F60\u5FC5\u9700\u5207\u63DB\u5230\u8A72\u526F\u672C\u7684\u76EE\u9304\u3002\u4F7F\u7528``\u5207\u63DB''\u64CD\u4F5C\u9032\u884C\u5207\u63DB\u76EE\u9304\u3002 BranchTagDialog.repository = \u6A94\u6848\u5EAB BranchTagDialog.revision = \u6307\u5B9A\u6A94\u6848\u5EAB\u4E2D\u7684\u4FEE\u8A02\u7248\u672C BranchTagDialog.server = \u5728\u4F3A\u670D\u5668\u5EFA\u7ACB\u5206\u652F/\u6A19\u8A18 BranchTagDialog.switchAfterTagBranch = \u5207\u63DB\u5DE5\u4F5C\u5340\u7248\u672C\u70BA\u65B0\u7684\u5206\u652F/\u6A19\u8A18 BranchTagDialog.title = \u8907\u88FD (\u5206\u652F/\u6A19\u8A18) BranchTagDialog.toUrl = \u76EE\u6A19 URL : BranchTagDialog.url = \u539F\u59CB URL : BranchTagDialog.working = \u5DE5\u4F5C\u526F\u672C BranchTagOperation.0 = \u6B63\u5728\u5EFA\u7ACB\u5206\u652F/\u6A19\u8A18 {0} BranchTagOperation.taskName = SVN \u5206\u652F/\u6A19\u8A18 BranchTagPropertyUpdateDialog.text = \u8907\u88FD\u7684\u8CC7\u6599\u593E\u542B\u6709 subclipse:tags \u6027\u8CEA\u3002\u6309\u4E0B``\u78BA\u5B9A''\u6703\u5C07\u9019\u4E9B\u8A0A\u606F\u66F4\u65B0\u5230\u6027\u8CEA\u4E2D\u3002\r\n\r\n\u6CE8\u610F: \u6027\u8CEA\u7684\u8B8A\u66F4\u9700\u8981\u5728\u8907\u88FD\u5B8C\u6210\u5F8C\u57F7\u884C\u4E00\u6B21\u9001\u4EA4\u7684\u52D5\u4F5C\u3002 BranchTagPropertyUpdateDialog.title = \u66F4\u65B0``\u5206\u652F/\u6A19\u7C64''\u6027\u8CEA CVSChangeSetCollector_0 = \u672A\u6307\u5B9A\u7684\u9060\u7AEF\u8B8A\u66F4 CVSChangeSetCollector_4 = \u6B63\u5728\u53D6\u56DE\u7248\u672C\u6B77\u53F2\u8A18\u9304 ChangeListener.Deleting_SVN_folders_1 = \u522A\u9664 SVN \u8CC7\u6599\u593E ChangeListener.Do_not_ask_me_about_this_again_3 = \u4E0D\u518D\u8A62\u554F\u9019\u500B\u554F\u984C ChangeListener.Folders_cannot_be_deleted_from_a_SVN_server_from_the_client._To_delete_the_folder_2 = \u7528\u6236\u7AEF\u7121\u6CD5\u522A\u9664SVN\u4F3A\u670D\u5668\u4E0A\u7684\u8CC7\u6599\u593E\u3002\u8981\u522A\u9664\u8CC7\u6599\u593E ChangePathsTableProvider.action = \u52D5\u4F5C ChangePathsTableProvider.copiedfrom = \u7531 {0}:{1} ChangePathsTableProvider.description = \u8AAA\u660E ChangePathsTableProvider.path = \u53D7\u5F71\u97FF\u7684\u76EE\u9304 CheckoutAsAction.checkoutFailed = \u53D6\u51FA\u904E\u7A0B\u51FA\u73FE\u554F\u984C CheckoutAsAction.confirmOverwrite = \u65B0\u5EFA\u7684\u5C08\u6848 {0} \u542B\u6709\u6A19\u6E96 .project \u6A94\u4E4B\u5916\u7684\u6A94\u6848\u3002\u5982\u679C\u9019\u4E9B\u6A94\u6848\u548C\u6B63\u5728\u53D6\u51FA\u7684\u6A94\u6848\u6709\u76F8\u540C\u7684\u540D\u7A31\u548C\u76F8\u5C0D\u4F4D\u7F6E\uFF0C\u672C\u5730\u7AEF\u6A94\u6848\u5C07\u6703\u88AB\u6A94\u6848\u5EAB\u53D6\u51FA\u7684\u6A94\u6848\u6240\u53D6\u4EE3\u3002 CheckoutAsAction.enterLocationTitle = \u53D6\u51FA {0} \u5C08\u6848\u70BA... CheckoutAsAction.enterProjectTitle = \u53D6\u51FA {0} \u70BA... CheckoutAsAction.multiCheckout = \u6B63\u5728\u7531SVN\u53D6\u51FA {0} \u500B\u5C08\u6848 CheckoutAsAction.taskname = \u7531 SVN \u53D6\u51FA ``{0}'' \u70BA ``{1}'' CheckoutAsAction.title = \u53D6\u51FA\u70BA... CheckoutAsProjectAction.title = \u53D6\u51FA\u70BA\u5C08\u6848 CheckoutAsProjectOperation.0 = \u6B63\u5728\u53D6\u51FA {0} CheckoutAsProjectOperation.taskName = SVN \u53D6\u51FA CheckoutInto.message = \u9078\u64C7\u8981\u88DD\u5C08\u6848\u53D6\u51FA\u4F4D\u7F6E\u7684\u8CC7\u6599\u593E\u3002\u5C07\u6703\u5EFA\u7ACB\u4E00\u500B\u4EE5\u5C08\u6848\u540D\u7A31\u547D\u540D\u7684\u5B50\u76EE\u9304\u3002 CheckoutIntoProjectSelectionPage.description = \u9078\u53D6 ``{0}'' \u5C08\u6848\u53D6\u51FA\u4F4D\u5B50\u7684\u4E0A\u4E00\u5C64\u8CC7\u6599\u593E\uFF1A CheckoutIntoProjectSelectionPage.invalidFolderName = ``{0}'' \u932F\u8AA4\u7684\u8CC7\u6599\u593E\u540D\u7A31 CheckoutIntoProjectSelectionPage.name = \u76EE\u6A19\u8CC7\u6599\u540D\u7A31(&N)\uFF1A CheckoutIntoProjectSelectionPage.recurse = \u53D6\u51FA\u5B50\u8CC7\u6599\u593E(&C) CheckoutIntoProjectSelectionPage.showAll = \u986F\u793A\u6240\u6709\u53EF\u7528\u7684\u76EE\u6A19\u5C08\u6848 CheckoutIntoProjectSelectionPage.showLabel = \u904E\u6FFE\u5C08\u6848\u5217\u8868\u6E05\u55AE(&F): CheckoutIntoProjectSelectionPage.showSameRepo = \u986F\u793A\u5171\u4EAB\u65BC\u540C\u4E00\u500B\u6A94\u6848\u5EAB\u7684\u5C08\u6848 CheckoutIntoProjectSelectionPage.showUnshared = \u986F\u793A\u672A\u5171\u4EAB\u7684\u5C08\u6848 CheckoutIntoProjectSelectionPage.treeLabel = \u76EE\u6A19\u8CC7\u6599\u593E\u7684\u4E0A\u4E00\u5C64\u8CC7\u6599\u593E\uFF1A CheckoutIntoWizard.,mappingAlredyExists = \u7121\u6CD5\u65B0\u589E\u8CC7\u6599\u593E ``{0}'' \u81F3 ``{1}'' \u5C08\u6848\u7684 ``{2}''\u4E2D\uFF0C``{3}''\u5DF2\u7D93\u5DF2\u7D93\u5C0D\u61C9\u5230\u6B64\u8CC7\u6599\u593E\u3002 CheckoutIntoWizard.confirmOverwrite = \u78BA\u8A8D\u8986\u5BEB CheckoutIntoWizard.error = \u53D6\u51FA\u5931\u6557 CheckoutIntoWizard.projectSelectionPageDescription = \u9078\u64C7\u53D6\u51FA\u52D5\u4F5C\u7684\u672C\u5730\u8CC7\u6599\u593E CheckoutIntoWizard.projectSelectionPageTitle = \u9078\u64C7\u672C\u5730\u8CC7\u6599\u593E CheckoutIntoWizard.thisResourceExists = \u5DE5\u4F5C\u5340\u4E2D\u5DF2\u5B58\u5728 ``{0}'' \u8CC7\u6E90\uFF0C\u8981\u8986\u5BEB\u55CE\uFF1F CheckoutIntoWizard.title = \u53D6\u51FA\u5230 CheckoutWizard.title = \u7531 SVN \u53D6\u51FA CheckoutWizardCheckoutAsPage.existing = \u53D6\u51FA\u5230\u73FE\u6709\u5C08\u6848\u4E2D CheckoutWizardCheckoutAsPage.heading = \u53D6\u51FA\u70BA CheckoutWizardCheckoutAsPage.multiple = \u9078\u64C7\u53D6\u51FA\u9019 {0} \u500B\u8CC7\u6599\u593E\u7684\u65B9\u5F0F CheckoutWizardCheckoutAsPage.notAvailable = (\u53EA\u6709\u5728\u6A94\u6848\u5EAB\u4E2D\u4E0D\u5305\u542B .project \u6A94\u6642\u624D\u80FD\u4F7F\u7528) CheckoutWizardCheckoutAsPage.project = \u4EE5\u5DE5\u4F5C\u5340\u5C08\u6848\u7684\u65B9\u5F0F\u53D6\u51FA CheckoutWizardCheckoutAsPage.projectName = \u5C08\u6848\u540D\u7A31: CheckoutWizardCheckoutAsPage.projects = \u4EE5\u5DE5\u4F5C\u5340\u4E2D\u591A\u500B\u5C08\u6848\u7684\u65B9\u5F0F\u53D6\u51FA CheckoutWizardCheckoutAsPage.single = \u9078\u64C7\u53D6\u51FA\u8CC7\u6599\u593E {0} \u7684\u65B9\u5F0F CheckoutWizardCheckoutAsPage.text = \u9078\u64C7\u53D6\u51FA\u7684\u65B9\u5F0F CheckoutWizardCheckoutAsPage.wizard = \u4EE5\u65B0\u5C08\u6848\u7684\u65B9\u5F0F\u53D6\u51FA\uFF0C\u4E26\u900F\u904E\u65B0\u5EFA\u5C08\u6848\u7CBE\u9748\u52A0\u4EE5\u8A2D\u5B9A CheckoutWizardLocationPage.existing = \u4F7F\u7528\u73FE\u6709\u6A94\u6848\u5EAB\u4F4D\u7F6E: CheckoutWizardLocationPage.heading = \u9078\u64C7/\u5EFA\u7ACB\u4F4D\u7F6E CheckoutWizardLocationPage.new = \u5EFA\u7ACB\u65B0\u7684\u6A94\u6848\u5EAB\u4F4D\u7F6E CheckoutWizardLocationPage.text = \u9078\u64C7\u73FE\u6709\u7684\u6A94\u6848\u5EAB\u4F4D\u7F6E\u6216\u662F\u5EFA\u7ACB\u65B0\u4F4D\u7F6E\u3002 CheckoutWizardProjectPage.browse = \u700F\u89BD... CheckoutWizardProjectPage.default = \u4F7F\u7528\u9810\u8A2D\u5DE5\u4F5C\u5340 CheckoutWizardProjectPage.heading = \u53D6\u51FA\u70BA CheckoutWizardProjectPage.location = \u4F4D\u7F6E: CheckoutWizardProjectPage.revision = \u8981\u53D6\u56DE\u7684\u7248\u672C: CheckoutWizardProjectPage.text = \u9078\u64C7\u5C08\u6848\u4F4D\u7F6E\u3002 CheckoutWizardSelectionPage.heading = \u9078\u64C7\u8CC7\u6599\u593E CheckoutWizardSelectionPage.text = \u9078\u64C7 SVN \u4E2D\u8981\u53D6\u51FA\u7684\u8CC7\u6599\u593E\u3002 ChooseRootUrlDialog.chooseRootUrl = \u9078\u53D6\u6A94\u6848\u5EAB\u7684\u6839\u8DEF\u5F91\uFF1A ChooseRootUrlDialog.rootUrlDialogTitle = \u6A94\u6848\u5EAB\u6839\u76EE\u9304 URL ChooseUrlDialog.branches = \u5206\u652F ChooseUrlDialog.delete = \u522A\u9664... ChooseUrlDialog.refresh = \u91CD\u65B0\u6574\u7406 ChooseUrlDialog.tags = \u6A19\u8A18 ChooseUrlDialog.title = \u6A94\u6848\u5EAB\u700F\u89BD\u5668 CleanupAction.error = \u6E05\u7406\u5931\u6557 CleanupOperation.0 = \u6B63\u5728\u6E05\u7406 {0} CleanupOperation.taskName = SVN \u6E05\u7406 CommentCommitWizardPage.pageDescription = \u8F38\u5165\u9001\u4EA4\u8A0A\u606F CommentCommitWizardPage.pageTitle = \u9001\u4EA4 CommentTemplatesPreferencePage.Description = \u65B0\u589E,\u7DE8\u8F2F\u6216\u522A\u9664\u8A3B\u89E3\u6A23\u677F(&C): CommentTemplatesPreferencePage.Edit = \u7DE8\u8F2F(&E): CommentTemplatesPreferencePage.EditCommentTemplateMessage = \u8ACB\u8F38\u5165\u8A3B\u89E3\u6A23\u677F: CommentTemplatesPreferencePage.EditCommentTemplateTitle = \u8F38\u5165\u8A3B\u89E3\u6A23\u677F CommentTemplatesPreferencePage.New = \u65B0\u589E(&N): CommentTemplatesPreferencePage.Preview = \u9810\u89BD(&W): CommentTemplatesPreferencePage.Remove = \u522A\u9664 (&R) CommitAction.commitFailed = \u9001\u4EA4\u904E\u7A0B\u51FA\u73FE\u554F\u984C CommitCommentArea_0 = <\u9EDE\u9078\u6B64\u8655\u8F38\u5165\u8A3B\u91CB> CommitCommentArea_1 = <\u9078\u53D6\u4E4B\u524D\u7684\u8A3B\u91CB> CommitCommentArea_2 = \u7A7A\u767D\u8A3B\u91CB CommitCommentArea_3 = \u672C\u6B21\u9001\u51FA\u8A3B\u91CB\u70BA\u7A7A\u767D\uFF0C\u8981\u7E7C\u7E8C\u57F7\u884C\u9001\u51FA\u52D5\u4F5C\u55CE? CommitCommentArea_4 = \u5132\u5B58\u8B8A\u66F4(&M)? CommitCommentArea_5 = \u6B63\u5728\u8A2D\u5B9A\u8A3B\u91CB\u6A23\u677F(template) CommitCommentArea_6 = \u6A23\u677F CommitDialog.0 = \u672A\u8F38\u5165 {0}\u3002\u8981\u7E7C\u7E8C\u9001\u4EA4\u55CE\uFF1F CommitDialog.added = \u5DF2\u65B0\u589E CommitDialog.commitTo = \u9001\u4EA4\u5230: CommitDialog.conflicted = \u885D\u7A81 CommitDialog.deleted = \u5DF2\u522A\u9664 CommitDialog.deselectUnadded = \u53D6\u6D88\u9078\u53D6\u672A\u7D0D\u5165\u7248\u672C\u63A7\u7BA1\u7684 (&U) CommitDialog.keepLocks = \u4FDD\u6301\u9396\u5B9A CommitDialog.missing = \u4E0D\u5B58\u5728 CommitDialog.modified = \u5DF2\u7570\u52D5 CommitDialog.multiple = \u9078\u53D6\u4E86\u591A\u500B\u76EE\u6A19 CommitDialog.noChanges = \u4E0A\u6B21\u9001\u4EA4\u5F8C\uFF0C\u6C92\u6709\u8B8A\u66F4\u6216\u65B0\u589E\u7684\u6A94\u6848\u3002 CommitDialog.number = {0} \u5FC5\u9700\u662F\u6578\u5B57\u6216\u7A7A\u767D (\u4EE5\u9017\u9EDE\u70BA\u5206\u9694\u7B26\u865F)\u3002 CommitDialog.propertiesModified = \u6027\u8CEA\u5DF2\u7570\u52D5 CommitDialog.property = \u5C6C\u6027\u72C0\u614B CommitDialog.replaced = \u5DF2\u53D6\u4EE3 CommitDialog.resources = \u9078\u53D6\u7684\u8CC7\u6E90\u5C07\u6703\u7D0D\u5165 SVN \u7248\u672C\u63A7\u7BA1\u3002 CommitDialog.status = \u6587\u5B57\u72C0\u614B CommitDialog.tag = \u8B66\u544A\uFF1A\u4F60\u7684\u5DE5\u4F5C\u5340\u4F3C\u4E4E\u662F\u4E00\u500B\u6A19\u8A18\u76EE\u9304! \u9001\u51FA\u524D\u5FC5\u9700\u5148\u5207\u63DB\u5230\u4E00\u500B\u5206\u652F\u6216\u662F\u4E3B\u7248\u672C(trunck)\u3002\u4E0D\u5207\u63DB\u76F4\u63A5\u9001\u51FA\u55CE\uFF1F CommitDialog.title = \u9001\u4EA4 CommitDialog.unselectedPropChangeChildren = \u5982\u679C\u522A\u9664\u8CC7\u6599\u593E\u53CA\u8B8A\u66F4\u8CC7\u6599\u593E\u5C6C\u6027\u90FD\u88AB\u9078\u53D6\u6642\uFF0C\r\n\u6240\u6709\u5C6C\u65BC\u8A72\u8CC7\u6599\u593E\u6027\u8CEA\u7684\u6A94\u6848\u4E5F\u5FC5\u9700\u88AB\u9078\u53D6\u3002 CommitDialog.unversioned = \u672A\u7D0D\u5165\u7248\u672C\u63A7\u7BA1 CommitOperation.taskName = SVN \u9001\u4EA4 CommitSetDialog_0 = \u540D\u7A31(&N): CommitSetDialog_2 = \u4F7F\u7528\u6A19\u984C\u4F5C\u70BA\u9001\u51FA\u6642\u7684\u8A3B\u91CB(&T) CommitSetDialog_3 = \u8F38\u5165\u9001\u51FA\u8A3B\u91CB(&C) CommitSyncAction.cancelRelease = \u53D6\u6D88\u767C\u4F48\u52D5\u4F5C CommitSyncAction.errorCommitting = \u9001\u51FA\u8B8A\u66F4\u6642\u767C\u751F\u932F\u8AA4 CommitSyncAction.questionRelease = \u5177\u6709\u548C\u4F3A\u670D\u5668\u7AEF\u885D\u7A81\u7684\u8B8A\u66F4\u3002\u8981\u767C\u4F48\u9019\u4E9B\u8B8A\u66F4\u55CE\uFF1F CommitSyncAction.releaseAll = \u767C\u4F48\u6240\u6709\u8B8A\u66F4\uFF0C\u8986\u5BEB\u6240\u6709\u8207\u4F3A\u670D\u5668\u4E0A\u885D\u7A81\u7684\u8B8A\u66F4\u3002 CommitSyncAction.releasePart = \u53EA\u767C\u4F48\u8207\u4F3A\u670D\u5668\u4E0A\u6C92\u6709\u885D\u7A81\u7684\u8B8A\u66F4\u3002 CommitSyncAction.titleRelease = \u767C\u4F48\u885D\u7A81\u8B8A\u66F4\uFF1F CompareEditorInput.fileProgress = \u6B63\u5728\u6BD4\u8F03 SVN \u6A94\u6848 \uFF1A {0} CompareWithRemoteAction.compare = \u8207\u6700\u65B0\u7248\u672C\u6BD4\u5C0D\u6642\u767C\u751F\u554F\u984C CompareWithRemoteAction.fetching = \u6B63\u5728\u8207\u6A94\u6848\u5EAB\u4E2D\u6700\u65B0\u7248\u672C\u9032\u884C\u6BD4\u5C0D CompareWithRemoteAction.noRemote = \u7121\u9060\u7AEF\u8CC7\u6E90 CompareWithRemoteAction.noRemoteLong = \u9078\u53D6\u7684\u8CC7\u6E90\u6C92\u6709\u5C0D\u61C9\u7684\u9060\u7AEF\u8CC7\u6E90\u53EF\u4EE5\u6BD4\u8F03\u3002 CompareWithRevisionAction.compare = \u8207\u4FEE\u8A02\u7248\u672C\u6BD4\u5C0D\u6642\u767C\u751F\u932F\u8AA4 CompareWithRevisionAction.fetching = \u6B63\u5728\u7531\u6A94\u6848\u5EAB\u4E2D\u53D6\u51FA\u4FEE\u8A02\u7248\u672C CompareWithRevisionAction.noRevisions = \u7121\u4FEE\u8A02\u7248\u672C CompareWithRevisionAction.noRevisionsLong = \u9078\u53D6\u7684\u8CC7\u6E90\u6C92\u6709\u53EF\u6BD4\u8F03\u7684\u4FEE\u8A02\u7248\u672C CompareWithTagAction.fetching = \u6B63\u5728\u8B80\u53D6\u542B\u6709\u6A19\u8A18{0} \u7684\u8CC7\u6E90... CompareWithTagAction.message = \u8207\u5206\u652F\u6216\u7248\u672C\u9032\u884C\u6BD4\u5C0D CompareWithTagAction.noRemote = \u7121\u9060\u7AEF\u8CC7\u6E90 CompareWithTagAction.noRemoteLong = \u9078\u53D6\u7684\u6A19\u8A18\u6C92\u6709\u9060\u7AEF\u8CC7\u6E90\u53EF\u4F5C\u6BD4\u5C0D CompareWithTagAction.replace = \u6BD4\u5C0D\u5206\u652F\u6216\u7248\u672C\u6642\u767C\u751F\u932F\u8AA4 ConfigurationWizardAutoconnectPage.connectionType = \u9023\u7DDA\u578B\u614B\uFF1A ConfigurationWizardAutoconnectPage.default = \u9810\u8A2D ConfigurationWizardAutoconnectPage.description = \u4F60\u7684\u5C08\u6848\u5DF2\u7D93\u6709 SVN/\u76EE\u9304\uFF0C\u53EF\u80FD\u662F\u5148\u524D\u5DF2\u5171\u4EAB\u6216\u662F\u7531\u5176\u4ED6\u5DE5\u5177\u6240\u53D6\u51FA\u3002\u5C07\u6703\u81EA\u52D5\u7528\u4EE5\u4E0B\u8CC7\u8A0A\u9032\u884C\u5171\u4EAB\u3002 ConfigurationWizardAutoconnectPage.host = \u4F3A\u670D\u5668 ConfigurationWizardAutoconnectPage.module = \u6A21\u7D44\uFF1A ConfigurationWizardAutoconnectPage.noSVNDirectory = \u627E\u4E0D\u5230 SVN/\u76EE\u9304 ConfigurationWizardAutoconnectPage.noSyncInfo = \u7121\u6CD5\u53D6\u5F97\u8CC7\u6599\u593E\u8CC7\u8A0A ConfigurationWizardAutoconnectPage.port = \u9023\u63A5\u57E0\uFF1A ConfigurationWizardAutoconnectPage.repositoryPath = \u6A94\u6848\u5EAB\u8DEF\u5F91\uFF1A ConfigurationWizardAutoconnectPage.user = \u4F7F\u7528\u8005\u5E33\u865F\uFF1A ConfigurationWizardAutoconnectPage.validate = \u5B8C\u6210\u9023\u7DDA\u9A57\u8B49(&V) ConfigurationWizardMainPage.Authentication_2 = \u9A57\u8B49 ConfigurationWizardMainPage.Connection_3 = \u9023\u7DDA ConfigurationWizardMainPage.Location_1 = \u4F4D\u7F6E ConfigurationWizardMainPage.browseRootUrl = \u700F\u89BD... ConfigurationWizardMainPage.connection = \u9023\u7DDA\u985E\u578B\uFF1B ConfigurationWizardMainPage.invalidHostName = \u7121\u6548\u7684\u4F3A\u670D\u5668\u540D\u7A31 ConfigurationWizardMainPage.invalidPathWithSlashes = \u6A94\u6848\u5EAB\u8DEF\u5F91\u4E0D\u80FD\u5305\u542B\u96D9\u659C\u7DDA (//) ConfigurationWizardMainPage.invalidPathWithSpaces = \u6A94\u6848\u5EAB\u8DEF\u5F91\u4E0D\u80FD\u4EE5\u7A7A\u767D\u958B\u982D\u6216\u7D50\u5C3E ConfigurationWizardMainPage.invalidPort = \u932F\u8AA4\u7684\u9023\u63A5\u57E0 ConfigurationWizardMainPage.invalidUrl = \u8CC7\u6E90\u5EAB\u8DEF\u5F91\u5FC5\u9700\u662F\u6709\u6548\u7684URL {0} ConfigurationWizardMainPage.invalidUserName = \u4F7F\u7528\u8005\u5E33\u865F\u932F\u8AA4 ConfigurationWizardMainPage.password = \u5BC6\u78BC(&P) ConfigurationWizardMainPage.repositoryPath = \u6A94\u6848\u5EAB\u8DEF\u5F91(&R)\uFF1A ConfigurationWizardMainPage.rootUrl = \u6839\u76EE\u9304\uFF1A ConfigurationWizardMainPage.rootUrlWarning = \u5982\u679C\u4F60\u7684\u6A94\u6848\u5EAB\u8DEF\u5F91\u70BAhttp://mycompany.com/repository/trunck/project\uFF0C\r\n\u90A3\u5C0D\u61C9\u7684\u6A94\u6848\u5EAB\u6839\u8DEF\u5F91\u70BAhttp://mycompany.com/repository ConfigurationWizardMainPage.url = &Url: ConfigurationWizardMainPage.useDefaultPort = \u4F7F\u7528\u9810\u8A0A\u901A\u8A0A\u57E0(&D) ConfigurationWizardMainPage.usePort = \u4F7F\u7528\u901A\u8A0A\u57E0(&T): ConfigurationWizardMainPage.userName = \u4F7F\u7528\u8005\u5E33\u865F(&U): ConfigureTagsDialog.add = \u65B0\u589E ConfigureTagsDialog.addBranch = \u5EFA\u7ACB\u5206\u652F ConfigureTagsDialog.addTag = \u65B0\u589E\u6A19\u8A18 ConfigureTagsDialog.apply = \u5957\u7528 ConfigureTagsDialog.branch = \u5206\u652F ConfigureTagsDialog.branchHeader = \u5206\u652F: ConfigureTagsDialog.browse = \u700F\u89BD... ConfigureTagsDialog.confirmExit = \u78BA\u5B9A\u4E0D\u66F4\u65B0\u76F4\u63A5\u96E2\u958B? ConfigureTagsDialog.delete = \u522A\u9664 ConfigureTagsDialog.loadBranchesMessage = \u9078\u64C7\u8981\u5EFA\u7ACB\u5206\u652F\u7684\u8CC7\u6599\u593E\uFF0C\u7528Shif+\u6ED1\u9F20\u9375\u6216Ctrl+\u6ED1\u9F20\u9375\u4F86\u9078\u64C7\u591A\u500B\u8CC7\u6599\u593E\u3002 ConfigureTagsDialog.loadTagsMessage = \u9078\u64C7\u8981\u5EFA\u7ACB\u6A19\u8A18\u7684\u8CC7\u6599\u593E\u3002\u7528Shif+\u6ED1\u9F20\u9375\u6216Ctrl+\u6ED1\u9F20\u9375\u4F86\u9078\u64C7\u591A\u500B\u8CC7\u6599\u593E\u3002 ConfigureTagsDialog.name = \u540D\u7A31: ConfigureTagsDialog.newBranch = \u5EFA\u7ACB\u5206\u652F ConfigureTagsDialog.newTag = \u5EFA\u7ACB\u6A19\u8A18 ConfigureTagsDialog.path = \u76F8\u5C0D\u8DEF\u5F91: ConfigureTagsDialog.pendingUpdate = \u4F60\u5DF2\u7D93\u5C0D\u4E4B\u524D\u9078\u53D6\u7684\u5206\u652F\u6216\u6A19\u8A18\u505A\u4E86\u8B8A\u66F4\uFF0C\u8981\u5957\u7528\u9019\u4E9B\u8B8A\u66F4\u55CE? ConfigureTagsDialog.revision = \u4FEE\u8A02\u7248\u672C: ConfigureTagsDialog.tagHeader = \u6A19\u8A18: ConfigureTagsDialog.text = \u9078\u64C7\u4E00\u6216\u591A\u500B\u8981\u52A0\u5165\u8A2D\u5B9A\u4E2D\u7684\u5206\u652F/\u6A19\u8A18\u8CC7\u6599\u593E\uFF0C\u7136\u5F8C\u7531\u8DF3\u51FA\u9078\u55AE\u4E2D\u9078\u53D6\u9069\u7576\u7684\u9078\u9805\u5C07\u5206\u652F/ \u6A19\u8A18\u52A0\u5230\u8A2D\u5B9A\u4E2D\u3002 ConfigureTagsDialog.title = \u8A2D\u5B9A\u5206\u652F/\u6A19\u8A18 ConfigureTagsDialog.url = URL: ConfigureTagsFromRepoViewConfigure_Tag_Error_1 = \u8A2D\u5B9A\u6A19\u8A18\u932F\u8AA4 Configure_the_options_used_for_the_SVN_diff_command_20 = \u8A2D\u5B9A SVN diff \u547D\u4EE4\u7684\u9078\u9805 Console.clearOutput = \u6E05\u9664\u8F38\u51FA Console.copy = \u8907\u88FD Console.couldNotFormatTime = \u70BASVN \u7D42\u7AEF\u6A5F\u683C\u5F0F\u5316\u8F38\u51FA\u6642\u9593\u6642\u767C\u751F\u932F\u8AA4 Console.error = \u932F\u8AA4: {0} Console.info = \u8A0A\u606F: {0} Console.postExecutionDelimiter = *** Console.preExecutionDelimiter = *** Console.resultAborted = \u64CD\u4F5C\u5DF2\u53D6\u6D88 {0} Console.resultException = \u5167\u90E8\u932F\u8AA4 {0} \u9020\u6210\u5931\u6557 Console.resultOk = \u78BA\u5B9A {0} Console.resultServerError = {0} {1} Console.resultTimeFormat = ``(\u7E3D\u6642\u9593 ``m:ss:SSS'' ) '' Console.resultWarnings = {0} {1} Console.selectAll = \u5168\u9078 Console.warning = \u8B66\u544A: {0} ConsolePreferencePage.commandColor = \u547D\u4EE4\u5217(&L): ConsolePreferencePage.consoleColorSettings = \u7D42\u7AEF\u6A5F\u6587\u5B57\u984F\u8272\u8A2D\u5B9A: ConsolePreferencePage.errorColor = \u932F\u8AA4(&R): ConsolePreferencePage.font = \u7D42\u7AEF\u6A5F\u5B57\u9AD4\u8A2D\u5B9A: ConsolePreferencePage.highWaterMark = \u63A7\u5236\u53F0\u7DE9\u885D\u5340\u5927\u5C0F\uFF08\u5B57\u5143\uFF09\uFF08&B\uFF09: ConsolePreferencePage.limitOutput = \u9650\u5236\u63A7\u5236\u53F0\u8F38\u51FA(&L) ConsolePreferencePage.messageColor = \u8A0A\u606F(&M): ConsolePreferencePage.showOnError = \u932F\u8AA4\u6642\u5C07SVN\u8F38\u51FA\u986F\u793A\u65BC\u6700\u4E0A\u65B9\u3002 ConsolePreferencePage.showOnMessage = \u5C07SVN\u8F38\u51FA\u986F\u793A\u5728\u7D42\u7AEF\u6A5F\u8996\u666F ConsoleRemoveAction.label = \u95DC\u9589 SVN \u7D42\u7AEF\u6A5F ConsoleRemoveAction.tooltip = \u95DC\u9589 SVN \u7D42\u7AEF\u6A5F ContentAction.Changing_this_setting_will_involve_contacting_the_server_and_may_be_long-running_2 = \u6539\u8B8A\u9019\u9805\u8A2D\u5B9A\u9700\u8981\u8207\u4F3A\u670D\u5668\u9023\u7DDA\uFF0C\u53EF\u80FD\u6703\u82B1\u8F03\u9577\u7684\u6642\u9593\u3002 ContentAction.Confirm_Long_Operation_1 = \u9577\u6642\u9593\u64CD\u4F5C\u78BA\u8A8D Context_14 = \u5167\u6587(&C) CopyAction.copy = \u8907\u88FD CopyAction.nameConflictMessage = \u70BA ``{0}'' \u8F38\u5165\u65B0\u540D\u7A31 CopyAction.nameConflictSame = \u5FC5\u9700\u8F38\u5165\u65B0\u540D\u7A31\u3002 CopyAction.nameConflictTitle = \u540D\u7A31\u885D\u7A81 CopyAction.selectionLabel = \u8907\u88FD\u5230 DateSelectionDialog.april = \u56DB\u6708 DateSelectionDialog.august = \u516B\u6708 DateSelectionDialog.december = \u5341\u4E8C\u6708 DateSelectionDialog.february = \u4E8C\u6708 DateSelectionDialog.friday = \u661F\u671F\u4E94 DateSelectionDialog.january = \u4E00\u6708 DateSelectionDialog.july = \u4E03\u6708 DateSelectionDialog.june = \u516D\u6708 DateSelectionDialog.march = \u4E09\u6708 DateSelectionDialog.may = \u4E94\u6708 DateSelectionDialog.monday = \u661F\u671F\u4E00 DateSelectionDialog.november = \u5341\u4E00\u6708 DateSelectionDialog.october = \u5341\u6708 DateSelectionDialog.saturday = \u661F\u671F\u516D DateSelectionDialog.september = \u4E5D\u6708 DateSelectionDialog.sunday = \u661F\u671F\u65E5 DateSelectionDialog.thursday = \u661F\u671F\u56DB DateSelectionDialog.title = \u9078\u64C7\u65E5\u671F DateSelectionDialog.tuesday = \u661F\u671F\u4E8C DateSelectionDialog.wednesday = \u661F\u671F\u4E09 DiffAction.diff = \u5DEE\u7570 DiffMergePreferencePage.addVariableDialogTitle = \u65B0\u589E\u8B8A\u6578 DiffMergePreferencePage.baseVariableComment = \u5FFD\u7565\u539F\u59CB\u6A94\u6848\u4E2D\u7684\u66F4\u52D5 DiffMergePreferencePage.browse = \u700F\u89BD... DiffMergePreferencePage.builtInMerge = \u5167\u5EFA DiffMergePreferencePage.externalMerge = \u5916\u90E8 DiffMergePreferencePage.mergeProgramGroup = \u5408\u4F75\u5DE5\u5177\u7A0B\u5F0F DiffMergePreferencePage.mergeProgramParameters = \u53C3\u6578: DiffMergePreferencePage.mergeProgramVariables = \u8B8A\u6578: DiffMergePreferencePage.mergedVariableComment = \u8981\u5408\u4F75\u885D\u7A81\u6587\u4EF6\u7684\u4F4D\u7F6E DiffMergePreferencePage.theirsVariableComment = \u6A94\u6848\u5EAB\u4E2D\u7684\u6587\u4EF6 DiffMergePreferencePage.tortoiseMergeComment1 = \u4F7F\u7528 TortoiseMerge \u6642\u7684\u53C3\u6578: DiffMergePreferencePage.tortoiseMergeComment2 = /theirs:"${theirs}" /base:"${base}" /mine:"${yours}" /merged:"${merged}" DiffMergePreferencePage.yoursVariableComment = \u5305\u542B\u672C\u5730\u7AEF\u7684\u8B8A\u66F4 DiffNewFilesDialog.resources = \u9078\u64C7\u7684\u8CC7\u6E90\u5C07\u88AB\u5305\u542B\u5728\u88DC\u7DB4\u6A94\u4E2D DiffNewFilesDialog.title = \u5C07\u672A\u7D0D\u5165\u7248\u672C\u63A7\u7BA1\u7684\u6A94\u6848\u52A0\u5165\u88DC\u7DB4\u6A94\u4E2D Do_nothing_5 = \u7121\u52D5\u4F5C EditConflicts.Label = \u7DE8\u4FEE\u885D\u7A81 EditConflictsAction.errorTitle = \u7DE8\u4FEE\u885D\u7A81 EditConflictsAction.mergeProgramDoesNotExist = \u8A2D\u5B9A\u7684\u5408\u4F75\u5DE5\u5177\u7A0B\u5F0F\u4E0D\u5B58\u5728 EditConflictsAction.noMergeProgramConfigured = \u672A\u8A2D\u5B9A\u5408\u4F75\u5DE5\u5177\u7A0B\u5F0F EditorsAction.classNotInitialized = {0} \u672A\u521D\u59CB\u5316 EditorsDialog.question = \u6A94\u6848\u5DF2\u5728\u7DE8\u8F2F\u4E2D\uFF0C\u4ECD\u8981\u7DE8\u8F2F\u55CE? EditorsDialog.title = \u7DE8\u8F2F\u5668 EditorsView.computer = \u96FB\u8166\u540D\u7A31 EditorsView.date = \u65E5\u671F EditorsView.file = \u6A94\u6848\u540D\u7A31 EditorsView.user = \u4F7F\u7528\u8005\u540D\u7A31 Example__1 = \u7BC4\u4F8B: ExportAction.export = \u532F\u51FA ExportAction.exportTo = \u532F\u51FA\u5230 ExportOperation.0 = \u6B63\u5728\u532F\u51FA {0} ExportOperation.taskName = SVN \u532F\u51FA ExportRemoteFolderAction.directoryDialogText = \u532F\u51FA\u9060\u7AEF\u8CC7\u6599\u593E ExportRemoteFolderDialog.browse = \u700F\u89BD... ExportRemoteFolderDialog.directory = \u532F\u51FA\u76EE\u9304: ExportRemoteFolderDialog.directoryError = \u532F\u51FA\u76EE\u9304\u4E0D\u5B58\u5728 ExportRemoteFolderDialog.repository = \u6A94\u6848\u5EAB ExportRemoteFolderDialog.url = \u6A94\u6848\u5EAB URL ExtMethodPreferencePage_Add_Variable = \u65B0\u589E\u8B8A\u6578(&A) ExtMethodPreferencePage_Browse = \u700F\u89BD(&B)... ExtMethodPreferencePage_Details = \u9078\u64C7\u7A0B\u5F0F\u6216script ExtMethodPreferencePage_SVN_SERVER__7 = SVN \u4F3A\u670D\u5668(&S): ExtMethodPreferencePage_message = \u9019\u4E9B\u8B8A\u6578\u5B9A\u7FA9\u4F7F\u7528 ``ext'' \u9023\u63A5\u985E\u578B\u7684\u5916\u90E8\u9023\u63A5\u7A0B\u5F0F\u3002\r\n\u9019\u4E9B\u503C\u61C9\u8A72\u548C ``ext'' SVN \u547D\u4EE4\u5217\u74B0\u5883\u4E2D\u7684\u8A2D\u5B9A\u76F8\u540C\u3002 FetchMembersOperation.message = \u6B63\u5728\u8B80\u53D6{0}\u7684\u5B50\u968E\u5C64 FetchMembersOperation.taskName = \u8B80\u53D6 {0} \u4E2D... FixTypeAction.fix = \u4FEE\u6B63\u985E\u578B ForceCommitSyncAction.Outgoing_Changes_Not_Added_1 = \u9001\u51FA\u7684\u8B8A\u66F4\u4E0D\u5305\u542B\u65B0\u589E ForceCommitSyncAction.You_have_chosen_to_commit_new_resources_which_have_not_been_added_to_version_control._Do_you_wish_to_add_them_to_version_control_now__2 = \u9001\u4EA4\u7684\u8CC7\u6E90\u4E2D\u5305\u542B\u4E86\u672A\u7D0D\u5165\u7248\u672C\u63A7\u5236\u7684\u65B0\u8CC7\u6E90\u3002\u8981\u628A\u4ED6\u5011\u52A0\u5165\u5230\u7248\u672C\u63A7\u5236\u55CE? GenerateSVNDiff.AdvancedOptions = \u9032\u968E\u8A2D\u5B9A GenerateSVNDiff.Browse = \u700F\u89BD(&O)... GenerateSVNDiff.ConfigureOptions = \u8A2D\u5B9A SVN diff \u547D\u4EE4\u7684\u9078\u9805 GenerateSVNDiff.EnterFilename = \u8F38\u5165\u6709\u6548\u7684\u6A94\u6848\u540D\u7A31\u6216\u662F\u9078\u53D6\u526A\u8CBC\u7C3F\u9078\u9805\u3002 GenerateSVNDiff.FileName = \u6A94\u6848\u540D\u7A31(&F): GenerateSVNDiff.RecurseOption = \u5957\u7528\u5230\u5B50\u8CC7\u6599\u593E(&R) GenerateSVNDiff.SaveInFileSystem = \u5132\u5B58\u81F3\u6A94\u6848\u7CFB\u7D71(&V) GenerateSVNDiff.SaveInWorkspace = \u5132\u5B58\u5728\u5DE5\u4F5C\u5340(&W) GenerateSVNDiff.SavePatchAs = \u5132\u5B58\u88DC\u7DB4\u6A94\u70BA GenerateSVNDiff.SaveToClipboard = \u5132\u5B58\u81F3\u526A\u8CBC\u7C3F GenerateSVNDiff.SelectFolderAndFilename = \u9078\u64C7\u8CC7\u6599\u593E\uFF0C\u518D\u8F38\u5165\u6A94\u6848\u540D\u7A31: GenerateSVNDiff.error = \u57F7\u884C SVN diff \u6642\u767C\u751F\u932F\u8AA4 GenerateSVNDiff.noDiffsFoundMsg = \u672A\u767C\u73FE\u5DEE\u7570 GenerateSVNDiff.noDiffsFoundTitle = SVN diff GenerateSVNDiff.overwriteMsg = \u5B58\u5728\u76F8\u540C\u540D\u7A31\u7684\u6A94\u6848\uFF0C\u8981\u8986\u5BEB\u55CE? GenerateSVNDiff.overwriteTitle = \u8986\u5BEB\u78BA\u8A8D GenerateSVNDiff.pageDescription = SVN diff \u547D\u4EE4\u7684\u8F38\u5165\u7D50\u679C\u53EF\u4F5C\u70BAApply Patch wizard\u7684\u8F38\u5165\u6A94\u6848\u3002 GenerateSVNDiff.pageTitle = \u57F7\u884CSVN diff \u547D\u4EE4\uFF0C\u5C07\u7D50\u679C\u5132\u5B58\u70BA\u6A94\u6848\u3002 GenerateSVNDiff.patchTxt = patch.txt GenerateSVNDiff.title = \u5EFA\u7ACB\u88DC\u7DB4\u6A94 GenerateSVNDiff.working = \u6B63\u5728\u57F7\u884C SVN diff... GetSyncAction.cancelCatchup = \u53D6\u6D88\u4F7F\u7528\u88DC\u7DB4\u6A94\u52D5\u4F5C\u3002 GetSyncAction.catchupAll = \u5F15\u7528\u6240\u6709\u53D6\u56DE\u7684\u8B8A\u66F4\uFF0C\u8986\u5BEB\u6240\u6709\u672C\u5730\u7AEF\u885D\u7A81\u7684\u8B8A\u66F4\u3002 GetSyncAction.catchupPart = \u53EA\u4F7F\u7528\u8207\u672C\u5730\u8B8A\u66F4\u7121\u885D\u7A81\u7684\u8B8A\u66F4\u3002 GetSyncAction.questionCatchup = \u672C\u5730\u7AEF\u8B8A\u66F4\u5C07\u6703\u88AB\u8986\u5BEB\uFF0C\u8981\u5305\u542B\u9019\u4E9B\u885D\u7A81\u7684\u8B8A\u66F4\u55CE? GetSyncAction.titleCatchup = \u5FFD\u7565\u672C\u5730\u5DE5\u4F5C\u5340\u885D\u7A81? GlobalRefreshResourceSelectionPage.1 = \u540C\u6B65 GlobalRefreshResourceSelectionPage.10 = \u5DE5\u4F5C\u96C6(&W): GlobalRefreshResourceSelectionPage.11 = \u9078\u64C7(&C)... GlobalRefreshResourceSelectionPage.12 = \u5168\u9078(&A) GlobalRefreshResourceSelectionPage.13 = \u5168\u90E8\u4E0D\u9078(&D) GlobalRefreshResourceSelectionPage.2 = \u9078\u53D6\u8981\u540C\u6B65\u7684\u8CC7\u6E90\u6216\u662F\u6307\u5B9A\u81EA\u52D5\u9078\u53D6\u7684\u7BC4\u570D\u3002 GlobalRefreshResourceSelectionPage.3 = \u540C\u6B65 GlobalRefreshResourceSelectionPage.4 = \u6C92\u6709\u9700\u8981\u540C\u6B65\u7684\u8CC7\u6E90 GlobalRefreshResourceSelectionPage.5 = \u9700\u8981\u540C\u6B65\u7684\u8CC7\u6E90: GlobalRefreshResourceSelectionPage.6 = \u7BC4\u570D GlobalRefreshResourceSelectionPage.7 = \u5DE5\u4F5C\u5340(&O) GlobalRefreshResourceSelectionPage.8 = \u5DF2\u9078\u53D6\u7684\u8CC7\u6E90(&S) GlobalRefreshResourceSelectionPage.9 = \u95DC\u9589\u7684\u5C08\u6848 GlobalRefreshSubscriberPage.0 = \u672A\u77E5 GroupedByVersionCategory.Versions_1 = \u7248\u672C HistoryDialog.title = \u8CC7\u6E90\u6B77\u53F2\u8A18\u9304 HistoryFilterDialog.author = \u4F5C\u8005(&A): HistoryFilterDialog.comment = \u5305\u542B\u8A3B\u89E3(&C): HistoryFilterDialog.fromDate = \u958B\u59CB\u65E5\u671F(M?D?Y) (&F): HistoryFilterDialog.matchingAll = \u6240\u6709\u689D\u4EF6(&L) HistoryFilterDialog.matchingAny = \u6240\u63D0\u4F9B\u7684\u4EFB\u4E00\u689D\u4EF6(&N) HistoryFilterDialog.showMatching = \u986F\u793A\u76F8\u7B26\u7684\u9805\u76EE: HistoryFilterDialog.title = \u904E\u6FFE\u8CC7\u6E90\u6B77\u7A0B HistoryFilterDialog.toDate = \u7D50\u675F\u65E5\u671F (M/D/Y) (&T): HistorySearchDialog.comment = \ \u8A3B\u91CB HistorySearchDialog.date = \u8D77\u59CB\u65E5\u671F HistorySearchDialog.dateParseErrorMessage = \u65E5\u671F\u683C\u5F0F\u932F\u8AA4 HistorySearchDialog.dateParseErrorTitle = \u65E5\u671F\u89E3\u6790\u932F\u8AA4 HistorySearchDialog.dateSequenceErrorMessage = \u7D50\u675F\u65E5\u671F\u5FC5\u9700\u665A\u65BC\u8D77\u59CB\u65E5\u671F HistorySearchDialog.dateSequenceErrorTitle = \u65E5\u671F\u7BC4\u570D\u932F\u8AA4 HistorySearchDialog.endDateButton = \u9078\u64C7... HistorySearchDialog.fetchLogIfNeeded = \u81EA\u52D5\u9078\u56DE\u641C\u5C0B\u7BC4\u570D\u4E2D\u7684\u65E5\u8A8C(logs) HistorySearchDialog.midDate = \u7D50\u675F\u65E5\u671F HistorySearchDialog.regExp = \u4F7F\u7528\u7279\u6B8A\u6587\u5B57(* = \u4EFB\u4F55\u5B57\u4E32, ? = \u4EFB\u4F55\u5B57\u5143, \\ = \u8DF3\u812B\u5B57\u5143) HistorySearchDialog.resource = \u9078\u53D6\u7684\u8CC7\u6E90 HistorySearchDialog.searchAllLogs = \u641C\u5C0B\u6240\u6709\u65E5\u8A8C HistorySearchDialog.searchTitle = \u641C\u5C0B HistorySearchDialog.startDateButton = \u9078\u64C7... HistorySearchDialog.title = \u641C\u5C0B\u6B77\u7A0B HistorySearchDialog.user = \u4F5C\u8005 HistoryView.[...]_4 = [...] HistoryView.affectedPathsCompressedLayout = \u968E\u5C64\u986F\u793A(&C) HistoryView.affectedPathsFlatLayout = \u5E73\u9762\u986F\u793A(&F) HistoryView.affectedPathsHorizontalLayout = \u6C34\u5E73\u4F48\u5C40(&H) HistoryView.affectedPathsVerticalLayout = \u7279\u76F4\u4F48\u5C40 (&V) HistoryView.author = \u4F5C\u8005 HistoryView.clearSearch = \u6E05\u9664\u641C\u5C0B\u8A18\u9304 HistoryView.comment = \u8A3B\u89E3 HistoryView.confirmRevertRevision = \u4F60\u78BA\u5B9A\u8981\u5FA9\u539F\u6240\u6709\u8B8A\u66F4\u81F3 {0} \u55CE? HistoryView.confirmRevertRevisions = \u771F\u7684\u8981\u5C07\u9019\u500B\u4FEE\u8A02\u7248\u672C\u7684\u6240\u6709\u8B8A\u66F4\u5FA9\u539F\u5230 {0} \u55CE? HistoryView.copy = \u8907\u88FD(&C) HistoryView.createTagFromRevision = \u4EE5\u4FEE\u8A02\u7248\u672C\u5EFA\u7ACB\u5206\u652F/\u6A19\u8A18 HistoryView.date = \u65E5\u671F HistoryView.errorFetchingEntries = \u8B80\u53D6 {0} \u7684\u9805\u76EE\u6642\u767C\u751F\u932F\u8AA4 HistoryView.fetchChangePathJob = \u6B63\u5728\u8B80\u53D6\u53D7\u5F71\u97FF\u7684\u76EE\u9304 HistoryView.fetchHistoryJob = \u8B80\u53D6 SVN \u4FEE\u8A02\u7248\u672C\u6B77\u7A0B HistoryView.getAll = \u53D6\u5F97\u5168\u90E8 HistoryView.getContentsAction = \u53D6\u5F97\u5167\u5BB9(&G) HistoryView.getNext = \u4E0B\u4E00\u500B HistoryView.getRevisionAction = \u53D6\u5F97\u4FEE\u8A02\u7248\u672C(&R) HistoryView.linkWithLabel = \u8207\u7DE8\u8F2F\u5668\u9023\u7D50 HistoryView.overwriteMsg = \u672C\u5730\u7AEF\u5DF2\u6709\u4FEE\u6539\uFF0C\u8981\u8986\u5BEB\u55CE? HistoryView.overwriteOutfile = \u6A94\u6848 ``{0}'' \u5DF2\u5B58\u5728\uFF0C\u8981\u8986\u5BEB\u55CE? HistoryView.overwriteTitle = \u8986\u5BEB\u672C\u5730\u8B8A\u66F4? HistoryView.refresh = \u91CD\u65B0\u6574\u7406\u8996\u666F HistoryView.refreshLabel = \u91CD\u65B0\u6574\u7406\u8996\u666F(&R) HistoryView.revertChangesFromRevision = \u4EE5\u4FEE\u8A02\u7248\u672C {0} \u5FA9\u539F\u8B8A\u66F4 HistoryView.revertChangesFromRevisions = \u5C07\u8B8A\u66F4\u7531\u4FEE\u8A02\u7248\u672C{0} \u5FA9\u539F\u81F3\u4FEE\u8A02\u7248\u672C{1} HistoryView.revision = \u4FEE\u8A02\u7248\u672C HistoryView.search = \u641C\u5C0B\u8A18\u9304 HistoryView.selectAll = \u5168\u9078(&A) HistoryView.setCommitProperties = \u8A2D\u5B9A\u9001\u51FA\u6027\u8CEA(&S) HistoryView.showAffectedPaths = \u986F\u793A\u53D7\u5F71\u97FF\u7684\u76EE\u9304 HistoryView.showComments = \u986F\u793A\u8A3B\u89E3 HistoryView.showDifferences = \u986F\u793A\u55AE\u4E00\u5DEE\u7570\u6A94(diff) HistoryView.stopOnCopy = \u4E2D\u65B7\u8907\u7F6E/\u91CD\u65B0\u547D\u540D HistoryView.tagWithExistingAction = \u4F7F\u7528\u73FE\u6709\u7684\u6A19\u8A18(&T) HistoryView.tags = \u6A19\u8A18 HistoryView.title = SVN \u8CC7\u6E90\u6B77\u7A0B HistoryView.titleWithArgument = SVN \u8CC7\u6E90\u6B77\u7A0B ({0}) HistoryView.wrapComments = \u986F\u793A\u8A3B\u89E3\u6642\u81EA\u52D5\u63DB\u884C Icon_Overlays_24 = \u986F\u793A\u5716\u793A(&I) IgnoreAction.ignore = \u5FFD\u7565\u8CC7\u6E90\u6642\u767C\u751F\u932F\u8AA4 IgnoreOperation.0 = \u5FFD\u7565 {0} IgnoreOperation.taskName = \u5FFD\u7565\u8CC7\u6E90 IgnoreResourcesDialog.addCustomEntryButton = \u81EA\u8A02\u6A23\u5F0F IgnoreResourcesDialog.addCustomEntryExample = \u53EF\u4F7F\u7528\u842C\u7528\u5B57\u5143 ``*'' \u548C ``?''\u3002 IgnoreResourcesDialog.addExtensionEntryButton = \u842C\u7528\u5B57\u5143\u64F4\u5145 IgnoreResourcesDialog.addExtensionEntryExample = \u7BC4\u4F8B: *.so, *.rcfile, bin IgnoreResourcesDialog.addNameEntryButton = \u4F9D\u540D\u7A31\u6392\u5E8F\u8CC7\u6E90 IgnoreResourcesDialog.addNameEntryExample = \u7BC4\u4F8B: file1.so, file2.so, .rcfile, bin IgnoreResourcesDialog.patternDoesNotMatchFile = \u6A23\u5F0F\u8207\u9078\u53D6\u7684\u6240\u6709\u8CC7\u6E90\u90FD\u4E0D\u76F8\u7B26: \u4F8B\u5982: {0} IgnoreResourcesDialog.patternMustNotBeEmpty = \u6A23\u5F0F\u4E0D\u80FD\u662F\u7A7A\u7684 IgnoreResourcesDialog.prompt = \u9078\u53D6\u8981\u65B0\u589E\u81F3 svn:ignore \u5C6C\u6027\u7684\u5167\u5BB9: IgnoreResourcesDialog.titleMany = \u65B0\u589E {0} \u500B\u8CC7\u6E90\u81F3 svn:ignore IgnoreResourcesDialog.titleSingle = \u5C07 {0} \u65B0\u589E\u81F3 svn:ignore ImportFolderDialog.comment = \u8A3B\u89E3: ImportFolderDialog.directory = \u532F\u5165\u76EE\u9304: ImportFolderDialog.recurse = \u5957\u7528\u5230\u5B50\u76EE\u9304 ImportFolderDialog.title = \u532F\u5165\u8CC7\u6599\u593E ImportOperation.0 = \u6B63\u5728\u532F\u5165 {0} ImportOperation.taskName = SVN \u532F\u5165 ListSelectionArea.deselectAll = \u5168\u4E0D\u9078(&D) ListSelectionArea.selectAll = \u5168\u9078(&S) LockDialog.enterComment = \u8F38\u5165\u8A3B\u89E3: LockDialog.resources = \u9019\u4E9B\u8CC7\u6E90\u5C07\u88AB\u9396\u5B9A LockDialog.stealLock = \u5F37\u5236\u9396\u5B9A LockDialog.title = \u9396\u5B9A LockOperation.0 = \u6B63\u5728\u9396\u5B9A {0} LockOperation.taskName = SVN \u9396\u5B9A MarkDeletedAction.label = \u6A19\u8A18\u70BA\u5DF2\u522A\u9664 MarkResolved.label = \u6A19\u8A18\u70BA\u5DF2\u89E3\u6C7A MenuIconsPreferencePage.default = \u9810\u8A2D MenuIconsPreferencePage.iconSet = \u5716\u793A\u96C6 MenuIconsPreferencePage.restart = \u6CE8\u610F: \u4F60\u5FC5\u9700\u91CD\u65B0\u555F\u52D5\u5DE5\u4F5C\u5340\u624D\u80FD\u8B93\u66F4\u52D5\u751F\u6548\u3002 MergeAction.merge = \u5408\u4F75\u904E\u7A0B\u4E2D\u767C\u751F\u932F\u8AA4 MergeAction.saveChanges = \u6709\u672A\u5B58\u6A94\u8B8A\u66F4\uFF0C\u5B58\u6A94\u5F8C\u52D5\u4F5C\u6703\u7E7C\u7E8C\u9032\u884C\u3002 MergeAction.saveChangesTitle = \u5132\u5B58\u8B8A\u66F4 MergeDialog.diff = \u55AE\u4E00\u5DEE\u7570\u6A94 MergeDialog.diffTitle = \u65B0\u589E\u55AE\u4E00\u5DEE\u7570(Unified Diff)\u6A94 MergeDialog.dryRun = \u9810\u89BD MergeDialog.force = \u5F37\u5236 MergeDialog.from = \u539F\u59CB\u8DEF\u5F91: (\u5408\u4F75\u7684\u539F\u59CB\u8DEF\u5F91\u8207\u4FEE\u8A02\u7248\u672C\u7BC4\u570D) MergeDialog.ignoreAncestry = \u5FFD\u7565\u4E0A\u5C64 MergeDialog.invalidFrom = \u539F\u59CB\u8DEF\u5F91\u7684\u4FEE\u8A02\u7248\u672C\u7121\u6548\u3002 MergeDialog.invalidTo = \u76EE\u6A19\u4FEE\u8A02\u7248\u672C\u7121\u6548 MergeDialog.repositoryUrl = \u6A94\u6848\u5EAB\u7684\u8DEF\u5F91: MergeDialog.showLog = \u986F\u793A\u8A18\u9304 MergeDialog.text = \u6307\u5B9A\u5408\u4F75\u7684\u4FEE\u8A02\u7248\u672C\u7BC4\u570D: MergeDialog.title = \u5408\u4F75 MergeDialog.to = \u76EE\u6A19\u8DEF\u5F91: (\u5408\u4F75\u7D50\u679C\u7684\u8DEF\u5F91\u53CA\u4FEE\u8A02\u7248\u672C\u7BC4\u570D) MergeDialog.url = \u5408\u4F75\u4FEE\u6539\u81F3\u76EE\u524D\u7684\u5DE5\u4F5C\u7248\u672C\uFF0C\u76EE\u524D\u5DE5\u4F5C\u7248\u672C\u7684\u6A94\u6848\u5EABURL\u70BA: MergeDialog.urlError = \u7121\u6548\u7684URL MergeDialog.useFrom = \u4F7F\u7528 ``\u539F\u59CB\u8DEF\u5F91'' MergeDialog.workingCopy = \u5132\u5B58\u5408\u4F75\u7D50\u679C\u5230\u5DE5\u4F5C\u526F\u672C: MergeEditorInput.title = \u5408\u4F75 {0} \u8207 {1} MergeOperation.0 = \u6B63\u5728\u5408\u4F75 {0} MergeOperation.taskName = SVN \u5408\u4F75 MergeWizard.end = \u9078\u64C7\u5C07\u5408\u4F75\u66F4\u6539\u7684\u4F4D\u7F6E MergeWizard.preparing = \u6B63\u5728\u6E96\u5099\u5408\u4F75\u7CBE\u9748 MergeWizard.preparingEnd = \u6B63\u5728\u8B80\u53D6\u7D50\u675F\u9801\u6A19\u7C64 MergeWizard.preparingStart = \u6B63\u5728\u8B80\u53D6\u958B\u59CB\u9801\u6A19\u8A18 MergeWizard.start = \u9078\u64C7\u5408\u4F75\u7684\u555F\u59CB\u9EDE MergeWizard.title = \u5408\u4F75 MergeWizardEndPage.branches = \u5206\u652F MergeWizardEndPage.description = \u5305\u542B\u5C07\u8981\u9032\u884C\u5408\u4F75\u7684\u5206\u652F\u6216\u7248\u672C MergeWizardEndPage.duplicateTagSelected = \u6A19\u7C64 {0} \u5DF2\u7D93\u88AB\u6307\u5B9A\u70BA\u958B\u59CB\u6A19\u8A18\uFF0C\u4E0D\u80FD\u91CD\u8907\u9078\u53D6\u3002 MergeWizardStartPage.description = \u5EFA\u7ACB\u5206\u652F\u5F8C\u5C07\u6703\u5EFA\u7ACB\u7684\u7248\u672C ModuleSelectionPage.moduleIsProject = \u4EE5\u5C08\u6848\u540D\u7A31\u4F5C\u70BA\u8CC7\u6599\u593E\u540D\u7A31 ModuleSelectionPage.specifyModule = \u81EA\u884C\u6307\u5B9A\u8CC7\u6599\u593E\u540D\u7A31: ModulesCategory.label = \u6A21\u7D44 MoveRemoteFolderWizard.heading = \u79FB\u52D5/\u91CD\u65B0\u547D\u540D\u9060\u7AEF\u8CC7\u6E90 MoveRemoteResourceWizardMainPage.invalidUrl = \u7121\u6548\u7684 URL MoveRemoteResourceWizardMainPage.resourceName = \u8CC7\u6E90\u7684\u76EE\u6A19\u540D\u7A31: MoveRemoteResourceWizardMainPage.selectParentUrl = \u8F38\u5165\u6216\u9078\u64C7\u4E0A\u4E00\u5C64\u8CC7\u6599\u593E\u7684URL: MoveTagAction.errorMessage = \u5EFA\u7ACB\u6A19\u8A18\u6642\u767C\u751F\u932F\u8AA4 MoveTagAction.message = \u9078\u64C7\u8981\u79FB\u52D5\u7684\u6A19\u8A18(&S): MoveTagAction.title = \u4EE5\u5DF2\u5B58\u5728\u6A19\u8A18\u6A19\u8A18 NewLocationWizard.description = \u5728 SVN \u6A94\u6848\u5EAB\u8996\u666F\u4E2D\u5EFA\u7ACB\u65B0\u7684 SVN \u6A94\u6848\u5EAB NewLocationWizard.exception = \u7121\u6CD5\u5EFA\u7ACB\u6A94\u6848\u5EAB\u4F4D\u7F6E NewLocationWizard.heading = \u65B0\u589E SVN \u6A94\u6848\u5EAB NewLocationWizard.title = \u65B0\u589E SVN \u6A94\u6848\u5EAB NewLocationWizard.validationFailedText = \u6AA2\u67E5\u4F4D\u7F6E\u6642\u767C\u751F\u932F\u8AA4: ``{0}''\r\n\r\n\u4ECD\u8981\u4FDD\u7559\u6B64\u4F4D\u7F6E\u55CE? NewLocationWizard.validationFailedTitle = \u7121\u6CD5\u9A57\u8B49 NewRemoteFolderWizard.heading = \u65B0\u5EFA\u9060\u7AEF\u8CC7\u6599\u593E NewRemoteFolderWizard.title = \u65B0\u5EFA\u9060\u7AEF\u8CC7\u6599\u593E NewRemoteFolderWizardMainPage.folderName = \u8CC7\u6599\u593E\u540D\u7A31: NewRemoteFolderWizardMainPage.invalidUrl = \u7121\u6548\u7684 URL NewRemoteFolderWizardMainPage.selectParentUrl = \u8F38\u5165\u6216\u9078\u53D6\u4E0A\u4E00\u6B21\u8CC7\u6599\u593E\u7684URL OpenActionGroup.openWith = \u958B\u555F\u65B9\u5F0F(&H) OpenChangeSetAction_0 = [{0}] ({1}) OpenChangeSetAction_1 = SVN \u66F4\u52D5 OpenCommitSetAction_20 = \u7528\u6BD4\u8F03\u7DE8\u8F2F\u5668\u958B\u555F\u66F4\u52D5 OpenCommitSetAction_21 = \u7121\u6CD5\u78BA\u5B9A\u6240\u9078\u53D6\u8CC7\u6E90\u7684\u9060\u7AEF\u6A94\u6848\u5EAB\u4F4D\u7F6E OpenLogEntryAction.deleted = \u9078\u53D6\u7684\u4FEE\u7AEF\u7248\u672C\u5DF2\u522A\u9664\uFF0C\u7121\u6CD5\u958B\u555F\u3002 OpenLogEntryAction.deletedTitle = \u8CC7\u6E90\u5DF2\u522A\u9664 Open_the_Synchronize_view_on_the_project_2 = \u958B\u555F\u5C08\u6848\u7684\u540C\u6B65\u8996\u666F PasswordPromptDialog.password = \u5BC6\u78BC: PasswordPromptDialog.repository = \u6A94\u6848\u5EAB: PasswordPromptDialog.save = \u5132\u5B58\u5BC6\u78BC: PasswordPromptDialog.title = \u8F38\u5165\u4F7F\u7528\u8005\u5E33\u865F\u53CA\u5BC6\u78BC PasswordPromptDialog.username = \u4F7F\u7528\u8005\u5E33\u865F: PendingOperationsView.computeStatusJob = \u6B63\u5728\u8A08\u7B97\u5F85\u9001\u51FA\u7684 SVN \u64CD\u4F5C PendingOperationsView.description = \u8AAA\u660E PendingOperationsView.errorComputingStatus = \u8A08\u7B97\u5F85\u9001\u51FA SVN \u64CD\u4F5C\u6642\u767C\u751F\u932F\u8AA4 PendingOperationsView.hasBeenAdded = {0} \u5DF2\u65B0\u589E PendingOperationsView.hasBeenCopied = {0} \u5DF2\u8907\u88FD (\u4F86\u6E90: {1}) PendingOperationsView.hasBeenDeleted = {0} \u5DF2\u522A\u9664 PendingOperationsView.hasBeenModified = {0} \u5DF2\u4FEE\u6539 PendingOperationsView.infolder = \u8CC7\u6599\u593E\u5167 PendingOperationsView.missing = {0} \u4E0D\u5B58\u5728 PendingOperationsView.refresh = \u91CD\u65B0\u6574\u7406\u8996\u666F PendingOperationsView.refreshLabel = \u91CD\u65B0\u6574\u7406(&R) PendingOperationsView.resource = \u8CC7\u6E90 PendingOperationsView.showAddedResources = \u986F\u793A\u65B0\u589E\u7684\u8CC7\u6E90 PendingOperationsView.showDeletedResources = \u986F\u793A\u522A\u9664\u7684\u8CC7\u6E90 PendingOperationsView.showModifiedResources = \u986F\u793A\u4FEE\u6539\u7684\u8CC7\u6E90 PendingOperationsView.titleWithArgument = {0} \u4E2D\u672A\u9001\u51FA\u7684 SVN \u64CD\u4F5C QuestionDialog.save = \u5132\u5B58\u7B54\u6848: RefreshRemoteProjectSelectionPage.noWorkingSet = \u7121\u6CD5\u4F7F\u7528\u5DE5\u4F5C\u96C6(&U) RefreshRemoteProjectSelectionPage.pageDescription = \u986F\u793A\u9700\u8981\u91CD\u65B0\u6574\u7406\u6A19\u8A18\u7684\u5C08\u6848 RefreshRemoteProjectSelectionPage.pageTitle = \u9078\u64C7\u5C08\u6848 RefreshRemoteProjectSelectionPage.selectRemoteProjects = \u9019\u500B\u7CBE\u9748\u5354\u52A9\u4F60\u627E\u51FA\u8207\u9060\u7AEF\u5C08\u6848\u6709\u95DC\u9023\u6027\u7684\u6A19\u8A18\uFF0C\u9078\u53D6\u8981\u91CD\u65B0\u6574\u7406\u7684\u6A19\u8A18(&C) RefreshRemoteProjectSelectionPage.workingSet = \u9078\u64C7\u5DE5\u4F5C\u96C6 (\u7B26\u5408\u7684\u5C08\u6848\u5C07\u6703\u88AB\u9078\u53D6) (&W): RefreshTagsAction.message = \u6A94\u6848\u5EAB ``{0}'' \u4E2D\u6709{1}\u500B\u5C08\u6848\u9700\u8981\u66F4\u65B0\uFF0C\u8981\u7E7C\u7E8C\u55CE? RefreshTagsAction.title = \u66F4\u65B0\u5206\u652F\u53CA\u7248\u672C\u6A19\u8A18? ReleaseCommentDialog.choosePrevious = \u9078\u53D6\u4EE5\u524D\u7684\u8A3B\u8A18(&p): ReleaseCommentDialog.clearTextArea = \u91CD\u8A2D\u8A3B\u8A18(&R) ReleaseCommentDialog.deselectAll = \u53D6\u6D88\u5168\u9078(&E) ReleaseCommentDialog.enterComment = \u7DE8\u8F2F\u9001\u51FA\u8A3B\u8A18(&C): ReleaseCommentDialog.selectAll = \u5168\u9078(&S) ReleaseCommentDialog.title = \u9001\u51FA ReleaseCommentDialog.unaddedResources = \u9078\u53D6\u7684\u8CC7\u6E90\u5C07\u88AB\u52A0\u5165\u81F3 SVN \u7248\u672C\u63A7\u5236(&A)\u3002 RelocateWizard.heading = \u6A94\u6848\u5EAB RelocateWizard.newUrl = \u8F38\u5165\u65B0\u7684 URL RelocateWizard.newUrlLabel = \u65B0 URL: RelocateWizard.projects = \u5C07\u88AB\u91CD\u65B0\u5B9A\u4F4D\u7684\u5C08\u6848: RelocateWizard.title = \u91CD\u65B0\u5B9A\u4F4D RelocateWizard.urlLabel = URL: RelocateWizard.warning = \u78BA\u5B9A\u8981\u91CD\u65B0\u5B9A\u4F4D\u6A94\u6848\u5EAB\u55CE? RelocateWizard.warningMessage1 = \u91CD\u65B0\u5B9A\u4F4D\u547D\u4EE4\u61C9\u8A72\u53EA\u7528\u65BC\u56E0\u4F3A\u670D\u5668IP\u4F4D\u5740\uFF0C\u901A\u8A0A\u5354\u5B9A(\u4F8B\u5982: http:// \u6539\u70BA https://) \u8B8A\u52D5\u6216\u662F\u4F3A\u670D\u5668\u6839\u76EE\u9304\u8A2D\u5B9A\u8B8A\u66F4\u6240\u5C0E\u81F4\u7684\u6A94\u6848\u5EAB\u6839\u76EE\u9304\u6539\u8B8A\u3002 RelocateWizard.warningMessage2 = \u9019\u662F\u4E00\u500B\u5F88\u5C11\u6703\u7528\u5230\u7684\u547D\u4EE4\u3002\u5982\u679C\u4F60\u60F3\u505A\u7684\u662F\u8F49\u79FB\u5230\u5176\u4ED6\u7684\u6A94\u6848\u5EAB\u6216\u662F\u5728\u540C\u4E00\u500B\u6A94\u6848\u5EAB\u4E2D\u5207\u63DB\u5230\u4E0D\u540C\u7684\u5206\u652F\u6216\u76EE\u9304\u6642\uFF0C\u90FD\u4E0D\u8A72\u4F7F\u7528\u9019\u500B\u64CD\u4F5C\u3002\r\n\r\n\u4E0D\u7576\u4F7F\u7528\u91CD\u65B0\u5B9A\u4F4D\u547D\u4EE4\u6703\u640D\u6BC0\u4F60\u7684\u5DE5\u4F5C\u8907\u672C\u3002\u5982\u679C\u4F60\u4E0D\u78BA\u5B9A\u662F\u4E0D\u662F\u61C9\u8A72\u4F7F\u7528\u91CD\u65B0\u5B9A\u4F4D\uFF0C\u8ACB\u67E5\u8A62Help\u6587\u4EF6\u3002 RemoteAnnotationStorage.1 = \u8A08\u7B97\u8CC7\u6E90 {0} \u7684\u6A94\u6848\u985E\u578B\u6642\u767C\u751F\u932F\u8AA4\r\nGlobalRefreshResourceSelectionPage.1=Synchronize RemoteFileEditorInput.fullPathAndRevision = {0} {1} RemoteFolderElement.nameAndTag = {0} {1} RemoteFolderElement_fetchingRemoteMembers.message = \u6B63\u5728\u8B80\u53D6{0}\u7684\u5B50\u968E\u5C64 RemoteResourcePropertiesDialog.author = \u6700\u5F8C\u4FEE\u6539\u8005: RemoteResourcePropertiesDialog.date = \u6700\u5F8C\u4FEE\u6539\u65E5\u671F: RemoteResourcePropertiesDialog.info = \u8A0A\u606F: RemoteResourcePropertiesDialog.lockComment = \u9396\u5B9A\u8A3B\u91CB: RemoteResourcePropertiesDialog.lockCreated = \u9396\u5B9A\u65E5\u671F: RemoteResourcePropertiesDialog.lockOwner = \u9396\u5B9A\u4EBA: RemoteResourcePropertiesDialog.properties = \u6027\u8CEA: RemoteResourcePropertiesDialog.property = \u6027\u8CEA: RemoteResourcePropertiesDialog.revision = \u6700\u65B0\u4FEE\u8A02\u7248\u672C: RemoteResourcePropertiesDialog.title = \u6027\u8CEA RemoteResourcePropertiesDialog.url = URL: RemoteResourcePropertiesDialog.value = \u503C RemoteRootAction.Projects_in_the_local_workspace_are_shared_with__2 = \u5DE5\u4F5C\u5340\u4E2D\u7684\u5C08\u6848\u5DF2\u5171\u4EAB\u65BC {0}\uFF0C\u5FC5\u9700\u4E2D\u6B62\u6240\u6709\u5DE5\u4F5C\u5340\u4E2D\u5C08\u6848\u8207\u6B64\u4F4D\u7F6E\u9023\u7D50\u5F8C\u624D\u80FD\u522A\u9664\u4F4D\u7F6E\u3002 RemoteRootAction.The_projects_that_are_shared_with_the_above_repository_are__4 = \u5171\u4EAB\u81F3\u4E0A\u8FF0\u6A94\u6848\u5EAB\u7684\u5C08\u6848: RemoteRootAction.Unable_to_Discard_Location_1 = \u7121\u6CD5\u522A\u9664\u4F4D\u7F6E RemoteRootAction.label = \u522A\u9664\u4F4D\u7F6E RemoteViewPart.workingSetToolTip = \u5DE5\u4F5C\u96C6: {0} RemoveRootAction.removeRoot = \u522A\u9664\u4F4D\u7F6E\u6642\u767C\u751F\u932F\u8AA4 RemoveRootAction.removeRoot_3 = RemoveRootAction.removeRoot ReplaceOperation.0 = \u6B63\u5728\u53D6\u4EE3 {0} ReplaceOperation.taskName = SVN \u53D6\u4EE3 ReplaceWithAction.calculatingDirtyResources = \u6B63\u5728\u5C0B\u4EE3\u9001\u51FA\u7684\u8B8A\u66F4... ReplaceWithAction.confirmOverwrite = \u78BA\u8A8D\u8986\u5BEB ReplaceWithAction.localChanges = {0} \u5177\u6709\u5C07\u88AB\u8986\u5BEB\u7684\u672C\u5730\u7AEF\u66F4\u52D5\uFF0C\u8981\u7E7C\u7E8C\u55CE? ReplaceWithLatestAction.multipleBranches = \u5206\u652F\u4E2D\u7684\u6700\u65B0\u4FEE\u8A02\u7248\u672C(&L) ReplaceWithLatestAction.multipleTags = \u6A94\u6848\u5EAB\u4E2D\u7684\u6700\u65B0\u4FEE\u8A02\u7248\u672C(&L) ReplaceWithLatestAction.multipleVersions = \u6A94\u6848\u5EAB\u4E2D\u7684\u7248\u672C (&V) ReplaceWithLatestAction.singleBranch = \u5206\u652F {0} \u4E2D\u7684\u6700\u65B0\u7248\u672C (&L) ReplaceWithLatestAction.singleHEAD = {0} \u7684\u6700\u65B0\u7248\u672C(&L) ReplaceWithLatestAction.singleVersion = \u7248\u672C {0} (&V) ReplaceWithRemoteAction.problemMessage = \u4EE5\u6A94\u6848\u5EAB\u4E2D\u6700\u65B0\u4FEE\u8A02\u7248\u672C\u53D6\u4EE3\u6642\u767C\u751F\u932F\u8AA4 ReplaceWithRemoteAction.replacing = \u6B63\u5728\u53D6\u4EE3 ReplaceWithRevisionAction.replace = \u53D6\u4EE3 (&R) ReplaceWithRevisionAction.title = \u4EE5\u4FEE\u8A02\u7248\u672C\u53D6\u4EE3 ReplaceWithTagAction.message = \u4EE5\u5206\u652F/\u7248\u672C\u53D6\u4EE3 ReplaceWithTagAction.mixingTags = \u4F60\u5728\u4E00\u500B\u5C08\u6848\u4E2D\u6DF7\u7528\u6A19\u8A18\u3002 \u9019\u53EF\u80FD\u6703\u9020\u6210\u8207\u6A94\u6848\u5EAB\u540C\u6B65\u6642\u7684\u6DF7\u4E82\u3002\u8CC7\u6E90\u5728\u540C\u6B65\u6642\u6703\u900F\u904E\r\n\u6A19\u8A18\u8CC7\u8A0A\u4F86\u6C7A\u5B9A\u7528\u4F86\u8207\u672C\u5730\u7AEF\u4F5C\u6BD4\u8F03\u7684\u9060\u7AEF\u8CC7\u6E90\u3002\u4F8B\u5982\uFF0C\u5982\u679C\u4F7F\u7528\u7248\u672C\u6A19\u8A18\uFF0C\u90A3\u9019\u4E9B\u52A0\u4E0A\r\n\u6A19\u8A18\u7684\u8CC7\u6E90\u5C07\u6C38\u9060\u4E0D\u6703\u8B8A\u52D5\uFF0C\u56E0\u6B64\uFF0C\u4F60\u4E0D\u6703\u770B\u5230\u4EFB\u4F55\u5728 HEAD (\u6216\u5176\u4ED6\u5206\u652F) \u4E0A\u6240\u4F5C\u7684\u66F4\u52D5\uFF0C\r\n\u4F60\u78BA\u5B9A\u8981\u7E7C\u7E8C\u55CE? ReplaceWithTagAction.replace = \u4EE5\u6A19\u8A18\u53D6\u4EE3\u6642\u767C\u751F\u932F\u8AA4 ReplaceWithTagAction.replacing = \u6B63\u5728\u4EE5\u6A19\u8A18 {0} \u53D6\u4EE3 RepositoriesView.CannotGetRevision = \u7121\u6CD5\u53D6\u5F97\u4FEE\u8A02\u7248\u672C RepositoriesView.NItemsSelected = \u5DF2\u9078\u53D6 {0} \u500B\u9805\u76EE RepositoriesView.OneItemSelected = \u5DF2\u9078\u53D6 1 \u500B\u9805\u76EE RepositoriesView.ResourceInRepository = {1} \u4E2D\u7684 {0} RepositoriesView.collapseAll = Collapse All RepositoriesView.collapseAllTooltip = Collapse All RepositoriesView.deselectWorkingSet = \u53D6\u6D88\u5168\u9078\u5DE5\u4F5C\u96C6 RepositoriesView.editWorkingSet = \u7DE8\u8F2F\u76EE\u524D\u7684\u5DE5\u4F5C\u96C6... RepositoriesView.new = \u6A94\u6848\u5EAB\u4F4D\u7F6E(&R)... RepositoriesView.newAnonSVN = \u533F\u540D\u6A94\u6848\u5EAB\u4F4D\u7F6E dev.eclipse.org... RepositoriesView.newSubmenu = \u65B0\u589E(&N) RepositoriesView.newWorkingSet = \u9078\u64C7\u5DE5\u4F5C\u96C6... RepositoriesView.refresh = \u91CD\u65B0\u6574\u7406\u8996\u666F (&R) RepositoriesView.refreshPopup = \u66F4\u65B0 RepositoriesView.refreshTooltip = \u91CD\u65B0\u6574\u7406\u8996\u666F RepositoriesView.workingSetMenuItem = {0} {1} RepositoriesViewContentHandler.errorCreatingRoot = \u5617\u8A66\u5EFA\u7ACB\u6A94\u6848\u5EAB ``{0}'' \u6642\u767C\u751F\u932F\u8AA4\u3002 RepositoriesViewContentHandler.missingAttribute = \u53D6\u8B80\u6A94\u6848\u5EAB\u8A2D\u5B9A\u6A94\u6642\u767C\u751F\u932F\u8AA4: \u6A19\u8A18 ``{0}'' \u7684\u5FC5\u8981\u6027\u8CEA ``{1}'' \u4E0D\u5B58\u5728\u3002 RepositoriesViewContentHandler.unmatchedTag = \u8B80\u53D6\u6A94\u6848\u5EAB\u8A2D\u5B9A\u6A94\u6642\u767C\u751F\u932F\u8AA4: \u6A19\u8A18 ``{0}'' \u6C92\u6709\u5C0D\u61C9\u7684\u7D50\u675F\u6A19\u8A18\u3002 RepositoryDialog.description = \u9078\u64C7\u5C08\u6848\u8981\u9023\u7D50\u63A5\u7684\u6A94\u6848\u5EAB RepositoryDialog.getRepository = \u9078\u64C7\u6A94\u6848\u5EAB RepositoryManager.addErrorNotAssociated = \u90E8\u4EFD\u8CC7\u6E90\u6C92\u6709\u8207\u5171\u4EAB\u7684\u5C08\u6848\u6709\u95DC\u806F\u3002 RepositoryManager.adding = \u65B0\u589E\u4E2D RepositoryManager.committing = \u9001\u51FA\u4E2D RepositoryManager.deleting = \u522A\u9664\u4E2D RepositoryManager.getting = \u8B80\u53D6\u4E2D RepositoryManager.ioException = \u8B80\u53D6\u72C0\u614B\u6A94\u6642\u767C\u751F I/O \u4F8B\u5916\u3002 RepositoryManager.parsingProblem = \u89E3\u6790\u6A94\u6848 ``{0}'' \u6642\u767C\u751F\u932F\u8AA4\u3002 RepositoryManager.rename = \u91CD\u65B0\u547D\u540D\u72C0\u614B\u6A94\u6642\u767C\u751F I/O \u4F8B\u5916\u3002 RepositoryManager.save = \u5132\u5B58\u72C0\u614B\u6A94\u6642\u767C\u751F I/O \u4F8B\u5916\u3002 RepositoryManager.updating = \u66F4\u65B0\u4E2D RepositoryRoot.folderInfoMissing = \u672C\u6A5F\u8CC7\u6599\u593E ``{0}'' \u6C92\u6709\u9069\u7576\u7684\u5C0D\u61C9\u5230\u9060\u7AEF\u8CC7\u6599\u593E\u3002 RepositorySelectionPage.description = \u9019\u500B\u7CBE\u9748\u5E6B\u52A9\u60A8\u5C07\u6A94\u6848\u5171\u4EAB\u81F3 SVN \u6A94\u6848\u5EAB\u3002\u60A8\u7684\u5C08\u6848\u5C07\u81EA\u52D5\u7684\u532F\u5165\u81F3 SVN \u6A94\u6848\u5EAB\u4E2D\uFF0C\u9001\u51FA\u5C0D\u8A71\u6846\u5C07\u6703\u8DF3\u51FA\u4EE5\u4F9B\u60A8\u9001\u51FA\u60A8\u7684\u8CC7\u6E90\u3002 RepositorySelectionPage.useExisting = \u4F7F\u7528\u73FE\u6709\u7684\u6A94\u6848\u5EAB\u4F4D\u7F6E(&U: RepositorySelectionPage.useNew = \u5EFA\u7ACB\u65B0\u7684\u6A94\u6848\u5EAB\u4F4D\u7F6E(&C) ResolveAction.error = \u89E3\u6C7A\u885D\u7A81\u5931\u6557 ResolveOperation.0 = \u6A19\u8A18 {0} \u70BA\u5DF2\u89E3\u6C7A ResolveOperation.taskName = \u6A19\u8A18\u70BA\u5DF2\u89E3\u6C7A ResourcePropertiesPage.checkedIn = Checked In ResourcePropertiesPage.checkedOut = Checked Out ResourcePropertiesPage.error = \u932F\u8AA4 ResourcePropertiesPage.notManaged = \u672A\u7D0D\u5165 SVN \u63A7\u7BA1 ResourcePropertiesPage.notVersioned = \u672A\u7D0D\u5165\u7248\u672C\u63A7\u5236 ResourcePropertiesPage.state = \u72C0\u614B ResourcePropertiesPage.status = \u72C0\u614B ResourcePropertiesPage.versioned = \u5DF2\u7D0D\u5165\u7248\u672C\u63A7\u7BA1 RestoreFromRepositoryAction.noFilesMessage = \u5728\u6A94\u6848\u5EAB\u8CC7\u6599\u593E ``{0}'' \u4E2D\u627E\u4E0D\u5230\u522A\u9664\u7684\u6A94\u6848\u3002 RestoreFromRepositoryAction.noFilesTitle = \u627E\u4E0D\u5230\u522A\u9664\u7684\u6A94\u6848 RestoreFromRepositoryFileSelectionPage.emptyRevisionPane = \u9078\u53D6\u6A94\u6848\u7684\u9060\u7AEF\u4FEE\u8A02\u7248\u672C: RestoreFromRepositoryFileSelectionPage.fileContentPaneTitle = ``{2}'' \u88E1\u7684 {0} {1} RestoreFromRepositoryFileSelectionPage.fileExists = \u6A94\u6848 ``{0}'' \u5DF2\u5B58\u5728\u3002 RestoreFromRepositoryFileSelectionPage.fileSelectionPaneTitle = {0} - \u9078\u53D6\u8981\u9084\u539F\u7684\u6A94\u6848: RestoreFromRepositoryFileSelectionPage.fileToRestore = {0} ({1} \u5C07\u88AB\u9084\u539F) RestoreFromRepositoryFileSelectionPage.revisionSelectionPaneTitle = {0} - \u9078\u64C7\u8981\u9084\u539F\u7684\u4FEE\u8A02\u7248\u672C: RestoreFromRepositoryWizard.fileSelectionPageDescription = \u70BA\u6BCF\u500B\u6587\u4EF6\u9078\u64C7\u8981\u9084\u539F\u7684\u4FEE\u8A02\u7248\u672C\u3002 RestoreFromRepositoryWizard.fileSelectionPageTitle = \u4EE5\u6A94\u6848\u5EAB\u9084\u539F RevertAction.error = \u5FA9\u539F\u5931\u6557 RevertDialog.multiple = \u9078\u53D6\u4E86\u591A\u500B\u8DEF\u5F91 RevertDialog.resources = \u9078\u53D6\u7684\u8CC7\u6E90\u5C07\u88AB\u5FA9\u539F\u3002 RevertDialog.title = \u5FA9\u539F RevertDialog.url = URL: RevertOperation.0 = \u5FA9\u539F\u8B8A\u66F4\u81F3 {0} RevertOperation.taskName = \u5FA9\u539F\u8B8A\u66F4 Run_update_4 = \u9032\u884C\u66F4\u65B0 S&how_is_added_27 = \u65B0\u589E\u7684\u8CC7\u6E90(&C) SSHPromptDialog.authentication = \u8A8D\u8B49 SSHPromptDialog.browse = \u700F\u89BD... SSHPromptDialog.invalidPortMessage = \u8ACB\u8F38\u5165\u6709\u6548\u7684\u9023\u63A5\u57E0\u6578\u5B57 SSHPromptDialog.invalidPortTitle = \u9023\u63A5\u57E0\u932F\u8AA4 SSHPromptDialog.keyauth = \u4F7F\u7528\u500B\u4EBA\u79C1\u9470\u8A8D\u8B49 SSHPromptDialog.keyfile = \u79C1\u9470\u6A94\u6848: SSHPromptDialog.passphrase = \u5BC6\u78BC: SSHPromptDialog.passwordauth = \u4F7F\u7528\u5BC6\u78BC\u8A8D\u8B49 SSHPromptDialog.port = \u9023\u63A5\u57E0: SSHPromptDialog.save = \u5132\u5B58 SSHPromptDialog.title = \u8F38\u5165 SSH \u8A8D\u8B49 SSLPromptDialog.certificate = \u7528\u6236\u7AEF\u8A8D\u8B49: SSLPromptDialog.title = \u8A2D\u5B9ASSL\u7528\u6236\u7AEF\u8A8D\u8B49 SVNAction.disabledMessage = \u4E0D\u5141\u8A31\u9078\u53D6\u7684\u64CD\u4F5C SVNAction.disabledTitle = \u8A0A\u606F SVNAction.errorTitle = \u767C\u751F\u932F\u8AA4 SVNAction.mixingTags = You are mixing tags within a project. Beware that synchronization uses the tag information associated with each resource to determine the remote resource with which the local resource is compared. \r\n\r\nThis means that the part(s) of your project that you are replacing with another tag will be synchronized with the tag ''{0}'' while other resources in the project will be synchronized with another tag. \r\n\r\nDo you wish to continue? SVNAction.mixingTagsTitle = \u78BA\u8A8D\u6DF7\u7528\u6A19\u8A18 SVNAction.multipleProblemsMessage = \u767C\u751F\u4E86\u591A\u500B\u554F\u984C: SVNAction.refreshMultipleQuestion = {0} \u8981\u91CD\u65B0\u6574\u7406\u5305\u542B\u9078\u53D6\u8CC7\u6E90\u7684\u5C08\u6848\u55CE? SVNAction.refreshQuestion = {0} \u8981\u91CD\u65B0\u6574\u7406\u5C08\u6848 ``{0}'' \u55CE? SVNAction.refreshTitle = \u91CD\u65B0\u6574\u7406\u5C08\u6848? SVNAction.warningTitle = \u767C\u751F\u8B66\u544A SVNAddResolutionGenerator.Add_Resource_and_Children_to_SVN_2 = \u5C07\u8CC7\u6E90\u53CA\u5176\u5B50\u8CC7\u6E90\u65B0\u589E\u81F3 SVN SVNAddResolutionGenerator.Add_Resource_to_SVN_1 = \u65B0\u589E\u8CC7\u6E90\u81F3 SVN SVNAddResolutionGenerator.Add_to_.svnignore_3 = \u65B0\u589E\u81F3 .svnSVNignore SVNAnnotateBlock.line = \u884C SVNAnnotateBlock.lines = \u884C SVNAnnotateBlock.userRevision = {0} {1} ({2} {3}) SVNAnnotateView.showFileAnnotation = SVN \u8A3B\u91CB - {0} SVNAnnotateView.viewInstructions = \u9019\u500B\u8996\u666F\u986F\u793A SVN \u4E2D\u6A94\u6848\u7684\u8A3B\u91CB\u3002\u9078\u53D6\u4E00\u500B\u6A94\u6848\uFF0C\u7136\u5F8C\u81EA\u9078\u55AE\u4E2D\u9078\u64C7``Team'' -> ``\u986F\u793A\u8A3B\u91CB''\u3002 SVNCatchupReleaseViewer.No_workspace_file_1 = \u7121\u5DE5\u4F5C\u5340\u6A94\u6848 SVNCatchupReleaseViewer.Select_&Outgoing_Additions_1 = \u9078\u53D6\u65B0\u8CC7\u6E90(&U) SVNCatchupReleaseViewer.addAction = \u65B0\u589E\u81F3\u7248\u672C\u63A7\u7BA1(&A) SVNCatchupReleaseViewer.commit = \u9001\u51FA(&C) SVNCatchupReleaseViewer.commonFile = \u901A\u7528\u6A94\u6848 : {0} SVNCatchupReleaseViewer.commonFileRevision = \u901A\u7528\u6A94\u6848: {0} {1} SVNCatchupReleaseViewer.confirmMerge = \u6A19\u8A18\u70BA\u5DF2\u5408\u4F75(&G) SVNCatchupReleaseViewer.fileDecoration = {0} ({1}) SVNCatchupReleaseViewer.folderDecoration = {0} {1} SVNCatchupReleaseViewer.forceCommit = \u8986\u84CB\u53CA\u9001\u51FA (&M) SVNCatchupReleaseViewer.forceUpdate = \u8986\u84CB\u548C\u66F4\u65B0(&P) SVNCatchupReleaseViewer.ignore = \u65B0\u589E\u81F3 svn:ignore (&D) SVNCatchupReleaseViewer.labelWithSyncKind = {0} {1} SVNCatchupReleaseViewer.mergeUpdate = \u5408\u4F75\u8B8A\u66F4\u81F3\u672C\u6A5F\u526F\u672C(&M) SVNCatchupReleaseViewer.noCommonFile = \u7121\u901A\u7528\u6A94\u6848 SVNCatchupReleaseViewer.noRepositoryFile = \u7121\u6A94\u6848\u5EAB\u6A94\u6848 SVNCatchupReleaseViewer.repositoryFile = \u6A94\u6848\u5EAB\u6A94\u6848: {0} SVNCatchupReleaseViewer.repositoryFileRevision = \u6A94\u6848\u5EAB\u6A94\u6848: {0} {1} [{2}] SVNCatchupReleaseViewer.showInHistory = \u5728\u6A94\u6848\u5EAB\u6B77\u7A0B\u4E2D\u986F\u793A (&R) SVNCatchupReleaseViewer.update = \u81EA\u6A94\u6848\u5EAB\u66F4\u65B0(&U) SVNCatchupReleaseViewer.workspaceFile = \u5DE5\u4F5C\u5340\u6A94\u6848: {0} SVNCompareEditorInput.branchLabel = <\u5206\u652F - {0}> SVNCompareEditorInput.comparing = \u6BD4\u8F03\u4E2D ... SVNCompareEditorInput.different = \u7121\u6CD5\u6BD4\u8F03\u4E0D\u540C\u985E\u578B\u7684\u8CC7\u6E90\u3002 SVNCompareEditorInput.headLabel = SVNCompareEditorInput.inBranch = {0} \u5167\u7684 {1} SVNCompareEditorInput.inHead = HEAD \u5167\u7684 {0} SVNCompareEditorInput.noRepositoryFile = \u7121\u6A94\u6848\u5EAB\u6A94\u6848 SVNCompareEditorInput.noWorkspaceFile = \u7121\u5DE5\u4F5C\u5340\u6A94\u6848 SVNCompareEditorInput.repository = \u6A94\u6848\u5EAB: {0} {1} SVNCompareEditorInput.titleAncestor = \u6BD4\u8F03 {0} {1} - {2} \u548C {3} SVNCompareEditorInput.titleNoAncestor = \u6BD4\u8F03 {0} {1} \u548C {2} SVNCompareEditorInput.titleNoAncestorDifferent = \u6BD4\u8F03 {0} {1} \u548C {2} {3} SVNCompareEditorInput.workspace = \u5DE5\u4F5C\u5340: {0} SVNCompareEditorInput.workspaceLabel = <\u5DE5\u4F5C\u5340> SVNCompareRevisionsInput.addToWorkspace = \u53D6\u5F97 SVNCompareRevisionsInput.compareResourceAndVersions = \u6BD4\u8F03 {0} <\u5DE5\u4F5C\u7A7A\u9593> \u548C\u7248\u672C SVNCompareRevisionsInput.errorReplacingMessage = \u7121\u6CD5\u8F09\u5165\u8CC7\u6E90\uFF0C\u53EF\u80FD\u767C\u751F\u4E86\u901A\u8A0A\u932F\u8AA4\uFF0C\u6216\u662F\u8CC7\u6E90\u4E26\u4E0D\u5B58\u5728\u4F3A\u670D\u5668\u4E0A\uFF0C\u6216\u662F\u4F60\u4E26\u6C92\u6709\u5B58\u53D6\u8CC7\u6E90\u7684\u6B0A\u9650\u3002 SVNCompareRevisionsInput.errorReplacingTitle = \u7121\u6CD5\u53D6\u4EE3 SVNCompareRevisionsInput.repository = \u6A94\u6848\u5EAB\u6A94\u6848: {0} SVNCompareRevisionsInput.structureCompare = \u6BD4\u8F03\u7D50\u69CB SVNCompareRevisionsInput.truncate = {0} [...] SVNCompareRevisionsInput.workspace = \u5DE5\u4F5C\u5340\u6A94\u6848 : {0} SVNConflicts = \u885D\u7A81\u7684 SVN \u66F4\u65B0 SVNDecorator.fileDecorationNoTag = {0} [{1}] SVNDecorator.fileDecorationWithTag = {0} [{1}:{2}] SVNDecorator.folderDecoration = {0} [{1}] SVNDecorator.projectDecoration = {0} [{1}] SVNDecorator.projectDecorationWithTag = {0} [{1} {2}] SVNDecoratorPreferencesPage.AddVariables = \u65B0\u589E\u8B8A\u6578 SVNDecoratorPreferencesPage.addVariables = \u65B0\u589E\u8B8A\u6578(&V)... SVNDecoratorPreferencesPage.authorVariable = \u4F5C\u8005\u540D\u7A31: SVNDecoratorPreferencesPage.colorsAndFontsLink = \u9078\u53D6"{0}" \u53EF\u4EE5\u8A2D\u5B9A\u5B57\u9AD4\u548C\u984F\u8272 SVNDecoratorPreferencesPage.computeDeep = \u905E\u8FF4\u8A08\u7B97\u5B50\u8CC7\u6599\u593E\u4E2D\u7684\u9001\u51FA\u72C0\u614B(&C) (\u53D6\u6D88\u6B64\u9805\u8A2D\u5B9A\u53EF\u4EE5\u6539\u5584\u4FEE\u98FE\u7684\u6548\u80FD) SVNDecoratorPreferencesPage.dateVariable = \u6700\u65B0\u66F4\u52D5 SVNDecoratorPreferencesPage.description = SVN \u4FEE\u98FE\u8A2D\u5B9A: SVNDecoratorPreferencesPage.externalResources = \u6A19\u793A\u5916\u90E8\u8CC7\u6E90(&E) SVNDecoratorPreferencesPage.fileFormat = \u6A94\u6848\u683C\u5F0F(&F): SVNDecoratorPreferencesPage.flagAddedVariable = \u8868\u793A\u5DF2\u7D93\u8CC7\u6E90\u52A0\u5165\u4F3A\u670D\u5668\u7684\u65D7\u6A19 SVNDecoratorPreferencesPage.flagDirtyVariable = \u8868\u793A\u6A94\u6848\u542B\u6709\u9001\u51FA\u8B8A\u66F4\u7684\u65D7\u6A19 SVNDecoratorPreferencesPage.flagExternalVariable = \u8868\u793A\u5916\u90E8\u8CC7\u6599\u593E\u7684\u65D7\u6A19 SVNDecoratorPreferencesPage.folderFormat = \u8CC7\u6599\u593E\u683C\u5F0F (&O): SVNDecoratorPreferencesPage.generalDescription = \u8A2D\u5B9A SVN \u4FEE\u98FE\u7684\u901A\u7528\u5C6C\u6027: SVNDecoratorPreferencesPage.generalTabFolder = \u901A\u7528(&G) SVNDecoratorPreferencesPage.iconDescription = \u9078\u53D6\u8981\u4F7F\u7528\u5716\u793A\u4FEE\u98FE\u7684 SVN \u8CC7\u6E90\u72C0\u614B: SVNDecoratorPreferencesPage.labelDecorationAdded = ``\u5DF2\u65B0\u589E''\u7684\u4FEE\u98FE\u7B26\u865F(&T): SVNDecoratorPreferencesPage.labelDecorationExternal = ``\u5916\u90E8\u8CC7\u6E90''\u7684\u4FEE\u98FE\u7B26\u865F (&E): SVNDecoratorPreferencesPage.labelDecorationOutgoing = ``\u9001\u51FA''\u7684\u4FEE\u98FE\u7B26\u865F(&L): SVNDecoratorPreferencesPage.labelDecorationsLink = \u53C3\u8003"{0}"\u4EE5\u555F\u7528SVN\u4FEE\u98FE SVNDecoratorPreferencesPage.nameResourceVariable = \u4FEE\u98FE\u7684\u8CC7\u6E90\u540D\u7A31 SVNDecoratorPreferencesPage.newResources = \u65B0\u589E\u8CC7\u6E90(&N) SVNDecoratorPreferencesPage.preview = \u9810\u89BD: SVNDecoratorPreferencesPage.projectFormat = \u5C08\u6848\u4FEE\u98FE(&P): SVNDecoratorPreferencesPage.remoteLocationLabel = \u9060\u7AEF\u6A94\u6848\u5EAB\u6A19\u7C64 SVNDecoratorPreferencesPage.remoteLocationVariable = \u9060\u7AEF\u6A94\u6848\u5EAB\u7684URL SVNDecoratorPreferencesPage.remoteLocationVariableShort = \u6A94\u6848\u5EAB\u4E2D\u7684\u7D55\u5C0D\u8DEF\u5F91 SVNDecoratorPreferencesPage.revisionResourceVariable = \u5DF2\u8F09\u5165\u4E0A\u4E00\u500B\u4FEE\u8A02\u7248\u672C\u81F3\u5DE5\u4F5C\u5340 SVNDecoratorPreferencesPage.selectFormats = \u9078\u53D6\u6A94\u6848\u3001\u8CC7\u6599\u593E\u548C\u5C08\u6848\u7684\u6587\u4EF6\u4FEE\u98FE\u683C\u5F0F : SVNDecoratorPreferencesPage.selectVariablesToAdd = \u9078\u53D6\u8981\u52A0\u81F3\u4FEE\u98FE\u683C\u5F0F\u7684\u8B8A\u6578(&V): SVNDecoratorPreferencesPage.showSyncInfoInLabel = \u5728\u8CC7\u6E90\u7684\u6587\u5B57\u4FEE\u98FE\u4E2D\u986F\u793A\u6240\u6709\u7684\u540C\u6B65\u8CC7\u8A0A\u3002 SVNDecoratorPreferencesPage.synchronizeDescription = \u8A2D\u5B9A\u540C\u6B65\u8996\u666F\u7684 SVN \u4FEE\u98FE\u7684\u5C6C\u6027 SVNDecoratorPreferencesPage.synchronizeTabFolder = \u540C\u6B65\u8996\u666F(&Y) SVNDecoratorPreferencesPage.textLabel = \u672C\u6587(&E) SVNDecoratorPreferencesPage.useFontDecorators = \u4F7F\u7528\u5B57\u9AD4\u53CA\u984F\u8272\u4FEE\u98FE (\u53D6\u6D88\u672C\u529F\u80FD\u53EF\u4EE5\u6539\u5584\u6548\u80FD) SVNFilePropertiesPage.baseRevision = \u57FA\u790E\u4FEE\u8A02\u7248\u672C: SVNFilePropertiesPage.baseTimestamp = \u57FA\u790E\u6642\u9593\u6233\u8A18 SVNFilePropertiesPage.date = {0} (\u65E5\u671F) SVNFilePropertiesPage.dirty = Dirty: SVNFilePropertiesPage.error = \u5EFA\u7ACB\u9801\u9762\u6642\u767C\u751F\u932F\u8AA4\u3002 SVNFilePropertiesPage.ignored = \u6A94\u6848\u5DF2\u88AB SVN \u5FFD\u7565\u3002 SVNFilePropertiesPage.isAdded = \u6A94\u6848\u5DF2\u7D0D\u5165 SVN \u63A7\u7BA1\uFF0C\u4F46\u5C1A\u672A\u9001\u51FA\u3002 SVNFilePropertiesPage.modified = \u5DF2\u4FEE\u6539: SVNFilePropertiesPage.none = (none) SVNFilePropertiesPage.notAvailable = \u4E0D\u53EF\u4F7F\u7528 SVNFilePropertiesPage.notManaged = \u6A94\u6848\u672A\u7D0D\u5165 SVN \u63A7\u7BA1\u3002 SVNFilePropertiesPage.permissions = \u6B0A\u9650: SVNFilePropertiesPage.version = {0} (\u7248\u672C) SVNFolderPropertiesPage.disconnect = \u4E2D\u65B7\u9023\u7D50(&D)... SVNFolderPropertiesPage.disconnectQuestion = \u4E2D\u65B7\u8CC7\u6599\u593E\u8207 SVN \u63A7\u7BA1\u5C07\u6703\u522A\u9664\u8CC7\u6599\u593E\u7684 SVN \u540C\u6B65\u8CC7\u8A0A\uFF0C\u4F60\u78BA\u5B9A\u8981\u4E2D\u65B7\u55CE? SVNFolderPropertiesPage.disconnectTitle = \u4E2D\u65B7\u8CC7\u6599\u593E\u9023\u7D50? SVNFolderPropertiesPage.ignored = \u8CC7\u6599\u593E\u5DF2\u88AB SVN \u5FFD\u7565\u3002 SVNFolderPropertiesPage.notManaged = \u8CC7\u6599\u593E\u672A\u53D7 SVN \u63A7\u7BA1\u3002 SVNFolderPropertiesPage.repository = \u6A94\u6848\u5EAB\u8DEF\u5F91: SVNFolderPropertiesPage.root = \u6A94\u6848\u5EAB\u6839\u76EE\u9304: SVNFolderPropertiesPage.static = \u975C\u614B: SVNLocalCompareEditorInput.title = SVN \u6BD4\u8F03 [{0}] SVNOperation.0 = {0}/{1}\u500B\u64CD\u4F5C\u767C\u751F\u932F\u8AA4 SVNOperationCancelledException.operationCancelled = \u64CD\u4F5C\u5DF2\u53D6\u6D88 SVNPreferencePage.&Never_2 = \u5F9E\u4E0D(&N) SVNPreferencePage.&Prompt_3 = \u63D0\u793A(&R) SVNPreferencePage.Auto-&save_4 = \u81EA\u52D5\u5B58\u6A94(&A) SVNPreferencePage.Save_dirty_editors_before_SVN_operations_1 = \u57F7\u884C SVN \u64CD\u4F5C\u524D\u81EA\u52D5\u5132\u5B58\u672A\u5B58\u6A94\u7684\u7DE8\u8F2F\u5668 SVNPreferencePage.browseDirectory = \u700F\u89BD... SVNPreferencePage.calculateDeepDecoration = \u8A08\u7B97\u5B50\u76EE\u9304\u4E2D\u7684 SVN \u4FEE\u98FE\u7B26\u865F(\u6162) SVNPreferencePage.commandLineNotAvailable = \u7121\u6CD5\u4F7F\u7528\u547D\u4EE4\u5217\u4ECB\u9762\uFF0C\u8ACB\u6AA2\u67E5\u74B0\u5883\u8B8A\u6578\u8A2D\u5B9A\u3002 SVNPreferencePage.compressionLevel = \u58D3\u7E2E\u7B49\u7D1A(&L): SVNPreferencePage.configurationLocation = \u8A2D\u5B9A\u4F4D\u7F6E: SVNPreferencePage.considerContentsInCompare = \u6BD4\u8F03\u6642\u8003\u616E\u6A94\u6848\u5167\u5BB9(&S) SVNPreferencePage.defaultTextKSubst = \u66FF\u63DB\u9810\u8A2D\u95DC\u9375\u5B57: SVNPreferencePage.description = \u4E00\u822C SVN \u8A2D\u5B9A: SVNPreferencePage.determineVersionEnabled = \u7B2C\u4E00\u6B21\u9023\u7D50\u6642\u9A57\u8B49\u4F3A\u670D\u5668\u76F8\u5BB9\u6027(&V) SVNPreferencePage.fetchChangePathOnDemand = \u81EA\u52D5\u8B80\u53D6\u53D7\u5F71\u97FF\u7684\u8DEF\u5F91 SVNPreferencePage.isNotSvnConfigDir = \u9078\u53D6\u7684\u76EE\u9304\u4E0D\u662F SVN \u8A2D\u5B9A\u76EE\u9304\u3002 SVNPreferencePage.javaSvnNotAvailable = \u7121\u6CD5\u4F7F\u7528SVNKit \u4ECB\u9762\uFF0C\u8ACB\u6AA2\u67E5\u74B0\u5883\u8A2D\u5B9A\u3002 SVNPreferencePage.javahlNotAvailable = \u7121\u6CD5\u4F7F\u7528JavaHL \u4ECB\u9762\uFF0C\u8ACB\u6AA2\u67E5\u74B0\u5883\u8A2D\u5B9A\u3002 SVNPreferencePage.javasvn = SVNKit (\u7D14Java) SVNPreferencePage.level0 = 0 (\u4E0D\u58D3\u7E2E) SVNPreferencePage.level1 = 1 (\u6700\u5C0F\u58D3\u7E2E) SVNPreferencePage.level2 = 2 SVNPreferencePage.level3 = 3 SVNPreferencePage.level4 = 4 SVNPreferencePage.level5 = 5 SVNPreferencePage.level6 = 6 SVNPreferencePage.level7 = 7 SVNPreferencePage.level8 = 8 SVNPreferencePage.level9 = 9 (\u6700\u5927\u58D3\u7E2E) SVNPreferencePage.logEntriesToFetch = \u9810\u8A2D\u65E5\u8A8C\u8A0A\u606F\u6578 (0=\u5168\u90E8) SVNPreferencePage.notquiet = \u986F\u793A\u8A73\u7D30\u8A0A\u606F SVNPreferencePage.pruneEmptyDirectories = \u6E05\u9664\u7A7A\u76EE\u9304(&P) SVNPreferencePage.quietness = \u5B89\u975C\u7B49\u7D1A(&Q): SVNPreferencePage.reallyquiet = \u975E\u5E38\u5B89\u975C SVNPreferencePage.removeOnReplace = \u53D6\u4EE3\u6642\u522A\u9664\u672A\u7D0D\u5165\u7248\u672C\u63A7\u7BA1\u7684\u8CC7\u6E90(&R) SVNPreferencePage.replaceUnmanaged = \u53D6\u4EE3\u6642\u522A\u9664\u672A\u7D0D\u5165\u63A7\u7BA1\u7684\u8CC7\u6E90(&D) SVNPreferencePage.repositoriesAreBinary = \u5C07\u65B0\u589E\u6587\u4EF6\u8996\u70BA\u4E8C\u9032\u4F4D\u6587\u4EF6(&T) SVNPreferencePage.selectUnadded = \u9001\u4EA4\u6642\u9078\u53D6\u672A\u7D0D\u5165\u7248\u672C\u63A7\u7BA1\u7684\u8CC7\u6E90(&U) SVNPreferencePage.showAddRemoveMarkers = \u986F\u793A\u5DF2\u522A\u9664\u6A94\u6848\u6A19\u8A18\u7B26\u865F(&M) SVNPreferencePage.showCompareMergeInSync = \u4EE5\u5C0D\u8A71\u6846\u986F\u793A\u4FEE\u8A02\u7248\u672C\u6BD4\u8F03(&C) SVNPreferencePage.showOutOfDateFolders = \u986F\u793A\u904E\u671F\u76EE\u9304 SVNPreferencePage.showTags = \u5728\u9060\u7AEF\u6B77\u7A0B\u8996\u666F\u986F\u793A\u6A19\u8A18 SVNPreferencePage.showUnadded = \u9001\u51FA\u6642\u986F\u793A\u672A\u7D0D\u5165\u7248\u672C\u63A7\u7BA1\u7684\u8CC7\u6E90 SVNPreferencePage.silentWarningMessage = \u5728``\u975E\u5E38\u5B89\u975C''\u6A21\u793A\u6642\uFF0C\u67D0\u4E9B SVN \u4F3A\u670D\u5668\u53EF\u80FD\u4E0D\u6703\u50B3\u9001\u5DF2\u767C\u751F\u7684\u932F\u8AA4\u7684\u91CD\u8981\u8CC7\u8A0A\u3002\u56E0\u6B64\uFF0C\u60A8\u53EF\u4EE5\u8003\u616E\u4F7F\u7528 ``\u6BD4\u8F03\u5B89\u975C'' \u6A21\u793A\u3002 SVNPreferencePage.silentWarningTitle = ``\u975E\u5E38\u5B89\u975C'' \u6A21\u5F0F\u6703\u6709\u5371\u96AA\u3002 SVNPreferencePage.somewhatquiet = \u6BD4\u8F03\u5B89\u975C SVNPreferencePage.svnClientInterface = SVN \u4ECB\u9762: SVNPreferencePage.svnConfigDirDoesNotExist = SVN \u8A2D\u5B9A\u76EE\u9304\u4E0D\u5B58\u5728 SVNPreferencePage.svncommandline = SVN \u547D\u4EE4\u5217 SVNPreferencePage.svnjavahl = JavaHL (JNI) SVNPreferencePage.timeoutValue = \u901A\u8A0A\u903E\u6642(\u79D2) (&C) SVNPreferencePage.useDefaultConfigLocation = \u4F7F\u7528\u9810\u8A2D\u8A2D\u5B9A\u4F4D\u7F6E SVNPreferencePage.useDirectoryConfig = \u4F7F\u7528\u76EE\u9304: SVNPreferencePage.useQuickdiffAnnotateGroup = \u5C0D\u672C\u5730\u7AEF\u6A94\u6848\u4F7F\u7528\u5FEB\u901F\u6BD4\u8F03\u8A3B\u8A18\u6A21\u793A SVNPreferencesPage.Timeout_must_be_a_number_2 = \u903E\u6642\u8A2D\u5B9A\u5FC5\u9808\u662F\u500B\u6578\u5B57 SVNPreferencesPage.Timeout_must_not_be_negative_1 = \u903E\u6642\u8A2D\u5B9A\u4E0D\u80FD\u662F\u8CA0\u6578 SVNProjectPropertiesPage.Change_Sharing_5 = \u8B8A\u66F4\u5171\u4EAB(&C)... SVNProjectPropertiesPage.Select_a_Repository_1 = \u9078\u53D6\u6A94\u6848\u5EAB SVNProjectPropertiesPage.Select_a_SVN_repository_location_to_share_the_project_with__2 = \u9078\u53D6\u8207\u8981\u5171\u4EAB\u5C08\u6848\u76F8\u5BB9\u7684 SVN \u6A94\u6848\u5EAB\u4F4D\u7F6E: SVNProjectPropertiesPage.You_can_change_the_sharing_of_this_project_to_another_repository_location._However,_this_is_only_possible_if_the_new_location_is___compatible___(on_the_same_host_with_the_same_repository_path)._1 = \u4F60\u53EF\u4EE5\u5C07\u9019\u500B\u5C08\u6848\u66F4\u6539\u70BA\u5171\u4EAB\u5230\u5176\u4ED6\u7684\u6A94\u6848\u5EAB\uFF0C\u524D\u63D0\u662F\u65B0\u7684\u4F4D\u7F6E\u5FC5\u9700\u662F``\u76F8\u5BB9'\u7684'' (\u5728\u540C\u4E00\u53F0\u4F3A\u670D\u5668\u7684\u540C\u4E00\u500B\u6A94\u6848\u5EAB\u8DEF\u5F91) SVNProjectPropertiesPage.clearReadOnly = \u5C07\u6240\u6709\u6587\u4EF6\u8A2D\u70BA\u53EF\u5BEB\u5165 SVNProjectPropertiesPage.configureForWatchEdit = \u5145\u8A31``\u67E5\u770B/\u7DE8\u8F2F''\u5C08\u6848 SVNProjectPropertiesPage.connectionType = \u9023\u63A5\u985E\u578B: SVNProjectPropertiesPage.fetchAbsentDirectoriesOnUpdate = \u66F4\u65B0\u6642\u8B80\u53D6\u7F3A\u5C11\u6216\u65B0\u5EFA\u7684\u76EE\u9304(&F) SVNProjectPropertiesPage.progressTaskName = \u6B63\u5728\u66F4\u65B0\u5C08\u6848\u7684 SVN \u5C6C\u6027 SVNProjectPropertiesPage.setReadOnly = \u5C07\u6240\u6709\u6A94\u6848\u8A2D\u70BA\u552F\u8B80 SVNProjectPropertiesPage.user = \u4F7F\u7528\u8005: SVNProjectSetSerializer.Confirm_Overwrite_Project_8 = \u78BA\u8A8D\u8986\u5BEB\u5C08\u6848 SVNProjectSetSerializer.The_project_{0}_already_exists._Do_you_wish_to_overwrite_it__9 = \u5C08\u6848 {0} \u5DF2\u5B58\u5728\uFF0C\u8981\u8986\u5BEB\u55CE? SVNPromptUserPassword.authentication = SVN \u8A8D\u8B49 SVNPropertiesPage.connectionType = \u9023\u7D50\u985E\u578B(&C): SVNPropertiesPage.defaultPort = \u9810\u8A2D SVNPropertiesPage.host = \u4E3B\u6A5F(&H): SVNPropertiesPage.module = \u8CC7\u6599\u593E: SVNPropertiesPage.password = \u5BC6\u78BC(&P): SVNPropertiesPage.path = \u6A94\u6848\u5EAB\u8DEF\u5F91: SVNPropertiesPage.update = \u4FEE\u6539\u6A19\u8A18(&T): SVNPropertiesPage.user = \u4F7F\u7528\u8005(&U): SVNPropertiesPage.virtualModule = <\u6C92\u6709\u5C0D\u61C9\u7684\u9060\u7AEF\u8CC7\u6599\u593E> SVNPropertyDeleteAction = SVNPropertyDeleteAction.confirmMultiple = \u78BA\u5B9A\u8981\u522A\u9664\u9019 {0} \u500B\u5C6C\u6027? SVNPropertyDeleteAction.confirmSingle = \u78BA\u5B9A\u8981\u522A\u9664 ``{0}'' ? SVNPropertyDeleteAction.delete = \u522A\u9664\u5C6C\u6027\u6642\u767C\u751F\u554F\u984C SVNPropertyDeleteAction.title = \u522A\u9664\u5C6C\u6027\u78BA\u8A8D SVNPropertyModifyAction.modify = \u8A2D\u5B9A\u5C6C\u6027\u6642\u767C\u751F\u554F\u984C SVNPropertyPage.added = \u5DF2\u65B0\u589E SVNPropertyPage.changedAuthor = \u6700\u5F8C\u4FEE\u6539\u8005 SVNPropertyPage.changedDate = \u6700\u5F8C\u4FEE\u6539\u65E5\u671F SVNPropertyPage.changedRevision = \u6700\u5F8C\u4FEE\u8A02\u7248\u672C SVNPropertyPage.copied = \u5DF2\u8907\u88FD SVNPropertyPage.copiedFrom = URL \u8907\u88FD\u65BC SVNPropertyPage.deleted = \u5DF2\u522A\u9664 SVNPropertyPage.ignored = \u5DF2\u5FFD\u7565 SVNPropertyPage.lockComment = \u9396\u5B9A\u8A3B\u89E3 SVNPropertyPage.lockCreationDate = \u9396\u5B9A\u5EFA\u7ACB\u65E5\u671F SVNPropertyPage.lockOwner = \u9396\u5B9A\u6240\u6709\u8005 SVNPropertyPage.managed = \u5DF2\u7BA1\u7406 SVNPropertyPage.merged = \u5DF2\u5408\u4F75 SVNPropertyPage.modified = \u5DF2\u4FEE\u6539 SVNPropertyPage.path = \u8DEF\u5F91 SVNPropertyPage.revision = \u4FEE\u8A02\u7248\u672C SVNPropertyPage.status = \u72C0\u614B SVNPropertyPage.switched = Switched SVNPropertyPage.url = URL SVNPropertyPage.wcLocked = Working copy locked SVNRefreshRemoteProjectWizard.title = \u66F4\u65B0\u5206\u652F SVNRemoteFilePropertySource.author = \u4F5C\u8005 SVNRemoteFilePropertySource.comment = \u8A3B\u89E3 SVNRemoteFilePropertySource.date = \u65E5\u671F SVNRemoteFilePropertySource.name = \u540D\u7A31 SVNRemoteFilePropertySource.revision = \u4FEE\u8A02\u7248\u672C SVNRemoteFolderPropertySource.name = \u540D\u7A31 SVNRemoteFolderPropertySource.none = (\u7121) SVNRemoveResloutionGenerator.Commit_Deletion_to_SVN_1 = \u9001\u4EA4\u522A\u9664\u5230 SVN SVNRemoveResloutionGenerator.No_local_history_available._Try_undoing_from_the_server_3 = \u672C\u6A5F\u7121\u6B77\u53F2\u8A18\u9304\uFF0C\u5690\u8A66\u4EE5\u4F3A\u670D\u5668\u8CC7\u8A0A\u4F86\u53D6\u6D88\u7DE8\u8F2F\u3002 SVNRemoveResloutionGenerator.Undo_Deletion_from_Local_History_2 = \u7531\u672C\u6A5F\u6B77\u7A0B\u53D6\u6D88\u522A\u9664 SVNRemoveResloutionGenerator.Undo_Deletion_from_SVN_Server_4 = \u4EE5 SVN \u4F3A\u670D\u5668\u8CC7\u6599\u53D6\u6D88\u522A\u9664 SVNRemoveResolutionGenerator.Commit_Deletion_to_SVN_1 = \u5C07\u522A\u9664\u9001\u51FA\u5230 SVN SVNRemoveResolutionGenerator.No_local_history_available._Try_undoing_from_the_server_3 = \u7121\u672C\u6A5F\u6B77\u7A0B\uFF0C\u5617\u8A66\u4EE5\u4F3A\u670D\u5668\u8CC7\u8A0A\u53D6\u6D88\u7DE8\u8F2F\u3002 SVNRemoveResolutionGenerator.Undo_Deletion_from_Local_History_2 = \u4EE5\u672C\u6A5F\u6B77\u7A0B\u53D6\u6D88\u522A\u9664 SVNRemoveResolutionGenerator.Undo_Deletion_from_SVN_Server_4 = \u4EE5 SVN \u4F3A\u670D\u5668\u53D6\u6D88\u522A\u9664 SVNRepositoryLocationPropertySource.default = \u9810\u8A2D SVNRepositoryLocationPropertySource.host = \u4F3A\u670D\u5668 SVNRepositoryLocationPropertySource.method = \u9023\u63A5\u65B9\u5F0F SVNRepositoryLocationPropertySource.root = \u6839\u76EE\u9304 SVNRepositoryLocationPropertySource.user = \u4F7F\u7528\u8005 SVNRepositoryPropertiesPage.Confirm_Project_Sharing_Changes_1 = \u78BA\u8A8D\u5C08\u6848\u5171\u4EAB\u8B8A\u66F4 SVNRepositoryPropertiesPage.There_are_projects_in_the_workspace_shared_with_this_repository_2 = \u5DE5\u4F5C\u5340\u4E2D\u5DF2\u6709\u5171\u4EAB\u5230\u9019\u500B\u6A94\u6848\u5EAB\u7684\u5C08\u6848\uFF0C\u9019\u4E9B\u5C08\u6848\u5C07\u6703\u4EE5\u4F60\u8F38\u5165\u7684\u8CC7\u8A0A\u66F4\u65B0\u3002 SVNRepositoryPropertiesPage.browseRootUrl = \u700F\u89BD... SVNRepositoryPropertiesPage.login = \u767B\u5165: SVNRepositoryPropertiesPage.password = \u5BC6\u78BC: SVNRepositoryPropertiesPage.repositoryRootUrl = \u6A94\u6848\u5EAB\u6839 URL: SVNRepositoryPropertiesPage.repositoryUrl = \u6A94\u6848\u5EAB URL: SVNRepositoryPropertiesPage.rootUrlWarning = \u5982\u679C\u4F60\u7684\u6A94\u6848\u5EAB URL \u662F http://mycompany.com/repository/trunk/project,\r\n\u90A3\u4F60\u7684\u6A94\u6848\u5EAB\u6839 URL \u61C9\u8A72\u662F http://mycompany.com/repository\u3002 SVNRepositoryPropertiesPage.sharedProject = \u5171\u4EAB\u65BC {0} \u7684\u5C08\u6848: SVNRepositoryPropertiesPage.useCustomLabel = \u4F7F\u7528\u81EA\u8A02\u6A19\u7C64: SVNRepositoryPropertiesPage.useDefaultProgramName = \u9810\u671F\u7531\u4F3A\u670D\u5668\u50B3\u56DE\u7684\u6587\u5B57\u8A0A\u606F\u4EE5\u9810\u8A2D\u7684\u7A0B\u5F0F\u540D\u7A31 ``SVN'' \u958B\u982D\u3002(&D) SVNRepositoryPropertiesPage.useLocationAsLabel = \u4F7F\u7528\u6A94\u6848\u5EAB\u6A19\u8B58\u5B57\u4E32\u4F5C\u70BA\u6A19\u7C64(&R) SVNRepositoryPropertiesPage.useProgramName = \u9810\u671F\u81EA\u5B9A\u7684\u7A0B\u5F0F\u540D\u7A31(&P): SVNRepositoryPropertiesPage.useRepositoryUrlAsLabel = \u4F7F\u7528\u6A94\u6848\u5EAB URL \u4F5C\u70BA\u6A19\u7C64 SVNSyncCompareInput.confirmMergeMessage = \u8B8A\u66F4\u5DF2\u5B58\u6A94\uFF0C\u52D5\u4F5C\u5B8C\u6210\u5F8C\uFF0C\u8ACB\u9078\u53D6``\u6A19\u8A18\u70BA\u5DF2\u5408\u4F75'' \u5C07\u6B64\u6A94\u6848\u6A19\u8A18\u70BA\u5F85\u9001\u51FA\u7684\u8B8A\u66F4\u3002 SVNSyncCompareInput.confirmMergeMessageTitle = \u8A0A\u606F SVNSyncCompareInput.filteringOutgoingChanges = \u6B63\u5728\u6536\u96C6\u6709\u5F85\u9001\u4EA4\u8A0A\u606F\u7684\u8CC7\u6E90 SVNSyncCompareInput.projectDeleted = \u672C\u5730\u7AEF\u5DF2\u522A\u9664 ``{0}'' \u5C08\u6848\uFF0C\u7121\u6CD5\u540C\u6B65\u3002 SVNSyncSet.conflicts = {0} \u500B\u885D\u7A81 SVNSyncSet.incomings = {0} \u500B\u50B3\u5165\u7684\u8B8A\u66F4\uFF0C SVNSyncSet.new = {0} \u500B\u65B0\u8CC7\u6E90\u3002 SVNSyncSet.noConflicts = \u7121\u885D\u7A81\uFF0C SVNSyncSet.noIncomings = \u7121\u50B3\u5165\u8B8A\u66F4\uFF0C SVNSyncSet.noNew = \u7121\u65B0\u8CC7\u6E90\u3002 SVNSyncSet.noOutgoings = \u7121\u9001\u51FA\u8B8A\u66F4\uFF0C SVNSyncSet.outgoings = {0} \u500B\u9001\u51FA\u7684\u8B8A\u66F4\uFF0C SVNUIPlugin.refreshMultipleQuestion = {0} \u8981\u91CD\u65B0\u6574\u7406\u9078\u53D6\u7684\u8CC7\u6E90\u55CE? SVNUIPlugin.refreshQuestion = {0} \u8981\u91CD\u65B0\u6574\u7406 ``{1}'' \u55CE? SVNUIPlugin.refreshTitle = \u91CD\u65B0\u6574\u7406\u8CC7\u6E90? SVNWorkingSetFolderSelectionPage.duplicateWorkingSetName = \u63D0\u5B9A\u7684\u5DE5\u4F5C\u96C6\u540D\u7A31\u91CD\u8907\u3002 SVNWorkingSetFolderSelectionPage.invalidWorkingSetName = \u540D\u7A31\u53EA\u80FD\u5305\u542B\u6587\u5B57\u53CA\u6578\u5B57\u3002 SVNWorkingSetFolderSelectionPage.mustSelectFolder = \u81F3\u5C11\u8981\u9078\u53D6\u4E00\u500B\u8CC7\u6599\u593E SVNWorkingSetFolderSelectionPage.name = \u5DE5\u4F5C\u96C6(&W): SVNWorkingSetFolderSelectionPage.projectSelectionPageDescription = \u8F38\u5165\u5DE5\u4F5C\u96C6\u540D\u7A31\u4E26\u9078\u53D6\u8CC7\u6599\u593E\u3002 SVNWorkingSetFolderSelectionPage.projectSelectionPageTitle = SVN \u5DE5\u4F5C\u96C6 SVNWorkingSetFolderSelectionPage.refresh = \u91CD\u65B0\u6574\u7406\u5167\u5BB9 (&R) SVNWorkingSetFolderSelectionPage.treeLabel = \u5DE5\u4F5C\u96C6\u5167\u5BB9 (&S): SetCommitPropertiesDialog.0 = \u672A\u8F38\u5165 {0}\uFF0C\u8981\u7E7C\u7E8C\u9001\u4EA4\u55CE? SetCommitPropertiesDialog.noAuthor = \u672A\u8F38\u5165\u4F5C\u8005\u3002\u5FC5\u9700\u8F38\u5165\u4FEE\u8A02\u7248\u672C\u7684\u4F5C\u8005\u3002 SetCommitPropertiesDialog.revisionNumber = \u8A2D\u5B9A\u4FEE\u8A02\u7248\u672C {0} \u7684\u4FEE\u8A02\u7248\u672C\u8A3B\u91CB SetCommitPropertiesDialog.title = \u8A2D\u5B9A\u4FEE\u8A02\u7248\u672C\u5C6C\u6027 SetCommitPropertiesDialog.user = \u4F5C\u8005: SetSvnPropertyAction.set = \u8A2D\u5B9A\u6027\u8CEA\u6642\u767C\u751F\u554F\u984C SetSvnPropertyDialog.anotherPropertyHasSameName = \u5C6C\u6027\u540D\u7A31\u5DF2\u5B58\u5728\u3002 SetSvnPropertyDialog.boolean = \u5C6C\u6027\u503C\u5FC5\u9700\u662F true \u6216 false\u3002 SetSvnPropertyDialog.browse = \u700F\u89BD... SetSvnPropertyDialog.enterTextProperty = \u8F38\u5165\u6587\u5B57\u5C6C\u6027 SetSvnPropertyDialog.fileDoesNotExist = \u9078\u53D6\u7684\u6A94\u6848\u4E0D\u5B58\u5728\u3002 SetSvnPropertyDialog.number = \u5C6C\u6027\u503C\u5FC5\u9700\u662F\u6578\u5B57 SetSvnPropertyDialog.propertyContent = \u5C6C\u6027\u5167\u5BB9 SetSvnPropertyDialog.propertyName = \u5C6C\u6027\u540D\u7A31: SetSvnPropertyDialog.recurseRequired = \u5C6C\u6027\u4E0D\u9069\u7528\u65BC\u8CC7\u6599\u593E\u3002\u9078\u53D6"\u905E\u8FF4\u8A2D\u5B9A\u5C6C\u6027"\u5C07\u5C6C\u6027\u8A2D\u5B9A\u5230\u6240\u6709\u5B50\u6A94\u6848\u3002 SetSvnPropertyDialog.setPropertyRecursively = \u905E\u8FF4\u8A2D\u5B9A\u5C6C\u6027 SetSvnPropertyDialog.shellText = \u8A2D\u5B9A svn \u5C6C\u6027 SetSvnPropertyDialog.url = \u5C6C\u6027\u503C\u5FC5\u9700\u662F\u5408\u6CD5\u7684 URL SetSvnPropertyDialog.useFile = \u4F7F\u7528\u6A94\u6848 SharingWizard.0 = \u540C\u6B65\u4E2D SharingWizard.1 = \u6B63\u5728\u540C\u6B65 {0} SharingWizard.autoConnectOneOTitle = \u5C07 Eclipse 1.0 \u4E2D\u7684\u5C08\u6848\u9023\u63A5\u5230\u6A94\u6848\u5EAB SharingWizard.autoConnectTitle = \u5C07\u5C08\u6848\u9023\u7D50\u5230\u6A94\u6848\u5EAB SharingWizard.autoConnectTitleDescription = \u5DF2\u5728\u5C08\u6848\u4E2D\u8A2D\u5B9A SVN \u6A94\u6848\u5EAB\u8CC7\u8A0A\u3002 SharingWizard.browse = \u700F\u89BD... SharingWizard.cannotExist = URL \u4E2D\u6307\u5B9A\u7684\u8CC7\u6599\u593E\u5DF2\u5B58\u5728 SharingWizard.couldNotImport = \u9060\u7AEF\u5C08\u6848\u5DF2\u5B58\u5728 SharingWizard.couldNotImportLong = \u8CC7\u6599\u593E ``{0}'' \u5DF2\u5B58\u5728\u6A94\u6848\u5EAB\uFF0C\u5FC5\u9700\u4F7F\u7528\u65B0\u7684\u8CC7\u6599\u593E\u540D\u7A31\u3002 SharingWizard.description = \u5C07\u5C08\u6848\u8A2D\u5B9A\u70BA\u4F7F\u7528 SVN SharingWizard.enterInformation = \u8F38\u5165\u6A94\u6848\u5EAB\u4F4D\u7F6E\u8CC7\u8A0A SharingWizard.enterInformationDescription = \u9023\u63A5\u5230\u5DF2\u5B58\u5728\u7684 SVN \u6A94\u6848\u5EAB\u9700\u8981\u5148\u5B9A\u7FA9\u4F4D\u7F6E\u53CA\u901A\u8A0A\u5354\u5B9A\u3002 SharingWizard.enterModuleName = \u8F38\u5165\u8CC7\u6599\u593E\u540D\u7A31 SharingWizard.enterModuleNameDescription = \u9078\u53D6 SVN \u6A94\u6848\u5EAB\u4E2D\u8CC7\u6599\u593E\u540D\u7A31\u3002 SharingWizard.heading = \u5C07\u5C08\u6848\u8A2D\u5B9A\u70BA\u4F7F\u7528 SVN SharingWizard.importTitle = \u5C07\u5C08\u6848\u5171\u4EAB\u81F3 SVN \u6A94\u6848\u5EAB SharingWizard.importTitleDescription = \u9078\u53D6\u5DF2\u5B58\u5728\u7684\u6A94\u6848\u5EAB\u4F4D\u7F6E\u6216\u662F\u5EFA\u7ACB\u65B0\u4F4D\u7F6E\u3002 SharingWizard.initialImport = \u521D\u59CB\u532F\u5165 SharingWizard.readyToFinish = \u5373\u5C07\u958B\u59CB\u5171\u4EAB\u5C08\u6848 SharingWizard.readyToFinishDescription = \u9078\u53D6``\u5B8C\u6210'', \u5C07\u5C08\u6848\u532F\u5165\u81F3 SVN \u6A94\u6848\u5EAB\u4E2D\u3002 SharingWizard.selectTag = \u9078\u53D6\u540C\u6B65\u6642\u7684\u6A19\u8A18(&S): SharingWizard.selectTagTitle = \u9078\u53D6\u6A19\u8A18 SharingWizard.title = \u5171\u4EAB\u5C08\u6848 SharingWizard.url = URL: SharingWizard.validationFailedText = {0}, \u4ECD\u8981\u8A2D\u5B9A\u5C08\u6848\u5171\u4EAB\u55CE? SharingWizard.validationFailedTitle = \u7121\u6CD5\u9A57\u8B49 SharingWizardFinishPage.message = \u9019\u500B\u7CBE\u9748\u5305\u542B\u5C07\u5C08\u6848\u5171\u4EAB\u81F3 SVN \u6A94\u6848\u5EAB\u6240\u9700\u7684\u6240\u6709\u8A0A\u606F\u3002\u7576\u4F60\u6309\u4E0B``\u5B8C\u6210''\uFF0C\u7CBE\u9748\u5C07\u6703\u5C07\u5C08\u6848\u532F\u5165\u5230\u6A94\u6848\u5EAB\u4E2D\u4E26\u958B\u555F\u9001\u51FA\u5C0D\u8A71\u6846\u8B93\u4F60\u9001\u51FA\u4F60\u7684\u8CC7\u6E90\u3002 Sho&w_outgoing_25 = \u9001\u51FA\u8B8A\u66F4(&G) ShowDifferencesAsUnifiedDiffDialog.branchTag = \u8207\u5206\u652F/\u6A19\u8A18\u6BD4\u8F03 ShowDifferencesAsUnifiedDiffDialog.browse = \u700F\u89BD... ShowDifferencesAsUnifiedDiffDialog.compareFrom = \u6BD4\u8F03\u4F86\u6E90: ShowDifferencesAsUnifiedDiffDialog.compareTo = \u6BD4\u8F03\u5C0D\u8C61: ShowDifferencesAsUnifiedDiffDialog.compareType = \u6BD4\u8F03\u985E\u578B: ShowDifferencesAsUnifiedDiffDialog.diff = \u5132\u5B58\u55AE\u4E00\u5DEE\u7570\u8F38\u51FA\u6A94: ShowDifferencesAsUnifiedDiffDialog.file = \u8F38\u51FA\u6A94\u6848: ShowDifferencesAsUnifiedDiffDialog.fileDialogText = \u9078\u53D6\u55AE\u4E00\u5DEE\u7570\u8F38\u51FA\u6A94\u6848: ShowDifferencesAsUnifiedDiffDialog.fileToFolder = \u7121\u6CD5\u5C07\u6A94\u6848\u8207\u8CC7\u6599\u593E\u4E92\u76F8\u6BD4\u8F03\u3002 ShowDifferencesAsUnifiedDiffDialog.graphical = \u5716\u5F62 ShowDifferencesAsUnifiedDiffDialog.head = \u6700\u65B0\u4FEE\u8A02\u7248\u672C ShowDifferencesAsUnifiedDiffDialog.path = \u8DEF\u5F91: ShowDifferencesAsUnifiedDiffDialog.revision = \u4FEE\u8A02\u7248\u672C ShowDifferencesAsUnifiedDiffDialog.showLog = \u986F\u793A\u8A18\u9304\u8A0A\u606F ShowDifferencesAsUnifiedDiffDialog.swap = \u4EA4\u63DB\u6BD4\u8F03\u5C0D\u8C61 ShowDifferencesAsUnifiedDiffDialog.url = URL: ShowHistoryAction.noHistory = \u7121\u6B77\u7A0B ShowHistoryAction.noHistoryLong = \u6240\u9078\u53D6\u7684\u8CC7\u6E90\u6C92\u6709\u6B77\u7A0B\u8CC7\u6599 ShowHistoryAction.showHistory = \u986F\u793A\u6B77\u7A0B\u6642\u767C\u751F\u932F\u8AA4 ShowOutOfDateFoldersAction.refreshTaskName = \u540C\u6B65\u4E2D Show_has_&remote_26 = \u9060\u7AEF\u8CC7\u6E90(&H) Standard_15 = \u6A19\u6E96(&S) StatisticsPanel.noWorkingSet = <\u7121\u5DE5\u4F5C\u96C6> SvnPropertiesView.addKeywordsLabel = \u8A2D\u5B9A\u95DC\u9375\u5B57 SvnPropertiesView.addKeywordsTooltip = \u8A2D\u5B9A\u95DC\u9375\u5B57 SvnPropertiesView.addPropertyLabel = \u65B0\u589E\u5C6C\u6027 SvnPropertiesView.addPropertyTooltip = \u65B0\u589E svn \u5C6C\u6027 SvnPropertiesView.conflictOnProperties = \u4E00\u500B\u6216\u591A\u500B\u5C6C\u6027\u885D\u7A81 SvnPropertiesView.deletePropertyLabel = \u522A\u9664\u5C6C\u6027 SvnPropertiesView.errorAddKeywordsMessage = \u7121\u6CD5\u8A2D\u5B9A\u95DC\u9375\u5B57 SvnPropertiesView.errorAddKeywordsTitle = \u8A2D\u5B9A\u95DC\u9375\u5B57 SvnPropertiesView.errorAddMessage = \u7121\u6CD5\u65B0\u589E\u5C6C\u6027 SvnPropertiesView.errorAddTitle = \u65B0\u589E\u5C6C\u6027 SvnPropertiesView.errorGettingStatus = \u8B80\u53D6\u8CC7\u6E90\u72C0\u614B\u6642\u767C\u751F\u932F\u8AA4 SvnPropertiesView.modifyPropertyLabel = \u4FEE\u6539\u5C6C\u6027 SvnPropertiesView.noPropertiesModified = \u4E0A\u6B21\u9001\u4EA4\u5F8C\u6C92\u6709\u5C6C\u6027\u8B8A\u52D5 SvnPropertiesView.propertyName = \u540D\u7A31 SvnPropertiesView.propertyValue = \u503C SvnPropertiesView.refresh = \u91CD\u65B0\u6574\u7406\u8996\u666F SvnPropertiesView.refreshLabel = \u91CD\u65B0\u6574\u7406\u8996\u666F(&R) SvnPropertiesView.resourceNotManaged = \u8CC7\u6E90\u672A\u7D0D\u7BA1 SvnPropertiesView.somePropertiesModified = \u90E8\u4EFD\u5C6C\u6027\u5728\u4E0A\u6B21\u9001\u4EA4\u5F8C\u6709\u8B8A\u52D5 SvnPropertiesView.titleWithArgument = {0} \u7684 SVN \u5C6C\u6027 SwitchAction.switch = \u5207\u63DB\u6642\u767C\u751F\u554F\u984C\u3002 SwitchDialog.browse = \u700F\u89BD... SwitchDialog.head = \u6700\u65B0\u4FEE\u8A02\u7248 SwitchDialog.invalid = \u7121\u6548\u7684\u4FEE\u8A02\u7248\u672C SwitchDialog.revision = \u4FEE\u8A02\u7248\u672C SwitchDialog.title = \u5207\u63DB\u5230\u5206\u652F/\u6A19\u8A18 SwitchDialog.url = \u5230 URL: SwitchOperation.0 = \u6B63\u5728\u5207\u63DB {0} SwitchOperation.taskName = SVN \u5207\u63DB SyncAction.add = \u65B0\u589E\u81F3\u7248\u672C\u63A7\u5236(&A) SyncAction.commit = \u9001\u4EA4... SyncAction.commit.conflict.question = \u6709\u885D\u7A81\u5C1A\u672A\u89E3\u6C7A\uFF0C\u8981\u7E7C\u7E8C\u9001\u4EA4\u4E0D\u542B\u885D\u7A81\u7684\u8B8A\u66F4\u55CE? SyncAction.commit.conflict.title = \u78BA\u5B9A\u9001\u4EA4 SyncAction.conflicts = \u7DE8\u4FEE\u885D\u7A81 SyncAction.history = \u986F\u793A\u5728\u8CC7\u6E90\u6B77\u7A0B\u4E2D SyncAction.ignore = \u65B0\u589E\u5230 svn:ignore SyncAction.markMerged = \u6A19\u8A18\u70BA\u5DF2\u5408\u4F75 SyncAction.override = \u8986\u84CB\u4E26\u66F4\u65B0(&V) SyncAction.override.confirm = \u672C\u52D5\u4F5C\u5C07\u522A\u9664\u672C\u5730\u7AEF\u6240\u6709\u7684\u8B8A\u66F4\uFF0C\u4F60\u78BA\u5B9A\u8981\u5FA9\u539F\u672C\u5730\u7AEF\u6240\u6709\u7684\u66F4\u8B8A\uFF0C\u4E26\u4EE5\u4F3A\u670D\u5668\u7AEF\u7684\u6A94\u6848\u53D6\u4EE3\u55CE? SyncAction.override.title = \u8986\u84CB\u4E26\u66F4\u65B0 SyncAction.properties = \u986F\u793A\u5C6C\u6027(&P) SyncAction.resolve = \u6A19\u8A18\u70BA\u5DF2\u89E3\u6C7A SyncAction.revert = \u5FA9\u539F SyncAction.showOutOfDateFolders = \u986F\u793A\u904E\u671F\u76EE\u9304 SyncAction.sync = \u540C\u6B65 SyncAction.update = \u66F4\u65B0 SyncAction.update.conflict.question = \u672C\u5730\u7AEF\u5305\u542B\u8207\u4F3A\u670D\u5668\u885D\u7A81\u7684\u8B8A\u66F4\uFF0C\u66F4\u65B0\u6703\u8A66\u8457\u5408\u4F75\u9019\u4E9B\u8B8A\u66F4\uFF0C\u8981\u7E7C\u7E8C\u55CE? SyncAction.update.conflict.title = \u78BA\u5B9A\u66F4\u65B0 SynchronizeProjectsDialog.allSharedProjects = \u5305\u542B\u6240\u6709\u5171\u4EAB\u5230 SVN \u7684\u5C08\u6848(&A): SynchronizeProjectsDialog.selectProjects = \u9032\u884C\u540C\u6B65\u7684\u5C08\u6848 SynchronizeProjectsDialog.sharedWorkingSetProjects = \u5305\u542B\u5171\u4EAB\u5230 SVN \u7684\u5DE5\u4F5C\u96C6\u8CC7\u6E90(&W): SynchronizeProjectsDialog.syncOutgoingChanges = \u53EA\u540C\u6B65\u5177\u6709\u9001\u51FA\u8B8A\u66F4\u7684\u5C08\u6848(&C) SynchronizeProjectsDialog.title = \u540C\u6B65 SVN \u5C08\u6848 SynchronizeView.standardIncomingChangeSetComment = \u7121\u6CD5\u53D6\u5F97\u9001\u51FA\u8A0A\u606F SynchronizeWizard.message = \u9078\u64C7\u9032\u884C\u540C\u6B65\u7684\u8CC7\u6E90\u6216\u5DE5\u4F5C\u96C6 SynchronizeWizard.title = SVN \u540C\u6B65 TagAction.enterTag = \u8ACB\u8F38\u5165\u7248\u672C\u6A19\u8A18: TagAction.existingVersions = \u73FE\u6709\u7248\u672C: TagAction.tagAlreadyExists = \u7248\u672C\u6A19\u8A18\u5DF2\u5B58\u5728 TagAction.tagErrorTitle = \u6A19\u8A18\u932F\u8AA4 TagAction.tagProblemsMessage = \u6A19\u8A18\u8CC7\u6E90\u6642\u767C\u751F\u554F\u984C\u3002 TagAction.tagProblemsMessageMultiple = \u6A19\u8A18\u8CC7\u6E90\u6642\u767C\u751F\u554F\u984C\uFF0C\u6210\u529F\u6A19\u8A18\u4E86 {0}} \u500B\u5C08\u6848\uFF0C{0} \u500B\u5C08\u6848\u5B58\u5728\u932F\u8AA4\u3002 TagAction.tagResources = \u6A19\u8A18\u8CC7\u6E90 TagAction.tagWarningTitle = \u6A19\u8A18\u8B66\u544A TagAction.uncommittedChanges = \u4F60\u6B63\u5728\u6A19\u8A18\u542B\u6709\u672A\u9001\u4EA4\u8B8A\u66F4\u7684 ``{0}''\u3002\u9019\u4E9B\u8B8A\u66F4\u9084\u672A\u5B58\u5728\u6A94\u6848\u5EAB\u4E2D\uFF0C\u56E0\u6B64\u4F60\u5EFA\u7ACB\u7684\u7248\u672C\u4E2D\u4E26\u4E0D\u6703\u542B\u6709\u9019\u4E9B\u8B8A\u66F4\u3002\u4F60\u8981\u7E7C\u7E8C\u6A19\u8A18\u9019\u500B\u8CC7\u6E90\u55CE? TagAction.uncommittedChangesTitle = \u78BA\u5B9A\u672A\u9001\u4EA4\u7684\u8B8A\u66F4 TagInRepositoryAction.tagProblemsMessage = \u6A19\u8A18\u8CC7\u6E90\u6642\u56DE\u5831\u4E86\u554F\u984C\u3002 TagInRepositoryAction.tagProblemsMessageMultiple = \u6A19\u8A18\u8CC7\u6E90\u6642\u56DE\u5831\u4E86\u554F\u984C\u3002 TagSelectionDialog.Select_a_Tag_1 = \u9078\u64C7\u5206\u652F\u6216\u7248\u672C(&S): TagSelectionDialog.recurseOption = \u5957\u7528\u5230\u5B50\u8CC7\u6599\u593E(&F) TagetLocationSelectionDialog.alreadyExists = \u5C08\u6848 {0} \u5DF2\u5B58\u5728\u3002 TagetLocationSelectionDialog.invalidLocation = \u4E0D\u6B63\u78BA\u7684\u4F4D\u7F6E\u8DEF\u5F91\u3002 TagetLocationSelectionDialog.locationEmpty = \u5FC5\u9700\u6307\u5B9A\u5C08\u6848\u7684\u5167\u5BB9\u76EE\u9304\u3002 TargetLocationSelectionDialog.browseLabel = \u700F\u89BD(&B)... TargetLocationSelectionDialog.locationLabel = \u4F4D\u7F6E(&L): TargetLocationSelectionDialog.messageForMulti = \u9078\u53D6 {0} \u500B\u5C08\u6848\u7684\u4E0A\u4E00\u5C64\u76EE\u9304\u3002 TargetLocationSelectionDialog.messageForSingle = \u9078\u53D6 {0} \u5C08\u6848\u7684\u4E0A\u4E00\u5C64\u76EE\u9304\u3002 TargetLocationSelectionDialog.parentDirectoryLabel = \u76EE\u9304(&D): TargetLocationSelectionDialog.projectNameLabel = \u5C08\u6848\u540D\u7A31(&P): TargetLocationSelectionDialog.useDefaultLabel = \u4F7F\u7528\u9810\u8A2D\u5DE5\u4F5C\u5340\u4F4D\u7F6E(&W) TeamAction.internal = \u767C\u751F\u5167\u90E8\u932F\u8AA4 TrustSSLServerDialog.permanent = \u6C38\u4E45\u63A5\u53D7 TrustSSLServerDialog.reject = \u62D2\u7D55 TrustSSLServerDialog.temporary = \u66AB\u6642\u63A5\u53D7 TrustSSLServerDialog.title = \u63A5\u53D7\u6578\u4F4D\u6191\u8B49 Uneditaction.confirmMessage = \u8986\u5BEB\u5DF2\u7DE8\u8F2F\u6A94\u6848\u7684\u672C\u5730\u8B8A\u66F4\u55CE? Uneditaction.confirmTitle = \u78BA\u8A8D\u53D6\u6D88\u7DE8\u8F2F UnlockOperation.0 = \u6B63\u5728\u89E3\u9664\u9396\u5B9A {0} UnlockOperation.taskName = SVN \u89E3\u9664\u9396\u5B9A Unmanage.deleteMeta = \u5982\u679C\u522A\u9664\u4E86 SVN \u5F8C\u8A2D\u8CC7\u8A0A\uFF0C\u4F60\u5C07\u7121\u6CD5\u5C07\u5C08\u6848\u91CD\u65B0\u9023\u7D50\u4E0A\u4F60\u7684\u6A94\u6848\u5EAB\u3002\u4F60\u5FC5\u9700\u5C07\u5C08\u6848\u5171\u4EAB\u5230\u65B0\u7684\u4F4D\u7F6E\u6216\u662F\u5C07\u5C08\u6848\u522A\u9664\uFF0C\u91CD\u65B0\u53D6\u51FA\u5DE5\u4F5C\u8907\u672C\u3002\u78BA\u5B9A\u8981\u7E7C\u7E8C\u55CE? Unmanage.message = \u78BA\u5B9A\u8981\u53D6\u6D88 ``{0}'' \u8207 SVN \u7684\u9023\u7D50? Unmanage.messageN = \u4F60\u78BA\u5B9A\u8981\u53D6\u6D88\u9019 {0} \u500B\u5C08\u6848\u8207 SVN \u7684\u9023\u7D50? Unmanage.option1 = \u4E0D\u522A\u9664 SVN \u5F8C\u8A2D\u8CC7\u8A0A (\u4F8B\u5982: SVN \u5B50\u76EE\u9304)\u3002 Unmanage.option2 = \u4E00\u4F75\u522A\u9664\u6A94\u6848\u7CFB\u7D71\u4E2D\u7684 SVN \u5F8C\u8A2D\u8CC7\u8A0A\u3002 Unmanage.title = \u78BA\u5B9A\u8207 SVN \u53D6\u6D88\u9023\u7D50 Unmanage.titleN = \u78BA\u5B9A\u5C07\u591A\u500B\u5C08\u6848\u8207 SVN \u53D6\u6D88\u9023\u7D50 Unmanage.unmanage = \u8207 SVN \u53D6\u6D88\u9023\u7D50 Unmanage.unmanaging = \u6B63\u5728\u53D6\u6D88\u8207 SVN \u7684\u9023\u7D50... Unmanage.unmanagingError = \u53D6\u6D88\u9023\u7D50\u6642\u767C\u751F\u932F\u8AA4 UpdateAction.updateerror = \u66F4\u65B0\u6642\u767C\u751F\u554F\u984C UpdateAction.updating = \u66F4\u65B0\u4E2D... UpdateMergeActionProblems_merging_remote_resources_into_workspace_1 = \u5C07\u9060\u7AEF\u8CC7\u6E90\u5408\u4F75\u5230\u5DE5\u4F5C\u5340\u6642\u767C\u751F\u554F\u984C UpdateMergeActionProblems_merging_remote_resources_into_workspace_2 = \u5C07\u9060\u7AEF\u8CC7\u6E90\u5408\u4F75\u5230\u5DE5\u4F5C\u5340\u6642\u767C\u751F\u554F\u984C UpdateOperation.0 = \u6B63\u5728\u66F4\u65B0 {0} UpdateOperation.taskName = SVN \u66F4\u65B0 UpdateSyncAction.Conflicting_changes_found_1 = \u767C\u73FE\u885D\u7A81\u7684\u8B8A\u66F4 UpdateSyncAction.Only_update_resources_that_can_be_automatically_merged_3 = \u53EA\u66F4\u65B0\u53EF\u81EA\u52D5\u5408\u4F75\u7684\u8CC7\u6E90 UpdateSyncAction.Overwrite_local_changes__5 = \u8986\u5BEB\u672C\u5730\u7AEF\u8B8A\u66F4? UpdateSyncAction.Update_all_resources,_overwriting_local_changes_with_remote_contents_4 = \u66F4\u65B0\u6240\u6709\u8CC7\u6E90\u3002\u7528\u9060\u7AEF\u5167\u5BB9\u8986\u5BEB\u672C\u5730\u8B8A\u66F4\u3002 UpdateSyncAction.You_have_local_changes_you_are_about_to_overwrite._Do_you_wish_to_continue__6 = \u672C\u5730\u7AEF\u7684\u8B8A\u66F4\u5C07\u88AB\u8986\u5BEB\uFF0C\u8981\u7E7C\u7E8C\u55CE? UpdateSyncAction.You_have_local_changes_you_are_about_to_overwrite_2 = \u5177\u6709\u5C07\u88AB\u8986\u5BEB\u7684\u672C\u5730\u7AEF\u8B8A\u66F4\u3002 UpdateSyncAction.errorUpdating = \u66F4\u65B0\u8B8A\u66F4\u6642\u767C\u751F\u932F\u8AA4\u3002 UpdateWizard.title = \u66F4\u65B0 UpdateWizard.updatePage = \u66F4\u65B0 UpdateWizardPage.description = \u70BA\u5171\u4EAB\u7684\u5C08\u6848\u9078\u53D6\u9032\u884C\u66F4\u65B0\u7684\u6A19\u8A18(&S): UpdateWizardPage.overwrite = \u8986\u5BEB\u672C\u5730\u7AEF\u8B8A\u66F4(&O) UserPromptDialog.save = \u5132\u5B58\u4F7F\u7528\u8005\u59D3\u540D(&S) UserPromptDialog.title = \u8F38\u5165SVN\u4F7F\u7528\u8005\u59D3\u540D UserPromptDialog.username = \u4F7F\u7528\u8005\u59D3\u540D UserValidationDialog.labelPassword = \u8F38\u5165 {1} \u6A94\u6848\u5EAB\uFF0C\u7528\u6236\u540D\u7A31\u70BA {0} \u7684\u5BC6\u78BC: UserValidationDialog.labelUser = \u8F38\u5165\u8CC7\u6599\u5EAB {0} \u7684\u7528\u6236\u540D\u7A31\u53CA\u5BC6\u78BC UserValidationDialog.password = \u5BC6\u78BC: UserValidationDialog.required = \u5BC6\u78BC\u662F\u5FC5\u9700\u7684 UserValidationDialog.user = \u7528\u6236\u540D\u7A31: Validate_Connection_on_Finish_7 = \u7D50\u675F\u6642\u9A57\u8B49\u4F4D\u7F6E VersionCategory.Versions_1 = \u7248\u672C VersionsElement.versions = \u7248\u672C WorkbenchUserAuthenticator.The_operation_was_canceled_by_the_user_1 = \u7528\u6236\u5DF2\u53D6\u6D88\u52D5\u4F5C WorkbenchUserAuthenticator.cancelled = \u56E0\u70BA\u53D6\u6D88\u4E86\u767B\u5165\uFF0C\u64CD\u4F5C\u4E5F\u4E00\u4F75\u53D6\u6D88\u3002 WorkbenchUserAuthenticator.errorFlushing = Flush {0} \u7684\u5BC6\u78BC\u6642\u767C\u751F\u932F\u8AA4 WorkbenchUserAuthenticator.errorSaving = \u5132\u5B58 {0} \u5BC6\u78BC\u6642\u767C\u751F\u932F\u8AA4 WorkingSetSelectionArea.workingSetOther = \u5176\u4ED6(&O)... WorkingSetSelectionDialog.detailsButton.label = \u7DE8\u8F2F(&E)... WorkingSetSelectionDialog.message = \u9078\u64C7 SVN \u5DE5\u4F5C\u96C6(&S): WorkingSetSelectionDialog.message.multiSelect = \u9078\u64C7 SVN \u5DE5\u4F5C\u96C6(&S): WorkingSetSelectionDialog.newButton.label = \u65B0\u589E(N)... WorkingSetSelectionDialog.removeButton.label = \u522A\u9664(&R) WorkingSetSelectionDialog.title = \u9078\u64C7 SVN \u5DE5\u4F5C\u96C6 WorkingSetSelectionDialog.title.multiSelect = \u9078\u64C7 SVN \u5DE5\u4F5C\u96C6 WorkspaceChangeSetCapability_1 = \u65B0\u5DE5\u4F5C\u96C6 WorkspaceChangeSetCapability_2 = \u65B0\u8B8A\u66F4\u96C6 WorkspaceChangeSetCapability_3 = \u70BA\u65B0\u5EFA\u7ACB\u7684\u8B8A\u66F4\u96C6\u8F38\u5165\u540D\u7A31\u53CA\u8A3B\u91CB WorkspaceChangeSetCapability_7 = \u7DE8\u8F2F\u8B8A\u66F4\u96C6\u8A3B\u91CB WorkspaceChangeSetCapability_8 = \u7DE8\u96C6\u8B8A\u66F4\u96C6\u7684\u540D\u7A31\u53CA\u8A3B\u91CB WorkspacePathValidator.eclipsePath = \u4F60\u7684 Eclipse \u5DE5\u4F5C\u5340\u8DEF\u5F91\u70BA: WorkspacePathValidator.fileSystemPath = \u4F46\u662F\u76EE\u524D\u6A94\u6848\u7CFB\u7D71\u8DEF\u5F91\u70BA: WorkspacePathValidator.instructions = Subclipse \u53EA\u80FD\u5728\u9019\u4E9B\u503C\u76F8\u540C\u7684\u6642\u5019\u6B63\u5E38\u57F7\u884C\uFF0C\u4F7F\u7528\u5207\u63DB\u5DE5\u4F5C\u5340(Switch Workspace) \u9078\u9805\u6216\u662F\u6539\u8B8A\u6377\u5F91\u7684 -data \u53C3\u6578\u4EE5\u4F7FEclipse \u503C\u548C\u6A94\u6848\u7CFB\u7D71\u7684\u503C\u76F8\u540C\u3002 WorkspacePathValidator.title = \u5DE5\u4F5C\u5340\u8DEF\u5F91\u9A57\u8B49\u932F\u8AA4\u3002 WorkspaceSubscriberContext_0 = \u7531\u65BC\u4E0D\u4E00\u81F4\u7684\u5167\u90E8\u72C0\u614B\uFF0C\u7121\u6CD5\u66F4\u65B0\u6A94\u6848 {0} \u7684 meta-data buildError = SVN \u64CD\u4F5C\u5B8C\u6210\u5F8C\u5EFA\u7F6E\u904E\u7A0B\u4E2D\u767C\u751F\u932F\u8AA4\u3002 confirmOverwrite = \u5C08\u6848\u5DF2\u5B58\u5728\u65BC\u5DE5\u4F5C\u5340\u4E2D\uFF0C\u5B83\u7684\u5167\u5BB9\u5C07\u88AB\u8986\u5BEB\u3002 confirmOverwriteTitle = \u78BA\u8A8D\u8986\u5BEB\u5C08\u6848 currentRevision = *{0} details = \u6309\u4E0B``\u7D30\u7BC0 ''\u6309\u626D\u4EE5\u53D6\u5F97\u66F4\u591A\u7684\u8A0A\u606F\u3002 error = \u932F\u8AA4 exception = \u4F3A\u670D\u5668\u4F8B\u5916 flag_indicating_that_the_folder_has_a_child_resource_with_outgoing_changes_41 = \u8868\u793A\u8CC7\u6599\u593E\u542B\u6709\u9700\u8981\u9001\u51FA\u8B8A\u66F4\u7684\u5B50\u8CC7\u6E90\u7684\u65D7\u6A19 information = \u4F3A\u670D\u5668\u8CC7\u8A0A internal = \u767C\u751F\u5167\u90E8\u932F\u8AA4\uFF0C\u8A73\u7D30\u8CC7\u8A0A\u8ACB\u67E5\u770B\u932F\u8AA4\u65E5\u8A8C\u3002 keyword_substitution_rule_for_the_resource_44 = \u8CC7\u6E90\u7684\u95DC\u9375\u5B57\u66FF\u63DB\u898F\u5247 localChanges = \u672C\u6A5F\u7684\u8B8A\u66F4\u5C07\u88AB\u8986\u5BEB\uFF0C\u8981\u7E7C\u7E8C\u55CE? moveRemoteFolderWizard.title = \u79FB\u52D5\u9060\u7AEF\u8CC7\u6E90 nameAndRevision = {0} {1} no = No noauthor = (\u7121\u4F5C\u8005) notAvailable = \u7121\u6CD5\u4F7F\u7528 ok = \u78BA\u5B9A prompt = \u63D0\u793A question = \u554F\u984C repository_home_directory_on_server_39 = \u4F3A\u670D\u5668\u4E0A\u6A94\u6848\u5EAB\u7684\u5BB6\u76EE\u9304 root_relative_directory_40 = \u76F8\u5C0D\u65BC\u6839\u76EE\u9304\u7684\u76EE\u9304 separator = / simpleInternal = \u5167\u90E8\u932F\u8AA4 svn = SVN the_connection_method_(e.g._pserver,_ssh)_37 = \u9023\u63A5\u65B9\u5F0F (\u4F8B\u5982: pserver, ssh) the_repository_location__s_hostname_36 = \u6A94\u6848\u5EAB\u4F4D\u7F6E\u7684\u4E3B\u6A5F\u540D\u7A31 the_tag_applied_to_the_resource_(version,_branch,_or_date)_35 = \u8CC7\u6E90\u542B\u6709\u7684\u6A19\u8A18 (\u7248\u672C\u3001\u5206\u652F\u6216\u65E5\u671F) the_tag_applied_to_the_resource_43 = \u8CC7\u6E90\u542B\u6709\u7684\u6A19\u8A18 user_name_for_the_connection_38 = \u9023\u63A5\u7684\u4F7F\u7528\u8005\u540D\u7A31 yes = \u78BA\u5B9A 000077500000000000000000000000001203611042400356745ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operationsBranchTagOperation.java000066400000000000000000000262271203611042400422620ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operations/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.operations; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceRuleFactory; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.MultiRule; import org.eclipse.team.core.TeamException; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNExternal; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.commands.BranchTagCommand; import org.tigris.subversion.subclipse.core.commands.GetRemoteResourceCommand; import org.tigris.subversion.subclipse.core.commands.SwitchToUrlCommand; import org.tigris.subversion.subclipse.core.history.Alias; import org.tigris.subversion.subclipse.core.history.AliasManager; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class BranchTagOperation extends RepositoryProviderOperation { private SVNUrl[] sourceUrls; private SVNUrl destinationUrl; private SVNRevision revision; private boolean createOnServer; private boolean makeParents; private String message; private Alias newAlias; private boolean switchAfterTagBranch; private boolean branchCreated = false; private boolean multipleTransactions = true; private SVNExternal[] svnExternals; public BranchTagOperation(IWorkbenchPart part, IResource[] resources, SVNUrl[] sourceUrls, SVNUrl destinationUrl, boolean createOnServer, SVNRevision revision, String message) { super(part, resources); this.sourceUrls = sourceUrls; this.destinationUrl = destinationUrl; this.createOnServer = createOnServer; this.revision = revision; this.message = message; } protected String getTaskName() { return Policy.bind("BranchTagOperation.taskName"); //$NON-NLS-1$; } protected String getTaskName(SVNTeamProvider provider) { return Policy.bind("BranchTagOperation.0", provider.getProject().getName()); //$NON-NLS-1$ } protected void execute(SVNTeamProvider provider, IResource[] resources, IProgressMonitor monitor) throws SVNException, InterruptedException { if (branchCreated) return; branchCreated = true; monitor.beginTask(null, 100); try { BranchTagCommand command = new BranchTagCommand(provider.getSVNWorkspaceRoot(),getResources(), sourceUrls, destinationUrl, message, createOnServer, revision); command.setMakeParents(makeParents); command.setMultipleTransactions(multipleTransactions); command.run(Policy.subMonitorFor(monitor,1000)); if (svnExternals != null) { List copyToUrls = new ArrayList(); List fileList = new ArrayList(); Map copyToMap = new HashMap(); for (SVNExternal svnExternal : svnExternals) { if (svnExternal.isSelected()) { if (!fileList.contains(svnExternal.getFile().getAbsolutePath())) { fileList.add(svnExternal.getFile().getAbsolutePath()); IResource[] localResources = SVNWorkspaceRoot.getResourcesFor(new Path(svnExternal.getFile().getPath())); ISVNRemoteResource remoteResource = SVNWorkspaceRoot.getBaseResourceFor(localResources[0]); for (SVNUrl sourceUrl : sourceUrls) { if (remoteResource.getUrl().toString().startsWith(sourceUrl.toString())) { SVNUrl copyToUrl = null; SVNUrl destinationUrl = command.getDestinationUrl(sourceUrl.toString()); if (remoteResource.getUrl().toString().equals(sourceUrl.toString())) { copyToUrl = destinationUrl; } else { try { copyToUrl = new SVNUrl(destinationUrl + remoteResource.getUrl().toString().substring(sourceUrl.toString().length())); } catch (MalformedURLException e) {} } if (copyToUrl != null) { copyToUrls.add(copyToUrl); copyToMap.put(copyToUrl.toString(), svnExternal.getFile().getAbsolutePath()); } break; } } } } } if (copyToUrls.size() > 0) { ISVNClientAdapter svnClient = null; try { svnClient = provider.getSVNWorkspaceRoot().getRepository().getSVNClient(); for (SVNUrl copyToUrl : copyToUrls) { String updatedProperty = getUpdatedSvnExternalsProperty(copyToUrl, copyToMap); ISVNInfo info = svnClient.getInfo(copyToUrl); svnClient.propertySet(copyToUrl, info.getRevision(), "svn:externals", updatedProperty, Policy.bind("BranchTagOperation.3")); //$NON-NLS-1$ } } catch (Exception e) { throw SVNException.wrapException(e); } finally { provider.getSVNWorkspaceRoot().getRepository().returnSVNClient(svnClient); } } } SVNUIPlugin.getPlugin().getRepositoryManager().resourceCreated(null, null); if (newAlias != null) updateBranchTagProperty(resources[0]); if(switchAfterTagBranch) { for (int i = 0; i < sourceUrls.length; i++) { SVNUrl switchDestinationUrl = command.getDestinationUrl(sourceUrls[i].toString()); // the copy command's destination URL can either be a path to an existing directory // or a path to a new directory. In the former case the last path segment of the // source path is automatically created at the destination GetRemoteResourceCommand getRemoteResourceCommand = new GetRemoteResourceCommand(provider.getSVNWorkspaceRoot().getRepository(), switchDestinationUrl, SVNRevision.HEAD); try { getRemoteResourceCommand.run(null); } catch(SVNException e) { if(e.getStatus().getCode() == TeamException.UNABLE) { switchDestinationUrl = destinationUrl; } else { throw e; } } resources = getResources(); SwitchToUrlCommand switchToUrlCommand = new SwitchToUrlCommand(provider.getSVNWorkspaceRoot(), resources[i], switchDestinationUrl, SVNRevision.HEAD); switchToUrlCommand.run(Policy.subMonitorFor(monitor,100)); } } } catch (SVNException e) { if (e.operationInterrupted()) { showCancelledMessage(); } else { collectStatus(e.getStatus()); } } finally { monitor.done(); } } protected ISchedulingRule getSchedulingRule(SVNTeamProvider provider) { IResource[] resources = getResources(); if (resources == null) return super.getSchedulingRule(provider); IResourceRuleFactory ruleFactory = provider.getRuleFactory(); HashSet rules = new HashSet(); for (int i = 0; i < resources.length; i++) { rules.add(ruleFactory.modifyRule(resources[i].getProject())); } return MultiRule.combine((ISchedulingRule[]) rules.toArray(new ISchedulingRule[rules.size()])); } private String getUpdatedSvnExternalsProperty(SVNUrl copyToUrl, Map copyToMap) { String filePath = copyToMap.get(copyToUrl.toString()); StringBuffer updatedProperty = new StringBuffer(); for (SVNExternal checkExternal : svnExternals) { if (checkExternal.getFile().getAbsolutePath().equals(filePath)) { if (updatedProperty.length() > 0) { updatedProperty.append("\n"); //$NON-NLS-1$ } updatedProperty.append(checkExternal.toString()); } } return updatedProperty.toString(); } private void updateBranchTagProperty(IResource resource) { AliasManager aliasManager = new AliasManager(resource, false); Alias[] branchAliases = aliasManager.getBranches(); Alias[] tagAliases = aliasManager.getTags(); StringBuffer propertyValue = new StringBuffer(); for (int i = 0; i < branchAliases.length; i++) { if (branchAliases[i].getRevision() > 0) { if (propertyValue.length() > 0) propertyValue.append("\n"); //$NON-NLS-1$ Alias branch = branchAliases[i]; propertyValue.append(branch.getRevision() + "," + branch.getName()); //$NON-NLS-1$ if (branch.getRelativePath() != null) propertyValue.append("," + branch.getRelativePath()); //$NON-NLS-1$ if (branch.isBranch()) propertyValue.append(",branch"); //$NON-NLS-1$ else propertyValue.append(",tag"); //$NON-NLS-1$ } } for (int i = 0; i < tagAliases.length; i++) { if (tagAliases[i].getRevision() > 0) { if (propertyValue.length() > 0) propertyValue.append("\n"); //$NON-NLS-1$ Alias tag = tagAliases[i]; propertyValue.append(tag.getRevision() + "," + tag.getName()); //$NON-NLS-1$ if (tag.getRelativePath() != null) propertyValue.append("," + tag.getRelativePath()); //$NON-NLS-1$ if (tag.isBranch()) propertyValue.append(",branch"); //$NON-NLS-1$ else propertyValue.append(",tag"); //$NON-NLS-1$ } } if (propertyValue.length() > 0) propertyValue.append("\n"); //$NON-NLS-1$ propertyValue.append(newAlias.getRevision() + "," + newAlias.getName() + "," + newAlias.getRelativePath()); //$NON-NLS-1$ //$NON-NLS-2$ if (newAlias.isBranch()) propertyValue.append(",branch"); //$NON-NLS-1$ else propertyValue.append(",tag"); //$NON-NLS-1$ ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); try { svnResource.setSvnProperty("subclipse:tags", propertyValue.toString(), false); //$NON-NLS-1$ } catch (SVNException e) {} } public void setNewAlias(Alias newAlias) { this.newAlias = newAlias; } public void switchAfterTagBranchOperation(boolean switchAfterTagBranchOperation) { this.switchAfterTagBranch = switchAfterTagBranchOperation; } public void setMakeParents(boolean makeParents) { this.makeParents = makeParents; } public void setMultipleTransactions(boolean multipleTransactions) { this.multipleTransactions = multipleTransactions; } public void setSvnExternals(SVNExternal[] svnExternals) { this.svnExternals = svnExternals; } } CheckoutAsProjectOperation.java000066400000000000000000000167421203611042400440120ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operations/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.operations; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IProjectDescription; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceRuleFactory; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.MultiRule; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.commands.CheckoutCommand; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.svnclientadapter.SVNRevision; public class CheckoutAsProjectOperation extends SVNOperation { private ISVNRemoteFolder[] remoteFolders; private IProject[] localFolders; private IPath projectRoot; private SVNRevision svnRevision = SVNRevision.HEAD; private int depth = ISVNCoreConstants.DEPTH_INFINITY; private boolean ignoreExternals = false; private boolean force = true; private List createProjectList = new ArrayList(); private List manageProjectList = new ArrayList(); public CheckoutAsProjectOperation(IWorkbenchPart part, ISVNRemoteFolder[] remoteFolders, IProject[] localFolders) { this(part, remoteFolders, localFolders, null); } public CheckoutAsProjectOperation(IWorkbenchPart part, ISVNRemoteFolder[] remoteFolders, IProject[] localFolders, IPath projectRoot) { super(part); this.remoteFolders = remoteFolders; this.localFolders = localFolders; this.projectRoot = projectRoot; } protected String getTaskName() { return Policy.bind("CheckoutAsProjectOperation.taskName"); //$NON-NLS-1$; } protected ISchedulingRule getSchedulingRule(SVNTeamProvider provider) { IResourceRuleFactory ruleFactory = provider.getRuleFactory(); HashSet rules = new HashSet(); for (int i = 0; i < localFolders.length; i++) { rules.add(ruleFactory.modifyRule(localFolders[i].getProject())); } return MultiRule.combine((ISchedulingRule[]) rules.toArray(new ISchedulingRule[rules.size()])); } private void createProject(final IProject project) throws SVNException { try { if (projectRoot == null) { project.create(null); project.open(null); } else { String path = projectRoot.toString(); if (!path.endsWith("/")) { path = path + "/"; } IProjectDescription description; try { description = ResourcesPlugin.getWorkspace().loadProjectDescription(new Path(path + project.getName() + "/.project")); } catch (CoreException e) { description = ResourcesPlugin.getWorkspace().newProjectDescription(project.getName()); description.setLocation(new Path(path + project.getName())); } IProject customProject = ResourcesPlugin.getWorkspace().getRoot().getProject(project.getName()); customProject.create(description, null); customProject.open(null); } } catch (CoreException e1) { throw new SVNException( "Cannot create project to checkout to", e1); } } public void execute(IProgressMonitor monitor) throws SVNException, InterruptedException { // First checkout all projects, then bring them into workspace. // List failedProjects = new ArrayList(); monitor.beginTask(null, remoteFolders.length * 1000); for (int i = 0; i < remoteFolders.length; i++) { IProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1000); try { monitor.setTaskName(Policy.bind("CheckoutAsProjectOperation.0", remoteFolders[i].getName())); //$NON-NLS-1$ IProject[] local = new IProject[1]; local[0] = localFolders[i]; ISVNRemoteFolder[] remote = new ISVNRemoteFolder[1]; remote[0] = remoteFolders[i]; execute(remote, local, subMonitor); if (monitor.isCanceled()) { break; } } finally {} } for (IProject project : createProjectList) { createProject(project); } for (IProject project : manageProjectList) { IProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1000); try { monitor.setTaskName(Policy.bind("SVNProvider.Creating_project_1", project.getName())); //$NON-NLS-1$ refreshProject(project, subMonitor); } finally {} } } protected boolean execute(ISVNRemoteFolder[] remote, IProject[] local, IProgressMonitor monitor) throws SVNException, InterruptedException { try { CheckoutCommand command; if (projectRoot==null) { command = new CheckoutCommand(remote, local); } else { command = new CheckoutCommand(remote, local, projectRoot); } command.setSvnRevision(svnRevision); command.setDepth(depth); command.setIgnoreExternals(ignoreExternals); command.setForce(force); command.setRefreshProjects(false); command.run(monitor); List commandCreateProjectList = command.getCreateProjectList(); for (IProject project : commandCreateProjectList) { createProjectList.add(project); } List commandManageProjectList = command.getManageProjectList(); for (IProject project : commandManageProjectList) { manageProjectList.add(project); } } catch (SVNException e) { if (e.operationInterrupted()) { showCancelledMessage(); } else { collectStatus(e.getStatus()); } return false; } return true; } public void setSvnRevision(SVNRevision svnRevision) { this.svnRevision = svnRevision; } public void setDepth(int depth) { this.depth = depth; } public void setIgnoreExternals(boolean ignoreExternals) { this.ignoreExternals = ignoreExternals; } public void setForce(boolean force) { this.force = force; } /* * Bring the provided projects into the workspace */ private void refreshProject(IProject project, IProgressMonitor monitor) throws SVNException { if (monitor != null) { monitor.beginTask("", 100); //$NON-NLS-1$ } try { // Register the project with Team RepositoryProvider.map(project, SVNProviderPlugin.getTypeId()); RepositoryProvider.getProvider(project, SVNProviderPlugin.getTypeId()); project.refreshLocal(IResource.DEPTH_INFINITE, monitor); } catch (Exception e) { throw new SVNException("Cannot map the project with svn provider",e); } finally { if (monitor != null) { monitor.done(); } } } } CleanupOperation.java000066400000000000000000000051231203611042400420100ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operations/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.operations; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.commands.CleanupResourcesCommand; import org.tigris.subversion.subclipse.ui.Policy; public class CleanupOperation extends RepositoryProviderOperation { public CleanupOperation(IWorkbenchPart part, IResource[] resources) { super(part, resources); } /* (non-Javadoc) * @see org.eclipse.team.internal.ccvs.ui.operations.CVSOperation#getTaskName() */ protected String getTaskName() { return Policy.bind("CleanupOperation.taskName"); //$NON-NLS-1$; } /* (non-Javadoc) * @see org.eclipse.team.internal.ccvs.ui.operations.RepositoryProviderOperation#getTaskName(org.eclipse.team.internal.ccvs.core.CVSTeamProvider) */ protected String getTaskName(SVNTeamProvider provider) { return Policy.bind("CleanupOperation.0", provider.getProject().getName()); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.operations.RepositoryProviderOperation#execute(org.tigris.subversion.subclipse.core.SVNTeamProvider, org.eclipse.core.resources.IResource[], org.eclipse.core.runtime.IProgressMonitor) */ protected void execute(SVNTeamProvider provider, IResource[] resources, IProgressMonitor monitor) throws SVNException, InterruptedException { monitor.beginTask(null, 100); try { CleanupResourcesCommand command = new CleanupResourcesCommand(provider.getSVNWorkspaceRoot(),resources); command.run(Policy.subMonitorFor(monitor,100)); } catch (SVNException e) { if (e.operationInterrupted()) { showCancelledMessage(); } else { collectStatus(e.getStatus()); } } finally { monitor.done(); } } } CommitOperation.java000066400000000000000000000261431203611042400416560ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operations/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.operations; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Set; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNUrl; public class CommitOperation extends SVNOperation { private IResource[] resourcesToAdd; private IResource[] resourcesToDelete; private IResource[] resourcesToCommit; private String commitComment; private boolean keepLocks; private ISVNClientAdapter svnClient; private boolean atomicCommit = true; private boolean canRunAsJob = true; private String postCommitError; public CommitOperation(IWorkbenchPart part, IResource[] selectedResources, IResource[] resourcesToAdd, IResource[] resourcesToDelete, IResource[] resourcesToCommit, String commitComment, boolean keepLocks) { super(part); this.resourcesToAdd = resourcesToAdd; this.resourcesToDelete = resourcesToDelete; this.resourcesToCommit = resourcesToCommit; this.commitComment = commitComment; this.keepLocks = keepLocks; } protected void execute(IProgressMonitor monitor) throws SVNException, InterruptedException { postCommitError = null; monitor.beginTask(null, resourcesToAdd.length + resourcesToDelete.length + resourcesToCommit.length); try { svnClient = SVNProviderPlugin.getPlugin().getSVNClientManager().getSVNClient(); if (resourcesToAdd.length > 0) { Map> table = getProviderMapping(resourcesToAdd); if (table.get(null) != null) { throw new SVNException(Policy.bind("RepositoryManager.addErrorNotAssociated")); //$NON-NLS-1$ } Set keySet = table.keySet(); for (SVNTeamProvider provider : keySet) { List list = table.get(provider); IResource[] providerResources = list.toArray(new IResource[list.size()]); provider.add(providerResources, IResource.DEPTH_ZERO, Policy.subMonitorFor(monitor, resourcesToAdd.length)); } } if (resourcesToDelete.length > 0) { ISVNClientAdapter svnDeleteClient = null; // use an adapter that will log to console Map> table = getProviderMapping(resourcesToDelete); if (table.get(null) != null) { throw new SVNException(Policy.bind("RepositoryManager.addErrorNotAssociated")); //$NON-NLS-1$ } Set keySet = table.keySet(); for (SVNTeamProvider provider : keySet) { List list = table.get(provider); File[] files = new File[list.size()]; int i=0; for (IResource resource : list) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); if (svnDeleteClient == null) svnDeleteClient = svnResource.getRepository().getSVNClient(); files[i] = svnResource.getFile(); i++; } try { svnDeleteClient.remove(files, true); } catch (SVNClientException e) { throw new TeamException(e.getMessage()); } finally { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(svnDeleteClient); } } } setAtomicCommitMode(); Map> table = getCommitProviderMapping(resourcesToCommit); Set keySet = table.keySet(); for (ProjectAndRepository mapKey : keySet) { SVNTeamProvider provider = mapKey.getTeamProvider(); List list = table.get(mapKey); IResource[] providerResources = new IResource[list.size()]; list.toArray(providerResources); postCommitError = provider.checkin(providerResources, commitComment, keepLocks, getDepth(providerResources), Policy.subMonitorFor(monitor, providerResources.length)); for (IResource providerResource : providerResources) { if (!providerResource.exists()) { SVNProviderPlugin.getPlugin().getStatusCacheManager().removeStatus(providerResource); } } if (postCommitError != null) { Display.getDefault().syncExec(new Runnable() { public void run() { MessageDialog.openError(Display.getDefault().getActiveShell(), Policy.bind("CommitDialog.title"), postCommitError); } }); } } } catch (TeamException e) { throw SVNException.wrapException(e); } finally { monitor.done(); SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(svnClient); // refresh the Synch view SVNProviderPlugin.broadcastModificationStateChanges(resourcesToCommit); } } /** * This method figures out of if we should commit with DEPTH_ZERO or DEPTH_INFINITE * If there are any modified folders (which could only be a prop change) in the list of committed items, * then it should return DEPTH_ZERO, otherwise it should return DEPTH_INFINITE. * @param resources an array of resources to check * @return IResource.DEPTH_ZERO or IResource.DEPTH_INFINITE */ private int getDepth(IResource[] resources) { int depth = IResource.DEPTH_INFINITE; for (int i = 0; i < resources.length; i++) { if (resources[i].getType() != IResource.FILE) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resources[i]); try { // If there is a folder delete, then we cannot do a // non-recursive commit if (svnResource.getStatus().isDeleted()) return IResource.DEPTH_INFINITE; if (svnResource.getStatus().isPropModified()) depth = IResource.DEPTH_ZERO; } catch (SVNException e) { } } } return depth; } protected String getTaskName() { return Policy.bind("CommitOperation.taskName"); //$NON-NLS-1$; } private Map> getCommitProviderMapping(IResource[] resources) { ProjectAndRepository mapKey = null; Map> result = new HashMap>(); for (IResource resource : resources) { if (mapKey == null || !svnClient.canCommitAcrossWC()) { SVNTeamProvider provider = (SVNTeamProvider) RepositoryProvider.getProvider(resource.getProject(), SVNProviderPlugin.getTypeId()); mapKey = new ProjectAndRepository(provider, getRootURL(SVNWorkspaceRoot.getSVNResourceFor(resource))); } List list = result.get(mapKey); if (list == null) { list = new ArrayList(); result.put(mapKey, list); } list.add(resource); } return result; } private Map> getProviderMapping(IResource[] resources) { SVNTeamProvider provider = null; Map> result = new HashMap>(); for (int i = 0; i < resources.length; i++) { if (provider == null || !svnClient.canCommitAcrossWC()) provider = (SVNTeamProvider) RepositoryProvider.getProvider(resources[i].getProject(), SVNProviderPlugin.getTypeId()); List list = result.get(provider); if (list == null) { list = new ArrayList(); result.put(provider, list); } list.add(resources[i]); } return result; } private String getRootURL(ISVNLocalResource localResource) { if (!atomicCommit) return null; ISVNInfo info = getSVNInfo(localResource); if (info == null) return null; SVNUrl repos = info.getRepository(); if (repos == null) return null; return repos.toString(); } private ISVNInfo getSVNInfo(ISVNLocalResource localResource) { if (!atomicCommit) return null; if (localResource == null) return null; File file = localResource.getFile(); if (file == null) return null; boolean returnSVNClient = svnClient == null; if (svnClient == null) { try { svnClient = SVNProviderPlugin.getPlugin().getSVNClientManager().getSVNClient(); } catch (SVNException e) { return null; } } ISVNInfo info; try { SVNProviderPlugin.disableConsoleLogging(); info = svnClient.getInfoFromWorkingCopy(file); SVNProviderPlugin.enableConsoleLogging(); } catch (SVNClientException e) { SVNProviderPlugin.enableConsoleLogging(); return null; } finally { if (returnSVNClient) { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(svnClient); } } return info; } protected boolean canRunAsJob() { return canRunAsJob; } /** * This method sets the atomicCommit mode based on the user preference * and capabilities of the client adapter */ private void setAtomicCommitMode() { if (!SVNUIPlugin.getPlugin().getPreferenceStore().getBoolean(ISVNUIConstants.PREF_USE_JAVAHL_COMMIT_HACK)) { atomicCommit = false; return; } if (svnClient.canCommitAcrossWC()) { atomicCommit = false; return; } } protected class ProjectAndRepository { private SVNTeamProvider provider; private String rootURL; public ProjectAndRepository(SVNTeamProvider provider, String rootURL) { super(); this.provider = provider; if (rootURL == null) this.rootURL = ""; else this.rootURL = rootURL; } public SVNTeamProvider getTeamProvider() { return provider; } public String getRootURL() { return rootURL; } private String getKey() { return rootURL; } public String toString() { return getKey(); } public int hashCode() { return getKey().hashCode(); } public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; final ProjectAndRepository other = (ProjectAndRepository) obj; return this.getKey().equals(other.getKey()); } } public void setCanRunAsJob(boolean canRunAsJob) { this.canRunAsJob = canRunAsJob; } } CommitterColors.java000066400000000000000000000051351203611042400416700ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operations/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.operations; import java.util.HashMap; import java.util.Map; import org.eclipse.swt.graphics.RGB; /** * TODO copied from CVS implementation, see https://bugs.eclipse.org/bugs/show_bug.cgi?id=192779 * Default implementation, assigns random colors to revisions based on committer id. * * @since 3.2 */ final class CommitterColors { private static CommitterColors fInstance; // Fixed committer color RGBs provided by the UI Designer private static final RGB[] COMMITTER_RGBs= new RGB[] { new RGB(131, 150, 98), new RGB(132, 164, 118), new RGB(221, 205, 93), new RGB(199, 134, 57), new RGB(197, 123, 127), new RGB(133, 166, 214), new RGB(143, 163, 54), new RGB(180, 148, 74), new RGB(139, 136, 140), new RGB(48, 135, 144), new RGB(190, 93, 66), new RGB(101, 101, 217), new RGB(23, 101, 160), new RGB(72, 153, 119), new RGB(136, 176, 70), new RGB(123, 187, 95), new RGB(255, 230, 59), new RGB(255, 138, 1), new RGB(233, 88, 98), new RGB(93, 158, 254), new RGB(175, 215, 0), new RGB(232, 168, 21), new RGB(140, 134, 142), new RGB(0, 172, 191), new RGB(251, 58, 4), new RGB(63, 64, 255), new RGB(0, 104, 183), new RGB(27, 194, 130) }; /** * Returns the committer color singleton. * * @return the committer color singleton */ public static CommitterColors getDefault() { if (fInstance == null) fInstance= new CommitterColors(); return fInstance; } /** The color map. */ private Map fColors= new HashMap(); /** The number of colors that have been issued. */ private int fCount= 0; private CommitterColors() { } /** * Returns a unique color description for each string passed in. Colors for new committers are * allocated to be as different as possible from the existing colors. * * @param committer the committers unique name * @return the corresponding color */ public RGB getCommitterRGB(String committer) { RGB rgb= (RGB) fColors.get(committer); if (rgb == null) { rgb= COMMITTER_RGBs[fCount++ % COMMITTER_RGBs.length]; fColors.put(committer, rgb); } return rgb; } } ExportOperation.java000066400000000000000000000052341203611042400417050ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operations/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.operations; import java.io.File; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; public class ExportOperation extends RepositoryProviderOperation { private String directory; public ExportOperation(IWorkbenchPart part, IResource[] resources, String directory) { super(part, resources); this.directory = directory; } protected String getTaskName() { return Policy.bind("ExportOperation.taskName"); //$NON-NLS-1$; } protected String getTaskName(SVNTeamProvider provider) { return Policy.bind("ExportOperation.0", provider.getProject().getName()); //$NON-NLS-1$ } protected void execute(SVNTeamProvider provider, IResource[] resources, IProgressMonitor monitor) throws SVNException, InterruptedException { ISVNClientAdapter client = null; ISVNRepositoryLocation repository = null; try { for (int i = 0; i < resources.length; i++) { if (client == null) { repository = SVNWorkspaceRoot.getSVNResourceFor(resources[i]).getRepository(); client = repository.getSVNClient(); } File srcPath = new File(resources[i].getLocation().toString()); File destPath= new File(directory + File.separator + resources[i].getName()); try { client.doExport(srcPath, destPath, true); } catch (SVNClientException e) { throw SVNException.wrapException(e); } } } catch (SVNException e) { if (e.operationInterrupted()) { showCancelledMessage(); } else { collectStatus(e.getStatus()); } } finally { if (repository != null) { repository.returnSVNClient(client); } monitor.done(); } } } ExportRemoteFolderOperation.java000066400000000000000000000045111203611042400442120ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operations/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.operations; import java.io.File; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; public class ExportRemoteFolderOperation extends SVNOperation { private ISVNRemoteResource folder; private File directory; private SVNRevision revision; public ExportRemoteFolderOperation(IWorkbenchPart part, ISVNRemoteResource folder, File directory, SVNRevision revision) { super(part); this.folder = folder; this.directory = directory; this.revision = revision; } protected String getTaskName() { return Policy.bind("ExportOperation.taskName"); //$NON-NLS-1$; } protected String getTaskName(SVNTeamProvider provider) { return Policy.bind("ExportOperation.0", provider.getProject().getName()); //$NON-NLS-1$ } protected void execute(IProgressMonitor monitor) throws SVNException, InterruptedException { ISVNClientAdapter client = null; try { client = folder.getRepository().getSVNClient(); try { client.doExport(folder.getUrl(), directory, revision, true); } catch (SVNClientException e) { throw SVNException.wrapException(e); } } catch (SVNException e) { if (e.operationInterrupted()) { showCancelledMessage(); } else { collectStatus(e.getStatus()); } } finally { folder.getRepository().returnSVNClient(client); monitor.done(); } } } FetchMembersOperation.java000066400000000000000000000040521203611042400427650ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operations/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.operations; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.team.core.TeamException; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.progress.IElementCollector; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.core.SVNException; /** * Fetch the members of a remote folder in the background, passing incremental * results through an IElementCollector. */ public class FetchMembersOperation extends SVNOperation { IElementCollector collector; ISVNRemoteFolder remoteFolder; public FetchMembersOperation(IWorkbenchPart part, ISVNRemoteFolder folder, IElementCollector collector) { super(part); this.remoteFolder = folder; this.collector = collector; } protected void execute(IProgressMonitor monitor) throws SVNException, InterruptedException { monitor = Policy.monitorFor(monitor); try { monitor.beginTask(Policy.bind("FetchMembersOperation.message", remoteFolder.getName()), 100); ISVNRemoteResource[] children = remoteFolder.members(Policy.subMonitorFor(monitor, 95)); collector.add(children, Policy.subMonitorFor(monitor, 5)); } catch (TeamException e) { throw SVNException.wrapException(e); } finally { monitor.done(); } } protected String getTaskName() { return Policy.bind("FetchMembersOperation.taskName", remoteFolder.getName()); } } IgnoreOperation.java000066400000000000000000000060501203611042400416440ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operations/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.operations; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.commands.AddIgnoredPatternCommand; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.dialogs.IgnoreResourcesDialog; public class IgnoreOperation extends RepositoryProviderOperation { private final IgnoreResourcesDialog dialog; public IgnoreOperation(IWorkbenchPart part, IResource[] resources, IgnoreResourcesDialog dialog) { super(part, resources); this.dialog = dialog; } /* (non-Javadoc) * @see org.eclipse.team.internal.ccvs.ui.operations.CVSOperation#getTaskName() */ protected String getTaskName() { return Policy.bind("IgnoreOperation.taskName"); //$NON-NLS-1$; } /* (non-Javadoc) * @see org.eclipse.team.internal.ccvs.ui.operations.RepositoryProviderOperation#getTaskName(org.eclipse.team.internal.ccvs.core.CVSTeamProvider) */ protected String getTaskName(SVNTeamProvider provider) { return Policy.bind("IgnoreOperation.0", provider.getProject().getName()); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.operations.RepositoryProviderOperation#execute(org.tigris.subversion.subclipse.core.SVNTeamProvider, org.eclipse.core.resources.IResource[], org.eclipse.core.runtime.IProgressMonitor) */ protected void execute(SVNTeamProvider provider, IResource[] resources, IProgressMonitor monitor) throws SVNException, InterruptedException { try { for (int i = 0; i < resources.length; i++) { IResource resource = resources[i]; String pattern = dialog.getIgnorePatternFor(resource); ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); new AddIgnoredPatternCommand(svnResource.getParent(), pattern).run(monitor); } } catch (SVNException e) { if (e.operationInterrupted()) { showCancelledMessage(); } else { collectStatus(e.getStatus()); } } finally { monitor.done(); } } } ImportOperation.java000066400000000000000000000043641203611042400417010ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operations/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.operations; import java.io.File; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.commands.ImportCommand; import org.tigris.subversion.subclipse.ui.Policy; public class ImportOperation extends SVNOperation { private File directory; private ISVNRemoteFolder folder; private String commitComment; private boolean recurse; public ImportOperation(IWorkbenchPart part, ISVNRemoteFolder folder, File directory, String comment, boolean recurse) { super(part); this.folder = folder; this.directory = directory; this.commitComment = comment; this.recurse = recurse; } protected String getTaskName() { return Policy.bind("ImportOperation.taskName"); //$NON-NLS-1$; } protected String getTaskName(SVNTeamProvider provider) { return Policy.bind("ImportOperation.0", directory.toString()); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.operations.SVNOperation#execute(org.eclipse.core.runtime.IProgressMonitor) */ protected void execute(IProgressMonitor monitor) throws SVNException, InterruptedException { monitor.beginTask(null, 100); try { ImportCommand command = new ImportCommand(folder, directory, commitComment, recurse); command.run(monitor); } catch (SVNException e) { if (e.operationInterrupted()) { showCancelledMessage(); } else { collectStatus(e.getStatus()); } } finally { monitor.done(); } } } MergeOperation.java000066400000000000000000000057011203611042400414620ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operations/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.operations; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.commands.MergeCommand; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class MergeOperation extends RepositoryProviderOperation { private SVNUrl svnUrl1; private SVNUrl svnUrl2; private SVNRevision svnRevision1; private SVNRevision svnRevision2; private boolean force = false; private boolean ignoreAncestry = false; private boolean recurse = true; public MergeOperation(IWorkbenchPart part, IResource[] resources, SVNUrl svnUrl1, SVNRevision svnRevision1, SVNUrl svnUrl2, SVNRevision svnRevision2) { super(part, resources); this.svnUrl1 = svnUrl1; this.svnRevision1 = svnRevision1; this.svnUrl2 = svnUrl2; this.svnRevision2 = svnRevision2; } protected String getTaskName() { return Policy.bind("MergeOperation.taskName"); //$NON-NLS-1$; } protected String getTaskName(SVNTeamProvider provider) { return Policy.bind("MergeOperation.0", provider.getProject().getName()); //$NON-NLS-1$ } protected void execute(SVNTeamProvider provider, IResource[] resources, IProgressMonitor monitor) throws SVNException, InterruptedException { monitor.beginTask(null, 100); try { MergeCommand command = new MergeCommand(provider.getSVNWorkspaceRoot(),resources[0], svnUrl1, svnRevision1, svnUrl2, svnRevision2); command.setForce(force); command.setIgnoreAncestry(ignoreAncestry); command.setRecurse(recurse); command.run(Policy.subMonitorFor(monitor,1000)); } catch (SVNException e) { if (e.operationInterrupted()) { showCancelledMessage(); } else { collectStatus(e.getStatus()); } } finally { monitor.done(); } } public void setForce(boolean force) { this.force = force; } public void setIgnoreAncestry(boolean ignoreAncestry) { this.ignoreAncestry = ignoreAncestry; } public void setRecurse(boolean recurse) { this.recurse = recurse; } } RemoveOperation.java000066400000000000000000000060461203611042400416630ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operations/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.operations; import java.io.File; import java.util.ArrayList; import java.util.Iterator; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; public class RemoveOperation extends SVNOperation { private IResource[] resources; public RemoveOperation(IWorkbenchPart part, IResource[] resources) { super(part); this.resources = resources; } protected void execute(IProgressMonitor monitor) throws SVNException, InterruptedException { ISVNClientAdapter client = null; ISVNRepositoryLocation repository = null; ArrayList files = new ArrayList(); for (int i = 0; i < resources.length; i++) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resources[i]); if (client == null) { repository = svnResource.getRepository(); client = repository.getSVNClient(); } files.add(svnResource.getFile()); } File[] fileArray = new File[files.size()]; files.toArray(fileArray); try { client.remove(fileArray, true); refresh(); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { if (repository != null) { repository.returnSVNClient(client); } monitor.done(); } } protected String getTaskName() { return Policy.bind("MarkDeletedAction.label"); //$NON-NLS-1$; } private void refresh() { ArrayList parents = new ArrayList(); for (int i = 0; i < resources.length; i++) { IResource resource = resources[i]; IResource parent = null; while (resource != null) { resource = resource.getParent(); if (resource != null) parent = resource; } if (parent != null && !parents.contains(parent)) parents.add(parent); } Iterator iter = parents.iterator(); while (iter.hasNext()) { IResource parent = (IResource)iter.next(); try { parent.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); } catch (CoreException e) {} } } } ReplaceOperation.java000066400000000000000000000102511203611042400417720ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operations/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.operations; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * @author Panagiotis K */ public class ReplaceOperation extends UpdateOperation { private final SVNRevision revision; private IResource[] resourcesToUpdate; /** * @param part * @param resources */ public ReplaceOperation(IWorkbenchPart part, IResource[] resources, SVNRevision revision) { super(part, resources, revision); this.revision = revision; } /** * @param part * @param resource */ public ReplaceOperation(IWorkbenchPart part, IResource resource, SVNRevision revision) { super(part, resource, revision); this.revision = revision; } /* (non-Javadoc) * @see org.eclipse.team.internal.ccvs.ui.operations.CVSOperation#getTaskName() */ protected String getTaskName() { return Policy.bind("ReplaceOperation.taskName"); //$NON-NLS-1$; } /* (non-Javadoc) * @see org.eclipse.team.internal.ccvs.ui.operations.RepositoryProviderOperation#getTaskName(org.eclipse.team.internal.ccvs.core.CVSTeamProvider) */ protected String getTaskName(SVNTeamProvider provider) { return Policy.bind("ReplaceOperation.0", provider.getProject().getName()); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.operations.RepositoryProviderOperation#execute(org.tigris.subversion.subclipse.core.SVNTeamProvider, org.eclipse.core.resources.IResource[], org.eclipse.core.runtime.IProgressMonitor) */ protected void execute(SVNTeamProvider provider, IResource[] resources, IProgressMonitor monitor) throws SVNException, InterruptedException { monitor.beginTask(null, 100); try { boolean removeUnAdded = SVNUIPlugin.getPlugin().getPreferenceStore().getBoolean(ISVNUIConstants.PREF_REMOVE_UNADDED_RESOURCES_ON_REPLACE); // first we revert to base (otherwise it will do a merge instead of // replace resources) for (int i = 0; i < resources.length; i++) { IResource resource = resources[i]; ISVNLocalResource localResource = SVNWorkspaceRoot.getSVNResourceFor(resource); if(!localResource.isManaged() && removeUnAdded) { try { resource.delete(true, monitor); } catch (CoreException ex) { throw SVNException.wrapException(ex); } } else if (localResource.isDirty()) { localResource.revert(); } if (!this.revision.equals(SVNRevision.BASE)) { IResource[] updateResources = { resource }; super.execute(provider, updateResources, monitor); } } } catch (SVNException e) { if (e.operationInterrupted()) { showCancelledMessage(); } else { collectStatus(e.getStatus()); } } finally { monitor.done(); } } public void setResourcesToUpdate(IResource[] resourcesToUpdate) { this.resourcesToUpdate = resourcesToUpdate; } } RepositoryBranchTagOperation.java000066400000000000000000000042761203611042400443620ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operationspackage org.tigris.subversion.subclipse.ui.operations; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.commands.BranchTagCommand; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class RepositoryBranchTagOperation extends SVNOperation { private ISVNClientAdapter svnClient; private SVNUrl[] sourceUrls; private SVNUrl destinationUrl; private SVNRevision revision; private boolean makeParents; private String message; private boolean multipleTransactions = true; public RepositoryBranchTagOperation(IWorkbenchPart part, ISVNClientAdapter svnClient, SVNUrl[] sourceUrls, SVNUrl destinationUrl, SVNRevision revision, String message, boolean makeParents) { super(part); this.svnClient = svnClient; this.sourceUrls = sourceUrls; this.destinationUrl = destinationUrl; this.revision = revision; this.message = message; this.makeParents = makeParents; } protected void execute(IProgressMonitor monitor) throws SVNException, InterruptedException { monitor.beginTask(null, 100); try { BranchTagCommand command = new BranchTagCommand(svnClient, null, sourceUrls, destinationUrl, message, true, revision); command.setMakeParents(makeParents); command.setMultipleTransactions(multipleTransactions); command.run(Policy.subMonitorFor(monitor,1000)); SVNUIPlugin.getPlugin().getRepositoryManager().resourceCreated(null, null); } catch (SVNException e) { if (e.operationInterrupted()) { showCancelledMessage(); } else { collectStatus(e.getStatus()); } } finally { monitor.done(); } } public void setMultipleTransactions(boolean multipleTransactions) { this.multipleTransactions = multipleTransactions; } protected String getTaskName() { return Policy.bind("BranchTagOperation.taskName"); //$NON-NLS-1$; } } RepositoryProviderOperation.java000066400000000000000000000206141203611042400443150ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operations/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.operations; import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IResourceRuleFactory; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.Path; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.core.runtime.jobs.MultiRule; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.ISVNFolder; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.ISVNResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; /** * Performs a svn operation on multiple repository providers */ public abstract class RepositoryProviderOperation extends SVNOperation { private IResource[] resources; /** * @param shell */ public RepositoryProviderOperation(IWorkbenchPart part, IResource[] resources) { super(part); this.resources = resources; } /* (non-Javadoc) * @see org.eclipse.team.internal.cSVN.ui.operations.SVNOperation#execute(org.eclipse.core.runtime.IProgressMonitor) */ public void execute(IProgressMonitor monitor) throws SVNException, InterruptedException { Map table = getProviderMapping(getResources()); Set keySet = table.keySet(); monitor.beginTask(null, keySet.size() * 1000); Iterator iterator = keySet.iterator(); while (iterator.hasNext()) { IProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1000); SVNTeamProvider provider = (SVNTeamProvider)iterator.next(); List list = (List)table.get(provider); IResource[] providerResources = (IResource[])list.toArray(new IResource[list.size()]); ISchedulingRule rule = getSchedulingRule(provider); try { Job.getJobManager().beginRule(rule, monitor); monitor.setTaskName(getTaskName(provider)); execute(provider, providerResources, subMonitor); } finally { Job.getJobManager().endRule(rule); } } } /** * Return the taskname to be shown in the progress monitor while operating * on the given provider. * @param provider the provider being processed * @return the taskname to be shown in the progress monitor */ protected abstract String getTaskName(SVNTeamProvider provider); /** * Retgurn the scheduling rule to be obtained before work * begins on the given provider. By default, it is the provider's project. * This can be changed by subclasses. * @param provider * @return */ protected ISchedulingRule getSchedulingRule(SVNTeamProvider provider) { IResourceRuleFactory ruleFactory = provider.getRuleFactory(); HashSet rules = new HashSet(); IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); for (int i = 0; i < resources.length; i++) { IResource[] pathResources = SVNWorkspaceRoot.getResourcesFor(new Path(resources[i].getLocation().toOSString()), false); for (IResource pathResource : pathResources) { IProject resourceProject = pathResource.getProject(); rules.add(ruleFactory.modifyRule(resourceProject)); // Add nested projects for (IProject project : projects) { if (!project.getLocation().equals(resourceProject.getLocation()) && resourceProject.getLocation().isPrefixOf(project.getLocation())) { rules.add(ruleFactory.modifyRule(project)); } } } } return MultiRule.combine((ISchedulingRule[]) rules.toArray(new ISchedulingRule[rules.size()])); } /* * Helper method. Return a Map mapping provider to a list of resources * shared with that provider. */ private Map getProviderMapping(IResource[] resources) { Map result = new HashMap(); for (int i = 0; i < resources.length; i++) { RepositoryProvider provider = RepositoryProvider.getProvider(resources[i].getProject(), SVNProviderPlugin.getTypeId()); List list = (List)result.get(provider); if (list == null) { list = new ArrayList(); result.put(provider, list); } list.add(resources[i]); } return result; } /** * Return the resources that the operation is being performed on * @return */ protected IResource[] getResources() { return resources; } /** * Set the resources that the operation is to be performed on * @param resources */ protected void setResources(IResource[] resources) { this.resources = resources; } /** * Execute the operation on the resources for the given provider. * @param provider * @param providerResources * @param subMonitor * @throws SVNException * @throws InterruptedException */ protected abstract void execute(SVNTeamProvider provider, IResource[] resources, IProgressMonitor monitor) throws SVNException, InterruptedException; protected ISVNResource[] getSVNArguments(IResource[] resources) { ISVNResource[] SVNResources = new ISVNResource[resources.length]; for (int i = 0; i < SVNResources.length; i++) { SVNResources[i] = SVNWorkspaceRoot.getSVNResourceFor(resources[i]); } return SVNResources; } /* * Get the arguments to be passed to a commit or update */ protected String[] getStringArguments(IResource[] resources) throws SVNException { List arguments = new ArrayList(resources.length); for (int i=0;iaddError(IStatus) and return null. * The caller can then query the error using this method. Also, addError(IStatus) * will not add the error if it is already on the end of the list (using identity comparison) * which allows the caller to still perform a collectStatus(IStatus) * to get a valid operation count. * @return */ protected IStatus getLastError() { Assert.isTrue(errors.size() > 0); IStatus status = (IStatus)errors.get(errors.size() - 1); return status; } private boolean isLastError(IStatus status) { return (errors.size() > 0 && getLastError() == status); } protected void handleErrors(IStatus[] errors) throws SVNException { if (errors.length == 0) return; if (errors.length == 1 && statusCount == 1) { throw new SVNException(errors[0]); } MultiStatus result = new MultiStatus(SVNUIPlugin.ID, 0, getErrorMessage(errors, statusCount), null); for (int i = 0; i < errors.length; i++) { IStatus s = errors[i]; if (s.isMultiStatus()) { result.add(new SVNStatus(s.getSeverity(), s.getMessage(), s.getException())); result.addAll(s); } else { result.add(s); } } throw new SVNException(result); } protected String getErrorMessage(IStatus[] failures, int totalOperations) { return Policy.bind("SVNOperation.0", String.valueOf(failures.length), String.valueOf(totalOperations)); //$NON-NLS-1$ } /** * This method prompts the user to overwrite an existing resource. It uses the * involvesMultipleResources to determine what buttons to show. * @param project * @return */ protected boolean promptToOverwrite(final String title, final String msg) { if (!confirmOverwrite) { return true; } final String buttons[]; if (involvesMultipleResources()) { buttons = new String[] { IDialogConstants.YES_LABEL, IDialogConstants.YES_TO_ALL_LABEL, IDialogConstants.NO_LABEL, IDialogConstants.CANCEL_LABEL}; } else { buttons = new String[] {IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL}; } final Shell displayShell = getShell(); if (displayShell == null) { // We couldn't get a shell (perhaps due to shutdown) return false; } // run in syncExec because callback is from an operation, // which is probably not running in the UI thread. final int[] code = new int[] {0}; displayShell.getDisplay().syncExec( new Runnable() { public void run() { MessageDialog dialog = new MessageDialog(displayShell, title, null, msg, MessageDialog.QUESTION, buttons, 0); dialog.open(); code[0] = dialog.getReturnCode(); } }); if (involvesMultipleResources()) { switch (code[0]) { case 0://Yes return true; case 1://Yes to all confirmOverwrite = false; return true; case 2://No return false; case 3://Cancel default: throw new OperationCanceledException(); } } else { return code[0] == 0; } } /** * This method is used by promptToOverwrite to determine which * buttons to show in the prompter. * * @return */ protected boolean involvesMultipleResources() { return involvesMultipleResources; } public void setInvolvesMultipleResources(boolean b) { involvesMultipleResources = b; } /** * Return the string that is to be used as the task name for the operation * * @param remoteFolders * @return */ protected abstract String getTaskName(); /** * Return true if any of the accumulated status have a severity of ERROR * @return */ protected boolean errorsOccurred() { for (Iterator iter = errors.iterator(); iter.hasNext();) { IStatus status = (IStatus) iter.next(); if (status.getSeverity() == IStatus.ERROR) return true; } return false; } /* (non-Javadoc) * @see org.eclipse.team.internal.ui.actions.TeamOperation#getShell() */ protected Shell getShell() { // Use the shell assigned to the operation if possible if (shell != null && !shell.isDisposed()) { return shell; } return super.getShell(); } /** * Set the shell to be used by the operation. This only needs * to be done if the operation does not have a workbench part. * For example, if the operation is being run in a wizard. * @param shell The shell to set. */ public void setShell(Shell shell) { this.shell = shell; } /* (non-Javadoc) * @see org.eclipse.team.ui.TeamOperation#canRunAsJob() */ protected boolean canRunAsJob() { // Put SVN jobs in the background by default. return true; } public void showCancelledMessage() { Display.getDefault().asyncExec(new Runnable() { public void run() { MessageDialog.openInformation(getShell(), getJobName(), Policy.bind("SVNOperation.operationCancelled")); //$NON-NLS-1$ } }); } // protected ISchedulingRule getSchedulingRule() { // // XXX IGORF consider locking affected projects only // return ResourcesPlugin.getWorkspace().getRoot(); // } } ShowAnnotationOperation.java000066400000000000000000000367361203611042400434120ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operations/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.operations; import java.lang.reflect.Method; import java.text.DateFormat; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.jface.action.IAction; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialogWithToggle; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.text.IInformationControl; import org.eclipse.jface.text.IInformationControlCreator; import org.eclipse.jface.text.revisions.Revision; import org.eclipse.jface.text.revisions.RevisionInformation; import org.eclipse.jface.text.source.LineRange; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.RGB; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.internal.ui.Utils; import org.eclipse.ui.IEditorDescriptor; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IEditorReference; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.IWorkbenchWindow; import org.eclipse.ui.PartInitException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.WorkbenchException; import org.eclipse.ui.editors.text.EditorsUI; import org.eclipse.ui.ide.IDE; import org.eclipse.ui.internal.ide.IDEWorkbenchPlugin; import org.eclipse.ui.part.FileEditorInput; import org.eclipse.ui.texteditor.AbstractDecoratedTextEditor; import org.eclipse.ui.texteditor.ITextEditorExtension4; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.commands.GetAnnotationsCommand; import org.tigris.subversion.subclipse.core.commands.GetLogsCommand; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.history.LogEntry; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.annotations.AnnotateBlock; import org.tigris.subversion.subclipse.ui.annotations.AnnotateBlocks; import org.tigris.subversion.subclipse.ui.annotations.AnnotateView; import org.tigris.subversion.svnclientadapter.ISVNAnnotations; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNLogMessage; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * @author Brock Janiczak */ public class ShowAnnotationOperation extends SVNOperation { private final SVNRevision fromRevision; private final SVNRevision toRevision; private final ISVNRemoteFile remoteFile; private final boolean includeMergedRevisions; private final boolean ignoreMimeType; public ShowAnnotationOperation(IWorkbenchPart part, ISVNRemoteFile remoteFile, SVNRevision fromRevision, boolean includeMergedRevisions, boolean ignoreMimeType) { super(part); this.remoteFile = remoteFile; this.fromRevision = fromRevision; this.toRevision = remoteFile.getLastChangedRevision(); this.includeMergedRevisions = includeMergedRevisions; this.ignoreMimeType = ignoreMimeType; } public ShowAnnotationOperation(IWorkbenchPart part, ISVNRemoteFile remoteFile, SVNRevision fromRevision, SVNRevision toRevision, boolean includeMergedRevisions, boolean ignoreMimeType) { super(part); this.remoteFile = remoteFile; this.fromRevision = fromRevision; this.toRevision = toRevision; this.includeMergedRevisions = includeMergedRevisions; this.ignoreMimeType = ignoreMimeType; } public ShowAnnotationOperation(IWorkbenchPart part, ISVNRemoteFile remoteFile, boolean includeMergedRevisions, boolean ignoreMimeType) { this(part, remoteFile, SVNRevision.START, includeMergedRevisions, ignoreMimeType); } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.operations.RepositoryProviderOperation#getTaskName(org.tigris.subversion.subclipse.core.SVNTeamProvider) */ protected String getTaskName(SVNTeamProvider provider) { return Policy.bind("AnnotateOperation.0", provider.getProject().getName()); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.operations.SVNOperation#getTaskName() */ protected String getTaskName() { return Policy.bind("AnnotateOperation.taskName"); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.operations.SVNOperation#execute(org.eclipse.core.runtime.IProgressMonitor) */ protected void execute(final IProgressMonitor monitor) throws SVNException, InterruptedException { monitor.beginTask(null, 100); try { GetAnnotationsCommand command = new GetAnnotationsCommand(remoteFile, fromRevision, toRevision, includeMergedRevisions, ignoreMimeType); command.run(new SubProgressMonitor(monitor, 100)); final ISVNAnnotations annotations = command.getAnnotations(); final AnnotateBlocks annotateBlocks = new AnnotateBlocks(annotations); // this is not needed if there is no live annotate // final RevisionInformation information= createRevisionInformation(annotateBlocks, Policy.subMonitorFor(monitor, 20)); // We aren't running from a UI thread getShell().getDisplay().asyncExec(new Runnable() { public void run() { // is there an open editor for the given input? If yes, use live annotate final ITextEditorExtension4 editor= getEditor(); if (editor != null && promptForQuickDiffAnnotate()){ RevisionInformation information= createRevisionInformation(annotateBlocks, Policy.subMonitorFor(monitor, 20)); editor.showRevisionInformation(information, "org.tigris.subversion.subclipse.quickdiff.providers.SVNReferenceProvider"); //$NON-NLS-1$ } else { try { // Open the view IWorkbenchWindow window = PlatformUI.getWorkbench().getActiveWorkbenchWindow(); if (window != null) { try { PlatformUI.getWorkbench().showPerspective("org.tigris.subversion.subclipse.ui.svnPerspective", window); //$NON-NLS-1$ } catch (WorkbenchException e1) { // If this does not work we will just open the view in the // current perspective. } } AnnotateView view = AnnotateView.openInActivePerspective(); view.showAnnotations(remoteFile, annotateBlocks.getAnnotateBlocks(), annotations.getInputStream()); } catch (PartInitException e1) { collectStatus(e1.getStatus()); } } } }); } catch (SVNException e) { if (e.operationInterrupted()) { showCancelledMessage(); } else { collectStatus(e.getStatus()); } } finally { monitor.done(); } } /* (non-Javadoc) * @see org.eclipse.team.ui.TeamOperation#getGotoAction() */ protected IAction getGotoAction() { return super.getGotoAction(); } private ITextEditorExtension4 getEditor() { final IWorkbench workbench= PlatformUI.getWorkbench(); final IWorkbenchWindow window = workbench.getActiveWorkbenchWindow(); IEditorReference[] references= window.getActivePage().getEditorReferences(); IResource resource= remoteFile.getResource(); if (resource == null) return null; for (int i= 0; i < references.length; i++) { IEditorReference reference= references[i]; try { if (resource != null && resource.equals(reference.getEditorInput().getAdapter(IFile.class))) { IEditorPart editor= reference.getEditor(false); if (editor instanceof ITextEditorExtension4) return (ITextEditorExtension4) editor; else { //editor opened is not a text editor - reopen file using the defualt text editor IEditorPart part = getPart().getSite().getPage().openEditor(new FileEditorInput((IFile) resource), IDEWorkbenchPlugin.DEFAULT_TEXT_EDITOR_ID, true, IWorkbenchPage.MATCH_NONE); if (part != null && part instanceof AbstractDecoratedTextEditor) return (AbstractDecoratedTextEditor)part; } } } catch (PartInitException e) { // ignore } } //no existing editor references found, try to open a new editor for the file if (resource instanceof IFile){ try { IEditorDescriptor descrptr = IDE.getEditorDescriptor((IFile) resource); //try to open the associated editor only if its an internal editor if (descrptr.isInternal()){ IEditorPart part = IDE.openEditor(getPart().getSite().getPage(), (IFile) resource); if (part instanceof AbstractDecoratedTextEditor) return (AbstractDecoratedTextEditor)part; //editor opened is not a text editor - close it getPart().getSite().getPage().closeEditor(part, false); } //open file in default text editor IEditorPart part = IDE.openEditor(getPart().getSite().getPage(), (IFile) resource, IDEWorkbenchPlugin.DEFAULT_TEXT_EDITOR_ID); if (part != null && part instanceof AbstractDecoratedTextEditor) return (AbstractDecoratedTextEditor)part; } catch (PartInitException e) { } } return null; } private RevisionInformation createRevisionInformation(final AnnotateBlocks annotateBlocks, IProgressMonitor monitor) { Map logEntriesByRevision= new HashMap(); GetLogsCommand logCommand = new GetLogsCommand(this.remoteFile, SVNRevision.HEAD, this.fromRevision, this.toRevision, false, 0, null, false); try { logCommand.run(monitor); ILogEntry[] logEntries = logCommand.getLogEntries(); for (int i = 0; i < logEntries.length; i++) { ILogEntry logEntry = logEntries[i]; logEntriesByRevision.put(new Long(logEntry.getRevision().getNumber()), logEntry); } } catch (SVNException e) { SVNUIPlugin.log(e); } RevisionInformation info= new RevisionInformation(); try { // Have to use reflection for compatibility with Eclipse 3.2 API // info.setHoverControlCreator(new AnnotationControlCreator("Press F2 for focus.")); // info.setInformationPresenterControlCreator(new AnnotationControlCreator(null)); String tooltipAffordance = "Press F2 for focus."; try { // Will either set an affordance, or null if the tooltip affordance turned is off tooltipAffordance = (String) EditorsUI.class.getMethod("getTooltipAffordanceString", null).invoke(null, null); } catch (Exception e) { //ignore } Class infoClass = info.getClass(); Class[] paramTypes = {IInformationControlCreator.class}; Method setHoverControlCreator = infoClass.getMethod("setHoverControlCreator", paramTypes); Method setInformationPresenterControlCreator = infoClass.getMethod("setInformationPresenterControlCreator", paramTypes); final class AnnotationControlCreator implements IInformationControlCreator { private final String statusFieldText; public AnnotationControlCreator(String statusFieldText) { this.statusFieldText = statusFieldText; } public IInformationControl createInformationControl(Shell parent) { return new SourceViewerInformationControl(parent, SWT.TOOL, SWT.NONE, JFaceResources.DEFAULT_FONT, statusFieldText); } } setHoverControlCreator.invoke(info, new Object[] {new AnnotationControlCreator(tooltipAffordance)}); setInformationPresenterControlCreator.invoke(info, new Object[] {new AnnotationControlCreator(null)}); } catch (Exception e) { // ignore } final CommitterColors colors= CommitterColors.getDefault(); HashMap sets= new HashMap(); for (Iterator blocks= annotateBlocks.getAnnotateBlocks().iterator(); blocks.hasNext();) { final AnnotateBlock block= (AnnotateBlock) blocks.next(); final String revisionString= Long.toString(block.getRevision()); LogEntry logEntry = (LogEntry) logEntriesByRevision.get(new Long(block.getRevision())); final String logMessage; if (logEntry == null) { logMessage = getSingleEntry(remoteFile, new Long(block.getRevision())); } else { logMessage = logEntry.getComment(); } Revision revision= (Revision) sets.get(revisionString); if (revision == null) { revision= new Revision() { public Object getHoverInfo() { return block.getUser() + " " + revisionString + " " + DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT).format(block.getDate()) + "\n\n" + //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ (logMessage != null ? logMessage : ""); //$NON-NLS-1$ } public String getAuthor() { return block.getUser(); } public String getId() { return revisionString; } public Date getDate() { return block.getDate(); } public RGB getColor() { return colors.getCommitterRGB(getAuthor()); } }; sets.put(revisionString, revision); info.addRevision(revision); } revision.addRange(new LineRange(block.getStartLine(), block.getEndLine() - block.getStartLine() + 1)); } return info; } /** * Returns true if the user wishes to always use the live annotate view, false otherwise. * @return */ private boolean promptForQuickDiffAnnotate(){ //check whether we should ask the user. final IPreferenceStore store = SVNUIPlugin.getPlugin().getPreferenceStore(); final String option = store.getString(ISVNUIConstants.PREF_USE_QUICKDIFFANNOTATE); if (option.equals(MessageDialogWithToggle.ALWAYS)) return true; //use live annotate else if (option.equals(MessageDialogWithToggle.NEVER)) return false; //don't use live annotate final MessageDialogWithToggle dialog = MessageDialogWithToggle.openYesNoQuestion(Utils.getShell(null), Policy.bind("AnnotateOperation_QDAnnotateTitle"), Policy.bind("AnnotateOperation_QDAnnotateMessage"), Policy.bind("AnnotateOperation_4"), false, store, ISVNUIConstants.PREF_USE_QUICKDIFFANNOTATE); final int result = dialog.getReturnCode(); switch (result) { //yes case IDialogConstants.YES_ID: case IDialogConstants.OK_ID : return true; } return false; } private String getSingleEntry(ISVNRemoteFile file, Long revLong) { ISVNClientAdapter client = null; try { client = file.getRepository().getSVNClient(); SVNRevision revision = SVNRevision.getRevision(revLong.toString()); ISVNLogMessage [] messages = client.getLogMessages(file.getRepository().getRepositoryRoot(), revision, revision, false); if (messages.length == 1) return messages[0].getMessage(); else return null; } catch (Exception e) { return null; } finally { file.getRepository().returnSVNClient(client); } } } ShowDifferencesAsUnifiedDiffOperation.java000066400000000000000000000065061203611042400460660ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operations/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.operations; import java.io.File; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.ISVNResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class ShowDifferencesAsUnifiedDiffOperation extends SVNOperation { private SVNUrl fromUrl; private SVNRevision fromRevision; private SVNUrl toUrl; private SVNRevision toRevision; private File file; private ISVNResource localResource; public ShowDifferencesAsUnifiedDiffOperation(IWorkbenchPart part, SVNUrl fromUrl, SVNRevision fromRevision, SVNUrl toUrl, SVNRevision toRevision, File file) { super(part); this.fromUrl = fromUrl; this.toUrl = toUrl; this.fromRevision = fromRevision; this.toRevision = toRevision; this.file = file; } protected void execute(IProgressMonitor monitor) throws SVNException, InterruptedException { ISVNClientAdapter client = null; ISVNRepositoryLocation repository = SVNProviderPlugin.getPlugin().getRepository(fromUrl.toString()); if (repository != null) client = repository.getSVNClient(); if (client == null) client = SVNProviderPlugin.getPlugin().getSVNClientManager().getSVNClient(); try { SVNRevision pegRevision = null; if (fromUrl.toString().equals(toUrl.toString()) && localResource != null) { if (localResource.getResource() == null) pegRevision = SVNRevision.HEAD; else { IResource resource = localResource.getResource(); ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); pegRevision = svnResource.getRevision(); } } if (pegRevision == null) client.diff(fromUrl, fromRevision, toUrl, toRevision, file, true); else client.diff(fromUrl, pegRevision, fromRevision, toRevision, file, true); } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { monitor.done(); SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } } protected String getTaskName() { return Policy.bind("HistoryView.showDifferences"); //$NON-NLS-1$ } public void setLocalResource(ISVNResource localResource) { this.localResource = localResource; } } ShowDifferencesAsUnifiedDiffOperationWC.java000066400000000000000000000054201203611042400463120ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operations/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.operations; import java.io.File; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class ShowDifferencesAsUnifiedDiffOperationWC extends SVNOperation { private File path; private SVNUrl toUrl; private SVNRevision toRevision; private File file; private boolean graphicalCompare = false; private boolean canceled = false; public ShowDifferencesAsUnifiedDiffOperationWC(IWorkbenchPart part, File path, SVNUrl toUrl, SVNRevision toRevision, File file) { super(part); this.path = path; this.toUrl = toUrl; this.toRevision = toRevision; this.file = file; } protected void execute(IProgressMonitor monitor) throws SVNException, InterruptedException { ISVNClientAdapter client = null; ISVNRepositoryLocation repository = SVNProviderPlugin.getPlugin().getRepository(toUrl.toString()); if (repository != null) client = repository.getSVNClient(); if (client == null) client = SVNProviderPlugin.getPlugin().getSVNClientManager().getSVNClient(); try { client.diff(path, toUrl, toRevision, file, true); if (monitor.isCanceled()) canceled = true; } catch (SVNClientException e) { throw SVNException.wrapException(e); } finally { monitor.done(); SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(client); } } protected String getTaskName() { return Policy.bind("HistoryView.showDifferences"); //$NON-NLS-1$ } public void setGraphicalCompare(boolean graphicalCompare) { this.graphicalCompare = graphicalCompare; } protected boolean canRunAsJob() { if (graphicalCompare) return false; else return super.canRunAsJob(); } public boolean isCanceled() { return canceled; } public File getFile() { return file; } } SourceViewerInformationControl.java000066400000000000000000000253271203611042400447410ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operations/******************************************************************************* * Copyright (c) 2000, 2006 IBM Corporation and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.tigris.subversion.subclipse.ui.operations; import java.util.Collections; import java.util.Map; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.text.*; import org.eclipse.jface.text.source.ISourceViewer; import org.eclipse.jface.text.source.SourceViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.StyleRange; import org.eclipse.swt.custom.StyledText; import org.eclipse.swt.events.*; import org.eclipse.swt.graphics.*; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.*; import org.eclipse.ui.editors.text.EditorsUI; import org.eclipse.ui.editors.text.TextSourceViewerConfiguration; /** * Source viewer based implementation of {@link org.eclipse.jface.text.IInformationControl}. * Displays information in a source viewer. * * @since 3.0 * * This class is copied from org.eclipse.jface.text.source.projection.SourceViewerInformationControl * Several changes are made in order to handle hover for CVS annotations */ class SourceViewerInformationControl implements IInformationControl, IInformationControlExtension, DisposeListener { /** Border thickness in pixels. */ private static final int BORDER= 1; /** The control's shell */ private Shell fShell; /** The control's text widget */ private StyledText fText; /** The control's source viewer */ private SourceViewer fViewer; /** The optional status field. */ private Label fStatusField; /** The separator for the optional status field. */ private Label fSeparator; /** The font of the optional status text label.*/ private Font fStatusTextFont; /** The maximal widget width. */ private int fMaxWidth; /** The maximal widget height. */ private int fMaxHeight; /** * Creates a source viewer information control with the given shell as * parent and the given font. * * @param parent the parent shell * @param symbolicFontName the symbolic font name */ public SourceViewerInformationControl(Shell parent, String symbolicFontName) { this(parent, SWT.NO_TRIM | SWT.TOOL, SWT.NONE, symbolicFontName, null); } /** * Creates a source viewer information control with the given shell as * parent. The given shell styles are applied to the created shell. The * given styles are applied to the created styled text widget. The text * widget will be initialized with the given font. The status field will * contain the given text or be hidden. * * @param parent the parent shell * @param shellStyle the additional styles for the shell * @param style the additional styles for the styled text widget * @param symbolicFontName the symbolic font name * @param statusFieldText the text to be used in the optional status field * or null if the status field should be hidden */ public SourceViewerInformationControl(Shell parent, int shellStyle, int style, String symbolicFontName, String statusFieldText) { GridLayout layout; GridData gd; fShell= new Shell(parent, SWT.NO_FOCUS | SWT.ON_TOP | shellStyle); Display display= fShell.getDisplay(); fShell.setBackground(display.getSystemColor(SWT.COLOR_BLACK)); Composite composite= fShell; layout= new GridLayout(1, false); int border= ((shellStyle & SWT.NO_TRIM) == 0) ? 0 : BORDER; layout.marginHeight= border; layout.marginWidth= border; composite.setLayout(layout); gd= new GridData(GridData.FILL_HORIZONTAL); composite.setLayoutData(gd); if (statusFieldText != null) { composite= new Composite(composite, SWT.NONE); layout= new GridLayout(1, false); layout.marginHeight= 0; layout.marginWidth= 0; composite.setLayout(layout); gd= new GridData(GridData.FILL_BOTH); composite.setLayoutData(gd); composite.setForeground(display.getSystemColor(SWT.COLOR_INFO_FOREGROUND)); composite.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND)); } // Source viewer fViewer= new SourceViewer(composite, null, style); fViewer.setEditable(false); // configure hyperlink detectors // fViewer.configure(new SourceViewerConfiguration()); fViewer.configure(new TextSourceViewerConfiguration(EditorsUI.getPreferenceStore()) { protected Map getHyperlinkDetectorTargets(ISourceViewer sourceViewer) { return Collections.singletonMap("org.eclipse.ui.DefaultTextEditor.Subclipse", //$NON-NLS-1$ null); // new IAdaptable() { // public Object getAdapter(Class adapter) { // // return Platform.getAdapterManager().getAdapter(CVSHistoryPage.this, adapter); // return null; // } // }); } }); fText= fViewer.getTextWidget(); gd= new GridData(GridData.BEGINNING | GridData.FILL_BOTH); fText.setLayoutData(gd); fText.setForeground(parent.getDisplay().getSystemColor(SWT.COLOR_INFO_FOREGROUND)); fText.setBackground(parent.getDisplay().getSystemColor(SWT.COLOR_INFO_BACKGROUND)); fText.setFont(JFaceResources.getFont(symbolicFontName)); fText.addKeyListener(new KeyListener() { public void keyPressed(KeyEvent e) { if (e.character == 0x1B) // ESC fShell.dispose(); } public void keyReleased(KeyEvent e) {} }); // Status field if (statusFieldText != null) { // Horizontal separator line fSeparator= new Label(composite, SWT.SEPARATOR | SWT.HORIZONTAL | SWT.LINE_DOT); fSeparator.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); // Status field label fStatusField= new Label(composite, SWT.RIGHT); fStatusField.setText(statusFieldText); Font font= fStatusField.getFont(); FontData[] fontDatas= font.getFontData(); for (int i= 0; i < fontDatas.length; i++) fontDatas[i].setHeight(fontDatas[i].getHeight() * 9 / 10); fStatusTextFont= new Font(fStatusField.getDisplay(), fontDatas); fStatusField.setFont(fStatusTextFont); GridData gd2= new GridData(GridData.FILL_VERTICAL | GridData.FILL_HORIZONTAL | GridData.HORIZONTAL_ALIGN_BEGINNING | GridData.VERTICAL_ALIGN_BEGINNING); fStatusField.setLayoutData(gd2); // Regarding the color see bug 41128 fStatusField.setForeground(display.getSystemColor(SWT.COLOR_WIDGET_DARK_SHADOW)); fStatusField.setBackground(display.getSystemColor(SWT.COLOR_INFO_BACKGROUND)); } addDisposeListener(this); } /** * @see org.eclipse.jface.text.IInformationControlExtension2#setInput(java.lang.Object) * @param input the input object */ public void setInput(Object input) { if (input instanceof String) setInformation((String)input); else setInformation(null); } /* * @see IInformationControl#setInformation(String) */ public void setInformation(String content) { if (content == null) { fViewer.setInput(null); return; } IDocument doc= new Document(content); fViewer.setInput(doc); // decorate text StyleRange styleRange = new StyleRange(); styleRange.start = 0; styleRange.length = content.indexOf('\n'); styleRange.fontStyle = SWT.BOLD; fViewer.getTextWidget().setStyleRange(styleRange); } /* * @see IInformationControl#setVisible(boolean) */ public void setVisible(boolean visible) { fShell.setVisible(visible); } /* * @see org.eclipse.swt.events.DisposeListener#widgetDisposed(org.eclipse.swt.events.DisposeEvent) */ public void widgetDisposed(DisposeEvent event) { if (fStatusTextFont != null && !fStatusTextFont.isDisposed()) fStatusTextFont.dispose(); fStatusTextFont= null; fShell= null; fText= null; } /* * @see org.eclipse.jface.text.IInformationControl#dispose() */ public final void dispose() { if (fShell != null && !fShell.isDisposed()) fShell.dispose(); else widgetDisposed(null); } /* * @see IInformationControl#setSize(int, int) */ public void setSize(int width, int height) { if (fStatusField != null) { GridData gd= (GridData)fViewer.getTextWidget().getLayoutData(); Point statusSize= fStatusField.computeSize(SWT.DEFAULT, SWT.DEFAULT, true); Point separatorSize= fSeparator.computeSize(SWT.DEFAULT, SWT.DEFAULT, true); gd.heightHint= height - statusSize.y - separatorSize.y; } fShell.setSize(width, height); if (fStatusField != null) fShell.pack(true); } /* * @see IInformationControl#setLocation(Point) */ public void setLocation(Point location) { fShell.setLocation(location); } /* * @see IInformationControl#setSizeConstraints(int, int) */ public void setSizeConstraints(int maxWidth, int maxHeight) { fMaxWidth= maxWidth; fMaxHeight= maxHeight; } /* * @see IInformationControl#computeSizeHint() */ public Point computeSizeHint() { // compute the preferred size int x= SWT.DEFAULT; int y= SWT.DEFAULT; Point size= fShell.computeSize(x, y); if (size.x > fMaxWidth) x= fMaxWidth; if (size.y > fMaxHeight) y= fMaxHeight; // recompute using the constraints if the preferred size is larger than the constraints if (x != SWT.DEFAULT || y != SWT.DEFAULT) size= fShell.computeSize(x, y, false); return size; } /* * @see IInformationControl#addDisposeListener(DisposeListener) */ public void addDisposeListener(DisposeListener listener) { fShell.addDisposeListener(listener); } /* * @see IInformationControl#removeDisposeListener(DisposeListener) */ public void removeDisposeListener(DisposeListener listener) { fShell.removeDisposeListener(listener); } /* * @see IInformationControl#setForegroundColor(Color) */ public void setForegroundColor(Color foreground) { fText.setForeground(foreground); } /* * @see IInformationControl#setBackgroundColor(Color) */ public void setBackgroundColor(Color background) { fText.setBackground(background); } /* * @see IInformationControl#isFocusControl() */ public boolean isFocusControl() { return fText.isFocusControl(); } /* * @see IInformationControl#setFocus() */ public void setFocus() { fShell.forceFocus(); fText.setFocus(); } /* * @see IInformationControl#addFocusListener(FocusListener) */ public void addFocusListener(FocusListener listener) { fText.addFocusListener(listener); } /* * @see IInformationControl#removeFocusListener(FocusListener) */ public void removeFocusListener(FocusListener listener) { fText.removeFocusListener(listener); } /* * @see IInformationControlExtension#hasContents() */ public boolean hasContents() { return fText.getCharCount() > 0; } } SwitchOperation.java000066400000000000000000000111721203611042400416630ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operations/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.operations; import java.util.HashMap; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.team.core.TeamException; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.commands.SwitchToUrlCommand; import org.tigris.subversion.subclipse.core.sync.SVNWorkspaceSubscriber; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.conflicts.SVNConflictResolver; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class SwitchOperation extends RepositoryProviderOperation { private SVNRevision svnRevision; private HashMap urlMap = new HashMap(); private int depth = ISVNCoreConstants.DEPTH_UNKNOWN; private boolean setDepth = false; private boolean ignoreExternals = false; private boolean force = true; private boolean ignoreAncestry = false; private boolean canRunAsJob = true; private ISVNConflictResolver conflictResolver; public SwitchOperation(IWorkbenchPart part, IResource[] resources, SVNUrl[] svnUrls, SVNRevision svnRevision) { super(part, resources); this.svnRevision = svnRevision; for (int i = 0; i < resources.length; i++) urlMap.put(resources[i], svnUrls[i]); } protected String getTaskName() { return Policy.bind("SwitchOperation.taskName"); //$NON-NLS-1$; } protected String getTaskName(SVNTeamProvider provider) { return Policy.bind("SwitchOperation.0", provider.getProject().getName()); //$NON-NLS-1$ } protected void execute(SVNTeamProvider provider, IResource[] resources, IProgressMonitor monitor) throws SVNException, InterruptedException { monitor.beginTask("Switch to Branch/Tag", resources.length); try { for (int i = 0; i < resources.length; i++) { monitor.subTask("Switching " + resources[i].getName() + ". . ."); SVNUrl svnUrl = (SVNUrl)urlMap.get(resources[i]); if (conflictResolver != null && conflictResolver instanceof SVNConflictResolver) { ((SVNConflictResolver)conflictResolver).setPart(getPart()); } SVNWorkspaceSubscriber.getInstance().updateRemote(resources); SwitchToUrlCommand command = new SwitchToUrlCommand(provider.getSVNWorkspaceRoot(),resources[i], svnUrl, svnRevision); command.setDepth(depth); command.setSetDepth(setDepth); command.setIgnoreExternals(ignoreExternals); command.setForce(force); command.setIgnoreAncestry(ignoreAncestry); command.setConflictResolver(conflictResolver); command.run(monitor); monitor.worked(1); } } catch (SVNException e) { if (e.operationInterrupted()) { showCancelledMessage(); } else { collectStatus(e.getStatus()); } } catch (TeamException e) { collectStatus(e.getStatus()); } finally { monitor.done(); } } protected boolean canRunAsJob() { return canRunAsJob; } public void setDepth(int depth) { this.depth = depth; } public void setSetDepth(boolean setDepth) { this.setDepth = setDepth; } public void setIgnoreExternals(boolean ignoreExternals) { this.ignoreExternals = ignoreExternals; } public void setForce(boolean force) { this.force = force; } public void setIgnoreAncestry(boolean ignoreAncestry) { this.ignoreAncestry = ignoreAncestry; } public void setCanRunAsJob(boolean canRunAsJob) { this.canRunAsJob = canRunAsJob; } public void setConflictResolver(ISVNConflictResolver conflictResolver) { this.conflictResolver = conflictResolver; } protected ISchedulingRule getSchedulingRule(SVNTeamProvider provider) { return null; } } UpdateOperation.java000066400000000000000000000115371203611042400416510ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operations/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.operations; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.team.core.TeamException; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.commands.UpdateResourcesCommand; import org.tigris.subversion.subclipse.core.sync.SVNWorkspaceSubscriber; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.conflicts.SVNConflictResolver; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; import org.tigris.subversion.svnclientadapter.SVNRevision; /** * @author Panagiotis K */ public class UpdateOperation extends RepositoryProviderOperation { private final SVNRevision revision; private int depth = ISVNCoreConstants.DEPTH_UNKNOWN; private boolean setDepth = false; private boolean ignoreExternals = false; private boolean force = true; private boolean canRunAsJob = true; private ISVNConflictResolver conflictResolver; public UpdateOperation(IWorkbenchPart part, IResource resource, SVNRevision revision) { super(part, new IResource[] {resource}); this.revision = revision; } public UpdateOperation(IWorkbenchPart part, IResource[] resources, SVNRevision revision) { super(part, resources); this.revision = revision; } /* (non-Javadoc) * @see org.eclipse.team.internal.ccvs.ui.operations.CVSOperation#getTaskName() */ protected String getTaskName() { return Policy.bind("UpdateOperation.taskName"); //$NON-NLS-1$; } /* (non-Javadoc) * @see org.eclipse.team.internal.ccvs.ui.operations.RepositoryProviderOperation#getTaskName(org.eclipse.team.internal.ccvs.core.CVSTeamProvider) */ protected String getTaskName(SVNTeamProvider provider) { return Policy.bind("UpdateOperation.0", provider.getProject().getName()); //$NON-NLS-1$ } /* (non-Javadoc) * @see org.tigris.subversion.subclipse.ui.operations.RepositoryProviderOperation#execute(org.tigris.subversion.subclipse.core.SVNTeamProvider, org.eclipse.core.resources.IResource[], org.eclipse.core.runtime.IProgressMonitor) */ protected void execute(SVNTeamProvider provider, IResource[] resources, IProgressMonitor monitor) throws SVNException, InterruptedException { monitor.beginTask(null, 100); try { if (conflictResolver != null && conflictResolver instanceof SVNConflictResolver) { ((SVNConflictResolver)conflictResolver).setPart(getPart()); } SVNWorkspaceSubscriber.getInstance().updateRemote(resources); UpdateResourcesCommand command = new UpdateResourcesCommand(provider.getSVNWorkspaceRoot(),resources, revision); command.setDepth(depth); command.setSetDepth(setDepth); command.setIgnoreExternals(ignoreExternals); command.setForce(force); command.setConflictResolver(conflictResolver); command.run(Policy.subMonitorFor(monitor,100)); //updateWorkspaceSubscriber(provider, resources, Policy.subMonitorFor(monitor, 5)); } catch (SVNException e) { if (e.operationInterrupted()) { showCancelledMessage(); } else { collectStatus(e.getStatus()); } } catch (TeamException e) { collectStatus(e.getStatus()); } finally { SVNProviderPlugin.broadcastSyncInfoChanges(resources, false); monitor.done(); } } public void setDepth(int depth) { this.depth = depth; } public void setSetDepth(boolean setDepth) { this.setDepth = setDepth; } public void setIgnoreExternals(boolean ignoreExternals) { this.ignoreExternals = ignoreExternals; } public void setForce(boolean force) { this.force = force; } public void setCanRunAsJob(boolean canRunAsJob) { this.canRunAsJob = canRunAsJob; } protected boolean canRunAsJob() { return canRunAsJob; } public void setConflictResolver(ISVNConflictResolver conflictResolver) { this.conflictResolver = conflictResolver; } protected ISchedulingRule getSchedulingRule(SVNTeamProvider provider) { return null; } } UpgradeOperation.java000066400000000000000000000030431203611042400420070ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/operationspackage org.tigris.subversion.subclipse.ui.operations; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.ui.IWorkbenchPart; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.commands.UpgradeResourcesCommand; import org.tigris.subversion.subclipse.ui.Policy; public class UpgradeOperation extends RepositoryProviderOperation { public UpgradeOperation(IWorkbenchPart part, IResource[] resources) { super(part, resources); } @Override protected String getTaskName() { return Policy.bind("UpgradeOperation.taskName"); //$NON-NLS-1$; } @Override protected String getTaskName(SVNTeamProvider provider) { return Policy.bind("UpgradeOperation.0", provider.getProject().getName()); //$NON-NLS-1$ } @Override protected void execute(SVNTeamProvider provider, IResource[] resources, IProgressMonitor monitor) throws SVNException, InterruptedException { monitor.beginTask(null, 100); try { UpgradeResourcesCommand command = new UpgradeResourcesCommand(provider.getSVNWorkspaceRoot(),resources); command.run(Policy.subMonitorFor(monitor,100)); } catch (SVNException e) { if (e.operationInterrupted()) { showCancelledMessage(); } else { collectStatus(e.getStatus()); } } finally { monitor.done(); } } } 000077500000000000000000000000001203611042400360125ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/preferencesOverlayIcon.java000066400000000000000000000063031203611042400411110ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/preferences/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.preferences; import java.util.Arrays; import org.eclipse.jface.resource.CompositeImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.graphics.*; /** * An OverlayIcon consists of a main icon and several adornments. */ public class OverlayIcon extends CompositeImageDescriptor { // the base image private Image base; // the base as a descriptor private ImageDescriptor descriptorBase; // the overlay images private ImageDescriptor[] overlays; // the size private Point size; // the locations private int[] locations; public static final int TOP_LEFT = 0; public static final int TOP_RIGHT = 1; public static final int BOTTOM_LEFT = 2; public static final int BOTTOM_RIGHT = 3; public static final int DEFAULT_WIDTH= 22; public static final int DEFAULT_HEIGHT= 16; /** * OverlayIcon constructor. * * @param base the base image * @param overlays the overlay images * @param locations the location of each image * @param size the size */ public OverlayIcon(Image base, ImageDescriptor[] overlays, int[] locations, Point size) { this.base = base; this.descriptorBase = null; this.overlays = overlays; this.locations = locations; this.size = size; } protected void drawOverlays(ImageDescriptor[] overlays, int[] locations) { Point size = getSize(); for (int i = 0; i < overlays.length; i++) { ImageDescriptor overlay = overlays[i]; ImageData overlayData = overlay.getImageData(); switch (locations[i]) { case TOP_LEFT: drawImage(overlayData, 0, 0); break; case TOP_RIGHT: drawImage(overlayData, size.x - overlayData.width, 0); break; case BOTTOM_LEFT: drawImage(overlayData, 0, size.y - overlayData.height); break; case BOTTOM_RIGHT: drawImage(overlayData, size.x - overlayData.width, size.y - overlayData.height); break; } } } public boolean equals(Object o) { if (! (o instanceof OverlayIcon)) return false; OverlayIcon other = (OverlayIcon) o; return base.equals(other.base) && Arrays.equals(overlays, other.overlays); } public int hashCode() { int code = base.hashCode(); for (int i = 0; i < overlays.length; i++) { code ^= overlays[i].hashCode(); } return code; } protected void drawCompositeImage(int width, int height) { if(descriptorBase != null) { ImageData bg; if (descriptorBase == null || (bg= descriptorBase.getImageData()) == null) bg= DEFAULT_IMAGE_DATA; drawImage(bg, 0, 0); } else { drawImage(base.getImageData(), 0, 0); } drawOverlays(overlays, locations); } protected Point getSize() { return size; } } SVNDecoratorPreferencesPage.java000066400000000000000000001102141203611042400441440ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/preferences/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.preferences; import java.text.DateFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Observable; import java.util.Observer; import org.eclipse.core.resources.IResource; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.resource.JFaceResources; import org.eclipse.jface.resource.LocalResourceManager; import org.eclipse.jface.resource.ResourceManager; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.TabFolder; import org.eclipse.swt.widgets.TabItem; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.team.ui.TeamImages; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.ListSelectionDialog; import org.eclipse.ui.ide.IDE.SharedImages; import org.eclipse.ui.preferences.IWorkbenchPreferenceContainer; import org.eclipse.ui.themes.ITheme; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.decorator.SVNDecoratorConfiguration; import org.tigris.subversion.subclipse.ui.decorator.SVNLightweightDecorator; import org.tigris.subversion.subclipse.ui.decorator.SVNLightweightDecorator.CachedImageDescriptor; import org.tigris.subversion.subclipse.ui.internal.SWTUtils; /** * The preference page for decoration * */ public class SVNDecoratorPreferencesPage extends PreferencePage implements IWorkbenchPreferencePage { private Button imageShowDirty; private Button imageShowHasRemote; private Button imageShowAdded; private Button imageShowNewResource; private Button imageShowExternal; private Text fileTextFormat; private Text folderTextFormat; private Text projectTextFormat; private Text dateFormatText; private Text dirtyFlag; private Text addedFlag; private Text externalFlag; private Button showDirty; private Button enableFontDecorators; protected static final Collection ROOT; private static ImageDescriptor newResource; private static ImageDescriptor dirty; private static ImageDescriptor added; private static ImageDescriptor checkedIn; private static ImageDescriptor external; private static ImageDescriptor locked; private static ImageDescriptor needsLock; private static ImageDescriptor conflicted; private static ImageDescriptor deleted; private static ImageDescriptor switched; private static ThemeListener fThemeListener; static { final PreviewFile project= new PreviewFile("Project", IResource.PROJECT, false, false, false, false, true, false, false, false, false, false, false, null, "v1_0"); //$NON-NLS-1$ //$NON-NLS-2$ final ArrayList children= new ArrayList(); children.add(new PreviewFile("External Folder", IResource.FOLDER, false, false, false, false, true, true, false, false, false, false, false, null, null)); //$NON-NLS-1$ children.add(new PreviewFile("Folder", IResource.FOLDER, false, false, false, false, true, false, false, false, false, false, false, null, null)); //$NON-NLS-1$ children.add(new PreviewFile("Scheduled for Delete Folder", IResource.FOLDER, false, false, false, false, true, false, false, false, false, true, false, null, null)); //$NON-NLS-1$ children.add(new PreviewFile("Switched Folder", IResource.FOLDER, false, false, false, false, true, false, false, false, false, false, true, null, null)); //$NON-NLS-1$ children.add(new PreviewFile("added.java", IResource.FILE, true, false, true, false, false, false, false, false, false, false, false, null, null)); //$NON-NLS-1$ children.add(new PreviewFile("conflicted.txt", IResource.FILE, false, false, false, false, true, false, false, false, true, false, false, null, null)); //$NON-NLS-1$ children.add(new PreviewFile("dirty.cpp", IResource.FILE, false, false, true, false, true, false, false, false, false, false, false, null, null)); //$NON-NLS-1$ children.add(new PreviewFile("ignored.txt", IResource.FILE, false, false, false, true, false, false, false, false, false, false, false, null, null)); //$NON-NLS-1$ children.add(new PreviewFile("locked.txt", IResource.FILE, false, false, false, false, true, false, true, false, false, false, false, null, null)); //$NON-NLS-1$ children.add(new PreviewFile("readOnly.txt", IResource.FILE, false, false, false, false, true, false, false, true, false, false, false, null, null)); //$NON-NLS-1$ children.add(new PreviewFile("unchanged.txt", IResource.FILE, false, false, false, false, true, false, false, false, false, false, false, null, null)); //$NON-NLS-1$ children.add(new PreviewFile("unversioned.txt", IResource.FILE, false, true, false, false, false, false, false, false, false, false, false, null, null)); //$NON-NLS-1$ // children.add(new PreviewFile("archive.zip", IResource.FILE, false, false, true, false, true, false, false, false, false, false, false, null, null)); //$NON-NLS-1$ project.children= children; ROOT= Collections.singleton(project); } static { dirty = new CachedImageDescriptor(TeamImages.getImageDescriptor(org.eclipse.team.ui.ISharedImages.IMG_DIRTY_OVR)); checkedIn = new CachedImageDescriptor(TeamImages.getImageDescriptor(org.eclipse.team.ui.ISharedImages.IMG_CHECKEDIN_OVR)); added = new CachedImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_ADDED)); newResource = new CachedImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_QUESTIONABLE)); external = new CachedImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_EXTERNAL)); locked = new CachedImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_LOCKED)); needsLock = new CachedImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_NEEDSLOCK)); conflicted = new CachedImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_CONFLICTED)); deleted = new CachedImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_DELETED)); switched = new CachedImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_SWITCHED)); } private Preview fPreview; class StringPair { String s1; String s2; } class TextPair { TextPair(Text t1, Text t2) { this.t1 = t1; this.t2 = t2; } Text t1; Text t2; } /** * Constructor for SVNDecoratorPreferencesPage. */ public SVNDecoratorPreferencesPage() { setDescription(Policy.bind("SVNDecoratorPreferencesPage.description")); //$NON-NLS-1$; } private Button createCheckBox(Composite group, String label) { Button button = new Button(group, SWT.CHECK); button.setText(label); return button; } /** * create the Label Decoration/general page * @param parent * @return */ private Control createGeneralDecoratorPage(Composite parent) { Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); composite.setLayout(layout); GridData data = new GridData(); data.horizontalAlignment = GridData.FILL; composite.setLayoutData(data); SWTUtils.createPreferenceLink((IWorkbenchPreferenceContainer) getContainer(), composite, "org.eclipse.ui.preferencePages.Decorators", Policy.bind("SVNDecoratorPreferencesPage.labelDecorationsLink")); //$NON-NLS-1$ //$NON-NLS-2$ showDirty = createCheckBox(composite, Policy.bind("SVNDecoratorPreferencesPage.computeDeep")); //$NON-NLS-1$ enableFontDecorators = createCheckBox(composite, Policy.bind("SVNDecoratorPreferencesPage.useFontDecorators")); //$NON-NLS-1$ SWTUtils.createPreferenceLink((IWorkbenchPreferenceContainer) getContainer(), composite, "org.eclipse.ui.preferencePages.ColorsAndFonts", Policy.bind("SVNDecoratorPreferencesPage.colorsAndFontsLink")); //$NON-NLS-1$ //$NON-NLS-2$ return composite; } /** * creates the following controls (sample) * File Format : [{added_flag}{dirty_flag}{name} {revision} {date} {author}] [Add Variables] * Example : [ ] * supportedBindings is a map of {key : description} (ex : {"name","name of the resource being decorated"}) * @returns the text control for the format and the text control for the example */ protected TextPair createFormatEditorControl( Composite composite, String title, String buttonText, final Map supportedBindings) { createLabel(composite, title, 1); Text format = new Text(composite, SWT.BORDER); format.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); format.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { updateExamples(); } }); Button b = new Button(composite, SWT.NONE); b.setText(buttonText); GridData data = new GridData(); data.horizontalAlignment = GridData.FILL; int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); data.widthHint = Math.max(widthHint, b.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); b.setLayoutData(data); final Text formatToInsert = format; b.addListener(SWT.Selection, new Listener() { public void handleEvent (Event event) { addVariables(formatToInsert, supportedBindings); } }); return new TextPair(format, null); } /** * updates the examples */ protected void updateExamples() { if (fPreview != null) fPreview.refresh(); } /** * @see PreferencePage#createContents(Composite) */ protected Control createContents(Composite parent) { // create a tab folder for the page TabFolder tabFolder = new TabFolder(parent, SWT.NONE); tabFolder.setLayoutData(new GridData(GridData.FILL_BOTH)); // general decoration options TabItem tabItem = new TabItem(tabFolder, SWT.NONE); tabItem.setText(Policy.bind("SVNDecoratorPreferencesPage.generalTabFolder"));//$NON-NLS-1$ tabItem.setControl(createGeneralDecoratorPage(tabFolder)); // text decoration options tabItem = new TabItem(tabFolder, SWT.NONE); tabItem.setText(Policy.bind("SVNDecoratorPreferencesPage.textLabel"));//$NON-NLS-1$ tabItem.setControl(createTextDecoratorPage(tabFolder)); // image decoration options tabItem = new TabItem(tabFolder, SWT.NONE); tabItem.setText(Policy.bind("Icon_Overlays_24"));//$NON-NLS-1$ tabItem.setControl(createIconDecoratorPage(tabFolder)); initializeValues(); fPreview= new Preview(parent); fPreview.setColorsAndFonts(); PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IHelpContextIds.DECORATORS_PREFERENCE_PAGE); PlatformUI.getWorkbench().getThemeManager().addPropertyChangeListener(fThemeListener= new ThemeListener(fPreview)); Dialog.applyDialogFont(parent); return tabFolder; } /** * creates the controls for the first tab folder (Decorator page) */ private Control createTextDecoratorPage(Composite parent) { Composite fileTextGroup = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 3; fileTextGroup.setLayout(layout); GridData data = new GridData(); data.horizontalAlignment = GridData.FILL; fileTextGroup.setLayoutData(data); createLabel(fileTextGroup, Policy.bind("SVNDecoratorPreferencesPage.selectFormats"), 3); //$NON-NLS-1$ TextPair format = createFormatEditorControl(fileTextGroup, Policy.bind("SVNDecoratorPreferencesPage.fileFormat"), //$NON-NLS-1$ Policy.bind("SVNDecoratorPreferencesPage.addVariables"), getFileBindingDescriptions()); //$NON-NLS-1$ //$NON-NLS-2$ fileTextFormat = format.t1; format = createFormatEditorControl(fileTextGroup, Policy.bind("SVNDecoratorPreferencesPage.folderFormat"), //$NON-NLS-1$ Policy.bind("SVNDecoratorPreferencesPage.addVariables"), getFolderBindingDescriptions()); //$NON-NLS-1$ //$NON-NLS-2$ folderTextFormat = format.t1; format = createFormatEditorControl(fileTextGroup, Policy.bind("SVNDecoratorPreferencesPage.projectFormat"), //$NON-NLS-1$ Policy.bind("SVNDecoratorPreferencesPage.addVariables"), getProjectBindingDescriptions()); //$NON-NLS-1$ //$NON-NLS-2$ projectTextFormat = format.t1; createLabel(fileTextGroup, Policy.bind("SVNDecoratorPreferencesPage.0"), 1); //$NON-NLS-1$ dateFormatText = new Text(fileTextGroup, SWT.BORDER); data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL); dateFormatText.setLayoutData(data); dateFormatText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { updateExamples(); } }); new Label(fileTextGroup, SWT.NONE); createLabel(fileTextGroup, Policy.bind("SVNDecoratorPreferencesPage.labelDecorationOutgoing"), 1); //$NON-NLS-1$ dirtyFlag = new Text(fileTextGroup, SWT.BORDER); dirtyFlag.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); dirtyFlag.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { updateExamples(); } }); createLabel(fileTextGroup, "", 1); // spacer //$NON-NLS-1$ createLabel(fileTextGroup, Policy.bind("SVNDecoratorPreferencesPage.labelDecorationAdded"), 1); //$NON-NLS-1$ addedFlag = new Text(fileTextGroup, SWT.BORDER); addedFlag.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); addedFlag.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { updateExamples(); } }); createLabel(fileTextGroup, "", 1); // spacer //$NON-NLS-1$ createLabel(fileTextGroup, Policy.bind("SVNDecoratorPreferencesPage.labelDecorationExternal"), 1); //$NON-NLS-1$ externalFlag = new Text(fileTextGroup, SWT.BORDER); externalFlag.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); externalFlag.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { updateExamples(); } }); return fileTextGroup; } private Control createIconDecoratorPage(Composite parent) { Composite imageGroup = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); imageGroup.setLayout(layout); GridData data = new GridData(); data.horizontalAlignment = GridData.FILL; imageGroup.setLayoutData(data); imageShowDirty = createCheckBox(imageGroup, Policy.bind("Sho&w_outgoing_25")); //$NON-NLS-1$ imageShowHasRemote = createCheckBox(imageGroup, Policy.bind("Show_has_&remote_26")); //$NON-NLS-1$ imageShowAdded = createCheckBox(imageGroup, Policy.bind("S&how_is_added_27")); //$NON-NLS-1$ imageShowNewResource = createCheckBox(imageGroup, Policy.bind("SVNDecoratorPreferencesPage.newResources")); //$NON-NLS-1$ imageShowExternal = createCheckBox(imageGroup, Policy.bind("SVNDecoratorPreferencesPage.externalResources")); //$NON-NLS-1$ return imageGroup; } /** * creates a label */ private Label createLabel(Composite parent, String text, int span) { Label label = new Label(parent, SWT.LEFT); label.setText(text); GridData data = new GridData(); data.horizontalSpan = span; data.horizontalAlignment = GridData.FILL; label.setLayoutData(data); return label; } /** * Initializes states of the controls from the preference store. */ private void initializeValues() { final IPreferenceStore store = getPreferenceStore(); fileTextFormat.setText(store.getString(ISVNUIConstants.PREF_FILETEXT_DECORATION)); folderTextFormat.setText(store.getString(ISVNUIConstants.PREF_FOLDERTEXT_DECORATION)); projectTextFormat.setText(store.getString(ISVNUIConstants.PREF_PROJECTTEXT_DECORATION)); String dateFormatPattern = store.getString(ISVNUIConstants.PREF_DATEFORMAT_DECORATION); if (dateFormatPattern != null) { dateFormatText.setText(dateFormatPattern); } addedFlag.setText(store.getString(ISVNUIConstants.PREF_ADDED_FLAG)); dirtyFlag.setText(store.getString(ISVNUIConstants.PREF_DIRTY_FLAG)); externalFlag.setText(store.getString(ISVNUIConstants.PREF_EXTERNAL_FLAG)); imageShowDirty.setSelection(store.getBoolean(ISVNUIConstants.PREF_SHOW_DIRTY_DECORATION)); imageShowAdded.setSelection(store.getBoolean(ISVNUIConstants.PREF_SHOW_ADDED_DECORATION)); imageShowHasRemote.setSelection(store.getBoolean(ISVNUIConstants.PREF_SHOW_HASREMOTE_DECORATION)); imageShowNewResource.setSelection(store.getBoolean(ISVNUIConstants.PREF_SHOW_NEWRESOURCE_DECORATION)); imageShowExternal.setSelection(store.getBoolean(ISVNUIConstants.PREF_SHOW_EXTERNAL_DECORATION)); showDirty.setSelection(store.getBoolean(ISVNUIConstants.PREF_CALCULATE_DIRTY)); enableFontDecorators.setSelection(store.getBoolean(ISVNUIConstants.PREF_USE_FONT_DECORATORS)); SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { fPreview.refresh(); } }; enableFontDecorators.addSelectionListener(selectionListener); imageShowDirty.addSelectionListener(selectionListener); imageShowAdded.addSelectionListener(selectionListener); imageShowHasRemote.addSelectionListener(selectionListener); imageShowNewResource.addSelectionListener(selectionListener); imageShowExternal.addSelectionListener(selectionListener); setValid(true); } /** * @see IWorkbenchPreferencePage#init(IWorkbench) */ public void init(IWorkbench workbench) { } /** * OK was clicked. Store the SVN preferences. * * @return whether it is okay to close the preference page */ public boolean performOk() { IPreferenceStore store = getPreferenceStore(); store.setValue(ISVNUIConstants.PREF_FILETEXT_DECORATION, fileTextFormat.getText()); store.setValue(ISVNUIConstants.PREF_FOLDERTEXT_DECORATION, folderTextFormat.getText()); store.setValue(ISVNUIConstants.PREF_PROJECTTEXT_DECORATION, projectTextFormat.getText()); store.setValue(ISVNUIConstants.PREF_DATEFORMAT_DECORATION, dateFormatText.getText()); store.setValue(ISVNUIConstants.PREF_ADDED_FLAG, addedFlag.getText()); store.setValue(ISVNUIConstants.PREF_DIRTY_FLAG, dirtyFlag.getText()); store.setValue(ISVNUIConstants.PREF_EXTERNAL_FLAG, externalFlag.getText()); store.setValue(ISVNUIConstants.PREF_SHOW_DIRTY_DECORATION, imageShowDirty.getSelection()); store.setValue(ISVNUIConstants.PREF_SHOW_ADDED_DECORATION, imageShowAdded.getSelection()); store.setValue(ISVNUIConstants.PREF_SHOW_HASREMOTE_DECORATION, imageShowHasRemote.getSelection()); store.setValue(ISVNUIConstants.PREF_SHOW_NEWRESOURCE_DECORATION, imageShowNewResource.getSelection()); store.setValue(ISVNUIConstants.PREF_SHOW_EXTERNAL_DECORATION, imageShowExternal.getSelection()); store.setValue(ISVNUIConstants.PREF_CALCULATE_DIRTY, showDirty.getSelection()); store.setValue(ISVNUIConstants.PREF_USE_FONT_DECORATORS, enableFontDecorators.getSelection()); // Update the strategy used to calculate the dirty state SVNProviderPlugin.getPlugin().getPluginPreferences().setValue(ISVNCoreConstants.PREF_RECURSIVE_STATUS_UPDATE, showDirty.getSelection()); SVNProviderPlugin.getPlugin().savePluginPreferences(); SVNLightweightDecorator.refresh(); SVNUIPlugin.getPlugin().savePluginPreferences(); return true; } /** * Defaults was clicked. Restore the SVN preferences to * their default values */ protected void performDefaults() { super.performDefaults(); IPreferenceStore store = getPreferenceStore(); fileTextFormat.setText(store.getDefaultString(ISVNUIConstants.PREF_FILETEXT_DECORATION)); folderTextFormat.setText(store.getDefaultString(ISVNUIConstants.PREF_FOLDERTEXT_DECORATION)); projectTextFormat.setText(store.getDefaultString(ISVNUIConstants.PREF_PROJECTTEXT_DECORATION)); dateFormatText.setText(""); //$NON-NLS-1$ addedFlag.setText(store.getDefaultString(ISVNUIConstants.PREF_ADDED_FLAG)); dirtyFlag.setText(store.getDefaultString(ISVNUIConstants.PREF_DIRTY_FLAG)); externalFlag.setText(store.getDefaultString(ISVNUIConstants.PREF_EXTERNAL_FLAG)); imageShowDirty.setSelection(store.getDefaultBoolean(ISVNUIConstants.PREF_SHOW_DIRTY_DECORATION)); imageShowAdded.setSelection(store.getDefaultBoolean(ISVNUIConstants.PREF_SHOW_ADDED_DECORATION)); imageShowHasRemote.setSelection(store.getDefaultBoolean(ISVNUIConstants.PREF_SHOW_HASREMOTE_DECORATION)); imageShowNewResource.setSelection(store.getDefaultBoolean(ISVNUIConstants.PREF_SHOW_NEWRESOURCE_DECORATION)); imageShowExternal.setSelection(store.getDefaultBoolean(ISVNUIConstants.PREF_SHOW_EXTERNAL_DECORATION)); showDirty.setSelection(store.getDefaultBoolean(ISVNUIConstants.PREF_CALCULATE_DIRTY)); enableFontDecorators.setSelection(store.getDefaultBoolean(ISVNUIConstants.PREF_USE_FONT_DECORATORS)); setValid(true); } /** * Returns preference store that belongs to the our plugin. * This is important because we want to store * our preferences separately from the desktop. * * @return the preference store for this plugin */ protected IPreferenceStore doGetPreferenceStore() { return SVNUIPlugin.getPlugin().getPreferenceStore(); } public void dispose() { PlatformUI.getWorkbench().getThemeManager().removePropertyChangeListener(fThemeListener); super.dispose(); } /** * Add another variable to the given target. The variable is inserted at current position * A ListSelectionDialog is shown and the choose the variables to add */ private void addVariables(Text target, Map bindings) { final List variables = new ArrayList(bindings.size()); ILabelProvider labelProvider = new LabelProvider() { public String getText(Object element) { return ((StringPair)element).s1 + " - " + ((StringPair)element).s2; //$NON-NLS-1$ } }; IStructuredContentProvider contentsProvider = new IStructuredContentProvider() { public Object[] getElements(Object inputElement) { return variables.toArray(new StringPair[variables.size()]); } public void dispose() {} public void inputChanged(Viewer viewer, Object oldInput, Object newInput) {} }; for (Iterator it = bindings.keySet().iterator(); it.hasNext();) { StringPair variable = new StringPair(); variable.s1 = (String) it.next(); // variable variable.s2 = (String) bindings.get(variable.s1); // description variables.add(variable); } ListSelectionDialog dialog = new ListSelectionDialog( this.getShell(), this, contentsProvider, labelProvider, Policy.bind("SVNDecoratorPreferencesPage.selectVariablesToAdd")); //$NON-NLS-1$ dialog.setTitle(Policy.bind("SVNDecoratorPreferencesPage.AddVariables")); //$NON-NLS-1$ if (dialog.open() != ListSelectionDialog.OK) return; Object[] result = dialog.getResult(); for (int i = 0; i < result.length; i++) { target.insert("{"+((StringPair)result[i]).s1 +"}"); //$NON-NLS-1$ //$NON-NLS-2$ } } /** * get the map of {variable,description} to use for folders with createFormatEditorControl */ private Map getFolderBindingDescriptions() { Map bindings = new HashMap(); bindings.put(SVNDecoratorConfiguration.RESOURCE_NAME, Policy.bind("SVNDecoratorPreferencesPage.nameResourceVariable")); //$NON-NLS-1$ bindings.put(SVNDecoratorConfiguration.RESOURCE_REVISION, Policy.bind("SVNDecoratorPreferencesPage.revisionResourceVariable")); //$NON-NLS-1$ bindings.put(SVNDecoratorConfiguration.DIRTY_FLAG, Policy.bind("SVNDecoratorPreferencesPage.flagDirtyVariable")); //$NON-NLS-1$ bindings.put(SVNDecoratorConfiguration.ADDED_FLAG, Policy.bind("SVNDecoratorPreferencesPage.flagAddedVariable")); //$NON-NLS-1$ bindings.put(SVNDecoratorConfiguration.EXTERNAL_FLAG, Policy.bind("SVNDecoratorPreferencesPage.flagExternalVariable")); //$NON-NLS-1$ bindings.put(SVNDecoratorConfiguration.RESOURCE_AUTHOR, Policy.bind("SVNDecoratorPreferencesPage.authorVariable")); //$NON-NLS-1$ bindings.put(SVNDecoratorConfiguration.RESOURCE_DATE, Policy.bind("SVNDecoratorPreferencesPage.dateVariable")); //$NON-NLS-1$ return bindings; } /** * get the map of {variable,description} to use for files with createFormatEditorControl */ private Map getFileBindingDescriptions() { Map bindings = new HashMap(); bindings.put(SVNDecoratorConfiguration.RESOURCE_NAME, Policy.bind("SVNDecoratorPreferencesPage.nameResourceVariable")); //$NON-NLS-1$ bindings.put(SVNDecoratorConfiguration.RESOURCE_REVISION, Policy.bind("SVNDecoratorPreferencesPage.revisionResourceVariable")); //$NON-NLS-1$ bindings.put(SVNDecoratorConfiguration.DIRTY_FLAG, Policy.bind("SVNDecoratorPreferencesPage.flagDirtyVariable")); //$NON-NLS-1$ bindings.put(SVNDecoratorConfiguration.ADDED_FLAG, Policy.bind("SVNDecoratorPreferencesPage.flagAddedVariable")); //$NON-NLS-1$ bindings.put(SVNDecoratorConfiguration.RESOURCE_AUTHOR, Policy.bind("SVNDecoratorPreferencesPage.authorVariable")); //$NON-NLS-1$ bindings.put(SVNDecoratorConfiguration.RESOURCE_DATE, Policy.bind("SVNDecoratorPreferencesPage.dateVariable")); //$NON-NLS-1$ return bindings; } /** * get the map of {variable,description} to use for projects with createFormatEditorControl */ private Map getProjectBindingDescriptions() { Map bindings = new HashMap(); bindings.put(SVNDecoratorConfiguration.RESOURCE_NAME, Policy.bind("SVNDecoratorPreferencesPage.nameResourceVariable")); //$NON-NLS-1$ bindings.put(SVNDecoratorConfiguration.DIRTY_FLAG, Policy.bind("SVNDecoratorPreferencesPage.flagDirtyVariable")); //$NON-NLS-1$ bindings.put(SVNDecoratorConfiguration.RESOURCE_URL, Policy.bind("SVNDecoratorPreferencesPage.remoteLocationVariable")); //$NON-NLS-1$ bindings.put(SVNDecoratorConfiguration.RESOURCE_URL_SHORT, Policy.bind("SVNDecoratorPreferencesPage.remoteLocationVariableShort")); //$NON-NLS-1$ bindings.put(SVNDecoratorConfiguration.RESOURCE_LABEL, Policy.bind("SVNDecoratorPreferencesPage.remoteLocationLabel")); //$NON-NLS-1$ bindings.put(SVNDecoratorConfiguration.RESOURCE_REVISION, Policy.bind("SVNDecoratorPreferencesPage.revisionResourceVariable")); //$NON-NLS-1$ return bindings; } private static class PreviewFile { public final String name; public final int type; public final boolean added, dirty, hasRemote, ignored, newResource, external, locked, readOnly, conflicted, deleted, switched; public Collection children; public PreviewFile(String name, int type, boolean added, boolean newResource, boolean dirty, boolean ignored, boolean hasRemote, boolean external, boolean locked, boolean readOnly, boolean conflicted, boolean deleted, boolean switched, String mode, String tag) { this.name= name; this.type= type; this.added= added; this.ignored= ignored; this.dirty= dirty; this.hasRemote= hasRemote; this.newResource= newResource; this.external = external; this.locked = locked; this.readOnly = readOnly; this.conflicted = conflicted; this.deleted = deleted; this.switched = switched; this.children= Collections.EMPTY_LIST; } } public class Preview extends LabelProvider implements Observer, ITreeContentProvider { private final ResourceManager fImageCache; private final TreeViewer fViewer; public Preview(Composite composite) { SWTUtils.createLabel(composite, Policy.bind("SVNDecoratorPreferencesPage.preview")); //$NON-NLS-1$ fImageCache= new LocalResourceManager(JFaceResources.getResources()); fViewer = new TreeViewer(composite); GridData data = SWTUtils.createHVFillGridData(); data.heightHint = 225; fViewer.getControl().setLayoutData(data); fViewer.setContentProvider(this); fViewer.setLabelProvider(this); fViewer.setInput(ROOT); fViewer.expandAll(); } public void refresh() { fViewer.refresh(true); setColorsAndFonts(); } public void setColorsAndFonts() { TreeItem[] items = fViewer.getTree().getItems(); setColorsAndFonts(items); } private void setColorsAndFonts(TreeItem[] items) { for (int i = 0; i < items.length; i++) { if (enableFontDecorators.getSelection()) { Color backGroundColor = getBackground(items[i].getData()); items[i].setBackground(backGroundColor); Color foreGroundColor = getForeground(items[i].getData()); items[i].setForeground(foreGroundColor); Font font = getFont(items[i].getData()); items[i].setFont(font); } else { items[i].setBackground(null); items[i].setForeground(null); items[i].setFont(null); } setColorsAndFonts(items[i].getItems()); } } public void update(Observable o, Object arg) { refresh(); } public Object[] getChildren(Object parentElement) { return ((PreviewFile)parentElement).children.toArray(); } public Object getParent(Object element) { return null; } public boolean hasChildren(Object element) { return !((PreviewFile)element).children.isEmpty(); } public Object[] getElements(Object inputElement) { return ((Collection)inputElement).toArray(); } public void dispose() { fImageCache.dispose(); } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } public Color getBackground(Object element) { ITheme current = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme(); if (((PreviewFile)element).ignored) { return current.getColorRegistry().get(SVNDecoratorConfiguration.IGNORED_BACKGROUND_COLOR); } else if (((PreviewFile)element).dirty) { return current.getColorRegistry().get(SVNDecoratorConfiguration.OUTGOING_CHANGE_BACKGROUND_COLOR); } return null; } public Color getForeground(Object element) { ITheme current = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme(); if (((PreviewFile)element).ignored) { return current.getColorRegistry().get(SVNDecoratorConfiguration.IGNORED_FOREGROUND_COLOR); } else if (((PreviewFile)element).dirty) { return current.getColorRegistry().get(SVNDecoratorConfiguration.OUTGOING_CHANGE_FOREGROUND_COLOR); } return null; } public Font getFont(Object element) { ITheme current = PlatformUI.getWorkbench().getThemeManager().getCurrentTheme(); if (((PreviewFile)element).ignored) { return current.getFontRegistry().get(SVNDecoratorConfiguration.IGNORED_FONT); } else if (((PreviewFile)element).dirty) { return current.getFontRegistry().get(SVNDecoratorConfiguration.OUTGOING_CHANGE_FONT); } return null; } public String getText(Object element) { PreviewFile previewFile = (PreviewFile)element; Map bindings = new HashMap(); bindings.put(SVNDecoratorConfiguration.RESOURCE_REVISION, "74"); //$NON-NLS-1$ bindings.put(SVNDecoratorConfiguration.RESOURCE_AUTHOR, "cchab"); //$NON-NLS-1$ DateFormat dateFormat; if (dateFormatText.getText().trim().length() == 0) { dateFormat = SimpleDateFormat.getInstance(); } else { try { dateFormat = new SimpleDateFormat(dateFormatText.getText()); setValid(true); setMessage(null); } catch (Exception e) { dateFormat = SimpleDateFormat.getInstance(); setValid(false); } } bindings.put(SVNDecoratorConfiguration.RESOURCE_DATE, dateFormat.format(new Date())); //$NON-NLS-1$ bindings.put(SVNDecoratorConfiguration.RESOURCE_URL, "http://localhost:8080/svn/repos/trunk/project1"); //$NON-NLS-1$ bindings.put(SVNDecoratorConfiguration.RESOURCE_URL_SHORT, "trunk/project1"); //$NON-NLS-1$ bindings.put(SVNDecoratorConfiguration.RESOURCE_LABEL, "label"); //$NON-NLS-1$ if (previewFile.dirty) bindings.put(SVNDecoratorConfiguration.DIRTY_FLAG, dirtyFlag.getText()); if (previewFile.added) bindings.put(SVNDecoratorConfiguration.ADDED_FLAG, addedFlag.getText()); if (previewFile.external) bindings.put(SVNDecoratorConfiguration.EXTERNAL_FLAG, externalFlag.getText()); if (previewFile.type == IResource.FILE) return SVNDecoratorConfiguration.decorate(previewFile.name, fileTextFormat.getText(), bindings); //$NON-NLS-1$ else if (previewFile.type == IResource.FOLDER) return SVNDecoratorConfiguration.decorate(previewFile.name, folderTextFormat.getText(), bindings); //$NON-NLS-1$ else if (previewFile.type == IResource.PROJECT) return SVNDecoratorConfiguration.decorate(previewFile.name, projectTextFormat.getText(), bindings); //$NON-NLS-1$ else return previewFile.name; } public ImageDescriptor getOverlay(Object element) { PreviewFile previewFile = (PreviewFile)element; if (imageShowNewResource.getSelection() && previewFile.newResource) return newResource; if (imageShowAdded.getSelection() && previewFile.added) return added; if (imageShowDirty.getSelection() && previewFile.dirty) return dirty; if (imageShowExternal.getSelection() && previewFile.external) return external; if (previewFile.locked) return locked; if (previewFile.readOnly) return needsLock; if (previewFile.conflicted) return conflicted; if (previewFile.deleted) return deleted; if (previewFile.switched) return switched; if (imageShowHasRemote.getSelection() && previewFile.hasRemote) return checkedIn; return null; } public Image getImage(Object element) { final String s; switch (((PreviewFile)element).type) { case IResource.PROJECT: s= SharedImages.IMG_OBJ_PROJECT; break; case IResource.FOLDER: s= ISharedImages.IMG_OBJ_FOLDER; break; default: s= ISharedImages.IMG_OBJ_FILE; break; } final Image baseImage= PlatformUI.getWorkbench().getSharedImages().getImage(s); final ImageDescriptor overlay = getOverlay(element); if (overlay == null) return baseImage; try { return fImageCache.createImage(new OverlayIcon(baseImage, new ImageDescriptor[] {overlay}, new int[] {OverlayIcon.BOTTOM_RIGHT}, new Point(baseImage.getBounds().width, baseImage.getBounds().height))); } catch (Exception e) { SVNUIPlugin.log(e.getMessage()); } return null; } } private static class ThemeListener implements IPropertyChangeListener { private final Preview preview; ThemeListener(Preview preview) { this.preview = preview; } public void propertyChange(PropertyChangeEvent event) { preview.refresh(); } } } SVNMenuIconsPreferencesPage.java000066400000000000000000000134351203611042400441310ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/preferences/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.preferences; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; /** * SVN Preference Page * * Allows the configuration of SVN specific options. * */ public class SVNMenuIconsPreferencesPage extends PreferencePage implements IWorkbenchPreferencePage { private Button useDefault; private Button useTortoiseSVN; private Button useSubversive; /** * Utility method that creates a label instance * and sets the default layout data. * * @param parent the parent for the new label * @param text the text for the new label * @return the new label */ private Label createLabel(Composite parent, String text, int horizontalSpan) { Label label = new Label(parent, SWT.LEFT); label.setText(text); GridData data = new GridData(); data.horizontalSpan = horizontalSpan; data.horizontalAlignment = GridData.FILL; label.setLayoutData(data); return label; } private Button createRadio(Composite group, String label, int horizontalSpan) { Button button = new Button(group, SWT.RADIO); button.setText(label); GridData data = new GridData(); data.horizontalSpan = horizontalSpan; button.setLayoutData(data); return button; } /** * @see PreferencePage#createContents(Composite) */ protected Control createContents(Composite parent) { // create the composite Composite composite = new Composite(parent, SWT.NULL); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); composite.setLayoutData(gridData); GridLayout layout = new GridLayout(); layout.numColumns = 2; composite.setLayout(layout); Group group = new Group(composite, SWT.NULL); group.setText(Policy.bind("MenuIconsPreferencePage.iconSet")); //$NON-NLS-1$ gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 2; group.setLayoutData(gridData); layout = new GridLayout(); group.setLayout(layout); useDefault = createRadio(group, Policy.bind("MenuIconsPreferencePage.default"), 1); //$NON-NLS-1$ useTortoiseSVN = createRadio(group, "&TortoiseSVN", 1); //$NON-NLS-1$ useSubversive = createRadio(group, "&Subversive", 1); //$NON-NLS-1$ createLabel(composite, "", 2); //$NON-NLS-1$ createLabel(composite, Policy.bind("MenuIconsPreferencePage.restart"), 2); //$NON-NLS-1$ initializeValues(); verifyValidation(); // PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IHelpContextIds.SVN_PREFERENCE_DIALOG); return composite; } /** * Initializes states of the controls from the preference store. */ private void initializeValues() { IPreferenceStore store = getPreferenceStore(); int iconSet = store.getInt(ISVNUIConstants.PREF_MENU_ICON_SET); useTortoiseSVN.setSelection(ISVNUIConstants.MENU_ICON_SET_TORTOISESVN == iconSet); useDefault.setSelection(ISVNUIConstants.MENU_ICON_SET_DEFAULT == iconSet); useSubversive.setSelection(ISVNUIConstants.MENU_ICON_SET_SUBVERSIVE == iconSet); } /** * @see IWorkbenchPreferencePage#init(IWorkbench) */ public void init(IWorkbench workbench) { } /** * OK was clicked. Store the SVN preferences. * * @return whether it is okay to close the preference page */ public boolean performOk() { IPreferenceStore store = getPreferenceStore(); if (useDefault.getSelection()) { store.setValue(ISVNUIConstants.PREF_MENU_ICON_SET, ISVNUIConstants.MENU_ICON_SET_DEFAULT); } else if (useTortoiseSVN.getSelection()) { store.setValue(ISVNUIConstants.PREF_MENU_ICON_SET, ISVNUIConstants.MENU_ICON_SET_TORTOISESVN); } else if (useSubversive.getSelection()) { store.setValue(ISVNUIConstants.PREF_MENU_ICON_SET, ISVNUIConstants.MENU_ICON_SET_SUBVERSIVE); } SVNUIPlugin.getPlugin().savePluginPreferences(); return true; } /** * Defaults was clicked. Restore the SVN preferences to * their default values */ protected void performDefaults() { super.performDefaults(); IPreferenceStore store = getPreferenceStore(); int iconSet = store.getDefaultInt(ISVNUIConstants.PREF_MENU_ICON_SET); useTortoiseSVN.setSelection(ISVNUIConstants.MENU_ICON_SET_TORTOISESVN == iconSet); useDefault.setSelection(ISVNUIConstants.MENU_ICON_SET_DEFAULT == iconSet); useDefault.setSelection(ISVNUIConstants.MENU_ICON_SET_SUBVERSIVE == iconSet); verifyValidation(); } /* * (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#doGetPreferenceStore() */ protected IPreferenceStore doGetPreferenceStore() { return SVNUIPlugin.getPlugin().getPreferenceStore(); } /** * Verify the selection of the interface method */ private void verifyValidation() { setErrorMessage(null); setValid(getErrorMessage() == null); } } SVNPreferencesPage.java000066400000000000000000000605641203611042400423150ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/preferences/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.preferences; import java.io.File; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import java.util.List; import org.eclipse.jface.dialogs.MessageDialogWithToggle; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.clientadapter.Activator; import org.tigris.subversion.clientadapter.ISVNClientWrapper; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.util.Util; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.internal.SWTUtils; /** * SVN Preference Page * * Allows the configuration of SVN specific options. * */ public class SVNPreferencesPage extends PreferencePage implements IWorkbenchPreferencePage { private Button showCompareRevisionInDialog; private Button fetchChangePathOnDemand; private Button showTagsInRemoteHistory; private Button showOutOfDateFolders; private Button useJavaHLCommitHack; private Button shareNestedProjects; private Button warnOnCommitToTagPath; private Button ignoreHiddenChanges; private Button ignoreManagedDerivedResources; private Button removeOnReplace; private Text logEntriesToFetchText; private Button defaultConfigLocationRadio; private Button useDirectoryLocationRadio; private Text directoryLocationText; private Button browseConfigDirButton; private Button quickDiffAnnotateYes; private Button quickDiffAnnotateNo; private Button quickDiffAnnotatePrompt; private Button resourcesWithErrorsYes; private Button resourcesWithErrorsNo; private Button resourcesWithErrorsPrompt; private Button resourcesWithWarningsYes; private Button resourcesWithWarningsNo; private Button resourcesWithWarningsPrompt; protected final ArrayList fFields; private String [] CLIENT_VALUES; private String [] CLIENT_LABELS; public SVNPreferencesPage() { fFields = new ArrayList(); // sort the options by display text setDescription(Policy.bind("SVNPreferencePage.description")); //$NON-NLS-1$ ISVNClientWrapper[] clients = null; clients = Activator.getDefault().getAllClientWrappers(); if (clients != null) { CLIENT_LABELS = new String[clients.length]; CLIENT_VALUES = new String[clients.length]; for (int i = 0; i < clients.length; i++) { CLIENT_LABELS[i] = clients[i].getDisplayName(); CLIENT_VALUES[i] = clients[i].getAdapterID(); } } else { CLIENT_LABELS = new String[0]; CLIENT_VALUES = new String[0]; } } /** * Utility method that creates a label instance * and sets the default layout data. * * @param parent the parent for the new label * @param text the text for the new label * @return the new label */ private Label createLabel(Composite parent, String text, int horizontalSpan) { Label label = new Label(parent, SWT.LEFT); label.setText(text); GridData data = new GridData(); data.horizontalSpan = horizontalSpan; data.horizontalAlignment = GridData.FILL; label.setLayoutData(data); return label; } /** * Creates an new checkbox instance and sets the default * layout data. * * @param group the composite in which to create the checkbox * @param label the string to set into the checkbox * @return the new checkbox */ private Button createCheckBox(Composite group, String label) { Button button = new Button(group, SWT.CHECK | SWT.LEFT); button.setText(label); GridData data = new GridData(); data.horizontalSpan = 2; button.setLayoutData(data); return button; } private Button createRadio(Composite group, String label, int horizontalSpan) { Button button = new Button(group, SWT.RADIO); button.setText(label); GridData data = new GridData(); data.horizontalSpan = horizontalSpan; button.setLayoutData(data); return button; } /** * @see PreferencePage#createContents(Composite) */ protected Control createContents(Composite parent) { // create the composite Composite composite = new Composite(parent, SWT.NULL); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); composite.setLayoutData(gridData); GridLayout layout = new GridLayout(); layout.numColumns = 2; composite.setLayout(layout); showCompareRevisionInDialog = createCheckBox(composite, Policy.bind("SVNPreferencePage.showCompareMergeInSync")); //$NON-NLS-1$ // showUnadded = createCheckBox(composite, Policy.bind("SVNPreferencePage.showUnadded")); //$NON-NLS-1$ // // selectUnadded = createCheckBox(composite, Policy.bind("SVNPreferencePage.selectUnadded")); //$NON-NLS-1$ removeOnReplace = createCheckBox(composite, Policy.bind("SVNPreferencePage.removeOnReplace")); //$NON-NLS-1$ fetchChangePathOnDemand = createCheckBox(composite, Policy.bind("SVNPreferencePage.fetchChangePathOnDemand")); //$NON-NLS-1$ showTagsInRemoteHistory = createCheckBox(composite, Policy.bind("SVNPreferencePage.showTags")); //$NON-NLS-1$ showOutOfDateFolders = createCheckBox(composite, Policy.bind("SVNPreferencePage.showOutOfDateFolders")); //$NON-NLS-1$ useJavaHLCommitHack = createCheckBox(composite, Policy.bind("SVNPreferencePage.useJavaHLCommitHack")); //$NON-NLS-1$ shareNestedProjects = createCheckBox(composite, Policy.bind("SVNPreferencePage.shareNestedProjects")); //$NON-NLS-1$ warnOnCommitToTagPath = createCheckBox(composite, Policy.bind("SVNPreferencePage.warnOnCommitToTagPath")); //$NON-NLS-1$ ignoreHiddenChanges = createCheckBox(composite, Policy.bind("SVNPreferencesPage.0")); //$NON-NLS-1$ boolean isHiddenSupported; try { isHiddenSupported = Util.isHiddenSupported(); } catch (NoSuchMethodException e1) { isHiddenSupported = false; } ignoreHiddenChanges.setVisible(isHiddenSupported); ignoreManagedDerivedResources = createCheckBox(composite, Policy.bind("SVNPreferencesPage.1")); //$NON-NLS-1$ createLabel(composite, "", 2); //$NON-NLS-1$ createLabel(composite, Policy.bind("SVNPreferencePage.logEntriesToFetch"), 1); //$NON-NLS-1$ logEntriesToFetchText = new Text(composite, SWT.BORDER); gridData = new GridData(); gridData.widthHint = 40; logEntriesToFetchText.setLayoutData(gridData); createLabel(composite, "", 2); //$NON-NLS-1$ Group group = new Group(composite, SWT.NONE); group.setText(Policy.bind("SVNPreferencePage.useQuickdiffAnnotateGroup")); //$NON-NLS-1$ group.setLayout(new GridLayout(3, true)); group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1)); quickDiffAnnotateYes = createRadio(group, Policy.bind("yes"), 1); //$NON-NLS-1$ quickDiffAnnotateNo = createRadio(group, Policy.bind("no"), 1); //$NON-NLS-1$ quickDiffAnnotatePrompt = createRadio(group, Policy.bind("prompt"), 1); //$NON-NLS-1$ Group groupErrors = new Group(composite, SWT.NONE); groupErrors.setText(Policy.bind("SVNPreferencePage.commitWithErrors")); //$NON-NLS-1$ groupErrors.setLayout(new GridLayout(3, true)); groupErrors.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1)); resourcesWithErrorsYes = createRadio(groupErrors, Policy.bind("yes"), 1); //$NON-NLS-1$ resourcesWithErrorsNo = createRadio(groupErrors, Policy.bind("no"), 1); //$NON-NLS-1$ resourcesWithErrorsPrompt = createRadio(groupErrors, Policy.bind("prompt"), 1); //$NON-NLS-1$ Group groupWarnings = new Group(composite, SWT.NONE); groupWarnings.setText(Policy.bind("SVNPreferencePage.commitWithWarnings")); //$NON-NLS-1$ groupWarnings.setLayout(new GridLayout(3, true)); groupWarnings.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false, 2, 1)); resourcesWithWarningsYes = createRadio(groupWarnings, Policy.bind("yes"), 1); //$NON-NLS-1$ resourcesWithWarningsNo = createRadio(groupWarnings, Policy.bind("no"), 1); //$NON-NLS-1$ resourcesWithWarningsPrompt = createRadio(groupWarnings, Policy.bind("prompt"), 1); //$NON-NLS-1$ createLabel(composite, "", 2); //$NON-NLS-1$ // group javahl/command line group = new Group(composite, SWT.NULL); group.setText(Policy.bind("SVNPreferencePage.svnClientInterface")); //$NON-NLS-1$ gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 2; group.setLayoutData(gridData); layout = new GridLayout(); layout.numColumns = 2; group.setLayout(layout); new StringComboBox( group, ISVNUIConstants.PREF_SVNINTERFACE, Policy.bind("SVNPreferencePage.client"), //$NON-NLS-1$ "", //$NON-NLS-1$ CLIENT_LABELS, CLIENT_VALUES); createLabel(composite, "", 2); //$NON-NLS-1$ // group for config location group = new Group(composite, SWT.NULL); group.setText(Policy.bind("SVNPreferencePage.configurationLocation")); //$NON-NLS-1$ gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.horizontalSpan = 2; group.setLayoutData(gridData); layout = new GridLayout(); layout.numColumns = 3; group.setLayout(layout); defaultConfigLocationRadio = createRadio(group, Policy.bind("SVNPreferencePage.useDefaultConfigLocation"),3); //$NON-NLS-1$ useDirectoryLocationRadio = createRadio(group, Policy.bind("SVNPreferencePage.useDirectoryConfig"),1); //$NON-NLS-1$ directoryLocationText = new Text(group, SWT.SINGLE | SWT.BORDER); gridData = new GridData(); gridData.horizontalAlignment = GridData.FILL; gridData.widthHint = 200; gridData.grabExcessHorizontalSpace = true; directoryLocationText.setLayoutData(gridData); directoryLocationText.setEditable(false); browseConfigDirButton = new Button(group, SWT.NONE); browseConfigDirButton.setText(Policy.bind("SVNPreferencePage.browseDirectory")); //$NON-NLS-1$ Listener configUpdateEnablements = new Listener() { public void handleEvent(Event event) { browseConfigDirButton.setEnabled(useDirectoryLocationRadio.getSelection()); verifyValidation(); } }; defaultConfigLocationRadio.addListener(SWT.Selection,configUpdateEnablements); useDirectoryLocationRadio.addListener(SWT.Selection,configUpdateEnablements); browseConfigDirButton.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent event) { DirectoryDialog directoryDialog = new DirectoryDialog(getShell(),SWT.OPEN); String res = directoryDialog.open(); if (res != null) { directoryLocationText.setText(res); } verifyValidation(); } }); initializeValues(); verifyValidation(); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; logEntriesToFetchText.addFocusListener(focusListener); PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IHelpContextIds.SVN_PREFERENCE_DIALOG); return composite; } /** * Initializes states of the controls from the preference store. */ private void initializeValues() { final IPreferenceStore store = getPreferenceStore(); for (Iterator iter = fFields.iterator(); iter.hasNext();) { ((Field)iter.next()).initializeValue(store); } showCompareRevisionInDialog.setSelection(store.getBoolean(ISVNUIConstants.PREF_SHOW_COMPARE_REVISION_IN_DIALOG)); fetchChangePathOnDemand.setSelection(store.getBoolean(ISVNUIConstants.PREF_FETCH_CHANGE_PATH_ON_DEMAND)); showTagsInRemoteHistory.setSelection(store.getBoolean(ISVNUIConstants.PREF_SHOW_TAGS_IN_REMOTE)); showOutOfDateFolders.setSelection(SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_SHOW_OUT_OF_DATE_FOLDERS)); useJavaHLCommitHack.setSelection(store.getBoolean(ISVNUIConstants.PREF_USE_JAVAHL_COMMIT_HACK)); shareNestedProjects.setSelection(SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_SHARE_NESTED_PROJECTS)); warnOnCommitToTagPath.setSelection(!SVNUIPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNUIConstants.PREF_COMMIT_TO_TAGS_PATH_WITHOUT_WARNING)); ignoreHiddenChanges.setSelection(SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_IGNORE_HIDDEN_CHANGES)); ignoreManagedDerivedResources.setSelection(SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_IGNORE_MANAGED_DERIVED_RESOURCES)); removeOnReplace.setSelection(store.getBoolean(ISVNUIConstants.PREF_REMOVE_UNADDED_RESOURCES_ON_REPLACE)); logEntriesToFetchText.setText(Integer.toString(store.getInt(ISVNUIConstants.PREF_LOG_ENTRIES_TO_FETCH))); quickDiffAnnotateYes.setSelection(MessageDialogWithToggle.ALWAYS.equals(store.getString(ISVNUIConstants.PREF_USE_QUICKDIFFANNOTATE))); quickDiffAnnotateNo.setSelection(MessageDialogWithToggle.NEVER.equals(store.getString(ISVNUIConstants.PREF_USE_QUICKDIFFANNOTATE))); quickDiffAnnotatePrompt.setSelection(MessageDialogWithToggle.PROMPT.equals(store.getString(ISVNUIConstants.PREF_USE_QUICKDIFFANNOTATE))); resourcesWithErrorsYes.setSelection(MessageDialogWithToggle.ALWAYS.equals(store.getString(ISVNUIConstants.PREF_ALLOW_COMMIT_WITH_ERRORS))); resourcesWithErrorsNo.setSelection(MessageDialogWithToggle.NEVER.equals(store.getString(ISVNUIConstants.PREF_ALLOW_COMMIT_WITH_ERRORS))); resourcesWithErrorsPrompt.setSelection(MessageDialogWithToggle.PROMPT.equals(store.getString(ISVNUIConstants.PREF_ALLOW_COMMIT_WITH_ERRORS))); resourcesWithWarningsYes.setSelection(MessageDialogWithToggle.ALWAYS.equals(store.getString(ISVNUIConstants.PREF_ALLOW_COMMIT_WITH_WARNINGS))); resourcesWithWarningsNo.setSelection(MessageDialogWithToggle.NEVER.equals(store.getString(ISVNUIConstants.PREF_ALLOW_COMMIT_WITH_WARNINGS))); resourcesWithWarningsPrompt.setSelection(MessageDialogWithToggle.PROMPT.equals(store.getString(ISVNUIConstants.PREF_ALLOW_COMMIT_WITH_WARNINGS))); String configLocation = store.getString(ISVNUIConstants.PREF_SVNCONFIGDIR); directoryLocationText.setText(configLocation); if (configLocation.equals("")) { //$NON-NLS-1$ defaultConfigLocationRadio.setSelection(true); useDirectoryLocationRadio.setSelection(false); browseConfigDirButton.setEnabled(false); } else { defaultConfigLocationRadio.setSelection(false); useDirectoryLocationRadio.setSelection(true); browseConfigDirButton.setEnabled(true); } } /** * @see IWorkbenchPreferencePage#init(IWorkbench) */ public void init(IWorkbench workbench) { } /** * OK was clicked. Store the SVN preferences. * * @return whether it is okay to close the preference page */ public boolean performOk() { final IPreferenceStore store = getPreferenceStore(); for (Iterator iter = fFields.iterator(); iter.hasNext();) { ((Field) iter.next()).performOk(store); } // save show compare revision in dialog pref store.setValue(ISVNUIConstants.PREF_SHOW_COMPARE_REVISION_IN_DIALOG, showCompareRevisionInDialog.getSelection()); store.setValue(ISVNUIConstants.PREF_FETCH_CHANGE_PATH_ON_DEMAND, fetchChangePathOnDemand.getSelection()); store.setValue(ISVNUIConstants.PREF_SHOW_TAGS_IN_REMOTE, showTagsInRemoteHistory.getSelection()); if (SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_SHOW_OUT_OF_DATE_FOLDERS) != showOutOfDateFolders.getSelection()) { SVNProviderPlugin.getPlugin().getPluginPreferences().setValue(ISVNCoreConstants.PREF_SHOW_OUT_OF_DATE_FOLDERS, showOutOfDateFolders.getSelection()); SVNUIPlugin.getPlugin().getShowOutOfDateFoldersAction().setChecked(showOutOfDateFolders.getSelection()); } SVNProviderPlugin.getPlugin().getPluginPreferences().setValue(ISVNCoreConstants.PREF_SHARE_NESTED_PROJECTS, shareNestedProjects.getSelection()); SVNUIPlugin.getPlugin().getPluginPreferences().setValue(ISVNUIConstants.PREF_COMMIT_TO_TAGS_PATH_WITHOUT_WARNING, !warnOnCommitToTagPath.getSelection()); SVNProviderPlugin.getPlugin().getPluginPreferences().setValue(ISVNCoreConstants.PREF_IGNORE_HIDDEN_CHANGES, ignoreHiddenChanges.getSelection()); SVNProviderPlugin.getPlugin().getPluginPreferences().setValue(ISVNCoreConstants.PREF_IGNORE_MANAGED_DERIVED_RESOURCES, ignoreManagedDerivedResources.getSelection()); // store.setValue(ISVNUIConstants.PREF_SHOW_UNADDED_RESOURCES_ON_COMMIT, showUnadded.getSelection()); store.setValue(ISVNUIConstants.PREF_USE_JAVAHL_COMMIT_HACK, useJavaHLCommitHack.getSelection()); // save select unadded resources on commit pref // store.setValue(ISVNUIConstants.PREF_SELECT_UNADDED_RESOURCES_ON_COMMIT, selectUnadded.getSelection()); // save remove unadded resources on replace store.setValue(ISVNUIConstants.PREF_REMOVE_UNADDED_RESOURCES_ON_REPLACE, removeOnReplace.getSelection()); if (quickDiffAnnotateYes.getSelection()) { store.setValue(ISVNUIConstants.PREF_USE_QUICKDIFFANNOTATE, MessageDialogWithToggle.ALWAYS); } else if (quickDiffAnnotateNo.getSelection()) { store.setValue(ISVNUIConstants.PREF_USE_QUICKDIFFANNOTATE, MessageDialogWithToggle.NEVER); } else if (quickDiffAnnotatePrompt.getSelection()) { store.setValue(ISVNUIConstants.PREF_USE_QUICKDIFFANNOTATE, MessageDialogWithToggle.PROMPT); } if (resourcesWithErrorsYes.getSelection()) { store.setValue(ISVNUIConstants.PREF_ALLOW_COMMIT_WITH_ERRORS, MessageDialogWithToggle.ALWAYS); } else if (resourcesWithErrorsNo.getSelection()) { store.setValue(ISVNUIConstants.PREF_ALLOW_COMMIT_WITH_ERRORS, MessageDialogWithToggle.NEVER); } else if (resourcesWithErrorsPrompt.getSelection()) { store.setValue(ISVNUIConstants.PREF_ALLOW_COMMIT_WITH_ERRORS, MessageDialogWithToggle.PROMPT); } if (resourcesWithWarningsYes.getSelection()) { store.setValue(ISVNUIConstants.PREF_ALLOW_COMMIT_WITH_WARNINGS, MessageDialogWithToggle.ALWAYS); } else if (resourcesWithWarningsNo.getSelection()) { store.setValue(ISVNUIConstants.PREF_ALLOW_COMMIT_WITH_WARNINGS, MessageDialogWithToggle.NEVER); } else if (resourcesWithWarningsPrompt.getSelection()) { store.setValue(ISVNUIConstants.PREF_ALLOW_COMMIT_WITH_WARNINGS, MessageDialogWithToggle.PROMPT); } int entriesToFetch = store.getInt(ISVNUIConstants.PREF_LOG_ENTRIES_TO_FETCH); try { entriesToFetch = Integer.parseInt(logEntriesToFetchText.getText().trim()); } catch (Exception e) {} store.setValue(ISVNUIConstants.PREF_LOG_ENTRIES_TO_FETCH, entriesToFetch); // HistoryView historyView = HistoryView.getView(); // if (historyView != null) { // IAction getNextAction = historyView.getGetNextAction(); // if (getNextAction != null) { // if (entriesToFetch <= 0) getNextAction.setEnabled(false); // else { // getNextAction.setEnabled(true); // getNextAction.setToolTipText(Policy.bind("HistoryView.getNext") + " " + entriesToFetch); // } // } // } // save config location pref if (defaultConfigLocationRadio.getSelection()) { store.setValue(ISVNUIConstants.PREF_SVNCONFIGDIR, ""); //$NON-NLS-1$ } else { store.setValue(ISVNUIConstants.PREF_SVNCONFIGDIR,directoryLocationText.getText()); } SVNUIPlugin.getPlugin().savePluginPreferences(); return true; } /** * Defaults was clicked. Restore the SVN preferences to * their default values */ protected void performDefaults() { super.performDefaults(); initializeValues(); verifyValidation(); } /* * (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#doGetPreferenceStore() */ protected IPreferenceStore doGetPreferenceStore() { return SVNUIPlugin.getPlugin().getPreferenceStore(); } /** * Verify the selection of the interface method */ private void verifyValidation() { setErrorMessage(null); if (useDirectoryLocationRadio.getSelection()) { File configDir = new File(directoryLocationText.getText()); if (!configDir.exists()) { setErrorMessage(Policy.bind("SVNPreferencePage.svnConfigDirDoesNotExist")); //$NON-NLS-1$ } else { File serversFile = new File(configDir,"servers"); //$NON-NLS-1$ File configFile = new File(configDir,"config"); //$NON-NLS-1$ if (!serversFile.exists() && !configFile.exists()) { setErrorMessage(Policy.bind("SVNPreferencePage.isNotSvnConfigDir")); //$NON-NLS-1$ } } } setValid(getErrorMessage() == null); } private abstract class Field { protected final String fKey; public Field(String key) { fFields.add(this); fKey= key; } public abstract void initializeValue(IPreferenceStore store); public abstract void performOk(IPreferenceStore store); public void performDefaults(IPreferenceStore store) { store.setToDefault(fKey); initializeValue(store); } } private abstract class ComboBox extends Field { protected final Combo fCombo; private final String [] fLabels; private final List fValues; public ComboBox(Composite composite, String key, String text, String helpID, String [] labels, Object [] values) { super(key); fLabels= labels; fValues= Arrays.asList(values); final Label label= SWTUtils.createLabel(composite, text); fCombo= new Combo(composite, SWT.READ_ONLY); fCombo.setLayoutData(SWTUtils.createHFillGridData()); fCombo.setItems(labels); if (((GridLayout)composite.getLayout()).numColumns > 1) { label.setLayoutData(SWTUtils.createGridData(SWT.DEFAULT, SWT.DEFAULT, false, false)); } if (helpID != null) PlatformUI.getWorkbench().getHelpSystem().setHelp(fCombo, helpID); } public Combo getCombo() { return fCombo; } public void initializeValue(IPreferenceStore store) { final Object value= getValue(store, fKey); final int index= fValues.indexOf(value); if (index >= 0 && index < fLabels.length) fCombo.select(index); else fCombo.select(0); } public void performOk(IPreferenceStore store) { saveValue(store, fKey, fValues.get(fCombo.getSelectionIndex())); } protected abstract void saveValue(IPreferenceStore store, String key, Object object); protected abstract Object getValue(IPreferenceStore store, String key); } private class StringComboBox extends ComboBox { public StringComboBox(Composite composite, String key, String label, String helpID, String [] labels, String [] values) { super(composite, key, label, helpID, labels, values); } protected Object getValue(IPreferenceStore store, String key) { return store.getString(key); } protected void saveValue(IPreferenceStore store, String key, Object object) { store.setValue(key, (String)object); } } } UpdateToHeadPreferencePage.java000066400000000000000000000204311203611042400437600ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/preferencespackage org.tigris.subversion.subclipse.ui.preferences; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.jface.preference.PreferencePage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Group; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.IWorkbenchPreferencePage; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; public class UpdateToHeadPreferencePage extends PreferencePage implements IWorkbenchPreferencePage { private Button ignoreExternalsButton; private Button forceButton; private Button textConflictPromptButton; private Button textConflictMarkButton; private Button propertyConflictPromptButton; private Button propertyConflictMarkButton; private Button binaryConflictPromptButton; private Button binaryConflictMarkButton; private Button binaryConflictUserButton; private Button binaryConflictIncomingButton; private IPreferenceStore store = SVNUIPlugin.getPlugin().getPreferenceStore(); @Override protected Control createContents(Composite parent) { Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 1; composite.setLayout(layout); GridData data = new GridData(GridData.FILL_BOTH); composite.setLayoutData(data); ignoreExternalsButton = new Button(composite, SWT.CHECK); ignoreExternalsButton.setText(Policy.bind("SvnDialog.ignoreExternals")); //$NON-NLS-1$ data = new GridData(); ignoreExternalsButton.setLayoutData(data); forceButton = new Button(composite, SWT.CHECK); forceButton.setText(Policy.bind("SvnDialog.force")); //$NON-NLS-1$ data = new GridData(); forceButton.setLayoutData(data); Group conflictGroup = new Group(composite, SWT.NONE); conflictGroup.setText(Policy.bind("SvnWizardUpdatePage.0")); //$NON-NLS-1$ GridLayout conflictLayout = new GridLayout(); conflictLayout.numColumns = 1; conflictGroup.setLayout(conflictLayout); conflictGroup.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); Group textGroup = new Group(conflictGroup, SWT.NONE); textGroup.setText(Policy.bind("SvnWizardUpdatePage.1")); //$NON-NLS-1$ GridLayout textLayout = new GridLayout(); textLayout.numColumns = 1; textGroup.setLayout(textLayout); textGroup.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); textConflictPromptButton = new Button(textGroup, SWT.RADIO); textConflictPromptButton.setText(Policy.bind("SvnWizardUpdatePage.2")); //$NON-NLS-1$ textConflictMarkButton = new Button(textGroup, SWT.RADIO); textConflictMarkButton.setText(Policy.bind("SvnWizardUpdatePage.3")); //$NON-NLS-1$ Group binaryGroup = new Group(conflictGroup, SWT.NONE); binaryGroup.setText(Policy.bind("SvnWizardUpdatePage.4")); //$NON-NLS-1$ GridLayout binaryLayout = new GridLayout(); binaryLayout.numColumns = 1; binaryGroup.setLayout(binaryLayout); binaryGroup.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); binaryConflictPromptButton = new Button(binaryGroup, SWT.RADIO); binaryConflictPromptButton.setText(Policy.bind("SvnWizardUpdatePage.5")); //$NON-NLS-1$ binaryConflictMarkButton = new Button(binaryGroup, SWT.RADIO); binaryConflictMarkButton.setText(Policy.bind("SvnWizardUpdatePage.6")); //$NON-NLS-1$ binaryConflictUserButton = new Button(binaryGroup, SWT.RADIO); binaryConflictUserButton.setText(Policy.bind("SvnWizardUpdatePage.7")); //$NON-NLS-1$ binaryConflictIncomingButton = new Button(binaryGroup, SWT.RADIO); binaryConflictIncomingButton.setText(Policy.bind("SvnWizardUpdatePage.8")); //$NON-NLS-1$ Group propertyGroup = new Group(conflictGroup, SWT.NONE); propertyGroup.setText(Policy.bind("SvnWizardUpdatePage.9")); //$NON-NLS-1$ GridLayout propertyLayout = new GridLayout(); propertyLayout.numColumns = 1; propertyGroup.setLayout(propertyLayout); propertyGroup.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); propertyConflictPromptButton = new Button(propertyGroup, SWT.RADIO); propertyConflictPromptButton.setText(Policy.bind("SvnWizardUpdatePage.10")); //$NON-NLS-1$ propertyConflictMarkButton = new Button(propertyGroup, SWT.RADIO); propertyConflictMarkButton.setText(Policy.bind("SvnWizardUpdatePage.11")); //$NON-NLS-1$ initializeValues(); return composite; } @Override public boolean performOk() { store.setValue(ISVNUIConstants.PREF_UPDATE_TO_HEAD_IGNORE_EXTERNALS, ignoreExternalsButton.getSelection()); store.setValue(ISVNUIConstants.PREF_UPDATE_TO_HEAD_ALLOW_UNVERSIONED_OBSTRUCTIONS, forceButton.getSelection()); if (textConflictMarkButton.getSelection()) store.setValue(ISVNUIConstants.PREF_UPDATE_TO_HEAD_CONFLICT_HANDLING_TEXT_FILES, ISVNConflictResolver.Choice.postpone); else store.setValue(ISVNUIConstants.PREF_UPDATE_TO_HEAD_CONFLICT_HANDLING_TEXT_FILES, ISVNConflictResolver.Choice.chooseMerged); if (binaryConflictIncomingButton.getSelection()) store.setValue(ISVNUIConstants.PREF_UPDATE_TO_HEAD_CONFLICT_HANDLING_BINARY_FILES, ISVNConflictResolver.Choice.chooseTheirsFull); else if (binaryConflictUserButton.getSelection()) store.setValue(ISVNUIConstants.PREF_UPDATE_TO_HEAD_CONFLICT_HANDLING_BINARY_FILES, ISVNConflictResolver.Choice.chooseMineFull); else if (binaryConflictMarkButton.getSelection()) store.setValue(ISVNUIConstants.PREF_UPDATE_TO_HEAD_CONFLICT_HANDLING_BINARY_FILES, ISVNConflictResolver.Choice.postpone); else store.setValue(ISVNUIConstants.PREF_UPDATE_TO_HEAD_CONFLICT_HANDLING_BINARY_FILES, ISVNConflictResolver.Choice.chooseMerged); if (propertyConflictMarkButton.getSelection()) store.setValue(ISVNUIConstants.PREF_UPDATE_TO_HEAD_CONFLICT_HANDLING_PROPERTIES, ISVNConflictResolver.Choice.postpone); else store.setValue(ISVNUIConstants.PREF_UPDATE_TO_HEAD_CONFLICT_HANDLING_PROPERTIES, ISVNConflictResolver.Choice.chooseMerged); return super.performOk(); } @Override protected void performDefaults() { ignoreExternalsButton.setSelection(false); forceButton.setSelection(true); textConflictMarkButton.setSelection(true); textConflictPromptButton.setSelection(false); binaryConflictMarkButton.setSelection(true); binaryConflictPromptButton.setSelection(false); binaryConflictIncomingButton.setSelection(false); binaryConflictUserButton.setSelection(false); propertyConflictMarkButton.setSelection(true); propertyConflictPromptButton.setSelection(false); super.performDefaults(); } private void initializeValues() { ignoreExternalsButton.setSelection(store.getBoolean(ISVNUIConstants.PREF_UPDATE_TO_HEAD_IGNORE_EXTERNALS)); forceButton.setSelection(store.getBoolean(ISVNUIConstants.PREF_UPDATE_TO_HEAD_ALLOW_UNVERSIONED_OBSTRUCTIONS)); switch (store.getInt(ISVNUIConstants.PREF_UPDATE_TO_HEAD_CONFLICT_HANDLING_TEXT_FILES)) { case ISVNConflictResolver.Choice.chooseMerged: textConflictPromptButton.setSelection(true); break; default: textConflictMarkButton.setSelection(true); break; } switch (store.getInt(ISVNUIConstants.PREF_UPDATE_TO_HEAD_CONFLICT_HANDLING_BINARY_FILES)) { case ISVNConflictResolver.Choice.chooseMerged: binaryConflictPromptButton.setSelection(true); break; case ISVNConflictResolver.Choice.chooseTheirsFull: binaryConflictIncomingButton.setSelection(true); break; case ISVNConflictResolver.Choice.chooseMineFull: binaryConflictUserButton.setSelection(true); break; default: binaryConflictMarkButton.setSelection(true); break; } switch (store.getInt(ISVNUIConstants.PREF_UPDATE_TO_HEAD_CONFLICT_HANDLING_PROPERTIES)) { case ISVNConflictResolver.Choice.chooseMerged: propertyConflictPromptButton.setSelection(true); break; default: propertyConflictMarkButton.setSelection(true); break; } } public void init(IWorkbench workbench) {} } 000077500000000000000000000000001203611042400357055ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/propertiesSVNPropertyPage.java000066400000000000000000000372561203611042400415750ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/properties/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.properties; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.dialogs.PropertyPage; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.SVNTreeConflict; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.ISVNProperty; import org.tigris.subversion.svnclientadapter.SVNConflictDescriptor; import org.tigris.subversion.svnclientadapter.SVNConflictVersion; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class SVNPropertyPage extends PropertyPage { private Text urlValue; private Text revisionValue; private Text repositoryRootValue; private Text repositoryUuidValue; private Text statusValue; private Text propertiesValue; private Text copiedFromValue; private Text lastChangedRevisionValue; private Text lastChangedDateValue; private Text lastCommitAuthorValue; private Text lockOwner; private Text lockCreationDate; private Label lockComment; private Text treeConflict; private ISVNLocalResource svnResource; private LocalResourceStatus status; private SVNUrl urlCopiedFrom; private SVNRevision revision; private ISVNInfo info; private String lockOwnerText; private String lockDateText; private String lockCommentText; protected Control createContents(Composite parent) { Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); composite.setLayout(layout); GridData data = new GridData(GridData.FILL); composite.setLayoutData(data); getStatus(); addFirstSection(composite); if (status != null) { addSeparator(composite); addSecondSection(composite); setValues(); } Dialog.applyDialogFont(parent); PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.SVN_RESOURCE_PROPERTIES_PAGE); return composite; } private void addFirstSection(Composite parent) { Composite composite = createDefaultComposite(parent); //Label for path field Label label = new Label(composite, SWT.NONE); label.setText(Policy.bind("SVNPropertyPage.path")); //$NON-NLS-1$ // Path text field Text pathValue = new Text(composite, SWT.WRAP | SWT.READ_ONLY); GridData gd = new GridData(); gd.widthHint = 500; pathValue.setLayoutData(gd); pathValue.setText(((IResource) getElement()).getFullPath().toString()); pathValue.setBackground(composite.getBackground()); // Name text field if (!(getElement() instanceof IContainer)) { label = new Label(composite, SWT.NONE); label.setText(Policy.bind("SVNPropertyPage.name")); //$NON-NLS-1$ Text nameValue = new Text(composite, SWT.WRAP | SWT.READ_ONLY); gd = new GridData(); gd.widthHint = 500; nameValue.setLayoutData(gd); nameValue.setText(((IResource) getElement()).getName()); nameValue.setBackground(composite.getBackground()); } label = new Label(composite, SWT.NONE); label.setText(Policy.bind("SVNPropertyPage.url")); //$NON-NLS-1$ urlValue = new Text(composite, SWT.WRAP | SWT.READ_ONLY); gd = new GridData(); gd.widthHint = 500; urlValue.setLayoutData(gd); urlValue.setBackground(composite.getBackground()); label = new Label(composite, SWT.NONE); label.setText(Policy.bind("SVNPropertyPage.repositoryRoot")); //$NON-NLS-1$ repositoryRootValue = new Text(composite, SWT.WRAP | SWT.READ_ONLY); gd = new GridData(); gd.widthHint = 500; repositoryRootValue.setLayoutData(gd); repositoryRootValue.setBackground(composite.getBackground()); if (info != null && info.getUuid() != null) { label = new Label(composite, SWT.NONE); label.setText(Policy.bind("SVNPropertyPage.uuid")); //$NON-NLS-1$ Text uuidValue = new Text(composite, SWT.WRAP | SWT.READ_ONLY); gd = new GridData(); gd.widthHint = 500; uuidValue.setLayoutData(gd); uuidValue.setBackground(composite.getBackground()); uuidValue.setText(info.getUuid()); } label = new Label(composite, SWT.NONE); label.setText(Policy.bind("SVNPropertyPage.revision")); //$NON-NLS-1$ revisionValue = new Text(composite, SWT.READ_ONLY); revisionValue.setBackground(composite.getBackground()); } private void addSecondSection(Composite parent) { Composite composite = createDefaultComposite(parent); Label label = new Label(composite, SWT.NONE); label.setText(Policy.bind("SVNPropertyPage.status")); //$NON-NLS-1$ statusValue = new Text(composite, SWT.READ_ONLY); statusValue.setBackground(composite.getBackground()); label = new Label(composite, SWT.NONE); label.setText(Policy.bind("SVNPropertyPage.propStatus")); //$NON-NLS-1$ propertiesValue = new Text(composite, SWT.READ_ONLY); propertiesValue.setBackground(composite.getBackground()); if (urlCopiedFrom != null) { label = new Label(composite, SWT.NONE); label.setText(Policy.bind("SVNPropertyPage.copiedFrom")); //$NON-NLS-1$ copiedFromValue = new Text(composite, SWT.WRAP | SWT.READ_ONLY); copiedFromValue.setBackground(composite.getBackground()); GridData gd = new GridData(); gd.widthHint = 500; copiedFromValue.setLayoutData(gd); } if (status.getLastChangedRevision() != null) { label = new Label(composite, SWT.NONE); label.setText(Policy.bind("SVNPropertyPage.changedRevision")); //$NON-NLS-1$ lastChangedRevisionValue = new Text(composite, SWT.READ_ONLY); lastChangedRevisionValue.setBackground(composite.getBackground()); label = new Label(composite, SWT.NONE); label.setText(Policy.bind("SVNPropertyPage.changedDate")); //$NON-NLS-1$ lastChangedDateValue = new Text(composite, SWT.READ_ONLY); lastChangedDateValue.setBackground(composite.getBackground()); label = new Label(composite, SWT.NONE); label.setText(Policy.bind("SVNPropertyPage.changedAuthor")); //$NON-NLS-1$ lastCommitAuthorValue = new Text(composite, SWT.READ_ONLY); lastCommitAuthorValue.setBackground(composite.getBackground()); } if (lockOwnerText != null) { label = new Label(composite, SWT.NONE); label.setText(Policy.bind("SVNPropertyPage.lockOwner")); //$NON-NLS-1$ lockOwner = new Text(composite, SWT.READ_ONLY); lockOwner.setBackground(composite.getBackground()); label = new Label(composite, SWT.NONE); label.setText(Policy.bind("SVNPropertyPage.lockCreationDate")); //$NON-NLS-1$ lockCreationDate = new Text(composite, SWT.READ_ONLY); lockCreationDate.setBackground(composite.getBackground()); label = new Label(composite, SWT.NONE); label.setText(Policy.bind("SVNPropertyPage.lockComment")); //$NON-NLS-1$ lockComment = new Label(composite, SWT.WRAP); GridData gd = new GridData(); gd.widthHint = 500; lockComment.setLayoutData(gd); } if (status.hasTreeConflict()) { label = new Label(composite, SWT.NONE); label.setText(Policy.bind("SVNPropertyPage.treeConflict")); //$NON-NLS-1$ treeConflict = new Text(composite, SWT.READ_ONLY); treeConflict.setBackground(composite.getBackground()); SVNConflictDescriptor conflictDescriptor = status.getConflictDescriptor(); if (conflictDescriptor == null) treeConflict.setText("true"); //$NON-NLS-1$ else { SVNTreeConflict svnTreeConflict = new SVNTreeConflict(status); treeConflict.setText(svnTreeConflict.getDescription()); SVNConflictVersion srcLeftVersion = svnTreeConflict.getConflictDescriptor().getSrcLeftVersion(); if (srcLeftVersion != null) { new Label(composite, SWT.NONE); Text srcLeftVersionValue = new Text(composite, SWT.WRAP | SWT.READ_ONLY); GridData gd = new GridData(); gd.widthHint = 500; srcLeftVersionValue.setLayoutData(gd); srcLeftVersionValue.setText("Source left: " + srcLeftVersion.toString()); //$NON-NLS-1$ srcLeftVersionValue.setBackground(composite.getBackground()); } SVNConflictVersion srcRightVersion = svnTreeConflict.getConflictDescriptor().getSrcRightVersion(); if (srcRightVersion != null) { new Label(composite, SWT.NONE); Text srcRightVersionValue = new Text(composite, SWT.WRAP | SWT.READ_ONLY); GridData gd = new GridData(); gd.widthHint = 500; srcRightVersionValue.setLayoutData(gd); srcRightVersionValue.setText("Source right: " + srcRightVersion.toString()); //$NON-NLS-1$ srcRightVersionValue.setBackground(composite.getBackground()); } } } } private void addSeparator(Composite parent) { Label separator = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL); GridData gridData = new GridData(); gridData.horizontalAlignment = GridData.FILL; gridData.grabExcessHorizontalSpace = true; separator.setLayoutData(gridData); } private Composite createDefaultComposite(Composite parent) { Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 2; composite.setLayout(layout); GridData data = new GridData(GridData.FILL_BOTH); composite.setLayoutData(data); return composite; } private void getStatus() { ISVNRepositoryLocation repository = null; ISVNClientAdapter svnClient = null; try { IResource resource = (IResource) getElement(); SVNTeamProvider svnProvider = (SVNTeamProvider) RepositoryProvider.getProvider(resource .getProject(), SVNProviderPlugin.getTypeId()); if (svnProvider == null) return; svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); if (svnResource == null) return; status = svnResource.getStatus(); repository = svnResource.getRepository(); svnClient = repository.getSVNClient(); ISVNInfo info = svnClient.getInfoFromWorkingCopy(svnResource.getFile()); urlCopiedFrom = info.getCopyUrl(); revision = svnResource.getRevision(); lockOwnerText = status.getLockOwner(); lockCommentText = status.getLockComment(); if (status.getLockCreationDate() != null) lockDateText = status.getLockCreationDate().toString(); if (!status.isAdded()) { try { info = svnClient.getInfo(status.getUrl()); } catch (Exception e) {} } // Get lock information from server if svn:needs-lock property is set if (info != null && status.getLockOwner() == null && status.getUrlString() != null) { ISVNProperty prop = svnResource.getSvnProperty("svn:needs-lock"); if (prop != null) { lockOwnerText = info.getLockOwner(); if (info.getLockCreationDate() != null) lockDateText = info.getLockCreationDate().toString(); lockCommentText = info.getLockComment(); } } } catch (Exception e) { SVNUIPlugin.log(new Status(IStatus.ERROR, SVNUIPlugin.ID, TeamException.UNABLE, "Property Exception", e)); //$NON-NLS-1$ } finally { if (repository != null) { repository.returnSVNClient(svnClient); } } } private void setValues() { urlValue.setText(status.getUrlString() != null ? status.getUrlString() : ""); //$NON-NLS-1$ repositoryRootValue.setText(svnResource.getRepository() != null ? svnResource.getRepository().getUrl().toString(): ""); revisionValue.setText(revision != null ? revision.toString() : ""); //$NON-NLS-1$ StringBuffer sb = new StringBuffer(status.getTextStatus().toString()); if (status.isSwitched()) sb.append(", switched"); //$NON-NLS-1$ if (status.isCopied()) sb.append(", copied"); //$NON-NLS-1$ if (status.isTextMerged()) sb.append(", merged"); //$NON-NLS-1$ if (status.hasTreeConflict()) sb.append(", tree conflict"); //$NON-NLS-1$ statusValue.setText(sb.toString()); propertiesValue.setText(status.getPropStatus().toString()); if (urlCopiedFrom != null) { copiedFromValue.setText(urlCopiedFrom.toString()); } if (status.getLastChangedRevision() != null) { lastChangedRevisionValue.setText(status.getLastChangedRevision() != null ? status .getLastChangedRevision().toString() : ""); //$NON-NLS-1$ lastChangedDateValue.setText(status.getLastChangedDate() != null ? status .getLastChangedDate().toString() : ""); //$NON-NLS-1$ lastCommitAuthorValue.setText(status.getLastCommitAuthor() != null ? status .getLastCommitAuthor() : ""); //$NON-NLS-1$ } if (lockOwnerText != null) { lockOwner.setText(lockOwnerText); } if (lockDateText != null) { lockCreationDate.setText(lockDateText); } if (lockCommentText != null) { lockComment.setText(lockCommentText); } } protected void performDefaults() { } public boolean performOk() { return true; } } SVNRepositoryPropertiesPage.java000066400000000000000000000327721203611042400442030ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/properties/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.properties; import java.net.MalformedURLException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.window.Window; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.dialogs.PropertyPage; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.repo.SVNRepositories; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.decorator.SVNLightweightDecorator; import org.tigris.subversion.subclipse.ui.dialogs.ChooseRootUrlDialog; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * Property page to modify settings for a given repository */ public class SVNRepositoryPropertiesPage extends PropertyPage { private ISVNRepositoryLocation location; private static final String FAKE_PASSWORD = "*********"; //$NON-NLS-1$ private Text loginText; private Text passwordText; private Text customLabelText; private Button useUrlLabelButton; private Button useCustomLabelButton; private boolean passwordChanged; private Text repositoryRootText; private Text repositoryUrlText; private boolean showCredentials; /** Client adapter implementation identifier */ private static final String COMMANDLINE_CLIENT = "commandline"; //$NON-NLS-1$ /* (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#createContents(org.eclipse.swt.widgets.Composite) */ protected Control createContents(Composite parent) { initialize(); GridLayout layout; Label label; GridData data; Composite composite = new Composite(parent, SWT.NONE); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); layout = new GridLayout(); layout.numColumns = 1; composite.setLayout(layout); Listener labelListener = new Listener() { public void handleEvent(Event event) { updateWidgetEnablements(); } }; // group for label Composite labelGroup = new Composite(composite, SWT.NONE); labelGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); layout = new GridLayout(); layout.numColumns = 2; labelGroup.setLayout(layout); // use url as label useUrlLabelButton = new Button(labelGroup, SWT.RADIO); useUrlLabelButton.setText(Policy.bind("SVNRepositoryPropertiesPage.useRepositoryUrlAsLabel")); //$NON-NLS-1$ useUrlLabelButton.addListener(SWT.Selection,labelListener); data = new GridData(); data.horizontalSpan = 2; useUrlLabelButton.setLayoutData(data); // use custom label useCustomLabelButton = new Button(labelGroup, SWT.RADIO); useCustomLabelButton.setText(Policy.bind("SVNRepositoryPropertiesPage.useCustomLabel")); //$NON-NLS-1$ useCustomLabelButton.addListener(SWT.Selection,labelListener); data = new GridData(); useCustomLabelButton.setLayoutData(data); customLabelText = new Text(labelGroup, SWT.SINGLE | SWT.BORDER); customLabelText.addListener(SWT.Modify, labelListener); data = new GridData(GridData.FILL_HORIZONTAL); // data.widthHint = 200; customLabelText.setLayoutData(data); // empty label to separate label = new Label(composite, SWT.NONE); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; customLabelText.addFocusListener(focusListener); if (showCredentials) { // group for login and password Composite userPasswordGroup = new Composite(composite, SWT.NONE); userPasswordGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); layout = new GridLayout(); layout.numColumns = 2; userPasswordGroup.setLayout(layout); // login label = new Label(userPasswordGroup, SWT.NONE); label.setText(Policy.bind("SVNRepositoryPropertiesPage.login")); //$NON-NLS-1$ loginText = new Text(userPasswordGroup, SWT.SINGLE | SWT.BORDER); data = new GridData(GridData.FILL_HORIZONTAL); data.grabExcessHorizontalSpace = true; loginText.setLayoutData(data); loginText.addFocusListener(focusListener); // password label = new Label(userPasswordGroup, SWT.NONE); label.setText(Policy.bind("SVNRepositoryPropertiesPage.password")); //$NON-NLS-1$ passwordText = new Text(userPasswordGroup, SWT.SINGLE | SWT.BORDER| SWT.PASSWORD); data = new GridData(GridData.FILL_HORIZONTAL); data.grabExcessHorizontalSpace = true; passwordText.setLayoutData(data); passwordText.addListener(SWT.Modify, new Listener() { public void handleEvent(Event event) { passwordChanged = !passwordText.getText().equals(FAKE_PASSWORD); } }); passwordText.addFocusListener(focusListener); } // empty label to separate label = new Label(composite, SWT.NONE); // group for repository root Composite repositoryRootGroup = new Composite(composite, SWT.NONE); repositoryRootGroup.setLayoutData(new GridData(GridData.FILL_HORIZONTAL)); layout = new GridLayout(); layout.numColumns = 3; repositoryRootGroup.setLayout(layout); // url of the repository label = new Label(repositoryRootGroup, SWT.NONE); label.setText(Policy.bind("SVNRepositoryPropertiesPage.repositoryUrl")); //$NON-NLS-1$ repositoryUrlText = new Text(repositoryRootGroup, SWT.SINGLE); repositoryUrlText.setText( ""); repositoryUrlText.setEditable(false); data = new GridData(GridData.FILL_HORIZONTAL); data.grabExcessHorizontalSpace = true; data.horizontalSpan = 2; repositoryUrlText.setLayoutData(data); // url of the repository root label = new Label(repositoryRootGroup, SWT.NONE); label.setText(Policy.bind("SVNRepositoryPropertiesPage.repositoryRootUrl")); //$NON-NLS-1$ repositoryRootText = new Text(repositoryRootGroup, SWT.SINGLE | SWT.BORDER); repositoryRootText.setEditable(false); data = new GridData(GridData.FILL_HORIZONTAL); data.grabExcessHorizontalSpace = true; repositoryRootText.setLayoutData(data); Button button = new Button(repositoryRootGroup, SWT.NONE); button.setText(Policy.bind("SVNRepositoryPropertiesPage.browseRootUrl")); //$NON-NLS-1$ button.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { openChooseRootDialog(); } }); // warning for repository root Composite warningComposite = new Composite(composite, SWT.NONE); warningComposite.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); layout = new GridLayout(); layout.numColumns = 2; layout.marginHeight = 0; layout.marginHeight = 0; warningComposite.setLayout(layout); Label warningLabel = new Label(warningComposite, SWT.NONE); warningLabel.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false)); warningLabel.setImage(Dialog.getImage(Dialog.DLG_IMG_MESSAGE_WARNING)); Label warningText = new Label(warningComposite, SWT.WRAP); warningText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); warningText.setText(Policy.bind("SVNRepositoryPropertiesPage.rootUrlWarning")); //$NON-NLS-1$ initializeValues(); return composite; } /** * open a dialog for the user to choose the root repository url * @param url * @return */ private void openChooseRootDialog() { ChooseRootUrlDialog dialog = new ChooseRootUrlDialog(getShell(),location.getUrl()); if (dialog.open() == Window.OK) { SVNUrl url = dialog.getRootUrl(); if (url == null) { repositoryRootText.setText(""); //$NON-NLS-1$ } else { repositoryRootText.setText(dialog.getRootUrl().toString()); } } } /** * Updates widget enablements and sets error message if appropriate. */ protected void updateWidgetEnablements() { if (useUrlLabelButton.getSelection()) { customLabelText.setEnabled(false); } else { customLabelText.setEnabled(true); } validateFields(); } private void validateFields() { if (customLabelText.isEnabled()) { if (customLabelText.getText().length() == 0) { setValid(false); return; } } setErrorMessage(null); setValid(true); } /** * Set the initial values of the widgets */ private void initializeValues() { passwordChanged = false; if (showCredentials) { loginText.setText(location.getUsername()); passwordText.setText(FAKE_PASSWORD); } // get the repository label String label = location.getLabel(); useUrlLabelButton.setSelection(label == null); useCustomLabelButton.setSelection(!useUrlLabelButton.getSelection()); if (label == null) { label = location.getLocation(); } customLabelText.setText(label); SVNUrl url = location.getUrl(); if (url != null) { repositoryUrlText.setText(url.toString()); } else { repositoryUrlText.setText(""); //$NON-NLS-1$ } SVNUrl repositoryRoot = location.getRepositoryRoot(); if (repositoryRoot != null) { repositoryRootText.setText(repositoryRoot.toString()); } else { repositoryRootText.setText(""); //$NON-NLS-1$ } } /** * Initializes the page */ private void initialize() { location = null; IAdaptable element = getElement(); if (element instanceof ISVNRepositoryLocation) { location = (ISVNRepositoryLocation)element; } else { Object adapter = element.getAdapter(ISVNRepositoryLocation.class); if (adapter instanceof ISVNRepositoryLocation) { location = (ISVNRepositoryLocation)adapter; } } showCredentials = SVNProviderPlugin.getPlugin().getSVNClientManager().getSvnClientInterface().equals(COMMANDLINE_CLIENT); if (!showCredentials) { if (location.getUsername() != null && !location.getUsername().trim().equals("")) showCredentials = true; } } /* (non-Javadoc) * @see org.eclipse.jface.preference.PreferencePage#performDefaults() */ protected void performDefaults() { super.performDefaults(); initializeValues(); } /* * @see PreferencesPage#performOk */ public boolean performOk() { if (showCredentials) { if (passwordChanged) { location.setPassword(passwordText.getText()); passwordChanged = false; } location.setUsername(loginText.getText()); } if (useCustomLabelButton.getSelection()) { location.setLabel(customLabelText.getText()); } else { location.setLabel(null); } if (!repositoryRootText.getText().equals("")) { //$NON-NLS-1$ try { location.setRepositoryRoot(new SVNUrl(repositoryRootText.getText())); } catch (MalformedURLException e1) { // should not occur, we don't change the url of the root } } else { location.setRepositoryRoot(null); } try { SVNRepositories repositories = SVNProviderPlugin.getPlugin().getRepositories(); repositories.addOrUpdateRepository(location); SVNLightweightDecorator.refresh(); } catch (SVNException e) { handle(e); return false; } return true; } /** * Shows the given errors to the user. */ protected void handle(Throwable e) { SVNUIPlugin.openError(getShell(), null, null, e); } } 000077500000000000000000000000001203611042400357305ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/repositoryIRepositoryListener.java000066400000000000000000000030441203611042400425720ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/repository/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.repository; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; /** * Listener for repositories. events fired when repository added, removed or changed */ public interface IRepositoryListener { public void repositoryAdded(ISVNRepositoryLocation root); public void repositoryModified(ISVNRepositoryLocation root); public void repositoryRemoved(ISVNRepositoryLocation root); public void repositoriesChanged(ISVNRepositoryLocation[] roots); public void remoteResourceDeleted(ISVNRemoteResource resource); public void remoteResourceCreated(ISVNRemoteFolder parent,String resourceName); public void remoteResourceCopied(ISVNRemoteResource source,ISVNRemoteFolder destination); public void remoteResourceMoved(ISVNRemoteResource resource, ISVNRemoteFolder destinationFolder,String destinationResourceName); } RemoveRootAction.java000066400000000000000000000114571203611042400420420ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/repository/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.repository; import java.util.ArrayList; import java.util.Iterator; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.ui.actions.SelectionListenerAction; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.actions.SVNAction; import org.tigris.subversion.subclipse.ui.util.DetailsDialogWithProjects; /** * RemoveRootAction removes a repository */ public class RemoveRootAction extends SelectionListenerAction { private IStructuredSelection selection; private Shell shell; public RemoveRootAction(Shell shell) { super(Policy.bind("RemoteRootAction.label")); //$NON-NLS-1$ this.shell = shell; } /** * Returns the selected remote files */ protected ISVNRepositoryLocation[] getSelectedRemoteRoots() { ArrayList resources = null; if (selection!=null && !selection.isEmpty()) { resources = new ArrayList(); Iterator elements = selection.iterator(); while (elements.hasNext()) { Object next = SVNAction.getAdapter(elements.next(), ISVNRepositoryLocation.class); if (next instanceof ISVNRepositoryLocation) { resources.add(next); } } } if (resources != null && !resources.isEmpty()) { ISVNRepositoryLocation[] result = new ISVNRepositoryLocation[resources.size()]; resources.toArray(result); return result; } return new ISVNRepositoryLocation[0]; } protected String getErrorTitle() { return Policy.bind("RemoveRootAction.removeRoot_3"); //$NON-NLS-1$ } public void run() { ISVNRepositoryLocation[] roots = getSelectedRemoteRoots(); if (roots.length == 0) return; SVNProviderPlugin provider = SVNProviderPlugin.getPlugin(); for (int i = 0; i < roots.length; i++) { try { // Check if any projects are shared with the repository IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); final ArrayList shared = new ArrayList(); for (int j = 0; j < projects.length; j++) { RepositoryProvider teamProvider = RepositoryProvider.getProvider(projects[j], SVNProviderPlugin.getTypeId()); if (teamProvider!=null) { try { SVNTeamProvider svnProvider = (SVNTeamProvider)teamProvider; if (svnProvider.getSVNWorkspaceRoot().getRepository().equals(roots[i])) { shared.add(projects[j]); } } catch(Exception e) { // Don't let any exception prevent from // continuing } } } // This will notify the RepositoryManager of the removal if (!shared.isEmpty()) { final String location = roots[i].getLocation(); shell.getDisplay().syncExec(new Runnable() { public void run() { DetailsDialogWithProjects dialog = new DetailsDialogWithProjects( shell, Policy.bind("RemoteRootAction.Unable_to_Discard_Location_1"), //$NON-NLS-1$ Policy.bind("RemoteRootAction.Projects_in_the_local_workspace_are_shared_with__2", location), //$NON-NLS-1$ Policy.bind("RemoteRootAction.The_projects_that_are_shared_with_the_above_repository_are__4"), //$NON-NLS-1$ (IProject[]) shared.toArray(new IProject[shared.size()]), false, SVNUIPlugin.getStandardDisplay().getSystemImage(SWT.ICON_ERROR) ); dialog.open(); } }); } else { provider.getRepositories().disposeRepository(roots[i]); } } catch (SVNException e) { SVNUIPlugin.openError(shell,null,null,e); SVNUIPlugin.log(e); } } } /** * updates the selection. this selection will be used during run * returns true if action can be enabled */ protected boolean updateSelection(IStructuredSelection selection) { this.selection = selection; ISVNRepositoryLocation[] roots = getSelectedRemoteRoots(); return roots.length > 0; } } RepositoriesView.java000066400000000000000000000572251203611042400421300ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/repository/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.repository; import java.lang.reflect.InvocationTargetException; import java.util.Iterator; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.DecoratingLabelProvider; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ILabelDecorator; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.window.SameShellProvider; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.dnd.DND; import org.eclipse.swt.dnd.DragSourceEvent; import org.eclipse.swt.dnd.DragSourceListener; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Tree; import org.eclipse.ui.IActionBars; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.dialogs.PropertyDialogAction; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.ui.part.DrillDownAdapter; import org.eclipse.ui.part.PluginTransfer; import org.eclipse.ui.part.PluginTransferData; import org.eclipse.ui.part.ViewPart; import org.eclipse.ui.part.WorkbenchPart; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.ISVNResource; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.resources.RemoteFile; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.WorkspacePathValidator; import org.tigris.subversion.subclipse.ui.actions.OpenRemoteFileAction; import org.tigris.subversion.subclipse.ui.actions.RemoteResourceTransfer; import org.tigris.subversion.subclipse.ui.actions.SVNAction; import org.tigris.subversion.subclipse.ui.repository.model.AllRootsElement; import org.tigris.subversion.subclipse.ui.repository.model.RemoteContentProvider; import org.tigris.subversion.subclipse.ui.wizards.NewLocationWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardDialog; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardNewRepositoryPage; /** * RepositoriesView is a view on a set of known SVN repositories * which allows navigation of the structure of the repository and * the performing of SVN-specific operations on the repository contents. */ public class RepositoriesView extends ViewPart implements ISelectionListener { public static final String VIEW_ID = "org.tigris.subversion.subclipse.ui.repository.RepositoriesView"; //$NON-NLS-1$ // The root private AllRootsElement root; // Actions private Action newAction; private RemoveRootAction removeRootAction; // The tree viewer protected TreeViewer treeViewer; // Drill down adapter private DrillDownAdapter drillPart; // Home, back, and "drill into" private Action refreshAction; private Action refreshPopupAction; private Action collapseAllAction; private OpenRemoteFileAction openAction; private Action propertiesAction; private RemoteContentProvider contentProvider; // this listener is used when a repository is added, removed or changed private IRepositoryListener repositoryListener = new IRepositoryListener() { public void repositoryAdded(final ISVNRepositoryLocation root) { getViewer().getControl().getDisplay().syncExec(new Runnable() { public void run() { refreshViewer(null, false); getViewer().setSelection(new StructuredSelection(root)); } }); } public void repositoryRemoved(ISVNRepositoryLocation root) { refresh(null, false); } public void repositoriesChanged(ISVNRepositoryLocation[] roots) { refresh(null, false); } public void remoteResourceDeleted(ISVNRemoteResource resource) { refresh(resource.getParent(), false); } public void remoteResourceCreated(ISVNRemoteFolder parent,String resourceName) { refresh(parent, true); } public void remoteResourceCopied(ISVNRemoteResource source,ISVNRemoteFolder destination) { refresh(destination, false); } public void remoteResourceMoved(ISVNRemoteResource resource, ISVNRemoteFolder destinationFolder,String destinationResourceName) { refresh(resource.getParent(), false); refresh(destinationFolder, false); } private void refresh(Object object, boolean refreshRepositoriesFolders) { final Object finalObject = object; final boolean finalRefreshReposFolders = refreshRepositoriesFolders; Display display = getViewer().getControl().getDisplay(); display.syncExec(new Runnable() { public void run() { RepositoriesView.this.refreshViewer(finalObject, finalRefreshReposFolders); } }); } public void repositoryModified(ISVNRepositoryLocation root) { refresh(null, false); } }; private static final class RepositoryDragSourceListener implements DragSourceListener { private IStructuredSelection selection; public void dragStart(DragSourceEvent event) { if(selection!=null) { final Object[] array = selection.toArray(); // event.doit = Utils.getResources(array).length > 0; for (int i = 0; i < array.length; i++) { if (array[i] instanceof ISVNRemoteResource) { event.doit = true; return; } } event.doit = false; } } public void dragSetData(DragSourceEvent event) { if (selection!=null && RemoteResourceTransfer.getInstance().isSupportedType(event.dataType)) { final Object[] array = selection.toArray(); for (int i = 0; i < array.length; i++) { if (array[i] instanceof ISVNRemoteResource) { event.data = array[i]; return; } } } else if (PluginTransfer.getInstance().isSupportedType(event.dataType)) { final Object[] array = selection.toArray(); for (int i = 0; i < array.length; i++) { if (array[i] instanceof ISVNRemoteResource) { event.data = new PluginTransferData("org.tigris.subversion.subclipse.ui.svnRemoteDrop", RemoteResourceTransfer.getInstance().toByteArray((ISVNRemoteResource) array[i])); //$NON-NLS-1$ return; } } } } public void dragFinished( DragSourceEvent event) { } public void updateSelection( IStructuredSelection selection) { this.selection = selection; } } RepositoryDragSourceListener repositoryDragSourceListener; /** * Constructor for RepositoriesView. * @param partName */ public RepositoriesView() { // super(VIEW_ID); } /** * Contribute actions to the view */ protected void contributeActions() { final Shell shell = getShell(); // Create actions // New Repository (popup) newAction = new Action(Policy.bind("RepositoriesView.new"), //$NON-NLS-1$ SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_NEWLOCATION)) { //$NON-NLS-1$ public void run() { if (!WorkspacePathValidator.validateWorkspacePath()) return; NewLocationWizard wizard = new NewLocationWizard(); WizardDialog dialog = new WizardDialog(shell, wizard); dialog.open(); } }; PlatformUI.getWorkbench().getHelpSystem().setHelp(newAction, IHelpContextIds.NEW_REPOSITORY_LOCATION_ACTION); // Properties propertiesAction = new PropertyDialogAction(new SameShellProvider(shell), getViewer()); getViewSite().getActionBars().setGlobalActionHandler(ActionFactory.PROPERTIES.getId(), propertiesAction); IStructuredSelection selection = (IStructuredSelection)getViewer().getSelection(); if (selection.size() == 1 && selection.getFirstElement() instanceof ISVNRepositoryLocation) { propertiesAction.setEnabled(true); } else { propertiesAction.setEnabled(false); } getViewer().addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection ss = (IStructuredSelection)event.getSelection(); boolean enabled = ss.size() == 1 && ss.getFirstElement() instanceof ISVNRepositoryLocation; propertiesAction.setEnabled(enabled); } }); // Remove Root removeRootAction = new RemoveRootAction(treeViewer.getControl().getShell()); removeRootAction.selectionChanged((IStructuredSelection)null); PlatformUI.getWorkbench().getHelpSystem().setHelp(removeRootAction, IHelpContextIds.REMOVE_REPOSITORY_LOCATION_ACTION); IActionBars bars = getViewSite().getActionBars(); bars.setGlobalActionHandler(ActionFactory.DELETE.getId(), removeRootAction); // Refresh action (toolbar) SVNUIPlugin plugin = SVNUIPlugin.getPlugin(); refreshAction = new Action(Policy.bind("RepositoriesView.refresh"), SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_REFRESH_ENABLED)) { //$NON-NLS-1$ public void run() { refreshViewer(null, true); } }; refreshAction.setToolTipText(Policy.bind("RepositoriesView.refreshTooltip")); //$NON-NLS-1$ refreshAction.setDisabledImageDescriptor(plugin.getImageDescriptor(ISVNUIConstants.IMG_REFRESH_DISABLED)); refreshAction.setHoverImageDescriptor(plugin.getImageDescriptor(ISVNUIConstants.IMG_REFRESH)); getViewSite().getActionBars().setGlobalActionHandler(ActionFactory.REFRESH.getId(), refreshAction); refreshPopupAction = new Action(Policy.bind("RepositoriesView.refreshPopup"), SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_REFRESH)) { //$NON-NLS-1$ public void run() { refreshViewerNode(); } }; // Collapse action collapseAllAction = new Action(Policy.bind("RepositoriesView.collapseAll"), SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_COLLAPSE_ALL_ENABLED)) { //$NON-NLS-1$ public void run() { collapseAll(); } }; collapseAllAction.setToolTipText(Policy.bind("RepositoriesView.collapseAllTooltip")); //$NON-NLS-1$ collapseAllAction.setHoverImageDescriptor(plugin.getImageDescriptor(ISVNUIConstants.IMG_COLLAPSE_ALL)); // Create the popup menu MenuManager menuMgr = new MenuManager(); Tree tree = treeViewer.getTree(); Menu menu = menuMgr.createContextMenu(tree); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { addWorkbenchActions(manager); } }); menuMgr.setRemoveAllWhenShown(true); tree.setMenu(menu); getSite().registerContextMenu(menuMgr, treeViewer); // Create the local tool bar IToolBarManager tbm = bars.getToolBarManager(); drillPart.addNavigationActions(tbm); tbm.add(refreshAction); tbm.add(new Separator()); tbm.add(collapseAllAction); tbm.update(false); // Create the open action for double clicks openAction = new OpenRemoteFileAction(); bars.updateActionBars(); IActionBars actionBars = getViewSite().getActionBars(); IMenuManager actionBarsMenu = actionBars.getMenuManager(); Action newRepositoryAction = new Action(Policy.bind("RepositoriesView.newRepository")) { //$NON-NLS-1$ public void run() { SvnWizardNewRepositoryPage newRepositoryPage = new SvnWizardNewRepositoryPage(); SvnWizard wizard = new SvnWizard(newRepositoryPage); SvnWizardDialog dialog = new SvnWizardDialog(getShell(), wizard); if (dialog.open() == SvnWizardDialog.OK) refreshViewer(null, false); } }; actionBarsMenu.add(newRepositoryAction); } // contributeActions /** * @see org.tigris.subversion.subclipse.ui.repo.RemoteViewPart#addWorkbenchActions(org.eclipse.jface.action.IMenuManager) */ protected void addWorkbenchActions(IMenuManager manager) { // New actions go next MenuManager sub = new MenuManager(Policy.bind("RepositoriesView.newSubmenu"), IWorkbenchActionConstants.GROUP_ADD); //$NON-NLS-1$ sub.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); manager.add(sub); // File actions go first (view file) manager.add(new Separator(IWorkbenchActionConstants.GROUP_FILE)); // Misc additions manager.add(new Separator("historyGroup")); //$NON-NLS-1$ manager.add(new Separator("checkoutGroup")); //$NON-NLS-1$ manager.add(new Separator("exportImportGroup")); //$NON-NLS-1$ manager.add(new Separator("miscGroup")); //$NON-NLS-1$ manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); manager.add(refreshPopupAction); IStructuredSelection selection = (IStructuredSelection)getViewer().getSelection(); removeRootAction.selectionChanged(selection); if(removeRootAction.isEnabled()) { manager.add(removeRootAction); } if (selection.size() == 1 && selection.getFirstElement() instanceof ISVNRepositoryLocation) { manager.add(new Separator()); manager.add(propertiesAction); } sub.add(newAction); } /* * @see WorkbenchPart#createPartControl */ public void createPartControl(Composite parent) { treeViewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); contentProvider = new RemoteContentProvider(); treeViewer.setContentProvider(contentProvider); final RepositoriesViewDecorator decorator = new RepositoriesViewDecorator(); DecoratingLabelProvider labelProvider = new DecoratingLabelProvider(new WorkbenchLabelProvider(), new ILabelDecorator() { public Image decorateImage(Image image, Object obj) { if (obj instanceof RemoteFile) { RemoteFile remoteFile = (RemoteFile)obj; if (remoteFile.getLock() != null) { return decorator.getImage(image); } } return null; } public String decorateText(String text, Object obj) { return null; } public void addListener(ILabelProviderListener listener) { } public void dispose() { } public boolean isLabelProperty(Object obj, String prop) { return false; } public void removeListener(ILabelProviderListener listener) { } }); treeViewer.setLabelProvider(labelProvider); getSite().setSelectionProvider(treeViewer); root = new AllRootsElement(); treeViewer.setInput(root); treeViewer.setSorter(new RepositorySorter()); drillPart = new DrillDownAdapter(treeViewer); contributeActions(); // F1 Help String helpID = getHelpContextId(); if (helpID != null) PlatformUI.getWorkbench().getHelpSystem().setHelp(treeViewer.getControl(), helpID); initializeListeners(); SVNUIPlugin.getPlugin().getRepositoryManager().addRepositoryListener(repositoryListener); } /** * initialize the listeners */ protected void initializeListeners() { getSite().getWorkbenchWindow().getSelectionService().addPostSelectionListener(this); treeViewer.addSelectionChangedListener(removeRootAction); // when F5 is pressed, refresh this view treeViewer.getControl().addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent event) { if (event.keyCode == SWT.F5) { /* IStructuredSelection selection = (IStructuredSelection)getViewer().getSelection(); if (selection.size() == 1) { getViewer().refresh(selection.getFirstElement()); } */ refreshAction.run(); } } }); treeViewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent e) { handleDoubleClick(e); } }); repositoryDragSourceListener = new RepositoryDragSourceListener(); treeViewer.addDragSupport( DND.DROP_LINK | DND.DROP_DEFAULT, new Transfer[] { RemoteResourceTransfer.getInstance(), PluginTransfer.getInstance()}, repositoryDragSourceListener); treeViewer.addSelectionChangedListener( new ISelectionChangedListener() { public void selectionChanged( SelectionChangedEvent event) { repositoryDragSourceListener.updateSelection( (IStructuredSelection) event.getSelection()); } }); } /** * @see org.eclipse.ui.ISelectionListener#selectionChanged(org.eclipse.ui.IWorkbenchPart, org.eclipse.jface.viewers.ISelection) */ public void selectionChanged(IWorkbenchPart part, ISelection selection) { String msg = getStatusLineMessage(selection); getViewSite().getActionBars().getStatusLineManager().setMessage(msg); } /** * When selection is changed we update the status line */ private String getStatusLineMessage(ISelection selection) { if (selection==null || selection.isEmpty()) return ""; //$NON-NLS-1$ if (!(selection instanceof IStructuredSelection)) return ""; //$NON-NLS-1$ IStructuredSelection s = (IStructuredSelection)selection; if (s.size() > 1) return Policy.bind("RepositoriesView.NItemsSelected", String.valueOf(s.size())); //$NON-NLS-1$ Object element = SVNAction.getAdapter(s.getFirstElement(), ISVNResource.class); if (element instanceof ISVNRemoteResource) { ISVNRemoteResource res = (ISVNRemoteResource)element; String name; if (res.isContainer()) { name = res.getRepositoryRelativePath(); } else { name = res.getRepositoryRelativePath() + " " + ((ISVNRemoteFile)res).getLastChangedRevision(); //$NON-NLS-1$ } return Policy.bind("RepositoriesView.ResourceInRepository", name, res.getRepository().getLocation()); //$NON-NLS-1$ } return Policy.bind("RepositoriesView.OneItemSelected"); //$NON-NLS-1$ } /** * @see org.tigris.subversion.subclipse.ui.repo.RemoteViewPart#getHelpContextId() */ protected String getHelpContextId() { return IHelpContextIds.REPOSITORIES_VIEW; } /** * @see WorkbenchPart#setFocus */ public void setFocus() { treeViewer.getControl().setFocus(); } /** * Method getShell. * @return Shell */ protected Shell getShell() { return treeViewer.getTree().getShell(); } /** * Returns the viewer. * @return TreeViewer */ protected TreeViewer getViewer() { return treeViewer; } /** * this is called whenever a new repository location is added for example * or when user wants to refresh */ protected void refreshViewer(Object object, boolean refreshRepositoriesFolders) { if (treeViewer == null) return; if (refreshRepositoriesFolders) { IRunnableWithProgress runnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { SVNProviderPlugin.getPlugin().getRepositories().refreshRepositoriesFolders(monitor); } }; try { new ProgressMonitorDialog(getShell()).run(true, false, runnable); } catch (Exception e) { SVNUIPlugin.openError(getShell(), null, null, e, SVNUIPlugin.LOG_TEAM_EXCEPTIONS); } } if (object == null) treeViewer.refresh(); else { if (object instanceof ISVNRemoteFolder) { ISVNRemoteFolder parent = ((ISVNRemoteFolder)object).getParent(); if (parent == null) { treeViewer.refresh(); return; } } treeViewer.refresh(object); } } protected void refreshViewerNode() { IStructuredSelection selection = (IStructuredSelection)treeViewer.getSelection(); Iterator iter = selection.iterator(); while (iter.hasNext()) { Object object = iter.next(); if (object instanceof ISVNRepositoryLocation) { refreshAction.run(); break; } if (object instanceof ISVNRemoteFolder) ((ISVNRemoteFolder)object).refresh(); treeViewer.refresh(object); } } public void collapseAll() { if (treeViewer == null) return; treeViewer.getControl().setRedraw(false); treeViewer.collapseToLevel(treeViewer.getInput(), TreeViewer.ALL_LEVELS); treeViewer.getControl().setRedraw(true); } /** * The mouse has been double-clicked in the tree, perform appropriate * behaviour. */ private void handleDoubleClick(DoubleClickEvent e) { // Only act on single selection ISelection selection = e.getSelection(); if (selection instanceof IStructuredSelection) { IStructuredSelection structured = (IStructuredSelection)selection; if (structured.size() == 1) { Object first = structured.getFirstElement(); if (first instanceof ISVNRemoteFile) { // It's a file, open it. openAction.selectionChanged(null, selection); openAction.run(null); } else { // Try to expand/contract treeViewer.setExpandedState(first, !treeViewer.getExpandedState(first)); } } } } /** * @see org.eclipse.ui.IWorkbenchPart#dispose() */ public void dispose() { SVNUIPlugin.getPlugin().getRepositoryManager().removeRepositoryListener(repositoryListener); super.dispose(); treeViewer = null; } } RepositoriesViewDecorator.java000066400000000000000000000020301203611042400437530ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/repositorypackage org.tigris.subversion.subclipse.ui.repository; import java.util.HashMap; import org.eclipse.compare.CompareUI; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.graphics.Image; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.decorator.SVNLightweightDecorator.CachedImageDescriptor; import org.tigris.subversion.subclipse.ui.util.DiffImage; public class RepositoriesViewDecorator { private static ImageDescriptor locked = new CachedImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_LOCKED)); private static HashMap fgMap= new HashMap(); public Image getImage(Image base) { Image decoratedImage = (Image) fgMap.get(base); if (decoratedImage != null) { return decoratedImage; } decoratedImage = new DiffImage(base, locked, 18, false).createImage(); fgMap.put(base, decoratedImage); CompareUI.disposeOnShutdown(decoratedImage); return decoratedImage; } } RepositoryFilters.java000066400000000000000000000020001203611042400422730ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/repository/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.repository; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; public class RepositoryFilters { public static final ViewerFilter FOLDERS_ONLY = new ViewerFilter() { public boolean select(Viewer viewer, Object parentElement, Object element) { return !(element instanceof ISVNRemoteFile); } }; } RepositoryManager.java000066400000000000000000000335321203611042400422530ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/repository/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.repository; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.window.Window; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.repo.ISVNListener; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.authentication.KeyFilesManager; import org.tigris.subversion.subclipse.ui.comments.CommentsManager; import org.tigris.subversion.subclipse.ui.comments.ReleaseCommentDialog; import org.tigris.subversion.subclipse.ui.dialogs.AddToVersionControlDialog; /** * This class is responsible for maintaining the UI's list of known repositories * * It also provides a number of useful methods for assisting in repository operations. */ public class RepositoryManager { List listeners = new ArrayList(); private CommentsManager commentsManager = new CommentsManager(); private KeyFilesManager keyFilesManager = new KeyFilesManager(); /** * Answer an array of all known remote roots. */ public ISVNRepositoryLocation[] getKnownRepositoryLocations(IProgressMonitor monitor) { return SVNProviderPlugin.getPlugin().getRepositories().getKnownRepositories(monitor); } /** * A repository root has been added. Notify any listeners. */ public void rootAdded(ISVNRepositoryLocation root) { Iterator it = listeners.iterator(); while (it.hasNext()) { IRepositoryListener listener = (IRepositoryListener)it.next(); listener.repositoryAdded(root); } } /** * A repository root has been modified. Notify any listeners. */ public void rootModified(ISVNRepositoryLocation root) { Iterator it = listeners.iterator(); while (it.hasNext()) { IRepositoryListener listener = (IRepositoryListener)it.next(); listener.repositoryModified(root); } } /** * A repository root has been removed. */ public void rootRemoved(ISVNRepositoryLocation root) { Iterator it = listeners.iterator(); while (it.hasNext()) { IRepositoryListener listener = (IRepositoryListener)it.next(); listener.repositoryRemoved(root); } } /** * A resource has been deleted */ public void resourceDeleted(ISVNRemoteResource resource) { Iterator it = listeners.iterator(); while (it.hasNext()) { IRepositoryListener listener = (IRepositoryListener)it.next(); listener.remoteResourceDeleted(resource); } } /** * A resource has been deleted */ public void resourceCreated(ISVNRemoteFolder parent, String resourceName) { Iterator it = listeners.iterator(); while (it.hasNext()) { IRepositoryListener listener = (IRepositoryListener)it.next(); listener.remoteResourceCreated(parent,resourceName); } } /** * A resource has been copied */ public void resourceCopied(ISVNRemoteResource source, ISVNRemoteFolder destination) { Iterator it = listeners.iterator(); while (it.hasNext()) { IRepositoryListener listener = (IRepositoryListener)it.next(); listener.remoteResourceCopied(source, destination); } } /** * A resource has been moved */ public void resourceMoved(ISVNRemoteResource resource, ISVNRemoteFolder destinationFolder, String destinationResourceName) { Iterator it = listeners.iterator(); while (it.hasNext()) { IRepositoryListener listener = (IRepositoryListener)it.next(); listener.remoteResourceMoved(resource, destinationFolder,destinationResourceName); } } /** * called when plugin is started */ public void startup() { commentsManager.loadCommentHistory(); commentsManager.loadCommentTemplates(); keyFilesManager.loadKeyFileHistory(); // we listen to changes to repository so that we can advise concerned views SVNProviderPlugin.getPlugin().getRepositoryResourcesManager().addRepositoryListener(new ISVNListener() { public void repositoryAdded(ISVNRepositoryLocation root) { rootAdded(root); } public void repositoryRemoved(ISVNRepositoryLocation root) { rootRemoved(root); } public void remoteResourceDeleted(ISVNRemoteResource resource) { resourceDeleted(resource); } public void remoteResourceCreated(ISVNRemoteFolder parent, String resourceName) { resourceCreated(parent, resourceName); } public void remoteResourceCopied(ISVNRemoteResource source, ISVNRemoteFolder destination) { resourceCopied(source, destination); } public void remoteResourceMoved(ISVNRemoteResource resource, ISVNRemoteFolder destinationFolder, String destinationResourceName) { resourceMoved(resource, destinationFolder, destinationResourceName); } public void repositoryModified(ISVNRepositoryLocation root) { rootModified(root); } }); } /** * Called when plugin is stopped */ public void shutdown() throws TeamException { commentsManager.saveCommentHistory(); commentsManager.saveCommentTemplates(); keyFilesManager.saveKeyFilesHistory(); } public void addRepositoryListener(IRepositoryListener listener) { listeners.add(listener); } public void removeRepositoryListener(IRepositoryListener listener) { listeners.remove(listener); } /** * Add the given resources to their associated providers. * This schedules the resources for addition; they still need to be committed. */ public void add(IResource[] resources, IProgressMonitor monitor) throws TeamException { if (monitor == null) { monitor = new NullProgressMonitor(); } Map table = getProviderMapping(resources); // some of the resources are not associated with shared projects if (table.get(null) != null) { throw new SVNException(Policy.bind("RepositoryManager.addErrorNotAssociated")); //$NON-NLS-1$ } // iterate through the svn providers Set keySet = table.keySet(); monitor.beginTask("", keySet.size() * 1000); //$NON-NLS-1$ monitor.setTaskName(Policy.bind("RepositoryManager.adding")); //$NON-NLS-1$ Iterator iterator = keySet.iterator(); while (iterator.hasNext()) { IProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1000); SVNTeamProvider provider = (SVNTeamProvider)iterator.next(); List list = (List)table.get(provider); IResource[] providerResources = (IResource[])list.toArray(new IResource[list.size()]); provider.add(providerResources, IResource.DEPTH_ZERO, subMonitor); } } // /** // * Delete the given resources from their associated providers. // * This schedules the resources for deletion; they still need to be committed. // */ // public void delete(IResource[] resources, IProgressMonitor monitor) throws TeamException { // Map table = getProviderMapping(resources); // Set keySet = table.keySet(); // monitor.beginTask("", keySet.size() * 1000); //$NON-NLS-1$ // monitor.setTaskName(Policy.bind("RepositoryManager.deleting")); //$NON-NLS-1$ // Iterator iterator = keySet.iterator(); // while (iterator.hasNext()) { // IProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1000); // SVNTeamProvider provider = (SVNTeamProvider)iterator.next(); // provider.setComment(getCurrentComment()); // List list = (List)table.get(provider); // IResource[] providerResources = (IResource[])list.toArray(new IResource[list.size()]); // provider.delete(providerResources, subMonitor); // } // } // // public void update(IResource[] resources, Command.LocalOption[] options, boolean createBackups, IProgressMonitor monitor) throws TeamException { // Map table = getProviderMapping(resources); // Set keySet = table.keySet(); // monitor.beginTask("", keySet.size() * 1000); //$NON-NLS-1$ // monitor.setTaskName(Policy.bind("RepositoryManager.updating")); //$NON-NLS-1$ // Iterator iterator = keySet.iterator(); // while (iterator.hasNext()) { // IProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1000); // SVNTeamProvider provider = (SVNTeamProvider)iterator.next(); // List list = (List)table.get(provider); // IResource[] providerResources = (IResource[])list.toArray(new IResource[list.size()]); // provider.update(providerResources, options, null, createBackups, subMonitor); // } // } // // /** // * Mark the files as merged. // */ // public void merged(IRemoteSyncElement[] elements) throws TeamException { // Map table = getProviderMapping(elements); // Set keySet = table.keySet(); // Iterator iterator = keySet.iterator(); // while (iterator.hasNext()) { // SVNTeamProvider provider = (SVNTeamProvider)iterator.next(); // provider.setComment(getCurrentComment()); // List list = (List)table.get(provider); // IRemoteSyncElement[] providerElements = (IRemoteSyncElement[])list.toArray(new IRemoteSyncElement[list.size()]); // provider.merged(providerElements); // } // } public CommentsManager getCommentsManager() { return commentsManager; } public KeyFilesManager getKeyFilesManager() { return keyFilesManager; } /** * Return the entered comment or null if canceled. */ public String promptForComment(final Shell shell, IResource[] resourcesToCommit) { final int[] result = new int[1]; final ReleaseCommentDialog dialog = new ReleaseCommentDialog(shell, resourcesToCommit); shell.getDisplay().syncExec(new Runnable() { public void run() { result[0] = dialog.open(); if (result[0] != Window.OK) return; } }); if (result[0] != Window.OK) return null; return dialog.getComment(); } /** * Prompt to add all or some of the provided resources to version control. * The value null is returned if the dialog is cancelled. * * @param shell * @param unadded * @return IResource[] */ public IResource[] promptForResourcesToBeAdded(Shell shell, IResource[] unadded) { if (unadded == null) return new IResource[0]; if (unadded.length == 0) return unadded; final IResource[][] result = new IResource[1][0]; result[0] = null; final AddToVersionControlDialog dialog = new AddToVersionControlDialog(shell, unadded); shell.getDisplay().syncExec(new Runnable() { public void run() { int code = dialog.open(); if (code == IDialogConstants.YES_ID) { result[0] = dialog.getResourcesToAdd(); } else if(code == IDialogConstants.NO_ID) { // allow the commit to continue. result[0] = new IResource[0]; } } }); return result[0]; } /** * Commit the given resources to their associated providers. * * @param resources the resources to commit * @param monitor the progress monitor */ public void commit(IResource[] resources, String comment, boolean keepLocks, IProgressMonitor monitor) throws TeamException { if (monitor == null) { monitor = new NullProgressMonitor(); } Map table = getProviderMapping(resources); Set keySet = table.keySet(); monitor.beginTask("", keySet.size() * 1000); //$NON-NLS-1$ monitor.setTaskName(Policy.bind("RepositoryManager.committing")); //$NON-NLS-1$ Iterator iterator = keySet.iterator(); while (iterator.hasNext()) { IProgressMonitor subMonitor = new SubProgressMonitor(monitor, 1000); SVNTeamProvider provider = (SVNTeamProvider)iterator.next(); List list = (List)table.get(provider); IResource[] providerResources = (IResource[])list.toArray(new IResource[list.size()]); provider.checkin(providerResources, comment, keepLocks, IResource.DEPTH_INFINITE, subMonitor); } } /** * Helper method. Return a Map mapping provider to a list of resources * shared with that provider. * If a resource is not associated with a provider, the key is null */ private Map getProviderMapping(IResource[] resources) { Map result = new HashMap(); for (int i = 0; i < resources.length; i++) { RepositoryProvider provider = RepositoryProvider.getProvider(resources[i].getProject(), SVNProviderPlugin.getTypeId()); List list = (List)result.get(provider); if (list == null) { list = new ArrayList(); result.put(provider, list); } list.add(resources[i]); } return result; } /** * Run the given runnable */ public void run(IRunnableWithProgress runnable, IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { runnable.run(monitor); } } RepositorySorter.java000066400000000000000000000026771203611042400421650ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/repository/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.repository; import org.eclipse.jface.viewers.ViewerSorter; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; public class RepositorySorter extends ViewerSorter { private static final int REPO_ROOT_CATEGORY = 1; private static final int REMOTE_FOLDER_CATEGORY = 2; private static final int REMOTE_FILE_CATEGORY = 3; /* (non-Javadoc) * @see org.eclipse.jface.viewers.ViewerSorter#category(java.lang.Object) */ public int category(Object element) { if (element instanceof ISVNRepositoryLocation) { return REPO_ROOT_CATEGORY; } if (element instanceof ISVNRemoteFolder) { return REMOTE_FOLDER_CATEGORY; } if (element instanceof ISVNRemoteFile) { return REMOTE_FILE_CATEGORY; } return 0; } } 000077500000000000000000000000001203611042400370305ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/repository/modelAllRootsElement.java000066400000000000000000000037161203611042400427530ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/repository/model/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.repository.model; import java.util.Arrays; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.model.IWorkbenchAdapter; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.repo.RepositoryComparator; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; /** * AllRootsElement is the model element for the repositories view. * Its children are the array of all known repository roots. * * Because we extend IAdaptable, we don't need to register this adapter * as we need for RemoteFileElement, RemoteFolderElement ... */ public class AllRootsElement extends SVNModelElement implements IAdaptable { public ImageDescriptor getImageDescriptor(Object object) { return null; } public Object[] internalGetChildren(Object o, IProgressMonitor monitor) { ISVNRepositoryLocation[] locations = SVNUIPlugin.getPlugin().getRepositoryManager().getKnownRepositoryLocations(null); Arrays.sort(locations, new RepositoryComparator()); return locations; } public String getLabel(Object o) { return null; } public Object getAdapter(Class adapter) { if (adapter == IWorkbenchAdapter.class) return this; return null; } public Object getParent(Object o) { return null; } } RemoteContentProvider.java000066400000000000000000000123061203611042400441760ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/repository/model/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.repository.model; import java.util.ArrayList; import org.eclipse.core.resources.IResource; import org.eclipse.jface.viewers.AbstractTreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.progress.DeferredTreeContentManager; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.history.Alias; import org.tigris.subversion.subclipse.core.history.AliasManager; import org.tigris.subversion.subclipse.core.history.Branches; import org.tigris.subversion.subclipse.core.history.Tags; import org.tigris.subversion.subclipse.core.resources.RemoteFolder; /** * Extension to the generic workbench content provider mechanism * to lazily determine whether an element has children. That is, * children for an element aren't fetched until the user clicks * on the tree expansion box. */ public class RemoteContentProvider extends WorkbenchContentProvider { private Branches branches; private Tags tags; private boolean includeBranchesAndTags = true; private RemoteFolder rootFolder; private boolean useDeferredContentManager = true; private DeferredTreeContentManager manager; /* (non-Javadoc) * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) */ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { if (viewer instanceof AbstractTreeViewer) { manager = new DeferredTreeContentManager(this, (AbstractTreeViewer) viewer); } super.inputChanged(viewer, oldInput, newInput); } /* (non-Javadoc) * Method declared on WorkbenchContentProvider. */ public boolean hasChildren(Object element) { if (element == null) { return false; } if (element instanceof Branches || element instanceof Tags) return true; if (element instanceof Alias) return false; if (element instanceof ISVNRepositoryLocation) return true; // the + box will always appear, but then disappear // if not needed after you first click on it. if (element instanceof ISVNRemoteResource) { return ((ISVNRemoteResource)element).isContainer(); } if (manager != null) { if (manager.isDeferredAdapter(element)) return manager.mayHaveChildren(element); } return super.hasChildren(element); } /** * @see org.eclipse.jface.viewers.ITreeContentProvider#getChildren(java.lang.Object) */ public Object[] getChildren(Object parentElement) { if (parentElement instanceof Branches) return ((Branches)parentElement).getBranches(); if (parentElement instanceof Tags) return ((Tags)parentElement).getTags(); if (useDeferredContentManager && manager != null) { Object[] children = manager.getChildren(parentElement); if (children != null) { if (parentElement instanceof ISVNRepositoryLocation && (rootFolder != null || branches != null || tags != null)) { ArrayList childrenArray = new ArrayList(); if (rootFolder != null) childrenArray.add(rootFolder); if (branches != null) childrenArray.add(branches); if (tags != null) childrenArray.add(tags); for (int i = 0; i < children.length; i++) childrenArray.add(children[i]); children = new Object[childrenArray.size()]; childrenArray.toArray(children); } // This will be a placeholder to indicate // that the real children are being fetched return children; } } return super.getChildren(parentElement); } public void setResource(IResource resource) { if (includeBranchesAndTags) { AliasManager tagManager = new AliasManager(resource); Alias[] branchAliases = tagManager.getBranches(); Alias[] tagAliases = tagManager.getTags(); if (branchAliases.length > 0) branches = new Branches(branchAliases); if (tagAliases.length > 0) tags = new Tags(tagAliases); } } public void setIncludeBranchesAndTags(boolean includeBranchesAndTags) { this.includeBranchesAndTags = includeBranchesAndTags; } public void cancelJobs(ISVNRepositoryLocation[] roots) { if (manager != null) { for (int i = 0; i < roots.length; i++) { ISVNRepositoryLocation root = roots[i]; cancelJobs(root); } } } /** * Cancel any jobs that are fetching content from the given location. * @param location */ public void cancelJobs(ISVNRepositoryLocation location) { if (manager != null) { manager.cancel(location); } } public void setRootFolder(RemoteFolder rootFolder) { this.rootFolder = rootFolder; } public void setUseDeferredContentManager(boolean useDeferredContentManager) { this.useDeferredContentManager = useDeferredContentManager; } } RemoteFileElement.java000066400000000000000000000034001203611042400432350ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/repository/model/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.repository.model; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.ui.Policy; public class RemoteFileElement extends SVNModelElement { /** * Initial implementation: return null; */ public Object[] internalGetChildren(Object o, IProgressMonitor monitor) { return new Object[0]; } /** * Initial implementation: return null. */ public ImageDescriptor getImageDescriptor(Object object) { if (!(object instanceof ISVNRemoteFile)) return null; return PlatformUI.getWorkbench().getEditorRegistry().getImageDescriptor(((ISVNRemoteFile)object).getName()); } /** * Initial implementation: return the file's name and version */ public String getLabel(Object o) { if (!(o instanceof ISVNRemoteFile)) return null; ISVNRemoteFile file = (ISVNRemoteFile)o; return Policy.bind("nameAndRevision", file.getName(),file.getLastChangedRevision().toString()); //$NON-NLS-1$ } /** * Return null. */ public Object getParent(Object o) { return null; } } RemoteFolderElement.java000066400000000000000000000101061203611042400435720ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/repository/model/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.repository.model; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.team.core.TeamException; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.progress.IDeferredWorkbenchAdapter; import org.eclipse.ui.progress.IElementCollector; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.operations.FetchMembersOperation; public class RemoteFolderElement extends SVNModelElement implements IDeferredWorkbenchAdapter { /** * Overridden to append the version name to remote folders which * have version tags and are top-level folders. */ public String getLabel(Object o) { if (!(o instanceof ISVNRemoteFolder)) return null; ISVNRemoteFolder folder = (ISVNRemoteFolder)o; return folder.getName(); } public ImageDescriptor getImageDescriptor(Object object) { if (!(object instanceof ISVNRemoteFolder)) return null; return PlatformUI.getWorkbench().getSharedImages().getImageDescriptor(ISharedImages.IMG_OBJ_FOLDER); } /** * @see org.tigris.subversion.subclipse.ui.model.SVNModelElement#internalGetChildren(java.lang.Object, org.eclipse.core.runtime.IProgressMonitor) */ public Object[] internalGetChildren(Object o, IProgressMonitor monitor) throws TeamException { if (!(o instanceof ISVNRemoteFolder)) return new Object[0]; return ((ISVNRemoteFolder)o).members(monitor); } public void fetchDeferredChildren(Object o, IElementCollector collector, IProgressMonitor monitor) { // If it's not a folder, return an empty array if (!(o instanceof ISVNRemoteFolder)) { collector.add(new Object[0], monitor); } try { monitor = Policy.monitorFor(monitor); monitor.beginTask(Policy.bind("RemoteFolderElement_fetchingRemoteMembers.message", getLabel(o)), 100); //$NON-NLS-1$ FetchMembersOperation operation = new FetchMembersOperation(null, (ISVNRemoteFolder)o, collector); operation.run(Policy.subMonitorFor(monitor, 100)); } catch (InvocationTargetException e) { SVNUIPlugin.openError(null, null, null, e); } catch (InterruptedException e) { // Cancelled by the user; } finally { monitor.done(); } } public ISchedulingRule getRule(Object element) { ISVNRepositoryLocation location = getRepositoryLocation(element); return new RepositoryLocationSchedulingRule(location); //$NON-NLS-1$ } protected ISVNRepositoryLocation getRepositoryLocation(Object o) { if (!(o instanceof ISVNRemoteFolder)) return null; return ((ISVNRemoteFolder)o).getRepository(); } public boolean isContainer() { return true; } /** * @see org.tigris.subversion.subclipse.ui.model.SVNModelElement#isNeedsProgress() */ public boolean isNeedsProgress() { return true; } /** * Return null. */ public Object getParent(Object o) { if (!(o instanceof ISVNRemoteFolder)) return null; ISVNRemoteFolder folder = (ISVNRemoteFolder)o; ISVNRemoteFolder parentFolder = folder.getParent(); if (parentFolder != null) return parentFolder; else { return folder.getRepository(); } } } RepositoryLocationSchedulingRule.java000066400000000000000000000024771203611042400464130ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/repository/model/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.repository.model; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; /** * A simple job scheduling rule for serializing jobs for an ICVSRepositoryLocation */ public class RepositoryLocationSchedulingRule implements ISchedulingRule { ISVNRepositoryLocation location; public RepositoryLocationSchedulingRule(ISVNRepositoryLocation location) { this.location = location; } public boolean isConflicting(ISchedulingRule rule) { if(rule instanceof RepositoryLocationSchedulingRule) { return ((RepositoryLocationSchedulingRule)rule).location.equals(location); } return false; } public boolean contains(ISchedulingRule rule) { return isConflicting(rule); } } SVNAdapterFactory.java000066400000000000000000000076011203611042400431760ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/repository/model/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.repository.model; import org.eclipse.core.runtime.IAdapterFactory; import org.eclipse.team.ui.history.IHistoryPageSource; import org.eclipse.ui.model.IWorkbenchAdapter; import org.eclipse.ui.progress.IDeferredWorkbenchAdapter; import org.eclipse.ui.views.properties.IPropertySource; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.ui.history.SVNHistoryPageSource; import org.tigris.subversion.subclipse.ui.repository.properties.SVNRemoteResourcePropertySource; public class SVNAdapterFactory implements IAdapterFactory { private Object fileAdapter = new RemoteFileElement(); private Object folderAdapter = new RemoteFolderElement(); private Object rootAdapter = new SVNRepositoryRootElement(); private Object pageHistoryParticipant = new SVNHistoryPageSource(); // Property cache private Object cachedPropertyObject = null; private Object cachedPropertyValue = null; /** * Method declared on IAdapterFactory. * Get the given adapter for the given object */ public Object getAdapter(Object adaptableObject, Class adapterType) { if (IWorkbenchAdapter.class == adapterType) { return getWorkbenchAdapter(adaptableObject); } if(IDeferredWorkbenchAdapter.class == adapterType) { Object o = getWorkbenchAdapter(adaptableObject); if(o != null && o instanceof IDeferredWorkbenchAdapter) { return o; } return null; } if (IPropertySource.class == adapterType) { return getPropertySource(adaptableObject); } if(IHistoryPageSource.class == adapterType) { return pageHistoryParticipant; } return null; } private Object getWorkbenchAdapter(Object adaptableObject) { if (adaptableObject instanceof ISVNRemoteFile) { return fileAdapter; } else if (adaptableObject instanceof ISVNRepositoryLocation) { return rootAdapter; } else if (adaptableObject instanceof ISVNRemoteFolder) { return folderAdapter; } return null; } /** (Non-javadoc) * Method declared on IAdapterFactory. */ public Class[] getAdapterList() { return new Class[] {IWorkbenchAdapter.class, IPropertySource.class, IDeferredWorkbenchAdapter.class, IHistoryPageSource.class}; } /** * Returns the property source for the given object. Caches * the result because the property sheet is extremely inefficient, * it asks for the source seven times in a row. */ public Object getPropertySource(Object adaptableObject) { if (adaptableObject == cachedPropertyObject) { return cachedPropertyValue; } cachedPropertyObject = adaptableObject; if (adaptableObject instanceof ISVNRemoteResource) { cachedPropertyValue = new SVNRemoteResourcePropertySource((ISVNRemoteResource)adaptableObject); // } else if (adaptableObject instanceof ISVNRepositoryLocation) { // cachedPropertyValue = new SVNRepositoryLocationPropertySource((ISVNRepositoryLocation)adaptableObject); // } else if (adaptableObject instanceof RepositoryRoot) { // cachedPropertyValue = new SVNRepositoryLocationPropertySource(((RepositoryRoot)adaptableObject).getRoot()); } else { cachedPropertyValue = null; } return cachedPropertyValue; } } SVNModelElement.java000066400000000000000000000067771203611042400426550ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/repository/model/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.repository.model; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.operation.IRunnableContext; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.team.core.TeamException; import org.eclipse.ui.model.IWorkbenchAdapter; import org.eclipse.ui.progress.IDeferredWorkbenchAdapter; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; /** * Base class for model elements */ public abstract class SVNModelElement implements IWorkbenchAdapter, IAdaptable { private IRunnableContext runnableContext; public Object getAdapter(Class adapter) { if (adapter == IWorkbenchAdapter.class) return this; if ((adapter == IDeferredWorkbenchAdapter.class) && this instanceof IDeferredWorkbenchAdapter) return this; return null; } /** * Handles exceptions that occur in SVN model elements. */ protected void handle(Throwable t) { SVNUIPlugin.openError(null, null, null, t, SVNUIPlugin.LOG_NONTEAM_EXCEPTIONS); } /** * Gets the children of the receiver by invoking the internalGetChildren. * A appropriate progress indicator will be used if requested. */ public Object[] getChildren(final Object o, boolean needsProgress) { try { if (needsProgress) { final Object[][] result = new Object[1][]; IRunnableWithProgress runnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { try { result[0] = SVNModelElement.this.internalGetChildren(o, monitor); } catch (TeamException e) { throw new InvocationTargetException(e); } } }; getRunnableContext().run(isInterruptable() /*fork*/, isInterruptable() /*cancelable*/, runnable); return result[0]; } else { return internalGetChildren(o, null); } } catch (InterruptedException e) { } catch (InvocationTargetException e) { handle(e); } catch (TeamException e) { handle(e); } return new Object[0]; } /** * Method internalGetChildren. * @param o * @return Object[] */ public abstract Object[] internalGetChildren(Object o, IProgressMonitor monitor) throws TeamException; /** * @see org.eclipse.ui.model.IWorkbenchAdapter#getChildren(java.lang.Object) */ public Object[] getChildren(Object o) { return getChildren(o, isNeedsProgress()); } public boolean isNeedsProgress() { return false; } public boolean isInterruptable() { return false; } /** * Returns the runnableContext. * @return IRunnableContext */ public IRunnableContext getRunnableContext() { if (runnableContext == null) { return new IRunnableContext() { public void run(boolean fork, boolean cancelable, IRunnableWithProgress runnable) throws InvocationTargetException, InterruptedException { SVNUIPlugin.runWithProgress(null, cancelable, runnable); } }; } return runnableContext; } } SVNRepositoryRootElement.java000066400000000000000000000067131203611042400446260ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/repository/model/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.repository.model; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.jobs.ISchedulingRule; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.progress.IDeferredWorkbenchAdapter; import org.eclipse.ui.progress.IElementCollector; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.Policy; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.operations.FetchMembersOperation; /** * RemoteRootElement is the model element for a repository that * appears in the repositories view */ public class SVNRepositoryRootElement extends SVNModelElement implements IDeferredWorkbenchAdapter { public ImageDescriptor getImageDescriptor(Object object) { if (object instanceof ISVNRepositoryLocation /*|| object instanceof RepositoryRoot*/) { return SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_REPOSITORY); } return null; } public String getLabel(Object o) { if (o instanceof ISVNRepositoryLocation) { ISVNRepositoryLocation root = (ISVNRepositoryLocation)o; return root.toString(); } return null; } public Object getParent(Object o) { return null; } public Object[] internalGetChildren(Object o, IProgressMonitor monitor) { ISVNRepositoryLocation location = null; if (o instanceof ISVNRepositoryLocation) { location = (ISVNRepositoryLocation)o; } if (location == null) return null; Object[] result = null; try { result = location.members(monitor); } catch (Exception e) {} return result; } public void fetchDeferredChildren(Object o, IElementCollector collector, IProgressMonitor monitor) { // If it's not a folder, return an empty array if (!(o instanceof ISVNRepositoryLocation)) { collector.add(new Object[0], monitor); } try { monitor = Policy.monitorFor(monitor); monitor.beginTask(Policy.bind("RemoteFolderElement_fetchingRemoteMembers.message", getLabel(o)), 100); //$NON-NLS-1$ FetchMembersOperation operation = new FetchMembersOperation(null, ((ISVNRepositoryLocation)o).getRootFolder(), collector); operation.run(Policy.subMonitorFor(monitor, 100)); } catch (InvocationTargetException e) { SVNUIPlugin.openError(null, null, null, e); } catch (InterruptedException e) { // Cancelled by the user; } finally { monitor.done(); } } public ISchedulingRule getRule(Object element) { ISVNRepositoryLocation location = getRepositoryLocation(element); return new RepositoryLocationSchedulingRule(location); //$NON-NLS-1$ } protected ISVNRepositoryLocation getRepositoryLocation(Object o) { if (!(o instanceof ISVNRepositoryLocation)) return null; return (ISVNRepositoryLocation)o; } public boolean isContainer() { return true; } } SVNSyncAdapterFactory.java000066400000000000000000000012361203611042400440310ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/repository/modelpackage org.tigris.subversion.subclipse.ui.repository.model; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdapterFactory; import org.eclipse.team.ui.synchronize.ISynchronizeModelElement; public class SVNSyncAdapterFactory implements IAdapterFactory { public Object getAdapter(Object adaptableObject, Class adapterType) { if (adaptableObject instanceof ISynchronizeModelElement) { ISynchronizeModelElement modelElement = (ISynchronizeModelElement)adaptableObject; return modelElement.getResource(); } return null; } public Class[] getAdapterList() { return new Class[] { IResource.class }; } } 000077500000000000000000000000001203611042400401245ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/repository/propertiesSVNRemoteResourcePropertySource.java000066400000000000000000000162721203611042400472570ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/repository/properties/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.repository.properties; import org.eclipse.ui.views.properties.IPropertyDescriptor; import org.eclipse.ui.views.properties.IPropertySource; import org.eclipse.ui.views.properties.PropertyDescriptor; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.resources.RemoteFile; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; /** * The property source for SVNRemoteResources. Used for property view when * a remote resource is selected */ public class SVNRemoteResourcePropertySource implements IPropertySource { ISVNRemoteResource resource; // Property Descriptors static protected IPropertyDescriptor[] propertyDescriptors = new IPropertyDescriptor[4]; { PropertyDescriptor descriptor; String category = Policy.bind("svn"); //$NON-NLS-1$ // resource name descriptor = new PropertyDescriptor(ISVNUIConstants.PROP_NAME, Policy.bind("SVNRemoteFilePropertySource.name")); //$NON-NLS-1$ descriptor.setAlwaysIncompatible(true); descriptor.setCategory(category); propertyDescriptors[0] = descriptor; // revision descriptor = new PropertyDescriptor(ISVNUIConstants.PROP_REVISION, Policy.bind("SVNRemoteFilePropertySource.revision")); //$NON-NLS-1$ descriptor.setAlwaysIncompatible(true); descriptor.setCategory(category); propertyDescriptors[1] = descriptor; // date descriptor = new PropertyDescriptor(ISVNUIConstants.PROP_DATE, Policy.bind("SVNRemoteFilePropertySource.date")); //$NON-NLS-1$ descriptor.setAlwaysIncompatible(true); descriptor.setCategory(category); propertyDescriptors[2] = descriptor; // author descriptor = new PropertyDescriptor(ISVNUIConstants.PROP_AUTHOR, Policy.bind("SVNRemoteFilePropertySource.author")); //$NON-NLS-1$ descriptor.setAlwaysIncompatible(true); descriptor.setCategory(category); propertyDescriptors[3] = descriptor; } // Property Descriptors static protected IPropertyDescriptor[] lockPropertyDescriptors = new IPropertyDescriptor[5]; { PropertyDescriptor descriptor; String category = Policy.bind("SVNRemoteFilePropertySource.lock"); //$NON-NLS-1$ // owner descriptor = new PropertyDescriptor(ISVNUIConstants.PROP_LOCK_OWNER, Policy.bind("SVNRemoteFilePropertySource.lock.owner")); //$NON-NLS-1$ descriptor.setAlwaysIncompatible(true); descriptor.setCategory(category); lockPropertyDescriptors[0] = descriptor; // token descriptor = new PropertyDescriptor(ISVNUIConstants.PROP_LOCK_TOKEN, Policy.bind("SVNRemoteFilePropertySource.lock.token")); //$NON-NLS-1$ descriptor.setAlwaysIncompatible(true); descriptor.setCategory(category); lockPropertyDescriptors[1] = descriptor; // comment descriptor = new PropertyDescriptor(ISVNUIConstants.PROP_LOCK_COMMENT, Policy.bind("SVNRemoteFilePropertySource.lock.comment")); //$NON-NLS-1$ descriptor.setAlwaysIncompatible(true); descriptor.setCategory(category); lockPropertyDescriptors[2] = descriptor; // creation date descriptor = new PropertyDescriptor(ISVNUIConstants.PROP_LOCK_CREATION_DATE, Policy.bind("SVNRemoteFilePropertySource.lock.creation.date")); //$NON-NLS-1$ descriptor.setAlwaysIncompatible(true); descriptor.setCategory(category); lockPropertyDescriptors[3] = descriptor; // expiration date descriptor = new PropertyDescriptor(ISVNUIConstants.PROP_LOCK_EXPIRATION_DATE, Policy.bind("SVNRemoteFilePropertySource.lock.expiration.date")); //$NON-NLS-1$ descriptor.setAlwaysIncompatible(true); descriptor.setCategory(category); lockPropertyDescriptors[4] = descriptor; } /** * Create a PropertySource and store its resource */ public SVNRemoteResourcePropertySource(ISVNRemoteResource resource) { this.resource = resource; } /** * Do nothing because properties are read only. */ public Object getEditableValue() { return this; } /** * Return the Property Descriptors for the receiver. */ public IPropertyDescriptor[] getPropertyDescriptors() { if (resource instanceof RemoteFile) { RemoteFile remoteFile = (RemoteFile)resource; if (remoteFile.getLock() != null) { IPropertyDescriptor[] descriptorsWithLocks = new IPropertyDescriptor[9]; descriptorsWithLocks[0] = propertyDescriptors[0]; descriptorsWithLocks[1] = propertyDescriptors[1]; descriptorsWithLocks[2] = propertyDescriptors[2]; descriptorsWithLocks[3] = propertyDescriptors[3]; descriptorsWithLocks[4] = lockPropertyDescriptors[0]; descriptorsWithLocks[5] = lockPropertyDescriptors[1]; descriptorsWithLocks[6] = lockPropertyDescriptors[2]; descriptorsWithLocks[7] = lockPropertyDescriptors[3]; descriptorsWithLocks[8] = lockPropertyDescriptors[4]; return descriptorsWithLocks; } } return propertyDescriptors; } /* * @see IPropertySource#getPropertyValue(Object) */ public Object getPropertyValue(Object id) { if (id.equals(ISVNUIConstants.PROP_NAME)) { return resource.getName(); } if (id.equals(ISVNUIConstants.PROP_REVISION)) { return resource.getLastChangedRevision().toString(); } if (id.equals(ISVNUIConstants.PROP_DATE)) { return resource.getDate(); } if (id.equals(ISVNUIConstants.PROP_AUTHOR)) { return resource.getAuthor(); } if (resource instanceof RemoteFile) { RemoteFile remoteFile = (RemoteFile)resource; if (remoteFile.getLock() != null) { if (id.equals(ISVNUIConstants.PROP_LOCK_OWNER) && remoteFile.getLock().getOwner() != null) { return remoteFile.getLock().getOwner(); } if (id.equals(ISVNUIConstants.PROP_LOCK_TOKEN) && remoteFile.getLock().getToken() != null) { return remoteFile.getLock().getToken(); } if (id.equals(ISVNUIConstants.PROP_LOCK_COMMENT) && remoteFile.getLock().getComment() != null) { return remoteFile.getLock().getComment(); } if (id.equals(ISVNUIConstants.PROP_LOCK_CREATION_DATE) && remoteFile.getLock().getCreationDate() != null) { return remoteFile.getLock().getCreationDate(); } if (id.equals(ISVNUIConstants.PROP_LOCK_EXPIRATION_DATE) && remoteFile.getLock().getExpirationDate() != null) { return remoteFile.getLock().getExpirationDate(); } } } return ""; //$NON-NLS-1$ } /** * Answer true if the value of the specified property * for this object has been changed from the default. */ public boolean isPropertySet(Object property) { return false; } /** * Reset the specified property's value to its default value. * Do nothing because properties are read only. * * @param property The property to reset. */ public void resetPropertyValue(Object property) { } /** * Do nothing because properties are read only. */ public void setPropertyValue(Object name, Object value) { } } 000077500000000000000000000000001203611042400353515ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/settingsCommentProperties.java000066400000000000000000000105261203611042400416770ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/settings/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.settings; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.svnclientadapter.ISVNProperty; public class CommentProperties { private int minimumLogMessageSize; private int logWidthMarker; private String logTemplate; private int minimumLockMessageSize; public CommentProperties() { super(); } public String getLogTemplate() { return logTemplate; } public void setLogTemplate(String logTemplate) { this.logTemplate = logTemplate; } public int getLogWidthMarker() { return logWidthMarker; } public void setLogWidthMarker(int logWidthMarker) { this.logWidthMarker = logWidthMarker; } public int getMinimumLogMessageSize() { return minimumLogMessageSize; } public void setMinimumLogMessageSize(int minimumLogMessageSize) { this.minimumLogMessageSize = minimumLogMessageSize; } public int getMinimumLockMessageSize() { return minimumLockMessageSize; } public void setMinimumLockMessageSize(int minimumLockMessageSize) { this.minimumLockMessageSize = minimumLockMessageSize; } public static CommentProperties getCommentProperties(IResource resource) throws SVNException { CommentProperties properties = null; ISVNProperty sizeProperty = null; ISVNProperty lockSizeProperty = null; ISVNProperty widthProperty = null; ISVNProperty templateProperty = null; IResource parent = resource; while (parent != null) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(parent); if (svnResource.isManaged()) { if (properties == null) { properties = new CommentProperties(); } if (sizeProperty == null) { sizeProperty = svnResource.getSvnProperty("tsvn:logminsize"); //$NON-NLS-1$ } if (lockSizeProperty == null) { lockSizeProperty = svnResource.getSvnProperty("tsvn:lockmsgminsize"); //$NON-NLS-1$ } if (widthProperty == null) { widthProperty = svnResource.getSvnProperty("tsvn:logwidthmarker"); //$NON-NLS-1$ } if (templateProperty == null) { templateProperty = svnResource.getSvnProperty("tsvn:logtemplate"); //$NON-NLS-1$ } } if (parent instanceof IProject) { break; } if (sizeProperty != null && lockSizeProperty != null && widthProperty != null && templateProperty != null) { break; } parent = parent.getParent(); } if (properties != null) { if (sizeProperty != null) { int minSize = 0; try { minSize = Integer.parseInt(sizeProperty.getValue()); } catch (Exception e) {} properties.setMinimumLogMessageSize(minSize); } if (lockSizeProperty != null) { int minSize = 0; try { minSize = Integer.parseInt(lockSizeProperty.getValue()); } catch (Exception e) {} properties.setMinimumLockMessageSize(minSize); } if (widthProperty != null) { int width = 0; try { width = Integer.parseInt(widthProperty.getValue()); } catch (Exception e) {} properties.setLogWidthMarker(width); } if (templateProperty != null) { properties.setLogTemplate(templateProperty.getValue()); } } return properties; } } ProjectProperties.java000066400000000000000000000364561203611042400417150ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/settings/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.settings; import java.io.File; import java.util.ArrayList; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.eclipse.core.resources.IResource; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.util.LinkList; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNProperty; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNUrl; public class ProjectProperties { protected String label = "Issue Number:"; //$NON-NLS-1$ protected String message; protected boolean number = false; protected String url; protected boolean warnIfNoIssue = false; protected boolean append = true; protected String logregex; private static final String URL = "://"; //$NON-NLS-1$ public ProjectProperties() { super(); } public boolean isAppend() { return append; } public void setAppend(boolean append) { this.append = append; } public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } public String getMessage() { return message; } public void setMessage(String message) { this.message = message; } public boolean isNumber() { return number; } public void setNumber(boolean number) { this.number = number; } public String getUrl() { return url; } public void setUrl(String url) { this.url = url; } public boolean isWarnIfNoIssue() { return warnIfNoIssue; } public void setWarnIfNoIssue(boolean warnIfNoIssue) { this.warnIfNoIssue = warnIfNoIssue; } public String getLogregex() { return logregex; } public void setLogregex(String logregex) { this.logregex = logregex; } public String getResolvedMessage(String issue) { if (message == null) return null; return message.replaceAll("%BUGID%", issue); //$NON-NLS-1$ } public String getResolvedUrl(String issue) { if (url == null) return null; return url.replaceAll("%BUGID%", issue); //$NON-NLS-1$ } // Retrieve hyperlink ranges and url's from commit message. public LinkList getLinkList(String commitMessage) { ArrayList links = new ArrayList(); ArrayList urls = new ArrayList(); ArrayList texts = new ArrayList(); String bugID = "%BUGID%"; //$NON-NLS-1$ if( logregex != null ) { String[] resplit = logregex.split("\n"); String re1 = resplit[0].trim(); String re2 = resplit.length > 1 ? resplit[1].trim() : null; Pattern pre1 = Pattern.compile(re1); Matcher matcher1 = pre1.matcher(commitMessage); if (re2 == null) { while (matcher1.find()) { for (int i = 0; i < matcher1.groupCount(); i++) { int range[] = {matcher1.start(i+1), matcher1.end(i+1)-matcher1.start(i+1)}; String url = getResolvedUrl(matcher1.group(i+1)); if ((url != null) && (url.trim().length() > 0)) { links.add(range); urls.add(url); texts.add(matcher1.group(i+1)); } } } } else { Pattern pre2 = Pattern.compile(re2); while (matcher1.find()) { Matcher matcher2 = pre2.matcher(matcher1.group()); while (matcher2.find()) { for (int i = 0; i < matcher2.groupCount(); i++) { int range[] = {matcher2.start(i+1) + matcher1.start(), matcher2.end(i+1)-matcher2.start(i+1)}; String url = getResolvedUrl(matcher2.group(i+1)); if ((url != null) && (url.trim().length() > 0)) { links.add(range); urls.add(url); texts.add(matcher2.group(i+1)); } } } } } } else if (message != null) { int index = message.indexOf(bugID); if (index != -1) { String remainder = null; if (message.length() > index + bugID.length()) remainder = message.substring(index + bugID.length()); else remainder = ""; String tag = message.substring(0, index); index = commitMessage.indexOf(tag); if (index != -1) { index = index + tag.length(); int start = index; StringBuffer issue = new StringBuffer(); while (index < commitMessage.length()) { if (commitMessage.substring(index, index + 1).equals(",")) { //$NON-NLS-1$ int range[] = {start, issue.length()}; String url = getResolvedUrl(issue.toString()); if ((url != null) && (url.trim().length() > 0)) { links.add(range); urls.add(url); } start = index + 1; issue = new StringBuffer(); } else { if (commitMessage.substring(index, index + 1).equals("\n") || commitMessage.substring(index, index + 1).equals("\r")) break; //$NON-NLS-1$ //$NON-NLS-2$ if (commitMessage.substring(index).trim().equals(remainder.trim())) break; if (commitMessage.substring(index).startsWith(remainder + "\n")) break; if (commitMessage.substring(index, index + 1).equals(" ")) { int lineIndex = commitMessage.indexOf("\n", index); if (lineIndex == -1) lineIndex = commitMessage.indexOf("\r", index); if (lineIndex != -1) { if (commitMessage.substring(index, lineIndex - 1).trim().length() == 0) break; } } issue.append(commitMessage.substring(index, index + 1)); } index++; } int range[] = {start, issue.length()}; String url = getResolvedUrl(issue.toString()); if ((url != null) && (url.trim().length() > 0)) { links.add(range); urls.add(url); texts.add(issue.toString()); } } } } LinkList urlLinks = getUrls(commitMessage); int[][] urlRanges = urlLinks.getLinkRanges(); String[] urlUrls = urlLinks.getUrls(); for (int i = 0; i < urlRanges.length; i++) { links.add(urlRanges[i]); urls.add(urlUrls[i]); } int[][] linkRanges = new int[links.size()][2]; links.toArray(linkRanges); String[] urlArray = new String[urls.size()]; urls.toArray(urlArray); String[] textArray = new String[texts.size()]; texts.toArray(textArray); LinkList linkList = new LinkList(linkRanges, urlArray, textArray); return linkList; } public static LinkList getUrls(String s) { int max = 0; int i = -1; if (s != null) { max = s.length(); i = s.indexOf(URL); } ArrayList linkRanges = new ArrayList(); ArrayList links = new ArrayList(); while (i != -1) { while (i != -1) { if (Character.isWhitespace(s.charAt(i)) || s.substring(i, i + 1).equals("\n")) { //$NON-NLS-1$ i++; break; } i--; } int start = (i < 0) ? 0 : i; // look for the first whitespace character boolean found = false; i += URL.length(); while (!found && i < max) { found = (Character.isWhitespace(s.charAt(i)) || s.substring(i, i + 1).equals("\n")); //$NON-NLS-1$ i++; } if (i!=max) i--; linkRanges.add(new int[] {start, i - start}); links.add(s.substring(start, i)); i = s.indexOf(URL, i); } return new LinkList( (int[][])linkRanges.toArray(new int[linkRanges.size()][2]), (String[])links.toArray(new String[links.size()]), null); } // Return error message if there are any problems with the issue that was entered. public String validateIssue(String issue) { if (number) { if (!hasOnlyDigits(issue)) return Policy.bind("CommitDialog.number", label); //$NON-NLS-1$ } return null; } // Helper method to test for all numerics and commas. private boolean hasOnlyDigits(String s) { for (int i=0; i 0) proposedComment = proposedComment + System.getProperty("line.separator"); //$NON-NLS-1$ return proposedComment + set.getComment(); } } IDiffContainer parent = synchronizeModelElement.getParent(); while (parent != null) { if (parent instanceof ChangeSetDiffNode) { ChangeSet set = ((ChangeSetDiffNode)parent).getSet(); if (!changeSets.contains(set)) { changeSets.add(set); if (proposedComment.length() > 0) proposedComment = proposedComment + System.getProperty("line.separator"); //$NON-NLS-1$ return proposedComment + set.getComment(); } else parent = parent.getParent(); } else parent = parent.getParent(); } return proposedComment; } } CommitSynchronizeOperation.java000066400000000000000000000353551203611042400440770ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriber/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.subscriber; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.synchronize.SyncInfoSet; import org.eclipse.team.internal.core.subscribers.ActiveChangeSet; import org.eclipse.team.internal.core.subscribers.ChangeSet; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.core.util.File2Resource; import org.tigris.subversion.subclipse.core.util.Util; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.dialogs.CommitToTagsWarningDialog; import org.tigris.subversion.subclipse.ui.operations.CommitOperation; import org.tigris.subversion.subclipse.ui.settings.ProjectProperties; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardCommitPage; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardDialog; /** * Sync view operation for putting file system resources */ public class CommitSynchronizeOperation extends SVNSynchronizeOperation { private String commitComment; private IResource[] resourcesToCommit; private String url; private ChangeSet changeSet; private boolean commit; private boolean keepLocks; private String proposedComment; private ISynchronizePageConfiguration configuration; protected CommitSynchronizeOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements, String url, String proposedComment) { super(configuration, elements); this.configuration = configuration; this.url = url; this.proposedComment = proposedComment; } private boolean confirmCommit(SyncInfoSet set) { commit = false; IResource[] modified = set.getResources(); List conflictFiles = new ArrayList(); List filteredModified = new ArrayList(); boolean switched = false; for (int i = 0; i < modified.length; i++) { IResource resource = modified[i]; filteredModified.add(resource); if (!(resource instanceof IContainer)) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); try { if (svnResource.isManaged() && svnResource.getStatus().isTextConflicted()) { IFile conflictNewFile = (IFile) File2Resource .getResource(svnResource.getStatus() .getConflictNew()); if (conflictNewFile != null) conflictFiles.add(conflictNewFile); IFile conflictOldFile = (IFile) File2Resource .getResource(svnResource.getStatus() .getConflictOld()); if (conflictOldFile != null) conflictFiles.add(conflictOldFile); IFile conflictWorkingFile = (IFile) File2Resource .getResource(svnResource.getStatus() .getConflictWorking()); if (conflictWorkingFile != null) conflictFiles.add(conflictWorkingFile); } if (svnResource.getStatus().isSwitched()) { url = svnResource.getStatus().getUrlString(); switched = true; } } catch (SVNException e) {} } } if (switched && modified.length > 1) { url = null; } if (conflictFiles.size() > 0) { Iterator iter = conflictFiles.iterator(); while (iter.hasNext()) { IFile conflictFile = (IFile)iter.next(); filteredModified.remove(conflictFile); } modified = new IResource[filteredModified.size()]; filteredModified.toArray(modified); } if (modified.length > 0) { try { IPreferenceStore preferenceStore = SVNUIPlugin.getPlugin().getPreferenceStore(); boolean commitToTagsPathWithoutWarning = preferenceStore.getBoolean(ISVNUIConstants.PREF_COMMIT_TO_TAGS_PATH_WITHOUT_WARNING); if (!commitToTagsPathWithoutWarning && onTagPath(modified)) { commit = true; getShell().getDisplay().syncExec(new Runnable() { public void run() { CommitToTagsWarningDialog dialog = new CommitToTagsWarningDialog(getShell()); commit = dialog.open() == CommitToTagsWarningDialog.OK; } }); if (!commit) { return false; } } ProjectProperties projectProperties = ProjectProperties.getProjectProperties(modified[0]); SvnWizardCommitPage commitPage = new SvnWizardCommitPage(modified, url, projectProperties, new HashMap(), changeSet, true); if (proposedComment == null || proposedComment.length() == 0) commitPage.setComment(getProposedComment(modified)); else commitPage.setComment(proposedComment); commitPage.setSyncInfoSet(set); SvnWizard wizard = new SvnWizard(commitPage); final SvnWizardDialog dialog = new SvnWizardDialog(getShell(), wizard); wizard.setParentDialog(dialog); getShell().getDisplay().syncExec(new Runnable() { public void run() { commit = (dialog.open() == SvnWizardDialog.OK); } }); if (commit) { resourcesToCommit = commitPage.getSelectedResources(); keepLocks = commitPage.isKeepLocks(); } commitComment = commitPage.getComment(); } catch (SVNException e) { if (!e.operationInterrupted()) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } } return commit; } /* (non-Javadoc) * @see org.eclipse.team.examples.filesystem.ui.FileSystemSynchronizeOperation#promptForConflictHandling(org.eclipse.swt.widgets.Shell, org.eclipse.team.core.synchronize.SyncInfoSet) */ protected boolean promptForConflictHandling(Shell shell, SyncInfoSet syncSet) { return true; } /* * Get a proposed comment by looking at the active change sets */ private String getProposedComment(IResource[] resourcesToCommit) { StringBuffer comment = new StringBuffer(); ChangeSet[] sets = SVNProviderPlugin.getPlugin().getChangeSetManager().getSets(); int numMatchedSets = 0; for (int i = 0; i < sets.length; i++) { ChangeSet set = sets[i]; if (isUserSet(set) && containsOne(set, resourcesToCommit)) { if(numMatchedSets > 0) comment.append(System.getProperty("line.separator")); //$NON-NLS-1$ comment.append(set.getComment()); numMatchedSets++; } } return comment.toString(); } private boolean isUserSet(ChangeSet set) { if (set instanceof ActiveChangeSet) { ActiveChangeSet acs = (ActiveChangeSet) set; return acs.isUserCreated(); } return false; } private boolean containsOne(ChangeSet set, IResource[] resourcesToCommit) { for (int j = 0; j < resourcesToCommit.length; j++) { IResource resource = resourcesToCommit[j]; if (set.contains(resource)) { return true; } if (set instanceof ActiveChangeSet) { ActiveChangeSet acs = (ActiveChangeSet) set; if (acs.getDiffTree().members(resource).length > 0) return true; } } return false; } /** * Prompts the user to determine how conflicting changes should be handled. * Note: This method is designed to be overridden by test cases. * @return 0 to sync conflicts, 1 to sync all non-conflicts, 2 to cancel */ private int promptForConflicts(Shell shell, SyncInfoSet syncSet) { String[] buttons = new String[] {IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL}; String title = Policy.bind("SyncAction.commit.conflict.title"); //$NON-NLS-1$ String question = Policy.bind("SyncAction.commit.conflict.question"); //$NON-NLS-1$ final MessageDialog dialog = new MessageDialog(shell, title, null, question, MessageDialog.QUESTION, buttons, 0); shell.getDisplay().syncExec(new Runnable() { public void run() { dialog.open(); } }); return dialog.getReturnCode(); } // private IResource[] getUnaddedResources(SyncInfoSet set) { // IResource[] resources = set.getResources(); // List result = new ArrayList(); // for (int i = 0; i < resources.length; i++) { // IResource resource = resources[i]; // if (isAdded(resource)) { // result.add(resource); // } // } // return (IResource[]) result.toArray(new IResource[result.size()]); // } // private boolean isAdded(IResource resource) { // ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); // try { // if (svnResource.isIgnored()) // return false; // // visit the children of shared resources // if (svnResource.isManaged()) // return false; // if ((resource.getType() == IResource.FOLDER) && isSymLink(resource)) // don't traverse into symlink folders // return false; // } catch (SVNException e) { // SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); // return false; // } // return true; // } // private boolean isSymLink(IResource resource) { // File file = resource.getLocation().toFile(); // try { // if (!file.exists()) // return true; // else { // String cnnpath = file.getCanonicalPath(); // String abspath = file.getAbsolutePath(); // return !abspath.equals(cnnpath); // } // } catch(IOException ex) { // return true; // } // } public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { // First, ask the user if they want to include conflicts SyncInfoSet syncSet = getSyncInfoSet(); if (!promptForConflictHandling(getShell(), syncSet)) return; // Divide the sync info by project final Map projectSyncInfos = getProjectSyncInfoSetMap(syncSet); Iterator iter = projectSyncInfos.keySet().iterator(); final IProject project = (IProject) iter.next(); SVNTeamProvider provider = (SVNTeamProvider)RepositoryProvider.getProvider(project, SVNUIPlugin.PROVIDER_ID); monitor.beginTask(null, projectSyncInfos.size() * 100); run(provider, syncSet, Policy.subMonitorFor(monitor,100)); monitor.done(); } /* (non-Javadoc) * @see org.eclipse.team.examples.filesystem.ui.FileSystemSynchronizeOperation#run(org.eclipse.team.examples.filesystem.FileSystemProvider, org.eclipse.team.core.synchronize.SyncInfoSet, org.eclipse.core.runtime.IProgressMonitor) */ protected void run(SVNTeamProvider provider, SyncInfoSet set, IProgressMonitor monitor) { if (set.hasConflicts() || set.hasIncomingChanges()) { switch (promptForConflicts(getShell(), set)) { case 0: // Yes, commit non-conflicts set.removeConflictingNodes(); set.removeIncomingNodes(); break; case 1: // No, stop here return; default: return; } } if (confirmCommit(set)) { final IResource[][] resourcesToBeAdded = new IResource[][] { null }; final IResource[][] resourcesToBeDeleted = new IResource[][] { null }; List toBeAddedList = new ArrayList(); List toBeDeletedList = new ArrayList(); for (int i = 0; i < resourcesToCommit.length; i++) { IResource resource = resourcesToCommit[i]; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); try { if (!svnResource.isManaged()) toBeAddedList.add(resource); if (svnResource.getStatus().isMissing()) toBeDeletedList.add(resource); } catch (SVNException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } resourcesToBeAdded[0] = new IResource[toBeAddedList.size()]; toBeAddedList.toArray(resourcesToBeAdded[0]); resourcesToBeDeleted[0] = new IResource[toBeDeletedList.size()]; toBeDeletedList.toArray(resourcesToBeDeleted[0]); try { CommitOperation commit = new CommitOperation(getPart(), resourcesToCommit, resourcesToBeAdded[0], resourcesToBeDeleted[0], resourcesToCommit, commitComment, keepLocks); commit.run(); } catch (InvocationTargetException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } catch (InterruptedException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } } public void setChangeSet(ChangeSet changeSet) { this.changeSet = changeSet; } private boolean onTagPath(IResource[] modifiedResources) throws SVNException { // Multiple resources selected. if (url == null) { IResource resource = modifiedResources[0]; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); String firstUrl = svnResource.getStatus().getUrlString(); if ((firstUrl == null) || (resource.getType() == IResource.FILE)) firstUrl = Util.getParentUrl(svnResource); if (firstUrl.indexOf("/tags/") != -1) return true; //$NON-NLS-1$ } // One resource selected. else if (url.indexOf("/tags/") != -1) return true; //$NON-NLS-1$ return false; } } EditConflictsSynchronizeAction.java000066400000000000000000000052761203611042400446550ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriber/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.subscriber; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.team.core.synchronize.FastSyncInfoFilter; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.ui.synchronize.ISynchronizeModelElement; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizeModelAction; import org.eclipse.team.ui.synchronize.SynchronizeModelOperation; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; public class EditConflictsSynchronizeAction extends SynchronizeModelAction { public EditConflictsSynchronizeAction(String text, ISynchronizePageConfiguration configuration) { super(text, configuration); } /* (non-Javadoc) * @see org.eclipse.team.ui.synchronize.SynchronizeModelAction#getSyncInfoFilter() */ protected FastSyncInfoFilter getSyncInfoFilter() { return new FastSyncInfoFilter() { public boolean select(SyncInfo info) { IStructuredSelection selection = getStructuredSelection(); if (selection.size() != 1) return false; ISynchronizeModelElement element = (ISynchronizeModelElement)selection.getFirstElement(); IResource resource = element.getResource(); if (resource == null) return false; if (!(resource instanceof IFile)) return false; ISVNLocalResource svnResource = SVNWorkspaceRoot .getSVNResourceFor(resource); try { return svnResource.getStatus().isTextConflicted(); } catch (SVNException e) { return false; } } }; } protected SynchronizeModelOperation getSubscriberOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements) { return new EditConflictsSynchronizeOperation(configuration, elements); } } EditConflictsSynchronizeOperation.java000066400000000000000000000251111203611042400453660ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriber/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.subscriber; import java.io.File; import java.lang.reflect.InvocationTargetException; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.CompareUI; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.preference.IPreferenceStore; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.synchronize.SyncInfoSet; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.core.util.File2Resource; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.conflicts.ConflictsCompareInput; import org.tigris.subversion.svnclientadapter.utils.Command; public class EditConflictsSynchronizeOperation extends SVNSynchronizeOperation { public final static int PROGRESS_DIALOG = 1; public final static int PROGRESS_BUSYCURSOR = 2; public EditConflictsSynchronizeOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements) { super(configuration, elements); } protected boolean promptForConflictHandling(Shell shell, SyncInfoSet syncSet) { return true; } protected void run(SVNTeamProvider provider, SyncInfoSet set, IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { IResource[] resources = set.getResources(); if (resources[0] instanceof IFile) { final IFile resource = (IFile)resources[0]; run(new WorkspaceModifyOperation() { public void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException { ISVNLocalResource svnResource = SVNWorkspaceRoot .getSVNResourceFor(resource); try { IFile conflictNewFile = (IFile) File2Resource .getResource(svnResource.getStatus() .getConflictNew()); IFile conflictOldFile = (IFile) File2Resource .getResource(svnResource.getStatus() .getConflictOld()); IFile conflictWorkingFile = (IFile) File2Resource .getResource(svnResource.getStatus() .getConflictWorking()); if (conflictWorkingFile == null) { conflictWorkingFile = resource; } IPreferenceStore preferenceStore = SVNUIPlugin.getPlugin() .getPreferenceStore(); if (preferenceStore .getBoolean(ISVNUIConstants.PREF_MERGE_USE_EXTERNAL)) { editConflictsExternal(resource, conflictOldFile, conflictWorkingFile, conflictNewFile); } else { editConflictsInternal(resource, conflictOldFile, conflictWorkingFile, conflictNewFile); } } catch (SVNException e) { throw new InvocationTargetException(e); } } }, false /* cancelable */, PROGRESS_BUSYCURSOR); } } /** * edit the conflicts using built-in merger * * @param resource * @param conflictOldFile * @param conflictWorkingFile * @param conflictNewFile * @throws InvocationTargetException */ private void editConflictsInternal(IFile resource, IFile conflictOldFile, IFile conflictWorkingFile, IFile conflictNewFile) throws InvocationTargetException, InterruptedException { CompareConfiguration cc = new CompareConfiguration(); final ConflictsCompareInput fInput = new ConflictsCompareInput(cc); fInput.setResources(conflictOldFile, conflictWorkingFile, conflictNewFile, (IFile) resource); getShell().getDisplay().syncExec(new Runnable() { public void run() { CompareUI.openCompareEditorOnPage(fInput, getPart().getSite().getPage()); } }); } /** * edit the conflicts using an external merger * * @param resource * @param conflictOldFile * @param conflictWorkingFile * @param conflictNewFile * @throws InvocationTargetException */ private void editConflictsExternal(final IFile resource, IFile conflictOldFile, IFile conflictWorkingFile, IFile conflictNewFile) throws CoreException, InvocationTargetException, InterruptedException { IPreferenceStore preferenceStore = SVNUIPlugin.getPlugin() .getPreferenceStore(); String mergeProgramLocation = preferenceStore .getString(ISVNUIConstants.PREF_MERGE_PROGRAM_LOCATION); String mergeProgramParameters = preferenceStore .getString(ISVNUIConstants.PREF_MERGE_PROGRAM_PARAMETERS); if (mergeProgramLocation.equals("")) { //$NON-NLS-1$ throw new SVNException(Policy .bind("EditConflictsAction.noMergeProgramConfigured")); //$NON-NLS-1$ } File mergeProgramFile = new File(mergeProgramLocation); if (!mergeProgramFile.exists()) { throw new SVNException(Policy .bind("EditConflictsAction.mergeProgramDoesNotExist")); //$NON-NLS-1$ } final Command command = new Command(mergeProgramLocation); String[] parameters = mergeProgramParameters.split(" "); for (int i = 0; i < parameters.length; i++) { parameters[i] = replaceParameter(parameters[i], "${theirs}", //$NON-NLS-1$ conflictNewFile.getLocation().toFile() .getAbsolutePath()); parameters[i] = replaceParameter(parameters[i], "${yours}", //$NON-NLS-1$ conflictWorkingFile.getLocation().toFile() .getAbsolutePath()); parameters[i] = replaceParameter(parameters[i], "${base}", //$NON-NLS-1$ conflictOldFile.getLocation().toFile() .getAbsolutePath()); parameters[i] = replaceParameter(parameters[i], "${merged}", //$NON-NLS-1$ resource.getLocation().toFile().getAbsolutePath()); } command.setParameters(parameters); getShell().getDisplay().syncExec(new Runnable() { public void run() { try { command.exec(); command.waitFor(); resource.refreshLocal(IResource.DEPTH_ZERO, null); } catch (Exception e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } }); } final protected void run(final IRunnableWithProgress runnable, boolean cancelable, int progressKind) throws InvocationTargetException, InterruptedException { final Exception[] exceptions = new Exception[] {null}; // Ensure that no repository view refresh happens until after the action final IRunnableWithProgress innerRunnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { SVNUIPlugin.getPlugin().getRepositoryManager().run(runnable, monitor); } }; switch (progressKind) { case PROGRESS_BUSYCURSOR : BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { try { innerRunnable.run(new NullProgressMonitor()); } catch (InvocationTargetException e) { exceptions[0] = e; } catch (InterruptedException e) { exceptions[0] = e; } } }); break; case PROGRESS_DIALOG : default : new ProgressMonitorDialog(getShell()).run(true, cancelable,/*cancelable, true, */innerRunnable); break; } if (exceptions[0] != null) { if (exceptions[0] instanceof InvocationTargetException) throw (InvocationTargetException)exceptions[0]; else throw (InterruptedException)exceptions[0]; } } private String replaceParameter(String input, String pattern, String value) { StringBuffer result = new StringBuffer(); //startIdx and idxOld delimit various chunks of input; these //chunks always end where pattern begins int startIdx = 0; int idxOld = 0; while ((idxOld = input.indexOf(pattern, startIdx)) >= 0) { //grab a part of input which does not include pattern result.append( input.substring(startIdx, idxOld) ); //add value to take place of pattern result.append( value ); //reset the startIdx to just after the current match, to see //if there are any further matches startIdx = idxOld + pattern.length(); } //the final chunk will go to the end of input result.append( input.substring(startIdx) ); return result.toString(); } } GenerateDiffFileSynchronizeAction.java000066400000000000000000000035441203611042400452420ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriberpackage org.tigris.subversion.subclipse.ui.subscriber; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IResource; import org.eclipse.team.core.synchronize.FastSyncInfoFilter; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.core.synchronize.FastSyncInfoFilter.SyncInfoDirectionFilter; import org.eclipse.team.ui.synchronize.ISynchronizeModelElement; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizeModelAction; import org.eclipse.team.ui.synchronize.SynchronizeModelOperation; public class GenerateDiffFileSynchronizeAction extends SynchronizeModelAction { public GenerateDiffFileSynchronizeAction(String text, ISynchronizePageConfiguration configuration) { super(text, configuration); } protected FastSyncInfoFilter getSyncInfoFilter() { return new SyncInfoDirectionFilter(new int[] {SyncInfo.OUTGOING, SyncInfo.CONFLICTING }); } protected SynchronizeModelOperation getSubscriberOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements) { List selectedResources = new ArrayList(); Iterator iter = getStructuredSelection().iterator(); while(iter.hasNext()) { ISynchronizeModelElement element = (ISynchronizeModelElement)iter.next(); IResource resource = element.getResource(); selectedResources.add(resource); } IResource[] resourceArray = new IResource[selectedResources.size()]; selectedResources.toArray(resourceArray); GenerateDiffFileSynchronizeOperation generateDiffFileSynchronizeOperation = new GenerateDiffFileSynchronizeOperation(configuration, elements); generateDiffFileSynchronizeOperation.setSelectedResources(resourceArray); return generateDiffFileSynchronizeOperation; } } GenerateDiffFileSynchronizeOperation.java000066400000000000000000000115101203611042400457550ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriberpackage org.tigris.subversion.subclipse.ui.subscriber; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.core.synchronize.SyncInfoSet; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.wizards.WizardDialogWithPersistedLocation; import org.tigris.subversion.subclipse.ui.wizards.generatediff.GenerateDiffFileWizard; import org.tigris.subversion.svnclientadapter.SVNStatusKind; public class GenerateDiffFileSynchronizeOperation extends SVNSynchronizeOperation { private ArrayList unaddedList; private IResource[] selectedResources; public GenerateDiffFileSynchronizeOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements) { super(configuration, elements); } public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { SyncInfoSet syncSet = getSyncInfoSet(); final Map projectSyncInfos = getProjectSyncInfoSetMap(syncSet); Iterator iter = projectSyncInfos.keySet().iterator(); final IProject project = (IProject) iter.next(); SVNTeamProvider provider = (SVNTeamProvider)RepositoryProvider.getProvider(project, SVNUIPlugin.PROVIDER_ID); monitor.beginTask(null, projectSyncInfos.size() * 100); run(provider, syncSet, Policy.subMonitorFor(monitor,100)); monitor.done(); } protected boolean promptForConflictHandling(Shell shell, SyncInfoSet syncSet) { return true; } protected void run(SVNTeamProvider provider, SyncInfoSet set, IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { IResource[] resources = set.getResources(); HashMap statusMap = new HashMap(); unaddedList = new ArrayList(); for (int i = 0; i < resources.length; i++) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resources[i]); SyncInfo syncInfo = set.getSyncInfo(resources[i]); SVNStatusKind statusKind = null; try { if (!svnResource.isManaged()) { statusKind = SVNStatusKind.UNVERSIONED; } else { switch (SyncInfo.getChange(syncInfo.getKind())) { case SyncInfo.ADDITION: statusKind = SVNStatusKind.ADDED; break; case SyncInfo.DELETION: statusKind = SVNStatusKind.DELETED; break; case SyncInfo.CONFLICTING: statusKind = SVNStatusKind.CONFLICTED; break; default: statusKind = SVNStatusKind.MODIFIED; break; } } statusMap.put(resources[i], statusKind); if (!svnResource.isManaged() && !svnResource.isIgnored()) unaddedList.add(resources[i]); } catch (SVNException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } ArrayList dedupedList = new ArrayList(); Iterator iter = unaddedList.iterator(); while (iter.hasNext()) { IResource resource = (IResource)iter.next(); if (!isDupe(resource)) dedupedList.add(resource); } IResource[] unversionedResources = new IResource[dedupedList.size()]; dedupedList.toArray(unversionedResources); GenerateDiffFileWizard wizard = new GenerateDiffFileWizard(new StructuredSelection(resources), unversionedResources, statusMap); wizard.setWindowTitle(Policy.bind("GenerateSVNDiff.title")); //$NON-NLS-1$ wizard.setSelectedResources(selectedResources); // final WizardDialog dialog = new WizardDialog(getShell(), wizard); // dialog.setMinimumPageSize(350, 250); final WizardDialog dialog = new WizardDialogWithPersistedLocation(getShell(), wizard, "GenerateDiffFileWizard"); //$NON-NLS-1$ dialog.setMinimumPageSize(350, 250); getShell().getDisplay().syncExec(new Runnable() { public void run() { dialog.open(); } }); } private boolean isDupe(IResource resource) { IResource parent = resource; while (parent != null) { parent = parent.getParent(); if (unaddedList.contains(parent)) return true; } return false; } public void setSelectedResources(IResource[] selectedResources) { this.selectedResources = selectedResources; } } IgnoreSynchronizeAction.java000066400000000000000000000073141203611042400433410ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriber/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.subscriber; import java.util.ArrayList; import java.util.Iterator; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.team.core.synchronize.FastSyncInfoFilter; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.ui.synchronize.ISynchronizeModelElement; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizeModelAction; import org.eclipse.team.ui.synchronize.SynchronizeModelOperation; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; /** * @author Martin Letenay (letenay at tigris dot org) */ public class IgnoreSynchronizeAction extends SynchronizeModelAction { public IgnoreSynchronizeAction(String text, ISynchronizePageConfiguration configuration) { super(text, configuration); } /* (non-Javadoc) * @see org.eclipse.team.ui.synchronize.SynchronizeModelAction#getSyncInfoFilter() */ protected FastSyncInfoFilter getSyncInfoFilter() { return new FastSyncInfoFilter() { public boolean select(SyncInfo info) { SyncInfoDirectionFilter filter = new SyncInfoDirectionFilter(new int[] {SyncInfo.OUTGOING}); if (!filter.select(info)) return false; IStructuredSelection selection = getStructuredSelection(); ISynchronizeModelElement element = (ISynchronizeModelElement)selection.getFirstElement(); IResource resource = element.getResource(); if (resource == null) return false; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); try { //If the resource is a IProject then the action should not be enabled. if( svnResource.getIResource() instanceof IProject) return false; // If the parent is not managed there is no way to set the svn:ignore property if (!svnResource.getParent().isManaged()) { return false; } return !svnResource.getStatus().isManaged() && resource.exists(); } catch (SVNException e) { return false; } } }; } protected SynchronizeModelOperation getSubscriberOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements) { ArrayList selectedElements = new ArrayList(); IStructuredSelection selection = getStructuredSelection(); Iterator iter = selection.iterator(); while (iter.hasNext()) { ISynchronizeModelElement synchronizeModelElement = (ISynchronizeModelElement)iter.next(); IResource resource = synchronizeModelElement.getResource(); selectedElements.add(resource); } IResource[] resources = new IResource[selectedElements.size()]; selectedElements.toArray(resources); return new IgnoreSynchronizeOperation(configuration, elements, resources); } } IgnoreSynchronizeOperation.java000066400000000000000000000041601203611042400440600ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriber/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.subscriber; import java.lang.reflect.InvocationTargetException; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.synchronize.SyncInfoSet; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.ui.dialogs.IgnoreResourcesDialog; import org.tigris.subversion.subclipse.ui.operations.IgnoreOperation; public class IgnoreSynchronizeOperation extends SVNSynchronizeOperation { private IResource[] resources; private IgnoreResourcesDialog ignoreResourcesDialog; private boolean cancel; public IgnoreSynchronizeOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements, IResource[] resources) { super(configuration, elements); this.resources = resources; } protected boolean promptForConflictHandling(Shell shell, SyncInfoSet syncSet) { return true; } protected void run(SVNTeamProvider provider, SyncInfoSet set, IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { getShell().getDisplay().syncExec(new Runnable() { public void run() { ignoreResourcesDialog = new IgnoreResourcesDialog(getShell(), resources); cancel = ignoreResourcesDialog.open() == IgnoreResourcesDialog.CANCEL; } }); if (cancel) return; new IgnoreOperation(getPart(), resources, ignoreResourcesDialog).run(); } } MarkMergedSynchronizeAction.java000066400000000000000000000055211203611042400441320ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriber/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.subscriber; import java.util.Iterator; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IResource; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.team.core.synchronize.FastSyncInfoFilter; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.ui.synchronize.ISynchronizeModelElement; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizeModelAction; import org.eclipse.team.ui.synchronize.SynchronizeModelOperation; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; public class MarkMergedSynchronizeAction extends SynchronizeModelAction { public MarkMergedSynchronizeAction(String text, ISynchronizePageConfiguration configuration) { super(text, configuration); } /* (non-Javadoc) * @see org.eclipse.team.ui.synchronize.SynchronizeModelAction#getSyncInfoFilter() */ protected FastSyncInfoFilter getSyncInfoFilter() { return new FastSyncInfoFilter() { public boolean select(SyncInfo info) { SyncInfoDirectionFilter filter = new SyncInfoDirectionFilter(new int[] {SyncInfo.CONFLICTING}); if (!filter.select(info)) return false; IStructuredSelection selection = getStructuredSelection(); Iterator iter = selection.iterator(); while (iter.hasNext()) { ISynchronizeModelElement element = (ISynchronizeModelElement)iter.next(); IResource resource = element.getResource(); if (resource == null || !resource.exists()) return false; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); try { if (!svnResource.isManaged() || svnResource.isAdded()) return false; } catch (SVNException e) { return false; } } return true; } }; } protected SynchronizeModelOperation getSubscriberOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements) { return new MarkMergedSynchronizeOperation(configuration, elements); } } MarkMergedSynchronizeOperation.java000066400000000000000000000162441203611042400446610ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriber/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.subscriber; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.lang.reflect.InvocationTargetException; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.synchronize.SyncInfoSet; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.resources.LocalResource; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.operations.UpdateOperation; import org.tigris.subversion.svnclientadapter.SVNRevision; public class MarkMergedSynchronizeOperation extends SVNSynchronizeOperation { public final static int PROGRESS_DIALOG = 1; public final static int PROGRESS_BUSYCURSOR = 2; public MarkMergedSynchronizeOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements) { super(configuration, elements); } protected boolean promptForConflictHandling(Shell shell, SyncInfoSet syncSet) { return true; } protected void run(SVNTeamProvider provider, SyncInfoSet set, final IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { final IResource[] resources = set.getResources(); run(new WorkspaceModifyOperation() { protected void execute(IProgressMonitor mon) throws CoreException, InvocationTargetException, InterruptedException { for (int i = 0; i < resources.length; i++) { File tempFile = null; try { tempFile = copyToTempFile(resources[i]); } catch (Exception e) { SVNUIPlugin.log(e.getMessage()); showErrorMessage(e); return; } if (monitor.isCanceled()) { if (tempFile != null) tempFile.delete(); return; } ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resources[i]); if (svnResource instanceof LocalResource) ((LocalResource)svnResource).revert(false); else svnResource.revert(); new UpdateOperation(getPart(), resources[i], SVNRevision.HEAD).run(monitor); if (monitor.isCanceled()) { if (tempFile != null) tempFile.delete(); return; } File file = new File(resources[i].getLocation().toString()); try { copy(tempFile, file); } catch (Exception e1) { SVNUIPlugin.log(e1.getMessage()); showErrorMessage(e1); } if (tempFile != null) tempFile.delete(); } } }, true /* cancelable */, PROGRESS_BUSYCURSOR); } protected boolean canRunAsJob() { return true; } protected String getJobName() { return Policy.bind("SyncAction.markMerged"); } private void showErrorMessage(final Exception e) { Display.getDefault().syncExec(new Runnable() { public void run() { MessageDialog.openError(Display.getDefault().getActiveShell(), Policy.bind("SyncAction.markMerged"), e.getMessage()); //$NON-NLS-1$ } }); } public File copyToTempFile(IResource resource) throws Exception { File tempFile = new File(resource.getLocation() + ".tmp"); //$NON-NLS-1$ if (tempFile.exists()) tempFile = getTempFile(resource); File sourceFile = new File(resource.getLocation().toString()); copy (sourceFile, tempFile); return tempFile; } private File getTempFile(IResource resource) { int count = 1; while (new File(resource.getLocation() + "." + count + ".tmp").exists()) //$NON-NLS-1$ //$NON-NLS-2$ count++; File tempFile = new File(resource.getLocation() + "." + count + ".tmp"); //$NON-NLS-1$ //$NON-NLS-2$ return tempFile; } private void copy(File sourceFile, File destFile) throws Exception { FileInputStream in = null; FileOutputStream out = null; try { in = new FileInputStream(sourceFile); out = new FileOutputStream(destFile); byte[] buffer = new byte[8 * 1024]; int count = 0; do { out.write(buffer, 0, count); count = in.read(buffer, 0, buffer.length); } while (count != -1); } finally { if (out != null) { out.close(); } if (in != null) { in.close(); } } } final protected void run(final IRunnableWithProgress runnable, boolean cancelable, int progressKind) throws InvocationTargetException, InterruptedException { final Exception[] exceptions = new Exception[] {null}; // Ensure that no repository view refresh happens until after the action final IRunnableWithProgress innerRunnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { SVNUIPlugin.getPlugin().getRepositoryManager().run(runnable, monitor); } }; switch (progressKind) { case PROGRESS_BUSYCURSOR : BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { try { innerRunnable.run(new NullProgressMonitor()); } catch (InvocationTargetException e) { exceptions[0] = e; } catch (InterruptedException e) { exceptions[0] = e; } } }); break; case PROGRESS_DIALOG : default : new ProgressMonitorDialog(getShell()).run(true, cancelable,/*cancelable, true, */innerRunnable); break; } if (exceptions[0] != null) { if (exceptions[0] instanceof InvocationTargetException) throw (InvocationTargetException)exceptions[0]; else throw (InterruptedException)exceptions[0]; } } } OverrideAndUpdateSynchronizeAction.java000066400000000000000000000072711203611042400454650ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriber/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.subscriber; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IResource; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.team.core.synchronize.FastSyncInfoFilter; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.ui.synchronize.ISynchronizeModelElement; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizeModelAction; import org.eclipse.team.ui.synchronize.SynchronizeModelOperation; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class OverrideAndUpdateSynchronizeAction extends SynchronizeModelAction { public OverrideAndUpdateSynchronizeAction(String text, ISynchronizePageConfiguration configuration) { super(text, configuration); } protected FastSyncInfoFilter getSyncInfoFilter() { return new FastSyncInfoFilter() { public boolean select(SyncInfo info) { SyncInfoDirectionFilter filter = new SyncInfoDirectionFilter(new int[] {SyncInfo.OUTGOING,SyncInfo.CONFLICTING}); if (!filter.select(info)) return false; IStructuredSelection selection = getStructuredSelection(); boolean removeUnAdded = SVNUIPlugin.getPlugin().getPreferenceStore().getBoolean(ISVNUIConstants.PREF_REMOVE_UNADDED_RESOURCES_ON_REPLACE); Iterator iter = selection.iterator(); while (iter.hasNext()) { ISynchronizeModelElement element = (ISynchronizeModelElement)iter.next(); IResource resource = element.getResource(); if (resource == null) { return false; } ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); if (svnResource == null) { return false; } try { if (!resource.exists() && !svnResource.getStatusFromCache().isDeleted()) { return false; } if (svnResource.isAdded()) return false; if (!removeUnAdded && !svnResource.isManaged()) return false; } catch (SVNException e) { return false; } } return true; } }; } protected SynchronizeModelOperation getSubscriberOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements) { List selectedResources = new ArrayList(elements.length); for (int i=0; i errors = new ArrayList(); // of IStatus public final static int PROGRESS_DIALOG = 1; public final static int PROGRESS_BUSYCURSOR = 2; public OverrideAndUpdateSynchronizeOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements, IResource[] modifiedResources, IResource[] resources) { super(configuration, elements); this.modifiedResources = modifiedResources; this.resources = resources; } protected boolean promptForConflictHandling(Shell shell, SyncInfoSet syncSet) { return true; } protected void run(SVNTeamProvider provider, SyncInfoSet set, IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { if (!revertAndUpdate) return; if (!prompted) { getShell().getDisplay().syncExec(new Runnable() { public void run() { revertAndUpdate = MessageDialog.openQuestion(getShell(), Policy.bind("SyncAction.override.title"), Policy.bind("SyncAction.override.confirm")); //$NON-NLS-1$ //$NON-NLS-2$ } }); prompted = true; } if (!revertAndUpdate) return; IResource[] modifiedResourceArray = extractResources(modifiedResources, set); IResource[] resourceArray = extractResources(resources, set); if (modifiedResourceArray != null && modifiedResourceArray.length > 0) { monitor.beginTask(null, 100); try { new RevertResourcesCommand(provider.getSVNWorkspaceRoot(),modifiedResourceArray).run(Policy.subMonitorFor(monitor,100)); } catch (SVNException e) { collectStatus(e.getStatus()); } finally { monitor.done(); } } if (monitor.isCanceled()) { return; } SVNRevision revision = SVNRevision.HEAD; monitor.beginTask(null, 100); try { IResource[] incomingResources = getIncoming(resourceArray); SVNWorkspaceSubscriber.getInstance().updateRemote(incomingResources); UpdateResourcesCommand command = new UpdateResourcesCommand(provider.getSVNWorkspaceRoot(),incomingResources, revision); command.setConflictResolver(new SVNConflictResolver()); command.run(Policy.subMonitorFor(monitor,100)); } catch (SVNException e) { collectStatus(e.getStatus()); } catch (TeamException e) { collectStatus(e.getStatus()); } finally { monitor.done(); } } protected boolean canRunAsJob() { return true; } protected String getJobName() { return Policy.bind("SyncAction.override.title"); //$NON-NLS-1$ } private IResource[] getIncoming(IResource[] resources) throws TeamException { List incomingResources = new ArrayList(); for (int i = 0; i < resources.length; i++) { IResource resource = resources[i]; SVNStatusSyncInfo info = (SVNStatusSyncInfo) SVNWorkspaceSubscriber.getInstance().getSyncInfo(resource); if (info != null) { if (SyncInfo.getDirection(info.getKind()) == SyncInfo.INCOMING || SyncInfo.getDirection(info.getKind()) == SyncInfo.CONFLICTING) incomingResources.add(resource); } } IResource[] incomingArray = new IResource[incomingResources.size()]; incomingResources.toArray(incomingArray); return incomingArray; } private void collectStatus(IStatus status) { if (isLastError(status)) return; if (!status.isOK()) addError(status); } private boolean isLastError(IStatus status) { return (errors.size() > 0 && getLastError() == status); } private void addError(IStatus status) { if (status.isOK()) return; if (isLastError(status)) return; errors.add(status); } private IStatus getLastError() { Assert.isTrue(errors.size() > 0); IStatus status = (IStatus)errors.get(errors.size() - 1); return status; } } ResolveSynchronizeAction.java000066400000000000000000000052511203611042400435330ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriber/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.subscriber; import java.util.Iterator; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IFile; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.team.core.synchronize.FastSyncInfoFilter; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.ui.synchronize.ISynchronizeModelElement; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizeModelAction; import org.eclipse.team.ui.synchronize.SynchronizeModelOperation; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; public class ResolveSynchronizeAction extends SynchronizeModelAction { public ResolveSynchronizeAction(String text, ISynchronizePageConfiguration configuration) { super(text, configuration); } /* (non-Javadoc) * @see org.eclipse.team.ui.synchronize.SynchronizeModelAction#getSyncInfoFilter() */ protected FastSyncInfoFilter getSyncInfoFilter() { return new FastSyncInfoFilter() { public boolean select(SyncInfo info) { IStructuredSelection selection = getStructuredSelection(); Iterator iter = selection.iterator(); while (iter.hasNext()) { ISynchronizeModelElement element = (ISynchronizeModelElement)iter.next(); if (element.getResource() instanceof IFile) { ISVNLocalResource svnResource = SVNWorkspaceRoot .getSVNResourceFor(element.getResource()); try { if (svnResource.getStatus().isTextConflicted() || svnResource.getStatus().hasTreeConflict()) return true; } catch (SVNException e) {} } } return false; } }; } protected SynchronizeModelOperation getSubscriberOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements) { return new ResolveSynchronizeOperation(configuration, elements); } } ResolveSynchronizeOperation.java000066400000000000000000000176701203611042400442660ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriber/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.subscriber; import java.lang.reflect.InvocationTargetException; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.TeamException; import org.eclipse.team.core.synchronize.SyncInfoSet; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.ui.actions.WorkspaceModifyOperation; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardDialog; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardMarkResolvedPage; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; import org.tigris.subversion.svnclientadapter.SVNClientException; public class ResolveSynchronizeOperation extends SVNSynchronizeOperation { boolean propertyConflicts = false; boolean textConflicts = false; boolean treeConflicts = false; private boolean canceled; private int selectedResolution; public final static int PROGRESS_DIALOG = 1; public final static int PROGRESS_BUSYCURSOR = 2; public ResolveSynchronizeOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements) { super(configuration, elements); } protected boolean promptForConflictHandling(Shell shell, SyncInfoSet syncSet) { return true; } protected void run(SVNTeamProvider provider, SyncInfoSet set, IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { boolean folderSelected = false; propertyConflicts = false; textConflicts = false; treeConflicts = false; canceled = false; final IResource[] resources = set.getResources(); for (int i = 0; i < resources.length; i++) { if (resources[i] instanceof IContainer) { folderSelected = true; break; } if (!propertyConflicts || !textConflicts || !treeConflicts) { ISVNLocalResource resource = SVNWorkspaceRoot.getSVNResourceFor(resources[i]); try { LocalResourceStatus status = resource.getStatus(); if (status != null && status.isPropConflicted()) propertyConflicts = true; if (status != null && status.isTextConflicted()) textConflicts = true; if (status != null && status.hasTreeConflict()) treeConflicts = true; } catch (SVNException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } } if (folderSelected) { selectedResolution = ISVNConflictResolver.Choice.chooseMerged; } else { Display.getDefault().syncExec(new Runnable() { public void run() { if (propertyConflicts && !textConflicts) { String message; if (resources.length > 1) message = Policy.bind("ResolveAction.confirmMultiple"); //$NON-NLS-1$ else message = Policy.bind("ResolveAction.confirm", resources[0].getName()); //$NON-NLS-1$ if (!MessageDialog.openConfirm(getShell(), Policy.bind("ResolveOperation.taskName"), message)) { //$NON-NLS-1$ canceled = true; return; } selectedResolution = ISVNConflictResolver.Choice.chooseMerged; } else { SvnWizardMarkResolvedPage markResolvedPage = new SvnWizardMarkResolvedPage(resources); markResolvedPage.setPropertyConflicts(propertyConflicts); markResolvedPage.setTreeConflicts(treeConflicts); SvnWizard wizard = new SvnWizard(markResolvedPage); SvnWizardDialog dialog = new SvnWizardDialog(getShell(), wizard); wizard.setParentDialog(dialog); if (dialog.open() == SvnWizardDialog.CANCEL) { canceled = true; return; } selectedResolution = markResolvedPage.getResolution(); } } }); } if (canceled) return; run(new WorkspaceModifyOperation() { public void execute(IProgressMonitor monitor) throws InvocationTargetException { ISVNRepositoryLocation repository = null; ISVNClientAdapter svnClient = null; try { for (int i = 0; i < resources.length; i++) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resources[i]); repository = svnResource.getRepository(); svnClient = repository.getSVNClient(); svnClient.resolve(resources[i].getLocation().toFile(), selectedResolution); repository.returnSVNClient(svnClient); repository = null; svnClient = null; //for some reason, just refreshing the file won't cut it. resources[i].getParent().refreshLocal(IResource.DEPTH_INFINITE, monitor); } } catch (TeamException e) { throw new InvocationTargetException(e); } catch (CoreException e) { throw new InvocationTargetException(e); } catch (SVNClientException e) { throw new InvocationTargetException(e); } finally { if (repository != null) { repository.returnSVNClient(svnClient); } } } }, false /* cancelable */, PROGRESS_BUSYCURSOR); } final protected void run(final IRunnableWithProgress runnable, boolean cancelable, int progressKind) throws InvocationTargetException, InterruptedException { final Exception[] exceptions = new Exception[] {null}; // Ensure that no repository view refresh happens until after the action final IRunnableWithProgress innerRunnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { SVNUIPlugin.getPlugin().getRepositoryManager().run(runnable, monitor); } }; switch (progressKind) { case PROGRESS_BUSYCURSOR : BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { try { innerRunnable.run(new NullProgressMonitor()); } catch (InvocationTargetException e) { exceptions[0] = e; } catch (InterruptedException e) { exceptions[0] = e; } } }); break; case PROGRESS_DIALOG : default : new ProgressMonitorDialog(getShell()).run(true, cancelable,/*cancelable, true, */innerRunnable); break; } if (exceptions[0] != null) { if (exceptions[0] instanceof InvocationTargetException) throw (InvocationTargetException)exceptions[0]; else throw (InterruptedException)exceptions[0]; } } } RevertSynchronizeAction.java000066400000000000000000000135151203611042400433650ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriber/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.subscriber; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.team.core.synchronize.FastSyncInfoFilter; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.internal.ui.synchronize.ChangeSetDiffNode; import org.eclipse.team.ui.synchronize.ISynchronizeModelElement; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizeModelAction; import org.eclipse.team.ui.synchronize.SynchronizeModelOperation; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.core.util.Util; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class RevertSynchronizeAction extends SynchronizeModelAction { private String url; @SuppressWarnings("rawtypes") private HashMap statusMap; public RevertSynchronizeAction(String text, ISynchronizePageConfiguration configuration) { super(text, configuration); } /* (non-Javadoc) * @see org.eclipse.team.ui.synchronize.SynchronizeModelAction#getSyncInfoFilter() */ protected FastSyncInfoFilter getSyncInfoFilter() { return new FastSyncInfoFilter() { @SuppressWarnings("rawtypes") public boolean select(SyncInfo info) { SyncInfoDirectionFilter outgoingFilter = new SyncInfoDirectionFilter(new int[] {SyncInfo.OUTGOING, SyncInfo.CONFLICTING}); if (!outgoingFilter.select(info)) return false; IStructuredSelection selection = getStructuredSelection(); Iterator iter = selection.iterator(); boolean removeUnAdded = SVNUIPlugin.getPlugin().getPreferenceStore().getBoolean(ISVNUIConstants.PREF_REMOVE_UNADDED_RESOURCES_ON_REPLACE); while (iter.hasNext()) { ISynchronizeModelElement element = (ISynchronizeModelElement)iter.next(); IResource resource = element.getResource(); if (resource == null) continue; if (resource.isLinked()) return false; if(!removeUnAdded) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); try { if (!svnResource.isManaged()) return false; } catch (SVNException e) { return false; } } } return true; } }; } @SuppressWarnings({ "rawtypes", "unchecked" }) protected SynchronizeModelOperation getSubscriberOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements) { statusMap = new HashMap(); url = null; IStructuredSelection selection = getStructuredSelection(); if (selection.size() == 1) { ISynchronizeModelElement element = (ISynchronizeModelElement)selection.getFirstElement(); IResource resource = element.getResource(); if (resource != null) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); try { url = svnResource.getStatus().getUrlString(); if ((url == null) || (resource.getType() == IResource.FILE)) url = Util.getParentUrl(svnResource); } catch (SVNException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } } List selectedResources = new ArrayList(elements.length); for (int i=0; i topSelection = new ArrayList(); if (!changeSetMode) { Iterator iter = selection.iterator(); while (iter.hasNext()) { ISynchronizeModelElement element = (ISynchronizeModelElement)iter.next(); topSelection.add(element.getResource()); } } IResource[] topSelectionArray; if (changeSetMode) { topSelectionArray = resources; } else { topSelectionArray = new IResource[topSelection.size()]; topSelection.toArray(topSelectionArray); } RevertSynchronizeOperation revertOperation = new RevertSynchronizeOperation(configuration, elements, url, resources, statusMap); revertOperation.setSelectedResources(topSelectionArray); return revertOperation; } private boolean isChangeSetMode() { Viewer viewer = getConfiguration().getPage().getViewer(); if (viewer instanceof TreeViewer) { TreeItem[] items = ((TreeViewer)viewer).getTree().getItems(); for (TreeItem item : items) { if (item.getData() instanceof ChangeSetDiffNode) { return true; } } } return false; } } RevertSynchronizeOperation.java000066400000000000000000000111211203611042400440770ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriber/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.subscriber; import java.lang.reflect.InvocationTargetException; import java.util.HashMap; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.synchronize.SyncInfoSet; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.operations.RevertOperation; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardDialog; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardRevertPage; import org.tigris.subversion.svnclientadapter.SVNStatusKind; public class RevertSynchronizeOperation extends SVNSynchronizeOperation { private String url; private IResource[] resources; private IResource[] resourcesToRevert; private IResource[] selectedResources; private boolean revert; private boolean prompted; private HashMap statusMap; private SvnWizardRevertPage revertPage; public RevertSynchronizeOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements, String url, IResource[] resources, HashMap statusMap) { super(configuration, elements); this.url = url; this.resources = resources; this.statusMap = statusMap; } protected boolean promptForConflictHandling(Shell shell, SyncInfoSet syncSet) { return true; } protected void run(SVNTeamProvider provider, SyncInfoSet set, IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { if (prompted) return; prompted = true; getShell().getDisplay().syncExec(new Runnable() { public void run() { if (resources == null || resources.length == 0) { revert = false; return; } revertPage = new SvnWizardRevertPage(resources, url, statusMap, true); revertPage.setResourceRemoved(SVNProviderPlugin.getPlugin().getPluginPreferences().getBoolean(ISVNCoreConstants.PREF_IGNORE_HIDDEN_CHANGES)); SvnWizard wizard = new SvnWizard(revertPage); SvnWizardDialog dialog = new SvnWizardDialog(getShell(), wizard); revert = (dialog.open() == SvnWizardDialog.OK); if (revert) resourcesToRevert = revertPage.getSelectedResources(); } }); if (revert) { boolean includesExternals = false; if (revertPage != null && !revertPage.isResourceRemoved()) { for (IResource resource : resourcesToRevert) { if (isExternal(resource)) { includesExternals = true; break; } } } RevertOperation revertOperation = null; if (revertPage != null && !revertPage.isResourceRemoved() && !includesExternals) { revertOperation = new RevertOperation(getPart(), selectedResources); revertOperation.setRecurse(true); revertOperation.setResourcesToRevert(resourcesToRevert); } else { revertOperation = new RevertOperation(getPart(), resourcesToRevert); } revertOperation.run(); } } public void setSelectedResources(IResource[] selectedResources) { this.selectedResources = selectedResources; } private boolean isExternal(IResource resource) { IResource parent = resource; while (parent != null) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(parent); try { LocalResourceStatus status = svnResource.getStatus(); if (status.isFileExternal() || SVNStatusKind.EXTERNAL.equals(status.getTextStatus())) { return true; } } catch (SVNException e) { return false; } parent = parent.getParent(); } return false; } } SVNChangeSetCapability.java000066400000000000000000000124001203611042400427460ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriber/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.subscriber; import java.util.HashSet; import java.util.Set; import org.eclipse.core.resources.IResource; import org.eclipse.jface.window.Window; import org.eclipse.team.core.diff.IDiff; import org.eclipse.team.core.mapping.provider.ResourceDiffTree; import org.eclipse.team.internal.core.subscribers.ActiveChangeSet; import org.eclipse.team.internal.core.subscribers.ActiveChangeSetManager; import org.eclipse.team.internal.ui.synchronize.ChangeSetCapability; import org.eclipse.team.internal.ui.synchronize.SyncInfoSetChangeSetCollector; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizePageActionGroup; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class SVNChangeSetCapability extends ChangeSetCapability { public ActiveChangeSet createChangeSet(ISynchronizePageConfiguration configuration, IDiff[] infos) { ActiveChangeSet set = getActiveChangeSetManager().createSet(Policy.bind("WorkspaceChangeSetCapability_1"), new IDiff[0]); CommitSetDialog dialog = new CommitSetDialog(configuration.getSite().getShell(), set, getResources(infos), Policy.bind("WorkspaceChangeSetCapability_2"), Policy.bind("WorkspaceChangeSetCapability_3")); // dialog.open(); if (dialog.getReturnCode() != Window.OK) return null; set.add(infos); return set; } private IResource[] getResources(IDiff[] diffs) { Set result = new HashSet(); for (int i = 0; i < diffs.length; i++) { IDiff diff = diffs[i]; IResource resource = ResourceDiffTree.getResourceFor(diff); if (resource != null) result.add(resource); } return (IResource[]) result.toArray(new IResource[result.size()]); } public void editChangeSet(ISynchronizePageConfiguration configuration, ActiveChangeSet set) { CommitSetDialog dialog = new CommitSetDialog(configuration.getSite().getShell(), set, set.getResources(), Policy.bind("WorkspaceChangeSetCapability_7"), Policy.bind("WorkspaceChangeSetCapability_8"), true); // dialog.open(); // if (dialog.getReturnCode() != Window.OK) return; // Nothing to do here as the set was updated by the dialog } /* (non-Javadoc) * @see org.eclipse.team.ui.synchronize.ChangeSetCapability#supportsCheckedInChangeSets() */ public boolean supportsCheckedInChangeSets() { return true; } /* (non-Javadoc) * @see org.eclipse.team.ui.synchronize.ChangeSetCapability#supportsActiveChangeSets() */ public boolean supportsActiveChangeSets() { return true; } /* (non-Javadoc) * @see org.eclipse.team.ui.synchronize.ChangeSetCapability#createCheckedInChangeSetCollector(org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration) */ public SyncInfoSetChangeSetCollector createSyncInfoSetChangeSetCollector(ISynchronizePageConfiguration configuration) { return new SVNChangeSetCollector(configuration); } /* (non-Javadoc) * @see org.eclipse.team.ui.synchronize.ChangeSetCapability#getActionGroup() */ public SynchronizePageActionGroup getActionGroup() { // return new CVSChangeSetActionGroup(); return null; } /* (non-Javadoc) * @see org.eclipse.team.ui.synchronize.ChangeSetCapability#enableChangeSetsByDefault() */ public boolean enableChangeSetsByDefault() { return SVNUIPlugin.getPlugin().getPreferenceStore().getBoolean(ISVNUIConstants.PREF_COMMIT_SET_DEFAULT_ENABLEMENT); } /* (non-Javadoc) * @see org.eclipse.team.internal.ui.synchronize.ChangeSetCapability#getActiveChangeSetManager() */ public ActiveChangeSetManager getActiveChangeSetManager() { return SVNProviderPlugin.getPlugin().getChangeSetManager(); } /* (non-Javadoc) * @see org.eclipse.team.internal.ui.synchronize.ChangeSetCapability#enableActiveChangeSetsFor(org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration) */ public boolean enableActiveChangeSetsFor(ISynchronizePageConfiguration configuration) { return this.supportsActiveChangeSets() && configuration.getMode() != ISynchronizePageConfiguration.INCOMING_MODE; } /* (non-Javadoc) * @see org.eclipse.team.internal.ui.synchronize.ChangeSetCapability#enableCheckedInChangeSetsFor(org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration) */ public boolean enableCheckedInChangeSetsFor(ISynchronizePageConfiguration configuration) { return this.supportsCheckedInChangeSets() && configuration.getMode() != ISynchronizePageConfiguration.OUTGOING_MODE; } } SVNChangeSetCollector.java000066400000000000000000000233751203611042400426300ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriber/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.subscriber; import java.text.DateFormat; import java.util.Date; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.eclipse.core.resources.IWorkspaceRunnable; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Status; import org.eclipse.core.runtime.jobs.Job; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.core.synchronize.SyncInfoTree; import org.eclipse.team.core.variants.IResourceVariant; import org.eclipse.team.internal.core.subscribers.CheckedInChangeSet; import org.eclipse.team.internal.ui.synchronize.SyncInfoSetChangeSetCollector; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.RemoteResourceStatus; import org.tigris.subversion.subclipse.core.sync.SVNStatusSyncInfo; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNLogMessage; import org.tigris.subversion.svnclientadapter.SVNClientException; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class SVNChangeSetCollector extends SyncInfoSetChangeSetCollector { /** * Change set used to store incoming changes in */ public class SVNCheckedInChangeSet extends CheckedInChangeSet { private long revision; private String author; private Date date; private String comment; /** * Create a checked in change set from the given syncinfo * @param info syncinfo to create change set from */ public SVNCheckedInChangeSet(SyncInfo info) { this(new SyncInfo[] { info }); } /** * Create a checked in change set from the given syncinfos * @param infos syncinfos to create change set from */ public SVNCheckedInChangeSet(SyncInfo[] infos) { super(); add(infos); initData(); String formattedDate; if (date == null) formattedDate = "n/a"; else formattedDate = DateFormat.getInstance().format(date); setName(revision + " [" + author + "] (" + formattedDate + ") " + comment); } /* * (non-Javadoc) * @see org.eclipse.team.internal.core.subscribers.CheckedInChangeSet#getAuthor() */ public String getAuthor() { return author; } /** * Set the author of the change set */ public void setAuthor(String author) { this.author = author; } /* * (non-Javadoc) * @see org.eclipse.team.internal.core.subscribers.CheckedInChangeSet#getDate() */ public Date getDate() { return date; } /** * Sets the date of the change set */ public void setDate(Date date) { this.date = date; } /* * (non-Javadoc) * @see org.eclipse.team.internal.core.subscribers.ChangeSet#getComment() */ public String getComment() { return comment; } /** * Sets the comment of the change set * @param comment */ public void setComment(String comment) { this.comment = comment; } /** * Returns the revision of this checked in change set * @return revision of the change set */ public long getRevision() { return revision; } /** * Initialize the data of this checked in change set */ private void initData() { revision = SVNRevision.SVN_INVALID_REVNUM; SyncInfoTree syncInfoTree = getSyncInfoSet(); SyncInfo[] syncInfos = syncInfoTree.getSyncInfos(); if (syncInfos.length > 0) { SyncInfo syncInfo = syncInfos[0]; if (syncInfo instanceof SVNStatusSyncInfo) { SVNStatusSyncInfo svnSyncInfo = (SVNStatusSyncInfo)syncInfo; RemoteResourceStatus remoteResourceStatus = svnSyncInfo.getRemoteResourceStatus(); if (remoteResourceStatus != null) { SVNRevision.Number revnum = remoteResourceStatus.getLastChangedRevision(); if (revnum != null) revision = revnum.getNumber(); else revision = SVNRevision.INVALID_REVISION.getNumber(); author = remoteResourceStatus.getLastCommitAuthor(); if ((author == null) || (author.length() == 0)) { author = Policy.bind("SynchronizeView.noAuthor"); //$NON-NLS-1$ } date = remoteResourceStatus.getLastChangedDate(); comment = fetchComment(svnSyncInfo); } else { revision = SVNRevision.INVALID_REVISION.getNumber(); author = Policy.bind("SynchronizeView.noAuthor"); //$NON-NLS-1$ comment = ""; date = null; } } } } /** * Fetch the comment of the given SyncInfo * @param info info to get comment for * @return the comment */ private String fetchComment(SVNStatusSyncInfo info) { String fetchedComment = Policy.bind("SynchronizeView.standardIncomingChangeSetComment"); // $NON-NLS-1$ IResourceVariant remoteResource = info.getRemote(); if (remoteResource instanceof ISVNRemoteResource) { ISVNRemoteResource svnRemoteResource = (ISVNRemoteResource)remoteResource; ISVNClientAdapter client = null; try { client = svnRemoteResource.getRepository().getSVNClient(); SVNUrl url = svnRemoteResource.getRepository().getRepositoryRoot(); SVNRevision rev = svnRemoteResource.getLastChangedRevision(); ISVNLogMessage[] logMessages = client.getLogMessages(url, rev, rev, false); if (logMessages.length != 0) { String logComment = logMessages[0].getMessage(); if (logComment.trim().length() != 0) { fetchedComment = flattenComment(logComment); } else { fetchedComment = ""; } } } catch (SVNException e1) { if (!e1.operationInterrupted()) { SVNUIPlugin.log(e1); } } catch (SVNClientException e) { SVNUIPlugin.log(SVNException.wrapException(e)); } finally { svnRemoteResource.getRepository().returnSVNClient(client); } } return fetchedComment; } } /** * Constructs a new SVNChangeSetCollector used to collect incoming * change sets */ public SVNChangeSetCollector(ISynchronizePageConfiguration configuration) { super(configuration); } /* * (non-Javadoc) * @see org.eclipse.team.internal.ui.synchronize.SyncInfoSetChangeSetCollector#add(org.eclipse.team.core.synchronize.SyncInfo[]) */ protected void add(final SyncInfo[] infos) { final Map sets = new HashMap(); Job job = new Job(Policy.bind("SynchronizeView.collectingChangeSets")) { protected IStatus run(IProgressMonitor monitor) { monitor.beginTask(null, infos.length); for (int i=0; ifalse is returned. * @param shell a shell * @param syncSet the set of selected resources * @return whether the operation should proceed. */ protected abstract boolean promptForConflictHandling(Shell shell, SyncInfoSet syncSet); /* * Divide the sync info for the operation by project */ protected Map getProjectSyncInfoSetMap(SyncInfoSet syncSet) { Map map = new HashMap(); SyncInfo[] infos = syncSet.getSyncInfos(); for (int i = 0; i < infos.length; i++) { SyncInfo info = infos[i]; IProject project = info.getLocal().getProject(); SyncInfoSet set = (SyncInfoSet)map.get(project); if (set == null) { set = new SyncInfoSet(); map.put(project, set); } set.add(info); } return map; } /** * @param IResource[] selectedResources * @param SyncInfoSet selections * @return resources that belong to current project * * The Synch view runs operations once for each selected * project. selectedResources contains all of the selected resources * across projects so we need to reduce the array to just the selected * resources associated with the SyncInfoSet. To do that we get the * IProject associated with the first resource in the set, and then * create an array from resources of just those resources that belong * to the same IProject. * */ protected IResource[] extractResources(IResource[] selectedResources, SyncInfoSet set) { IResource[] setResources = set.getResources(); IProject project = setResources[0].getProject(); ArrayList projectResources = new ArrayList(); for (int i = 0; i < selectedResources.length; i++) { if (selectedResources[i].getProject().equals(project)) projectResources.add(selectedResources[i]); } IResource[] resourceArray = new IResource[projectResources.size()]; projectResources.toArray(resourceArray); return resourceArray; } /** * Run the operation on the sync info in the given set. The sync info will be all * from the same project. * @param provider * @param set the sync info set * @param monitor a progress monitor */ protected abstract void run(SVNTeamProvider provider, SyncInfoSet set, IProgressMonitor monitor) throws InvocationTargetException, InterruptedException; } SVNSynchronizeParticipant.java000066400000000000000000000424061203611042400436260ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriber/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.subscriber; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.Preferences.IPropertyChangeListener; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.AbstractTreeViewer; import org.eclipse.jface.viewers.ILabelDecorator; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.graphics.Image; import org.eclipse.team.core.TeamException; import org.eclipse.team.core.synchronize.FastSyncInfoFilter; import org.eclipse.team.core.synchronize.FastSyncInfoFilter.SyncInfoDirectionFilter; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.internal.ui.synchronize.ChangeSetCapability; import org.eclipse.team.internal.ui.synchronize.IChangeSetProvider; import org.eclipse.team.ui.TeamUI; import org.eclipse.team.ui.synchronize.ISynchronizeModelElement; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.ISynchronizeParticipantDescriptor; import org.eclipse.team.ui.synchronize.ISynchronizeScope; import org.eclipse.team.ui.synchronize.SynchronizePageActionGroup; import org.eclipse.ui.IActionBars; import org.eclipse.ui.IMemento; import org.eclipse.ui.PartInitException; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.core.sync.SVNStatusSyncInfo; import org.tigris.subversion.subclipse.core.sync.SVNWorkspaceSubscriber; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.actions.ShowOutOfDateFoldersAction; import org.tigris.subversion.subclipse.ui.internal.ScopableSubscriberParticipant; import org.tigris.subversion.subclipse.ui.util.ResourceSelectionTreeDecorator; /** * This is an example synchronize participant for the file system provider. It will allow * showing synchronization state for local resources mapped to a remote file system * location. * * @since 3.0 */ public class SVNSynchronizeParticipant extends ScopableSubscriberParticipant implements IChangeSetProvider, IPropertyChangeListener { /** * The particpant ID as defined in the plugin manifest */ public static final String ID = "org.tigris.subversion.subclipse.participant"; //$NON-NLS-1$ public static final String TOOLBAR_CONTRIBUTION_GROUP = "toolbar_group_1"; //$NON-NLS-1$ /** * Contxt menu action group for synchronize view actions */ public static final String CONTEXT_MENU_CONTRIBUTION_GROUP_1 = "context_group_1"; public IResource[] resources; private ChangeSetCapability capability; /** * A custom label decorator that will show the remote mapped path for each * file. */ private class SVNParticipantLabelDecorator extends LabelProvider implements ILabelDecorator { ResourceSelectionTreeDecorator resourceDecorator = new ResourceSelectionTreeDecorator(); /* (non-Javadoc) * @see org.eclipse.jface.viewers.ILabelDecorator#decorateImage(org.eclipse.swt.graphics.Image, java.lang.Object) */ public Image decorateImage(Image image, Object element) { // return null; if (element instanceof ISynchronizeModelElement) { IResource resource = ((ISynchronizeModelElement) element).getResource(); if (resource == null) return null; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); try { if (svnResource.getStatus().hasTreeConflict()) { image = resourceDecorator.getImage(image, ResourceSelectionTreeDecorator.TREE_CONFLICT); } else if (svnResource.getStatus().isTextConflicted()) { image = resourceDecorator.getImage(image, ResourceSelectionTreeDecorator.TEXT_CONFLICTED); } else if (svnResource.getStatus().isPropConflicted()) { } } catch (SVNException e) {} } return image; } /* (non-Javadoc) * @see org.eclipse.jface.viewers.ILabelDecorator#decorateText(java.lang.String, java.lang.Object) */ public String decorateText(String text, Object element) { try { if (element instanceof ISynchronizeModelElement) { IResource resource = ((ISynchronizeModelElement) element).getResource(); if (resource != null) { SVNStatusSyncInfo info = (SVNStatusSyncInfo) SVNWorkspaceSubscriber.getInstance().getSyncInfo(resource); if (info != null) { return text + info.getLabel(); //$NON-NLS-1$ //$NON-NLS-2$ } } } } catch (TeamException e) { } return null; } } /** * Action group that contributes the get an put menus to the context menu * in the synchronize view */ private class SVNParticipantActionGroup extends SynchronizePageActionGroup { Action expandAllAction; private UpdateSynchronizeAction updateToolbar; private CommitSynchronizeAction commitToolbar; /* (non-Javadoc) * @see org.eclipse.team.ui.synchronize.SynchronizePageActionGroup#initialize(org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration) */ public void initialize(ISynchronizePageConfiguration configuration) { super.initialize(configuration); updateToolbar = new UpdateSynchronizeAction(null, configuration, getVisibleRootsSelectionProvider()) { //$NON-NLS-1$ protected FastSyncInfoFilter getSyncInfoFilter() { return new SyncInfoDirectionFilter(new int[] {SyncInfo.INCOMING, SyncInfo.CONFLICTING}); } }; updateToolbar.setToolTipText(Policy.bind("SyncAction.updateAll")); //$NON-NLS-1$ updateToolbar.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_UPDATE_ALL)); updateToolbar.setConfirm(true); commitToolbar = new CommitSynchronizeAction(null, configuration, getVisibleRootsSelectionProvider()); //$NON-NLS-1$ commitToolbar.setToolTipText(Policy.bind("SyncAction.commitAll")); //$NON-NLS-1$ commitToolbar.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_COMMIT_ALL)); ShowOutOfDateFoldersAction showOutOfDateFoldersAction = SVNUIPlugin.getPlugin().getShowOutOfDateFoldersAction(); showOutOfDateFoldersAction.setSvnSynchronizeParticipant(SVNSynchronizeParticipant.this); appendToGroup( ISynchronizePageConfiguration.P_VIEW_MENU, ISynchronizePageConfiguration.MODE_GROUP, showOutOfDateFoldersAction); UpdateSynchronizeAction updateAction = new UpdateSynchronizeAction(Policy.bind("SyncAction.update"), configuration); //$NON-NLS-1$ updateAction.setId("org.tigris.subversion.subclipse.ui.syncViewUpdate"); updateAction.setActionDefinitionId("org.tigris.subversion.subclipse.ui.update"); updateAction.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_MENU_UPDATE)); appendToGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_1, updateAction); CommitSynchronizeAction commitAction = new CommitSynchronizeAction(Policy.bind("SyncAction.commit"), configuration); //$NON-NLS-1$ commitAction.setId("org.tigris.subversion.subclipse.ui.syncViewCommit"); commitAction.setActionDefinitionId("org.tigris.subversion.subclipse.ui.commit"); commitAction.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_MENU_COMMIT)); appendToGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_1, commitAction); GenerateDiffFileSynchronizeAction generateDiffFileAction = new GenerateDiffFileSynchronizeAction(Policy.bind("SyncAction.createPatch"), configuration); //$NON-NLS-1$ generateDiffFileAction.setId("org.tigris.subversion.subclipse.ui.syncViewCreatePatch"); generateDiffFileAction.setActionDefinitionId("org.tigris.subversion.subclipse.ui.GenerateDiff"); appendToGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_1, generateDiffFileAction); appendToGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_1, new Separator()); OverrideAndUpdateSynchronizeAction overrideAction = new OverrideAndUpdateSynchronizeAction(Policy.bind("SyncAction.override"), configuration); //$NON-NLS-1$ appendToGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_1, overrideAction); MarkMergedSynchronizeAction markMergedAction = new MarkMergedSynchronizeAction(Policy.bind("SyncAction.markMerged"), configuration); //$NON-NLS-1$ markMergedAction.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_MENU_MARKMERGED)); appendToGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_1, markMergedAction); appendToGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_1, new Separator()); AddSynchronizeAction addAction = new AddSynchronizeAction(Policy.bind("SyncAction.add"), configuration); //$NON-NLS-1$ addAction.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_MENU_ADD)); addAction.setId("org.tigris.subversion.subclipse.ui.syncViewAdd"); addAction.setActionDefinitionId("org.tigris.subversion.subclipse.ui.add"); appendToGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_1, addAction); IgnoreSynchronizeAction ignoreAction = new IgnoreSynchronizeAction(Policy.bind("SyncAction.ignore"), configuration); //$NON-NLS-1$ ignoreAction.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_MENU_IGNORE)); ignoreAction.setId("org.tigris.subversion.subclipse.ui.syncViewIgnore"); ignoreAction.setActionDefinitionId("org.tigris.subversion.subclipse.ui.ignore"); appendToGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_1, ignoreAction); RevertSynchronizeAction revertAction = new RevertSynchronizeAction(Policy.bind("SyncAction.revert"), configuration); //$NON-NLS-1$ revertAction.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_MENU_REVERT)); revertAction.setId("org.tigris.subversion.subclipse.ui.syncViewRevert"); revertAction.setActionDefinitionId("org.tigris.subversion.subclipse.ui.revert"); appendToGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_1, revertAction); ShowHistorySynchronizeAction historyAction = new ShowHistorySynchronizeAction(Policy.bind("SyncAction.history"), configuration); //$NON-NLS-1$ historyAction.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_MENU_SHOWHISTORY)); historyAction.setId("org.tigris.subversion.subclipse.ui.syncViewShowResourceInHistoryAction"); historyAction.setActionDefinitionId("org.tigris.subversion.subclipse.ui.showresourceinhistoryaction"); appendToGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_1, historyAction); ShowPropertiesSynchronizeAction propertiesAction = new ShowPropertiesSynchronizeAction(Policy.bind("SyncAction.properties"), configuration); //$NON-NLS-1$ propertiesAction.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_MENU_SHOWPROPERTY)); propertiesAction.setId("org.tigris.subversion.subclipse.ui.syncViewShowSvnProperties"); propertiesAction.setActionDefinitionId("org.tigris.subversion.subclipse.ui.showsvnproperties"); appendToGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_1, propertiesAction); EditConflictsSynchronizeAction conflictsAction = new EditConflictsSynchronizeAction(Policy.bind("SyncAction.conflicts"), configuration); //$NON-NLS-1$ conflictsAction.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_MENU_EDITCONFLICT)); appendToGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_1, conflictsAction); ResolveSynchronizeAction resolveAction = new ResolveSynchronizeAction(Policy.bind("SyncAction.resolve"), configuration); //$NON-NLS-1$ resolveAction.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_MENU_RESOLVE)); appendToGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_1, resolveAction); final Viewer viewer = configuration.getPage().getViewer(); if (viewer instanceof AbstractTreeViewer) { expandAllAction = new Action(null, SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_EXPAND_ALL)) { //$NON-NLS-1$ public void run() { viewer.getControl().setRedraw(false); ((AbstractTreeViewer)viewer).expandToLevel(viewer.getInput(), AbstractTreeViewer.ALL_LEVELS); viewer.getControl().setRedraw(true); } }; expandAllAction.setToolTipText(Policy.bind("SyncAction.expandAllTooltip")); //$NON-NLS-1$ expandAllAction.setHoverImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_EXPAND_ALL)); } } /* * (non-Javadoc) * @see org.eclipse.team.ui.synchronize.SynchronizePageActionGroup#fillActionBars(org.eclipse.ui.IActionBars) */ public void fillActionBars(IActionBars actionBars) { IToolBarManager manager = actionBars.getToolBarManager(); appendToGroup(manager, ISynchronizePageConfiguration.NAVIGATE_GROUP, expandAllAction); appendToGroup( manager, TOOLBAR_CONTRIBUTION_GROUP, updateToolbar); appendToGroup( manager, TOOLBAR_CONTRIBUTION_GROUP, commitToolbar); } } /** * No arg contructor used for * creation of persisted participant after startup */ public SVNSynchronizeParticipant() { super(); } public SVNSynchronizeParticipant(ISynchronizeScope scope) { super(scope); setSubscriber(SVNWorkspaceSubscriber.getInstance()); } /** * @see org.eclipse.team.ui.synchronize.ISynchronizeParticipant#init(org.eclipse.ui.IMemento) */ public void init(String secondaryId, IMemento memento) throws PartInitException { super.init(secondaryId, memento); setSubscriber(SVNWorkspaceSubscriber.getInstance()); SVNProviderPlugin.getPlugin().getPluginPreferences().addPropertyChangeListener(this); } protected ISynchronizeParticipantDescriptor getDescriptor() { return TeamUI.getSynchronizeManager().getParticipantDescriptor(ID); } /* (non-Javadoc) * @see org.eclipse.team.ui.synchronize.subscribers.SubscriberParticipant#initializeConfiguration(org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration) */ protected void initializeConfiguration(ISynchronizePageConfiguration configuration) { super.initializeConfiguration(configuration); ILabelDecorator labelDecorator = new SVNParticipantLabelDecorator(); configuration.addLabelDecorator(labelDecorator); configuration.addMenuGroup(ISynchronizePageConfiguration.P_TOOLBAR_MENU, TOOLBAR_CONTRIBUTION_GROUP); // Add support for showing mode buttons configuration.setSupportedModes(ISynchronizePageConfiguration.ALL_MODES); configuration.setMode(ISynchronizePageConfiguration.BOTH_MODE); // Create the action group that contributes the get and put actions configuration.addActionContribution(new SVNParticipantActionGroup()); // Add the get and put group to the context menu configuration.addMenuGroup( ISynchronizePageConfiguration.P_CONTEXT_MENU, CONTEXT_MENU_CONTRIBUTION_GROUP_1); } /* (non-Javadoc) * @see org.eclipse.team.ui.synchronize.AbstractSynchronizeParticipant#isViewerContributionsSupported() */ protected boolean isViewerContributionsSupported() { return true; } public ChangeSetCapability getChangeSetCapability() { if (capability == null) { capability = new SVNChangeSetCapability(); } return capability; } public IStatus refresh(IResource[] resources, IProgressMonitor monitor) { this.resources = resources; return refreshNow(resources, getLongTaskName(resources), monitor); } public void propertyChange(org.eclipse.core.runtime.Preferences.PropertyChangeEvent event) { if (event.getProperty().equals(ISVNCoreConstants.PREF_IGNORE_HIDDEN_CHANGES)) { if (getResources() != null) { refresh(getResources(), new NullProgressMonitor()); reset(); } } } } ShowHistorySynchronizeAction.java000066400000000000000000000064011203611042400444140ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriber/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.subscriber; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IStatus; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.team.core.synchronize.FastSyncInfoFilter; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.ui.synchronize.ISynchronizeModelElement; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizeModelAction; import org.eclipse.team.ui.synchronize.SynchronizeModelOperation; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class ShowHistorySynchronizeAction extends SynchronizeModelAction { public ShowHistorySynchronizeAction(String text, ISynchronizePageConfiguration configuration) { super(text, configuration); } /* (non-Javadoc) * @see org.eclipse.team.ui.synchronize.SynchronizeModelAction#getSyncInfoFilter() */ protected FastSyncInfoFilter getSyncInfoFilter() { return new FastSyncInfoFilter() { public boolean select(SyncInfo info) { IStructuredSelection selection = getStructuredSelection(); if (selection.size() != 1) return false; ISynchronizeModelElement element = (ISynchronizeModelElement)selection.getFirstElement(); IResource resource = element.getResource(); if (resource == null) return false; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); try { return !resource.exists() || (svnResource.getStatus().isManaged() && !svnResource.getStatus().isAdded()); } catch (SVNException e) { return false; } } }; } protected SynchronizeModelOperation getSubscriberOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements) { ISynchronizeModelElement element = (ISynchronizeModelElement)getStructuredSelection().getFirstElement(); IResource resource = element.getResource(); if (!resource.exists()) { try { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); return new ShowHistorySynchronizeOperation(configuration, elements, svnResource.getLatestRemoteResource()); } catch (SVNException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } return new ShowHistorySynchronizeOperation(configuration, elements, resource); } } ShowHistorySynchronizeOperation.java000066400000000000000000000111241203611042400451350ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriber/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.subscriber; import java.lang.reflect.InvocationTargetException; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.synchronize.SyncInfoSet; import org.eclipse.team.ui.history.IHistoryView; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.ui.IViewPart; import org.eclipse.ui.PartInitException; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class ShowHistorySynchronizeOperation extends SVNSynchronizeOperation { private IResource resource; private ISVNRemoteResource remoteResource; public final static int PROGRESS_DIALOG = 1; public final static int PROGRESS_BUSYCURSOR = 2; public ShowHistorySynchronizeOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements, IResource resource) { super(configuration, elements); this.resource = resource; } public ShowHistorySynchronizeOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements, ISVNRemoteResource remoteResource) { super(configuration, elements); this.remoteResource = remoteResource; } protected boolean promptForConflictHandling(Shell shell, SyncInfoSet syncSet) { return true; } protected void run(SVNTeamProvider provider, SyncInfoSet set, IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) { getShell().getDisplay().syncExec(new Runnable() { public void run() { IHistoryView view = (IHistoryView)showView(ISVNUIConstants.HISTORY_VIEW_ID); if (view != null) { if (resource == null) { view.showHistoryFor(remoteResource); } else { view.showHistoryFor(resource); } } } }); } }, false /* cancelable */, PROGRESS_BUSYCURSOR); } final protected void run(final IRunnableWithProgress runnable, boolean cancelable, int progressKind) throws InvocationTargetException, InterruptedException { final Exception[] exceptions = new Exception[] {null}; // Ensure that no repository view refresh happens until after the action final IRunnableWithProgress innerRunnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { SVNUIPlugin.getPlugin().getRepositoryManager().run(runnable, monitor); } }; switch (progressKind) { case PROGRESS_BUSYCURSOR : BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { try { innerRunnable.run(new NullProgressMonitor()); } catch (InvocationTargetException e) { exceptions[0] = e; } catch (InterruptedException e) { exceptions[0] = e; } } }); break; case PROGRESS_DIALOG : default : new ProgressMonitorDialog(getShell()).run(true, cancelable,/*cancelable, true, */innerRunnable); break; } if (exceptions[0] != null) { if (exceptions[0] instanceof InvocationTargetException) throw (InvocationTargetException)exceptions[0]; else throw (InterruptedException)exceptions[0]; } } protected IViewPart showView(String viewId) { try { return getPart().getSite().getPage().showView(viewId); } catch (PartInitException pe) { return null; } } } ShowPropertiesSynchronizeAction.java000066400000000000000000000055311203611042400451120ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriber/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.subscriber; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IResource; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.team.core.synchronize.FastSyncInfoFilter; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.ui.synchronize.ISynchronizeModelElement; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizeModelAction; import org.eclipse.team.ui.synchronize.SynchronizeModelOperation; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; public class ShowPropertiesSynchronizeAction extends SynchronizeModelAction { public ShowPropertiesSynchronizeAction(String text, ISynchronizePageConfiguration configuration) { super(text, configuration); } protected FastSyncInfoFilter getSyncInfoFilter() { return new FastSyncInfoFilter() { public boolean select(SyncInfo info) { SyncInfoDirectionFilter outgoingFilter = new SyncInfoDirectionFilter(new int[] {SyncInfo.OUTGOING}); if (!outgoingFilter.select(info)) return false; IStructuredSelection selection = getStructuredSelection(); if (selection.size() != 1) return false; ISynchronizeModelElement element = (ISynchronizeModelElement)selection.getFirstElement(); IResource resource = element.getResource(); if (resource == null) return false; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); try { return !svnResource.getStatus().isDeleted() && svnResource.getStatus().isManaged() && resource.exists(); } catch (SVNException e) { return false; } } }; } protected SynchronizeModelOperation getSubscriberOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements) { ISynchronizeModelElement element = (ISynchronizeModelElement)getStructuredSelection().getFirstElement(); IResource resource = element.getResource(); return new ShowPropertiesSynchronizeOperation(configuration, elements, resource); } } ShowPropertiesSynchronizeOperation.java000066400000000000000000000106331203611042400456340ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriber/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.subscriber; import java.lang.reflect.InvocationTargetException; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.synchronize.SyncInfoSet; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.ui.IViewPart; import org.eclipse.ui.PartInitException; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.svnproperties.SvnPropertiesView; public class ShowPropertiesSynchronizeOperation extends SVNSynchronizeOperation { private IResource resource; public final static int PROGRESS_DIALOG = 1; public final static int PROGRESS_BUSYCURSOR = 2; public ShowPropertiesSynchronizeOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements, IResource resource) { super(configuration, elements); this.resource = resource; } protected boolean promptForConflictHandling(Shell shell, SyncInfoSet syncSet) { return true; } protected void run(SVNTeamProvider provider, SyncInfoSet set, IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { run(new IRunnableWithProgress() { public void run(IProgressMonitor monitor) { getShell().getDisplay().syncExec(new Runnable() { public void run() { try { SvnPropertiesView view = (SvnPropertiesView)showView(SvnPropertiesView.VIEW_ID); if (view != null) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); view.showSvnProperties(svnResource); } } catch (SVNException e) { SVNUIPlugin.log(IStatus.ERROR, e.getMessage(), e); } } }); } }, false /* cancelable */, PROGRESS_BUSYCURSOR); } final protected void run(final IRunnableWithProgress runnable, boolean cancelable, int progressKind) throws InvocationTargetException, InterruptedException { final Exception[] exceptions = new Exception[] {null}; // Ensure that no repository view refresh happens until after the action final IRunnableWithProgress innerRunnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { SVNUIPlugin.getPlugin().getRepositoryManager().run(runnable, monitor); } }; switch (progressKind) { case PROGRESS_BUSYCURSOR : BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { try { innerRunnable.run(new NullProgressMonitor()); } catch (InvocationTargetException e) { exceptions[0] = e; } catch (InterruptedException e) { exceptions[0] = e; } } }); break; case PROGRESS_DIALOG : default : new ProgressMonitorDialog(getShell()).run(true, cancelable,/*cancelable, true, */innerRunnable); break; } if (exceptions[0] != null) { if (exceptions[0] instanceof InvocationTargetException) throw (InvocationTargetException)exceptions[0]; else throw (InterruptedException)exceptions[0]; } } protected IViewPart showView(String viewId) { try { return getPart().getSite().getPage().showView(viewId); } catch (PartInitException pe) { return null; } } } UpdateSynchronizeAction.java000066400000000000000000000100131203611042400433260ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/subscriber/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.subscriber; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.compare.structuremergeviewer.IDiffElement; import org.eclipse.core.resources.IResource; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.team.core.synchronize.FastSyncInfoFilter; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.ui.synchronize.ISynchronizeModelElement; import org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration; import org.eclipse.team.ui.synchronize.SynchronizeModelAction; import org.eclipse.team.ui.synchronize.SynchronizeModelOperation; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; /** * Get action that appears in the synchronize view. It's main purpose is * to filter the selection and delegate its execution to the get operation. */ public class UpdateSynchronizeAction extends SynchronizeModelAction { private boolean confirm; public UpdateSynchronizeAction(String text, ISynchronizePageConfiguration configuration) { super(text, configuration); } public UpdateSynchronizeAction(String text, ISynchronizePageConfiguration configuration, ISelectionProvider selectionProvider) { super(text, configuration, selectionProvider); } /* (non-Javadoc) * @see org.eclipse.team.ui.synchronize.SynchronizeModelAction#getSubscriberOperation(org.eclipse.team.ui.synchronize.ISynchronizePageConfiguration, org.eclipse.compare.structuremergeviewer.IDiffElement[]) */ protected SynchronizeModelOperation getSubscriberOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements) { List selectedResources = new ArrayList(elements.length); for (int i=0; i errors; public UpdateSynchronizeOperation(ISynchronizePageConfiguration configuration, IDiffElement[] elements, IResource[] resources) { super(configuration, elements); this.resources = resources; } protected boolean promptForConflictHandling(Shell shell, SyncInfoSet syncSet) { return true; } public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { if (confirmNeeded) { final SyncInfoSet syncSet = getSyncInfoSet(); Display.getDefault().syncExec(new Runnable() { public void run() { confirm = MessageDialog.openConfirm(getShell(), Policy.bind("SyncAction.updateAll"), Policy.bind("SyncAction.updateConfirm", Integer.toString(syncSet.getSyncInfos().length))); //$NON-NLS-1$ //$NON-NLS-1$ //$NON-NLS-2$ } }); if (!confirm) return; } errors = new ArrayList(); super.run(monitor); } protected void run(SVNTeamProvider provider, SyncInfoSet set, IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { IResource[] resourceArray = extractResources(resources, set); Map> items = groupByRepository(resourceArray, set); Set keys = items.keySet(); for (Iterator iterator = keys.iterator(); iterator.hasNext();) { ISVNRepositoryLocation repos = iterator.next(); List resourceList = items.get(repos); resourceArray = new IResource[resourceList.size()]; resourceList.toArray(resourceArray); SVNRevision revision = getRevisionForUpdate(resourceArray, set); doUpdate(provider, monitor, trimResources(resourceArray), revision); } } private void doUpdate(SVNTeamProvider provider, IProgressMonitor monitor, IResource[] resourceArray, SVNRevision revision) { try { SVNWorkspaceSubscriber.getInstance().updateRemote(resourceArray); UpdateResourcesCommand command = new UpdateResourcesCommand(provider.getSVNWorkspaceRoot(),resourceArray, revision); command.setConflictResolver(new SVNConflictResolver()); command.run(Policy.subMonitorFor(monitor,100)); } catch (SVNException e) { if (!e.operationInterrupted()) { collectStatus(e.getStatus()); } } catch (TeamException e) { collectStatus(e.getStatus()); } finally { monitor.done(); } } /** * This takes the items we are going to update and groups them by repository * We need to do this in case a project uses svn:externals to point to a * different repository. If we do not do this, then later when we find the * highest revision number to update to, we can have a set of resources that * span multiple repositories (each with their own revision numbers) * * @param resourceArray - Complete list of resources we will update * @param set - The set of selected items in the synch view * @return Map - the resources grouped by ISVNRepositoryLocation */ private Map> groupByRepository(IResource[] resourceArray, SyncInfoSet set) { Map> resourceMap = new HashMap>(); final SyncInfo[] syncInfos = set.getSyncInfos(); for (int i = 0; i < syncInfos.length; i++) { SVNStatusSyncInfo syncInfo = (SVNStatusSyncInfo)syncInfos[i]; IResource local = syncInfo.getLocal(); resourceLoop: for (int j = 0; j < resourceArray.length; j++) { if (resourceArray[j].equals(local)) { IResourceVariant remote = syncInfo.getRemote(); if (remote != null && remote instanceof ISVNRemoteResource) { if (syncInfo.getRemoteResourceStatus() != null) { ISVNRepositoryLocation repos = syncInfo.getRemoteResourceStatus().getRepository(); List resList = (List) resourceMap.get(repos); if (resList == null) resList = new ArrayList(resourceArray.length); resList.add(resourceArray[j]); resourceMap.put(repos, resList); } } break resourceLoop; } } } return resourceMap; } /** * This method returns the highest revision number in the set of items * being updated or SVNRevision.HEAD if there are deleted items * * @param resources - the resources being updated * @param set - the list of all selected items in synch view * @return */ private SVNRevision getRevisionForUpdate(IResource[] resources, SyncInfoSet set) { SVNRevision revision = null; final SyncInfo[] syncInfos = set.getSyncInfos(); boolean useHEAD = false; syncInfoLoop: for (int i = 0; i < syncInfos.length; i++) { SVNStatusSyncInfo syncInfo = (SVNStatusSyncInfo)syncInfos[i]; resourceLoop: for (int j = 0; j < resources.length; j++) { if (resources[j].equals(syncInfo.getLocal())) { IResourceVariant remote = syncInfo.getRemote(); if (remote != null && remote instanceof ISVNRemoteResource) { if (syncInfo.getRemoteResourceStatus() != null) { if (syncInfo.getRemoteResourceStatus().getTextStatus() == SVNStatusKind.DELETED) { // update contains deleted items useHEAD = true; break syncInfoLoop; } } SVNRevision rev = ((ISVNRemoteResource)remote).getLastChangedRevision(); if (rev instanceof SVNRevision.Number) { long nbr = ((SVNRevision.Number)rev).getNumber(); if (revision == null) revision = rev; else { long revisionNumber = ((SVNRevision.Number)revision).getNumber(); if (nbr > revisionNumber) revision = rev; } } } break resourceLoop; } } } if (revision == null || useHEAD) revision = SVNRevision.HEAD; return revision; } /** * This method takes the array of resources to be updated and removes any * items that have a parent folder that is also being updated, since the * recursive update of a parent folder will cause the resource to be updated * anyway. This will make the update run faster. * @param resourceArray * @return */ private IResource[] trimResources(IResource[] resourceArray) { // Get a list of just the folders. List folders = new ArrayList(); for (int i = 0; i < resourceArray.length; i++) { if (resourceArray[i].getType() == IResource.FOLDER || resourceArray[i].getType() == IResource.PROJECT) folders.add(resourceArray[i]); } List trimmedList = new ArrayList(); for (int i = 0; i < resourceArray.length; i++) { if (!parentIncluded(resourceArray[i], folders)) trimmedList.add(resourceArray[i]); } IResource[] trimmedArray = new IResource[trimmedList.size()]; trimmedList.toArray(trimmedArray); return trimmedArray; } private boolean parentIncluded(IResource resource, List folders) { IResource parent = resource.getParent(); if (parent == null) return false; if (folders.contains(parent)) return true; return parentIncluded(parent, folders); } public void setConfirmNeeded(boolean confirmNeeded) { this.confirmNeeded = confirmNeeded; } private void collectStatus(IStatus status) { if (isLastError(status)) return; if (!status.isOK()) addError(status); } private boolean isLastError(IStatus status) { return (errors.size() > 0 && getLastError() == status); } private void addError(IStatus status) { if (status.isOK()) return; if (isLastError(status)) return; errors.add(status); } private IStatus getLastError() { Assert.isTrue(errors.size() > 0); IStatus status = (IStatus)errors.get(errors.size() - 1); return status; } protected boolean canRunAsJob() { return true; } protected String getJobName() { return Policy.bind("UpdateOperation.taskName"); //$NON-NLS-1$; } } 000077500000000000000000000000001203611042400364345ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/svnpropertiesSvnPropertiesView.java000066400000000000000000000446511203611042400427670ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/svnproperties/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.svnproperties; import java.io.IOException; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.TextViewer; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.IActionBars; import org.eclipse.ui.ISelectionListener; import org.eclipse.ui.IWorkbenchActionConstants; import org.eclipse.ui.IWorkbenchPart; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.actions.ActionFactory; import org.eclipse.ui.part.ViewPart; import org.tigris.subversion.subclipse.core.IResourceStateChangeListener; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.actions.SVNPropertyDeleteAction; import org.tigris.subversion.subclipse.ui.actions.SVNPropertyModifyAction; import org.tigris.subversion.subclipse.ui.conflicts.PropertyConflict; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizard; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardDialog; import org.tigris.subversion.subclipse.ui.wizards.dialogs.SvnWizardSetPropertyPage; import org.tigris.subversion.svnclientadapter.ISVNProperty; import org.tigris.subversion.svnclientadapter.SVNStatusKind; /** * * The SvnPropertiesView shows the svn properties for a svn local resource * */ public class SvnPropertiesView extends ViewPart { public static final String VIEW_ID = "org.tigris.subversion.subclipse.ui.svnproperties.SvnPropertiesView"; //$NON-NLS-1$ private TableViewer tableViewer; private TextViewer textViewer; private ISVNLocalResource resource; private Action refreshAction; private Action addPropertyAction; private Action modifyPropertyAction; private Action deletePropertyAction; private Label statusLabel; private ISelectionListener pageSelectionListener; private IResourceStateChangeListener resourceStateChangeListener; private PropertyConflict[] conflicts; class ResourceStateChangeListener implements IResourceStateChangeListener { /** * the svn status of some resources changed. Refresh if we are concerned */ public void resourceSyncInfoChanged(IResource[] changedResources) { for (int i = 0; i < changedResources.length;i++) { if (resource != null && changedResources[i].equals(resource.getIResource())) { refresh(); } } } public void resourceModified(IResource[] changedResources) {} public void projectConfigured(IProject project) {} public void projectDeconfigured(IProject project) {} public void initialize() {} } public SvnPropertiesView() { } /* * (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#dispose() */ public void dispose() { SVNProviderPlugin.removeResourceStateChangeListener(resourceStateChangeListener); resourceStateChangeListener = null; getSite().getPage().removePostSelectionListener(pageSelectionListener); super.dispose(); } class PropertiesLabelProvider implements ITableLabelProvider { public PropertiesLabelProvider() { } /** * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int) */ public Image getColumnImage(Object element, int columnIndex) { if (columnIndex == 0 && element != null && conflicts != null) { ISVNProperty svnProperty = (ISVNProperty)element; for (int i = 0; i < conflicts.length; i++) { if (conflicts[i].getPropertyName().equals(svnProperty.getName())) { return SVNUIPlugin.getImage(ISVNUIConstants.IMG_PROPERTY_CONFLICTED); } } } return null; } /** * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int) */ public String getColumnText(Object element, int columnIndex) { if (element == null) return ""; //$NON-NLS-1$ ISVNProperty svnProperty = (ISVNProperty)element; String result = null; switch (columnIndex) { case 1 : result = svnProperty.getName(); break; case 2 : result = svnProperty.getValue(); break; } // This method must not return null if (result == null) result = ""; //$NON-NLS-1$ return result; } /** * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener) */ public void addListener(ILabelProviderListener listener) { } /** * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose() */ public void dispose() { } /** * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String) */ public boolean isLabelProperty(Object element, String property) { return false; } /** * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener) */ public void removeListener(ILabelProviderListener listener) { } } private TableViewer createTable(Composite parent) { Table table = new Table(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.MULTI); table.setHeaderVisible(true); table.setLinesVisible(true); GridData gridData = new GridData(GridData.FILL_BOTH); table.setLayoutData(gridData); TableLayout layout = new TableLayout(); table.setLayout(layout); tableViewer = new TableViewer(table); createColumns(table, layout); tableViewer.setContentProvider(new ArrayContentProvider()); tableViewer.setLabelProvider(new PropertiesLabelProvider()); return tableViewer; } /** * Create the TextViewer */ protected TextViewer createText(Composite parent) { return new TextViewer(parent, SWT.V_SCROLL | SWT.WRAP | SWT.MULTI | SWT.READ_ONLY); } /** * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) */ public void createPartControl(Composite parent) { GridLayout layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; layout.numColumns = 1; parent.setLayout(layout); statusLabel = new Label(parent,SWT.LEFT); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.grabExcessHorizontalSpace = true; statusLabel.setLayoutData(gridData); SashForm sashForm = new SashForm(parent, SWT.VERTICAL); sashForm.setLayoutData(new GridData(GridData.FILL_BOTH)); tableViewer = createTable(sashForm); textViewer = createText(sashForm); sashForm.setWeights(new int[] { 70, 30 }); contributeActions(); pageSelectionListener = new ISelectionListener() { public void selectionChanged(IWorkbenchPart part, ISelection selection) { handlePartSelectionChanged(part,selection); } }; getSite().getPage().addPostSelectionListener(pageSelectionListener); resourceStateChangeListener = new ResourceStateChangeListener(); SVNProviderPlugin.addResourceStateChangeListener(resourceStateChangeListener); } /** * called when the selection changed on another part */ private void handlePartSelectionChanged(IWorkbenchPart part, ISelection selection) { if (!(selection instanceof IStructuredSelection)) return; try { Object first = ((IStructuredSelection)selection).getFirstElement(); if (first instanceof IAdaptable) { IAdaptable a = (IAdaptable) first; Object adapter = a.getAdapter(IResource.class); if (adapter instanceof IResource) { IResource resource = (IResource)adapter; // If the resource isn't open or doesn't exist it won't have properties if (!resource.isAccessible()) { showSvnProperties(null); } else { ISVNLocalResource svnResource = (ISVNLocalResource)resource.getAdapter(ISVNLocalResource.class); showSvnProperties(svnResource); } } } } catch (SVNException e) { } } private Action getRefreshAction() { if (refreshAction == null) { SVNUIPlugin plugin = SVNUIPlugin.getPlugin(); refreshAction = new Action(Policy.bind("SvnPropertiesView.refreshLabel"), plugin.getImageDescriptor(ISVNUIConstants.IMG_REFRESH_ENABLED)) { //$NON-NLS-1$ public void run() { refresh(); } }; refreshAction.setToolTipText(Policy.bind("SvnPropertiesView.refresh")); //$NON-NLS-1$ refreshAction.setDisabledImageDescriptor(plugin.getImageDescriptor(ISVNUIConstants.IMG_REFRESH_DISABLED)); refreshAction.setHoverImageDescriptor(plugin.getImageDescriptor(ISVNUIConstants.IMG_REFRESH)); } return refreshAction; } private Action getAddPropertyAction() { if (addPropertyAction == null) { SVNUIPlugin plugin = SVNUIPlugin.getPlugin(); addPropertyAction = new Action(Policy.bind("SvnPropertiesView.addPropertyLabel"), plugin.getImageDescriptor(ISVNUIConstants.IMG_MENU_PROPSET)) { //$NON-NLS-1$ public void run() { SvnWizardSetPropertyPage setPropertyPage = new SvnWizardSetPropertyPage(resource); SvnWizard wizard = new SvnWizard(setPropertyPage); SvnWizardDialog dialog = new SvnWizardDialog(getSite().getShell(), wizard); wizard.setParentDialog(dialog); if (dialog.open() != SvnWizardDialog.OK) return; try { if (setPropertyPage.getPropertyValue() != null) { resource.setSvnProperty(setPropertyPage.getPropertyName(), setPropertyPage.getPropertyValue(),setPropertyPage.getRecurse()); } else { resource.setSvnProperty(setPropertyPage.getPropertyName(), setPropertyPage.getPropertyFile(),setPropertyPage.getRecurse()); } } catch (SVNException e) { if (!e.operationInterrupted()) { SVNUIPlugin.openError( getSite().getShell(), Policy.bind("SvnPropertiesView.errorAddTitle"), //$NON-NLS-1$ Policy.bind("SvnPropertiesView.errorAddMessage"),//$NON-NLS-1$ e); } } } }; addPropertyAction.setToolTipText(Policy.bind("SvnPropertiesView.addPropertyTooltip")); //$NON-NLS-1$ } return addPropertyAction; } private Action getModifyPropertyAction() { if (modifyPropertyAction == null) { modifyPropertyAction = new Action(Policy.bind("SvnPropertiesView.modifyPropertyLabel")) { //$NON-NLS-1$ public void run() { SVNPropertyModifyAction delegate = new SVNPropertyModifyAction(); delegate.init(this); delegate.selectionChanged(this,tableViewer.getSelection()); delegate.run(this); } }; } return modifyPropertyAction; } private Action getDeletePropertyAction() { if (deletePropertyAction == null) { deletePropertyAction = new Action(Policy.bind("SvnPropertiesView.deletePropertyLabel")) { //$NON-NLS-1$ public void run() { SVNPropertyDeleteAction delegate = new SVNPropertyDeleteAction(); delegate.init(this); delegate.selectionChanged(this,tableViewer.getSelection()); delegate.run(this); } }; } return deletePropertyAction; } /** * Adds the action contributions for this view. */ public void contributeActions() { // Contribute actions to popup menu for the table MenuManager menuMgr = new MenuManager(); Menu menu = menuMgr.createContextMenu(tableViewer.getTable()); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager menuMgr) { fillTableMenu(menuMgr); } }); menuMgr.setRemoveAllWhenShown(true); tableViewer.getTable().setMenu(menu); getSite().registerContextMenu(menuMgr, tableViewer); // Create the local tool bar IActionBars actionBars = getViewSite().getActionBars(); actionBars.setGlobalActionHandler(ActionFactory.DELETE.getId(),getDeletePropertyAction()); IToolBarManager tbm = actionBars.getToolBarManager(); tbm.add(getRefreshAction()); tbm.update(false); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(tableViewer.getControl(), IHelpContextIds.PROPERTIES_VIEW); tableViewer.addDoubleClickListener(new IDoubleClickListener() { public void doubleClick(DoubleClickEvent e) { getModifyPropertyAction().run(); } }); // set the selectionchanged listener for the table // updates property value when selection changes tableViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { ISelection selection = event.getSelection(); if (selection == null || !(selection instanceof IStructuredSelection)) { textViewer.setDocument(new Document("")); //$NON-NLS-1$ return; } IStructuredSelection ss = (IStructuredSelection)selection; if (ss.size() != 1) { textViewer.setDocument(new Document("")); //$NON-NLS-1$ return; } ISVNProperty property = (ISVNProperty)ss.getFirstElement(); textViewer.setDocument(new Document(property.getValue())); } }); tableViewer.getControl().addKeyListener(new KeyAdapter() { public void keyReleased(KeyEvent event) { if (event.character == SWT.DEL && event.stateMask == 0) { getDeletePropertyAction().run(); } } }); } /** * fill the popup menu for the table */ private void fillTableMenu(IMenuManager manager) { manager.add(getRefreshAction()); Action action = getAddPropertyAction(); try { if (resource != null) action.setEnabled(resource.isManaged()); else action.setEnabled(false); } catch (SVNException e) { action.setEnabled(false); } manager.add(action); manager.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); } /** * Method createColumns. * @param table * @param layout * @param viewer */ private void createColumns(Table table, TableLayout layout) { TableColumn col; // name col = new TableColumn(table, SWT.NONE); col.setResizable(false); layout.addColumnData(new ColumnWeightData(1, true)); // name col = new TableColumn(table, SWT.NONE); col.setResizable(true); col.setText(Policy.bind("SvnPropertiesView.propertyName")); //$NON-NLS-1$ layout.addColumnData(new ColumnWeightData(60, true)); // value col = new TableColumn(table, SWT.NONE); col.setResizable(true); col.setText(Policy.bind("SvnPropertiesView.propertyValue")); //$NON-NLS-1$ layout.addColumnData(new ColumnWeightData(120, true)); } /** * @see org.eclipse.ui.IWorkbenchPart#setFocus() */ public void setFocus() { tableViewer.getControl().setFocus(); } /** * refresh the view */ public void refresh() { Display.getDefault().syncExec(new Runnable() { public void run() { try { updateStatus(); tableViewer.setInput(getSvnProperties()); tableViewer.refresh(); } catch (SVNException e) { // silently ignore exception } } }); } /** * update the status text * */ private void updateStatus() { conflicts = null; if (resource == null) { statusLabel.setText(""); //$NON-NLS-1$ return; } try { LocalResourceStatus status = resource.getStatus(); if (!resource.isManaged()) { statusLabel.setText(Policy.bind("SvnPropertiesView.resourceNotManaged")); //$NON-NLS-1$ } else if (status.getPropStatus().equals(SVNStatusKind.MODIFIED)) { statusLabel.setText(Policy.bind("SvnPropertiesView.somePropertiesModified")); //$NON-NLS-1$ } else if (status.getPropStatus().equals(SVNStatusKind.NORMAL)) { statusLabel.setText(Policy.bind("SvnPropertiesView.noPropertiesModified")); //$NON-NLS-1$ } else if (status.getPropStatus().equals(SVNStatusKind.CONFLICTED)) { statusLabel.setText(Policy.bind("SvnPropertiesView.conflictOnProperties")); //$NON-NLS-1$ try { conflicts = PropertyConflict.getPropertyConflicts(resource); } catch (Exception e) {} } else { statusLabel.setText(""); //$NON-NLS-1$ } } catch (SVNException e) { statusLabel.setText(Policy.bind("SvnPropertiesView.errorGettingStatus")); //$NON-NLS-1$ } } /** * Shows the properties for the given resource */ public void showSvnProperties(ISVNLocalResource resource) throws SVNException { this.resource = resource; if (resource != null) { setContentDescription(Policy.bind("SvnPropertiesView.titleWithArgument", resource.getName())); //$NON-NLS-1$ } else { setContentDescription(""); //$NON-NLS-1$ } refresh(); } private ISVNProperty[] getSvnProperties() throws SVNException { if(resource == null) { // can be a null resource if we have the view open before we select anything return null; } else { if (resource.isManaged()) { return resource.getSvnProperties(); } else { return null; } } } } SvnRevPropertiesView.java000066400000000000000000000437711203611042400434460ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/svnproperties/******************************************************************************* * Copyright (c) 2004, 2010 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.svnproperties; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IToolBarManager; import org.eclipse.jface.text.Document; import org.eclipse.jface.text.TextViewer; import org.eclipse.jface.viewers.ArrayContentProvider; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ILabelProviderListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.IActionBars; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.part.ViewPart; import org.tigris.subversion.subclipse.core.IResourceStateChangeListener; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.conflicts.PropertyConflict; import org.tigris.subversion.subclipse.ui.settings.UnversionedCustomProperty; import org.tigris.subversion.svnclientadapter.ISVNProperty; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNStatusKind; public class SvnRevPropertiesView extends ViewPart { public static final String VIEW_ID = "org.tigris.subversion.subclipse.ui.svnproperties.SvnRevPropertiesView"; //$NON-NLS-1$ private TableViewer tableViewer; private TextViewer textViewer; private ISVNLocalResource resource; private ISVNRemoteResource remoteResource; private Action refreshAction; private Label statusLabel; // private ISelectionListener pageSelectionListener; // private ISelectionChangedListener historyRevisionListener; // private IResourceStateChangeListener resourceStateChangeListener; private PropertyConflict[] conflicts; class ResourceStateChangeListener implements IResourceStateChangeListener { /** * the svn status of some resources changed. Refresh if we are concerned */ public void resourceSyncInfoChanged(IResource[] changedResources) { for (int i = 0; i < changedResources.length;i++) { if (resource != null && changedResources[i].equals(resource.getIResource())) { refresh(); } } } public void resourceModified(IResource[] changedResources) {} public void projectConfigured(IProject project) {} public void projectDeconfigured(IProject project) {} public void initialize() {} } public SvnRevPropertiesView() { } /* * (non-Javadoc) * @see org.eclipse.ui.IWorkbenchPart#dispose() */ // public void dispose() { // SVNProviderPlugin.removeResourceStateChangeListener(resourceStateChangeListener); // resourceStateChangeListener = null; // getSite().getPage().removePostSelectionListener(pageSelectionListener); // if (historyRevisionListener != null) { // // } // super.dispose(); // } class PropertiesLabelProvider implements ITableLabelProvider { public PropertiesLabelProvider() { } /** * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnImage(java.lang.Object, int) */ public Image getColumnImage(Object element, int columnIndex) { if (columnIndex == 0 && element != null && conflicts != null) { ISVNProperty svnProperty = (ISVNProperty)element; for (int i = 0; i < conflicts.length; i++) { if (conflicts[i].getPropertyName().equals(svnProperty.getName())) { return SVNUIPlugin.getImage(ISVNUIConstants.IMG_PROPERTY_CONFLICTED); } } } return null; } /** * @see org.eclipse.jface.viewers.ITableLabelProvider#getColumnText(java.lang.Object, int) */ public String getColumnText(Object element, int columnIndex) { if (element == null) return ""; //$NON-NLS-1$ ISVNProperty svnProperty = (ISVNProperty)element; String result = null; switch (columnIndex) { case 1 : result = svnProperty.getName(); break; case 2 : result = svnProperty.getValue(); break; } // This method must not return null if (result == null) result = ""; //$NON-NLS-1$ return result; } /** * @see org.eclipse.jface.viewers.IBaseLabelProvider#addListener(org.eclipse.jface.viewers.ILabelProviderListener) */ public void addListener(ILabelProviderListener listener) { } /** * @see org.eclipse.jface.viewers.IBaseLabelProvider#dispose() */ public void dispose() { } /** * @see org.eclipse.jface.viewers.IBaseLabelProvider#isLabelProperty(java.lang.Object, java.lang.String) */ public boolean isLabelProperty(Object element, String property) { return false; } /** * @see org.eclipse.jface.viewers.IBaseLabelProvider#removeListener(org.eclipse.jface.viewers.ILabelProviderListener) */ public void removeListener(ILabelProviderListener listener) { } } private TableViewer createTable(Composite parent) { Table table = new Table(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION | SWT.MULTI); table.setHeaderVisible(true); table.setLinesVisible(true); GridData gridData = new GridData(GridData.FILL_BOTH); table.setLayoutData(gridData); TableLayout layout = new TableLayout(); table.setLayout(layout); tableViewer = new TableViewer(table); createColumns(table, layout); tableViewer.setContentProvider(new ArrayContentProvider()); tableViewer.setLabelProvider(new PropertiesLabelProvider()); return tableViewer; } /** * Create the TextViewer */ protected TextViewer createText(Composite parent) { return new TextViewer(parent, SWT.V_SCROLL | SWT.WRAP | SWT.MULTI | SWT.READ_ONLY); } /** * @see org.eclipse.ui.IWorkbenchPart#createPartControl(org.eclipse.swt.widgets.Composite) */ public void createPartControl(Composite parent) { GridLayout layout = new GridLayout(); layout.marginWidth = 0; layout.marginHeight = 0; layout.numColumns = 1; parent.setLayout(layout); statusLabel = new Label(parent,SWT.LEFT); GridData gridData = new GridData(GridData.FILL_HORIZONTAL); gridData.grabExcessHorizontalSpace = true; statusLabel.setLayoutData(gridData); SashForm sashForm = new SashForm(parent, SWT.VERTICAL); sashForm.setLayoutData(new GridData(GridData.FILL_BOTH)); tableViewer = createTable(sashForm); textViewer = createText(sashForm); sashForm.setWeights(new int[] { 70, 30 }); contributeActions(); // pageSelectionListener = new ISelectionListener() { // public void selectionChanged(IWorkbenchPart part, ISelection selection) { // handlePartSelectionChanged(part,selection); // } // }; // // getSite().getPage().addPostSelectionListener(pageSelectionListener); // resourceStateChangeListener = new ResourceStateChangeListener(); // SVNProviderPlugin.addResourceStateChangeListener(resourceStateChangeListener); } /** * called when the selection changed on another part */ // private void handlePartSelectionChanged(IWorkbenchPart part, ISelection selection) { // if (!(selection instanceof IStructuredSelection)) // return; // // try { // Object first = ((IStructuredSelection)selection).getFirstElement(); // // if (first instanceof IAdaptable) { // IAdaptable a = (IAdaptable) first; // Object adapter = a.getAdapter(IResource.class); // if (adapter instanceof IResource) { // IResource resource = (IResource)adapter; // // // If the resource isn't open or doesn't exist it won't have properties // if (!resource.isAccessible()) { // clearSvnProperties(); // refresh(); // } else { // ISVNLocalResource svnResource = (ISVNLocalResource)resource.getAdapter(ISVNLocalResource.class); // showSvnProperties(svnResource); // refresh(); // } // } // } // } catch (SVNException e) { // } // } private Action getRefreshAction() { if (refreshAction == null) { SVNUIPlugin plugin = SVNUIPlugin.getPlugin(); refreshAction = new Action(Policy.bind("SvnPropertiesView.refreshLabel"), plugin.getImageDescriptor(ISVNUIConstants.IMG_REFRESH_ENABLED)) { //$NON-NLS-1$ public void run() { try { if (resource != null) showSvnProperties(resource); else if (remoteResource != null) showSvnProperties(remoteResource); } catch (SVNException e) {; } // eat it refresh(); } }; refreshAction.setToolTipText(Policy.bind("SvnPropertiesView.refresh")); //$NON-NLS-1$ refreshAction.setDisabledImageDescriptor(plugin.getImageDescriptor(ISVNUIConstants.IMG_REFRESH_DISABLED)); refreshAction.setHoverImageDescriptor(plugin.getImageDescriptor(ISVNUIConstants.IMG_REFRESH)); } return refreshAction; } // TODO: Add, modify and Delete actions, this rev is just view only for now /** * Adds the action contributions for this view. */ public void contributeActions() { // Contribute actions to popup menu for the table // MenuManager menuMgr = new MenuManager(); // Menu menu = menuMgr.createContextMenu(tableViewer.getTable()); // menuMgr.addMenuListener(new IMenuListener() { // public void menuAboutToShow(IMenuManager menuMgr) { // fillTableMenu(menuMgr); // } // }); // menuMgr.setRemoveAllWhenShown(true); // tableViewer.getTable().setMenu(menu); // getSite().registerContextMenu(menuMgr, tableViewer); // Create the local tool bar IActionBars actionBars = getViewSite().getActionBars(); IToolBarManager tbm = actionBars.getToolBarManager(); tbm.add(getRefreshAction()); tbm.update(false); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(tableViewer.getControl(), IHelpContextIds.REV_PROPERTIES_VIEW); // set the selectionchanged listener for the table // updates property value when selection changes tableViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { ISelection selection = event.getSelection(); if (selection == null || !(selection instanceof IStructuredSelection)) { textViewer.setDocument(new Document("")); //$NON-NLS-1$ return; } IStructuredSelection ss = (IStructuredSelection)selection; if (ss.size() != 1) { textViewer.setDocument(new Document("")); //$NON-NLS-1$ return; } ISVNProperty property = (ISVNProperty)ss.getFirstElement(); textViewer.setDocument(new Document(property.getValue())); } }); } /** * fill the popup menu for the table */ //private void fillTableMenu(IMenuManager manager) { // manager.add(getRefreshAction()); // } /** * Method createColumns. * @param table * @param layout * @param viewer */ private void createColumns(Table table, TableLayout layout) { TableColumn col; // name col = new TableColumn(table, SWT.NONE); col.setResizable(false); layout.addColumnData(new ColumnWeightData(1, true)); // name col = new TableColumn(table, SWT.NONE); col.setResizable(true); col.setText(Policy.bind("SvnPropertiesView.propertyName")); //$NON-NLS-1$ layout.addColumnData(new ColumnWeightData(60, true)); // value col = new TableColumn(table, SWT.NONE); col.setResizable(true); col.setText(Policy.bind("SvnPropertiesView.propertyValue")); //$NON-NLS-1$ layout.addColumnData(new ColumnWeightData(120, true)); } /** * @see org.eclipse.ui.IWorkbenchPart#setFocus() */ public void setFocus() { tableViewer.getControl().setFocus(); } /** * refresh the view */ public void refresh() { Display.getDefault().syncExec(new Runnable() { public void run() { try { ISVNProperty[] props = getSvnRevProperties(); tableViewer.setInput(props); tableViewer.refresh(); } catch (SVNException e) { // silently ignore exception } } }); } /** * update the status text * */ private void updateStatus() { conflicts = null; if (resource == null && remoteResource == null) { statusLabel.setText(""); //$NON-NLS-1$ return; } if (resource != null) { try { LocalResourceStatus status = resource.getStatus(); if (!resource.isManaged()) { statusLabel.setText(Policy.bind("SvnPropertiesView.resourceNotManaged")); //$NON-NLS-1$ } else if (status.getPropStatus().equals(SVNStatusKind.MODIFIED)) { statusLabel.setText(Policy.bind("SvnPropertiesView.somePropertiesModified")); //$NON-NLS-1$ } else if (status.getPropStatus().equals(SVNStatusKind.NORMAL)) { statusLabel.setText(Policy.bind("SvnPropertiesView.noPropertiesModified")); //$NON-NLS-1$ } else if (status.getPropStatus().equals(SVNStatusKind.CONFLICTED)) { statusLabel.setText(Policy.bind("SvnPropertiesView.conflictOnProperties")); //$NON-NLS-1$ try { conflicts = PropertyConflict.getPropertyConflicts(resource); } catch (Exception e) {} } else { statusLabel.setText(""); //$NON-NLS-1$ } } catch (SVNException e) { statusLabel.setText(Policy.bind("SvnPropertiesView.errorGettingStatus")); //$NON-NLS-1$ } } } public void clearSvnProperties() { setContentDescription(""); updateStatus(); } /** * Shows the properties for the given resource */ public void showSvnProperties(ISVNLocalResource resource) throws SVNException { this.resource = resource; this.remoteResource = null; if (resource != null) { if (resource.isManaged()) { if (resource.getRevision() != null) { setContentDescription(Policy.bind("SvnRevPropertiesView.titleWithTwoArguments", resource.getRevision().toString(), resource.getName())); //$NON-NLS-1$ } } else { setContentDescription(Policy.bind("SvnRevPropertiesView.titleWithOneArgument", resource.getName())); //$NON-NLS-1$ } } else { setContentDescription(""); //$NON-NLS-1$ } updateStatus(); } /** * Shows the properties for the given resource */ public void showSvnProperties(ISVNRemoteResource resource) throws SVNException { this.remoteResource = resource; this.resource = null; if (remoteResource != null) { if (remoteResource.getRevision() != null) { setContentDescription(Policy.bind("SvnRevPropertiesView.titleWithTwoArguments", remoteResource.getRevision().toString(), remoteResource.getName())); //$NON-NLS-1$ } } else { setContentDescription(""); //$NON-NLS-1$ } updateStatus(); } private ISVNProperty[] getSvnRevProperties() throws SVNException { if(resource != null && resource.isManaged()) { SVNRevision rev = resource.getRevision(); ISVNRemoteResource remoteResource = resource.getRemoteResource(rev); return UnversionedCustomProperty.getSvnRevisionProperties(remoteResource.getUrl(), rev, null); } if (remoteResource != null) { SVNRevision rev = remoteResource.getRevision(); return UnversionedCustomProperty.getSvnRevisionProperties(remoteResource.getUrl(), rev, null); } return null; } } 000077500000000000000000000000001203611042400344655ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/syncOverlayIcon.java000066400000000000000000000045231203611042400375660ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/sync/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.sync; import java.util.Arrays; import org.eclipse.jface.resource.CompositeImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; /** * An OverlayIcon consists of a main icon and several adornments. */ public abstract class OverlayIcon extends CompositeImageDescriptor { // the base image private Image base; // the overlay images private ImageDescriptor[] overlays; // the size private Point size; // the locations private int[] locations; public static final int TOP_LEFT = 0; public static final int TOP_RIGHT = 1; public static final int BOTTOM_LEFT = 2; public static final int BOTTOM_RIGHT = 3; /** * OverlayIcon constructor. * * @param base the base image * @param overlays the overlay images * @param locations the location of each image * @param size the size */ public OverlayIcon(Image base, ImageDescriptor[] overlays, int[] locations, Point size) { this.base = base; this.overlays = overlays; this.locations = locations; this.size = size; } /** * Superclasses override to draw the overlays. */ protected abstract void drawOverlays(ImageDescriptor[] overlays, int[] locations); public boolean equals(Object o) { if (! (o instanceof OverlayIcon)) return false; OverlayIcon other = (OverlayIcon) o; return base.equals(other.base) && Arrays.equals(overlays, other.overlays); } public int hashCode() { int code = base.hashCode(); for (int i = 0; i < overlays.length; i++) { code ^= overlays[i].hashCode(); } return code; } protected void drawCompositeImage(int width, int height) { drawImage(base.getImageData(), 0, 0); drawOverlays(overlays, locations); } protected Point getSize() { return size; } } OverlayIconCache.java000066400000000000000000000026041203611042400405100ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/sync/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.sync; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import org.eclipse.swt.graphics.Image; /** * Maintains a cache of OverlayIcons. */ public class OverlayIconCache { private Map /*from OverlayIcon to Image*/ cache = new HashMap(); /** * Returns and caches an image corresponding to the specified icon. * @param icon the icon * @return the image */ public Image getImageFor(OverlayIcon icon) { Image image = (Image) cache.get(icon); if (image == null) { image = icon.createImage(); cache.put(icon, image); } return image; } /** * Disposes of all images in the cache. */ public void disposeAll() { for (Iterator it = cache.values().iterator(); it.hasNext();) { Image image = (Image) it.next(); image.dispose(); } cache.clear(); } } 000077500000000000000000000000001203611042400344665ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/utilAdaptableList.java000066400000000000000000000053471203611042400400530ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/util/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.util; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.ui.model.IWorkbenchAdapter; /** * A list of adaptable objects. This is a generic list that can * be used to display an arbitrary set of adaptable objects in the workbench. * Also implements the IWorkbenchAdapter interface for simple display * and navigation. */ public class AdaptableList extends WorkbenchAdapter implements IAdaptable { protected List children = null; /** * Creates a new adaptable list. */ public AdaptableList() { children = new ArrayList(); } /** * Creates a new adaptable list with the given size. */ public AdaptableList(int size) { children = new ArrayList(size); } /** * Creates a new adaptable list with the given children. */ public AdaptableList(IAdaptable[] newChildren) { this(newChildren.length); for (int i = 0; i < newChildren.length; i++) { children.add(newChildren[i]); } } /** * Adds all the adaptable objects in the given enumeration to this list. * Returns this list. */ public AdaptableList add(Iterator e) { while (e.hasNext()) { add((IAdaptable)e.next()); } return this; } /** * Adds the given adaptable object to this list. Returns this list. */ public AdaptableList add(IAdaptable a) { children.add(a); return this; } /** * Returns an object which is an instance of the given class * associated with this object. Returns null if * no such object can be found. */ public Object getAdapter(Class adapter) { if (adapter == IWorkbenchAdapter.class) return this; return null; } /** * Returns the elements in this list. */ public Object[] getChildren() { return children.toArray(); } /** * Returns the elements in this list. * @see IWorkbenchAdapter#getChildren */ public Object[] getChildren(Object o) { return children.toArray(); } /** * Adds the given adaptable object to this list. */ public void remove(IAdaptable a) { children.remove(a); } /** * Returns the number of items in the list */ public int size() { return children.size(); } /** * For debugging purposes only. */ public String toString() { return children.toString(); } } ContainerContentProvider.java000066400000000000000000000071021203611042400423210ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/util/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.util; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.Viewer; /** * Provides content for a tree viewer that shows only containers. */ public class ContainerContentProvider implements ITreeContentProvider { private boolean showClosedProjects = true; /** * Creates a new ResourceContentProvider. */ public ContainerContentProvider() { } /** * The visual part that is using this content provider is about * to be disposed. Deallocate all allocated SWT resources. */ public void dispose() {} /** * @see ITreeContentProvider#getChildren */ public Object[] getChildren(Object element) { if (element instanceof IWorkspace) { // check if closed projects should be shown IProject[] allProjects = ((IWorkspace) element).getRoot().getProjects(); if (showClosedProjects) return allProjects; ArrayList accessibleProjects = new ArrayList(); for (int i = 0; i < allProjects.length; i++){ if (allProjects[i].isOpen()){ accessibleProjects.add(allProjects[i]); } } return accessibleProjects.toArray(); } else if (element instanceof IContainer) { IContainer container = (IContainer)element; if (container.isAccessible()) { try { List children = new ArrayList(); IResource[] members = container.members(); for (int i = 0; i < members.length; i++) { if (members[i].getType() != IResource.FILE) { children.add(members[i]); } } return children.toArray(); } catch (CoreException e) { // this should never happen because we call #isAccessible before invoking #members } } } return new Object[0]; } /** * @see ITreeContentProvider#getElements */ public Object[] getElements(Object element) { return getChildren(element); } /** * @see ITreeContentProvider#getParent */ public Object getParent(Object element) { if (element instanceof IResource) return ((IResource) element).getParent(); return null; } /** * @see ITreeContentProvider#hasChildren */ public boolean hasChildren(Object element) { return getChildren(element).length > 0; } /** * @see IContentProvider#isDeleted */ public boolean isDeleted(Object element) { return ((element instanceof IResource) && !((IResource) element).exists()); } /** * Specify whether or not to show closed projects in the tree * viewer. Default is to show closed projects. * * @param show boolean if false, do not show closed projects in the tree */ public void showClosedProjects(boolean show){ showClosedProjects = show; } /* (non-Javadoc) * @see org.eclipse.jface.viewers.IContentProvider#inputChanged(org.eclipse.jface.viewers.Viewer, java.lang.Object, java.lang.Object) */ public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } } DaySelectionCanvas.java000066400000000000000000000273751203611042400410660ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/util/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.util; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.MouseAdapter; import org.eclipse.swt.events.MouseEvent; import org.eclipse.swt.events.PaintEvent; import org.eclipse.swt.events.PaintListener; import org.eclipse.swt.events.TraverseEvent; import org.eclipse.swt.events.TraverseListener; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.GC; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Canvas; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Display; /** * Special canvas used to display the days of a month on. Every column represents * the day of a week from monday till sunday. */ public class DaySelectionCanvas extends Canvas { private final static Color BLACK = Display.getCurrent().getSystemColor(SWT.COLOR_BLACK); private final static Color GRAY = Display.getCurrent().getSystemColor(SWT.COLOR_GRAY); private final static Color SELECTION_FOREGROUND = Display.getCurrent().getSystemColor(SWT.COLOR_WHITE); private final static Color WHITE = Display.getCurrent().getSystemColor(SWT.COLOR_WHITE); private Color selectionBackgroundColor = Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GRAY); private final int WIDTH = 210; private final int HEIGHT = 140; private int[] days; private String[] header; private int selection; /** * Constructs a DaySelectionCanvas for displaying days of a month. * @param parent parent widget * @param style style of the canvas */ public DaySelectionCanvas(Composite parent, int style) { super(parent, style); selection = -1; setBackground(Display.getCurrent().getSystemColor(SWT.COLOR_WHITE)); addPaintListener(new DaySelectPaintListener()); addMouseListener(new DaySelectMouseListener()); addTraverseListener(new TraverseListener() { public void keyTraversed(TraverseEvent e) { e.doit = true; } }); // Enable focusing on the canvas addKeyListener(new KeyAdapter() {}); addFocusListener(new FocusListener() { /* * (non-Javadoc) * @see org.eclipse.swt.events.FocusListener#focusGained(org.eclipse.swt.events.FocusEvent) */ public void focusGained(FocusEvent e) { // We do not need to (or want to!) dispose system colors that we did not create. // selectionBackgroundColor.dispose(); selectionBackgroundColor = Display.getCurrent().getSystemColor(SWT.COLOR_DARK_BLUE); redraw(); } /* * (non-Javadoc) * @see org.eclipse.swt.events.FocusListener#focusLost(org.eclipse.swt.events.FocusEvent) */ public void focusLost(FocusEvent e) { // We do not need to (or want to!) dispose system colors that we did not create. // selectionBackgroundColor.dispose(); selectionBackgroundColor = Display.getCurrent().getSystemColor(SWT.COLOR_DARK_GRAY); redraw(); } }); } /** * Set the days to be displayed. The first days are expected to be from the * previous month and grayed out. The days of this month are black and the tailing * days of the next month are grayed out. The canvas is automatically redrawn. * @param days array with days represented as ints * @return if the array is valid */ public boolean setDays(int[] days) { if ((days == null) || (days.length < 1)) { days = null; return false; } int i = 0; while ((i < days.length) && (days[i] > 1)) { i++; } if ((i >= days.length) || (days[i] > 1)) { days = null; return false; } this.days = days; this.selection = -1; redraw(); return true; } /** * Sets the header text containing the days of the week. * @param header array of strings to be displayed as header */ public void setHeader(String[] header) { this.header = header; redraw(); } /** * @return the selected day of the month */ public int getSelectedDay() { if (isValidSelection(selection)) { return days[selection]; } return -1; } /** * Set the selection to the specified day. * @param day day to be selected */ public void setSelectedDay(int day) { if (days == null) { selection = -1; return; } for (int i=0; itrue iff the selected day is enabled * for selection, false otherwise */ private boolean isValidSelection(int day) { if ((days == null) || (day > days.length)) { return false; } int i=0; while ((i < days.length) && (days[i] > 1)) { if (i == day) return false; i++; } if (i == day) { return true; } i++; for (; (i < days.length) && (days[i] > 1); i++) { if (i == day) return true; } return false; } /** * Computes the width of a column. * @param width width available for columns * @return width of one column */ private int getColumnWidth(int width) { return width/7; } /** * Computes the height of a row. * @param height height available for rows * @return height of one row */ private int getRowHeight(int height) { return height/7; } /** * Listener that is used for painting the header and days on the canvas. */ private class DaySelectPaintListener implements PaintListener { /* * (non-Javadoc) * @see org.eclipse.swt.events.PaintListener#paintControl(org.eclipse.swt.events.PaintEvent) */ public void paintControl(PaintEvent e) { Point controlSize = ((Control) e.getSource()).getSize(); int height = controlSize.y; int rowHeight = getRowHeight(height); int width = controlSize.x; int columnWidth = getColumnWidth(width); GC gc = e.gc; // gets the SWT graphics context from the event gc.setBackground(WHITE); gc.fillRectangle(0, 0, width, height); // Draw header gc.setForeground(BLACK); gc.setLineWidth(2); gc.drawLine(0, getRowHeight(height), width, getRowHeight(height)); if (header != null) { for (int i=0; i 0) { gc.setForeground(GRAY); int i=0; while ((i < days.length) && (days[i] > 1)) { drawDay(gc, i, days, columnWidth, rowHeight); i++; } gc.setForeground(BLACK); drawDay(gc, i, days, columnWidth, rowHeight); i++; for (; (i < days.length) && (days[i] > 1); i++) { drawDay(gc, i, days, columnWidth, rowHeight); } gc.setForeground(GRAY); for (; i < days.length; i++) { drawDay(gc, i, days, columnWidth, rowHeight); } } gc.dispose(); } /** * Draws a day on the canvas. * @param gc GC used to draw * @param days item to be drawn * @param days array with days * @param columnWidth width of a column * @param rowHeight height of a row */ private void drawDay(GC gc, int item, int[] days, int columnWidth, int rowHeight) { Color tempBackground = null; Color tempForeground = null; boolean validSelection = isValidSelection(item); if (validSelection && (item == selection)) { tempBackground = gc.getBackground(); tempForeground = gc.getForeground(); gc.setBackground(selectionBackgroundColor); gc.setForeground(SELECTION_FOREGROUND); int height = rowHeight; int width = columnWidth; int x = columnWidth * (item % 7); if (x > 0) { x++; width--; } int y = rowHeight * (item / 7 + 1) + 1; height--; if (y == rowHeight) { y++; height--; } gc.fillRectangle(x, y, width, height); gc.setBackground(tempBackground); } String dayString = String.valueOf(days[item]); Point position = getDayPosition(gc, item, days, columnWidth, rowHeight); gc.drawText(dayString, position.x, position.y, SWT.DRAW_TRANSPARENT); if (validSelection && (item == selection)) { gc.setForeground(tempForeground); } } /** * Compute the point where to draw a header string. * @param gc GC used to draw * @param item header item to be drawn * @param header array with header strings * @param columnWidth width of a column * @param rowHeight height of a row * @return the point where the header string has to be drawn */ private Point getHeaderPosition(GC gc, int item, String[] header, int columnWidth, int rowHeight) { int column = item % 7; Point size = gc.textExtent(String.valueOf(header[item]), SWT.DRAW_TRANSPARENT); int x = column * columnWidth + columnWidth/2 - size.x/2; int y = rowHeight/2 - size.y/2; return new Point(x, y); } /** * Compute the point where to draw a day. * @param gc GC used to draw * @param item days item to be drawn * @param days array with days * @param columnWidth width of a column * @param rowHeight height of a row * @return the point where the day string has to be drawn */ private Point getDayPosition(GC gc, int item, int[] days, int columnWidth, int rowHeight) { int row = item / 7 + 1; int column = item % 7; Point size = gc.textExtent(String.valueOf(days[item]), SWT.DRAW_TRANSPARENT); int x = column * columnWidth + columnWidth/2 - size.x/2; int y = row * rowHeight + rowHeight/2 - size.y/2; return new Point(x, y); } } /** * MouseListener to set a day selection. */ private class DaySelectMouseListener extends MouseAdapter { public void mouseDown(MouseEvent e) { Point size = ((Control)e.getSource()).getSize(); setSelection(new Point(e.x, e.y), size); } } } DetailsDialog.java000066400000000000000000000167651203611042400400550ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/util/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.util; import org.eclipse.jface.dialogs.TrayDialog; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; /** * A simple superclass for detail button dialogs. */ abstract public class DetailsDialog extends TrayDialog { /** * The Details button. */ private Button detailsButton; /** * The Ok button. */ private Button okButton; /** * The title of the dialog. */ private String title; /** * The error message */ private Label errorMessageLabel; /** * The SWT list control that displays the error details. */ private Composite detailsComposite; /** * Indicates whether the error details viewer is currently created. */ private boolean detailsCreated = false; /** * The image to be displayed */ private Image image = null; /** * Creates a details pane dialog. * Note that the dialog will have no visual representation (no widgets) * until it is told to open. * * @param parentShell the shell under which to create this dialog * @param dialogTitle the title to use for this dialog * @param message the message to show in this dialog * @param status the error to show to the user * @param displayMask the mask to use to filter the displaying of child items, * as per IStatus.matches * @see org.eclipse.core.runtime.IStatus#matches */ public DetailsDialog(Shell parentShell, String dialogTitle) { super(parentShell); this.title = dialogTitle; setShellStyle(SWT.DIALOG_TRIM | SWT.RESIZE | SWT.APPLICATION_MODAL); } /* (non-Javadoc) * Method declared on Dialog. * Handles the pressing of the Ok or Details button in this dialog. * If the Ok button was pressed then close this dialog. If the Details * button was pressed then toggle the displaying of the error details area. * Note that the Details button will only be visible if the error being * displayed specifies child details. */ protected void buttonPressed(int id) { if (id == IDialogConstants.DETAILS_ID) { // was the details button pressed? toggleDetailsArea(); } else { super.buttonPressed(id); } } /* (non-Javadoc) * Method declared in Window. */ protected void configureShell(Shell shell) { super.configureShell(shell); shell.setText(title); } /* (non-Javadoc) * Method declared on Dialog. */ protected void createButtonsForButtonBar(Composite parent) { // create OK and Details buttons if(includeOkButton()) { okButton = createButton(parent, IDialogConstants.OK_ID, IDialogConstants.OK_LABEL, true); } if (includeCancelButton()) { createButton(parent, IDialogConstants.CANCEL_ID, IDialogConstants.CANCEL_LABEL, false); } detailsButton = createButton(parent, IDialogConstants.DETAILS_ID, IDialogConstants.SHOW_DETAILS_LABEL, false); updateEnablements(); } /* (non-Javadoc) * Method declared on Dialog. * Creates and returns the contents of the upper part * of the dialog (above the button bar). */ final protected Control createDialogArea(Composite parent) { // create composite Composite composite = (Composite)super.createDialogArea(parent); // create image if (image != null) { // create a composite to split the dialog area in two Composite top = new Composite(composite, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; layout.verticalSpacing = 0; layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); layout.numColumns = 2; top.setLayout(layout); top.setLayoutData(new GridData(GridData.FILL_BOTH)); top.setFont(parent.getFont()); // add the image to the left of the composite Label label = new Label(top, 0); image.setBackground(label.getBackground()); label.setImage(image); label.setLayoutData(new GridData( GridData.HORIZONTAL_ALIGN_CENTER | GridData.VERTICAL_ALIGN_CENTER)); // add a composite to the right to contain the custom components Composite right = new Composite(top, SWT.NONE); layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); right.setLayout(layout); right.setLayoutData(new GridData(GridData.FILL_BOTH)); right.setFont(parent.getFont()); createMainDialogArea(right); } else { createMainDialogArea(composite); } errorMessageLabel = new Label(composite, SWT.NONE); errorMessageLabel.setLayoutData(new GridData( GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); errorMessageLabel.setFont(parent.getFont()); errorMessageLabel.setForeground(getShell().getDisplay().getSystemColor(SWT.COLOR_RED)); return composite; } /** * Creates the dialog's top composite * * @param parent the parent composite */ abstract protected void createMainDialogArea(Composite parent); /** * Create this dialog's drop-down list component. * * @param parent the parent composite * @return the drop-down list component */ abstract protected Composite createDropDownDialogArea(Composite parent); /** * Toggles the unfolding of the details area. This is triggered by * the user pressing the details button. */ private void toggleDetailsArea() { Point windowSize = getShell().getSize(); Point oldSize = getContents().computeSize(SWT.DEFAULT, SWT.DEFAULT); if (detailsCreated) { detailsComposite.dispose(); detailsCreated = false; detailsButton.setText(IDialogConstants.SHOW_DETAILS_LABEL); } else { detailsComposite = createDropDownDialogArea((Composite)getContents()); detailsCreated = true; detailsButton.setText(IDialogConstants.HIDE_DETAILS_LABEL); } Point newSize = getContents().computeSize(SWT.DEFAULT, SWT.DEFAULT); getShell().setSize(new Point(windowSize.x, windowSize.y + (newSize.y - oldSize.y))); } final protected void setErrorMessage(String error) { if(errorMessageLabel != null) { if(error == null || error.length() == 0) { errorMessageLabel.setText(""); //$NON-NLS-1$ } else { errorMessageLabel.setText(error); } errorMessageLabel.update(); } } final protected void setPageComplete(boolean complete) { if(okButton != null ) { okButton.setEnabled(complete); } } abstract protected void updateEnablements(); protected boolean includeCancelButton() { return true; } protected boolean includeOkButton() { return true; } /** * Sets the imageKey. * @param imageKey The imageKey to set */ protected void setImage(Image image) { this.image = image; } } DetailsDialogWithProjects.java000066400000000000000000000074711203611042400424150ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/util/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.util; import org.eclipse.core.resources.IProject; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; /** * Display a message with a details that can contain a list of projects */ public class DetailsDialogWithProjects extends DetailsDialog { private String message; private String detailsTitle; private IProject[] projects; private org.eclipse.swt.widgets.List detailsList; private boolean includeCancelButton; /** * Constructor for DetailsDialogWithProjects. * @param parentShell * @param dialogTitle */ public DetailsDialogWithProjects(Shell parentShell, String dialogTitle, String dialogMessage, String detailsTitle, IProject[] projects, boolean includeCancelButton, Image image) { super(parentShell, dialogTitle); setImage(image); this.message = dialogMessage; this.detailsTitle = detailsTitle; this.projects = projects; this.includeCancelButton = includeCancelButton; } /** * @see DetailsDialog#createMainDialogArea(Composite) */ protected void createMainDialogArea(Composite composite) { Label label = new Label(composite, SWT.WRAP); label.setText(message); //$NON-NLS-1$ GridData data = new GridData( GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.HORIZONTAL_ALIGN_FILL | GridData.VERTICAL_ALIGN_CENTER); data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH); label.setLayoutData(data); label.setFont(composite.getFont()); updateEnablements(); } /** * @see DetailsDialog#createDropDownDialogArea(Composite) */ protected Composite createDropDownDialogArea(Composite parent) { // create a composite with standard margins and spacing Composite composite = new Composite(parent, SWT.NONE); GridLayout layout = new GridLayout(); layout.marginHeight = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); layout.marginWidth = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); layout.verticalSpacing = convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_SPACING); layout.horizontalSpacing = convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_SPACING); composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); composite.setFont(parent.getFont()); detailsList = new org.eclipse.swt.widgets.List(composite, SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); GridData data = new GridData (); data.heightHint = 75; data.horizontalAlignment = GridData.FILL; data.grabExcessHorizontalSpace = true; detailsList.setLayoutData(data); if (detailsTitle != null) { detailsList.add(detailsTitle); } for (int i = 0; i < projects.length; i++) { detailsList.add(projects[i].getName()); //$NON-NLS-1$ } return composite; } /** * @see DetailsDialog#updateEnablements() */ protected void updateEnablements() { setPageComplete(true); } /** * @see DetailsDialog#includeCancelButton() */ protected boolean includeCancelButton() { return includeCancelButton; } } DiffImage.java000066400000000000000000000032721203611042400371500ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/utilpackage org.tigris.subversion.subclipse.ui.util; import org.eclipse.jface.resource.CompositeImageDescriptor; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.ImageData; import org.eclipse.swt.graphics.Point; public class DiffImage extends CompositeImageDescriptor { static final int HEIGHT= 16; private Image fBaseImage; private ImageDescriptor fOverlayImage; private int fWidth; private boolean fLeft= true; public DiffImage(Image base, ImageDescriptor overlay, int w) { fBaseImage= base; fOverlayImage= overlay; fWidth= w; } public DiffImage(Image base, ImageDescriptor overlay, int w, boolean onLeft) { fBaseImage= base; fOverlayImage= overlay; fWidth= w; fLeft= onLeft; } protected Point getSize() { return new Point(fWidth, HEIGHT); } protected void drawCompositeImage(int width, int height) { if (fLeft) { if (fBaseImage != null) { ImageData base= fBaseImage.getImageData(); if (base == null) base= DEFAULT_IMAGE_DATA; drawImage(base, fWidth - base.width, 0); } if (fOverlayImage != null) { ImageData overlay= fOverlayImage.getImageData(); if (overlay == null) overlay= DEFAULT_IMAGE_DATA; drawImage(overlay, 0, (HEIGHT - overlay.height) / 2); } } else { if (fBaseImage != null) { ImageData base= fBaseImage.getImageData(); if (base == null) base= DEFAULT_IMAGE_DATA; drawImage(base, 0, 0); } if (fOverlayImage != null) { ImageData overlay= fOverlayImage.getImageData(); if (overlay == null) overlay= DEFAULT_IMAGE_DATA; drawImage(overlay, fWidth - overlay.width, (HEIGHT - overlay.height) / 2); } } } } EmptySearchViewerFilter.java000066400000000000000000000024131203611042400421050ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/util/******************************************************************************* * Copyright (c) 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.util; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.viewers.ViewerFilter; /** * The EmptySearchViewerFilter is a ViewerFilter that can be applied * to a table in order to filter all entries out of the table. */ public class EmptySearchViewerFilter extends ViewerFilter { /*** * Construct a new EmptySearchViewerFilter */ public EmptySearchViewerFilter() { } /** * Returns always false in order to generate * @param viewer the viewer * @param parentElement the parent element * @param element the element * @return false */ public boolean select(Viewer viewer, Object parentElement, Object element) { return false; } } IPromptCondition.java000066400000000000000000000017771203611042400406060ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/util/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.util; import org.eclipse.core.resources.IResource; /** * Input to a confirm prompt * * @see PromptingDialog */ public interface IPromptCondition { /** * Answers true if a prompt is required for this resource and * false otherwise. */ public boolean needsPrompt(IResource resource); /** * Answers the message to include in the prompt. */ public String promptMessage(IResource resource); } LinkList.java000066400000000000000000000041021203611042400370570ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/util/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.util; public class LinkList { private int[][] linkRanges; private String[] urls; private String[] texts; public LinkList(int[][] linkRanges, String[] urls) { this(linkRanges, urls, null); } public LinkList(int[][] linkRanges, String[] urls, String[] texts) { super(); this.linkRanges = linkRanges; this.urls = urls; this.texts = texts; } public boolean isLinkAt(int offset) { for (int i = 0; i < linkRanges.length; i++){ if (offset >= linkRanges[i][0] && offset < linkRanges[i][0] + linkRanges[i][1]) { return true; } } return false; } public String getLinkAt(int offset) { for (int i = 0; i < linkRanges.length; i++){ if (offset >= linkRanges[i][0] && offset < linkRanges[i][0] + linkRanges[i][1]) { return urls[i]; } } return null; } public int[] getLinkRange(int offset) { for (int i = 0; i < linkRanges.length; i++){ if (offset >= linkRanges[i][0] && offset < linkRanges[i][0] + linkRanges[i][1]) { return linkRanges[i]; } } return null; } public int[][] getLinkRanges() { return linkRanges; } public void setLinkRanges(int[][] linkRanges) { this.linkRanges = linkRanges; } public String[] getUrls() { return urls; } public void setUrls(String[] urls) { this.urls = urls; } public String[] getTexts() { return texts; } } ListContentProvider.java000066400000000000000000000026021203611042400413120ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/util/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.util; import java.util.List; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.Viewer; /** * A specialized content provider to show a list of editor parts. */ public class ListContentProvider implements IStructuredContentProvider { List fContents; public ListContentProvider() { } public Object[] getElements(Object input) { if (fContents != null && fContents == input) return fContents.toArray(); return new Object[0]; } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { if (newInput instanceof List) fContents= (List)newInput; else fContents= null; // we use a fixed set. } public void dispose() { } public boolean isDeleted(Object o) { return fContents != null && !fContents.contains(o); } }PromptingDialog.java000066400000000000000000000070401203611042400404310ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/util/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.util; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IResource; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Shell; /** * A confirmation dialog helper that will either show a 'yes/no/yes to all/cancel' * dialog to confirm an action performed on several resources or if only one * resource is specified 'ok/cancel' will be shown. */ public class PromptingDialog { private IResource[] resources; private Shell shell; private String[] buttons; private boolean confirmOverwrite = true; private IPromptCondition condition; private String title; private boolean hasMultipleResources; /** * Prompt for the given resources using the specific condition. The prompt dialog will * have the title specified. */ public PromptingDialog(Shell shell, IResource[] resources, IPromptCondition condition, String title) { this.condition = condition; this.resources = resources; this.title = title; this.shell = shell; this.hasMultipleResources = resources.length > 1; if (hasMultipleResources) { buttons = new String[] { IDialogConstants.YES_LABEL, IDialogConstants.YES_TO_ALL_LABEL, IDialogConstants.NO_LABEL, IDialogConstants.CANCEL_LABEL}; } else { buttons = new String[] {IDialogConstants.OK_LABEL, IDialogConstants.CANCEL_LABEL}; } } /** * Call to calculate and show prompt. If no resources satisfy the prompt condition * a dialog won't be shown. The resources for which the user confirmed the action * are returned. */ public IResource[] promptForMultiple() throws InterruptedException { List targetResources = new ArrayList(); for (int i = 0; i < resources.length; i++) { IResource resource = resources[i]; if (condition.needsPrompt(resource) && confirmOverwrite) { if (confirmOverwrite(condition.promptMessage(resource))) { targetResources.add(resource); } } else { targetResources.add(resource); } } return (IResource[]) targetResources.toArray(new IResource[targetResources.size()]); } /** * Opens the confirmation dialog based on the prompt condition settings. */ private boolean confirmOverwrite(String msg) throws InterruptedException { if (!confirmOverwrite) { return true; } final MessageDialog dialog = new MessageDialog(shell, title, null, msg, MessageDialog.QUESTION, buttons, 0); // run in syncExec because callback is from an operation, // which is probably not running in the UI thread. shell.getDisplay().syncExec( new Runnable() { public void run() { dialog.open(); } }); if (hasMultipleResources) { switch (dialog.getReturnCode()) { case 0://Yes return true; case 1://Yes to all confirmOverwrite = false; return true; case 2://No return false; case 3://Cancel default: throw new InterruptedException(); } } else { return dialog.getReturnCode() == 0; } } }ResourceSelectionTree.java000066400000000000000000000726451203611042400416240ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/utilpackage org.tigris.subversion.subclipse.ui.util; import java.util.ArrayList; import java.util.Arrays; import java.util.Comparator; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; import java.util.List; import java.util.Set; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.structuremergeviewer.Differencer; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspaceRoot; import org.eclipse.core.runtime.IPath; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.action.Separator; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTreeViewer; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.CLabel; import org.eclipse.swt.custom.ViewForm; import org.eclipse.swt.events.KeyAdapter; import org.eclipse.swt.events.KeyEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.ToolBar; import org.eclipse.swt.widgets.Tree; import org.eclipse.swt.widgets.TreeItem; import org.eclipse.team.core.diff.IDiff; import org.eclipse.team.core.diff.IThreeWayDiff; import org.eclipse.team.core.diff.ITwoWayDiff; import org.eclipse.team.core.synchronize.SyncInfo; import org.eclipse.team.core.synchronize.SyncInfoSet; import org.eclipse.team.ui.synchronize.AbstractSynchronizeLabelProvider; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.dialogs.ResourceWithStatusUtil; import org.tigris.subversion.svnclientadapter.SVNStatusKind; public class ResourceSelectionTree extends Composite { private Tree tree; private int mode; private IResource[] resources; private ArrayList resourceList; private Set unversionedResourceList; private IContainer[] compressedFolders; private IContainer[] folders; private ArrayList folderList; private IContainer[] rootFolders; private ArrayList compressedFolderList; private TreeViewer treeViewer; private LabelProvider labelProvider; private String label; private Action treeAction; private Action flatAction; private Action compressedAction; private IDialogSettings settings; private HashMap statusMap; private ResourceComparator comparator = new ResourceComparator(); private boolean checkbox; private IToolbarControlCreator toolbarControlCreator; private IRemoveFromViewValidator removeFromViewValidator; private SyncInfoSet syncInfoSet; private boolean showRemoveFromViewAction = true; private ResourceSelectionTreeDecorator resourceSelectionTreeDecorator = new ResourceSelectionTreeDecorator(); private boolean resourceRemoved = false; private boolean includeUnversioned = true; private ResourceSelectionContentProvider resourceSelectionContentProvider = new ResourceSelectionContentProvider(); private Action[] customOptions; public final static String MODE_SETTING = "ResourceSelectionTree.mode"; //$NON-NLS-1$ public final static int MODE_COMPRESSED_FOLDERS = 0; public final static int MODE_FLAT = 1; public final static int MODE_TREE = 2; private final static int SPACEBAR = 32; public ResourceSelectionTree(Composite parent, int style, String label, IResource[] resources, HashMap statusMap, LabelProvider labelProvider, boolean checkbox, IToolbarControlCreator toolbarControlCreator, SyncInfoSet syncInfoSet) { super(parent, style); this.label = label; this.resources = resources; this.statusMap = statusMap; this.labelProvider = labelProvider; this.checkbox = checkbox; this.toolbarControlCreator = toolbarControlCreator; this.syncInfoSet = syncInfoSet; this.settings = SVNUIPlugin.getPlugin().getDialogSettings(); if(resources!=null) { Arrays.sort(resources, comparator); resourceList = new ArrayList(); for (int i = 0; i < resources.length; i++) { IResource resource = resources[i]; resourceList.add(resource); } unversionedResourceList = new HashSet(); try { for (int i = 0; i < resources.length; i++) { IResource resource = resources[i]; ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); if(resource.exists() && !svnResource.getStatus().isManaged() ) { unversionedResourceList.add(resource); } } } catch(Exception e) { SVNUIPlugin.openError(getShell(), null, null, e); } } createControls(); } public TreeViewer getTreeViewer() { return treeViewer; } public IResource[] getSelectedResources() { if (!checkbox) return resources; ArrayList selected = new ArrayList(); Object[] checkedResources = ((CheckboxTreeViewer)treeViewer).getCheckedElements(); for (int i = 0; i < checkedResources.length; i++) { if (resourceList.contains(checkedResources[i])) selected.add(checkedResources[i]); } IResource[] selectedResources = new IResource[selected.size()]; selected.toArray(selectedResources); return selectedResources; } public void setCustomOptions(Action[] customOptions) { this.customOptions = customOptions; } private void createControls() { setLayout(new GridLayout(2, false)); setLayoutData(new GridData(GridData.FILL_BOTH)); ViewForm viewerPane = new ViewForm(this, SWT.BORDER | SWT.FLAT); viewerPane.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1)); // Composite treeGroup = new Composite(viewerPane, SWT.NONE); // // GridLayout treeLayout = new GridLayout(); // treeLayout.marginWidth = 0; // treeLayout.verticalSpacing = 1; // treeLayout.horizontalSpacing = 0; // treeLayout.numColumns = 1; // treeLayout.marginHeight = 0; // treeGroup.setLayout(treeLayout); // gridData = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1); // treeGroup.setLayoutData(gridData); // Composite toolbarGroup = new Composite(treeGroup, SWT.NONE); // GridLayout toolbarGroupLayout = new GridLayout(); // toolbarGroupLayout.numColumns = 2; // toolbarGroupLayout.marginWidth = 0; // toolbarGroupLayout.marginHeight = 0; // toolbarGroup.setLayout(toolbarGroupLayout); // gridData = new GridData(SWT.FILL, SWT.CENTER, true, false); // toolbarGroup.setLayoutData(gridData); CLabel toolbarLabel = new CLabel(viewerPane, SWT.NONE) { public Point computeSize(int wHint, int hHint, boolean changed) { return super.computeSize(wHint, Math.max(24, hHint), changed); } }; // Label toolbarLabel = new Label(viewerPane, SWT.NONE); // gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); // gridData.horizontalIndent = 3; // gridData.horizontalAlignment = SWT.BEGINNING; // gridData.verticalAlignment = SWT.CENTER; // toolbarLabel.setLayoutData(gridData); if (label != null) { toolbarLabel.setText(label); } viewerPane.setTopLeft(toolbarLabel); int buttonGroupColumns = 1; if (toolbarControlCreator != null) { buttonGroupColumns = buttonGroupColumns + toolbarControlCreator.getControlCount(); } // Composite buttonGroup = new Composite(toolbarGroup, SWT.NONE); // GridLayout buttonLayout = new GridLayout(); // buttonLayout.numColumns = buttonGroupColumns; // buttonLayout.marginHeight = 0; // buttonLayout.marginWidth = 0; // buttonGroup.setLayout(buttonLayout); // gridData = new GridData(GridData.HORIZONTAL_ALIGN_END); // buttonGroup.setLayoutData(gridData); ToolBar toolbar = new ToolBar(viewerPane, SWT.FLAT); // GridLayout toolbarLayout = new GridLayout(); // toolbarLayout.numColumns = 3; // toolbar.setLayout(toolbarLayout); // toolbar.setLayoutData(new GridData(GridData.FILL_BOTH)); viewerPane.setTopCenter(toolbar); ToolBarManager toolbarManager = new ToolBarManager(toolbar); if (toolbarControlCreator != null) { toolbarControlCreator.createToolbarControls(toolbarManager); toolbarManager.add(new Separator()); } flatAction = new Action(Policy.bind("ResourceSelectionTree.flat"), Action.AS_RADIO_BUTTON) { //$NON-NLS-1$ public void run() { mode = MODE_FLAT; settings.put(MODE_SETTING, MODE_FLAT); treeAction.setChecked(false); compressedAction.setChecked(false); refresh(); } }; flatAction.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_AFFECTED_PATHS_FLAT_MODE)); toolbarManager.add(flatAction); treeAction = new Action(Policy.bind("ResourceSelectionTree.tree"), Action.AS_RADIO_BUTTON) { //$NON-NLS-1$ public void run() { mode = MODE_TREE; settings.put(MODE_SETTING, MODE_TREE); flatAction.setChecked(false); compressedAction.setChecked(false); refresh(); } }; treeAction.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_AFFECTED_PATHS_TREE_MODE)); toolbarManager.add(treeAction); compressedAction = new Action(Policy.bind("ResourceSelectionTree.compressedFolders"), Action.AS_RADIO_BUTTON) { //$NON-NLS-1$ public void run() { mode = MODE_COMPRESSED_FOLDERS; settings.put(MODE_SETTING, MODE_COMPRESSED_FOLDERS); treeAction.setChecked(false); flatAction.setChecked(false); refresh(); } }; compressedAction.setImageDescriptor(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_AFFECTED_PATHS_COMPRESSED_MODE)); toolbarManager.add(compressedAction); toolbarManager.update(true); mode = MODE_COMPRESSED_FOLDERS; try { mode = settings.getInt(MODE_SETTING); } catch (Exception e) {} switch (mode) { case MODE_COMPRESSED_FOLDERS: compressedAction.setChecked(true); break; case MODE_FLAT: flatAction.setChecked(true); break; case MODE_TREE: treeAction.setChecked(true); break; default: break; } if (checkbox) { treeViewer = new CheckboxTreeViewer(viewerPane, SWT.MULTI); // Override the spacebar behavior to toggle checked state for all selected items. treeViewer.getControl().addKeyListener(new KeyAdapter() { public void keyPressed(KeyEvent event) { if (event.keyCode == SPACEBAR) { Tree tree = (Tree)treeViewer.getControl(); TreeItem[] items = tree.getSelection(); for (int i = 0; i < items.length; i++) { if (i > 0) items[i].setChecked(!items[i].getChecked()); } } } }); } else { treeViewer = new TreeViewer(viewerPane, SWT.MULTI); } tree = treeViewer.getTree(); tree.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); viewerPane.setContent(tree); if (labelProvider == null) { labelProvider = new ResourceSelectionLabelProvider(); } treeViewer.setLabelProvider(labelProvider); treeViewer.setContentProvider(resourceSelectionContentProvider); treeViewer.setUseHashlookup(true); GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true); gd.heightHint = 125; treeViewer.getControl().setLayoutData(gd); treeViewer.setInput(this); // if (checkbox) { // SelectionListener selectionListener = new SelectionAdapter() { // public void widgetSelected(SelectionEvent e) { // setAllChecked(e.getSource() == selectAllButton); // } // }; // // deselectAllButton = new Button(this, SWT.PUSH); // deselectAllButton.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, true, false)); // deselectAllButton.setText(Policy.bind("ResourceSelectionTree.DeselectAll")); //$NON-NLS-1$ // deselectAllButton.addSelectionListener(selectionListener); // // selectAllButton = new Button(this, SWT.PUSH); // selectAllButton.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false)); // selectAllButton.setText(Policy.bind("ResourceSelectionTree.SelectAll")); //$NON-NLS-1$ // selectAllButton.addSelectionListener(selectionListener); // } treeViewer.expandAll(); if (checkbox) { setAllChecked(true); ((CheckboxTreeViewer) treeViewer) .addCheckStateListener(new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent event) { handleCheckStateChange(event); } }); } MenuManager menuMgr = new MenuManager(); Menu menu = menuMgr.createContextMenu(treeViewer.getTree()); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager menuMgr) { fillTreeMenu(menuMgr); } }); menuMgr.setRemoveAllWhenShown(true); treeViewer.getTree().setMenu(menu); } void setAllChecked(boolean state) { ((CheckboxTreeViewer)treeViewer).setAllChecked(state); } protected void fillTreeMenu(IMenuManager menuMgr) { if (checkbox) { Action selectAllAction = new Action(Policy.bind("ResourceSelectionTree.SelectAll")) { //$NON-NLS-1$ public void run() { setAllChecked(true); } }; menuMgr.add(selectAllAction); Action deselectAllAction = new Action(Policy.bind("ResourceSelectionTree.DeselectAll")) { //$NON-NLS-1$ public void run() { setAllChecked(false); } }; menuMgr.add(deselectAllAction); if (showIncludeUnversionedButton() && includeUnversioned) { menuMgr.add(new Separator()); Action selectUnversionedAction = new Action(Policy.bind("ResourceSelectionTree.SelectUnversioned")) { //$NON-NLS-1$ public void run() { checkUnversioned(tree.getItems(), true); } }; menuMgr.add(selectUnversionedAction); Action deselectUnversionedAction = new Action(Policy.bind("ResourceSelectionTree.DeselectUnversioned")) { //$NON-NLS-1$ public void run() { checkUnversioned(tree.getItems(), false); } }; menuMgr.add(deselectUnversionedAction); } } menuMgr.add(new Separator()); if (mode != MODE_FLAT) { Action expandAllAction = new Action(Policy.bind("SyncAction.expandAll")) { //$NON-NLS-1$ public void run() { treeViewer.expandAll(); } }; menuMgr.add(expandAllAction); } if (showRemoveFromViewAction && !checkbox && !treeViewer.getSelection().isEmpty()) { Action removeAction = new Action(Policy.bind("ResourceSelectionTree.remove")) { //$NON-NLS-1$ public void run() { removeFromView(); } }; menuMgr.add(removeAction); } if (customOptions != null) { menuMgr.add(new Separator()); for (int i = 0; i < customOptions.length; i++) { menuMgr.add(customOptions[i]); } } } private void removeFromView() { IStructuredSelection selection = (IStructuredSelection)treeViewer.getSelection(); if (removeFromViewValidator != null) { if (!removeFromViewValidator.canRemove(resourceList, selection)) { if (removeFromViewValidator.getErrorMessage() != null) { MessageDialog.openError(getShell(), Policy.bind("ResourceSelectionTree.remove"), removeFromViewValidator.getErrorMessage()); //$NON-NLS-1$ } return; } } Iterator iter = selection.iterator(); while (iter.hasNext()) { IResource resource = (IResource)iter.next(); remove(resource); resourceRemoved = true; } resources = new IResource[resourceList.size()]; resourceList.toArray(resources); compressedFolders = null; rootFolders = null; folders = null; refresh(); } private void remove(IResource resource) { ArrayList removedResources = new ArrayList(); Iterator iter = resourceList.iterator(); while (iter.hasNext()) { IResource checkResource = (IResource)iter.next(); if (checkResource.getFullPath().toString().equals(resource.getFullPath().toString()) || (mode != MODE_FLAT && isChild(checkResource, resource))) removedResources.add(checkResource); } iter = removedResources.iterator(); while(iter.hasNext()) resourceList.remove(iter.next()); } public boolean showIncludeUnversionedButton() { return unversionedResourceList != null && unversionedResourceList.size() > 0; } public void removeUnversioned() { try { Iterator iter = unversionedResourceList.iterator(); while(iter.hasNext()) resourceList.remove(iter.next()); resources = new IResource[resourceList.size()]; resourceList.toArray(resources); compressedFolders = null; rootFolders = null; folders = null; refresh(); includeUnversioned = false; } catch (Exception e) { SVNUIPlugin.openError(getShell(), null, null, e); } } public void addUnversioned() { try { Iterator iter = unversionedResourceList.iterator(); while(iter.hasNext()) resourceList.add(iter.next()); resources = new IResource[resourceList.size()]; resourceList.toArray(resources); Arrays.sort(resources, comparator); compressedFolders = null; rootFolders = null; folders = null; refresh(); checkUnversioned(tree.getItems(), true); includeUnversioned = true; } catch (Exception e) { SVNUIPlugin.openError(getShell(), null, null, e); } } private void checkUnversioned(TreeItem[] items, boolean state) { for (int i = 0; i < items.length; i++) { if (unversionedResourceList.contains(items[i].getData())) { items[i].setChecked(state); } checkUnversioned(items[i].getItems(), state); } } private boolean isChild(IResource resource, IResource parent) { IContainer container = resource.getParent(); while (container != null) { if (container.getFullPath().toString().equals(parent.getFullPath().toString())) return true; container = container.getParent(); } return false; } private void handleCheckStateChange(CheckStateChangedEvent event) { ((CheckboxTreeViewer)treeViewer).setGrayed(event.getElement(), false); ((CheckboxTreeViewer)treeViewer).setSubtreeChecked(event.getElement(), event.getChecked()); IResource resource = (IResource) event.getElement(); updateParentState(resource, event.getChecked()); } private void updateParentState(IResource child, boolean baseChildState) { if (mode == MODE_FLAT || child == null || child.getParent() == null || resourceList.contains(child.getParent())) { return; } CheckboxTreeViewer checkboxTreeViewer = (CheckboxTreeViewer)treeViewer; if (child == null) return; Object parent = resourceSelectionContentProvider.getParent(child); if (parent == null) return; boolean allSameState = true; Object[] children = null; children = resourceSelectionContentProvider.getChildren(parent); for (int i = children.length - 1; i >= 0; i--) { if (checkboxTreeViewer.getChecked(children[i]) != baseChildState || checkboxTreeViewer.getGrayed(children[i])) { allSameState = false; break; } } checkboxTreeViewer.setGrayed(parent, !allSameState); checkboxTreeViewer.setChecked(parent, !allSameState || baseChildState); updateParentState((IResource)parent, baseChildState); } private void refresh() { Object[] checkedElements = null; if (checkbox) checkedElements = ((CheckboxTreeViewer)treeViewer).getCheckedElements(); treeViewer.refresh(); treeViewer.expandAll(); if (checkbox) ((CheckboxTreeViewer)treeViewer).setCheckedElements(checkedElements); } private IContainer[] getRootFolders() { if (rootFolders == null) getFolders(); return rootFolders; } private IContainer[] getCompressedFolders() { if (compressedFolders == null) { compressedFolderList = new ArrayList(); for (int i = 0; i < resources.length; i++) { if (resources[i] instanceof IContainer && !compressedFolderList.contains(resources[i])) compressedFolderList.add(resources[i]); if (!(resources[i] instanceof IContainer)) { IContainer parent = resources[i].getParent(); if (parent != null && !(parent instanceof IWorkspaceRoot) && !compressedFolderList.contains(parent)) { compressedFolderList.add(parent); } } } compressedFolders = new IContainer[compressedFolderList.size()]; compressedFolderList.toArray(compressedFolders); Arrays.sort(compressedFolders, comparator); } return compressedFolders; } private IResource[] getChildResources(IContainer parent) { ArrayList children = new ArrayList(); for (int i = 0; i < resources.length; i++) { if (!(resources[i] instanceof IContainer)) { IContainer parentFolder = resources[i].getParent(); if (parentFolder != null && parentFolder.equals(parent) && !children.contains(parentFolder)) children.add(resources[i]); } } IResource[] childArray = new IResource[children.size()]; children.toArray(childArray); return childArray; } private IResource[] getFolderChildren(IContainer parent) { ArrayList children = new ArrayList(); folders = getFolders(); for (int i =0; i < folders.length; i++) { if (folders[i].getParent() != null && folders[i].getParent().equals(parent)) children.add(folders[i]); } for (int i = 0; i < resources.length; i++) { if (!(resources[i] instanceof IContainer) && resources[i].getParent() != null && resources[i].getParent().equals(parent)) children.add(resources[i]); } IResource[] childArray = new IResource[children.size()]; children.toArray(childArray); return childArray; } private IContainer[] getFolders() { List rootList = new ArrayList(); if (folders == null) { folderList = new ArrayList(); for (int i = 0; i < resources.length; i++) { if (resources[i] instanceof IContainer) folderList.add(resources[i]); IResource parent = resources[i]; while (parent != null && !(parent instanceof IWorkspaceRoot)) { if (!(parent.getParent() instanceof IWorkspaceRoot) && folderList.contains(parent.getParent())) break; if (parent.getParent() == null || parent.getParent() instanceof IWorkspaceRoot) { rootList.add(parent); } parent = parent.getParent(); folderList.add(parent); } } folders = new IContainer[folderList.size()]; folderList.toArray(folders); Arrays.sort(folders, comparator); rootFolders = new IContainer[rootList.size()]; rootList.toArray(rootFolders); Arrays.sort(rootFolders, comparator); } return folders; } private class ResourceSelectionContentProvider extends WorkbenchContentProvider { public Object getParent(Object element) { return ((IResource)element).getParent(); } public boolean hasChildren(Object element) { if (mode != MODE_FLAT && element instanceof IContainer) return true; else return false; } public Object[] getElements(Object inputElement) { return getChildren(inputElement); } public Object[] getChildren(Object parentElement) { if (parentElement instanceof ResourceSelectionTree) { if (mode == MODE_FLAT) return resources; else if (mode == MODE_COMPRESSED_FOLDERS) return getCompressedFolders(); else return getRootFolders(); } if (parentElement instanceof IContainer) { if (mode == MODE_COMPRESSED_FOLDERS) { return getChildResources((IContainer)parentElement); } if (mode == MODE_TREE) { return getFolderChildren((IContainer)parentElement); } } return new Object[0]; } } private class ResourceSelectionLabelProvider extends LabelProvider { private WorkbenchLabelProvider workbenchLabelProvider = new WorkbenchLabelProvider(); private CompareConfiguration compareConfiguration = new CompareConfiguration(); private AbstractSynchronizeLabelProvider syncLabelProvider = new AbstractSynchronizeLabelProvider() { protected ILabelProvider getDelegateLabelProvider() { return workbenchLabelProvider; } protected boolean isDecorationEnabled() { return true; } protected IDiff getDiff(Object element) { IResource resource = (IResource)element; return new ResourceSelectionDiff(resource); } }; public Image getImage(Object element) { if (resourceList.contains(element)) { SVNStatusKind statusKind = ResourceWithStatusUtil.getStatusKind((IResource)element); Image image = null; if (element instanceof IContainer && (statusKind == null || !statusKind.equals(SVNStatusKind.DELETED))) { image = workbenchLabelProvider.getImage(element); image = compareConfiguration.getImage(image, Differencer.NO_CHANGE); } else { if (statusKind != null) { if (statusKind.hasTreeConflict()) { image = workbenchLabelProvider.getImage(element); image = resourceSelectionTreeDecorator.getImage(image, ResourceSelectionTreeDecorator.TREE_CONFLICT); } else if (statusKind != null && statusKind.equals(SVNStatusKind.CONFLICTED)) { image = workbenchLabelProvider.getImage(element); image = resourceSelectionTreeDecorator.getImage(image, ResourceSelectionTreeDecorator.TEXT_CONFLICTED); } } if (image == null) image = syncLabelProvider.getImage(element); if (element instanceof IContainer) return image; if (unversionedResourceList.contains(element)) { image = resourceSelectionTreeDecorator.getImage(image, ResourceSelectionTreeDecorator.UNVERSIONED); } if (statusKind != null && statusKind.equals(SVNStatusKind.MISSING)) { image = resourceSelectionTreeDecorator.getImage(image, ResourceSelectionTreeDecorator.MISSING); } } String propertyStatus = ResourceWithStatusUtil.getPropertyStatus((IResource)element); if (propertyStatus != null && propertyStatus.length() > 0) { if (propertyStatus.equals("conflicted")) //$NON-NLS-1$ image = resourceSelectionTreeDecorator.getImage(image, ResourceSelectionTreeDecorator.PROPERTY_CONFLICTED); else image = resourceSelectionTreeDecorator.getImage(image, ResourceSelectionTreeDecorator.PROPERTY_CHANGE); } return image; } else { Image image = workbenchLabelProvider.getImage(element); return compareConfiguration.getImage(image, Differencer.NO_CHANGE); } } public String getText(Object element) { if (statusMap == null) return workbenchLabelProvider.getText(element); String text = null; IResource resource = (IResource)element; if (mode == MODE_FLAT) text = resource.getName() + " - " + resource.getFullPath().toString(); //$NON-NLS-1$ else if (mode == MODE_COMPRESSED_FOLDERS) { if (element instanceof IContainer) { IContainer container = (IContainer)element; text = container.getFullPath().makeRelative().toString(); } else text = resource.getName(); } else { text = resource.getName(); } return text; } } private class ResourceSelectionDiff implements IThreeWayDiff { private IResource resource; public ResourceSelectionDiff(IResource resource) { this.resource = resource; } public int getDirection() { return IThreeWayDiff.OUTGOING; } public ITwoWayDiff getLocalChange() { // TODO Auto-generated method stub return null; } public ITwoWayDiff getRemoteChange() { // TODO Auto-generated method stub return null; } public int getKind() { int kind = IDiff.NO_CHANGE; if (syncInfoSet != null) { SyncInfo syncInfo = syncInfoSet.getSyncInfo(resource); if (syncInfo != null) { int change = SyncInfo.getChange(syncInfo.getKind()); if (change == SyncInfo.CONFLICTING) kind = IThreeWayDiff.CONFLICTING; else if (change == SyncInfo.CHANGE) kind = IDiff.CHANGE; else if (change == SyncInfo.ADDITION) kind = IDiff.ADD; else if (change == SyncInfo.DELETION) kind = IDiff.REMOVE; } } else { SVNStatusKind statusKind = (SVNStatusKind)statusMap.get(resource); if (statusKind == null) kind = IDiff.NO_CHANGE; else if (statusKind.equals(SVNStatusKind.CONFLICTED)) kind = IThreeWayDiff.CONFLICTING; else if (statusKind.equals(SVNStatusKind.MODIFIED)) kind = IDiff.CHANGE; else if (statusKind.equals(SVNStatusKind.ADDED)) kind = IDiff.ADD; else if (statusKind.equals(SVNStatusKind.DELETED)) kind = IDiff.REMOVE; } if (resource instanceof IContainer) return IDiff.REMOVE; return kind; } public IPath getPath() { return resource.getFullPath(); } public String toDiffString() { // TODO Auto-generated method stub return null; } } private class ResourceComparator implements Comparator { public int compare(Object obj0, Object obj1) { IResource resource0 = (IResource)obj0; IResource resource1 = (IResource)obj1; return resource0.getFullPath().toOSString().compareTo(resource1.getFullPath().toOSString()); } } public static interface IToolbarControlCreator { public void createToolbarControls(ToolBarManager toolbarManager); public int getControlCount(); } public static interface IRemoveFromViewValidator { public boolean canRemove(ArrayList resourceList, IStructuredSelection selection); public String getErrorMessage(); } public void setRemoveFromViewValidator( IRemoveFromViewValidator removeFromViewValidator) { this.removeFromViewValidator = removeFromViewValidator; } public void setShowRemoveFromViewAction(boolean showRemoveFromViewAction) { this.showRemoveFromViewAction = showRemoveFromViewAction; } public boolean isResourceRemoved() { if (checkbox) { resourceRemoved = resources.length > getSelectedResources().length; } return resourceRemoved; } } ResourceSelectionTreeDecorator.java000066400000000000000000000042341203611042400434540ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/utilpackage org.tigris.subversion.subclipse.ui.util; import java.util.HashMap; import org.eclipse.compare.CompareUI; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.graphics.Image; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class ResourceSelectionTreeDecorator { public final static int PROPERTY_CHANGE = 0; public final static int TEXT_CONFLICTED = 1; public final static int UNVERSIONED = 2; public final static int MISSING = 3; public final static int TREE_CONFLICT = 4; public final static int PROPERTY_CONFLICTED = 5; private static ImageDescriptor[] fgImages = new ImageDescriptor[6]; private static HashMap fgMap= new HashMap(20); private Image[] fImages= new Image[6]; static { fgImages[PROPERTY_CHANGE] = SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_PROPERTY_CHANGED); // fgImages[TEXT_CONFLICTED] = SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_TEXT_CONFLICTED); fgImages[TEXT_CONFLICTED] = SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_CONFLICTED); fgImages[UNVERSIONED] = SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_QUESTIONABLE); fgImages[MISSING] = SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_DELETED); fgImages[TREE_CONFLICT] = SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_TREE_CONFLICT); fgImages[PROPERTY_CONFLICTED] = SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_PROPERTY_CONFLICTED); } public Image getImage(Image base, int kind) { Object key= base; // kind &= 3; Image[] a= (Image[]) fgMap.get(key); if (a == null) { a= new Image[6]; fgMap.put(key, a); } Image b= a[kind]; if (b == null) { boolean onLeft = kind == PROPERTY_CHANGE; b= new DiffImage(base, fgImages[kind], 22, onLeft).createImage(); CompareUI.disposeOnShutdown(b); a[kind]= b; } return b; } public void dispose() { if (fImages != null) { for (int i= 0; i < fImages.length; i++){ Image image= fImages[i]; if (image != null && !image.isDisposed()) image.dispose(); } } fImages= null; } } SimpleDialogsHelper.java000066400000000000000000000071301203611042400412260ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/util/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.util; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.tigris.subversion.subclipse.core.util.ISimpleDialogsHelper; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.eclipse.swt.graphics.Image; /** * * This class is a dialog helper class for the core package. * It's made availabe for core thru SVNProviderPlugin.getSimpleDialogsHelper(). * New simple dialogs should be added here so the minimum of glue is needed for * every new dialog. Remember to update the ISimpleDialogsHelper interface. * * @author Magnus Naeslund (mag@kite.se) * @see org.tigris.subversion.subclipse.core.util.ISimpleDialogsHelper * @see org.tigris.subversion.subclipse.core.SVNProviderPlugin#getSimpleDialogsHelper() */ public class SimpleDialogsHelper implements ISimpleDialogsHelper { public boolean promptYesNo(String title, String question, boolean yesIsDefault) { MessageDialogRunnable mdr = new MessageDialogRunnable( null, title, null, question, MessageDialog.QUESTION, new String[] {IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL}, yesIsDefault ? 0 : 1); SVNUIPlugin.getStandardDisplay().syncExec(mdr); return mdr.getResult() == 0; } public boolean promptYesCancel(String title, String question, boolean yesIsDefault) { MessageDialogRunnable mdr = new MessageDialogRunnable( null, title, null, question, MessageDialog.QUESTION, new String[] {IDialogConstants.YES_LABEL, IDialogConstants.CANCEL_LABEL}, yesIsDefault ? 0 : 1); SVNUIPlugin.getStandardDisplay().syncExec(mdr); return mdr.getResult() == 0; } /** * * This should be reused for all MessageDialog type of dialogs. * * @author mag * */ private static class MessageDialogRunnable implements Runnable { final Shell shell; final String title, message; final Image image; final int imageType, defaultButton; final String buttonLabels[]; int result; /** * * @param shell if null, it's Display.getCurrent().getActiveShell() * @param title * @param image can be null * @param message * @param imageType * @param buttonLabels * @param defaultButton */ MessageDialogRunnable(Shell shell, String title, Image image, String message, int imageType, String buttonLabels[], int defaultButton){ this.shell = shell; this.title = title; this.image = image; this.message = message; this.imageType = imageType; this.buttonLabels = buttonLabels; this.defaultButton = defaultButton; } public void run() { result = new MessageDialog( shell != null ? shell : Display.getCurrent().getActiveShell(), title, image, message, imageType, buttonLabels, defaultButton).open(); } public int getResult(){ return result; } } } TableSetter.java000066400000000000000000000063641203611042400375600ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/util/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.util; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.swt.widgets.Table; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class TableSetter { private IDialogSettings settings; public TableSetter() { super(); settings = SVNUIPlugin.getPlugin().getDialogSettings(); } public void saveColumnWidths(Table table, String qualifier) { for (int i = 0; i < table.getColumnCount(); i++) { settings.put(qualifier + ".column" + i, table.getColumn(i).getWidth()); //$NON-NLS-1$ } } public void saveColumnWeights(Table table, String qualifier) { for (int i = 0; i < table.getColumnCount(); i++) { settings.put(qualifier + ".columnWeight" + i, getColumnWeight(table, i)); //$NON-NLS-1$ } } public float getColumnWeight(Table table, int column) { int tableWidth = table.getSize().x; int columnWidth = table.getColumn(column).getWidth(); if (tableWidth > columnWidth) return ((float)columnWidth)/tableWidth; return 1/3F; } public void saveSorterColumn(String qualifier, int sortColumn) { settings.put(qualifier + ".sortColumn", sortColumn); //$NON-NLS-1$ } public void saveSorterReversed(String qualifier, boolean sorterReversed) { settings.put(qualifier + ".sortReversed", sorterReversed); //$NON-NLS-1$ } public int[] getColumnWidths(String qualifier, int columnCount) { int[] widths = new int[columnCount]; for (int i = 0; i < columnCount; i++) { try { widths[i] = settings.getInt(qualifier + ".column" + i); //$NON-NLS-1$ } catch (NumberFormatException e) { widths[i] = 150; } } return widths; } public float[] getColumnWeights(String qualifier, int columnCount) { float[] weights = new float[columnCount]; for (int i = 0; i < columnCount; i++) { try { weights[i] = settings.getFloat(qualifier + ".columnWeight" + i); //$NON-NLS-1$ } catch (NumberFormatException e) { weights[i] = 1/3F; } } return weights; } public int getSorterColumn(String qualifier) { int sortColumn; try { sortColumn = settings.getInt(qualifier + ".sortColumn"); //$NON-NLS-1$ } catch (NumberFormatException e) { sortColumn = -1; } return sortColumn; } public boolean getSorterReversed(String qualifier) { return settings.getBoolean(qualifier + ".sortReversed"); //$NON-NLS-1$ } } UrlCombo.java000066400000000000000000000053431203611042400370600ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/util/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.util; import java.util.ArrayList; import java.util.Iterator; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class UrlCombo extends Composite { private Combo combo; private IDialogSettings settings; private String projectName; private static final int URL_WIDTH_HINT = 450; public UrlCombo(Composite parent, int style) { super(parent, style); createCombo(); } private void createCombo() { GridLayout layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; setLayout(layout); combo = new Combo(this, SWT.BORDER); GridData gridData = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); gridData.widthHint = URL_WIDTH_HINT; combo.setLayoutData(gridData); } public Combo getCombo() { return combo; } public String getText() { return combo.getText().trim(); } public void setText(String text) { combo.setText(text); } public void init(String projectName) { this.projectName = projectName; this.settings = SVNUIPlugin.getPlugin().getDialogSettings(); for (int i = 0; i < 5; i++) { String url = settings.get("UrlCombo." + projectName + "." + i); //$NON-NLS-1$ //$NON-NLS-2$ if (url == null) break; combo.add(url); } } public void saveUrl() { if (projectName == null || settings == null) { return; } ArrayList urls = new ArrayList(); urls.add(getText()); for (int i = 0; i < 5; i++) { String url = settings.get("UrlCombo." + projectName + "." + i); //$NON-NLS-1$ //$NON-NLS-2$ if (url == null) break; if (!urls.contains(url)) urls.add(url); } int i = 0; Iterator iter = urls.iterator(); while (iter.hasNext()) { String url = (String) iter.next(); settings.put("UrlCombo." + projectName + "." + i++, url); //$NON-NLS-1$ //$NON-NLS-2$ if (i == 5) break; } } } WorkbenchAdapter.java000066400000000000000000000036461203611042400405650ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/util/******************************************************************************* * Copyright (c) 2004, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.util; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.ui.model.IWorkbenchAdapter; /** * A default implementation of the IWorkbenchAdapter interface. * Provides basic implementations of the interface methods. */ public abstract class WorkbenchAdapter implements IWorkbenchAdapter { protected static final Object[] NO_CHILDREN = new Object[0]; /** * @see IWorkbenchAdapter#getChildren */ public Object[] getChildren(Object o) { return NO_CHILDREN; } /** * A convenience method for getting the label of an adaptable * object that responds to the IWorkbenchAdapter adapter interface. * Returns a toString() of the object if it is not adaptable */ public static String getElementLabel(IAdaptable a) { if (a == null) { return "";//$NON-NLS-1$ } IWorkbenchAdapter adapter = (IWorkbenchAdapter)a.getAdapter(IWorkbenchAdapter.class); if (adapter != null) { return adapter.getLabel(a); } else { return a.toString(); } } /** * @see IWorkbenchAdapter#getImageDescriptor */ public ImageDescriptor getImageDescriptor(Object object) { return null; } /** * @see IWorkbenchAdapter#getLabel */ public String getLabel(Object o) { return o == null ? "" : o.toString();//$NON-NLS-1$ } /** * @see IWorkbenchAdapter#getParent */ public Object getParent(Object o) { return null; } } WorkspaceDialog.java000066400000000000000000000203551203611042400404140ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/utilpackage org.tigris.subversion.subclipse.ui.util; import java.util.ArrayList; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.IWorkspace; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.Assert; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.TitleAreaDialog; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Shell; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.model.BaseWorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.tigris.subversion.subclipse.ui.Policy; public class WorkspaceDialog extends TitleAreaDialog { private String windowTitle; private String message; private TreeViewer treeViewer; private Text fileNameText; private ImageDescriptor imageDescriptor; private Image dlgTitleImage; private Text pathText; protected IContainer wsSelectedContainer; public WorkspaceDialog(Shell parentShell, String windowTitle, String message, ImageDescriptor imageDescriptor, Text pathText) { super(parentShell); this.windowTitle = windowTitle; this.message = message; this.imageDescriptor = imageDescriptor; this.pathText = pathText; } protected Control createContents(Composite parent) { Control control = super.createContents(parent); setTitle(message); dlgTitleImage = imageDescriptor.createImage(); setTitleImage(dlgTitleImage); return control; } protected Control createDialogArea(Composite parent){ Composite composite = (Composite) super.createDialogArea(parent); GridLayout layout = new GridLayout(); layout.numColumns = 1; layout.marginHeight= convertVerticalDLUsToPixels(IDialogConstants.VERTICAL_MARGIN); layout.marginWidth= convertHorizontalDLUsToPixels(IDialogConstants.HORIZONTAL_MARGIN); composite.setLayout(layout); final GridData data = new GridData(SWT.FILL, SWT.FILL, true, true); composite.setLayoutData(data); getShell().setText(windowTitle); treeViewer = new TreeViewer(composite, SWT.BORDER); final GridData gd= new GridData(SWT.FILL, SWT.FILL, true, true); gd.widthHint= 550; gd.heightHint= 250; treeViewer.getTree().setLayoutData(gd); treeViewer.setContentProvider(new LocationPageContentProvider()); treeViewer.setLabelProvider(new WorkbenchLabelProvider()); treeViewer.setInput(ResourcesPlugin.getWorkspace()); //Open to whatever is selected in the workspace field IPath existingWorkspacePath = new Path(pathText.getText()); if (existingWorkspacePath != null){ //Ensure that this workspace path is valid IResource selectedResource = ResourcesPlugin.getWorkspace().getRoot().findMember(existingWorkspacePath); if (selectedResource != null) { treeViewer.expandToLevel(selectedResource, 0); treeViewer.setSelection(new StructuredSelection(selectedResource)); } } final Composite group = new Composite(composite, SWT.NONE); layout = new GridLayout(2, false); layout.marginWidth = 0; group.setLayout(layout); group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); final Label label = new Label(group, SWT.NONE); label.setLayoutData(new GridData()); label.setText(Policy.bind("WorkspaceDialog.fileName")); //$NON-NLS-1$ fileNameText = new Text(group,SWT.BORDER); fileNameText.setLayoutData(new GridData(SWT.FILL, SWT.TOP, true, false)); setupListeners(); return parent; } protected void okPressed() { //make sure that a filename has been typed in String patchName = fileNameText.getText(); if (patchName.equals("")){ //$NON-NLS-1$ setErrorMessage(Policy.bind("WorkspaceDialog.enterFileName")); //$NON-NLS-1$ return; } //make sure that the filename does not contain more than one segment if (!(ResourcesPlugin.getWorkspace().validateName(patchName, IResource.FILE)).isOK()){ fileNameText.setText(""); //$NON-NLS-1$ setErrorMessage(Policy.bind("WorkspaceDialog.multipleSegments")); //$NON-NLS-1$ return; } //Make sure that a container has been selected if (wsSelectedContainer == null){ getSelectedContainer(); } Assert.isNotNull(wsSelectedContainer); IFile file = wsSelectedContainer.getFile(new Path(fileNameText.getText())); if (file != null) pathText.setText(file.getFullPath().toString()); super.okPressed(); } private void getSelectedContainer() { Object obj = ((IStructuredSelection)treeViewer.getSelection()).getFirstElement(); if (obj instanceof IContainer) wsSelectedContainer = (IContainer) obj; else if (obj instanceof IFile){ wsSelectedContainer = ((IFile) obj).getParent(); } } protected void cancelPressed() { super.cancelPressed(); } public boolean close() { if (dlgTitleImage != null) dlgTitleImage.dispose(); return super.close(); } void setupListeners(){ treeViewer.addSelectionChangedListener( new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { IStructuredSelection s = (IStructuredSelection)event.getSelection(); Object obj=s.getFirstElement(); if (obj instanceof IContainer) wsSelectedContainer = (IContainer) obj; else if (obj instanceof IFile){ IFile tempFile = (IFile) obj; wsSelectedContainer = tempFile.getParent(); fileNameText.setText(tempFile.getName()); } } }); treeViewer.addDoubleClickListener( new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { ISelection s= event.getSelection(); if (s instanceof IStructuredSelection) { Object item = ((IStructuredSelection)s).getFirstElement(); if (treeViewer.getExpandedState(item)) treeViewer.collapseToLevel(item, 1); else treeViewer.expandToLevel(item, 1); } } }); fileNameText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setErrorMessage(null); } }); } class LocationPageContentProvider extends BaseWorkbenchContentProvider { //Never show closed projects boolean showClosedProjects=false; public Object[] getChildren(Object element) { if (element instanceof IWorkspace) { // check if closed projects should be shown IProject[] allProjects = ((IWorkspace) element).getRoot().getProjects(); if (showClosedProjects) return allProjects; ArrayList accessibleProjects = new ArrayList(); for (int i = 0; i < allProjects.length; i++) { if (allProjects[i].isOpen()) { accessibleProjects.add(allProjects[i]); } } return accessibleProjects.toArray(); } return super.getChildren(element); } } } 000077500000000000000000000000001203611042400351745ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizardsBranchTagWizard.java000066400000000000000000000250301203611042400410510ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizardspackage org.tigris.subversion.subclipse.ui.wizards; import org.eclipse.core.resources.IResource; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.wizard.Wizard; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Display; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNExternal; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.history.Alias; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.dialogs.BranchTagPropertyUpdateDialog; import org.tigris.subversion.subclipse.ui.settings.ProjectProperties; import org.tigris.subversion.subclipse.ui.util.LinkList; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.ISVNProperty; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class BranchTagWizard extends Wizard implements IClosableWizard { private IResource[] resources; private ISVNRemoteResource[] remoteResources; private BranchTagWizardRepositoryPage repositoryPage; private BranchTagWizardCopyPage copyPage; private BranchTagWizardCommentPage commentPage; private boolean createOnServer; private boolean makeParents; private boolean switchAfterBranchTag; private String issue; private SVNUrl toUrl; private SVNRevision revision; private Alias newAlias; private long revisionNumber = 0; private String comment; private boolean alreadyExists; private boolean sameStructure; private ClosableWizardDialog parentDialog; private SVNExternal[] svnExternals; public BranchTagWizard(IResource[] resources) { super(); this.resources = resources; setWindowTitle(Policy.bind("BranchTagDialog.title")); //$NON-NLS-1$ } public BranchTagWizard(ISVNRemoteResource[] remoteResources) { super(); this.remoteResources = remoteResources; setWindowTitle(Policy.bind("BranchTagDialog.title")); //$NON-NLS-1$ } public void addPages() { repositoryPage = new BranchTagWizardRepositoryPage(); addPage(repositoryPage); copyPage = new BranchTagWizardCopyPage(); copyPage.setRevisionNumber(revisionNumber); addPage(copyPage); commentPage = new BranchTagWizardCommentPage(); addPage(commentPage); } public boolean performFinish() { if (confirmUserData() == false) { return false; } svnExternals = copyPage.getSvnExternals(); comment = commentPage.getComment(); repositoryPage.saveUrl(); createOnServer = !copyPage.workingCopyButton.getSelection(); makeParents = repositoryPage.makeParentsButton.getSelection(); sameStructure = repositoryPage.sameStructureButton != null && repositoryPage.sameStructureButton.getSelection(); if(commentPage.switchAfterBranchTagCheckBox != null) { switchAfterBranchTag = commentPage.switchAfterBranchTagCheckBox.getSelection(); } if (copyPage.serverButton.getSelection()) revision = SVNRevision.HEAD; try { toUrl = new SVNUrl(repositoryPage.getUrlText()); if (copyPage.revisionButton.getSelection()) revision = SVNRevision.getRevision(copyPage.getRevision()); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("BranchTagDialog.title"), e.getMessage()); //$NON-NLS-1$ return false; } if (!multipleSelections()) { BusyIndicator.showWhile(Display.getDefault(), new Runnable() { public void run() { ISVNInfo svnInfo = null; SVNUrl[] sourceUrls = getUrls(); ISVNClientAdapter svnClient = null; ISVNRepositoryLocation repository = null; try { SVNProviderPlugin.disableConsoleLogging(); repository = SVNProviderPlugin.getPlugin().getRepository(sourceUrls[0].toString()); svnClient = repository.getSVNClient(); svnInfo = svnClient.getInfo(toUrl); } catch (Exception e) {} finally { SVNProviderPlugin.enableConsoleLogging(); if (repository != null) { repository.returnSVNClient(svnClient); } } alreadyExists = svnInfo != null; } }); if (alreadyExists) { MessageDialog.openError(getShell(), Policy.bind("BranchTagDialog.title"), Policy.bind("BranchTagDialog.alreadyExists", toUrl.toString())); //$NON-NLS-1$ //$NON-NLS-2$ return false; } } if (resources != null) updateTagsProperty(toUrl); return true; } private boolean confirmUserData() { ProjectProperties projectProperties = commentPage.getProjectProperties(); if (projectProperties != null) { int issueCount = 0; if (projectProperties.getMessage() != null) { issue = commentPage.getIssue(); if (issue.length() > 0) { String issueError = projectProperties.validateIssue(issue); if (issueError != null) { MessageDialog.openError(getShell(), Policy.bind("BranchTagDialog.title"), issueError); //$NON-NLS-1$ return false; } else { issueCount++; } } } if (projectProperties.getLogregex() != null) { try { LinkList linkList = projectProperties.getLinkList(commentPage.getComment()); String[] urls = linkList.getUrls(); issueCount += urls.length; } catch (Exception e) { handle(e, null, null); } } if(projectProperties.isWarnIfNoIssue()) { if (issueCount == 0) { if ((projectProperties.getMessage() != null) && (projectProperties.getLogregex() == null)) { if (!MessageDialog.openQuestion(getShell(), Policy.bind("BranchTagDialog.title"), Policy.bind("BranchTagDialog.0", projectProperties.getLabel()))) { //$NON-NLS-1$ //$NON-NLS-2$ return false; //$NON-NLS-1$ } } else if ((projectProperties.getMessage() == null) && (projectProperties.getLogregex() != null)) { if (!MessageDialog.openQuestion(getShell(), Policy.bind("BranchTagDialog.title"), Policy.bind("BranchTagDialog.1", projectProperties.getLabel()))) { //$NON-NLS-1$ //$NON-NLS-2$ return false; //$NON-NLS-1$ } } else if ((projectProperties.getMessage() != null) && (projectProperties.getLogregex() != null)) { if (!MessageDialog.openQuestion(getShell(), Policy.bind("BranchTagDialog.title"), Policy.bind("BranchTagDialog.2", projectProperties.getLabel()))) { //$NON-NLS-1$ //$NON-NLS-2$ return false; //$NON-NLS-1$ } } } } } return true; } private void updateTagsProperty(SVNUrl toUrl) { ISVNClientAdapter svnClient = null; try { if (resources.length > 1) return; ISVNProperty property = null; property = repositoryPage.getSvnResource().getSvnProperty("subclipse:tags"); //$NON-NLS-1$ if (property == null) return; newAlias = new Alias(); newAlias.setBranch(toUrl.toString().toUpperCase().indexOf("TAGS") == -1); //$NON-NLS-1$ String relativePath = toUrl.toString().substring(repositoryPage.getSvnResource().getRepository().getUrl().toString().length()); newAlias.setRelativePath(relativePath); SVNRevision revision = null; if (copyPage.revisionButton.getSelection()) revision = SVNRevision.getRevision(copyPage.getRevision()); else { svnClient = repositoryPage.getSvnResource().getRepository().getSVNClient(); ISVNInfo svnInfo = svnClient.getInfo(repositoryPage.getUrl()); revision = SVNRevision.getRevision(svnInfo.getRevision().toString()); } newAlias.setRevision(Integer.parseInt(revision.toString())); newAlias.setName(toUrl.getLastPathSegment()); BranchTagPropertyUpdateDialog dialog = new BranchTagPropertyUpdateDialog(getShell(), getResource(), newAlias, "BranchTagPropertyUpdateDialog"); //$NON-NLS-1$ if (dialog.open() == BranchTagPropertyUpdateDialog.OK) newAlias = dialog.getNewAlias(); else newAlias = null; } catch (Exception e) {} finally { if (svnClient != null) { repositoryPage.getSvnResource().getRepository().returnSVNClient(svnClient); } } } public boolean multipleSelections() { return (resources != null && resources.length > 1) || (remoteResources != null && remoteResources.length > 1); } public IResource[] getResources() { return resources; } public IResource getResource() { if (resources == null || resources.length < 1) return null; return resources[0]; } public ISVNRemoteResource[] getRemoteResources() { return remoteResources; } public ISVNRemoteResource getRemoteResource() { if (remoteResources == null || remoteResources.length < 1) return null; return remoteResources[0]; } public SVNUrl getUrl() { return repositoryPage.getUrl(); } public SVNUrl[] getUrls() { return repositoryPage.getUrls(); } public SVNUrl getToUrl() { return toUrl; } public String getUrlText() { return repositoryPage.getUrlText(); } public String getComment() { return comment; } public boolean isCreateOnServer() { return createOnServer; } public SVNRevision getRevision() { return revision; } public boolean isMakeParents() { return makeParents; } public boolean isSameStructure() { return sameStructure; } public Alias getNewAlias() { return newAlias; } public String getCommonRoot() { return repositoryPage.getCommonRoot(); } public boolean isSwitchAfterBranchTag() { return switchAfterBranchTag; } public void setRevisionNumber(long revisionNumber) { this.revisionNumber = revisionNumber; } public SVNExternal[] getSvnExternals() { return svnExternals; } protected void handle(Exception exception, String title, String message) { SVNUIPlugin.openError(getShell(), title, message, exception, SVNUIPlugin.LOG_NONTEAM_EXCEPTIONS); } public void setParentDialog(ClosableWizardDialog parentDialog) { this.parentDialog = parentDialog; } public void finishAndClose() { if (parentDialog != null && parentDialog instanceof ClosableWizardDialog && canFinish()) { ((ClosableWizardDialog)parentDialog).finishPressed(); } } } BranchTagWizardCommentPage.java000066400000000000000000000137131203611042400431760ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizardspackage org.tigris.subversion.subclipse.ui.wizards; import org.eclipse.core.resources.IResource; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.comments.CommitCommentArea; import org.tigris.subversion.subclipse.ui.settings.CommentProperties; import org.tigris.subversion.subclipse.ui.settings.ProjectProperties; public class BranchTagWizardCommentPage extends SVNWizardPage { protected CommitCommentArea commitCommentArea; private Text issueText; private CommentProperties commentProperties; private ProjectProperties projectProperties; protected Button switchAfterBranchTagCheckBox; private IResource resource; private boolean visited = false; public BranchTagWizardCommentPage() { super("commentPage", //$NON-NLS-1$ Policy.bind("BranchTagWizardCommentPage.heading"), //$NON-NLS-1$ SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_SVN), Policy.bind("BranchTagWizardCommentPage.message")); //$NON-NLS-1$ } public void createControl(Composite parent) { resource = ((BranchTagWizard)getWizard()).getResource(); if (resource == null) { commitCommentArea = new CommitCommentArea(null, null, Policy.bind("BranchTagDialog.enterComment"), commentProperties); //$NON-NLS-1$ } else { try { commentProperties = CommentProperties.getCommentProperties(resource); projectProperties = ProjectProperties.getProjectProperties(resource); } catch (SVNException e) {} commitCommentArea = new CommitCommentArea(null, null, Policy.bind("BranchTagDialog.enterComment"), commentProperties); //$NON-NLS-1$ if ((commentProperties != null) && (commentProperties.getMinimumLogMessageSize() != 0)) { ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(canFinish()); } }; commitCommentArea.setModifyListener(modifyListener); } } Composite outerContainer = new Composite(parent,SWT.NONE); GridLayout outerLayout = new GridLayout(); outerLayout.numColumns = 1; outerLayout.marginHeight = 0; outerLayout.marginWidth = 0; outerContainer.setLayout(outerLayout); outerContainer.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); if (projectProperties != null) { if (projectProperties.getMessage() != null) { addBugtrackingArea(outerContainer); } } commitCommentArea.createArea(outerContainer); commitCommentArea.addPropertyChangeListener(new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { if (event.getProperty() == CommitCommentArea.OK_REQUESTED && canFinish()) { IClosableWizard wizard = (IClosableWizard)getWizard(); wizard.finishAndClose(); } } }); if (resource != null) { switchAfterBranchTagCheckBox = new Button(outerContainer, SWT.CHECK); switchAfterBranchTagCheckBox.setText(Policy.bind("BranchTagDialog.switchAfterTagBranch")); } setPageComplete(canFinish()); if (issueText != null) { FocusListener focusListener = new FocusListener() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; issueText.addFocusListener(focusListener); } setControl(outerContainer); } public void setVisible(boolean visible) { super.setVisible(visible); if (visible) visited = true; setPageComplete(canFinish()); } private void addBugtrackingArea(Composite composite) { Composite bugtrackingComposite = new Composite(composite, SWT.NULL); GridLayout bugtrackingLayout = new GridLayout(); bugtrackingLayout.numColumns = 2; bugtrackingComposite.setLayout(bugtrackingLayout); Label label = new Label(bugtrackingComposite, SWT.NONE); label.setText(projectProperties.getLabel()); issueText = new Text(bugtrackingComposite, SWT.BORDER); GridData data = new GridData(); data.widthHint = 150; issueText.setLayoutData(data); } private boolean canFinish() { if (!visited) return false; if ((commentProperties != null) && (commentProperties.getMinimumLogMessageSize() != 0)) { if (commitCommentArea.getCommentLength() < commentProperties.getMinimumLogMessageSize()) return false; } return true; } public ProjectProperties getProjectProperties() { return projectProperties; } public String getIssue() { if (issueText == null) return null; return issueText.getText().trim(); } public String getComment() { String comment = null; if ((projectProperties != null) && (getIssue() != null) && (getIssue().length() > 0)) { if (projectProperties.isAppend()) comment = commitCommentArea.getComment() + "\n" + projectProperties.getResolvedMessage(getIssue()) + "\n"; //$NON-NLS-1$ //$NON-NLS-2$ else comment = projectProperties.getResolvedMessage(getIssue()) + "\n" + commitCommentArea.getComment(); //$NON-NLS-1$ } else comment = commitCommentArea.getComment(); commitCommentArea.addComment(commitCommentArea.getComment()); return comment; } } BranchTagWizardCopyPage.java000066400000000000000000000347051203611042400425120ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizardspackage org.tigris.subversion.subclipse.ui.wizards; import java.util.ArrayList; import java.util.List; import org.eclipse.core.resources.IResource; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTableViewer; import org.eclipse.jface.viewers.ColumnLayoutData; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.TableItem; import org.eclipse.swt.widgets.Text; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNExternal; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.dialogs.HistoryDialog; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNProperty; import org.tigris.subversion.svnclientadapter.SVNUrl; public class BranchTagWizardCopyPage extends SVNWizardPage { private static final int REVISION_WIDTH_HINT = 40; private IResource resource; private ISVNRemoteResource remoteResource; protected Button serverButton; protected Button revisionButton; private Text revisionText; private Button logButton; protected Button workingCopyButton; private Table table; private TableViewer viewer; private Button selectAllButton; private Button deselectAllButton; private String[] columnHeaders = { Policy.bind("BranchTagWizardCopyPage.0"), Policy.bind("BranchTagWizardCopyPage.1"), Policy.bind("BranchTagWizardCopyPage.2"), Policy.bind("BranchTagWizardCopyPage.3") }; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ //$NON-NLS-4$ private ColumnLayoutData columnLayouts[] = { new ColumnWeightData(200, 200, true), new ColumnWeightData(200, 200, true), new ColumnWeightData(50, 50, true), new ColumnWeightData(50, 50, true)}; private SVNExternal[] svnExternals; private long revisionNumber = 0; public BranchTagWizardCopyPage() { super("copyPage", //$NON-NLS-1$ Policy.bind("BranchTagWizardCopyPage.heading"), //$NON-NLS-1$ SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_SVN), Policy.bind("BranchTagWizardCopyPage.message")); //$NON-NLS-1$ } public void createControl(Composite parent) { resource = ((BranchTagWizard)getWizard()).getResource(); remoteResource = ((BranchTagWizard)getWizard()).getRemoteResource(); Composite outerContainer = new Composite(parent,SWT.NONE); GridLayout outerLayout = new GridLayout(); outerLayout.numColumns = 1; outerLayout.marginHeight = 0; outerLayout.marginWidth = 0; outerContainer.setLayout(outerLayout); outerContainer.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); Group serverComposite = new Group(outerContainer, SWT.NULL); serverComposite.setText(Policy.bind("BranchTagDialog.createCopy")); //$NON-NLS-1$ GridLayout serverLayout = new GridLayout(); serverLayout.numColumns = 3; serverComposite.setLayout(serverLayout); GridData data = new GridData(SWT.FILL, SWT.FILL, true, false); serverComposite.setLayoutData(data); serverButton = new Button(serverComposite, SWT.RADIO); serverButton.setText(Policy.bind("BranchTagDialog.head")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 3; serverButton.setLayoutData(data); revisionButton = new Button(serverComposite, SWT.RADIO); revisionButton.setText(Policy.bind("BranchTagDialog.revision")); //$NON-NLS-1$ revisionText = new Text(serverComposite, SWT.BORDER); data = new GridData(); data.widthHint = REVISION_WIDTH_HINT; revisionText.setLayoutData(data); if (revisionNumber == 0) revisionText.setEnabled(false); else revisionText.setText("" + revisionNumber); //$NON-NLS-1$ revisionText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(canFinish()); } }); logButton = new Button(serverComposite, SWT.PUSH); logButton.setText(Policy.bind("MergeDialog.showLog")); //$NON-NLS-1$ if (revisionNumber == 0) logButton.setEnabled(false); logButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { showLog(); } }); workingCopyButton = new Button(serverComposite, SWT.RADIO); workingCopyButton.setText(Policy.bind("BranchTagDialog.working")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 3; workingCopyButton.setLayoutData(data); if (resource == null) { workingCopyButton.setVisible(false); } else { if (getSvnExternalsProperties()) { Group externalsGroup = new Group(outerContainer, SWT.NULL); externalsGroup.setText(Policy.bind("BranchTagWizardCopyPage.5")); //$NON-NLS-1$ GridLayout externalsLayout = new GridLayout(); externalsLayout.numColumns = 1; externalsGroup.setLayout(externalsLayout); data = new GridData(GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL | GridData.FILL_BOTH); externalsGroup.setLayoutData(data); table = new Table(externalsGroup, SWT.CHECK | SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); table.setHeaderVisible(true); data = new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL); data.heightHint = 75; table.setLayoutData(data); TableLayout tableLayout = new TableLayout(); table.setLayout(tableLayout); viewer = new CheckboxTableViewer(table); viewer.setContentProvider(new ExternalsContentProvider()); viewer.setLabelProvider(new ExternalsLabelProvider()); for (int i = 0; i < columnHeaders.length; i++) { tableLayout.addColumnData(columnLayouts[i]); TableColumn tc = new TableColumn(table, SWT.NONE,i); tc.setResizable(columnLayouts[i].resizable); tc.setText(columnHeaders[i]); } viewer.setInput(this); ((CheckboxTableViewer)viewer).addCheckStateListener(new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent event) { TableItem[] items = table.getItems(); for (TableItem item : items) { ((SVNExternal)item.getData()).setSelected(item.getChecked()); } } }); Composite buttonGroup = new Composite(externalsGroup, SWT.NONE); GridLayout buttonLayout = new GridLayout(); buttonLayout.numColumns = 2; buttonLayout.makeColumnsEqualWidth = true; buttonGroup.setLayout(buttonLayout); GridData gd = new GridData(GridData.HORIZONTAL_ALIGN_CENTER); buttonGroup.setLayoutData(gd); selectAllButton = new Button(buttonGroup, SWT.PUSH); selectAllButton.setText(Policy.bind("BranchTagWizardCopyPage.6")); //$NON-NLS-1$ gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL); selectAllButton.setLayoutData(gd); deselectAllButton = new Button(buttonGroup, SWT.PUSH); deselectAllButton.setText(Policy.bind("BranchTagWizardCopyPage.7")); //$NON-NLS-1$ gd = new GridData(GridData.HORIZONTAL_ALIGN_FILL); deselectAllButton.setLayoutData(gd); SelectionListener buttonListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (e.getSource() == selectAllButton) { selectAll(); } else { deselectAll(); } } }; selectAllButton.addSelectionListener(buttonListener); deselectAllButton.addSelectionListener(buttonListener); } } if (revisionNumber == 0) serverButton.setSelection(true); else revisionButton.setSelection(true); SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { revisionText.setEnabled(revisionButton.getSelection()); logButton.setEnabled(revisionButton.getSelection()); if (revisionButton.getSelection()) revisionText.setFocus(); setPageComplete(canFinish()); } }; serverButton.addSelectionListener(selectionListener); revisionButton.addSelectionListener(selectionListener); workingCopyButton.addSelectionListener(selectionListener); FocusListener focusListener = new FocusListener() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; revisionText.addFocusListener(focusListener); setControl(outerContainer); } public SVNExternal[] getSvnExternals() { return svnExternals; } private void selectAll() { TableItem[] items = table.getItems(); for (TableItem item : items) { item.setChecked(true); ((SVNExternal)item.getData()).setSelected(true); } } private void deselectAll() { TableItem[] items = table.getItems(); for (TableItem item : items) { item.setChecked(false); ((SVNExternal)item.getData()).setSelected(false); } } private boolean getSvnExternalsProperties() { List externalsList = new ArrayList(); ISVNClientAdapter svnClient = null; ISVNRepositoryLocation repository = null; try { repository = SVNWorkspaceRoot.getSVNResourceFor(resource).getRepository(); svnClient = repository.getSVNClient(); IResource[] resources = ((BranchTagWizard)getWizard()).getResources(); for (IResource res : resources) { ISVNProperty[] properties = svnClient.getProperties(res.getLocation().toFile(), true); for (ISVNProperty property : properties) { if (property.getName().equals(Policy.bind("BranchTagWizardCopyPage.8"))) { //$NON-NLS-1$ String[] propertyLines = property.getValue().split("\\n"); //$NON-NLS-1$ for (String propertyLine : propertyLines) { SVNExternal svnExternal = new SVNExternal(property.getFile(), propertyLine); externalsList.add(svnExternal); } } } } } catch (Exception e) {} finally { if (repository != null) { repository.returnSVNClient(svnClient); } } svnExternals = new SVNExternal[externalsList.size()]; externalsList.toArray(svnExternals); return externalsList.size() > 0; } private void showLog() { ISVNRemoteResource remoteResource = null; if (((BranchTagWizard)getWizard()).multipleSelections()) { ISVNRepositoryLocation repository = null; if (resource == null) repository = this.remoteResource.getRepository(); else repository = SVNWorkspaceRoot.getSVNResourceFor(resource).getRepository(); try { remoteResource = repository.getRemoteFile(new SVNUrl(((BranchTagWizard)getWizard()).getCommonRoot())); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.showLog"), e.toString()); //$NON-NLS-1$ return; } } else { if (resource == null) remoteResource = this.remoteResource; else { try { remoteResource = SVNWorkspaceRoot.getSVNResourceFor(resource).getRepository().getRemoteFile(((BranchTagWizard)getWizard()).getUrl()); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.showLog"), e.toString()); //$NON-NLS-1$ return; } } if (remoteResource == null) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.showLog"), Policy.bind("MergeDialog.urlError") + " " + ((BranchTagWizard)getWizard()).getUrlText()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ return; } } HistoryDialog dialog = new HistoryDialog(getShell(), remoteResource); if (dialog.open() == HistoryDialog.CANCEL) return; ILogEntry[] selectedEntries = dialog.getSelectedLogEntries(); if (selectedEntries.length == 0) return; revisionText.setText(Long.toString(selectedEntries[selectedEntries.length - 1].getRevision().getNumber())); setPageComplete(canFinish()); } public void setRevisionNumber(long revisionNumber) { this.revisionNumber = revisionNumber; } public String getRevision() { return revisionText.getText().trim(); } private boolean canFinish() { if (revisionButton.getSelection() && revisionText.getText().trim().length() == 0) return false; return true; } static class ExternalsLabelProvider extends LabelProvider implements ITableLabelProvider { public String getColumnText(Object element, int columnIndex) { SVNExternal external = (SVNExternal)element; switch (columnIndex) { case 0: if (external.getPath() != null) { return external.getPath(); } break; case 1: if (external.getUrl() != null) { return external.getUrl().toString(); } break; case 2: if (external.getRevision() != -1) { return Long.toString(external.getRevision()); } break; case 3: if (external.getFixedAtRevision() != -1) { return Long.toString(external.getFixedAtRevision()); } break; } return ""; //$NON-NLS-1$ } public Image getColumnImage(Object element, int columnIndex) { return null; } } class ExternalsContentProvider implements IStructuredContentProvider { public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } public Object[] getElements(Object obj) { return svnExternals; } } } BranchTagWizardRepositoryPage.java000066400000000000000000000365431203611042400437610ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizardspackage org.tigris.subversion.subclipse.ui.wizards; import java.util.ArrayList; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.viewers.ColumnLayoutData; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.DecoratingLabelProvider; import org.eclipse.jface.viewers.ILabelDecorator; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.dialogs.ChooseUrlDialog; import org.tigris.subversion.subclipse.ui.util.UrlCombo; import org.tigris.subversion.svnclientadapter.SVNUrl; public class BranchTagWizardRepositoryPage extends SVNWizardPage { private UrlCombo toUrlCombo; protected Button makeParentsButton; protected Button sameStructureButton; private Table table; private TableViewer viewer; private IResource[] resources; private ISVNRemoteResource[] remoteResources; private ISVNLocalResource[] svnResources; private SVNUrl[] urls; private BranchResource[] branchResources; private String commonRoot; private IDialogSettings settings = SVNUIPlugin.getPlugin().getDialogSettings(); private String[] columnHeaders = {Policy.bind("BranchTagDialog.resources")}; //$NON-NLS-1$ private ColumnLayoutData columnLayouts[] = { new ColumnWeightData(100, 100, true)}; public BranchTagWizardRepositoryPage() { super("repositoryPage", //$NON-NLS-1$ Policy.bind("BranchTagWizardRepositoryPage.heading"), //$NON-NLS-1$ SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_SVN), Policy.bind("BranchTagWizardRepositoryPage.message")); //$NON-NLS-1$ } public void createControl(Composite parent) { resources = ((BranchTagWizard)getWizard()).getResources(); remoteResources = ((BranchTagWizard)getWizard()).getRemoteResources(); Composite outerContainer = new Composite(parent,SWT.NONE); GridLayout outerLayout = new GridLayout(); outerLayout.numColumns = 1; outerLayout.marginHeight = 0; outerLayout.marginWidth = 0; outerContainer.setLayout(outerLayout); outerContainer.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); Group repositoryGroup = new Group(outerContainer, SWT.NULL); repositoryGroup.setText(Policy.bind("BranchTagDialog.repository")); //$NON-NLS-1$ repositoryGroup.setLayout(new GridLayout()); GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); repositoryGroup.setLayoutData(data); if (multipleSelections()) { ArrayList urlArray = new ArrayList(); if (resources == null) { for (int i = 0; i < remoteResources.length; i++) { urlArray.add(remoteResources[i].getUrl()); } } else { for (int i = 0; i < resources.length; i++) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resources[i]); try { SVNUrl url = svnResource.getStatus().getUrl(); if (url != null) { urlArray.add(url); } } catch (SVNException e1) {} } } urls = new SVNUrl[urlArray.size()]; urlArray.toArray(urls); } else { if (resources == null) { urls = new SVNUrl[1]; urls[0] = remoteResources[0].getUrl(); } else { svnResources = new ISVNLocalResource[1]; svnResources[0] = SVNWorkspaceRoot.getSVNResourceFor(resources[0]); try { urls = new SVNUrl[1]; urls[0] = svnResources[0].getStatus().getUrl(); } catch (SVNException e1) {} } } Label toUrlLabel = new Label(repositoryGroup, SWT.NONE); toUrlLabel.setText(Policy.bind("BranchTagDialog.toUrl")); //$NON-NLS-1$ Composite urlComposite = new Composite(repositoryGroup, SWT.NULL); GridLayout urlLayout = new GridLayout(); urlLayout.numColumns = 2; urlLayout.marginWidth = 0; urlLayout.marginHeight = 0; urlComposite.setLayout(urlLayout); data = new GridData(SWT.FILL, SWT.FILL, true, false); urlComposite.setLayoutData(data); toUrlCombo = new UrlCombo(urlComposite, SWT.NONE); toUrlCombo.init( resources == null ? "repositoryBrowser" : resources[0].getProject().getName()); //$NON-NLS-1$ toUrlCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); // if (multipleSelections()) toUrlCombo.setText(getCommonRoot()); // else toUrlCombo.setText(urls[0].toString()); toUrlCombo.setText(getCommonRoot()); toUrlCombo.getCombo().addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(canFinish()); } }); Button browseButton = new Button(urlComposite, SWT.PUSH); browseButton.setText(Policy.bind("SwitchDialog.browse")); //$NON-NLS-1$ browseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { IResource resource = null; if (resources != null && resources.length > 0) resource = resources[0]; ChooseUrlDialog dialog = new ChooseUrlDialog(getShell(), resource); if ((dialog.open() == ChooseUrlDialog.OK) && (dialog.getUrl() != null)) { toUrlCombo.setText(dialog.getUrl()); } } }); makeParentsButton = new Button(urlComposite, SWT.CHECK); makeParentsButton.setText(Policy.bind("BranchTagDialog.makeParents")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; makeParentsButton.setLayoutData(data); makeParentsButton.setSelection(settings.getBoolean("BranchTagDialog.makeParents")); //$NON-NLS-1$ makeParentsButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { settings.put("BranchTagDialog.makeParents", makeParentsButton.getSelection()); //$NON-NLS-1$ } }); if (multipleSelections() && !sameParents()) { sameStructureButton = new Button(urlComposite, SWT.CHECK); sameStructureButton.setText(Policy.bind("BranchTagDialog.sameStructure")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; sameStructureButton.setLayoutData(data); sameStructureButton.setSelection(settings.getBoolean("BranchTagDialog.sameStructure")); //$NON-NLS-1$ sameStructureButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { settings.put("BranchTagDialog.sameStructure", sameStructureButton.getSelection()); //$NON-NLS-1$ viewer.refresh(); } }); } // Label label = new Label(outerContainer, SWT.NONE); // label.setText(Policy.bind("BranchTagDialog.resources")); table = new Table(outerContainer, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); // table.setLinesVisible(false); table.setHeaderVisible(true); data = new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL); data.heightHint = 75; table.setLayoutData(data); TableLayout tableLayout = new TableLayout(); table.setLayout(tableLayout); viewer = new TableViewer(table); viewer.setContentProvider(new BranchContentProvider()); ILabelDecorator decorator = PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator(); viewer.setLabelProvider(new TableDecoratingLabelProvider(new BranchLabelProvider(), decorator)); for (int i = 0; i < columnHeaders.length; i++) { tableLayout.addColumnData(columnLayouts[i]); TableColumn tc = new TableColumn(table, SWT.NONE,i); tc.setResizable(columnLayouts[i].resizable); tc.setText(columnHeaders[i]); } viewer.setInput(this); toUrlCombo.getCombo().addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { viewer.refresh(); } }); toUrlCombo.getCombo().setFocus(); setPageComplete(canFinish()); setControl(outerContainer); } private boolean multipleSelections() { return (resources != null && resources.length > 1) || (remoteResources != null && remoteResources.length > 1); } private boolean sameParents() { for (int i = 0; i < branchResources.length; i++) { String name = null; if (branchResources[i].getResource() == null) name = branchResources[i].getRemoteResource().getName(); else name = branchResources[i].getResource().getName(); if (!branchResources[i].getPartialPath().equals(name)) return false; } return true; } public String getCommonRoot() { if (commonRoot != null) return commonRoot; ArrayList urlList = new ArrayList(); if (resources == null) { for (int i = 0; i < remoteResources.length; i++) { urlList.add(remoteResources[i].getUrl().toString()); } } else { for (int i = 0; i < resources.length; i++) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resources[i]); try { String anUrl = svnResource.getStatus().getUrlString(); if (anUrl != null) urlList.add(anUrl); } catch (SVNException e1) {} } } String[] urlStrings = new String[urlList.size()]; urlList.toArray(urlStrings); if (urlStrings.length == 0) return null; String urlString = urlStrings[0]; tag1: for (int i = 0; i < urlString.length(); i++) { String partialPath = urlString.substring(0, i+1); if (partialPath.endsWith("/")) { for (int j = 1; j < urlStrings.length; j++) { if (!urlStrings[j].startsWith(partialPath)) break tag1; } commonRoot = partialPath.substring(0, i); } } if (resources == null) { branchResources = new BranchResource[remoteResources.length]; for (int i = 0; i < remoteResources.length; i++) { branchResources[i] = new BranchResource(remoteResources[i], urlStrings[i].substring(commonRoot.length() + 1)); } } else { branchResources = new BranchResource[resources.length]; for (int i = 0; i < resources.length; i++) { branchResources[i] = new BranchResource(resources[i], urlStrings[i].substring(commonRoot.length() + 1)); } } return commonRoot; } private boolean canFinish() { return toUrlCombo.getText().trim().length() > 0; } public SVNUrl getUrl() { if (urls == null || urls.length < 1) return null; return urls[0]; } public SVNUrl[] getUrls() { return urls; } public String getUrlText() { return toUrlCombo.getText().trim(); } public void saveUrl() { toUrlCombo.saveUrl(); } public ISVNLocalResource getSvnResource() { if (svnResources == null || svnResources.length < 1) return null; return svnResources[0]; } private class BranchResource implements IAdaptable { private IResource resource; private ISVNRemoteResource remoteResource; private String partialPath; public BranchResource(IResource resource, String partialPath) { this.resource = resource; this.partialPath = partialPath; } public BranchResource(ISVNRemoteResource remoteResource, String partialPath) { this.remoteResource = remoteResource; this.partialPath = partialPath; } public IResource getResource() { return resource; } public ISVNRemoteResource getRemoteResource() { return remoteResource; } public void setResource(IResource resource) { this.resource = resource; } public String getPartialPath() { return partialPath; } public void setPartialPath(String partialPath) { this.partialPath = partialPath; } public Object getAdapter(Class adapter) { if (IResource.class == adapter) return resource; return null; } } class BranchLabelProvider extends LabelProvider implements ITableLabelProvider { WorkbenchLabelProvider workbenchLabelProvider = new WorkbenchLabelProvider(); public String getColumnText(Object element, int columnIndex) { return getText(element); } public String getText(Object element) { BranchResource branchResource = (BranchResource)element; if (multipleSelections()) { if (sameStructureButton != null && sameStructureButton.getSelection()) return branchResource.getPartialPath() + " [" + toUrlCombo.getText() + "/" + branchResource.getPartialPath() + "]"; else { return getDestinationText(branchResource); } } else { return branchResource.getPartialPath() + " [" + toUrlCombo.getText() + "]"; // return getDestinationText(branchResource); } } private String getDestinationText(BranchResource branchResource) { String name = null; if (branchResource.getResource() == null) name = branchResource.getRemoteResource().getName(); else name = branchResource.getResource().getName(); return branchResource.getPartialPath() + " [" + toUrlCombo.getText() + "/" + name + "]"; } public Image getColumnImage(Object element, int columnIndex) { return getImage(element); } public Image getImage(Object element) { BranchResource branchResource = (BranchResource)element; if (branchResource.getResource() == null) return workbenchLabelProvider.getImage(branchResource.getRemoteResource()); else return workbenchLabelProvider.getImage(branchResource.getResource()); } } class BranchContentProvider implements IStructuredContentProvider { public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } public Object[] getElements(Object obj) { return branchResources; } } class TableDecoratingLabelProvider extends DecoratingLabelProvider implements ITableLabelProvider { ITableLabelProvider provider; ILabelDecorator decorator; public TableDecoratingLabelProvider(ILabelProvider provider, ILabelDecorator decorator) { super(provider, decorator); this.provider = (ITableLabelProvider) provider; this.decorator = decorator; } public Image getColumnImage(Object element, int columnIndex) { Image image = provider.getColumnImage(element, columnIndex); if (decorator != null) { Image decorated = decorator.decorateImage(image, element); if (decorated != null) { return decorated; } } return image; } public String getColumnText(Object element, int columnIndex) { String text = provider.getColumnText(element, columnIndex); return text; } } } CheckoutWizard.java000066400000000000000000000460031203611042400407700ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards; import java.lang.reflect.InvocationTargetException; import java.util.Properties; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.Wizard; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.widgets.Display; import org.eclipse.team.core.TeamException; import org.eclipse.ui.IImportWizard; import org.eclipse.ui.INewWizard; import org.eclipse.ui.IWorkbench; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.actions.CheckoutAsProjectAction; import org.tigris.subversion.subclipse.ui.actions.CheckoutIntoAction; import org.tigris.subversion.subclipse.ui.actions.CheckoutUsingProjectWizardAction; public class CheckoutWizard extends Wizard implements INewWizard, IImportWizard { private CheckoutWizardLocationPage locationPage; private ConfigurationWizardMainPage createLocationPage; private CheckoutWizardSelectionPage selectionPage; private CheckoutWizardCheckoutAsMultiplePage checkoutAsMultiplePage; private CheckoutWizardCheckoutAsWithProjectFilePage checkoutAsWithProjectFilePage; private CheckoutWizardCheckoutAsWithoutProjectFilePage checkoutAsWithoutProjectFilePage; private CheckoutWizardProjectPage projectPage; private IProject project; private String projectName; private String projectNamePrefix; private String projectNameSuffix; private boolean hasProjectFile; private ISVNRepositoryLocation repositoryLocation; private ISVNRemoteFolder[] remoteFolders; public CheckoutWizard() { super(); setWindowTitle(Policy.bind("CheckoutWizard.title")); //$NON-NLS-1$ } public CheckoutWizard(ISVNRemoteFolder[] remoteFolders) { this(); this.remoteFolders = remoteFolders; if (remoteFolders.length == 1) { checkForProjectFile(); } } public void addPages() { setNeedsProgressMonitor(true); if (remoteFolders == null) { locationPage = new CheckoutWizardLocationPage("locationPage", //$NON-NLS-1$ Policy.bind("CheckoutWizardLocationPage.heading"), //$NON-NLS-1$ SVNUIPlugin.getPlugin().getImageDescriptor( ISVNUIConstants.IMG_WIZBAN_SHARE)); addPage(locationPage); createLocationPage = new ConfigurationWizardMainPage( "createLocationPage", //$NON-NLS-1$ Policy.bind("CheckoutWizardLocationPage.heading"), //$NON-NLS-1$ SVNUIPlugin.getPlugin().getImageDescriptor( ISVNUIConstants.IMG_WIZBAN_SHARE)); addPage(createLocationPage); selectionPage = new CheckoutWizardSelectionPage("selectionPage", //$NON-NLS-1$ Policy.bind("CheckoutWizardSelectionPage.heading"), //$NON-NLS-1$ SVNUIPlugin.getPlugin().getImageDescriptor( ISVNUIConstants.IMG_WIZBAN_SHARE)); addPage(selectionPage); } if (remoteFolders == null || remoteFolders.length > 1) { checkoutAsMultiplePage = new CheckoutWizardCheckoutAsMultiplePage( "checkoutAsMultiplePage", //$NON-NLS-1$ Policy.bind("CheckoutWizardCheckoutAsPage.heading"), //$NON-NLS-1$ SVNUIPlugin.getPlugin().getImageDescriptor( ISVNUIConstants.IMG_WIZBAN_SHARE)); addPage(checkoutAsMultiplePage); } if (remoteFolders == null || remoteFolders.length == 1) { if (remoteFolders == null || hasProjectFile) { checkoutAsWithProjectFilePage = new CheckoutWizardCheckoutAsWithProjectFilePage( "checkoutAsWithProjectFilePage", //$NON-NLS-1$ Policy.bind("CheckoutWizardCheckoutAsPage.heading"), //$NON-NLS-1$ SVNUIPlugin.getPlugin().getImageDescriptor( ISVNUIConstants.IMG_WIZBAN_SHARE)); addPage(checkoutAsWithProjectFilePage); if (remoteFolders != null && remoteFolders.length == 1) { if (project != null) checkoutAsWithProjectFilePage.setProjectName(project.getName()); } } if (remoteFolders == null || !hasProjectFile) { checkoutAsWithoutProjectFilePage = new CheckoutWizardCheckoutAsWithoutProjectFilePage( "checkoutAsWithoutProjectFilePage", //$NON-NLS-1$ Policy.bind("CheckoutWizardCheckoutAsPage.heading"), //$NON-NLS-1$ SVNUIPlugin.getPlugin().getImageDescriptor( ISVNUIConstants.IMG_WIZBAN_SHARE)); addPage(checkoutAsWithoutProjectFilePage); } } projectPage = new CheckoutWizardProjectPage("projectPage", //$NON-NLS-1$ Policy.bind("CheckoutWizardProjectPage.heading"), //$NON-NLS-1$ SVNUIPlugin.getPlugin().getImageDescriptor( ISVNUIConstants.IMG_WIZBAN_SHARE)); addPage(projectPage); } public IWizardPage getNextPage(IWizardPage page) { return getNextPage(page, true); } public IWizardPage getNextPage(IWizardPage page, boolean aboutToShow) { if (page == locationPage) { if (locationPage.createNewLocation()) return createLocationPage; else { if (aboutToShow) selectionPage.setLocation(repositoryLocation); return selectionPage; } } if (page == createLocationPage) { if (aboutToShow) { ISVNRepositoryLocation newLocation = createLocation(); if (newLocation != null) { locationPage.refreshLocations(); selectionPage.setLocation(newLocation); } } return selectionPage; } if (page == selectionPage) { if (aboutToShow) { if (remoteFolders.length == 1) { BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { checkForProjectFile(); if (hasProjectFile) { if (checkoutAsWithProjectFilePage != null) { checkoutAsWithProjectFilePage.setText(Policy.bind("CheckoutWizardCheckoutAsPage.single", remoteFolders[0].getName())); //$NON-NLS-1$ if (project == null) { try { project = SVNWorkspaceRoot.getProject(remoteFolders[0],null); } catch (Exception e) { project = SVNWorkspaceRoot.getProject(remoteFolders[0].getName()); } } if (project != null) checkoutAsWithProjectFilePage.setProject(project.getName()); } } else { if (checkoutAsWithoutProjectFilePage != null) { checkoutAsWithoutProjectFilePage.setText(Policy.bind("CheckoutWizardCheckoutAsPage.single", remoteFolders[0].getName())); //$NON-NLS-1$ IProject project = null; try { project = SVNWorkspaceRoot.getProject(remoteFolders[0],null); } catch (Exception e) { project = SVNWorkspaceRoot.getProject(remoteFolders[0].getName()); } checkoutAsWithoutProjectFilePage.setProject(project.getName()); // checkoutAsWithoutProjectFilePage.setProject(remoteFolders[0].getName()); } } } }); } else { if (checkoutAsMultiplePage != null) checkoutAsMultiplePage.setText(Policy.bind("CheckoutWizardCheckoutAsPage.multiple", Integer.toString(remoteFolders.length))); //$NON-NLS-1$ } } if (remoteFolders.length > 1) return checkoutAsMultiplePage; else { if (hasProjectFile) return checkoutAsWithProjectFilePage; else return checkoutAsWithoutProjectFilePage; } } if (page == checkoutAsWithoutProjectFilePage) { if (checkoutAsWithoutProjectFilePage.useWizard()) return null; else return projectPage; } if (page == checkoutAsMultiplePage || page == checkoutAsWithProjectFilePage) return projectPage; return super.getNextPage(page); } private ISVNRepositoryLocation createLocation() { createLocationPage.finish(new NullProgressMonitor()); Properties properties = createLocationPage.getProperties(); final ISVNRepositoryLocation[] root = new ISVNRepositoryLocation[1]; SVNProviderPlugin provider = SVNProviderPlugin.getPlugin(); try { root[0] = provider.getRepositories().createRepository(properties); // Validate the connection info. This process also determines the rootURL try { new ProgressMonitorDialog(getShell()).run(true, true, new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { try { root[0].validateConnection(monitor); } catch (TeamException e) { throw new InvocationTargetException(e); } } }); } catch (InterruptedException e) { return null; } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if (t instanceof TeamException) { throw (TeamException)t; } } provider.getRepositories().addOrUpdateRepository(root[0]); } catch (TeamException e) { if (root[0] == null) { // Exception creating the root, we cannot continue SVNUIPlugin.openError(getContainer().getShell(), Policy.bind("NewLocationWizard.exception"), null, e); //$NON-NLS-1$ return null; } else { // Exception validating. We can continue if the user wishes. IStatus error = e.getStatus(); if (error.isMultiStatus() && error.getChildren().length == 1) { error = error.getChildren()[0]; } boolean keep = false; if (error.isMultiStatus()) { SVNUIPlugin.openError(getContainer().getShell(), Policy.bind("NewLocationWizard.validationFailedTitle"), null, e); //$NON-NLS-1$ } else { keep = MessageDialog.openQuestion(getContainer().getShell(), Policy.bind("NewLocationWizard.validationFailedTitle"), //$NON-NLS-1$ Policy.bind("NewLocationWizard.validationFailedText", new Object[] {error.getMessage()})); //$NON-NLS-1$ } try { if (keep) { provider.getRepositories().addOrUpdateRepository(root[0]); } else { provider.getRepositories().disposeRepository(root[0]); } } catch (TeamException e1) { SVNUIPlugin.openError(getContainer().getShell(), Policy.bind("exception"), null, e1); //$NON-NLS-1$ return null; } if (keep) return root[0]; } } return root[0]; } private void checkForProjectFile() { if(!hasProjectFile && project == null) { try { new ProgressMonitorDialog(getShell()).run(true, false, new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { monitor = Policy.monitorFor(monitor); monitor.beginTask("Getting remote project info", 100); ISVNRemoteFolder folder = remoteFolders[0]; // String url = folder.getUrl().toString() + "/.project"; //$NON-NLS-1$ try { // ISVNClientAdapter client = SVNProviderPlugin.getPlugin().getSVNClientManager().createSVNClient(); // client.getInfo(new SVNUrl(url)); hasProjectFile = true; monitor.worked(50); project = SVNWorkspaceRoot.getProject(folder,null); } catch (Exception e) { hasProjectFile = false; project = SVNWorkspaceRoot.getProject(folder.getName()); } finally { monitor.done(); } } }); } catch (InterruptedException e) { // operation canceled } catch (InvocationTargetException e) { SVNUIPlugin.openError(getShell(), Policy.bind("exception"), null, e.getCause()); //$NON-NLS-1$ } } } public boolean canFinish() { IWizardPage page = getContainer().getCurrentPage(); if (page == checkoutAsMultiplePage || page == projectPage) { return projectPage.isPageComplete(); } if (page == checkoutAsWithoutProjectFilePage) { if (checkoutAsWithoutProjectFilePage.useWizard()) return true; else return checkoutAsWithoutProjectFilePage.isPageComplete() && projectPage.isPageComplete(); } if (page == checkoutAsWithProjectFilePage) { return checkoutAsWithProjectFilePage.isPageComplete() && projectPage.isPageComplete(); } if (page == selectionPage) { return selectionPage.isPageComplete(); } return super.canFinish(); } public void setLocation(ISVNRepositoryLocation repositoryLocation) { // selectionPage.setLocation(repositoryLocation); this.repositoryLocation = repositoryLocation; } public boolean performFinish() { if (remoteFolders.length == 1) { checkForProjectFile(); boolean useWizard = false; if (!hasProjectFile) useWizard = checkoutAsWithoutProjectFilePage.useWizard(); if (useWizard) return checkoutUsingWizard(); } if (projectPage.getLocation().equals(ResourcesPlugin.getWorkspace().getRoot().getLocation().toString())) return checkoutAsProject(); else return checkoutAsProjectInto(); } public void init(IWorkbench workbench, IStructuredSelection selection) { } public void setProjectName(String projectName) { this.projectName = projectName; projectPage.setLocation(); } public void setRemoteFolders(ISVNRemoteFolder[] remoteFolders) { this.remoteFolders = remoteFolders; this.hasProjectFile = false; this.project = null; } public ISVNRemoteFolder[] getRemoteFolders() { return remoteFolders; } private boolean checkoutUsingWizard() { CheckoutUsingProjectWizardAction checkoutAction = new CheckoutUsingProjectWizardAction(remoteFolders); try { if (remoteFolders.length == 1) { if (hasProjectFile) { checkoutAction.setSvnRevision(checkoutAsWithProjectFilePage.getRevision()); checkoutAction.setDepth(checkoutAsWithProjectFilePage.getDepth()); checkoutAction.setIgnoreExternals(checkoutAsWithProjectFilePage.isIgnoreExternals()); checkoutAction.setForce(checkoutAsWithProjectFilePage.isForce()); } else { checkoutAction.setSvnRevision(checkoutAsWithoutProjectFilePage.getRevision()); checkoutAction.setDepth(checkoutAsWithoutProjectFilePage.getDepth()); checkoutAction.setIgnoreExternals(checkoutAsWithoutProjectFilePage.isIgnoreExternals()); checkoutAction.setForce(checkoutAsWithoutProjectFilePage.isForce()); } } else { checkoutAction.setSvnRevision(checkoutAsMultiplePage.getRevision()); checkoutAction.setDepth(checkoutAsMultiplePage.getDepth()); checkoutAction.setIgnoreExternals(checkoutAsMultiplePage.isIgnoreExternals()); checkoutAction.setForce(checkoutAsMultiplePage.isForce()); } checkoutAction.execute(null); } catch (Exception e) { MessageDialog.openError(getShell(), Policy .bind("CheckoutAsAction.title"), e.getMessage()); return false; } return true; } private boolean checkoutAsProjectInto() { CheckoutIntoAction checkoutAction; if (shouldRenameMultipleProjects()) { checkoutAction = new CheckoutIntoAction(remoteFolders, getProjectNamePrefix(), getProjectNameSuffix(), projectPage.getCanonicalLocation(), getShell()); } else { checkoutAction = new CheckoutIntoAction(remoteFolders, projectName, projectPage.getCanonicalLocation(), getShell()); } try { if (remoteFolders.length == 1) { if (hasProjectFile) { checkoutAction.setSvnRevision(checkoutAsWithProjectFilePage.getRevision()); checkoutAction.setDepth(checkoutAsWithProjectFilePage.getDepth()); checkoutAction.setIgnoreExternals(checkoutAsWithProjectFilePage.isIgnoreExternals()); checkoutAction.setForce(checkoutAsWithProjectFilePage.isForce()); } else { checkoutAction.setSvnRevision(checkoutAsWithoutProjectFilePage.getRevision()); checkoutAction.setDepth(checkoutAsWithoutProjectFilePage.getDepth()); checkoutAction.setIgnoreExternals(checkoutAsWithoutProjectFilePage.isIgnoreExternals()); checkoutAction.setForce(checkoutAsWithoutProjectFilePage.isForce()); } } else { checkoutAction.setSvnRevision(checkoutAsMultiplePage.getRevision()); checkoutAction.setDepth(checkoutAsMultiplePage.getDepth()); checkoutAction.setIgnoreExternals(checkoutAsMultiplePage.isIgnoreExternals()); checkoutAction.setForce(checkoutAsMultiplePage.isForce()); } checkoutAction.execute(null); } catch (Exception e) { MessageDialog.openError(getShell(), Policy .bind("CheckoutAsAction.title"), e.getMessage()); return false; } return true; } private boolean checkoutAsProject() { CheckoutAsProjectAction checkoutAction; if (shouldRenameMultipleProjects()) { checkoutAction = new CheckoutAsProjectAction(remoteFolders, getProjectNamePrefix(), getProjectNameSuffix(), getShell()); } else { checkoutAction = new CheckoutAsProjectAction(remoteFolders, projectName, getShell()); } try { if (remoteFolders.length == 1) { if (hasProjectFile) { checkoutAction.setSvnRevision(checkoutAsWithProjectFilePage.getRevision()); checkoutAction.setDepth(checkoutAsWithProjectFilePage.getDepth()); checkoutAction.setIgnoreExternals(checkoutAsWithProjectFilePage.isIgnoreExternals()); checkoutAction.setForce(checkoutAsWithProjectFilePage.isForce()); } else { checkoutAction.setSvnRevision(checkoutAsWithoutProjectFilePage.getRevision()); checkoutAction.setDepth(checkoutAsWithoutProjectFilePage.getDepth()); checkoutAction.setIgnoreExternals(checkoutAsWithoutProjectFilePage.isIgnoreExternals()); checkoutAction.setForce(checkoutAsWithoutProjectFilePage.isForce()); } } else { checkoutAction.setSvnRevision(checkoutAsMultiplePage.getRevision()); checkoutAction.setDepth(checkoutAsMultiplePage.getDepth()); checkoutAction.setIgnoreExternals(checkoutAsMultiplePage.isIgnoreExternals()); checkoutAction.setForce(checkoutAsMultiplePage.isForce()); } checkoutAction.execute(null); } catch (Exception e) { MessageDialog.openError(getShell(), Policy .bind("CheckoutAsAction.title"), e.getMessage()); return false; } return true; } public String getProjectName() { return projectName; } public String getProjectNamePrefix() { return projectNamePrefix; } public void setProjectNamePrefix(String projectNamePrefix) { this.projectNamePrefix = projectNamePrefix; } public String getProjectNameSuffix() { return projectNameSuffix; } public void setProjectNameSuffix(String projectNameSuffix) { this.projectNameSuffix = projectNameSuffix; } /** * @return true, if multiple projects should be checked out and project name * prefix and/or suffix is set */ protected boolean shouldRenameMultipleProjects() { return ((remoteFolders != null) && (remoteFolders.length > 1) && ((getProjectNamePrefix() != null) || (getProjectNameSuffix() != null))); } } CheckoutWizardCheckoutAsMultiplePage.java000066400000000000000000000245151203611042400452570ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards; import java.text.ParseException; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.ui.DepthComboHelper; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.dialogs.HistoryDialog; import org.tigris.subversion.svnclientadapter.SVNRevision; public class CheckoutWizardCheckoutAsMultiplePage extends WizardPage { private Label textLabel; private Button projectsButton; private Text projectNamePrefixText; private Text projectNameSuffixText; private Label previewText; private Button existingButton; private Text revisionText; private Button headButton; private Combo depthCombo; private Button ignoreExternalsButton; private Button forceButton; private static final int REVISION_WIDTH_HINT = 40; private static final int NAME_WIDTH_HINT = 60; public CheckoutWizardCheckoutAsMultiplePage(String pageName, String title, ImageDescriptor titleImage) { super(pageName, title, titleImage); } public void createControl(Composite parent) { CheckoutWizard wizard = (CheckoutWizard)getWizard(); Composite outerContainer = new Composite(parent,SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 1; outerContainer.setLayout(layout); outerContainer.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); textLabel = new Label(outerContainer, SWT.NONE); GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); textLabel.setLayoutData(data); if (wizard.getRemoteFolders() != null) { textLabel.setText(Policy.bind("CheckoutWizardCheckoutAsPage.multiple", Integer.toString(wizard.getRemoteFolders().length))); //$NON-NLS-1$ } projectsButton = new Button(outerContainer, SWT.RADIO); projectsButton.setText(Policy.bind("CheckoutWizardCheckoutAsPage.projects")); //$NON-NLS-1$ Group projectGroup = new Group(outerContainer,SWT.NONE); projectGroup.setText(Policy.bind("CheckoutWizardCheckoutAsPage.projectNaming")); //$NON-NLS-1$ GridLayout projectLayout = new GridLayout(); projectLayout.numColumns = 4; projectGroup.setLayout(projectLayout); projectGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); projectNamePrefixText = new Text(projectGroup, SWT.BORDER); data = new GridData(); data.widthHint = NAME_WIDTH_HINT; projectNamePrefixText.setLayoutData(data); projectNamePrefixText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { CheckoutWizard wizard = (CheckoutWizard)getWizard(); wizard.setProjectNamePrefix(projectNamePrefixText.getText().trim()); setPreview(); } }); Label projectTextLabel = new Label(projectGroup, SWT.NONE); projectTextLabel.setText(""); //$NON-NLS-1$ projectNameSuffixText = new Text(projectGroup, SWT.BORDER); data = new GridData(); data.horizontalSpan = 2; data.widthHint = NAME_WIDTH_HINT; projectNameSuffixText.setLayoutData(data); projectNameSuffixText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { CheckoutWizard wizard = (CheckoutWizard)getWizard(); wizard.setProjectNameSuffix(projectNameSuffixText.getText().trim()); setPreview(); } }); Composite previewGroup = new Composite(projectGroup,SWT.NONE); GridLayout previewLayout = new GridLayout(); previewLayout.numColumns = 2; previewGroup.setLayout(previewLayout); data = new GridData(SWT.FILL, SWT.FILL, true, false); data.horizontalSpan = 4; previewGroup.setLayoutData(data); Label previewLabel = new Label(previewGroup, SWT.NONE); previewLabel.setText(Policy.bind("CheckoutWizardCheckoutAsPage.namePreview")); //$NON-NLS-1$ previewText = new Label(previewGroup, SWT.NONE); data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); previewText.setLayoutData(data); previewText.setText("default_name"); //$NON-NLS-1$ existingButton = new Button(outerContainer, SWT.RADIO); existingButton.setText(Policy.bind("CheckoutWizardCheckoutAsPage.existing")); //$NON-NLS-1$ existingButton.setEnabled(false); existingButton.setVisible(false); projectsButton.setSelection(true); Composite revisionGroup = new Composite(outerContainer, SWT.NULL); GridLayout revisionLayout = new GridLayout(); revisionLayout.numColumns = 3; revisionGroup.setLayout(revisionLayout); data = new GridData(SWT.FILL, SWT.FILL, true, false); revisionGroup.setLayoutData(data); headButton = new Button(revisionGroup, SWT.CHECK); headButton.setText(Policy.bind("CheckoutWizard.head")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 3; headButton.setLayoutData(data); headButton.setSelection(true); Label revisionLabel = new Label(revisionGroup, SWT.NONE); revisionLabel.setText(Policy.bind("CheckoutWizard.revision")); //$NON-NLS-1$ revisionText = new Text(revisionGroup, SWT.BORDER); data = new GridData(); data.widthHint = REVISION_WIDTH_HINT; revisionText.setLayoutData(data); revisionText.setEnabled(false); Button logButton = new Button(revisionGroup, SWT.PUSH); logButton.setText(Policy.bind("MergeDialog.showLog")); //$NON-NLS-1$ logButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { showLog(); } }); SelectionListener revisionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { revisionText.setEnabled(!headButton.getSelection()); if (!headButton.getSelection()) { revisionText.selectAll(); revisionText.setFocus(); } } }; headButton.addSelectionListener(revisionListener); Group parameterGroup = new Group(outerContainer, SWT.NULL); GridLayout parameterLayout = new GridLayout(); parameterLayout.numColumns = 2; parameterGroup.setLayout(parameterLayout); data = new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1); parameterGroup.setLayoutData(data); Label depthLabel = new Label(parameterGroup, SWT.NONE); depthLabel.setText(Policy.bind("SvnDialog.depth")); //$NON-NLS-1$ depthCombo = new Combo(parameterGroup, SWT.READ_ONLY); DepthComboHelper.addDepths(depthCombo, false, ISVNUIConstants.DEPTH_INFINITY); ignoreExternalsButton = new Button(parameterGroup, SWT.CHECK); ignoreExternalsButton.setText(Policy.bind("SvnDialog.ignoreExternals")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; ignoreExternalsButton.setLayoutData(data); forceButton = new Button(parameterGroup, SWT.CHECK); forceButton.setText(Policy.bind("SvnDialog.force")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; forceButton.setLayoutData(data); forceButton.setSelection(true); setMessage(Policy.bind("CheckoutWizardCheckoutAsPage.text")); //$NON-NLS-1$ setControl(outerContainer); } public void setText(String text) { textLabel.setText(text); } private void setPreview() { previewText.setText(projectNamePrefixText.getText().trim() + "default_name" + projectNameSuffixText.getText().trim()); //$NON-NLS-1$ } private void showLog() { HistoryDialog dialog = new HistoryDialog(getShell(), getCommonParent()); if (dialog.open() == HistoryDialog.CANCEL) return; ILogEntry[] selectedEntries = dialog.getSelectedLogEntries(); if (selectedEntries.length == 0) return; revisionText.setText(Long.toString(selectedEntries[0].getRevision().getNumber())); revisionText.setEnabled(true); headButton.setSelection(false); } private ISVNRemoteResource getCommonParent() { ISVNRemoteFolder[] remoteFolders = ((CheckoutWizard)getWizard()).getRemoteFolders(); if (remoteFolders.length == 1) return remoteFolders[0]; ISVNRemoteResource commonParent = null; ISVNRemoteResource parent = remoteFolders[0]; while (commonParent == null) { parent = parent.getParent(); if (parent == null) break; for (int i = 1; i < remoteFolders.length; i++) { if (!remoteFolders[i].getUrl().toString().startsWith(parent.getUrl().toString())) break; } commonParent = parent; } return commonParent; } public SVNRevision getRevision() { if (headButton.getSelection()) return SVNRevision.HEAD; SVNRevision svnRevision = null; try { svnRevision = SVNRevision.getRevision(revisionText.getText().trim()); } catch (ParseException e) {} if (svnRevision == null) return SVNRevision.HEAD; return svnRevision; } public int getDepth() { return DepthComboHelper.getDepth(depthCombo); } public boolean isIgnoreExternals() { return ignoreExternalsButton.getSelection(); } public boolean isForce() { return forceButton.getSelection(); } } CheckoutWizardCheckoutAsWithProjectFilePage.java000066400000000000000000000241731203611042400465260ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards; import java.text.ParseException; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.ui.DepthComboHelper; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.dialogs.HistoryDialog; import org.tigris.subversion.svnclientadapter.SVNRevision; public class CheckoutWizardCheckoutAsWithProjectFilePage extends WizardPage { private Label textLabel; private Button wizardButton; private Button projectButton; private Text projectText; private Button existingButton; private String projectName; private Text revisionText; private Button headButton; private Combo depthCombo; private Button ignoreExternalsButton; private Button forceButton; private static final int REVISION_WIDTH_HINT = 40; public CheckoutWizardCheckoutAsWithProjectFilePage(String pageName, String title, ImageDescriptor titleImage) { super(pageName, title, titleImage); } public void createControl(Composite parent) { CheckoutWizard wizard = (CheckoutWizard)getWizard(); ISVNRemoteFolder[] remoteFolders = wizard.getRemoteFolders(); Composite outerContainer = new Composite(parent,SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 1; outerContainer.setLayout(layout); outerContainer.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); textLabel = new Label(outerContainer, SWT.NONE); GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); textLabel.setLayoutData(data); if (remoteFolders != null) { textLabel.setText(Policy.bind("CheckoutWizardCheckoutAsPage.single", remoteFolders[0].getName())); //$NON-NLS-1$ } wizardButton = new Button(outerContainer, SWT.RADIO); wizardButton.setText(Policy.bind("CheckoutWizardCheckoutAsPage.wizard")); //$NON-NLS-1$ wizardButton.setEnabled(false); Label notAvailableLabel = new Label(outerContainer, SWT.NONE); notAvailableLabel.setText(Policy.bind("CheckoutWizardCheckoutAsPage.notAvailable")); //$NON-NLS-1$ notAvailableLabel.setEnabled(false); projectButton = new Button(outerContainer, SWT.RADIO); projectButton.setText(Policy.bind("CheckoutWizardCheckoutAsPage.project")); //$NON-NLS-1$ Composite projectGroup = new Composite(outerContainer,SWT.NONE); GridLayout projectLayout = new GridLayout(); projectLayout.numColumns = 2; projectGroup.setLayout(projectLayout); projectGroup.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); Label projectLabel = new Label(projectGroup, SWT.NONE); projectLabel.setText(Policy.bind("CheckoutWizardCheckoutAsPage.projectName")); //$NON-NLS-1$ projectText = new Text(projectGroup, SWT.BORDER); data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); projectText.setLayoutData(data); if (projectName == null) { if (remoteFolders != null) projectText.setText(remoteFolders[0].getName()); } else projectText.setText(projectName); projectText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { CheckoutWizard wizard = (CheckoutWizard)getWizard(); wizard.setProjectName(projectText.getText().trim()); setPageComplete(canFinish()); } }); existingButton = new Button(outerContainer, SWT.RADIO); existingButton.setText(Policy.bind("CheckoutWizardCheckoutAsPage.existing")); //$NON-NLS-1$ existingButton.setEnabled(false); existingButton.setVisible(false); projectButton.setSelection(true); Composite revisionGroup = new Composite(outerContainer, SWT.NULL); GridLayout revisionLayout = new GridLayout(); revisionLayout.numColumns = 3; revisionLayout.marginWidth = 0; revisionLayout.marginHeight = 0; revisionGroup.setLayout(revisionLayout); data = new GridData(SWT.FILL, SWT.FILL, true, false); revisionGroup.setLayoutData(data); headButton = new Button(revisionGroup, SWT.CHECK); headButton.setText(Policy.bind("CheckoutWizard.head")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 3; headButton.setLayoutData(data); headButton.setSelection(true); Label revisionLabel = new Label(revisionGroup, SWT.NONE); revisionLabel.setText(Policy.bind("CheckoutWizard.revision")); //$NON-NLS-1$ revisionText = new Text(revisionGroup, SWT.BORDER); data = new GridData(); data.widthHint = REVISION_WIDTH_HINT; revisionText.setLayoutData(data); revisionText.setEnabled(false); Button logButton = new Button(revisionGroup, SWT.PUSH); logButton.setText(Policy.bind("MergeDialog.showLog")); //$NON-NLS-1$ logButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { showLog(); } }); SelectionListener revisionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { revisionText.setEnabled(!headButton.getSelection()); if (!headButton.getSelection()) { revisionText.selectAll(); revisionText.setFocus(); } } }; headButton.addSelectionListener(revisionListener); SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { projectText.setEnabled(projectButton.getSelection()); if (projectButton.getSelection()) { projectText.selectAll(); projectText.setFocus(); } setPageComplete(canFinish()); } }; wizardButton.addSelectionListener(selectionListener); projectButton.addSelectionListener(selectionListener); existingButton.addSelectionListener(selectionListener); Group parameterGroup = new Group(outerContainer, SWT.NULL); GridLayout parameterLayout = new GridLayout(); parameterLayout.numColumns = 2; parameterGroup.setLayout(parameterLayout); data = new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1); parameterGroup.setLayoutData(data); Label depthLabel = new Label(parameterGroup, SWT.NONE); depthLabel.setText(Policy.bind("SvnDialog.depth")); //$NON-NLS-1$ depthCombo = new Combo(parameterGroup, SWT.READ_ONLY); DepthComboHelper.addDepths(depthCombo, false, ISVNUIConstants.DEPTH_INFINITY); ignoreExternalsButton = new Button(parameterGroup, SWT.CHECK); ignoreExternalsButton.setText(Policy.bind("SvnDialog.ignoreExternals")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; ignoreExternalsButton.setLayoutData(data); forceButton = new Button(parameterGroup, SWT.CHECK); forceButton.setText(Policy.bind("SvnDialog.force")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; forceButton.setLayoutData(data); forceButton.setSelection(true); setMessage(Policy.bind("CheckoutWizardCheckoutAsPage.text")); //$NON-NLS-1$ setControl(outerContainer); } public void setText(String text) { textLabel.setText(text); } public void setProject(String project) { projectText.setText(project); } private boolean canFinish() { return !projectButton.getSelection() || projectText.getText().trim().length() > 0; } public void setProjectName(String projectName) { this.projectName = projectName; } private void showLog() { HistoryDialog dialog = new HistoryDialog(getShell(), getCommonParent()); if (dialog.open() == HistoryDialog.CANCEL) return; ILogEntry[] selectedEntries = dialog.getSelectedLogEntries(); if (selectedEntries.length == 0) return; revisionText.setText(Long.toString(selectedEntries[0].getRevision().getNumber())); revisionText.setEnabled(true); headButton.setSelection(false); } private ISVNRemoteResource getCommonParent() { ISVNRemoteFolder[] remoteFolders = ((CheckoutWizard)getWizard()).getRemoteFolders(); if (remoteFolders.length == 1) return remoteFolders[0]; ISVNRemoteResource commonParent = null; ISVNRemoteResource parent = remoteFolders[0]; while (commonParent == null) { parent = parent.getParent(); if (parent == null) break; for (int i = 1; i < remoteFolders.length; i++) { if (!remoteFolders[i].getUrl().toString().startsWith(parent.getUrl().toString())) break; } commonParent = parent; } return commonParent; } public SVNRevision getRevision() { if (headButton.getSelection()) return SVNRevision.HEAD; SVNRevision svnRevision = null; try { svnRevision = SVNRevision.getRevision(revisionText.getText().trim()); } catch (ParseException e) {} if (svnRevision == null) return SVNRevision.HEAD; return svnRevision; } public int getDepth() { return DepthComboHelper.getDepth(depthCombo); } public boolean isIgnoreExternals() { return ignoreExternalsButton.getSelection(); } public boolean isForce() { return forceButton.getSelection(); } } CheckoutWizardCheckoutAsWithoutProjectFilePage.java000066400000000000000000000235431203611042400472560ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards; import java.text.ParseException; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.ui.DepthComboHelper; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.dialogs.HistoryDialog; import org.tigris.subversion.svnclientadapter.SVNRevision; public class CheckoutWizardCheckoutAsWithoutProjectFilePage extends WizardPage { private Label textLabel; private Button wizardButton; private Button projectButton; private Text projectText; private Button existingButton; private Text revisionText; private Button headButton; private Combo depthCombo; private Button ignoreExternalsButton; private Button forceButton; private static final int REVISION_WIDTH_HINT = 40; public CheckoutWizardCheckoutAsWithoutProjectFilePage(String pageName, String title, ImageDescriptor titleImage) { super(pageName, title, titleImage); setPageComplete(true); } public void createControl(Composite parent) { CheckoutWizard wizard = (CheckoutWizard)getWizard(); ISVNRemoteFolder[] remoteFolders = wizard.getRemoteFolders(); Composite outerContainer = new Composite(parent,SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 1; outerContainer.setLayout(layout); outerContainer.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); textLabel = new Label(outerContainer, SWT.NONE); GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); textLabel.setLayoutData(data); if (remoteFolders != null) { textLabel.setText(Policy.bind("CheckoutWizardCheckoutAsPage.single", remoteFolders[0].getName())); //$NON-NLS-1$ } wizardButton = new Button(outerContainer, SWT.RADIO); wizardButton.setText(Policy.bind("CheckoutWizardCheckoutAsPage.wizard")); //$NON-NLS-1$ projectButton = new Button(outerContainer, SWT.RADIO); projectButton.setText(Policy.bind("CheckoutWizardCheckoutAsPage.project")); //$NON-NLS-1$ Composite projectGroup = new Composite(outerContainer,SWT.NONE); GridLayout projectLayout = new GridLayout(); projectLayout.numColumns = 2; projectGroup.setLayout(projectLayout); projectGroup.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); Label projectLabel = new Label(projectGroup, SWT.NONE); projectLabel.setText(Policy.bind("CheckoutWizardCheckoutAsPage.projectName")); //$NON-NLS-1$ projectText = new Text(projectGroup, SWT.BORDER); data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); projectText.setLayoutData(data); if (remoteFolders != null) projectText.setText(remoteFolders[0].getName()); projectText.setEnabled(false); projectText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { CheckoutWizard wizard = (CheckoutWizard)getWizard(); wizard.setProjectName(projectText.getText().trim()); setPageComplete(canFinish()); } }); existingButton = new Button(outerContainer, SWT.RADIO); existingButton.setText(Policy.bind("CheckoutWizardCheckoutAsPage.existing")); //$NON-NLS-1$ existingButton.setEnabled(false); existingButton.setVisible(false); wizardButton.setSelection(true); Composite revisionGroup = new Composite(outerContainer, SWT.NULL); GridLayout revisionLayout = new GridLayout(); revisionLayout.numColumns = 3; revisionLayout.marginWidth = 0; revisionLayout.marginHeight = 0; revisionGroup.setLayout(revisionLayout); data = new GridData(SWT.FILL, SWT.FILL, true, false); revisionGroup.setLayoutData(data); headButton = new Button(revisionGroup, SWT.CHECK); headButton.setText(Policy.bind("CheckoutWizard.head")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 3; headButton.setLayoutData(data); headButton.setSelection(true); Label revisionLabel = new Label(revisionGroup, SWT.NONE); revisionLabel.setText(Policy.bind("CheckoutWizard.revision")); //$NON-NLS-1$ revisionText = new Text(revisionGroup, SWT.BORDER); data = new GridData(); data.widthHint = REVISION_WIDTH_HINT; revisionText.setLayoutData(data); revisionText.setEnabled(false); Button logButton = new Button(revisionGroup, SWT.PUSH); logButton.setText(Policy.bind("MergeDialog.showLog")); //$NON-NLS-1$ logButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { showLog(); } }); SelectionListener revisionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { revisionText.setEnabled(!headButton.getSelection()); if (!headButton.getSelection()) { revisionText.selectAll(); revisionText.setFocus(); } } }; headButton.addSelectionListener(revisionListener); SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { projectText.setEnabled(projectButton.getSelection()); if (projectButton.getSelection()) { projectText.selectAll(); projectText.setFocus(); } setPageComplete(canFinish()); } }; wizardButton.addSelectionListener(selectionListener); projectButton.addSelectionListener(selectionListener); existingButton.addSelectionListener(selectionListener); Group parameterGroup = new Group(outerContainer, SWT.NULL); GridLayout parameterLayout = new GridLayout(); parameterLayout.numColumns = 2; parameterGroup.setLayout(parameterLayout); data = new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1); parameterGroup.setLayoutData(data); Label depthLabel = new Label(parameterGroup, SWT.NONE); depthLabel.setText(Policy.bind("SvnDialog.depth")); //$NON-NLS-1$ depthCombo = new Combo(parameterGroup, SWT.READ_ONLY); DepthComboHelper.addDepths(depthCombo, false, ISVNUIConstants.DEPTH_INFINITY); ignoreExternalsButton = new Button(parameterGroup, SWT.CHECK); ignoreExternalsButton.setText(Policy.bind("SvnDialog.ignoreExternals")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; ignoreExternalsButton.setLayoutData(data); forceButton = new Button(parameterGroup, SWT.CHECK); forceButton.setText(Policy.bind("SvnDialog.force")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; forceButton.setLayoutData(data); forceButton.setSelection(true); setMessage(Policy.bind("CheckoutWizardCheckoutAsPage.text")); //$NON-NLS-1$ setControl(outerContainer); } public void setText(String text) { textLabel.setText(text); } public void setProject(String project) { projectText.setText(project); } public boolean useWizard() { return wizardButton.getSelection(); } private boolean canFinish() { return !projectButton.getSelection() || projectText.getText().trim().length() > 0; } private void showLog() { HistoryDialog dialog = new HistoryDialog(getShell(), getCommonParent()); if (dialog.open() == HistoryDialog.CANCEL) return; ILogEntry[] selectedEntries = dialog.getSelectedLogEntries(); if (selectedEntries.length == 0) return; revisionText.setText(Long.toString(selectedEntries[0].getRevision().getNumber())); revisionText.setEnabled(true); headButton.setSelection(false); } private ISVNRemoteResource getCommonParent() { ISVNRemoteFolder[] remoteFolders = ((CheckoutWizard)getWizard()).getRemoteFolders(); if (remoteFolders.length == 1) return remoteFolders[0]; ISVNRemoteResource commonParent = null; ISVNRemoteResource parent = remoteFolders[0]; while (commonParent == null) { parent = parent.getParent(); if (parent == null) break; for (int i = 1; i < remoteFolders.length; i++) { if (!remoteFolders[i].getUrl().toString().startsWith(parent.getUrl().toString())) break; } commonParent = parent; } return commonParent; } public SVNRevision getRevision() { if (headButton.getSelection()) return SVNRevision.HEAD; SVNRevision svnRevision = null; try { svnRevision = SVNRevision.getRevision(revisionText.getText().trim()); } catch (ParseException e) {} if (svnRevision == null) return SVNRevision.HEAD; return svnRevision; } public int getDepth() { return DepthComboHelper.getDepth(depthCombo); } public boolean isIgnoreExternals() { return ignoreExternalsButton.getSelection(); } public boolean isForce() { return forceButton.getSelection(); } } CheckoutWizardLocationPage.java000066400000000000000000000133571203611042400432640ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards; import java.util.Arrays; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.repo.RepositoryComparator; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.util.AdaptableList; public class CheckoutWizardLocationPage extends WizardPage { private TableViewer table; private Button newButton; private Button existingButton; private ISVNRepositoryLocation result; public CheckoutWizardLocationPage(String pageName, String title, ImageDescriptor titleImage) { super(pageName, title, titleImage); setPageComplete(false); } public void createControl(Composite parent) { final CheckoutWizard wizard = (CheckoutWizard)getWizard(); Composite outerContainer = new Composite(parent,SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 1; outerContainer.setLayout(layout); outerContainer.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); newButton = new Button(outerContainer, SWT.RADIO); newButton.setText(Policy.bind("CheckoutWizardLocationPage.new")); //$NON-NLS-1$ existingButton = new Button(outerContainer, SWT.RADIO); existingButton.setText(Policy.bind("CheckoutWizardLocationPage.existing")); //$NON-NLS-1$ table = createTable(outerContainer, 1); table.setContentProvider(new WorkbenchContentProvider()); table.setLabelProvider(new WorkbenchLabelProvider()); table.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { result = (ISVNRepositoryLocation)((IStructuredSelection)table.getSelection()).getFirstElement(); wizard.setLocation(result); setPageComplete(true); } }); existingButton.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { if (newButton.getSelection()) { table.getTable().setEnabled(false); result = null; } else { table.getTable().setEnabled(true); result = (ISVNRepositoryLocation)((IStructuredSelection)table.getSelection()).getFirstElement(); wizard.setLocation(result); } setPageComplete(newButton.getSelection() || !table.getSelection().isEmpty()); } }); setMessage(Policy.bind("CheckoutWizardLocationPage.text")); //$NON-NLS-1$ setControl(outerContainer); refreshLocations(); } public void refreshLocations() { ISVNRepositoryLocation[] locations = SVNUIPlugin.getPlugin().getRepositoryManager().getKnownRepositoryLocations(null); Arrays.sort(locations, new RepositoryComparator()); AdaptableList input = new AdaptableList(locations); table.setInput(input); if (locations.length == 0) { newButton.setSelection(true); existingButton.setSelection(false); table.getTable().setEnabled(false); setPageComplete(true); } else { existingButton.setSelection(true); newButton.setSelection(false); table.getTable().setEnabled(true); } } /** * Creates the table for the repositories */ protected TableViewer createTable(Composite parent, int span) { Table table = new Table(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION); GridData data = new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL); data.horizontalSpan = span; table.setLayoutData(data); TableLayout layout = new TableLayout(); layout.addColumnData(new ColumnWeightData(100, true)); table.setLayout(layout); TableColumn col = new TableColumn(table, SWT.NONE); col.setResizable(true); return new TableViewer(table); } public ISVNRepositoryLocation getLocation() { return result; } /* * (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean) */ public void setVisible(boolean visible) { super.setVisible(visible); // if (visible) { // existingButton.setFocus(); // } } public boolean createNewLocation() { return newButton.getSelection(); } public boolean canFlipToNextPage() { CheckoutWizard wizard = (CheckoutWizard)getWizard(); if (wizard != null) { return isPageComplete() && wizard.getNextPage(this, false) != null; } return super.canFlipToNextPage(); } } CheckoutWizardProjectPage.java000066400000000000000000000117411203611042400431150ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards; import java.io.File; import java.io.IOException; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.tigris.subversion.subclipse.ui.Policy; public class CheckoutWizardProjectPage extends WizardPage { private Button defaultButton; private Label locationLabel; private Text locationText; private Button browseButton; public CheckoutWizardProjectPage(String pageName, String title, ImageDescriptor titleImage) { super(pageName, title, titleImage); setPageComplete(true); } public void createControl(Composite parent) { Composite outerContainer = new Composite(parent,SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 3; outerContainer.setLayout(layout); outerContainer.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); defaultButton = new Button(outerContainer, SWT.CHECK); GridData data = new GridData(); data.horizontalSpan = 3; defaultButton.setLayoutData(data); defaultButton.setText(Policy.bind("CheckoutWizardProjectPage.default")); //$NON-NLS-1$ defaultButton.setSelection(true); defaultButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { setLocationEnablement(); if (!defaultButton.getSelection()) { locationText.selectAll(); locationText.setFocus(); } setPageComplete(); } }); locationLabel = new Label(outerContainer, SWT.NONE); locationLabel.setText(Policy.bind("CheckoutWizardProjectPage.location")); //$NON-NLS-1$ locationText = new Text(outerContainer, SWT.BORDER); data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); locationText.setLayoutData(data); setLocation(); locationText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(); } }); browseButton = new Button(outerContainer, SWT.PUSH); browseButton.setText(Policy.bind("CheckoutWizardProjectPage.browse")); //$NON-NLS-1$ browseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { DirectoryDialog dialog = new DirectoryDialog(getShell()); dialog.setMessage(Policy.bind("CheckoutInto.message")); //$NON-NLS-1$ String directory = dialog.open(); if (directory != null) { locationText.setText(directory); } } }); setLocationEnablement(); setMessage(Policy.bind("CheckoutWizardProjectPage.text")); //$NON-NLS-1$ setControl(outerContainer); } private void setLocationEnablement() { locationLabel.setEnabled(!defaultButton.getSelection()); locationText.setEnabled(!defaultButton.getSelection()); browseButton.setEnabled(!defaultButton.getSelection()); } private void setPageComplete() { setPageComplete(defaultButton.getSelection() || locationText.getText().trim().length() > 0); } public void setLocation() { locationText.setText(ResourcesPlugin.getWorkspace().getRoot().getLocation().toString()); } public String getLocation() { if (locationText == null) { CheckoutWizard wizard = (CheckoutWizard)getWizard(); return ResourcesPlugin.getWorkspace().getRoot().getLocation().toString() + File.separator + wizard.getProjectName(); } else return locationText.getText().trim(); } public String getCanonicalLocation() { return normalizeCase(getLocation()); } private String normalizeCase(String location) { File dir = new File(location); String caseFixed; String original= dir.getAbsolutePath(); try { caseFixed = dir.getCanonicalPath(); } catch (IOException e) { return location; } // Make sure the path name did not change. If the // path is a symlink, then getCanonical will change // the path to the real path and we just have to go // with the original. if (caseFixed.equalsIgnoreCase(original)) return caseFixed; else return location; } } CheckoutWizardSelectionPage.java000066400000000000000000000153751203611042400434430ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards; import java.util.ArrayList; import java.util.Iterator; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.AbstractTreeViewer; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Tree; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.ui.progress.DeferredTreeContentManager; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.repository.RepositoryFilters; public class CheckoutWizardSelectionPage extends WizardPage { private static final int LIST_HEIGHT_HINT = 250; private static final int LIST_WIDTH_HINT = 450; private ISVNRepositoryLocation repositoryLocation; private TreeViewer treeViewer; public CheckoutWizardSelectionPage(String pageName, String title, ImageDescriptor titleImage) { super(pageName, title, titleImage); setPageComplete(false); } public void createControl(Composite parent) { Composite outerContainer = new Composite(parent,SWT.NONE); GridLayout layout = new GridLayout(); layout.numColumns = 1; outerContainer.setLayout(layout); outerContainer.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); treeViewer = new TreeViewer(outerContainer, SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI | SWT.BORDER); RepositoryContentProvider contentProvider = new RepositoryContentProvider(); treeViewer.setContentProvider(contentProvider); treeViewer.addFilter(RepositoryFilters.FOLDERS_ONLY); treeViewer.setLabelProvider(new WorkbenchLabelProvider()); treeViewer.setInput(repositoryLocation); GridData data = new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL); data.heightHint = LIST_HEIGHT_HINT; data.widthHint = LIST_WIDTH_HINT; treeViewer.getControl().setLayoutData(data); treeViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { CheckoutWizard wizard = (CheckoutWizard)getWizard(); ArrayList folderArray = new ArrayList(); IStructuredSelection selection = (IStructuredSelection)treeViewer.getSelection(); Iterator iter = selection.iterator(); while (iter.hasNext()) { Object object = iter.next(); if (object instanceof ISVNRemoteFolder || object instanceof ISVNRepositoryLocation) { if (object instanceof ISVNRepositoryLocation) folderArray.add(((ISVNRepositoryLocation)object).getRootFolder()); else folderArray.add(object); } } ISVNRemoteFolder[] remoteFolders = new ISVNRemoteFolder[folderArray.size()]; folderArray.toArray(remoteFolders); wizard.setRemoteFolders(remoteFolders); setPageComplete(!treeViewer.getSelection().isEmpty()); } }); final Action refreshAction = new Action(Policy.bind("RepositoriesView.refreshPopup"), SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_REFRESH)) { //$NON-NLS-1$ public void run() { refreshViewerNode(); } }; MenuManager menuMgr = new MenuManager(); Tree tree = treeViewer.getTree(); Menu menu = menuMgr.createContextMenu(tree); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { manager.add(refreshAction); } }); menuMgr.setRemoveAllWhenShown(true); tree.setMenu(menu); setMessage(Policy.bind("CheckoutWizardSelectionPage.text")); //$NON-NLS-1$ setControl(outerContainer); } public boolean canFlipToNextPage() { CheckoutWizard wizard = (CheckoutWizard)getWizard(); if (wizard != null) { return isPageComplete() && wizard.getNextPage(this, false) != null; } return super.canFlipToNextPage(); } public void setLocation(ISVNRepositoryLocation repositoryLocation) { this.repositoryLocation = repositoryLocation; if (treeViewer != null) { treeViewer.setInput(repositoryLocation.getLocation()); treeViewer.refresh(); treeViewer.expandToLevel(2); } } protected void refreshViewerNode() { IStructuredSelection selection = (IStructuredSelection)treeViewer.getSelection(); Iterator iter = selection.iterator(); while (iter.hasNext()) { Object object = iter.next(); if (object instanceof ISVNRepositoryLocation) ((ISVNRepositoryLocation)object).refreshRootFolder(); if (object instanceof ISVNRemoteFolder) ((ISVNRemoteFolder)object).refresh(); treeViewer.refresh(object); } } class RepositoryContentProvider extends WorkbenchContentProvider { private DeferredTreeContentManager manager; public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { if (viewer instanceof AbstractTreeViewer) { manager = new DeferredTreeContentManager(this, (AbstractTreeViewer) viewer); } super.inputChanged(viewer, oldInput, newInput); } public boolean hasChildren(Object element) { if (element == null) return false; else return true; } public Object[] getChildren(Object parentElement) { if (parentElement instanceof String) { Object[] root = { repositoryLocation }; return root; } if (manager != null) { Object[] children = manager.getChildren(parentElement); return children; } return super.getChildren(parentElement); } } } ClosableWizardDialog.java000066400000000000000000000006251203611042400420670ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizardspackage org.tigris.subversion.subclipse.ui.wizards; import org.eclipse.jface.wizard.IWizard; import org.eclipse.jface.wizard.WizardDialog; import org.eclipse.swt.widgets.Shell; public class ClosableWizardDialog extends WizardDialog { public ClosableWizardDialog(Shell parentShell, IWizard newWizard) { super(parentShell, newWizard); } public void finishPressed() { super.finishPressed(); } } CommentCommitWizardPage.java000066400000000000000000000052071203611042400425740ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.wizard.IWizard; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.comments.CommitCommentArea; public class CommentCommitWizardPage extends SVNWizardPage { private CommitCommentArea commitCommentArea; /** * Constructor for CommentCommitWizardPage. * @param pageName * @param title * @param titleImage * @param description */ public CommentCommitWizardPage( Dialog parentDialog, String pageName, String title, ImageDescriptor titleImage, String description) { super(pageName, title, titleImage, description); commitCommentArea = new CommitCommentArea(parentDialog, null); } /** * @see org.eclipse.jface.dialogs.IDialogPage#createControl(org.eclipse.swt.widgets.Composite) */ public void createControl(Composite parent) { Composite top = new Composite(parent, SWT.NONE); top.setLayout(new GridLayout()); setControl(top); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(top, IHelpContextIds.COMMENT_COMMIT_PAGE_DIALOG); commitCommentArea.createArea(top); IWizard wizard = getWizard(); if (wizard instanceof IClosableWizard) { commitCommentArea.addPropertyChangeListener(new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { if (event.getProperty() == CommitCommentArea.OK_REQUESTED) { IClosableWizard wizard = (IClosableWizard)getWizard(); wizard.finishAndClose(); } } }); } } /** * Method getComment. * @return String */ public String getComment() { commitCommentArea.addComment(commitCommentArea.getComment()); return commitCommentArea.getComment(); } } ConfigurationWizardMainPage.java000066400000000000000000000232201203611042400434300ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.Arrays; import java.util.Properties; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * Wizard page for entering information about a SVN repository location. * This wizard can be initialized using setProperties or using setDialogSettings */ public class ConfigurationWizardMainPage extends SVNWizardPage { private boolean showCredentials; /** Client adapter implementation identifier */ private static final String COMMANDLINE_CLIENT = "commandline"; //$NON-NLS-1$ // Widgets // User private Combo userCombo; // Password private Text passwordText; // url of the repository we want to add private Combo urlCombo; private static final int COMBO_HISTORY_LENGTH = 5; private Properties properties = null; // Dialog store id constants private static final String STORE_USERNAME_ID = "ConfigurationWizardMainPage.STORE_USERNAME_ID";//$NON-NLS-1$ private static final String STORE_URL_ID = "ConfigurationWizardMainPage.STORE_URL_ID";//$NON-NLS-1$ // In case the page was launched from a different wizard private IDialogSettings settings; /** * ConfigurationWizardMainPage constructor. * * @param pageName the name of the page * @param title the title of the page * @param titleImage the image for the page */ public ConfigurationWizardMainPage(String pageName, String title, ImageDescriptor titleImage) { super(pageName, title, titleImage); showCredentials = SVNProviderPlugin.getPlugin().getSVNClientManager().getSvnClientInterface().equals(COMMANDLINE_CLIENT); } /** * Adds an entry to a history, while taking care of duplicate history items * and excessively long histories. The assumption is made that all histories * should be of length ConfigurationWizardMainPage.COMBO_HISTORY_LENGTH. * * @param history the current history * @param newEntry the entry to add to the history * @return the history with the new entry appended */ private String[] addToHistory(String[] history, String newEntry) { ArrayList l = new ArrayList(Arrays.asList(history)); l.remove(newEntry); l.add(0,newEntry); // since only one new item was added, we can be over the limit // by at most one item if (l.size() > COMBO_HISTORY_LENGTH) l.remove(COMBO_HISTORY_LENGTH); String[] r = new String[l.size()]; l.toArray(r); return r; } public IDialogSettings getDialogSettings() { return settings; } public void setDialogSettings(IDialogSettings settings) { this.settings = settings; } /** * Creates the UI part of the page. * * @param parent the parent of the created widgets */ public void createControl(Composite parent) { Composite composite = createComposite(parent, 2); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.SHARING_NEW_REPOSITORY_PAGE); Listener listener = new Listener() { public void handleEvent(Event event) { validateFields(); } }; Group g = createGroup(composite, Policy.bind("ConfigurationWizardMainPage.Location_1")); //$NON-NLS-1$ // repository Url createLabel(g, Policy.bind("ConfigurationWizardMainPage.url")); //$NON-NLS-1$ urlCombo = createEditableCombo(g); urlCombo.addListener(SWT.Selection, listener); urlCombo.addListener(SWT.Modify, listener); if (showCredentials) { g = createGroup(composite, Policy.bind("ConfigurationWizardMainPage.Authentication_2")); //$NON-NLS-1$ // User name createLabel(g, Policy.bind("ConfigurationWizardMainPage.userName")); //$NON-NLS-1$ userCombo = createEditableCombo(g); userCombo.addListener(SWT.Selection, listener); userCombo.addListener(SWT.Modify, listener); // Password createLabel(g, Policy.bind("ConfigurationWizardMainPage.password")); //$NON-NLS-1$ passwordText = createTextField(g); passwordText.setEchoChar('*'); } initializeValues(); validateFields(); urlCombo.setFocus(); setControl(composite); } /** * Utility method to create an editable combo box * * @param parent the parent of the combo box * @return the created combo */ protected Combo createEditableCombo(Composite parent) { Combo combo = new Combo(parent, SWT.NULL); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH; combo.setLayoutData(data); return combo; } protected Group createGroup(Composite parent, String text) { Group group = new Group(parent, SWT.NULL); group.setText(text); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalSpan = 2; //data.widthHint = GROUP_WIDTH; group.setLayoutData(data); GridLayout layout = new GridLayout(); layout.numColumns = 2; group.setLayout(layout); return group; } /** * @see SVNWizardPage#finish */ public boolean finish(IProgressMonitor monitor) { // Set the result to be the current values Properties result = new Properties(); if (showCredentials) { result.setProperty("user", userCombo.getText()); //$NON-NLS-1$ result.setProperty("password", passwordText.getText()); //$NON-NLS-1$ } result.setProperty("url", urlCombo.getText()); //$NON-NLS-1$ this.properties = result; saveWidgetValues(); return true; } /** * Returns the properties for the repository connection * * @return the properties or null */ public Properties getProperties() { return properties; } /** * Initializes states of the controls. */ private void initializeValues() { // Set remembered values IDialogSettings settings = getDialogSettings(); if (settings != null) { String[] hostNames = settings.getArray(STORE_URL_ID); if (hostNames != null) { for (int i = 0; i < hostNames.length; i++) { urlCombo.add(hostNames[i]); } } if (showCredentials) { String[] userNames = settings.getArray(STORE_USERNAME_ID); if (userNames != null) { for (int i = 0; i < userNames.length; i++) { userCombo.add(userNames[i]); } } } } if(properties != null) { if (showCredentials) { String user = properties.getProperty("user"); //$NON-NLS-1$ if (user != null) { userCombo.setText(user); } String password = properties.getProperty("password"); //$NON-NLS-1$ if (password != null) { passwordText.setText(password); } } String host = properties.getProperty("url"); //$NON-NLS-1$ if (host != null) { urlCombo.setText(host); } } } /** * Saves the widget values for the next time */ private void saveWidgetValues() { // Update history IDialogSettings settings = getDialogSettings(); if (settings != null) { if (showCredentials) { String[] userNames = settings.getArray(STORE_USERNAME_ID); if (userNames == null) userNames = new String[0]; userNames = addToHistory(userNames, userCombo.getText()); settings.put(STORE_USERNAME_ID, userNames); } String[] hostNames = settings.getArray(STORE_URL_ID); if (hostNames == null) hostNames = new String[0]; hostNames = addToHistory(hostNames, urlCombo.getText()); settings.put(STORE_URL_ID, hostNames); } } /** * Sets the properties for the repository connection * * @param properties the properties or null */ public void setProperties(Properties properties) { this.properties = properties; } /** * Validates the contents of the editable fields and set page completion * and error messages appropriately. Call each time url or username is modified */ private void validateFields() { // first check the url of the repository String url = urlCombo.getText(); if (url.length() == 0) { setErrorMessage(null); setPageComplete(false); return; } try { new SVNUrl(url); } catch (MalformedURLException e) { setErrorMessage(Policy.bind("ConfigurationWizardMainPage.invalidUrl", e.getMessage())); //$NON-NLS-1$); setPageComplete(false); return; } setErrorMessage(null); setPageComplete(true); } public void setVisible(boolean visible) { super.setVisible(visible); if (visible) { urlCombo.setFocus(); } } public boolean canFlipToNextPage() { if (getWizard() instanceof CheckoutWizard) { CheckoutWizard wizard = (CheckoutWizard)getWizard(); return isPageComplete() && wizard.getNextPage(this, false) != null; } return super.canFlipToNextPage(); } } IClosableWizard.java000066400000000000000000000001741203611042400410570ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizardspackage org.tigris.subversion.subclipse.ui.wizards; public interface IClosableWizard { public void finishAndClose(); } MoveRemoteResourceWizard.java000066400000000000000000000103011203611042400430050ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.wizard.Wizard; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; /** * Wizard to move a remote resource */ public class MoveRemoteResourceWizard extends Wizard implements IClosableWizard { private MoveRemoteResourceWizardMainPage mainPage; private CommentCommitWizardPage commitCommentPage; private ISVNRemoteResource selection; private Dialog parentDialog; public MoveRemoteResourceWizard(ISVNRemoteResource selection) { setWindowTitle(Policy.bind("moveRemoteFolderWizard.title")); //$NON-NLS-1$ this.selection = selection; } /** * Creates the wizard pages */ public void addPages() { // add the main page mainPage = new MoveRemoteResourceWizardMainPage( "newRemoteFolderPage1", //$NON-NLS-1$ Policy.bind("MoveRemoteFolderWizard.heading"), //$NON-NLS-1$ SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_NEW_FOLDER)); mainPage.setRemoteResource(selection); addPage(mainPage); // add commit comment page String pageTitle = Policy.bind("CommentCommitWizardPage.pageTitle"); //$NON-NLS-1$ String pageDescription = Policy.bind("CommentCommitWizardPage.pageDescription"); //$NON-NLS-1$ ImageDescriptor image = SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_NEW_FOLDER); commitCommentPage = new CommentCommitWizardPage(parentDialog, pageTitle, pageTitle, image, pageDescription); addPage(commitCommentPage); } /* * @see IWizard#performFinish */ public boolean performFinish() { try { SVNUIPlugin.runWithProgress(getContainer().getShell(), false /*cancelable*/, new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { try { SVNProviderPlugin.getPlugin().getRepositoryResourcesManager(). moveRemoteResource( selection,mainPage.getParentFolder(), mainPage.getResourceName(), commitCommentPage.getComment(),monitor); } catch (SVNException e) { throw new InvocationTargetException(e); } } }); } catch (InterruptedException e) { // operation canceled } catch (InvocationTargetException e) { SVNUIPlugin.openError(getContainer().getShell(), Policy.bind("exception"), null, e.getCause(), SVNUIPlugin.PERFORM_SYNC_EXEC); //$NON-NLS-1$ return false; } return true; } /** * Method setParentDialog. * @param dialog */ public void setParentDialog(Dialog dialog) { this.parentDialog = dialog; } public void finishAndClose() { if (parentDialog != null && parentDialog instanceof ClosableWizardDialog && canFinish()) { ((ClosableWizardDialog)parentDialog).finishPressed(); } } } MoveRemoteResourceWizardMainPage.java000066400000000000000000000171521203611042400444220ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards; import java.net.MalformedURLException; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.ui.part.DrillDownComposite; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.util.Util; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.repository.RepositoryFilters; import org.tigris.subversion.subclipse.ui.repository.model.AllRootsElement; import org.tigris.subversion.subclipse.ui.repository.model.RemoteContentProvider; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * the main wizard page for moving or renaming a remote resource on repository */ public class MoveRemoteResourceWizardMainPage extends SVNWizardPage { private static final int LIST_WIDTH = 250; private static final int LIST_HEIGHT = 300; private Text urlParentText; private Text resourceNameText; private TreeViewer viewer; private ISVNRemoteFolder parentFolder; // the parent folder of the destination // by default this is the folder of the resource to rename private String resourceName = ""; //$NON-NLS-1$ private ISelectionChangedListener treeSelectionChangedListener = new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { Object selection = ((IStructuredSelection)event.getSelection()).getFirstElement(); if (selection instanceof ISVNRemoteFolder) { parentFolder = (ISVNRemoteFolder)selection; } else if (selection instanceof IAdaptable) { // ISVNRepositoryLocation is adaptable to ISVNRemoteFolder IAdaptable a = (IAdaptable) selection; Object adapter = a.getAdapter(ISVNRemoteFolder.class); parentFolder = (ISVNRemoteFolder)adapter; } if (parentFolder != null) urlParentText.setText(parentFolder.getUrl().toString()); } }; /** * MoveRemoteResourceWizardMainPage constructor. * * @param pageName the name of the page * @param title the title of the page * @param titleImage the image for the page */ public MoveRemoteResourceWizardMainPage( String pageName, String title, ImageDescriptor titleImage) { super(pageName, title, titleImage); } /** * Creates the UI part of the page. * * @param parent the parent of the created widgets */ public void createControl(Composite parent) { Composite composite = createComposite(parent, 1); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.MOVE_RENAME_REMOTE_RESOURCE_PAGE); Listener listener = new Listener() { public void handleEvent(Event event) { resourceName = resourceNameText.getText(); validateFields(); } }; // the text field for the parent folder createLabel(composite, Policy.bind("MoveRemoteResourceWizardMainPage.selectParentUrl")); //$NON-NLS-1$ urlParentText = createTextField(composite); urlParentText.addListener(SWT.Selection, listener); urlParentText.addListener(SWT.Modify, listener); urlParentText.setEditable(false); // Create drill down. DrillDownComposite drillDown = new DrillDownComposite(composite, SWT.BORDER); GridData spec = new GridData(GridData.FILL_BOTH); spec.widthHint = LIST_WIDTH; spec.heightHint = LIST_HEIGHT; drillDown.setLayoutData(spec); // Create tree viewer inside drill down. viewer = new TreeViewer(drillDown, SWT.H_SCROLL | SWT.V_SCROLL); drillDown.setChildTree(viewer); viewer.setLabelProvider(new WorkbenchLabelProvider()); viewer.setContentProvider(new RemoteContentProvider()); viewer.setInput(new AllRootsElement()); viewer.addFilter(RepositoryFilters.FOLDERS_ONLY); viewer.addSelectionChangedListener(treeSelectionChangedListener); // the text field for the resource name createLabel(composite, Policy.bind("MoveRemoteResourceWizardMainPage.resourceName")); //$NON-NLS-1$ resourceNameText = createTextField(composite); resourceNameText.addListener(SWT.Selection, listener); resourceNameText.addListener(SWT.Modify, listener); resourceNameText.setText(resourceName); validateFields(); resourceNameText.setFocus(); setControl(composite); // set the initial selection in the tree if (parentFolder != null) { Object toSelect = null; if (parentFolder.getParent() == null) { // the root folder : select the repository toSelect = parentFolder.getRepository(); } else toSelect = parentFolder; viewer.expandToLevel(toSelect,0); viewer.setSelection(new StructuredSelection(toSelect),true); } } /** * Validates the contents of the editable fields and set page completion * and error messages appropriately. Call each time folder name or parent url * is modified */ private void validateFields() { if (resourceNameText.getText().length() == 0) { setErrorMessage(null); setPageComplete(false); return; } try { new SVNUrl(Util.appendPath(urlParentText.getText(), resourceNameText.getText())); } catch (MalformedURLException e) { setErrorMessage(Policy.bind("MoveRemoteResourceWizardMainPage.invalidUrl")); //$NON-NLS-1$); setPageComplete(false); return; } setErrorMessage(null); setPageComplete(true); } public void setVisible(boolean visible) { super.setVisible(visible); if (visible) { resourceNameText.setFocus(); } } /** * returns the parent folder of the destination */ public ISVNRemoteFolder getParentFolder() { return parentFolder; } /** * get the destination name of the resource */ public String getResourceName() { return resourceNameText.getText(); } /** * set the remote resource. Call this method before the creation of the control. * This will select the folder */ public void setRemoteResource(ISVNRemoteResource remoteResource) { parentFolder = remoteResource.getParent(); resourceName = remoteResource.getName(); } } NewLocationWizard.java000066400000000000000000000120451203611042400414440ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards; import java.lang.reflect.InvocationTargetException; import java.util.Properties; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.wizard.Wizard; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; /** * Wizard to add a new location. Uses ConfigurationWizardMainPage for entering informations * about SVN repository location */ public class NewLocationWizard extends Wizard { private ConfigurationWizardMainPage mainPage; private Properties properties = null; public NewLocationWizard() { IDialogSettings workbenchSettings = SVNUIPlugin.getPlugin().getDialogSettings(); IDialogSettings section = workbenchSettings.getSection("NewLocationWizard");//$NON-NLS-1$ if (section == null) { section = workbenchSettings.addNewSection("NewLocationWizard");//$NON-NLS-1$ } setDialogSettings(section); setWindowTitle(Policy.bind("NewLocationWizard.title")); //$NON-NLS-1$ } public NewLocationWizard(Properties initialProperties) { this(); this.properties = initialProperties; } /** * Creates the wizard pages */ public void addPages() { mainPage = new ConfigurationWizardMainPage("repositoryPage1", Policy.bind("NewLocationWizard.heading"), SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_NEW_LOCATION)); //$NON-NLS-1$ //$NON-NLS-2$ if (properties != null) { mainPage.setProperties(properties); } mainPage.setDescription(Policy.bind("NewLocationWizard.description")); //$NON-NLS-1$ mainPage.setDialogSettings(getDialogSettings()); addPage(mainPage); } /* * @see IWizard#performFinish */ public boolean performFinish() { mainPage.finish(new NullProgressMonitor()); Properties properties = mainPage.getProperties(); final ISVNRepositoryLocation[] root = new ISVNRepositoryLocation[1]; SVNProviderPlugin provider = SVNProviderPlugin.getPlugin(); try { root[0] = provider.getRepositories().createRepository(properties); // Validate the connection info. This process also determines the rootURL try { new ProgressMonitorDialog(getShell()).run(true, true, new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { try { root[0].validateConnection(monitor); } catch (TeamException e) { throw new InvocationTargetException(e); } } }); } catch (InterruptedException e) { return false; } catch (InvocationTargetException e) { Throwable t = e.getTargetException(); if (t instanceof TeamException) { throw (TeamException)t; } } provider.getRepositories().addOrUpdateRepository(root[0]); } catch (TeamException e) { if (root[0] == null) { // Exception creating the root, we cannot continue SVNUIPlugin.openError(getContainer().getShell(), Policy.bind("NewLocationWizard.exception"), null, e); //$NON-NLS-1$ return false; } else { // Exception validating. We can continue if the user wishes. IStatus error = e.getStatus(); if (error.isMultiStatus() && error.getChildren().length == 1) { error = error.getChildren()[0]; } boolean keep = false; if (error.isMultiStatus()) { SVNUIPlugin.openError(getContainer().getShell(), Policy.bind("NewLocationWizard.validationFailedTitle"), null, e); //$NON-NLS-1$ } else { keep = MessageDialog.openQuestion(getContainer().getShell(), Policy.bind("NewLocationWizard.validationFailedTitle"), //$NON-NLS-1$ Policy.bind("NewLocationWizard.validationFailedText", new Object[] {error.getMessage()})); //$NON-NLS-1$ } try { if (keep) { provider.getRepositories().addOrUpdateRepository(root[0]); } else { provider.getRepositories().disposeRepository(root[0]); } } catch (TeamException e1) { SVNUIPlugin.openError(getContainer().getShell(), Policy.bind("exception"), null, e1); //$NON-NLS-1$ return false; } return keep; } } return true; } } NewRemoteFolderWizard.java000066400000000000000000000101521203611042400422600ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards; import java.lang.reflect.InvocationTargetException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.wizard.Wizard; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; /** * Wizard to add a new remote folder */ public class NewRemoteFolderWizard extends Wizard implements IClosableWizard { private NewRemoteFolderWizardMainPage mainPage; private CommentCommitWizardPage commitCommentPage; private ISVNRemoteFolder selection; private Dialog parentDialog; public NewRemoteFolderWizard(ISVNRemoteFolder selection) { setWindowTitle(Policy.bind("NewRemoteFolderWizard.title")); //$NON-NLS-1$ this.selection = selection; } /** * Creates the wizard pages */ public void addPages() { // add the main page mainPage = new NewRemoteFolderWizardMainPage( "newRemoteFolderPage1", //$NON-NLS-1$ Policy.bind("NewRemoteFolderWizard.heading"), //$NON-NLS-1$ SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_NEW_FOLDER)); mainPage.setParentFolder(selection); addPage(mainPage); // add commit comment page String pageTitle = Policy.bind("CommentCommitWizardPage.pageTitle"); //$NON-NLS-1$ String pageDescription = Policy.bind("CommentCommitWizardPage.pageDescription"); //$NON-NLS-1$ ImageDescriptor image = SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_NEW_FOLDER); commitCommentPage = new CommentCommitWizardPage(parentDialog, pageTitle, pageTitle, image, pageDescription); addPage(commitCommentPage); } /* * @see IWizard#performFinish */ public boolean performFinish() { try { final String folderName = mainPage.getFolderName(); final String comment = commitCommentPage.getComment(); IRunnableWithProgress runnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { try { ISVNRemoteFolder parentFolder = mainPage.getParentFolder(); parentFolder.createRemoteFolder(folderName,comment,monitor); } catch (SVNException e) { throw new InvocationTargetException(e); } } }; new ProgressMonitorDialog(getShell()).run(true, false, runnable); } catch (InterruptedException e) { // operation canceled } catch (InvocationTargetException e) { SVNUIPlugin.openError(getContainer().getShell(), Policy.bind("exception"), null, e.getCause(), SVNUIPlugin.PERFORM_SYNC_EXEC); //$NON-NLS-1$ return false; } return true; } /** * Method setParentDialog. * @param dialog */ public void setParentDialog(Dialog dialog) { this.parentDialog = dialog; } public void finishAndClose() { if (parentDialog != null && parentDialog instanceof ClosableWizardDialog && canFinish()) { ((ClosableWizardDialog)parentDialog).finishPressed(); } } } NewRemoteFolderWizardMainPage.java000066400000000000000000000164671203611042400437010ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards; import java.net.MalformedURLException; import java.util.ArrayList; import java.util.List; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.ui.part.DrillDownComposite; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.util.Util; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.repository.RepositoryFilters; import org.tigris.subversion.subclipse.ui.repository.model.AllRootsElement; import org.tigris.subversion.subclipse.ui.repository.model.RemoteContentProvider; import org.tigris.subversion.svnclientadapter.SVNUrl; /** * the main wizard page for creating a new remote folder on repository */ public class NewRemoteFolderWizardMainPage extends SVNWizardPage { private static final int LIST_WIDTH = 250; private static final int LIST_HEIGHT = 300; private Text urlParentText; private Text folderNameText; private TreeViewer viewer; private ISVNRemoteFolder parentFolder; private ISelectionChangedListener treeSelectionChangedListener = new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { Object selection = ((IStructuredSelection)event.getSelection()).getFirstElement(); if (selection instanceof ISVNRemoteFolder) { parentFolder = (ISVNRemoteFolder)selection; } else if (selection instanceof IAdaptable) { // ISVNRepositoryLocation is adaptable to ISVNRemoteFolder IAdaptable a = (IAdaptable) selection; Object adapter = a.getAdapter(ISVNRemoteFolder.class); parentFolder = (ISVNRemoteFolder)adapter; } if (parentFolder != null) urlParentText.setText(parentFolder.getUrl().toString()); } }; /** * NewRemoteFolderWizardMainPage constructor. * * @param pageName the name of the page * @param title the title of the page * @param titleImage the image for the page */ public NewRemoteFolderWizardMainPage( String pageName, String title, ImageDescriptor titleImage) { super(pageName, title, titleImage); } /** * Creates the UI part of the page. * * @param parent the parent of the created widgets */ public void createControl(Composite parent) { Composite composite = createComposite(parent, 1); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.CREATE_REMOTE_FOLDER_PAGE); Listener listener = new Listener() { public void handleEvent(Event event) { validateFields(); } }; // the text field for the parent folder createLabel(composite, Policy.bind("NewRemoteFolderWizardMainPage.selectParentUrl")); //$NON-NLS-1$ urlParentText = createTextField(composite); urlParentText.addListener(SWT.Selection, listener); urlParentText.addListener(SWT.Modify, listener); urlParentText.setEditable(false); // Create drill down. DrillDownComposite drillDown = new DrillDownComposite(composite, SWT.BORDER); GridData spec = new GridData(GridData.FILL_BOTH); spec.widthHint = LIST_WIDTH; spec.heightHint = LIST_HEIGHT; drillDown.setLayoutData(spec); // Create tree viewer inside drill down. viewer = new TreeViewer(drillDown, SWT.H_SCROLL | SWT.V_SCROLL); drillDown.setChildTree(viewer); viewer.setLabelProvider(new WorkbenchLabelProvider()); RemoteContentProvider remoteContentProvider = new RemoteContentProvider(); remoteContentProvider.setUseDeferredContentManager(false); viewer.setContentProvider(remoteContentProvider); viewer.setInput(new AllRootsElement()); viewer.addFilter(RepositoryFilters.FOLDERS_ONLY); viewer.addSelectionChangedListener(treeSelectionChangedListener); // the text field for the folder name createLabel(composite, Policy.bind("NewRemoteFolderWizardMainPage.folderName")); //$NON-NLS-1$ folderNameText = createTextField(composite); folderNameText.addListener(SWT.Selection, listener); folderNameText.addListener(SWT.Modify, listener); validateFields(); folderNameText.setFocus(); setControl(composite); // set the initial selection in the tree if (parentFolder != null) { List itemsToExpand = new ArrayList(); ISVNRemoteFolder remoteParent = parentFolder.getParent(); while (remoteParent != null) { if (remoteParent.getParent() == null) itemsToExpand.add(0, remoteParent.getRepository()); else itemsToExpand.add(0, remoteParent); remoteParent = remoteParent.getParent(); } viewer.setExpandedElements(itemsToExpand.toArray()); if (parentFolder.getParent() == null) viewer.setSelection(new StructuredSelection(parentFolder.getRepository()), true); else viewer.setSelection(new StructuredSelection(parentFolder), true); } } /** * Validates the contents of the editable fields and set page completion * and error messages appropriately. Call each time folder name or parent url * is modified */ private void validateFields() { if (folderNameText.getText().length() == 0) { setErrorMessage(null); setPageComplete(false); return; } try { new SVNUrl(Util.appendPath(urlParentText.getText(), folderNameText.getText())); } catch (MalformedURLException e) { setErrorMessage(Policy.bind("NewRemoteFolderWizardMainPage.invalidUrl")); //$NON-NLS-1$); setPageComplete(false); return; } setErrorMessage(null); setPageComplete(true); } public void setVisible(boolean visible) { super.setVisible(visible); if (visible) { folderNameText.setFocus(); } } public String getFolderName() { return folderNameText.getText(); } public ISVNRemoteFolder getParentFolder() { return parentFolder; } public void setParentFolder(ISVNRemoteFolder parentFolder) { this.parentFolder = parentFolder; } } RelocateWizard.java000066400000000000000000000110661203611042400407620ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards; import java.util.ArrayList; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.wizard.Wizard; import org.eclipse.team.core.RepositoryProvider; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.repo.SVNRepositories; import org.tigris.subversion.subclipse.core.repo.SVNRepositoryLocation; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; public class RelocateWizard extends Wizard { private SVNRepositoryLocation repository; private IProject[] sharedProjects; private RelocateWizardWarningPage warningPage; private RelocateWizardUrlPage urlPage; public RelocateWizard(SVNRepositoryLocation repository) { super(); this.repository = repository; setWindowTitle(Policy.bind("RelocateWizard.title")); //$NON-NLS-1$ setSharedProjects(); } public void addPages() { warningPage = new RelocateWizardWarningPage( "warningPage", //$NON-NLS-1$ Policy.bind("RelocateWizard.heading"), //$NON-NLS-1$ SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_NEW_LOCATION)); addPage(warningPage); urlPage = new RelocateWizardUrlPage( "urlPage", //$NON-NLS-1$ Policy.bind("RelocateWizard.heading"), //$NON-NLS-1$ SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_NEW_LOCATION), repository.getUrl().toString()); addPage(urlPage); } public boolean performFinish() { ISVNClientAdapter client = null; try { SVNRepositoryLocation newRepository = SVNRepositoryLocation.fromString(urlPage.getNewUrl()); newRepository.setUsername(repository.getUsername()); newRepository.setLabel(repository.getLabel()); newRepository.validateConnection(new NullProgressMonitor()); client = repository.getSVNClient(); for (int i = 0; i < sharedProjects.length; i++) { client.relocate(repository.getUrl().toString(), newRepository.getUrl().toString(), sharedProjects[i].getLocation().toString(), true); } SVNRepositories repositories = SVNProviderPlugin.getPlugin().getRepositories(); repositories.addOrUpdateRepository(newRepository); for (int i = 0; i < sharedProjects.length; i++) { SVNProviderPlugin.getPlugin().getStatusCacheManager().refreshStatus(sharedProjects[i], true); sharedProjects[i].refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor()); RepositoryProvider provider = RepositoryProvider.getProvider(sharedProjects[i], SVNProviderPlugin.getTypeId()); provider.setProject(sharedProjects[i]); } repositories.disposeRepository(repository); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("RelocateWizard.heading"), e.getMessage()); //$NON-NLS-1$ return false; } finally { repository.returnSVNClient(client); } return true; } private void setSharedProjects() { IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects(); ArrayList shared = new ArrayList(); for (int i = 0; i < projects.length; i++) { RepositoryProvider teamProvider = RepositoryProvider.getProvider(projects[i], SVNProviderPlugin.getTypeId()); if (teamProvider!=null) { try { SVNTeamProvider svnProvider = (SVNTeamProvider)teamProvider; if (svnProvider.getSVNWorkspaceRoot().getRepository().equals(repository)) shared.add(projects[i]); } catch(Exception e) {} } } sharedProjects = new IProject[shared.size()]; shared.toArray(sharedProjects); } public IProject[] getSharedProjects() { return sharedProjects; } } RelocateWizardUrlPage.java000066400000000000000000000056751203611042400422530ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; public class RelocateWizardUrlPage extends WizardPage { private String url; private Text newUrlText; public RelocateWizardUrlPage(String pageName, String title, ImageDescriptor titleImage, String url) { super(pageName, title, titleImage); this.url = url; setPageComplete(false); } public void createControl(Composite parent) { Composite outerContainer = new Composite(parent,SWT.NONE); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(outerContainer, IHelpContextIds.RELOCATE_REPOSITORY_PAGE); GridLayout layout = new GridLayout(); layout.numColumns = 2; outerContainer.setLayout(layout); outerContainer.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); Label urlLabel = new Label(outerContainer, SWT.NONE); urlLabel.setText(Policy.bind("RelocateWizard.urlLabel")); //$NON-NLS-1$ Text urlText = new Text(outerContainer, SWT.BORDER); urlText.setEditable(false); GridData data = new GridData(SWT.FILL, SWT.CENTER, true, false); data.widthHint = 600; urlText.setLayoutData(data); urlText.setText(url); Label newUrlLabel = new Label(outerContainer, SWT.NONE); newUrlLabel.setText(Policy.bind("RelocateWizard.newUrlLabel")); //$NON-NLS-1$ newUrlText = new Text(outerContainer, SWT.BORDER); data = new GridData(SWT.FILL, SWT.CENTER, true, false); data.widthHint = 600; newUrlText.setLayoutData(data); newUrlText.setText(url); newUrlText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(newUrlText.getText().trim().length() > 0 && !newUrlText.getText().trim().equals(url)); } }); setMessage(Policy.bind("RelocateWizard.newUrl")); //$NON-NLS-1$ setControl(outerContainer); } public String getNewUrl() { return newUrlText.getText().trim(); } } RelocateWizardWarningPage.java000066400000000000000000000134461203611042400431110ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/******************************************************************************* * Copyright (c) 2005, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards; import org.eclipse.core.resources.IProject; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ColumnLayoutData; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class RelocateWizardWarningPage extends WizardPage { private IProject[] sharedProjects; private Table table; private TableViewer viewer; private ColumnLayoutData columnLayouts[] = { new ColumnWeightData(100, 100, true)}; private String columnHeaders[] = { "Project" }; public RelocateWizardWarningPage(String pageName, String title, ImageDescriptor titleImage) { super(pageName, title, titleImage); setPageComplete(true); } public void createControl(Composite parent) { RelocateWizard wizard = (RelocateWizard)getWizard(); sharedProjects = wizard.getSharedProjects(); Composite outerContainer = new Composite(parent,SWT.NONE); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(outerContainer, IHelpContextIds.RELOCATE_REPOSITORY_PAGE); GridLayout outerLayout = new GridLayout(); outerLayout.numColumns = 2; outerContainer.setLayout(outerLayout); outerContainer.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); Label attentionImageLabel = new Label(outerContainer, SWT.NONE); attentionImageLabel.setImage(SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WARNING).createImage()); attentionImageLabel.setLayoutData(new GridData(SWT.LEFT, SWT.TOP, false, false)); Text warningText = new Text(outerContainer, SWT.WRAP); warningText.setEditable(false); GridData data = new GridData(SWT.FILL, SWT.TOP, true, false); data.widthHint = 400; data.heightHint = 40; warningText.setLayoutData(data); warningText.setText(Policy.bind("RelocateWizard.warningMessage1")); //$NON-NLS-1$ warningText.setBackground(outerContainer.getBackground()); Text warningText2 = new Text(outerContainer, SWT.WRAP); warningText2.setEditable(false); data = new GridData(SWT.FILL, SWT.TOP, true, false, 2, 1); data.widthHint = 400; data.heightHint = 100; warningText2.setLayoutData(data); warningText2.setText(Policy.bind("RelocateWizard.warningMessage2")); //$NON-NLS-1$ warningText2.setBackground(outerContainer.getBackground()); // Group projectsGroup = new Group(outerContainer, SWT.NONE); // projectsGroup.setText(Policy.bind("RelocateWizard.projects")); //$NON-NLS-1$ // projectsGroup.setLayout(new GridLayout()); // projectsGroup.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1)); Label projectsLabel = new Label(outerContainer, SWT.NONE); projectsLabel.setText(Policy.bind("RelocateWizard.projects")); //$NON-NLS-1$ projectsLabel.setLayoutData(new GridData(SWT.FILL, SWT.TOP, false, false, 2, 1)); table = new Table(outerContainer, SWT.BORDER); table.setLinesVisible(false); table.setHeaderVisible(false); viewer = new TableViewer(table); viewer.setUseHashlookup(true); TableLayout layout = new TableLayout(); table.setLayout(layout); for (int i = 0; i < columnHeaders.length; i++) { layout.addColumnData(columnLayouts[i]); TableColumn tc = new TableColumn(table, SWT.NONE,i); tc.setResizable(columnLayouts[i].resizable); tc.setText(columnHeaders[i]); } viewer.setLabelProvider(new ProjectLabelProvider()); viewer.setContentProvider(new ProjectContentProvider()); viewer.setInput(this); GridData gd = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1); gd.widthHint = 400; gd.heightHint = 150; table.setLayoutData(gd); setMessage(Policy.bind("RelocateWizard.warning")); //$NON-NLS-1$ setControl(outerContainer); } class ProjectLabelProvider extends WorkbenchLabelProvider implements ITableLabelProvider { public String getColumnText(Object element, int columnIndex) { IProject project = (IProject)element; switch (columnIndex) { case 0: return project.getName(); default: return ""; } } public Image getColumnImage(Object element, int columnIndex) { if (columnIndex == 0) { return getImage(element); } return null; } } class ProjectContentProvider implements IStructuredContentProvider { public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } public Object[] getElements(Object arg0) { return sharedProjects; } } } SVNWizardPage.java000066400000000000000000000256201203611042400404700ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards; import java.util.ArrayList; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.DecoratingLabelProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITreeContentProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.ListViewer; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.eclipse.ui.model.WorkbenchViewerSorter; import org.eclipse.ui.views.navigator.ResourceSorter; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; /** * Common superclass for SVN wizard pages. Provides convenience methods * for widget creation. */ public abstract class SVNWizardPage extends WizardPage { protected static final int LABEL_WIDTH_HINT = 400; protected static final int LABEL_INDENT_WIDTH = 32; protected static final int LIST_HEIGHT_HINT = 100; protected static final int SPACER_HEIGHT = 8; /** * SVNWizardPage constructor comment. * @param pageName the name of the page */ public SVNWizardPage(String pageName) { super(pageName); } /** * SVNWizardPage constructor comment. * @param pageName the name of the page * @param title the title of the page * @param titleImage the image for the page */ public SVNWizardPage(String pageName, String title, ImageDescriptor titleImage) { super(pageName, title, titleImage); } /** * SVNWizardPage constructor comment. * @param pageName the name of the page * @param title the title of the page * @param titleImage the image for the page * @param description the description of the page */ public SVNWizardPage(String pageName, String title, ImageDescriptor titleImage, String description) { super(pageName, title, titleImage); setDescription(description); } /** * Creates a new checkbox instance and sets the default layout data. * * @param group the composite in which to create the checkbox * @param label the string to set into the checkbox * @return the new checkbox */ protected Button createCheckBox(Composite group, String label) { Button button = new Button(group, SWT.CHECK | SWT.LEFT); button.setText(label); GridData data = new GridData(); data.horizontalSpan = 2; button.setLayoutData(data); return button; } /** * Utility method that creates a combo box * * @param parent the parent for the new label * @return the new widget */ protected Combo createCombo(Composite parent) { Combo combo = new Combo(parent, SWT.READ_ONLY); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH; combo.setLayoutData(data); return combo; } /** * Creates composite control and sets the default layout data. * * @param parent the parent of the new composite * @param numColumns the number of columns for the new composite * @return the newly-created coposite */ protected Composite createComposite(Composite parent, int numColumns) { Composite composite = new Composite(parent, SWT.NULL); // GridLayout GridLayout layout = new GridLayout(); layout.numColumns = numColumns; composite.setLayout(layout); // GridData GridData data = new GridData(); data.verticalAlignment = GridData.FILL; data.horizontalAlignment = GridData.FILL; composite.setLayoutData(data); return composite; } /** * Utility method that creates a label instance * and sets the default layout data. * * @param parent the parent for the new label * @param text the text for the new label * @return the new label */ public static Label createLabel(Composite parent, String text) { return createIndentedLabel(parent, text, 0); } /** * Utility method that creates a label instance indented by the specified * number of pixels and sets the default layout data. * * @param parent the parent for the new label * @param text the text for the new label * @param indent the indent in pixels, or 0 for none * @return the new label */ public static Label createIndentedLabel(Composite parent, String text, int indent) { Label label = new Label(parent, SWT.LEFT); label.setText(text); GridData data = new GridData(); data.horizontalSpan = 1; data.horizontalAlignment = GridData.FILL; data.horizontalIndent = indent; label.setLayoutData(data); return label; } /** * Utility method that creates a label instance with word wrap and sets * the default layout data. * * @param parent the parent for the new label * @param text the text for the new label * @param indent the indent in pixels, or 0 for none * @param widthHint the nominal width of the label * @return the new label */ protected Label createWrappingLabel(Composite parent, String text, int indent) { return createWrappingLabel(parent, text, indent, 1); } protected Label createWrappingLabel(Composite parent, String text, int indent, int horizontalSpan) { Label label = new Label(parent, SWT.LEFT | SWT.WRAP); label.setText(text); GridData data = new GridData(); data.horizontalSpan = horizontalSpan; data.horizontalAlignment = GridData.FILL; data.horizontalIndent = indent; data.grabExcessHorizontalSpace = true; data.widthHint = LABEL_WIDTH_HINT; label.setLayoutData(data); return label; } /** * Create a text field specific for this application * * @param parent the parent of the new text field * @return the new text field */ static public Text createTextField(Composite parent) { Text text = new Text(parent, SWT.SINGLE | SWT.BORDER); GridData data = new GridData(GridData.FILL_HORIZONTAL); data.verticalAlignment = GridData.CENTER; data.grabExcessVerticalSpace = false; data.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH; text.setLayoutData(data); return text; } /** * Utility method to create a radio button * * @param parent the parent of the radio button * @param label the label of the radio button * @param span the number of columns to span * @return the created radio button */ protected Button createRadioButton(Composite parent, String label, int span) { Button button = new Button(parent, SWT.RADIO); button.setText(label); GridData data = new GridData(); data.horizontalSpan = span; button.setLayoutData(data); return button; } /** * Utility method to create a full width separator preceeded by a blank space * * @param parent the parent of the separator * @param verticalSpace the vertical whitespace to insert before the label */ protected void createSeparator(Composite parent, int verticalSpace) { // space Label label = new Label(parent, SWT.NONE); GridData data = new GridData(); data.heightHint = verticalSpace; label.setLayoutData(data); // separator label = new Label(parent, SWT.SEPARATOR | SWT.HORIZONTAL); data = new GridData(GridData.FILL_HORIZONTAL); label.setLayoutData(data); } /** * Creates a ListViewer whose input is an array of IFiles. * * @param parent the parent of the viewer * @param title the text for the title label * @param heightHint the nominal height of the list * @return the created list viewer */ public ListViewer createFileListViewer(Composite parent, String title, int heightHint) { createLabel(parent, title); ListViewer listViewer = new ListViewer(parent, SWT.READ_ONLY | SWT.V_SCROLL | SWT.H_SCROLL | SWT.BORDER); listViewer.setContentProvider(new IStructuredContentProvider() { public Object[] getElements(Object inputElement) { return (Object[]) inputElement; } public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } }); listViewer.setLabelProvider(new LabelProvider() { public String getText(Object element) { return ((IFile) element).getFullPath().toString(); } }); listViewer.setSorter(new WorkbenchViewerSorter()); GridData data = new GridData(GridData.FILL_BOTH); data.heightHint = heightHint; listViewer.getList().setLayoutData(data); return listViewer; } protected TreeViewer createResourceSelectionTree(Composite composite, int types, int span) { TreeViewer tree = new TreeViewer(composite, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); tree.setUseHashlookup(true); tree.setContentProvider(getResourceProvider(types)); tree.setLabelProvider( new DecoratingLabelProvider( new WorkbenchLabelProvider(), SVNUIPlugin.getPlugin().getWorkbench().getDecoratorManager().getLabelDecorator())); tree.setSorter(new ResourceSorter(ResourceSorter.NAME)); GridData data = new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL); data.heightHint = LIST_HEIGHT_HINT; data.horizontalSpan = span; tree.getControl().setLayoutData(data); return tree; } /** * Returns a content provider for IResources that returns * only children of the given resource type. */ protected ITreeContentProvider getResourceProvider(final int resourceType) { return new WorkbenchContentProvider() { public Object[] getChildren(Object o) { if (o instanceof IContainer) { IResource[] members = null; try { members = ((IContainer)o).members(); } catch (CoreException e) { //just return an empty set of children return new Object[0]; } //filter out the desired resource types ArrayList results = new ArrayList(); for (int i = 0; i < members.length; i++) { //And the test bits with the resource types to see if they are what we want if ((members[i].getType() & resourceType) > 0) { results.add(members[i]); } } return results.toArray(); } else { return super.getChildren(o); } } }; } /* protected RepositoryManager getRepositoryManager() { return SVNUIPlugin.getPlugin().getRepositoryManager(); }*/ } SizePersistedWizardDialog.java000066400000000000000000000037321203611042400431420ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizardspackage org.tigris.subversion.subclipse.ui.wizards; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.wizard.IWizard; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Shell; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class SizePersistedWizardDialog extends ClosableWizardDialog { private String sizeKey; private IDialogSettings settings; public SizePersistedWizardDialog(Shell parentShell, IWizard newWizard, String sizeKey) { super(parentShell, newWizard); this.sizeKey = sizeKey; settings = SVNUIPlugin.getPlugin().getDialogSettings(); } protected void cancelPressed() { saveLocation(); super.cancelPressed(); } public void finishPressed() { saveLocation(); super.finishPressed(); } protected void okPressed() { saveLocation(); super.okPressed(); } protected Point getInitialLocation(Point initialSize) { try { int x = settings.getInt(sizeKey + ".location.x"); //$NON-NLS-1$ int y = settings.getInt(sizeKey + ".location.y"); //$NON-NLS-1$ return new Point(x, y); } catch (NumberFormatException e) {} return super.getInitialLocation(initialSize); } protected Point getInitialSize() { try { int x = settings.getInt(sizeKey + ".size.x"); //$NON-NLS-1$ int y = settings.getInt(sizeKey + ".size.y"); //$NON-NLS-1$ return new Point(x, y); } catch (NumberFormatException e) {} return super.getInitialSize(); } protected void saveLocation() { int x = getShell().getLocation().x; int y = getShell().getLocation().y; settings.put(sizeKey + ".location.x", x); //$NON-NLS-1$ settings.put(sizeKey + ".location.y", y); //$NON-NLS-1$ x = getShell().getSize().x; y = getShell().getSize().y; settings.put(sizeKey + ".size.x", x); //$NON-NLS-1$ settings.put(sizeKey + ".size.y", y); //$NON-NLS-1$ } } WizardDialogWithPersistedLocation.java000066400000000000000000000035141203611042400446320ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizardspackage org.tigris.subversion.subclipse.ui.wizards; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.wizard.IWizard; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Shell; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public class WizardDialogWithPersistedLocation extends ClosableWizardDialog { private String id; private IDialogSettings settings; public WizardDialogWithPersistedLocation(Shell parentShell, IWizard newWizard, String id) { super(parentShell, newWizard); this.id = id; settings = SVNUIPlugin.getPlugin().getDialogSettings(); } protected void cancelPressed() { saveLocation(); super.cancelPressed(); } protected void okPressed() { saveLocation(); super.okPressed(); } protected Point getInitialLocation(Point initialSize) { try { int x = settings.getInt(id + ".location.x"); //$NON-NLS-1$ int y = settings.getInt(id + ".location.y"); //$NON-NLS-1$ return new Point(x, y); } catch (NumberFormatException e) {} return super.getInitialLocation(initialSize); } protected Point getInitialSize() { try { int x = settings.getInt(id + ".size.x"); //$NON-NLS-1$ int y = settings.getInt(id + ".size.y"); //$NON-NLS-1$ return new Point(x, y); } catch (NumberFormatException e) {} return super.getInitialSize(); } protected void saveLocation() { int x = getShell().getLocation().x; int y = getShell().getLocation().y; settings.put(id + ".location.x", x); //$NON-NLS-1$ settings.put(id + ".location.y", y); //$NON-NLS-1$ x = getShell().getSize().x; y = getShell().getSize().y; settings.put(id + ".size.x", x); //$NON-NLS-1$ settings.put(id + ".size.y", y); //$NON-NLS-1$ } } 000077500000000000000000000000001203611042400366165ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/dialogsSvnWizard.java000066400000000000000000000023511203611042400414110ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/dialogspackage org.tigris.subversion.subclipse.ui.wizards.dialogs; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.wizard.Wizard; import org.tigris.subversion.subclipse.ui.wizards.ClosableWizardDialog; import org.tigris.subversion.subclipse.ui.wizards.IClosableWizard; public class SvnWizard extends Wizard implements IClosableWizard { private SvnWizardDialogPage svnWizardDialogPage; private Dialog parentDialog; public SvnWizard(SvnWizardDialogPage svnWizardDialogPage) { super(); this.svnWizardDialogPage = svnWizardDialogPage; } public void addPages() { super.addPages(); setWindowTitle(svnWizardDialogPage.getWindowTitle()); addPage(svnWizardDialogPage); } public boolean performFinish() { return svnWizardDialogPage.performFinish(); } public boolean performCancel() { return svnWizardDialogPage.performCancel(); } public SvnWizardDialogPage getSvnWizardDialogPage() { return svnWizardDialogPage; } public void setParentDialog(Dialog dialog) { this.parentDialog = dialog; } public void finishAndClose() { if (parentDialog != null && parentDialog instanceof ClosableWizardDialog && canFinish()) { ((ClosableWizardDialog)parentDialog).finishPressed(); } } } SvnWizardAnnotatePage.java000066400000000000000000000237251203611042400437100ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/dialogspackage org.tigris.subversion.subclipse.ui.wizards.dialogs; import java.text.ParseException; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.tigris.subversion.subclipse.core.ISVNRemoteFile; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.resources.RemoteResource; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.dialogs.HistoryDialog; import org.tigris.subversion.svnclientadapter.SVNRevision; public class SvnWizardAnnotatePage extends SvnWizardDialogPage { private ISVNRemoteFile svnResource; private Button includeMergedRevisionsButton; private Button ignoreMimeTypeButton; private Text fromRevisionText; private Button selectFromRevisionButton; private Button toHeadButton; private Button toRevisionButton; private Text toRevisionText; private Button selectToRevisionButton; private boolean includeMergedRevisions; private boolean ignoreMimeType; private SVNRevision fromRevision; private SVNRevision toRevision; private IDialogSettings settings = SVNUIPlugin.getPlugin().getDialogSettings(); public SvnWizardAnnotatePage(ISVNRemoteFile svnResource) { super("AnnotateDialog", Policy.bind("AnnotateDialog.title")); //$NON-NLS-1$ //$NON-NLS-2$ this.svnResource = svnResource; } public void createButtonsForButtonBar(Composite parent, SvnWizardDialog wizardDialog) { } public void createControls(Composite parent) { Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 1; layout.marginHeight = 0; layout.marginWidth = 0; composite.setLayout(layout); GridData data = new GridData(GridData.FILL_BOTH); composite.setLayoutData(data); includeMergedRevisionsButton = new Button(composite, SWT.CHECK); includeMergedRevisionsButton.setText(Policy.bind("AnnotateDialog.includeMerged")); //$NON-NLS-1$ includeMergedRevisionsButton.setSelection(settings.getBoolean("AnnotateDialog.includeMerged")); //$NON-NLS-1$ includeMergedRevisionsButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { settings.put("AnnotateDialog.includeMerged", includeMergedRevisionsButton.getSelection()); //$NON-NLS-1$ } }); ignoreMimeTypeButton = new Button(composite, SWT.CHECK); ignoreMimeTypeButton.setText(Policy.bind("AnnotateDialog.ignoreMimeType")); //$NON-NLS-1$ Group fromGroup = new Group(composite, SWT.NONE); fromGroup.setText(Policy.bind("AnnotateDialog.from")); //$NON-NLS-1$ GridLayout fromLayout = new GridLayout(); fromLayout.numColumns = 3; fromGroup.setLayout(fromLayout); fromGroup.setLayoutData( new GridData(GridData.FILL_BOTH)); Label fromRevisionLabel = new Label(fromGroup, SWT.NONE); fromRevisionLabel.setText(Policy.bind("AnnotateDialog.revision")); //$NON-NLS-1$ fromRevisionText = new Text(fromGroup, SWT.BORDER); data = new GridData(); data.widthHint = 40; fromRevisionText.setLayoutData(data); fromRevisionText.setText("1"); //$NON-NLS-1$ selectFromRevisionButton = new Button(fromGroup, SWT.PUSH); selectFromRevisionButton.setText(Policy.bind("AnnotateDialog.showLog")); //$NON-NLS-1$ Group toGroup = new Group(composite, SWT.NONE); toGroup.setText(Policy.bind("AnnotateDialog.to")); //$NON-NLS-1$ GridLayout toLayout = new GridLayout(); toLayout.numColumns = 5; toGroup.setLayout(toLayout); toGroup.setLayoutData( new GridData(GridData.FILL_BOTH)); toHeadButton = new Button(toGroup, SWT.RADIO); toHeadButton.setText(Policy.bind("AnnotateDialog.head")); //$NON-NLS-1$ toRevisionButton = new Button(toGroup, SWT.RADIO); toRevisionButton.setText(Policy.bind("AnnotateDialog.toRevision")); //$NON-NLS-1$ toRevisionText = new Text(toGroup, SWT.BORDER); data = new GridData(); data.widthHint = 40; toRevisionText.setLayoutData(data); toRevisionText.setEnabled(false); if (toRevision == null) { if (svnResource instanceof RemoteResource) { if (((RemoteResource)svnResource).getPegRevision() != null) { toRevision = ((RemoteResource)svnResource).getPegRevision(); } } } if (toRevision == null) toHeadButton.setSelection(true); else { toRevisionText.setText(toRevision.toString()); toRevisionButton.setSelection(true); toRevisionText.setEnabled(true); } selectToRevisionButton = new Button(toGroup, SWT.PUSH); selectToRevisionButton.setText(Policy.bind("AnnotateDialog.showToLog")); //$NON-NLS-1$ SelectionListener selectionListener = getSelectionListener(); selectFromRevisionButton.addSelectionListener(selectionListener); toHeadButton.addSelectionListener(selectionListener); toRevisionButton.addSelectionListener(selectionListener); selectToRevisionButton.addSelectionListener(selectionListener); ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(canFinish()); } }; fromRevisionText.addModifyListener(modifyListener); toRevisionText.addModifyListener(modifyListener); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; fromRevisionText.addFocusListener(focusListener); toRevisionText.addFocusListener(focusListener); } public String getWindowTitle() { return Policy.bind("AnnotateDialog.title"); //$NON-NLS-1$ } public boolean performCancel() { return true; } public boolean performFinish() { includeMergedRevisions = includeMergedRevisionsButton.getSelection(); ignoreMimeType = ignoreMimeTypeButton.getSelection(); try { fromRevision = SVNRevision.getRevision(fromRevisionText.getText().trim()); } catch (ParseException e) { MessageDialog.openError(getShell(), Policy.bind("AnnotateDialog.title"), e.getMessage()); return false; } if (toHeadButton.getSelection()) toRevision = SVNRevision.HEAD; else { try { toRevision = SVNRevision.getRevision(toRevisionText.getText().trim()); } catch (ParseException e) { MessageDialog.openError(getShell(), Policy.bind("AnnotateDialog.title"), e.getMessage()); return false; } } return true; } public void saveSettings() { } public void setMessage() { setMessage(Policy.bind("AnnotateDialog.message", svnResource.getName())); //$NON-NLS-1$ } public SVNRevision getFromRevision() { return fromRevision; } public SVNRevision getToRevision() { return toRevision; } public void setToRevision(SVNRevision toRevision) { this.toRevision = toRevision; } public boolean isIncludeMergedRevisions() { return includeMergedRevisions; } public boolean isIgnoreMimeType() { return ignoreMimeType; } private boolean canFinish() { setErrorMessage(null); if (fromRevisionText.getText().trim().length() == 0) return false; if (!validateRevision(fromRevisionText.getText().trim())) { setErrorMessage(Policy.bind("AnnotateDialog.invalidFromRevision")); //$NON-NLS-1$ return false; } if (toRevisionButton.getSelection() && toRevisionText.getText().trim().length() == 0) return false; if (toRevisionButton.getSelection() && !validateRevision(toRevisionText.getText().trim())) { setErrorMessage(Policy.bind("AnnotateDialog.invalidToRevision")); //$NON-NLS-1$ return false; } return true; } private boolean validateRevision(String revision) { try { SVNRevision.getRevision(revision); } catch (ParseException e1) { return false; } return true; } private SelectionListener getSelectionListener() { SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (e.getSource() == selectFromRevisionButton) { showLog(fromRevisionText); } else if (e.getSource() == toHeadButton || e.getSource() == toRevisionButton) { toRevisionText.setEnabled(toRevisionButton.getSelection()); selectToRevisionButton.setEnabled(toRevisionButton.getSelection()); if (toRevisionButton.getSelection()) toRevisionText.setFocus(); } else if (e.getSource() == selectToRevisionButton) { showLog(toRevisionText); } setPageComplete(canFinish()); } }; return selectionListener; } private void showLog(Text text) { HistoryDialog dialog = new HistoryDialog(getShell(), svnResource); if (dialog.open() == HistoryDialog.CANCEL) return; ILogEntry[] selectedEntries = dialog.getSelectedLogEntries(); if (selectedEntries.length == 0) return; if ((text == fromRevisionText) || ((text == null) && (fromRevisionText.getText().trim().length() == 0))) { fromRevisionText.setText(Long.toString(selectedEntries[0].getRevision().getNumber())); fromRevisionText.setEnabled(true); } if (text == toRevisionText) { toRevisionText.setText(Long.toString(selectedEntries[0].getRevision().getNumber())); toRevisionButton.setSelection(true); toHeadButton.setSelection(false); toRevisionText.setEnabled(true); } } } SvnWizardBranchTagPage.java000066400000000000000000000451141203611042400437640ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/dialogspackage org.tigris.subversion.subclipse.ui.wizards.dialogs; import org.eclipse.core.resources.IResource; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.history.Alias; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.comments.CommitCommentArea; import org.tigris.subversion.subclipse.ui.dialogs.BranchTagPropertyUpdateDialog; import org.tigris.subversion.subclipse.ui.dialogs.ChooseUrlDialog; import org.tigris.subversion.subclipse.ui.dialogs.HistoryDialog; import org.tigris.subversion.subclipse.ui.settings.CommentProperties; import org.tigris.subversion.subclipse.ui.settings.ProjectProperties; import org.tigris.subversion.subclipse.ui.util.UrlCombo; import org.tigris.subversion.subclipse.ui.wizards.IClosableWizard; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.ISVNProperty; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class SvnWizardBranchTagPage extends SvnWizardDialogPage { private static final int REVISION_WIDTH_HINT = 40; private IResource resource; private ISVNRemoteResource remoteResource; private ISVNLocalResource svnResource; private UrlCombo toUrlCombo; private Button makeParentsButton; private Button serverButton; private Button revisionButton; private Text revisionText; private Button logButton; private Button workingCopyButton; private CommitCommentArea commitCommentArea; private SVNRevision revision; private SVNUrl url; private SVNUrl toUrl; private boolean createOnServer; private boolean specificRevision; private boolean makeParents; private String comment; private Text issueText; private String issue; private CommentProperties commentProperties; private ProjectProperties projectProperties; private long revisionNumber = 0; private Alias newAlias; private Button switchAfterBranchTagCheckBox; private boolean switchAfterBranchTag; private IDialogSettings settings = SVNUIPlugin.getPlugin().getDialogSettings(); public SvnWizardBranchTagPage(IResource resource) { super("BranchTagDialog", Policy.bind("BranchTagDialog.title")); //$NON-NLS-1$ //$NON-NLS-2$ try { commentProperties = CommentProperties.getCommentProperties(resource); projectProperties = ProjectProperties.getProjectProperties(resource); } catch (SVNException e) {} commitCommentArea = new CommitCommentArea(null, null, Policy.bind("BranchTagDialog.enterComment"), commentProperties); //$NON-NLS-1$ if ((commentProperties != null) && (commentProperties.getMinimumLogMessageSize() != 0)) { ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(canFinish()); } }; commitCommentArea.setModifyListener(modifyListener); } this.resource = resource; } public SvnWizardBranchTagPage(ISVNRemoteResource remoteResource) { super("BranchTagDialog", Policy.bind("BranchTagDialog.title")); //$NON-NLS-1$ //$NON-NLS-2$ commitCommentArea = new CommitCommentArea(null, null, Policy.bind("BranchTagDialog.enterComment"), commentProperties); //$NON-NLS-1$ this.remoteResource = remoteResource; } public void createControls(Composite parent) { Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite top = new Composite(composite, SWT.NULL); GridLayout gridLayout = new GridLayout(); gridLayout.marginWidth = 0; gridLayout.marginHeight = 0; top.setLayout(gridLayout); top.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, false)); Group repositoryGroup = new Group(top, SWT.NULL); repositoryGroup.setText(Policy.bind("BranchTagDialog.repository")); //$NON-NLS-1$ repositoryGroup.setLayout(new GridLayout()); GridData data = new GridData(SWT.FILL, SWT.FILL, true, false); repositoryGroup.setLayoutData(data); Label fromUrlLabel = new Label(repositoryGroup, SWT.NONE); if (resource == null) fromUrlLabel.setText(Policy.bind("BranchTagDialog.fromUrl")); //$NON-NLS-1$ else fromUrlLabel.setText(Policy.bind("BranchTagDialog.url")); //$NON-NLS-1$ Text urlText = new Text(repositoryGroup, SWT.BORDER); data = new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL); urlText.setLayoutData(data); if (resource == null) { url = remoteResource.getUrl(); urlText.setText(url.toString()); } else { svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); try { url = svnResource.getStatus().getUrl(); if (url != null) urlText.setText(svnResource.getStatus().getUrlString()); } catch (SVNException e1) {} } urlText.setEditable(false); Label toUrlLabel = new Label(repositoryGroup, SWT.NONE); toUrlLabel.setText(Policy.bind("BranchTagDialog.toUrl")); //$NON-NLS-1$ Composite urlComposite = new Composite(repositoryGroup, SWT.NULL); GridLayout urlLayout = new GridLayout(); urlLayout.numColumns = 2; urlLayout.marginWidth = 0; urlLayout.marginHeight = 0; urlComposite.setLayout(urlLayout); data = new GridData(SWT.FILL, SWT.FILL, true, false); urlComposite.setLayoutData(data); toUrlCombo = new UrlCombo(urlComposite, SWT.NONE); toUrlCombo.init( resource == null ? "repositoryBrowser" : resource.getProject().getName()); //$NON-NLS-1$ toUrlCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); toUrlCombo.setText(urlText.getText()); Button browseButton = new Button(urlComposite, SWT.PUSH); browseButton.setText(Policy.bind("SwitchDialog.browse")); //$NON-NLS-1$ browseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { ChooseUrlDialog dialog = new ChooseUrlDialog(getShell(), resource); if ((dialog.open() == ChooseUrlDialog.OK) && (dialog.getUrl() != null)) { toUrlCombo.setText(dialog.getUrl()); } } }); makeParentsButton = new Button(urlComposite, SWT.CHECK); makeParentsButton.setText(Policy.bind("BranchTagDialog.makeParents")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; makeParentsButton.setLayoutData(data); makeParentsButton.setSelection(settings.getBoolean("BranchTagDialog.makeParents")); //$NON-NLS-1$ makeParentsButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { settings.put("BranchTagDialog.makeParents", makeParentsButton.getSelection()); //$NON-NLS-1$ } }); // Group serverComposite = new Group(repositoryGroup, SWT.NULL); Group serverComposite = new Group(top, SWT.NULL); serverComposite.setText(Policy.bind("BranchTagDialog.createCopy")); //$NON-NLS-1$ GridLayout serverLayout = new GridLayout(); serverLayout.numColumns = 3; serverComposite.setLayout(serverLayout); data = new GridData(SWT.FILL, SWT.FILL, true, false); serverComposite.setLayoutData(data); serverButton = new Button(serverComposite, SWT.RADIO); serverButton.setText(Policy.bind("BranchTagDialog.head")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 3; serverButton.setLayoutData(data); revisionButton = new Button(serverComposite, SWT.RADIO); revisionButton.setText(Policy.bind("BranchTagDialog.revision")); //$NON-NLS-1$ revisionText = new Text(serverComposite, SWT.BORDER); data = new GridData(); data.widthHint = REVISION_WIDTH_HINT; revisionText.setLayoutData(data); if (revisionNumber == 0) revisionText.setEnabled(false); else revisionText.setText("" + revisionNumber); revisionText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(canFinish()); } }); logButton = new Button(serverComposite, SWT.PUSH); logButton.setText(Policy.bind("MergeDialog.showLog")); //$NON-NLS-1$ if (revisionNumber == 0) logButton.setEnabled(false); logButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { showLog(); } }); workingCopyButton = new Button(serverComposite, SWT.RADIO); workingCopyButton.setText(Policy.bind("BranchTagDialog.working")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 3; workingCopyButton.setLayoutData(data); if (resource == null) workingCopyButton.setVisible(false); if (revisionNumber == 0) serverButton.setSelection(true); else revisionButton.setSelection(true); SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { revisionText.setEnabled(revisionButton.getSelection()); logButton.setEnabled(revisionButton.getSelection()); if (revisionButton.getSelection()) revisionText.setFocus(); setPageComplete(canFinish()); } }; serverButton.addSelectionListener(selectionListener); revisionButton.addSelectionListener(selectionListener); workingCopyButton.addSelectionListener(selectionListener); if (projectProperties != null) { if (projectProperties.getMessage() != null) { addBugtrackingArea(top); } } commitCommentArea.createArea(composite); commitCommentArea.addPropertyChangeListener(new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { if (event.getProperty() == CommitCommentArea.OK_REQUESTED && canFinish()) { IClosableWizard wizard = (IClosableWizard)getWizard(); wizard.finishAndClose(); } } }); toUrlCombo.getCombo().setFocus(); if (resource != null) { switchAfterBranchTagCheckBox = new Button(composite, SWT.CHECK); switchAfterBranchTagCheckBox.setText(Policy.bind("BranchTagDialog.switchAfterTagBranch")); } setPageComplete(canFinish()); FocusListener focusListener = new FocusListener() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; revisionText.addFocusListener(focusListener); if (issueText != null) issueText.addFocusListener(focusListener); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.BRANCH_TAG_DIALOG); } protected void showLog() { ISVNRemoteResource remoteResource = null; if (resource == null) remoteResource = this.remoteResource; else { try { remoteResource = SVNWorkspaceRoot.getSVNResourceFor(resource).getRepository().getRemoteFile(url); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.showLog"), e.toString()); //$NON-NLS-1$ return; } } if (remoteResource == null) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.showLog"), Policy.bind("MergeDialog.urlError") + " " + toUrlCombo.getText()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ return; } HistoryDialog dialog = new HistoryDialog(getShell(), remoteResource); if (dialog.open() == HistoryDialog.CANCEL) return; ILogEntry[] selectedEntries = dialog.getSelectedLogEntries(); if (selectedEntries.length == 0) return; revisionText.setText(Long.toString(selectedEntries[selectedEntries.length - 1].getRevision().getNumber())); setPageComplete(canFinish()); } private void addBugtrackingArea(Composite composite) { Composite bugtrackingComposite = new Composite(composite, SWT.NULL); GridLayout bugtrackingLayout = new GridLayout(); bugtrackingLayout.numColumns = 2; bugtrackingComposite.setLayout(bugtrackingLayout); Label label = new Label(bugtrackingComposite, SWT.NONE); label.setText(projectProperties.getLabel()); issueText = new Text(bugtrackingComposite, SWT.BORDER); GridData data = new GridData(); data.widthHint = 150; issueText.setLayoutData(data); } public String getWindowTitle() { return Policy.bind("BranchTagDialog.title"); //$NON-NLS-1$ } public boolean performCancel() { return true; } public boolean performFinish() { if (projectProperties != null) { issue = issueText.getText().trim(); if (projectProperties.isWarnIfNoIssue() && (issueText.getText().trim().length() == 0)) { if (!MessageDialog.openQuestion(getShell(), Policy.bind("BranchTagDialog.title"), Policy.bind("BranchTagDialog.0", projectProperties.getLabel()))) { //$NON-NLS-1$ //$NON-NLS-2$ issueText.setFocus(); return false; } } if (issueText.getText().trim().length() > 0) { String issueError = projectProperties.validateIssue(issueText.getText().trim()); if (issueError != null) { MessageDialog.openError(getShell(), Policy.bind("BranchTagDialog.title"), issueError); //$NON-NLS-1$ issueText.selectAll(); issueText.setFocus(); return false; } } } toUrlCombo.saveUrl(); createOnServer = !workingCopyButton.getSelection(); specificRevision = revisionButton.getSelection(); makeParents = makeParentsButton.getSelection(); if(switchAfterBranchTagCheckBox != null) { switchAfterBranchTag = switchAfterBranchTagCheckBox.getSelection(); } comment = commitCommentArea.getComment(true); if (serverButton.getSelection()) revision = SVNRevision.HEAD; try { toUrl = new SVNUrl(toUrlCombo.getText()); if (revisionButton.getSelection()) revision = SVNRevision.getRevision(revisionText.getText().trim()); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("BranchTagDialog.title"), e.getMessage()); //$NON-NLS-1$ return false; } if (resource != null) updateTagsProperty(toUrl); return true; } public void saveSettings() { } public void setMessage() { setMessage(Policy.bind("BranchTagDialog.message")); //$NON-NLS-1$ } public void setRevisionNumber(long revisionNumber) { this.revisionNumber = revisionNumber; } private boolean canFinish() { if ((commentProperties != null) && (commentProperties.getMinimumLogMessageSize() != 0)) { if (commitCommentArea.getCommentLength() < commentProperties.getMinimumLogMessageSize()) return false; } if (revisionButton.getSelection() && (revisionText.getText().trim().length() == 0)) return false; return true; } private void updateTagsProperty(SVNUrl toUrl) { ISVNClientAdapter svnClient = null; try { ISVNProperty property = null; property = svnResource.getSvnProperty("subclipse:tags"); //$NON-NLS-1$ if (property == null) return; newAlias = new Alias(); newAlias.setBranch(toUrl.toString().toUpperCase().indexOf("TAGS") == -1); //$NON-NLS-1$ String relativePath = toUrl.toString().substring(svnResource.getRepository().getUrl().toString().length()); newAlias.setRelativePath(relativePath); SVNRevision revision = null; if (revisionButton.getSelection()) revision = SVNRevision.getRevision(revisionText.getText().trim()); else { svnClient = svnResource.getRepository().getSVNClient(); ISVNInfo svnInfo = svnClient.getInfo(url); revision = SVNRevision.getRevision(svnInfo.getRevision().toString()); } newAlias.setRevision(Integer.parseInt(revision.toString())); newAlias.setName(toUrl.getLastPathSegment()); BranchTagPropertyUpdateDialog dialog = new BranchTagPropertyUpdateDialog(getShell(), resource, newAlias, "BranchTagPropertyUpdateDialog"); //$NON-NLS-1$ if (dialog.open() == BranchTagPropertyUpdateDialog.OK) newAlias = dialog.getNewAlias(); else newAlias = null; } catch (Exception e) {} finally { svnResource.getRepository().returnSVNClient(svnClient); } } public String getComment() { if ((projectProperties != null) && (issue != null) && (issue.length() > 0)) { if (projectProperties.isAppend()) return comment + "\n" + projectProperties.getResolvedMessage(issue) + "\n"; //$NON-NLS-1$ //$NON-NLS-2$ else return projectProperties.getResolvedMessage(issue) + "\n" + comment; //$NON-NLS-1$ } return comment; } public boolean isCreateOnServer() { return createOnServer; } public boolean isSpecificRevision() { return specificRevision; } public boolean isMakeParents() { return makeParents; } public SVNUrl getToUrl() { return toUrl; } public SVNUrl getUrl() { return url; } public SVNRevision getRevision() { return revision; } public Alias getNewAlias() { return newAlias; } public boolean switchAfterTagBranch() { return switchAfterBranchTag; } public void createButtonsForButtonBar(Composite parent, SvnWizardDialog wizardDialog) { } } SvnWizardCommitPage.java000066400000000000000000000756621203611042400433760ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/dialogspackage org.tigris.subversion.subclipse.ui.wizards.dialogs; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; import java.util.List; import org.eclipse.compare.CompareConfiguration; import org.eclipse.compare.CompareUI; import org.eclipse.compare.CompareViewerSwitchingPane; import org.eclipse.core.resources.IContainer; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.ControlContribution; import org.eclipse.jface.action.Separator; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTreeViewer; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.events.DisposeEvent; import org.eclipse.swt.events.DisposeListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.eclipse.team.core.synchronize.SyncInfoSet; import org.eclipse.team.internal.core.subscribers.ChangeSet; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.actions.SVNPluginAction; import org.tigris.subversion.subclipse.ui.comments.CommitCommentArea; import org.tigris.subversion.subclipse.ui.compare.SVNLocalCompareInput; import org.tigris.subversion.subclipse.ui.dialogs.ResourceWithStatusUtil; import org.tigris.subversion.subclipse.ui.settings.CommentProperties; import org.tigris.subversion.subclipse.ui.settings.ProjectProperties; import org.tigris.subversion.subclipse.ui.util.LinkList; import org.tigris.subversion.subclipse.ui.util.ResourceSelectionTree; import org.tigris.subversion.subclipse.ui.wizards.IClosableWizard; import org.tigris.subversion.svnclientadapter.SVNRevision; public class SvnWizardCommitPage extends SvnWizardDialogPage { public static final String COMMIT_WIZARD_DIALOG_SETTINGS = "CommitWizard"; //$NON-NLS-1$ public static final String SHOW_COMPARE = "ShowCompare"; //$NON-NLS-1$ private static final String H_WEIGHT_1 = "HWeight1"; //$NON-NLS-1$ private static final String H_WEIGHT_2 = "HWeight2"; //$NON-NLS-1$ private static final String V_WEIGHT_1 = "VWeight1"; //$NON-NLS-1$ private static final String V_WEIGHT_2 = "VWeight2"; //$NON-NLS-1$ private SashForm verticalSash; private SashForm horizontalSash; private boolean showCompare; private CommitCommentArea commitCommentArea; private IResource[] resourcesToCommit; private ProjectProperties projectProperties; private Object[] selectedResources; private Text issueText; private String issue; private Button keepLocksButton; private Button includeUnversionedButton; private Button showCompareButton; private boolean keepLocks; private boolean includeUnversioned; private IDialogSettings settings; private CommentProperties commentProperties; private SyncInfoSet syncInfoSet; private String removalError; private boolean fromSyncView; private Action includeUnversionedAction; private Action keepLocksAction; // private boolean sharing; private HashMap statusMap; private ResourceSelectionTree resourceSelectionTree; private CompareViewerSwitchingPane compareViewerPane; public SvnWizardCommitPage(IResource[] resourcesToCommit, String url, ProjectProperties projectProperties, HashMap statusMap, ChangeSet changeSet, boolean fromSyncView) { super("CommitDialog", null); //$NON-NLS-1$ this.fromSyncView = fromSyncView; if (fromSyncView) includeUnversioned = true; else includeUnversioned = SVNUIPlugin.getPlugin().getPreferenceStore().getBoolean(ISVNUIConstants.PREF_SELECT_UNADDED_RESOURCES_ON_COMMIT); this.resourcesToCommit = resourcesToCommit; // this.url = url; this.projectProperties = projectProperties; this.statusMap = statusMap; // this.changeSet = changeSet; settings = SVNUIPlugin.getPlugin().getDialogSettings(); if (changeSet == null) { if (url == null) setTitle(Policy.bind("CommitDialog.commitTo") + " " + Policy.bind("CommitDialog.multiple")); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ else setTitle(Policy.bind("CommitDialog.commitTo") + " " + url); //$NON-NLS-1$//$NON-NLS-2$ } else { setTitle(Policy.bind("CommitDialog.commitToChangeSet") + " " + changeSet.getName()); //$NON-NLS-1$//$NON-NLS-2$ } if (resourcesToCommit.length > 0) { try { commentProperties = CommentProperties.getCommentProperties(resourcesToCommit[0]); } catch (SVNException e) {} } commitCommentArea = new CommitCommentArea(null, null, commentProperties); commitCommentArea.setShowLabel(false); if ((commentProperties != null) && (commentProperties.getMinimumLogMessageSize() != 0)) { ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(canFinish()); } }; commitCommentArea.setModifyListener(modifyListener); } } public void createControls(Composite composite) { horizontalSash = new SashForm(composite, SWT.HORIZONTAL); horizontalSash.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); verticalSash = new SashForm(horizontalSash, SWT.VERTICAL); //verticalSash.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); GridLayout gridLayout = new GridLayout(); gridLayout.marginHeight = 0; gridLayout.marginWidth = 0; verticalSash.setLayout(gridLayout); verticalSash.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite cTop = new Composite(verticalSash, SWT.NULL); GridLayout topLayout = new GridLayout(); topLayout.marginHeight = 0; topLayout.marginWidth = 0; cTop.setLayout(topLayout); cTop.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite cBottom1 = new Composite(verticalSash, SWT.NULL); GridLayout bottom1Layout = new GridLayout(); bottom1Layout.marginHeight = 0; bottom1Layout.marginWidth = 0; cBottom1.setLayout(bottom1Layout); cBottom1.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite cBottom2 = new Composite(cBottom1, SWT.NULL); GridLayout bottom2Layout = new GridLayout(); bottom2Layout.marginHeight = 0; bottom2Layout.marginWidth = 0; cBottom2.setLayout(bottom2Layout); cBottom2.setLayoutData(new GridData(GridData.FILL_BOTH)); try { int[] weights = new int[2]; weights[0] = settings.getInt("CommitDialog.weights.0"); //$NON-NLS-1$ weights[1] = settings.getInt("CommitDialog.weights.1"); //$NON-NLS-1$ verticalSash.setWeights(weights); } catch (Exception e) { verticalSash.setWeights(new int[] {5, 4}); } verticalSash.addDisposeListener(new DisposeListener() { public void widgetDisposed(DisposeEvent e) { int[] weights = verticalSash.getWeights(); for (int i = 0; i < weights.length; i++) settings.put("CommitDialog.weights." + i, weights[i]); //$NON-NLS-1$ } }); if (projectProperties != null) { if (projectProperties.getMessage() != null) { addBugtrackingArea(cTop); } } commitCommentArea.createArea(cTop); commitCommentArea.addPropertyChangeListener(new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { if (event.getProperty() == CommitCommentArea.OK_REQUESTED && canFinish()) { IClosableWizard wizard = (IClosableWizard)getWizard(); wizard.finishAndClose(); } } }); addResourcesArea(cBottom2); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.COMMIT_DIALOG); setPageComplete(canFinish()); compareViewerPane = new CompareViewerSwitchingPane(horizontalSash, SWT.BORDER | SWT.FLAT) { protected Viewer getViewer(Viewer oldViewer, Object input) { CompareConfiguration cc = new CompareConfiguration(); cc.setLeftEditable(false); cc.setRightEditable(false); return CompareUI.findContentViewer(oldViewer, input, this, cc); } }; compareViewerPane.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true)); IDialogSettings section = settings.getSection(COMMIT_WIZARD_DIALOG_SETTINGS); showCompare = section == null ? false : section.getBoolean(SHOW_COMPARE); int vWeight1 = 50; int vWeight2 = 50; if (section != null) { try { vWeight1 = section.getInt(V_WEIGHT_1); vWeight2 = section.getInt(V_WEIGHT_2); } catch (NumberFormatException e) { } } int hWeight1 = 35; int hWeight2 = 65; if (section != null) { try { hWeight1 = section.getInt(H_WEIGHT_1); hWeight2 = section.getInt(H_WEIGHT_2); } catch (NumberFormatException e) { } } if (!showCompare) { horizontalSash.setMaximizedControl(verticalSash); } else { showCompareButton.setSelection(true); } verticalSash.setWeights(new int[] {vWeight1, vWeight2}); horizontalSash.setWeights(new int[] {hWeight1, hWeight2}); } public void updatePreference( boolean includeUnversioned ) { SVNUIPlugin.getPlugin().getPreferenceStore().setValue(ISVNUIConstants.PREF_SELECT_UNADDED_RESOURCES_ON_COMMIT, includeUnversioned); } private void addResourcesArea(Composite composite) { // get the toolbar actions from any contributing plug-in final SVNPluginAction[] toolbarActions = SVNUIPlugin.getCommitDialogToolBarActions(); final SVNPluginAction[] alternateCompareActions = SVNUIPlugin.getCommitDialogCompareActions(); ResourceSelectionTree.IToolbarControlCreator toolbarControlCreator = new ResourceSelectionTree.IToolbarControlCreator() { public void createToolbarControls(ToolBarManager toolbarManager) { toolbarManager.add(new ControlContribution("ignoreUnversioned") { //$NON-NLS-1$ protected Control createControl(Composite parent) { includeUnversionedButton = new Button(parent, SWT.CHECK); includeUnversionedButton.setText(Policy.bind("CommitDialog.includeUnversioned")); //$NON-NLS-1$ includeUnversionedButton.setSelection(includeUnversioned); includeUnversionedButton.addSelectionListener( new SelectionListener(){ public void widgetSelected(SelectionEvent e) { includeUnversioned = includeUnversionedButton.getSelection(); includeUnversionedAction.setChecked(includeUnversioned); toggleIncludeUnversioned(); } public void widgetDefaultSelected(SelectionEvent e) { } } ); return includeUnversionedButton; } }); toolbarManager.add(new ControlContribution("keepLocks") { protected Control createControl(Composite parent) { keepLocksButton = new Button(parent, SWT.CHECK); keepLocksButton.setText(Policy.bind("CommitDialog.keepLocks")); //$NON-NLS-1$ keepLocksButton.addSelectionListener(new SelectionListener() { public void widgetSelected(SelectionEvent e) { keepLocks = keepLocksButton.getSelection(); keepLocksAction.setChecked(keepLocksButton.getSelection()); } public void widgetDefaultSelected(SelectionEvent e) {} }); return keepLocksButton; } }); toolbarManager.add(new Separator()); toolbarManager.add(new ControlContribution("showCompare") { protected Control createControl(Composite parent) { showCompareButton = new Button(parent, SWT.TOGGLE | SWT.FLAT); showCompareButton.setImage(SVNUIPlugin.getImage(ISVNUIConstants.IMG_SYNCPANE)); //$NON-NLS-1$ showCompareButton.setToolTipText(Policy.bind("CommitDialog.showCompare")); showCompareButton.setSelection(showCompare); showCompareButton.addSelectionListener( new SelectionListener(){ public void widgetSelected(SelectionEvent e) { showComparePane(!showCompare); if (showCompare) { IStructuredSelection selection = (IStructuredSelection)resourceSelectionTree.getTreeViewer().getSelection(); if (!selection.isEmpty()) { Object sel0 = selection.getFirstElement(); if (sel0 instanceof IFile) { final ISVNLocalResource localResource= SVNWorkspaceRoot.getSVNResourceFor((IFile)sel0); try { // if any alternate compare actions are defined from the extension point // then call those actions instead of showing the default compare dialog if (alternateCompareActions.length > 0) { StructuredSelection localResourceSelection = new StructuredSelection(localResource); for (int i = 0; i < alternateCompareActions.length; i++) { // make sure the selection is up to date alternateCompareActions[i].selectionChanged(localResourceSelection); alternateCompareActions[i].run(); } } else { setCompareInput(new SVNLocalCompareInput(localResource, SVNRevision.BASE, true)); } } catch (Exception e1) { } } } } } public void widgetDefaultSelected(SelectionEvent e) { } } ); return showCompareButton; } }); // add any contributing actions from the extension point if (toolbarActions.length > 0) { toolbarManager.add(new Separator()); for (int i = 0; i < toolbarActions.length; i++) { SVNPluginAction action = toolbarActions[i]; toolbarManager.add(action); } } } public int getControlCount() { return 1; } }; resourceSelectionTree = new ResourceSelectionTree(composite, SWT.NONE, Policy.bind("GenerateSVNDiff.Changes"), resourcesToCommit, statusMap, null, true, toolbarControlCreator, syncInfoSet); //$NON-NLS-1$ if (!resourceSelectionTree.showIncludeUnversionedButton()) includeUnversionedButton.setVisible(false); resourceSelectionTree.setCustomOptions(getCustomOptions()); resourceSelectionTree.setRemoveFromViewValidator(new ResourceSelectionTree.IRemoveFromViewValidator() { public boolean canRemove(ArrayList resourceList, IStructuredSelection selection) { return removalOk(resourceList, selection); } public String getErrorMessage() { return removalError; // return Policy.bind("CommitDialog.unselectedPropChangeChildren"); //$NON-NLS-1$ } }); resourceSelectionTree.getTreeViewer().getTree().addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { selectedResources = resourceSelectionTree.getSelectedResources(); // need to update the toolbar actions too - but we use the tree viewer's selection IStructuredSelection selection = (IStructuredSelection)resourceSelectionTree.getTreeViewer().getSelection(); if (toolbarActions.length > 0) { for (int i = 0; i < toolbarActions.length; i++) { SVNPluginAction action = toolbarActions[i]; action.selectionChanged(selection); } } if (showCompare) { Object sel0 = selection.getFirstElement(); if (sel0 instanceof IFile) { final ISVNLocalResource localResource= SVNWorkspaceRoot.getSVNResourceFor((IFile)sel0); try { // if any alternate compare actions are defined from the extension point // then call those actions instead of showing the default compare dialog if (alternateCompareActions.length > 0) { StructuredSelection localResourceSelection = new StructuredSelection(localResource); for (int i = 0; i < alternateCompareActions.length; i++) { // make sure the selection is up to date alternateCompareActions[i].selectionChanged(localResourceSelection); alternateCompareActions[i].run(); } } else { setCompareInput(new SVNLocalCompareInput(localResource, SVNRevision.BASE, true)); } } catch (Exception e1) { } } } } }); ((CheckboxTreeViewer)resourceSelectionTree.getTreeViewer()).addCheckStateListener(new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent event) { selectedResources = resourceSelectionTree.getSelectedResources(); } }); resourceSelectionTree.getTreeViewer().addDoubleClickListener(new IDoubleClickListener(){ public void doubleClick(DoubleClickEvent event) { IStructuredSelection sel = (IStructuredSelection)event.getSelection(); Object sel0 = sel.getFirstElement(); if (sel0 instanceof IFile) { final ISVNLocalResource localResource= SVNWorkspaceRoot.getSVNResourceFor((IFile)sel0); try { // if any alternate compare actions are defined from the extension point // then call those actions instead of showing the default compare dialog if (alternateCompareActions.length > 0) { StructuredSelection selection = new StructuredSelection(localResource); for (int i = 0; i < alternateCompareActions.length; i++) { // make sure the selection is up to date alternateCompareActions[i].selectionChanged(selection); alternateCompareActions[i].run(); } } else { setCompareInput(new SVNLocalCompareInput(localResource, SVNRevision.BASE, true)); showComparePane(true); showCompareButton.setSelection(true); } } catch (Exception e1) { } } } }); if( !includeUnversioned ) { resourceSelectionTree.removeUnversioned(); } selectedResources = resourceSelectionTree.getSelectedResources(); setPageComplete(canFinish()); } private void toggleIncludeUnversioned() { if( !includeUnversioned ) { resourceSelectionTree.removeUnversioned(); } else { resourceSelectionTree.addUnversioned(); } selectedResources = resourceSelectionTree.getSelectedResources(); setPageComplete(canFinish()); if (!fromSyncView) updatePreference(includeUnversioned); } private Action[] getCustomOptions() { List customOptions = new ArrayList(); if (resourceSelectionTree.showIncludeUnversionedButton()) { includeUnversionedAction = new Action(Policy.bind("CommitDialog.includeUnversioned"), SWT.TOGGLE) { public void run() { includeUnversioned = !includeUnversioned; if (includeUnversionedButton.isVisible()) { includeUnversionedButton.setSelection(includeUnversioned); } toggleIncludeUnversioned(); } }; includeUnversionedAction.setChecked(includeUnversioned); customOptions.add(includeUnversionedAction); } keepLocksAction = new Action(Policy.bind("CommitDialog.keepLocks"), SWT.TOGGLE) { public void run() { keepLocks = !keepLocks; if (keepLocksButton.isVisible()) { keepLocksButton.setSelection(keepLocks); } } }; customOptions.add(keepLocksAction); Action[] customOptionArray = new Action[customOptions.size()]; customOptions.toArray(customOptionArray); return customOptionArray; } private void addBugtrackingArea(Composite composite) { Composite bugtrackingComposite = new Composite(composite, SWT.NULL); GridLayout bugtrackingLayout = new GridLayout(); bugtrackingLayout.numColumns = 2; bugtrackingComposite.setLayout(bugtrackingLayout); Label label = new Label(bugtrackingComposite, SWT.NONE); label.setText(projectProperties.getLabel()); issueText = new Text(bugtrackingComposite, SWT.BORDER); GridData data = new GridData(); data.widthHint = 150; issueText.setLayoutData(data); } public boolean performCancel() { return true; } public boolean performFinish() { if (confirmUserData() == false) { return false; } selectedResources = resourceSelectionTree.getSelectedResources(); int[] hWeights = horizontalSash.getWeights(); int[] vWeights = verticalSash.getWeights(); IDialogSettings section = settings.getSection(COMMIT_WIZARD_DIALOG_SETTINGS); if (section == null) section= settings.addNewSection(COMMIT_WIZARD_DIALOG_SETTINGS); if (showCompare) { section.put(H_WEIGHT_1, hWeights[0]); section.put(H_WEIGHT_2, hWeights[1]); } section.put(V_WEIGHT_1, vWeights[0]); section.put(V_WEIGHT_2, vWeights[1]); section.put(SHOW_COMPARE, showCompare); return true; } private boolean confirmUserData() { if (projectProperties != null) { int issueCount = 0; if (projectProperties.getMessage() != null) { issue = issueText.getText().trim(); if (issue.length() > 0) { String issueError = projectProperties.validateIssue(issue); if (issueError != null) { MessageDialog.openError(getShell(), Policy.bind("CommitDialog.title"), issueError); //$NON-NLS-1$ issueText.selectAll(); issueText.setFocus(); return false; } else { issueCount++; } } } if (projectProperties.getLogregex() != null) { try { LinkList linkList = projectProperties.getLinkList(commitCommentArea.getComment()); String[] urls = linkList.getUrls(); issueCount += urls.length; } catch (Exception e) { handle(e, null, null); } } if(projectProperties.isWarnIfNoIssue()) { if (issueCount == 0) { if ((projectProperties.getMessage() != null) && (projectProperties.getLogregex() == null)) { if (!MessageDialog.openQuestion(getShell(), Policy.bind("CommitDialog.title"), Policy.bind("CommitDialog.0", projectProperties.getLabel()))) { //$NON-NLS-1$ //$NON-NLS-2$ issueText.setFocus(); return false; //$NON-NLS-1$ } } else if ((projectProperties.getMessage() == null) && (projectProperties.getLogregex() != null)) { if (!MessageDialog.openQuestion(getShell(), Policy.bind("CommitDialog.title"), Policy.bind("CommitDialog.1", projectProperties.getLabel()))) { //$NON-NLS-1$ //$NON-NLS-2$ commitCommentArea.setFocus(); return false; //$NON-NLS-1$ } } else if ((projectProperties.getMessage() != null) && (projectProperties.getLogregex() != null)) { if (!MessageDialog.openQuestion(getShell(), Policy.bind("CommitDialog.title"), Policy.bind("CommitDialog.2", projectProperties.getLabel()))) { //$NON-NLS-1$ //$NON-NLS-2$ commitCommentArea.setFocus(); return false; //$NON-NLS-1$ } } } } } return true; } private void setCompareInput(final SVNLocalCompareInput input) { try { input.run(null); } catch (Exception e) { e.printStackTrace(); } compareViewerPane.setInput(input.getCompareResult()); } public void showComparePane(boolean showCompare) { this.showCompare = showCompare; if (showCompare) { horizontalSash.setMaximizedControl(null); } else { horizontalSash.setMaximizedControl(verticalSash); } } private boolean removalOk(ArrayList resourceList, IStructuredSelection selection) { ArrayList clonedList = (ArrayList)resourceList.clone(); List deletedFolders = new ArrayList(); Iterator iter = selection.iterator(); while (iter.hasNext()) clonedList.remove(iter.next()); ArrayList folderPropertyChanges = new ArrayList(); boolean folderDeletionSelected = false; iter = clonedList.iterator(); while (iter.hasNext()) { IResource resource = (IResource)iter.next(); if (resource instanceof IContainer) { if (ResourceWithStatusUtil.getStatus(resource).equals(Policy.bind("CommitDialog.deleted"))) { //$NON-NLS-1$ folderDeletionSelected = true; deletedFolders.add(resource); } String propertyStatus = ResourceWithStatusUtil.getPropertyStatus(resource); if (propertyStatus != null && propertyStatus.length() > 0) folderPropertyChanges.add(resource); } } if (folderDeletionSelected) { iter = selection.iterator(); while (iter.hasNext()) { IResource resource = (IResource)iter.next(); Iterator iter2 = deletedFolders.iterator(); while (iter2.hasNext()) { IContainer deletedFolder = (IContainer)iter2.next(); if (isChild(resource, deletedFolder)) { removalError = Policy.bind("CommitDialog.parentDeleted"); //$NON-NLS-1$ return false; } } } } if (!folderDeletionSelected || folderPropertyChanges.size() == 0) return true; boolean unselectedPropChangeChildren = false; iter = folderPropertyChanges.iterator(); outer: while (iter.hasNext()) { IContainer container = (IContainer)iter.next(); for (int i = 0; i < resourcesToCommit.length; i++) { if (!clonedList.contains(resourcesToCommit[i])) { if (isChild(resourcesToCommit[i], container)) { unselectedPropChangeChildren = true; removalError = Policy.bind("CommitDialog.unselectedPropChangeChildren"); //$NON-NLS-1$ break outer; } } } } return !unselectedPropChangeChildren; } // private boolean checkForUnselectedPropChangeChildren() { // if (selectedResources == null) return true; // ArrayList folderPropertyChanges = new ArrayList(); // boolean folderDeletionSelected = false; // for (int i = 0; i < selectedResources.length; i++) { // IResource resource = (IResource)selectedResources[i]; // if (resource instanceof IContainer) { // if (ResourceWithStatusUtil.getStatus(resource).equals(Policy.bind("CommitDialog.deleted"))) //$NON-NLS-1$ // folderDeletionSelected = true; // String propertyStatus = ResourceWithStatusUtil.getPropertyStatus(resource); // if (propertyStatus != null && propertyStatus.length() > 0) // folderPropertyChanges.add(resource); // } // } // boolean unselectedPropChangeChildren = false; // if (folderDeletionSelected) { // Iterator iter = folderPropertyChanges.iterator(); // whileLoop: // while (iter.hasNext()) { // IContainer container = (IContainer)iter.next(); // TableItem[] items = listViewer.getTable().getItems(); // for (int i = 0; i < items.length; i++) { // if (!items[i].getChecked()) { // IResource resource = (IResource)items[i].getData(); // if (isChild(resource, container)) { // unselectedPropChangeChildren = true; // break whileLoop; // } // } // } // } // } // if (unselectedPropChangeChildren) { // MessageDialog.openError(getShell(), Policy.bind("CommitDialog.title"), Policy.bind("CommitDialog.unselectedPropChangeChildren")); //$NON-NLS-1$ // return false; // } // return true; // } private boolean isChild(IResource resource, IContainer folder) { IContainer container = resource.getParent(); while (container != null) { if (container.getFullPath().toString().equals(folder.getFullPath().toString())) return true; container = container.getParent(); } return false; } public void setMessage() { setMessage(Policy.bind("CommitDialog.message")); //$NON-NLS-1$ } private boolean canFinish() { selectedResources = resourceSelectionTree.getSelectedResources(); if( selectedResources.length == 0 ) { return false; } if (commentProperties == null) return true; else return commitCommentArea.getCommentLength() >= commentProperties .getMinimumLogMessageSize(); } public String getComment() { String comment = null; if ((projectProperties != null) && (issue != null) && (issue.length() > 0)) { if (projectProperties.isAppend()) comment = commitCommentArea.getComment() + "\n" + projectProperties.getResolvedMessage(issue) + "\n"; //$NON-NLS-1$ //$NON-NLS-2$ else comment = projectProperties.getResolvedMessage(issue) + "\n" + commitCommentArea.getComment(); //$NON-NLS-1$ } else comment = commitCommentArea.getComment(); commitCommentArea.addComment(commitCommentArea.getComment()); return comment; } public IResource[] getSelectedResources() { if (selectedResources == null) { return resourcesToCommit; } else { List result = Arrays.asList(selectedResources); return (IResource[]) result.toArray(new IResource[result.size()]); } } public boolean isKeepLocks() { return keepLocks; } public void setComment(String proposedComment) { commitCommentArea.setProposedComment(proposedComment); } // public void setSharing(boolean sharing) { // this.sharing = sharing; // } public void saveSettings() { } public String getWindowTitle() { return Policy.bind("CommitDialog.title"); //$NON-NLS-1$ } public void setSyncInfoSet(SyncInfoSet syncInfoSet) { this.syncInfoSet = syncInfoSet; } public void createButtonsForButtonBar(Composite parent, SvnWizardDialog wizardDialog) { } protected void handle(Exception exception, String title, String message) { SVNUIPlugin.openError(getShell(), title, message, exception, SVNUIPlugin.LOG_NONTEAM_EXCEPTIONS); } } SvnWizardCompareMultipleResourcesWithBranchTagPage.java000066400000000000000000000374771203611042400515530ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/dialogspackage org.tigris.subversion.subclipse.ui.wizards.dialogs; import java.net.MalformedURLException; import java.text.ParseException; import java.util.ArrayList; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ColumnLayoutData; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.DecoratingLabelProvider; import org.eclipse.jface.viewers.ILabelDecorator; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.dialogs.ChooseUrlDialog; import org.tigris.subversion.subclipse.ui.dialogs.HistoryDialog; import org.tigris.subversion.subclipse.ui.util.UrlCombo; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class SvnWizardCompareMultipleResourcesWithBranchTagPage extends SvnWizardDialogPage { private static final int REVISION_WIDTH_HINT = 40; private IResource[] resources; private UrlCombo urlCombo; private Text revisionText; private Button logButton; private Button headButton; private Table table; private TableViewer viewer; private SVNUrl[] urls; private SVNRevision revision; private String[] urlStrings; private String commonRoot; private CompareResource[] compareResources; private long revisionNumber; private String[] columnHeaders = {Policy.bind("SwitchDialog.resources")}; //$NON-NLS-1$ private ColumnLayoutData columnLayouts[] = { new ColumnWeightData(100, 100, true)}; public SvnWizardCompareMultipleResourcesWithBranchTagPage(IResource[] resources) { this("SvnWizardCompareMultipleResourcesWithBranchTagPage", resources); //$NON-NLS-1$ } public SvnWizardCompareMultipleResourcesWithBranchTagPage(String name, IResource[] resources) { super(name, Policy.bind("SvnWizardCompareMultipleResourcesWithBranchTagPage.0")); //$NON-NLS-1$ this.resources = resources; } public SvnWizardCompareMultipleResourcesWithBranchTagPage(IResource[] resources, long revisionNumber) { this(resources); this.revisionNumber = revisionNumber; } public void createControls(Composite parent) { Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 3; layout.marginHeight = 0; layout.marginWidth = 0; composite.setLayout(layout); GridData data = new GridData(GridData.FILL_BOTH); composite.setLayoutData(data); Label urlLabel = new Label(composite, SWT.NONE); urlLabel.setText(Policy.bind("SwitchDialog.url")); //$NON-NLS-1$ urlCombo = new UrlCombo(composite, SWT.NONE); urlCombo.init(resources[0].getProject().getName()); urlCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); commonRoot = getCommonRoot(); if (commonRoot != null) urlCombo.setText(commonRoot); urlCombo.getCombo().addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(canFinish()); } }); Button browseButton = new Button(composite, SWT.PUSH); browseButton.setText(Policy.bind("SwitchDialog.browse")); //$NON-NLS-1$ browseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { ChooseUrlDialog dialog = new ChooseUrlDialog(getShell(), resources[0]); dialog.setIncludeBranchesAndTags(resources.length == 1); if ((dialog.open() == ChooseUrlDialog.OK) && (dialog.getUrl() != null)) { urlCombo.setText(dialog.getUrl()); setPageComplete(canFinish()); } } }); final Composite revisionGroup = new Composite(composite, SWT.NULL); GridLayout revisionLayout = new GridLayout(); revisionLayout.numColumns = 3; revisionLayout.marginWidth = 0; revisionLayout.marginHeight = 0; revisionGroup.setLayout(revisionLayout); data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalSpan = 3; revisionGroup.setLayoutData(data); headButton = new Button(revisionGroup, SWT.CHECK); headButton.setText(Policy.bind("SvnWizardCompareMultipleResourcesWithBranchTagPage.1")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 3; headButton.setLayoutData(data); Label revisionLabel = new Label(revisionGroup, SWT.NONE); revisionLabel.setText(Policy.bind("SvnWizardSwitchPage.revision")); //$NON-NLS-1$ revisionText = new Text(revisionGroup, SWT.BORDER); data = new GridData(); data.widthHint = REVISION_WIDTH_HINT; revisionText.setLayoutData(data); if (revisionNumber == 0) { headButton.setSelection(true); revisionText.setEnabled(false); } else { revisionText.setText("" + revisionNumber); //$NON-NLS-1$ } revisionText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(canFinish()); } }); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; revisionText.addFocusListener(focusListener); logButton = new Button(revisionGroup, SWT.PUSH); logButton.setText(Policy.bind("MergeDialog.showLog")); //$NON-NLS-1$ logButton.setEnabled(false); logButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { showLog(); } }); SelectionListener listener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { revisionText.setEnabled(!headButton.getSelection()); logButton.setEnabled(!headButton.getSelection()); setPageComplete(canFinish()); if (!headButton.getSelection()) { revisionText.selectAll(); revisionText.setFocus(); } } }; headButton.addSelectionListener(listener); if (resources.length > 1) { table = new Table(composite, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); table.setLinesVisible(false); table.setHeaderVisible(true); data = new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL); data.horizontalSpan = 3; table.setLayoutData(data); TableLayout tableLayout = new TableLayout(); table.setLayout(tableLayout); viewer = new TableViewer(table); viewer.setContentProvider(new CompareContentProvider()); ILabelDecorator decorator = PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator(); viewer.setLabelProvider(new TableDecoratingLabelProvider(new CompareLabelProvider(), decorator)); for (int i = 0; i < columnHeaders.length; i++) { tableLayout.addColumnData(columnLayouts[i]); TableColumn tc = new TableColumn(table, SWT.NONE,i); tc.setResizable(columnLayouts[i].resizable); tc.setText(columnHeaders[i]); } viewer.setInput(this); urlCombo.getCombo().addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { viewer.refresh(); } }); } setPageComplete(canFinish()); } public String getWindowTitle() { return Policy.bind(Policy.bind("SvnWizardCompareMultipleResourcesWithBranchTagPage.0")); //$NON-NLS-1$ } public boolean performCancel() { return true; } protected void showLog() { ISVNRemoteResource remoteResource = null; try { remoteResource = SVNWorkspaceRoot.getSVNResourceFor(resources[0]).getRepository().getRemoteFile(new SVNUrl(urlCombo.getText())); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.showLog"), e.toString()); //$NON-NLS-1$ return; } if (remoteResource == null) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.showLog"), Policy.bind("MergeDialog.urlError") + " " + urlCombo.getText()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ return; } HistoryDialog dialog = new HistoryDialog(getShell(), remoteResource); if (dialog.open() == HistoryDialog.CANCEL) return; ILogEntry[] selectedEntries = dialog.getSelectedLogEntries(); if (selectedEntries.length == 0) return; revisionText.setText(Long.toString(selectedEntries[selectedEntries.length - 1].getRevision().getNumber())); setPageComplete(canFinish()); } public boolean performFinish() { urlCombo.saveUrl(); try { if (urlStrings.length > 1) { urls = new SVNUrl[compareResources.length]; for (int i = 0; i < compareResources.length; i++) { if (urlCombo.getText().endsWith("/")) //$NON-NLS-1$ urls[i] = new SVNUrl(urlCombo.getText() + compareResources[i].getPartialPath()); else urls[i] = new SVNUrl(urlCombo.getText() + "/" + compareResources[i].getPartialPath()); //$NON-NLS-1$ } } else { urls = new SVNUrl[1]; urls[0] = new SVNUrl(urlCombo.getText()); } if (headButton.getSelection()) revision = SVNRevision.HEAD; else { try { revision = SVNRevision.getRevision(revisionText.getText().trim()); } catch (ParseException e1) { MessageDialog.openError(getShell(), Policy.bind("SvnWizardCompareMultipleResourcesWithBranchTagPage.0"), Policy.bind("SwitchDialog.invalid")); //$NON-NLS-1$ //$NON-NLS-2$ return false; } } } catch (MalformedURLException e) { MessageDialog.openError(getShell(), Policy.bind("SvnWizardCompareMultipleResourcesWithBranchTagPage.0"), e.getMessage()); //$NON-NLS-1$ return false; } return true; } public void saveSettings() { } public void setMessage() { setMessage(Policy.bind("SvnWizardCompareMultipleResourcesWithBranchTagPage.8")); //$NON-NLS-1$ } private boolean canFinish() { setErrorMessage(null); if (!(urlCombo.getText().length() > 0 && (headButton.getSelection() || (revisionText.getText().trim().length() > 0)))) return false; return true; } public SVNRevision getRevision() { return revision; } public SVNUrl[] getUrls() { return urls; } private String getCommonRoot() { ArrayList urlList = new ArrayList(); for (int i = 0; i < resources.length; i++) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resources[i]); try { String anUrl = svnResource.getStatus().getUrlString(); if (anUrl != null) urlList.add(anUrl); } catch (SVNException e1) {} } urlStrings = new String[urlList.size()]; urlList.toArray(urlStrings); if (urlStrings.length == 0) return null; String urlString = urlStrings[0]; if (urlStrings.length == 1) return urlString; String commonRoot = null; tag1: for (int i = 0; i < urlString.length(); i++) { String partialPath = urlString.substring(0, i+1); if (partialPath.endsWith("/")) { //$NON-NLS-1$ for (int j = 1; j < urlStrings.length; j++) { if (!urlStrings[j].startsWith(partialPath)) break tag1; } commonRoot = partialPath.substring(0, i); } } compareResources = new CompareResource[resources.length]; for (int i = 0; i < resources.length; i++) { compareResources[i] = new CompareResource(resources[i], urlStrings[i].substring(commonRoot.length() + 1)); } return commonRoot; } private class CompareResource implements IAdaptable { private IResource resource; private String partialPath; public CompareResource(IResource resource, String partialPath) { this.resource = resource; this.partialPath = partialPath; } public IResource getResource() { return resource; } public void setResource(IResource resource) { this.resource = resource; } public String getPartialPath() { return partialPath; } public void setPartialPath(String partialPath) { this.partialPath = partialPath; } public Object getAdapter(Class adapter) { if (IResource.class == adapter) return resource; return null; } } class CompareLabelProvider extends LabelProvider implements ITableLabelProvider { WorkbenchLabelProvider workbenchLabelProvider = new WorkbenchLabelProvider(); public String getColumnText(Object element, int columnIndex) { return getText(element); } public String getText(Object element) { CompareResource compareResource = (CompareResource)element; return compareResource.getPartialPath() + " [" + urlCombo.getText() + "/" + compareResource.getPartialPath() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } public Image getColumnImage(Object element, int columnIndex) { return getImage(element); } public Image getImage(Object element) { CompareResource compareResource = (CompareResource)element; return workbenchLabelProvider.getImage(compareResource.getResource()); } } class CompareContentProvider implements IStructuredContentProvider { public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } public Object[] getElements(Object obj) { return compareResources; } } class TableDecoratingLabelProvider extends DecoratingLabelProvider implements ITableLabelProvider { ITableLabelProvider provider; ILabelDecorator decorator; public TableDecoratingLabelProvider(ILabelProvider provider, ILabelDecorator decorator) { super(provider, decorator); this.provider = (ITableLabelProvider) provider; this.decorator = decorator; } public Image getColumnImage(Object element, int columnIndex) { Image image = provider.getColumnImage(element, columnIndex); if (decorator != null) { Image decorated = decorator.decorateImage(image, element); if (decorated != null) { return decorated; } } return image; } public String getColumnText(Object element, int columnIndex) { String text = provider.getColumnText(element, columnIndex); return text; } } public void createButtonsForButtonBar(Composite parent, SvnWizardDialog wizardDialog) { } }SvnWizardConfigureTagsPage.java000066400000000000000000000624061203611042400446760ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/dialogspackage org.tigris.subversion.subclipse.ui.wizards.dialogs; import java.util.ArrayList; import java.util.Arrays; import java.util.Iterator; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.Action; import org.eclipse.jface.action.IMenuListener; import org.eclipse.jface.action.IMenuManager; import org.eclipse.jface.action.MenuManager; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.IColorProvider; import org.eclipse.jface.viewers.IFontProvider; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Color; import org.eclipse.swt.graphics.Font; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Menu; import org.eclipse.swt.widgets.Text; import org.eclipse.swt.widgets.Tree; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.model.IWorkbenchAdapter; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.history.Alias; import org.tigris.subversion.subclipse.core.history.AliasManager; import org.tigris.subversion.subclipse.core.history.Branches; import org.tigris.subversion.subclipse.core.history.Tags; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.dialogs.ChooseUrlDialog; import org.tigris.subversion.subclipse.ui.repository.model.SVNModelElement; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.ISVNInfo; import org.tigris.subversion.svnclientadapter.SVNUrl; public class SvnWizardConfigureTagsPage extends SvnWizardDialogPage { private ISVNLocalResource[] svnResources; private ISVNClientAdapter svnClient; private Branches branches; private Tags tags; private TreeViewer treeViewer; private Action deleteAction; private Action addTagAction; private Action addBranchAction; private Group tagGroup; private Label revisionLabel; private Text revisionText; private Label nameLabel; private Text nameText; private Label pathLabel; private Text pathText; private Button browseButton; private Button branchButton; private Button applyButton; private Button deleteButton; private boolean updates = false; private boolean tagUpdatePending = false; private Alias previousAlias; private static final int LIST_HEIGHT_HINT = 250; private static final int LIST_WIDTH_HINT = 450; public SvnWizardConfigureTagsPage(ISVNLocalResource[] svnResources) { super("ConfigureTagsDialog", Policy.bind("ConfigureTagsDialog.title")); //$NON-NLS-1$ //$NON-NLS-2$ this.svnResources = svnResources; deleteAction = new DeleteAction(); deleteAction.setText(Policy.bind("ConfigureTagsDialog.delete")); //$NON-NLS-1$ addBranchAction = new AddBranchAction(); addBranchAction.setText(Policy.bind("ConfigureTagsDialog.addBranch")); //$NON-NLS-1$ addTagAction = new AddTagAction(); addTagAction.setText(Policy.bind("ConfigureTagsDialog.addTag")); //$NON-NLS-1$ } public void createButtonsForButtonBar(Composite parent, SvnWizardDialog wizardDialog) { applyButton = wizardDialog.createButton(parent, 2, Policy.bind("ConfigureTagsDialog.apply"), false); //$NON-NLS-1$ applyButton.setEnabled(false); applyButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { new UpdateAction().run(); } }); deleteButton = wizardDialog.createButton(parent, 3, Policy.bind("ConfigureTagsDialog.delete"), false); //$NON-NLS-1$ deleteButton.setEnabled(false); deleteButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { new DeleteAction().run(); } }); } public void createControls(Composite parent) { Composite composite = new Composite(parent, SWT.NULL); composite.setLayout(new GridLayout()); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite urlGroup = new Composite(composite, SWT.NONE); GridLayout urlLayout = new GridLayout(); urlLayout.numColumns = 2; urlGroup.setLayout(urlLayout); urlGroup.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); Label urlLabel = new Label(urlGroup, SWT.NONE); urlLabel.setText(Policy.bind("ConfigureTagsDialog.url")); //$NON-NLS-1$ Text urlText = new Text(urlGroup, SWT.BORDER); GridData data = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL); urlText.setLayoutData(data); urlText.setEditable(false); try { if (svnResources.length == 1) { urlText.setText(svnResources[0].getStatus().getUrlString()); } else { urlText.setText(Policy.bind("SvnWizardConfigureTagsPage.0")); //$NON-NLS-1$ } svnClient = svnResources[0].getRepository().getSVNClient(); } catch (SVNException e) {} getBranchesAndTags(); treeViewer = new TreeViewer(composite, SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL | SWT.MULTI); treeViewer.setContentProvider(new TagsContentProvider(svnResources[0].getResource())); treeViewer.setLabelProvider(new TagsLabelProvider()); treeViewer.setInput(svnResources[0]); data = new GridData(GridData.FILL_BOTH | GridData.GRAB_VERTICAL); data.heightHint = LIST_HEIGHT_HINT; data.widthHint = LIST_WIDTH_HINT; treeViewer.getControl().setLayoutData(data); tagGroup = new Group(composite, SWT.NONE); GridLayout tagLayout = new GridLayout(); tagLayout.numColumns = 3; tagGroup.setLayout(tagLayout); tagGroup.setLayoutData(new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); revisionLabel = new Label(tagGroup, SWT.NONE); revisionLabel.setText(Policy.bind("ConfigureTagsDialog.revision")); //$NON-NLS-1$ revisionText = new Text(tagGroup, SWT.BORDER); data = new GridData(); data.widthHint = 50; data.horizontalSpan = 2; revisionText.setLayoutData(data); nameLabel = new Label(tagGroup, SWT.NONE); nameLabel.setText(Policy.bind("ConfigureTagsDialog.name")); //$NON-NLS-1$ nameText = new Text(tagGroup, SWT.BORDER); data = new GridData(); data.widthHint = 300; data.horizontalSpan = 2; nameText.setLayoutData(data); pathLabel = new Label(tagGroup, SWT.NONE); pathLabel.setText(Policy.bind("ConfigureTagsDialog.path")); //$NON-NLS-1$ pathText = new Text(tagGroup, SWT.BORDER); data = new GridData(); data.widthHint = 300; pathText.setLayoutData(data); browseButton = new Button(tagGroup, SWT.PUSH); browseButton.setText(Policy.bind("ConfigureTagsDialog.browse")); //$NON-NLS-1$ browseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { ChooseUrlDialog dialog = new ChooseUrlDialog(getShell(), svnResources[0].getResource()); dialog.setIncludeBranchesAndTags(false); dialog.setFoldersOnly(true); if (dialog.open() == ChooseUrlDialog.CANCEL) return; final String url = dialog.getUrl(); if (url != null) { nameText.setText(dialog.getName()); BusyIndicator.showWhile(Display.getCurrent(), new Runnable() { public void run() { try { SVNUrl svnUrl = new SVNUrl(url); ISVNInfo svnInfo = svnClient.getInfo(svnUrl); revisionText.setText(svnInfo.getLastChangedRevision().toString()); String repositoryUrl = svnResources[0].getRepository().getUrl().toString(); pathText.setText(url.substring(repositoryUrl.length())); } catch (Exception e1) { MessageDialog.openError(getShell(), Policy.bind("ConfigureTagsDialog.title"), e1.getMessage()); //$NON-NLS-1$ } } }); } } }); branchButton = new Button(tagGroup, SWT.CHECK); branchButton.setText(Policy.bind("ConfigureTagsDialog.branch")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 3; branchButton.setLayoutData(data); setTagGroupEnablement(false); treeViewer.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { if (tagUpdatePending) { if (MessageDialog.openQuestion(getShell(), Policy.bind("ConfigureTagsDialog.title"), //$NON-NLS-1$ Policy.bind("ConfigureTagsDialog.pendingUpdate"))) { //$NON-NLS-1$ new UpdateAction(previousAlias).run(); } tagUpdatePending = false; } applyButton.setEnabled(false); IStructuredSelection selection = (IStructuredSelection)treeViewer.getSelection(); boolean deleteEnabled = false; Iterator iter = selection.iterator(); while (iter.hasNext()) { if (iter.next() instanceof Alias) { deleteEnabled = true; break; } } deleteButton.setEnabled(deleteEnabled); if (selection.size() == 1 && selection.getFirstElement() instanceof Alias) { Alias alias = (Alias)selection.getFirstElement(); previousAlias = alias; if (alias.isBranch()) { tagGroup.setText(Policy.bind("ConfigureTagsDialog.branchHeader")); //$NON-NLS-1$ branchButton.setSelection(true); } else { tagGroup.setText(Policy.bind("ConfigureTagsDialog.tagHeader")); //$NON-NLS-1$ branchButton.setSelection(false); } revisionText.setText(Integer.toString(alias.getRevision())); nameText.setText(alias.getName()); if (alias.getRelativePath() == null) pathText.setText(""); //$NON-NLS-1$ else pathText.setText(alias.getRelativePath()); setTagGroupEnablement(true); } else { tagGroup.setText(""); //$NON-NLS-1$ revisionText.setText(""); //$NON-NLS-1$ nameText.setText(""); //$NON-NLS-1$ pathText.setText(""); //$NON-NLS-1$ branchButton.setSelection(false); setTagGroupEnablement(false); } } }); ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { applyButton.setEnabled(canUpdate()); if (applyButton.isEnabled()) tagUpdatePending = true; else tagUpdatePending = false; } }; revisionText.addModifyListener(modifyListener); nameText.addModifyListener(modifyListener); pathText.addModifyListener(modifyListener); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; revisionText.addFocusListener(focusListener); nameText.addFocusListener(focusListener); pathText.addFocusListener(focusListener); branchButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { applyButton.setEnabled(canUpdate()); if (applyButton.isEnabled()) tagUpdatePending = true; else tagUpdatePending = false; } }); MenuManager menuMgr = new MenuManager(); Tree tree = treeViewer.getTree(); Menu menu = menuMgr.createContextMenu(tree); menuMgr.addMenuListener(new IMenuListener() { public void menuAboutToShow(IMenuManager manager) { IStructuredSelection selection = (IStructuredSelection)treeViewer.getSelection(); Iterator iter = selection.iterator(); boolean deleteAdded = false; boolean addAdded = false; while (iter.hasNext()) { Object selectedItem = iter.next(); if (!deleteAdded && selectedItem instanceof Alias) { manager.add(deleteAction); deleteAdded = true; } if (!addAdded && selectedItem instanceof ISVNRemoteFolder) { manager.add(addBranchAction); manager.add(addTagAction); addAdded = true; } if (deleteAdded && addAdded) break; } } }); menuMgr.setRemoveAllWhenShown(true); tree.setMenu(menu); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.CONFIGURE_TAGS_DIALOG); } public String getWindowTitle() { return Policy.bind("ConfigureTagsDialog.title"); //$NON-NLS-1$ } public boolean performCancel() { returnSVNClient(); if (updates) { if (!MessageDialog.openQuestion(getShell(), Policy.bind("ConfigureTagsDialog.title"), //$NON-NLS-1$ Policy.bind("ConfigureTagsDialog.confirmExit"))) return false; //$NON-NLS-1$ } return true; } public boolean performFinish() { returnSVNClient(); if (updates) { try { String propertyValue = getPropertyValue(); for (int i = 0; i < svnResources.length; i++) { svnResources[i].setSvnProperty("subclipse:tags", propertyValue, false); //$NON-NLS-1$ } } catch (SVNException e) { if (!e.operationInterrupted()) { MessageDialog.openError(getShell(), Policy.bind("ConfigureTagsDialog.title"), e.getMessage()); //$NON-NLS-1$ } return false; } } return true; } private void returnSVNClient() { if (svnClient != null) { svnResources[0].getRepository().returnSVNClient(svnClient); } } public void saveSettings() { } public void setMessage() { setMessage(Policy.bind("ConfigureTagsDialog.text")); //$NON-NLS-1$ } private void setTagGroupEnablement(boolean enable) { revisionLabel.setEnabled(enable); revisionText.setEnabled(enable); nameLabel.setEnabled(enable); nameText.setEnabled(enable); pathLabel.setEnabled(enable); pathText.setEnabled(enable); browseButton.setEnabled(enable); branchButton.setEnabled(enable); tagGroup.setEnabled(enable); } private boolean canUpdate() { if (revisionText.getText().trim().length() == 0 || nameText.getText().trim().length() == 0) return false; IStructuredSelection selection = (IStructuredSelection)treeViewer.getSelection(); Alias alias = (Alias)selection.getFirstElement(); if (revisionText.getText().trim().equals(Integer.toString(alias.getRevision())) && nameText.getText().trim().equals(alias.getName()) && pathText.getText().trim().equals(alias.getRelativePath()) && branchButton.getSelection() == alias.isBranch()) return false; return true; } private void getBranchesAndTags() { AliasManager aliasManager = new AliasManager(svnResources[0].getResource(), false); Alias[] branchAliases = aliasManager.getBranches(); branches = new Branches(branchAliases); Alias[] tagAliases = aliasManager.getTags(); tags = new Tags(tagAliases); } private String getPropertyValue() { StringBuffer propertyValue = new StringBuffer(); Alias[] branchAliases = branches.getBranches(); for (int i = 0; i < branchAliases.length; i++) { if (branchAliases[i].getRevision() > 0) { if (propertyValue.length() > 0) propertyValue.append("\n"); //$NON-NLS-1$ Alias branch = branchAliases[i]; propertyValue.append(branch.getRevision() + "," + branch.getName()); //$NON-NLS-1$ if (branch.getRelativePath() != null) propertyValue.append("," + branch.getRelativePath()); //$NON-NLS-1$ if (branch.isBranch()) propertyValue.append(",branch"); //$NON-NLS-1$ else propertyValue.append(",tag"); //$NON-NLS-1$ } } Alias[] tagAliases = tags.getTags(); for (int i = 0; i < tagAliases.length; i++) { if (tagAliases[i].getRevision() > 0) { if (propertyValue.length() > 0) propertyValue.append("\n"); //$NON-NLS-1$ Alias tag = tagAliases[i]; propertyValue.append(tag.getRevision() + "," + tag.getName()); //$NON-NLS-1$ if (tag.getRelativePath() != null) propertyValue.append("," + tag.getRelativePath()); //$NON-NLS-1$ if (tag.isBranch()) propertyValue.append(",branch"); //$NON-NLS-1$ else propertyValue.append(",tag"); //$NON-NLS-1$ } } return propertyValue.toString(); } class TagsContentProvider extends WorkbenchContentProvider { public TagsContentProvider(IResource resource) { super(); AliasManager tagManager = new AliasManager(resource); Alias[] branchAliases = tagManager.getBranches(); Alias[] tagAliases = tagManager.getTags(); branches = new Branches(branchAliases); tags = new Tags(tagAliases); } public boolean hasChildren(Object element) { if (element == null) { return false; } if (element instanceof Branches || element instanceof Tags) return true; if (element instanceof Alias) return false; if (element instanceof ISVNRepositoryLocation) return true; // the + box will always appear, but then disappear // if not needed after you first click on it. if (element instanceof ISVNRemoteResource) { return ((ISVNRemoteResource)element).isContainer(); } return super.hasChildren(element); } public Object[] getChildren(Object parentElement) { if (parentElement instanceof ISVNLocalResource) { Object[] rootChildren = new Object[3]; rootChildren[0] = ((ISVNLocalResource)parentElement).getRepository(); rootChildren[1] = branches; rootChildren[2] = tags; return rootChildren; } if (parentElement instanceof Branches) return ((Branches)parentElement).getBranches(); if (parentElement instanceof Tags) return ((Tags)parentElement).getTags(); IWorkbenchAdapter adapter = getAdapter(parentElement); if (adapter instanceof SVNModelElement) { Object[] children = ((SVNModelElement)adapter).getChildren(parentElement); ArrayList folderArray = new ArrayList(); for (int i = 0; i < children.length; i++) { if (children[i] instanceof ISVNRemoteFolder) folderArray.add(children[i]); } children = new Object[folderArray.size()]; folderArray.toArray(children); return children; } return super.getChildren(parentElement); } } class UpdateAction extends Action { private Alias previousAlias; public UpdateAction() { super(); } public UpdateAction(Alias alias) { this(); previousAlias = alias; } public void run() { updates = true; tagUpdatePending = false; boolean branchAttributeChanged = false; Alias alias = null; if (previousAlias == null) { IStructuredSelection selection = (IStructuredSelection)treeViewer.getSelection(); alias = (Alias)selection.getFirstElement(); } else alias = previousAlias; alias.setRevision(Integer.parseInt(revisionText.getText().trim())); alias.setName(nameText.getText().trim()); if (pathText.getText().trim().length() == 0) alias.setRelativePath(null); else alias.setRelativePath(pathText.getText().trim()); if (alias.isBranch() != branchButton.getSelection()) branchAttributeChanged = true; alias.setBranch(branchButton.getSelection()); if (branchAttributeChanged) { ArrayList branchArray = new ArrayList(); ArrayList tagArray = new ArrayList(); Alias[] branchAliases = branches.getBranches(); Alias[] tagAliases = tags.getTags(); for (int i = 0; i < branchAliases.length; i++) { if (branchAliases[i].isBranch()) branchArray.add(branchAliases[i]); else tagArray.add(branchAliases[i]); } for (int i = 0; i < tagAliases.length; i++) { if (tagAliases[i].isBranch()) branchArray.add(tagAliases[i]); else tagArray.add(tagAliases[i]); } branchAliases = new Alias[branchArray.size()]; tagAliases = new Alias[tagArray.size()]; branchArray.toArray(branchAliases); tagArray.toArray(tagAliases); Arrays.sort(branchAliases); Arrays.sort(tagAliases); branches.setBranches(branchAliases); tags.setTags(tagAliases); } treeViewer.refresh(); applyButton.setEnabled(false); } } class DeleteAction extends Action { public void run() { updates = true; IStructuredSelection selection = (IStructuredSelection)treeViewer.getSelection(); ArrayList branchArray = new ArrayList(); ArrayList tagArray = new ArrayList(); Alias[] branchAliases = branches.getBranches(); Alias[] tagAliases = tags.getTags(); for (int i = 0; i < branchAliases.length; i++) branchArray.add(branchAliases[i]); for (int i = 0; i < tagAliases.length; i++) tagArray.add(tagAliases[i]); Iterator iter = selection.iterator(); while (iter.hasNext()) { Object selectedItem = iter.next(); if (selectedItem instanceof Alias) { Alias alias = (Alias)selectedItem; if (alias.isBranch()) branchArray.remove(alias); else tagArray.remove(alias); } } branchAliases = new Alias[branchArray.size()]; branchArray.toArray(branchAliases); branches.setBranches(branchAliases); tagAliases = new Alias[tagArray.size()]; tagArray.toArray(tagAliases); tags.setTags(tagAliases); treeViewer.refresh(); } } class AddBranchAction extends Action { public void run() { updates = true; ArrayList branchArray = new ArrayList(); Alias[] branchAliases = branches.getBranches(); for (int i = 0; i < branchAliases.length; i++) branchArray.add(branchAliases[i]); IStructuredSelection selection = (IStructuredSelection)treeViewer.getSelection(); Iterator iter = selection.iterator(); while (iter.hasNext()) { Object selectedItem = iter.next(); if (selectedItem instanceof ISVNRemoteFolder) { ISVNRemoteFolder folder = (ISVNRemoteFolder)selectedItem; Alias newAlias = new Alias(); newAlias.setBranch(true); newAlias.setName(folder.getName()); String revNo = folder.getLastChangedRevision().toString(); int revision = Integer.parseInt(revNo); newAlias.setRevision(revision); newAlias.setUrl(folder.getUrl().toString()); String relativePath = folder.getUrl().toString().substring(folder.getRepository().getUrl().toString().length()); newAlias.setRelativePath(relativePath); branchArray.add(newAlias); } } branchAliases = new Alias[branchArray.size()]; branchArray.toArray(branchAliases); Arrays.sort(branchAliases); branches.setBranches(branchAliases); treeViewer.refresh(); } } class AddTagAction extends Action { public void run() { updates = true; ArrayList tagArray = new ArrayList(); Alias[] tagAliases = tags.getTags(); for (int i = 0; i < tagAliases.length; i++) tagArray.add(tagAliases[i]); IStructuredSelection selection = (IStructuredSelection)treeViewer.getSelection(); Iterator iter = selection.iterator(); while (iter.hasNext()) { Object selectedItem = iter.next(); if (selectedItem instanceof ISVNRemoteFolder) { ISVNRemoteFolder folder = (ISVNRemoteFolder)selectedItem; Alias newAlias = new Alias(); newAlias.setBranch(false); newAlias.setName(folder.getName()); String revNo = folder.getLastChangedRevision().toString(); int revision = Integer.parseInt(revNo); newAlias.setRevision(revision); newAlias.setUrl(folder.getUrl().toString()); String relativePath = folder.getUrl().toString().substring(folder.getRepository().getUrl().toString().length()); newAlias.setRelativePath(relativePath); tagArray.add(newAlias); } } tagAliases = new Alias[tagArray.size()]; tagArray.toArray(tagAliases); Arrays.sort(tagAliases); tags.setTags(tagAliases); treeViewer.refresh(); } } class TagsLabelProvider extends LabelProvider implements IColorProvider, IFontProvider{ private WorkbenchLabelProvider workbenchLabelProvider = new WorkbenchLabelProvider(); public Color getForeground(Object element) { return workbenchLabelProvider.getForeground(element); } public Color getBackground(Object element) { return workbenchLabelProvider.getBackground(element); } public Font getFont(Object element) { return workbenchLabelProvider.getFont(element); } public Image getImage(Object element) { if (element instanceof Branches) return SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_BRANCHES_CATEGORY).createImage(); if (element instanceof Tags) return SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_VERSIONS_CATEGORY).createImage(); if (element instanceof Alias) { if (((Alias)element).isBranch()) return SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_BRANCH).createImage(); else return SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_PROJECT_VERSION).createImage(); } return workbenchLabelProvider.getImage(element); } public String getText(Object element) { if (element instanceof Branches) return Policy.bind("ChooseUrlDialog.branches"); //$NON-NLS-1$ if (element instanceof Tags) return Policy.bind("ChooseUrlDialog.tags"); //$NON-NLS-1$ if (element instanceof Alias) return ((Alias)element).getName(); return workbenchLabelProvider.getText(element); } } } SvnWizardDialog.java000066400000000000000000000061711203611042400425350ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/dialogspackage org.tigris.subversion.subclipse.ui.wizards.dialogs; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.wizard.IWizard; import org.eclipse.swt.graphics.Point; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Shell; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.wizards.ClosableWizardDialog; public class SvnWizardDialog extends ClosableWizardDialog { public boolean yesNo; private IDialogSettings settings; private SvnWizardDialogPage wizardPage; public SvnWizardDialog(Shell parentShell, IWizard newWizard) { super(parentShell, newWizard); settings = SVNUIPlugin.getPlugin().getDialogSettings(); SvnWizard wizard = (SvnWizard)getWizard(); wizardPage = wizard.getSvnWizardDialogPage(); } public SvnWizardDialog(Shell parentShell, IWizard newWizard, boolean yesNo) { this(parentShell, newWizard); this.yesNo = yesNo; } protected void createButtonsForButtonBar(Composite parent) { wizardPage.createButtonsForButtonBar(parent, this); super.createButtonsForButtonBar(parent); if (yesNo) { Button cancelButton = getButton(IDialogConstants.CANCEL_ID); if (cancelButton != null) cancelButton.setText("No"); } } public Button createButton(Composite parent, int id, String label, boolean defaultButton) { String customLabel; if (id == IDialogConstants.FINISH_ID) { if (yesNo) customLabel = "Yes"; else customLabel = "OK"; } else customLabel = label; return super.createButton(parent, id, customLabel, defaultButton); } protected void cancelPressed() { saveLocation(); super.cancelPressed(); } public void finishPressed() { saveLocation(); super.finishPressed(); } protected void okPressed() { saveLocation(); super.okPressed(); } protected Point getInitialLocation(Point initialSize) { try { int x = settings.getInt(wizardPage.getName() + ".location.x"); //$NON-NLS-1$ int y = settings.getInt(wizardPage.getName() + ".location.y"); //$NON-NLS-1$ return new Point(x, y); } catch (NumberFormatException e) {} return super.getInitialLocation(initialSize); } protected Point getInitialSize() { try { int x = settings.getInt(wizardPage.getName() + ".size.x"); //$NON-NLS-1$ int y = settings.getInt(wizardPage.getName() + ".size.y"); //$NON-NLS-1$ return new Point(x, y); } catch (NumberFormatException e) {} return super.getInitialSize(); } protected void saveLocation() { int x = getShell().getLocation().x; int y = getShell().getLocation().y; settings.put(wizardPage.getName() + ".location.x", x); //$NON-NLS-1$ settings.put(wizardPage.getName() + ".location.y", y); //$NON-NLS-1$ x = getShell().getSize().x; y = getShell().getSize().y; settings.put(wizardPage.getName() + ".size.x", x); //$NON-NLS-1$ settings.put(wizardPage.getName() + ".size.y", y); //$NON-NLS-1$ wizardPage.saveSettings(); } }SvnWizardDialogPage.java000066400000000000000000000041031203611042400433230ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/dialogspackage org.tigris.subversion.subclipse.ui.wizards.dialogs; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; public abstract class SvnWizardDialogPage extends WizardPage { public SvnWizardDialogPage(String pageName, String title) { this(pageName, title, SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_SVN)); } public SvnWizardDialogPage(String pageName, String title, ImageDescriptor titleImage) { super(pageName, title, titleImage); } public void createControl(Composite parent) { Composite outerContainer = new Composite(parent,SWT.NONE); GridLayout outerLayout = new GridLayout(); outerLayout.numColumns = 1; outerLayout.marginHeight = 0; outerLayout.marginWidth = 0; outerContainer.setLayout(outerLayout); outerContainer.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); createControls(outerContainer); setMessage(); setControl(outerContainer); } public abstract void createControls(Composite outerContainer); public abstract void createButtonsForButtonBar(Composite parent, SvnWizardDialog wizardDialog); public abstract String getWindowTitle(); public abstract void setMessage(); public abstract boolean performFinish(); public abstract boolean performCancel(); public abstract void saveSettings(); protected static final int LABEL_WIDTH_HINT = 400; protected Label createWrappingLabel(Composite parent) { Label label = new Label(parent, SWT.LEFT | SWT.WRAP); GridData data = new GridData(); data.horizontalSpan = 1; data.horizontalAlignment = GridData.FILL; data.horizontalIndent = 0; data.grabExcessHorizontalSpace = true; data.widthHint = LABEL_WIDTH_HINT; label.setLayoutData(data); return label; } } SvnWizardLockPage.java000066400000000000000000000141761203611042400430270ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/dialogspackage org.tigris.subversion.subclipse.ui.wizards.dialogs; import java.util.HashMap; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.ControlContribution; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.util.IPropertyChangeListener; import org.eclipse.jface.util.PropertyChangeEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.SashForm; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.comments.CommitCommentArea; import org.tigris.subversion.subclipse.ui.settings.CommentProperties; import org.tigris.subversion.subclipse.ui.util.ResourceSelectionTree; import org.tigris.subversion.subclipse.ui.wizards.IClosableWizard; public class SvnWizardLockPage extends SvnWizardDialogPage { private CommitCommentArea commitCommentArea; private Button stealButton; private String comment; private boolean stealLock; private IResource[] files; private CommentProperties commentProperties; private ResourceSelectionTree resourceSelectionTree; public SvnWizardLockPage(IResource[] files) { super("LockDialog", Policy.bind("LockDialog.title")); //$NON-NLS-1$ /$NON-NLS-2$ this.files = files; if (files.length > 0) { try { commentProperties = CommentProperties.getCommentProperties(files[0]); commentProperties.setMinimumLogMessageSize(commentProperties.getMinimumLockMessageSize()); } catch (SVNException e) {} if (commentProperties != null) { commentProperties.setLogTemplate(null); } } commitCommentArea = new CommitCommentArea(null, null, commentProperties); //$NON-NLS-1$ commitCommentArea.setShowLabel(false); if ((commentProperties != null) && (commentProperties.getMinimumLockMessageSize() != 0)) { ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(canFinish()); } }; commitCommentArea.setModifyListener(modifyListener); } commitCommentArea.addPropertyChangeListener(new IPropertyChangeListener() { public void propertyChange(PropertyChangeEvent event) { if (event.getProperty() == CommitCommentArea.OK_REQUESTED && canFinish()) { IClosableWizard wizard = (IClosableWizard)getWizard(); wizard.finishAndClose(); } } }); } public void createControls(Composite composite) { SashForm sashForm = new SashForm(composite, SWT.VERTICAL); GridLayout gridLayout = new GridLayout(); gridLayout.marginHeight = 0; gridLayout.marginWidth = 0; sashForm.setLayout(gridLayout); sashForm.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite cTop = new Composite(sashForm, SWT.NULL); GridLayout topLayout = new GridLayout(); topLayout.marginHeight = 0; topLayout.marginWidth = 0; cTop.setLayout(topLayout); cTop.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite cBottom1 = new Composite(sashForm, SWT.NULL); GridLayout bottom1Layout = new GridLayout(); bottom1Layout.marginHeight = 0; bottom1Layout.marginWidth = 0; cBottom1.setLayout(bottom1Layout); cBottom1.setLayoutData(new GridData(GridData.FILL_BOTH)); Composite cBottom2 = new Composite(cBottom1, SWT.NULL); GridLayout bottom2Layout = new GridLayout(); bottom2Layout.marginHeight = 0; bottom2Layout.marginWidth = 0; cBottom2.setLayout(bottom2Layout); cBottom2.setLayoutData(new GridData(GridData.FILL_BOTH)); commitCommentArea.createArea(cTop); addResourcesArea(cBottom2); setPageComplete(canFinish()); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.LOCK_DIALOG); } private void addResourcesArea(Composite composite) { ResourceSelectionTree.IToolbarControlCreator toolbarControlCreator = new ResourceSelectionTree.IToolbarControlCreator() { public void createToolbarControls(ToolBarManager toolbarManager) { toolbarManager.add(new ControlContribution("stealLock") { protected Control createControl(Composite parent) { stealButton = new Button(parent, SWT.CHECK); stealButton.setText(Policy.bind("LockDialog.stealLock")); //$NON-NLS-1$ return stealButton; } }); } public int getControlCount() { return 1; } }; resourceSelectionTree = new ResourceSelectionTree(composite, SWT.NONE, "These files will be locked:", files, new HashMap(), null, false, toolbarControlCreator, null); //$NON-NLS-1$ resourceSelectionTree.setShowRemoveFromViewAction(false); } public String getWindowTitle() { return Policy.bind("LockDialog.title"); //$NON-NLS-1$ } public boolean performCancel() { return true; } public boolean performFinish() { stealLock = stealButton.getSelection(); comment = commitCommentArea.getComment(true); return true; } public void saveSettings() { } public void setMessage() { setMessage(Policy.bind("LockDialog.message")); //$NON-NLS-1$ } public String getComment() { return comment; } public boolean isStealLock() { return stealLock; } private boolean canFinish() { if (commentProperties == null) return true; else return commitCommentArea.getCommentLength() >= commentProperties .getMinimumLogMessageSize(); } public void createButtonsForButtonBar(Composite parent, SvnWizardDialog wizardDialog) { } } SvnWizardMarkResolvedPage.java000066400000000000000000000223461203611042400445330ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/dialogspackage org.tigris.subversion.subclipse.ui.wizards.dialogs; import org.eclipse.core.resources.IResource; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; public class SvnWizardMarkResolvedPage extends SvnWizardDialogPage { private IResource[] resources; private Button markResolvedButton; private Button chooseUserVersionButton; private Button chooseUserVersionForConflictsButton; private Button chooseIncomingVersionButton; private Button chooseIncomingVersionForConflictsButton; private Button chooseBaseVersionButton; private IDialogSettings settings; private int resolution; private boolean propertyConflicts; private boolean treeConflicts; private final static String LAST_CHOICE = "ResolveConflictDialog.lastChoice"; //$NON-NLS-1$ public SvnWizardMarkResolvedPage(IResource[] resources) { super("MarkResolvedDialog", Policy.bind("ResolveOperation.taskName")); //$NON-NLS-1$ //$NON-NLS-2$ this.resources = resources; settings = SVNUIPlugin.getPlugin().getDialogSettings(); } public void createButtonsForButtonBar(Composite parent, SvnWizardDialog wizardDialog) {} public void createControls(Composite parent) { Composite outerContainer = new Composite(parent,SWT.NONE); GridLayout outerLayout = new GridLayout(); outerLayout.numColumns = 1; outerContainer.setLayout(outerLayout); outerContainer.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); Composite composite = new Composite(outerContainer, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 1; composite.setLayout(layout); GridData data = new GridData(GridData.FILL_BOTH); composite.setLayoutData(data); Label label = new Label(composite, SWT.WRAP); if (resources.length == 1) label.setText(Policy.bind("ResolveDialog.file", resources[0].getFullPath().makeRelative().toOSString())); //$NON-NLS-1$ else label.setText(Policy.bind("ResolveDialog.multipleFiles")); //$NON-NLS-1$ data = new GridData(); data.widthHint = 500; label.setLayoutData(data); if (treeConflicts) { new Label(composite, SWT.NONE); Label propertyLabel1 = new Label(composite, SWT.WRAP); if (resources.length > 1) propertyLabel1.setText(Policy.bind("ResolveDialog.treeConflictMultiple")); //$NON-NLS-1$ else propertyLabel1.setText(Policy.bind("ResolveDialog.treeConflict")); //$NON-NLS-1$ data = new GridData(); data.widthHint = 500; propertyLabel1.setLayoutData(data); } else if (propertyConflicts) { new Label(composite, SWT.NONE); Label propertyLabel1 = new Label(composite, SWT.WRAP); if (resources.length > 1) propertyLabel1.setText(Policy.bind("ResolveDialog.propertyConflictMultiple")); //$NON-NLS-1$ else propertyLabel1.setText(Policy.bind("ResolveDialog.propertyConflict")); //$NON-NLS-1$ data = new GridData(); data.widthHint = 500; propertyLabel1.setLayoutData(data); } new Label(composite, SWT.NONE); Group conflictGroup = new Group(composite, SWT.NULL); conflictGroup.setText(Policy.bind("ResolveDialog.question")); //$NON-NLS-1$ GridLayout conflictLayout = new GridLayout(); conflictLayout.numColumns = 1; conflictGroup.setLayout(conflictLayout); data = new GridData(GridData.FILL_BOTH); conflictGroup.setLayoutData(data); markResolvedButton = new Button(conflictGroup, SWT.RADIO); markResolvedButton.setText(Policy.bind("ResolveDialog.resolved")); //$NON-NLS-1$ if (treeConflicts) { Label propertyLabel2 = new Label(conflictGroup, SWT.NONE); propertyLabel2.setText(Policy.bind("ResolveDialog.nonTreeOnly")); //$NON-NLS-1$ } else if (propertyConflicts) { Label propertyLabel2 = new Label(conflictGroup, SWT.NONE); propertyLabel2.setText(Policy.bind("ResolveDialog.nonPropertyOnly")); //$NON-NLS-1$ } chooseUserVersionButton = new Button(conflictGroup, SWT.RADIO); chooseUserVersionButton.setText(Policy.bind("ResolveDialog.useMine")); //$NON-NLS-1$ if (!propertyConflicts) { chooseUserVersionForConflictsButton = new Button(conflictGroup, SWT.RADIO); chooseUserVersionForConflictsButton.setText("Resolve conflicts in local file with my changes."); } chooseIncomingVersionButton = new Button(conflictGroup, SWT.RADIO); chooseIncomingVersionButton.setText(Policy.bind("ResolveDialog.useTheirs")); //$NON-NLS-1$ if (!propertyConflicts) { chooseIncomingVersionForConflictsButton = new Button(conflictGroup, SWT.RADIO); chooseIncomingVersionForConflictsButton.setText("Resolve conflicts in local file with changes from incoming file."); } chooseBaseVersionButton = new Button(conflictGroup, SWT.RADIO); chooseBaseVersionButton.setText(Policy.bind("ResolveDialog.useBase")); //$NON-NLS-1$ int lastChoice = ISVNConflictResolver.Choice.chooseMerged; try { lastChoice = settings.getInt(LAST_CHOICE); } catch (Exception e) {} if (lastChoice == ISVNConflictResolver.Choice.chooseMerged) markResolvedButton.setSelection(true); else if (lastChoice == ISVNConflictResolver.Choice.chooseMine && chooseUserVersionForConflictsButton != null) chooseUserVersionForConflictsButton.setSelection(true); else if (lastChoice == ISVNConflictResolver.Choice.chooseMineFull && chooseUserVersionButton != null) chooseUserVersionButton.setSelection(true); else if (lastChoice == ISVNConflictResolver.Choice.chooseTheirs && chooseIncomingVersionForConflictsButton != null) chooseIncomingVersionForConflictsButton.setSelection(true); else if (lastChoice == ISVNConflictResolver.Choice.chooseTheirsFull && chooseIncomingVersionButton != null) chooseIncomingVersionButton.setSelection(true); else if (lastChoice == ISVNConflictResolver.Choice.chooseBase && chooseBaseVersionButton != null) chooseBaseVersionButton.setSelection(true); SelectionListener selectionListener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { if (markResolvedButton.getSelection()) settings.put(LAST_CHOICE, ISVNConflictResolver.Choice.chooseMerged); else if (chooseUserVersionButton.getSelection()) settings.put(LAST_CHOICE, ISVNConflictResolver.Choice.chooseMineFull); else if (chooseUserVersionForConflictsButton != null && chooseUserVersionForConflictsButton.getSelection()) settings.put(LAST_CHOICE, ISVNConflictResolver.Choice.chooseMine); else if (chooseIncomingVersionButton.getSelection()) settings.put(LAST_CHOICE, ISVNConflictResolver.Choice.chooseTheirsFull); else if (chooseIncomingVersionForConflictsButton != null && chooseIncomingVersionForConflictsButton.getSelection()) settings.put(LAST_CHOICE, ISVNConflictResolver.Choice.chooseTheirs); else if (chooseBaseVersionButton.getSelection()) settings.put(LAST_CHOICE, ISVNConflictResolver.Choice.chooseBase); } }; markResolvedButton.addSelectionListener(selectionListener); chooseUserVersionButton.addSelectionListener(selectionListener); if (chooseUserVersionForConflictsButton != null) chooseUserVersionForConflictsButton.addSelectionListener(selectionListener); chooseIncomingVersionButton.addSelectionListener(selectionListener); if (chooseIncomingVersionForConflictsButton != null) chooseIncomingVersionForConflictsButton.addSelectionListener(selectionListener); chooseBaseVersionButton.addSelectionListener(selectionListener); setControl(outerContainer); } public String getWindowTitle() { return Policy.bind("ResolveOperation.taskName"); //$NON-NLS-1$ } public boolean performCancel() { return true; } public boolean performFinish() { resolution = ISVNConflictResolver.Choice.postpone; if (markResolvedButton.getSelection()) resolution = ISVNConflictResolver.Choice.chooseMerged; else if (chooseIncomingVersionButton.getSelection()) resolution = ISVNConflictResolver.Choice.chooseTheirsFull; else if (chooseUserVersionButton.getSelection()) resolution = ISVNConflictResolver.Choice.chooseMineFull; else if (chooseBaseVersionButton.getSelection()) resolution = ISVNConflictResolver.Choice.chooseBase; else if (chooseUserVersionForConflictsButton != null && chooseUserVersionForConflictsButton.getSelection()) resolution = ISVNConflictResolver.Choice.chooseMine; else if (chooseIncomingVersionForConflictsButton != null && chooseIncomingVersionForConflictsButton.getSelection()) resolution = ISVNConflictResolver.Choice.chooseTheirs; return true; } public void saveSettings() {} public void setMessage() { if (resources.length == 1) setMessage(Policy.bind("ResolveDialog.message", resources[0].getName())); //$NON-NLS-1$ else setMessage(Policy.bind("ResolveDialog.messageMultiple")); //$NON-NLS-1$ } public int getResolution() { return resolution; } public void setPropertyConflicts(boolean propertyConflicts) { this.propertyConflicts = propertyConflicts; } public void setTreeConflicts(boolean treeConflicts) { this.treeConflicts = treeConflicts; } } SvnWizardNewRepositoryPage.java000066400000000000000000000132211203611042400447560ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/dialogspackage org.tigris.subversion.subclipse.ui.wizards.dialogs; import java.io.File; import java.util.Properties; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.custom.BusyIndicator; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.DirectoryDialog; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; public class SvnWizardNewRepositoryPage extends SvnWizardDialogPage { private Text folderText; private Button connectionButton; private boolean success; public SvnWizardNewRepositoryPage() { super("NewRepositoryDialog", Policy.bind("NewRepositoryDialog.title")); //$NON-NLS-1$ //$NON-NLS-2$ } public void createButtonsForButtonBar(Composite parent, SvnWizardDialog wizardDialog) { } public void createControls(Composite outerContainer) { Composite composite = new Composite(outerContainer, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 2; layout.marginHeight = 0; layout.marginWidth = 0; composite.setLayout(layout); GridData data = new GridData(GridData.FILL_BOTH); composite.setLayoutData(data); Label folderLabel = new Label(composite, SWT.NONE); folderLabel.setText(Policy.bind("NewRepositoryDialog.folder")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; folderLabel.setLayoutData(data); folderText = new Text(composite, SWT.BORDER); data = new GridData(); data.widthHint = 450; folderText.setLayoutData(data); folderText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(canFinish()); } }); Button browseButton = new Button(composite, SWT.PUSH); browseButton.setText(Policy.bind("NewRepositoryDialog.browse")); //$NON-NLS-1$ browseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { DirectoryDialog dialog = new DirectoryDialog(getShell()); dialog.setText(Policy.bind("NewRepositoryDialog.browseTitle")); //$NON-NLS-1$ dialog.setMessage(Policy.bind("NewRepositoryDialog.browseMessage")); //$NON-NLS-1$ String directory = dialog.open(); if (directory != null) folderText.setText(directory); } }); Label spacer = new Label(composite, SWT.NONE); data = new GridData(); data.horizontalSpan = 2; spacer.setLayoutData(data); connectionButton = new Button(composite, SWT.CHECK); connectionButton.setText(Policy.bind("NewRepositoryDialog.connection")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; connectionButton.setLayoutData(data); connectionButton.setSelection(true); setPageComplete(false); folderText.setFocus(); } public String getWindowTitle() { return Policy.bind("NewRepositoryDialog.title"); //$NON-NLS-1$ } public boolean performCancel() { return true; } public boolean performFinish() { success = true; BusyIndicator.showWhile(Display.getDefault(), new Runnable() { public void run() { ISVNClientAdapter svnClient = null; try { SVNProviderPlugin provider = SVNProviderPlugin.getPlugin(); String url = getUrl(); if (provider.getRepositories().isKnownRepository(url, true)) { MessageDialog.openError(getShell(), Policy.bind("NewRepositoryDialog.title"), Policy.bind("NewRepositoryDialog.alreadyExists")); //$NON-NLS-1$ success = false; return; } svnClient = SVNProviderPlugin.getPlugin().getSVNClient(); File path = new File(folderText.getText().trim()); if (!path.exists()) path.mkdirs(); svnClient.createRepository(path, ISVNClientAdapter.REPOSITORY_FSTYPE_FSFS); if (connectionButton.getSelection()) { Properties properties = new Properties(); properties.setProperty("url", url); //$NON-NLS-1$ ISVNRepositoryLocation repository = provider.getRepositories().createRepository(properties); provider.getRepositories().addOrUpdateRepository(repository); } } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("NewRepositoryDialog.title"), e.getLocalizedMessage()); //$NON-NLS-1$ success = false; } finally { SVNProviderPlugin.getPlugin().getSVNClientManager().returnSVNClient(svnClient); } } }); return success; } private String getUrl() { String url = null; if (folderText.getText().startsWith("/")) url = "file://" + folderText.getText().trim().replaceAll("\\\\", "/"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ else url = "file:///" + folderText.getText().trim().replaceAll("\\\\", "/"); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ return url; } public void saveSettings() { } public void setMessage() { setMessage(Policy.bind("NewRepositoryDialog.message")); //$NON-NLS-1$ } private boolean canFinish() { if (folderText.getText().trim().length() == 0) return false; File file = new File(folderText.getText().trim()); if (!file.isAbsolute()) return false; if (file.exists() && !file.isDirectory()) return false; if (!file.exists()) { File parent = file.getParentFile(); if (parent == null || !parent.exists()) return false; } return true; } } SvnWizardRevertPage.java000066400000000000000000000201121203611042400433710ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/dialogspackage org.tigris.subversion.subclipse.ui.wizards.dialogs; import java.util.Arrays; import java.util.HashMap; import java.util.List; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.jface.action.ControlContribution; import org.eclipse.jface.action.ToolBarManager; import org.eclipse.jface.viewers.CheckStateChangedEvent; import org.eclipse.jface.viewers.CheckboxTreeViewer; import org.eclipse.jface.viewers.DoubleClickEvent; import org.eclipse.jface.viewers.ICheckStateListener; import org.eclipse.jface.viewers.IDoubleClickListener; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.compare.SVNLocalCompareInput; import org.tigris.subversion.subclipse.ui.dialogs.CompareDialog; import org.tigris.subversion.subclipse.ui.util.ResourceSelectionTree; import org.tigris.subversion.svnclientadapter.SVNRevision; public class SvnWizardRevertPage extends SvnWizardDialogPage { private IResource[] resourcesToRevert; // private String url; private Object[] selectedResources; private HashMap statusMap; private ResourceSelectionTree resourceSelectionTree; private boolean resourceRemoved; private Button includeUnversionedButton; private boolean includeUnversioned; private boolean fromSyncView; public SvnWizardRevertPage(IResource[] resourcesToRevert, String url, HashMap statusMap, boolean fromSyncView) { super("RevertDialog", Policy.bind("RevertDialog.title")); //$NON-NLS-1$ this.fromSyncView = fromSyncView; if (fromSyncView) includeUnversioned = true; else includeUnversioned = SVNUIPlugin.getPlugin().getPreferenceStore().getBoolean(ISVNUIConstants.PREF_SELECT_UNADDED_RESOURCES_ON_COMMIT); this.resourcesToRevert = resourcesToRevert; // this.url = url; this.statusMap = statusMap; } public void createControls(Composite outerContainer) { Composite composite = new Composite(outerContainer, SWT.NULL); GridLayout layout = new GridLayout(1, false); layout.marginHeight = 0; layout.marginWidth = 0; composite.setLayout(layout); composite.setLayoutData(new GridData(GridData.FILL_BOTH)); ResourceSelectionTree.IToolbarControlCreator toolbarControlCreator = new ResourceSelectionTree.IToolbarControlCreator() { public void createToolbarControls(ToolBarManager toolbarManager) { toolbarManager.add(new ControlContribution("ignoreUnversioned") { //$NON-NLS-1$ protected Control createControl(Composite parent) { includeUnversionedButton = new Button(parent, SWT.CHECK); includeUnversionedButton.setText(Policy.bind("CommitDialog.includeUnversioned")); //$NON-NLS-1$ includeUnversionedButton.setSelection(includeUnversioned); includeUnversionedButton.addSelectionListener( new SelectionListener(){ public void widgetSelected(SelectionEvent e) { includeUnversioned = includeUnversionedButton.getSelection(); if( !includeUnversioned ) { resourceSelectionTree.removeUnversioned(); } else { resourceSelectionTree.addUnversioned(); } selectedResources = resourceSelectionTree.getSelectedResources(); setPageComplete(canFinish()); if (!fromSyncView) updatePreference(includeUnversioned); } public void widgetDefaultSelected(SelectionEvent e) { } } ); return includeUnversionedButton; } }); } public int getControlCount() { return 1; } }; resourceSelectionTree = new ResourceSelectionTree(composite, SWT.NONE, Policy.bind("GenerateSVNDiff.Changes"), resourcesToRevert, statusMap, null, true, toolbarControlCreator, null); //$NON-NLS-1$ if (!resourceSelectionTree.showIncludeUnversionedButton()) includeUnversionedButton.setVisible(false); // resourceSelectionTree.getTreeViewer().setAllChecked(true); resourceSelectionTree.getTreeViewer().addSelectionChangedListener( new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { selectedResources = resourceSelectionTree.getSelectedResources(); } }); ((CheckboxTreeViewer)resourceSelectionTree.getTreeViewer()).addCheckStateListener(new ICheckStateListener() { public void checkStateChanged(CheckStateChangedEvent event) { selectedResources = resourceSelectionTree.getSelectedResources(); } }); resourceSelectionTree.getTreeViewer().addDoubleClickListener( new IDoubleClickListener() { public void doubleClick(DoubleClickEvent event) { IStructuredSelection sel = (IStructuredSelection) event .getSelection(); Object sel0 = sel.getFirstElement(); if (sel0 instanceof IFile) { final ISVNLocalResource localResource = SVNWorkspaceRoot .getSVNResourceFor((IFile) sel0); try { new CompareDialog(getShell(), new SVNLocalCompareInput( localResource, SVNRevision.BASE, true)).open(); } catch (Exception e1) { } } } }); if( !includeUnversioned ) { resourceSelectionTree.removeUnversioned(); } resourceSelectionTree.getTreeViewer().getTree().setLayoutData( new GridData(SWT.FILL, SWT.FILL, true, true)); // Composite composite_1 = new Composite(composite, SWT.NONE); // composite_1.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1)); // composite_1.setLayout(new GridLayout()); selectedResources = resourceSelectionTree.getSelectedResources(); setPageComplete(canFinish()); PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.REVERT_DIALOG); } public boolean performCancel() { return true; } public boolean performFinish() { if (!resourceRemoved) { resourceRemoved = resourceSelectionTree.isResourceRemoved(); } return true; } public void setMessage() { setMessage(Policy.bind("RevertDialog.resources")); //$NON-NLS-1$ } public void saveSettings() { } public IResource[] getSelectedResources() { if (selectedResources == null) { return resourcesToRevert; } else { List result = Arrays.asList(selectedResources); return (IResource[]) result.toArray(new IResource[result.size()]); } } public String getWindowTitle() { return Policy.bind("RevertDialog.title"); //$NON-NLS-1$ } public void createButtonsForButtonBar(Composite parent, SvnWizardDialog wizardDialog) { } public void setResourceRemoved(boolean resourceRemoved) { this.resourceRemoved = resourceRemoved; } public boolean isResourceRemoved() { return resourceRemoved; } public void updatePreference( boolean includeUnversioned ) { SVNUIPlugin.getPlugin().getPreferenceStore().setValue(ISVNUIConstants.PREF_SELECT_UNADDED_RESOURCES_ON_COMMIT, includeUnversioned); } private boolean canFinish() { return selectedResources.length > 0; } } SvnWizardSetPropertyPage.java000066400000000000000000000321641203611042400444340ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/dialogspackage org.tigris.subversion.subclipse.ui.wizards.dialogs; import java.io.File; import java.net.URL; import java.util.ArrayList; import org.eclipse.jface.resource.JFaceColors; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.TraverseEvent; import org.eclipse.swt.events.TraverseListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.properties.SVNPropertyDefinition; import org.tigris.subversion.subclipse.core.properties.SVNPropertyManager; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.svnclientadapter.ISVNProperty; public class SvnWizardSetPropertyPage extends SvnWizardDialogPage { private ISVNProperty property; // null when we set a new property private ISVNLocalResource svnResource; private Combo propertyNameText; private Text propertyValueText; private Text fileText; private Button textRadio; private Button fileRadio; private Button browseButton; private Label statusMessageLabel; private Button recurseCheckbox; private String propertyName; private String propertyValue; private File propertyFile; private boolean recurse; private ArrayList allPropertyTypes = new ArrayList(); private SVNPropertyDefinition[] propertyTypes; private ArrayList propertyNames; private int prop; public SvnWizardSetPropertyPage(ISVNLocalResource svnResource) { this(svnResource, null); } public SvnWizardSetPropertyPage(ISVNLocalResource svnResource, ISVNProperty property) { super("SetSvnPropertyDialog", Policy.bind("SetSvnPropertyDialog.title")); //$NON-NLS-1$ //$NON-NLS-2$ this.property = property; this.svnResource = svnResource; } public void createButtonsForButtonBar(Composite parent, SvnWizardDialog wizardDialog) { } public void createControls(Composite parent) { Listener updateEnablementsListener = new Listener() { public void handleEvent(Event event) { updateEnablements(); } }; Listener validateListener = new Listener() { public void handleEvent(Event event) { validate(); } }; Listener updatePropertiesListener = new Listener() { public void handleEvent(Event event) { // updateProperties(); validate(); } }; Composite area = new Composite(parent, SWT.NULL); GridLayout gridLayout = new GridLayout(); gridLayout.numColumns = 2; area.setLayout(gridLayout); area.setLayoutData(new GridData(GridData.FILL_BOTH)); // create the property name label and the corresponding Text Label label = new Label(area,SWT.LEFT); label.setLayoutData(new GridData()); label.setText(Policy.bind("SetSvnPropertyDialog.propertyName")); //$NON-NLS-1$ propertyNameText = new Combo(area, SWT.BORDER); propertyNameText.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false)); if (property != null) { propertyNameText.setText(property.getName()); propertyNameText.setEnabled(false); } getPropertyTypes(); propertyNameText.addListener(SWT.Modify,validateListener); propertyNameText.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent se) { getProperty(); } }); propertyNameText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent me) { getProperty(); } }); // create the group Group group = new Group(area,SWT.NULL); group.setText(Policy.bind("SetSvnPropertyDialog.propertyContent")); //$NON-NLS-1$ group.setLayoutData(new GridData(SWT.FILL, SWT.FILL, false, true, 2, 1)); group.setLayout(new GridLayout(2, false)); // create "Enter a text property" radio button textRadio = new Button(group, SWT.RADIO); textRadio.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1)); textRadio.setText(Policy.bind("SetSvnPropertyDialog.enterTextProperty")); //$NON-NLS-1$ textRadio.addListener(SWT.Selection,updateEnablementsListener); textRadio.setSelection(true); // create the Text for the content propertyValueText = new Text(group,SWT.BORDER | SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL); GridData gridData = new GridData(SWT.FILL, SWT.FILL, true, true, 2, 1); gridData.heightHint = 100; gridData.widthHint = 400; gridData.horizontalIndent = 15; propertyValueText.setLayoutData(gridData); // create "Use a file" radio button fileRadio = new Button(group, SWT.RADIO); fileRadio.setLayoutData(new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1)); fileRadio.setText(Policy.bind("SetSvnPropertyDialog.useFile")); //$NON-NLS-1$ fileRadio.addListener(SWT.Selection,updateEnablementsListener); fileText = new Text(group, SWT.SINGLE|SWT.BORDER); GridData fileTextData = new GridData(SWT.FILL, SWT.CENTER, true, false); fileTextData.horizontalIndent = 15; fileText.setLayoutData(fileTextData); fileText.setEditable(false); browseButton = new Button(group,SWT.PUSH); browseButton.setLayoutData(new GridData()); browseButton.setText(Policy.bind("SetSvnPropertyDialog.browse")); //$NON-NLS-1$ browseButton.addSelectionListener(new SelectionAdapter(){ public void widgetSelected(SelectionEvent event) { FileDialog fileDialog = new FileDialog(getShell(),SWT.OPEN); String res = fileDialog.open(); if (res != null) { fileText.setText(res); validate(); } } }); // file input and button // checkbox recurseCheckbox = new Button(area,SWT.CHECK); recurseCheckbox.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, false, false, 2, 1)); recurseCheckbox.setText(Policy.bind("SetSvnPropertyDialog.setPropertyRecursively")); //$NON-NLS-1$ recurseCheckbox.setSelection(false); if (!svnResource.isFolder()) { recurseCheckbox.setEnabled(false); } recurseCheckbox.addListener(SWT.Selection, updatePropertiesListener); // status message statusMessageLabel = new Label(area, SWT.LEFT); statusMessageLabel.setText(""); //$NON-NLS-1$ GridData data = new GridData(SWT.FILL, SWT.FILL, false, false, 2, 1); statusMessageLabel.setLayoutData(data); statusMessageLabel.setFont(parent.getFont()); if (property != null) { propertyValueText.setText(property.getValue()); getProperty(); } propertyValueText.addListener(SWT.Modify,updatePropertiesListener); propertyValueText.addTraverseListener(new TraverseListener() { public void keyTraversed(TraverseEvent e) { if (e.detail == SWT.TRAVERSE_RETURN && (e.stateMask & SWT.CTRL) != 0) { e.doit = false; if (isPageComplete()) { ((SvnWizard)getWizard()).finishAndClose(); } } } }); updateEnablements(); PlatformUI.getWorkbench().getHelpSystem().setHelp(area, IHelpContextIds.SET_SVN_PROPERTY_DIALOG); } public String getWindowTitle() { return Policy.bind("SetSvnPropertyDialog.title"); //$NON-NLS-1$ } public boolean performCancel() { return true; } public boolean performFinish() { return true; } public void saveSettings() { } public void setMessage() { setMessage(Policy.bind("SetSvnPropertyDialog.message")); //$NON-NLS-1$ } private boolean isNewProperty() { return property == null; } private void getPropertyTypes() { if (svnResource.isFolder()) { SVNPropertyDefinition[] allProperties = SVNPropertyManager.getInstance().getPropertyTypes(); for (int i = 0; i < allProperties.length; i++) allPropertyTypes.add(allProperties[i]); propertyTypes = SVNPropertyManager.getInstance().getFolderPropertyTypes(); } else propertyTypes = SVNPropertyManager.getInstance().getFilePropertyTypes(); propertyNames = new ArrayList(); for (int i = 0; i < propertyTypes.length; i++) { propertyNameText.add(propertyTypes[i].getName()); propertyNames.add(propertyTypes[i].getName()); } } private void updateEnablements() { if (textRadio.getSelection()) { browseButton.setEnabled(false); fileText.setEnabled(false); propertyValueText.setEnabled(true); } else { browseButton.setEnabled(true); fileText.setEnabled(true); propertyValueText.setEnabled(false); } validate(); } /** * get the name of the property to set */ public String getPropertyName() { return propertyName; } /** * get the value of the property or null if a file is used to set the property */ public String getPropertyValue() { return propertyValue; } /** * get the file to use as a property value or null if plain text is used instead */ public File getPropertyFile() { return propertyFile; } public boolean getRecurse() { return recurse; } private void updateProperties() { propertyName = propertyNameText.getText(); if (textRadio.getSelection()) { propertyFile = null; propertyValue = propertyValueText.getText(); } else { propertyFile = new File(fileText.getText()); propertyValue = null; } recurse = recurseCheckbox.getSelection(); } private void validate() { // update the properties from the controls updateProperties(); // verify property name if (propertyName.equals("")) { //$NON-NLS-1$ setError(""); //$NON-NLS-1$ return; } else { if (isNewProperty()) { try { // validate will be called each time the property name is changed (each time propertyNameText is changed) // we don't want the command to be written on the console ... SVNUIPlugin.getPlugin().disableConsoleListener(); // if we are setting a new property, make sure the property does not exist if (svnResource.getSvnProperty(getPropertyName()) != null) { setError(Policy.bind("SetSvnPropertyDialog.anotherPropertyHasSameName")); //$NON-NLS-1$ return; } } catch (SVNException e) { // we ignore the exception, we can't do much more ... } finally { SVNUIPlugin.getPlugin().enableConsoleListener(); } } if (textRadio.getSelection() && (prop != -1)) { if (propertyTypes[prop].isBoolean()) { if (!propertyValue.equals("true") && !propertyValue.equals("false")) { setError(Policy.bind("SetSvnPropertyDialog.boolean")); //$NON-NLS-1$ return; } } if (propertyTypes[prop].isNumber()) { try { Integer.parseInt(propertyValue); } catch (Exception e) { setError(Policy.bind("SetSvnPropertyDialog.number")); //$NON-NLS-1$ return; } } if (propertyTypes[prop].isUrl()) { if (!propertyName.equals("bugtraq:url") || (!propertyValue.startsWith("^/") && !propertyValue.startsWith("/"))) { try { new URL(propertyValue); } catch (Exception e) { setError(Policy.bind("SetSvnPropertyDialog.url")); //$NON-NLS-1$ return; } } } } // if non-folder property specified for folder, recurse must be selected. if (svnResource.isFolder() && !recurseCheckbox.getSelection() && prop == -1) { SVNPropertyDefinition checkDefinition = new SVNPropertyDefinition(propertyName, null); int index = allPropertyTypes.indexOf(checkDefinition); if (index != -1) { setError(Policy.bind("SetSvnPropertyDialog.recurseRequired")); //$NON-NLS-1$ return; } } } // verify file if (propertyFile != null) { if (fileText.getText().equals("")) { //$NON-NLS-1$ setError(""); //$NON-NLS-1$ } else { if (!getPropertyFile().exists()) { setError(Policy.bind("SetSvnPropertyDialog.fileDoesNotExist")); //$NON-NLS-1$ return; } } } setError(null); } private void setError(String text) { if (text == null) { statusMessageLabel.setText(""); //$NON-NLS-1$ setPageComplete(true); } else { statusMessageLabel.setText(text); statusMessageLabel.setForeground(JFaceColors.getErrorText(getShell().getDisplay())); setPageComplete(false); } } private void getProperty() { prop = propertyNames.indexOf(propertyNameText.getText()); if (prop != -1) { propertyNameText.setToolTipText(propertyTypes[prop].getDescription()); recurseCheckbox.setEnabled(svnResource.isFolder() && propertyTypes[prop].isAllowRecurse()); if (!recurseCheckbox.getEnabled()) recurseCheckbox.setSelection(false); } else recurseCheckbox.setEnabled(svnResource.isFolder()); validate(); } } SvnWizardSwitchPage.java000066400000000000000000000566131203611042400434020ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/dialogspackage org.tigris.subversion.subclipse.ui.wizards.dialogs; import java.net.MalformedURLException; import java.text.ParseException; import java.util.ArrayList; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IAdaptable; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ColumnLayoutData; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.DecoratingLabelProvider; import org.eclipse.jface.viewers.ILabelDecorator; import org.eclipse.jface.viewers.ILabelProvider; import org.eclipse.jface.viewers.IStructuredContentProvider; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.jface.viewers.Viewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.DepthComboHelper; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.conflicts.SVNConflictResolver; import org.tigris.subversion.subclipse.ui.dialogs.ChooseUrlDialog; import org.tigris.subversion.subclipse.ui.dialogs.HistoryDialog; import org.tigris.subversion.subclipse.ui.util.UrlCombo; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class SvnWizardSwitchPage extends SvnWizardDialogPage { private static final int REVISION_WIDTH_HINT = 40; private IResource[] resources; private UrlCombo urlCombo; private Text revisionText; private Button logButton; private Button headButton; private Table table; private TableViewer viewer; private Combo depthCombo; private Button setDepthButton; private Button ignoreExternalsButton; private Button forceButton; private Button ignoreAncestryButton; private Button textConflictPromptButton; private Button textConflictMarkButton; private Button propertyConflictPromptButton; private Button propertyConflictMarkButton; private Button binaryConflictPromptButton; private Button binaryConflictMarkButton; private Button binaryConflictUserButton; private Button binaryConflictIncomingButton; private SVNConflictResolver conflictResolver; private SVNUrl[] urls; private SVNRevision revision; private int depth; private boolean setDepth; private boolean ignoreExternals; private boolean force; private boolean ignoreAncestry; private String[] urlStrings; private String commonRoot; private SwitchResource[] switchResources; private long revisionNumber; private String[] columnHeaders = {Policy.bind("SwitchDialog.resources")}; //$NON-NLS-1$ private ColumnLayoutData columnLayouts[] = { new ColumnWeightData(100, 100, true)}; public SvnWizardSwitchPage(IResource[] resources) { this("SwitchDialogWithConflictHandling", resources); //$NON-NLS-1$ } public SvnWizardSwitchPage(String name, IResource[] resources) { super(name, Policy.bind("SwitchDialog.title")); //$NON-NLS-1$ this.resources = resources; } public SvnWizardSwitchPage(IResource[] resources, long revisionNumber) { this(resources); this.revisionNumber = revisionNumber; } public void createControls(Composite parent) { Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.numColumns = 3; layout.marginHeight = 0; layout.marginWidth = 0; composite.setLayout(layout); GridData data = new GridData(GridData.FILL_BOTH); composite.setLayoutData(data); Label urlLabel = new Label(composite, SWT.NONE); urlLabel.setText(Policy.bind("SwitchDialog.url")); //$NON-NLS-1$ urlCombo = new UrlCombo(composite, SWT.NONE); urlCombo.init(resources[0].getProject().getName()); urlCombo.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.GRAB_HORIZONTAL)); commonRoot = getCommonRoot(); if (commonRoot != null) urlCombo.setText(commonRoot); urlCombo.getCombo().addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(canFinish()); } }); Button browseButton = new Button(composite, SWT.PUSH); browseButton.setText(Policy.bind("SwitchDialog.browse")); //$NON-NLS-1$ browseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { ChooseUrlDialog dialog = new ChooseUrlDialog(getShell(), resources[0]); dialog.setIncludeBranchesAndTags(resources.length == 1); if ((dialog.open() == ChooseUrlDialog.OK) && (dialog.getUrl() != null)) { urlCombo.setText(dialog.getUrl()); setPageComplete(canFinish()); } } }); final Composite revisionGroup = new Composite(composite, SWT.NULL); GridLayout revisionLayout = new GridLayout(); revisionLayout.numColumns = 3; revisionLayout.marginWidth = 0; revisionLayout.marginHeight = 0; revisionGroup.setLayout(revisionLayout); data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalSpan = 3; revisionGroup.setLayoutData(data); headButton = new Button(revisionGroup, SWT.CHECK); headButton.setText(Policy.bind("SvnWizardSwitchPage.head")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 3; headButton.setLayoutData(data); Label revisionLabel = new Label(revisionGroup, SWT.NONE); revisionLabel.setText(Policy.bind("SvnWizardSwitchPage.revision")); //$NON-NLS-1$ revisionText = new Text(revisionGroup, SWT.BORDER); data = new GridData(); data.widthHint = REVISION_WIDTH_HINT; revisionText.setLayoutData(data); if (revisionNumber == 0) { headButton.setSelection(true); revisionText.setEnabled(false); } else { revisionText.setText("" + revisionNumber); //$NON-NLS-1$ } revisionText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(canFinish()); } }); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; revisionText.addFocusListener(focusListener); logButton = new Button(revisionGroup, SWT.PUSH); logButton.setText(Policy.bind("MergeDialog.showLog")); //$NON-NLS-1$ logButton.setEnabled(false); logButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { showLog(); } }); SelectionListener listener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { revisionText.setEnabled(!headButton.getSelection()); logButton.setEnabled(!headButton.getSelection()); setPageComplete(canFinish()); if (!headButton.getSelection()) { revisionText.selectAll(); revisionText.setFocus(); } } }; headButton.addSelectionListener(listener); if (resources.length > 1) { table = new Table(composite, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); table.setLinesVisible(false); table.setHeaderVisible(true); data = new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL); data.horizontalSpan = 3; table.setLayoutData(data); TableLayout tableLayout = new TableLayout(); table.setLayout(tableLayout); viewer = new TableViewer(table); viewer.setContentProvider(new SwitchContentProvider()); ILabelDecorator decorator = PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator(); viewer.setLabelProvider(new TableDecoratingLabelProvider(new SwitchLabelProvider(), decorator)); for (int i = 0; i < columnHeaders.length; i++) { tableLayout.addColumnData(columnLayouts[i]); TableColumn tc = new TableColumn(table, SWT.NONE,i); tc.setResizable(columnLayouts[i].resizable); tc.setText(columnHeaders[i]); } viewer.setInput(this); urlCombo.getCombo().addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { viewer.refresh(); } }); } Group parameterGroup = new Group(composite, SWT.NULL); GridLayout parameterLayout = new GridLayout(); parameterLayout.numColumns = 2; parameterGroup.setLayout(parameterLayout); data = new GridData(GridData.FILL_HORIZONTAL); data.horizontalSpan = 3; parameterGroup.setLayoutData(data); Label depthLabel = new Label(parameterGroup, SWT.NONE); depthLabel.setText(Policy.bind("SvnDialog.depth")); //$NON-NLS-1$ depthCombo = new Combo(parameterGroup, SWT.READ_ONLY); DepthComboHelper.addDepths(depthCombo, true, true, ISVNUIConstants.DEPTH_UNKNOWN); depthCombo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent evt) { if (depthCombo.getText().equals(ISVNUIConstants.DEPTH_EXCLUDE)) { setDepthButton.setSelection(true); setDepthButton.setEnabled(false); ignoreExternalsButton.setVisible(false); forceButton.setVisible(false); ignoreAncestryButton.setVisible(false); revisionGroup.setVisible(false); } else { setDepthButton.setEnabled(true); ignoreExternalsButton.setVisible(true); forceButton.setVisible(true); ignoreAncestryButton.setVisible(true); revisionGroup.setVisible(true); } setPageComplete(canFinish()); } }); setDepthButton = new Button(parameterGroup, SWT.CHECK); setDepthButton.setText(Policy.bind("SvnDialog.setDepth")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; setDepthButton.setLayoutData(data); ignoreExternalsButton = new Button(parameterGroup, SWT.CHECK); ignoreExternalsButton.setText(Policy.bind("SvnDialog.ignoreExternals")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; ignoreExternalsButton.setLayoutData(data); forceButton = new Button(parameterGroup, SWT.CHECK); forceButton.setText(Policy.bind("SvnDialog.force")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; forceButton.setLayoutData(data); forceButton.setSelection(true); ignoreAncestryButton = new Button(parameterGroup, SWT.CHECK); ignoreAncestryButton.setText(Policy.bind("SvnWizardSwitchPage.0")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; ignoreAncestryButton.setLayoutData(data); ignoreAncestryButton.setSelection(false); Group conflictGroup = new Group(composite, SWT.NONE); conflictGroup.setText(Policy.bind("SvnWizardUpdatePage.0")); //$NON-NLS-1$ GridLayout conflictLayout = new GridLayout(); conflictLayout.numColumns = 1; conflictGroup.setLayout(conflictLayout); data = new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL); data.horizontalSpan = 2; conflictGroup.setLayoutData(data); Group textGroup = new Group(conflictGroup, SWT.NONE); textGroup.setText(Policy.bind("SvnWizardUpdatePage.1")); //$NON-NLS-1$ GridLayout textLayout = new GridLayout(); textLayout.numColumns = 1; textGroup.setLayout(textLayout); textGroup.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); textConflictPromptButton = new Button(textGroup, SWT.RADIO); textConflictPromptButton.setText(Policy.bind("SvnWizardUpdatePage.2")); //$NON-NLS-1$ textConflictMarkButton = new Button(textGroup, SWT.RADIO); textConflictMarkButton.setText(Policy.bind("SvnWizardUpdatePage.3")); //$NON-NLS-1$ Group binaryGroup = new Group(conflictGroup, SWT.NONE); binaryGroup.setText(Policy.bind("SvnWizardUpdatePage.4")); //$NON-NLS-1$ GridLayout binaryLayout = new GridLayout(); binaryLayout.numColumns = 1; binaryGroup.setLayout(binaryLayout); binaryGroup.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); binaryConflictPromptButton = new Button(binaryGroup, SWT.RADIO); binaryConflictPromptButton.setText(Policy.bind("SvnWizardUpdatePage.5")); //$NON-NLS-1$ binaryConflictMarkButton = new Button(binaryGroup, SWT.RADIO); binaryConflictMarkButton.setText(Policy.bind("SvnWizardUpdatePage.6")); //$NON-NLS-1$ binaryConflictUserButton = new Button(binaryGroup, SWT.RADIO); binaryConflictUserButton.setText(Policy.bind("SvnWizardUpdatePage.7")); //$NON-NLS-1$ binaryConflictIncomingButton = new Button(binaryGroup, SWT.RADIO); binaryConflictIncomingButton.setText(Policy.bind("SvnWizardUpdatePage.8")); //$NON-NLS-1$ Group propertyGroup = new Group(conflictGroup, SWT.NONE); propertyGroup.setText(Policy.bind("SvnWizardUpdatePage.9")); //$NON-NLS-1$ GridLayout propertyLayout = new GridLayout(); propertyLayout.numColumns = 1; propertyGroup.setLayout(propertyLayout); propertyGroup.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); propertyConflictPromptButton = new Button(propertyGroup, SWT.RADIO); propertyConflictPromptButton.setText(Policy.bind("SvnWizardUpdatePage.10")); //$NON-NLS-1$ propertyConflictMarkButton = new Button(propertyGroup, SWT.RADIO); propertyConflictMarkButton.setText(Policy.bind("SvnWizardUpdatePage.11")); //$NON-NLS-1$ textConflictMarkButton.setSelection(true); binaryConflictMarkButton.setSelection(true); propertyConflictMarkButton.setSelection(true); setPageComplete(canFinish()); // Add F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.SWITCH_DIALOG); } public String getWindowTitle() { return Policy.bind("SwitchDialog.switch"); //$NON-NLS-1$ } public boolean performCancel() { return true; } protected void showLog() { ISVNRemoteResource remoteResource = null; try { remoteResource = SVNWorkspaceRoot.getSVNResourceFor(resources[0]).getRepository().getRemoteFile(new SVNUrl(urlCombo.getText())); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.showLog"), e.toString()); //$NON-NLS-1$ return; } if (remoteResource == null) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.showLog"), Policy.bind("MergeDialog.urlError") + " " + urlCombo.getText()); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ return; } HistoryDialog dialog = new HistoryDialog(getShell(), remoteResource); if (dialog.open() == HistoryDialog.CANCEL) return; ILogEntry[] selectedEntries = dialog.getSelectedLogEntries(); if (selectedEntries.length == 0) return; revisionText.setText(Long.toString(selectedEntries[selectedEntries.length - 1].getRevision().getNumber())); setPageComplete(canFinish()); } public boolean performFinish() { urlCombo.saveUrl(); try { if (urlStrings.length > 1) { urls = new SVNUrl[switchResources.length]; for (int i = 0; i < switchResources.length; i++) { if (urlCombo.getText().endsWith("/")) //$NON-NLS-1$ urls[i] = new SVNUrl(urlCombo.getText() + switchResources[i].getPartialPath()); else urls[i] = new SVNUrl(urlCombo.getText() + "/" + switchResources[i].getPartialPath()); //$NON-NLS-1$ } } else { urls = new SVNUrl[1]; urls[0] = new SVNUrl(urlCombo.getText()); } if (headButton.getSelection()) revision = SVNRevision.HEAD; else { try { revision = SVNRevision.getRevision(revisionText.getText().trim()); } catch (ParseException e1) { MessageDialog.openError(getShell(), Policy.bind("SwitchDialog.title"), Policy.bind("SwitchDialog.invalid")); //$NON-NLS-1$ //$NON-NLS-2$ return false; } } setDepth = setDepthButton.getSelection(); ignoreExternals = ignoreExternalsButton.getSelection(); force = forceButton.getSelection(); ignoreAncestry = ignoreAncestryButton.getSelection(); depth = DepthComboHelper.getDepth(depthCombo); conflictResolver = new SVNConflictResolver(resources[0], getTextConflictHandling(), getBinaryConflictHandling(), getPropertyConflictHandling()); } catch (MalformedURLException e) { MessageDialog.openError(getShell(), Policy.bind("SwitchDialog.title"), e.getMessage()); //$NON-NLS-1$ return false; } return true; } public void saveSettings() { } public SVNConflictResolver getConflictResolver() { return conflictResolver; } public int getTextConflictHandling() { if (textConflictMarkButton.getSelection()) return ISVNConflictResolver.Choice.postpone; else return ISVNConflictResolver.Choice.chooseMerged; } public int getBinaryConflictHandling() { if (binaryConflictIncomingButton.getSelection()) return ISVNConflictResolver.Choice.chooseTheirsFull; else if (binaryConflictUserButton.getSelection()) return ISVNConflictResolver.Choice.chooseMineFull; else if (binaryConflictMarkButton.getSelection()) return ISVNConflictResolver.Choice.postpone; else return ISVNConflictResolver.Choice.chooseMerged; } public int getPropertyConflictHandling() { if (propertyConflictMarkButton.getSelection()) return ISVNConflictResolver.Choice.postpone; else return ISVNConflictResolver.Choice.chooseMerged; } public void setMessage() { setMessage(Policy.bind("SwitchDialog.message")); //$NON-NLS-1$ } private boolean canFinish() { setErrorMessage(null); if (!(urlCombo.getText().length() > 0 && (headButton.getSelection() || (revisionText.getText().trim().length() > 0)))) return false; if (depthCombo.getText().equals(ISVNUIConstants.DEPTH_EXCLUDE)) { if (commonRoot == null || !urlCombo.getText().equals(commonRoot)) { setErrorMessage(Policy.bind("SwitchDialog.excludeAndSwitchError")); //$NON-NLS-1$ return false; } } return true; } public SVNRevision getRevision() { return revision; } public SVNUrl[] getUrls() { return urls; } private String getCommonRoot() { ArrayList urlList = new ArrayList(); for (IResource resource : resources) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resource); try { String anUrl = svnResource.getStatus().getUrlString(); if (anUrl != null) urlList.add(anUrl); } catch (SVNException e1) {} } urlStrings = new String[urlList.size()]; urlList.toArray(urlStrings); if (urlStrings.length == 0) return null; String urlString = urlStrings[0]; if (urlStrings.length == 1) return urlString; String commonRoot = null; tag1: for (int i = 0; i < urlString.length(); i++) { String partialPath = urlString.substring(0, i+1); if (partialPath.endsWith("/")) { //$NON-NLS-1$ for (int j = 1; j < urlStrings.length; j++) { if (!urlStrings[j].startsWith(partialPath)) break tag1; } commonRoot = partialPath.substring(0, i); } } switchResources = new SwitchResource[resources.length]; for (int i = 0; i < resources.length; i++) { switchResources[i] = new SwitchResource(resources[i], urlStrings[i].substring(commonRoot.length() + 1)); } return commonRoot; } private class SwitchResource implements IAdaptable { private IResource resource; private String partialPath; public SwitchResource(IResource resource, String partialPath) { this.resource = resource; this.partialPath = partialPath; } public IResource getResource() { return resource; } public String getPartialPath() { return partialPath; } @SuppressWarnings("rawtypes") public Object getAdapter(Class adapter) { if (IResource.class == adapter) return resource; return null; } } class SwitchLabelProvider extends LabelProvider implements ITableLabelProvider { WorkbenchLabelProvider workbenchLabelProvider = new WorkbenchLabelProvider(); public String getColumnText(Object element, int columnIndex) { return getText(element); } public String getText(Object element) { SwitchResource switchResource = (SwitchResource)element; return switchResource.getPartialPath() + " [" + urlCombo.getText() + "/" + switchResource.getPartialPath() + "]"; //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ } public Image getColumnImage(Object element, int columnIndex) { return getImage(element); } public Image getImage(Object element) { SwitchResource switchResource = (SwitchResource)element; return workbenchLabelProvider.getImage(switchResource.getResource()); } } class SwitchContentProvider implements IStructuredContentProvider { public void dispose() { } public void inputChanged(Viewer viewer, Object oldInput, Object newInput) { } public Object[] getElements(Object obj) { return switchResources; } } class TableDecoratingLabelProvider extends DecoratingLabelProvider implements ITableLabelProvider { ITableLabelProvider provider; ILabelDecorator decorator; public TableDecoratingLabelProvider(ILabelProvider provider, ILabelDecorator decorator) { super(provider, decorator); this.provider = (ITableLabelProvider) provider; this.decorator = decorator; } public Image getColumnImage(Object element, int columnIndex) { Image image = provider.getColumnImage(element, columnIndex); if (decorator != null) { Image decorated = decorator.decorateImage(image, element); if (decorated != null) { return decorated; } } return image; } public String getColumnText(Object element, int columnIndex) { String text = provider.getColumnText(element, columnIndex); return text; } } public void createButtonsForButtonBar(Composite parent, SvnWizardDialog wizardDialog) { } public int getDepth() { return depth; } public boolean isSetDepth() { return setDepth; } public boolean isIgnoreExternals() { return ignoreExternals; } public boolean isForce() { return force; } public boolean isIgnoreAncestry() { return ignoreAncestry; } } SvnWizardUpdatePage.java000066400000000000000000000376521203611042400433650ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/dialogspackage org.tigris.subversion.subclipse.ui.wizards.dialogs; import java.text.ParseException; import java.util.ArrayList; import org.eclipse.core.resources.IResource; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.events.SelectionListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Text; import org.tigris.subversion.subclipse.core.ISVNCoreConstants; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRemoteResource; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.history.ILogEntry; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.DepthComboHelper; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.conflicts.SVNConflictResolver; import org.tigris.subversion.subclipse.ui.dialogs.HistoryDialog; import org.tigris.subversion.svnclientadapter.ISVNConflictResolver; import org.tigris.subversion.svnclientadapter.SVNRevision; import org.tigris.subversion.svnclientadapter.SVNUrl; public class SvnWizardUpdatePage extends SvnWizardDialogPage { private static final int REVISION_WIDTH_HINT = 40; private IResource[] resources; private Text revisionText; private Button logButton; private Button headButton; private Combo depthCombo; private Button setDepthButton; private Button ignoreExternalsButton; private Button forceButton; private Button textConflictPromptButton; private Button textConflictMarkButton; private Button propertyConflictPromptButton; private Button propertyConflictMarkButton; private Button binaryConflictPromptButton; private Button binaryConflictMarkButton; private Button binaryConflictUserButton; private Button binaryConflictIncomingButton; private SVNConflictResolver conflictResolver; private SVNRevision revision; private int depth; private boolean setDepth; private boolean ignoreExternals; private boolean force; private String[] urlStrings; private String commonRoot; private long defaultRevision; public SvnWizardUpdatePage(IResource[] resources) { super("UpdateDialogWithConflictHandling", Policy.bind("UpdateDialog.title")); //$NON-NLS-1$ //$NON-NLS-2$ this.resources = resources; } public SvnWizardUpdatePage(String name, IResource[] resources) { super(name, Policy.bind("UpdateDialog.title")); //$NON-NLS-1$ this.resources = resources; } public void createButtonsForButtonBar(Composite parent, SvnWizardDialog wizardDialog) {} public void createControls(Composite parent) { commonRoot = getCommonRoot(); Composite composite = new Composite(parent, SWT.NULL); GridLayout layout = new GridLayout(); layout.marginHeight = 0; layout.marginWidth = 0; composite.setLayout(layout); GridData data = new GridData(GridData.FILL_BOTH); composite.setLayoutData(data); final Composite revisionGroup = new Composite(composite, SWT.NULL); GridLayout revisionLayout = new GridLayout(); revisionLayout.numColumns = 3; revisionLayout.marginWidth = 0; revisionLayout.marginHeight = 0; revisionGroup.setLayout(revisionLayout); data = new GridData(SWT.FILL, SWT.FILL, true, false); revisionGroup.setLayoutData(data); headButton = new Button(revisionGroup, SWT.CHECK); headButton.setText(Policy.bind("SvnWizardUpdatePage.head")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 3; headButton.setLayoutData(data); headButton.setSelection(true); if (commonRoot == null) headButton.setEnabled(false); Label revisionLabel = new Label(revisionGroup, SWT.NONE); revisionLabel.setText(Policy.bind("SvnWizardUpdatePage.revision")); //$NON-NLS-1$ revisionText = new Text(revisionGroup, SWT.BORDER); data = new GridData(); data.widthHint = REVISION_WIDTH_HINT; revisionText.setLayoutData(data); revisionText.setEnabled(false); if (defaultRevision > 0) { revisionText.setText(Long.toString(defaultRevision)); } revisionText.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(canFinish()); } }); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; revisionText.addFocusListener(focusListener); logButton = new Button(revisionGroup, SWT.PUSH); logButton.setText(Policy.bind("MergeDialog.showLog")); //$NON-NLS-1$ logButton.setEnabled(false); logButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { showLog(); } }); SelectionListener listener = new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { revisionText.setEnabled(!headButton.getSelection()); logButton.setEnabled(!headButton.getSelection()); setPageComplete(canFinish()); if (!headButton.getSelection()) { revisionText.selectAll(); revisionText.setFocus(); } } }; headButton.addSelectionListener(listener); Group parameterGroup = new Group(composite, SWT.NULL); GridLayout parameterLayout = new GridLayout(); parameterLayout.numColumns = 2; parameterGroup.setLayout(parameterLayout); data = new GridData(SWT.FILL, SWT.FILL, true, false, 3, 1); parameterGroup.setLayoutData(data); Label depthLabel = new Label(parameterGroup, SWT.NONE); depthLabel.setText(Policy.bind("SvnDialog.depth")); //$NON-NLS-1$ depthCombo = new Combo(parameterGroup, SWT.READ_ONLY); String defaultDepth; switch (depth) { case ISVNCoreConstants.DEPTH_EMPTY: defaultDepth = ISVNUIConstants.DEPTH_EMPTY; break; case ISVNCoreConstants.DEPTH_EXCLUDE: defaultDepth = ISVNUIConstants.DEPTH_EXCLUDE; break; case ISVNCoreConstants.DEPTH_FILES: defaultDepth = ISVNUIConstants.DEPTH_FILES; break; case ISVNCoreConstants.DEPTH_IMMEDIATES: defaultDepth = ISVNUIConstants.DEPTH_IMMEDIATES; break; case ISVNCoreConstants.DEPTH_INFINITY: defaultDepth = ISVNUIConstants.DEPTH_INFINITY; break; default: defaultDepth = ISVNUIConstants.DEPTH_UNKNOWN; break; } DepthComboHelper.addDepths(depthCombo, true, true, defaultDepth); depthCombo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent evt) { if (depthCombo.getText().equals(ISVNUIConstants.DEPTH_EXCLUDE)) { setDepthButton.setSelection(true); setDepthButton.setEnabled(false); ignoreExternalsButton.setVisible(false); forceButton.setVisible(false); revisionGroup.setVisible(false); } else { setDepthButton.setEnabled(true); ignoreExternalsButton.setVisible(true); forceButton.setVisible(true); revisionGroup.setVisible(true); } setPageComplete(canFinish()); } }); setDepthButton = new Button(parameterGroup, SWT.CHECK); setDepthButton.setText(Policy.bind("SvnDialog.setDepth")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; setDepthButton.setLayoutData(data); setDepthButton.setSelection(setDepth); ignoreExternalsButton = new Button(parameterGroup, SWT.CHECK); ignoreExternalsButton.setText(Policy.bind("SvnDialog.ignoreExternals")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; ignoreExternalsButton.setLayoutData(data); forceButton = new Button(parameterGroup, SWT.CHECK); forceButton.setText(Policy.bind("SvnDialog.force")); //$NON-NLS-1$ data = new GridData(); data.horizontalSpan = 2; forceButton.setLayoutData(data); forceButton.setSelection(true); Group conflictGroup = new Group(composite, SWT.NONE); conflictGroup.setText(Policy.bind("SvnWizardUpdatePage.0")); //$NON-NLS-1$ GridLayout conflictLayout = new GridLayout(); conflictLayout.numColumns = 1; conflictGroup.setLayout(conflictLayout); conflictGroup.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); Group textGroup = new Group(conflictGroup, SWT.NONE); textGroup.setText(Policy.bind("SvnWizardUpdatePage.1")); //$NON-NLS-1$ GridLayout textLayout = new GridLayout(); textLayout.numColumns = 1; textGroup.setLayout(textLayout); textGroup.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); textConflictPromptButton = new Button(textGroup, SWT.RADIO); textConflictPromptButton.setText(Policy.bind("SvnWizardUpdatePage.2")); //$NON-NLS-1$ textConflictMarkButton = new Button(textGroup, SWT.RADIO); textConflictMarkButton.setText(Policy.bind("SvnWizardUpdatePage.3")); //$NON-NLS-1$ Group binaryGroup = new Group(conflictGroup, SWT.NONE); binaryGroup.setText(Policy.bind("SvnWizardUpdatePage.4")); //$NON-NLS-1$ GridLayout binaryLayout = new GridLayout(); binaryLayout.numColumns = 1; binaryGroup.setLayout(binaryLayout); binaryGroup.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); binaryConflictPromptButton = new Button(binaryGroup, SWT.RADIO); binaryConflictPromptButton.setText(Policy.bind("SvnWizardUpdatePage.5")); //$NON-NLS-1$ binaryConflictMarkButton = new Button(binaryGroup, SWT.RADIO); binaryConflictMarkButton.setText(Policy.bind("SvnWizardUpdatePage.6")); //$NON-NLS-1$ binaryConflictUserButton = new Button(binaryGroup, SWT.RADIO); binaryConflictUserButton.setText(Policy.bind("SvnWizardUpdatePage.7")); //$NON-NLS-1$ binaryConflictIncomingButton = new Button(binaryGroup, SWT.RADIO); binaryConflictIncomingButton.setText(Policy.bind("SvnWizardUpdatePage.8")); //$NON-NLS-1$ Group propertyGroup = new Group(conflictGroup, SWT.NONE); propertyGroup.setText(Policy.bind("SvnWizardUpdatePage.9")); //$NON-NLS-1$ GridLayout propertyLayout = new GridLayout(); propertyLayout.numColumns = 1; propertyGroup.setLayout(propertyLayout); propertyGroup.setLayoutData( new GridData(GridData.GRAB_HORIZONTAL | GridData.HORIZONTAL_ALIGN_FILL)); propertyConflictPromptButton = new Button(propertyGroup, SWT.RADIO); propertyConflictPromptButton.setText(Policy.bind("SvnWizardUpdatePage.10")); //$NON-NLS-1$ propertyConflictMarkButton = new Button(propertyGroup, SWT.RADIO); propertyConflictMarkButton.setText(Policy.bind("SvnWizardUpdatePage.11")); //$NON-NLS-1$ textConflictMarkButton.setSelection(true); binaryConflictMarkButton.setSelection(true); propertyConflictMarkButton.setSelection(true); setPageComplete(canFinish()); } public String getWindowTitle() { return Policy.bind("UpdateDialog.update"); //$NON-NLS-1$ } public boolean performCancel() { return true; } public boolean performFinish() { if (headButton.getSelection()) revision = SVNRevision.HEAD; else { try { revision = SVNRevision.getRevision(revisionText.getText().trim()); } catch (ParseException e1) { MessageDialog.openError(getShell(), Policy.bind("UpdateDialog.title"), Policy.bind("UpdateDialog.invalid")); //$NON-NLS-1$ //$NON-NLS-2$ return false; } } setDepth = setDepthButton.getSelection(); ignoreExternals = ignoreExternalsButton.getSelection(); force = forceButton.getSelection(); depth = DepthComboHelper.getDepth(depthCombo); conflictResolver = new SVNConflictResolver(resources[0], getTextConflictHandling(), getBinaryConflictHandling(), getPropertyConflictHandling()); return true; } public void saveSettings() {} public SVNConflictResolver getConflictResolver() { return conflictResolver; } public int getTextConflictHandling() { if (textConflictMarkButton.getSelection()) return ISVNConflictResolver.Choice.postpone; else return ISVNConflictResolver.Choice.chooseMerged; } public int getBinaryConflictHandling() { if (binaryConflictIncomingButton.getSelection()) return ISVNConflictResolver.Choice.chooseTheirsFull; else if (binaryConflictUserButton.getSelection()) return ISVNConflictResolver.Choice.chooseMineFull; else if (binaryConflictMarkButton.getSelection()) return ISVNConflictResolver.Choice.postpone; else return ISVNConflictResolver.Choice.chooseMerged; } public int getPropertyConflictHandling() { if (propertyConflictMarkButton.getSelection()) return ISVNConflictResolver.Choice.postpone; else return ISVNConflictResolver.Choice.chooseMerged; } public void setMessage() { setMessage(Policy.bind("UpdateDialog.message")); //$NON-NLS-1$ } public void setDefaultRevision(long defaultRevision) { this.defaultRevision = defaultRevision; } public void setDepth(int depth) { this.depth = depth; } public void setSetDepth(boolean setDepth) { this.setDepth = setDepth; } private boolean canFinish() { return headButton.getSelection() || revisionText.getText().trim().length() > 0; } protected void showLog() { ISVNRemoteResource remoteResource = null; try { remoteResource = SVNWorkspaceRoot.getSVNResourceFor(resources[0]).getRepository().getRemoteFile(new SVNUrl(commonRoot)); } catch (Exception e) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.showLog"), e.toString()); //$NON-NLS-1$ return; } if (remoteResource == null) { MessageDialog.openError(getShell(), Policy.bind("MergeDialog.showLog"), Policy.bind("MergeDialog.urlError") + " " + commonRoot); //$NON-NLS-1$ //$NON-NLS-2$ //$NON-NLS-3$ return; } HistoryDialog dialog = new HistoryDialog(getShell(), remoteResource); if (dialog.open() == HistoryDialog.CANCEL) return; ILogEntry[] selectedEntries = dialog.getSelectedLogEntries(); if (selectedEntries.length == 0) return; revisionText.setText(Long.toString(selectedEntries[selectedEntries.length - 1].getRevision().getNumber())); setPageComplete(canFinish()); } private String getCommonRoot() { ArrayList urlList = new ArrayList(); for (int i = 0; i < resources.length; i++) { ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resources[i]); try { String anUrl = svnResource.getStatus().getUrlString(); if (anUrl != null) urlList.add(anUrl); } catch (SVNException e1) {} } urlStrings = new String[urlList.size()]; urlList.toArray(urlStrings); if (urlStrings.length == 0) return null; String urlString = urlStrings[0]; if (urlStrings.length == 1) return urlString; String commonRoot = null; tag1: for (int i = 0; i < urlString.length(); i++) { String partialPath = urlString.substring(0, i+1); if (partialPath.endsWith("/")) { //$NON-NLS-1$ for (int j = 1; j < urlStrings.length; j++) { if (!urlStrings[j].startsWith(partialPath)) break tag1; } commonRoot = partialPath.substring(0, i); } } return commonRoot; } public SVNRevision getRevision() { return revision; } public int getDepth() { return depth; } public boolean isSetDepth() { return setDepth; } public boolean isIgnoreExternals() { return ignoreExternals; } public boolean isForce() { return force; } } 000077500000000000000000000000001203611042400376175ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/generatediffGenerateDiffFileOperation.java000066400000000000000000000312301203611042400454650ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/generatediff/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards.generatediff; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Arrays; import java.util.HashMap; import java.util.HashSet; import java.util.Hashtable; import java.util.Iterator; import java.util.List; import java.util.Map; import java.util.Set; import java.util.Map.Entry; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.swt.dnd.Clipboard; import org.eclipse.swt.dnd.TextTransfer; import org.eclipse.swt.dnd.Transfer; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.RepositoryProvider; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNLocalResource; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNTeamProvider; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.svnclientadapter.ISVNClientAdapter; import org.tigris.subversion.svnclientadapter.SVNClientException; /** * An operation to run the SVN diff operation on a set of resources. The result * of the diff is written to a file. If there are no differences found, the user * is notified and the output file is not created. */ public class GenerateDiffFileOperation implements IRunnableWithProgress { private static String ECLIPSE_PATCH_HEADER = "### Eclipse Workspace Patch 1.0"; //$NON-NLS-1$ private static String ECLIPSE_PROJECT_MARKER = "#P "; //$NON-NLS-1$ private static String EOL = System.getProperty("line.separator"); private File outputFile; private IResource[] resources; private IResource[] unaddedResources; private Shell shell; private boolean recursive; private boolean toClipboard; private ArrayList newFiles; private IResource[] selectedResources; private final boolean eclipseFormat; private final boolean projectRelative; GenerateDiffFileOperation(IResource[] resources, IResource[] unaddedResources, File file, boolean toClipboard, boolean recursive, boolean eclipseFormat, boolean projectRelative, Shell shell) { this.resources = resources; this.unaddedResources = unaddedResources; this.outputFile = file; this.eclipseFormat = eclipseFormat; this.projectRelative = projectRelative; this.shell = shell; this.recursive = recursive; this.toClipboard = toClipboard; } /** * Convenience method that maps the given resources to their providers. * The returned Hashtable has keys which are ITeamProviders, and values * which are Lists of IResources that are shared with that provider. * * @return a hashtable mapping providers to their resources */ protected Hashtable getProviderMapping(IResource[] resources) { Hashtable result = new Hashtable(); for (int i = 0; i < resources.length; i++) { RepositoryProvider provider = RepositoryProvider.getProvider(resources[i].getProject()); List list = (List)result.get(provider); if (list == null) { list = new ArrayList(); result.put(provider, list); } list.add(resources[i]); } return result; } /** * @see IRunnableWithProgress#run(IProgressMonitor) */ public void run(IProgressMonitor monitor) throws InvocationTargetException { ISVNClientAdapter svnClient = null; ISVNRepositoryLocation repository = null; try { monitor.beginTask("", 500); //$NON-NLS-1$ monitor.setTaskName( Policy.bind("GenerateSVNDiff.working")); //$NON-NLS-1$ OutputStream os; if(toClipboard) { os = new ByteArrayOutputStream(); } else { os = new FileOutputStream(outputFile); } File tmpFile = File.createTempFile("sub",""); //$NON-NLS-1$ //$NON-NLS-2$ tmpFile.deleteOnExit(); ISVNLocalResource svnResource = SVNWorkspaceRoot.getSVNResourceFor(resources[0]); newFiles = new ArrayList(); if(unaddedResources.length > 0) { // Display.getDefault().syncExec(new Runnable() { // public void run() { // DiffNewFilesDialog dialog = new DiffNewFilesDialog(shell,unaddedResources); // boolean revert = (dialog.open() == RevertDialog.OK); // if (revert) { // newFiles.addAll(Arrays.asList(dialog.getSelectedResources())); // } // } // }); for (int i = 0; i < unaddedResources.length; i++) newFiles.add(unaddedResources[i]); if(newFiles.size() > 0) { try { // associate the resources with their respective RepositoryProvider Hashtable table = getProviderMapping((IResource[])newFiles.toArray(new IResource[newFiles.size()])); Set keySet = table.keySet(); Iterator iterator = keySet.iterator(); while (iterator.hasNext()) { IProgressMonitor subMonitor = Policy.subMonitorFor(monitor, 100); SVNTeamProvider provider = (SVNTeamProvider)iterator.next(); List list = (List)table.get(provider); IResource[] providerResources = (IResource[])list.toArray(new IResource[list.size()]); provider.add(providerResources, IResource.DEPTH_INFINITE, subMonitor); } } catch (TeamException e) { throw new InvocationTargetException(e); } } } repository = svnResource.getRepository(); svnClient = repository.getSVNClient(); try { monitor.worked(100); File[] files = getVersionedFiles(); if (selectedResources == null) svnClient.diff(files,tmpFile,recursive); else { if (eclipseFormat) { HashSet includedResources = new HashSet(); includedResources.addAll(Arrays.asList(unaddedResources)); includedResources.addAll(Arrays.asList(resources)); createEclipsePatch((IResource[]) includedResources.toArray(new IResource[0]), tmpFile, recursive); } else { File relativeToPath = null; if (projectRelative) { relativeToPath = selectedResources[0].getProject().getLocation().toFile(); } else { relativeToPath = getRelativeToPath(); if (relativeToPath.isFile()) { relativeToPath = relativeToPath.getParentFile(); } } svnClient.createPatch(files, relativeToPath, tmpFile, recursive); } } monitor.worked(300); InputStream is = new FileInputStream(tmpFile); byte[] buffer = new byte[30000]; int length; while ((length = is.read(buffer)) != -1) { os.write(buffer,0,length); } } finally { os.close(); } if(newFiles.size() > 0) { for (int i = 0; i < newFiles.size(); i++) { IResource resource = (IResource) newFiles.get(i); try { SVNWorkspaceRoot.getSVNResourceFor(resource).revert(); } catch (Exception e) {} } } boolean emptyDiff = false; if(toClipboard) { final ByteArrayOutputStream baos = (ByteArrayOutputStream)os; if(baos.size() == 0) { emptyDiff = true; } else { Display.getDefault().syncExec(new Runnable() { public void run() { TextTransfer plainTextTransfer = TextTransfer.getInstance(); Clipboard clipboard= new Clipboard(shell.getDisplay()); clipboard.setContents( new String[]{baos.toString()}, new Transfer[]{plainTextTransfer}); clipboard.dispose(); } }); } } else { if(outputFile.length() == 0) { emptyDiff = true; outputFile.delete(); } } // check for empty diff and report if (emptyDiff) { Display.getDefault().syncExec(new Runnable() { public void run() { MessageDialog.openInformation( shell, Policy.bind("GenerateSVNDiff.noDiffsFoundTitle"), //$NON-NLS-1$ Policy.bind("GenerateSVNDiff.noDiffsFoundMsg")); //$NON-NLS-1$ } }); } } catch (Exception e) { throw new InvocationTargetException(e); } finally { if (repository != null) { repository.returnSVNClient(svnClient); } monitor.done(); } } private File getRelativeToPath() { if (selectedResources.length == 1) { return new File(selectedResources[0].getLocation().toString()); } String commonRoot = null; String path = selectedResources[0].getLocation().toString(); tag1: for (int i = 0; i < path.length(); i++) { String partialPath = path.substring(0, i+1); if (partialPath.endsWith("/") || partialPath.endsWith("\\")) { for (int j = 1; j < selectedResources.length; j++) { if (!selectedResources[j].getLocation().toString().startsWith(partialPath)) break tag1; } commonRoot = partialPath.substring(0, i); } } if (commonRoot != null) return new File(commonRoot); return null; } private File[] getVersionedFiles() { ArrayList versionedFileList = new ArrayList(); ArrayList unaddedResourceList = new ArrayList(); for (int i = 0; i < unaddedResources.length; i++) unaddedResourceList.add(unaddedResources[i]); for (int i = 0; i < resources.length; i++) { if (!containsResource(unaddedResourceList, resources[i]) || containsResource(newFiles, resources[i])) versionedFileList.add(new File(resources[i].getLocation().toOSString())); } File[] files = new File[versionedFileList.size()]; versionedFileList.toArray(files); return files; } private boolean containsResource(ArrayList list, IResource resource) { if (list.contains(resource)) return true; IResource parent = resource; while (parent != null) { parent = parent.getParent(); if (list.contains(parent)) return true; } return false; } public void setSelectedResources(IResource[] selectedResources) { this.selectedResources = selectedResources; } private void createEclipsePatch(IResource[] paths, File outputFile, boolean recurse) throws SVNClientException { FileOutputStream os = null; InputStream is = null; ISVNClientAdapter client = null; ISVNRepositoryLocation repository = null; try { byte[] buffer = new byte[4096]; os = new FileOutputStream(outputFile); if (paths.length > 0) { os.write(ECLIPSE_PATCH_HEADER.getBytes()); os.write(EOL.getBytes()); } Map projectToResources = new HashMap(); for (int i = 0; i < paths.length; i++) { IResource resource = paths[i]; IProject project = resource.getProject(); List files = (List) projectToResources.get(project); if (files == null) { files = new ArrayList(); projectToResources.put(project, files); } files.add(resource.getLocation().toFile()); } for (Iterator iEntry = projectToResources.entrySet().iterator(); iEntry.hasNext();) { Entry entry = (Entry) iEntry.next(); IResource project = (IResource) entry.getKey(); List files = (List) entry.getValue(); repository = SVNWorkspaceRoot.getSVNResourceFor(project).getRepository(); client = repository.getSVNClient(); os.write(ECLIPSE_PROJECT_MARKER.getBytes()); os.write(project.getName().getBytes()); os.write(EOL.getBytes()); File tempFile = File.createTempFile("tempDiff", ".txt"); tempFile.deleteOnExit(); client.createPatch((File[]) files.toArray(new File[files.size()]), project.getLocation().toFile(), tempFile, recurse); SVNWorkspaceRoot.getSVNResourceFor(project).getRepository().returnSVNClient(client); client = null; repository = null; try { is = new FileInputStream(tempFile); int bytes_read; while ((bytes_read = is.read(buffer)) != -1) os.write(buffer, 0, bytes_read); } finally { if (is != null) try {is.close();} catch (IOException e) {} } } } catch (Exception e) { throw new SVNClientException(e); } finally { if (os != null) try {os.close();} catch (IOException e) {} if (repository != null) { repository.returnSVNClient(client); } } } } GenerateDiffFileWizard.java000066400000000000000000000165271203611042400450010ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/generatediff/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards.generatediff; import java.io.File; import java.lang.reflect.InvocationTargetException; import java.net.MalformedURLException; import java.net.URL; import java.util.ArrayList; import java.util.HashMap; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.Wizard; import org.eclipse.ui.IWorkbench; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; /** * A wizard for creating a patch file by running the SVN diff command. */ public class GenerateDiffFileWizard extends Wizard { private PatchFileSelectionPage mainPage; private IStructuredSelection selection; private IResource[] unaddedResources; private HashMap statusMap; private IResource[] selectedResources; private OptionsPage optionsPage; // end of PatchFileCreationOptionsPage public GenerateDiffFileWizard(IStructuredSelection selection, IResource[] unaddedResources, HashMap statusMap) { super(); this.selection = selection; this.unaddedResources = unaddedResources; this.statusMap = statusMap; setWindowTitle(Policy.bind("GenerateSVNDiff.title")); //$NON-NLS-1$ initializeDefaultPageImageDescriptor(); } public void addPages() { String pageTitle = Policy.bind("GenerateSVNDiff.pageTitle"); //$NON-NLS-1$ String pageDescription = Policy.bind("GenerateSVNDiff.pageDescription"); //$NON-NLS-1$ mainPage = new PatchFileSelectionPage(pageTitle, pageTitle, SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_DIFF), selection, statusMap); mainPage.setDescription(pageDescription); pageTitle = Policy.bind("GenerateSVNDiff.AdvancedOptions"); //$NON-NLS-1$ pageDescription = Policy.bind("GenerateSVNDiff.ConfigureOptions"); //$NON-NLS-1$ optionsPage = new OptionsPage(pageTitle, pageTitle, SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_DIFF)); optionsPage.setDescription(pageDescription); addPage(mainPage); addPage(optionsPage); } /** * Initializes this creation wizard using the passed workbench and * object selection. * * @param workbench the current workbench * @param selection the current object selection */ public void init(IWorkbench workbench, IStructuredSelection selection) { } /** * Declares the wizard banner iamge descriptor */ protected void initializeDefaultPageImageDescriptor() { String iconPath; iconPath = "icons/full/"; //$NON-NLS-1$ try { URL installURL = SVNUIPlugin.getPlugin().getBundle().getEntry("/"); //$NON-NLS-1$ URL url = new URL(installURL, iconPath + "wizards/newconnect_wiz.gif"); //$NON-NLS-1$ ImageDescriptor desc = ImageDescriptor.createFromURL(url); setDefaultPageImageDescriptor(desc); } catch (MalformedURLException e) { // Should not happen. Ignore. } } /* (Non-javadoc) * Method declared on IWizard. */ public boolean needsProgressMonitor() { return true; } /** * Completes processing of the wizard. If this method returns * true, the wizard will close; otherwise, it will stay active. */ public boolean performFinish() { String fs = mainPage.getFilesystemFile(); IFile ws = mainPage.getWorkspaceFile(); int type = mainPage.getSaveType(); boolean eclipseFormat = optionsPage.isMultiPatch(); boolean projectRelative = optionsPage.isProjectRelative(); try { if(type != mainPage.CLIPBOARD) { File file = new File(fs!=null ? fs : ws.getLocation().toOSString()); if (file.exists()) { // prompt then delete String title = Policy.bind("GenerateSVNDiff.overwriteTitle"); //$NON-NLS-1$ String msg = Policy.bind("GenerateSVNDiff.overwriteMsg"); //$NON-NLS-1$ final MessageDialog dialog = new MessageDialog(getShell(), title, null, msg, MessageDialog.QUESTION, new String[] { IDialogConstants.YES_LABEL, IDialogConstants.CANCEL_LABEL }, 0); dialog.open(); if (dialog.getReturnCode() != 0) { // cancel return false; } } GenerateDiffFileOperation generateDiffFileOperation = new GenerateDiffFileOperation(getResources(), getUnaddedResources(), file, false, false, eclipseFormat, projectRelative, getShell()); generateDiffFileOperation.setSelectedResources(selectedResources); getContainer().run(true, true, generateDiffFileOperation); if(type==mainPage.WORKSPACE) { ws.getParent().refreshLocal(IResource.DEPTH_ONE, null); } } else { GenerateDiffFileOperation generateDiffFileOperation = new GenerateDiffFileOperation(getResources(), getUnaddedResources(), null, true, false, eclipseFormat, projectRelative, getShell()); generateDiffFileOperation.setSelectedResources(selectedResources); getContainer().run(true, true, generateDiffFileOperation); } return true; } catch (InterruptedException e1) { return true; } catch(CoreException e) { SVNUIPlugin.openError(getShell(), Policy.bind("GenerateSVNDiff.error"), null, e); //$NON-NLS-1$ return false; } catch (InvocationTargetException e2) { SVNUIPlugin.openError(getShell(), Policy.bind("GenerateSVNDiff.error"), null, e2); //$NON-NLS-1$ return false; } } protected IResource[] getResources() { return mainPage.getSelectedResources(); } private IResource[] getUnaddedResources() { ArrayList unaddedResourceList = new ArrayList(); for (int i = 0; i < unaddedResources.length; i++) unaddedResourceList.add(unaddedResources[i]); ArrayList selectedUnaddedResourceList = new ArrayList(); IResource[] selectedResources = getResources(); for (int i = 0; i < selectedResources.length; i++) { if (unaddedResourceList.contains(selectedResources[i])) { selectedUnaddedResourceList.add(selectedResources[i]); } else { IResource unaddedParent = getUnaddedParent(selectedResources[i], unaddedResourceList); if (unaddedParent != null && !selectedUnaddedResourceList.contains(unaddedParent)) selectedUnaddedResourceList.add(unaddedParent); } } IResource[] unaddedResourceArray = new IResource[selectedUnaddedResourceList.size()]; selectedUnaddedResourceList.toArray(unaddedResourceArray); return unaddedResourceArray; } private IResource getUnaddedParent(IResource resource, ArrayList unaddedResourceList) { IResource parent = resource; while (parent != null) { parent = parent.getParent(); int index = unaddedResourceList.indexOf(parent); if (index != -1) return (IResource)unaddedResourceList.get(index); } return null; } public void setSelectedResources(IResource[] selectedResources) { this.selectedResources = selectedResources; } } OptionsPage.java000066400000000000000000000067011203611042400427160ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/generatediffpackage org.tigris.subversion.subclipse.ui.wizards.generatediff; import java.util.HashSet; import java.util.Set; import org.eclipse.core.resources.IResource; import org.eclipse.jface.dialogs.Dialog; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Group; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; public class OptionsPage extends WizardPage { /** * @param pageName * @param title * @param titleImage */ protected OptionsPage(String pageName, String title, ImageDescriptor titleImage) { super(pageName, title, titleImage); } /** The possible root of the patch */ public final static int ROOT_WORKSPACE = 1; public final static int ROOT_PROJECT = 2; public final static int ROOT_SELECTION = 3; private Button workspaceRelativeOption; //multi-patch format private Button projectRelativeOption; //full project path private Button selectionRelativeOption; //use path of whatever is selected /* * @see IDialogPage#createControl(Composite) */ public void createControl(Composite parent) { Composite composite= new Composite(parent, SWT.NULL); GridLayout layout= new GridLayout(); composite.setLayout(layout); composite.setLayoutData(new GridData()); setControl(composite); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.PATCH_OPTIONS_PAGE); //Unified Format Options Group unifiedGroup = new Group(composite, SWT.None); layout = new GridLayout(); unifiedGroup.setLayout(layout); GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL); unifiedGroup.setLayoutData(data); unifiedGroup.setText(Policy.bind("OptionsPage.patchRoot")); //$NON-NLS-1$ workspaceRelativeOption = new Button(unifiedGroup, SWT.RADIO); workspaceRelativeOption.setText(Policy.bind("OptionsPage.workspace")); //$NON-NLS-1$ workspaceRelativeOption.setSelection(true); projectRelativeOption = new Button(unifiedGroup, SWT.RADIO); projectRelativeOption.setText(Policy.bind("OptionsPage.project")); //$NON-NLS-1$ selectionRelativeOption = new Button(unifiedGroup, SWT.RADIO); selectionRelativeOption.setText(Policy.bind("OptionsPage.selection")); //$NON-NLS-1$ Dialog.applyDialogFont(parent); //check to see if this is a multi select patch, if so disable IResource[] tempResources = ((GenerateDiffFileWizard)this.getWizard()).getResources(); Set projects = new HashSet(); for (int i = 0; i < tempResources.length; i++) { projects.add(tempResources[i].getProject()); } if (projects.size() > 1) { projectRelativeOption.setEnabled(false); selectionRelativeOption.setEnabled(false); } workspaceRelativeOption.setSelection(true); } public boolean isProjectRelative() { return projectRelativeOption.getSelection(); } public boolean isMultiPatch() { return workspaceRelativeOption.getSelection(); } }PatchFileSelectionPage.java000066400000000000000000000315351203611042400447730ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/generatediff/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards.generatediff; import java.io.File; import java.io.IOException; import java.util.HashMap; import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IResource; import org.eclipse.core.resources.ResourcesPlugin; import org.eclipse.core.runtime.IPath; import org.eclipse.core.runtime.Path; import org.eclipse.jface.dialogs.IDialogConstants; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.CheckboxTreeViewer; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.wizard.WizardPage; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Text; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.util.ResourceSelectionTree; import org.tigris.subversion.subclipse.ui.util.WorkspaceDialog; /** * Page to select a patch file. Overriding validatePage was necessary to allow * entering a file name that already exists. */ class PatchFileSelectionPage extends WizardPage { private Text filenameCombo; private Button browseButton; private Button saveInFilesystem; private Button saveInWorkspace; private Button saveToClipboard; private ResourceSelectionTree resourceSelectionTree; private IResource[] resources; protected Text wsPathText; private Button wsBrowseButton; private boolean wsBrowsed = false; private HashMap statusMap; public final int CLIPBOARD = 1; public final int FILESYSTEM = 2; public final int WORKSPACE = 3; public PatchFileSelectionPage(String pageName, String title, ImageDescriptor image, IStructuredSelection selection, HashMap statusMap) { super(pageName, title, image); this.statusMap = statusMap; Object[] selectedResources = selection.toArray(); resources = new IResource[selectedResources.length]; for (int i = 0; i < selectedResources.length; i++) resources[i] = (IResource)selectedResources[i]; setPageComplete(false); } /** * Allow the user to finish if a valid file has been entered. */ protected boolean validatePage() { boolean valid = false; switch (getSaveType()) { case WORKSPACE: valid = validateWorkspaceLocation(); break; case FILESYSTEM: File file = new File(getFilesystemFile()); valid = isValidFile(file); break; case CLIPBOARD: valid = true; break; } // Avoid draw flicker by clearing error message // if all is valid. if (valid) { setMessage(null); setErrorMessage(null); } else { setErrorMessage(Policy.bind("GenerateSVNDiff.EnterFilename")); //$NON-NLS-1$ } setPageComplete(valid && getSelectedResources().length > 0); return valid; } private boolean isValidFile(File file) { if (!file.isAbsolute()) return false; if (file.isDirectory()) return false; File parent = file.getParentFile(); if (parent==null) return false; if (!parent.exists()) return false; if (!parent.isDirectory()) return false; if (!file.exists()) { try { if (!file.createNewFile()) { return false; } file.delete(); } catch (IOException e) { return false; } } return true; } /** * Answers a full path to a file system file or null if the user * selected to save the patch in the workspace. */ public String getFilesystemFile() { if(saveInFilesystem.getSelection()) { return filenameCombo.getText(); } return null; } /** * Answers a workspace file or null if the user selected to save * the patch outside of the workspace. */ public IFile getWorkspaceFile() { if(saveInWorkspace.getSelection() && wsPathText.getText().length() > 0) { return ResourcesPlugin.getWorkspace().getRoot().getFile(new Path(wsPathText.getText())); } return null; } /** * Allow the user to chose to save the patch to the workspace or outside * of the workspace. */ public void createControl(Composite parent) { Composite composite= new Composite(parent, SWT.NULL); GridLayout layout= new GridLayout(); composite.setLayout(layout); composite.setLayoutData(new GridData()); setControl(composite); initializeDialogUnits(composite); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.PATCH_SELECTION_PAGE); // Clipboard saveToClipboard= new Button(composite, SWT.RADIO); saveToClipboard.setText(Policy.bind("GenerateSVNDiff.SaveToClipboard")); //$NON-NLS-1$ saveToClipboard.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { validatePage(); updateEnablements(); } }); // File System saveInFilesystem= new Button(composite, SWT.RADIO); saveInFilesystem.setText(Policy.bind("GenerateSVNDiff.SaveInFileSystem")); //$NON-NLS-1$ saveInFilesystem.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { validatePage(); updateEnablements(); } }); Composite nameGroup = new Composite(composite,SWT.NONE); layout = new GridLayout(); layout.numColumns = 2; layout.marginWidth = 0; nameGroup.setLayout(layout); GridData data = new GridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.GRAB_HORIZONTAL); nameGroup.setLayoutData(data); filenameCombo= new Text(nameGroup, SWT.BORDER); GridData gd= new GridData(GridData.FILL_HORIZONTAL); filenameCombo.setLayoutData(gd); filenameCombo.addModifyListener(new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(validatePage()); } }); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; filenameCombo.addFocusListener(focusListener); browseButton = new Button(nameGroup, SWT.NULL); browseButton.setText(Policy.bind("GenerateSVNDiff.Browse")); //$NON-NLS-1$ data = new GridData(GridData.HORIZONTAL_ALIGN_END); data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); browseButton.setLayoutData(data); browseButton.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { FileDialog d = new FileDialog(getShell(), SWT.PRIMARY_MODAL | SWT.SAVE); d.setText(Policy.bind("GenerateSVNDiff.SavePatchAs")); //$NON-NLS-1$ d.setFileName(Policy.bind("GenerateSVNDiff.patchTxt")); //$NON-NLS-1$ String file = d.open(); if(file!=null) { IPath path = new Path(file); setFilesystemFilename(path.toOSString()); } } }); // Workspace saveInWorkspace= new Button(composite, SWT.RADIO); saveInWorkspace.setText(Policy.bind("GenerateSVNDiff.SaveInWorkspace")); //$NON-NLS-1$ saveInWorkspace.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { validatePage(); updateEnablements(); } }); final Composite pathGroup = new Composite(composite,SWT.NONE); layout = new GridLayout(); layout.numColumns = 2; layout.marginWidth = 0; pathGroup.setLayout(layout); data = new GridData(SWT.FILL, SWT.FILL, true, false); pathGroup.setLayoutData(data); wsPathText= new Text(pathGroup, SWT.BORDER); gd= new GridData(GridData.FILL_HORIZONTAL); gd.verticalAlignment = GridData.CENTER; gd.grabExcessVerticalSpace = false; gd.widthHint = IDialogConstants.ENTRY_FIELD_WIDTH; wsPathText.setLayoutData(gd); wsPathText.setEditable(false); wsBrowseButton = new Button(pathGroup, SWT.NULL); gd = new GridData(); gd.horizontalAlignment = GridData.FILL; int widthHint = convertHorizontalDLUsToPixels(IDialogConstants.BUTTON_WIDTH); gd.widthHint = Math.max(widthHint, wsBrowseButton.computeSize(SWT.DEFAULT, SWT.DEFAULT, true).x); wsBrowseButton.setLayoutData(gd); wsBrowseButton.setText(Policy.bind("GenerateSVNDiff.Browse")); //$NON-NLS-1$ wsBrowseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { final WorkspaceDialog dialog = new WorkspaceDialog(getShell(), Policy.bind("GenerateSVNDiff.workspaceDialogTitle"), Policy.bind("GenerateSVNDiff.workspaceDialogMessage"), SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_DIFF), wsPathText); //$NON-NLS-1$ //$NON-NLS-1$ wsBrowsed = true; dialog.open(); validatePage(); } }); // LabelProvider labelProvider = new SVNLightweightDecorator(); resourceSelectionTree = new ResourceSelectionTree(composite, SWT.NONE, Policy.bind("GenerateSVNDiff.Changes"), resources, statusMap, null, true, null, null); //$NON-NLS-1$ ((CheckboxTreeViewer)resourceSelectionTree.getTreeViewer()).setAllChecked(true); resourceSelectionTree.getTreeViewer().addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { validatePage(); } }); saveToClipboard.setSelection(true); validatePage(); updateEnablements(); } /** * Sets the file name in the file system text. */ protected void setFilesystemFilename(String filename) { filenameCombo.setText(filename); } public IResource[] getSelectedResources() { return resourceSelectionTree.getSelectedResources(); } /** * Enable and disable controls based on the selected radio button. */ protected void updateEnablements() { int type = getSaveType(); browseButton.setEnabled(type==FILESYSTEM); filenameCombo.setEnabled(type==FILESYSTEM); wsPathText.setEnabled(type == WORKSPACE); wsBrowseButton.setEnabled(type == WORKSPACE); if (type == WORKSPACE) wsBrowsed=false; } /** * Answers the type of the patch file destination. */ public int getSaveType() { if(saveInFilesystem.getSelection()) { return FILESYSTEM; } else if(saveToClipboard.getSelection()) { return CLIPBOARD; } else { return WORKSPACE; } } /** * The following conditions must hold for the file system location to be valid: * - a parent must be selected in the workspace tree view * - the resource name must be valid */ private boolean validateWorkspaceLocation() { int type = getSaveType(); //make sure that the field actually has a filename in it - making //sure that the user has had a chance to browse the workspace first if (wsPathText.getText().equals("")){ //$NON-NLS-1$ if (type ==WORKSPACE && wsBrowsed) setErrorMessage(Policy.bind("GenerateSVNDiff.validFileName")); //$NON-NLS-1$ return false; } //Make sure that all the segments but the last one (i.e. project + all //folders) exist - file doesn't have to exist. It may have happened that //some folder refactoring has been done since this path was last saved. // //Assume that the path will always be in format project/{folders}*/file - this //is controlled by the workspace location dialog IPath pathToWorkspaceFile = new Path(wsPathText.getText()); //Trim file name from path IPath containerPath = pathToWorkspaceFile.removeLastSegments(1); IResource container =ResourcesPlugin.getWorkspace().getRoot().findMember(containerPath); if (container == null) { if (type == WORKSPACE) setErrorMessage(Policy.bind("GenerateSVNDiff.validFileName")); //$NON-NLS-1$ return false; } return true; } }000077500000000000000000000000001203611042400366275ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/sharingCannotSharePage.java000066400000000000000000000016331203611042400424770ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/sharingpackage org.tigris.subversion.subclipse.ui.wizards.sharing; import org.eclipse.core.resources.IProject; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.widgets.Composite; import org.tigris.subversion.subclipse.ui.Messages; import org.tigris.subversion.subclipse.ui.wizards.SVNWizardPage; public class CannotSharePage extends SVNWizardPage { private IProject project; public CannotSharePage(String pageName, String title, ImageDescriptor titleImage, IProject project) { super(pageName, title, titleImage); this.project = project; } public void createControl(Composite parent) { Composite composite = createComposite(parent, 1); setControl(composite); createWrappingLabel(composite, Messages.CannotSharePage_2 + project.getName() + Messages.CannotSharePage_0, 0 /* indent */, 1 /* columns */); setErrorMessage(Messages.CannotSharePage_1); setPageComplete(false); } } ConfigurationWizardAutoconnectPage.java000066400000000000000000000111361203611042400464640ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/sharing/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards.sharing; import org.eclipse.core.resources.IProject; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Label; import org.eclipse.swt.widgets.Listener; import org.eclipse.team.core.TeamException; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.repo.SVNRepositoryLocation; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.wizards.SVNWizardPage; /** * This configuration page explains to the user that .svn/ directories already exists and * it will attach the selected project to the repository that is specified in the .svn/ files. * * This is useful for people who have checked out a project using command-line tools. */ public class ConfigurationWizardAutoconnectPage extends SVNWizardPage { private boolean validate = true; private LocalResourceStatus status; // the status of the project directory ISVNRepositoryLocation location; // the repository location of the project directory public ConfigurationWizardAutoconnectPage(String pageName, String title, ImageDescriptor titleImage, LocalResourceStatus status) { super(pageName, title, titleImage); this.status = status; } /* * @see IDialogPage#createControl(Composite) */ public void createControl(Composite parent) { Composite composite = createComposite(parent, 2); setControl(composite); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.SHARING_AUTOCONNECT_PAGE); Label description = createWrappingLabel(composite, Policy.bind("RepositorySelectionPage.description"), 0 /* indent */, 2 /* columns */); //$NON-NLS-1$ description.setText(Policy.bind("ConfigurationWizardAutoconnectPage.description")); //$NON-NLS-1$ if (location == null) return; // Spacer createLabel(composite, ""); //$NON-NLS-1$ createLabel(composite, ""); //$NON-NLS-1$ createLabel(composite, Policy.bind("ConfigurationWizardAutoconnectPage.user")); //$NON-NLS-1$ createLabel(composite, location.getUsername()); createLabel(composite, Policy.bind("ConfigurationWizardAutoconnectPage.host")); //$NON-NLS-1$ createLabel(composite, location.getUrl().toString()); // Spacer createLabel(composite, ""); //$NON-NLS-1$ createLabel(composite, ""); //$NON-NLS-1$ final Button check = new Button(composite, SWT.CHECK); GridData data = new GridData(); data.horizontalSpan = 2; check.setLayoutData(data); check.setText(Policy.bind("ConfigurationWizardAutoconnectPage.validate")); //$NON-NLS-1$ check.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { validate = check.getSelection(); } }); check.setSelection(true); } public boolean getValidate() { return validate; } /** * set the project that will be shared */ public void setProject(IProject project) { try { if (status == null) { // This should never happen SVNUIPlugin.openError(null, Policy.bind("ConfigurationWizardAutoconnectPage.noSyncInfo"), Policy.bind("ConfigurationWizardAutoconnectPage.noSVNDirectory"), null); //$NON-NLS-1$ //$NON-NLS-2$ return; } location = SVNRepositoryLocation.fromString(status.getUrlString()); } catch (TeamException e) { SVNUIPlugin.openError(null, null, null, e); } } /** * gets the status of the directory corresponding to the project */ public LocalResourceStatus getSharingStatus() { return status; } /** * Gets the repository location of the project * @return Returns a ISVNRepositoryLocation */ public ISVNRepositoryLocation getLocation() { return location; } } DirectorySelectionPage.java000066400000000000000000000203611203611042400441030ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/sharing/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards.sharing; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.SWT; import org.eclipse.swt.events.FocusAdapter; import org.eclipse.swt.events.FocusEvent; import org.eclipse.swt.events.FocusListener; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.layout.GridLayout; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Group; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Text; import org.eclipse.team.core.TeamException; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.dialogs.ChooseUrlDialog; import org.tigris.subversion.subclipse.ui.wizards.SVNWizardPage; /** * wizard page to select remote directory that will correpond to the project */ public class DirectorySelectionPage extends SVNWizardPage { private ISVNRepositoryLocationProvider repositoryLocationProvider; Button useProjectNameButton; Button useSpecifiedNameButton; Text text; Button browseButton; Text urlText; String result; boolean useProjectName = true; private String lastLocation; private IDialogSettings settings = SVNUIPlugin.getPlugin().getDialogSettings(); private static final String LAST_PARENT = "DirectorySelectionPage.lastParent_"; public DirectorySelectionPage(String pageName, String title, ImageDescriptor titleImage, ISVNRepositoryLocationProvider repositoryLocationProvider) { super(pageName, title, titleImage); this.repositoryLocationProvider = repositoryLocationProvider; } public void createControl(Composite parent) { Composite composite = createComposite(parent, 3); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.SHARING_MODULE_PAGE); useProjectNameButton = createRadioButton(composite, Policy.bind("ModuleSelectionPage.moduleIsProject"), 3); //$NON-NLS-1$ useSpecifiedNameButton = createRadioButton(composite, Policy.bind("ModuleSelectionPage.specifyModule"), 1); //$NON-NLS-1$ text = createTextField(composite); text.setEnabled(false); text.addListener(SWT.Modify, new Listener() { public void handleEvent(Event event) { setUrlText(); result = text.getText().trim(); if (result.length() == 0) { result = null; setPageComplete(false); } else { setPageComplete(true); } } }); FocusListener focusListener = new FocusAdapter() { public void focusGained(FocusEvent e) { ((Text)e.getSource()).selectAll(); } public void focusLost(FocusEvent e) { ((Text)e.getSource()).setText(((Text)e.getSource()).getText()); } }; text.addFocusListener(focusListener); browseButton = new Button(composite, SWT.PUSH); browseButton.setText(Policy.bind("SharingWizard.browse")); //$NON-NLS-1$ browseButton.setEnabled(false); browseButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent se) { try { ISVNRepositoryLocation repositoryLocation = repositoryLocationProvider.getLocation(); ChooseUrlDialog dialog = new ChooseUrlDialog(getShell(), repositoryLocationProvider.getProject()); dialog.setRepositoryLocation(repositoryLocation); if (dialog.open() == ChooseUrlDialog.OK && dialog.getUrl() != null) { text.setText(dialog.getUrl().toString().substring(repositoryLocation.getLocation().length() + 1) + "/" + repositoryLocationProvider.getProject().getName()); text.setFocus(); text.setSelection(text.getText().indexOf(repositoryLocationProvider.getProject().getName()), text.getText().length()); } } catch (Exception e) {} } }); Group urlGroup = new Group(composite, SWT.NONE); urlGroup.setText(Policy.bind("SharingWizard.url")); //$NON-NLS-1$ GridLayout layout = new GridLayout(); layout.numColumns = 1; urlGroup.setLayout(layout); GridData data = new GridData(); data.verticalAlignment = GridData.FILL; data.horizontalAlignment = GridData.FILL; data.horizontalSpan = 3; urlGroup.setLayoutData(data); urlText = createTextField(urlGroup); urlText.setEditable(false); initializeSelection(); setUrlText(); useProjectNameButton.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { setUrlText(); useProjectName = useProjectNameButton.getSelection(); if (useProjectName) { text.setEnabled(false); browseButton.setEnabled(false); result = null; setPageComplete(true); } else { text.setEnabled(true); text.setFocus(); text.selectAll(); browseButton.setEnabled(true); result = text.getText(); if (result.length() == 0) { result = null; setPageComplete(false); } else { setPageComplete(true); } } } }); setControl(composite); setPageComplete(true); } private void initializeSelection() { String lastParent = null; try { lastParent = settings.get(LAST_PARENT + repositoryLocationProvider.getLocation().getLocation()); if (lastParent != null && lastParent.length() > 0) { useSpecifiedNameButton.setSelection(true); useProjectNameButton.setSelection(false); text.setEnabled(true); text.setFocus(); browseButton.setEnabled(true); text.setText(lastParent + "/" + repositoryLocationProvider.getProject().getName()); text.setSelection(text.getText().indexOf(repositoryLocationProvider.getProject().getName()), text.getText().length()); } } catch (TeamException e1) {} if (lastParent == null) { useSpecifiedNameButton.setSelection(false); text.setText(""); text.setEnabled(false); browseButton.setEnabled(false); useProjectNameButton.setSelection(true); } } /** * null if "use Project name" */ public String getDirectoryName() { return result; } public boolean useProjectName() { return useProjectName; } public void setVisible(boolean visible) { super.setVisible(visible); if (visible) { if (useSpecifiedNameButton.getSelection()) { useSpecifiedNameButton.setFocus(); } else { useProjectNameButton.setFocus(); } try { String location = repositoryLocationProvider.getLocation().getLocation(); if (lastLocation == null || !lastLocation.equals(location)) { initializeSelection(); } lastLocation = location; } catch (TeamException e) {} setUrlText(); } } private void setUrlText() { try { if (useProjectNameButton.getSelection()) { urlText.setText(repositoryLocationProvider.getLocation().getLocation() + "/" + repositoryLocationProvider.getProject().getName()); settings.put(LAST_PARENT + repositoryLocationProvider.getLocation().getLocation(), ""); } else { urlText.setText(repositoryLocationProvider.getLocation().getLocation() + "/" + text.getText().trim()); int index = text.getText().lastIndexOf("/"); if (index == -1) { settings.put(LAST_PARENT + repositoryLocationProvider.getLocation().getLocation(), ""); } else { settings.put(LAST_PARENT + repositoryLocationProvider.getLocation().getLocation(), text.getText().substring(0, index)); } } } catch (Exception e) {} } } ISVNRepositoryLocationProvider.java000066400000000000000000000005651203611042400455630ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/sharingpackage org.tigris.subversion.subclipse.ui.wizards.sharing; import org.eclipse.core.resources.IProject; import org.eclipse.team.core.TeamException; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; public interface ISVNRepositoryLocationProvider { public ISVNRepositoryLocation getLocation() throws TeamException; public IProject getProject(); } RepositorySelectionPage.java000066400000000000000000000157301203611042400443220ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/sharing/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards.sharing; import java.lang.reflect.InvocationTargetException; import java.util.Arrays; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ISelectionChangedListener; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.viewers.SelectionChangedEvent; import org.eclipse.jface.viewers.StructuredSelection; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Event; import org.eclipse.swt.widgets.Listener; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.repo.RepositoryComparator; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.util.AdaptableList; import org.tigris.subversion.subclipse.ui.wizards.SVNWizardPage; /** * First wizard page for importing a project into a SVN repository. * This page prompts the user to select an existing repo or create a new one. * If the user selected an existing repo, then getLocation() will return it. */ public class RepositorySelectionPage extends SVNWizardPage { private TableViewer table; private Button useExistingRepo; private Button useNewRepo; private ISVNRepositoryLocation result; private ISVNRepositoryLocation[] locations; private IDialogSettings settings = SVNUIPlugin.getPlugin().getDialogSettings(); private static final String LAST_LOCATION = "RepositorySelectionPage.lastRepository"; /** * RepositorySelectionPage constructor. * * @param pageName the name of the page * @param title the title of the page * @param titleImage the image for the page */ public RepositorySelectionPage(String pageName, String title, ImageDescriptor titleImage) { super(pageName, title, titleImage); } /** * Creates the table for the repositories */ protected TableViewer createTable(Composite parent, int span) { Table table = new Table(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER | SWT.SINGLE | SWT.FULL_SELECTION); GridData data = new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL); data.horizontalSpan = span; table.setLayoutData(data); TableLayout layout = new TableLayout(); layout.addColumnData(new ColumnWeightData(100, true)); table.setLayout(layout); TableColumn col = new TableColumn(table, SWT.NONE); col.setResizable(true); return new TableViewer(table); } /** * Creates the UI part of the page. * * @param parent the parent of the created widgets */ public void createControl(Composite parent) { Composite composite = createComposite(parent, 1); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.SHARING_SELECT_REPOSITORY_PAGE); createWrappingLabel(composite, Policy.bind("RepositorySelectionPage.description"), 0 /* indent */, 1 /* columns */); //$NON-NLS-1$ useNewRepo = createRadioButton(composite, Policy.bind("RepositorySelectionPage.useNew"), 1); //$NON-NLS-1$ useExistingRepo = createRadioButton(composite, Policy.bind("RepositorySelectionPage.useExisting"), 1); //$NON-NLS-1$ table = createTable(composite, 1); table.setContentProvider(new WorkbenchContentProvider()); table.setLabelProvider(new WorkbenchLabelProvider()); table.addSelectionChangedListener(new ISelectionChangedListener() { public void selectionChanged(SelectionChangedEvent event) { result = (ISVNRepositoryLocation)((IStructuredSelection)table.getSelection()).getFirstElement(); settings.put(LAST_LOCATION, result.getLocation()); setPageComplete(true); } }); useExistingRepo.addListener(SWT.Selection, new Listener() { public void handleEvent(Event event) { if (useNewRepo.getSelection()) { table.getTable().setEnabled(false); result = null; } else { table.getTable().setEnabled(true); result = (ISVNRepositoryLocation)((IStructuredSelection)table.getSelection()).getFirstElement(); } setPageComplete(true); } }); setControl(composite); IRunnableWithProgress runnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { locations = SVNUIPlugin.getPlugin().getRepositoryManager().getKnownRepositoryLocations(monitor); } }; try { new ProgressMonitorDialog(getShell()).run(true, false, runnable); } catch (Exception e) { SVNUIPlugin.openError(getShell(), null, null, e, SVNUIPlugin.LOG_TEAM_EXCEPTIONS); } Arrays.sort(locations, new RepositoryComparator()); AdaptableList input = new AdaptableList(locations); table.setInput(input); if (locations.length == 0) { useNewRepo.setSelection(true); } else { useExistingRepo.setSelection(true); int selectionIndex = 0; String lastLocation = settings.get(LAST_LOCATION); if (lastLocation != null) { for (int i = 0; i < locations.length; i++) { ISVNRepositoryLocation location = locations[i]; if (lastLocation.equals(location.getLocation())) { selectionIndex = i; break; } } } table.setSelection(new StructuredSelection(locations[selectionIndex])); result = locations[selectionIndex]; setPageComplete(true); } } public ISVNRepositoryLocation getLocation() { return result; } /* * (non-Javadoc) * @see org.eclipse.jface.dialogs.IDialogPage#setVisible(boolean) */ public void setVisible(boolean visible) { super.setVisible(visible); if (visible) { useExistingRepo.setFocus(); } } } SharingWizard.java000066400000000000000000000510671203611042400422570ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/sharing/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards.sharing; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import java.util.Properties; import org.eclipse.core.resources.IFolder; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.NullProgressMonitor; import org.eclipse.core.runtime.SubProgressMonitor; import org.eclipse.jface.dialogs.IDialogSettings; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.dialogs.ProgressMonitorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.wizard.IWizardPage; import org.eclipse.jface.wizard.Wizard; import org.eclipse.swt.widgets.Shell; import org.eclipse.team.core.TeamException; import org.eclipse.team.ui.IConfigurationWizard; import org.eclipse.team.ui.TeamUI; import org.eclipse.team.ui.synchronize.ISynchronizeParticipant; import org.eclipse.team.ui.synchronize.ISynchronizeParticipantReference; import org.eclipse.ui.IWorkbench; import org.tigris.subversion.subclipse.core.ISVNLocalFolder; import org.tigris.subversion.subclipse.core.ISVNRemoteFolder; import org.tigris.subversion.subclipse.core.ISVNRepositoryLocation; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.core.SVNProviderPlugin; import org.tigris.subversion.subclipse.core.resources.LocalFolder; import org.tigris.subversion.subclipse.core.resources.LocalResourceStatus; import org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot; import org.tigris.subversion.subclipse.core.util.Util; import org.tigris.subversion.subclipse.ui.ISVNUIConstants; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.SVNUIPlugin; import org.tigris.subversion.subclipse.ui.WorkspacePathValidator; import org.tigris.subversion.subclipse.ui.actions.SynchronizeAction; import org.tigris.subversion.subclipse.ui.subscriber.SVNSynchronizeParticipant; import org.tigris.subversion.subclipse.ui.wizards.ConfigurationWizardMainPage; /** * This wizard helps the user to import a new project in their workspace * into a SVN repository for the first time. */ public class SharingWizard extends Wizard implements IConfigurationWizard { // The project to configure private IProject project; // The autoconnect page is used if .svn/ directories already exist. private ConfigurationWizardAutoconnectPage autoconnectPage; // Warning page if .svn/ directories do not exist in root, but exist in subdirectories. private SvnFoldersExistWarningPage warningPage; // The import page is used if .svn/ directories do not exist. private RepositorySelectionPage locationPage; // The page that prompts the user for connection information. private ConfigurationWizardMainPage createLocationPage; // The page that prompts the user for module name. private DirectorySelectionPage directoryPage; // The page that tells the user what's going to happen. private SharingWizardFinishPage finishPage; // The status of the project directory private LocalResourceStatus projectStatus; // The repository locations private ISVNRepositoryLocation[] locations; private boolean shareCanceled; public SharingWizard() { IDialogSettings workbenchSettings = SVNUIPlugin.getPlugin().getDialogSettings(); IDialogSettings section = workbenchSettings.getSection("NewLocationWizard");//$NON-NLS-1$ if (section == null) { section = workbenchSettings.addNewSection("NewLocationWizard");//$NON-NLS-1$ } setDialogSettings(section); setNeedsProgressMonitor(true); setWindowTitle(Policy.bind("SharingWizard.title")); //$NON-NLS-1$ } /** * add pages */ public void addPages() { ImageDescriptor sharingImage = SVNUIPlugin.getPlugin().getImageDescriptor(ISVNUIConstants.IMG_WIZBAN_SHARE); if (project.getLocation() == null) { CannotSharePage cannotSharePage = new CannotSharePage("cannotSharePage", Policy.bind("SharingWizard.importTitle"), sharingImage, project); //$NON-NLS-1$ //$NON-NLS-2$ addPage(cannotSharePage); } else if (doesSVNDirectoryExist()) { // if .svn directory exists, we add the autoconnect page autoconnectPage = new ConfigurationWizardAutoconnectPage("autoconnectPage", Policy.bind("SharingWizard.autoConnectTitle"), sharingImage, projectStatus); //$NON-NLS-1$ //$NON-NLS-2$ autoconnectPage.setProject(project); autoconnectPage.setDescription(Policy.bind("SharingWizard.autoConnectTitleDescription")); //$NON-NLS-1$ addPage(autoconnectPage); } else { try { ISVNLocalFolder localFolder = SVNWorkspaceRoot.getSVNFolderFor(project); if (localFolder instanceof LocalFolder) { IFolder[] svnFolders = ((LocalFolder)localFolder).getSVNFolders(null, false); if (svnFolders.length > 0) { warningPage = new SvnFoldersExistWarningPage("warningPage", Policy.bind("SharingWizard.importTitle"), sharingImage, svnFolders); //$NON-NLS-1$ //$NON-NLS-2$ warningPage.setDescription(Policy.bind("SharingWizard.svnFolderExists")); //$NON-NLS-1$ addPage(warningPage); // Remember to update getNextPage. } } } catch (SVNException e) { SVNUIPlugin.openError(getShell(), null, null, e, SVNUIPlugin.PERFORM_SYNC_EXEC); } // otherwise we add : // - the repository selection page // - the create location page // - the module selection page // - the finish page IRunnableWithProgress runnable = new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { locations = SVNUIPlugin.getPlugin().getRepositoryManager().getKnownRepositoryLocations(monitor); } }; try { new ProgressMonitorDialog(getShell()).run(true, false, runnable); } catch (Exception e) { SVNUIPlugin.openError(getShell(), null, null, e, SVNUIPlugin.LOG_TEAM_EXCEPTIONS); } if (locations.length > 0) { locationPage = new RepositorySelectionPage("importPage", Policy.bind("SharingWizard.importTitle"), sharingImage); //$NON-NLS-1$ //$NON-NLS-2$ locationPage.setDescription(Policy.bind("SharingWizard.importTitleDescription")); //$NON-NLS-1$ addPage(locationPage); } createLocationPage = new ConfigurationWizardMainPage("createLocationPage", Policy.bind("SharingWizard.enterInformation"), sharingImage); //$NON-NLS-1$ //$NON-NLS-2$ createLocationPage.setDescription(Policy.bind("SharingWizard.enterInformationDescription")); //$NON-NLS-1$ addPage(createLocationPage); createLocationPage.setDialogSettings(getDialogSettings()); ISVNRepositoryLocationProvider repositoryLocationProvider = new ISVNRepositoryLocationProvider() { public ISVNRepositoryLocation getLocation() throws TeamException { return SharingWizard.this.getLocation(); } public IProject getProject() { return SharingWizard.this.getProject(); } }; directoryPage = new DirectorySelectionPage("modulePage", Policy.bind("SharingWizard.enterModuleName"), sharingImage, repositoryLocationProvider); //$NON-NLS-1$ //$NON-NLS-2$ directoryPage.setDescription(Policy.bind("SharingWizard.enterModuleNameDescription")); //$NON-NLS-1$ addPage(directoryPage); finishPage = new SharingWizardFinishPage("finishPage", Policy.bind("SharingWizard.readyToFinish"), sharingImage, repositoryLocationProvider); //$NON-NLS-1$ //$NON-NLS-2$ finishPage.setDescription(Policy.bind("SharingWizard.readyToFinishDescription")); //$NON-NLS-1$ addPage(finishPage); } } /** * check if wizard can finish */ public boolean canFinish() { IWizardPage page = getContainer().getCurrentPage(); if (page == directoryPage) { return directoryPage.useProjectName() || directoryPage.getDirectoryName() != null; } else if (page == finishPage) { return true; } return super.canFinish(); } /** * get the next page */ public IWizardPage getNextPage(IWizardPage page) { if (page == warningPage) { if (locationPage == null) return createLocationPage; else return locationPage; } if (page == autoconnectPage) return null; if (page == locationPage) { if (locationPage.getLocation() == null) { return createLocationPage; } else { return directoryPage; } } if (page == createLocationPage) { return directoryPage; } if (page == directoryPage) { return finishPage; } return null; } /* * @see IWizard#performFinish */ public boolean performFinish() { shareCanceled = false; if (!WorkspacePathValidator.validateWorkspacePath()) return true; final boolean[] result = new boolean[] { true }; try { final boolean[] doSync = new boolean[] { false }; // final boolean[] projectExists = new boolean[] { false }; getContainer().run(true /* fork */, true /* cancel */, new IRunnableWithProgress() { public void run(IProgressMonitor monitor) throws InvocationTargetException { try { monitor.beginTask("", 100); //$NON-NLS-1$ if (autoconnectPage != null && (projectStatus != null)) { // Autoconnect to the repository using svn/ directories // Get the repository location (the get will add the locatin to the provider) boolean isPreviouslyKnown = SVNProviderPlugin.getPlugin().getRepositories().isKnownRepository(projectStatus.getUrlString(), false); // Validate the connection if the user wants to boolean validate = autoconnectPage.getValidate(); if (validate && !isPreviouslyKnown) { ISVNRepositoryLocation location = SVNProviderPlugin.getPlugin().getRepository(projectStatus.getUrlString()); // Do the validation try { location.validateConnection(new SubProgressMonitor(monitor, 50)); } catch (final TeamException e) { // Exception validating. We can continue if the user wishes. final boolean[] keep = new boolean[] { false }; getShell().getDisplay().syncExec(new Runnable() { public void run() { keep[0] = MessageDialog.openQuestion(getContainer().getShell(), Policy.bind("SharingWizard.validationFailedTitle"), //$NON-NLS-1$ Policy.bind("SharingWizard.validationFailedText", new Object[] {e.getStatus().getMessage()})); //$NON-NLS-1$ } }); if (!keep[0]) { // Remove the root try { if (!isPreviouslyKnown) { SVNProviderPlugin.getPlugin().getRepositories().disposeRepository(location); } } catch (TeamException e1) { SVNUIPlugin.openError(getContainer().getShell(), Policy.bind("exception"), null, e1, SVNUIPlugin.PERFORM_SYNC_EXEC); //$NON-NLS-1$ } result[0] = false; return; } // They want to keep the connection anyway. Fall through. } } // Set the sharing SVNWorkspaceRoot.setSharing(project, new SubProgressMonitor(monitor, 50)); } else { // No svn directory : Share the project doSync[0] = true; // Check if the directory exists on the server ISVNRepositoryLocation location = null; boolean isKnown = false; boolean createDirectory = true; try { location = getLocation(); isKnown = SVNProviderPlugin.getPlugin().getRepositories().isKnownRepository(location.getLocation(), false); // Purge any svn folders that may exists in subfolders SVNWorkspaceRoot.getSVNFolderFor(project).unmanage(null); // check if the remote directory already exist String remoteDirectoryName = getRemoteDirectoryName(); ISVNRemoteFolder folder = location.getRemoteFolder(remoteDirectoryName); if (folder.exists(new SubProgressMonitor(monitor, 50))) { // projectExists[0] = true; // final boolean[] sync = new boolean[] {true}; if (autoconnectPage == null) { getShell().getDisplay().syncExec(new Runnable() { public void run() { // sync[0] = false; if (!MessageDialog.openQuestion(getShell(), Policy.bind("SharingWizard.couldNotImport"), Policy.bind("SharingWizard.couldNotImportLong"))) { //$NON-NLS-1$ //$NON-NLS-2$ shareCanceled = true; return; } } }); if (shareCanceled) return; } // result[0] = sync[0]; // doSync[0] = sync[0]; // return; createDirectory = false; } } catch (TeamException e) { SVNUIPlugin.openError(getShell(), null, null, e, SVNUIPlugin.PERFORM_SYNC_EXEC); // if (!isKnown && location != null) location.flushUserInfo(); result[0] = false; doSync[0] = false; return; } // Add the location to the provider if it is new if (!isKnown) { SVNProviderPlugin.getPlugin().getRepositories().addOrUpdateRepository(location); } // Create the remote module for the project SVNWorkspaceRoot.shareProject(location, project, getRemoteDirectoryName(), finishPage.getComment(), createDirectory, new SubProgressMonitor(monitor, 50)); try{ project.refreshLocal(IProject.DEPTH_INFINITE, new SubProgressMonitor(monitor, 50)); } catch(CoreException ce){ throw new TeamException(ce.getStatus()); } } } catch (TeamException e) { throw new InvocationTargetException(e); } finally { monitor.done(); } } }); if (shareCanceled) return false; // if (autoconnectPage == null || (projectStatus == null)) { // CommitAction commitAction = new CommitAction(finishPage.getComment()); // commitAction.setSharing(true); // IResource[] selectedResources = { project }; // commitAction.setSelectedResources(selectedResources); // commitAction.run(null); // } if (doSync[0]) { final List syncList = new ArrayList(); syncList.add(project); try { ISynchronizeParticipantReference[] references = TeamUI.getSynchronizeManager().getSynchronizeParticipants(); if (references != null) { for (int i = 0; i < references.length; i++) { ISynchronizeParticipantReference reference = references[i]; ISynchronizeParticipant participant = reference.getParticipant(); if (participant instanceof SVNSynchronizeParticipant) { SVNSynchronizeParticipant svnParticipant = (SVNSynchronizeParticipant)participant; IResource[] resources = svnParticipant.getResources(); if (resources != null) { for (int j = 0; j < resources.length; j++) { IResource resource = resources[j]; if (!resource.equals(project)) { syncList.add(resource); } } } break; } } } } catch (Exception e) {} SynchronizeAction synchronizeAction = new SynchronizeAction() { protected IResource[] getSelectedResources() { IResource[] selection = new IResource[syncList.size()]; syncList.toArray(selection); return selection; } }; synchronizeAction.run(null); } // if (doSync[0]) { // IResource[] resources = { project }; // SVNSynchronizeParticipant participant = (SVNSynchronizeParticipant)SubscriberParticipant.getMatchingParticipant(SVNSynchronizeParticipant.ID, resources); // if (participant == null) { // participant = new SVNSynchronizeParticipant(new ResourceScope(resources)); // TeamUI.getSynchronizeManager().addSynchronizeParticipants(new ISynchronizeParticipant[] {participant}); // } // participant.refresh(resources, Policy.bind("SharingWizard.0"), Policy.bind("SharingWizard.1", participant.getName()), SVNUIPlugin.getActivePage().getActivePart().getSite()); //$NON-NLS-1$ //$NON-NLS-2$ // } // if (doSync[0]) { // // Sync of the project // IWorkbenchPage activePage = null; /* not sure how to get the active page */ // SyncView view = SyncView.findViewInActivePage(activePage); // if (view != null) { // SVNSyncCompareInput input; // if (projectExists[0]) { // try { // String moduleName = getModuleName(); // SVNTag tag; // if (autoconnectPage == null) { // TagSelectionDialog dialog = new TagSelectionDialog(getShell(), // new ISVNFolder[] {(ISVNFolder)getLocation().getRemoteFolder(moduleName, null)}, // Policy.bind("SharingWizard.selectTagTitle"), //$NON-NLS-1$ // Policy.bind("SharingWizard.selectTag"), //$NON-NLS-1$ // TagSelectionDialog.INCLUDE_HEAD_TAG | TagSelectionDialog.INCLUDE_BRANCHES, // false, /*don't show recurse option*/ // IHelpContextIds.SHARE_WITH_EXISTING_TAG_SELETION_DIALOG); // dialog.setBlockOnOpen(true); // if (dialog.open() == Dialog.CANCEL) { // return false; // } // tag = dialog.getResult(); // } else { // tag = autoconnectPage.getSharing().getTag(); // } // input = new SVNSyncCompareUnsharedInput(project, getLocation(), moduleName, tag); // } catch (TeamException e) { // throw new InvocationTargetException(e); // } // } else { // input = new SVNSyncCompareInput(new IResource[] {project}); // } // view.showSync(input, activePage); // } // } } catch (InterruptedException e) { return true; } catch (InvocationTargetException e) { SVNUIPlugin.openError(getContainer().getShell(), null, null, e); } return result[0]; } /** * Return an ISVNRepositoryLocation */ protected ISVNRepositoryLocation getLocation() throws TeamException { // If there is an autoconnect page then it has the location if (autoconnectPage != null) { return autoconnectPage.getLocation(); } // If the import page has a location, use it. if (locationPage != null) { ISVNRepositoryLocation location = locationPage.getLocation(); if (location != null) return location; } // Otherwise, get the location from the create location page getShell().getDisplay().syncExec(new Runnable() { public void run() { createLocationPage.finish(new NullProgressMonitor()); } }); Properties properties = createLocationPage.getProperties(); ISVNRepositoryLocation location = SVNProviderPlugin.getPlugin().getRepositories().createRepository(properties); return location; } /** * Return the directory name in the remote repository where to put the project */ private String getRemoteDirectoryName() { // If there is an autoconnect page then it has the module name if (autoconnectPage != null) { // return autoconnectPage.getSharing().getRepository(); return Util.getLastSegment(autoconnectPage.getSharingStatus().getUrlString()); } String moduleName = directoryPage.getDirectoryName(); if (moduleName == null) moduleName = project.getName(); return moduleName; } /* * @see IConfigurationWizard#init(IWorkbench, IProject) */ public void init(IWorkbench workbench, IProject project) { this.project = project; } /** * check if there is a valid svn directory */ private boolean doesSVNDirectoryExist() { // Determine if there is an existing .svn/ directory from which configuration // information can be retrieved. boolean isSVNFolder = false; try { projectStatus = SVNWorkspaceRoot.peekResourceStatusFor(project);; isSVNFolder = (projectStatus != null) && projectStatus.hasRemote(); } catch (final SVNException e) { Shell shell = null; // If this is called before the pages have been added, getContainer will return null if (getContainer() != null) { shell = getContainer().getShell(); } SVNUIPlugin.openError(shell, null, null, e); } return isSVNFolder; } public IProject getProject() { return project; } } SharingWizardFinishPage.java000066400000000000000000000065231203611042400442120ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/sharing/******************************************************************************* * Copyright (c) 2003, 2006 Subclipse project and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html * * Contributors: * Subclipse project committers - initial API and implementation ******************************************************************************/ package org.tigris.subversion.subclipse.ui.wizards.sharing; import org.eclipse.core.resources.IProject; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.swt.SWT; import org.eclipse.swt.events.ModifyEvent; import org.eclipse.swt.events.ModifyListener; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Label; import org.eclipse.ui.PlatformUI; import org.tigris.subversion.subclipse.core.SVNException; import org.tigris.subversion.subclipse.ui.IHelpContextIds; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.comments.CommitCommentArea; import org.tigris.subversion.subclipse.ui.settings.CommentProperties; import org.tigris.subversion.subclipse.ui.wizards.SVNWizardPage; /** * The finish page of the sharing wizard */ public class SharingWizardFinishPage extends SVNWizardPage { private ISVNRepositoryLocationProvider repositoryLocationProvider; private CommitCommentArea commitCommentArea; private CommentProperties commentProperties; public SharingWizardFinishPage(String pageName, String title, ImageDescriptor titleImage, ISVNRepositoryLocationProvider repositoryLocationProvider) { super(pageName, title, titleImage); this.repositoryLocationProvider = repositoryLocationProvider; } /* * @see IDialogPage#createControl(Composite) */ public void createControl(Composite parent) { Composite composite = createComposite(parent, 1); // set F1 help PlatformUI.getWorkbench().getHelpSystem().setHelp(composite, IHelpContextIds.SHARING_FINISH_PAGE); Label label = new Label(composite, SWT.LEFT | SWT.WRAP); label.setText(Policy.bind("SharingWizardFinishPage.message")); //$NON-NLS-1$ GridData data = new GridData(); data.widthHint = 350; label.setLayoutData(data); IProject project = repositoryLocationProvider.getProject(); try { commentProperties = CommentProperties.getCommentProperties(project); } catch (SVNException e) {} commitCommentArea = new CommitCommentArea(null, null, commentProperties); //$NON-NLS-1$ commitCommentArea.setProposedComment(Policy.bind("SharingWizard.initialImport")); //$NON-NLS-1$ if ((commentProperties != null) && (commentProperties.getMinimumLogMessageSize() != 0)) { ModifyListener modifyListener = new ModifyListener() { public void modifyText(ModifyEvent e) { setPageComplete(commitCommentArea.getCommentLength() >= commentProperties.getMinimumLogMessageSize()); } }; commitCommentArea.setModifyListener(modifyListener); } commitCommentArea.createArea(composite); setControl(composite); } public String getComment() { commitCommentArea.addComment(commitCommentArea.getComment()); return commitCommentArea.getComment(); } } SvnFoldersExistWarningPage.java000066400000000000000000000072011203611042400447170ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.ui/src/org/tigris/subversion/subclipse/ui/wizards/sharingpackage org.tigris.subversion.subclipse.ui.wizards.sharing; import java.util.Arrays; import java.util.Comparator; import org.eclipse.core.resources.IFolder; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.ColumnWeightData; import org.eclipse.jface.viewers.ITableLabelProvider; import org.eclipse.jface.viewers.LabelProvider; import org.eclipse.jface.viewers.TableLayout; import org.eclipse.jface.viewers.TableViewer; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.graphics.Image; import org.eclipse.swt.layout.GridData; import org.eclipse.swt.widgets.Button; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Table; import org.eclipse.swt.widgets.TableColumn; import org.eclipse.ui.model.WorkbenchContentProvider; import org.eclipse.ui.model.WorkbenchLabelProvider; import org.tigris.subversion.subclipse.ui.Policy; import org.tigris.subversion.subclipse.ui.util.AdaptableList; import org.tigris.subversion.subclipse.ui.wizards.SVNWizardPage; public class SvnFoldersExistWarningPage extends SVNWizardPage { private TableViewer table; private Button continueButton; private IFolder[] svnFolders; public SvnFoldersExistWarningPage(String pageName, String title, ImageDescriptor titleImage, IFolder[] svnFolders) { super(pageName, title, titleImage); this.svnFolders = svnFolders; } public void createControl(Composite parent) { Composite composite = createComposite(parent, 1); createWrappingLabel(composite, Policy.bind("SVNFoldersExistWarningPage.description"), 0 /* indent */, 1 /* columns */); //$NON-NLS-1$ table = createTable(composite, 1); table.setContentProvider(new WorkbenchContentProvider()); table.setLabelProvider(new SvnFoldersLabelProvider()); Arrays.sort(svnFolders, new Comparator() { public int compare(Object obj1, Object obj2) { IFolder folder1 = (IFolder)obj1; IFolder folder2 = (IFolder)obj2; return folder1.getFullPath().toOSString().compareTo(folder2.getFullPath().toOSString()); } }); AdaptableList input = new AdaptableList(svnFolders); table.setInput(input); continueButton = new Button(composite, SWT.CHECK); continueButton.setText(Policy.bind("SVNFoldersExistWarningPage.continue")); continueButton.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent e) { setPageComplete(continueButton.getSelection()); } }); setPageComplete(false); setControl(composite); } protected TableViewer createTable(Composite parent, int span) { Table table = new Table(parent, SWT.H_SCROLL | SWT.V_SCROLL | SWT.BORDER); GridData data = new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL); data.horizontalSpan = span; data.heightHint = 125; table.setLayoutData(data); TableLayout layout = new TableLayout(); layout.addColumnData(new ColumnWeightData(100, true)); table.setLayout(layout); TableColumn col = new TableColumn(table, SWT.NONE); col.setResizable(true); col.setText(Policy.bind("SVNFoldersExistWarningPage.folders")); //$NON-NLS-1$ table.setHeaderVisible(true); return new TableViewer(table); } class SvnFoldersLabelProvider extends LabelProvider implements ITableLabelProvider { WorkbenchLabelProvider workbenchLabelProvider = new WorkbenchLabelProvider(); public Image getColumnImage(Object element, int columnIndex) { return workbenchLabelProvider.getImage(element); } public String getColumnText(Object element, int columnIndex) { IFolder folder = (IFolder)element; return folder.getFullPath().toOSString(); } } } eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.update-site/000077500000000000000000000000001203611042400257135ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.update-site/.project000066400000000000000000000006241203611042400273640ustar00rootroot00000000000000 org.tigris.subversion.subclipse.update-site org.eclipse.pde.UpdateSiteBuilder org.eclipse.pde.UpdateSiteNature eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.update-site/.settings/000077500000000000000000000000001203611042400276315ustar00rootroot00000000000000org.eclipse.mylar.tasklist.prefs000066400000000000000000000002231203611042400360020ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.update-site/.settings#Wed May 23 09:39:19 EDT 2007 eclipse.preferences.version=1 project.repository.kind=issuezilla project.repository.url=http\://subclipse.tigris.org eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.update-site/.sitebuild/000077500000000000000000000000001203611042400277555ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.update-site/.sitebuild/sitebuild.xml000066400000000000000000000003211203611042400324570ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.update-site/bumprev.sh000077500000000000000000000007231203611042400277340ustar00rootroot00000000000000#!/usr/bin/bash files=(../core/plugin.xml ../feature/feature.xml ../feature-plugin/plugin.xml ../javahl-win32/META-INF/MANIFEST.MF ../javahl-win32/fragment.xml ../ui/plugin.xml ../update-site/.sitebuild/sitebuild.xml ../update-site/site.xml) usage="./bump.sh " if [ ! $# -eq 2 ];then echo $usage exit 1 fi version1=$1 version2=$2 for f in ${files[@]};do echo "bumping $f" perl -p -i -e "s/$version1/$version2/g" $f done eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.update-site/index.html000066400000000000000000000034461203611042400277170ustar00rootroot00000000000000 update-site

eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.update-site/site.xml000066400000000000000000000025071203611042400274050ustar00rootroot00000000000000 Eclipse Install/Update site for Subclipse Subversion 1.7 plug-in for Eclipse 3.2 and higher. eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.update-site/web/000077500000000000000000000000001203611042400264705ustar00rootroot00000000000000eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.update-site/web/site.css000066400000000000000000000013171203611042400301500ustar00rootroot00000000000000 eclipse-subclipse-1.8.16/org.tigris.subversion.subclipse.update-site/web/site.xsl000066400000000000000000000157261203611042400301770ustar00rootroot00000000000000 update-site

update-site

dark-row light-row dark-row light-row dark-row light-row

( - )
-

Operating Systems:
Windows Systems:
Languages:
Architecture:


Uncategorized

( - )
-


Operating Systems:
Windows Systems:
Languages:
Architecture:

( - )
-


Operating Systems:
Windows Systems:
Languages:
Architecture:

If you add something to version control you didn't want to, don't panic; you can always undo (Revert) your changes. Reverting the added resource is often preferred over deleting the resource, since it is only the 'added'-state that you revert, not the creation of the file itself.