From 5fd60eb9e2e87f2ae6d1cf049145c4187040518c Mon Sep 17 00:00:00 2001 From: Christian Bauer Date: Wed, 5 Nov 2014 20:56:35 +0100 Subject: [PATCH] Finalized release --- README.md | 4 +- core/pom.xml | 13 ++- .../org/fourthline/cling/UpnpServiceImpl.java | 2 +- .../AndroidUpnpServiceConfiguration.java | 2 +- .../fourthline/cling/model/meta/Device.java | 8 +- core/src/site/xhtml/index.xhtml | 2 +- .../test/resources/default-logging.properties | 4 - demo/android/browser/pom.xml | 2 +- demo/android/light/pom.xml | 2 +- demo/android/pom.xml | 2 +- demo/pom.xml | 9 +- distribution/pom.xml | 9 +- distribution/src/dist/README.txt | 31 +++--- mediarenderer/pom.xml | 3 +- mediarenderer/src/site/xhtml/index.xhtml | 11 +- pom.xml | 47 ++++---- support/pom.xml | 3 +- support/src/site/xhtml/index.xhtml | 2 +- website/pom.xml | 7 +- website/src/site/resources/changelog.txt | 8 -- website/src/site/site.xml | 2 - website/src/site/xhtml/faq.xhtml | 102 +++++++++++++---- website/src/site/xhtml/index.xhtml | 19 +--- website/src/site/xhtml/inproduction.xhtml | 72 +++++++++++- website/src/site/xhtml/roadmap.xhtml | 22 ++-- workbench/pom.xml | 3 +- .../src/site/resources/images/WAN Bridge.png | Bin 35447 -> 0 bytes workbench/src/site/xhtml/index.xhtml | 11 +- workbench/src/site/xhtml/wanbridge.xhtml | 104 ------------------ 29 files changed, 259 insertions(+), 247 deletions(-) delete mode 100644 website/src/site/resources/changelog.txt delete mode 100644 workbench/src/site/resources/images/WAN Bridge.png delete mode 100644 workbench/src/site/xhtml/wanbridge.xhtml diff --git a/README.md b/README.md index 5fe776d37..d852e08d6 100644 --- a/README.md +++ b/README.md @@ -24,6 +24,8 @@ git clone https://github.com/4thline/cling.git mvn clean install ```` +If your build fails with Android/dex packaging errors, you forgot the clean. + * Use Cling in your pom.xml with: ```` @@ -31,7 +33,7 @@ mvn clean install org.fourthline.cling cling-core - 2.0-SNAPSHOT + 2.0.0 ```` diff --git a/core/pom.xml b/core/pom.xml index 52273d44a..4f9359e28 100644 --- a/core/pom.xml +++ b/core/pom.xml @@ -7,7 +7,7 @@ org.fourthline.cling cling - 2.0-SNAPSHOT + 2.0.0 Cling Core @@ -82,6 +82,7 @@ maven-site-plugin + 3.3 @@ -97,6 +98,16 @@ + + + + src/main/java + src/test/java + ../demo/android/browser/src/android + ../demo/android/browser/src/main/java + ../demo/android/light/src/main/java + + diff --git a/core/src/main/java/org/fourthline/cling/UpnpServiceImpl.java b/core/src/main/java/org/fourthline/cling/UpnpServiceImpl.java index 5ccd7415b..3c23e3b0c 100644 --- a/core/src/main/java/org/fourthline/cling/UpnpServiceImpl.java +++ b/core/src/main/java/org/fourthline/cling/UpnpServiceImpl.java @@ -37,7 +37,7 @@ * If no {@link UpnpServiceConfiguration} is provided it will automatically * instantiate {@link DefaultUpnpServiceConfiguration}. This configuration does not * work on Android! Use the {@link org.fourthline.cling.android.AndroidUpnpService} - * application component instead + * application component instead. *

*

* Override the various create...() methods to customize instantiation of protocol factory, diff --git a/core/src/main/java/org/fourthline/cling/android/AndroidUpnpServiceConfiguration.java b/core/src/main/java/org/fourthline/cling/android/AndroidUpnpServiceConfiguration.java index c90e9ea49..82a8b0a8b 100644 --- a/core/src/main/java/org/fourthline/cling/android/AndroidUpnpServiceConfiguration.java +++ b/core/src/main/java/org/fourthline/cling/android/AndroidUpnpServiceConfiguration.java @@ -44,7 +44,7 @@ * client and server. The servlet context path for UPnP is set to /upnp. *

*

- * The kxml2 implementation of org.xmlpull is available Android, therefore + * The kxml2 implementation of org.xmlpull is available on Android, therefore * this configuration uses {@link RecoveringUDA10DeviceDescriptorBinderImpl}, * {@link RecoveringSOAPActionProcessorImpl}, and {@link RecoveringGENAEventProcessorImpl}. *

