Multimedia support - Refractored video processing.
authorJoar Wandborg <git@wandborg.com>
Sat, 24 Sep 2011 00:21:46 +0000 (02:21 +0200)
committerJoar Wandborg <git@wandborg.com>
Sat, 24 Sep 2011 00:21:46 +0000 (02:21 +0200)
mediagoblin/media_types/__init__.py
mediagoblin/media_types/video/presets/web-advanced.json [new file with mode: 0644]
mediagoblin/media_types/video/presets/web-flv.png [new file with mode: 0644]
mediagoblin/media_types/video/presets/web-webm.svg [new file with mode: 0644]
mediagoblin/media_types/video/presets/web.svg [new file with mode: 0644]
mediagoblin/media_types/video/processing.py
mediagoblin/static/images/media_thumbs/video.jpg [new file with mode: 0644]
mediagoblin/templates/mediagoblin/media_displays/video.html

index 67dab418c6cf13ac2570bf5ee94ce4e0ad997ca1..6a368cdaccb299b933b99b6709095a945deb38d6 100644 (file)
@@ -51,6 +51,7 @@ def get_media_managers():
             
         yield media_type, sys.modules[media_type].MEDIA_MANAGER
 
+
 def get_media_manager(_media_type = None):
     for media_type, manager in get_media_managers():
         if media_type in _media_type:
