You can subscribe to this list here.
| 2012 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
(6) |
Jul
(5) |
Aug
(8) |
Sep
|
Oct
|
Nov
(1) |
Dec
|
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2013 |
Jan
|
Feb
|
Mar
(6) |
Apr
|
May
(1) |
Jun
|
Jul
|
Aug
|
Sep
(3) |
Oct
|
Nov
|
Dec
|
| 2014 |
Jan
(1) |
Feb
|
Mar
(4) |
Apr
|
May
|
Jun
(1) |
Jul
|
Aug
|
Sep
(2) |
Oct
(1) |
Nov
(4) |
Dec
|
| 2015 |
Jan
|
Feb
|
Mar
(23) |
Apr
(11) |
May
(33) |
Jun
(13) |
Jul
(86) |
Aug
(46) |
Sep
(104) |
Oct
(9) |
Nov
(1) |
Dec
|
| 2016 |
Jan
(9) |
Feb
(19) |
Mar
(8) |
Apr
|
May
(4) |
Jun
(25) |
Jul
(24) |
Aug
(14) |
Sep
|
Oct
(2) |
Nov
|
Dec
|
| 2017 |
Jan
(3) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
(2) |
Sep
(1) |
Oct
|
Nov
(1) |
Dec
|
| 2018 |
Jan
(1) |
Feb
|
Mar
(6) |
Apr
(7) |
May
(8) |
Jun
(5) |
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2020 |
Jan
|
Feb
|
Mar
(8) |
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2021 |
Jan
(1) |
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
|
Dec
|
| 2022 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
(9) |
Oct
|
Nov
|
Dec
|
| 2023 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
|
Nov
(3) |
Dec
|
|
From: <nik...@us...> - 2015-09-29 15:40:27
|
Revision: 581
http://sourceforge.net/p/sbfc/code/581
Author: niko-rodrigue
Date: 2015-09-29 15:40:24 +0000 (Tue, 29 Sep 2015)
Log Message:
-----------
changed the last example to convert to BioPAX instead of dot, as dot can be risky as it produce several output files
Modified Paths:
--------------
webServiceClient/src/org/sbfc/ws/UsageExample.java
Modified: webServiceClient/src/org/sbfc/ws/UsageExample.java
===================================================================
--- webServiceClient/src/org/sbfc/ws/UsageExample.java 2015-09-29 15:10:10 UTC (rev 580)
+++ webServiceClient/src/org/sbfc/ws/UsageExample.java 2015-09-29 15:40:24 UTC (rev 581)
@@ -82,7 +82,7 @@
// fourth conversion job using asynchronous methods
System.out.println("\n\nLaunching the fourth conversion job...");
- converter = ConverterParam.SBML2Dot;
+ converter = ConverterParam.SBML2BioPAX_l3;
ConversionInfo metadata = link.submitJobFromFile(sbmlModelPath, inputType, converter);
System.out.println("DONE, now waiting for the job to finished while doing other stuff");
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <nik...@us...> - 2015-09-29 15:10:13
|
Revision: 580
http://sourceforge.net/p/sbfc/code/580
Author: niko-rodrigue
Date: 2015-09-29 15:10:10 +0000 (Tue, 29 Sep 2015)
Log Message:
-----------
added one more example of usage of the WS + changed the url to point to the main instance of the converters online app at ebi
Modified Paths:
--------------
webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java
webServiceClient/src/org/sbfc/ws/UsageExample.java
Modified: webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java
===================================================================
--- webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java 2015-09-29 15:07:36 UTC (rev 579)
+++ webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java 2015-09-29 15:10:10 UTC (rev 580)
@@ -22,10 +22,14 @@
/**
* Location of the webService
*/
- private String SBFC_WEB_SERVICE_URL = "http://wwwdev.ebi.ac.uk/biomodels/tools/converters/webService";
+ private String SBFC_WEB_SERVICE_URL = "http://www.ebi.ac.uk/biomodels/tools/converters/webService";
-
/**
+ * Interval of time in millisecond between two check for a job status
+ */
+ public int JOB_STATUS_INTERVAL = 3000;
+
+ /**
* Creates a new instance of {@link SBFCWebServiceClient}
*/
public SBFCWebServiceClient() {}
@@ -125,7 +129,7 @@
//Build parameter string
String data = "method=getStatus&jobIdent="+convertionId.getIdentificationId()
+ "&sessionId=" + convertionId.getSessionId() + "&jobId=" + convertionId.getJobId();
-
+
//sending POST request to the server
status = sendPostRequest(data, new ConversionInfo());
@@ -146,8 +150,10 @@
public String submitAndGetResultFromFile(String filePath,String inputModelType, String converterType) throws InterruptedException {
ConversionInfo convert = submitJobFromFile(filePath, inputModelType, converterType);
- while(getJobStatus(convert).compareTo(ConverterParam.Pending_Job) == 0) {
- Thread.sleep(1000);
+ String status = getJobStatus(convert);
+ while(! status.equals(ConverterParam.Finished_Job)) {
+ Thread.sleep(JOB_STATUS_INTERVAL);
+ status = getJobStatus(convert);
}
return getConvertionResult(convert, false);
@@ -165,9 +171,11 @@
public String submitAndGetResultFromString(String model,String inputModelType, String converterType) throws InterruptedException {
ConversionInfo convert = submitJobFromString(model, inputModelType, converterType);
- while(getJobStatus(convert).compareTo(ConverterParam.Pending_Job) == 0) {
- Thread.sleep(1000);
- }
+ String status = getJobStatus(convert);
+ while(! status.equals(ConverterParam.Finished_Job)) {
+ Thread.sleep(JOB_STATUS_INTERVAL);
+ status = getJobStatus(convert);
+ }
return getConvertionResult(convert, false);
}
@@ -185,10 +193,12 @@
public String submitAndGetResultFromURL(String url,String inputModelType, String converterType) throws InterruptedException {
ConversionInfo convert = submitJobFromURL(url, inputModelType, converterType);
- while(getJobStatus(convert).compareTo(ConverterParam.Pending_Job) == 0) {
- Thread.sleep(1000);
+ String status = getJobStatus(convert);
+ while(! status.equals(ConverterParam.Finished_Job)) {
+ Thread.sleep(JOB_STATUS_INTERVAL);
+ status = getJobStatus(convert);
}
-
+
return getConvertionResult(convert, false);
}
Modified: webServiceClient/src/org/sbfc/ws/UsageExample.java
===================================================================
--- webServiceClient/src/org/sbfc/ws/UsageExample.java 2015-09-29 15:07:36 UTC (rev 579)
+++ webServiceClient/src/org/sbfc/ws/UsageExample.java 2015-09-29 15:10:10 UTC (rev 580)
@@ -23,11 +23,13 @@
String convertionResult;
// Creating the link to the web service
- // SBFCWebServiceClient link = new SBFCWebServiceClient();
- SBFCWebServiceClient link = new SBFCWebServiceClient("http://localhost:8080/biomodels/tools/converters/webService");
+ SBFCWebServiceClient link = new SBFCWebServiceClient();
+ // You can also initialize the WS link using your own url to connect to a private server
+ // SBFCWebServiceClient link = new SBFCWebServiceClient("http://localhost:8080/biomodels/tools/converters/webService");
+
// first conversion using the method submitAndGetResultFromURL
-
+ System.out.println("Launching the first conversion job...\n\n");
// URL pointing to the model to convert
String modelURL = "http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3668293/bin/1752-0509-7-41-S11.xml";
@@ -54,16 +56,19 @@
String sbmlModelPath = args[0];
converter = ConverterParam.SBML2SBML_L3_V1;
- System.out.println("\n\n\n SECOND and THIRD conversions result: \n\n\n");
+ System.out.print("Launching the second conversion job...");
// Launching the second conversion: SBML file to SBML level 3 version 1
String sbmlL3String = convertionResult = link.submitAndGetResultFromFile(sbmlModelPath, inputType, converter);
+ System.out.print(" DONE\n\n");
// third conversion using the method submitAndGetResultFromString
converter = ConverterParam.SBML2Matlab;
+ System.out.println("Launching the third conversion job: \n\n");
+
// Launching the third conversion: SBML String to Matlab
convertionResult = link.submitAndGetResultFromString(sbmlL3String, inputType, converter);
@@ -73,5 +78,35 @@
out = new PrintWriter(new FileWriter("sbfc-ws-test.m"));
out.print(convertionResult);
out.close();
+
+ // fourth conversion job using asynchronous methods
+ System.out.println("\n\nLaunching the fourth conversion job...");
+
+ converter = ConverterParam.SBML2Dot;
+
+ ConversionInfo metadata = link.submitJobFromFile(sbmlModelPath, inputType, converter);
+ System.out.println("DONE, now waiting for the job to finished while doing other stuff");
+
+ String status = link.getJobStatus(metadata);
+
+ // This while loop could be done in a separate thread to allow the rest of the application to run smoothly
+ // You can also only check for the job status when the user click on a button
+ while(! status.equals(ConverterParam.Finished_Job)) {
+ System.out.println("job status = " + status);
+ Thread.sleep(1000); // waiting 1s between each check
+ status = link.getJobStatus(metadata);
+ }
+
+ System.out.println("Now the job is finished, so we can get the results from the server\n\n");
+
+ // Getting the job result and deleting all related files on the server side
+ String dotStr = link.getConvertionResult(metadata, true);
+
+ System.out.println(dotStr);
+
+ out = new PrintWriter(new FileWriter("sbfc-ws-test.dot"));
+ out.print(convertionResult);
+ out.close();
+
}
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <nik...@us...> - 2015-09-29 15:07:38
|
Revision: 579
http://sourceforge.net/p/sbfc/code/579
Author: niko-rodrigue
Date: 2015-09-29 15:07:36 +0000 (Tue, 29 Sep 2015)
Log Message:
-----------
changed the version number to 1.2
Modified Paths:
--------------
sbfcOnline/build.xml
Modified: sbfcOnline/build.xml
===================================================================
--- sbfcOnline/build.xml 2015-09-29 14:34:49 UTC (rev 578)
+++ sbfcOnline/build.xml 2015-09-29 15:07:36 UTC (rev 579)
@@ -9,7 +9,7 @@
<!-- global params -->
<property name="app.name" value="sbfcOnline" />
- <property name="version" value="1.2-b2" /> <!-- default version -->
+ <property name="version" value="1.2" /> <!-- default version -->
<property name="src" location="${basedir}/src" />
<property name="doc" location="${basedir}/doc" />
<property name="lib" location="${basedir}/lib" />
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <nik...@us...> - 2015-09-29 14:34:51
|
Revision: 578
http://sourceforge.net/p/sbfc/code/578
Author: niko-rodrigue
Date: 2015-09-29 14:34:49 +0000 (Tue, 29 Sep 2015)
Log Message:
-----------
corrected a bug in WebServiceServlet that prevented to store correctly the LFS job id
Modified Paths:
--------------
sbfcOnline/src/uk/ac/ebi/compneur/servlets/WebServiceServlet.java
Modified: sbfcOnline/src/uk/ac/ebi/compneur/servlets/WebServiceServlet.java
===================================================================
--- sbfcOnline/src/uk/ac/ebi/compneur/servlets/WebServiceServlet.java 2015-09-29 14:27:15 UTC (rev 577)
+++ sbfcOnline/src/uk/ac/ebi/compneur/servlets/WebServiceServlet.java 2015-09-29 14:34:49 UTC (rev 578)
@@ -143,8 +143,10 @@
// retrieving jobId
String jobId = ret;
+ System.out.println("WebServiceServlet - submit - job output = " + ret);
+ int lowerThanIndex = jobId.indexOf("<");
- if (jobId.startsWith("<")) {
+ if (lowerThanIndex != -1) {
jobId = ret.substring(ret.indexOf("<")+1,ret.indexOf(">"));
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <nik...@us...> - 2015-09-29 14:27:18
|
Revision: 577
http://sourceforge.net/p/sbfc/code/577
Author: niko-rodrigue
Date: 2015-09-29 14:27:15 +0000 (Tue, 29 Sep 2015)
Log Message:
-----------
corrected a bug in WebServiceServlet that prevented to store correctly the LFS job id
Modified Paths:
--------------
sbfcOnline/src/uk/ac/ebi/compneur/servlets/WebServiceServlet.java
Modified: sbfcOnline/src/uk/ac/ebi/compneur/servlets/WebServiceServlet.java
===================================================================
--- sbfcOnline/src/uk/ac/ebi/compneur/servlets/WebServiceServlet.java 2015-09-29 13:50:21 UTC (rev 576)
+++ sbfcOnline/src/uk/ac/ebi/compneur/servlets/WebServiceServlet.java 2015-09-29 14:27:15 UTC (rev 577)
@@ -142,10 +142,10 @@
}
// retrieving jobId
- String jobId = "jobId";
+ String jobId = ret;
if (jobId.startsWith("<")) {
- ret.substring(ret.indexOf("<")+1,ret.indexOf(">"));
+ jobId = ret.substring(ret.indexOf("<")+1,ret.indexOf(">"));
}
// Waiting because bjobs doesn't register the job immediately
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <nik...@us...> - 2015-09-29 13:50:23
|
Revision: 576
http://sourceforge.net/p/sbfc/code/576
Author: niko-rodrigue
Date: 2015-09-29 13:50:21 +0000 (Tue, 29 Sep 2015)
Log Message:
-----------
improved javadoc of the SBFCWebServiceClient + added methods that take a file path + updated the usage example to use the three main methods + added most model and converter classes to ConverterParam
Modified Paths:
--------------
webServiceClient/src/org/sbfc/ws/ConverterParam.java
webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java
webServiceClient/src/org/sbfc/ws/UsageExample.java
Modified: webServiceClient/src/org/sbfc/ws/ConverterParam.java
===================================================================
--- webServiceClient/src/org/sbfc/ws/ConverterParam.java 2015-09-29 12:42:32 UTC (rev 575)
+++ webServiceClient/src/org/sbfc/ws/ConverterParam.java 2015-09-29 13:50:21 UTC (rev 576)
@@ -8,20 +8,34 @@
*/
public class ConverterParam {
-
- int [] a = new int[10];
-
-
+
/*Available Model format for input */
static String SBMLModel = "SBMLModel";
- static String BioPaxModel = "BioPaxModel";
- static String XPPModel = "XPPModel";
+ static String BioPAXModel = "BioPAXModel";
+ static String XPPModel = "XPPModel";
+ static String APMModel = "APMModel";
+ static String DotModel = "DotModel";
+ static String GPMLModel = "GPMLModel";
+ static String OctaveModel = "OctaveModel";
+ static String SBGNModel = "SBGNModel";
+
/*Available converters */
- static String SBML_2_BioPAX_l2 = "SBML2BioPAX_l2";
- static String SBML_2_BioPAX_l3 = "SBML2BioPAX_l3";
- static String SBML_2_XPP = "SBML2XPP";
+ static String SBML2BioPAX_l2 = "SBML2BioPAX_l2";
+ static String SBML2BioPAX_l3 = "SBML2BioPAX_l3";
+ static String SBML2XPP = "SBML2XPP";
+ static String BioPAXL3Converter = "BioPAXL3Converter";
+ static String SBML2APM = "SBML2APM";
+ static String SBML2Dot = "SBML2Dot";
+ static String SBML2Matlab = "SBML2Matlab";
+ static String SBML2Octave = "SBML2Octave";
+ static String SBML2SBGNML = "SBML2SBGNML";
+ static String SBML2SBML_L3_V1 = "SBML2SBML_L3V1";
+ static String SBML2SBML_L2_V4 = "SBML2SBML_L2V4";
+ static String URL2URN = "URL2URN";
+ static String URN2URL = "URN2URL";
+
/*Convertion jobs status*/
Modified: webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java
===================================================================
--- webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java 2015-09-29 12:42:32 UTC (rev 575)
+++ webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java 2015-09-29 13:50:21 UTC (rev 576)
@@ -1,6 +1,7 @@
package org.sbfc.ws;
import java.io.BufferedReader;
+import java.io.FileReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
@@ -38,14 +39,43 @@
this.SBFC_WEB_SERVICE_URL = sbfcWebServiceURL;
}
-
+
+ /**
+ * Submits a conversion Job from a file and returns some metadata about the job.
+ *
+ * @param filePath the path of the file to read
+ * @param inputModelType the class name of the input format
+ * @param converterType the class name of the converter
+ * @return some metadata about the conversion job.
+ */
+ public ConversionInfo submitJobFromFile(String filePath, String inputModelType, String converterType) {
+ ConversionInfo convertionId = new ConversionInfo();
+
+ String model = "";
+ try {
+ model = readFileAsString(filePath);
+ } catch (IOException e) {
+ throw new RuntimeException(e);
+ }
+
+ //Build parameter string
+ String data = "method=submit&inputModelType="+inputModelType+"&converterType="+converterType+"&text_upload="+model;
+
+
+ //Sending POST request to the server
+ sendPostRequest(data, convertionId);
+
+ return convertionId;
+ }
+
+
/**
- * Submit conversion Job from String containing model
+ * Submits a conversion Job from a String containing the input format and returns some metadata about the job.
*
- * @param model
- * @param inputModelType
- * @param converterType
- * @return ConversionInfo
+ * @param model a String containing the input format
+ * @param inputModelType the class name of the input format
+ * @param converterType the class name of the converter
+ * @return some metadata about the conversion job.
*/
public ConversionInfo submitJobFromString(String model,String inputModelType, String converterType) {
ConversionInfo convertionId = new ConversionInfo();
@@ -62,12 +92,12 @@
/**
- * Submit conversion Job from String containing model
+ * Submits a conversion Job from a URL pointing to the input format and returns some metadata about the job.
*
- * @param model
- * @param inputModelType
- * @param converterType
- * @return ConversionInfo
+ * @param url a URL pointing to the input format
+ * @param inputModelType the class name of the input format
+ * @param converterType the class name of the converter
+ * @return some metadata about the conversion job.
*/
public ConversionInfo submitJobFromURL(String url,String inputModelType, String converterType) {
ConversionInfo convertionId = new ConversionInfo();
@@ -84,9 +114,9 @@
/**
- * Return the status of a conversion job on the webservice
+ * Returns the status of a conversion job on the webservice
*
- * @param convertionId
+ * @param convertionId some metadata about the conversion job.
* @return "pending" | "done" | "unknown" | "not found"
*/
public String getJobStatus(ConversionInfo convertionId) {
@@ -104,15 +134,33 @@
}
+ /**
+ * Submits the conversion job from the given file path then waits for the end of the conversion and returns the result
+ *
+ * @param filePath the path of the input file
+ * @param inputModelType the class name of the input format
+ * @param converterType the class name of the converter
+ * @return the converted format as a String or the error log if a problem occurred during the conversion
+ * @throws InterruptedException if any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.
+ */
+ public String submitAndGetResultFromFile(String filePath,String inputModelType, String converterType) throws InterruptedException {
+ ConversionInfo convert = submitJobFromFile(filePath, inputModelType, converterType);
+
+ while(getJobStatus(convert).compareTo(ConverterParam.Pending_Job) == 0) {
+ Thread.sleep(1000);
+ }
+
+ return getConvertionResult(convert, false);
+ }
/**
- * All in one function. The job is submitted from the model String. It waits for the end of the conversion and returns the result
+ * Submits the conversion job from the model String then waits for the end of the conversion and returns the result
*
- * @param model
+ * @param model a String containing the input format
* @param inputModelType inputModel format, We strongly recommend you use one of ConverterParam attributes (ex: ConvertParam.SBMLModel)
* @param converterType inputModel to use, We strongly recommend you use one of ConverterParam attributes (ex: ConvertParam.SBML_2_BioPAX_l2v3)
- * @return converted Model or errorLog
- * @throws InterruptedException
+ * @return the converted format as a String or the error log if a problem occurred during the conversion
+ * @throws InterruptedException if any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.
*/
public String submitAndGetResultFromString(String model,String inputModelType, String converterType) throws InterruptedException {
ConversionInfo convert = submitJobFromString(model, inputModelType, converterType);
@@ -121,18 +169,18 @@
Thread.sleep(1000);
}
- return getConvertionResult(convert);
+ return getConvertionResult(convert, false);
}
/**
- * All in one function. The job is submitted from the model URL. It waits for the end of the conversion and returns the result
+ * Submits the conversion job from the model URL then waits for the end of the conversion and returns the result
*
- * @param model
- * @param inputModelType
- * @param converterType
- * @return
- * @throws InterruptedExceptionif any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.
+ * @param url a URL pointing to the input format
+ * @param inputModelType the class name of the input format
+ * @param converterType the class name of the converter
+ * @return the converted format as a String or the error log if a problem occurred during the conversion
+ * @throws InterruptedException if any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.
*/
public String submitAndGetResultFromURL(String url,String inputModelType, String converterType) throws InterruptedException {
ConversionInfo convert = submitJobFromURL(url, inputModelType, converterType);
@@ -141,24 +189,26 @@
Thread.sleep(1000);
}
- return getConvertionResult(convert);
+ return getConvertionResult(convert, false);
}
/**
- * Retrieve the result model as a String
- * <p>WARNING ! : this method can be called only once per Conversion job as it will destroy all the related conversion Files on the Server"
+ * Retrieves the result format as a String.
*
- * @param convertionId
- * @return converted model or errorLog
+ * <p>WARNING ! : if the value of the delete parameter is 'true', this method can be called only once
+ * as it will destroy all the related conversion Files on the Server"
+ *
+ * @param convertionId some metadata about the conversion job.
+ * @param delete a boolean to tell the method to delete or not all the files related to fileName.
+ * @return the converted format as a String or the error log if a problem occurred during the conversion
*/
- public String getConvertionResult(ConversionInfo convertionId) {
+ public String getConvertionResult(ConversionInfo convertionId, boolean delete) {
String model = null;
- // TODO - may be we should change the behavior or provide several methods, some deleting the files, some not. And saying that everything will be deleted anyway after 72H
-
//Build parameter string
String data = "method=getResult&jobIdent=" + convertionId.getIdentificationId()
- + "&sessionId=" + convertionId.getSessionId() + "&jobId=" + convertionId.getJobId();
+ + "&sessionId=" + convertionId.getSessionId() + "&jobId=" + convertionId.getJobId()
+ + "&delete=" + delete;
//sending POST request to the server
model = sendPostRequest(data, new ConversionInfo());
@@ -168,9 +218,10 @@
/**
+ * Sends a POST request to the SBFC webservice and returns the result.
*
- * @param data
- * @return
+ * @param data the query string
+ * @return the result of the POST request to the SBFC webservice
*/
private String sendPostRequest(String data, ConversionInfo convertionIds) {
String answer = "";
@@ -220,5 +271,23 @@
return answer;
}
+ /**
+ * Returns the content of a file as a String.
+ *
+ * @param filePath the path of the File to read
+ * @return the content of a file as a String.
+ * @throws IOException - If an I/O error occurs
+ */
+ public static String readFileAsString(String filePath) throws IOException{
+ BufferedReader in = new BufferedReader(new FileReader(filePath));
+ String result="";
+ String line;
+
+ while ((line = in.readLine()) != null) {
+ result+= line + System.getProperty("line.separator");
+ }
+ in.close();
+ return result;
+ }
}
Modified: webServiceClient/src/org/sbfc/ws/UsageExample.java
===================================================================
--- webServiceClient/src/org/sbfc/ws/UsageExample.java 2015-09-29 12:42:32 UTC (rev 575)
+++ webServiceClient/src/org/sbfc/ws/UsageExample.java 2015-09-29 13:50:21 UTC (rev 576)
@@ -19,33 +19,59 @@
* @throws InterruptedException if any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.
*/
public static void main(String[] args) throws IOException, InterruptedException {
- //Converted model Result
+ // Converted model Result
String convertionResult;
- //Creating the link to the web service
+ // Creating the link to the web service
// SBFCWebServiceClient link = new SBFCWebServiceClient();
SBFCWebServiceClient link = new SBFCWebServiceClient("http://localhost:8080/biomodels/tools/converters/webService");
- //URL pointing to the model to convert
- String modelURL = "http://www.ebi.ac.uk/biomodels/models-main/publ/BIOMD0000000001/BIOMD0000000001.xml";
- modelURL = "http://www.ebi.ac.uk/biomodels-main/download?mid=BIOMD0000000461";
+ // first conversion using the method submitAndGetResultFromURL
- //input Model format
+ // URL pointing to the model to convert
+ String modelURL = "http://www.ncbi.nlm.nih.gov/pmc/articles/PMC3668293/bin/1752-0509-7-41-S11.xml";
+
+ // input Model format
String inputType = ConverterParam.SBMLModel;
- //Converter to use
- String converter = ConverterParam.SBML_2_XPP;
+ // Converter to use
+ String converter = ConverterParam.SBML2XPP;
- //Launching the conversion
+ // Launching the first conversion: SBML url to XPP
convertionResult = link.submitAndGetResultFromURL(modelURL, inputType, converter);
- //Printing the result
+ // Printing the result
System.out.println(convertionResult);
PrintWriter out = new PrintWriter(new FileWriter("sbfc-ws-test.xpp"));
out.print(convertionResult);
out.close();
+
+
+ // second conversion using the method submitAndGetResultFromFile
+
+ String sbmlModelPath = args[0];
+ converter = ConverterParam.SBML2SBML_L3_V1;
+
+ System.out.println("\n\n\n SECOND and THIRD conversions result: \n\n\n");
+
+ // Launching the second conversion: SBML file to SBML level 3 version 1
+ String sbmlL3String = convertionResult = link.submitAndGetResultFromFile(sbmlModelPath, inputType, converter);
+
+
+ // third conversion using the method submitAndGetResultFromString
+
+ converter = ConverterParam.SBML2Matlab;
+
+ // Launching the third conversion: SBML String to Matlab
+ convertionResult = link.submitAndGetResultFromString(sbmlL3String, inputType, converter);
+
+ // Printing the result
+ System.out.println(convertionResult);
+
+ out = new PrintWriter(new FileWriter("sbfc-ws-test.m"));
+ out.print(convertionResult);
+ out.close();
}
-
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pd...@us...> - 2015-09-29 12:42:34
|
Revision: 575
http://sourceforge.net/p/sbfc/code/575
Author: pdp10
Date: 2015-09-29 12:42:32 +0000 (Tue, 29 Sep 2015)
Log Message:
-----------
rename to sbfc-paxtools
Removed Paths:
-------------
converters/sbfc-pathvisio-4.3/
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pd...@us...> - 2015-09-29 12:41:31
|
Revision: 574
http://sourceforge.net/p/sbfc/code/574
Author: pdp10
Date: 2015-09-29 12:41:28 +0000 (Tue, 29 Sep 2015)
Log Message:
-----------
rename to sbfc-paxtools
Added Paths:
-----------
converters/sbfc-pathvisio-4.3/
converters/sbfc-pathvisio-4.3/lib/
converters/sbfc-pathvisio-4.3/lib/paxtools-4.3.1-no-jena.jar
converters/sbfc-pathvisio-4.3/log4j.properties
converters/sbfc-paxtools/
converters/sbfc-paxtools/lib/paxtools-4.3.1-no-jena.jar
Removed Paths:
-------------
converters/sbfc-pathvisio-4.3/
Added: converters/sbfc-pathvisio-4.3/lib/paxtools-4.3.1-no-jena.jar
===================================================================
(Binary files differ)
Index: converters/sbfc-pathvisio-4.3/lib/paxtools-4.3.1-no-jena.jar
===================================================================
--- converters/sbfc-pathvisio-4.3/lib/paxtools-4.3.1-no-jena.jar 2015-09-29 12:31:34 UTC (rev 573)
+++ converters/sbfc-pathvisio-4.3/lib/paxtools-4.3.1-no-jena.jar 2015-09-29 12:41:28 UTC (rev 574)
Property changes on: converters/sbfc-pathvisio-4.3/lib/paxtools-4.3.1-no-jena.jar
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: converters/sbfc-pathvisio-4.3/log4j.properties
===================================================================
--- converters/sbfc-pathvisio-4.3/log4j.properties (rev 0)
+++ converters/sbfc-pathvisio-4.3/log4j.properties 2015-09-29 12:41:28 UTC (rev 574)
@@ -0,0 +1,30 @@
+# All logging output sent to a file
+# INFO should be default logging level
+#log4j.rootCategory=INFO, DefaultFile
+log4j.rootCategory=INFO, console
+log4j.logger.org.sbml=INFO
+
+# 'DefaultFile' configuration
+# log4j.appender.DefaultFile.Threshold=DEBUG
+log4j.appender.DefaultFile=org.apache.log4j.FileAppender
+log4j.appender.DefaultFile.File=./log/sbfc.log
+log4j.appender.DefaultFile.Append=true
+log4j.appender.DefaultFile.layout=org.apache.log4j.PatternLayout
+log4j.appender.DefaultFile.layout.ConversionPattern=%d{ABSOLUTE} %5p %c{1}:%L - %m%n
+
+
+#
+# Console Display
+#
+log4j.appender.console=org.apache.log4j.ConsoleAppender
+log4j.appender.console.layout=org.apache.log4j.PatternLayout
+# Pattern to output the caller's file name and line number.
+log4j.appender.console.layout.ConversionPattern=%5p (%F:%L) - %m%n
+
+
+
+# Comment this line or put it at the DEBUG level to get the message from the SimpleSBaseChangeListener
+# log4j.logger.org.sbml.jsbml.util.compilers=DEBUG
+
+# comment the following line to get the debug messages from sbfc
+#log4j.logger.org.sbfc=DEBUG
Added: converters/sbfc-paxtools/lib/paxtools-4.3.1-no-jena.jar
===================================================================
(Binary files differ)
Index: converters/sbfc-paxtools/lib/paxtools-4.3.1-no-jena.jar
===================================================================
--- converters/sbfc-pathvisio-4.3/lib/paxtools-4.3.1-no-jena.jar 2015-09-28 14:39:27 UTC (rev 571)
+++ converters/sbfc-paxtools/lib/paxtools-4.3.1-no-jena.jar 2015-09-29 12:41:28 UTC (rev 574)
Property changes on: converters/sbfc-paxtools/lib/paxtools-4.3.1-no-jena.jar
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <nik...@us...> - 2015-09-29 12:31:36
|
Revision: 573
http://sourceforge.net/p/sbfc/code/573
Author: niko-rodrigue
Date: 2015-09-29 12:31:34 +0000 (Tue, 29 Sep 2015)
Log Message:
-----------
added a query parameter to tell the server to delete of not the files related to a WS job when you retrieve the results
Modified Paths:
--------------
sbfcOnline/src/uk/ac/ebi/compneur/servlets/WebServiceServlet.java
Modified: sbfcOnline/src/uk/ac/ebi/compneur/servlets/WebServiceServlet.java
===================================================================
--- sbfcOnline/src/uk/ac/ebi/compneur/servlets/WebServiceServlet.java 2015-09-29 10:59:57 UTC (rev 572)
+++ sbfcOnline/src/uk/ac/ebi/compneur/servlets/WebServiceServlet.java 2015-09-29 12:31:34 UTC (rev 573)
@@ -39,11 +39,6 @@
private static String filesPath = ConfigParam.getFromEnvironment(ConfigParam.SBFC_WEBAPP_FILES_NAME);
/**
- *
- */
- private static boolean deleteFiles = true;
-
- /**
* @see HttpServlet#HttpServlet()
*/
public WebServiceServlet() {
@@ -186,15 +181,21 @@
String jobIdentification = request.getParameter("jobIdent");
String idJob = request.getParameter("jobId");
+ String deleteFilesStr = request.getParameter("delete");
+ boolean delete = false;
+
+ if (deleteFilesStr != null && deleteFilesStr.trim().length() > 0) {
+ delete = Boolean.valueOf(deleteFilesStr);
+ }
String fileName = jobIdentification;
- System.out.println("WebServiceServlet - getResult - filename = " + fileName);
+ System.out.println("WebServiceServlet - getResult - filename = " + fileName + ", delete files = " + delete);
//checking that the job is finished
if(jobStatus(idJob).compareTo("done") == 0) {
- BufferedReader in = new BufferedReader(new StringReader(returnResult(fileName, deleteFiles))); //TODO - add the boolean in the query String
+ BufferedReader in = new BufferedReader(new StringReader(returnResult(fileName, delete)));
String line;
while ((line = in.readLine()) != null) {
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <nik...@us...> - 2015-09-29 11:00:00
|
Revision: 572
http://sourceforge.net/p/sbfc/code/572
Author: niko-rodrigue
Date: 2015-09-29 10:59:57 +0000 (Tue, 29 Sep 2015)
Log Message:
-----------
corrected the url and copy/paste upload methods that were failing because the sessionId was not defined + implemented the WebServiceServlet.jobStatus method so that it work fine both locally or on a cluster
Modified Paths:
--------------
sbfcOnline/WebContent/META-INF/context.xml
sbfcOnline/WebContent/META-INF/context.xml.sample
sbfcOnline/src/uk/ac/ebi/compneur/config/ConfigParam.java
sbfcOnline/src/uk/ac/ebi/compneur/servlets/LaunchJobsServlet.java
sbfcOnline/src/uk/ac/ebi/compneur/servlets/WebServiceServlet.java
Modified: sbfcOnline/WebContent/META-INF/context.xml
===================================================================
--- sbfcOnline/WebContent/META-INF/context.xml 2015-09-28 14:39:27 UTC (rev 571)
+++ sbfcOnline/WebContent/META-INF/context.xml 2015-09-29 10:59:57 UTC (rev 572)
@@ -22,6 +22,7 @@
<Environment name="SBFC_COMMAND_CLUSTER_LFS" value="bsub -o /home/username/WWW/onlineConvert/jobs/{0}.bsubout /home/username/src/sbfc/sbfConverterOnline.sh {1} {2} /home/username/WWW/onlineConvert/jobs/{0}.input" type="java.lang.String" override="false"/>
<Environment name="SBFC_COMMAND" value="/home/username/src/sbfc/sbfConverterOnline.sh {1} {2} /home/username/WWW/onlineConvert/jobs/{0}.input" type="java.lang.String" override="false"/>
+ <Environment name="SBFC_JOB_STATUS" value="echo 'DONE {1}'" type="java.lang.String" override="false"/>
<Environment name="MAIL_SMTP_HOST" value="mx1.ebi.ac.uk" type="java.lang.String" override="false"/>
<Environment name="MAIL_SMTP_PORT" value="587" type="java.lang.String" override="false"/>
Modified: sbfcOnline/WebContent/META-INF/context.xml.sample
===================================================================
--- sbfcOnline/WebContent/META-INF/context.xml.sample 2015-09-28 14:39:27 UTC (rev 571)
+++ sbfcOnline/WebContent/META-INF/context.xml.sample 2015-09-29 10:59:57 UTC (rev 572)
@@ -22,6 +22,8 @@
<Environment name="SBFC_COMMAND_CLUSTER_LFS" value="bsub -o /home/username/WWW/onlineConvert/jobs/{0}.bsubout /home/username/src/sbfc/sbfConverterOnline.sh {1} {2} /home/username/WWW/onlineConvert/jobs/{0}.input" type="java.lang.String" override="false"/>
<Environment name="SBFC_COMMAND" value="/home/username/src/sbfc/sbfConverterOnline.sh {1} {2} /home/username/WWW/onlineConvert/jobs/{0}.input" type="java.lang.String" override="false"/>
+ <Environment name="SBFC_JOB_STATUS" value="echo 'DONE {1}'" type="java.lang.String" override="false"/>
+ <Environment name="SBFC_JOB_STATUS_CLUSTER_LFS" value="bjobs -o "stat" -noheader {1}" type="java.lang.String" override="false"/>
<Environment name="MAIL_SMTP_HOST" value="smtp.mydomain.org" type="java.lang.String" override="false"/>
<Environment name="MAIL_SMTP_PORT" value="25" type="java.lang.String" override="false"/>
Modified: sbfcOnline/src/uk/ac/ebi/compneur/config/ConfigParam.java
===================================================================
--- sbfcOnline/src/uk/ac/ebi/compneur/config/ConfigParam.java 2015-09-28 14:39:27 UTC (rev 571)
+++ sbfcOnline/src/uk/ac/ebi/compneur/config/ConfigParam.java 2015-09-29 10:59:57 UTC (rev 572)
@@ -40,6 +40,11 @@
*/
public final static String SBFC_COMMAND_NAME = "SBFC_COMMAND";
+ /**
+ * SBFC job status command name
+ */
+ public final static String SBFC_JOB_STATUS = "SBFC_JOB_STATUS";
+
/*
* How long should a session last in the database (hours) --> How long should the files be kept on server
*/
Modified: sbfcOnline/src/uk/ac/ebi/compneur/servlets/LaunchJobsServlet.java
===================================================================
--- sbfcOnline/src/uk/ac/ebi/compneur/servlets/LaunchJobsServlet.java 2015-09-28 14:39:27 UTC (rev 571)
+++ sbfcOnline/src/uk/ac/ebi/compneur/servlets/LaunchJobsServlet.java 2015-09-29 10:59:57 UTC (rev 572)
@@ -173,7 +173,9 @@
if(request.getParameter("sessionId") != null && !request.getParameter("sessionId").isEmpty()) {
try {
- System.out.println("sessionId = " + sessionId + ", input model type = " + inputModelType + ", converter type = " + converterType);
+ sessionId = request.getParameter("sessionId");
+
+ System.out.println("sessionId = " + sessionId + ", input model type = " + inputModelType + ", converter type = " + converterType);
String fileName = null;
String inputModel="";
@@ -204,15 +206,15 @@
in.close();
// trying to get a meaningful file name from the URL
- int fileNameStart = request.getParameter("url_upload").lastIndexOf("/");
- int fileNameEnd = request.getParameter("url_upload").lastIndexOf(".");
+ int fileNameStart = urlStr.lastIndexOf("/");
+ int fileNameEnd = urlStr.lastIndexOf(".");
if (fileNameEnd == -1) {
- fileNameEnd = request.getParameter("url_upload").lastIndexOf("?");
+ fileNameEnd = urlStr.lastIndexOf("?");
}
// In case the url does not contain either '.' or '?', we take the last position of the String
if (fileNameEnd == -1) {
- fileNameEnd = request.getParameter("url_upload").length();
+ fileNameEnd = urlStr.length();
}
/*We add a small number to the fileName to avoid problems
@@ -220,7 +222,7 @@
* a file with the same name during one session
*/
convertNum= (convertNum + 1) % 100;
- fileName = request.getParameter("url_upload").substring(fileNameStart+1,fileNameEnd).replace(' ', '_')+"_"+convertNum;
+ fileName = urlStr.substring(fileNameStart + 1, fileNameEnd).replace(' ', '_') + "_" + convertNum;
}
Modified: sbfcOnline/src/uk/ac/ebi/compneur/servlets/WebServiceServlet.java
===================================================================
--- sbfcOnline/src/uk/ac/ebi/compneur/servlets/WebServiceServlet.java 2015-09-28 14:39:27 UTC (rev 571)
+++ sbfcOnline/src/uk/ac/ebi/compneur/servlets/WebServiceServlet.java 2015-09-29 10:59:57 UTC (rev 572)
@@ -21,14 +21,27 @@
import uk.ac.ebi.compneur.dbAccess.JobAccess;
import uk.ac.ebi.compneur.dbAccess.SessionAccess;
+// TODO - we could add several servlet so that it look a bit more like a normal REST WS
+// TODO - we could add other methods
+// TODO - we could support GET and POST. The methods would do the same, just the get method could display the result in the browser
+
/**
* Servlet implementation class WebServiceServlet
*/
public class WebServiceServlet extends HttpServlet {
+ /**
+ *
+ */
private static final long serialVersionUID = 1L;
+ /**
+ *
+ */
private static String filesPath = ConfigParam.getFromEnvironment(ConfigParam.SBFC_WEBAPP_FILES_NAME);
- private static boolean deleteFiles = true; // TODO - Should be made an argument of the query
+ /**
+ *
+ */
+ private static boolean deleteFiles = true;
/**
* @see HttpServlet#HttpServlet()
@@ -181,7 +194,7 @@
//checking that the job is finished
if(jobStatus(idJob).compareTo("done") == 0) {
- BufferedReader in = new BufferedReader(new StringReader(returnResult(fileName)));
+ BufferedReader in = new BufferedReader(new StringReader(returnResult(fileName, deleteFiles))); //TODO - add the boolean in the query String
String line;
while ((line = in.readLine()) != null) {
@@ -196,14 +209,16 @@
}
/**
- *
- * @param idJob
- * @return
- * @throws IOException
+ * Returns a String representing the job status, either one of 'pending', 'done', 'not found' or 'unknown'.
+ *
+ * @param idJob the id of the job to check
+ * @return a String representing the job status
+ * @throws IOException - If an I/O error occurs
*/
private String jobStatus(String idJob) throws IOException {
//Launching the conversion job
- String command = "echo \"DONE " + idJob + "\""; // TODO - adapt to use a variable define in the context file
+ String command = MessageFormat.format(ConfigParam.getFromEnvironment(ConfigParam.SBFC_JOB_STATUS), idJob);
+
Process child = Runtime.getRuntime().exec(command);
BufferedReader in = new BufferedReader(new InputStreamReader(child.getInputStream()));
String line = null;
@@ -235,11 +250,14 @@
}
/**
- * @param fileName
- * @return
- * @throws IOException
+ * Returns the content of a {@link File} as a String.
+ *
+ * @param fileName the file name
+ * @param delete a boolean to tell the method to delete or not all the files related to fileName.
+ * @return the content of a {@link File} as a String.
+ * @throws IOException - If an I/O error occurs
*/
- private String returnResult(String fileName) throws IOException {
+ private String returnResult(String fileName, boolean delete) throws IOException {
File out = new File(filesPath + fileName + ".done");
String returnString = "";
if(out.exists()) {
@@ -254,19 +272,19 @@
//Suppressing conversion files
if(listOfFiles[i].getName().endsWith(".input")) {
- if (deleteFiles) {
+ if (delete) {
listOfFiles[i].delete();
}
}
else if(listOfFiles[i].getName().endsWith(".bsubout") || listOfFiles[i].getName().endsWith(".done")) {
- if (deleteFiles) {
+ if (delete) {
listOfFiles[i].delete();
}
}
//this is the result file we had to work by elimination as we don't know the extension
else {
returnString = readFileAsString(filesPath+listOfFiles[i].getName());
- if (deleteFiles) {
+ if (delete) {
listOfFiles[i].delete();
}
}
@@ -277,9 +295,11 @@
}
/**
- * @param filePath
- * @return
- * @throws IOException
+ * Returns the content of a {@link File} as a String.
+ *
+ * @param filePath the path of the File to read
+ * @return the content of a {@link File} as a String.
+ * @throws IOException - If an I/O error occurs
*/
private static String readFileAsString(String filePath) throws IOException{
BufferedReader in = new BufferedReader(new FileReader(filePath));
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pd...@us...> - 2015-09-28 14:39:29
|
Revision: 571
http://sourceforge.net/p/sbfc/code/571
Author: pdp10
Date: 2015-09-28 14:39:27 +0000 (Mon, 28 Sep 2015)
Log Message:
-----------
renamed environment variable and java system property to SBTRANSLATE_PATH
Modified Paths:
--------------
converters/sbfc-antimony/lib/sbfc-antimony-1.0.jar
converters/sbfc-antimony/src/org/sbfc/converter/AntimonyConverter.java
Modified: converters/sbfc-antimony/lib/sbfc-antimony-1.0.jar
===================================================================
(Binary files differ)
Modified: converters/sbfc-antimony/src/org/sbfc/converter/AntimonyConverter.java
===================================================================
--- converters/sbfc-antimony/src/org/sbfc/converter/AntimonyConverter.java 2015-09-28 14:37:05 UTC (rev 570)
+++ converters/sbfc-antimony/src/org/sbfc/converter/AntimonyConverter.java 2015-09-28 14:39:27 UTC (rev 571)
@@ -15,7 +15,7 @@
* The name for the environment variable whose value contains the path to the program
* sbtranslate.
*/
- private String sbtranslateEnvVar = "SB_TRANSLATE";
+ private String sbtranslateEnvVar = "SBTRANSLATE_PATH";
/**
* Path to the antimony sbtranslate binary.
@@ -30,11 +30,11 @@
if (program == null) {
// the environment variable is not defined.
// Let's use get the value from the corresponding system property.
- program = System.getProperty("path.sbtranslate", "sbtranslate");
+ program = System.getProperty("SBTRANSLATE_PATH", "sbtranslate");
}
}
- /** Return the environment variable for the program sbtranslate. This is defined as SB_TRANSLATE. */
+ /** Return the environment variable for the program sbtranslate. This is defined as SBTRANSLATE_PATH. */
public String getProgramEnvVar() {
return program;
}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pd...@us...> - 2015-09-28 14:37:07
|
Revision: 570
http://sourceforge.net/p/sbfc/code/570
Author: pdp10
Date: 2015-09-28 14:37:05 +0000 (Mon, 28 Sep 2015)
Log Message:
-----------
renamed environment variable and java system property to SBTRANSLATE_PATH
Modified Paths:
--------------
trunk/doc/sbfc_manual/sbfc_developer_manual.pdf
trunk/doc/sbfc_manual/sbfc_manual.pdf
trunk/doc/sbfc_manual/sbfc_user_manual/converters/antimony2sbml_and_sbml2antimony.tex
trunk/doc/sbfc_manual/sbfc_user_manual/converters/cellml2sbml_and_sbml2cellml.tex
trunk/doc/sbfc_manual/sbfc_user_manual.pdf
trunk/sbfConverter.sh
Modified: trunk/doc/sbfc_manual/sbfc_developer_manual.pdf
===================================================================
(Binary files differ)
Modified: trunk/doc/sbfc_manual/sbfc_manual.pdf
===================================================================
--- trunk/doc/sbfc_manual/sbfc_manual.pdf 2015-09-28 14:32:29 UTC (rev 569)
+++ trunk/doc/sbfc_manual/sbfc_manual.pdf 2015-09-28 14:37:05 UTC (rev 570)
@@ -591,41 +591,58 @@
endstream
endobj
520 0 obj <<
-/Length 3933
+/Length 4004
/Filter /FlateDecode
>>
stream
-x\xDA\xD5[Iw\xC7\xBE\xEBW\xE099^\xC4a\xEF\x8B\xF2r eّ\x9E;&o\xB2 0$\xE1\x80-\xF54\x85H\xD69\x88cI\x9C_\xBE:\xFDN\xC3\xE7\xD19\xB8\xBCD\x99k灒ͣ\x81\x92\xC9\xE0s\xF6\x97ቓ2{;<\x89:[P8\xA7\xF0\x81\xC2B\x93\xAD\x86'\xDE\xDBl\x91u\xD9D{@8\xA1\xB0\xA0pa\xD95Ѝ\xD8\xD1l!t\xB0P\xFFi(\xB5ξ\xA5\xF0#T\xA8\x80\x84\xA5\xA2w^g\xC3\xB3\xF3a\xD0\x82\x8F\xC3_.?\xBCzw\xD9\xC2T\xADs\xA7}/\xA6K\x82\x98\xAAL\x93\xA9:\xB7\xC4LE9|\x90\xD9\xE9\xF0D\xF9\x90-!\xA7Ev\x85_\x911\xBD\xE5h\xC1us\xCE=pTpTr\xDDj\xB7P\x89\xFF\xA0\x9C@\xD2\xC0\xA2[`\xB9\xD0\xC0.\x85\x8CUx\xA6Rv\x81\xC1\xCB
-L\xC1\xE4X\xA1*Zh \xC1\xC7at\x99\xC2\xD4\xE7\x98\xFD\xC4'^\xEA\xEC\xF3\xF0\xC4\x83\x83V0_S\x8CR\xC1\\xC1u8A\xF2\xA0J\x82\xB6\xD0-,Е`[a\x96i\xBE\xDE_\xA3<\x84\xECq\xA8|\xB6Xs\xE6\xCB\xF4{4\xB2\x96\xB3ՂkƋ\xBB\xFB\xE9\xAC\xE0\xCC\xEAv\xBA\xE4\xEA\xFB\xD1\xFFg&ftS\xBC\x86R \xB7Es4[&\xF3\xA2\x98\xD0\xDC\xF3\xE7\x967\xE9\xBB\xFA\xFE\xD5\xE03\x91;K\xF4n\xD3\x9D\xA5\xA1p'\xFE\xBA\xD4T\xE6.\xB7\xDCjQr|;\xBD\xB9-\xCA\xED\x92\xC8ήWE*/&\xD3\xD5t~S\x8D\xBD@r\x83i\x88)'R\xE6b\xCAr\xB1.\xC7\xF0\xDF\xF4e\xA3\x86?\x9FP\xD6\xE07\xFA&\xAAQ\xE2j=\x9DM\xB8\xA6\xB2_G%'~\xD2\xCCR\xE1Ր\xF8\xC2
-\xD6\xCB\xA7VH\xF4\xF1\x9E\x874\xA6\x89lM\xEBn2S˫\xBBW_/f\x93\xA2|\xB3Ŏ*n\xD3'\xE7mB\xD5C\xA1\x9C\xB9\x97\xE6\x85
-u@\xEF\xE7\xAA\xC7*\x85\xEA\xC7\xE2\xA4s\xB9-G\xAE\xAA\xF2`\xD3*N\x8BF\xD8X*0\xF3\xA0\x84\xA4q\xB4\xA2 P\N`I\xC2\xE5DYZN *:\xAD\xB8\xB3\xA0\x99\xB1\xD7B4\x89օ^\xC0\xEF,4ӎy5"`\x84\xEC\xB1\xF8\xFD!\xF2;I_\xECp\x85\xEA\xFC(\xE3s\xA9{A£It\x80\xDB\xFA\xF5\xFB
-@\xC5\xE5\x88=Թ\xE06\x828\xD0
-ј\xA35F\xE1\xE6
-\x8E\xE6\xAD85r\xA5\xA8Ae\xDE\xCDp\xEDs\xF4^?\x96D\xB7\x91[\xE1ۥ\xC8xb\x9Bd\xBD\x81\xE8a+7\xE1h\xC1\xD1\xF8\x896\xB9
-\xB2\x8F\xB1
-&\xBC\xD4V?\xDB\xF9-\xAA~R \xF4\x9A\xEA\xA3鄒\xD9h~\xB3\x80ʹE9\xBD\x99\xC2\xC7\xCC\xB9E
-\xABR\x87#\xF8\xDA\xF1k\xAC\x8Fĺ\x96\xAFE\x9E\xCC'<Iӄq\x9A\xCE\\xAFӟ\xC8z\x90\xEB!\xB8G#\x84\xA9\xAC\xF0wà \xC0r\x932\xF5\x9Bί\xE5\xDD?-\xFE\x9DguP\x81h0-\xFF\xB5;\x9C=U\xA5\xD2-\x83Kv\xE0\xB2ڿP\xE0G@8[\xB3\xBA^\xD2Z\x88\\xE1\xFA\x8EF\xC2\xE2\xC6\xC2r\xC5\xC2U\xFC\x9FP\xBAٽ\xB1/\x8EP8\xA2\xFF_\xE1\xEF66籪\x9C0
-`=j\xCC\xCD\xF9V\xEC\xD1]ݦ\xA2\x97\xA4*\xDB\xC4\3^\xDC\xDD\xD5Ti\xFFc\xBB\xF9\xF5\xB8Mz\x97\xE3rz\x9F \xB4y\xBBk%\xF2\xE5-W\xCEX\xAF\xC6\xF0.\xD9\xD9c9T\xF0U\xB9gLG\xC0\xB8>\xF6|^\x9C\xF9BJ\xD5n\xCA}=\xC1\x84v``\x9B]\xA6R@f\xB2\x98;\xBBE5L\xCBo\xE3Ѵ-\xDF-ҸA\xA1u\x80S\xAE\x94|\xA1r@\xEF\xE7]\x90C\xA8|\x90~| N\xE2\xF6E?\xDF\xF5h\x9D\x9Bw@D\xA87,x=\xDF
-O|\xF6|W:8\xC8\xDE\xE1\xEE\x87B\xA4\xA6\x9D@H\xE80\xC2}}\xC0+o9\xB7\xE0h΅\x9C+8*9ZqݦPO\xA7\x96@\xA2\x83\xE5\xB0\xCBָE"L/\xC6K\xA2\x9Bq\xB8\xCBbt\x83q*;\x83=z>DC\xFC\xDD\xD8E\xA1S\x9F-\xA2e\xF1q\xBC\xEDO\xB6,z\xBA\xE2\x90R\xA4\xD3(YԵt \xFAF{LJ"\xD4M\x82yqTr4e\x90\x90
-\xAF8\x9Aq\x84wI\xB4\x91\x86\xE7-\xD89\x82\x8B\x87\xE08\xE0\xCD3\xD8فw):y\xA9\xA2\xCA\xF5+A\xA15\xAA6.ΐ\xFA4\x90\x8F\x98\xA2\xB2K̾\xEB\x96\x98Ѹ^Br,\x89n)\x91*a#&\xB2\xC6W_X\xDDo!\xB1
-\xE8\xF2"\xE0w\xEB\xB6 -\xB6\xCFH\x83\xBBsq{\x9C\x87\xCF\x98\x97c\x8C+\xBAb\x81\x8F?-\xBD|\xB1>\x92\xCF^E\x81\x8FC\xFF@a%9Ag\xD5VTQߋ\xA8|s\xF0\x8B\xCBb\xBC\xAA<w\xDAĨwš\xA8\xBEi\xB2u+#]\xAB\xD8x\xA3\x90\xF6) ͛Gxƀ\x95@\xD6\xFB\x88\x83$\xA1\xBC\xA18\xD0\xFByq\xE81\x84J\xFA\xF1\x818i5ؗ^\xD8\xF1h\x9D\xA6VY\xA6\xB8Y\x91=`607\x82l\x89\xBCG\xBE\xEFG\xCBm\xAE\xE5\xE6\xAC\x9Ct\xC9N\xF2\x95;\xC2\xFFJWࢲ\xD5\xD7xp\xCC˪\xA7\x9BQ\x8E.W`n\xD6(\xE4E\x96\xEFhb\xFF\xC9&'\x87=\x87
-Ց/\x92-,\xD9kq?\x96Bˢ)A+\xC0\xDFQ&\x99\xBD\xFBB\xE7;FU\xBD9mt\x85R\x81|\xE5\xDDߧM\xEEb\xBF<\x96D\xE7\xBDZξ\xAD\xDA\xF7j\xA3fǃe\xDA0ȅ\xDC[\xCE-87\xE7\xDC\xE7
-Ε\x9C[q\xAE\xE0\ɹ\x8F\x9C\x9BrnY\xB7\xD4\xD2\xEE\xEDd\x9F\xB29hn/\xF6K\xA2\xDB"\x81_,\xBC\xFC\xB2HB\x93A)*\xD7\xFA\xEAьB\xFCg\x83|@p\x8D\x86o \xEFA8\xA5\xF0\x8E\xC2E\xA3\x81%R\x97O(,(\xC4{\xEB&\xEE\x9F@\xD2\xF1>:ދ\xF9\xA0k\xE9\xD0?@5\xB2\x86\xFCHo\xFD\x96\x81\xF1\xCF\xC7[{fKq\x9E|\xA9\xE2\xE2u\\xD7\xEB\x9E\xDC\xD1$\xBA\xBC\'\xDC\xFE\x85\xF8\xC4)\xDEyR\x81/\xC4ӼԆ9\xD0'\x96<\x8Cf}d.N9\x97\xA8\xA0r\x82\xFC\xD1~p$\xE5\x8CO)'8:\xF4\xC1]@\xC0\xFA\x97^?\xA0\xF7\xB8\xEB\xE5C\xD8L\xF3ql8\x85\xCB\xE8ڇ}Χ\xF0\xDB |\xE7\x98\xF5I\xF0\xBD^;\xA2>\xAC\xFB2]\xDD\xEE\xFC\xF7z\xB9\xE6#Z\xE8\xFA\xC8G\xA4\xA3\xAF\x87#w\xE9b\xEE\xFAܩ\x93^\xE5>\xBEԏ;\xA0\xF7\xF3\xD4c\x95-`J\xAEd/r4\x89n\xAD/KT\x97|\xFEP\xADv2\xEC\xAB%)k\xE3\xB0V\xEA\x86\xE6ֳ\x84\xFF,]\x93\x81\xF4\xA2a\xBBY\xAEe\xEEm\xAFwG\x93\xE8\xD6j\xF0\xFBlT\x9AVK|\x87i>J\x81/M\xF0\x9DS(ؐ\x9A`P`v\x86ΐ\xDBV\xC4ز\xB3@\xEA[v"\x9B㤵\xFA\xD97\x92Ҡ\xBA\xF2n\x8Cn#\xE9\xAC\x99\xE1\xF7\xD7Y\xF5\x94\x8B\xA8]\x9FG\x92H\xC1\xBA\x97\xBE\xE9:\xA0\xF7\x90\xE6\xE5C\xA8\xB5\xE0X>\x8A\xA5\xCECu\xE5\xA3\xC5\xC4t\xF3\xFC$\xA8\xDAK\xC6\xF4\xDE:l\x8D\xB7\xD6\xF6\xAEfr{\xBEYJ\x8D\xE8"(]\xC4o\xBE\x98\x84\x9A\xF4bRϼ\x98z[/&\xA1\xC7\xDF\xDE\xDB{1 UՋIHҋI\xE8\xBDy1 \xE6\x94_L\xB6\xDDs\xAF\xDEOn!\xF3η\x92\xBA\xF9VҴ\xBC\x95\xD4{o%\xCD\xEE[\xC9t\xF3\xDAd\xBF\xE2uy\xBA\xF7\xDA\xFAd\xB2\xBA\xCE\xD7\xF46ڙ\xDF\xF5~r\xA0\x80$Xw\xC0[\xCFCH\x91T[\x8D@\xFF\x8Dl\xA4
+x\xDA\xD5\xCBv\xDB\xC6u\xEF\xAF\xE0i\xBB+\xB2"9\x9E\xA8\xCC'K\xC8i\x91\\xE3,"\xA3\xB7-\xB8nιG\x8Er\x8E
+\xAE[mj!\xF1\xCA
+(\xBA\x94
+\xE8R\x88Xe+\xABL\xEB\xF5\xFE\xE9\xC1'OC\x95%\x8B5g\xBE\x81\xBFG\xF3!s\xB9!Y-\xB8f\xBC\xB8\x98\xCErά\xEE\xA6K\xAE~\x8D\xB1\xF1\xBF\x87 bF\xB7\xF9k(p
+\x98\xA3\xD92\xE7\xF9\x84֞\xA7[\xDC\xC6y\xFE\xE1\xD5\xE0\x81;\x8B\xF0\xEE\xE2\x8F\xCE\xE2P\xB8\xCF.6\x95\xA9K-\xB7Z\xDFMo\xEF\xF2"E\xB9$\x92\xB3\x9BU\xCB\xF3\xC9t5\x9Dߖc\xCF\xDC\xE0DBʉ\x94i+N\xFC"\xA4\x99\xC5\xC2\xEB!\xE1\x85\xAC\x97+N\xAD\xE8\xD3
+aL#\xD8
+\xD6\xFDd\xA6\x96\xD7\xF73\xAE\xBEY\xCC&y2n\xE3'\x97\xD9\x88\xAAC\xB9̧\x994/d\xA8z?\xCFP=\x86P2T?<&\x9DK\xBB\xCA\xEBh\x9D\x81\x83A\xA1l\xAE,`\x87@\xE7+\xD2\xFF\x8A,\x822]P8\xA2pU\x96{\xB58)#\x8C\xB0\xB1T \xE6\x81-\xC8f\x90ƑF\xC02\xA8N@%\xA1:Q\x96\xD4 Dy\xA7w83\xF4R\xF4G\x83hU\xF4\xBC\xB3\xD0L;\xC6Ո#D\x8F\xC5\xF9\xFB\xC03v\x92f\xECPCuN\xCAd\xA9ԽL£At\x80\xD9\xFC\xF5\xC7@\x89\xE5=V9\xEF\xC8lr
+ј\xA35F\xCD \xCC\xE5\xCD9Zq4\xAA\xE5$RQ
+ʼ\xE1:K\x81\xD0{!\xFCX\xDDTdDjE\xD6NE&#\xB4I\xE6\x88\xB9 G\x8E\xC6{&lR\xE5ea
+\x8C\xA9\xAC~\xB6\xF3\xA2\xFA\xC5\xD8,ّHh\xB5}\xC0\xC0g\xAD\xAEp
+qrB\xA7^G%/S\x9BJ\x89\xCBb\xEC\xEDb>\xD4\x96\x82\xBCXN\xA8\x81\xC1m\xF3KVX\xFEuVt\x9Eǚ3갚\xDEs\xCF'.\xCD'\x9C\xB8<\xFFx\xC1\xC6r\xDD`gxv\xE0!\\xDD\xE5K4qt+\xABb\x87#\x98\xED\xF85\xD6B]\xCBl'\xF3 B\xD22aׅ37\xEB\xF8Y
+r=\xF7h\x84f\xAA)\xFC\xFD\xD0k2`\xB9I\xFBM\xE77\x8B\xE2~\x84\xC01\x80\x87\xFE0\xCBG\xCBX\xFB8]NW\xF1\xAFlζ\xA3\xDCvWoNOGuL\xA35\xEA\xC1d\x93\xFEv\x9B\xA7\xF3|u\xDAD9\xE3\xA8@\x99ή\xE1J\x83҈dEۥM\xBFiP6\x96\x8F\x8A\xBCi\xCC5^\xD9X\xE6!\xF5Y\xE4\xE4:Ur\x9DJ\x9ET\xC9g5(u\x86*\xCDDV:\xA7o\x80l\x8D!\x9D\x954\xF9\x8D\x87tS,\xEE\xD9\xC4ޥ~\xB2\xC7\\x8B?\xFD\xC7ޱ\xC7\xFF\xE2\xD8+
+{\xA9\xED \xFC\xC6N(\xA9\x8Dw\x8B\xB7\xCAg\xF7\xA76\xD0
+\xC9Q,i#[\xC5\x96\xF9\xEF\xEBi\xB1\x8F\xE6\x8C+\xF8\xD9\xFE\xB5=\x9CV\xA5҆\xC0%9pU\xEE_(\xF0\x8BX8\x8DU]/i \xAD\x8B\\xA1~G!aqca\xB9b\xE2\x87*\xFE'\x94nvol\xC2\xCA
+G\xF4\xFF\x8E\xF1~#s\x9E\xCA\xCA \xC3+*\xED4\x9Bߌۨw9.\xA6Q+0\x99ᷟ1u\x86\xC1O\x98\xA5\xDAL\x9Dq\xDE\x{DBAA}v\xA0\x9B\xAC'L\xBA\xCC\xEFWb\xCC<ѹ&ڡ\x97\xB6\xB5(\x9FxT0\xC1\x8Fx\xF6\x9C\xBC\xE9\xA6.\xE5S\x99\xD9^\xD4u,\x88n\xEA\xD22\x8B\xA6\xA4. ~ɧ\xA1\xB3\x80ig\x92\x9F1\xF8\x84\xC1;\xA8\xEC
+k\xDFWe\x97Ð%\xFFD\xDF\xEE/l\xEA\xFAF"\xE8Ԑ\xD1$\xFC[l\xD1@(\xEDP\x89\x91 -?c\xF03\x94}W\x95]a\xF0\xBE*\xBBl9\xBFE\xF5\xE0#\xB8_\x84-\xBF\xB4\xA0B\xD9满\xC7ce\x98\xF69\xA6\xAE0\xF8\x8C\xC1\x96\xFDk\xF1\xA8\xB9,\xA3&\xEF\xDAL%ǤU\xFBOn\x9E\xA32\xB4\xBA|\xB0\xCD\xC5\xF9\xD4\xC1\x8FC)#\xE6OQ(w\x8A_ \x96\xE5\xE9F\xF0)r<1\x87'\xFF\xB2)L})\xBB\x85\xA9ga\x9A\xEDS+Ԩ\xE8%cF\xD2.7F7\xBCy=\xE5\xDC-Gk.,8\x87ҋ}\xE8\xF8$\x82\xC4k\xC8袊CH\x81\x98\xA0dQ\xD5ҵ\x84\x90\xD5\xDA;>\xA7\xA1n\xD2iF5\x9B\x8E.8\xA0\xDD\xAF9\x9Aq\x84\xD7[\x94\xFC\x83\xC4&\xA80k5\xA1+3\xA1\x97\xD8\xD4!\xB5F50\xBF#5;)G\x80qk\/\xD29D7\xEDH\x95
+\xBF!Y\x82\xDF\xD8|h\x98\x8C\xEBЅjY\xCA)\xAE0\xF0\xA6.1uQ-\xAD\˲\xC8 R%\x8DDy\xDBgYdP\xA9\xB29\xA9\x9Du\x91\xC0\xD7 g4\xC9V\xE5"\xF09O<\xDF
+
+9S\xBF+\x85\xB99\x935\xE4\x8C\xDFc\xB4E9\xE30ڄM\xBD
+}9.\x90}\xE9Q\xD2\xBDp\xE4^>\x84
+\xAD\x89\x87g/\xD2\xC0\xE4\xD0{y\xF7\xA2h\xF7>z\xE1yu\xAB\xA3\xDCY+S\x97\x9Cc\xF01n|\xB8@\xF2\xD6\xD2~\x86ŋ\x97T\xB4\xDB\xD03\x84\xF2w\xD9\xFE\xDFE\xB7X;"y\xC1\xB95G3\x8E&h\xD1ia\xD8w\x99F\x93\xCA^\xFFX-\xCAQW\x80\x8F\xA5L{\xBCqM\xC8{V\xBC\x96\xCDe\xA3\xA0
+\xE8+힟6\xA9\xFD&x,\x88\xCE[\xC1
+\xED\xBC\xF2\x9A@\xEDVpд\xA2\x86iڰ=\xB9\xB7\x9C[pnιG\xCE\xE5\x9C+8\xB7\xE2\ι\x82s\x9C\x9BrnY\xB5\xD4\xD2n\xDF\xEED\x9F\xB2)pn/\xF4\xA2["\x81/.2\xF9\xFF$\x91\x84&\x97\x83RPH\xAE\xD5ũ\x85\xF8g\x83|⭠\xED?\xBE%\xBF\xC2)\x85\xF7.j\xB5 , \x90\xAA|BaN!7aG\xF8x\xBAN\x8F\xEE
+\xDE\xEAF/\xD5CՈr93\x9B5L\xF6\xAC\x80q\xBC1i\x8C\xAB\x98\xF0\xE4K/\xBB^\xB7\xFC\x8E\xD1\xE0;\xE1v\xAF\xF3GLy\xBE\xCE\xEF\xF9:?\xADK%\x98=\xDD\xD0b\xCA\xC3h\xC6\xD1cqʹ\x99\xE8\x8Fv\xB31g\xD8ǜ\xE0Lh\xDF\xC7\xEE+]\xD3\xC0\xF4\x82\xD2\\xFBD%)\xBD\xA0\xF4\x84\xD29\xA5q}\x85l\xF1|B\x8B+B~Khshdv\xE0[1-Ty\xA2\xFB\xAD<\x96jy-\xE6M\x9AI\xF5\xE7\xBE3%U\xB2\x97r4\x88n\xAE/K\x94W\x94\xFET\xAEv\xD2\xEF\xB2%1k\xED\xA8Y\xEA瓭g\xC9\xFE\xB3t\xC9ҋ\x9A\x\xEAF\xB9\x96if{\xBD\x828D7W\x83\xDFg\x83\xFA\x9Fq\xB5t\x80wX\xE6\xF3\xA1\xF8NO8\x85\x84
+\xA9 9fg\xE8\xB9&#\x86\x96\x9Db\xE7в\xB3XG\xAE\xD5Ͼ\xF0\x94\xD9Րwct\xFBOg@g\xFA?\x9Eg\xD5>\x9EQ\xBB>O<\x82u/}\x91v@\xEFL\x9A\x97\xA1\xE2\x82c\xF1p\x90Q,u\xEA\xCB+\xA5Ql\x80L7\x8F7\x81\x82ʽdL\xEF\ endstream
endobj
436 0 obj <<
@@ -651,48 +668,40 @@
endstream
endobj
557 0 obj <<
-/Length 3958
+/Length 4029
/Filter /FlateDecode
>>
stream
-x\xDA\xDD\xCBv\xDB\xC6u\xEF\xAF\xE0I\xBBƼ0\x8B\xDA{\x972-
-\xFD\xC9\xFDy\x9C\xDE\xE5<n\xBC!*E\xEDp\x85\x9E\xB5?\xB6T\xDA\x87\x92F\xC4L\xD4\xFE\xB6\x9A}\xB9B5ݔ\x8Fځ\xA7\xEDk\xCC\xFD\xF3\xF5\xF5\xF7\xFB\xF4\x8E\xB40@V6E3\xD97\xF5\x8C\xF6m\xFAk\xCDg<\x92\xB2#P\xDEW\xAA\xE3\xD5\xD5\xD5!KjdRM\xBD\xDB\xF1\xB0Y\xA3\xEC\x92\x88\xC8\xE1B\xB9)x\xE4\x98'\x9B\x8C\xB1\xE9:?&<\xA1ӎ\xEA\xF5-\xD5k\xF6U\xEFn\xA7\xD1l\xB1.AБ5 \xDA\xC3|W&\xC0R$\xD2U\xE6A\x8FpVI6\x8E\x86\xA3zW\x86,g\xB6\x95A\xCBy\x94\xB0\x87\xC4I\xA5\xC8\xC7\xD3\xE9g&\x8B\x86L\x93\xEDjXЀ\xD6PG\x9C\xF1\xEE57\xB215E>\xEBi5ێ\xD4q\xA4ٚ\x8F\x90gtTFD\xA2␥\xF8\xC3\xFB\x97\xB5i@;dž"O\xBFpe,\x98]\xDC\xB3Z\xE4eQ\x92
-\x8Bch\xC7\xD8\xDA\xD3l\xC1c\xFD\xAFDK[\xAA\x9D#\xDA0VF^\xC1l\xB5?\xCC\xFB\xC6U\xD4\xC4v-\xC7h1\x9E`iCKf\xC9\xFC\x94V\x95y\xAB\xAD\xE4@f\xDA\xF2\xF9\x85\xD6I\xFBC'Z'\xED\xF7Nz\xA4\x81\x8C\x91\x9D\xEE\xA4S\xE5L\xF2\xBC\x9B&\xF8)\xB2\xD7\xC1\xD9 \xBAi"\xA1m}I$\xC1p}7t6\xF9q{\xF8?\xEF\xF0\xF3
-?Tw\x8D\xAD\xAF\xEB\xBA\xF7C0L\xFF\x86aϯ\xD8\xD78:
-\xA0ע\xA3\xF0\xE7أ\xB9-\x82\xB6U\x87wC\x90q?\xE2\xE7\xFCP\xF1U]w\x8D\x9F\xD7u\xDD\xFB虄4\xCA\xC0Gp?\xA5iz`J\x90Ji\xA2\xF9iVҙr0)9!\xEAV|\xCD%\x99\xBA\xEB\x9EsNƭL\xB4L\xA6\x93:|D\xD8e\xBBzIk\xB0\xE4V\xE4a *\x95\x94-\xC9\x8Eг\xAF(\xBF\x8B\x9E\xD8W\xDD\xC4\xEA\x9DHm\xAF[\xBA\xB3At\xAB\x87Eez+\xC0\xA2b\x95\x86\xEFM\xE8\xBA\x93[\xBEE\x99q鎓
-W\B\x81\xD2\xFA\xC7\xF1\x95\x89\xB3c\x98\x9Fѷ\xA0\x9Ae\xDD\xEAP(e\xBE\xD1\xDF\xF1\x85!
-\x93 !Ɯ\x9C\xCC\xD8N\x88\x957\x9C\xCC9^{\xA0j\xE8\xF0r\xFF8T\x96
- F\x95\xF6\x99H3u܀vʴ
-\xE82U\xA6\x84n\xE3\x98Z#{\xA3\x82\x86\xDC\xDF\xF1C+\xB9\xC2\xD5]c\xF1U7\x9D-V\xAD^\x93\xA2\xF5\xB1D\x8F\x8F\xB04oT\xB2\xA2\x85\xB6X\x893\xD9\xE8\xEB\xB0Qw\xE4\x92D;KŮqר\צ\x9E\xCF!d5(\x9C\x84\xA6W\xC9[\xFC`\xD44Q\x98{\x8F\x9F\x97X\xAC\F+\xB4\x80\xAA\x8E{\xAAI"\xFCjM1\x88(\xA6\x81\x8D\xEF9Yr\xB2\xE1d\xCE\xC9\xED2s\xD7GDw
-F\xF7zTs6\x88ZRb n\x9A \xEFM\xBC\xA6i\x98\xE6\xFCJȨ\xCA4oT\xBC\xBAw\x89\xE8ܥw\xB8_\xAC\xE4\Y B%\x85ai\x94\xE5uwJjȁ\xFC
-\xA6aÆ-\x94.\xB9\xB4\xE4҂K\x9F\xB8\x94s\xA9\xE0Rɥ\x9CK\x97\xAE\xB84\xE3Һ\xEE\xA9et^\x88\xF5B8iR\xB0\xB6\xF6\xCE\xD1)\x81\xD08\xC6\xFE/I\xA0T\x93\xEF@(SH\xAC\xF5S\xBC9}qf\x83\xE4;
-\x96\x9C\xFDG\xED\xF5\xF7-}Q\x98Ș_\xD2w\xDA\xEE\xEF\xAD\xDA5eR-\x99mu\xA3\x94\xA8M2\xA2\xE1\x8CBF:,c\xC5DFBf(\xE2\xE9u2\xAA-\x89I\xC1m\xE5n\xA5N宕\x87@6\x82\xA5X\xA4%\xB5\\xDF\xD2\xF7\xAA\xCE\xD3\xC1\x99N)_\xF7w\x99G\xBAv1\xE2\xA7r1\xC8!\xF7D\xD7~\x8C\xE6#Tɇ\xE1Ȥd\x9E*\xAD\xD8xb7\x85\xAF7
-\x98;%\xFF \xC0\xF2v,+@(\xF4P\x95\xF6#\xFB\xCAg\xC2\xE9\xFAq\xD7\xC7إy2\xD2\xD5=Ϟ\xFD;\xCF\xE1zO\x86&9'?P\xFC\xB9\x9B\xC2R\x8C\xCF\xF5\xBA\xBD;D7\xE3\x83w'\xFF-\xC4\xD7t\xDAomdl\xCF\xD7q\xDAE\x9EO\xBB_b"\xBCq\xF7q\xEA\xFC\xD2r\xF7E;6I\xE3^\xF4hF\xDF\xCF\xEE\xEE\xC1\xB0\xE6\xE8ۋ\xDBr\xE7i[\xD4\xE99\xBE\x96\xA4\x9F\xC54Mk\x8B?\xBE{o=E\xDB\xCC\xE6\xD3\x9F\xB6C/~\xDA^\xBDY\x8BO;\xA1\xFE\xE3f\xC8\xBEIي\xCC\xD7\xEB\x99-v݈\xC3\xC8\xDF>?\xDD-\x90\xC6\xB1\xF6\xE23\xBC\xA8p\xF6\xA9\x8C\xF6\xF8\xE88\xED\xE9K\xA8Y\xAD\x93\xE4X\xF4\xBAK?D\xA79!M*\x9CU\xFF\xAD\xBF\x96\xE8\xFF\x98~6\xC1\xB9 :\xD7)х
-\xBE\xF7\xAF\x83%\xB9\xBD\xE2\xEAg\x83\xE8&+x\xDA\xDD\xCBv\xB7u\xEF\xAF\xE0i\xBB\x9E\x86\xDE\xC0\xB8\xA7\xD9ub\xE7ȉ\xEB\x9C.\x92,(r$1\xA5HfH:\xF1\xDF\xF7>0\xC3\x92C\x89\x9A\xB4i\xBB\xD0\xE0}\xDC\xF7@\xC9\xC1\xDD@\xBEz!;ҟ_(H\xE5@
+|Q\xE9ApFؠ\x93\x87\xDF\xFF(Sh\xFBz \x85\xC9\xE3\xE0\xEA\xF9+\xA8\x9F\xA2\Ϡ82\xC1e7\x90@\xCD\xEB\x9C"\xB5\xBC.\xE6\xF3\xF7W\x9C/\xA6\x9C\xF9\xF8
+\xAA\x80\xB8_F`\xAA\xDC\xC3`f9\xF3\xC4\xD7\xF7ź\xE0\xFE\x98G\x98\xA5\xAF\xDC\xC0\xCC \xE0\xEC!\xE56˔\x96\xE3\xC5z>\xDE\xD0@\x8F\xEB\x82q\xB0.\xF8\xFEB\xA3]\xD7\x9Cݮg\x8B;\xB2\xB9\xAA,\xBC\ \x94\xCD\xECaI\x99\xCFܹ\xF8ִϹ\xB4*\x97w\xE5\xF87H{B\xDCz\xDE\xD3\xFA\xA6^\xA0\x8E\xAC1\xB8K\xE2\xBDږ+Z\xEDr\x9Dj\x96\xB7$+\x94\xC1\xE5++rk#\x90\xD6\\xD5\xC9+:ʏP?.\x8B\x97-\xE0\xA0"e\x83\xC3GP\xE5\x85v\xC9(1u%\x8D\xB1M\xE1\x88Rx\x9BC\x8Dy \xE8\xB6v\xBC\x88\xDB鈹ׄ\xD29"\x97XPEM8\xDB_N.5M\x88")+\xE0(}\x84\xED\xFA/\x95v\xDFZ!Oô\xD8-\xA6\x81\xB7J?X\xC5\xC0\xE3=\xA0\xBE,~\xDE\xCE\xCAS\xDCce\xF6\xF5\x98\xE6\xD0z\xEFs+\xD3\xE5"q\xE4,5\xEF\xBF\xE4ʳl\xAD\xDBNm\x95\x8B\xCC-\xB8\xCB'\xF5\x88\xCC\xC1x\xE7\xED3#\xF3'\x8C~<2ﱄ*2\xEF\x87¤\xC2\xC0C\xF59\xD49D\xE7)\x9A\xC7;8U\x9F\xA29\xED \xD6\x85a̮0\xF7\x8F5\xBA\xFB\xE0qe\xE8\xFC1\xD3ar\x8B X].-9Yp\xE5'.\x9C\x94\x9Cl\xB8mW\xA9c\xC8\x9Ad\x89\xA0s&\xA0\xEBp\xC8J+\xAC\xEDu\xFE|6\x88nā\xB9\xD6\xD17\xA7\xB3KH0\xA8\xA6c\xC2T\xEBx1\xA7\xE3E<E\xC0#\x97t"\x98S(\xDDc\x9FjBd\xCC\xE5\x91\xD3I\xA9\x87#s\x9E$\xF2w\x94/)?\xA6\xFCB\xD3D+\xA8\xBB\xE1\xA1q?\xC51Yp\x92zι˸1 \x9C8\xE469D\xBDQ\xF7!\xC8\xD9 : b\xF2 \xA2֍\xF3`\x8B;\x8Fu\xC5\xC0\xA1\x8A\xF5Ĥ\x967\xA5[.\xCD8\xB9\xE3\xCA-\x97\xCAF\x9B\xE7\xD4/ 6L\xD2i@?
+T\xCF\xE9\xA4X"\xF7\xA7\xBC\xF2\x84^)q!\x98 \x9F\xE7\xD5\xC1p:-F\x8A\xE6\x917\x8CbaQ,O\xB2\xAA,ZmN>#\xBD\xC1ja\xCAW\xF8\xB9´\xDFa\xEE?\xDF`\x91Z\xAF0w\xC9]\xE0\xF3搪ƃu\x82 \x90/\xA4~Čy\x88\xBEd'M\x8C\xC7\xF3\x90=\xA2|\xE0U\xC12hoC.{\xD9\xCD]"\xD5\xEB\xB6\xE1l\xDD\xDC\xA30\xAE\xBEnR\xE0z\x98\xF66\xFB?\xF0\xF3?Tw\x8D\xAD\xEF꺏Cpq\xFF\x8A\xA8`\xAF\xDE4O\xD81\xE4+\xDE\x95J\x98\xBF@\xA5ܩ~\x95\xB3أR|\x9A\xB0\x95Z\xB5\x95i\xACtc\xB72\x8D\xACLÁ2`\x8A\x99\xE08\xD7/\xA4\xEBuqx6\x88n\xAE\x88`\xB3ө\xC9\xD6+F\x8E\xA2 Ln\xF9bgƥ;N\xB6\Yr ud\x94GL\xA2\xE7[:Ұ9\xA3`~Fߒj\x96u\xABG=\x99\x87F\xCFw\x984Ly\xC3\xD8fo\x92\xBB.\xA9\xF2\x86\x939'+dt\x8D!]\xC3\xE6\\xE6| \x9A.
+\x8FKGtMh\xE9\x9Ax\xC2qK\xBA&>\xC1q\xF3\x86\xF0\xF2\xFC`!\xD8ӡ\xEE\x89`\xEE \xA3\xE6z,a\xC7\xEBg\xE2\xE1\xE85k\xEB\x8A\xC4\xD3=\x90qR\xD8\xEA\xBA\xAF\xAA\xAAc\xEEb\xBD\xD9;\xF0\x86\xF8\xBE,&\x9B\xC3c\xAA/\xB8\xEA3\x9E\xAB\xD1
+-\x8D\x9BQ\xFD\xE7\xD5.\x{137EF3}<\x8E\x9A\x94\xB3\xD5\xE6\x8C\xF0\xDEh'\xA27}8B\x83\xEEs\xCF\xE6\x88\xC7G?\x81#\x9E\xBF\x84\x9A#z\xE1\x810 \xB5\xC9\xFB\xA9\xE0sAt\xAB`\x95m\x8FdL+\xBC(\xA0\xC2R\xC1\xA5\x92K\x9Bc\x95tG\xEE\xF0T!\xE4\xFDr04NB\xD3\xEB\xEC=~\xF0\xCC7Ә\xFB\x88\x9FWX\xAC|N+tt\x98\xDF)WU T\x93$\xF8\xD5$\x86NP\x92\x9A1\xBE\xE7d\xC9ɖ\x939'St\x85\xE8\xF4p}BuK\xD00\xA6ד\xA0\xB3A\xB1\x86
+O\xC1\xC0\xF3\x96\xB9\xC1\xA6K&F\xA2\x85͚\xA9\xD7&Tzx\xE03ѹK
+qc\xBF\x93\x9Es!}\xF6\xE4( \xC3d\xD2\xE5m\xB7$3
+\xEC\x80T\xB5\xCCÖ}`(\xBD\xE6ҒK.}\xE2R\xC1\xA5\x92K.\*\xB9tť\x97\xD6uO\xA3\x88\xA3\xB5'ы\xF1\xC49\x86ER\xBA^\xD8;D\xA7\xD2\xE0\x82E\xEB\xFE\x974\x904f\x90\xCA52k\xFD\x90pN_\x9C\xD9"\xFB\x8E\xA2#\x82s㩽\xFE\xBE\xA7/*\x95\xF2K\xFAN\xDB\xFD\x83\xD3\xAA&\xA2N\x8A\x96\xC0H<\x86\xE5t \xD3!\xA2#\xF2H\xDFR,\xF1Q\xC5\xE2\x9Ag\x90\xBF\x95\xA8B\xA0\xE2l\xAF\xE3\xEC\xB3At
+\xAB\x8E\xC0u\xF1@VC\xD2\xC0\x91\xA8\xAD\xE95/&\xEFh\x8B\xF4H\x91\x99
+\x939'W\x8C\xC4\x97\x94
+?\x93\xA2s\xEB\x9C\xE41?%\x8F\xC1 \xF0\xF8{\xF8V\xC1\x9C\x8E\xE8O\xF8VO\xFD\xB8o\xD5c ;2\x9F\x89\x87G\xBDmܜ\xD7\xC2Z}\xE8j\xF33\x9E\xB6\xA7\xBDw-x\xD2\xC3ޮ+\xBF\xBA\xBASf\xA7:囷\x8C\xA1yˈO\xCEf\x9B\xFB\xBD\xB9\xB7\xEBmu\xBD\xFE\xCC/-ƿ>\xDD=\xD7&@\xDA\xE7\xF6M[\xFD\xB9\xB7oO\xFDz\xFEj\xEA\x85¤Ƴ\xC2~\xEA\xEA\\xDD\xC6\xD1(\xA1\xF2\x9DmT
+\xADIN<\x9C\x93A\xC8Ɇ\xE5l\x98\xC8I\xC81\xD2\x85@o\xAB\xD1\x80\xAD
+\xE4o\xBEw"\x8F\x82-Z\x88U>)\xA8\xEF\x8B\xE8v(x\x9A\xC9Q_G}\xFD\xAA\xF2\xEF)\x857\xAEq<\xE1\xFA\xBF\xA0\xE8\xC0*\x919\xC2\x98N\x95\xA7 \x8D\xFD\xB8sAt\xADD\xD0\xFE\xD0*\xB0>\xE2\x86O#o9y\xCDI\xBA}Yp\xE9S}`\x89I\xC9m\x9B\xFDJ#վ\x97D \xC1ѱ\xA5#\xB3\\xDF\xD3\xF7\xAA\xCE\x89\x80\xA6S\xCA\xD7\xFD}\x84\xA9C\x8C\xF4\xA9B\x8AB(<1uc\x98\x84:\xFB~8\xB2\x92\xDCSm4;O\xA6\xF0\xE5\xACwG\xA0f\xE2\x9F38ގc\xA59\x97\xAA\xD2\xE1m\x82\xB9\xF0\xA6~\x9A\xF6S\xEAҤ\x84\x92B\xF9\xBA\xE29p|ɜ\x93)''%?\xAF\xFC\xB1\x9B\xC3$\x9E\xC3\xF5\xBA{<D\xB7\xE3s}\xAF~A\xF6*\xB6\xA5\x92<t\xF3*\xE4\xF85 u\xB7\xB0w\xA1Y\xE59\xDD \xF6@\xF3\xD9 \xBAYj\xF2\xF0\xBB \xB2\xF2\x80k \x{DAE1}\x92\x809\x85W\x9CCf\x86\xDC?Qh\x8D:"\x91ITOIs\x84\xF1M\xA15,\xB4\xBA%\xB4\x96\x96\xA7,\x9E\xA5[
+X\xAC>.\x9D\xCE\xD2OI\xFE\xA3ҩr/\\xE8\xE1\xAE \x80\xC7\xDEUvz+\x8F~\xDCYy\xFEv|\x9E\xE2\xED\xAAhDt{\xCB\xF8\x92)"g\xA8\xB0{\xB8\xF9~
+\xF2\xCF!\x88\xF9\xF8\xAE\xE0\xDE\xF8\x80\xEE\xE0\xD16\xF7\xE77\xE7ԉ\x9E4\xE2[@v>2\xB6\x8C\xE7\xEB4\xED\xA2(\xA6\xDD\xEFH\xDEeZ\xC0}\x9A\xFA\x92߉\xEE\xBF\xC7\xC7&%+D\xF9\xFE\xCC\xD5
endstream
endobj
591 0 obj <<
@@ -27061,8 +27070,8 @@
endobj
1616 0 obj <<
/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfTeX-1.40.14)/Keywords()
-/CreationDate (D:20150928151323+01'00')
-/ModDate (D:20150928151323+01'00')
+/CreationDate (D:20150928153535+01'00')
+/ModDate (D:20150928153535+01'00')
/Trapped /False
/PTEX.Fullbanner (This is pdfTeX, Version 3.1415926-2.5-1.40.14 (TeX Live 2013/Debian) kpathsea version 6.1.1)
>> endobj
@@ -27092,39 +27101,43 @@
/W [1 3 1]
/Root 1615 0 R
/Info 1616 0 R
-/ID [<2C18763C47BA646C82549055090ED334> <2C18763C47BA646C82549055090ED334>]
-/Length 3630
+/ID [<59EDF00095FC5D0CDE1298EA30B9A3C3> <59EDF00095FC5D0CDE1298EA30B9A3C3>]
+/Length 3622
/Filter /FlateDecode
>>
stream
-x\xDA%\xD9I\x88%[^\xC7\xF1{\xB2*k\x9E\xE7y\xCCʬyzU\xF5\xAA*\x87\x9A\x87\xA8\xCAz5\xCFsJmDBā\x97r\xEEBT\x84\xFB5\xDD\xBDT0\x9E\x82
-
-Dž4\xE8
bCH\x83\xED\xA2u\xA1\x8D\xD0C\xCD\xCF\xDF\xCD7\xE3\xFC\xEF\xCD{#\xCE\xF7w\xE2\x9E8g0\xFEwd0\xA4\xC1\xE4\x8F\xE7\xFE\xFA;#\x83\xD1\xE1\xB5#j_\xA8֜\xF3\xD5\xEE\xAA\xD2\x85j\xF7\xD4j.\x84Ej\xAF\xD5h.\x86%jo\xD4\xF6k.\x85ejo\xD5&4\x97\xC3
-\xB5wj\xE3\x9A+a\xD5\xDCi\xCE\xEESۧ\xB9֨\x9DT\xD3\\xEB\xD4>S۫\xB96\xA8]Uۣ\xB96\xA9\xDDRۭ\xB9\xB6\xA8=Tۥ\xB9\xB6\xCD\xD5\xDA\xD5j;5\xB7\xC3\xB5\xF8\x8E\x9A\xF1\xC2.\xB5\x8Bj\xF1\x96\xF8\xD0=j\xD7Զi\xC6 \x8D\xA9=P\x8B\x8F\x8F\x8BW{\xAA\xB6E3:b\xAE\x87FƖ\xA8ũE'T;\xA8\xB6I3V\xBB\xAE\x97\xF2\x8E\xAA\xDDP۠y\x8E\xAB\xDDT\x8B.9'\xD5\xC2\xDB:\xCD\xCF\xE0\x94\xDA}\xB5\xE8\xCE\xD3pF-\xCEy\x8D\xE6\xE7pV-\xFA*T\x9C\x83\xF3s\xB5zTm\x95\xE6$L\xA9-P\x8D\xD30\xA3\xB6X\x8D\xE9\x91pQ-\xAE7"p .\xABmV\x93\x92\x91+pUmL-\xE2s
-\xAE\xABW\x93\xB0\x91pS\xED\xACZD\xAF\x82[jWԤs\xE46̪E&#\xB6w`.\xF2#\xDDN5\xC9\xB9\xF7Ԏ\xA8E\xE4\xEF\xC3\xB5\xA3jF\xC5\xC8Cx\xA4vA-\x86\xCBcx\xA2v[͈y
-\xCFF\xF3\x9A\xF8\x8Ej\xCF\xE1\x85\xDA.5\xA3q\xE4%\xBC\xCC\xCFsg?Z}\xD4|
-o\xE0m\xA4_\x8F\xF7\xBD\x83i0X\xCD\xF7\xDE,\xD9\xD50~\xABgi\xB0\xE6\xAB\xE2_\xD9\xC7\xE8v\x92}\x8Ci\x97\xD5\xC7H\xD6}\x8C_]\xD7Ǩ\xD5\xD9}\x8CUz\xFA\xA1\x84\xF6L\xF7"\xD0\xCBF/4\xBD4\xF5b\xD6\xCB_/\x98\xBD\xC4\xF6\xA2\xDC\xCBx/\xFC\xBDQ\xD1.\xBDq\xD4G\xBD\x91\xD7=\xBD\xB1\xDA3\xBD\xD1\xDD)\xBD\xFBAo|\xF4\xEE \xBDQѻ\xE7\xF42\xDEG\xF8?\xA6\xC1\xE9\xFF\xBFJ\xE3\xA3?\xEC\xF2\xA3\xFF\xEE\xA4\xC1\x8B/\xE3\x85\xE3`\xF4'\xE1M\x83\xCB?\xAF\xFD\xF4\xFE,\x88w\xB8?\x9DW\xF1f\xEF\xA7|\xFCc\xE2)\xBC\xA4q=l\x86\xB86\xEF/\xA6\xB4\xF5f\xFC\x9Bx\xF7\x97A\xA8\xFB\xAB \xCA\xFDu\xE0\xFE&\x88m\x84\xB5\xA2\xD2?\x81\x994\xB8~;>o\xD6\x8D\x95\xE1\IloWr\xDA?-\xCB`9\xAC\x80\x95i\xF0\xE5\x9F\xFBᙍ[\xF81X\x9D?s<jk!\xEE\xE3\xEB!\xEE\xDE!\xEEٛ!\xEE\xD4[\xC1\xFDyv;\xB8+\xCF\xEEC\xA8z\xE4h7\xB8
-\xCF\xEE7\xDFYw\xDB\xD9 \xD8\xE0 \x82\xC3p\xEC깣Sp<
-~\xE1L\x9C\xDF 8\x9F\xC3m\x98Kį\xFD{\xBCz\xCE\xC1y\x98\x84)\x98\x86\xB8-V\xC3X\xEB`=l\x80\x8D\xB0 6\xC3ؚ\xC6\xFF\xE2Q\x9C\xCB\xD8 \xBB`7쁽p \xB6\xA7\xC1O~1\xDE<\xFB`& \xE6W\xE0\xC44\xEA\xC4\xE4\xE9Ĕ\xE9\xC4D\xE93\x88\xE9\xD1i\x88I\xD1\xE7S\xA1s`46 \xA6=c\xD3`\xB23vLqƮ\xC0\xD54\xFE߉S\xBB
-\x97S\x9Aw>\x9Aנs\x95\xB1;`62fZ16\x9B\xD2\xEA_\x8E\xF7\x99\x80W/=\x83\xC7)m\xFC\xFBx\xC1Tc\xEC<O\xE3_{\xB5\xF0\xDE\xC2;x\x80\xEE\xDA\xFBj~k~k~\xEBP\xF6:\x8D\xFF\xE9\x89x\x95\xEE\x9A\xE4\x9A\xE4\x9Aߚ\xDFzy\xFF\x8F\xAF\xE2-\xAC֬֬֬֬֬֬֬\xD6\xFA\xAF^\x99ƿ\xFB\xCD\xF87\x92k~뭰
-\xB6\xBB\xC0\x98\x9B1]3]3]3]3]3]\xB3Z\xB3Z\xB3Z\xB3Z\xB3Z\x9B+\xD7\xD4\xD6\xD4\xD6\xD4\xD6\xD4\xD6\xD4ֺ֬֬֬֬\xAE>\x93ƿ\xFF\xA38+jkV\xEB\x98ֲZ\xC7d\x96\xD5:\xA6\xB0\xAC\xD61q\xB8:\xA6\xAB1?\xA5\xB1\x8EY\xE9
-\x88\xB9(\xABu\xCC@9\xAF\xE3\xDA\xF8\xAD\xF9\xAD\xEF\x829f}\x92\xFA!_\x9B[\xD4L\xD7\xCFM%\xA3O\x9F\xA6\xF1܉3\xE5\xB7\x86\x9A\xF8\xFA50]3]3]3]3\xDD\xF9\x8F\x8E\xE9\x8E\xE9\x8E\xE9\x8E\xDA\xCEH\xEE\x8C\xE4\x8E\xE4\x8E\xE4\xCEH\xEE\x96-\xD7\xE0:܀\x9BP\xC1-\xB8
-\xB3p\xBE\x80\xBBp\xEE\xC3x\x8F\xE01<\x81\xA7\xE0i\xF1SD\xC03\xE2'O\x9F^\xC1kxo\xE1\xBC\x87\xC0~\xE3\xF6\xF6\xF6\xF6\xF6\xF6\xF6\xF6\xF6\xF6\xF6\xF6\xF6\xF6\xF6\xF6\x9B\xD5\xE9\xFC\xFE\xF3 M\\xFB\x97A\xDA\xFF'ߊ\xEF \xBEY\x9B&\xAE~=\x9A\xD1\xDFlL\xFB\xFF\xF8a\xD46\xB9=8\xE7f[:\xF6oۢFc\xB35\xFB\xE1\xEFDS6ah\x84\xA1\x86Fah\x84\xA1\x86Fah\xE6\xC20Wt8\x9D\xFFѯƧHD#\x8DD4\xD1HD#\x8DD4\xD1HD#\x8DD4ќ\x83\xF30 b\xD1D,䠑\x83F9h䠑\x83F9h䠑\x83F9h䠑\x83F9h䠑\x83F9h䠑\x83F9h䠑\x83&V
-䠉\xB5\x82xҔ\x83&\xFAT9h䠑\x83F\x9A\x8Fzh-X \xAB`5\xAC\x81\xB5\xB0\xD6\xC3\xD8\x9B`3l\x81\xAD\xB0
-\xB6\xC3\xD8 \xBB`7쁽0\xFB`&`?\x80\x88\xC0!8G\xE0(\x83\xE3pN\xC2gp
-N\xC3\xF8\xCE\xC298\x930\xD30\xE0"\\x82\xCBp\xAE\xC25\xB87\xE0&Tp\xCB*N\x9C\xE9l\x9A\\xFC\xF5\xE8\xE7;\xF0܅{p\xC0Cx\x8F\xE1 <\x85g\xF0^\xC0K\xB0H4x
-o\xE0-\xBC\x83\xF7\xF0D \xFB\xDE,Y\xF2<\x98\xA3@|&>\x9F\x89\xCF\xC4g\xE23\xF1\x99\xF8L|&>\x9F\x89\xCF\xC4g\xE23\xF1\x99\xF8L|&>\x9F\x89\xCF\xC4g\xE23\xF1\x99\xF8L|&>\x9F\x89\xCF\xC4g\xE23\xF1\x99\xF8L|&>\xEFO\x93\x97\xBE\xA3s\xF2\xC14\xB9\xE3\xEF\xA2)Y\xB2d\xC8"\x90E \x8B@\x81,Y\xB2d\xC8"\x90E \x8B@\x81,Y\xB2d\xC8"\x90E \x8B@\x81,Y\xB2d\xC8"\x90E \x87}\xA3,\xCF\xF1\x99\xF8L|&>\x9F\x89\xCF\xC4\xE79\xF1\xA3)N\xE8I\x9A<\xB62\xAE\x8D\xFD\xCC~f?\xB3\x9F\xD9ϱD\xC8~f?\xB3\x9F\xD9\xCF\xECg\xF6\xF3G\x9Fg'%\x81y0,\xD9&k\xB4i!,˳\xC9zlZ
-\xCB`9\xAC-N\xC3?Eo\xD2\xE4\xB3\xC6\xEAV\x9C\xDF\xD94y\xFD\x9F\xA2\x9BG\xF84 V\xF8\xD24̀\xF5\xDDd\xB1?]\x82\xCB`]9\xD9dHV\xFC\x93%\xF9d
->YtOV \x93E\xD9d8Y\xAFKv[\x92\xE5\xD9\xE4q.Y\xB9K풥\xF6d5/E\x83\xB5\xDCd\x8F =\x83\xE7\xF0^\xC2+\xB0ے,e'\xAB8\xC9J\xB2\x9C>\x80Tq\xA9"P\x89@%\x95T"P\x89@%\x95T"P\x89@%\x95T"P\x89@\xF3"P\x89@%U\xCC\xFEE\xA0\x81J*\xA86\xA5\x99\x9F\xFFN|9eՖ4\xF9f}4\x85\xA1\x86*\x9E\xF8\x84\xA1\x86*\xD6\xF0\x84\xA1\x86J*a\xA8\x84\xA1\x86J*a\xA8\x84\xA1\x92\x83*\x96{堊\xE5;9\xA8䠒\x83J*9\xA8䠒\x83*r\xF09\xD8-\xA8Υɏ\xA7v>M\xFEс8\x9AL\x93\xFFu+\x8E\xA6\xD2Ԯcq4\x9D\xA6\xA66\xC5\xD1L\x9A\xFAֽ8\xBA\x90\xA6\xFEf]]LS?\xFE^]J\xD3\xCB.\x8E.\xA7\xE97GW\xD2\xF4\xAF\xE48\xBA\x9A\xA6_]K\xD3_\x9D\x89\xA3\xEBi\xFA\xBF\xB7\xC7э4\xB3\xF3\xE3H\x86\xAAX\x9Bc\xB5\x8A%\xFEi\xE6k&w\xA3\xC3p\xA9\xC3\xD8q\xA9\xC3\xD8\x8B=*\x97:t\xA9C\x97:t\xA9\xC3\xD8\x91\xF1\xA1\x8Ce|(\xE3C\xCA\xF80\xF60bCKƇ2>\x8C\xBD\x93\xD8H\x8B]\xAD\xD8v\x8A}\xA6\xD8X\x92\xF1al\xA9\xC5^\x87\x8CcG1\xB6c\xCF06\x9Bbw)\xB6\x93b\xFFHƇ2>\x94\xF1a\xEC\x83\xC9\xF8PƇ2>\x94\xF1\xA1\x8CcG1\xB6kb\xCF06 \xF5\xC6PƇ2^i&G\xBFA/\x82^\xBDz\xF4"\xE8EЋ\xA0A/\x82^\xBDz\xF4"\xE8EЋ\xA0A/\x82^\xBDz\xF4"\xE8EЋ{]q/)\xEEuE\xBC\x8Bx\xF1.\xE2]Ļ\x88w\xEF"\xDEE\xBC\x8Bx\xF1.\xE2]Ļ\x88w\xEFb\xE0/2^d\xBC_\x88/\xC4\xE2\xF1\x85\xF8B|!\xBE_\x88/\xC4\xE2\xF1\x85\xF8B|!\xBE_\x88/\xC4\xE2\xF1\x85\xF8B|!\xBE_\x88/\xC4\xE2\xF1\x85\xF8B|!\xBE_\x88/\xC4\xE2\xF1\x85\xF8B|!\xBE_\x88/\xC4\xE2\xF1\x85\xF8B|!\xBE_\x88/\xC4\xE2\xF1eN\xFC\x82\x83s\xE2\xBF\xF1G F`̇QX+x\xDA%\xD9I\x88%]Z\x87\xF1{2k\x9E\xE7y\xAE\xAC̚\xA7\xAF\xE6j\xA2*\xEB\xABy\x9E\xABTʍnT\xB4]ʹ;\xC1\x95~\xD0-\xB1\xB0A:\xDA\xA1Q\xC4"\xEARuы\xFE\xDCظh4\xD0\xFC\xBDn\x9E\x8C\xF3ޛ\xF7F\x9C\xE7\xE2\x9E8g0\xFEwd0\xA4\xC1\xE4\x8F\xE7\xFE\xFA\xBB#\x83\xF9\xC3#j FԾT;\xAC9
+\xF3\xD4\xEE\xA9Ҝ\xD4\xEE\xAB\xD4\\x8B\xD4ި\xD0\K\xD4ު\xED\xD7\
+\xCB\xD4ީMh.\x87j\xEF\xD5\xC65Wª\xB9Ӝݧ\xB6Os5\xACQ;\xA96\xA6\xB9֩}\xA1\xB6Ws=lP\xBB\xA6\xB6Gs#lR\xBB\xAD\xB6[s3lQ{\xA4\xB6Ks+l\x9B\xAB\xB5\xAB\xD5vjn\x87j\xF1;4\xE3\x85]j\x97\xD4\xE2-\xF1\xA1{Ԯ\xABmӌS{\xA83\xAE\xF6Lm\x8Bft\xC4\\x8D\x8C-Q\x8BS\x8BN<\xA8vPm\x93f8\xACvC-.+\xE4U\xBB\xA9\xB6A\xF3W\xBB\xA5]rN\xAA\x85\xB7u\x9A_\xC0)\xB5jѝ\xA7\xE1\x8CZ\x9C\xF3ͳpN-\xFA*T\x9C\x87s\xB5z\xBE\xDA*\xCDI\x98R[\xA0\xA7aFm\xB1\xD3#\xE1\x92Z\oD\xE02\Q۬&%#W\xE1\x9AژZ\xC4\xE7:\xDCP;\xAE&a#7\xE1\x96\xDA9\xB5\x88^\xB7ծ\xAAI\xE7\xC8\x98U\x8BLFl\xEF\xC2\\xE4G\xBA\x9Dj\x92=r\xEE\xABQ\x8B\xC8?\x80\x87jGՌ\x8A\x91G\xF0X\xED\xA2Z\x97'\xF0T펚5\xF2\x9E\x8FF\x9B\xF8\x8Ej/\xE0\xA5\xDA.5\xA3q\xE4\xBC\xCC\xCBsg?\xBF\xFA\xA4\xF9\xDE»4H\xBF\xEF{\xD3`\xB02\x9A\xBCY\xB2\xAB\xA7`\xFCV\xCF\xD3`\xCD\xF7b\x88|e\xA3\xDBI\xF61\xA6]V#YG\xF41~u]\xA3Vg\xF71V\xE9\xE9c\x84\xDA3@/\xBD\xD0\xF4\xD2ԋY/\xBD`\xF6ۋr/\xE3\xBD\xF0\xF7FEo\xB8\xF4\xC6Qo\xF5F^o\xF4\xF4\xC6jo\xCC\xF4Fwo\xA4\xF4\xEE\xBD\xF1ѻ\x83\xF4FE\xEF\x9E\xD3\xCBx\xE1\xFF\x94\xA7\xFF\xFF*\x8D\x8F\xFE\xB0ˏ\xFE\xBB\x9B/\xBF\x8A\x8E\x83П\x84Sp4
+\xAE\xFC\\xBCj\xF4g@\xD0\xFBs \xDE\xFD\xE0\xFEt\ěe\xBC\x9F\xF2\xF1O\x88g\xF0\x8A\xC6\xF5\xB0\xE2\xDAd\xBC\xBF\x94\xD2\xD6\x88\xEF\xFE
+u
+D\xB9\xBF\xDC\xDF\xB1\xEDo\x83\xB0\xF6\xCFAT\xFA\xA70\x937\xEE\xC4\xE7\xCD:\xA3\xB12\x9C+\x89\xED
+\xE2JN\xFB\x87 \x9D\xFDc\x90\xC9\xFE%\xBCr\xC3\x83\xCF\xD2\xE0\xDE\xEF\xC4G\xBD\x86\xF0>y\xCB\xC0G=s\x94`Fȧ\xB0\xC1bXKa,\x87\xB02
+\xBE\xFAS?<\xB3q?\xAB\xD3\xE0g\x8FGm-\xC4}|=\xC4\xDD{#\xC4={3ĝz+\xB8?\xCFnw\xE5ٝ`U\x8F\xED\xB7\xE1ٽ\xE0\xE6;\xEBn;;\xFB\xE1+\x8E\xA7\xC1/\x9F\x89\xF3;g\xE0,܁\xB9D\xFC\xC6ī\xE7\xE0<\\x80I\x98\x82i\x98\x81\x8Bp .\xC3\xB8
+\xD7\xE1܄[P\xC1]x\xB3i\xF0\xBB\xBF_\xF4%܃\xFB\xF0+\xE1\x{D95F}\x98\xE8\xECi\xF0{?\x8A\xFB\xAF\xE1
+\xBC\xBF\xC4U\\xD1{\xF8+\x82\xD9\xCEۓ@c\xCBj;\xE7\xFC\xBBg*\xAD0\xB4\xEC\xB7\xEC\xB7\xF4dt;\xE7-\xAB\xEDT\xFC`A\xFC\x87\xB4\xEC\xB7\xEC\xB7\xEC\xB7׀\xF3\x96\xF3\xF66P\xD1\xCEG\xED\xCD4\xF8\xDB\x8A\x90\x88VZhE\xA0\x81\xF6\x88@+\xAD\xB4\x92ӊr'D|K|\xFB\x98n\x99n\x99n?\xB9\x87
+ z\xF7m\xFCpw4\x8C\xC0(̃\xF9\xB0+\xDB`\xBB\x8C\xB9\xD35\xD35\xD35\xD35\xD35\xD35\xAB5\xAB5\xAB5\xAB5\xAB\xB5\xB9rMmMmMmMmMm\xCDj\xCDj\xCDj\xCDj\xAD\xEB\xEA3i\xFC\xEF~5Ίښ\xD5:\xA6\xB5\xAC\xD61\x99e\xB5\x8E),\xABuL\\xAE\x8E\xE9j\xCCOi\xACcVzb.\xCAj3P\xCE\xEB\xB86~k~\xEB{`\x8EY?+\\x85kpn\xC0M\xB8܆;0w\xE1K\xB8\xF7\xE1<\x84G\xF0\x9E\xC0Sx\x9E?G<#~\xF6\x84\xF1\xF95\xBC\x81\xB7\xF0\xDE\xC3\xF8\xEC7.\xA1a\xBFa\xBFa\xBFa\xBFa\xBFa\xBFa\xBFa\xBFa\xBFa\xBFa\xBFa\xBFa\xBFa\xBFa\xBFa\xBFY\x9D.\xFC\xE4i\xE2Ư\xD2\xFE\xEF\x8F\xEF \xBEY\x9B&\xAED4\xC47\xD3\xFE?\xF9רmr{p\xCEͶt\xEC\xEB?\x8E\x8D\xCD\xD6t\xEC\xDFwGS6ah\x84\xA1\x86Fah\x84\xA1\x86Fah\xE6\xC20oWt8]\xF8\xD1\xE2\xF8\x89h$\xA2\x91\x88F"\x89h$\xA2\x91\x88F"\x89h$\xA2\x91\x88F"\x9A\xF3p&A,\x9A\x88\x854r\xD0\xC8A#\x8D4r\xD0\xC8A#\x8D4r\xD0\xC8A#\x8D4r\xD0\xC8A#\x8D4r\xD0\xC8A#\x8D4r\xD0\xC8A#\x8D4r\xD0Ī\x814\xB1VO\x9Ar\xD0D\x9F\xCAA#\x8D4r\xD0\xC8A\xF3I
+ \xC1\x8C\xA6\xC9-G\xA2v\xE6\xA7?\xDD\xCD\xB0\xC1bXKa,\x87\xB0V\xC1jXka\xAC\x87
+\xB06\xC1f\xD8[al\x87\xB0v\xC1n\xD8{a\xF6\xC18L\xC0~8+\xCF\xE09\xBC\x80\x97\xF0
+,
+\xDE\xC0[x\xEF\xE1|Ⱦ7\x8B@\x81<
+\xF3`>\x9F\x89\xCF\xC4g\xE23\xF1\x99\xF8L|&>\x9F\x89\xCF\xC4g\xE23\xF1\x99\xF8L|&>\x9F\x89\xCF\xC4g\xE23\xF1\x99\xF8L|&>\x9F\x89\xCF\xC4g\xE23\xF1\x99\xF8L|&>\x9F\x89\xCF\xFB\xD3\xE4\x95q1:'L\x93;\xDFFS\xB2d\xC8"\x90E \x8B@\x81,Y\xB2d\xC8"\x90E \x8B@\x81,Y\xB2d\xC8"\x90E \x8B@\x81,Y\xB2d\xC8"\x90E \x8B@\xFBFY\x9E\xE23\xF1\x99\xF8L|&>\x9F\x89\xCFs\xE2\xE7\xA78\xA1\xA7i\xF2\xD8ĵ\xB1\x9F\xD9\xCF\xECg\xF63\xFB9\x96\xD9\xCF\xECg\xF63\xFB\x99\xFD\xCC~\xFE\xE4\xF3\xAC\xE2\xA4#0
+\xF3\xC0\x92m\xB2F\x9B\xC2"\xB0<\x9B\xACǦ\xA5\xB0\x96\xC3
+\xF0$\x97V\x81\xA5\xF1\xB4L\xFD\xD2:X`#\xB8\xE9'˸il\x85m`\x92\x9Fv\x80\x85\xD0d\xD9&\xED\x86=\xB0\xAC\xF4&\xCB\xFEi&`?+_\x9A\x86\xB0\xBE\x9B,\xF6\xA7\xCBp\xAC+'\x9BɊ\xB2$\x9F\xAC\xC1'\x8B\xEE\xC9
+d\xB2(\x9B\xAC'\xEBu\xC9nK\xB2<\x9B<\xCE%+wɢ]\xB2Ԟ\xAC\xE6\xA5\xC8\xC1\xB0\x96\x9B\xEC\xA4\xE7\xF0^\xC2+x
+v[\x92\xA5\xECd'\xD9@I\x83\xD3G\x81*.U*\xA8D\xA0\x81J*\xA8D\xA0\x81J*\xA8D\xA0\x81J*\xA8\xE2a^*\xA8D\xA0\x8AٿT"P\x89@%զ4\xF3\x8B\xA7\xE3\xCB)\xAB\xB6\xA4ɷߊ\xA60T\xC2P\xC5\x9F0T\xC2P\xC5\x9E0T\xC2P C%\x950T\xC2P C%\x950TrP\xC5r\xAFT\xB1|'\x95TrP\xC9A%\x95TrPE݂\xEA|\x9A\xFC\x99[qj\xD2䷿G\x93i\xF2\xBF\xFE1\x8E\xA6\xD2Ԯ\xC4\xD1t\x9A\x9Aj\xE2h&M}\xF3_\xE2\xE8b\x9A\xFA\x9Bo\xC6ѥ4\xF5\xF5\xFD8\xBA\x9C\xA6\x97\xFFw]I\xD3\xEF\xC7\xD1\xD54\xFD\xEB[\xE2\xE8Z\x9A\xFE\xFD\xEF\xC6\xD1\xF54\xFD\xBD\xBF\x8A\xA3i\xFA\xBEG7\xD3̮\x93q$CU\xACͱZ\xC5\xFF\xC74\xF3ۧ\xBC:\x8C-\x97:\x8CM\x97:\x8Cm\xB1أr\xA9C\x97:t\xA9C\x97:\x8C\x8D\xCA\xF8PƇ2>\x94\xF1\xA1\x8Cc#6\xB4d|(\xE3\xC3\xD8;\x89\x8D\xB4\xD8Պm\xA7\xD8g\x8A\x8D%ƖZ\xECu\xC8\xF80vc1\xF6c\xB3)v\x97b;)\xF6\x8Fd|(\xE3C\xC6>\x98\x8Ce|(\xE3C\xCA\xF80vc\xBB&\xF6c\x93Poe|(\xE3e\x90f\x86\xD1/EЋ\xA0A/\x82^\xBDz\xF4"\xE8EЋ\xA0A/\x82^\xBDz\xF4"\xE8EЋ\xA0A/\x82^\xBDz\xF4\xE2^W\xDCK\x8A{]\xEF"\xDEE\xBC\x8Bx\xF1.\xE2]Ļ\x88w\xEF"\xDEE\xBC\x8Bx\xF1.\xE2]Ļ8EƋ\x8C/\xC4\xE2\xF1\x85\xF8B|!\xBE_\x88/\xC4\xE2\xF1\x85\xF8B|!\xBE_\x88/\xC4\xE2\xF1\x85\xF8B|!\xBE_\x88/\xC4\xE2\xF1\x85\xF8B|!\xBE_\x88/\xC4\xE2\xF1\x85\xF8B|!\xBE_\x88/\xC4\xE2\xF1\x85\xF8B|!\xBE_\x88/\xC4\xE2\xF1\x85\xF8B|\x99\xBF\xE0\xE0\x9C\xF8\xAFl\xE1,8\x98`Fȧ\xB0\xC1bXKa,\x87\xB0V\xC1jXka\xAC\x87
+\xB06\xC1f\xD8[al\x87\xB0v\xC1n\xD8{a\xF6\xA5\x99?\xDC9w \x94\xFF\x91A:\x98
endstream
endobj
startxref
-4105214
+4105356
%%EOF
Modified: trunk/doc/sbfc_manual/sbfc_user_manual/converters/antimony2sbml_and_sbml2antimony.tex
===================================================================
--- trunk/doc/sbfc_manual/sbfc_user_manual/converters/antimony2sbml_and_sbml2antimony.tex 2015-09-28 14:32:29 UTC (rev 569)
+++ trunk/doc/sbfc_manual/sbfc_user_manual/converters/antimony2sbml_and_sbml2antimony.tex 2015-09-28 14:37:05 UTC (rev 570)
@@ -15,10 +15,10 @@
\begin{lstlisting}
# FILE: sbfConverter.sh
# Add the path to the program sbtranslate
- # by configuring the Java system property sbtranslate.path:
- #PROPERTIES="$PROPERTIES -Dsbtranslate.path=/path/to/sbtranslate"
- # Configure the environment variable SB_TRANSLATE
- #export SB_TRANSLATE=/path/to/sbtranslate
+ # by configuring the Java system property SBTRANSLATE_PATH:
+ #PROPERTIES="$PROPERTIES -DSBTRANSLATE_PATH=/path/to/sbtranslate"
+ # Configure the environment variable SBTRANSLATE_PATH
+ #export SBTRANSLATE_PATH=/path/to/sbtranslate
\end{lstlisting}
To test the correct installation, you can type the scripts:
\begin{lstlisting}
Modified: trunk/doc/sbfc_manual/sbfc_user_manual/converters/cellml2sbml_and_sbml2cellml.tex
===================================================================
--- trunk/doc/sbfc_manual/sbfc_user_manual/converters/cellml2sbml_and_sbml2cellml.tex 2015-09-28 14:32:29 UTC (rev 569)
+++ trunk/doc/sbfc_manual/sbfc_user_manual/converters/cellml2sbml_and_sbml2cellml.tex 2015-09-28 14:37:05 UTC (rev 570)
@@ -17,10 +17,10 @@
\begin{lstlisting}
# FILE: sbfConverter.sh
# Add the path to the program sbtranslate
- # by configuring the Java system property sbtranslate.path:
- #PROPERTIES="$PROPERTIES -Dsbtranslate.path=/path/to/sbtranslate"
- # Configure the environment variable SB_TRANSLATE
- #export SB_TRANSLATE=/path/to/sbtranslate
+ # by configuring the Java system property SBTRANSLATE_PATH:
+ #PROPERTIES="$PROPERTIES -DSBTRANSLATE_PATH=/path/to/sbtranslate"
+ # Configure the environment variable SBTRANSLATE_PATH
+ #export SBTRANSLATE_PATH=/path/to/sbtranslate
\end{lstlisting}
To test the correct installation, you can type the scripts:
Modified: trunk/doc/sbfc_manual/sbfc_user_manual.pdf
===================================================================
(Binary files differ)
Modified: trunk/sbfConverter.sh
===================================================================
--- trunk/sbfConverter.sh 2015-09-28 14:32:29 UTC (rev 569)
+++ trunk/sbfConverter.sh 2015-09-28 14:37:05 UTC (rev 570)
@@ -10,9 +10,9 @@
# Setting up antimony converters if used.
# This can be done by either specifying a Java system property
-#PROPERTIES="$PROPERTIES -Dsbtranslate.path=/path/to/sbtranslate"
+#PROPERTIES="$PROPERTIES -DSBTRANSLATE_PATH=/path/to/sbtranslate"
# or an environment variable
-#export SB_TRANSLATE=/path/to/sbtranslate
+#export SBTRANSLATE_PATH=/path/to/sbtranslate
# Setting up java
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <nik...@us...> - 2015-09-28 14:32:32
|
Revision: 569
http://sourceforge.net/p/sbfc/code/569
Author: niko-rodrigue
Date: 2015-09-28 14:32:29 +0000 (Mon, 28 Sep 2015)
Log Message:
-----------
rename png to correct typos
Added Paths:
-----------
trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-finishedResult.png
trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-selectOutputFormat.png
Removed Paths:
-------------
trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-finshedResult.png
trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-selectOuputFormat.png
Copied: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-finishedResult.png (from rev 568, trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-finshedResult.png)
===================================================================
(Binary files differ)
Deleted: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-finshedResult.png
===================================================================
(Binary files differ)
Deleted: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-selectOuputFormat.png
===================================================================
(Binary files differ)
Copied: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-selectOutputFormat.png (from rev 568, trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-selectOuputFormat.png)
===================================================================
(Binary files differ)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pd...@us...> - 2015-09-28 14:14:46
|
Revision: 568
http://sourceforge.net/p/sbfc/code/568
Author: pdp10
Date: 2015-09-28 14:14:43 +0000 (Mon, 28 Sep 2015)
Log Message:
-----------
added new antomony converters
Modified Paths:
--------------
trunk/doc/sbfc_manual/sbfc_developer_manual.pdf
trunk/doc/sbfc_manual/sbfc_manual.pdf
trunk/doc/sbfc_manual/sbfc_user_manual/converters.tex
trunk/doc/sbfc_manual/sbfc_user_manual.pdf
Added Paths:
-----------
trunk/doc/sbfc_manual/sbfc_user_manual/converters/antimony2sbml_and_sbml2antimony.tex
trunk/doc/sbfc_manual/sbfc_user_manual/converters/cellml2sbml_and_sbml2cellml.tex
Modified: trunk/doc/sbfc_manual/sbfc_developer_manual.pdf
===================================================================
(Binary files differ)
Modified: trunk/doc/sbfc_manual/sbfc_manual.pdf
===================================================================
--- trunk/doc/sbfc_manual/sbfc_manual.pdf 2015-09-28 14:13:43 UTC (rev 567)
+++ trunk/doc/sbfc_manual/sbfc_manual.pdf 2015-09-28 14:14:43 UTC (rev 568)
@@ -1,21 +1,21 @@
%PDF-1.5
%\xD0\xD4\xC5\xD8
-191 0 obj <<
+195 0 obj <<
/Length 285
/Filter /FlateDecode
>>
stream
-x\xDAMQ\xCBN\xC30\xBC\xE7+\xF6\xE8\xE2z\xD7\xCF^S(\x89jn\x88CZL\x8B\xD44\xA55H\xFD{\xD6MR\x90\xA5}zfgm[P\xF0P\xA8\xD1#[dIZDp\x81\xA4r\x9B\xAE\xF8*d0\x9A\xAE\xFE\xA2k\x95\x97\xCAPe$\xBA\xA95{\xEC\xEE\xFA\xE2\x85\xCFD]M\xDC\xD5?\xF2\xBA)fKƑ\x91>x\x84\xE6\x82\x96\xE48\xD22P\x80\xE6^\xC5\xEArN\xB1;\x97\x95\xF6Vԟ\xFD\xBE\xDF^\x86dY\xE8O]\x9B\x86|\xD1J\x8D\xE2'\x9BxJ\xF1T\xBE5O<"+x\xDAMQ\xCBN\xC30\xBC\xE7+\xF6\xE8\xE2z\xD7\xCF^S(\x89jn\x88CZL\x8B\xD44\xA55H\xFD{\xD6MR\x90\xA5}zfgm[P\xF0P\xA8\xD1#[dIZDp\x81\xA4r\x9B\xAE\xF8*d0\x9A\xAE\xFE\xA2k\x95\x97\xCAPe$\xBA\xA95{\xEC\xEE\xFA\xE2\x85\xCFD]M\xDC\xD5?\xF2\xBA)fKƑ\x91>x\x84\xE6\x82\x96\xE48\xD22P\x80\xE6^\xC5\xEArN\xB1;\x97\x95\xF6Vԟ\xFD\xBE\xDF^\x86dY\xE8O]\x9B\x86|\xD1J\x8D\xE2'\x9BxJ\xF1T\xBE5O<" endstream
endobj
-188 0 obj <<
+192 0 obj <<
/Type /XObject
/Subtype /Image
/Width 446
/Height 434
/BitsPerComponent 8
/ColorSpace /DeviceRGB
-/SMask 197 0 R
+/SMask 201 0 R
/Length 4215
/Filter /FlateDecode
>>
@@ -47,7 +47,7 @@
\x9E3\xCD\xF8)f\x9A\xF1S\xCC4㧘i\xC6O\x89\x99\xC6O \x9Bf\xFC0\xCD\xF8)f\x9A\xF1S\xCC4㧘i\x86P1\xD3\xCC\xF8)`\x9A\xF1S\xCC4C\xA8\x98i\x86P\xD3\xCC\xF8 L3C(3\xCD\xA1\xA6BL3\x8A\x8A\x96f\x86P`\x9AEiif\xA5\xA5\x99\x81\x94\x96ff E\xA5\x99\xB1\x94\x93f\xC6RH\x9AW\xF1h1\xEE\x9E\xCE&
endstream
endobj
-197 0 obj <<
+201 0 obj <<
/Type /XObject
/Subtype /Image
/Width 446
@@ -117,73 +117,67 @@
\x84\xD7k\xD1\xFE\xE5Acޙ\xBDt\xED\xA6-۶\xEFع{Ͼ\x9F\xECf\xE9\xBC&\x8Fس\xE3\xE3\xF7\xC6\xFB7 endstream
endobj
-244 0 obj <<
-/Length 1449
+248 0 obj <<
+/Length 1437
/Filter /FlateDecode
>>
stream
-x\xDA\xED\x9A[s\x9BF\xC7\xDF\xFD)xD3\xB3W\xE0\xA9\xE3K\xEC$\xC7j\xADN3\x93\xF4Ik\x89\x83
-Ȟ~\xFB\xEEjWDb\xB1\xBC\x94\xF8"\xEC'0 !\xFF\xCE\xD9\xFF\xB9\xEC\xF1\xAC\x99\xE5Y\xE7\x9E:\x8F\xCF-+4u敼\xEC$z\x97\xF38U\xAE`\xE6\xD9,\x8Fn\xEAo|\xBF'\xEE\xDB\xA9\xD3\xEC\xAAX\xA9\xC4{\xA9_\x99I~˂)\xD2`\xF3'm\xBC\xF6^\xB8_@\x9F8\x924 \xC8I\x95\xF5\xE0JND\x9A\xC6\xE0VX\x81児me(\xB5(\x90t}lO\xB2\xB4\xC8M? \x9F\xE0[0ִW\xDAb\x80\xF7c$\x9F \x94\x93\xAE\xBD\x95\xA2\xF0\xF5$1M\xC4q+\xE9!Jz.\xEFۘ)\xFDɮ%\xECr\xCE\xD6N]A\x8F\x93h\x9C\xA8˓-{\x95\xDCd\x9A\xD4\xD8/Ij\x81\xFD\xEA\x8A\xC9u\x9E\xDDȳ\xAB\xE3\x8BO\xDBA\\xF9E\x9E\xC6\xE9$YN\xAB`\xA5)Y)\x93I\x99\xDB,^\xA0\xF9v\x96\x97\x8F"DM0\x88\xE1\xAA'\xAE\xFA]\x8E\xE3l8\xE0\xB5\xEE\xD1\xAD\xEA\xC4}Z\xD3\xC0\xA6\xC6<Q'\xBF:\xFF,\xCF\xF8\x9D\xFA\xA4\xDF\xE9\x86\xB8Ë\xA8\xE4\xDAX\xFF~\x88{U1\x98\xFB#\xE9\xC0\xF2rRF\xE2\xF9[\xF1I=\x8B\xF2\xF6\xB7\x85\xD1\xC440fJ;0\xFD2j\x85\xA5=\xEEԄ\xC6X\xFDXO/G\x9Abr\xCD\xD9s\xAC\xF5\xC7\xFF#\xE0\xF3:\xF0<^h<\x9F\xA7\x93\xFC\x88R(ZZ\xC08,\x85\xC6<W]\x82Xd\x82\xEB\xFChu\xF98\x84\xF7fP\xF2 \xA4eR\xBE0\xB2\xFF\xE2f\xDE\xED
-j\xF1\xE2\xB4!\xED\xD6K\x9B\xBEm7\xACxBs\x9E`7\xCF\xF1js\x88\x95\xB2\xB1%N\x99p\xCEt\xD3\xFF\xB0\xF8\xF9Pg
-)\xDC\xC3\xE2p\xCF{jr\xAAj\xF2\x8B,W\xAD\xBFh,K\xB8eYk\xBA\xD6\xDDѷ\xB38\x86\xDA\xD4봪\xD7\xDFdz\xB93e7\xDCS\xAB\xAA{\xD5 t\xDF\xFF;\xEB\xBD\x9F\xEC{\xB7\xAF\xC9\xC1M\xDB|\xB4*\xF8\x87\xF1BJC\xA7\xAC\x90\xC0d˩ \xA8\xCE\xF1U\xEC7\xA1Ɔ \xADzG\xD3\xDB\xD5NV:aJ^\xB3E\xD9u\xA5:\xAFt+\xBE 51\xF6\xEAu\xCB\xE0]\x9Eg\xB9t\xE2Vьi\x90)!o[2݉\xAF\x9FeB\xA1{Β\x85r\xF1\s&uF\xB4?7\xF7f\xC6\xCBٯ\x9A\xA8@\xFC&Z\x92\xA6\x8D\xA4\xA34+\xE7,\xDF\xD8X7j\xC4\x80\x86#\xF2
-&\xCCA\xD7ƹ\xE4\xBB xF\xC8\xE15\xD4\xE5P\xD7)\xBB\xA3\,Ʉk\xF3\x93\x87F\xBCP\xE8 \xACF\xBC\xE8\xCE/\x88]\x9E\x93l[\xBE\xCDx=C\xB41k\xAA·\xAF'\xAAL큪\xB5\xB21ȥ4R
-{\xF1\xEA\xF8\x9B\xF0l\x99oܽ^\x87\xA8\xCD\x91\xFC\xE6Z\xAF\xDB\xA8\x9F0\x9Bf-\xE0\xC6\xE8\xD6ɜMDP\xF9\xAE\x82\xFA\xB2\xDCڔ\xC6v\x91-\xF3I\xB5-UJÇ\x82^kQ\x93\x98\xF8\xA6\xCE[dWL5\x96\x8B-\xEF]Ew彬i\xE6kR\xB5)\xEE\xE2r+x\xDA\xED\x9A[s\x9B8\xC7\xDF\xF3)x\xC43AB\xE2\xF2\xB4\x93K\xD3\xCB4Mv\xE3\x9D\xEDL\xBB+6[\x8C\xBC\\x92鷯d\xC9\xC4F$Ks1\xF1\xB0q~\xE7诣\xBF\x8Ec\xCC\xC7x{\xE0\xC8\xE3\xF1\xF8\xE0\xF0xD\xB6\xF8\xC0_>4\xBC\xC0\xB1!\xF4\x8C\xF1\xD4\xF8b\x9E\xD0l\xE4\xB3$\xE2P\x8C\xFE\xA8?x#\xB4C\x8F?}\xCD.Y\xB0}/#+\x84\xD8\xFC\xAB \xF9\xC8r\xD7<\x8Fؗ@\xB3\x8Aҭo1\xC26F>\xFBC~n\xFB\xC1\xC6+,\xE4:\xB6縆\x80b\xF9#\x81\xCD\xDE\xCD\xF7\xD9f\x99ӑŎ\xD3*.\xF6l\xBD\xED\x8B\xE5:\x81i\x8F,\xEC8/\xFB\x80\xC2\xF0\xA5\xFC\x96A\x80B؈S}ב\xB1\xC1\xEB\xD8@\x9B?\xC9U\x92\x931*\x9A_\x8AC<,h\x8F\x98}\xE2\xE1\xCAx\x9CR\x87\xDB,\xA5є
+P\x99Q\xB6:q\xD90*\xCA(M\xA3\xB6у8,\x96\x8F2
+ \xB4C\x80\xF4+\xA11UL\xB2\x99\xA0~u|\xC6q"\xD0G\x85\xB8\xCA\x90M\xA3\x94fD\_F1\xEA\xDBc3\x9A%*\xD0V\xA8\x9B\xCC+yy\x90\xE8mRΓLf\xB8\x84\x99\xD3Y-\x9Ao| \xE9\xDB\xA9՞\xAAH\xAA\xC4;\xA1_I\xBF\xAA \x92\xF4\x98\xC7\xECISo\xBC\xEE\xD0'\x9EI:i+FuՃj9\xE1eS\x80\x92\\xB6e\xA0\xE4\xA0pE\xEA#3\xA6YASE?\xC2`\x98\xE0\xFBh\xAA\xB5E\xEF\x87H<\x81=F\xBA\xF1V\xCF
+_O\xD3F\xDC\xED$=XJυ\xE4}\x93\xA9?\xF4Z\xC0.\xE7d\x9D\xD45\xF4$\x8D&\xA9\xBCoūd!S\xA4\xC3aIRvԥ6\xC1?\x93\xEB\x9C.\xC4\xD9\xD5\xF1\xF9\xC7\xED\x81_\xF9M\x9C&Y\x9CV\xD3z2\x8E\xB2\x8CM\xB4Ť\xA8m\xAA\xE5\x92-\xD0|\x93\xE6\xE5\xA3Q\x8E\xCA\xF6\xE0p\x9C\xD0\xCB[\xEB}VV\x9DhHc\x98X\x9B\xA7\xDB+\xAF\xDE~g\xECNs<l\x86\xDECԃ\xE1yT2ml\xFE+L\xB8wm@U\x8E\xAFb\xAB\xFD\xA0\xDE\xC8ٵ\xADr4\xBDYm
+f1\x91\xF2J\x97eԕ\xEA\xBCҮ\x866\xD4X\xF5\xDA}y\x93\xE74I\xBC E͈\xD9\xC3x\xBF\xBB՟\xF8ڣ\xF9$\x8A \x99\xD8s\x92.e\x8A\xE7\xE2\x98\xA13\xDCI\xDE\xDC\xE6\x9AT\xB3\xDFQ\x81\xE854\x83t$\x{DD52}\x8E2Z\xCEI\xBE\xB1\x9D\xB2\xF6\xBC\xF8v\x8A\x82\xB9\xF84\x85\xE8\x83nt\xC6Y\xAEo8`!\x83d\xFDq\xA7\xE4\x86wő\x94\xF2\xD4f'?\xEB\x96sC;+!Ъia\xDD.\xB7\xD5\xB7\xED \xB0\x95\xF1W\xA0Y\x95oܽ^OQ\x9B\xDDH\xBC\xF8͕m\xB8Äٶ܂]p's\xF3I囜ԫrk\x99\xAD\xF2\xB8\xDE\xD4*\xA5\xE0s\x83AkQ\x9B\x98\x84\x9Abr\xD7wE\xA4\xB9P-fL\g/ik\x9F\x8Bk\x9B\xE26)G\xC0\x9C\x8B?\xA4M\xA6\xA8R\xBF%ƳT\xA5a\xFB֍q\xBFHh\xC6W\xC8\xE2\xCEW;s\xEF\x9BLą\x82\xE4r\x95\xCCn\xE5\xC7?m\xCFgt\xF7\x90ۏ\x{37BC863}9\xEE\xEFZ\xD7d\x9A6\xBCc\x9EU\x9B߯\xFEP-Y\x8C_@G\xB3@\xB5ᢉt\xCCG2]\xC4Q9\x8C泎\\x81v\xAA\xA2\xBES\xD4ņ\x86\xF2n\xEFg\xA8\xD0_\xBE\xE3
+a\xA79 \xFF\xE29\xA9\x98%\xAAywh\xD9\xD0\xE9=D\xF7s\xD5#\xF1vTԽk\xD4U\xC2\xEA
+\xCF\xDD9\x8F \xBFl\x870,\x97\xCDM\xBEt\x95\xDEo=\xFBf|\xF0z\xE6\xA5!
endstream
endobj
2 0 obj <<
/Type /ObjStm
/N 100
/First 810
-/Length 1628
+/Length 1548
/Filter /FlateDecode
>>
stream
-xڭX\xDBR\xDCF}߯\xE8G\xBB*F\x9A\x9E\xD1-E9\xC5\xC5`R\xAC\xD9-)"RL\xC6PFIL*\xA4L\x91ҤW)\xA9\xBF\x90\xAE\xB2\x94X\xEBh\xC0L\x8CN\xFB\x848&\xAD\xD1d\xA4\xE3Lu\x9A\xA0\x87҆L\xA4 \x8FM&(\xAEQ\x99x`\x98\xA24\xC2s\x8Ahb\x8AS\x81 \x83YH \xEC\xF0K`J%\x94ưM)\xCD\xE1*\xD3j3e1\xEE"\xD0\xC5\x86F\x9B\xA1\x8DS\xEE!\x98'\x88H\xE9\x88\x84\xA508A\2%\x8CA!E\xE0\x9C\xEAA\xCA\x80\x86+8\xC4#1\xB0Qqd\xA2P\x88\xA8(\xC4=\xF0"\xE0\xC0\x95\x8A\x80\x80\x8B\x8A\xC3l\xA0\xE0DŌ\xEE\x90q\xC7\x98\xB18
-\x9A(\xFC\x83\xF2*1\xA9Pą\xF8\xF9SI@j\xE4\x8F\xD3\x91\x95f<PPMe\xA1\x83L\xA9P\xD4RH\xF2%ܑ\xA6\xC9P\xF8\xE3P\xD4@JXQ\x923\x91D\xD2\xCCJ\x81f\xE1\x8C\xD40\x8Bd\x88\x88\xB5\xB0CzXK= A\xAC8\xA2&6\x92\xC4\x88b\x85Dq$VHG\xC2\xC9\xE2(\x8DP\xF5"| \xC7\xC2\xE3X\xF8 e\xF0u\xF5Ɖ\xF0\xA7\x9DH@N%@\xF4r\x9A( \xA7XD
g\xAAC\xF3T\xCA2\x92G(\xCCN \xA9G\xF1\xD9Hs"\xDA`\xB0R\x95\xF9b\x83*5i'\xE9\xCC\xC0{\x96\x91 S5X_\xA7\xE0\x88\x82]w\xEC(ئ7\xC5e>km\xBD\xA6\xDE\xD2\xFB\xF7\x837\xBF7\xB6\xA6a^\xCD\xF3\xE9\xDB'c[\xB4\xA5\xAB\xD6\xD4r\xF4^\xD5\xD6n2\xEFzW
-\xE7\xC5\xF0C\xFBϼ\xAC\x{DD6D}\xDAf\xD5p\xBD\xBE\xEDn\xAB\xA9\xCB'\x94Wګ\x9A6\x9FN\xF3\x8F\x98\xDFSVt\xB4\xB9\xB3EyC\xB0\xAF&\xF9\xD4U\x96fyq\x95_\xD8^~\x82s[\xB6\x97eE9\xCDjwQ\xE7\xC20\xEB\x8F\xEE\x96ZG\xF3\xC6v=N͒\xFC\x96\xABnlݠ\xA6\xE2?\xA7\xC2U\x8D\x9B\xDA^\xFE¯\xF9M\xBE\x8Ap\xB4\xB0;\x80\xD5MioɝS{i V\xE54O\xAD\xC03\x94K\xD3\xC3!z&\x8A\xF3\xDA]C\x81ᾨ!\xEDOTV\xC5t>邫*\xD7vɥf>\x9B\xB9\xBA\xED\xF5\xC0\xAB=l\x96n\xB4qҋ\xA2\xFBx\xEE~\xA2\xE1~/\x8CY
-3\xCC[(؋\xADF9(\xDA\xFC\xC6\xF6\xA2īQNF\xA3^\x88d5\xC4\xF6\xC1q/D\xBAbc4\xEC\x85Ȟ\x87Xd\x96\xF6U\xC0\xF7\x89\xA6}\xDD_\x93\xE1\xF3\x80\xC3\x{DEDA}\xEC\xC7xZ\xD8c\xDB\xDEZ[-\x89\xC8l\xB5;z\xEAǧh\xE8j\xBC^c7o_25\xC4˗\xEAcyq\xF9nb\xAF\xE1Iޝ\xE2\x9E\xCA\xDFn\xDC\xF4\xA2\xF8gT\xCE촬l#\xEF\xF9=F\xBF\xBDe6&7yU\xD8 \xB9Y\xFB";\xFF\x8E|\xA8kWӵmL\xC1\xFDV\xFE\x9D\xF8d\xE1\xE9\xD2Ng\xE3\xDA\xCA\x81q<\xBF\xF8\xA5!~\x80\x90c\x9A\xB9\xC4w7\x93=c\xBE\\xBDN\xDB\xF6\xC6N\xDD\xEC\xEB"\xBFn]\xE4\x8B\xBC\xFE\xE1R\xD8Uj\x9EsԭU\xAAk\xA58|\xBFTn]\xDA⊤e\xC6oܼ.d\xBA\x9F\xF4\xF8\x8ElK\xF3YG\xA7\xF0t\xEC=\x8Dnݤ\x8D\xAA]\x9Ey]x\xAE\x92\xEA\xA5\xCFo\xFE\xB0c¶\xF9\xFC\xFC\xB6\x87\xAE\xF9\xD1x\xEFW\xCF\xF2Q\xC0ïG\xBF\xED\xF7B\xE8U\xC7\xEE\xBA\xC8\xDB^\xD3'\xFB\xC1B\x9E\x97\xBDR\xF8\xE6\xA2\xEC\xE1\xFD\xA8\xCEQ] \x8D\x85\xF3S\x85\x9D\x8D/\xCC\xBB\x99;k\xBF~\xF8\x92_Ϧ\xB6\xF9\x99.\xFB\xB9\xA2\xB6yk;\xB4n\x8B\x80\xB5\x94ţ=˿\x85[\xACN\xF6Kٴ\xF7\xF3\xFC\x8B\xDC\xF0\xABܔՍ\xBB\x95\xAB\xDE\xC9&>\xD1_\xE5\xD3\xE56\xF7\xA9\xC7S9\x87\x84tH\xC1Nٞ\x89\xB7\xF5\xF5Ap\xFCuf)ab\xA8\x9EVf4\x9C=\x94\x8C\x87vQ-\xF6\xA8\xAD\xE7\xD6S}\xC2ɟ\xE1\xA0NI\x9C\xC1-U\xF3\xE9\xF4l\xE0\x87\xED
-\x92\xD8w\x94G\xB5\x8F\xB9\xFB\x84`\x967rЊ\xBAX'㿑\x8B\xCEj\xEFZη\xE9ݳQ\xED
-)\xE9S\xA8\xB4\xBDC\xC11\x94\x96QPl\x8B\xEE\x9C>+#\x8E\xA5\x8FedT\xFF\x8B\x8C\xB2\xDBn@B·BM\x8E\x87\xD2r\xFAV\xF9\x96}\xAB}k|\xF96\xF6m\xE2\xDBԷOy<\xE5\xF1\x94\xC7SOy<\xE5\xF1\x94\xC7SOy<\xE5\xF1\xD8\xE3\xB1\xC7c\x8F\xC7\x8F={<\xF6x\xEC\xF1\xD8\xE3\xB1\xC7\xD3O{<\xED\xF1\xB4\xC7\xD3O{<\xED\xF1\xB4\xC7\xD3O{<\xB3\xC0{\x94\xC9N\xEFAp4\xB7\xDD\xFD~Y]
-\x82MWOl\xDDe,<>{\xC1֩\xEAn$\xC7(\xA0\xD3D\xAD\x85\xA1|J\xD6L\x8CB\x8A0\x99%\x8Ab\xC6&,a۠\xD5\xE7\xF9\xFF\x85E\x8A\x9D\xB8I)q@\xE9\xBE\xF6\xE0\xB8NX\x83T\xF2,\x87\xC7\xDF \xF0\xFBN\x95D\x9D
+xڥ\x98mS\xDC6\xC7\xDFߧؗ\xC9L[+\xF9\xA9ä\xC3C t\xB8@\x81Ni\x93\xBC\xF0\xF98\xF1YW\xDB\xE1\xDB\xF7\xBF>\xF1\x90@\xCEG3#[\xD6\xFE\x{1BFEF2}d\x9D\xA2\x90"\xD2!\xC5de\x94ĤB\xCA)M\x8A\xF1op\x95\x92J\xF0\x92\xC2U\x96+b\x8D\x98\x89\xD1\xC9b\x9FǤ5\x9A\x8Ct\x9C Q\xA7 zȰ!m\xC8D\x9A\xF0\xD8d\xF2\x80"p\x8D\xA2\xC8\xC4#\xC3\xA5\x9ES\xA0\x89)Na%e!%\xB0\xC3_\xBB\xC8P
+X\x94P\xC36\xA543\x84\xABL\xABQ̔Ÿ\x8B ?TKm\x866NI\xB4\x87P\x9E "\xA5#J\x96\xC2\xE0qqȔ 0\x86\x84\x81s\xAAG)#l\xA4+YS\x99\x96@0.\x93\x88Q
+\x94 \xA6(\x87J\xB4\xA3L\x92\x85\x82p\x8F\x92p\xEFPj\xA6Lҗ\x99\xE1\xA1\xBC\xAC\xA0\x9A\x98\x91u\x85\xCC0\x8Bf\x94\x95\x97\xE0A\x96+ܰA\xE4
+EB\xA1l$\x81(G*\x93L\xE0B\xACP,\x8E\xD2d\x84\x94`\xBE\x88\xE4\x90cу\x8Aq"z+\xC3,\xAD߹k\xEA-Z\xDB#\x9C\x9A[\xF1ۮ\xBE\xB2M\x8B^\x98\x8A\xFF\x9C
+W\xB7\xAE\xB2\x83\xFE\xE1\xF7\xFC*_%8Z\xDA\xC2ꪴ\xD7\xE4Ω\xBB\xB4\xAB\xB2\xCA'\x95x\x86\xE9\xD2h\x88\x9E\x88\xE2\xBCq3d`| ِ\xF6*\xEB\xA2ZL\xFB\xE0\xEA\xDAu}q\xA9]\xCC\xE7\xAE\xE9=\xF0j[\xA5;\xDA<\xA4\xE8!\x9D{\xEFi|0\x881\xAB1\xE3\xBCC)\xD1j\xCAa\xD1\xE5Wv\x90\xAF\xA6\x9C
+"\x92Ո\x9D\xC3\xD3AD\xBA\xB1y4DdO#\x96\x95\xA5\xF0}\xA1\xE9@\xCF\xC9\xF0i\xE0x\xE7nN3O\xEC\x89\x{DBAD}\xADi\xB3\xEEʙ\xABo\xFA\xF5j=\xFF\xB6m\xAB
+\x99Z\x81\xBA\xE3\xF8z\x8F]\x83wu\xE2\xDD:\xEBL|\xFB\x86\xBE+/._M\xED\x9E\xE4E,\xEE\xA5|v\x93v\x90\xE2#8*\xE7\xB6*k\xDBʢq\xCF\xB6\xF7\xEF\xDF\xE6\xF4*\xAF;%7\xEFֲ\xF3/\xDCۦq
+\xCDl\xDBb=\xB6\xF2/\xD8{O\x97\xB6\x9A\x8C+\xCB
+\x96\xD7\xC9\xE2\xE2\xB7AB\xFC\x80\x90cͺ\xC4~y\xB7,>a~\xBB\xBF\xFA<\xED\xD8+[\xB9\xF9\x9B,?o\x93\xE5\xE7m\xB2|\x9B\xF8\x87\xFBj?\xDB0\xCFˋE\xB3\xEC9G\x82\xFA\x8D\xAF\xC0\xECZ\x99\xBE\xDFw\xB7/m\xF1\x85d"\xCA\xF6ѺES\xC8\xDE1\xF8NlG\x8By/\xA7\xF0r콌~\x96\xB7mUx\xE6y\xE1\xB9Zf/}|\xF1\x97\x9D\xBE\x81PϏ/䚟\x8D\xF7n\xA7\xF6*\xBFx|s\xF2\xC7\xC1 B\xAFB\x9C\xBAY\x91w\x833\x94\xF6\xC3ez\xD6I|\xF4\xCCķ倾\xE8g\xF3
+\xCF+\x91\xB1Vx\xF17\xEF1\xD5\xF8L\xF2sŧѝ\xB5\xDFW\xDF~\xCDg\xF3ʶ\xBF\xD2\xE5\xF2\xE3\xB0hl\xDEٞ\xB6\xE67X\xB7i\xF1\xB4\xEFa\xF9\xB7\xB8\xE5Vg\xBF\x96mw\xBFί冟妬\xAF\xDC\xF1P\xBB\xFA\x95|q\xC2'\xFA뼺\xFDf~\xEC\xF1\x83aB:\xA6`\xB7\xEC>\x89\xB7\x8D\x8DQpz3\xB7aa\x98=\x9D\xACh8\xD1D2r\xDB\xE5h\xFBCN\xDF5\xB6\xD32\xDFr_\xE9C(\xBFd\xA8{Sj\xD4\xEB4\xFB4\xA9\xC7p9|\xAFq\x98rh\x92\xDB\xDEi\xEF\xD3?N\x82\xD3&\xAF۹\x987l\x9F({Y\xD8\xE3\xBD-
+\xF6\xA9k\xD6K}\xC2\xD9\xDF\xFF\xE0\xD4OI\x9C\xC1-Ջ\xAA\xFA4\xF2\xC3vI\xEC\xBBr\xD8\xC3){\xB3\xFF=\xC2\xDF\xC89.\xEBo`\x9CN>\xA3\xBD\xD5\xFEL\xCB|\xF7\xEC\xA8q\x85L\xE9\xC8\xD2\xCE.\xA7ȴ\x8CBƶ\xE9\xCE\xE9\x93i\xC4\xD1\xF6\xFB42N\xC5\xFF'\x8D\x9B\xF2\xE9\xDEB\x84\xFC!\xD2pD\xF7\xAD\xF1m\xE4\xDBط\x89oS\xDF.\xC3e\xFAV\xF9\xD6\xF3\x94\xE7)\xCFS\x9E\xA7<Oy\x9E\xF2<\xE5y\xECy\xECy\xECy\xECy\xECy\xECy\xECy\xECy\xECy\xECy\xDA\xF3\xB4\xE7i\xCFӞ\xA7=O{\x9E\xF6<\xEDy\xDA\xF3\xB4\xE7\xCF3\x9Eg<\xCFx\x9EY\xF2\xFAJ\xFE\xBC<
endstream
endobj
-254 0 obj <<
-/Length 288
+259 0 obj <<
+/Length 329
/Filter /FlateDecode
>>
stream
-xڽ\x93\xC1n\xC3 \x86\xEFy
-\x8Ep\x80\x81v\x9C\xD4M\xED9\xB7j\xD4\xD1.Z*m}\xFCѥ͚6\x93v\xD8z2\xFC\xB6\x91\xF9ls\xB4A=e\xFC\xC2>\x94\xD9ݣA\x96Y
-\x95kd4\xB3R\xA2B%
-T\xBE\xA0%V*8+x\xDAŔ=O\xC30\x86\xF7\xFE
+\x8F\xCE`c_\xEC$f,\xB4\xA8]\xC9V1X\xE0\x86\x884\xAE\xD2\xFA\xF3q\xEA4\x90& $Z\x98\xCE~\xEF\xFC\xF5\xBC'3\x94!\x86\xEE&\xEC$N\xD3\xC9\xD5<A\x8A\xAA"\x94\xAEQQ%\x8A\xA5\x93 F\xE9Za\xA0Q@8\xC0\xB7\xE65\x80\x9B\xC2n\x86\x97\xE6\xAD\x84\xF8~:o27^~\xB4e3\xF3\xC5Um\xAA]\xF0\x90.\xBBSъ\x84\`\xC9\xD8o\x82P\xEA\xBB\<\x9C\xBC])\xC0\xF6\xD4.\xCB\xE1\x9C*)\x8F\xE8\xE3\xFDl\xAF7\xDB\xC2\xEC\xAEݫ\x85\xC4϶a\xDB¯m\x8B\xBD2\xBA6^\xEB\x9C9x煔\xF2?Ӽ1\xC2\xC98a endstream
endobj
-263 0 obj <<
-/Length 508
+268 0 obj <<
+/Length 506
/Filter /FlateDecode
>>
stream
-x\xDAՕAo\xDB \xC7\xEF\xF9\xE1`\xE6\xDAh\xAE6\xA5\xDAaީ\xEA\xC1Jpb5\xB5+\xEC\xA6۷؎\x95ĩ\xD6-R\xA5^<\xF3\xE0\xBD\xDF\xFF\xF9\x99\xA1
-b\xE8vƆ\xF1&\x9B\xCDS\xAEH\xAA\xCDQV
-H%\x8C(\x94\xAD\xD1=^\x96MK"\xA1c\\xFD\x98\x96\x9Bg\xF2\x90}\x9A\xA7 2Ԩ\xE0U .\xA9\x91E1\xA7 \xCEᔓ\x883-\xA8և\xBD\x93\xBC
-\xE8\xEBY\xBEc\xE7\xF9\xB5\x9E6\x97\x97qG`a\xFC\xC4S\xE7I9\x8C\xD5\xFDW\xEAC\xB1KO\x93pl/\xE4RP\xC5\xF8\x81ʭ\xAD\xAC#1\xC7\xF9\xEE\xAE\xE3\xDA\xEE.\x82L\xD4\xE8st\xF9\xB6\xB4.w\xAB\xF05m\x83\xB8\xBFϳ\x95\xA0>\xF2?
--\xC0\x94/08-{x\xD9_#\xC0X\xCDS|Ӕ\xBE\xD9\xFD\x87+x\xDAՕ=o\xDB0\x86w\xFF
+\x8E\xE4 \x9A<Q\xA4\xB8ƨ\x82:T\x9D\x82\x82M\xD9B)\xA0\xA7\xFD\xF7%\xF5\xDBRдd1\xA9?\xEE\x9E\xF7\xF5\x89\xA1b\xE8v\xC1\xFA\xF1&],.\xAAb\xC5Q\x9A#HƌH\x94n\xD1=^uC\x82PE\xB8ʻ1)v/\xD6\xD4\xE4!\xFD6\xB4Lb\xA4\xA9\x96~W\x8E\xB8\xA0ZD\x9CƬ?\x87SN\xCE endstream
endobj
-290 0 obj <<
+295 0 obj <<
/Length 2278
/Filter /FlateDecode
>>
@@ -205,11522 +199,15657 @@
\xC36\x84\xFDv\xBB\x9D'\x96\xD2++oxX,eg\xD0oa^{\xA6\xAE\xFA\xF8\xA4\xB4\xC0\xEB\x9CQ,\xE2Wh\x85o\xCD\xE3H/ަh\xF4u\x96aEW\xA4vt\xB4͢\xC2ih\xEA\xA0\xC0ƨ\xF2%-\x82I\x93\xF9:\xFF\xA0jxd\xE7B\xB4\xF3\xEB\x8B\x96\xE8{\xF8\x89k\xDFh\x8D\xE4\xEB\xDDf \xF8b\xA7\xBD\x8D\xACT\x87\xA0\xDE\xC2Wp3\x99\x8BGD\x8Dy\xB6\xC6ۻP\x8B\xDA\xE8I5q._\xC2D\xD3\x98\xD8+|\xC0\xF7q endstream
endobj
-305 0 obj <<
-/Length 1605
+310 0 obj <<
+/Length 2764
/Filter /FlateDecode
>>
stream
-xڽWKs\xDBF\xBE\xFBW\xF0Ḧ́ߏ\xF4R;\xA93\xC9\xD8uZ\xBB\xD3\xCC$=\xAC\xA8Ŗ"\xD5]2J\xF2\xEB,@\x91b\x986\xA7\x8Eg\xCC],\x8B\xD7@\x9EUZ\x9E\xF5\xEAʛ}}\xF8\xEFY\xBE\x95gn\x98\xC5Ve\xAE\x9F\xA5Vq\xB8\xFA\xFBʍ\xA3\xC4\xC3di\x8E\xD2 w\xB3\xC8\xEC\xE3,w\xFD4\xCE֯\x81\xF5\xB2\xBD\xFA\xFE\xE1Kw&\xE2o\x9E\xAEַ\x99\x95\xBBy$\xD6\xD3\xCEJ+
-7Hr\xEBik\xBD\xB7o\xAB\xB2Wr\xE5\xB1o\xFB\xAE\xFF|\xE5D^h?|\\x99-\xD5\xC7J\x9E\xE8l\xD7*\xv\xB7gn\xDD\xEE:\xE4:\xE1?1\xC88\x8A\xF7\xAD\xE2\xD8\xA5\xA4;\x8F7\xB7H|\xE1\xCF5n:Z\x9F\xC5
-<t\xA3h\x81\xC00,+M\x87\x82\xB6\xA5l\xA45m\x8A\xB6\xC1\xEB\xACw'\x91O\xFB\xCA\xE8\xB3_\xFD\xF1\xF4\xBC\xE4\xF8\xBE\x9B\xC71\xD9\xDE)\xD1\xE8Zt\xE4\x86^\x82r\xF1s\x96\x8B\x9BC\x822{+y_\x99g\xBA\x96o4-\xEAvEal\xBFnt'\xE8\xBC]\xD56,\xB7\xDD}\x87`\xD1l\xB8F\xB3\xD2\xC1,Ì.\xC1\x85\xBA\xAA?/W\x8E\xB5<HRG\xA2\xEC,F\xED\xE1M\x9C\x8Dԣj\xCD#նjJb0a\xC1E\xAFa\xE1ۊv\xA7\xAA\xDB\xD3J\xD0\xD5S\xB5eF\xF0e)\x89h\xECR{\x9C-앬\xAD>\xD2QQ}\xF0\xFC\xA8X\xB2\xF6\x94\xAE\xD1iL\x9E\xD8/z\xA5\xD0\xA9݁\xB3@\xE23\xE4\x8A\xC9
-\xA9q\xA4\x95\xEE\x8F\xF4P\xAB:Mb.u\xD5l
-\xCAW\xED\x81V\x8F7\xF7w\xD37I\xD6/\xF6jIa\xAB5\xD1|'\xB2O\xCC&\x83.\xAE\x9F\xAFd\xE6ʂ\x91,-\\xE3\x9B_U \xBCZW%T%ͤLI<L\xE1!\x94%\x89og\xF2\xD3\xFC̻L\xD8s\xD0Ez\xA8\xA0\x90I,\xA4\x91\xC91-\x81\xD5\xB5[@\xA9\x9Fُ\xE5mįw(Ƹ\xA7M#\xB1X\xE0j\xD7+\x9Ch3\xED6Di\xD5\xC2\xEDS\xA5\xF7\xB42-S\xB6
-_B\xAA8\x9D(X/*\xB8\x90\xE2@\xAB^c\xD1]\xA9F\xE7\xD7uK\x85\x9F\x8B\x94\xA9҈m\xE7-TfU\xAAoD\x88\xE2XJ,R/@\x80\xB2!N\xD4!\xF7S7t\xA1\xFB~ۿij#)M\xA1o\xA6\xD8 M_,\xCF[Q\xB7\x8D\xA4=\xBAa-\xFF\xF5\x8EFT\xE8\x86ۉ\xC1\xE7M\xA5?\xCE\x{DF81}\x981\xF6\xE73n\x9F\xDE\xFC'b=IƤ\x9D4f\xE05\x95\xE1|$\xCBO0\xD6\x9DQ\x96\x83\\xDCj\x9D\xE8\xE7./$\x82.;\xE4\x8C\xFA#\xC4i\xAD\xFB\xB24.\x9Dv\xABBAd\xB1\xE2\xE2X\x83\xD7\xE8U\xE40U5d\xEFX\xA7"\x82m\xCAc\xECG\xBD\x80\x8B\xAA\x92\xE9\xB5py\xA6I|Z-\xB31u\x90W\xEF۾fQ'x\x8F$8DD5\xAF\xE3\xDD?+f\xB0\xCF\xEF]T\xD6 \x80\x9AAG#7 |\xB21\xB8\xE0\xF9\xE9\xE9\xEA\x8Ek;
+x\xDA\xCDێ۸\xF5=_!\xA0/2\xB0\xE6\x88\xDDR\xE8$\xDDl\xBB\xC8t\xA7\xCD
+\x90\xEE\x83Ɩm\xEDʒW\x92g\x92|}υ\xB4e\x8F\xECGE\xB1/\xE4!E\x9E\xFB9\xA4xK/\xF0~x\xF5o\xEE^]\xBD\x93\xC6KE\xA9Ȼ[xI$Rc\xBC8\x84){ws\xEF\x93\xFF\x9F@Ɠ\x9F\xEF~\xECm<\xE958@\xE0\x9F?+\xFFO-\xF2\xAC\xDB6\xF9\xB4\xC9\xDB\xE6m7ĝq\xDC\x9B\xBC\xDAq\xC8[n\xF1\xA6ʈ4\x88\xC97I\xB4\xEF6/\xF3*o\xB2\x92\xF3\xA2\x9Dm۶\xA8\xAB\x96\x97݃\xB8b\xBF\xDEv<\xFE\xF0\xE6R\xFF\xF6;^\xBF)\xF3\xAC\xCD\xF9Ӷ\xB5t++\xFCy\x8Fa-Lb\xB0\x9B\xEA0\xF5\xB7\xE8l\x83\xBA\xDF}c\xD3+js\xAAtc\xE6\xB5"\xF5V\xB3"\xB7u\xEB\xCBu_O0\xBAGn\xBF\x86\xB0^\xD82B\x9Bh\x97\xCE\xFC\xA1[\xC6\xAD\xBF\xD6\xA89*Q܄\x9ED\xC7\xB8\xFAP\x9CRR$J2\xC2;\xB6D\xFB\xF9\xAD\xC50\x9F7%r\xFBi媜~\x8C>.FA|\xF5\xA2\xE3\x85\xD0dM?B\xC7\xFBz\xB6!d\xC5\xFCi\x96+\xE2\x97\xC5x\xB3\xAB}\xDEg \xAFl\xF2\xA6eFIb\xBB\xD8o#<Dڶ.\xF3g#\xBC
+q*\xC1 \xE6Bab\x83\xCE\xC1Uc
+p\xE1\x803\x81\xC1L\xD0e\x8DX~E7H{%+:I~\x91\x82\xE6\xF3\xF6 \x8D\x83݅J\xA0 \xB2c\xE5.H\xCA/3\x88\xE4H\xD6ʪU%q+r\x98\xFF\xA5\xBEo\x91c\xFC;\xCA*<\xDDٚC9{\xB0\x92\xAA1\x8A4\xE4c\xB3\x8E\xE7\xAD;f\xDD'\xC5d\xE8.O\x8A+\xEBv\xCBH\xAD*\xE8\xE9U\xC7P\x98\xC4\xDD\xB1T\x81\xA5\\xAA$
+\![oP\x8EOb\xEAv\xC7\xF9S\x86V\xFF@\xB9\xF1}\x99\xBBPbݨw\x8B\xC0\xD4\xC2t\xC9z\xC4"֡\xA3\xEB4:\x81u;\xFA_\x9F\xBDjK-E\xA8R{[\x8DN\\xB6\xCF\\xAD-\xB4\xFC\xFB\xBBW\xBF\xBD\x92\xF6.#5TT\x81q\x86B\xE3\xCD֯>\xFDxs\xF8\x97\x84\xC4{\xA4\xA5kxQ\xE0\x95އW\xFF\xE0'\x8E\xFEyRGB\xA6\x9A0\x80\x89\xCE\xFD\xF0\xE6\xE6\xBD\xF8\xBC\xB61\xF8\xF5\x84nM{YSg\xAB#Wۂ%\xD8]\xF3\xF2P\x88\xF5\xAC\xBCL
+̤ϼM\x8CW
+-\x93\xFF\x85\xB8+fJFJ&z\x92\xAD0a\x8Fb\xEBRl)!\xC1hU\xA4\\xFBm\xDE\x9FQ\xE8NJ\xA2\xE6+1\x86\xA9\x93\x89D\x91\xA0@$\xCA#\xEE+9\xA38y\x93L\xDE\xFD\xF8\xFC\xBB\xB9\x8EIC$\x95pF\xA0pD\xA8j\xE3Q4\\x88\xE1\xE4e_\xF9;\xB8\x8BI\x99\x88x\xDC\xF5b\xC3E|*A\xBCR\x84\xEEW\x9D\xE2\x8C.\xC2W\xAB=\xBC\x93M\x87\xF8AB\x87\xF6GX\xE7\xE1\xA8\xE0Q\xCB]Ǔ
+\x8F F\xCB\xC0\x84(;\x85q\x99;\xFC\xA1@s\xEDk\xFE'! \xE9PE88#x\xCD;\xD1\xFE\xA5A\xB5\x8Ds\xE6\\x8D-|\xF5(q1\x8A\xC2F\xB5)\xB8\x8B\x80\xE9\xD1
+\xDAkj?R\xFB\x9E\xF8\xD6\xBF\x{DB6C}\xA8}pj\xA5\xA5P\xF0\xBD\x99S2\x81<\x8F\xBB4_\x8Aa\xB0\\x83\x9Ad\xAB \xAFE\xFBB\x94*р
+ЀkQ\xE9+\x82\xAF\xA9\xBD\xB5_O?{+\xC8S\xF8;%\xC4\xCA=ju\xB0\x84\xF2_1\x80\x94
endstream
endobj
-274 0 obj <<
+253 0 obj <<
+/Type /ObjStm
+/N 100
+/First 904
+/Length 2592
+/Filter /FlateDecode
+>>
+stream
+xڵZ[o\xB9}ׯ\xE0\xE3\xEEC8\xE4\xF7\xF1\xBAM6\xC8\xEE-$)\xD06ȃ/cG]ۓJ\xF2&\xED\xAF\xEF9\x94\xE287\xCF8\xD2+`\x8C_\xB9\xD8\xBFn\xEB\xEB\xE3[X9;7hb\xB4\x99A-
+bHL 4\xE5)hf\x98\xA3+\xF1Pj\xA8\x87\x97\xC2CL\xF3\xD3\xD89|\xAET\xC8\x9E\xC1+J`(\xDF:\x92+g\xF0n
+\x90\xBALO0\x9A\x8C\x98\xF9
+\x9A&В\xE6H\x96*Ŷ\xB2X@D
+H\x9A\x82e\x86T\xA9>\xC1P\xDAJ\x87e=\x8D\x8A҆\xAAS\xD0̐+Q[\x96\xAD\xF8tk\xC5(\x99\xA7\x80\x99!U2ag.\xF0$$\xEC\x92X\xC2\xDBX&Q3C\xBAd\x9A\xCC\\xA9
+\xD5ZO2\xC9l\xE8P\xBB\xF2^\xE22&\x9D\xEB7H\xFE\xCE\xEA\xFE\xF0\xD1E@\x84\xB0\xAB\xEE%\xA2\xA8\xFC\x96\xACڑ!3T\x{1E2855}j\xAA{\xBAu*u\xC7l\xA0\xA8\x95V\x8Ab\xBA-*\xD9\xC11\x83\x8B\x90\xDCVmjk\xA8(%\xCBhF\x94y\xAA{y\xC0\xD5L\xD0\xC4e[\x94oU\xC34\x87\x9F#_rn\xA2\xC1sɯb\xAETF\xE6h\x86\xD0\xE6s\x86\xFCЛ9"0'X\x99\xA5\xBC\xF7\x90\\xC1F\xE1\xA9\xCF\xC1\xBAT\xA7\x80\x99!!zH\xB9U\xDF{\x94o\xA0j
+\x9A\x9C\xC9C(ԥ\xA26\x82n\xF1\xA8\xDE|,S\xC0\x84\xC3[/\xA4\x81BD\xB5\xAA\x9A\xAB\xAA(\xE0\xC4\xE9\x88\xF5ΐ
+\xBD\xC8\xC9\xEB\xA5\xF6X\x99e\xE9\xC3C\xA4!$\x82\xB6\xA6\xBB\xAC:\xCD'\xE6\xFBļ\x92\x90\xF1\x8A\xE7\xA6\xFB\xC7?\xFFe\xB279\xB5\xFA\xD5\xF5\xC5\xC5\xEBo6\x93\xE18\x9F7{:\m\xDA럶m\xAE\xDDO\xDB~\x96\xDF}`\x8C\x96v\x8F\x87\xBAg\xAB\xE1\xE4E\x8F\x81\x99\xEEٓ\xA7\xA6{ٿߘןr\xF5\xEC\xE8\xBC_t\xBF\xA0\xEF\xFEj\xB3\xE6\xEA '#\xEB\xE1zuү\xDB\xFEO\xFB\xEAo\xFD\xE9\xF2\xE8\xF1\xF0\xDE4c\xC5hs2% е\x9F\xAD\xD0±\xDB6o\xB3\xB0\xC6˹\xDBDH\xDCl\xDA^?|N\xED\xFA\xFA\xA06\x9DcBZ\xE0\x86\x98آ\xA42#k\x8EE\xE4tp\xDF\xCAP
+N\xB9\xFC+L\xBB\xB7\xBB\xEE<\xBE\xEC<\xBE\xEC<\xBE\xEC<\xBE\xEC\x92cI\xBB뮟\xBDVwGd\xF8\xDA|;\x83\x92\xF6c<Nm\x93\xCBD)V\xAB\xB64\x85\x9A\x8E\xA7r\xAC6\xE5\xB53\xA1fAݣ\x87\xDB\xBAG-w/\xBA\xBF?\xFF\x9D?\xBC\xD9l\xDE\xFE\xD4u\xEB\xE3\xB3\xBBe\xEFlX\x9D\xF7\xF6\xAA\xDF\xFCx(\xE3Dp\x82SD\xA40\xBD
+WEa\xEE\xB2
+O\xAC\xE5{\xE3\xD68I\xA3TG\xE6\xE6!\x9E\x80\x80Ԑln\x8A\xE2\xAD\xC1ѿ\x8F\xFE<\xB2'\xC3\xE5\xC1x\xF1m5\xED\xC2V\x98\xCB-\x84_\xF3\xDB\xD90l\xF0\xBA~?f<&\x84\xCByV\xC43\xA5\xAD\x99\x9F\xEEm=\xEF\xB3\xFD\xF1\xD2\x9D\xD8\xEB?\xBA\xE3\xE5p9\x9C\xF6\xEBn3\xF8\xFFd\xB8\xFA\xB3_m\xFAպ;u\x88I)\x90 Gn\xE0.\xE6do\x9B\x92\xDA\xDAW\xBA\x8A\xE3\xC1!\xBC\xB7mhޟ\xB8\xF3a8\xBF\xE8iX\xDDɛ\xD5p\xD9\x90%\xD4\xF14\xAC\xB8\˷\xE1\xDEE\x93\xEEOS\x86$\xE0\xE9 \xE0H<~G1\x9D\xD2\xFD]\x8F<]\xFF[^\Y\x84\xA7\xAE\xBFz\xF0\xEB\xE3\xEEl\xB9B\xB4zH\xBE &xb\xEFw\x81ڽ\x8D\xFB.\xBE\xC2\xFE|\xA1\xC8p\x8EK\x97\xE0+\xF3\xF0w`\xBFì\x96W\xA7û\xB5\xBD\\x9E\xAC\x86\xF5p\xB6iֵ%m\x89\xAC\xB9Btп{1\xAC\xFAU\x87\xA6W\xC3\xD1\xE9\x83e@\xFF\x93<\xC1y3"0n\x8F\xE8.&\xE3L\xEE\xC4}\x81\x92v\xA0\xD4:\x9A~\x85@+\xFE \x89\xF1\xB6\xC1Q\xD50I/}\xD2\xEC\xEBz\xE9+ͨY"\x98k\xA7h\xC7\xB6c\xED$p\xF3d\xA4?\xEE\x99\xDA?\xB7 Ӵ\xB63\xAE~Z[\xF7^\xF2\xB4\xB6P \xED\x93\xDAr[ޗ{kP\xBE\xF9\x81\x85U\xF9 Ny\x80\xA6~\xF8\xC0c\xC5{)U\xF5\xEEs\xA5\xAA\xAE\xEC\xA9T\xEBN\x91\xD6\xEDhx"u{\xCD{)\xCCmD\xE2rLs[\x9E\xEFJ\xB0Y\xCA\xCDx\xFF+endstream
+endobj
+336 0 obj <<
+/Length 2997
+/Filter /FlateDecode
+>>
+stream
+x\xDA\xD5[Ks\xDBF\xBE\xFBW\xF0HVE\xA3y?r\xB3\xBD\xABT\\x92\xE3]{\xABR\x95\xE4+\x93\xE2\xE4=\xB9\x80\xBF$\xAC\xB7\x93b\xF2\xFE\xC5?Z\x9C\xF64>\x98ū/.\xAF4L)H5\xF9p? J\xAB\x80SI\x87ɇ\xBB\xC9o\xD3\xF73c\xA6\xAFfFOo\xB0w\x8D=ͱ\xB7\xC2\xDE;\xEC\xBD\xC4ޯ\xB3?>\xBCy\xF1\xF7R\xDA \xBC6\xA3\xA4ʢCJ-\x94 \xA5\x84\xC7L-\xE5\x85V \xD2\xA2\xD7@%H\xBA\x9F]}G\xF4%\xD1y\x951\xC2\xC9H\xEF\xF0^Z\xAD\xCEⴾ\xD5*\xE3\x85Vnw\xB9\xBDX\xF7+\xDAD\xA1\\xA5\xE8\xA1,\xFAm\xA5H0\xED\xBB*\xDA*\xA1R\xF8K\xDD^.+\xDA\xF4+ZG\xE1\x93\xA5\xE8\xA1,:\xCFmt\xB6L gl\xADhA\x9F*\x81\x9A\xA1w\x8D=\x8D\xBD\xBF!Y\xE1e\xD9/\x96Jb\xE49ȡ\xDBzH\xC3ZH\x9F\xEBQ\xAD\xE8
+\xD1k\xA2\xBA5\x92-\x89\xAD\x91\x8F\xFD\xD2\xCA$\x82w\xA3\xC4ʢ[^\xB0>\xA5\x85\x97n+n"q \x97H\xDCH\xE2\xA6\xE9/Do\x89\x96D3\xA2OD\xF3\xE2\xC2\xC2\xE0\x9D\xA3\xC4Ȣ\xD3f\xB5\xF7\xC0\xC9l\xD2 m\xC2P\xE4z\x96\x88
+\xBD퍟\x90\xBCm=\xD2'\xA4ORD\xE3\xC79\x98E\xA7\x90z>ჯ\xA5\x84r\x83\xE4z<H \xBD\xBD\xBD\xB2E%LУdʢ[68\xE1>Zp\x9B\xAA\x91
+7*\xB7'`\xB2x87\xDE\x92/\xC1l\xBD\xF5=\x80H\xDADb' r\xB9\xD7!]\x85\xA0A\xD1$P4 (\x81Ds\xA2\x9BF#\xCA8\x8B\xE7͈.\x88>-\x88\xE6\xFC\xE8%B\xE1ﱞz\x85\xF5\xD4
+W\x8E\xD0E(\x8B\\xAC\xC1\xF9@\x8B~V\xBCs\xE40\x93>?:r\xC7g\x9Fp\xE4\xCE_\xC2\xD6\xDC\xEA\xE1d/\xA1TU\x91\xFFv\xC3C\xB2AU\xF6eS=\xE0\xF8|\xC3mVlV\xDC{\盜*\x92\x92\xEE1<`\xE7\x9C\x86\x852ٯ\xB7\xF8\xA1r\xC5\xF77\xF3\xC5c1\xBF\xFFV\x8D~\xAA\xDEW\xF9m\x81v\xB0\xB2\xD3\xEA\xBDw\xABg\x8F\xC2B\x9E\xE6\xAB\xCF\xAE\xA2\xA0,C\xD9 \x87\xC9U8\xE2N\xE5\xB4\xDE@A\xF7\xC3N\x95\xF3y\x93W\x85\xD1mV\xD7?$':8\xEB\xDB#\x8Cg\xB5\x94G\xC5
+\xEF\x99/\xEA*m`9d\xA1M>\x8E0sKЩ?\xD3\xCCO\x98}\xDC\xCCG,\xA16\xF3qz M\xBA$\x9C\xF5c\xC4`\xBD\xB1\xC5z\xA8\xEE\xAC\xD9.\x8E\x83\x8BL\\xC0\xBF/\xF8\xAA\xE0Fs\xB3\xE2\xE6\x96)\xF9*\xE3\xE6\x89LpbG\xA4M\xE5\xBF\xF9\xF88\xD8ǫ=\xAF\xEF\xB7>\xDE\xEF\xFBx}\xC0\xC7[\xE7\x85Ra\x8C\xF1\xA3\xCE6\xFE\xE3\xB3O0\xFE\xBB\x81z\xE8\xF4\xF1\xB0v{\xBA\xC2Ԭ\x86\x9A\xDC\xC4y\xB2BSq妯\xC1#,K\x81\xB0G\xEFxBvd\xD0}\x93\xE1?\xCD<\xDAU~\xED"\xC1\xC3FXO\x86S\xD5\xFC\xE1\xB17U\xEF\\x83\xF0\xCD\xD7\xF9mY|C^\xDC\xF4
+\x9FY}\xAE#\xB3l\xF9\xE33\xA8m\x96k\xDC?\xFE\x84_\xFD\xE2+\xE7\xD2\xB5m1\xB0\xBC\xD9j
+\x82A\x88c\x8E'p0a\xD4\xF1<\xCE\xE1\x84\xE3y\xFE2\xB6'c\xA0.\x8E?\xB5\x80:_\xFF¹\xF3{S\x8Dn\x9D\xEEOuJ\xC283f\xC3$\x9E3bÎs8a\xC3\xCE_F\xBDa\xE3tAڌI\xC48\xEA\xE3\xAD\xC1,z\xFD\xA9NZ\xBF\xAB?
+& $ H5@\xBA6\xA5 H\x82N\xFD2\xA6\x82\xC2 @P<R$\xA8\x83@Ш"\xA11E\x99q\xBC\x90C\x90c\x8E\xD7 \x8E\xAF\xCB\xD8Z\xF6@]<\xF7_\xBB\x83\xDDG\x85\xB47"\xC53R\xE7\x97\xA4\xB5ˬ\x9Cs\xAA\xDC\xE4\xF1\xC9|\x9BC\xAF\xFES}\xEE\xB2\xEE\xDCc\xAB+T'V\xB0\xCB\x9A\xC0ϰZ\xE4\xE5'̽\xC3\xF4n\xC3#\x84:ES\xB3ѭ\xEC=\xD4\xD9;W\xD9;\xF1]\xAFܫ\x8A\x8D\xFA\x91\xFA'\xE4.\xA2T\x97*b\xA2x&\x8C1b0\x81\xA4\xDD#>\xCE\xE1#>\x8D\x8F\xD2i\xEA<=\xEE\xB0\xC1,:c\x84
+8\xFAT\x93,\xE3\xB2\xE3\x87T+Bj~F\xFD]J\xD3\xF1K\xAA\x92\xE0\\xFD\xD0ψ\xF1
+#Ңkū\xCF|U\xA2ӥ\xCC\xD4Sr\xED)\xB9\xF6\xE4\xD8=%\xD4\xD1\xC8\xE9F'ÿ\xF2\x8EU\xFC۪&\xB6\xB2O\xAA\xB2n
+\xD11"\xE4=\x85
+h\xD6\xDC̹Yr\xF3\xD0!\xA2\x82\xBACuD\xC8E\\xF6;|iE\x94\xA3\xFE`0\x8B\x8EݍB\xB0w\xD9Jq' V\xE1NXE\x9E\xE5\xBC\xDEr\x96\x83v\xC1)\x92ɍQ\x93\xED\\xA1'5ԫ\xF8\x8B]\xFA\xDD\xAF\xE6|\xB5\xE4+\xD8\xCC<\x95-\x9E\x8A\xDA\xA0ODs\xA2k\xA2%\xD1+
+\xDF\xEB\xD6\xF3\xA2\xEF[\xCF\xF0\xDDy\xC3-\xE0ktt\xF4\x83,\xAE0r\x91\xBF\xDB\\xE5\xA5\xEF\xFFA\x85lUyu\xAD\xF7\xB6U\xFD\xB5\xAA<\xB5}u\x9Fy\xAA\xE4\xDAa\x9E\x83Yt|\xAF^'H\xAC\xA2+\xF8\xA9\xAA\xFDN\xAE
+\xAA\xCF,m\x8E\x81\xC5=\x8C6\xF68[\xD7\xE3l}\x87\xB3\xBD\xA2\xE7\xD9\xC1\xB5\xA3n;X\x86\xD1|\xD1\xD8\xC1\xA6\x93a\xB4\xDA\xD9\xFEe0\x9Al9\xD8\xEF\xA3\xF5\xA1\x87s\xA0:\x94C\x8F{\xCA'b\xF3\xD4ާs\xB2\xFE\xBA\xEE78Pr\xF3 ?\xFD8ѓB\xDD\xE5\xFC 9\x84\xF3\xBE5\xA8
+\x848/F,c\xBB}uq\xB0\xCAmW\xAC\xAF\x82l.T\xE9\xBA\xD9)\xE0`_\xFEex\x83k
+endstream
+endobj
+368 0 obj <<
+/Length 2918
+/Filter /FlateDecode
+>>
+stream
+xڵ]s\xDB6\xF2ݿB\x8F\xF4LĒ DQ\xB9'\xA7m2\xBE\x89Ӵq;\x9D\xE9\xF5\xA2 S\x8A\xD4dR\xCF\xFD\xF9\xDB/\xF0CV\xD2$\xAD_D`,\xF6{\x81\x85\x92\xC5\xDD"Y\xBC\xBAH\xE4\xFB\xE2\xF6⛗i\xBEHu\x9C\xE9\-n\xF7\x8B\xB5Z\xACW\x9Bx\xA3\xDB\xDD\xE2\xB7(\x8DW\x97\xCB4U\xAB\xE8\x87\xF7\x97Y\xD9\xF6\xBD\xB3.\x97\xD9z5{\xFEv\xF7\x96g\xBC\xBF̳ȸ\xCAl+\x97M\xCD\xB4\xBE\xB3\xAD\xBF\xFC\xFD\xF6\xDF,\xB0Q\xAEr\xDC7Y,U*\xE5mo\xC5Ey[vP1\xA9"ꌫe\xB8\xBB\xBF\xA4a\xF4p\xACl'\xBD\xCA\xF9\x8E[D\xE7\xB8\xFA=\xFE7]\xE5\xB2\xECd\xD3w/^\xE2\x84oc\xEE^U\x95l
+;߇\xAD\xFB\xB6\xB5L\xDB\xE9^\xEB\xC9^*\xEA\xBDE\xE6\x91\xDF4\x8D7\xAB\xF3\xFB\xEE\xC5\xCD\xEB˥*\x8A\xC8x\xFCn"\xD8\xEBc\xDFq\xEF\xD0\xC0w\xEDl\xC5\xFD}\xD3Li\xB5\x99,v\xB2\xD8p\xF7`J$\xE2\xDE\xD5v\xD9Z\xB3c\xDEp\x84\xD7\xB8\xD8\xDAck\xBD\xB0\xE1\xEA;A\x82[\xB8\xB5
+띐(+b\x9D\x88$\xFF\xF7 \xDE\xD3\xE6
+!\xFF\xE7\x9Fި\x9F\xFAk\xD6u4J\xA8o\xEB\xE7\xD7:sྩ\xEB\xA6\xF61\xB0:]q\xBD\x9EN̮i\xEF\xB2\x8AgO\xB0\xA4\xD1'9^
+\xCBt\xC3a\xEA\x8B9~
+\xBF\xF9"\x8E\xBF\x80~Ll,\xFDH秢\xFB\xA6gV\xBE\xCC\xE0\xEC\xD4\xFC\xB5Vi\xFA-&\xA8\xAB_'\xEC?:I\xF9S\xAA\x83\xA5\xAEY\xEA\xA9}눷в\x85\xA7\xF24\xC5PJ\xD0\xCD>\xCD3s03\xED\xAF\xF0\xECWo\xFE1\xDF\xFCNu\xFB\xEA\xCD\xF2\xE6\xF5\xD3\xF3qc\xBA
+3\x89\xF0\xA1\xF5\xEA\xEB\xF9\xC0\x8C]\x81\xC5=f\x87w\xF9|n\xBE\xD6(;3\xD2\xCE4W\xFA\xB3\xADQ\xB8ҟ\xB2\xC6\xF96O\xAF\xA4_߾}2K\xDCO\xAF\x97\xEF~\xB8}2+"%P\xD8\xF4\xDC\xE1K,\x9D;\x86 \xE7\xF8-\xF1\x98!\xE5\xC4\xD6m{,\xD2
+\xD7_heQ\x8DuN\x9A:\xF5t\\xD6v\t\x84^q5\\xBF\x8F\x955\xDE\xF2BoF\xF2]\x88V\xCDq\xB8\xD8\xE3\x84&\xAD7\u\xD7p\xF9\xBC
++j\xFB\xA7\xECi\xA3R\x8E\xE1\xFE\xDC\xDDTjP\x8C\x9A5e\xA5\xF4w6Vq\xBC\xD6\\x99\x80\xC9;\xDBW\xC5\\x80\xC3z0\xE1V\xA1.v\xBA\xD1C98N\xA5 \xFC\x{DB2C}\xEB\xE5\xBEn\xE0C5K\xC4\xCDy\xC6\xCDi\xFDk\xC7\xD3{\xF4}Y\xEA\xA4}\xAE\\x9Cqv4-\xABt\xAA\xD6\xB70J\x96\xA6\xAAPc\xEBN\xD6\xD6<"tÚy\xCD+W6\xF5\xF2\x9C\xFA\xA3Ca\xE2@B+\xC6'\x979.^\xB0\x96\xA0\xF7\xCD\xE77\x93s\x88
+\x9F\xB8Wʥ\K\xF9 \xEF]i\xD3&>Wỹ\xFE\xE9\xFA\xEA뢩\x94Z\xB9D\x83_\x8B\xC2DES \xA8\xEF̶r\xFE^\xC0\xE8js\xA6B\xF1&Itp\xB5;P!&x+\x98\xA8\x89\xFB\xA1\xEBp\xB9\x86\xC0\xE8L7\xA7\xC6\xF7@F^:\xE2Ŕ\x83(H\x84B\x859\xA7\x8A\xD1^\xF0\xAB\xC8\xC3\xF0\xEB\xFBP\xF7Þ\xE1Ϥ 'p*\xA8\xB3\xB0o\xEBP\xB1L\x9D\xB6\xB6\xF7Ty\x85\xC5l\xF7\xB4\xC1X\xC7
+2-\x84\xCFB\x83\xCCeA\xE2\xDBʃ<\xA7\xFC\xC9ہ\x96,\xFAp\xEFB!\xD2\xF39\x81\xFC}\xD3Wb
+\xF38T\x97A$;9C`C\xBA\xA6\xD2-ܬ\xAE\xF7lRT\xAC\xEDy|\xBF\xA7ǀ?j\xA9\xC6\xCBa\xB2\xB5\xCFx`\xB2^\x8B\xB3e(5#\xE4\xF1k\x8CMm\xFE\xE5e\x9A\xA6\xD1.\xFD\xD1櫲x#RqT\xF2\xC0-*\xD7k\x95\xB3\xFF\x86\xE22f\x88U\xC91b\xD4
+\x95\xA0\xFB`\xE3\xAEj\xB6\xA6\xC2R2.\xEFk\xF7\xDFޞb\x9Fh\xBB\xC4\xCE\xE4\x8DP\xB0
+AI\x89N\xE5As2~\xD6j?\xB8\x9De7\x82yG\xF6-E\xE7\xE4\xF4U!\&O0\x95\xF6\xD8 \x94
+\xAE4\xC0\xB7\xB8\xFB\xA6\x95\xBB\xE2\x86j\xB0\xB6\xDAQi8\x99U\xB1q\xF4\xD86\x9Duu\xDD9\x8Fi\x95\xBByt\xEC!\x94b\x85\x84՜\x94\xDC%\xD6H^\x9FW2|\x89\xB0큌mCy\xF6\x81\xA1l!\xD0ز~\xB8\xC3b\xA4V\xCDBG\xC1\x88\xB2fFu\xC4+\xA7\x93Q!
+\x95\xFC\x96\xC8\xED\x9D-\x9B\\xCAsW\xE6"\xE0\xC6Q\xC9,\xD5eH\xF2\xC3\xC3\xD8%,\xA6K\xECH\xE6\xCF'\xEF\xF9\x9DG\x9C \x95p78b\xAB\xC3\xDE\xF2\xE6m\xCAav{6\xAA\xD0\xE3g\x88\xB9'y\x96%Zgp9?\xECbN\xD7\xFB3\xF1|\xC8\xC5<\xE8Y>\xC8\xC6|p\x92O\xE5\xF2\xC1'\xEA\xE8\x9A҃\xC2\xF4\xB0~\x94\x86?,\xA0\xD2ӂ\x8F\xDA\xEBhr+6\xF0\xDF,\xD4+\xEF~\xA5\x95\xFF\x94BDtl(\xD8\xCCcn\xBEDU\xB1Z7ru
+{\xE1ބ\xCD%\xA9\x8E\xB7\xF9\xE3J=\xDE\xA6Ŗ\x85\x97N\xF5\x8B3qQ̵\x9E\xCD\xF9\xFE\xF6\xE2\xFF\xC7\x81\x8E
+endstream
+endobj
+374 0 obj <<
+/Length 3384
+/Filter /FlateDecode
+>>
+stream
+x\xDA\xED[K\x8F\xDBF\xBEϯ\xB0
+\xF00\xFD~xOvv`\xE18Y\xDBYpr\xA0G\x9C:R\xA1(۳\xBF~\xEBє\xC8I3\xB2\xE2]l\x90\x83\xD8\xECwUu\xD5\xD7\xDDU\x94\x98]\xCD\xC4\xEC\xDB3\x91\xD2\xE7oξ\xFA&\xCCb\x9Dr\xB37\x973\xAFf\xDEBV\xF9ٛ\xC5\xECmV\xB7\xAB\xD5\xFC\k\x9D\xB5
+\xA6&[\xB4s\xB2\x8F
+=\xF1Qt\xAE\xB9h\xA9\xF0>\xCAnU\xB5\xCD\xCBbUn\xAD\xD6u\xCF\xFDu\x95F\x87\x91|V\xBEK틫\x92\xDF.\xBB\xF6\x86\xFB\xF5ש\xE8\xF5\xF3\xEF^L\xFA\xAC\xAA\xBE\xCC翼\xF9pt.e\xADe\xDA\xDFP/\x980?&\x8C\xCBa:,\xE9+0X\x99j\xD6]\xF3\xF4\xA6\xEA\xAA\xE2\x86\xF3E\x83<z\x99U\x8B\x92\x98쫟\x8540X\xDEvWC\x9F\x9A_\x88'h{\xB9\xAE\xEB[.Z\xAD\x97K\x9A\xAC\xED\xFAr\xC1e\xAB\xFE\xBA]\xF7\xC38j\x9D\x84o\xEDe\x9A\xB6\xB9l\xBB\xF3]L\xDE=\xF0\xB3\xE1_\xE9<J9\xE65\xE5\xBF\xAA\xB9\xBC\xE8ʧ\xD8q\xA3_}\xA3\xC4Hp\xAA\x98;\x97t%\xAFH\xFC\xD3>\xFD\xB1\xB9\xF2*\xA8\xC7\xD3\xF9\xB91\xE6\xEE\xFCӥ\xD5\xC8;-\xF1veoZ֢\xAC\x93\xEE]r\x8B\x82\xB3u\xC9C\xD5C\xFF\xA4\x80\xD3F\xFDjS\xBF\xA6\xFD\xE9\xFEz\x88\xD9\xF3D:\xB2\xECcb\xF9\xC7W/ԏ\xAF^`\xD8\xC9\\xF9\x86G\xEC\xCD\xCFe\x86,\xFA\x81E$h\xA4\xB5\xBC+\x9E}*\x9D\xD6\xDD\fi+|\x98\xDDD8\xB3\xEBv_\xBB\xB8\xB5&7\xF1K2\xBB\xA5~\xBA\x82{\x85\xA0\xD1\xEEX\xFD\xCFṷqIiC2\x82y\xD08\xBD&\xEB\xD6
+\xBFl4\xF9 \xE7\x87e\xA6L\xDBa\xAA\xA1)G\x81\xBC\xE0\x82[d\xB3]s\xAB\xA6$;\x86\xB7\xF7\xA3\x9Eu\xA4\x9FP"s;\xCAd\xD7\xD5\xA8_>?\xB7\xD1g\xCF.\xC1\xB9葀v8\xF0\xAFUsťuď4y4fj\xEF\xFF\xAE\x92\xD0\xF4\xC0>ʣ.\x9Flg\xB3S\xF6\xD70U\xC2\xE0˶^ \xC1EZ\xB2\xEB\xE2n߄\x8FeZ\x8B\x8B\xAE,\xBDh \xD3\xFC \xD4)\x88\xE9\xDFߜ\xFDv\x86\x96!fr\xE6B\xA4\x9A٨s\xDC\xEC\xE2\xE6\xEC\xED/b\xB6\x80:\x80\xAD\\xC70\xFBH-o\xE0\xA7A1\xFD\xAC\x9E\xBD>\xFB\xE7t'5\x8C\xE0r\xED͡\xB8\xBF\xB87\x82W\x8F\xE9m\xACp;\xFA[\xB8\xAA\xFC\xB0-轤w\xB4\x9C \xB3'h\x86\x8E\xA8\xF2̋'\xF3\xC6d\xC9I*\xBC\xE0\xA4\xE7\x96\xE7>L\x9AԜ\xE0\xCDH=\x80\xCF\xC6\xE6\xC1\x99\x934\xE9\xD8!H\x93\x94k\x92έ\x84\x9A \xB9z\xB3\xD7K\xD8w\xBF\xE1\xC0
+ :)\xC7@W\x93\xC0\xAB\xAC2E\xEF+z\xBE\xA3\x92M\xAD\xB2\x86\xAC\xCA\xD1 к8ȿ\x8C\x8C^\x9A\xA4\x87\xE3ל+\xB9\xBB\xEE\x82\x9A\x8En\xC7F\xC1\xD67\xAB\x{1E9259}\x9Cq\xC066\xF7L\xC4dO\xD7*LjN\x9C\x94\x9C\xE0\xF9&\xFD\xCDD\x81\xB6;\xA0\xC2e\xFF\x82\xDF\xED\xFEE\xD4p\xB2:NY\xC4\xCFb B\xE1DıC\xEC\xC7$\xD7c8\xEB\xFF~'[E\x8A+\xB2\x8A\x936ͪ
+\x8Cт\xE0S[U\xB3++\xECr
+E\xB9p\xD5C\xFB\xA2[\xAC\xEEv.\x92\xA6\xA7`\x97~\xAC@nwqV,\x80\xB2!\xF6S5\x93\xB8h_ݔD/F\x82\x8A\xA6\xC1\x90\xD38.\xFCPX8
+\xBAzTP8\x8C\x82\xC2l\x89\xEE\xAE\xEELM2\xA0\xF7\xF5\xA8аI\xA1a} 4<ķX}R0\xD0\xC5\\x8B\xB8;\x88\xBBq\xAB\xDAr\x90k7\xB1>\xCCp\xAC\xDBnb}\xE4\x85\xC7\x8A\xF5a#R^1\x8A\xF59\xB0\xCA\xEB\xC3\xF2\xFB\xB1>\xECE\x9F5`\xF5$\xAE\x87\x9B\xB8\x9EQ\x8CZ~\xD8D\xC9\xE8\xC4\xC1\xC2]\x81>\x8C\xC8\xECq\xB1>4\x8B\xC5$\xC8~d\xBCOEج\x85:a;\xD5p\x9F\xBB\x9B>\xDC\xF9\xE1\xCD\xF4\xF3 \xF6\xD2ӄ@b!7\xFA$7\xED\xD1C콟\xA8\x88"\xF3\xFB\xBEx\xB0\xCF\xC3Q\xF5\xF9\\xE2uC\xE2 \xF0\xF8ϰ\xEC'\xA4\xC4\xE0\x91ԠH\xA9\xEC\xE5{\xFE
+"\xD3{\xB9\xCA\x90\xD4I\xC1\x8F\xA3\x87دNAQ\xFA\xCFX\xDA\xFFm,M\xC1Vk\xC5I^㣇\xD8KS^A~\xB7X\x9A \xEC\xEBDEs \x96W\xE1\s\x9A\x8Eb\xBFU9W\xC0\xAD\xDF\xDA
+\xB4*\xFE\\xC0[I\x91\xC5\xEC\xAA\xC0O\x91>`\xAE\xE3Z\x95Ӄ\xBD,9)9\xB9\xE0\xA4\xE2\xE4r\x92KukZ\x94ܢ@'\xAEd\x95>D \xCD\xC5/z\xCE]s\x92>K@\xE7L LL\x8CLcL\xF4*\xFB~.\xB1_!\xF3q\x8E\xC6M\xEF\x9A){\xC2|K+\xAE\xFB\xB4\xE9\xA0<{\x98,\xED\xC5+\xC3jU\xAD\x98k̐\xA3Nn>\xD4\xDD㫻\xE3
+\xCF\xEF|\x90\x8F;\x96]\x8BW\x83\xEC}y\x81\xE4B IRv8\xF6\xD7\xF9\xC1_\xE8\xBA\xC07\x9B\xFD\xB6.\xEA\xAA\xE7\xBF$+*\xD3w\xF3P\xFC>\xF9\xA0\xD2w\xF3P\xC7\xDF\xCDC9ȡ`\xEBK\x92\x86\xEF\xE6\xA1~ݐ#-\xCDCS^9\xA8\x9B~ 5[G\x86\xF2ڭ\xFB?ul\xB7\xFCoi3X.aM\xCFU\x84\xC3{\xB1\x9D\xB4\x81\xFD\xEB?A.S
+endstream
+endobj
+395 0 obj <<
+/Length 2592
+/Filter /FlateDecode
+>>
+stream
+x\xDA\xED]s\xDB8\xEE=\xBF\xC2377+\xCFԪ\xF8%R{O۽\xDDN;\xED}5\xF7\xD4\xF6A\xB1\x94X\xBB\xB2\x94\x95䤹_\xF8\xA0d)\x91Ӹ\xBE\xDC\xCC\xCE\xEC\x83EA+U\xE2\xB7\x84\xB9\x85\x9F
+\x95\xB3\x8Br\xF1\xE1\xEC\x9FS
+\xB1P@\xC1\x84V\xAB\xC7(\xF0\xFA\xE8+\x9F\xB2ZJϬ7R\xD1\xCC ,\x87:\xD6'\xEA\x814\xA9U%\x8FHh\xAF\x83<I\xE1\xD5\xF9\xD9˟\xEC&6\x8B\xF3\xCBE"B[ d\xC2D-γ\xC5\xC7\xE0O\xCBU,D\xF0\xE3r\x95\xA8\xA0\xA6oE\xDF\xFA\xE6\xF4mૃP\xB5>,\x9D^-]\xBC\xC7\xDE;\x84\xBA\xE0Sd\xA2\xE5J\x98$H!\xF8\xDE-?\x9F\xBF}\xF9\xB3t#&D\xA4\xC2\xD8\xAF\xB4\xFF\xA7(R\x8C4\xE1ԄJ\xC5=N\xB8\\xC9\xC8_\x80dl\xE9[G\xD2\x970#\xA3\xA0\xE0\xA6\xC4F \xCF8j\x81\x9D(\xD64j"\x90#\\x82\xC66\xD8-Wp2\xC15":aR\xDA$B)\x9C\x89p\x95\x88\xE2cSb\x93\x8Frn@92&XB!I\x991(\xE9\xC3\xD2*P\x97\x95\xC1k\xEC\xFDmN#IFF\x8ETͨD\x87Ή\xE7\xFDR\x80\x88\xEF\xED\xEC\xA7\xF3kS\xA0d\x9Fdnǒ8lo
+)\x9A\xC1\xE0\x8CV\xC19h\xCD\xD4*\xD2::\xD4\x9E\x83Խ\xAFG@\x85\xC00\xE9\xD8
+\xBB\xE6c7HE\xC1\xC8b\x92\x90$\xFD\xC1$2 n q\x99H&\x8C\xBC%]@C\x9C80f\xC4m\xD89\x9Ey@Q"\x8DĕC+\x81\xB4VO,&a\x8Bq\x8BIȝ"\x81\x8Ba\xCB\x8DF>\xDC$\xB6v\xC6լ\xD5,=\xDB50>/\xBDc\xE9\x93\xDE,\x8D%\xE9\xC1;P6\xE9\x85\xB8\x9FM\xC8g\xB5+W/A%Ȧ\x9A\xB4\x93(\x93#+\x88\xA4~K\xDF\x82\Q\xBF0\xC9-\xA4Q\xA4\x97\x98\x82(X\xDF\xBF6\xF8V\xB1\xFD)r#\xA9\xE1\xC3(\xE79\\x9E\xEA\xDFҷ\x9C\x8Bx\xCABd\xA2\xD9/EO\xAE 2\x8F\x81^e\x9D\x9Deׅ&\xE3&\xE7\xBCJ\xC1v\x9F9=G\xE2\x94T\x98\xC7o\xE0\xC7R\x99\xAF\xAF~B*\xF3\xED,\xEC-\xF085\xDC\xCF\xC9 \xC1\xFE\x80Lb\xE0ւ\xB3\xE9b\x85Ny\x9FC\x8D1ӏu\xB5\x93\xBC\xC1OW\xCA\xC2}\xDC\xD4[\xEE}x\xF5\xFE\xF7\xBA\x9A\xDB\xF7iW\xA6l\xBC!\xC1{\xF6\x89+\xE1\x80U\xDE\xE5|S\xB4ha"XQ\x9E7\xF8Ak\x9An)|\x8F1\xBA&\xAD\x96\xE4`=i\x97\xFB\x85\xCC\xF6\x98 \xECm\x81 i\x83,/=N\xDDl\xD3Γ\xA9\xB1\x95x\xFD\xCC#/A\xB2\xB3\xCBB\xB2F>\x80\xE6ʟĿ^\x9F->\xAE,\xA1\xBD\xA0\x83za\x97\xF7\xA2\xA5\xDCl\x8A\xABͪ\xCCYB\xF2(Rk\xA3L\xAB\xAB]z\x95\xBF@\xEA\xE0\xBAb,\xA5n \x99\x8F\x82W\x90\xAA\xBA\xBC\xCA\xF2\x8C!\xC0)vL@3\xBBm\xDE\xEB\xB4\xE4\xB9u\xBD\xBD\xDEui\xC7ֆxs\x8B\xE0M\xC7S\xD7MMJ/2\xD4&\xAEO\xFB5\xA3Ө\x8AF\x98\xE5\xF5\xBF\xDF0RZe\x81\xB68\x98\xA9\xA8\xF0ZSz`\xBA\xB9L\xD7\xC4\CE3.\x9B\xA2\xDE\xE6]s&\xB1\xE1\xC0\x8F\x8D$\xB2S\xAD
+1\xD5ۈEYR\xCCw_ٜ\xA1P\x8C\xE5\xB6$\xEF\xF4\xD7A\xBA\xF9\xE8\x8C.\xFE\xAC\x83\xB71x\xFF\xFFC\xB7;8\xCC\xF6Y\x8Fݿ>\xC77o\xB6\xCF\xE9\xE0\xDC\xF9\xB3
+\xB3\xF5&\xA2\xE0j\x81\xCDFr\x8E2\x88L\xE5!
+\xF27p\xBDPg|G\xE0ϸ\xDE\xF1\xA0\xCA14b\xEF
+\xE5[\x81l\x9B;5\xB9\xC3\xA4$-<p\xB8\xA4\x9B\xE1\xBB\xEA:%\xF9\x95b#\x82Ȓ\xB1\xF3\x9F\xBD~_\x97\x98Mj#\xF16\xE1(l\x8F\xDF\xD5{$\xE7`ۣ\xEB+\xB63\x90\x9D"\xA7T\xADT\x80\xF55SA\xC7\xD5q,\xBBH+C\xE9\x93,\xE7X\x87-\xC7¹h\xF5G)\xFAw[\x8A\x96\xB1
+#u\xD2iG\x938\\x8A\x96\xB1 \x9DM\xFEW\xA5h\xB8\xB7\x87%7*4֜$\xF9\xB1$V\x9F\xA5\x8A\x90C=\xA8>\xB3Y\xAA/[\xAA)[\xAA>;\xAA>\x{1D053E}\xDD0\xDBC0\x9A7\xAE>;\xAE>;\xAE>+\xAE>\xAB\xDF_\xF5Y \xE9\xEC)\xA9PP\x8FSx,\xF9\xFA\xEA'\xA4"\xDF\xCE\xC2\xDE\x8F\xD4\xC3l\xFDyR\xB7\xE1\x94 \xE1f\xE7\xD3\xFAG\x99\xA7-!K\x99?\xF7|\xFEI\xBD~2\xDD\xFAU}\xC6S\x9C\xFDb\xEFS:z\xEC^P\xA5\xC9\xE3\xDC/\xCDen7\xF5\xAĔ\xEDG\xB8@*\xA5'$+endstream
+endobj
+408 0 obj <<
+/Length 2686
+/Filter /FlateDecode
+>>
+stream
+x\xDA\xED[Is\xDB\xC8\xBE\xEBW\xF0\x92
+Xe\xF6\xF4\x8E\xEEI\xA5*\xE3\xCCRq\x8D3\x95X9y|\x80IHD\x854 h\xD9\xFF>oip\x91HY\xBC\xE2\x83\xD0\xBA_\xBF\xFE\xDEү!9\xB9\x9E\xC8\xC9/2\x95\xCF//\xBE\xFB9L\xA2\x88^\xFB\xC9\xE5\xD5$ד\xDCAS\xE7\x93\xCB\xC5\xE4uVl\xA63cL\xB6Y6S\x9Dg\xB757\xDFNg:d\xE5
+:Cv+\xA6o._L\x94\xD1\xDA\xC9L\xCF\xFE\xEDǟ\xD2\xF4f\xF5\x87\x96ә\xCAZ\xEE\x9B\xAB\xD5\xF78s\xC7M_\xFEty\xF1Dž\x82\xAA\x9C\xA8\x89"(\xE0J\xE6"3\x99\xAF/^\xBF\x91\x93\xBC{1\x91\xC2\xC40\xB9\xA5\x91k\xF83|\xB2\x9A\xBC\xBA\xF8\xD71\xAF\xCC$WJH\xAD\xA2\xC0\xF3\xE5=
+\x88\xCA\xC7g[\xA7\x84\xCE\xFD\x89\xF90\xC17#Xp\xDA\xEB\xEDHI\x830>>L!\xD2b\xE7\x98L\x82\xF4L\xF7"\xE6R\x91\xA2$V\xC0LV\x97?Mg.\x9A\xEC\xC7\xE9,HT\x95<f7\xF4,\xA9\xA7\xA6\xFA\x82\xEA\xD5k\xAA_C݇\xAC\x81ي\x95\xDDNg@iIϒ\x9Eݽ\x9E\x87\x86\xEC\xCC\xCBivȶ@P\x85\xACM\xCE\xE8*BP9\x85R\xB4\xB6\xDCZqk\x81\xB0IDR\x93h+\xA1L̮P\xF89\x8EC\xA1-\xB9@\xFD\x91ߩ4\xF6\xB8\xE2֊[\xA9\xF3\x96;+n\xD5ܺF\xF5\xD3(\ex\x82a\xA05\xE7\xE2\xBF܉\xDEW\x86L\x9C\x97\x92'\xFE\x81\xCEK?hprq'}@]\xC2N=\x9DC"\xED(\xD8\xF8H\x88\x92m\xD19\x86\xD5\xD2<h\xC1\x84\xE0\xE9\xCAQ\x9E\x80\xCEw?\x83S\xDC\xF3\xA4\x94yD_L\xEC+\x8F@\x87c
+8\xCEg|\xCA+\xF9@D\x9F\xDE\xF3j-\xC0nGA\xF0t=\xCA\xC2(&\x86\x928/\xE5\xE1\x9D\x89\xE0w\xF6\x97\x8E+\xE8x\x80\xFA;\xAAc\xA0+\xBB\xDB&;\xAF\xB6\x{17CADA}\x94>EȪ\xEBz\xAA\xB2\xA2۶\xE5\xE3Ӡ\xCE\x91;FpbE\xAD\x9F*\xB8\x8F\xCF~\x84\xE0\x9E\xCE\xC2Np\xA3p $ufF9\x81\x81\xCE\xFB+C\xFE\xD45\xDE\xF1ӱ\xB6+[\xEE\xEEڢެ\x8A\xAEL\xC3\xD2\xDA1\xF4kCߺ\xA1O\xD4\xE5*\x8Di\xDAu\xD1\xF1(\xE2\xFA\x88/\xA6\x9FӅޝ\x9E'R\x82\x91o\xAF\x93\xFE\xFD\xCB\xC5\xE4\xF5\xCC[\x95\xFD\xF2\xCF\xFF\xF0l\xA6\x98'\x8E\x8F\xB2:0\xE9\xF1\xD6H\x{71E6CB97}3\xFA|A 0\xAB\x92i nE}\xBD-\xAE\xCBg\x88\xA8\xCDn\xDAj]\xB4\xD5\xEA\xBF\xADj\\xB4+\xEB\xC5T\xF17v~q\xEDQ\xF3xSz\xDBu\xD9V\xF3"Q\x9D7\xEB\x9BmW`bj#\xF0\xC7E\x9D\xFD\xA3\xE3W7m\xC3QY\xB5 \xA0=<\xED@,uUR\xABۑ\uZ~U\xD5\xE5\xA9\xCDU<\xA3l\xAF\x8A9\xB0k!\xAC\xBEB6\xB1\x82\x9F
+V\xF557\x90@\x91^U\xAC\xD4M\xBD\xEFϑӷ\xABr\xBDI/\x91\xEB~\x97\x80O\xC0\xC4\xC1\xCCA\xE7n\xFEn\xA9\xBAA \xE3ݒM\xB7,\xDB\xAD\xC4\xF7\x91B\xE9\xF2\xFD
+ \xE2H(\xA4\xEF%\xB7"h\x8C%Р\xA7\x97 \xB7\xBA%)#\xBC\xAEҌu\xB3\xE9H\x9E\xF8i$\xC8\xA4\xDB\xE21\xB7U\xB7\xE47/\x8BnU\xBC\xA7@\xBD\\x96\xFD\xECz\xAF\x83\xC9j\xA0\xBB\xDA\xA7\xC1\x9B\xCB;F\xF7\xDFJ\xA0%\xE9\xC3\xD5w\xD4\xF9N\xD63&\xDF\xDD3\xBF\xA7o
+\xEE\xF2\x91\xA1l\xAB\xB0\xA9W\xA0Z\xCFQW_B\xE5W\xEE#˄Qǖ\xC9\xA5E\x98M{\xB8\xE9ܟt\xD0M\xE8\x82z[l\xCAw\xF5\xEBn\xF1\xF7m\x9ATnoX)\xE2z@\x89\x923\xEBW\xDAY\xE6&\x8D m\x87\xCC,\xF9Ĵjs\xC5C\xF6.q˖ZM)\xC5u\xF8\xCE\x99<5\xA74.\xED\x8F\xFD\xAE6\x91~\xEC7\xE8)[\x80if\xE1} \x8Aĝ\xCD\x97\xC4:V\xC0\x93-Kx\xB0\xC0\x9E\x9B\xA2\xED6'G\xF7Δ\xE68Elm\xD9/{\x8C\xFA\x82\xBB\x93}7i4\x9B\xF2[\x8Br\xBE*Z\xF6>\xA7\xCDT{\x99\x95l\xD3 hB$\xB5\xA4\xB497\xE6E̓\xD2\xC9i\xC6\xFBr\xBEen`L\x95\x86(U\xA9vk\xF4v5\xB3p\xD7"\xA5\xC2ޫf\x95>q&k\xC6 \\x9C\xCE\xDE豇a\x81Au\xD3qOҧ\x80\xFAT.\xEE\xDA(\xF1ބ\xFAϧ\xB5\xFBw\xA9\xF2\xACkf\x97\xDC)W\xB4\xBB-2\xE3)\xB4H>|
+\xF7\xDF$\xDEG/\xA4\x86\xAFT\xD5UW\xAB6\x9B\xEA\xBA\xEEa\xFE\x8C;\xDBtM5\xC7E\x96U\xB3.\xBB\xF6(Ēݎ\xC1\xC8\xFC\x94\xDBAw\xC6\x92\xA3\x86\x80Z&\x97_\xD56\xEC~\xF0\xE9\x9D\xFC\x8Al\x93\x87\xF4\xC1I\xAF\x8D\xFExuqO\xE5m\xFF@\xBBQn>\xA7\xE8\xD8\xF4\x9BK<\xEB\xCBv\xFD\x97\xBB.\x8F\xB72Q1\x8D\xFF\xF5+endstream
+endobj
+332 0 obj <<
+/Type /ObjStm
+/N 100
+/First 871
+/Length 1545
+/Filter /FlateDecode
+>>
+stream
+xڭXmo7\xFE~\xBF\xC2\xE1\x8B\xD73\x8F\xED*B
+\xA0\xB4HEB\x84Jm#T\xE1p\x8B\x92\xA3\xA1\xFF\xBE\xCF8!\xDC].\xF5r\xA9\x94\x8B\xC7\xDEg\xC7\xF3>\xF6FJ.\xB8H\xD9Ŋ\xA1\xB8lCu\x84_\xE4\xE0(\xD9H\x8E\xAA\x8D\xEC\xD8`\x8E\xA5a#'S\x9DEVp\xB1yv\xD2p\xC5I\xC3U\x97\x83K\xA9`$\x97*\xC6P\x9CF\x9B'\x973\xA4\x88ѕ\xCA\xB3\xA3\xC0`\x88\x87\xD4&\xE0Q \x89\x90\x89\x8A\xEC\x88و\xC2\xC0"\x8Eb'
+\xAC
+tp\xCE3[%Q[\xE7@$SV\x8C+\xA2\x82\xC8X\xD1+X)\xC1\j\x99\xEF\x8C0g\xD8&&m,b>0"\x99\xA1\xF1ܴ+(ꄷ\xEA\xA0\xC8\xE1\xDCa3\xED\xB1~_\x8DNyp\x817\xCFƥ\xC7\xCD4k\xEE\x8Ai\xCD]d\xAD\xCF\xEF
+\xCE
+\xBB\xAC\xD5[Q\xEC\xE2ĕ\xF3\x82Sc\x87 \xAE\xB5\xF4q\xE2\xA5\x8FcD\xA7N\xD0Q\xAC!\xF5q!z\xEAo\xAB5z\xCD\xDA\xC7\xF1L\xD4\xC7e\xF1Y\xFAfV\xA8\x81\xFC\xEE\xE2,\xB8I\xFAꦤ^\xFAꦈR\x96\xFA8)\x88*\xE9{W\xAC\xB5\x84 \xB8\xA8\x9E&D\x8E\xBE\xA4\x8E\xBAU}\xB5\xA3\x99b\xEF \x83s\xAA\xD7\xEE\xCF+\xBF\xA6\xBB\xE6IEtvUD'\xC0p\xB9]\xD7:\xE8z\xA3\\xB7\xE2F\x9F\xDC4\xE9\xF7v\xBA\xAF\xB3ܲb\xE6{\xF6\xC9\x9AH\xF1Z\xE8\xDD\xFDrW\x83ĝ\xC6\xD1M\x83$dI\x82K\xB5\x9D\xA8]\x85<\xE3&$H\xB5y\xDDs[\xCB\xDA\xC3a\xEB\x91\xC3\xF1\xF0\xDB\xCBg\xF6{\xF0~\xB5\xFA\xFC\xD30\^^\xFA7g\xE3\xE7\xF9W?\x9E\xBF~\xEF\x9F?(\xAAV\xC0y\x975OvW\xA3\xEAS\xBB\xA1Y\x97\xBD\xE4\xBAx\xF3n٤z>?[\xFEeNz\xB8\xD9\xDEs\x9C\x990\xEB8C\xC7\xDC\xC5%$z`\xED\xE3
+\x8A\x91R\xA7\xD9k\xE4>.\xA1i\xE9\xE3h\xD7z\x87űo\x97\xC4\xD5\xE7]g\xE8[\xB8\xE0\xE3u \xDE\xD8\xD5f\xB7qW\xAE\xD2\xE7'\x9ApE\xEA\xF3\xC3%W\x95>,\x9C*\xFA\xDE\xE0JH\xF1~\xB4p\xE6\xDD\xED}\x97}ԗ\xCF\xDAVݾq}/\x8C\xB5p\xFD\xB1vM\xD8j/\xE9\xE855ݪ\x925JV\xBEWu\g+z\xB5\xE2d\x9Ep\x86K\xA5\x8A\xEB*CL\xBAW\xFA4_\xBD\xBF\xCF?\\xF8\xD3\xF1ӰU\x81\xAAL\xAA@\xB0\xBB{\xE36,%w]\xBA\xB7q\x82̈}g\x94b\xEA\xE2o\x9F\x8Dz\xB8\x88:\x9A\xA5\xAFW\x9C\xF33\xF7q\xB8\xEC<\xF8n\xE3PJ\xAEweƏ'\xC0d\xD3\xDA\xC9b\xCF4\x91p\xEBH&A\xEF\x97&\xF6\xF5\xEC^i\x82\xE6\xAC(\xCDG\xD8
+K
+\xAE)\xB6\xAF|\xBEp\xD9+M\xC6\xD3\xD5\xFC\xEF\xC5\xF6!\xEE\xB3o~rdf\x97ܰ\xF3\x8B\xD3-ڌ\xE6\xD8ǡ\xCD\xF0\x8E\xE8\xDA\xC6Y\xF4g\xE9\xEF\xABv\xF0\xCA}=}\xA1P\xEA\xE34\xA2D\xF5ah\xA5\xACJ\xFE \xA7\x8E[
+endstream
+endobj
+440 0 obj <<
+/Length 3393
+/Filter /FlateDecode
+>>
+stream
+x\xDA\xED[Yo\xE3F~\xF7\xAF\xB0\x8Cz\xFA>&X`s#A\x82dw\xFC\xB0\xC0d8m+\x91(\x87\xA2\xC63\xF9\xF5[II\xB6h\x9Bf\x8E\x87̓\xD8\xBB\xAB\xBB\xAB\xAA\xAB\xEB+\xB6\xE4\xE4r"'_\x9F\xC9[\xE9g\xE7g/\xBFRv\x92D\xF2\xDAO\xCE/&ыd\xED$8\xA8\xD2ar\xBE\x98\xBC\xC9~\x92*Lߞ\xDBu{\xF9U<\xE8\x829\xF5\xD4v\xBD\xD9\xD6ә1&\xCB\xCBrS\xE7\xF5rSn\xB1\xF3d\xC6\xEDf
+);n}>\x8D&\xDBLg:\x98\xACڕ\x9Cy\xFD\xD9\xF7\xDF\xE9\xE6u>\xD5!{?\xD51+\xF8\xC5G\xCCovX\xB0YY\xAE\xFE9\xC7\xFA\xF7S粜k\x94p\xDChSq\xC5\xD5\xF2\xF2\xAA\xA8\xC4tf\xB5\xCD>\xBD\xA8\x8B\x8A\xDF\xEF\xCA\xEB\xA9\xCA\xF29\x8E\xF4˲\xBC\xE4\xD6\xF5U3\xE0o\xCB\xEBk\xC8\xC1\xDC8a\xA1\xC3
+ޫ\xEC\xBEr\xB0b\xBE\x9D\xA7\xCD\xEA\xCD\x9B]@\x9F\xCDj\xA3#\x94%ϔ\xC95\x9C\xA8\xAF\xF2\x86oW\xCDr`J\xE39%\xE7U\x91\xD78#c,py\xC1\xB5\xC0\xBEWGBj\xD3/\xCF\xCF~=S\x90\x955\xF1QD\xA5'>%\x9C\x99\xCC\xD7go\xDE\xCA\xC9\xDE};\x91¤8\xB9\xA1\x96k\xF8ab\x98\xAC&\xAF\xCF\xFE}L\xC1+3 R\xC3"\xD4}\xB8\xBF\xBCC!\xE8\xC7\xF4\xB6N \xFC\x89\xFENz3b
+N{a\xBD\xC9\xE6\xA4:\xC6\xFB)$\xACIЮ5\xC0E\x91\x82T\xB4\x950>+g\x84\xDDa\xA1>d`#@8\xD956\x8CX\xC2V\x92\xC4UD'\xB1\x97\xF2\xDBc\xB2\xC2$e.\x9C\xA0\x91\xF0\xC4+\x94\x95+#\xA9dL!{*"Y\xF9\xC0!@\xE53\xB4y\xB0T\xF0;\xEC\xDB\xE6zB8\xD8\xE6\xABS\x96\xDC0\xAA5\xD3?7M쑱j\xDF\xB7TP4\xFF\xC0\xFB\x92''\x8A\xD1do\xFB\xE5\xE8\xA2p2\x8EpJ\x90B\x90\xE1\x89N\xC9#z?씌\x98B\xA7\x8CC\xF9pҫ\x8Fw\x9Dzo
+V5\xAE79\xA7Qg\x97EYT\xECPbq\xCD\xFA\x85\x9E\xEE\xAAi\xB1۲k\xD9\xFAj\xB9\xE5\xDC|S\xEE\xFDފ=j\xA8\xBE!\xBD\xFA\xA5iu\xB3\xAC\xAF8\xC7}ہ\\xF1\x90}s\xC1/\xF7\x9E=\xC5|\xB9h\x86&W\xD2\xE2C1\xDFՍ\xEE/\xEB\xDBĿ\xCF\xEBU\xFE\xEEE\xBF{\xDD
+`ሚ\xE7%g
+ \x80\xB7Yp%y\xED\x98\xD96\xBE\xFF|\x89̘s3Zv8Z6Vo߭W\xB7t3AH\x93\x99Y\xEB\x81 \xB1\x9E ,p-H\x80\x8Bu\xF2\xC0b+\xCC/\x80\xF2\xB2*\xD0<d4\xCCG\xAE\x87\xC4\xC9#\xF9\xAD{\xBEY\xAFTM24Σ9\xC2dW\x9Ez\xB9ݬέ\x96e\xB1\xE5\xEC\xB2\xE4\x94Xívռ\xC9\xCFID٢)6\xCArԜ\xC5\xF3\xF2X\xDA\xDE\xDD\xD2\xD7\xC8`\xC4<p\xACN-\xEA\xF9\xB3\xE7\xA8?p\x92S2
+\xE2\x91\xC0̭\xF2\x9AdB8)߶8
+\x8B\x9DZ\x90\xB5\x97X\x83\x9AF\xBD6$ƃI\xB3\xA7\x96r\x8F=\xF76\xD0\xEC\x88\xC1GtlÑ\x93\xFD/6ի[h\xFB\xA1w\xEA\x8D8\xDAG\xE8\xFB\xB5|\xF1%Of\xBBY5\xFA\xCC/\xD6E}\xD5\xCC\xE9\x93\xFD\x9A\xEE\x99\xD2)h?dJ\x9B\xEA.^+
+\xFA@\xDF5\x9E\x8Cb!_RLc`\xEC\xE15\x82\xF3솠\xF8\xD5,\xAF\xEF\xD4T\xD8\x8D\xFC̑\xEC"\x83\8\xC6*Np\xF4ȐW\xB3[
+ɒ\x93\x92\x93KDA\xE1k \xF8h\x8C\x94\xC1\xD7f\x9A\x9F$8%B\x9C\xE0 (\x8A\x90\xA7\xD7\xD5\xE0&K6{\xD1\xEB\xE0\xD9\x84+L\xE2aJ!\xDB'
+3\xD0q\xEAX6MA\xB1\xD3N(\x99\xFDsG\xDCU\xAA\xC0\xD2\xD9FN\xBB&\xD1h
+e@~\xDDBg\xE6=\xE4\x91\xCF 28\x81 ;<\x8BH \xF56\xE4?\xC3sM5k\xCA]by\xB04\xBFN\x9D
+\x8E\x98Z\xCDC\x8B\xAE:\xC0\x908J\xA2\x9A\x96\x8E\xE3PZq\xA9\xA9\xBC\xE1\xCA%\x97J.]\xA2\xFAiB-\x86;\xE6\x94\xE6\x9C\xFChze\xBC'\xE2a}A\x9BQ\xF2J\xA2_\xFEA
+\xD7:\xC3\xCF0\xA6\x950\xE2p\xB7E.\xE8o\xD3#\xB5 Iލ\xCE1c)\x81%y:\x85qP\xCC\xC1f-B\xEA\xC2b\xE8@\x90.\x90\xE0ɺX
+\xA9(\x80p\xB4%]V\x9D\xC0d\xD6\w\xD0\xDFQ\xD0C\xC4d\xAC7\x98lK$q\xB6Y\x8A͕jb*\xFBw\x9B\xAEIj\xB4\xC8J\xD67g\xA0S\xEBS\xC2Y}\x80\x81\xF2\xAE\xD5cx\xCE\xE9\xC9f\x88\xCDe\xAB\xE5'Wil8\xA0#\xE9gd\xABE\x98:\x92RG
+(i\x97\xEESJ@[z\\xDCd0\x89~\xA5\x{1109B8}WJ8$^s0\xA4潖s\xA9\xEAb)4\xECr\xA0\xC0f \xB1
+\x98v5\xC8P`q"ɁZ/(_\xF43\xC5\x8AM\xA3b\x93\x83I\xDCe
+\x93\x9C4\xE4\xABxc\xB4\x9AO6\xD8n\xD7\\xCA9)\xFE5\xD7b8\xC9ɫ\xA3\x928*\xA9\xA3&T2\xED\xBB&y\xCB\xC9'\xFD,3\xE0.\x8D\xB3m)\xF40,%\xE0\xBD\xCA7\xD17\xB2V\xE4\x9C`Rslq\x8B\xC1r\x8D\x9C\xF2\xC1\xB197d\xC0\xD4\\xDA\x94(\xF8\xC9\xC00x\xA9\xA3͞c\xF0\xD2e\x9F\xC2aI\x96\xCDQ\xB0y\xE7\x94\xDF\xD0\x83O\xDEa[\x96\xF2FP\x832\xAD\x9D8\x8E;+\x8C;\xFC\x84 O+*\x9Ec\x95v\x9Am\xBF$AI6\xE2Rq\xECP"#0\xA9\xB9\x9D1\xA5\xDB`3\xB8{\xFF"\xA2\x89
+\xE2\x9E\xDDL\x8DbK\xF4\xAD$\x91'O\x82\xFB\x8EZ\xA9@\xC1B\x8F\xFB@\x83\xC6`]R\xBDJ\xA5\x8Djeͽ\xB2\x90\xC2J5NI\xF4[]D<v\xEF \x82\xAAd6\x90w\xA7\xE4`b\x95\xC9\xF8Qx:\x89vR \xC6\xC1\xAB\xA1$\xFA\xC5 \xAD0J
+:\xFC\xC0\xDE\xECq;\xE4\x83\x8A\x97\xFE\xE4\xC6f\x88dL\xD2B\xDE\xC2}\x88)\x83I\xF42\xC5$+\xE0\x88\xEF\x98b\xE10$vD2ޖ?_\xB1\xD3\xE6țR\xFCY+\x8C\x90a\L\xA2\x9Fi\xC1\x89\xA4\xC2}F2\xFE[\xD1'\xE1\x93HC
+1=1\x8E\xF6p\xE7\x87\xC3hO\x9F@'ġLx\xF0{.\xCD9\xA1\xAC\xEB0ԉh+\x86\xC1\x97\x97%~\xCD\xC0\xA0\xEB\xE3ß&\xDD(\xA9)\xA4y\xB2\xD8\xEE\xFD\xB9=}
+\x9D\xE0F\xF1\x818\xA9\xBDc\x86\x92\xE87\xE0pi\xED\xFF>1\xFCi$\xB0T\x8Fr\xB6\x93\xE8&\xF8\x8E\xE1 \xFC\xF5w\xF8\xF3\xEA\x85u\xA3\xCE\xF3\xC1$\xFA\xE5n\xBBN\xE1\xEF\xF0\xE7\xFFy\xF8S\xC7(R\xE5\x99&ѫ\x94:)\xDB@\xDF_\xFE\xD4! \xA7Gń\x93\xE0\xBBt\x87Z\xB4\xF0@A\xF01>\xFE.\xAA\xE3D\xD4\xDD\xC1\xF8]\xD2\xE2xNBk Uj\x8A\xF9\xE7(6\xAAp\xFE3\xB2\x91t\x95\xCFIF1\xFDL\xCA\xDBqLH\xA2_\xB3\x80\x99I\xFE\xD91\xED\xA5\xE1y2\x81v\xE0\xE6*3*\xE49\x98D\xBF\x9C\x81*\xF7\x97\xC7w\xB4UQ\xB1\xC7\xC1$\xFA\x99b\xADp]\xCC\xEB\xEE\xD1\xE1\xFA\xC5\xDF\xE9\xE0x\xE2\xEE7\xC9\xD0\xFAd\xA3\x97\xC9F=.\x886\x98D?\x93\x8D\xF2 \x88\xF6\xE7/\xB4\xC64\x8D\x80\xC1Z'\x98|"~D\xEF\x87a\xF0\x88)trʇ\xD3\xFFR\xF3\xBE\xA8\x9B\x86_\xB8\xBDh
+\xEE\x95\xF0\xE8\x88j\x97}\xBE)\xA7\x80\xDE㣨\xB6\xCF\x80+endstream
+endobj
+474 0 obj <<
+/Length 2291
+/Filter /FlateDecode
+>>
+stream
+xڽZKs\xE36\xBE\xFBW\xB0\xB2\xAAjD H[\xB5\x87Lmf7\xA9Lvv\xE3\xC3TM\xE6@\x8B\xB0\xCD
+I\x8D\xED\xFD\xF5\xDB\x80e\xC9٥=\x98x5\x80\xEE\xC6\xD7@\x8E\x83\xDB \xFEq\xBB\xF2\xED\xD5\xC5\xE5;\x98\xC8d2\xAEn\x82\y
+M\x99We\xF0)\xBC\xBA\xB3\x8Be\x92g\xE1\xAAkR\x87_\xF1c\xFB\xD1\xF6\xDC]
+X\xA6\xE1u1ؒ\xBB\x80\x90\xBA~\xFA\xF5\xED\xFB\x9F\xDFp\xDFйr\xB3^/\x962\xBB~䞢\xAE\x99|\xF4;Ֆ7\xA9GіL\xDD9\xEC=T]\xEBv\xEDn\x98w\xE2\x9EM\x8BDc\xB5a=\xDBY\x98I\x93\xC5竟@K!"\x93\xA6,\xAF\x93\xF7+.V]o\xA3\xC5R\x89$|\xDF
+#w\xE2\xF6X\xEBXi
+\xA8§Z5\xF7\xAC\x8B~Rk\xC7\xCD\xF5\xC0\xBE\xA5u\xB3\x8A\xDE\xFAm\xE7Z/\xB9\xBB\xA2ޱs\xD4\v\x8F\xADҮ\xEA\xA2nP_d\xED\xF0\x93$\xB4l4\xF0W\x8C<\xB0*Z\xAE\{֑?\xD8ՆXA\xEAʑ|\xFC\xF0a\xA1\x930:\xB4\xD1?m\xEF\xE6Vn\x8F\xFBi\xEEI±/ڡ.\x9E\xAC˰\x80\x8AW\xB7~\x8B\x85\xAA\xED_q\xB7 ̗\xEF\x84ځ\xB2P\x91Q
+8\xD1Q\x9A \xE6\xA6\xE5{svя\xB5\x{2256429}+vGX\x95\xD7\xE9\x8Cpx\x85gqW\xB4\xB7Ⱥr\xE7B]\xB3\xAE\xB9\xCE}\x9A\xC5\xC1\xD4U\xFAMm\x80V\xF5۽\xC1\xCA-9\xDCu\x9B\xBA\xE4\xBE\xE90\xB0a&r\xE0\xA1/Vd\x99\xD8Uw\xED\xED\xA1\xC3h\x8A\x87\xAAA\x967
+,\x94
+\xD0I7.\xF0\xC8\xD7d\xA1\x96m7re\xEC7\xAE\xEB\xBE\xEF\A9\x95!\xA8"\xFD\x8E%
+\xDCC\xB8\x84\xA4\x83=7Ⱥi\xD5K\x85\xF5\xBB¡~b\x83\xB0\xE5z3ζ3g`\xB0\xC5!h\xA1\xB1\xA8\x86\xC2\xEF\xA1J\x85\xD0: \x96\\xEBb\xE5\x87M\xF6Q\xBB\xD3:\xA8\xF5C\xF4\xFC\x96\xA6\xA50\x91T\xC9\xE9\xF0\xF3\xAC\xDE\xDA\xD6\xF6E\xED\xECf\xB1\xB5CR\xB1\xC7c+\xB0́H\xAF&\xE8*;.\xC9Jp\xC8>T\x83\xBBFn\x9D\xBD)6\xB5\xA3\x81Mw\xA1\x99\xB1\\xBEa=\xD6\x9D\xE8Y\xC9\xDD\xE8F\xD7\xDCD\x8A{\x8Ao\xA2\xE8\x9CJ\x9FN}\x844\x82M\xEEa\xB3\x83\xA3an9h\x8C&\xFD\xE4\xD7EX\x8D紜\x89\xD9\xC9O\xF0\xEE-ۍ\xEC\xF3\x898\xAF\x9C)\xA0\xBC\xAD\xBB\xEB\xA2>\xB4\xEAv
+\xA6w\xBE\x97\xDCS\xCE\xEE\xC9\xEF\xCCF\xFD_\xF400^쪲/\xD5\xC4\xD9D\xA32s&/\xCB\xF1o\xFF\xFA\xFB<\x80\xFA\xAFn\xB8>\xDEQ\xBE`\x93\xE7DNQ\x87\xC7!\xFEm\xC0[?rk\x9B\xB6\xE0\xF0\x94\xD8'4\xC8\xEB=xHt\x97_\xAA\xD6B\xF6\xF63ş{\x8ER\x9E\x87\x89!\x8C\x91
++\xC4\xC8\xDDVNǜ\x84]\x8EUc\xC1\x82e&\xC3k\x8Ac*
+\xE7;b\x9F\xFF\xE4\x84@\x82I6\xD7\xC3X\xC0\xBA\xBBk\x95֩\xAE-+\x88\xF9DH\xE9+̞=-\xC7\xE9\xC2/\x8C\x93r[A\xC8\xF14\xFAQS\xDDW\x9E~'k\xC49\xE8L\x9D>l9\xDD>\xFER\x81su\xC4Â\x92qN\xD0Q\xD6uN\x8F\xE9u4\xEC)i8\xA7T.z\xC3>\xE3N\xDB\xFC@\xF1Ń\xFC\xCC,\xC3\xE5\xB18\xF2u\x91\xE2Uo\xE3\xFD\xA6sO.\xC5u\xEDj<+\xBBL\xEF{\xF4W&\x9A\xFA\xAC.\xAAk\xA7\xFC&\x8D'H ]\xEF\xC0\xFCR}7\xF6A9\xEF\xFBj\xADˣ\x8Aq\xEF\x9Ec[\xB7]n\x91\xC2߰\xF0\xEA|,\xE3\xF2\xF6\xB2o=̽O\xF8\xB6\x81:\x9F\xDC>'.xv|3Gy\xD0<\x9FQf<[\xFC$5ں\xE0\xA4\x95\xE1.z3̞\xF3\xC1\xE0\x89\xAB\xF3\xEF\x84\xB3*\xEA\xEF!w\xBCm\x9BSE{\x81\xB3Ʈ\xE2\xBF\xEA 5\xE91\x8D=\xA7\x84C\xE7\xAFM\xF8\xE4\xE1\xEED.\xD4@\xB0\x83ԁC2·\xAE}\xA2\xBA=t\xB9\xD9B\x93\xD3x:\x86HgG.\xA7v/G\xFFcw\x9F\x86\x82\xAEK\xA7\xE9\xCD\xE6\xE0\xBB\xC2\xF6\x89\xC5?.}\xF8\xC5K\xF0\xB7M\x9Dό\x8C\xF1gu\xFF;\xB4\xEEj\xA1\xC1\x82\xFB\xE6\x9C{ \xECY\x85i8+\x99HW\xABLdϭ\xC0\xF3\xE3'+\xE4\xF2[f+ \x91yv`~*y\xA9\xCC"\x95\xA9W\xEA\x814\x99h@\xB0z~C\x9Be\xE2\xD4%\xE87\x85Dyd\xF2X\x90\xB5\x89(\xC9rGD:v\xFA\x97\xC52\x8D0'A攧\xFCR\x83?
+`\xA1Ö[_\xB9e\xB9\xD5s\xB0\x98\xE1\xD3\xFEB\xEB\xF0\xED\x9Fm\xB0\x91$S\x9AR4 K\xE9a<\x8Bq\xA1\x8D\xD0w\xF9\xB4\xB9\xE5K\x80]9\xF9\x81\xDF\xE28a\xAA\xF7i\x94$\x99\xA7\xBB\x94q
+W\x94e\x96\x85
+}!\xD752
+\xF1qS\xC6a\xC5>FJJM\xB1\xA1Pę\xA2\xC1\x98H\x8D@\x96pz\x87\xB2\x84\xE0-\xE0\xBC\xF0aG\xC4[X\x80\x98\xB9\x89Q\x9D\xC68Kd\x9Aԓ\xDC+\xF1u\xA1\xC4\xE4\xCDx\x96\xCB\xC9K\xE5\xF4\xEB|\x999y1\xA8K\xFA>\xD0w\x{DFD0}\x97\x92
+2\x9A\xA7 \x80\xDA\xE4\xE1'+endstream
+endobj
+484 0 obj <<
+/Length 3970
+/Filter /FlateDecode
+>>
+stream
+xڽ]o\xDC6\xF2ݿb\x81{\xA8Ċ(Q\xD57\xE7\xDA\xE9\xC5m\xDA\xC5id\x89\xBB\xABF+m%m\xE7\xD7\xDF|Q\xB6\x9C65p\xBB$\x87\xC3!\xE7\x83\xC3\xE1P\xC1f\xB7 6\xAF\xCE)_\\x9F=\xA9\x92\x8DR~\xC7\xE1\xE6z\xBBI\xC3Mg~\xA6\x9B\xEBr\xF3\xDES~\xEC\xA7\xE7J\x85\xB1\xF7\xEF\xB69\x8F\x94\xF7\xFFl\xD7Wм\x88\xD2\xD8\xDBv\xED\x81k\xEF^\\xBD\xE1\xDA\xD0r\xF9\xDDO\xD7\xE7\xBF_\xFF\xF0\xFC\xA5\xD9+\x9AL5\x990 \xBDL\xA3J[s{\xDBv\x87|\x90\xF1-\x97\xB8\xAA\xB2q\xC8J\x90\xFD\xF3\x8B8\xCC&,\xB7\xAAao\xB9R\xE7\xCD\xEE\x94\xEF,\xCFp:W`\x80,Jd\x91\xB8"A2W4i\x94y\xB6)\xDCl`rP\xD9u\xF9q_=\xB7\x8E@\xAEc\xCC\xC2\xF6=%\xF0
+\xCA\xE2'+-\x8FR#I \xED~\x82\xDDVu\xCD\xC0\xCE\xE6ԝ\xDCS\x98p\xC8l\x84\xB1\x81\x9A\xC3:S\x84Jg\x9B%\x8B\xF5j\x90\xB2\xE1R\xEC9\xAF\xB9\x89\x9B
+\x98O\x83\xD8\xFB l\xBE\xEBq%Z1\xFB\xA9'\x94w\x8F\x9Dt\xEC
+\xAA\x84^^wE]\xB9f\x81
+\xED\xA5\xD1\xC5!?:D\xB7\xAC\xA1\xB3\xE5\xB35n\x84\xED tlC-\xC7B\xBC\xB6GFG*GҮ\xED\x90\x86++5\x8A\xE1j(>\x81^\xD9]-w\xE7d\x91B\xBBqQ7o+:\xBCSV +};\xA3\x8EX/\xC1\xCC5:"\x8BGv\xE7\xC3+\x97\xB6\xB6\x89&{\xF1\xA4\x89\x857\x85\xD0D:[.'\xCB\xC3[Q\x91\xC5\xD1~#\xAAsg+\xE7\xCD,\xCBc\xC6Pǰ\xBCͽP\xAF\xEE\xF7C\x90-\x9E׆cIDqю-\xD6̣#'n\xC5\xC0\x8C\xC7
+\xC2\xF96\xD3\xEF\x9F\xF1\xF2\xF6|\x9A\x97`\xA6Ε\xBAr\xE4\xC8`\x9D\xD39\xC82\x97\xB5H\xB6Oy*\xD0;\x85Z\xBCS\xA8\xA7$[\xB5\x85\x9B-\xF7\x91o\x85.\x8B8\xCC\xE0Pk\xA62l\x92\xAF\xE4\xE0\xE4$ַ\xA9\xD9rg\x91\xAF\x88\xCAwF\x8A[(R\xA7\x95q\xE5F\xCB8\x98G\x8DC\xFC5\x96\xD9\xE3\xE9R\xA1B\xDEu\xA3륦 \xE6;λ\xE92l\xD21h\x9B\xC8$k\xA1b0\x9E"\xC0\xE1 \xD3=\x98\xCE\xDA/v\x8B\x91D\x81L\xC1\x8Ax,\xE1L\xF2T\xB4\x88\xD0$.\x9A\x94\xBC
+\x82h\xC7"\x80MA\x98\x9F\xA9+10\xB90s\x87\xA0\x91\xBB+\x8Ec\xF4\xCEQ~\xCC\xE390\x8C\xBD}\xB5\xA3[\xD6%؋gi(l\xE1\xFDr\x90\xF9\xA7k?\xB6\xDAA\xC6\xEA\xF1\x8F`8+\xD3hXS
+\xE7K3ڛ\x8A?fKa\x96\xFAZ%O1\xA6\xAF&\xF1К\x94\x8A\xC8\xF9EA\xE0\x87c\xEA\xE9\xC2"%\xB6X\xD8j\xB8\xE8Xq\xAB\xE5V\xC36\x81.$\xC9x3Ƽ5\xE7\xF1\xD6a`9\xB1z\x92 \xBE\x96 "\xD4\xF3m\xF91\x882\xCC?\xCD\xD4\xE8\xF8\xA5\xE7x?\x8A\x90\xE5\x8C\xD2\xC0Y\x84\xE6\x99\xD1.\x81\xFF\x90\xFEK\xFAo\xA9Þ$f9\x90ok\xDB\xE3\xEA\xBDNj)\xDB[D\xDB&UsA\xEF\x9E\xF4<\x82\xC0>\xE1}'҈\xB0\xE2\xDB\xC3\xD0\xFF\xEE\xFC\xF6\x822\xE7I\xBEJ\x94\xC3\xC0]\x94\xD2\xC5\x8B\x9A\x8B\x92\xCBC0\xDD\xEF_Е\xF6c\x90\xE2?\\x90B
+\xED?\\xFE\xC6\xE8\xBF\\x9E\xB0\x84\xC9\xE0\xBER\xC1\xDF\xFA)\x8C\x81l\x98M\x9F \x99'|\x82t\xF9\xF6\xEA\xD1O\x90_ \xF1U\xF6\xC1\xEB%\x82\xE7_ a[R&qIh/>*"y\xB3\xA3\xF1-\xE3\xE0Z\xB0\x8E\xEC?\xFE\x9D\x8Fl\xE1d\xF6\x89\x8DE\xC7]m\x83\xCF\xFF<\xCF\xD5H\xEF+7\xCA7rg\xC1.\xE5$\xAA\xE6\x97~h\xB7ǡ:T\x9Fs\x97\x85s\xA9\xDDN\xF9K\xBE\xB3\x94R\xE98\xE0P}\xB2\xE5\x85ˇff%\x83\xAB\xEF\x80Q\xE5\xB5 \xD4;{\xD3\xE5U\xC1M\xFB\xE7iJ\xAD\x823\xA5\xAF\x8C0\xA4깿hO\xAB\xA9\xA8\x9A\xEE"\xE0p%\xF5\x86Gd\xDE\xED\xECE_䔂@\xDF֢Z\xA4\x96n\xF5\xF8\xCDE3&\xBD0\xFD\xF5\x8C\xDFa1%\xDC\xEB\xE8[~\xD0l+?Kc\x85\xAF'Dz\xC1æ\x9E\x9A\xD0-\x8F\x95Ԟ\xA5\xBB\xE6X\xB5\xEEs\xA7Nz`+\xEAS)\xC9gL8s\xAD\xB3\xB0\x8A\xAA\xAEU\xFD\xE0\xAAW_\x80=XGn\xB2
+\xC1(\xEF\x9A\xFC++\xA3\xBA\xA8uwNo\xC1\xDC\xE0t֖\xE9*\xA2\x8E\xE9*\xAC\x90\x8Dj\x97\xAE\x92\x99\\xE2\xFA\xEF'\x8Et<=\xEFB}\x99;\xA2\x8F\xA1\\xEEH\xA7\x94;r\xAA{\xFC\xD7Y\xCA\xF3\xF1L\xD2\xEC\xCD\xF9\x8B\x99$\xE7"\xFD0\x93\xB4\x81\xB6\x9F\xC0\xB6\xB93\xB8< \x82Dk\xFFk\x82>t
+endstream
+endobj
+497 0 obj <<
+/Length 3831
+/Filter /FlateDecode
+>>
+stream
+x\xDA\xED\xCBn\xE38\xF2\xDE_a`.2\xB6-\x8B/Q\xEC['\x99\x99\xC5\xC0z\xB7s\x98E\xCFd[\x89\xD5#KI\xEEt\xE6\xEB\xB7\xA4_\xB1\xBB\xE3x\xB1\xC0{0%\xB2\xC8*V\xAB\x8AN\x83d\xF0\xF3\x9B\xE4D\xFD\xE7u2\x834\x8B3!\xD6\xC8\xD83\x98-\xDF|\xFA=\xCC\xE1\xDB/\x83$V.<\xD2\xC8%\xFCT\xAC2;\xA8\xDF\xFCcC*`0\xB1\xD5\xEA[x~\xF2\x83\x95/\x99\xAD\x8D\x88\xA5M\x8F\xCC7Rї\xB6`d\xEBT_\xC8\xE2\xA4Vq⾍\xC0\xD1Z'\xF7p&\x86\xAB\xBB7\xE3\x9F\xAC;\x9B\x88\xC1\xDD\xFD\xC0\x89X\xA5\x99ة\xC1\xDD|\xF0)\xFAa8J\x85\x88\xAE\x87#\xA7\xA2\x86ʚ\xCA/TT\xB6Pꨇ\xA1ZF\x87Y]
+3\xDDbk\x82\xD0,\xFA-1\xC9p$\x8C\x8Br+1\x9A\x8D\x98 \xE0h5\xD1)F\xF2mF\xACDj\x91{R\xDAW;@\x85@#\xE9\xB0\x96\xE6\xC32\x88EAϋ\x8Fstl.\xB0\xD3I="@\xE24\xE1\xF4\xFC\xF9O\xA1\xA2\x9Dd \x828Bh\x94\xBC,\xF3\xA7\x90\xE1^ \xC1!\x89F\xE4*ó\x85rI%\xCD\xD5{\xE7\xEC\xF8\x9C\xB3\xBDsv\xA4\x89\xC0ɰd\x87G-\x9F/\x92Z{DA\xAC\xD5L=K#l\xFC8\xF5S\xEF\x820KԃL#m\xD2%p=\xEBHӴ+b\x82Ի:\xA5b#\xE0&66`Y`b\xC6x\xE4d\xAE\xC0\xB8N\xE9H\x97TV\x91\xD4\xE6\xA3^\xBEJ0[hS\x9A\x92\xB6\xC0\xD2F\x9F`@²\xA6He\xA4R$k\xD0+\xF8N->/\xA9\xAC\x8EYi)c!6f\xFA\xB3\xA2\xF79\x89\x86\x81d\x9D\x93e5\x85j\xCEU\xC1h\x90\x82\xE5~\xFF\xC6Y\x81\xE9\x978\x80\xC0|\xFB\x8E\xFC\x96\xB3\xF1\xFD\xD9/p6^\xBF\x85\xAD\xBC\x9DdžC/\x8E\xC4\xA4
+\xD08c$\x9EP\x97fI\x9C)\xAF\xB0\xC7ء\xBD#t\xDD\xD4C%\xE0\xA2h\xBB\xBA#e\xE1\xC6l\x9B%\xB7\xAE\xCA\xE6\xC3<\x80\xF7\xBFr"ƒ[}sb\x84\xBF\xD43\xD0\x87\xF7\xEC!\x8CDd\xF0\xEEe\x87\xB7\x89\x88f\xB0 \xD1/Cia\xFD\xBEh\xBC^=\xB4\xF9\xBC\xF0\x83r\xAEh\x9DL\xD1:\xD8_\xC2\xFA0w^T\xDC\xE7=ckR|A\xAC\xFCAF\x82\xA1\x8DG.\xB9\xC2\xEDo\xDB(`Q1\xAA\x9B\x85=~\x99\xBC\xAC=\xD0P\x93F\x9F\x8BY_\xF2~\xEF1\xC2o>\xD1\xF6\xC1\xED?~3\xF8\xC4+\xF4\xA4\xBF(X\xB9R\x97\x89"e\x95\xA8\xAC\xD2#\xDCdz\xABp"qq\xA2L\xB0\xD0\xEF\xE0\xC0չ\xDE\xDFo]"\xA5Y\x9D,\xAB\xF6\xBD \x80\xBB\x8A\x87}0\xC9M\xB20\xF8j+\xD5ԟ(f
+\xC4\xB7O\x93?\xF2;D\x86aB\xBB\xAE\xB9\xB1]\x84 e\xAB\xB0\xE5y\xC2~\xB3Ǝ\x89\xEAO \xC1\x9Fs\xAA\x99\xF37\xA7\xFC\xA9\xF13\xE5\xC3Okd\xE0\xA2|\xBF\xC1\xB8\xAEW9i\xC7e\xFD\xC0\xA0\x9E\x8E\x91\xB2\x82\xA8\xADVdg\xC2r 隄Z.`چ\x9F~~Ä\x83\xDF\xE0\xB4>\x90\xF5 \xF7M5gy\xC0s\x8B|K5\xF3bZ\xD4ܝ\xB5+[\xED\xC0\xC2}\x89
+\xF5\xB1k\xD6(y\xC9=k\x94\x8D\xED\xAB\xEF\xD9\xCC\xFE\xFE={\xC1\xC2={\x88\x93\xD2ĉ\xB9ȹ<\xC5ɀ̀\x83\x9D\xB9\xF45q\xBD\xF2j(\xD0\xDBF+=#V
+^\xB3\xD49\xE2\xE8\xC0=
@@ Diff output truncated at 100000 characters. @@
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pd...@us...> - 2015-09-28 14:13:45
|
Revision: 567
http://sourceforge.net/p/sbfc/code/567
Author: pdp10
Date: 2015-09-28 14:13:43 +0000 (Mon, 28 Sep 2015)
Log Message:
-----------
updated overview image including new converters
Modified Paths:
--------------
trunk/doc/images/SBFC_overview.odg
trunk/doc/images/SBFC_overview.png
trunk/doc/images/SBFC_overview_small.png
Modified: trunk/doc/images/SBFC_overview.odg
===================================================================
(Binary files differ)
Modified: trunk/doc/images/SBFC_overview.png
===================================================================
(Binary files differ)
Modified: trunk/doc/images/SBFC_overview_small.png
===================================================================
(Binary files differ)
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pd...@us...> - 2015-09-28 12:02:58
|
Revision: 566
http://sourceforge.net/p/sbfc/code/566
Author: pdp10
Date: 2015-09-28 12:02:55 +0000 (Mon, 28 Sep 2015)
Log Message:
-----------
added configuration for using antimony converters.
Modified Paths:
--------------
trunk/sbfConverter.sh
Modified: trunk/sbfConverter.sh
===================================================================
--- trunk/sbfConverter.sh 2015-09-28 10:52:04 UTC (rev 565)
+++ trunk/sbfConverter.sh 2015-09-28 12:02:55 UTC (rev 566)
@@ -1,5 +1,33 @@
#!/bin/bash
+# Setting up libsbml, needed for the SBML2SBML converters
+LD_LIBRARY_PATH=/nfs/production/biomodels/sw/libSBML-5.11.6-Linux/usr/lib64
+
+
+# Setting up for Java properties
+PROPERTIES=""
+
+
+# Setting up antimony converters if used.
+# This can be done by either specifying a Java system property
+#PROPERTIES="$PROPERTIES -Dsbtranslate.path=/path/to/sbtranslate"
+# or an environment variable
+#export SB_TRANSLATE=/path/to/sbtranslate
+
+
+# Setting up java
+export JAVA_HOME=/nfs/public/rw/webadmin/java/jdks/latest_1.8
+export PATH=${JAVA_HOME}/bin:${PATH}
+
+COMMAND="bsub ${BSUB_OPTIONS} -o $LOG_FILE java $PROPERTIES"
+
+if [ "`which bsub 2> /dev/null`" == "" ] ; then
+ COMMAND="java $PROPERTIES"
+fi
+
+
+
+
RESOLVE_LINK=`readlink -f $0`
SBF_CONVERTER_HOME=`dirname ${RESOLVE_LINK}`
LIB_PATH=${SBF_CONVERTER_HOME}/lib
@@ -28,19 +56,8 @@
LOG_FILE_FOLDER=${SBF_CONVERTER_HOME}/log/`basename $SBML_DIR .xml`
LOG_FILE=${LOG_FILE_FOLDER}/`basename $SBML_DIR .xml`-$CONVERTER_NAME-export-`date +%F`.log
-# Setting up libsbml, needed for the SBML2SBML converters
-LD_LIBRARY_PATH=/nfs/production/biomodels/sw/libSBML-5.11.6-Linux/usr/lib64
-# Setting up java
-export JAVA_HOME=/nfs/public/rw/webadmin/java/jdks/latest_1.8
-export PATH=${JAVA_HOME}/bin:${PATH}
-COMMAND="bsub ${BSUB_OPTIONS} -o $LOG_FILE java "
-
-if [ "`which bsub 2> /dev/null`" == "" ] ; then
- COMMAND="java "
-fi
-
PATHVISIO_CONVERTER="no"
if [[ ${CONVERTER_NAME} == *GPML* ]];
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pd...@us...> - 2015-09-28 10:52:07
|
Revision: 565
http://sourceforge.net/p/sbfc/code/565
Author: pdp10
Date: 2015-09-28 10:52:04 +0000 (Mon, 28 Sep 2015)
Log Message:
-----------
Configured antimony converters so that they use sbtranslate invoking a java system property or environment variable.
Modified Paths:
--------------
converters/sbfc-antimony/src/org/sbfc/converter/antimony2sbml/Antimony2SBML.java
converters/sbfc-antimony/src/org/sbfc/converter/cellml2sbml/CellML2SBML.java
converters/sbfc-antimony/src/org/sbfc/converter/sbml2antimony/SBML2Antimony.java
converters/sbfc-antimony/src/org/sbfc/converter/sbml2cellml/SBML2CellML.java
Added Paths:
-----------
converters/sbfc-antimony/src/org/sbfc/converter/AntimonyConverter.java
Added: converters/sbfc-antimony/src/org/sbfc/converter/AntimonyConverter.java
===================================================================
--- converters/sbfc-antimony/src/org/sbfc/converter/AntimonyConverter.java (rev 0)
+++ converters/sbfc-antimony/src/org/sbfc/converter/AntimonyConverter.java 2015-09-28 10:52:04 UTC (rev 565)
@@ -0,0 +1,47 @@
+package org.sbfc.converter;
+
+
+import org.sbfc.converter.GeneralConverter;
+
+/**
+ * This class contains the configuration for the Antimony converters (http://antimony.sourceforge.net/).
+ * The sbtranslate binary can be configured via either the environment variable SB_TRANSLATE or the
+ * system property "path.sbtranslate". Both these parameters should be configured in the sbfConverter.sh
+ * script.
+ */
+public abstract class AntimonyConverter extends GeneralConverter {
+
+ /**
+ * The name for the environment variable whose value contains the path to the program
+ * sbtranslate.
+ */
+ private String sbtranslateEnvVar = "SB_TRANSLATE";
+
+ /**
+ * Path to the antimony sbtranslate binary.
+ */
+ protected String program;
+
+ /** Configure the Antimony Converter. */
+ public AntimonyConverter() {
+ super();
+ /* Check whether an environment variable for sbtranslate is defined. */
+ program = System.getenv(sbtranslateEnvVar);
+ if (program == null) {
+ // the environment variable is not defined.
+ // Let's use get the value from the corresponding system property.
+ program = System.getProperty("path.sbtranslate", "sbtranslate");
+ }
+ }
+
+ /** Return the environment variable for the program sbtranslate. This is defined as SB_TRANSLATE. */
+ public String getProgramEnvVar() {
+ return program;
+ }
+
+ /** Return the path for the program sbtranslate. */
+ public String getProgramName() {
+ return program;
+ }
+
+}
Modified: converters/sbfc-antimony/src/org/sbfc/converter/antimony2sbml/Antimony2SBML.java
===================================================================
--- converters/sbfc-antimony/src/org/sbfc/converter/antimony2sbml/Antimony2SBML.java 2015-09-25 15:56:40 UTC (rev 564)
+++ converters/sbfc-antimony/src/org/sbfc/converter/antimony2sbml/Antimony2SBML.java 2015-09-28 10:52:04 UTC (rev 565)
@@ -5,7 +5,7 @@
import java.io.IOException;
import java.io.InputStreamReader;
-import org.sbfc.converter.GeneralConverter;
+import org.sbfc.converter.AntimonyConverter;
import org.sbfc.converter.exceptions.ConversionException;
import org.sbfc.converter.exceptions.ReadModelException;
import org.sbfc.converter.exceptions.WriteModelException;
@@ -16,13 +16,8 @@
* This converter uses an external program to convert from Antimony to SBML using
* antimony (http://antimony.sourceforge.net/).
*/
-public class Antimony2SBML extends GeneralConverter {
+public class Antimony2SBML extends AntimonyConverter {
- /**
- * Path to the antimony sbtranslate binary. Alternatively, this can be a command
- * if the env var PATH has been configured including it.
- */
- public final static String PROGRAM = "sbtranslate";
/** Creates a new instance. */
public Antimony2SBML() { super(); }
@@ -55,7 +50,7 @@
File outputFile = File.createTempFile("sbml-", ".xml");
// using the Runtime exec method to run the external program:
- Process p = Runtime.getRuntime().exec(PROGRAM + " -o sbml-comp -outfile "
+ Process p = Runtime.getRuntime().exec(program + " -o sbml-comp -outfile "
+ outputFile.getAbsolutePath() + " " + inputFile.getAbsolutePath());
// waiting for the program to finish.
p.waitFor();
Modified: converters/sbfc-antimony/src/org/sbfc/converter/cellml2sbml/CellML2SBML.java
===================================================================
--- converters/sbfc-antimony/src/org/sbfc/converter/cellml2sbml/CellML2SBML.java 2015-09-25 15:56:40 UTC (rev 564)
+++ converters/sbfc-antimony/src/org/sbfc/converter/cellml2sbml/CellML2SBML.java 2015-09-28 10:52:04 UTC (rev 565)
@@ -5,7 +5,7 @@
import java.io.IOException;
import java.io.InputStreamReader;
-import org.sbfc.converter.GeneralConverter;
+import org.sbfc.converter.AntimonyConverter;
import org.sbfc.converter.exceptions.ConversionException;
import org.sbfc.converter.exceptions.ReadModelException;
import org.sbfc.converter.exceptions.WriteModelException;
@@ -20,13 +20,8 @@
* <p>By using this template, you can easily add a new converter that
* call an external program.
*/
-public class CellML2SBML extends GeneralConverter {
+public class CellML2SBML extends AntimonyConverter {
- /**
- * Path to the antimony sbtranslate binary. Alternatively, this can be a command
- * if the env var PATH has been configured including it.
- */
- public final static String PROGRAM = "sbtranslate";
/** Creates a new instance. */
public CellML2SBML() { super(); }
@@ -59,7 +54,7 @@
File outputFile = File.createTempFile("sbml-", ".xml");
// using the Runtime exec method to run the external program:
- Process p = Runtime.getRuntime().exec(PROGRAM + " -o sbml-comp -outfile "
+ Process p = Runtime.getRuntime().exec(program + " -o sbml-comp -outfile "
+ outputFile.getAbsolutePath() + " " + inputFile.getAbsolutePath());
// waiting for the program to finish.
p.waitFor();
Modified: converters/sbfc-antimony/src/org/sbfc/converter/sbml2antimony/SBML2Antimony.java
===================================================================
--- converters/sbfc-antimony/src/org/sbfc/converter/sbml2antimony/SBML2Antimony.java 2015-09-25 15:56:40 UTC (rev 564)
+++ converters/sbfc-antimony/src/org/sbfc/converter/sbml2antimony/SBML2Antimony.java 2015-09-28 10:52:04 UTC (rev 565)
@@ -5,7 +5,7 @@
import java.io.IOException;
import java.io.InputStreamReader;
-import org.sbfc.converter.GeneralConverter;
+import org.sbfc.converter.AntimonyConverter;
import org.sbfc.converter.exceptions.ConversionException;
import org.sbfc.converter.exceptions.ReadModelException;
import org.sbfc.converter.exceptions.WriteModelException;
@@ -16,14 +16,9 @@
* This converter uses an external program to convert from SBML to Antimony using
* antimony (http://antimony.sourceforge.net/).
*/
-public class SBML2Antimony extends GeneralConverter {
+public class SBML2Antimony extends AntimonyConverter {
- /**
- * Path to the antimony sbtranslate binary. Alternatively, this can be a command
- * if the env var PATH has been configured including it.
- */
- public final static String PROGRAM = "sbtranslate";
-
+
/** Creates a new instance. */
public SBML2Antimony() { super(); }
@@ -55,7 +50,7 @@
File outputFile = File.createTempFile("antimony-", ".txt");
// using the Runtime exec method to run the external program:
- Process p = Runtime.getRuntime().exec(PROGRAM + " -o antimony -outfile "
+ Process p = Runtime.getRuntime().exec(program + " -o antimony -outfile "
+ outputFile.getAbsolutePath() + " " + inputFile.getAbsolutePath());
// waiting for the program to finish.
p.waitFor();
Modified: converters/sbfc-antimony/src/org/sbfc/converter/sbml2cellml/SBML2CellML.java
===================================================================
--- converters/sbfc-antimony/src/org/sbfc/converter/sbml2cellml/SBML2CellML.java 2015-09-25 15:56:40 UTC (rev 564)
+++ converters/sbfc-antimony/src/org/sbfc/converter/sbml2cellml/SBML2CellML.java 2015-09-28 10:52:04 UTC (rev 565)
@@ -5,7 +5,7 @@
import java.io.IOException;
import java.io.InputStreamReader;
-import org.sbfc.converter.GeneralConverter;
+import org.sbfc.converter.AntimonyConverter;
import org.sbfc.converter.exceptions.ConversionException;
import org.sbfc.converter.exceptions.ReadModelException;
import org.sbfc.converter.exceptions.WriteModelException;
@@ -18,16 +18,13 @@
* antimony (http://antimony.sourceforge.net/). This converter requires the
* compilation of antimony with CellML API library.
*/
-public class SBML2CellML extends GeneralConverter {
-
- /**
- * Path to the antimony sbtranslate binary. Alternatively, this can be a command
- * if the env var PATH has been configured including it.
- */
- public final static String PROGRAM = "sbtranslate";
+public class SBML2CellML extends AntimonyConverter {
/** Creates a new instance. */
- public SBML2CellML() { super(); }
+ public SBML2CellML() {
+ super();
+
+ }
@Override
public GeneralModel convert(GeneralModel model)
@@ -57,7 +54,7 @@
File outputFile = File.createTempFile("cellml-", ".xml");
// using the Runtime exec method to run the external program:
- Process p = Runtime.getRuntime().exec(PROGRAM + " -o cellml -outfile "
+ Process p = Runtime.getRuntime().exec(program + " -o cellml -outfile "
+ outputFile.getAbsolutePath() + " " + inputFile.getAbsolutePath());
// waiting for the program to finish.
p.waitFor();
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <nik...@us...> - 2015-09-25 15:56:42
|
Revision: 564
http://sourceforge.net/p/sbfc/code/564
Author: niko-rodrigue
Date: 2015-09-25 15:56:40 +0000 (Fri, 25 Sep 2015)
Log Message:
-----------
rename the class ConverterId to ConversionInfo
Modified Paths:
--------------
webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java
webServiceClient/src/org/sbfc/ws/UsageExample.java
Added Paths:
-----------
webServiceClient/src/org/sbfc/ws/ConversionInfo.java
Removed Paths:
-------------
webServiceClient/src/org/sbfc/ws/ConvertionId.java
Added: webServiceClient/src/org/sbfc/ws/ConversionInfo.java
===================================================================
--- webServiceClient/src/org/sbfc/ws/ConversionInfo.java (rev 0)
+++ webServiceClient/src/org/sbfc/ws/ConversionInfo.java 2015-09-25 15:56:40 UTC (rev 564)
@@ -0,0 +1,91 @@
+package org.sbfc.ws;
+
+/**
+ * Contains some metadata about a convertion job retrieved
+ * when submitting a conversion to the webservice.
+ *
+ * @author jpettit
+ *
+ */
+public class ConversionInfo {
+
+ /**
+ * an id for this conversion, in general containing a filename
+ * and the session id.
+ */
+ private String identificationId;
+ /**
+ * a session id generated by the server for this conversion.
+ */
+ private String sessionId;
+ /**
+ * a job id generated by the server, it will allow the server to
+ * check if the job is still not started, running or finished.
+ */
+ private String jobId;
+
+ /**
+ * Returns the identification id for this conversion
+ *
+ * @return the identification id for this conversion
+ */
+ public String getIdentificationId() {
+ return identificationId;
+ }
+
+ /**
+ * Sets the identification id for this conversion
+ *
+ * @param identificationId the identification id for this conversion
+ */
+ public void setIdentificationId(String identificationId) {
+ this.identificationId = identificationId;
+ }
+
+ /**
+ * Gets the session id for this conversion
+ *
+ * @return the session id for this conversion
+ */
+ public String getSessionId() {
+ return sessionId;
+ }
+
+ /**
+ * Sets the session id for this conversion
+ *
+ * @param sessionId the session id for this conversion
+ */
+ public void setSessionId(String sessionId) {
+ this.sessionId = sessionId;
+ }
+
+ /**
+ * Returns the job id for this conversion
+ *
+ * @return the job id for this conversion
+ */
+ public String getJobId() {
+ return jobId;
+ }
+
+ /**
+ * Sets the job id for this conversion
+ *
+ * @param jobId the job id for this conversion
+ */
+ public void setJobId(String jobId) {
+ this.jobId = jobId;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "ConversionInfo [identificationId=" + identificationId
+ + ", sessionId=" + sessionId + ", jobId=" + jobId + "]";
+ }
+
+
+}
Property changes on: webServiceClient/src/org/sbfc/ws/ConversionInfo.java
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Deleted: webServiceClient/src/org/sbfc/ws/ConvertionId.java
===================================================================
--- webServiceClient/src/org/sbfc/ws/ConvertionId.java 2015-09-24 15:52:14 UTC (rev 563)
+++ webServiceClient/src/org/sbfc/ws/ConvertionId.java 2015-09-25 15:56:40 UTC (rev 564)
@@ -1,49 +0,0 @@
-package org.sbfc.ws;
-
-/**
- * Class only containing the convertionId String retrieved
- * when submitting a convertion job to the webservice
- * @author jpettit
- *
- */
-public class ConvertionId {
-
- private String identificationId;
- private String sessionId;
- private String jobId;
-
- public String getIdentificationId() {
- return identificationId;
- }
-
- public void setIdentificationId(String identificationId) {
- this.identificationId = identificationId;
- }
-
- public String getSessionId() {
- return sessionId;
- }
-
- public void setSessionId(String sessionId) {
- this.sessionId = sessionId;
- }
-
- public String getJobId() {
- return jobId;
- }
-
- public void setJobId(String jobId) {
- this.jobId = jobId;
- }
-
- /* (non-Javadoc)
- * @see java.lang.Object#toString()
- */
- @Override
- public String toString() {
- return "ConvertionId [identificationId=" + identificationId
- + ", sessionId=" + sessionId + ", jobId=" + jobId + "]";
- }
-
-
-}
Modified: webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java
===================================================================
--- webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java 2015-09-24 15:52:14 UTC (rev 563)
+++ webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java 2015-09-25 15:56:40 UTC (rev 564)
@@ -45,10 +45,10 @@
* @param model
* @param inputModelType
* @param converterType
- * @return ConvertionId
+ * @return ConversionInfo
*/
- public ConvertionId submitJobFromString(String model,String inputModelType, String converterType) {
- ConvertionId convertionId = new ConvertionId();
+ public ConversionInfo submitJobFromString(String model,String inputModelType, String converterType) {
+ ConversionInfo convertionId = new ConversionInfo();
//Build parameter string
String data = "method=submit&inputModelType="+inputModelType+"&converterType="+converterType+"&text_upload="+model;
@@ -67,10 +67,10 @@
* @param model
* @param inputModelType
* @param converterType
- * @return ConvertionId
+ * @return ConversionInfo
*/
- public ConvertionId submitJobFromURL(String url,String inputModelType, String converterType) {
- ConvertionId convertionId = new ConvertionId();
+ public ConversionInfo submitJobFromURL(String url,String inputModelType, String converterType) {
+ ConversionInfo convertionId = new ConversionInfo();
//Build parameter string
String data = "method=submit&inputModelType="+inputModelType+"&converterType="+converterType+"&url_upload="+url;
@@ -89,7 +89,7 @@
* @param convertionId
* @return "pending" | "done" | "unknown" | "not found"
*/
- public String getJobStatus(ConvertionId convertionId) {
+ public String getJobStatus(ConversionInfo convertionId) {
String status=null;
//Build parameter string
@@ -97,7 +97,7 @@
+ "&sessionId=" + convertionId.getSessionId() + "&jobId=" + convertionId.getJobId();
//sending POST request to the server
- status = sendPostRequest(data, new ConvertionId());
+ status = sendPostRequest(data, new ConversionInfo());
return status;
@@ -115,7 +115,7 @@
* @throws InterruptedException
*/
public String submitAndGetResultFromString(String model,String inputModelType, String converterType) throws InterruptedException {
- ConvertionId convert = submitJobFromString(model, inputModelType, converterType);
+ ConversionInfo convert = submitJobFromString(model, inputModelType, converterType);
while(getJobStatus(convert).compareTo(ConverterParam.Pending_Job) == 0) {
Thread.sleep(1000);
@@ -135,7 +135,7 @@
* @throws InterruptedExceptionif any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.
*/
public String submitAndGetResultFromURL(String url,String inputModelType, String converterType) throws InterruptedException {
- ConvertionId convert = submitJobFromURL(url, inputModelType, converterType);
+ ConversionInfo convert = submitJobFromURL(url, inputModelType, converterType);
while(getJobStatus(convert).compareTo(ConverterParam.Pending_Job) == 0) {
Thread.sleep(1000);
@@ -151,7 +151,7 @@
* @param convertionId
* @return converted model or errorLog
*/
- public String getConvertionResult(ConvertionId convertionId) {
+ public String getConvertionResult(ConversionInfo convertionId) {
String model = null;
// TODO - may be we should change the behavior or provide several methods, some deleting the files, some not. And saying that everything will be deleted anyway after 72H
@@ -161,7 +161,7 @@
+ "&sessionId=" + convertionId.getSessionId() + "&jobId=" + convertionId.getJobId();
//sending POST request to the server
- model = sendPostRequest(data, new ConvertionId());
+ model = sendPostRequest(data, new ConversionInfo());
return model;
}
@@ -172,7 +172,7 @@
* @param data
* @return
*/
- private String sendPostRequest(String data, ConvertionId convertionIds) {
+ private String sendPostRequest(String data, ConversionInfo convertionIds) {
String answer = "";
try {
Modified: webServiceClient/src/org/sbfc/ws/UsageExample.java
===================================================================
--- webServiceClient/src/org/sbfc/ws/UsageExample.java 2015-09-24 15:52:14 UTC (rev 563)
+++ webServiceClient/src/org/sbfc/ws/UsageExample.java 2015-09-25 15:56:40 UTC (rev 564)
@@ -28,7 +28,7 @@
//URL pointing to the model to convert
String modelURL = "http://www.ebi.ac.uk/biomodels/models-main/publ/BIOMD0000000001/BIOMD0000000001.xml";
- // modelURL = "http://www.ebi.ac.uk/biomodels-main/download?mid=BIOMD0000000461";
+ modelURL = "http://www.ebi.ac.uk/biomodels-main/download?mid=BIOMD0000000461";
//input Model format
String inputType = ConverterParam.SBMLModel;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pd...@us...> - 2015-09-24 15:52:16
|
Revision: 563
http://sourceforge.net/p/sbfc/code/563
Author: pdp10
Date: 2015-09-24 15:52:14 +0000 (Thu, 24 Sep 2015)
Log Message:
-----------
First draft for the BioPAX2SIF converter.
Added Paths:
-----------
converters/sbfc-pathvisio-4.3/
converters/sbfc-pathvisio-4.3/build.xml
converters/sbfc-pathvisio-4.3/doc/
converters/sbfc-pathvisio-4.3/lib/
converters/sbfc-pathvisio-4.3/src/
converters/sbfc-pathvisio-4.3/src/org/
converters/sbfc-pathvisio-4.3/src/org/sbfc/
converters/sbfc-pathvisio-4.3/src/org/sbfc/converter/
converters/sbfc-pathvisio-4.3/src/org/sbfc/converter/biopax2sif/
converters/sbfc-pathvisio-4.3/src/org/sbfc/converter/biopax2sif/BioPAX2SIF.java
converters/sbfc-pathvisio-4.3/src/org/sbfc/converter/models/
converters/sbfc-pathvisio-4.3/src/org/sbfc/converter/models/SIFModel.java
Added: converters/sbfc-pathvisio-4.3/build.xml
===================================================================
--- converters/sbfc-pathvisio-4.3/build.xml (rev 0)
+++ converters/sbfc-pathvisio-4.3/build.xml 2015-09-24 15:52:14 UTC (rev 563)
@@ -0,0 +1,261 @@
+<?xml version="1.0"?>
+<!-- $Id$ -->
+
+<project default ="usage" basedir=".">
+ <!-- =================================================================== -->
+ <!-- Initialization target -->
+ <!-- =================================================================== -->
+
+ <target name="init">
+ <tstamp>
+ <format property="YEAR" pattern="yyyy"/>
+ </tstamp>
+ <property name="Name" value="Pathvisio Converters"/>
+ <property name="name" value="sbfc-pathvisio-4.3"/>
+ <property name="version" value="1.0"/>
+
+ <property name="year" value="${YEAR}"/>
+
+ <echo message="----------- ${Name} ${version} [${year}] ------------"/>
+ <echo message="----------- ${TODAY} ------------"/>
+ <echo message="----------- ${DSTAMP} ${TSTAMP} ------------"/>
+
+ <property environment="env"/>
+ <property name="build.compiler" value="modern"/>
+ <property name="build.sysclasspath" value="ignore"/>
+ <property name="debug" value="on"/>
+ <property name="optimize" value="off"/>
+ <property name="deprecation" value="false"/>
+ <property name="depend" value="true"/>
+ <property name="verbose" value="false"/>
+
+ <property name="build.number" value="${DSTAMP}-${TSTAMP}"/>
+ <property name="build.name" value="${version} (build ${build.number})"/>
+
+ <property name="src.dir" value="${basedir}/src"/>
+ <property name="build.dir" value="${basedir}/build"/>
+ <property name="build.src" value="${basedir}/build/src"/>
+ <property name="build.dest" value="${basedir}/build/classes"/>
+ <property name="build.javadocs" value="${basedir}/build/apidocs"/>
+ <property name="jars.dir" value="${basedir}/lib"/>
+ <property name="dist.root" value="${basedir}/dist"/>
+ <property name="dist.dir" value="${dist.root}/${name}-${version}"/>
+ <property name="package.dir" value="${basedir}/build/package"/>
+
+ <property name="sbfc.dir" value="../../trunk"/>
+ <property name="sbfc.jars.dir" value="${sbfc.dir}/lib"/>
+
+ <filter token="year" value="${year}"/>
+ <filter token="version" value="${version}"/>
+ <filter token="date" value="${TODAY}"/>
+ <filter token="log" value="true"/>
+ <filter token="verbose" value="true"/>
+
+ <!-- add everything needed to the classpath -->
+ <!-- adjust the settings to your local environment -->
+ <path id="sbfc.classpath">
+ <fileset dir="${jars.dir}">
+ <include name="*.jar"/>
+ <exclude name="{name}.jar"/>
+ </fileset>
+ <fileset dir="${sbfc.jars.dir}">
+ <include name="*.jar"/>
+ <exclude name="{name}.jar"/>
+ </fileset>
+ </path>
+ </target>
+
+
+ <!-- =================================================================== -->
+ <!-- Help on usage -->
+ <!-- =================================================================== -->
+ <target name="usage" depends="init">
+ <echo message=""/>
+ <echo message=""/>
+ <echo message="${Name} Build file"/>
+ <echo message="-------------------------------------------------------------"/>
+ <echo message=""/>
+ <echo message=" available targets are:"/>
+ <echo message=""/>
+ <echo message=" compile --> compiles the source code"/>
+ <echo message=" jar --> generates the ${name}-${version}.jar file"/>
+ <echo message=" javadoc --> generates the API documentation"/>
+ <echo message=" clean --> cleans up the directory"/>
+ <echo message=""/>
+ <echo message=" See the comments inside the build.xml file for more details."/>
+ <echo message="-------------------------------------------------------------"/>
+ <echo message=""/>
+ <echo message=""/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Prepares the build directory -->
+ <!-- =================================================================== -->
+ <target name="prepare" depends="init">
+ <mkdir dir="${build.dir}"/>
+ <echo message="Done"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Prepares the source code -->
+ <!-- =================================================================== -->
+ <target name="prepare-src" depends="prepare">
+ <!-- create directories -->
+ <mkdir dir="${build.src}"/>
+ <mkdir dir="${build.dest}"/>
+ <mkdir dir="${package.dir}"/>
+ <mkdir dir="${dist.root}"/>
+ <mkdir dir="${dist.dir}"/>
+ <mkdir dir="${dist.dir}/log"/>
+
+
+ <!-- copy src files -->
+ <copy todir="${build.src}" overwrite="yes">
+ <fileset dir="${src.dir}"
+ excludes="**/*.class, **/*~, **/*.tgz">
+ </fileset>
+ </copy>
+ <copy todir="${build.src}" overwrite="yes">
+ <fileset dir="${basedir}"
+ includes="log4j.properties">
+ </fileset>
+ </copy>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Compiles the source directory -->
+ <!-- =================================================================== -->
+ <target name="compile" depends="prepare-src">
+ <javac srcdir="${build.src}"
+ destdir="${build.dest}"
+ debug="${debug}"
+ optimize="${optimize}"
+ verbose="${verbose}"
+ source="1.7"
+ target="1.7"
+ classpathref="sbfc.classpath">
+ </javac>
+ </target>
+
+
+ <!-- =================================================================== -->
+ <!-- Creates the class package -->
+ <!-- =================================================================== -->
+ <target name="jar" depends="compile">
+
+ <copy todir="${build.dest}">
+ <fileset dir="${build.src}"
+ includes="**/*.png **/*.gif **/*.xsd **/*.xsl **/data/* **/*.xml **/*.properties">
+ </fileset>
+ </copy>
+
+ <jar jarfile="${build.dir}/${name}-${version}.jar" basedir="${build.dest}"/>
+
+ <copy todir="${basedir}/lib" preservelastmodified="true" overwrite="true" verbose="true">
+ <fileset dir="${build.dir}"
+ includes="${name}-${version}.jar">
+ </fileset>
+ </copy>
+ </target>
+
+
+
+ <!-- =================================================================== -->
+ <!-- Creates the distribution -->
+ <!-- =================================================================== -->
+ <target name="dist" depends="prepare-src">
+
+ <!-- Creates the standard jar file -->
+
+ <antcall target="clean"/>
+
+ <antcall target="jar"/>
+
+ <copy todir="${dist.dir}" file="${build.dir}/${name}-${version}.jar"/>
+ <copy todir="${dist.root}" file="${build.dir}/${name}-${version}.jar"/>
+
+ <!-- Creates and copy the generated javadoc -->
+ <antcall target="javadoc"/>
+
+ <copy todir="${dist.dir}/doc/api">
+ <fileset dir="${build.javadocs}/" includes="**/*">
+ </fileset>
+ </copy>
+
+ <!-- Copy the source files -->
+ <copy todir="${dist.dir}/src">
+ <fileset dir="${build.src}/" includes="**/*">
+ </fileset>
+ </copy>
+
+ <!-- Copy all the dependencies jar files -->
+ <copy todir="${dist.dir}/lib">
+ <fileset dir="${jars.dir}/" includes="*.jar">
+ </fileset>
+ </copy>
+
+ <!--
+ <copy todir="${dist.dir}">
+ <fileset dir="${basedir}/" includes="LICENSE.txt NEWS.txt README *.sh src/**/*.properties src/**/*.xml log4j.properties build.x miriam.xml">
+ </fileset>
+ </copy>
+ -->
+ <chmod dir="${dist.dir}" perm="ugo+rx" includes="*.sh"/>
+
+
+ <copy todir="${dist.dir}/doc">
+ <fileset dir="${basedir}/doc" includes="**/*.pdf **/*.jpg **/*.java">
+
+ </fileset>
+ </copy>
+
+ <!-- Creates the archives to be distributed -->
+ <zip destfile="${dist.root}/${name}-${version}.zip">
+ <zipfileset dir="${dist.root}" filemode="755" includes="${name}-${version}/*.sh"/>
+ <zipfileset dir="${dist.root}" includes="${name}-${version}/**" excludes="${name}-${version}/*.sh"/>
+ </zip>
+
+ <tar destfile="${dist.root}/${name}-${version}.tar.gz" compression="gzip">
+ <tarfileset dir="${dist.root}" filemode="755" includes="${name}-${version}/*.sh"/>
+ <tarfileset dir="${dist.root}" includes="${name}-${version}/**" excludes="${name}-${version}/*.sh"/>
+ </tar>
+
+
+ </target>
+
+
+ <!-- =================================================================== -->
+ <!-- Creates the API documentation -->
+ <!-- =================================================================== -->
+ <target name="javadoc" depends="prepare-src">
+ <mkdir dir="${build.javadocs}"/>
+ <javadoc packagenames="org.*"
+ sourcepath="${build.src}"
+ destdir="${build.javadocs}"
+ classpathref="sbfc.classpath"
+ maxmemory="256m"
+ author="true"
+ version="true"
+ use="true"
+ splitindex="true"
+ noindex="false"
+ windowtitle="${Name} API"
+ doctitle="${Name}"
+ breakiterator="yes"
+ >
+ <link href="http://java.sun.com/j2se/1.5.0/docs/api"/>
+ </javadoc>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Cleans everything -->
+ <!-- =================================================================== -->
+ <target name="clean" depends="init">
+ <delete includeEmptyDirs="true" quiet="yes">
+ <fileset dir="${build.dir}" includes="**"/>
+ </delete>
+ <delete dir="${dist.root}" includeEmptyDirs="true" quiet="yes"/>
+ </target>
+</project>
+
+<!-- End of file -->
Added: converters/sbfc-pathvisio-4.3/src/org/sbfc/converter/biopax2sif/BioPAX2SIF.java
===================================================================
--- converters/sbfc-pathvisio-4.3/src/org/sbfc/converter/biopax2sif/BioPAX2SIF.java (rev 0)
+++ converters/sbfc-pathvisio-4.3/src/org/sbfc/converter/biopax2sif/BioPAX2SIF.java 2015-09-24 15:52:14 UTC (rev 563)
@@ -0,0 +1,106 @@
+package org.sbfc.converter.biopax2sif;
+
+
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+
+import org.biopax.paxtools.io.sif.InteractionRule;
+import org.biopax.paxtools.io.sif.SimpleInteractionConverter;
+import org.biopax.paxtools.io.sif.level3.ControlRule;
+import org.biopax.paxtools.model.Model;
+import org.sbfc.converter.GeneralConverter;
+import org.sbfc.converter.biopaxL3converter.BioPAXL3Converter;
+import org.sbfc.converter.exceptions.ConversionException;
+import org.sbfc.converter.exceptions.ReadModelException;
+import org.sbfc.converter.models.BioPAXModel;
+import org.sbfc.converter.models.GeneralModel;
+import org.sbfc.converter.models.SIFModel;
+
+
+
+/**
+ * Convert a BioPAX model to SIF (Simple Interaction Format).
+ *
+ */
+public class BioPAX2SIF extends GeneralConverter {
+
+ /** Constructor BioPAX2SIF. */
+ public BioPAX2SIF() {
+ super();
+ }
+
+ /**
+ * Convert a BioPAX model to SIF
+ *
+ * @param model to be converted
+ * @return a SIF model
+ * @throws ConversionException
+ * @throws ReadModelException
+ */
+ public GeneralModel biopaxExport(BioPAXModel model)
+ throws ConversionException, ReadModelException {
+
+ // upgrade the model to L3
+ BioPAXModel bioPAXUpgradedModedel = (BioPAXModel) new BioPAXL3Converter().biopaxExport(model);
+ Model paxtoolsModel = bioPAXUpgradedModedel.getModel();
+
+ try {
+ File fileout = File.createTempFile("sif-", ".sif");
+ FileOutputStream fos = new FileOutputStream(fileout);
+
+ // TODO Is this correct? we need to instantiate the constructor for
+ // SimpleInteractionConverter with an InteractionRule.
+ InteractionRule ir = new ControlRule();
+ SimpleInteractionConverter sic = new SimpleInteractionConverter(ir);
+ sic.writeInteractionsInSIF(paxtoolsModel, fos);
+
+ // creating a new empty SIFModel
+ GeneralModel outputModel = new SIFModel();
+ // reading the output file into the SIFModel
+ outputModel.setModelFromFile(fileout.getAbsolutePath());
+
+ return outputModel;
+ }
+ catch (IOException e) {
+ throw new ReadModelException(e);
+ }
+ }
+
+
+ @Override
+ public GeneralModel convert(GeneralModel model)
+ throws ConversionException, ReadModelException {
+ try {
+ inputModel = model;
+ return biopaxExport((BioPAXModel)model);
+ } catch (ReadModelException e) {
+ throw e;
+ } catch (ConversionException e) {
+ throw e;
+ }
+ }
+
+
+ @Override
+ public String getResultExtension() {
+ return ".sif";
+ }
+
+ @Override
+ public String getName() {
+ return "BioPAX2SIF";
+ }
+
+ @Override
+ public String getDescription() {
+ return "It converts a BioPAX model format to SIF";
+ }
+
+ @Override
+ public String getHtmlDescription() {
+ return "It converts a BioPAX model format to SIF";
+ }
+
+}
+
Added: converters/sbfc-pathvisio-4.3/src/org/sbfc/converter/models/SIFModel.java
===================================================================
--- converters/sbfc-pathvisio-4.3/src/org/sbfc/converter/models/SIFModel.java (rev 0)
+++ converters/sbfc-pathvisio-4.3/src/org/sbfc/converter/models/SIFModel.java 2015-09-24 15:52:14 UTC (rev 563)
@@ -0,0 +1,47 @@
+/*
+ * $Id: SIFModel.java 390 2015-07-09 13:29:56Z pdp10 $
+ * $URL: svn://svn.code.sf.net/p/sbfc/code/converters/sbml2latex/src/org/sbfc/converter/models/SIFModel.java $
+ *
+ * ==========================================================================
+ * This file is part of The System Biology Format Converter (SBFC).
+ * Please visit <http://sbfc.sf.net> to have more information about
+ * SBFC.
+ *
+ * Copyright (c) 2010-2015 jointly by the following organizations:
+ * 1. EMBL European Bioinformatics Institute (EBML-EBI), Hinxton, UK
+ * 2. The Babraham Institute, Cambridge, UK
+ * 3. Department of Bioinformatics, BiGCaT, Maastricht University
+ *
+ * This library is free software; you can redistribute it and/or modify it
+ * under the terms of the GNU Lesser General Public License as published by
+ * the Free Software Foundation. A copy of the license agreement is provided
+ * in the file named "LICENSE.txt" included with this software distribution
+ * and also available online as
+ * <http://sbfc.sf.net/mediawiki/index.php/License>.
+ *
+ * ==========================================================================
+ *
+ */
+
+package org.sbfc.converter.models;
+
+import java.io.File;
+
+
+public class SIFModel extends StringModel {
+
+ @Override
+ public String[] getExtensions() {
+ return new String[] { ".sif" };
+ }
+
+ @Override
+ public boolean isCorrectType(File f) {
+ return true;
+ }
+
+ @Override
+ public String getURI() {
+ return "text/sif";
+ }
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <nik...@us...> - 2015-09-24 15:44:46
|
Revision: 562
http://sourceforge.net/p/sbfc/code/562
Author: niko-rodrigue
Date: 2015-09-24 15:44:43 +0000 (Thu, 24 Sep 2015)
Log Message:
-----------
added some screenshot of the sbfc online web app to use may be in the paper or maybe in the user manual or sf wiki
Added Paths:
-----------
trunk/doc/images/sbfc-logo-150x122.png
trunk/doc/images/sbfc-logo-75x73.png
trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-fileUpload.png
trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-finshedResult.png
trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-modelFromText.png
trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-modelFromURL.png
trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-pendingResult.png
trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-selectOuputFormat.png
Added: trunk/doc/images/sbfc-logo-150x122.png
===================================================================
(Binary files differ)
Index: trunk/doc/images/sbfc-logo-150x122.png
===================================================================
--- trunk/doc/images/sbfc-logo-150x122.png 2015-09-24 14:29:52 UTC (rev 561)
+++ trunk/doc/images/sbfc-logo-150x122.png 2015-09-24 15:44:43 UTC (rev 562)
Property changes on: trunk/doc/images/sbfc-logo-150x122.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/doc/images/sbfc-logo-75x73.png
===================================================================
(Binary files differ)
Index: trunk/doc/images/sbfc-logo-75x73.png
===================================================================
--- trunk/doc/images/sbfc-logo-75x73.png 2015-09-24 14:29:52 UTC (rev 561)
+++ trunk/doc/images/sbfc-logo-75x73.png 2015-09-24 15:44:43 UTC (rev 562)
Property changes on: trunk/doc/images/sbfc-logo-75x73.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-fileUpload.png
===================================================================
(Binary files differ)
Index: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-fileUpload.png
===================================================================
--- trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-fileUpload.png 2015-09-24 14:29:52 UTC (rev 561)
+++ trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-fileUpload.png 2015-09-24 15:44:43 UTC (rev 562)
Property changes on: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-fileUpload.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-finshedResult.png
===================================================================
(Binary files differ)
Index: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-finshedResult.png
===================================================================
--- trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-finshedResult.png 2015-09-24 14:29:52 UTC (rev 561)
+++ trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-finshedResult.png 2015-09-24 15:44:43 UTC (rev 562)
Property changes on: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-finshedResult.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-modelFromText.png
===================================================================
(Binary files differ)
Index: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-modelFromText.png
===================================================================
--- trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-modelFromText.png 2015-09-24 14:29:52 UTC (rev 561)
+++ trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-modelFromText.png 2015-09-24 15:44:43 UTC (rev 562)
Property changes on: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-modelFromText.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-modelFromURL.png
===================================================================
(Binary files differ)
Index: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-modelFromURL.png
===================================================================
--- trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-modelFromURL.png 2015-09-24 14:29:52 UTC (rev 561)
+++ trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-modelFromURL.png 2015-09-24 15:44:43 UTC (rev 562)
Property changes on: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-modelFromURL.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-pendingResult.png
===================================================================
(Binary files differ)
Index: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-pendingResult.png
===================================================================
--- trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-pendingResult.png 2015-09-24 14:29:52 UTC (rev 561)
+++ trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-pendingResult.png 2015-09-24 15:44:43 UTC (rev 562)
Property changes on: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-pendingResult.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-selectOuputFormat.png
===================================================================
(Binary files differ)
Index: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-selectOuputFormat.png
===================================================================
--- trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-selectOuputFormat.png 2015-09-24 14:29:52 UTC (rev 561)
+++ trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-selectOuputFormat.png 2015-09-24 15:44:43 UTC (rev 562)
Property changes on: trunk/doc/publication/BMC-Bioinformatics-2015/graphics/sbfcOnline-selectOuputFormat.png
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pd...@us...> - 2015-09-24 14:29:55
|
Revision: 561
http://sourceforge.net/p/sbfc/code/561
Author: pdp10
Date: 2015-09-24 14:29:52 +0000 (Thu, 24 Sep 2015)
Log Message:
-----------
added complementary converter from sbml to cellml
Added Paths:
-----------
converters/sbfc-antimony/lib/sbfc-antimony-1.0.jar
converters/sbfc-antimony/src/org/sbfc/converter/sbml2cellml/
converters/sbfc-antimony/src/org/sbfc/converter/sbml2cellml/SBML2CellML.java
Added: converters/sbfc-antimony/lib/sbfc-antimony-1.0.jar
===================================================================
(Binary files differ)
Index: converters/sbfc-antimony/lib/sbfc-antimony-1.0.jar
===================================================================
--- converters/sbfc-antimony/lib/sbfc-antimony-1.0.jar 2015-09-24 14:21:55 UTC (rev 560)
+++ converters/sbfc-antimony/lib/sbfc-antimony-1.0.jar 2015-09-24 14:29:52 UTC (rev 561)
Property changes on: converters/sbfc-antimony/lib/sbfc-antimony-1.0.jar
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/octet-stream
\ No newline at end of property
Added: converters/sbfc-antimony/src/org/sbfc/converter/sbml2cellml/SBML2CellML.java
===================================================================
--- converters/sbfc-antimony/src/org/sbfc/converter/sbml2cellml/SBML2CellML.java (rev 0)
+++ converters/sbfc-antimony/src/org/sbfc/converter/sbml2cellml/SBML2CellML.java 2015-09-24 14:29:52 UTC (rev 561)
@@ -0,0 +1,125 @@
+package org.sbfc.converter.sbml2cellml;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+import org.sbfc.converter.GeneralConverter;
+import org.sbfc.converter.exceptions.ConversionException;
+import org.sbfc.converter.exceptions.ReadModelException;
+import org.sbfc.converter.exceptions.WriteModelException;
+import org.sbfc.converter.models.CellMLModel;
+import org.sbfc.converter.models.GeneralModel;
+
+/**
+ * This converter will use an external program to
+ * do the conversion. As an example, we will convert from SBML to CellML using
+ * antimony (http://antimony.sourceforge.net/). This converter requires the
+ * compilation of antimony with CellML API library.
+ */
+public class SBML2CellML extends GeneralConverter {
+
+ /**
+ * Path to the antimony sbtranslate binary. Alternatively, this can be a command
+ * if the env var PATH has been configured including it.
+ */
+ public final static String PROGRAM = "sbtranslate";
+
+ /** Creates a new instance. */
+ public SBML2CellML() { super(); }
+
+ @Override
+ public GeneralModel convert(GeneralModel model)
+ throws ConversionException, ReadModelException {
+ try {
+ //
+ // 1. Dealing with the input format
+ //
+ // We first need to save the model into a temporary file so that the
+ // external program can read it.
+ // GeneralModel does not store the original file location and it can
+ // also be initialize directly from String.
+
+ // We could check here that the input format correspond to the SBML URI.
+
+ // creating the temporary file
+ File inputFile = File.createTempFile("sbml-", ".xml");
+
+ // writing the model to the temporary file
+ model.modelToFile(inputFile.getAbsolutePath());
+
+ //
+ // 2. Running the external program
+ //
+
+ // creating a second temporary file for the output
+ File outputFile = File.createTempFile("cellml-", ".xml");
+
+ // using the Runtime exec method to run the external program:
+ Process p = Runtime.getRuntime().exec(PROGRAM + " -o cellml -outfile "
+ + outputFile.getAbsolutePath() + " " + inputFile.getAbsolutePath());
+ // waiting for the program to finish.
+ p.waitFor();
+
+ // read the output messages from the command
+ BufferedReader stdInput = new BufferedReader(new
+ InputStreamReader(p.getInputStream()));
+ String line;
+
+ while ((line = stdInput.readLine()) != null) {
+ // You might want to read the process output to check that the conversion went fine
+ // and if not, you can throw an exception with an appropriate error message.
+ System.out.println("Output: " + line);
+ }
+
+ // read the error messages from the command
+ BufferedReader stdError = new BufferedReader(new
+ InputStreamReader(p.getErrorStream()));
+
+ while ((line = stdError.readLine()) != null) {
+ // You might want to read the process error output to check that the conversion went fine
+ // and if not, you can throw an exception with an appropriate error message.
+ System.out.println("Errors: " + line);
+ if (line.startsWith("Segmentation fault")) {
+ throw new ConversionException("Encountered a Segmentation fault while running antomony !!");
+ }
+ }
+
+ //
+ // 3. Returning the output format
+ //
+
+ // creating a new empty CellMLModel
+ GeneralModel outputModel = new CellMLModel();
+
+ // reading the output file into the CellMLModel
+ outputModel.setModelFromFile(outputFile.getAbsolutePath());
+
+ return outputModel;
+ }
+ catch (IOException e) {
+ throw new ReadModelException(e);
+ } catch (WriteModelException e) {
+ throw new ReadModelException(e);
+ } catch (InterruptedException e) {
+ throw new ReadModelException(e);
+ }
+ }
+
+ @Override
+ public String getResultExtension() { return ".xml"; }
+
+ @Override
+ public String getName() { return "SBML2CellML"; }
+
+ @Override
+ public String getDescription() {
+ return "Convert an SBML model to CellML";
+ }
+
+ @Override
+ public String getHtmlDescription() {
+ return "Convert an SBML model to CellML";
+ }
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <nik...@us...> - 2015-09-24 14:21:57
|
Revision: 560
http://sourceforge.net/p/sbfc/code/560
Author: niko-rodrigue
Date: 2015-09-24 14:21:55 +0000 (Thu, 24 Sep 2015)
Log Message:
-----------
corrected the web service servlet so that it work fine. Some more work need to be done to make it work properly on the server, in particular the jobStatus method. Now the ws jobs are registered in the database like standard jobs and will be cleaned after 72H
Modified Paths:
--------------
sbfcOnline/src/uk/ac/ebi/compneur/servlets/WebServiceServlet.java
Modified: sbfcOnline/src/uk/ac/ebi/compneur/servlets/WebServiceServlet.java
===================================================================
--- sbfcOnline/src/uk/ac/ebi/compneur/servlets/WebServiceServlet.java 2015-09-24 14:07:28 UTC (rev 559)
+++ sbfcOnline/src/uk/ac/ebi/compneur/servlets/WebServiceServlet.java 2015-09-24 14:21:55 UTC (rev 560)
@@ -9,27 +9,27 @@
import java.io.PrintStream;
import java.io.StringReader;
import java.net.URL;
+import java.text.MessageFormat;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
import uk.ac.ebi.compneur.config.ConfigParam;
+import uk.ac.ebi.compneur.dbAccess.JobAccess;
+import uk.ac.ebi.compneur.dbAccess.SessionAccess;
/**
* Servlet implementation class WebServiceServlet
*/
public class WebServiceServlet extends HttpServlet {
private static final long serialVersionUID = 1L;
- private int convertNum = 1;
private static String filesPath = ConfigParam.getFromEnvironment(ConfigParam.SBFC_WEBAPP_FILES_NAME);
- private static boolean deleteTmpFiles = true;
+ private static boolean deleteFiles = true; // TODO - Should be made an argument of the query
- // TODO : we need to change the name of the temporary files !!! If two person do a conversion job with the same file name,
- // the file might be overwritten.
-
/**
* @see HttpServlet#HttpServlet()
*/
@@ -41,7 +41,8 @@
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
- response.setContentType("text/html");
+ HttpSession httpSession = request.getSession(true);
+ response.setContentType("text/html");
String inputModelType = null;
String converterType = null;
String method = null;
@@ -61,8 +62,16 @@
//Checking that Parameters are set
if(inputModelType != null && !inputModelType.isEmpty() && converterType != null && !converterType.isEmpty()) {
+ SessionAccess session = new SessionAccess();
+ // Registering the session into the DB
+ session.newSessionRequest();
+
+ // registering the user Id & mail into the session
+ String sessionId = session.getSessionId();
+
//Retrieving model from URL
- if(request.getParameter("url_upload") != null && !request.getParameter("url_upload").isEmpty()) {
+ if(request.getParameter("url_upload") != null && !request.getParameter("url_upload").isEmpty())
+ {
URL url = new URL(request.getParameter("url_upload"));
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));
@@ -76,42 +85,46 @@
//getting filename without extension
int pos_point = request.getParameter("url_upload").lastIndexOf(".");
int pos_dash = request.getParameter("url_upload").lastIndexOf("/");
- /*We add a small number to the fileName to avoid problems
- * if somebody wants to convert several times the same file or
- * a file with the same name during one session
- */
- convertNum= (convertNum+1)%100;
- fileName = request.getParameter("url_upload").substring(pos_dash+1,pos_point).replace(' ', '_')+"_"+convertNum;
-
-
- }
+ int pos_question = request.getParameter("url_upload").lastIndexOf("?");
+
+ if (pos_point != -1 && pos_point > pos_dash) {
+ // we assume that the url end with the extension of the file
+ fileName = request.getParameter("url_upload").substring(pos_dash + 1, pos_point).replace(' ', '_');
+ } else if (pos_question != -1) {
+ // we assume that the url has some parameters and using what is before the question mark as name
+ fileName = request.getParameter("url_upload").substring(pos_dash + 1, pos_question).replace(' ', '_');
+ } else {
+ // we take whatever is after the last '/' as file name
+ fileName = request.getParameter("url_upload").substring(pos_dash + 1).replace(' ', '_');
+ }
+ }
//Converting model from the text_upload
- else if (request.getParameter("text_upload") != null && !request.getParameter("text_upload").isEmpty()) {
+ else if (request.getParameter("text_upload") != null && !request.getParameter("text_upload").isEmpty())
+ {
inputModel = request.getParameter("text_upload");
- convertNum= (convertNum+1)%100;
- fileName = "Conversion_job_"+convertNum;
+ fileName = "Conversion_job";
}
-
-
- //Saving the inputModel in a file
- // System.out.println("WebServiceServlet : Saving the model to '" + filesPath+fileName+".input");
+ // Saving the inputModel in a file
+ System.out.println("WebServiceServlet : Saving the model to '" + filesPath + fileName + "_" + sessionId + ".input");
// System.out.println("WebServiceServlet : input model =\n " + inputModel);
- FileOutputStream fconv = new FileOutputStream (filesPath+fileName+".input");
+ FileOutputStream fconv = new FileOutputStream (filesPath + fileName + "_" + sessionId + ".input");
PrintStream convprint = new PrintStream(fconv);
convprint.println (inputModel);
convprint.flush();
convprint.close();
fconv.close();
Thread.sleep(50);
+
+ // Getting a JobAccess object
+ JobAccess jobAccess = new JobAccess();
+ // Adding the job to the database
+ jobAccess.addJobDB(sessionId, fileName);
+
+ // Launching the conversion job
+ String command = MessageFormat.format(ConfigParam.getFromEnvironment(ConfigParam.SBFC_COMMAND_NAME), fileName + "_" + sessionId, inputModelType, converterType);
- // TODO - use the COMMAND variable ??
- //Launching the conversion job
- String command = "bsub -o "+filesPath+fileName+".bsubout "
- + ConfigParam.getFromEnvironment(ConfigParam.SBFC_HOME_NAME) + "/sbfConverterOnline.sh "
- + inputModelType + " " + converterType + " " + filesPath + fileName + ".input";
-
Process child = Runtime.getRuntime().exec(command);
BufferedReader in = new BufferedReader(new InputStreamReader(child.getInputStream()));
String line = null;
@@ -120,48 +133,51 @@
ret += line;
}
- //retrieving jobId
- String jobId = ret.substring(ret.indexOf("<")+1,ret.indexOf(">"));
+ // retrieving jobId
+ String jobId = "jobId";
- //Waiting because bjobs doesn't register the job immediately
+ if (jobId.startsWith("<")) {
+ ret.substring(ret.indexOf("<")+1,ret.indexOf(">"));
+ }
+
+ // Waiting because bjobs doesn't register the job immediately
while(jobStatus(jobId).compareTo("not found") == 0){
- Thread.sleep(100);
+ Thread.sleep(300);
}
- response.getOutputStream().println(fileName+"_"+jobId);
-
-
+ httpSession.setAttribute("sessionId", sessionId);
+ httpSession.setAttribute("jobId", jobId);
+ response.getOutputStream().println("JOB_SUMMARY " + fileName + " " + sessionId + " " + jobId);
}
}
catch (Exception e) {
//If anything goes wrong, we return an error
- convertNum= (convertNum+1)%100;
response.getOutputStream().println ("##########################################\n" +
"The conversion could not begin, please check the URL provided\n" +
"\n" +
- "Exception details"+e.toString());
-
+ "Exception details" + e.toString());
+ e.printStackTrace();
}
}
- //Method getStatus, returns the jobStatus (pending or done)
+ // Method getStatus, returns the jobStatus (pending or done)
else if(method.compareTo("getStatus") == 0) {
- String jobIdentification = request.getParameter("jobIdent");
- String idJob = jobIdentification.substring(jobIdentification.lastIndexOf("_")+1);
-
-
+ String idJob = request.getParameter("jobId");
response.getOutputStream().println(jobStatus(idJob));
}
- //getResult method, returns converted model
+ // getResult method, returns converted model
else if(method.compareTo("getResult") == 0) {
String jobIdentification = request.getParameter("jobIdent");
- String fileName = jobIdentification.substring(0,jobIdentification.lastIndexOf("_"));
- String idJob = jobIdentification.substring((jobIdentification.lastIndexOf("_")+1));
+ String idJob = request.getParameter("jobId");
+
+ String fileName = jobIdentification;
+ System.out.println("WebServiceServlet - getResult - filename = " + fileName);
+
//checking that the job is finished
if(jobStatus(idJob).compareTo("done") == 0) {
@@ -179,9 +195,15 @@
}
}
+ /**
+ *
+ * @param idJob
+ * @return
+ * @throws IOException
+ */
private String jobStatus(String idJob) throws IOException {
//Launching the conversion job
- String command = "bjobs " + idJob;
+ String command = "echo \"DONE " + idJob + "\""; // TODO - adapt to use a variable define in the context file
Process child = Runtime.getRuntime().exec(command);
BufferedReader in = new BufferedReader(new InputStreamReader(child.getInputStream()));
String line = null;
@@ -212,34 +234,39 @@
return returnState;
}
- private String returnResult(String filename) throws IOException {
- File out = new File(filesPath+filename+".bsubout");
- String returnString = null;
+ /**
+ * @param fileName
+ * @return
+ * @throws IOException
+ */
+ private String returnResult(String fileName) throws IOException {
+ File out = new File(filesPath + fileName + ".done");
+ String returnString = "";
if(out.exists()) {
- //Fetching the result file
- //Listing all the files in the save directory
+ // Fetching the result file
+ // Listing all the files in the save directory
File folder = new File(filesPath);
File[] listOfFiles = folder.listFiles();
- //Deleting files matching idConvert
+ //Deleting files matching fileName
for (int i = 0; i < listOfFiles.length; i++) {
- if (listOfFiles[i].getName().contains(filename)) {
+ if (listOfFiles[i].getName().contains(fileName)) {
//Suppressing conversion files
if(listOfFiles[i].getName().endsWith(".input")) {
- if (deleteTmpFiles) {
+ if (deleteFiles) {
listOfFiles[i].delete();
}
}
- else if(listOfFiles[i].getName().endsWith(".bsubout")) {
- if (deleteTmpFiles) {
+ else if(listOfFiles[i].getName().endsWith(".bsubout") || listOfFiles[i].getName().endsWith(".done")) {
+ if (deleteFiles) {
listOfFiles[i].delete();
}
}
//this is the result file we had to work by elimination as we don't know the extension
else {
returnString = readFileAsString(filesPath+listOfFiles[i].getName());
- if (deleteTmpFiles) {
+ if (deleteFiles) {
listOfFiles[i].delete();
}
}
@@ -249,7 +276,12 @@
return returnString;
}
- private static String readFileAsString(String filePath) throws java.io.IOException{
+ /**
+ * @param filePath
+ * @return
+ * @throws IOException
+ */
+ private static String readFileAsString(String filePath) throws IOException{
BufferedReader in = new BufferedReader(new FileReader(filePath));
String result="";
String line;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <nik...@us...> - 2015-09-24 14:07:31
|
Revision: 559
http://sourceforge.net/p/sbfc/code/559
Author: niko-rodrigue
Date: 2015-09-24 14:07:28 +0000 (Thu, 24 Sep 2015)
Log Message:
-----------
corrected the ws client to make it work properly
Modified Paths:
--------------
webServiceClient/src/org/sbfc/ws/ConvertionId.java
webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java
webServiceClient/src/org/sbfc/ws/UsageExample.java
Modified: webServiceClient/src/org/sbfc/ws/ConvertionId.java
===================================================================
--- webServiceClient/src/org/sbfc/ws/ConvertionId.java 2015-09-24 13:52:51 UTC (rev 558)
+++ webServiceClient/src/org/sbfc/ws/ConvertionId.java 2015-09-24 14:07:28 UTC (rev 559)
@@ -7,16 +7,43 @@
*
*/
public class ConvertionId {
-
- private String identificationId;
- public String getIdentificationId() {
- return identificationId;
- }
+ private String identificationId;
+ private String sessionId;
+ private String jobId;
- public void setIdentificationId(String identificationId) {
- this.identificationId = identificationId;
- }
-
+ public String getIdentificationId() {
+ return identificationId;
+ }
+ public void setIdentificationId(String identificationId) {
+ this.identificationId = identificationId;
+ }
+
+ public String getSessionId() {
+ return sessionId;
+ }
+
+ public void setSessionId(String sessionId) {
+ this.sessionId = sessionId;
+ }
+
+ public String getJobId() {
+ return jobId;
+ }
+
+ public void setJobId(String jobId) {
+ this.jobId = jobId;
+ }
+
+ /* (non-Javadoc)
+ * @see java.lang.Object#toString()
+ */
+ @Override
+ public String toString() {
+ return "ConvertionId [identificationId=" + identificationId
+ + ", sessionId=" + sessionId + ", jobId=" + jobId + "]";
+ }
+
+
}
Modified: webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java
===================================================================
--- webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java 2015-09-24 13:52:51 UTC (rev 558)
+++ webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java 2015-09-24 14:07:28 UTC (rev 559)
@@ -55,7 +55,7 @@
//Sending POST request to the server
- convertionId.setIdentificationId(sendPostRequest(data));
+ sendPostRequest(data, convertionId);
return convertionId;
}
@@ -77,7 +77,7 @@
//Sending POST request to the server
- convertionId.setIdentificationId(sendPostRequest(data));
+ sendPostRequest(data, convertionId);
return convertionId;
}
@@ -93,10 +93,11 @@
String status=null;
//Build parameter string
- String data = "method=getStatus&jobIdent="+convertionId.getIdentificationId();
+ String data = "method=getStatus&jobIdent="+convertionId.getIdentificationId()
+ + "&sessionId=" + convertionId.getSessionId() + "&jobId=" + convertionId.getJobId();
//sending POST request to the server
- status = sendPostRequest(data);
+ status = sendPostRequest(data, new ConvertionId());
return status;
@@ -145,21 +146,22 @@
/**
* Retrieve the result model as a String
+ * <p>WARNING ! : this method can be called only once per Conversion job as it will destroy all the related conversion Files on the Server"
*
* @param convertionId
* @return converted model or errorLog
*/
public String getConvertionResult(ConvertionId convertionId) {
- String model=null;
+ String model = null;
- // TODO - check that affirmation, I don't think it is true: "WARNING ! : this method can be called only once per Conversion job as it will destroy the conversion Files on the Server"
- // TODO - if true, may be we should change the behavior or provide several methods, some deleting, some not
+ // TODO - may be we should change the behavior or provide several methods, some deleting the files, some not. And saying that everything will be deleted anyway after 72H
//Build parameter string
- String data = "method=getResult&jobIdent=" + convertionId.getIdentificationId();
+ String data = "method=getResult&jobIdent=" + convertionId.getIdentificationId()
+ + "&sessionId=" + convertionId.getSessionId() + "&jobId=" + convertionId.getJobId();
//sending POST request to the server
- model = sendPostRequest(data);
+ model = sendPostRequest(data, new ConvertionId());
return model;
}
@@ -170,7 +172,7 @@
* @param data
* @return
*/
- private String sendPostRequest(String data) {
+ private String sendPostRequest(String data, ConvertionId convertionIds) {
String answer = "";
try {
@@ -190,16 +192,26 @@
BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
- answer+= line;
+ answer += line;
+
if (data.startsWith("method=getResult")) {
answer += "\n";
}
}
writer.close();
reader.close();
+
+ if (answer.startsWith("JOB_SUMMARY")) {
+ String[] ids = answer.split(" ");
+
+ convertionIds.setIdentificationId(ids[1] + "_" + ids[2]);
+
+ convertionIds.setSessionId(ids[2]);
+ convertionIds.setJobId(ids[3]);
+
+ // System.out.println("Found the following ids for this job: " + convertionIds);
+ }
-
-
} catch (MalformedURLException ex) {
ex.printStackTrace();
} catch (IOException ex) {
Modified: webServiceClient/src/org/sbfc/ws/UsageExample.java
===================================================================
--- webServiceClient/src/org/sbfc/ws/UsageExample.java 2015-09-24 13:52:51 UTC (rev 558)
+++ webServiceClient/src/org/sbfc/ws/UsageExample.java 2015-09-24 14:07:28 UTC (rev 559)
@@ -23,7 +23,8 @@
String convertionResult;
//Creating the link to the web service
- SBFCWebServiceClient link = new SBFCWebServiceClient();
+ // SBFCWebServiceClient link = new SBFCWebServiceClient();
+ SBFCWebServiceClient link = new SBFCWebServiceClient("http://localhost:8080/biomodels/tools/converters/webService");
//URL pointing to the model to convert
String modelURL = "http://www.ebi.ac.uk/biomodels/models-main/publ/BIOMD0000000001/BIOMD0000000001.xml";
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <pd...@us...> - 2015-09-24 13:52:53
|
Revision: 558
http://sourceforge.net/p/sbfc/code/558
Author: pdp10
Date: 2015-09-24 13:52:51 +0000 (Thu, 24 Sep 2015)
Log Message:
-----------
Created a new converter package 'sbfc-antimony'.
Added converters sbml2antimony and antimony2sbml.
Added Paths:
-----------
converters/sbfc-antimony/
converters/sbfc-antimony/build.xml
converters/sbfc-antimony/doc/
converters/sbfc-antimony/lib/
converters/sbfc-antimony/src/
converters/sbfc-antimony/src/org/
converters/sbfc-antimony/src/org/sbfc/
converters/sbfc-antimony/src/org/sbfc/converter/
converters/sbfc-antimony/src/org/sbfc/converter/antimony2sbml/
converters/sbfc-antimony/src/org/sbfc/converter/antimony2sbml/Antimony2SBML.java
converters/sbfc-antimony/src/org/sbfc/converter/cellml2sbml/
converters/sbfc-antimony/src/org/sbfc/converter/cellml2sbml/CellML2SBML.java
converters/sbfc-antimony/src/org/sbfc/converter/models/
converters/sbfc-antimony/src/org/sbfc/converter/models/AntimonyModel.java
converters/sbfc-antimony/src/org/sbfc/converter/models/CellMLModel.java
converters/sbfc-antimony/src/org/sbfc/converter/sbml2antimony/
converters/sbfc-antimony/src/org/sbfc/converter/sbml2antimony/SBML2Antimony.java
Added: converters/sbfc-antimony/build.xml
===================================================================
--- converters/sbfc-antimony/build.xml (rev 0)
+++ converters/sbfc-antimony/build.xml 2015-09-24 13:52:51 UTC (rev 558)
@@ -0,0 +1,261 @@
+<?xml version="1.0"?>
+<!-- $Id$ -->
+
+<project default ="usage" basedir=".">
+ <!-- =================================================================== -->
+ <!-- Initialization target -->
+ <!-- =================================================================== -->
+
+ <target name="init">
+ <tstamp>
+ <format property="YEAR" pattern="yyyy"/>
+ </tstamp>
+ <property name="Name" value="Antimony Converters"/>
+ <property name="name" value="sbfc-antimony"/>
+ <property name="version" value="1.0"/>
+
+ <property name="year" value="${YEAR}"/>
+
+ <echo message="----------- ${Name} ${version} [${year}] ------------"/>
+ <echo message="----------- ${TODAY} ------------"/>
+ <echo message="----------- ${DSTAMP} ${TSTAMP} ------------"/>
+
+ <property environment="env"/>
+ <property name="build.compiler" value="modern"/>
+ <property name="build.sysclasspath" value="ignore"/>
+ <property name="debug" value="on"/>
+ <property name="optimize" value="off"/>
+ <property name="deprecation" value="false"/>
+ <property name="depend" value="true"/>
+ <property name="verbose" value="false"/>
+
+ <property name="build.number" value="${DSTAMP}-${TSTAMP}"/>
+ <property name="build.name" value="${version} (build ${build.number})"/>
+
+ <property name="src.dir" value="${basedir}/src"/>
+ <property name="build.dir" value="${basedir}/build"/>
+ <property name="build.src" value="${basedir}/build/src"/>
+ <property name="build.dest" value="${basedir}/build/classes"/>
+ <property name="build.javadocs" value="${basedir}/build/apidocs"/>
+ <property name="jars.dir" value="${basedir}/lib"/>
+ <property name="dist.root" value="${basedir}/dist"/>
+ <property name="dist.dir" value="${dist.root}/${name}-${version}"/>
+ <property name="package.dir" value="${basedir}/build/package"/>
+
+ <property name="sbfc.dir" value="../../trunk"/>
+ <property name="sbfc.jars.dir" value="${sbfc.dir}/lib"/>
+
+ <filter token="year" value="${year}"/>
+ <filter token="version" value="${version}"/>
+ <filter token="date" value="${TODAY}"/>
+ <filter token="log" value="true"/>
+ <filter token="verbose" value="true"/>
+
+ <!-- add everything needed to the classpath -->
+ <!-- adjust the settings to your local environment -->
+ <path id="sbfc.classpath">
+ <fileset dir="${jars.dir}">
+ <include name="*.jar"/>
+ <exclude name="{name}.jar"/>
+ </fileset>
+ <fileset dir="${sbfc.jars.dir}">
+ <include name="*.jar"/>
+ <exclude name="{name}.jar"/>
+ </fileset>
+ </path>
+ </target>
+
+
+ <!-- =================================================================== -->
+ <!-- Help on usage -->
+ <!-- =================================================================== -->
+ <target name="usage" depends="init">
+ <echo message=""/>
+ <echo message=""/>
+ <echo message="${Name} Build file"/>
+ <echo message="-------------------------------------------------------------"/>
+ <echo message=""/>
+ <echo message=" available targets are:"/>
+ <echo message=""/>
+ <echo message=" compile --> compiles the source code"/>
+ <echo message=" jar --> generates the ${name}-${version}.jar file"/>
+ <echo message=" javadoc --> generates the API documentation"/>
+ <echo message=" clean --> cleans up the directory"/>
+ <echo message=""/>
+ <echo message=" See the comments inside the build.xml file for more details."/>
+ <echo message="-------------------------------------------------------------"/>
+ <echo message=""/>
+ <echo message=""/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Prepares the build directory -->
+ <!-- =================================================================== -->
+ <target name="prepare" depends="init">
+ <mkdir dir="${build.dir}"/>
+ <echo message="Done"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Prepares the source code -->
+ <!-- =================================================================== -->
+ <target name="prepare-src" depends="prepare">
+ <!-- create directories -->
+ <mkdir dir="${build.src}"/>
+ <mkdir dir="${build.dest}"/>
+ <mkdir dir="${package.dir}"/>
+ <mkdir dir="${dist.root}"/>
+ <mkdir dir="${dist.dir}"/>
+ <mkdir dir="${dist.dir}/log"/>
+
+
+ <!-- copy src files -->
+ <copy todir="${build.src}" overwrite="yes">
+ <fileset dir="${src.dir}"
+ excludes="**/*.class, **/*~, **/*.tgz">
+ </fileset>
+ </copy>
+ <copy todir="${build.src}" overwrite="yes">
+ <fileset dir="${basedir}"
+ includes="log4j.properties">
+ </fileset>
+ </copy>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Compiles the source directory -->
+ <!-- =================================================================== -->
+ <target name="compile" depends="prepare-src">
+ <javac srcdir="${build.src}"
+ destdir="${build.dest}"
+ debug="${debug}"
+ optimize="${optimize}"
+ verbose="${verbose}"
+ source="1.7"
+ target="1.7"
+ classpathref="sbfc.classpath">
+ </javac>
+ </target>
+
+
+ <!-- =================================================================== -->
+ <!-- Creates the class package -->
+ <!-- =================================================================== -->
+ <target name="jar" depends="compile">
+
+ <copy todir="${build.dest}">
+ <fileset dir="${build.src}"
+ includes="**/*.png **/*.gif **/*.xsd **/*.xsl **/data/* **/*.xml **/*.properties">
+ </fileset>
+ </copy>
+
+ <jar jarfile="${build.dir}/${name}-${version}.jar" basedir="${build.dest}"/>
+
+ <copy todir="${basedir}/lib" preservelastmodified="true" overwrite="true" verbose="true">
+ <fileset dir="${build.dir}"
+ includes="${name}-${version}.jar">
+ </fileset>
+ </copy>
+ </target>
+
+
+
+ <!-- =================================================================== -->
+ <!-- Creates the distribution -->
+ <!-- =================================================================== -->
+ <target name="dist" depends="prepare-src">
+
+ <!-- Creates the standard jar file -->
+
+ <antcall target="clean"/>
+
+ <antcall target="jar"/>
+
+ <copy todir="${dist.dir}" file="${build.dir}/${name}-${version}.jar"/>
+ <copy todir="${dist.root}" file="${build.dir}/${name}-${version}.jar"/>
+
+ <!-- Creates and copy the generated javadoc -->
+ <antcall target="javadoc"/>
+
+ <copy todir="${dist.dir}/doc/api">
+ <fileset dir="${build.javadocs}/" includes="**/*">
+ </fileset>
+ </copy>
+
+ <!-- Copy the source files -->
+ <copy todir="${dist.dir}/src">
+ <fileset dir="${build.src}/" includes="**/*">
+ </fileset>
+ </copy>
+
+ <!-- Copy all the dependencies jar files -->
+ <copy todir="${dist.dir}/lib">
+ <fileset dir="${jars.dir}/" includes="*.jar">
+ </fileset>
+ </copy>
+
+ <!--
+ <copy todir="${dist.dir}">
+ <fileset dir="${basedir}/" includes="LICENSE.txt NEWS.txt README *.sh src/**/*.properties src/**/*.xml log4j.properties build.x miriam.xml">
+ </fileset>
+ </copy>
+ -->
+ <chmod dir="${dist.dir}" perm="ugo+rx" includes="*.sh"/>
+
+
+ <copy todir="${dist.dir}/doc">
+ <fileset dir="${basedir}/doc" includes="**/*.pdf **/*.jpg **/*.java">
+
+ </fileset>
+ </copy>
+
+ <!-- Creates the archives to be distributed -->
+ <zip destfile="${dist.root}/${name}-${version}.zip">
+ <zipfileset dir="${dist.root}" filemode="755" includes="${name}-${version}/*.sh"/>
+ <zipfileset dir="${dist.root}" includes="${name}-${version}/**" excludes="${name}-${version}/*.sh"/>
+ </zip>
+
+ <tar destfile="${dist.root}/${name}-${version}.tar.gz" compression="gzip">
+ <tarfileset dir="${dist.root}" filemode="755" includes="${name}-${version}/*.sh"/>
+ <tarfileset dir="${dist.root}" includes="${name}-${version}/**" excludes="${name}-${version}/*.sh"/>
+ </tar>
+
+
+ </target>
+
+
+ <!-- =================================================================== -->
+ <!-- Creates the API documentation -->
+ <!-- =================================================================== -->
+ <target name="javadoc" depends="prepare-src">
+ <mkdir dir="${build.javadocs}"/>
+ <javadoc packagenames="org.*"
+ sourcepath="${build.src}"
+ destdir="${build.javadocs}"
+ classpathref="sbfc.classpath"
+ maxmemory="256m"
+ author="true"
+ version="true"
+ use="true"
+ splitindex="true"
+ noindex="false"
+ windowtitle="${Name} API"
+ doctitle="${Name}"
+ breakiterator="yes"
+ >
+ <link href="http://java.sun.com/j2se/1.5.0/docs/api"/>
+ </javadoc>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Cleans everything -->
+ <!-- =================================================================== -->
+ <target name="clean" depends="init">
+ <delete includeEmptyDirs="true" quiet="yes">
+ <fileset dir="${build.dir}" includes="**"/>
+ </delete>
+ <delete dir="${dist.root}" includeEmptyDirs="true" quiet="yes"/>
+ </target>
+</project>
+
+<!-- End of file -->
Added: converters/sbfc-antimony/src/org/sbfc/converter/antimony2sbml/Antimony2SBML.java
===================================================================
--- converters/sbfc-antimony/src/org/sbfc/converter/antimony2sbml/Antimony2SBML.java (rev 0)
+++ converters/sbfc-antimony/src/org/sbfc/converter/antimony2sbml/Antimony2SBML.java 2015-09-24 13:52:51 UTC (rev 558)
@@ -0,0 +1,123 @@
+package org.sbfc.converter.antimony2sbml;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+import org.sbfc.converter.GeneralConverter;
+import org.sbfc.converter.exceptions.ConversionException;
+import org.sbfc.converter.exceptions.ReadModelException;
+import org.sbfc.converter.exceptions.WriteModelException;
+import org.sbfc.converter.models.GeneralModel;
+import org.sbfc.converter.models.SBMLModel;
+
+/**
+ * This converter uses an external program to convert from Antimony to SBML using
+ * antimony (http://antimony.sourceforge.net/).
+ */
+public class Antimony2SBML extends GeneralConverter {
+
+ /**
+ * Path to the antimony sbtranslate binary. Alternatively, this can be a command
+ * if the env var PATH has been configured including it.
+ */
+ public final static String PROGRAM = "sbtranslate";
+
+ /** Creates a new instance. */
+ public Antimony2SBML() { super(); }
+
+ @Override
+ public GeneralModel convert(GeneralModel model)
+ throws ConversionException, ReadModelException {
+ try {
+ //
+ // 1. Dealing with the input format
+ //
+ // We first need to save the model into a temporary file so that the
+ // external program can read it.
+ // GeneralModel does not store the original file location and it can
+ // also be initialize directly from String.
+
+ // We could check here that the input format correspond to Antimony.
+
+ // creating the temporary file
+ File inputFile = File.createTempFile("antimony-", ".txt");
+
+ // writing the model to the temporary file
+ model.modelToFile(inputFile.getAbsolutePath());
+
+ //
+ // 2. Running the external program
+ //
+
+ // creating a second temporary file for the output
+ File outputFile = File.createTempFile("sbml-", ".xml");
+
+ // using the Runtime exec method to run the external program:
+ Process p = Runtime.getRuntime().exec(PROGRAM + " -o sbml-comp -outfile "
+ + outputFile.getAbsolutePath() + " " + inputFile.getAbsolutePath());
+ // waiting for the program to finish.
+ p.waitFor();
+
+ // read the output messages from the command
+ BufferedReader stdInput = new BufferedReader(new
+ InputStreamReader(p.getInputStream()));
+ String line;
+
+ while ((line = stdInput.readLine()) != null) {
+ // You might want to read the process output to check that the conversion went fine
+ // and if not, you can throw an exception with an appropriate error message.
+ System.out.println("Output: " + line);
+ }
+
+ // read the error messages from the command
+ BufferedReader stdError = new BufferedReader(new
+ InputStreamReader(p.getErrorStream()));
+
+ while ((line = stdError.readLine()) != null) {
+ // You might want to read the process error output to check that the conversion went fine
+ // and if not, you can throw an exception with an appropriate error message.
+ System.out.println("Errors: " + line);
+ if (line.startsWith("Segmentation fault")) {
+ throw new ConversionException("Encountered a Segmentation fault while running antimony !!");
+ }
+ }
+
+ //
+ // 3. Returning the output format
+ //
+
+ // creating a new empty SBMLModel
+ GeneralModel outputModel = new SBMLModel();
+
+ // reading the output file into the SBMLModel
+ outputModel.setModelFromFile(outputFile.getAbsolutePath());
+
+ return outputModel;
+ }
+ catch (IOException e) {
+ throw new ReadModelException(e);
+ } catch (WriteModelException e) {
+ throw new ReadModelException(e);
+ } catch (InterruptedException e) {
+ throw new ReadModelException(e);
+ }
+ }
+
+ @Override
+ public String getResultExtension() { return ".xml"; }
+
+ @Override
+ public String getName() { return "Antimony2SBML"; }
+
+ @Override
+ public String getDescription() {
+ return "Convert an Antimony model to SBML";
+ }
+
+ @Override
+ public String getHtmlDescription() {
+ return "Convert an Antimony model to SBML";
+ }
+}
Added: converters/sbfc-antimony/src/org/sbfc/converter/cellml2sbml/CellML2SBML.java
===================================================================
--- converters/sbfc-antimony/src/org/sbfc/converter/cellml2sbml/CellML2SBML.java (rev 0)
+++ converters/sbfc-antimony/src/org/sbfc/converter/cellml2sbml/CellML2SBML.java 2015-09-24 13:52:51 UTC (rev 558)
@@ -0,0 +1,127 @@
+package org.sbfc.converter.cellml2sbml;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+import org.sbfc.converter.GeneralConverter;
+import org.sbfc.converter.exceptions.ConversionException;
+import org.sbfc.converter.exceptions.ReadModelException;
+import org.sbfc.converter.exceptions.WriteModelException;
+import org.sbfc.converter.models.GeneralModel;
+import org.sbfc.converter.models.SBMLModel;
+
+/**
+ * This converter will use an external program to
+ * do the conversion. As an example, we will convert from CellML to SBML using
+ * antimony (http://antimony.sourceforge.net/).
+ *
+ * <p>By using this template, you can easily add a new converter that
+ * call an external program.
+ */
+public class CellML2SBML extends GeneralConverter {
+
+ /**
+ * Path to the antimony sbtranslate binary. Alternatively, this can be a command
+ * if the env var PATH has been configured including it.
+ */
+ public final static String PROGRAM = "sbtranslate";
+
+ /** Creates a new instance. */
+ public CellML2SBML() { super(); }
+
+ @Override
+ public GeneralModel convert(GeneralModel model)
+ throws ConversionException, ReadModelException {
+ try {
+ //
+ // 1. Dealing with the input format
+ //
+ // We first need to save the model into a temporary file so that the
+ // external program can read it.
+ // GeneralModel does not store the original file location and it can
+ // also be initialize directly from String.
+
+ // We could check here that the input format correspond to the CellML URI.
+
+ // creating the temporary file
+ File inputFile = File.createTempFile("cellml-", ".xml");
+
+ // writing the model to the temporary file
+ model.modelToFile(inputFile.getAbsolutePath());
+
+ //
+ // 2. Running the external program
+ //
+
+ // creating a second temporary file for the output
+ File outputFile = File.createTempFile("sbml-", ".xml");
+
+ // using the Runtime exec method to run the external program:
+ Process p = Runtime.getRuntime().exec(PROGRAM + " -o sbml-comp -outfile "
+ + outputFile.getAbsolutePath() + " " + inputFile.getAbsolutePath());
+ // waiting for the program to finish.
+ p.waitFor();
+
+ // read the output messages from the command
+ BufferedReader stdInput = new BufferedReader(new
+ InputStreamReader(p.getInputStream()));
+ String line;
+
+ while ((line = stdInput.readLine()) != null) {
+ // You might want to read the process output to check that the conversion went fine
+ // and if not, you can throw an exception with an appropriate error message.
+ System.out.println("Output: " + line);
+ }
+
+ // read the error messages from the command
+ BufferedReader stdError = new BufferedReader(new
+ InputStreamReader(p.getErrorStream()));
+
+ while ((line = stdError.readLine()) != null) {
+ // You might want to read the process error output to check that the conversion went fine
+ // and if not, you can throw an exception with an appropriate error message.
+ System.out.println("Errors: " + line);
+ if (line.startsWith("Segmentation fault")) {
+ throw new ConversionException("Encountered a Segmentation fault while running antomony !!");
+ }
+ }
+
+ //
+ // 3. Returning the output format
+ //
+
+ // creating a new empty SBMLModel
+ GeneralModel outputModel = new SBMLModel();
+
+ // reading the output file into the SBMLModel
+ outputModel.setModelFromFile(outputFile.getAbsolutePath());
+
+ return outputModel;
+ }
+ catch (IOException e) {
+ throw new ReadModelException(e);
+ } catch (WriteModelException e) {
+ throw new ReadModelException(e);
+ } catch (InterruptedException e) {
+ throw new ReadModelException(e);
+ }
+ }
+
+ @Override
+ public String getResultExtension() { return ".xml"; }
+
+ @Override
+ public String getName() { return "CellML2SBML"; }
+
+ @Override
+ public String getDescription() {
+ return "Convert a CellML model to SBML";
+ }
+
+ @Override
+ public String getHtmlDescription() {
+ return "Convert a CellML model to SBML";
+ }
+}
Added: converters/sbfc-antimony/src/org/sbfc/converter/models/AntimonyModel.java
===================================================================
--- converters/sbfc-antimony/src/org/sbfc/converter/models/AntimonyModel.java (rev 0)
+++ converters/sbfc-antimony/src/org/sbfc/converter/models/AntimonyModel.java 2015-09-24 13:52:51 UTC (rev 558)
@@ -0,0 +1,25 @@
+package org.sbfc.converter.models;
+
+import java.io.File;
+
+/**
+ * A {@link StringModel} representing an Antimony model (http://antimony.sourceforge.net/).
+ */
+public class AntimonyModel extends StringModel {
+
+ @Override
+ public String[] getExtensions() {
+ return new String[] { ".txt" };
+ }
+
+ @Override
+ public boolean isCorrectType(File f) {
+ return true;
+ }
+
+ @Override
+ public String getURI() {
+ return "text/plain";
+ }
+
+}
Added: converters/sbfc-antimony/src/org/sbfc/converter/models/CellMLModel.java
===================================================================
--- converters/sbfc-antimony/src/org/sbfc/converter/models/CellMLModel.java (rev 0)
+++ converters/sbfc-antimony/src/org/sbfc/converter/models/CellMLModel.java 2015-09-24 13:52:51 UTC (rev 558)
@@ -0,0 +1,28 @@
+package org.sbfc.converter.models;
+
+import java.io.File;
+
+/**
+ * A {@link StringModel} representing a CellML model (http://www.cellml.org).
+ *
+ * @author rodrigue
+ *
+ */
+public class CellMLModel extends StringModel {
+
+ @Override
+ public String[] getExtensions() {
+ return new String[] { ".cellml", ".xml" };
+ }
+
+ @Override
+ public boolean isCorrectType(File f) {
+ return true;
+ }
+
+ @Override
+ public String getURI() {
+ return "http://identifiers.org/combine.specifications/cellml";
+ }
+
+}
Added: converters/sbfc-antimony/src/org/sbfc/converter/sbml2antimony/SBML2Antimony.java
===================================================================
--- converters/sbfc-antimony/src/org/sbfc/converter/sbml2antimony/SBML2Antimony.java (rev 0)
+++ converters/sbfc-antimony/src/org/sbfc/converter/sbml2antimony/SBML2Antimony.java 2015-09-24 13:52:51 UTC (rev 558)
@@ -0,0 +1,123 @@
+package org.sbfc.converter.sbml2antimony;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.IOException;
+import java.io.InputStreamReader;
+
+import org.sbfc.converter.GeneralConverter;
+import org.sbfc.converter.exceptions.ConversionException;
+import org.sbfc.converter.exceptions.ReadModelException;
+import org.sbfc.converter.exceptions.WriteModelException;
+import org.sbfc.converter.models.AntimonyModel;
+import org.sbfc.converter.models.GeneralModel;
+
+/**
+ * This converter uses an external program to convert from SBML to Antimony using
+ * antimony (http://antimony.sourceforge.net/).
+ */
+public class SBML2Antimony extends GeneralConverter {
+
+ /**
+ * Path to the antimony sbtranslate binary. Alternatively, this can be a command
+ * if the env var PATH has been configured including it.
+ */
+ public final static String PROGRAM = "sbtranslate";
+
+ /** Creates a new instance. */
+ public SBML2Antimony() { super(); }
+
+ @Override
+ public GeneralModel convert(GeneralModel model)
+ throws ConversionException, ReadModelException {
+ try {
+ //
+ // 1. Dealing with the input format
+ //
+ // We first need to save the model into a temporary file so that the
+ // external program can read it.
+ // GeneralModel does not store the original file location and it can
+ // also be initialize directly from String.
+
+ // We could check here that the input format correspond to SBML.
+
+ // creating the temporary file
+ File inputFile = File.createTempFile("sbml-", ".xml");
+
+ // writing the model to the temporary file
+ model.modelToFile(inputFile.getAbsolutePath());
+
+ //
+ // 2. Running the external program
+ //
+
+ // creating a second temporary file for the output
+ File outputFile = File.createTempFile("antimony-", ".txt");
+
+ // using the Runtime exec method to run the external program:
+ Process p = Runtime.getRuntime().exec(PROGRAM + " -o antimony -outfile "
+ + outputFile.getAbsolutePath() + " " + inputFile.getAbsolutePath());
+ // waiting for the program to finish.
+ p.waitFor();
+
+ // read the output messages from the command
+ BufferedReader stdInput = new BufferedReader(new
+ InputStreamReader(p.getInputStream()));
+ String line;
+
+ while ((line = stdInput.readLine()) != null) {
+ // You might want to read the process output to check that the conversion went fine
+ // and if not, you can throw an exception with an appropriate error message.
+ System.out.println("Output: " + line);
+ }
+
+ // read the error messages from the command
+ BufferedReader stdError = new BufferedReader(new
+ InputStreamReader(p.getErrorStream()));
+
+ while ((line = stdError.readLine()) != null) {
+ // You might want to read the process error output to check that the conversion went fine
+ // and if not, you can throw an exception with an appropriate error message.
+ System.out.println("Errors: " + line);
+ if (line.startsWith("Segmentation fault")) {
+ throw new ConversionException("Encountered a Segmentation fault while running antimony !!");
+ }
+ }
+
+ //
+ // 3. Returning the output format
+ //
+
+ // creating a new empty AntimonyModel
+ GeneralModel outputModel = new AntimonyModel();
+
+ // reading the output file into the AntimonyModel
+ outputModel.setModelFromFile(outputFile.getAbsolutePath());
+
+ return outputModel;
+ }
+ catch (IOException e) {
+ throw new ReadModelException(e);
+ } catch (WriteModelException e) {
+ throw new ReadModelException(e);
+ } catch (InterruptedException e) {
+ throw new ReadModelException(e);
+ }
+ }
+
+ @Override
+ public String getResultExtension() { return ".txt"; }
+
+ @Override
+ public String getName() { return "SBML2Antimony"; }
+
+ @Override
+ public String getDescription() {
+ return "Convert an SBML model to Antimony";
+ }
+
+ @Override
+ public String getHtmlDescription() {
+ return "Convert an SBML model to Antimony";
+ }
+}
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <nik...@us...> - 2015-09-24 12:23:37
|
Revision: 557
http://sourceforge.net/p/sbfc/code/557
Author: niko-rodrigue
Date: 2015-09-24 12:23:34 +0000 (Thu, 24 Sep 2015)
Log Message:
-----------
first commit of the web service client, code transfered from the ebi svn repository
Added Paths:
-----------
webServiceClient/
webServiceClient/build.xml
webServiceClient/lib/
webServiceClient/src/
webServiceClient/src/org/
webServiceClient/src/org/sbfc/
webServiceClient/src/org/sbfc/ws/
webServiceClient/src/org/sbfc/ws/ConverterParam.java
webServiceClient/src/org/sbfc/ws/ConvertionId.java
webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java
webServiceClient/src/org/sbfc/ws/UsageExample.java
Index: webServiceClient
===================================================================
--- webServiceClient 2015-09-24 09:07:32 UTC (rev 556)
+++ webServiceClient 2015-09-24 12:23:34 UTC (rev 557)
Property changes on: webServiceClient
___________________________________________________________________
Added: svn:ignore
## -0,0 +1,12 ##
+build
+.classpath
+.project
+dist
+.settings
+bin
+data
+TAGS
+*.log
+*.xpp
+*.m
+*.owl
Added: webServiceClient/build.xml
===================================================================
--- webServiceClient/build.xml (rev 0)
+++ webServiceClient/build.xml 2015-09-24 12:23:34 UTC (rev 557)
@@ -0,0 +1,242 @@
+<?xml version="1.0"?>
+<!-- $Id: build.xml 525 2015-09-16 12:49:00Z niko-rodrigue $ -->
+
+<project default ="usage" basedir=".">
+ <!-- =================================================================== -->
+ <!-- Initialization target -->
+ <!-- =================================================================== -->
+
+ <target name="init">
+ <tstamp>
+ <format property="YEAR" pattern="yyyy"/>
+ </tstamp>
+ <property name="Name" value="SBFC webservices client"/>
+ <property name="name" value="sbfc-ws-client"/>
+ <property name="version" value="1.0"/>
+
+ <property name="year" value="${YEAR}"/>
+
+ <echo message="----------- ${Name} ${version} [${year}] ------------"/>
+ <echo message="----------- ${TODAY} ------------"/>
+ <echo message="----------- ${DSTAMP} ${TSTAMP} ------------"/>
+
+ <property environment="env"/>
+ <property name="build.compiler" value="modern"/>
+ <property name="build.sysclasspath" value="ignore"/>
+ <property name="debug" value="on"/>
+ <property name="optimize" value="off"/>
+ <property name="deprecation" value="false"/>
+ <property name="depend" value="true"/>
+ <property name="verbose" value="false"/>
+
+ <property name="build.number" value="${DSTAMP}-${TSTAMP}"/>
+ <property name="build.name" value="${version} (build ${build.number})"/>
+
+ <property name="src.dir" value="${basedir}/src"/>
+ <property name="build.dir" value="${basedir}/build"/>
+ <property name="build.src" value="${basedir}/build/src"/>
+ <property name="build.dest" value="${basedir}/build/classes"/>
+ <property name="build.javadocs" value="${basedir}/build/apidocs"/>
+ <property name="jars.dir" value="${basedir}/lib"/>
+ <property name="dist.root" value="${basedir}/dist"/>
+ <property name="dist.dir" value="${dist.root}/${name}-${version}"/>
+ <property name="package.dir" value="${basedir}/build/package"/>
+
+ <filter token="year" value="${year}"/>
+ <filter token="version" value="${version}"/>
+ <filter token="date" value="${TODAY}"/>
+ <filter token="log" value="true"/>
+ <filter token="verbose" value="true"/>
+
+ <!-- add everything needed to the classpath -->
+ <!-- adjust the settings to your local environment -->
+ <path id="sbfc.classpath">
+ <fileset dir="${jars.dir}">
+ <include name="*.jar"/>
+ <exclude name="{name}.jar"/>
+ </fileset>
+ </path>
+ </target>
+
+
+ <!-- =================================================================== -->
+ <!-- Help on usage -->
+ <!-- =================================================================== -->
+ <target name="usage" depends="init">
+ <echo message=""/>
+ <echo message=""/>
+ <echo message="${Name} Build file"/>
+ <echo message="-------------------------------------------------------------"/>
+ <echo message=""/>
+ <echo message="The ${Name} aims to provide an API to use SBFC through "/>
+ <echo message="webservices. "/>
+ <echo message="It is written in Java and released under LGPL v2 License. "/>
+ <echo message=""/>
+ <echo message="In order to use this build file, the user should run the command 'ant target', "/>
+ <echo message="where target is one of the following options:"/>
+ <echo message=""/>
+ <echo message=" compile --> compile the source code"/>
+ <echo message=" jar --> generate the ${name}-${version}.jar file"/>
+ <echo message=" javadoc --> generate the API documentation (javadoc)"/>
+ <echo message=" clean --> clean up the directory"/>
+ <echo message=""/>
+ <echo message=" See the comments inside the build.xml file for more details."/>
+ <echo message="-------------------------------------------------------------"/>
+ <echo message=""/>
+ <echo message=""/>
+ </target>
+
+
+ <!-- =================================================================== -->
+ <!-- Prepares the build directory -->
+ <!-- =================================================================== -->
+ <target name="prepare" depends="init">
+ <mkdir dir="${build.dir}"/>
+ <echo message="Done"/>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Prepares the source code -->
+ <!-- =================================================================== -->
+ <target name="prepare-src" depends="prepare">
+ <!-- create directories -->
+ <mkdir dir="${build.src}"/>
+ <mkdir dir="${build.dest}"/>
+ <mkdir dir="${package.dir}"/>
+ <mkdir dir="${dist.root}"/>
+ <mkdir dir="${dist.dir}"/>
+ <mkdir dir="${dist.dir}/log"/>
+
+
+ <!-- copy src files -->
+ <copy todir="${build.src}" overwrite="yes">
+ <fileset dir="${src.dir}"
+ excludes="**/CVS*, **/*.class, **/*~, **/*.tgz">
+ </fileset>
+ </copy>
+ <copy todir="${build.src}" overwrite="yes">
+ <fileset dir="${basedir}"
+ includes="log4j.properties">
+ </fileset>
+ </copy>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Compiles the source directory -->
+ <!-- =================================================================== -->
+ <target name="compile" depends="prepare-src">
+ <javac srcdir="${build.src}"
+ destdir="${build.dest}"
+ debug="${debug}"
+ optimize="${optimize}"
+ verbose="${verbose}"
+ source="1.6"
+ target="1.6"
+ classpathref="sbfc.classpath">
+ </javac>
+ </target>
+
+
+ <!-- =================================================================== -->
+ <!-- Creates the class package -->
+ <!-- =================================================================== -->
+ <target name="jar" depends="compile">
+
+ <copy todir="${build.dest}">
+ <fileset dir="${build.src}"
+ includes="**/*.png **/*.gif **/*.xsd **/*.xsl **/data/* **/*.xml **/*.properties">
+ </fileset>
+ </copy>
+
+ <jar jarfile="${build.dir}/${name}-${version}.jar" basedir="${build.dest}"/>
+
+ <copy todir="${basedir}/lib" preservelastmodified="true" overwrite="true" verbose="true">
+ <fileset dir="${build.dir}"
+ includes="${name}-${version}.jar">
+ </fileset>
+ </copy>
+ </target>
+
+
+
+ <!-- =================================================================== -->
+ <!-- Creates the distribution -->
+ <!-- =================================================================== -->
+ <target name="dist" depends="prepare-src">
+
+ <!-- Creates the standard jar file -->
+
+ <antcall target="clean"/>
+
+ <antcall target="jar"/>
+
+ <copy todir="${dist.dir}" file="${build.dir}/${name}-${version}.jar"/>
+ <copy todir="${dist.root}" file="${build.dir}/${name}-${version}.jar"/>
+
+ <!-- Creates and copy the generated javadoc -->
+ <antcall target="javadoc"/>
+
+ <copy todir="${dist.dir}/doc/api">
+ <fileset dir="${build.javadocs}/" includes="**/*"/>
+ </copy>
+
+ <!-- Copy the source files -->
+ <copy todir="${dist.dir}/src">
+ <fileset dir="${build.src}/" includes="**/*"/>
+ </copy>
+
+ <!-- Copy all the dependencies jar files -->
+ <copy todir="${dist.dir}/lib">
+ <fileset dir="${jars.dir}/" includes="*.jar"/>
+ </copy>
+
+ <copy todir="${dist.dir}/doc">
+ <fileset dir="${basedir}/doc" includes="**/*.pdf **/*.jpg **/*.java" excludes="posters/** publications/** templates/**"/>
+ </copy>
+
+ <!-- Creates the archives to be distributed -->
+ <zip destfile="${dist.root}/${name}-${version}.zip">
+ <zipfileset dir="${dist.root}" filemode="755" includes="${name}-${version}/*.sh"/>
+ <zipfileset dir="${dist.root}" includes="${name}-${version}/**" excludes="${name}-${version}/*.sh"/>
+ </zip>
+
+ <tar destfile="${dist.root}/${name}-${version}.tar.gz" compression="gzip">
+ <tarfileset dir="${dist.root}" filemode="755" includes="${name}-${version}/*.sh"/>
+ <tarfileset dir="${dist.root}" includes="${name}-${version}/**" excludes="${name}-${version}/*.sh"/>
+ </tar>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Creates the API documentation -->
+ <!-- =================================================================== -->
+ <target name="javadoc" depends="prepare-src">
+ <mkdir dir="${build.javadocs}"/>
+ <javadoc packagenames="org.*"
+ sourcepath="${build.src}"
+ destdir="${build.javadocs}"
+ classpathref="sbfc.classpath"
+ maxmemory="256m"
+ author="true"
+ version="true"
+ use="true"
+ splitindex="true"
+ noindex="false"
+ windowtitle="${Name} API"
+ doctitle="${Name}"
+ breakiterator="yes" >
+ <link href="http://java.sun.com/j2se/1.5.0/docs/api"/>
+ </javadoc>
+ </target>
+
+ <!-- =================================================================== -->
+ <!-- Cleans everything -->
+ <!-- =================================================================== -->
+ <target name="clean" depends="init">
+ <delete includeEmptyDirs="true" quiet="yes">
+ <fileset dir="${build.dir}" includes="**"/>
+ </delete>
+ <delete dir="${dist.root}" includeEmptyDirs="true" quiet="yes"/>
+ </target>
+</project>
+
+<!-- End of file -->
Added: webServiceClient/src/org/sbfc/ws/ConverterParam.java
===================================================================
--- webServiceClient/src/org/sbfc/ws/ConverterParam.java (rev 0)
+++ webServiceClient/src/org/sbfc/ws/ConverterParam.java 2015-09-24 12:23:34 UTC (rev 557)
@@ -0,0 +1,33 @@
+package org.sbfc.ws;
+
+/**
+ * This class is just an helper for launching conversion job,
+ * it registers available converters, input formats and web service response
+ * @author jpettit
+ *
+ */
+public class ConverterParam {
+
+
+ int [] a = new int[10];
+
+
+ /*Available Model format for input */
+ static String SBMLModel = "SBMLModel";
+ static String BioPaxModel = "BioPaxModel";
+ static String XPPModel = "XPPModel";
+
+
+ /*Available converters */
+ static String SBML_2_BioPAX_l2 = "SBML2BioPAX_l2";
+ static String SBML_2_BioPAX_l3 = "SBML2BioPAX_l3";
+ static String SBML_2_XPP = "SBML2XPP";
+
+
+ /*Convertion jobs status*/
+ static String Pending_Job = "pending";
+ static String Finished_Job = "done";
+ static String Not_Found_Job = "not found";
+ static String Unknown_Job_Status = "unknown";
+
+}
Property changes on: webServiceClient/src/org/sbfc/ws/ConverterParam.java
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: webServiceClient/src/org/sbfc/ws/ConvertionId.java
===================================================================
--- webServiceClient/src/org/sbfc/ws/ConvertionId.java (rev 0)
+++ webServiceClient/src/org/sbfc/ws/ConvertionId.java 2015-09-24 12:23:34 UTC (rev 557)
@@ -0,0 +1,22 @@
+package org.sbfc.ws;
+
+/**
+ * Class only containing the convertionId String retrieved
+ * when submitting a convertion job to the webservice
+ * @author jpettit
+ *
+ */
+public class ConvertionId {
+
+ private String identificationId;
+
+ public String getIdentificationId() {
+ return identificationId;
+ }
+
+ public void setIdentificationId(String identificationId) {
+ this.identificationId = identificationId;
+ }
+
+
+}
Property changes on: webServiceClient/src/org/sbfc/ws/ConvertionId.java
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java
===================================================================
--- webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java (rev 0)
+++ webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java 2015-09-24 12:23:34 UTC (rev 557)
@@ -0,0 +1,212 @@
+package org.sbfc.ws;
+
+import java.io.BufferedReader;
+import java.io.IOException;
+import java.io.InputStreamReader;
+import java.io.OutputStreamWriter;
+import java.net.MalformedURLException;
+import java.net.URL;
+import java.net.URLConnection;
+
+/**
+ * This class allows to request conversion jobs to the SBFC web-service
+ *
+ * @author jpettit
+ * @author rodrigue
+ *
+ */
+public class SBFCWebServiceClient {
+
+
+ /**
+ * Location of the webService
+ */
+ private String SBFC_WEB_SERVICE_URL = "http://wwwdev.ebi.ac.uk/biomodels/tools/converters/webService";
+
+
+ /**
+ * Creates a new instance of {@link SBFCWebServiceClient}
+ */
+ public SBFCWebServiceClient() {}
+
+ /**
+ * Creates a new instance of {@link SBFCWebServiceClient} connected
+ * to the given url.
+ *
+ */
+ public SBFCWebServiceClient(String sbfcWebServiceURL) {
+ this.SBFC_WEB_SERVICE_URL = sbfcWebServiceURL;
+ }
+
+
+ /**
+ * Submit conversion Job from String containing model
+ *
+ * @param model
+ * @param inputModelType
+ * @param converterType
+ * @return ConvertionId
+ */
+ public ConvertionId submitJobFromString(String model,String inputModelType, String converterType) {
+ ConvertionId convertionId = new ConvertionId();
+
+ //Build parameter string
+ String data = "method=submit&inputModelType="+inputModelType+"&converterType="+converterType+"&text_upload="+model;
+
+
+ //Sending POST request to the server
+ convertionId.setIdentificationId(sendPostRequest(data));
+
+ return convertionId;
+ }
+
+
+ /**
+ * Submit conversion Job from String containing model
+ *
+ * @param model
+ * @param inputModelType
+ * @param converterType
+ * @return ConvertionId
+ */
+ public ConvertionId submitJobFromURL(String url,String inputModelType, String converterType) {
+ ConvertionId convertionId = new ConvertionId();
+
+ //Build parameter string
+ String data = "method=submit&inputModelType="+inputModelType+"&converterType="+converterType+"&url_upload="+url;
+
+
+ //Sending POST request to the server
+ convertionId.setIdentificationId(sendPostRequest(data));
+
+ return convertionId;
+ }
+
+
+ /**
+ * Return the status of a conversion job on the webservice
+ *
+ * @param convertionId
+ * @return "pending" | "done" | "unknown" | "not found"
+ */
+ public String getJobStatus(ConvertionId convertionId) {
+ String status=null;
+
+ //Build parameter string
+ String data = "method=getStatus&jobIdent="+convertionId.getIdentificationId();
+
+ //sending POST request to the server
+ status = sendPostRequest(data);
+
+ return status;
+
+
+ }
+
+
+ /**
+ * All in one function. The job is submitted from the model String. It waits for the end of the conversion and returns the result
+ *
+ * @param model
+ * @param inputModelType inputModel format, We strongly recommend you use one of ConverterParam attributes (ex: ConvertParam.SBMLModel)
+ * @param converterType inputModel to use, We strongly recommend you use one of ConverterParam attributes (ex: ConvertParam.SBML_2_BioPAX_l2v3)
+ * @return converted Model or errorLog
+ * @throws InterruptedException
+ */
+ public String submitAndGetResultFromString(String model,String inputModelType, String converterType) throws InterruptedException {
+ ConvertionId convert = submitJobFromString(model, inputModelType, converterType);
+
+ while(getJobStatus(convert).compareTo(ConverterParam.Pending_Job) == 0) {
+ Thread.sleep(1000);
+ }
+
+ return getConvertionResult(convert);
+ }
+
+
+ /**
+ * All in one function. The job is submitted from the model URL. It waits for the end of the conversion and returns the result
+ *
+ * @param model
+ * @param inputModelType
+ * @param converterType
+ * @return
+ * @throws InterruptedExceptionif any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.
+ */
+ public String submitAndGetResultFromURL(String url,String inputModelType, String converterType) throws InterruptedException {
+ ConvertionId convert = submitJobFromURL(url, inputModelType, converterType);
+
+ while(getJobStatus(convert).compareTo(ConverterParam.Pending_Job) == 0) {
+ Thread.sleep(1000);
+ }
+
+ return getConvertionResult(convert);
+ }
+
+ /**
+ * Retrieve the result model as a String
+ *
+ * @param convertionId
+ * @return converted model or errorLog
+ */
+ public String getConvertionResult(ConvertionId convertionId) {
+ String model=null;
+
+ // TODO - check that affirmation, I don't think it is true: "WARNING ! : this method can be called only once per Conversion job as it will destroy the conversion Files on the Server"
+ // TODO - if true, may be we should change the behavior or provide several methods, some deleting, some not
+
+ //Build parameter string
+ String data = "method=getResult&jobIdent=" + convertionId.getIdentificationId();
+
+ //sending POST request to the server
+ model = sendPostRequest(data);
+
+ return model;
+ }
+
+
+ /**
+ *
+ * @param data
+ * @return
+ */
+ private String sendPostRequest(String data) {
+ String answer = "";
+ try {
+
+ // Send the request
+ URL url = new URL(SBFC_WEB_SERVICE_URL);
+
+ URLConnection conn = url.openConnection();
+ conn.setDoOutput(true);
+ OutputStreamWriter writer = new OutputStreamWriter(conn.getOutputStream());
+
+ //write parameters
+ writer.write(data);
+ writer.flush();
+
+ // Get the response
+
+ BufferedReader reader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
+ String line;
+ while ((line = reader.readLine()) != null) {
+ answer+= line;
+ if (data.startsWith("method=getResult")) {
+ answer += "\n";
+ }
+ }
+ writer.close();
+ reader.close();
+
+
+
+ } catch (MalformedURLException ex) {
+ ex.printStackTrace();
+ } catch (IOException ex) {
+ ex.printStackTrace();
+ }
+ return answer;
+ }
+
+
+}
Property changes on: webServiceClient/src/org/sbfc/ws/SBFCWebServiceClient.java
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: webServiceClient/src/org/sbfc/ws/UsageExample.java
===================================================================
--- webServiceClient/src/org/sbfc/ws/UsageExample.java (rev 0)
+++ webServiceClient/src/org/sbfc/ws/UsageExample.java 2015-09-24 12:23:34 UTC (rev 557)
@@ -0,0 +1,50 @@
+package org.sbfc.ws;
+
+import java.io.FileWriter;
+import java.io.IOException;
+import java.io.PrintWriter;
+
+/**
+ * Example class for using the SBFC web Service
+ *
+ * @author jpettit
+ * @author rodrigue
+ *
+ */
+public class UsageExample {
+
+ /**
+ * @param args the arguments of the program
+ * @throws IOException if there is a problem reading one of the input files
+ * @throws InterruptedException if any thread has interrupted the current thread. The interrupted status of the current thread is cleared when this exception is thrown.
+ */
+ public static void main(String[] args) throws IOException, InterruptedException {
+ //Converted model Result
+ String convertionResult;
+
+ //Creating the link to the web service
+ SBFCWebServiceClient link = new SBFCWebServiceClient();
+
+ //URL pointing to the model to convert
+ String modelURL = "http://www.ebi.ac.uk/biomodels/models-main/publ/BIOMD0000000001/BIOMD0000000001.xml";
+ // modelURL = "http://www.ebi.ac.uk/biomodels-main/download?mid=BIOMD0000000461";
+
+ //input Model format
+ String inputType = ConverterParam.SBMLModel;
+
+ //Converter to use
+ String converter = ConverterParam.SBML_2_XPP;
+
+
+ //Launching the conversion
+ convertionResult = link.submitAndGetResultFromURL(modelURL, inputType, converter);
+
+ //Printing the result
+ System.out.println(convertionResult);
+
+ PrintWriter out = new PrintWriter(new FileWriter("sbfc-ws-test.xpp"));
+ out.print(convertionResult);
+ out.close();
+ }
+
+}
Property changes on: webServiceClient/src/org/sbfc/ws/UsageExample.java
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+text/plain
\ No newline at end of property
Added: svn:keywords
## -0,0 +1 ##
+Author Date Id Rev URL
\ No newline at end of property
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|