Permalink
Browse files

Update flicks-2012-video snippet.

  • Loading branch information...
1 parent 12ffb43 commit 2060e742003e79599fa7bc079f42003ab8e03f7d @Osmose Osmose committed Oct 19, 2012
View
69 video-snippets/flicks-2012-video/README.md
@@ -1,65 +1,8 @@
-# about:home Snippet Template
+# Flicks 2012 Video Snippet
-A template project layout to help jump-start Firefox about:home snippet
-development.
+Snippet to promote the winners of the 2011/2012 Flicks contest and the upcoming
+2013 contest.
-## Prerequisites
-
-* Tested on OS X Snow Leopard
-* Python 2.7 (may work with older versions)
-* (Recommended) virtualenv + pip
-* (Recommended) A local install of [home-snippets-server][]
-
-[home-snippets-server]: https://github.com/lmorchard/home-snippets-server
-
-## How-to
-
-1. `git clone git://github.com/Osmose/snippet-dev-template.git`
-2. `cd snippet-dev-template`
- * (Optional) If you don't have Pystache or Fabric installed, or are running
- inside of a virtualenv, run `pip install -r requirements.txt`
-3. Create your snippet.
- * HTML goes in `content.html`
- * CSS in `styles.css`
- * Javascript in `script.js`
- * Images in `images/` (See 'Using Images' below)
-4. `fab build`
- * Compiled snippet will be in `build.html`
-
-## Auto-update Database
-
-`fabfile.py` can create and update a snippet in your database directly.
-
-1. `fab db_setup`
-2. Enter an absolute path to the sqlite3 database file for your
- home-snippets-server.
-3. Enter a name for the snippet. This will be used both for the snippet name
- and as the Product Name in the client match rule for the snippet to make it
- easier to preview the snippet.
-3. `fab push`
-
-**Note:** You can set the environment variable `HOMESNIPPETS_DATABASE` to the
-absolute path to your database to bypass entering the path in every time you
-create a new snippet and hook up your database.
-
-## Auto-Build and Push
-
-`fabfile.py` can also monitor your project for changes and automatically build your snippet and even push to the database without user input.
-
-`fab monitor` will monitor for changes and execute a `build` and `push` when it detects changes.
-
-## Using Images
-
-Any images placed in the `images/` directory can be automatically embedded using data URIs into your content.html file:
-
-```
-content.html:
-
-<img src="{{#base64img}}some_image.png{{/base64img}}" />
-```
-
-The result of the code above embeds `images/some_image.png` into an `<img>` tag in the snippet using base64 data URI encoding.
-
-## Future Improvement Ideas
-
-* Replace raw queries with a better alternative
+See the
+[Snippet Development Template](https://github.com/Osmose/snippet-dev-template)
+for info on how to work on this.
View
8 video-snippets/flicks-2012-video/content.html
@@ -1,12 +1,12 @@
<div id="flicks-2012-snippet" class="snippet">
- <style>{{& css}}</style>
+ <style>{{ css }}</style>
- <video class="hidden" preload="none">
+ <video class="hidden" controls="controls" preload="none">
<source src="http://videos.mozilla.org/serv/flux/snippets/flicks_snippet_falling_480p.webm" type="video/webm"/>
</video>
<div class="message">
- <img class="icon" src="{{#base64img}}flicks.png{{/base64img}}" />
+ <img class="icon" src="{{ base64img('images/flicks.png') }}" />
<p>
Firefox Flicks wants Firefox fans and filmmakers to create and submit your
short videos now! <span class="show-video">Watch the Flicks video</span>
@@ -15,7 +15,7 @@
<script>
//<![CDATA[
-{{& js}}
+{{ js|safe }}
//]]>
</script>
</div>
View
99 video-snippets/flicks-2012-video/fabfile.py
@@ -7,15 +7,15 @@
from os.path import isfile
from subprocess import CalledProcessError, check_output
-import pystache
import sqlite3
from fabric.decorators import task
+from jinja2 import Environment, FileSystemLoader
+from slimit import minify
from watchdog.events import PatternMatchingEventHandler
from watchdog.observers import Observer
BUILD_OUT_FILE = 'build.html'
-IMAGES_DIR = 'images'
SNIPPET_CONTENT_FILE = 'content.html'
JS_FILE = 'script.js'
CSS_FILE = 'styles.css'
@@ -40,6 +40,23 @@ def on_any_event(self, event):
push()
+env = Environment(autoescape=True, loader=FileSystemLoader('./'))
+
+
+def base64img(filename):
+ if filename.endswith('png'):
+ mimetype = 'image/png'
+ elif filename.endswith(('jpg', 'jpeg')):
+ mimetype = 'image/jpeg'
+ else:
+ return ''
+
+ with open(filename, 'r') as f:
+ data = base64.encodestring(f.read())
+ return 'data:%s;base64,%s' % (mimetype, data)
+env.globals['base64img'] = base64img
+
+
@task
def monitor():
"""
@@ -179,62 +196,28 @@ def _test_sqlite3_db(db_path):
def build():
"""Builds the snippet."""
# Use the LESS file over the CSS file if it exists.
- css = CSS_FILE
+ css = ''
if os.path.isfile(LESS_FILE):
- css = LESS_FILE
-
- template = SnippetView({
- 'css': css,
- 'js': JS_FILE,
- 'content': SNIPPET_CONTENT_FILE
- })
+ args = [LESS_BIN, '-x', LESS_FILE]
+ try:
+ css = check_output(args)
+ except CalledProcessError, e:
+ print 'Error compiling %s with command `%s`:' % (filename, args)
+ print e.output
+ print 'File will be ignored.'
+ elif os.path.isfile(CSS_FILE):
+ with open(CSS_FILE, 'r') as f:
+ css = f.read()
+
+ js = ''
+ if os.path.isfile(JS_FILE):
+ with open(JS_FILE, 'r') as f:
+ js = minify(f.read())
+
+ template = env.get_template(SNIPPET_CONTENT_FILE)
with open(BUILD_OUT_FILE, 'w') as output:
- output.write(template.render())
-
-
-class SnippetView(pystache.View):
- template_file = SNIPPET_CONTENT_FILE
-
- def __init__(self, filenames):
- super(SnippetView, self).__init__()
- self._filenames = filenames
-
- def __getattr__(self, item):
- try:
- return self._loadfile(item)
- except KeyError:
- raise AttributeError
-
- def _loadfile(self, key):
- filename = self._filenames[key]
-
- # Handle files that need preprocessing.
- if filename.endswith('less'):
- args = [LESS_BIN, '-x', filename]
- try:
- return check_output(args)
- except CalledProcessError, e:
- print 'Error compiling %s with command `%s`:' % (filename, args)
- print e.output
- print 'File will be ignored.'
- else:
- with open(filename, 'r') as f:
- return f.read()
-
- def base64img(self, text=None):
- return self._base64img
-
- def _base64img(self, text=''):
- filename = text.strip()
- if filename.endswith('png'):
- mimetype = 'image/png'
- elif filename.endswith(('jpg', 'jpeg')):
- mimetype = 'image/jpeg'
- else:
- return ''
-
- with open(IMAGES_DIR + '/' + filename, 'r') as f:
- data = base64.encodestring(f.read())
-
- return 'data:%s;base64,%s' % (mimetype, data)
+ output.write(template.render({
+ 'css': css,
+ 'js': js
+ }))
View
250 video-snippets/flicks-2012-video/script.js
@@ -1,57 +1,227 @@
(function() {
'use strict';
- var snippet = document.querySelector('#flicks-2012-snippet');
- var video = snippet.querySelector('video');
- var showVideoLink = snippet.querySelector('.show-video');
+ function VideoShareOverlay(video, shareURL, options) {
+ this.video = video;
+ this.shareURL = shareURL;
+ this.ended = false;
- var shareControls = new ShareVideoControls(video, {
- overlayClass: 'hidden'
- });
+ // Store strings (for l10n handyness).
+ this.strings = {
+ shareLabel: 'Share',
+ shareScreenPrompt: 'Share',
+ resume: 'Resume',
+ replay: 'Replay',
+ twitterShare: ''
+ };
+ if (options.strings) {
+ this.strings = this.util.extend(this.strings, options.strings);
+ }
- // Bind click event only after snippet has loaded.
- snippet.addEventListener('show_snippet', function() {
- // Trigger animation when show video link is clicked.
- showVideoLink.addEventListener('click', function(e) {
- var newClass = (shareControls.videoOverlay.className
- .replace('hidden', ''));
- shareControls.videoOverlay.className = newClass;
- e.stopPropagation();
- }, false);
- }, false);
+ // Build HTML for the overlay.
+ var container = document.createElement('div');
+ var content = [];
- function ShareVideoControls(video, options) {
- this.video = video;
+ content.push('<div class="video-overlay">');
+ content.push('<i class="close"></i>');
+ content.push('<button class="share">' + this.strings.shareLabel + '</button>');
+ content.push('<div class="shareScreen">');
+ content.push('<div class="shareBox">');
+ if (options.externalLink) {
+ content.push('<a href="' + options.externalLink.href + '" class="external">');
+ content.push(options.externalLink.label);
+ content.push('</a>');
+ }
+ content.push('<div class="prompt">' + this.strings.shareScreenPrompt + '</div>');
+ content.push('<div class="social">');
+ content.push('<a href="' + this.util.buildFacebookURL(shareURL) + '" target="_blank" class="facebook"></a>');
+ content.push('<a href="' + this.util.buildTwitterURL(shareURL, this.strings.twitterShare) + '" target="_blank" class="twitter"></a>');
+ content.push('</div>');
+ content.push('<input type="text" class="link" value="' + shareURL + '"></input>');
+ content.push('<button class="resume">' + this.strings.resume + '</button>');
+ content.push('</div>');
+ content.push('</div>');
+ content.push('</div>');
+
+ container.innerHTML = content.join('\n');
- // Building HTML via strings; ugly, but good enough!
- var controls = [];
- controls.push('<div class="controls">');
- controls.push('<button class="play"></button>');
- controls.push('<div class="seek-bar"><i class="seek-thumb"></i></div>');
- controls.push('<button class="volume"></button>');
- controls.push('<button class="share"></button>');
- controls.push('<button class="fullscreen"></button>');
- controls.push('</div>');
-
- var videoOverlayContents = [];
- videoOverlayContents.push('<i class="close"></i>');
- videoOverlayContents.push(controls.join(''));
-
- this.videoOverlay = document.createElement('div');
- this.videoOverlay.className = 'video-overlay';
- this.videoOverlay.innerHTML = videoOverlayContents.join('');
-
- if (options.overlayClass) {
- this.videoOverlay.className += ' ' + options.overlayClass;
+ // Convenient element references!
+ this.videoOverlay = container.querySelector('.video-overlay');
+ this.closeButton = container.querySelector('.close');
+ this.shareButton = container.querySelector('.share');
+ this.shareScreen = container.querySelector('.shareScreen');
+ this.resumeButton = container.querySelector('.resume');
+ this.facebookShare = container.querySelector('.facebook');
+ this.twitterShare = container.querySelector('.twitter');
+
+ if (options.hidden) {
+ this.setPlayerState('hidden');
}
// Replace the video with the overlay and insert it into the overlay.
- video.parentNode.insertBefore(this.videoOverlay, video);
+ video.parentNode.insertBefore(container, video);
video.parentNode.removeChild(video);
this.videoOverlay.appendChild(video);
+
+ // Bind event handlers
+ this.handleEvent(video, 'play', 'onPlay');
+ this.handleEvent(video, 'ended', 'onEnded');
+ this.handleEvent(this.closeButton, 'click', 'onClickClose');
+ this.handleEvent(this.shareButton, 'click', 'onClickShare');
+ this.handleEvent(this.resumeButton, 'click', 'onClickResume');
+ this.handleEvent(this.facebookShare, 'click', 'onClickSocial');
+ this.handleEvent(this.twitterShare, 'click', 'onClickSocial');
}
- ShareVideoControls.prototype = {
+ VideoShareOverlay.prototype = {
+ // Set a method on this object as the event handler.
+ handleEvent: function(obj, eventName, handlerName) {
+ var self = this;
+ obj.addEventListener(eventName, function(e) {
+ self[handlerName](e);
+ });
+ },
+
+ setPlayerState: function(state) {
+ this.util.removeClass(this.videoOverlay, 'visible', 'hidden');
+ this.util.addClass(this.videoOverlay, state);
+ },
+
+ setShareState: function(state) {
+ this.util.removeClass(this.videoOverlay, 'share-visible',
+ 'share-hidden');
+ this.util.addClass(this.videoOverlay, 'share-' + state);
+ },
+
+ hide: function() {
+ this.setPlayerState('hidden');
+ this.video.pause();
+ },
+
+ show: function() {
+ this.setPlayerState('visible');
+ },
+
+ hideShare: function() {
+ this.setShareState('hidden');
+ },
+
+ showShare: function() {
+ this.setShareState('visible');
+ this.video.pause();
+ },
+
+ onPlay: function(e) {
+ e.preventDefault();
+ this.util.addClass(this.videoOverlay, 'started');
+ },
+
+ onEnded: function(e) {
+ e.preventDefault();
+ this.resumeButton.innerHTML = this.strings.replay;
+ this.ended = true;
+ this.showShare();
+ },
+ onClickClose: function(e) {
+ e.preventDefault();
+ this.hide();
+ },
+
+ onClickShare: function(e) {
+ e.preventDefault();
+ this.video.pause();
+
+ this.resumeButton.innerHTML = this.strings.resume;
+ this.showShare();
+ },
+
+ onClickResume: function(e) {
+ e.preventDefault();
+ if (this.ended) {
+ this.ended = false;
+ this.video.currentTime = 0;
+ }
+
+ this.hideShare();
+ this.video.play();
+ },
+
+ onClickSocial: function(e) {
+ e.preventDefault();
+ var link = e.target;
+ window.open(link.href, 'share-' + link.className, 'toolbar=0,' +
+ 'status=0,width=600,height=400').focus();
+ },
+
+ util: {
+ buildTwitterURL: function(shareURL, message) {
+ return ('https://twitter.com/share?url=' +
+ encodeURIComponent(shareURL) + '&amp;text=' +
+ encodeURIComponent(message));
+ },
+
+ buildFacebookURL: function(shareURL) {
+ return ('https://facebook.com/sharer.php?u=' +
+ encodeURIComponent(shareURL));
+ },
+
+ extend: function(obj) {
+ var sources = Array.prototype.slice.call(arguments, 1);
+ for (var k = 0; k < sources.length; k++) {
+ var source = sources[k];
+ for (var prop in source) {
+ if (source.hasOwnProperty(prop)) {
+ obj[prop] = source[prop];
+ }
+ }
+ }
+ return obj;
+ },
+
+ addClass: function(el, klass) {
+ var className = ' ' + el.className + ' ';
+ if (className.indexOf(' ' + klass + ' ') === -1) {
+ el.className += ' ' + klass;
+ }
+ },
+
+ removeClass: function(el) {
+ var oldClasses = el.className.split(/\s+/);
+ var newClasses = [];
+ var removeClasses = Array.prototype.slice.call(arguments, 1);
+ for (var k = 0; k < oldClasses.length; k++) {
+ if (removeClasses.indexOf(oldClasses[k]) === -1) {
+ newClasses.push(oldClasses[k]);
+ }
+ }
+ el.className = newClasses.join(' ');
+ }
+ }
};
+
+ var snippet = document.querySelector('#flicks-2012-snippet');
+ var video = snippet.querySelector('video');
+ var showVideoLink = snippet.querySelector('.show-video');
+
+ var shareOverlay = new VideoShareOverlay(video, 'https://www.mozilla.org', {
+ hidden: true,
+ externalLink: {
+ href: 'https://firefoxflicks.mozilla.org',
+ label: 'Visit firefoxflicks.org'
+ },
+ strings: {
+ shareLabel: 'Share',
+ shareScreenPrompt: 'Share',
+ resume: 'Resume',
+ replay: 'Replay',
+ twitterShare: ''
+ }
+ });
+
+ // Trigger animation when show video link is clicked.
+ showVideoLink.addEventListener('click', function(e) {
+ e.preventDefault();
+ shareOverlay.show();
+ }, false);
})();
View
145 video-snippets/flicks-2012-video/styles.less
@@ -1,14 +1,17 @@
+@green: #45ac4d;
+@blue: #1b95e0;
+@white: #fff;
+
+@font-face {
+ font-family: 'Open Sans Light';
+ src: url('data:application/x-font-woff;base64,d09GRgABAAAAAEvEABAAAAAAc6wAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAABGRlRNAAABbAAAABsAAAAcX5a3sUdERUYAAAGIAAAAHQAAACABHAADT1MvMgAAAagAAABdAAAAYKDNledjbWFwAAACCAAAAZkAAAH6E9A0OGN2dCAAAAOkAAAAMgAAADIGkQk6ZnBnbQAAA9gAAAGxAAACZQ+0L6dnYXNwAAAFjAAAAAgAAAAIAAAAEGdseWYAAAWUAAA9+gAAYWRYOyahaGVhZAAAQ5AAAAAzAAAANvuirJRoaGVhAABDxAAAAB8AAAAkDvIFUGhtdHgAAEPkAAACPQAAA7rHx157bG9jYQAARiQAAAHXAAAB4JQHr3xtYXhwAABH/AAAACAAAAAgAhMCDW5hbWUAAEgcAAAA+QAAAcIlTkCccG9zdAAASRgAAAHqAAAC6BO1LUtwcmVwAABLBAAAAMAAAAE76tC1hnjaY2BgYGQAgpOd+YYg+jTbElso7QQAPD4FXQB42mNgZGBg4ANiCQYQYGIA8d8BSRYwjwEADncBIAAAAHjaY2BmkWDUYWBlYGCdxWrMwMAoD6GZLzKkMb7hYGLiZmZjZmVhYmJ5wMD03oFBIZqBgUEDiBkMHYOdgZTCbxY2+X8iDC0cvUwRCgyM80FyLPas20ByDIwAcd0N3wAAAHjaY2BgYGaAYBkGRgYQ+ALkMYL5LAw3gLQRgwKQJcRQx/Cf0ZAxmLGC6RjTLaY7ClwKIgpSCnIKSgpqCvoKVgouCvEKJQprFJWUhB4w/Gb5/x+oV4FhAVBPEFwPg4KAgoSCDFSPJZoexv///z/+f+j/xP+F/33/Mfx9+/fNg5MPjjw4+ODAg70Pdj3Y9GDlgwUP2h4UPbC+f+zedYVXrK+gbiYRMLIxwDUyMgEJJnQFwCBhYWVj5+Dk4ubh5eMXEBQSFhEVE5eQlJKWkZWTV1BUUlZRVVPX0NTS1tHV0zcwNDI2MTUzt7C0sraxtbN3cHRydnF1c/fw9PL28fXzDwgMCg4JDQuPiIyKjomNi09IZGhr7+yePGPe4kVLli1dvnL1qjVr16/bsHHz1i3bdmzfs3vvPoailNTM+xULC7JflGUxdMxiKGZgSC8Huy6nhmHFrsbkPBA7t/ZBUlPr9MNHrt+4c/fmrZ0MB48+ef7o8es3DJW37zG09DT3dvVPmNg3dRrDlDlzZx86dqKQgeF4FVAjABiXld8AAAD+FAAABD8FtgBaADkATgBUAFYAXgBjAHEAwQBmADMAQQBJAFQAYgBmAGsAbwCBAFgAUgAAeNpdUbtOW0EQ3Q0PA4HE2CA52hSzmZAC74U2SCCuLsLIdmM5QtqNXORiXMAHUCBRg/ZrBmgoU6RNg5ALJD6BT4iUmTWJojQ7O7NzzpkzS8qRqndpveepcxZI4W6DZpt+J6TaRYAH0vWNRkbawSMtNjN65bp9v4/BZjTlThpAec9bykNG006gFu25fzI/g+E+/8s8B4OWZpqeWmchPYTAfDNuafA1o1l3/UFfsTpcDQaGFNNU3PXHVMr/luZcbRm2NjOad3AhIj+YBmhqrY1A0586pHo+jmIJcvlsrA0mpqw/yURwYTJd1VQtM752cJ/sLDrYpEpz4AEOsFWegofjowmF9C2JMktDhIPYKjFCxCSHQk45d7I/KVA+koQxb5LSzrhhrYFx5DUwqM3THL7MZlPbW4cwfhFH8N0vxpIOPrKhNkaE2I5YCmACkZBRVb6hxnMviwG51P4zECVgefrtXycCrTs2ES9lbZ1jjBWCnt823/llxd2qXOdFobt3VTVU6ZTmQy9n3+MRT4+F4aCx4M3nfX+jQO0NixsNmgPBkN6N3v/RWnXEVd4LH9lvNbOxFgAAAAABAAH//wAPeNrFfHl4FFXW971V1dV7p6rX7EmnswAhCXQTYsCEgIBsBogYYwSEAAHZQdkUREVEQERQcAEREVERsKoTARERZERckFFfcNwGd80M47gNCqSL75xb1Z3AMO/7fs/3xwdP0pXb3VX3nnuW39ku4cghQgSbaTfhiZl0IVFCSaEq2FqilIcLs62FKpYShZxUBWeLIkiqiRaqvLNFtdJC0qVrRA7KeUE5eIgfGMviFsSWmXafGzRJ+I5wZOuF07Q/3NdM7KSOREW8L+doiVrgvlRx4D2bBT9JFQqNlyabQCyFqj2pRbGXqLaklqZMu8VVqFp9LaoTnmqzy25V5MrLiWrhZLdiK+/StaxbJOzzhnI8ET60dVhNzTD/vIyK6oaGBtPb5w8T+MeRpfw2rtpYXw9YHzxeESLNvINYhEJFDLP18SdVDp7LSaoZniQmsfWpZniMSgV4Ypeu+AQKP0sXBytoR/hl2h37iZNiP+EzyoCGv8Ez0kgWHU6iflhr1JeSGolEomZ4XtRid8B1M6F+s7OwiZPTM3IDEZWILU3eQHJabiDcbBLYW7yUmYVvmeAt0WpzwltUyS5RUk+qKXKLkqLPzyK3RM0WW2FTlVmwFioWSfXDqA9GfX4c9Xlg1Cepdhh1yC1qkBYq3VP3VX7+6wXiK7Ttqzzx6wd4oaRKTVyq2QPPZb9F/A0PabKmWODCLzXZ/HYP3qrJ6XPAByT2W2a/vfgbPxNgn4FvJbNvwT3T4vdJj98nAz/TlBn/ZBaO81USx+MiJRmpkJ6RmVV8yT+lKhVJXxr0BOEnwrMfX5D9hDz4UwZvldHCIdpHtKz2xhvotLraOpqhfTiElmgHa+vrtEdr62ob6ZRqbR09PJQ+MIwe0XrgzzBt9lCtgh7GHxhHXuGBZ5fzp0Q3ySYFpJjcT5TMEiUtogpCi9IhHM0UkLiZGUBcb4mSF1GTYNwRjiZ5cTzJaQW+LilRrCfVoLdFCUpqBi2MCo7ccDispsPmuLwd4FJJl9RC2JhkYOsu+FoITOaWka2FTGBrUq545Zeo1Z2cW5wbKFeS3IqMnF6aSSNyMVfarXtZacTnD5jzC+RM6vOKZl+otJh6vP6A7KK0kpZ2yy/YOvj9G9bcX/Xq5uFvPB5cpZ7YfOTF4SM/7jf7jnkLaO/bVt2xfN/E3DBt7Vw3v3bh896DB6y96ittWmqfjXcsfc5/+geuI7+odno+fUOa3zrBubDhuhkdgD4mMutCiyiY3gGJBokl+aAvHifRAHB7U04gF0S1k9ASTUaG51F5eIWWZmtSgHeCDMNlZjG7zBRApXRlKsXhBvpJqowiB5eipKbBZQFcFkhqZ7gMulvUMLzKDtndZOUDqUAQtXMB/JGcmZsCfxDV2gn+SgsWdMa3vEDAqEMWy8uBYp5u3SNhPxAolJNf5vVHwnK3/FCO6KERK/23tyR4Z9aD9698dP2qpY801I85NG70mPotfOGY1hP0p4dWLn/04VX3rcfxQ2PqBe7U337+y1d///mzfa/QOXtffvl8f1R7dPeXP/z08Vd///WTl1+ms+msPTpP3X7htGmZ6RjwVCHoiUUkmoLaIRPVYS6Qy4aUKkWaXMFoEnQy1kEx7wxc1FliBHDCpVNSvSjmQJNyeA13lt0v2fjM3A4SW7oT6CAHUguQZ3yykgK0Kc2V3bvNTqBbhxIYZiQpKygGDjGWbwZ2KYvAS6jAxcVp0b2MujhkJ8ZKQJfbH3prcJ+q157a8NL9e+ifKmqzx/RaS23LDo188IVp7/9z0r5n7jwxUcu4b0HZ2mEzn1y4cPLsJfSWFa9Prbn6vkGrn9uy+uYXp2hlA7bfeqZZ++2N+ms7v/fq6i3XT6TfDpgwl/tg6L1Trnv4ptFzbgVaUdTVVGC6OkvX1IaapooQ19FogAx1vNTQwoR9t0bbT3+C7zpIMmH8RxUno6jZ26K69C9JblgtJ0s0lM/VbFg76+FNtMuMhx7nulIrfW/Xbi1ygWgZ2tTt9Ih+zwq456fxe5L4PW1gDNvuGfG7ZYkzhwj8rpj10OMb1s6gXTaZdr+oddXOwv8ez9GH6deU0mP6PSdxW/hW0UtchHjKTHyEzwuYPGY7LfBM8tA1BWvz6DqfNuf3ha81L/pFGL9kEl2nTZm0pEDbcTW9XVt6NR0B95hBzgkhYRfIYQ1RSIlijqjU3KKYwmC+URcRm7UwSgleUt6qm1vbSYULq1awIkI4arXhe1YzfMxmxUsbsRaildXVrQx23ReUQ/IMqtTQqFZdw23XX7VhVNHX0Vf7g0bIj0QkGTiHZs5BrLhT5hKFAwL5W1SLfjugeYAz970mOMcxeBx8yfO1T/v9L+weIznClXE1QNkcvAcuAn9wu1VCYff9eM/4lpcGfSPppxypqcHvbgF80Re+ZSYl7dBF/MJALRcjDAO0xEHDFgQMCBbYXFLAkG9hvJetoyCGgBjnwX04PzEnZhKhEZrCZd8cO4VyD/b/lgunhSyQcTsJkD4kasVJgHHQ1aAPhTtZV3hepvDcqPBA/afAqxtUm2rlUf37kkD9i+WMTyNh5KpQDtf++pbvT3//y99//PbHqdGXXt2589VXt3On6B10prZEW60t1h6gi+hcbYf2Ch1GB9K+dJimwDrehHVth3XZSCmJCvF1AdiiFlidvUQRTqo86BQHAjsBAY8ZJ0NtMBkzTgbMTkjuVuaipjfpqtoGR1K29qmwinY8N0jouGZjUvq3Oj/MAgyEtiGZVBso0m8Fm4cUsCIFUkoU8aQqO1uisogcJycD84kyXorIfKlAWtVP4Km0XLHKTaLdITOlFSmllRzTROYCXW9xZuoL+mbRpVvvqdyxfM+z3feceu3Thw5ry3lXHV2/vXlr/ZKtS/s9/m7TGu3nN7XFwhic32jYIwLz60BmkmgBQ7mwQ6k4P4+lpdlhL0gF6+SwwlQ7gkSdVHNBE+dKSkb2SVmVYOOkEjXD2xKVMnDKkh2m3AmnLBToRtsuqzS3vFxxuNXsILx65Kg/kMEsEbPd4e6whkJaql+AWjUXVFJDDfvQkAvBnNEj3h/5+V+//mzT5t0ndt4/rXlm1+t+uv3tz154UNmrtWjnTvUa1znc9PSajWN2PnzbQxWDrrr62td23bcvVfQ3P3rsS+DDQtiDOaYDsNduMlrnwyiHK5RghcRu5ZyIfVViaWHA14NgBRCMagGTy4ejFqYKLCJsjJXBSytuDBodixUWKQFb2PUNQmkEvoj4QsAb4ABIZSHRXMidWNDaOjq2jFvgsngn0jlXCWKrs1ZbSefU0i20+FjeI7APq2EfJODHdLKQRFPj+8D4RLa2NHttqS7YB68F9iGD7UMAvI1MHcH2ev3cLAZcXcUuxXnQBOx01qW4DxLV6S4upk1Ol+w2cCNVA2Zg5iSJAatUfY9scpQ6ApfsCfKVBxElMJcA2wB2cPXU5246+MNXr9/9wJU9uIOxTUUb6/5GndoPZ6b9qdfEssJ3dj69r6CAe2JMrDXjqyNfnitEH2AJrCsEOiAZcFGD7gOoGbAygUmAGVQTc6gACEkhvwBLlFDRFTC9kIJ6IYzwPhuI7YEFd4DX7BTZ3Sw4Jb/IkE4oAyw8cXocuimX3LmRcMAH0yd8xOAkUBKkzNu2MBddsoFmvDW6euDE37V/yM4hf5p27Ptf3/urdmHauOcbt+5u3tD44iRuBs2gS/cH6tK0jdqOhvF/e+8LLUavfXnGsfnvvfbc/vp1unxPA97Kgn0TQVdHTXE9ohIUGHMJU/YqRe7gy3VdTUN0Gh+NbZ3D1Ztqxww895CpFvHQAqCT13Qc6JRLupJJBqXSAUqXgNeHmiKs08SJ/o6Sh+InwrVYouaxITVLp5HSGd9yArEiCJbyGBzyp+dIjFol6fC36PTwOR0T0AeRT0LmGHZOYB4EzS4A0Zk0AXsWbNv11D2TX5uz7+tVmw5ujJ34/HTjK89tPfrEF3sfL+o17/6nH3h+7aoX6LwlR/oPeX7uzU/WHtgyc8fAofvvfekvb0dXPPrUioUbrrt6B7es/5Tre/R6dMr8+1fq/ugMWL8D+CQVNNF0ErXj6mWzYSvygT2SM+2Ik5PNuiYCUqTBYtMkNQeEwBtmeAY0j5oGxFadLlA1OXKzXfYl82zhMrjJirNcSZYVV7maj4jY7PMaiBhsid/tkzhg8gImAMQTctE4FXDlxfCXOOPsmw/+Zc4j2qljk+oKF2T/TpMlx8C3p7/zdeOuLRNenDjq2Wmb9vNffkalR7TPjmpfaAv3pda6kugEWjtm4hf/tau5ft01c9695QRbL7PTQhHYaZlE2iy1kgS7jXbajUtULGHDRoMcxK215yJrLbNX3DFmt4fVlIRyitF686caGkqLi/FZQwBexJ/VjbR/hOVks0O/vymMJpj3g8YrwUeoDh7oaEvSvfzuOlrxJB42JKNPEgIXn/5A7Y+xtONUBDDCh8ZjEY9RG+CxQyAbBPSiz0p9M/jm1rf4Mm57Bf3kJm2K9sQYtvf0cyHEv8liEalxxINgx2RmiMUAKEx64AdvMoRvpp/X1NBHEfX827OstBSfVQbPaqa2MXQcXXeTll+Bzyq/cJr3gr3LAl92ConmI91zHAafpaN67VCiyCdVSW5pSpWzXYXNuTqBJIkBE/DI1I7wKslAnpx8YLNcWeXT4TUFfCyfvRwVa3oOsJcoZcEfCi+DioXJGxLm4swuLoOGwNnoReMyZRA2lFM+fd3QPR/k9h55RVW/rJrBE24cUPnsfUNXDNuGe2u6vUv2Gzv6Nl4/vKT7DQ1jXXm3b7xhaMX86sXrQwXnQwywceCL9hS3mXYAqqkid5FoF1ifEilRi0CRwH7bI2o5kDYrrFSWqMlii5Jfogq46N5MojqBweskqT5YX3cQru5MuDCuovaB15zusrvKahfcyflFXSJXMrEqioBYdS1XK8vBp7KQJJ8rpxO6WiBmqQl1LLiZDs4v0IWqFOUtwPsMDcPlhnIEzieRIPhYPjGUTSi8k51GkTKzPqarzn1EBze9tOGGGQB6t0x9eMvPr6942N9/+MQlm7RP93+nPfUqraaRUa/d986H2tPabZxl+jxywS0Nnb1OAQ+G0Me+imovffKNdnrqqPETDu16m9KOWpfMSTe3vPI6zX3iTe3h09oB7ancbuOG0TX07tUP0noaSjuGtIR/wjHTfuBKF+msozeFjzAF3yxaCAV1JKJmBoGSmJ63ADEcsOyugIRDfJD3BPn8AtHMDenNVd3yTmzXuz9z9jdTQmnZpv3n+nJCrJUbwyVVTh9TrfvEx+F5a8CWJBE/8OdEAy9KghF1zAItGPCzxwbwsdlszyTYqEAY2ZNJrQ90IhoAk5cFuNQ0CYG0BbnSL7HpKQEZgAtwZpZbMZWzYGV2O7gVygtmy1JHEDTdWgaPA1mStA3rXnxG++2Mto0CltRGaAdon/de+fB97WPT7r37Fj+fLKY+/8jbn9TTQbSofvnatfegTN4FOn0vyJqf9CZRL0P/1pYmd5LXAro9gQFwKQHdDwDwn4yEtIJwRYnZgfIjyDr478YMuzkf+ENGXtFZ5a7nacUHJ5/vuFnR/qH9iXaivr2Pr/lYe1fbxJ06RUe8PGzkMG2z9p72pratpD7CAloc0tmUB3S2EIlcYVDZGqeyhPOR2XysQFqrxFwAE0zNjVOTEPLFycZmUhABepGO9DhdSUfTadod2oo/fuFWa4e0d7RfTbu1tdpT2oPasnpuJe1BK5Au8Hz+R3i+nVwdf7rVeLoAWM+ks5YJIYQjMRF0T5nragWMDT6r7qcazqnumOo/x/ms2NXc2th07mXT7tGxj0bHVo3WdSQ+F2MBVtANbb4ce6bFxJ5pwWfaLvNMcJeNB9oveeBxPhjrxz0cm4oPe/im2C36s2DvTR2ZPZ9Poslxzy++480ebzKCPQ8+Ly2++fGolx+9IRaylT3wxHQj1BUVrMnIEX5ZNYvI0EnJsBf+ctXrAR53kHJ0kMA5UwT3f2AZOQhOvAj7dtceet3n/zzQ8cC72iltJ+1Dr3h7lXYNl/Zf2u/aNm019/EpesP+upF12gbtfW231lTOcWNiE+rpsjgdhV/Y/vUytIJZ1wqKKdLM2xgl+bbdswMlubBilxANAk1Vs7MlsW+YKkBPEgjZyNdOnNgKTmlsHrf83CDueKxrYt9oKfPBg//ug7O0A/6YEnc83sgccPzuhQHaavZdOykCfIpztJaonDE58HHjc4ExIKa9XDHp9soMyjkFfBkpmFOwt/rqXxq17SN7al5qMR08N0hbnRanwzYWBzIyJIolQYd4mMnBFs+iQgwHq7ytvFyfZhmGHEPUDPPdwlXcHXuem7godvwwrN+yhauNrW9t5oUdsefaeBdlxhTXxEhhgw5inA5RnnErbwKuMbcR2He8EWXh3PYxiXuJKXAvD6k17mV2RtrN3Mvu5wFj6GF7xoiERtGDQD6pXLHIUc7kRF40u1W7gwUG4K0ob08qN1YHFkAPEIRgiSG/Tz6+iRNFTnx8osMS+7x37JTFAjM6ZxLPDRJG3Lrw3H5T/4V3n9+b4K8zzA4YMQPFaszODLOT2OySYHZJkirCrKwASVBskoi+g6KscjYUBnQ64lS3J+aVX4oMp8+pkR8rWsdNbN1kccBsfmrewu87N8jk/mFu6xDQkyjDG434Td94/MYaj9/Y2uI3vsvHb3hrPH6jEpEhbZBCXRazSfvru+hNtAsN03ptK+jq49rWGTSZitRCA+jfa+e1b7lTdBRdo00DC79Vm0LX0ZHaEe15OoJW0CvpcG1HXK8LvZh+c2O8qU3DuUHjWHS5tKB69yQ0nC2MGh64UxVg5l7kUjeGeARDw8teIRhKSYQpjtNGzgbI/o+v3vr9sz9/AkpAG/lfX8W2cs1P73n+aZzDXdpWRjMJPPkhJOpCmnmBZizowAiXatN9eJiBDISTJTVgEA7ceTUApq+JtzmtDF6lev+NdpwZZSb0HwjYeopes037Lpj1P1HxE21xd20rHcT9N7R8CGjpBOt948VcqPqBnA4XI6ejzXqDy6m4whiPdxsGMxkZwQkrsAP+QMVigyW5gDMUC2rxhBkVWMw9RIMpNJgg9EgqUWHDJrrqNm2Zto4GXn736FdA77fefujtzrFGblFsCXfimaeefRSxP2D6M4AzcskYEg3FdYOUiDLmlSjOk2qyt0VJ1iUmG8BRPhIdDMhLvF3yZYQQtGbLqtuDLMuH9MCIT26iTk82vie5FTeLj+igtZiyhIFhX3JEH7rImRzip+wZm/7V/GH/TY998QKlb7/3Ut7ubVsO9rz36Rd2DNV+PaX9VtB41TP3Xjutvts1Teu2Hq+uG7L+ruGTru3Rc8aq8XtOMvm3Ae0LWI64h+4ZJmIKCq8nZsWTqgnUnYmFDE08hgxNiZBhm7eEsWqbkKHlTTTVjhlzbjuGGuD+B0CuObi/TMpINAnpJRroR7FFDNcT1anCSyzhCzqcgUsrz9Qf3hxUiA7f8YIEc8iBiX87+f53jdpnwGfa15yF39Va/eHfvz/G72+tbtW+oRnwXMTTm1jMFeyYDddF4krNXoIwi6gkLnygqfyB7mUIpKfRmSMyvD3p2hmxz+tNu1szvpw1eJMwBC0cBd+ZiIhp0uh9JJqG9/R4WYaZ5UkoZsdzA/CAdLYoCjxAdZDhhkVl6PGz1yv+WcbiZ0RS0g664BOKeHBfxbF/jsFRk2IrdinWg2py4KxJST247/XFPw5hH/fCeOCg6rDCuB2+8O4/b8RxF8i0knTQpLglxQMfz//nAzBsh9s2cVTEtDL7LbDfJvy9r+K//jmXfSZJapKSZBh5fdyPChsJSE2+gBc/s+PHb9lIqtSUkprsKYzC3bJXZK8IiS7ZDY4mAB+QsvIovNk2HIUvt/sLbt72F6lyclaHL8ALJjFJSk65KMlMqzyc1WZ3eLy+QGraZT+SyEZT2Lg0kHOzi2mqCM3kA93TKG5hJcUtpBhGoqHIFEqSUn2yObn63CyaF/E7O9LsidrUEdprHbxST+3TWtjemvKx1w3tcB/18fNaRWXqgC1CZ7CRk1becP1X5//B+Bf5qJphmvw23MHFrbejxAA0aPcEhja6WhFqINqwUnpa630LQPU107Se9G9ztGHaAO4ctz/2ADc71j8mcNtjtfFnlDMfAbCNOcGrPDzAyuKvIugQG+oQM3AsB0qD6BfIuvAsCqI3h26nO6ZrKTfDqr7gs1sXx97hijAnB/cexOxUcRx/WA1szOsAnKFs1axHlVWBNzIgkVIaxCBI0FfD17Ue5/e1buNnDTHZxgw5d8bANru0/Vw90x1dSQLeY0iFuRN6zYrJDaqDISWTmfkScZVhgPpddIe2mw7S9ovnRp89fNO/54H4OD0umweC/Q+lNHKhiToKBRnV9tNT8TnFl4nRUWLMiZ7EuEqUMnVGcU58fE6BIAPtwQjMZzfMa8S3YsXosyKbUx3XFfZIj/kgl1nBN32/L313vDZHm8115R9snckHWlsYDm7VzvDVFwbApAMEQ1zE3II/LKemT9sMixf4mtZde2sIpcuFj3mLGIQ96kBgqpjHc2IejzlHzSY/sQu6L6RyZiP2T0sjYAR8oWL49gOpa/r3G/OyKMld9g+Rhr7MbGoD2KmHhBqgZS6ZS6JupGIgHhB3cnBhsbQ08zkBJzoQZt1ywX6lgtZK1f17ITscViXAfuDvuyWM6TBD5kkF1GBx2gMMNeRkoPvsBVNWrlp4VhOkOGWAhugT5fai7bNGcqigXaizewU1u2gDtZ4/fsf9j2zJa3qxSR2YYqnZOXdz9OZFs3e9deDbwzT4pGISB2zYNKJ2xL43YkU7br5+66rGWW+qUyz2BWydu8HvHyJ6iQ/0vBHFiEq4zhTM7OM6M/Eik2VYKSZic9g6/W7mK/iSWhS/xNw+JwhZCD1CH2oXWJCSLqs2lrzIxDSA2enxino6DA1REmUhfz0vmF8QMnt0IwVOjOjbPU7gzZUv3v7N979+duu+7tb0vJ17os3axoPbRK+2oG7QdQ0jtS+109rP2idj6rZy0pmTZ7+jH30W0+VqHuzdUmEErKmCRD24GBdmMtmmIcbwx109RHOAcsAlVWTmKRBRYnFAPWwAqK0NM8DkMIyRQ+ZR94+r7kpbNenoe++9/PDiSc+3aH9wKdRFi7rWlfz+w2dnS0dGaD7Sdh7GyYG2HpKFWQIn0lamOijTp4PMxLNsHG9D2uphIi+Ycy8LYSrmcLzExAmUdpawOFEKIM0mkU+SGQdl+IG4xOxKEuNZFeCVgOE6FIREloENIruw+OW801/O3dFXFBt6p1gW/vDlj5PoxL07nn812sRJNJV2qp10xwK67OzpbfsAkLq08Mkzcuvn5/S4P9L1R6Crl6SRRl0mVHt8KcAvzT6LG+P+DMjpRtwCS/GF4/VdqIczkEUszAFzI63BA3Jh5Fq1u+MOm+ICOOfWQ7G4Be4MGmQZoTIfsj/xBPWVUPLxwb+2/swde23UqqkjN47+h/b7dG7z1jVPHOACVKDl2m/fDfvidGphfYcMmkvrXz1xXOePDFjMCTEL+GOsHuuK2nkDWCXBUhQuorotoIjDgApUatI5xsuKD9DRdIUBt+CeeWQAc14PXnoRzDFusmMK3IrrAuSM0K6M1arobAQLYUAv4+2Hnq2vDwwbeutYSi6QcXxLj7wRR19Jq01Z/viE2tYA34IxxiLNK4hA746AnHqRwyRaQGCanc2Al5HiFSbQKeGoi12LLc3h7ALMO4ZtLc1lyeyyTIS5V5Uo9pNqN2dLU6dudgtAUy+zMZ28LU0iG8iQW5RuktoDK3NwuyS1GC5zAbPmFuPact2wtt4w1AN0VZWNd0nJlmBB57IKo07HA5uHpTxqLoZ1smVEN8luVcyAv8qQCkoFuBU+NO4BI4VVZlTwBII+s17EBJgDZKwnxbi7EEQVBw4dehfZnnh2C+hXtHJe154rb5p8XJnSk478sv59ZVBmz8qhow6o+8Fv0o59eTO9hu64d31UO3HtY3fet2bdvXevOzTz4TTfNeFp1xY8O/XpN3z9XDPvfeKwmDWipFuX1ffveGXT+i+o3FDHvXzHyhVLVq5cB/yxG2y+C+TWS4YbmMUeiVo4I75rkViKmelCny6vTBeiyGL40Q4uPjK7A/1BE4vmSgzemOLBFDNqvuwUGtLLuXzy7nEmc8W+FXR2w4o1h18CFSevbKjTbomVc4e2rnvjcz2uwhF4oRins4Kn19NA5Sw3bnG0RO0cmngXS0XZwqrJ36I6YSb4moTaGafAWfQUUbd46Rj6Bs/1ygqFsnq5xpmmjQkXF3U795vQ6/wheN6FTZqXPc8BfuVAeB5yH4dCwrw1eKaJPTOAwSnFGVbN8Dy3X/clzViHkeTD1XM2PZZtRKt42E7miuCu08RUGvpd+ci4xXOGlVGbPiFtiVcxZZ/7cdnaFHMVmxnR94Y/BXvjxFqQuKcrtq0dF42CGl8zKHKiioz+8bCKDMDQiGbtHmc2cYXztRH0/XnauKjobf1NO8E1aF1ia7i8LdoiXV/AM2kKPJMn6fozE+E8WDD+tIXzdo8TvWdP698RG0F2c7BWg+FGORXjVjDTqBmVjDOCllXxg5MYYjfLgRtxIIo5eg1hqpMBCfTPZXgnF/MDORioMYNYpYJlxbSAG/OkYF8JBiIEqy1uXgOMwwJGUl1OMFqIVQkCw9X4xKJt4ykdKJQ2zY5GGxbe+ezmCa0vbBR6rRt+w6FR4w8cB+Z768m1e98A3/176nnzU8aEhmzAutwYMUlEGnBVuAloaOMhG7exHtChNiPyhXUYNjcugsWEXSzaJZTH59w9eJFQjPCIk2mSIRQwse0XS4RuX8thLljbFo95SXF75Dcqdoxoh1PHZCIY/VSWfE/ULGGqBTikPG5tMEwDiIQra6d35lHuyy/IBfCWV39y66Q3mpvfeLO5+TAXpDbaUftQO6ed0U6soNzzX5w//8WXf/yOuAp09xCYG9r+m0jUgXMLoOeeIBXWC5CSuM1Hw+INM4J5JDZFq5EV8mCluAv3PMqLDj1nGcCyCiuf5NJNPiNeHEsVhAJ+Xwptj6aAkjPPfPb9rx+cv8XMCy8cenaPtu1AVPOKhRsU7RTgqN+0j/ePGFSnNQjWC5/8cYqeev800hfW4GB7nUVuIDosROiC/JvAL4CyE2twssnDbkfNzhSsGcZNxzXYPAyxuKQEYmkSTS5nG2AJRMqMECzDK2zyskH705+dniO6RzSI4tzzJ09Panr+yPPb9yl7OC/10KJdj509QTfddscBmk5t37Z8QqnjX5/8kZBb7gzMXyL94hHGuPhhMCxqxQubNZFDknSOZTIncbIekrVdwqQoUgYmBBa1ma96dGq/oZ6+A1dGhV5/mj/WdZN8utmQlRGAl+rg+SGMdeWwWJdg2G4GkXL1WJczEevKggnkJWJdNsmXnoM2NisR68ppH+vKukysK7+A1Ve3g60s0gVEHbF191PPLn306XuuOrZX2ZS3efnSjQuUh+696q/vflIypWbKDTUzu/e8bso1tz3Qp75PXfV1jb1Kr5s6cO0TzJ+8cJpbYOoPeGk+0QEsUs9kOEGIkywMJ0WpJV6vGeWYSma4KZGe8iYqNr3WOGjCkC7vYpUMGFrlvYaH7pDboUGEUb2onsdKAHEAuClPhSO0l3aobvTo/gNGP7gcYFTRGe1sbWzYovnSsOTHn+EO4Py3g57ghF7Ax4Pbo3DREEcWSPPEFboRSEN75jBUFsbSVBerb6ciXiaVl18SV0OgHczeDqrq9T0NI9ziZHBNVtEF3JFY1dZ1f/qcqzt/aP12I1bB74C52AGF6pUz2KmChW+KpS0gYsTUInpQrZGmXJEudiykKY3ayPFCr1jGA5Pvm819iVYa75lFiGk73DONino9WtTtSYtEImDyWHU/3r2ZWqyS/O/hNQntS7vw2tAfz1wSXuMO7qvo9o/BenjNUuxSzAfVQLIeXjvsP30T+7gHxr0HQZhg3HpwX2XuT7v08Jqkh9dkSXEf3HflX07nx8NiyakBT2FTCv6Owu92wbHkcrKHM9uSvIG2GBatcnFmi9WW5PbgcGraZeNaAssxYlTDw4hnvKaxFD/4mEmUD2VN3lXhEXumfVF/YoAkWgZsG699POnHQK7oK/qlAWi74m/T/3YN90hsyt+H9KZp3Mzzh7iPBq0etCZWyGhdBvv3Btu/9vEs7j/HsyLt4llldIW2dDbtS3tP01bSB2/RtmvPcSWcpHWnb8d+ir1Pv9XSkEc0L+ORZKw2ciHq8gioWRWZFXJa2vFLSoledUqwxEVILmchLY/bWDRWxBegZqjkyhq/uzld7HTTd41aSs9hU4aU9+9xVaS617UOWPIm7fuGuyjhRp6XH5/a3VcrdZnwaVCPffH1MI92sS/MC3O6Ivvfxb64pbHt3EexedzKXvxzdb1a6+oSdencStNukII6wjqM0DVXkkvQSLKqInRdsHflJGZhEWHbw1FvGlMbyVbmGGexhYMpVD1pgIWozEolFQugbgcT0NJKWipLeeA0+mSjZgIkNuBD1dGt4rapdNKKhXUNY2+Yt/rwM5w0jGsYR0fTQrHeNHmSdvzuO30W7+LbtQONE/gb12+kw7H4ndJWTeTqxBQWm7o8DKSgDmjrSE20eH7XY6ADYK3rYa2ZuFaW6sC2m8wSYFh9ybjWLGwPgEWqaZjLDEd5tlY+E9aaFMaiSqImM67CtWJZCOLAJHCsPMyxwqViX00xvuYXlCLsw7WKuPTQgFULbhg79obbV+7aN23Bd88cbuEmTKR9bl/stXjvXEK7Tpxiqt+wXtsyfiw3TDimvbjhEb1Oi5skhPgK0PulrBLNYoaZlWC0C+aJyl33eC0saSizgmGVOvT4CUvql2LYKuBPeO4FaJNmTF1UMXXCHaOvmFLZZdbAWx9fOLbrXG7W6OlpnXtUVI3pWjWgvALYe5u2nA4A24m+DmA7lDDVjJVwrsu03dlZ252D9dvZXAD8fbrT48B+OzOXcHr0ejiQDM82vRbOm1GRwf/CquDOvStUnn+drftDsNvHTO8Ab04z9CkLhCanStkHWTeVW2gB68H+4iN6Xi1Tz/Q6WaYXRBKjotjvZgqDdsOdTPGBF81Y1o2lEL5yxSFHic3LYiAYMWBFENgYdWnMqZD6QqX53IfH9tW4ljyYde/EV955q3nJfdOfcNTsO8a1/EALg7u2lY2I/Ov0l2d7jLzi3Q8yaQ5bRzVg9a6mt4DvZhjym24FpR+OOlipstDSLJqJw1mo+CKqaMbSJMaGAtYysuJVL0yedYylZGJNSUoATLeQggMCwQFBhDUx1pTNurl26OY6wkQvVBqR22ER3XyL5qCvevrtH374pz0vbgg9sWLVcrpBm9C/mu84whddRrka2vHdv/at7bNlh/ZhzQVy6+YurO5wMbUJkrCJpJECMp2g1GSJLUpeiWoT9TpA/iR2qGFrGtbBybJe+peOptucxipM95gsjiSPP5UibsLCU+adZsFuqF6MXOTJe6iJfcKCn7CBV6DnSMryS7uVFZQFcCllAQxYmAPmAnRfze2DE4tX1tev7Lli4hMbbl7ek10vn77+sSkrBr267N5XDyy99wDtv2ry+odmrLrygVGjHrhy1YyHHrlZv6Zv3XfwteX3vf66rhuxBn486As/uVXPSsfzGc2S7CJOdLmw9BqEsNnrYwOmiOqFAXOYeeOuk4o7zBquLOGo04X75cRCJDEcdTnxL5dkZXW46KhjwTlDXD6vkRPxsJwIbJZPD1aBKsf/hUaKZBhN03bRGm3XzdqLdDj8+E27W7/h01tP1xyr0Y7TrvDC4hXtdKUZZMnoUkV1zmGrHHsxMgdYf4EVLKA3R46kXEwwBbjWmMDqGlr5ZXCPLqSS3E2ixQxFm1ui6Sy5jXH3XgxFdwV27SopWWghWTVICaJpGFKvoLhyNR9ATiGMJIfVKlj2FVkslmWX/Om5HYpLsUJSKdR7zvhiHWWnyy9RT0qh/p7fDbjk33LK3ROBLDOrOtZTyxQYJF6bnajHhm+46F2712/ZHl68+OiDE+pqq9/Z9eJToRuXXXPv6sj8Ow8+uK+29qsjIzdl9XpYqamremzz8HG9bqoed2NZ7z7FA5dPuHZlfsn04XOWVg3LSb1hcPd+lYVVyxt3Tug0tWbZmkw+q3f1gF4dZ1dVDhsUDswE2g8zBfghpsPEQmRypd5NpjgizWYH6YkFsmE2YvwZTyOb/KCv9DSyy99iFC+zRkOsd82LX9BhWdlVVb3oIvZimlbcoba2Fn9hzHL8hdNiX9CdSYBKS8nthufrjdeTgdMb7YC6PATaJ1LsCDkL1Qjqz+5xDwyzJdhCUAjsWygxFrUAn5QZfaZ7HF4hPZTXJcI8yWK9pFXpIL9kkZJJfhfcqpBbyUuUlLF6ViGUkwv+vFuIhHPd8SpW00VuUtypGH+Ujn4bf17Xtvz5uLbl8CiVdolGaUn0Be3YS4p2PEo7/HXfvKl5DSMfeGrd2hGzGye/8g73KfuWtuXtN7Rtfz5O649Etfej+MVdtHivqr370p/Pdru26NXt+6KFdUXfoT6r5oNcX9ObIONBMg+8EoaAQKN5AdCJDBwIqNj0ZEsAFFuANeOi9CTJeqIlgHDAZgfNlSE3WZxub6LX1ihGkREOZcoqcZezQjuOuVOYYHIbCabu7RNMmF8SL84uVW9+6qYhfa+fFpwz+5u+KSPm3jSzvn9F/c11t97Gfz5+okUovGZw14FXfKRVDBjRMLp75fiRVSaxgsUqa8givoh/johgv7GiPMB7zMZLDS2t1LTKCO1eoWkVnJBGlxdq67T1hXRZ4tKoE3cJLq6VmED6jUrzeHegYNVrybDzS0beihslo5YMOwBD8gz+SWz709x04/9br55wEV8XAWdvvAxnN3cudmClZGexJdqZhc47Z4Oi7RhuDpayN4KWy3F6Eaiu4rBSpPfJYodI3sV8Hy6S3S85vOlCYQfc4jxZ6YQRdqUjSkBn2d2MvM/eKpX/V6wPEFXvIPGE+HjFVCH9X7D+kx+u3nTNgH8s+OC5mTdOemP6/8j3scf4mQvvGrogR5tHJ2mP0r2jbtih1zqeE72CKDbqOd5L9kLfAB42QMT8GWwAR1byc7gvWd8260/Uy9rA5FlL1CRzW3Wb3FbdJl+2OzEe6bu0fdqw4St33nHHzp133P18/W3X194+/4b6ecLme5599p57nt229MY7Fo4auehOmP6FC4CoKPavSgWkhZDY9ZKI3bDAY6XcIG4OzDOA8VFdqi3MoYn3UJrY3kclVgMkIaIysYSCCZk3BbGUz+ggtMhNJptd0oNkpWWVF+WCvS4OTHTpL4tGj7pm6rSu8x5ZeH9q92u1f9HXuEHV/1jw4DVXX1vTe+LiGSUjrh+ltdaxuXXkyrm7YG4h7KwLsGI7mFsOIHpLC3PmzHpQSjypZiGQRVuaCnNNYgA2yQYTzMMJxsNQNoD7WaBa7G4lo1xxy1GvL1Xv0olHo9o1C8bnLRoJn4733X3LvHnzliy7efLoYXfOLbn76cVr6gbuU598kJtTV9lw/bXVI66/5qrh1f1Hz59YPcVftO3u1eTSXD8paRYuyvWLiVw/i/lj8B9z/dgiDg6ImS4fuDp1Ve7OScLH0tCXu8jddlzP4oSaV3Axf/taIz7kviQ+xAK1ejA5WU/2JF8UJWLxWgSSLnc8ShR1YfbjMnEilsEv8GPWZ8WDerQofHTOuOUREwZk28WLrhlVVj6yWtN7e2dprUKN6AX9M4CwA0hY3ZyF6T2LE8G4BfYH3A1WdGqLF8Q3E1btgR3WVj3GaHKyClTWS949gloS/6MczPrkBy5r/Dfjq2r+8o7gpoL2xw/ivrP9+Yj7nM7zW7gZtC8fkbA3iXBLdKyqeelyuJJJR5gX0i7JSBMxVGFiRyQwKKEfeYItFx6dOwrKIvHkX2FmZXXNoVFj+jy3bEHfVG2e7Ypuo9N2zclbPn6CXcfEQ7hBdB+rw8khRimxLdH4a7+o8RcekKcHk0XzEOoe2eBIPW5yb219mAuNuzdwm55L6w/2dxPYXzt4t3F94hGZPnGJiRoBQ59IRjMRRiilNn3icV1en0jxgxr6b1zzwBObV69+vP7998dPmzZemLNF2bX1qaYdz2l/UMuSxYv1uQwAWxmK28oyD19GfTRPfxkAFpKWau/QQrCYePEcnUynFGoL0rR5hW2X+v70JMQ007Rbyie3/5OAZvqG60UI7NZ33KnYHngfSGm6XX//NfY+/Y29fysvsvc7wvsfmd6B9+cQ/fsf6d/n+8f2wDwHaXP4PPDJM0H25pJoEHFcvgN8LtBulkSrn9vNcj5Yi20H8tmlplR7yFXYnKX3ZmWVNIf05rhOLOINkmJyCegFW2TVl87UiRrMZ/o6HRgmpVzJB0eZtRNgAhlkuZKroBGgdRJlSeNIuBcNMKmiCR9/UIdrllb1y6wZOrZ+YOXWlYumVuXNWFe99306XXf80/pPHTOj9MaxY5PyFj153dCKeUMXPlqcNrRL9hFhj94UB/RgPUXmW9z5JJfR4aoLR2nNZcbnAlK53PgRktFuPC0xfpQI7cZ9ifHJJKvdeEZi/E3AHI8T7oIG+/MHqzX3YJ0v4g+FRNoaUjys6LTZJTmw3NclYHuKI9Ge4i1RHCcVOZwIxztYOJ4DrWGLd6j4mGII0bYOFfjhKWgJjlvFT4s9xlXFDnITYxEt72vqoNHxia4Vo0PqD6TbXaBP95regfnns/nfxomMP1lfAKNPB4OeKlvvpeNzSf/Ljh8hUrtxX2J8MnHj+IVDoCiq2Oc76/fXrmCffw2ErLLd+NwL3dnnv4Dx/HbjR7SX2OdN6Lyy++vjk3Ec+L/E6EXCfONEI3rvjJ+RgEfFEIp9rxhOwfpfDKekYPEF5qOdejjFaWfeOJp9O3PF7ZgDceoqxuxr0aO5rA3ALOmmNN681JHKHqN9CfelZHNbD5O2pTHRxUTXa5O5baO5aLyZidsWa9b7mWLPjY7vg3CG8WNXgx/nsHWzHgJGj7BOPzLtsuNzad5lx4+QQ+3G0xLjR8nmduO+xPhk/DzWa1FwAoStqJ88ZVYasFKzlRbQeeX0UfpYD20SXd9Du1mbXE7XCZPxz0fxz0nwLvul9+Pp/Q+nQTLSAN9M0+24IkXUzHgTRIpNRzdYsOFjBVYsM+nTU25eoheBBeU9Iu+U3JZAuh4EUsyYYHfq76bIe4jFZnIn+VkROm+cL4ENSywyhBX+OQXmgrJ8jxSg2MwEtg53r4BV/f+weeqAGa9h48TpJ2sH1e+fsZL7eulbWO3/7tJjWPy/Uq/6X/DolY8dBz9oqzZl/vyei4/SGdrRFwRbo7ajdfNkVvzf8wWgJ6sNZ/S/wtivckbnS8fnkp8uO36ErGk37kuMTzbGWV0t+/yVxn06MjmI927YiRfrQhK9G1GvkRpotjkIFoKxXnhfotqOc4RZa5Vk9FD4kde9jnjSQL5cE0cjJZd2cfyBfRzaDrpD7+OgrIaxr5hFupF7jNmwSk0sXOzC66czUKWUTaObm9U6FeiV8mjbi/SeIcWs84MXzHx3PMKpGzaxpSGeVRyymtcFXovcL1mlQGYu65o1y8zRxtILJbVc6SJHzd40o6PIAANmNE9GrwEapYLEgQ1G8CjeUwxY8Pir+w+vHN4zY1DvyTcWKZtuerKk97P9Zi+onr54TO9Bg3rff8+aLcLunfvXrFg5o2pgQecufYoGj5ty1cYX8jKn5HeZNvna2wZfP7/2yvE9ysf2GDV+xeLzfWD/WA2rGIT962vo27lM/i8eF8ncDHLZ8SN/bjdueisxfnRn+/HDifHJb7e/z5LE+Jsf6DIK4yLWRKDeKSMHSTQXZTQrgoduKclhVlaryBHmMXUPN4f9uVhcG4Y3w5LCozdSYk6cMlXgZWdsFekxET/sIDCXX2InKXi9+gFTBUaXVZHcZHPmWvQ4npqEZ5tE5KiczJq+vW41LR3hRqdc+HQ6drs0kbQgO4WqxK10KVf5sGwET1iT/eXDJ9kYHsZKRSlopDuy+UuLdfOwcDG74VzrW7cvf/iJvJ07qalqxum9H8ZK6cjr7p42cm2d9nFj36OPbtxx823Tnn/9lU/3c/u5kRuWad/Q4ONRi1HI++EJ7ddvh2ndkovqO6ZTsvT2Z+6Pl/Qe238S6D9P82L9K9C/v25/6SC2L6x+k+3vALYvVz1DLjs+t+flx4/83m6c7bs+Pvk8G7/wVxDGUezzrxv29zr2+Skw/rd243O1r9jnj4CddbQbP6JtYON/h89/z+7/umF/NzCcPAfPKAIfKB3s/gDj5JVsgTXGs3ykjj8zgBUyJD1CZpwzgeeONPN2jzeVRQ3zs/FEiYDY7kSJQBlXYAK1XVDmZ4ocT5gI5VxUAzQn9pepT/YTqo5pv3T9rXZW0UMTvuz69uOP/fHlyfOTXt3V9Mrr219uph99Q/k+vTjqevWJa9ZWlg/vN2T5iAWPaFO/1U5r71Ph1L7jZ35e+8xbOh1ZLRWTq+G6XF1I0FcoZ3Sp0ffpyOXH506+/PgRW7txdn99/Og/2o8fToxPtunyOYNKQkhYD1dOEgAZxU4f0dESP+TBVwLOjx7EEE4qrnCzRUf07jCLWxiHPiQgeNtpFzP45tgJHXfrv7ntNTXaWwxnc/8aN64bO4OCh3l9LpQLky624UyNxyuMEwbc2WbAnW0GXJUwCwkm3MQ7kyzuuAlXRXYeVJsR322xJblNl9rweHYHy7+YDS/zBtjBBnF/FavAmm4bM2jSTE37eufc2gGjFkyq5rIaHm4+vHL0g81vDNALwiYtLFv+0G9YEtYwq8f8x84evY07VP97bF3N+S8OzEP6s3oUtl91+v4+q+/LpeNzGy8/fsTVbpztoz4+2Rhn9QPs8yP1+3yh+5msJo3VtWaTcQZ1k416LlaKbmal6GZqLWQBj2C8ulXlfGFW34qFiTYQqpw4wU2oD9NksKBI4YxkkDOTLUkS4nVpsvm/LUwbZzbP1i4uTNt6aKfmtRBtwe8HLl+a9sHZxBrZ2vU1Tr63Xa2m0Kt9/zX33xds6tWurB/0wk9i1PQm0CcLz+Ng9W5OgI8sGpQMFyYWz4sDygxbS7PVwSrerdbEGQ8+HyuhxogQYn7MwKXGM3CMYVOxP4LHkLxTZgdSOZw6hLDKKvGxAgYlLYEq23liotFIGi6TEVneBUgxXH0z9/fYLG5S7FFudcwxZLzeSppCTdN6V07Xzmng+tMb6SrZ8NIk+iAdpb2h7XILv0iaymTutDkLbHI2+DoR8giJZqBNDkTwZEeWJtIrTZiJ7hpuLnJm4HqLUBS7tT/tscA44rGIdZViAbkd+KQUjXAQ15vB1quKAKiUYnfUIuEZVnjimMeLnJMLGlrxso94UhnUUoMF8NrJOFECpdMfcAcv7QXAXrVLizVNwUTN5iNHy6fT4MG/xkTujajeJLDx87KeRx7Tyzh37d63o/kwP4hbtXXNhl269N6/kgawceC771jjwLIld67QKzv/9d0XZ39/7NUTfyYkgY19CWw8+cKf0ZehhcLH/CwxCBq0kJ1raIkkQpR65QIoTYtQiOUJRBV0fBIPUfoDvhCeQUILK1d2bOi7q/9t46bOEj6WropeNf+gNGHy7FF6XvUW4VM+T1zCYuFVhIXARaaeefH/PhJO/0MknN4yf+zY+fgzbHBl5eDqnpWDTcroOXNHjb311rF9Bg/uUzV4CKw3DeZywvQWSUGLbGQZMS/LWt8jeGoYVVL107AkdvQVlsg7pRamShwpyBqsRchvxRmxWhbKqpYD+i5H9F1m2VUzTbNNHtFlWKecqoziSnmINHlobnVldkV20ZVu4dMZi8M56Z0HXnvrbXmlqR36XU/+n89n/P/13RqO8LvYd/9TbgS/UMOPZF9gnzf/Lz5vjn8+gz9EHaxfMkvfs2aLcfKlVT9u1M/aJeOHSYmcOZSRPa6wd2Y/+xz+xEzqv3GCdtSo44rfy5y4FzHupZ9Jjf0H1rZ7BThzRkaVjMdR8YfG0NBsLx6kCfLUVzuLZ3GCJH1CCs5fwfQx3JsbxOYpY3d1PIetTxaUUzxvDfNF9w3z1pLfaH82G1W77ReR92+roV1zGjr1yeyT1G5d3vnUdWOD9mHjRXMwEykxB3vEWCRod1Y7zCdy5xiJdvr1EmK7CeZgkS46lSvCXsU2KrTCw2915jZ0aCNHAy1q9N6pnbneoAs3i9Hlc4MulHwPnJXGbwb5L0bpxxNmHUKh8RI/mFz0ExcM6i/xc1Hbyfr3wwcOHF4zYEANd/qGG0fXXjdGjw1tuXDaBFwk5WOMXwIHirYw/SbzH+pn1JJF9A0Wqw4SdlJqosMSK54w6GsirC2ccV37fG+7RC/WxMF99l18H4UL461gDW33oXifsotj4c9dFPcmVGuGjapg/a4kSCPwN184uvVE/FwVjqRwg7g1pv3EBmtqIHr3MahmMaLaRRYKJSwqRyxWvRTCOFFS/m9OlPTET5RMajtRUuFk+LPtXElfqDQvWIrHjqbQR8bcdVe99g4ttYhZfM8ruX6xY9U//1z9+T3jHSWMroMAy9WZjpFO5DHjbM8gADJ7vFCL0AK7sxBrzwjo1oxws1lkA/6IajZjZJEqhXhqrdIprKaB4fVmhsPRNA7nm5aB5dismpAjrAoIT+LDxjxLSTSNLSnND0vqjBYpiEeB5pYrRFZC5YmqLnu8CDuSX1oWKo24mTVmpRPYiWv2eRGnoMI2OvT4QTsEYcfeApr9Sd3awQX3rNj1TUd6RuMEgR7S+mX+fe/DK4evvPobraUTJ9XkD26soRIN53SoHXD+nzWTknv7az7+tffonBSaTB2wfzbuW1OAyWAyVrKxWLfVEWHHz+MWGTUBuEUWlyccDsePajXJ/+HcBRRV5LFkmdXeY62gS9bTeHhQUZPN4fahq6hrTkyQUTmSxk6JKQvx8D8g2zjbp7V00aLPv1hUK5i/HvS5KJgmVVfHFnFL4Of92BZudKyEPnA89jQ39i1tkl5PuV0Ica3/g54Gbwn9I6OvvUKoQL6WAQEKFecP4w+T0wxwmFaLWSCnA5l8DuEaE+OL240PbRs3nUmMF5CBOI7fE44l3v/uMu8Pxff/DzU4YCwAAHjaY2BkYGBglJwVJvDkYTy/zVcGeQ4GEDjNtsQJRv/b8o+NfR17MZDLwcAEEgUAWPgMBAB42mNgZGDg6P27Akgy/Nvybyf7OgagCAp4BwCfSgdRAHjabZNBaBNBGIXfzvy7kdqDB0GkLCKeQihBSilFcisSQgkSevBQeihBqlIkhBCkiATpoRQREXoqOZRQSpCQQ1liDkoIVXoIOeQqKnjIweJRpISub8ZEYunCx5udmX925r1Z6aAFPqpKrgLOCSqqh003hjl5jYpXQM49xIazhU01jQxJyBrWOPbEaWBBvcGy08eeauI6+/LkE8mRFRIjr8gLsk6e2jrOJ4umPUKvYD5yjXUdwBV05TdK7j71EeG7e8z3FrqKbec0TIoZm0LX63PsiOqjJLWhcp4sc93bmGDNeykDkVuYkTQg82SX53iJmtkzdYbfv69T4UDKzpYksCptBLqDIrUoWRTVA/gSx7Q0EDhdHDjdsKy/2nYQuYLA9Evdzg9MjfZZ38SSqtGTBqr6Lc90jBt6gDnT1nV+v0cfl5wBNWnOP/R+n+0eSZPn1j/OkZs8U9m55x0gyzXTuoCMraH3pk8Qnup1bNu+OmZJ1J7lCIGbQM76XUGM/YvqO+6yPume4A65TKL0PmV8vwivEJ6ZLGwOYygJW8ziA/Ub1XWbiI9yOA/3VTRqshjHZsHMpErfjO8X4LWxarPI/g8z+EL/H1M/kh+yg8K/HM5j7phRZjGOycJmTbVZxlGK7HCe2VfZiZE8mdLveH/yzG2oaoPzP5PEX/CT+oz6kGPMZIQAmUvEicK3tPm/8C4ZNLCgFfr0bc/UqkneiUkk8evs0KzNrMz/lHI7mLD753dklveQeLvw4f8BFcbwfAAAAHjaY2Bg0IHCAoZFjG1MYkwbmN2YU5j7mHcw32KRYbFjiWFpYVnE8oFVhbWE9RmbBdsSdhF2C/YdHAYcaRyLOLZx3OB4wxnDxcRlxbWI6x23HncW9wIePh43nhSeSTwneN7x2vE28d7ik+Fr4LvGb8efx7+K/4rAOUEGQT3BGMEOwWWClwRfCDEIaQnNE+YQ9hHeIiIhkiOqIVoiukb0m5iBmJfYNrE/4l7iayR4JHwkNkgKSIZJNkiZSWVIrZG6JW0mHSC9RvqV9CsZDZkemU+yGbJnZN/Jdckdk4+SPyX/RkFEwUjhlsInRStFN8Upit+UFJSKlLYo7VP6pCylnKDcojxFeYnyFhUdFQsVF5UAlRiVDJUSlRMqV1QeqLxR+aHKoiqgKqOqoWqiOkN1ieoG1T2qJ1SvqD5QY1KrUetQm6K2QG2N2g51BvUe9RnqS9Q3qO9RP6F+RaNDY4rGAo01Gjs0jmhc0Lij8ULji2aMZoZmiWaDZo/mDM0lmk+0IrRStAq0arQ6tKZo/dJm01bRnqdjpeOmU6GzT5cPB9TR9dLN0G3QnaG7T/eR7hs9Pb08vQq9ZXrbgPCWPoO+ABAm6X8wCDHIMagyaDOYZLDIYBMAuICPRgAAAQAAAO8AQQAFAD8ABAACAAEAAgAWAAABAAGIAAMAAXjabZA9bsJAFIQ/AkSQgoKKIor2AGAFrkAETaQUIHoD5kdCGAwRgpqaE+QCuUJOkDoH4QzMrtfIRWTNat7bmXn7DFSYUaRQqgKJkPICdVUpf+CJs+dFalw8L/HCl+dlGvx4/sgzf57/subKG0vmwl44ETHFCKHqUGxCzIaj5lnVQl3Dt9DhlbbQ8qxNU92+1LF0K+UYuuKJ3PYMXX6siQEf6kVihoH6a3a839MPuhlra6vc/6M0Oe1Id4l6aa7RGwL3psyVeVo5z1Dn0uVkM4xmhq4zd67Ivzb9E2PtblQt3Ea9u2fAlk8lJfoi7Wt3z7vtzsENevtGCwAAAHjabdBVbFNxFMfx7+m6devcfcNd7r1t1w1vWYu7O4OtW5ENOoprGC6BkPAGwV6A4Br0AQhuwUngGR8PwCt03D9v/JKTT855ODk5WPib3wEC/C+NkRIsRGElmhhsxBKHnXgSSCSJZFJIJY10Msgki2xyyCWPfAoopIhimtGcFrSkFa1pQ1va0Z4OdKQTnelCVzR0DBw4cVGCm1LK6EZ3etCTXvSmDx689KUcH3760Z8BDGQQgxnCUIYxnBGMZBSjGcNYxjGeCUxkEpOZwlSmMZ0KsXCQBtZxld18YD3b2cIeDnNIotjMW9ayS6wSzTaJYSM3eC829nKEn/zgFwc4xl1uc5wZzGQHldynijvc4zEPeMgjPka+94wnPOUE1XxnJy95zgtq+MxXNjGLILOZyxxq2Ucd85lHiHrCLGAhi/jEYpayhGWsYDkX2c8qVrKaNXzhG5d4xUlOcZnXvOONxEqc2CVeEiRRkiRZUiRV0iRdMiST05zhPBe4yVnOcYsNHJUsrnGdK5ItOZLLVholT/KlQAqlyBauDWqaR1OWm3oNpUPpUpY1aWiaptSVhtKhdCpdyhKlW1mq/LfPY6qrvbpuDwSrw6Gqyor6GnNk+E1dSrfT6guH6poan7rH7zXviWgoHUrnH0vbn6wAAHjaRc07DoJAEAZgVnB5ibwWKjVou42JhRcQLGiMFST23oDKRGNiqWcZrIylh/EaOOKydvPNzD/zIM0FyFXJwdgUNSG3ss4oL6bglTmwLRancgyU7woFtCQFla/ASNKnohGq9HhrPUnvxkuAIvS9QB9BZwLmLzbqYhYOzYOAjbCWAgOEHf9AwBFvg2/eIS7mazWrsOPjXrCW9JD+QtJFehPJIdKtJMP22rH5X2O4EL4lIyQ7S8bIaN6xBMY/VolXuA==');
+}
+
#flicks-2012-snippet {
position: relative;
video {
- box-shadow: 0 1px 0 rgba(255,255,255,.8) inset,
- 0 -2px 0 rgba(0,0,0,.1) inset,
- 0 0 10px rgba(255,255,255,.5) inset,
- 0 0 0 1px rgba(0,0,0,.1),
- 0 2px 4px rgba(0,0,0,.2);
- margin: 8px auto;
- opacity: 1;
+ display: block;
width: 100%;
}
@@ -34,23 +37,137 @@
}
.video-overlay {
+ border: 2px solid rgba(0, 0, 0, 0);
+ box-shadow: 0 1px 0 rgba(255,255,255,.8) inset,
+ 0 -2px 0 rgba(0,0,0,.1) inset,
+ 0 0 10px rgba(255,255,255,.5) inset,
+ 0 0 0 1px rgba(0,0,0,.1),
+ 0 2px 4px rgba(0,0,0,.2);
+ margin: 8px auto;
+ -moz-transition: 400ms ease-in-out;
position: relative;
+ width: 466px;
&.hidden {
- height: 1px;
+ height: 0;
margin: 0;
- -moz-transition: 400ms ease-in-out;
opacity: 0;
- width: 1px;
+ width: 0;
+ }
+
+ .close, .share {
+ display: none;
+ z-index: 100;
+ }
+
+ &:hover {
+ border: 2px solid @green;
+ .close {
+ display: block;
+ }
+ }
+
+ &.started:hover .share {
+ display: block;
+ }
+
+ &.started.share-visible:hover .share {
+ display: none;
+ }
+
+ .close {
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAARCAMAAADjcdz2AAAAMFBMVEWZ0p2DyIm64L1pvG9wv3ZLr1PO6dDt+O70+/Wr2q/c8N5XtF5Bq0k8qEX///9FrE2p5o4TAAAAfUlEQVR42m2OSxLDIAxDSfgFkMz9bxvLndJNtbDwG1smbRe4Q8TeAlwJkF+ZAljTBtVbX3BQp5kl8nKbVRPDXKU8XgciQ6R3Lw0BEER9hUIPaYizcXcKPIUOTi9y/qH5puQFgVvPWoUHBfLUOpdbxifjLgzL/J7FsQA//QEvVFwNNcGOZFoAAAAASUVORK5CYII=') no-repeat;
+ cursor: pointer;
+ height: 17px;
+ position: absolute;
+ right: 0;
+ top: 0;
+ width: 16px;
}
- .controls {
- background: rgba(60, 60, 60, 0.5);
+ .share {
+ curosr: pointer;
+ height: 70px;
+ position: absolute;
+ top: 10%;
+ right: 10%;
+ width: 70px;
+ }
+
+ .shareScreen {
bottom: 0;
- height: 25px;
+ color: @white;
+ display: none;
+ font: 16px Open Sans Light, sans-serif;
left: 0;
position: absolute;
- width: 100%;
+ right: 0;
+ text-align: center;
+ top: 0;
+
+ .shareBox {
+ margin: 20px auto;
+ width: 300px;
+
+ .external {
+ color: @blue;
+ display: block;
+ font-size: 22px;
+ margin: 0 auto 20px;
+ }
+
+ .prompt {
+ display: block;
+ margin: 0 auto 10px;
+ }
+
+ .social {
+ display: block;
+ margin: 0 auto 10px;
+
+ a {
+ display: inline-block;
+ height: 48px;
+ padding: 0;
+ width: 48px;
+ }
+
+ .twitter {
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAwFBMVEVKhod6qKl3paZJhodmm5wAAACdzc6Xycq73t+h0NF/ubqBu72Ux8i029zL5eiRxcZ4tbZ8t7h9ubqazM2Nw8R2srSk0tOp1daez9Cm1NWIv8B0sbJzsLFyr7Ds+vtwrq9LhoeCu7yZxcZxrq9jmZmh0tNzoqK/4OKFvb6LwcL1/P2t2Nnh9/lsrLP8/v5qnZ1dkpP///9trK3j+Pra8/Wq19jn+ftUjI1rqqt9qqv3/f7z/P35/f7w+/x2pKRGgoIdQA8DAAAABnRSTlOzs9zccwBJnPTOAAADeklEQVR4Xo1Wx5bjSAzTdNtVyjk759w5Tdz//6sFWNbr2R0dBiRRJEE8+WhrOBzcbLfbXwgwIL1pSCbMeDMYDq3hl6/LwN7tkCwh2yZJx55FOi2/fhlag1+nIKiq1+rEIIFJppNEvYIDu9oOrJtlgPG16opM6hojgRuEvbyxtsFrU1VN0/ynKnnI0l8P8JWttbXLqiqxA5efheRZ2ZQER1DZ2Pf4Qgk3CqN0cmNmg+taONha98Gm2WycBtk0mXe5XLys2aDfMEt55UJugnsYSqcsHQdUai88Ph5DL3N+A2UyYQybGiHwj4/E0UePpWyduqbOBInBcZSzqRU+Gj4ahNg4ChsIDFWDFeNEg8Jc12D12KHGCqEQhLwy03CqVVbXGYVPA0eQefhmKuNLQ6WUynSmVabuOiilNbbKvJKaqWFYV1pnDIx3dz8k7y6/IY0o4ShDVTCc0DCx+NGDnzsvgsSkYW2tG9/XvtY+8K0X04OImklDJfea/O3YGzuoOCE3MJRRFPk+Mzoev/fEcSqiD+IXHkqfjoj8vR9TnpsqYXCiKGfA8LMfIaQcAJUP+AI6LIh+w1Tn1OXM4Rfy/MDA02d4CzMoBNnBFxS7XFzTDmYhTPHQggQKBgcj0bafBjO3hjudFzQoDkaYvl2Dt1KdDRAWA6d9u0e+dUCPWbCXokzKxEBZtHNncMVxPUK/ACHlC+9qjxkFCp+f3yTaBWYUTSIxuFLv1sMSAydE8HxFOE68xcLlWmwis9f4goaAcL2FV9JwRp5DnV6uKJKF53m8AOl3GFwX33KJ9vwnXoI0gQwDb5YwLJMkcRMXmST2uc/Sut2FGDQ7rhCHlz7HDjo8rAgGP40RzCRN63MfoIkex2KI4yROJAGnz5AAPDKGHIYC4H0RF+rPX7XjPpabHIZIWlyDqCT2/ywvLQWoyMO7Nc/j0SgexbTwZWZBSJM5DxZc4ohEw6GYTJATfIbFhyDz6VRiPGnnMIxGo9VoNF5N+KxWaFZ4sCCMKMoYIg3tbDyejGczPGjAbMAAiNNnN97TMH56epogJyA+bEwr646prBYwJMVs9jSbkRhsWJIyyYhAU7hz6/Y+nX08fSBZbNh1syQ210jXt9ZgPkoK9KIw0Zijztsps0lazAfW0Jqv49RLU9cD0LBNyZiklS2zWM9xjr8/t//8JW7x9+dfmdoezGPlkpYAAAAASUVORK5CYII=') no-repeat;
+ }
+
+ .facebook {
+ background: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAwFBMVEVQYoc9T3VGV35JXIYAAABvjLpheqtRa6Roh7hfd6pYc6pkfrNTbqZbdahddqk/UHRzkb5fdqBMaKJIZJ9CXppfeKtherBXcqldd63I0+1WcKhEX5pBXZg7TG96mMNmgLVOaaJGYp1fea9FVnljfLJRaJNacqfd5PRHWHzo7fhKZp86VIrBzuvQ2vA/W5YsP2f4+f18msSKnMNYebLi6PZGXo/8/f5PcK1FYZyir8s0Rm3X4POst89bdazw8/r2+PztHUWzAAAABXRSTlPC8N+OAPQNbGUAAAMiSURBVHhejVbXjutYDPMkca/pvffp9fa7+/9/tSR1DGQCLDDUkUSJoh+DeK1Ws7Hdbk8IVEBc2CoVtm80Wy2v5Z3a1cvLy0JpZbFgEQNXcvLbJ5w3T37lL78Ef+Gfml6jXS3T5TKtE1XFSC2hEot2w9tW0S5Nd7vdp0zVWMWRmiJ/620XlJGsF5lq45DWn1jAUA1AkIMBqxogsuuH+w8DVhSrrVdWm8Fmw8QOBU2FuWr/fPhm2NhNVcKgG7snk0tY/dGtoJUzbEYIwchoZDzRvcPGljKMRn9HTBaFQ/D8/A1P8exUHwb/r91ilBEw+5/nC4zM4QwJH5EkejaO/70ABSQNkQ6T4YVhKOZOz6/6gCQa5tFwmCjQ4VNT/mN4Ncm2EQ3JcJJMJliyTbifMGtDkkDTgxjNYcBVhiljR7ChDifOADbEPkOZZDLoCnkBarVBdsnOsMwAbsMsC9GFO+BsuCM+7IaGX2kWhmEWWlWBcL7CMYOGXNKArsjksXZtuLdPhctfMKxWGFaEtRD9/P45fpoc7mAYkAvumu39Cq9O3sDw1ll1OuAdCwDl2uDjgniT4bZD3NaN87Uhg0BJBjKDsRpHwyfNDED3touHBMhYnEEqZxYYnt666+56jWNUFTS94/E34ihOCc8M6/WPNfIHEpVY6/02SGJQfHvynr5Lt1WNKeXaAC6Zxu8yTBlT+NnVOE2dAaIpFGWYzXDQmwFTMGQPI+LBgA1lVFzIgN6b9fBAyJkcnaEHcKtqBuLxccZgISd1Boo6YMrwSGC4hjOIm26G7t3/YPyAGD98EtZPXlkFQdAHAnbHWPpjg+ZaqUoa4jjux0E/joMgxgDGGjtDgIEpSb98/aKIiz5MqIUKp6JwhgKyliwyxODaxkw2APL4XmGqCbUhzjHkanleINDi4t4AUZ+insMw9/MCyHFJqNrCGaQhJckQHw6HAq9AYSMhrQ0mmuLPvXI5yPMDPwABKaIEJw4UoZHsorl3s49sOCBVBZv1aHIR7W+8ZhlEA3ApajoXsalW8k0UlE2v1Sj3afQlDPZlo8W/PzfzL+IGf3/+A034C8MA+es7AAAAAElFTkSuQmCC') no-repeat;
+ }
+ }
+
+ .link {
+ background: transparent;
+ border: 1px inset #000;
+ border-radius: 2px;
+ color: @white;
+ display: block;
+ font: 13px Verdana, sans-serif;
+ margin: 0 auto 20px;
+ padding: 4px;
+ width: 200px;
+ }
+
+ .resume {
+ background: transparent;
+ border: none;
+ color: @white;
+ cursor: pointer;
+ display: block;
+ font-style: italic;
+ margin: 0 auto;
+ }
+ }
+ }
+
+ &.share-visible .shareScreen {
+ background-color: rgba(32,32,32,0.85);
+ display: block;
}
}
}

0 comments on commit 2060e74

Please sign in to comment.