/*!
 * Copyright (c) 2009 Simo Kinnunen.
 * Licensed under the MIT license.
 *
 * @version ${Version}
 */

var Cufon = (function() {

	var api = function() {
		return api.replace.apply(null, arguments);
	};

	var DOM = api.DOM = {

		ready: (function() {

			var complete = false, readyStatus = { loaded: 1, complete: 1 };

			var queue = [], perform = function() {
				if (complete) return;
				complete = true;
				for (var fn; fn = queue.shift(); fn());
			};

			// Gecko, Opera, WebKit r26101+

			if (document.addEventListener) {
				document.addEventListener('DOMContentLoaded', perform, false);
				window.addEventListener('pageshow', perform, false); // For cached Gecko pages
			}

			// Old WebKit, Internet Explorer

			if (!window.opera && document.readyState) (function() {
				readyStatus[document.readyState] ? perform() : setTimeout(arguments.callee, 10);
			})();

			// Internet Explorer

			if (document.readyState && document.createStyleSheet) (function() {
				try {
					document.body.doScroll('left');
					perform();
				}
				catch (e) {
					setTimeout(arguments.callee, 1);
				}
			})();

			addEvent(window, 'load', perform); // Fallback

			return function(listener) {
				if (!arguments.length) perform();
				else complete ? listener() : queue.push(listener);
			};

		})(),

		root: function() {
			return document.documentElement || document.body;
		}

	};

	var CSS = api.CSS = {

		Size: function(value, base) {

			this.value = parseFloat(value);
			this.unit = String(value).match(/[a-z%]*$/)[0] || 'px';

			this.convert = function(value) {
				return value / base * this.value;
			};

			this.convertFrom = function(value) {
				return value / this.value * base;
			};

			this.toString = function() {
				return this.value + this.unit;
			};

		},

		addClass: function(el, className) {
			var current = el.className;
			el.className = current + (current && ' ') + className;
			return el;
		},

		color: cached(function(value) {
			var parsed = {};
			parsed.color = value.replace(/^rgba\((.*?),\s*([\d.]+)\)/, function($0, $1, $2) {
				parsed.opacity = parseFloat($2);
				return 'rgb(' + $1 + ')';
			});
			return parsed;
		}),

		// has no direct CSS equivalent.
		// @see http://msdn.microsoft.com/en-us/library/system.windows.fontstretches.aspx
		fontStretch: cached(function(value) {
			if (typeof value == 'number') return value;
			if (/%$/.test(value)) return parseFloat(value) / 100;
			return {
				'ultra-condensed': 0.5,
				'extra-condensed': 0.625,
				condensed: 0.75,
				'semi-condensed': 0.875,
				'semi-expanded': 1.125,
				expanded: 1.25,
				'extra-expanded': 1.5,
				'ultra-expanded': 2
			}[value] || 1;
		}),

		getStyle: function(el) {
			var view = document.defaultView;
			if (view && view.getComputedStyle) return new Style(view.getComputedStyle(el, null));
			if (el.currentStyle) return new Style(el.currentStyle);
			return new Style(el.style);
		},

		gradient: cached(function(value) {
			var gradient = {
				id: value,
				type: value.match(/^-([a-z]+)-gradient\(/)[1],
				stops: []
			}, colors = value.substr(value.indexOf('(')).match(/([\d.]+=)?(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)/ig);
			for (var i = 0, l = colors.length, stop; i < l; ++i) {
				stop = colors[i].split('=', 2).reverse();
				gradient.stops.push([ stop[1] || i / (l - 1), stop[0] ]);
			}
			return gradient;
		}),

		quotedList: cached(function(value) {
			// doesn't work properly with empty quoted strings (""), but
			// it's not worth the extra code.
			var list = [], re = /\s*((["'])([\s\S]*?[^\\])\2|[^,]+)\s*/g, match;
			while (match = re.exec(value)) list.push(match[3] || match[1]);
			return list;
		}),

		recognizesMedia: cached(function(media) {
			var el = document.createElement('style'), sheet, container, supported;
			el.type = 'text/css';
			el.media = media;
			try { // this is cached anyway
				el.appendChild(document.createTextNode('/**/'));
			} catch (e) {}
			container = elementsByTagName('head')[0];
			container.insertBefore(el, container.firstChild);
			sheet = (el.sheet || el.styleSheet);
			supported = sheet && !sheet.disabled;
			container.removeChild(el);
			return supported;
		}),

		removeClass: function(el, className) {
			var re = RegExp('(?:^|\\s+)' + className +  '(?=\\s|$)', 'g');
			el.className = el.className.replace(re, '');
			return el;
		},

		supports: function(property, value) {
			var checker = document.createElement('span').style;
			if (checker[property] === undefined) return false;
			checker[property] = value;
			return checker[property] === value;
		},

		textAlign: function(word, style, position, wordCount) {
			if (style.get('textAlign') == 'right') {
				if (position > 0) word = ' ' + word;
			}
			else if (position < wordCount - 1) word += ' ';
			return word;
		},

		textShadow: cached(function(value) {
			if (value == 'none') return null;
			var shadows = [], currentShadow = {}, result, offCount = 0;
			var re = /(#[a-f0-9]+|[a-z]+\(.*?\)|[a-z]+)|(-?[\d.]+[a-z%]*)|,/ig;
			while (result = re.exec(value)) {
				if (result[0] == ',') {
					shadows.push(currentShadow);
					currentShadow = {};
					offCount = 0;
				}
				else if (result[1]) {
					currentShadow.color = result[1];
				}
				else {
					currentShadow[[ 'offX', 'offY', 'blur' ][offCount++]] = result[2];
				}
			}
			shadows.push(currentShadow);
			return shadows;
		}),

		textTransform: (function() {
			var map = {
				uppercase: function(s) {
					return s.toUpperCase();
				},
				lowercase: function(s) {
					return s.toLowerCase();
				},
				capitalize: function(s) {
					return s.replace(/\b./g, function($0) {
						return $0.toUpperCase();
					});
				}
			};
			return function(text, style) {
				var transform = map[style.get('textTransform')];
				return transform ? transform(text) : text;
			};
		})(),

		whiteSpace: (function() {
			var ignore = {
				inline: 1,
				'inline-block': 1,
				'run-in': 1
			};
			var wsStart = /^\s+/, wsEnd = /\s+$/;
			return function(text, style, node, previousElement) {
				if (previousElement) {
					if (previousElement.nodeName.toLowerCase() == 'br') {
						text = text.replace(wsStart, '');
					}
				}
				if (ignore[style.get('display')]) return text;
				if (!node.previousSibling) text = text.replace(wsStart, '');
				if (!node.nextSibling) text = text.replace(wsEnd, '');
				return text;
			};
		})()

	};

	CSS.ready = (function() {

		// don't do anything in Safari 2 (it doesn't recognize any media type)
		var complete = !CSS.recognizesMedia('all'), hasLayout = false;

		var queue = [], perform = function() {
			complete = true;
			for (var fn; fn = queue.shift(); fn());
		};

		var links = elementsByTagName('link'), styles = elementsByTagName('style');

		function isContainerReady(el) {
			return el.disabled || isSheetReady(el.sheet, el.media || 'screen');
		}

		function isSheetReady(sheet, media) {
			// in Opera sheet.disabled is true when it's still loading,
			// even though link.disabled is false. they stay in sync if
			// set manually.
			if (!CSS.recognizesMedia(media || 'all')) return true;
			if (!sheet || sheet.disabled) return false;
			try {
				var rules = sheet.cssRules, rule;
				if (rules) {
					// needed for Safari 3 and Chrome 1.0.
					// in standards-conforming browsers cssRules contains @-rules.
					// Chrome 1.0 weirdness: rules[<number larger than .length - 1>]
					// returns the last rule, so a for loop is the only option.
					search: for (var i = 0, l = rules.length; rule = rules[i], i < l; ++i) {
						switch (rule.type) {
							case 2: // @charset
								break;
							case 3: // @import
								if (!isSheetReady(rule.styleSheet, rule.media.mediaText)) return false;
								break;
							default:
								// only @charset can precede @import
								break search;
						}
					}
				}
			}
			catch (e) {} // probably a style sheet from another domain
			return true;
		}

		function allStylesLoaded() {
			// Internet Explorer's style sheet model, there's no need to do anything
			if (document.createStyleSheet) return true;
			// standards-compliant browsers
			var el, i;
			for (i = 0; el = links[i]; ++i) {
				if (el.rel.toLowerCase() == 'stylesheet' && !isContainerReady(el)) return false;
			}
			for (i = 0; el = styles[i]; ++i) {
				if (!isContainerReady(el)) return false;
			}
			return true;
		}

		DOM.ready(function() {
			// getComputedStyle returns null in Gecko if used in an iframe with display: none
			if (!hasLayout) hasLayout = CSS.getStyle(document.body).isUsable();
			if (complete || (hasLayout && allStylesLoaded())) perform();
			else setTimeout(arguments.callee, 10);
		});

		return function(listener) {
			if (complete) listener();
			else queue.push(listener);
		};

	})();

	function Font(data) {

		var face = this.face = data.face, wordSeparators = {
			'\u0020': 1,
			'\u00a0': 1,
			'\u3000': 1
		};

		this.glyphs = data.glyphs;
		this.w = data.w;
		this.baseSize = parseInt(face['units-per-em'], 10);

		this.family = face['font-family'].toLowerCase();
		this.weight = face['font-weight'];
		this.style = face['font-style'] || 'normal';

		this.viewBox = (function () {
			var parts = face.bbox.split(/\s+/);
			var box = {
				minX: parseInt(parts[0], 10),
				minY: parseInt(parts[1], 10),
				maxX: parseInt(parts[2], 10),
				maxY: parseInt(parts[3], 10)
			};
			box.width = box.maxX - box.minX;
			box.height = box.maxY - box.minY;
			box.toString = function() {
				return [ this.minX, this.minY, this.width, this.height ].join(' ');
			};
			return box;
		})();

		this.ascent = -parseInt(face.ascent, 10);
		this.descent = -parseInt(face.descent, 10);

		this.height = -this.ascent + this.descent;

		this.spacing = function(chars, letterSpacing, wordSpacing) {
			var glyphs = this.glyphs, glyph, kerning, k,
				jumps = [], width = 0,
				i = -1, j = -1, chr;
			while (chr = chars[++i]) {
				glyph = glyphs[chr] || this.missingGlyph;
				if (!glyph) continue;
				if (kerning) {
					width -= k = kerning[chr] || 0;
					jumps[j] -= k;
				}
				width += jumps[++j] = ~~(glyph.w || this.w) + letterSpacing + (wordSeparators[chr] ? wordSpacing : 0);
				kerning = glyph.k;
			}
			jumps.total = width;
			return jumps;
		};

	}

	function FontFamily() {

		var styles = {}, mapping = {
			oblique: 'italic',
			italic: 'oblique'
		};

		this.add = function(font) {
			(styles[font.style] || (styles[font.style] = {}))[font.weight] = font;
		};

		this.get = function(style, weight) {
			var weights = styles[style] || styles[mapping[style]]
				|| styles.normal || styles.italic || styles.oblique;
			if (!weights) return null;
			// we don't have to worry about "bolder" and "lighter"
			// because IE's currentStyle returns a numeric value for it,
			// and other browsers use the computed value anyway
			weight = {
				normal: 400,
				bold: 700
			}[weight] || parseInt(weight, 10);
			if (weights[weight]) return weights[weight];
			// http://www.w3.org/TR/CSS21/fonts.html#propdef-font-weight
			// Gecko uses x99/x01 for lighter/bolder
			var up = {
				1: 1,
				99: 0
			}[weight % 100], alts = [], min, max;
			if (up === undefined) up = weight > 400;
			if (weight == 500) weight = 400;
			for (var alt in weights) {
				if (!hasOwnProperty(weights, alt)) continue;
				alt = parseInt(alt, 10);
				if (!min || alt < min) min = alt;
				if (!max || alt > max) max = alt;
				alts.push(alt);
			}
			if (weight < min) weight = min;
			if (weight > max) weight = max;
			alts.sort(function(a, b) {
				return (up
					? (a >= weight && b >= weight) ? a < b : a > b
					: (a <= weight && b <= weight) ? a > b : a < b) ? -1 : 1;
			});
			return weights[alts[0]];
		};

	}

	function HoverHandler() {

		function contains(node, anotherNode) {
			if (node.contains) return node.contains(anotherNode);
			return node.compareDocumentPosition(anotherNode) & 16;
		}

		function onOverOut(e) {
			var related = e.relatedTarget;
			if (!related || contains(this, related)) return;
			trigger(this, e.type == 'mouseover');
		}

		function onEnterLeave(e) {
			trigger(this, e.type == 'mouseenter');
		}

		function trigger(el, hoverState) {
			// A timeout is needed so that the event can actually "happen"
			// before replace is triggered. This ensures that styles are up
			// to date.
			setTimeout(function() {
				var options = sharedStorage.get(el).options;
				api.replace(el, hoverState ? merge(options, options.hover) : options, true);
			}, 10);
		}

		this.attach = function(el) {
			if (el.onmouseenter === undefined) {
				addEvent(el, 'mouseover', onOverOut);
				addEvent(el, 'mouseout', onOverOut);
			}
			else {
				addEvent(el, 'mouseenter', onEnterLeave);
				addEvent(el, 'mouseleave', onEnterLeave);
			}
		};

	}

	function ReplaceHistory() {

		var list = [], map = {};

		function filter(keys) {
			var values = [], key;
			for (var i = 0; key = keys[i]; ++i) values[i] = list[map[key]];
			return values;
		}

		this.add = function(key, args) {
			map[key] = list.push(args) - 1;
		};

		this.repeat = function() {
			var snapshot = arguments.length ? filter(arguments) : list, args;
			for (var i = 0; args = snapshot[i++];) api.replace(args[0], args[1], true);
		};

	}

	function Storage() {

		var map = {}, at = 0;

		function identify(el) {
			return el.cufid || (el.cufid = ++at);
		}

		this.get = function(el) {
			var id = identify(el);
			return map[id] || (map[id] = {});
		};

	}

	function Style(style) {

		var custom = {}, sizes = {};

		this.extend = function(styles) {
			for (var property in styles) {
				if (hasOwnProperty(styles, property)) custom[property] = styles[property];
			}
			return this;
		};

		this.get = function(property) {
			return custom[property] != undefined ? custom[property] : style[property];
		};

		this.getSize = function(property, base) {
			return sizes[property] || (sizes[property] = new CSS.Size(this.get(property), base));
		};

		this.isUsable = function() {
			return !!style;
		};

	}

	function addEvent(el, type, listener) {
		if (el.addEventListener) {
			el.addEventListener(type, listener, false);
		}
		else if (el.attachEvent) {
			el.attachEvent('on' + type, function() {
				return listener.call(el, window.event);
			});
		}
	}

	function attach(el, options) {
		var storage = sharedStorage.get(el);
		if (storage.options) return el;
		if (options.hover && options.hoverables[el.nodeName.toLowerCase()]) {
			hoverHandler.attach(el);
		}
		storage.options = options;
		return el;
	}

	function cached(fun) {
		var cache = {};
		return function(key) {
			if (!hasOwnProperty(cache, key)) cache[key] = fun.apply(null, arguments);
			return cache[key];
		};
	}

	function getFont(el, style) {
		var families = CSS.quotedList(style.get('fontFamily').toLowerCase()), family;
		for (var i = 0; family = families[i]; ++i) {
			if (fonts[family]) return fonts[family].get(style.get('fontStyle'), style.get('fontWeight'));
		}
		return null;
	}

	function elementsByTagName(query) {
		return document.getElementsByTagName(query);
	}

	function hasOwnProperty(obj, property) {
		return obj.hasOwnProperty(property);
	}

	function merge() {
		var merged = {}, arg, key;
		for (var i = 0, l = arguments.length; arg = arguments[i], i < l; ++i) {
			for (key in arg) {
				if (hasOwnProperty(arg, key)) merged[key] = arg[key];
			}
		}
		return merged;
	}

	function process(font, text, style, options, node, el) {
		var fragment = document.createDocumentFragment(), processed;
		if (text === '') return fragment;
		var separate = options.separate;
		var parts = text.split(separators[separate]), needsAligning = (separate == 'words');
		if (needsAligning && HAS_BROKEN_REGEXP) {
			// @todo figure out a better way to do this
			if (/^\s/.test(text)) parts.unshift('');
			if (/\s$/.test(text)) parts.push('');
		}
		for (var i = 0, l = parts.length; i < l; ++i) {
			processed = engines[options.engine](font,
				needsAligning ? CSS.textAlign(parts[i], style, i, l) : parts[i],
				style, options, node, el, i < l - 1);
			if (processed) fragment.appendChild(processed);
		}
		return fragment;
	}

	function replaceElement(el, options) {
		var name = el.nodeName.toLowerCase();
		if (options.ignore[name]) return;
		var replace = !options.textless[name];
		var style = CSS.getStyle(attach(el, options)).extend(options);
		var font = getFont(el, style), node, type, next, anchor, text, lastElement;
		if (!font) return;
		for (node = el.firstChild; node; node = next) {
			type = node.nodeType;
			next = node.nextSibling;
			if (replace && type == 3) {
				// Node.normalize() is broken in IE 6, 7, 8
				if (anchor) {
					anchor.appendData(node.data);
					el.removeChild(node);
				}
				else anchor = node;
				if (next) continue;
			}
			if (anchor) {
				el.replaceChild(process(font,
					CSS.whiteSpace(anchor.data, style, anchor, lastElement),
					style, options, node, el), anchor);
				anchor = null;
			}
			if (type == 1) {
				if (node.firstChild) {
					if (node.nodeName.toLowerCase() == 'cufon') {
						engines[options.engine](font, null, style, options, node, el);
					}
					else arguments.callee(node, options);
				}
				lastElement = node;
			}
		}
	}

	var HAS_BROKEN_REGEXP = ' '.split(/\s+/).length == 0;

	var sharedStorage = new Storage();
	var hoverHandler = new HoverHandler();
	var replaceHistory = new ReplaceHistory();
	var initialized = false;

	var engines = {}, fonts = {}, defaultOptions = {
		autoDetect: false,
		engine: null,
		//fontScale: 1,
		//fontScaling: false,
		forceHitArea: false,
		hover: false,
		hoverables: {
			a: true
		},
		ignore: {
			applet: 1,
			canvas: 1,
			col: 1,
			colgroup: 1,
			head: 1,
			iframe: 1,
			map: 1,
			optgroup: 1,
			option: 1,
			script: 1,
			select: 1,
			style: 1,
			textarea: 1,
			title: 1,
			pre: 1
		},
		printable: true,
		//rotation: 0,
		//selectable: false,
		selector: (
				window.Sizzle
			||	(window.jQuery && function(query) { return jQuery(query); }) // avoid noConflict issues
			||	(window.dojo && dojo.query)
			||	(window.Ext && Ext.query)
			||	(window.YAHOO && YAHOO.util && YAHOO.util.Selector && YAHOO.util.Selector.query)
			||	(window.$$ && function(query) { return $$(query); })
			||	(window.$ && function(query) { return $(query); })
			||	(document.querySelectorAll && function(query) { return document.querySelectorAll(query); })
			||	elementsByTagName
		),
		separate: 'words', // 'none' and 'characters' are also accepted
		textless: {
			dl: 1,
			html: 1,
			ol: 1,
			table: 1,
			tbody: 1,
			thead: 1,
			tfoot: 1,
			tr: 1,
			ul: 1
		},
		textShadow: 'none'
	};

	var separators = {
		// The first pattern may cause unicode characters above
		// code point 255 to be removed in Safari 3.0. Luckily enough
		// Safari 3.0 does not include non-breaking spaces in \s, so
		// we can just use a simple alternative pattern.
		words: /\s/.test('\u00a0') ? /[^\S\u00a0]+/ : /\s+/,
		characters: '',
		none: /^/
	};

	api.now = function() {
		DOM.ready();
		return api;
	};

	api.refresh = function() {
		replaceHistory.repeat.apply(replaceHistory, arguments);
		return api;
	};

	api.registerEngine = function(id, engine) {
		if (!engine) return api;
		engines[id] = engine;
		return api.set('engine', id);
	};

	api.registerFont = function(data) {
		if (!data) return api;
		var font = new Font(data), family = font.family;
		if (!fonts[family]) fonts[family] = new FontFamily();
		fonts[family].add(font);
		return api.set('fontFamily', '"' + family + '"');
	};

	api.replace = function(elements, options, ignoreHistory) {
		options = merge(defaultOptions, options);
		if (!options.engine) return api; // there's no browser support so we'll just stop here
		if (!initialized) {
			CSS.addClass(DOM.root(), 'cufon-active cufon-loading');
			CSS.ready(function() {
				// fires before any replace() calls, but it doesn't really matter
				CSS.addClass(CSS.removeClass(DOM.root(), 'cufon-loading'), 'cufon-ready');
			});
			initialized = true;
		}
		if (options.hover) options.forceHitArea = true;
		if (options.autoDetect) delete options.fontFamily;
		if (typeof options.textShadow == 'string') {
			options.textShadow = CSS.textShadow(options.textShadow);
		}
		if (typeof options.color == 'string' && /^-/.test(options.color)) {
			options.textGradient = CSS.gradient(options.color);
		}
		else delete options.textGradient;
		if (!ignoreHistory) replaceHistory.add(elements, arguments);
		if (elements.nodeType || typeof elements == 'string') elements = [ elements ];
		CSS.ready(function() {
			for (var i = 0, l = elements.length; i < l; ++i) {
				var el = elements[i];
				if (typeof el == 'string') api.replace(options.selector(el), options, true);
				else replaceElement(el, options);
			}
		});
		return api;
	};

	api.set = function(option, value) {
		defaultOptions[option] = value;
		return api;
	};

	return api;

})();

Cufon.registerEngine('vml', (function() {

	var ns = document.namespaces;
	if (!ns) return;
	ns.add('cvml', 'urn:schemas-microsoft-com:vml');
	ns = null;

	var check = document.createElement('cvml:shape');
	check.style.behavior = 'url(#default#VML)';
	if (!check.coordsize) return; // VML isn't supported
	check = null;

	var HAS_BROKEN_LINEHEIGHT = (document.documentMode || 0) < 8;

	document.write(('<style type="text/css">' +
		'cufoncanvas{text-indent:0;}' +
		'@media screen{' +
			'cvml\\:shape,cvml\\:rect,cvml\\:fill,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute;}' +
			'cufoncanvas{position:absolute;text-align:left;}' +
			'cufon{display:inline-block;position:relative;vertical-align:' +
			(HAS_BROKEN_LINEHEIGHT
				? 'middle'
				: 'text-bottom') +
			';}' +
			'cufon cufontext{position:absolute;left:-10000in;font-size:1px;}' +
			'a cufon{cursor:pointer}' + // ignore !important here
		'}' +
		'@media print{' +
			'cufon cufoncanvas{display:none;}' +
		'}' +
	'</style>').replace(/;/g, '!important;'));

	function getFontSizeInPixels(el, value) {
		return getSizeInPixels(el, /(?:em|ex|%)$|^[a-z-]+$/i.test(value) ? '1em' : value);
	}

	// Original by Dead Edwards.
	// Combined with getFontSizeInPixels it also works with relative units.
	function getSizeInPixels(el, value) {
		if (value === '0') return 0;
		if (/px$/i.test(value)) return parseFloat(value);
		var style = el.style.left, runtimeStyle = el.runtimeStyle.left;
		el.runtimeStyle.left = el.currentStyle.left;
		el.style.left = value.replace('%', 'em');
		var result = el.style.pixelLeft;
		el.style.left = style;
		el.runtimeStyle.left = runtimeStyle;
		return result;
	}

	function getSpacingValue(el, style, size, property) {
		var key = 'computed' + property, value = style[key];
		if (isNaN(value)) {
			value = style.get(property);
			style[key] = value = (value == 'normal') ? 0 : ~~size.convertFrom(getSizeInPixels(el, value));
		}
		return value;
	}

	var fills = {};

	function gradientFill(gradient) {
		var id = gradient.id;
		if (!fills[id]) {
			var stops = gradient.stops, fill = document.createElement('cvml:fill'), colors = [];
			fill.type = 'gradient';
			fill.angle = 180;
			fill.focus = '0';
			fill.method = 'sigma';
			fill.color = stops[0][1];
			for (var j = 1, k = stops.length - 1; j < k; ++j) {
				colors.push(stops[j][0] * 100 + '% ' + stops[j][1]);
			}
			fill.colors = colors.join(',');
			fill.color2 = stops[k][1];
			fills[id] = fill;
		}
		return fills[id];
	}

	return function(font, text, style, options, node, el, hasNext) {

		var redraw = (text === null);

		if (redraw) text = node.alt;

		var viewBox = font.viewBox;

		var size = style.computedFontSize || (style.computedFontSize = new Cufon.CSS.Size(getFontSizeInPixels(el, style.get('fontSize')) + 'px', font.baseSize));

		var wrapper, canvas;

		if (redraw) {
			wrapper = node;
			canvas = node.firstChild;
		}
		else {
			wrapper = document.createElement('cufon');
			wrapper.className = 'cufon cufon-vml';
			wrapper.alt = text;

			canvas = document.createElement('cufoncanvas');
			wrapper.appendChild(canvas);

			if (options.printable) {
				var print = document.createElement('cufontext');
				print.appendChild(document.createTextNode(text));
				wrapper.appendChild(print);
			}

			// ie6, for some reason, has trouble rendering the last VML element in the document.
			// we can work around this by injecting a dummy element where needed.
			// @todo find a better solution
			if (!hasNext) wrapper.appendChild(document.createElement('cvml:shape'));
		}

		var wStyle = wrapper.style;
		var cStyle = canvas.style;

		var height = size.convert(viewBox.height), roundedHeight = Math.ceil(height);
		var roundingFactor = roundedHeight / height;
		var stretchFactor = roundingFactor * Cufon.CSS.fontStretch(style.get('fontStretch'));
		var minX = viewBox.minX, minY = viewBox.minY;

		cStyle.height = roundedHeight;
		cStyle.top = Math.round(size.convert(minY - font.ascent));
		cStyle.left = Math.round(size.convert(minX));

		wStyle.height = size.convert(font.height) + 'px';

		var color = style.get('color');
		var chars = Cufon.CSS.textTransform(text, style).split('');

		var jumps = font.spacing(chars,
			getSpacingValue(el, style, size, 'letterSpacing'),
			getSpacingValue(el, style, size, 'wordSpacing')
		);

		if (!jumps.length) return null;

		var width = jumps.total;
		var fullWidth = -minX + width + (viewBox.width - jumps[jumps.length - 1]);

		var shapeWidth = size.convert(fullWidth * stretchFactor), roundedShapeWidth = Math.round(shapeWidth);

		var coordSize = fullWidth + ',' + viewBox.height, coordOrigin;
		var stretch = 'r' + coordSize + 'ns';

		var fill = options.textGradient && gradientFill(options.textGradient);

		var glyphs = font.glyphs, offsetX = 0;
		var shadows = options.textShadow;
		var i = -1, j = 0, chr;

		while (chr = chars[++i]) {

			var glyph = glyphs[chars[i]] || font.missingGlyph, shape;
			if (!glyph) continue;

			if (redraw) {
				// some glyphs may be missing so we can't use i
				shape = canvas.childNodes[j];
				while (shape.firstChild) shape.removeChild(shape.firstChild); // shadow, fill
			}
			else {
				shape = document.createElement('cvml:shape');
				canvas.appendChild(shape);
			}

			shape.stroked = 'f';
			shape.coordsize = coordSize;
			shape.coordorigin = coordOrigin = (minX - offsetX) + ',' + minY;
			shape.path = (glyph.d ? 'm' + glyph.d + 'xe' : '') + 'm' + coordOrigin + stretch;
			shape.fillcolor = color;

			if (fill) shape.appendChild(fill.cloneNode(false));

			// it's important to not set top/left or IE8 will grind to a halt
			var sStyle = shape.style;
			sStyle.width = roundedShapeWidth;
			sStyle.height = roundedHeight;

			if (shadows) {
				// due to the limitations of the VML shadow element there
				// can only be two visible shadows. opacity is shared
				// for all shadows.
				var shadow1 = shadows[0], shadow2 = shadows[1];
				var color1 = Cufon.CSS.color(shadow1.color), color2;
				var shadow = document.createElement('cvml:shadow');
				shadow.on = 't';
				shadow.color = color1.color;
				shadow.offset = shadow1.offX + ',' + shadow1.offY;
				if (shadow2) {
					color2 = Cufon.CSS.color(shadow2.color);
					shadow.type = 'double';
					shadow.color2 = color2.color;
					shadow.offset2 = shadow2.offX + ',' + shadow2.offY;
				}
				shadow.opacity = color1.opacity || (color2 && color2.opacity) || 1;
				shape.appendChild(shadow);
			}

			offsetX += jumps[j++];
		}

		// addresses flickering issues on :hover

		var cover = shape.nextSibling, coverFill, vStyle;

		if (options.forceHitArea) {

			if (!cover) {
				cover = document.createElement('cvml:rect');
				cover.stroked = 'f';
				cover.className = 'cufon-vml-cover';
				coverFill = document.createElement('cvml:fill');
				coverFill.opacity = 0;
				cover.appendChild(coverFill);
				canvas.appendChild(cover);
			}

			vStyle = cover.style;

			vStyle.width = roundedShapeWidth;
			vStyle.height = roundedHeight;

		}
		else if (cover) canvas.removeChild(cover);

		wStyle.width = Math.max(Math.ceil(size.convert(width * stretchFactor)), 0);

		if (HAS_BROKEN_LINEHEIGHT) {

			var yAdjust = style.computedYAdjust;

			if (yAdjust === undefined) {
				var lineHeight = style.get('lineHeight');
				if (lineHeight == 'normal') lineHeight = '1em';
				else if (!isNaN(lineHeight)) lineHeight += 'em'; // no unit
				style.computedYAdjust = yAdjust = 0.5 * (getSizeInPixels(el, lineHeight) - parseFloat(wStyle.height));
			}

			if (yAdjust) {
				wStyle.marginTop = Math.ceil(yAdjust) + 'px';
				wStyle.marginBottom = yAdjust + 'px';
			}

		}

		return wrapper;

	};

})());

Cufon.registerEngine('canvas', (function() {

	// Safari 2 doesn't support .apply() on native methods

	var check = document.createElement('canvas');
	if (!check || !check.getContext || !check.getContext.apply) return;
	check = null;

	var HAS_INLINE_BLOCK = Cufon.CSS.supports('display', 'inline-block');

	// Firefox 2 w/ non-strict doctype (almost standards mode)
	var HAS_BROKEN_LINEHEIGHT = !HAS_INLINE_BLOCK && (document.compatMode == 'BackCompat' || /frameset|transitional/i.test(document.doctype.publicId));

	var styleSheet = document.createElement('style');
	styleSheet.type = 'text/css';
	styleSheet.appendChild(document.createTextNode((
		'cufon{text-indent:0;}' +
		'@media screen,projection{' +
			'cufon{display:inline;display:inline-block;position:relative;vertical-align:middle;' +
			(HAS_BROKEN_LINEHEIGHT
				? ''
				: 'font-size:1px;line-height:1px;') +
			'}cufon cufontext{display:-moz-inline-box;display:inline-block;width:0;height:0;overflow:hidden;text-indent:-10000in;}' +
			(HAS_INLINE_BLOCK
				? 'cufon canvas{position:relative;}'
				: 'cufon canvas{position:absolute;}') +
		'}' +
		'@media print{' +
			'cufon{padding:0;}' + // Firefox 2
			'cufon canvas{display:none;}' +
		'}'
	).replace(/;/g, '!important;')));
	document.getElementsByTagName('head')[0].appendChild(styleSheet);

	function generateFromVML(path, context) {
		var atX = 0, atY = 0;
		var code = [], re = /([mrvxe])([^a-z]*)/g, match;
		generate: for (var i = 0; match = re.exec(path); ++i) {
			var c = match[2].split(',');
			switch (match[1]) {
				case 'v':
					code[i] = { m: 'bezierCurveTo', a: [ atX + ~~c[0], atY + ~~c[1], atX + ~~c[2], atY + ~~c[3], atX += ~~c[4], atY += ~~c[5] ] };
					break;
				case 'r':
					code[i] = { m: 'lineTo', a: [ atX += ~~c[0], atY += ~~c[1] ] };
					break;
				case 'm':
					code[i] = { m: 'moveTo', a: [ atX = ~~c[0], atY = ~~c[1] ] };
					break;
				case 'x':
					code[i] = { m: 'closePath' };
					break;
				case 'e':
					break generate;
			}
			context[code[i].m].apply(context, code[i].a);
		}
		return code;
	}

	function interpret(code, context) {
		for (var i = 0, l = code.length; i < l; ++i) {
			var line = code[i];
			context[line.m].apply(context, line.a);
		}
	}

	return function(font, text, style, options, node, el) {

		var redraw = (text === null);

		if (redraw) text = node.getAttribute('alt');

		var viewBox = font.viewBox;

		var size = style.getSize('fontSize', font.baseSize);

		var expandTop = 0, expandRight = 0, expandBottom = 0, expandLeft = 0;
		var shadows = options.textShadow, shadowOffsets = [];
		if (shadows) {
			for (var i = shadows.length; i--;) {
				var shadow = shadows[i];
				var x = size.convertFrom(parseFloat(shadow.offX));
				var y = size.convertFrom(parseFloat(shadow.offY));
				shadowOffsets[i] = [ x, y ];
				if (y < expandTop) expandTop = y;
				if (x > expandRight) expandRight = x;
				if (y > expandBottom) expandBottom = y;
				if (x < expandLeft) expandLeft = x;
			}
		}

		var chars = Cufon.CSS.textTransform(text, style).split('');

		var jumps = font.spacing(chars,
			~~size.convertFrom(parseFloat(style.get('letterSpacing')) || 0),
			~~size.convertFrom(parseFloat(style.get('wordSpacing')) || 0)
		);

		if (!jumps.length) return null; // there's nothing to render

		var width = jumps.total;

		expandRight += viewBox.width - jumps[jumps.length - 1];
		expandLeft += viewBox.minX;

		var wrapper, canvas;

		if (redraw) {
			wrapper = node;
			canvas = node.firstChild;
		}
		else {
			wrapper = document.createElement('cufon');
			wrapper.className = 'cufon cufon-canvas';
			wrapper.setAttribute('alt', text);

			canvas = document.createElement('canvas');
			wrapper.appendChild(canvas);

			if (options.printable) {
				var print = document.createElement('cufontext');
				print.appendChild(document.createTextNode(text));
				wrapper.appendChild(print);
			}
		}

		var wStyle = wrapper.style;
		var cStyle = canvas.style;

		var height = size.convert(viewBox.height);
		var roundedHeight = Math.ceil(height);
		var roundingFactor = roundedHeight / height;
		var stretchFactor = roundingFactor * Cufon.CSS.fontStretch(style.get('fontStretch'));
		var stretchedWidth = width * stretchFactor;

		var canvasWidth = Math.ceil(size.convert(stretchedWidth + expandRight - expandLeft));
		var canvasHeight = Math.ceil(size.convert(viewBox.height - expandTop + expandBottom));

		canvas.width = canvasWidth;
		canvas.height = canvasHeight;

		// needed for WebKit and full page zoom
		cStyle.width = canvasWidth + 'px';
		cStyle.height = canvasHeight + 'px';

		// minY has no part in canvas.height
		expandTop += viewBox.minY;

		cStyle.top = Math.round(size.convert(expandTop - font.ascent)) + 'px';
		cStyle.left = Math.round(size.convert(expandLeft)) + 'px';

		var wrapperWidth = Math.max(Math.ceil(size.convert(stretchedWidth)), 0) + 'px';

		if (HAS_INLINE_BLOCK) {
			wStyle.width = wrapperWidth;
			wStyle.height = size.convert(font.height) + 'px';
		}
		else {
			wStyle.paddingLeft = wrapperWidth;
			wStyle.paddingBottom = (size.convert(font.height) - 1) + 'px';
		}

		var g = canvas.getContext('2d'), scale = height / viewBox.height;

		// proper horizontal scaling is performed later
		g.scale(scale, scale * roundingFactor);
		g.translate(-expandLeft, -expandTop);
		g.save();

		function renderText() {
			var glyphs = font.glyphs, glyph, i = -1, j = -1, chr;
			g.scale(stretchFactor, 1);
			while (chr = chars[++i]) {
				var glyph = glyphs[chars[i]] || font.missingGlyph;
				if (!glyph) continue;
				if (glyph.d) {
					g.beginPath();
					if (glyph.code) interpret(glyph.code, g);
					else glyph.code = generateFromVML('m' + glyph.d, g);
					g.fill();
				}
				g.translate(jumps[++j], 0);
			}
			g.restore();
		}

		if (shadows) {
			for (var i = shadows.length; i--;) {
				var shadow = shadows[i];
				g.save();
				g.fillStyle = shadow.color;
				g.translate.apply(g, shadowOffsets[i]);
				renderText();
			}
		}

		var gradient = options.textGradient;
		if (gradient) {
			var stops = gradient.stops, fill = g.createLinearGradient(0, viewBox.minY, 0, viewBox.maxY);
			for (var i = 0, l = stops.length; i < l; ++i) {
				fill.addColorStop.apply(fill, stops[i]);
			}
			g.fillStyle = fill;
		}
		else g.fillStyle = style.get('color');

		renderText();

		return wrapper;

	};

})());

/*!
 * The following copyright notice may not be removed under any circumstances.
 * 
 * Copyright:
 * Copyright © 2009 ParaType Ltd. All rights reserved.
 * 
 * Trademark:
 * PT Sans is a trademark of the ParaType Ltd.
 * 
 * Description:
 * PT Sans is a type family of universal use. It consists of 8 styles: regular and
 * bold weights with corresponding italics form a standard computer font family;
 * two narrow styles (regular and bold) are intended for documents that require
 * tight set; two caption styles (regular and bold) are for texts of small point
 * sizes. The design combines traditional conservative appearance with modern
 * trends of humanistic sans serif and characterized by enhanced legibility. These
 * features beside conventional use in business applications and printed stuff made
 * the fonts quite useable for direction and guide signs, schemes, screens of
 * information kiosks and other objects of urban visual communications.
 * 
 * The fonts next to standard Latin and Cyrillic character sets contain signs of
 * title languages of the national republics of Russian Federation and support the
 * most of the languages of neighboring countries. The fonts were developed and
 * released by ParaType in 2009 with financial support from Federal Agency of Print
 * and Mass Communications of Russian Federation. Design - Alexandra Korolkova with
 * assistance of Olga Umpeleva and supervision of Vladimir Yefimov.
 * 
 * Manufacturer:
 * ParaType Ltd
 * 
 * Designer:
 * A.Korolkova, O.Umpeleva, V.Yefimov
 * 
 * Vendor URL:
 * http://www.paratype.com
 */
Cufon.registerFont({"w":607,"face":{"font-family":"PT Sans Bold","font-weight":700,"font-stretch":"normal","units-per-em":"1000","panose-1":"2 11 7 3 2 2 3 2 2 4","ascent":"800","descent":"-200","x-height":"14","bbox":"-24 -800 986 230","underline-thickness":"50","underline-position":"-50","unicode-range":"U+0020-U+007E"},"glyphs":{" ":{"w":253,"k":{"*":35,"-":44,",":70,".":70,"A":40,"C":13,"G":13,"O":13,"Q":13,"T":36,"V":30,"W":25,"X":30,"Y":30,"Z":11,"v":20,"y":20,"w":13,"x":17,"\"":84,"'":84}},"!":{"d":"100,-700r134,0r0,329r-26,163r-82,0r-26,-163r0,-329xm86,-66v0,-23,7,-42,22,-56v15,-14,34,-20,58,-20v25,0,45,6,60,20v15,14,22,33,22,56v0,23,-7,42,-22,56v-15,14,-35,21,-60,21v-24,0,-43,-7,-58,-21v-15,-14,-22,-33,-22,-56","w":294},"\"":{"d":"90,-700r114,0r-36,216r-78,0r0,-216xm238,-700r114,0r-36,216r-78,0r0,-216","w":402,"k":{" ":91,"-":201,",":131,".":131,"A":128,"C":40,"G":40,"O":40,"Q":40,"T":-20,"V":-40,"W":-40,"Y":-36,"Z":-20,"c":104,"e":104,"g":104,"o":104,"q":104,"t":10,"z":13,"a":73,"m":73,"n":73,"p":73,"r":73,"s":73,"u":73}},"#":{"d":"309,-205r-89,0r-36,154r-107,0r36,-154r-74,0r22,-97r75,0r25,-106r-72,0r22,-97r73,0r35,-144r106,0r-34,144r89,0r35,-144r106,0r-34,144r72,0r-25,97r-70,0r-25,106r69,0r-24,97r-68,0r-36,154r-107,0xm243,-302r89,0r25,-106r-89,0"},"$":{"d":"258,13v-38,-1,-71,-5,-100,-12v-29,-7,-51,-14,-67,-23r39,-113v12,7,28,14,50,21v22,7,48,11,78,14r0,-205v-21,-9,-42,-20,-62,-31v-20,-11,-38,-25,-54,-41v-16,-16,-28,-35,-38,-57v-10,-22,-15,-49,-15,-80v0,-57,15,-102,45,-134v30,-32,72,-52,124,-61r0,-91r104,0r0,87v29,2,55,6,77,12v22,6,42,13,61,21r-36,111v-11,-5,-26,-11,-43,-16v-17,-5,-37,-9,-59,-12r0,187v21,9,41,20,62,32v21,12,40,25,56,41v16,16,30,35,40,57v10,22,16,47,16,77v0,61,-15,109,-46,143v-31,34,-74,57,-128,67r0,93r-104,0r0,-87xm406,-188v0,-21,-9,-38,-26,-52v-17,-14,-37,-27,-61,-38r0,178v29,-3,51,-13,65,-28v14,-15,22,-35,22,-60xm219,-525v0,20,7,37,23,50v16,13,36,26,59,37r0,-162v-31,1,-53,9,-65,23v-12,14,-17,31,-17,52"},"%":{"d":"677,-714r73,66r-576,662r-73,-69xm457,-171v0,-30,4,-56,13,-77v9,-21,21,-39,36,-53v15,-14,34,-25,56,-31v22,-6,45,-9,70,-9v25,0,49,3,70,9v21,6,40,16,56,29v16,13,27,31,36,53v9,22,13,48,13,79v0,31,-4,57,-13,79v-9,22,-20,40,-36,53v-16,13,-35,23,-56,29v-21,6,-45,9,-70,9v-25,0,-48,-3,-70,-9v-22,-6,-41,-16,-56,-29v-15,-13,-27,-31,-36,-53v-9,-22,-13,-48,-13,-79xm573,-171v0,57,20,86,59,86v21,0,35,-7,44,-19v9,-12,14,-34,14,-67v0,-32,-5,-54,-14,-67v-9,-13,-23,-19,-44,-19v-21,0,-36,6,-45,19v-9,13,-14,35,-14,67xm51,-542v0,-30,4,-56,13,-77v9,-21,21,-39,36,-53v15,-14,34,-24,56,-30v22,-6,45,-10,70,-10v25,0,49,3,70,9v21,6,40,16,56,29v16,13,27,30,36,52v9,22,13,49,13,80v0,31,-4,58,-13,80v-9,22,-20,39,-36,52v-16,13,-35,23,-56,29v-21,6,-45,9,-70,9v-25,0,-48,-3,-70,-9v-22,-6,-41,-16,-56,-29v-15,-13,-27,-30,-36,-52v-9,-22,-13,-49,-13,-80xm167,-542v0,57,20,86,59,86v21,0,35,-6,44,-18v9,-12,14,-35,14,-68v0,-32,-5,-54,-14,-67v-9,-13,-23,-19,-44,-19v-21,0,-36,6,-45,19v-9,13,-14,35,-14,67","w":840},"&":{"d":"92,-194v0,-25,4,-49,12,-72v8,-23,21,-45,36,-65v15,-20,32,-39,53,-56v21,-17,43,-33,67,-46v-17,-22,-30,-44,-41,-67v-11,-23,-16,-47,-16,-72v0,-17,3,-33,9,-50v6,-17,16,-32,30,-46v14,-14,32,-26,54,-34v22,-8,49,-12,80,-12v31,0,56,4,78,11v22,7,40,17,53,29v13,12,23,26,29,41v6,15,9,31,9,47v0,27,-10,56,-29,86v-19,30,-52,58,-99,85v23,36,47,69,70,99v23,30,49,60,78,89v15,-17,29,-38,41,-63v12,-25,24,-50,33,-76r94,50v-4,12,-10,26,-17,40r-22,43v0,0,-17,28,-26,41v-9,13,-17,25,-24,34v21,19,40,35,56,46v16,11,32,21,49,30r-69,96v-19,-9,-38,-20,-58,-34v-20,-14,-39,-31,-58,-50v-24,22,-54,41,-90,58v-36,17,-80,26,-133,26v-35,0,-67,-5,-97,-14v-30,-9,-58,-23,-80,-41v-22,-18,-39,-39,-52,-65v-13,-26,-20,-55,-20,-88xm486,-149v-34,-35,-65,-70,-93,-105v-28,-35,-52,-69,-73,-100v-32,25,-56,49,-73,72v-17,23,-25,48,-25,77v0,34,13,61,38,80v25,19,57,29,98,29v27,0,52,-5,75,-16v23,-11,41,-24,53,-37xm333,-566v0,28,12,58,36,90v26,-17,45,-32,57,-47v12,-15,17,-29,17,-42v0,-16,-4,-29,-13,-38v-9,-9,-24,-14,-44,-14v-18,0,-31,5,-40,14v-9,9,-13,22,-13,37","w":814},"'":{"d":"90,-700r114,0r-36,216r-78,0r0,-216","w":254,"k":{" ":91,"-":201,",":131,".":131,"A":128,"C":40,"G":40,"O":40,"Q":40,"T":-20,"V":-40,"W":-40,"Y":-36,"Z":-20,"c":104,"e":104,"g":104,"o":104,"q":104,"t":10,"z":13,"a":73,"m":73,"n":73,"p":73,"r":73,"s":73,"u":73}},"(":{"d":"227,220v-31,-32,-57,-68,-78,-106v-21,-38,-38,-78,-51,-118v-13,-40,-23,-81,-29,-122v-6,-41,-9,-80,-9,-117v0,-37,3,-75,9,-116v6,-41,16,-82,29,-123v13,-41,30,-81,52,-120v22,-39,49,-76,80,-110r84,54v-23,31,-42,64,-58,98v-16,34,-28,68,-38,104v-10,36,-18,72,-22,108v-4,36,-6,71,-6,105v0,32,2,66,7,102v5,36,12,71,22,107v10,36,23,71,39,105v16,34,35,65,58,93","w":327,"k":{"-":35,",":30,".":30,"A":17,"C":17,"G":17,"O":17,"Q":17,"c":17,"e":17,"g":17,"o":17,"q":17,"t":10}},")":{"d":"99,-712v31,32,57,68,78,106v21,38,38,78,51,118v13,40,23,81,29,122v6,41,9,80,9,117v0,37,-3,75,-9,116v-6,41,-16,82,-29,123v-13,41,-30,81,-52,120v-22,39,-49,76,-80,110r-84,-55v25,-33,45,-67,61,-101v16,-34,29,-69,38,-104v9,-35,15,-71,19,-106v4,-35,6,-69,6,-103v0,-32,-3,-65,-8,-101v-5,-36,-12,-72,-22,-108v-10,-36,-22,-70,-38,-104v-16,-34,-35,-64,-57,-93","w":326},"*":{"d":"144,-731r28,46r15,59r15,-55r28,-49r64,35r-30,52r-48,43r65,-16r57,0r0,73r-55,0r-61,-16r50,47r25,42r-64,37r-27,-46r-20,-64r-13,58r-29,49r-64,-37r29,-49r45,-37r-55,16r-59,0r0,-74r60,0r59,17r-51,-44r-28,-50","w":378,"k":{" ":35,"-":191,",":250,".":250,"A":55,"C":10,"G":10,"O":10,"Q":10,"T":-16,"V":-10,"W":-13,"Y":-10,"Z":-20,"c":20,"e":20,"g":20,"o":20,"q":20,"v":-22,"y":-22}},"+":{"d":"43,-394r162,0r0,-169r117,0r0,169r163,0r0,112r-163,0r0,171r-117,0r0,-171r-162,0r0,-112","w":527},",":{"d":"42,-64v0,-23,7,-41,22,-54v15,-13,34,-20,56,-20v28,0,50,9,66,28v16,19,24,43,24,74v0,30,-5,56,-14,78v-9,22,-20,40,-34,54v-14,14,-28,26,-44,34v-16,8,-30,14,-43,18r-38,-54v18,-7,34,-19,47,-36v13,-17,21,-34,22,-53v-15,2,-30,-3,-44,-14v-14,-11,-20,-30,-20,-55","w":228,"k":{" ":40,"*":132,"-":117,",":-13,".":-13,"A":-55,"T":55,"V":62,"W":40,"X":-20,"Y":70,"Z":-40,"t":10,"v":22,"y":22,"w":13,"z":-20,"\"":140,"'":140,"a":-20,"m":-20,"n":-20,"p":-20,"r":-20,"s":-20,"u":-20}},"-":{"d":"54,-345r251,0r0,115r-251,0r0,-115","w":360,"k":{" ":80,")":35,"]":35,"}":35,"*":41,"-":59,",":117,".":117,"A":22,"T":70,"V":30,"W":20,"X":44,"Y":41,"Z":10,"x":17,"\"":186,"'":186}},".":{"d":"42,-66v0,-23,7,-42,22,-56v15,-14,34,-20,58,-20v25,0,45,6,60,20v15,14,22,33,22,56v0,23,-7,42,-22,56v-15,14,-35,21,-60,21v-24,0,-43,-7,-58,-21v-15,-14,-22,-33,-22,-56","w":246,"k":{" ":40,"*":132,"-":117,",":-13,".":-13,"A":-55,"T":55,"V":62,"W":40,"X":-20,"Y":70,"Z":-40,"t":10,"v":22,"y":22,"w":13,"z":-20,"\"":140,"'":140,"a":-20,"m":-20,"n":-20,"p":-20,"r":-20,"s":-20,"u":-20}},"\/":{"d":"333,-712r98,44r-357,808r-98,-46","w":408},"0":{"d":"60,-351v0,-123,21,-213,63,-273v42,-60,102,-90,181,-90v84,0,146,29,185,88v39,59,59,151,59,275v0,123,-22,215,-64,275v-42,60,-102,90,-181,90v-83,0,-145,-31,-184,-94v-39,-63,-59,-154,-59,-271xm190,-351v0,81,8,145,26,189v18,44,47,66,88,66v39,0,68,-20,86,-61v18,-41,28,-105,28,-194v0,-81,-9,-143,-26,-187v-17,-44,-47,-66,-89,-66v-40,0,-69,21,-87,62v-18,41,-26,105,-26,191"},"1":{"d":"121,-110r139,0r0,-395r15,-68r-48,59r-89,61r-55,-75r228,-184r73,0r0,602r136,0r0,110r-399,0r0,-110"},"2":{"d":"495,-529v0,34,-7,68,-19,103v-12,35,-27,69,-46,102v-19,33,-41,65,-64,96v-23,31,-45,60,-67,86r-53,41r0,5r72,-14r192,0r0,110r-421,0r0,-67r54,-59v0,0,31,-32,61,-70v20,-25,40,-51,59,-78v19,-27,37,-53,52,-80v15,-27,28,-54,37,-79v9,-25,13,-49,13,-72v0,-27,-7,-49,-23,-67v-16,-18,-41,-27,-75,-27v-21,0,-43,4,-65,13v-22,9,-42,21,-57,35r-52,-92v26,-21,56,-38,89,-51v33,-13,71,-20,116,-20v29,0,55,4,79,12v24,8,45,20,62,35v17,15,31,34,41,57v10,23,15,50,15,81"},"3":{"d":"261,-96v41,0,73,-11,95,-33v22,-22,32,-49,32,-80v0,-38,-11,-66,-34,-84v-23,-18,-58,-27,-107,-27r-72,0r0,-69r121,-165r57,-45r-79,9r-168,0r0,-110r382,0r0,71r-141,189r-44,27r0,5r42,-6v23,2,46,7,67,16v21,9,38,22,54,38v16,16,29,36,38,60v9,24,14,52,14,83v0,39,-7,73,-20,102v-13,29,-31,53,-54,72v-23,19,-49,34,-80,43v-31,9,-64,14,-99,14v-29,0,-60,-3,-91,-8v-31,-5,-57,-13,-76,-23r35,-108v17,9,36,16,57,21v21,5,45,8,71,8"},"4":{"d":"573,-195r-110,0r0,195r-121,0r0,-195r-303,0r0,-74r317,-436r107,0r0,406r110,0r0,104xm342,-452r9,-84r-4,0r-34,72r-104,135r-50,38r64,-8r119,0r0,-153"},"5":{"d":"240,-101v44,0,78,-11,101,-32v23,-21,35,-51,35,-88v0,-40,-14,-69,-41,-88v-27,-19,-66,-28,-117,-28r-79,3r0,-366r344,0r0,122r-232,0r0,135r41,-4v33,1,62,7,88,18v26,11,49,26,68,45v19,19,33,41,43,68v10,27,15,58,15,91v0,39,-7,74,-20,104v-13,30,-32,55,-56,75v-24,20,-51,35,-83,45v-32,10,-67,15,-105,15v-30,0,-59,-3,-86,-8v-27,-5,-49,-11,-68,-20r35,-108v15,7,33,12,51,16v18,4,40,5,66,5"},"6":{"d":"540,-217v0,33,-5,63,-16,91v-11,28,-27,52,-47,73v-20,21,-45,37,-73,49v-28,12,-59,18,-93,18v-35,0,-66,-5,-95,-16v-29,-11,-55,-28,-76,-50v-21,-22,-38,-50,-50,-83v-12,-33,-18,-72,-18,-116v0,-66,9,-126,28,-179v19,-53,46,-100,78,-140v32,-40,69,-72,112,-96v43,-24,89,-40,137,-48r29,103v-33,5,-64,16,-92,31v-28,15,-52,34,-74,55v-22,21,-41,45,-56,71v-15,26,-25,54,-31,82v13,-17,31,-30,52,-42v21,-12,48,-18,80,-18v30,0,58,5,83,14v25,9,47,24,65,42v18,18,32,40,42,67v10,27,15,57,15,92xm414,-210v0,-75,-37,-112,-110,-112v-27,0,-50,6,-68,18v-18,12,-31,26,-38,42v-1,7,-2,14,-2,19r0,16v0,16,2,31,7,47v5,16,12,30,21,42v9,12,20,22,34,30v14,8,31,12,50,12v31,0,56,-11,76,-32v20,-21,30,-49,30,-82"},"7":{"d":"124,0r229,-539r44,-49r-60,10r-257,0r0,-122r451,0r0,38r-280,662r-127,0","k":{" ":54,"-":64,",":119,".":119,"A":66,"C":30,"G":30,"O":30,"Q":30,"X":31,"Y":12,"c":55,"e":55,"g":55,"o":55,"q":55,"t":33,"v":40,"y":40,"w":40,"x":54,"z":55,"a":55,"m":55,"n":55,"p":55,"r":55,"s":55,"u":55}},"8":{"d":"81,-171v0,-23,3,-45,9,-63v6,-18,15,-35,26,-50v11,-15,23,-28,38,-40v15,-12,32,-23,49,-33v-33,-21,-58,-44,-77,-71v-19,-27,-28,-61,-28,-101v0,-26,4,-50,14,-73v10,-23,24,-42,42,-59v18,-17,41,-30,67,-39v26,-9,55,-14,88,-14v30,0,57,4,82,12v25,8,45,19,63,34v18,15,32,33,42,54v10,21,14,44,14,69v0,39,-8,73,-26,100v-18,27,-44,52,-78,75v40,23,70,49,90,77v20,28,31,64,31,108v0,30,-6,57,-17,81v-11,24,-26,46,-46,63v-20,17,-44,31,-72,41v-28,10,-59,14,-92,14v-33,0,-63,-5,-90,-14v-27,-9,-51,-21,-70,-37v-19,-16,-34,-35,-44,-58v-10,-23,-15,-48,-15,-76xm403,-184v0,-15,-4,-29,-11,-42v-7,-13,-16,-24,-28,-34v-12,-10,-26,-20,-40,-29v-14,-9,-28,-17,-43,-25v-31,18,-53,37,-65,58v-12,21,-17,42,-17,63v0,27,9,50,27,69v18,19,44,28,77,28v30,0,55,-7,73,-22v18,-15,27,-37,27,-66xm222,-527v0,16,3,30,9,42v6,12,15,22,25,31v10,9,21,18,34,26v13,8,27,14,41,21v40,-34,60,-71,60,-112v0,-28,-9,-49,-25,-63v-16,-14,-36,-22,-59,-22v-29,0,-51,8,-65,23v-14,15,-20,33,-20,54"},"9":{"d":"65,-481v0,-34,5,-65,15,-94v10,-29,26,-53,46,-73v20,-20,44,-36,72,-48v28,-12,60,-18,97,-18v75,0,134,23,177,68v43,45,65,110,65,196v0,77,-9,144,-29,200v-20,56,-47,104,-80,142v-33,38,-71,66,-114,86v-43,20,-89,32,-137,36r-28,-102v37,-5,69,-14,98,-27v29,-13,53,-29,74,-49v21,-20,38,-43,51,-68v13,-25,22,-51,27,-80v-16,17,-33,29,-51,36v-18,7,-43,10,-74,10v-25,0,-51,-4,-76,-13v-25,-9,-46,-21,-66,-39v-20,-18,-36,-41,-48,-68v-12,-27,-19,-58,-19,-95xm191,-488v0,38,11,67,32,86v21,19,48,29,80,29v27,0,50,-4,67,-13v17,-9,31,-19,40,-32v2,-14,3,-27,3,-40v0,-19,-2,-37,-7,-55v-5,-18,-12,-34,-22,-48v-10,-14,-21,-25,-36,-33v-15,-8,-33,-13,-54,-13v-33,0,-58,10,-76,31v-18,21,-27,51,-27,88"},":":{"d":"93,-428v0,-23,7,-42,22,-56v15,-14,34,-20,58,-20v25,0,45,6,60,20v15,14,22,33,22,56v0,23,-7,42,-22,56v-15,14,-35,21,-60,21v-24,0,-43,-7,-58,-21v-15,-14,-22,-33,-22,-56xm93,-66v0,-23,7,-42,22,-56v15,-14,34,-20,58,-20v25,0,45,6,60,20v15,14,22,33,22,56v0,23,-7,42,-22,56v-15,14,-35,21,-60,21v-24,0,-43,-7,-58,-21v-15,-14,-22,-33,-22,-56","w":295},";":{"d":"82,-64v0,-23,7,-41,22,-54v15,-13,34,-20,56,-20v28,0,50,9,66,28v16,19,24,43,24,74v0,30,-5,56,-14,78v-9,22,-20,40,-34,54v-14,14,-28,26,-44,34v-16,8,-30,14,-43,18r-38,-54v18,-7,34,-19,47,-36v13,-17,21,-34,22,-53v-15,2,-30,-3,-44,-14v-14,-11,-20,-30,-20,-55xm82,-428v0,-23,7,-42,22,-56v15,-14,34,-20,58,-20v25,0,45,6,60,20v15,14,22,33,22,56v0,23,-7,42,-22,56v-15,14,-35,21,-60,21v-24,0,-43,-7,-58,-21v-15,-14,-22,-33,-22,-56","w":290},"<":{"d":"40,-285r0,-70r386,-231r57,90r-224,139r-91,35r90,31r230,137r-57,90","w":527},"=":{"d":"43,-299r442,0r0,112r-442,0r0,-112xm43,-490r442,0r0,112r-442,0r0,-112","w":527},">":{"d":"487,-365r0,70r-386,231r-57,-91r224,-138r91,-36r-90,-30r-230,-138r57,-89","w":527},"?":{"d":"136,-208v-3,-35,-2,-64,5,-88v7,-24,15,-46,27,-64v12,-18,25,-33,40,-46r42,-37v13,-12,24,-24,33,-37v9,-13,13,-29,13,-47v0,-23,-7,-42,-20,-56v-13,-14,-36,-21,-69,-21v-11,0,-22,2,-34,4v-12,2,-24,6,-36,10v-12,4,-24,8,-35,14v-11,6,-20,12,-29,18r-50,-96v25,-17,54,-32,87,-43v33,-11,73,-17,120,-17v63,0,112,16,147,46v35,30,53,71,53,122v0,34,-5,62,-14,84v-9,22,-20,42,-33,58v-13,16,-28,29,-44,41v-16,12,-31,25,-44,39v-13,14,-25,29,-34,47v-9,18,-14,41,-14,69r-111,0xm116,-66v0,-23,7,-42,22,-56v15,-14,34,-20,58,-20v25,0,45,6,60,20v15,14,22,33,22,56v0,23,-7,42,-22,56v-15,14,-35,21,-60,21v-24,0,-43,-7,-58,-21v-15,-14,-22,-33,-22,-56","w":454},"@":{"d":"679,-484r70,0r-48,271v-5,31,-6,54,-1,68v5,14,17,21,34,21v17,0,34,-4,51,-12v17,-8,32,-20,45,-37v13,-17,24,-38,32,-63v8,-25,13,-55,13,-90v0,-50,-8,-93,-25,-128v-17,-35,-39,-65,-68,-88v-29,-23,-64,-39,-103,-50v-39,-11,-82,-16,-127,-16v-52,0,-100,9,-145,28v-45,19,-84,44,-117,77v-33,33,-58,72,-77,117v-19,45,-28,93,-28,146v0,52,7,99,23,140v16,41,39,77,69,106v30,29,67,50,111,66v44,16,96,24,153,24v19,0,41,-2,66,-7v25,-5,47,-12,67,-21r31,96v-27,13,-55,23,-83,28v-28,5,-61,8,-98,8v-65,0,-125,-9,-180,-28v-55,-19,-102,-46,-142,-83v-40,-37,-72,-83,-95,-137v-23,-54,-34,-117,-34,-188v0,-73,13,-138,39,-197v26,-59,61,-109,105,-150v44,-41,95,-73,153,-95v58,-22,119,-34,184,-34v61,0,118,8,171,26v53,18,98,43,137,76v39,33,69,74,91,122v22,48,33,101,33,162v0,43,-7,83,-22,120v-15,37,-36,70,-62,97v-26,27,-57,49,-92,65v-35,16,-73,24,-113,24v-17,0,-33,-2,-47,-6v-14,-4,-26,-9,-36,-18v-10,-9,-16,-20,-21,-34v-5,-14,-6,-31,-4,-52r-4,0v-10,14,-21,28,-33,41v-12,13,-24,25,-38,35v-14,10,-29,19,-46,25v-17,6,-35,9,-55,9v-16,0,-31,-3,-46,-10v-15,-7,-27,-17,-38,-30v-11,-13,-19,-28,-25,-46v-6,-18,-10,-38,-10,-60v0,-41,7,-81,20,-120v13,-39,31,-74,54,-104v23,-30,50,-54,80,-72v30,-18,63,-28,97,-28v23,0,43,3,59,10v16,7,31,17,44,28xm616,-363v-9,-7,-18,-13,-27,-17v-9,-4,-21,-6,-35,-6v-20,0,-39,6,-56,17v-17,11,-32,26,-44,44v-12,18,-21,39,-28,61v-7,22,-10,44,-10,65v0,22,5,40,14,54v9,14,24,21,46,21v9,0,19,-2,30,-8v11,-6,21,-14,31,-23v10,-9,20,-20,29,-32v9,-12,18,-25,25,-38","w":1059},"A":{"d":"405,-155r-215,0r-53,155r-137,0r252,-705r101,0r252,705r-144,0xm225,-265r150,0r-52,-156r-21,-110r-5,0r-21,111","w":605},"B":{"d":"531,-537v0,17,-3,35,-7,52v-4,17,-11,33,-21,47v-10,14,-23,27,-39,38v-16,11,-35,20,-58,25r0,6v20,3,39,9,57,17v18,8,34,19,47,33v13,14,24,31,32,51v8,20,11,44,11,71v0,36,-8,67,-23,93v-15,26,-36,48,-62,65v-26,17,-54,29,-87,37v-33,8,-66,12,-101,12r-44,0v-18,0,-36,-1,-56,-2v-20,-1,-41,-2,-62,-4v-21,-2,-41,-5,-58,-9r0,-690v13,-2,28,-4,44,-6v16,-2,33,-4,52,-5r58,-3v0,0,39,-1,58,-1v33,0,65,3,96,8v31,5,58,13,82,26v24,13,44,30,59,53v15,23,22,51,22,86xm281,-103v17,0,33,-2,49,-6v16,-4,29,-11,41,-19v12,-8,22,-18,29,-31v7,-13,11,-28,11,-45v0,-22,-4,-39,-13,-52v-9,-13,-20,-23,-34,-30v-14,-7,-30,-11,-47,-13v-17,-2,-35,-3,-52,-3r-73,0r0,193v3,1,9,2,16,3v7,1,16,2,24,2r26,0v9,0,16,1,23,1xm236,-406v9,0,20,0,32,-1v12,-1,23,-2,31,-3v25,-8,47,-20,65,-36v18,-16,28,-37,28,-63v0,-17,-3,-32,-10,-43v-7,-11,-15,-20,-26,-27v-11,-7,-24,-11,-38,-14v-14,-3,-29,-4,-44,-4v-17,0,-33,0,-48,1v-15,1,-26,2,-34,3r0,187r44,0","w":591,"k":{"T":30}},"C":{"d":"534,-29v-21,15,-49,26,-82,33v-33,7,-66,10,-101,10v-42,0,-81,-7,-119,-20v-38,-13,-71,-33,-100,-62v-29,-29,-51,-68,-68,-114v-17,-46,-26,-102,-26,-168v0,-69,9,-126,28,-172v19,-46,44,-84,74,-112v30,-28,65,-50,102,-62v37,-12,75,-18,112,-18v40,0,74,3,102,8v28,5,50,12,68,19r-27,116v-15,-7,-34,-13,-55,-16v-21,-3,-46,-5,-76,-5v-55,0,-100,20,-134,59v-34,39,-50,100,-50,183v0,36,4,68,12,98v8,30,20,55,36,76v16,21,38,38,62,50v24,12,52,17,84,17v30,0,55,-3,76,-9v21,-6,39,-14,54,-23","w":559,"k":{" ":40,"-":69,"A":44,"C":33,"G":33,"O":33,"Q":33,"T":44,"V":66,"W":26,"X":51,"Y":55,"Z":49,"c":36,"e":36,"g":36,"o":36,"q":36,"t":36,"v":53,"y":53,"w":40,"x":44,"z":17,"a":11,"m":11,"n":11,"p":11,"r":11,"s":11,"u":11}},"D":{"d":"60,-700v14,-2,30,-4,48,-5v18,-1,35,-2,54,-3v19,-1,36,-2,54,-2r48,0v62,0,115,9,159,26v44,17,80,42,107,73v27,31,47,69,60,112v13,43,19,91,19,143v0,47,-6,93,-18,137v-12,44,-32,83,-60,117v-28,34,-65,61,-111,82v-46,21,-102,31,-169,31v-11,0,-25,0,-43,-1v-18,-1,-35,-1,-54,-2v-28,-2,-29,-2,-55,-4v-17,-1,-30,-2,-39,-3r0,-701xm275,-588v-15,0,-30,0,-45,1v-15,1,-26,2,-33,3r0,469v3,1,7,1,13,1v6,0,14,2,21,2r21,0v7,0,12,1,15,1v39,0,71,-7,97,-21v26,-14,45,-31,60,-54v15,-23,26,-48,32,-78v6,-30,9,-61,9,-92v0,-27,-3,-54,-8,-82v-5,-28,-15,-53,-29,-75v-14,-22,-34,-40,-59,-54v-25,-14,-56,-21,-94,-21","w":647,"k":{"J":22," ":13,")":17,"]":17,"}":17,"*":10,",":30,".":30,"A":28,"T":39,"V":37,"W":28,"X":55,"Y":48,"Z":24,"v":8,"y":8,"x":30,"z":17,"\"":40,"'":40}},"E":{"d":"60,-700r415,0r0,122r-278,0r0,163r253,0r0,122r-253,0r0,171r283,0r0,122r-420,0r0,-700","w":522},"F":{"d":"60,-700r415,0r0,122r-278,0r0,173r256,0r0,122r-256,0r0,283r-137,0r0,-700","w":508},"G":{"d":"307,-365r261,0r0,312v-28,23,-61,40,-100,51v-39,11,-78,16,-116,16v-45,0,-86,-7,-124,-21v-38,-14,-72,-35,-100,-65v-28,-30,-50,-68,-66,-114v-16,-46,-24,-101,-24,-164v0,-66,9,-122,28,-168v19,-46,45,-85,76,-114v31,-29,65,-49,104,-62v39,-13,78,-20,118,-20v40,0,76,3,106,9v30,6,54,12,72,19r-28,115v-17,-7,-35,-11,-56,-15v-21,-4,-47,-6,-79,-6v-29,0,-55,4,-79,13v-24,9,-44,23,-62,43v-18,20,-32,44,-42,75v-10,31,-14,68,-14,112v0,42,5,79,14,109v9,30,22,54,39,74v17,20,37,35,59,44v22,9,46,14,71,14v17,0,34,-2,51,-6v17,-4,31,-11,42,-20r0,-132r-151,-16r0,-83","w":609},"H":{"d":"453,-293r-256,0r0,293r-137,0r0,-700r137,0r0,285r256,0r0,-285r137,0r0,700r-137,0r0,-293","w":651},"I":{"d":"74,-700r137,0r0,700r-137,0r0,-700","w":285},"J":{"d":"131,-700r137,0r0,512v0,27,-3,52,-9,76v-6,24,-15,46,-29,64v-14,18,-32,33,-53,44v-21,11,-47,16,-78,16v-19,0,-40,-2,-63,-6v-23,-4,-42,-10,-59,-17r30,-112v17,9,37,13,59,13v28,0,46,-10,54,-31v8,-21,11,-48,11,-82r0,-477","w":334},"K":{"d":"233,-299r-36,0r0,299r-137,0r0,-700r137,0r0,310r32,-14r193,-296r156,0r-204,294r-54,38r56,39r233,329r-169,0","w":620,"k":{" ":30,"-":80,"A":30,"C":55,"G":55,"O":55,"Q":55,"T":47,"V":35,"W":30,"X":36,"Y":41,"Z":13,"c":48,"e":48,"g":48,"o":48,"q":48,"t":46,"v":54,"y":54,"w":54,"x":49,"z":16,"a":20,"m":20,"n":20,"p":20,"r":20,"s":20,"u":20}},"L":{"d":"503,0r-443,0r0,-700r137,0r0,578r306,0r0,122","w":514,"k":{" ":51,"*":164,"-":69,",":-10,".":-10,"A":122,"C":93,"G":93,"O":93,"Q":93,"T":131,"V":119,"W":87,"X":142,"Y":128,"Z":88,"c":35,"e":35,"g":35,"o":35,"q":35,"t":35,"v":86,"y":86,"w":62,"x":69,"z":40,"\"":142,"'":142}},"M":{"d":"603,-363r15,-139r-6,0r-43,112r-149,261r-44,0r-157,-262r-44,-111r-5,0r20,138r0,364r-130,0r0,-700r125,0r187,320r33,80r4,0r30,-82r177,-318r124,0r0,700r-137,0r0,-363","w":800},"N":{"d":"234,-365r-55,-110r-5,0r16,110r0,365r-130,0r0,-705r100,0r265,373r53,107r5,0r-16,-107r0,-368r130,0r0,705r-100,0","w":657},"O":{"d":"38,-350v0,-117,26,-207,77,-270v51,-63,125,-94,220,-94v50,0,94,9,131,26v37,17,68,42,93,74v25,32,43,70,55,115v12,45,18,94,18,149v0,117,-26,207,-78,270v-52,63,-124,94,-219,94v-51,0,-95,-9,-132,-26v-37,-17,-69,-42,-93,-74v-24,-32,-42,-70,-54,-115v-12,-45,-18,-94,-18,-149xm182,-350v0,35,3,68,9,98v6,30,15,55,27,76v12,21,29,38,48,50v19,12,42,18,69,18v49,0,86,-19,113,-57v27,-38,40,-100,40,-185v0,-34,-2,-66,-8,-95v-6,-29,-15,-55,-27,-77v-12,-22,-28,-40,-47,-52v-19,-12,-43,-18,-71,-18v-49,0,-86,19,-113,58v-27,39,-40,101,-40,184","w":670,"k":{"J":22," ":13,")":17,"]":17,"}":17,"*":10,",":30,".":30,"A":28,"T":39,"V":37,"W":28,"X":55,"Y":48,"Z":24,"v":8,"y":8,"x":30,"z":17,"\"":40,"'":40}},"P":{"d":"60,-693v28,-5,58,-10,92,-13v34,-3,68,-4,101,-4v35,0,70,2,105,8v35,6,66,17,94,34v28,17,50,42,68,72v18,30,27,69,27,118v0,44,-8,82,-23,112v-15,30,-36,55,-61,74v-25,19,-55,33,-87,42v-32,9,-65,13,-100,13r-16,0v-7,0,-15,-1,-23,-1v-8,0,-15,0,-23,-1v-8,-1,-14,-1,-17,-2r0,241r-137,0r0,-693xm264,-592v-13,0,-26,1,-38,2v-12,1,-22,2,-29,3r0,227v3,1,7,1,12,2v5,1,11,2,17,2r18,0r12,0v18,0,36,-2,54,-5v18,-3,33,-10,47,-19v14,-9,25,-21,33,-37v8,-16,13,-37,13,-63v0,-22,-4,-40,-12,-54v-8,-14,-18,-26,-31,-35v-13,-9,-28,-15,-45,-18v-17,-3,-34,-5,-51,-5","w":572,"k":{" ":40,"-":10,",":130,".":130,"A":77,"C":11,"G":11,"O":11,"Q":11,"T":8,"V":10,"W":7,"X":53,"Y":27,"Z":20,"c":36,"e":36,"g":36,"o":36,"q":36,"x":36,"z":13,"a":29,"m":29,"n":29,"p":29,"r":29,"s":29,"u":29}},"Q":{"d":"702,202v-32,9,-64,13,-97,13v-34,0,-67,-4,-99,-11v-32,-7,-63,-14,-93,-22v-45,-12,-45,-12,-87,-22v-28,-7,-54,-11,-79,-11v-16,0,-31,2,-46,6r0,-118v19,-4,38,-6,58,-6v28,0,55,3,83,10v28,7,56,13,85,21v29,8,58,15,88,22v30,7,62,10,95,10v15,0,30,0,45,-2v15,-2,31,-5,47,-9r0,119xm38,-350v0,-117,26,-207,77,-270v51,-63,125,-94,220,-94v50,0,94,9,131,26v37,17,68,42,93,74v25,32,43,70,55,115v12,45,18,94,18,149v0,117,-26,207,-78,270v-52,63,-124,94,-219,94v-51,0,-95,-9,-132,-26v-37,-17,-69,-42,-93,-74v-24,-32,-42,-70,-54,-115v-12,-45,-18,-94,-18,-149xm182,-350v0,35,3,68,9,98v6,30,15,55,27,76v12,21,29,38,48,50v19,12,42,18,69,18v49,0,86,-19,113,-57v27,-38,40,-100,40,-185v0,-34,-2,-66,-8,-95v-6,-29,-15,-55,-27,-77v-12,-22,-28,-40,-47,-52v-19,-12,-43,-18,-71,-18v-49,0,-86,19,-113,58v-27,39,-40,101,-40,184","w":670,"k":{"J":22," ":13,")":17,"]":17,"}":17,"*":10,",":30,".":30,"A":28,"T":39,"V":37,"W":28,"X":55,"Y":48,"Z":24,"v":8,"y":8,"x":30,"z":17,"\"":40,"'":40}},"R":{"d":"60,-693v15,-3,32,-5,50,-7v18,-2,34,-5,52,-6r52,-3v0,0,32,-1,46,-1v33,0,64,3,96,9v32,6,61,16,86,31v25,15,45,34,60,60v15,26,22,58,22,97v0,57,-13,104,-40,140v-27,36,-62,61,-107,75r49,31r160,267r-158,0r-159,-274r-72,-13r0,287r-137,0r0,-693xm270,-588v-14,0,-28,0,-42,1v-14,1,-24,2,-31,4r0,203r58,0v38,0,68,-9,91,-26v23,-17,34,-46,34,-86v0,-30,-9,-53,-28,-70v-19,-17,-46,-26,-82,-26","w":602,"k":{"-":40,"A":37,"C":33,"G":33,"O":33,"Q":33,"T":49,"V":48,"W":40,"X":56,"Y":60,"Z":24,"c":48,"e":48,"g":48,"o":48,"q":48,"t":24,"v":22,"y":22,"w":23,"x":28,"z":13,"\"":20,"'":20}},"S":{"d":"362,-188v0,-21,-8,-39,-24,-52v-16,-13,-34,-25,-58,-36v-24,-11,-50,-22,-78,-34v-28,-12,-52,-27,-76,-44v-24,-17,-44,-38,-60,-63v-16,-25,-23,-58,-23,-97v0,-34,6,-63,17,-88v11,-25,27,-46,48,-63v21,-17,46,-29,75,-37v29,-8,61,-12,96,-12v41,0,79,3,115,10v36,7,66,18,89,31r-43,115v-15,-9,-37,-18,-66,-26v-29,-8,-61,-11,-95,-11v-32,0,-56,6,-73,19v-17,13,-26,30,-26,51v0,20,8,37,24,50v16,13,34,26,58,37r78,35v0,0,52,26,76,43v24,17,44,39,60,64v16,25,23,56,23,93v0,37,-7,70,-19,97v-12,27,-30,49,-52,67v-22,18,-48,31,-80,40v-32,9,-67,13,-105,13v-50,0,-94,-5,-132,-14v-38,-9,-66,-19,-84,-28r44,-117v7,4,17,8,29,13v12,5,24,9,39,13v15,4,31,7,47,10v16,3,33,4,50,4v41,0,72,-7,94,-21v22,-14,32,-34,32,-62","w":530},"T":{"d":"557,-578r-204,0r0,578r-137,0r0,-578r-205,0r0,-122r546,0r0,122","w":568,"k":{" ":40,")":-13,"]":-13,"}":-13,"*":-16,"-":128,",":111,".":111,"A":78,"C":39,"G":39,"O":39,"Q":39,"T":-20,"V":33,"W":30,"X":47,"Y":70,"Z":49,"c":128,"e":128,"g":128,"o":128,"q":128,"t":49,"v":128,"y":128,"w":128,"x":128,"z":128,"\"":-20,"'":-20,"a":105,"m":105,"n":105,"p":105,"r":105,"s":105,"u":105}},"U":{"d":"440,-700r130,0r0,452v0,45,-6,84,-18,117v-12,33,-29,60,-50,81v-21,21,-47,37,-78,47v-31,10,-64,15,-101,15v-177,0,-266,-81,-266,-243r0,-469r137,0r0,442v0,27,3,51,8,70v5,19,12,34,23,46v11,12,24,19,40,24v16,5,35,8,56,8v42,0,72,-12,91,-35v19,-23,28,-61,28,-113r0,-442","w":627},"V":{"d":"290,-289r18,119r5,0r20,-120r134,-410r144,0r-260,705r-98,0r-262,-705r159,0","w":602,"k":{" ":30,"*":-38,"-":54,",":111,".":111,"A":68,"C":37,"G":37,"O":37,"Q":37,"T":33,"V":35,"W":30,"X":35,"Y":41,"Z":35,"c":74,"e":74,"g":74,"o":74,"q":74,"t":20,"v":11,"y":11,"w":18,"x":48,"z":46,"\"":-40,"'":-40,"a":57,"m":57,"n":57,"p":57,"r":57,"s":57,"u":57}},"W":{"d":"242,-309r13,124r4,0r14,-126r122,-389r90,0r120,391r14,124r4,0r15,-126r85,-389r139,0r-193,705r-92,0r-125,-389r-17,-107r-5,0r-17,108r-124,388r-97,0r-192,-705r149,0","w":862,"k":{" ":27,"*":-35,"-":31,",":85,".":85,"A":44,"C":28,"G":28,"O":28,"Q":28,"T":30,"V":30,"W":33,"X":30,"Y":41,"Z":33,"c":53,"e":53,"g":53,"o":53,"q":53,"t":13,"v":8,"y":8,"w":18,"x":40,"z":43,"\"":-40,"'":-40,"a":48,"m":48,"n":48,"p":48,"r":48,"s":48,"u":48}},"X":{"d":"225,-356r-195,-344r165,0r108,202r24,71r23,-71r113,-202r149,0r-202,337r212,363r-163,0r-123,-216r-27,-74r-26,74r-124,216r-149,0","w":633,"k":{" ":30,"-":80,"A":30,"C":55,"G":55,"O":55,"Q":55,"T":47,"V":35,"W":30,"X":36,"Y":41,"Z":13,"c":48,"e":48,"g":48,"o":48,"q":48,"t":46,"v":54,"y":54,"w":54,"x":49,"z":16,"a":20,"m":20,"n":20,"p":20,"r":20,"s":20,"u":20}},"Y":{"d":"228,-260r-230,-440r163,0r128,263r14,74r5,0r15,-76r124,-261r147,0r-229,439r0,261r-137,0r0,-260","w":592,"k":{" ":27,"*":-24,"-":68,",":118,".":118,"A":88,"C":48,"G":48,"O":48,"Q":48,"T":70,"V":41,"W":30,"X":41,"Y":41,"Z":58,"c":106,"e":106,"g":106,"o":106,"q":106,"t":51,"v":48,"y":48,"w":40,"x":60,"z":70,"\"":-36,"'":-36,"a":72,"m":72,"n":72,"p":72,"r":72,"s":72,"u":72}},"Z":{"d":"27,-122r296,-414r52,-42r-348,0r0,-122r485,0r0,122r-298,418r-51,38r349,0r0,122r-485,0r0,-122","w":539,"k":{" ":22,"*":-20,"-":55,"A":25,"C":24,"G":24,"O":24,"Q":24,"T":24,"V":35,"W":30,"X":27,"Y":58,"Z":11,"c":38,"e":38,"g":38,"o":38,"q":38,"t":8,"v":10,"y":10,"w":10,"x":7,"z":13,"\"":-20,"'":-20,"a":11,"m":11,"n":11,"p":11,"r":11,"s":11,"u":11}},"[":{"d":"60,-700r235,0r0,110r-111,0r0,710r111,0r0,110r-235,0r0,-930","w":324,"k":{"-":35,",":30,".":30,"A":17,"C":17,"G":17,"O":17,"Q":17,"c":17,"e":17,"g":17,"o":17,"q":17,"t":10}},"\\":{"d":"438,95r-99,45r-363,-808r102,-43","w":424},"]":{"d":"264,230r-235,0r0,-110r111,0r0,-710r-111,0r0,-110r235,0r0,930","w":324},"^":{"d":"216,-705r69,0r185,292r-131,0r-71,-122r-21,-70r-25,71r-78,121r-124,0","w":500},"_":{"d":"0,117r444,0r0,107r-444,0r0,-107","w":444},"`":{"d":"256,-566r-72,0r-124,-124r0,-30r136,0","w":316},"a":{"d":"54,-471v27,-12,58,-22,95,-29v37,-7,75,-10,115,-10v35,0,64,4,87,12v23,8,41,21,55,36v14,15,24,34,30,55v6,21,8,45,8,72v0,29,-1,59,-3,89v-2,30,-3,58,-3,87v0,29,0,56,2,83v2,27,7,53,15,77r-106,0r-21,-69r-5,0v-13,21,-31,39,-55,54v-24,15,-55,22,-92,22v-23,0,-44,-3,-63,-10v-19,-7,-35,-17,-48,-30v-13,-13,-24,-28,-31,-46v-7,-18,-11,-38,-11,-60v0,-31,7,-57,21,-78v14,-21,32,-37,58,-50v26,-13,56,-23,92,-28v36,-5,76,-6,120,-4v5,-37,2,-64,-8,-80v-10,-16,-32,-25,-67,-25v-26,0,-54,3,-83,8v-29,5,-52,12,-71,21xm219,-99v26,0,47,-5,62,-17v15,-12,27,-25,34,-38r0,-65v-21,-2,-40,-2,-59,-1v-19,1,-36,4,-51,9v-15,5,-26,11,-35,20v-9,9,-13,20,-13,33v0,19,6,34,17,44v11,10,26,15,45,15","w":496,"k":{"T":120,"'":41,"\"":41}},"b":{"d":"57,-700r130,0r0,240r4,0v14,-16,32,-29,54,-38v22,-9,46,-14,73,-14v60,0,106,21,138,62v32,41,47,103,47,187v0,90,-23,158,-67,205v-44,47,-105,70,-182,70v-43,0,-82,-3,-117,-10v-35,-7,-62,-15,-80,-24r0,-678xm280,-402v-24,0,-43,6,-58,18v-15,12,-27,31,-35,54r0,218v11,5,23,9,35,11v12,2,25,3,39,3v35,0,63,-12,81,-38v18,-26,27,-67,27,-123v0,-95,-30,-143,-89,-143","w":536,"k":{"f":12,")":17,"]":17,"}":17,"*":20,",":10,".":10,"v":12,"y":12,"w":9,"x":24,"z":8,"\"":74,"'":74}},"c":{"d":"411,-31v-20,15,-45,25,-73,33v-28,8,-57,12,-87,12v-40,0,-73,-6,-101,-19v-28,-13,-51,-30,-68,-53v-17,-23,-30,-51,-38,-84v-8,-33,-11,-69,-11,-108v0,-85,19,-150,57,-196v38,-46,93,-68,166,-68v37,0,66,3,88,9v22,6,43,14,61,23r-31,106v-15,-7,-31,-13,-46,-17v-15,-4,-32,-6,-51,-6v-36,0,-63,11,-82,35v-19,24,-28,62,-28,114v0,21,2,41,7,59v5,18,12,34,21,47v9,13,22,24,37,32v15,8,32,11,52,11v22,0,41,-3,56,-9v15,-6,29,-12,41,-20","w":433,"k":{" ":24,")":10,"]":10,"}":10,"-":38,"c":17,"e":17,"g":17,"o":17,"q":17,"v":17,"y":17,"w":17,"x":8,"z":8,"\"":22,"'":22}},"d":{"d":"482,-176v0,28,0,56,1,84v1,28,4,59,9,93r-93,0r-18,-65r-4,0v-13,23,-32,42,-57,56v-25,14,-55,22,-89,22v-63,0,-111,-21,-146,-62v-35,-41,-52,-106,-52,-194v0,-85,19,-152,58,-199v39,-47,95,-71,170,-71v21,0,38,2,51,4v13,2,27,6,40,11r0,-203r130,0r0,524xm261,-96v25,0,45,-6,60,-18v15,-12,25,-31,31,-54r0,-212v-9,-7,-20,-12,-31,-16v-11,-4,-26,-6,-44,-6v-37,0,-65,12,-83,37v-18,25,-27,67,-27,127v0,43,8,77,23,103v15,26,38,39,71,39","w":539},"e":{"d":"457,-43v-20,16,-47,30,-81,41v-34,11,-71,16,-110,16v-81,0,-140,-23,-177,-70v-37,-47,-56,-112,-56,-194v0,-88,21,-154,63,-198v42,-44,101,-66,177,-66v25,0,50,3,74,10v24,7,45,18,64,33v19,15,34,36,45,62v11,26,17,58,17,97v0,14,-1,29,-3,45v-2,16,-4,33,-7,50r-300,0v2,42,13,74,33,95v20,21,51,32,95,32v27,0,51,-4,73,-12v22,-8,39,-17,50,-26xm271,-410v-34,0,-59,10,-75,30v-16,20,-27,48,-30,82r186,0v3,-36,-2,-64,-16,-83v-14,-19,-36,-29,-65,-29","w":508,"k":{")":13,"]":13,"}":13,"*":22,"c":5,"e":5,"g":5,"o":5,"q":5,"v":14,"y":14,"w":5,"x":21,"z":5,"\"":50,"'":50}},"f":{"d":"11,-500r69,0r0,-28v0,-63,13,-110,40,-138v27,-28,65,-42,116,-42v53,0,98,6,133,19r-25,104v-15,-5,-28,-9,-40,-11v-12,-2,-24,-2,-37,-2v-13,0,-23,2,-31,6v-8,4,-14,10,-18,18v-4,8,-5,20,-6,32v-1,12,-2,26,-2,42r110,0r0,110r-110,0r0,390r-130,0r0,-390r-69,0r0,-110","w":321,"k":{"}":-60,"]":-60,")":-60,"*":-33,",":20,".":20,"c":5,"e":5,"g":5,"o":5,"q":5,"t":8,"v":13,"y":13,"w":10,"\"":-33,"'":-33}},"g":{"d":"480,0v0,73,-20,126,-59,160v-39,34,-94,52,-165,52v-48,0,-86,-3,-114,-10v-28,-7,-48,-14,-62,-21r27,-103v15,6,33,12,53,18v20,6,46,9,76,9v45,0,76,-9,92,-29v16,-20,25,-48,25,-83r0,-32r-4,0v-23,31,-65,47,-124,47v-65,0,-113,-20,-145,-60v-32,-40,-47,-103,-47,-188v0,-89,21,-157,64,-203v43,-46,105,-69,186,-69v43,0,81,3,115,9v34,6,61,13,82,21r0,482xm260,-96v25,0,44,-6,58,-17v14,-11,25,-28,32,-51r0,-225v-21,-9,-46,-13,-77,-13v-33,0,-59,13,-78,38v-19,25,-28,64,-28,119v0,49,8,86,24,111v16,25,39,38,69,38","w":536},"h":{"d":"363,0r0,-284v0,-41,-6,-70,-17,-88v-11,-18,-32,-27,-62,-27v-22,0,-42,8,-60,23v-18,15,-31,34,-37,57r0,319r-130,0r0,-700r130,0r0,256r4,0v16,-21,36,-38,59,-51v23,-13,53,-19,89,-19v25,0,48,3,67,10v19,7,35,18,48,33v13,15,24,37,30,63v6,26,9,58,9,97r0,311r-130,0","w":545},"i":{"d":"49,-641v0,-19,7,-35,21,-49v14,-14,35,-21,60,-21v25,0,46,7,62,21v16,14,23,30,23,49v0,19,-7,36,-23,49v-16,13,-37,19,-62,19v-25,0,-46,-6,-60,-19v-14,-13,-21,-30,-21,-49xm68,-500r130,0r0,500r-130,0r0,-500","w":269},"j":{"d":"51,-641v0,-19,7,-35,21,-49v14,-14,35,-21,60,-21v25,0,46,7,62,21v16,14,23,30,23,49v0,19,-7,36,-23,49v-16,13,-37,19,-62,19v-25,0,-46,-6,-60,-19v-14,-13,-21,-30,-21,-49xm69,-500r130,0r0,521v0,61,-12,107,-36,139v-24,32,-62,48,-115,48v-20,0,-41,-2,-64,-7r0,-109r7,0v0,0,4,1,6,1v30,0,50,-10,59,-29v9,-19,13,-46,13,-80r0,-484","w":268},"k":{"d":"222,-207r-35,0r0,207r-130,0r0,-700r130,0r0,413r30,-14r114,-199r143,0r-120,190r-51,38r55,39r135,233r-149,0","w":491,"k":{"q":24,"o":24,"g":24,"e":24,"c":24," ":30,"-":38,"v":-14,"y":-14,"x":8}},"l":{"d":"191,-168v0,23,3,40,9,51v6,11,16,16,29,16v8,0,15,-1,23,-2v8,-1,18,-4,29,-9r14,102v-11,5,-27,11,-49,16v-22,5,-45,8,-68,8v-38,0,-67,-8,-87,-26v-20,-18,-30,-47,-30,-88r0,-600r130,0r0,532","w":294},"m":{"d":"341,0r0,-272v0,-46,-4,-79,-13,-98v-9,-19,-27,-29,-54,-29v-23,0,-41,7,-55,19v-14,12,-25,28,-32,47r0,333r-130,0r0,-500r101,0r15,66r4,0v15,-21,35,-40,59,-56v24,-16,54,-24,91,-24v32,0,59,7,79,20v20,13,36,34,47,65v15,-26,35,-47,59,-62v24,-15,53,-23,87,-23v28,0,51,3,71,10v20,7,36,18,48,34v12,16,22,39,28,66v6,27,9,62,9,104r0,300r-130,0r0,-281v0,-39,-5,-69,-13,-89v-8,-20,-26,-29,-55,-29v-23,0,-41,6,-55,19v-14,13,-24,30,-31,52r0,328r-130,0","w":805},"n":{"d":"363,0r0,-284v0,-41,-5,-70,-17,-88v-12,-18,-32,-27,-60,-27v-25,0,-45,7,-62,21v-17,14,-30,33,-37,54r0,324r-130,0r0,-500r103,0r15,66r4,0v15,-21,36,-40,61,-56v25,-16,58,-24,98,-24v25,0,47,3,66,10v19,7,36,18,49,33v13,15,23,37,30,63v7,26,10,58,10,97r0,311r-130,0","w":545,"k":{"T":114}},"o":{"d":"33,-250v0,-85,21,-150,62,-196v41,-46,99,-68,174,-68v40,0,75,6,104,19v29,13,54,30,73,53v19,23,34,51,44,84v10,33,14,69,14,108v0,85,-21,150,-62,196v-41,46,-98,68,-173,68v-40,0,-75,-6,-104,-19v-29,-13,-53,-30,-73,-53v-20,-23,-34,-51,-44,-84v-10,-33,-15,-69,-15,-108xm167,-250v0,22,2,42,6,61v4,19,10,35,18,49v8,14,18,24,31,32v13,8,29,12,47,12v34,0,59,-12,76,-37v17,-25,25,-64,25,-117v0,-46,-8,-84,-23,-112v-15,-28,-41,-42,-78,-42v-32,0,-57,12,-75,36v-18,24,-27,63,-27,118","w":537,"k":{"f":12,")":17,"]":17,"}":17,"*":20,",":10,".":10,"v":12,"y":12,"w":9,"x":24,"z":8,"\"":74,"'":74}},"p":{"d":"57,-500r95,0r15,60r4,0v17,-25,37,-44,61,-56v24,-12,53,-18,87,-18v63,0,110,20,141,60v31,40,47,103,47,191v0,43,-5,81,-15,115v-10,34,-24,64,-44,88v-20,24,-44,42,-72,55v-28,13,-61,19,-98,19v-21,0,-38,-1,-51,-4v-13,-3,-27,-8,-40,-15r0,205r-130,0r0,-700xm280,-404v-25,0,-46,6,-60,19v-14,13,-25,32,-33,57r0,208v9,7,20,14,31,18v11,4,25,6,43,6v37,0,65,-14,84,-40v19,-26,28,-69,28,-130v0,-44,-7,-78,-22,-102v-15,-24,-38,-36,-71,-36","w":540,"k":{"f":12,")":17,"]":17,"}":17,"*":20,",":10,".":10,"v":12,"y":12,"w":9,"x":24,"z":8,"\"":74,"'":74}},"q":{"d":"480,200r-130,0r0,-243r-4,0v-11,17,-27,31,-46,41v-19,10,-44,16,-75,16v-62,0,-110,-21,-143,-63v-33,-42,-49,-106,-49,-191v0,-89,22,-157,67,-203v45,-46,110,-69,194,-69v18,0,36,0,54,2v18,2,36,5,52,8v16,3,31,6,45,10v14,4,26,7,35,10r0,682xm260,-96v25,0,44,-6,58,-17v14,-11,25,-28,32,-51r0,-225v-10,-5,-21,-9,-34,-11v-13,-2,-27,-2,-43,-2v-35,0,-61,13,-79,40v-18,27,-27,66,-27,117v0,49,8,86,24,111v16,25,39,38,69,38","w":536},"r":{"d":"333,-378v-21,-7,-39,-11,-56,-11v-23,0,-43,7,-59,19v-16,12,-26,28,-31,47r0,323r-130,0r0,-500r101,0r15,66r4,0v11,-25,27,-44,46,-57v19,-13,42,-20,68,-20v17,0,37,4,59,11","w":351,"k":{",":30,".":30,"t":-30}},"s":{"d":"264,-138v0,-13,-6,-24,-17,-32v-11,-8,-25,-15,-42,-22v-17,-7,-35,-13,-55,-20v-20,-7,-38,-18,-55,-30v-17,-12,-31,-27,-42,-46v-11,-19,-17,-44,-17,-74v0,-49,15,-87,44,-113v29,-26,72,-39,127,-39v38,0,72,4,103,12v31,8,55,17,72,27r-29,94v-15,-6,-35,-12,-58,-19v-23,-7,-47,-10,-71,-10v-39,0,-58,15,-58,45v0,12,6,22,17,29v11,7,25,14,42,20r55,21v20,7,38,17,55,29v17,12,31,26,42,45v11,19,17,43,17,72v0,51,-16,90,-48,119v-32,29,-81,44,-146,44v-35,0,-69,-5,-100,-14v-31,-9,-56,-19,-75,-31r36,-97v15,9,36,18,61,26v25,8,51,12,78,12v19,0,34,-4,46,-11v12,-7,18,-20,18,-37","w":422},"t":{"d":"5,-500r69,0r0,-94r130,-37r0,131r122,0r0,110r-122,0r0,192v0,35,3,59,10,74v7,15,21,23,40,23v13,0,24,-1,34,-4v10,-3,21,-7,33,-12r23,100v-18,9,-39,16,-63,22v-24,6,-48,9,-73,9v-46,0,-80,-12,-102,-36v-22,-24,-32,-62,-32,-116r0,-252r-69,0r0,-110","w":349,"k":{")":10,"]":10,"}":10,"-":16,",":-10,".":-10,"c":5,"e":5,"g":5,"o":5,"q":5,"t":7,"v":23,"y":23,"w":17,"x":8,"\"":10,"'":10}},"u":{"d":"182,-500r0,284v0,41,4,70,14,88v10,18,29,27,57,27v25,0,45,-7,61,-22v16,-15,29,-33,37,-54r0,-323r130,0r0,348v0,27,1,54,4,80v3,26,7,51,12,72r-98,0r-23,-74r-4,0v-15,25,-37,46,-64,63v-27,17,-60,25,-97,25v-25,0,-48,-3,-68,-10v-20,-7,-37,-18,-50,-33v-13,-15,-24,-36,-31,-62v-7,-26,-10,-59,-10,-98r0,-311r130,0","w":538},"v":{"d":"230,-238r17,77r5,0r14,-79r85,-260r140,0r-209,505r-79,0r-217,-505r151,0","w":477,"k":{" ":36,"*":-22,",":72,".":72,"c":7,"e":7,"g":7,"o":7,"q":7,"t":17,"v":-41,"y":-41,"w":-33,"x":-8}},"w":{"d":"419,-500r91,256r18,83r4,0r14,-84r64,-255r119,0r-154,505r-96,0r-101,-280r-13,-63r-5,0r-12,64r-96,279r-99,0r-161,-505r141,0r73,251r12,89r5,0r17,-90r83,-250r96,0","w":721,"k":{" ":24,",":55,".":55,"c":9,"e":9,"g":9,"o":9,"q":9,"t":10,"v":-33,"y":-33,"w":-22,"z":8}},"x":{"d":"170,-256r-150,-244r155,0r65,107r28,70r30,-70r68,-107r141,0r-151,240r161,260r-151,0r-77,-120r-30,-74r-32,74r-77,120r-142,0","w":525,"k":{" ":30,"-":38,"c":24,"e":24,"g":24,"o":24,"q":24,"v":-14,"y":-14,"x":8}},"y":{"d":"239,-219r18,78r6,0r13,-79r76,-280r134,0r-152,451v-13,37,-24,72,-36,103v-12,31,-25,57,-39,80v-14,23,-30,40,-47,52v-17,12,-37,19,-60,19v-35,0,-62,-6,-83,-17r24,-104v10,4,20,6,30,6v15,0,31,-7,45,-20v14,-13,25,-36,32,-70r-209,-500r156,0","w":478,"k":{" ":36,"*":-22,",":72,".":72,"c":7,"e":7,"g":7,"o":7,"q":7,"t":17,"v":-41,"y":-41,"w":-33,"x":-8}},"z":{"d":"31,-110r197,-237r51,-43r-248,0r0,-110r392,0r0,110r-195,241r-50,39r245,0r0,110r-392,0r0,-110","w":458,"k":{" ":30,"-":40,"c":8,"e":8,"g":8,"o":8,"q":8,"t":13,"\"":13,"'":13}},"{":{"d":"123,-96v0,-34,-7,-57,-21,-70v-14,-13,-34,-19,-59,-19r0,-100v25,0,45,-7,59,-21v14,-14,21,-35,21,-64r0,-209v0,-36,8,-65,25,-88v17,-23,45,-34,82,-34r120,0r0,110r-50,0v-18,0,-32,5,-40,14v-8,9,-12,25,-12,46r0,195v0,29,-7,51,-21,66v-14,15,-30,25,-49,28r0,10v18,3,34,13,48,30v14,17,22,40,22,68r0,194v0,21,4,37,12,46v8,9,22,14,41,14r49,0r0,110r-120,0v-35,0,-62,-11,-80,-32v-18,-21,-27,-50,-27,-89r0,-205","w":371,"k":{"-":35,",":30,".":30,"A":17,"C":17,"G":17,"O":17,"Q":17,"c":17,"e":17,"g":17,"o":17,"q":17,"t":10}},"|":{"d":"60,-700r107,0r0,830r-107,0r0,-830","w":227},"}":{"d":"261,-375v0,34,7,57,21,70v14,13,34,19,59,19r0,100v-25,0,-45,6,-59,20v-14,14,-21,36,-21,65r0,209v0,36,-9,65,-27,88v-18,23,-45,34,-82,34r-117,0r0,-110r50,0v18,0,31,-5,39,-14v8,-9,13,-24,13,-46r0,-195v0,-29,7,-52,21,-67v14,-15,30,-24,49,-27r0,-10v-18,-3,-35,-13,-49,-30v-14,-17,-21,-40,-21,-68r0,-194v0,-21,-4,-35,-12,-45v-8,-10,-22,-15,-41,-15r-49,0r0,-110r119,0v35,0,62,10,80,31v18,21,27,51,27,90r0,205","w":371},"~":{"d":"28,-378v31,-25,59,-42,84,-52v25,-10,49,-15,70,-15v19,0,37,3,54,9v17,6,33,12,48,18v23,10,24,10,46,18v15,6,30,8,45,8v12,0,24,-2,37,-6v13,-4,26,-12,40,-23r47,103v-24,18,-46,31,-66,38v-20,7,-39,11,-56,11v-19,0,-36,-3,-52,-9v-16,-6,-32,-13,-47,-20v-15,-7,-30,-14,-45,-20v-15,-6,-32,-9,-49,-9v-16,0,-34,4,-52,11v-18,7,-38,19,-60,38","w":527},"\u00a0":{"w":253,"k":{"*":35,"-":44,",":70,".":70,"A":40,"C":13,"G":13,"O":13,"Q":13,"T":36,"V":30,"W":25,"X":30,"Y":30,"Z":11,"v":20,"y":20,"w":13,"x":17,"\"":84,"'":84}}}});

/*
 * jQuery Easing v1.1 - http://gsgd.co.uk/sandbox/jquery.easing.php
 *
 * Uses the built in easing capabilities added in jQuery 1.1
 * to offer multiple easing options
 *
 * Copyright (c) 2007 George Smith
 * Licensed under the MIT License:
 *   http://www.opensource.org/licenses/mit-license.php
 */
jQuery.easing={easein:function(x,t,b,c,d){return c*(t/=d)*t+b},easeinout:function(x,t,b,c,d){if(t<d/2)return 2*c*t*t/(d*d)+b;var a=t-d/2;return-2*c*a*a/(d*d)+2*c*a/d+c/2+b},easeout:function(x,t,b,c,d){return-c*t*t/(d*d)+2*c*t/d+b},expoin:function(x,t,b,c,d){var a=1;if(c<0){a*=-1;c*=-1}return a*(Math.exp(Math.log(c)/d*t))+b},expoout:function(x,t,b,c,d){var a=1;if(c<0){a*=-1;c*=-1}return a*(-Math.exp(-Math.log(c)/d*(t-d))+c+1)+b},expoinout:function(x,t,b,c,d){var a=1;if(c<0){a*=-1;c*=-1}if(t<d/2)return a*(Math.exp(Math.log(c/2)/(d/2)*t))+b;return a*(-Math.exp(-2*Math.log(c/2)/d*(t-d))+c+1)+b},bouncein:function(x,t,b,c,d){return c-jQuery.easing['bounceout'](x,d-t,0,c,d)+b},bounceout:function(x,t,b,c,d){if((t/=d)<(1/2.75)){return c*(7.5625*t*t)+b}else if(t<(2/2.75)){return c*(7.5625*(t-=(1.5/2.75))*t+.75)+b}else if(t<(2.5/2.75)){return c*(7.5625*(t-=(2.25/2.75))*t+.9375)+b}else{return c*(7.5625*(t-=(2.625/2.75))*t+.984375)+b}},bounceinout:function(x,t,b,c,d){if(t<d/2)return jQuery.easing['bouncein'](x,t*2,0,c,d)*.5+b;return jQuery.easing['bounceout'](x,t*2-d,0,c,d)*.5+c*.5+b},elasin:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d)==1)return b+c;if(!p)p=d*.3;if(a<Math.abs(c)){a=c;var s=p/4}else var s=p/(2*Math.PI)*Math.asin(c/a);return-(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b},elasout:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d)==1)return b+c;if(!p)p=d*.3;if(a<Math.abs(c)){a=c;var s=p/4}else var s=p/(2*Math.PI)*Math.asin(c/a);return a*Math.pow(2,-10*t)*Math.sin((t*d-s)*(2*Math.PI)/p)+c+b},elasinout:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d/2)==2)return b+c;if(!p)p=d*(.3*1.5);if(a<Math.abs(c)){a=c;var s=p/4}else var s=p/(2*Math.PI)*Math.asin(c/a);if(t<1)return-.5*(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;return a*Math.pow(2,-10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p)*.5+c+b},backin:function(x,t,b,c,d){var s=1.70158;return c*(t/=d)*t*((s+1)*t-s)+b},backout:function(x,t,b,c,d){var s=1.70158;return c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},backinout:function(x,t,b,c,d){var s=1.70158;if((t/=d/2)<1)return c/2*(t*t*(((s*=(1.525))+1)*t-s))+b;return c/2*((t-=2)*t*(((s*=(1.525))+1)*t+s)+2)+b},linear:function(x,t,b,c,d){return c*t/d+b}};jQuery.easing['jswing']=jQuery.easing['swing'];jQuery.extend(jQuery.easing,{def:'easeOutQuad',swing:function(x,t,b,c,d){return jQuery.easing[jQuery.easing.def](x,t,b,c,d)},easeInQuad:function(x,t,b,c,d){return c*(t/=d)*t+b},easeOutQuad:function(x,t,b,c,d){return-c*(t/=d)*(t-2)+b},easeInOutQuad:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t+b;return-c/2*((--t)*(t-2)-1)+b},easeInCubic:function(x,t,b,c,d){return c*(t/=d)*t*t+b},easeOutCubic:function(x,t,b,c,d){return c*((t=t/d-1)*t*t+1)+b},easeInOutCubic:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t*t+b;return c/2*((t-=2)*t*t+2)+b},easeInQuart:function(x,t,b,c,d){return c*(t/=d)*t*t*t+b},easeOutQuart:function(x,t,b,c,d){return-c*((t=t/d-1)*t*t*t-1)+b},easeInOutQuart:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t*t*t+b;return-c/2*((t-=2)*t*t*t-2)+b},easeInQuint:function(x,t,b,c,d){return c*(t/=d)*t*t*t*t+b},easeOutQuint:function(x,t,b,c,d){return c*((t=t/d-1)*t*t*t*t+1)+b},easeInOutQuint:function(x,t,b,c,d){if((t/=d/2)<1)return c/2*t*t*t*t*t+b;return c/2*((t-=2)*t*t*t*t+2)+b},easeInSine:function(x,t,b,c,d){return-c*Math.cos(t/d*(Math.PI/2))+c+b},easeOutSine:function(x,t,b,c,d){return c*Math.sin(t/d*(Math.PI/2))+b},easeInOutSine:function(x,t,b,c,d){return-c/2*(Math.cos(Math.PI*t/d)-1)+b},easeInExpo:function(x,t,b,c,d){return(t==0)?b:c*Math.pow(2,10*(t/d-1))+b},easeOutExpo:function(x,t,b,c,d){return(t==d)?b+c:c*(-Math.pow(2,-10*t/d)+1)+b},easeInOutExpo:function(x,t,b,c,d){if(t==0)return b;if(t==d)return b+c;if((t/=d/2)<1)return c/2*Math.pow(2,10*(t-1))+b;return c/2*(-Math.pow(2,-10*--t)+2)+b},easeInCirc:function(x,t,b,c,d){return-c*(Math.sqrt(1-(t/=d)*t)-1)+b},easeOutCirc:function(x,t,b,c,d){return c*Math.sqrt(1-(t=t/d-1)*t)+b},easeInOutCirc:function(x,t,b,c,d){if((t/=d/2)<1)return-c/2*(Math.sqrt(1-t*t)-1)+b;return c/2*(Math.sqrt(1-(t-=2)*t)+1)+b},easeInElastic:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d)==1)return b+c;if(!p)p=d*.3;if(a<Math.abs(c)){a=c;var s=p/4}else var s=p/(2*Math.PI)*Math.asin(c/a);return-(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b},easeOutElastic:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d)==1)return b+c;if(!p)p=d*.3;if(a<Math.abs(c)){a=c;var s=p/4}else var s=p/(2*Math.PI)*Math.asin(c/a);return a*Math.pow(2,-10*t)*Math.sin((t*d-s)*(2*Math.PI)/p)+c+b},easeInOutElastic:function(x,t,b,c,d){var s=1.70158;var p=0;var a=c;if(t==0)return b;if((t/=d/2)==2)return b+c;if(!p)p=d*(.3*1.5);if(a<Math.abs(c)){a=c;var s=p/4}else var s=p/(2*Math.PI)*Math.asin(c/a);if(t<1)return-.5*(a*Math.pow(2,10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p))+b;return a*Math.pow(2,-10*(t-=1))*Math.sin((t*d-s)*(2*Math.PI)/p)*.5+c+b},easeInBack:function(x,t,b,c,d,s){if(s==undefined)s=1.70158;return c*(t/=d)*t*((s+1)*t-s)+b},easeOutBack:function(x,t,b,c,d,s){if(s==undefined)s=1.70158;return c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},easeInOutBack:function(x,t,b,c,d,s){if(s==undefined)s=1.70158;if((t/=d/2)<1)return c/2*(t*t*(((s*=(1.525))+1)*t-s))+b;return c/2*((t-=2)*t*(((s*=(1.525))+1)*t+s)+2)+b},easeInBounce:function(x,t,b,c,d){return c-jQuery.easing.easeOutBounce(x,d-t,0,c,d)+b},easeOutBounce:function(x,t,b,c,d){if((t/=d)<(1/2.75)){return c*(7.5625*t*t)+b}else if(t<(2/2.75)){return c*(7.5625*(t-=(1.5/2.75))*t+.75)+b}else if(t<(2.5/2.75)){return c*(7.5625*(t-=(2.25/2.75))*t+.9375)+b}else{return c*(7.5625*(t-=(2.625/2.75))*t+.984375)+b}},easeInOutBounce:function(x,t,b,c,d){if(t<d/2)return jQuery.easing.easeInBounce(x,t*2,0,c,d)*.5+b;return jQuery.easing.easeOutBounce(x,t*2-d,0,c,d)*.5+c*.5+b}});
/**
 * LavaLamp - A menu plugin for jQuery with cool hover effects.
 * @requires jQuery v1.1.3.1 or above
 *
 * http://gmarwaha.com/blog/?p=7
 *
 * Copyright (c) 2007 Ganeshji Marwaha (gmarwaha.com)
 * Dual licensed under the MIT and GPL licenses:
 * http://www.opensource.org/licenses/mit-license.php
 * http://www.gnu.org/licenses/gpl.html
 *
 * Version: 0.2.0
 * Requires Jquery 1.2.1 from version 0.2.0 onwards. 
 * For jquery 1.1.x, use version 0.1.0 of lavalamp
 */

