From e1f7d16cbf2b531532e87145c3c361ce682a51f1 Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 14 Aug 2013 21:51:30 +0200 Subject: [PATCH] Update build script, build distribution --- create_build_script.js | 1 + dist/all.js | 1595 ++++++++++++++++++++-------------------- dist/all.min.js | 8 +- dist/all.min.js.gz | Bin 49951 -> 50009 bytes 4 files changed, 806 insertions(+), 798 deletions(-) diff --git a/create_build_script.js b/create_build_script.js index 8b2ccf90..4cd600f2 100644 --- a/create_build_script.js +++ b/create_build_script.js @@ -5,6 +5,7 @@ var modules = [ 'text', 'cufon', 'gestures', + 'animation', 'easing', 'parser', 'freedrawing', diff --git a/dist/all.js b/dist/all.js index 0e40b3dd..bc014d95 100644 --- a/dist/all.js +++ b/dist/all.js @@ -8422,6 +8422,13 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab */ targetFindTolerance: 0, + /** + * When true, target detection is skipped when hovering over canvas. This can be used to improve performance. + * @type Boolean + * @default + */ + skipTargetFind: false, + /** * @private */ @@ -9009,6 +9016,7 @@ fabric.PatternBrush = fabric.util.createClass(fabric.PencilBrush, /** @lends fab * @param {Boolean} skipGroup when true, group is skipped and only objects are traversed through */ findTarget: function (e, skipGroup) { + if (this.skipTargetFind) return; var target, pointer = this.getPointer(e); @@ -15947,57 +15955,25 @@ fabric.Image.filters = fabric.Image.filters || { }; /** - * Brightness filter class - * @class fabric.Image.filters.Brightness + * Root filter class from which all filter classes inherit from + * @class fabric.Image.filters.BaseFilter * @memberOf fabric.Image.filters */ -fabric.Image.filters.Brightness = fabric.util.createClass(/** @lends fabric.Image.filters.Brightness.prototype */ { +fabric.Image.filters.BaseFilter = fabric.util.createClass(/** @lends fabric.Image.filters.BaseFilter.prototype */ { /** * Filter type * @param {String} type * @default */ - type: 'Brightness', - - /** - * Constructor - * @memberOf fabric.Image.filters.Brightness.prototype - * @param {Object} [options] Options object - */ - initialize: function(options) { - options = options || { }; - this.brightness = options.brightness || 100; - }, - - /** - * Applies filter to canvas element - * @param {Object} canvasEl Canvas element to apply filter to - */ - applyTo: function(canvasEl) { - var context = canvasEl.getContext('2d'), - imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), - data = imageData.data, - brightness = this.brightness; - - for (var i = 0, len = data.length; i < len; i += 4) { - data[i] += brightness; - data[i + 1] += brightness; - data[i + 2] += brightness; - } - - context.putImageData(imageData, 0, 0); - }, + type: 'BaseFilter', /** * Returns object representation of an instance * @return {Object} Object representation of an instance */ toObject: function() { - return { - type: this.type, - brightness: this.brightness - }; + return { type: this.type }; }, /** @@ -16010,830 +15986,863 @@ fabric.Image.filters.Brightness = fabric.util.createClass(/** @lends fabric.Imag } }); -/** - * Returns filter instance from an object representation - * @static - * @param {Object} object Object to create an instance from - * @return {fabric.Image.filters.Brightness} Instance of fabric.Image.filters.Brightness - */ -fabric.Image.filters.Brightness.fromObject = function(object) { - return new fabric.Image.filters.Brightness(object); -}; +(function(global) { -/** - * Adapted from html5rocks article - * @class fabric.Image.filters.Convolute - * @memberOf fabric.Image.filters - */ -fabric.Image.filters.Convolute = fabric.util.createClass(/** @lends fabric.Image.filters.Convolute.prototype */ { + "use strict"; + + var fabric = global.fabric || (global.fabric = { }), + extend = fabric.util.object.extend; /** - * Filter type - * @param {String} type - * @default + * Brightness filter class + * @class fabric.Image.filters.Brightness + * @memberOf fabric.Image.filters + * @extends fabric.Image.filters.BaseFilter */ - type: 'Convolute', + fabric.Image.filters.Brightness = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Brightness.prototype */ { + + /** + * Filter type + * @param {String} type + * @default + */ + type: 'Brightness', + + /** + * Constructor + * @memberOf fabric.Image.filters.Brightness.prototype + * @param {Object} [options] Options object + */ + initialize: function(options) { + options = options || { }; + this.brightness = options.brightness || 100; + }, + + /** + * Applies filter to canvas element + * @param {Object} canvasEl Canvas element to apply filter to + */ + applyTo: function(canvasEl) { + var context = canvasEl.getContext('2d'), + imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), + data = imageData.data, + brightness = this.brightness; + + for (var i = 0, len = data.length; i < len; i += 4) { + data[i] += brightness; + data[i + 1] += brightness; + data[i + 2] += brightness; + } + + context.putImageData(imageData, 0, 0); + }, + + /** + * Returns object representation of an instance + * @return {Object} Object representation of an instance + */ + toObject: function() { + return extend(this.callSuper('toObject'), { + brightness: this.brightness + }); + } + }); /** - * Constructor - * @memberOf fabric.Image.filters.Convolute.prototype - * @param {Object} [options] Options object + * Returns filter instance from an object representation + * @static + * @param {Object} object Object to create an instance from + * @return {fabric.Image.filters.Brightness} Instance of fabric.Image.filters.Brightness */ - initialize: function(options) { - options = options || { }; + fabric.Image.filters.Brightness.fromObject = function(object) { + return new fabric.Image.filters.Brightness(object); + }; - this.opaque = options.opaque; - this.matrix = options.matrix || [ 0, 0, 0, - 0, 1, 0, - 0, 0, 0 ]; +})(typeof exports !== 'undefined' ? exports : this); - var canvasEl = fabric.util.createCanvasElement(); - this.tmpCtx = canvasEl.getContext('2d'); - }, + +(function(global) { + + "use strict"; + + var fabric = global.fabric || (global.fabric = { }), + extend = fabric.util.object.extend; /** - * @private + * Adapted from html5rocks article + * @class fabric.Image.filters.Convolute + * @memberOf fabric.Image.filters + * @extends fabric.Image.filters.BaseFilter */ - _createImageData: function(w, h) { - return this.tmpCtx.createImageData(w, h); - }, + fabric.Image.filters.Convolute = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Convolute.prototype */ { + + /** + * Filter type + * @param {String} type + * @default + */ + type: 'Convolute', + + /** + * Constructor + * @memberOf fabric.Image.filters.Convolute.prototype + * @param {Object} [options] Options object + */ + initialize: function(options) { + options = options || { }; + + this.opaque = options.opaque; + this.matrix = options.matrix || [ 0, 0, 0, + 0, 1, 0, + 0, 0, 0 ]; + + var canvasEl = fabric.util.createCanvasElement(); + this.tmpCtx = canvasEl.getContext('2d'); + }, + + /** + * @private + */ + _createImageData: function(w, h) { + return this.tmpCtx.createImageData(w, h); + }, + + /** + * Applies filter to canvas element + * @param {Object} canvasEl Canvas element to apply filter to + */ + applyTo: function(canvasEl) { + var weights = this.matrix; + var context = canvasEl.getContext('2d'); + var pixels = context.getImageData(0, 0, canvasEl.width, canvasEl.height); + + var side = Math.round(Math.sqrt(weights.length)); + var halfSide = Math.floor(side/2); + var src = pixels.data; + var sw = pixels.width; + var sh = pixels.height; + + // pad output by the convolution matrix + var w = sw; + var h = sh; + var output = this._createImageData(w, h); + + var dst = output.data; + + // go through the destination image pixels + var alphaFac = this.opaque ? 1 : 0; + for (var y=0; y= 0 && scy < sh && scx >= 0 && scx < sw) { + var srcOff = (scy*sw+scx)*4; + var wt = weights[cy*side+cx]; + r += src[srcOff] * wt; + g += src[srcOff+1] * wt; + b += src[srcOff+2] * wt; + a += src[srcOff+3] * wt; + } + } + } + dst[dstOff] = r; + dst[dstOff+1] = g; + dst[dstOff+2] = b; + dst[dstOff+3] = a + alphaFac*(255-a); + } + } + + context.putImageData(output, 0, 0); + }, + + /** + * Returns object representation of an instance + * @return {Object} Object representation of an instance + */ + toObject: function() { + return extend(this.callSuper('toObject'), { + opaque: this.opaque, + matrix: this.matrix + }); + } + }); /** - * Applies filter to canvas element - * @param {Object} canvasEl Canvas element to apply filter to + * Returns filter instance from an object representation + * @static + * @param {Object} object Object to create an instance from + * @return {fabric.Image.filters.Convolute} Instance of fabric.Image.filters.Convolute */ - applyTo: function(canvasEl) { - var weights = this.matrix; - var context = canvasEl.getContext('2d'); - var pixels = context.getImageData(0, 0, canvasEl.width, canvasEl.height); + fabric.Image.filters.Convolute.fromObject = function(object) { + return new fabric.Image.filters.Convolute(object); + }; - var side = Math.round(Math.sqrt(weights.length)); - var halfSide = Math.floor(side/2); - var src = pixels.data; - var sw = pixels.width; - var sh = pixels.height; +})(typeof exports !== 'undefined' ? exports : this); - // pad output by the convolution matrix - var w = sw; - var h = sh; - var output = this._createImageData(w, h); - var dst = output.data; +(function(global) { - // go through the destination image pixels - var alphaFac = this.opaque ? 1 : 0; - for (var y=0; y= 0 && scy < sh && scx >= 0 && scx < sw) { - var srcOff = (scy*sw+scx)*4; - var wt = weights[cy*side+cx]; - r += src[srcOff] * wt; - g += src[srcOff+1] * wt; - b += src[srcOff+2] * wt; - a += src[srcOff+3] * wt; + "use strict"; + + var fabric = global.fabric || (global.fabric = { }), + extend = fabric.util.object.extend; + + /** + * GradientTransparency filter class + * @class fabric.Image.filters.GradientTransparency + * @memberOf fabric.Image.filters + * @extends fabric.Image.filters.BaseFilter + */ + fabric.Image.filters.GradientTransparency = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.GradientTransparency.prototype */ { + + /** + * Filter type + * @param {String} type + * @default + */ + type: 'GradientTransparency', + + /** + * Constructor + * @memberOf fabric.Image.filters.GradientTransparency + * @param {Object} [options] Options object + */ + initialize: function(options) { + options = options || { }; + this.threshold = options.threshold || 100; + }, + + /** + * Applies filter to canvas element + * @param {Object} canvasEl Canvas element to apply filter to + */ + applyTo: function(canvasEl) { + var context = canvasEl.getContext('2d'), + imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), + data = imageData.data, + threshold = this.threshold, + total = data.length; + + for (var i = 0, len = data.length; i < len; i += 4) { + data[i + 3] = threshold + 255 * (total - i) / total; + } + + context.putImageData(imageData, 0, 0); + }, + + /** + * Returns object representation of an instance + * @return {Object} Object representation of an instance + */ + toObject: function() { + return extend(this.callSuper('toObject'), { + threshold: this.threshold + }); + } + }); + + /** + * Returns filter instance from an object representation + * @static + * @param {Object} object Object to create an instance from + * @return {fabric.Image.filters.GradientTransparency} Instance of fabric.Image.filters.GradientTransparency + */ + fabric.Image.filters.GradientTransparency.fromObject = function(object) { + return new fabric.Image.filters.GradientTransparency(object); + }; + +})(typeof exports !== 'undefined' ? exports : this); + + +(function(global) { + + "use strict"; + + var fabric = global.fabric || (global.fabric = { }); + + /** + * Grayscale image filter class + * @class fabric.Image.filters.Grayscale + * @memberOf fabric.Image.filters + * @extends fabric.Image.filters.BaseFilter + */ + fabric.Image.filters.Grayscale = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Grayscale.prototype */ { + + /** + * Filter type + * @param {String} type + * @default + */ + type: 'Grayscale', + + /** + * Applies filter to canvas element + * @memberOf fabric.Image.filters.Grayscale.prototype + * @param {Object} canvasEl Canvas element to apply filter to + */ + applyTo: function(canvasEl) { + var context = canvasEl.getContext('2d'), + imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), + data = imageData.data, + len = imageData.width * imageData.height * 4, + index = 0, + average; + + while (index < len) { + average = (data[index] + data[index + 1] + data[index + 2]) / 3; + data[index] = average; + data[index + 1] = average; + data[index + 2] = average; + index += 4; + } + + context.putImageData(imageData, 0, 0); + } + }); + + /** + * Returns filter instance from an object representation + * @static + * @return {fabric.Image.filters.Grayscale} Instance of fabric.Image.filters.Grayscale + */ + fabric.Image.filters.Grayscale.fromObject = function() { + return new fabric.Image.filters.Grayscale(); + }; + +})(typeof exports !== 'undefined' ? exports : this); + + +(function(global) { + + "use strict"; + + var fabric = global.fabric || (global.fabric = { }); + + /** + * Invert filter class + * @class fabric.Image.filters.Invert + * @memberOf fabric.Image.filters + * @extends fabric.Image.filters.BaseFilter + */ + fabric.Image.filters.Invert = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Invert.prototype */ { + + /** + * Filter type + * @param {String} type + * @default + */ + type: 'Invert', + + /** + * Applies filter to canvas element + * @memberOf fabric.Image.filters.Invert.prototype + * @param {Object} canvasEl Canvas element to apply filter to + */ + applyTo: function(canvasEl) { + var context = canvasEl.getContext('2d'), + imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), + data = imageData.data, + iLen = data.length, i; + + for (i = 0; i < iLen; i+=4) { + data[i] = 255 - data[i]; + data[i + 1] = 255 - data[i + 1]; + data[i + 2] = 255 - data[i + 2]; + } + + context.putImageData(imageData, 0, 0); + } + }); + + /** + * Returns filter instance from an object representation + * @static + * @return {fabric.Image.filters.Invert} Instance of fabric.Image.filters.Invert + */ + fabric.Image.filters.Invert.fromObject = function() { + return new fabric.Image.filters.Invert(); + }; + +})(typeof exports !== 'undefined' ? exports : this); + + +(function(global) { + + "use strict"; + + var fabric = global.fabric || (global.fabric = { }), + extend = fabric.util.object.extend; + + /** + * Noise filter class + * @class fabric.Image.filters.Noise + * @memberOf fabric.Image.filters + * @extends fabric.Image.filters.BaseFilter + */ + fabric.Image.filters.Noise = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Noise.prototype */ { + + /** + * Filter type + * @param {String} type + * @default + */ + type: 'Noise', + + /** + * Constructor + * @memberOf fabric.Image.filters.Noise.prototype + * @param {Object} [options] Options object + */ + initialize: function(options) { + options = options || { }; + this.noise = options.noise || 100; + }, + + /** + * Applies filter to canvas element + * @param {Object} canvasEl Canvas element to apply filter to + */ + applyTo: function(canvasEl) { + var context = canvasEl.getContext('2d'), + imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), + data = imageData.data, + noise = this.noise, rand; + + for (var i = 0, len = data.length; i < len; i += 4) { + + rand = (0.5 - Math.random()) * noise; + + data[i] += rand; + data[i + 1] += rand; + data[i + 2] += rand; + } + + context.putImageData(imageData, 0, 0); + }, + + /** + * Returns object representation of an instance + * @return {Object} Object representation of an instance + */ + toObject: function() { + return extend(this.callSuper('toObject'), { + noise: this.noise + }); + } + }); + + /** + * Returns filter instance from an object representation + * @static + * @param {Object} object Object to create an instance from + * @return {fabric.Image.filters.Noise} Instance of fabric.Image.filters.Noise + */ + fabric.Image.filters.Noise.fromObject = function(object) { + return new fabric.Image.filters.Noise(object); + }; + +})(typeof exports !== 'undefined' ? exports : this); + + +(function(global) { + + "use strict"; + + var fabric = global.fabric || (global.fabric = { }), + extend = fabric.util.object.extend; + + /** + * Pixelate filter class + * @class fabric.Image.filters.Pixelate + * @memberOf fabric.Image.filters + * @extends fabric.Image.filters.BaseFilter + */ + fabric.Image.filters.Pixelate = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Pixelate.prototype */ { + + /** + * Filter type + * @param {String} type + * @default + */ + type: 'Pixelate', + + /** + * Constructor + * @memberOf fabric.Image.filters.Pixelate.prototype + * @param {Object} [options] Options object + */ + initialize: function(options) { + options = options || { }; + this.blocksize = options.blocksize || 4; + }, + + /** + * Applies filter to canvas element + * @param {Object} canvasEl Canvas element to apply filter to + */ + applyTo: function(canvasEl) { + var context = canvasEl.getContext('2d'), + imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), + data = imageData.data, + iLen = imageData.height, + jLen = imageData.width, + index, i, j, r, g, b, a; + + for (i = 0; i < iLen; i += this.blocksize) { + for (j = 0; j < jLen; j += this.blocksize) { + + index = (i * 4) * jLen + (j * 4); + + r = data[index]; + g = data[index+1]; + b = data[index+2]; + a = data[index+3]; + + /* + blocksize: 4 + + [1,x,x,x,1] + [x,x,x,x,1] + [x,x,x,x,1] + [x,x,x,x,1] + [1,1,1,1,1] + */ + + for (var _i = i, _ilen = i + this.blocksize; _i < _ilen; _i++) { + for (var _j = j, _jlen = j + this.blocksize; _j < _jlen; _j++) { + index = (_i * 4) * jLen + (_j * 4); + data[index] = r; + data[index + 1] = g; + data[index + 2] = b; + data[index + 3] = a; } } } - dst[dstOff] = r; - dst[dstOff+1] = g; - dst[dstOff+2] = b; - dst[dstOff+3] = a + alphaFac*(255-a); } + + context.putImageData(imageData, 0, 0); + }, + + /** + * Returns object representation of an instance + * @return {Object} Object representation of an instance + */ + toObject: function() { + return extend(this.callSuper('toObject'), { + blocksize: this.blocksize + }); } - - context.putImageData(output, 0, 0); - }, + }); /** - * Returns object representation of an instance - * @return {Object} Object representation of an instance + * Returns filter instance from an object representation + * @static + * @param {Object} object Object to create an instance from + * @return {fabric.Image.filters.Pixelate} Instance of fabric.Image.filters.Pixelate */ - toObject: function() { - return { - type: this.type, - opaque: this.opaque, - matrix: this.matrix - }; - }, + fabric.Image.filters.Pixelate.fromObject = function(object) { + return new fabric.Image.filters.Pixelate(object); + }; + +})(typeof exports !== 'undefined' ? exports : this); + + +(function(global) { + + "use strict"; + + var fabric = global.fabric || (global.fabric = { }), + extend = fabric.util.object.extend; /** - * Returns a JSON representation of an instance - * @return {Object} JSON + * Remove white filter class + * @class fabric.Image.filters.RemoveWhite + * @memberOf fabric.Image.filters + * @extends fabric.Image.filters.BaseFilter */ - toJSON: function() { - // delegate, not alias - return this.toObject(); - } -}); + fabric.Image.filters.RemoveWhite = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.RemoveWhite.prototype */ { -/** - * Returns filter instance from an object representation - * @static - * @param {Object} object Object to create an instance from - * @return {fabric.Image.filters.Convolute} Instance of fabric.Image.filters.Convolute - */ -fabric.Image.filters.Convolute.fromObject = function(object) { - return new fabric.Image.filters.Convolute(object); -}; + /** + * Filter type + * @param {String} type + * @default + */ + type: 'RemoveWhite', + /** + * Constructor + * @memberOf fabric.Image.filters.RemoveWhite.prototype + * @param {Object} [options] Options object + */ + initialize: function(options) { + options = options || { }; + this.threshold = options.threshold || 30; + this.distance = options.distance || 20; + }, -/** - * GradientTransparency filter class - * @class fabric.Image.filters.GradientTransparency - * @memberOf fabric.Image.filters - */ -fabric.Image.filters.GradientTransparency = fabric.util.createClass(/** @lends fabric.Image.filters.GradientTransparency.prototype */ { + /** + * Applies filter to canvas element + * @param {Object} canvasEl Canvas element to apply filter to + */ + applyTo: function(canvasEl) { + var context = canvasEl.getContext('2d'), + imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), + data = imageData.data, + threshold = this.threshold, + distance = this.distance, + limit = 255 - threshold, + abs = Math.abs, + r, g, b; - /** - * Filter type - * @param {String} type - * @default - */ - type: 'GradientTransparency', + for (var i = 0, len = data.length; i < len; i += 4) { + r = data[i]; + g = data[i+1]; + b = data[i+2]; - /** - * Constructor - * @memberOf fabric.Image.filters.GradientTransparency - * @param {Object} [options] Options object - */ - initialize: function(options) { - options = options || { }; - this.threshold = options.threshold || 100; - }, - - /** - * Applies filter to canvas element - * @param {Object} canvasEl Canvas element to apply filter to - */ - applyTo: function(canvasEl) { - var context = canvasEl.getContext('2d'), - imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), - data = imageData.data, - threshold = this.threshold, - total = data.length; - - for (var i = 0, len = data.length; i < len; i += 4) { - data[i + 3] = threshold + 255 * (total - i) / total; - } - - context.putImageData(imageData, 0, 0); - }, - - /** - * Returns object representation of an instance - * @return {Object} Object representation of an instance - */ - toObject: function() { - return { - type: this.type, - threshold: this.threshold - }; - }, - - /** - * Returns a JSON representation of an instance - * @return {Object} JSON - */ - toJSON: function() { - // delegate, not alias - return this.toObject(); - } -}); - -/** - * Returns filter instance from an object representation - * @static - * @param {Object} object Object to create an instance from - * @return {fabric.Image.filters.GradientTransparency} Instance of fabric.Image.filters.GradientTransparency - */ -fabric.Image.filters.GradientTransparency.fromObject = function(object) { - return new fabric.Image.filters.GradientTransparency(object); -}; - - -/** - * Grayscale image filter class - * @class fabric.Image.filters.Grayscale - * @memberOf fabric.Image.filters - */ -fabric.Image.filters.Grayscale = fabric.util.createClass(/** @lends fabric.Image.filters.Grayscale.prototype */ { - - /** - * Filter type - * @param {String} type - * @default - */ - type: 'Grayscale', - - /** - * Applies filter to canvas element - * @memberOf fabric.Image.filters.Grayscale.prototype - * @param {Object} canvasEl Canvas element to apply filter to - */ - applyTo: function(canvasEl) { - var context = canvasEl.getContext('2d'), - imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), - data = imageData.data, - len = imageData.width * imageData.height * 4, - index = 0, - average; - - while (index < len) { - average = (data[index] + data[index + 1] + data[index + 2]) / 3; - data[index] = average; - data[index + 1] = average; - data[index + 2] = average; - index += 4; - } - - context.putImageData(imageData, 0, 0); - }, - - /** - * Returns object representation of an instance - * @return {Object} Object representation of an instance - */ - toObject: function() { - return { type: this.type }; - }, - - /** - * Returns a JSON representation of an instance - * @return {Object} JSON - */ - toJSON: function() { - // delegate, not alias - return this.toObject(); - } -}); - -/** - * Returns filter instance from an object representation - * @static - * @return {fabric.Image.filters.Grayscale} Instance of fabric.Image.filters.Grayscale - */ -fabric.Image.filters.Grayscale.fromObject = function() { - return new fabric.Image.filters.Grayscale(); -}; - - -/** - * Invert filter class - * @class fabric.Image.filters.Invert - * @memberOf fabric.Image.filters - */ -fabric.Image.filters.Invert = fabric.util.createClass(/** @lends fabric.Image.filters.Invert.prototype */ { - - /** - * Filter type - * @param {String} type - * @default - */ - type: 'Invert', - - /** - * Applies filter to canvas element - * @memberOf fabric.Image.filters.Invert.prototype - * @param {Object} canvasEl Canvas element to apply filter to - */ - applyTo: function(canvasEl) { - var context = canvasEl.getContext('2d'), - imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), - data = imageData.data, - iLen = data.length, i; - - for (i = 0; i < iLen; i+=4) { - data[i] = 255 - data[i]; - data[i + 1] = 255 - data[i + 1]; - data[i + 2] = 255 - data[i + 2]; - } - - context.putImageData(imageData, 0, 0); - }, - - /** - * Returns object representation of an instance - * @return {Object} Object representation of an instance - */ - toObject: function() { - return { type: this.type }; - }, - - /** - * Returns a JSON representation of an instance - * @return {Object} JSON - */ - toJSON: function() { - // delegate, not alias - return this.toObject(); - } -}); - -/** - * Returns filter instance from an object representation - * @static - * @return {fabric.Image.filters.Invert} Instance of fabric.Image.filters.Invert - */ -fabric.Image.filters.Invert.fromObject = function() { - return new fabric.Image.filters.Invert(); -}; - - -/** - * Noise filter class - * @class fabric.Image.filters.Noise - * @memberOf fabric.Image.filters - */ -fabric.Image.filters.Noise = fabric.util.createClass(/** @lends fabric.Image.filters.Noise.prototype */ { - - /** - * Filter type - * @param {String} type - * @default - */ - type: 'Noise', - - /** - * Constructor - * @memberOf fabric.Image.filters.Noise.prototype - * @param {Object} [options] Options object - */ - initialize: function(options) { - options = options || { }; - this.noise = options.noise || 100; - }, - - /** - * Applies filter to canvas element - * @param {Object} canvasEl Canvas element to apply filter to - */ - applyTo: function(canvasEl) { - var context = canvasEl.getContext('2d'), - imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), - data = imageData.data, - noise = this.noise, rand; - - for (var i = 0, len = data.length; i < len; i += 4) { - - rand = (0.5 - Math.random()) * noise; - - data[i] += rand; - data[i + 1] += rand; - data[i + 2] += rand; - } - - context.putImageData(imageData, 0, 0); - }, - - /** - * Returns object representation of an instance - * @return {Object} Object representation of an instance - */ - toObject: function() { - return { - type: this.type, - noise: this.noise - }; - }, - - /** - * Returns a JSON representation of an instance - * @return {Object} JSON - */ - toJSON: function() { - // delegate, not alias - return this.toObject(); - } -}); - -/** - * Returns filter instance from an object representation - * @static - * @param {Object} object Object to create an instance from - * @return {fabric.Image.filters.Noise} Instance of fabric.Image.filters.Noise - */ -fabric.Image.filters.Noise.fromObject = function(object) { - return new fabric.Image.filters.Noise(object); -}; - - -/** - * Pixelate filter class - * @class fabric.Image.filters.Pixelate - * @memberOf fabric.Image.filters - */ -fabric.Image.filters.Pixelate = fabric.util.createClass(/** @lends fabric.Image.filters.Pixelate.prototype */ { - - /** - * Filter type - * @param {String} type - * @default - */ - type: 'Pixelate', - - /** - * Constructor - * @memberOf fabric.Image.filters.Pixelate.prototype - * @param {Object} [options] Options object - */ - initialize: function(options) { - options = options || { }; - this.blocksize = options.blocksize || 4; - }, - - /** - * Applies filter to canvas element - * @param {Object} canvasEl Canvas element to apply filter to - */ - applyTo: function(canvasEl) { - var context = canvasEl.getContext('2d'), - imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), - data = imageData.data, - iLen = imageData.height, - jLen = imageData.width, - index, i, j, r, g, b, a; - - for (i = 0; i < iLen; i += this.blocksize) { - for (j = 0; j < jLen; j += this.blocksize) { - - index = (i * 4) * jLen + (j * 4); - - r = data[index]; - g = data[index+1]; - b = data[index+2]; - a = data[index+3]; - - /* - blocksize: 4 - - [1,x,x,x,1] - [x,x,x,x,1] - [x,x,x,x,1] - [x,x,x,x,1] - [1,1,1,1,1] - */ - - for (var _i = i, _ilen = i + this.blocksize; _i < _ilen; _i++) { - for (var _j = j, _jlen = j + this.blocksize; _j < _jlen; _j++) { - index = (_i * 4) * jLen + (_j * 4); - data[index] = r; - data[index + 1] = g; - data[index + 2] = b; - data[index + 3] = a; - } + if (r > limit && + g > limit && + b > limit && + abs(r-g) < distance && + abs(r-b) < distance && + abs(g-b) < distance + ) { + data[i+3] = 1; } } + + context.putImageData(imageData, 0, 0); + }, + + /** + * Returns object representation of an instance + * @return {Object} Object representation of an instance + */ + toObject: function() { + return extend(this.callSuper('toObject'), { + threshold: this.threshold, + distance: this.distance + }); } - - context.putImageData(imageData, 0, 0); - }, + }); /** - * Returns object representation of an instance - * @return {Object} Object representation of an instance + * Returns filter instance from an object representation + * @static + * @param {Object} object Object to create an instance from + * @return {fabric.Image.filters.RemoveWhite} Instance of fabric.Image.filters.RemoveWhite */ - toObject: function() { - return { - type: this.type, - blocksize: this.blocksize - }; - }, + fabric.Image.filters.RemoveWhite.fromObject = function(object) { + return new fabric.Image.filters.RemoveWhite(object); + }; + +})(typeof exports !== 'undefined' ? exports : this); + + +(function(global) { + + "use strict"; + + var fabric = global.fabric || (global.fabric = { }); /** - * Returns a JSON representation of an instance - * @return {Object} JSON + * Sepia filter class + * @class fabric.Image.filters.Sepia + * @memberOf fabric.Image.filters + * @extends fabric.Image.filters.BaseFilter */ - toJSON: function() { - // delegate, not alias - return this.toObject(); - } -}); + fabric.Image.filters.Sepia = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Sepia.prototype */ { -/** - * Returns filter instance from an object representation - * @static - * @param {Object} object Object to create an instance from - * @return {fabric.Image.filters.Pixelate} Instance of fabric.Image.filters.Pixelate - */ -fabric.Image.filters.Pixelate.fromObject = function(object) { - return new fabric.Image.filters.Pixelate(object); -}; + /** + * Filter type + * @param {String} type + * @default + */ + type: 'Sepia', + /** + * Applies filter to canvas element + * @memberOf fabric.Image.filters.Sepia.prototype + * @param {Object} canvasEl Canvas element to apply filter to + */ + applyTo: function(canvasEl) { + var context = canvasEl.getContext('2d'), + imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), + data = imageData.data, + iLen = data.length, i, avg; -/** - * Remove white filter class - * @class fabric.Image.filters.RemoveWhite - * @memberOf fabric.Image.filters - */ -fabric.Image.filters.RemoveWhite = fabric.util.createClass(/** @lends fabric.Image.filters.RemoveWhite.prototype */ { - - /** - * Filter type - * @param {String} type - * @default - */ - type: 'RemoveWhite', - - /** - * Constructor - * @memberOf fabric.Image.filters.RemoveWhite.prototype - * @param {Object} [options] Options object - */ - initialize: function(options) { - options = options || { }; - this.threshold = options.threshold || 30; - this.distance = options.distance || 20; - }, - - /** - * Applies filter to canvas element - * @param {Object} canvasEl Canvas element to apply filter to - */ - applyTo: function(canvasEl) { - var context = canvasEl.getContext('2d'), - imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), - data = imageData.data, - threshold = this.threshold, - distance = this.distance, - limit = 255 - threshold, - abs = Math.abs, - r, g, b; - - for (var i = 0, len = data.length; i < len; i += 4) { - r = data[i]; - g = data[i+1]; - b = data[i+2]; - - if (r > limit && - g > limit && - b > limit && - abs(r-g) < distance && - abs(r-b) < distance && - abs(g-b) < distance - ) { - data[i+3] = 1; + for (i = 0; i < iLen; i+=4) { + avg = 0.3 * data[i] + 0.59 * data[i + 1] + 0.11 * data[i + 2]; + data[i] = avg + 100; + data[i + 1] = avg + 50; + data[i + 2] = avg + 255; } + + context.putImageData(imageData, 0, 0); } - - context.putImageData(imageData, 0, 0); - }, + }); /** - * Returns object representation of an instance - * @return {Object} Object representation of an instance + * Returns filter instance from an object representation + * @static + * @return {fabric.Image.filters.Sepia} Instance of fabric.Image.filters.Sepia */ - toObject: function() { - return { - type: this.type, - threshold: this.threshold, - distance: this.distance - }; - }, + fabric.Image.filters.Sepia.fromObject = function() { + return new fabric.Image.filters.Sepia(); + }; + +})(typeof exports !== 'undefined' ? exports : this); + + +(function(global) { + + "use strict"; + + var fabric = global.fabric || (global.fabric = { }); /** - * Returns a JSON representation of an instance - * @return {Object} JSON + * Sepia2 filter class + * @class fabric.Image.filters.Sepia2 + * @memberOf fabric.Image.filters + * @extends fabric.Image.filters.BaseFilter */ - toJSON: function() { - // delegate, not alias - return this.toObject(); - } -}); + fabric.Image.filters.Sepia2 = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Sepia2.prototype */ { -/** - * Returns filter instance from an object representation - * @static - * @param {Object} object Object to create an instance from - * @return {fabric.Image.filters.RemoveWhite} Instance of fabric.Image.filters.RemoveWhite - */ -fabric.Image.filters.RemoveWhite.fromObject = function(object) { - return new fabric.Image.filters.RemoveWhite(object); -}; + /** + * Filter type + * @param {String} type + * @default + */ + type: 'Sepia2', + /** + * Applies filter to canvas element + * @memberOf fabric.Image.filters.Sepia.prototype + * @param {Object} canvasEl Canvas element to apply filter to + */ + applyTo: function(canvasEl) { + var context = canvasEl.getContext('2d'), + imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), + data = imageData.data, + iLen = data.length, i, r, g, b; -/** - * Sepia filter class - * @class fabric.Image.filters.Sepia - * @memberOf fabric.Image.filters - */ -fabric.Image.filters.Sepia = fabric.util.createClass(/** @lends fabric.Image.filters.Sepia.prototype */ { + for (i = 0; i < iLen; i+=4) { + r = data[i]; + g = data[i + 1]; + b = data[i + 2]; - /** - * Filter type - * @param {String} type - * @default - */ - type: 'Sepia', - - /** - * Applies filter to canvas element - * @memberOf fabric.Image.filters.Sepia.prototype - * @param {Object} canvasEl Canvas element to apply filter to - */ - applyTo: function(canvasEl) { - var context = canvasEl.getContext('2d'), - imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), - data = imageData.data, - iLen = data.length, i, avg; - - for (i = 0; i < iLen; i+=4) { - avg = 0.3 * data[i] + 0.59 * data[i + 1] + 0.11 * data[i + 2]; - data[i] = avg + 100; - data[i + 1] = avg + 50; - data[i + 2] = avg + 255; - } - - context.putImageData(imageData, 0, 0); - }, - - /** - * Returns object representation of an instance - * @return {Object} Object representation of an instance - */ - toObject: function() { - return { type: this.type }; - }, - - /** - * Returns a JSON representation of an instance - * @return {Object} JSON - */ - toJSON: function() { - // delegate, not alias - return this.toObject(); - } -}); - -/** - * Returns filter instance from an object representation - * @static - * @return {fabric.Image.filters.Sepia} Instance of fabric.Image.filters.Sepia - */ -fabric.Image.filters.Sepia.fromObject = function() { - return new fabric.Image.filters.Sepia(); -}; - - -/** - * Sepia2 filter class - * @class fabric.Image.filters.Sepia2 - * @memberOf fabric.Image.filters - */ -fabric.Image.filters.Sepia2 = fabric.util.createClass(/** @lends fabric.Image.filters.Sepia2.prototype */ { - - /** - * Filter type - * @param {String} type - * @default - */ - type: 'Sepia2', - - /** - * Applies filter to canvas element - * @memberOf fabric.Image.filters.Sepia.prototype - * @param {Object} canvasEl Canvas element to apply filter to - */ - applyTo: function(canvasEl) { - var context = canvasEl.getContext('2d'), - imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), - data = imageData.data, - iLen = data.length, i, r, g, b; - - for (i = 0; i < iLen; i+=4) { - r = data[i]; - g = data[i + 1]; - b = data[i + 2]; - - data[i] = (r * 0.393 + g * 0.769 + b * 0.189 ) / 1.351; - data[i + 1] = (r * 0.349 + g * 0.686 + b * 0.168 ) / 1.203; - data[i + 2] = (r * 0.272 + g * 0.534 + b * 0.131 ) / 2.140; - } - - context.putImageData(imageData, 0, 0); - }, - - /** - * Returns object representation of an instance - * @return {Object} Object representation of an instance - */ - toObject: function() { - return { type: this.type }; - }, - - /** - * Returns a JSON representation of an instance - * @return {Object} JSON - */ - toJSON: function() { - // delegate, not alias - return this.toObject(); - } -}); - -/** - * Returns filter instance from an object representation - * @static - * @return {fabric.Image.filters.Sepia2} Instance of fabric.Image.filters.Sepia2 - */ -fabric.Image.filters.Sepia2.fromObject = function() { - return new fabric.Image.filters.Sepia2(); -}; - - -/** - * Tint filter class - * @class fabric.Image.filters.Tint - * @memberOf fabric.Image.filters - */ -fabric.Image.filters.Tint = fabric.util.createClass(/** @lends fabric.Image.filters.Tint.prototype */ { - - /** - * Filter type - * @param {String} type - * @default - */ - type: 'Tint', - - /** - * Constructor - * @memberOf fabric.Image.filters.Tint.prototype - * @param {Object} [options] Options object - */ - initialize: function(options) { - options = options || { }; - this.color = options.color || 0; - }, - - /** - * Applies filter to canvas element - * @param {Object} canvasEl Canvas element to apply filter to - */ - applyTo: function(canvasEl) { - var context = canvasEl.getContext('2d'), - imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), - data = imageData.data, - iLen = data.length, i, a; - - var rgb = parseInt(this.color, 10).toString(16); - - var cr = parseInt('0x' + rgb.substr(0, 2), 16); - var cg = parseInt('0x' + rgb.substr(2, 2), 16); - var cb = parseInt('0x' + rgb.substr(4, 2), 16); - - for (i = 0; i < iLen; i+=4) { - a = data[i+3]; - - if (a > 0){ - data[i] = cr; - data[i+1] = cg; - data[i+2] = cb; + data[i] = (r * 0.393 + g * 0.769 + b * 0.189 ) / 1.351; + data[i + 1] = (r * 0.349 + g * 0.686 + b * 0.168 ) / 1.203; + data[i + 2] = (r * 0.272 + g * 0.534 + b * 0.131 ) / 2.140; } + + context.putImageData(imageData, 0, 0); } - - context.putImageData(imageData, 0, 0); - }, + }); /** - * Returns object representation of an instance - * @return {Object} Object representation of an instance + * Returns filter instance from an object representation + * @static + * @return {fabric.Image.filters.Sepia2} Instance of fabric.Image.filters.Sepia2 */ - toObject: function() { - return { - type: this.type, - color: this.color - }; - }, + fabric.Image.filters.Sepia2.fromObject = function() { + return new fabric.Image.filters.Sepia2(); + }; + +})(typeof exports !== 'undefined' ? exports : this); + + +(function(global) { + + "use strict"; + + var fabric = global.fabric || (global.fabric = { }), + extend = fabric.util.object.extend; /** - * Returns a JSON representation of an instance - * @return {Object} JSON + * Tint filter class + * @class fabric.Image.filters.Tint + * @memberOf fabric.Image.filters + * @extends fabric.Image.filters.BaseFilter */ - toJSON: function() { - // delegate, not alias - return this.toObject(); - } -}); + fabric.Image.filters.Tint = fabric.util.createClass(fabric.Image.filters.BaseFilter, /** @lends fabric.Image.filters.Tint.prototype */ { -/** - * Returns filter instance from an object representation - * @static - * @param {Object} object Object to create an instance from - * @return {fabric.Image.filters.Tint} Instance of fabric.Image.filters.Tint - */ -fabric.Image.filters.Tint.fromObject = function(object) { - return new fabric.Image.filters.Tint(object); -}; + /** + * Filter type + * @param {String} type + * @default + */ + type: 'Tint', + + /** + * Constructor + * @memberOf fabric.Image.filters.Tint.prototype + * @param {Object} [options] Options object + */ + initialize: function(options) { + options = options || { }; + this.color = options.color || 0; + }, + + /** + * Applies filter to canvas element + * @param {Object} canvasEl Canvas element to apply filter to + */ + applyTo: function(canvasEl) { + var context = canvasEl.getContext('2d'), + imageData = context.getImageData(0, 0, canvasEl.width, canvasEl.height), + data = imageData.data, + iLen = data.length, i, a; + + var rgb = parseInt(this.color, 10).toString(16); + + var cr = parseInt('0x' + rgb.substr(0, 2), 16); + var cg = parseInt('0x' + rgb.substr(2, 2), 16); + var cb = parseInt('0x' + rgb.substr(4, 2), 16); + + for (i = 0; i < iLen; i+=4) { + a = data[i+3]; + + if (a > 0){ + data[i] = cr; + data[i+1] = cg; + data[i+2] = cb; + } + } + + context.putImageData(imageData, 0, 0); + }, + + /** + * Returns object representation of an instance + * @return {Object} Object representation of an instance + */ + toObject: function() { + return extend(this.callSuper('toObject'), { + color: this.color + }); + } + }); + + /** + * Returns filter instance from an object representation + * @static + * @param {Object} object Object to create an instance from + * @return {fabric.Image.filters.Tint} Instance of fabric.Image.filters.Tint + */ + fabric.Image.filters.Tint.fromObject = function(object) { + return new fabric.Image.filters.Tint(object); + }; + +})(typeof exports !== 'undefined' ? exports : this); (function(global) { @@ -17089,8 +17098,6 @@ fabric.Image.filters.Tint.fromObject = function(object) { this._setBoundaries(ctx, textLines); this._totalLineHeight = 0; - - this.setCoords(); }, /** diff --git a/dist/all.min.js b/dist/all.min.js index 1fee778e..d4643ec9 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -1,6 +1,6 @@ /* build: `node build.js modules=ALL exclude=gestures` *//*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */var fabric=fabric||{version:"1.2.9"};typeof exports!="undefined"&&(exports.fabric=fabric),typeof document!="undefined"&&typeof window!="undefined"?(fabric.document=document,fabric.window=window):(fabric.document=require("jsdom").jsdom(""),fabric.window=fabric.document.createWindow()),fabric.isTouchSupported="ontouchstart"in fabric.document.documentElement,fabric.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";var Cufon=function(){function r(e){var t=this.face=e.face;this.glyphs=e.glyphs,this.w=e.w,this.baseSize=parseInt(t["units-per-em"],10),this.family=t["font-family"].toLowerCase(),this.weight=t["font-weight"],this.style=t["font-style"]||"normal",this.viewBox=function(){var e=t.bbox.split(/\s+/),n={minX:parseInt(e[0],10),minY:parseInt(e[1],10),maxX:parseInt(e[2],10),maxY:parseInt(e[3],10)};return n.width=n.maxX-n.minX,n.height=n.maxY-n.minY,n.toString=function(){return[this.minX,this.minY,this.width,this.height].join(" ")},n}(),this.ascent=-parseInt(t.ascent,10),this.descent=-parseInt(t.descent,10),this.height=-this.ascent+this.descent}function i(){var e={},t={oblique:"italic",italic:"oblique"};this.add=function(t){(e[t.style]||(e[t.style]={}))[t.weight]=t},this.get=function(n,r){var i=e[n]||e[t[n]]||e.normal||e.italic||e.oblique;if(!i)return null;r={normal:400,bold:700}[r]||parseInt(r,10);if(i[r])return i[r];var s={1:1,99:0}[r%100],o=[],u,a;s===undefined&&(s=r>400),r==500&&(r=400);for(var f in i){f=parseInt(f,10);if(!u||fa)a=f;o.push(f)}return ra&&(r=a),o.sort(function(e,t){return(s?e>r&&t>r?et:et:e=i.length+e?r():setTimeout(arguments.callee,10)}),function(t){e?t():n.push(t)}}(),supports:function(e,t){var n=fabric.document.createElement("span").style;return n[e]===undefined?!1:(n[e]=t,n[e]===t)},textAlign:function(e,t,n,r){return t.get("textAlign")=="right"?n>0&&(e=" "+e):nk&&(k=N),A.push(N),N=0;continue}var O=t.glyphs[T[b]]||t.missingGlyph;if(!O)continue;N+=C=Number(O.w||t.w)+h}A.push(N),N=Math.max(k,N);var M=[];for(var b=A.length;b--;)M[b]=N-A[b];if(C===null)return null;d+=l.width-C,m+=l.minX;var _,D;if(f)_=u,D=u.firstChild;else{_=fabric.document.createElement("span"),_.className="cufon cufon-canvas",_.alt=n,D=fabric.document.createElement("canvas"),_.appendChild(D);if(i.printable){var P=fabric.document.createElement("span");P.className="cufon-alt",P.appendChild(fabric.document.createTextNode(n)),_.appendChild(P)}}var H=_.style,B=D.style||{},j=c.convert(l.height-p+v),F=Math.ceil(j),I=F/j;D.width=Math.ceil(c.convert(N+d-m)*I),D.height=F,p+=l.minY,B.top=Math.round(c.convert(p-t.ascent))+"px",B.left=Math.round(c.convert(m))+"px";var q=Math.ceil(c.convert(N*I)),R=q+"px",U=c.convert(t.height),z=(i.lineHeight-1)*c.convert(-t.ascent/5)*(L-1);Cufon.textOptions.width=q,Cufon.textOptions.height=U*L+z,Cufon.textOptions.lines=L,Cufon.textOptions.totalLineHeight=z,e?(H.width=R,H.height=U+"px"):(H.paddingLeft=R,H.paddingBottom=U-1+"px");var W=Cufon.textOptions.context||D.getContext("2d"),X=F/l.height;Cufon.textOptions.fontAscent=t.ascent*X,Cufon.textOptions.boundaries=null;for(var V=Cufon.textOptions.shadowOffsets,b=y.length;b--;)V[b]=[y[b][0]*X,y[b][1]*X];W.save(),W.scale(X,X),W.translate(-m-1/X*D.width/2+(Cufon.fonts[t.family].offsetLeft||0),-p-Cufon.textOptions.height/X/2+(Cufon.fonts[t.family].offsetTop||0)),W.lineWidth=t.face["underline-thickness"],W.save();var J=Cufon.getTextDecoration(i),K=i.fontStyle==="italic";W.save(),Q();if(g)for(var b=0,w=g.length;b.cufon-vml-canvas{text-indent:0}@media screen{cvml\\:shape,cvml\\:shadow{behavior:url(#default#VML);display:block;antialias:true;position:absolute}.cufon-vml-canvas{position:absolute;text-align:left}.cufon-vml{display:inline-block;position:relative;vertical-align:middle}.cufon-vml .cufon-alt{position:absolute;left:-10000in;font-size:1px}a .cufon-vml{cursor:pointer}}@media print{.cufon-vml *{display:none}.cufon-vml .cufon-alt{display:inline}}'),function(e,t,i,s,o,u,a){var f=t===null;f&&(t=o.alt);var l=e.viewBox,c=i.computedFontSize||(i.computedFontSize=new Cufon.CSS.Size(n(u,i.get("fontSize"))+"px",e.baseSize)),h=i.computedLSpacing;h==undefined&&(h=i.get("letterSpacing"),i.computedLSpacing=h=h=="normal"?0:~~c.convertFrom(r(u,h)));var p,d;if(f)p=o,d=o.firstChild;else{p=fabric.document.createElement("span"),p.className="cufon cufon-vml",p.alt=t,d=fabric.document.createElement("span"),d.className="cufon-vml-canvas",p.appendChild(d);if(s.printable){var v=fabric.document.createElement("span");v.className="cufon-alt",v.appendChild(fabric.document.createTextNode(t)),p.appendChild(v)}a||p.appendChild(fabric.document.createElement("cvml:shape"))}var m=p.style,g=d.style,y=c.convert(l.height),b=Math.ceil(y),w=b/y,E=l.minX,S=l.minY;g.height=b,g.top=Math.round(c.convert(S-e.ascent)),g.left=Math.round(c.convert(E)),m.height=c.convert(e.height)+"px";var x=Cufon.getTextDecoration(s),T=i.get("color"),N=Cufon.CSS.textTransform(t,i).split(""),C=0,k=0,L=null,A,O,M=s.textShadow;for(var _=0,D=0,P=N.length;_-1},complexity:function(){return this.getObjects().reduce(function(e,t){return e+=t.complexity?t.complexity():0,e},0)},toGrayscale:function(){return this.forEachObject(function(e){e.toGrayscale()})}},function(){function n(e,t){var n=e.indexOf(t);return n!==-1&&e.splice(n,1),e}function r(e,t){return Math.floor(Math.random()*(t-e+1))+e}function s(e){return e*i}function o(e){return e/i}function u(e,t,n){var r=Math.sin(n),i=Math.cos(n);e.subtractEquals(t);var s=e.x*i-e.y*r,o=e.x*r+e.y*i;return(new fabric.Point(s,o)).addEquals(t)}function a(e,t){return parseFloat(Number(e).toFixed(t))}function f(){return!1}function l(e){return fabric[fabric.util.string.camelize(fabric.util.string.capitalize(e))]}function c(e,t,n){if(e){var r=fabric.util.createImage();r.onload=function(){t&&t.call(n,r),r=r.onload=null},r.src=e}else t&&t.call(n,e)}function h(e,t){function n(){++i===s&&t&&t(r)}var r=[],i=0,s=e.length;e.forEach(function(e,t){if(!e.type)return;var i=fabric.util.getKlass(e.type);i.async?i.fromObject(e,function(e,i){i||(r[t]=e),n()}):(r[t]=i.fromObject(e),n())})}function p(e,t,n){var r;return e.length>1?r=new fabric.PathGroup(e,t):r=e[0],typeof n!="undefined"&&r.setSourcePath(n),r}function d(e,t,n){if(n&&Object.prototype.toString.call(n)==="[object Array]")for(var r=0,i=n.length;rr)r+=u[p++%h],r>l&&(r=l),n[d?"lineTo":"moveTo"](r,0),d=!d;n.restore()}function m(e){return e||(e=fabric.document.createElement("canvas")),!e.getContext&&typeof G_vmlCanvasManager!="undefined"&&G_vmlCanvasManager.initElement(e),e}function g(){return fabric.isLikelyNode?new(require("canvas").Image):fabric.document.createElement("img")}function y(e){var t=e.prototype;for(var n=t.stateProperties.length;n--;){var r=t.stateProperties[n],i=r.charAt(0).toUpperCase()+r.slice(1),s="set"+i,o="get"+i;t[o]||(t[o]=function(e){return new Function('return this.get("'+e+'")')}(r)),t[s]||(t[s]=function(e){return new Function("value",'return this.set("'+e+'", value)')}(r))}}function b(e,t){t.save(),t.beginPath(),e.clipTo(t),t.clip()}function w(e,t){var n=[[e[0],e[2],e[4]],[e[1],e[3],e[5]],[0,0,1]],r=[[t[0],t[2],t[4]],[t[1],t[3],t[5]],[0,0,1]],i=[];for(var s=0;s<3;s++){i[s]=[];for(var o=0;o<3;o++){var u=0;for(var a=0;a<3;a++)u+=n[s][a]*r[a][o];i[s][o]=u}}return[i[0][0],i[1][0],i[0][1],i[1][1],i[0][2],i[1][2]]}function E(e){return(String(e).match(/function[^{]*\{([\s\S]*)\}/)||{})[1]}function S(e,t,n,r){var i=r[0],s=r[1],o=r[2],u=r[3],a=r[4],f=r[5],l=r[6],c=k(f,l,i,s,u,a,o,t,n);for(var h=0;h1&&(d=Math.sqrt(d),n*=d,r*=d);var v=c/n,m=l/n,g=-l/r,y=c/r,b=v*u+m*a,w=g*u+y*a,E=v*e+m*t,S=g*e+y*t,T=(E-b)*(E-b)+(S-w)*(S-w),k=1/T-.25;k<0&&(k=0);var L=Math.sqrt(k);s===i&&(L=-L);var A=.5*(b+E)-L*(S-w),O=.5*(w+S)+L*(E-b),M=Math.atan2(w-O,b-A),_=Math.atan2(S-O,E-A),D=_-M;D<0&&s===1?D+=2*Math.PI:D>0&&s===0&&(D-=2*Math.PI);var P=Math.ceil(Math.abs(D/(Math.PI*.5+.001))),H=[];for(var B=0;B=r&&(r=e[n][t]);else while(n--)e[n]>=r&&(r=e[n]);return r}function r(e,t){if(!e||e.length===0)return undefined;var n=e.length-1,r=t?e[n][t]:e[n];if(t)while(n--)e[n][t]>>0;if(n===0)return-1;var r=0;arguments.length>0&&(r=Number(arguments[1]),r!==r?r=0:r!==0&&r!==Number.POSITIVE_INFINITY&&r!==Number.NEGATIVE_INFINITY&&(r=(r>0||-1)*Math.floor(Math.abs(r))));if(r>=n)return-1;var i=r>=0?r:Math.max(n-Math.abs(r),0);for(;i>>0;n>>0;r>>0;n>>0;n>>0;i>>0,n=0,r;if(arguments.length>1)r=arguments[1];else do{if(n in this){r=this[n++];break}if(++n>=t)throw new TypeError}while(!0);for(;n/g,">")}String.prototype.trim||(String.prototype.trim=function(){return this.replace(/^[\s\xA0]+/,"").replace(/[\s\xA0]+$/,"")}),fabric.util.string={camelize:e,capitalize:t,escapeXml:n}}(),function(){var e=Array.prototype.slice,t=Function.prototype.apply,n=function(){};Function.prototype.bind||(Function.prototype.bind=function(r){var i=this,s=e.call(arguments,1),o;return s.length?o=function(){return t.call(i,this instanceof n?this:r,s.concat(e.call(arguments)))}:o=function(){return t.call(i,this instanceof n?this:r,arguments)},n.prototype=this.prototype,o.prototype=new n,o})}(),function(){function i(){}function s(t){var n=this.constructor.superclass.prototype[t];return arguments.length>1?n.apply(this,e.call(arguments,1)):n.call(this)}function o(){function u(){this.initialize.apply(this,arguments)}var n=null,o=e.call(arguments,0);typeof o[0]=="function"&&(n=o.shift()),u.superclass=n,u.subclasses=[],n&&(i.prototype=n.prototype,u.prototype=new i,n.subclasses.push(u));for(var a=0,f=o.length;a-1?e.prototype[i]=function(e){return function(){var n=this.constructor.superclass;this.constructor.superclass=r;var i=t[e].apply(this,arguments);this.constructor.superclass=n;if(e!=="initialize")return i}}(i):e.prototype[i]=t[i],n&&(t.toString!==Object.prototype.toString&&(e.prototype.toString=t.toString),t.valueOf!==Object.prototype.valueOf&&(e.prototype.valueOf=t.valueOf))};fabric.util.createClass=o}(),function(){function e(e){var t=Array.prototype.slice.call(arguments,1),n,r,i=t.length;for(r=0;r-1?s(e,t.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var r in t)if(r==="opacity")s(e,t[r]);else{var i=r==="float"||r==="cssFloat"?typeof n.styleFloat=="undefined"?"cssFloat":"styleFloat":r;n[i]=t[r]}return e}var t=fabric.document.createElement("div"),n=typeof t.style.opacity=="string",r=typeof t.style.filter=="string",i=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,s=function(e){return e};n?s=function(e,t){return e.style.opacity=t,e}:r&&(s=function(e,t){var n=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(n.zoom=1),i.test(n.filter)?(t=t>=.9999?"":"alpha(opacity="+t*100+")",n.filter=n.filter.replace(i,t)):n.filter+=" alpha(opacity="+t*100+")",e}),fabric.util.setStyle=e}(),function(){function t(e){return typeof e=="string"?fabric.document.getElementById(e):e}function s(e,t){var n=fabric.document.createElement(e);for(var r in t)r==="class"?n.className=t[r]:r==="for"?n.htmlFor=t[r]:n.setAttribute(r,t[r]);return n}function o(e,t){(" "+e.className+" ").indexOf(" "+t+" ")===-1&&(e.className+=(e.className?" ":"")+t)}function u(e,t,n){return typeof t=="string"&&(t=s(t,n)),e.parentNode&&e.parentNode.replaceChild(t,e),t.appendChild(e),t}function a(e){var t,n,r={left:0,top:0},i=e&&e.ownerDocument,s={left:0,top:0},o={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!i)return{left:0,top:0};for(var u in o)s[o[u]]+=parseInt(f(e,u),10)||0;return t=i.documentElement,typeof e.getBoundingClientRect!="undefined"&&(r=e.getBoundingClientRect()),i!=null&&i===i.window?n=i:n=i.nodeType===9&&(i.defaultView||i.parentWindow),{left:r.left+(n.pageXOffset||t.scrollLeft)-(t.clientLeft||0)+s.left,top:r.top+(n.pageYOffset||t.scrollTop)-(t.clientTop||0)+s.top}}function f(e,t){e.style||(e.style={});if(fabric.document.defaultView&&fabric.document.defaultView.getComputedStyle)return fabric.document.defaultView.getComputedStyle(e,null)[t];var n=e.style[t];return!n&&e.currentStyle&&(n=e.currentStyle[t]),n}var e=Array.prototype.slice,n=function(t){return e.call(t,0)},r;try{r=n(fabric.document.childNodes)instanceof Array}catch(i){}r||(n=function(e){var t=new Array(e.length),n=e.length;while(n--)t[n]=e[n];return t}),function(){function n(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=fabric.util.falseFunction),t?e.style[t]="none":typeof e.unselectable=="string"&&(e.unselectable="on"),e}function r(e){return typeof e.onselectstart!="undefined"&&(e.onselectstart=null),t?e.style[t]="":typeof e.unselectable=="string"&&(e.unselectable=""),e}var e=fabric.document.documentElement.style,t="userSelect"in e?"userSelect":"MozUserSelect"in e?"MozUserSelect":"WebkitUserSelect"in e?"WebkitUserSelect":"KhtmlUserSelect"in e?"KhtmlUserSelect":"";fabric.util.makeElementUnselectable=n,fabric.util.makeElementSelectable=r}(),function(){function e(e,t){var n=fabric.document.getElementsByTagName("head")[0],r=fabric.document.createElement("script"),i=!0;r.onload=r.onreadystatechange=function(e){if(i){if(typeof this.readyState=="string"&&this.readyState!=="loaded"&&this.readyState!=="complete")return;i=!1,t(e||fabric.window.event),r=r.onload=r.onreadystatechange=null}},r.src=e,n.appendChild(r)}fabric.util.getScript=e}(),fabric.util.getById=t,fabric.util.toArray=n,fabric.util.makeElement=s,fabric.util.addClass=o,fabric.util.wrapElement=u,fabric.util.getElementOffset=a,fabric.util.getElementStyle=f}(),function(){function e(e,t){return e+(/\?/.test(e)?"&":"?")+t}function n(){}function r(r,i){i||(i={});var s=i.method?i.method.toUpperCase():"GET",o=i.onComplete||function(){},u=t(),a;return u.onreadystatechange=function(){u.readyState===4&&(o(u),u.onreadystatechange=n)},s==="GET"&&(a=null,typeof i.parameters=="string"&&(r=e(r,i.parameters))),u.open(s,r,!0),(s==="POST"||s==="PUT")&&u.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),u.send(a),u}var t=function(){var e=[function(){return new ActiveXObject("Microsoft.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP")},function(){return new ActiveXObject("Msxml2.XMLHTTP.3.0")},function(){return new XMLHttpRequest}];for(var t=e.length;t--;)try{var n=e[t]();if(n)return e[t]}catch(r){}}();fabric.util.request=r}(),function(){function e(e){e||(e={});var t=+(new Date),r=e.duration||500,i=t+r,s,o=e.onChange||function(){},u=e.abort||function(){return!1},a=e.easing||function(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t},f="startValue"in e?e.startValue:0,l="endValue"in e?e.endValue:100,c=e.byValue||l-f;e.onStart&&e.onStart(),function h(){s=+(new Date);var l=s>i?r:s-t;o(a(l,f,c,r));if(s>i||u()){e.onComplete&&e.onComplete();return}n(h)}()}var t=fabric.window.requestAnimationFrame||fabric.window.webkitRequestAnimationFrame||fabric.window.mozRequestAnimationFrame||fabric.window.oRequestAnimationFrame||fabric.window.msRequestAnimationFrame||function(e){fabric.window.setTimeout(e,1e3/60)},n=function(){return t.apply(fabric.window,arguments)};fabric.util.animate=e,fabric.util.requestAnimFrame=n}(),function(){function e(e,t,n,r){return n*(e/=r)*e+t}function t(e,t,n,r){return-n*(e/=r)*(e-2)+t}function n(e,t,n,r){return e/=r/2,e<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function r(e,t,n,r){return n*(e/=r)*e*e+t}function i(e,t,n,r){return n*((e=e/r-1)*e*e+1)+t}function s(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e+t:n/2*((e-=2)*e*e+2)+t}function o(e,t,n,r){return n*(e/=r)*e*e*e+t}function u(e,t,n,r){return-n*((e=e/r-1)*e*e*e-1)+t}function a(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e+t:-n/2*((e-=2)*e*e*e-2)+t}function f(e,t,n,r){return n*(e/=r)*e*e*e*e+t}function l(e,t,n,r){return n*((e=e/r-1)*e*e*e*e+1)+t}function c(e,t,n,r){return e/=r/2,e<1?n/2*e*e*e*e*e+t:n/2*((e-=2)*e*e*e*e+2)+t}function h(e,t,n,r){return-n*Math.cos(e/r*(Math.PI/2))+n+t}function p(e,t,n,r){return n*Math.sin(e/r*(Math.PI/2))+t}function d(e,t,n,r){return-n/2*(Math.cos(Math.PI*e/r)-1)+t}function v(e,t,n,r){return e===0?t:n*Math.pow(2,10*(e/r-1))+t}function m(e,t,n,r){return e===r?t+n:n*(-Math.pow(2,-10*e/r)+1)+t}function g(e,t,n,r){return e===0?t:e===r?t+n:(e/=r/2,e<1?n/2*Math.pow(2,10*(e-1))+t:n/2*(-Math.pow(2,-10*--e)+2)+t)}function y(e,t,n,r){return-n*(Math.sqrt(1-(e/=r)*e)-1)+t}function b(e,t,n,r){return n*Math.sqrt(1-(e=e/r-1)*e)+t}function w(e,t,n,r){return e/=r/2,e<1?-n/2*(Math.sqrt(1-e*e)-1)+t:n/2*(Math.sqrt(1-(e-=2)*e)+1)+t}function E(e,t,n,r){var i=1.70158,s=0,o=n;return e===0?t:(e/=r,e===1?t+n:(s||(s=r*.3),o-1;e=e.split(/\s+/);var n=[],r,i;if(t){r=0,i=e.length;for(;r/i,"")));if(!s.documentElement)return;t.parseSVGDocument(s.documentElement,function(r,i){w.set(e,{objects:t.util.array.invoke(r,"toObject"),options:i}),n(r,i)},r)}e=e.replace(/^\n\s*/,"").trim(),w.has(e,function(r){r?w.get(e,function(e){var t=S(e);n(t.objects,t.options)}):new t.util.request(e,{method:"get",onComplete:i})})}function S(e){var n=e.objects,i=e.options;return n=n.map(function(e){return t[r(e.type)].fromObject(e)}),{objects:n,options:i}}function x(e,n,r){e=e.trim();var i;if(typeof DOMParser!="undefined"){var s=new DOMParser;s&&s.parseFromString&&(i=s.parseFromString(e,"text/xml"))}else t.window.ActiveXObject&&(i=new ActiveXObject("Microsoft.XMLDOM"),i.async="false",i.loadXML(e.replace(//i,"")));t.parseSVGDocument(i.documentElement,function(e,t){n(e,t)},r)}function T(e){var t="";for(var n=0,r=e.length;n',"",""].join("")),t}function N(e){var t="";return e.backgroundColor&&e.backgroundColor.source&&(t=['',''].join("")),t}function C(e){var t=e.getElementsByTagName("linearGradient"),n=e.getElementsByTagName("radialGradient"),r,i,s={};i=t.length;for(;i--;)r=t[i],s[r.getAttribute("id")]=r;i=n.length;for(;i--;)r=n[i],s[r.getAttribute("id")]=r;return s}var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.string.capitalize,i=t.util.object.clone,s=t.util.toFixed,o=t.util.multiplyTransformMatrices;t.SHARED_ATTRIBUTES=["transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width"];var u={"fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight",cx:"left",x:"left",r:"radius","stroke-dasharray":"strokeDashArray","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration",cy:"top",y:"top",transform:"transformMatrix"},a={stroke:"strokeOpacity",fill:"fillOpacity"};t.parseTransformAttribute=function(){function e(e,t){var n=t[0];e[0]=Math.cos(n),e[1]=Math.sin(n),e[2]=-Math.sin(n),e[3]=Math.cos(n)}function n(e,t){var n=t[0],r=t.length===2?t[1]:t[0];e[0]=n,e[3]=r}function r(e,t){e[2]=t[0]}function i(e,t){e[1]=t[0]}function s(e,t){e[4]=t[0],t.length===2&&(e[5]=t[1])}var o=[1,0,0,1,0,0],u="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",a="(?:\\s+,?\\s*|,\\s*)",f="(?:(skewX)\\s*\\(\\s*("+u+")\\s*\\))",l="(?:(skewY)\\s*\\(\\s*("+u+")\\s*\\))",c="(?:(rotate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+")"+a+"("+u+"))?\\s*\\))",h="(?:(scale)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",p="(?:(translate)\\s*\\(\\s*("+u+")(?:"+a+"("+u+"))?\\s*\\))",d="(?:(matrix)\\s*\\(\\s*("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+a+"("+u+")"+"\\s*\\))",v="(?:"+d+"|"+p+"|"+h+"|"+c+"|"+f+"|"+l+")",m="(?:"+v+"(?:"+a+v+")*"+")",g="^\\s*(?:"+m+"?)\\s*$",y=new RegExp(g),b=new RegExp(v,"g");return function(u){var a=o.concat(),f=[];if(!u||u&&!y.test(u))return a;u.replace(b,function(t){var u=(new RegExp(v)).exec(t).filter(function(e){return e!==""&&e!=null}),l=u[1],c=u.slice(2).map(parseFloat);switch(l){case"translate":s(a,c);break;case"rotate":e(a,c);break;case"scale":n(a,c);break;case"skewX":r(a,c);break;case"skewY":i(a,c);break;case"matrix":a=c}f.push(a.concat()),a=o.concat()});var l=f[0];while(f.length>1)f.shift(),l=t.util.multiplyTransformMatrices(l,f[0]);return l}}(),t.parseSVGDocument=function(){function s(e,t){while(e&&(e=e.parentNode))if(t.test(e.nodeName))return!0;return!1}var e=/^(path|circle|polygon|polyline|ellipse|rect|line|image|text)$/,n="(?:[-+]?\\d+(?:\\.\\d+)?(?:e[-+]?\\d+)?)",r=new RegExp("^\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*,?"+"\\s*("+n+"+)\\s*"+"$");return function(n,o,u){if(!n)return;var a=new Date,f=t.util.toArray(n.getElementsByTagName("*"));if(f.length===0){f=n.selectNodes("//*[name(.)!='svg']");var l=[];for(var c=0,h=f.length;ce.x&&this.y>e.y},gte:function(e){return this.x>=e.x&&this.y>=e.y},lerp:function(e,t){return new n(this.x+(e.x-this.x)*t,this.y+(e.y-this.y)*t)},distanceFrom:function(e){var t=this.x-e.x,n=this.y-e.y;return Math.sqrt(t*t+n*n)},midPointFrom:function(e){return new n(this.x+(e.x-this.x)/2,this.y+(e.y-this.y)/2)},min:function(e){return new n(Math.min(this.x,e.x),Math.min(this.y,e.y))},max:function(e){return new n(Math.max(this.x,e.x),Math.max(this.y,e.y))},toString:function(){return this.x+","+this.y},setXY:function(e,t){this.x=e,this.y=t},setFromPoint:function(e){this.x=e.x,this.y=e.y},swap:function(e){var t=this.x,n=this.y;this.x=e.x,this.y=e.y,e.x=t,e.y=n}}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){this.status=e,this.points=[]}var t=e.fabric||(e.fabric={});if(t.Intersection){t.warn("fabric.Intersection is already defined");return}t.Intersection=n,t.Intersection.prototype={appendPoint:function(e){this.points.push(e)},appendPoints:function(e){this.points=this.points.concat(e)}},t.Intersection.intersectLineLine=function(e,r,i,s){var o,u=(s.x-i.x)*(e.y-i.y)-(s.y-i.y)*(e.x-i.x),a=(r.x-e.x)*(e.y-i.y)-(r.y-e.y)*(e.x-i.x),f=(s.y-i.y)*(r.x-e.x)-(s.x-i.x)*(r.y-e.y);if(f!==0){var l=u/f,c=a/f;0<=l&&l<=1&&0<=c&&c<=1?(o=new n("Intersection"),o.points.push(new t.Point(e.x+l*(r.x-e.x),e.y+l*(r.y-e.y)))):o=new n}else u===0||a===0?o=new n("Coincident"):o=new n("Parallel");return o},t.Intersection.intersectLinePolygon=function(e,t,r){var i=new n,s=r.length;for(var o=0;o0&&(i.status="Intersection"),i},t.Intersection.intersectPolygonPolygon=function(e,t){var r=new n,i=e.length;for(var s=0;s0&&(r.status="Intersection"),r},t.Intersection.intersectPolygonRectangle=function(e,r,i){var s=r.min(i),o=r.max(i),u=new t.Point(o.x,s.y),a=new t.Point(s.x,o.y),f=n.intersectLinePolygon(s,u,e),l=n.intersectLinePolygon(u,o,e),c=n.intersectLinePolygon(o,a,e),h=n.intersectLinePolygon(a,s,e),p=new n;return p.appendPoints(f.points),p.appendPoints(l.points),p.appendPoints(c.points),p.appendPoints(h.points),p.points.length>0&&(p.status="Intersection"),p}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function n(e){e?this._tryParsingColor(e):this.setSource([0,0,0,1])}function r(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),n<1/6?e+(t-e)*6*n:n<.5?t:n<2/3?e+(t-e)*(2/3-n)*6:e}var t=e.fabric||(e.fabric={});if(t.Color){t.warn("fabric.Color is already defined.");return}t.Color=n,t.Color.prototype={_tryParsingColor:function(e){var t;e in n.colorNameMap&&(e=n.colorNameMap[e]),t=n.sourceFromHex(e),t||(t=n.sourceFromRgb(e)),t||(t=n.sourceFromHsl(e)),t&&this.setSource(t)},_rgbToHsl:function(e,n,r){e/=255,n/=255,r/=255;var i,s,o,u=t.util.array.max([e,n,r]),a=t.util.array.min([e,n,r]);o=(u+a)/2;if(u===a)i=s=0;else{var f=u-a;s=o>.5?f/(2-u-a):f/(u+a);switch(u){case e:i=(n-r)/f+(n']:this.type==="radial"&&(i=["']);for(var s=0;s');return i.push(this.type==="linear"?"":""),i.join("")},toLive:function(e){var t;if(!this.type)return;this.type==="linear"?t=e.createLinearGradient(this.coords.x1,this.coords.y1,this.coords.x2,this.coords.y2):this.type==="radial"&&(t=e.createRadialGradient(this.coords.x1,this.coords.y1,this.coords.r1,this.coords.x2,this.coords.y2,this.coords.r2));for(var n=0,r=this.colorStops.length;n'+''+""},toLive:function(e){var t=typeof this.source=="function"?this.source():this.source;return e.createPattern(t,this.repeat)}}),fabric.Shadow=fabric.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,initialize:function(e){for(var t in e)this[t]=e[t];this.id=fabric.Object.__uid++},toSVG:function(e){var t="SourceAlpha";if(e.fill===this.color||e.stroke===this.color)t="SourceGraphic";return''+''+''+""+""+''+""+""},toObject:function(){return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY}}}),function(){"use strict";if(fabric.StaticCanvas){fabric.warn("fabric.StaticCanvas is already defined.");return}var e=fabric.util.object.extend,t=fabric.util.getElementOffset,n=fabric.util.removeFromArray,r=fabric.util.removeListener,i=new Error("Could not initialize `canvas` element");fabric.StaticCanvas=function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},e(fabric.StaticCanvas.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas.prototype,{backgroundColor:"",backgroundImage:"",backgroundImageOpacity -:1,backgroundImageStretch:!0,overlayImage:"",overlayImageLeft:0,overlayImageTop:0,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return fabric.util.loadImage(e,function(e){this.overlayImage=e,n&&"overlayImageLeft"in n&&(this.overlayImageLeft=n.overlayImageLeft),n&&"overlayImageTop"in n&&(this.overlayImageTop=n.overlayImageTop),t&&t()},this),this},setBackgroundImage:function(e,t,n){return fabric.util.loadImage(e,function(e){this.backgroundImage=e,n&&"backgroundImageOpacity"in n&&(this.backgroundImageOpacity=n.backgroundImageOpacity),n&&"backgroundImageStretch"in n&&(this.backgroundImageStretch=n.backgroundImageStretch),t&&t()},this),this},setBackgroundColor:function(e,t){if(e.source){var n=this;fabric.util.loadImage(e.source,function(r){n.backgroundColor=new fabric.Pattern({source:r,repeat:e.repeat}),t&&t()})}else this.backgroundColor=e,t&&t();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw i;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw i},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.fire("object:removed",{target:e}),e.fire("removed")},getObjects:function(){return this._objects},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"];this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this.backgroundColor&&(t.fillStyle=this.backgroundColor.toLive?this.backgroundColor.toLive(t):this.backgroundColor,t.fillRect(this.backgroundColor.offsetX||0,this.backgroundColor.offsetY||0,this.width,this.height)),typeof this.backgroundImage=="object"&&this._drawBackroundImage(t);var n=this.getActiveGroup();for(var r=0,i=this._objects.length;r','\n'),t.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),""),this.backgroundColor&&this.backgroundColor.source&&t.push('"),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"),t.join("")},remove:function(e){return this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),fabric.Collection.remove.call(this,e)},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i;if(t){i=r;for(var s=r-1;s>=0;--s){var o=e.intersectsWithObject(this._objects[s])||e.isContainedWithinObject(this._objects[s])||this._objects[s].isContainedWithinObject(e);if(o){i=s;break}}}else i=r-1;n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i;if(t){i=r;for(var s=r+1;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3,f=u.data.length;ao.padding?l.x<0?l.x+=o.padding:l.x-=o.padding:l.x=0,s(l.y)>o.padding?l.y<0?l.y+=o.padding:l.y-=o.padding:l.y=0;var c=o.scaleX,h=o.scaleY;if(n==="equally"&&!u&&!a){var p=l.y+l.x,d=(o.height+o.strokeWidth)*r.original.scaleY+(o.width+o.strokeWidth)*r.original.scaleX;c=r.original.scaleX*p/d,h=r.original.scaleY*p/d,o.set("scaleX",c),o.set("scaleY",h)}else n?n==="x"&&!o.get("lockUniScaling")?(c=l.x/(o.width+o.strokeWidth),u||o.set("scaleX",c)):n==="y"&&!o.get("lockUniScaling")&&(h=l.y/(o.height+o.strokeWidth),a||o.set("scaleY",h)):(c=l.x/(o.width+o.strokeWidth),h=l.y/(o.height+o.strokeWidth),u||o.set("scaleX",c),a||o.set("scaleY",h));c<0&&(r.originX==="left"?r.originX="right":r.originX==="right"&&(r.originX="left")),h<0&&(r.originY==="top"?r.originY="bottom":r.originY==="bottom"&&(r.originY="top")),o.setPositionByOrigin(f,r.originX,r.originY)},_rotateObject:function(e,t){var n=this._currentTransform,s=this._offset;if(n.target.get("lockRotation"))return;var o=i(n.ey-n.top-s.top,n.ex-n.left-s.left),u=i(t-n.top-s.top,e-n.left-s.left),a=r(u-o+n.theta);a<0&&(a=360+a),n.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,i=s(n),o=s(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),i,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var u=t.ex+a-(n>0?0:i),f=t.ey+a-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,u,f,u+i,f,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f+o-1,u+i,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f,u,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,u+i-1,f,u+i-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+a-(n>0?0:i),t.ey+a-(r>0?0:o),i,o)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,a,f=new fabric.Point(o(n,i),o(r,s)),l=new fabric.Point(u(n,i),u(r,s)),c=n===i&&r===s;for(var h=this._objects.length;h--;){a=this._objects[h];if(!a)continue;if(a.intersectsWithRect(f,l)||a.isContainedWithinRect(f,l)||a.containsPoint(f)||a.containsPoint(l))if(this.selection&&a.selectable){a.set("active",!0),t.push(a);if(c)break}}t.length===1?this.setActiveObject(t[0],e):t.length>1&&(t=new fabric.Group(t.reverse()),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},findTarget:function(e,t){var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this._objects[o].visible&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(e),this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke),this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement();n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);e.format==="jpeg"&&(r.backgroundColor="#fff");var i={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set({active:!1,left:n.width/2,top:n.height/2}),r.add(this);var s=r.toDataURL(e);return this.set(i).setCoords(),r.dispose(),r=null,s},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.group?t.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?t.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?t.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?t.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?t.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){return this.translateToCenterPoint(new fabric.Point(this.left,this.top),this.originX,this.originY)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s,o;return n!==undefined&&r!==undefined?(n==="left"?s=i.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"?s=i.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:s=i.x,r==="top"?o=i.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"?o=i.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:o=i.y):(s=this.left,o=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(s,o))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){var t=e(this.angle),n=this.getWidth()/2,r=Math.cos(t)*n,i=Math.sin(t)*n,s=this.left,o=this.top;if(this.originX==="center"||this.originX==="right")s-=r;if(this.originY==="center"||this.originY==="bottom")o-=i;return{x:s,y:o}}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.strokeWidth>1?this.strokeWidth/2:0,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=this.transparentCorners,w=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){var e=this._createBaseSVGMarkup();return e.push("'),e.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(){var e=this._createBaseSVGMarkup(),t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return e.push("'),e.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){var e=this._createBaseSVGMarkup();return e.push("'),e.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function r(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type!=="group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")})},toSVG:function(){var e=this._createBaseSVGMarkup();return e.push("'),e.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed,r=t.util.array.min;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[],t=this._createBaseSVGMarkup();for(var r=0,i=this.points.length;r'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[],t=this._createBaseSVGMarkup();for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textShadow:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;i'+e.join("")+""},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','');if(this.stroke||this.strokeDashArray){var t=this.fill;this.fill=null,e.push("'),this.fill=t}return e.push(""),e.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.Brightness=fabric.util.createClass({type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;s=0&&N=0&&Co&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toObject:function(){return{type:this.type,color:this.color}},toJSON:function(){return this.toObject()}}),fabric.Image.filters.Tint.fromObject=function(e){return new fabric.Image.filters.Tint(e)},function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.object.clone,i=t.util.toFixed,s=t.StaticCanvas.supports("setLineDash");if(t.Text){t.warn("fabric.Text is already defined");return}var o=t.Object.prototype.stateProperties.concat();o.push("fontFamily","fontWeight","fontSize","path","text","textDecoration","textShadow","textAlign","fontStyle","lineHeight","backgroundColor","textBackgroundColor","useNative"),t.Text=t.util.createClass(t.Object,{_dimensionAffectingProps:{fontSize:!0,fontWeight:!0,fontFamily:!0,textDecoration:!0,fontStyle:!0,lineHeight:!0,stroke:!0,strokeWidth:!0,text:!0},type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",textDecoration:"",textShadow:"",textAlign:"left",fontStyle:"",lineHeight:1.3,backgroundColor:"",textBackgroundColor:"",path:null,useNative:!0,stateProperties:o,initialize:function(e,t){t=t||{},this.text=e,this.__skipDimension=!0,this.setOptions(t),this.__skipDimension=!1,this._initDimensions(),this.setCoords()},_initDimensions:function(){if(this.__skipDimension)return;var e=t.util.createCanvasElement();this._render(e.getContext("2d"))},toString:function(){return"#'},_render:function(e){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){this.transform(e,t.isLikelyNode),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),e.save(),this._setTextShadow(e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.textShadow&&e.restore(),e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0,this.setCoords()},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(!this.textShadow)return;var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]},_drawChars:function(e,t,n,r,i){t[e](n,r,i)},_drawTextLine:function(e,t,n,r,i,s){if(this.textAlign!=="justify"){this._drawChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},getText:function(){return this.text},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Text.prototype,{_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_initDummyElementForCufon:function(){var e=fabric.document.createElement("pre"),t=fabric.document.createElement("div");return t.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs"),r=n.createReadStream(e),i="";r.on("data",function(e){i+=e}),r.on("end",function(){t(i)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file +:1,backgroundImageStretch:!0,overlayImage:"",overlayImageLeft:0,overlayImageTop:0,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,onBeforeScaleRotate:function(){},_initStatic:function(e,t){this._objects=[],this._createLowerCanvas(e),this._initOptions(t),t.overlayImage&&this.setOverlayImage(t.overlayImage,this.renderAll.bind(this)),t.backgroundImage&&this.setBackgroundImage(t.backgroundImage,this.renderAll.bind(this)),t.backgroundColor&&this.setBackgroundColor(t.backgroundColor,this.renderAll.bind(this)),this.calcOffset()},calcOffset:function(){return this._offset=t(this.lowerCanvasEl),this},setOverlayImage:function(e,t,n){return fabric.util.loadImage(e,function(e){this.overlayImage=e,n&&"overlayImageLeft"in n&&(this.overlayImageLeft=n.overlayImageLeft),n&&"overlayImageTop"in n&&(this.overlayImageTop=n.overlayImageTop),t&&t()},this),this},setBackgroundImage:function(e,t,n){return fabric.util.loadImage(e,function(e){this.backgroundImage=e,n&&"backgroundImageOpacity"in n&&(this.backgroundImageOpacity=n.backgroundImageOpacity),n&&"backgroundImageStretch"in n&&(this.backgroundImageStretch=n.backgroundImageStretch),t&&t()},this),this},setBackgroundColor:function(e,t){if(e.source){var n=this;fabric.util.loadImage(e.source,function(r){n.backgroundColor=new fabric.Pattern({source:r,repeat:e.repeat}),t&&t()})}else this.backgroundColor=e,t&&t();return this},_createCanvasElement:function(){var e=fabric.document.createElement("canvas");e.style||(e.style={});if(!e)throw i;return this._initCanvasElement(e),e},_initCanvasElement:function(e){fabric.util.createCanvasElement(e);if(typeof e.getContext=="undefined")throw i},_initOptions:function(e){for(var t in e)this[t]=e[t];this.width=parseInt(this.lowerCanvasEl.width,10)||0,this.height=parseInt(this.lowerCanvasEl.height,10)||0;if(!this.lowerCanvasEl.style)return;this.lowerCanvasEl.style.width=this.width+"px",this.lowerCanvasEl.style.height=this.height+"px"},_createLowerCanvas:function(e){this.lowerCanvasEl=fabric.util.getById(e)||this._createCanvasElement(),this._initCanvasElement(this.lowerCanvasEl),fabric.util.addClass(this.lowerCanvasEl,"lower-canvas"),this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(e){return this._setDimension("width",e)},setHeight:function(e){return this._setDimension("height",e)},setDimensions:function(e){for(var t in e)this._setDimension(t,e[t]);return this},_setDimension:function(e,t){return this.lowerCanvasEl[e]=t,this.lowerCanvasEl.style[e]=t+"px",this.upperCanvasEl&&(this.upperCanvasEl[e]=t,this.upperCanvasEl.style[e]=t+"px"),this.cacheCanvasEl&&(this.cacheCanvasEl[e]=t),this.wrapperEl&&(this.wrapperEl.style[e]=t+"px"),this[e]=t,this.calcOffset(),this.renderAll(),this},getElement:function(){return this.lowerCanvasEl},getActiveObject:function(){return null},getActiveGroup:function(){return null},_draw:function(e,t){if(!t)return;if(this.controlsAboveOverlay){var n=t.hasBorders,r=t.hasControls;t.hasBorders=t.hasControls=!1,t.render(e),t.hasBorders=n,t.hasControls=r}else t.render(e)},_onObjectAdded:function(e){this.stateful&&e.setupState(),e.setCoords(),e.canvas=this,this.fire("object:added",{target:e}),e.fire("added")},_onObjectRemoved:function(e){this.fire("object:removed",{target:e}),e.fire("removed")},getObjects:function(){return this._objects},clearContext:function(e){return e.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this._objects.length=0,this.discardActiveGroup&&this.discardActiveGroup(),this.discardActiveObject&&this.discardActiveObject(),this.clearContext(this.contextContainer),this.contextTop&&this.clearContext(this.contextTop),this.fire("canvas:cleared"),this.renderAll(),this},renderAll:function(e){var t=this[e===!0&&this.interactive?"contextTop":"contextContainer"];this.contextTop&&this.selection&&!this._groupSelector&&this.clearContext(this.contextTop),e||this.clearContext(t),this.fire("before:render"),this.clipTo&&fabric.util.clipContext(this,t),this.backgroundColor&&(t.fillStyle=this.backgroundColor.toLive?this.backgroundColor.toLive(t):this.backgroundColor,t.fillRect(this.backgroundColor.offsetX||0,this.backgroundColor.offsetY||0,this.width,this.height)),typeof this.backgroundImage=="object"&&this._drawBackroundImage(t);var n=this.getActiveGroup();for(var r=0,i=this._objects.length;r','\n'),t.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),""),this.backgroundColor&&this.backgroundColor.source&&t.push('"),this.backgroundImage&&t.push(''),this.overlayImage&&t.push('');var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r"),t.join("")},remove:function(e){return this.getActiveObject()===e&&(this.fire("before:selection:cleared",{target:e}),this.discardActiveObject(),this.fire("selection:cleared")),fabric.Collection.remove.call(this,e)},sendToBack:function(e){return n(this._objects,e),this._objects.unshift(e),this.renderAll&&this.renderAll()},bringToFront:function(e){return n(this._objects,e),this._objects.push(e),this.renderAll&&this.renderAll()},sendBackwards:function(e,t){var r=this._objects.indexOf(e);if(r!==0){var i;if(t){i=r;for(var s=r-1;s>=0;--s){var o=e.intersectsWithObject(this._objects[s])||e.isContainedWithinObject(this._objects[s])||this._objects[s].isContainedWithinObject(e);if(o){i=s;break}}}else i=r-1;n(this._objects,e),this._objects.splice(i,0,e),this.renderAll&&this.renderAll()}return this},bringForward:function(e,t){var r=this._objects.indexOf(e);if(r!==this._objects.length-1){var i;if(t){i=r;for(var s=r+1;s"},e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',toGrayscale:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=n.width,s=n.height,o,u,a,f;for(a=0;a0&&(t>this.targetFindTolerance?t-=this.targetFindTolerance:t=0,n>this.targetFindTolerance?n-=this.targetFindTolerance:n=0);var o=!0,u=r.getImageData(t,n,this.targetFindTolerance*2||1,this.targetFindTolerance*2||1);for(var a=3,f=u.data.length;ao.padding?l.x<0?l.x+=o.padding:l.x-=o.padding:l.x=0,s(l.y)>o.padding?l.y<0?l.y+=o.padding:l.y-=o.padding:l.y=0;var c=o.scaleX,h=o.scaleY;if(n==="equally"&&!u&&!a){var p=l.y+l.x,d=(o.height+o.strokeWidth)*r.original.scaleY+(o.width+o.strokeWidth)*r.original.scaleX;c=r.original.scaleX*p/d,h=r.original.scaleY*p/d,o.set("scaleX",c),o.set("scaleY",h)}else n?n==="x"&&!o.get("lockUniScaling")?(c=l.x/(o.width+o.strokeWidth),u||o.set("scaleX",c)):n==="y"&&!o.get("lockUniScaling")&&(h=l.y/(o.height+o.strokeWidth),a||o.set("scaleY",h)):(c=l.x/(o.width+o.strokeWidth),h=l.y/(o.height+o.strokeWidth),u||o.set("scaleX",c),a||o.set("scaleY",h));c<0&&(r.originX==="left"?r.originX="right":r.originX==="right"&&(r.originX="left")),h<0&&(r.originY==="top"?r.originY="bottom":r.originY==="bottom"&&(r.originY="top")),o.setPositionByOrigin(f,r.originX,r.originY)},_rotateObject:function(e,t){var n=this._currentTransform,s=this._offset;if(n.target.get("lockRotation"))return;var o=i(n.ey-n.top-s.top,n.ex-n.left-s.left),u=i(t-n.top-s.top,e-n.left-s.left),a=r(u-o+n.theta);a<0&&(a=360+a),n.target.angle=a},_setCursor:function(e){this.upperCanvasEl.style.cursor=e},_resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.setAngle(0)},_drawSelection:function(){var e=this.contextTop,t=this._groupSelector,n=t.left,r=t.top,i=s(n),o=s(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),i,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var u=t.ex+a-(n>0?0:i),f=t.ey+a-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,u,f,u+i,f,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f+o-1,u+i,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,u,f,u,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,u+i-1,f,u+i-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+a-(n>0?0:i),t.ey+a-(r>0?0:o),i,o)},_findSelectedObjects:function(e){var t=[],n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,s=r+this._groupSelector.top,a,f=new fabric.Point(o(n,i),o(r,s)),l=new fabric.Point(u(n,i),u(r,s)),c=n===i&&r===s;for(var h=this._objects.length;h--;){a=this._objects[h];if(!a)continue;if(a.intersectsWithRect(f,l)||a.isContainedWithinRect(f,l)||a.containsPoint(f)||a.containsPoint(l))if(this.selection&&a.selectable){a.set("active",!0),t.push(a);if(c)break}}t.length===1?this.setActiveObject(t[0],e):t.length>1&&(t=new fabric.Group(t.reverse()),this.setActiveGroup(t),t.saveCoords(),this.fire("selection:created",{target:t}),this.renderAll())},findTarget:function(e,t){if(this.skipTargetFind)return;var n,r=this.getPointer(e);if(this.controlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay&&this.lastRenderedObjectWithControlsAboveOverlay.visible&&this.containsPoint(e,this.lastRenderedObjectWithControlsAboveOverlay)&&this.lastRenderedObjectWithControlsAboveOverlay._findTargetCorner(e,this._offset))return n=this.lastRenderedObjectWithControlsAboveOverlay,n;var i=this.getActiveGroup();if(i&&!t&&this.containsPoint(e,i))return n=i,n;var s=[];for(var o=this._objects.length;o--;)if(this._objects[o]&&this._objects[o].visible&&this.containsPoint(e,this._objects[o])){if(!this.perPixelTargetFind&&!this._objects[o].perPixelTargetFind){n=this._objects[o],this.relatedTarget=n;break}s[s.length]=this._objects[o]}for(var u=0,a=s.length;u"},get:function(e){return this[e]},set:function(e,t){if(typeof e=="object")for(var n in e)this._set(n,e[n]);else typeof t=="function"&&e!=="clipTo"?this._set(e,t(this.get(e))):this._set(e,t);return this},_set:function(e,t){var n=e==="scaleX"||e==="scaleY";n&&(t=this._constrainScale(t));if(e==="scaleX"&&t<0)this.flipX=!this.flipX,t*=-1;else if(e==="scaleY"&&t<0)this.flipY=!this.flipY,t*=-1;else if(e==="width"||e==="height")this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2);return this[e]=t,this},toggle:function(e){var t=this.get(e);return typeof t=="boolean"&&this.set(e,!t),this},setSourcePath:function(e){return this.sourcePath=e,this},render:function(e,n){if(this.width===0||this.height===0||!this.visible)return;e.save();var r=this.transformMatrix;r&&!this.group&&e.setTransform(r[0],r[1],r[2],r[3],r[4],r[5]),n||this.transform(e),this.stroke&&(e.lineWidth=this.strokeWidth,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin,e.miterLimit=this.strokeMiterLimit,e.strokeStyle=this.stroke.toLive?this.stroke.toLive(e):this.stroke),this.overlayFill?e.fillStyle=this.overlayFill:this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill),r&&this.group&&(e.translate(-this.group.width/2,-this.group.height/2),e.transform(r[0],r[1],r[2],r[3],r[4],r[5])),this._setShadow(e),this.clipTo&&t.util.clipContext(this,e),this._render(e,n),this.clipTo&&e.restore(),this._removeShadow(e),this.active&&!n&&(this.drawBorders(e),this.drawControls(e)),e.restore()},_setShadow:function(e){if(!this.shadow)return;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_removeShadow:function(e){e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0},_renderFill:function(e){if(!this.fill)return;this.fill.toLive&&(e.save(),e.translate(-this.width/2+this.fill.offsetX||0,-this.height/2+this.fill.offsetY||0)),e.fill(),this.fill.toLive&&e.restore(),this.shadow&&!this.shadow.affectStroke&&this._removeShadow(e)},_renderStroke:function(e){if(!this.stroke)return;e.save(),this.strokeDashArray?(1&this.strokeDashArray.length&&this.strokeDashArray.push.apply(this.strokeDashArray,this.strokeDashArray),o?(e.setLineDash(this.strokeDashArray),this._stroke&&this._stroke(e)):this._renderDashedStroke&&this._renderDashedStroke(e),e.stroke()):this._stroke?this._stroke(e):e.stroke(),this._removeShadow(e),e.restore()},clone:function(e,n){return this.constructor.fromObject?this.constructor.fromObject(this.toObject(n),e):new t.Object(this.toObject(n))},cloneAsImage:function(e){var n=this.toDataURL();return t.util.loadImage(n,function(n){e&&e(new t.Image(n))}),this},toDataURL:function(e){e||(e={});var n=t.util.createCanvasElement();n.width=this.getBoundingRectWidth(),n.height=this.getBoundingRectHeight(),t.util.wrapElement(n,"div");var r=new t.Canvas(n);e.format==="jpeg"&&(r.backgroundColor="#fff");var i={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set({active:!1,left:n.width/2,top:n.height/2}),r.add(this);var s=r.toDataURL(e);return this.set(i).setCoords(),r.dispose(),r=null,s},isType:function(e){return this.type===e},toGrayscale:function(){var e=this.get("fill");return e&&this.set("overlayFill",(new t.Color(e)).toGrayscale().toRgb()),this},complexity:function(){return 0},toJSON:function(e){return this.toObject(e)},setGradient:function(e,n){n||(n={});var r={colorStops:[]};r.type=n.type||(n.r1||n.r2?"radial":"linear"),r.coords={x1:n.x1,y1:n.y1,x2:n.x2,y2:n.y2};if(n.r1||n.r2)r.coords.r1=n.r1,r.coords.r2=n.r2;for(var i in n.colorStops){var s=new t.Color(n.colorStops[i]);r.colorStops.push({offset:i,color:s.toRgb(),opacity:s.getAlpha()})}this.set(e,t.Gradient.forObject(this,r))},setPatternFill:function(e){return this.set("fill",new t.Pattern(e))},setShadow:function(e){return this.set("shadow",new t.Shadow(e))},centerH:function(){return this.canvas.centerObjectH(this),this},centerV:function(){return this.canvas.centerObjectV(this),this},center:function(){return this.centerH().centerV()},remove:function(){return this.canvas.remove(this)},sendToBack:function(){return this.group?t.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?t.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas.bringToFront(this),this},sendBackwards:function(e){return this.group?t.StaticCanvas.prototype.sendBackwards.call(this.group,this,e):this.canvas.sendBackwards(this,e),this},bringForward:function(e){return this.group?t.StaticCanvas.prototype.bringForward.call(this.group,this,e):this.canvas.bringForward(this,e),this},moveTo:function(e){return this.group?t.StaticCanvas.prototype.moveTo.call(this.group,this,e):this.canvas.moveTo(this,e),this}}),t.util.createAccessors(t.Object),t.Object.prototype.rotate=t.Object.prototype.setAngle,n(t.Object.prototype,t.Observable),t.Object.NUM_FRACTION_DIGITS=2,t.Object.__uid=0}(typeof exports!="undefined"?exports:this),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{translateToCenterPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},translateToOriginPoint:function(t,n,r){var i=t.x,s=t.y;return n==="left"?i=t.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"&&(i=t.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2),r==="top"?s=t.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"&&(s=t.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2),fabric.util.rotatePoint(new fabric.Point(i,s),t,e(this.angle))},getCenterPoint:function(){return this.translateToCenterPoint(new fabric.Point(this.left,this.top),this.originX,this.originY)},toLocalPoint:function(t,n,r){var i=this.getCenterPoint(),s,o;return n!==undefined&&r!==undefined?(n==="left"?s=i.x-(this.getWidth()+this.strokeWidth*this.scaleX)/2:n==="right"?s=i.x+(this.getWidth()+this.strokeWidth*this.scaleX)/2:s=i.x,r==="top"?o=i.y-(this.getHeight()+this.strokeWidth*this.scaleY)/2:r==="bottom"?o=i.y+(this.getHeight()+this.strokeWidth*this.scaleY)/2:o=i.y):(s=this.left,o=this.top),fabric.util.rotatePoint(new fabric.Point(t.x,t.y),i,-e(this.angle)).subtractEquals(new fabric.Point(s,o))},setPositionByOrigin:function(e,t,n){var r=this.translateToCenterPoint(e,t,n),i=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",i.x),this.set("top",i.y)},adjustPosition:function(t){var n=e(this.angle),r=this.getWidth()/2,i=Math.cos(n)*r,s=Math.sin(n)*r,o=this.getWidth(),u=Math.cos(n)*o,a=Math.sin(n)*o;this.originX==="center"&&t==="left"||this.originX==="right"&&t==="center"?(this.left-=i,this.top-=s):this.originX==="left"&&t==="center"||this.originX==="center"&&t==="right"?(this.left+=i,this.top+=s):this.originX==="left"&&t==="right"?(this.left+=u,this.top+=a):this.originX==="right"&&t==="left"&&(this.left-=u,this.top-=a),this.setCoords(),this.originX=t},_getLeftTopCoords:function(){var t=e(this.angle),n=this.getWidth()/2,r=Math.cos(t)*n,i=Math.sin(t)*n,s=this.left,o=this.top;if(this.originX==="center"||this.originX==="right")s-=r;if(this.originY==="center"||this.originY==="bottom")o-=i;return{x:s,y:o}}})}(),function(){var e=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{oCoords:null,intersectsWithRect:function(e,t){var n=this.oCoords,r=new fabric.Point(n.tl.x,n.tl.y),i=new fabric.Point(n.tr.x,n.tr.y),s=new fabric.Point(n.bl.x,n.bl.y),o=new fabric.Point(n.br.x,n.br.y),u=fabric.Intersection.intersectPolygonRectangle([r,i,o,s],e,t);return u.status==="Intersection"},intersectsWithObject:function(e){function t(e){return{tl:new fabric.Point(e.tl.x,e.tl.y),tr:new fabric.Point(e.tr.x,e.tr.y),bl:new fabric.Point(e.bl.x,e.bl.y),br:new fabric.Point(e.br.x,e.br.y)}}var n=t(this.oCoords),r=t(e.oCoords),i=fabric.Intersection.intersectPolygonPolygon([n.tl,n.tr,n.br,n.bl],[r.tl,r.tr,r.br,r.bl]);return i.status==="Intersection"},isContainedWithinObject:function(e){var t=e.getBoundingRect(),n=new fabric.Point(t.left,t.top),r=new fabric.Point(t.left+t.width,t.top+t.height);return this.isContainedWithinRect(n,r)},isContainedWithinRect:function(e,t){var n=this.getBoundingRect();return n.left>e.x&&n.left+n.widthe.y&&n.top+n.height=e.y&&f.d.y>=e.y)continue;f.o.x===f.d.x&&f.o.x>=e.x?(o=f.o.x,u=e.y):(n=0,r=(f.d.y-f.o.y)/(f.d.x-f.o.x),i=e.y-n*e.x,s=f.o.y-r*f.o.x,o=-(i-s)/(n-r),u=i+n*o),o>=e.x&&(a+=1);if(a===2)break}return a},getBoundingRectWidth:function(){return this.getBoundingRect().width},getBoundingRectHeight:function(){return this.getBoundingRect().height},getBoundingRect:function(){this.oCoords||this.setCoords();var e=[this.oCoords.tl.x,this.oCoords.tr.x,this.oCoords.br.x,this.oCoords.bl.x],t=fabric.util.array.min(e),n=fabric.util.array.max(e),r=Math.abs(t-n),i=[this.oCoords.tl.y,this.oCoords.tr.y,this.oCoords.br.y,this.oCoords.bl.y],s=fabric.util.array.min(i),o=fabric.util.array.max(i),u=Math.abs(s-o);return{left:t,top:s,width:r,height:u}},getWidth:function(){return this.width*this.scaleX},getHeight:function(){return this.height*this.scaleY},_constrainScale:function(e){return Math.abs(e)1?this.strokeWidth:0,n=this.padding,r=e(this.angle);this.currentWidth=(this.width+t)*this.scaleX+n*2,this.currentHeight=(this.height+t)*this.scaleY+n*2,this.currentWidth<0&&(this.currentWidth=Math.abs(this.currentWidth));var i=Math.sqrt(Math.pow(this.currentWidth/2,2)+Math.pow(this.currentHeight/2,2)),s=Math.atan(isFinite(this.currentHeight/this.currentWidth)?this.currentHeight/this.currentWidth:0),o=Math.cos(s+r)*i,u=Math.sin(s+r)*i,a=Math.sin(r),f=Math.cos(r),l=this.getCenterPoint(),c={x:l.x-o,y:l.y-u},h={x:c.x+this.currentWidth*f,y:c.y+this.currentWidth*a},p={x:h.x-this.currentHeight*a,y:h.y+this.currentHeight*f},d={x:c.x-this.currentHeight*a,y:c.y+this.currentHeight*f},v={x:c.x-this.currentHeight/2*a,y:c.y+this.currentHeight/2*f},m={x:c.x+this.currentWidth/2*f,y:c.y+this.currentWidth/2*a},g={x:h.x-this.currentHeight/2*a,y:h.y+this.currentHeight/2*f},y={x:d.x+this.currentWidth/2*f,y:d.y+this.currentWidth/2*a},b={x:m.x,y:m.y};return this.oCoords={tl:c,tr:h,br:p,bl:d,ml:v,mt:m,mr:g,mb:y,mtr:b},this._setCornerCoords&&this._setCornerCoords(),this}})}(),fabric.util.object.extend(fabric.Object.prototype,{hasStateChanged:function(){return this.stateProperties.some(function(e){return this[e]!==this.originalState[e]},this)},saveState:function(e){return this.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),e&&e.stateProperties&&e.stateProperties.forEach(function(e){this.originalState[e]=this.get(e)},this),this},setupState:function(){return this.originalState={},this.saveState(),this}}),function(){var e=fabric.util.getPointer,t=fabric.util.degreesToRadians;fabric.util.object.extend(fabric.Object.prototype,{_findTargetCorner:function(t,n){if(!this.hasControls||!this.active)return!1;var r=e(t,this.canvas.upperCanvasEl),i=r.x-n.left,s=r.y-n.top,o,u;for(var a in this.oCoords){if(a==="mtr"&&!this.hasRotatingPoint)continue;if(!(!this.get("lockUniScaling")||a!=="mt"&&a!=="mr"&&a!=="mb"&&a!=="ml"))continue;u=this._getImageLines(this.oCoords[a].corner),o=this._findCrossPoints({x:i,y:s},u);if(o!==0&&o%2===1)return this.__corner=a,a}return!1},_setCornerCoords:function(){var e=this.oCoords,n=t(this.angle),r=t(45-this.angle),i=Math.sqrt(2*Math.pow(this.cornerSize,2))/2,s=i*Math.cos(r),o=i*Math.sin(r),u=Math.sin(n),a=Math.cos(n);e.tl.corner={tl:{x:e.tl.x-o,y:e.tl.y-s},tr:{x:e.tl.x+s,y:e.tl.y-o},bl:{x:e.tl.x-s,y:e.tl.y+o},br:{x:e.tl.x+o,y:e.tl.y+s}},e.tr.corner={tl:{x:e.tr.x-o,y:e.tr.y-s},tr:{x:e.tr.x+s,y:e.tr.y-o},br:{x:e.tr.x+o,y:e.tr.y+s},bl:{x:e.tr.x-s,y:e.tr.y+o}},e.bl.corner={tl:{x:e.bl.x-o,y:e.bl.y-s},bl:{x:e.bl.x-s,y:e.bl.y+o},br:{x:e.bl.x+o,y:e.bl.y+s},tr:{x:e.bl.x+s,y:e.bl.y-o}},e.br.corner={tr:{x:e.br.x+s,y:e.br.y-o},bl:{x:e.br.x-s,y:e.br.y+o},br:{x:e.br.x+o,y:e.br.y+s},tl:{x:e.br.x-o,y:e.br.y-s}},e.ml.corner={tl:{x:e.ml.x-o,y:e.ml.y-s},tr:{x:e.ml.x+s,y:e.ml.y-o},bl:{x:e.ml.x-s,y:e.ml.y+o},br:{x:e.ml.x+o,y:e.ml.y+s}},e.mt.corner={tl:{x:e.mt.x-o,y:e.mt.y-s},tr:{x:e.mt.x+s,y:e.mt.y-o},bl:{x:e.mt.x-s,y:e.mt.y+o},br:{x:e.mt.x+o,y:e.mt.y+s}},e.mr.corner={tl:{x:e.mr.x-o,y:e.mr.y-s},tr:{x:e.mr.x+s,y:e.mr.y-o},bl:{x:e.mr.x-s,y:e.mr.y+o},br:{x:e.mr.x+o,y:e.mr.y+s}},e.mb.corner={tl:{x:e.mb.x-o,y:e.mb.y-s},tr:{x:e.mb.x+s,y:e.mb.y-o},bl:{x:e.mb.x-s,y:e.mb.y+o},br:{x:e.mb.x+o,y:e.mb.y+s}},e.mtr.corner={tl:{x:e.mtr.x-o+u*this.rotatingPointOffset,y:e.mtr.y-s-a*this.rotatingPointOffset},tr:{x:e.mtr.x+s+u*this.rotatingPointOffset,y:e.mtr.y-o-a*this.rotatingPointOffset},bl:{x:e.mtr.x-s+u*this.rotatingPointOffset,y:e.mtr.y+o-a*this.rotatingPointOffset},br:{x:e.mtr.x+o+u*this.rotatingPointOffset,y:e.mtr.y+s-a*this.rotatingPointOffset}}},drawBorders:function(e){if(!this.hasBorders)return this;var t=this.padding,n=t*2,r=this.strokeWidth>1?this.strokeWidth:0;e.save(),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=this.borderColor;var i=1/this._constrainScale(this.scaleX),s=1/this._constrainScale(this.scaleY);e.lineWidth=1/this.borderScaleFactor,e.scale(i,s);var o=this.getWidth(),u=this.getHeight();e.strokeRect(~~(-(o/2)-t-r/2*this.scaleX)+.5,~~(-(u/2)-t-r/2*this.scaleY)+.5,~~(o+n+r*this.scaleX),~~(u+n+r*this.scaleY));if(this.hasRotatingPoint&&!this.get("lockRotation")&&this.hasControls){var a=(this.flipY?u+r*this.scaleY+t*2:-u-r*this.scaleY-t*2)/2;e.beginPath(),e.moveTo(0,a),e.lineTo(0,a+(this.flipY?this.rotatingPointOffset:-this.rotatingPointOffset)),e.closePath(),e.stroke()}return e.restore(),this},drawControls:function(e){if(!this.hasControls)return this;var t=this.cornerSize,n=t/2,r=this.strokeWidth>1?this.strokeWidth/2:0,i=-(this.width/2),s=-(this.height/2),o,u,a=t/this.scaleX,f=t/this.scaleY,l=this.padding/this.scaleX,c=this.padding/this.scaleY,h=n/this.scaleY,p=n/this.scaleX,d=(n-t)/this.scaleX,v=(n-t)/this.scaleY,m=this.height,g=this.width,y=this.transparentCorners?"strokeRect":"fillRect",b=this.transparentCorners,w=typeof G_vmlCanvasManager!="undefined";return e.save(),e.lineWidth=1/Math.max(this.scaleX,this.scaleY),e.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,e.strokeStyle=e.fillStyle=this.cornerColor,o=i-p-r-l,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g-p+r+l,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),this.get("lockUniScaling")||(o=i+g/2-p,u=s-h-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g/2-p,u=s+m+v+r+c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i+g+d+r+l,u=s+m/2-h,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f),o=i-p-r-l,u=s+m/2-h,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),this.hasRotatingPoint&&(o=i+g/2-p,u=this.flipY?s+m+this.rotatingPointOffset/this.scaleY-f/2+r+c:s-this.rotatingPointOffset/this.scaleY-f/2-r-c,w||b||e.clearRect(o,u,a,f),e[y](o,u,a,f)),e.restore(),this}})}(),fabric.util.object.extend(fabric.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("left"),endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(t){e.set("left",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxCenterObjectV:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("top"),endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(t){e.set("top",t),s.renderAll(),i()},onComplete:function(){e.setCoords(),r()}}),this},fxRemove:function(e,t){t=t||{};var n=function(){},r=t.onComplete||n,i=t.onChange||n,s=this;return fabric.util.animate({startValue:e.get("opacity"),endValue:0,duration:this.FX_DURATION,onStart:function(){e.set("active",!1)},onChange:function(t){e.set("opacity",t),s.renderAll(),i()},onComplete:function(){s.remove(e),r()}}),this}}),fabric.util.object.extend(fabric.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var e=[],t,n;for(t in arguments[0])e.push(t);for(var r=0,i=e.length;r'),e.join("")},complexity:function(){return 1}}),t.Line.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),t.Line.fromElement=function(e,r){var i=t.parseAttributes(e,t.Line.ATTRIBUTE_NAMES),s=[i.x1||0,i.y1||0,i.x2||0,i.y2||0];return new t.Line(s,n(i,r))},t.Line.fromObject=function(e){var n=[e.x1,e.y1,e.x2,e.y2];return new t.Line(n,e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function i(e){return"radius"in e&&e.radius>0}var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Circle){t.warn("fabric.Circle is already defined.");return}t.Circle=t.util.createClass(t.Object,{type:"circle",initialize:function(e){e=e||{},this.set("radius",e.radius||0),this.callSuper("initialize",e);var t=this.get("radius")*2;this.set("width",t).set("height",t)},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(){var e=this._createBaseSVGMarkup();return e.push("'),e.join("")},_render:function(e,t){e.beginPath(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,e.arc(t?this.left:0,t?this.top:0,this.radius,0,n,!1),e.closePath(),this._renderFill(e),this._renderStroke(e)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(e){this.radius=e,this.set("width",e*2).set("height",e*2)},complexity:function(){return 1}}),t.Circle.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),t.Circle.fromElement=function(e,n){n||(n={});var s=t.parseAttributes(e,t.Circle.ATTRIBUTE_NAMES);if(!i(s))throw new Error("value of `r` attribute is required and can not be negative");"left"in s&&(s.left-=n.width/2||0),"top"in s&&(s.top-=n.height/2||0);var o=new t.Circle(r(s,n));return o.cx=parseFloat(e.getAttribute("cx"))||0,o.cy=parseFloat(e.getAttribute("cy"))||0,o},t.Circle.fromObject=function(e){return new t.Circle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Triangle){t.warn("fabric.Triangle is already defined");return}t.Triangle=t.util.createClass(t.Object,{type:"triangle",initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("width",e.width||100).set("height",e.height||100)},_render:function(e){var t=this.width/2,n=this.height/2;e.beginPath(),e.moveTo(-t,n),e.lineTo(0,-n),e.lineTo(t,n),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=this.width/2,r=this.height/2;e.beginPath(),t.util.drawDashedLine(e,-n,r,0,-r,this.strokeDashArray),t.util.drawDashedLine(e,0,-r,n,r,this.strokeDashArray),t.util.drawDashedLine(e,n,r,-n,r,this.strokeDashArray),e.closePath()},toSVG:function(){var e=this._createBaseSVGMarkup(),t=this.width/2,n=this.height/2,r=[-t+" "+n,"0 "+ -n,t+" "+n].join(",");return e.push("'),e.join("")},complexity:function(){return 1}}),t.Triangle.fromObject=function(e){return new t.Triangle(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=Math.PI*2,r=t.util.object.extend;if(t.Ellipse){t.warn("fabric.Ellipse is already defined.");return}t.Ellipse=t.util.createClass(t.Object,{type:"ellipse",rx:0,ry:0,initialize:function(e){e=e||{},this.callSuper("initialize",e),this.set("rx",e.rx||0),this.set("ry",e.ry||0),this.set("width",this.get("rx")*2),this.set("height",this.get("ry")*2)},toObject:function(e){return r(this.callSuper("toObject",e),{rx:this.get("rx"),ry:this.get("ry")})},toSVG:function(){var e=this._createBaseSVGMarkup();return e.push("'),e.join("")},render:function(e,t){if(this.rx===0||this.ry===0)return;return this.callSuper("render",e,t)},_render:function(e,t){e.beginPath(),e.save(),e.globalAlpha=this.group?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&this.group&&e.translate(this.cx,this.cy),e.transform(1,0,0,this.ry/this.rx,0,0),e.arc(t?this.left:0,t?this.top:0,this.rx,0,n,!1),this._renderFill(e),this._renderStroke(e),e.restore()},complexity:function(){return 1}}),t.Ellipse.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),t.Ellipse.fromElement=function(e,n){n||(n={});var i=t.parseAttributes(e,t.Ellipse.ATTRIBUTE_NAMES),s=i.left,o=i.top;"left"in i&&(i.left-=n.width/2||0),"top"in i&&(i.top-=n.height/2||0);var u=new t.Ellipse(r(i,n));return u.cx=s||0,u.cy=o||0,u},t.Ellipse.fromObject=function(e){return new t.Ellipse(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";function r(e){return e.left=e.left||0,e.top=e.top||0,e}var t=e.fabric||(e.fabric={}),n=t.util.object.extend;if(t.Rect){console.warn("fabric.Rect is already defined");return}t.Rect=t.util.createClass(t.Object,{type:"rect",rx:0,ry:0,strokeDashArray:null,initialize:function(e){e=e||{},this._initStateProperties(),this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_initStateProperties:function(){this.stateProperties=this.stateProperties.concat(["rx","ry"])},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(e){var t=this.rx||0,n=this.ry||0,r=-this.width/2,i=-this.height/2,s=this.width,o=this.height,u=this.group&&this.group.type!=="group";e.beginPath(),e.globalAlpha=u?e.globalAlpha*this.opacity:this.opacity,this.transformMatrix&&u&&e.translate(this.width/2+this.x,this.height/2+this.y),!this.transformMatrix&&u&&e.translate(-this.group.width/2+this.width/2+this.x,-this.group.height/2+this.height/2+this.y);var a=t!==0||n!==0;e.moveTo(r+t,i),e.lineTo(r+s-t,i),a&&e.quadraticCurveTo(r+s,i,r+s,i+n,r+s,i+n),e.lineTo(r+s,i+o-n),a&&e.quadraticCurveTo(r+s,i+o,r+s-t,i+o,r+s-t,i+o),e.lineTo(r+t,i+o),a&&e.quadraticCurveTo(r,i+o,r,i+o-n,r,i+o-n),e.lineTo(r,i+n),a&&e.quadraticCurveTo(r,i,r+t,i,r+t,i),e.closePath(),this._renderFill(e),this._renderStroke(e)},_renderDashedStroke:function(e){var n=-this.width/2,r=-this.height/2,i=this.width,s=this.height;e.beginPath(),t.util.drawDashedLine(e,n,r,n+i,r,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r,n+i,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n+i,r+s,n,r+s,this.strokeDashArray),t.util.drawDashedLine(e,n,r+s,n,r,this.strokeDashArray),e.closePath()},_normalizeLeftTopProperties:function(e){return"left"in e&&this.set("left",e.left+this.getWidth()/2),this.set("x",e.left||0),"top"in e&&this.set("top",e.top+this.getHeight()/2),this.set("y",e.top||0),this},toObject:function(e){return n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")})},toSVG:function(){var e=this._createBaseSVGMarkup();return e.push("'),e.join("")},complexity:function(){return 1}}),t.Rect.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),t.Rect.fromElement=function(e,i){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=r(s);var o=new t.Rect(n(i?t.util.object.clone(i):{},s));return o._normalizeLeftTopProperties(s),o},t.Rect.fromObject=function(e){return new t.Rect(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.toFixed,r=t.util.array.min;if(t.Polyline){t.warn("fabric.Polyline is already defined");return}t.Polyline=t.util.createClass(t.Object,{type:"polyline",initialize:function(e,t,n){t=t||{},this.set("points",e),this.callSuper("initialize",t),this._calcDimensions(n)},_calcDimensions:function(e){return t.Polygon.prototype._calcDimensions.call(this,e)},toObject:function(e){return t.Polygon.prototype.toObject.call(this,e)},toSVG:function(){var e=[],t=this._createBaseSVGMarkup();for(var r=0,i=this.points.length;r'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n'),t.join("")},_render:function(e){var t;e.beginPath(),e.moveTo(this.points[0].x,this.points[0].y);for(var n=0,r=this.points.length;n"},toObject:function(e){var t=s(this.callSuper("toObject",e),{path:this.path,pathOffset:this.pathOffset});return this.sourcePath&&(t.sourcePath=this.sourcePath),this.transformMatrix&&(t.transformMatrix=this.transformMatrix),t},toDatalessObject:function(e){var t=this.toObject(e);return this.sourcePath&&(t.path=this.sourcePath),delete t.sourcePath,t},toSVG:function(){var e=[],t=this._createBaseSVGMarkup();for(var n=0,r=this.path.length;n',"",""),t.join("")},complexity:function(){return this.path.length},_parsePath:function(){var e=[],n=[],r,i,s=/(-?\.\d+)|(-?\d+(\.\d+)?)/g,o,u;for(var a=0,f,l=this.path.length;ad)for(var v=1,m=f.length;v"];for(var n=0,r=e.length;n"),t.join("")},toString:function(){return"#"},isSameColor:function(){var e=this.getObjects()[0].get("fill");return this.getObjects().every(function(t){return t.get("fill")===e})},complexity:function(){return this.paths.reduce(function(e,t){return e+(t&&t.complexity?t.complexity():0)},0)},toGrayscale:function(){var e=this.paths.length;while(e--)this.paths[e].toGrayscale();return this},getObjects:function(){return this.paths}}),t.PathGroup.fromObject=function(e,n){typeof e.paths=="string"?t.loadSVGFromURL(e.paths,function(r){var i=e.paths;delete e.paths;var s=t.util.groupSVGElements(r,e,i);n(s)}):t.util.enlivenObjects(e.paths,function(r){delete e.paths,n(new t.PathGroup(r,e))})},t.PathGroup.async=!0}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.array.min,i=t.util.array.max,s=t.util.array.invoke;if(t.Group)return;var o={lockMovementX:!0,lockMovementY:!0,lockRotation:!0,lockScalingX:!0,lockScalingY:!0,lockUniScaling:!0};t.Group=t.util.createClass(t.Object,t.Collection,{type:"group",initialize:function(e,t){t=t||{},this._objects=e||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;this.originalState={},this.callSuper("initialize"),this._calcBounds(),this._updateObjectsCoords(),t&&n(this,t),this._setOpacityIfSame(),this.setCoords(!0),this.saveCoords()},_updateObjectsCoords:function(){var e=this.left,t=this.top;this.forEachObject(function(n){var r=n.get("left"),i=n.get("top");n.set("originalLeft",r),n.set("originalTop",i),n.set("left",r-e),n.set("top",i-t),n.setCoords(),n.__origHasControls=n.hasControls,n.hasControls=!1},this)},toString:function(){return"#"},getObjects:function(){return this._objects},addWithUpdate:function(e){return this._restoreObjectsState(),this._objects.push(e),e.group=this,this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this._calcBounds(),this._updateObjectsCoords(),this},removeWithUpdate:function(e){return this._restoreObjectsState(),this.forEachObject(function(e){e.set("active",!0),e.group=this},this),this.remove(e),this._calcBounds(),this._updateObjectsCoords(),this},_onObjectAdded:function(e){e.group=this},_onObjectRemoved:function(e){delete e.group,e.set("active",!1)},delegatedProperties:{fill:!0,opacity:!0,fontFamily:!0,fontWeight:!0,fontSize:!0,fontStyle:!0,lineHeight:!0,textDecoration:!0,textShadow:!0,textAlign:!0,backgroundColor:!0},_set:function(e,t){if(e in this.delegatedProperties){var n=this._objects.length;this[e]=t;while(n--)this._objects[n].set(e,t)}else this[e]=t},toObject:function(e){return n(this.callSuper("toObject",e),{objects:s(this._objects,"toObject",e)})},render:function(e,n){if(!this.visible)return;e.save(),this.transform(e);var r=Math.max(this.scaleX,this.scaleY);this.clipTo&&t.util.clipContext(this,e);for(var i=0,s=this._objects.length;i'+e.join("")+""},get:function(e){if(e in o){if(this[e])return this[e];for(var t=0,n=this._objects.length;t','');if(this.stroke||this.strokeDashArray){var t=this.fill;this.fill=null,e.push("'),this.fill=t}return e.push(""),e.join("")},getSrc:function(){return this.getElement().src||this.getElement()._src},toString:function(){return'#'},clone:function(e,t){this.constructor.fromObject(this.toObject(t),e)},applyFilters:function(e){if(this.filters.length===0){this._element=this._originalElement,e&&e();return}var t=this._originalElement,n=fabric.util.createCanvasElement(),r=fabric.util.createImage(),i=this;return n.width=t.width,n.height=t.height,n.getContext("2d").drawImage(t,0,0,t.width,t.height),this.filters.forEach(function(e){e&&e.applyTo(n)}),r.width=t.width,r.height=t.height,fabric.isLikelyNode?(r.src=n.toBuffer(undefined,fabric.Image.pngCompression),i._element=r,e&&e()):(r.onload=function(){i._element=r,e&&e(),r.onload=n=t=null},r.src=n.toDataURL("image/png")),this},_render:function(e){e.drawImage(this._element,-this.width/2,-this.height/2,this.width,this.height)},_resetWidthHeight:function(){var e=this.getElement();this.set("width",e.width),this.set("height",e.height)},_initElement:function(e){this.setElement(fabric.util.getById(e)),fabric.util.addClass(this.getElement(),fabric.Image.CSS_CANVAS)},_initConfig:function(e){e||(e={}),this.setOptions(e),this._setWidthHeight(e)},_initFilters:function(e){e.filters&&e.filters.length&&(this.filters=e.filters.map(function(e){return e&&fabric.Image.filters[e.type].fromObject(e)}))},_setWidthHeight:function(e){this.width="width"in e?e.width:this.getElement().width||0,this.height="height"in e?e.height:this.getElement().height||0},complexity:function(){return 1}}),fabric.Image.CSS_CANVAS="canvas-img",fabric.Image.prototype.getSvgSrc=fabric.Image.prototype.getSrc,fabric.Image.fromObject=function(e,t){var n=fabric.document.createElement("img"),r=e.src;n.onload=function(){fabric.Image.prototype._initFilters.call(e,e);var r=new fabric.Image(n,e);t&&t(r),n=n.onload=n.onerror=null},n.onerror=function(){fabric.log("Error loading "+n.src),t&&t(null,!0),n=n.onload=n.onerror=null},n.src=r},fabric.Image.fromURL=function(e,t,n){fabric.util.loadImage(e,function(e){t(new fabric.Image(e,n))})},fabric.Image.ATTRIBUTE_NAMES=fabric.SHARED_ATTRIBUTES.concat("x y width height xlink:href".split(" ")),fabric.Image.fromElement=function(e,n,r){var i=fabric.parseAttributes(e,fabric.Image.ATTRIBUTE_NAMES);fabric.Image.fromURL(i["xlink:href"],n,t(r?fabric.util.object.clone(r):{},i))},fabric.Image.async=!0,fabric.Image.pngCompression=1}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Object.prototype,{_getAngleValueForStraighten:function(){var e=this.getAngle()%360;return e>0?Math.round((e-1)/90)*90:Math.round(e/90)*90},straighten:function(){return this.setAngle(this._getAngleValueForStraighten()),this},fxStraighten:function(e){e=e||{};var t=function(){},n=e.onComplete||t,r=e.onChange||t,i=this;return fabric.util.animate({startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(e){i.setAngle(e),r()},onComplete:function(){i.setCoords(),n()},onStart:function(){i.set("active",!1)}}),this}}),fabric.util.object.extend(fabric.StaticCanvas.prototype,{straightenObject:function(e){return e.straighten(),this.renderAll(),this},fxStraightenObject:function(e){return e.fxStraighten({onChange:this.renderAll.bind(this)}),this}}),fabric.Image.filters=fabric.Image.filters||{},fabric.Image.filters.BaseFilter=fabric.util.createClass({type:"BaseFilter",toObject:function(){return{type:this.type}},toJSON:function(){return this.toObject()}}),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend;t.Image.filters.Brightness=t.util.createClass(t.Image.filters.BaseFilter,{type:"Brightness",initialize:function(e){e=e||{},this.brightness=e.brightness||100},applyTo:function(e){var t=e.getContext("2d"),n=t.getImageData(0,0,e.width,e.height),r=n.data,i=this.brightness;for(var s=0,o=r.length;s=0&&N=0&&Co&&f>o&&l>o&&u(a-f)0&&(r[s]=a,r[s+1]=f,r[s+2]=l);t.putImageData(n,0,0)},toObject:function(){return n(this.callSuper("toObject"),{color:this.color})}}),t.Image.filters.Tint.fromObject=function(e){return new t.Image.filters.Tint(e)}}(typeof exports!="undefined"?exports:this),function(e){"use strict";var t=e.fabric||(e.fabric={}),n=t.util.object.extend,r=t.util.object.clone,i=t.util.toFixed,s=t.StaticCanvas.supports("setLineDash");if(t.Text){t.warn("fabric.Text is already defined");return}var o=t.Object.prototype.stateProperties.concat();o.push("fontFamily","fontWeight","fontSize","path","text","textDecoration","textShadow","textAlign","fontStyle","lineHeight","backgroundColor","textBackgroundColor","useNative"),t.Text=t.util.createClass(t.Object,{_dimensionAffectingProps:{fontSize:!0,fontWeight:!0,fontFamily:!0,textDecoration:!0,fontStyle:!0,lineHeight:!0,stroke:!0,strokeWidth:!0,text:!0},type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",textDecoration:"",textShadow:"",textAlign:"left",fontStyle:"",lineHeight:1.3,backgroundColor:"",textBackgroundColor:"",path:null,useNative:!0,stateProperties:o,initialize:function(e,t){t=t||{},this.text=e,this.__skipDimension=!0,this.setOptions(t),this.__skipDimension=!1,this._initDimensions(),this.setCoords()},_initDimensions:function(){if(this.__skipDimension)return;var e=t.util.createCanvasElement();this._render(e.getContext("2d"))},toString:function(){return"#'},_render:function(e){var t=this.group&&this.group.type!=="group";t&&!this.transformMatrix?e.translate(-this.group.width/2+this.left,-this.group.height/2+this.top):t&&this.transformMatrix&&e.translate(-this.group.width/2,-this.group.height/2),typeof Cufon=="undefined"||this.useNative===!0?this._renderViaNative(e):this._renderViaCufon(e)},_renderViaNative:function(e){this.transform(e,t.isLikelyNode),this._setTextStyles(e);var n=this.text.split(/\r?\n/);this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0)),e.save(),this._setTextShadow(e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this.textShadow&&e.restore(),e.restore(),this.textAlign!=="left"&&this.textAlign!=="justify"&&e.restore(),this._renderTextDecoration(e,n),this.clipTo&&e.restore(),this._setBoundaries(e,n),this._totalLineHeight=0},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_setTextShadow:function(e){if(!this.textShadow)return;var t=/\s+(-?\d+)(?:px)?\s+(-?\d+)(?:px)?\s+(\d+)(?:px)?\s*/,n=this.textShadow,r=t.exec(this.textShadow),i=n.replace(t,"");e.save(),e.shadowColor=i,e.shadowOffsetX=parseInt(r[1],10),e.shadowOffsetY=parseInt(r[2],10),e.shadowBlur=parseInt(r[3],10),this._shadows=[{blur:e.shadowBlur,color:e.shadowColor,offX:e.shadowOffsetX,offY:e.shadowOffsetY}],this._shadowOffsets=[[parseInt(e.shadowOffsetX,10),parseInt(e.shadowOffsetY,10)]]},_drawChars:function(e,t,n,r,i){t[e](n,r,i)},_drawTextLine:function(e,t,n,r,i,s){if(this.textAlign!=="justify"){this._drawChars(e,t,n,r,i,s);return}var o=t.measureText(n).width,u=this.width;if(u>o){var a=n.split(/\s+/),f=t.measureText(n.replace(/\s+/g,"")).width,l=u-f,c=a.length-1,h=l/c,p=0;for(var d=0,v=a.length;d-1&&i(this.fontSize),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(0)},_getFontDeclaration:function(){return[t.isLikelyNode?this.fontWeight:this.fontStyle,t.isLikelyNode?this.fontStyle:this.fontWeight,this.fontSize+"px",t.isLikelyNode?'"'+this.fontFamily+'"':this.fontFamily].join(" ")},render:function(e,t){if(!this.visible)return;e.save(),this._render(e),!t&&this.active&&(this.drawBorders(e),this.drawControls(e)),e.restore()},toObject:function(e){return n(this.callSuper("toObject",e),{text:this.text,fontSize:this.fontSize,fontWeight:this.fontWeight,fontFamily:this.fontFamily,fontStyle:this.fontStyle,lineHeight:this.lineHeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,path:this.path,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative})},toSVG:function(){var e=this.text.split(/\r?\n/),t=this.useNative?this.fontSize*this.lineHeight:-this._fontAscent-this._fontAscent/5*this.lineHeight,n=-(this.width/2),r=this.useNative?this.fontSize-1:this.height/2-e.length*this.fontSize-this._totalLineHeight,s=this._getSVGTextAndBg(t,n,e),o=this._getSVGShadows(t,e);return r+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,['',s.textBgRects.join(""),"',o.join(""),s.textSpans.join(""),"",""].join("")},_getSVGShadows:function(e,n){var r=[],s,o,u,a,f=1;if(!this._shadows||!this._boundaries)return r;for(s=0,u=this._shadows.length;s",t.util.string.escapeXml(n[o]),""),f=1}else f++;return r},_getSVGTextAndBg:function(e,n,r){var s=[],o=[],u,a,f,l=1;this.backgroundColor&&this._boundaries&&o.push("');for(u=0,f=r.length;u",t.util.string.escapeXml(r[u]),""),l=1):l++;if(!this.textBackgroundColor||!this._boundaries)continue;o.push("')}return{textSpans:s,textBgRects:o}},_getFillAttributes:function(e){var n=e&&typeof e=="string"?new t.Color(e):"";return!n||!n.getSource()||n.getAlpha()===1?'fill="'+e+'"':'opacity="'+n.getAlpha()+'" fill="'+n.setAlpha(1).toRgb()+'"'},setColor:function(e){return this.set("fill",e),this},getText:function(){return this.text},_set:function(e,t){e==="fontFamily"&&this.path&&(this.path=this.path.replace(/(.*?)([^\/]*)(\.font\.js)/,"$1"+t+"$3")),this.callSuper("_set",e,t),e in this._dimensionAffectingProps&&(this._initDimensions(),this.setCoords())},complexity:function(){return 1}}),t.Text.ATTRIBUTE_NAMES=t.SHARED_ATTRIBUTES.concat("x y font-family font-style font-weight font-size text-decoration".split(" ")),t.Text.fromElement=function(e,n){if(!e)return null;var r=t.parseAttributes(e,t.Text.ATTRIBUTE_NAMES);n=t.util.object.extend(n?t.util.object.clone(n):{},r);var i=new t.Text(e.textContent,n);return i.set({left:i.getLeft()+i.getWidth()/2,top:i.getTop()-i.getHeight()/2}),i},t.Text.fromObject=function(e){return new t.Text(e.text,r(e))},t.util.createAccessors(t.Text)}(typeof exports!="undefined"?exports:this),fabric.util.object.extend(fabric.Text.prototype,{_renderViaCufon:function(e){var t=Cufon.textOptions||(Cufon.textOptions={});t.left=this.left,t.top=this.top,t.context=e,t.color=this.fill;var n=this._initDummyElementForCufon();this.transform(e),Cufon.replaceElement(n,{engine:"canvas",separate:"none",fontFamily:this.fontFamily,fontWeight:this.fontWeight,textDecoration:this.textDecoration,textShadow:this.textShadow,textAlign:this.textAlign,fontStyle:this.fontStyle,lineHeight:this.lineHeight,stroke:this.stroke,strokeWidth:this.strokeWidth,backgroundColor:this.backgroundColor,textBackgroundColor:this.textBackgroundColor}),this.width=t.width,this.height=t.height,this._totalLineHeight=t.totalLineHeight,this._fontAscent=t.fontAscent,this._boundaries=t.boundaries,this._shadowOffsets=t.shadowOffsets,this._shadows=t.shadows||[],n=null,this.setCoords()},_initDummyElementForCufon:function(){var e=fabric.document.createElement("pre"),t=fabric.document.createElement("div");return t.appendChild(e),typeof G_vmlCanvasManager=="undefined"?e.innerHTML=this.text:e.innerText=this.text.replace(/\r?\n/gi,"\r"),e.style.fontSize=this.fontSize+"px",e.style.letterSpacing="normal",e}}),function(){function request(e,t,n){var r=URL.parse(e);r.port||(r.port=r.protocol.indexOf("https:")===0?443:80);var i=r.port===443?HTTPS:HTTP,s=i.request({hostname:r.hostname,port:r.port,path:r.path,method:"GET"},function(e){var r="";t&&e.setEncoding(t),e.on("end",function(){n(r)}),e.on("data",function(t){e.statusCode===200&&(r+=t)})});s.on("error",function(e){e.errno===process.ECONNREFUSED?fabric.log("ECONNREFUSED: connection refused to "+r.hostname+":"+r.port):fabric.log(e.message)}),s.end()}function request_fs(e,t){var n=require("fs"),r=n.createReadStream(e),i="";r.on("data",function(e){i+=e}),r.on("end",function(){t(i)})}if(typeof document!="undefined"&&typeof window!="undefined")return;var DOMParser=(new require("xmldom")).DOMParser,URL=require("url"),HTTP=require("http"),HTTPS=require("https"),Canvas=require("canvas"),Image=require("canvas").Image;fabric.util.loadImage=function(e,t,n){var r=function(r){i.src=new Buffer(r,"binary"),i._src=e,t&&t.call(n,i)},i=new Image;e&&(e instanceof Buffer||e.indexOf("data")===0)?(i.src=i._src=e,t&&t.call(n,i)):e&&e.indexOf("http")!==0?request_fs(e,r):e&&request(e,"binary",r)},fabric.loadSVGFromURL=function(e,t,n){e=e.replace(/^\n\s*/,"").replace(/\?.*$/,"").trim(),e.indexOf("http")!==0?request_fs(e,function(e){fabric.loadSVGFromString(e,t,n)}):request(e,"",function(e){fabric.loadSVGFromString(e,t,n)})},fabric.loadSVGFromString=function(e,t,n){var r=(new DOMParser).parseFromString(e);fabric.parseSVGDocument(r.documentElement,function(e,n){t(e,n)},n)},fabric.util.getScript=function(url,callback){request(url,"",function(body){eval(body),callback&&callback()})},fabric.Image.fromObject=function(e,t){fabric.util.loadImage(e.src,function(n){var r=new fabric.Image(n);r._initConfig(e),r._initFilters(e),t(r)})},fabric.createCanvasForNode=function(e,t){var n=fabric.document.createElement("canvas"),r=new Canvas(e||600,t||600);n.style={},n.width=r.width,n.height=r.height;var i=fabric.Canvas||fabric.StaticCanvas,s=new i(n);return s.contextContainer=r.getContext("2d"),s.nodeCanvas=r,s.Font=Canvas.Font,s},fabric.StaticCanvas.prototype.createPNGStream=function(){return this.nodeCanvas.createPNGStream()},fabric.StaticCanvas.prototype.createJPEGStream=function(e){return this.nodeCanvas.createJPEGStream(e)};var origSetWidth=fabric.StaticCanvas.prototype.setWidth;fabric.StaticCanvas.prototype.setWidth=function(e){return origSetWidth.call(this,e),this.nodeCanvas.width=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setWidth=fabric.StaticCanvas.prototype.setWidth);var origSetHeight=fabric.StaticCanvas.prototype.setHeight;fabric.StaticCanvas.prototype.setHeight=function(e){return origSetHeight.call(this,e),this.nodeCanvas.height=e,this},fabric.Canvas&&(fabric.Canvas.prototype.setHeight=fabric.StaticCanvas.prototype.setHeight)}(); \ No newline at end of file diff --git a/dist/all.min.js.gz b/dist/all.min.js.gz index 7542f565bd3b12d57fb47401adf0f04cb13d6961..e696a6a4426c20731452e816a7199daff15c6b94 100644 GIT binary patch delta 38701 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μSMx>v1CNrmrMr*$! z%bi7DSgqWz$lg6gTCLo#oAtC5FUl%aY$Y&j6z$yuDaCGDqLKrM7a(VZrI>mcM8v=>+E#Mk|1!RE=3lqbo zfb}5S;__urNObpq{!iEs%cJ9{-}Ecs3(ThW2G3%OU;E-uWqjEydX<$CL)T8|DO<{U zi5z8BCFvRoL=;F|7K2n{k|0e?Opdi(RSy=&xWDdOfqe*s+aBR0Gkoh#X?&!*SvW+r za~^g6>X{XEE$eZ=D~2q8HfGDR&QwiO^yZ6^i<_Eq@3m~K` zOOa3Mt?OgR+}yTBrs$TraelvJt7T+ofW9Hw+h6so{t^z2x__(O)eBVS9X}fm)(vXib{CyW6cWQZjhiEkRqB#Y-|gX|lV!fUlMA71-d$XilKJVzTU+Z6OpAL?~Zy_Q3u8FCRG6SKBpiD8>1>VIxhr-)+=hId&WW zqTv#TJLZrLcaG0%ETYv*%RAL}=P=3|A2gK8ge9{FavxOpwmeachgkti?y5_I6t2&P z=Rl+~Az%i78mJcv%LLUgNg_x%d}iuM;)z5`Vpt_Z(i;$d!K#ydQuTUKlVoSrIgoa! zzMJ=jBieUz)|%KX_N+NKzDMWiaK!NVB{CVtwmP*7oY5KvQYN*vkK-DBp$#O;2#F93mmwFv=|xv8h>o~AK7!!Dg`i^(jS z1ZeAuen83Wjx1l35*U(3*N_C!v`NYy;p2a~EK}4ZsoSg#_+letE;ezN)<}>Q1OA~mO)-!^;}pm^G}ffQ{#{W|^E2%FId?s2#<{eZi`a3V zFv~7~)MiI*Bl){~%b0m{>m(|SgG7`izG!FtBjBIWwvh}P$+~fbCXJ&lonZR|I^#DS zk%JFuRfK_w|PzW$Ao#ASra^m5}rKV4tPwPAu@Bk%ABWAh5>S9J9&tnQ)MC zF2NpBpu*QHxMBibLZBS*(#dx-3V^IpStx9OLt!H;?B*E5j_q_5_Ed(wlfGJn44@I< z4@Q{Z&e|xF@n&NCN&M!RDY%;v(8(h+xj>|G(r-liO)EW98T?0h@g)@(1zscSiAB9a zd0+9Vx+J=I>0eO}>d4r|Y(y~|S&U+Cy#PTiG#rGiJ*bRlO>=OSAB+|}4S6KdvImoY zXBWsN`ZrkvBL$1y>qN~yy}hHp50l9^U}3Z`c?9gd4bb51SSMVvs$b4WN1#$N|WyC~n(AeQD!=MsQ}mXiR*GF2sfV2K?XTh)Z*i9Yb9w_YSrr zH0641sf!JV_98TgR)T52sG+N(r(pIKgFe5X4VzMoI7_b{h61IM_IU;TsWt zbL^x)7U`YvjR+^_gl3dN^$aoo==l>IWDT>o6XamT*0MNvgBNe!y!z&|pWb}&?)w+t zeeoJE+pk}|`r`9)2Op0V{9&QC7PyX{1aJa=qjU?_pij#YLz-^!a?ay^oHf>+Q#H_({Y=Q!z>O zGOuRKHc`aE9tZ%tcV5@Iv8u}wj~YcS5(w5 zJ2cykwWNatwxe0b=|`1u8n6y6mtn0wqpOB`v0BC1;jy!hF=W33o;UAEr09S3|1?xyZI>irF38Z-~CW^19QMMp#8Wk!Moi~zW;1p!&sDY9&g^)oA z5FBcMSm8YrsU2JnV8a?>1CpAlp5vIpAmYUZ2{$_vZe+r(J?5SZ%(|pRyMC`rYUjPf zm&%(eXPqneT9Fa=@Y^!kJ~vAv((ZSEw{%_}p1s9O0eI5k(A{KW5pbNJturnoNl_Oj zMcw`C+$Vc%v&=xu2S|}nmM>wXPL@cN1B4XEqh!s@>6`Pw>>>8<9WWwWrHIk_%{n|QR zzVE7#W&iHtlFGFCq(Mmd4>ps8{R#a`pZ5w*x-S*fFNtnZMYDw4(YjYK>K>~0RfqFX z_d==YT-CRU>%U51d)$A;utPT6Bq+R3iehAab@OT?)8C-oIgTI8lhJe?zNC{q$IGK@ z;q90uCB8tpzs~5^!&CczT)NrAcC^Z@ZshAnC4Bi*LXS`0M%6~8xRIuua3G7g`^k2? zcO|7qw=GZ{7IZi2M%r{>ZR!=4mdfEeF;7zc+kMs9B~4lX#$eF{l`u~~m#r}K(lhS!xy zj{dUfU!c;(UpqU5l*n!ED4hyLw#y(;a@3%QDq$t!d2$7jAP5b+yNR)KrvJ0rEE zUp;i2Sl0Xqo(Wig8$p&TJS^+cUnaAzeXB5f2hSK2M--(j|E;n%BAH?_e%rHLi$S2n z)a4N{&`gK~y_x3sVrPTsbHakVczBWdGlRBxw+LpyKlv9{b8;^=v z9*u!Ss!bW~j-3icv&dETmVMr-(yD2b=QC{3e@gnTW!YVbT==zLq}qCmC@M z@hX$;L%^;?+D=s{dR(%~^F0^cEcLKvKu8 zm<`1o1crMKLoO+`7qnnfA1S}{S=H=(V-!?*m%QBU)bL!AusUF)$B;p}JY!g#RFi@f zY0b>VxgmEKaIKTyo5+eQyJOnt0yMVvH8ww~Cpk2Kwy+wTpW9tK%X_19)avdeX4ofo zj9^&`p2{U@?zubkjVE?*BpS(giaa$Qa<5qVx+N*?i=#uf!iWU=Ahlo=F_|!^-Tx|w)Y~$rOpIPu;Im9^G_sN z%OsbfYyOE#T9dB{u&Z}>BTIF1-LF;9HKOQ$7V7tDQj;@GDfSlpd`l>R*`xN-7QFl~yZ`O+`)$O)#F1~@Pa0Sa*E9hV%pXA#V77;_k~v&| zCwW`%Xn%^J+(8j|`oL5`&8KI|Kk@WjCu=4HAP|4020^fZSzab;ZWkxZ$pYrKK3fn$ zkgH=7FaDT?fCBfH_ z^K5iJ&d#J^TmSfctFkOSS$=M38J&xNmz~?|@o~I_|E|WP_&xkL8-E(t<4@wh!+#Bg zr{h0uCoLkR=p;fapubwwM$x7=3LmLbCN1Yd(i9F>OQE;pi)zO1*>HD7w}nHUK;TZ& zg!9P)O}eCT>5>%H1n#v`l8pHe>~}n5W3oqCTMh5Ou*CmTri-TjT_D{u3g1nCS%kB9 z#zS;Kr^`GDr#PluQJ&c(w(;p7KOyOq|mQ|*m9G!w`tDqVz!=n|S4QiGem9eh+!T4mh| zAu_#&XZ9P0kSF6acw@h2YsVaxhYVdQRsM?tA5; zrnC|nw9Om}f3Jr~-VXDV_mf_4PMcK5oz2fD^@kicN`t0>w=*C)gJm$TdP#%ky*d6p zJ~v;et{`v~O$ar7Lg~MS^dk8lsjqbDJJWrwO5K_4eK5}VDeh-Tw@0#TPv6fT!GTb~ z_z>b@@c6O({ar8(nD!KZE;ZrDxwqKwT0`_Z6gmsWKq&N@vuEch7l0q1A}TnBJUu6* zj|N?gBZc@sc~*)GVUqcAXR`j&?T)9Mk8OD)TRxI4hj!xP zRX6T`{{2mJeuTF*9(-_>Bm@Q&jSE46p)VmG;H4PgnU4HBJ7u$mAAzFlc$Sn88IbmH zn%#KALp0(cI`++f_(u(W8jROyn#L+#;A zqvuandtW@LTu~~ODT-{B_&>pz{{G*=*yhcEH{5nBCo;M8KCg51Q0aJWpSV85w8qDz zQVJi$^H<1HR@jS*HYN6=!d_I+3%K&drLHqbS-Ih%dD;ShpfV!)w#Il^P_2Z9!~3Zl z5K6b87-o5*r;@rYdd1!HGF_Qb-*S+M{14!X+*k}lIY!=O6}cub6MUyaeV~CHVD-cb zQhni2!-8KsiDzlnGGDzZ5s`tp0Qf{?IABGTKU7CC!w_7!4;j04Ev@=oY^Amj`$vtS zr5WW#5|{>m{G%$=1iVA1%C=gkWS-g*hu{wy|TR@a^V6eFd)o9}Au%G=C&hWH?V2WDTm?%z+4YEa6K7*$it${gb$ zP!1b19puPPpPXF!M4zNq9Rx}@r6mY`{v-}gus)Qz&M{;DKq;%%s(TXKEDSU=b`-IK zDB$98clPmwn!)iEROsOYZA62k=K(b6=<<1B%V+nH;ORjH21#+y-WeAD3q?uD||ac_8yJ)VZw9#dY`QNGnm?W z{|dc%uxBQ9t%S4Qd(yWnS4tew3$GA=i!l<8o8C*uP1ni^$0f?oS9hN}R3z%sf!e>yZua z#Yq)@PO7juDde1i14lGI=Ea|X;y<6@KhMrx8ZX>~1!y{10Ix=wIku=!*6UT~@K)yo z$t2)A(By&C|L;Qidr-Jw0>TWBdt77z9On4jU>^x9Tug3WzfP|+f;A2!%hK8EJkt-b zyqwkbPD1K!P3p*?`!RvE+uN;pkXxF8%p=s}O8Fw^ytqbfW{wIbTo@V>ky zpO#(*Gav>NFZP2#vzI}9KqP<+Gnq?cUG6ccNFkBF9j$nK2F-MX40gdr6L1D(otYo@ zOSavc4?qmn`Fdu0$}+Hj@UmWrd(9Y+X=4q}7@wi(DZ2a$E-%Mzqt#{4mdxxenc>W; zVnPR*R1d|@{s@f(Ii($BRpF3TwLw=ke!8mm5LP0_CaG$rn!rx5uo+OAplfO%yivDd zQUF1Pv=pbxiY1(+g`8|(m3Ad@5sGJh*;On!VofHa|NragoBK3>`%Ef`=^UnU3~jR# z$nSFY>vwQ1;E?_@el(2DfKwSD9Zbk?0r&ok^R3crM0g0;F|@19(`epID4dU4Sr} zs{QJ(*!oJ)M;dLw{jM!qo8zuK3-6)(k4(9UwsATqx9C5A(R_5eJbWjJH&LwV4Nxyt zzNpF2Rjtc-*K}oV!0@4+-E?61kflmlnRNY)z59Kdt^vzGsweMCaYMYA&rMI5)C#jo zm5>qT?WF1=p&YRfs~wYELNn%udE+gyeQ;7r>ty)3fVKN&dYv!T*I!x2A->Q(jrxt$ zA)T~v=X|Yyk|7`Sc{VF6by8ypGaB;i#WKI7sEc&=>m|uRnYwy3>|!D^<%rSK7mHVL zk5~*O0AQDKP$w>spo(=+Fzb}%w<#!#^2g!@Le^*V3|lWkNpU~x+U7XLv*5j+X>8tb z4>r`$b9F~oYP#MUj;z$c<|qp;Jua|P2z5P_kdjz`sd}s2U3&84OLr?j%1FzBekk+h zTl?~*+fH8jQSrOHiM2!2nm@j#YZK3L$!-=;bOvR1s%(jh;r>Sx)UNr`}GAEb1o7ESe*0(f}TH*DiZtZj*%eLN{o)_R_S|yph_C#!}_>!GL^c-;z73k&dH{ zilm~WQInO5>LNVQPD0nL?jBM@oe65=y5#qNev%wiyq;!C`kD6OPAD zpFmf)(L`yOiio6<3Z6{h-1B0^PMuKolAi6ncL!cC^p4l-&7#}Xxjbg)acYi_x{X%k zg+)1J7SBT};B0k{%AAcSc!OFud^zx2P|YtxYkm@1u;mnL`;)!Y(7*&p7M4BLGFD7~ zOj7g~1k)5tUM8t~OA6WXcCLEUbWknG7@AMxYFwI@z|4IDS7(Yq?k1LM7wBpK^OQ)nnnP-Bv<4vT5oC>MQ(hY z5aCs3ESkz9r2E829da8PJTi6}Q7jJ28@SF4({jY9{+Pn{ht9lr) z)gFjeWL5Ey7eAlwq|Ke}c>S|>jYkVml2Vr5Url96&@}!Uq>BX+_^df8^Ld{4_SX<> z@h+18dDQ%t*TJ@ZrPsMCckcgxN&22~3-D9>YVLcMp;8OeaVB}uc0z0p;~plfje`qT zxVT`Ii3^rHxM2TpoDy@pwM=W#BVN-(RBNLE12k-RX3p4Sw6l*b0JDB{0W$kOm}jo8 z?hfRfd&FCHH5+^HtpUWiJd})j2XV2uy_EJhU1itl%FCY6nJiz#k*L~#W!pc=c4~$C z^+2DT5LI$;1FQDe@l};A+=uXL7CzJl-_Q>29ay`OFvkz<4cQa=p$|kOdwz06O@IDm zPosEK>Vxv%iTcInbH5#b?RUmgW4r>@$VPi%w{!$dC^aktmS#5;jv{i5g=z)kBHi_9 z^F%$`5Cx3-1h^RvOx6p3mke-R2ixaQwlSfaxs)z#uCjnBTBC5%;7z3Yru>Qsp2{Tc zTz<_%6cUv6txafp_hgJ)Oi_GWiz#(d7CvI1+&ZekgR7;ThK32fzw)D|l%EUMx)IAn zV(37CSReGhCn=-gcpgM_`f+g$BUsDpQ{A1`Sa_jG@JON2d{ZJZDhssPX-U;;iRe>a zf1CfBEjQnn^K2ScxPX!ZX6myw5MfoQc)8eIAA?nKiQYHi+>?H+8h>`BT?)bqr@Nw!MpQDC=%&?)KiuoJ2k5=Ka zWoSv$Obh#|oM2C8>CT z!6L+oqQBcMSeBPzK*$mYm=~@{bfSXoCT)@?BvJw&&UaRTM^?3Mk0BgiwzhboYNnlv z#c^jcOGd`Z;Z|=^v_}M^Rf((5E+Tj1sG10>2Bm0&skZv!L&nqE?;?3y1%6j^qls_C z!u%{ST7^=0nBr-t6YqbD5LWZZ9UCdA+;xE^qX&sGAMU&ToqTsASKMEgD6&X#;IpFp zIuQ?be|-9>0^7-+52y4dNGb+lnDs}|(O-tq;a`ShBRmsfTLkj=)MM%3%8K|D?`~+Q zuHD6ruld>)fRyLz3b*uPqg{3bjY=njbO?^$HYs(VpL01#VZeW`xFW;l`Mn*{ZqF(0 zm%qIG{HIqh-hA`J_a1lWNRJv%s&J(3a9?igS8>AE*y>g)TcJh1m2LM}UY7H5W0C2( z?q-2W457z?y3a(^3pi(e6TGV|GhKMAhR!Z^aFIjXY3sCmXO zQ(`Y<^g3nW5fFbU3>QkwoC^HfBE$3_uYdTyYv&j|{O|32e$u#ot#FhJIIjH4o?Rm& zUnz9{{hZca==w6_gS^iP#_dh%ko)IWc2r{f$8AwLSVxbyja2o73TOpgu9709a=bZfoW1H5kaz!mq{AW zEUS3kjzzpgThtjBAq3|aGvwjq{mEkTUaHz%C-e9+c^_|* zaDKSxy^jt*i7#Noe}MnKfd5`6y1*OweRGmeZj65d-$2+K2zw(7{64wv-Sq4DWpdej z(6<=L<2hu_8@ z=ocI>@cRq?eT=_f^Y5qdd%L|l+ngsCG5mpq$p`vze4czkKc1c^uY0S*@c7xYKCs$_ zeK3E`e(S-+<32X#Am&9iHWrxwj8gmYBaSGQ_x=;=-~O3L)K}=i7`8ac#(^KnirMDl zPAgwY`yE^ja4z*#xtyabF!}qRc!jDuQ7y>SQDW8BA?+~?J z`(<=g|L(V_YT4LssDFL>X5b^1s;`)T&b@!?Tb*n~_R&j{vj_j^btEL(hf~HY%qB_?^b%J*l{*aR>zI&r{Ih!)%_?{r>j}HFd08?Y~E8%s=AdpnU(kIIth{n+)ILKW_2K+DUdFc?&weWAL)v#lxW!8UiXszMUTK5vWwZs{u5SyOVle86kTPEwnPY&x| z3U}Hf!PN@P4lh>VczCTM(hku>T2~u*qIt6J*`-ZZC-ce5VsFy;I!WDRjJDK+J99;K zzlXZ9=42tZNwO5XB$>s661&>|?lKJ7p0V9L|E`gXfMRZd0uci345Whmq1nYkk{nOZwSoVEvjf8(+ z7^~nTwuX`WU&MpF&Q^K)aT|Ytvi=jPQ{XpR^l6z4o*ok8F?jZuL&1CuMx#TfMg{lL z18PZeAiZZp#e^VxyFbNB9ey~$O4}*F>C?Z!Ej}3i`7hDYXz=veNX|H=`Q$H{=F>laN@+g*Gp2tz9zK;T0n;4+ z=@`>Id-@5bc{+-Yjt8R$@TfdyAGtt|{}U#RQb9@hP<@;ZgFblMdJCSr*AV#E+(e6O1gu|~7uGHW4AM#C^hAl)>J+`qzA=(0x&z%GCo^7K?7ukzw;^`U3J{NZ4sC zof&CzYZq^#Zn@l?@10Z`_gksfgTG*7UXe{9^TLAF))Zi^Qip77O@Nx}$=Gon}D2F zDAPGTvvz+Dgg>3Z4$G=wYAV=|4UPI?uXMQ38qjX}QmCd^g6`h>9(4>tE zO)8Xg)f)R&T0vroXT^D>u#iL~!iWezXt_K%b&Y>ajog|_?ee;0>nVMM31sm+CMZ%; zk&5lD)ZUB#pXU|F^GY`03%|~=HA#>zS6Asp21IHg;&>z4D;c72R`kSv316^im#J8_ zcraQA&JNWkJ-=dYxf89+V!Fy_F95@prS-bX-q68?z7hC*Ffb)YM3Wn!(3M=jbt`|R z^4EXQ3vv%oE2QMYSZ7RkIre3boRh;OB%0*tZQWxZ5>YrEuWq8LH^BNlJc^Au;8JNf zl2Zt`I(puyveh!3q2X5$M5diG8^RN1m*nc3x8yIHt0Xr_qhaKvI5kro+bKRU~;OX|3s+WL`Aa0#N14K;sp zFKQ!L5*?OV-*_laqH@))kC=9gxHHc%v779oY?|`gPBxad8jh#W*dcAY z07m%s6L1*7>3m6-AYKG7ud>;%@|b`62r59&lH3N2$o+;GUZwV7jh(D5=B06}GE4B^>W+WNq_tRD zq@|NVBzUC^*Y_IR9ndHKL36s=wHZ9pp8I>`$#mah!_yH~6CSO>Z)F+o8^B)uQOh&V zKZ8_|CV8XL8{+Ou7sM`RV?nd-GQ)m3|*(>U+dhn1eO%9yTx z5wBx3ezVrP?vF{63)0%SeG#;BI@H#FmgJ;~6eiHbQ}Q5((YyI!5t6j2!X^dL^Zw}Z z<2Fpye^KM1-wHT-*1CdvKd zh0dDn9Jp&_7JJG zSfDlmdT7nV3V%L{a7Ic!3u33QAd@*YM;NM{w4NJ)Q}%jtVEkE7cXqBpk(1Fxo#9f3 zba(g27-<0wKywHVpX_vHR_Ylkvar& zOg&-r=!J~Cgj#EA7^?$93d_S~Z_zWGDTG%*79pA@8Br$5(0!|#BBa=pG5kBKUDnvtCH`OuLf|Bbt3&Eb3H1zS#icu!esdvazm5gbvPP@wmiZrUqF( zOIO)1*Gn2_UM@H)h)o6)&Vrvsucyu#wQAHMWvv^D5kknfCH^B6xnc46E|K=+J$_s| zSZ+Ie=`w-w6FH$a4ipdB#*9*+P#mWK;Bw>O7jYT|PDBcgb&7p{a)d2KEIXm8jykb& zDX&i!lQn-i8$Mg}LY{`{K8tvLJ{6VOq5O7x9KqpTdscGFOJnU_t-%J4+W98vT&ZhE z7M2|@_giiJBC~6OVgKy~28$vZFJW=*VuF1qjNxPB0ZYZlVe92m^mdH3v36Qx)UkY= zf_APZC#`>RZ6$n#Jmkl9Y~04|rlD%BWe+Uq>IuvRkqaBw({ z!n1$By*)ZVjKa4>HM|}CcO4zY!M~4y*69WR{#3%)`5k)38Z*92QA)Pre$ATuye*Dc z*AIuOg(cP810!V+atE5uIxvW*14XeNIAoEHH6zvkWT}7Z=vj|#amPJ4i>rz>ZtqJr&)*xqd+~t_cInHj ze96x+d>nlB?)~+W6(_$-i}W(968mHr*Z~1~C z_tOJB+u*$6A3%=N$pt5e7Rg>U&8i-gn*!Y&RRj4m#%yEG%`&x$1!~t>b5+jA!B=0r3AV9&R93(hph71-Eq+nV zO2nol_~Zd33Sb5Ua~#l_%T|9zqVa-40`AY3H~>!xlDw# z46K%90|+dT{e-c?n`H3C%OAe~{?!*>{`C5b&m|-ygJ>EN;{!OGi%ibU0@#W9K~o+C zJv}ZxU^{v|EYa8~2;V*G8a=vfQGS89O|*5V`Q4&6^@}hxukcm77N~zoyairmDY_NN zQaajm9MZ}+LimK(L*LYKcQW2Ba;sUlr=p=hzv< zfc|CkOBhQo=$av-Fe_j5y=5+%tOsF)slioW-5havVvk;Mt_LwG0)^d2A}vkng}B; z{2kY7l>GRpVi11({wuxV}zPk>P2tL)$HOmI}RYw6>qCp>+S)u-;h2lf96;o|0dC( z_z4%HsrfNLhl#)RLr<6$B>ENM^M~xC^$Qm4c{YEeE3`wn-d32dzAMTXv$ZiD1OK}Q z=-4wr$G!nNHrjMNwtoGN0Xps;pyMqA)X^AcPXIshBcmQU52?%%OOLEZj7+5sCpu*g znXUiKkQb)C#$IMvE1HgNe;nX40ruZZf(iP+*4q7n0Egg99x>KZ4@tzJjaT?~K7Biw zqJ`K2svp4xNKaaU+Hs)M1mkK_@FlKNiX55bj4( zy1cqb(IPH{e?%GZDG@7ED!Dq?fZ}5NQ{)0Lj$|k|0+8+&v zXz3TrJc<0FB&Ip}f31?iXgS+mO6H1Fg_FM|>wcVXpA!bGMYm^*&)44~b3M*lH%uPT z?TaXj+^xXt8gJ@nVsX*r-w89H%72x6@!4j=hHfAhANb$V`Y$ehUnp}_#l zVnIkRkjIg(BjQHhMyYf-?z2idD~J8$q$-n}v$C3J6<(_d=5x%RePa%WtCa|a3_)z5 zw#sxO2=Bm@WW7UuCM9HRuV%bW9IFbU$z%b?ZUHdZ zMt*Vq?I8~Dl_4it2sw!aPL{5KCI8*J&gqV|VK0qHf7X3x%srwr@&vt49%Rh%;(!t& zixz9?|AT^f7mFf?g#%HF0;jmxDq{9uzvX){8faDIE(oY_8=p>rghj^V3Du*$32pE( z+eU5TBNe6fY}hKbbfQ>m>`b)I4L*aib1%8%H-5tHW$?>_J?26Cs@BqXqAg1rOOFm{ z%T&*SfAI4I+e ze~2x32y1zY%#^7LVZIz!WFAJQd$}^tui;R>%$kdGK9xUQEsd|gd=mg`lf%rs5EBdY zXudP95;*$fR6m4nTY1sV%35W~6Cf@n%JRJViU=Ld!=l1wu*{v@+6s6VNV@jOd8ojZ0WK=>8NPp~fK<{NoR=f8W5RkbnR52BoVjWQkv8zpY?!zkwEIRTz-| zZ_)JMuy;Fr9?WM1?{{$B|M1~MAGLq`s|t=I^e}_a`B)5G!P7`Q+j@lNCv7bQI_G8x zqWp`{$PB)d7}$efzI*x2n>RlOk!82MC1-toxjg)x*#?gX!|tq@sA;amaBZ~Af3MMp zb3?EPz!nJZ1Wp}BrPuNVl;ATHP{Eo)KdrW$k4oQ4W92KBT-#03BdcYE_KFC$eZFEq z#@pMcL(*yNRfGtLXXFc7Z>^P`4N_p<8!KGBETSNPkfjKYY9vs0Q9?1a&{hoDL8VQI z4x^}7zmA{2s%_H3qUcI9t>A?d`I^m|%}y zV+nL^;h)CH?OlWja%YT>K&!5w<rr|PP#Iv|!En0}Wy-f60u))6RlU z9`ehqT%o1(D0_VH88X5?WE=sT@4Vg^Dl*opPpJhNoOzzTfX$A=4^Pp%vYgVKSv;LuTsJLZf!h^#&I~q-kgTws{%O3afXV~v&Tta_j6;f?!nBBD8 zml8HP>?G9t#?*Gv^$zW$e-=^$p>fF}7h`v`+}c9BjVs^qS#8|UoB>F8YNaufx}p2- zj4bYGs@>S-odfC_)Y*>B^$o0Na4+snBW-;Jr}@fktd-TsIB(a9?NrrDOFt;XU9Ioi zy(hp-=qlHJRelH$0e{Emr{;Ct^zdnXUfLkcz1zI4;_@Ewf~4hMgEIxY79GI;vg;Zt#%Wk-iHJQNW$uY;!) zjIF^xoKgfjX%7d7M&iFc=Hzag&#Xj$eZt9fv!AyKIg!U*GH0^!-96 zEn()f@vkZ|f4?-6bI5bsj3e903jn?ut){D!?9_aITv{qV6O!hk4~zh=c@J2?QvR9+ zx3{SE$U^ODmWV{JR!jIS$VY8}qP=pCkLPo^tKe}NuF7ItKYbSXNSxdikC4sX zD%x8Bq@=)YTAZsQs72f|4h~&hzHlT(qdY6vb;hXmm;di=>6qT@f7d-XgJHr$`9u zaiMZ3M0tNcM04`EaBh2AF-2$=h3v-cf0lh@MpIOf5kWQlgC4=IYAg7xT+ZpAth!yI zmml~$8V+v{;lIc5-xK)nDg5^t{P!35@2~LR--bgj17WPMt`V(T)qL`H{&sNMi!ebi z9H3g0je{$;9KkrjpT`KPR3Lg1tRX~CTEU;sPA3)FjA+N76)#8;gyuy|I*ifFf1%QR zYzLsys+q~0Ka`iN*ssW=X|e+Tn!>cx+@wql|8S#mX`$Vz*IP12a&{3bQw5P+kXpN} zaj@{EcA0TLOxXBQE={z_Y@;9=s!5z|3@f<8U5n~=yn$>(Qr^u~j58n-pzN4*XNo46 z&PkbQj5;z&z7cp23U~u)abZ5He<7Gx2L;Av)LoU=r(0@O&)TMp!L&VB`^?0YBXZ9U z1o1={!0$lz--hBD3CN*TmlI~TPvc4iI>ss7dXY3awS4K-|6-NeBs2 zK2o-FGWND*iE>W72U1Zjz=VV2rr%!)*rt*k3Ze>^HO2BMVa=0G6kmoVe?m`|!s}h> zRUKH_)QADThKR~!L>$c~3nYb07`?@*!0m!r2$zF~pK2pAO1gOX@WSjcy>(zXgK0)q zB#PC2>UO3b5Gs??5fqnFF`BM2Q4B)@{N5s7!eTL09Iq0$4v3{vmhqKQ$^uHc5~c8S z%N(tjmgPD8V2o0VGX+5!f6&nXSS`14fxEngEa2KGNkahIf!TE<9@Zu}yV~8r!P|X- zKR125|Mq}^{$Wd$l9mgUI+bX1aLzBu$XodpiD@^(`lvc7MPr;5vg8OgD{sP+e{2L6 z-UK!3MyG;QBT}F!nh+X02o#*b`xE#NvKNdikALW`%7*R9UDzIhe;0`8Jw{n$Dl1Nt z6)FiV;19G2i#$nBlf}k3BQ4RKCWw+zimMh`W);FHZm~TN?k4$DfX<0@0y{S76*?04+)5c~q;?xl z%G0REVX%TAKn_W5f6D~v!ecx*CPfz|!t+C*EuY$W z$uKHvFbiX_e{6v%tykv)kQ)pWtfU`tE^WkIxv1&ISEis7f@dCa>Xemnp0q-tV)ko& zjV`#wQPH*jp@7}id+x0FT&?%)W0tsQ6}Por?ZcP<&@wayuyQE{fq~sSBw{IfD*@(n zBd^lRPz6RQxV@#@IJp_sJYUmGPJ;i3{8=xcYkN0vf29&%$X}250%D8|mOBn65E#_e zY`lk8^hY8EmKz6;B8b}rr@{+cps0RBTGA(7Zpk0T!O?@07hgPo^ZW#uwm3LFeFh~- zhu21dmXh@M*0`vH^(>wJdQMJfNl1Vy0Z!1MCSY#aC}=z|aj=?`U>NMJ>EC>w1Wv9W zIa#pxe<*&$4nc!QaaY;wGBkb^>-eI|7F#pGa)8v&jt;1C@K*`tn`dvP}xhgZ6^lI(jB$@`io zDS=ZijiiK9ifn;n%|FTU0#Y%~L48tr*oo7mf0`I*>SnHDdoFdF%YLzVn{>1JCs~!E zM6Ycag_boPE&>RWz|28-NW{vT2%7}4xE%x%=+WzMp1=C?i+9i8ym|HQ=Rdvq@-+|u zC6UD4PuC{;)0ZYp;cLA$^rU`t!8Dpu<)N;Uq#&>;PO5I^;5M&~GjL(P3^K ze|=iL!KpC5y|LRjrq3TdtsQGYutnG~LXk8Xg|13O1i7=9!E~Dt;q+TXe4t$-V*bt_ z@$6dKPN*N%m=@@&_KnoIC3bF&olJrdqc6N;X{PwMuECXwzQdrG{_&P+e(;aKj3%p* zfY0ClT=^A-c-zr1498j+m&m_rt&Lk^e{)n{yWt92?Z9cYr+G8!6pULiGhU@Ogkf*rhWIB8daGU_LLx}G)CrHbCY*6XMius? zgvg+m_5$%~{*I=)m2f2(r2J}(RUi$~yXwp`{{b#_}J@)Cs*8+uC~OaJu%IIeq8 zxhiqwM6_#*UeKd05l_Vi{J1~}`d816DHu_|_41M?QXx8CXm*c9$3+J-ydSV^WuZ@k zAX2;^8N7wT!NLAXff)wTgXB^D{`}EtAeWB;wmXAM=0zgQf11pW;6J!zE>C8s zu*znTFj;O`;Jaw;MbjdWeYh$yHIM)lC=+;=xGdbxvqcT_6$u29tJ~WvNGAQBo8vN1 z3Wo`QpJyLFFRudx{&(Y;c|p*BH-;}d0pkCY8OIs_`4E3OVTg>m5WiLtKHz@Pwybj` zB%@&ze`$sta@e^UfA*Ne&djhU6ov`kPmMRO_tE$q5?-2Nm(lo)`usY%p^iWjZuaRWWM#a5rRC67CR9 z>z1q|u!$d%n~St|oEA1Aq4q$-O#gVBxOM_IC?Sh)oCospe?@Gy7JBb_t{%VVP(q-n zb?_Bd`{MO$>iu{fqc8`E7fO+Sdi8Srr5PX)2(M$dXTwmsA^{fD}G}|wnB#C1mc{sc1 z12+sz&v|=!f4!G3$t15yg5PW5!4pr{w0gcvt*Xw*$hJehx>i}Ia8!6#m3`ghK6li1aoAmJ z-{@_>)!WxQ*RN`i+`K!qK-Vv7mmI=f_3q28`&h5ce|1-l`>Mu$RpUH=pU<N}7b z53oMYb60H#sDZpEgNfvi4h=U&Ip`-GbWA|8XodTE)M~#NhYNkx9$O|up`a^ov zIcaLbCf?lGI|Sf?uVS&ZPJKg2L`xc?7YWAVsI`_=TJB~jy zDV&0KfO#ac5qQVobJO|uhV;rvTz92T%$yP%96ba(ZOG*ZivP$Dk+D)L)?gvwPYkzc z+>SZ!Y1$+?tj2y=i(mV+oiG+|m0`sj*GgH5L(NFJNR0e4Pv59V=Ak>u1GkAsUO-thI8X2`VXQ)dA5NFcY^m>W<@UMwkuRz(plVh| zVW4#bG}m^{SewonD+F{zw}oNZ8%2Mve^JB2Gx1ab`VmC0xyA~EyC4skdXLNH2pUdu za=G2y;m*6eDZ1$Esnql0e&%iUCiYO7Yo(Gh$!biV=1mkR%gN|C-I^ihPbF>Z2vyBqb zp~kPd#%bmbMVn8Ukj+K`Clf@YOy|4wibQ>O&`EY0#SKcIXaJEx`6jz2#dAbnwjy4g zqe_@B=9_xSF@l@b6M|gmyXySxO$ljC9*Nab4wA#CPve6BRP;w`@uSQwf3b9gaKoNZ z&QsiZg-BDWAa%FAl=PK72=G_=Opz zlzGKc=Dlp3C$LDW=wQ(ci=%4#*?4FQf%ghbP{Hbe1czosg%KGn7l?SW$q$mxq*q?z zJn5-E%=aIEHWa)lht!BKe`tl26mm*}8Xnp%-t-+$3-Oz7O3A^9G)ac6E=;Rg77KML znW{?xH3Tq~VbH@TGGc-8%}e|^JjJI9QDAzn64Nb3(vQcgY-<&D6&(vMSuMO!_;enz zV`o+O1w;WKFRN~->Oa#jtozTZ&K>%5pGwoMwYpu-u6L?EBNbV3e{%^(pGA|#eBvBU zgCSHgZY1U#sjQpH3#C_~k^>E#NPX}_C%HVr6^o>DRpTml+&A@#mJ4$0n-(@%1a+-z zqq8tLw7i}4_7$nU)b`LTx4f;GBudB{n(}KPCGY7hdpkP(3*;A$7>npg{K}%~aE#R1ZEF!1f)sOG(O7SpuF)Z@)zr*#eMFEu z%&}*Yv_?8PmEP~PSs1XSgQwEfoY}{c^^DZqDqKsT@2jK7Jd+jhs|{a0Op1E4I^7RP zXfKSom-~5SuZpT`RczGpTV=1l{ya?%{(%&0O6a-a+xg8Xe!O}6XVUwQcaxw>6@T;k zC02+PjxIg56wPn{(*`KDsNA>@f_7|r&pKWf{Z>aQN4|0{e@;xk;g^o{?A->Xb~V)SA)yQp)_@YPowat>P$KL0wz|KVqr6_nwxlz*9DW}&?Sx=|Ze157?zN zLny=|jfBA-lWs+)8u2Q25FY$ly1pUplPNG4;}P(-Za8fGF~TgHWgL3SIDhOY<4~7T zn`J!ql<~NujK``Bv13nEK^4(d^_knBHGMWGPfpDjJN%Buqti`mj_@)oep*p*mfvgo z1UKxPKDVg$^x=l*2iC?iYfVC{4=_1@2ClJ(oFo1?fdAwW%QP_fU9$vK)Jpo;O{ymY zB^L35Aie0VdX=QfA}KX5y?;!~BcRpOa-YNkibx zb)=`BRb32&+&={fTVd;`Jw{`pX`>xo_Ke@-27S`8Vrn=<|K7EkczLOJr4!ON6}?-ON{xk}J5smrKK z8o#h@mo)ZB89AZ6>VMN|9ZaiaG1h@nv6M_O7STqD<$z6V8+sY#M7Ote6(n&>ghEKd z3H9bst`=}jlQ`HEf`pYc`w!8ag+_Z^#8eGjBcyi+uYK~!wof(;UmCC5TNAz(E$@Z%>8 zBM#)O@o2*pJ@}}36J?3X(}is$)Q(h8v2q*k6vG?sE7HDXIZ&oI8-5qe=dvgPLGte1 zDxddyeA^*eB7fVK!G30o4q$bYo9huek}1n-UJtHE=<;oCgsds#`p`&oNNJ3aHHK`A zYH*y%4um{1460G0(pFR+gdG}Tn4hm;A}A5h+)|^8ZE!OC8@j<(7}DJUDxJwvfTFwx zf<%6T)rUBLS>xq}47LVWA=Hw~QmI7VB4mVzKXK|3Sbr6Qt~G+L6^i0X`c@cMUu}&m zr2ss6ZOOK5B)nkOg0k!>Bd7sQXyU=7Cd+b`ZdipADM3og65;E`vIlcCoL zx}n=c8E9eIGAAF2hScU8IY52ljG$7K|axp1Wsc9joj*VdK6; z2}t`{h;Ej$8fDJys~5RsK6_qT)tfsUC(!&{+n?8mcC6fFo)bY;_R8wlJu0j2sM}6_ zXn%O^W>ejcRi+Gg`5Nv{Yatg$?TZpKj>dnUNLr23i+Sz3;>bPBG9n&m94(EPMc#^x z^ULIvON9Q=C@_x0DzE=HIr{O90TQAYlYzk5rRI*ifxsUMWkI0VmNEsM%EdO8O96q4 zoJ)j7W$5PNIpS9+L{5?Ksm(Q<5-;PH2!BjqB$ygEYAvFGyJ_V*q{@MK0O?q_C2`Y5Uu-xW?3O=!`;xr&NU})7qP9tus}lvA6M7!JcTdh<0?PVhsS2g$5s4;3ah> z^ryo7WN~VU*TX7K;byIuvfA6szSNR!NgZaTGnqxc7u}X6s`8jWT4pfWV zaE7BMOD0CJOYvT6B#6fCOysJ@a-Wnqu~B@(A7kJ=c|jU|S8LMjty-RD_dGnkdQIHk z7b85BdN(|UXfn@SHOYU-{5WI*reLlqoB`nIWlzIFG}yT*n$RO=1wI;ok$*PnPp@9m z0cd>V8K9 zmEG;R$PB%_XTUE!>IE8sA?Rk+K6*k7mzuN_1%(U61zPM9gAsUrk@D+)=ZYtIM&=3 zI?HA2bt^bhx#6I=y2xj8g+4lBv$?J%2WzAM1P(^E4n}{4FIqy2?CW$@*Lhle4x4sAg}dKQ3fwEJtMrt)NtH~#Mut~EX6|Y zdl4N<<+B%Q@jk7!hZa*w&rGphSC3UhI@#*j7U;PyzG9pCU?=7HjzpHEapj4XF3e+A zRQ|H6N^&~2TF&>15`VXp+;e;XF{2Lr$6m&D2Fg{E**`}&m{t4~tTWd0UoJ{YU1@1aaVLz~I7IBn(NiRiNb$7lS2T*4m0OeCb#L0Mq z1O~>xj7M$^5XG#SU5pJ{0} z+a{sLD)3pmyc1Ytc$0HfA%9_py?wr14$gA8ztZC$7UvASF7b0aB5WnywOj#S)h?HB z>aC<(%O$FpE@w;-P#UejIu$*Is7uI5mU@`KTuP-ZX9%rnGcHaYJi5)C6NxnnL*I%I z9|rEiMUP{JVyc};xZJxzQL7YK>z#!_oKprm-apaY5qZ)4B3*8bkk!WJQo(L)=cZMU%lIopzcunOq6pqeLkIoN}g{{gDd%30D zNrcX-8);xBh-pWow13AqlNWainV5nCa`9XsqDJCe`Kd{wIze#n$A$jUBS)iyX$U z#z+Ar5|e3tyN>O71=xtptYYrmE>1yB%n!jf5i*nb?Yr9pjEK)o=Q^fXW2vuLnVyr# z^T7%<%Co}V@_!URGP}s!0u*I0LOAsSv5!-1i3AL-zL*vVWM*;2x*}P5En!8mX`5S&i@JzxYbsORBB=0@HjdwKPmg4Jbjdp|RA`rE0j{-4n` zd(7Qa)Ru1O42%EfoE(C*pzjSt#c;aO?F@K#Z-?r=?mGzE zTU8Pys97Fi&TdH;kl5ZV;yAXKfc@|~sMGg+f}JnRvvf&s0`AT*uiWm^HLuOn%pDq6 zX0+v;81Ir98>%KpQoc9kRr{jq5FANu9DfowY11GndNYVzH;tq5eJxWew_*Oxr9tE^ zE~UM~S|joMR@j#Hfv0kYtIVe}3BxKoBHttr4r4@vR^j3e^Wbm;r!^JCTl5=0!$8}S z;iP2=Tzwb~mL%iqIO5E*f8J6ygEPBDH)<%hm)v;;vbqM5R>051JMshUGOO!1I z_njr_WZFH2=e5VZg2@!$kvol0JO7C7y6<0(os-LRl6mx6yUved3$rB*q_tlYQG#Gd z!^rmRAgWK zIUfy%_?Vs+^AvT@(Xn8#HzhwD(h1C7{r-IK$Dclb`R$9npnq`i_s1^|4!(Hv#U8X| zZ!{Pk9DMmb`RE8Pn&xVJaPZ;7hrx%(gR(k55D(n-0i->^w25|OBWPezC!W#{hkwH%=BC;x)tIzId}&92``h0RD3($i9Ui$3MFh0&RQ+Ne zWNfe_k0_7nS)`pwfYutE3up6h`v=~g&Eos%BcW8SqlIeqo={0}@}a`QBYvCIEqf$> zpdN#6<#jLE3yklz^DX4RR+v`G5tZQJk83m@NCI4ES@k|+CpYt~o_{@iL1Nqa-Urw; zdtdP;_|F=qR%{3{8R-9p(g&1rQ9n~Dx*%%9*3l5Pvb3OU`Hhfk!%DiYfLmq+88fke z5QMwaJB_ypp*1ei{5oQ0}a>29sL{$#E3?*LLDB6r7s z^7|W#psA<=gCpyi9e;JX5)-i9KhU;Ih#n{R+~m{b?jdX!XZG1G&+vLAHp%n)3MF@_ zwscqN?CpCTz?ucNyzQ%~^UT&Z8PZz9pI9E(rea;kwbmW^M;%uUp)2UUa>RztU^_wQ z*jtIZ{5JU+1FK_Og&SL$Q;+1sBtUVkwYaOJnp`=H5zEn)Gk=}fq1NX9XEF@xWW`gH zww7Vw!ouIq8-XMK57AY5Cfja_;naOt2_!9Hb9-cMc`29GE<}@dt*9iFx7g`BF=71J zRLtL$D9rGJ*V>|{SZUBm@zttew-K3p6%?z&xEgNaGgL5sQ+`#Ig&(T=uG)kYYKN+@ zTiB@&DeCt7On(UNk|q8Dzid|;id1?Z&y&iq3#P3_TD+V!s~7x593|N*m`25 zsr{;~aJ)Zixb1l5$9dZv^hVM;&y}Y3djDt4O79Pz6@T3CZ^{lt?;R^{cB~lTzOTx< z6B&?5lcZbbbBWY~%H5J@TTdRG?Tm8&}YqWn<6 zMXx&(4u_NHI|x$p|1aMI)buq6MA5jTOPAP` zIW+$sJ%6G+ojt1LsIt$~7`j0&>{QxU^ewdiSQcXHM>%x zcXAr<8FxPj2?#DL*gWz>?AfR+mP!fPmOvn}MSm#LqZe7pZ)NH&7UgAgh(>*A5s9XU zg5xR$h7nS(6poDaD4(Rj=-~GPz8ApwpyT#3N%x=Z*S*F569nT%Smz%6(;M+0#8Y}4 zV`#F9Ib8fWgdgbeZe=vIAh|yJm$+hJns$HhQt}cwP`9@a8e?Q4Loq?}g{^^`n9hng zseb@9&4lYLb5w(|ZO>F#V{Yw7;SMV!aAI_e*v@N2da^2u9yg<5?6WN!()NE}rAu;% z*i>sp;tX4%fcWNv|Gdi11AJV0FcjYFtLSDU-B(TKEcP55gS6RY2jY@X?n=a)$*?p0 z9D4D21?snYKZTf?0NqSrjz0)CT@BD`xp}`$~7WMBIgIV{}#mx4zSUCSv1|_JAB; zRT+A<1D^PcD*ZrC$t8z1ORtb05aBt7~`A0-BeaPc}W0ZFDFA4MclJK4K({zEeYSUhc6A&$9Ep;Hfbm z%|+J`5xTHLMnVamrCMVpvIx;+9xbf)%~|sI4vGf(Y#n57Bp>$ z=KJ&4IA(Z$cimpj%4;RQ!n6kbLugj1)lc4MRm0v4-jt#OD`hOpMY48ne5KddR@~Z( zTeH5Q(}r>Dffwzda{LE4QGcBG68?|NxMs}Lf8yt&q2AmT5Wm?0pJVM7x*W-r5 zp#NhA+l&1}>=@Z-s1P2B*6u^>!s|Y2O~a3Mzd}GtPpXkjHR4ngiGTd_-Chu@LIU{# zN$|sjhaSbL_Hwd1N(m`icmrq;wJiSMp+sEn0sURm--Y;I@OR|z*Gjf{CHl4MjgDjk zU>AG4329Wep6IIS7KYmNvfUR2=@Jf;syhi z^Hf>s*LM1~l^%VyO*(jiw3;C%Q2ZFKyoAjADX|7)WG>q7H--+P>x7akFp$9^eRgl@{~z5`Rr2l?O^wfw+Gtu}@i{1wM&d zw*lewF>NBlb=EeF(TxzI25am%%?9u)B9kKG2r84}2!uic;?^>srC>%fG%1z^<;l==u9zRylUzF*G?qD;oronYd`HgynxXB`kNPge9^b{}V{zy=5bgiINl#v#G}RHTL73N2QyV z4A}W)p^`Y9F2ts79io!4iJ>rg!s8T=(n_o|@qahkSQZ=B*4#!|ew6GR-wN=8ECnI{}T^JSg7}|OdRPIbzi%q_bCRqi5^OLNspk!Tpibm+HQwMMN1Ogou{qh^E!18G)t#U1D$8pfkJ(f6`h^790&}RjD9j zkgOBUIJq7^G|7h!7ZwYW6d9mq{O7;jpM*cMZ#AuG&mkS?45m93>cuDz$wfJqeL#7sk3(k~B^ zB;Z(fks^Z0)`6gDrpa1*<@=}#`?38uvmi3D& zNf&>wf}*j}PGd+!kddPmiSWwO!rc|9w5>74iGX)rsmNNu=#d0K#-ZK2KH#jf!wMBf z=>dJtTk}O(6&ZO3r^5KAhAY%9c6TFDLUg%CW*%QilLGCXkp$yp&~8P?A*NNoY;29T zf_-`hTr_cxzi3SX?^^-yn{PI8UURc)-Qa&?zcXHOVcmtKIXE6SF}me4aA(l{O{0t9 zfv6{D8gB|hp`pPdlz|FWQmssQpYUW8&#WFANS@@IXI;_Lrk`}hjp>ruoweAKwMd4M zxLv?;wt{P)rC^9xvaY=Qhqt$*?Xi*ZxceBrv5{V){lc3(kx#rFdy<|`%4B(z5DE9i)p0f>1pif>CWK zUkEyfR)7Lc0D)T>sCN}IVsLjyP%LvbudQTqwIMWP5j$0AG9P#RRBO7Krt zbHprD7cm-S9u+;t1@bkvsTn<8q9Q(-h>f;q-cMKAF~R}>fyuGJl+?OR1Ni;@&_V@%#@cJ%!UI{Xeh4^mAWUy zODv*%SwcOWuKm#3&jo#kAH+NR3Yt`&JJoV$8Ke7RoStsY;9I{Y*ltFDyvBi@L4&y0{VXhb1|hR;=jE_1&)`f zHfnw1BOGZ8T3OeWb!}%|+gaDZtK#&|AXJ=y7xL$^^0u1&wn~>v^e_AX*2ROA7vfcd zr9<`cJb^_Z@EJ-|%PiWj+`D=YlJaZ#9VvgA%#v2v{?)-8TG%R;!b@A8FpI2^;~>5e zu+znqUB_aFj2(aQ6N}ZzL(?>zLHDi?I$9gAZf{%FMPv3IyQNrI0T(!I2VDaer*^^A zYB;jCx8{yAeU0^3G?|H2YV0B+fKweLw%pjW4Xv!45tj9ZRVHl~q=r)+B6rrB!XNsJqj0If`I}nx&_?(09Zh$zlf0D00m8@4Iw3eKx%$p2}z@3fW)md zhqT$cPf~z>P245~T=!W((65D5Y6S@!D^=zuNs}sE^~)Y4LPj})`{$56(mnoc*h8mm zvQ5N2Cn?|IgyggJi0J_h9?U3hl1bT~!vndXe6)&^Q7nEQ^G`VMvHlRv~5GwM2A$0|3T#ejc34f}n{S<8rwaw>We5L4z#k1jbIPMew2vZYQ{Ebjq zaT&EuoZ3R`*kd2%6NM`v;kNW#2oau*q(69UTQ8NZ%hCBeHV=cifn{V{Bv{~3r1l17 zXLD>Mtm##}h*!NF{_SYM-T8ZEf5c_bua7Q=%lg>-y&UR)UdX@O%CYoxO{)YV_wrjU z1Z%L}p{Aw4YQuA0h}paaN~|Q@C)!lPTDnk+5^*{aYg7X4`J!m4qdmSa5|@99W(F?T zRE9+i{V2mKMkgf8c8V3JScw#~1kb7b;lm34Xe)*bKcMObI)%JR?Z}ghQ@RGG5$@r< zSY`N`IuHSWG~kPP30!d6w(GZIZ8`746Sj<^)}8_;)ev1lD_eI4i9V7NS348pxJ{$& zb4FA9dLy9<(AERJ{Hg6q?rmF_DKub5D5)%z*F@){L=O+I##fzN{&4OZH%mE5q`@kzHc69-p=K1F4S z^d0IciadeLAy?Q29ol+fL(gT6~%#Kw|csv6wnj^2oB@#VD!^TI(!Kw0p zGW}Jm=lxV@cEf1_*-ksltxF|BHxSX1SRqwQO=bHqj+;L5jzAXQ=*FjKb-9Fjmq-(h z)%AkEmh6!bpFf7=fkXIQQV=Xju~X0Kk;B=Tt}j7(v#jek=+7#%zln;z*4MRNTyMbM zw6opeO2*p4q~YgxCDU@>K5-XcIqg;w+LQ~5w^PoK9vAflZcK^ewa3K;Pjw<3R#N#ko!GPox-}+Uet}vQ zI3v=^XB@d*5c-UfpW&@@9r|wtI0y*!l~K)bBv}4Y+*z#Hya*CyNe>_LCVR-Sk3i5zC$_^QBDz=d5 z7Bk;O${~e$2Q&eL)Qb*-LlWQ{i8h3K4Wjc~UNSPvX9Oz%NVd0t$#wz%#Kadz)uh)e z42E6t&BZAqO*uhAFI8XH-JXbl4cy%or@$7>9age?NAG*>OWe9Po6V#{S=K;T+X;kC zBcrv{ahF;TXojxhd`_ols2QfRpt#y9?PPZ9YX<}?56&)NpId~{W-Zu7gagv`G%@5f z=OWI=#43mko!vcq5)^$2Y8Mol{%!oM&ELk)5Bj(9vrxa`N|oGP63qg z81{!rE5vXL+=diPS|Oduf4WMXZ(mXdAWZB}UqXSNsMia*;(+`l!QvwH6qb(YlKsE>gKy=P%to2F;`r>iY< z{nOR*&43iIpao=UAwLqj!@`Kb zP|J?Bk!-Z%RdV8gN^VzQT%^T$HV-2ktzO*mFUxtp$Xm}ns-GfOJ}DtK;QJhU&w38O z$TGWh+Td{e&sDATBSLQ>9c3qcHT9Qo=&$eQfX?%ZDrNLl*Cm=1K9mwdt;V|I%dMOY zQ^26O;!s=+4U;i7h+Vc;Epd#8$u^Axb!9knUyQUEdt!oI?LO{PlsI# zTrLZtQc7O=j6`}97`wW~EC}251d*F(7svu-(`-N=`0_ahHgVN7B|Zm_7;5<8!!GLS zdPugYgi;o^jeNQZgwGwWlnZ!poObf6Y7?0|XbW*pjc4?kk=vEP7#crSTU|Pe^U0Qh z@tJ#&dBrq;^sU&N?0Vd=Dm`I1p%hn$bT=M>h$*ST-2*47@mQ{u#ciPs+5-uPZXH_e zRs&uAa*B*Qb~c)s+2pb!A%t{O9p<~3hR6rtviO`NMPvy}I#`5us9YepwL@*KD7oS! zJ#__2-9w~FLEBV@24TCX*IH`I7=yPuO_Y($T##^o*VQ&3e)7HjU{EG~_c=c9vL~S@ z%sVPxDled(B=XU%GdC&&8-%XKJPAVANt`<95DcQ%IB_fGAg)Up1#Ho#b4%ePpuG&3 zS+psRsp)M|0dn&Z6-n-YXO3BmDDl2B_gO88#@qMY+$ZfMW8DH7l`=^!XY?~!weQ)K zhGXJ?u_Mt&B#!x6bhC@{gDnh1&4;#Xg5{XljA%*7Yiq(R-hma!wlW2j8itlhB+a6Wu@KQp?NAn94#Z48=b}Zy@|4gf9n=vx2p=qP;OtDQJ#x`@j-9`{ zFNK=Ezt&i(@khRq6c?WEfz%1Q#_<<5b*-wegFmRwKM zq0;$&0edmuM>Hk>B`Hojw(!EW=8)(qLd{I7b16GgZb(f?r=kfZ6vM_Ou%Qd6ODviu zyS!ouL-DRGABT}_aRbt5ypr~RzUKYS7bb6EtoKxzx^YSF4z^rSl36pBCQi4UR@v^+ zK@r1$`qs$Ztjuoax@STL>U8UeqSYzq{@HPHU$yiYKW=?3(Y^O>tIJ&0dT4H#QjD`$ zQv^7a1hp6!bo$&qt&VIQS+FEV9qbJ+*&f!wlp!JLsu`$sS?|(<4S$uXG_nwmjvK!XRFDU^f5fZv5PTnrxzEpkFuVZQ$e~0^Nzap@(;yKsMF~&E zeARjQFn{>423`pEH*kY!8D_gwR`x8P+u>m=rP=hN!!vWz$|YSkw{i%l(d`@}A}%aS zljBA#5qNN%^PV)FC#znVLlxR-?Do5kpp&c>bbC9D3)d&Kla9`Ruc6b{TDMiw57kA_ zcr&QCnaFOcb)f5_>F0yi@DXBh*DbcAf<3TMl*$aFPuST&)^ouQ6} zRmdGjov%>1BOzjcO&3>-jiE{?n@7!%s1TE+e6eO-or$gpiz`pTqFHvKEx$tVc{cV zzNF-8y>pAHVQJGWN#%Tn-bv_unM52ME22^pQWXY1fUEd_9?tr#3H0TP#t83R;wJ%= zqV=-}XSI^SP5D)Roy`fVjx7UdF%4$vRo)Qz9onyVpsvF3cinqTub`~=Dzro8!79IH z;g4T|r&ZP%ce zISn}ne}^A0a|lBx4vcHhW$}QB<^T7KtY9(pc<@AjM3H3ls}$cOpgl@c_`4Jq;5C^<@C(aC{Auv!;#2U(;>(hqU|3}auy)J%$*=>pH7{n%)jShAG(V@y zRYnCf;o-(w*gu%bLh+FS66isGOC%lVTcy_`Vho{I&mXH2TG`~#1Vpmf!)3omi++!n z{2niVc>Z&|M~j{QJ>H|my(bp?o?ha6xT5xq^|L27o%nma$Md~stfD<<4eiNQx!0QD zJ!g9N^gQnIqS+I38IY%QI5)_TncuaC@$US?6$aLpGI<}CrD!-bXb~n0Vmyw2bOMn(lGV4+#@n^?j_s;h6wq0*gyxp@ zDxd-^pMP03h-tgC4o=sug~L_<*k6PTKAughKF(xRCwyzj)Uxmwutcw1pQUsg z6DR!bt-OedfCuV6=G@nm8n?tI|Gb>9Lzyj--XIFs3xvT=5aXes&4XEU4Wkn=%DY&9 zc2+}`&kB?YXOS9O^xvld(5y9TXt(I4V+YESGQ;FB(V}lW@G8i`+U_hUv)J`=h=d3U z#t3gUaAT1=Qp(2B!sD7`8oMjRm&k&hck&BcD9m>mdNGoqE<#s>VV8so8&acbe>9eQ zR|0%V#~yPmcCKuh*{K_dG&cGEr|;f>ef8@3i#Ol?@cp|lzWw^!H?M)2VGe?&N+>aq zECdgP&|i>jgb{cwz$Jy5De4=bFb<&}Lm{KO!VrNi8EQcwhDuK~p&=5)aP4%4DS`T_ zoP$r>L2@F<51V-toG<|YLtNBG#8u-Keob;Nisw;i2X0WEe3^`har13*cBNkF`8Svi%ejJ`uI~`udQ$&i$h7<;gX@_z6dIB ze7Gyi4pb|Pf)%qyVd6tFPzKq5efZGy{2}P|#uB6XxG}i*NbEwk?6G3Q93MgXP`E0u zR!GF~R;yVlR{zVaGGs0<%a#H$GgqM=>V zfI(;}B55(Ae`WD4#|M6|APD*%r>DxDt=t(ND7co*ucX5�CY;w;%j9f?-Q0CFoVe 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 O{{hEM+zx;P%K`x8DZ%>y