From 10a3319ed1585fd30e1edee9293d7f24377c658a Mon Sep 17 00:00:00 2001 From: kangax Date: Wed, 30 Oct 2013 15:09:02 +0100 Subject: [PATCH] Refactor _restoreObjectState --- dist/all.js | 44 +++++++++++++++++++++++++++----------- dist/all.min.js | 6 +++--- dist/all.min.js.gz | Bin 57120 -> 57159 bytes dist/all.require.js | 44 +++++++++++++++++++++++++++----------- src/shapes/group.class.js | 44 +++++++++++++++++++++++++++----------- 5 files changed, 96 insertions(+), 42 deletions(-) diff --git a/dist/all.js b/dist/all.js index 004526ab..29e7911b 100644 --- a/dist/all.js +++ b/dist/all.js @@ -16274,19 +16274,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {fabric.Group} thisArg */ _restoreObjectState: function(object) { - var groupLeft = this.get('left'), - groupTop = this.get('top'), - groupAngle = this.getAngle() * (Math.PI / 180), - rotatedTop = Math.cos(groupAngle) * object.get('top') * this.get('scaleY') + Math.sin(groupAngle) * object.get('left') * this.get('scaleX'), - rotatedLeft = -Math.sin(groupAngle) * object.get('top') * this.get('scaleY') + Math.cos(groupAngle) * object.get('left') * this.get('scaleX'); - - object.setAngle(object.getAngle() + this.getAngle()); - - object.set('left', groupLeft + rotatedLeft); - object.set('top', groupTop + rotatedTop); - - object.set('scaleX', object.get('scaleX') * this.get('scaleX')); - object.set('scaleY', object.get('scaleY') * this.get('scaleY')); + this._setObjectPosition(object); object.setCoords(); object.hasControls = object.__origHasControls; @@ -16298,6 +16286,36 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot return this; }, + /** + * @private + */ + _setObjectPosition: function(object) { + var groupLeft = this.get('left'), + groupTop = this.get('top'), + rotated = this._getRotatedLeftTop(object); + + object.setAngle(object.getAngle() + this.getAngle()); + + object.set('left', groupLeft + rotated.left); + object.set('top', groupTop + rotated.top); + object.set('scaleX', object.get('scaleX') * this.get('scaleX')); + object.set('scaleY', object.get('scaleY') * this.get('scaleY')); + }, + + /** + * @private + */ + _getRotatedLeftTop: function(object) { + var groupAngle = this.getAngle() * (Math.PI / 180); + return { + left: (-Math.sin(groupAngle) * object.get('top') * this.get('scaleY') + + Math.cos(groupAngle) * object.get('left') * this.get('scaleX')), + + top: (Math.cos(groupAngle) * object.get('top') * this.get('scaleY') + + Math.sin(groupAngle) * object.get('left') * this.get('scaleX')) + }; + }, + /** * Destroys a group (restoring state of its objects) * @return {fabric.Group} thisArg diff --git a/dist/all.min.js b/dist/all.min.js index 9458678c..e42ab10b 100644 --- a/dist/all.min.js +++ b/dist/all.min.js @@ -2,6 +2,6 @@ u=r.scrollTop||i.scrollTop||0):(o+=n.scrollLeft||0,u+=n.scrollTop||0);return{x:d(e)+o,y:v(e)+u}}function m(e,t,n){return e.type!=="touchend"?e.touches&&e.touches[0]?e.touches[0][t]-(e.touches[0][t]-e.touches[0][n])||e[n]:e[n]:e.changedTouches&&e.changedTouches[0]?e.changedTouches[0][t]-(e.changedTouches[0][t]-e.changedTouches[0][n])||e[n]:e[n]}var t=function(){var e=0;return function(t){return t.__uniqueID||(t.__uniqueID="uniqueID__"+e++)}}(),n,r;(function(){var e={};n=function(t){return e[t]},r=function(t,n){e[t]=n}})();var u=e(fabric.document.documentElement,"addEventListener","removeEventListener")&&e(fabric.window,"addEventListener","removeEventListener"),a=e(fabric.document.documentElement,"attachEvent","detachEvent")&&e(fabric.window,"attachEvent","detachEvent"),f={},l={},c,h;u?(c=function(e,t,n){e.addEventListener(t,n,!1)},h=function(e,t,n){e.removeEventListener(t,n,!1)}):a?(c=function(e,n,s){var o=t(e);r(o,e),f[o]||(f[o]={}),f[o][n]||(f[o][n]=[]);var u=i(o,s);f[o][n].push(u),e.attachEvent("on"+n,u.wrappedHandler)},h=function(e,n,r){var i=t(e),s;if(f[i]&&f[i][n])for(var o=0,u=f[i][n].length;o-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;if(u()){e.onComplete&&e.onComplete();return}o(a(l,f,c,r));if(s>i){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 e-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,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;if(typeof t.src!="undefined"){if(!t.complete)return"";if(t.naturalWidth===0||t.naturalHeight===0)return""}return e.createPattern(t,this.repeat)}}),function(e){"use strict";var t=e.fabric||(e.fabric={});if(t.Shadow){t.warn("fabric.Shadow is already defined.");return}t.Shadow=t.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,initialize:function(e){typeof e=="string"&&(e=this._parseShadow(e));for(var n in e)this[n]=e[n];this.id=t.Object.__uid++},_parseShadow:function(e){var n=e.trim(),r=t.Shadow.reOffsetsAndBlur.exec(n)||[],i=n.replace(t.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:i.trim(),offsetX:parseInt(r[1],10)||0,offsetY:parseInt(r[2],10)||0,blur:parseInt(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(e){var t="SourceAlpha";return e&&(e.fill===this.color||e.stroke===this.color)&&(t="SourceGraphic"),''+''+''+""+""+''+""+""},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY};var e={},n=t.Shadow.prototype;return this.color!==n.color&&(e.color=this.color),this.blur!==n.blur&&(e.blur=this.blur),this.offsetX!==n.offsetX&&(e.offsetX=this.offsetX),this.offsetY!==n.offsetY&&(e.offsetY=this.offsetY),e}}),t.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:px)?(?:\s?|$))?(-?\d+(?:px)?(?:\s?|$))?(\d+(?:px)?)?(?:\s?|$)(?:$|\s)/}(typeof exports!="undefined"?exports:this),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=fabric.util.createClass({initialize:function(e,t){t||(t={}),this._initStatic(e,t),fabric.StaticCanvas.activeInstance=this},backgroundColor:"",backgroundImage:"",backgroundImageOpacity:1,backgroundImageStretch:!0,overlayImage:"",overlayImageLeft:0,overlayImageTop:0,includeDefaultValues:!0,stateful:!0,renderOnAddRemove:!0,clipTo:null,controlsAboveOverlay:!1,allowTouchScrolling:!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"],n=this.getActiveGroup();return 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._renderBackground(t),this._renderObjects(t,n),this._renderActiveGroup(t,n),this.clipTo&&t.restore(),this.overlayImage&&t.drawImage(this.overlayImage,this.overlayImageLeft,this.overlayImageTop),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render"),this},_renderObjects:function(e,t){for(var n=0,r=this._objects.length;n','\n')},_setSVGHeader:function(e,t){e.push("',"Created with Fabric.js ",fabric.version,"","",fabric.createSVGFontFacesMarkup(this.getObjects()),fabric.createSVGRefElementsMarkup(this),"")},_setSVGBackgroundColor:function(e){this.backgroundColor&&this.backgroundColor.source&&e.push('")},_setSVGBackgroundImage:function(e){this.backgroundImage&&e.push('')},_setSVGOverlayImage:function(e){this.overlayImage&&e.push('')},_setSVGObjects:function(e,t){var n=this.getActiveGroup();n&&this.discardActiveGroup();for(var r=0,i=this.getObjects(),s=i.length;r")},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.prototype,fabric.Observable),e(fabric.StaticCanvas.prototype,fabric.Collection),e(fabric.StaticCanvas.prototype,fabric.DataURLExporter),e(fabric.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(e){var t=fabric.util.createCanvasElement();if(!t||!t.getContext)return null;var n=t.getContext("2d");if(!n)return null;switch(e){case"getImageData":return typeof n.getImageData!="undefined";case"setLineDash":return typeof n.setLineDash!="undefined";case"toDataURL":return typeof t.toDataURL!="undefined";case"toDataURLWithQuality":try{return t.toDataURL("image/jpeg",0),!0}catch(r){}return!1;default:return null}}}),fabric.StaticCanvas.prototype.toJSON=fabric.StaticCanvas.prototype.toObject}(),fabric.BaseBrush=fabric.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",setShadow:function(e){return this.shadow=new fabric.Shadow(e),this},_setBrushStyles:function(){var e=this.canvas.contextTop;e.strokeStyle=this.color,e.lineWidth=this.width,e.lineCap=this.strokeLineCap,e.lineJoin=this.strokeLineJoin},_setShadow:function(){if(!this.shadow)return;var e=this.canvas.contextTop;e.shadowColor=this.shadow.color,e.shadowBlur=this.shadow.blur,e.shadowOffsetX=this.shadow.offsetX,e.shadowOffsetY=this.shadow.offsetY},_resetShadow:function(){var e=this.canvas.contextTop;e.shadowColor="",e.shadowBlur=e.shadowOffsetX=e.shadowOffsetY=0}}),function(){var e=fabric.util.array.min,t=fabric.util.array.max;fabric.PencilBrush=fabric.util.createClass(fabric.BaseBrush,{initialize:function(e){this.canvas=e,this._points=[]},onMouseDown:function(e){this._prepareForDrawing(e),this._captureDrawingPath(e),this._render()},onMouseMove:function(e){this._captureDrawingPath(e),this.canvas.clearContext(this.canvas.contextTop),this._render()},onMouseUp:function(){this._finalizeAndAddPath()},_prepareForDrawing:function(e){var t=new fabric.Point(e.x,e.y);this._reset(),this._addPoint(t),this.canvas.contextTop.moveTo(t.x,t.y)},_addPoint:function(e){this._points.push(e)},_reset:function(){this._points.length=0,this._setBrushStyles(),this._setShadow()},_captureDrawingPath:function(e){var t=new fabric.Point(e.x,e.y);this._addPoint(t)},_render:function(){var e=this.canvas.contextTop;e.beginPath();var t=this._points[0],n=this._points[1];this._points.length===2&&t.x===n.x&&t.y===n.y&&(t.x-=.5,n.x+=.5),e.moveTo(t.x,t.y);for(var r=1,i=this._points.length;r0&&(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;an.padding?e.x<0?e.x+=n.padding:e.x-=n.padding:e.x=0,i(e.y)>n.padding?e.y<0?e.y+=n.padding:e.y-=n.padding:e.y=0},_rotateObject:function(e,t){var i=this._currentTransform,s=this._offset;if(i.target.get("lockRotation"))return;var o=r(i.ey-i.top-s.top,i.ex-i.left-s.left),u=r(t-i.top-s.top,e-i.left-s.left),a=n(u-o+i.theta);a<0&&(a=360+a),i.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,s=i(n),o=i(r);e.fillStyle=this.selectionColor,e.fillRect(t.ex-(n>0?0:-n),t.ey-(r>0?0:-r),s,o),e.lineWidth=this.selectionLineWidth,e.strokeStyle=this.selectionBorderColor;if(this.selectionDashArray.length>1){var a=t.ex+u-(n>0?0:s),f=t.ey+u-(r>0?0:o);e.beginPath(),fabric.util.drawDashedLine(e,a,f,a+s,f,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f+o-1,a+s,f+o-1,this.selectionDashArray),fabric.util.drawDashedLine(e,a,f,a,f+o,this.selectionDashArray),fabric.util.drawDashedLine(e,a+s-1,f,a+s-1,f+o,this.selectionDashArray),e.closePath(),e.stroke()}else e.strokeRect(t.ex+u-(n>0?0:s),t.ey+u-(r>0?0:o),s,o)},_findSelectedObjects:function(e){if(!this.selection)return;var t=this._collectObjects();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())},_collectObjects:function(){var e=[],t,n=this._groupSelector.ex,r=this._groupSelector.ey,i=n+this._groupSelector.left,u=r+this._groupSelector.top,a=new fabric.Point(s(n,i),s(r,u)),f=new fabric.Point(o(n,i),o(r,u)),l=n===i&&r===u;for(var c=this._objects.length;c--;){t=this._objects[c];if(!t||!t.selectable||!t.visible)continue;if(t.intersectsWithRect(a,f)||t.isContainedWithinRect(a,f)||t.containsPoint(a)||t.containsPoint(f)){t.set("active",!0),e.push(t);if(l)break}}return e},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._objects[o].evented&&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,n){var i=e==="scaleX"||e==="scaleY";return i&&(n=this._constrainScale(n)),e==="scaleX"&&n<0?(this.flipX=!this.flipX,n*=-1):e==="scaleY"&&n<0?(this.flipY=!this.flipY,n*=-1):e==="width"||e==="height"?this.minScaleLimit=r(Math.min(.1,1/Math.max(this.width,this.height)),2):e==="shadow"&&n&&!(n instanceof t.Shadow)&&(n=new t.Shadow(n)),this[e]=n,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(),this._transform(e,n),this._setStrokeStyles(e),this._setFillStyles(e);var r=this.transformMatrix;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()},_transform:function(e,t){var n=this.transformMatrix;n&&!this.group&&e.setTransform(n[0],n[1],n[2],n[3],n[4],n[5]),t||this.transform(e)},_setStrokeStyles:function(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)},_setFillStyles:function(e){this.fill&&(e.fillStyle=this.fill.toLive?this.fill.toLive(e):this.fill)},_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(),r=this.getBoundingRect();n.width=r.width,n.height=r.height,t.util.wrapElement(n,"div");var i=new t.Canvas(n);e.format==="jpg"&&(e.format="jpeg"),e.format==="jpeg"&&(i.backgroundColor="#fff");var s={active:this.get("active"),left:this.getLeft(),top:this.getTop()};this.set("active",!1),this.setPositionByOrigin(new t.Point(n.width/2,n.height/2),"center","center"),i.add(this);var o=i.toDataURL(e);return this.set(s).setCoords(),i.dispose(),i=null,o},isType:function(e){return this.type===e},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()})}return 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))},setColor:function(e){return this.set("fill",e),this},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(){var e=new fabric.Point(this.left,this.top);return this.translateToCenterPoint(e,this.originX,this.originY)},getPointByOrigin:function(e,t){var n=this.getCenterPoint();return this.translateToOriginPoint(n,e,t)},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(){return this.translateToOriginPoint(this.getCenterPoint(),"left","center")}})}(),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.get(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/2)*2;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)+1,~~(u+n+r*this.scaleY)+1);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/2),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?e(t.join("")):t.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)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.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(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.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(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.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 i(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}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_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){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.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,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},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;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(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.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'),e?e(n.join("")):n.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(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.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 r=0,i=t.length;r"),e?e(n.join("")):n.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)},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._moveFlippedObject(e),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,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'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.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 n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.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,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_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){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})})},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&&C-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_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){var n=this.text.split(/\r?\n/);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),e.save(),this._setShadow(e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this._removeShadow(e),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},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(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.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_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){var t=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,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(/\r?\n/),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._setSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var 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;return{textLeft:n,textTop:r,lineTop:t}},_setSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_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()+'"'},_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.shadow&&this.shadow.toString(),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,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(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,skipFillStrokeCheck:!0,_reNewline:/\r?\n/,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,initialize:function(e,t){this.styles=t.styles||{},this.callSuper("initialize",e,t),this.initBehavior()},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(){var e=this.get2DCursorLocation();return this.styles[e.lineIndex]?this.styles[e.lineIndex][e.charIndex]||{}:{}},setSelectionStyles:function(e){if(this.selectionStart===this.selectionEnd)this._extendStyles(this.selectionStart,e);else for(var t=this.selectionStart;t-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0),o.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,s/this._fontSizeFraction),o.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction)},_renderCharDecorationAtOffset:function(e,t,n,r,i){e.fillRect(t,n-i,r,1)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;ri.length?(i+r).length+1:(n+r).length+1},moveCursorDown:function(e){this.abortCursorAnimation(),this._currentCursorOpacity=1;var t=this.getSelectionStartOffset();e.metaKey&&(t=this.text.length-this.selectionStart),e.shiftKey?this.moveCursorDownWithShift(t):this.moveCursorDownWithoutShift(t),this.initDelayedCursor()},moveCursorDownWithoutShift:function(e){this._selectionDirection="right",this.selectionStart+=e,this.selectionStart>this.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?(this.selectionStart=this.selectionEnd,this._selectionDirection="right"):(this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorUp:function(e){var t=this.text.slice(0,this.selectionStart);this.abortCursorAnimation(),this._currentCursorOpacity=1;var n=t.slice(t.lastIndexOf("\n")+1),r=(t.match(/\n?(.*)\n.*$/)||{})[1]||"",i;n.length>r.length?i=n.length+1:i=r.length+1,e.metaKey&&(i=this.selectionStart),e.shiftKey?this.moveCursorUpWithShift(i):this.moveCursorUpWithoutShift(i),this.initDelayedCursor()},moveCursorUpWithShift:function(e){this.selectionStart===this.selectionEnd?this.selectionStart-=e:this._selectionDirection==="right"?this.selectionEnd=this.selectionStart:this.selectionStart-=e,this.selectionStart<0&&(this.selectionStart=0),this._selectionDirection="left"},moveCursorUpWithoutShift:function(e){this.selectionStart===this.selectionEnd&&(this.selectionStart-=e),this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd=this.selectionStart,this._selectionDirection="left"},moveCursorLeft:function(e){if(this.selectionStart===0&&this.selectionEnd===0)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorLeftWithShift(e):this.moveCursorLeftWithoutShift(e),this.initDelayedCursor()},findWordBoundaryLeft:function(e){var t=0,n=e-1;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n--;while(/\S/.test(this.text.charAt(n))&&n>-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},getNumNewLinesInSelectedText:function(){var e=this.text.slice(this.selectionStart,this.selectionEnd),t=0;for(var n=0,r=e.split(""),i=r.length;n0&&nr&&o>n){var g=n-s,y=o-n;return y>g?f=a+l:f=a+l+1,f>this.text.length&&(f=this.text.length),f}a++}}if(typeof f=="undefined")return this.text.length},enterEditing:function(){if(this.isEditing||!this.editable)return;return this.isEditing=!0,this.hiddenTextarea&&(this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.focus()),this._saveProps(),this.hoverCursor="text",this.canvas.defaultCursor="text",this.canvas.moveCursor="text",this.hasControls=!1,this.borderColor=this.editingBorderColor,this.selectable=!1,this.lockMovementX=!0,this.lockMovementY=!0,this._tick(),this.canvas.renderAll(),this},_saveProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas.defaultCursor,moveCursor:this.canvas.moveCursor}},_restoreProps:function(){if(!this._savedProps)return;this.hoverCursor=this._savedProps.overCursor,this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY},exitEditing:function(){return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.hiddenTextarea&&this.hiddenTextarea.blur(),this.abortCursorAnimation(),this._restoreProps(),this._currentCursorOpacity=0,this},removeChars:function(e){if(this.selectionStart===this.selectionEnd){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}else this._removeCharsFromTo(this.selectionStart,this.selectionEnd);this.selectionEnd=this.selectionStart;var i=this.text.split(this._reNewline);for(var s in this.styles)i[s]||delete this.styles[s];this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsFromTo:function(e,t){var n=t;while(n!==e)n--,this.removeStyleObject(!1,n);this.text=this.text.slice(0,e)+this.text.slice(t)},insertChar:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObject(e,t):this.selectionEnd-this.selectionStart>1,this.selectionStart++,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n){var r=this.styles[t],i=e(r);n===0&&(n=1);for(var s in i){var o=parseInt(s,10);o>=n&&(r[o+1]=i[o])}this.styles[t][n]=e(r[n-1])},insertStyleObject:function(e,t){if(this.isEmptyStyles())return;var n=this.get2DCursorLocation(),r=n.lineIndex,i=n.charIndex;this.styles[r]||(this.styles[r]={}),e==="\n"?this.insertNewlineStyleObject(r,i,t):this.insertCharStyleObject(r,i)},shiftLineStyles:function(t,n){var r=e(this.styles);for(var i in this.styles){var s=parseInt(i,10);s>t&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u.length;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChar("\n")}})}(),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");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}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&&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,function(e){r.filters=e||[],t&&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 +(~~(-(o/2)-t-r/2*this.scaleX)-.5,~~(-(u/2)-t-r/2*this.scaleY)-.5,~~(o+n+r*this.scaleX)+1,~~(u+n+r*this.scaleY)+1);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/2),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?e(t.join("")):t.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)},_set:function(e,t){return this.callSuper("_set",e,t),e==="radius"&&this.setRadius(t),this},toObject:function(e){return r(this.callSuper("toObject",e),{radius:this.get("radius")})},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.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(e){var t=this._createBaseSVGMarkup(),n=this.width/2,r=this.height/2,i=[-n+" "+r,"0 "+ -r,n+" "+r].join(",");return t.push("'),e?e(t.join("")):t.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(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.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 i(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}var r=t.Object.prototype.stateProperties.concat();r.push("rx","ry","x","y"),t.Rect=t.util.createClass(t.Object,{stateProperties:r,type:"rect",rx:0,ry:0,x:0,y:0,strokeDashArray:null,initialize:function(e){e=e||{},this.callSuper("initialize",e),this._initRxRy(),this.x=e.x||0,this.y=e.y||0},_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){var t=n(this.callSuper("toObject",e),{rx:this.get("rx")||0,ry:this.get("ry")||0,x:this.get("x"),y:this.get("y")});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=this._createBaseSVGMarkup();return t.push("'),e?e(t.join("")):t.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,r){if(!e)return null;var s=t.parseAttributes(e,t.Rect.ATTRIBUTE_NAMES);s=i(s);var o=new t.Rect(n(r?t.util.object.clone(r):{},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;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(e){var t=[],r=this._createBaseSVGMarkup();for(var i=0,s=this.points.length;i'),e?e(r.join("")):r.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'),e?e(n.join("")):n.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(e){var t=[],n=this._createBaseSVGMarkup();for(var r=0,i=this.path.length;r',"",""),e?e(n.join("")):n.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 r=0,i=t.length;r"),e?e(n.join("")):n.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)},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._moveFlippedObject(e),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,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'];for(var n=0,r=this._objects.length;n"),e?e(t.join("")):t.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 n=this.fill;this.fill=null,t.push("'),this.fill=n}return t.push(""),e?e(t.join("")):t.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,t){e.filters&&e.filters.length?fabric.util.enlivenObjects(e.filters,function(e){t&&t(e)},"fabric.Image.filters"):t&&t()},_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){fabric.util.loadImage(e.src,function(n){fabric.Image.prototype._initFilters.call(e,e,function(r){e.filters=r||[];var i=new fabric.Image(n,e);t&&t(i)})})},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&&C-1?e.channel:0},applyTo:function(e){if(!this.mask)return;var n=e.getContext("2d"),r=n.getImageData(0,0,e.width,e.height),i=r.data,s=this.mask.getElement(),o=t.util.createCanvasElement(),u=this.channel,a,f=r.width*r.height*4;o.width=s.width,o.height=s.height,o.getContext("2d").drawImage(s,0,0,s.width,s.height);var l=o.getContext("2d").getImageData(0,0,s.width,s.height),c=l.data;for(a=0;ao&&f>o&&l>o&&u(a-f)'},_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){var n=this.text.split(/\r?\n/);this.transform(e,t.isLikelyNode),this._setTextStyles(e),this.width=this._getTextWidth(e,n),this.height=this._getTextHeight(e,n),this.clipTo&&t.util.clipContext(this,e),this._renderTextBackground(e,n),this._translateForTextAlign(e),e.save(),this._setShadow(e),this._renderTextFill(e,n),this._renderTextStroke(e,n),this._removeShadow(e),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},_translateForTextAlign:function(e){this.textAlign!=="left"&&this.textAlign!=="justify"&&(e.save(),e.translate(this.textAlign==="center"?this.width/2:this.width,0))},_setBoundaries:function(e,t){this._boundaries=[];for(var n=0,r=t.length;nn&&(n=s)}return n},_renderChars:function(e,t,n,r,i){t[e](n,r,i)},_renderTextLine:function(e,t,n,r,i,s){i-=this.fontSize/4;if(this.textAlign!=="justify"){this._renderChars(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.lineHeight),this.textDecoration.indexOf("line-through")>-1&&i(this.fontSize*this.lineHeight-this.fontSize/2),this.textDecoration.indexOf("overline")>-1&&i(this.fontSize*this.lineHeight-this.fontSize)},_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){var t=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,textAlign:this.textAlign,path:this.path,textBackgroundColor:this.textBackgroundColor,useNative:this.useNative});return this.includeDefaultValues||this._removeDefaultValues(t),t},toSVG:function(e){var t=[],n=this.text.split(/\r?\n/),r=this._getSVGLeftTopOffsets(n),i=this._getSVGTextAndBg(r.lineTop,r.textLeft,n),s=this._getSVGShadows(r.lineTop,n);return r.textTop+=this._fontAscent?this._fontAscent/5*this.lineHeight:0,this._setSVGTextAndBg(t,i,s,r),e?e(t.join("")):t.join("")},_getSVGLeftTopOffsets:function(e){var 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;return{textLeft:n,textTop:r,lineTop:t}},_setSVGTextAndBg:function(e,t,n,r){e.push('',t.textBgRects.join(""),"',n.join(""),t.textSpans.join(""),"","")},_getSVGShadows:function(e,n){var r=[],s,o,u=1;if(!this.shadow||!this._boundaries)return r;for(s=0,o=n.length;s",t.util.string.escapeXml(n[s]),""),u=1}else u++;return r},_getSVGTextAndBg:function(e,t,n){var r=[],i=[],s=1;this._setSVGBg(i);for(var o=0,u=n.length;o",t.util.string.escapeXml(e),"")},_setSVGTextLineBg:function(e,t,n,r){e.push("')},_setSVGBg:function(e){this.backgroundColor&&this._boundaries&&e.push("')},_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()+'"'},_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.shadow&&this.shadow.toString(),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,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(){var e=fabric.util.object.clone;fabric.IText=fabric.util.createClass(fabric.Text,fabric.Observable,{type:"i-text",selectionStart:0,selectionEnd:0,selectionColor:"rgba(17,119,255,0.3)",isEditing:!1,editable:!0,editingBorderColor:"rgba(102,153,255,0.25)",cursorWidth:2,cursorColor:"#333",cursorDelay:1e3,cursorDuration:600,styles:null,skipFillStrokeCheck:!0,_reNewline:/\r?\n/,_reSpace:/\s|\n/,_fontSizeFraction:4,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,initialize:function(e,t){this.styles=t.styles||{},this.callSuper("initialize",e,t),this.initBehavior()},isEmptyStyles:function(){if(!this.styles)return!0;var e=this.styles;for(var t in e)for(var n in e[t])for(var r in e[t][n])return!1;return!0},setSelectionStart:function(e){this.selectionStart=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionStart=e)},setSelectionEnd:function(e){this.selectionEnd=e,this.hiddenTextarea&&(this.hiddenTextarea.selectionEnd=e)},getSelectionStyles:function(){var e=this.get2DCursorLocation();return this.styles[e.lineIndex]?this.styles[e.lineIndex][e.charIndex]||{}:{}},setSelectionStyles:function(e){if(this.selectionStart===this.selectionEnd)this._extendStyles(this.selectionStart,e);else for(var t=this.selectionStart;t-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,0),o.indexOf("line-through")>-1&&this._renderCharDecorationAtOffset(e,n,r+this.fontSize/this._fontSizeFraction,i,s/this._fontSizeFraction),o.indexOf("overline")>-1&&this._renderCharDecorationAtOffset(e,n,r,i,s-this.fontSize/this._fontSizeFraction)},_renderCharDecorationAtOffset:function(e,t,n,r,i){e.fillRect(t,n-i,r,1)},_renderTextLine:function(e,t,n,r,i,s){i+=this.fontSize/4,this.callSuper("_renderTextLine",e,t,n,r,i,s)},_renderTextDecoration:function(e,t){if(this.isEmptyStyles())return this.callSuper("_renderTextDecoration",e,t)},_renderTextLinesBackground:function(e,t){if(!this.textBackgroundColor&&!this.styles)return;e.save(),this.textBackgroundColor&&(e.fillStyle=this.textBackgroundColor);var n=0,r=this.fontSize/this._fontSizeFraction;for(var i=0,s=t.length;in&&(n=s)}return n},_getHeightOfLine:function(e,t,n){n=n||this.text.split(this._reNewline);var r=this._getHeightOfChar(e,n[t][0],t,0),i=n[t],s=i.split("");for(var o=1,u=s.length;or&&(r=a)}return r*this.lineHeight},_getTextHeight:function(e,t){var n=0;for(var r=0,i=t.length;ri.length?(i+r).length+1:(n+r).length+1},moveCursorDown:function(e){this.abortCursorAnimation(),this._currentCursorOpacity=1;var t=this.getSelectionStartOffset();e.metaKey&&(t=this.text.length-this.selectionStart),e.shiftKey?this.moveCursorDownWithShift(t):this.moveCursorDownWithoutShift(t),this.initDelayedCursor()},moveCursorDownWithoutShift:function(e){this._selectionDirection="right",this.selectionStart+=e,this.selectionStart>this.text.length&&(this.selectionStart=this.text.length),this.selectionEnd=this.selectionStart},moveCursorDownWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?(this.selectionStart=this.selectionEnd,this._selectionDirection="right"):(this._selectionDirection="right",this.selectionEnd+=e,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorUp:function(e){var t=this.text.slice(0,this.selectionStart);this.abortCursorAnimation(),this._currentCursorOpacity=1;var n=t.slice(t.lastIndexOf("\n")+1),r=(t.match(/\n?(.*)\n.*$/)||{})[1]||"",i;n.length>r.length?i=n.length+1:i=r.length+1,e.metaKey&&(i=this.selectionStart),e.shiftKey?this.moveCursorUpWithShift(i):this.moveCursorUpWithoutShift(i),this.initDelayedCursor()},moveCursorUpWithShift:function(e){this.selectionStart===this.selectionEnd?this.selectionStart-=e:this._selectionDirection==="right"?this.selectionEnd=this.selectionStart:this.selectionStart-=e,this.selectionStart<0&&(this.selectionStart=0),this._selectionDirection="left"},moveCursorUpWithoutShift:function(e){this.selectionStart===this.selectionEnd&&(this.selectionStart-=e),this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd=this.selectionStart,this._selectionDirection="left"},moveCursorLeft:function(e){if(this.selectionStart===0&&this.selectionEnd===0)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorLeftWithShift(e):this.moveCursorLeftWithoutShift(e),this.initDelayedCursor()},findWordBoundaryLeft:function(e){var t=0,n=e-1;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n--;while(/\S/.test(this.text.charAt(n))&&n>-1)t++,n--;return e-t},findWordBoundaryRight:function(e){var t=0,n=e;if(this._reSpace.test(this.text.charAt(n)))while(this._reSpace.test(this.text.charAt(n)))t++,n++;while(/\S/.test(this.text.charAt(n))&&n-1)t++,n--;return e-t},findLineBoundaryRight:function(e){var t=0,n=e;while(!/\n/.test(this.text.charAt(n))&&n=this.text.length&&this.selectionEnd>=this.text.length)return;this.abortCursorAnimation(),this._currentCursorOpacity=1,e.shiftKey?this.moveCursorRightWithShift(e):this.moveCursorRightWithoutShift(e),this.initDelayedCursor()},moveCursorRightWithShift:function(e){this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd?this._moveRight(e,"selectionStart"):(this._selectionDirection="right",this._moveRight(e,"selectionEnd"),this.text.charAt(this.selectionEnd-1)==="\n"&&this.selectionEnd++,this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length))},moveCursorRightWithoutShift:function(e){this._selectionDirection="right",this.selectionStart===this.selectionEnd?(this._moveRight(e,"selectionStart"),this.selectionEnd=this.selectionStart):(this.selectionEnd+=this.getNumNewLinesInSelectedText(),this.selectionEnd>this.text.length&&(this.selectionEnd=this.text.length),this.selectionStart=this.selectionEnd)},getNumNewLinesInSelectedText:function(){var e=this.text.slice(this.selectionStart,this.selectionEnd),t=0;for(var n=0,r=e.split(""),i=r.length;n0&&nr&&o>n){var g=n-s,y=o-n;return y>g?f=a+l:f=a+l+1,f>this.text.length&&(f=this.text.length),f}a++}}if(typeof f=="undefined")return this.text.length},enterEditing:function(){if(this.isEditing||!this.editable)return;return this.isEditing=!0,this.hiddenTextarea&&(this.hiddenTextarea.value=this.text,this.hiddenTextarea.selectionStart=this.selectionStart,this.hiddenTextarea.focus()),this._saveProps(),this.hoverCursor="text",this.canvas.defaultCursor="text",this.canvas.moveCursor="text",this.hasControls=!1,this.borderColor=this.editingBorderColor,this.selectable=!1,this.lockMovementX=!0,this.lockMovementY=!0,this._tick(),this.canvas.renderAll(),this},_saveProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,defaultCursor:this.canvas.defaultCursor,moveCursor:this.canvas.moveCursor}},_restoreProps:function(){if(!this._savedProps)return;this.hoverCursor=this._savedProps.overCursor,this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY},exitEditing:function(){return this.selected=!1,this.isEditing=!1,this.selectable=!0,this.hiddenTextarea&&this.hiddenTextarea.blur(),this.abortCursorAnimation(),this._restoreProps(),this._currentCursorOpacity=0,this},removeChars:function(e){if(this.selectionStart===this.selectionEnd){if(this.selectionStart!==0)if(e.metaKey){var t=this.findLineBoundaryLeft(this.selectionStart);this._removeCharsFromTo(t,this.selectionStart),this.selectionStart=t}else if(e.altKey){var n=this.findWordBoundaryLeft(this.selectionStart);this._removeCharsFromTo(n,this.selectionStart),this.selectionStart=n}else{var r=this.text.slice(this.selectionStart-1,this.selectionStart)==="\n";this.removeStyleObject(r),this.selectionStart--,this.text=this.text.slice(0,this.selectionStart)+this.text.slice(this.selectionStart+1)}}else this._removeCharsFromTo(this.selectionStart,this.selectionEnd);this.selectionEnd=this.selectionStart;var i=this.text.split(this._reNewline);for(var s in this.styles)i[s]||delete this.styles[s];this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},_removeCharsFromTo:function(e,t){var n=t;while(n!==e)n--,this.removeStyleObject(!1,n);this.text=this.text.slice(0,e)+this.text.slice(t)},insertChar:function(e){var t=this.text.slice(this.selectionStart,this.selectionStart+1)==="\n";this.text=this.text.slice(0,this.selectionStart)+e+this.text.slice(this.selectionEnd),this.selectionStart===this.selectionEnd?this.insertStyleObject(e,t):this.selectionEnd-this.selectionStart>1,this.selectionStart++,this.selectionEnd=this.selectionStart,this.canvas&&this.canvas.renderAll().renderAll(),this.setCoords(),this.fire("text:changed")},insertNewlineStyleObject:function(t,n,r){this.shiftLineStyles(t,1),this.styles[t+1]||(this.styles[t+1]={});var i=this.styles[t][n-1],s={};if(r)s[0]=e(i),this.styles[t+1]=s;else{for(var o in this.styles[t])parseInt(o,10)>=n&&(s[parseInt(o,10)-n]=this.styles[t][o],delete this.styles[t][o]);this.styles[t+1]=s}},insertCharStyleObject:function(t,n){var r=this.styles[t],i=e(r);n===0&&(n=1);for(var s in i){var o=parseInt(s,10);o>=n&&(r[o+1]=i[o])}this.styles[t][n]=e(r[n-1])},insertStyleObject:function(e,t){if(this.isEmptyStyles())return;var n=this.get2DCursorLocation(),r=n.lineIndex,i=n.charIndex;this.styles[r]||(this.styles[r]={}),e==="\n"?this.insertNewlineStyleObject(r,i,t):this.insertCharStyleObject(r,i)},shiftLineStyles:function(t,n){var r=e(this.styles);for(var i in this.styles){var s=parseInt(i,10);s>t&&(this.styles[s+n]=r[s])}},removeStyleObject:function(t,n){var r=this.get2DCursorLocation(n),i=r.lineIndex,s=r.charIndex;if(t){var o=this.text.split(this._reNewline),u=o[i-1],a=u.length;this.styles[i-1]||(this.styles[i-1]={});for(s in this.styles[i])this.styles[i-1][parseInt(s,10)+a]=this.styles[i][s];this.shiftLineStyles(i,-1)}else{var f=this.styles[i];if(f){var l=this.selectionStart===this.selectionEnd?-1:0;delete f[s+l]}var c=e(f);for(var h in c){var p=parseInt(h,10);p>=s&&p!==0&&(f[p-1]=c[p],delete f[p])}}},insertNewline:function(){this.insertChar("\n")}})}(),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");n.readFile(e,function(e,n){if(e)throw fabric.log(e),e;t(n)})}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&&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,function(e){r.filters=e||[],t&&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 250ab66e0917999dc8dbde27728daa7dc70b27bc..7063080b914febfae60dc073e7c06bfa839f8ba7 100644 GIT binary patch delta 30854 zcmV(=K-s^bz5~a;0|p<92nazEu?D(ff8V>Ry6UOh&%gfe&Bl#?>L4nttdwslcnwg;zw# zK{PM+J(}2NutY1WSZjj|Plq|-&ZEa$Kd%uP$f^uM-He8f=%#FVtNiyWTad5Yf3{w$ z!__b`jfi|d_{TDbvtbki{dzYOKHzS}&G2YEowN9RVhqxqfvON*GEfW7f4VIZuYAKi z{Zr`0r!^36-PReF9pfJUe;g&unU0f&%>hYbV>uIs47BKsP;?-ygMokXO$jY7xvuU%RA`<)N z#$uS@)SR9Q?K0g<6EAa9vnlaQZMww)s`dQ&sj}D-(PUXBW4|>`v_t}FXlAE538Xop z_wHbq?$P!rvK#BR&27iXvhj7ax@{tL`j9$&%m8ynhQvGJLJ)7D(g4&N8e_1cJ-lDfxLDPnYQk==vs<=<*7`e znQ(k4admzNEoUN9bFkx-3$=@yhLAz!)GX+ai+o$GL5B>$*y2p9~C59 zQb?qx>$YBrb{fB|vUyFH+^RN&3GrYvR zn5XmVMhVL>tpOd>Gpp39Z}0NDWp6caDp7%zGLhxtk#=KzWj8lg+}es;f3vcz(*^@s zN%H$-eh>dNX^Hb*!JjeuM{3mUWH37y%B#XOJGz)=a!M9yV^2wi?viNxtk5@>_`Sg2 zg$!S--wXVWHD_FN)~C7`hG!*A))?7oMsIN}COMEx=yz`ozls5F}unZm^ObQt{d(ttGRyaQcpriQ-Hyoc4=(D(U z(86AlBl`PNr-B*l28Z#Zr|vebcHKMG-EX#q&4JImwm2a=`y9m< zO5OqDfD`=ttejWZXh*9&`kLC?gF}f^%~~_?Nr$Zu-l?xe6UDQ$wo!s^*${R6+@mL99xg@-c`y7Q0HvHw)s{DBeuH8ud@edqWP_I?_&P(c6hJVM*zw^Q5 zk5}+?GLj((nSsv?B)8HzXpSoF({*KTGO`m9tEs>TKc)hO!iy2Y=Nf+B^v8U-;l~<2 z=!DaMo5(%oR$ETF6Om7 zsBp*DNy%Kvv`2NJg)WrtqW;dhp4+2x+R9~r?CldyO8^c00#QqtXBWZQwkA@^V$*i2 zhI^+Tq8>S~fAKfIvn+h9vt!et_njmgdD9~gEoC?Y_&$WKE)I9zyB<)LzLLoGH~N3? z7aK21avM$_xC=?DITyuoy~8y-w(|~xB{>!J!-*zh8fC*JDdCf;7H%_t ztUC$_jW%v;_tyH(xRa~+&O3HB^t+oUHm+}>1G&=$ZphG+Tb4Ir-q-ca-%fC$ zx9KxIo7*s0l9~~^?RP`v(TbJsq?eX7@1rR~aA(#Q|4|eFkpt-@|8rT7+G0Iw!FnX6 zl&FawO7!A@EYJkwwerLY=Q7d_L^a8OCkBjvA3kHVvQAYEk7st!QE9446IN)#SdD=` zNv!F3;}e>w42E{K1QH^0l181fckgjc*H742n?ylwr8+ShO&PGhEO*%eGqhzG6goB8 z$ZmaK!n_sf#W)X4^Bny>Hg76&EKoKs(jJGtsXpU$u)Jy6Wo=d-!qLee=M8WPWqd9b zB~U!_h?C1{Do{888@MN~k$z_*zkH4{0;^625lkKKHNwMH%^;{erBrEtyi`xsSr7dm z?a@Ez0(NgSd>ThOC8_}s_TdC&zcQ3zH_TEful~m=9`vswn3;oUQtLQ!QX%k-36_{JB`#>D(pYKZ?y( zHIP!Rno}XHWn$Mf<~1X*)W1mx85=u^*VYeOb;v?hBHbqyWDJ{iaTyoX4=zh3$tUwqlXh6u#U%=Xha8g7pA#?QM40~S-~|~T zqnWS{gHN?}n=8cRWHVgV3f#q_9r1BX+p#Li*n*%Rh5ZB`>EBYBZz^HOt8z_xvOa`) zjd)M8cP$Z2#SyF$)IiEzKfNw4%XBcFSl?qpfTTPp;i68ksPliSZL4cl)`?TriCflB zsw7>!3No9Y8UrVSj2vDhBJ)c$1y{b~YuAfg0U2(oMq9%8)0r#d5NktUT~^t>8r47USuZjeyN2hy}eD+pvRa589%MhF>UAV?@S3GGG) z^a==Tu)tqro_QN3q}> z;8t4!OJ^#);WFxM@&4ia_v6j6vGKP16rF7j=TNHsz?&w1B42np_B1=2R_Wp>B@n*~ z5qZWj>q(0xvNDc!OT>V$rAS}$>63|UCx16ZKBwP&VWYmLZjpUnZUX-@+UK42Nv(Mk zeaO;D9-%88C+w$C;0gLRBvIP#-ME(%c z8ae>+otgJYaH3%I=jt3?tKTPg>ecajA)Rfu>eu-qip$}RyfJL=oY%F=pnjd#A`b&0 zS*WsgiPx=>36ieW6_Y(}H-E98Zwa)mn;s!O23)YU?RC2j+$yDgtKgA~`6Ux)DQw5m ztypMK;FK+5IHI&r(^)!{VA??5AgZUCz@2HbN1Xiu-D$d(p081Q(EgT5A;JNkGe0ia=zdb^{eXAgZB;{ztWCP zxu8(TtJH#UPii>V#AzJ6fNIc?tIbUiTQyiPN(`CUSBn`kJsK%B^cGD{fSTzES|*OA zca~6bg794};d;w$Kz}p|MI~4eH&QAe>R<)Ds)I-zEL9Ak<6b@Yxci`g7FC8g%WU<5 z+U7q{$);XtBP|=uRgkzwlVedZ8tstj<5<38cR~#|&axADu$e0Hh2kD< z6R2jcm85#d5T`_$09AE|>HwbkXX4LQU}+hXB!LohWz=SdyOZ#4J%7|QVz>DI@$5nK zPd_exNRRw333g(h+36i_zCN1RgWL9%u73iq-v<&RD7p0pJ-rhaRADw zB^6dH)-^$e!M6IUf`58Aov(^8D8vl}KZu0xFB%j(ZnLZ9HD{@R39hW0ERa zA-Etd+wZETAc@+VJJHL6wJ>#K6y&LB0u`aufQ^9`SLI6nJi*~CkdVrMS!IjGIznCn z{u4T$s9(A6qZYuA=LtZ>*D^&KD`!Re#$>GS!Oc6ylp2(&lSEUk43Q z`4Dg;PToNya2QvRu(eX8xY13Rvz8yNvMKYyLnT`|j^Mro_&4Kmzh+44VI=6y`DoYLPwSc^u(KS_* zpUx$Mk31kfTfv_?_VqFBM<5G77Dv8UJ|7*ACIduI!>Q@j{0$dcgC~q<`sY9LBmuj@ z(9@AZi}zofgtYDXSl*N5aYzBTlPz*0e@w)*)fQCa;~;0%qBRckp=zO!>X@$>28$8yWjap(JPoTu(CEXjJbLlaU#~pDfL59 zwDI9|3`XK%kohXM2!RM3Qq!xEI6&hiH$}xMDv@H5q7=1w{J4fcDj0k6x`dq)vmC=gDY0VhccUy2b`cYIdI;B;MJP!nVKRfd>Avg`he~w%V zq1hy&jgJ?&Q{{E`vs9V=q15Dt(*lA!aF$z_{*rDWVyv-}xE6rR_F)`1e|;Jpfjqg@ zjnB@TY60^uQDR!F>m`3J*f}n~f{n=QlkoGGC>MU^PCd_=I$d`3RX|-cquVrZ(1&7f zf72=YT62%PxO;-VX=mHwzRcRfYFClVNo+XUgqzgTj7Ja%6(n-gBOSV1+?IfWVw;#>X_%Czo4` zeiHi+Hg!?fI!GZY+ZOba=s!G~9le)lGv!FcY9&(1pA|q&p)>B?#zm`wcRX~9wRC?N zShHa$h_DI@V8F@_8Lq81oY5YgllgTfe@(F)zOIlHc7lX*xaN!9o`@aX-4&-m4;>RL z*}bFp>NoH^>FqTUe*`tE z)zp*2noJZTQO;8Oy@|@q@;e3k%2tq ziY~cK3gv@n_3$RrN#ZsT#m*ZO(fzIhG0rFiKXpdk%&zP@g;9tO)J1tCf7Ml@m(VEK zi__)PtbyK*Z5Ygzz%xhbVJHvv}!foiDDCm9%L<$ZFT$ zI{*{g^nJImrjH)=SlUoD&?2%9K_%7_@;!oxM~_PJqr-u<;m8;}TtL?Z{p&lxMxZXG zAnT+a-r&RIx-)uBbV6WVzbuV>+GOoc zJyW^*Je#$Brfn)UX~<(T>%h@S$d8nSNIryIgX%>WE4&`j=nR>+obRrAFSgyv2(j9A zH7_m-@7Y}>Qn9gqNL8cE+LS-JGx@F1r_`#FVJ*_u*CGv;9}GpMP;FBg&Zf;OLj@%K z#FRFK1J_o|6zwsBe?^(r!cHkEW1_RldFa_q$|=l!XgECI&F64H2Sh&URUKlPim*JC z3RR=lNu@TewpCONdQZrY49jq-)X{A~-C=c23)ZMBPHNv7h}!@qA)q5_%CDT5W(rB( z6xVsRGW;;bx2w*)cgeGnB}b;~V1l=%TIos7LNnYhMj}c>e^EBUX6^I9jqV>61jc#Q zB}WXPG%kwe8<;u^SOLOJtR(kguEYL(Xp)lt!VC-zbCGVx@yhA$xH=R<$D}PbG&aS? z2Gbqa3hN`h`7ya@bm@ulr{%Q>}ooXxR4P0mcXV!W;%{;=$ItxVa8aDNZpy>?HAzN?|;krHmj!HR2Y4z=6-W>T|p9s*U-gP?dF49eC`p?{Bj z2A787m7--Fi=_m1-^6UNYZPZT*)vz8$fSdAL#P3pe-0=~o=t=Rw6IsC_lgHokQHOb)FuDs;j&j7^w~6i{(pQ6TaY};_Cr#Id5;)cj11>!CX|9Z9 z&f({QQG}f)SX4rI7f7AxY7;fHQ{EGy(V2UM(=^w{0}_WK*Q)~!9Gm#%T%nkHe^@kI{u;xaAdes&akSd}#mYFZ6gH5c1=A1;m-D#J5UF5P zKs;EekEw&g05mEL+6k=!20byiA#6jQBS65T(cLP5A0%!{)40Z<3M_V);j79^J;Rxp zf8k6dG*VDRJn@J2xYx5lK4@NDKry)T9%Wrda;u@3T?R9d1P{XQNwWuB%*mq)Q8X@Y!su+(~pf?l7AvuHV5zZ0Y zkH!D_^pB&1PoBk7HpE=@(?6qolC(wT?bUy#e@;}r=)Qz*8svzpM*>6z`c$JFf9`v6 zrVw?r<0#tEHte4C&^NL@HgqcubU1gsRSp4d%ewdPdpQC!DuNTwkqoZoXo(9E6|H_@ z2ZM<8gg(=*q3y+TQRFp-6aro(*YF}lSP3P}+=j%KT9$WG@d>^B3ZtaAZ!NcmU#n^e zfvSL&J8{!-3^CE6?y+6Hvqc^Wf3T}Mumi*@vK4ft>=xl>Ue*<)p9_S*8UfaFJZ=85 zyd)!4{FTG0FE&PKN~8sSEcp4zb(+&>I5*GqY7Q?mAdTXpAg=vJSWS5X#y3C7WFkp3zoEf1p9E-b8}* zw)|I2rO+&v%Dt`lA&(3C09qK;vjhXhbMV53SH+! zpOsR@84XMKYeW=)f3psbI=SdLV;8PftLT{2Z^@Ef{n$?_ti@&2qrW1Ae}UPl@j;!ye_C+CgIAb?*XX_piJ;T5 zZ%eORjtHbfcBByZKX4n*(5dk*tJYQs*5h`|H^L-O^vMs*lDHKnV1Ua>NZQIh5&3Wg*Vz+3U>_ps|fb91tlW%_3oF8TM~`FP2E^H2jKn#)(@Y~fRIP~d*wu%%2T%6pW5L)FQwV|(v1`j z08%fPh)BE~uUiHdc?8RvzL55e*_LMuiF}?hfO`}-gh)CWlYF@9Y zUsy&@f0CyJ8MK1FMC>?ZfQ^lkbNkwvL{Y-1GTZ|Lz6?iaQe9{U>OvUr%pF8SM4UhkQWE z4VQ6Ul$44q7>>q?e)hpx5?~GZQy@Cf+-Xu@e|!p3TYOm}Hw>%I09KHkd@|~ANl}!u z#cG}lHOwEg#VV(Q`KaP{Tkw&X$pV6u0p=u|V2sYUO0S;@FofRmzpE=~Wm`ZKP;jz` z8)c8S$sTW#J>DYx=VXtz2mO1pCpMq>d$Q-uz#dQVp0RB9oJF%|t(QG}q3pQ}WRLdW zf1cQnd$@@Ay6^zwG4bHH;-t){lA|xK{`VF~C5yLs^Oj5QY|EvM9kDO(zh!V_CiDFv+i- z_j6axqJYkdrEeiwuY#Gv^7)rlgP7s1e|2y=zZMQx{d)VFXx83Ds2D;f)M8~=4OO1;Q2d|A zs`uzfyp>3|)-uw-!N%;`fpSP_4YmQSIwbvU2YIYs!<$47hmaV-cp&ovjEPj)e^dw! zuFi*gUji!W251yQAmdlio&XCx*drjV$>gQ1Q@YoNM6G0xO#huFo zCbpmP;gsV9%91$Py0hz^5%V|M5BDB7(x^b^UN@3RC-cr7@1!6X^WJ@LwMU0jqXbmE zxu#V3i4}f=;Y^v;8nT@q*=Rn9pwr7y5O#V6DgsYruOwX_OLBxO6aG<+e-C#i>_9aW z6s+hA3KJjl&Noh-$B#|-dg8e9C^LsOV5yoVX9`gnzyZj&B{mthVtWN4rP9H z{K(&F5`k5O3p7J7q>vW{aDk0$OLmn?41;de~C(9Oe2Z5$*arRDqRJN1ZI(9Gm1jX)ZIeIZoniOManC% zy^W4Tfx~~m<{*j$>FpwQwhnBrV?Rid)^2j#X>NLp>aNTjdea>TLnqNE5vmOFWohmX z>)t#zV_X5+! z8;+)H3ROryC8vVmnC!taNTTT;n&wl;fX{LWDDCh$Oh-oN9|YER90H~S(~B{MAA{3} zQH>o%!@ZzEgwRSv(gKAax%if22ESJj6d@GonOG5#+ART$S`Yj~9(XFm)_E*8U!n~< zmys8K)UWB%FXBEde@psU(?^WU2d8Fq9PJ5O0ONBJiwjsNm!;E46%!> z^zu@Y>5*WgHze-@2vS~>j{Ywazpy{G*m#Y>r*VgqRH_!fj24MiAckQXlAWBEb^ zA9vI)XeV8NK5S6*ha(~Di~2=R9Tc!Oo=3D%y6&IT{ETS!0O+TF(h&lsSi!&;L_9vU zpxQV&)@F@QNO2%SMpFFbbLX*OWD1Sj_8>BUK;7~S+mUP5^(#ZR{ z!G5wk_n3x)*-hc#y%f6ymP1;KC$zS@yxa&GXZQ#-=KQ>>7I{`i28){~k6QUKhiGxc zBzwMp&Euj`NrZ2C-&K1qo+9;#;2VpjO2Pq;%-dFS!U}DOS43;sH)u`2*Ba`((Y$Aa z@+yHlu7B(S1y$q7d8X3z?vi~4^-Sh*pkt)x^u!F~UK||8iGhC9s}UZ$J{{vfhxpG^ z{O1$==h>NQy&>jSHe1A@w5gVL#pk)7BGS=gRfFieRGGq9K} zFeX#6yW4i!9cpFsEXJBp*bG-gIBq45TZ!XV;$yg#IBq45TOzfPjHMv-H_b)hTcgOk zspo^o8@wb(0&yB3VMQcTq9KYEqOTRv875GJp!60!?+5jAiy0Pu)$7{tDc|8e4|LyT zMBD&X3(3sHcrxP{#!}}KO7BwoW*rLi%9Biq9Rc){YKa?vBcFQe9P`f=aiSR9py)K~ z(&=L|kmiK7?0BlRZI?y3IcI^SugrNIW)~MgIlMN>H}}j?W5B68mIbfT;Nk7^k-hQb zP`G%Ae;kfPns7*Psl8Bqu%-$S1pCUUec{qaZvKXp2N11a^Sn4wxIm*mcs$ zfuflVZeEuNKhX(04sGk;lM9L+I`z?!KsMt=L(jS)(wlQg^#a4OGTm+XO3x40#uI%h z-srh%5sfMXir(3-l3hB_uAVBaq>VmB$rF&1Vv0Ti$djRpB7Y%N8sv|9uvQjJNuhAu zBpgFw>6=*GC$^=DE!2(zkpY$!I?qU0uNplSvlGc~VI4%mQ0C|x{Cc^_Z%{npW4MlR zF*&Mp8>D{FtianDZoCo}U#S*fo!;vAv&re%-L&QwmGlSG4(lFMV}yMlCu{t>9w#@4_6-S^(Qv8v)Fn-|{syDH4jA;D~*Hd5#L&LMX(79emS4ovu4~ zwt-euFNL@VjFSeCba{=$H&llgzVNB$oJ`8%_7>w2;H^&{RYeC2GZkrPRfye3EA<*0zvm5s>! zgqX)Ti#T!>Z%*odrLFSB6etqncQj$wh-I*YX%#y zbG_^^CV#4sU~7~ETw`EV4vSF~qw}h&G47!)GRxShL1qT0J-B?{R1a+l=iaFeoYb!U zPQ4FFZ?v<#X)54&l?qqV`l!Y%DNX}1(w!ROf_kx3RFl{5P+7+)I3T}H4|Vk0x2s|f ze20?m-H_gy{a_&iC%pPR$*$$I%TaCHj-u;zx&QI#+Y+GP8j++1_97lOt8`Gpfn}HEFk6~`6%NL6(C(6K{*P6o8Xfk(r3b$7Aa4KopwCY401>vY-9 z?pI>BL~J5mN#CfXzpau$?v;@{^K)BW6h)amTp2yg^n}|;p9=BlF7Z?byI6!SAkN@X zCf1x1bx5dzf8Ux8t3)427UDao>^|^CMttpd_jNgJ7o;Hxf7T>u38bhw1)|0#O(?}V zmvK&IRKXNn#yOR-l0);Q>;$x0yWIS)TC6WCa;r(ZvUiI1e^t_)CFYCsieBzl4Xzcl zpyX(DMRXu{5t(;7o-46QM=#!xlL#fCw4{h)RtJmtQ? zH7NsRk)VnARtqdvPS9`V`#PN?(#*;xW5P~akxB_PeDm({g~gJNq2@f#hc}3rM@vrTAj zG~hoEQG1DxL|tHj6~Bd+qC|3XTOl;bBAMf#`Yxfv*@&qr<{V;}z?006R2(?Ca-zi8 z%~Fp_8Bn?L0e#)j*A4DW^mAYC=fsmdkQjdsPO1&v#`n`P*_LI{oI~LXSj=Zel)kwj zS#PsT_T?^KUZ7qfOpNYciom6Di}5hm#ab1FhH+ON)7QB@~t2FwiPdX4yIHtpU-bUW?XVi`HI?+z`lhmNXqLLg&^UEh-f4h%F;( z29@#y%P%|hnA1p|eyPR3x}%BMxDbAI*&NEUdD;aciNTZhkV1c{P0_$Nl{5IBE|#}r zfwgeh2Kz;fdvl;C?*RF4QJXt&8>^Fyrm9aFB6n6OUiMn~0^-unMr8)$`h4u`laJ&r zB`io06U*edgi$vm@Ud==p)uBPV{^^IIeD0v8Mr5@X~kk^Iq|Yk9eRaWHS4p$jf&+X zFEet#)GaFjE~`ji{lvgC9>)D({1@WM6cWUek<5V1?G?={w3y06sr}X*?~-aV!h=R} zqD{Y!_X~NxATKIH4DJ-MhjflwAtre|&@8>ZnZUV{k{ba&lN^#Tf2VGDZ$-`F{&LN0 z%st;w^Sry}bIf}Ux91xEUE2mX;^s<`37R3BbA?>W61kZAI`4J9Igy&I1m|YiLAIc3 zNc9?n@f4I$;oT3xe@?AF!iOY@oH|T(T~S{mOjfND13@2FiMYQIMcnC{-7~AK^j1u| z37#&db+ZUWgV{T@+Q*QMcyO4OaN1B*GpysK=CN>eDv%?`LX`tfVsUTqlcIx8T%iwP%50p|#;pA`cjGn-j4n;DzS=j~fAEX|Tk!gG!V z@Tze-bXW&T*_D!oXhCi7lV<}n$h@2n_nqrkfnMOv3-@o67W?K!SIKX24X#X)t-K;x zpgSdLkmwX1f0!^BEGMGdkYz;!R9LHZRKL+t)g7LzI+u>>W0aXo7ubg##zH2q=33WW zJ2lt3=33NjM(JGr#%NTn8&y-I?pSu^)_kt}d@lNYZbmgK%Iw&=?$|kZOttr1kJLGj z)E$e&RLwG>?$~*459zsX{dw)wtowW}`rMkibku-HfBV|+^R@2twKLDxy7kx2JYVbK zxORr)S`Wvyp6BbWbM36KYdsOy&O}`6 ziMVzq;#yC{b**bY_iH}aHJ>{*pX-{>otn>e&F4v(@-$M4v4y2PIeYL07s8uQke8XTtN z9N`K8Uan66`A-iD;NURcKb#u6_8z2!bPB+nQx`hVIAo|{ARY-OaC{JyJs6xSGIv{3 zk%JCxlOoc4@IVTp0`(6Z*Jk>~(PQpqPf!H#e;+*IP8u$UTt%KpSgyL7B z_!Ajl^~-*3W$ceJeC33nK)7~_=Mp!{21wE~5(g-fpeqK6#-u=&nvfeSyRtqkipgL# zumT4V2)8_fLgx6Im(d_e6|&w4asPSf`KxbM(6yW=gRU5|#F#CrCRa5{m3}F=b*0o2jJ5UgNGBSW+vHw)T@EJ0W`Us&HKQY0XDrImEn z6?KwarKR<~w7!1=R=!sb+Sm$v=Y^dB>uoeS5w4~AJ!oy{6Ih65$C2I%(S)>h=_hc+ z9XXO;C2YW7-@dzEFxmfgRsy|TTe^5tST()s=rK36Z5ArJW$u)ZcT{;+Uj_ynQn!QU zpdKs`IeTygzh=p=@86%lf1fktD~a`mEjcvmbbY43Aann6u?UXQNSaar4qt%y+?5)As%Q+dE-vWU#Dv1U*@mFUjtt&ELN-3ARFd zNXPHS0#vqMfXd<;MJcyUo7D_xFv-QDMP(D{b~)!@TOQksS$_gCU)2nzN6|)~65r1| zVQv}9Q!QKtHX<=v1n91qoOy1&fI#(k$~?;+xF7%J1BXgro5l@=H4hs$QZM^xqxQXH zdhstBE@8K04%ukq_`JpU_D#W;wNAw-9ef08}Yz@&FZoji5bSgy`tI67ImJ@*L#wRR~{reUkJKcTIeJK!x^dkD2&2t zoZkssC!Y!r7-tf%1196uGS{9=iU?0J#bJ(syvpy`=-7DU=bN4RYEqU6cVIE|hpPJhdu zM0;x|d@aIn4xRLeBE1v77UAS{(u`7gq&V-N`50(L1qcZAjsXt15f@?1MzT1W z!xwMfeE;RAKfL+;?KdyJ{`@swzF)lf{`1e?s)*N!Co;>Zlh8lt3bfh;DOY77`6NIy zQsZnjj1-9=d(py?cD`zJQeh4@1CuSADSzHIIo=dG;x53i!%(s4j{WXI#=0)4q%0B& zy$1*)V%5+^Mu0x_`FwP@jjp2W?z=DPwIoDiF^TlDsAmhGNaElCnKU%%Bu=#pr8J|I z9kdeMiD^!hlD@%3uM^o}ggV+tH|1OJZ8ImPjL4FNK?Oy18V>J!3g{_ByiKQ6y?^DD z;=+wHN7VMw&K(|IJb7j}X*7!VW^4NMBzaP+V}dK);rP&A5S%m`rERBE#wUIl>D_*f z@g(020ANM%H6%er%nv9at7km{Z6ti8h%fe=V)lIm{49dp*zYvvwTv($JqKe?UDc#5 z%?snF4O;Sge)n~dK&>>(IC)SRCw~#^<8m23{u}2rRFxIkp6?&VHerq-yWIx7)9-a3 z%x+*A?$z#HAWG`E4LmrVrsG}+H;4(?qSwT6dsSDz(lPycU01Lt-yyTU2PgFZ)c>=W z$~m&tayhFXz!w~MIrrU~pV=|Oiq8o8TH`On3;Fi&V4 z`3hOfq{q8ou?J*DZ9HQS%zsZ2`M}fe9*l@=b-l6GT^z#zZM>lAbqB}Lm5;Ju-uq?4 z9E0v`9)EK03p&|6DrjIdC>bU^iAL~e5BtFZ62v=+{Cj@MMx1!jFG&RxFX-ZTywZ2M zD&&6L>9~=Jf1d+qXR7$~#iCd?{*ffYx6#ES*)Ati&Pk)Bz5!yTUVpKg++8yX59QeNM|=Wub60B+fhBJb9pyB}#D7FC*}PE%~j zEf-duv$c(;Jton)=#x*L2Y)LAaHEL-oi9KKa&?EJPwe}LkjXc&@LW<^7Pl*{+$BTl zXcmf53W+3xxSUH(<`x7&x{1u?6kTNQN|3ptYM^rqlg?csor^quvO+?(qF;ATm$%&= zvh3ed`m)DQ5Gnt`X3|?iO8?U5Ryj=fErTj9@hxhGR&ZTf7Y#;jq=&an;> z>kRQb`4Gfwfi8gvf8goHE!liqxvmz0c%u8Orej=RUibt5x<0uCUdadFY~)hz`J4!A58P!5-P~JrKTBW#=HllF$in#4GJl(mH z2&9`9s0|D68#OU)nt!k{wHPZ)!Ev?Y`_LxQ%IX7;?N#8kwqBQR601KP2*-HGi`8n! zM=Pg}?&mAF;wdW)w~y$?Bm@lo>{R#Lq%ioTy59^aB*SL?vdZQ)y)mz9ksN)7(ZBst z{7lRMjU{$U)-PfqdfF)zw3c&V_wKrJ|wTqxf|2@wnRj5Jo*H5m2vd?7ovVLH(i$U zb9yfDas)-H5X~(00h!FY;jO~xMLlP*9Z{5m6tK!#i)4zu*x(nlO}9PpdAtFgr7nAb zfo4J^<;^t2L4WMvTTrfe-?1RR1AH771TRc_BSb#IeV@iRKQmnI7i3KC$*}NSuZ-fI z2EpQiSB8r#=HE+%faJ*i-X8Y^32ixkcIjy6w&EcAQ+wT|hdLS2Pcm)L1Q!nrVR=t9-VJ zvz*hM7Jp|zuAx^5_@5WErkFh~;;c;(r&OcRGERMf{01jgZJbo~#`jAxbX~G|vy-DU zNfGOSwH{Lj4-1TGc~nnJ(gHR!muH4dUjVpHKQ_&l)ON>qUjSul&#&FJ)1p5VH9VgkGBvW!>;kBr_`@cSPule?sU~6Pzh(M2 z2^QXy17J4kB-iHqv5={GQiZ^A^5M-O%}}3fkX|TspAXSPYY<8n-y2 zIm2z;LswbmjV-&mjWv{I$ou;P?`idVl9{h3WG9zKUqH^&@!2FlmF8}P!?Qb;<$ofO zDH5n)G;J?}Ak4ZE6B>4sYYau+F{ONA$Q4VD%<$x~0Jrbex zNrW;)UsS302qO*T;8ra4mU&Un*k>E=fcUm_ND2ttNKbG+S)fTwlrAxm;Zy!ryClg1 zf4gjnDq!=mN4c*%_di(T|0sh-Q-5hLl0FxOQ>Hw|**oPS+M}I+7KtmFntzPerq@|J zyFx)V{pcN>UjOgn>fNmQrOnPx|F7|}e{fkCW+_;NGH-)f)aCLa$~%+}81uo1hk?S$ z!ISn}t!13r;dReU5R0cIT}0p_7upk2N1MJLvA@DnxeyP<)~S}=!je;>SASSkwe_S8 zlVhTCI7Vc+Aj+hY8eG7=LXImwbXqhPY!n$s zuc9VpCdV5mgKhj%=Ud8Gk?vgKtIu~T3QhYZN$Nxe^|^0_w3i;JbNj792!8Qpy0u>& z?lw>qh(*s6f|M3sog+f0;D!QNiB~{$BLSJ3@xuAI!>Lau1$y52zwhO|TMCg;PPO7me)2Q`w78 zu<+*iaK9d)IzW|H@VgjPlfr+iMi=b%N%e&XWGn~d@GR83*VqWr1knJh9x_qYofX^t zbO(?IY0QIkcxG1kOSso=Qv>g_rW|fGb~I>N;3iM4~Zw{sS^EQ;lu3h@S*;)PFyLIbi} zIrVgu1q?>om4|x?2lSOH!{wNB&H0ULsh7W@P_V$ZLLDdDEJ(3^oJvp zG3Z4C(OWUiy}17*p6uQ35z#o=d!o#^`%jWRCM#7a=>SA~ch7&LjnDDTHaQoPzlttN zG-We!C>`gy-K4iI>N<6z;|}#B$mE0tSFd=bM+f7uwwlg8Eob}NA!z5 zvoD)81Rf;mGsr?m&ZkL3WiPNNVN_7+pn@FX-jk!tkZg|BdZS2bOn8#I=TDO82o`8Rw9&uOW08hS)H9kL zEv6aF=xuEf`q>#UdiAhb6tlcHj$wHh*95=9nbOhp*Q*g?k@u>!8Rj?nthb6|F|`$P zlT@fAeFSy`>m(?=8K#yx8Ei2fd7HTOgKg&>4nD7l+zS?x-gNLc*bt; zwCuru41mcLN}+ErCEU%cy1IT@U0-MAoV4cnfAK{;6Nnu~w@ZcZApG!=BRY6NFhcmg z0rQ;!Z8A%R#~yV818s6a>QcbOtJAty^%oe(4t*}9L!X6m&M;$-U0(A%sHQ}~aWv_p z@iZ5l$`|CIcL)b2+6x?`cy5vzCrCROpW(G6lK;rb*CIKJ<|Y^6j z!<#4|jj9~m!+%zI}NCMd_@NzC3Ar?A!KoF^T z!d_sx-Lh74S}eNa%F@ejS^8--kIt+y2uRag4eC$^1mNLXV}!S{T3QU}2}`|=wr0(` zoWc6~w|P!3%6D){(Tj3G49r2|Eg9PXSG;Qd*JK&9?LAqh3%@865n_md2do#Ke;@+Q zB-&LVj5!+7Zk><*)(S-AkdW?&^b3+b)Iv%52CwIF`S7WLx7 z(uQLWrkT{rt1oB8)o8IgAHcu-CJac^QPBo{WUF&Px<)|z16jR|W`B}A+3ocn>G0># znY)%|i8)!oialbfq2e~?3^Lk=|tJ=BKjp(a2O zi5Qy{Y81E2o~5uEP@14eQ0WbB<#<{GA%rv#r^?F(oPedAicpnyB}v&6&*ieKSa8g0 zJx2fk?dXziYHlX=!t@E#CWh)&1^i1j`}u3QNN`AhnmigMX26LIklq{Qw*XiF$@y04 zHU2t;0E0H%e?ZiTm+f{4yKupNrzMRe$eZ2BnzuY!E@dNCphc`Yy%cdHWAOZP>6@@q zw6HFosfkC9IhC*ax2xqG@{2X8siVh_OYypE&>F%Az?TXEYP2l7W21s8Xq zijD(~-EYeaYRMfHjI+3|R7S;Sl@?5SA-@TIds+&llfbMte=ZeTo0F~^1#gM%N2Xjv zcS$xUf8#&Ue02H|d@G19QLO1=PcK!vI!Oku*JZM4x^f?$dt_%fy#n56sZv%ZId|zD zrh5gX>oT7!3Mkpy@sHChjU4`$l{Uw>oyk@!NlFzPqbd2|TFb@YWwhOEhF`K+qd zA&wz07R4ofoM*G2FG=>wgwUf=Cnum>9R^x&aRKgmi-Clz>#_vu_yw*&F$D_YoU(kF z>aHk%BAz~EeJ(o?dTA@S^PfK3DBj+-I)$+ryd8K+e?#HZ9bKvNd27n#mHeN=vw$2d5%c}4{ohY{4^9fbjQPC93xi}I%kDL^ae1R--c$a2s;<#Xj$WSm4Zij5MHO$QJI zgvz_fe;n1rwM6|Ucj+*oD9XA-n5KwAqByafhYTz?B_i?#;W}{?|Bhp$*b}eV6J0D_ z^#jv~$EHH3l1q@@Wj|eiOFbm~Gs8QRIT)=Pg_65pi0&7v`|bkR?E9CfGfMYe)f6H{ zVtf6_EkY#s3716O41SbvQxoJ;(389EZE&~N}W|G@LngMK0JIjfkw^5N)Sv6|1 zQc+z5$J)tSnbmEfVAaJFn|s$}_;wINB`rP59p_3KrJVXq#&mNy(kBz^$WEU^SMTDf z(iIjFX)9HAnQq?j{F*e0aN31RwDblYe9#N-eh>*+fCUkxN!o*I$Skn#Qyz+ZUPU7QR@nyYTQq*QZ zOf#j`5L41;x#yA+z5=sslJKE9e}Z;W1MD%7vkjd;-I6#hPs2bVFV+G93Jn(u+lixapvXjdvrD%xPy6a>)@c3E)H64;-D1{ z4%+=XYc3JbKo`}+fZa;Ue-8Mu&6zo4pK;S3S^#E!Z~-#=F6e2lhV=#%oh`D#rk+iL zXYCMTT;4!Ny@j|$oVXL~_`S}SL9(095vdD+guq6~fN8r?mp81v`{anO(!HBSQT{x+ zs`Cq11)!ew?rYj_==ApYtc6Zc=6m*9?+dNod*YHkKRTeMKYy~Le{H=fW=47WRQ+NL zzYj-Z`^d;@1cP8S^6o)2IZWUNSRAo9|DzWhOV_-?Y1wXi5PPB?#E6bVO$yu|d(jgm z<)Jmye}cLbPwo-|ICJSW+HO?|bGAZRuR&o;lT-N>6L^(LptxK|fV3e*>|2{$3hvSb zH(k#{)9p%GhDcU&e?F-O4~}s^4GmK-7N@$_c;VI4ighEglOaGX7y?kQ_5f|w_G$k1rMsSy4J+U&HX_F5wPR5V`|Kj(|}H`P2p?$x+}(h_Fs z(-n{sbx(05iMc+8%kmO^gu+RTI@+k7s%E4XqaRP8w5mike-P8VaUf-)(!s{2Z49)e zY6xmup#llB3kOSd>uyMJ10EQS0X5f3@(>z$fjoeDmXr*Rlo7Uukwu2)NJm}ff)I!jNp1;L)U2g7sqzR-fAjp;J+nx1%f~w9g`lat_QRoJ z>#dia&9@g*&#Mi^LVhK#X1$2q3}k9Tm>L9|jb`fgB?L~V_3%YbK_}f#CpYP zWV8yUylt~3gJU3M2Y zq2_CZeJKmn72eT{fOh8%lp#GOOK0KuZ4)rt{G{v05%#nd8!pqgc0{{Pr?jtrdi&WA z-@kbC<+tAiT%jWsXuLZDk+8wFxveqA314HYf4x+;9*%sAx!YlRS&qq#MW*Mvn-wKd zg&qg$K9epl;0O#&@TRiNbiG?Obatu3^8(sVTgUIEbv>q`KvJy?MGVoll~3?aX|Is) z>XcD{QCDa$l$iMg_;rVD%K!8F+i$vdj=@WRY{&G#d^>%uag<9quEOf8T_YnU+&cem ze?IBXb$z+3||Hk6) z=uArVH?Y*qAGO!Zm+ejJv&8rSt+{MmK^tC9xRjxjfmI1NY#F0FQsc_rKtk_%+XgC9 zg92csj9==uCoN?ND3F3L7H~oJ3Vd6@-9(!X&B3|AEUgt|p03cuIGI_H0=gX+f5{?F zuF@G7A(SI{l8(odk%>VyogXcx^M2p3*&a>b9bHV{NqxcVbe>$M?~--eo9|!r-^Kf% zBip5v3$ zH%Hmy$1myU%cB)1{yFV^v%l)U8pK+^O54+${i6ToYYQi@3UxsL#uO5Dsc~9lAJyIt=EwdBkxP`F`SM>gbDTe z=BS9Pv`6%pAikLLiVvP54R)4Rf+!O|4)F)lY#mD~Jp0_);FNEhanAa$nByypT-@nl% z^L5tz{ICheoV#5j*H}kRe}rZP@YrR(NKcW{JxrdS4S~JRZ@xt}DiIeyAB>OH*QDdR zQTi}gwrP*~VMM4PD4SH3ZA<*Cjr6#5LMYmfDxH!t-LKUlG_8bqTsbn7LT~jRT5WpX zYKTEle&J;6srQRCkk#wCmlueCv@DW_YE};Lqx8>d<}lhu)<) z!V^8#S}2jo`8NkNe8b{$+^U6W3fZYDOVUmPb6Tv%)}l4{BM@9#)9QhiCYl~Qcd-tZZlApk`+udaK4alDVBm+Gva zHu#r>G5iaKF(03fq^3@EtHZ0C#{2;UBjx+|Vr#xDZgSLwdD!BUxpx!+q6vKiNl*eP zf4_hK$#1?2C9z3B_~Lxm+WiUhFe^A=S3s<+`l;R8Sf9TQp1)4)ZI!O}KiO~k8PKwD zx4>#m7AY@QIKz3ZCRZtc^Fi7KAYCQ%bk(;@n=X&$)1@WV$dcc*PW3$aboh1ezOED;>o)!j!IUCQ=M?B<1cja)1b*f=ulzt`Sj1L?nA6%XA$Mgbor z0C+0i>E}h$X5|d`m;Cwu{o%hrIAFB~A&-HmFW}6lvpqX+cQjbUN*Rhj~f295Wg9Wsa2P)O%f1jg49DYr=0b(kp%2uO zl05XEjg;^K#ag?6bE?$g`!lMP?O!&xhaWJxhrjFW;-wy%VG=p4QXy%`Qgdp1)&B75 zU!L|?`@=u|@h@Ms_{tE{)-)$JpRI10I#E&4QBCiCe$-Pl4# zpCoz5{B(4-Z;k=1`1$GB3A=!>LnmyRjt6D{?ImE>fJbYXM_Z%?61X$`gL~rfW9}z$xKQcLgnk2w)4Gts{eQE;$K`4y=HyJBQ zv9mE;7}(Fvu1??1C1&>vvO+_27w8=V8#zctHinVLH}av1HsBfw3o`YK)Ouwp1Y^WU zB@d8l!Y5V}B6hGH`cP4RI;a(lSwy@+{%2`O*%FVP)#>v zA!HppjirPq?Z55fO+mQJCx%o@Q%%S{ISS5N}B2$5ma8!aG9zS2j~kmS3;fo;P3VE-^&B3aHOqs;Y2enUkn=t zTp5n{8evK!6x3vGQG|~`4CEAYnWf|wbvCa*noVRLvUR9Kej-s7Rj*X&c z*=LR}RL4lGU^C9PA@+=d)q#jBn2tobxXg%uteUpCSVv(@YgxTMY6D~EXM|1?R7qAB zj6knOscN&uSL!TI5!o&{a=sbJeY?|B18?pfI|l-33rMbGy{rxnC;9^jJz=DxdlWL0 zTfQ29LY5Peh?gT=Hx}~1)ipA8a%)<)$lH|(Wqth#uNMVlaFMQNV(&43=r?(g@=T=p zYHf0?GL151K+ba@=LCC$cZ`~4A|3T?*pq{WVK4MRyn-)SiHl4uMFA$IH}(ddL_Hp2 zF5H39Wii=e7bSV6>pW{#b^eA92;f(MeS05&3A-Z$<8~ZE<`%9(+(POznZJ3C&_89` zC>Zuq9kDO3GRI&`Iv{CJ^RpiRR;jUQTsDCWNds5@AhibN;1gx)8{AED9T-iq3Umo; zvxBARoqW*du0nOI=M@i02JEK18=C$Bq5(NYzyY&dWWXj;g3AQ$aYd;J7<2)AU8ekh z;Q(*9IG6!XIC6Y{$|U6T6IC$7oytzDaCl+q4II*< zw{1R06U#1AtjucJmEZBYnm9K~7yJiWKP#{b*p|G-aX-Jj%4bRwB6Pfoqiq`&y;$*T z1M^P%_ClZx)X*F_4%5cFZzuu5vcDmJUI96@4giwQT_V zO~<0$-%NNF$;NnG@Xivq+tvw$8YE{8=h=fimL#o}lx%8D!gr9PikvlMo2)#{vLvNo zls0h)9dT(|%g7MnI7ZFlYp;L`DY>=no?6@PNt~1Uz#V@&0ntss0EpC8f>w*xir2le zFO4uO+Qtf(Xc{O&X*Cl2UgLs^P_OavB>4(8+9X*M79TiQEF71cgmcCQg{)GW3Cv zY#!d&M|6LPyTO?gv-w?UO(fM-OF+wWt#M02vmpl9knlPqmIP*nr_d1Ox(BQy6Amm+ zLr82NVTt2tHzXhKx|<8z>;h()54NUPN{k#CPyBc}|MU`0K^#v=o78_)F6Kn(O=G2Jp;Kd|)~Mf{55k1P z*;|~t7Y$xZ$8NyEGxrpjj119&*)Y658+2l_36&|>-7aabnxSzoBM3e?Vu4v(L3%o+qa zb018O5wGsa1pb|`VMe$RCrQ5FIEZ|H4JVVl-=i9iLy@DHW({Xu9l$7;Fd${jY^+y- zZUTQ3@u0!Z--dZJ%a-|1*9#g@o?+}h;@rW6u^4OB@2gW>&3M;gVa$3#QxDT_9^G(e z7qO!{U)rkkK)9Eu6;H3=SBw)1&o`F-q2flBpnJInXJZ^sU~x=0@tC0nr(CCmD#F%6 z9W7$u8K)`j3phlL^9`L6CxK>KTLKyjTS0&FB|9wH^6XeFA3KyE4G-gvb-UuFQ3h9N zw2mgxd>wVH&Su|{8%~=2YPZ#fOw;C7mRn2A8?a4RkHU%E*o2T^A$cNqbJ_RCvQ=ZL zpeEsL+;1JsIgVC=(%Ni_&%IIYm&r^L^X4zO>}pXd?!^wNKBaU?qaazTH2 z-#y046)EX)vf=lvq1kC%HV#B*&%I`bw9=s0LQ%1`;I%YPN7{e`&XrFNX=ES2tk&1Q@Vy4BLSf(VucN{*Bhi&!!dV#AK8lS3M1RRppIEJ4fnH$xz=uhTQjJ?Jxz}788p_OBJB1Y>dD4r6AkD>V`H{j z^3r>#pd*}twEm`9tYIffVD#GwOV>e;`K_m7{7CpZb4~!Nn(EptXts` zNr<3ekT6M_q;Hn3BFJsY}mCX`32!i1BhVs!dprOETM|4 zE;UO|N1J4IeZ3ZI>s3{=;){Q;x)LYc7_pzFW>lHn0=Ax~iOEH&m4ydDmtf=}f*7G4$5qj9OCit*rvT64Vd&Pnmq_N$ ze9%yUyT+}gF?WL;b&89|3Q1h1AN^6NkHo#9Ay$6?ea1l8&LJzc@&bQr%*R3$TW4O) zR)l)a`&6#9XjzlT+il6_#XG}KHa<1N&U<-PEciW(xAgb*q zWtrDsy!rYoErFVdP*zG+aw+|APm-z2B8mQ9v)?&fMT%j!^$}RuD$^|Tw$1C;cwLv5 zsnQS4EwDLfoV=r1L2G|f1GhLuc|-C{iDB8~^}FmGmb`S5GGGPPCKvvZ8P{;613oY3 z=BLmvtuN1kj`&kD9{(jdeD*9E4WGuqp*Nq;i&ZBOD!(QA;~!H;sO3u9KdjU0zkg$s z;Gq5{{}p%oL`*0K;mlw_^PU3aB)+OM>iy)Cvz%#w+5h zY9xgzN5&OQe{hZDZTx$p`>i&VWr5E(_Skg2CX7T6s<)Q(2?#Ea@Y zTaZLgLb(Pg)2X4h+A-l+o~0>9!iGNo;oh_4p-=zH5WRnx^KBe$4Ce&(wo&Cc}~+_}Ed#pELC?ju}gX7=;~H}G9Z zA+yUifK>ej&1x|;a2i^kE{$SdWld{X7YKU8G}=HD#d_cvYiuaCq}i-?IAP{#r&Sl6 zkd|KC%)`qXOc8yt;cSB?P--%3TEl3Q7a4hzZObWtu5H%k@1SL=7UFhA$y|n^qiyM< z?_Q48kKh7Cg#ht%pIjLJ2D^1~ob*a4k9CFPWp zNmKFrc%PdW%?D$ysZmL$6mKOJc(xw~pLe zI&Ix5;HLNgN^(q9x0Y;oKVQiGPcQbi0?~n%_nNXSXgnPB)kZDak6mHY5oNW*QMTQ+ z4OskOmv(eb?+af!U7uejeUy}g0z${T+o<(_T^lw3@zXBIIGNb&Y6m^@U9QJ)jV82% zXXx>8^9W^uWQrFZJ>X!r-Y#|&lGIj??6*w2y7-v0QJVL~Q8O*JTL~3tB}4>YK?GkE z-=fXXRO;f~nF=xiDy!YXk$m82Y_*l?XC0;<{TjGVpaGp54Z5j>x)(5FKv+VMLYzN; zT1+nl1#IQ9FT&#N^db}#oX=aPN?K0h^FrGS*kK6zA^N#_(b5cEXy@*MG3ubaXCh;N z3}bkQE5adbJ1#H1jl7$rQB(o-w{`}wK7%2cR>xJE_o{eOrNTGYDy=-~LA{RYp$X~L50OuRakwJLRE~N2_D&lYK(a<0Z{-z%@d7xg& zH`%6FsYkp@Jo0Mo8EB;nG~DS41OXW(bxbr+0Xqe(Xreb8WQ&xTE@S~LCsw!D@e-;Z zzZp|Ved@D{zolt73&(n0&xkVF--Khwp82Vh{!Q7ssn=~?sNPEIQ|K@mYdWZZ&1T3p ziY-K$%%!~B8H8hDn>%(?7m)XrXD)#a+u+y>>5?+qW*lCZU-(x(v;sXuZsX#_h}5VZ zr&um%i}jY{9~$J2JoX3UcW8)NozoKgNDQ<@T%M-uu4!{rvVL<|X!oKO{G(nFg;iUC zYO+^A@UVtdtOZFxZL$NnLqnE-e)lDe%%Yeea*f{X%YB3?b^}c4D1l6n!;lG`=D}jD z%Cy{ZdDK2_BUS+p=IQ7R3LK#{4L=D8PfHQB^7A-ZrH!ZjY$~+-U5gW8Dp25d^~6(Okdm7P--2+anwVB(Rh)Y&|cVLg2dstJA06PMk=8$Yf1Fcx-tk z4BE26(SIwHA99m2V5qJX12!ht^HNeK&N1T(53oQ68)U7frKd~wq^+heFoo#D^AZtceoVtkZTt69R`@? za7*p>>&E^Evwa7>;=64AzWDA6<^}##^Z4KrCbj`G2?qNzgIgb!^y?RwP;+cyaM-F8 z+f=<;kxo9&dWsmWQh)75*{ZE(*|KPbVoX$BTy$k5ovc~YkRnxow5*zf`0BmvydnQ* z(>;6|+8a&x=%r|H@E7<$)aP;=d|u7hmI_*+Ix(vLn(+^vKH-dh24esXpNfg4}XS>4FuKIp_@^ zuqzKuOd8@bOF*pj-=Njs-ar3p`1|zjq;l-(vTY+K09yh*7(? zx>#+)i-bp7m=2i{(g^qz=Y`Xitq7k(H8ploNGp(PKv4Sr;_BH(=Zy5_SX(d}&y!wxj^m~k3Z5f4LI zAW0K9?jZkMD8UIN)WWvsb|p!%WIa3p<<#XGN^|DPFzO#{(_a(|d?-EnjlRj_LPop$ zK)vnwLSsZJ{)=9mSYf$J|Eib%xN((zHq^_1;`m&pS;N#D2=gT9X!q}~0fw$7?&T(6 zi5#6M5;@D^)KRm`58RlVTiVpzzsl60?uZngZca=cruHVS6DTgtGJZ-}Qh$z4)ZZt+ zXuq}cC%>t`VTw#VkV_b99YxORRFiChA^*OuviXX*(dmL9UBex=#I9Qt=|YMrv`V{w z7NPwbnwqcHV(6`uX2Z@dsp{AKsTj4cf)VjZg2AxoD`I}?U*(e{e>y^Q{+`GfJiW?A zCaTF}iH8Sac>9Da%bxNG5R+aOls@|rjG|sH|J;QtBbb`lHVM&dl}O6&(Sht9D(f-2 z!q*x@SFCTvAz*NoE%EkYV&URHvwC%Zj`{eC~3;Dpq z9ZfRf1_Y!-69y^3eNn@qnN{<@g&{v~8g|SKcBHw28MAK8D7CrQ;>t#pmU8`=J*+v% zURI9W$7GSceH%SIA3FGZ=(q3$;XxB2ZrQXSCw4FZYF)5&1A8Be9y2)NI;)ep*HD*B z*gGVvC)~&LUJH36a1DW{27&W`d_m%A8;Rqc0N&X#qm4Ub=v34UaTC!WHOG2p>q+mc z8$mRukCwUb`>;7$r=3gJK@jHs{+QM}x;j5{7d|}9Px~WLrFklySijeBO)1ymX_pM$Fv2c&R=$jHif16@5G;V&_+Fa5#)qt|80eJ)$>k&CHwK_yfx0BXT)`W zIn8Gcoi$5xjqVVVa=wyRS$k9*u1u~j{LtCa^vP9zH3-KCSCgy$?1*m|GP+wR$xdWw z-5{VYlD*x=bCzhNJm3T9VLjsRZ5Y8hHQ$BJ3$^PoZ4MJg*B^;DM{E9wo5txEPU5CV zbE479DG8tr=9)c!ZMq<`ynza6gelHN@ea5y%SjRO`u>8vYSJ`6WDA~G7aQUC=l(XT z2eT=abdy)R^tKheNU<>6s* z$}IP<B609TgHyDLWo9tX#WaV;~1OW+`!1UCYiq8i{iB77x z3+2ap+taFl^nyU26u2uTzSmJ)vGc-CMGvds6@yw zERwGz;HXfXTcLp$<aL6VUvHo*)bIKvkSnKNid6Op>UvKk>F8&Zqr!ZD1jVcc$&2r$kwp5?LTN~mKE_ai zIWmW#6u2}CT!zx*MEY!n%G5;8Nt59ro=WSVI|*9{rZNsq_h>;KA8_5g25$vZT=pHbFy+g+FS;4LB! z3pjDda8dO1Eir#Gwe8S%&AU3iVN(2I*{(<*2TR@^mYl#MJIZO_`1eQFw%InGLd4?3 zqP8woGVhhv&iO?}tvYUOdt3@SfEZv@Bqch3qA^#U4m4vU$?9!Hva)J3=@3>p!dEg= z_0Oi&?BQXNqArtSMODqll4x_PI2bFJ?C3LO6oo3q#8>8=C`BziYBa1N#_pqy9i1>N zXX@vC(#%N)sgg^Eu~six=KK-mDX#a>;n8vb+;JjMX!0>MmhPc4dfM$Kj_9op9ifbW zEJSc*l(y*toLV`~b_?U)^8G9lQZ#p@;c4cw{EZH8b^hQb(PJRj8)Os@v!;9I!zAKe zSzPurEwu%!V|~bui@}opibCnjOJa{ zR88&YGaZIv7Fw8>WT;LIDI7bQ-d!kvQ#_Z67U5`_!YIc%eF*I3@ko;^88=E6P*(`` zxS*pcrv<{0A!s`tm58~LU{p-36}%2MdOzk>O9rge>7k@98B^}POkyvS4AEDX;4>@M zd(@YVMw!;RPz|&i_XN5;XQqQ<1~M`O)oCs6^q6=L0OcjdMA`9uPbYG)AvAA)^{PeQ z9TkTO?VgT`X@-22#9MySm*K`dZBj6aFe!{*stJsj$iyY1;JqWhz0IA%P&gn3!dcGR~)3T=srUg5arwCznZy(==ko6{J?>*jzm z=5o40jLgyhooIK16Rn9%i-C=QPyr+wFQ{Uy+S~EZCuREIZOT1naSHkP;SU;M0Pn-f z0s6*=xuPF&NzLr$#k%p{vZ`x1&v`!axcKbZN%ZSbSSQn3aSX|me_mX?KacP)F*W6# z->-_Q&Xb!oDhK>C#A*?(O{3eDG_)OTyjR5{@?M=?css+Yri?vUt64yQ;j?^REYLiF zXx^al0jyAp%|i~7aK|$jNu8+12&fO4)Z2<_S{@H^UdkY@(UJhzk+xZuMX4HzqytFI z3#bCP!bk*zvls8)zWs3a^5gm0?-OQ7M(kDOjOfX{$n%uX%o6QE(167Y8oUHvgg+52 zek3)7Cz7g4uF>iyMB9*mMbF>q)BJf^$(u4vB`fl>@?b%L`A8NoahH}#qhWCV`D`R5ZCIGy>Suctk zjG8V=gg~Xu2)5 zqyS0gbHpWW2$g{aBN7rOZ0JvVv`a_ZengCH6c+Y;6g?A#SV~f`5fdC}jBp(aVn`O} z|9*wrf1DIU10qg;8$bI0xyrAqr$?dZ`I2+}3F_XFw7Sf0h$ix0$Yh2y0b!9LC1EJ}=h8{1B)drXprh@f!O_Il7Qh99WOe<((21jKuoA{M}-WKQOC9=)SvA8d_e z-O~0R9=KzF8(4a>IZcG+5_`;~=fjEzg25ZcBtr|gl02Z%)Sh>Y&-B$Ghrx1L2S3qy zO-z52@30bBk~@^#9#AB_fBOo^H%)G0$4z0=k6xqackAL`@6U`r(mkCtb)YEqiBy!? z^*MVmirf3GSg~=pVm7ek-Ws0}!uh%cFr|f*-BBtsbB?<``M0(2P9XX+3Rp0hy){`F h){f;`us{p6qk*x&ci`c1!@(`@_HD2c^}Ld{ev#JDCB6>Dv9;ps3Z+*qBh16h?JsGHHS5#5vxPnG{(Wef6kf7{k; zMO+ON(}>vjgMTb@pbeuK_}9Cc@Bw!#PKHP0>72#i6JwC>3{-{il7U)q{?l!Vc;y@B z>7PO`KCOXq>$c9Y>=^g(|Klj(o9Q@d*c^}~HkLDC$UuwE2t^0NIvDORzA2#vF3hHt z#+5;tFv@3s)NRJb(-U;l^*qVLf1qC}r_yfDc)6a5M`uKK_?x3~DuSU?!fe{?r-;P9 zxv>}~ZfZ_Xg?5?lrHPlhso9kHr8eE-0M&Z_{8U+NiDpmRlo;n|0LXq>=jgc<*mB?xenm5W#pKPhB{CW!{JX5x_bQ=nfGnMHu2E1G0g>}yB+dqHI?-n`lD~NIlKB$sz6@5hs;~|T68T%zVcM2 z&`dZ!l(;&-gO)Q9sk-M7p`Q6V!}JPE^k?G%qhRz~sh!+o2cGAbMak1*YEX!7A>w~& zhm3{Zk<)Q<0N#=lyOO-Xkq5hSxPK<-y_*4|pO@(CaQF!X5X zOA3k9bluh~(N5!+RW`5bkXzMe@kt}S;5fajz23q7?(B}Kx6!;r9u72Zm;8hVV}^%# z*X8NFx>3S1Olv>~^~@@@>f5`#ZrNMSn@Ut*rA%bGNYZYMuk7Z=id$Q8YkyXjb=qJc zE6Mvlncu@dOq>h}VFW6c@Yob{>hh2dEVlQl+mn$cSvi%Aab68ha+!>=Mn$9XrCmcpR_69!XF z!b9v>h-sK99tm&vAvW#J0Do2f;m3MVBj9i#)mWw)bE>ICjr)2pN>m|{{D36*VZ#59 zlT3TDS{-HN2|##z@rPO#|KCs|F87H3uIcZE_`cxpINYz5Z1GC;YtWbY zx5VIplt`QTArr78eS`p`n&O+B9l}2+fwS=*gnPEAnmjqIh=JHcHSf8=|mloKJo1 z@-iU%Gdh85lWYhyS#oTk1yf77X+M~9&Cz(WT~7{w;b$exLdWXok6B$Hng;~c)By?2 zfxs5awzvk0$4UUpCE;D%hZHv0@RwJs^5-3H?MC8{PjFyCy;kKrFR5EE{5xj;oe7ga zUP0<)BtsA~1D_dKZl!b3997z<>&o0@WG5n4Q-KeD%moUC7bAq}8h+pO$4uPtV+|if z;q)eda;e;E3zb{JQBL831xb)xif8*)B$$8CW?I6TShf>=%yy-Z*}t4V`h5*hO2n^n z^iFbD4uGEL>NB!k=tt;bkaSIegNL<(2tf>9hwd|Z(TJs3vX=%)uF&vG5;$dlcn>bz zv2{{1S2FEUU1*^TrMsxVvySKXsGPQP8GHMGgwqm01HVAj66V=OaJH?9RI=E#ovPv7 zsfVaX&g)vtv8&AXt)9K|h>mBBoJBOqt=iy_vMh8ZISFnQGxS!#cx% z@VYIhuDj93Y3-g`-x+6e72kPeS3|$Md1B-E7CMkS9pHuxJ-KCh6Xtzg&;0EK2YQ=6 z)3dn^gC(gMq1%2pR35EZ=}vlSN%KCMA_RA4ZQVa=x_{)rI?4ast4D2JJ!*0FNJ=SD z6FrpZ#Q|BM3C3&Xi51Req#KB8l1~hO82>(e#%5)msv6#%*+EC8sU}TWp$TI(2Kpqi zrsIuIXreM0+SL+Rh{#DAb;{no$2DC)VP9<$1-X^##Aq~S!1}V>WdqF6mSIrn)MO*O z^?eERR-_l>JTT33^!M1jsmQTF*|TBb^e}00{eVg0f#3%CH+|DU?_LH?lL|71%{sV@1M2Z(lSb%pVXz_T zje*U_?C(pbTV1ruf9wCW9rEC^RFZr$|1@cbRb5=75O~NT3H>?oB2I+quMS?2;W3&C z>oE9KTerDFOinh#Rjt5XEZPwtx3nFrl8h|~`cc?VAW8q0%6wA^J6@G*(v$Te%xlDZ zlD%t*U@DGam7oSv?)vFKIe{EY`tFlgA`zKiqA9rY9bda%oC$nXf3K~9uPyHGlA_^e)5^nlerLRr(z@qJXaGDq=&EO6CN+d1u8QG-Xr^YG zU}*=4i=&i4{3=A` z8ON+AEtbg2AnTTh0bfgzzhvr@i)<%cCq+J|-+W-BzNT)GO)ocre;MubsC`oFyNM>U zM9Cv`rQ?MC6bd{+-=;i(HZO#f!DWw1pO)h$wew5H$t*yI0W~;=;mQ^`SQGg}NNb1y z;yW|%k>EtZ=Fb%!lMihb96T{>@0{1Q%AkIo*CGQUS*WsgiPx=>36ieW5tBe|H-B9} z-x6qBH$Osp47gxx+v|26I8{pfR6&x9`Q;_fQrM2ATd~lf0F^CbAW>SV=`0;eFzsLw zr4dz~@M4}+iQtoJhdrt#S0sV)o8ir%=JQCx;y0*@KmtLrDkm#A?Zm2t-|Hm5!F&m< zchpHB2CLS573XcQ@-{q!Eb0(AVT@voC;xE$MaLrr0 z9`4nhDXn#v2l}Csr0$EXoG+N7epOw1@ZKTvEA7~n3kpSEr51!sse!HuY8<DI@$5nKsUH_VC82IFT2!;2@%<97{6Dd`K?ANTA9RsW=}II}%!yG9BU5cI<%B3B zlGZ?Hoa>6u?@5hSE(;FOTJ$hM&-bcvf?b0yqE@9Be!@Ch)#Jx2^U%&9sT%4x6`!em zPc*Q$H~?kTk_)TV)iptd!M6IUf`58Aov(^8D8vZ_Kj=CaDrl+%1XLEi9rrGh+IYO? z;UkG2#w1m;LU2J^w%=7vK@zn!ccPaCYhmujD9BUM1TI3U0UHA?j>?t%d4j`PAS0Fk zvdR{Vb%b{X_)q9~qJHJNk6IWPX-^@8H>Ubvyzj|k`aP+3u_fhCa7*&S_J6a33uKYp zQYpOQ1uOW&q>8POlPFmUF#O_}x`lqB9~lej2bQIh+s5M_TGHMebhI{sdw^G6JfULO z8;XUaeucw!&^2I5Z5K?fjwf4Mv!%>XW5X3qtD})Ck0Ls9Y>0^Xx-kg|t*oq^F^1Mz zWs+bDiOR7dViLEENl1ES<$tA|u~_7K8-=N-B$OfX8Vu(?i^7aJEk>hgQ{=XPh_9%k zC#Gc1{E7{+oGE{U*|91+aVuM^%1%^eYqPQwtFjYOS%K}0pO?cWa0#%$j;V?GZ$DLm z6MO@UaA$-Da1E5 zq|Mh%Uk43w`4Dg;DDR*VIE*Vu*jlM_H%XS3z15)VLn6GO#M6vMI!mAaan#RHr&Y9x zZY^oXi%q-~crW<@WccBX(x$nTd^>!ai)2chG94%4=L!D=o&)Re5w~E$b#4U>RhAmo zYXNyRqhqQjKb=biA0$D3wt_!(?CWFLk3bfFERKAyd_FoJO$LabhEvn4`5O+j1}T%! zaTfueljw0s0jHBOaw27yh-s@WsK&>^n^lX}ICu|L3x!n2e8n)h2qMB+-izHkn$#Ra zg9PI)+JQ*p-U3?rtYm0%(KXBJi@&GQE0{8{vNke|xq2CKBG!0Q>W89e;{$aJMj|oD zd=*=SK!h7o)2op=lecm)e;}zV$`w1#bpTIjUBXU@S&reLlvuI$yHOShyNC(b(Yd}! zfTWhL919`7SH5-c5-nKixI5d=!j@QEPObG4w$WXN5SlEqrv0AQnA~F6<(D5LgB*AX z*>8=JxP|XtT73Wdx4z~n1cdaSMJH0Y+bJ_=Y>&mA&P2Df5qJ@y!0zv`bv-@ zmwt8T0^?U_&d{4N>OH1=QjFxWL1cXm2IZo`DBn*N-^fIka0h>H_D!Ew z@Oglao~M3mPK&hrw%Ps!3LgOuE zc0uo4p`@BMP6JH4@0ZJ0#|o(N8IGMcj;WuVSc|r;i}O{Re=9FsJb-*<-LOapM;;kM7i)Qcj|f0 z-08BTuLA0tFS?#rw#OdjaM?#n!van7@aALhO8 zgq{d;?-gj|v-#!?K{)7Y#2v_hy%cXTxpkGG6uG)QlVWu;XUOexgTj7Ja=Zkuz2`gu z!3u+b0D(ExjE`xiPcF9>{Ur7uZ0e${b&x|+wk_x-(SLX}J9;nAX3CL>)k@@&KP!Nn zLTB8&jf++V?|A4IYw7+lux7(h5MdP*z<`w;wtr zaD6X!dm?slcUPPOJ#Jy66EtUDx>?{P| z2EnmBb6sdnw+Lgzv=A6oa!6}BHFk(*E5yN-S_KgzfhXdL%7MiGjLKa9HhwndZ{z2$ z`nU13RKMZAlipqve?w5CT1`DUOwQ}c)8zVm@=0>Om^@3a7n46G?PBt$JIBNVIRCGT zrpwQGqtOfPQcXgC~gK!f8CI$bL2PV*#MXdoUdML z{xURLm3kpV%xM}ym<>w3kj~^kEK}z@l$6(aYJY|jiiMIo-=UwZ1~h zycLsn#&nJZO-kwq85zh!uIQ3`NuhiYtsdS)I?3DyqS$$3BD&vIAjTPm;HS>0o7t6J zr!Wf9fx0Mff26uf^b#5cdvUsan!K(uDbgs1zMXD%;4qre$QeB9JZ%*zmqx5&i>{WD zyD2)!d9V~B%Q?cLdd1woHJwD}-Yx1Zsk>1RL5sd;VH=yKXZwfchPnP>xp}7Rk22GN zQXVwZU9EY@h<>!0e#kL*&%$<`X%7#DZyaz_sD9;&e`dhKF9?St2PTeQB7~PgKSY@u zn#D^;>wIv9tfWl?LRP!}-T|1{rtiDuYWnC=kEIPo11%!!5L99Sj2c=V_gKRO&( z8;*>z!v%Cr@V~wTYy|333bIb>;SD}Kt~;aG#FupJLWLTko(PLZ7;t`F%@qMJ8llg= zSc_PPf2a9j`DJP3(Y2*b=h>|7Gi_6;Nkbl!SqF|rLVlzqMDiiz8dNX3SmE)A zMrU|=%lYh@_hQ?vj1a3`SM%bc@Sfd8A{86!hg3DntWEioJColEeM+q=8P+0geJ#>p z`N2?B3e`51;cVKhGE_jqPfTe;IB;#XOwk@Ae^``hE$oz%GA25!oQIy>q@2Rshla!R z-FyxQbU@^jUezI%sR+wMsZcd)om6VmYFkBhLGKCqkzpAwl{&f&s5`8#X~7zG#Yycu z192OmBm_jFru@o@X{M0mO>v!9E5i>{e7ow*dzU;LS#o4L4kmbNs+FGPEHuOIVkDw8 ze-vdiY}P&xoajEOATZ9WE;(WVrEyU#-@w#azzPs%VkNl`a~<~QLz9*C7iM5+_!jAQ z9FLstjw_-NB9pe*(AX3k8%$?hE5KtmC<(fS@FMWL#fP@rEr)9FIGba8nw*(%#duvk z{9)PaTA8wyo%aMDQ*@p&yFwvIew+{Ke*+b{CU7HMwJlj>j#(K94&V+>N9xW5Prtyu z{r;z%Z?kIJO~pZdouo(_iS%us=4q|eU@c-=8ioJ?179EpWqj-?LCT}hA!@hz&7@}I zJOrwu2SM>V7?iD>LjNB53@#1DE5*w=7E1~2zKPjj*C@_xvS+SFkx2*NhEM}Ge;-hi zJewE+Xko8N%NpVRRSd9Oa0+Zxh`^q>l#Q;*X~TE+2rHB-u5e;DU^NE>6(z(ET{Udi(S~lB05ZkQ*dDMcTGx3%dQr1D2O4eEZIFPkStwE%bd*MtO*Ze6@Yy3!hQ+` zo<#9&WgVf8fjT96SPyC@h?)5B?51LmOPz;W|M_HGV+-fLhm%$8V z!Sc-07NOJ;IMyFEIB0ez)gF0I>=-(jz9d}X=fXfSTyLTb7~{}b3Ry(=Q0fF-Bl(k> zJg@4T=r^kKq`S`bN2;@DkekKUHF-_@xVv~2pKBEl_sXu}-Q-l+fAF_HadbdC41rXL zP@9+@dqp=bP6P&Xhy8a_g`hxytUPLfT4+^lILBc7?0_0V4Xa|+qIzgx--(@Rgs20n zVmw}f-b@&W)yZbQHA*B~S6t^o`GH+J}bf_R!7tUiGVz>XHHwFS`W~*l0b+C-k7+L&e9d7XvX#4ATGJV{g2{okMR>&&rh!1(sL>c7)Cv5j z1s6Pcg*kYQ?wgPZIvxAA^t$DUKssbc3UU7fxA6>}8t<}dZG~VxZnu0QO!7oiez+`& zQ(;o_f30Zi#5xAucqjNGQ^^>TQGSVQykXo7@#p$0u~MVt-HJ{bM0b?X|6-JeKp#HO zX428S-;_;NZ7BIp0JnBeywmNgVxAj)rcp40oZ7s$ZRyG8ymPo>w`iN}MBJHx?DuCZ z7F9OKS;qCU$eV^dLT_4HG6N%y4+K(qN9PJ^`Rd$C!1v%+NeJ zk0;WD2z!_}>=!Kx@HQ_Ou;)to)K-hWH>M(L!QM76g(5B;6nOgM%TsB21-6rPKEmTE ziALY1ZY*zGrCzG7LW8-$0oo$w7wES(TeX12A_ zZIyIHbulpB?DEJ=WH;3;y4FS0&qvu5Sn=#?}gFuPtW2=)X|-Y((L9^f*gKf89m9Ke-dQS3i=YU z{ zL-%;>YmCd{VG_IKZ&!KAZxWN?CnAbO;;%A%o`UwMXOgcoSf@8!#&uCrDz0ES8YlYM z2WLruHQ-Ny=sBQcW&1Stc|NjAY4oo|(1KNDaGz2kpZSJ29~fF_{eWDhsW9&M97-XwdxMflIj z9&Hc$_he6OKJoWt&zXTep5Q%W+3Y!sX3ttLd-g)va~H@S?Y}*-e;@a75%0;ByvHkN zj|Xv2Oy-`mqN8C0Cn+2~V zOW>>@^*C^^5DsGC0?`g-DH=c+T7=1>1Wz=bK;({P^`65dzjofwT{VjWIxCjGg=D=7 zW(v#aUserbhPT$if9d>MI9&DbB}^XqwRAD4a&eBoe=l!gBH)p_j5!KH%JxnAKl-$q zuX{3EEPc+EuCFkB-D!iF9i%BMlsE z%&r|MhlJK(8^EeV*3Wj3$Lck_N#t+{i4lwkUS8m0B2_jOe?o(+^P%3CfJ?do9)%Fd z_!YD#z(*KAJeCM~LOX~dL4`IjQj6okcp}Zx1u&?NJ>gjFT-EWujk75%Wxx61>$k7I zfAR9om*0N#_Ombl`sJI~_#Qw!0kgU&AdpM}4}{Rukc@#5C|uBpS1x)@z{@q_l}pBX zi6H_Yy=TgIe`Co*h+rYug>da&lQ*XNIg~v-_Jia^kVk28=JJ4v?Pq*A{^ymQ7oDaggVcivm=(c#o60TpkqDHVQVg`Z$Jb7r-M zZ0AQdnh#>=^l}u8onC>8!4ugl$(P5H9pTD^e^lecf1L?CP|XAdEB=DQ#D_fd4XX3_ zvFTneJ^|lmH}=8Yma5hY;ljxHORfhPmGXCTJA4k)krDlaz}k*Oz*M;OVoc%3;PhcsV@J_&FK7@Uv=WiD zK;cI&zU7#~?-c|^2nBj3Rz#$BO8}$R1OJc&PlebzkHzLgv_a=G^1zS!H68jz+=pdJ ze;;f5h;jMg)Qpa!J;4iLd@f>f0Sg5)0iTC|5X*Dp*fVoW)uc|cZyQo^M zDds7nYr13f2IIXE{Ez;P_oxLII^Bs%$H_Q#Y%Z0C;M}w1!W?#i8HNtrVZnW!)jx*- zX->~9it8WuNM^|JPI;yk5l|@8(nn*3e`^{%==~B@RHzKGi>&nWP?G79VWT%B?*IsL zUXqXgFA~47KegC+jlrjJ=O(FCEqoa*GONH0!!ju0&*R7Pg$O?Gs9n%bI{tjvpy&@r zLe>}ci=HABur{7Yv{AawpVRz|c=iD3r+(5A0;O2Nz!*$CKD40PI62m4jZZ-kMj@jt zG-6*H5uezG-$ATR@g+TiTd?A+2V#EJF9Y%uBRBZEVe#)l|>!Dbt*HFV%mHi?#W#D3Dq`?+!bWOwc{4Fz8}g@gA} z>=IZGX(^u2+UoLhBV?T6BhZ-h^Qv0pSs58u+&p>I%7-~bi=#`j=lj&~sYe9gSS(c%4tQjqw(=&d(1v(Lw3dB?*7SR=p}re^_iRvJC2+@ol|7)~Y8*Mw zRGQvhvag_?d3hY@80k4ZF~hhQ2ZwQDpda;WgomzA$N0}7{__<7`2_!Yc4k^{h`E)` zR<=_e)@_EP9y0IIBO!Boa7lttIu$Xp6B{85+Y<|hDN$ht7Lx_WWGZ%d+fKVft!$pf zSQ84H;c5uSt;BIFaokE|9Jdn3t;BIlq!yB~6ome!xd?n~6nQrFeDHYVF3FL=oCa7} z5s92=h+~E5YsGYi8Pp&sy~WS_LA~6%42!<%b?x_*&+wiHx^G@Y+yGSz$;`xf^2ITX zrOp&e?^60^9SZZvlTV2q0sNC~i5q`opL&Xp`E*546yr81I?cLtnoI`LoUoQ1Pqnt~ zvKTjq7D)ceoX25yaRHpeYm}^1Ga0veUH%6|C+r~F z7U7c*iX9dA(UCwl<3&Tyx*^t^b4c|9!?7}*lR=6T65rXbl3hB_uAVBa$rG@X zW{N%m*psD-B7Y-P8tjjHuvQjJNuhAuBpgFw>6=)$Pi#vQTc{lcA_FWdbe@s0UNw3u zW+#%}!a9hAq0G@Y`1Nv;-=KKH$8a6tVscdHHc0)TS%J4R+;}A{zEUl|I=$8JXOq*j zyJ^iWD(MfV9oA!XgI6COM_6LEfZIIs78wp%4I31DpMT!oj1l&IoUHNhdYs%G;`d>) z#=q;sJ9Z8!%Zg=22uU$G(E*1TaHw!E3%nVY#xtKZL==mc6t>Lx(*mxIwGqI#^IJZK zCPhLq6CAPcFV9gyTL^_%u!CZK6(fI(@{tcwO+yeWBSuUl656;Kos zU<$na;(tz-SXVAt0L!d*s6Us4iub@5o#@o8Q^KjZ-(MI|bu#~t_sIWaAb)3eZe1@H zzkbA1g^!#qHF6>elGo(uyBrmey0Q_Qf82Jc!VYx-24F1Zp?-){Q`D^!TU|Xzam$

911Gg>zfDX?;{yhgQP+R_bmij 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 diff --git a/dist/all.require.js b/dist/all.require.js index bbafb70a..0b05e2ca 100644 --- a/dist/all.require.js +++ b/dist/all.require.js @@ -16274,19 +16274,7 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot * @return {fabric.Group} thisArg */ _restoreObjectState: function(object) { - var groupLeft = this.get('left'), - groupTop = this.get('top'), - groupAngle = this.getAngle() * (Math.PI / 180), - rotatedTop = Math.cos(groupAngle) * object.get('top') * this.get('scaleY') + Math.sin(groupAngle) * object.get('left') * this.get('scaleX'), - rotatedLeft = -Math.sin(groupAngle) * object.get('top') * this.get('scaleY') + Math.cos(groupAngle) * object.get('left') * this.get('scaleX'); - - object.setAngle(object.getAngle() + this.getAngle()); - - object.set('left', groupLeft + rotatedLeft); - object.set('top', groupTop + rotatedTop); - - object.set('scaleX', object.get('scaleX') * this.get('scaleX')); - object.set('scaleY', object.get('scaleY') * this.get('scaleY')); + this._setObjectPosition(object); object.setCoords(); object.hasControls = object.__origHasControls; @@ -16298,6 +16286,36 @@ fabric.util.object.extend(fabric.Object.prototype, /** @lends fabric.Object.prot return this; }, + /** + * @private + */ + _setObjectPosition: function(object) { + var groupLeft = this.get('left'), + groupTop = this.get('top'), + rotated = this._getRotatedLeftTop(object); + + object.setAngle(object.getAngle() + this.getAngle()); + + object.set('left', groupLeft + rotated.left); + object.set('top', groupTop + rotated.top); + object.set('scaleX', object.get('scaleX') * this.get('scaleX')); + object.set('scaleY', object.get('scaleY') * this.get('scaleY')); + }, + + /** + * @private + */ + _getRotatedLeftTop: function(object) { + var groupAngle = this.getAngle() * (Math.PI / 180); + return { + left: (-Math.sin(groupAngle) * object.get('top') * this.get('scaleY') + + Math.cos(groupAngle) * object.get('left') * this.get('scaleX')), + + top: (Math.cos(groupAngle) * object.get('top') * this.get('scaleY') + + Math.sin(groupAngle) * object.get('left') * this.get('scaleX')) + }; + }, + /** * Destroys a group (restoring state of its objects) * @return {fabric.Group} thisArg diff --git a/src/shapes/group.class.js b/src/shapes/group.class.js index b65b7366..eb570877 100644 --- a/src/shapes/group.class.js +++ b/src/shapes/group.class.js @@ -306,19 +306,7 @@ * @return {fabric.Group} thisArg */ _restoreObjectState: function(object) { - var groupLeft = this.get('left'), - groupTop = this.get('top'), - groupAngle = this.getAngle() * (Math.PI / 180), - rotatedTop = Math.cos(groupAngle) * object.get('top') * this.get('scaleY') + Math.sin(groupAngle) * object.get('left') * this.get('scaleX'), - rotatedLeft = -Math.sin(groupAngle) * object.get('top') * this.get('scaleY') + Math.cos(groupAngle) * object.get('left') * this.get('scaleX'); - - object.setAngle(object.getAngle() + this.getAngle()); - - object.set('left', groupLeft + rotatedLeft); - object.set('top', groupTop + rotatedTop); - - object.set('scaleX', object.get('scaleX') * this.get('scaleX')); - object.set('scaleY', object.get('scaleY') * this.get('scaleY')); + this._setObjectPosition(object); object.setCoords(); object.hasControls = object.__origHasControls; @@ -330,6 +318,36 @@ return this; }, + /** + * @private + */ + _setObjectPosition: function(object) { + var groupLeft = this.getLeft(), + groupTop = this.getTop(), + rotated = this._getRotatedLeftTop(object); + + object.setAngle(object.getAngle() + this.getAngle()); + + object.set('left', groupLeft + rotated.left); + object.set('top', groupTop + rotated.top); + object.set('scaleX', object.get('scaleX') * this.get('scaleX')); + object.set('scaleY', object.get('scaleY') * this.get('scaleY')); + }, + + /** + * @private + */ + _getRotatedLeftTop: function(object) { + var groupAngle = this.getAngle() * (Math.PI / 180); + return { + left: (-Math.sin(groupAngle) * object.getTop() * this.get('scaleY') + + Math.cos(groupAngle) * object.getLeft() * this.get('scaleX')), + + top: (Math.cos(groupAngle) * object.getTop() * this.get('scaleY') + + Math.sin(groupAngle) * object.getLeft() * this.get('scaleX')) + }; + }, + /** * Destroys a group (restoring state of its objects) * @return {fabric.Group} thisArg