(function($) {
$.fn.lavaLamp = function(o) {
    o = $.extend({ fx: "linear", speed: 500, click: function(){} }, o || {});

    return this.each(function() {
        var me = $(this), noop = function(){},
            $back = $('<li class="back"><div class="left"></div></li>').appendTo(me),
            $li = $("li", this), curr = $("li.current", this)[0] || $($li[0]).addClass("current")[0];

        $li.not(".back").hover(function() {
            move(this);
        }, noop);

        $(this).hover(noop, function() {
            move(curr);
        });

        $li.click(function(e) {
            setCurr(this);
            return o.click.apply(this, [e, this]);
        });

        setCurr(curr);

        function setCurr(el) {
            $back.css({ "left": el.offsetLeft+"px", "width": el.offsetWidth+"px" });
            curr = el;
        };

        function move(el) {
            $back.each(function() {
                $(this).dequeue(); }
            ).animate({
                width: el.offsetWidth,
                left: el.offsetLeft
            }, o.speed, o.fx);
        };

    });
};
})(jQuery);
/*
 * jQuery.SerialScroll - Animated scrolling of series
 * Copyright (c) 2007-2009 Ariel Flesler - aflesler(at)gmail(dot)com | http://flesler.blogspot.com
 * Dual licensed under MIT and GPL.
 * Date: 06/14/2009
 * @author Ariel Flesler
 * @version 1.2.2
 * http://flesler.blogspot.com/2008/02/jqueryserialscroll.html
 */