diff --git a/core/src/main/java/org/fourthline/cling/model/meta/Device.java b/core/src/main/java/org/fourthline/cling/model/meta/Device.java index 4ba122966..a32f3c00f 100644 --- a/core/src/main/java/org/fourthline/cling/model/meta/Device.java +++ b/core/src/main/java/org/fourthline/cling/model/meta/Device.java @@ -224,7 +224,9 @@ public S[] findServices(ServiceType serviceType) { } protected D find(UDN udn, D current) { - if (current.getIdentity().getUdn().equals(udn)) return current; + if (current.getIdentity() != null && current.getIdentity().getUdn() != null) { + if (current.getIdentity().getUdn().equals(udn)) return current; + } if (current.hasEmbeddedDevices()) { for (D embeddedDevice : (D[]) current.getEmbeddedDevices()) { D match; @@ -236,9 +238,9 @@ protected D find(UDN udn, D current) { protected Collection findEmbeddedDevices(D current) { Collection devices = new HashSet(); - if (!current.isRoot()) { + if (!current.isRoot() && current.getIdentity().getUdn() != null) devices.add(current); - } + if (current.hasEmbeddedDevices()) { for (D embeddedDevice : (D[]) current.getEmbeddedDevices()) { devices.addAll(findEmbeddedDevices(embeddedDevice)); diff --git a/core/src/site/xhtml/index.xhtml b/core/src/site/xhtml/index.xhtml index 619baca4a..60f3be56e 100644 --- a/core/src/site/xhtml/index.xhtml +++ b/core/src/site/xhtml/index.xhtml @@ -92,7 +92,7 @@ org.fourthline.cling cling-core - 2.0 + 2.0.0 ]]> diff --git a/core/src/test/resources/default-logging.properties b/core/src/test/resources/default-logging.properties index 0fadee707..88b52895f 100644 --- a/core/src/test/resources/default-logging.properties +++ b/core/src/test/resources/default-logging.properties @@ -15,10 +15,6 @@ handlers=org.seamless.util.logging.SystemOutLoggingHandler #org.fourthline.cling.transport.spi.DatagramProcessor.level=INFO #org.fourthline.cling.transport.spi.MulticastReceiver.level=INFO -# Apps -#org.fourthline.cling.bridge.level=FINER -#org.fourthline.cling.workbench.bridge.level=FINER - # Always keep this as WARNING with Workbench etc. apps, we # have an endless loop in how we log/intercept CDI beans... org.jboss.weld.Bean.level=WARNING diff --git a/demo/android/browser/pom.xml b/demo/android/browser/pom.xml index ac901d9f3..fc1d89766 100755 --- a/demo/android/browser/pom.xml +++ b/demo/android/browser/pom.xml @@ -5,7 +5,7 @@ org.fourthline.cling cling-demo-android - 2.0-SNAPSHOT + 2.0.0 Cling Demo Android Browser diff --git a/demo/android/light/pom.xml b/demo/android/light/pom.xml index d3b3614d3..77302f84c 100755 --- a/demo/android/light/pom.xml +++ b/demo/android/light/pom.xml @@ -5,7 +5,7 @@ org.fourthline.cling cling-demo-android - 2.0-SNAPSHOT + 2.0.0 Cling Demo Android Light diff --git a/demo/android/pom.xml b/demo/android/pom.xml index d3e838de1..ab33dff77 100755 --- a/demo/android/pom.xml +++ b/demo/android/pom.xml @@ -6,7 +6,7 @@ org.fourthline.cling cling-demo - 2.0-SNAPSHOT + 2.0.0 Cling Demo Android diff --git a/demo/pom.xml b/demo/pom.xml index ae884ee12..9078751dd 100644 --- a/demo/pom.xml +++ b/demo/pom.xml @@ -7,7 +7,7 @@ org.fourthline.cling cling - 2.0-SNAPSHOT + 2.0.0 Cling Demo @@ -31,6 +31,13 @@ true + + maven-site-plugin + 3.3 + + true + + diff --git a/distribution/pom.xml b/distribution/pom.xml index 5646023f0..21affeac7 100644 --- a/distribution/pom.xml +++ b/distribution/pom.xml @@ -7,7 +7,7 @@ cling org.fourthline.cling - 2.0-SNAPSHOT + 2.0.0 Cling Distribution @@ -23,6 +23,13 @@ true + + maven-site-plugin + 3.3 + + true + + diff --git a/distribution/src/dist/README.txt b/distribution/src/dist/README.txt index b3a4a7590..5cba77f6d 100644 --- a/distribution/src/dist/README.txt +++ b/distribution/src/dist/README.txt @@ -42,8 +42,6 @@ Add this dependency to your pom.xml: ${project.version} -The current unstable version is 2.0-SNAPSHOT. - For Cling on Android with Maven, please see the pom.xml example in the demo/android/ folder. @@ -51,11 +49,7 @@ demo/android/ folder. BUILDING CLING ============================================================================== -To build the source of 2.0-SNAPSHOT, clone it with: - - git clone https://github.com/4thline/cling.git' - -Run "mvn install" to build the JAR files and store them in your local repo. +See https://github.com/4thline/cling ============================================================================== DEPENDENCIES @@ -63,21 +57,28 @@ DEPENDENCIES Required dependencies of Cling Core (included with this distribution): - +- org.fourthline.cling:cling-core:jar:2.0-SNAPSHOT - +- org.seamless:seamless-util:jar:1.0-alpha3 - +- org.seamless:seamless-http:jar:1.0-alpha3 - \- org.seamless:seamless-xml:jar:1.0-alpha3 + +- org.fourthline.cling:cling-core:jar:2.0.0 + +- org.seamless:seamless-util:jar:1.0.0 + +- org.seamless:seamless-http:jar:1.0.0 + \- org.seamless:seamless-xml:jar:1.0.0 Additional dependencies of Cling Core on Android (not included): - TODO - jetty + +- org.eclipse.jetty:jetty-server:jar:8.1.8.v20121106 + | +- org.eclipse.jetty.orbit:javax.servlet:jar:3.0.0.v201112011016 + | +- org.eclipse.jetty:jetty-continuation:jar:8.1.8.v20121106 + | \- org.eclipse.jetty:jetty-http:jar:8.1.8.v20121106 + | \- org.eclipse.jetty:jetty-io:jar:8.1.8.v20121106 + | \- org.eclipse.jetty:jetty-util:jar:8.1.8.v20121106 + +- org.eclipse.jetty:jetty-servlet:jar:8.1.8.v20121106 + | \- org.eclipse.jetty:jetty-security:jar:8.1.8.v20121106 + +- org.eclipse.jetty:jetty-client:jar:8.1.8.v20121106 +- org.slf4j:slf4j-jdk14:jar:1.6.1 (or any other SLF4J implementation) \- org.slf4j:slf4j-api:jar:1.6.1 If you need the fixed Android java.util.logging Handler: - +- org.seamless:seamless-android:jar:1.0-alpha3 + +- org.seamless:seamless-android:jar:1.0.0 \- android.support:compatibility-v13:jar:10 (Exclude this in pom.xml) WARNING: Jetty JAR files each contain an 'about.html' file, you will get @@ -89,7 +90,7 @@ JAR files and remove 'about.html'. Feedback, bug reports: http://4thline.org/projects/mailinglists.html -Copyright 2013, 4th Line GmbH, Switzerland, http://4thline.com/ +Copyright 2014, 4th Line GmbH, Switzerland, http://4thline.com/ You may at your option receive a license to this program under EITHER the terms of the GNU Lesser General Public License (LGPL) OR the diff --git a/mediarenderer/pom.xml b/mediarenderer/pom.xml index 7925ef4bd..dac6890a9 100644 --- a/mediarenderer/pom.xml +++ b/mediarenderer/pom.xml @@ -7,7 +7,7 @@ org.fourthline.cling cling - 2.0-SNAPSHOT + 2.0.0 Cling MediaRenderer @@ -55,6 +55,7 @@ maven-site-plugin + 3.3 diff --git a/mediarenderer/src/site/xhtml/index.xhtml b/mediarenderer/src/site/xhtml/index.xhtml index 2c32cc600..48d38a2d6 100644 --- a/mediarenderer/src/site/xhtml/index.xhtml +++ b/mediarenderer/src/site/xhtml/index.xhtml @@ -36,10 +36,10 @@

- Note: The OS X version will look for GStreamer libraries in /opt/local/lib (default location for MacPorts install), - the JAR version requires that you specify the location of your gstreamer install as a system property (e.g. on Linux): - java -Djna.library.path=/usr/lib -jar cling-mediarenderer.jar + Note: Specify the location of your gstreamer install as a system property (e.g. on Linux):

+
+java -Djna.library.path=/usr/lib -jar cling-mediarenderer.jar

If you want to run the MediaRenderer's display in windowed mode (not fullscreen), start it with the -w argument. @@ -51,10 +51,7 @@

  • - Mac OS X desktop application (Snow Leopard required) -
  • -
  • - JDK 1.6 desktop application (any OS) + JDK 1.6 desktop application (any OS)
  • Cling main distribution (incl. Cling Core library) diff --git a/pom.xml b/pom.xml index 5322e5aba..fbcbe6913 100644 --- a/pom.xml +++ b/pom.xml @@ -4,12 +4,25 @@ xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 4.0.0 + + org.fourthline.cling cling pom - 2.0-SNAPSHOT + 2.0.0 core @@ -67,8 +80,8 @@ 6 6 - 1.0-alpha3 - 1.1-SNAPSHOT + 1.0.0 + 1.1.0 6.2 4.2.2 4.2.3 @@ -94,7 +107,7 @@ 4thline-repo http://4thline.org/m2 - true + false @@ -111,7 +124,7 @@ 4thline-repo http://4thline.org/m2 - true + false @@ -191,16 +204,10 @@ 2.4.1 - - - maven-war-plugin - 2.1 - - maven-site-plugin - 3.0-beta-3 + 3.3 @@ -218,13 +225,6 @@ 1.4.4 - - - org.codehaus.mojo - osxappbundle-maven-plugin - 1.0-alpha-2 - - org.fourthline.lemma @@ -302,13 +302,4 @@ - - diff --git a/support/pom.xml b/support/pom.xml index aed63b556..3dde2c0d4 100644 --- a/support/pom.xml +++ b/support/pom.xml @@ -7,7 +7,7 @@ org.fourthline.cling cling - 2.0-SNAPSHOT + 2.0.0 Cling Support @@ -72,6 +72,7 @@ maven-site-plugin + 3.3 diff --git a/support/src/site/xhtml/index.xhtml b/support/src/site/xhtml/index.xhtml index 345cf1f61..49e7b5f78 100644 --- a/support/src/site/xhtml/index.xhtml +++ b/support/src/site/xhtml/index.xhtml @@ -100,7 +100,7 @@ org.fourthline.cling cling-support - 1.0.5 + 2.0.0 ]]> diff --git a/website/pom.xml b/website/pom.xml index 2f5be308c..f9e63f0b1 100644 --- a/website/pom.xml +++ b/website/pom.xml @@ -7,7 +7,7 @@ cling org.fourthline.cling - 2.0-SNAPSHOT + 2.0.0 Cling Website @@ -24,6 +24,11 @@ + + maven-site-plugin + 3.3 + + maven-antrun-plugin diff --git a/website/src/site/resources/changelog.txt b/website/src/site/resources/changelog.txt deleted file mode 100644 index 43947be95..000000000 --- a/website/src/site/resources/changelog.txt +++ /dev/null @@ -1,8 +0,0 @@ -Changelog (http://4thline.org/projects/cling/) -============================================================================== - -2.0-beta1 (2011-xx-xx) - -- First beta release - ------------------------------------------------------------------------------- diff --git a/website/src/site/site.xml b/website/src/site/site.xml index e2ab55e31..d84c8fc75 100644 --- a/website/src/site/site.xml +++ b/website/src/site/site.xml @@ -18,7 +18,6 @@ - @@ -44,7 +43,6 @@ - diff --git a/website/src/site/xhtml/faq.xhtml b/website/src/site/xhtml/faq.xhtml index eafffe146..c4f472c9c 100644 --- a/website/src/site/xhtml/faq.xhtml +++ b/website/src/site/xhtml/faq.xhtml @@ -25,13 +25,13 @@

    Cling Core is compatible with the - UPnP Device Architecture 1.0. + UPnP Device Architecture 1.0.

    - Can I use Cling to access a UPnP/DLNA MediaServer in Android? + Can I use Cling to access a UPnP/DLNA MediaServer in Android?
    @@ -45,7 +45,7 @@
    - Can I use Cling in my commercial application or device? + Can I use Cling in my commercial application or device?
    @@ -61,20 +61,40 @@ Free Software.
  • - You have to allow replacement of the Cling library in your distributed application. This means - replacement of the JAR file (e.g. in a WAR or EAR package) or replacement of Cling .class files - in the Android APK package (dex2jar). You can not lock your distribution package with any kind - of obfuscation or DRM scheme. + You have to allow replacement of the Cling library in your distributed application. This + means allowing replacement of the Cling JAR or JVM binary class file(s) in, for example, a + WAR or EAR package.
  • - If you modify Cling source code, and you distribute a binary compiled from this modified source - code, you have to distribute your changed source code as well under the LGPL (upon request). - Typically this means you contribute your changes back to the Cling project, to be included in - an official Cling release. + For Cling 1.x, the following exception for static linking of an executable + (see LGPLv3 clause 4 or LGPLv2 clause 6b) + applies to Cling + usage within Android applications and the DEX instead of the JVM binary + format: Converting Cling's binary JVM class files to the DEX format, and distributing a + combined work as an Android APK does not affect the licensing of other resources within that + DEX or APK archive. You must however allow re-packaging/conversion of the DEX and APK with + tools such as dex2jar. Anyone receiving your + APK must be able to replace the Cling binary code with a compatible version. You can + not lock your APK with any kind of obfuscation or DRM scheme, or otherwise prevent + unpacking and reassembly of the DEX containing Cling binaries. Alternatively, consider + + dynamic loading of libraries on Android. +
  • +
  • + For Cling 2.x, you may at your option license Cling under CDDL instead of the LGPL. You + can convert to DEX and package Cling 2.x within an APK without affect on other files in + that APK. You can obfuscate the source in the APK and lock it with digital restrictions. +
  • +
  • + If you modify Cling source code, and you distribute a binary compiled from this modified + source code, you have to distribute your changed source code as well under the LGPL or + CDDL (upon request). Typically this means you contribute your changes back to the Cling + project, to be included in an official Cling release.

- Contact us if you have questions about the licensing of Cling. + Contact us if you have + questions about the licensing of Cling and/or require a proprietary license.

@@ -85,7 +105,7 @@
- What are the dependencies of Cling Core? + What are the dependencies of Cling Core?
@@ -93,27 +113,27 @@ Cling Core is distributed as a single JAR file. It only has one other dependency, the seamless-* libraries. All JAR files are typically packaged next to each other in the ZIP distribution. You - have to add these JAR files to your classpath. + have to add them to your classpath.

- How can I access the services of a device? + How can I access the services of a device?

First write a control point and a RegistryListener as explained in - the manual. Then call device.getServices() when a device has + the manual. Then call device.getServices() when a device has been discovered.

- Cling doesn't work if I start my application on Tomcat/JBoss/Glassfish/etc?! + Cling doesn't work if I start my application on Tomcat/JBoss/Glassfish/etc?!
@@ -123,14 +143,15 @@ an old and badly designed part of the JDK: Only "one application" in the whole JVM can configure it. You have to switch Cling to an alternative HTTP client, e.g. the other bundled implementation based on Apache HTTP Core. This is explained - in more detail in + in more detail in the user manual.

- Is IPv6 supported? + Is IPv6 supported?
@@ -146,7 +167,7 @@
- I don't see debug log messages on Android? + I don't see debug log messages on Android?
@@ -154,7 +175,46 @@ The java.util.logging implementation on Android is broken, it does not allow you to print debug-level messages easily. See this - discussion for a simple solution. + discussion for a simple solution. +

+
+
+ + + Where can I find the source for Cling 1.x and teleal-common? + +
+
+

+ Here. +

+
+
+ + + Wich version of Android (API) is supported by Cling? + +
+
+

+ Cling 1.0 supports Android 2.1. With Cling 2.0, we currently require platform level 15 (Android 4.0.3). +

+
+
+ + + I get a lock acquisition timeout exception? + +
+
+

+ Your service receives a subscription, then this happens: +

+
RuntimeException at org.teleal.cling.protocol.sync.ReceivingSubscribe.responseSent(ReceivingSubscribe.java:177)
+

+ Your service was already being used by something else and didn't give up the lock during the 500 + millisecond default wait time. Increase the wait time by overriding DefaultServiceManager in + LocalService. Or don't block the service action/methods for a long time.

diff --git a/website/src/site/xhtml/index.xhtml b/website/src/site/xhtml/index.xhtml index 0eaadaf94..cc5a72a8f 100644 --- a/website/src/site/xhtml/index.xhtml +++ b/website/src/site/xhtml/index.xhtml @@ -23,17 +23,13 @@ -->

- The current release of Cling is 2.0-beta1 (2011-xx-xx), see - the Changelog for a summary of improvements and - the Road Map for future plans. You can - also find snapshot builds of the current development - trunk here or include version - 2.0-SNAPSHOT as a dependency in your Maven pom.xml. + The current release of Cling is 2.0.0 (2014-11-05): Download

Read this - chapter of the manual for a simple Cling usage example. + chapter of the manual for a simple Cling usage example. Have a look at the + Android application examples.

@@ -50,11 +46,7 @@ Cling Core to expose services with a UPnP remoting interface, or to write control point applications that discover UPnP devices and utilize their services. You can also integrate Cling Core as - an Android UPnP/DLNA library in your applications (platform level 7/2.1 required). - The full source code of the Android UPnPBrowser example of the manual can be - found here. You can see the application in - action in this - video. + an Android UPnP/DLNA library in your applications (platform level 15/4.0 required).

@@ -71,8 +63,7 @@
Cling Workbench

- A desktop application for browsing UPnP devices and interacting with their services, including - an HTTP gateway and WAN/LAN bridge. + A desktop application for browsing UPnP devices and interacting with their services.

diff --git a/website/src/site/xhtml/inproduction.xhtml b/website/src/site/xhtml/inproduction.xhtml index c188c9f9b..bad820ac0 100644 --- a/website/src/site/xhtml/inproduction.xhtml +++ b/website/src/site/xhtml/inproduction.xhtml @@ -19,27 +19,89 @@
  • - BubbleDS + BubbleDS

    - A UPnP control point for Android and LinnDS + A UPnP control point for Android and LinnDS streamer appliances.

  • - BubbleUPnP + BubbleUPnP

    - A generic UPnP/DLNA audio control point and renderer for Android. + A generic UPnP/DLNA media control point and renderer for Android.

  • - Jinzora UPnP + Jinzora UPnP

    The Jinzora music management and streaming server can be accessed through a UPnP MediaServer gateway written with Cling. The Android client also uses Cling to access the MediaServer.

  • + +
  • + MovieBrowser UPnP +

    + MovieBrowser is a movie manager to use with your favorite player on your Android tablet. Manage your videos anywhere on + your network (Samba & UPnP/DLNA) and watch them with your favorite player or using the unique Play-To feature (Android airplay). +

    +
  • + +
  • + Private Dancer +

    + Private Dancer is a UPnP/DLNA Media Renderer for Android. It is designed to be used on a device attached to speakers + and power. Unlike other UPnP Android applications, Private Dancer is designed for always-on (headless) use. +

    +
  • + +
  • + MediaHouse +

    + Stream music, videos, movies and pictures from PC, NAS or any other device running UPnP/DLNA compliant media server to + your Android phone/handset/tablet. +

    +
  • + +
  • + Digital Photo Frame Slideshow +

    + Turn your Android device in a digital photo viewer showing a slideshow of local files, photos from + network shares (Samba/SMB) or pictures from a UPnP server. +

    +
  • + +
  • + I-Frame Home +

    + Full HD digital photo frame, picture-like design, displays files located in internal memory, LAN or + Internet. +

    +
  • + +
  • + MediaConnect +

    + MediaConnect enables you to connect mediaservers with mediaplayers and also remote control these mediaplayers within a WLAN. +

    +
  • + +
  • + MediaConnect +

    + MediaConnect enables you to connect mediaservers with mediaplayers and also remote control these mediaplayers within a WLAN. +

    +
  • + +
  • + ShuffleBox +

    + Use your smartphone or tablet as a remote control and play music on your laptop, mobile phone or any other DNLA device. +

    +
  • +
diff --git a/website/src/site/xhtml/roadmap.xhtml b/website/src/site/xhtml/roadmap.xhtml index d8aad9cc3..7fa615311 100644 --- a/website/src/site/xhtml/roadmap.xhtml +++ b/website/src/site/xhtml/roadmap.xhtml @@ -21,20 +21,20 @@

- Cling 2.0 + Cling 2.0.1

  • - Integration with and for CDI (IN PROGRESS) -

    - Currently all modules (transport, protocol, registry, binding) of Cling are wired through - constructor injection from a single UpnpService entry point constructor. We can keep this - flexibility (easy overriding by developers of create() methods) but at the same time enable - dependency injection frameworks. This is mostly adding CDI annotations on core classes and - testing Cling Core with Weld. -

    + Minor bugfixes
  • +
+ +

+ Future +

+ +
  • Client/server profile system

    @@ -55,10 +55,10 @@

  • - GENA eventing support in the HTTP bridge + GENA eventing support in (and reactivating) the HTTP bridge

    This has already been designed and needs to be implemented, - see Bridge Architecture.graffle in SVN. + see Bridge Architecture.graffle.

diff --git a/workbench/pom.xml b/workbench/pom.xml index 97d5d8dad..463f820be 100644 --- a/workbench/pom.xml +++ b/workbench/pom.xml @@ -7,7 +7,7 @@ org.fourthline.cling cling - 2.0-SNAPSHOT + 2.0.0 Cling Workbench @@ -45,6 +45,7 @@ maven-site-plugin + 3.3 diff --git a/workbench/src/site/resources/images/WAN Bridge.png b/workbench/src/site/resources/images/WAN Bridge.png deleted file mode 100644 index 0d7bf4fef19ab7dc8d724f06b46415c5f2501b9b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 35447 zcmXt9V{l|$*X`K0ZQJ%FnIw~BVmlMtb|$ttv5k)HiS0~mJ6}I<)%T;jy1H)NdpFM6 zYp=CWr1EzeBzSyy004j_CoA~_008d={f>f#27MPhzfS@H@R(K-63TKC5~Rvb_U2YL zW&nT(*kY=M8s-@GNTs(E`DFZlyz?|EAI+GGS{NSg9<0RhZ$|pM!ib0f@*Q+6-4xPa zq;$~OU{Gp*iA>RybECmjR6LQg8#|A3TDP~-+-KSsd%D$KJ5L`!u3-Z10~6A5Q4j#} zy>h#+{Ohy965=Oqr2r(>0C31a3u3@?tZV-Cj}5aT5@Vld|n4!zb2;le<7tGWU7SD^V%415xB z;G+2-nzF9=-wx}==ZuCE87E@w<7J$&d`*y%31gKncT}tA5RSoJOXR8z{s|C@03$?& zLkB?o4McDNkW#Tjv~vI+1<*O#+0KtKJD6_M$hl5x2uoV1^$axZs|mkET9)z%N_}y< zw%k!&Pir-)oiqr9ibV*&qM)vz^Wje96RvxVqc~(INL|kb2NnL6*d9o%L6PbyLB5N^ zMnK@@1JnYs|H2ISg0BE%cA$X)BCufV01QbAuEQXgI)rnWc2W{TC>l|`GDxm`VqHL* zs6ZQZN1v?&31XlME0~8NG!Qy^he9)u6c$E>6rU1#O#E9sbTLYX_|JHX1F#oyGG*Su zFkWT)CIo)KKM5&iJT)jTQ4tA^0=r{oPDG)=l6=o&qI)RmK2uHD)UXsIq7}@R&`l$M z4~EIGq#Z_H7-8_V{>5w0Hl)k2tAQd`6h9=E0zgyt?q3_V5hoTJC>!>wxY+$*uJ27+ugko&_ z+>FBO=U1o*k!fP*d$sm}4v4z&%sB4w?!@jGJV9A~zWqtp4IaKg3}MWfK8t<%>zHSP zXS8=lzfe+9W%6_kAS|OebwRvC>|Z$#(R8vZRH#ULN%=w%w$!#f&2Ki;Tjbx-x07Tk zJrnW9!Z9V*Waz2%C^yLz6NHn>Obx_N=_8#6SvC0 z|BErz}{<8Kg{k(OJ@tpE(`_g)2ag%m!aOmILLn?}@j9rIg2z!o3 zi_=EW%3Mb&i?M)lkFJ2qh-!lgWZ;zP2>u^}9x6VjHf9Mt0Xz)61#B9E0nTA$zGSkLuGF3sycBcf??@lC6zpcK z7)&9?HAa5&4n}G^a|&#_RGKAnZu&>5Z01W^Vj4dMpx%21q_((TzYMwF-tR%CNGLfn zIRv>9)7%59vCv z6>aHlY4NM|SI?}<0^A~B$$agd-m)x@{!{j42(kK%B8yI~>Qzp6hp=jo?pFfXQ16&w ztyp-Ujs((x>;OktT#Ti3t~5-H*Y9q;EL`W9te7K3OvQdhdWB)dP=zi<1cj?~qsjBh z$4otrHyb;fTw}kncN7GsXx?b)=ypZ=EOMTlbxvD4`?0#Jh6AnH>i+6!?VGB9Rd`E_ zODr~+Hk#bc+>I^PE%hx&w%aQwYmOJ%7pWIh7w+rseEEdgM7M;{MCGwyv1YL|IR`l_ z-xa?{PfJe=zBhJaKE6qA` zoEe+?mc^H~-W8Bmx$IbLu|>Znx7G7(=nM26_tk$reYw27cq)3aefo9(c5HuSa4dqB zj~|c!7h{wJ7kdS@jqm_f4Ra7-32uwXM?{jGlDe1z69*qxo1mj<$Z;Z)iNi?RsNKj! zN4>?|rmIuYSm(XvZ2hH`qs0JuBm^duC(Pf>gRKHj9<2rq3oTl~`%v!iS1M9vIv0r* zo)#t_ff=4UCf7)dDT&35jE+p2B+KB+Nb(Rc#x=6~w_faBRAsbI3`&%}TrW)sjqX2X zKF92CB6b0GH$)n1%0ueg#L1-ZluS;W?agD#w@U}Hm}HW$h{Y8ppYi-D<|#jOAL)cx zKb*o0p=nG=RfX;x4sB9Zmy`r%1u_J@-Nr7~dVX2AUR+iP{mqRK67t4+JUq`?Jp$JH zi8%Uid>S;mHbysy5W@2R&7jC>WU+XKIU>n)dU0xR--lsB{z)uO62-^qv9fbrKCpeK z>G^c)dMAI|gUyO?`BC;{auQc5Qy7bgjgOPd7bP^#$L}`zs_C0xsPc36-f?E%cIbW& zxQ9a1lGmnVtog$;(S!YgvUZ`UX+L?dyr{H0RVpnebv>n3O;(+-MpJl-U&v|rP{H|+ zi<#fQv_>`y5)D3$W_1RQv<1UobJqH~2!hLBNheB3&FIZ9&D*EEu0XHt*KX*furTTJ z;eP5ix@N0SpOu#a1Y{ik%;wBWZAtB0mZ0cz9D@(S&$|_>CwZYXMHU_dm5v{?-+oQ~ z3SMJh$6ha5_aq`C8qnCRd34csY56Stkl*BL|MhP>*a=9$L6~Iy8m75znow0Q&;+37GAX<-8UaCU`2sT1~GoN zM4ZGn-iEjNCZjfG&K~pEF=%HAm*L1L_99NcF8(fe$Jd&@EBiNfj$0;6`|UJ0N?XE; z-W}}q_UIfLPYOF)W6tGAi#_EZOZ^;&dU;Oi_#V4Y#>Sa^AFodb+db02DZ}|)pKnWPlbKWyV2c9ukrQXq|W8~qC3>p(Dt$~>-*ov zgRc8`lm3yEe?XTmXAJpBQ_$X@Gz%z)sf2>FKwp)6-UB$)leTf6v+q zbe4abpjGP>qXakf+06_+T=kGRZt1_Gdsxh6t)LVWxs5?PAT(0|Y&^9BN# zt-}V>mC=RKgWv`s1y+Wkb!nNMTC4PxmfgN)s$AwyT)d?^1U7Tb?*%R{C(n~D);X?# zcin2KX8jN{0TjJxJFpIryx@dju>cvvHd0c=wAfoer~m)w|1ZD=$48cMAywAa=Ff=A zgo#j~Q5Ap0AioNB@b972da~VUyRmV(Pkagj-4GWZa;ZkIGA>RjS4ql??$52qBtglp zUeb5kmJnRp1f56)ZL@FRm9;*_OYZY+8b3OVi;KNz*Cx&mKyM;QQD-^Z#ddOX+bmsF zzhG0ZkZAfQ(4e=qwn_(l+KZl9^b{80|8Y~ZM~|A|Lx;nnZ=)b9`%YHS|KvdR6!boQ zwoIaB7Z102L^_-(`RML8_c8E~`YIeI?ms($V$+np=FIJ)z$;2DZD17pfVC;=dTgbb>=sD4Sjj2SHwS*O7?%R zwAvhY+e?N^0t5<5*x4aR#>LTaXH}mpl+Vk>{#aXElQl6Z($&#f2WK{lr<5C1 zm_c4;?lLL86?l7$BDq+5$X-kkNo>sq!Qn-n4i~Gi{8?c+xGtEf+8hpxr6UgWN#LMe zBv!LCV_yCj`l-N&Y=tHKBLc$%LiG!lChVnN`YYorh>6e zt2=STl8WKi=N)cr@3lmJRTX2nHK)>UR|9Q&S6U=cq9x%fB^lEO!CVMv6Wi+`m0wn7 z8S?X2o0L6kvUYWri^X{)=wNm) zRf=Bg&HmBpFoKSb^78tY`uf$4rKJj<^PNZ3Oan==yaMT4rWp!U}#*A;LgQDZq?MiF8pX zmQVhIar3mSynN%~k$b{cdOGf+oi}-J4bAF>+uXu}WIpq(zJ|uH%VSom;55!XEkBt4 zhHAIUy5_3$_6W~hJ}|egej_hkpz)9kQ^5?HIF2Rf9*%~-=N~E#4(Ci~=MSph=_CHD zed^XAToPLwn~H%cJ1cv8E>UAa^pFg>-%>}wogp_LUK9Zg6G4i%r;8#3=?TtAXa5&r z8PZHt%^pAB7U@!dh?$3bvQv#By#^M2ZM6^-S`?76pza70t9o?tG_>}_rNcODk>7JL z0&O#K%O+^ZRv7Ca3YZ%c>T7?<36g|fVRv_dm?S|WDS|MV_`6b>h8>mLMCUFLHV?ya znE~H?Bz-($@iYd-1Z>@!v)Xwt1g;ZXw{FK+1@leTQmYX{DqxW`;0F-TYbYLY)go&qkLLJADk=G;io+ea|BML&U^gfZ9zD9{=o>)Z^4lGZCUDDoJ*=*-Le3fV zsNf@lxm8b^va^X#E>N9jWo7N1yTQF;-}-5RE7Zi^mBbVP&c04M9 z@5FN%=PN5KL_8Y~zSzl2GL>9xE0CJa`kk8#Yirt@WvKhoI^H_oRYNw!RAWxmYsi;d z1f*=2l9NZs#)yp!q{FwL_#Y8U`zb-)h=!e!$7TL`#Lrr+Q2b&+~!L#)^(bVL3NRI)|4PgleX7uyZ&!3Gwit6uUD9 zj!X1*kjTQ-l}d|+CN?!SvARaCt#$CrTgZ&a0tIb6YJC8U)76QJTWece_l~p{5qw~e zE<+$ZkkxIhYkbS&s6q^N!(|#f_P#UDP{V6bG+XwoPN11>1GY|e{`Gt>@RzNfl`u3{ z)bL>mb$M4c#k6%JyRl$}(r`_%xgaU)Jai@IWM8=6+A>|@2TS+0cuW>hFp7fJ6t+sI z)vj3DWHPiULYI7$&Js2$VvnYdDJ#n~T1wHQTM_r5*|5$Xemf)y_c%w;`Osl%07Zn6 zOsK4&%4Qy1OkzulN|+9IFGBz+a;iuzkz0bOaw~6`?Fi2?GIAL%=-EU8V(R8Ww@mFL zzpd_CqxJb!^Zg2XHFp0zX^1kK;c^Km zNA#Actf!Zjd93RIA`qU2K`GtgPt!jMQd)ijulvQ8@4!7L;T%Y32_>~`no3W!54dGY z=l#4sT$k}w=jVpsR85Of4V#5`#X^QsO7`nyXBQSWC|zBeMkLDp5KR?6Trklzl*)iJ zV!zF@nriiupX~KpYs9L3h-c7XA;If1^YN0h1QaP?5lHKG0Zu#wEa!qgJwEtl9ls!; z{fTIgIFj$+imUQgB7NV+ieyCKDCzVK)VYumtXhlw4!fpwEc-YfbsEckk<`%nfo6}% z)57QR`~xL**9iA)GpbvcoQ%~e_Dsyo9s}V(K?E66V>CnY+LggUc}e;$I%O{&;*@7L zli|_7CyPe%r0?)v+hI|FPB+BHZwh*a54wtqObc`vqVcQVr-)ni%4vr57~JMg7a?b! z!F-319<0YuJGzG%QYCvcH%8CccAtlM9OmbFLf%V5=S92rHwoVZ7GI-NN@C#I>@2PA z>}*rl*9Fk=*rfg3Np3lW&`r!eNYG6x7hUozDk`M@=alO(fQ_NWcu-x$_&xT9K^mwS zv93P+Ors!z#0=(pF;GS_-b&XGcY&Q-351GwBcl=d5>b}d+-Zi)ut_^#s_lzmo4-QR zG(22txVy{4hV5Do7hkVxaOrF47e{pR1R)O;aOb0~${b<6Ztp93&j@^R<)MSmYlX8tyG6CD0XvwyZPsR6D+-*h>r{E9M+M8v6Q|%T>w0 zh_V5lKaJ4Y}Cq-g6IA?$B#9^Y$ri*#e^Y2PkH28fQ8xi*l!n;Yt?1g9hnUV5K5S$s_2lT zzPN4hIEOb_w7F9??LxeNHQKZS5iNL|KbuN{4Y%v@y~6)K2-|_}^*38@S3TS3LRY;` zYHI4f2pl}W99m>3*`i>_Aw1yZ24!|r%;p{fA2CAdht4!Du3c+HMX5lFk% zW{YGf=$eX`@x~lL_14z37Qk58m{VCTr0;#1O>~g%d*pgf6nOD-64$o6vS|JNBi9-H z{I^rYV|^iqPD%e2Sxh_Jt7CW#@b=d2_<0i7=3yWPP`PV%d0u5}Z3o6?XJcz^Rp6nS zc&^D8{T|7D#F{fvCw)~MfyxA6ilE%4TELHD8Y~U^eSUxo%6nZG`tfcE^AC+Os6(7QRa6^a44rTCfn>vdQP*TyEn0+xc@Z_Bmbm*O)P zcMF!%0VjK#ZI)^s=*v?K3&3JftMiO2*0+^AIEA1aPB)*2P0~XfS)BTmUCW%w#GvY1;=F49(t>iYS zo$jlXaCHocV*L6YE<@mmfV^N#bN&tVOW^10nKTtOHM`JK0Mz#Y7-*`98k_U2Y`7wsd0pT&jjT}o+$Y{t6)XfWi~WHmS>Rk8y0L`N1I%#h@jWO z^*>FAk@J@@&SVWcFTzS9!Rc;M_776Zd8M!>BOrThKpbqZja9|Z%AQd8e&cK>Dp?j_ z{Xc86lf_;+DB%}BmZO{c!(P*9Xz=qW$OVcEhhfL!l0#hrh5Fb;DmdiM1MSHU4g}uX zDxIf|iF3m50eT4t*K98SiIOT$^0J!UU~*Sl9*zQTTg7r)IE9G$paqQr;LHv}+k33t zZcLX48E7z=3#A^;ASv!2$Fkswwhp%(HgW53HukCLlkDDD95p^(TL1UZZ`mf+B;t2g zbxuj7@&rD5V~~xbzMcLjw=Tru5z35(g!eD!#|rhzHNuNSo!DMw@_;KZXlgrqEXf<@ zNuU8ZijBE>dtk!W{r!C%P1p2_6a|>uCCR!)+yhKa}b z-~MB`3KOwme2kwjIPSg}XQ)k&o-ObX+x@U4py~As_?Mi5VMxOo*2k=~K^?J1lb`nV zAnJmX2*nU0C?iUZQcogT9d5Y)R7E*zdmXkyy>em8t-^U`%BPPWA}LlF$)1uQ$80Lf z&53svPRDDHPAQf9VB~AVxHjOjp4W)}!bXH8Jk)(EAd@&IK@}?RcVRLsHr7&5xCb6X z>UUi3AeRct3hY$R@qu|>@IJ|WP&sDA9@?UYzqiv$oEcH5fh%4H%rTVwY3Go|oLqve zIo}lxz-lsWKg{*MG;Rs=7UyNYKDN>=zD!Qu$YQY`<#^85E1Exj)bqYroT8Bat%-a7 zsmXZg(zzLi_2<0-n&6kdpD8&2rM_eqHl5*iCCT{|>~w8s8Nf^a;$BeAM`o07~iyp0eL@gOP2wOLp*3|E%H zMbz}b<gC0>#rJ23=mwR)Bxd@0eNYpMlac_7Z(|+bJHw%ppvNYW`ib zP{0CUZ<$QKXaXRgJ{s@jK<|B`# zUO#!Oy!j;NC+zOT0f-qvv1|M6h=eY>nKM)$ji?=45JM&r7RSdoWFhHWR40dJ;~VlT zeOsRyc}g)vBNo$<^YI~!jEto6>e9avgoxvWRBc83GlI#O?b)6X*BdrI9&NIRt`FI4 z+(Pkz(D2?Zc~Gj8mAQrZhYDP9d#BV?>FH|uct98Fk9;4>m6&dWf6j3p!H|wwr>*l> zazP{=6Vr2HVS_b~KEL&2Dji`0qvV-BUMBXfb`c&JZ*gYeSmHWV!qy*(en{9DZL*V? zP%ntL?@n_Be{k|JcEt2oh9=TV2UT}lJsiGq;qM-srRlZM(9j(1iD6fI@i+P}&u)G1 z=D)|Xva-5JLh;)2jTIuQyZWW7nsn=&7T0d5ASXv12^Sd!$wz1PcU#we@tQYQR2hx7 za-|8LIXX|8N?6I8)hXgVi;BS0>0~Y_E_h9p1c8N#aU-;i}LA8?&5jHt`cP@Lf1I&CSQoZ|f~h-)StA z)h*}fVGzvJFa#?sZ%o6$S1LVP)SXPY`z#}e-xXe~&Je7;wvyr@9(j3jaX^~*@r(e| z+w*eTHO9p4VLGQ$-A}VkhPnL!eVOq+odUH5mbS+K?v?}xvSTezTKvh413S*w-_vMU z#eW(>UB8XSykpqxFJ2Asq(tYEEa;s=Hk9U7r$?c9`CW)+<;7OgizwtkWznllP>(By z21JUH0;U;~Q)__ACAUNq8dX4y!v|@q(&CnWVt>K&`^2`kwld1D-vTQaZf0)F2$CO( zct^d)J${W7AMDbWkTkszZ4T+o8M0-ES}Px&gkCM3M)N#K6_5xp%E`;B>4P|7IaqrW zF1|SslNAYcNi<1vNz{pHtw3-r=$yoC)I3q_Y>{og%7z)@5YYZ-C$6h>dWy$3i~_k@ zZ{G~9)?9Bu-~lN^x&kZs^?t|3=lPO#-PgIe+#%}YzCv{ZW*}JkqHWH4=X!>y5qR8_ zo|I=00Oc7cMlRUD%ukhd&0=sDM!((A-|vg1o^`5hklD#UE7KF%-Rb19aV?fV@uK!= zmJaCfeTnk6AK_tT;^L~d1(&sVbK@RbOYdV0Ly{+5b?+u>9JC2bbA*vL-u)fSnl|wn z_VM=A*esr(#C~-*9z<-2)bu0qY~+)q@I8_#r1_9oHz?j6 z=6vlglqa#=7s2K=vhV3=Xdvu)m*p)iMPxZHRcV<{XRq2URBRk{VAh zdPj-J>&dct2Y7&xI5_z4cl_UMUoh+uak)wbNC!`19%9~Gr5i@6aMKLwV~y~Pw{HyC zFCWle(-V%r<>+R>)_%|k9pPrGWuUH{xF`kS_4xxE*dGN#LoX!e`SpJllf`EVeDZJb z)DCdl6S#O`hrPZJ}I@z_(t7`0bzA%Qo7|!2NA%4=?gdDg|mPY?W5yaC##5o_)T5cY=Y|XRlo& z_CVQ3Lfv^hNleF8_ZxnKuNfaW)*#OHtcL4lAd30O#}iJ|vx?7XLqF?>Rg-Utb|~FX zhI1MWP%{PCyJ3c1`Sd=sjVAdn_dO(yTS~p`SLOnhMln$bx_)!Ux+$X*Nmh!KaltTa z{B;hD27|eJMoM|n;$l>DIj99@NG-)>GZ*>E14?u;9`I?<4yYJD_yk8gj?*8q(pOpA z{feM#vn^cbcRyp^m^fcLL(7wXW~J2@cr=qIGyLype|<;2ZQqMuOVF)I2=lVcU_aYgJ!p^T%ox((f)05k^E2s^X1x7B-|sRM4a`l24f~=9UIxdK z4hADJe8){+yOL<~WDaMtl%!+twVG>{@ZJL`SP4;&ok|5RsqP=Xk-V-$>vYRUMW+FG zCAK0a=c>sa+_j_@Wi%n530w+iy!A^s8Ew8gAaD+rKhie!%!x zbymv1UL4-oY#LVlc%fRhMhXTdT58Vx32n`Yk8x+!VOf&y`?vh-Aoi(u#QJKeDgQlr zvV|27!0tV7Z{-OkC108#Un(k8l;65l~<+#tL>WZ(mzKV~d>FDS^8mg*JO~fP& zWUjm(h|N4ji4Vnt;uSa?nbd<IHJ;N?PK z@7~MU)Pk0d&cohBeeoek;S;$$rcgM*7T-^~bqIlO5?qaR*kh+B)lTn-^%s{t@_&R} zc32U;`PPD-VPlV$N$2RLrmWX$f1@Rm4OsV`0%gTW2sgiIw^gWxV7 zH5#(a9ka3KR^)C=2D({9rYp?CduxoT;$ z9mkO_NVZT0ERC%ZKHB^7=R;AY_vCiarnOejwb9y zG@roE;Nj+`8(h{(3&%^!<#MK8h1s9`jT=W;{#iq!@bRu2E80YnKYOxN7= z_f~p=J+U~TetYJH!ixSrGCoe{)uxOrbB0q`*0tI^H9e9%`sFHo_(mA$AQm9!xEklF z_|M1?mNl#YXdn>ht-g1%QmFmVJ&GkHFy;88%1AC?cgz+VyIlz8JC}-UTOYS6NMI%rRx4lXlPgxa*A2V8; z*_3s5$XH=nm7M#Cl@S@hb=A}`D;M!e0`<1P0)@wR8ES#IqUMLk^3dMxE2D9qvPS&f z=Y0;4E!s&LZ2PZW$db>g6s)|EOSJ}hg^MS74?m(9$9}L;=5_)P_Q#BZ01G5@1)mP( z+Rphcf%4XGY1;g8N3f6>VB!2l!Po3pWo9x8 z8KGJ>Q#=TzlzBmCe&TK{8mcxfmO_}Nl5LHQy< z_sML3g2HgB#!q4T)nkKHW~OIepjWRBMm6lh(vqU$P9dW}?UOds@Q=^JrAaAw##d!e`KJ5(W9$c1YA``)>AjFPq9cZaL+e_=!dpX(BS z87imi_FwoV!X1<8_2I!VATffJ_kUspTm=e_H@#ls*udYruLV`&Tx@+Sp9hLTzD=aLmfqA=RgZ!Jx|0E>_@a*Px@;Tqh2zwZ3eaGjzhPfmu z22g>_-xlyE9vcl11vdhPOq<{uilIypXjIcL-{)M2*ZQ^e|rA0cmReWk2`qdX`TC( z{tyD3JU8yWDfRi&bPh-O*;7Yfw2UKUP^75mO9?}{ERIK&M9H>JyVIXV6XIN4?*D=8 zNH3Ff5z?_Kc*&xCaW<6iKMX*G+H0q2qaOxxY%FAyGK;&DzNr=$d-r&hQLJ7zm&sMYW&Xeu|EQ*GF=w2DXus=f_2Q z60%g#1=fIf^e^{iuL(1zzqPNLdS#QyD5Dx#^aIjVQy1xfdg z9vz)#BUQOlYoOU^9>Ye)<(e2aCr^vU41r}1k$>Qa*Cn~5$E!y%Auv%;$-qd?PMUamz3oTM(mGGB%!NY9iJh~RwlgrDqy+K}`f?*|b|VqyTV zLT%X_ctLFDc^aXTyTJ$v!-vyFYECau({JTQVu=*?i_P+j-^JHn1~|R^JrI(n&ulph zOI=-rmY()GruOK@=f7onPtgnKkgmT!J^dYZi+T>wKk@#XW9&*9(tLlV07VG%;f_C? z1)RU=#vBz_eSgh^8d-xx=>7Ft%F^Q=s1x^Oe|)jM!|qv?Kl=f|(EG#t7zw*iY8Zz&N#f-n)pxUwW$&^o-HKFo<(OE^fDK(v4)y?E;= z{oGIRj7`E*f|WABuM)@>t-bW_Zn)Lp|K=}h_5(hs^5IWuTVCqn!4U^neTv66a*SkO zTG*}Nf0oFi?m+TVvUb*n$Z2G_w1OpWm6S+(BsX@>jGFL)4ca&w2j9q^N7CyXNh9ig`F&{`yul-vjt@cA|eG22Sb0$0*6F6u5mJc_8p#c9B>3Orw%(pwA1_0!i2A&pN-b4Sa}%wN;ZI6tNqtI+ZYa)(?IH8IuK zhZlw{C;v0{x4A(=BtJ)!v6@CHR}c#BZ3l@!=HT?z-7%cb=L)MFdB)yIwGlZ<@-T z^VIf-T&iB@lrE(}FtoD)qq>D+|D#H3rgWZ!aV0RsL;!s(+o+-TlPJ8V7pLx9i(cXd ziMD`%NXU1)w37^B8str}R{nw7-JdVMF{IrgsixlcNWS@14NmrQMn-?0fPygpZ7wmO zrB4`AY2BSa!GC93?3+wnwI7d8bbkY>*(iB|2L>Z0-g6h z-riP7Ns>N^iKLzk(~EBcxQ1Z&JP6E(?c`;@dsbByo<{Q1i#+A@i_bh_La4R38ao(p z8eKnd1+zVxZAi3wjK>KNjs}?{m{T8CYd2R+Jd~DVc;Nr%VRev)1$!sP)Ce-ObYy@2 zp@Kcy03wrZ#sNHj4|ArcF7}oZOuFoC^ zZR4m;yI>9o_eC&6ru#|~`$+a0*T-jOIv?E4^pKKVY)B#dee#t!ura|}pb0uah7o`h zFfh!FxI7C4h1rCwIiS6gxZF;#rbZ0H)lE#b)HJZS0voImTnt4*HiV83T9qD>OZpcs zXUe5@^i=A{8ut^0X`rtFuLr4zC1C>j6}y`dgjAu*p>3QV)w@*Apjo%w2vIfG)`o_P zP-Ue~9BwlAUe3Ao2?T@!dEE5BTU!MlMkdH~Ku^$6aSRaizd;|syege`&h9cfR%+27 zRLC%H*z)xQI-27|#6eB4q53{U}UKDBg7Y6_W|66wr&#-=k_a6Yl z|ka<$b5Odhv-qMM~HxFyIULAkGwalFM^+C<$}} z1h6uJD$1Z|WNZ{9tQV-A+w#Rq4HR#lNdKxT!i4zjce3YGz-X;c*l02O1a9go)!Sm? z6#wR&)%f!|LG7atCqARc z>k{A~IEGZ&{zs$_p#LG1Q3s{9`6QD7AGz7g!s5(^+cs0$L~+29BYgZ;_ghGNnThc0 z>6T`T0x}8~^6n27iXQ22U!h{3rrYb3d6HY(>(%$Q@@d$F4(?mG|0alLV^)lMYOmi2 z{NmV*Wx4QMMsI$`9}%QOL7jUe*sx!q;PQ?QK|#%UO%P7r7Zy_Kj5F}01RkW8Ee1DX zYKCeC-j6KYN~*r6`ck3nzP)bc%#XK!Q{mLp+``F2!~FsN-V1?(JC$7Wu^UPAowwBk zG)%`fM!_D(#LO7eQ);=|YEYs11*GsDPo|sX{-boT?D+jE)$a+!{#=>I;6;;**L19` z{|39|^eS9!t{oUH$k zVQ*3a@3uQ?$hww9#OYw07#QhFPC{XR-ijkK)WSk=pznV-mDYzhysUgh)N4pNmmI+N zDiQm!+osoQw<%lHcU@C^faBpyJuzpZ4E2W57|W_Wng6Y~O2EcgWC=Q_?;1lkPh)T8 zj0e)zjB*7TedCUp#8Lp-Id{|gv!!g_AnJ`yshUtMe|zxb>7ec}R7sO){(V~QIm-+B zj7^4CgF17D{!p$IF(_xj!D?A*4GXUC=l$FMG|zXhE?Cuw5&6Pao3c`#JaljhW}|YC z#<6HOm7T`$Y#qZ&>QrH$VOjjLmK`2VFj5S{n>9n`;ulaXZf>p~Nz(mcOr9ZZB2AjV zV-|u2&T^%jDHh`dX7_?FE_KLjJPM)8^-WRUpMcV(h9#yCaKV_nEE7w_*Dwun@}RB8 z^WuSnw;g)_5_k>-)=IFya~N`9)1z8+VWa-RTQQ{MX8trF%{}rwBd?Lds2OSv-aSD~ zG=7}^q%Q97308YfBW-i{utH%b%KonQb1fPHVcC0(py^<4Zf+?C3kxM8s0^`5jefiv zBv9Lntr@7z6|rW1?}d8(qrV^wUw$o+UQL&@CZOMW7c@1Xzeo$u!hMy90WKjPU?hCf zP(-6-XZ6cI{KmV&-8!zJ@((96i>DdM$xVG^xwAvv6xX(BTn1P8yv2093SQlM9A8HP zVw4(A?%pIe$4S6Yd^zjnVP&99WV6Vd@%e*bk1!&B|&QE^ro?SHZ0hnlxJ|IYkPk{Akze365$nWl zOG;?y$l^HClgB++T7o`=N!apEIORi1j!<{T*#(AwOb^cp7Zsc=X;4trQWUpjWIQY2pTBcNPX z*3~xt)Ge{4Wr_LD8VPAb-D%m3nEOjlov^=t|8Lqmnee;2w{4a}i+kq5x<(Bn?>^TR zDSLnon`>kmw2Gu;UX)Z1ilJBTs`gJLkF;+M3SS0tvx&_W8A0*Np!Ra+L0$chi~WOv zGBRnQqW1&R5n>Z?CN!VQq_dQt%94K5D;t&uG%zlEDbyBve$>s(5~+bYkq##{iqhc=q>OW+Q`kA#O=W2}b>jS-VK73#jir0>Z9~X`s)}r?egYbi#^+?eqY)3sayv zfoCVDa(`9U#uj^77f{02Z`xdL#IskXgndVPjtcmJ7&-#4aOI(j@? z6v-WcO>!Np?&6xU|2sC;4V1>;@I_tL-(3<22?*qW{74i_pQ2>qN)i3a7#tc(EZR8B zu1yoPxeYCf3dZM+Ki-6YD9Wq+^E5p1Z%Q%diQT)h%h8ABFDz~DqvY)`mVaxYlXbd3 z)bhWb1G7cS4$PpS!gqo^0)?p`sZjgR7U3n1*e z!#_zH78{V(;?PHxwr?WO0ric&k7%T~_Y+s9qao#AKobWaT_l>}oY5&I$@z+0$@g4Y zb{VsHRT?FFO3l*whw`N~h?2@*tsLbwT4ZfgQ;Nz)mZaQS_CJH0w3%e>qHg6cw%F$; z_U>PqFXG*|KXBxflxX%x;?91?@E*#~hq>k+9-6mR*bVa_f8%^+Q^z^_I5;rvuR}41 zb;p8n_YJ>Tq6;c3m&EVhzl2EQ6vuh;{(I!p?~6=KKnp2K-wbV{KxL=Dn1!`Gz&JLi zCm$W9kD}HEK^M-~-3#83We@b6t@K#3`^glX*lC!0i*!tb0;grce~5*p-qT0)8DvcW z5g!0!iJuJr2|hx)ZZ`I~SIu@vEOP#zcqp)wEV)W1>|n8JimZ1KQ854X|gXwscOyAcxC zAEQa-j;G)9aUZejS!1;KEQo5zNc+qBCuLLKr9i}x*_7$HCq@K0To`{yU%uLjm-S5j zqP0o{bJ8hyzW^bH))qL0z8vW`a*%h^YuTQqN&oW=rLgeU`iY<~0G8G2&8n=eE)e!@ zwZP(n@Ng;%hZCF-jvjehllRdv?+0pi>fjlIkO7i?Z9nUnVIsCS$t^S3zfDApq}w-;_0I3z8Ubh=!FkH^Srn(sN?sp?TU z%HrCuurthp7q`Mk&~Dp6C5p?F5e5bmRjLzu*=IX(D;~q-iVEgFLY>JRt{g%U$4pa; zI4Z>{rsCHX$A*uh&4c&$M%YH=gq)P2wF6zfJYVUG3UxKq^l@<;o8N^;0>2Iwq@sR- z83{Y=0NU?jw?gMw>{rFv>i}^{+rodL?+q_E_znb6YA#i&Df-WrY)L!aVD!0I64eM_ z1NK~$_4V5kXa0hhmicx5W%mUZMjelHQYVRx;(40E?h+>#}hT<^v>eXM`ICOQr1zSLRi5;A>Ib&4)q)PtADjAk?R zq%nPf?kc=iO;EN;JNj1*{^A?5`AZM=?|Pj-L7+{{i8aNgt!6MgdtB{CQ`uWq2;9rw z-rf$DyC}ZcB?3`}rtW+6+1XA6m_ zb@AAMg;=7qO<~qfvXz1Ul7*3fM-og%f^u@9@DL>n8ROs-Bi>J!R7ZI;HZLZTtS-Ox z*8eV|e~K)?*8O6M2yA>sqsM}&;_mUE_)L5YipHU;Z!9N{E>o)vR1xoF9Nk`P_{y;_ zH{XL3CI{frN)wRQ>Dkjl3+TJ?_WQR)iBgy2z~k$pJh*dGp%=`JGrfJa&y9SONM(v- z(g|bxMN3jY-PTq9cM-;c#ka9?pX`^ml9Xd(IjMYi7m7o|ifbQ9r*NCXF=0*2y5ED^ zjvo!4MOT;Ewl}wKXZQS%%R3k*Z1?;xet%+Z2-bdaDR7A2l}@*JdE#GcL_<4S*>N=+ z8qSy5b48GogX~-bvL8R)U3!BsJ$_3(D6RGvs&SZiX6a;-T|*r8Y18-*Tzy^tE_55? zRT38$9CZLTm{Ds}Fu~%}{Rw|Byivm^2md|$v|A+NX=?INkMSp0bTDh4T;<1eTvU{s z(o6PyDi+p7d#T4Nx673^k&EE`+>gZt|EMVQth)V$zGprK8y;gzQbx0J8%gxqND1B`JgjY(fnxenAy)Q4Da$?f@l}0 zt4Dd^y`+D`#p&wk-{E2Rd*2=m&yo0bjJ$-B%>#=ndE%&$tlr82u5Q~wa|qHtM5|qb z46!zsEmhlpPkt_+xw-$K94ZJFQ%}%ryRJakoBxsY)$woU>*zPa0>vGv*;lD^Hp?4R zb#+wchU_y8uJwFb>?3>ZY`?4xN`fm{+xL*=^-K!sOBf7I9ejeU`y?A*pUiX))bP#VQ zTCll%-FB69)o3O)VQ&}1;1`o4z!BgGgdTx`sYrbP#}D7v(bjSN={1kN>D=Z8mtHzOJ#Ey7ak25_ z?xN*C`%}fbhaKsXRx4nHKA_MJDXK#-HWVb-Y_`B!R6Y6WPk#pW%x1r>MtSaZ*TC9y zp8lz`X3ZkZnib8Ad2cPLneaOP9XVJwi-jP@dcK_K2#E5 zM-R<5vQ#I^pF%|7ssjw$3S`BfE7ra2$m`D*lT*yWhVvu@MuS z66b*<;0b}v`%5koWb#lrI;!y0Zl1;w;0SO8!U+LYS2pUv8{Ys2>0RxKE? zd^>K0iD=`^MASjc$cYB_!$6RRP6Et2@XDrj$L=ax_P?0Nd)B!_vLvngbLEB&&T;{byQDRU*iEX#8*tb6{$|L(q?ksfdXW-+Qyz^5HFr#nD+CKwXV!%?4w z@{Z(zY?+x>hm$PF`HYO2&1UkS54U&e*)rW)NNJg*)}ePhfBrl&VZsE*DPgr`ScXer z+-nrf&$nbhb^V{%R3S>_2vjNYb*|7|Z#r-hJ12Dv3i&fLYUEQnZ@5 zcz}h!w5`3(_J0o~#YMC$_angmm&(r=jtD&bFtd3}-e$j-cP~zqbuoA0K`OyLcENDO zgZG&uz!BgG_=^CjEc*t(0UlOH4tD(g&O0}|T>!YDs%l0}ZQXK*uK=tw?8n?BiN-qD z50X3+#|i-!Z8l0YP_G_9I9h$2)I-m8@}vob*~W8Tz|M4WnGWp6jb#HUIUG*u2V*!i z%C9y!r2eiaXY=c!{Ji&opUxbqtDN?-=9Azo*;^}1dm)HhMZ%9ih&G^g#;`9gA*W7aT$R+)dNEV z@G#c@Bjl8Y?_z2f?;B{!^wqlx1~7PE!rgIy_wm7~E0ARZA9fR|esAy`F;8}p|CLq) z4IKmqB6{dNH`ymQrt=v9{Un}!G6nDeR|MC?RW2653Q!b!vCOu_ce%fw zs$K`wHRqkHt#_MY?%cUrSXvq_3c6{1o-~1C!ChCd!=HdEz>Z8R+e1f>DbwyBZ2yQ% zpL!n27?BQ(X*##l^(sY#ZS+t-SGAPNOrXjik z%*)#BLu3WQxf3u$qhagHorBqG9TZ{3yQVLxhBXQ2^7%eTV6X_>HKY7Xl<|W{9-%*i zio{iTA(y~LQczSRpws^J9aG947;Kx}oez7MTQER$YYP=G&4xGs`ud1K>DRfdKa%5^ ztVRtDUR5&Ccz@4_l-CuMicDBJH(qwPeh zW_q5EAldE77hZbBZU8ezXN>Q%Qw9Jj?WMVJ1k*FHq83Ystks>uJ1x^uhOgVPnWM^jnX*<#v+nT_fR7*+QWV6EOBXE!s( z?VO`0E8pP=_=P|ut4QD@LCY$tE?4ic{5MX1-J`Q+%^G8F-ncjL8oA1S4)s`kjI4P3 z?8H0hgiNF}uv&8(ukjX$uHs>3D;;SQAv>FnuY9g+DHd6N%{49(j+qBfctU#%c-`f; zy)v2aHa?0XVg9pueO1-XT0%cUx02m;4MgwfWo2cXOG--ASNga+ap>dBAijUapxL8} zgSTe3HH#m?M}Pz$s|vG$sjBpm85x~$5!(dGp-rGd0<25->HwoaJU2a}K{#Py3+l!I z!z%W_X z_ujOMVh>>*Q2%61?KpvxHZo!C!P+<8Mp;u6v*;*utDdxuj( z3=mO#B=Yc>q^O;a4~ODhMlF3f$ET)^*ytzuZG%+oO?c9K-E8joKSqYU;fL#!Lq+jM zyr)*;Wj`GQ`I;3)MQr9FA_Mez-hv@%w*(k{TTotA^*3O23MA?zv~H>)iu)&sAX_jM zHDOsn!J+cf@U_4_$vLlMpAjmi`Y`3Z ziEtc|Me6Gt$gYp~knKBnlNnPdlk~Lopb}t4XblDfnK*HR3#oM>wlQ5~*B|d}d*GbQ zWD4z=DkUYk$Jl^7s}By`owv-P2V3ms2#(nRM(0N42_$o(K*T=cO-D}uw_zax29NKn zu7G~jA2{GM0p5M)`IuPki1TELPQlYM1rn60Q)Xsfdf<~@%PPq!#<94$$2uU=!$bz7 zzHOWYJ0RiP03#4e6^Vg1T^59iYC}ML*d)k0{xQ(9qxrn@%E}*M(C(JVx#>5Aw$d|j z8}?{XQIUJ)MmHz1D15}LvH1i0m6w;#!8WvCFjN@GAX5p`;eCZ2j`Hz-hHQu2$X?7{ z>YNre001BWNkl}0A7`Bwu+@omogQKh!4fZOSXdSm!l&~-E{`D zq7SWIyXiSb2Hm9(bsR|KfK?oPX?to?+^X0Z|FiL)dVb4`8$a)#(i?-p zCKKCMvL91hYU(h*k{BPqC_OEe#K*<G1vP~LE$rwm|jq!uS zw@;xsp!P6OfsmmB;oL3U(DJTbyZZUrd+X3zeOAJlNtB3F@sgZ^RVPy*DVP$g&B#Sp zFf-EKJrp))K@Rz1|5;+Ub*&qkGmLlpYaj zR_hl;$9S%90fd6R)i1*9{USl5eYm`G({CE;&ONz$^=gxEC4_G-YbX7QRxjU!J{sJ# zGC46(UX1v4ZqkM-Dj+HjzBK+D-}pxLLqC4xx9!JIJmfLIEbnO~R=?IpFn<8|6qVMU zJ$sIP@zr4hbqf&PQDj_xE+!p7?Yk>fTqJiBT1IT+pkAPb`L4?@yR^$oSzMeVrHzBv zvUu#r;rH3TeIb{!dc-Hf6Lokpa%PGoafE~11-3(0Q8V;r(BLV)kGcYeV3vb5uTF(> zFq7s^VPqHGo|>DKoe!ehXGEwr;L4kjPQLNrLbB(h<0LL#Z=XCj;Y3}>SLZsc^{}qe zIm&LcjkD1f-0%jHL5c&5Dld&Apn^acsz_w1G?hhv;UR5UCP5`(5_A!(@J@0bv-iUS z#1|uP`FmKb_C&wLVH{CfTH0DswTY2ezt?Pogv8^#M^n<$?<+5_y0^Hv;LS*ea{2Nl zC!v4;6ux2q>#iTrYb`?jkP~1gk78CF0;S^MuCMOme)aQ*e{fInGAtIPx4BCPQ9W$3 znXdoGi!b^;NQYIM9-$l4>urX0fpK|xggLS>nM{Ovgk#PYblTp@={QJ=ladn2%{SfX zt~ore8-dKsUV)-0`bJ#YLbszwyJQ5o-;|P4M#H+p3=tOXJiclNg*&y`hmHWh_ueC# z)QMBaO`JAr&KLW7)x3;Gt&WPC&y=3|(RWF<+0C}*6CKuu+75HQxl?G?XU;c`kYs7> zkp_~3^4PB{bYB;&9(Ba~CGp`9+Ba-wrTzZiL(K zn~^KX;#4X~Q<+p3quwbar_O>p1J&Jh`wUWZx`i|~bb0rfG6U4#LtsR=)7E;@WUV{b zZmG9)+M4w?sRKk;#=1a-O!`7Kl;CRZOhv<%bQUAk`la)x)rvSrH}pbPvyzJph~X(`pq^5uyC zvzxSlM}hRRbvIreRRp|Z4+U=CyrK54qS9Yt@!C_)*{n8lM9b!X#r+H^p5ATUk#K-^n$B?{TXBgKEl8CS_CC4OG=h-^6LR8*>3$Gs?mOo zEd8XO9!_(cgzrj8PTshBB!0(jh6sqn;_cU=>FkaGL-kp>99;-10d}Z3`0A)4^pN&9 zi7J8@45l634nTT}5JZR_c^D7^Y@yo-I1KSOeDTE>#Mv|(^Wrw?A~9eV9(-vJwP}N= z0#Vm-bnL&6K5kr?|BwOeDplLVh^|d&Ih8ldUfT{G-6Ks$bXI%k2#H9UAhk?Kk^Opt zI?;vq3o*8b;3|YyOdvW)d3#sL^%SGJqcPY>+-OFEVJU^HNT}k(6M~C?vx>yzTZ{Uy z;tWjnp7iIuP4x$+1rbn6S!Ly&c!zkgQ!76fDhCD;0GVnNVcFud@`|e8L52&`DxbkS z_8o|C55UpkVL=x3uoN*GQj%GaPF#<7eUFDPwE{tcAA}V3(@4eMLZ#OYM0na={{)#% zcNZV1IGfyg-Q81P8jK`0P)$)S2Mg2st`WkGGFaQ>u)7V@tG!in32-kKL$Zf!kvA)} z8Ewi^*KeOYa+;19s6e7} ztDqtRhMt}OZhL~!$S^1qGwwh3*bG@d)M@JYp~pNtu?K-#D*rUqN?s~0E!+bMByP3- z0k&JUu-$q)J|mA}rY^sK4yPEIJiorO^5bQNh5MXhBVu=DVc~I@dOMA8Ac%k80ASRu zwDiq7prddnzpPUrs(sWI@ImgHFCS2kyG{bueaaMkT&y*SDx>ODgAwM?T-I^+mI1)^Dn|H48_-vQ~6H+F~` z0Lu?EVS;O#r|Mzz;fJs_+NIFuDI-r)5cp1EA)9&lcLlBJZ0l)14N*k2>$?TDEpv>Qh{Q?R@?+i zZ(s`*mlhVj?@N}rp|P#cYiRd?J2Xp(;7SijOkVA z_IGy-3SX>N_`Fbvu46%(9y+>gUn3fN8WnCkx;P6+a4Yv37j74Zw`b4@U_t2@YU5Ho zup>8Y*f1KlTYFt94!Xw3D*)5b*Lit8|3+;ZKk|ATzAY{(EPSz|qADF9k>9Dc5(N1d zNV`}qJ#6D;3JI|L*6Afl)l!T5GomXN=002(5cwnlW@c8?CQctOXaqRTVjg1QIE&J$ zbcA7iW_F6^$d|P}KpEq-J>-`~G8M>#?#1vunTGjJT3T8UMmisz*)%pb_SpAzg--_o z@`Up>0r&3aT92n=s~+ALIpRkCqxL?&F0TVgHg3ML91Pa#6PNLi1GxeKV(4tVX|5`L3}%FiTro9 zbRHjA1d56Zo+_`bx&#uz+ufB64tdeWjT^_pWpe+yR(B_aNt{e&v-6a^bF=IslameK z028s=K32-)zE&ZanbpOsrsl(MHk@V&Q-RbJ+y~6eD%`wdYS|GG=@?^NbMq9kY26Oe z+6-qGdJR0sW;=4h8HP;EmJVVvw-ZauDa1R@>d7)JcVc3UAi(}%VK$pdYinOCTMWFo z6skymwR-=`3pDV0GYPyM;NN{PKkusX-~DTT`jx65jzD)L6y@m?%&_5(3wA6NwedPQ z0>MXM`SRs8AQXr3V#{||8%%%QiuhqmfMMYBLU*`0#r?BepVcXf?*vkcCsMX$r`hOqPHUzkEd{tDfyilvPKZ6Kx{o!1ks{~kY5VfDzzW#kka}}xXU8`oF z2aalR<*A;i)yUC_5tYNB37xHSZNbDFYJ;aXk}*JE2!%b zm3oHLzw~T@WKF}DrAsMbNV_f?V*@V%mTe8f2h~p`FU+IPIyVUGX5Mf< z=KH}%pt!jBa7E>&KcOb~y4f;~JOV7k0)#qa8+HWvz?qk`-~)FGm4&IZF37%a&yHTH z6UgfrNP2&zz@?5^&yC2ulAGX`7s@N`3a;0ZA6 zu*upqYR{>PPiBoNf-&6y*(P%!ImFu$Sz0n>-UzaP=eZ$n39p_bFn9#)vVAM;wX9Gn zNf)0a-GDSkIEG!ogb$`s)q|bNpQ)$vlwcu%^(BA7`VzMU7}soGu<8v~xsYbMb$`lK zY>pp4&K!M2WjIj#at4)kQy~t7hgdQNrWdAyXigEdhAv%0Jbc$eU7;CXVwuh^BcT^x zG2Sf}jObeIt!Lph>kRw}baYyqG#05nRhDg8;2=!G?jmJZf3h9^1Y(5IBx!B}nI4ls z;*<2m(rHH>?QpC$JWQlB66|lV+3dt-v-LTRIk{kq-Sjc)nD;p$L^awYp+PNFwxN#VU0lA1Fu3IR?Z8Am#8Ej1mMdWGnkZH*d>y(6WY=w_e} z_HzpT%XB3At9Bq6D>kx>)H5dtVCVv54=Kj~!UGYE>INY2kS#ZtZvhm)T`y zm3O1KmwYTTda_aCY1OL?U-oCCr?ZjM6Q*}vQMHLlM$_E2T8xQdHgylVOAEKSxVXgY z(5BwST74QQAMA4&MF;Q?5dXoE$Lkl4`%#S6%}U%Z)rFRG9ag9=SfIL~Ytq>4rj*)q z*0C7(j06b5ZXbUF-M$2v3QBv^d`u~Wk$W;YJ@eN$4B{ci7P zpY0${$nwA4Cq#a%1Q)9|**sy}k;nEf$oW==$<}zT)6&om!mG7O9Vt-F8VgjI5-R&S z1r@B2!<|0?W@c3kus;E-)Im`>8aG!Y$)mzY-`DlZVERbW z{0<5Met6;0rr*AozgVNu{zsB6u^(3dPIF1#ciBQ3rwIkuCWZI0*=!;m<~GvYT1Q&i zVf;wbPMD*NHp^K~fW!OJ`PDi&HjqAj%hGt;e7{bM=*-2%OSV>2R_y_ynB}%37|7=4 z=HG|3r`)DTX(aSXP3oUptUTvo=n&}VBDc3Gq69Hr1OyB!HM#lYZd7ZkWE1|SmKN#p zm~B@cEwjC4=9jf^*&zk)qq^YXxeE(_0!$b91k@pzBskCnJJi<}f=Vs(?55MXHLTLF zIqmK3q`tnPC*E$i_3X19rt%QZ~w4xN=)q$Zd~X~uZ9Tek&629f#ZL10Q~Opl0% za6>>Q5*9@;-6V^}LNHZLtk6xeS#6MJ$|QYcGKopH5d&0T363>-C%q+^Hbtx6ou{h= zviA!-m|Ily2=r0d#eKJ=q-6Lk{E|tN>e~uB(`(kOF|J;{IwHuH>UE9K1ewqzwGW9| z5Nac#TiJPe_n@8b=bUBvC|pG!h=hI&sEsnL`*vSIkYTr?LTIGIaaO$IEQ_fuupg7? zhKoM|SeJl0#14?)3kIZ4F(BN6aFQsBvFYhHmfOqO zFaJImV+Vzc64m@C13phJAa(5mu37l4PPY;HiY1y2H^pFW2%v+dd-yZ8DLZ>}-;qorSa1UdxUG`8HSx z2wEFSnTVNDTr-KBBL6x1alfi^FCZlM0yeA0u5iy)?#)N#;idl2-E(-_`b&95(gO&oJSzFerlm1Mp~s`N`(fKHHtaLA) zdtF`F6X3OL*Xk3KQ-1EQ11t_RQI%?G(GZXRIfTGqzZ$C7B=!Av;eXX=4QQPyLR_U^aIx1<^wNISaOZlSkoc^zfeagx!#( zQ5rlIh}T|w?GIbueea5;rOUIv`06m(@nQabaX95XJpgidJx}OqOm3rseKf&)yIOAYLTa%m?7{p*=k6_*fx@w z;=WBx#ia!@ujV>R+UqIls24~p_RSscKaL$89c0&TkYfBCVej5gASKRGq{MY~b%g2B z@DP3oP%=Cv!0bvaEhzY~qOx)$MChezR|a?drG}W87ZxvGylnI4&B{weEpNofQ+cn- zSU~9-$niq#{59hH8DSluGQHmY5RFMr>HFc{9p+*ivnfANYbUrwWf2^HsHI18{I-)D z=UhJF$KQ|BkDMLJ{cvr&$yQHvsd}j0#p5P)&kJ17iKOGEre@OE*x0AZxwAx)IAYKe zr#@wd>>!vr!0971=G=47-J^Ey+O-D+_@bsWTJp)?63OganFO|t>^fdaE{$D5v^xJa zFsv}rT3cU3np*0yD6L5$x*DUI=wdLbVlxnl#t~6YAOeW49YnX?CJ;MqQ;2Sd^*Cwi zJV_c_kC9GGU*}fy#>|JS<5-Yf8>u^GCAFt4r2e#(2vREPXhA!>Z)&{;6E*{INxAu0Ja5cm{#?Sb^S6UNAY;w~*3;@~EL zZaeZs{uL8`asm_PW22!@jy{M6Gl|QPN!uCr4Uaw&?C2-krol!>#FAfjb!hNaAQH!q z8+VZdv?CwIlC)e4$(n(MN%|vX=YhA#g)?tz+XT^Thq)Q8Z6}QAYGWiq zEJjFmL3E`ALOVtgsV)ZY3@NeERuElCS1m_Ki-{54YGSdu(evzA8zCS6T}xWeiKMBn zoisM|&VrB0O6z09Igqz?V`CFWReQUVG!_nwDmn)`=izCpG4ad-L($`lGB!sjyK(< zg-cvwQpyW>cFtF84?fImR~8f=S4)qEc$g7O+;Qxga~EcP%LFD8RjbH#aTbu^R?>DB zlHf2Q!AFiBC7l>n`5Qj`@Iwd%@l+w$?Y)zIu~>e}R39Qb$b(dYc*egR$ymUd z0%a`t)|TPYfIx`^AjUhI>j65x*Q>rEH)-OnN2Z(OVF=CVa zzrfBHu%#9%5mrj#Ac1XxB?!j_456e@THIRzRO>f{kwnC+WSmmJkHqut9r1R(iA^?Xi_hHbXD*c58!)L=; zH@&Q)>ZgL>-i32FOpWcWt-lH&WMNknw3}NfKI_e<>4@92I=C> zBo@4}y(TAhP~+jh*Kjj1X>5SRh8sVmH_JJB~3^q%eBTTmO9|f$H@sGSwwx z0bdF}cObEfXDlZDNr6t4LTX`Ly!)7?(-duXPK={4wsl@CVvgNUL~9BNFuM(Uhe39W zK(=p6Ay=+~J}_AGaoejzK6gl2wa+Xs=-JPy(Bq#=gkq(cT~ke(+D{O>;WQMkwJ>KT zlhdEUC1NYo5#r$^TT2Z|i?&Ul zK8=hXJ(?s!TI?JoYU^`NoYO+RPerDZfS(hw?UL%+iJ-NsEZ`1xEBn_6MVemmfB)oR z6SK6a=$(qHs?~UW*LvzS7C$8634a+xal4I3-zzOFWQ*vcCSWzvYcPnYMu1sAi!m+# zqh-sMHAGFP!>}Xem6gkIFaEywYtpxo5L7joO{PEgjSY_@ruLAKl>9u%Z;_`K;obA# zefQnhSJBeb2@#m~;ALOzeDZ@y&*7_j?~#W07No^Z+LjuVe@O&(#bcB82~cE#+GNK$ zMuI~h7-w(3*CL#;Zp-WCH zz&WPFeFdDyww_OFjzE-*z8FS-MzqN%`jmyP5yFI`W{8$82}D-57?D{R z*Y6_vb?|6nj89Z(E?e6s;$H_y=IJwMm9nyOa{91zqZaa@AWMbuQMHO1O}kd3Y13-8 z9q_2vsncpLSTtzWYP2@3PA6%#I+-mZ)Cd|;qZM)aG?N{SOkqE3cXSop(cBZ#dUiR=Mf>u#WKy+?Ty0o;};{001B5NklrfuA~ajc-# zRsH|=t~b!sVzFxLBY1JzrAyh$B4@DG#aIk@R9FQJc=ioxif_YIitBz(*r?CzDot97HwYaM)GkIzkOHaU~F18D+s-@lUonWt;2# z=nDoj`DFJbbT#TMnWSL!raFRUWR@hlDdRIpci9+i*(4b6g0zKnDe=Ia+n#AzHsdaF zpf4Ujey=Raub_C=Oi_sk8%7UqqTc}DAW23@*YzP><6&Iu3EW${4GS7_S=S9smUV=( zO|9DyFG@pk8@%SLW{#bPgfe!NQE-fz^SY)P3UUXwqi&Q<=9tz)9kQ-zPULZ2RXLC8 zs>@}_(WnmndIPg6y2s-&!eNK*^Tmw;heI!qMh(oc=;3hKaJj0gT^?#fy_spE{GlUq z7j#gsK62zpfBr79K6wP7SN;HG6#t4NS@mw*giGfFqSWs>dh}sP>E}PeJ)rIGd++@W z=)&LN+Q!Rcf@BzHbWPpAq`j$(1HoVaaQkEaI_*2WyT-HS)Ya?$Y%54GOSBeTibNxH z{z5lh8tkR0GD!7}WhA>{(65aY?Q2==TJk4$7A-Rq1enzqEI+;6SaVAVuB0b^e{-}{ zJmVBZOm&QmjMBx6N#0|1c>ONhqKNEf^|#a<>PF4CZ+l{EngCk|zSZ;(e==4j!rD8z zJn;Jq^ya%7Y zF0V`#bv{xC*3#B18mX+xPQU)Xm$t0gNo9VYNoG4byXY*8#qhGqv|D5eFUKfLT1|!wnV>0uNo43SNO-mEfo36d)L!Z|xnWR-ViK`clF)2VilstWjBJIw` zF7}e4M)Tg$Qp#;ujxKISnp?U|Z#H^7w{?Pm;S-BOk`59^MhhOcA?Ub=3^^RQbK9|j zx$Vv3YwbJ7k6-B^2}WThyx14t@TT8m!}wrmP`d5$#~;c(%%)%KvZ?_=R=h5+_aAX@ z{%HvVR}D?Q?U6?w`DF=ZXRQcFrmL)}xdVY6?!#;65E?2et}M@zkft6)|3kCZxdmMD zwb$OVdhh*1otv*qdTQEQckur<)!cgHe0G_=PetP(g1zVHd`}0FBTAlfojm^1_(Xo+ zE25tuuL3QyB55WFFzfDq^t+5VsUpqg?CR?3qEM*t<+pZ+Obr{7woy3;ErAt$I0tUu z{=^ky#G?ncJ^2b$B0ii6l?X+F5^pNO0Du}AR}&M_1Ch6*{t}@9lH^ZcN-P$z-sZNK} zW^c7Q>=LB0GNiH?j^u>U)ro%KDA|k4*^lx}T-gl^|LX8FQ`6}HfdHG!AjodaC8YM? zAir-f)DqI`^RfUh3ap+WLC+S#Ei*UO6c==jE4oBgo3Dc#>aMQr`^YEM@~9fQrifu{<;u zwE7YcT3E$aY+kzL*F?HlB)Ge-dMXH&i2c)5iBOe{2)?SeoGjv4TUSpPFLc41Lvp`_ zCrNg?_S*dsJe+=Qw>kVwTru_PhRD@}hl~#wA(K{D_qp?QDsTqmmsfLBb#=vBuiLja zcWdcuJS|`)OImHMgPdE7lg#m`1Yxy^tC{0DE88*zR>Hbuu45Z7Tl=l;7TGQJMx101 z7e{e}&0E{?YXL$bL)Sz2dGr1qz_XYV%m;7_WAbwEiu==bx``Tg>8 z()ld}3_c{>I{f$l_LV9+@OUpd+y?!&{e^wEZTYLycALAn*tAfE1-3y)SBtB|ouf*B zPc+`2h-!oGgc55+gsT;#I5z4rA4skrzcTz*ke+bDq9{%Z4A?kA>~QQPJWzGej=h`V zA~lz57`j36Q3v&(S54JTR^Pl~&jG5hT%Wlf3-oEGHnFFwzP_Z!mB!&}OHAF}-RVfQ zg(A{=p*gzx3J?*?P^!dw7gI5O+nQ3%F%n>F5TCpG7!!@7P>FbZswxo`)ht*|CXbgj z1d<8r2DD{+J)MS%1Sj2=8>|9e7^++j$2RP0Fbfp;v#N0={07HNbqYvnb4qyX`$%Hn zchSn6?WL}ajAZnBpn;fk7`r!N4r~(DG(pWGu@=d-_NCWzsu3$i5ir8o-GUcI2uO!m zlB<#4VuSwZ?c1N}v?Mr1s}MV96@f<{e)!-2;rQ`4YIW%gk}N#|A~5c~I;$O7fRzJ_ zgP6uY0Yj+IE@tDuxqud464t-;@(B(OabPamo6k1z+!}-w`H9aRdFZ>39DZm%yE3P3 zzt;3MzbEQ|rXK158Z`RFA(z5jzsy8huyAfKA+owjdQ+`Ree0gf?{E3M?!(9=juO|}kkHz#Mr=mt03`1Y7tIqXC%(vboy3w^Dx*)v@{QgVO;Uz?rRW49C zc8&%{+i5hK)5UbFs&W}!Xw&KZ*-`54LNwY`q}ct}-bkHYJn5KB_Fe21GWl6#ZJVt; z8i_z>_u{0hXKxSrVU4XyT%c*2ueP(aJC{^h1(r%)Y9zSns6=eMyq5Oew2nS_ryaV# z8LsVe+h_y!Sp=A8sj?Fc!`J|;R!11)Vrk394RjtCKy6LdeIl#mSkVSmdXVFut)xV4 zaBb{|w*;u_vII3PO-)H(v(_zAJNk3j?4(j^_RCyj1H7tD!p6nIW?H#H7cn;(!m|Pd zS2A^S;hL|RDB4m?AJ;IRo>sHs;F&|<$-{?PrR48HVqP$0$78s+K96&`XXaX1yfp!b zKZg4*e8ACji+2>W+jAIJ-VOaUs64P2_@$fh4uMLa^er_J|J&v0FS<dF>bkm4SKMnsZr2*7M0ZV!=-QwcH%bY(caNxD2*3eD zws1Q|6O)VJ{??0_n9v-sb1gGE+uPF&*9w?r_0R^}rP)f{Rs^J%o$;_rX`w(B(`mbA zbuz-6-H{&NbgEm>$Kpe@xCA)6_tQ~{xa+}f#O}}xgWYH(Yh|ClRW%vua8g?<)1u+& zhu4QPT=+>f0E?Jr=W>d;R&J7L@FHA~U@F4xlc=n57@?MBgic1Zu@yn;3!g+dt;LAinL3ulqC8V>oeXOV#87 z3D}0WD9`RvRc&TgnAiXCdO20EO;F7mg)W3Y-raHO-L^7Ug9P=3a7-Q4656OAlHN5a zx|)B(Jx+2)H<3wr;Y3YC6xo>6Ns)Lf4M)#WKZtHZ$;{?*8&ghtQh*1YbNrW~d8eCX z0Pa#*_aH6Zd;OJ;-X_FzaO7GHQ^9g#fN`9GtPMrgoG_HbVD2Fv8>kVa=Fs=ASju(YMUCb zTmdQJ5=+-=wj5di-j_6vCy~ z4RFeLUxhyK7kkMGGsE`&_cm0QG1o1e+D|K_$!|k-p@~$OhOD{5N4^S3X;p)If3<=} zdNv|9KnK~pMYu-cs&lrQQDPy${&_I;^5Wq76H3a44|I z$*(~QY+u_j>;T3YfP^>5xnd+v-?QTxxLYWkN+!V8;ZsqGXk1rGjq9u$k~xd;t%S~6 zi)KDuqRC%9E~%c{NB#%(f%hXhWd6V^Eg`T3J@ENGbmE2ga}HRZ5@2J9^>A@ZwLobK zIY=&y&hQD`a`(=syK$o>0nR}RR#JKEVs-f;kn(N%6O5dHB_)phwQ}W38>AvKq!f4$ zz*ROZPci+63`$5~(|E8mSvHqBPv8gtzv*qTJWK9Fj+Ya=8Rn-APokI;<3mH94k^D z0+7f&j|WE$KAs=MIjYawy_i-LU>kTYQWIvn-oaG-FCKmL(Uapn7Z=mOX0)&DCmYh= z>^c=S*S?1LMFyb{{8|-Ve`J7$2NP6XvTorCC|h z+X!y;nM#ry&pQ55A|8jaTBhFK-d@vq4Nk2POMrh4I2N#$^Vc)`LZMbeRaO4lh;Xa| zJXfP0kBh3I@=&`eYKjjttt{*%+*g-y9R+dE1wr!yaPxi|^6ubo`bS!(B5<2D0cLon zqY`1kt7cvNM&5le6GYQxE2lNSTM;0>iCnfyYVhv0nl344N7uLBdl|I_V^jf&bw#z4 zY8ocx>87N17C<5XTx3mpcvVOlok5bzMrW#~Hy8VQGK{AdK=(x#mJ$Lfqp`dv!crQc z7z-ni3K;T5EPfFlGiq%f&kB&@GJHWeFl#U&q2Qn?;~{An_&ymYanu!S7YAIimaQDo zjK*xk$A0cMMCyc_02t~f!f(9s#>ISZ4*2l1suOtzfmST$5a4_XuvPSY&`oE4>8B0b ztu1*u&W0>G3DI&$vZo}od9$ldgJ9B5Vn3U5;|9@~$<>E)(7= z?|P8lHHbfuR?Xy(-U>(TcXXkrmnthOsIsDhRy5RApFG(_9B+UVv=|6MB+O<0bLh}L z??gr;T6iQZ4-F2vhr=WOk&$o})EDYN-loL2tjc4tIGs6@JD~spfbMd+`@CLvzt86n zBSt~O@Ay~WZdf4Oy?jZ{QPgnFMyBA044?k zlBNfvk`nmjmCrF(8I$f9v!%2RQ$8V6Rf({=6^mp%1m!m`Cm2JLa=;bPQF=2HMMq%u7o5s;-G=^ME&Os)7{vv z{f)Ho@+z|F=P)UgbMH8eEbH0FTh225P(z3?hE zfUs-Bk!UnFIx?aS4~OO9@UU}uc-S8v4p+e~853no;tUlCC&;a*&*ulZ_4wjmpO2&7 zLY>%IhB&gAL7{q(V4guKeHMj-W4RFN)j8i9ibfcSpFwv5xIPdil!>kqP`kR%96b1Z z={m6E0A9-GDHC9;@~Nmq@Uh{c%=pGgfHT*h)r`m|Kma#A%tNV-r{i!_n1LYhXn@g~ z68dd#{OnYw2PSAz>=p~<%mudx`MML_KLzprTY z_P=$}uKinSpohs?l527>ElxZ$J37KM`*6?zd0J1WcABh&&yeb ztB!xr?Io|*3-47hhZvi{e~p38j;-OaHF)r*-##f zWZt5anh^rbCvmbW5rh4iS$9@u&rZvj0OOuF&O@^aMrH;= z`9f8JJu4uODI?AI?K-wFm3FdEo>&$L2m}NI0s(sZX@{H%1%}!Sl(7vQJyBM z4UP5G(R!9(;FK($%B*9v`N8T{8?4Rgyt2kc2R^-q-u>C2=?W~pBeh^NV-n<%j{HJJ z)<=eu#Ml92`Rv5}TXA4lIp)rhpDPvF$h~hl#@v%HEAw?<9cr#G zQuwx6m|MiieGNJKQj#ksL~d4&Hb>66Qc)!Nt#9A@K7YXTJg?95zMkjxJWoeon-}u% zPlev-YnV~GySRdQEm>KCu^EGiX8jr?-<9Tm3*zid;}@c=ws%X51QAA3D`BMO(*P4Lx(j0b`N&o?BQG}C2sqFRox^Gbz975r@F z;PLcF&3tDN{^#+t9odn<)Jmo-emL-(?df}8Qn0p0qC|loEFdh#w;y+`s*Vc;Z&8$e znB<4r*{Lqg=jO?;*KUkCI@tKO&V^P4 z51J_LL*QZi9uD0c8gW;7u&o{ElJa7MC`T<$3htI4P`TRlcZP<#0Ff(Y{~{O!#J3aQ zBqg@oTwObND)*vLTCk(f3Z+?#2yDoNwVp1ZOaJyt^J2nzyro9!Ot`mrlwOk=%rlDF zMqX=3m+!f_bMx)q@>4B5$=_(9UR%bbU8!;p{P9~}iCuVu8w^$6_x;1PZTI(-b%%(Bx-{l^Xzd&(ttX_`Zy#IF0!flJ(rZSOXo!FV%x`M7&p956m_CTpM@Nd7U~QHD<20L zseyso-a(vKYkbXQbqk+JP3&s`j7bVC8~aaqkJ93^9I<{3~=@@05 zow>#!wTb5?T^e+LKhAKc@~*g4{BAU0NV#SD+q3*;|?RyBt19v4J`W5*$vn)2-CfNpU{>J$_Sr z+c|k+cH^j`5O9fBMOt=3Ace4P8y0q@CVXUoS%C8VujZb>*%;|Onbg$jbxL0)9g|m< zr0m^=%t~TyfOFTq^Kl}%mR}WHEBb2{ThERFhHP$ssby^E!}By44;>aSI|6cept8aK z{vbDTuLGyV1UyWVolhILW3*5zuX+NQ*=!eQVa#OY8JiPL3Mj)qf==ZpXXPSC!~@Yd zu=Z`5ZcRpK)w^#BNrOrSG+vZI!J(-eBsI*e$Ro)>H20CVKP!48Fa zl{bdjYx3{$sop3SL^hwNx5mP#`T?lKG^Gbn712Gbk`i8lT*7--Jnx7C19T--^z4iz zgj;?u%RtBOMUH@5Wv>V8xO{OOQeppoa$$k%B<-5$ff2e8vTp^3VPeq5>S)3P zU#s_S$rZtchpJ{wC*!%9-Y%Iq7J|AdtsZVNw(7gr zE%e1~osE%_b&0@9b(6wX-ub>Lt$5rce0vMjP1^LC1<hep$Z!hH6sRQwk1%VQFRFqjn#tw?H@Y| zY6)IlQ*rw{TTx;m)~}VkeT1j3IpiQZC?Lj;BJX-XZ`!b_t{2vB2!8`Dw7jICk+$`~ z$IUpI)A-)&-pEGPm*;nnYl$&5$^c0ND9a+=UlV85iGxrAp9O=r82OXdhje=K$$-XD zm&uG~JxNderwz97MNWavmm0_;?)+CCNQB>zkwAoeR14Oc5)K~Z2S6g(hK7bwmA{z5 zilyQJbJunuEqmwX;xN5t;$NSpm^pRorH7De58knv%MNjU#$+(O1q}>B^GeYVuKQUR zSEM&{&4>TZt#?JU-#p|gv@&$_N~d=Gd3umld0AsI=Q z)EqB+qaPvO<%vj_MP3(}*WU731x}*(2BKu|S8&Qux6BSD)b<9bpZ}+Pt_5vmxWqZt*HAi1+TWj@cbA;Me0&>#02Y7(Ly;uopX&Wx|0wZzn5iQUbMdhR>CYkRJADugBZAczqsj@R_@*B% z_wqqqLAOw>-)(sSkPhCdejXG}?q`8mkrin&J3#T{DZDKuSj?d$z<$iwezdfJGuGF` n1`_@ux~v1zcv$3T$wfHi^6l}-Bcsea*jUXRWo=x8bc_5yjzj+0 diff --git a/workbench/src/site/xhtml/index.xhtml b/workbench/src/site/xhtml/index.xhtml index d33e56063..70647ea7c 100644 --- a/workbench/src/site/xhtml/index.xhtml +++ b/workbench/src/site/xhtml/index.xhtml @@ -28,10 +28,7 @@ - - - WAN Bridge and HTTP Gateway - - - - -
- -

- The WAN Bridge & HTTP Gateway in the Cling Workbench -

- -

- The Cling Workbench features an HTTP Gateway, so you can access all your UPnP devices - with a webbrowser, either while you are at home or even remotely. The HTTP interface is RESTful and - utilizes XHTML, thus enabling HATEOAS and easy - programmatic client access. (It's not "pretty" for humans.) -

- -

- Furthermore, the WAN Bridge maintains a durable live connection between two LANs, typically - over a WAN. Endpoint connection management is implemented with RESTful HTTP interfaces. In other words, - you can discover and control your friends UPnP devices over the public Internet, and they - can discover and control yours. Devices from a remote LAN appear on your LAN and they act like they are - connected directly on your LAN. (At this time GENA eventing is not supported and subscriptions - to bridged remote devices will result in an error.) -

- - WAN Bridge - -

- The following screenshot shows the WAN Bridge configuration panel in the Cling Workbench with - two connected endpoints. The local Workbench is connected to two other Workbench instances. - In the background you see a proxy MediaServer device from one of the - connected endpoints: -

- - Cling Workbench Screenshot 5 - -

- If available, the Workbench can create a NAT port mapping on your router and discover the - external IP address automatically. After starting the bridge you may access the local URL with - your webbrowser immediately, or send it to a friend who also has a running bridge. One of you will - then create the link by entering and connecting to the other's URL. It doesn't matter who sends - the URL and who creates the link, all UPnP devices from one LAN will be visible on the other LAN, - respectively. Either side may disconnect the link at any time. -

- -

- All communication by default is in clear-text with plain HTTP, no HTTPS or other protocols. Security - is based on an authentication key embedded in the URL and all HTTP messages between two bridge - endpoints. -

- -

Starting the bridge from the command-line

- -

- The extra package - cling-workbench-bridge-cli.jar provides a command-line version of the WAN Bridge. You can start it directly - from your shell: -

- -
- -

- The options are the LAN interface for binding the HTTP gateway (192.168.0.123) and - the WAN-reachable hostname and port, which will be send to other endpoints for connecting. - The optional -demo argument can be provided to start a demo Binary Light device on - the UPnP stack that runs the bridge, this helps with testing. -

- -

- Security is also based on an authentication key, so you have to watch the startup log messages of the - bridge for the generated key: -

- -
- -

- No port mapping on your NAT router will be created, you have to ensure that the configured WAN - hostname and port is reachable and mapped to the LAN host (and same port) on which the HTTP gateway - is bound. Open the local URL in your webbrowser to test this. Then access the minimal interface for - bridge link management with http://my.wan.hostname.and.port:8123/link?auth=[key]. -

- -
- - - - -