<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!--
    * Licensed to the Apache Software Foundation (ASF) under one
    * or more contributor license agreements.  See the NOTICE file
    * distributed with this work for additional information
    * regarding copyright ownership.  The ASF licenses this file
    * to you under the Apache License, Version 2.0 (the
    * "License"); you may not use this file except in compliance
    * with the License.  You may obtain a copy of the License at
    * 
    *   http://www.apache.org/licenses/LICENSE-2.0
    * 
    * Unless required by applicable law or agreed to in writing,
    * software distributed under the License is distributed on an
    * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
    * KIND, either express or implied.  See the License for the
    * specific language governing permissions and limitations
    * under the License.    
-->
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
   xmlns:dc="http://purl.org/dc/elements/1.1/"
   xmlns:cc="http://web.resource.org/cc/"
   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
   xmlns:svg="http://www.w3.org/2000/svg"
   xmlns="http://www.w3.org/2000/svg"
   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
   width="1052.3622"
   height="744.09448"
   id="svg2"
   sodipodi:version="0.32"
   inkscape:version="0.44"
   sodipodi:docbase="C:\simon\Projects\Tuscany\java\java-head\sca\samples\helloworld-jsonrpc-webapp"
   sodipodi:docname="helloworld-jsonrpc-webapp.svg"
   version="1.0"
   inkscape:export-filename="C:\simon\Projects\Tuscany\java\java-head\sca\samples\helloworld-jsonrpc-webapp\helloworld-jsonrpc.png"
   inkscape:export-xdpi="52.84"
   inkscape:export-ydpi="52.84">
  <defs
     id="defs4" />
  <sodipodi:namedview
     id="base"
     pagecolor="#ffffff"
     bordercolor="#666666"
     borderopacity="1.0"
     gridtolerance="10000"
     guidetolerance="10"
     objecttolerance="10"
     inkscape:pageopacity="0.0"
     inkscape:pageshadow="2"
     inkscape:zoom="1.4"
     inkscape:cx="516.28571"
     inkscape:cy="414.63224"
     inkscape:document-units="px"
     inkscape:current-layer="layer1"
     inkscape:window-width="1054"
     inkscape:window-height="721"
     inkscape:window-x="158"
     inkscape:window-y="164" />
  <metadata
     id="metadata7">
    <rdf:RDF>
      <cc:Work
         rdf:about="">
        <dc:format>image/svg+xml</dc:format>
        <dc:type
           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
      </cc:Work>
    </rdf:RDF>
  </metadata>
  <g
     inkscape:label="Layer 1"
     inkscape:groupmode="layer"
     id="layer1">
    <g
       id="g2997"
       transform="translate(144.2857,52.85714)">
      <rect
         rx="8.0946665"
         ry="12.692303"
         y="192.00233"
         x="258.31134"
         height="299.99988"
         width="262.14267"
         id="rect2067"
         style="opacity:1;fill:#90baf4;fill-opacity:1;stroke:#060000;stroke-width:1.99999893;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
      <flowRoot
         id="flowRoot2954"
         xml:space="preserve"><flowRegion
           id="flowRegion2956"><rect
             y="212.66591"
             x="281.42856"
             height="61.42857"
             width="170"
             id="rect2958" /></flowRegion><flowPara
           id="flowPara2960">helloworldjsonrpc</flowPara></flowRoot>    </g>
    <rect
       style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
       id="rect2988"
       width="115.66247"
       height="85.862968"
       x="449.91632"
       y="349.31049"
       rx="6.9961648"
       ry="7.1230249" />
    <flowRoot
       xml:space="preserve"
       id="flowRoot2966"
       transform="translate(190.3256,143.3719)"><flowRegion
         id="flowRegion2968"><rect
           id="rect2970"
           width="170"
           height="61.42857"
           x="281.42856"
           y="212.66591" /></flowRegion><flowPara
         id="flowPara2972">HelloWorld</flowPara><flowPara
         id="flowPara1883">JSONService</flowPara><flowPara
         id="flowPara1885">Component</flowPara></flowRoot>    <path
       style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:1.00000036px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
       d="M 373.48019,364.72909 L 455.16689,364.72909 L 470.019,392.34681 L 452.69154,417.84009 L 373.48019,417.84009 L 392.04536,392.34681 L 373.48019,364.72909 z "
       id="path3017" />
    <flowRoot
       xml:space="preserve"
       id="flowRoot1887"
       transform="translate(113.6483,167.4037)"><flowRegion
         id="flowRegion1889"><rect
           id="rect1891"
           width="170"
           height="61.42857"
           x="281.42856"
           y="212.66591" /></flowRegion><flowPara
         id="flowPara1893">HelloWorld</flowPara><flowPara
         id="flowPara1897">Service</flowPara></flowRoot>    <rect
       style="opacity:1;fill:#f19a9a;fill-opacity:1;stroke:#2e2424;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 1;stroke-dashoffset:0;stroke-opacity:1"
       id="rect1888"
       width="85"
       height="97.85714"
       x="214.28571"
       y="340.52307"
       rx="6.9961648"
       ry="7.1230249" />
    <flowRoot
       xml:space="preserve"
       id="flowRoot1892"
       transform="translate(-56.88742,135.3526)"><flowRegion
         id="flowRegion1894"><rect
           id="rect1896"
           width="170"
           height="61.42857"
           x="281.42856"
           y="212.66591" /></flowRegion><flowPara
         id="flowPara1900">WebApp</flowPara></flowRoot>    <rect
       style="opacity:1;fill:#f19a9a;fill-opacity:1;stroke:#2e2424;stroke-width:1;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:3, 1;stroke-dashoffset:0;stroke-opacity:1"
       id="rect1912"
       width="45.714287"
       height="40.714287"
       x="277.85715"
       y="370.52304"
       rx="6.9961648"
       ry="7.1230249" />
    <flowRoot
       xml:space="preserve"
       id="flowRoot1914"
       transform="translate(1.400116,166.6895)"><flowRegion
         id="flowRegion1916"><rect
           id="rect1918"
           width="170"
           height="61.42857"
           x="281.42856"
           y="212.66591" /></flowRegion><flowPara
         id="flowPara1920">DOJO</flowPara></flowRoot>    <path
       style="fill:none;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
       d="M 324.28571,391.23734 C 391.42857,391.95163 391.42857,391.95163 391.42857,391.95163"
       id="path1922" />
  </g>
</svg>