;(function(a){var b=a.serialScroll=function(c){return a(window).serialScroll(c)};b.defaults={duration:1e3,axis:"x",event:"click",start:0,step:1,lock:!0,cycle:!0,constant:!0};a.fn.serialScroll=function(c){return this.each(function(){var t=a.extend({},b.defaults,c),s=t.event,i=t.step,r=t.lazy,e=t.target?this:document,u=a(t.target||this,e),p=u[0],m=t.items,h=t.start,g=t.interval,k=t.navigation,l;if(!r){m=d()}if(t.force){f({},h)}a(t.prev||[],e).bind(s,-i,q);a(t.next||[],e).bind(s,i,q);if(!p.ssbound){u.bind("prev.serialScroll",-i,q).bind("next.serialScroll",i,q).bind("goto.serialScroll",f)}if(g){u.bind("start.serialScroll",function(v){if(!g){o();g=!0;n()}}).bind("stop.serialScroll",function(){o();g=!1})}u.bind("notify.serialScroll",function(x,w){var v=j(w);if(v>-1){h=v}});p.ssbound=!0;if(t.jump){(r?u:d()).bind(s,function(v){f(v,j(v.target))})}if(k){k=a(k,e).bind(s,function(v){v.data=Math.round(d().length/k.length)*k.index(this);f(v,this)})}function q(v){v.data+=h;f(v,this)}function f(B,z){if(!isNaN(z)){B.data=z;z=p}var C=B.data,v,D=B.type,A=t.exclude?d().slice(0,-t.exclude):d(),y=A.length,w=A[C],x=t.duration;if(D){B.preventDefault()}if(g){o();l=setTimeout(n,t.interval)}if(!w){v=C<0?0:y-1;if(h!=v){C=v}else{if(!t.cycle){return}else{C=y-v-1}}w=A[C]}if(!w||t.lock&&u.is(":animated")||D&&t.onBefore&&t.onBefore(B,w,u,d(),C)===!1){return}if(t.stop){u.queue("fx",[]).stop()}if(t.constant){x=Math.abs(x/i*(h-C))}u.scrollTo(w,x,t).trigger("notify.serialScroll",[C])}function n(){u.trigger("next.serialScroll")}function o(){clearTimeout(l)}function d(){return a(m,p)}function j(w){if(!isNaN(w)){return w}var x=d(),v;while((v=x.index(w))==-1&&w!=p){w=w.parentNode}return v}})}})(jQuery);
;(function(c){var a=c.scrollTo=function(f,e,d){c(window).scrollTo(f,e,d)};a.defaults={axis:"xy",duration:parseFloat(c.fn.jquery)>=1.3?0:1};a.window=function(d){return c(window)._scrollable()};c.fn._scrollable=function(){return this.map(function(){var e=this,d=!e.nodeName||c.inArray(e.nodeName.toLowerCase(),["iframe","#document","html","body"])!=-1;if(!d){return e}var f=(e.contentWindow||e).document||e.ownerDocument||e;return c.browser.safari||f.compatMode=="BackCompat"?f.body:f.documentElement})};c.fn.scrollTo=function(f,e,d){if(typeof e=="object"){d=e;e=0}if(typeof d=="function"){d={onAfter:d}}if(f=="max"){f=9000000000}d=c.extend({},a.defaults,d);e=e||d.speed||d.duration;d.queue=d.queue&&d.axis.length>1;if(d.queue){e/=2}d.offset=b(d.offset);d.over=b(d.over);return this._scrollable().each(function(){var l=this,j=c(l),k=f,i,g={},m=j.is("html,body");switch(typeof k){case"number":case"string":if(/^([+-]=)?\d+(\.\d+)?(px|%)?$/.test(k)){k=b(k);break}k=c(k,this);case"object":if(k.is||k.style){i=(k=c(k)).offset()}}c.each(d.axis.split(""),function(q,r){var s=r=="x"?"Left":"Top",u=s.toLowerCase(),p="scroll"+s,o=l[p],n=a.max(l,r);if(i){g[p]=i[u]+(m?0:o-j.offset()[u]);if(d.margin){g[p]-=parseInt(k.css("margin"+s))||0;g[p]-=parseInt(k.css("border"+s+"Width"))||0}g[p]+=d.offset[u]||0;if(d.over[u]){g[p]+=k[r=="x"?"width":"height"]()*d.over[u]}}else{var t=k[u];g[p]=t.slice&&t.slice(-1)=="%"?parseFloat(t)/100*n:t}if(/^\d+$/.test(g[p])){g[p]=g[p]<=0?0:Math.min(g[p],n)}if(!q&&d.queue){if(o!=g[p]){h(d.onAfterFirst)}delete g[p]}});h(d.onAfter);function h(n){j.animate(g,e,d.easing,n&&function(){n.call(this,f,d)})}}).end()};a.max=function(j,i){var h=i=="x"?"Width":"Height",e="scroll"+h;if(!c(j).is("html,body")){return j[e]-c(j)[h.toLowerCase()]()}var g="client"+h,f=j.ownerDocument.documentElement,d=j.ownerDocument.body;return Math.max(f[e],d[e])-Math.min(f[g],d[g])};function b(d){return typeof d=="object"?d:{top:d,left:d}}})(jQuery);