diff --git a/mediagoblin/media_types/video/presets/web-advanced.json b/mediagoblin/media_types/video/presets/web-advanced.json
new file mode 100644 (file)
index 0000000..ce1d22f
--- /dev/null
@@ -0,0 +1,505 @@
+{
+    "make": "Generic",
+    "model": "Web Browser (Advanced)",
+    "description": "Media for World Wide Web",
+    "version": "0.1",
+    "author": {
+        "name": "Dionisio E Alonso",
+        "email": "dealonso@gmail.com"
+    },
+    "icon": "file://web.svg",
+    "default": "WebM 480p",
+    "presets": [
+        {
+            "name": "H.264 720p",
+            "extension": "mp4",
+            "container": "qtmux",
+            "vcodec": {
+                "name": "x264enc",
+                "container": "qtmux",
+                "width": [
+                    960, 1280
+                ],
+                "height": [
+                    720, 720
+                ],
+                "rate": [
+                    1, 30
+                ],
+                "passes": [
+                    "pass=qual quantizer=23 subme=6 cabac=0 threads=0"
+                ]
+            },
+            "acodec": {
+                "name": "faac",
+                "container": "qtmux",
+                "width": [
+                    8, 24
+                ],
+                "depth": [
+                    8, 24
+                ],
+                "rate": [
+                    8000, 96000
+                ],
+                "channels": [
+                    1, 2
+                ],
+                "passes": [
+                    "bitrate=131072 profile=LC"
+                ]
+            }
+        },
+        {
+            "name": "WebM 720p",
+            "extension": "webm",
+            "container": "webmmux",
+            "icon": "file://web-webm.svg",
+            "vcodec": {
+                "name": "vp8enc",
+                "container": "webmmux",
+                "width": [
+                    960, 1280
+                ],
+                "height": [
+                    720, 720
+                ],
+                "rate": [
+                    1, 30
+                ],
+                "passes": [
+                    "quality=5.75 threads=%(threads)s speed=2"
+                ]
+            },
+            "acodec": {
+                "name": "vorbisenc",
+                "container": "webmmux",
+                "width": [
+                    8, 32
+                ],
+                "depth": [
+                    8, 24
+                ],
+                "rate": [
+                    8000, 96000
+                ],
+                "channels": [
+                    1, 2
+                ],
+                "passes": [
+                    "quality=0.3"
+                ]
+            }
+        },
+        {
+            "name": "Flash Video 720p",
+            "extension": "flv",
+            "icon": "file://web-flv.png",
+            "container": "flvmux",
+            "vcodec": {
+                "name": "x264enc",
+                "container": "flvmux",
+                "width": [
+                    960, 1280
+                ],
+                "height": [
+                    720, 720
+                ],
+                "rate": [
+                    1, 30
+                ],
+                "passes": [
+                    "pass=qual quantizer=23 subme=6 cabac=0 threads=0"
+                ]
+            },
+            "acodec": {
+                "name": "faac",
+                "container": "flvmux",
+                "width": [
+                    8, 24
+                ],
+                "depth": [
+                    8, 24
+                ],
+                "rate": [
+                    8000, 96000
+                ],
+                "channels": [
+                    1, 2
+                ],
+                "passes": [
+                    "bitrate=131072 profile=LC"
+                ]
+            }
+        },
+
+        {
+            "name": "H.264 576p",
+            "extension": "mp4",
+            "container": "qtmux",
+            "vcodec": {
+                "name": "x264enc",
+                "container": "qtmux",
+                "width": [
+                    768, 1024
+                ],
+                "height": [
+                    576, 576
+                ],
+                "rate": [
+                    1, 30
+                ],
+                "passes": [
+                    "pass=qual quantizer=23 subme=6 cabac=0 threads=0"
+                ]
+            },
+            "acodec": {
+                "name": "faac",
+                "container": "qtmux",
+                "width": [
+                    8, 24
+                ],
+                "depth": [
+                    8, 24
+                ],
+                "rate": [
+                    8000, 96000
+                ],
+                "channels": [
+                    1, 2
+                ],
+                "passes": [
+                    "bitrate=131072 profile=LC"
+                ]
+            }
+        },
+        {
+            "name": "WebM 576p",
+            "extension": "webm",
+            "container": "webmmux",
+            "icon": "file://web-webm.svg",
+            "vcodec": {
+                "name": "vp8enc",
+                "container": "webmmux",
+                "width": [
+                    768, 1024
+                ],
+                "height": [
+                    576, 576
+                ],
+                "rate": [
+                    1, 30
+                ],
+                "passes": [
+                    "quality=5.75 threads=%(threads)s speed=2"
+                ]
+            },
+            "acodec": {
+                "name": "vorbisenc",
+                "container": "webmmux",
+                "width": [
+                    8, 32
+                ],
+                "depth": [
+                    8, 24
+                ],
+                "rate": [
+                    8000, 96000
+                ],
+                "channels": [
+                    1, 2
+                ],
+                "passes": [
+                    "quality=0.3"
+                ]
+            }
+        },
+        {
+            "name": "Flash Video 576p",
+            "extension": "flv",
+            "icon": "file://web-flv.png",
+            "container": "flvmux",
+            "vcodec": {
+                "name": "x264enc",
+                "container": "flvmux",
+                "width": [
+                    768, 1024
+                ],
+                "height": [
+                    576, 576
+                ],
+                "rate": [
+                    1, 30
+                ],
+                "passes": [
+                    "pass=qual quantizer=23 subme=6 cabac=0 threads=0"
+                ]
+            },
+            "acodec": {
+                "name": "faac",
+                "container": "flvmux",
+                "width": [
+                    8, 24
+                ],
+                "depth": [
+                    8, 24
+                ],
+                "rate": [
+                    8000, 96000
+                ],
+                "channels": [
+                    1, 2
+                ],
+                "passes": [
+                    "bitrate=131072 profile=LC"
+                ]
+            }
+        },
+
+        {
+            "name": "H.264 480p",
+            "extension": "mp4",
+            "container": "qtmux",
+            "vcodec": {
+                "name": "x264enc",
+                "container": "qtmux",
+                "width": [
+                    640, 854
+                ],
+                "height": [
+                    480, 480
+                ],
+                "rate": [
+                    1, 30
+                ],
+                "passes": [
+                    "pass=qual quantizer=23 subme=6 cabac=0 threads=0"
+                ]
+            },
+            "acodec": {
+                "name": "faac",
+                "container": "qtmux",
+                "width": [
+                    8, 24
+                ],
+                "depth": [
+                    8, 24
+                ],
+                "rate": [
+                    8000, 96000
+                ],
+                "channels": [
+                    1, 2
+                ],
+                "passes": [
+                    "bitrate=131072 profile=LC"
+                ]
+            }
+        },
+        {
+            "name": "WebM 480p",
+            "extension": "webm",
+            "container": "webmmux",
+            "icon": "file://web-webm.svg",
+            "vcodec": {
+                "name": "vp8enc",
+                "container": "webmmux",
+                "width": [
+                    640, 854
+                ],
+                "height": [
+                    480, 480
+                ],
+                "rate": [
+                    1, 30
+                ],
+                "passes": [
+                    "quality=5.75 threads=%(threads)s speed=2"
+                ]
+            },
+            "acodec": {
+                "name": "vorbisenc",
+                "container": "webmmux",
+                "width": [
+                    8, 32
+                ],
+                "depth": [
+                    8, 24
+                ],
+                "rate": [
+                    8000, 96000
+                ],
+                "channels": [
+                    1, 2
+                ],
+                "passes": [
+                    "quality=0.3"
+                ]
+            }
+        },
+        {
+            "name": "Flash Video 480p",
+            "extension": "flv",
+            "icon": "file://web-flv.png",
+            "container": "flvmux",
+            "vcodec": {
+                "name": "x264enc",
+                "container": "flvmux",
+                "width": [
+                    640, 854
+                ],
+                "height": [
+                    480, 480
+                ],
+                "rate": [
+                    1, 30
+                ],
+                "passes": [
+                    "pass=qual quantizer=23 subme=6 cabac=0 threads=0"
+                ]
+            },
+            "acodec": {
+                "name": "faac",
+                "container": "flvmux",
+                "width": [
+                    8, 24
+                ],
+                "depth": [
+                    8, 24
+                ],
+                "rate": [
+                    8000, 96000
+                ],
+                "channels": [
+                    1, 2
+                ],
+                "passes": [
+                    "bitrate=131072 profile=LC"
+                ]
+            }
+        },
+
+        {
+            "name": "H.264 360p",
+            "extension": "mp4",
+            "container": "qtmux",
+            "vcodec": {
+                "name": "x264enc",
+                "container": "qtmux",
+                "width": [
+                    480, 640
+                ],
+                "height": [
+                    360, 360
+                ],
+                "rate": [
+                    1, 30
+                ],
+                "passes": [
+                    "pass=qual quantizer=23 subme=6 cabac=0 threads=0"
+                ]
+            },
+            "acodec": {
+                "name": "faac",
+                "container": "qtmux",
+                "width": [
+                    8, 24
+                ],
+                "depth": [
+                    8, 24
+                ],
+                "rate": [
+                    8000, 96000
+                ],
+                "channels": [
+                    1, 2
+                ],
+                "passes": [
+                    "bitrate=131072 profile=LC"
+                ]
+            }
+        },
+        {
+            "name": "WebM 360p",
+            "extension": "webm",
+            "container": "webmmux",
+            "icon": "file://web-webm.svg",
+            "vcodec": {
+                "name": "vp8enc",
+                "container": "webmmux",
+                "width": [
+                    480, 640
+                ],
+                "height": [
+                    360, 360
+                ],
+                "rate": [
+                    1, 30
+                ],
+                "passes": [
+                    "quality=5.75 threads=%(threads)s speed=2"
+                ]
+            },
+            "acodec": {
+                "name": "vorbisenc",
+                "container": "webmmux",
+                "width": [
+                    8, 32
+                ],
+                "depth": [
+                    8, 24
+                ],
+                "rate": [
+                    8000, 96000
+                ],
+                "channels": [
+                    1, 2
+                ],
+                "passes": [
+                    "quality=0.3"
+                ]
+            }
+        },
+        {
+            "name": "Flash Video 360p",
+            "extension": "flv",
+            "icon": "file://web-flv.png",
+            "container": "flvmux",
+            "vcodec": {
+                "name": "x264enc",
+                "container": "flvmux",
+                "width": [
+                    480, 640
+                ],
+                "height": [
+                    360, 360
+                ],
+                "rate": [
+                    1, 30
+                ],
+                "passes": [
+                    "pass=qual quantizer=23 subme=6 cabac=0 threads=0"
+                ]
+            },
+            "acodec": {
+                "name": "faac",
+                "container": "flvmux",
+                "width": [
+                    8, 24
+                ],
+                "depth": [
+                    8, 24
+                ],
+                "rate": [
+                    8000, 96000
+                ],
+                "channels": [
+                    1, 2
+                ],
+                "passes": [
+                    "bitrate=131072 profile=LC"
+                ]
+            }
+        }
+    ]
+}
diff --git a/mediagoblin/media_types/video/presets/web-flv.png b/mediagoblin/media_types/video/presets/web-flv.png
new file mode 100644 (file)
index 0000000..b75699f
Binary files /dev/null and b/mediagoblin/media_types/video/presets/web-flv.png differ
diff --git a/mediagoblin/media_types/video/presets/web-webm.svg b/mediagoblin/media_types/video/presets/web-webm.svg
new file mode 100644 (file)
index 0000000..4e5b3e9
--- /dev/null
@@ -0,0 +1,259 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   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:xlink="http://www.w3.org/1999/xlink"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="48px"
+   height="48px"
+   id="svg2816"
+   version="1.1"
+   inkscape:version="0.47 r22583"
+   sodipodi:docname="web-webm.svg">
+  <defs
+     id="defs2818">
+    <linearGradient
+       id="linearGradient3656">
+      <stop
+         style="stop-color:#000000;stop-opacity:1;"
+         offset="0"
+         id="stop3658" />
+      <stop
+         style="stop-color:#000000;stop-opacity:0;"
+         offset="1"
+         id="stop3660" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3632">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0.54901963;"
+         offset="0"
+         id="stop3634" />
+      <stop
+         style="stop-color:#ffffff;stop-opacity:0;"
+         offset="1"
+         id="stop3636" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3622">
+      <stop
+         style="stop-color:#ffffff;stop-opacity:1;"
+         offset="0"
+         id="stop3624" />
+      <stop
+         style="stop-color:#d3d7cf;stop-opacity:1;"
+         offset="1"
+         id="stop3626" />
+    </linearGradient>
+    <linearGradient
+       id="linearGradient3600">
+      <stop
+         style="stop-color:#8ae234;stop-opacity:1;"
+         offset="0"
+         id="stop3602" />
+      <stop
+         style="stop-color:#4e9a06;stop-opacity:1;"
+         offset="1"
+         id="stop3604" />
+    </linearGradient>
+    <inkscape:perspective
+       sodipodi:type="inkscape:persp3d"
+       inkscape:vp_x="0 : 24 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_z="48 : 24 : 1"
+       inkscape:persp3d-origin="24 : 16 : 1"
+       id="perspective2824" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3600"
+       id="linearGradient3606"
+       x1="20.256382"
+       y1="2.546674"
+       x2="20.256382"
+       y2="46.881901"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3622"
+       id="linearGradient3628"
+       x1="21.2349"
+       y1="7.948472"
+       x2="21.2349"
+       y2="40.191879"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3632"
+       id="linearGradient3638"
+       x1="6.4826794"
+       y1="4.543263"
+       x2="25.363527"
+       y2="35.227882"
+       gradientUnits="userSpaceOnUse"
+       gradientTransform="translate(0,-0.35355339)" />
+    <inkscape:perspective
+       id="perspective3693"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <linearGradient
+       inkscape:collect="always"
+       xlink:href="#linearGradient3600-5"
+       id="linearGradient3606-9"
+       x1="20.256382"
+       y1="2.546674"
+       x2="20.256382"
+       y2="46.881901"
+       gradientUnits="userSpaceOnUse" />
+    <linearGradient
+       id="linearGradient3600-5">
+      <stop
+         style="stop-color:#8ae234;stop-opacity:1;"
+         offset="0"
+         id="stop3602-7" />
+      <stop
+         style="stop-color:#4e9a06;stop-opacity:1;"
+         offset="1"
+         id="stop3604-2" />
+    </linearGradient>
+    <filter
+       inkscape:collect="always"
+       id="filter3731">
+      <feGaussianBlur
+         inkscape:collect="always"
+         stdDeviation="0.82730657"
+         id="feGaussianBlur3733" />
+    </filter>
+    <inkscape:perspective
+       id="perspective3749"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+    <inkscape:perspective
+       id="perspective3782"
+       inkscape:persp3d-origin="0.5 : 0.33333333 : 1"
+       inkscape:vp_z="1 : 0.5 : 1"
+       inkscape:vp_y="0 : 1000 : 0"
+       inkscape:vp_x="0 : 0.5 : 1"
+       sodipodi:type="inkscape:persp3d" />
+  </defs>
+  <sodipodi:namedview
+     id="base"
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1.0"
+     inkscape:pageopacity="0.0"
+     inkscape:pageshadow="2"
+     inkscape:zoom="8"
+     inkscape:cx="20.51741"
+     inkscape:cy="22.534228"
+     inkscape:current-layer="layer1"
+     showgrid="false"
+     inkscape:grid-bbox="true"
+     inkscape:document-units="px"
+     showguides="true"
+     inkscape:guide-bbox="true"
+     inkscape:window-width="1099"
+     inkscape:window-height="834"
+     inkscape:window-x="801"
+     inkscape:window-y="106"
+     inkscape:window-maximized="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3608" />
+  </sodipodi:namedview>
+  <metadata
+     id="metadata2821">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <g
+     id="layer1"
+     inkscape:label="Layer 1"
+     inkscape:groupmode="layer">
+    <path
+       sodipodi:type="star"
+       style="fill:#000000;fill-opacity:0.2869955;stroke:none;filter:url(#filter3731)"
+       id="path3598-4"
+       sodipodi:sides="3"
+       sodipodi:cx="13.857143"
+       sodipodi:cy="24.714287"
+       sodipodi:r1="25.596954"
+       sodipodi:r2="12.798477"
+       sodipodi:arg1="0"
+       sodipodi:arg2="1.0471976"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="M 39.454098,24.714287 20.256381,35.798093 1.0586662,46.8819 l 0,-22.167614 0,-22.1676119 19.1977168,11.0838069 19.197715,11.083806 z"
+       transform="matrix(1.0537808,0,0,1.0537808,3.6163385,-1.9600717)" />
+    <path
+       sodipodi:type="star"
+       style="fill:url(#linearGradient3606);fill-opacity:1;stroke:#366a04;stroke-width:1.05497880999999993;stroke-miterlimit:4;stroke-opacity:1;stroke-dasharray:none;stroke-linejoin:round"
+       id="path3598"
+       sodipodi:sides="3"
+       sodipodi:cx="13.857143"
+       sodipodi:cy="24.714287"
+       sodipodi:r1="25.596954"
+       sodipodi:r2="12.798477"
+       sodipodi:arg1="0"
+       sodipodi:arg2="1.0471976"
+       inkscape:flatsided="false"
+       inkscape:rounded="0"
+       inkscape:randomized="0"
+       d="M 39.454098,24.714287 20.256381,35.798093 1.0586662,46.8819 l 0,-22.167614 0,-22.1676119 19.1977168,11.0838069 19.197715,11.083806 z"
+       transform="matrix(0.94788634,0,0,0.94788634,5.0257749,0.56128794)" />
+    <path
+       style="fill:url(#linearGradient3628);stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;fill-opacity:1"
+       d="m 6.5304575,9.646791 8.7347075,20.091724 4.674611,-18.160553 4.525987,2.612472 3.885316,12.559503 4.403755,-7.765833 1.744319,1.009296 -2.127799,9.211229 -6.155446,3.554753 -4.028978,-9.439016 -2.255629,13.086534 -5.852703,3.373025 -7.5584205,-9.989634 0.01028,-20.1435 z"
+       id="path3620"
+       sodipodi:nodetypes="cccccccccccccc" />
+    <path
+       style="fill:none;stroke:url(#linearGradient3638);stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+       d="m 6.9826793,42.785087 0,-38.0953773 32.9068657,18.9987873"
+       id="path3630"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.15686275"
+       d="M 6.6184028,8.6135689 15.026019,28.134068 19.45616,10.995613"
+       id="path3739"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.15686275"
+       d="m 25.081121,14.552251 3.345117,11.020499 3.93014,-6.825955"
+       id="path3739-5"
+       sodipodi:nodetypes="ccc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.15686275"
+       d="m 6.6291261,30.85266 7.0710679,9.280777"
+       id="path3772"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.15686275"
+       d="m 34.736621,20.290253 -2.032932,8.794642"
+       id="path3772-6"
+       sodipodi:nodetypes="cc" />
+    <path
+       style="fill:none;stroke:#000000;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:0.15686275"
+       d="m 20.594485,35.934991 1.811961,-10.650796 3.270369,7.778174"
+       id="path3796"
+       sodipodi:nodetypes="ccc" />
+  </g>
+</svg>
diff --git a/mediagoblin/media_types/video/presets/web.svg b/mediagoblin/media_types/video/presets/web.svg
new file mode 100644 (file)
index 0000000..c0c6824
--- /dev/null
@@ -0,0 +1,982 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>\r
+<!-- Created with Inkscape (http://www.inkscape.org/) -->\r
+<svg\r
+   xmlns:dc="http://purl.org/dc/elements/1.1/"\r
+   xmlns:cc="http://creativecommons.org/ns#"\r
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"\r
+   xmlns:svg="http://www.w3.org/2000/svg"\r
+   xmlns="http://www.w3.org/2000/svg"\r
+   xmlns:xlink="http://www.w3.org/1999/xlink"\r
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"\r
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"\r
+   width="48px"\r
+   height="48px"\r
+   id="svg3440"\r
+   sodipodi:version="0.32"\r
+   inkscape:version="0.46"\r
+   sodipodi:docbase="/home/jimmac/src/cvs/tango-icon-theme/scalable/apps"\r
+   sodipodi:docname="internet-web-browser.svg"\r
+   inkscape:output_extension="org.inkscape.output.svg.inkscape">\r
+  <defs\r
+     id="defs3">\r
+    <inkscape:perspective\r
+       sodipodi:type="inkscape:persp3d"\r
+       inkscape:vp_x="0 : 24 : 1"\r
+       inkscape:vp_y="0 : 1000 : 0"\r
+       inkscape:vp_z="48 : 24 : 1"\r
+       inkscape:persp3d-origin="24 : 16 : 1"\r
+       id="perspective156" />\r
+    <linearGradient\r
+       id="linearGradient4750">\r
+      <stop\r
+         style="stop-color:#ffffff;stop-opacity:1;"\r
+         offset="0"\r
+         id="stop4752" />\r
+      <stop\r
+         style="stop-color:#fefefe;stop-opacity:1.0000000;"\r
+         offset="0.37931034"\r
+         id="stop4758" />\r
+      <stop\r
+         style="stop-color:#1d1d1d;stop-opacity:1.0000000;"\r
+         offset="1.0000000"\r
+         id="stop4754" />\r
+    </linearGradient>\r
+    <linearGradient\r
+       inkscape:collect="always"\r
+       id="linearGradient4350">\r
+      <stop\r
+         style="stop-color:#ffffff;stop-opacity:1;"\r
+         offset="0"\r
+         id="stop4352" />\r
+      <stop\r
+         style="stop-color:#ffffff;stop-opacity:0;"\r
+         offset="1"\r
+         id="stop4354" />\r
+    </linearGradient>\r
+    <linearGradient\r
+       id="linearGradient4126">\r
+      <stop\r
+         style="stop-color:#ffffff;stop-opacity:1.0000000;"\r
+         offset="0.0000000"\r
+         id="stop4128" />\r
+      <stop\r
+         style="stop-color:#ffffff;stop-opacity:0.16494845;"\r
+         offset="1.0000000"\r
+         id="stop4130" />\r
+    </linearGradient>\r
+    <linearGradient\r
+       inkscape:collect="always"\r
+       id="linearGradient4114">\r
+      <stop\r
+         style="stop-color:#000000;stop-opacity:1;"\r
+         offset="0"\r
+         id="stop4116" />\r
+      <stop\r
+         style="stop-color:#000000;stop-opacity:0;"\r
+         offset="1"\r
+         id="stop4118" />\r
+    </linearGradient>\r
+    <linearGradient\r
+       id="linearGradient3962">\r
+      <stop\r
+         style="stop-color:#d3e9ff;stop-opacity:1.0000000;"\r
+         offset="0.0000000"\r
+         id="stop3964" />\r
+      <stop\r
+         style="stop-color:#d3e9ff;stop-opacity:1.0000000;"\r
+         offset="0.15517241"\r
+         id="stop4134" />\r
+      <stop\r
+         style="stop-color:#4074ae;stop-opacity:1.0000000;"\r
+         offset="0.75000000"\r
+         id="stop4346" />\r
+      <stop\r
+         style="stop-color:#36486c;stop-opacity:1.0000000;"\r
+         offset="1.0000000"\r
+         id="stop3966" />\r
+    </linearGradient>\r
+    <radialGradient\r
+       inkscape:collect="always"\r
+       xlink:href="#linearGradient3962"\r
+       id="radialGradient3968"\r
+       gradientTransform="scale(0.999989,1.000011)"\r
+       cx="18.247644"\r
+       cy="15.716079"\r
+       fx="18.247644"\r
+       fy="15.716079"\r
+       r="29.993349"\r
+       gradientUnits="userSpaceOnUse" />\r
+    <radialGradient\r
+       inkscape:collect="always"\r
+       xlink:href="#linearGradient4114"\r
+       id="radialGradient4120"\r
+       gradientTransform="scale(1.643990,0.608276)"\r
+       cx="15.115514"\r
+       cy="63.965388"\r
+       fx="15.115514"\r
+       fy="63.965388"\r
+       r="12.289036"\r
+       gradientUnits="userSpaceOnUse" />\r
+    <radialGradient\r
+       inkscape:collect="always"\r
+       xlink:href="#linearGradient4126"\r
+       id="radialGradient4132"\r
+       gradientTransform="scale(0.999989,1.000011)"\r
+       cx="15.601279"\r
+       cy="12.142302"\r
+       fx="15.601279"\r
+       fy="12.142302"\r
+       r="43.526714"\r
+       gradientUnits="userSpaceOnUse" />\r
+    <radialGradient\r
+       inkscape:collect="always"\r
+       xlink:href="#linearGradient4350"\r
+       id="radialGradient4356"\r
+       gradientTransform="scale(1.179536,0.847791)"\r
+       cx="11.826907"\r
+       cy="10.476453"\r
+       fx="11.826907"\r
+       fy="10.476453"\r
+       r="32.664848"\r
+       gradientUnits="userSpaceOnUse" />\r
+    <radialGradient\r
+       inkscape:collect="always"\r
+       xlink:href="#linearGradient4750"\r
+       id="radialGradient4756"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       cx="18.633780"\r
+       cy="17.486208"\r
+       fx="18.934305"\r
+       fy="17.810213"\r
+       r="40.692665"\r
+       gradientUnits="userSpaceOnUse" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1460"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1462"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1466"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1468"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1470"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1474"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1476"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1478"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1482"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1484"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1486"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1490"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1492"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1494"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1498"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1500"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1502"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1506"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1508"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1510"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1514"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1516"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1518"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1522"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1524"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1526"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1528"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1530"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1532"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1534"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1536"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1538"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1540"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1542"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1544"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1546"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1550"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1552"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1554"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+    <radialGradient\r
+       r="40.692665"\r
+       fy="17.810213"\r
+       fx="18.934305"\r
+       cy="17.486208"\r
+       cx="18.633780"\r
+       gradientTransform="scale(1.036822,0.964486)"\r
+       gradientUnits="userSpaceOnUse"\r
+       id="radialGradient1558"\r
+       xlink:href="#linearGradient4750"\r
+       inkscape:collect="always" />\r
+  </defs>\r
+  <sodipodi:namedview\r
+     id="base"\r
+     pagecolor="#ffffff"\r
+     bordercolor="#666666"\r
+     borderopacity="0.17254902"\r
+     inkscape:pageopacity="0.0"\r
+     inkscape:pageshadow="2"\r
+     inkscape:zoom="9.8994949"\r
+     inkscape:cx="25.799661"\r
+     inkscape:cy="24.622653"\r
+     inkscape:current-layer="layer1"\r
+     showgrid="false"\r
+     inkscape:grid-bbox="true"\r
+     inkscape:document-units="px"\r
+     inkscape:window-width="1440"\r
+     inkscape:window-height="823"\r
+     inkscape:window-x="0"\r
+     inkscape:window-y="30"\r
+     inkscape:showpageshadow="false" />\r
+  <metadata\r
+     id="metadata4">\r
+    <rdf:RDF>\r
+      <cc:Work\r
+         rdf:about="">\r
+        <dc:format>image/svg+xml</dc:format>\r
+        <dc:type\r
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />\r
+        <dc:title>Globe</dc:title>\r
+        <dc:creator>\r
+          <cc:Agent>\r
+            <dc:title>Jakub Steiner</dc:title>\r
+          </cc:Agent>\r
+        </dc:creator>\r
+        <dc:contributor>\r
+          <cc:Agent>\r
+            <dc:title>Tuomas Kuosmanen</dc:title>\r
+          </cc:Agent>\r
+        </dc:contributor>\r
+        <cc:license\r
+           rdf:resource="http://creativecommons.org/licenses/publicdomain/" />\r
+        <dc:source>http://jimmac.musichall.cz</dc:source>\r
+        <dc:subject>\r
+          <rdf:Bag>\r
+            <rdf:li>globe</rdf:li>\r
+            <rdf:li>international</rdf:li>\r
+            <rdf:li>web</rdf:li>\r
+            <rdf:li>www</rdf:li>\r
+            <rdf:li>internet</rdf:li>\r
+            <rdf:li>network</rdf:li>\r
+          </rdf:Bag>\r
+        </dc:subject>\r
+      </cc:Work>\r
+      <cc:License\r
+         rdf:about="http://creativecommons.org/licenses/publicdomain/">\r
+        <cc:permits\r
+           rdf:resource="http://creativecommons.org/ns#Reproduction" />\r
+        <cc:permits\r
+           rdf:resource="http://creativecommons.org/ns#Distribution" />\r
+        <cc:permits\r
+           rdf:resource="http://creativecommons.org/ns#DerivativeWorks" />\r
+      </cc:License>\r
+    </rdf:RDF>\r
+  </metadata>\r
+  <g\r
+     id="layer1"\r
+     inkscape:label="Layer 1"\r
+     inkscape:groupmode="layer">\r
+    <path\r
+       sodipodi:type="arc"\r
+       style="fill:url(#radialGradient4120);fill-opacity:1.0000000;stroke:none;stroke-opacity:1.0000000"\r
+       id="path4112"\r
+       sodipodi:cx="24.849752"\r
+       sodipodi:cy="38.908627"\r
+       sodipodi:rx="20.203051"\r
+       sodipodi:ry="7.4751287"\r
+       d="M 45.052803 38.908627 A 20.203051 7.4751287 0 1 1  4.6467018,38.908627 A 20.203051 7.4751287 0 1 1  45.052803 38.908627 z"\r
+       transform="matrix(1.000000,0.000000,0.000000,1.243244,0.000000,-10.27241)" />\r
+    <path\r
+       style="fill:url(#radialGradient3968);fill-opacity:1.0000000;fill-rule:nonzero;stroke:#39396c;stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"\r
+       d="M 43.959853,23.485499 C 43.959853,34.195217 35.277750,42.877222 24.569505,42.877222 C 13.860279,42.877222 5.1786663,34.195119 5.1786663,23.485499 C 5.1786663,12.776272 13.860279,4.0951517 24.569505,4.0951517 C 35.277750,4.0951517 43.959853,12.776272 43.959853,23.485499 L 43.959853,23.485499 z "\r
+       id="path3214" />\r
+    <path\r
+       sodipodi:type="arc"\r
+       style="opacity:0.42159382;fill:url(#radialGradient4356);fill-opacity:1.0000000;stroke:none;stroke-opacity:1.0000000"\r
+       id="path4348"\r
+       sodipodi:cx="17.778685"\r
+       sodipodi:cy="15.271057"\r
+       sodipodi:rx="12.929953"\r
+       sodipodi:ry="9.2934036"\r
+       d="M 30.708637 15.271057 A 12.929953 9.2934036 0 1 1  4.8487320,15.271057 A 12.929953 9.2934036 0 1 1  30.708637 15.271057 z"\r
+       transform="matrix(0.835938,0.000000,0.000000,1.000000,9.886868,0.000000)" />\r
+    <g\r
+       id="g4136"\r
+       style="fill:#000000;fill-opacity:0.71345031;fill-rule:nonzero;stroke:none;stroke-miterlimit:4.0000000"\r
+       transform="matrix(0.982371,0.000000,0.000000,0.982371,0.121079,0.232914)">\r
+      <g\r
+         id="g4138">\r
+        <g\r
+           id="g4142">\r
+          <path\r
+             d="M 44.071300,20.714400 C 44.071300,20.977100 44.071300,20.714400 44.071300,20.714400 L 43.526400,21.331600 C 43.192400,20.938000 42.817400,20.607000 42.436600,20.261300 L 41.600700,20.384300 L 40.837000,19.521000 L 40.837000,20.589400 L 41.491300,21.084500 L 41.926800,21.577700 L 42.508800,20.919500 C 42.655300,21.193900 42.799800,21.468300 42.945300,21.742700 L 42.945300,22.565000 L 42.290000,23.305200 L 41.090800,24.128400 L 40.182600,25.034700 L 39.600600,24.374500 L 39.891600,23.634300 L 39.310500,22.976100 L 38.329100,20.878400 L 37.493200,19.933100 L 37.274400,20.179200 L 37.602500,21.372600 L 38.219700,22.071800 C 38.572200,23.089400 38.920900,24.062000 39.383800,25.034700 C 40.101600,25.034700 40.778300,24.958500 41.491200,24.868700 L 41.491200,25.444900 L 40.619100,27.584100 L 39.819300,28.488400 L 39.165000,29.888800 C 39.165000,30.656400 39.165000,31.424000 39.165000,32.191500 L 39.383800,33.097800 L 39.020500,33.508000 L 38.219700,34.002100 L 37.383800,34.701300 L 38.075200,35.482600 L 37.129900,36.306800 L 37.311500,36.840000 L 35.893500,38.445500 L 34.949200,38.445500 L 34.149400,38.939600 L 33.639600,38.939600 L 33.639600,38.281400 L 33.422800,36.963000 C 33.141500,36.136800 32.848600,35.316500 32.550700,34.496200 C 32.550700,33.890700 32.586800,33.291100 32.623000,32.685700 L 32.987300,31.863400 L 32.477500,30.875100 L 32.514600,29.517700 L 31.823200,28.736400 L 32.168900,27.605500 L 31.606400,26.967300 L 30.624000,26.967300 L 30.296900,26.597200 L 29.315500,27.214900 L 28.916100,26.761300 L 28.006900,27.543000 C 27.389700,26.843300 26.771500,26.144100 26.153400,25.444900 L 25.426800,23.716400 L 26.081100,22.730100 L 25.717800,22.319000 L 26.516600,20.425400 C 27.172900,19.609000 27.858400,18.825800 28.551800,18.039700 L 29.788100,17.710600 L 31.169000,17.546500 L 32.114300,17.793600 L 33.459000,19.150000 L 33.931700,18.615800 L 34.585000,18.533800 L 35.821300,18.944900 L 36.766600,18.944900 L 37.420900,18.368700 L 37.711900,17.957600 L 37.056600,17.546500 L 35.965800,17.464500 C 35.663100,17.044600 35.381800,16.603200 35.022400,16.230100 L 34.658100,16.394200 L 34.512600,17.464500 L 33.858300,16.724300 L 33.713800,15.900100 L 32.987200,15.325900 L 32.695200,15.325900 L 33.422700,16.148200 L 33.131700,16.888400 L 32.550600,17.052500 L 32.913900,16.312300 L 32.258600,15.984200 L 31.678500,15.326000 L 30.586700,15.572100 L 30.442200,15.900200 L 29.787900,16.312300 L 29.424600,17.217600 L 28.516400,17.669700 L 28.116000,17.217600 L 27.680500,17.217600 L 27.680500,15.736200 L 28.625800,15.242100 L 29.352400,15.242100 L 29.205900,14.666900 L 28.625800,14.090700 L 29.606300,13.884600 L 30.151200,13.268400 L 30.586700,12.527200 L 31.387500,12.527200 L 31.168700,11.952000 L 31.678500,11.622900 L 31.678500,12.281100 L 32.768300,12.527200 L 33.858100,11.622900 L 33.931300,11.210800 L 34.875600,10.553100 C 34.533800,10.595600 34.192000,10.626800 33.858000,10.717700 L 33.858000,9.9766000 L 34.221300,9.1538000 L 33.858000,9.1538000 L 33.059600,9.8940000 L 32.840800,10.305600 L 33.059600,10.882300 L 32.695300,11.868600 L 32.114200,11.539500 L 31.606400,10.964300 L 30.805600,11.539500 L 30.514600,10.223600 L 31.895500,9.3188000 L 31.895500,8.8247000 L 32.768500,8.2490000 L 34.149400,7.9194000 L 35.094700,8.2490000 L 36.838800,8.5781000 L 36.403300,9.0713000 L 35.458000,9.0713000 L 36.403300,10.058600 L 37.129900,9.2363000 L 37.350600,8.8745000 C 37.350600,8.8745000 40.137700,11.372500 41.730500,14.105000 C 43.323300,16.838400 44.071300,20.060100 44.071300,20.714400 z "\r
+             id="path4144" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g4146">\r
+        <g\r
+           id="g4150">\r
+          <path\r
+             d="M 26.070300,9.2363000 L 25.997100,9.7295000 L 26.506900,10.058600 L 27.378000,9.4829000 L 26.942500,8.9892000 L 26.360500,9.3188000 L 26.070500,9.2363000"\r
+             id="path4152" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g4154">\r
+        <g\r
+           id="g4158">\r
+          <path\r
+             d="M 26.870100,5.8633000 L 24.979500,5.1226000 L 22.799800,5.3692000 L 20.109400,6.1094000 L 19.600600,6.6035000 L 21.272500,7.7549000 L 21.272500,8.4131000 L 20.618200,9.0713000 L 21.491200,10.800300 L 22.071300,10.470200 L 22.799800,9.3188000 C 23.922800,8.9716000 24.929700,8.5781000 25.997100,8.0844000 L 26.870100,5.8632000"\r
+             id="path4160" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g4162">\r
+        <g\r
+           id="g4166">\r
+          <path\r
+             d="M 28.833000,12.774900 L 28.542000,12.033700 L 28.032200,12.198700 L 28.178700,13.103000 L 28.833000,12.774900"\r
+             id="path4168" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g4170">\r
+        <g\r
+           id="g4174">\r
+          <path\r
+             d="M 29.123000,12.608900 L 28.977500,13.597200 L 29.777300,13.432200 L 30.358400,12.857000 L 29.849600,12.362900 C 29.678700,11.907800 29.482400,11.483000 29.268500,11.046500 L 28.833000,11.046500 L 28.833000,11.539700 L 29.123000,11.868800 L 29.123000,12.609000"\r
+             id="path4176" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g4178">\r
+        <g\r
+           id="g4182">\r
+          <path\r
+             d="M 18.365200,28.242200 L 17.783200,27.089900 L 16.692900,26.843300 L 16.111400,25.280800 L 14.657800,25.444900 L 13.422400,24.540600 L 12.113300,25.692000 L 12.113300,25.873600 C 11.717300,25.759300 11.230500,25.743700 10.877900,25.526900 L 10.586900,24.704600 L 10.586900,23.799300 L 9.7148000,23.881300 C 9.7876000,23.305100 9.8598000,22.729900 9.9331000,22.153800 L 9.4238000,22.153800 L 8.9155000,22.812000 L 8.4062000,23.058100 L 7.6791000,22.647900 L 7.6063000,21.742600 L 7.7518000,20.755300 L 8.8426000,19.933000 L 9.7147000,19.933000 L 9.8597000,19.438900 L 10.950000,19.685000 L 11.749800,20.673300 L 11.895300,19.026800 L 13.276600,17.875400 L 13.785400,16.641000 L 14.803000,16.229900 L 15.384500,15.407600 L 16.692600,15.159600 L 17.347400,14.173300 C 16.693100,14.173300 16.038800,14.173300 15.384500,14.173300 L 16.620300,13.597100 L 17.491900,13.597100 L 18.728200,13.185000 L 18.873700,12.692800 L 18.437200,12.280700 L 17.928400,12.115700 L 18.073900,11.622500 L 17.710600,10.882300 L 16.838000,11.210400 L 16.983500,10.552700 L 15.965900,9.9765000 L 15.166600,11.374400 L 15.238900,11.868500 L 14.439600,12.198600 L 13.930300,13.267900 L 13.712500,12.280600 L 12.331200,11.704400 L 12.112900,10.964200 L 13.930300,9.8939000 L 14.730100,9.1537000 L 14.802900,8.2489000 L 14.366900,8.0018000 L 13.785400,7.9193000 L 13.422100,8.8246000 C 13.422100,8.8246000 12.814200,8.9437000 12.657900,8.9823000 C 10.661800,10.821700 6.6286000,14.792400 5.6916000,22.288500 C 5.7287000,22.462300 6.3708000,23.470100 6.3708000,23.470100 L 7.8972000,24.374400 L 9.4236000,24.786500 L 10.078400,25.609700 L 11.095500,26.349900 L 11.677000,26.267900 L 12.113000,26.464200 L 12.113000,26.597000 L 11.531900,28.160000 L 11.095400,28.818200 L 11.240900,29.148300 L 10.877600,30.380700 L 12.186200,32.767400 L 13.494300,33.919700 L 14.076300,34.742000 L 14.003100,36.470500 L 14.439600,37.456800 L 14.003100,39.349400 C 14.003100,39.349400 13.968900,39.337700 14.024600,39.527100 C 14.080800,39.716600 16.353700,40.978300 16.498200,40.870900 C 16.642200,40.761500 16.765300,40.665800 16.765300,40.665800 L 16.620300,40.255600 L 17.201400,39.679400 L 17.419700,39.103200 L 18.365000,38.773100 L 19.091600,36.962600 L 18.873800,36.470400 L 19.381600,35.730200 L 20.472400,35.482200 L 21.054400,34.165800 L 20.908900,32.521300 L 21.781000,31.286900 L 21.926500,30.052500 C 20.733100,29.460700 19.549500,28.851300 18.365000,28.242000"\r
+             id="path4184" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g4186">\r
+        <g\r
+           id="g4190">\r
+          <path\r
+             d="M 16.765600,9.5649000 L 17.492200,10.058600 L 18.074200,10.058600 L 18.074200,9.4829000 L 17.347600,9.1538000 L 16.765600,9.5649000"\r
+             id="path4192" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g4194">\r
+        <g\r
+           id="g4198">\r
+          <path\r
+             d="M 14.876000,8.9072000 L 14.512200,9.8120000 L 15.239300,9.8120000 L 15.603100,8.9892000 C 15.916600,8.7675000 16.228600,8.5444000 16.547900,8.3310000 L 17.275000,8.5781000 C 17.759400,8.9072000 18.243800,9.2363000 18.728600,9.5649000 L 19.456100,8.9072000 L 18.655800,8.5781000 L 18.292000,7.8374000 L 16.911100,7.6728000 L 16.838300,7.2612000 L 16.184000,7.4262000 L 15.893600,8.0020000 L 15.529800,7.2613000 L 15.384800,7.5904000 L 15.457600,8.4132000 L 14.876000,8.9072000"\r
+             id="path4200" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g4202">\r
+        <g\r
+           style="opacity:0.75000000"\r
+           id="g4204">\r
+          <path\r
+             id="path4206"\r
+             d="" />\r
+        </g>\r
+        <g\r
+           id="g4208">\r
+          <path\r
+             id="path4210"\r
+             d="" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g4212">\r
+        <g\r
+           style="opacity:0.75000000"\r
+           id="g4214">\r
+          <path\r
+             id="path4216"\r
+             d="" />\r
+        </g>\r
+        <g\r
+           id="g4218">\r
+          <path\r
+             id="path4220"\r
+             d="" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g4222">\r
+        <g\r
+           id="g4226">\r
+          <path\r
+             d="M 17.492200,6.8496000 L 17.856000,6.5210000 L 18.583100,6.3564000 C 19.081100,6.1142000 19.581100,5.9511000 20.109500,5.7802000 L 19.819500,5.2865000 L 18.881000,5.4213000 L 18.437600,5.8632000 L 17.706600,5.9692000 L 17.056700,6.2744000 L 16.740800,6.4272000 L 16.547900,6.6855000 L 17.492200,6.8496000"\r
+             id="path4228" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g4230">\r
+        <g\r
+           id="g4234">\r
+          <path\r
+             d="M 18.728500,14.666500 L 19.165000,14.008300 L 18.510200,13.515100 L 18.728500,14.666500"\r
+             id="path4236" />\r
+        </g>\r
+      </g>\r
+    </g>\r
+    <g\r
+       id="g3216"\r
+       style="color:#000000;fill:url(#radialGradient1460);fill-opacity:1.0000000;fill-rule:nonzero;stroke:none;stroke-width:1.0179454;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4.0000000;stroke-dashoffset:0.0000000;stroke-opacity:1.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"\r
+       transform="matrix(0.982371,0.000000,0.000000,0.982371,-8.095179e-2,3.088300e-2)">\r
+      <g\r
+         id="g3218"\r
+         style="color:#000000;fill:url(#radialGradient1462);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+        <g\r
+           id="g3222"\r
+           style="color:#000000;fill:url(#radialGradient1466);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+          <path\r
+             d="M 44.071300,20.714400 C 44.071300,20.977100 44.071300,20.714400 44.071300,20.714400 L 43.526400,21.331600 C 43.192400,20.938000 42.817400,20.607000 42.436600,20.261300 L 41.600700,20.384300 L 40.837000,19.521000 L 40.837000,20.589400 L 41.491300,21.084500 L 41.926800,21.577700 L 42.508800,20.919500 C 42.655300,21.193900 42.799800,21.468300 42.945300,21.742700 L 42.945300,22.565000 L 42.290000,23.305200 L 41.090800,24.128400 L 40.182600,25.034700 L 39.600600,24.374500 L 39.891600,23.634300 L 39.310500,22.976100 L 38.329100,20.878400 L 37.493200,19.933100 L 37.274400,20.179200 L 37.602500,21.372600 L 38.219700,22.071800 C 38.572200,23.089400 38.920900,24.062000 39.383800,25.034700 C 40.101600,25.034700 40.778300,24.958500 41.491200,24.868700 L 41.491200,25.444900 L 40.619100,27.584100 L 39.819300,28.488400 L 39.165000,29.888800 C 39.165000,30.656400 39.165000,31.424000 39.165000,32.191500 L 39.383800,33.097800 L 39.020500,33.508000 L 38.219700,34.002100 L 37.383800,34.701300 L 38.075200,35.482600 L 37.129900,36.306800 L 37.311500,36.840000 L 35.893500,38.445500 L 34.949200,38.445500 L 34.149400,38.939600 L 33.639600,38.939600 L 33.639600,38.281400 L 33.422800,36.963000 C 33.141500,36.136800 32.848600,35.316500 32.550700,34.496200 C 32.550700,33.890700 32.586800,33.291100 32.623000,32.685700 L 32.987300,31.863400 L 32.477500,30.875100 L 32.514600,29.517700 L 31.823200,28.736400 L 32.168900,27.605500 L 31.606400,26.967300 L 30.624000,26.967300 L 30.296900,26.597200 L 29.315500,27.214900 L 28.916100,26.761300 L 28.006900,27.543000 C 27.389700,26.843300 26.771500,26.144100 26.153400,25.444900 L 25.426800,23.716400 L 26.081100,22.730100 L 25.717800,22.319000 L 26.516600,20.425400 C 27.172900,19.609000 27.858400,18.825800 28.551800,18.039700 L 29.788100,17.710600 L 31.169000,17.546500 L 32.114300,17.793600 L 33.459000,19.150000 L 33.931700,18.615800 L 34.585000,18.533800 L 35.821300,18.944900 L 36.766600,18.944900 L 37.420900,18.368700 L 37.711900,17.957600 L 37.056600,17.546500 L 35.965800,17.464500 C 35.663100,17.044600 35.381800,16.603200 35.022400,16.230100 L 34.658100,16.394200 L 34.512600,17.464500 L 33.858300,16.724300 L 33.713800,15.900100 L 32.987200,15.325900 L 32.695200,15.325900 L 33.422700,16.148200 L 33.131700,16.888400 L 32.550600,17.052500 L 32.913900,16.312300 L 32.258600,15.984200 L 31.678500,15.326000 L 30.586700,15.572100 L 30.442200,15.900200 L 29.787900,16.312300 L 29.424600,17.217600 L 28.516400,17.669700 L 28.116000,17.217600 L 27.680500,17.217600 L 27.680500,15.736200 L 28.625800,15.242100 L 29.352400,15.242100 L 29.205900,14.666900 L 28.625800,14.090700 L 29.606300,13.884600 L 30.151200,13.268400 L 30.586700,12.527200 L 31.387500,12.527200 L 31.168700,11.952000 L 31.678500,11.622900 L 31.678500,12.281100 L 32.768300,12.527200 L 33.858100,11.622900 L 33.931300,11.210800 L 34.875600,10.553100 C 34.533800,10.595600 34.192000,10.626800 33.858000,10.717700 L 33.858000,9.9766000 L 34.221300,9.1538000 L 33.858000,9.1538000 L 33.059600,9.8940000 L 32.840800,10.305600 L 33.059600,10.882300 L 32.695300,11.868600 L 32.114200,11.539500 L 31.606400,10.964300 L 30.805600,11.539500 L 30.514600,10.223600 L 31.895500,9.3188000 L 31.895500,8.8247000 L 32.768500,8.2490000 L 34.149400,7.9194000 L 35.094700,8.2490000 L 36.838800,8.5781000 L 36.403300,9.0713000 L 35.458000,9.0713000 L 36.403300,10.058600 L 37.129900,9.2363000 L 37.350600,8.8745000 C 37.350600,8.8745000 40.137700,11.372500 41.730500,14.105000 C 43.323300,16.838400 44.071300,20.060100 44.071300,20.714400 z "\r
+             id="path3224"\r
+             style="color:#000000;fill:url(#radialGradient1468);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g3226"\r
+         style="color:#000000;fill:url(#radialGradient1470);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+        <g\r
+           id="g3230"\r
+           style="color:#000000;fill:url(#radialGradient1474);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+          <path\r
+             d="M 26.070300,9.2363000 L 25.997100,9.7295000 L 26.506900,10.058600 L 27.378000,9.4829000 L 26.942500,8.9892000 L 26.360500,9.3188000 L 26.070500,9.2363000"\r
+             id="path3232"\r
+             style="color:#000000;fill:url(#radialGradient1476);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g3234"\r
+         style="color:#000000;fill:url(#radialGradient1478);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+        <g\r
+           id="g3238"\r
+           style="color:#000000;fill:url(#radialGradient1482);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+          <path\r
+             d="M 26.870100,5.8633000 L 24.979500,5.1226000 L 22.799800,5.3692000 L 20.109400,6.1094000 L 19.600600,6.6035000 L 21.272500,7.7549000 L 21.272500,8.4131000 L 20.618200,9.0713000 L 21.491200,10.800300 L 22.071300,10.470200 L 22.799800,9.3188000 C 23.922800,8.9716000 24.929700,8.5781000 25.997100,8.0844000 L 26.870100,5.8632000"\r
+             id="path3240"\r
+             style="color:#000000;fill:url(#radialGradient1484);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g3242"\r
+         style="color:#000000;fill:url(#radialGradient1486);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+        <g\r
+           id="g3246"\r
+           style="color:#000000;fill:url(#radialGradient1490);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+          <path\r
+             d="M 28.833000,12.774900 L 28.542000,12.033700 L 28.032200,12.198700 L 28.178700,13.103000 L 28.833000,12.774900"\r
+             id="path3248"\r
+             style="color:#000000;fill:url(#radialGradient1492);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g3250"\r
+         style="color:#000000;fill:url(#radialGradient1494);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+        <g\r
+           id="g3254"\r
+           style="color:#000000;fill:url(#radialGradient1498);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+          <path\r
+             d="M 29.123000,12.608900 L 28.977500,13.597200 L 29.777300,13.432200 L 30.358400,12.857000 L 29.849600,12.362900 C 29.678700,11.907800 29.482400,11.483000 29.268500,11.046500 L 28.833000,11.046500 L 28.833000,11.539700 L 29.123000,11.868800 L 29.123000,12.609000"\r
+             id="path3256"\r
+             style="color:#000000;fill:url(#radialGradient1500);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g3258"\r
+         style="color:#000000;fill:url(#radialGradient1502);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+        <g\r
+           id="g3262"\r
+           style="color:#000000;fill:url(#radialGradient1506);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+          <path\r
+             d="M 18.365200,28.242200 L 17.783200,27.089900 L 16.692900,26.843300 L 16.111400,25.280800 L 14.657800,25.444900 L 13.422400,24.540600 L 12.113300,25.692000 L 12.113300,25.873600 C 11.717300,25.759300 11.230500,25.743700 10.877900,25.526900 L 10.586900,24.704600 L 10.586900,23.799300 L 9.7148000,23.881300 C 9.7876000,23.305100 9.8598000,22.729900 9.9331000,22.153800 L 9.4238000,22.153800 L 8.9155000,22.812000 L 8.4062000,23.058100 L 7.6791000,22.647900 L 7.6063000,21.742600 L 7.7518000,20.755300 L 8.8426000,19.933000 L 9.7147000,19.933000 L 9.8597000,19.438900 L 10.950000,19.685000 L 11.749800,20.673300 L 11.895300,19.026800 L 13.276600,17.875400 L 13.785400,16.641000 L 14.803000,16.229900 L 15.384500,15.407600 L 16.692600,15.159600 L 17.347400,14.173300 C 16.693100,14.173300 16.038800,14.173300 15.384500,14.173300 L 16.620300,13.597100 L 17.491900,13.597100 L 18.728200,13.185000 L 18.873700,12.692800 L 18.437200,12.280700 L 17.928400,12.115700 L 18.073900,11.622500 L 17.710600,10.882300 L 16.838000,11.210400 L 16.983500,10.552700 L 15.965900,9.9765000 L 15.166600,11.374400 L 15.238900,11.868500 L 14.439600,12.198600 L 13.930300,13.267900 L 13.712500,12.280600 L 12.331200,11.704400 L 12.112900,10.964200 L 13.930300,9.8939000 L 14.730100,9.1537000 L 14.802900,8.2489000 L 14.366900,8.0018000 L 13.785400,7.9193000 L 13.422100,8.8246000 C 13.422100,8.8246000 12.814200,8.9437000 12.657900,8.9823000 C 10.661800,10.821700 6.6286000,14.792400 5.6916000,22.288500 C 5.7287000,22.462300 6.3708000,23.470100 6.3708000,23.470100 L 7.8972000,24.374400 L 9.4236000,24.786500 L 10.078400,25.609700 L 11.095500,26.349900 L 11.677000,26.267900 L 12.113000,26.464200 L 12.113000,26.597000 L 11.531900,28.160000 L 11.095400,28.818200 L 11.240900,29.148300 L 10.877600,30.380700 L 12.186200,32.767400 L 13.494300,33.919700 L 14.076300,34.742000 L 14.003100,36.470500 L 14.439600,37.456800 L 14.003100,39.349400 C 14.003100,39.349400 13.968900,39.337700 14.024600,39.527100 C 14.080800,39.716600 16.353700,40.978300 16.498200,40.870900 C 16.642200,40.761500 16.765300,40.665800 16.765300,40.665800 L 16.620300,40.255600 L 17.201400,39.679400 L 17.419700,39.103200 L 18.365000,38.773100 L 19.091600,36.962600 L 18.873800,36.470400 L 19.381600,35.730200 L 20.472400,35.482200 L 21.054400,34.165800 L 20.908900,32.521300 L 21.781000,31.286900 L 21.926500,30.052500 C 20.733100,29.460700 19.549500,28.851300 18.365000,28.242000"\r
+             id="path3264"\r
+             style="color:#000000;fill:url(#radialGradient1508);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g3266"\r
+         style="color:#000000;fill:url(#radialGradient1510);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+        <g\r
+           id="g3270"\r
+           style="color:#000000;fill:url(#radialGradient1514);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+          <path\r
+             d="M 16.765600,9.5649000 L 17.492200,10.058600 L 18.074200,10.058600 L 18.074200,9.4829000 L 17.347600,9.1538000 L 16.765600,9.5649000"\r
+             id="path3272"\r
+             style="color:#000000;fill:url(#radialGradient1516);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g3274"\r
+         style="color:#000000;fill:url(#radialGradient1518);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+        <g\r
+           id="g3278"\r
+           style="color:#000000;fill:url(#radialGradient1522);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+          <path\r
+             d="M 14.876000,8.9072000 L 14.512200,9.8120000 L 15.239300,9.8120000 L 15.603100,8.9892000 C 15.916600,8.7675000 16.228600,8.5444000 16.547900,8.3310000 L 17.275000,8.5781000 C 17.759400,8.9072000 18.243800,9.2363000 18.728600,9.5649000 L 19.456100,8.9072000 L 18.655800,8.5781000 L 18.292000,7.8374000 L 16.911100,7.6728000 L 16.838300,7.2612000 L 16.184000,7.4262000 L 15.893600,8.0020000 L 15.529800,7.2613000 L 15.384800,7.5904000 L 15.457600,8.4132000 L 14.876000,8.9072000"\r
+             id="path3280"\r
+             style="color:#000000;fill:url(#radialGradient1524);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g3282"\r
+         style="color:#000000;fill:url(#radialGradient1526);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+        <g\r
+           style="opacity:0.75000000;color:#000000;fill:url(#radialGradient1528);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"\r
+           id="g3284">\r
+          <path\r
+             d=""\r
+             style="color:#000000;fill:url(#radialGradient1530);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"\r
+             id="path3286" />\r
+        </g>\r
+        <g\r
+           id="g3288"\r
+           style="color:#000000;fill:url(#radialGradient1532);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+          <path\r
+             d=""\r
+             id="path3290"\r
+             style="color:#000000;fill:url(#radialGradient1534);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g3292"\r
+         style="color:#000000;fill:url(#radialGradient1536);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+        <g\r
+           style="opacity:0.75000000;color:#000000;fill:url(#radialGradient1538);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"\r
+           id="g3294">\r
+          <path\r
+             d=""\r
+             style="color:#000000;fill:url(#radialGradient1540);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible"\r
+             id="path3296" />\r
+        </g>\r
+        <g\r
+           id="g3298"\r
+           style="color:#000000;fill:url(#radialGradient1542);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+          <path\r
+             d=""\r
+             id="path3300"\r
+             style="color:#000000;fill:url(#radialGradient1544);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g3302"\r
+         style="color:#000000;fill:url(#radialGradient1546);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+        <g\r
+           id="g3306"\r
+           style="color:#000000;fill:url(#radialGradient1550);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+          <path\r
+             d="M 17.492200,6.8496000 L 17.856000,6.5210000 L 18.583100,6.3564000 C 19.081100,6.1142000 19.581100,5.9511000 20.109500,5.7802000 L 19.819500,5.2865000 L 18.881000,5.4213000 L 18.437600,5.8632000 L 17.706600,5.9692000 L 17.056700,6.2744000 L 16.740800,6.4272000 L 16.547900,6.6855000 L 17.492200,6.8496000"\r
+             id="path3308"\r
+             style="color:#000000;fill:url(#radialGradient1552);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />\r
+        </g>\r
+      </g>\r
+      <g\r
+         id="g3310"\r
+         style="color:#000000;fill:url(#radialGradient1554);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+        <g\r
+           id="g3314"\r
+           style="color:#000000;fill:url(#radialGradient1558);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible">\r
+          <path\r
+             d="M 18.728500,14.666500 L 19.165000,14.008300 L 18.510200,13.515100 L 18.728500,14.666500"\r
+             id="path3316"\r
+             style="color:#000000;fill:url(#radialGradient4756);stroke-dashoffset:0.0000000;marker:none;marker-start:none;marker-mid:none;marker-end:none;visibility:visible;display:inline;overflow:visible" />\r
+        </g>\r
+      </g>\r
+    </g>\r
+    <path\r
+       style="fill:none;fill-opacity:1.0000000;fill-rule:nonzero;stroke:url(#radialGradient4132);stroke-miterlimit:4.0000000;stroke-opacity:1.0000000"\r
+       d="M 42.975093,23.485534 C 42.975093,33.651354 34.733915,41.892440 24.569493,41.892440 C 14.404139,41.892440 6.1634261,33.651261 6.1634261,23.485534 C 6.1634261,13.320180 14.404139,5.0799340 24.569493,5.0799340 C 34.733915,5.0799340 42.975093,13.320180 42.975093,23.485534 L 42.975093,23.485534 z "\r
+       id="path4122" />\r
+  </g>\r
+</svg>\r
index 947848365dc1861bf08b37ad420f4f65eeb7e726..4cae1fd8280f1d4afd85c6f1985f64e886f82bdb 100644 (file)
@@ -16,6 +16,7 @@
 
 import Image
 import tempfile
+import pkg_resources
 
 from celery.task import Task
 from celery import registry
@@ -25,10 +26,14 @@ from mediagoblin import mg_globals as mgg
 
 from mediagoblin.util import lazy_pass_to_ugettext as _
 
+import mediagoblin.media_types.video
+
 import gobject
+gobject.threads_init()
 
 import gst
 import arista
+import logging
 
 from arista.transcoder import TranscoderOptions
 
@@ -38,12 +43,17 @@ ARISTA_DEVICE_KEY = 'web'
 
 
 loop = None
+logger = logging.getLogger(__name__)
+logging.basicConfig()
+logger.setLevel(logging.DEBUG)
 
 
 def process_video(entry):
     """
     Code to process a video
     """
+    global loop
+    loop = None
     info = {}
     workbench = mgg.workbench_manager.create_workbench()
 
@@ -54,8 +64,11 @@ def process_video(entry):
 
     arista.init()
 
-    devices = arista.presets.get()
-    device = devices[ARISTA_DEVICE_KEY]
+
+    web_advanced_preset = pkg_resources.resource_filename(
+        __name__,
+        'presets/web-advanced.json')
+    device = arista.presets.load(web_advanced_preset)
 
     queue = arista.queue.TranscodeQueue()
     
@@ -69,38 +82,127 @@ def process_video(entry):
 
     preset = device.presets[device.default]
 
+    logger.debug('preset: {0}'.format(preset))
+
     opts = TranscoderOptions(uri, preset, output)
 
     queue.append(opts)
 
     info['entry'] = entry
 
-    queue.connect("entry-start", entry_start, info)
-#    queue.connect("entry-pass-setup", entry_pass_setup, options)
-    queue.connect("entry-error", entry_error, info)
-    queue.connect("entry-complete", entry_complete, info)
+    queue.connect("entry-start", _transcoding_start, info)
+    queue.connect("entry-pass-setup", _transcoding_pass_setup, info)
+    queue.connect("entry-error", _transcoding_error, info)
+    queue.connect("entry-complete", _transcoding_complete, info)
 
     info['loop'] = loop = gobject.MainLoop()
+    info['queued_filename'] = queued_filename
+    info['queued_filepath'] = queued_filepath
+    info['workbench'] = workbench
+
+    logger.debug('info: {0}'.format(info))
 
     loop.run()
+    
+    '''
+    try:
+        #thumb = Image.open(mediagoblin.media_types.video.MEDIA_MANAGER['default_thumb'])
+    except IOError:
+        raise BadMediaFail()
+
+    thumb.thumbnail(THUMB_SIZE, Image.ANTIALIAS)
+    # ensure color mode is compatible with jpg
+    if thumb.mode != "RGB":
+        thumb = thumb.convert("RGB")
+
+    thumb_filepath = create_pub_filepath(entry, 'thumbnail.jpg')
+    thumb_file = mgg.public_store.get_file(thumb_filepath, 'w')
+
+    with thumb_file:
+        thumb.save(thumb_file, "JPEG", quality=90)
+    '''
 
-    # we have to re-read because unlike PIL, not everything reads
-    # things in string representation :)
-    queued_file = file(queued_filename, 'rb')
+def __close_processing(queue, qentry, info, error=False):
+    '''
+    Update MediaEntry, move files, handle errors
+    '''
+    if not error:
+        qentry.transcoder.stop()
+        gobject.idle_add(info['loop'].quit)
+        info['loop'].quit()
 
-    with queued_file:
-        original_filepath = create_pub_filepath(entry, queued_filepath[-1])
+        print('\n-> Saving video...\n')
 
-        with mgg.public_store.get_file(original_filepath, 'wb') as original_file:
-            original_file.write(queued_file.read())
+        with info['tmp_file'] as tmp_file:
+            mgg.public_store.get_file(info['medium_filepath'], 'wb').write(
+                tmp_file.read())
+            info['entry']['media_files']['medium'] = info['medium_filepath']
 
-    mgg.queue_store.delete_file(queued_filepath)
-    entry['queued_media_file'] = []
-    media_files_dict = entry.setdefault('media_files', {})
-    media_files_dict['original'] = original_filepath
+        print('\n=== DONE! ===\n')
+
+        # we have to re-read because unlike PIL, not everything reads
+        # things in string representation :)
+        queued_file = file(info['queued_filename'], 'rb')
+
+        with queued_file:
+            original_filepath = create_pub_filepath(info['entry'], info['queued_filepath'][-1])
+
+            with mgg.public_store.get_file(original_filepath, 'wb') as original_file:
+                original_file.write(queued_file.read())
+
+        mgg.queue_store.delete_file(info['queued_filepath'])
+        info['entry']['queued_media_file'] = []
+        media_files_dict = info['entry'].setdefault('media_files', {})
+        media_files_dict['original'] = original_filepath
+        # media_files_dict['thumb'] = thumb_filepath
+
+        info['entry']['state'] = u'processed'
+        info['entry'].save()
+
+    else:
+        qentry.transcoder.stop()
+        gobject.idle_add(info['loop'].quit)
+        info['loop'].quit()
+        info['entry']['state'] = u'failed'
+        info['entry'].save()
 
     # clean up workbench
-    workbench.destroy_self()
+    info['workbench'].destroy_self()
+
+
+def _transcoding_start(queue, qentry, info):
+    logger.info('-> Starting transcoding')
+    logger.debug(queue, qentry, info)
+
+def _transcoding_complete(*args):
+    __close_processing(*args)
+    print(args)
+
+def _transcoding_error(*args):
+    logger.info('-> Error')
+    __close_processing(*args, error=True)
+    logger.debug(*args)
+
+def _transcoding_pass_setup(queue, qentry, options):
+    logger.info('-> Pass setup')
+    logger.debug(queue, qentry, options)
+
+
+def check_interrupted():
+    """
+        Check whether we have been interrupted by Ctrl-C and stop the
+        transcoder.
+    """
+    if interrupted:
+        try:
+            source = transcoder.pipe.get_by_name("source")
+            source.send_event(gst.event_new_eos())
+        except:
+            # Something pretty bad happened... just exit!
+            gobject.idle_add(loop.quit)
+            
+        return False
+    return True
     
 
 def create_pub_filepath(entry, filename):
@@ -161,9 +263,6 @@ class ProcessMedia(Task):
             mark_entry_failed(entry[u'_id'], exc)
             return
 
-        entry['state'] = u'processed'
-        entry.save()
-
     def on_failure(self, exc, task_id, args, kwargs, einfo):
         """
         If the processing failed we should mark that in the database.
@@ -213,48 +312,3 @@ def mark_entry_failed(entry_id, exc):
                       u'fail_error': None,
                       u'fail_metadata': {}}})
 
-
-def entry_start(queue, entry, options):
-    print(queue, entry, options)
-
-def entry_complete(queue, entry, info):
-    entry.transcoder.stop()
-    gobject.idle_add(info['loop'].quit)
-
-    with info['tmp_file'] as tmp_file:
-        mgg.public_store.get_file(info['medium_filepath'], 'wb').write(
-            tmp_file.read())
-        info['entry']['media_files']['medium'] = info['medium_filepath']
-
-    print('\n=== DONE! ===\n')
-
-    print(queue, entry, info)
-
-def entry_error(queue, entry, options):
-    print(queue, entry, options)
-
-def signal_handler(signum, frame):
-    """
-        Handle Ctr-C gracefully and shut down the transcoder.
-    """
-    global interrupted
-    print
-    print _("Interrupt caught. Cleaning up... (Ctrl-C to force exit)")
-    interrupted = True
-    signal.signal(signal.SIGINT, signal.SIG_DFL)
-
-def check_interrupted():
-    """
-        Check whether we have been interrupted by Ctrl-C and stop the
-        transcoder.
-    """
-    if interrupted:
-        try:
-            source = transcoder.pipe.get_by_name("source")
-            source.send_event(gst.event_new_eos())
-        except:
-            # Something pretty bad happened... just exit!
-            gobject.idle_add(loop.quit)
-            
-        return False
-    return True
diff --git a/mediagoblin/static/images/media_thumbs/video.jpg b/mediagoblin/static/images/media_thumbs/video.jpg
new file mode 100644 (file)
index 0000000..841dc79
Binary files /dev/null and b/mediagoblin/static/images/media_thumbs/video.jpg differ
index 3758692486abbb9fe7f85baf5641c23eaac59fae..22b19240594596aaf14275bbbf0e8a4d951c6628 100644 (file)
@@ -5,4 +5,12 @@
                 media['media_files']['medium']) }}" 
            type='video/webm; codecs="vp8, vorbis"' />
   </video>
+  {% if 'original' in media.media_files %}
+    <a href="{{ request.app.public_store.file_url(
+            media['media_files']['original']) }}">
+      {%- trans -%}
+        Original
+      {%- endtrans -%}
+    </a>
+  {% endif %}    
 {% endblock %}