askui
Version:
Reliable, automated end-to-end-testing that depends on what is shown on your screen instead of the technology you are running on
477 lines • 327 kB
HTML
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>Annotated Image</title>
</head>
<body>
<bounding-box-renderer></bounding-box-renderer>
<script>
(()=>{var oe=Object.create;var Ot=Object.defineProperty;var he=Object.getOwnPropertyDescriptor;var le=Object.getOwnPropertyNames;var ce=Object.getPrototypeOf,fe=Object.prototype.hasOwnProperty;var ue=(c,i,a)=>i in c?Ot(c,i,{enumerable:!0,configurable:!0,writable:!0,value:a}):c[i]=a;var pt=(c,i)=>()=>(i||c((i={exports:{}}).exports,i),i.exports);var de=(c,i,a,o)=>{if(i&&typeof i=="object"||typeof i=="function")for(let t of le(i))!fe.call(c,t)&&t!==a&&Ot(c,t,{get:()=>i[t],enumerable:!(o=he(i,t))||o.enumerable});return c};var Et=(c,i,a)=>(a=c!=null?oe(ce(c)):{},de(i||!c||!c.__esModule?Ot(a,"default",{value:c,enumerable:!0}):a,c));var at=(c,i,a)=>ue(c,typeof i!="symbol"?i+"":i,a);var gt=(c,i,a)=>new Promise((o,t)=>{var r=h=>{try{s(a.next(h))}catch(n){t(n)}},e=h=>{try{s(a.throw(h))}catch(n){t(n)}},s=h=>h.done?o(h.value):Promise.resolve(h.value).then(r,e);s((a=a.apply(c,i)).next())});var Lt=pt(()=>{});var It=pt(()=>{});var jt=pt(()=>{});var vt=pt(F=>{var u=u||{version:"5.1.0"};typeof F!="undefined"?F.fabric=u:typeof define=="function"&&define.amd&&define([],function(){return u});typeof document!="undefined"&&typeof window!="undefined"?(document instanceof(typeof HTMLDocument!="undefined"?HTMLDocument:Document)?u.document=document:u.document=document.implementation.createHTMLDocument(""),u.window=window):(Rt=Lt(),Pt=new Rt.JSDOM(decodeURIComponent("%3C!DOCTYPE%20html%3E%3Chtml%3E%3Chead%3E%3C%2Fhead%3E%3Cbody%3E%3C%2Fbody%3E%3C%2Fhtml%3E"),{features:{FetchExternalResources:["img"]},resources:"usable"}).window,u.document=Pt.document,u.jsdomImplForWrapper=It().implForWrapper,u.nodeCanvas=jt().Canvas,u.window=Pt,DOMParser=u.window.DOMParser);var Rt,Pt;u.isTouchSupported="ontouchstart"in u.window||"ontouchstart"in u.document||u.window&&u.window.navigator&&u.window.navigator.maxTouchPoints>0;u.isLikelyNode=typeof Buffer!="undefined"&&typeof window=="undefined";u.SHARED_ATTRIBUTES=["display","transform","fill","fill-opacity","fill-rule","opacity","stroke","stroke-dasharray","stroke-linecap","stroke-dashoffset","stroke-linejoin","stroke-miterlimit","stroke-opacity","stroke-width","id","paint-order","vector-effect","instantiated_by_use","clip-path"];u.DPI=96;u.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:[eE][-+]?\\d+)?)";u.commaWsp="(?:\\s+,?\\s*|,\\s*)";u.rePathCommand=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:[eE][-+]?\d+)?)/ig;u.reNonWord=/[ \n\.,;!\?\-]/;u.fontPaths={};u.iMatrix=[1,0,0,1,0,0];u.svgNS="http://www.w3.org/2000/svg";u.perfLimitSizeTotal=2097152;u.maxCacheSideLimit=4096;u.minCacheSideLimit=256;u.charWidthsCache={};u.textureSize=2048;u.disableStyleCopyPaste=!1;u.enableGLFiltering=!0;u.devicePixelRatio=u.window.devicePixelRatio||u.window.webkitDevicePixelRatio||u.window.mozDevicePixelRatio||1;u.browserShadowBlurConstant=1;u.arcToSegmentsCache={};u.boundsOfCurveCache={};u.cachesBoundsOfCurve=!0;u.forceGLPutImageData=!1;u.initFilterBackend=function(){if(u.enableGLFiltering&&u.isWebglSupported&&u.isWebglSupported(u.textureSize))return console.log("max texture size: "+u.maxTextureSize),new u.WebglFilterBackend({tileSize:u.textureSize});if(u.Canvas2dFilterBackend)return new u.Canvas2dFilterBackend};typeof document!="undefined"&&typeof window!="undefined"&&(window.fabric=u);(function(){function c(e,s){if(this.__eventListeners[e]){var h=this.__eventListeners[e];s?h[h.indexOf(s)]=!1:u.util.array.fill(h,!1)}}function i(e,s){if(this.__eventListeners||(this.__eventListeners={}),arguments.length===1)for(var h in e)this.on(h,e[h]);else this.__eventListeners[e]||(this.__eventListeners[e]=[]),this.__eventListeners[e].push(s);return this}function a(e,s){var h=function(){s.apply(this,arguments),this.off(e,h)}.bind(this);this.on(e,h)}function o(e,s){if(arguments.length===1)for(var h in e)a.call(this,h,e[h]);else a.call(this,e,s);return this}function t(e,s){if(!this.__eventListeners)return this;if(arguments.length===0)for(e in this.__eventListeners)c.call(this,e);else if(arguments.length===1&&typeof arguments[0]=="object")for(var h in e)c.call(this,h,e[h]);else c.call(this,e,s);return this}function r(e,s){if(!this.__eventListeners)return this;var h=this.__eventListeners[e];if(!h)return this;for(var n=0,l=h.length;n<l;n++)h[n]&&h[n].call(this,s||{});return this.__eventListeners[e]=h.filter(function(f){return f!==!1}),this}u.Observable={fire:r,on:i,once:o,off:t}})();u.Collection={_objects:[],add:function(){if(this._objects.push.apply(this._objects,arguments),this._onObjectAdded)for(var c=0,i=arguments.length;c<i;c++)this._onObjectAdded(arguments[c]);return this.renderOnAddRemove&&this.requestRenderAll(),this},insertAt:function(c,i,a){var o=this._objects;return a?o[i]=c:o.splice(i,0,c),this._onObjectAdded&&this._onObjectAdded(c),this.renderOnAddRemove&&this.requestRenderAll(),this},remove:function(){for(var c=this._objects,i,a=!1,o=0,t=arguments.length;o<t;o++)i=c.indexOf(arguments[o]),i!==-1&&(a=!0,c.splice(i,1),this._onObjectRemoved&&this._onObjectRemoved(arguments[o]));return this.renderOnAddRemove&&a&&this.requestRenderAll(),this},forEachObject:function(c,i){for(var a=this.getObjects(),o=0,t=a.length;o<t;o++)c.call(i,a[o],o,a);return this},getObjects:function(c){return typeof c=="undefined"?this._objects.concat():this._objects.filter(function(i){return i.type===c})},item:function(c){return this._objects[c]},isEmpty:function(){return this._objects.length===0},size:function(){return this._objects.length},contains:function(c,i){return this._objects.indexOf(c)>-1?!0:i?this._objects.some(function(a){return typeof a.contains=="function"&&a.contains(c,!0)}):!1},complexity:function(){return this._objects.reduce(function(c,i){return c+=i.complexity?i.complexity():0,c},0)}};u.CommonMethods={_setOptions:function(c){for(var i in c)this.set(i,c[i])},_initGradient:function(c,i){c&&c.colorStops&&!(c instanceof u.Gradient)&&this.set(i,new u.Gradient(c))},_initPattern:function(c,i,a){c&&c.source&&!(c instanceof u.Pattern)?this.set(i,new u.Pattern(c,a)):a&&a()},_setObject:function(c){for(var i in c)this._set(i,c[i])},set:function(c,i){return typeof c=="object"?this._setObject(c):this._set(c,i),this},_set:function(c,i){this[c]=i},toggle:function(c){var i=this.get(c);return typeof i=="boolean"&&this.set(c,!i),this},get:function(c){return this[c]}};(function(c){var i=Math.sqrt,a=Math.atan2,o=Math.pow,t=Math.PI/180,r=Math.PI/2;u.util={cos:function(e){if(e===0)return 1;e<0&&(e=-e);var s=e/r;switch(s){case 1:case 3:return 0;case 2:return-1}return Math.cos(e)},sin:function(e){if(e===0)return 0;var s=e/r,h=1;switch(e<0&&(h=-1),s){case 1:return h;case 2:return 0;case 3:return-h}return Math.sin(e)},removeFromArray:function(e,s){var h=e.indexOf(s);return h!==-1&&e.splice(h,1),e},getRandomInt:function(e,s){return Math.floor(Math.random()*(s-e+1))+e},degreesToRadians:function(e){return e*t},radiansToDegrees:function(e){return e/t},rotatePoint:function(e,s,h){var n=new u.Point(e.x-s.x,e.y-s.y),l=u.util.rotateVector(n,h);return new u.Point(l.x,l.y).addEquals(s)},rotateVector:function(e,s){var h=u.util.sin(s),n=u.util.cos(s),l=e.x*n-e.y*h,f=e.x*h+e.y*n;return{x:l,y:f}},createVector:function(e,s){return new u.Point(s.x-e.x,s.y-e.y)},calcAngleBetweenVectors:function(e,s){return Math.acos((e.x*s.x+e.y*s.y)/(Math.hypot(e.x,e.y)*Math.hypot(s.x,s.y)))},getHatVector:function(e){return new u.Point(e.x,e.y).multiply(1/Math.hypot(e.x,e.y))},getBisector:function(e,s,h){var n=u.util.createVector(e,s),l=u.util.createVector(e,h),f=u.util.calcAngleBetweenVectors(n,l),d=u.util.calcAngleBetweenVectors(u.util.rotateVector(n,f),l),g=f*(d===0?1:-1)/2;return{vector:u.util.getHatVector(u.util.rotateVector(n,g)),angle:f}},projectStrokeOnPoints:function(e,s,h){var n=[],l=s.strokeWidth/2,f=s.strokeUniform?new u.Point(1/s.scaleX,1/s.scaleY):new u.Point(1,1),d=function(g){var m=l/Math.hypot(g.x,g.y);return new u.Point(g.x*m*f.x,g.y*m*f.y)};return e.length<=1||e.forEach(function(g,m){var p=new u.Point(g.x,g.y),_,w;m===0?(w=e[m+1],_=h?d(u.util.createVector(w,p)).addEquals(p):e[e.length-1]):m===e.length-1?(_=e[m-1],w=h?d(u.util.createVector(_,p)).addEquals(p):e[0]):(_=e[m-1],w=e[m+1]);var D=u.util.getBisector(p,_,w),B=D.vector,N=D.angle,G,z;if(s.strokeLineJoin==="miter"&&(G=-l/Math.sin(N/2),z=new u.Point(B.x*G*f.x,B.y*G*f.y),Math.hypot(z.x,z.y)/l<=s.strokeMiterLimit)){n.push(p.add(z)),n.push(p.subtract(z));return}G=-l*Math.SQRT2,z=new u.Point(B.x*G*f.x,B.y*G*f.y),n.push(p.add(z)),n.push(p.subtract(z))}),n},transformPoint:function(e,s,h){return h?new u.Point(s[0]*e.x+s[2]*e.y,s[1]*e.x+s[3]*e.y):new u.Point(s[0]*e.x+s[2]*e.y+s[4],s[1]*e.x+s[3]*e.y+s[5])},makeBoundingBoxFromPoints:function(e,s){if(s)for(var h=0;h<e.length;h++)e[h]=u.util.transformPoint(e[h],s);var n=[e[0].x,e[1].x,e[2].x,e[3].x],l=u.util.array.min(n),f=u.util.array.max(n),d=f-l,g=[e[0].y,e[1].y,e[2].y,e[3].y],m=u.util.array.min(g),p=u.util.array.max(g),_=p-m;return{left:l,top:m,width:d,height:_}},invertTransform:function(e){var s=1/(e[0]*e[3]-e[1]*e[2]),h=[s*e[3],-s*e[1],-s*e[2],s*e[0]],n=u.util.transformPoint({x:e[4],y:e[5]},h,!0);return h[4]=-n.x,h[5]=-n.y,h},toFixed:function(e,s){return parseFloat(Number(e).toFixed(s))},parseUnit:function(e,s){var h=/\D{0,2}$/.exec(e),n=parseFloat(e);switch(s||(s=u.Text.DEFAULT_SVG_FONT_SIZE),h[0]){case"mm":return n*u.DPI/25.4;case"cm":return n*u.DPI/2.54;case"in":return n*u.DPI;case"pt":return n*u.DPI/72;case"pc":return n*u.DPI/72*12;case"em":return n*s;default:return n}},falseFunction:function(){return!1},getKlass:function(e,s){return e=u.util.string.camelize(e.charAt(0).toUpperCase()+e.slice(1)),u.util.resolveNamespace(s)[e]},getSvgAttributes:function(e){var s=["instantiated_by_use","style","id","class"];switch(e){case"linearGradient":s=s.concat(["x1","y1","x2","y2","gradientUnits","gradientTransform"]);break;case"radialGradient":s=s.concat(["gradientUnits","gradientTransform","cx","cy","r","fx","fy","fr"]);break;case"stop":s=s.concat(["offset","stop-color","stop-opacity"]);break}return s},resolveNamespace:function(e){if(!e)return u;var s=e.split("."),h=s.length,n,l=c||u.window;for(n=0;n<h;++n)l=l[s[n]];return l},loadImage:function(e,s,h,n){if(!e){s&&s.call(h,e);return}var l=u.util.createImage(),f=function(){s&&s.call(h,l,!1),l=l.onload=l.onerror=null};l.onload=f,l.onerror=function(){u.log("Error loading "+l.src),s&&s.call(h,null,!0),l=l.onload=l.onerror=null},e.indexOf("data")!==0&&n!==void 0&&n!==null&&(l.crossOrigin=n),e.substring(0,14)==="data:image/svg"&&(l.onload=null,u.util.loadImageInDom(l,f)),l.src=e},loadImageInDom:function(e,s){var h=u.document.createElement("div");h.style.width=h.style.height="1px",h.style.left=h.style.top="-100%",h.style.position="absolute",h.appendChild(e),u.document.querySelector("body").appendChild(h),e.onload=function(){s(),h.parentNode.removeChild(h),h=null}},enlivenObjects:function(e,s,h,n){e=e||[];var l=[],f=0,d=e.length;function g(){++f===d&&s&&s(l.filter(function(m){return m}))}if(!d){s&&s(l);return}e.forEach(function(m,p){if(!m||!m.type){g();return}var _=u.util.getKlass(m.type,h);_.fromObject(m,function(w,D){D||(l[p]=w),n&&n(m,w,D),g()})})},enlivenObjectEnlivables:function(e,s,h){var n=u.Object.ENLIVEN_PROPS.filter(function(l){return!!e[l]});u.util.enlivenObjects(n.map(function(l){return e[l]}),function(l){var f={};n.forEach(function(d,g){f[d]=l[g],s&&(s[d]=l[g])}),h&&h(f)})},enlivenPatterns:function(e,s){e=e||[];function h(){++l===f&&s&&s(n)}var n=[],l=0,f=e.length;if(!f){s&&s(n);return}e.forEach(function(d,g){d&&d.source?new u.Pattern(d,function(m){n[g]=m,h()}):(n[g]=d,h())})},groupSVGElements:function(e,s,h){var n;return e&&e.length===1?e[0]:(s&&(s.width&&s.height?s.centerPoint={x:s.width/2,y:s.height/2}:(delete s.width,delete s.height)),n=new u.Group(e,s),typeof h!="undefined"&&(n.sourcePath=h),n)},populateWithProperties:function(e,s,h){if(h&&Object.prototype.toString.call(h)==="[object Array]")for(var n=0,l=h.length;n<l;n++)h[n]in e&&(s[h[n]]=e[h[n]])},createCanvasElement:function(){return u.document.createElement("canvas")},copyCanvasElement:function(e){var s=u.util.createCanvasElement();return s.width=e.width,s.height=e.height,s.getContext("2d").drawImage(e,0,0),s},toDataURL:function(e,s,h){return e.toDataURL("image/"+s,h)},createImage:function(){return u.document.createElement("img")},multiplyTransformMatrices:function(e,s,h){return[e[0]*s[0]+e[2]*s[1],e[1]*s[0]+e[3]*s[1],e[0]*s[2]+e[2]*s[3],e[1]*s[2]+e[3]*s[3],h?0:e[0]*s[4]+e[2]*s[5]+e[4],h?0:e[1]*s[4]+e[3]*s[5]+e[5]]},qrDecompose:function(e){var s=a(e[1],e[0]),h=o(e[0],2)+o(e[1],2),n=i(h),l=(e[0]*e[3]-e[2]*e[1])/n,f=a(e[0]*e[2]+e[1]*e[3],h);return{angle:s/t,scaleX:n,scaleY:l,skewX:f/t,skewY:0,translateX:e[4],translateY:e[5]}},calcRotateMatrix:function(e){if(!e.angle)return u.iMatrix.concat();var s=u.util.degreesToRadians(e.angle),h=u.util.cos(s),n=u.util.sin(s);return[h,n,-n,h,0,0]},calcDimensionsMatrix:function(e){var s=typeof e.scaleX=="undefined"?1:e.scaleX,h=typeof e.scaleY=="undefined"?1:e.scaleY,n=[e.flipX?-s:s,0,0,e.flipY?-h:h,0,0],l=u.util.multiplyTransformMatrices,f=u.util.degreesToRadians;return e.skewX&&(n=l(n,[1,0,Math.tan(f(e.skewX)),1],!0)),e.skewY&&(n=l(n,[1,Math.tan(f(e.skewY)),0,1],!0)),n},composeMatrix:function(e){var s=[1,0,0,1,e.translateX||0,e.translateY||0],h=u.util.multiplyTransformMatrices;return e.angle&&(s=h(s,u.util.calcRotateMatrix(e))),(e.scaleX!==1||e.scaleY!==1||e.skewX||e.skewY||e.flipX||e.flipY)&&(s=h(s,u.util.calcDimensionsMatrix(e))),s},resetObjectTransform:function(e){e.scaleX=1,e.scaleY=1,e.skewX=0,e.skewY=0,e.flipX=!1,e.flipY=!1,e.rotate(0)},saveObjectTransform:function(e){return{scaleX:e.scaleX,scaleY:e.scaleY,skewX:e.skewX,skewY:e.skewY,angle:e.angle,left:e.left,flipX:e.flipX,flipY:e.flipY,top:e.top}},isTransparent:function(e,s,h,n){n>0&&(s>n?s-=n:s=0,h>n?h-=n:h=0);var l=!0,f,d,g=e.getImageData(s,h,n*2||1,n*2||1),m=g.data.length;for(f=3;f<m&&(d=g.data[f],l=d<=0,l!==!1);f+=4);return g=null,l},parsePreserveAspectRatioAttribute:function(e){var s="meet",h="Mid",n="Mid",l=e.split(" "),f;return l&&l.length&&(s=l.pop(),s!=="meet"&&s!=="slice"?(f=s,s="meet"):l.length&&(f=l.pop())),h=f!=="none"?f.slice(1,4):"none",n=f!=="none"?f.slice(5,8):"none",{meetOrSlice:s,alignX:h,alignY:n}},clearFabricFontCache:function(e){e=(e||"").toLowerCase(),e?u.charWidthsCache[e]&&delete u.charWidthsCache[e]:u.charWidthsCache={}},limitDimsByArea:function(e,s){var h=Math.sqrt(s*e),n=Math.floor(s/h);return{x:Math.floor(h),y:n}},capValue:function(e,s,h){return Math.max(e,Math.min(s,h))},findScaleToFit:function(e,s){return Math.min(s.width/e.width,s.height/e.height)},findScaleToCover:function(e,s){return Math.max(s.width/e.width,s.height/e.height)},matrixToSVG:function(e){return"matrix("+e.map(function(s){return u.util.toFixed(s,u.Object.NUM_FRACTION_DIGITS)}).join(" ")+")"},removeTransformFromObject:function(e,s){var h=u.util.invertTransform(s),n=u.util.multiplyTransformMatrices(h,e.calcOwnMatrix());u.util.applyTransformToObject(e,n)},addTransformToObject:function(e,s){u.util.applyTransformToObject(e,u.util.multiplyTransformMatrices(s,e.calcOwnMatrix()))},applyTransformToObject:function(e,s){var h=u.util.qrDecompose(s),n=new u.Point(h.translateX,h.translateY);e.flipX=!1,e.flipY=!1,e.set("scaleX",h.scaleX),e.set("scaleY",h.scaleY),e.skewX=h.skewX,e.skewY=h.skewY,e.angle=h.angle,e.setPositionByOrigin(n,"center","center")},sizeAfterTransform:function(e,s,h){var n=e/2,l=s/2,f=[{x:-n,y:-l},{x:n,y:-l},{x:-n,y:l},{x:n,y:l}],d=u.util.calcDimensionsMatrix(h),g=u.util.makeBoundingBoxFromPoints(f,d);return{x:g.width,y:g.height}},mergeClipPaths:function(e,s){var h=e,n=s;h.inverted&&!n.inverted&&(h=s,n=e),u.util.applyTransformToObject(n,u.util.multiplyTransformMatrices(u.util.invertTransform(h.calcTransformMatrix()),n.calcTransformMatrix()));var l=h.inverted&&n.inverted;return l&&(h.inverted=n.inverted=!1),new u.Group([h],{clipPath:n,inverted:l})}}})(F);(function(){var c=Array.prototype.join,i={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},a={m:"l",M:"L"};function o(v,b,S,C,P,x,y,T,E,L,k){var W=u.util.cos(v),Y=u.util.sin(v),V=u.util.cos(b),M=u.util.sin(b),O=S*P*V-C*x*M+y,j=C*P*V+S*x*M+T,R=L+E*(-S*P*Y-C*x*W),A=k+E*(-C*P*Y+S*x*W),X=O+E*(S*P*M+C*x*V),q=j+E*(C*P*M-S*x*V);return["C",R,A,X,q,O,j]}function t(v,b,S,C,P,x,y){var T=Math.PI,E=y*T/180,L=u.util.sin(E),k=u.util.cos(E),W=0,Y=0;S=Math.abs(S),C=Math.abs(C);var V=-k*v*.5-L*b*.5,M=-k*b*.5+L*v*.5,O=S*S,j=C*C,R=M*M,A=V*V,X=O*j-O*R-j*A,q=0;if(X<0){var tt=Math.sqrt(1-X/(O*j));S*=tt,C*=tt}else q=(P===x?-1:1)*Math.sqrt(X/(O*R+j*A));var Z=q*S*M/C,I=-q*C*V/S,$=k*Z-L*I+v*.5,et=L*Z+k*I+b*.5,it=r(1,0,(V-Z)/S,(M-I)/C),nt=r((V-Z)/S,(M-I)/C,(-V-Z)/S,(-M-I)/C);x===0&&nt>0?nt-=2*T:x===1&&nt<0&&(nt+=2*T);for(var rt=Math.ceil(Math.abs(nt/T*2)),ot=[],st=nt/rt,ct=8/3*Math.sin(st/4)*Math.sin(st/4)/Math.sin(st/2),dt=it+st,lt=0;lt<rt;lt++)ot[lt]=o(it,dt,k,L,S,C,$,et,ct,W,Y),W=ot[lt][5],Y=ot[lt][6],it=dt,dt+=st;return ot}function r(v,b,S,C){var P=Math.atan2(b,v),x=Math.atan2(C,S);return x>=P?x-P:2*Math.PI-(P-x)}function e(v,b,S,C,P,x,y,T){var E;if(u.cachesBoundsOfCurve&&(E=c.call(arguments),u.boundsOfCurveCache[E]))return u.boundsOfCurveCache[E];var L=Math.sqrt,k=Math.min,W=Math.max,Y=Math.abs,V=[],M=[[],[]],O,j,R,A,X,q,tt,Z;j=6*v-12*S+6*P,O=-3*v+9*S-9*P+3*y,R=3*S-3*v;for(var I=0;I<2;++I){if(I>0&&(j=6*b-12*C+6*x,O=-3*b+9*C-9*x+3*T,R=3*C-3*b),Y(O)<1e-12){if(Y(j)<1e-12)continue;A=-R/j,0<A&&A<1&&V.push(A);continue}tt=j*j-4*R*O,!(tt<0)&&(Z=L(tt),X=(-j+Z)/(2*O),0<X&&X<1&&V.push(X),q=(-j-Z)/(2*O),0<q&&q<1&&V.push(q))}for(var $,et,it=V.length,nt=it,rt;it--;)A=V[it],rt=1-A,$=rt*rt*rt*v+3*rt*rt*A*S+3*rt*A*A*P+A*A*A*y,M[0][it]=$,et=rt*rt*rt*b+3*rt*rt*A*C+3*rt*A*A*x+A*A*A*T,M[1][it]=et;M[0][nt]=v,M[1][nt]=b,M[0][nt+1]=y,M[1][nt+1]=T;var ot=[{x:k.apply(null,M[0]),y:k.apply(null,M[1])},{x:W.apply(null,M[0]),y:W.apply(null,M[1])}];return u.cachesBoundsOfCurve&&(u.boundsOfCurveCache[E]=ot),ot}function s(v,b,S){for(var C=S[1],P=S[2],x=S[3],y=S[4],T=S[5],E=S[6],L=S[7],k=t(E-v,L-b,C,P,y,T,x),W=0,Y=k.length;W<Y;W++)k[W][1]+=v,k[W][2]+=b,k[W][3]+=v,k[W][4]+=b,k[W][5]+=v,k[W][6]+=b;return k}function h(v){var b=0,S=0,C=v.length,P=0,x=0,y,T,E,L=[],k,W,Y;for(T=0;T<C;++T){switch(E=!1,y=v[T].slice(0),y[0]){case"l":y[0]="L",y[1]+=b,y[2]+=S;case"L":b=y[1],S=y[2];break;case"h":y[1]+=b;case"H":y[0]="L",y[2]=S,b=y[1];break;case"v":y[1]+=S;case"V":y[0]="L",S=y[1],y[1]=b,y[2]=S;break;case"m":y[0]="M",y[1]+=b,y[2]+=S;case"M":b=y[1],S=y[2],P=y[1],x=y[2];break;case"c":y[0]="C",y[1]+=b,y[2]+=S,y[3]+=b,y[4]+=S,y[5]+=b,y[6]+=S;case"C":W=y[3],Y=y[4],b=y[5],S=y[6];break;case"s":y[0]="S",y[1]+=b,y[2]+=S,y[3]+=b,y[4]+=S;case"S":k==="C"?(W=2*b-W,Y=2*S-Y):(W=b,Y=S),b=y[3],S=y[4],y[0]="C",y[5]=y[3],y[6]=y[4],y[3]=y[1],y[4]=y[2],y[1]=W,y[2]=Y,W=y[3],Y=y[4];break;case"q":y[0]="Q",y[1]+=b,y[2]+=S,y[3]+=b,y[4]+=S;case"Q":W=y[1],Y=y[2],b=y[3],S=y[4];break;case"t":y[0]="T",y[1]+=b,y[2]+=S;case"T":k==="Q"?(W=2*b-W,Y=2*S-Y):(W=b,Y=S),y[0]="Q",b=y[1],S=y[2],y[1]=W,y[2]=Y,y[3]=b,y[4]=S;break;case"a":y[0]="A",y[6]+=b,y[7]+=S;case"A":E=!0,L=L.concat(s(b,S,y)),b=y[6],S=y[7];break;case"z":case"Z":b=P,S=x;break;default:}E||L.push(y),k=y[0]}return L}function n(v,b,S,C){return Math.sqrt((S-v)*(S-v)+(C-b)*(C-b))}function l(v){return v*v*v}function f(v){return 3*v*v*(1-v)}function d(v){return 3*v*(1-v)*(1-v)}function g(v){return(1-v)*(1-v)*(1-v)}function m(v,b,S,C,P,x,y,T){return function(E){var L=l(E),k=f(E),W=d(E),Y=g(E);return{x:y*L+P*k+S*W+v*Y,y:T*L+x*k+C*W+b*Y}}}function p(v,b,S,C,P,x,y,T){return function(E){var L=1-E,k=3*L*L*(S-v)+6*L*E*(P-S)+3*E*E*(y-P),W=3*L*L*(C-b)+6*L*E*(x-C)+3*E*E*(T-x);return Math.atan2(W,k)}}function _(v){return v*v}function w(v){return 2*v*(1-v)}function D(v){return(1-v)*(1-v)}function B(v,b,S,C,P,x){return function(y){var T=_(y),E=w(y),L=D(y);return{x:P*T+S*E+v*L,y:x*T+C*E+b*L}}}function N(v,b,S,C,P,x){return function(y){var T=1-y,E=2*T*(S-v)+2*y*(P-S),L=2*T*(C-b)+2*y*(x-C);return Math.atan2(L,E)}}function G(v,b,S){var C={x:b,y:S},P,x=0,y;for(y=1;y<=100;y+=1)P=v(y/100),x+=n(C.x,C.y,P.x,P.y),C=P;return x}function z(v,b){for(var S=0,C=0,P=v.iterator,x={x:v.x,y:v.y},y,T,E=.01,L=v.angleFinder,k;C<b&&E>1e-4;)y=P(S),k=S,T=n(x.x,x.y,y.x,y.y),T+C>b?(S-=E,E/=2):(x=y,S+=E,C+=T);return y.angle=L(k),y}function H(v){for(var b=0,S=v.length,C,P=0,x=0,y=0,T=0,E=[],L,k,W,Y=0;Y<S;Y++){switch(C=v[Y],k={x:P,y:x,command:C[0]},C[0]){case"M":k.length=0,y=P=C[1],T=x=C[2];break;case"L":k.length=n(P,x,C[1],C[2]),P=C[1],x=C[2];break;case"C":L=m(P,x,C[1],C[2],C[3],C[4],C[5],C[6]),W=p(P,x,C[1],C[2],C[3],C[4],C[5],C[6]),k.iterator=L,k.angleFinder=W,k.length=G(L,P,x),P=C[5],x=C[6];break;case"Q":L=B(P,x,C[1],C[2],C[3],C[4]),W=N(P,x,C[1],C[2],C[3],C[4]),k.iterator=L,k.angleFinder=W,k.length=G(L,P,x),P=C[3],x=C[4];break;case"Z":case"z":k.destX=y,k.destY=T,k.length=n(P,x,y,T),P=y,x=T;break}b+=k.length,E.push(k)}return E.push({length:b,x:P,y:x}),E}function U(v,b,S){S||(S=H(v));for(var C=0;b-S[C].length>0&&C<S.length-2;)b-=S[C].length,C++;var P=S[C],x=b/P.length,y=P.command,T=v[C],E;switch(y){case"M":return{x:P.x,y:P.y,angle:0};case"Z":case"z":return E=new u.Point(P.x,P.y).lerp(new u.Point(P.destX,P.destY),x),E.angle=Math.atan2(P.destY-P.y,P.destX-P.x),E;case"L":return E=new u.Point(P.x,P.y).lerp(new u.Point(T[1],T[2]),x),E.angle=Math.atan2(T[2]-P.y,T[1]-P.x),E;case"C":return z(P,b);case"Q":return z(P,b)}}function K(v){var b=[],S=[],C,P,x=u.rePathCommand,y="[-+]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][-+]?\\d+)?\\s*",T="("+y+")"+u.commaWsp,E="([01])"+u.commaWsp+"?",L=T+"?"+T+"?"+T+E+E+T+"?("+y+")",k=new RegExp(L,"g"),W,Y,V;if(!v||!v.match)return b;V=v.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi);for(var M=0,O,j=V.length;M<j;M++){C=V[M],Y=C.slice(1).trim(),S.length=0;var R=C.charAt(0);if(O=[R],R.toLowerCase()==="a")for(var A;A=k.exec(Y);)for(var X=1;X<A.length;X++)S.push(A[X]);else for(;W=x.exec(Y);)S.push(W[0]);for(var X=0,q=S.length;X<q;X++)P=parseFloat(S[X]),isNaN(P)||O.push(P);var tt=i[R.toLowerCase()],Z=a[R]||R;if(O.length-1>tt)for(var I=1,$=O.length;I<$;I+=tt)b.push([R].concat(O.slice(I,I+tt))),R=Z;else b.push(O)}return b}function Q(v,b){var S=[],C,P=new u.Point(v[0].x,v[0].y),x=new u.Point(v[1].x,v[1].y),y=v.length,T=1,E=0,L=y>2;for(b=b||0,L&&(T=v[2].x<x.x?-1:v[2].x===x.x?0:1,E=v[2].y<x.y?-1:v[2].y===x.y?0:1),S.push(["M",P.x-T*b,P.y-E*b]),C=1;C<y;C++){if(!P.eq(x)){var k=P.midPointFrom(x);S.push(["Q",P.x,P.y,k.x,k.y])}P=v[C],C+1<v.length&&(x=v[C+1])}return L&&(T=P.x>v[C-2].x?1:P.x===v[C-2].x?0:-1,E=P.y>v[C-2].y?1:P.y===v[C-2].y?0:-1),S.push(["L",P.x+T*b,P.y+E*b]),S}function J(v,b,S){return S&&(b=u.util.multiplyTransformMatrices(b,[1,0,0,1,-S.x,-S.y])),v.map(function(C){for(var P=C.slice(0),x={},y=1;y<C.length-1;y+=2)x.x=C[y],x.y=C[y+1],x=u.util.transformPoint(x,b),P[y]=x.x,P[y+1]=x.y;return P})}u.util.joinPath=function(v){return v.map(function(b){return b.join(" ")}).join(" ")},u.util.parsePath=K,u.util.makePathSimpler=h,u.util.getSmoothPathFromPoints=Q,u.util.getPathSegmentsInfo=H,u.util.getBoundsOfCurve=e,u.util.getPointOnPath=U,u.util.transformPath=J})();(function(){var c=Array.prototype.slice;function i(e,s){for(var h=c.call(arguments,2),n=[],l=0,f=e.length;l<f;l++)n[l]=h.length?e[l][s].apply(e[l],h):e[l][s].call(e[l]);return n}function a(e,s){return r(e,s,function(h,n){return h>=n})}function o(e,s){return r(e,s,function(h,n){return h<n})}function t(e,s){for(var h=e.length;h--;)e[h]=s;return e}function r(e,s,h){if(!(!e||e.length===0)){var n=e.length-1,l=s?e[n][s]:e[n];if(s)for(;n--;)h(e[n][s],l)&&(l=e[n][s]);else for(;n--;)h(e[n],l)&&(l=e[n]);return l}}u.util.array={fill:t,invoke:i,min:o,max:a}})();(function(){function c(a,o,t){if(t)if(!u.isLikelyNode&&o instanceof Element)a=o;else if(o instanceof Array){a=[];for(var r=0,e=o.length;r<e;r++)a[r]=c({},o[r],t)}else if(o&&typeof o=="object")for(var s in o)s==="canvas"||s==="group"?a[s]=null:o.hasOwnProperty(s)&&(a[s]=c({},o[s],t));else a=o;else for(var s in o)a[s]=o[s];return a}function i(a,o){return c({},a,o)}u.util.object={extend:c,clone:i},u.util.object.extend(u.util,u.Observable)})();(function(){function c(r){return r.replace(/-+(.)?/g,function(e,s){return s?s.toUpperCase():""})}function i(r,e){return r.charAt(0).toUpperCase()+(e?r.slice(1):r.slice(1).toLowerCase())}function a(r){return r.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")}function o(r){var e=0,s,h=[];for(e=0,s;e<r.length;e++)(s=t(r,e))!==!1&&h.push(s);return h}function t(r,e){var s=r.charCodeAt(e);if(isNaN(s))return"";if(s<55296||s>57343)return r.charAt(e);if(55296<=s&&s<=56319){if(r.length<=e+1)throw"High surrogate without following low surrogate";var h=r.charCodeAt(e+1);if(56320>h||h>57343)throw"High surrogate without following low surrogate";return r.charAt(e)+r.charAt(e+1)}if(e===0)throw"Low surrogate without preceding high surrogate";var n=r.charCodeAt(e-1);if(55296>n||n>56319)throw"Low surrogate without preceding high surrogate";return!1}u.util.string={camelize:c,capitalize:i,escapeXml:a,graphemeSplit:o}})();(function(){var c=Array.prototype.slice,i=function(){},a=function(){for(var s in{toString:1})if(s==="toString")return!1;return!0}(),o=function(s,h,n){for(var l in h)l in s.prototype&&typeof s.prototype[l]=="function"&&(h[l]+"").indexOf("callSuper")>-1?s.prototype[l]=function(f){return function(){var d=this.constructor.superclass;this.constructor.superclass=n;var g=h[f].apply(this,arguments);if(this.constructor.superclass=d,f!=="initialize")return g}}(l):s.prototype[l]=h[l],a&&(h.toString!==Object.prototype.toString&&(s.prototype.toString=h.toString),h.valueOf!==Object.prototype.valueOf&&(s.prototype.valueOf=h.valueOf))};function t(){}function r(s){for(var h=null,n=this;n.constructor.superclass;){var l=n.constructor.superclass.prototype[s];if(n[s]!==l){h=l;break}n=n.constructor.superclass.prototype}return h?arguments.length>1?h.apply(this,c.call(arguments,1)):h.call(this):console.log("tried to callSuper "+s+", method not found in prototype chain",this)}function e(){var s=null,h=c.call(arguments,0);typeof h[0]=="function"&&(s=h.shift());function n(){this.initialize.apply(this,arguments)}n.superclass=s,n.subclasses=[],s&&(t.prototype=s.prototype,n.prototype=new t,s.subclasses.push(n));for(var l=0,f=h.length;l<f;l++)o(n,h[l],s);return n.prototype.initialize||(n.prototype.initialize=i),n.prototype.constructor=n,n.prototype.callSuper=r,n}u.util.createClass=e})();(function(){var c=!!u.document.createElement("div").attachEvent,i=["touchstart","touchmove","touchend"];u.util.addListener=function(o,t,r,e){o&&o.addEventListener(t,r,c?!1:e)},u.util.removeListener=function(o,t,r,e){o&&o.removeEventListener(t,r,c?!1:e)};function a(o){var t=o.changedTouches;return t&&t[0]?t[0]:o}u.util.getPointer=function(o){var t=o.target,r=u.util.getScrollLeftTop(t),e=a(o);return{x:e.clientX+r.left,y:e.clientY+r.top}},u.util.isTouchEvent=function(o){return i.indexOf(o.type)>-1||o.pointerType==="touch"}})();(function(){function c(e,s){var h=e.style;if(!h)return e;if(typeof s=="string")return e.style.cssText+=";"+s,s.indexOf("opacity")>-1?r(e,s.match(/opacity:\s*(\d?\.?\d*)/)[1]):e;for(var n in s)if(n==="opacity")r(e,s[n]);else{var l=n==="float"||n==="cssFloat"?typeof h.styleFloat=="undefined"?"cssFloat":"styleFloat":n;h[l]=s[n]}return e}var i=u.document.createElement("div"),a=typeof i.style.opacity=="string",o=typeof i.style.filter=="string",t=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,r=function(e){return e};a?r=function(e,s){return e.style.opacity=s,e}:o&&(r=function(e,s){var h=e.style;return e.currentStyle&&!e.currentStyle.hasLayout&&(h.zoom=1),t.test(h.filter)?(s=s>=.9999?"":"alpha(opacity="+s*100+")",h.filter=h.filter.replace(t,s)):h.filter+=" alpha(opacity="+s*100+")",e}),u.util.setStyle=c})();(function(){var c=Array.prototype.slice;function i(g){return typeof g=="string"?u.document.getElementById(g):g}var a,o=function(g){return c.call(g,0)};try{a=o(u.document.childNodes)instanceof Array}catch(g){}a||(o=function(g){for(var m=new Array(g.length),p=g.length;p--;)m[p]=g[p];return m});function t(g,m){var p=u.document.createElement(g);for(var _ in m)_==="class"?p.className=m[_]:_==="for"?p.htmlFor=m[_]:p.setAttribute(_,m[_]);return p}function r(g,m){g&&(" "+g.className+" ").indexOf(" "+m+" ")===-1&&(g.className+=(g.className?" ":"")+m)}function e(g,m,p){return typeof m=="string"&&(m=t(m,p)),g.parentNode&&g.parentNode.replaceChild(m,g),m.appendChild(g),m}function s(g){for(var m=0,p=0,_=u.document.documentElement,w=u.document.body||{scrollLeft:0,scrollTop:0};g&&(g.parentNode||g.host)&&(g=g.parentNode||g.host,g===u.document?(m=w.scrollLeft||_.scrollLeft||0,p=w.scrollTop||_.scrollTop||0):(m+=g.scrollLeft||0,p+=g.scrollTop||0),!(g.nodeType===1&&g.style.position==="fixed")););return{left:m,top:p}}function h(g){var m,p=g&&g.ownerDocument,_={left:0,top:0},w={left:0,top:0},D,B={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!p)return w;for(var N in B)w[B[N]]+=parseInt(n(g,N),10)||0;return m=p.documentElement,typeof g.getBoundingClientRect!="undefined"&&(_=g.getBoundingClientRect()),D=s(g),{left:_.left+D.left-(m.clientLeft||0)+w.left,top:_.top+D.top-(m.clientTop||0)+w.top}}var n;u.document.defaultView&&u.document.defaultView.getComputedStyle?n=function(g,m){var p=u.document.defaultView.getComputedStyle(g,null);return p?p[m]:void 0}:n=function(g,m){var p=g.style[m];return!p&&g.currentStyle&&(p=g.currentStyle[m]),p},function(){var g=u.document.documentElement.style,m="userSelect"in g?"userSelect":"MozUserSelect"in g?"MozUserSelect":"WebkitUserSelect"in g?"WebkitUserSelect":"KhtmlUserSelect"in g?"KhtmlUserSelect":"";function p(w){return typeof w.onselectstart!="undefined"&&(w.onselectstart=u.util.falseFunction),m?w.style[m]="none":typeof w.unselectable=="string"&&(w.unselectable="on"),w}function _(w){return typeof w.onselectstart!="undefined"&&(w.onselectstart=null),m?w.style[m]="":typeof w.unselectable=="string"&&(w.unselectable=""),w}u.util.makeElementUnselectable=p,u.util.makeElementSelectable=_}();function l(g){var m=u.jsdomImplForWrapper(g);return m._canvas||m._image}function f(g){if(u.isLikelyNode){var m=u.jsdomImplForWrapper(g);m&&(m._image=null,m._canvas=null,m._currentSrc=null,m._attributes=null,m._classList=null)}}function d(g,m){g.imageSmoothingEnabled=g.imageSmoothingEnabled||g.webkitImageSmoothingEnabled||g.mozImageSmoothingEnabled||g.msImageSmoothingEnabled||g.oImageSmoothingEnabled,g.imageSmoothingEnabled=m}u.util.setImageSmoothing=d,u.util.getById=i,u.util.toArray=o,u.util.addClass=r,u.util.makeElement=t,u.util.wrapElement=e,u.util.getScrollLeftTop=s,u.util.getElementOffset=h,u.util.getNodeCanvas=l,u.util.cleanUpJsdomNode=f})();(function(){function c(o,t){return o+(/\?/.test(o)?"&":"?")+t}function i(){}function a(o,t){t||(t={});var r=t.method?t.method.toUpperCase():"GET",e=t.onComplete||function(){},s=new u.window.XMLHttpRequest,h=t.body||t.parameters;return s.onreadystatechange=function(){s.readyState===4&&(e(s),s.onreadystatechange=i)},r==="GET"&&(h=null,typeof t.parameters=="string"&&(o=c(o,t.parameters))),s.open(r,o,!0),(r==="POST"||r==="PUT")&&s.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),s.send(h),s}u.util.request=a})();u.log=console.log;u.warn=console.warn;(function(){var c=u.util.object.extend,i=u.util.object.clone,a=[];u.util.object.extend(a,{cancelAll:function(){var l=this.splice(0);return l.forEach(function(f){f.cancel()}),l},cancelByCanvas:function(l){if(!l)return[];var f=this.filter(function(d){return typeof d.target=="object"&&d.target.canvas===l});return f.forEach(function(d){d.cancel()}),f},cancelByTarget:function(l){var f=this.findAnimationsByTarget(l);return f.forEach(function(d){d.cancel()}),f},findAnimationIndex:function(l){return this.indexOf(this.findAnimation(l))},findAnimation:function(l){return this.find(function(f){return f.cancel===l})},findAnimationsByTarget:function(l){return l?this.filter(function(f){return f.target===l}):[]}});function o(){return!1}function t(l,f,d,g){return-d*Math.cos(l/g*(Math.PI/2))+d+f}function r(l){l||(l={});var f=!1,d,g=function(){var m=u.runningAnimations.indexOf(d);return m>-1&&u.runningAnimations.splice(m,1)[0]};return d=c(i(l),{cancel:function(){return f=!0,g()},currentValue:"startValue"in l?l.startValue:0,completionRate:0,durationRate:0}),u.runningAnimations.push(d),h(function(m){var p=m||+new Date,_=l.duration||500,w=p+_,D,B=l.onChange||o,N=l.abort||o,G=l.onComplete||o,z=l.easing||t,H="startValue"in l?l.startValue.length>0:!1,U="startValue"in l?l.startValue:0,K="endValue"in l?l.endValue:100,Q=l.byValue||(H?U.map(function(J,v){return K[v]-U[v]}):K-U);l.onStart&&l.onStart(),function J(v){D=v||+new Date;var b=D>w?_:D-p,S=b/_,C=H?U.map(function(x,y){return z(b,U[y],Q[y],_)}):z(b,U,Q,_),P=Math.abs(H?(C[0]-U[0])/Q[0]:(C-U)/Q);if(d.currentValue=H?C.slice():C,d.completionRate=P,d.durationRate=S,!f){if(N(C,P,S)){g();return}if(D>w){d.currentValue=H?K.slice():K,d.completionRate=1,d.durationRate=1,B(H?K.slice():K,1,1),G(K,1,1),g();return}else B(C,P,S),h(J)}}(p)}),d.cancel}var e=u.window.requestAnimationFrame||u.window.webkitRequestAnimationFrame||u.window.mozRequestAnimationFrame||u.window.oRequestAnimationFrame||u.window.msRequestAnimationFrame||function(l){return u.window.setTimeout(l,1e3/60)},s=u.window.cancelAnimationFrame||u.window.clearTimeout;function h(){return e.apply(u.window,arguments)}function n(){return s.apply(u.window,arguments)}u.util.animate=r,u.util.requestAnimFrame=h,u.util.cancelAnimFrame=n,u.runningAnimations=a})();(function(){function c(a,o,t){var r="rgba("+parseInt(a[0]+t*(o[0]-a[0]),10)+","+parseInt(a[1]+t*(o[1]-a[1]),10)+","+parseInt(a[2]+t*(o[2]-a[2]),10);return r+=","+(a&&o?parseFloat(a[3]+t*(o[3]-a[3])):1),r+=")",r}function i(a,o,t,r){var e=new u.Color(a).getSource(),s=new u.Color(o).getSource(),h=r.onComplete,n=r.onChange;return r=r||{},u.util.animate(u.util.object.extend(r,{duration:t||500,startValue:e,endValue:s,byValue:s,easing:function(l,f,d,g){var m=r.colorEasing?r.colorEasing(l,g):1-Math.cos(l/g*(Math.PI/2));return c(f,d,m)},onComplete:function(l,f,d){if(h)return h(c(s,s,0),f,d)},onChange:function(l,f,d){if(n){if(Array.isArray(l))return n(c(l,l,0),f,d);n(l,f,d)}}}))}u.util.animateColor=i})();(function(){function c(v,b,S,C){return v<Math.abs(b)?(v=b,C=S/4):b===0&&v===0?C=S/(2*Math.PI)*Math.asin(1):C=S/(2*Math.PI)*Math.asin(b/v),{a:v,c:b,p:S,s:C}}function i(v,b,S){return v.a*Math.pow(2,10*(b-=1))*Math.sin((b*S-v.s)*(2*Math.PI)/v.p)}function a(v,b,S,C){return S*((v=v/C-1)*v*v+1)+b}function o(v,b,S,C){return v/=C/2,v<1?S/2*v*v*v+b:S/2*((v-=2)*v*v+2)+b}function t(v,b,S,C){return S*(v/=C)*v*v*v+b}function r(v,b,S,C){return-S*((v=v/C-1)*v*v*v-1)+b}function e(v,b,S,C){return v/=C/2,v<1?S/2*v*v*v*v+b:-S/2*((v-=2)*v*v*v-2)+b}function s(v,b,S,C){return S*(v/=C)*v*v*v*v+b}function h(v,b,S,C){return S*((v=v/C-1)*v*v*v*v+1)+b}function n(v,b,S,C){return v/=C/2,v<1?S/2*v*v*v*v*v+b:S/2*((v-=2)*v*v*v*v+2)+b}function l(v,b,S,C){return-S*Math.cos(v/C*(Math.PI/2))+S+b}function f(v,b,S,C){return S*Math.sin(v/C*(Math.PI/2))+b}function d(v,b,S,C){return-S/2*(Math.cos(Math.PI*v/C)-1)+b}function g(v,b,S,C){return v===0?b:S*Math.pow(2,10*(v/C-1))+b}function m(v,b,S,C){return v===C?b+S:S*(-Math.pow(2,-10*v/C)+1)+b}function p(v,b,S,C){return v===0?b:v===C?b+S:(v/=C/2,v<1?S/2*Math.pow(2,10*(v-1))+b:S/2*(-Math.pow(2,-10*--v)+2)+b)}function _(v,b,S,C){return-S*(Math.sqrt(1-(v/=C)*v)-1)+b}function w(v,b,S,C){return S*Math.sqrt(1-(v=v/C-1)*v)+b}function D(v,b,S,C){return v/=C/2,v<1?-S/2*(Math.sqrt(1-v*v)-1)+b:S/2*(Math.sqrt(1-(v-=2)*v)+1)+b}function B(v,b,S,C){var P=1.70158,x=0,y=S;if(v===0)return b;if(v/=C,v===1)return b+S;x||(x=C*.3);var T=c(y,S,x,P);return-i(T,v,C)+b}function N(v,b,S,C){var P=1.70158,x=0,y=S;if(v===0)return b;if(v/=C,v===1)return b+S;x||(x=C*.3);var T=c(y,S,x,P);return T.a*Math.pow(2,-10*v)*Math.sin((v*C-T.s)*(2*Math.PI)/T.p)+T.c+b}function G(v,b,S,C){var P=1.70158,x=0,y=S;if(v===0)return b;if(v/=C/2,v===2)return b+S;x||(x=C*(.3*1.5));var T=c(y,S,x,P);return v<1?-.5*i(T,v,C)+b:T.a*Math.pow(2,-10*(v-=1))*Math.sin((v*C-T.s)*(2*Math.PI)/T.p)*.5+T.c+b}function z(v,b,S,C,P){return P===void 0&&(P=1.70158),S*(v/=C)*v*((P+1)*v-P)+b}function H(v,b,S,C,P){return P===void 0&&(P=1.70158),S*((v=v/C-1)*v*((P+1)*v+P)+1)+b}function U(v,b,S,C,P){return P===void 0&&(P=1.70158),v/=C/2,v<1?S/2*(v*v*(((P*=1.525)+1)*v-P))+b:S/2*((v-=2)*v*(((P*=1.525)+1)*v+P)+2)+b}function K(v,b,S,C){return S-Q(C-v,0,S,C)+b}function Q(v,b,S,C){return(v/=C)<1/2.75?S*(7.5625*v*v)+b:v<2/2.75?S*(7.5625*(v-=1.5/2.75)*v+.75)+b:v<2.5/2.75?S*(7.5625*(v-=2.25/2.75)*v+.9375)+b:S*(7.5625*(v-=2.625/2.75)*v+.984375)+b}function J(v,b,S,C){return v<C/2?K(v*2,0,S,C)*.5+b:Q(v*2-C,0,S,C)*.5+S*.5+b}u.util.ease={easeInQuad:function(v,b,S,C){return S*(v/=C)*v+b},easeOutQuad:function(v,b,S,C){return-S*(v/=C)*(v-2)+b},easeInOutQuad:function(v,b,S,C){return v/=C/2,v<1?S/2*v*v+b:-S/2*(--v*(v-2)-1)+b},easeInCubic:function(v,b,S,C){return S*(v/=C)*v*v+b},easeOutCubic:a,easeInOutCubic:o,easeInQuart:t,easeOutQuart:r,easeInOutQuart:e,easeInQuint:s,easeOutQuint:h,easeInOutQuint:n,easeInSine:l,easeOutSine:f,easeInOutSine:d,easeInExpo:g,easeOutExpo:m,easeInOutExpo:p,easeInCirc:_,easeOutCirc:w,easeInOutCirc:D,easeInElastic:B,easeOutElastic:N,easeInOutElastic:G,easeInBack:z,easeOutBack:H,easeInOutBack:U,easeInBounce:K,easeOutBounce:Q,easeInOutBounce:J}})();(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.util.object.extend,o=i.util.object.clone,t=i.util.toFixed,r=i.util.parseUnit,e=i.util.multiplyTransformMatrices,s=["path","circle","polygon","polyline","ellipse","rect","line","image","text"],h=["symbol","image","marker","pattern","view","svg"],n=["pattern","defs","symbol","metadata","clipPath","mask","desc"],l=["symbol","g","a","svg","clipPath","defs"],f={cx:"left",x:"left",r:"radius",cy:"top",y:"top",display:"visible",visibility:"visible",transform:"transformMatrix","fill-opacity":"fillOpacity","fill-rule":"fillRule","font-family":"fontFamily","font-size":"fontSize","font-style":"fontStyle","font-weight":"fontWeight","letter-spacing":"charSpacing","paint-order":"paintFirst","stroke-dasharray":"strokeDashArray","stroke-dashoffset":"strokeDashOffset","stroke-linecap":"strokeLineCap","stroke-linejoin":"strokeLineJoin","stroke-miterlimit":"strokeMiterLimit","stroke-opacity":"strokeOpacity","stroke-width":"strokeWidth","text-decoration":"textDecoration","text-anchor":"textAnchor",opacity:"opacity","clip-path":"clipPath","clip-rule":"clipRule","vector-effect":"strokeUniform","image-rendering":"imageSmoothing"},d={stroke:"strokeOpacity",fill:"fillOpacity"},g="font-size",m="clip-path";i.svgValidTagNamesRegEx=w(s),i.svgViewBoxElementsRegEx=w(h),i.svgInvalidAncestorsRegEx=w(n),i.svgValidParentsRegEx=w(l),i.cssRules={},i.gradientDefs={},i.clipPaths={};function p(x){return x in f?f[x]:x}function _(x,y,T,E){var L=Object.prototype.toString.call(y)==="[object Array]",k;if((x==="fill"||x==="stroke")&&y==="none")y="";else{if(x==="strokeUniform")return y==="non-scaling-stroke";if(x==="strokeDashArray")y==="none"?y=null:y=y.replace(/,/g," ").split(/\s+/).map(parseFloat);else if(x==="transformMatrix")T&&T.transformMatrix?y=e(T.transformMatrix,i.parseTransformAttribute(y)):y=i.parseTransformAttribute(y);else if(x==="visible")y=y!=="none"&&y!=="hidden",T&&T.visible===!1&&(y=!1);else if(x==="opacity")y=parseFloat(y),T&&typeof T.opacity!="undefined"&&(y*=T.opacity);else if(x==="textAnchor")y=y==="start"?"left":y==="end"?"right":"center";else if(x==="charSpacing")k=r(y,E)/E*1e3;else if(x==="paintFirst"){var W=y.indexOf("fill"),Y=y.indexOf("stroke"),y="fill";(W>-1&&Y>-1&&Y<W||W===-1&&Y>-1)&&(y="stroke")}else{if(x==="href"||x==="xlink:href"||x==="font")return y;if(x==="imageSmoothing")return y==="optimizeQuality";k=L?y.map(r):r(y,E)}}return!L&&isNaN(k)?y:k}function w(x){return new RegExp("^("+x.join("|")+")\\b","i")}function D(x){for(var y in d)if(!(typeof x[d[y]]=="undefined"||x[y]==="")){if(typeof x[y]=="undefined"){if(!i.Object.prototype[y])continue;x[y]=i.Object.prototype[y]}if(x[y].indexOf("url(")!==0){var T=new i.Color(x[y]);x[y]=T.setAlpha(t(T.getAlpha()*x[d[y]],2)).toRgba()}}return x}function B(x,y){var T,E=[],L,k,W;for(k=0,W=y.length;k<W;k++)T=y[k],L=x.getElementsByTagName(T),E=E.concat(Array.prototype.slice.call(L));return E}i.parseTransformAttribute=function(){function x(I,$){var et=i.util.cos($[0]),it=i.util.sin($[0]),nt=0,rt=0;$.length===3&&(nt=$[1],rt=$[2]),I[0]=et,I[1]=it,I[2]=-it,I[3]=et,I[4]=nt-(et*nt-it*rt),I[5]=rt-(it*nt+et*rt)}function y(I,$){var et=$[0],it=$.length===2?$[1]:$[0];I[0]=et,I[3]=it}function T(I,$,et){I[et]=Math.tan(i.util.degreesToRadians($[0]))}function E(I,$){I[4]=$[0],$.length===2&&(I[5]=$[1])}var L=i.iMatrix,k=i.reNum,W=i.commaWsp,Y="(?:(skewX)\\s*\\(\\s*("+k+")\\s*\\))",V="(?:(skewY)\\s*\\(\\s*("+k+")\\s*\\))",M="(?:(rotate)\\s*\\(\\s*("+k+")(?:"+W+"("+k+")"+W+"("+k+"))?\\s*\\))",O="(?:(scale)\\s*\\(\\s*("+k+")(?:"+W+"("+k+"))?\\s*\\))",j="(?:(translate)\\s*\\(\\s*("+k+")(?:"+W+"("+k+"))?\\s*\\))",R="(?:(matrix)\\s*\\(\\s*("+k+")"+W+"("+k+")"+W+"("+k+")"+W+"("+k+")"+W+"("+k+")"+W+"("+k+")\\s*\\))",A="(?:"+R+"|"+j+"|"+O+"|"+M+"|"+Y+"|"+V+")",X="(?:"+A+"(?:"+W+"*"+A+")*)",q="^\\s*(?:"+X+"?)\\s*$",tt=new RegExp(q),Z=new RegExp(A,"g");return function(I){var $=L.concat(),et=[];if(!I||I&&!tt.test(I))return $;I.replace(Z,function(nt){var rt=new RegExp(A).exec(nt).filter(function(ct){return!!ct}),ot=rt[1],st=rt.slice(2).map(parseFloat);switch(ot){case"translate":E($,st);break;case"rotate":st[0]=i.util.degreesToRadians(st[0]),x($,st);break;case"scale":y($,st);break;case"skewX":T($,st,2);break;case"skewY":T($,st,1);break;case"matrix":$=st;break}et.push($.concat()),$=L.concat()});for(var it=et[0];et.length>1;)et.shift(),it=i.util.multiplyTransformMatrices(it,et[0]);return it}}();function N(x,y){var T,E;x.replace(/;\s*$/,"").split(";").forEach(function(L){var k=L.split(":");T=k[0].trim().toLowerCase(),E=k[1].trim(),y[T]=E})}function G(x,y){var T,E;for(var L in x)typeof x[L]!="undefined"&&(T=L.toLowerCase(),E=x[L],y[T]=E)}function z(x,y){var T={};for(var E in i.cssRules[y])if(H(x,E.split(" ")))for(var L in i.cssRules[y][E])T[L]=i.cssRules[y][E][L];return T}function H(x,y){var T,E=!0;return T=K(x,y.pop()),T&&y.length&&(E=U(x,y)),T&&E&&y.length===0}function U(x,y){for(var T,E=!0;x.parentNode&&x.parentNode.nodeType===1&&y.length;)E&&(T=y.pop()),x=x.parentNode,E=K(x,T);return y.length===0}function K(x,y){var T=x.nodeName,E=x.getAttribute("class"),L=x.getAttribute("id"),k,W;if(k=new RegExp("^"+T,"i"),y=y.replace(k,""),L&&y.length&&(k=new RegExp("#"+L+"(?![a-zA-Z\\-]+)","i"),y=y.replace(k,"")),E&&y.length)for(E=E.split(" "),W=E.length;W--;)k=new RegExp("\\."+E[W]+"(?![a-zA-Z\\-]+)","i"),y=y.replace(k,"");return y.length===0}function Q(x,y){var T;if(x.getElementById&&(T=x.getElementById(y)),T)return T;var E,L,k,W=x.getElementsByTagName("*");for(L=0,k=W.length;L<k;L++)if(E=W[L],y===E.getAttribute("id"))return E}function J(x){for(var y=B(x,["use","svg:use"]),T=0;y.length&&T<y.length;){var E=y[T],L=E.getAttribute("xlink:href")||E.getAttribute("href");if(L===null)return;var k=L.substr(1),W=E.getAttribute("x")||0,Y=E.getAttribute("y")||0,V=Q(x,k).cloneNode(!0),M=(V.getAttribute("transform")||"")+" translate("+W+", "+Y+")",O,j=y.length,R,A,X,q,tt=i.svgNS;if(b(V),/^svg$/i.test(V.nodeName)){var Z=V.ownerDocument.createElementNS(tt,"g");for(A=0,X=V.attributes,q=X.length;A<q;A++)R=X.item(A),Z.setAttributeNS(tt,R.nodeName,R.nodeValue);for(;V.firstChild;)Z.appendChild(V.firstChild);V=Z}for(A=0,X=E.attributes,q=X.length;A<q;A++)R=X.item(A),!(R.nodeName==="x"||R.nodeName==="y"||R.nodeName==="xlink:href"||R.nodeName==="href")&&(R.nodeName==="transform"?M=R.nodeValue+" "+M:V.setAttribute(R.nodeName,R.nodeValue));V.setAttribute("transform",M),V.setAttribute("instantiated_by_use","1"),V.removeAttribute("id"),O=E.parentNode,O.replaceChild(V,E),y.length===j&&T++}}var v=new RegExp("^\\s*("+i.reNum+"+)\\s*,?\\s*("+i.reNum+"+)\\s*,?\\s*("+i.reNum+"+)\\s*,?\\s*("+i.reNum+"+)\\s*$");function b(x){if(!i.svgViewBoxElementsRegEx.test(x.nodeName))return{};var y=x.getAttribute("viewBox"),T=1,E=1,L=0,k=0,W,Y,V,M,O=x.getAttribute("width"),j=x.getAttribute("height"),R=x.getAttribute("x")||0,A=x.getAttribute("y")||0,X=x.getAttribute("preserveAspectRatio")||"",q=!y||!(y=y.match(v)),tt=!O||!j||O==="100%"||j==="100%",Z=q&&tt,I={},$="",et=0,it=0;if(I.width=0,I.height=0,I.toBeParsed=Z,q&&(R||A)&&x.parentNode&&x.parentNode.nodeName!=="#document"&&($=" translate("+r(R)+" "+r(A)+") ",V=(x.getAttribute("transform")||"")+$,x.setAttribute("transform",V),x.removeAttribute("x"),x.removeAttribute("y")),Z)return I;if(q)return I.width=r(O),I.height=r(j),I;if(L=-parseFloat(y[1]),k=-parseFloat(y[2]),W=parseFloat(y[3]),Y=parseFloat(y[4]),I.minX=L,I.minY=k,I.viewBoxWidth=W,I.viewBoxHeight=Y,tt?(I.width=W,I.height=Y):(I.width=r(O),I.height=r(j),T=I.width/W,E=I.height/Y),X=i.util.parsePreserveAspectRatioAttribute(X),X.alignX!=="none"&&(X.meetOrSlice==="meet"&&(E=T=T>E?E:T),X.meetOrSlice==="slice"&&(E=T=T>E?T:E),et=I.width-W*T,it=I.height-Y*T,X.alignX==="Mid"&&(et/=2),X.alignY==="Mid"&&(it/=2),X.alignX==="Min"&&(et=0),X.alignY==="Min"&&(it=0)),T===1&&E===1&&L===0&&k===0&&R===0&&A===0)return I;if((R||A)&&x.parentNode.nodeName!=="#document"&&($=" translate("+r(R)+" "+r(A)+") "),V=$+" matrix("+T+" 0 0 "+E+" "+(L*T+et)+" "+(k*E+it)+") ",x.nodeName==="svg"){for(M=x.ownerDocument.createElementNS(i.svgNS,"g");x.firstChild;)M.appendChild(x.firstChild);x.appendChild(M)}else M=x,M.removeAttribute("x"),M.removeAttribute("y"),V=M.getAttribute("transform")+V;return M.setAttribute("transform",V),I}function S(x,y){for(;x&&(x=x.parentNode);)if(x.nodeName&&y.test(x.nodeName.replace("svg:",""))&&!x.getAttribute("instantiated_by_use"))return!0;return!1}i.parseSVGDocument=function(x,y,T,E){if(x){J(x);var L=i.Object.__uid++,k,W,Y=b(x),V=i.util.toArray(x.getElementsByTagName("*"));if(Y.crossOrigin=E&&E.crossOrigin,Y.svgUid=L,V.length===0&&i.isLikelyNode){V=x.selectNodes('//*[name(.)!="svg"]');var M=[];for(k=0,W=V.length;k<W;k++)M[k]=V[k];V=M}var O=V.filter(function(R){return b(R),i.svgValidTagNamesRegEx.test(R.nodeName.replace("svg:",""))&&!S(R,i.svgInvalidAncestorsRegEx)});if(!O||O&&!O.length){y&&y([],{});return}var j={};V.filter(function(R){return R.nodeName.replace("svg:","")==="clipPath"}).forEach(function(R){var A=R.getAttribute("id");j[A]=i.util.toArray(R.getElementsByTagName("*")).filter(function(X){return i.svgValidTagNamesRegEx.test(X.nodeName.replace("svg:",""))})}),i.gradientDefs[L]=i.getGradientDefs(x),i.cssRules[L]=i.getCSSRules(x),i.clipPaths[L]=j,i.parseElements(O,function(R,A){y&&(y(R,Y,A,V),delete i.gradientDefs[L],delete i.cssRules[L],delete i.clipPaths[L])},o(Y),T,E)}};function C(x,y){var T=["gradientTransform","x1","x2","y1","y2","gradientUnits","cx","cy","r","fx","fy"],E="xlink:href",L=y.getAttribute(E).substr(1),k=Q(x,L);if(k&&k.getAttribute(E)&&C(x,k),T.forEach(function(Y){k&&!y.hasAttribute(Y)&&k.hasAttribute(Y)&&y.setAttribute(Y,k.getAttribute(Y))}),!y.children.length)for(var W=k.cloneNode(!0);W.firstChild;)y.appendChild(W.firstChild);y.removeAttribute(E)}var P=new RegExp("(normal|italic)?\\s*(normal|small-caps)?\\s*(normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900)?\\s*("+i.reNum+"(?:px|cm|mm|em|pt|pc|in)*)(?:\\/(normal|"+i.reNum+"))?\\s+(.*)");a(i,{parseFontDeclaration:function(x,y){var T=x.match(P);if(T){var E=T[1],L=T[3],k=T[4],W=T[5],Y=T[6];E&&(y.fontStyle=E),L&&(y.fontWeight=isNaN(parseFloat(L))?L:parseFloat(L)),k&&(y.fontSize=r(k)),Y&&(y.fontFamily=Y),W&&(y.lineHeight=W==="normal"?1:W)}},getGradientDefs:function(x){var y=["linearGradient","radialGradient","svg:linearGradient","svg:radialGradient"],T=B(x,y),E,L=0,k={};for(L=T.length;L--;)E=T[L],E.getAttribute("xlink:href")&&C(x,E),k[E.getAttribute("id")]=E;return k},parseAttributes:function(x,y,T){if(x){var E,L={},k,W;typeof T=="undefined"&&(T=x.getAttribute("svgUid")),x.parentNode&&i.svgValidParentsRegEx.test(x.parentNode.nodeName)&&(L=i.parseAttributes(x.parentNode,y,T));var Y=y.reduce(function(X,q){return E=x.getAttribute(q),E&&(X[q]=E),X},{}),V=a(z(x,T),i.parseStyleAttribute(x));Y=a(Y,V),V[m]&&x.setAttribute(m,V[m]),k=W=L.fontSize||i.Text.DEFAULT_SVG_FONT_SIZE,Y[g]&&(Y[g]=k=r(Y[g],W));var M,O,j={};for(var R in Y)M=p(R),O=_(M,Y[R],L,k),j[M]=O;j&&j.font&&i.parseFontDeclaration(j.font,j);var A=a(L,j);return i.svgValidParentsRegEx.test(x.nodeName)?A:D(A)}},parseElements:function(x,y,T,E,L){new i.ElementsParser(x,y,T,E,L).parse()},parseStyleAttribute:function(x){var y={},T=x.getAttribute("style");return T&&(typeof T=="string"?N(T,y):G(T,y)),y},parsePointsAttribute:function(x){if(!x)return null;x=x.replace(/,/g," ").trim(),x=x.split(/\s+/);var y=[],T,E;for(T=0,E=x.length;T<E;T+=2)y.push({x:parseFloat(x[T]),y:parseFloat(x[T+1])});return y},getCSSRules:function(x){var y=x.getElementsByTagName("style"),T,E,L={},k;for(T=0,E=y.length;T<E;T++){var W=y[T].textContent;W=W.replace(/\/\*[\s\S]*?\*\//g,""),W.trim()!==""&&(k=W.split("}"),k=k.filter(function(Y){return Y.trim()}),k.forEach(function(Y){var V=Y.split("{"),M={},O=V[1].trim(),j=O.split(";").filter(function(q){return q.trim()});for(T=0,E=j.length;T<E;T++){var R=j[T].split(":"),A=R[0].trim(),X=R[1].trim();M[A]=X}Y=V[0].trim(),Y.split(",").forEach(function(q){q=q.replace(/^svg/i,"").trim(),q!==""&&(L[q]?i.util.object.extend(L[q],M):L[q]=i.util.object.clone(M))})}))}return L},loadSVGFromURL:function(x,y,T,E){x=x.replace(/^\n\s*/,"").trim(),new i.util.request(x,{method:"get",onComplete:L});function L(k){var W=k.responseXML;if(!W||!W.documentElement)return y&&y(null),!1;i.parseSVGDocument(W.documentElement,function(Y,V,M,O){y&&y(Y,V,M,O)},T,E)}},loadSVGFromString:function(x,y,T,E){var L=new i.window.DOMParser,k=L.parseFromString(x.trim(),"text/xml");i.parseSVGDocument(k.documentElement,function(W,Y,V,M){y(W,Y,V,M)},T,E)}})})(F);u.ElementsParser=function(c,i,a,o,t,r){this.elements=c,this.callback=i,this.options=a,this.reviver=o,this.svgUid=a&&a.svgUid||0,this.parsingOptions=t,this.regexUrl=/^url\(['"]?#([^'"]+)['"]?\)/g,this.doc=r};(function(c){c.parse=function(){this.instances=new Array(this.elements.length),this.numElements=this.elements.length,this.createObjects()},c.createObjects=function(){var i=this;this.elements.forEach(function(a,o){a.setAttribute("svgUid",i.svgUid),i.createObject(a,o)})},c.findTag=function(i){return u[u.util.string.capitalize(i.tagName.replace("svg:",""))]},c.createObject=function(i,a){var o=this.findTag(i);if(o&&o.fromElement)try{o.fromElement(i,this.createCallback(a,i),this.options)}catch(t){u.log(t)}else this.checkIfDone()},c.createCallback=function(i,a){var o=this;return function(t){var r;o.resolveGradient(t,a,"fill"),o.resolveGradient(t,a,"stroke"),t instanceof u.Image&&t._originalElement&&(r=t.parsePreserveAspectRatioAttribute(a)),t._removeTransformMatrix(r),o.resolveClipPath(t,a),o.reviver&&o.reviver(a,t),o.instances[i]=t,o.checkIfDone()}},c.extractPropertyDefinition=function(i,a,o){var t=i[a],r=this.regexUrl;if(r.test(t)){r.lastIndex=0;var e=r.exec(t)[1];return r.lastIndex=0,u[o][this.svgUid][e]}},c.resolveGradient=function(i,a,o){var t=this.extractPropertyDefinition(i,o,"gradientDefs");if(t){var r=a.getAttribute(o+"-opacity"),e=u.Gradient.fromElement(t,i,r,this.options);i.set(o,e)}},c.createClipPathCallback=function(i,a){return function(o){o._removeTransformMatrix(),o.fillRule=o.clipRule,a.push(o)}},c.resolveClipPath=function(i,a){var o=this.extractPropertyDefinition(i,"clipPath","clipPaths"),t,r,e,s,h,n;if(o){s=[],e=u.util.invertTransform(i.calcTransformMatrix());for(var l=o[0].parentNode,f=a;f.parentNode&&f.getAttribute("clip-path")!==i.clipPath;)f=f.parentNode;f.parentNode.appendChild(l);for(var d=0;d<o.length;d++)t=o[d],r=this.findTag(t),r.fromElement(t,this.createClipPathCallback(i,s),this.options);s.length===1?o=s[0]:o=new u.Group(s),h=u.util.multiplyTransformMatrices(e,o.calcTransformMatrix()),o.clipPath&&this.resolveClipPath(o,f);var n=u.util.qrDecompose(h);o.flipX=!1,o.flipY=!1,o.set("scaleX",n.scaleX),o.set("scaleY",n.scaleY),o.angle=n.angle,o.skewX=n.skewX,o.skewY=0,o.setPositionByOrigin({x:n.translateX,y:n.translateY},"center","center"),i.clipPath=o}else delete i.clipPath},c.checkIfDone=function(){--this.numElements===0&&(this.instances=this.instances.filter(function(i){return i!=null}),this.callback(this.instances,this.elements))}})(u.ElementsParser.prototype);(function(c){"use strict";var i=c.fabric||(c.fabric={});if(i.Point){i.warn("fabric.Point is already defined");return}i.Point=a;function a(o,t){this.x=o,this.y=t}a.prototype={type:"point",constructor:a,add:function(o){return new a(this.x+o.x,this.y+o.y)},addEquals:function(o){return this.x+=o.x,this.y+=o.y,this},scalarAdd:function(o){return new a(this.x+o,this.y+o)},scalarAddEquals:function(o){return this.x+=o,this.y+=o,this},subtract:function(o){return new a(this.x-o.x,this.y-o.y)},subtractEquals:function(o){return this.x-=o.x,this.y-=o.y,this},scalarSubtract:function(o){return new a(this.x-o,this.y-o)},scalarSubtractEquals:function(o){return this.x-=o,this.y-=o,this},multiply:function(o){return new a(this.x*o,this.y*o)},multiplyEquals:function(o){return this.x*=o,this.y*=o,this},divide:function(o){return new a(this.x/o,this.y/o)},divideEquals:function(o){return this.x/=o,this.y/=o,this},eq:function(o){return this.x===o.x&&this.y===o.y},lt:function(o){return this.x<o.x&&this.y<o.y},lte:function(o){return this.x<=o.x&&this.y<=o.y},gt:function(o){return this.x>o.x&&this.y>o.y},gte:function(o){return this.x>=o.x&&this.y>=o.y},lerp:function(o,t){return typeof t=="undefined"&&(t=.5),t=Math.max(Math.min(1,t),0),new a(this.x+(o.x-this.x)*t,this.y+(o.y-this.y)*t)},distanceFrom:function(o){var t=this.x-o.x,r=this.y-o.y;return Math.sqrt(t*t+r*r)},midPointFrom:function(o){return this.lerp(o)},min:function(o){return new a(Math.min(this.x,o.x),Math.min(this.y,o.y))},max:function(o){return new a(Math.max(this.x,o.x),Math.max(this.y,o.y))},toString:function(){return this.x+","+this.y},setXY:function(o,t){return this.x=o,this.y=t,this},setX:function(o){return this.x=o,this},setY:function(o){return this.y=o,this},setFromPoint:function(o){return this.x=o.x,this.y=o.y,this},swap:function(o){var t=this.x,r=this.y;this.x=o.x,this.y=o.y,o.x=t,o.y=r},clone:function(){return new a(this.x,this.y)}}})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={});if(i.Intersection){i.warn("fabric.Intersection is already defined");return}function a(o){this.status=o,this.points=[]}i.Intersection=a,i.Intersection.prototype={constructor:a,appendPoint:function(o){return this.points.push(o),this},appendPoints:function(o){return this.points=this.points.concat(o),this}},i.Intersection.intersectLineLine=function(o,t,r,e){var s,h=(e.x-r.x)*(o.y-r.y)-(e.y-r.y)*(o.x-r.x),n=(t.x-o.x)*(o.y-r.y)-(t.y-o.y)*(o.x-r.x),l=(e.y-r.y)*(t.x-o.x)-(e.x-r.x)*(t.y-o.y);if(l!==0){var f=h/l,d=n/l;0<=f&&f<=1&&0<=d&&d<=1?(s=new a("Intersection"),s.appendPoint(new i.Point(o.x+f*(t.x-o.x),o.y+f*(t.y-o.y)))):s=new a}else h===0||n===0?s=new a("Coincident"):s=new a("Parallel");return s},i.Intersection.intersectLinePolygon=function(o,t,r){var e=new a,s=r.length,h,n,l,f;for(f=0;f<s;f++)h=r[f],n=r[(f+1)%s],l=a.intersectLineLine(o,t,h,n),e.appendPoints(l.points);return e.points.length>0&&(e.status="Intersection"),e},i.Intersection.intersectPolygonPolygon=function(o,t){var r=new a,e=o.length,s;for(s=0;s<e;s++){var h=o[s],n=o[(s+1)%e],l=a.intersectLinePolygon(h,n,t);r.appendPoints(l.points)}return r.points.length>0&&(r.status="Intersection"),r},i.Intersection.intersectPolygonRectangle=function(o,t,r){var e=t.min(r),s=t.max(r),h=new i.Point(s.x,e.y),n=new i.Point(e.x,s.y),l=a.intersectLinePolygon(e,h,o),f=a.intersectLinePolygon(h,s,o),d=a.intersectLinePolygon(s,n,o),g=a.intersectLinePolygon(n,e,o),m=new a;return m.appendPoints(l.points),m.appendPoints(f.points),m.appendPoints(d.points),m.appendPoints(g.points),m.points.length>0&&(m.status="Intersection"),m}})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={});if(i.Color){i.warn("fabric.Color is already defined.");return}function a(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}i.Color=a,i.Color.prototype={_tryParsingColor:function(t){var r;t in a.colorNameMap&&(t=a.colorNameMap[t]),t==="transparent"&&(r=[255,255,255,0]),r||(r=a.sourceFromHex(t)),r||(r=a.sourceFromRgb(t)),r||(r=a.sourceFromHsl(t)),r||(r=[0,0,0,1]),r&&this.setSource(r)},_rgbToHsl:function(t,r,e){t/=255,r/=255,e/=255;var s,h,n,l=i.util.array.max([t,r,e]),f=i.util.array.min([t,r,e]);if(n=(l+f)/2,l===f)s=h=0;else{var d=l-f;switch(h=n>.5?d/(2-l-f):d/(l+f),l){case t:s=(r-e)/d+(r<e?6:0);break;case r:s=(e-t)/d+2;break;case e:s=(t-r)/d+4;break}s/=6}return[Math.round(s*360),Math.round(h*100),Math.round(n*100)]},getSource:function(){return this._source},setSource:function(t){this._source=t},toRgb:function(){var t=this.getSource();return"rgb("+t[0]+","+t[1]+","+t[2]+")"},toRgba:function(){var t=this.getSource();return"rgba("+t[0]+","+t[1]+","+t[2]+","+t[3]+")"},toHsl:function(){var t=this.getSource(),r=this._rgbToHsl(t[0],t[1],t[2]);return"hsl("+r[0]+","+r[1]+"%,"+r[2]+"%)"},toHsla:function(){var t=this.getSource(),r=this._rgbToHsl(t[0],t[1],t[2]);return"hsla("+r[0]+","+r[1]+"%,"+r[2]+"%,"+t[3]+")"},toHex:function(){var t=this.getSource(),r,e,s;return r=t[0].toString(16),r=r.length===1?"0"+r:r,e=t[1].toString(16),e=e.length===1?"0"+e:e,s=t[2].toString(16),s=s.length===1?"0"+s:s,r.toUpperCase()+e.toUpperCase()+s.toUpperCase()},toHexa:function(){var t=this.getSource(),r;return r=Math.round(t[3]*255),r=r.toString(16),r=r.length===1?"0"+r:r,this.toHex()+r.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(t){var r=this.getSource();return r[3]=t,this.setSource(r),this},toGrayscale:function(){var t=this.getSource(),r=parseInt((t[0]*.3+t[1]*.59+t[2]*.11).toFixed(0),10),e=t[3];return this.setSource([r,r,r,e]),this},toBlackWhite:function(t){var r=this.getSource(),e=(r[0]*.3+r[1]*.59+r[2]*.11).toFixed(0),s=r[3];return t=t||127,e=Number(e)<Number(t)?0:255,this.setSource([e,e,e,s]),this},overlayWith:function(t){t instanceof a||(t=new a(t));var r=[],e=this.getAlpha(),s=.5,h=this.getSource(),n=t.getSource(),l;for(l=0;l<3;l++)r.push(Math.round(h[l]*(1-s)+n[l]*s));return r[3]=e,this.setSource(r),this}},i.Color.reRGBa=/^rgba?\(\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*,\s*(\d{1,3}(?:\.\d+)?\%?)\s*(?:\s*,\s*((?:\d*\.?\d+)?)\s*)?\)$/i,i.Color.reHSLa=/^hsla?\(\s*(\d{1,3})\s*,\s*(\d{1,3}\%)\s*,\s*(\d{1,3}\%)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/i,i.Color.reHex=/^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i,i.Color.colorNameMap={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aqua:"#00FFFF",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",blue:"#0000FF",blueviolet:"#8A2BE2",brown:"#A52A2A",burlywood:"#DEB887",cadetblue:"#5F9EA0",chartreuse:"#7FFF00",chocolate:"#D2691E",coral:"#FF7F50",cornflowerblue:"#6495ED",cornsilk:"#FFF8DC",crimson:"#DC143C",cyan:"#00FFFF",darkblue:"#00008B",darkcyan:"#008B8B",darkgoldenrod:"#B8860B",darkgray:"#A9A9A9",darkgrey:"#A9A9A9",darkgreen:"#006400",darkkhaki:"#BDB76B",darkmagenta:"#8B008B",darkolivegreen:"#556B2F",darkorange:"#FF8C00",darkorchid:"#9932CC",darkred:"#8B0000",darksalmon:"#E9967A",darkseagreen:"#8FBC8F",darkslateblue:"#483D8B",darkslategray:"#2F4F4F",darkslategrey:"#2F4F4F",darkturquoise:"#00CED1",darkviolet:"#9400D3",deeppink:"#FF1493",deepskyblue:"#00BFFF",dimgray:"#696969",dimgrey:"#696969",dodgerblue:"#1E90FF",firebrick:"#B22222",floralwhite:"#FFFAF0",forestgreen:"#228B22",fuchsia:"#FF00FF",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",gray:"#808080",grey:"#808080",green:"#008000",greenyellow:"#ADFF2F",honeydew:"#F0FFF0",hotpink:"#FF69B4",indianred:"#CD5C5C",indigo:"#4B0082",ivory:"#FFFFF0",khaki:"#F0E68C",lavender:"#E6E6FA",lavenderblush:"#FFF0F5",lawngreen:"#7CFC00",lemonchiffon:"#FFFACD",lightblue:"#ADD8E6",lightcoral:"#F08080",lightcyan:"#E0FFFF",lightgoldenrodyellow:"#FAFAD2",lightgray:"#D3D3D3",lightgrey:"#D3D3D3",lightgreen:"#90EE90",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",lime:"#00FF00",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",maroon:"#800000",mediumaquamarine:"#66CDAA",mediumblue:"#0000CD",mediumorchid:"#BA55D3",mediumpurple:"#9370DB",mediumseagreen:"#3CB371",mediumslateblue:"#7B68EE",mediumspringgreen:"#00FA9A",mediumturquoise:"#48D1CC",mediumvioletred:"#C71585",midnightblue:"#191970",mintcream:"#F5FFFA",mistyrose:"#FFE4E1",moccasin:"#FFE4B5",navajowhite:"#FFDEAD",navy:"#000080",oldlace:"#FDF5E6",olive:"#808000",olivedrab:"#6B8E23",orange:"#FFA500",orangered:"#FF4500",orchid:"#DA70D6",palegoldenrod:"#EEE8AA",palegreen:"#98FB98",paleturquoise:"#AFEEEE",palevioletred:"#DB7093",papayawhip:"#FFEFD5",peachpuff:"#FFDAB9",peru:"#CD853F",pink:"#FFC0CB",plum:"#DDA0DD",powderblue:"#B0E0E6",purple:"#800080",rebeccapurple:"#663399",red:"#FF0000",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",silver:"#C0C0C0",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",teal:"#008080",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",white:"#FFFFFF",whitesmoke:"#F5F5F5",yellow:"#FFFF00",yellowgreen:"#9ACD32"};function o(t,r,e){return e<0&&(e+=1),e>1&&(e-=1),e<1/6?t+(r-t)*6*e:e<1/2?r:e<2/3?t+(r-t)*(2/3-e)*6:t}i.Color.fromRgb=function(t){return a.fromSource(a.sourceFromRgb(t))},i.Color.sourceFromRgb=function(t){var r=t.match(a.reRGBa);if(r){var e=parseInt(r[1],10)/(/%$/.test(r[1])?100:1)*(/%$/.test(r[1])?255:1),s=parseInt(r[2],10)/(/%$/.test(r[2])?100:1)*(/%$/.test(r[2])?255:1),h=parseInt(r[3],10)/(/%$/.test(r[3])?100:1)*(/%$/.test(r[3])?255:1);return[parseInt(e,10),parseInt(s,10),parseInt(h,10),r[4]?parseFloat(r[4]):1]}},i.Color.fromRgba=a.fromRgb,i.Color.fromHsl=function(t){return a.fromSource(a.sourceFromHsl(t))},i.Color.sourceFromHsl=function(t){var r=t.match(a.reHSLa);if(r){var e=(parseFloat(r[1])%360+360)%360/360,s=parseFloat(r[2])/(/%$/.test(r[2])?100:1),h=parseFloat(r[3])/(/%$/.test(r[3])?100:1),n,l,f;if(s===0)n=l=f=h;else{var d=h<=.5?h*(s+1):h+s-h*s,g=h*2-d;n=o(g,d,e+1/3),l=o(g,d,e),f=o(g,d,e-1/3)}return[Math.round(n*255),Math.round(l*255),Math.round(f*255),r[4]?parseFloat(r[4]):1]}},i.Color.fromHsla=a.fromHsl,i.Color.fromHex=function(t){return a.fromSource(a.sourceFromHex(t))},i.Color.sourceFromHex=function(t){if(t.match(a.reHex)){var r=t.slice(t.indexOf("#")+1),e=r.length===3||r.length===4,s=r.length===8||r.length===4,h=e?r.charAt(0)+r.charAt(0):r.substring(0,2),n=e?r.charAt(1)+r.charAt(1):r.substring(2,4),l=e?r.charAt(2)+r.charAt(2):r.substring(4,6),f=s?e?r.charAt(3)+r.charAt(3):r.substring(6,8):"FF";return[parseInt(h,16),parseInt(n,16),parseInt(l,16),parseFloat((parseInt(f,16)/255).toFixed(2))]}},i.Color.fromSource=function(t){var r=new a;return r.setSource(t),r}})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=["e","se","s","sw","w","nw","n","ne","e"],o=["ns","nesw","ew","nwse"],t={},r="left",e="top",s="right",h="bottom",n="center",l={top:h,bottom:e,left:s,right:r,center:n},f=i.util.radiansToDegrees,d=Math.sign||function(M){return(M>0)-(M<0)||+M};function g(M,O){var j=M.angle+f(Math.atan2(O.y,O.x))+360;return Math.round(j%360/45)}function m(M,O){var j=O.transform.target,R=j.canvas,A=i.util.object.clone(O);A.target=j,R&&R.fire("object:"+M,A),j.fire(M,O)}function p(M,O){var j=O.canvas,R=j.uniScaleKey,A=M[R];return j.uniformScaling&&!A||!j.uniformScaling&&A}function _(M){return M.originX===n&&M.originY===n}function w(M,O,j){var R=M.lockScalingX,A=M.lockScalingY;return!!(R&&A||!O&&(R||A)&&j||R&&O==="x"||A&&O==="y")}function D(M,O,j){var R="not-allowed",A=p(M,j),X="";if(O.x!==0&&O.y===0?X="x":O.x===0&&O.y!==0&&(X="y"),w(j,X,A))return R;var q=g(j,O);return a[q]+"-resize"}function B(M,O,j){var R="not-allowed";if(O.x!==0&&j.lockSkewingY||O.y!==0&&j.lockSkewingX)return R;var A=g(j,O)%4;return o[A]+"-resize"}function N(M,O,j){return M[j.canvas.altActionKey]?t.skewCursorStyleHandler(M,O,j):t.scaleCursorStyleHandler(M,O,j)}function G(M,O,j){var R=M[j.canvas.altActionKey];if(O.x===0)return R?"skewX":"scaleY";if(O.y===0)return R?"skewY":"scaleX"}function z(M,O,j){return j.lockRotation?"not-allowed":O.cursorStyle}function H(M,O,j,R){return{e:M,transform:O,pointer:{x:j,y:R}}}function U(M){return function(O,j,R,A){var X=j.target,q=X.getCenterPoint(),tt=X.translateToOriginPoint(q,j.originX,j.originY),Z=M(O,j,R,A);return X.setPositionByOrigin(tt,j.originX,j.originY),Z}}function K(M,O){return function(j,R,A,X){var q=O(j,R,A,X);return q&&m(M,H(j,R,A,X)),q}}function Q(M,O,j,R,A){var X=M.target,q=X.controls[M.corner],tt=X.canvas.getZoom(),Z=X.padding/tt,I=X.toLocalPoint(new i.Point(R,A),O,j);return I.x>=Z&&(I.x-=Z),I.x<=-Z&&(I.x+=Z),I.y>=Z&&(I.y-=Z),I.y<=Z&&(I.y+=Z),I.x-=q.offsetX,I.y-=q.offsetY,I}function J(M){return M.flipX!==M.flipY}function v(M,O,j,R,A){if(M[O]!==0){var X=M._getTransformedDimensions()[R],q=A/X*M[j];M.set(j,q)}}function b(M,O,j,R){var A=O.target,X=A._getTransformedDimensions(0,A.skewY),q=Q(O,O.originX,O.originY,j,R),tt=Math.abs(q.x*2)-X.x,Z=A.skewX,I;tt<2?I=0:(I=f(Math.atan2(tt/A.scaleX,X.y/A.scaleY)),O.originX===r&&O.originY===h&&(I=-I),O.originX===s&&O.originY===e&&(I=-I),J(A)&&(I=-I));var $=Z!==I;if($){var et=A._getTransformedDimensions().y;A.set("skewX",I),v(A,"skewY","scaleY","y",et)}return $}function S(M,O,j,R){var A=O.target,X=A._getTransformedDimensions(A.skewX,0),q=Q(O,O.originX,O.originY,j,R),tt=Math.abs(q.y*2)-X.y,Z=A.skewY,I;tt<2?I=0:(I=f(Math.atan2(tt/A.scaleY,X.x/A.scaleX)),O.originX===r&&O.originY===h&&(I=-I),O.originX===s&&O.originY===e&&(I=-I),J(A)&&(I=-I));var $=Z!==I;if($){var et=A._getTransformedDimensions().x;A.set("skewY",I),v(A,"skewX","scaleX","x",et)}return $}function C(M,O,j,R){var A=O.target,X=A.skewX,q,tt=O.originY;if(A.lockSkewingX)return!1;if(X===0){var Z=Q(O,n,n,j,R);Z.x>0?q=r:q=s}else X>0&&(q=tt===e?r:s),X<0&&(q=tt===e?s:r),J(A)&&(q=q===r?s:r);O.originX=q;var I=K("skewing",U(b));return I(M,O,j,R)}function P(M,O,j,R){var A=O.target,X=A.skewY,q,tt=O.originX;if(A.lockSkewingY)return!1;if(X===0){var Z=Q(O,n,n,j,R);Z.y>0?q=e:q=h}else X>0&&(q=tt===r?e:h),X<0&&(q=tt===r?h:e),J(A)&&(q=q===e?h:e);O.originY=q;var I=K("skewing",U(S));return I(M,O,j,R)}function x(M,O,j,R){var A=O,X=A.target,q=X.translateToOriginPoint(X.getCenterPoint(),A.originX,A.originY);if(X.lockRotation)return!1;var tt=Math.atan2(A.ey-q.y,A.ex-q.x),Z=Math.atan2(R-q.y,j-q.x),I=f(Z-tt+A.theta),$=!0;if(X.snapAngle>0){var et=X.snapAngle,it=X.snapThreshold||et,nt=Math.ceil(I/et)*et,rt=Math.floor(I/et)*et;Math.abs(I-rt)<it?I=rt:Math.abs(I-nt)<it&&(I=nt)}return I<0&&(I=360+I),I%=360,$=X.angle!==I,X.angle=I,$}function y(M,O,j,R,A){A=A||{};var X=O.target,q=X.lockScalingX,tt=X.lockScalingY,Z=A.by,I,$,et,it,nt=p(M,X),rt=w(X,Z,nt),ot,st,ct=O.gestureScale;if(rt)return!1;if(ct)$=O.scaleX*ct,et=O.scaleY*ct;else{if(I=Q(O,O.originX,O.originY,j,R),ot=Z!=="y"?d(I.x):1,st=Z!=="x"?d(I.y):1,O.signX||(O.signX=ot),O.signY||(O.signY=st),X.lockScalingFlip&&(O.signX!==ot||O.signY!==st))return!1;if(it=X._getTransformedDimensions(),nt&&!Z){var dt=Math.abs(I.x)+Math.abs(I.y),lt=O.original,ne=Math.abs(it.x*lt.scaleX/X.scaleX)+Math.abs(it.y*lt.scaleY/X.scaleY),Ft=dt/ne;$=lt.scaleX*Ft,et=lt.scaleY*Ft}else $=Math.abs(I.x*X.scaleX/it.x),et=Math.abs(I.y*X.scaleY/it.y);_(O)&&($*=2,et*=2),O.signX!==ot&&Z!=="y"&&(O.originX=l[O.originX],$*=-1,O.signX=ot),O.signY!==st&&Z!=="x"&&(O.originY=l[O.originY],et*=-1,O.signY=st)}var se=X.scaleX,ae=X.scaleY;return Z?(Z==="x"&&X.set("scaleX",$),Z==="y"&&X.set("scaleY",et)):(!q&&X.set("scaleX",$),!tt&&X.set("scaleY",et)),se!==X.scaleX||ae!==X.scaleY}function T(M,O,j,R){return y(M,O,j,R)}function E(M,O,j,R){return y(M,O,j,R,{by:"x"})}function L(M,O,j,R){return y(M,O,j,R,{by:"y"})}function k(M,O,j,R){return M[O.target.canvas.altActionKey]?t.skewHandlerX(M,O,j,R):t.scalingY(M,O,j,R)}function W(M,O,j,R){return M[O.target.canvas.altActionKey]?t.skewHandlerY(M,O,j,R):t.scalingX(M,O,j,R)}function Y(M,O,j,R){var A=O.target,X=Q(O,O.originX,O.originY,j,R),q=A.strokeWidth/(A.strokeUniform?A.scaleX:1),tt=_(O)?2:1,Z=A.width,I=Math.abs(X.x*tt/A.scaleX)-q;return A.set("width",Math.max(I,0)),Z!==I}function V(M,O,j,R){var A=O.target,X=j-O.offsetX,q=R-O.offsetY,tt=!A.get("lockMovementX")&&A.left!==X,Z=!A.get("lockMovementY")&&A.top!==q;return tt&&A.set("left",X),Z&&A.set("top",q),(tt||Z)&&m("moving",H(M,O,j,R)),tt||Z}t.scaleCursorStyleHandler=D,t.skewCursorStyleHandler=B,t.scaleSkewCursorStyleHandler=N,t.rotationWithSnapping=K("rotating",U(x)),t.scalingEqually=K("scaling",U(T)),t.scalingX=K("scaling",U(E)),t.scalingY=K("scaling",U(L)),t.scalingYOrSkewingX=k,t.scalingXOrSkewingY=W,t.changeWidth=K("resizing",U(Y)),t.skewHandlerX=C,t.skewHandlerY=P,t.dragHandler=V,t.scaleOrSkewActionName=G,t.rotationStyleHandler=z,t.fireEvent=m,t.wrapWithFixedAnchor=U,t.wrapWithFireEvent=K,t.getLocalPoint=Q,i.controlsUtils=t})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.util.degreesToRadians,o=i.controlsUtils;function t(e,s,h,n,l){n=n||{};var f=this.sizeX||n.cornerSize||l.cornerSize,d=this.sizeY||n.cornerSize||l.cornerSize,g=typeof n.transparentCorners!="undefined"?n.transparentCorners:l.transparentCorners,m=g?"stroke":"fill",p=!g&&(n.cornerStrokeColor||l.cornerStrokeColor),_=s,w=h,D;e.save(),e.fillStyle=n.cornerColor||l.cornerColor,e.strokeStyle=n.cornerStrokeColor||l.cornerStrokeColor,f>d?(D=f,e.scale(1,d/f),w=h*f/d):d>f?(D=d,e.scale(f/d,1),_=s*d/f):D=f,e.lineWidth=1,e.beginPath(),e.arc(_,w,D/2,0,2*Math.PI,!1),e[m](),p&&e.stroke(),e.restore()}function r(e,s,h,n,l){n=n||{};var f=this.sizeX||n.cornerSize||l.cornerSize,d=this.sizeY||n.cornerSize||l.cornerSize,g=typeof n.transparentCorners!="undefined"?n.transparentCorners:l.transparentCorners,m=g?"stroke":"fill",p=!g&&(n.cornerStrokeColor||l.cornerStrokeColor),_=f/2,w=d/2;e.save(),e.fillStyle=n.cornerColor||l.cornerColor,e.strokeStyle=n.cornerStrokeColor||l.cornerStrokeColor,e.lineWidth=1,e.translate(s,h),e.rotate(a(l.angle)),e[m+"Rect"](-_,-w,f,d),p&&e.strokeRect(-_,-w,f,d),e.restore()}o.renderCircleControl=t,o.renderSquareControl=r})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={});function a(o){for(var t in o)this[t]=o[t]}i.Control=a,i.Control.prototype={visible:!0,actionName:"scale",angle:0,x:0,y:0,offsetX:0,offsetY:0,sizeX:null,sizeY:null,touchSizeX:null,touchSizeY:null,cursorStyle:"crosshair",withConnection:!1,actionHandler:function(){},mouseDownHandler:function(){},mouseUpHandler:function(){},getActionHandler:function(){return this.actionHandler},getMouseDownHandler:function(){return this.mouseDownHandler},getMouseUpHandler:function(){return this.mouseUpHandler},cursorStyleHandler:function(o,t){return t.cursorStyle},getActionName:function(o,t){return t.actionName},getVisibility:function(o,t){var r=o._controlsVisibility;return r&&typeof r[t]!="undefined"?r[t]:this.visible},setVisibility:function(o){this.visible=o},positionHandler:function(o,t){var r=i.util.transformPoint({x:this.x*o.x+this.offsetX,y:this.y*o.y+this.offsetY},t);return r},calcCornerCoords:function(o,t,r,e,s){var h,n,l,f,d=s?this.touchSizeX:this.sizeX,g=s?this.touchSizeY:this.sizeY;if(d&&g&&d!==g){var m=Math.atan2(g,d),p=Math.sqrt(d*d+g*g)/2,_=m-i.util.degreesToRadians(o),w=Math.PI/2-m-i.util.degreesToRadians(o);h=p*i.util.cos(_),n=p*i.util.sin(_),l=p*i.util.cos(w),f=p*i.util.sin(w)}else{var D=d&&g?d:t;p=D*.7071067812;var _=i.util.degreesToRadians(45-o);h=l=p*i.util.cos(_),n=f=p*i.util.sin(_)}return{tl:{x:r-f,y:e-l},tr:{x:r+h,y:e-n},bl:{x:r-h,y:e+n},br:{x:r+f,y:e+l}}},render:function(o,t,r,e,s){switch(e=e||{},e.cornerStyle||s.cornerStyle){case"circle":i.controlsUtils.renderCircleControl.call(this,o,t,r,e,s);break;default:i.controlsUtils.renderSquareControl.call(this,o,t,r,e,s)}}}})(F);(function(){function c(r,e){var s=r.getAttribute("style"),h=r.getAttribute("offset")||0,n,l,f,d;if(h=parseFloat(h)/(/%$/.test(h)?100:1),h=h<0?0:h>1?1:h,s){var g=s.split(/\s*;\s*/);for(g[g.length-1]===""&&g.pop(),d=g.length;d--;){var m=g[d].split(/\s*:\s*/),p=m[0].trim(),_=m[1].trim();p==="stop-color"?n=_:p==="stop-opacity"&&(f=_)}}return n||(n=r.getAttribute("stop-color")||"rgb(0,0,0)"),f||(f=r.getAttribute("stop-opacity")),n=new u.Color(n),l=n.getAlpha(),f=isNaN(parseFloat(f))?1:parseFloat(f),f*=l*e,{offset:h,color:n.toRgb(),opacity:f}}function i(r){return{x1:r.getAttribute("x1")||0,y1:r.getAttribute("y1")||0,x2:r.getAttribute("x2")||"100%",y2:r.getAttribute("y2")||0}}function a(r){return{x1:r.getAttribute("fx")||r.getAttribute("cx")||"50%",y1:r.getAttribute("fy")||r.getAttribute("cy")||"50%",r1:0,x2:r.getAttribute("cx")||"50%",y2:r.getAttribute("cy")||"50%",r2:r.getAttribute("r")||"50%"}}var o=u.util.object.clone;u.Gradient=u.util.createClass({offsetX:0,offsetY:0,gradientTransform:null,gradientUnits:"pixels",type:"linear",initialize:function(r){r||(r={}),r.coords||(r.coords={});var e,s=this;Object.keys(r).forEach(function(h){s[h]=r[h]}),this.id?this.id+="_"+u.Object.__uid++:this.id=u.Object.__uid++,e={x1:r.coords.x1||0,y1:r.coords.y1||0,x2:r.coords.x2||0,y2:r.coords.y2||0},this.type==="radial"&&(e.r1=r.coords.r1||0,e.r2=r.coords.r2||0),this.coords=e,this.colorStops=r.colorStops.slice()},addColorStop:function(r){for(var e in r){var s=new u.Color(r[e]);this.colorStops.push({offset:parseFloat(e),color:s.toRgb(),opacity:s.getAlpha()})}return this},toObject:function(r){var e={type:this.type,coords:this.coords,colorStops:this.colorStops,offsetX:this.offsetX,offsetY:this.offsetY,gradientUnits:this.gradientUnits,gradientTransform:this.gradientTransform?this.gradientTransform.concat():this.gradientTransform};return u.util.populateWithProperties(this,e,r),e},toSVG:function(r,l){var s=o(this.coords,!0),h,n,l=l||{},f,d,g=o(this.colorStops,!0),m=s.r1>s.r2,p=this.gradientTransform?this.gradientTransform.concat():u.iMatrix.concat(),_=-this.offsetX,w=-this.offsetY,D=!!l.additionalTransform,B=this.gradientUnits==="pixels"?"userSpaceOnUse":"objectBoundingBox";if(g.sort(function(U,K){return U.offset-K.offset}),B==="objectBoundingBox"?(_/=r.width,w/=r.height):(_+=r.width/2,w+=r.height/2),r.type==="path"&&this.gradientUnits!=="percentage"&&(_-=r.pathOffset.x,w-=r.pathOffset.y),p[4]-=_,p[5]-=w,d='id="SVGID_'+this.id+'" gradientUnits="'+B+'"',d+=' gradientTransform="'+(D?l.additionalTransform+" ":"")+u.util.matrixToSVG(p)+'" ',this.type==="linear"?f=["<linearGradient ",d,' x1="',s.x1,'" y1="',s.y1,'" x2="',s.x2,'" y2="',s.y2,`">
`]:this.type==="radial"&&(f=["<radialGradient ",d,' cx="',m?s.x1:s.x2,'" cy="',m?s.y1:s.y2,'" r="',m?s.r1:s.r2,'" fx="',m?s.x2:s.x1,'" fy="',m?s.y2:s.y1,`">
`]),this.type==="radial"){if(m)for(g=g.concat(),g.reverse(),h=0,n=g.length;h<n;h++)g[h].offset=1-g[h].offset;var N=Math.min(s.r1,s.r2);if(N>0){var G=Math.max(s.r1,s.r2),z=N/G;for(h=0,n=g.length;h<n;h++)g[h].offset+=z*(1-g[h].offset)}}for(h=0,n=g.length;h<n;h++){var H=g[h];f.push("<stop ",'offset="',H.offset*100+"%",'" style="stop-color:',H.color,typeof H.opacity!="undefined"?";stop-opacity: "+H.opacity:";",`"/>
`)}return f.push(this.type==="linear"?`</linearGradient>
`:`</radialGradient>
`),f.join("")},toLive:function(r){var e,s=u.util.object.clone(this.coords),h,n;if(this.type){for(this.type==="linear"?e=r.createLinearGradient(s.x1,s.y1,s.x2,s.y2):this.type==="radial"&&(e=r.createRadialGradient(s.x1,s.y1,s.r1,s.x2,s.y2,s.r2)),h=0,n=this.colorStops.length;h<n;h++){var l=this.colorStops[h].color,f=this.colorStops[h].opacity,d=this.colorStops[h].offset;typeof f!="undefined"&&(l=new u.Color(l).setAlpha(f).toRgba()),e.addColorStop(d,l)}return e}}}),u.util.object.extend(u.Gradient,{fromElement:function(r,e,s,h){var n=parseFloat(s)/(/%$/.test(s)?100:1);n=n<0?0:n>1?1:n,isNaN(n)&&(n=1);var l=r.getElementsByTagName("stop"),f,d=r.getAttribute("gradientUnits")==="userSpaceOnUse"?"pixels":"percentage",g=r.getAttribute("gradientTransform")||"",m=[],p,_,w=0,D=0,B;for(r.nodeName==="linearGradient"||r.nodeName==="LINEARGRADIENT"?(f="linear",p=i(r)):(f="radial",p=a(r)),_=l.length;_--;)m.push(c(l[_],n));B=u.parseTransformAttribute(g),t(e,p,h,d),d==="pixels"&&(w=-e.left,D=-e.top);var N=new u.Gradient({id:r.getAttribute("id"),type:f,coords:p,colorStops:m,gradientUnits:d,gradientTransform:B,offsetX:w,offsetY:D});return N}});function t(r,e,s,h){var n,l;Object.keys(e).forEach(function(f){n=e[f],n==="Infinity"?l=1:n==="-Infinity"?l=0:(l=parseFloat(e[f],10),typeof n=="string"&&/^(\d+\.\d+)%|(\d+)%$/.test(n)&&(l*=.01,h==="pixels"&&((f==="x1"||f==="x2"||f==="r2")&&(l*=s.viewBoxWidth||s.width),(f==="y1"||f==="y2")&&(l*=s.viewBoxHeight||s.height)))),e[f]=l})}})();(function(){"use strict";var c=u.util.toFixed;u.Pattern=u.util.createClass({repeat:"repeat",offsetX:0,offsetY:0,crossOrigin:"",patternTransform:null,initialize:function(i,a){if(i||(i={}),this.id=u.Object.__uid++,this.setOptions(i),!i.source||i.source&&typeof i.source!="string"){a&&a(this);return}else{var o=this;this.source=u.util.createImage(),u.util.loadImage(i.source,function(t,r){o.source=t,a&&a(o,r)},null,this.crossOrigin)}},toObject:function(i){var a=u.Object.NUM_FRACTION_DIGITS,o,t;return typeof this.source.src=="string"?o=this.source.src:typeof this.source=="object"&&this.source.toDataURL&&(o=this.source.toDataURL()),t={type:"pattern",source:o,repeat:this.repeat,crossOrigin:this.crossOrigin,offsetX:c(this.offsetX,a),offsetY:c(this.offsetY,a),patternTransform:this.patternTransform?this.patternTransform.concat():null},u.util.populateWithProperties(this,t,i),t},toSVG:function(i){var a=typeof this.source=="function"?this.source():this.source,o=a.width/i.width,t=a.height/i.height,r=this.offsetX/i.width,e=this.offsetY/i.height,s="";return(this.repeat==="repeat-x"||this.repeat==="no-repeat")&&(t=1,e&&(t+=Math.abs(e))),(this.repeat==="repeat-y"||this.repeat==="no-repeat")&&(o=1,r&&(o+=Math.abs(r))),a.src?s=a.src:a.toDataURL&&(s=a.toDataURL()),'<pattern id="SVGID_'+this.id+'" x="'+r+'" y="'+e+'" width="'+o+'" height="'+t+`">
<image x="0" y="0" width="`+a.width+'" height="'+a.height+'" xlink:href="'+s+`"></image>
</pattern>
`},setOptions:function(i){for(var a in i)this[a]=i[a]},toLive:function(i){var a=this.source;return!a||typeof a.src!="undefined"&&(!a.complete||a.naturalWidth===0||a.naturalHeight===0)?"":i.createPattern(a,this.repeat)}})})();(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.util.toFixed;if(i.Shadow){i.warn("fabric.Shadow is already defined.");return}i.Shadow=i.util.createClass({color:"rgb(0,0,0)",blur:0,offsetX:0,offsetY:0,affectStroke:!1,includeDefaultValues:!0,nonScaling:!1,initialize:function(o){typeof o=="string"&&(o=this._parseShadow(o));for(var t in o)this[t]=o[t];this.id=i.Object.__uid++},_parseShadow:function(o){var t=o.trim(),r=i.Shadow.reOffsetsAndBlur.exec(t)||[],e=t.replace(i.Shadow.reOffsetsAndBlur,"")||"rgb(0,0,0)";return{color:e.trim(),offsetX:parseFloat(r[1],10)||0,offsetY:parseFloat(r[2],10)||0,blur:parseFloat(r[3],10)||0}},toString:function(){return[this.offsetX,this.offsetY,this.blur,this.color].join("px ")},toSVG:function(o){var t=40,r=40,e=i.Object.NUM_FRACTION_DIGITS,s=i.util.rotateVector({x:this.offsetX,y:this.offsetY},i.util.degreesToRadians(-o.angle)),h=20,n=new i.Color(this.color);return o.width&&o.height&&(t=a((Math.abs(s.x)+this.blur)/o.width,e)*100+h,r=a((Math.abs(s.y)+this.blur)/o.height,e)*100+h),o.flipX&&(s.x*=-1),o.flipY&&(s.y*=-1),'<filter id="SVGID_'+this.id+'" y="-'+r+'%" height="'+(100+2*r)+'%" x="-'+t+'%" width="'+(100+2*t)+`%" >
<feGaussianBlur in="SourceAlpha" stdDeviation="`+a(this.blur?this.blur/2:0,e)+`"></feGaussianBlur>
<feOffset dx="`+a(s.x,e)+'" dy="'+a(s.y,e)+`" result="oBlur" ></feOffset>
<feFlood flood-color="`+n.toRgb()+'" flood-opacity="'+n.getAlpha()+`"/>
<feComposite in2="oBlur" operator="in" />
<feMerge>
<feMergeNode></feMergeNode>
<feMergeNode in="SourceGraphic"></feMergeNode>
</feMerge>
</filter>
`},toObject:function(){if(this.includeDefaultValues)return{color:this.color,blur:this.blur,offsetX:this.offsetX,offsetY:this.offsetY,affectStroke:this.affectStroke,nonScaling:this.nonScaling};var o={},t=i.Shadow.prototype;return["color","blur","offsetX","offsetY","affectStroke","nonScaling"].forEach(function(r){this[r]!==t[r]&&(o[r]=this[r])},this),o}}),i.Shadow.reOffsetsAndBlur=/(?:\s|^)(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(-?\d+(?:\.\d*)?(?:px)?(?:\s?|$))?(\d+(?:\.\d*)?(?:px)?)?(?:\s?|$)(?:$|\s)/})(F);(function(){"use strict";if(u.StaticCanvas){u.warn("fabric.StaticCanvas is already defined.");return}var c=u.util.object.extend,i=u.util.getElementOffset,a=u.util.removeFromArray,o=u.util.toFixed,t=u.util.transformPoint,r=u.util.invertTransform,e=u.util.getNodeCanvas,s=u.util.createCanvasElement,h=new Error("Could not initialize `canvas` element");u.StaticCanvas=u.util.createClass(u.CommonMethods,{initialize:function(n,l){l||(l={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(n,l)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:u.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!0,clipPath:void 0,_initStatic:function(n,l){var f=this.requestRenderAllBound;this._objects=[],this._createLowerCanvas(n),this._initOptions(l),this.interactive||this._initRetinaScaling(),l.overlayImage&&this.setOverlayImage(l.overlayImage,f),l.backgroundImage&&this.setBackgroundImage(l.backgroundImage,f),l.backgroundColor&&this.setBackgroundColor(l.backgroundColor,f),l.overlayColor&&this.setOverlayColor(l.overlayColor,f),this.calcOffset()},_isRetinaScaling:function(){return u.devicePixelRatio>1&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?Math.max(1,u.devicePixelRatio):1},_initRetinaScaling:function(){if(this._isRetinaScaling()){var n=u.devicePixelRatio;this.__initRetinaScaling(n,this.lowerCanvasEl,this.contextContainer),this.upperCanvasEl&&this.__initRetinaScaling(n,this.upperCanvasEl,this.contextTop)}},__initRetinaScaling:function(n,l,f){l.setAttribute("width",this.width*n),l.setAttribute("height",this.height*n),f.scale(n,n)},calcOffset:function(){return this._offset=i(this.lowerCanvasEl),this},setOverlayImage:function(n,l,f){return this.__setBgOverlayImage("overlayImage",n,l,f)},setBackgroundImage:function(n,l,f){return this.__setBgOverlayImage("backgroundImage",n,l,f)},setOverlayColor:function(n,l){return this.__setBgOverlayColor("overlayColor",n,l)},setBackgroundColor:function(n,l){return this.__setBgOverlayColor("backgroundColor",n,l)},__setBgOverlayImage:function(n,l,f,d){return typeof l=="string"?u.util.loadImage(l,function(g,m){if(g){var p=new u.Image(g,d);this[n]=p,p.canvas=this}f&&f(g,m)},this,d&&d.crossOrigin):(d&&l.setOptions(d),this[n]=l,l&&(l.canvas=this),f&&f(l,!1)),this},__setBgOverlayColor:function(n,l,f){return this[n]=l,this._initGradient(l,n),this._initPattern(l,n,f),this},_createCanvasElement:function(){var n=s();if(!n||(n.style||(n.style={}),typeof n.getContext=="undefined"))throw h;return n},_initOptions:function(n){var l=this.lowerCanvasEl;this._setOptions(n),this.width=this.width||parseInt(l.width,10)||0,this.height=this.height||parseInt(l.height,10)||0,this.lowerCanvasEl.style&&(l.width=this.width,l.height=this.height,l.style.width=this.width+"px",l.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(n){n&&n.getContext?this.lowerCanvasEl=n:this.lowerCanvasEl=u.util.getById(n)||this._createCanvasElement(),u.util.addClass(this.lowerCanvasEl,"lower-canvas"),this._originalCanvasStyle=this.lowerCanvasEl.style,this.interactive&&this._applyCanvasStyle(this.lowerCanvasEl),this.contextContainer=this.lowerCanvasEl.getContext("2d")},getWidth:function(){return this.width},getHeight:function(){return this.height},setWidth:function(n,l){return this.setDimensions({width:n},l)},setHeight:function(n,l){return this.setDimensions({height:n},l)},setDimensions:function(n,l){var f;l=l||{};for(var d in n)f=n[d],l.cssOnly||(this._setBackstoreDimension(d,n[d]),f+="px",this.hasLostContext=!0),l.backstoreOnly||this._setCssDimension(d,f);return this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(this.contextTop),this._initRetinaScaling(),this.calcOffset(),l.cssOnly||this.requestRenderAll(),this},_setBackstoreDimension:function(n,l){return this.lowerCanvasEl[n]=l,this.upperCanvasEl&&(this.upperCanvasEl[n]=l),this.cacheCanvasEl&&(this.cacheCanvasEl[n]=l),this[n]=l,this},_setCssDimension:function(n,l){return this.lowerCanvasEl.style[n]=l,this.upperCanvasEl&&(this.upperCanvasEl.style[n]=l),this.wrapperEl&&(this.wrapperEl.style[n]=l),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(n){var l=this._activeObject,f=this.backgroundImage,d=this.overlayImage,g,m,p;for(this.viewportTransform=n,m=0,p=this._objects.length;m<p;m++)g=this._objects[m],g.group||g.setCoords(!0);return l&&l.setCoords(),f&&f.setCoords(!0),d&&d.setCoords(!0),this.calcViewportBoundaries(),this.renderOnAddRemove&&this.requestRenderAll(),this},zoomToPoint:function(n,l){var f=n,d=this.viewportTransform.slice(0);n=t(n,r(this.viewportTransform)),d[0]=l,d[3]=l;var g=t(n,d);return d[4]+=f.x-g.x,d[5]+=f.y-g.y,this.setViewportTransform(d)},setZoom:function(n){return this.zoomToPoint(new u.Point(0,0),n),this},absolutePan:function(n){var l=this.viewportTransform.slice(0);return l[4]=-n.x,l[5]=-n.y,this.setViewportTransform(l)},relativePan:function(n){return this.absolutePan(new u.Point(-n.x-this.viewportTransform[4],-n.y-this.viewportTransform[5]))},getElement:function(){return this.lowerCanvasEl},_onObjectAdded:function(n){this.stateful&&n.setupState(),n._set("canvas",this),n.setCoords(),this.fire("object:added",{target:n}),n.fire("added")},_onObjectRemoved:function(n){this.fire("object:removed",{target:n}),n.fire("removed"),delete n.canvas},clearContext:function(n){return n.clearRect(0,0,this.width,this.height),this},getContext:function(){return this.contextContainer},clear:function(){return this.remove.apply(this,this.getObjects()),this.backgroundImage=null,this.overlayImage=null,this.backgroundColor="",this.overlayColor="",this._hasITextHandlers&&(this.off("mouse:up",this._mouseUpITextHandler),this._iTextInstances=null,this._hasITextHandlers=!1),this.clearContext(this.contextContainer),this.fire("canvas:cleared"),this.renderOnAddRemove&&this.requestRenderAll(),this},renderAll:function(){var n=this.contextContainer;return this.renderCanvas(n,this._objects),this},renderAndReset:function(){this.isRendering=0,this.renderAll()},requestRenderAll:function(){return this.isRendering||(this.isRendering=u.util.requestAnimFrame(this.renderAndResetBound)),this},calcViewportBoundaries:function(){var n={},l=this.width,f=this.height,d=r(this.viewportTransform);return n.tl=t({x:0,y:0},d),n.br=t({x:l,y:f},d),n.tr=new u.Point(n.br.x,n.tl.y),n.bl=new u.Point(n.tl.x,n.br.y),this.vptCoords=n,n},cancelRequestedRender:function(){this.isRendering&&(u.util.cancelAnimFrame(this.isRendering),this.isRendering=0)},renderCanvas:function(n,l){var f=this.viewportTransform,d=this.clipPath;this.cancelRequestedRender(),this.calcViewportBoundaries(),this.clearContext(n),u.util.setImageSmoothing(n,this.imageSmoothingEnabled),this.fire("before:render",{ctx:n}),this._renderBackground(n),n.save(),n.transform(f[0],f[1],f[2],f[3],f[4],f[5]),this._renderObjects(n,l),n.restore(),!this.controlsAboveOverlay&&this.interactive&&this.drawControls(n),d&&(d.canvas=this,d.shouldCache(),d._transformDone=!0,d.renderCache({forClipping:!0}),this.drawClipPathOnCanvas(n)),this._renderOverlay(n),this.controlsAboveOverlay&&this.interactive&&this.drawControls(n),this.fire("after:render",{ctx:n})},drawClipPathOnCanvas:function(n){var l=this.viewportTransform,f=this.clipPath;n.save(),n.transform(l[0],l[1],l[2],l[3],l[4],l[5]),n.globalCompositeOperation="destination-in",f.transform(n),n.scale(1/f.zoomX,1/f.zoomY),n.drawImage(f._cacheCanvas,-f.cacheTranslationX,-f.cacheTranslationY),n.restore()},_renderObjects:function(n,l){var f,d;for(f=0,d=l.length;f<d;++f)l[f]&&l[f].render(n)},_renderBackgroundOrOverlay:function(n,l){var f=this[l+"Color"],d=this[l+"Image"],g=this.viewportTransform,m=this[l+"Vpt"];if(!(!f&&!d)){if(f){n.save(),n.beginPath(),n.moveTo(0,0),n.lineTo(this.width,0),n.lineTo(this.width,this.height),n.lineTo(0,this.height),n.closePath(),n.fillStyle=f.toLive?f.toLive(n,this):f,m&&n.transform(g[0],g[1],g[2],g[3],g[4],g[5]),n.transform(1,0,0,1,f.offsetX||0,f.offsetY||0);var p=f.gradientTransform||f.patternTransform;p&&n.transform(p[0],p[1],p[2],p[3],p[4],p[5]),n.fill(),n.restore()}d&&(n.save(),m&&n.transform(g[0],g[1],g[2],g[3],g[4],g[5]),d.render(n),n.restore())}},_renderBackground:function(n){this._renderBackgroundOrOverlay(n,"background")},_renderOverlay:function(n){this._renderBackgroundOrOverlay(n,"overlay")},getCenter:function(){return{top:this.height/2,left:this.width/2}},centerObjectH:function(n){return this._centerObject(n,new u.Point(this.getCenter().left,n.getCenterPoint().y))},centerObjectV:function(n){return this._centerObject(n,new u.Point(n.getCenterPoint().x,this.getCenter().top))},centerObject:function(n){var l=this.getCenter();return this._centerObject(n,new u.Point(l.left,l.top))},viewportCenterObject:function(n){var l=this.getVpCenter();return this._centerObject(n,l)},viewportCenterObjectH:function(n){var l=this.getVpCenter();return this._centerObject(n,new u.Point(l.x,n.getCenterPoint().y)),this},viewportCenterObjectV:function(n){var l=this.getVpCenter();return this._centerObject(n,new u.Point(n.getCenterPoint().x,l.y))},getVpCenter:function(){var n=this.getCenter(),l=r(this.viewportTransform);return t({x:n.left,y:n.top},l)},_centerObject:function(n,l){return n.setPositionByOrigin(l,"center","center"),n.setCoords(),this.renderOnAddRemove&&this.requestRenderAll(),this},toDatalessJSON:function(n){return this.toDatalessObject(n)},toObject:function(n){return this._toObjectMethod("toObject",n)},toDatalessObject:function(n){return this._toObjectMethod("toDatalessObject",n)},_toObjectMethod:function(n,l){var f=this.clipPath,d={version:u.version,objects:this._toObjects(n,l)};return f&&!f.excludeFromExport&&(d.clipPath=this._toObject(this.clipPath,n,l)),c(d,this.__serializeBgOverlay(n,l)),u.util.populateWithProperties(this,d,l),d},_toObjects:function(n,l){return this._objects.filter(function(f){return!f.excludeFromExport}).map(function(f){return this._toObject(f,n,l)},this)},_toObject:function(n,l,f){var d;this.includeDefaultValues||(d=n.includeDefaultValues,n.includeDefaultValues=!1);var g=n[l](f);return this.includeDefaultValues||(n.includeDefaultValues=d),g},__serializeBgOverlay:function(n,l){var f={},d=this.backgroundImage,g=this.overlayImage,m=this.backgroundColor,p=this.overlayColor;return m&&m.toObject?m.excludeFromExport||(f.background=m.toObject(l)):m&&(f.background=m),p&&p.toObject?p.excludeFromExport||(f.overlay=p.toObject(l)):p&&(f.overlay=p),d&&!d.excludeFromExport&&(f.backgroundImage=this._toObject(d,n,l)),g&&!g.excludeFromExport&&(f.overlayImage=this._toObject(g,n,l)),f},svgViewportTransformation:!0,toSVG:function(n,l){n||(n={}),n.reviver=l;var f=[];return this._setSVGPreamble(f,n),this._setSVGHeader(f,n),this.clipPath&&f.push('<g clip-path="url(#'+this.clipPath.clipPathId+`)" >
`),this._setSVGBgOverlayColor(f,"background"),this._setSVGBgOverlayImage(f,"backgroundImage",l),this._setSVGObjects(f,l),this.clipPath&&f.push(`</g>
`),this._setSVGBgOverlayColor(f,"overlay"),this._setSVGBgOverlayImage(f,"overlayImage",l),f.push("</svg>"),f.join("")},_setSVGPreamble:function(n,l){l.suppressPreamble||n.push('<?xml version="1.0" encoding="',l.encoding||"UTF-8",`" standalone="no" ?>
`,'<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" ',`"http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
`)},_setSVGHeader:function(n,l){var f=l.width||this.width,d=l.height||this.height,g,m='viewBox="0 0 '+this.width+" "+this.height+'" ',p=u.Object.NUM_FRACTION_DIGITS;l.viewBox?m='viewBox="'+l.viewBox.x+" "+l.viewBox.y+" "+l.viewBox.width+" "+l.viewBox.height+'" ':this.svgViewportTransformation&&(g=this.viewportTransform,m='viewBox="'+o(-g[4]/g[0],p)+" "+o(-g[5]/g[3],p)+" "+o(this.width/g[0],p)+" "+o(this.height/g[3],p)+'" '),n.push("<svg ",'xmlns="http://www.w3.org/2000/svg" ','xmlns:xlink="http://www.w3.org/1999/xlink" ','version="1.1" ','width="',f,'" ','height="',d,'" ',m,`xml:space="preserve">
`,"<desc>Created with Fabric.js ",u.version,`</desc>
`,`<defs>
`,this.createSVGFontFacesMarkup(),this.createSVGRefElementsMarkup(),this.createSVGClipPathMarkup(l),`</defs>
`)},createSVGClipPathMarkup:function(n){var l=this.clipPath;return l?(l.clipPathId="CLIPPATH_"+u.Object.__uid++,'<clipPath id="'+l.clipPathId+`" >
`+this.clipPath.toClipPathSVG(n.reviver)+`</clipPath>
`):""},createSVGRefElementsMarkup:function(){var n=this,l=["background","overlay"].map(function(f){var d=n[f+"Color"];if(d&&d.toLive){var g=n[f+"Vpt"],m=n.viewportTransform,p={width:n.width/(g?m[0]:1),height:n.height/(g?m[3]:1)};return d.toSVG(p,{additionalTransform:g?u.util.matrixToSVG(m):""})}});return l.join("")},createSVGFontFacesMarkup:function(){var n="",l={},f,d,g,m,p,_,w,D,B,N=u.fontPaths,G=[];for(this._objects.forEach(function H(U){G.push(U),U._objects&&U._objects.forEach(H)}),D=0,B=G.length;D<B;D++)if(f=G[D],d=f.fontFamily,!(f.type.indexOf("text")===-1||l[d]||!N[d])&&(l[d]=!0,!!f.styles)){g=f.styles;for(p in g){m=g[p];for(w in m)_=m[w],d=_.fontFamily,!l[d]&&N[d]&&(l[d]=!0)}}for(var z in l)n+=[` @font-face {
`," font-family: '",z,`';
`," src: url('",N[z],`');
`,` }
`].join("");return n&&(n=[' <style type="text/css">',`<![CDATA[
`,n,"]]>",`</style>
`].join("")),n},_setSVGObjects:function(n,l){var f,d,g,m=this._objects;for(d=0,g=m.length;d<g;d++)f=m[d],!f.excludeFromExport&&this._setSVGObject(n,f,l)},_setSVGObject:function(n,l,f){n.push(l.toSVG(f))},_setSVGBgOverlayImage:function(n,l,f){this[l]&&!this[l].excludeFromExport&&this[l].toSVG&&n.push(this[l].toSVG(f))},_setSVGBgOverlayColor:function(n,l){var f=this[l+"Color"],d=this.viewportTransform,g=this.width,m=this.height;if(f)if(f.toLive){var p=f.repeat,_=u.util.invertTransform(d),w=this[l+"Vpt"],D=w?u.util.matrixToSVG(_):"";n.push('<rect transform="'+D+" translate(",g/2,",",m/2,')"',' x="',f.offsetX-g/2,'" y="',f.offsetY-m/2,'" ','width="',p==="repeat-y"||p==="no-repeat"?f.source.width:g,'" height="',p==="repeat-x"||p==="no-repeat"?f.source.height:m,'" fill="url(#SVGID_'+f.id+')"',`></rect>
`)}else n.push('<rect x="0" y="0" width="100%" height="100%" ','fill="',f,'"',`></rect>
`)},sendToBack:function(n){if(!n)return this;var l=this._activeObject,f,d,g;if(n===l&&n.type==="activeSelection")for(g=l._objects,f=g.length;f--;)d=g[f],a(this._objects,d),this._objects.unshift(d);else a(this._objects,n),this._objects.unshift(n);return this.renderOnAddRemove&&this.requestRenderAll(),this},bringToFront:function(n){if(!n)return this;var l=this._activeObject,f,d,g;if(n===l&&n.type==="activeSelection")for(g=l._objects,f=0;f<g.length;f++)d=g[f],a(this._objects,d),this._objects.push(d);else a(this._objects,n),this._objects.push(n);return this.renderOnAddRemove&&this.requestRenderAll(),this},sendBackwards:function(n,l){if(!n)return this;var f=this._activeObject,d,g,m,p,_,w=0;if(n===f&&n.type==="activeSelection")for(_=f._objects,d=0;d<_.length;d++)g=_[d],m=this._objects.indexOf(g),m>0+w&&(p=m-1,a(this._objects,g),this._objects.splice(p,0,g)),w++;else m=this._objects.indexOf(n),m!==0&&(p=this._findNewLowerIndex(n,m,l),a(this._objects,n),this._objects.splice(p,0,n));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewLowerIndex:function(n,l,f){var d,g;if(f)for(d=l,g=l-1;g>=0;--g){var m=n.intersectsWithObject(this._objects[g])||n.isContainedWithinObject(this._objects[g])||this._objects[g].isContainedWithinObject(n);if(m){d=g;break}}else d=l-1;return d},bringForward:function(n,l){if(!n)return this;var f=this._activeObject,d,g,m,p,_,w=0;if(n===f&&n.type==="activeSelection")for(_=f._objects,d=_.length;d--;)g=_[d],m=this._objects.indexOf(g),m<this._objects.length-1-w&&(p=m+1,a(this._objects,g),this._objects.splice(p,0,g)),w++;else m=this._objects.indexOf(n),m!==this._objects.length-1&&(p=this._findNewUpperIndex(n,m,l),a(this._objects,n),this._objects.splice(p,0,n));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewUpperIndex:function(n,l,f){var d,g,m;if(f)for(d=l,g=l+1,m=this._objects.length;g<m;++g){var p=n.intersectsWithObject(this._objects[g])||n.isContainedWithinObject(this._objects[g])||this._objects[g].isContainedWithinObject(n);if(p){d=g;break}}else d=l+1;return d},moveTo:function(n,l){return a(this._objects,n),this._objects.splice(l,0,n),this.renderOnAddRemove&&this.requestRenderAll()},dispose:function(){return this.isRendering&&(u.util.cancelAnimFrame(this.isRendering),this.isRendering=0),this.forEachObject(function(n){n.dispose&&n.dispose()}),this._objects=[],this.backgroundImage&&this.backgroundImage.dispose&&this.backgroundImage.dispose(),this.backgroundImage=null,this.overlayImage&&this.overlayImage.dispose&&this.overlayImage.dispose(),this.overlayImage=null,this._iTextInstances=null,this.contextContainer=null,this.lowerCanvasEl.classList.remove("lower-canvas"),u.util.setStyle(this.lowerCanvasEl,this._originalCanvasStyle),delete this._originalCanvasStyle,this.lowerCanvasEl.setAttribute("width",this.width),this.lowerCanvasEl.setAttribute("height",this.height),u.util.cleanUpJsdomNode(this.lowerCanvasEl),this.lowerCanvasEl=void 0,this},toString:function(){return"#<fabric.Canvas ("+this.complexity()+"): { objects: "+this._objects.length+" }>"}}),c(u.StaticCanvas.prototype,u.Observable),c(u.StaticCanvas.prototype,u.Collection),c(u.StaticCanvas.prototype,u.DataURLExporter),c(u.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(n){var l=s();if(!l||!l.getContext)return null;var f=l.getContext("2d");if(!f)return null;switch(n){case"setLineDash":return typeof f.setLineDash!="undefined";default:return null}}}),u.StaticCanvas.prototype.toJSON=u.StaticCanvas.prototype.toObject,u.isLikelyNode&&(u.StaticCanvas.prototype.createPNGStream=function(){var n=e(this.lowerCanvasEl);return n&&n.createPNGStream()},u.StaticCanvas.prototype.createJPEGStream=function(n){var l=e(this.lowerCanvasEl);return l&&l.createJPEGStream(n)})})();u.BaseBrush=u.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeMiterLimit:10,strokeDashArray:null,limitedToCanvasSize:!1,_setBrushStyles:function(c){c.strokeStyle=this.color,c.lineWidth=this.width,c.lineCap=this.strokeLineCap,c.miterLimit=this.strokeMiterLimit,c.lineJoin=this.strokeLineJoin,c.setLineDash(this.strokeDashArray||[])},_saveAndTransform:function(c){var i=this.canvas.viewportTransform;c.save(),c.transform(i[0],i[1],i[2],i[3],i[4],i[5])},_setShadow:function(){if(this.shadow){var c=this.canvas,i=this.shadow,a=c.contextTop,o=c.getZoom();c&&c._isRetinaScaling()&&(o*=u.devicePixelRatio),a.shadowColor=i.color,a.shadowBlur=i.blur*o,a.shadowOffsetX=i.offsetX*o,a.shadowOffsetY=i.offsetY*o}},needsFullRender:function(){var c=new u.Color(this.color);return c.getAlpha()<1||!!this.shadow},_resetShadow:function(){var c=this.canvas.contextTop;c.shadowColor="",c.shadowBlur=c.shadowOffsetX=c.shadowOffsetY=0},_isOutSideCanvas:function(c){return c.x<0||c.x>this.canvas.getWidth()||c.y<0||c.y>this.canvas.getHeight()}});(function(){u.PencilBrush=u.util.createClass(u.BaseBrush,{decimate:.4,drawStraightLine:!1,straightLineKey:"shiftKey",initialize:function(c){this.canvas=c,this._points=[]},needsFullRender:function(){return this.callSuper("needsFullRender")||this._hasStraightLine},_drawSegment:function(c,i,a){var o=i.midPointFrom(a);return c.quadraticCurveTo(i.x,i.y,o.x,o.y),o},onMouseDown:function(c,i){this.canvas._isMainEvent(i.e)&&(this.drawStraightLine=i.e[this.straightLineKey],this._prepareForDrawing(c),this._captureDrawingPath(c),this._render())},onMouseMove:function(c,i){if(this.canvas._isMainEvent(i.e)&&(this.drawStraightLine=i.e[this.straightLineKey],!(this.limitedToCanvasSize===!0&&this._isOutSideCanvas(c))&&this._captureDrawingPath(c)&&this._points.length>1))if(this.needsFullRender())this.canvas.clearContext(this.canvas.contextTop),this._render();else{var a=this._points,o=a.length,t=this.canvas.contextTop;this._saveAndTransform(t),this.oldEnd&&(t.beginPath(),t.moveTo(this.oldEnd.x,this.oldEnd.y)),this.oldEnd=this._drawSegment(t,a[o-2],a[o-1],!0),t.stroke(),t.restore()}},onMouseUp:function(c){return this.canvas._isMainEvent(c.e)?(this.drawStraightLine=!1,this.oldEnd=void 0,this._finalizeAndAddPath(),!1):!0},_prepareForDrawing:function(c){var i=new u.Point(c.x,c.y);this._reset(),this._addPoint(i),this.canvas.contextTop.moveTo(i.x,i.y)},_addPoint:function(c){return this._points.length>1&&c.eq(this._points[this._points.length-1])?!1:(this.drawStraightLine&&this._points.length>1&&(this._hasStraightLine=!0,this._points.pop()),this._points.push(c),!0)},_reset:function(){this._points=[],this._setBrushStyles(this.canvas.contextTop),this._setShadow(),this._hasStraightLine=!1},_captureDrawingPath:function(c){var i=new u.Point(c.x,c.y);return this._addPoint(i)},_render:function(c){var i,a,o=this._points[0],t=this._points[1];if(c=c||this.canvas.contextTop,this._saveAndTransform(c),c.beginPath(),this._points.length===2&&o.x===t.x&&o.y===t.y){var r=this.width/1e3;o=new u.Point(o.x,o.y),t=new u.Point(t.x,t.y),o.x-=r,t.x+=r}for(c.moveTo(o.x,o.y),i=1,a=this._points.length;i<a;i++)this._drawSegment(c,o,t),o=this._points[i],t=this._points[i+1];c.lineTo(o.x,o.y),c.stroke(),c.restore()},convertPointsToSVGPath:function(c){var i=this.width/1e3;return u.util.getSmoothPathFromPoints(c,i)},_isEmptySVGPath:function(c){var i=u.util.joinPath(c);return i==="M 0 0 Q 0 0 0 0 L 0 0"},createPath:function(c){var i=new u.Path(c,{fill:null,stroke:this.color,strokeWidth:this.width,strokeLineCap:this.strokeLineCap,strokeMiterLimit:this.strokeMiterLimit,strokeLineJoin:this.strokeLineJoin,strokeDashArray:this.strokeDashArray});return this.shadow&&(this.shadow.affectStroke=!0,i.shadow=new u.Shadow(this.shadow)),i},decimatePoints:function(c,i){if(c.length<=2)return c;var a=this.canvas.getZoom(),o=Math.pow(i/a,2),t,r=c.length-1,e=c[0],s=[e],h;for(t=1;t<r-1;t++)h=Math.pow(e.x-c[t].x,2)+Math.pow(e.y-c[t].y,2),h>=o&&(e=c[t],s.push(e));return s.push(c[r]),s},_finalizeAndAddPath:function(){var c=this.canvas.contextTop;c.closePath(),this.decimate&&(this._points=this.decimatePoints(this._points,this.decimate));var i=this.convertPointsToSVGPath(this._points);if(this._isEmptySVGPath(i)){this.canvas.requestRenderAll();return}var a=this.createPath(i);this.canvas.clearContext(this.canvas.contextTop),this.canvas.fire("before:path:created",{path:a}),this.canvas.add(a),this.canvas.requestRenderAll(),a.setCoords(),this._resetShadow(),this.canvas.fire("path:created",{path:a})}})})();u.CircleBrush=u.util.createClass(u.BaseBrush,{width:10,initialize:function(c){this.canvas=c,this.points=[]},drawDot:function(c){var i=this.addPoint(c),a=this.canvas.contextTop;this._saveAndTransform(a),this.dot(a,i),a.restore()},dot:function(c,i){c.fillStyle=i.fill,c.beginPath(),c.arc(i.x,i.y,i.radius,0,Math.PI*2,!1),c.closePath(),c.fill()},onMouseDown:function(c){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(c)},_render:function(){var c=this.canvas.contextTop,i,a,o=this.points;for(this._saveAndTransform(c),i=0,a=o.length;i<a;i++)this.dot(c,o[i]);c.restore()},onMouseMove:function(c){this.limitedToCanvasSize===!0&&this._isOutSideCanvas(c)||(this.needsFullRender()?(this.canvas.clearContext(this.canvas.contextTop),this.addPoint(c),this._render()):this.drawDot(c))},onMouseUp:function(){var c=this.canvas.renderOnAddRemove,i,a;this.canvas.renderOnAddRemove=!1;var o=[];for(i=0,a=this.points.length;i<a;i++){var t=this.points[i],r=new u.Circle({radius:t.radius,left:t.x,top:t.y,originX:"center",originY:"center",fill:t.fill});this.shadow&&(r.shadow=new u.Shadow(this.shadow)),o.push(r)}var e=new u.Group(o);e.canvas=this.canvas,this.canvas.fire("before:path:created",{path:e}),this.canvas.add(e),this.canvas.fire("path:created",{path:e}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=c,this.canvas.requestRenderAll()},addPoint:function(c){var i=new u.Point(c.x,c.y),a=u.util.getRandomInt(Math.max(0,this.width-20),this.width+20)/2,o=new u.Color(this.color).setAlpha(u.util.getRandomInt(0,100)/100).toRgba();return i.radius=a,i.fill=o,this.points.push(i),i}});u.SprayBrush=u.util.createClass(u.BaseBrush,{width:10,density:20,dotWidth:1,dotWidthVariance:1,randomOpacity:!1,optimizeOverlapping:!0,initialize:function(c){this.canvas=c,this.sprayChunks=[]},onMouseDown:function(c){this.sprayChunks.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.addSprayChunk(c),this.render(this.sprayChunkPoints)},onMouseMove:function(c){this.limitedToCanvasSize===!0&&this._isOutSideCanvas(c)||(this.addSprayChunk(c),this.render(this.sprayChunkPoints))},onMouseUp:function(){var c=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;for(var i=[],a=0,o=this.sprayChunks.length;a<o;a++)for(var t=this.sprayChunks[a],r=0,e=t.length;r<e;r++){var s=new u.Rect({width:t[r].width,height:t[r].width,left:t[r].x+1,top:t[r].y+1,originX:"center",originY:"center",fill:this.color});i.push(s)}this.optimizeOverlapping&&(i=this._getOptimizedRects(i));var h=new u.Group(i);this.shadow&&h.set("shadow",new u.Shadow(this.shadow)),this.canvas.fire("before:path:created",{path:h}),this.canvas.add(h),this.canvas.fire("path:created",{path:h}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=c,this.canvas.requestRenderAll()},_getOptimizedRects:function(c){var i={},a,o,t;for(o=0,t=c.length;o<t;o++)a=c[o].left+""+c[o].top,i[a]||(i[a]=c[o]);var r=[];for(a in i)r.push(i[a]);return r},render:function(c){var i=this.canvas.contextTop,a,o;for(i.fillStyle=this.color,this._saveAndTransform(i),a=0,o=c.length;a<o;a++){var t=c[a];typeof t.opacity!="undefined"&&(i.globalAlpha=t.opacity),i.fillRect(t.x,t.y,t.width,t.width)}i.restore()},_render:function(){var c=this.canvas.contextTop,i,a;for(c.fillStyle=this.color,this._saveAndTransform(c),i=0,a=this.sprayChunks.length;i<a;i++)this.render(this.sprayChunks[i]);c.restore()},addSprayChunk:function(c){this.sprayChunkPoints=[];var i,a,o,t=this.width/2,r;for(r=0;r<this.density;r++){i=u.util.getRandomInt(c.x-t,c.x+t),a=u.util.getRandomInt(c.y-t,c.y+t),this.dotWidthVariance?o=u.util.getRandomInt(Math.max(1,this.dotWidth-this.dotWidthVariance),this.dotWidth+this.dotWidthVariance):o=this.dotWidth;var e=new u.Point(i,a);e.width=o,this.randomOpacity&&(e.opacity=u.util.getRandomInt(0,100)/100),this.sprayChunkPoints.push(e)}this.sprayChunks.push(this.sprayChunkPoints)}});u.PatternBrush=u.util.createClass(u.PencilBrush,{getPatternSrc:function(){var c=20,i=5,a=u.util.createCanvasElement(),o=a.getContext("2d");return a.width=a.height=c+i,o.fillStyle=this.color,o.beginPath(),o.arc(c/2,c/2,c/2,0,Math.PI*2,!1),o.closePath(),o.fill(),a},getPatternSrcFunction:function(){return String(this.getPatternSrc).replace("this.color",'"'+this.color+'"')},getPattern:function(c){return c.createPattern(this.source||this.getPatternSrc(),"repeat")},_setBrushStyles:function(c){this.callSuper("_setBrushStyles",c),c.strokeStyle=this.getPattern(c)},createPath:function(c){var i=this.callSuper("createPath",c),a=i._getLeftTopCoords().scalarAdd(i.strokeWidth/2);return i.stroke=new u.Pattern({source:this.source||this.getPatternSrcFunction(),offsetX:-a.x,offsetY:-a.y}),i}});(function(){var c=u.util.getPointer,i=u.util.degreesToRadians,a=u.util.isTouchEvent;u.Canvas=u.util.createClass(u.StaticCanvas,{initialize:function(t,r){r||(r={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(t,r),this._initInteractive(),this._createCacheCanvas()},uniformScaling:!0,uniScaleKey:"shiftKey",centeredScaling:!1,centeredRotation:!1,centeredKey:"altKey",altActionKey:"shiftKey",interactive:!0,selection:!0,selectionKey:"shiftKey",altSelectionKey:null,selectionColor:"rgba(100, 100, 255, 0.3)",selectionDashArray:[],selectionBorderColor:"rgba(255, 255, 255, 0.3)",selectionLineWidth:1,selectionFullyContained:!1,hoverCursor:"move",moveCursor:"move",defaultCursor:"default",freeDrawingCursor:"crosshair",notAllowedCursor:"not-allowed",containerClass:"canvas-container",perPixelTargetFind:!1,targetFindTolerance:0,skipTargetFind:!1,isDrawingMode:!1,preserveObjectStacking:!1,snapAngle:0,snapThreshold:null,stopContextMenu:!1,fireRightClick:!1,fireMiddleClick:!1,targets:[],enablePointerEvents:!1,_hoveredTarget:null,_hoveredTargets:[],_initInteractive:function(){this._currentTransform=null,this._groupSelector=null,this._initWrapperElement(),this._createUpperCanvas(),this._initEventListeners(),this._initRetinaScaling(),this.freeDrawingBrush=u.PencilBrush&&new u.PencilBrush(this),this.calcOffset()},_chooseObjectsToRender:function(){var t=this.getActiveObjects(),r,e,s;if(t.length>0&&!this.preserveObjectStacking){e=[],s=[];for(var h=0,n=this._objects.length;h<n;h++)r=this._objects[h],t.indexOf(r)===-1?e.push(r):s.push(r);t.length>1&&(this._activeObject._objects=s),e.push.apply(e,s)}else e=this._objects;return e},renderAll:function(){this.contextTopDirty&&!this._groupSelector&&!this.isDrawingMode&&(this.clearContext(this.contextTop),this.contextTopDirty=!1),this.hasLostContext&&(this.renderTopLayer(this.contextTop),this.hasLostContext=!1);var t=this.contextContainer;return this.renderCanvas(t,this._chooseObjectsToRender()),this},renderTopLayer:function(t){t.save(),this.isDrawingMode&&this._isCurrentlyDrawing&&(this.freeDrawingBrush&&this.freeDrawingBrush._render(),this.contextTopDirty=!0),this.selection&&this._groupSelector&&(this._drawSelection(t),this.contextTopDirty=!0),t.restore()},renderTop:function(){var t=this.contextTop;return this.clearContext(t),this.renderTopLayer(t),this.fire("after:render"),this},_normalizePointer:function(t,r){var e=t.calcTransformMatrix(),s=u.util.invertTransform(e),h=this.restorePointerVpt(r);return u.util.transformPoint(h,s)},isTargetTransparent:function(t,r,e){if(t.shouldCache()&&t._cacheCanvas&&t!==this._activeObject){var s=this._normalizePointer(t,{x:r,y:e}),h=Math.max(t.cacheTranslationX+s.x*t.zoomX,0),n=Math.max(t.cacheTranslationY+s.y*t.zoomY,0),g=u.util.isTransparent(t._cacheContext,Math.round(h),Math.round(n),this.targetFindTolerance);return g}var l=this.contextCache,f=t.selectionBackgroundColor,d=this.viewportTransform;t.selectionBackgroundColor="",this.clearContext(l),l.save(),l.transform(d[0],d[1],d[2],d[3],d[4],d[5]),t.render(l),l.restore(),t.selectionBackgroundColor=f;var g=u.util.isTransparent(l,r,e,this.targetFindTolerance);return g},_isSelectionKeyPressed:function(t){var r=!1;return Object.prototype.toString.call(this.selectionKey)==="[object Array]"?r=!!this.selectionKey.find(function(e){return t[e]===!0}):r=t[this.selectionKey],r},_shouldClearSelection:function(t,r){var e=this.getActiveObjects(),s=this._activeObject;return!r||r&&s&&e.length>1&&e.indexOf(r)===-1&&s!==r&&!this._isSelectionKeyPressed(t)||r&&!r.evented||r&&!r.selectable&&s&&s!==r},_shouldCenterTransform:function(t,r,e){if(t){var s;return r==="scale"||r==="scaleX"||r==="scaleY"||r==="resizing"?s=this.centeredScaling||t.centeredScaling:r==="rotate"&&(s=this.centeredRotation||t.centeredRotation),s?!e:e}},_getOriginFromCorner:function(t,r){var e={x:t.originX,y:t.originY};return r==="ml"||r==="tl"||r==="bl"?e.x="right":(r==="mr"||r==="tr"||r==="br")&&(e.x="left"),r==="tl"||r==="mt"||r==="tr"?e.y="bottom":(r==="bl"||r==="mb"||r==="br")&&(e.y="top"),e},_getActionFromCorner:function(t,r,e,s){if(!r||!t)return"drag";var h=s.controls[r];return h.getActionName(e,h,s)},_setupCurrentTransform:function(t,r,e){if(r){var s=this.getPointer(t),h=r.__corner,n=r.controls[h],l=e&&h?n.getActionHandler(t,r,n):u.controlsUtils.dragHandler,f=this._getActionFromCorner(e,h,t,r),d=this._getOriginFromCorner(r,h),g=t[this.centeredKey],m={target:r,action:f,actionHandler:l,corner:h,scaleX:r.scaleX,scaleY:r.scaleY,skewX:r.skewX,skewY:r.skewY,offsetX:s.x-r.left,offsetY:s.y-r.top,originX:d.x,originY:d.y,ex:s.x,ey:s.y,lastX:s.x,lastY:s.y,theta:i(r.angle),width:r.width*r.scaleX,shiftKey:t.shiftKey,altKey:g,original:u.util.saveObjectTransform(r)};this._shouldCenterTransform(r,f,g)&&(m.originX="center",m.originY="center"),m.original.originX=d.x,m.original.originY=d.y,this._currentTransform=m,this._beforeTransform(t)}},setCursor:function(t){this.upperCanvasEl.style.cursor=t},_drawSelection:function(t){var r=this._groupSelector,e=new u.Point(r.ex,r.ey),s=u.util.transformPoint(e,this.viewportTransform),h=new u.Point(r.ex+r.left,r.ey+r.top),n=u.util.transformPoint(h,this.viewportTransform),l=Math.min(s.x,n.x),f=Math.min(s.y,n.y),d=Math.max(s.x,n.x),g=Math.max(s.y,n.y),m=this.selectionLineWidth/2;this.selectionColor&&(t.fillStyle=this.selectionColor,t.fillRect(l,f,d-l,g-f)),!(!this.selectionLineWidth||!this.selectionBorderColor)&&(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,l+=m,f+=m,d-=m,g-=m,u.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(l,f,d-l,g-f))},findTarget:function(t,r){if(!this.skipTargetFind){var e=!0,s=this.getPointer(t,e),h=this._activeObject,n=this.getActiveObjects(),l,f,d=a(t),g=n.length>1&&!r||n.length===1;if(this.targets=[],g&&h._findTargetCorner(s,d)||n.length>1&&!r&&h===this._searchPossibleTargets([h],s))return h;if(n.length===1&&h===this._searchPossibleTargets([h],s))if(this.preserveObjectStacking)l=h,f=this.targets,this.targets=[];else return h;var m=this._searchPossibleTargets(this._objects,s);return t[this.altSelectionKey]&&m&&l&&m!==l&&(m=l,this.targets=f),m}},_checkTarget:function(t,r,e){if(r&&r.visible&&r.evented&&r.containsPoint(t))if((this.perPixelTargetFind||r.perPixelTargetFind)&&!r.isEditing){var s=this.isTargetTransparent(r,e.x,e.y);if(!s)return!0}else return!0},_searchPossibleTargets:function(t,r){for(var e,s=t.length,h;s--;){var n=t[s],l=n.group?this._normalizePointer(n.group,r):r;if(this._checkTarget(l,n,r)){e=t[s],e.subTargetCheck&&e instanceof u.Group&&(h=this._searchPossibleTargets(e._objects,r),h&&this.targets.push(h));break}}return e},restorePointerVpt:function(t){return u.util.transformPoint(t,u.util.invertTransform(this.viewportTransform))},getPointer:function(t,r){if(this._absolutePointer&&!r)return this._absolutePointer;if(this._pointer&&r)return this._pointer;var e=c(t),s=this.upperCanvasEl,h=s.getBoundingClientRect(),n=h.width||0,l=h.height||0,f;(!n||!l)&&("top"in h&&"bottom"in h&&(l=Math.abs(h.top-h.bottom)),"right"in h&&"left"in h&&(n=Math.abs(h.right-h.left))),this.calcOffset(),e.x=e.x-this._offset.left,e.y=e.y-this._offset.top,r||(e=this.restorePointerVpt(e));var d=this.getRetinaScaling();return d!==1&&(e.x/=d,e.y/=d),n===0||l===0?f={width:1,height:1}:f={width:s.width/n,height:s.height/l},{x:e.x*f.width,y:e.y*f.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,""),r=this.lowerCanvasEl,e=this.upperCanvasEl;e?e.className="":(e=this._createCanvasElement(),this.upperCanvasEl=e),u.util.addClass(e,"upper-canvas "+t),this.wrapperEl.appendChild(e),this._copyCanvasStyle(r,e),this._applyCanvasStyle(e),this.contextTop=e.getContext("2d")},_createCacheCanvas:function(){this.cacheCanvasEl=this._createCanvasElement(),this.cacheCanvasEl.setAttribute("width",this.width),this.cacheCanvasEl.setAttribute("height",this.height),this.contextCache=this.cacheCanvasEl.getContext("2d")},_initWrapperElement:function(){this.wrapperEl=u.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),u.util.setStyle(this.wrapperEl,{width:this.width+"px",height:this.height+"px",position:"relative"}),u.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var r=this.width||t.width,e=this.height||t.height;u.util.setStyle(t,{position:"absolute",width:r+"px",height:e+"px",left:0,top:0,"touch-action":this.allowTouchScrolling?"manipulation":"none","-ms-touch-action":this.allowTouchScrolling?"manipulation":"none"}),t.width=r,t.height=e,u.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,r){r.style.cssText=t.style.cssText},getSelectionContext:function(){return this.contextTop},getSelectionElement:function(){return this.upperCanvasEl},getActiveObject:function(){return this._activeObject},getActiveObjects:function(){var t=this._activeObject;return t?t.type==="activeSelection"&&t._objects?t._objects.slice(0):[t]:[]},_onObjectRemoved:function(t){t===this._activeObject&&(this.fire("before:selection:cleared",{target:t}),this._discardActiveObject(),this.fire("selection:cleared",{target:t}),t.fire("deselected")),t===this._hoveredTarget&&(this._hoveredTarget=null,this._hoveredTargets=[]),this.callSuper("_onObjectRemoved",t)},_fireSelectionEvents:function(t,r){var e=!1,s=this.getActiveObjects(),h=[],n=[];t.forEach(function(l){s.indexOf(l)===-1&&(e=!0,l.fire("deselected",{e:r,target:l}),n.push(l))}),s.forEach(function(l){t.indexOf(l)===-1&&(e=!0,l.fire("selected",{e:r,target:l}),h.push(l))}),t.length>0&&s.length>0?e&&this.fire("selection:updated",{e:r,selected:h,deselected:n}):s.length>0?this.fire("selection:created",{e:r,selected:h}):t.length>0&&this.fire("selection:cleared",{e:r,deselected:n})},setActiveObject:function(t,r){var e=this.getActiveObjects();return this._setActiveObject(t,r),this._fireSelectionEvents(e,r),this},_setActiveObject:function(t,r){return this._activeObject===t||!this._discardActiveObject(r,t)||t.onSelect({e:r})?!1:(this._activeObject=t,!0)},_discardActiveObject:function(t,r){var e=this._activeObject;if(e){if(e.onDeselect({e:t,object:r}))return!1;this._activeObject=null}return!0},discardActiveObject:function(t){var r=this.getActiveObjects(),e=this.getActiveObject();return r.length&&this.fire("before:selection:cleared",{target:e,e:t}),this._discardActiveObject(t),this._fireSelectionEvents(r,t),this},dispose:function(){var t=this.wrapperEl;return this.removeListeners(),t.removeChild(this.upperCanvasEl),t.removeChild(this.lowerCanvasEl),this.contextCache=null,this.contextTop=null,["upperCanvasEl","cacheCanvasEl"].forEach(function(r){u.util.cleanUpJsdomNode(this[r]),this[r]=void 0}.bind(this)),t.parentNode&&t.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,u.StaticCanvas.prototype.dispose.call(this),this},clear:function(){return this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(t){var r=this._activeObject;r&&r._renderControls(t)},_toObject:function(t,r,e){var s=this._realizeGroupTransformOnObject(t),h=this.callSuper("_toObject",t,r,e);return this._unwindGroupTransformOnObject(t,s),h},_realizeGroupTransformOnObject:function(t){if(t.group&&t.group.type==="activeSelection"&&this._activeObject===t.group){var r=["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"],e={};return r.forEach(function(s){e[s]=t[s]}),u.util.addTransformToObject(t,this._activeObject.calcOwnMatrix()),e}else return null},_unwindGroupTransformOnObject:function(t,r){r&&t.set(r)},_setSVGObject:function(t,r,e){var s=this._realizeGroupTransformOnObject(r);this.callSuper("_setSVGObject",t,r,e),this._unwindGroupTransformOnObject(r,s)},setViewportTransform:function(t){this.renderOnAddRemove&&this._activeObject&&this._activeObject.isEditing&&this._activeObject.clearContextTop(),u.StaticCanvas.prototype.setViewportTransform.call(this,t)}});for(var o in u.StaticCanvas)o!=="prototype"&&(u.Canvas[o]=u.StaticCanvas[o])})();(function(){var c=u.util.addListener,i=u.util.removeListener,a=3,o=2,t=1,r={passive:!1};function e(s,h){return s.button&&s.button===h-1}u.util.object.extend(u.Canvas.prototype,{mainTouchId:null,_initEventListeners:function(){this.removeListeners(),this._bindEvents(),this.addOrRemove(c,"add")},_getEventPrefix:function(){return this.enablePointerEvents?"pointer":"mouse"},addOrRemove:function(s,h){var n=this.upperCanvasEl,l=this._getEventPrefix();s(u.window,"resize",this._onResize),s(n,l+"down",this._onMouseDown),s(n,l+"move",this._onMouseMove,r),s(n,l+"out",this._onMouseOut),s(n,l+"enter",this._onMouseEnter),s(n,"wheel",this._onMouseWheel),s(n,"contextmenu",this._onContextMenu),s(n,"dblclick",this._onDoubleClick),s(n,"dragover",this._onDragOver),s(n,"dragenter",this._onDragEnter),s(n,"dragleave",this._onDragLeave),s(n,"drop",this._onDrop),this.enablePointerEvents||s(n,"touchstart",this._onTouchStart,r),typeof eventjs!="undefined"&&h in eventjs&&(eventjs[h](n,"gesture",this._onGesture),eventjs[h](n,"drag",this._onDrag),eventjs[h](n,"orientation",this._onOrientationChange),eventjs[h](n,"shake",this._onShake),eventjs[h](n,"longpress",this._onLongPress))},removeListeners:function(){this.addOrRemove(i,"remove");var s=this._getEventPrefix();i(u.document,s+"up",this._onMouseUp),i(u.document,"touchend",this._onTouchEnd,r),i(u.document,s+"move",this._onMouseMove,r),i(u.document,"touchmove",this._onMouseMove,r)},_bindEvents:function(){this.eventsBound||(this._onMouseDown=this._onMouseDown.bind(this),this._onTouchStart=this._onTouchStart.bind(this),this._onMouseMove=this._onMouseMove.bind(this),this._onMouseUp=this._onMouseUp.bind(this),this._onTouchEnd=this._onTouchEnd.bind(this),this._onResize=this._onResize.bind(this),this._onGesture=this._onGesture.bind(this),this._onDrag=this._onDrag.bind(this),this._onShake=this._onShake.bind(this),this._onLongPress=this._onLongPress.bind(this),this._onOrientationChange=this._onOrientationChange.bind(this),this._onMouseWheel=this._onMouseWheel.bind(this),this._onMouseOut=this._onMouseOut.bind(this),this._onMouseEnter=this._onMouseEnter.bind(this),this._onContextMenu=this._onContextMenu.bind(this),this._onDoubleClick=this._onDoubleClick.bind(this),this._onDragOver=this._onDragOver.bind(this),this._onDragEnter=this._simpleEventHandler.bind(this,"dragenter"),this._onDragLeave=this._simpleEventHandler.bind(this,"dragleave"),this._onDrop=this._onDrop.bind(this),this.eventsBound=!0)},_onGesture:function(s,h){this.__onTransformGesture&&this.__onTransformGesture(s,h)},_onDrag:function(s,h){this.__onDrag&&this.__onDrag(s,h)},_onMouseWheel:function(s){this.__onMouseWheel(s)},_onMouseOut:function(s){var h=this._hoveredTarget;this.fire("mouse:out",{target:h,e:s}),this._hoveredTarget=null,h&&h.fire("mouseout",{e:s});var n=this;this._hoveredTargets.forEach(function(l){n.fire("mouse:out",{target:h,e:s}),l&&h.fire("mouseout",{e:s})}),this._hoveredTargets=[],this._iTextInstances&&this._iTextInstances.forEach(function(l){l.isEditing&&l.hiddenTextarea.focus()})},_onMouseEnter:function(s){!this._currentTransform&&!this.findTarget(s)&&(this.fire("mouse:over",{target:null,e:s}),this._hoveredTarget=null,this._hoveredTargets=[])},_onOrientationChange:function(s,h){this.__onOrientationChange&&this.__onOrientationChange(s,h)},_onShake:function(s,h){this.__onShake&&this.__onShake(s,h)},_onLongPress:function(s,h){this.__onLongPress&&this.__onLongPress(s,h)},_onDragOver:function(s){s.preventDefault();var h=this._simpleEventHandler("dragover",s);this._fireEnterLeaveEvents(h,s)},_onDrop:function(s){return this._simpleEventHandler("drop:before",s),this._simpleEventHandler("drop",s)},_onContextMenu:function(s){return this.stopContextMenu&&(s.stopPropagation(),s.preventDefault()),!1},_onDoubleClick:function(s){this._cacheTransformEventData(s),this._handleEvent(s,"dblclick"),this._resetTransformEventData(s)},getPointerId:function(s){var h=s.changedTouches;return h?h[0]&&h[0].identifier:this.enablePointerEvents?s.pointerId:-1},_isMainEvent:function(s){return s.isPrimary===!0?!0:s.isPrimary===!1?!1:s.type==="touchend"&&s.touches.length===0?!0:s.changedTouches?s.changedTouches[0].identifier===this.mainTouchId:!0},_onTouchStart:function(s){s.preventDefault(),this.mainTouchId===null&&(this.mainTouchId=this.getPointerId(s)),this.__onMouseDown(s),this._resetTransformEventData();var h=this.upperCanvasEl,n=this._getEventPrefix();c(u.document,"touchend",this._onTouchEnd,r),c(u.document,"touchmove",this._onMouseMove,r),i(h,n+"down",this._onMouseDown)},_onMouseDown:function(s){this.__onMouseDown(s),this._resetTransformEventData();var h=this.upperCanvasEl,n=this._getEventPrefix();i(h,n+"move",this._onMouseMove,r),c(u.document,n+"up",this._onMouseUp),c(u.document,n+"move",this._onMouseMove,r)},_onTouchEnd:function(s){if(!(s.touches.length>0)){this.__onMouseUp(s),this._resetTransformEventData(),this.mainTouchId=null;var h=this._getEventPrefix();i(u.document,"touchend",this._onTouchEnd,r),i(u.document,"touchmove",this._onMouseMove,r);var n=this;this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout(function(){c(n.upperCanvasEl,h+"down",n._onMouseDown),n._willAddMouseDown=0},400)}},_onMouseUp:function(s){this.__onMouseUp(s),this._resetTransformEventData();var h=this.upperCanvasEl,n=this._getEventPrefix();this._isMainEvent(s)&&(i(u.document,n+"up",this._onMouseUp),i(u.document,n+"move",this._onMouseMove,r),c(h,n+"move",this._onMouseMove,r))},_onMouseMove:function(s){!this.allowTouchScrolling&&s.preventDefault&&s.preventDefault(),this.__onMouseMove(s)},_onResize:function(){this.calcOffset()},_shouldRender:function(s){var h=this._activeObject;return!!h!=!!s||h&&s&&h!==s?!0:(h&&h.isEditing,!1)},__onMouseUp:function(s){var h,n=this._currentTransform,l=this._groupSelector,f=!1,d=!l||l.left===0&&l.top===0;if(this._cacheTransformEventData(s),h=this._target,this._handleEvent(s,"up:before"),e(s,a)){this.fireRightClick&&this._handleEvent(s,"up",a,d);return}if(e(s,o)){this.fireMiddleClick&&this._handleEvent(s,"up",o,d),this._resetTransformEventData();return}if(this.isDrawingMode&&this._isCurrentlyDrawing){this._onMouseUpInDrawingMode(s);return}if(this._isMainEvent(s)){if(n&&(this._finalizeCurrentTransform(s),f=n.actionPerformed),!d){var g=h===this._activeObject;this._maybeGroupObjects(s),f||(f=this._shouldRender(h)||!g&&h===this._activeObject)}var m,p;if(h){if(m=h._findTargetCorner(this.getPointer(s,!0),u.util.isTouchEvent(s)),h.selectable&&h!==this._activeObject&&h.activeOn==="up")this.setActiveObject(h,s),f=!0;else{var _=h.controls[m],w=_&&_.getMouseUpHandler(s,h,_);w&&(p=this.getPointer(s),w(s,n,p.x,p.y))}h.isMoving=!1}if(n&&(n.target!==h||n.corner!==m)){var D=n.target&&n.target.controls[n.corner],B=D&&D.getMouseUpHandler(s,h,_);p=p||this.getPointer(s),B&&B(s,n,p.x,p.y)}this._setCursorFromEvent(s,h),this._handleEvent(s,"up",t,d),this._groupSelector=null,this._currentTransform=null,h&&(h.__corner=0),f?this.requestRenderAll():d||this.renderTop()}},_simpleEventHandler:function(s,h){var n=this.findTarget(h),l=this.targets,f={e:h,target:n,subTargets:l};if(this.fire(s,f),n&&n.fire(s,f),!l)return n;for(var d=0;d<l.length;d++)l[d].fire(s,f);return n},_handleEvent:function(s,h,n,l){var f=this._target,d=this.targets||[],g={e:s,target:f,subTargets:d,button:n||t,isClick:l||!1,pointer:this._pointer,absolutePointer:this._absolutePointer,transform:this._currentTransform};h==="up"&&(g.currentTarget=this.findTarget(s),g.currentSubTargets=this.targets),this.fire("mouse:"+h,g),f&&f.fire("mouse"+h,g);for(var m=0;m<d.length;m++)d[m].fire("mouse"+h,g)},_finalizeCurrentTransform:function(s){var h=this._currentTransform,n=h.target,l={e:s,target:n,transform:h,action:h.action};n._scaling&&(n._scaling=!1),n.setCoords(),(h.actionPerformed||this.stateful&&n.hasStateChanged())&&this._fire("modified",l)},_onMouseDownInDrawingMode:function(s){this._isCurrentlyDrawing=!0,this.getActiveObject()&&this.discardActiveObject(s).requestRenderAll();var h=this.getPointer(s);this.freeDrawingBrush.onMouseDown(h,{e:s,pointer:h}),this._handleEvent(s,"down")},_onMouseMoveInDrawingMode:function(s){if(this._isCurrentlyDrawing){var h=this.getPointer(s);this.freeDrawingBrush.onMouseMove(h,{e:s,pointer:h})}this.setCursor(this.freeDrawingCursor),this._handleEvent(s,"move")},_onMouseUpInDrawingMode:function(s){var h=this.getPointer(s);this._isCurrentlyDrawing=this.freeDrawingBrush.onMouseUp({e:s,pointer:h}),this._handleEvent(s,"up")},__onMouseDown:function(s){this._cacheTransformEventData(s),this._handleEvent(s,"down:before");var h=this._target;if(e(s,a)){this.fireRightClick&&this._handleEvent(s,"down",a);return}if(e(s,o)){this.fireMiddleClick&&this._handleEvent(s,"down",o);return}if(this.isDrawingMode){this._onMouseDownInDrawingMode(s);return}if(this._isMainEvent(s)&&!this._currentTransform){var n=this._pointer;this._previousPointer=n;var l=this._shouldRender(h),f=this._shouldGroup(s,h);if(this._shouldClearSelection(s,h)?this.discardActiveObject(s):f&&(this._handleGrouping(s,h),h=this._activeObject),this.selection&&(!h||!h.selectable&&!h.isEditing&&h!==this._activeObject)&&(this._groupSelector={ex:this._absolutePointer.x,ey:this._absolutePointer.y,top:0,left:0}),h){var d=h===this._activeObject;h.selectable&&h.activeOn==="down"&&this.setActiveObject(h,s);var g=h._findTargetCorner(this.getPointer(s,!0),u.util.isTouchEvent(s));if(h.__corner=g,h===this._activeObject&&(g||!f)){this._setupCurrentTransform(s,h,d);var m=h.controls[g],n=this.getPointer(s),p=m&&m.getMouseDownHandler(s,h,m);p&&p(s,this._currentTransform,n.x,n.y)}}this._handleEvent(s,"down"),(l||f)&&this.requestRenderAll()}},_resetTransformEventData:function(){this._target=null,this._pointer=null,this._absolutePointer=null},_cacheTransformEventData:function(s){this._resetTransformEventData(),this._pointer=this.getPointer(s,!0),this._absolutePointer=this.restorePointerVpt(this._pointer),this._target=this._currentTransform?this._currentTransform.target:this.findTarget(s)||null},_beforeTransform:function(s){var h=this._currentTransform;this.stateful&&h.target.saveState(),this.fire("before:transform",{e:s,transform:h})},__onMouseMove:function(s){this._handleEvent(s,"move:before"),this._cacheTransformEventData(s);var h,n;if(this.isDrawingMode){this._onMouseMoveInDrawingMode(s);return}if(this._isMainEvent(s)){var l=this._groupSelector;l?(n=this._absolutePointer,l.left=n.x-l.ex,l.top=n.y-l.ey,this.renderTop()):this._currentTransform?this._transformObject(s):(h=this.findTarget(s)||null,this._setCursorFromEvent(s,h),this._fireOverOutEvents(h,s)),this._handleEvent(s,"move"),this._resetTransformEventData()}},_fireOverOutEvents:function(s,h){var n=this._hoveredTarget,l=this._hoveredTargets,f=this.targets,d=Math.max(l.length,f.length);this.fireSyntheticInOutEvents(s,h,{oldTarget:n,evtOut:"mouseout",canvasEvtOut:"mouse:out",evtIn:"mouseover",canvasEvtIn:"mouse:over"});for(var g=0;g<d;g++)this.fireSyntheticInOutEvents(f[g],h,{oldTarget:l[g],evtOut:"mouseout",evtIn:"mouseover"});this._hoveredTarget=s,this._hoveredTargets=this.targets.concat()},_fireEnterLeaveEvents:function(s,h){var n=this._draggedoverTarget,l=this._hoveredTargets,f=this.targets,d=Math.max(l.length,f.length);this.fireSyntheticInOutEvents(s,h,{oldTarget:n,evtOut:"dragleave",evtIn:"dragenter"});for(var g=0;g<d;g++)this.fireSyntheticInOutEvents(f[g],h,{oldTarget:l[g],evtOut:"dragleave",evtIn:"dragenter"});this._draggedoverTarget=s},fireSyntheticInOutEvents:function(s,h,n){var l,f,d=n.oldTarget,g,m,p=d!==s,_=n.canvasEvtIn,w=n.canvasEvtOut;p&&(l={e:h,target:s,previousTarget:d},f={e:h,target:d,nextTarget:s}),m=s&&p,g=d&&p,g&&(w&&this.fire(w,f),d.fire(n.evtOut,f)),m&&(_&&this.fire(_,l),s.fire(n.evtIn,l))},__onMouseWheel:function(s){this._cacheTransformEventData(s),this._handleEvent(s,"wheel"),this._resetTransformEventData()},_transformObject:function(s){var h=this.getPointer(s),n=this._currentTransform;n.reset=!1,n.shiftKey=s.shiftKey,n.altKey=s[this.centeredKey],this._performTransformAction(s,n,h),n.actionPerformed&&this.requestRenderAll()},_performTransformAction:function(s,h,n){var l=n.x,f=n.y,d=h.action,g=!1,m=h.actionHandler;m&&(g=m(s,h,l,f)),d==="drag"&&g&&(h.target.isMoving=!0,this.setCursor(h.target.moveCursor||this.moveCursor)),h.actionPerformed=h.actionPerformed||g},_fire:u.controlsUtils.fireEvent,_setCursorFromEvent:function(s,h){if(!h)return this.setCursor(this.defaultCursor),!1;var n=h.hoverCursor||this.hoverCursor,l=this._activeObject&&this._activeObject.type==="activeSelection"?this._activeObject:null,f=(!l||!l.contains(h))&&h._findTargetCorner(this.getPointer(s,!0));f?this.setCursor(this.getCornerCursor(f,h,s)):(h.subTargetCheck&&this.targets.concat().reverse().map(function(d){n=d.hoverCursor||n}),this.setCursor(n))},getCornerCursor:function(s,h,n){var l=h.controls[s];return l.cursorStyleHandler(n,l,h)}})})();(function(){var c=Math.min,i=Math.max;u.util.object.extend(u.Canvas.prototype,{_shouldGroup:function(a,o){var t=this._activeObject;return t&&this._isSelectionKeyPressed(a)&&o&&o.selectable&&this.selection&&(t!==o||t.type==="activeSelection")&&!o.onSelect({e:a})},_handleGrouping:function(a,o){var t=this._activeObject;t.__corner||o===t&&(o=this.findTarget(a,!0),!o||!o.selectable)||(t&&t.type==="activeSelection"?this._updateActiveSelection(o,a):this._createActiveSelection(o,a))},_updateActiveSelection:function(a,o){var t=this._activeObject,r=t._objects.slice(0);t.contains(a)?(t.removeWithUpdate(a),this._hoveredTarget=a,this._hoveredTargets=this.targets.concat(),t.size()===1&&this._setActiveObject(t.item(0),o)):(t.addWithUpdate(a),this._hoveredTarget=t,this._hoveredTargets=this.targets.concat()),this._fireSelectionEvents(r,o)},_createActiveSelection:function(a,o){var t=this.getActiveObjects(),r=this._createGroup(a);this._hoveredTarget=r,this._setActiveObject(r,o),this._fireSelectionEvents(t,o)},_createGroup:function(a){var o=this._objects,t=o.indexOf(this._activeObject)<o.indexOf(a),r=t?[this._activeObject,a]:[a,this._activeObject];return this._activeObject.isEditing&&this._activeObject.exitEditing(),new u.ActiveSelection(r,{canvas:this})},_groupSelectedObjects:function(a){var o=this._collectObjects(a),t;o.length===1?this.setActiveObject(o[0],a):o.length>1&&(t=new u.ActiveSelection(o.reverse(),{canvas:this}),this.setActiveObject(t,a))},_collectObjects:function(a){for(var o=[],t,r=this._groupSelector.ex,e=this._groupSelector.ey,s=r+this._groupSelector.left,h=e+this._groupSelector.top,n=new u.Point(c(r,s),c(e,h)),l=new u.Point(i(r,s),i(e,h)),f=!this.selectionFullyContained,d=r===s&&e===h,g=this._objects.length;g--&&(t=this._objects[g],!(!(!t||!t.selectable||!t.visible)&&(f&&t.intersectsWithRect(n,l,!0)||t.isContainedWithinRect(n,l,!0)||f&&t.containsPoint(n,null,!0)||f&&t.containsPoint(l,null,!0))&&(o.push(t),d))););return o.length>1&&(o=o.filter(function(m){return!m.onSelect({e:a})})),o},_maybeGroupObjects:function(a){this.selection&&this._groupSelector&&this._groupSelectedObjects(a),this.setCursor(this.defaultCursor),this._groupSelector=null}})})();(function(){u.util.object.extend(u.StaticCanvas.prototype,{toDataURL:function(c){c||(c={});var i=c.format||"png",a=c.quality||1,o=(c.multiplier||1)*(c.enableRetinaScaling?this.getRetinaScaling():1),t=this.toCanvasElement(o,c);return u.util.toDataURL(t,i,a)},toCanvasElement:function(c,i){c=c||1,i=i||{};var a=(i.width||this.width)*c,o=(i.height||this.height)*c,t=this.getZoom(),r=this.width,e=this.height,s=t*c,h=this.viewportTransform,n=(h[4]-(i.left||0))*c,l=(h[5]-(i.top||0))*c,f=this.interactive,d=[s,0,0,s,n,l],g=this.enableRetinaScaling,m=u.util.createCanvasElement(),p=this.contextTop;return m.width=a,m.height=o,this.contextTop=null,this.enableRetinaScaling=!1,this.interactive=!1,this.viewportTransform=d,this.width=a,this.height=o,this.calcViewportBoundaries(),this.renderCanvas(m.getContext("2d"),this._objects),this.viewportTransform=h,this.width=r,this.height=e,this.calcViewportBoundaries(),this.interactive=f,this.enableRetinaScaling=g,this.contextTop=p,m}})})();u.util.object.extend(u.StaticCanvas.prototype,{loadFromJSON:function(c,i,a){if(c){var o=typeof c=="string"?JSON.parse(c):u.util.object.clone(c),t=this,r=o.clipPath,e=this.renderOnAddRemove;return this.renderOnAddRemove=!1,delete o.clipPath,this._enlivenObjects(o.objects,function(s){t.clear(),t._setBgOverlay(o,function(){r?t._enlivenObjects([r],function(h){t.clipPath=h[0],t.__setupCanvas.call(t,o,s,e,i)}):t.__setupCanvas.call(t,o,s,e,i)})},a),this}},__setupCanvas:function(c,i,a,o){var t=this;i.forEach(function(r,e){t.insertAt(r,e)}),this.renderOnAddRemove=a,delete c.objects,delete c.backgroundImage,delete c.overlayImage,delete c.background,delete c.overlay,this._setOptions(c),this.renderAll(),o&&o()},_setBgOverlay:function(c,i){var a={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!c.backgroundImage&&!c.overlayImage&&!c.background&&!c.overlay){i&&i();return}var o=function(){a.backgroundImage&&a.overlayImage&&a.backgroundColor&&a.overlayColor&&i&&i()};this.__setBgOverlay("backgroundImage",c.backgroundImage,a,o),this.__setBgOverlay("overlayImage",c.overlayImage,a,o),this.__setBgOverlay("backgroundColor",c.background,a,o),this.__setBgOverlay("overlayColor",c.overlay,a,o)},__setBgOverlay:function(c,i,a,o){var t=this;if(!i){a[c]=!0,o&&o();return}c==="backgroundImage"||c==="overlayImage"?u.util.enlivenObjects([i],function(r){t[c]=r[0],a[c]=!0,o&&o()}):this["set"+u.util.string.capitalize(c,!0)](i,function(){a[c]=!0,o&&o()})},_enlivenObjects:function(c,i,a){if(!c||c.length===0){i&&i([]);return}u.util.enlivenObjects(c,function(o){i&&i(o)},null,a)},_toDataURL:function(c,i){this.clone(function(a){i(a.toDataURL(c))})},_toDataURLWithMultiplier:function(c,i,a){this.clone(function(o){a(o.toDataURLWithMultiplier(c,i))})},clone:function(c,i){var a=JSON.stringify(this.toJSON(i));this.cloneWithoutData(function(o){o.loadFromJSON(a,function(){c&&c(o)})})},cloneWithoutData:function(c){var i=u.util.createCanvasElement();i.width=this.width,i.height=this.height;var a=new u.Canvas(i);this.backgroundImage?(a.setBackgroundImage(this.backgroundImage.src,function(){a.renderAll(),c&&c(a)}),a.backgroundImageOpacity=this.backgroundImageOpacity,a.backgroundImageStretch=this.backgroundImageStretch):c&&c(a)}});(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.util.object.extend,o=i.util.object.clone,t=i.util.toFixed,r=i.util.string.capitalize,e=i.util.degreesToRadians,s=!i.isLikelyNode,h=2;i.Object||(i.Object=i.util.createClass(i.CommonMethods,{type:"object",originX:"left",originY:"top",top:0,left:0,width:0,height:0,scaleX:1,scaleY:1,flipX:!1,flipY:!1,opacity:1,angle:0,skewX:0,skewY:0,cornerSize:13,touchCornerSize:24,transparentCorners:!0,hoverCursor:null,moveCursor:null,padding:0,borderColor:"rgb(178,204,255)",borderDashArray:null,cornerColor:"rgb(178,204,255)",cornerStrokeColor:null,cornerStyle:"rect",cornerDashArray:null,centeredScaling:!1,centeredRotation:!0,fill:"rgb(0,0,0)",fillRule:"nonzero",globalCompositeOperation:"source-over",backgroundColor:"",selectionBackgroundColor:"",stroke:null,strokeWidth:1,strokeDashArray:null,strokeDashOffset:0,strokeLineCap:"butt",strokeLineJoin:"miter",strokeMiterLimit:4,shadow:null,borderOpacityWhenMoving:.4,borderScaleFactor:1,minScaleLimit:0,selectable:!0,evented:!0,visible:!0,hasControls:!0,hasBorders:!0,perPixelTargetFind:!1,includeDefaultValues:!0,lockMovementX:!1,lockMovementY:!1,lockRotation:!1,lockScalingX:!1,lockScalingY:!1,lockSkewingX:!1,lockSkewingY:!1,lockScalingFlip:!1,excludeFromExport:!1,objectCaching:s,statefullCache:!1,noScaleCache:!0,strokeUniform:!1,dirty:!0,__corner:0,paintFirst:"fill",activeOn:"down",stateProperties:"top left width height scaleX scaleY flipX flipY originX originY transformMatrix stroke strokeWidth strokeDashArray strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit angle opacity fill globalCompositeOperation shadow visible backgroundColor skewX skewY fillRule paintFirst clipPath strokeUniform".split(" "),cacheProperties:"fill stroke strokeWidth strokeDashArray width height paintFirst strokeUniform strokeLineCap strokeDashOffset strokeLineJoin strokeMiterLimit backgroundColor clipPath".split(" "),colorProperties:"fill stroke backgroundColor".split(" "),clipPath:void 0,inverted:!1,absolutePositioned:!1,initialize:function(n){n&&this.setOptions(n)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=i.util.createCanvasElement(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0},_limitCacheSize:function(n){var l=i.perfLimitSizeTotal,f=n.width,d=n.height,g=i.maxCacheSideLimit,m=i.minCacheSideLimit;if(f<=g&&d<=g&&f*d<=l)return f<m&&(n.width=m),d<m&&(n.height=m),n;var p=f/d,_=i.util.limitDimsByArea(p,l),w=i.util.capValue,D=w(m,_.x,g),B=w(m,_.y,g);return f>D&&(n.zoomX/=f/D,n.width=D,n.capped=!0),d>B&&(n.zoomY/=d/B,n.height=B,n.capped=!0),n},_getCacheCanvasDimensions:function(){var n=this.getTotalObjectScaling(),l=this._getTransformedDimensions(0,0),f=l.x*n.scaleX/this.scaleX,d=l.y*n.scaleY/this.scaleY;return{width:f+h,height:d+h,zoomX:n.scaleX,zoomY:n.scaleY,x:f,y:d}},_updateCacheCanvas:function(){var n=this.canvas;if(this.noScaleCache&&n&&n._currentTransform){var l=n._currentTransform.target,f=n._currentTransform.action;if(this===l&&f.slice&&f.slice(0,5)==="scale")return!1}var d=this._cacheCanvas,g=this._limitCacheSize(this._getCacheCanvasDimensions()),m=i.minCacheSideLimit,p=g.width,_=g.height,w,D,B=g.zoomX,N=g.zoomY,G=p!==this.cacheWidth||_!==this.cacheHeight,z=this.zoomX!==B||this.zoomY!==N,H=G||z,U=0,K=0,Q=!1;if(G){var J=this._cacheCanvas.width,v=this._cacheCanvas.height,b=p>J||_>v,S=(p<J*.9||_<v*.9)&&J>m&&v>m;Q=b||S,b&&!g.capped&&(p>m||_>m)&&(U=p*.1,K=_*.1)}return this instanceof i.Text&&this.path&&(H=!0,Q=!0,U+=this.getHeightOfLine(0)*this.zoomX,K+=this.getHeightOfLine(0)*this.zoomY),H?(Q?(d.width=Math.ceil(p+U),d.height=Math.ceil(_+K)):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,d.width,d.height)),w=g.x/2,D=g.y/2,this.cacheTranslationX=Math.round(d.width/2-w)+w,this.cacheTranslationY=Math.round(d.height/2-D)+D,this.cacheWidth=p,this.cacheHeight=_,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(B,N),this.zoomX=B,this.zoomY=N,!0):!1},setOptions:function(n){this._setOptions(n),this._initGradient(n.fill,"fill"),this._initGradient(n.stroke,"stroke"),this._initPattern(n.fill,"fill"),this._initPattern(n.stroke,"stroke")},transform:function(n){var l=this.group&&!this.group._transformDone||this.group&&this.canvas&&n===this.canvas.contextTop,f=this.calcTransformMatrix(!l);n.transform(f[0],f[1],f[2],f[3],f[4],f[5])},toObject:function(n){var l=i.Object.NUM_FRACTION_DIGITS,f={type:this.type,version:i.version,originX:this.originX,originY:this.originY,left:t(this.left,l),top:t(this.top,l),width:t(this.width,l),height:t(this.height,l),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:t(this.strokeWidth,l),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeDashOffset:this.strokeDashOffset,strokeLineJoin:this.strokeLineJoin,strokeUniform:this.strokeUniform,strokeMiterLimit:t(this.strokeMiterLimit,l),scaleX:t(this.scaleX,l),scaleY:t(this.scaleY,l),angle:t(this.angle,l),flipX:this.flipX,flipY:this.flipY,opacity:t(this.opacity,l),shadow:this.shadow&&this.shadow.toObject?this.shadow.toObject():this.shadow,visible:this.visible,backgroundColor:this.backgroundColor,fillRule:this.fillRule,paintFirst:this.paintFirst,globalCompositeOperation:this.globalCompositeOperation,skewX:t(this.skewX,l),skewY:t(this.skewY,l)};return this.clipPath&&!this.clipPath.excludeFromExport&&(f.clipPath=this.clipPath.toObject(n),f.clipPath.inverted=this.clipPath.inverted,f.clipPath.absolutePositioned=this.clipPath.absolutePositioned),i.util.populateWithProperties(this,f,n),this.includeDefaultValues||(f=this._removeDefaultValues(f)),f},toDatalessObject:function(n){return this.toObject(n)},_removeDefaultValues:function(n){var l=i.util.getKlass(n.type).prototype,f=l.stateProperties;return f.forEach(function(d){if(!(d==="left"||d==="top")){n[d]===l[d]&&delete n[d];var g=Object.prototype.toString.call(n[d])==="[object Array]"&&Object.prototype.toString.call(l[d])==="[object Array]";g&&n[d].length===0&&l[d].length===0&&delete n[d]}}),n},toString:function(){return"#<fabric."+r(this.type)+">"},getObjectScaling:function(){if(!this.group)return{scaleX:this.scaleX,scaleY:this.scaleY};var n=i.util.qrDecompose(this.calcTransformMatrix());return{scaleX:Math.abs(n.scaleX),scaleY:Math.abs(n.scaleY)}},getTotalObjectScaling:function(){var n=this.getObjectScaling(),l=n.scaleX,f=n.scaleY;if(this.canvas){var d=this.canvas.getZoom(),g=this.canvas.getRetinaScaling();l*=d*g,f*=d*g}return{scaleX:l,scaleY:f}},getObjectOpacity:function(){var n=this.opacity;return this.group&&(n*=this.group.getObjectOpacity()),n},_set:function(n,l){var f=n==="scaleX"||n==="scaleY",d=this[n]!==l,g=!1;return f&&(l=this._constrainScale(l)),n==="scaleX"&&l<0?(this.flipX=!this.flipX,l*=-1):n==="scaleY"&&l<0?(this.flipY=!this.flipY,l*=-1):n==="shadow"&&l&&!(l instanceof i.Shadow)?l=new i.Shadow(l):n==="dirty"&&this.group&&this.group.set("dirty",l),this[n]=l,d&&(g=this.group&&this.group.isOnACache(),this.cacheProperties.indexOf(n)>-1?(this.dirty=!0,g&&this.group.set("dirty",!0)):g&&this.stateProperties.indexOf(n)>-1&&this.group.set("dirty",!0)),this},setOnGroup:function(){},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:i.iMatrix.concat()},isNotVisible:function(){return this.opacity===0||!this.width&&!this.height&&this.strokeWidth===0||!this.visible},render:function(n){this.isNotVisible()||this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(n.save(),this._setupCompositeOperation(n),this.drawSelectionBackground(n),this.transform(n),this._setOpacity(n),this._setShadow(n,this),this.shouldCache()?(this.renderCache(),this.drawCacheOnCanvas(n)):(this._removeCacheCanvas(),this.dirty=!1,this.drawObject(n),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),n.restore())},renderCache:function(n){n=n||{},this._cacheCanvas||this._createCacheCanvas(),this.isCacheDirty()&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,n.forClipping),this.dirty=!1)},_removeCacheCanvas:function(){this._cacheCanvas=null,this.cacheWidth=0,this.cacheHeight=0},hasStroke:function(){return this.stroke&&this.stroke!=="transparent"&&this.strokeWidth!==0},hasFill:function(){return this.fill&&this.fill!=="transparent"},needsItsOwnCache:function(){return!!(this.paintFirst==="stroke"&&this.hasFill()&&this.hasStroke()&&typeof this.shadow=="object"||this.clipPath)},shouldCache:function(){return this.ownCaching=this.needsItsOwnCache()||this.objectCaching&&(!this.group||!this.group.isOnACache()),this.ownCaching},willDrawShadow:function(){return!!this.shadow&&(this.shadow.offsetX!==0||this.shadow.offsetY!==0)},drawClipPathOnCache:function(n,l){if(n.save(),l.inverted?n.globalCompositeOperation="destination-out":n.globalCompositeOperation="destination-in",l.absolutePositioned){var f=i.util.invertTransform(this.calcTransformMatrix());n.transform(f[0],f[1],f[2],f[3],f[4],f[5])}l.transform(n),n.scale(1/l.zoomX,1/l.zoomY),n.drawImage(l._cacheCanvas,-l.cacheTranslationX,-l.cacheTranslationY),n.restore()},drawObject:function(n,l){var f=this.fill,d=this.stroke;l?(this.fill="black",this.stroke="",this._setClippingProperties(n)):this._renderBackground(n),this._render(n),this._drawClipPath(n,this.clipPath),this.fill=f,this.stroke=d},_drawClipPath:function(n,l){l&&(l.canvas=this.canvas,l.shouldCache(),l._transformDone=!0,l.renderCache({forClipping:!0}),this.drawClipPathOnCache(n,l))},drawCacheOnCanvas:function(n){n.scale(1/this.zoomX,1/this.zoomY),n.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(n){if(this.isNotVisible())return!1;if(this._cacheCanvas&&!n&&this._updateCacheCanvas())return!0;if(this.dirty||this.clipPath&&this.clipPath.absolutePositioned||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&!n){var l=this.cacheWidth/this.zoomX,f=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-l/2,-f/2,l,f)}return!0}return!1},_renderBackground:function(n){if(this.backgroundColor){var l=this._getNonTransformedDimensions();n.fillStyle=this.backgroundColor,n.fillRect(-l.x/2,-l.y/2,l.x,l.y),this._removeShadow(n)}},_setOpacity:function(n){this.group&&!this.group._transformDone?n.globalAlpha=this.getObjectOpacity():n.globalAlpha*=this.opacity},_setStrokeStyles:function(n,l){var f=l.stroke;f&&(n.lineWidth=l.strokeWidth,n.lineCap=l.strokeLineCap,n.lineDashOffset=l.strokeDashOffset,n.lineJoin=l.strokeLineJoin,n.miterLimit=l.strokeMiterLimit,f.toLive?f.gradientUnits==="percentage"||f.gradientTransform||f.patternTransform?this._applyPatternForTransformedGradient(n,f):(n.strokeStyle=f.toLive(n,this),this._applyPatternGradientTransform(n,f)):n.strokeStyle=l.stroke)},_setFillStyles:function(n,l){var f=l.fill;f&&(f.toLive?(n.fillStyle=f.toLive(n,this),this._applyPatternGradientTransform(n,l.fill)):n.fillStyle=f)},_setClippingProperties:function(n){n.globalAlpha=1,n.strokeStyle="transparent",n.fillStyle="#000000"},_setLineDash:function(n,l){!l||l.length===0||(1&l.length&&l.push.apply(l,l),n.setLineDash(l))},_renderControls:function(n,l){var f=this.getViewportTransform(),d=this.calcTransformMatrix(),g,m,p;l=l||{},m=typeof l.hasBorders!="undefined"?l.hasBorders:this.hasBorders,p=typeof l.hasControls!="undefined"?l.hasControls:this.hasControls,d=i.util.multiplyTransformMatrices(f,d),g=i.util.qrDecompose(d),n.save(),n.translate(g.translateX,g.translateY),n.lineWidth=1*this.borderScaleFactor,this.group||(n.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.flipX&&(g.angle-=180),n.rotate(e(this.group?g.angle:this.angle)),l.forActiveSelection||this.group?m&&this.drawBordersInGroup(n,g,l):m&&this.drawBorders(n,l),p&&this.drawControls(n,l),n.restore()},_setShadow:function(n){if(this.shadow){var l=this.shadow,f=this.canvas,d,g=f&&f.viewportTransform[0]||1,m=f&&f.viewportTransform[3]||1;l.nonScaling?d={scaleX:1,scaleY:1}:d=this.getObjectScaling(),f&&f._isRetinaScaling()&&(g*=i.devicePixelRatio,m*=i.devicePixelRatio),n.shadowColor=l.color,n.shadowBlur=l.blur*i.browserShadowBlurConstant*(g+m)*(d.scaleX+d.scaleY)/4,n.shadowOffsetX=l.offsetX*g*d.scaleX,n.shadowOffsetY=l.offsetY*m*d.scaleY}},_removeShadow:function(n){this.shadow&&(n.shadowColor="",n.shadowBlur=n.shadowOffsetX=n.shadowOffsetY=0)},_applyPatternGradientTransform:function(n,l){if(!l||!l.toLive)return{offsetX:0,offsetY:0};var f=l.gradientTransform||l.patternTransform,d=-this.width/2+l.offsetX||0,g=-this.height/2+l.offsetY||0;return l.gradientUnits==="percentage"?n.transform(this.width,0,0,this.height,d,g):n.transform(1,0,0,1,d,g),f&&n.transform(f[0],f[1],f[2],f[3],f[4],f[5]),{offsetX:d,offsetY:g}},_renderPaintInOrder:function(n){this.paintFirst==="stroke"?(this._renderStroke(n),this._renderFill(n)):(this._renderFill(n),this._renderStroke(n))},_render:function(){},_renderFill:function(n){this.fill&&(n.save(),this._setFillStyles(n,this),this.fillRule==="evenodd"?n.fill("evenodd"):n.fill(),n.restore())},_renderStroke:function(n){if(!(!this.stroke||this.strokeWidth===0)){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(n),n.save(),this.strokeUniform&&this.group){var l=this.getObjectScaling();n.scale(1/l.scaleX,1/l.scaleY)}else this.strokeUniform&&n.scale(1/this.scaleX,1/this.scaleY);this._setLineDash(n,this.strokeDashArray),this._setStrokeStyles(n,this),n.stroke(),n.restore()}},_applyPatternForTransformedGradient:function(n,l){var f=this._limitCacheSize(this._getCacheCanvasDimensions()),d=i.util.createCanvasElement(),g,m=this.canvas.getRetinaScaling(),p=f.x/this.scaleX/m,_=f.y/this.scaleY/m;d.width=p,d.height=_,g=d.getContext("2d"),g.beginPath(),g.moveTo(0,0),g.lineTo(p,0),g.lineTo(p,_),g.lineTo(0,_),g.closePath(),g.translate(p/2,_/2),g.scale(f.zoomX/this.scaleX/m,f.zoomY/this.scaleY/m),this._applyPatternGradientTransform(g,l),g.fillStyle=l.toLive(n),g.fill(),n.translate(-this.width/2-this.strokeWidth/2,-this.height/2-this.strokeWidth/2),n.scale(m*this.scaleX/f.zoomX,m*this.scaleY/f.zoomY),n.strokeStyle=g.createPattern(d,"no-repeat")},_findCenterFromElement:function(){return{x:this.left+this.width/2,y:this.top+this.height/2}},_assignTransformMatrixProps:function(){if(this.transformMatrix){var n=i.util.qrDecompose(this.transformMatrix);this.flipX=!1,this.flipY=!1,this.set("scaleX",n.scaleX),this.set("scaleY",n.scaleY),this.angle=n.angle,this.skewX=n.skewX,this.skewY=0}},_removeTransformMatrix:function(n){var l=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),l=i.util.transformPoint(l,this.transformMatrix)),this.transformMatrix=null,n&&(this.scaleX*=n.scaleX,this.scaleY*=n.scaleY,this.cropX=n.cropX,this.cropY=n.cropY,l.x+=n.offsetLeft,l.y+=n.offsetTop,this.width=n.width,this.height=n.height),this.setPositionByOrigin(l,"center","center")},clone:function(n,l){var f=this.toObject(l);this.constructor.fromObject?this.constructor.fromObject(f,n):i.Object._fromObject("Object",f,n)},cloneAsImage:function(n,l){var f=this.toCanvasElement(l);return n&&n(new i.Image(f)),this},toCanvasElement:function(n){n||(n={});var l=i.util,f=l.saveObjectTransform(this),d=this.group,g=this.shadow,m=Math.abs,p=(n.multiplier||1)*(n.enableRetinaScaling?i.devicePixelRatio:1);delete this.group,n.withoutTransform&&l.resetObjectTransform(this),n.withoutShadow&&(this.shadow=null);var _=i.util.createCanvasElement(),w=this.getBoundingRect(!0,!0),D=this.shadow,B,N={x:0,y:0},G,z,H;D&&(G=D.blur,D.nonScaling?B={scaleX:1,scaleY:1}:B=this.getObjectScaling(),N.x=2*Math.round(m(D.offsetX)+G)*m(B.scaleX),N.y=2*Math.round(m(D.offsetY)+G)*m(B.scaleY)),z=w.width+N.x,H=w.height+N.y,_.width=Math.ceil(z),_.height=Math.ceil(H);var U=new i.StaticCanvas(_,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1});n.format==="jpeg"&&(U.backgroundColor="#fff"),this.setPositionByOrigin(new i.Point(U.width/2,U.height/2),"center","center");var K=this.canvas;U.add(this);var Q=U.toCanvasElement(p||1,n);return this.shadow=g,this.set("canvas",K),d&&(this.group=d),this.set(f).setCoords(),U._objects=[],U.dispose(),U=null,Q},toDataURL:function(n){return n||(n={}),i.util.toDataURL(this.toCanvasElement(n),n.format||"png",n.quality||1)},isType:function(n){return this.type===n},complexity:function(){return 1},toJSON:function(n){return this.toObject(n)},rotate:function(n){var l=(this.originX!=="center"||this.originY!=="center")&&this.centeredRotation;return l&&this._setOriginToCenter(),this.set("angle",n),l&&this._resetOrigin(),this},centerH:function(){return this.canvas&&this.canvas.centerObjectH(this),this},viewportCenterH:function(){return this.canvas&&this.canvas.viewportCenterObjectH(this),this},centerV:function(){return this.canvas&&this.canvas.centerObjectV(this),this},viewportCenterV:function(){return this.canvas&&this.canvas.viewportCenterObjectV(this),this},center:function(){return this.canvas&&this.canvas.centerObject(this),this},viewportCenter:function(){return this.canvas&&this.canvas.viewportCenterObject(this),this},getLocalPointer:function(n,l){l=l||this.canvas.getPointer(n);var f=new i.Point(l.x,l.y),d=this._getLeftTopCoords();return this.angle&&(f=i.util.rotatePoint(f,d,e(-this.angle))),{x:f.x-d.x,y:f.y-d.y}},_setupCompositeOperation:function(n){this.globalCompositeOperation&&(n.globalCompositeOperation=this.globalCompositeOperation)},dispose:function(){i.runningAnimations&&i.runningAnimations.cancelByTarget(this)}}),i.util.createAccessors&&i.util.createAccessors(i.Object),a(i.Object.prototype,i.Observable),i.Object.NUM_FRACTION_DIGITS=2,i.Object.ENLIVEN_PROPS=["clipPath"],i.Object._fromObject=function(n,l,f,d){var g=i[n];l=o(l,!0),i.util.enlivenPatterns([l.fill,l.stroke],function(m){typeof m[0]!="undefined"&&(l.fill=m[0]),typeof m[1]!="undefined"&&(l.stroke=m[1]),i.util.enlivenObjectEnlivables(l,l,function(){var p=d?new g(l[d],l):new g(l);f&&f(p)})})},i.Object.__uid=0)})(F);(function(){var c=u.util.degreesToRadians,i={left:-.5,center:0,right:.5},a={top:-.5,center:0,bottom:.5};u.util.object.extend(u.Object.prototype,{translateToGivenOrigin:function(o,t,r,e,s){var h=o.x,n=o.y,l,f,d;return typeof t=="string"?t=i[t]:t-=.5,typeof e=="string"?e=i[e]:e-=.5,l=e-t,typeof r=="string"?r=a[r]:r-=.5,typeof s=="string"?s=a[s]:s-=.5,f=s-r,(l||f)&&(d=this._getTransformedDimensions(),h=o.x+l*d.x,n=o.y+f*d.y),new u.Point(h,n)},translateToCenterPoint:function(o,t,r){var e=this.translateToGivenOrigin(o,t,r,"center","center");return this.angle?u.util.rotatePoint(e,o,c(this.angle)):e},translateToOriginPoint:function(o,t,r){var e=this.translateToGivenOrigin(o,"center","center",t,r);return this.angle?u.util.rotatePoint(e,o,c(this.angle)):e},getCenterPoint:function(){var o=new u.Point(this.left,this.top);return this.translateToCenterPoint(o,this.originX,this.originY)},getPointByOrigin:function(o,t){var r=this.getCenterPoint();return this.translateToOriginPoint(r,o,t)},toLocalPoint:function(o,t,r){var e=this.getCenterPoint(),s,h;return typeof t!="undefined"&&typeof r!="undefined"?s=this.translateToGivenOrigin(e,"center","center",t,r):s=new u.Point(this.left,this.top),h=new u.Point(o.x,o.y),this.angle&&(h=u.util.rotatePoint(h,e,-c(this.angle))),h.subtractEquals(s)},setPositionByOrigin:function(o,t,r){var e=this.translateToCenterPoint(o,t,r),s=this.translateToOriginPoint(e,this.originX,this.originY);this.set("left",s.x),this.set("top",s.y)},adjustPosition:function(o){var t=c(this.angle),r=this.getScaledWidth(),e=u.util.cos(t)*r,s=u.util.sin(t)*r,h,n;typeof this.originX=="string"?h=i[this.originX]:h=this.originX-.5,typeof o=="string"?n=i[o]:n=o-.5,this.left+=e*(n-h),this.top+=s*(n-h),this.setCoords(),this.originX=o},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var o=this.getCenterPoint();this.originX="center",this.originY="center",this.left=o.x,this.top=o.y},_resetOrigin:function(){var o=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=o.x,this.top=o.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}})})();(function(){function c(r){return[new u.Point(r.tl.x,r.tl.y),new u.Point(r.tr.x,r.tr.y),new u.Point(r.br.x,r.br.y),new u.Point(r.bl.x,r.bl.y)]}var i=u.util,a=i.degreesToRadians,o=i.multiplyTransformMatrices,t=i.transformPoint;i.object.extend(u.Object.prototype,{oCoords:null,aCoords:null,lineCoords:null,ownMatrixCache:null,matrixCache:null,controls:{},_getCoords:function(r,e){return e?r?this.calcACoords():this.calcLineCoords():((!this.aCoords||!this.lineCoords)&&this.setCoords(!0),r?this.aCoords:this.lineCoords)},getCoords:function(r,e){return c(this._getCoords(r,e))},intersectsWithRect:function(r,e,s,h){var n=this.getCoords(s,h),l=u.Intersection.intersectPolygonRectangle(n,r,e);return l.status==="Intersection"},intersectsWithObject:function(r,e,s){var h=u.Intersection.intersectPolygonPolygon(this.getCoords(e,s),r.getCoords(e,s));return h.status==="Intersection"||r.isContainedWithinObject(this,e,s)||this.isContainedWithinObject(r,e,s)},isContainedWithinObject:function(r,e,s){for(var h=this.getCoords(e,s),n=e?r.aCoords:r.lineCoords,l=0,f=r._getImageLines(n);l<4;l++)if(!r.containsPoint(h[l],f))return!1;return!0},isContainedWithinRect:function(r,e,s,h){var n=this.getBoundingRect(s,h);return n.left>=r.x&&n.left+n.width<=e.x&&n.top>=r.y&&n.top+n.height<=e.y},containsPoint:function(r,l,s,h){var n=this._getCoords(s,h),l=l||this._getImageLines(n),f=this._findCrossPoints(r,l);return f!==0&&f%2===1},isOnScreen:function(r){if(!this.canvas)return!1;var e=this.canvas.vptCoords.tl,s=this.canvas.vptCoords.br,h=this.getCoords(!0,r);return h.some(function(n){return n.x<=s.x&&n.x>=e.x&&n.y<=s.y&&n.y>=e.y})||this.intersectsWithRect(e,s,!0,r)?!0:this._containsCenterOfCanvas(e,s,r)},_containsCenterOfCanvas:function(r,e,s){var h={x:(r.x+e.x)/2,y:(r.y+e.y)/2};return!!this.containsPoint(h,null,!0,s)},isPartiallyOnScreen:function(r){if(!this.canvas)return!1;var e=this.canvas.vptCoords.tl,s=this.canvas.vptCoords.br;if(this.intersectsWithRect(e,s,!0,r))return!0;var h=this.getCoords(!0,r).every(function(n){return(n.x>=s.x||n.x<=e.x)&&(n.y>=s.y||n.y<=e.y)});return h&&this._containsCenterOfCanvas(e,s,r)},_getImageLines:function(r){var e={topline:{o:r.tl,d:r.tr},rightline:{o:r.tr,d:r.br},bottomline:{o:r.br,d:r.bl},leftline:{o:r.bl,d:r.tl}};return e},_findCrossPoints:function(r,e){var s,h,n,l,f,d=0,g;for(var m in e)if(g=e[m],!(g.o.y<r.y&&g.d.y<r.y)&&!(g.o.y>=r.y&&g.d.y>=r.y)&&(g.o.x===g.d.x&&g.o.x>=r.x?f=g.o.x:(s=0,h=(g.d.y-g.o.y)/(g.d.x-g.o.x),n=r.y-s*r.x,l=g.o.y-h*g.o.x,f=-(n-l)/(s-h)),f>=r.x&&(d+=1),d===2))break;return d},getBoundingRect:function(r,e){var s=this.getCoords(r,e);return i.makeBoundingBoxFromPoints(s)},getScaledWidth:function(){return this._getTransformedDimensions().x},getScaledHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(r){return Math.abs(r)<this.minScaleLimit?r<0?-this.minScaleLimit:this.minScaleLimit:r===0?1e-4:r},scale:function(r){return this._set("scaleX",r),this._set("scaleY",r),this.setCoords()},scaleToWidth:function(r,e){var s=this.getBoundingRect(e).width/this.getScaledWidth();return this.scale(r/this.width/s)},scaleToHeight:function(r,e){var s=this.getBoundingRect(e).height/this.getScaledHeight();return this.scale(r/this.height/s)},calcLineCoords:function(){var r=this.getViewportTransform(),e=this.padding,s=a(this.angle),h=i.cos(s),n=i.sin(s),l=h*e,f=n*e,d=l+f,g=l-f,m=this.calcACoords(),p={tl:t(m.tl,r),tr:t(m.tr,r),bl:t(m.bl,r),br:t(m.br,r)};return e&&(p.tl.x-=g,p.tl.y-=d,p.tr.x+=d,p.tr.y-=g,p.bl.x-=d,p.bl.y+=g,p.br.x+=g,p.br.y+=d),p},calcOCoords:function(){var r=this._calcRotateMatrix(),e=this._calcTranslateMatrix(),s=this.getViewportTransform(),h=o(s,e),n=o(h,r),n=o(n,[1/s[0],0,0,1/s[3],0,0]),l=this._calculateCurrentDimensions(),f={};return this.forEachControl(function(d,g,m){f[g]=d.positionHandler(l,n,m)}),f},calcACoords:function(){var r=this._calcRotateMatrix(),e=this._calcTranslateMatrix(),s=o(e,r),h=this._getTransformedDimensions(),n=h.x/2,l=h.y/2;return{tl:t({x:-n,y:-l},s),tr:t({x:n,y:-l},s),bl:t({x:-n,y:l},s),br:t({x:n,y:l},s)}},setCoords:function(r){return this.aCoords=this.calcACoords(),this.lineCoords=this.group?this.aCoords:this.calcLineCoords(),r?this:(this.oCoords=this.calcOCoords(),this._setCornerCoords&&this._setCornerCoords(),this)},_calcRotateMatrix:function(){return i.calcRotateMatrix(this)},_calcTranslateMatrix:function(){var r=this.getCenterPoint();return[1,0,0,1,r.x,r.y]},transformMatrixKey:function(r){var e="_",s="";return!r&&this.group&&(s=this.group.transformMatrixKey(r)+e),s+this.top+e+this.left+e+this.scaleX+e+this.scaleY+e+this.skewX+e+this.skewY+e+this.angle+e+this.originX+e+this.originY+e+this.width+e+this.height+e+this.strokeWidth+this.flipX+this.flipY},calcTransformMatrix:function(r){var e=this.calcOwnMatrix();if(r||!this.group)return e;var s=this.transformMatrixKey(r),h=this.matrixCache||(this.matrixCache={});return h.key===s?h.value:(this.group&&(e=o(this.group.calcTransformMatrix(!1),e)),h.key=s,h.value=e,e)},calcOwnMatrix:function(){var r=this.transformMatrixKey(!0),e=this.ownMatrixCache||(this.ownMatrixCache={});if(e.key===r)return e.value;var s=this._calcTranslateMatrix(),h={angle:this.angle,translateX:s[4],translateY:s[5],scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,flipX:this.flipX,flipY:this.flipY};return e.key=r,e.value=i.composeMatrix(h),e.value},_getNonTransformedDimensions:function(){var r=this.strokeWidth,e=this.width+r,s=this.height+r;return{x:e,y:s}},_getTransformedDimensions:function(r,e){typeof r=="undefined"&&(r=this.skewX),typeof e=="undefined"&&(e=this.skewY);var s,h,n,l=r===0&&e===0;if(this.strokeUniform?(h=this.width,n=this.height):(s=this._getNonTransformedDimensions(),h=s.x,n=s.y),l)return this._finalizeDimensions(h*this.scaleX,n*this.scaleY);var f=i.sizeAfterTransform(h,n,{scaleX:this.scaleX,scaleY:this.scaleY,skewX:r,skewY:e});return this._finalizeDimensions(f.x,f.y)},_finalizeDimensions:function(r,e){return this.strokeUniform?{x:r+this.strokeWidth,y:e+this.strokeWidth}:{x:r,y:e}},_calculateCurrentDimensions:function(){var r=this.getViewportTransform(),e=this._getTransformedDimensions(),s=t(e,r,!0);return s.scalarAdd(2*this.padding)}})})();u.util.object.extend(u.Object.prototype,{sendToBack:function(){return this.group?u.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas&&this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?u.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas&&this.canvas.bringToFront(this),this},sendBackwards:function(c){return this.group?u.StaticCanvas.prototype.sendBackwards.call(this.group,this,c):this.canvas&&this.canvas.sendBackwards(this,c),this},bringForward:function(c){return this.group?u.StaticCanvas.prototype.bringForward.call(this.group,this,c):this.canvas&&this.canvas.bringForward(this,c),this},moveTo:function(c){return this.group&&this.group.type!=="activeSelection"?u.StaticCanvas.prototype.moveTo.call(this.group,this,c):this.canvas&&this.canvas.moveTo(this,c),this}});(function(){function c(a,o){if(o){if(o.toLive)return a+": url(#SVGID_"+o.id+"); ";var t=new u.Color(o),r=a+": "+t.toRgb()+"; ",e=t.getAlpha();return e!==1&&(r+=a+"-opacity: "+e.toString()+"; "),r}else return a+": none; "}var i=u.util.toFixed;u.util.object.extend(u.Object.prototype,{getSvgStyles:function(a){var o=this.fillRule?this.fillRule:"nonzero",t=this.strokeWidth?this.strokeWidth:"0",r=this.strokeDashArray?this.strokeDashArray.join(" "):"none",e=this.strokeDashOffset?this.strokeDashOffset:"0",s=this.strokeLineCap?this.strokeLineCap:"butt",h=this.strokeLineJoin?this.strokeLineJoin:"miter",n=this.strokeMiterLimit?this.strokeMiterLimit:"4",l=typeof this.opacity!="undefined"?this.opacity:"1",f=this.visible?"":" visibility: hidden;",d=a?"":this.getSvgFilter(),g=c("fill",this.fill),m=c("stroke",this.stroke);return[m,"stroke-width: ",t,"; ","stroke-dasharray: ",r,"; ","stroke-linecap: ",s,"; ","stroke-dashoffset: ",e,"; ","stroke-linejoin: ",h,"; ","stroke-miterlimit: ",n,"; ",g,"fill-rule: ",o,"; ","opacity: ",l,";",d,f].join("")},getSvgSpanStyles:function(a,o){var t="; ",e=a.fontFamily?"font-family: "+(a.fontFamily.indexOf("'")===-1&&a.fontFamily.indexOf('"')===-1?"'"+a.fontFamily+"'":a.fontFamily)+t:"",r=a.strokeWidth?"stroke-width: "+a.strokeWidth+t:"",e=e,s=a.fontSize?"font-size: "+a.fontSize+"px"+t:"",h=a.fontStyle?"font-style: "+a.fontStyle+t:"",n=a.fontWeight?"font-weight: "+a.fontWeight+t:"",l=a.fill?c("fill",a.fill):"",f=a.stroke?c("stroke",a.stroke):"",d=this.getSvgTextDecoration(a),g=a.deltaY?"baseline-shift: "+-a.deltaY+"; ":"";return d&&(d="text-decoration: "+d+t),[f,r,e,s,h,n,d,l,g,o?"white-space: pre; ":""].join("")},getSvgTextDecoration:function(a){return["overline","underline","line-through"].filter(function(o){return a[o.replace("-","")]}).join(" ")},getSvgFilter:function(){return this.shadow?"filter: url(#SVGID_"+this.shadow.id+");":""},getSvgCommons:function(){return[this.id?'id="'+this.id+'" ':"",this.clipPath?'clip-path="url(#'+this.clipPath.clipPathId+')" ':""].join("")},getSvgTransform:function(a,o){var t=a?this.calcTransformMatrix():this.calcOwnMatrix(),r='transform="'+u.util.matrixToSVG(t);return r+(o||"")+'" '},_setSVGBg:function(a){if(this.backgroundColor){var o=u.Object.NUM_FRACTION_DIGITS;a.push(" <rect ",this._getFillAttributes(this.backgroundColor),' x="',i(-this.width/2,o),'" y="',i(-this.height/2,o),'" width="',i(this.width,o),'" height="',i(this.height,o),`"></rect>
`)}},toSVG:function(a){return this._createBaseSVGMarkup(this._toSVG(a),{reviver:a})},toClipPathSVG:function(a){return" "+this._createBaseClipPathSVGMarkup(this._toSVG(a),{reviver:a})},_createBaseClipPathSVGMarkup:function(a,o){o=o||{};var t=o.reviver,r=o.additionalTransform||"",e=[this.getSvgTransform(!0,r),this.getSvgCommons()].join(""),s=a.indexOf("COMMON_PARTS");return a[s]=e,t?t(a.join("")):a.join("")},_createBaseSVGMarkup:function(a,o){o=o||{};var t=o.noStyle,r=o.reviver,e=t?"":'style="'+this.getSvgStyles()+'" ',s=o.withShadow?'style="'+this.getSvgFilter()+'" ':"",h=this.clipPath,n=this.strokeUniform?'vector-effect="non-scaling-stroke" ':"",l=h&&h.absolutePositioned,f=this.stroke,d=this.fill,g=this.shadow,m,p=[],_,w=a.indexOf("COMMON_PARTS"),D=o.additionalTransform;return h&&(h.clipPathId="CLIPPATH_"+u.Object.__uid++,_='<clipPath id="'+h.clipPathId+`" >
`+h.toClipPathSVG(r)+`</clipPath>
`),l&&p.push("<g ",s,this.getSvgCommons(),` >
`),p.push("<g ",this.getSvgTransform(!1),l?"":s+this.getSvgCommons(),` >
`),m=[e,n,t?"":this.addPaintOrder()," ",D?'transform="'+D+'" ':""].join(""),a[w]=m,d&&d.toLive&&p.push(d.toSVG(this)),f&&f.toLive&&p.push(f.toSVG(this)),g&&p.push(g.toSVG(this)),h&&p.push(_),p.push(a.join("")),p.push(`</g>
`),l&&p.push(`</g>
`),r?r(p.join("")):p.join("")},addPaintOrder:function(){return this.paintFirst!=="fill"?' paint-order="'+this.paintFirst+'" ':""}})})();(function(){var c=u.util.object.extend,i="stateProperties";function a(t,r,e){var s={},h=!0;e.forEach(function(n){s[n]=t[n]}),c(t[r],s,h)}function o(t,r,e){if(t===r)return!0;if(Array.isArray(t)){if(!Array.isArray(r)||t.length!==r.length)return!1;for(var s=0,h=t.length;s<h;s++)if(!o(t[s],r[s]))return!1;return!0}else if(t&&typeof t=="object"){var n=Object.keys(t),l;if(!r||typeof r!="object"||!e&&n.length!==Object.keys(r).length)return!1;for(var s=0,h=n.length;s<h;s++)if(l=n[s],!(l==="canvas"||l==="group")&&!o(t[l],r[l]))return!1;return!0}}u.util.object.extend(u.Object.prototype,{hasStateChanged:function(t){t=t||i;var r="_"+t;return Object.keys(this[r]).length<this[t].length?!0:!o(this[r],this,!0)},saveState:function(t){var r=t&&t.propertySet||i,e="_"+r;return this[e]?(a(this,e,this[r]),t&&t.stateProperties&&a(this,e,t.stateProperties),this):this.setupState(t)},setupState:function(t){t=t||{};var r=t.propertySet||i;return t.propertySet=r,this["_"+r]={},this.saveState(t),this}})})();(function(){var c=u.util.degreesToRadians;u.util.object.extend(u.Object.prototype,{_findTargetCorner:function(i,a){if(!this.hasControls||this.group||!this.canvas||this.canvas._activeObject!==this)return!1;var o=i.x,t=i.y,r,e,s=Object.keys(this.oCoords),h=s.length-1,n;for(this.__corner=0;h>=0;h--)if(n=s[h],!!this.isControlVisible(n)&&(e=this._getImageLines(a?this.oCoords[n].touchCorner:this.oCoords[n].corner),r=this._findCrossPoints({x:o,y:t},e),r!==0&&r%2===1))return this.__corner=n,n;return!1},forEachControl:function(i){for(var a in this.controls)i(this.controls[a],a,this)},_setCornerCoords:function(){var i=this.oCoords;for(var a in i){var o=this.controls[a];i[a].corner=o.calcCornerCoords(this.angle,this.cornerSize,i[a].x,i[a].y,!1),i[a].touchCorner=o.calcCornerCoords(this.angle,this.touchCornerSize,i[a].x,i[a].y,!0)}},drawSelectionBackground:function(i){if(!this.selectionBackgroundColor||this.canvas&&!this.canvas.interactive||this.canvas&&this.canvas._activeObject!==this)return this;i.save();var a=this.getCenterPoint(),o=this._calculateCurrentDimensions(),t=this.canvas.viewportTransform;return i.translate(a.x,a.y),i.scale(1/t[0],1/t[3]),i.rotate(c(this.angle)),i.fillStyle=this.selectionBackgroundColor,i.fillRect(-o.x/2,-o.y/2,o.x,o.y),i.restore(),this},drawBorders:function(i,a){a=a||{};var o=this._calculateCurrentDimensions(),t=this.borderScaleFactor,r=o.x+t,e=o.y+t,s=typeof a.hasControls!="undefined"?a.hasControls:this.hasControls,h=!1;return i.save(),i.strokeStyle=a.borderColor||this.borderColor,this._setLineDash(i,a.borderDashArray||this.borderDashArray),i.strokeRect(-r/2,-e/2,r,e),s&&(i.beginPath(),this.forEachControl(function(n,l,f){n.withConnection&&n.getVisibility(f,l)&&(h=!0,i.moveTo(n.x*r,n.y*e),i.lineTo(n.x*r+n.offsetX,n.y*e+n.offsetY))}),h&&i.stroke()),i.restore(),this},drawBordersInGroup:function(i,a,o){o=o||{};var t=u.util.sizeAfterTransform(this.width,this.height,a),r=this.strokeWidth,e=this.strokeUniform,s=this.borderScaleFactor,h=t.x+r*(e?this.canvas.getZoom():a.scaleX)+s,n=t.y+r*(e?this.canvas.getZoom():a.scaleY)+s;return i.save(),this._setLineDash(i,o.borderDashArray||this.borderDashArray),i.strokeStyle=o.borderColor||this.borderColor,i.strokeRect(-h/2,-n/2,h,n),i.restore(),this},drawControls:function(i,a){a=a||{},i.save();var o=this.canvas.getRetinaScaling(),t,r;return i.setTransform(o,0,0,o,0,0),i.strokeStyle=i.fillStyle=a.cornerColor||this.cornerColor,this.transparentCorners||(i.strokeStyle=a.cornerStrokeColor||this.cornerStrokeColor),this._setLineDash(i,a.cornerDashArray||this.cornerDashArray),this.setCoords(),this.group&&(t=this.group.calcTransformMatrix()),this.forEachControl(function(e,s,h){r=h.oCoords[s],e.getVisibility(h,s)&&(t&&(r=u.util.transformPoint(r,t)),e.render(i,r.x,r.y,a,h))}),i.restore(),this},isControlVisible:function(i){return this.controls[i]&&this.controls[i].getVisibility(this,i)},setControlVisible:function(i,a){return this._controlsVisibility||(this._controlsVisibility={}),this._controlsVisibility[i]=a,this},setControlsVisibility:function(i){i||(i={});for(var a in i)this.setControlVisible(a,i[a]);return this},onDeselect:function(){},onSelect:function(){}})})();u.util.object.extend(u.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(c,i){i=i||{};var a=function(){},o=i.onComplete||a,t=i.onChange||a,r=this;return u.util.animate({target:this,startValue:c.left,endValue:this.getCenter().left,duration:this.FX_DURATION,onChange:function(e){c.set("left",e),r.requestRenderAll(),t()},onComplete:function(){c.setCoords(),o()}})},fxCenterObjectV:function(c,i){i=i||{};var a=function(){},o=i.onComplete||a,t=i.onChange||a,r=this;return u.util.animate({target:this,startValue:c.top,endValue:this.getCenter().top,duration:this.FX_DURATION,onChange:function(e){c.set("top",e),r.requestRenderAll(),t()},onComplete:function(){c.setCoords(),o()}})},fxRemove:function(c,i){i=i||{};var a=function(){},o=i.onComplete||a,t=i.onChange||a,r=this;return u.util.animate({target:this,startValue:c.opacity,endValue:0,duration:this.FX_DURATION,onChange:function(e){c.set("opacity",e),r.requestRenderAll(),t()},onComplete:function(){r.remove(c),o()}})}});u.util.object.extend(u.Object.prototype,{animate:function(){if(arguments[0]&&typeof arguments[0]=="object"){var c=[],i,a,o=[];for(i in arguments[0])c.push(i);for(var t=0,r=c.length;t<r;t++)i=c[t],a=t!==r-1,o.push(this._animate(i,arguments[0][i],arguments[1],a));return o}else return this._animate.apply(this,arguments)},_animate:function(c,i,a,o){var t=this,r;i=i.toString(),a?a=u.util.object.clone(a):a={},~c.indexOf(".")&&(r=c.split("."));var e=t.colorProperties.indexOf(c)>-1||r&&t.colorProperties.indexOf(r[1])>-1,s=r?this.get(r[0])[r[1]]:this.get(c);"from"in a||(a.from=s),e||(~i.indexOf("=")?i=s+parseFloat(i.replace("=","")):i=parseFloat(i));var h={target:this,startValue:a.from,endValue:i,byValue:a.by,easing:a.easing,duration:a.duration,abort:a.abort&&function(n,l,f){return a.abort.call(t,n,l,f)},onChange:function(n,l,f){r?t[r[0]][r[1]]=n:t.set(c,n),!o&&a.onChange&&a.onChange(n,l,f)},onComplete:function(n,l,f){o||(t.setCoords(),a.onComplete&&a.onComplete(n,l,f))}};return e?u.util.animateColor(h.startValue,h.endValue,h.duration,h):u.util.animate(h)}});(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.util.object.extend,o=i.util.object.clone,t={x1:1,x2:1,y1:1,y2:1};if(i.Line){i.warn("fabric.Line is already defined");return}i.Line=i.util.createClass(i.Object,{type:"line",x1:0,y1:0,x2:0,y2:0,cacheProperties:i.Object.prototype.cacheProperties.concat("x1","x2","y1","y2"),initialize:function(e,s){e||(e=[0,0,0,0]),this.callSuper("initialize",s),this.set("x1",e[0]),this.set("y1",e[1]),this.set("x2",e[2]),this.set("y2",e[3]),this._setWidthHeight(s)},_setWidthHeight:function(e){e||(e={}),this.width=Math.abs(this.x2-this.x1),this.height=Math.abs(this.y2-this.y1),this.left="left"in e?e.left:this._getLeftToOriginX(),this.top="top"in e?e.top:this._getTopToOriginY()},_set:function(e,s){return this.callSuper("_set",e,s),typeof t[e]!="undefined"&&this._setWidthHeight(),this},_getLeftToOriginX:r({origin:"originX",axis1:"x1",axis2:"x2",dimension:"width"},{nearest:"left",center:"center",farthest:"right"}),_getTopToOriginY:r({origin:"originY",axis1:"y1",axis2:"y2",dimension:"height"},{nearest:"top",center:"center",farthest:"bottom"}),_render:function(e){e.beginPath();var s=this.calcLinePoints();e.moveTo(s.x1,s.y1),e.lineTo(s.x2,s.y2),e.lineWidth=this.strokeWidth;var h=e.strokeStyle;e.strokeStyle=this.stroke||e.fillStyle,this.stroke&&this._renderStroke(e),e.strokeStyle=h},_findCenterFromElement:function(){return{x:(this.x1+this.x2)/2,y:(this.y1+this.y2)/2}},toObject:function(e){return a(this.callSuper("toObject",e),this.calcLinePoints())},_getNonTransformedDimensions:function(){var e=this.callSuper("_getNonTransformedDimensions");return this.strokeLineCap==="butt"&&(this.width===0&&(e.y-=this.strokeWidth),this.height===0&&(e.x-=this.strokeWidth)),e},calcLinePoints:function(){var e=this.x1<=this.x2?-1:1,s=this.y1<=this.y2?-1:1,h=e*this.width*.5,n=s*this.height*.5,l=e*this.width*-.5,f=s*this.height*-.5;return{x1:h,x2:l,y1:n,y2:f}},_toSVG:function(){var e=this.calcLinePoints();return["<line ","COMMON_PARTS",'x1="',e.x1,'" y1="',e.y1,'" x2="',e.x2,'" y2="',e.y2,`" />
`]}}),i.Line.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x1 y1 x2 y2".split(" ")),i.Line.fromElement=function(e,s,h){h=h||{};var n=i.parseAttributes(e,i.Line.ATTRIBUTE_NAMES),l=[n.x1||0,n.y1||0,n.x2||0,n.y2||0];s(new i.Line(l,a(n,h)))},i.Line.fromObject=function(e,s){function h(l){delete l.points,s&&s(l)}var n=o(e,!0);n.points=[e.x1,e.y1,e.x2,e.y2],i.Object._fromObject("Line",n,h,"points")};function r(e,s){var h=e.origin,n=e.axis1,l=e.axis2,f=e.dimension,d=s.nearest,g=s.center,m=s.farthest;return function(){switch(this.get(h)){case d:return Math.min(this.get(n),this.get(l));case g:return Math.min(this.get(n),this.get(l))+.5*this.get(f);case m:return Math.max(this.get(n),this.get(l))}}}})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.util.degreesToRadians;if(i.Circle){i.warn("fabric.Circle is already defined.");return}i.Circle=i.util.createClass(i.Object,{type:"circle",radius:0,startAngle:0,endAngle:360,cacheProperties:i.Object.prototype.cacheProperties.concat("radius","startAngle","endAngle"),_set:function(t,r){return this.callSuper("_set",t,r),t==="radius"&&this.setRadius(r),this},toObject:function(t){return this.callSuper("toObject",["radius","startAngle","endAngle"].concat(t))},_toSVG:function(){var t,r=0,e=0,s=(this.endAngle-this.startAngle)%360;if(s===0)t=["<circle ","COMMON_PARTS",'cx="'+r+'" cy="'+e+'" ','r="',this.radius,`" />
`];else{var h=a(this.startAngle),n=a(this.endAngle),l=this.radius,f=i.util.cos(h)*l,d=i.util.sin(h)*l,g=i.util.cos(n)*l,m=i.util.sin(n)*l,p=s>180?"1":"0";t=['<path d="M '+f+" "+d," A "+l+" "+l," 0 ",+p+" 1"," "+g+" "+m,'" ',"COMMON_PARTS",` />
`]}return t},_render:function(t){t.beginPath(),t.arc(0,0,this.radius,a(this.startAngle),a(this.endAngle),!1),this._renderPaintInOrder(t)},getRadiusX:function(){return this.get("radius")*this.get("scaleX")},getRadiusY:function(){return this.get("radius")*this.get("scaleY")},setRadius:function(t){return this.radius=t,this.set("width",t*2).set("height",t*2)}}),i.Circle.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy r".split(" ")),i.Circle.fromElement=function(t,r){var e=i.parseAttributes(t,i.Circle.ATTRIBUTE_NAMES);if(!o(e))throw new Error("value of `r` attribute is required and can not be negative");e.left=(e.left||0)-e.radius,e.top=(e.top||0)-e.radius,r(new i.Circle(e))};function o(t){return"radius"in t&&t.radius>=0}i.Circle.fromObject=function(t,r){i.Object._fromObject("Circle",t,r)}})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={});if(i.Triangle){i.warn("fabric.Triangle is already defined");return}i.Triangle=i.util.createClass(i.Object,{type:"triangle",width:100,height:100,_render:function(a){var o=this.width/2,t=this.height/2;a.beginPath(),a.moveTo(-o,t),a.lineTo(0,-t),a.lineTo(o,t),a.closePath(),this._renderPaintInOrder(a)},_toSVG:function(){var a=this.width/2,o=this.height/2,t=[-a+" "+o,"0 "+-o,a+" "+o].join(",");return["<polygon ","COMMON_PARTS",'points="',t,'" />']}}),i.Triangle.fromObject=function(a,o){return i.Object._fromObject("Triangle",a,o)}})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=Math.PI*2;if(i.Ellipse){i.warn("fabric.Ellipse is already defined.");return}i.Ellipse=i.util.createClass(i.Object,{type:"ellipse",rx:0,ry:0,cacheProperties:i.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(o){this.callSuper("initialize",o),this.set("rx",o&&o.rx||0),this.set("ry",o&&o.ry||0)},_set:function(o,t){switch(this.callSuper("_set",o,t),o){case"rx":this.rx=t,this.set("width",t*2);break;case"ry":this.ry=t,this.set("height",t*2);break}return this},getRx:function(){return this.get("rx")*this.get("scaleX")},getRy:function(){return this.get("ry")*this.get("scaleY")},toObject:function(o){return this.callSuper("toObject",["rx","ry"].concat(o))},_toSVG:function(){return["<ellipse ","COMMON_PARTS",'cx="0" cy="0" ','rx="',this.rx,'" ry="',this.ry,`" />
`]},_render:function(o){o.beginPath(),o.save(),o.transform(1,0,0,this.ry/this.rx,0,0),o.arc(0,0,this.rx,0,a,!1),o.restore(),this._renderPaintInOrder(o)}}),i.Ellipse.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("cx cy rx ry".split(" ")),i.Ellipse.fromElement=function(o,t){var r=i.parseAttributes(o,i.Ellipse.ATTRIBUTE_NAMES);r.left=(r.left||0)-r.rx,r.top=(r.top||0)-r.ry,t(new i.Ellipse(r))},i.Ellipse.fromObject=function(o,t){i.Object._fromObject("Ellipse",o,t)}})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.util.object.extend;if(i.Rect){i.warn("fabric.Rect is already defined");return}i.Rect=i.util.createClass(i.Object,{stateProperties:i.Object.prototype.stateProperties.concat("rx","ry"),type:"rect",rx:0,ry:0,cacheProperties:i.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(o){this.callSuper("initialize",o),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(o){var t=this.rx?Math.min(this.rx,this.width/2):0,r=this.ry?Math.min(this.ry,this.height/2):0,e=this.width,s=this.height,h=-this.width/2,n=-this.height/2,l=t!==0||r!==0,f=1-.5522847498;o.beginPath(),o.moveTo(h+t,n),o.lineTo(h+e-t,n),l&&o.bezierCurveTo(h+e-f*t,n,h+e,n+f*r,h+e,n+r),o.lineTo(h+e,n+s-r),l&&o.bezierCurveTo(h+e,n+s-f*r,h+e-f*t,n+s,h+e-t,n+s),o.lineTo(h+t,n+s),l&&o.bezierCurveTo(h+f*t,n+s,h,n+s-f*r,h,n+s-r),o.lineTo(h,n+r),l&&o.bezierCurveTo(h,n+f*r,h+f*t,n,h+t,n),o.closePath(),this._renderPaintInOrder(o)},toObject:function(o){return this.callSuper("toObject",["rx","ry"].concat(o))},_toSVG:function(){var o=-this.width/2,t=-this.height/2;return["<rect ","COMMON_PARTS",'x="',o,'" y="',t,'" rx="',this.rx,'" ry="',this.ry,'" width="',this.width,'" height="',this.height,`" />
`]}}),i.Rect.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x y rx ry width height".split(" ")),i.Rect.fromElement=function(o,t,r){if(!o)return t(null);r=r||{};var e=i.parseAttributes(o,i.Rect.ATTRIBUTE_NAMES);e.left=e.left||0,e.top=e.top||0,e.height=e.height||0,e.width=e.width||0;var s=new i.Rect(a(r?i.util.object.clone(r):{},e));s.visible=s.visible&&s.width>0&&s.height>0,t(s)},i.Rect.fromObject=function(o,t){return i.Object._fromObject("Rect",o,t)}})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.util.object.extend,o=i.util.array.min,t=i.util.array.max,r=i.util.toFixed,e=i.util.projectStrokeOnPoints;if(i.Polyline){i.warn("fabric.Polyline is already defined");return}i.Polyline=i.util.createClass(i.Object,{type:"polyline",points:null,exactBoundingBox:!1,cacheProperties:i.Object.prototype.cacheProperties.concat("points"),initialize:function(s,h){h=h||{},this.points=s||[],this.callSuper("initialize",h),this._setPositionDimensions(h)},_projectStrokeOnPoints:function(){return e(this.points,this,!0)},_setPositionDimensions:function(s){var h=this._calcDimensions(s),n,l=this.exactBoundingBox?this.strokeWidth:0;this.width=h.width-l,this.height=h.height-l,s.fromSVG||(n=this.translateToGivenOrigin({x:h.left-this.strokeWidth/2+l/2,y:h.top-this.strokeWidth/2+l/2},"left","top",this.originX,this.originY)),typeof s.left=="undefined"&&(this.left=s.fromSVG?h.left:n.x),typeof s.top=="undefined"&&(this.top=s.fromSVG?h.top:n.y),this.pathOffset={x:h.left+this.width/2+l/2,y:h.top+this.height/2+l/2}},_calcDimensions:function(){var s=this.exactBoundingBox?this._projectStrokeOnPoints():this.points,h=o(s,"x")||0,n=o(s,"y")||0,l=t(s,"x")||0,f=t(s,"y")||0,d=l-h,g=f-n;return{left:h,top:n,width:d,height:g}},toObject:function(s){return a(this.callSuper("toObject",s),{points:this.points.concat()})},_toSVG:function(){for(var s=[],h=this.pathOffset.x,n=this.pathOffset.y,l=i.Object.NUM_FRACTION_DIGITS,f=0,d=this.points.length;f<d;f++)s.push(r(this.points[f].x-h,l),",",r(this.points[f].y-n,l)," ");return["<"+this.type+" ","COMMON_PARTS",'points="',s.join(""),`" />
`]},commonRender:function(s){var h,n=this.points.length,l=this.pathOffset.x,f=this.pathOffset.y;if(!n||isNaN(this.points[n-1].y))return!1;s.beginPath(),s.moveTo(this.points[0].x-l,this.points[0].y-f);for(var d=0;d<n;d++)h=this.points[d],s.lineTo(h.x-l,h.y-f);return!0},_render:function(s){this.commonRender(s)&&this._renderPaintInOrder(s)},complexity:function(){return this.get("points").length}}),i.Polyline.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat(),i.Polyline.fromElementGenerator=function(s){return function(h,n,l){if(!h)return n(null);l||(l={});var f=i.parsePointsAttribute(h.getAttribute("points")),d=i.parseAttributes(h,i[s].ATTRIBUTE_NAMES);d.fromSVG=!0,n(new i[s](f,a(d,l)))}},i.Polyline.fromElement=i.Polyline.fromElementGenerator("Polyline"),i.Polyline.fromObject=function(s,h){return i.Object._fromObject("Polyline",s,h,"points")}})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.util.projectStrokeOnPoints;if(i.Polygon){i.warn("fabric.Polygon is already defined");return}i.Polygon=i.util.createClass(i.Polyline,{type:"polygon",_projectStrokeOnPoints:function(){return a(this.points,this)},_render:function(o){this.commonRender(o)&&(o.closePath(),this._renderPaintInOrder(o))}}),i.Polygon.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat(),i.Polygon.fromElement=i.Polyline.fromElementGenerator("Polygon"),i.Polygon.fromObject=function(o,t){i.Object._fromObject("Polygon",o,t,"points")}})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.util.array.min,o=i.util.array.max,t=i.util.object.extend,r=i.util.object.clone,e=Object.prototype.toString,s=i.util.toFixed;if(i.Path){i.warn("fabric.Path is already defined");return}i.Path=i.util.createClass(i.Object,{type:"path",path:null,cacheProperties:i.Object.prototype.cacheProperties.concat("path","fillRule"),stateProperties:i.Object.prototype.stateProperties.concat("path"),initialize:function(h,n){n=r(n||{}),delete n.path,this.callSuper("initialize",n),this._setPath(h||[],n)},_setPath:function(h,n){var l=e.call(h)==="[object Array]";this.path=i.util.makePathSimpler(l?h:i.util.parsePath(h)),i.Polyline.prototype._setPositionDimensions.call(this,n||{})},_renderPathCommands:function(h){var n,l=0,f=0,d=0,g=0,m=0,p=0,_=-this.pathOffset.x,w=-this.pathOffset.y;h.beginPath();for(var D=0,B=this.path.length;D<B;++D)switch(n=this.path[D],n[0]){case"L":d=n[1],g=n[2],h.lineTo(d+_,g+w);break;case"M":d=n[1],g=n[2],l=d,f=g,h.moveTo(d+_,g+w);break;case"C":d=n[5],g=n[6],m=n[3],p=n[4],h.bezierCurveTo(n[1]+_,n[2]+w,m+_,p+w,d+_,g+w);break;case"Q":h.quadraticCurveTo(n[1]+_,n[2]+w,n[3]+_,n[4]+w),d=n[3],g=n[4],m=n[1],p=n[2];break;case"z":case"Z":d=l,g=f,h.closePath();break}},_render:function(h){this._renderPathCommands(h),this._renderPaintInOrder(h)},toString:function(){return"#<fabric.Path ("+this.complexity()+'): { "top": '+this.top+', "left": '+this.left+" }>"},toObject:function(h){return t(this.callSuper("toObject",h),{path:this.path.map(function(n){return n.slice()})})},toDatalessObject:function(h){var n=this.toObject(["sourcePath"].concat(h));return n.sourcePath&&delete n.path,n},_toSVG:function(){var h=i.util.joinPath(this.path);return["<path ","COMMON_PARTS",'d="',h,'" stroke-linecap="round" ',`/>
`]},_getOffsetTransform:function(){var h=i.Object.NUM_FRACTION_DIGITS;return" translate("+s(-this.pathOffset.x,h)+", "+s(-this.pathOffset.y,h)+")"},toClipPathSVG:function(h){var n=this._getOffsetTransform();return" "+this._createBaseClipPathSVGMarkup(this._toSVG(),{reviver:h,additionalTransform:n})},toSVG:function(h){var n=this._getOffsetTransform();return this._createBaseSVGMarkup(this._toSVG(),{reviver:h,additionalTransform:n})},complexity:function(){return this.path.length},_calcDimensions:function(){for(var h=[],n=[],l,f=0,d=0,g=0,m=0,p,_=0,w=this.path.length;_<w;++_){switch(l=this.path[_],l[0]){case"L":g=l[1],m=l[2],p=[];break;case"M":g=l[1],m=l[2],f=g,d=m,p=[];break;case"C":p=i.util.getBoundsOfCurve(g,m,l[1],l[2],l[3],l[4],l[5],l[6]),g=l[5],m=l[6];break;case"Q":p=i.util.getBoundsOfCurve(g,m,l[1],l[2],l[1],l[2],l[3],l[4]),g=l[3],m=l[4];break;case"z":case"Z":g=f,m=d;break}p.forEach(function(U){h.push(U.x),n.push(U.y)}),h.push(g),n.push(m)}var D=a(h)||0,B=a(n)||0,N=o(h)||0,G=o(n)||0,z=N-D,H=G-B;return{left:D,top:B,width:z,height:H}}}),i.Path.fromObject=function(h,n){if(typeof h.sourcePath=="string"){var l=h.sourcePath;i.loadSVGFromURL(l,function(f){var d=f[0];d.setOptions(h),n&&n(d)})}else i.Object._fromObject("Path",h,n,"path")},i.Path.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat(["d"]),i.Path.fromElement=function(h,n,l){var f=i.parseAttributes(h,i.Path.ATTRIBUTE_NAMES);f.fromSVG=!0,n(new i.Path(f.d,t(f,l)))}})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.util.array.min,o=i.util.array.max;i.Group||(i.Group=i.util.createClass(i.Object,i.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,cacheProperties:[],useSetOnGroup:!1,initialize:function(t,r,e){r=r||{},this._objects=[],e&&this.callSuper("initialize",r),this._objects=t||[];for(var s=this._objects.length;s--;)this._objects[s].group=this;if(e)this._updateObjectsACoords();else{var h=r&&r.centerPoint;r.originX!==void 0&&(this.originX=r.originX),r.originY!==void 0&&(this.originY=r.originY),h||this._calcBounds(),this._updateObjectsCoords(h),delete r.centerPoint,this.callSuper("initialize",r)}this.setCoords()},_updateObjectsACoords:function(){for(var t=!0,r=this._objects.length;r--;)this._objects[r].setCoords(t)},_updateObjectsCoords:function(r){for(var r=r||this.getCenterPoint(),e=this._objects.length;e--;)this._updateObjectCoords(this._objects[e],r)},_updateObjectCoords:function(t,r){var e=t.left,s=t.top,h=!0;t.set({left:e-r.x,top:s-r.y}),t.group=this,t.setCoords(h)},toString:function(){return"#<fabric.Group: ("+this.complexity()+")>"},addWithUpdate:function(t){var r=!!this.group;return this._restoreObjectsState(),i.util.resetObjectTransform(this),t&&(r&&i.util.removeTransformFromObject(t,this.group.calcTransformMatrix()),this._objects.push(t),t.group=this,t._set("canvas",this.canvas)),this._calcBounds(),this._updateObjectsCoords(),this.dirty=!0,r?this.group.addWithUpdate():this.setCoords(),this},removeWithUpdate:function(t){return this._restoreObjectsState(),i.util.resetObjectTransform(this),this.remove(t),this._calcBounds(),this._updateObjectsCoords(),this.setCoords(),this.dirty=!0,this},_onObjectAdded:function(t){this.dirty=!0,t.group=this,t._set("canvas",this.canvas)},_onObjectRemoved:function(t){this.dirty=!0,delete t.group},_set:function(t,r){var e=this._objects.length;if(this.useSetOnGroup)for(;e--;)this._objects[e].setOnGroup(t,r);if(t==="canvas")for(;e--;)this._objects[e]._set(t,r);i.Object.prototype._set.call(this,t,r)},toObject:function(t){var r=this.includeDefaultValues,e=this._objects.filter(function(h){return!h.excludeFromExport}).map(function(h){var n=h.includeDefaultValues;h.includeDefaultValues=r;var l=h.toObject(t);return h.includeDefaultValues=n,l}),s=i.Object.prototype.toObject.call(this,t);return s.objects=e,s},toDatalessObject:function(t){var r,e=this.sourcePath;if(e)r=e;else{var s=this.includeDefaultValues;r=this._objects.map(function(n){var l=n.includeDefaultValues;n.includeDefaultValues=s;var f=n.toDatalessObject(t);return n.includeDefaultValues=l,f})}var h=i.Object.prototype.toDatalessObject.call(this,t);return h.objects=r,h},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=i.Object.prototype.shouldCache.call(this);if(t){for(var r=0,e=this._objects.length;r<e;r++)if(this._objects[r].willDrawShadow())return this.ownCaching=!1,!1}return t},willDrawShadow:function(){if(i.Object.prototype.willDrawShadow.call(this))return!0;for(var t=0,r=this._objects.length;t<r;t++)if(this._objects[t].willDrawShadow())return!0;return!1},isOnACache:function(){return this.ownCaching||this.group&&this.group.isOnACache()},drawObject:function(t){for(var r=0,e=this._objects.length;r<e;r++)this._objects[r].render(t);this._drawClipPath(t,this.clipPath)},isCacheDirty:function(t){if(this.callSuper("isCacheDirty",t))return!0;if(!this.statefullCache)return!1;for(var r=0,e=this._objects.length;r<e;r++)if(this._objects[r].isCacheDirty(!0)){if(this._cacheCanvas){var s=this.cacheWidth/this.zoomX,h=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-s/2,-h/2,s,h)}return!0}return!1},_restoreObjectsState:function(){var t=this.calcOwnMatrix();return this._objects.forEach(function(r){i.util.addTransformToObject(r,t),delete r.group,r.setCoords()}),this},destroy:function(){return this._objects.forEach(function(t){t.set("dirty",!0)}),this._restoreObjectsState()},dispose:function(){this.callSuper("dispose"),this.forEachObject(function(t){t.dispose&&t.dispose()}),this._objects=[]},toActiveSelection:function(){if(this.canvas){var t=this._objects,r=this.canvas;this._objects=[];var e=this.toObject();delete e.objects;var s=new i.ActiveSelection([]);return s.set(e),s.type="activeSelection",r.remove(this),t.forEach(function(h){h.group=s,h.dirty=!0,r.add(h)}),s.canvas=r,s._objects=t,r._activeObject=s,s.setCoords(),s}},ungroupOnCanvas:function(){return this._restoreObjectsState()},setObjectsCoords:function(){var t=!0;return this.forEachObject(function(r){r.setCoords(t)}),this},_calcBounds:function(t){for(var r=[],e=[],s,h,n,l=["tr","br","bl","tl"],f=0,d=this._objects.length,g,m=l.length;f<d;++f){for(s=this._objects[f],n=s.calcACoords(),g=0;g<m;g++)h=l[g],r.push(n[h].x),e.push(n[h].y);s.aCoords=n}this._getBounds(r,e,t)},_getBounds:function(t,r,e){var s=new i.Point(a(t),a(r)),h=new i.Point(o(t),o(r)),n=s.y||0,l=s.x||0,f=h.x-s.x||0,d=h.y-s.y||0;this.width=f,this.height=d,e||this.setPositionByOrigin({x:l,y:n},"left","top")},_toSVG:function(t){for(var r=["<g ","COMMON_PARTS",` >
`],e=0,s=this._objects.length;e<s;e++)r.push(" ",this._objects[e].toSVG(t));return r.push(`</g>
`),r},getSvgStyles:function(){var t=typeof this.opacity!="undefined"&&this.opacity!==1?"opacity: "+this.opacity+";":"",r=this.visible?"":" visibility: hidden;";return[t,this.getSvgFilter(),r].join("")},toClipPathSVG:function(t){for(var r=[],e=0,s=this._objects.length;e<s;e++)r.push(" ",this._objects[e].toClipPathSVG(t));return this._createBaseClipPathSVGMarkup(r,{reviver:t})}}),i.Group.fromObject=function(t,r){var e=t.objects,s=i.util.object.clone(t,!0);if(delete s.objects,typeof e=="string"){i.loadSVGFromURL(e,function(h){var n=i.util.groupSVGElements(h,t,e);n.set(s),r&&r(n)});return}i.util.enlivenObjects(e,function(h){var n=i.util.object.clone(t,!0);delete n.objects,i.util.enlivenObjectEnlivables(t,n,function(){r&&r(new i.Group(h,n,!0))})})})})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={});i.ActiveSelection||(i.ActiveSelection=i.util.createClass(i.Group,{type:"activeSelection",initialize:function(a,o){o=o||{},this._objects=a||[];for(var t=this._objects.length;t--;)this._objects[t].group=this;o.originX&&(this.originX=o.originX),o.originY&&(this.originY=o.originY),this._calcBounds(),this._updateObjectsCoords(),i.Object.prototype.initialize.call(this,o),this.setCoords()},toGroup:function(){var a=this._objects.concat();this._objects=[];var o=i.Object.prototype.toObject.call(this),t=new i.Group([]);if(delete o.type,t.set(o),a.forEach(function(e){e.canvas.remove(e),e.group=t}),t._objects=a,!this.canvas)return t;var r=this.canvas;return r.add(t),r._activeObject=t,t.setCoords(),t},onDeselect:function(){return this.destroy(),!1},toString:function(){return"#<fabric.ActiveSelection: ("+this.complexity()+")>"},shouldCache:function(){return!1},isOnACache:function(){return!1},_renderControls:function(a,o,t){a.save(),a.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.callSuper("_renderControls",a,o),t=t||{},typeof t.hasControls=="undefined"&&(t.hasControls=!1),t.forActiveSelection=!0;for(var r=0,e=this._objects.length;r<e;r++)this._objects[r]._renderControls(a,t);a.restore()}}),i.ActiveSelection.fromObject=function(a,o){i.util.enlivenObjects(a.objects,function(t){delete a.objects,o&&o(new i.ActiveSelection(t,a,!0))})})})(F);(function(c){"use strict";var i=u.util.object.extend;if(c.fabric||(c.fabric={}),c.fabric.Image){u.warn("fabric.Image is already defined.");return}u.Image=u.util.createClass(u.Object,{type:"image",strokeWidth:0,srcFromAttribute:!1,_lastScaleX:1,_lastScaleY:1,_filterScalingX:1,_filterScalingY:1,minimumScaleTrigger:.5,stateProperties:u.Object.prototype.stateProperties.concat("cropX","cropY"),cacheProperties:u.Object.prototype.cacheProperties.concat("cropX","cropY"),cacheKey:"",cropX:0,cropY:0,imageSmoothing:!0,initialize:function(a,o){o||(o={}),this.filters=[],this.cacheKey="texture"+u.Object.__uid++,this.callSuper("initialize",o),this._initElement(a,o)},getElement:function(){return this._element||{}},setElement:function(a,o){return this.removeTexture(this.cacheKey),this.removeTexture(this.cacheKey+"_filtered"),this._element=a,this._originalElement=a,this._initConfig(o),this.filters.length!==0&&this.applyFilters(),this.resizeFilter&&this.applyResizeFilters(),this},removeTexture:function(a){var o=u.filterBackend;o&&o.evictCachesForKey&&o.evictCachesForKey(a)},dispose:function(){this.callSuper("dispose"),this.removeTexture(this.cacheKey),this.removeTexture(this.cacheKey+"_filtered"),this._cacheContext=void 0,["_originalElement","_element","_filteredEl","_cacheCanvas"].forEach(function(a){u.util.cleanUpJsdomNode(this[a]),this[a]=void 0}.bind(this))},getCrossOrigin:function(){return this._originalElement&&(this._originalElement.crossOrigin||null)},getOriginalSize:function(){var a=this.getElement();return{width:a.naturalWidth||a.width,height:a.naturalHeight||a.height}},_stroke:function(a){if(!(!this.stroke||this.strokeWidth===0)){var o=this.width/2,t=this.height/2;a.beginPath(),a.moveTo(-o,-t),a.lineTo(o,-t),a.lineTo(o,t),a.lineTo(-o,t),a.lineTo(-o,-t),a.closePath()}},toObject:function(a){var o=[];this.filters.forEach(function(r){r&&o.push(r.toObject())});var t=i(this.callSuper("toObject",["cropX","cropY"].concat(a)),{src:this.getSrc(),crossOrigin:this.getCrossOrigin(),filters:o});return this.resizeFilter&&(t.resizeFilter=this.resizeFilter.toObject()),t},hasCrop:function(){return this.cropX||this.cropY||this.width<this._element.width||this.height<this._element.height},_toSVG:function(){var a=[],o=[],t,r=this._element,e=-this.width/2,s=-this.height/2,h="",n="";if(!r)return[];if(this.hasCrop()){var l=u.Object.__uid++;a.push('<clipPath id="imageCrop_'+l+`">
`,' <rect x="'+e+'" y="'+s+'" width="'+this.width+'" height="'+this.height+`" />
`,`</clipPath>
`),h=' clip-path="url(#imageCrop_'+l+')" '}if(this.imageSmoothing||(n='" image-rendering="optimizeSpeed'),o.push(" <image ","COMMON_PARTS",'xlink:href="',this.getSvgSrc(!0),'" x="',e-this.cropX,'" y="',s-this.cropY,'" width="',r.width||r.naturalWidth,'" height="',r.height||r.height,n,'"',h,`></image>
`),this.stroke||this.strokeDashArray){var f=this.fill;this.fill=null,t=[" <rect ",'x="',e,'" y="',s,'" width="',this.width,'" height="',this.height,'" style="',this.getSvgStyles(),`"/>
`],this.fill=f}return this.paintFirst!=="fill"?a=a.concat(t,o):a=a.concat(o,t),a},getSrc:function(a){var o=a?this._element:this._originalElement;return o?o.toDataURL?o.toDataURL():this.srcFromAttribute?o.getAttribute("src"):o.src:this.src||""},setSrc:function(a,o,t){return u.util.loadImage(a,function(r,e){this.setElement(r,t),this._setWidthHeight(),o&&o(this,e)},this,t&&t.crossOrigin),this},toString:function(){return'#<fabric.Image: { src: "'+this.getSrc()+'" }>'},applyResizeFilters:function(){var a=this.resizeFilter,o=this.minimumScaleTrigger,t=this.getTotalObjectScaling(),r=t.scaleX,e=t.scaleY,s=this._filteredEl||this._originalElement;if(this.group&&this.set("dirty",!0),!a||r>o&&e>o){this._element=s,this._filterScalingX=1,this._filterScalingY=1,this._lastScaleX=r,this._lastScaleY=e;return}u.filterBackend||(u.filterBackend=u.initFilterBackend());var h=u.util.createCanvasElement(),n=this._filteredEl?this.cacheKey+"_filtered":this.cacheKey,l=s.width,f=s.height;h.width=l,h.height=f,this._element=h,this._lastScaleX=a.scaleX=r,this._lastScaleY=a.scaleY=e,u.filterBackend.applyFilters([a],s,l,f,this._element,n),this._filterScalingX=h.width/this._originalElement.width,this._filterScalingY=h.height/this._originalElement.height},applyFilters:function(a){if(a=a||this.filters||[],a=a.filter(function(s){return s&&!s.isNeutralState()}),this.set("dirty",!0),this.removeTexture(this.cacheKey+"_filtered"),a.length===0)return this._element=this._originalElement,this._filteredEl=null,this._filterScalingX=1,this._filterScalingY=1,this;var o=this._originalElement,t=o.naturalWidth||o.width,r=o.naturalHeight||o.height;if(this._element===this._originalElement){var e=u.util.createCanvasElement();e.width=t,e.height=r,this._element=e,this._filteredEl=e}else this._element=this._filteredEl,this._filteredEl.getContext("2d").clearRect(0,0,t,r),this._lastScaleX=1,this._lastScaleY=1;return u.filterBackend||(u.filterBackend=u.initFilterBackend()),u.filterBackend.applyFilters(a,this._originalElement,t,r,this._element,this.cacheKey),(this._originalElement.width!==this._element.width||this._originalElement.height!==this._element.height)&&(this._filterScalingX=this._element.width/this._originalElement.width,this._filterScalingY=this._element.height/this._originalElement.height),this},_render:function(a){u.util.setImageSmoothing(a,this.imageSmoothing),this.isMoving!==!0&&this.resizeFilter&&this._needsResize()&&this.applyResizeFilters(),this._stroke(a),this._renderPaintInOrder(a)},drawCacheOnCanvas:function(a){u.util.setImageSmoothing(a,this.imageSmoothing),u.Object.prototype.drawCacheOnCanvas.call(this,a)},shouldCache:function(){return this.needsItsOwnCache()},_renderFill:function(a){var o=this._element;if(o){var t=this._filterScalingX,r=this._filterScalingY,e=this.width,s=this.height,h=Math.min,n=Math.max,l=n(this.cropX,0),f=n(this.cropY,0),d=o.naturalWidth||o.width,g=o.naturalHeight||o.height,m=l*t,p=f*r,_=h(e*t,d-m),w=h(s*r,g-p),D=-e/2,B=-s/2,N=h(e,d/t-l),G=h(s,g/r-f);o&&a.drawImage(o,m,p,_,w,D,B,N,G)}},_needsResize:function(){var a=this.getTotalObjectScaling();return a.scaleX!==this._lastScaleX||a.scaleY!==this._lastScaleY},_resetWidthHeight:function(){this.set(this.getOriginalSize())},_initElement:function(a,o){this.setElement(u.util.getById(a),o),u.util.addClass(this.getElement(),u.Image.CSS_CANVAS)},_initConfig:function(a){a||(a={}),this.setOptions(a),this._setWidthHeight(a)},_initFilters:function(a,o){a&&a.length?u.util.enlivenObjects(a,function(t){o&&o(t)},"fabric.Image.filters"):o&&o()},_setWidthHeight:function(a){a||(a={});var o=this.getElement();this.width=a.width||o.naturalWidth||o.width||0,this.height=a.height||o.naturalHeight||o.height||0},parsePreserveAspectRatioAttribute:function(){var a=u.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio||""),o=this._element.width,t=this._element.height,r=1,e=1,s=0,h=0,n=0,l=0,f,d=this.width,g=this.height,m={width:d,height:g};return a&&(a.alignX!=="none"||a.alignY!=="none")?(a.meetOrSlice==="meet"&&(r=e=u.util.findScaleToFit(this._element,m),f=(d-o*r)/2,a.alignX==="Min"&&(s=-f),a.alignX==="Max"&&(s=f),f=(g-t*e)/2,a.alignY==="Min"&&(h=-f),a.alignY==="Max"&&(h=f)),a.meetOrSlice==="slice"&&(r=e=u.util.findScaleToCover(this._element,m),f=o-d/r,a.alignX==="Mid"&&(n=f/2),a.alignX==="Max"&&(n=f),f=t-g/e,a.alignY==="Mid"&&(l=f/2),a.alignY==="Max"&&(l=f),o=d/r,t=g/e)):(r=d/o,e=g/t),{width:o,height:t,scaleX:r,scaleY:e,offsetLeft:s,offsetTop:h,cropX:n,cropY:l}}}),u.Image.CSS_CANVAS="canvas-img",u.Image.prototype.getSvgSrc=u.Image.prototype.getSrc,u.Image.fromObject=function(a,o){var t=u.util.object.clone(a);u.util.loadImage(t.src,function(r,e){if(e){o&&o(null,!0);return}u.Image.prototype._initFilters.call(t,t.filters,function(s){t.filters=s||[],u.Image.prototype._initFilters.call(t,[t.resizeFilter],function(h){t.resizeFilter=h[0],u.util.enlivenObjectEnlivables(t,t,function(){var n=new u.Image(r,t);o(n,!1)})})})},null,t.crossOrigin)},u.Image.fromURL=function(a,o,t){u.util.loadImage(a,function(r,e){o&&o(new u.Image(r,t),e)},null,t&&t.crossOrigin)},u.Image.ATTRIBUTE_NAMES=u.SHARED_ATTRIBUTES.concat("x y width height preserveAspectRatio xlink:href crossOrigin image-rendering".split(" ")),u.Image.fromElement=function(a,o,t){var r=u.parseAttributes(a,u.Image.ATTRIBUTE_NAMES);u.Image.fromURL(r["xlink:href"],o,i(t?u.util.object.clone(t):{},r))}})(F);u.util.object.extend(u.Object.prototype,{_getAngleValueForStraighten:function(){var c=this.angle%360;return c>0?Math.round((c-1)/90)*90:Math.round(c/90)*90},straighten:function(){return this.rotate(this._getAngleValueForStraighten())},fxStraighten:function(c){c=c||{};var i=function(){},a=c.onComplete||i,o=c.onChange||i,t=this;return u.util.animate({target:this,startValue:this.get("angle"),endValue:this._getAngleValueForStraighten(),duration:this.FX_DURATION,onChange:function(r){t.rotate(r),o()},onComplete:function(){t.setCoords(),a()}})}});u.util.object.extend(u.StaticCanvas.prototype,{straightenObject:function(c){return c.straighten(),this.requestRenderAll(),this},fxStraightenObject:function(c){return c.fxStraighten({onChange:this.requestRenderAllBound})}});(function(){"use strict";function c(a,o){var t="precision "+o+` float;
void main(){}`,r=a.createShader(a.FRAGMENT_SHADER);return a.shaderSource(r,t),a.compileShader(r),!!a.getShaderParameter(r,a.COMPILE_STATUS)}u.isWebglSupported=function(a){if(u.isLikelyNode)return!1;a=a||u.WebglFilterBackend.prototype.tileSize;var o=document.createElement("canvas"),t=o.getContext("webgl")||o.getContext("experimental-webgl"),r=!1;if(t){u.maxTextureSize=t.getParameter(t.MAX_TEXTURE_SIZE),r=u.maxTextureSize>=a;for(var e=["highp","mediump","lowp"],s=0;s<3;s++)if(c(t,e[s])){u.webGlPrecision=e[s];break}}return this.isSupported=r,r},u.WebglFilterBackend=i;function i(a){a&&a.tileSize&&(this.tileSize=a.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}i.prototype={tileSize:2048,resources:{},setupGLContext:function(a,o){this.dispose(),this.createWebGLCanvas(a,o),this.aPosition=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(a,o)},chooseFastestCopyGLTo2DMethod:function(a,o){var t=typeof window.performance!="undefined",r;try{new ImageData(1,1),r=!0}catch(m){r=!1}var e=typeof ArrayBuffer!="undefined",s=typeof Uint8ClampedArray!="undefined";if(t&&r&&e&&s){var h=u.util.createCanvasElement(),n=new ArrayBuffer(a*o*4);if(u.forceGLPutImageData){this.imageBuffer=n,this.copyGLTo2D=Dt;return}var l={imageBuffer:n,destinationWidth:a,destinationHeight:o,targetCanvas:h},f,d,g;h.width=a,h.height=o,f=window.performance.now(),kt.call(l,this.gl,l),d=window.performance.now()-f,f=window.performance.now(),Dt.call(l,this.gl,l),g=window.performance.now()-f,d>g?(this.imageBuffer=n,this.copyGLTo2D=Dt):this.copyGLTo2D=kt}},createWebGLCanvas:function(a,o){var t=u.util.createCanvasElement();t.width=a,t.height=o;var r={alpha:!0,premultipliedAlpha:!1,depth:!1,stencil:!1,antialias:!1},e=t.getContext("webgl",r);e||(e=t.getContext("experimental-webgl",r)),e&&(e.clearColor(0,0,0,0),this.canvas=t,this.gl=e)},applyFilters:function(a,o,t,r,e,s){var h=this.gl,n;s&&(n=this.getCachedTexture(s,o));var l={originalWidth:o.width||o.originalWidth,originalHeight:o.height||o.originalHeight,sourceWidth:t,sourceHeight:r,destinationWidth:t,destinationHeight:r,context:h,sourceTexture:this.createTexture(h,t,r,!n&&o),targetTexture:this.createTexture(h,t,r),originalTexture:n||this.createTexture(h,t,r,!n&&o),passes:a.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:e},f=h.createFramebuffer();return h.bindFramebuffer(h.FRAMEBUFFER,f),a.forEach(function(d){d&&d.applyTo(l)}),ge(l),this.copyGLTo2D(h,l),h.bindTexture(h.TEXTURE_2D,null),h.deleteTexture(l.sourceTexture),h.deleteTexture(l.targetTexture),h.deleteFramebuffer(f),e.getContext("2d").setTransform(1,0,0,1,0,0),l},dispose:function(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()},clearWebGLCaches:function(){this.programCache={},this.textureCache={}},createTexture:function(a,o,t,r){var e=a.createTexture();return a.bindTexture(a.TEXTURE_2D,e),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MAG_FILTER,a.NEAREST),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_MIN_FILTER,a.NEAREST),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_S,a.CLAMP_TO_EDGE),a.texParameteri(a.TEXTURE_2D,a.TEXTURE_WRAP_T,a.CLAMP_TO_EDGE),r?a.texImage2D(a.TEXTURE_2D,0,a.RGBA,a.RGBA,a.UNSIGNED_BYTE,r):a.texImage2D(a.TEXTURE_2D,0,a.RGBA,o,t,0,a.RGBA,a.UNSIGNED_BYTE,null),e},getCachedTexture:function(a,o){if(this.textureCache[a])return this.textureCache[a];var t=this.createTexture(this.gl,o.width,o.height,o);return this.textureCache[a]=t,t},evictCachesForKey:function(a){this.textureCache[a]&&(this.gl.deleteTexture(this.textureCache[a]),delete this.textureCache[a])},copyGLTo2D:kt,captureGPUInfo:function(){if(this.gpuInfo)return this.gpuInfo;var a=this.gl,o={renderer:"",vendor:""};if(!a)return o;var t=a.getExtension("WEBGL_debug_renderer_info");if(t){var r=a.getParameter(t.UNMASKED_RENDERER_WEBGL),e=a.getParameter(t.UNMASKED_VENDOR_WEBGL);r&&(o.renderer=r.toLowerCase()),e&&(o.vendor=e.toLowerCase())}return this.gpuInfo=o,o}}})();function ge(c){var i=c.targetCanvas,a=i.width,o=i.height,t=c.destinationWidth,r=c.destinationHeight;(a!==t||o!==r)&&(i.width=t,i.height=r)}function kt(c,i){var a=c.canvas,o=i.targetCanvas,t=o.getContext("2d");t.translate(0,o.height),t.scale(1,-1);var r=a.height-o.height;t.drawImage(a,0,r,o.width,o.height,0,0,o.width,o.height)}function Dt(c,i){var a=i.targetCanvas,o=a.getContext("2d"),t=i.destinationWidth,r=i.destinationHeight,e=t*r*4,s=new Uint8Array(this.imageBuffer,0,e),h=new Uint8ClampedArray(this.imageBuffer,0,e);c.readPixels(0,0,t,r,c.RGBA,c.UNSIGNED_BYTE,s);var n=new ImageData(h,t,r);o.putImageData(n,0,0)}(function(){"use strict";var c=function(){};u.Canvas2dFilterBackend=i;function i(){}i.prototype={evictCachesForKey:c,dispose:c,clearWebGLCaches:c,resources:{},applyFilters:function(a,o,t,r,e){var s=e.getContext("2d");s.drawImage(o,0,0,t,r);var h=s.getImageData(0,0,t,r),n=s.getImageData(0,0,t,r),l={sourceWidth:t,sourceHeight:r,imageData:h,originalEl:o,originalImageData:n,canvasEl:e,ctx:s,filterBackend:this};return a.forEach(function(f){f.applyTo(l)}),(l.imageData.width!==t||l.imageData.height!==r)&&(e.width=l.imageData.width,e.height=l.imageData.height),s.putImageData(l.imageData,0,0),l}}})();u.Image=u.Image||{};u.Image.filters=u.Image.filters||{};u.Image.filters.BaseFilter=u.util.createClass({type:"BaseFilter",vertexSource:`attribute vec2 aPosition;
varying vec2 vTexCoord;
void main() {
vTexCoord = aPosition;
gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);
}`,fragmentSource:`precision highp float;
varying vec2 vTexCoord;
uniform sampler2D uTexture;
void main() {
gl_FragColor = texture2D(uTexture, vTexCoord);
}`,initialize:function(c){c&&this.setOptions(c)},setOptions:function(c){for(var i in c)this[i]=c[i]},createProgram:function(c,i,a){i=i||this.fragmentSource,a=a||this.vertexSource,u.webGlPrecision!=="highp"&&(i=i.replace(/precision highp float/g,"precision "+u.webGlPrecision+" float"));var o=c.createShader(c.VERTEX_SHADER);if(c.shaderSource(o,a),c.compileShader(o),!c.getShaderParameter(o,c.COMPILE_STATUS))throw new Error("Vertex shader compile error for "+this.type+": "+c.getShaderInfoLog(o));var t=c.createShader(c.FRAGMENT_SHADER);if(c.shaderSource(t,i),c.compileShader(t),!c.getShaderParameter(t,c.COMPILE_STATUS))throw new Error("Fragment shader compile error for "+this.type+": "+c.getShaderInfoLog(t));var r=c.createProgram();if(c.attachShader(r,o),c.attachShader(r,t),c.linkProgram(r),!c.getProgramParameter(r,c.LINK_STATUS))throw new Error('Shader link error for "${this.type}" '+c.getProgramInfoLog(r));var e=this.getAttributeLocations(c,r),s=this.getUniformLocations(c,r)||{};return s.uStepW=c.getUniformLocation(r,"uStepW"),s.uStepH=c.getUniformLocation(r,"uStepH"),{program:r,attributeLocations:e,uniformLocations:s}},getAttributeLocations:function(c,i){return{aPosition:c.getAttribLocation(i,"aPosition")}},getUniformLocations:function(){return{}},sendAttributeData:function(c,i,a){var o=i.aPosition,t=c.createBuffer();c.bindBuffer(c.ARRAY_BUFFER,t),c.enableVertexAttribArray(o),c.vertexAttribPointer(o,2,c.FLOAT,!1,0,0),c.bufferData(c.ARRAY_BUFFER,a,c.STATIC_DRAW)},_setupFrameBuffer:function(c){var i=c.context,a,o;c.passes>1?(a=c.destinationWidth,o=c.destinationHeight,(c.sourceWidth!==a||c.sourceHeight!==o)&&(i.deleteTexture(c.targetTexture),c.targetTexture=c.filterBackend.createTexture(i,a,o)),i.framebufferTexture2D(i.FRAMEBUFFER,i.COLOR_ATTACHMENT0,i.TEXTURE_2D,c.targetTexture,0)):(i.bindFramebuffer(i.FRAMEBUFFER,null),i.finish())},_swapTextures:function(c){c.passes--,c.pass++;var i=c.targetTexture;c.targetTexture=c.sourceTexture,c.sourceTexture=i},isNeutralState:function(){var c=this.mainParameter,i=u.Image.filters[this.type].prototype;if(c)if(Array.isArray(i[c])){for(var a=i[c].length;a--;)if(this[c][a]!==i[c][a])return!1;return!0}else return i[c]===this[c];else return!1},applyTo:function(c){c.webgl?(this._setupFrameBuffer(c),this.applyToWebGL(c),this._swapTextures(c)):this.applyTo2d(c)},retrieveShader:function(c){return c.programCache.hasOwnProperty(this.type)||(c.programCache[this.type]=this.createProgram(c.context)),c.programCache[this.type]},applyToWebGL:function(c){var i=c.context,a=this.retrieveShader(c);c.pass===0&&c.originalTexture?i.bindTexture(i.TEXTURE_2D,c.originalTexture):i.bindTexture(i.TEXTURE_2D,c.sourceTexture),i.useProgram(a.program),this.sendAttributeData(i,a.attributeLocations,c.aPosition),i.uniform1f(a.uniformLocations.uStepW,1/c.sourceWidth),i.uniform1f(a.uniformLocations.uStepH,1/c.sourceHeight),this.sendUniformData(i,a.uniformLocations),i.viewport(0,0,c.destinationWidth,c.destinationHeight),i.drawArrays(i.TRIANGLE_STRIP,0,4)},bindAdditionalTexture:function(c,i,a){c.activeTexture(a),c.bindTexture(c.TEXTURE_2D,i),c.activeTexture(c.TEXTURE0)},unbindAdditionalTexture:function(c,i){c.activeTexture(i),c.bindTexture(c.TEXTURE_2D,null),c.activeTexture(c.TEXTURE0)},getMainParameter:function(){return this[this.mainParameter]},setMainParameter:function(c){this[this.mainParameter]=c},sendUniformData:function(){},createHelpLayer:function(c){if(!c.helpLayer){var i=document.createElement("canvas");i.width=c.sourceWidth,i.height=c.sourceHeight,c.helpLayer=i}},toObject:function(){var c={type:this.type},i=this.mainParameter;return i&&(c[i]=this[i]),c},toJSON:function(){return this.toObject()}});u.Image.filters.BaseFilter.fromObject=function(c,i){var a=new u.Image.filters[c.type](c);return i&&i(a),a};(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.Image.filters,o=i.util.createClass;a.ColorMatrix=o(a.BaseFilter,{type:"ColorMatrix",fragmentSource:`precision highp float;
uniform sampler2D uTexture;
varying vec2 vTexCoord;
uniform mat4 uColorMatrix;
uniform vec4 uConstants;
void main() {
vec4 color = texture2D(uTexture, vTexCoord);
color *= uColorMatrix;
color += uConstants;
gl_FragColor = color;
}`,matrix:[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],mainParameter:"matrix",colorsOnly:!0,initialize:function(t){this.callSuper("initialize",t),this.matrix=this.matrix.slice(0)},applyTo2d:function(t){var r=t.imageData,e=r.data,s=e.length,h=this.matrix,n,l,f,d,g,m=this.colorsOnly;for(g=0;g<s;g+=4)n=e[g],l=e[g+1],f=e[g+2],m?(e[g]=n*h[0]+l*h[1]+f*h[2]+h[4]*255,e[g+1]=n*h[5]+l*h[6]+f*h[7]+h[9]*255,e[g+2]=n*h[10]+l*h[11]+f*h[12]+h[14]*255):(d=e[g+3],e[g]=n*h[0]+l*h[1]+f*h[2]+d*h[3]+h[4]*255,e[g+1]=n*h[5]+l*h[6]+f*h[7]+d*h[8]+h[9]*255,e[g+2]=n*h[10]+l*h[11]+f*h[12]+d*h[13]+h[14]*255,e[g+3]=n*h[15]+l*h[16]+f*h[17]+d*h[18]+h[19]*255)},getUniformLocations:function(t,r){return{uColorMatrix:t.getUniformLocation(r,"uColorMatrix"),uConstants:t.getUniformLocation(r,"uConstants")}},sendUniformData:function(t,r){var e=this.matrix,s=[e[0],e[1],e[2],e[3],e[5],e[6],e[7],e[8],e[10],e[11],e[12],e[13],e[15],e[16],e[17],e[18]],h=[e[4],e[9],e[14],e[19]];t.uniformMatrix4fv(r.uColorMatrix,!1,s),t.uniform4fv(r.uConstants,h)}}),i.Image.filters.ColorMatrix.fromObject=i.Image.filters.BaseFilter.fromObject})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.Image.filters,o=i.util.createClass;a.Brightness=o(a.BaseFilter,{type:"Brightness",fragmentSource:`precision highp float;
uniform sampler2D uTexture;
uniform float uBrightness;
varying vec2 vTexCoord;
void main() {
vec4 color = texture2D(uTexture, vTexCoord);
color.rgb += uBrightness;
gl_FragColor = color;
}`,brightness:0,mainParameter:"brightness",applyTo2d:function(t){if(this.brightness!==0){var r=t.imageData,e=r.data,s,h=e.length,n=Math.round(this.brightness*255);for(s=0;s<h;s+=4)e[s]=e[s]+n,e[s+1]=e[s+1]+n,e[s+2]=e[s+2]+n}},getUniformLocations:function(t,r){return{uBrightness:t.getUniformLocation(r,"uBrightness")}},sendUniformData:function(t,r){t.uniform1f(r.uBrightness,this.brightness)}}),i.Image.filters.Brightness.fromObject=i.Image.filters.BaseFilter.fromObject})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.util.object.extend,o=i.Image.filters,t=i.util.createClass;o.Convolute=t(o.BaseFilter,{type:"Convolute",opaque:!1,matrix:[0,0,0,0,1,0,0,0,0],fragmentSource:{Convolute_3_1:`precision highp float;
uniform sampler2D uTexture;
uniform float uMatrix[9];
uniform float uStepW;
uniform float uStepH;
varying vec2 vTexCoord;
void main() {
vec4 color = vec4(0, 0, 0, 0);
for (float h = 0.0; h < 3.0; h+=1.0) {
for (float w = 0.0; w < 3.0; w+=1.0) {
vec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));
color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];
}
}
gl_FragColor = color;
}`,Convolute_3_0:`precision highp float;
uniform sampler2D uTexture;
uniform float uMatrix[9];
uniform float uStepW;
uniform float uStepH;
varying vec2 vTexCoord;
void main() {
vec4 color = vec4(0, 0, 0, 1);
for (float h = 0.0; h < 3.0; h+=1.0) {
for (float w = 0.0; w < 3.0; w+=1.0) {
vec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));
color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];
}
}
float alpha = texture2D(uTexture, vTexCoord).a;
gl_FragColor = color;
gl_FragColor.a = alpha;
}`,Convolute_5_1:`precision highp float;
uniform sampler2D uTexture;
uniform float uMatrix[25];
uniform float uStepW;
uniform float uStepH;
varying vec2 vTexCoord;
void main() {
vec4 color = vec4(0, 0, 0, 0);
for (float h = 0.0; h < 5.0; h+=1.0) {
for (float w = 0.0; w < 5.0; w+=1.0) {
vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));
color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];
}
}
gl_FragColor = color;
}`,Convolute_5_0:`precision highp float;
uniform sampler2D uTexture;
uniform float uMatrix[25];
uniform float uStepW;
uniform float uStepH;
varying vec2 vTexCoord;
void main() {
vec4 color = vec4(0, 0, 0, 1);
for (float h = 0.0; h < 5.0; h+=1.0) {
for (float w = 0.0; w < 5.0; w+=1.0) {
vec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));
color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];
}
}
float alpha = texture2D(uTexture, vTexCoord).a;
gl_FragColor = color;
gl_FragColor.a = alpha;
}`,Convolute_7_1:`precision highp float;
uniform sampler2D uTexture;
uniform float uMatrix[49];
uniform float uStepW;
uniform float uStepH;
varying vec2 vTexCoord;
void main() {
vec4 color = vec4(0, 0, 0, 0);
for (float h = 0.0; h < 7.0; h+=1.0) {
for (float w = 0.0; w < 7.0; w+=1.0) {
vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));
color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];
}
}
gl_FragColor = color;
}`,Convolute_7_0:`precision highp float;
uniform sampler2D uTexture;
uniform float uMatrix[49];
uniform float uStepW;
uniform float uStepH;
varying vec2 vTexCoord;
void main() {
vec4 color = vec4(0, 0, 0, 1);
for (float h = 0.0; h < 7.0; h+=1.0) {
for (float w = 0.0; w < 7.0; w+=1.0) {
vec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));
color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];
}
}
float alpha = texture2D(uTexture, vTexCoord).a;
gl_FragColor = color;
gl_FragColor.a = alpha;
}`,Convolute_9_1:`precision highp float;
uniform sampler2D uTexture;
uniform float uMatrix[81];
uniform float uStepW;
uniform float uStepH;
varying vec2 vTexCoord;
void main() {
vec4 color = vec4(0, 0, 0, 0);
for (float h = 0.0; h < 9.0; h+=1.0) {
for (float w = 0.0; w < 9.0; w+=1.0) {
vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));
color += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];
}
}
gl_FragColor = color;
}`,Convolute_9_0:`precision highp float;
uniform sampler2D uTexture;
uniform float uMatrix[81];
uniform float uStepW;
uniform float uStepH;
varying vec2 vTexCoord;
void main() {
vec4 color = vec4(0, 0, 0, 1);
for (float h = 0.0; h < 9.0; h+=1.0) {
for (float w = 0.0; w < 9.0; w+=1.0) {
vec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));
color.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];
}
}
float alpha = texture2D(uTexture, vTexCoord).a;
gl_FragColor = color;
gl_FragColor.a = alpha;
}`},retrieveShader:function(r){var e=Math.sqrt(this.matrix.length),s=this.type+"_"+e+"_"+(this.opaque?1:0),h=this.fragmentSource[s];return r.programCache.hasOwnProperty(s)||(r.programCache[s]=this.createProgram(r.context,h)),r.programCache[s]},applyTo2d:function(r){var e=r.imageData,s=e.data,h=this.matrix,n=Math.round(Math.sqrt(h.length)),l=Math.floor(n/2),f=e.width,d=e.height,g=r.ctx.createImageData(f,d),m=g.data,p=this.opaque?1:0,_,w,D,B,N,G,z,H,U,K,Q,J,v;for(Q=0;Q<d;Q++)for(K=0;K<f;K++){for(N=(Q*f+K)*4,_=0,w=0,D=0,B=0,v=0;v<n;v++)for(J=0;J<n;J++)z=Q+v-l,G=K+J-l,!(z<0||z>=d||G<0||G>=f)&&(H=(z*f+G)*4,U=h[v*n+J],_+=s[H]*U,w+=s[H+1]*U,D+=s[H+2]*U,p||(B+=s[H+3]*U));m[N]=_,m[N+1]=w,m[N+2]=D,p?m[N+3]=s[N+3]:m[N+3]=B}r.imageData=g},getUniformLocations:function(r,e){return{uMatrix:r.getUniformLocation(e,"uMatrix"),uOpaque:r.getUniformLocation(e,"uOpaque"),uHalfSize:r.getUniformLocation(e,"uHalfSize"),uSize:r.getUniformLocation(e,"uSize")}},sendUniformData:function(r,e){r.uniform1fv(e.uMatrix,this.matrix)},toObject:function(){return a(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),i.Image.filters.Convolute.fromObject=i.Image.filters.BaseFilter.fromObject})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.Image.filters,o=i.util.createClass;a.Grayscale=o(a.BaseFilter,{type:"Grayscale",fragmentSource:{average:`precision highp float;
uniform sampler2D uTexture;
varying vec2 vTexCoord;
void main() {
vec4 color = texture2D(uTexture, vTexCoord);
float average = (color.r + color.b + color.g) / 3.0;
gl_FragColor = vec4(average, average, average, color.a);
}`,lightness:`precision highp float;
uniform sampler2D uTexture;
uniform int uMode;
varying vec2 vTexCoord;
void main() {
vec4 col = texture2D(uTexture, vTexCoord);
float average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;
gl_FragColor = vec4(average, average, average, col.a);
}`,luminosity:`precision highp float;
uniform sampler2D uTexture;
uniform int uMode;
varying vec2 vTexCoord;
void main() {
vec4 col = texture2D(uTexture, vTexCoord);
float average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;
gl_FragColor = vec4(average, average, average, col.a);
}`},mode:"average",mainParameter:"mode",applyTo2d:function(t){var r=t.imageData,e=r.data,s,h=e.length,n,l=this.mode;for(s=0;s<h;s+=4)l==="average"?n=(e[s]+e[s+1]+e[s+2])/3:l==="lightness"?n=(Math.min(e[s],e[s+1],e[s+2])+Math.max(e[s],e[s+1],e[s+2]))/2:l==="luminosity"&&(n=.21*e[s]+.72*e[s+1]+.07*e[s+2]),e[s]=n,e[s+1]=n,e[s+2]=n},retrieveShader:function(t){var r=this.type+"_"+this.mode;if(!t.programCache.hasOwnProperty(r)){var e=this.fragmentSource[this.mode];t.programCache[r]=this.createProgram(t.context,e)}return t.programCache[r]},getUniformLocations:function(t,r){return{uMode:t.getUniformLocation(r,"uMode")}},sendUniformData:function(t,r){var e=1;t.uniform1i(r.uMode,e)},isNeutralState:function(){return!1}}),i.Image.filters.Grayscale.fromObject=i.Image.filters.BaseFilter.fromObject})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.Image.filters,o=i.util.createClass;a.Invert=o(a.BaseFilter,{type:"Invert",fragmentSource:`precision highp float;
uniform sampler2D uTexture;
uniform int uInvert;
varying vec2 vTexCoord;
void main() {
vec4 color = texture2D(uTexture, vTexCoord);
if (uInvert == 1) {
gl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);
} else {
gl_FragColor = color;
}
}`,invert:!0,mainParameter:"invert",applyTo2d:function(t){var r=t.imageData,e=r.data,s,h=e.length;for(s=0;s<h;s+=4)e[s]=255-e[s],e[s+1]=255-e[s+1],e[s+2]=255-e[s+2]},isNeutralState:function(){return!this.invert},getUniformLocations:function(t,r){return{uInvert:t.getUniformLocation(r,"uInvert")}},sendUniformData:function(t,r){t.uniform1i(r.uInvert,this.invert)}}),i.Image.filters.Invert.fromObject=i.Image.filters.BaseFilter.fromObject})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.util.object.extend,o=i.Image.filters,t=i.util.createClass;o.Noise=t(o.BaseFilter,{type:"Noise",fragmentSource:`precision highp float;
uniform sampler2D uTexture;
uniform float uStepH;
uniform float uNoise;
uniform float uSeed;
varying vec2 vTexCoord;
float rand(vec2 co, float seed, float vScale) {
return fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);
}
void main() {
vec4 color = texture2D(uTexture, vTexCoord);
color.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;
gl_FragColor = color;
}`,mainParameter:"noise",noise:0,applyTo2d:function(r){if(this.noise!==0){var e=r.imageData,s=e.data,h,n=s.length,l=this.noise,f;for(h=0,n=s.length;h<n;h+=4)f=(.5-Math.random())*l,s[h]+=f,s[h+1]+=f,s[h+2]+=f}},getUniformLocations:function(r,e){return{uNoise:r.getUniformLocation(e,"uNoise"),uSeed:r.getUniformLocation(e,"uSeed")}},sendUniformData:function(r,e){r.uniform1f(e.uNoise,this.noise/255),r.uniform1f(e.uSeed,Math.random())},toObject:function(){return a(this.callSuper("toObject"),{noise:this.noise})}}),i.Image.filters.Noise.fromObject=i.Image.filters.BaseFilter.fromObject})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.Image.filters,o=i.util.createClass;a.Pixelate=o(a.BaseFilter,{type:"Pixelate",blocksize:4,mainParameter:"blocksize",fragmentSource:`precision highp float;
uniform sampler2D uTexture;
uniform float uBlocksize;
uniform float uStepW;
uniform float uStepH;
varying vec2 vTexCoord;
void main() {
float blockW = uBlocksize * uStepW;
float blockH = uBlocksize * uStepW;
int posX = int(vTexCoord.x / blockW);
int posY = int(vTexCoord.y / blockH);
float fposX = float(posX);
float fposY = float(posY);
vec2 squareCoords = vec2(fposX * blockW, fposY * blockH);
vec4 color = texture2D(uTexture, squareCoords);
gl_FragColor = color;
}`,applyTo2d:function(t){var r=t.imageData,e=r.data,s=r.height,h=r.width,n,l,f,d,g,m,p,_,w,D,B;for(l=0;l<s;l+=this.blocksize)for(f=0;f<h;f+=this.blocksize)for(n=l*4*h+f*4,d=e[n],g=e[n+1],m=e[n+2],p=e[n+3],D=Math.min(l+this.blocksize,s),B=Math.min(f+this.blocksize,h),_=l;_<D;_++)for(w=f;w<B;w++)n=_*4*h+w*4,e[n]=d,e[n+1]=g,e[n+2]=m,e[n+3]=p},isNeutralState:function(){return this.blocksize===1},getUniformLocations:function(t,r){return{uBlocksize:t.getUniformLocation(r,"uBlocksize"),uStepW:t.getUniformLocation(r,"uStepW"),uStepH:t.getUniformLocation(r,"uStepH")}},sendUniformData:function(t,r){t.uniform1f(r.uBlocksize,this.blocksize)}}),i.Image.filters.Pixelate.fromObject=i.Image.filters.BaseFilter.fromObject})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.util.object.extend,o=i.Image.filters,t=i.util.createClass;o.RemoveColor=t(o.BaseFilter,{type:"RemoveColor",color:"#FFFFFF",fragmentSource:`precision highp float;
uniform sampler2D uTexture;
uniform vec4 uLow;
uniform vec4 uHigh;
varying vec2 vTexCoord;
void main() {
gl_FragColor = texture2D(uTexture, vTexCoord);
if(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {
gl_FragColor.a = 0.0;
}
}`,distance:.02,useAlpha:!1,applyTo2d:function(r){var e=r.imageData,s=e.data,h,n=this.distance*255,l,f,d,g=new i.Color(this.color).getSource(),m=[g[0]-n,g[1]-n,g[2]-n],p=[g[0]+n,g[1]+n,g[2]+n];for(h=0;h<s.length;h+=4)l=s[h],f=s[h+1],d=s[h+2],l>m[0]&&f>m[1]&&d>m[2]&&l<p[0]&&f<p[1]&&d<p[2]&&(s[h+3]=0)},getUniformLocations:function(r,e){return{uLow:r.getUniformLocation(e,"uLow"),uHigh:r.getUniformLocation(e,"uHigh")}},sendUniformData:function(r,e){var s=new i.Color(this.color).getSource(),h=parseFloat(this.distance),n=[0+s[0]/255-h,0+s[1]/255-h,0+s[2]/255-h,1],l=[s[0]/255+h,s[1]/255+h,s[2]/255+h,1];r.uniform4fv(e.uLow,n),r.uniform4fv(e.uHigh,l)},toObject:function(){return a(this.callSuper("toObject"),{color:this.color,distance:this.distance})}}),i.Image.filters.RemoveColor.fromObject=i.Image.filters.BaseFilter.fromObject})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.Image.filters,o=i.util.createClass,t={Brownie:[.5997,.34553,-.27082,0,.186,-.0377,.86095,.15059,0,-.1449,.24113,-.07441,.44972,0,-.02965,0,0,0,1,0],Vintage:[.62793,.32021,-.03965,0,.03784,.02578,.64411,.03259,0,.02926,.0466,-.08512,.52416,0,.02023,0,0,0,1,0],Kodachrome:[1.12855,-.39673,-.03992,0,.24991,-.16404,1.08352,-.05498,0,.09698,-.16786,-.56034,1.60148,0,.13972,0,0,0,1,0],Technicolor:[1.91252,-.85453,-.09155,0,.04624,-.30878,1.76589,-.10601,0,-.27589,-.2311,-.75018,1.84759,0,.12137,0,0,0,1,0],Polaroid:[1.438,-.062,-.062,0,0,-.122,1.378,-.122,0,0,-.016,-.016,1.483,0,0,0,0,0,1,0],Sepia:[.393,.769,.189,0,0,.349,.686,.168,0,0,.272,.534,.131,0,0,0,0,0,1,0],BlackWhite:[1.5,1.5,1.5,0,-1,1.5,1.5,1.5,0,-1,1.5,1.5,1.5,0,-1,0,0,0,1,0]};for(var r in t)a[r]=o(a.ColorMatrix,{type:r,matrix:t[r],mainParameter:!1,colorsOnly:!0}),i.Image.filters[r].fromObject=i.Image.filters.BaseFilter.fromObject})(F);(function(c){"use strict";var i=c.fabric,a=i.Image.filters,o=i.util.createClass;a.BlendColor=o(a.BaseFilter,{type:"BlendColor",color:"#F95C63",mode:"multiply",alpha:1,fragmentSource:{multiply:`gl_FragColor.rgb *= uColor.rgb;
`,screen:`gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb);
`,add:`gl_FragColor.rgb += uColor.rgb;
`,diff:`gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb);
`,subtract:`gl_FragColor.rgb -= uColor.rgb;
`,lighten:`gl_FragColor.rgb = max(gl_FragColor.rgb, uColor.rgb);
`,darken:`gl_FragColor.rgb = min(gl_FragColor.rgb, uColor.rgb);
`,exclusion:`gl_FragColor.rgb += uColor.rgb - 2.0 * (uColor.rgb * gl_FragColor.rgb);
`,overlay:`if (uColor.r < 0.5) {
gl_FragColor.r *= 2.0 * uColor.r;
} else {
gl_FragColor.r = 1.0 - 2.0 * (1.0 - gl_FragColor.r) * (1.0 - uColor.r);
}
if (uColor.g < 0.5) {
gl_FragColor.g *= 2.0 * uColor.g;
} else {
gl_FragColor.g = 1.0 - 2.0 * (1.0 - gl_FragColor.g) * (1.0 - uColor.g);
}
if (uColor.b < 0.5) {
gl_FragColor.b *= 2.0 * uColor.b;
} else {
gl_FragColor.b = 1.0 - 2.0 * (1.0 - gl_FragColor.b) * (1.0 - uColor.b);
}
`,tint:`gl_FragColor.rgb *= (1.0 - uColor.a);
gl_FragColor.rgb += uColor.rgb;
`},buildSource:function(t){return`precision highp float;
uniform sampler2D uTexture;
uniform vec4 uColor;
varying vec2 vTexCoord;
void main() {
vec4 color = texture2D(uTexture, vTexCoord);
gl_FragColor = color;
if (color.a > 0.0) {
`+this.fragmentSource[t]+`}
}`},retrieveShader:function(t){var r=this.type+"_"+this.mode,e;return t.programCache.hasOwnProperty(r)||(e=this.buildSource(this.mode),t.programCache[r]=this.createProgram(t.context,e)),t.programCache[r]},applyTo2d:function(t){var r=t.imageData,e=r.data,s=e.length,h,n,l,f,d,g,m,p=1-this.alpha;m=new i.Color(this.color).getSource(),h=m[0]*this.alpha,n=m[1]*this.alpha,l=m[2]*this.alpha;for(var _=0;_<s;_+=4)switch(f=e[_],d=e[_+1],g=e[_+2],this.mode){case"multiply":e[_]=f*h/255,e[_+1]=d*n/255,e[_+2]=g*l/255;break;case"screen":e[_]=255-(255-f)*(255-h)/255,e[_+1]=255-(255-d)*(255-n)/255,e[_+2]=255-(255-g)*(255-l)/255;break;case"add":e[_]=f+h,e[_+1]=d+n,e[_+2]=g+l;break;case"diff":case"difference":e[_]=Math.abs(f-h),e[_+1]=Math.abs(d-n),e[_+2]=Math.abs(g-l);break;case"subtract":e[_]=f-h,e[_+1]=d-n,e[_+2]=g-l;break;case"darken":e[_]=Math.min(f,h),e[_+1]=Math.min(d,n),e[_+2]=Math.min(g,l);break;case"lighten":e[_]=Math.max(f,h),e[_+1]=Math.max(d,n),e[_+2]=Math.max(g,l);break;case"overlay":e[_]=h<128?2*f*h/255:255-2*(255-f)*(255-h)/255,e[_+1]=n<128?2*d*n/255:255-2*(255-d)*(255-n)/255,e[_+2]=l<128?2*g*l/255:255-2*(255-g)*(255-l)/255;break;case"exclusion":e[_]=h+f-2*h*f/255,e[_+1]=n+d-2*n*d/255,e[_+2]=l+g-2*l*g/255;break;case"tint":e[_]=h+f*p,e[_+1]=n+d*p,e[_+2]=l+g*p}},getUniformLocations:function(t,r){return{uColor:t.getUniformLocation(r,"uColor")}},sendUniformData:function(t,r){var e=new i.Color(this.color).getSource();e[0]=this.alpha*e[0]/255,e[1]=this.alpha*e[1]/255,e[2]=this.alpha*e[2]/255,e[3]=this.alpha,t.uniform4fv(r.uColor,e)},toObject:function(){return{type:this.type,color:this.color,mode:this.mode,alpha:this.alpha}}}),i.Image.filters.BlendColor.fromObject=i.Image.filters.BaseFilter.fromObject})(F);(function(c){"use strict";var i=c.fabric,a=i.Image.filters,o=i.util.createClass;a.BlendImage=o(a.BaseFilter,{type:"BlendImage",image:null,mode:"multiply",alpha:1,vertexSource:`attribute vec2 aPosition;
varying vec2 vTexCoord;
varying vec2 vTexCoord2;
uniform mat3 uTransformMatrix;
void main() {
vTexCoord = aPosition;
vTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;
gl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);
}`,fragmentSource:{multiply:`precision highp float;
uniform sampler2D uTexture;
uniform sampler2D uImage;
uniform vec4 uColor;
varying vec2 vTexCoord;
varying vec2 vTexCoord2;
void main() {
vec4 color = texture2D(uTexture, vTexCoord);
vec4 color2 = texture2D(uImage, vTexCoord2);
color.rgba *= color2.rgba;
gl_FragColor = color;
}`,mask:`precision highp float;
uniform sampler2D uTexture;
uniform sampler2D uImage;
uniform vec4 uColor;
varying vec2 vTexCoord;
varying vec2 vTexCoord2;
void main() {
vec4 color = texture2D(uTexture, vTexCoord);
vec4 color2 = texture2D(uImage, vTexCoord2);
color.a = color2.a;
gl_FragColor = color;
}`},retrieveShader:function(t){var r=this.type+"_"+this.mode,e=this.fragmentSource[this.mode];return t.programCache.hasOwnProperty(r)||(t.programCache[r]=this.createProgram(t.context,e)),t.programCache[r]},applyToWebGL:function(t){var r=t.context,e=this.createTexture(t.filterBackend,this.image);this.bindAdditionalTexture(r,e,r.TEXTURE1),this.callSuper("applyToWebGL",t),this.unbindAdditionalTexture(r,r.TEXTURE1)},createTexture:function(t,r){return t.getCachedTexture(r.cacheKey,r._element)},calculateMatrix:function(){var t=this.image,r=t._element.width,e=t._element.height;return[1/t.scaleX,0,0,0,1/t.scaleY,0,-t.left/r,-t.top/e,1]},applyTo2d:function(t){var r=t.imageData,e=t.filterBackend.resources,s=r.data,h=s.length,n=r.width,l=r.height,f,d,g,m,p,_,w,D,B,N,G=this.image,z;e.blendImage||(e.blendImage=i.util.createCanvasElement()),B=e.blendImage,N=B.getContext("2d"),B.width!==n||B.height!==l?(B.width=n,B.height=l):N.clearRect(0,0,n,l),N.setTransform(G.scaleX,0,0,G.scaleY,G.left,G.top),N.drawImage(G._element,0,0,n,l),z=N.getImageData(0,0,n,l).data;for(var H=0;H<h;H+=4)switch(p=s[H],_=s[H+1],w=s[H+2],D=s[H+3],f=z[H],d=z[H+1],g=z[H+2],m=z[H+3],this.mode){case"multiply":s[H]=p*f/255,s[H+1]=_*d/255,s[H+2]=w*g/255,s[H+3]=D*m/255;break;case"mask":s[H+3]=m;break}},getUniformLocations:function(t,r){return{uTransformMatrix:t.getUniformLocation(r,"uTransformMatrix"),uImage:t.getUniformLocation(r,"uImage")}},sendUniformData:function(t,r){var e=this.calculateMatrix();t.uniform1i(r.uImage,1),t.uniformMatrix3fv(r.uTransformMatrix,!1,e)},toObject:function(){return{type:this.type,image:this.image&&this.image.toObject(),mode:this.mode,alpha:this.alpha}}}),i.Image.filters.BlendImage.fromObject=function(t,r){i.Image.fromObject(t.image,function(e){var s=i.util.object.clone(t);s.image=e,r(new i.Image.filters.BlendImage(s))})}})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=Math.pow,o=Math.floor,t=Math.sqrt,r=Math.abs,e=Math.round,s=Math.sin,h=Math.ceil,n=i.Image.filters,l=i.util.createClass;n.Resize=l(n.BaseFilter,{type:"Resize",resizeType:"hermite",scaleX:1,scaleY:1,lanczosLobes:3,getUniformLocations:function(f,d){return{uDelta:f.getUniformLocation(d,"uDelta"),uTaps:f.getUniformLocation(d,"uTaps")}},sendUniformData:function(f,d){f.uniform2fv(d.uDelta,this.horizontal?[1/this.width,0]:[0,1/this.height]),f.uniform1fv(d.uTaps,this.taps)},retrieveShader:function(f){var d=this.getFilterWindow(),g=this.type+"_"+d;if(!f.programCache.hasOwnProperty(g)){var m=this.generateShader(d);f.programCache[g]=this.createProgram(f.context,m)}return f.programCache[g]},getFilterWindow:function(){var f=this.tempScale;return Math.ceil(this.lanczosLobes/f)},getTaps:function(){for(var f=this.lanczosCreate(this.lanczosLobes),d=this.tempScale,g=this.getFilterWindow(),m=new Array(g),p=1;p<=g;p++)m[p-1]=f(p*d);return m},generateShader:function(m){for(var d=new Array(m),g=this.fragmentSourceTOP,m,p=1;p<=m;p++)d[p-1]=p+".0 * uDelta";return g+="uniform float uTaps["+m+`];
`,g+=`void main() {
`,g+=` vec4 color = texture2D(uTexture, vTexCoord);
`,g+=` float sum = 1.0;
`,d.forEach(function(_,w){g+=" color += texture2D(uTexture, vTexCoord + "+_+") * uTaps["+w+`];
`,g+=" color += texture2D(uTexture, vTexCoord - "+_+") * uTaps["+w+`];
`,g+=" sum += 2.0 * uTaps["+w+`];
`}),g+=` gl_FragColor = color / sum;
`,g+="}",g},fragmentSourceTOP:`precision highp float;
uniform sampler2D uTexture;
uniform vec2 uDelta;
varying vec2 vTexCoord;
`,applyTo:function(f){f.webgl?(f.passes++,this.width=f.sourceWidth,this.horizontal=!0,this.dW=Math.round(this.width*this.scaleX),this.dH=f.sourceHeight,this.tempScale=this.dW/this.width,this.taps=this.getTaps(),f.destinationWidth=this.dW,this._setupFrameBuffer(f),this.applyToWebGL(f),this._swapTextures(f),f.sourceWidth=f.destinationWidth,this.height=f.sourceHeight,this.horizontal=!1,this.dH=Math.round(this.height*this.scaleY),this.tempScale=this.dH/this.height,this.taps=this.getTaps(),f.destinationHeight=this.dH,this._setupFrameBuffer(f),this.applyToWebGL(f),this._swapTextures(f),f.sourceHeight=f.destinationHeight):this.applyTo2d(f)},isNeutralState:function(){return this.scaleX===1&&this.scaleY===1},lanczosCreate:function(f){return function(d){if(d>=f||d<=-f)return 0;if(d<11920929e-14&&d>-11920929e-14)return 1;d*=Math.PI;var g=d/f;return s(d)/d*s(g)/g}},applyTo2d:function(f){var d=f.imageData,g=this.scaleX,m=this.scaleY;this.rcpScaleX=1/g,this.rcpScaleY=1/m;var p=d.width,_=d.height,w=e(p*g),D=e(_*m),B;this.resizeType==="sliceHack"?B=this.sliceByTwo(f,p,_,w,D):this.resizeType==="hermite"?B=this.hermiteFastResize(f,p,_,w,D):this.resizeType==="bilinear"?B=this.bilinearFiltering(f,p,_,w,D):this.resizeType==="lanczos"&&(B=this.lanczosResize(f,p,_,w,D)),f.imageData=B},sliceByTwo:function(f,d,g,m,p){var _=f.imageData,w=.5,D=!1,B=!1,N=d*w,G=g*w,z=i.filterBackend.resources,H,U,K=0,Q=0,J=d,v=0;for(z.sliceByTwo||(z.sliceByTwo=document.createElement("canvas")),H=z.sliceByTwo,(H.width<d*1.5||H.height<g)&&(H.width=d*1.5,H.height=g),U=H.getContext("2d"),U.clearRect(0,0,d*1.5,g),U.putImageData(_,0,0),m=o(m),p=o(p);!D||!B;)d=N,g=G,m<o(N*w)?N=o(N*w):(N=m,D=!0),p<o(G*w)?G=o(G*w):(G=p,B=!0),U.drawImage(H,K,Q,d,g,J,v,N,G),K=J,Q=v,v+=G;return U.getImageData(K,Q,m,p)},lanczosResize:function(f,d,g,m,p){function _(S){var C,P,x,y,T,E,L,k,W,Y,V;for(v.x=(S+.5)*G,b.x=o(v.x),C=0;C<p;C++){for(v.y=(C+.5)*z,b.y=o(v.y),T=0,E=0,L=0,k=0,W=0,P=b.x-K;P<=b.x+K;P++)if(!(P<0||P>=d)){Y=o(1e3*r(P-v.x)),J[Y]||(J[Y]={});for(var M=b.y-Q;M<=b.y+Q;M++)M<0||M>=g||(V=o(1e3*r(M-v.y)),J[Y][V]||(J[Y][V]=N(t(a(Y*H,2)+a(V*U,2))/1e3)),x=J[Y][V],x>0&&(y=(M*d+P)*4,T+=x,E+=x*w[y],L+=x*w[y+1],k+=x*w[y+2],W+=x*w[y+3]))}y=(C*m+S)*4,B[y]=E/T,B[y+1]=L/T,B[y+2]=k/T,B[y+3]=W/T}return++S<m?_(S):D}var w=f.imageData.data,D=f.ctx.createImageData(m,p),B=D.data,N=this.lanczosCreate(this.lanczosLobes),G=this.rcpScaleX,z=this.rcpScaleY,H=2/this.rcpScaleX,U=2/this.rcpScaleY,K=h(G*this.lanczosLobes/2),Q=h(z*this.lanczosLobes/2),J={},v={},b={};return _(0)},bilinearFiltering:function(f,d,g,m,p){var _,w,D,B,N,G,z,H,U,K,Q,J,v=0,b,S=this.rcpScaleX,C=this.rcpScaleY,P=4*(d-1),x=f.imageData,y=x.data,T=f.ctx.createImageData(m,p),E=T.data;for(z=0;z<p;z++)for(H=0;H<m;H++)for(N=o(S*H),G=o(C*z),U=S*H-N,K=C*z-G,b=4*(G*d+N),Q=0;Q<4;Q++)_=y[b+Q],w=y[b+4+Q],D=y[b+P+Q],B=y[b+P+4+Q],J=_*(1-U)*(1-K)+w*U*(1-K)+D*K*(1-U)+B*U*K,E[v++]=J;return T},hermiteFastResize:function(f,d,g,m,p){for(var _=this.rcpScaleX,w=this.rcpScaleY,D=h(_/2),B=h(w/2),N=f.imageData,G=N.data,z=f.ctx.createImageData(m,p),H=z.data,U=0;U<p;U++)for(var K=0;K<m;K++){for(var Q=(K+U*m)*4,J=0,v=0,b=0,S=0,C=0,P=0,x=0,y=(U+.5)*w,T=o(U*w);T<(U+1)*w;T++)for(var E=r(y-(T+.5))/B,L=(K+.5)*_,k=E*E,W=o(K*_);W<(K+1)*_;W++){var Y=r(L-(W+.5))/D,V=t(k+Y*Y);V>1&&V<-1||(J=2*V*V*V-3*V*V+1,J>0&&(Y=4*(W+T*d),x+=J*G[Y+3],b+=J,G[Y+3]<255&&(J=J*G[Y+3]/250),S+=J*G[Y],C+=J*G[Y+1],P+=J*G[Y+2],v+=J))}H[Q]=S/v,H[Q+1]=C/v,H[Q+2]=P/v,H[Q+3]=x/b}return z},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),i.Image.filters.Resize.fromObject=i.Image.filters.BaseFilter.fromObject})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.Image.filters,o=i.util.createClass;a.Contrast=o(a.BaseFilter,{type:"Contrast",fragmentSource:`precision highp float;
uniform sampler2D uTexture;
uniform float uContrast;
varying vec2 vTexCoord;
void main() {
vec4 color = texture2D(uTexture, vTexCoord);
float contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));
color.rgb = contrastF * (color.rgb - 0.5) + 0.5;
gl_FragColor = color;
}`,contrast:0,mainParameter:"contrast",applyTo2d:function(t){if(this.contrast!==0){var r=t.imageData,e,h,s=r.data,h=s.length,n=Math.floor(this.contrast*255),l=259*(n+255)/(255*(259-n));for(e=0;e<h;e+=4)s[e]=l*(s[e]-128)+128,s[e+1]=l*(s[e+1]-128)+128,s[e+2]=l*(s[e+2]-128)+128}},getUniformLocations:function(t,r){return{uContrast:t.getUniformLocation(r,"uContrast")}},sendUniformData:function(t,r){t.uniform1f(r.uContrast,this.contrast)}}),i.Image.filters.Contrast.fromObject=i.Image.filters.BaseFilter.fromObject})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.Image.filters,o=i.util.createClass;a.Saturation=o(a.BaseFilter,{type:"Saturation",fragmentSource:`precision highp float;
uniform sampler2D uTexture;
uniform float uSaturation;
varying vec2 vTexCoord;
void main() {
vec4 color = texture2D(uTexture, vTexCoord);
float rgMax = max(color.r, color.g);
float rgbMax = max(rgMax, color.b);
color.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;
color.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;
color.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;
gl_FragColor = color;
}`,saturation:0,mainParameter:"saturation",applyTo2d:function(t){if(this.saturation!==0){var r=t.imageData,e=r.data,s=e.length,h=-this.saturation,n,l;for(n=0;n<s;n+=4)l=Math.max(e[n],e[n+1],e[n+2]),e[n]+=l!==e[n]?(l-e[n])*h:0,e[n+1]+=l!==e[n+1]?(l-e[n+1])*h:0,e[n+2]+=l!==e[n+2]?(l-e[n+2])*h:0}},getUniformLocations:function(t,r){return{uSaturation:t.getUniformLocation(r,"uSaturation")}},sendUniformData:function(t,r){t.uniform1f(r.uSaturation,-this.saturation)}}),i.Image.filters.Saturation.fromObject=i.Image.filters.BaseFilter.fromObject})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.Image.filters,o=i.util.createClass;a.Vibrance=o(a.BaseFilter,{type:"Vibrance",fragmentSource:`precision highp float;
uniform sampler2D uTexture;
uniform float uVibrance;
varying vec2 vTexCoord;
void main() {
vec4 color = texture2D(uTexture, vTexCoord);
float max = max(color.r, max(color.g, color.b));
float avg = (color.r + color.g + color.b) / 3.0;
float amt = (abs(max - avg) * 2.0) * uVibrance;
color.r += max != color.r ? (max - color.r) * amt : 0.00;
color.g += max != color.g ? (max - color.g) * amt : 0.00;
color.b += max != color.b ? (max - color.b) * amt : 0.00;
gl_FragColor = color;
}`,vibrance:0,mainParameter:"vibrance",applyTo2d:function(t){if(this.vibrance!==0){var r=t.imageData,e=r.data,s=e.length,h=-this.vibrance,n,l,f,d;for(n=0;n<s;n+=4)l=Math.max(e[n],e[n+1],e[n+2]),f=(e[n]+e[n+1]+e[n+2])/3,d=Math.abs(l-f)*2/255*h,e[n]+=l!==e[n]?(l-e[n])*d:0,e[n+1]+=l!==e[n+1]?(l-e[n+1])*d:0,e[n+2]+=l!==e[n+2]?(l-e[n+2])*d:0}},getUniformLocations:function(t,r){return{uVibrance:t.getUniformLocation(r,"uVibrance")}},sendUniformData:function(t,r){t.uniform1f(r.uVibrance,-this.vibrance)}}),i.Image.filters.Vibrance.fromObject=i.Image.filters.BaseFilter.fromObject})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.Image.filters,o=i.util.createClass;a.Blur=o(a.BaseFilter,{type:"Blur",fragmentSource:`precision highp float;
uniform sampler2D uTexture;
uniform vec2 uDelta;
varying vec2 vTexCoord;
const float nSamples = 15.0;
vec3 v3offset = vec3(12.9898, 78.233, 151.7182);
float random(vec3 scale) {
return fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);
}
void main() {
vec4 color = vec4(0.0);
float total = 0.0;
float offset = random(v3offset);
for (float t = -nSamples; t <= nSamples; t++) {
float percent = (t + offset - 0.5) / nSamples;
float weight = 1.0 - abs(percent);
color += texture2D(uTexture, vTexCoord + uDelta * percent) * weight;
total += weight;
}
gl_FragColor = color / total;
}`,blur:0,mainParameter:"blur",applyTo:function(t){t.webgl?(this.aspectRatio=t.sourceWidth/t.sourceHeight,t.passes++,this._setupFrameBuffer(t),this.horizontal=!0,this.applyToWebGL(t),this._swapTextures(t),this._setupFrameBuffer(t),this.horizontal=!1,this.applyToWebGL(t),this._swapTextures(t)):this.applyTo2d(t)},applyTo2d:function(t){t.imageData=this.simpleBlur(t)},simpleBlur:function(t){var r=t.filterBackend.resources,e,s,h=t.imageData.width,n=t.imageData.height;r.blurLayer1||(r.blurLayer1=i.util.createCanvasElement(),r.blurLayer2=i.util.createCanvasElement()),e=r.blurLayer1,s=r.blurLayer2,(e.width!==h||e.height!==n)&&(s.width=e.width=h,s.height=e.height=n);var l=e.getContext("2d"),f=s.getContext("2d"),d=15,g,m,p,_,w=this.blur*.06*.5;for(l.putImageData(t.imageData,0,0),f.clearRect(0,0,h,n),_=-d;_<=d;_++)g=(Math.random()-.5)/4,m=_/d,p=w*m*h+g,f.globalAlpha=1-Math.abs(m),f.drawImage(e,p,g),l.drawImage(s,0,0),f.globalAlpha=1,f.clearRect(0,0,s.width,s.height);for(_=-d;_<=d;_++)g=(Math.random()-.5)/4,m=_/d,p=w*m*n+g,f.globalAlpha=1-Math.abs(m),f.drawImage(e,g,p),l.drawImage(s,0,0),f.globalAlpha=1,f.clearRect(0,0,s.width,s.height);t.ctx.drawImage(e,0,0);var D=t.ctx.getImageData(0,0,e.width,e.height);return l.globalAlpha=1,l.clearRect(0,0,e.width,e.height),D},getUniformLocations:function(t,r){return{delta:t.getUniformLocation(r,"uDelta")}},sendUniformData:function(t,r){var e=this.chooseRightDelta();t.uniform2fv(r.delta,e)},chooseRightDelta:function(){var t=1,r=[0,0],e;return this.horizontal?this.aspectRatio>1&&(t=1/this.aspectRatio):this.aspectRatio<1&&(t=this.aspectRatio),e=t*this.blur*.12,this.horizontal?r[0]=e:r[1]=e,r}}),a.Blur.fromObject=i.Image.filters.BaseFilter.fromObject})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.Image.filters,o=i.util.createClass;a.Gamma=o(a.BaseFilter,{type:"Gamma",fragmentSource:`precision highp float;
uniform sampler2D uTexture;
uniform vec3 uGamma;
varying vec2 vTexCoord;
void main() {
vec4 color = texture2D(uTexture, vTexCoord);
vec3 correction = (1.0 / uGamma);
color.r = pow(color.r, correction.r);
color.g = pow(color.g, correction.g);
color.b = pow(color.b, correction.b);
gl_FragColor = color;
gl_FragColor.rgb *= color.a;
}`,gamma:[1,1,1],mainParameter:"gamma",initialize:function(t){this.gamma=[1,1,1],a.BaseFilter.prototype.initialize.call(this,t)},applyTo2d:function(t){var r=t.imageData,e=r.data,s=this.gamma,h=e.length,n=1/s[0],l=1/s[1],f=1/s[2],d;for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),d=0,h=256;d<h;d++)this.rVals[d]=Math.pow(d/255,n)*255,this.gVals[d]=Math.pow(d/255,l)*255,this.bVals[d]=Math.pow(d/255,f)*255;for(d=0,h=e.length;d<h;d+=4)e[d]=this.rVals[e[d]],e[d+1]=this.gVals[e[d+1]],e[d+2]=this.bVals[e[d+2]]},getUniformLocations:function(t,r){return{uGamma:t.getUniformLocation(r,"uGamma")}},sendUniformData:function(t,r){t.uniform3fv(r.uGamma,this.gamma)}}),i.Image.filters.Gamma.fromObject=i.Image.filters.BaseFilter.fromObject})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.Image.filters,o=i.util.createClass;a.Composed=o(a.BaseFilter,{type:"Composed",subFilters:[],initialize:function(t){this.callSuper("initialize",t),this.subFilters=this.subFilters.slice(0)},applyTo:function(t){t.passes+=this.subFilters.length-1,this.subFilters.forEach(function(r){r.applyTo(t)})},toObject:function(){return i.util.object.extend(this.callSuper("toObject"),{subFilters:this.subFilters.map(function(t){return t.toObject()})})},isNeutralState:function(){return!this.subFilters.some(function(t){return!t.isNeutralState()})}}),i.Image.filters.Composed.fromObject=function(t,r){var e=t.subFilters||[],s=e.map(function(n){return new i.Image.filters[n.type](n)}),h=new i.Image.filters.Composed({subFilters:s});return r&&r(h),h}})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.Image.filters,o=i.util.createClass;a.HueRotation=o(a.ColorMatrix,{type:"HueRotation",rotation:0,mainParameter:"rotation",calculateMatrix:function(){var t=this.rotation*Math.PI,r=i.util.cos(t),e=i.util.sin(t),s=1/3,h=Math.sqrt(s)*e,n=1-r;this.matrix=[1,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,0,1,0],this.matrix[0]=r+n/3,this.matrix[1]=s*n-h,this.matrix[2]=s*n+h,this.matrix[5]=s*n+h,this.matrix[6]=r+s*n,this.matrix[7]=s*n-h,this.matrix[10]=s*n-h,this.matrix[11]=s*n+h,this.matrix[12]=r+s*n},isNeutralState:function(t){return this.calculateMatrix(),a.BaseFilter.prototype.isNeutralState.call(this,t)},applyTo:function(t){this.calculateMatrix(),a.BaseFilter.prototype.applyTo.call(this,t)}}),i.Image.filters.HueRotation.fromObject=i.Image.filters.BaseFilter.fromObject})(F);(function(c){"use strict";var i=c.fabric||(c.fabric={}),a=i.util.object.clone;if(i.Text){i.warn("fabric.Text is already defined");return}var o="fontFamily fontWeight fontSize text underline overline linethrough textAlign fontStyle lineHeight textBackgroundColor charSpacing styles direction path pathStartOffset pathSide pathAlign".split(" ");i.Text=i.util.createClass(i.Object,{_dimensionAffectingProps:["fontSize","fontWeight","fontFamily","fontStyle","lineHeight","text","charSpacing","textAlign","styles","path","pathStartOffset","pathSide","pathAlign"],_reNewline:/\r?\n/,_reSpacesAndTabs:/[ \t\r]/g,_reSpaceAndTab:/[ \t\r]/,_reWords:/\S+/g,type:"text",fontSize:40,fontWeight:"normal",fontFamily:"Times New Roman",underline:!1,overline:!1,linethrough:!1,textAlign:"left",fontStyle:"normal",lineHeight:1.16,superscript:{size:.6,baseline:-.35},subscript:{size:.6,baseline:.11},textBackgroundColor:"",stateProperties:i.Object.prototype.stateProperties.concat(o),cacheProperties:i.Object.prototype.cacheProperties.concat(o),stroke:null,shadow:null,path:null,pathStartOffset:0,pathSide:"left",pathAlign:"baseline",_fontSizeFraction:.222,offsets:{underline:.1,linethrough:-.315,overline:-.88},_fontSizeMult:1.13,charSpacing:0,styles:null,_measuringContext:null,deltaY:0,direction:"ltr",_styleProperties:["stroke","strokeWidth","fill","fontFamily","fontSize","fontWeight","fontStyle","underline","overline","linethrough","deltaY","textBackgroundColor"],__charBounds:[],CACHE_FONT_SIZE:400,MIN_TEXT_WIDTH:2,initialize:function(t,r){this.styles=r?r.styles||{}:{},this.text=t,this.__skipDimension=!0,this.callSuper("initialize",r),this.path&&this.setPathInfo(),this.__skipDimension=!1,this.initDimensions(),this.setCoords(),this.setupState({propertySet:"_dimensionAffectingProps"})},setPathInfo:function(){var t=this.path;t&&(t.segmentsInfo=i.util.getPathSegmentsInfo(t.path))},getMeasuringContext:function(){return i._measuringContext||(i._measuringContext=this.canvas&&this.canvas.contextCache||i.util.createCanvasElement().getContext("2d")),i._measuringContext},_splitText:function(){var t=this._splitTextIntoLines(this.text);return this.textLines=t.lines,this._textLines=t.graphemeLines,this._unwrappedTextLines=t._unwrappedLines,this._text=t.graphemeText,t},initDimensions:function(){this.__skipDimension||(this._splitText(),this._clearCache(),this.path?(this.width=this.path.width,this.height=this.path.height):(this.width=this.calcTextWidth()||this.cursorWidth||this.MIN_TEXT_WIDTH,this.height=this.calcTextHeight()),this.textAlign.indexOf("justify")!==-1&&this.enlargeSpaces(),this.saveState({propertySet:"_dimensionAffectingProps"}))},enlargeSpaces:function(){for(var t,r,e,s,h,n,l,f=0,d=this._textLines.length;f<d;f++)if(!(this.textAlign!=="justify"&&(f===d-1||this.isEndOfWrapping(f)))&&(s=0,h=this._textLines[f],r=this.getLineWidth(f),r<this.width&&(l=this.textLines[f].match(this._reSpacesAndTabs)))){e=l.length,t=(this.width-r)/e;for(var g=0,m=h.length;g<=m;g++)n=this.__charBounds[f][g],this._reSpaceAndTab.test(h[g])?(n.width+=t,n.kernedWidth+=t,n.left+=s,s+=t):n.left+=s}},isEndOfWrapping:function(t){return t===this._textLines.length-1},missingNewlineOffset:function(){return 1},toString:function(){return"#<fabric.Text ("+this.complexity()+'): { "text": "'+this.text+'", "fontFamily": "'+this.fontFamily+'" }>'},_getCacheCanvasDimensions:function(){var t=this.callSuper("_getCacheCanvasDimensions"),r=this.fontSize;return t.width+=r*t.zoomX,t.height+=r*t.zoomY,t},_render:function(t){var r=this.path;r&&!r.isNotVisible()&&r._render(t),this._setTextStyles(t),this._renderTextLinesBackground(t),this._renderTextDecoration(t,"underline"),this._renderText(t),this._renderTextDecoration(t,"overline"),this._renderTextDecoration(t,"linethrough")},_renderText:function(t){this.paintFirst==="stroke"?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t))},_setTextStyles:function(t,r,e){if(t.textBaseline="alphabetical",this.path)switch(this.pathAlign){case"center":t.textBaseline="middle";break;case"ascender":t.textBaseline="top";break;case"descender":t.textBaseline="bottom";break}t.font=this._getFontDeclaration(r,e)},calcTextWidth:function(){for(var t=this.getLineWidth(0),r=1,e=this._textLines.length;r<e;r++){var s=this.getLineWidth(r);s>t&&(t=s)}return t},_renderTextLine:function(t,r,e,s,h,n){this._renderChars(t,r,e,s,h,n)},_renderTextLinesBackground:function(t){if(!(!this.textBackgroundColor&&!this.styleHas("textBackgroundColor"))){for(var r,e,s=t.fillStyle,h,n,l=this._getLeftOffset(),f=this._getTopOffset(),d=0,g=0,m,p,_=this.path,w,D=0,B=this._textLines.length;D<B;D++){if(r=this.getHeightOfLine(D),!this.textBackgroundColor&&!this.styleHas("textBackgroundColor",D)){f+=r;continue}h=this._textLines[D],e=this._getLineLeftOffset(D),g=0,d=0,n=this.getValueOfPropertyAt(D,0,"textBackgroundColor");for(var N=0,G=h.length;N<G;N++)m=this.__charBounds[D][N],p=this.getValueOfPropertyAt(D,N,"textBackgroundColor"),_?(t.save(),t.translate(m.renderLeft,m.renderTop),t.rotate(m.angle),t.fillStyle=p,p&&t.fillRect(-m.width/2,-r/this.lineHeight*(1-this._fontSizeFraction),m.width,r/this.lineHeight),t.restore()):p!==n?(w=l+e+d,this.direction==="rtl"&&(w=this.width-w-g),t.fillStyle=n,n&&t.fillRect(w,f,g,r/this.lineHeight),d=m.left,g=m.width,n=p):g+=m.kernedWidth;p&&!_&&(w=l+e+d,this.direction==="rtl"&&(w=this.width-w-g),t.fillStyle=p,t.fillRect(w,f,g,r/this.lineHeight)),f+=r}t.fillStyle=s,this._removeShadow(t)}},getFontCache:function(t){var r=t.fontFamily.toLowerCase();i.charWidthsCache[r]||(i.charWidthsCache[r]={});var e=i.charWidthsCache[r],s=t.fontStyle.toLowerCase()+"_"+(t.fontWeight+"").toLowerCase();return e[s]||(e[s]={}),e[s]},_measureChar:function(t,r,e,s){var h=this.getFontCache(r),n=this._getFontDeclaration(r),l=this._getFontDeclaration(s),f=e+t,d=n===l,g,m,p,_=r.fontSize/this.CACHE_FONT_SIZE,w;if(e&&h[e]!==void 0&&(p=h[e]),h[t]!==void 0&&(w=g=h[t]),d&&h[f]!==void 0&&(m=h[f],w=m-p),g===void 0||p===void 0||m===void 0){var D=this.getMeasuringContext();this._setTextStyles(D,r,!0)}return g===void 0&&(w=g=D.measureText(t).width,h[t]=g),p===void 0&&d&&e&&(p=D.measureText(e).width,h[e]=p),d&&m===void 0&&(m=D.measureText(f).width,h[f]=m,w=m-p),{width:g*_,kernedWidth:w*_}},getHeightOfChar:function(t,r){return this.getValueOfPropertyAt(t,r,"fontSize")},measureLine:function(t){var r=this._measureLine(t);return this.charSpacing!==0&&(r.width-=this._getWidthOfCharSpacing()),r.width<0&&(r.width=0),r},_measureLine:function(t){var r=0,e,s,h=this._textLines[t],n,l,f=0,d=new Array(h.length),g=0,m,p,_=this.path,w=this.pathSide==="right";for(this.__charBounds[t]=d,e=0;e<h.length;e++)s=h[e],l=this._getGraphemeBox(s,t,e,n),d[e]=l,r+=l.kernedWidth,n=s;if(d[e]={left:l?l.left+l.width:0,width:0,kernedWidth:0,height:this.fontSize},_){switch(p=_.segmentsInfo[_.segmentsInfo.length-1].length,m=i.util.getPointOnPath(_.path,0,_.segmentsInfo),m.x+=_.pathOffset.x,m.y+=_.pathOffset.y,this.textAlign){case"left":g=w?p-r:0;break;case"center":g=(p-r)/2;break;case"right":g=w?0:p-r;break}for(g+=this.pathStartOffset*(w?-1:1),e=w?h.length-1:0;w?e>=0:e<h.length;w?e--:e++)l=d[e],g>p?g%=p:g<0&&(g+=p),this._setGraphemeOnPath(g,l,m),g+=l.kernedWidth}return{width:r,numOfSpaces:f}},_setGraphemeOnPath:function(t,r,e){var s=t+r.kernedWidth/2,h=this.path,n=i.util.getPointOnPath(h.path,s,h.segmentsInfo);r.renderLeft=n.x-e.x,r.renderTop=n.y-e.y,r.angle=n.angle+(this.pathSide==="right"?Math.PI:0)},_getGraphemeBox:function(t,r,e,s,h){var n=this.getCompleteStyleDeclaration(r,e),l=s?this.getCompleteStyleDeclaration(r,e-1):{},f=this._measureChar(t,n,s,l),d=f.kernedWidth,g=f.width,m;this.charSpacing!==0&&(m=this._getWidthOfCharSpacing(),g+=m,d+=m);var p={width:g,left:0,height:n.fontSize,kernedWidth:d,deltaY:n.deltaY};if(e>0&&!h){var _=this.__charBounds[r][e-1];p.left=_.left+_.width+f.kernedWidth-f.width}return p},getHeightOfLine:function(t){if(this.__lineHeights[t])return this.__lineHeights[t];for(var r=this._textLines[t],e=this.getHeightOfChar(t,0),s=1,h=r.length;s<h;s++)e=Math.max(this.getHeightOfChar(t,s),e);return this.__lineHeights[t]=e*this.lineHeight*this._fontSizeMult},calcTextHeight:function(){for(var t,r=0,e=0,s=this._textLines.length;e<s;e++)t=this.getHeightOfLine(e),r+=e===s-1?t/this.lineHeight:t;return r},_getLeftOffset:function(){return this.direction==="ltr"?-this.width/2:this.width/2},_getTopOffset:function(){return-this.height/2},_renderTextCommon:function(t,r){t.save();for(var e=0,s=this._getLeftOffset(),h=this._getTopOffset(),n=0,l=this._textLines.length;n<l;n++){var f=this.getHeightOfLine(n),d=f/this.lineHeight,g=this._getLineLeftOffset(n);this._renderTextLine(r,t,this._textLines[n],s+g,h+e+d,n),e+=f}t.restore()},_renderTextFill:function(t){!this.fill&&!this.styleHas("fill")||this._renderTextCommon(t,"fillText")},_renderTextStroke:function(t){(!this.stroke||this.strokeWidth===0)&&this.isEmptyStyles()||(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this._setLineDash(t,this.strokeDashArray),t.beginPath(),this._renderTextCommon(t,"strokeText"),t.closePath(),t.restore())},_renderChars:function(t,r,e,s,h,n){var l=this.getHeightOfLine(n),f=this.textAlign.indexOf("justify")!==-1,d,g,m="",p,_=0,w,D=this.path,B=!f&&this.charSpacing===0&&this.isEmptyStyles(n)&&!D,N=this.direction==="ltr",G=this.direction==="ltr"?1:-1,z,H=r.canvas.getAttribute("dir");if(r.save(),H!==this.direction&&(r.canvas.setAttribute("dir",N?"ltr":"rtl"),r.direction=N?"ltr":"rtl",r.textAlign=N?"left":"right"),h-=l*this._fontSizeFraction/this.lineHeight,B){this._renderChar(t,r,n,0,e.join(""),s,h,l),r.restore();return}for(var U=0,K=e.length-1;U<=K;U++)w=U===K||this.charSpacing||D,m+=e[U],p=this.__charBounds[n][U],_===0?(s+=G*(p.kernedWidth-p.width),_+=p.width):_+=p.kernedWidth,f&&!w&&this._reSpaceAndTab.test(e[U])&&(w=!0),w||(d=d||this.getCompleteStyleDeclaration(n,U),g=this.getCompleteStyleDeclaration(n,U+1),w=this._hasStyleChanged(d,g)),w&&(D?(r.save(),r.translate(p.renderLeft,p.renderTop),r.rotate(p.angle),this._renderChar(t,r,n,U,m,-_/2,0,l),r.restore()):(z=s,this._renderChar(t,r,n,U,m,z,h,l)),m="",d=g,s+=G*_,_=0);r.restore()},_applyPatternGradientTransformText:function(t){var r=i.util.createCanvasElement(),e,s=this.width+this.strokeWidth,h=this.height+this.strokeWidth;return r.width=s,r.height=h,e=r.getContext("2d"),e.beginPath(),e.moveTo(0,0),e.lineTo(s,0),e.lineTo(s,h),e.lineTo(0,h),e.closePath(),e.translate(s/2,h/2),e.fillStyle=t.toLive(e),this._applyPatternGradientTransform(e,t),e.fill(),e.createPattern(r,"no-repeat")},handleFiller:function(t,r,e){var s,h;return e.toLive?e.gradientUnits==="percentage"||e.gradientTransform||e.patternTransform?(s=-this.width/2,h=-this.height/2,t.translate(s,h),t[r]=this._applyPatternGradientTransformText(e),{offsetX:s,offsetY:h}):(t[r]=e.toLive(t,this),this._applyPatternGradientTransform(t,e)):(t[r]=e,{offsetX:0,offsetY:0})},_setStrokeStyles:function(t,r){return t.lineWidth=r.strokeWidth,t.lineCap=this.strokeLineCap,t.lineDashOffset=this.strokeDashOffset,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,this.handleFiller(t,"strokeStyle",r.stroke)},_setFillStyles:function(t,r){return this.handleFiller(t,"fillStyle",r.fill)},_renderChar:function(t,r,e,s,h,n,l){var f=this._getStyleDeclaration(e,s),d=this.getCompleteStyleDeclaration(e,s),g=t==="fillText"&&d.fill,m=t==="strokeText"&&d.stroke&&d.strokeWidth,p,_;!m&&!g||(r.save(),g&&(p=this._setFillStyles(r,d)),m&&(_=this._setStrokeStyles(r,d)),r.font=this._getFontDeclaration(d),f&&f.textBackgroundColor&&this._removeShadow(r),f&&f.deltaY&&(l+=f.deltaY),g&&r.fillText(h,n-p.offsetX,l-p.offsetY),m&&r.strokeText(h,n-_.offsetX,l-_.offsetY),r.restore())},setSuperscript:function(t,r){return this._setScript(t,r,this.superscript)},setSubscript:function(t,r){return this._setScript(t,r,this.subscript)},_setScript:function(t,r,e){var s=this.get2DCursorLocation(t,!0),h=this.getValueOfPropertyAt(s.lineIndex,s.charIndex,"fontSize"),n=this.getValueOfPropertyAt(s.lineIndex,s.charIndex,"deltaY"),l={fontSize:h*e.size,deltaY:n+h*e.baseline};return this.setSelectionStyles(l,t,r),this},_hasStyleChanged:function(t,r){return t.fill!==r.fill||t.stroke!==r.stroke||t.strokeWidth!==r.strokeWidth||t.fontSize!==r.fontSize||t.fontFamily!==r.fontFamily||t.fontWeight!==r.fontWeight||t.fontStyle!==r.fontStyle||t.deltaY!==r.deltaY},_hasStyleChangedForSvg:function(t,r){return this._hasStyleChanged(t,r)||t.overline!==r.overline||t.underline!==r.underline||t.linethrough!==r.linethrough},_getLineLeftOffset:function(t){var r=this.getLineWidth(t),e=this.width-r,s=this.textAlign,h=this.direction,l,n=0,l=this.isEndOfWrapping(t);return s==="justify"||s==="justify-center"&&!l||s==="justify-right"&&!l||s==="justify-left"&&!l?0:(s==="center"&&(n=e/2),s==="right"&&(n=e),s==="justify-center"&&(n=e/2),s==="justify-right"&&(n=e),h==="rtl"&&(n-=e),n)},_clearCache:function(){this.__lineWidths=[],this.__lineHeights=[],this.__charBounds=[]},_shouldClearDimensionCache:function(){var t=this._forceClearCache;return t||(t=this.hasStateChanged("_dimensionAffectingProps")),t&&(this.dirty=!0,this._forceClearCache=!1),t},getLineWidth:function(t){if(this.__lineWidths[t]!==void 0)return this.__lineWidths[t];var r=this.measureLine(t),e=r.width;return this.__lineWidths[t]=e,e},_getWidthOfCharSpacing:function(){return this.charSpacing!==0?this.fontSize*this.charSpacing/1e3:0},getValueOfPropertyAt:function(t,r,e){var s=this._getStyleDeclaration(t,r);return s&&typeof s[e]!="undefined"?s[e]:this[e]},_renderTextDecoration:function(t,r){if(!(!this[r]&&!this.styleHas(r))){for(var e,s,h,n,l,f,d,g,m=this._getLeftOffset(),p=this._getTopOffset(),_,w,D,B,N,G,z,H,U=this.path,K=this._getWidthOfCharSpacing(),Q=this.offsets[r],J=0,v=this._textLines.length;J<v;J++){if(e=this.getHeightOfLine(J),!this[r]&&!this.styleHas(r,J)){p+=e;continue}d=this._textLines[J],G=e/this.lineHeight,n=this._getLineLeftOffset(J),w=0,D=0,g=this.getValueOfPropertyAt(J,0,r),H=this.getValueOfPropertyAt(J,0,"fill"),_=p+G*(1-this._fontSizeFraction),s=this.getHeightOfChar(J,0),l=this.getValueOfPropertyAt(J,0,"deltaY");for(var b=0,S=d.length;b<S;b++)if(B=this.__charBounds[J][b],N=this.getValueOfPropertyAt(J,b,r),z=this.getValueOfPropertyAt(J,b,"fill"),h=this.getHeightOfChar(J,b),f=this.getValueOfPropertyAt(J,b,"deltaY"),U&&N&&z)t.save(),t.fillStyle=H,t.translate(B.renderLeft,B.renderTop),t.rotate(B.angle),t.fillRect(-B.kernedWidth/2,Q*h+f,B.kernedWidth,this.fontSize/15),t.restore();else if((N!==g||z!==H||h!==s||f!==l)&&D>0){var C=m+n+w;this.direction==="rtl"&&(C=this.width-C-D),g&&H&&(t.fillStyle=H,t.fillRect(C,_+Q*s+l,D,this.fontSize/15)),w=B.left,D=B.width,g=N,H=z,s=h,l=f}else D+=B.kernedWidth;var C=m+n+w;this.direction==="rtl"&&(C=this.width-C-D),t.fillStyle=z,N&&z&&t.fillRect(C,_+Q*s+l,D-K,this.fontSize/15),p+=e}this._removeShadow(t)}},_getFontDeclaration:function(t,r){var e=t||this,s=this.fontFamily,h=i.Text.genericFonts.indexOf(s.toLowerCase())>-1,n=s===void 0||s.indexOf("'")>-1||s.indexOf(",")>-1||s.indexOf('"')>-1||h?e.fontFamily:'"'+e.fontFamily+'"';return[i.isLikelyNode?e.fontWeight:e.fontStyle,i.isLikelyNode?e.fontStyle:e.fontWeight,r?this.CACHE_FONT_SIZE+"px":e.fontSize+"px",n].join(" ")},render:function(t){this.visible&&(this.canvas&&this.canvas.skipOffscreen&&!this.group&&!this.isOnScreen()||(this._shouldClearDimensionCache()&&this.initDimensions(),this.callSuper("render",t)))},_splitTextIntoLines:function(t){for(var r=t.split(this._reNewline),e=new Array(r.length),s=[`
`],h=[],n=0;n<r.length;n++)e[n]=i.util.string.graphemeSplit(r[n]),h=h.concat(e[n],s);return h.pop(),{_unwrappedLines:e,lines:r,graphemeText:h,graphemeLines:e}},toObject:function(t){var r=o.concat(t),e=this.callSuper("toObject",r);return e.styles=a(this.styles,!0),e.path&&(e.path=this.path.toObject()),e},set:function(t,r){this.callSuper("set",t,r);var e=!1,s=!1;if(typeof t=="object")for(var h in t)h==="path"&&this.setPathInfo(),e=e||this._dimensionAffectingProps.indexOf(h)!==-1,s=s||h==="path";else e=this._dimensionAffectingProps.indexOf(t)!==-1,s=t==="path";return s&&this.setPathInfo(),e&&(this.initDimensions(),this.setCoords()),this},complexity:function(){return 1}}),i.Text.ATTRIBUTE_NAMES=i.SHARED_ATTRIBUTES.concat("x y dx dy font-family font-style font-weight font-size letter-spacing text-decoration text-anchor".split(" ")),i.Text.DEFAULT_SVG_FONT_SIZE=16,i.Text.fromElement=function(t,r,e){if(!t)return r(null);var s=i.parseAttributes(t,i.Text.ATTRIBUTE_NAMES),h=s.textAnchor||"left";if(e=i.util.object.extend(e?a(e):{},s),e.top=e.top||0,e.left=e.left||0,s.textDecoration){var n=s.textDecoration;n.indexOf("underline")!==-1&&(e.underline=!0),n.indexOf("overline")!==-1&&(e.overline=!0),n.indexOf("line-through")!==-1&&(e.linethrough=!0),delete e.textDecoration}"dx"in s&&(e.left+=s.dx),"dy"in s&&(e.top+=s.dy),"fontSize"in e||(e.fontSize=i.Text.DEFAULT_SVG_FONT_SIZE);var l="";"textContent"in t?l=t.textContent:"firstChild"in t&&t.firstChild!==null&&"data"in t.firstChild&&t.firstChild.data!==null&&(l=t.firstChild.data),l=l.replace(/^\s+|\s+$|\n+/g,"").replace(/\s+/g," ");var f=e.strokeWidth;e.strokeWidth=0;var d=new i.Text(l,e),g=d.getScaledHeight()/d.height,m=(d.height+d.strokeWidth)*d.lineHeight-d.height,p=m*g,_=d.getScaledHeight()+p,w=0;h==="center"&&(w=d.getScaledWidth()/2),h==="right"&&(w=d.getScaledWidth()),d.set({left:d.left-w,top:d.top-(_-d.fontSize*(.07+d._fontSizeFraction))/d.lineHeight,strokeWidth:typeof f!="undefined"?f:1}),r(d)},i.Text.fromObject=function(t,r){var e=a(t),s=t.path;return delete e.path,i.Object._fromObject("Text",e,function(h){s?i.Object._fromObject("Path",s,function(n){h.set("path",n),r(h)},"path"):r(h)},"text")},i.Text.genericFonts=["sans-serif","serif","cursive","fantasy","monospace"],i.util.createAccessors&&i.util.createAccessors(i.Text)})(F);(function(){u.util.object.extend(u.Text.prototype,{isEmptyStyles:function(c){if(!this.styles||typeof c!="undefined"&&!this.styles[c])return!0;var i=typeof c=="undefined"?this.styles:{line:this.styles[c]};for(var a in i)for(var o in i[a])for(var t in i[a][o])return!1;return!0},styleHas:function(c,i){if(!this.styles||!c||c===""||typeof i!="undefined"&&!this.styles[i])return!1;var a=typeof i=="undefined"?this.styles:{0:this.styles[i]};for(var o in a)for(var t in a[o])if(typeof a[o][t][c]!="undefined")return!0;return!1},cleanStyle:function(c){if(!this.styles||!c||c==="")return!1;var i=this.styles,a=0,o,t,r=!0,e=0,s;for(var h in i){o=0;for(var n in i[h]){var s=i[h][n],l=s.hasOwnProperty(c);a++,l?(t?s[c]!==t&&(r=!1):t=s[c],s[c]===this[c]&&delete s[c]):r=!1,Object.keys(s).length!==0?o++:delete i[h][n]}o===0&&delete i[h]}for(var f=0;f<this._textLines.length;f++)e+=this._textLines[f].length;r&&a===e&&(this[c]=t,this.removeStyle(c))},removeStyle:function(c){if(!(!this.styles||!c||c==="")){var i=this.styles,a,o,t;for(o in i){a=i[o];for(t in a)delete a[t][c],Object.keys(a[t]).length===0&&delete a[t];Object.keys(a).length===0&&delete i[o]}}},_extendStyles:function(c,i){var a=this.get2DCursorLocation(c);this._getLineStyle(a.lineIndex)||this._setLineStyle(a.lineIndex),this._getStyleDeclaration(a.lineIndex,a.charIndex)||this._setStyleDeclaration(a.lineIndex,a.charIndex,{}),u.util.object.extend(this._getStyleDeclaration(a.lineIndex,a.charIndex),i)},get2DCursorLocation:function(c,i){typeof c=="undefined"&&(c=this.selectionStart);for(var a=i?this._unwrappedTextLines:this._textLines,o=a.length,t=0;t<o;t++){if(c<=a[t].length)return{lineIndex:t,charIndex:c};c-=a[t].length+this.missingNewlineOffset(t)}return{lineIndex:t-1,charIndex:a[t-1].length<c?a[t-1].length:c}},getSelectionStyles:function(c,i,a){typeof c=="undefined"&&(c=this.selectionStart||0),typeof i=="undefined"&&(i=this.selectionEnd||c);for(var o=[],t=c;t<i;t++)o.push(this.getStyleAtPosition(t,a));return o},getStyleAtPosition:function(c,i){var a=this.get2DCursorLocation(c),o=i?this.getCompleteStyleDeclaration(a.lineIndex,a.charIndex):this._getStyleDeclaration(a.lineIndex,a.charIndex);return o||{}},setSelectionStyles:function(c,i,a){typeof i=="undefined"&&(i=this.selectionStart||0),typeof a=="undefined"&&(a=this.selectionEnd||i);for(var o=i;o<a;o++)this._extendStyles(o,c);return this._forceClearCache=!0,this},_getStyleDeclaration:function(c,i){var a=this.styles&&this.styles[c];return a?a[i]:null},getCompleteStyleDeclaration:function(c,i){for(var a=this._getStyleDeclaration(c,i)||{},o={},t,r=0;r<this._styleProperties.length;r++)t=this._styleProperties[r],o[t]=typeof a[t]=="undefined"?this[t]:a[t];return o},_setStyleDeclaration:function(c,i,a){this.styles[c][i]=a},_deleteStyleDeclaration:function(c,i){delete this.styles[c][i]},_getLineStyle:function(c){return!!this.styles[c]},_setLineStyle:function(c){this.styles[c]={}},_deleteLineStyle:function(c){delete this.styles[c]}})})();(function(){function c(i){i.textDecoration&&(i.textDecoration.indexOf("underline")>-1&&(i.underline=!0),i.textDecoration.indexOf("line-through")>-1&&(i.linethrough=!0),i.textDecoration.indexOf("overline")>-1&&(i.overline=!0),delete i.textDecoration)}u.IText=u.util.createClass(u.Text,u.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:"",cursorDelay:1e3,cursorDuration:600,caching:!0,hiddenTextareaContainer:null,_reSpace:/\s|\n/,_currentCursorOpacity:0,_selectionDirection:null,_abortCursorAnimation:!1,__widthOfSpace:[],inCompositionMode:!1,initialize:function(i,a){this.callSuper("initialize",i,a),this.initBehavior()},setSelectionStart:function(i){i=Math.max(i,0),this._updateAndFire("selectionStart",i)},setSelectionEnd:function(i){i=Math.min(i,this.text.length),this._updateAndFire("selectionEnd",i)},_updateAndFire:function(i,a){this[i]!==a&&(this._fireSelectionChanged(),this[i]=a),this._updateTextarea()},_fireSelectionChanged:function(){this.fire("selection:changed"),this.canvas&&this.canvas.fire("text:selection:changed",{target:this})},initDimensions:function(){this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this.callSuper("initDimensions")},render:function(i){this.clearContextTop(),this.callSuper("render",i),this.cursorOffsetCache={},this.renderCursorOrSelection()},_render:function(i){this.callSuper("_render",i)},clearContextTop:function(i){if(!(!this.isEditing||!this.canvas||!this.canvas.contextTop)){var a=this.canvas.contextTop,o=this.canvas.viewportTransform;a.save(),a.transform(o[0],o[1],o[2],o[3],o[4],o[5]),this.transform(a),this._clearTextArea(a),i||a.restore()}},renderCursorOrSelection:function(){if(!(!this.isEditing||!this.canvas||!this.canvas.contextTop)){var i=this._getCursorBoundaries(),a=this.canvas.contextTop;this.clearContextTop(!0),this.selectionStart===this.selectionEnd?this.renderCursor(i,a):this.renderSelection(i,a),a.restore()}},_clearTextArea:function(i){var a=this.width+4,o=this.height+4;i.clearRect(-a/2,-o/2,a,o)},_getCursorBoundaries:function(i){typeof i=="undefined"&&(i=this.selectionStart);var a=this._getLeftOffset(),o=this._getTopOffset(),t=this._getCursorBoundariesOffsets(i);return{left:a,top:o,leftOffset:t.left,topOffset:t.top}},_getCursorBoundariesOffsets:function(i){if(this.cursorOffsetCache&&"top"in this.cursorOffsetCache)return this.cursorOffsetCache;var a,o,t,r=0,e=0,s,h=this.get2DCursorLocation(i);t=h.charIndex,o=h.lineIndex;for(var n=0;n<o;n++)r+=this.getHeightOfLine(n);a=this._getLineLeftOffset(o);var l=this.__charBounds[o][t];return l&&(e=l.left),this.charSpacing!==0&&t===this._textLines[o].length&&(e-=this._getWidthOfCharSpacing()),s={top:r,left:a+(e>0?e:0)},this.direction==="rtl"&&(s.left*=-1),this.cursorOffsetCache=s,this.cursorOffsetCache},renderCursor:function(i,a){var o=this.get2DCursorLocation(),t=o.lineIndex,r=o.charIndex>0?o.charIndex-1:0,e=this.getValueOfPropertyAt(t,r,"fontSize"),s=this.scaleX*this.canvas.getZoom(),h=this.cursorWidth/s,n=i.topOffset,l=this.getValueOfPropertyAt(t,r,"deltaY");n+=(1-this._fontSizeFraction)*this.getHeightOfLine(t)/this.lineHeight-e*(1-this._fontSizeFraction),this.inCompositionMode&&this.renderSelection(i,a),a.fillStyle=this.cursorColor||this.getValueOfPropertyAt(t,r,"fill"),a.globalAlpha=this.__isMousedown?1:this._currentCursorOpacity,a.fillRect(i.left+i.leftOffset-h/2,n+i.top+l,h,e)},renderSelection:function(i,a){for(var o=this.inCompositionMode?this.hiddenTextarea.selectionStart:this.selectionStart,t=this.inCompositionMode?this.hiddenTextarea.selectionEnd:this.selectionEnd,r=this.textAlign.indexOf("justify")!==-1,e=this.get2DCursorLocation(o),s=this.get2DCursorLocation(t),h=e.lineIndex,n=s.lineIndex,l=e.charIndex<0?0:e.charIndex,f=s.charIndex<0?0:s.charIndex,d=h;d<=n;d++){var g=this._getLineLeftOffset(d)||0,m=this.getHeightOfLine(d),p=0,_=0,w=0;if(d===h&&(_=this.__charBounds[h][l].left),d>=h&&d<n)w=r&&!this.isEndOfWrapping(d)?this.width:this.getLineWidth(d)||5;else if(d===n)if(f===0)w=this.__charBounds[n][f].left;else{var D=this._getWidthOfCharSpacing();w=this.__charBounds[n][f-1].left+this.__charBounds[n][f-1].width-D}p=m,(this.lineHeight<1||d===n&&this.lineHeight>1)&&(m/=this.lineHeight);var B=i.left+g+_,N=w-_,G=m,z=0;this.inCompositionMode?(a.fillStyle=this.compositionColor||"black",G=1,z=m):a.fillStyle=this.selectionColor,this.direction==="rtl"&&(B=this.width-B-N),a.fillRect(B,i.top+i.topOffset+z,N,G),i.topOffset+=p}},getCurrentCharFontSize:function(){var i=this._getCurrentCharIndex();return this.getValueOfPropertyAt(i.l,i.c,"fontSize")},getCurrentCharColor:function(){var i=this._getCurrentCharIndex();return this.getValueOfPropertyAt(i.l,i.c,"fill")},_getCurrentCharIndex:function(){var i=this.get2DCursorLocation(this.selectionStart,!0),a=i.charIndex>0?i.charIndex-1:0;return{l:i.lineIndex,c:a}}}),u.IText.fromObject=function(i,a){if(c(i),i.styles)for(var o in i.styles)for(var t in i.styles[o])c(i.styles[o][t]);u.Object._fromObject("IText",i,a,"text")}})();(function(){var c=u.util.object.clone;u.util.object.extend(u.IText.prototype,{initBehavior:function(){this.initAddedHandler(),this.initRemovedHandler(),this.initCursorSelectionHandlers(),this.initDoubleClickSimulation(),this.mouseMoveHandler=this.mouseMoveHandler.bind(this)},onDeselect:function(){this.isEditing&&this.exitEditing(),this.selected=!1},initAddedHandler:function(){var i=this;this.on("added",function(){var a=i.canvas;a&&(a._hasITextHandlers||(a._hasITextHandlers=!0,i._initCanvasHandlers(a)),a._iTextInstances=a._iTextInstances||[],a._iTextInstances.push(i))})},initRemovedHandler:function(){var i=this;this.on("removed",function(){var a=i.canvas;a&&(a._iTextInstances=a._iTextInstances||[],u.util.removeFromArray(a._iTextInstances,i),a._iTextInstances.length===0&&(a._hasITextHandlers=!1,i._removeCanvasHandlers(a)))})},_initCanvasHandlers:function(i){i._mouseUpITextHandler=function(){i._iTextInstances&&i._iTextInstances.forEach(function(a){a.__isMousedown=!1})},i.on("mouse:up",i._mouseUpITextHandler)},_removeCanvasHandlers:function(i){i.off("mouse:up",i._mouseUpITextHandler)},_tick:function(){this._currentTickState=this._animateCursor(this,1,this.cursorDuration,"_onTickComplete")},_animateCursor:function(i,a,o,t){var r;return r={isAborted:!1,abort:function(){this.isAborted=!0}},i.animate("_currentCursorOpacity",a,{duration:o,onComplete:function(){r.isAborted||i[t]()},onChange:function(){i.canvas&&i.selectionStart===i.selectionEnd&&i.renderCursorOrSelection()},abort:function(){return r.isAborted}}),r},_onTickComplete:function(){var i=this;this._cursorTimeout1&&clearTimeout(this._cursorTimeout1),this._cursorTimeout1=setTimeout(function(){i._currentTickCompleteState=i._animateCursor(i,0,this.cursorDuration/2,"_tick")},100)},initDelayedCursor:function(i){var a=this,o=i?0:this.cursorDelay;this.abortCursorAnimation(),this._currentCursorOpacity=1,this._cursorTimeout2=setTimeout(function(){a._tick()},o)},abortCursorAnimation:function(){var i=this._currentTickState||this._currentTickCompleteState,a=this.canvas;this._currentTickState&&this._currentTickState.abort(),this._currentTickCompleteState&&this._currentTickCompleteState.abort(),clearTimeout(this._cursorTimeout1),clearTimeout(this._cursorTimeout2),this._currentCursorOpacity=0,i&&a&&a.clearContext(a.contextTop||a.contextContainer)},selectAll:function(){return this.selectionStart=0,this.selectionEnd=this._text.length,this._fireSelectionChanged(),this._updateTextarea(),this},getSelectedText:function(){return this._text.slice(this.selectionStart,this.selectionEnd).join("")},findWordBoundaryLeft:function(i){var a=0,o=i-1;if(this._reSpace.test(this._text[o]))for(;this._reSpace.test(this._text[o]);)a++,o--;for(;/\S/.test(this._text[o])&&o>-1;)a++,o--;return i-a},findWordBoundaryRight:function(i){var a=0,o=i;if(this._reSpace.test(this._text[o]))for(;this._reSpace.test(this._text[o]);)a++,o++;for(;/\S/.test(this._text[o])&&o<this._text.length;)a++,o++;return i+a},findLineBoundaryLeft:function(i){for(var a=0,o=i-1;!/\n/.test(this._text[o])&&o>-1;)a++,o--;return i-a},findLineBoundaryRight:function(i){for(var a=0,o=i;!/\n/.test(this._text[o])&&o<this._text.length;)a++,o++;return i+a},searchWordBoundary:function(i,a){for(var o=this._text,t=this._reSpace.test(o[i])?i-1:i,r=o[t],e=u.reNonWord;!e.test(r)&&t>0&&t<o.length;)t+=a,r=o[t];return e.test(r)&&(t+=a===1?0:1),t},selectWord:function(i){i=i||this.selectionStart;var a=this.searchWordBoundary(i,-1),o=this.searchWordBoundary(i,1);this.selectionStart=a,this.selectionEnd=o,this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()},selectLine:function(i){i=i||this.selectionStart;var a=this.findLineBoundaryLeft(i),o=this.findLineBoundaryRight(i);return this.selectionStart=a,this.selectionEnd=o,this._fireSelectionChanged(),this._updateTextarea(),this},enterEditing:function(i){if(!(this.isEditing||!this.editable))return this.canvas&&(this.canvas.calcOffset(),this.exitEditingOnOthers(this.canvas)),this.isEditing=!0,this.initHiddenTextarea(i),this.hiddenTextarea.focus(),this.hiddenTextarea.value=this.text,this._updateTextarea(),this._saveEditingProps(),this._setEditingProps(),this._textBeforeEdit=this.text,this._tick(),this.fire("editing:entered"),this._fireSelectionChanged(),this.canvas?(this.canvas.fire("text:editing:entered",{target:this}),this.initMouseMoveHandler(),this.canvas.requestRenderAll(),this):this},exitEditingOnOthers:function(i){i._iTextInstances&&i._iTextInstances.forEach(function(a){a.selected=!1,a.isEditing&&a.exitEditing()})},initMouseMoveHandler:function(){this.canvas.on("mouse:move",this.mouseMoveHandler)},mouseMoveHandler:function(i){if(!(!this.__isMousedown||!this.isEditing)){var a=this.getSelectionStartFromPointer(i.e),o=this.selectionStart,t=this.selectionEnd;(a!==this.__selectionStartOnMouseDown||o===t)&&(o===a||t===a)||(a>this.__selectionStartOnMouseDown?(this.selectionStart=this.__selectionStartOnMouseDown,this.selectionEnd=a):(this.selectionStart=a,this.selectionEnd=this.__selectionStartOnMouseDown),(this.selectionStart!==o||this.selectionEnd!==t)&&(this.restartCursorIfNeeded(),this._fireSelectionChanged(),this._updateTextarea(),this.renderCursorOrSelection()))}},_setEditingProps:function(){this.hoverCursor="text",this.canvas&&(this.canvas.defaultCursor=this.canvas.moveCursor="text"),this.borderColor=this.editingBorderColor,this.hasControls=this.selectable=!1,this.lockMovementX=this.lockMovementY=!0},fromStringToGraphemeSelection:function(i,a,o){var t=o.slice(0,i),r=u.util.string.graphemeSplit(t).length;if(i===a)return{selectionStart:r,selectionEnd:r};var e=o.slice(i,a),s=u.util.string.graphemeSplit(e).length;return{selectionStart:r,selectionEnd:r+s}},fromGraphemeToStringSelection:function(i,a,o){var t=o.slice(0,i),r=t.join("").length;if(i===a)return{selectionStart:r,selectionEnd:r};var e=o.slice(i,a),s=e.join("").length;return{selectionStart:r,selectionEnd:r+s}},_updateTextarea:function(){if(this.cursorOffsetCache={},!!this.hiddenTextarea){if(!this.inCompositionMode){var i=this.fromGraphemeToStringSelection(this.selectionStart,this.selectionEnd,this._text);this.hiddenTextarea.selectionStart=i.selectionStart,this.hiddenTextarea.selectionEnd=i.selectionEnd}this.updateTextareaPosition()}},updateFromTextArea:function(){if(this.hiddenTextarea){this.cursorOffsetCache={},this.text=this.hiddenTextarea.value,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords());var i=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value);this.selectionEnd=this.selectionStart=i.selectionEnd,this.inCompositionMode||(this.selectionStart=i.selectionStart),this.updateTextareaPosition()}},updateTextareaPosition:function(){if(this.selectionStart===this.selectionEnd){var i=this._calcTextareaPosition();this.hiddenTextarea.style.left=i.left,this.hiddenTextarea.style.top=i.top}},_calcTextareaPosition:function(){if(!this.canvas)return{x:1,y:1};var i=this.inCompositionMode?this.compositionStart:this.selectionStart,a=this._getCursorBoundaries(i),o=this.get2DCursorLocation(i),t=o.lineIndex,r=o.charIndex,e=this.getValueOfPropertyAt(t,r,"fontSize")*this.lineHeight,s=a.leftOffset,h=this.calcTransformMatrix(),n={x:a.left+s,y:a.top+a.topOffset+e},l=this.canvas.getRetinaScaling(),f=this.canvas.upperCanvasEl,d=f.width/l,g=f.height/l,m=d-e,p=g-e,_=f.clientWidth/d,w=f.clientHeight/g;return n=u.util.transformPoint(n,h),n=u.util.transformPoint(n,this.canvas.viewportTransform),n.x*=_,n.y*=w,n.x<0&&(n.x=0),n.x>m&&(n.x=m),n.y<0&&(n.y=0),n.y>p&&(n.y=p),n.x+=this.canvas._offset.left,n.y+=this.canvas._offset.top,{left:n.x+"px",top:n.y+"px",fontSize:e+"px",charHeight:e}},_saveEditingProps:function(){this._savedProps={hasControls:this.hasControls,borderColor:this.borderColor,lockMovementX:this.lockMovementX,lockMovementY:this.lockMovementY,hoverCursor:this.hoverCursor,selectable:this.selectable,defaultCursor:this.canvas&&this.canvas.defaultCursor,moveCursor:this.canvas&&this.canvas.moveCursor}},_restoreEditingProps:function(){this._savedProps&&(this.hoverCursor=this._savedProps.hoverCursor,this.hasControls=this._savedProps.hasControls,this.borderColor=this._savedProps.borderColor,this.selectable=this._savedProps.selectable,this.lockMovementX=this._savedProps.lockMovementX,this.lockMovementY=this._savedProps.lockMovementY,this.canvas&&(this.canvas.defaultCursor=this._savedProps.defaultCursor,this.canvas.moveCursor=this._savedProps.moveCursor))},exitEditing:function(){var i=this._textBeforeEdit!==this.text,a=this.hiddenTextarea;return this.selected=!1,this.isEditing=!1,this.selectionEnd=this.selectionStart,a&&(a.blur&&a.blur(),a.parentNode&&a.parentNode.removeChild(a)),this.hiddenTextarea=null,this.abortCursorAnimation(),this._restoreEditingProps(),this._currentCursorOpacity=0,this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this.fire("editing:exited"),i&&this.fire("modified"),this.canvas&&(this.canvas.off("mouse:move",this.mouseMoveHandler),this.canvas.fire("text:editing:exited",{target:this}),i&&this.canvas.fire("object:modified",{target:this})),this},_removeExtraneousStyles:function(){for(var i in this.styles)this._textLines[i]||delete this.styles[i]},removeStyleFromTo:function(i,a){var o=this.get2DCursorLocation(i,!0),t=this.get2DCursorLocation(a,!0),r=o.lineIndex,e=o.charIndex,s=t.lineIndex,h=t.charIndex,n,l;if(r!==s){if(this.styles[r])for(n=e;n<this._unwrappedTextLines[r].length;n++)delete this.styles[r][n];if(this.styles[s])for(n=h;n<this._unwrappedTextLines[s].length;n++)l=this.styles[s][n],l&&(this.styles[r]||(this.styles[r]={}),this.styles[r][e+n-h]=l);for(n=r+1;n<=s;n++)delete this.styles[n];this.shiftLineStyles(s,r-s)}else if(this.styles[r]){l=this.styles[r];var f=h-e,d,g;for(n=e;n<h;n++)delete l[n];for(g in this.styles[r])d=parseInt(g,10),d>=h&&(l[d-f]=l[g],delete l[g])}},shiftLineStyles:function(i,a){var o=c(this.styles);for(var t in this.styles){var r=parseInt(t,10);r>i&&(this.styles[r+a]=o[r],o[r-a]||delete this.styles[r])}},restartCursorIfNeeded:function(){(!this._currentTickState||this._currentTickState.isAborted||!this._currentTickCompleteState||this._currentTickCompleteState.isAborted)&&this.initDelayedCursor()},insertNewlineStyleObject:function(i,a,o,t){var r,e={},s=!1,h=this._unwrappedTextLines[i].length===a;o||(o=1),this.shiftLineStyles(i,o),this.styles[i]&&(r=this.styles[i][a===0?a:a-1]);for(var n in this.styles[i]){var l=parseInt(n,10);l>=a&&(s=!0,e[l-a]=this.styles[i][n],h&&a===0||delete this.styles[i][n])}var f=!1;for(s&&!h&&(this.styles[i+o]=e,f=!0),f&&o--;o>0;)t&&t[o-1]?this.styles[i+o]={0:c(t[o-1])}:r?this.styles[i+o]={0:c(r)}:delete this.styles[i+o],o--;this._forceClearCache=!0},insertCharStyleObject:function(i,a,o,t){this.styles||(this.styles={});var r=this.styles[i],e=r?c(r):{};o||(o=1);for(var s in e){var h=parseInt(s,10);h>=a&&(r[h+o]=e[h],e[h-o]||delete r[h])}if(this._forceClearCache=!0,t){for(;o--;)Object.keys(t[o]).length&&(this.styles[i]||(this.styles[i]={}),this.styles[i][a+o]=c(t[o]));return}if(r)for(var n=r[a?a-1:1];n&&o--;)this.styles[i][a+o]=c(n)},insertNewStyleBlock:function(i,a,o){for(var t=this.get2DCursorLocation(a,!0),r=[0],e=0,s=0;s<i.length;s++)i[s]===`
`?(e++,r[e]=0):r[e]++;r[0]>0&&(this.insertCharStyleObject(t.lineIndex,t.charIndex,r[0],o),o=o&&o.slice(r[0]+1)),e&&this.insertNewlineStyleObject(t.lineIndex,t.charIndex+r[0],e);for(var s=1;s<e;s++)r[s]>0?this.insertCharStyleObject(t.lineIndex+s,0,r[s],o):o&&this.styles[t.lineIndex+s]&&o[0]&&(this.styles[t.lineIndex+s][0]=o[0]),o=o&&o.slice(r[s]+1);r[s]>0&&this.insertCharStyleObject(t.lineIndex+s,0,r[s],o)},setSelectionStartEndWithShift:function(i,a,o){o<=i?(a===i?this._selectionDirection="left":this._selectionDirection==="right"&&(this._selectionDirection="left",this.selectionEnd=i),this.selectionStart=o):o>i&&o<a?this._selectionDirection==="right"?this.selectionEnd=o:this.selectionStart=o:(a===i?this._selectionDirection="right":this._selectionDirection==="left"&&(this._selectionDirection="right",this.selectionStart=a),this.selectionEnd=o)},setSelectionInBoundaries:function(){var i=this.text.length;this.selectionStart>i?this.selectionStart=i:this.selectionStart<0&&(this.selectionStart=0),this.selectionEnd>i?this.selectionEnd=i:this.selectionEnd<0&&(this.selectionEnd=0)}})})();u.util.object.extend(u.IText.prototype,{initDoubleClickSimulation:function(){this.__lastClickTime=+new Date,this.__lastLastClickTime=+new Date,this.__lastPointer={},this.on("mousedown",this.onMouseDown)},onMouseDown:function(c){if(this.canvas){this.__newClickTime=+new Date;var i=c.pointer;this.isTripleClick(i)&&(this.fire("tripleclick",c),this._stopEvent(c.e)),this.__lastLastClickTime=this.__lastClickTime,this.__lastClickTime=this.__newClickTime,this.__lastPointer=i,this.__lastIsEditing=this.isEditing,this.__lastSelected=this.selected}},isTripleClick:function(c){return this.__newClickTime-this.__lastClickTime<500&&this.__lastClickTime-this.__lastLastClickTime<500&&this.__lastPointer.x===c.x&&this.__lastPointer.y===c.y},_stopEvent:function(c){c.preventDefault&&c.preventDefault(),c.stopPropagation&&c.stopPropagation()},initCursorSelectionHandlers:function(){this.initMousedownHandler(),this.initMouseupHandler(),this.initClicks()},doubleClickHandler:function(c){this.isEditing&&this.selectWord(this.getSelectionStartFromPointer(c.e))},tripleClickHandler:function(c){this.isEditing&&this.selectLine(this.getSelectionStartFromPointer(c.e))},initClicks:function(){this.on("mousedblclick",this.doubleClickHandler),this.on("tripleclick",this.tripleClickHandler)},_mouseDownHandler:function(c){!this.canvas||!this.editable||c.e.button&&c.e.button!==1||(this.__isMousedown=!0,this.selected&&(this.inCompositionMode=!1,this.setCursorByClick(c.e)),this.isEditing&&(this.__selectionStartOnMouseDown=this.selectionStart,this.selectionStart===this.selectionEnd&&this.abortCursorAnimation(),this.renderCursorOrSelection()))},_mouseDownHandlerBefore:function(c){!this.canvas||!this.editable||c.e.button&&c.e.button!==1||(this.selected=this===this.canvas._activeObject)},initMousedownHandler:function(){this.on("mousedown",this._mouseDownHandler),this.on("mousedown:before",this._mouseDownHandlerBefore)},initMouseupHandler:function(){this.on("mouseup",this.mouseUpHandler)},mouseUpHandler:function(c){if(this.__isMousedown=!1,!(!this.editable||this.group||c.transform&&c.transform.actionPerformed||c.e.button&&c.e.button!==1)){if(this.canvas){var i=this.canvas._activeObject;if(i&&i!==this)return}this.__lastSelected&&!this.__corner?(this.selected=!1,this.__lastSelected=!1,this.enterEditing(c.e),this.selectionStart===this.selectionEnd?this.initDelayedCursor(!0):this.renderCursorOrSelection()):this.selected=!0}},setCursorByClick:function(c){var i=this.getSelectionStartFromPointer(c),a=this.selectionStart,o=this.selectionEnd;c.shiftKey?this.setSelectionStartEndWithShift(a,o,i):(this.selectionStart=i,this.selectionEnd=i),this.isEditing&&(this._fireSelectionChanged(),this._updateTextarea())},getSelectionStartFromPointer:function(c){for(var i=this.getLocalPointer(c),a=0,o=0,t=0,r=0,e=0,s,h,n=0,l=this._textLines.length;n<l&&t<=i.y;n++)t+=this.getHeightOfLine(n)*this.scaleY,e=n,n>0&&(r+=this._textLines[n-1].length+this.missingNewlineOffset(n-1));s=this._getLineLeftOffset(e),o=s*this.scaleX,h=this._textLines[e],this.direction==="rtl"&&(i.x=this.width*this.scaleX-i.x+o);for(var f=0,d=h.length;f<d&&(a=o,o+=this.__charBounds[e][f].kernedWidth*this.scaleX,o<=i.x);f++)r++;return this._getNewSelectionStartFromOffset(i,a,o,r,d)},_getNewSelectionStartFromOffset:function(c,i,a,o,t){var r=c.x-i,e=a-c.x,s=e>r||e<0?0:1,h=o+s;return this.flipX&&(h=t-h),h>this._text.length&&(h=this._text.length),h}});u.util.object.extend(u.IText.prototype,{initHiddenTextarea:function(){this.hiddenTextarea=u.document.createElement("textarea"),this.hiddenTextarea.setAttribute("autocapitalize","off"),this.hiddenTextarea.setAttribute("autocorrect","off"),this.hiddenTextarea.setAttribute("autocomplete","off"),this.hiddenTextarea.setAttribute("spellcheck","false"),this.hiddenTextarea.setAttribute("data-fabric-hiddentextarea",""),this.hiddenTextarea.setAttribute("wrap","off");var c=this._calcTextareaPosition();this.hiddenTextarea.style.cssText="position: absolute; top: "+c.top+"; left: "+c.left+"; z-index: -999; opacity: 0; width: 1px; height: 1px; font-size: 1px; padding\uFF70top: "+c.fontSize+";",this.hiddenTextareaContainer?this.hiddenTextareaContainer.appendChild(this.hiddenTextarea):u.document.body.appendChild(this.hiddenTextarea),u.util.addListener(this.hiddenTextarea,"keydown",this.onKeyDown.bind(this)),u.util.addListener(this.hiddenTextarea,"keyup",this.onKeyUp.bind(this)),u.util.addListener(this.hiddenTextarea,"input",this.onInput.bind(this)),u.util.addListener(this.hiddenTextarea,"copy",this.copy.bind(this)),u.util.addListener(this.hiddenTextarea,"cut",this.copy.bind(this)),u.util.addListener(this.hiddenTextarea,"paste",this.paste.bind(this)),u.util.addListener(this.hiddenTextarea,"compositionstart",this.onCompositionStart.bind(this)),u.util.addListener(this.hiddenTextarea,"compositionupdate",this.onCompositionUpdate.bind(this)),u.util.addListener(this.hiddenTextarea,"compositionend",this.onCompositionEnd.bind(this)),!this._clickHandlerInitialized&&this.canvas&&(u.util.addListener(this.canvas.upperCanvasEl,"click",this.onClick.bind(this)),this._clickHandlerInitialized=!0)},keysMap:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorRight",36:"moveCursorLeft",37:"moveCursorLeft",38:"moveCursorUp",39:"moveCursorRight",40:"moveCursorDown"},keysMapRtl:{9:"exitEditing",27:"exitEditing",33:"moveCursorUp",34:"moveCursorDown",35:"moveCursorLeft",36:"moveCursorRight",37:"moveCursorRight",38:"moveCursorUp",39:"moveCursorLeft",40:"moveCursorDown"},ctrlKeysMapUp:{67:"copy",88:"cut"},ctrlKeysMapDown:{65:"selectAll"},onClick:function(){this.hiddenTextarea&&this.hiddenTextarea.focus()},onKeyDown:function(c){if(this.isEditing){var i=this.direction==="rtl"?this.keysMapRtl:this.keysMap;if(c.keyCode in i)this[i[c.keyCode]](c);else if(c.keyCode in this.ctrlKeysMapDown&&(c.ctrlKey||c.metaKey))this[this.ctrlKeysMapDown[c.keyCode]](c);else return;c.stopImmediatePropagation(),c.preventDefault(),c.keyCode>=33&&c.keyCode<=40?(this.inCompositionMode=!1,this.clearContextTop(),this.renderCursorOrSelection()):this.canvas&&this.canvas.requestRenderAll()}},onKeyUp:function(c){if(!this.isEditing||this._copyDone||this.inCompositionMode){this._copyDone=!1;return}if(c.keyCode in this.ctrlKeysMapUp&&(c.ctrlKey||c.metaKey))this[this.ctrlKeysMapUp[c.keyCode]](c);else return;c.stopImmediatePropagation(),c.preventDefault(),this.canvas&&this.canvas.requestRenderAll()},onInput:function(c){var i=this.fromPaste;if(this.fromPaste=!1,c&&c.stopPropagation(),!!this.isEditing){var a=this._splitTextIntoLines(this.hiddenTextarea.value).graphemeText,o=this._text.length,t=a.length,r,e,s=t-o,h=this.selectionStart,n=this.selectionEnd,l=h!==n,f,d,g;if(this.hiddenTextarea.value===""){this.styles={},this.updateFromTextArea(),this.fire("changed"),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll());return}var m=this.fromStringToGraphemeSelection(this.hiddenTextarea.selectionStart,this.hiddenTextarea.selectionEnd,this.hiddenTextarea.value),p=h>m.selectionStart;l?(r=this._text.slice(h,n),s+=n-h):t<o&&(p?r=this._text.slice(n+s,n):r=this._text.slice(h,h-s)),e=a.slice(m.selectionEnd-s,m.selectionEnd),r&&r.length&&(e.length&&(f=this.getSelectionStyles(h,h+1,!1),f=e.map(function(){return f[0]})),l?(d=h,g=n):p?(d=n-r.length,g=n):(d=n,g=n+r.length),this.removeStyleFromTo(d,g)),e.length&&(i&&e.join("")===u.copiedText&&!u.disableStyleCopyPaste&&(f=u.copiedTextStyle),this.insertNewStyleBlock(e,h,f)),this.updateFromTextArea(),this.fire("changed"),this.canvas&&(this.canvas.fire("text:changed",{target:this}),this.canvas.requestRenderAll())}},onCompositionStart:function(){this.inCompositionMode=!0},onCompositionEnd:function(){this.inCompositionMode=!1},onCompositionUpdate:function(c){this.compositionStart=c.target.selectionStart,this.compositionEnd=c.target.selectionEnd,this.updateTextareaPosition()},copy:function(){this.selectionStart!==this.selectionEnd&&(u.copiedText=this.getSelectedText(),u.disableStyleCopyPaste?u.copiedTextStyle=null:u.copiedTextStyle=this.getSelectionStyles(this.selectionStart,this.selectionEnd,!0),this._copyDone=!0)},paste:function(){this.fromPaste=!0},_getClipboardData:function(c){return c&&c.clipboardData||u.window.clipboardData},_getWidthBeforeCursor:function(c,i){var a=this._getLineLeftOffset(c),o;return i>0&&(o=this.__charBounds[c][i-1],a+=o.left+o.width),a},getDownCursorOffset:function(c,i){var a=this._getSelectionForOffset(c,i),o=this.get2DCursorLocation(a),t=o.lineIndex;if(t===this._textLines.length-1||c.metaKey||c.keyCode===34)return this._text.length-a;var r=o.charIndex,e=this._getWidthBeforeCursor(t,r),s=this._getIndexOnLine(t+1,e),h=this._textLines[t].slice(r);return h.length+s+1+this.missingNewlineOffset(t)},_getSelectionForOffset:function(c,i){return c.shiftKey&&this.selectionStart!==this.selectionEnd&&i?this.selectionEnd:this.selectionStart},getUpCursorOffset:function(c,i){var a=this._getSelectionForOffset(c,i),o=this.get2DCursorLocation(a),t=o.lineIndex;if(t===0||c.metaKey||c.keyCode===33)return-a;var r=o.charIndex,e=this._getWidthBeforeCursor(t,r),s=this._getIndexOnLine(t-1,e),h=this._textLines[t].slice(0,r),n=this.missingNewlineOffset(t-1);return-this._textLines[t-1].length+s-h.length+(1-n)},_getIndexOnLine:function(c,i){for(var a=this._textLines[c],o=this._getLineLeftOffset(c),t=o,r=0,e,s,h=0,n=a.length;h<n;h++)if(e=this.__charBounds[c][h].width,t+=e,t>i){s=!0;var l=t-e,f=t,d=Math.abs(l-i),g=Math.abs(f-i);r=g<d?h:h-1;break}return s||(r=a.length-1),r},moveCursorDown:function(c){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorUpOrDown("Down",c)},moveCursorUp:function(c){this.selectionStart===0&&this.selectionEnd===0||this._moveCursorUpOrDown("Up",c)},_moveCursorUpOrDown:function(c,i){var a="get"+c+"CursorOffset",o=this[a](i,this._selectionDirection==="right");i.shiftKey?this.moveCursorWithShift(o):this.moveCursorWithoutShift(o),o!==0&&(this.setSelectionInBoundaries(),this.abortCursorAnimation(),this._currentCursorOpacity=1,this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorWithShift:function(c){var i=this._selectionDirection==="left"?this.selectionStart+c:this.selectionEnd+c;return this.setSelectionStartEndWithShift(this.selectionStart,this.selectionEnd,i),c!==0},moveCursorWithoutShift:function(c){return c<0?(this.selectionStart+=c,this.selectionEnd=this.selectionStart):(this.selectionEnd+=c,this.selectionStart=this.selectionEnd),c!==0},moveCursorLeft:function(c){this.selectionStart===0&&this.selectionEnd===0||this._moveCursorLeftOrRight("Left",c)},_move:function(c,i,a){var o;if(c.altKey)o=this["findWordBoundary"+a](this[i]);else if(c.metaKey||c.keyCode===35||c.keyCode===36)o=this["findLineBoundary"+a](this[i]);else return this[i]+=a==="Left"?-1:1,!0;if(typeof o!==void 0&&this[i]!==o)return this[i]=o,!0},_moveLeft:function(c,i){return this._move(c,i,"Left")},_moveRight:function(c,i){return this._move(c,i,"Right")},moveCursorLeftWithoutShift:function(c){var i=!0;return this._selectionDirection="left",this.selectionEnd===this.selectionStart&&this.selectionStart!==0&&(i=this._moveLeft(c,"selectionStart")),this.selectionEnd=this.selectionStart,i},moveCursorLeftWithShift:function(c){if(this._selectionDirection==="right"&&this.selectionStart!==this.selectionEnd)return this._moveLeft(c,"selectionEnd");if(this.selectionStart!==0)return this._selectionDirection="left",this._moveLeft(c,"selectionStart")},moveCursorRight:function(c){this.selectionStart>=this._text.length&&this.selectionEnd>=this._text.length||this._moveCursorLeftOrRight("Right",c)},_moveCursorLeftOrRight:function(c,i){var a="moveCursor"+c+"With";this._currentCursorOpacity=1,i.shiftKey?a+="Shift":a+="outShift",this[a](i)&&(this.abortCursorAnimation(),this.initDelayedCursor(),this._fireSelectionChanged(),this._updateTextarea())},moveCursorRightWithShift:function(c){if(this._selectionDirection==="left"&&this.selectionStart!==this.selectionEnd)return this._moveRight(c,"selectionStart");if(this.selectionEnd!==this._text.length)return this._selectionDirection="right",this._moveRight(c,"selectionEnd")},moveCursorRightWithoutShift:function(c){var i=!0;return this._selectionDirection="right",this.selectionStart===this.selectionEnd?(i=this._moveRight(c,"selectionStart"),this.selectionEnd=this.selectionStart):this.selectionStart=this.selectionEnd,i},removeChars:function(c,i){typeof i=="undefined"&&(i=c+1),this.removeStyleFromTo(c,i),this._text.splice(c,i-c),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()},insertChars:function(c,i,a,o){typeof o=="undefined"&&(o=a),o>a&&this.removeStyleFromTo(a,o);var t=u.util.string.graphemeSplit(c);this.insertNewStyleBlock(t,a,i),this._text=[].concat(this._text.slice(0,a),t,this._text.slice(o)),this.text=this._text.join(""),this.set("dirty",!0),this._shouldClearDimensionCache()&&(this.initDimensions(),this.setCoords()),this._removeExtraneousStyles()}});(function(){var c=u.util.toFixed,i=/ +/g;u.util.object.extend(u.Text.prototype,{_toSVG:function(){var a=this._getSVGLeftTopOffsets(),o=this._getSVGTextAndBg(a.textTop,a.textLeft);return this._wrapSVGTextAndBg(o)},toSVG:function(a){return this._createBaseSVGMarkup(this._toSVG(),{reviver:a,noStyle:!0,withShadow:!0})},_getSVGLeftTopOffsets:function(){return{textLeft:-this.width/2,textTop:-this.height/2,lineTop:this.getHeightOfLine(0)}},_wrapSVGTextAndBg:function(a){var o=!0,t=this.getSvgTextDecoration(this);return[a.textBgRects.join(""),' <text xml:space="preserve" ',this.fontFamily?'font-family="'+this.fontFamily.replace(/"/g,"'")+'" ':"",this.fontSize?'font-size="'+this.fontSize+'" ':"",this.fontStyle?'font-style="'+this.fontStyle+'" ':"",this.fontWeight?'font-weight="'+this.fontWeight+'" ':"",t?'text-decoration="'+t+'" ':"",'style="',this.getSvgStyles(o),'"',this.addPaintOrder()," >",a.textSpans.join(""),`</text>
`]},_getSVGTextAndBg:function(a,o){var t=[],r=[],e=a,s;this._setSVGBg(r);for(var h=0,n=this._textLines.length;h<n;h++)s=this._getLineLeftOffset(h),(this.textBackgroundColor||this.styleHas("textBackgroundColor",h))&&this._setSVGTextLineBg(r,h,o+s,e),this._setSVGTextLineText(t,h,o+s,e),e+=this.getHeightOfLine(h);return{textSpans:t,textBgRects:r}},_createTextCharSpan:function(a,o,t,r){var e=a!==a.trim()||a.match(i),s=this.getSvgSpanStyles(o,e),h=s?'style="'+s+'"':"",n=o.deltaY,l="",f=u.Object.NUM_FRACTION_DIGITS;return n&&(l=' dy="'+c(n,f)+'" '),['<tspan x="',c(t,f),'" y="',c(r,f),'" ',l,h,">",u.util.string.escapeXml(a),"</tspan>"].join("")},_setSVGTextLineText:function(a,o,t,r){var e=this.getHeightOfLine(o),s=this.textAlign.indexOf("justify")!==-1,h,n,l="",f,d,g=0,m=this._textLines[o],p;r+=e*(1-this._fontSizeFraction)/this.lineHeight;for(var _=0,w=m.length-1;_<=w;_++)p=_===w||this.charSpacing,l+=m[_],f=this.__charBounds[o][_],g===0?(t+=f.kernedWidth-f.width,g+=f.width):g+=f.kernedWidth,s&&!p&&this._reSpaceAndTab.test(m[_])&&(p=!0),p||(h=h||this.getCompleteStyleDeclaration(o,_),n=this.getCompleteStyleDeclaration(o,_+1),p=this._hasStyleChangedForSvg(h,n)),p&&(d=this._getStyleDeclaration(o,_)||{},a.push(this._createTextCharSpan(l,d,t,r)),l="",h=n,t+=g,g=0)},_pushTextBgRect:function(a,o,t,r,e,s){var h=u.Object.NUM_FRACTION_DIGITS;a.push(" <rect ",this._getFillAttributes(o),' x="',c(t,h),'" y="',c(r,h),'" width="',c(e,h),'" height="',c(s,h),`"></rect>
`)},_setSVGTextLineBg:function(a,o,t,r){for(var e=this._textLines[o],s=this.getHeightOfLine(o)/this.lineHeight,h=0,n=0,l,f,d=this.getValueOfPropertyAt(o,0,"textBackgroundColor"),g=0,m=e.length;g<m;g++)l=this.__charBounds[o][g],f=this.getValueOfPropertyAt(o,g,"textBackgroundColor"),f!==d?(d&&this._pushTextBgRect(a,d,t+n,r,h,s),n=l.left,h=l.width,d=f):h+=l.kernedWidth;f&&this._pushTextBgRect(a,f,t+n,r,h,s)},_getFillAttributes:function(a){var o=a&&typeof a=="string"?new u.Color(a):"";return!o||!o.getSource()||o.getAlpha()===1?'fill="'+a+'"':'opacity="'+o.getAlpha()+'" fill="'+o.setAlpha(1).toRgb()+'"'},_getSVGLineTopOffset:function(a){for(var o=0,t=0,r=0;r<a;r++)o+=this.getHeightOfLine(r);return t=this.getHeightOfLine(r),{lineTop:o,offset:(this._fontSizeMult-this._fontSizeFraction)*t/(this.lineHeight*this._fontSizeMult)}},getSvgStyles:function(a){var o=u.Object.prototype.getSvgStyles.call(this,a);return o+" white-space: pre;"}})})();(function(c){"use strict";var i=c.fabric||(c.fabric={});i.Textbox=i.util.createClass(i.IText,i.Observable,{type:"textbox",minWidth:20,dynamicMinWidth:2,__cachedLines:null,lockScalingFlip:!0,noScaleCache:!1,_dimensionAffectingProps:i.Text.prototype._dimensionAffectingProps.concat("width"),_wordJoiners:/[ \t\r]/,splitByGrapheme:!1,initDimensions:function(){this.__skipDimension||(this.isEditing&&this.initDelayedCursor(),this.clearContextTop(),this._clearCache(),this.dynamicMinWidth=0,this._styleMap=this._generateStyleMap(this._splitText()),this.dynamicMinWidth>this.width&&this._set("width",this.dynamicMinWidth),this.textAlign.indexOf("justify")!==-1&&this.enlargeSpaces(),this.height=this.calcTextHeight(),this.saveState({propertySet:"_dimensionAffectingProps"}))},_generateStyleMap:function(a){for(var o=0,t=0,r=0,e={},s=0;s<a.graphemeLines.length;s++)a.graphemeText[r]===`
`&&s>0?(t=0,r++,o++):!this.splitByGrapheme&&this._reSpaceAndTab.test(a.graphemeText[r])&&s>0&&(t++,r++),e[s]={line:o,offset:t},r+=a.graphemeLines[s].length,t+=a.graphemeLines[s].length;return e},styleHas:function(a,o){if(this._styleMap&&!this.isWrapping){var t=this._styleMap[o];t&&(o=t.line)}return i.Text.prototype.styleHas.call(this,a,o)},isEmptyStyles:function(a){if(!this.styles)return!0;var o=0,t=a+1,r,e,s=!1,h=this._styleMap[a],n=this._styleMap[a+1];h&&(a=h.line,o=h.offset),n&&(t=n.line,s=t===a,r=n.offset),e=typeof a=="undefined"?this.styles:{line:this.styles[a]};for(var l in e)for(var f in e[l])if(f>=o&&(!s||f<r))for(var d in e[l][f])return!1;return!0},_getStyleDeclaration:function(a,o){if(this._styleMap&&!this.isWrapping){var t=this._styleMap[a];if(!t)return null;a=t.line,o=t.offset+o}return this.callSuper("_getStyleDeclaration",a,o)},_setStyleDeclaration:function(a,o,t){var r=this._styleMap[a];a=r.line,o=r.offset+o,this.styles[a][o]=t},_deleteStyleDeclaration:function(a,o){var t=this._styleMap[a];a=t.line,o=t.offset+o,delete this.styles[a][o]},_getLineStyle:function(a){var o=this._styleMap[a];return!!this.styles[o.line]},_setLineStyle:function(a){var o=this._styleMap[a];this.styles[o.line]={}},_wrapText:function(a,o){var t=[],r;for(this.isWrapping=!0,r=0;r<a.length;r++)t=t.concat(this._wrapLine(a[r],r,o));return this.isWrapping=!1,t},_measureWord:function(a,o,t){var r=0,e,s=!0;t=t||0;for(var h=0,n=a.length;h<n;h++){var l=this._getGraphemeBox(a[h],o,h+t,e,s);r+=l.kernedWidth,e=a[h]}return r},_wrapLine:function(a,o,t,B){var e=0,s=this.splitByGrapheme,h=[],n=[],l=s?i.util.string.graphemeSplit(a):a.split(this._wordJoiners),f="",d=0,g=s?"":" ",m=0,p=0,_=0,w=!0,D=this._getWidthOfCharSpacing(),B=B||0;l.length===0&&l.push([]),t-=B;for(var N=0;N<l.length;N++)f=s?l[N]:i.util.string.graphemeSplit(l[N]),m=this._measureWord(f,o,d),d+=f.length,e+=p+m-D,e>t&&!w?(h.push(n),n=[],e=m,w=!0):e+=D,!w&&!s&&n.push(g),n=n.concat(f),p=s?0:this._measureWord([g],o,d),d++,w=!1,m>_&&(_=m);return N&&h.push(n),_+B>this.dynamicMinWidth&&(this.dynamicMinWidth=_-D+B),h},isEndOfWrapping:function(a){return!this._styleMap[a+1]||this._styleMap[a+1].line!==this._styleMap[a].line},missingNewlineOffset:function(a){return this.splitByGrapheme?this.isEndOfWrapping(a)?1:0:1},_splitTextIntoLines:function(a){for(var o=i.Text.prototype._splitTextIntoLines.call(this,a),t=this._wrapText(o.lines,this.width),r=new Array(t.length),e=0;e<t.length;e++)r[e]=t[e].join("");return o.lines=r,o.graphemeLines=t,o},getMinWidth:function(){return Math.max(this.minWidth,this.dynamicMinWidth)},_removeExtraneousStyles:function(){var a={};for(var o in this._styleMap)this._textLines[o]&&(a[this._styleMap[o].line]=1);for(var o in this.styles)a[o]||delete this.styles[o]},toObject:function(a){return this.callSuper("toObject",["minWidth","splitByGrapheme"].concat(a))}}),i.Textbox.fromObject=function(a,o){return i.Object._fromObject("Textbox",a,o,"text")}})(F);(function(){var c=u.controlsUtils,i=c.scaleSkewCursorStyleHandler,a=c.scaleCursorStyleHandler,o=c.scalingEqually,t=c.scalingYOrSkewingX,r=c.scalingXOrSkewingY,e=c.scaleOrSkewActionName,s=u.Object.prototype.controls;if(s.ml=new u.Control({x:-.5,y:0,cursorStyleHandler:i,actionHandler:r,getActionName:e}),s.mr=new u.Control({x:.5,y:0,cursorStyleHandler:i,actionHandler:r,getActionName:e}),s.mb=new u.Control({x:0,y:.5,cursorStyleHandler:i,actionHandler:t,getActionName:e}),s.mt=new u.Control({x:0,y:-.5,cursorStyleHandler:i,actionHandler:t,getActionName:e}),s.tl=new u.Control({x:-.5,y:-.5,cursorStyleHandler:a,actionHandler:o}),s.tr=new u.Control({x:.5,y:-.5,cursorStyleHandler:a,actionHandler:o}),s.bl=new u.Control({x:-.5,y:.5,cursorStyleHandler:a,actionHandler:o}),s.br=new u.Control({x:.5,y:.5,cursorStyleHandler:a,actionHandler:o}),s.mtr=new u.Control({x:0,y:-.5,actionHandler:c.rotationWithSnapping,cursorStyleHandler:c.rotationStyleHandler,offsetY:-40,withConnection:!0,actionName:"rotate"}),u.Textbox){var h=u.Textbox.prototype.controls={};h.mtr=s.mtr,h.tr=s.tr,h.br=s.br,h.tl=s.tl,h.bl=s.bl,h.mt=s.mt,h.mb=s.mb,h.mr=new u.Control({x:.5,y:0,actionHandler:c.changeWidth,cursorStyleHandler:i,actionName:"resizing"}),h.ml=new u.Control({x:-.5,y:0,actionHandler:c.changeWidth,cursorStyleHandler:i,actionName:"resizing"})}})()});var re=Et(vt());var ht=Et(vt());var yt=class{constructor(i,a=!1){this.detectedElement=i;this.includeColorDes=a}escapeString(i){return i.replace(/["\\\n\r\u2028\u2029]/g,a=>`\\${a}`)}getCodeString(){let{name:i,text:a,colors:o}=this.detectedElement;return[`element().special("${this.escapeString(i)}")`,a&&`.withText("${this.escapeString(a)}")`,this.includeColorDes&&(o==null?void 0:o[0])&&`.colored("${this.escapeString(o[0])}")`].filter(Boolean).join("")}};var Bt=Et(vt());function Mt(c,i="1",a=100){return o=>new Promise(t=>{o.animate("opacity",i,{duration:a,onChange:c.renderAll.bind(c),onComplete:()=>t(o)})})}var Wt=c=>new Promise(i=>Bt.fabric.loadSVGFromURL(c,a=>i(a[0]))),Xt=(c,i)=>a=>{let o=c.getPointer(i.e);a.left=o.x+20,a.top=o.y-26/2;let t=Math.round(25/c.getZoom()),r=Math.round(t*a.width/a.height);return a.fill="#0E9F6E",a.scaleToWidth(r,!0),a.scaleToHeight(t,!0),a.opacity=0,a},Yt=c=>i=>{c.remove(i)},zt=c=>i=>(c.add(i),i);var me=`
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 512 512">
<!--!Font Awesome Free 6.5.2 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2024 Fonticons, Inc.-->
<path
d="M256 0c17.7 0 32 14.3 32 32V42.4c93.7 13.9 167.7 88 181.6 181.6H480c17.7 0 32 14.3 32 32s-14.3 32-32 32H469.6c-13.9 93.7-88 167.7-181.6 181.6V480c0 17.7-14.3 32-32 32s-32-14.3-32-32V469.6C130.3 455.7 56.3 381.7 42.4 288H32c-17.7 0-32-14.3-32-32s14.3-32 32-32H42.4C56.3 130.3 130.3 56.3 224 42.4V32c0-17.7 14.3-32 32-32zM107.4 288c12.5 58.3 58.4 104.1 116.6 116.6V384c0-17.7 14.3-32 32-32s32 14.3 32 32v20.6c58.3-12.5 104.1-58.4 116.6-116.6H384c-17.7 0-32-14.3-32-32s14.3-32 32-32h20.6C392.1 165.7 346.3 119.9 288 107.4V128c0 17.7-14.3 32-32 32s-32-14.3-32-32V107.4C165.7 119.9 119.9 165.7 107.4 224H128c17.7 0 32 14.3 32 32s-14.3 32-32 32H107.4zM256 224a32 32 0 1 1 0 64 32 32 0 1 1 0-64z" />
</svg>
`,Ht="svg",pe="rect",Nt="tooltip",_t=class c{constructor(i=new ht.fabric.Canvas("canvas",{fireRightClick:!0,stopContextMenu:!0}),a){at(this,"canvas");at(this,"canvasWrapper");at(this,"currentMousePoint");this.canvas=i,this.canvasWrapper=a,this.canvas.selection=!1,this.registerMouseEvents()}registerMouseEvents(){let i=this;this.canvas.on("mouse:move",a=>i.onMouseMove(a)),this.canvas.on("mouse:over",a=>i.onMouseOver(a)),this.canvas.on("mouse:out",a=>i.onMouseOut(a)),this.canvas.on("mouse:up",a=>i.onMouseUp(a))}destroy(){this.canvas.off("mouse:move"),this.canvas.off("mouse:over"),this.canvas.off("mouse:out"),this.canvas.off("mouse:up"),this.canvas.dispose(),this.canvas=void 0}onMouseMove(i){this.currentMousePoint=this.canvas.getPointer(i.e)}isRect(i){var a,o;return((o=(a=i.target)==null?void 0:a.data)==null?void 0:o.type)===pe}isSvg(i){var a,o;return((o=(a=i.target)==null?void 0:a.data)==null?void 0:o.type)===Ht}drawClipboardCheck(i){return gt(this,null,function*(){let a="PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzODQgNTEyIj48IS0tIEZvbnQgQXdlc29tZSBGcmVlIDUuMTUuMiBieSBAZm9udGF3ZXNvbWUgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbSBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZS9mcmVlIChJY29uczogQ0MgQlkgNC4wLCBGb250czogU0lMIE9GTCAxLjEsIENvZGU6IE1JVCBMaWNlbnNlKSAtLT48cGF0aCBkPSJNMzM2IDY0aC04MGMwLTM1LjMtMjguNy02NC02NC02NHMtNjQgMjguNy02NCA2NEg0OEMyMS41IDY0IDAgODUuNSAwIDExMnYzNTJjMCAyNi41IDIxLjUgNDggNDggNDhoMjg4YzI2LjUgMCA0OC0yMS41IDQ4LTQ4VjExMmMwLTI2LjUtMjEuNS00OC00OC00OHpNMTkyIDQwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0LTI0LTEwLjctMjQtMjQgMTAuNy0yNCAyNC0yNHptMTIxLjIgMjMxLjhsLTE0MyAxNDEuOGMtNC43IDQuNy0xMi4zIDQuNi0xNy0uMWwtODIuNi04My4zYy00LjctNC43LTQuNi0xMi4zLjEtMTdMOTkuMSAyODVjNC43LTQuNyAxMi4zLTQuNiAxNyAuMWw0NiA0Ni40IDEwNi0xMDUuMmM0LjctNC43IDEyLjMtNC42IDE3IC4xbDI4LjIgMjguNGM0LjcgNC44IDQuNiAxMi4zLS4xIDE3eiIvPjwvc3ZnPg==";try{let o=yield Wt("data:image/svg+xml;base64,"+a);zt(this.canvas)(o),Xt(this.canvas,i)(o),yield Mt(this.canvas,"1")(o),yield new Promise(t=>setTimeout(t,200)),yield Mt(this.canvas,"0")(o),Yt(this.canvas)(o)}catch(o){console.error("Error drawing clipboard check:",o)}})}copyToClipboard(i){navigator.clipboard.writeText(i).then()}onMouseUp(i){var a;if(this.isRect(i)){let o=(a=i.target)==null?void 0:a.data.detectedObject,r=new yt(o).getCodeString();this.copyToClipboard(r),this.drawClipboardCheck(i);return}}onMouseOut(i){var a,o,t;if(this.isRect(i)&&((a=i.target)==null||a.set("stroke","red")),this.isSvg(i)&&((o=i.target)==null||o.set("fill","red")),this.isRect(i)||this.isSvg(i)){let r=this.findObjectByTypeAndIndex(Nt,(t=i.target)==null?void 0:t.data.index);this.canvas.remove(r),this.canvas.renderAll();return}}rightBottomCorner(){return{x:ht.fabric.util.invertTransform(this.canvas.viewportTransform)[4]+this.canvas.width/this.canvas.getZoom(),y:ht.fabric.util.invertTransform(this.canvas.viewportTransform)[5]+this.canvas.height/this.canvas.getZoom()}}onMouseOver(i){var a,o,t,r,e,s;this.isRect(i)&&(this.currentMousePoint=this.canvas.getPointer(i.e),(a=i.target)==null||a.set("stroke","green"),this.drawDetectedElementTooltip((o=i.target)==null?void 0:o.data.index,(t=i.target)==null?void 0:t.data.detectedObject),this.canvas.renderAll()),this.isSvg(i)&&(this.currentMousePoint=this.canvas.getPointer(i.e),(r=i.target)==null||r.set("fill","green"),this.drawActionTooltip((e=i.target)==null?void 0:e.data.index,(s=i.target)==null?void 0:s.data.action),this.canvas.renderAll())}findObjectByTypeAndIndex(i,a){return this.canvas.getObjects().find(o=>{var t,r;return((t=o.data)==null?void 0:t.index)===a&&((r=o.data)==null?void 0:r.type)===i})}static imageStrToFabricImage(i){return new Promise((a,o)=>{ht.fabric.Image.fromURL(i,t=>{if(t.getElement()===void 0){o(t);return}a(t)})})}setCanvasSizeToImageSize(i){let a=this.canvasWrapper.clientWidth;this.canvas.setWidth(a),this.canvas.setHeight(a*i.height/i.width),this.canvas.setZoom(a/i.width)}drawImage(i,a){return gt(this,null,function*(){try{let o=yield c.imageStrToFabricImage(i);if(this.canvas===void 0)return;this.setCanvasSizeToImageSize(o),o.lockMovementX=!0,o.lockMovementY=!0,o.lockScalingX=!0,o.lockScalingY=!0,o.hasControls=!1,o.selectable=!1,o.hoverCursor="default",a&&this.canvas.add(o)}catch(o){console.error("Error drawing image:",o)}})}placeObjectAroundPoint(i,a){return i.left=a.x-i.width/2,i.left<=0&&(i.left=0),i.left+i.width>this.rightBottomCorner().x&&(i.left=this.rightBottomCorner().x-i.width),i.top=a.y+20/this.canvas.getZoom(),i.top+i.height>this.rightBottomCorner().y&&(i.top=a.y-i.height-10),i}placeObjectAroundMouse(i){return this.placeObjectAroundPoint(i,this.currentMousePoint)}buildTooltip(i,a){let o=new ht.fabric.Text(i,{fontFamily:"Source Sans Pro",fontSize:Math.round(16/this.canvas.getZoom()),originX:"center",originY:"center",fill:"white",lockMovementX:!0,lockMovementY:!0,lockScalingX:!0,lockScalingY:!0,lockRotation:!0,hasControls:!1}),t=new ht.fabric.Rect({fill:"rgba(0,0,0, 0.9)",originX:"center",originY:"center",rx:1,ry:1,stroke:"black",strokeWidth:1,strokeUniform:!0,width:o.getScaledWidth()+4,height:o.getScaledHeight()+4});return new ht.fabric.Group([t,o],{data:{type:Nt,index:a},visible:!0,lockMovementX:!0,lockMovementY:!0,lockScalingX:!0,lockScalingY:!0,lockRotation:!0,hasControls:!1})}drawActionTooltip(i,a){let o={Index:i.toString(),Position:`(x: ${a.position.x}, y: ${a.position.y})`,"Input Event":a.inputEvent};a.text&&(o.Text=a.text);let t=Object.entries(o).map(([e,s])=>`${e}: ${s}`).join(`
`),r=this.buildTooltip(t,i);this.placeObjectAroundMouse(r),this.canvas.add(r)}drawDetectedElementTooltip(i,a){let o=a.name.replace(/_/g," ");a.hasText()&&(o+=": "+a.text),a.hasSimilarityScore()&&(o+=`, match result: ${a.similarityScore}%`),a.hasColors()&&(o+=", colors: "+a.colors.join(", "));let t=this.buildTooltip(o,i);this.placeObjectAroundMouse(t),this.canvas.add(t)}drawDetectedElementRect(i,a){let o=new ht.fabric.Rect({data:{index:i,type:"rect",detectedObject:a},top:a.bbox.ymin,left:a.bbox.xmin,width:a.bbox.width,height:a.bbox.height,stroke:"red",strokeWidth:1,strokeUniform:!0,fill:"rgba(0,0,0,0)",lockMovementX:!0,lockMovementY:!0,lockScalingX:!0,lockScalingY:!0,lockRotation:!0,hasControls:!1,hoverCursor:a.hasText()?"pointer":"default"});this.canvas.add(o)}drawActionSvg(i,a){ht.fabric.loadSVGFromString(me,(o,t)=>{let r=ht.fabric.util.groupSVGElements(o,t),s=this.canvas.width/100/r.width;r.scale(s);let h=a.position,n=r.width*s,l=r.height*s;r.set({data:{index:i,type:Ht,action:a},left:h.x-n/2,top:h.y-l/2,fill:"red",lockMovementX:!0,lockMovementY:!0,lockScalingX:!0,lockScalingY:!0,lockRotation:!0,hasControls:!1,hoverCursor:"pointer"}),this.canvas.add(r)})}resizeCanvas(){if(this.canvas===void 0)return;let i=this.canvasWrapper.clientWidth,a=this.canvas.getWidth()/this.canvas.getHeight(),o=i,t=o/this.canvas.getWidth(),r=this.canvas.getZoom()*t;this.canvas.setDimensions({width:o,height:o/a}),this.canvas.setViewportTransform([r,0,0,r,0,0])}};var xt=class{constructor(i,a,o,t){this.xmin=i;this.ymin=a;this.xmax=o;this.ymax=t}get width(){return this.xmax-this.xmin}get height(){return this.ymax-this.ymin}get size(){return this.width*this.height}};var Ct=class c{constructor(i,a,o,t,r=0){this.name=i;this.text=a;this.bbox=o;this.colors=t;this.similarityScore=r}hasText(){return this.text.length>0}hasColors(){var i;return((i=this.colors)==null?void 0:i.join("").length)>0}hasSimilarityScore(){return this.similarityScore>0}isIcon(){return this.name==="icon"}static fromJson(i){return new c(i.name,i.text,new xt(i.bndbox.xmin,i.bndbox.ymin,i.bndbox.xmax,i.bndbox.ymax),i.colors,i.similarityScore)}};var ve=typeof global=="object"&&global&&global.Object===Object&&global,Ut=ve;var ye=typeof self=="object"&&self&&self.Object===Object&&self,_e=Ut||ye||Function("return this")(),bt=_e;var xe=bt.Symbol,ut=xe;var Gt=Object.prototype,Ce=Gt.hasOwnProperty,be=Gt.toString,mt=ut?ut.toStringTag:void 0;function Se(c){var i=Ce.call(c,mt),a=c[mt];try{c[mt]=void 0;var o=!0}catch(r){}var t=be.call(c);return o&&(i?c[mt]=a:delete c[mt]),t}var Vt=Se;var we=Object.prototype,Te=we.toString;function Oe(c){return Te.call(c)}var qt=Oe;var Ee="[object Null]",Pe="[object Undefined]",Kt=ut?ut.toStringTag:void 0;function ke(c){return c==null?c===void 0?Pe:Ee:Kt&&Kt in Object(c)?Vt(c):qt(c)}var Jt=ke;function De(c){return c!=null&&typeof c=="object"}var Qt=De;var Me="[object Symbol]";function Ae(c){return typeof c=="symbol"||Qt(c)&&Jt(c)==Me}var Zt=Ae;var Fe=/\s/;function Le(c){for(var i=c.length;i--&&Fe.test(c.charAt(i)););return i}var $t=Le;var Ie=/^\s+/;function je(c){return c&&c.slice(0,$t(c)+1).replace(Ie,"")}var te=je;function Re(c){var i=typeof c;return c!=null&&(i=="object"||i=="function")}var ft=Re;var ee=NaN,Be=/^[-+]0x[0-9a-f]+$/i,We=/^0b[01]+$/i,Xe=/^0o[0-7]+$/i,Ye=parseInt;function ze(c){if(typeof c=="number")return c;if(Zt(c))return ee;if(ft(c)){var i=typeof c.valueOf=="function"?c.valueOf():c;c=ft(i)?i+"":i}if(typeof c!="string")return c===0?c:+c;c=te(c);var a=We.test(c);return a||Xe.test(c)?Ye(c.slice(2),a?2:8):Be.test(c)?ee:+c}var At=ze;var He=function(){return bt.Date.now()},St=He;var Ne="Expected a function",Ue=Math.max,Ge=Math.min;function Ve(c,i,a){var o,t,r,e,s,h,n=0,l=!1,f=!1,d=!0;if(typeof c!="function")throw new TypeError(Ne);i=At(i)||0,ft(a)&&(l=!!a.leading,f="maxWait"in a,r=f?Ue(At(a.maxWait)||0,i):r,d="trailing"in a?!!a.trailing:d);function g(z){var H=o,U=t;return o=t=void 0,n=z,e=c.apply(U,H),e}function m(z){return n=z,s=setTimeout(w,i),l?g(z):e}function p(z){var H=z-h,U=z-n,K=i-H;return f?Ge(K,r-U):K}function _(z){var H=z-h,U=z-n;return h===void 0||H>=i||H<0||f&&U>=r}function w(){var z=St();if(_(z))return D(z);s=setTimeout(w,p(z))}function D(z){return s=void 0,d&&o?g(z):(o=t=void 0,e)}function B(){s!==void 0&&clearTimeout(s),n=0,o=h=t=s=void 0}function N(){return s===void 0?e:D(St())}function G(){var z=St(),H=_(z);if(o=arguments,t=this,h=z,H){if(s===void 0)return m(h);if(f)return clearTimeout(s),s=setTimeout(w,i),g(h)}return s===void 0&&(s=setTimeout(w,i)),e}return G.cancel=B,G.flush=N,G}var ie=Ve;var qe="Expected a function";function Ke(c,i,a){var o=!0,t=!0;if(typeof c!="function")throw new TypeError(qe);return ft(a)&&(o="leading"in a?!!a.leading:o,t="trailing"in a?!!a.trailing:t),ie(c,i,{leading:o,maxWait:i,trailing:t})}var wt=Ke;var Tt=class extends HTMLElement{constructor(){super();at(this,"imagestr","");at(this,"shouldrenderimage",!0);at(this,"detectedobjects",[]);at(this,"actions",[]);at(this,"canvas");at(this,"canvasElement");at(this,"canvasWrapper");at(this,"resizeObserver");at(this,"previousWidth",0);at(this,"previousHeight",0);at(this,"startDrawingThrottled",wt(()=>{this.startDrawing()},150));this.attachShadow({mode:"open"})}connectedCallback(){this.render()}disconnectedCallback(){this.destroyCanvas()}render(){this.shadowRoot.innerHTML=`
<div id="canvas-wrapper">
<canvas id='canvas'></canvas>
</div>
`,this.canvasWrapper=this.shadowRoot.getElementById("canvas-wrapper"),this.canvasElement=this.shadowRoot.getElementById("canvas"),this.resizeObserver=new ResizeObserver(wt(()=>{this.previousWidth===this.canvasWrapper.clientWidth&&this.previousHeight===this.canvasWrapper.clientHeight||(this.previousWidth=this.canvasWrapper.clientWidth,this.previousHeight=this.canvasWrapper.clientHeight,this.startDrawing())},150)),this.resizeObserver.observe(this.canvasWrapper),this.startDrawingThrottled()}startDrawing(){!this.isConnected||!this.canvasWrapper||!this.canvasElement||this.imagestr!==""&&(this.canvas&&this.destroyCanvas(),this.initCanvas(),this.renderCanvas())}initCanvas(){try{this.canvas=new _t(new re.fabric.Canvas(this.canvasElement,{fireRightClick:!0,stopContextMenu:!0}),this.canvasWrapper)}catch(a){console.error("Error initializing canvas:",a)}}destroyCanvas(){var a;(a=this.canvas)==null||a.destroy()}renderCanvas(){return gt(this,null,function*(){var a;try{yield(a=this.canvas)==null?void 0:a.drawImage(this.imagestr,this.shouldrenderimage),this.drawRects(),this.drawActions()}catch(o){console.error("Error rendering canvas:",o)}})}drawActions(){this.actions.forEach((a,o)=>{var t;try{(t=this.canvas)==null||t.drawActionSvg(o,a)}catch(r){console.error(`Error drawing action ${o}:`,r)}})}drawRects(){Array.from(this.detectedobjects).sort((o,t)=>t.bbox.size-o.bbox.size).forEach((o,t)=>{var r;try{(r=this.canvas)==null||r.drawDetectedElementRect(t,o)}catch(e){console.error(`Error drawing rect ${t}:`,e)}})}attributeChangedCallback(a,o,t){if(o!==t){switch(a){case"imagestr":this.imagestr=t!=null?t:"";break;case"shouldrenderimage":this.shouldrenderimage=t==="true";break;case"detectedobjects":this.detectedobjects=t?JSON.parse(t).map(Ct.fromJson):[];break;case"actions":this.actions=t?JSON.parse(t):[];break}this.startDrawingThrottled()}}};at(Tt,"observedAttributes",["imagestr","shouldrenderimage","detectedobjects","actions"]);customElements.define("bounding-box-renderer",Tt);})();
/*! Bundled license information:
fabric-pure-browser/dist/fabric.js:
(*! Fabric.js Copyright 2008-2015, Printio (Juriy Zaytsev, Maxim Chernyak) *)
lodash-es/lodash.js:
(**
* @license
* Lodash (Custom Build) <https://lodash.com/>
* Build: `lodash modularize exports="es" -o ./`
* Copyright OpenJS Foundation and other contributors <https://openjsf.org/>
* Released under MIT license <https://lodash.com/license>
* Based on Underscore.js 1.8.3 <http://underscorejs.org/LICENSE>
* Copyright Jeremy Ashkenas, DocumentCloud and Investigative Reporters & Editors
*)
*/
//# sourceMappingURL=bounding-box-renderer.js.map
</script>
</body>
</html>