mirror of
https://github.com/exogen/t2-model-skinner.git
synced 2026-01-19 19:24:44 +00:00
2 lines
283 KiB
JavaScript
2 lines
283 KiB
JavaScript
(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[405],{8312:function(t,e,i){(window.__NEXT_P=window.__NEXT_P||[]).push(["/",function(){return i(3125)}])},3125:function(t,e,i){"use strict";let r;i.r(e),i.d(e,{default:function(){return HomePage}});var n=i(5893),a=i(9008),o=i.n(a),s=i(7294),l=i(4919),c=i(1752),h=i.n(c);let u=s.createContext(null);u.displayName="CanvasContext";var src_useCanvas=function(t){var e;let i=(0,s.useContext)(u);if(!i)throw Error("No CanvasContext.Provider");return void 0===t?i:null==t?{}:null!==(e=i.canvases[t])&&void 0!==e?e:{}};let f=s.createContext(null);function useTools(){let t=(0,s.useContext)(f);if(!t)throw Error("No ToolsContext.Provider");return t}f.displayName="ToolsContext";var d=i(5237),g=i(6863),p=i(7696),v=i(9042),m=i(2091),y=i(1054),b=i(7094),x=i(8908);let _=s.createContext(null);function useWarrior(){let t=(0,s.useContext)(_);if(!t)throw Error("No WarriorContext.Provider");return t}_.displayName="WarriorContext";let{publicRuntimeConfig:C}=h()(),{materials:w}=C;function CanvasTools(){var t;let e=(0,s.useRef)(null),i=(0,s.useRef)(null),[r,a]=(0,s.useState)("vl2"),{activeCanvas:o,backgroundColor:c,setBackgroundColor:h,selectedObjects:u,lockedObjects:f,lockSelection:_,unlockSelection:C,bringForward:S,sendBackward:T,duplicate:j,deleteSelection:k,undo:O,redo:P,canUndo:F,canRedo:E,copyToMetallic:D,brushColor:M,setBrushColor:A,brushSize:I,setBrushSize:L,hueRotate:B,setHueRotate:R,saturation:X,setSaturation:W,brightness:Y,setBrightness:z,contrast:U,setContrast:H,layerMode:N,setLayerMode:V,activeCanvasType:G,addImages:q,exportSkin:K,selectedExportMaterials:J,setSelectedExportMaterials:Z}=useTools(),{actualModel:$}=useWarrior(),Q=w[$],{canvas:tt,isDrawingMode:te,setDrawingMode:ti}=src_useCanvas(o),[tr,tn]=(0,s.useState)(!1),ta=tr?"⌘":"Ctrl ",[to,ts]=(0,s.useState)(null),[tl,tc]=(0,s.useState)(null),[th,tu]=(0,s.useState)(!1),[tf,td]=(0,s.useState)(!1),{styles:tg,attributes:tp}=(0,d.D)(to,tl,{modifiers:[{name:"offset",options:{offset:[0,10]}}]}),[tv,tm]=(0,s.useState)(!1),[ty,tb]=(0,s.useState)(null),{styles:tx,attributes:t_}=(0,d.D)(ty,tl,{modifiers:[{name:"offset",options:{offset:[0,10]}}]}),tC=!!u.length&&u.every(t=>f.has(t)),tw=u.length>0,tS=u.filter(t=>t instanceof l.fabric.Image).length>0,handleBackgroundColorChange=t=>{h(t.target.value)};return(0,s.useEffect)(()=>{try{let t=localStorage.getItem("exportFileType");switch(t){case"vl2":case"png":a(t)}}catch(t){}},[]),(0,s.useEffect)(()=>{navigator.platform&&navigator.platform.startsWith("Mac")?tn(!0):navigator.userAgent.match(/\(Macintosh;/)&&tn(!0)},[]),(0,s.useEffect)(()=>{tl&&tl.focus()},[tl]),(0,n.jsxs)("div",{className:"CanvasTools",children:[(0,n.jsxs)("div",{className:"CanvasBackgroundColor",children:[(0,n.jsx)("input",{className:"ColorSwatch",type:"radio",name:"backgroundColor",id:"canvasBackgroundColorBlack",value:"black",checked:"black"===c,onChange:handleBackgroundColorChange}),(0,n.jsx)("label",{htmlFor:"canvasBackgroundColorBlack",children:(0,n.jsx)("span",{className:"HiddenLabel",children:"Black"})}),(0,n.jsx)("input",{className:"ColorSwatch",type:"radio",name:"backgroundColor",id:"canvasBackgroundColorMagenta",value:"magenta",checked:"magenta"===c,onChange:handleBackgroundColorChange}),(0,n.jsx)("label",{htmlFor:"canvasBackgroundColorMagenta",children:(0,n.jsx)("span",{className:"HiddenLabel",children:"Magenta"})}),(0,n.jsx)("input",{className:"ColorSwatch",type:"radio",name:"backgroundColor",id:"canvasBackgroundColorWhite",value:"white",checked:"white"===c,onChange:handleBackgroundColorChange}),(0,n.jsx)("label",{htmlFor:"canvasBackgroundColorWhite",children:(0,n.jsx)("span",{className:"HiddenLabel",children:"White"})})]}),(0,n.jsxs)("div",{className:"Buttons",children:["metallic"===G?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"ButtonGroup",children:[(0,n.jsx)("button",{className:"ButtonGroup",type:"button","data-active":te?void 0:"","aria-label":"Select Mode",title:"Select Mode (S)",onClick:()=>{ti(!1)},children:(0,n.jsx)(y.Pvc,{})}),(0,n.jsx)("button",{className:"ButtonGroup",type:"button",ref:ts,"data-active":te?"":void 0,"aria-label":"Paint Mode",title:"Paint Mode (P)",onClick:()=>{ti(!0),tu(t=>!t)},children:(0,n.jsx)(b.VUP,{})})]}),th?(0,n.jsx)("div",{className:"BrushToolsPopup",ref:tc,style:tg.popper,tabIndex:-1,onBlur:t=>{let e=t.relatedTarget,i=!e||!t.currentTarget.contains(e);i&&tu(!1)},...tp.popper,children:(0,n.jsxs)("div",{className:"Fields",children:[(0,n.jsxs)("div",{className:"Field",children:[(0,n.jsx)("label",{children:"Metallic Amount"}),(0,n.jsx)("div",{className:"SliderContainer",children:(0,n.jsx)(g.Z,{min:0,max:255,trackStyle:{display:"none"},value:M,onChange:t=>{Array.isArray(t)&&(t=t[0]),A(t)},handleStyle:{width:20,height:20,marginTop:-6,borderColor:"rgb(20, 105, 241)",background:"rgb(".concat(M,", ").concat(M,", ").concat(M,")"),opacity:1},railStyle:{height:8,border:"1px solid #555",background:"linear-gradient(to right, black 0%, white 100%)"}})})]}),(0,n.jsxs)("div",{className:"Field",children:[(0,n.jsx)("label",{children:"Brush Size"}),(0,n.jsx)("div",{className:"SliderContainer",children:(0,n.jsx)(g.Z,{min:1,max:50,trackStyle:{height:8,background:"#03fccf"},value:I,onChange:t=>{Array.isArray(t)&&(t=t[0]),L(t)},handleStyle:{width:20,height:20,marginTop:-6,borderColor:"#03fccf",background:"rgb(5, 69, 76)",opacity:1},railStyle:{height:8,border:"1px solid #555",background:"rgba(255, 255, 255, 0.3)"}})})]})]})}):null]}):null,(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("input",{ref:i,onChange:async t=>{let e=await new Promise((e,i)=>{var r;let n=null===(r=t.target.files)||void 0===r?void 0:r[0];if(n){let t=new FileReader;t.addEventListener("load",t=>{var i;e(null===(i=t.target)||void 0===i?void 0:i.result)}),t.readAsDataURL(n)}else i(Error("No input file provided."))});q([e])},type:"file",accept:".png, image/png",hidden:!0}),(0,n.jsx)("button",{type:"button","aria-label":"Add Image",title:"Add Image",onClick:()=>{i.current&&i.current.click()},children:(0,n.jsx)(x.yAv,{style:{fontSize:14}})}),(0,n.jsx)("button",{type:"button",ref:ts,"data-active":tf?"":void 0,"aria-label":"Filters",title:"Filters",disabled:tw&&!tS,onClick:()=>{td(t=>!t)},children:(0,n.jsx)(x.J76,{})}),tf?(0,n.jsx)("div",{className:"BrushToolsPopup",ref:tc,style:tg.popper,tabIndex:-1,onBlur:t=>{let e=t.relatedTarget,i=!e||!t.currentTarget.contains(e);i&&td(!1)},...tp.popper,children:(0,n.jsxs)("div",{className:"Fields",children:[(0,n.jsxs)("div",{className:"Field ApplyTo",children:[(0,n.jsx)("label",{children:"Layer:"}),(0,n.jsx)("ul",{children:u.length?(0,n.jsxs)("li",{children:[(0,n.jsx)("input",{type:"radio",name:"FilterLayer",value:"SelectedLayer",id:"FilterLayer-SelectedLayer",checked:"SelectedLayer"===N,onChange:()=>{V("SelectedLayer")}}),(0,n.jsxs)("label",{htmlFor:"FilterLayer-SelectedLayer",children:["selected (",u.length.toLocaleString(),")"]})]}):(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("li",{children:[(0,n.jsx)("input",{type:"radio",name:"FilterLayer",value:"BaseLayer",id:"FilterLayer-BaseLayer",checked:"BaseLayer"===N,onChange:()=>{V("BaseLayer")}})," ",(0,n.jsx)("label",{htmlFor:"FilterLayer-BaseLayer",children:"base"})]}),(0,n.jsxs)("li",{children:[(0,n.jsx)("input",{type:"radio",name:"FilterLayer",value:"AllLayers",id:"FilterLayer-AllLayers",checked:"AllLayers"===N,onChange:()=>{V("AllLayers")}}),(0,n.jsxs)("label",{htmlFor:"FilterLayer-AllLayers",children:["all (",null!==(t=null==tt?void 0:tt._objects.filter(t=>t instanceof l.fabric.Image).length.toLocaleString())&&void 0!==t?t:0,")"]})]})]})})]}),"color"===G?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"Field",children:[(0,n.jsxs)("label",{children:["Hue:"," ",(0,n.jsx)("strong",{children:null==B?"MULTIPLE VALUES":(0,n.jsxs)(n.Fragment,{children:[Math.round(180*B),"\xb0"]})})]}),(0,n.jsx)("div",{className:"SliderContainer",children:(0,n.jsx)(g.Z,{min:-180,max:180,startPoint:0,value:Math.round((null!=B?B:0)*180),onChange:t=>{Array.isArray(t)&&(t=t[0]),R(t/180)},trackStyle:{height:8,background:"#03fccf"},handleStyle:{width:20,height:20,marginTop:-6,borderColor:"#03fccf",background:"rgb(5, 69, 76)",opacity:1},railStyle:{height:8,border:"1px solid #555",background:"rgba(255, 255, 255, 0.3)"}})})]}),(0,n.jsxs)("div",{className:"Field",children:[(0,n.jsxs)("label",{children:["Saturation:"," ",(0,n.jsx)("strong",{children:null==X?"MULTIPLE VALUES":"".concat(Math.round(100*X+100),"%")})]}),(0,n.jsx)("div",{className:"SliderContainer",children:(0,n.jsx)(g.Z,{min:-100,max:100,startPoint:0,value:Math.round((null!=X?X:0)*100),onChange:t=>{Array.isArray(t)&&(t=t[0]),W(t/100)},trackStyle:{height:8,background:"#03fccf"},handleStyle:{width:20,height:20,marginTop:-6,borderColor:"#03fccf",background:"rgb(5, 69, 76)",opacity:1},railStyle:{height:8,border:"1px solid #555",background:"rgba(255, 255, 255, 0.3)"}})})]})]}):null,(0,n.jsxs)("div",{className:"Field",children:[(0,n.jsxs)("label",{children:["Brightness:"," ",(0,n.jsx)("strong",{children:null==Y?"MULTIPLE VALUES":"".concat(Math.round(100*Y+100),"%")})]}),(0,n.jsx)("div",{className:"SliderContainer",children:(0,n.jsx)(g.Z,{min:-100,max:100,startPoint:0,value:Math.round((null!=Y?Y:0)*100),onChange:t=>{Array.isArray(t)&&(t=t[0]),z(t/100)},trackStyle:{height:8,background:"#03fccf"},handleStyle:{width:20,height:20,marginTop:-6,borderColor:"#03fccf",background:"rgb(5, 69, 76)",opacity:1},railStyle:{height:8,border:"1px solid #555",background:"rgba(255, 255, 255, 0.3)"}})})]}),(0,n.jsxs)("div",{className:"Field",children:[(0,n.jsxs)("label",{children:["Contrast:"," ",(0,n.jsx)("strong",{children:null==U?"MULTIPLE VALUES":"".concat(Math.round(100*U+100),"%")})]}),(0,n.jsx)("div",{className:"SliderContainer",children:(0,n.jsx)(g.Z,{min:-100,max:100,startPoint:0,value:Math.round((null!=U?U:0)*100),onChange:t=>{Array.isArray(t)&&(t=t[0]),H(t/100)},trackStyle:{height:8,background:"#03fccf"},handleStyle:{width:20,height:20,marginTop:-6,borderColor:"#03fccf",background:"rgb(5, 69, 76)",opacity:1},railStyle:{height:8,border:"1px solid #555",background:"rgba(255, 255, 255, 0.3)"}})})]})]})}):null,(0,n.jsx)("button",{type:"button","aria-label":tC?"Unlock":"Lock",title:tC?"Unlock (L)":"Lock (L)",onClick:tC?C:_,"data-locked":tC?"":void 0,disabled:!tw,children:tC?(0,n.jsx)(m.D5B,{style:{fontSize:14}}):(0,n.jsx)(m.kUi,{style:{fontSize:14}})}),(0,n.jsxs)("div",{className:"ButtonGroup",children:[(0,n.jsx)("button",{type:"button","aria-label":"Bring Forward",title:"Bring Forward (F)",onClick:S,disabled:!tw,children:(0,n.jsx)(m.ZTc,{})}),(0,n.jsx)("button",{type:"button","aria-label":"Send Backward",title:"Send Backward (B)",onClick:T,disabled:!tw,children:(0,n.jsx)(m.NWQ,{})})]}),(0,n.jsx)("button",{type:"button","aria-label":"Duplicate",title:"Duplicate (D)",onClick:j,disabled:!tw,children:(0,n.jsx)(p.xvH,{})}),(0,n.jsx)("button",{type:"button","aria-label":"Delete",title:"Delete (Backspace)",onClick:k,disabled:tC||!tw,children:(0,n.jsx)(m.AMf,{})}),(0,n.jsxs)("div",{className:"ButtonGroup",children:[(0,n.jsx)("button",{type:"button","aria-label":"Undo",title:"Undo (".concat(ta,"Z)"),onClick:O,disabled:!F,children:(0,n.jsx)(x.UIL,{})}),(0,n.jsx)("button",{type:"button","aria-label":"Redo",title:"Redo (".concat(tr?"".concat("⇧").concat(ta,"Z)"):"".concat(ta," Y"),")"),onClick:P,disabled:!E,children:(0,n.jsx)(x.rks,{})})]}),"color"===G?(0,n.jsxs)("button",{type:"button",className:"MetallicButton","aria-label":"Copy to Metallic",title:"Copy to Metallic",onClick:D,children:[(0,n.jsx)(v.dvR,{})," ",(0,n.jsx)("span",{className:"ButtonLabel",children:"Metal"})]}):null]})]}),(0,n.jsxs)("div",{className:"Export",children:[(0,n.jsx)("input",{ref:e,type:"text",name:"CustomSkinName",placeholder:"Skin Name",size:12}),(0,n.jsxs)("button",{className:"ExportOptionsButton",type:"button",ref:tb,"data-active":tv?"":void 0,"aria-label":"Export Options",title:"Export Options",onClick:()=>{tm(t=>!t)},children:[".",r,(0,n.jsx)(m.iUH,{})]}),tv?(0,n.jsx)("div",{className:"ExportOptionsPopup",ref:tc,style:tx.popper,tabIndex:-1,onBlur:t=>{let e=t.relatedTarget,i=!e||!t.currentTarget.contains(e);i&&tm(!1)},...t_.popper,children:(0,n.jsxs)("div",{className:"Fields",children:[(0,n.jsxs)("div",{className:"Field",children:[(0,n.jsx)("label",{children:"Export Materials"}),(0,n.jsx)("ul",{className:"ExportOptionsList",children:Q.map((t,e)=>t&&!1!==t.selectable&&!t.hidden?(0,n.jsxs)("li",{children:[(0,n.jsx)("input",{id:"MaterialSelect-".concat(t.name),type:"checkbox",checked:!1!==J[e],onChange:t=>{Z(i=>{let r=i.slice();return r[e]=t.target.checked,r})}}),(0,n.jsx)("label",{htmlFor:"MaterialSelect-".concat(t.name),children:t.label})]},t.name):null)})]}),(0,n.jsxs)("div",{className:"Field",children:[(0,n.jsx)("label",{htmlFor:"ExportFormat",children:"Export Format"}),(0,n.jsxs)("select",{id:"ExportFormat",value:r,onChange:t=>{a(t.target.value);try{localStorage.setItem("exportFileType",t.target.value)}catch(t){}},children:[(0,n.jsx)("option",{value:"png",children:".png"}),(0,n.jsx)("option",{value:"vl2",children:".vl2"})]})]})]})}):null,(0,n.jsx)("button",{type:"button",onClick:()=>{let t=e.current?e.current.value:"";K({name:t,format:r})},children:"Export"})]})]})}function AppFooter(){return(0,n.jsxs)("footer",{className:"AppFooter",children:[(0,n.jsx)("a",{href:"https://github.com/exogen/t2-model-skinner",className:"IconLink",children:(0,n.jsx)(m.hJX,{size:32})}),(0,n.jsxs)("div",{className:"Sponsor",children:[(0,n.jsx)("a",{href:"https://github.com/sponsors/exogen",target:"_blank",rel:"noreferrer",children:"Support this project"})," ",(0,n.jsx)("span",{className:"Separator",children:"or"})," ",(0,n.jsx)("a",{href:"https://www.buymeacoffee.com/mosswood",target:"_blank",rel:"noreferrer",children:(0,n.jsx)("img",{src:"https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png",alt:"Buy Me A Coffee",width:145,height:40})})]})]})}function createFabricImage(t){return new Promise(e=>l.fabric.Image.fromURL(t,e,{crossOrigin:"anonymous"}))}var S=i(4375);function Worker_fn(){return new Worker(i.p+"static/chunks/imageProcessing.worker-e73713bf981eb595.worker.js")}function useImageWorker(){let t=(0,s.useRef)(null),e=(0,s.useRef)(null),i=(0,s.useMemo)(()=>{let getFunctions=()=>e.current;return{async combineColorAndAlphaImageUrls(){for(var t=arguments.length,e=Array(t),i=0;i<t;i++)e[i]=arguments[i];let r=await getFunctions();return null==r?void 0:r.combineColorAndAlphaImageUrls(...e)},async removeAlphaFromArrayBuffer(){for(var t=arguments.length,e=Array(t),i=0;i<t;i++)e[i]=arguments[i];let r=await getFunctions();return null==r?void 0:r.removeAlphaFromArrayBuffer(...e)},async convertArrayBufferAlphaToGrayscale(){for(var t=arguments.length,e=Array(t),i=0;i<t;i++)e[i]=arguments[i];let r=await getFunctions();return null==r?void 0:r.convertArrayBufferAlphaToGrayscale(...e)},async convertGrayscaleImageUrlToMetallicRoughness(){for(var t=arguments.length,e=Array(t),i=0;i<t;i++)e[i]=arguments[i];let r=await getFunctions();return null==r?void 0:r.convertGrayscaleImageUrlToMetallicRoughness(...e)}}},[]);return(0,s.useEffect)(()=>{let i=new Worker_fn,r=S.Ud(i);return t.current=i,e.current=r,()=>{r[S.Yy](),i.terminate()}},[]),i}function useSettings(){return{canvasPadding:64,basePath:"/t2-model-skinner"}}async function imageUrlToArrayBuffer(t){let e=await fetch(t);if(e.ok){let t=await e.arrayBuffer();return t}throw Error("Failed to load image URL: ".concat(t))}i(7113),i(31);let{publicRuntimeConfig:T}=h()(),{materials:j}=T;function ToolsProvider(t){var e,r;let{children:a}=t,{actualModel:o,selectedModelType:c}=useWarrior(),[h,u]=(0,s.useState)(0),[d,g]=(0,s.useState)(0),p=j[o],v=null!==(e=p[h])&&void 0!==e?e:null,m=null!==(r=v.frameCount)&&void 0!==r?r:1,y=m>1,[b,x]=(0,s.useState)([]),_=(0,s.useMemo)(()=>{var t;return null!==(t=v.size)&&void 0!==t?t:[512,512]},[v]),C=!(0===v.metallicFactor&&1===v.roughnessFactor),[w,S]=(0,s.useState)("color");C||"metallic"!==w||S("color"),d>=m&&g(0),(0,s.useEffect)(()=>{x(p.map(t=>!!(t&&!1!==t.selectable&&!t.hidden)))},[p]),(0,s.useEffect)(()=>{g(0)},[v]);let[T,k]=(0,s.useState)("magenta"),[O,P]=(0,s.useState)(()=>new Set),[F,E]=(0,s.useState)(200),[D,M]=(0,s.useState)(10),[A,I]=(0,s.useState)(()=>new Map),[L,B]=(0,s.useState)(()=>[]),R=v?"".concat(v.name,":").concat(w,":").concat(d):null,X=v?"".concat(v.name,":metallic:").concat(d):null,{canvases:W}=src_useCanvas(),{canvas:Y,notifyChange:z,undo:U,redo:H,canUndo:N,canRedo:V}=src_useCanvas(R),{canvas:G,setDrawingMode:q}=src_useCanvas(X),{combineColorAndAlphaImageUrls:K}=useImageWorker(),{canvasPadding:J}=useSettings(),[Z,$]=(0,s.useState)(()=>[]),[Q,tt]=(0,s.useState)("BaseLayer");L.length?"SelectedLayer"!==Q&&tt("SelectedLayer"):"SelectedLayer"===Q&&tt("BaseLayer");let te=(0,s.useCallback)((t,e)=>{var i,r,n;let a=[],o=new Map(A),s=L;for(let c of("AllLayers"===Q?s=null!==(i=null==Y?void 0:Y._objects)&&void 0!==i?i:[]:"BaseLayer"===Q&&(s=null!==(r=null==Y?void 0:Y._objects.slice(0,1))&&void 0!==r?r:[]),s))if(c instanceof l.fabric.Image){let i=null!==(n=A.get(c))&&void 0!==n?n:{},r={...i,[t]:e};o.set(c,r),a.push([c,r])}I(o),$(a)},[Y,Q,A,L]),getFilter=t=>{var e,i;let r=L;if("AllLayers"===Q?r=null!==(e=null==Y?void 0:Y._objects)&&void 0!==e?e:[]:"BaseLayer"===Q&&(r=null!==(i=null==Y?void 0:Y._objects.slice(0,1))&&void 0!==i?i:[]),!(r=r.filter(t=>t instanceof l.fabric.Image)).length)return[0,e=>te(t,e)];{let getValue=e=>{var i,n;return null!==(n=(null!==(i=A.get(r[e]))&&void 0!==i?i:{})[t])&&void 0!==n?n:0},e=getValue(0);return r.slice(1).every((t,i)=>getValue(i+1)===e)?[e,e=>te(t,e)]:[null,e=>te(t,e)]}},[ti,tr]=getFilter("HueRotation"),[tn,ta]=getFilter("Saturation"),[to,ts]=getFilter("Brightness"),[tl,tc]=getFilter("Contrast");(0,s.useEffect)(()=>{if(Z.length){for(let[t,e]of Z)if(t instanceof l.fabric.Image){if(t.filters=[],"metallic"===w){let e=new l.fabric.Image.filters.Grayscale;t.filters.push(e)}for(let i in e){let r=e[i];if(null!=r)switch(i){case"HueRotation":t.filters.push(new l.fabric.Image.filters.HueRotation({rotation:r}));break;case"Saturation":t.filters.push(new l.fabric.Image.filters.Saturation({saturation:r}));break;case"Brightness":t.filters.push(new l.fabric.Image.filters.Brightness({brightness:r}));break;case"Contrast":t.filters.push(new l.fabric.Image.filters.Contrast({contrast:r}))}}t.applyFilters()}$([]),z&&z()}},[Z,w,z]);let th=(0,s.useCallback)(()=>{L.length&&P(t=>{let e=new Set(t);for(let t of L)e.add(t),t.lockMovementX=!0,t.lockMovementY=!0,t.lockScalingX=!0,t.lockScalingY=!0,t.lockRotation=!0;return e})},[L]),tu=(0,s.useCallback)(()=>{L.length&&P(t=>{let e=new Set(t);for(let t of L)e.delete(t),t.lockMovementX=!1,t.lockMovementY=!1,t.lockScalingX=!1,t.lockScalingY=!1,t.lockRotation=!1;return e})},[L]),tf=(0,s.useCallback)(async()=>{let t=Y.getActiveObject();t&&(Y.bringForward(t,!0),z())},[Y,z]),td=(0,s.useCallback)(async()=>{let t=Y.getActiveObject();if(t){if(Y._objects[0]===t||Y._objects[1]===t)return;Y.sendBackwards(t,!0),z()}},[Y,z]),tg=(0,s.useCallback)(async t=>{let e;for(let i of t){let t=await createFabricImage(i);if(!t.width||!t.height)throw Error("Zero-height image");let r=t.width/_[0],n=t.height/_[1];if(r>1||n>1){let e;e=r>n?1/r:1/n,t.scaleX=e,t.scaleY=e}if("metallic"===w){t.filters||(t.filters=[]);let e=new l.fabric.Image.filters.Grayscale;t.filters.push(e),t.applyFilters()}G&&q(!1),Y.centerObject(t),Y.add(t),e=t}e&&Y.setActiveObject(e)},[_,w,G,Y,q]),tp=(0,s.useCallback)(async()=>{let t=Y.getActiveObject();if(t){var e,i;let r=await new Promise(e=>t.clone(e));r.set({top:(null!==(e=r.top)&&void 0!==e?e:0)+20,left:(null!==(i=r.left)&&void 0!==i?i:0)+20,evented:!0}),"activeSelection"===r.type&&(r.canvas=Y,r.forEachObject(t=>{Y.add(t)}),r.setCoords()),Y.discardActiveObject(),Y.add(r),Y.setActiveObject(r)}},[Y]),tv=(0,s.useCallback)(async()=>{let t=Y.getActiveObjects();Y.discardActiveObject(),Y.remove(...t),Y.requestRenderAll()},[Y]),tm=(0,s.useCallback)(async()=>{if("color"===w&&G){let t=Y.toDataURL({top:J,left:J,width:_[0],height:_[1]}),e=await createFabricImage(t);e.filters||(e.filters=[]);let i=new l.fabric.Image.filters.Grayscale;e.filters.push(i),e.applyFilters(),G.centerObject(e),G.add(e),G.setActiveObject(e),q(!1),S("metallic")}},[G,Y,w,J,q,_]),ty=(0,s.useCallback)(async t=>{let{format:e,name:r=""}=t,{savePngFile:n,saveZipFile:a,createZipFile:s}=await i.e(767).then(i.bind(i,767));r=r.trim()||"MyCustomSkin";let l=await Promise.all(p.filter((t,e)=>!1!==b[e]).map(t=>{var e;let i=null!==(e=t.frameCount)&&void 0!==e?e:1,n=Array(i).fill(null);return n.map(async(e,n)=>{var a,s,l,h;let u,f;let d=null===(a=W["".concat(t.name,":color:").concat(n)])||void 0===a?void 0:a.canvas,g=null===(s=W["".concat(t.name,":metallic:").concat(n)])||void 0===s?void 0:s.canvas,p=null!==(l=t.size)&&void 0!==l?l:[512,512],v=d.toDataURL({top:J,left:J,width:p[0],height:p[1]});if(g){let t=g.toDataURL({top:J,left:J,width:p[0],height:p[1]});u=await K({colorImageUrl:v,metallicImageUrl:t})}else u=v;switch(c){case"player":f="".concat(r,".").concat(o,".png");break;case"weapon":case"vehicle":if(t){let e=null!==(h=t.file)&&void 0!==h?h:t.name;if(i>1){let t=e.match(/^(.+)(\d\d)$/);if(t){let e=t[1];f="".concat(e).concat(n.toString().padStart(2,"0"),".png")}else throw Error("Unexpected animation filename")}else f="".concat(e,".png")}else f="weapon"===c?"weapon_".concat(o,".png"):"".concat(o,".png");break;default:throw Error("Unknown model type")}return{imageUrl:u,filename:f}})}).flat());switch(e){case"png":l.forEach(t=>{let{imageUrl:e,filename:i}=t;n(e,i)});break;case"vl2":{let t=await Promise.all(l.map(async t=>({data:await imageUrlToArrayBuffer(t.imageUrl),name:t.filename}))),e=s(t),i=o.replace(/(?:^([a-z])|_([a-z]))/g,(t,e,i)=>(e||i).toUpperCase()),n="";switch(c){case"player":n="zPlayerSkin-".concat(r,".vl2");break;case"weapon":n="zWeapon".concat(i,"-").concat(r,".vl2");break;case"vehicle":n="z".concat(i,"-").concat(r,".vl2")}await a(e,n)}}},[o,J,W,K,p,c,b]),tb=(0,s.useMemo)(()=>({activeCanvas:R,activeCanvasType:w,setActiveCanvasType:S,backgroundColor:T,setBackgroundColor:k,lockedObjects:O,setLockedObjects:P,brushColor:F,setBrushColor:E,brushSize:D,setBrushSize:M,hueRotate:ti,setHueRotate:tr,saturation:tn,setSaturation:ta,brightness:to,setBrightness:ts,contrast:tl,setContrast:tc,layerMode:Q,setLayerMode:tt,selectedObjects:L,lockSelection:th,unlockSelection:tu,bringForward:tf,sendBackward:td,addImages:tg,duplicate:tp,deleteSelection:tv,undo:U,redo:H,canUndo:N,canRedo:V,copyToMetallic:tm,exportSkin:ty,selectedMaterialIndex:h,setSelectedMaterialIndex:u,textureSize:_,hasMetallic:C,selectedFrameIndex:d,setSelectedFrameIndex:g,hasAnimation:y,frameCount:m,selectedExportMaterials:b,setSelectedExportMaterials:x}),[R,w,T,O,F,D,ti,tn,to,tl,Q,tr,ta,ts,tc,L,th,tu,tf,td,tg,tp,tv,U,H,N,V,tm,ty,h,_,C,d,y,m,b]);return(0,s.useEffect)(()=>{if(Y){let handleSelectionUpdated=()=>{B(Y.getActiveObjects())};return Y.on("selection:cleared",handleSelectionUpdated),Y.on("selection:updated",handleSelectionUpdated),Y.on("selection:created",handleSelectionUpdated),handleSelectionUpdated(),()=>{Y.off("selection:cleared",handleSelectionUpdated),Y.off("selection:updated",handleSelectionUpdated),Y.off("selection:created",handleSelectionUpdated)}}},[Y]),(0,s.useEffect)(()=>{G&&(G.freeDrawingBrush.width=D)},[G,D]),(0,s.useEffect)(()=>{G&&(G.freeDrawingBrush.color="rgb(".concat(F,", ").concat(F,", ").concat(F,")"))},[G,F]),(0,n.jsx)(f.Provider,{value:tb,children:a})}function CanvasBackdrop(){let{backgroundColor:t,textureSize:e}=useTools(),{canvasPadding:i}=useSettings();return e?(0,n.jsx)("div",{className:"CanvasBackdrop",style:{backgroundColor:t,top:i,width:e[0],height:e[1]}}):null}function CanvasProvider(t){let{children:e}=t,[i,r]=(0,s.useState)({}),a=(0,s.useCallback)((t,e)=>{r(i=>({...i,[t]:e}))},[]),o=(0,s.useCallback)(t=>{r(e=>{let{[t]:i,...r}=e;return r})},[]),l=(0,s.useMemo)(()=>({canvases:i,registerCanvas:a,unregisterCanvas:o}),[i,a,o]);return(0,n.jsx)(u.Provider,{value:l,children:e})}function CanvasInteractions(t){let{children:e}=t,i=(0,s.useRef)(null),{activeCanvas:r,activeCanvasType:a,bringForward:o,sendBackward:l,duplicate:c,deleteSelection:h,addImages:u,undo:f,redo:d}=useTools(),{canvas:g,notifyChange:p,setDrawingMode:v}=src_useCanvas(r),nudge=async function(){let{top:t=0,left:e=0}=arguments.length>0&&void 0!==arguments[0]?arguments[0]:{},i=g.getActiveObjects();for(let a of i){var r,n;a.top=(null!==(r=a.top)&&void 0!==r?r:0)+t,a.left=(null!==(n=a.left)&&void 0!==n?n:0)+e}p()};return(0,n.jsx)("div",{className:"CanvasInteractions",tabIndex:0,ref:i,onDrop:async t=>{t.preventDefault(),i.current&&i.current.focus();let{items:e}=t.dataTransfer,r=Array.from(e).filter(t=>"file"===t.kind&&t.type.match(/^image\//)),n=await Promise.all(r.map(async t=>{let e=t.getAsFile();if(!e)throw Error("Not a file.");let i=new FileReader,r=await new Promise((t,r)=>{i.onload=async e=>{e.target&&"string"==typeof e.target.result?t(e.target.result):r(Error("Failed to load image data."))},i.readAsDataURL(e)});return r}).filter(Boolean));await u(n)},onKeyDown:async t=>{let e=t.target;if("INPUT"!==e.nodeName&&"TEXTAREA"!==e.nodeName){if(t.ctrlKey||t.metaKey)switch(t.key){case"z":if(t.altKey)return;if(t.shiftKey){t.preventDefault(),d();return}t.preventDefault(),f();return;case"y":if(t.altKey||t.shiftKey)return;t.preventDefault(),d();return}if(!t.altKey&&!t.ctrlKey&&!t.metaKey&&!t.shiftKey)switch(t.key){case"Backspace":case"Delete":t.preventDefault(),await h();break;case"ArrowLeft":t.preventDefault(),await nudge({left:-1});break;case"ArrowRight":t.preventDefault(),await nudge({left:1});break;case"ArrowUp":t.preventDefault(),await nudge({top:-1});break;case"ArrowDown":t.preventDefault(),await nudge({top:1});break;case"d":t.preventDefault(),await c();break;case"f":t.preventDefault(),await o();break;case"b":t.preventDefault(),await l();break;case"p":"metallic"===a&&(t.preventDefault(),v(!0));break;case"s":"metallic"===a&&(t.preventDefault(),v(!1))}}},children:e})}function CanvasToggle(){let{activeCanvasType:t,setActiveCanvasType:e,hasMetallic:i,hasAnimation:r,frameCount:a,selectedFrameIndex:o,setSelectedFrameIndex:s}=useTools();return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"CanvasToggle",children:[(0,n.jsx)("button",{type:"button","data-selected":"color"===t?"":void 0,onClick:()=>{e("color")},children:"Color"}),i?(0,n.jsx)("button",{type:"button","data-selected":"metallic"===t?"":void 0,onClick:()=>{e("metallic")},children:"Metallic"}):null]}),r?(0,n.jsxs)("div",{className:"FrameSelector",children:[(0,n.jsx)("button",{type:"button",onClick:()=>{s(t=>(a+t-1)%a)},children:(0,n.jsx)(m.bUI,{})}),(0,n.jsxs)("span",{className:"FrameInfo",children:[o+1," / ",a]}),(0,n.jsx)("button",{type:"button",onClick:()=>{s(t=>(t+1)%a)},children:(0,n.jsx)(m.Dli,{})})]}):null]})}var k=i(8633),O=i(5733),P=i.n(O);let{publicRuntimeConfig:F}=h()(),E=F.materials,D=/^(\.|__MACOSX)/;async function readZipFile(t){let e=await P().loadAsync(t),i=await Promise.all(Object.entries(e.files).map(async t=>{let[e,i]=t;if(!D.test(e)){let t=/\.png$/i.exec(e);if(t){let t=await i.async("base64");return{path:e,imageUrl:"data:image/png;base64,".concat(t)}}}}));return i.filter(t=>!!t)}async function readImageFile(t){return new Promise((e,i)=>{let r=new FileReader;r.addEventListener("load",t=>{var r;"string"==typeof(null===(r=t.target)||void 0===r?void 0:r.result)?e(t.target.result):i()}),r.addEventListener("error",t=>{i()}),r.readAsDataURL(t)})}async function readMultipleFiles(t){let e=await Promise.all(Array.from(t).map(async t=>{if(D.test(t.name))return null;let e=t.name.match(/\.png$/i)?"png":t.name.match(/\.zip$/i)?"zip":t.name.match(/\.vl2$/i)?"vl2":void 0;switch(e){case"zip":case"vl2":{let e=t.name.match(/^(.+)\.(zip|vl2)$/i),i=e?e[1]:t.name;return(await readZipFile(t)).map(e=>({...e,path:"".concat(t.name,"/").concat(e.path),name:i}))}case"png":return{path:t.name,imageUrl:await readImageFile(t),name:null};default:return null}}));return e.flat().filter(t=>!!t)}async function importMultipleFilesToModels(t){let e=await readMultipleFiles(t);return function(t){let e=new Map;return t.forEach(t=>{let i=function(t){let e=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;r||(r=function(){let t=new Map;for(let e in E)E[e].forEach((i,r)=>{let n;if(i.fileSuffix?n=i.fileSuffix:!1!==i.selectable&&!0!==i.hidden&&(i.file||i.name)&&(n=i.file||i.name),n){var a;let o=null!==(a=t.get(n))&&void 0!==a?a:[];o.push({modelName:e,material:i,index:r}),t.set(n,o)}});return t}());let i=t.split("/").slice(-1)[0],n=i.match(/^(.+)\.(PNG|png)$/);if(n){let a=n[1],o=a.split(".");if(o.length>1){let e=".".concat(o[o.length-1]),s=r.get(e);if(s)return{path:t,basename:i,nameWithoutExtension:a,extension:n[2],skinName:o.slice(0,o.length-1).join("."),models:s}}else{let s=function(t){let e=/^(.+[^\d])(\d{2,})$/.exec(t);if(e){var i;let t=e[1],n=e[2],a=parseInt(n,10),o="".concat(t).concat("0".padStart(n.length,"0")),s=null!==(i=r.get(o))&&void 0!==i?i:[];return s.filter(t=>"number"==typeof t.material.frameCount).map(t=>({...t,frameIndex:a}))}return[]}(o[0]);if(s.length)return{path:t,basename:i,nameWithoutExtension:a,extension:n[2],skinName:e,models:s};{let s=r.get(o[0]);if(s)return{path:t,basename:i,nameWithoutExtension:a,extension:n[2],skinName:e,models:s}}}}return null}(t.path,t.name);i&&i.models.forEach(r=>{var n,a,o,s,l;let c=null!==(n=e.get(r.modelName))&&void 0!==n?n:new Map,h=null!==(a=c.get(i.skinName))&&void 0!==a?a:{name:i.skinName,isComplete:null,materials:new Map},u=null!==(o=r.material.file)&&void 0!==o?o:r.material.name,f=null!==(s=h.materials.get(u))&&void 0!==s?s:[];f[null!==(l=r.frameIndex)&&void 0!==l?l:0]=t.imageUrl,h.materials.set(u,f),c.set(i.skinName,h),e.set(r.modelName,c)})}),e.forEach((t,e)=>{let i=E[e].filter(t=>!1!==t.selectable&&!0!==t.hidden&&!0!==t.optional);t.forEach(t=>{t.isComplete=i.every(e=>{var i;return t.materials.has(null!==(i=e.file)&&void 0!==i?i:e.name)})})}),e}(e)}let{publicRuntimeConfig:M}=h()(),{defaultSkins:A,modelDefaults:I}=M,L={},B=new Map;function WarriorSelector(){var t,e,i,r,a,o;let{selectedModel:l,setSelectedModel:c,selectedModelType:h,setSelectedModelType:u,selectedSkin:f,setSelectedSkin:d,setSelectedSkinType:g,actualModel:p,setSelectedAnimation:v,setAnimationPaused:y,importedSkins:b,addImportedSkins:x}=useWarrior(),{setSelectedMaterialIndex:_}=useTools(),[C,w]=(0,s.useState)(L),[S,T]=(0,s.useState)(L),[j,O]=(0,s.useState)(null),P=(0,s.useRef)(null),F=null!==(o=b.get(p))&&void 0!==o?o:B,E=Array.from(F.values()).filter(t=>t.isComplete);(0,s.useEffect)(()=>{let t=new AbortController,e=t.signal,i=!1,loadCustomSkins=async()=>{let t;try{t=await fetch("".concat("https://exogen.github.io/t2-skins","/skins.json"),{signal:e})}catch(t){return}if(!i){let e=await t.json();if(!i){var r,n;w(null!==(r=e.customSkins)&&void 0!==r?r:{}),T(null!==(n=e.newSkins)&&void 0!==n?n:{})}}};return loadCustomSkins(),()=>{i=!0,t.abort()}},[]);let D=null!=f?f:"";return f&&j&&(D="".concat(j,"/").concat(f)),(0,n.jsxs)("div",{className:"Toolbar",children:[(0,n.jsxs)("div",{className:"Field",children:[(0,n.jsx)("label",{htmlFor:"ModelSelect",children:"Model"}),(0,n.jsxs)("select",{id:"ModelSelect",value:l,onChange:t=>{var e,i,r,n;let a=t.target.selectedOptions[0].parentNode,o=t.target.value,s="hfemale"===o?"hmale":o,{modelType:l}=a.dataset;if(!l)throw Error("No data-model-type found");let h=f&&((null===(e=A[s])||void 0===e?void 0:e.includes(f))||(null===(i=C[s])||void 0===i?void 0:i.includes(f)))||!1,p=!1;f&&"new"===j&&h&&(p=null===(r=S[s])||void 0===r?void 0:r.includes(f)),v(null),y(!1),u(l),c(o),_(0),h||(d(null!==(n=I[s])&&void 0!==n?n:null),g("default")),p||O(null)},children:[(0,n.jsxs)("optgroup",{label:"Players","data-model-type":"player",children:[(0,n.jsx)("option",{value:"lmale",children:"Human Male • Light"}),(0,n.jsx)("option",{value:"mmale",children:"Human Male • Medium"}),(0,n.jsx)("option",{value:"hmale",children:"Human Male • Heavy"}),(0,n.jsx)("option",{value:"lfemale",children:"Human Female • Light"}),(0,n.jsx)("option",{value:"mfemale",children:"Human Female • Medium"}),(0,n.jsx)("option",{value:"hfemale",children:"Human Female • Heavy"}),(0,n.jsx)("option",{value:"lbioderm",children:"Bioderm • Light"}),(0,n.jsx)("option",{value:"mbioderm",children:"Bioderm • Medium"}),(0,n.jsx)("option",{value:"hbioderm",children:"Bioderm • Heavy"})]}),(0,n.jsxs)("optgroup",{label:"Weapons","data-model-type":"weapon",children:[(0,n.jsx)("option",{value:"disc",children:"Disc Launcher"}),(0,n.jsx)("option",{value:"chaingun",children:"Chaingun"}),(0,n.jsx)("option",{value:"grenade_launcher",children:"Grenade Launcher"}),(0,n.jsx)("option",{value:"sniper",children:"Laser Rifle"}),(0,n.jsx)("option",{value:"plasmathrower",children:"Plasma Cannon"}),(0,n.jsx)("option",{value:"energy",children:"Blaster"}),(0,n.jsx)("option",{value:"shocklance",children:"Shocklance"}),(0,n.jsx)("option",{value:"elf",children:"ELF Projector"}),(0,n.jsx)("option",{value:"missile",children:"Missile Launcher"}),(0,n.jsx)("option",{value:"mortar",children:"Mortar"}),(0,n.jsx)("option",{value:"repair",children:"Repair Pack"}),(0,n.jsx)("option",{value:"targeting",children:"Targeting Laser"}),(0,n.jsx)("option",{value:"mine",children:"Mine"})]}),(0,n.jsxs)("optgroup",{label:"Vehicles","data-model-type":"vehicle",children:[(0,n.jsx)("option",{value:"vehicle_grav_scout",children:"Wildcat Grav Cycle"}),(0,n.jsx)("option",{value:"vehicle_grav_tank",children:"Beowulf Assault Tank"}),(0,n.jsx)("option",{value:"vehicle_land_mpbbase",children:"Jericho Mobile Point Base"}),(0,n.jsx)("option",{value:"vehicle_air_scout",children:"Shrike Scout Fighter"}),(0,n.jsx)("option",{value:"vehicle_air_bomber",children:"Thundersword Bomber"}),(0,n.jsx)("option",{value:"vehicle_air_hapc",children:"HAVOC Gunship Transport"})]})]})]}),(0,n.jsxs)("div",{className:"Field",children:[(0,n.jsx)("label",{htmlFor:"SkinSelect",children:"Skin"}),(0,n.jsxs)("div",{className:"Buttons",children:[(0,n.jsxs)("select",{id:"SkinSelect",value:D,onChange:t=>{var e,i;let r=t.target.selectedOptions[0].parentNode,n=t.target.value&&null!==(e=r.dataset.skinType)&&void 0!==e?e:null,a=t.target.value.split("/"),o=null!==(i=a.slice(-1)[0])&&void 0!==i?i:null;d(o),g(n),a.length>1?O(a[0]):O(null)},children:[(0,n.jsx)("option",{value:"",children:"Select a skin…"}),"player"===h?(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("optgroup",{label:"Default Skins","data-skin-type":"default",children:null===(t=A[p])||void 0===t?void 0:t.map(t=>(0,n.jsx)("option",{value:t,children:t},t))}),E.length?(0,n.jsx)("optgroup",{label:"Imported Skins","data-skin-type":"import",children:E.map(t=>{var e,i;return(0,n.jsx)("option",{value:"import/".concat(null!==(e=t.name)&&void 0!==e?e:"__untitled__"),children:t.name||"Untitled Imported Skin"},"import/".concat(null!==(i=t.name)&&void 0!==i?i:"__untitled__"))})}):null,(null===(e=S[p])||void 0===e?void 0:e.length)?(0,n.jsx)("optgroup",{label:"New Skins ✨","data-skin-type":"custom",children:null===(i=S[p])||void 0===i?void 0:i.map(t=>(0,n.jsxs)("option",{value:"new/".concat(t),children:[t," ✨"]},"new/".concat(t)))}):null,(0,n.jsx)("optgroup",{label:"Custom Skins","data-skin-type":"custom",children:C===L?(0,n.jsx)("option",{value:"",children:"Loading…"},"loading"):null===(r=C[p])||void 0===r?void 0:r.map(t=>(0,n.jsx)("option",{value:t,children:t},t))})]}):null,"weapon"===h||"vehicle"===h?(0,n.jsxs)(n.Fragment,{children:[I[p]?(0,n.jsx)("optgroup",{label:"Default Skins","data-skin-type":"default",children:(0,n.jsx)("option",{value:I[p],children:"Default"})}):null,E.length?(0,n.jsx)("optgroup",{label:"Imported Skins","data-skin-type":"import",children:E.map(t=>{var e,i;return(0,n.jsx)("option",{value:"import/".concat(null!==(e=t.name)&&void 0!==e?e:"__untitled__"),children:t.name||"Untitled Imported Skin"},"import/".concat(null!==(i=t.name)&&void 0!==i?i:"__untitled__"))})}):null,(null===(a=C[p])||void 0===a?void 0:a.length)?(0,n.jsx)("optgroup",{label:"Custom Skins","data-skin-type":"custom",children:C[p].map(t=>(0,n.jsx)("option",{value:t,children:t},t))}):null]}):null]}),(0,n.jsx)("button",{type:"button","aria-label":"Load Skin",title:"Load a Skin",onClick:()=>{P.current&&P.current.click()},children:(0,n.jsx)(m.MDs,{style:{fontSize:18}})}),(0,n.jsx)("input",{ref:P,onChange:async t=>{var e,i,r;let n=await importMultipleFilesToModels(null!==(e=t.target.files)&&void 0!==e?e:[]);x(n);let a=n.get(p);if(a){let t=Array.from(a.values()).filter(t=>t.isComplete);if(t.length){let e=t[0];g("import"),O("import"),d(null!==(i=e.name)&&void 0!==i?i:"__untitled__"),_(0),v(null);return}}for(let[t,e]of Array.from(n.entries()))for(let i of Array.from(e.values()))if(i.isComplete){c(t),u(function(t){switch(t){case"lmale":case"mmale":case"hmale":case"lfemale":case"mfemale":case"hfemale":case"lbioderm":case"mbioderm":case"hbioderm":return"player";case"disc":case"chaingun":case"grenade_launcher":case"sniper":case"plasmathrower":case"energy":case"shocklance":case"elf":case"missile":case"mortar":case"repair":case"targeting":return"weapon";case"vehicle_grav_scout":case"vehicle_grav_tank":case"vehicle_land_mpbbase":case"vehicle_air_scout":case"vehicle_air_bomber":case"vehicle_air_hapc":return"vehicle";default:throw Error("Unknown model")}}(t)),g("import"),O("import"),d(null!==(r=i.name)&&void 0!==r?r:"__untitled__"),_(0),v(null);break}},type:"file",accept:".png, image/png, .vl2, .zip, application/zip, application/zip-compressed",multiple:!0,hidden:!0})]})]}),(0,n.jsx)("div",{className:"Field GalleryField",children:(0,n.jsxs)("a",{href:"gallery/",target:"_blank",className:"GalleryLink",title:"Open skin gallery",children:[(0,n.jsx)("span",{className:"FieldLabel",children:"Gallery"}),(0,n.jsx)(k.qY1,{})]})})]})}let{publicRuntimeConfig:R}=h()(),{materials:X,modelDefaults:W}=R,Y="https://exogen.github.io/t2-skins/skins",z=new Map;function getFrameNames(t,e){if(e<2)return[t];let i=t.match(/^(.+)(\d\d)$/);if(i){let t=i[1],r=Array(e).fill(null);return r.map((e,i)=>"".concat(t).concat(i.toString().padStart(2,"0")))}throw Error("Did not match expected frame format")}function getSkinImageUrls(t){let{basePath:e,actualModel:i,selectedModelType:r,selectedSkin:n,selectedSkinType:a}=t,o=X[i];if(n&&"import"===a){let t=z.get(i);if(t){let e="__untitled__"===n?null:n,i=t.get(e);if(i&&i.isComplete)return Object.fromEntries(i.materials)}return{}}switch(r){case"player":switch(a){case"default":return{base:["".concat(e,"/textures/").concat(n,".").concat(i,".png")]};case"custom":return{base:["".concat(Y,"/").concat(n,".").concat(i,".png")]}}break;case"weapon":case"vehicle":return o.reduce((t,i)=>{if(i){var r,o,s,l,c;let h=null!==(r=i.frameCount)&&void 0!==r?r:1;switch(a){case"default":!1!==i.hasDefault&&(t[null!==(o=i.file)&&void 0!==o?o:i.name]=getFrameNames(null!==(s=i.file)&&void 0!==s?s:i.name,h).map(t=>"".concat(e,"/textures/").concat(t,".png")));break;case"custom":t[null!==(l=i.file)&&void 0!==l?l:i.name]=getFrameNames(null!==(c=i.file)&&void 0!==c?c:i.name,h).map(t=>"".concat(Y,"/").concat(n,"/").concat(t,".png"))}}return t},{})}return{}}function WarriorProvider(t){let{children:e}=t,[i,r]=(0,s.useState)("lmale"),[a,o]=(0,s.useState)("player"),[l,c]=(0,s.useState)("Blood Eagle"),[h,u]=(0,s.useState)("default"),[f,d]=(0,s.useState)(null),[g,p]=(0,s.useState)(!1),[v,m]=(0,s.useState)(!1),{basePath:y}=useSettings(),b="hfemale"===i?"hmale":i,x="".concat(y,"/").concat(b).concat(f?".anim":"",".glb"),[C,w]=(0,s.useState)(z),S=(0,s.useCallback)(t=>{!function(t){let e=new Map(z.entries());t.forEach((t,i)=>{var r;let n=null!==(r=e.get(i))&&void 0!==r?r:new Map;t.forEach((t,e)=>{n.set(e,t)}),e.set(i,n)}),z=e}(t),w(z)},[]),[T,j]=(0,s.useState)(()=>getSkinImageUrls({basePath:y,actualModel:b,selectedModelType:a,selectedSkin:l,selectedSkinType:h})),k=(0,s.useMemo)(()=>getSkinImageUrls({basePath:y,actualModel:b,selectedModelType:a,selectedSkin:W[b],selectedSkinType:"default"}),[b,y,a]),O=(0,s.useMemo)(()=>({selectedModel:i,setSelectedModel:r,selectedModelType:a,setSelectedModelType:o,actualModel:b,selectedModelUrl:x,animationPaused:g,setAnimationPaused:p,selectedSkin:l,setSelectedSkin:c,selectedSkinType:h,setSelectedSkinType:u,selectedAnimation:f,setSelectedAnimation:d,skinImageUrls:T,setSkinImageUrls:j,defaultSkinImageUrls:k,slowModeEnabled:v,setSlowModeEnabled:m,importedSkins:C,addImportedSkins:S}),[i,r,a,o,b,x,g,p,l,c,h,u,f,d,T,j,k,v,C,S]);return(0,s.useEffect)(()=>{l&&j(getSkinImageUrls({basePath:y,actualModel:b,selectedModelType:a,selectedSkin:l,selectedSkinType:h}))},[y,b,a,l,h]),(0,n.jsx)(_.Provider,{value:O,children:e})}var U=i(5152),H=i.n(U);let N=s.createContext(null);function useEnvironment(){let t=(0,s.useContext)(N);if(!t)throw Error("No EnvironmentContext.Provider");return t}N.displayName="EnvironmentContext";let V=s.createContext(null);function useSkin(){let t=(0,s.useContext)(V);if(!t)throw Error("No SkinContext.Provider");return t}V.displayName="SkinContext";var G=i(485);function useTexture(t){let{material:e,materialDef:i,textureType:r,imageUrl:n,frameRef:a}=t,{modelViewer:o}=(0,G.Z)(),{basePath:l}=useSettings(),{slowModeEnabled:c}=useWarrior();(0,s.useEffect)(()=>{let t,s=!1,updateTexture=async()=>{if(!i||i.hidden)"metallicRoughnessTexture"!==r&&(e.setAlphaMode("BLEND"),e.pbrMetallicRoughness.setBaseColorFactor([0,0,0,0]));else{let{alphaMode:h,alphaCutoff:u,baseColorFactor:f,emissiveFactor:d,emissiveTexture:g=!1,metallicFactor:p=1,roughnessFactor:v=1,frameCount:m=1,frameTimings:y}=i,b=null!=n?n:Array(m).fill("".concat(l,"/white.png"));if(b.some(t=>!t))return;switch(r){case"baseColorTexture":f&&e.pbrMetallicRoughness.setBaseColorFactor(f),h&&e.setAlphaMode(h),u&&e.setAlphaCutoff(u),d&&e.setEmissiveFactor(d);break;case"metallicRoughnessTexture":e.pbrMetallicRoughness.setMetallicFactor(p),e.pbrMetallicRoughness.setRoughnessFactor(v),0===p&&1===v&&(b=Array(m).fill("".concat(l,"/green.png")))}let x=await Promise.all(b.map(t=>o.createTexture(t)));if(!s){let i="baseColorTexture"===r,n=a.current,frame=()=>{let a=x[n.frameIndex];if(e.pbrMetallicRoughness[r].setTexture(a),i&&g&&e.emissiveTexture.setTexture(a),i&&(n.frameProgress+=c?.05:1),m>1){var o;let e=null!==(o=null==y?void 0:y[n.frameIndex])&&void 0!==o?o:1;i&&n.frameProgress>=e&&(n.frameIndex=(n.frameIndex+1)%m,n.frameProgress=0),t=requestAnimationFrame(frame)}};frame(0)}}};return updateTexture(),()=>{s=!0,null!=t&&cancelAnimationFrame(t)}},[l,o,e,i,r,n,a,c])}function Material(t){var e,i;let{material:r,materialDef:n}=t,{getSkinImages:a}=useSkin(),{colorImageUrl:o,metallicImageUrl:l}=null!==(i=a(null!==(e=null==n?void 0:n.file)&&void 0!==e?e:r.name))&&void 0!==i?i:{},c=(0,s.useRef)({frameIndex:0,frameProgress:0});return useTexture({material:r,materialDef:n,textureType:"baseColorTexture",imageUrl:o,frameRef:c}),useTexture({material:r,materialDef:n,textureType:"metallicRoughnessTexture",imageUrl:l,frameRef:c}),null}let{publicRuntimeConfig:q}=h()(),{materials:K}=q;function Materials(){let{actualModel:t}=useWarrior(),{model:e}=(0,G.Z)(),i=K[t];return(0,n.jsx)(n.Fragment,{children:e.materials.map((t,e)=>{let r=i[e];return(0,n.jsx)(Material,{material:t,materialDef:r},t.name)})})}let J=H()(()=>Promise.all([i.e(737),i.e(848),i.e(250)]).then(i.bind(i,9250)),{loadableGenerated:{webpack:()=>[9250]},ssr:!1}),{publicRuntimeConfig:Z}=h()(),{cameraOverrides:$}=Z;function WarriorViewer(){var t,e,i,r;let{selectedModel:a,selectedModelUrl:o,selectedModelType:s,selectedAnimation:l,animationPaused:c,slowModeEnabled:h}=useWarrior(),{environmentImageUrl:u,showEnvironment:f,exposure:d}=useEnvironment();return(0,n.jsx)(J,{modelUrl:o,environmentImageUrl:u,showEnvironment:f,animationName:l,animationPaused:c,timeScale:h?.05:.5,cameraOrbit:null!==(r=null===(t=$[a])||void 0===t?void 0:t.orbit)&&void 0!==r?r:"weapon"===s?"315deg 70deg 105%":void 0,cameraTarget:null===(e=$[a])||void 0===e?void 0:e.target,fieldOfView:null===(i=$[a])||void 0===i?void 0:i.fov,exposure:d,children:(0,n.jsx)(Materials,{})})}function EnvironmentSelector(){let{selectedEnvironment:t,setSelectedEnvironment:e}=useEnvironment();return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("label",{htmlFor:"EnvMapSelect",children:"Environment"}),(0,n.jsxs)("select",{id:"EnvMapSelect",value:null!=t?t:"",onChange:t=>{e(t.target.value||null)},children:[(0,n.jsx)("option",{value:"",children:"Default"}),(0,n.jsx)("option",{value:"clarens_night_02_1k.hdr",children:"Clarens Night"}),(0,n.jsx)("option",{value:"dry_cracked_lake_1k.hdr",children:"Dry Cracked Lake"}),(0,n.jsx)("option",{value:"fouriesburg_mountain_midday_1k.hdr",children:"Fouriesburg Mountain"}),(0,n.jsx)("option",{value:"goegap_1k.hdr",children:"Goegap"}),(0,n.jsx)("option",{value:"hilly_terrain_01_1k.hdr",children:"Hilly Terrain"}),(0,n.jsx)("option",{value:"kloofendal_48d_partly_cloudy_puresky_1k.hdr",children:"Kloofendal Partly Cloudy"}),(0,n.jsx)("option",{value:"kloppenheim_06_puresky_1k.hdr",children:"Kloppenheim"}),(0,n.jsx)("option",{value:"lilienstein_1k.hdr",children:"Lilienstein"}),(0,n.jsx)("option",{value:"spruit_sunrise_1k_HDR.hdr",children:"Spruit Sunrise"}),(0,n.jsx)("option",{value:"umhlanga_sunrise_1k.hdr",children:"Umhlanga Sunrise"})]})]})}function EnvironmentExposure(){let{exposure:t,setExposure:e}=useEnvironment();return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)("label",{htmlFor:"EnvExposure",children:(0,n.jsx)(x.MXq,{size:16})}),(0,n.jsx)("input",{"aria-label":"Exposure",id:"EnvExposure",type:"range",min:.2,max:2.2,step:.1,value:t,onChange:t=>{e(parseFloat(t.target.value))}})]})}let{publicRuntimeConfig:Q}=h()(),{animations:tt,animationLabels:te,animationLabelOverrides:ti}=Q;function AnimationSelector(){let{actualModel:t,selectedModelType:e,selectedAnimation:i,setSelectedAnimation:r,animationPaused:a,setAnimationPaused:o,slowModeEnabled:l,setSlowModeEnabled:c}=useWarrior(),h=(0,s.useMemo)(()=>{var i;return[..."player"===e?tt.global:[],...null!==(i=tt[t])&&void 0!==i?i:[]]},[t,e]);return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsxs)("div",{className:"LabelWithControls",children:[(0,n.jsx)("label",{children:"Animation"}),(0,n.jsxs)("div",{className:"AnimationSpeed",children:[(0,n.jsx)("input",{type:"checkbox",id:"SlowDownCheckbox",checked:l,onChange:t=>{c(t.target.checked)}})," ",(0,n.jsx)("label",{htmlFor:"SlowDownCheckbox",children:"Slow?"})]})]}),(0,n.jsxs)("div",{className:"Buttons",children:[(0,n.jsxs)("select",{value:null!=i?i:"",onChange:t=>{r(t.target.value||null),o(!1)},children:[(0,n.jsx)("option",{value:"",children:"None"}),h.map(e=>{var i,r;let a=null!==(r=null===(i=ti[t])||void 0===i?void 0:i[e])&&void 0!==r?r:te[e];return(0,n.jsx)("option",{value:e,children:null!=a?a:e},e)})]}),(0,n.jsx)("button",{type:"button",disabled:!i,onClick:()=>{o(t=>!t)},children:a||!i?(0,n.jsx)(b.v$e,{}):(0,n.jsx)(b.IWN,{})})]})]})}function EnvironmentProvider(t){let{children:e}=t,[i,r]=(0,s.useState)(null),[a,o]=(0,s.useState)(!1),[l,c]=(0,s.useState)(1),{basePath:h}=useSettings(),u=(0,s.useMemo)(()=>{let t=i?"".concat(h,"/").concat(i):null;return{selectedEnvironment:i,setSelectedEnvironment:r,showEnvironment:a,setShowEnvironment:o,exposure:l,setExposure:c,environmentImageUrl:t}},[h,i,a,l]);return(0,n.jsx)(N.Provider,{value:u,children:e})}function SkinProvider(t){let{children:e}=t,[i,r]=(0,s.useState)({}),a=(0,s.useMemo)(()=>({setSkinImages(t,e){r(i=>({...i,[t]:e}))},setColorImageUrl(t,e,i){r(r=>{var n,a;let o=Array.from(null!==(a=null===(n=r[t])||void 0===n?void 0:n.colorImageUrl)&&void 0!==a?a:[]);return o[i]=e,{...r,[t]:{...r[t],colorImageUrl:o}}})},setMetallicImageUrl(t,e,i){r(r=>{var n,a;let o=Array.from(null!==(a=null===(n=r[t])||void 0===n?void 0:n.metallicImageUrl)&&void 0!==a?a:[]);return o[i]=e,{...r,[t]:{...r[t],metallicImageUrl:o}}})}}),[]),o=(0,s.useMemo)(()=>({materialSkins:i,getSkinImages:t=>i[t],getColorImageUrl(t,e){var r;return null===(r=i[t].colorImageUrl)||void 0===r?void 0:r[e]},getMetallicImageUrl(t,e){var r;return null===(r=i[t].metallicImageUrl)||void 0===r?void 0:r[e]},...a}),[i,a]);return(0,n.jsx)(V.Provider,{value:o,children:e})}let{publicRuntimeConfig:tr}=h()(),{materials:tn}=tr;function MaterialSelector(){let{actualModel:t}=useWarrior(),{selectedMaterialIndex:e,setSelectedMaterialIndex:i}=useTools(),r=tn[t];return(0,n.jsx)("select",{value:e,onChange:t=>{i(parseInt(t.target.value,10))},children:r.map((t,e)=>{var i;return t&&!t.hidden&&!1!==t.selectable?(0,n.jsx)("option",{value:e,children:null!==(i=t.label)&&void 0!==i?i:t.name},t.name):null})})}function Canvas(t){let{canvasId:e,onChange:i,baseImageUrl:r,textureSize:a,defaultDrawingMode:o=!1}=t,c=(0,s.useRef)(null),[h,u]=(0,s.useState)(null),{activeCanvas:f}=useTools(),{canvasPadding:d}=useSettings(),{registerCanvas:g,unregisterCanvas:p}=src_useCanvas(),[v,m]=(0,s.useState)(o),y=(0,s.useRef)(),b=(0,s.useRef)(!0),[x,_]=(0,s.useState)(()=>[]),[C,w]=(0,s.useState)(()=>[]),S=x.length>1,T=C.length>0,j=(0,s.useCallback)(t=>{let e=y.current;e&&e(t)},[]),k=(0,s.useCallback)(async()=>{if(h&&x.length>1){let[t,e]=x.slice(-2);b.current=!1,h.renderOnAddRemove=!1,h.clear(),h.loadFromJSON(t,()=>{h.renderAll(),b.current=!0,h.renderOnAddRemove=!0}),_(t=>t.slice(0,-1)),w(t=>[e,...t])}},[h,x]),O=(0,s.useCallback)(()=>{if(h&&C.length>0){let t=C[0];b.current=!1,h.renderOnAddRemove=!1,h.clear(),h.loadFromJSON(t,()=>{h.renderAll(),b.current=!0,h.renderOnAddRemove=!0}),_(e=>[...e,t]),w(t=>t.slice(1))}},[h,C]);(0,s.useEffect)(()=>{y.current=i},[i]);let P=f===e;return(0,s.useEffect)(()=>{let t;l.fabric.Object.prototype.set({transparentCorners:!1,borderColor:"#8afff1",cornerSize:9,cornerStyle:"circle",cornerColor:"#8afff1",cornerStrokeColor:"#1c9f7c",strokeWidth:10,perPixelTargetFind:!0});let e=new l.fabric.Canvas(c.current,{preserveObjectStacking:!0,targetFindTolerance:2}),i=!1,handleChangeWithCanvasArg=()=>{j(e)},snapshotCanvas=()=>{i=!0;let t=e.toJSON(["lockMovementX","lockMovementY","lockRotation","lockScalingX","lockScalingY","selectable","hoverCursor","moveCursor"]);return i=!1,t};return e.on("object:modified",handleChangeWithCanvasArg),e.on("object:added",handleChangeWithCanvasArg),e.on("object:removed",handleChangeWithCanvasArg),e.on("after:render",()=>{!i&&b.current&&(clearTimeout(t),t=setTimeout(()=>{let t=snapshotCanvas();_(e=>[...e.slice(-5),t]),w([])},150))}),u(e),()=>{clearTimeout(t),u(null),e.dispose()}},[j]),(0,s.useEffect)(()=>{h&&(h.isDrawingMode=v,v&&(h.discardActiveObject(),h.requestRenderAll()))},[h,v]),(0,s.useEffect)(()=>{h&&P&&h.calcOffset()},[h,P]),(0,s.useEffect)(()=>{if(h)return g(e,{canvas:h,notifyChange:()=>{h.renderAll(),j(h)},undo:k,redo:O,canUndo:S,canRedo:T,isDrawingMode:v,setDrawingMode:m}),()=>{p(e)}},[h,g,p,e,j,v,m,k,O,S,T]),(0,s.useEffect)(()=>{if(h&&a&&(b.current=!1,h.clear(),r)){let t=!1,addImage=async()=>{let e=await createFabricImage(r);if(!t){if(!e.width||!e.height)throw Error("Zero-height image");e.selectable=!1,e.lockMovementX=!0,e.lockMovementY=!0,e.lockScalingX=!0,e.lockScalingY=!0,e.lockRotation=!0,e.hoverCursor="default",e.moveCursor="default";let[t,i]=a,r=e.width===t?1:t/e.width,n=e.height===i?1:i/e.height;(1!==r||1!==n)&&(e.scaleX=r,e.scaleY=n),h.centerObject(e),h.add(e)}b.current=!0,h.requestRenderAll()};return addImage(),()=>{t=!0}}},[h,r,a]),(0,n.jsx)("div",{className:"CanvasContainer","data-active":P?"true":"false",children:(0,n.jsx)("canvas",{width:a[0]+2*d,height:a[1]+2*d,ref:c})})}let ta=s.createContext(null);function useImageLoader(){let t=(0,s.useContext)(ta);if(!t)throw Error("ImageLoaderContext.Provider not found!");return t}ta.displayName="ImageLoaderContext";let to=[512,512];function ColorCanvas(t){var e,i,r,a;let{materialDef:o,frameIndex:l=0}=t,{skinImageUrls:c,defaultSkinImageUrls:h}=useWarrior(),u=null===(e=c[null!==(r=o.file)&&void 0!==r?r:o.name])||void 0===e?void 0:e[l],f=null===(i=h[null!==(a=o.file)&&void 0!==a?a:o.name])||void 0===i?void 0:i[l],{setColorImageUrl:d}=useSkin(),{canvasPadding:g}=useSettings(),[p,v]=(0,s.useState)(null),{removeAlphaFromArrayBuffer:m}=useImageWorker(),{loadImage:y}=useImageLoader(),b=(0,s.useMemo)(()=>{var t;return null!==(t=o.size)&&void 0!==t?t:to},[o]),x=(0,s.useCallback)(async t=>{var e;let i=t.toDataURL({top:g,left:g,width:b[0],height:b[1]});d(null!==(e=o.file)&&void 0!==e?e:o.name,i,l)},[b,g,d,o,l]);(0,s.useEffect)(()=>{if(u){let t=!1,generateImageUrl=async()=>{let e;try{e=await y(u)}catch(t){if(!1===o.hasDefault)return;e=await y(f)}let i=await m(e);t||v(i)};return generateImageUrl(),()=>{t=!0}}v(null)},[o,u,f,m,y]);let _="".concat(o.name,":color:").concat(l);return b?(0,n.jsx)(Canvas,{canvasId:_,canvasType:"color",onChange:x,baseImageUrl:p,textureSize:b},_):null}let ts=[512,512];function MetallicCanvas(t){var e,i,r,a;let{materialDef:o,frameIndex:l=0}=t,{skinImageUrls:c,defaultSkinImageUrls:h}=useWarrior(),u=null===(e=c[null!==(r=o.file)&&void 0!==r?r:o.name])||void 0===e?void 0:e[l],f=null===(i=h[null!==(a=o.file)&&void 0!==a?a:o.name])||void 0===i?void 0:i[l],{setMetallicImageUrl:d}=useSkin(),{canvasPadding:g}=useSettings(),[p,v]=(0,s.useState)(null),m=(0,s.useRef)(0),{convertGrayscaleImageUrlToMetallicRoughness:y,convertArrayBufferAlphaToGrayscale:b}=useImageWorker(),{loadImage:x}=useImageLoader(),_=(0,s.useMemo)(()=>{var t;return null!==(t=o.size)&&void 0!==t?t:ts},[o]),C=(0,s.useCallback)(async t=>{let e;m.current+=1;let i=t.toDataURL({top:g,left:g,width:_[0],height:_[1]});try{e=await y(i)}finally{m.current-=1}if(0===m.current){var r;d(null!==(r=o.file)&&void 0!==r?r:o.name,e,l)}},[_,g,d,y,o,l]);(0,s.useEffect)(()=>{if(u){let t=!1,generateImageUrl=async()=>{let e;try{e=await x(u)}catch(t){if(!1===o.hasDefault)return;e=await x(f)}let i=await b(e);t||v(i)};return generateImageUrl(),()=>{t=!0}}v(null)},[o,u,f,_,b,x]);let w="".concat(o.name,":metallic:").concat(l);return _?(0,n.jsx)(Canvas,{canvasId:w,canvasType:"metallic",onChange:C,baseImageUrl:p,textureSize:_,defaultDrawingMode:!0},w):null}let{publicRuntimeConfig:tl}=h()(),{materials:tc}=tl;function MaterialCanvases(){let{actualModel:t}=useWarrior(),e=tc[t];return(0,n.jsx)(n.Fragment,{children:e.map(e=>{var i;if(!e)return null;let r=!(0===e.metallicFactor&&1===e.roughnessFactor),a=null!==(i=e.frameCount)&&void 0!==i?i:1,o=Array(a).fill(null);return(0,n.jsxs)(s.Fragment,{children:[o.map((t,i)=>(0,n.jsx)(ColorCanvas,{materialDef:e,frameIndex:i},"color:".concat(i))),r?o.map((t,i)=>(0,n.jsx)(MetallicCanvas,{materialDef:e,frameIndex:i},"metallic:".concat(i))):null]},"".concat(t,"-").concat(e.name))})})}var th=i(5945);function ImageLoaderProvider(t){let{children:e}=t,i=(0,th.NL)(),r=(0,s.useMemo)(()=>({async loadImage(t){if(t.startsWith("data:"))return imageUrlToArrayBuffer(t);{let e=await i.fetchQuery({queryKey:[t]});return e}}}),[i]);return(0,n.jsx)(ta.Provider,{value:r,children:e})}var tu=i(8709);async function imageFetcher(t){let{queryKey:e}=t,[i]=e;return imageUrlToArrayBuffer(i)}let tf=new tu.S({defaultOptions:{queries:{queryFn:imageFetcher,staleTime:1/0,cacheTime:6e4,refetchOnWindowFocus:!1,refetchOnReconnect:!1}}});function HomePage(){return(0,n.jsxs)(n.Fragment,{children:[(0,n.jsx)(o(),{children:(0,n.jsx)("title",{children:"T2 Model Viewer & Skinner"})}),(0,n.jsx)(th.aH,{client:tf,children:(0,n.jsx)("main",{children:(0,n.jsx)(ImageLoaderProvider,{children:(0,n.jsx)(WarriorProvider,{children:(0,n.jsx)(EnvironmentProvider,{children:(0,n.jsxs)(SkinProvider,{children:[(0,n.jsxs)("div",{className:"Viewport",children:[(0,n.jsxs)("div",{className:"ModelTools",children:[(0,n.jsx)("div",{className:"Field",children:(0,n.jsx)(EnvironmentSelector,{})}),(0,n.jsx)("div",{className:"Field SliderField",children:(0,n.jsx)(EnvironmentExposure,{})}),(0,n.jsx)("div",{className:"Field",children:(0,n.jsx)(AnimationSelector,{})})]}),(0,n.jsx)(WarriorViewer,{})]}),(0,n.jsx)(CanvasProvider,{children:(0,n.jsx)(ToolsProvider,{children:(0,n.jsxs)(CanvasInteractions,{children:[(0,n.jsx)(WarriorSelector,{}),(0,n.jsxs)("div",{className:"CanvasViewport",children:[(0,n.jsxs)("div",{className:"CanvasSelector",children:[(0,n.jsx)(CanvasToggle,{}),(0,n.jsx)(MaterialSelector,{})]}),(0,n.jsx)(CanvasBackdrop,{}),(0,n.jsx)(MaterialCanvases,{})]}),(0,n.jsx)(CanvasTools,{}),(0,n.jsx)(AppFooter,{})]})})})]})})})})})})]})}},485:function(t,e,i){"use strict";i.d(e,{K:function(){return n},Z:function(){return useModelViewer}});var r=i(7294);let n=r.createContext(null);function useModelViewer(){let t=(0,r.useContext)(n);if(!t)throw Error("No ModelViewerContext.Provider");return t}n.displayName="ModelViewerContext"},4919:function(t,e,i){var r,n,a,o,s,l,c,h,u,f,d,g,p,v,m,y,b,x,_,C,w,S,T,j,k,O,P,F,E,D,M,A,I,L,B,R,X,W,Y,z,U,H,N,V,G,q,K,J,Z,$,Q,tt,te,ti,tr,tn,ta,to,ts,tl,tc,th,tu,tf,td,tg,tp,tv,tm,ty,tb,tx,t_,tC,tw,tS,tT,tj,tk,tO,tP,tF,tE,tD,tM,tA,tI,tL,tB,tR,tX,tW,tY,tz,tU,tH,tN,tV,tG,tq,tK,tJ,tZ,t$=i(1876).Buffer,tQ=tQ||{version:"5.2.1"};if(e.fabric=tQ,"undefined"!=typeof document)document instanceof("undefined"!=typeof HTMLDocument?HTMLDocument:Document)?tQ.document=document:tQ.document=document.implementation.createHTMLDocument(""),tQ.window=window;else{var t0=new(i(6957)).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;tQ.document=t0.document,tQ.jsdomImplForWrapper=i(6907).implForWrapper,tQ.nodeCanvas=i(4866).Canvas,tQ.window=t0,DOMParser=tQ.window.DOMParser}function copyGLTo2DDrawImage(t,e){var i=t.canvas,r=e.targetCanvas,n=r.getContext("2d");n.translate(0,r.height),n.scale(1,-1);var a=i.height-r.height;n.drawImage(i,0,a,r.width,r.height,0,0,r.width,r.height)}function copyGLTo2DPutImageData(t,e){var i=e.targetCanvas.getContext("2d"),r=e.destinationWidth,n=e.destinationHeight,a=r*n*4,o=new Uint8Array(this.imageBuffer,0,a),s=new Uint8ClampedArray(this.imageBuffer,0,a);t.readPixels(0,0,r,n,t.RGBA,t.UNSIGNED_BYTE,o);var l=new ImageData(s,r,n);i.putImageData(l,0,0)}tQ.isTouchSupported="ontouchstart"in tQ.window||"ontouchstart"in tQ.document||tQ.window&&tQ.window.navigator&&tQ.window.navigator.maxTouchPoints>0,tQ.isLikelyNode=void 0!==t$&&!1,tQ.DPI=96,tQ.reNum="(?:[-+]?(?:\\d+|\\d*\\.\\d+)(?:[eE][-+]?\\d+)?)",tQ.commaWsp="(?:\\s+,?\\s*|,\\s*)",tQ.rePathCommand=/([-+]?((\d+\.\d+)|((\d+)|(\.\d+)))(?:[eE][-+]?\d+)?)/ig,tQ.reNonWord=/[ \n\.,;!\?\-]/,tQ.fontPaths={},tQ.iMatrix=[1,0,0,1,0,0],tQ.svgNS="http://www.w3.org/2000/svg",tQ.perfLimitSizeTotal=2097152,tQ.maxCacheSideLimit=4096,tQ.minCacheSideLimit=256,tQ.charWidthsCache={},tQ.textureSize=2048,tQ.disableStyleCopyPaste=!1,tQ.enableGLFiltering=!0,tQ.devicePixelRatio=tQ.window.devicePixelRatio||tQ.window.webkitDevicePixelRatio||tQ.window.mozDevicePixelRatio||1,tQ.browserShadowBlurConstant=1,tQ.arcToSegmentsCache={},tQ.boundsOfCurveCache={},tQ.cachesBoundsOfCurve=!0,tQ.forceGLPutImageData=!1,tQ.initFilterBackend=function(){return tQ.enableGLFiltering&&tQ.isWebglSupported&&tQ.isWebglSupported(tQ.textureSize)?(console.log("max texture size: "+tQ.maxTextureSize),new tQ.WebglFilterBackend({tileSize:tQ.textureSize})):tQ.Canvas2dFilterBackend?new tQ.Canvas2dFilterBackend:void 0},function(){function _removeEventListener(t,e){if(this.__eventListeners[t]){var i=this.__eventListeners[t];e?i[i.indexOf(e)]=!1:tQ.util.array.fill(i,!1)}}function _once(t,e){var i=(function(){e.apply(this,arguments),this.off(t,i)}).bind(this);this.on(t,i)}tQ.Observable={fire:function(t,e){if(!this.__eventListeners)return this;var i=this.__eventListeners[t];if(!i)return this;for(var r=0,n=i.length;r<n;r++)i[r]&&i[r].call(this,e||{});return this.__eventListeners[t]=i.filter(function(t){return!1!==t}),this},on:function(t,e){if(this.__eventListeners||(this.__eventListeners={}),1==arguments.length)for(var i in t)this.on(i,t[i]);else this.__eventListeners[t]||(this.__eventListeners[t]=[]),this.__eventListeners[t].push(e);return this},once:function(t,e){if(1==arguments.length)for(var i in t)_once.call(this,i,t[i]);else _once.call(this,t,e);return this},off:function(t,e){if(!this.__eventListeners)return this;if(0==arguments.length)for(t in this.__eventListeners)_removeEventListener.call(this,t);else if(1==arguments.length&&"object"==typeof arguments[0])for(var i in t)_removeEventListener.call(this,i,t[i]);else _removeEventListener.call(this,t,e);return this}}}(),tQ.Collection={_objects:[],add:function(){if(this._objects.push.apply(this._objects,arguments),this._onObjectAdded)for(var t=0,e=arguments.length;t<e;t++)this._onObjectAdded(arguments[t]);return this.renderOnAddRemove&&this.requestRenderAll(),this},insertAt:function(t,e,i){var r=this._objects;return i?r[e]=t:r.splice(e,0,t),this._onObjectAdded&&this._onObjectAdded(t),this.renderOnAddRemove&&this.requestRenderAll(),this},remove:function(){for(var t,e=this._objects,i=!1,r=0,n=arguments.length;r<n;r++)t=e.indexOf(arguments[r]),-1!==t&&(i=!0,e.splice(t,1),this._onObjectRemoved&&this._onObjectRemoved(arguments[r]));return this.renderOnAddRemove&&i&&this.requestRenderAll(),this},forEachObject:function(t,e){for(var i=this.getObjects(),r=0,n=i.length;r<n;r++)t.call(e,i[r],r,i);return this},getObjects:function(t){return void 0===t?this._objects.concat():this._objects.filter(function(e){return e.type===t})},item:function(t){return this._objects[t]},isEmpty:function(){return 0===this._objects.length},size:function(){return this._objects.length},contains:function(t,e){return this._objects.indexOf(t)>-1||!!e&&this._objects.some(function(e){return"function"==typeof e.contains&&e.contains(t,!0)})},complexity:function(){return this._objects.reduce(function(t,e){return t+(e.complexity?e.complexity():0)},0)}},tQ.CommonMethods={_setOptions:function(t){for(var e in t)this.set(e,t[e])},_initGradient:function(t,e){!t||!t.colorStops||t instanceof tQ.Gradient||this.set(e,new tQ.Gradient(t))},_initPattern:function(t,e,i){!t||!t.source||t instanceof tQ.Pattern?i&&i():this.set(e,new tQ.Pattern(t,i))},_setObject:function(t){for(var e in t)this._set(e,t[e])},set:function(t,e){return"object"==typeof t?this._setObject(t):this._set(t,e),this},_set:function(t,e){this[t]=e},toggle:function(t){var e=this.get(t);return"boolean"==typeof e&&this.set(t,!e),this},get:function(t){return this[t]}},g=Math.sqrt,p=Math.atan2,v=Math.pow,m=Math.PI/180,y=Math.PI/2,tQ.util={cos:function(t){if(0===t)return 1;switch(t<0&&(t=-t),t/y){case 1:case 3:return 0;case 2:return -1}return Math.cos(t)},sin:function(t){if(0===t)return 0;var e=1;switch(t<0&&(e=-1),t/y){case 1:return e;case 2:return 0;case 3:return-e}return Math.sin(t)},removeFromArray:function(t,e){var i=t.indexOf(e);return -1!==i&&t.splice(i,1),t},getRandomInt:function(t,e){return Math.floor(Math.random()*(e-t+1))+t},degreesToRadians:function(t){return t*m},radiansToDegrees:function(t){return t/m},rotatePoint:function(t,e,i){var r=new tQ.Point(t.x-e.x,t.y-e.y),n=tQ.util.rotateVector(r,i);return new tQ.Point(n.x,n.y).addEquals(e)},rotateVector:function(t,e){var i=tQ.util.sin(e),r=tQ.util.cos(e);return{x:t.x*r-t.y*i,y:t.x*i+t.y*r}},createVector:function(t,e){return new tQ.Point(e.x-t.x,e.y-t.y)},calcAngleBetweenVectors:function(t,e){return Math.acos((t.x*e.x+t.y*e.y)/(Math.hypot(t.x,t.y)*Math.hypot(e.x,e.y)))},getHatVector:function(t){return new tQ.Point(t.x,t.y).multiply(1/Math.hypot(t.x,t.y))},getBisector:function(t,e,i){var r=tQ.util.createVector(t,e),n=tQ.util.createVector(t,i),a=tQ.util.calcAngleBetweenVectors(r,n),o=tQ.util.calcAngleBetweenVectors(tQ.util.rotateVector(r,a),n),s=a*(0===o?1:-1)/2;return{vector:tQ.util.getHatVector(tQ.util.rotateVector(r,s)),angle:a}},projectStrokeOnPoints:function(t,e,i){var r=[],n=e.strokeWidth/2,a=e.strokeUniform?new tQ.Point(1/e.scaleX,1/e.scaleY):new tQ.Point(1,1),getStrokeHatVector=function(t){var e=n/Math.hypot(t.x,t.y);return new tQ.Point(t.x*e*a.x,t.y*e*a.y)};return t.length<=1||t.forEach(function(o,s){var l,c,h=new tQ.Point(o.x,o.y);0===s?(c=t[s+1],l=i?getStrokeHatVector(tQ.util.createVector(c,h)).addEquals(h):t[t.length-1]):s===t.length-1?(l=t[s-1],c=i?getStrokeHatVector(tQ.util.createVector(l,h)).addEquals(h):t[0]):(l=t[s-1],c=t[s+1]);var u,f,d=tQ.util.getBisector(h,l,c),g=d.vector,p=d.angle;if("miter"===e.strokeLineJoin&&(u=-n/Math.sin(p/2),Math.hypot((f=new tQ.Point(g.x*u*a.x,g.y*u*a.y)).x,f.y)/n<=e.strokeMiterLimit)){r.push(h.add(f)),r.push(h.subtract(f));return}u=-n*Math.SQRT2,f=new tQ.Point(g.x*u*a.x,g.y*u*a.y),r.push(h.add(f)),r.push(h.subtract(f))}),r},transformPoint:function(t,e,i){return i?new tQ.Point(e[0]*t.x+e[2]*t.y,e[1]*t.x+e[3]*t.y):new tQ.Point(e[0]*t.x+e[2]*t.y+e[4],e[1]*t.x+e[3]*t.y+e[5])},makeBoundingBoxFromPoints:function(t,e){if(e)for(var i=0;i<t.length;i++)t[i]=tQ.util.transformPoint(t[i],e);var r=[t[0].x,t[1].x,t[2].x,t[3].x],n=tQ.util.array.min(r),a=tQ.util.array.max(r),o=[t[0].y,t[1].y,t[2].y,t[3].y],s=tQ.util.array.min(o);return{left:n,top:s,width:a-n,height:tQ.util.array.max(o)-s}},invertTransform:function(t){var e=1/(t[0]*t[3]-t[1]*t[2]),i=[e*t[3],-e*t[1],-e*t[2],e*t[0]],r=tQ.util.transformPoint({x:t[4],y:t[5]},i,!0);return i[4]=-r.x,i[5]=-r.y,i},toFixed:function(t,e){return parseFloat(Number(t).toFixed(e))},parseUnit:function(t,e){var i=/\D{0,2}$/.exec(t),r=parseFloat(t);switch(e||(e=tQ.Text.DEFAULT_SVG_FONT_SIZE),i[0]){case"mm":return r*tQ.DPI/25.4;case"cm":return r*tQ.DPI/2.54;case"in":return r*tQ.DPI;case"pt":return r*tQ.DPI/72;case"pc":return r*tQ.DPI/72*12;case"em":return r*e;default:return r}},falseFunction:function(){return!1},getKlass:function(t,e){return t=tQ.util.string.camelize(t.charAt(0).toUpperCase()+t.slice(1)),tQ.util.resolveNamespace(e)[t]},getSvgAttributes:function(t){var e=["instantiated_by_use","style","id","class"];switch(t){case"linearGradient":e=e.concat(["x1","y1","x2","y2","gradientUnits","gradientTransform"]);break;case"radialGradient":e=e.concat(["gradientUnits","gradientTransform","cx","cy","r","fx","fy","fr"]);break;case"stop":e=e.concat(["offset","stop-color","stop-opacity"])}return e},resolveNamespace:function(t){if(!t)return tQ;var i,r=t.split("."),n=r.length,a=e||tQ.window;for(i=0;i<n;++i)a=a[r[i]];return a},loadImage:function(t,e,i,r){if(!t){e&&e.call(i,t);return}var n=tQ.util.createImage(),onLoadCallback=function(){e&&e.call(i,n,!1),n=n.onload=n.onerror=null};n.onload=onLoadCallback,n.onerror=function(){tQ.log("Error loading "+n.src),e&&e.call(i,null,!0),n=n.onload=n.onerror=null},0!==t.indexOf("data")&&null!=r&&(n.crossOrigin=r),"data:image/svg"===t.substring(0,14)&&(n.onload=null,tQ.util.loadImageInDom(n,onLoadCallback)),n.src=t},loadImageInDom:function(t,e){var i=tQ.document.createElement("div");i.style.width=i.style.height="1px",i.style.left=i.style.top="-100%",i.style.position="absolute",i.appendChild(t),tQ.document.querySelector("body").appendChild(i),t.onload=function(){e(),i.parentNode.removeChild(i),i=null}},enlivenObjects:function(t,e,i,r){var n=[],a=0,o=(t=t||[]).length;function onLoaded(){++a===o&&e&&e(n.filter(function(t){return t}))}if(!o){e&&e(n);return}t.forEach(function(t,e){if(!t||!t.type){onLoaded();return}tQ.util.getKlass(t.type,i).fromObject(t,function(i,a){a||(n[e]=i),r&&r(t,i,a),onLoaded()})})},enlivenObjectEnlivables:function(t,e,i){var r=tQ.Object.ENLIVEN_PROPS.filter(function(e){return!!t[e]});tQ.util.enlivenObjects(r.map(function(e){return t[e]}),function(t){var n={};r.forEach(function(i,r){n[i]=t[r],e&&(e[i]=t[r])}),i&&i(n)})},enlivenPatterns:function(t,e){function onLoaded(){++r===n&&e&&e(i)}var i=[],r=0,n=(t=t||[]).length;if(!n){e&&e(i);return}t.forEach(function(t,e){t&&t.source?new tQ.Pattern(t,function(t){i[e]=t,onLoaded()}):(i[e]=t,onLoaded())})},groupSVGElements:function(t,e,i){var r;return t&&1===t.length?t[0]:(e&&(e.width&&e.height?e.centerPoint={x:e.width/2,y:e.height/2}:(delete e.width,delete e.height)),r=new tQ.Group(t,e),void 0!==i&&(r.sourcePath=i),r)},populateWithProperties:function(t,e,i){if(i&&Array.isArray(i))for(var r=0,n=i.length;r<n;r++)i[r]in t&&(e[i[r]]=t[i[r]])},createCanvasElement:function(){return tQ.document.createElement("canvas")},copyCanvasElement:function(t){var e=tQ.util.createCanvasElement();return e.width=t.width,e.height=t.height,e.getContext("2d").drawImage(t,0,0),e},toDataURL:function(t,e,i){return t.toDataURL("image/"+e,i)},createImage:function(){return tQ.document.createElement("img")},multiplyTransformMatrices:function(t,e,i){return[t[0]*e[0]+t[2]*e[1],t[1]*e[0]+t[3]*e[1],t[0]*e[2]+t[2]*e[3],t[1]*e[2]+t[3]*e[3],i?0:t[0]*e[4]+t[2]*e[5]+t[4],i?0:t[1]*e[4]+t[3]*e[5]+t[5]]},qrDecompose:function(t){var e=p(t[1],t[0]),i=v(t[0],2)+v(t[1],2),r=g(i),n=(t[0]*t[3]-t[2]*t[1])/r;return{angle:e/m,scaleX:r,scaleY:n,skewX:p(t[0]*t[2]+t[1]*t[3],i)/m,skewY:0,translateX:t[4],translateY:t[5]}},calcRotateMatrix:function(t){if(!t.angle)return tQ.iMatrix.concat();var e=tQ.util.degreesToRadians(t.angle),i=tQ.util.cos(e),r=tQ.util.sin(e);return[i,r,-r,i,0,0]},calcDimensionsMatrix:function(t){var e=void 0===t.scaleX?1:t.scaleX,i=void 0===t.scaleY?1:t.scaleY,r=[t.flipX?-e:e,0,0,t.flipY?-i:i,0,0],n=tQ.util.multiplyTransformMatrices,a=tQ.util.degreesToRadians;return t.skewX&&(r=n(r,[1,0,Math.tan(a(t.skewX)),1],!0)),t.skewY&&(r=n(r,[1,Math.tan(a(t.skewY)),0,1],!0)),r},composeMatrix:function(t){var e=[1,0,0,1,t.translateX||0,t.translateY||0],i=tQ.util.multiplyTransformMatrices;return t.angle&&(e=i(e,tQ.util.calcRotateMatrix(t))),(1!==t.scaleX||1!==t.scaleY||t.skewX||t.skewY||t.flipX||t.flipY)&&(e=i(e,tQ.util.calcDimensionsMatrix(t))),e},resetObjectTransform:function(t){t.scaleX=1,t.scaleY=1,t.skewX=0,t.skewY=0,t.flipX=!1,t.flipY=!1,t.rotate(0)},saveObjectTransform:function(t){return{scaleX:t.scaleX,scaleY:t.scaleY,skewX:t.skewX,skewY:t.skewY,angle:t.angle,left:t.left,flipX:t.flipX,flipY:t.flipY,top:t.top}},isTransparent:function(t,e,i,r){r>0&&(e>r?e-=r:e=0,i>r?i-=r:i=0);var n,a=!0,o=t.getImageData(e,i,2*r||1,2*r||1),s=o.data.length;for(n=3;n<s&&!1!=(a=o.data[n]<=0);n+=4);return o=null,a},parsePreserveAspectRatioAttribute:function(t){var e,i="meet",r="Mid",n=t.split(" ");return n&&n.length&&("meet"!==(i=n.pop())&&"slice"!==i?(e=i,i="meet"):n.length&&(e=n.pop())),{meetOrSlice:i,alignX:"none"!==e?e.slice(1,4):"none",alignY:"none"!==e?e.slice(5,8):"none"}},clearFabricFontCache:function(t){(t=(t||"").toLowerCase())?tQ.charWidthsCache[t]&&delete tQ.charWidthsCache[t]:tQ.charWidthsCache={}},limitDimsByArea:function(t,e){var i=Math.sqrt(e*t);return{x:Math.floor(i),y:Math.floor(e/i)}},capValue:function(t,e,i){return Math.max(t,Math.min(e,i))},findScaleToFit:function(t,e){return Math.min(e.width/t.width,e.height/t.height)},findScaleToCover:function(t,e){return Math.max(e.width/t.width,e.height/t.height)},matrixToSVG:function(t){return"matrix("+t.map(function(t){return tQ.util.toFixed(t,tQ.Object.NUM_FRACTION_DIGITS)}).join(" ")+")"},removeTransformFromObject:function(t,e){var i=tQ.util.invertTransform(e),r=tQ.util.multiplyTransformMatrices(i,t.calcOwnMatrix());tQ.util.applyTransformToObject(t,r)},addTransformToObject:function(t,e){tQ.util.applyTransformToObject(t,tQ.util.multiplyTransformMatrices(e,t.calcOwnMatrix()))},applyTransformToObject:function(t,e){var i=tQ.util.qrDecompose(e),r=new tQ.Point(i.translateX,i.translateY);t.flipX=!1,t.flipY=!1,t.set("scaleX",i.scaleX),t.set("scaleY",i.scaleY),t.skewX=i.skewX,t.skewY=i.skewY,t.angle=i.angle,t.setPositionByOrigin(r,"center","center")},sizeAfterTransform:function(t,e,i){var r=t/2,n=e/2,a=tQ.util.calcDimensionsMatrix(i),o=tQ.util.makeBoundingBoxFromPoints([{x:-r,y:-n},{x:r,y:-n},{x:-r,y:n},{x:r,y:n}],a);return{x:o.width,y:o.height}},mergeClipPaths:function(t,e){var i=t,r=e;i.inverted&&!r.inverted&&(i=e,r=t),tQ.util.applyTransformToObject(r,tQ.util.multiplyTransformMatrices(tQ.util.invertTransform(i.calcTransformMatrix()),r.calcTransformMatrix()));var n=i.inverted&&r.inverted;return n&&(i.inverted=r.inverted=!1),new tQ.Group([i],{clipPath:r,inverted:n})},hasStyleChanged:function(t,e,i){return i=i||!1,t.fill!==e.fill||t.stroke!==e.stroke||t.strokeWidth!==e.strokeWidth||t.fontSize!==e.fontSize||t.fontFamily!==e.fontFamily||t.fontWeight!==e.fontWeight||t.fontStyle!==e.fontStyle||t.deltaY!==e.deltaY||i&&(t.overline!==e.overline||t.underline!==e.underline||t.linethrough!==e.linethrough)},stylesToArray:function(t,e){for(var t=tQ.util.object.clone(t,!0),i=e.split("\n"),r=-1,n={},a=[],o=0;o<i.length;o++){if(!t[o]){r+=i[o].length;continue}for(var s=0;s<i[o].length;s++){r++;var l=t[o][s];l&&(tQ.util.hasStyleChanged(n,l,!0)?a.push({start:r,end:r+1,style:l}):a[a.length-1].end++),n=l||{}}}return a},stylesFromArray:function(t,e){if(!Array.isArray(t))return t;for(var i=e.split("\n"),r=-1,n=0,a={},o=0;o<i.length;o++)for(var s=0;s<i[o].length;s++)r++,t[n]&&t[n].start<=r&&r<t[n].end&&(a[o]=a[o]||{},a[o][s]=Object.assign({},t[n].style),r===t[n].end-1&&n++);return a}},function(){var t=Array.prototype.join,e={m:2,l:2,h:1,v:1,c:6,s:4,q:4,t:2,a:7},i={m:"l",M:"L"};function calcVectorAngle(t,e,i,r){var n=Math.atan2(e,t),a=Math.atan2(r,i);return a>=n?a-n:2*Math.PI-(n-a)}function calcLineLength(t,e,i,r){return Math.sqrt((i-t)*(i-t)+(r-e)*(r-e))}function pathIterator(t,e,i){var r,n,a={x:e,y:i},o=0;for(n=1;n<=100;n+=1)r=t(n/100),o+=calcLineLength(a.x,a.y,r.x,r.y),a=r;return o}function getPathSegmentsInfo(t){for(var e,i,r,n,a=0,o=t.length,s=0,l=0,c=0,h=0,u=[],f=0;f<o;f++){switch(r={x:s,y:l,command:(e=t[f])[0]},e[0]){case"M":r.length=0,c=s=e[1],h=l=e[2];break;case"L":r.length=calcLineLength(s,l,e[1],e[2]),s=e[1],l=e[2];break;case"C":i=function(t,e,i,r,n,a,o,s){return function(l){var c=l*l*l,h=3*l*l*(1-l),u=3*l*(1-l)*(1-l),f=(1-l)*(1-l)*(1-l);return{x:o*c+n*h+i*u+t*f,y:s*c+a*h+r*u+e*f}}}(s,l,e[1],e[2],e[3],e[4],e[5],e[6]),n=function(t,e,i,r,n,a,o,s){return function(l){var c=1-l;return Math.atan2(3*c*c*(r-e)+6*c*l*(a-r)+3*l*l*(s-a),3*c*c*(i-t)+6*c*l*(n-i)+3*l*l*(o-n))}}(s,l,e[1],e[2],e[3],e[4],e[5],e[6]),r.iterator=i,r.angleFinder=n,r.length=pathIterator(i,s,l),s=e[5],l=e[6];break;case"Q":i=function(t,e,i,r,n,a){return function(o){var s=o*o,l=2*o*(1-o),c=(1-o)*(1-o);return{x:n*s+i*l+t*c,y:a*s+r*l+e*c}}}(s,l,e[1],e[2],e[3],e[4]),n=function(t,e,i,r,n,a){return function(o){var s=1-o;return Math.atan2(2*s*(r-e)+2*o*(a-r),2*s*(i-t)+2*o*(n-i))}}(s,l,e[1],e[2],e[3],e[4]),r.iterator=i,r.angleFinder=n,r.length=pathIterator(i,s,l),s=e[3],l=e[4];break;case"Z":case"z":r.destX=c,r.destY=h,r.length=calcLineLength(s,l,c,h),s=c,l=h}a+=r.length,u.push(r)}return u.push({length:a,x:s,y:l}),u}tQ.util.joinPath=function(t){return t.map(function(t){return t.join(" ")}).join(" ")},tQ.util.parsePath=function(t){var r,n,a,o,s,l=[],c=[],h=tQ.rePathCommand,u="[-+]?(?:\\d*\\.\\d+|\\d+\\.?)(?:[eE][-+]?\\d+)?\\s*",f="("+u+")"+tQ.commaWsp,d="([01])"+tQ.commaWsp+"?",g=RegExp(f+"?"+f+"?"+f+d+d+f+"?("+u+")","g");if(!t||!t.match)return l;s=t.match(/[mzlhvcsqta][^mzlhvcsqta]*/gi);for(var p,v=0,m=s.length;v<m;v++){o=(r=s[v]).slice(1).trim(),c.length=0;var y,b=r.charAt(0);if(p=[b],"a"===b.toLowerCase())for(;y=g.exec(o);)for(var x=1;x<y.length;x++)c.push(y[x]);else for(;a=h.exec(o);)c.push(a[0]);for(var x=0,_=c.length;x<_;x++)isNaN(n=parseFloat(c[x]))||p.push(n);var C=e[b.toLowerCase()],w=i[b]||b;if(p.length-1>C)for(var S=1,T=p.length;S<T;S+=C)l.push([b].concat(p.slice(S,S+C))),b=w;else l.push(p)}return l},tQ.util.makePathSimpler=function(t){var e,i,r,n,a,o,s=0,l=0,c=t.length,h=0,u=0,f=[];for(i=0;i<c;++i){switch(r=!1,(e=t[i].slice(0))[0]){case"l":e[0]="L",e[1]+=s,e[2]+=l;case"L":s=e[1],l=e[2];break;case"h":e[1]+=s;case"H":e[0]="L",e[2]=l,s=e[1];break;case"v":e[1]+=l;case"V":e[0]="L",l=e[1],e[1]=s,e[2]=l;break;case"m":e[0]="M",e[1]+=s,e[2]+=l;case"M":s=e[1],l=e[2],h=e[1],u=e[2];break;case"c":e[0]="C",e[1]+=s,e[2]+=l,e[3]+=s,e[4]+=l,e[5]+=s,e[6]+=l;case"C":a=e[3],o=e[4],s=e[5],l=e[6];break;case"s":e[0]="S",e[1]+=s,e[2]+=l,e[3]+=s,e[4]+=l;case"S":"C"===n?(a=2*s-a,o=2*l-o):(a=s,o=l),s=e[3],l=e[4],e[0]="C",e[5]=e[3],e[6]=e[4],e[3]=e[1],e[4]=e[2],e[1]=a,e[2]=o,a=e[3],o=e[4];break;case"q":e[0]="Q",e[1]+=s,e[2]+=l,e[3]+=s,e[4]+=l;case"Q":a=e[1],o=e[2],s=e[3],l=e[4];break;case"t":e[0]="T",e[1]+=s,e[2]+=l;case"T":"Q"===n?(a=2*s-a,o=2*l-o):(a=s,o=l),e[0]="Q",s=e[1],l=e[2],e[1]=a,e[2]=o,e[3]=s,e[4]=l;break;case"a":e[0]="A",e[6]+=s,e[7]+=l;case"A":r=!0,f=f.concat(function(t,e,i){for(var r=i[1],n=i[2],a=i[3],o=i[4],s=i[5],l=function(t,e,i,r,n,a,o){var s=Math.PI,l=o*s/180,c=tQ.util.sin(l),h=tQ.util.cos(l),u=0,f=0,d=-h*t*.5-c*e*.5,g=-h*e*.5+c*t*.5,p=(i=Math.abs(i))*i,v=(r=Math.abs(r))*r,m=g*g,y=d*d,b=p*v-p*m-v*y,x=0;if(b<0){var _=Math.sqrt(1-b/(p*v));i*=_,r*=_}else x=(n===a?-1:1)*Math.sqrt(b/(p*m+v*y));var C=x*i*g/r,w=-x*r*d/i,S=h*C-c*w+.5*t,T=c*C+h*w+.5*e,j=calcVectorAngle(1,0,(d-C)/i,(g-w)/r),k=calcVectorAngle((d-C)/i,(g-w)/r,(-d-C)/i,(-g-w)/r);0===a&&k>0?k-=2*s:1===a&&k<0&&(k+=2*s);for(var O=Math.ceil(Math.abs(k/s*2)),P=[],F=k/O,E=8/3*Math.sin(F/4)*Math.sin(F/4)/Math.sin(F/2),D=j+F,M=0;M<O;M++)P[M]=function(t,e,i,r,n,a,o,s,l,c,h){var u=tQ.util.cos(t),f=tQ.util.sin(t),d=tQ.util.cos(e),g=tQ.util.sin(e),p=i*n*d-r*a*g+o,v=r*n*d+i*a*g+s;return["C",c+l*(-i*n*f-r*a*u),h+l*(-r*n*f+i*a*u),p+l*(i*n*g+r*a*d),v+l*(r*n*g-i*a*d),p,v]}(j,D,h,c,i,r,S,T,E,u,f),u=P[M][5],f=P[M][6],j=D,D+=F;return P}(i[6]-t,i[7]-e,r,n,o,s,a),c=0,h=l.length;c<h;c++)l[c][1]+=t,l[c][2]+=e,l[c][3]+=t,l[c][4]+=e,l[c][5]+=t,l[c][6]+=e;return l}(s,l,e)),s=e[6],l=e[7];break;case"z":case"Z":s=h,l=u}r||f.push(e),n=e[0]}return f},tQ.util.getSmoothPathFromPoints=function(t,e){var i,r=[],n=new tQ.Point(t[0].x,t[0].y),a=new tQ.Point(t[1].x,t[1].y),o=t.length,s=1,l=0,c=o>2;for(e=e||0,c&&(s=t[2].x<a.x?-1:t[2].x===a.x?0:1,l=t[2].y<a.y?-1:t[2].y===a.y?0:1),r.push(["M",n.x-s*e,n.y-l*e]),i=1;i<o;i++){if(!n.eq(a)){var h=n.midPointFrom(a);r.push(["Q",n.x,n.y,h.x,h.y])}n=t[i],i+1<t.length&&(a=t[i+1])}return c&&(s=n.x>t[i-2].x?1:n.x===t[i-2].x?0:-1,l=n.y>t[i-2].y?1:n.y===t[i-2].y?0:-1),r.push(["L",n.x+s*e,n.y+l*e]),r},tQ.util.getPathSegmentsInfo=getPathSegmentsInfo,tQ.util.getBoundsOfCurve=function(e,i,r,n,a,o,s,l){if(tQ.cachesBoundsOfCurve&&(c=t.call(arguments),tQ.boundsOfCurveCache[c]))return tQ.boundsOfCurveCache[c];var c,h,u,f,d,g,p,v,m,y=Math.sqrt,b=Math.min,x=Math.max,_=Math.abs,C=[],w=[[],[]];u=6*e-12*r+6*a,h=-3*e+9*r-9*a+3*s,f=3*r-3*e;for(var S=0;S<2;++S){if(S>0&&(u=6*i-12*n+6*o,h=-3*i+9*n-9*o+3*l,f=3*n-3*i),1e-12>_(h)){if(1e-12>_(u))continue;0<(d=-f/u)&&d<1&&C.push(d);continue}!((v=u*u-4*f*h)<0)&&(0<(g=(-u+(m=y(v)))/(2*h))&&g<1&&C.push(g),0<(p=(-u-m)/(2*h))&&p<1&&C.push(p))}for(var T,j,k,O=C.length,P=O;O--;)T=(k=1-(d=C[O]))*k*k*e+3*k*k*d*r+3*k*d*d*a+d*d*d*s,w[0][O]=T,j=k*k*k*i+3*k*k*d*n+3*k*d*d*o+d*d*d*l,w[1][O]=j;w[0][P]=e,w[1][P]=i,w[0][P+1]=s,w[1][P+1]=l;var F=[{x:b.apply(null,w[0]),y:b.apply(null,w[1])},{x:x.apply(null,w[0]),y:x.apply(null,w[1])}];return tQ.cachesBoundsOfCurve&&(tQ.boundsOfCurveCache[c]=F),F},tQ.util.getPointOnPath=function(t,e,i){i||(i=getPathSegmentsInfo(t));for(var r=0;e-i[r].length>0&&r<i.length-2;)e-=i[r].length,r++;var n,a=i[r],o=e/a.length,s=a.command,l=t[r];switch(s){case"M":return{x:a.x,y:a.y,angle:0};case"Z":case"z":return(n=new tQ.Point(a.x,a.y).lerp(new tQ.Point(a.destX,a.destY),o)).angle=Math.atan2(a.destY-a.y,a.destX-a.x),n;case"L":return(n=new tQ.Point(a.x,a.y).lerp(new tQ.Point(l[1],l[2]),o)).angle=Math.atan2(l[2]-a.y,l[1]-a.x),n;case"C":case"Q":return function(t,e){for(var i,r,n,a=0,o=0,s=t.iterator,l={x:t.x,y:t.y},c=.01,h=t.angleFinder;o<e&&c>1e-4;)i=s(a),n=a,(r=calcLineLength(l.x,l.y,i.x,i.y))+o>e?(a-=c,c/=2):(l=i,a+=c,o+=r);return i.angle=h(n),i}(a,e)}},tQ.util.transformPath=function(t,e,i){return i&&(e=tQ.util.multiplyTransformMatrices(e,[1,0,0,1,-i.x,-i.y])),t.map(function(t){for(var i=t.slice(0),r={},n=1;n<t.length-1;n+=2)r.x=t[n],r.y=t[n+1],r=tQ.util.transformPoint(r,e),i[n]=r.x,i[n+1]=r.y;return i})}}(),function(){var t=Array.prototype.slice;function find(t,e,i){if(t&&0!==t.length){var r=t.length-1,n=e?t[r][e]:t[r];if(e)for(;r--;)i(t[r][e],n)&&(n=t[r][e]);else for(;r--;)i(t[r],n)&&(n=t[r]);return n}}tQ.util.array={fill:function(t,e){for(var i=t.length;i--;)t[i]=e;return t},invoke:function(e,i){for(var r=t.call(arguments,2),n=[],a=0,o=e.length;a<o;a++)n[a]=r.length?e[a][i].apply(e[a],r):e[a][i].call(e[a]);return n},min:function(t,e){return find(t,e,function(t,e){return t<e})},max:function(t,e){return find(t,e,function(t,e){return t>=e})}}}(),function(){function extend(t,e,i){if(i){if(!tQ.isLikelyNode&&e instanceof Element)t=e;else if(e instanceof Array){t=[];for(var r=0,n=e.length;r<n;r++)t[r]=extend({},e[r],i)}else if(e&&"object"==typeof e)for(var a in e)"canvas"===a||"group"===a?t[a]=null:e.hasOwnProperty(a)&&(t[a]=extend({},e[a],i));else t=e}else for(var a in e)t[a]=e[a];return t}tQ.util.object={extend:extend,clone:function(t,e){return extend({},t,e)}},tQ.util.object.extend(tQ.util,tQ.Observable)}(),tQ.util.string={camelize:function(t){return t.replace(/-+(.)?/g,function(t,e){return e?e.toUpperCase():""})},capitalize:function(t,e){return t.charAt(0).toUpperCase()+(e?t.slice(1):t.slice(1).toLowerCase())},escapeXml:function(t){return t.replace(/&/g,"&").replace(/"/g,""").replace(/'/g,"'").replace(/</g,"<").replace(/>/g,">")},graphemeSplit:function(t){var e,i=0,r=[];for(i=0;i<t.length;i++)!1!==(e=function(t,e){var i=t.charCodeAt(e);if(isNaN(i))return"";if(i<55296||i>57343)return t.charAt(e);if(55296<=i&&i<=56319){if(t.length<=e+1)throw"High surrogate without following low surrogate";var r=t.charCodeAt(e+1);if(56320>r||r>57343)throw"High surrogate without following low surrogate";return t.charAt(e)+t.charAt(e+1)}if(0===e)throw"Low surrogate without preceding high surrogate";var n=t.charCodeAt(e-1);if(55296>n||n>56319)throw"Low surrogate without preceding high surrogate";return!1}(t,i))&&r.push(e);return r}},function(){var t=Array.prototype.slice,emptyFunction=function(){},e=function(){for(var t in{toString:1})if("toString"===t)return!1;return!0}(),addMethods=function(t,i,r){for(var n in i)n in t.prototype&&"function"==typeof t.prototype[n]&&(i[n]+"").indexOf("callSuper")>-1?t.prototype[n]=function(t){return function(){var e=this.constructor.superclass;this.constructor.superclass=r;var n=i[t].apply(this,arguments);if(this.constructor.superclass=e,"initialize"!==t)return n}}(n):t.prototype[n]=i[n],e&&(i.toString!==Object.prototype.toString&&(t.prototype.toString=i.toString),i.valueOf!==Object.prototype.valueOf&&(t.prototype.valueOf=i.valueOf))};function Subclass(){}function callSuper(e){for(var i=null,r=this;r.constructor.superclass;){var n=r.constructor.superclass.prototype[e];if(r[e]!==n){i=n;break}r=r.constructor.superclass.prototype}return i?arguments.length>1?i.apply(this,t.call(arguments,1)):i.call(this):console.log("tried to callSuper "+e+", method not found in prototype chain",this)}tQ.util.createClass=function(){var e=null,i=t.call(arguments,0);function klass(){this.initialize.apply(this,arguments)}"function"==typeof i[0]&&(e=i.shift()),klass.superclass=e,klass.subclasses=[],e&&(Subclass.prototype=e.prototype,klass.prototype=new Subclass,e.subclasses.push(klass));for(var r=0,n=i.length;r<n;r++)addMethods(klass,i[r],e);return klass.prototype.initialize||(klass.prototype.initialize=emptyFunction),klass.prototype.constructor=klass,klass.prototype.callSuper=callSuper,klass}}(),b=!!tQ.document.createElement("div").attachEvent,x=["touchstart","touchmove","touchend"],tQ.util.addListener=function(t,e,i,r){t&&t.addEventListener(e,i,!b&&r)},tQ.util.removeListener=function(t,e,i,r){t&&t.removeEventListener(e,i,!b&&r)},tQ.util.getPointer=function(t){var e,i=t.target,r=tQ.util.getScrollLeftTop(i),n=(e=t.changedTouches)&&e[0]?e[0]:t;return{x:n.clientX+r.left,y:n.clientY+r.top}},tQ.util.isTouchEvent=function(t){return x.indexOf(t.type)>-1||"touch"===t.pointerType},C="string"==typeof(_=tQ.document.createElement("div")).style.opacity,w="string"==typeof _.style.filter,S=/alpha\s*\(\s*opacity\s*=\s*([^\)]+)\)/,T=function(t){return t},C?T=function(t,e){return t.style.opacity=e,t}:w&&(T=function(t,e){var i=t.style;return t.currentStyle&&!t.currentStyle.hasLayout&&(i.zoom=1),S.test(i.filter)?(e=e>=.9999?"":"alpha(opacity="+100*e+")",i.filter=i.filter.replace(S,e)):i.filter+=" alpha(opacity="+100*e+")",t}),tQ.util.setStyle=function(t,e){var i=t.style;if(!i)return t;if("string"==typeof e)return t.style.cssText+=";"+e,e.indexOf("opacity")>-1?T(t,e.match(/opacity:\s*(\d?\.?\d*)/)[1]):t;for(var r in e)if("opacity"===r)T(t,e[r]);else{var n="float"===r||"cssFloat"===r?void 0===i.styleFloat?"cssFloat":"styleFloat":r;i.setProperty(n,e[r])}return t},function(){var t,e,i,r,n=Array.prototype.slice,toArray=function(t){return n.call(t,0)};try{r=toArray(tQ.document.childNodes) instanceof Array}catch(t){}function makeElement(t,e){var i=tQ.document.createElement(t);for(var r in e)"class"===r?i.className=e[r]:"for"===r?i.htmlFor=e[r]:i.setAttribute(r,e[r]);return i}function getScrollLeftTop(t){for(var e=0,i=0,r=tQ.document.documentElement,n=tQ.document.body||{scrollLeft:0,scrollTop:0};t&&(t.parentNode||t.host)&&((t=t.parentNode||t.host)===tQ.document?(e=n.scrollLeft||r.scrollLeft||0,i=n.scrollTop||r.scrollTop||0):(e+=t.scrollLeft||0,i+=t.scrollTop||0),1!==t.nodeType||"fixed"!==t.style.position););return{left:e,top:i}}r||(toArray=function(t){for(var e=Array(t.length),i=t.length;i--;)e[i]=t[i];return e}),i=tQ.document.defaultView&&tQ.document.defaultView.getComputedStyle?function(t,e){var i=tQ.document.defaultView.getComputedStyle(t,null);return i?i[e]:void 0}:function(t,e){var i=t.style[e];return!i&&t.currentStyle&&(i=t.currentStyle[e]),i},e="userSelect"in(t=tQ.document.documentElement.style)?"userSelect":"MozUserSelect"in t?"MozUserSelect":"WebkitUserSelect"in t?"WebkitUserSelect":"KhtmlUserSelect"in t?"KhtmlUserSelect":"",tQ.util.makeElementUnselectable=function(t){return void 0!==t.onselectstart&&(t.onselectstart=tQ.util.falseFunction),e?t.style[e]="none":"string"==typeof t.unselectable&&(t.unselectable="on"),t},tQ.util.makeElementSelectable=function(t){return void 0!==t.onselectstart&&(t.onselectstart=null),e?t.style[e]="":"string"==typeof t.unselectable&&(t.unselectable=""),t},tQ.util.setImageSmoothing=function(t,e){t.imageSmoothingEnabled=t.imageSmoothingEnabled||t.webkitImageSmoothingEnabled||t.mozImageSmoothingEnabled||t.msImageSmoothingEnabled||t.oImageSmoothingEnabled,t.imageSmoothingEnabled=e},tQ.util.getById=function(t){return"string"==typeof t?tQ.document.getElementById(t):t},tQ.util.toArray=toArray,tQ.util.addClass=function(t,e){t&&-1===(" "+t.className+" ").indexOf(" "+e+" ")&&(t.className+=(t.className?" ":"")+e)},tQ.util.makeElement=makeElement,tQ.util.wrapElement=function(t,e,i){return"string"==typeof e&&(e=makeElement(e,i)),t.parentNode&&t.parentNode.replaceChild(e,t),e.appendChild(t),e},tQ.util.getScrollLeftTop=getScrollLeftTop,tQ.util.getElementOffset=function(t){var e,r,n=t&&t.ownerDocument,a={left:0,top:0},o={left:0,top:0},s={borderLeftWidth:"left",borderTopWidth:"top",paddingLeft:"left",paddingTop:"top"};if(!n)return o;for(var l in s)o[s[l]]+=parseInt(i(t,l),10)||0;return e=n.documentElement,void 0!==t.getBoundingClientRect&&(a=t.getBoundingClientRect()),r=getScrollLeftTop(t),{left:a.left+r.left-(e.clientLeft||0)+o.left,top:a.top+r.top-(e.clientTop||0)+o.top}},tQ.util.getNodeCanvas=function(t){var e=tQ.jsdomImplForWrapper(t);return e._canvas||e._image},tQ.util.cleanUpJsdomNode=function(t){if(tQ.isLikelyNode){var e=tQ.jsdomImplForWrapper(t);e&&(e._image=null,e._canvas=null,e._currentSrc=null,e._attributes=null,e._classList=null)}}}(),function(){function emptyFn(){}tQ.util.request=function(t,e){e||(e={});var i,r,n=e.method?e.method.toUpperCase():"GET",a=e.onComplete||function(){},o=new tQ.window.XMLHttpRequest,s=e.body||e.parameters;return o.onreadystatechange=function(){4===o.readyState&&(a(o),o.onreadystatechange=emptyFn)},"GET"===n&&(s=null,"string"==typeof e.parameters)&&(i=t,r=e.parameters,t=i+(/\?/.test(i)?"&":"?")+r),o.open(n,t,!0),("POST"===n||"PUT"===n)&&o.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),o.send(s),o}}(),tQ.log=console.log,tQ.warn=console.warn,function(){var t=tQ.util.object.extend,e=tQ.util.object.clone,i=[];function noop(){return!1}function defaultEasing(t,e,i,r){return-i*Math.cos(t/r*(Math.PI/2))+i+e}tQ.util.object.extend(i,{cancelAll:function(){var t=this.splice(0);return t.forEach(function(t){t.cancel()}),t},cancelByCanvas:function(t){if(!t)return[];var e=this.filter(function(e){return"object"==typeof e.target&&e.target.canvas===t});return e.forEach(function(t){t.cancel()}),e},cancelByTarget:function(t){var e=this.findAnimationsByTarget(t);return e.forEach(function(t){t.cancel()}),e},findAnimationIndex:function(t){return this.indexOf(this.findAnimation(t))},findAnimation:function(t){return this.find(function(e){return e.cancel===t})},findAnimationsByTarget:function(t){return t?this.filter(function(e){return e.target===t}):[]}});var r=tQ.window.requestAnimationFrame||tQ.window.webkitRequestAnimationFrame||tQ.window.mozRequestAnimationFrame||tQ.window.oRequestAnimationFrame||tQ.window.msRequestAnimationFrame||function(t){return tQ.window.setTimeout(t,1e3/60)},n=tQ.window.cancelAnimationFrame||tQ.window.clearTimeout;function requestAnimFrame(){return r.apply(tQ.window,arguments)}tQ.util.animate=function(i){i||(i={});var r,n=!1,removeFromRegistry=function(){var t=tQ.runningAnimations.indexOf(r);return t>-1&&tQ.runningAnimations.splice(t,1)[0]};return r=t(e(i),{cancel:function(){return n=!0,removeFromRegistry()},currentValue:"startValue"in i?i.startValue:0,completionRate:0,durationRate:0}),tQ.runningAnimations.push(r),requestAnimFrame(function(t){var e,a=t||+new Date,o=i.duration||500,s=a+o,l=i.onChange||noop,c=i.abort||noop,h=i.onComplete||noop,u=i.easing||defaultEasing,f="startValue"in i&&i.startValue.length>0,d="startValue"in i?i.startValue:0,g="endValue"in i?i.endValue:100,p=i.byValue||(f?d.map(function(t,e){return g[e]-d[e]}):g-d);i.onStart&&i.onStart(),function tick(t){var i=(e=t||+new Date)>s?o:e-a,v=i/o,m=f?d.map(function(t,e){return u(i,d[e],p[e],o)}):u(i,d,p,o),y=f?Math.abs((m[0]-d[0])/p[0]):Math.abs((m-d)/p);if(r.currentValue=f?m.slice():m,r.completionRate=y,r.durationRate=v,!n){if(c(m,y,v)){removeFromRegistry();return}if(e>s){r.currentValue=f?g.slice():g,r.completionRate=1,r.durationRate=1,l(f?g.slice():g,1,1),h(g,1,1),removeFromRegistry();return}l(m,y,v),requestAnimFrame(tick)}}(a)}),r.cancel},tQ.util.requestAnimFrame=requestAnimFrame,tQ.util.cancelAnimFrame=function(){return n.apply(tQ.window,arguments)},tQ.runningAnimations=i}(),function(){function calculateColor(t,e,i){return"rgba("+parseInt(t[0]+i*(e[0]-t[0]),10)+","+parseInt(t[1]+i*(e[1]-t[1]),10)+","+parseInt(t[2]+i*(e[2]-t[2]),10)+(","+(t&&e?parseFloat(t[3]+i*(e[3]-t[3])):1))+")"}tQ.util.animateColor=function(t,e,i,r){var n=new tQ.Color(t).getSource(),a=new tQ.Color(e).getSource(),o=r.onComplete,s=r.onChange;return r=r||{},tQ.util.animate(tQ.util.object.extend(r,{duration:i||500,startValue:n,endValue:a,byValue:a,easing:function(t,e,i,n){return calculateColor(e,i,r.colorEasing?r.colorEasing(t,n):1-Math.cos(t/n*(Math.PI/2)))},onComplete:function(t,e,i){if(o)return o(calculateColor(a,a,0),e,i)},onChange:function(t,e,i){if(s){if(Array.isArray(t))return s(calculateColor(t,t,0),e,i);s(t,e,i)}}}))}}(),function(t){"use strict";var e=t.fabric||(t.fabric={});if(e.Point){e.warn("fabric.Point is already defined");return}function Point(t,e){this.x=t,this.y=e}e.Point=Point,Point.prototype={type:"point",constructor:Point,add:function(t){return new Point(this.x+t.x,this.y+t.y)},addEquals:function(t){return this.x+=t.x,this.y+=t.y,this},scalarAdd:function(t){return new Point(this.x+t,this.y+t)},scalarAddEquals:function(t){return this.x+=t,this.y+=t,this},subtract:function(t){return new Point(this.x-t.x,this.y-t.y)},subtractEquals:function(t){return this.x-=t.x,this.y-=t.y,this},scalarSubtract:function(t){return new Point(this.x-t,this.y-t)},scalarSubtractEquals:function(t){return this.x-=t,this.y-=t,this},multiply:function(t){return new Point(this.x*t,this.y*t)},multiplyEquals:function(t){return this.x*=t,this.y*=t,this},divide:function(t){return new Point(this.x/t,this.y/t)},divideEquals:function(t){return this.x/=t,this.y/=t,this},eq:function(t){return this.x===t.x&&this.y===t.y},lt:function(t){return this.x<t.x&&this.y<t.y},lte:function(t){return this.x<=t.x&&this.y<=t.y},gt:function(t){return this.x>t.x&&this.y>t.y},gte:function(t){return this.x>=t.x&&this.y>=t.y},lerp:function(t,e){return void 0===e&&(e=.5),e=Math.max(Math.min(1,e),0),new Point(this.x+(t.x-this.x)*e,this.y+(t.y-this.y)*e)},distanceFrom:function(t){var e=this.x-t.x,i=this.y-t.y;return Math.sqrt(e*e+i*i)},midPointFrom:function(t){return this.lerp(t)},min:function(t){return new Point(Math.min(this.x,t.x),Math.min(this.y,t.y))},max:function(t){return new Point(Math.max(this.x,t.x),Math.max(this.y,t.y))},toString:function(){return this.x+","+this.y},setXY:function(t,e){return this.x=t,this.y=e,this},setX:function(t){return this.x=t,this},setY:function(t){return this.y=t,this},setFromPoint:function(t){return this.x=t.x,this.y=t.y,this},swap:function(t){var e=this.x,i=this.y;this.x=t.x,this.y=t.y,t.x=e,t.y=i},clone:function(){return new Point(this.x,this.y)}}}(e),function(t){"use strict";var e=t.fabric||(t.fabric={});if(e.Intersection){e.warn("fabric.Intersection is already defined");return}function Intersection(t){this.status=t,this.points=[]}e.Intersection=Intersection,e.Intersection.prototype={constructor:Intersection,appendPoint:function(t){return this.points.push(t),this},appendPoints:function(t){return this.points=this.points.concat(t),this}},e.Intersection.intersectLineLine=function(t,i,r,n){var a,o=(n.x-r.x)*(t.y-r.y)-(n.y-r.y)*(t.x-r.x),s=(i.x-t.x)*(t.y-r.y)-(i.y-t.y)*(t.x-r.x),l=(n.y-r.y)*(i.x-t.x)-(n.x-r.x)*(i.y-t.y);if(0!==l){var c=o/l,h=s/l;0<=c&&c<=1&&0<=h&&h<=1?(a=new Intersection("Intersection")).appendPoint(new e.Point(t.x+c*(i.x-t.x),t.y+c*(i.y-t.y))):a=new Intersection}else a=new Intersection(0===o||0===s?"Coincident":"Parallel");return a},e.Intersection.intersectLinePolygon=function(t,e,i){var r,n,a,o,s=new Intersection,l=i.length;for(o=0;o<l;o++)r=i[o],n=i[(o+1)%l],a=Intersection.intersectLineLine(t,e,r,n),s.appendPoints(a.points);return s.points.length>0&&(s.status="Intersection"),s},e.Intersection.intersectPolygonPolygon=function(t,e){var i,r=new Intersection,n=t.length;for(i=0;i<n;i++){var a=t[i],o=t[(i+1)%n],s=Intersection.intersectLinePolygon(a,o,e);r.appendPoints(s.points)}return r.points.length>0&&(r.status="Intersection"),r},e.Intersection.intersectPolygonRectangle=function(t,i,r){var n=i.min(r),a=i.max(r),o=new e.Point(a.x,n.y),s=new e.Point(n.x,a.y),l=Intersection.intersectLinePolygon(n,o,t),c=Intersection.intersectLinePolygon(o,a,t),h=Intersection.intersectLinePolygon(a,s,t),u=Intersection.intersectLinePolygon(s,n,t),f=new Intersection;return f.appendPoints(l.points),f.appendPoints(c.points),f.appendPoints(h.points),f.appendPoints(u.points),f.points.length>0&&(f.status="Intersection"),f}}(e),function(t){"use strict";var e=t.fabric||(t.fabric={});if(e.Color){e.warn("fabric.Color is already defined.");return}function Color(t){t?this._tryParsingColor(t):this.setSource([0,0,0,1])}function hue2rgb(t,e,i){return(i<0&&(i+=1),i>1&&(i-=1),i<1/6)?t+(e-t)*6*i:i<.5?e:i<2/3?t+(e-t)*(2/3-i)*6:t}e.Color=Color,e.Color.prototype={_tryParsingColor:function(t){var e;t in Color.colorNameMap&&(t=Color.colorNameMap[t]),"transparent"===t&&(e=[255,255,255,0]),e||(e=Color.sourceFromHex(t)),e||(e=Color.sourceFromRgb(t)),e||(e=Color.sourceFromHsl(t)),e||(e=[0,0,0,1]),e&&this.setSource(e)},_rgbToHsl:function(t,i,r){t/=255,i/=255,r/=255;var n,a,o,s=e.util.array.max([t,i,r]),l=e.util.array.min([t,i,r]);if(o=(s+l)/2,s===l)n=a=0;else{var c=s-l;switch(a=o>.5?c/(2-s-l):c/(s+l),s){case t:n=(i-r)/c+(i<r?6:0);break;case i:n=(r-t)/c+2;break;case r:n=(t-i)/c+4}n/=6}return[Math.round(360*n),Math.round(100*a),Math.round(100*o)]},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(),e=this._rgbToHsl(t[0],t[1],t[2]);return"hsl("+e[0]+","+e[1]+"%,"+e[2]+"%)"},toHsla:function(){var t=this.getSource(),e=this._rgbToHsl(t[0],t[1],t[2]);return"hsla("+e[0]+","+e[1]+"%,"+e[2]+"%,"+t[3]+")"},toHex:function(){var t,e,i,r=this.getSource();return t=1===(t=r[0].toString(16)).length?"0"+t:t,e=1===(e=r[1].toString(16)).length?"0"+e:e,i=1===(i=r[2].toString(16)).length?"0"+i:i,t.toUpperCase()+e.toUpperCase()+i.toUpperCase()},toHexa:function(){var t;return t=1===(t=(t=Math.round(255*this.getSource()[3])).toString(16)).length?"0"+t:t,this.toHex()+t.toUpperCase()},getAlpha:function(){return this.getSource()[3]},setAlpha:function(t){var e=this.getSource();return e[3]=t,this.setSource(e),this},toGrayscale:function(){var t=this.getSource(),e=parseInt((.3*t[0]+.59*t[1]+.11*t[2]).toFixed(0),10),i=t[3];return this.setSource([e,e,e,i]),this},toBlackWhite:function(t){var e=this.getSource(),i=(.3*e[0]+.59*e[1]+.11*e[2]).toFixed(0),r=e[3];return t=t||127,i=Number(i)<Number(t)?0:255,this.setSource([i,i,i,r]),this},overlayWith:function(t){t instanceof Color||(t=new Color(t));var e,i=[],r=this.getAlpha(),n=this.getSource(),a=t.getSource();for(e=0;e<3;e++)i.push(Math.round(.5*n[e]+.5*a[e]));return i[3]=r,this.setSource(i),this}},e.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,e.Color.reHSLa=/^hsla?\(\s*(\d{1,3})\s*,\s*(\d{1,3}\%)\s*,\s*(\d{1,3}\%)\s*(?:\s*,\s*(\d+(?:\.\d+)?)\s*)?\)$/i,e.Color.reHex=/^#?([0-9a-f]{8}|[0-9a-f]{6}|[0-9a-f]{4}|[0-9a-f]{3})$/i,e.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"},e.Color.fromRgb=function(t){return Color.fromSource(Color.sourceFromRgb(t))},e.Color.sourceFromRgb=function(t){var e=t.match(Color.reRGBa);if(e){var i=parseInt(e[1],10)/(/%$/.test(e[1])?100:1)*(/%$/.test(e[1])?255:1),r=parseInt(e[2],10)/(/%$/.test(e[2])?100:1)*(/%$/.test(e[2])?255:1),n=parseInt(e[3],10)/(/%$/.test(e[3])?100:1)*(/%$/.test(e[3])?255:1);return[parseInt(i,10),parseInt(r,10),parseInt(n,10),e[4]?parseFloat(e[4]):1]}},e.Color.fromRgba=Color.fromRgb,e.Color.fromHsl=function(t){return Color.fromSource(Color.sourceFromHsl(t))},e.Color.sourceFromHsl=function(t){var e=t.match(Color.reHSLa);if(e){var i,r,n,a=(parseFloat(e[1])%360+360)%360/360,o=parseFloat(e[2])/(/%$/.test(e[2])?100:1),s=parseFloat(e[3])/(/%$/.test(e[3])?100:1);if(0===o)i=r=n=s;else{var l=s<=.5?s*(o+1):s+o-s*o,c=2*s-l;i=hue2rgb(c,l,a+1/3),r=hue2rgb(c,l,a),n=hue2rgb(c,l,a-1/3)}return[Math.round(255*i),Math.round(255*r),Math.round(255*n),e[4]?parseFloat(e[4]):1]}},e.Color.fromHsla=Color.fromHsl,e.Color.fromHex=function(t){return Color.fromSource(Color.sourceFromHex(t))},e.Color.sourceFromHex=function(t){if(t.match(Color.reHex)){var e=t.slice(t.indexOf("#")+1),i=3===e.length||4===e.length,r=8===e.length||4===e.length,n=i?e.charAt(0)+e.charAt(0):e.substring(0,2),a=i?e.charAt(1)+e.charAt(1):e.substring(2,4),o=i?e.charAt(2)+e.charAt(2):e.substring(4,6),s=r?i?e.charAt(3)+e.charAt(3):e.substring(6,8):"FF";return[parseInt(n,16),parseInt(a,16),parseInt(o,16),parseFloat((parseInt(s,16)/255).toFixed(2))]}},e.Color.fromSource=function(t){var e=new Color;return e.setSource(t),e}}(e),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=["e","se","s","sw","w","nw","n","ne","e"],r=["ns","nesw","ew","nwse"],n={},a="left",o="right",s="bottom",l="center",c={top:s,bottom:"top",left:o,right:a,center:l},h=e.util.radiansToDegrees,u=Math.sign||function(t){return(t>0)-(t<0)||+t};function findCornerQuadrant(t,e){return Math.round((t.angle+h(Math.atan2(e.y,e.x))+360)%360/45)}function fireEvent(t,i){var r=i.transform.target,n=r.canvas,a=e.util.object.clone(i);a.target=r,n&&n.fire("object:"+t,a),r.fire(t,i)}function scaleIsProportional(t,e){var i=e.canvas,r=t[i.uniScaleKey];return i.uniformScaling&&!r||!i.uniformScaling&&r}function isTransformCentered(t){return t.originX===l&&t.originY===l}function scalingIsForbidden(t,e,i){var r=t.lockScalingX,n=t.lockScalingY;return!!r&&!!n||!e&&(!!r||!!n)&&!!i||!!r&&"x"===e||!!n&&"y"===e}function commonEventInfo(t,e,i,r){return{e:t,transform:e,pointer:{x:i,y:r}}}function wrapWithFixedAnchor(t){return function(e,i,r,n){var a=i.target,o=a.getCenterPoint(),s=a.translateToOriginPoint(o,i.originX,i.originY),l=t(e,i,r,n);return a.setPositionByOrigin(s,i.originX,i.originY),l}}function wrapWithFireEvent(t,e){return function(i,r,n,a){var o=e(i,r,n,a);return o&&fireEvent(t,commonEventInfo(i,r,n,a)),o}}function getLocalPoint(t,i,r,n,a){var o=t.target,s=o.controls[t.corner],l=o.canvas.getZoom(),c=o.padding/l,h=o.toLocalPoint(new e.Point(n,a),i,r);return h.x>=c&&(h.x-=c),h.x<=-c&&(h.x+=c),h.y>=c&&(h.y-=c),h.y<=c&&(h.y+=c),h.x-=s.offsetX,h.y-=s.offsetY,h}function targetHasOneFlip(t){return t.flipX!==t.flipY}function compensateScaleForSkew(t,e,i,r,n){if(0!==t[e]){var a=n/t._getTransformedDimensions()[r]*t[i];t.set(i,a)}}function skewObjectX(t,e,i,r){var n,l=e.target,c=l._getTransformedDimensions(0,l.skewY),u=Math.abs(2*getLocalPoint(e,e.originX,e.originY,i,r).x)-c.x,f=l.skewX;u<2?n=0:(n=h(Math.atan2(u/l.scaleX,c.y/l.scaleY)),e.originX===a&&e.originY===s&&(n=-n),e.originX===o&&"top"===e.originY&&(n=-n),targetHasOneFlip(l)&&(n=-n));var d=f!==n;if(d){var g=l._getTransformedDimensions().y;l.set("skewX",n),compensateScaleForSkew(l,"skewY","scaleY","y",g)}return d}function skewObjectY(t,e,i,r){var n,l=e.target,c=l._getTransformedDimensions(l.skewX,0),u=Math.abs(2*getLocalPoint(e,e.originX,e.originY,i,r).y)-c.y,f=l.skewY;u<2?n=0:(n=h(Math.atan2(u/l.scaleY,c.x/l.scaleX)),e.originX===a&&e.originY===s&&(n=-n),e.originX===o&&"top"===e.originY&&(n=-n),targetHasOneFlip(l)&&(n=-n));var d=f!==n;if(d){var g=l._getTransformedDimensions().x;l.set("skewY",n),compensateScaleForSkew(l,"skewX","scaleX","x",g)}return d}function scaleObject(t,e,i,r,n){n=n||{};var a,o,s,l,h,f,d=e.target,g=d.lockScalingX,p=d.lockScalingY,v=n.by,m=scaleIsProportional(t,d),y=scalingIsForbidden(d,v,m),b=e.gestureScale;if(y)return!1;if(b)o=e.scaleX*b,s=e.scaleY*b;else{if(a=getLocalPoint(e,e.originX,e.originY,i,r),h="y"!==v?u(a.x):1,f="x"!==v?u(a.y):1,e.signX||(e.signX=h),e.signY||(e.signY=f),d.lockScalingFlip&&(e.signX!==h||e.signY!==f))return!1;if(l=d._getTransformedDimensions(),m&&!v){var x=Math.abs(a.x)+Math.abs(a.y),_=e.original,C=x/(Math.abs(l.x*_.scaleX/d.scaleX)+Math.abs(l.y*_.scaleY/d.scaleY));o=_.scaleX*C,s=_.scaleY*C}else o=Math.abs(a.x*d.scaleX/l.x),s=Math.abs(a.y*d.scaleY/l.y);isTransformCentered(e)&&(o*=2,s*=2),e.signX!==h&&"y"!==v&&(e.originX=c[e.originX],o*=-1,e.signX=h),e.signY!==f&&"x"!==v&&(e.originY=c[e.originY],s*=-1,e.signY=f)}var w=d.scaleX,S=d.scaleY;return v?("x"===v&&d.set("scaleX",o),"y"===v&&d.set("scaleY",s)):(g||d.set("scaleX",o),p||d.set("scaleY",s)),w!==d.scaleX||S!==d.scaleY}n.scaleCursorStyleHandler=function(t,e,r){var n=scaleIsProportional(t,r),a="";return(0!==e.x&&0===e.y?a="x":0===e.x&&0!==e.y&&(a="y"),scalingIsForbidden(r,a,n))?"not-allowed":i[findCornerQuadrant(r,e)]+"-resize"},n.skewCursorStyleHandler=function(t,e,i){return 0!==e.x&&i.lockSkewingY||0!==e.y&&i.lockSkewingX?"not-allowed":r[findCornerQuadrant(i,e)%4]+"-resize"},n.scaleSkewCursorStyleHandler=function(t,e,i){return t[i.canvas.altActionKey]?n.skewCursorStyleHandler(t,e,i):n.scaleCursorStyleHandler(t,e,i)},n.rotationWithSnapping=wrapWithFireEvent("rotating",wrapWithFixedAnchor(function(t,e,i,r){var n=e.target,a=n.translateToOriginPoint(n.getCenterPoint(),e.originX,e.originY);if(n.lockRotation)return!1;var o=Math.atan2(e.ey-a.y,e.ex-a.x),s=h(Math.atan2(r-a.y,i-a.x)-o+e.theta),l=!0;if(n.snapAngle>0){var c=n.snapAngle,u=n.snapThreshold||c,f=Math.ceil(s/c)*c,d=Math.floor(s/c)*c;Math.abs(s-d)<u?s=d:Math.abs(s-f)<u&&(s=f)}return s<0&&(s=360+s),s%=360,l=n.angle!==s,n.angle=s,l})),n.scalingEqually=wrapWithFireEvent("scaling",wrapWithFixedAnchor(function(t,e,i,r){return scaleObject(t,e,i,r)})),n.scalingX=wrapWithFireEvent("scaling",wrapWithFixedAnchor(function(t,e,i,r){return scaleObject(t,e,i,r,{by:"x"})})),n.scalingY=wrapWithFireEvent("scaling",wrapWithFixedAnchor(function(t,e,i,r){return scaleObject(t,e,i,r,{by:"y"})})),n.scalingYOrSkewingX=function(t,e,i,r){return t[e.target.canvas.altActionKey]?n.skewHandlerX(t,e,i,r):n.scalingY(t,e,i,r)},n.scalingXOrSkewingY=function(t,e,i,r){return t[e.target.canvas.altActionKey]?n.skewHandlerY(t,e,i,r):n.scalingX(t,e,i,r)},n.changeWidth=wrapWithFireEvent("resizing",wrapWithFixedAnchor(function(t,e,i,r){var n=e.target,a=getLocalPoint(e,e.originX,e.originY,i,r),o=n.strokeWidth/(n.strokeUniform?n.scaleX:1),s=isTransformCentered(e)?2:1,l=n.width,c=Math.abs(a.x*s/n.scaleX)-o;return n.set("width",Math.max(c,0)),l!==c})),n.skewHandlerX=function(t,e,i,r){var n,s=e.target,c=s.skewX,h=e.originY;return!s.lockSkewingX&&(0===c?n=getLocalPoint(e,l,l,i,r).x>0?a:o:(c>0&&(n="top"===h?a:o),c<0&&(n="top"===h?o:a),targetHasOneFlip(s)&&(n=n===a?o:a)),e.originX=n,wrapWithFireEvent("skewing",wrapWithFixedAnchor(skewObjectX))(t,e,i,r))},n.skewHandlerY=function(t,e,i,r){var n,o=e.target,c=o.skewY,h=e.originX;return!o.lockSkewingY&&(0===c?n=getLocalPoint(e,l,l,i,r).y>0?"top":s:(c>0&&(n=h===a?"top":s),c<0&&(n=h===a?s:"top"),targetHasOneFlip(o)&&(n="top"===n?s:"top")),e.originY=n,wrapWithFireEvent("skewing",wrapWithFixedAnchor(skewObjectY))(t,e,i,r))},n.dragHandler=function(t,e,i,r){var n=e.target,a=i-e.offsetX,o=r-e.offsetY,s=!n.get("lockMovementX")&&n.left!==a,l=!n.get("lockMovementY")&&n.top!==o;return s&&n.set("left",a),l&&n.set("top",o),(s||l)&&fireEvent("moving",commonEventInfo(t,e,i,r)),s||l},n.scaleOrSkewActionName=function(t,e,i){var r=t[i.canvas.altActionKey];return 0===e.x?r?"skewX":"scaleY":0===e.y?r?"skewY":"scaleX":void 0},n.rotationStyleHandler=function(t,e,i){return i.lockRotation?"not-allowed":e.cursorStyle},n.fireEvent=fireEvent,n.wrapWithFixedAnchor=wrapWithFixedAnchor,n.wrapWithFireEvent=wrapWithFireEvent,n.getLocalPoint=getLocalPoint,e.controlsUtils=n}(e),k=(j=e.fabric||(e.fabric={})).util.degreesToRadians,(O=j.controlsUtils).renderCircleControl=function(t,e,i,r,n){r=r||{};var a,o=this.sizeX||r.cornerSize||n.cornerSize,s=this.sizeY||r.cornerSize||n.cornerSize,l=void 0!==r.transparentCorners?r.transparentCorners:n.transparentCorners,c=!l&&(r.cornerStrokeColor||n.cornerStrokeColor),h=e,u=i;t.save(),t.fillStyle=r.cornerColor||n.cornerColor,t.strokeStyle=r.cornerStrokeColor||n.cornerStrokeColor,o>s?(a=o,t.scale(1,s/o),u=i*o/s):s>o?(a=s,t.scale(o/s,1),h=e*s/o):a=o,t.lineWidth=1,t.beginPath(),t.arc(h,u,a/2,0,2*Math.PI,!1),t[l?"stroke":"fill"](),c&&t.stroke(),t.restore()},O.renderSquareControl=function(t,e,i,r,n){r=r||{};var a=this.sizeX||r.cornerSize||n.cornerSize,o=this.sizeY||r.cornerSize||n.cornerSize,s=void 0!==r.transparentCorners?r.transparentCorners:n.transparentCorners,l=!s&&(r.cornerStrokeColor||n.cornerStrokeColor),c=a/2,h=o/2;t.save(),t.fillStyle=r.cornerColor||n.cornerColor,t.strokeStyle=r.cornerStrokeColor||n.cornerStrokeColor,t.lineWidth=1,t.translate(e,i),t.rotate(k(n.angle)),t[(s?"stroke":"fill")+"Rect"](-c,-h,a,o),l&&t.strokeRect(-c,-h,a,o),t.restore()},(P=e.fabric||(e.fabric={})).Control=function(t){for(var e in t)this[e]=t[e]},P.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(t,e){return e.cursorStyle},getActionName:function(t,e){return e.actionName},getVisibility:function(t,e){var i=t._controlsVisibility;return i&&void 0!==i[e]?i[e]:this.visible},setVisibility:function(t){this.visible=t},positionHandler:function(t,e){return P.util.transformPoint({x:this.x*t.x+this.offsetX,y:this.y*t.y+this.offsetY},e)},calcCornerCoords:function(t,e,i,r,n){var a,o,s,l,c=n?this.touchSizeX:this.sizeX,h=n?this.touchSizeY:this.sizeY;if(c&&h&&c!==h){var u=Math.atan2(h,c),f=Math.sqrt(c*c+h*h)/2,d=u-P.util.degreesToRadians(t),g=Math.PI/2-u-P.util.degreesToRadians(t);a=f*P.util.cos(d),o=f*P.util.sin(d),s=f*P.util.cos(g),l=f*P.util.sin(g)}else{f=.7071067812*(c&&h?c:e);var d=P.util.degreesToRadians(45-t);a=s=f*P.util.cos(d),o=l=f*P.util.sin(d)}return{tl:{x:i-l,y:r-s},tr:{x:i+a,y:r-o},bl:{x:i-a,y:r+o},br:{x:i+l,y:r+s}}},render:function(t,e,i,r,n){"circle"===((r=r||{}).cornerStyle||n.cornerStyle)?P.controlsUtils.renderCircleControl.call(this,t,e,i,r,n):P.controlsUtils.renderSquareControl.call(this,t,e,i,r,n)}},function(){"use strict";if(tQ.StaticCanvas){tQ.warn("fabric.StaticCanvas is already defined.");return}var t=tQ.util.object.extend,e=tQ.util.getElementOffset,i=tQ.util.removeFromArray,r=(tQ.util.toFixed,tQ.util.transformPoint),n=tQ.util.invertTransform,a=tQ.util.getNodeCanvas,o=tQ.util.createCanvasElement,s=Error("Could not initialize `canvas` element");tQ.StaticCanvas=tQ.util.createClass(tQ.CommonMethods,{initialize:function(t,e){e||(e={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(t,e)},backgroundColor:"",backgroundImage:null,overlayColor:"",overlayImage:null,includeDefaultValues:!0,stateful:!1,renderOnAddRemove:!0,controlsAboveOverlay:!1,allowTouchScrolling:!1,imageSmoothingEnabled:!0,viewportTransform:tQ.iMatrix.concat(),backgroundVpt:!0,overlayVpt:!0,enableRetinaScaling:!0,vptCoords:{},skipOffscreen:!0,clipPath:void 0,_initStatic:function(t,e){var i=this.requestRenderAllBound;this._objects=[],this._createLowerCanvas(t),this._initOptions(e),this.interactive||this._initRetinaScaling(),e.overlayImage&&this.setOverlayImage(e.overlayImage,i),e.backgroundImage&&this.setBackgroundImage(e.backgroundImage,i),e.backgroundColor&&this.setBackgroundColor(e.backgroundColor,i),e.overlayColor&&this.setOverlayColor(e.overlayColor,i),this.calcOffset()},_isRetinaScaling:function(){return tQ.devicePixelRatio>1&&this.enableRetinaScaling},getRetinaScaling:function(){return this._isRetinaScaling()?Math.max(1,tQ.devicePixelRatio):1},_initRetinaScaling:function(){if(this._isRetinaScaling()){var t=tQ.devicePixelRatio;this.__initRetinaScaling(t,this.lowerCanvasEl,this.contextContainer),this.upperCanvasEl&&this.__initRetinaScaling(t,this.upperCanvasEl,this.contextTop)}},__initRetinaScaling:function(t,e,i){e.setAttribute("width",this.width*t),e.setAttribute("height",this.height*t),i.scale(t,t)},calcOffset:function(){return this._offset=e(this.lowerCanvasEl),this},setOverlayImage:function(t,e,i){return this.__setBgOverlayImage("overlayImage",t,e,i)},setBackgroundImage:function(t,e,i){return this.__setBgOverlayImage("backgroundImage",t,e,i)},setOverlayColor:function(t,e){return this.__setBgOverlayColor("overlayColor",t,e)},setBackgroundColor:function(t,e){return this.__setBgOverlayColor("backgroundColor",t,e)},__setBgOverlayImage:function(t,e,i,r){return"string"==typeof e?tQ.util.loadImage(e,function(e,n){if(e){var a=new tQ.Image(e,r);this[t]=a,a.canvas=this}i&&i(e,n)},this,r&&r.crossOrigin):(r&&e.setOptions(r),this[t]=e,e&&(e.canvas=this),i&&i(e,!1)),this},__setBgOverlayColor:function(t,e,i){return this[t]=e,this._initGradient(e,t),this._initPattern(e,t,i),this},_createCanvasElement:function(){var t=o();if(!t||(t.style||(t.style={}),void 0===t.getContext))throw s;return t},_initOptions:function(t){var e=this.lowerCanvasEl;this._setOptions(t),this.width=this.width||parseInt(e.width,10)||0,this.height=this.height||parseInt(e.height,10)||0,this.lowerCanvasEl.style&&(e.width=this.width,e.height=this.height,e.style.width=this.width+"px",e.style.height=this.height+"px",this.viewportTransform=this.viewportTransform.slice())},_createLowerCanvas:function(t){t&&t.getContext?this.lowerCanvasEl=t:this.lowerCanvasEl=tQ.util.getById(t)||this._createCanvasElement(),tQ.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(t,e){return this.setDimensions({width:t},e)},setHeight:function(t,e){return this.setDimensions({height:t},e)},setDimensions:function(t,e){var i;for(var r in e=e||{},t)i=t[r],e.cssOnly||(this._setBackstoreDimension(r,t[r]),i+="px",this.hasLostContext=!0),e.backstoreOnly||this._setCssDimension(r,i);return this._isCurrentlyDrawing&&this.freeDrawingBrush&&this.freeDrawingBrush._setBrushStyles(this.contextTop),this._initRetinaScaling(),this.calcOffset(),e.cssOnly||this.requestRenderAll(),this},_setBackstoreDimension:function(t,e){return this.lowerCanvasEl[t]=e,this.upperCanvasEl&&(this.upperCanvasEl[t]=e),this.cacheCanvasEl&&(this.cacheCanvasEl[t]=e),this[t]=e,this},_setCssDimension:function(t,e){return this.lowerCanvasEl.style[t]=e,this.upperCanvasEl&&(this.upperCanvasEl.style[t]=e),this.wrapperEl&&(this.wrapperEl.style[t]=e),this},getZoom:function(){return this.viewportTransform[0]},setViewportTransform:function(t){var e,i,r,n=this._activeObject,a=this.backgroundImage,o=this.overlayImage;for(i=0,this.viewportTransform=t,r=this._objects.length;i<r;i++)(e=this._objects[i]).group||e.setCoords(!0);return n&&n.setCoords(),a&&a.setCoords(!0),o&&o.setCoords(!0),this.calcViewportBoundaries(),this.renderOnAddRemove&&this.requestRenderAll(),this},zoomToPoint:function(t,e){var i=t,a=this.viewportTransform.slice(0);t=r(t,n(this.viewportTransform)),a[0]=e,a[3]=e;var o=r(t,a);return a[4]+=i.x-o.x,a[5]+=i.y-o.y,this.setViewportTransform(a)},setZoom:function(t){return this.zoomToPoint(new tQ.Point(0,0),t),this},absolutePan:function(t){var e=this.viewportTransform.slice(0);return e[4]=-t.x,e[5]=-t.y,this.setViewportTransform(e)},relativePan:function(t){return this.absolutePan(new tQ.Point(-t.x-this.viewportTransform[4],-t.y-this.viewportTransform[5]))},getElement:function(){return this.lowerCanvasEl},_onObjectAdded:function(t){this.stateful&&t.setupState(),t._set("canvas",this),t.setCoords(),this.fire("object:added",{target:t}),t.fire("added")},_onObjectRemoved:function(t){this.fire("object:removed",{target:t}),t.fire("removed"),delete t.canvas},clearContext:function(t){return t.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 t=this.contextContainer;return this.renderCanvas(t,this._objects),this},renderAndReset:function(){this.isRendering=0,this.renderAll()},requestRenderAll:function(){return this.isRendering||(this.isRendering=tQ.util.requestAnimFrame(this.renderAndResetBound)),this},calcViewportBoundaries:function(){var t={},e=this.width,i=this.height,a=n(this.viewportTransform);return t.tl=r({x:0,y:0},a),t.br=r({x:e,y:i},a),t.tr=new tQ.Point(t.br.x,t.tl.y),t.bl=new tQ.Point(t.tl.x,t.br.y),this.vptCoords=t,t},cancelRequestedRender:function(){this.isRendering&&(tQ.util.cancelAnimFrame(this.isRendering),this.isRendering=0)},renderCanvas:function(t,e){var i=this.viewportTransform,r=this.clipPath;this.cancelRequestedRender(),this.calcViewportBoundaries(),this.clearContext(t),tQ.util.setImageSmoothing(t,this.imageSmoothingEnabled),this.fire("before:render",{ctx:t}),this._renderBackground(t),t.save(),t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),this._renderObjects(t,e),t.restore(),!this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),r&&(r.canvas=this,r.shouldCache(),r._transformDone=!0,r.renderCache({forClipping:!0}),this.drawClipPathOnCanvas(t)),this._renderOverlay(t),this.controlsAboveOverlay&&this.interactive&&this.drawControls(t),this.fire("after:render",{ctx:t})},drawClipPathOnCanvas:function(t){var e=this.viewportTransform,i=this.clipPath;t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5]),t.globalCompositeOperation="destination-in",i.transform(t),t.scale(1/i.zoomX,1/i.zoomY),t.drawImage(i._cacheCanvas,-i.cacheTranslationX,-i.cacheTranslationY),t.restore()},_renderObjects:function(t,e){var i,r;for(i=0,r=e.length;i<r;++i)e[i]&&e[i].render(t)},_renderBackgroundOrOverlay:function(t,e){var i=this[e+"Color"],r=this[e+"Image"],n=this.viewportTransform,a=this[e+"Vpt"];if(i||r){if(i){t.save(),t.beginPath(),t.moveTo(0,0),t.lineTo(this.width,0),t.lineTo(this.width,this.height),t.lineTo(0,this.height),t.closePath(),t.fillStyle=i.toLive?i.toLive(t,this):i,a&&t.transform(n[0],n[1],n[2],n[3],n[4],n[5]),t.transform(1,0,0,1,i.offsetX||0,i.offsetY||0);var o=i.gradientTransform||i.patternTransform;o&&t.transform(o[0],o[1],o[2],o[3],o[4],o[5]),t.fill(),t.restore()}r&&(t.save(),a&&t.transform(n[0],n[1],n[2],n[3],n[4],n[5]),r.render(t),t.restore())}},_renderBackground:function(t){this._renderBackgroundOrOverlay(t,"background")},_renderOverlay:function(t){this._renderBackgroundOrOverlay(t,"overlay")},getCenter:function(){return{top:this.height/2,left:this.width/2}},getCenterPoint:function(){return new tQ.Point(this.width/2,this.height/2)},centerObjectH:function(t){return this._centerObject(t,new tQ.Point(this.getCenterPoint().x,t.getCenterPoint().y))},centerObjectV:function(t){return this._centerObject(t,new tQ.Point(t.getCenterPoint().x,this.getCenterPoint().y))},centerObject:function(t){var e=this.getCenterPoint();return this._centerObject(t,e)},viewportCenterObject:function(t){var e=this.getVpCenter();return this._centerObject(t,e)},viewportCenterObjectH:function(t){var e=this.getVpCenter();return this._centerObject(t,new tQ.Point(e.x,t.getCenterPoint().y)),this},viewportCenterObjectV:function(t){var e=this.getVpCenter();return this._centerObject(t,new tQ.Point(t.getCenterPoint().x,e.y))},getVpCenter:function(){return r(this.getCenterPoint(),n(this.viewportTransform))},_centerObject:function(t,e){return t.setPositionByOrigin(e,"center","center"),t.setCoords(),this.renderOnAddRemove&&this.requestRenderAll(),this},toDatalessJSON:function(t){return this.toDatalessObject(t)},toObject:function(t){return this._toObjectMethod("toObject",t)},toDatalessObject:function(t){return this._toObjectMethod("toDatalessObject",t)},_toObjectMethod:function(e,i){var r=this.clipPath,n={version:tQ.version,objects:this._toObjects(e,i)};return r&&!r.excludeFromExport&&(n.clipPath=this._toObject(this.clipPath,e,i)),t(n,this.__serializeBgOverlay(e,i)),tQ.util.populateWithProperties(this,n,i),n},_toObjects:function(t,e){return this._objects.filter(function(t){return!t.excludeFromExport}).map(function(i){return this._toObject(i,t,e)},this)},_toObject:function(t,e,i){this.includeDefaultValues||(r=t.includeDefaultValues,t.includeDefaultValues=!1);var r,n=t[e](i);return this.includeDefaultValues||(t.includeDefaultValues=r),n},__serializeBgOverlay:function(t,e){var i={},r=this.backgroundImage,n=this.overlayImage,a=this.backgroundColor,o=this.overlayColor;return a&&a.toObject?a.excludeFromExport||(i.background=a.toObject(e)):a&&(i.background=a),o&&o.toObject?o.excludeFromExport||(i.overlay=o.toObject(e)):o&&(i.overlay=o),r&&!r.excludeFromExport&&(i.backgroundImage=this._toObject(r,t,e)),n&&!n.excludeFromExport&&(i.overlayImage=this._toObject(n,t,e)),i},sendToBack:function(t){if(!t)return this;var e,r,n,a=this._activeObject;if(t===a&&"activeSelection"===t.type)for(e=(n=a._objects).length;e--;)r=n[e],i(this._objects,r),this._objects.unshift(r);else i(this._objects,t),this._objects.unshift(t);return this.renderOnAddRemove&&this.requestRenderAll(),this},bringToFront:function(t){if(!t)return this;var e,r,n,a=this._activeObject;if(t===a&&"activeSelection"===t.type)for(e=0,n=a._objects;e<n.length;e++)r=n[e],i(this._objects,r),this._objects.push(r);else i(this._objects,t),this._objects.push(t);return this.renderOnAddRemove&&this.requestRenderAll(),this},sendBackwards:function(t,e){if(!t)return this;var r,n,a,o,s,l=this._activeObject,c=0;if(t===l&&"activeSelection"===t.type)for(r=0,s=l._objects;r<s.length;r++)n=s[r],(a=this._objects.indexOf(n))>0+c&&(o=a-1,i(this._objects,n),this._objects.splice(o,0,n)),c++;else 0!==(a=this._objects.indexOf(t))&&(o=this._findNewLowerIndex(t,a,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewLowerIndex:function(t,e,i){var r,n;if(i){for(r=e,n=e-1;n>=0;--n)if(t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t)){r=n;break}}else r=e-1;return r},bringForward:function(t,e){if(!t)return this;var r,n,a,o,s,l=this._activeObject,c=0;if(t===l&&"activeSelection"===t.type)for(r=(s=l._objects).length;r--;)n=s[r],(a=this._objects.indexOf(n))<this._objects.length-1-c&&(o=a+1,i(this._objects,n),this._objects.splice(o,0,n)),c++;else(a=this._objects.indexOf(t))!==this._objects.length-1&&(o=this._findNewUpperIndex(t,a,e),i(this._objects,t),this._objects.splice(o,0,t));return this.renderOnAddRemove&&this.requestRenderAll(),this},_findNewUpperIndex:function(t,e,i){var r,n,a;if(i){for(r=e,n=e+1,a=this._objects.length;n<a;++n)if(t.intersectsWithObject(this._objects[n])||t.isContainedWithinObject(this._objects[n])||this._objects[n].isContainedWithinObject(t)){r=n;break}}else r=e+1;return r},moveTo:function(t,e){return i(this._objects,t),this._objects.splice(e,0,t),this.renderOnAddRemove&&this.requestRenderAll()},dispose:function(){return this.isRendering&&(tQ.util.cancelAnimFrame(this.isRendering),this.isRendering=0),this.forEachObject(function(t){t.dispose&&t.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"),tQ.util.setStyle(this.lowerCanvasEl,this._originalCanvasStyle),delete this._originalCanvasStyle,this.lowerCanvasEl.setAttribute("width",this.width),this.lowerCanvasEl.setAttribute("height",this.height),tQ.util.cleanUpJsdomNode(this.lowerCanvasEl),this.lowerCanvasEl=void 0,this},toString:function(){return"#<fabric.Canvas ("+this.complexity()+"): { objects: "+this._objects.length+" }>"}}),t(tQ.StaticCanvas.prototype,tQ.Observable),t(tQ.StaticCanvas.prototype,tQ.Collection),t(tQ.StaticCanvas.prototype,tQ.DataURLExporter),t(tQ.StaticCanvas,{EMPTY_JSON:'{"objects": [], "background": "white"}',supports:function(t){var e=o();if(!e||!e.getContext)return null;var i=e.getContext("2d");return i&&"setLineDash"===t?void 0!==i.setLineDash:null}}),tQ.StaticCanvas.prototype.toJSON=tQ.StaticCanvas.prototype.toObject,tQ.isLikelyNode&&(tQ.StaticCanvas.prototype.createPNGStream=function(){var t=a(this.lowerCanvasEl);return t&&t.createPNGStream()},tQ.StaticCanvas.prototype.createJPEGStream=function(t){var e=a(this.lowerCanvasEl);return e&&e.createJPEGStream(t)})}(),tQ.BaseBrush=tQ.util.createClass({color:"rgb(0, 0, 0)",width:1,shadow:null,strokeLineCap:"round",strokeLineJoin:"round",strokeMiterLimit:10,strokeDashArray:null,limitedToCanvasSize:!1,_setBrushStyles:function(t){t.strokeStyle=this.color,t.lineWidth=this.width,t.lineCap=this.strokeLineCap,t.miterLimit=this.strokeMiterLimit,t.lineJoin=this.strokeLineJoin,t.setLineDash(this.strokeDashArray||[])},_saveAndTransform:function(t){var e=this.canvas.viewportTransform;t.save(),t.transform(e[0],e[1],e[2],e[3],e[4],e[5])},_setShadow:function(){if(this.shadow){var t=this.canvas,e=this.shadow,i=t.contextTop,r=t.getZoom();t&&t._isRetinaScaling()&&(r*=tQ.devicePixelRatio),i.shadowColor=e.color,i.shadowBlur=e.blur*r,i.shadowOffsetX=e.offsetX*r,i.shadowOffsetY=e.offsetY*r}},needsFullRender:function(){return 1>new tQ.Color(this.color).getAlpha()||!!this.shadow},_resetShadow:function(){var t=this.canvas.contextTop;t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0},_isOutSideCanvas:function(t){return t.x<0||t.x>this.canvas.getWidth()||t.y<0||t.y>this.canvas.getHeight()}}),tQ.PencilBrush=tQ.util.createClass(tQ.BaseBrush,{decimate:.4,drawStraightLine:!1,straightLineKey:"shiftKey",initialize:function(t){this.canvas=t,this._points=[]},needsFullRender:function(){return this.callSuper("needsFullRender")||this._hasStraightLine},_drawSegment:function(t,e,i){var r=e.midPointFrom(i);return t.quadraticCurveTo(e.x,e.y,r.x,r.y),r},onMouseDown:function(t,e){this.canvas._isMainEvent(e.e)&&(this.drawStraightLine=e.e[this.straightLineKey],this._prepareForDrawing(t),this._captureDrawingPath(t),this._render())},onMouseMove:function(t,e){if(this.canvas._isMainEvent(e.e)&&(this.drawStraightLine=e.e[this.straightLineKey],!(!0===this.limitedToCanvasSize&&this._isOutSideCanvas(t))&&this._captureDrawingPath(t)&&this._points.length>1)){if(this.needsFullRender())this.canvas.clearContext(this.canvas.contextTop),this._render();else{var i=this._points,r=i.length,n=this.canvas.contextTop;this._saveAndTransform(n),this.oldEnd&&(n.beginPath(),n.moveTo(this.oldEnd.x,this.oldEnd.y)),this.oldEnd=this._drawSegment(n,i[r-2],i[r-1],!0),n.stroke(),n.restore()}}},onMouseUp:function(t){return!this.canvas._isMainEvent(t.e)||(this.drawStraightLine=!1,this.oldEnd=void 0,this._finalizeAndAddPath(),!1)},_prepareForDrawing:function(t){var e=new tQ.Point(t.x,t.y);this._reset(),this._addPoint(e),this.canvas.contextTop.moveTo(e.x,e.y)},_addPoint:function(t){return!(this._points.length>1&&t.eq(this._points[this._points.length-1]))&&(this.drawStraightLine&&this._points.length>1&&(this._hasStraightLine=!0,this._points.pop()),this._points.push(t),!0)},_reset:function(){this._points=[],this._setBrushStyles(this.canvas.contextTop),this._setShadow(),this._hasStraightLine=!1},_captureDrawingPath:function(t){var e=new tQ.Point(t.x,t.y);return this._addPoint(e)},_render:function(t){var e,i,r=this._points[0],n=this._points[1];if(t=t||this.canvas.contextTop,this._saveAndTransform(t),t.beginPath(),2===this._points.length&&r.x===n.x&&r.y===n.y){var a=this.width/1e3;r=new tQ.Point(r.x,r.y),n=new tQ.Point(n.x,n.y),r.x-=a,n.x+=a}for(t.moveTo(r.x,r.y),e=1,i=this._points.length;e<i;e++)this._drawSegment(t,r,n),r=this._points[e],n=this._points[e+1];t.lineTo(r.x,r.y),t.stroke(),t.restore()},convertPointsToSVGPath:function(t){var e=this.width/1e3;return tQ.util.getSmoothPathFromPoints(t,e)},_isEmptySVGPath:function(t){return"M 0 0 Q 0 0 0 0 L 0 0"===tQ.util.joinPath(t)},createPath:function(t){var e=new tQ.Path(t,{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,e.shadow=new tQ.Shadow(this.shadow)),e},decimatePoints:function(t,e){if(t.length<=2)return t;var i,r=Math.pow(e/this.canvas.getZoom(),2),n=t.length-1,a=t[0],o=[a];for(i=1;i<n-1;i++)Math.pow(a.x-t[i].x,2)+Math.pow(a.y-t[i].y,2)>=r&&o.push(a=t[i]);return o.push(t[n]),o},_finalizeAndAddPath:function(){this.canvas.contextTop.closePath(),this.decimate&&(this._points=this.decimatePoints(this._points,this.decimate));var t=this.convertPointsToSVGPath(this._points);if(this._isEmptySVGPath(t)){this.canvas.requestRenderAll();return}var e=this.createPath(t);this.canvas.clearContext(this.canvas.contextTop),this.canvas.fire("before:path:created",{path:e}),this.canvas.add(e),this.canvas.requestRenderAll(),e.setCoords(),this._resetShadow(),this.canvas.fire("path:created",{path:e})}}),tQ.CircleBrush=tQ.util.createClass(tQ.BaseBrush,{width:10,initialize:function(t){this.canvas=t,this.points=[]},drawDot:function(t){var e=this.addPoint(t),i=this.canvas.contextTop;this._saveAndTransform(i),this.dot(i,e),i.restore()},dot:function(t,e){t.fillStyle=e.fill,t.beginPath(),t.arc(e.x,e.y,e.radius,0,2*Math.PI,!1),t.closePath(),t.fill()},onMouseDown:function(t){this.points.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.drawDot(t)},_render:function(){var t,e,i=this.canvas.contextTop,r=this.points;for(this._saveAndTransform(i),t=0,e=r.length;t<e;t++)this.dot(i,r[t]);i.restore()},onMouseMove:function(t){!0===this.limitedToCanvasSize&&this._isOutSideCanvas(t)||(this.needsFullRender()?(this.canvas.clearContext(this.canvas.contextTop),this.addPoint(t),this._render()):this.drawDot(t))},onMouseUp:function(){var t,e,i=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;var r=[];for(t=0,e=this.points.length;t<e;t++){var n=this.points[t],a=new tQ.Circle({radius:n.radius,left:n.x,top:n.y,originX:"center",originY:"center",fill:n.fill});this.shadow&&(a.shadow=new tQ.Shadow(this.shadow)),r.push(a)}var o=new tQ.Group(r);o.canvas=this.canvas,this.canvas.fire("before:path:created",{path:o}),this.canvas.add(o),this.canvas.fire("path:created",{path:o}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=i,this.canvas.requestRenderAll()},addPoint:function(t){var e=new tQ.Point(t.x,t.y),i=tQ.util.getRandomInt(Math.max(0,this.width-20),this.width+20)/2,r=new tQ.Color(this.color).setAlpha(tQ.util.getRandomInt(0,100)/100).toRgba();return e.radius=i,e.fill=r,this.points.push(e),e}}),tQ.SprayBrush=tQ.util.createClass(tQ.BaseBrush,{width:10,density:20,dotWidth:1,dotWidthVariance:1,randomOpacity:!1,optimizeOverlapping:!0,initialize:function(t){this.canvas=t,this.sprayChunks=[]},onMouseDown:function(t){this.sprayChunks.length=0,this.canvas.clearContext(this.canvas.contextTop),this._setShadow(),this.addSprayChunk(t),this.render(this.sprayChunkPoints)},onMouseMove:function(t){!0===this.limitedToCanvasSize&&this._isOutSideCanvas(t)||(this.addSprayChunk(t),this.render(this.sprayChunkPoints))},onMouseUp:function(){var t=this.canvas.renderOnAddRemove;this.canvas.renderOnAddRemove=!1;for(var e=[],i=0,r=this.sprayChunks.length;i<r;i++)for(var n=this.sprayChunks[i],a=0,o=n.length;a<o;a++){var s=new tQ.Rect({width:n[a].width,height:n[a].width,left:n[a].x+1,top:n[a].y+1,originX:"center",originY:"center",fill:this.color});e.push(s)}this.optimizeOverlapping&&(e=this._getOptimizedRects(e));var l=new tQ.Group(e);this.shadow&&l.set("shadow",new tQ.Shadow(this.shadow)),this.canvas.fire("before:path:created",{path:l}),this.canvas.add(l),this.canvas.fire("path:created",{path:l}),this.canvas.clearContext(this.canvas.contextTop),this._resetShadow(),this.canvas.renderOnAddRemove=t,this.canvas.requestRenderAll()},_getOptimizedRects:function(t){var e,i,r,n={};for(i=0,r=t.length;i<r;i++)n[e=t[i].left+""+t[i].top]||(n[e]=t[i]);var a=[];for(e in n)a.push(n[e]);return a},render:function(t){var e,i,r=this.canvas.contextTop;for(r.fillStyle=this.color,this._saveAndTransform(r),e=0,i=t.length;e<i;e++){var n=t[e];void 0!==n.opacity&&(r.globalAlpha=n.opacity),r.fillRect(n.x,n.y,n.width,n.width)}r.restore()},_render:function(){var t,e,i=this.canvas.contextTop;for(i.fillStyle=this.color,this._saveAndTransform(i),t=0,e=this.sprayChunks.length;t<e;t++)this.render(this.sprayChunks[t]);i.restore()},addSprayChunk:function(t){this.sprayChunkPoints=[];var e,i,r,n,a=this.width/2;for(n=0;n<this.density;n++){e=tQ.util.getRandomInt(t.x-a,t.x+a),i=tQ.util.getRandomInt(t.y-a,t.y+a),r=this.dotWidthVariance?tQ.util.getRandomInt(Math.max(1,this.dotWidth-this.dotWidthVariance),this.dotWidth+this.dotWidthVariance):this.dotWidth;var o=new tQ.Point(e,i);o.width=r,this.randomOpacity&&(o.opacity=tQ.util.getRandomInt(0,100)/100),this.sprayChunkPoints.push(o)}this.sprayChunks.push(this.sprayChunkPoints)}}),tQ.PatternBrush=tQ.util.createClass(tQ.PencilBrush,{getPatternSrc:function(){var t=tQ.util.createCanvasElement(),e=t.getContext("2d");return t.width=t.height=25,e.fillStyle=this.color,e.beginPath(),e.arc(10,10,10,0,2*Math.PI,!1),e.closePath(),e.fill(),t},getPatternSrcFunction:function(){return String(this.getPatternSrc).replace("this.color",'"'+this.color+'"')},getPattern:function(t){return t.createPattern(this.source||this.getPatternSrc(),"repeat")},_setBrushStyles:function(t){this.callSuper("_setBrushStyles",t),t.strokeStyle=this.getPattern(t)},createPath:function(t){var e=this.callSuper("createPath",t),i=e._getLeftTopCoords().scalarAdd(e.strokeWidth/2);return e.stroke=new tQ.Pattern({source:this.source||this.getPatternSrcFunction(),offsetX:-i.x,offsetY:-i.y}),e}}),function(){var t=tQ.util.getPointer,e=tQ.util.degreesToRadians,i=tQ.util.isTouchEvent;for(var r in tQ.Canvas=tQ.util.createClass(tQ.StaticCanvas,{initialize:function(t,e){e||(e={}),this.renderAndResetBound=this.renderAndReset.bind(this),this.requestRenderAllBound=this.requestRenderAll.bind(this),this._initStatic(t,e),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=tQ.PencilBrush&&new tQ.PencilBrush(this),this.calcOffset()},_chooseObjectsToRender:function(){var t,e,i,r=this.getActiveObjects();if(r.length>0&&!this.preserveObjectStacking){e=[],i=[];for(var n=0,a=this._objects.length;n<a;n++)t=this._objects[n],-1===r.indexOf(t)?e.push(t):i.push(t);r.length>1&&(this._activeObject._objects=i),e.push.apply(e,i)}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,e){var i=t.calcTransformMatrix(),r=tQ.util.invertTransform(i),n=this.restorePointerVpt(e);return tQ.util.transformPoint(n,r)},isTargetTransparent:function(t,e,i){if(t.shouldCache()&&t._cacheCanvas&&t!==this._activeObject){var r=this._normalizePointer(t,{x:e,y:i}),n=Math.max(t.cacheTranslationX+r.x*t.zoomX,0),a=Math.max(t.cacheTranslationY+r.y*t.zoomY,0),o=tQ.util.isTransparent(t._cacheContext,Math.round(n),Math.round(a),this.targetFindTolerance);return o}var s=this.contextCache,l=t.selectionBackgroundColor,c=this.viewportTransform;t.selectionBackgroundColor="",this.clearContext(s),s.save(),s.transform(c[0],c[1],c[2],c[3],c[4],c[5]),t.render(s),s.restore(),t.selectionBackgroundColor=l;var o=tQ.util.isTransparent(s,e,i,this.targetFindTolerance);return o},_isSelectionKeyPressed:function(t){return Array.isArray(this.selectionKey)?!!this.selectionKey.find(function(e){return!0===t[e]}):t[this.selectionKey]},_shouldClearSelection:function(t,e){var i=this.getActiveObjects(),r=this._activeObject;return!e||e&&r&&i.length>1&&-1===i.indexOf(e)&&r!==e&&!this._isSelectionKeyPressed(t)||e&&!e.evented||e&&!e.selectable&&r&&r!==e},_shouldCenterTransform:function(t,e,i){var r;if(t)return"scale"===e||"scaleX"===e||"scaleY"===e||"resizing"===e?r=this.centeredScaling||t.centeredScaling:"rotate"===e&&(r=this.centeredRotation||t.centeredRotation),r?!i:i},_getOriginFromCorner:function(t,e){var i={x:t.originX,y:t.originY};return"ml"===e||"tl"===e||"bl"===e?i.x="right":("mr"===e||"tr"===e||"br"===e)&&(i.x="left"),"tl"===e||"mt"===e||"tr"===e?i.y="bottom":("bl"===e||"mb"===e||"br"===e)&&(i.y="top"),i},_getActionFromCorner:function(t,e,i,r){if(!e||!t)return"drag";var n=r.controls[e];return n.getActionName(i,n,r)},_setupCurrentTransform:function(t,i,r){if(i){var n=this.getPointer(t),a=i.__corner,o=i.controls[a],s=r&&a?o.getActionHandler(t,i,o):tQ.controlsUtils.dragHandler,l=this._getActionFromCorner(r,a,t,i),c=this._getOriginFromCorner(i,a),h=t[this.centeredKey],u={target:i,action:l,actionHandler:s,corner:a,scaleX:i.scaleX,scaleY:i.scaleY,skewX:i.skewX,skewY:i.skewY,offsetX:n.x-i.left,offsetY:n.y-i.top,originX:c.x,originY:c.y,ex:n.x,ey:n.y,lastX:n.x,lastY:n.y,theta:e(i.angle),width:i.width*i.scaleX,shiftKey:t.shiftKey,altKey:h,original:tQ.util.saveObjectTransform(i)};this._shouldCenterTransform(i,l,h)&&(u.originX="center",u.originY="center"),u.original.originX=c.x,u.original.originY=c.y,this._currentTransform=u,this._beforeTransform(t)}},setCursor:function(t){this.upperCanvasEl.style.cursor=t},_drawSelection:function(t){var e=this._groupSelector,i=new tQ.Point(e.ex,e.ey),r=tQ.util.transformPoint(i,this.viewportTransform),n=new tQ.Point(e.ex+e.left,e.ey+e.top),a=tQ.util.transformPoint(n,this.viewportTransform),o=Math.min(r.x,a.x),s=Math.min(r.y,a.y),l=Math.max(r.x,a.x),c=Math.max(r.y,a.y),h=this.selectionLineWidth/2;this.selectionColor&&(t.fillStyle=this.selectionColor,t.fillRect(o,s,l-o,c-s)),this.selectionLineWidth&&this.selectionBorderColor&&(t.lineWidth=this.selectionLineWidth,t.strokeStyle=this.selectionBorderColor,o+=h,s+=h,l-=h,c-=h,tQ.Object.prototype._setLineDash.call(this,t,this.selectionDashArray),t.strokeRect(o,s,l-o,c-s))},findTarget:function(t,e){if(!this.skipTargetFind){var r,n,a=this.getPointer(t,!0),o=this._activeObject,s=this.getActiveObjects(),l=i(t),c=s.length>1&&!e||1===s.length;if(this.targets=[],c&&o._findTargetCorner(a,l)||s.length>1&&!e&&o===this._searchPossibleTargets([o],a))return o;if(1===s.length&&o===this._searchPossibleTargets([o],a)){if(!this.preserveObjectStacking)return o;r=o,n=this.targets,this.targets=[]}var h=this._searchPossibleTargets(this._objects,a);return t[this.altSelectionKey]&&h&&r&&h!==r&&(h=r,this.targets=n),h}},_checkTarget:function(t,e,i){if(e&&e.visible&&e.evented&&e.containsPoint(t)&&(!this.perPixelTargetFind&&!e.perPixelTargetFind||e.isEditing||!this.isTargetTransparent(e,i.x,i.y)))return!0},_searchPossibleTargets:function(t,e){for(var i,r,n=t.length;n--;){var a=t[n],o=a.group?this._normalizePointer(a.group,e):e;if(this._checkTarget(o,a,e)){(i=t[n]).subTargetCheck&&i instanceof tQ.Group&&(r=this._searchPossibleTargets(i._objects,e))&&this.targets.push(r);break}}return i},restorePointerVpt:function(t){return tQ.util.transformPoint(t,tQ.util.invertTransform(this.viewportTransform))},getPointer:function(e,i){if(this._absolutePointer&&!i)return this._absolutePointer;if(this._pointer&&i)return this._pointer;var r,n=t(e),a=this.upperCanvasEl,o=a.getBoundingClientRect(),s=o.width||0,l=o.height||0;(!s||!l)&&("top"in o&&"bottom"in o&&(l=Math.abs(o.top-o.bottom)),"right"in o&&"left"in o&&(s=Math.abs(o.right-o.left))),this.calcOffset(),n.x=n.x-this._offset.left,n.y=n.y-this._offset.top,i||(n=this.restorePointerVpt(n));var c=this.getRetinaScaling();return 1!==c&&(n.x/=c,n.y/=c),r=0===s||0===l?{width:1,height:1}:{width:a.width/s,height:a.height/l},{x:n.x*r.width,y:n.y*r.height}},_createUpperCanvas:function(){var t=this.lowerCanvasEl.className.replace(/\s*lower-canvas\s*/,""),e=this.lowerCanvasEl,i=this.upperCanvasEl;i?i.className="":(i=this._createCanvasElement(),this.upperCanvasEl=i),tQ.util.addClass(i,"upper-canvas "+t),this.wrapperEl.appendChild(i),this._copyCanvasStyle(e,i),this._applyCanvasStyle(i),this.contextTop=i.getContext("2d")},getTopContext:function(){return this.contextTop},_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=tQ.util.wrapElement(this.lowerCanvasEl,"div",{class:this.containerClass}),tQ.util.setStyle(this.wrapperEl,{width:this.width+"px",height:this.height+"px",position:"relative"}),tQ.util.makeElementUnselectable(this.wrapperEl)},_applyCanvasStyle:function(t){var e=this.width||t.width,i=this.height||t.height;tQ.util.setStyle(t,{position:"absolute",width:e+"px",height:i+"px",left:0,top:0,"touch-action":this.allowTouchScrolling?"manipulation":"none","-ms-touch-action":this.allowTouchScrolling?"manipulation":"none"}),t.width=e,t.height=i,tQ.util.makeElementUnselectable(t)},_copyCanvasStyle:function(t,e){e.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?"activeSelection"===t.type&&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,e){var i=!1,r=this.getActiveObjects(),n=[],a=[];t.forEach(function(t){-1===r.indexOf(t)&&(i=!0,t.fire("deselected",{e:e,target:t}),a.push(t))}),r.forEach(function(r){-1===t.indexOf(r)&&(i=!0,r.fire("selected",{e:e,target:r}),n.push(r))}),t.length>0&&r.length>0?i&&this.fire("selection:updated",{e:e,selected:n,deselected:a}):r.length>0?this.fire("selection:created",{e:e,selected:n}):t.length>0&&this.fire("selection:cleared",{e:e,deselected:a})},setActiveObject:function(t,e){var i=this.getActiveObjects();return this._setActiveObject(t,e),this._fireSelectionEvents(i,e),this},_setActiveObject:function(t,e){return!(this._activeObject===t||!this._discardActiveObject(e,t)||t.onSelect({e:e}))&&(this._activeObject=t,!0)},_discardActiveObject:function(t,e){var i=this._activeObject;if(i){if(i.onDeselect({e:t,object:e}))return!1;this._activeObject=null}return!0},discardActiveObject:function(t){var e=this.getActiveObjects(),i=this.getActiveObject();return e.length&&this.fire("before:selection:cleared",{target:i,e:t}),this._discardActiveObject(t),this._fireSelectionEvents(e,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(t){tQ.util.cleanUpJsdomNode(this[t]),this[t]=void 0}).bind(this)),t.parentNode&&t.parentNode.replaceChild(this.lowerCanvasEl,this.wrapperEl),delete this.wrapperEl,tQ.StaticCanvas.prototype.dispose.call(this),this},clear:function(){return this.discardActiveObject(),this.clearContext(this.contextTop),this.callSuper("clear")},drawControls:function(t){var e=this._activeObject;e&&e._renderControls(t)},_toObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(t),n=this.callSuper("_toObject",t,e,i);return this._unwindGroupTransformOnObject(t,r),n},_realizeGroupTransformOnObject:function(t){if(!t.group||"activeSelection"!==t.group.type||this._activeObject!==t.group)return null;var e={};return["angle","flipX","flipY","left","scaleX","scaleY","skewX","skewY","top"].forEach(function(i){e[i]=t[i]}),tQ.util.addTransformToObject(t,this._activeObject.calcOwnMatrix()),e},_unwindGroupTransformOnObject:function(t,e){e&&t.set(e)},_setSVGObject:function(t,e,i){var r=this._realizeGroupTransformOnObject(e);this.callSuper("_setSVGObject",t,e,i),this._unwindGroupTransformOnObject(e,r)},setViewportTransform:function(t){this.renderOnAddRemove&&this._activeObject&&this._activeObject.isEditing&&this._activeObject.clearContextTop(),tQ.StaticCanvas.prototype.setViewportTransform.call(this,t)}}),tQ.StaticCanvas)"prototype"!==r&&(tQ.Canvas[r]=tQ.StaticCanvas[r])}(),function(){var t=tQ.util.addListener,e=tQ.util.removeListener,i={passive:!1};function checkClick(t,e){return t.button&&t.button===e-1}tQ.util.object.extend(tQ.Canvas.prototype,{mainTouchId:null,_initEventListeners:function(){this.removeListeners(),this._bindEvents(),this.addOrRemove(t,"add")},_getEventPrefix:function(){return this.enablePointerEvents?"pointer":"mouse"},addOrRemove:function(t,e){var r=this.upperCanvasEl,n=this._getEventPrefix();t(tQ.window,"resize",this._onResize),t(r,n+"down",this._onMouseDown),t(r,n+"move",this._onMouseMove,i),t(r,n+"out",this._onMouseOut),t(r,n+"enter",this._onMouseEnter),t(r,"wheel",this._onMouseWheel),t(r,"contextmenu",this._onContextMenu),t(r,"dblclick",this._onDoubleClick),t(r,"dragover",this._onDragOver),t(r,"dragenter",this._onDragEnter),t(r,"dragleave",this._onDragLeave),t(r,"drop",this._onDrop),this.enablePointerEvents||t(r,"touchstart",this._onTouchStart,i),"undefined"!=typeof eventjs&&e in eventjs&&(eventjs[e](r,"gesture",this._onGesture),eventjs[e](r,"drag",this._onDrag),eventjs[e](r,"orientation",this._onOrientationChange),eventjs[e](r,"shake",this._onShake),eventjs[e](r,"longpress",this._onLongPress))},removeListeners:function(){this.addOrRemove(e,"remove");var t=this._getEventPrefix();e(tQ.document,t+"up",this._onMouseUp),e(tQ.document,"touchend",this._onTouchEnd,i),e(tQ.document,t+"move",this._onMouseMove,i),e(tQ.document,"touchmove",this._onMouseMove,i)},_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(t,e){this.__onTransformGesture&&this.__onTransformGesture(t,e)},_onDrag:function(t,e){this.__onDrag&&this.__onDrag(t,e)},_onMouseWheel:function(t){this.__onMouseWheel(t)},_onMouseOut:function(t){var e=this._hoveredTarget;this.fire("mouse:out",{target:e,e:t}),this._hoveredTarget=null,e&&e.fire("mouseout",{e:t});var i=this;this._hoveredTargets.forEach(function(r){i.fire("mouse:out",{target:e,e:t}),r&&e.fire("mouseout",{e:t})}),this._hoveredTargets=[],this._iTextInstances&&this._iTextInstances.forEach(function(t){t.isEditing&&t.hiddenTextarea.focus()})},_onMouseEnter:function(t){this._currentTransform||this.findTarget(t)||(this.fire("mouse:over",{target:null,e:t}),this._hoveredTarget=null,this._hoveredTargets=[])},_onOrientationChange:function(t,e){this.__onOrientationChange&&this.__onOrientationChange(t,e)},_onShake:function(t,e){this.__onShake&&this.__onShake(t,e)},_onLongPress:function(t,e){this.__onLongPress&&this.__onLongPress(t,e)},_onDragOver:function(t){t.preventDefault();var e=this._simpleEventHandler("dragover",t);this._fireEnterLeaveEvents(e,t)},_onDrop:function(t){return this._simpleEventHandler("drop:before",t),this._simpleEventHandler("drop",t)},_onContextMenu:function(t){return this.stopContextMenu&&(t.stopPropagation(),t.preventDefault()),!1},_onDoubleClick:function(t){this._cacheTransformEventData(t),this._handleEvent(t,"dblclick"),this._resetTransformEventData(t)},getPointerId:function(t){var e=t.changedTouches;return e?e[0]&&e[0].identifier:this.enablePointerEvents?t.pointerId:-1},_isMainEvent:function(t){return!0===t.isPrimary||!1!==t.isPrimary&&("touchend"===t.type&&0===t.touches.length||!t.changedTouches||t.changedTouches[0].identifier===this.mainTouchId)},_onTouchStart:function(r){r.preventDefault(),null===this.mainTouchId&&(this.mainTouchId=this.getPointerId(r)),this.__onMouseDown(r),this._resetTransformEventData();var n=this.upperCanvasEl,a=this._getEventPrefix();t(tQ.document,"touchend",this._onTouchEnd,i),t(tQ.document,"touchmove",this._onMouseMove,i),e(n,a+"down",this._onMouseDown)},_onMouseDown:function(r){this.__onMouseDown(r),this._resetTransformEventData();var n=this.upperCanvasEl,a=this._getEventPrefix();e(n,a+"move",this._onMouseMove,i),t(tQ.document,a+"up",this._onMouseUp),t(tQ.document,a+"move",this._onMouseMove,i)},_onTouchEnd:function(r){if(!(r.touches.length>0)){this.__onMouseUp(r),this._resetTransformEventData(),this.mainTouchId=null;var n=this._getEventPrefix();e(tQ.document,"touchend",this._onTouchEnd,i),e(tQ.document,"touchmove",this._onMouseMove,i);var a=this;this._willAddMouseDown&&clearTimeout(this._willAddMouseDown),this._willAddMouseDown=setTimeout(function(){t(a.upperCanvasEl,n+"down",a._onMouseDown),a._willAddMouseDown=0},400)}},_onMouseUp:function(r){this.__onMouseUp(r),this._resetTransformEventData();var n=this.upperCanvasEl,a=this._getEventPrefix();this._isMainEvent(r)&&(e(tQ.document,a+"up",this._onMouseUp),e(tQ.document,a+"move",this._onMouseMove,i),t(n,a+"move",this._onMouseMove,i))},_onMouseMove:function(t){!this.allowTouchScrolling&&t.preventDefault&&t.preventDefault(),this.__onMouseMove(t)},_onResize:function(){this.calcOffset()},_shouldRender:function(t){var e=this._activeObject;return!!e!=!!t||!!e&&!!t&&e!==t||(e&&e.isEditing,!1)},__onMouseUp:function(t){var e,i,r,n=this._currentTransform,a=this._groupSelector,o=!1,s=!a||0===a.left&&0===a.top;if(this._cacheTransformEventData(t),r=this._target,this._handleEvent(t,"up:before"),checkClick(t,3)){this.fireRightClick&&this._handleEvent(t,"up",3,s);return}if(checkClick(t,2)){this.fireMiddleClick&&this._handleEvent(t,"up",2,s),this._resetTransformEventData();return}if(this.isDrawingMode&&this._isCurrentlyDrawing){this._onMouseUpInDrawingMode(t);return}if(this._isMainEvent(t)){if(n&&(this._finalizeCurrentTransform(t),o=n.actionPerformed),!s){var l=r===this._activeObject;this._maybeGroupObjects(t),o||(o=this._shouldRender(r)||!l&&r===this._activeObject)}if(r){if(e=r._findTargetCorner(this.getPointer(t,!0),tQ.util.isTouchEvent(t)),r.selectable&&r!==this._activeObject&&"up"===r.activeOn)this.setActiveObject(r,t),o=!0;else{var c=r.controls[e],h=c&&c.getMouseUpHandler(t,r,c);h&&(i=this.getPointer(t),h(t,n,i.x,i.y))}r.isMoving=!1}if(n&&(n.target!==r||n.corner!==e)){var u=n.target&&n.target.controls[n.corner],f=u&&u.getMouseUpHandler(t,r,c);i=i||this.getPointer(t),f&&f(t,n,i.x,i.y)}this._setCursorFromEvent(t,r),this._handleEvent(t,"up",1,s),this._groupSelector=null,this._currentTransform=null,r&&(r.__corner=0),o?this.requestRenderAll():s||this.renderTop()}},_simpleEventHandler:function(t,e){var i=this.findTarget(e),r=this.targets,n={e:e,target:i,subTargets:r};if(this.fire(t,n),i&&i.fire(t,n),!r)return i;for(var a=0;a<r.length;a++)r[a].fire(t,n);return i},_handleEvent:function(t,e,i,r){var n=this._target,a=this.targets||[],o={e:t,target:n,subTargets:a,button:i||1,isClick:r||!1,pointer:this._pointer,absolutePointer:this._absolutePointer,transform:this._currentTransform};"up"===e&&(o.currentTarget=this.findTarget(t),o.currentSubTargets=this.targets),this.fire("mouse:"+e,o),n&&n.fire("mouse"+e,o);for(var s=0;s<a.length;s++)a[s].fire("mouse"+e,o)},_finalizeCurrentTransform:function(t){var e=this._currentTransform,i=e.target,r={e:t,target:i,transform:e,action:e.action};i._scaling&&(i._scaling=!1),i.setCoords(),(e.actionPerformed||this.stateful&&i.hasStateChanged())&&this._fire("modified",r)},_onMouseDownInDrawingMode:function(t){this._isCurrentlyDrawing=!0,this.getActiveObject()&&this.discardActiveObject(t).requestRenderAll();var e=this.getPointer(t);this.freeDrawingBrush.onMouseDown(e,{e:t,pointer:e}),this._handleEvent(t,"down")},_onMouseMoveInDrawingMode:function(t){if(this._isCurrentlyDrawing){var e=this.getPointer(t);this.freeDrawingBrush.onMouseMove(e,{e:t,pointer:e})}this.setCursor(this.freeDrawingCursor),this._handleEvent(t,"move")},_onMouseUpInDrawingMode:function(t){var e=this.getPointer(t);this._isCurrentlyDrawing=this.freeDrawingBrush.onMouseUp({e:t,pointer:e}),this._handleEvent(t,"up")},__onMouseDown:function(t){this._cacheTransformEventData(t),this._handleEvent(t,"down:before");var e=this._target;if(checkClick(t,3)){this.fireRightClick&&this._handleEvent(t,"down",3);return}if(checkClick(t,2)){this.fireMiddleClick&&this._handleEvent(t,"down",2);return}if(this.isDrawingMode){this._onMouseDownInDrawingMode(t);return}if(this._isMainEvent(t)&&!this._currentTransform){var i=this._pointer;this._previousPointer=i;var r=this._shouldRender(e),n=this._shouldGroup(t,e);if(this._shouldClearSelection(t,e)?this.discardActiveObject(t):n&&(this._handleGrouping(t,e),e=this._activeObject),!this.selection||e&&(e.selectable||e.isEditing||e===this._activeObject)||(this._groupSelector={ex:this._absolutePointer.x,ey:this._absolutePointer.y,top:0,left:0}),e){var a=e===this._activeObject;e.selectable&&"down"===e.activeOn&&this.setActiveObject(e,t);var o=e._findTargetCorner(this.getPointer(t,!0),tQ.util.isTouchEvent(t));if(e.__corner=o,e===this._activeObject&&(o||!n)){this._setupCurrentTransform(t,e,a);var s=e.controls[o],i=this.getPointer(t),l=s&&s.getMouseDownHandler(t,e,s);l&&l(t,this._currentTransform,i.x,i.y)}}this._handleEvent(t,"down"),(r||n)&&this.requestRenderAll()}},_resetTransformEventData:function(){this._target=null,this._pointer=null,this._absolutePointer=null},_cacheTransformEventData:function(t){this._resetTransformEventData(),this._pointer=this.getPointer(t,!0),this._absolutePointer=this.restorePointerVpt(this._pointer),this._target=this._currentTransform?this._currentTransform.target:this.findTarget(t)||null},_beforeTransform:function(t){var e=this._currentTransform;this.stateful&&e.target.saveState(),this.fire("before:transform",{e:t,transform:e})},__onMouseMove:function(t){if(this._handleEvent(t,"move:before"),this._cacheTransformEventData(t),this.isDrawingMode){this._onMouseMoveInDrawingMode(t);return}if(this._isMainEvent(t)){var e,i,r=this._groupSelector;r?(i=this._absolutePointer,r.left=i.x-r.ex,r.top=i.y-r.ey,this.renderTop()):this._currentTransform?this._transformObject(t):(e=this.findTarget(t)||null,this._setCursorFromEvent(t,e),this._fireOverOutEvents(e,t)),this._handleEvent(t,"move"),this._resetTransformEventData()}},_fireOverOutEvents:function(t,e){var i=this._hoveredTarget,r=this._hoveredTargets,n=this.targets,a=Math.max(r.length,n.length);this.fireSyntheticInOutEvents(t,e,{oldTarget:i,evtOut:"mouseout",canvasEvtOut:"mouse:out",evtIn:"mouseover",canvasEvtIn:"mouse:over"});for(var o=0;o<a;o++)this.fireSyntheticInOutEvents(n[o],e,{oldTarget:r[o],evtOut:"mouseout",evtIn:"mouseover"});this._hoveredTarget=t,this._hoveredTargets=this.targets.concat()},_fireEnterLeaveEvents:function(t,e){var i=this._draggedoverTarget,r=this._hoveredTargets,n=this.targets,a=Math.max(r.length,n.length);this.fireSyntheticInOutEvents(t,e,{oldTarget:i,evtOut:"dragleave",evtIn:"dragenter"});for(var o=0;o<a;o++)this.fireSyntheticInOutEvents(n[o],e,{oldTarget:r[o],evtOut:"dragleave",evtIn:"dragenter"});this._draggedoverTarget=t},fireSyntheticInOutEvents:function(t,e,i){var r,n,a=i.oldTarget,o=a!==t,s=i.canvasEvtIn,l=i.canvasEvtOut;o&&(r={e:e,target:t,previousTarget:a},n={e:e,target:a,nextTarget:t}),a&&o&&(l&&this.fire(l,n),a.fire(i.evtOut,n)),t&&o&&(s&&this.fire(s,r),t.fire(i.evtIn,r))},__onMouseWheel:function(t){this._cacheTransformEventData(t),this._handleEvent(t,"wheel"),this._resetTransformEventData()},_transformObject:function(t){var e=this.getPointer(t),i=this._currentTransform;i.reset=!1,i.shiftKey=t.shiftKey,i.altKey=t[this.centeredKey],this._performTransformAction(t,i,e),i.actionPerformed&&this.requestRenderAll()},_performTransformAction:function(t,e,i){var r=i.x,n=i.y,a=e.action,o=!1,s=e.actionHandler;s&&(o=s(t,e,r,n)),"drag"===a&&o&&(e.target.isMoving=!0,this.setCursor(e.target.moveCursor||this.moveCursor)),e.actionPerformed=e.actionPerformed||o},_fire:tQ.controlsUtils.fireEvent,_setCursorFromEvent:function(t,e){if(!e)return this.setCursor(this.defaultCursor),!1;var i=e.hoverCursor||this.hoverCursor,r=this._activeObject&&"activeSelection"===this._activeObject.type?this._activeObject:null,n=(!r||!r.contains(e))&&e._findTargetCorner(this.getPointer(t,!0));n?this.setCursor(this.getCornerCursor(n,e,t)):(e.subTargetCheck&&this.targets.concat().reverse().map(function(t){i=t.hoverCursor||i}),this.setCursor(i))},getCornerCursor:function(t,e,i){var r=e.controls[t];return r.cursorStyleHandler(i,r,e)}})}(),F=Math.min,E=Math.max,tQ.util.object.extend(tQ.Canvas.prototype,{_shouldGroup:function(t,e){var i=this._activeObject;return i&&this._isSelectionKeyPressed(t)&&e&&e.selectable&&this.selection&&(i!==e||"activeSelection"===i.type)&&!e.onSelect({e:t})},_handleGrouping:function(t,e){var i=this._activeObject;!i.__corner&&(e!==i||(e=this.findTarget(t,!0))&&e.selectable)&&(i&&"activeSelection"===i.type?this._updateActiveSelection(e,t):this._createActiveSelection(e,t))},_updateActiveSelection:function(t,e){var i=this._activeObject,r=i._objects.slice(0);i.contains(t)?(i.removeWithUpdate(t),this._hoveredTarget=t,this._hoveredTargets=this.targets.concat(),1===i.size()&&this._setActiveObject(i.item(0),e)):(i.addWithUpdate(t),this._hoveredTarget=i,this._hoveredTargets=this.targets.concat()),this._fireSelectionEvents(r,e)},_createActiveSelection:function(t,e){var i=this.getActiveObjects(),r=this._createGroup(t);this._hoveredTarget=r,this._setActiveObject(r,e),this._fireSelectionEvents(i,e)},_createGroup:function(t){var e=this._objects,i=e.indexOf(this._activeObject)<e.indexOf(t)?[this._activeObject,t]:[t,this._activeObject];return this._activeObject.isEditing&&this._activeObject.exitEditing(),new tQ.ActiveSelection(i,{canvas:this})},_groupSelectedObjects:function(t){var e,i=this._collectObjects(t);1===i.length?this.setActiveObject(i[0],t):i.length>1&&(e=new tQ.ActiveSelection(i.reverse(),{canvas:this}),this.setActiveObject(e,t))},_collectObjects:function(t){for(var e,i=[],r=this._groupSelector.ex,n=this._groupSelector.ey,a=r+this._groupSelector.left,o=n+this._groupSelector.top,s=new tQ.Point(F(r,a),F(n,o)),l=new tQ.Point(E(r,a),E(n,o)),c=!this.selectionFullyContained,h=r===a&&n===o,u=this._objects.length;u--&&!((e=this._objects[u])&&e.selectable&&e.visible&&(c&&e.intersectsWithRect(s,l,!0)||e.isContainedWithinRect(s,l,!0)||c&&e.containsPoint(s,null,!0)||c&&e.containsPoint(l,null,!0))&&(i.push(e),h)););return i.length>1&&(i=i.filter(function(e){return!e.onSelect({e:t})})),i},_maybeGroupObjects:function(t){this.selection&&this._groupSelector&&this._groupSelectedObjects(t),this.setCursor(this.defaultCursor),this._groupSelector=null}}),tQ.util.object.extend(tQ.StaticCanvas.prototype,{toDataURL:function(t){t||(t={});var e=t.format||"png",i=t.quality||1,r=(t.multiplier||1)*(t.enableRetinaScaling?this.getRetinaScaling():1),n=this.toCanvasElement(r,t);return tQ.util.toDataURL(n,e,i)},toCanvasElement:function(t,e){t=t||1;var i=((e=e||{}).width||this.width)*t,r=(e.height||this.height)*t,n=this.getZoom(),a=this.width,o=this.height,s=n*t,l=this.viewportTransform,c=(l[4]-(e.left||0))*t,h=(l[5]-(e.top||0))*t,u=this.interactive,f=this.enableRetinaScaling,d=tQ.util.createCanvasElement(),g=this.contextTop;return d.width=i,d.height=r,this.contextTop=null,this.enableRetinaScaling=!1,this.interactive=!1,this.viewportTransform=[s,0,0,s,c,h],this.width=i,this.height=r,this.calcViewportBoundaries(),this.renderCanvas(d.getContext("2d"),this._objects),this.viewportTransform=l,this.width=a,this.height=o,this.calcViewportBoundaries(),this.interactive=u,this.enableRetinaScaling=f,this.contextTop=g,d}}),tQ.util.object.extend(tQ.StaticCanvas.prototype,{loadFromJSON:function(t,e,i){if(t){var r="string"==typeof t?JSON.parse(t):tQ.util.object.clone(t),n=this,a=r.clipPath,o=this.renderOnAddRemove;return this.renderOnAddRemove=!1,delete r.clipPath,this._enlivenObjects(r.objects,function(t){n.clear(),n._setBgOverlay(r,function(){a?n._enlivenObjects([a],function(i){n.clipPath=i[0],n.__setupCanvas.call(n,r,t,o,e)}):n.__setupCanvas.call(n,r,t,o,e)})},i),this}},__setupCanvas:function(t,e,i,r){var n=this;e.forEach(function(t,e){n.insertAt(t,e)}),this.renderOnAddRemove=i,delete t.objects,delete t.backgroundImage,delete t.overlayImage,delete t.background,delete t.overlay,this._setOptions(t),this.renderAll(),r&&r()},_setBgOverlay:function(t,e){var i={backgroundColor:!1,overlayColor:!1,backgroundImage:!1,overlayImage:!1};if(!t.backgroundImage&&!t.overlayImage&&!t.background&&!t.overlay){e&&e();return}var cbIfLoaded=function(){i.backgroundImage&&i.overlayImage&&i.backgroundColor&&i.overlayColor&&e&&e()};this.__setBgOverlay("backgroundImage",t.backgroundImage,i,cbIfLoaded),this.__setBgOverlay("overlayImage",t.overlayImage,i,cbIfLoaded),this.__setBgOverlay("backgroundColor",t.background,i,cbIfLoaded),this.__setBgOverlay("overlayColor",t.overlay,i,cbIfLoaded)},__setBgOverlay:function(t,e,i,r){var n=this;if(!e){i[t]=!0,r&&r();return}"backgroundImage"===t||"overlayImage"===t?tQ.util.enlivenObjects([e],function(e){n[t]=e[0],i[t]=!0,r&&r()}):this["set"+tQ.util.string.capitalize(t,!0)](e,function(){i[t]=!0,r&&r()})},_enlivenObjects:function(t,e,i){if(!t||0===t.length){e&&e([]);return}tQ.util.enlivenObjects(t,function(t){e&&e(t)},null,i)},_toDataURL:function(t,e){this.clone(function(i){e(i.toDataURL(t))})},_toDataURLWithMultiplier:function(t,e,i){this.clone(function(r){i(r.toDataURLWithMultiplier(t,e))})},clone:function(t,e){var i=JSON.stringify(this.toJSON(e));this.cloneWithoutData(function(e){e.loadFromJSON(i,function(){t&&t(e)})})},cloneWithoutData:function(t){var e=tQ.util.createCanvasElement();e.width=this.width,e.height=this.height;var i=new tQ.Canvas(e);this.backgroundImage?(i.setBackgroundImage(this.backgroundImage.src,function(){i.renderAll(),t&&t(i)}),i.backgroundImageOpacity=this.backgroundImageOpacity,i.backgroundImageStretch=this.backgroundImageStretch):t&&t(i)}}),n=(r=e.fabric||(e.fabric={})).util.object.extend,a=r.util.object.clone,o=r.util.toFixed,s=r.util.string.capitalize,l=r.util.degreesToRadians,c=!r.isLikelyNode,r.Object||(r.Object=r.util.createClass(r.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:c,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(t){t&&this.setOptions(t)},_createCacheCanvas:function(){this._cacheProperties={},this._cacheCanvas=r.util.createCanvasElement(),this._cacheContext=this._cacheCanvas.getContext("2d"),this._updateCacheCanvas(),this.dirty=!0},_limitCacheSize:function(t){var e=r.perfLimitSizeTotal,i=t.width,n=t.height,a=r.maxCacheSideLimit,o=r.minCacheSideLimit;if(i<=a&&n<=a&&i*n<=e)return i<o&&(t.width=o),n<o&&(t.height=o),t;var s=r.util.limitDimsByArea(i/n,e),l=r.util.capValue,c=l(o,s.x,a),h=l(o,s.y,a);return i>c&&(t.zoomX/=i/c,t.width=c,t.capped=!0),n>h&&(t.zoomY/=n/h,t.height=h,t.capped=!0),t},_getCacheCanvasDimensions:function(){var t=this.getTotalObjectScaling(),e=this._getTransformedDimensions(0,0),i=e.x*t.scaleX/this.scaleX,r=e.y*t.scaleY/this.scaleY;return{width:i+2,height:r+2,zoomX:t.scaleX,zoomY:t.scaleY,x:i,y:r}},_updateCacheCanvas:function(){var t=this.canvas;if(this.noScaleCache&&t&&t._currentTransform){var e=t._currentTransform.target,i=t._currentTransform.action;if(this===e&&i.slice&&"scale"===i.slice(0,5))return!1}var n,a,o=this._cacheCanvas,s=this._limitCacheSize(this._getCacheCanvasDimensions()),l=r.minCacheSideLimit,c=s.width,h=s.height,u=s.zoomX,f=s.zoomY,d=c!==this.cacheWidth||h!==this.cacheHeight,g=this.zoomX!==u||this.zoomY!==f,p=d||g,v=0,m=0,y=!1;if(d){var b=this._cacheCanvas.width,x=this._cacheCanvas.height,_=c>b||h>x;y=_||(c<.9*b||h<.9*x)&&b>l&&x>l,_&&!s.capped&&(c>l||h>l)&&(v=.1*c,m=.1*h)}return this instanceof r.Text&&this.path&&(p=!0,y=!0,v+=this.getHeightOfLine(0)*this.zoomX,m+=this.getHeightOfLine(0)*this.zoomY),!!p&&(y?(o.width=Math.ceil(c+v),o.height=Math.ceil(h+m)):(this._cacheContext.setTransform(1,0,0,1,0,0),this._cacheContext.clearRect(0,0,o.width,o.height)),n=s.x/2,a=s.y/2,this.cacheTranslationX=Math.round(o.width/2-n)+n,this.cacheTranslationY=Math.round(o.height/2-a)+a,this.cacheWidth=c,this.cacheHeight=h,this._cacheContext.translate(this.cacheTranslationX,this.cacheTranslationY),this._cacheContext.scale(u,f),this.zoomX=u,this.zoomY=f,!0)},setOptions:function(t){this._setOptions(t),this._initGradient(t.fill,"fill"),this._initGradient(t.stroke,"stroke"),this._initPattern(t.fill,"fill"),this._initPattern(t.stroke,"stroke")},transform:function(t){var e=this.group&&!this.group._transformDone||this.group&&this.canvas&&t===this.canvas.contextTop,i=this.calcTransformMatrix(!e);t.transform(i[0],i[1],i[2],i[3],i[4],i[5])},toObject:function(t){var e=r.Object.NUM_FRACTION_DIGITS,i={type:this.type,version:r.version,originX:this.originX,originY:this.originY,left:o(this.left,e),top:o(this.top,e),width:o(this.width,e),height:o(this.height,e),fill:this.fill&&this.fill.toObject?this.fill.toObject():this.fill,stroke:this.stroke&&this.stroke.toObject?this.stroke.toObject():this.stroke,strokeWidth:o(this.strokeWidth,e),strokeDashArray:this.strokeDashArray?this.strokeDashArray.concat():this.strokeDashArray,strokeLineCap:this.strokeLineCap,strokeDashOffset:this.strokeDashOffset,strokeLineJoin:this.strokeLineJoin,strokeUniform:this.strokeUniform,strokeMiterLimit:o(this.strokeMiterLimit,e),scaleX:o(this.scaleX,e),scaleY:o(this.scaleY,e),angle:o(this.angle,e),flipX:this.flipX,flipY:this.flipY,opacity:o(this.opacity,e),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:o(this.skewX,e),skewY:o(this.skewY,e)};return this.clipPath&&!this.clipPath.excludeFromExport&&(i.clipPath=this.clipPath.toObject(t),i.clipPath.inverted=this.clipPath.inverted,i.clipPath.absolutePositioned=this.clipPath.absolutePositioned),r.util.populateWithProperties(this,i,t),this.includeDefaultValues||(i=this._removeDefaultValues(i)),i},toDatalessObject:function(t){return this.toObject(t)},_removeDefaultValues:function(t){var e=r.util.getKlass(t.type).prototype;return e.stateProperties.forEach(function(i){"left"!==i&&"top"!==i&&(t[i]===e[i]&&delete t[i],Array.isArray(t[i])&&Array.isArray(e[i])&&0===t[i].length&&0===e[i].length&&delete t[i])}),t},toString:function(){return"#<fabric."+s(this.type)+">"},getObjectScaling:function(){if(!this.group)return{scaleX:this.scaleX,scaleY:this.scaleY};var t=r.util.qrDecompose(this.calcTransformMatrix());return{scaleX:Math.abs(t.scaleX),scaleY:Math.abs(t.scaleY)}},getTotalObjectScaling:function(){var t=this.getObjectScaling(),e=t.scaleX,i=t.scaleY;if(this.canvas){var r=this.canvas.getZoom(),n=this.canvas.getRetinaScaling();e*=r*n,i*=r*n}return{scaleX:e,scaleY:i}},getObjectOpacity:function(){var t=this.opacity;return this.group&&(t*=this.group.getObjectOpacity()),t},_set:function(t,e){var i="scaleX"===t||"scaleY"===t,n=this[t]!==e,a=!1;return i&&(e=this._constrainScale(e)),"scaleX"===t&&e<0?(this.flipX=!this.flipX,e*=-1):"scaleY"===t&&e<0?(this.flipY=!this.flipY,e*=-1):"shadow"!==t||!e||e instanceof r.Shadow?"dirty"===t&&this.group&&this.group.set("dirty",e):e=new r.Shadow(e),this[t]=e,n&&(a=this.group&&this.group.isOnACache(),this.cacheProperties.indexOf(t)>-1?(this.dirty=!0,a&&this.group.set("dirty",!0)):a&&this.stateProperties.indexOf(t)>-1&&this.group.set("dirty",!0)),this},setOnGroup:function(){},getViewportTransform:function(){return this.canvas&&this.canvas.viewportTransform?this.canvas.viewportTransform:r.iMatrix.concat()},isNotVisible:function(){return 0===this.opacity||!this.width&&!this.height&&0===this.strokeWidth||!this.visible},render:function(t){!this.isNotVisible()&&(!this.canvas||!this.canvas.skipOffscreen||this.group||this.isOnScreen())&&(t.save(),this._setupCompositeOperation(t),this.drawSelectionBackground(t),this.transform(t),this._setOpacity(t),this._setShadow(t,this),this.shouldCache()?(this.renderCache(),this.drawCacheOnCanvas(t)):(this._removeCacheCanvas(),this.dirty=!1,this.drawObject(t),this.objectCaching&&this.statefullCache&&this.saveState({propertySet:"cacheProperties"})),t.restore())},renderCache:function(t){t=t||{},this._cacheCanvas&&this._cacheContext||this._createCacheCanvas(),this.isCacheDirty()&&(this.statefullCache&&this.saveState({propertySet:"cacheProperties"}),this.drawObject(this._cacheContext,t.forClipping),this.dirty=!1)},_removeCacheCanvas:function(){this._cacheCanvas=null,this._cacheContext=null,this.cacheWidth=0,this.cacheHeight=0},hasStroke:function(){return this.stroke&&"transparent"!==this.stroke&&0!==this.strokeWidth},hasFill:function(){return this.fill&&"transparent"!==this.fill},needsItsOwnCache:function(){return!!("stroke"===this.paintFirst&&this.hasFill()&&this.hasStroke())&&"object"==typeof this.shadow||!!this.clipPath},shouldCache:function(){return this.ownCaching=this.needsItsOwnCache()||this.objectCaching&&(!this.group||!this.group.isOnACache()),this.ownCaching},willDrawShadow:function(){return!!this.shadow&&(0!==this.shadow.offsetX||0!==this.shadow.offsetY)},drawClipPathOnCache:function(t,e){if(t.save(),e.inverted?t.globalCompositeOperation="destination-out":t.globalCompositeOperation="destination-in",e.absolutePositioned){var i=r.util.invertTransform(this.calcTransformMatrix());t.transform(i[0],i[1],i[2],i[3],i[4],i[5])}e.transform(t),t.scale(1/e.zoomX,1/e.zoomY),t.drawImage(e._cacheCanvas,-e.cacheTranslationX,-e.cacheTranslationY),t.restore()},drawObject:function(t,e){var i=this.fill,r=this.stroke;e?(this.fill="black",this.stroke="",this._setClippingProperties(t)):this._renderBackground(t),this._render(t),this._drawClipPath(t,this.clipPath),this.fill=i,this.stroke=r},_drawClipPath:function(t,e){e&&(e.canvas=this.canvas,e.shouldCache(),e._transformDone=!0,e.renderCache({forClipping:!0}),this.drawClipPathOnCache(t,e))},drawCacheOnCanvas:function(t){t.scale(1/this.zoomX,1/this.zoomY),t.drawImage(this._cacheCanvas,-this.cacheTranslationX,-this.cacheTranslationY)},isCacheDirty:function(t){if(this.isNotVisible())return!1;if(this._cacheCanvas&&this._cacheContext&&!t&&this._updateCacheCanvas())return!0;if(this.dirty||this.clipPath&&this.clipPath.absolutePositioned||this.statefullCache&&this.hasStateChanged("cacheProperties")){if(this._cacheCanvas&&this._cacheContext&&!t){var e=this.cacheWidth/this.zoomX,i=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-e/2,-i/2,e,i)}return!0}return!1},_renderBackground:function(t){if(this.backgroundColor){var e=this._getNonTransformedDimensions();t.fillStyle=this.backgroundColor,t.fillRect(-e.x/2,-e.y/2,e.x,e.y),this._removeShadow(t)}},_setOpacity:function(t){this.group&&!this.group._transformDone?t.globalAlpha=this.getObjectOpacity():t.globalAlpha*=this.opacity},_setStrokeStyles:function(t,e){var i=e.stroke;i&&(t.lineWidth=e.strokeWidth,t.lineCap=e.strokeLineCap,t.lineDashOffset=e.strokeDashOffset,t.lineJoin=e.strokeLineJoin,t.miterLimit=e.strokeMiterLimit,i.toLive?"percentage"===i.gradientUnits||i.gradientTransform||i.patternTransform?this._applyPatternForTransformedGradient(t,i):(t.strokeStyle=i.toLive(t,this),this._applyPatternGradientTransform(t,i)):t.strokeStyle=e.stroke)},_setFillStyles:function(t,e){var i=e.fill;i&&(i.toLive?(t.fillStyle=i.toLive(t,this),this._applyPatternGradientTransform(t,e.fill)):t.fillStyle=i)},_setClippingProperties:function(t){t.globalAlpha=1,t.strokeStyle="transparent",t.fillStyle="#000000"},_setLineDash:function(t,e){e&&0!==e.length&&(1&e.length&&e.push.apply(e,e),t.setLineDash(e))},_renderControls:function(t,e){var i,n,a,o=this.getViewportTransform(),s=this.calcTransformMatrix();n=void 0!==(e=e||{}).hasBorders?e.hasBorders:this.hasBorders,a=void 0!==e.hasControls?e.hasControls:this.hasControls,s=r.util.multiplyTransformMatrices(o,s),i=r.util.qrDecompose(s),t.save(),t.translate(i.translateX,i.translateY),t.lineWidth=1*this.borderScaleFactor,this.group||(t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1),this.flipX&&(i.angle-=180),t.rotate(l(this.group?i.angle:this.angle)),e.forActiveSelection||this.group?n&&this.drawBordersInGroup(t,i,e):n&&this.drawBorders(t,e),a&&this.drawControls(t,e),t.restore()},_setShadow:function(t){if(this.shadow){var e,i=this.shadow,n=this.canvas,a=n&&n.viewportTransform[0]||1,o=n&&n.viewportTransform[3]||1;e=i.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),n&&n._isRetinaScaling()&&(a*=r.devicePixelRatio,o*=r.devicePixelRatio),t.shadowColor=i.color,t.shadowBlur=i.blur*r.browserShadowBlurConstant*(a+o)*(e.scaleX+e.scaleY)/4,t.shadowOffsetX=i.offsetX*a*e.scaleX,t.shadowOffsetY=i.offsetY*o*e.scaleY}},_removeShadow:function(t){this.shadow&&(t.shadowColor="",t.shadowBlur=t.shadowOffsetX=t.shadowOffsetY=0)},_applyPatternGradientTransform:function(t,e){if(!e||!e.toLive)return{offsetX:0,offsetY:0};var i=e.gradientTransform||e.patternTransform,r=-this.width/2+e.offsetX||0,n=-this.height/2+e.offsetY||0;return"percentage"===e.gradientUnits?t.transform(this.width,0,0,this.height,r,n):t.transform(1,0,0,1,r,n),i&&t.transform(i[0],i[1],i[2],i[3],i[4],i[5]),{offsetX:r,offsetY:n}},_renderPaintInOrder:function(t){"stroke"===this.paintFirst?(this._renderStroke(t),this._renderFill(t)):(this._renderFill(t),this._renderStroke(t))},_render:function(){},_renderFill:function(t){this.fill&&(t.save(),this._setFillStyles(t,this),"evenodd"===this.fillRule?t.fill("evenodd"):t.fill(),t.restore())},_renderStroke:function(t){if(this.stroke&&0!==this.strokeWidth){if(this.shadow&&!this.shadow.affectStroke&&this._removeShadow(t),t.save(),this.strokeUniform&&this.group){var e=this.getObjectScaling();t.scale(1/e.scaleX,1/e.scaleY)}else this.strokeUniform&&t.scale(1/this.scaleX,1/this.scaleY);this._setLineDash(t,this.strokeDashArray),this._setStrokeStyles(t,this),t.stroke(),t.restore()}},_applyPatternForTransformedGradient:function(t,e){var i,n=this._limitCacheSize(this._getCacheCanvasDimensions()),a=r.util.createCanvasElement(),o=this.canvas.getRetinaScaling(),s=n.x/this.scaleX/o,l=n.y/this.scaleY/o;a.width=s,a.height=l,(i=a.getContext("2d")).beginPath(),i.moveTo(0,0),i.lineTo(s,0),i.lineTo(s,l),i.lineTo(0,l),i.closePath(),i.translate(s/2,l/2),i.scale(n.zoomX/this.scaleX/o,n.zoomY/this.scaleY/o),this._applyPatternGradientTransform(i,e),i.fillStyle=e.toLive(t),i.fill(),t.translate(-this.width/2-this.strokeWidth/2,-this.height/2-this.strokeWidth/2),t.scale(o*this.scaleX/n.zoomX,o*this.scaleY/n.zoomY),t.strokeStyle=i.createPattern(a,"no-repeat")},_findCenterFromElement:function(){return{x:this.left+this.width/2,y:this.top+this.height/2}},_assignTransformMatrixProps:function(){if(this.transformMatrix){var t=r.util.qrDecompose(this.transformMatrix);this.flipX=!1,this.flipY=!1,this.set("scaleX",t.scaleX),this.set("scaleY",t.scaleY),this.angle=t.angle,this.skewX=t.skewX,this.skewY=0}},_removeTransformMatrix:function(t){var e=this._findCenterFromElement();this.transformMatrix&&(this._assignTransformMatrixProps(),e=r.util.transformPoint(e,this.transformMatrix)),this.transformMatrix=null,t&&(this.scaleX*=t.scaleX,this.scaleY*=t.scaleY,this.cropX=t.cropX,this.cropY=t.cropY,e.x+=t.offsetLeft,e.y+=t.offsetTop,this.width=t.width,this.height=t.height),this.setPositionByOrigin(e,"center","center")},clone:function(t,e){var i=this.toObject(e);this.constructor.fromObject?this.constructor.fromObject(i,t):r.Object._fromObject("Object",i,t)},cloneAsImage:function(t,e){var i=this.toCanvasElement(e);return t&&t(new r.Image(i)),this},toCanvasElement:function(t){t||(t={});var e=r.util,i=e.saveObjectTransform(this),n=this.group,a=this.shadow,o=Math.abs,s=(t.multiplier||1)*(t.enableRetinaScaling?r.devicePixelRatio:1);delete this.group,t.withoutTransform&&e.resetObjectTransform(this),t.withoutShadow&&(this.shadow=null);var l,c,h,u,f=r.util.createCanvasElement(),d=this.getBoundingRect(!0,!0),g=this.shadow,p={x:0,y:0};g&&(c=g.blur,l=g.nonScaling?{scaleX:1,scaleY:1}:this.getObjectScaling(),p.x=2*Math.round(o(g.offsetX)+c)*o(l.scaleX),p.y=2*Math.round(o(g.offsetY)+c)*o(l.scaleY)),h=d.width+p.x,u=d.height+p.y,f.width=Math.ceil(h),f.height=Math.ceil(u);var v=new r.StaticCanvas(f,{enableRetinaScaling:!1,renderOnAddRemove:!1,skipOffscreen:!1});"jpeg"===t.format&&(v.backgroundColor="#fff"),this.setPositionByOrigin(new r.Point(v.width/2,v.height/2),"center","center");var m=this.canvas;v.add(this);var y=v.toCanvasElement(s||1,t);return this.shadow=a,this.set("canvas",m),n&&(this.group=n),this.set(i).setCoords(),v._objects=[],v.dispose(),v=null,y},toDataURL:function(t){return t||(t={}),r.util.toDataURL(this.toCanvasElement(t),t.format||"png",t.quality||1)},isType:function(t){return arguments.length>1?Array.from(arguments).includes(this.type):this.type===t},complexity:function(){return 1},toJSON:function(t){return this.toObject(t)},rotate:function(t){var e=("center"!==this.originX||"center"!==this.originY)&&this.centeredRotation;return e&&this._setOriginToCenter(),this.set("angle",t),e&&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(t,e){e=e||this.canvas.getPointer(t);var i=new r.Point(e.x,e.y),n=this._getLeftTopCoords();return this.angle&&(i=r.util.rotatePoint(i,n,l(-this.angle))),{x:i.x-n.x,y:i.y-n.y}},_setupCompositeOperation:function(t){this.globalCompositeOperation&&(t.globalCompositeOperation=this.globalCompositeOperation)},dispose:function(){r.runningAnimations&&r.runningAnimations.cancelByTarget(this)}}),r.util.createAccessors&&r.util.createAccessors(r.Object),n(r.Object.prototype,r.Observable),r.Object.NUM_FRACTION_DIGITS=2,r.Object.ENLIVEN_PROPS=["clipPath"],r.Object._fromObject=function(t,e,i,n){var o=r[t];e=a(e,!0),r.util.enlivenPatterns([e.fill,e.stroke],function(t){void 0!==t[0]&&(e.fill=t[0]),void 0!==t[1]&&(e.stroke=t[1]),r.util.enlivenObjectEnlivables(e,e,function(){var t=n?new o(e[n],e):new o(e);i&&i(t)})})},r.Object.__uid=0),D=tQ.util.degreesToRadians,M={left:-.5,center:0,right:.5},A={top:-.5,center:0,bottom:.5},tQ.util.object.extend(tQ.Object.prototype,{translateToGivenOrigin:function(t,e,i,r,n){var a,o,s,l=t.x,c=t.y;return"string"==typeof e?e=M[e]:e-=.5,"string"==typeof r?r=M[r]:r-=.5,a=r-e,"string"==typeof i?i=A[i]:i-=.5,"string"==typeof n?n=A[n]:n-=.5,o=n-i,(a||o)&&(s=this._getTransformedDimensions(),l=t.x+a*s.x,c=t.y+o*s.y),new tQ.Point(l,c)},translateToCenterPoint:function(t,e,i){var r=this.translateToGivenOrigin(t,e,i,"center","center");return this.angle?tQ.util.rotatePoint(r,t,D(this.angle)):r},translateToOriginPoint:function(t,e,i){var r=this.translateToGivenOrigin(t,"center","center",e,i);return this.angle?tQ.util.rotatePoint(r,t,D(this.angle)):r},getCenterPoint:function(){var t=new tQ.Point(this.left,this.top);return this.translateToCenterPoint(t,this.originX,this.originY)},getPointByOrigin:function(t,e){var i=this.getCenterPoint();return this.translateToOriginPoint(i,t,e)},toLocalPoint:function(t,e,i){var r,n,a=this.getCenterPoint();return r=void 0!==e&&void 0!==i?this.translateToGivenOrigin(a,"center","center",e,i):new tQ.Point(this.left,this.top),n=new tQ.Point(t.x,t.y),this.angle&&(n=tQ.util.rotatePoint(n,a,-D(this.angle))),n.subtractEquals(r)},setPositionByOrigin:function(t,e,i){var r=this.translateToCenterPoint(t,e,i),n=this.translateToOriginPoint(r,this.originX,this.originY);this.set("left",n.x),this.set("top",n.y)},adjustPosition:function(t){var e,i,r=D(this.angle),n=this.getScaledWidth(),a=tQ.util.cos(r)*n,o=tQ.util.sin(r)*n;e="string"==typeof this.originX?M[this.originX]:this.originX-.5,i="string"==typeof t?M[t]:t-.5,this.left+=a*(i-e),this.top+=o*(i-e),this.setCoords(),this.originX=t},_setOriginToCenter:function(){this._originalOriginX=this.originX,this._originalOriginY=this.originY;var t=this.getCenterPoint();this.originX="center",this.originY="center",this.left=t.x,this.top=t.y},_resetOrigin:function(){var t=this.translateToOriginPoint(this.getCenterPoint(),this._originalOriginX,this._originalOriginY);this.originX=this._originalOriginX,this.originY=this._originalOriginY,this.left=t.x,this.top=t.y,this._originalOriginX=null,this._originalOriginY=null},_getLeftTopCoords:function(){return this.translateToOriginPoint(this.getCenterPoint(),"left","top")}}),L=(I=tQ.util).degreesToRadians,B=I.multiplyTransformMatrices,R=I.transformPoint,I.object.extend(tQ.Object.prototype,{oCoords:null,aCoords:null,lineCoords:null,ownMatrixCache:null,matrixCache:null,controls:{},_getCoords:function(t,e){return e?t?this.calcACoords():this.calcLineCoords():(this.aCoords&&this.lineCoords||this.setCoords(!0),t?this.aCoords:this.lineCoords)},getCoords:function(t,e){var i;return i=this._getCoords(t,e),[new tQ.Point(i.tl.x,i.tl.y),new tQ.Point(i.tr.x,i.tr.y),new tQ.Point(i.br.x,i.br.y),new tQ.Point(i.bl.x,i.bl.y)]},intersectsWithRect:function(t,e,i,r){var n=this.getCoords(i,r);return"Intersection"===tQ.Intersection.intersectPolygonRectangle(n,t,e).status},intersectsWithObject:function(t,e,i){return"Intersection"===tQ.Intersection.intersectPolygonPolygon(this.getCoords(e,i),t.getCoords(e,i)).status||t.isContainedWithinObject(this,e,i)||this.isContainedWithinObject(t,e,i)},isContainedWithinObject:function(t,e,i){for(var r=this.getCoords(e,i),n=e?t.aCoords:t.lineCoords,a=0,o=t._getImageLines(n);a<4;a++)if(!t.containsPoint(r[a],o))return!1;return!0},isContainedWithinRect:function(t,e,i,r){var n=this.getBoundingRect(i,r);return n.left>=t.x&&n.left+n.width<=e.x&&n.top>=t.y&&n.top+n.height<=e.y},containsPoint:function(t,e,i,r){var n=this._getCoords(i,r),e=e||this._getImageLines(n),a=this._findCrossPoints(t,e);return 0!==a&&a%2==1},isOnScreen:function(t){if(!this.canvas)return!1;var e=this.canvas.vptCoords.tl,i=this.canvas.vptCoords.br;return!!(this.getCoords(!0,t).some(function(t){return t.x<=i.x&&t.x>=e.x&&t.y<=i.y&&t.y>=e.y})||this.intersectsWithRect(e,i,!0,t))||this._containsCenterOfCanvas(e,i,t)},_containsCenterOfCanvas:function(t,e,i){var r={x:(t.x+e.x)/2,y:(t.y+e.y)/2};return!!this.containsPoint(r,null,!0,i)},isPartiallyOnScreen:function(t){if(!this.canvas)return!1;var e=this.canvas.vptCoords.tl,i=this.canvas.vptCoords.br;return!!this.intersectsWithRect(e,i,!0,t)||this.getCoords(!0,t).every(function(t){return(t.x>=i.x||t.x<=e.x)&&(t.y>=i.y||t.y<=e.y)})&&this._containsCenterOfCanvas(e,i,t)},_getImageLines:function(t){return{topline:{o:t.tl,d:t.tr},rightline:{o:t.tr,d:t.br},bottomline:{o:t.br,d:t.bl},leftline:{o:t.bl,d:t.tl}}},_findCrossPoints:function(t,e){var i,r,n,a=0;for(var o in e)if((!((n=e[o]).o.y<t.y)||!(n.d.y<t.y))&&(!(n.o.y>=t.y)||!(n.d.y>=t.y))&&(n.o.x===n.d.x&&n.o.x>=t.x?r=n.o.x:(i=(n.d.y-n.o.y)/(n.d.x-n.o.x),r=-(t.y-0*t.x-(n.o.y-i*n.o.x))/(0-i)),r>=t.x&&(a+=1),2===a))break;return a},getBoundingRect:function(t,e){var i=this.getCoords(t,e);return I.makeBoundingBoxFromPoints(i)},getScaledWidth:function(){return this._getTransformedDimensions().x},getScaledHeight:function(){return this._getTransformedDimensions().y},_constrainScale:function(t){return Math.abs(t)<this.minScaleLimit?t<0?-this.minScaleLimit:this.minScaleLimit:0===t?1e-4:t},scale:function(t){return this._set("scaleX",t),this._set("scaleY",t),this.setCoords()},scaleToWidth:function(t,e){var i=this.getBoundingRect(e).width/this.getScaledWidth();return this.scale(t/this.width/i)},scaleToHeight:function(t,e){var i=this.getBoundingRect(e).height/this.getScaledHeight();return this.scale(t/this.height/i)},calcLineCoords:function(){var t=this.getViewportTransform(),e=this.padding,i=L(this.angle),r=I.cos(i),n=I.sin(i),a=r*e,o=n*e,s=a+o,l=a-o,c=this.calcACoords(),h={tl:R(c.tl,t),tr:R(c.tr,t),bl:R(c.bl,t),br:R(c.br,t)};return e&&(h.tl.x-=l,h.tl.y-=s,h.tr.x+=s,h.tr.y-=l,h.bl.x-=s,h.bl.y+=l,h.br.x+=l,h.br.y+=s),h},calcOCoords:function(){var t=this._calcRotateMatrix(),e=this._calcTranslateMatrix(),i=this.getViewportTransform(),r=B(i,e),n=B(r,t),n=B(n,[1/i[0],0,0,1/i[3],0,0]),a=this._calculateCurrentDimensions(),o={};return this.forEachControl(function(t,e,i){o[e]=t.positionHandler(a,n,i)}),o},calcACoords:function(){var t=this._calcRotateMatrix(),e=B(this._calcTranslateMatrix(),t),i=this._getTransformedDimensions(),r=i.x/2,n=i.y/2;return{tl:R({x:-r,y:-n},e),tr:R({x:r,y:-n},e),bl:R({x:-r,y:n},e),br:R({x:r,y:n},e)}},setCoords:function(t){return this.aCoords=this.calcACoords(),this.lineCoords=this.group?this.aCoords:this.calcLineCoords(),t||(this.oCoords=this.calcOCoords(),this._setCornerCoords&&this._setCornerCoords()),this},_calcRotateMatrix:function(){return I.calcRotateMatrix(this)},_calcTranslateMatrix:function(){var t=this.getCenterPoint();return[1,0,0,1,t.x,t.y]},transformMatrixKey:function(t){var e="";return!t&&this.group&&(e=this.group.transformMatrixKey(t)+"_"),e+this.top+"_"+this.left+"_"+this.scaleX+"_"+this.scaleY+"_"+this.skewX+"_"+this.skewY+"_"+this.angle+"_"+this.originX+"_"+this.originY+"_"+this.width+"_"+this.height+"_"+this.strokeWidth+this.flipX+this.flipY},calcTransformMatrix:function(t){var e=this.calcOwnMatrix();if(t||!this.group)return e;var i=this.transformMatrixKey(t),r=this.matrixCache||(this.matrixCache={});return r.key===i?r.value:(this.group&&(e=B(this.group.calcTransformMatrix(!1),e)),r.key=i,r.value=e,e)},calcOwnMatrix:function(){var t=this.transformMatrixKey(!0),e=this.ownMatrixCache||(this.ownMatrixCache={});if(e.key===t)return e.value;var i=this._calcTranslateMatrix(),r={angle:this.angle,translateX:i[4],translateY:i[5],scaleX:this.scaleX,scaleY:this.scaleY,skewX:this.skewX,skewY:this.skewY,flipX:this.flipX,flipY:this.flipY};return e.key=t,e.value=I.composeMatrix(r),e.value},_getNonTransformedDimensions:function(){var t=this.strokeWidth;return{x:this.width+t,y:this.height+t}},_getTransformedDimensions:function(t,e){void 0===t&&(t=this.skewX),void 0===e&&(e=this.skewY);var i,r,n,a=0===t&&0===e;if(this.strokeUniform?(r=this.width,n=this.height):(r=(i=this._getNonTransformedDimensions()).x,n=i.y),a)return this._finalizeDimensions(r*this.scaleX,n*this.scaleY);var o=I.sizeAfterTransform(r,n,{scaleX:this.scaleX,scaleY:this.scaleY,skewX:t,skewY:e});return this._finalizeDimensions(o.x,o.y)},_finalizeDimensions:function(t,e){return this.strokeUniform?{x:t+this.strokeWidth,y:e+this.strokeWidth}:{x:t,y:e}},_calculateCurrentDimensions:function(){var t=this.getViewportTransform();return R(this._getTransformedDimensions(),t,!0).scalarAdd(2*this.padding)}}),tQ.util.object.extend(tQ.Object.prototype,{sendToBack:function(){return this.group?tQ.StaticCanvas.prototype.sendToBack.call(this.group,this):this.canvas&&this.canvas.sendToBack(this),this},bringToFront:function(){return this.group?tQ.StaticCanvas.prototype.bringToFront.call(this.group,this):this.canvas&&this.canvas.bringToFront(this),this},sendBackwards:function(t){return this.group?tQ.StaticCanvas.prototype.sendBackwards.call(this.group,this,t):this.canvas&&this.canvas.sendBackwards(this,t),this},bringForward:function(t){return this.group?tQ.StaticCanvas.prototype.bringForward.call(this.group,this,t):this.canvas&&this.canvas.bringForward(this,t),this},moveTo:function(t){return this.group&&"activeSelection"!==this.group.type?tQ.StaticCanvas.prototype.moveTo.call(this.group,this,t):this.canvas&&this.canvas.moveTo(this,t),this}}),function(){var t=tQ.util.object.extend,e="stateProperties";function saveProps(e,i,r){var n={};r.forEach(function(t){n[t]=e[t]}),t(e[i],n,!0)}tQ.util.object.extend(tQ.Object.prototype,{hasStateChanged:function(t){var i="_"+(t=t||e);return Object.keys(this[i]).length<this[t].length||!function _isEqual(t,e,i){if(t===e)return!0;if(Array.isArray(t)){if(!Array.isArray(e)||t.length!==e.length)return!1;for(var r=0,n=t.length;r<n;r++)if(!_isEqual(t[r],e[r]))return!1;return!0}if(t&&"object"==typeof t){var a,o=Object.keys(t);if(!e||"object"!=typeof e||!i&&o.length!==Object.keys(e).length)return!1;for(var r=0,n=o.length;r<n;r++)if("canvas"!==(a=o[r])&&"group"!==a&&!_isEqual(t[a],e[a]))return!1;return!0}}(this[i],this,!0)},saveState:function(t){var i=t&&t.propertySet||e,r="_"+i;return this[r]?(saveProps(this,r,this[i]),t&&t.stateProperties&&saveProps(this,r,t.stateProperties),this):this.setupState(t)},setupState:function(t){var i=(t=t||{}).propertySet||e;return t.propertySet=i,this["_"+i]={},this.saveState(t),this}})}(),X=tQ.util.degreesToRadians,tQ.util.object.extend(tQ.Object.prototype,{_findTargetCorner:function(t,e){if(!this.hasControls||this.group||!this.canvas||this.canvas._activeObject!==this)return!1;var i,r,n,a=t.x,o=t.y,s=Object.keys(this.oCoords),l=s.length-1;for(this.__corner=0;l>=0;l--)if(n=s[l],this.isControlVisible(n)&&(r=this._getImageLines(e?this.oCoords[n].touchCorner:this.oCoords[n].corner),0!==(i=this._findCrossPoints({x:a,y:o},r))&&i%2==1))return this.__corner=n,n;return!1},forEachControl:function(t){for(var e in this.controls)t(this.controls[e],e,this)},_setCornerCoords:function(){var t=this.oCoords;for(var e in t){var i=this.controls[e];t[e].corner=i.calcCornerCoords(this.angle,this.cornerSize,t[e].x,t[e].y,!1),t[e].touchCorner=i.calcCornerCoords(this.angle,this.touchCornerSize,t[e].x,t[e].y,!0)}},drawSelectionBackground:function(t){if(!this.selectionBackgroundColor||this.canvas&&!this.canvas.interactive||this.canvas&&this.canvas._activeObject!==this)return this;t.save();var e=this.getCenterPoint(),i=this._calculateCurrentDimensions(),r=this.canvas.viewportTransform;return t.translate(e.x,e.y),t.scale(1/r[0],1/r[3]),t.rotate(X(this.angle)),t.fillStyle=this.selectionBackgroundColor,t.fillRect(-i.x/2,-i.y/2,i.x,i.y),t.restore(),this},drawBorders:function(t,e){e=e||{};var i=this._calculateCurrentDimensions(),r=this.borderScaleFactor,n=i.x+r,a=i.y+r,o=void 0!==e.hasControls?e.hasControls:this.hasControls,s=!1;return t.save(),t.strokeStyle=e.borderColor||this.borderColor,this._setLineDash(t,e.borderDashArray||this.borderDashArray),t.strokeRect(-n/2,-a/2,n,a),o&&(t.beginPath(),this.forEachControl(function(e,i,r){e.withConnection&&e.getVisibility(r,i)&&(s=!0,t.moveTo(e.x*n,e.y*a),t.lineTo(e.x*n+e.offsetX,e.y*a+e.offsetY))}),s&&t.stroke()),t.restore(),this},drawBordersInGroup:function(t,e,i){i=i||{};var r=tQ.util.sizeAfterTransform(this.width,this.height,e),n=this.strokeWidth,a=this.strokeUniform,o=this.borderScaleFactor,s=r.x+n*(a?this.canvas.getZoom():e.scaleX)+o,l=r.y+n*(a?this.canvas.getZoom():e.scaleY)+o;return t.save(),this._setLineDash(t,i.borderDashArray||this.borderDashArray),t.strokeStyle=i.borderColor||this.borderColor,t.strokeRect(-s/2,-l/2,s,l),t.restore(),this},drawControls:function(t,e){e=e||{},t.save();var i,r,n=this.canvas.getRetinaScaling();return t.setTransform(n,0,0,n,0,0),t.strokeStyle=t.fillStyle=e.cornerColor||this.cornerColor,this.transparentCorners||(t.strokeStyle=e.cornerStrokeColor||this.cornerStrokeColor),this._setLineDash(t,e.cornerDashArray||this.cornerDashArray),this.setCoords(),this.group&&(i=this.group.calcTransformMatrix()),this.forEachControl(function(n,a,o){r=o.oCoords[a],n.getVisibility(o,a)&&(i&&(r=tQ.util.transformPoint(r,i)),n.render(t,r.x,r.y,e,o))}),t.restore(),this},isControlVisible:function(t){return this.controls[t]&&this.controls[t].getVisibility(this,t)},setControlVisible:function(t,e){return this._controlsVisibility||(this._controlsVisibility={}),this._controlsVisibility[t]=e,this},setControlsVisibility:function(t){for(var e in t||(t={}),t)this.setControlVisible(e,t[e]);return this},onDeselect:function(){},onSelect:function(){}}),tQ.util.object.extend(tQ.StaticCanvas.prototype,{FX_DURATION:500,fxCenterObjectH:function(t,e){var empty=function(){},i=(e=e||{}).onComplete||empty,r=e.onChange||empty,n=this;return tQ.util.animate({target:this,startValue:t.left,endValue:this.getCenterPoint().x,duration:this.FX_DURATION,onChange:function(e){t.set("left",e),n.requestRenderAll(),r()},onComplete:function(){t.setCoords(),i()}})},fxCenterObjectV:function(t,e){var empty=function(){},i=(e=e||{}).onComplete||empty,r=e.onChange||empty,n=this;return tQ.util.animate({target:this,startValue:t.top,endValue:this.getCenterPoint().y,duration:this.FX_DURATION,onChange:function(e){t.set("top",e),n.requestRenderAll(),r()},onComplete:function(){t.setCoords(),i()}})},fxRemove:function(t,e){var empty=function(){},i=(e=e||{}).onComplete||empty,r=e.onChange||empty,n=this;return tQ.util.animate({target:this,startValue:t.opacity,endValue:0,duration:this.FX_DURATION,onChange:function(e){t.set("opacity",e),n.requestRenderAll(),r()},onComplete:function(){n.remove(t),i()}})}}),tQ.util.object.extend(tQ.Object.prototype,{animate:function(){if(!arguments[0]||"object"!=typeof arguments[0])return this._animate.apply(this,arguments);var t,e,i=[],r=[];for(t in arguments[0])i.push(t);for(var n=0,a=i.length;n<a;n++)t=i[n],e=n!==a-1,r.push(this._animate(t,arguments[0][t],arguments[1],e));return r},_animate:function(t,e,i,r){var n,a=this;e=e.toString(),i=i?tQ.util.object.clone(i):{},~t.indexOf(".")&&(n=t.split("."));var o=a.colorProperties.indexOf(t)>-1||n&&a.colorProperties.indexOf(n[1])>-1,s=n?this.get(n[0])[n[1]]:this.get(t);"from"in i||(i.from=s),o||(e=~e.indexOf("=")?s+parseFloat(e.replace("=","")):parseFloat(e));var l={target:this,startValue:i.from,endValue:e,byValue:i.by,easing:i.easing,duration:i.duration,abort:i.abort&&function(t,e,r){return i.abort.call(a,t,e,r)},onChange:function(e,o,s){n?a[n[0]][n[1]]=e:a.set(t,e),!r&&i.onChange&&i.onChange(e,o,s)},onComplete:function(t,e,n){!r&&(a.setCoords(),i.onComplete&&i.onComplete(t,e,n))}};return o?tQ.util.animateColor(l.startValue,l.endValue,l.duration,l):tQ.util.animate(l)}}),function(t){"use strict";var e=t.fabric||(t.fabric={});if(e.util.object.extend,e.Rect){e.warn("fabric.Rect is already defined");return}e.Rect=e.util.createClass(e.Object,{stateProperties:e.Object.prototype.stateProperties.concat("rx","ry"),type:"rect",rx:0,ry:0,cacheProperties:e.Object.prototype.cacheProperties.concat("rx","ry"),initialize:function(t){this.callSuper("initialize",t),this._initRxRy()},_initRxRy:function(){this.rx&&!this.ry?this.ry=this.rx:this.ry&&!this.rx&&(this.rx=this.ry)},_render:function(t){var e=this.rx?Math.min(this.rx,this.width/2):0,i=this.ry?Math.min(this.ry,this.height/2):0,r=this.width,n=this.height,a=-this.width/2,o=-this.height/2,s=0!==e||0!==i;t.beginPath(),t.moveTo(a+e,o),t.lineTo(a+r-e,o),s&&t.bezierCurveTo(a+r-.4477152502*e,o,a+r,o+.4477152502*i,a+r,o+i),t.lineTo(a+r,o+n-i),s&&t.bezierCurveTo(a+r,o+n-.4477152502*i,a+r-.4477152502*e,o+n,a+r-e,o+n),t.lineTo(a+e,o+n),s&&t.bezierCurveTo(a+.4477152502*e,o+n,a,o+n-.4477152502*i,a,o+n-i),t.lineTo(a,o+i),s&&t.bezierCurveTo(a,o+.4477152502*i,a+.4477152502*e,o,a+e,o),t.closePath(),this._renderPaintInOrder(t)},toObject:function(t){return this.callSuper("toObject",["rx","ry"].concat(t))}}),e.Rect.fromObject=function(t,i){return e.Object._fromObject("Rect",t,i)}}(e),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.extend,r=e.util.array.min,n=e.util.array.max,a=(e.util.toFixed,e.util.projectStrokeOnPoints);if(e.Polyline){e.warn("fabric.Polyline is already defined");return}e.Polyline=e.util.createClass(e.Object,{type:"polyline",points:null,exactBoundingBox:!1,cacheProperties:e.Object.prototype.cacheProperties.concat("points"),initialize:function(t,e){e=e||{},this.points=t||[],this.callSuper("initialize",e),this._setPositionDimensions(e)},_projectStrokeOnPoints:function(){return a(this.points,this,!0)},_setPositionDimensions:function(t){var e,i=this._calcDimensions(t),r=this.exactBoundingBox?this.strokeWidth:0;this.width=i.width-r,this.height=i.height-r,t.fromSVG||(e=this.translateToGivenOrigin({x:i.left-this.strokeWidth/2+r/2,y:i.top-this.strokeWidth/2+r/2},"left","top",this.originX,this.originY)),void 0===t.left&&(this.left=t.fromSVG?i.left:e.x),void 0===t.top&&(this.top=t.fromSVG?i.top:e.y),this.pathOffset={x:i.left+this.width/2+r/2,y:i.top+this.height/2+r/2}},_calcDimensions:function(){var t=this.exactBoundingBox?this._projectStrokeOnPoints():this.points,e=r(t,"x")||0,i=r(t,"y")||0;return{left:e,top:i,width:(n(t,"x")||0)-e,height:(n(t,"y")||0)-i}},toObject:function(t){return i(this.callSuper("toObject",t),{points:this.points.concat()})},commonRender:function(t){var e,i=this.points.length,r=this.pathOffset.x,n=this.pathOffset.y;if(!i||isNaN(this.points[i-1].y))return!1;t.beginPath(),t.moveTo(this.points[0].x-r,this.points[0].y-n);for(var a=0;a<i;a++)e=this.points[a],t.lineTo(e.x-r,e.y-n);return!0},_render:function(t){this.commonRender(t)&&this._renderPaintInOrder(t)},complexity:function(){return this.get("points").length}}),e.Polyline.fromObject=function(t,i){return e.Object._fromObject("Polyline",t,i,"points")}}(e),function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.array.min,r=e.util.array.max,n=e.util.object.extend,a=e.util.object.clone;if(e.util.toFixed,e.Path){e.warn("fabric.Path is already defined");return}e.Path=e.util.createClass(e.Object,{type:"path",path:null,cacheProperties:e.Object.prototype.cacheProperties.concat("path","fillRule"),stateProperties:e.Object.prototype.stateProperties.concat("path"),initialize:function(t,e){e=a(e||{}),delete e.path,this.callSuper("initialize",e),this._setPath(t||[],e)},_setPath:function(t,i){this.path=e.util.makePathSimpler(Array.isArray(t)?t:e.util.parsePath(t)),e.Polyline.prototype._setPositionDimensions.call(this,i||{})},_renderPathCommands:function(t){var e,i=0,r=0,n=0,a=0,o=0,s=0,l=-this.pathOffset.x,c=-this.pathOffset.y;t.beginPath();for(var h=0,u=this.path.length;h<u;++h)switch((e=this.path[h])[0]){case"L":n=e[1],a=e[2],t.lineTo(n+l,a+c);break;case"M":n=e[1],a=e[2],i=n,r=a,t.moveTo(n+l,a+c);break;case"C":n=e[5],a=e[6],o=e[3],s=e[4],t.bezierCurveTo(e[1]+l,e[2]+c,o+l,s+c,n+l,a+c);break;case"Q":t.quadraticCurveTo(e[1]+l,e[2]+c,e[3]+l,e[4]+c),n=e[3],a=e[4],o=e[1],s=e[2];break;case"z":case"Z":n=i,a=r,t.closePath()}},_render:function(t){this._renderPathCommands(t),this._renderPaintInOrder(t)},toString:function(){return"#<fabric.Path ("+this.complexity()+'): { "top": '+this.top+', "left": '+this.left+" }>"},toObject:function(t){return n(this.callSuper("toObject",t),{path:this.path.map(function(t){return t.slice()})})},toDatalessObject:function(t){var e=this.toObject(["sourcePath"].concat(t));return e.sourcePath&&delete e.path,e},complexity:function(){return this.path.length},_calcDimensions:function(){for(var t,n,a=[],o=[],s=0,l=0,c=0,h=0,u=0,f=this.path.length;u<f;++u){switch((t=this.path[u])[0]){case"L":c=t[1],h=t[2],n=[];break;case"M":c=t[1],h=t[2],s=c,l=h,n=[];break;case"C":n=e.util.getBoundsOfCurve(c,h,t[1],t[2],t[3],t[4],t[5],t[6]),c=t[5],h=t[6];break;case"Q":n=e.util.getBoundsOfCurve(c,h,t[1],t[2],t[1],t[2],t[3],t[4]),c=t[3],h=t[4];break;case"z":case"Z":c=s,h=l}n.forEach(function(t){a.push(t.x),o.push(t.y)}),a.push(c),o.push(h)}var d=i(a)||0,g=i(o)||0;return{left:d,top:g,width:(r(a)||0)-d,height:(r(o)||0)-g}}}),e.Path.fromObject=function(t,i){if("string"==typeof t.sourcePath){var r=t.sourcePath;e.loadSVGFromURL(r,function(e){var r=e[0];r.setOptions(t),i&&i(r)})}else e.Object._fromObject("Path",t,i,"path")}}(e),u=(h=e.fabric||(e.fabric={})).util.array.min,f=h.util.array.max,h.Group||(h.Group=h.util.createClass(h.Object,h.Collection,{type:"group",strokeWidth:0,subTargetCheck:!1,cacheProperties:[],useSetOnGroup:!1,initialize:function(t,e,i){e=e||{},this._objects=[],i&&this.callSuper("initialize",e),this._objects=t||[];for(var r=this._objects.length;r--;)this._objects[r].group=this;if(i)this._updateObjectsACoords();else{var n=e&&e.centerPoint;void 0!==e.originX&&(this.originX=e.originX),void 0!==e.originY&&(this.originY=e.originY),n||this._calcBounds(),this._updateObjectsCoords(n),delete e.centerPoint,this.callSuper("initialize",e)}this.setCoords()},_updateObjectsACoords:function(){for(var t=this._objects.length;t--;)this._objects[t].setCoords(!0)},_updateObjectsCoords:function(t){for(var t=t||this.getCenterPoint(),e=this._objects.length;e--;)this._updateObjectCoords(this._objects[e],t)},_updateObjectCoords:function(t,e){var i=t.left,r=t.top;t.set({left:i-e.x,top:r-e.y}),t.group=this,t.setCoords(!0)},toString:function(){return"#<fabric.Group: ("+this.complexity()+")>"},addWithUpdate:function(t){var e=!!this.group;return this._restoreObjectsState(),h.util.resetObjectTransform(this),t&&(e&&h.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,e?this.group.addWithUpdate():this.setCoords(),this},removeWithUpdate:function(t){return this._restoreObjectsState(),h.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,e){var i=this._objects.length;if(this.useSetOnGroup)for(;i--;)this._objects[i].setOnGroup(t,e);if("canvas"===t)for(;i--;)this._objects[i]._set(t,e);h.Object.prototype._set.call(this,t,e)},toObject:function(t){var e=this.includeDefaultValues,i=this._objects.filter(function(t){return!t.excludeFromExport}).map(function(i){var r=i.includeDefaultValues;i.includeDefaultValues=e;var n=i.toObject(t);return i.includeDefaultValues=r,n}),r=h.Object.prototype.toObject.call(this,t);return r.objects=i,r},toDatalessObject:function(t){var e,i=this.sourcePath;if(i)e=i;else{var r=this.includeDefaultValues;e=this._objects.map(function(e){var i=e.includeDefaultValues;e.includeDefaultValues=r;var n=e.toDatalessObject(t);return e.includeDefaultValues=i,n})}var n=h.Object.prototype.toDatalessObject.call(this,t);return n.objects=e,n},render:function(t){this._transformDone=!0,this.callSuper("render",t),this._transformDone=!1},shouldCache:function(){var t=h.Object.prototype.shouldCache.call(this);if(t){for(var e=0,i=this._objects.length;e<i;e++)if(this._objects[e].willDrawShadow())return this.ownCaching=!1,!1}return t},willDrawShadow:function(){if(h.Object.prototype.willDrawShadow.call(this))return!0;for(var t=0,e=this._objects.length;t<e;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 e=0,i=this._objects.length;e<i;e++)this._objects[e].render(t);this._drawClipPath(t,this.clipPath)},isCacheDirty:function(t){if(this.callSuper("isCacheDirty",t))return!0;if(!this.statefullCache)return!1;for(var e=0,i=this._objects.length;e<i;e++)if(this._objects[e].isCacheDirty(!0)){if(this._cacheCanvas){var r=this.cacheWidth/this.zoomX,n=this.cacheHeight/this.zoomY;this._cacheContext.clearRect(-r/2,-n/2,r,n)}return!0}return!1},_restoreObjectsState:function(){var t=this.calcOwnMatrix();return this._objects.forEach(function(e){h.util.addTransformToObject(e,t),delete e.group,e.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,e=this.canvas;this._objects=[];var i=this.toObject();delete i.objects;var r=new h.ActiveSelection([]);return r.set(i),r.type="activeSelection",e.remove(this),t.forEach(function(t){t.group=r,t.dirty=!0,e.add(t)}),r.canvas=e,r._objects=t,e._activeObject=r,r.setCoords(),r}},ungroupOnCanvas:function(){return this._restoreObjectsState()},setObjectsCoords:function(){return this.forEachObject(function(t){t.setCoords(!0)}),this},_calcBounds:function(t){for(var e,i,r,n,a=[],o=[],s=["tr","br","bl","tl"],l=0,c=this._objects.length,h=s.length;l<c;++l){for(n=0,r=(e=this._objects[l]).calcACoords();n<h;n++)i=s[n],a.push(r[i].x),o.push(r[i].y);e.aCoords=r}this._getBounds(a,o,t)},_getBounds:function(t,e,i){var r=new h.Point(u(t),u(e)),n=new h.Point(f(t),f(e)),a=r.y||0,o=r.x||0,s=n.x-r.x||0,l=n.y-r.y||0;this.width=s,this.height=l,i||this.setPositionByOrigin({x:o,y:a},"left","top")}}),h.Group.fromObject=function(t,e){var i=t.objects,r=h.util.object.clone(t,!0);if(delete r.objects,"string"==typeof i){h.loadSVGFromURL(i,function(n){var a=h.util.groupSVGElements(n,t,i);a.set(r),e&&e(a)});return}h.util.enlivenObjects(i,function(i){var r=h.util.object.clone(t,!0);delete r.objects,h.util.enlivenObjectEnlivables(t,r,function(){e&&e(new h.Group(i,r,!0))})})}),(d=e.fabric||(e.fabric={})).ActiveSelection||(d.ActiveSelection=d.util.createClass(d.Group,{type:"activeSelection",initialize:function(t,e){e=e||{},this._objects=t||[];for(var i=this._objects.length;i--;)this._objects[i].group=this;e.originX&&(this.originX=e.originX),e.originY&&(this.originY=e.originY),this._calcBounds(),this._updateObjectsCoords(),d.Object.prototype.initialize.call(this,e),this.setCoords()},toGroup:function(){var t=this._objects.concat();this._objects=[];var e=d.Object.prototype.toObject.call(this),i=new d.Group([]);if(delete e.type,i.set(e),t.forEach(function(t){t.canvas.remove(t),t.group=i}),i._objects=t,!this.canvas)return i;var r=this.canvas;return r.add(i),r._activeObject=i,i.setCoords(),i},onDeselect:function(){return this.destroy(),!1},toString:function(){return"#<fabric.ActiveSelection: ("+this.complexity()+")>"},shouldCache:function(){return!1},isOnACache:function(){return!1},_renderControls:function(t,e,i){t.save(),t.globalAlpha=this.isMoving?this.borderOpacityWhenMoving:1,this.callSuper("_renderControls",t,e),void 0===(i=i||{}).hasControls&&(i.hasControls=!1),i.forActiveSelection=!0;for(var r=0,n=this._objects.length;r<n;r++)this._objects[r]._renderControls(t,i);t.restore()}}),d.ActiveSelection.fromObject=function(t,e){d.util.enlivenObjects(t.objects,function(i){delete t.objects,e&&e(new d.ActiveSelection(i,t,!0))})}),function(t){"use strict";var e=tQ.util.object.extend;if(t.fabric||(t.fabric={}),t.fabric.Image){tQ.warn("fabric.Image is already defined.");return}tQ.Image=tQ.util.createClass(tQ.Object,{type:"image",strokeWidth:0,srcFromAttribute:!1,_lastScaleX:1,_lastScaleY:1,_filterScalingX:1,_filterScalingY:1,minimumScaleTrigger:.5,stateProperties:tQ.Object.prototype.stateProperties.concat("cropX","cropY"),cacheProperties:tQ.Object.prototype.cacheProperties.concat("cropX","cropY"),cacheKey:"",cropX:0,cropY:0,imageSmoothing:!0,initialize:function(t,e){e||(e={}),this.filters=[],this.cacheKey="texture"+tQ.Object.__uid++,this.callSuper("initialize",e),this._initElement(t,e)},getElement:function(){return this._element||{}},setElement:function(t,e){return this.removeTexture(this.cacheKey),this.removeTexture(this.cacheKey+"_filtered"),this._element=t,this._originalElement=t,this._initConfig(e),0!==this.filters.length&&this.applyFilters(),this.resizeFilter&&this.applyResizeFilters(),this},removeTexture:function(t){var e=tQ.filterBackend;e&&e.evictCachesForKey&&e.evictCachesForKey(t)},dispose:function(){this.callSuper("dispose"),this.removeTexture(this.cacheKey),this.removeTexture(this.cacheKey+"_filtered"),this._cacheContext=void 0,["_originalElement","_element","_filteredEl","_cacheCanvas"].forEach((function(t){tQ.util.cleanUpJsdomNode(this[t]),this[t]=void 0}).bind(this))},getCrossOrigin:function(){return this._originalElement&&(this._originalElement.crossOrigin||null)},getOriginalSize:function(){var t=this.getElement();return{width:t.naturalWidth||t.width,height:t.naturalHeight||t.height}},_stroke:function(t){if(this.stroke&&0!==this.strokeWidth){var e=this.width/2,i=this.height/2;t.beginPath(),t.moveTo(-e,-i),t.lineTo(e,-i),t.lineTo(e,i),t.lineTo(-e,i),t.lineTo(-e,-i),t.closePath()}},toObject:function(t){var i=[];this.filters.forEach(function(t){t&&i.push(t.toObject())});var r=e(this.callSuper("toObject",["cropX","cropY"].concat(t)),{src:this.getSrc(),crossOrigin:this.getCrossOrigin(),filters:i});return this.resizeFilter&&(r.resizeFilter=this.resizeFilter.toObject()),r},hasCrop:function(){return this.cropX||this.cropY||this.width<this._element.width||this.height<this._element.height},getSrc:function(t){var e=t?this._element:this._originalElement;return e?e.toDataURL?e.toDataURL():this.srcFromAttribute?e.getAttribute("src"):e.src:this.src||""},setSrc:function(t,e,i){return tQ.util.loadImage(t,function(t,r){this.setElement(t,i),this._setWidthHeight(),e&&e(this,r)},this,i&&i.crossOrigin),this},toString:function(){return'#<fabric.Image: { src: "'+this.getSrc()+'" }>'},applyResizeFilters:function(){var t=this.resizeFilter,e=this.minimumScaleTrigger,i=this.getTotalObjectScaling(),r=i.scaleX,n=i.scaleY,a=this._filteredEl||this._originalElement;if(this.group&&this.set("dirty",!0),!t||r>e&&n>e){this._element=a,this._filterScalingX=1,this._filterScalingY=1,this._lastScaleX=r,this._lastScaleY=n;return}tQ.filterBackend||(tQ.filterBackend=tQ.initFilterBackend());var o=tQ.util.createCanvasElement(),s=this._filteredEl?this.cacheKey+"_filtered":this.cacheKey,l=a.width,c=a.height;o.width=l,o.height=c,this._element=o,this._lastScaleX=t.scaleX=r,this._lastScaleY=t.scaleY=n,tQ.filterBackend.applyFilters([t],a,l,c,this._element,s),this._filterScalingX=o.width/this._originalElement.width,this._filterScalingY=o.height/this._originalElement.height},applyFilters:function(t){if(t=(t=t||this.filters||[]).filter(function(t){return t&&!t.isNeutralState()}),this.set("dirty",!0),this.removeTexture(this.cacheKey+"_filtered"),0===t.length)return this._element=this._originalElement,this._filteredEl=null,this._filterScalingX=1,this._filterScalingY=1,this;var e=this._originalElement,i=e.naturalWidth||e.width,r=e.naturalHeight||e.height;if(this._element===this._originalElement){var n=tQ.util.createCanvasElement();n.width=i,n.height=r,this._element=n,this._filteredEl=n}else this._element=this._filteredEl,this._filteredEl.getContext("2d").clearRect(0,0,i,r),this._lastScaleX=1,this._lastScaleY=1;return tQ.filterBackend||(tQ.filterBackend=tQ.initFilterBackend()),tQ.filterBackend.applyFilters(t,this._originalElement,i,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(t){tQ.util.setImageSmoothing(t,this.imageSmoothing),!0!==this.isMoving&&this.resizeFilter&&this._needsResize()&&this.applyResizeFilters(),this._stroke(t),this._renderPaintInOrder(t)},drawCacheOnCanvas:function(t){tQ.util.setImageSmoothing(t,this.imageSmoothing),tQ.Object.prototype.drawCacheOnCanvas.call(this,t)},shouldCache:function(){return this.needsItsOwnCache()},_renderFill:function(t){var e=this._element;if(e){var i=this._filterScalingX,r=this._filterScalingY,n=this.width,a=this.height,o=Math.min,s=Math.max,l=s(this.cropX,0),c=s(this.cropY,0),h=e.naturalWidth||e.width,u=e.naturalHeight||e.height,f=l*i,d=c*r,g=o(n*i,h-f),p=o(a*r,u-d),v=-n/2,m=-a/2,y=o(n,h/i-l),b=o(a,u/r-c);e&&t.drawImage(e,f,d,g,p,v,m,y,b)}},_needsResize:function(){var t=this.getTotalObjectScaling();return t.scaleX!==this._lastScaleX||t.scaleY!==this._lastScaleY},_resetWidthHeight:function(){this.set(this.getOriginalSize())},_initElement:function(t,e){this.setElement(tQ.util.getById(t),e),tQ.util.addClass(this.getElement(),tQ.Image.CSS_CANVAS)},_initConfig:function(t){t||(t={}),this.setOptions(t),this._setWidthHeight(t)},_initFilters:function(t,e){t&&t.length?tQ.util.enlivenObjects(t,function(t){e&&e(t)},"fabric.Image.filters"):e&&e()},_setWidthHeight:function(t){t||(t={});var e=this.getElement();this.width=t.width||e.naturalWidth||e.width||0,this.height=t.height||e.naturalHeight||e.height||0},parsePreserveAspectRatioAttribute:function(){var t,e=tQ.util.parsePreserveAspectRatioAttribute(this.preserveAspectRatio||""),i=this._element.width,r=this._element.height,n=1,a=1,o=0,s=0,l=0,c=0,h=this.width,u=this.height,f={width:h,height:u};return e&&("none"!==e.alignX||"none"!==e.alignY)?("meet"===e.meetOrSlice&&(t=(h-i*(n=a=tQ.util.findScaleToFit(this._element,f)))/2,"Min"===e.alignX&&(o=-t),"Max"===e.alignX&&(o=t),t=(u-r*a)/2,"Min"===e.alignY&&(s=-t),"Max"===e.alignY&&(s=t)),"slice"===e.meetOrSlice&&(t=i-h/(n=a=tQ.util.findScaleToCover(this._element,f)),"Mid"===e.alignX&&(l=t/2),"Max"===e.alignX&&(l=t),t=r-u/a,"Mid"===e.alignY&&(c=t/2),"Max"===e.alignY&&(c=t),i=h/n,r=u/a)):(n=h/i,a=u/r),{width:i,height:r,scaleX:n,scaleY:a,offsetLeft:o,offsetTop:s,cropX:l,cropY:c}}}),tQ.Image.CSS_CANVAS="canvas-img",tQ.Image.prototype.getSvgSrc=tQ.Image.prototype.getSrc,tQ.Image.fromObject=function(t,e){var i=tQ.util.object.clone(t);tQ.util.loadImage(i.src,function(t,r){if(r){e&&e(null,!0);return}tQ.Image.prototype._initFilters.call(i,i.filters,function(r){i.filters=r||[],tQ.Image.prototype._initFilters.call(i,[i.resizeFilter],function(r){i.resizeFilter=r[0],tQ.util.enlivenObjectEnlivables(i,i,function(){e(new tQ.Image(t,i),!1)})})})},null,i.crossOrigin)},tQ.Image.fromURL=function(t,e,i){tQ.util.loadImage(t,function(t,r){e&&e(new tQ.Image(t,i),r)},null,i&&i.crossOrigin)}}(e),function(){"use strict";function WebglFilterBackend(t){t&&t.tileSize&&(this.tileSize=t.tileSize),this.setupGLContext(this.tileSize,this.tileSize),this.captureGPUInfo()}tQ.isWebglSupported=function(t){if(tQ.isLikelyNode)return!1;t=t||tQ.WebglFilterBackend.prototype.tileSize;var e=document.createElement("canvas"),i=e.getContext("webgl")||e.getContext("experimental-webgl"),r=!1;if(i){tQ.maxTextureSize=i.getParameter(i.MAX_TEXTURE_SIZE),r=tQ.maxTextureSize>=t;for(var n=["highp","mediump","lowp"],a=0;a<3;a++)if(function(t,e){var i=t.createShader(t.FRAGMENT_SHADER);return t.shaderSource(i,"precision "+e+" float;\nvoid main(){}"),t.compileShader(i),!!t.getShaderParameter(i,t.COMPILE_STATUS)}(i,n[a])){tQ.webGlPrecision=n[a];break}}return this.isSupported=r,r},tQ.WebglFilterBackend=WebglFilterBackend,WebglFilterBackend.prototype={tileSize:2048,resources:{},setupGLContext:function(t,e){this.dispose(),this.createWebGLCanvas(t,e),this.aPosition=new Float32Array([0,0,0,1,1,0,1,1]),this.chooseFastestCopyGLTo2DMethod(t,e)},chooseFastestCopyGLTo2DMethod:function(t,e){var i,r,n,a=void 0!==window.performance;try{new ImageData(1,1),n=!0}catch(t){n=!1}var o="undefined"!=typeof ArrayBuffer,s="undefined"!=typeof Uint8ClampedArray;if(a&&n&&o&&s){var l=tQ.util.createCanvasElement(),c=new ArrayBuffer(t*e*4);if(tQ.forceGLPutImageData){this.imageBuffer=c,this.copyGLTo2D=copyGLTo2DPutImageData;return}var h={imageBuffer:c,destinationWidth:t,destinationHeight:e,targetCanvas:l};l.width=t,l.height=e,i=window.performance.now(),copyGLTo2DDrawImage.call(h,this.gl,h),r=window.performance.now()-i,i=window.performance.now(),copyGLTo2DPutImageData.call(h,this.gl,h),r>window.performance.now()-i?(this.imageBuffer=c,this.copyGLTo2D=copyGLTo2DPutImageData):this.copyGLTo2D=copyGLTo2DDrawImage}},createWebGLCanvas:function(t,e){var i=tQ.util.createCanvasElement();i.width=t,i.height=e;var r={alpha:!0,premultipliedAlpha:!1,depth:!1,stencil:!1,antialias:!1},n=i.getContext("webgl",r);n||(n=i.getContext("experimental-webgl",r)),n&&(n.clearColor(0,0,0,0),this.canvas=i,this.gl=n)},applyFilters:function(t,e,i,r,n,a){var o,s,l,c,h,u,f=this.gl;a&&(u=this.getCachedTexture(a,e));var d={originalWidth:e.width||e.originalWidth,originalHeight:e.height||e.originalHeight,sourceWidth:i,sourceHeight:r,destinationWidth:i,destinationHeight:r,context:f,sourceTexture:this.createTexture(f,i,r,!u&&e),targetTexture:this.createTexture(f,i,r),originalTexture:u||this.createTexture(f,i,r,!u&&e),passes:t.length,webgl:!0,aPosition:this.aPosition,programCache:this.programCache,pass:0,filterBackend:this,targetCanvas:n},g=f.createFramebuffer();return f.bindFramebuffer(f.FRAMEBUFFER,g),t.forEach(function(t){t&&t.applyTo(d)}),s=(o=d.targetCanvas).width,l=o.height,c=d.destinationWidth,h=d.destinationHeight,(s!==c||l!==h)&&(o.width=c,o.height=h),this.copyGLTo2D(f,d),f.bindTexture(f.TEXTURE_2D,null),f.deleteTexture(d.sourceTexture),f.deleteTexture(d.targetTexture),f.deleteFramebuffer(g),n.getContext("2d").setTransform(1,0,0,1,0,0),d},dispose:function(){this.canvas&&(this.canvas=null,this.gl=null),this.clearWebGLCaches()},clearWebGLCaches:function(){this.programCache={},this.textureCache={}},createTexture:function(t,e,i,r){var n=t.createTexture();return t.bindTexture(t.TEXTURE_2D,n),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),r?t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,r):t.texImage2D(t.TEXTURE_2D,0,t.RGBA,e,i,0,t.RGBA,t.UNSIGNED_BYTE,null),n},getCachedTexture:function(t,e){if(this.textureCache[t])return this.textureCache[t];var i=this.createTexture(this.gl,e.width,e.height,e);return this.textureCache[t]=i,i},evictCachesForKey:function(t){this.textureCache[t]&&(this.gl.deleteTexture(this.textureCache[t]),delete this.textureCache[t])},copyGLTo2D:copyGLTo2DDrawImage,captureGPUInfo:function(){if(this.gpuInfo)return this.gpuInfo;var t=this.gl,e={renderer:"",vendor:""};if(!t)return e;var i=t.getExtension("WEBGL_debug_renderer_info");if(i){var r=t.getParameter(i.UNMASKED_RENDERER_WEBGL),n=t.getParameter(i.UNMASKED_VENDOR_WEBGL);r&&(e.renderer=r.toLowerCase()),n&&(e.vendor=n.toLowerCase())}return this.gpuInfo=e,e}}}(),function(){"use strict";var noop=function(){};function Canvas2dFilterBackend(){}tQ.Canvas2dFilterBackend=Canvas2dFilterBackend,Canvas2dFilterBackend.prototype={evictCachesForKey:noop,dispose:noop,clearWebGLCaches:noop,resources:{},applyFilters:function(t,e,i,r,n){var a=n.getContext("2d");a.drawImage(e,0,0,i,r);var o=a.getImageData(0,0,i,r),s=a.getImageData(0,0,i,r),l={sourceWidth:i,sourceHeight:r,imageData:o,originalEl:e,originalImageData:s,canvasEl:n,ctx:a,filterBackend:this};return t.forEach(function(t){t.applyTo(l)}),(l.imageData.width!==i||l.imageData.height!==r)&&(n.width=l.imageData.width,n.height=l.imageData.height),a.putImageData(l.imageData,0,0),l}}}(),tQ.Image=tQ.Image||{},tQ.Image.filters=tQ.Image.filters||{},tQ.Image.filters.BaseFilter=tQ.util.createClass({type:"BaseFilter",vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvoid main() {\nvTexCoord = aPosition;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:"precision highp float;\nvarying vec2 vTexCoord;\nuniform sampler2D uTexture;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\n}",initialize:function(t){t&&this.setOptions(t)},setOptions:function(t){for(var e in t)this[e]=t[e]},createProgram:function(t,e,i){e=e||this.fragmentSource,i=i||this.vertexSource,"highp"!==tQ.webGlPrecision&&(e=e.replace(/precision highp float/g,"precision "+tQ.webGlPrecision+" float"));var r=t.createShader(t.VERTEX_SHADER);if(t.shaderSource(r,i),t.compileShader(r),!t.getShaderParameter(r,t.COMPILE_STATUS))throw Error("Vertex shader compile error for "+this.type+": "+t.getShaderInfoLog(r));var n=t.createShader(t.FRAGMENT_SHADER);if(t.shaderSource(n,e),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS))throw Error("Fragment shader compile error for "+this.type+": "+t.getShaderInfoLog(n));var a=t.createProgram();if(t.attachShader(a,r),t.attachShader(a,n),t.linkProgram(a),!t.getProgramParameter(a,t.LINK_STATUS))throw Error('Shader link error for "${this.type}" '+t.getProgramInfoLog(a));var o=this.getAttributeLocations(t,a),s=this.getUniformLocations(t,a)||{};return s.uStepW=t.getUniformLocation(a,"uStepW"),s.uStepH=t.getUniformLocation(a,"uStepH"),{program:a,attributeLocations:o,uniformLocations:s}},getAttributeLocations:function(t,e){return{aPosition:t.getAttribLocation(e,"aPosition")}},getUniformLocations:function(){return{}},sendAttributeData:function(t,e,i){var r=e.aPosition,n=t.createBuffer();t.bindBuffer(t.ARRAY_BUFFER,n),t.enableVertexAttribArray(r),t.vertexAttribPointer(r,2,t.FLOAT,!1,0,0),t.bufferData(t.ARRAY_BUFFER,i,t.STATIC_DRAW)},_setupFrameBuffer:function(t){var e,i,r=t.context;t.passes>1?(e=t.destinationWidth,i=t.destinationHeight,(t.sourceWidth!==e||t.sourceHeight!==i)&&(r.deleteTexture(t.targetTexture),t.targetTexture=t.filterBackend.createTexture(r,e,i)),r.framebufferTexture2D(r.FRAMEBUFFER,r.COLOR_ATTACHMENT0,r.TEXTURE_2D,t.targetTexture,0)):(r.bindFramebuffer(r.FRAMEBUFFER,null),r.finish())},_swapTextures:function(t){t.passes--,t.pass++;var e=t.targetTexture;t.targetTexture=t.sourceTexture,t.sourceTexture=e},isNeutralState:function(){var t=this.mainParameter,e=tQ.Image.filters[this.type].prototype;if(!t)return!1;if(!Array.isArray(e[t]))return e[t]===this[t];for(var i=e[t].length;i--;)if(this[t][i]!==e[t][i])return!1;return!0},applyTo:function(t){t.webgl?(this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t)):this.applyTo2d(t)},retrieveShader:function(t){return t.programCache.hasOwnProperty(this.type)||(t.programCache[this.type]=this.createProgram(t.context)),t.programCache[this.type]},applyToWebGL:function(t){var e=t.context,i=this.retrieveShader(t);0===t.pass&&t.originalTexture?e.bindTexture(e.TEXTURE_2D,t.originalTexture):e.bindTexture(e.TEXTURE_2D,t.sourceTexture),e.useProgram(i.program),this.sendAttributeData(e,i.attributeLocations,t.aPosition),e.uniform1f(i.uniformLocations.uStepW,1/t.sourceWidth),e.uniform1f(i.uniformLocations.uStepH,1/t.sourceHeight),this.sendUniformData(e,i.uniformLocations),e.viewport(0,0,t.destinationWidth,t.destinationHeight),e.drawArrays(e.TRIANGLE_STRIP,0,4)},bindAdditionalTexture:function(t,e,i){t.activeTexture(i),t.bindTexture(t.TEXTURE_2D,e),t.activeTexture(t.TEXTURE0)},unbindAdditionalTexture:function(t,e){t.activeTexture(e),t.bindTexture(t.TEXTURE_2D,null),t.activeTexture(t.TEXTURE0)},getMainParameter:function(){return this[this.mainParameter]},setMainParameter:function(t){this[this.mainParameter]=t},sendUniformData:function(){},createHelpLayer:function(t){if(!t.helpLayer){var e=document.createElement("canvas");e.width=t.sourceWidth,e.height=t.sourceHeight,t.helpLayer=e}},toObject:function(){var t={type:this.type},e=this.mainParameter;return e&&(t[e]=this[e]),t},toJSON:function(){return this.toObject()}}),tQ.Image.filters.BaseFilter.fromObject=function(t,e){var i=new tQ.Image.filters[t.type](t);return e&&e(i),i},Y=(W=e.fabric||(e.fabric={})).Image.filters,z=W.util.createClass,Y.ColorMatrix=z(Y.BaseFilter,{type:"ColorMatrix",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nuniform mat4 uColorMatrix;\nuniform vec4 uConstants;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor *= uColorMatrix;\ncolor += uConstants;\ngl_FragColor = color;\n}",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 e,i,r,n,a,o=t.imageData.data,s=o.length,l=this.matrix,c=this.colorsOnly;for(a=0;a<s;a+=4)e=o[a],i=o[a+1],r=o[a+2],c?(o[a]=e*l[0]+i*l[1]+r*l[2]+255*l[4],o[a+1]=e*l[5]+i*l[6]+r*l[7]+255*l[9],o[a+2]=e*l[10]+i*l[11]+r*l[12]+255*l[14]):(n=o[a+3],o[a]=e*l[0]+i*l[1]+r*l[2]+n*l[3]+255*l[4],o[a+1]=e*l[5]+i*l[6]+r*l[7]+n*l[8]+255*l[9],o[a+2]=e*l[10]+i*l[11]+r*l[12]+n*l[13]+255*l[14],o[a+3]=e*l[15]+i*l[16]+r*l[17]+n*l[18]+255*l[19])},getUniformLocations:function(t,e){return{uColorMatrix:t.getUniformLocation(e,"uColorMatrix"),uConstants:t.getUniformLocation(e,"uConstants")}},sendUniformData:function(t,e){var i=this.matrix,r=[i[0],i[1],i[2],i[3],i[5],i[6],i[7],i[8],i[10],i[11],i[12],i[13],i[15],i[16],i[17],i[18]],n=[i[4],i[9],i[14],i[19]];t.uniformMatrix4fv(e.uColorMatrix,!1,r),t.uniform4fv(e.uConstants,n)}}),W.Image.filters.ColorMatrix.fromObject=W.Image.filters.BaseFilter.fromObject,H=(U=e.fabric||(e.fabric={})).Image.filters,N=U.util.createClass,H.Brightness=N(H.BaseFilter,{type:"Brightness",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uBrightness;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor.rgb += uBrightness;\ngl_FragColor = color;\n}",brightness:0,mainParameter:"brightness",applyTo2d:function(t){if(0!==this.brightness){var e,i=t.imageData.data,r=i.length,n=Math.round(255*this.brightness);for(e=0;e<r;e+=4)i[e]=i[e]+n,i[e+1]=i[e+1]+n,i[e+2]=i[e+2]+n}},getUniformLocations:function(t,e){return{uBrightness:t.getUniformLocation(e,"uBrightness")}},sendUniformData:function(t,e){t.uniform1f(e.uBrightness,this.brightness)}}),U.Image.filters.Brightness.fromObject=U.Image.filters.BaseFilter.fromObject,G=(V=e.fabric||(e.fabric={})).util.object.extend,q=V.Image.filters,K=V.util.createClass,q.Convolute=K(q.BaseFilter,{type:"Convolute",opaque:!1,matrix:[0,0,0,0,1,0,0,0,0],fragmentSource:{Convolute_3_1:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[9];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 3.0; h+=1.0) {\nfor (float w = 0.0; w < 3.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 1), uStepH * (h - 1));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 3.0 + w)];\n}\n}\ngl_FragColor = color;\n}",Convolute_3_0:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[9];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 3.0; h+=1.0) {\nfor (float w = 0.0; w < 3.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 1.0), uStepH * (h - 1.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 3.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}",Convolute_5_1:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[25];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 5.0; h+=1.0) {\nfor (float w = 0.0; w < 5.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 5.0 + w)];\n}\n}\ngl_FragColor = color;\n}",Convolute_5_0:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[25];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 5.0; h+=1.0) {\nfor (float w = 0.0; w < 5.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 2.0), uStepH * (h - 2.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 5.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}",Convolute_7_1:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[49];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 7.0; h+=1.0) {\nfor (float w = 0.0; w < 7.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 7.0 + w)];\n}\n}\ngl_FragColor = color;\n}",Convolute_7_0:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[49];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 7.0; h+=1.0) {\nfor (float w = 0.0; w < 7.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 3.0), uStepH * (h - 3.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 7.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}",Convolute_9_1:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[81];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 0);\nfor (float h = 0.0; h < 9.0; h+=1.0) {\nfor (float w = 0.0; w < 9.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\ncolor += texture2D(uTexture, vTexCoord + matrixPos) * uMatrix[int(h * 9.0 + w)];\n}\n}\ngl_FragColor = color;\n}",Convolute_9_0:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uMatrix[81];\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = vec4(0, 0, 0, 1);\nfor (float h = 0.0; h < 9.0; h+=1.0) {\nfor (float w = 0.0; w < 9.0; w+=1.0) {\nvec2 matrixPos = vec2(uStepW * (w - 4.0), uStepH * (h - 4.0));\ncolor.rgb += texture2D(uTexture, vTexCoord + matrixPos).rgb * uMatrix[int(h * 9.0 + w)];\n}\n}\nfloat alpha = texture2D(uTexture, vTexCoord).a;\ngl_FragColor = color;\ngl_FragColor.a = alpha;\n}"},retrieveShader:function(t){var e=Math.sqrt(this.matrix.length),i=this.type+"_"+e+"_"+(this.opaque?1:0),r=this.fragmentSource[i];return t.programCache.hasOwnProperty(i)||(t.programCache[i]=this.createProgram(t.context,r)),t.programCache[i]},applyTo2d:function(t){var e,i,r,n,a,o,s,l,c,h,u,f,d,g=t.imageData,p=g.data,v=this.matrix,m=Math.round(Math.sqrt(v.length)),y=Math.floor(m/2),b=g.width,x=g.height,_=t.ctx.createImageData(b,x),C=_.data,w=this.opaque?1:0;for(u=0;u<x;u++)for(h=0;h<b;h++){for(d=0,a=(u*b+h)*4,e=0,i=0,r=0,n=0;d<m;d++)for(f=0;f<m;f++)s=u+d-y,o=h+f-y,s<0||s>=x||o<0||o>=b||(l=(s*b+o)*4,c=v[d*m+f],e+=p[l]*c,i+=p[l+1]*c,r+=p[l+2]*c,w||(n+=p[l+3]*c));C[a]=e,C[a+1]=i,C[a+2]=r,w?C[a+3]=p[a+3]:C[a+3]=n}t.imageData=_},getUniformLocations:function(t,e){return{uMatrix:t.getUniformLocation(e,"uMatrix"),uOpaque:t.getUniformLocation(e,"uOpaque"),uHalfSize:t.getUniformLocation(e,"uHalfSize"),uSize:t.getUniformLocation(e,"uSize")}},sendUniformData:function(t,e){t.uniform1fv(e.uMatrix,this.matrix)},toObject:function(){return G(this.callSuper("toObject"),{opaque:this.opaque,matrix:this.matrix})}}),V.Image.filters.Convolute.fromObject=V.Image.filters.BaseFilter.fromObject,Z=(J=e.fabric||(e.fabric={})).Image.filters,$=J.util.createClass,Z.Grayscale=$(Z.BaseFilter,{type:"Grayscale",fragmentSource:{average:"precision highp float;\nuniform sampler2D uTexture;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat average = (color.r + color.b + color.g) / 3.0;\ngl_FragColor = vec4(average, average, average, color.a);\n}",lightness:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = (max(max(col.r, col.g),col.b) + min(min(col.r, col.g),col.b)) / 2.0;\ngl_FragColor = vec4(average, average, average, col.a);\n}",luminosity:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uMode;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 col = texture2D(uTexture, vTexCoord);\nfloat average = 0.21 * col.r + 0.72 * col.g + 0.07 * col.b;\ngl_FragColor = vec4(average, average, average, col.a);\n}"},mode:"average",mainParameter:"mode",applyTo2d:function(t){var e,i,r=t.imageData.data,n=r.length,a=this.mode;for(e=0;e<n;e+=4)"average"===a?i=(r[e]+r[e+1]+r[e+2])/3:"lightness"===a?i=(Math.min(r[e],r[e+1],r[e+2])+Math.max(r[e],r[e+1],r[e+2]))/2:"luminosity"===a&&(i=.21*r[e]+.72*r[e+1]+.07*r[e+2]),r[e]=i,r[e+1]=i,r[e+2]=i},retrieveShader:function(t){var e=this.type+"_"+this.mode;if(!t.programCache.hasOwnProperty(e)){var i=this.fragmentSource[this.mode];t.programCache[e]=this.createProgram(t.context,i)}return t.programCache[e]},getUniformLocations:function(t,e){return{uMode:t.getUniformLocation(e,"uMode")}},sendUniformData:function(t,e){t.uniform1i(e.uMode,1)},isNeutralState:function(){return!1}}),J.Image.filters.Grayscale.fromObject=J.Image.filters.BaseFilter.fromObject,tt=(Q=e.fabric||(e.fabric={})).Image.filters,te=Q.util.createClass,tt.Invert=te(tt.BaseFilter,{type:"Invert",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform int uInvert;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nif (uInvert == 1) {\ngl_FragColor = vec4(1.0 - color.r,1.0 -color.g,1.0 -color.b,color.a);\n} else {\ngl_FragColor = color;\n}\n}",invert:!0,mainParameter:"invert",applyTo2d:function(t){var e,i=t.imageData.data,r=i.length;for(e=0;e<r;e+=4)i[e]=255-i[e],i[e+1]=255-i[e+1],i[e+2]=255-i[e+2]},isNeutralState:function(){return!this.invert},getUniformLocations:function(t,e){return{uInvert:t.getUniformLocation(e,"uInvert")}},sendUniformData:function(t,e){t.uniform1i(e.uInvert,this.invert)}}),Q.Image.filters.Invert.fromObject=Q.Image.filters.BaseFilter.fromObject,tr=(ti=e.fabric||(e.fabric={})).util.object.extend,tn=ti.Image.filters,ta=ti.util.createClass,tn.Noise=ta(tn.BaseFilter,{type:"Noise",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uStepH;\nuniform float uNoise;\nuniform float uSeed;\nvarying vec2 vTexCoord;\nfloat rand(vec2 co, float seed, float vScale) {\nreturn fract(sin(dot(co.xy * vScale ,vec2(12.9898 , 78.233))) * 43758.5453 * (seed + 0.01) / 2.0);\n}\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ncolor.rgb += (0.5 - rand(vTexCoord, uSeed, 0.1 / uStepH)) * uNoise;\ngl_FragColor = color;\n}",mainParameter:"noise",noise:0,applyTo2d:function(t){if(0!==this.noise){var e,i,r=t.imageData.data,n=r.length,a=this.noise;for(e=0,n=r.length;e<n;e+=4)i=(.5-Math.random())*a,r[e]+=i,r[e+1]+=i,r[e+2]+=i}},getUniformLocations:function(t,e){return{uNoise:t.getUniformLocation(e,"uNoise"),uSeed:t.getUniformLocation(e,"uSeed")}},sendUniformData:function(t,e){t.uniform1f(e.uNoise,this.noise/255),t.uniform1f(e.uSeed,Math.random())},toObject:function(){return tr(this.callSuper("toObject"),{noise:this.noise})}}),ti.Image.filters.Noise.fromObject=ti.Image.filters.BaseFilter.fromObject,ts=(to=e.fabric||(e.fabric={})).Image.filters,tl=to.util.createClass,ts.Pixelate=tl(ts.BaseFilter,{type:"Pixelate",blocksize:4,mainParameter:"blocksize",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uBlocksize;\nuniform float uStepW;\nuniform float uStepH;\nvarying vec2 vTexCoord;\nvoid main() {\nfloat blockW = uBlocksize * uStepW;\nfloat blockH = uBlocksize * uStepW;\nint posX = int(vTexCoord.x / blockW);\nint posY = int(vTexCoord.y / blockH);\nfloat fposX = float(posX);\nfloat fposY = float(posY);\nvec2 squareCoords = vec2(fposX * blockW, fposY * blockH);\nvec4 color = texture2D(uTexture, squareCoords);\ngl_FragColor = color;\n}",applyTo2d:function(t){var e,i,r,n,a,o,s,l,c,h,u,f=t.imageData,d=f.data,g=f.height,p=f.width;for(i=0;i<g;i+=this.blocksize)for(r=0;r<p;r+=this.blocksize)for(n=d[e=4*i*p+4*r],a=d[e+1],o=d[e+2],s=d[e+3],h=Math.min(i+this.blocksize,g),u=Math.min(r+this.blocksize,p),l=i;l<h;l++)for(c=r;c<u;c++)d[e=4*l*p+4*c]=n,d[e+1]=a,d[e+2]=o,d[e+3]=s},isNeutralState:function(){return 1===this.blocksize},getUniformLocations:function(t,e){return{uBlocksize:t.getUniformLocation(e,"uBlocksize"),uStepW:t.getUniformLocation(e,"uStepW"),uStepH:t.getUniformLocation(e,"uStepH")}},sendUniformData:function(t,e){t.uniform1f(e.uBlocksize,this.blocksize)}}),to.Image.filters.Pixelate.fromObject=to.Image.filters.BaseFilter.fromObject,th=(tc=e.fabric||(e.fabric={})).util.object.extend,tu=tc.Image.filters,tf=tc.util.createClass,tu.RemoveColor=tf(tu.BaseFilter,{type:"RemoveColor",color:"#FFFFFF",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec4 uLow;\nuniform vec4 uHigh;\nvarying vec2 vTexCoord;\nvoid main() {\ngl_FragColor = texture2D(uTexture, vTexCoord);\nif(all(greaterThan(gl_FragColor.rgb,uLow.rgb)) && all(greaterThan(uHigh.rgb,gl_FragColor.rgb))) {\ngl_FragColor.a = 0.0;\n}\n}",distance:.02,useAlpha:!1,applyTo2d:function(t){var e,i,r,n,a=t.imageData.data,o=255*this.distance,s=new tc.Color(this.color).getSource(),l=[s[0]-o,s[1]-o,s[2]-o],c=[s[0]+o,s[1]+o,s[2]+o];for(e=0;e<a.length;e+=4)i=a[e],r=a[e+1],n=a[e+2],i>l[0]&&r>l[1]&&n>l[2]&&i<c[0]&&r<c[1]&&n<c[2]&&(a[e+3]=0)},getUniformLocations:function(t,e){return{uLow:t.getUniformLocation(e,"uLow"),uHigh:t.getUniformLocation(e,"uHigh")}},sendUniformData:function(t,e){var i=new tc.Color(this.color).getSource(),r=parseFloat(this.distance),n=[0+i[0]/255-r,0+i[1]/255-r,0+i[2]/255-r,1],a=[i[0]/255+r,i[1]/255+r,i[2]/255+r,1];t.uniform4fv(e.uLow,n),t.uniform4fv(e.uHigh,a)},toObject:function(){return th(this.callSuper("toObject"),{color:this.color,distance:this.distance})}}),tc.Image.filters.RemoveColor.fromObject=tc.Image.filters.BaseFilter.fromObject,function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.Image.filters,r=e.util.createClass,n={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 a in n)i[a]=r(i.ColorMatrix,{type:a,matrix:n[a],mainParameter:!1,colorsOnly:!0}),e.Image.filters[a].fromObject=e.Image.filters.BaseFilter.fromObject}(e),tg=(td=e.fabric).Image.filters,tp=td.util.createClass,tg.BlendColor=tp(tg.BaseFilter,{type:"BlendColor",color:"#F95C63",mode:"multiply",alpha:1,fragmentSource:{multiply:"gl_FragColor.rgb *= uColor.rgb;\n",screen:"gl_FragColor.rgb = 1.0 - (1.0 - gl_FragColor.rgb) * (1.0 - uColor.rgb);\n",add:"gl_FragColor.rgb += uColor.rgb;\n",diff:"gl_FragColor.rgb = abs(gl_FragColor.rgb - uColor.rgb);\n",subtract:"gl_FragColor.rgb -= uColor.rgb;\n",lighten:"gl_FragColor.rgb = max(gl_FragColor.rgb, uColor.rgb);\n",darken:"gl_FragColor.rgb = min(gl_FragColor.rgb, uColor.rgb);\n",exclusion:"gl_FragColor.rgb += uColor.rgb - 2.0 * (uColor.rgb * gl_FragColor.rgb);\n",overlay:"if (uColor.r < 0.5) {\ngl_FragColor.r *= 2.0 * uColor.r;\n} else {\ngl_FragColor.r = 1.0 - 2.0 * (1.0 - gl_FragColor.r) * (1.0 - uColor.r);\n}\nif (uColor.g < 0.5) {\ngl_FragColor.g *= 2.0 * uColor.g;\n} else {\ngl_FragColor.g = 1.0 - 2.0 * (1.0 - gl_FragColor.g) * (1.0 - uColor.g);\n}\nif (uColor.b < 0.5) {\ngl_FragColor.b *= 2.0 * uColor.b;\n} else {\ngl_FragColor.b = 1.0 - 2.0 * (1.0 - gl_FragColor.b) * (1.0 - uColor.b);\n}\n",tint:"gl_FragColor.rgb *= (1.0 - uColor.a);\ngl_FragColor.rgb += uColor.rgb;\n"},buildSource:function(t){return"precision highp float;\nuniform sampler2D uTexture;\nuniform vec4 uColor;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\ngl_FragColor = color;\nif (color.a > 0.0) {\n"+this.fragmentSource[t]+"}\n}"},retrieveShader:function(t){var e,i=this.type+"_"+this.mode;return t.programCache.hasOwnProperty(i)||(e=this.buildSource(this.mode),t.programCache[i]=this.createProgram(t.context,e)),t.programCache[i]},applyTo2d:function(t){var e,i,r,n,a,o,s,l=t.imageData.data,c=l.length,h=1-this.alpha;e=(s=new td.Color(this.color).getSource())[0]*this.alpha,i=s[1]*this.alpha,r=s[2]*this.alpha;for(var u=0;u<c;u+=4)switch(n=l[u],a=l[u+1],o=l[u+2],this.mode){case"multiply":l[u]=n*e/255,l[u+1]=a*i/255,l[u+2]=o*r/255;break;case"screen":l[u]=255-(255-n)*(255-e)/255,l[u+1]=255-(255-a)*(255-i)/255,l[u+2]=255-(255-o)*(255-r)/255;break;case"add":l[u]=n+e,l[u+1]=a+i,l[u+2]=o+r;break;case"diff":case"difference":l[u]=Math.abs(n-e),l[u+1]=Math.abs(a-i),l[u+2]=Math.abs(o-r);break;case"subtract":l[u]=n-e,l[u+1]=a-i,l[u+2]=o-r;break;case"darken":l[u]=Math.min(n,e),l[u+1]=Math.min(a,i),l[u+2]=Math.min(o,r);break;case"lighten":l[u]=Math.max(n,e),l[u+1]=Math.max(a,i),l[u+2]=Math.max(o,r);break;case"overlay":l[u]=e<128?2*n*e/255:255-2*(255-n)*(255-e)/255,l[u+1]=i<128?2*a*i/255:255-2*(255-a)*(255-i)/255,l[u+2]=r<128?2*o*r/255:255-2*(255-o)*(255-r)/255;break;case"exclusion":l[u]=e+n-2*e*n/255,l[u+1]=i+a-2*i*a/255,l[u+2]=r+o-2*r*o/255;break;case"tint":l[u]=e+n*h,l[u+1]=i+a*h,l[u+2]=r+o*h}},getUniformLocations:function(t,e){return{uColor:t.getUniformLocation(e,"uColor")}},sendUniformData:function(t,e){var i=new td.Color(this.color).getSource();i[0]=this.alpha*i[0]/255,i[1]=this.alpha*i[1]/255,i[2]=this.alpha*i[2]/255,i[3]=this.alpha,t.uniform4fv(e.uColor,i)},toObject:function(){return{type:this.type,color:this.color,mode:this.mode,alpha:this.alpha}}}),td.Image.filters.BlendColor.fromObject=td.Image.filters.BaseFilter.fromObject,tm=(tv=e.fabric).Image.filters,ty=tv.util.createClass,tm.BlendImage=ty(tm.BaseFilter,{type:"BlendImage",image:null,mode:"multiply",alpha:1,vertexSource:"attribute vec2 aPosition;\nvarying vec2 vTexCoord;\nvarying vec2 vTexCoord2;\nuniform mat3 uTransformMatrix;\nvoid main() {\nvTexCoord = aPosition;\nvTexCoord2 = (uTransformMatrix * vec3(aPosition, 1.0)).xy;\ngl_Position = vec4(aPosition * 2.0 - 1.0, 0.0, 1.0);\n}",fragmentSource:{multiply:"precision highp float;\nuniform sampler2D uTexture;\nuniform sampler2D uImage;\nuniform vec4 uColor;\nvarying vec2 vTexCoord;\nvarying vec2 vTexCoord2;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec4 color2 = texture2D(uImage, vTexCoord2);\ncolor.rgba *= color2.rgba;\ngl_FragColor = color;\n}",mask:"precision highp float;\nuniform sampler2D uTexture;\nuniform sampler2D uImage;\nuniform vec4 uColor;\nvarying vec2 vTexCoord;\nvarying vec2 vTexCoord2;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec4 color2 = texture2D(uImage, vTexCoord2);\ncolor.a = color2.a;\ngl_FragColor = color;\n}"},retrieveShader:function(t){var e=this.type+"_"+this.mode,i=this.fragmentSource[this.mode];return t.programCache.hasOwnProperty(e)||(t.programCache[e]=this.createProgram(t.context,i)),t.programCache[e]},applyToWebGL:function(t){var e=t.context,i=this.createTexture(t.filterBackend,this.image);this.bindAdditionalTexture(e,i,e.TEXTURE1),this.callSuper("applyToWebGL",t),this.unbindAdditionalTexture(e,e.TEXTURE1)},createTexture:function(t,e){return t.getCachedTexture(e.cacheKey,e._element)},calculateMatrix:function(){var t=this.image,e=t._element.width,i=t._element.height;return[1/t.scaleX,0,0,0,1/t.scaleY,0,-t.left/e,-t.top/i,1]},applyTo2d:function(t){var e,i,r,n,a,o,s,l,c,h,u,f=t.imageData,d=t.filterBackend.resources,g=f.data,p=g.length,v=f.width,m=f.height,y=this.image;d.blendImage||(d.blendImage=tv.util.createCanvasElement()),h=(c=d.blendImage).getContext("2d"),c.width!==v||c.height!==m?(c.width=v,c.height=m):h.clearRect(0,0,v,m),h.setTransform(y.scaleX,0,0,y.scaleY,y.left,y.top),h.drawImage(y._element,0,0,v,m),u=h.getImageData(0,0,v,m).data;for(var b=0;b<p;b+=4)switch(a=g[b],o=g[b+1],s=g[b+2],l=g[b+3],e=u[b],i=u[b+1],r=u[b+2],n=u[b+3],this.mode){case"multiply":g[b]=a*e/255,g[b+1]=o*i/255,g[b+2]=s*r/255,g[b+3]=l*n/255;break;case"mask":g[b+3]=n}},getUniformLocations:function(t,e){return{uTransformMatrix:t.getUniformLocation(e,"uTransformMatrix"),uImage:t.getUniformLocation(e,"uImage")}},sendUniformData:function(t,e){var i=this.calculateMatrix();t.uniform1i(e.uImage,1),t.uniformMatrix3fv(e.uTransformMatrix,!1,i)},toObject:function(){return{type:this.type,image:this.image&&this.image.toObject(),mode:this.mode,alpha:this.alpha}}}),tv.Image.filters.BlendImage.fromObject=function(t,e){tv.Image.fromObject(t.image,function(i){var r=tv.util.object.clone(t);r.image=i,e(new tv.Image.filters.BlendImage(r))})},tb=e.fabric||(e.fabric={}),tx=Math.pow,t_=Math.floor,tC=Math.sqrt,tw=Math.abs,tS=Math.round,tT=Math.sin,tj=Math.ceil,tk=tb.Image.filters,tO=tb.util.createClass,tk.Resize=tO(tk.BaseFilter,{type:"Resize",resizeType:"hermite",scaleX:1,scaleY:1,lanczosLobes:3,getUniformLocations:function(t,e){return{uDelta:t.getUniformLocation(e,"uDelta"),uTaps:t.getUniformLocation(e,"uTaps")}},sendUniformData:function(t,e){t.uniform2fv(e.uDelta,this.horizontal?[1/this.width,0]:[0,1/this.height]),t.uniform1fv(e.uTaps,this.taps)},retrieveShader:function(t){var e=this.getFilterWindow(),i=this.type+"_"+e;if(!t.programCache.hasOwnProperty(i)){var r=this.generateShader(e);t.programCache[i]=this.createProgram(t.context,r)}return t.programCache[i]},getFilterWindow:function(){var t=this.tempScale;return Math.ceil(this.lanczosLobes/t)},getTaps:function(){for(var t=this.lanczosCreate(this.lanczosLobes),e=this.tempScale,i=this.getFilterWindow(),r=Array(i),n=1;n<=i;n++)r[n-1]=t(n*e);return r},generateShader:function(t){for(var e=Array(t),i=this.fragmentSourceTOP,r=1;r<=t;r++)e[r-1]=r+".0 * uDelta";return i+="uniform float uTaps["+t+"];\nvoid main() {\n vec4 color = texture2D(uTexture, vTexCoord);\n float sum = 1.0;\n",e.forEach(function(t,e){i+=" color += texture2D(uTexture, vTexCoord + "+t+") * uTaps["+e+"];\n"+(" color += texture2D(uTexture, vTexCoord - "+t+") * uTaps[")+e+"];\n sum += 2.0 * uTaps["+e+"];\n"}),i+=" gl_FragColor = color / sum;\n}"},fragmentSourceTOP:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec2 uDelta;\nvarying vec2 vTexCoord;\n",applyTo:function(t){t.webgl?(t.passes++,this.width=t.sourceWidth,this.horizontal=!0,this.dW=Math.round(this.width*this.scaleX),this.dH=t.sourceHeight,this.tempScale=this.dW/this.width,this.taps=this.getTaps(),t.destinationWidth=this.dW,this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t),t.sourceWidth=t.destinationWidth,this.height=t.sourceHeight,this.horizontal=!1,this.dH=Math.round(this.height*this.scaleY),this.tempScale=this.dH/this.height,this.taps=this.getTaps(),t.destinationHeight=this.dH,this._setupFrameBuffer(t),this.applyToWebGL(t),this._swapTextures(t),t.sourceHeight=t.destinationHeight):this.applyTo2d(t)},isNeutralState:function(){return 1===this.scaleX&&1===this.scaleY},lanczosCreate:function(t){return function(e){if(e>=t||e<=-t)return 0;if(e<11920929e-14&&e>-.00000011920929)return 1;var i=(e*=Math.PI)/t;return tT(e)/e*tT(i)/i}},applyTo2d:function(t){var e=t.imageData,i=this.scaleX,r=this.scaleY;this.rcpScaleX=1/i,this.rcpScaleY=1/r;var n,a=e.width,o=e.height,s=tS(a*i),l=tS(o*r);"sliceHack"===this.resizeType?n=this.sliceByTwo(t,a,o,s,l):"hermite"===this.resizeType?n=this.hermiteFastResize(t,a,o,s,l):"bilinear"===this.resizeType?n=this.bilinearFiltering(t,a,o,s,l):"lanczos"===this.resizeType&&(n=this.lanczosResize(t,a,o,s,l)),t.imageData=n},sliceByTwo:function(t,e,i,r,n){var a,o,s=t.imageData,l=!1,c=!1,h=.5*e,u=.5*i,f=tb.filterBackend.resources,d=0,g=0,p=e,v=0;for(f.sliceByTwo||(f.sliceByTwo=document.createElement("canvas")),((a=f.sliceByTwo).width<1.5*e||a.height<i)&&(a.width=1.5*e,a.height=i),(o=a.getContext("2d")).clearRect(0,0,1.5*e,i),o.putImageData(s,0,0),r=t_(r),n=t_(n);!l||!c;)e=h,i=u,r<t_(.5*h)?h=t_(.5*h):(h=r,l=!0),n<t_(.5*u)?u=t_(.5*u):(u=n,c=!0),o.drawImage(a,d,g,e,i,p,v,h,u),d=p,g=v,v+=u;return o.getImageData(d,g,r,n)},lanczosResize:function(t,e,i,r,n){var a=t.imageData.data,o=t.ctx.createImageData(r,n),s=o.data,l=this.lanczosCreate(this.lanczosLobes),c=this.rcpScaleX,h=this.rcpScaleY,u=2/this.rcpScaleX,f=2/this.rcpScaleY,d=tj(c*this.lanczosLobes/2),g=tj(h*this.lanczosLobes/2),p={},v={},m={};return function process(t){var y,b,x,_,C,w,S,T,j,k,O;for(y=0,v.x=(t+.5)*c,m.x=t_(v.x);y<n;y++){for(v.y=(y+.5)*h,m.y=t_(v.y),C=0,w=0,S=0,T=0,j=0,b=m.x-d;b<=m.x+d;b++)if(!(b<0)&&!(b>=e)){p[k=t_(1e3*tw(b-v.x))]||(p[k]={});for(var P=m.y-g;P<=m.y+g;P++)P<0||P>=i||(O=t_(1e3*tw(P-v.y)),p[k][O]||(p[k][O]=l(tC(tx(k*u,2)+tx(O*f,2))/1e3)),(x=p[k][O])>0&&(_=(P*e+b)*4,C+=x,w+=x*a[_],S+=x*a[_+1],T+=x*a[_+2],j+=x*a[_+3]))}s[_=(y*r+t)*4]=w/C,s[_+1]=S/C,s[_+2]=T/C,s[_+3]=j/C}return++t<r?process(t):o}(0)},bilinearFiltering:function(t,e,i,r,n){var a,o,s,l,c,h,u,f,d,g,p=0,v=this.rcpScaleX,m=this.rcpScaleY,y=4*(e-1),b=t.imageData.data,x=t.ctx.createImageData(r,n),_=x.data;for(l=0;l<n;l++)for(c=0;c<r;c++)for(f=0,o=t_(v*c),s=t_(m*l),h=v*c-o,u=m*l-s,g=4*(s*e+o);f<4;f++)a=b[g+f],d=a*(1-h)*(1-u)+b[g+4+f]*h*(1-u)+b[g+y+f]*u*(1-h)+b[g+y+4+f]*h*u,_[p++]=d;return x},hermiteFastResize:function(t,e,i,r,n){for(var a=this.rcpScaleX,o=this.rcpScaleY,s=tj(a/2),l=tj(o/2),c=t.imageData.data,h=t.ctx.createImageData(r,n),u=h.data,f=0;f<n;f++)for(var d=0;d<r;d++){for(var g=(d+f*r)*4,p=0,v=0,m=0,y=0,b=0,x=0,_=0,C=(f+.5)*o,w=t_(f*o);w<(f+1)*o;w++)for(var S=tw(C-(w+.5))/l,T=(d+.5)*a,j=S*S,k=t_(d*a);k<(d+1)*a;k++){var O=tw(T-(k+.5))/s,P=tC(j+O*O);P>1&&P<-1||!((p=2*P*P*P-3*P*P+1)>0)||(_+=p*c[(O=4*(k+w*e))+3],m+=p,c[O+3]<255&&(p=p*c[O+3]/250),y+=p*c[O],b+=p*c[O+1],x+=p*c[O+2],v+=p)}u[g]=y/v,u[g+1]=b/v,u[g+2]=x/v,u[g+3]=_/m}return h},toObject:function(){return{type:this.type,scaleX:this.scaleX,scaleY:this.scaleY,resizeType:this.resizeType,lanczosLobes:this.lanczosLobes}}}),tb.Image.filters.Resize.fromObject=tb.Image.filters.BaseFilter.fromObject,tF=(tP=e.fabric||(e.fabric={})).Image.filters,tE=tP.util.createClass,tF.Contrast=tE(tF.BaseFilter,{type:"Contrast",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uContrast;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat contrastF = 1.015 * (uContrast + 1.0) / (1.0 * (1.015 - uContrast));\ncolor.rgb = contrastF * (color.rgb - 0.5) + 0.5;\ngl_FragColor = color;\n}",contrast:0,mainParameter:"contrast",applyTo2d:function(t){if(0!==this.contrast){var e,i,r=t.imageData.data,i=r.length,n=Math.floor(255*this.contrast),a=259*(n+255)/(255*(259-n));for(e=0;e<i;e+=4)r[e]=a*(r[e]-128)+128,r[e+1]=a*(r[e+1]-128)+128,r[e+2]=a*(r[e+2]-128)+128}},getUniformLocations:function(t,e){return{uContrast:t.getUniformLocation(e,"uContrast")}},sendUniformData:function(t,e){t.uniform1f(e.uContrast,this.contrast)}}),tP.Image.filters.Contrast.fromObject=tP.Image.filters.BaseFilter.fromObject,tM=(tD=e.fabric||(e.fabric={})).Image.filters,tA=tD.util.createClass,tM.Saturation=tA(tM.BaseFilter,{type:"Saturation",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform float uSaturation;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nfloat rgMax = max(color.r, color.g);\nfloat rgbMax = max(rgMax, color.b);\ncolor.r += rgbMax != color.r ? (rgbMax - color.r) * uSaturation : 0.00;\ncolor.g += rgbMax != color.g ? (rgbMax - color.g) * uSaturation : 0.00;\ncolor.b += rgbMax != color.b ? (rgbMax - color.b) * uSaturation : 0.00;\ngl_FragColor = color;\n}",saturation:0,mainParameter:"saturation",applyTo2d:function(t){if(0!==this.saturation){var e,i,r=t.imageData.data,n=r.length,a=-this.saturation;for(e=0;e<n;e+=4)i=Math.max(r[e],r[e+1],r[e+2]),r[e]+=i!==r[e]?(i-r[e])*a:0,r[e+1]+=i!==r[e+1]?(i-r[e+1])*a:0,r[e+2]+=i!==r[e+2]?(i-r[e+2])*a:0}},getUniformLocations:function(t,e){return{uSaturation:t.getUniformLocation(e,"uSaturation")}},sendUniformData:function(t,e){t.uniform1f(e.uSaturation,-this.saturation)}}),tD.Image.filters.Saturation.fromObject=tD.Image.filters.BaseFilter.fromObject,tL=(tI=e.fabric||(e.fabric={})).Image.filters,tB=tI.util.createClass,tL.Blur=tB(tL.BaseFilter,{type:"Blur",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec2 uDelta;\nvarying vec2 vTexCoord;\nconst float nSamples = 15.0;\nvec3 v3offset = vec3(12.9898, 78.233, 151.7182);\nfloat random(vec3 scale) {\nreturn fract(sin(dot(gl_FragCoord.xyz, scale)) * 43758.5453);\n}\nvoid main() {\nvec4 color = vec4(0.0);\nfloat total = 0.0;\nfloat offset = random(v3offset);\nfor (float t = -nSamples; t <= nSamples; t++) {\nfloat percent = (t + offset - 0.5) / nSamples;\nfloat weight = 1.0 - abs(percent);\ncolor += texture2D(uTexture, vTexCoord + uDelta * percent) * weight;\ntotal += weight;\n}\ngl_FragColor = color / total;\n}",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 e,i,r=t.filterBackend.resources,n=t.imageData.width,a=t.imageData.height;r.blurLayer1||(r.blurLayer1=tI.util.createCanvasElement(),r.blurLayer2=tI.util.createCanvasElement()),e=r.blurLayer1,i=r.blurLayer2,(e.width!==n||e.height!==a)&&(i.width=e.width=n,i.height=e.height=a);var o,s,l,c,h=e.getContext("2d"),u=i.getContext("2d"),f=.03*this.blur;for(h.putImageData(t.imageData,0,0),u.clearRect(0,0,n,a),c=-15;c<=15;c++)o=(Math.random()-.5)/4,l=f*(s=c/15)*n+o,u.globalAlpha=1-Math.abs(s),u.drawImage(e,l,o),h.drawImage(i,0,0),u.globalAlpha=1,u.clearRect(0,0,i.width,i.height);for(c=-15;c<=15;c++)o=(Math.random()-.5)/4,l=f*(s=c/15)*a+o,u.globalAlpha=1-Math.abs(s),u.drawImage(e,o,l),h.drawImage(i,0,0),u.globalAlpha=1,u.clearRect(0,0,i.width,i.height);t.ctx.drawImage(e,0,0);var d=t.ctx.getImageData(0,0,e.width,e.height);return h.globalAlpha=1,h.clearRect(0,0,e.width,e.height),d},getUniformLocations:function(t,e){return{delta:t.getUniformLocation(e,"uDelta")}},sendUniformData:function(t,e){var i=this.chooseRightDelta();t.uniform2fv(e.delta,i)},chooseRightDelta:function(){var t,e=1,i=[0,0];return this.horizontal?this.aspectRatio>1&&(e=1/this.aspectRatio):this.aspectRatio<1&&(e=this.aspectRatio),t=e*this.blur*.12,this.horizontal?i[0]=t:i[1]=t,i}}),tL.Blur.fromObject=tI.Image.filters.BaseFilter.fromObject,tX=(tR=e.fabric||(e.fabric={})).Image.filters,tW=tR.util.createClass,tX.Gamma=tW(tX.BaseFilter,{type:"Gamma",fragmentSource:"precision highp float;\nuniform sampler2D uTexture;\nuniform vec3 uGamma;\nvarying vec2 vTexCoord;\nvoid main() {\nvec4 color = texture2D(uTexture, vTexCoord);\nvec3 correction = (1.0 / uGamma);\ncolor.r = pow(color.r, correction.r);\ncolor.g = pow(color.g, correction.g);\ncolor.b = pow(color.b, correction.b);\ngl_FragColor = color;\ngl_FragColor.rgb *= color.a;\n}",gamma:[1,1,1],mainParameter:"gamma",initialize:function(t){this.gamma=[1,1,1],tX.BaseFilter.prototype.initialize.call(this,t)},applyTo2d:function(t){var e,i=t.imageData.data,r=this.gamma,n=i.length,a=1/r[0],o=1/r[1],s=1/r[2];for(this.rVals||(this.rVals=new Uint8Array(256),this.gVals=new Uint8Array(256),this.bVals=new Uint8Array(256)),e=0,n=256;e<n;e++)this.rVals[e]=255*Math.pow(e/255,a),this.gVals[e]=255*Math.pow(e/255,o),this.bVals[e]=255*Math.pow(e/255,s);for(e=0,n=i.length;e<n;e+=4)i[e]=this.rVals[i[e]],i[e+1]=this.gVals[i[e+1]],i[e+2]=this.bVals[i[e+2]]},getUniformLocations:function(t,e){return{uGamma:t.getUniformLocation(e,"uGamma")}},sendUniformData:function(t,e){t.uniform3fv(e.uGamma,this.gamma)}}),tR.Image.filters.Gamma.fromObject=tR.Image.filters.BaseFilter.fromObject,tz=(tY=e.fabric||(e.fabric={})).Image.filters,tU=tY.util.createClass,tz.Composed=tU(tz.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(e){e.applyTo(t)})},toObject:function(){return tY.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()})}}),tY.Image.filters.Composed.fromObject=function(t,e){var i=(t.subFilters||[]).map(function(t){return new tY.Image.filters[t.type](t)}),r=new tY.Image.filters.Composed({subFilters:i});return e&&e(r),r},tN=(tH=e.fabric||(e.fabric={})).Image.filters,tV=tH.util.createClass,tN.HueRotation=tV(tN.ColorMatrix,{type:"HueRotation",rotation:0,mainParameter:"rotation",calculateMatrix:function(){var t=this.rotation*Math.PI,e=tH.util.cos(t),i=tH.util.sin(t),r=1/3,n=Math.sqrt(1/3)*i,a=1-e;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]=e+a/3,this.matrix[1]=r*a-n,this.matrix[2]=r*a+n,this.matrix[5]=r*a+n,this.matrix[6]=e+r*a,this.matrix[7]=r*a-n,this.matrix[10]=r*a-n,this.matrix[11]=r*a+n,this.matrix[12]=e+r*a},isNeutralState:function(t){return this.calculateMatrix(),tN.BaseFilter.prototype.isNeutralState.call(this,t)},applyTo:function(t){this.calculateMatrix(),tN.BaseFilter.prototype.applyTo.call(this,t)}}),tH.Image.filters.HueRotation.fromObject=tH.Image.filters.BaseFilter.fromObject,function(t){"use strict";var e=t.fabric||(t.fabric={}),i=e.util.object.clone;if(e.Text){e.warn("fabric.Text is already defined");return}var r="fontFamily fontWeight fontSize text underline overline linethrough textAlign fontStyle lineHeight textBackgroundColor charSpacing styles direction path pathStartOffset pathSide pathAlign".split(" ");e.Text=e.util.createClass(e.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:e.Object.prototype.stateProperties.concat(r),cacheProperties:e.Object.prototype.cacheProperties.concat(r),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,e){this.styles=e&&e.styles||{},this.text=t,this.__skipDimension=!0,this.callSuper("initialize",e),this.path&&this.setPathInfo(),this.__skipDimension=!1,this.initDimensions(),this.setCoords(),this.setupState({propertySet:"_dimensionAffectingProps"})},setPathInfo:function(){var t=this.path;t&&(t.segmentsInfo=e.util.getPathSegmentsInfo(t.path))},getMeasuringContext:function(){return e._measuringContext||(e._measuringContext=this.canvas&&this.canvas.contextCache||e.util.createCanvasElement().getContext("2d")),e._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()),-1!==this.textAlign.indexOf("justify")&&this.enlargeSpaces(),this.saveState({propertySet:"_dimensionAffectingProps"}))},enlargeSpaces:function(){for(var t,e,i,r,n,a,o,s=0,l=this._textLines.length;s<l;s++)if(!("justify"!==this.textAlign&&(s===l-1||this.isEndOfWrapping(s)))&&(r=0,n=this._textLines[s],(e=this.getLineWidth(s))<this.width&&(o=this.textLines[s].match(this._reSpacesAndTabs)))){i=o.length,t=(this.width-e)/i;for(var c=0,h=n.length;c<=h;c++)a=this.__charBounds[s][c],this._reSpaceAndTab.test(n[c])?(a.width+=t,a.kernedWidth+=t,a.left+=r,r+=t):a.left+=r}},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"),e=this.fontSize;return t.width+=e*t.zoomX,t.height+=e*t.zoomY,t},_render:function(t){var e=this.path;e&&!e.isNotVisible()&&e._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){"stroke"===this.paintFirst?(this._renderTextStroke(t),this._renderTextFill(t)):(this._renderTextFill(t),this._renderTextStroke(t))},_setTextStyles:function(t,e,i){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"}t.font=this._getFontDeclaration(e,i)},calcTextWidth:function(){for(var t=this.getLineWidth(0),e=1,i=this._textLines.length;e<i;e++){var r=this.getLineWidth(e);r>t&&(t=r)}return t},_renderTextLine:function(t,e,i,r,n,a){this._renderChars(t,e,i,r,n,a)},_renderTextLinesBackground:function(t){if(this.textBackgroundColor||this.styleHas("textBackgroundColor")){for(var e,i,r,n,a,o,s,l=t.fillStyle,c=this._getLeftOffset(),h=this._getTopOffset(),u=0,f=0,d=this.path,g=0,p=this._textLines.length;g<p;g++){if(e=this.getHeightOfLine(g),!this.textBackgroundColor&&!this.styleHas("textBackgroundColor",g)){h+=e;continue}r=this._textLines[g],i=this._getLineLeftOffset(g),f=0,u=0,n=this.getValueOfPropertyAt(g,0,"textBackgroundColor");for(var v=0,m=r.length;v<m;v++)a=this.__charBounds[g][v],o=this.getValueOfPropertyAt(g,v,"textBackgroundColor"),d?(t.save(),t.translate(a.renderLeft,a.renderTop),t.rotate(a.angle),t.fillStyle=o,o&&t.fillRect(-a.width/2,-e/this.lineHeight*(1-this._fontSizeFraction),a.width,e/this.lineHeight),t.restore()):o!==n?(s=c+i+u,"rtl"===this.direction&&(s=this.width-s-f),t.fillStyle=n,n&&t.fillRect(s,h,f,e/this.lineHeight),u=a.left,f=a.width,n=o):f+=a.kernedWidth;o&&!d&&(s=c+i+u,"rtl"===this.direction&&(s=this.width-s-f),t.fillStyle=o,t.fillRect(s,h,f,e/this.lineHeight)),h+=e}t.fillStyle=l,this._removeShadow(t)}},getFontCache:function(t){var i=t.fontFamily.toLowerCase();e.charWidthsCache[i]||(e.charWidthsCache[i]={});var r=e.charWidthsCache[i],n=t.fontStyle.toLowerCase()+"_"+(t.fontWeight+"").toLowerCase();return r[n]||(r[n]={}),r[n]},_measureChar:function(t,e,i,r){var n,a,o,s,l=this.getFontCache(e),c=this._getFontDeclaration(e),h=this._getFontDeclaration(r),u=i+t,f=c===h,d=e.fontSize/this.CACHE_FONT_SIZE;if(i&&void 0!==l[i]&&(o=l[i]),void 0!==l[t]&&(s=n=l[t]),f&&void 0!==l[u]&&(s=(a=l[u])-o),void 0===n||void 0===o||void 0===a){var g=this.getMeasuringContext();this._setTextStyles(g,e,!0)}return void 0===n&&(s=n=g.measureText(t).width,l[t]=n),void 0===o&&f&&i&&(o=g.measureText(i).width,l[i]=o),f&&void 0===a&&(a=g.measureText(u).width,l[u]=a,s=a-o),{width:n*d,kernedWidth:s*d}},getHeightOfChar:function(t,e){return this.getValueOfPropertyAt(t,e,"fontSize")},measureLine:function(t){var e=this._measureLine(t);return 0!==this.charSpacing&&(e.width-=this._getWidthOfCharSpacing()),e.width<0&&(e.width=0),e},_measureLine:function(t){var i,r,n,a,o,s,l=0,c=this._textLines[t],h=Array(c.length),u=0,f=this.path,d="right"===this.pathSide;for(i=0,this.__charBounds[t]=h;i<c.length;i++)r=c[i],a=this._getGraphemeBox(r,t,i,n),h[i]=a,l+=a.kernedWidth,n=r;if(h[i]={left:a?a.left+a.width:0,width:0,kernedWidth:0,height:this.fontSize},f){switch(s=f.segmentsInfo[f.segmentsInfo.length-1].length,o=e.util.getPointOnPath(f.path,0,f.segmentsInfo),o.x+=f.pathOffset.x,o.y+=f.pathOffset.y,this.textAlign){case"left":u=d?s-l:0;break;case"center":u=(s-l)/2;break;case"right":u=d?0:s-l}for(u+=this.pathStartOffset*(d?-1:1),i=d?c.length-1:0;d?i>=0:i<c.length;d?i--:i++)a=h[i],u>s?u%=s:u<0&&(u+=s),this._setGraphemeOnPath(u,a,o),u+=a.kernedWidth}return{width:l,numOfSpaces:0}},_setGraphemeOnPath:function(t,i,r){var n=t+i.kernedWidth/2,a=this.path,o=e.util.getPointOnPath(a.path,n,a.segmentsInfo);i.renderLeft=o.x-r.x,i.renderTop=o.y-r.y,i.angle=o.angle+("right"===this.pathSide?Math.PI:0)},_getGraphemeBox:function(t,e,i,r,n){var a,o=this.getCompleteStyleDeclaration(e,i),s=r?this.getCompleteStyleDeclaration(e,i-1):{},l=this._measureChar(t,o,r,s),c=l.kernedWidth,h=l.width;0!==this.charSpacing&&(h+=a=this._getWidthOfCharSpacing(),c+=a);var u={width:h,left:0,height:o.fontSize,kernedWidth:c,deltaY:o.deltaY};if(i>0&&!n){var f=this.__charBounds[e][i-1];u.left=f.left+f.width+l.kernedWidth-l.width}return u},getHeightOfLine:function(t){if(this.__lineHeights[t])return this.__lineHeights[t];for(var e=this._textLines[t],i=this.getHeightOfChar(t,0),r=1,n=e.length;r<n;r++)i=Math.max(this.getHeightOfChar(t,r),i);return this.__lineHeights[t]=i*this.lineHeight*this._fontSizeMult},calcTextHeight:function(){for(var t,e=0,i=0,r=this._textLines.length;i<r;i++)t=this.getHeightOfLine(i),e+=i===r-1?t/this.lineHeight:t;return e},_getLeftOffset:function(){return"ltr"===this.direction?-this.width/2:this.width/2},_getTopOffset:function(){return-this.height/2},_renderTextCommon:function(t,e){t.save();for(var i=0,r=this._getLeftOffset(),n=this._getTopOffset(),a=0,o=this._textLines.length;a<o;a++){var s=this.getHeightOfLine(a),l=s/this.lineHeight,c=this._getLineLeftOffset(a);this._renderTextLine(e,t,this._textLines[a],r+c,n+i+l,a),i+=s}t.restore()},_renderTextFill:function(t){(this.fill||this.styleHas("fill"))&&this._renderTextCommon(t,"fillText")},_renderTextStroke:function(t){(!this.stroke||0===this.strokeWidth)&&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,i,r,n,a,o){var s,l,c,h,u,f=this.getHeightOfLine(o),d=-1!==this.textAlign.indexOf("justify"),g="",p=0,v=this.path,m=!d&&0===this.charSpacing&&this.isEmptyStyles(o)&&!v,y="ltr"===this.direction,b="ltr"===this.direction?1:-1,x=i.canvas.getAttribute("dir");if(i.save(),x!==this.direction&&(i.canvas.setAttribute("dir",y?"ltr":"rtl"),i.direction=y?"ltr":"rtl",i.textAlign=y?"left":"right"),a-=f*this._fontSizeFraction/this.lineHeight,m){this._renderChar(t,i,o,0,r.join(""),n,a,f),i.restore();return}for(var _=0,C=r.length-1;_<=C;_++)h=_===C||this.charSpacing||v,g+=r[_],c=this.__charBounds[o][_],0===p?(n+=b*(c.kernedWidth-c.width),p+=c.width):p+=c.kernedWidth,d&&!h&&this._reSpaceAndTab.test(r[_])&&(h=!0),h||(s=s||this.getCompleteStyleDeclaration(o,_),l=this.getCompleteStyleDeclaration(o,_+1),h=e.util.hasStyleChanged(s,l,!1)),h&&(v?(i.save(),i.translate(c.renderLeft,c.renderTop),i.rotate(c.angle),this._renderChar(t,i,o,_,g,-p/2,0,f),i.restore()):(u=n,this._renderChar(t,i,o,_,g,u,a,f)),g="",s=l,n+=b*p,p=0);i.restore()},_applyPatternGradientTransformText:function(t){var i,r=e.util.createCanvasElement(),n=this.width+this.strokeWidth,a=this.height+this.strokeWidth;return r.width=n,r.height=a,(i=r.getContext("2d")).beginPath(),i.moveTo(0,0),i.lineTo(n,0),i.lineTo(n,a),i.lineTo(0,a),i.closePath(),i.translate(n/2,a/2),i.fillStyle=t.toLive(i),this._applyPatternGradientTransform(i,t),i.fill(),i.createPattern(r,"no-repeat")},handleFiller:function(t,e,i){var r,n;return i.toLive?"percentage"===i.gradientUnits||i.gradientTransform||i.patternTransform?(r=-this.width/2,n=-this.height/2,t.translate(r,n),t[e]=this._applyPatternGradientTransformText(i),{offsetX:r,offsetY:n}):(t[e]=i.toLive(t,this),this._applyPatternGradientTransform(t,i)):(t[e]=i,{offsetX:0,offsetY:0})},_setStrokeStyles:function(t,e){return t.lineWidth=e.strokeWidth,t.lineCap=this.strokeLineCap,t.lineDashOffset=this.strokeDashOffset,t.lineJoin=this.strokeLineJoin,t.miterLimit=this.strokeMiterLimit,this.handleFiller(t,"strokeStyle",e.stroke)},_setFillStyles:function(t,e){return this.handleFiller(t,"fillStyle",e.fill)},_renderChar:function(t,e,i,r,n,a,o){var s,l,c=this._getStyleDeclaration(i,r),h=this.getCompleteStyleDeclaration(i,r),u="fillText"===t&&h.fill,f="strokeText"===t&&h.stroke&&h.strokeWidth;(f||u)&&(e.save(),u&&(s=this._setFillStyles(e,h)),f&&(l=this._setStrokeStyles(e,h)),e.font=this._getFontDeclaration(h),c&&c.textBackgroundColor&&this._removeShadow(e),c&&c.deltaY&&(o+=c.deltaY),u&&e.fillText(n,a-s.offsetX,o-s.offsetY),f&&e.strokeText(n,a-l.offsetX,o-l.offsetY),e.restore())},setSuperscript:function(t,e){return this._setScript(t,e,this.superscript)},setSubscript:function(t,e){return this._setScript(t,e,this.subscript)},_setScript:function(t,e,i){var r=this.get2DCursorLocation(t,!0),n=this.getValueOfPropertyAt(r.lineIndex,r.charIndex,"fontSize"),a=this.getValueOfPropertyAt(r.lineIndex,r.charIndex,"deltaY"),o={fontSize:n*i.size,deltaY:a+n*i.baseline};return this.setSelectionStyles(o,t,e),this},_getLineLeftOffset:function(t){var e,i=this.getLineWidth(t),r=this.width-i,n=this.textAlign,a=this.direction,o=0,e=this.isEndOfWrapping(t);return"justify"!==n&&("justify-center"!==n||e)&&("justify-right"!==n||e)&&("justify-left"!==n||e)?("center"===n&&(o=r/2),"right"===n&&(o=r),"justify-center"===n&&(o=r/2),"justify-right"===n&&(o=r),"rtl"===a&&(o-=r),o):0},_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(void 0!==this.__lineWidths[t])return this.__lineWidths[t];var e=this.measureLine(t).width;return this.__lineWidths[t]=e,e},_getWidthOfCharSpacing:function(){return 0!==this.charSpacing?this.fontSize*this.charSpacing/1e3:0},getValueOfPropertyAt:function(t,e,i){var r=this._getStyleDeclaration(t,e);return r&&void 0!==r[i]?r[i]:this[i]},_renderTextDecoration:function(t,e){if(this[e]||this.styleHas(e)){for(var i,r,n,a,o,s,l,c,h,u,f,d,g,p,v,m,y=this._getLeftOffset(),b=this._getTopOffset(),x=this.path,_=this._getWidthOfCharSpacing(),C=this.offsets[e],w=0,S=this._textLines.length;w<S;w++){if(i=this.getHeightOfLine(w),!this[e]&&!this.styleHas(e,w)){b+=i;continue}l=this._textLines[w],p=i/this.lineHeight,a=this._getLineLeftOffset(w),u=0,f=0,c=this.getValueOfPropertyAt(w,0,e),m=this.getValueOfPropertyAt(w,0,"fill"),h=b+p*(1-this._fontSizeFraction),r=this.getHeightOfChar(w,0),o=this.getValueOfPropertyAt(w,0,"deltaY");for(var T=0,j=l.length;T<j;T++)if(d=this.__charBounds[w][T],g=this.getValueOfPropertyAt(w,T,e),v=this.getValueOfPropertyAt(w,T,"fill"),n=this.getHeightOfChar(w,T),s=this.getValueOfPropertyAt(w,T,"deltaY"),x&&g&&v)t.save(),t.fillStyle=m,t.translate(d.renderLeft,d.renderTop),t.rotate(d.angle),t.fillRect(-d.kernedWidth/2,C*n+s,d.kernedWidth,this.fontSize/15),t.restore();else if((g!==c||v!==m||n!==r||s!==o)&&f>0){var k=y+a+u;"rtl"===this.direction&&(k=this.width-k-f),c&&m&&(t.fillStyle=m,t.fillRect(k,h+C*r+o,f,this.fontSize/15)),u=d.left,f=d.width,c=g,m=v,r=n,o=s}else f+=d.kernedWidth;var k=y+a+u;"rtl"===this.direction&&(k=this.width-k-f),t.fillStyle=v,g&&v&&t.fillRect(k,h+C*r+o,f-_,this.fontSize/15),b+=i}this._removeShadow(t)}},_getFontDeclaration:function(t,i){var r=t||this,n=this.fontFamily,a=e.Text.genericFonts.indexOf(n.toLowerCase())>-1,o=void 0===n||n.indexOf("'")>-1||n.indexOf(",")>-1||n.indexOf('"')>-1||a?r.fontFamily:'"'+r.fontFamily+'"';return[e.isLikelyNode?r.fontWeight:r.fontStyle,e.isLikelyNode?r.fontStyle:r.fontWeight,i?this.CACHE_FONT_SIZE+"px":r.fontSize+"px",o].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 i=t.split(this._reNewline),r=Array(i.length),n=["\n"],a=[],o=0;o<i.length;o++)r[o]=e.util.string.graphemeSplit(i[o]),a=a.concat(r[o],n);return a.pop(),{_unwrappedLines:r,lines:i,graphemeText:a,graphemeLines:r}},toObject:function(t){var i=r.concat(t),n=this.callSuper("toObject",i);return n.styles=e.util.stylesToArray(this.styles,this.text),n.path&&(n.path=this.path.toObject()),n},set:function(t,e){this.callSuper("set",t,e);var i=!1,r=!1;if("object"==typeof t)for(var n in t)"path"===n&&this.setPathInfo(),i=i||-1!==this._dimensionAffectingProps.indexOf(n),r=r||"path"===n;else i=-1!==this._dimensionAffectingProps.indexOf(t),r="path"===t;return r&&this.setPathInfo(),i&&(this.initDimensions(),this.setCoords()),this},complexity:function(){return 1}}),e.Text.fromObject=function(t,r){var n=i(t),a=t.path;return delete n.path,e.Object._fromObject("Text",n,function(i){i.styles=e.util.stylesFromArray(t.styles,t.text),a?e.Object._fromObject("Path",a,function(t){i.set("path",t),r(i)},"path"):r(i)},"text")},e.Text.genericFonts=["sans-serif","serif","cursive","fantasy","monospace"],e.util.createAccessors&&e.util.createAccessors(e.Text)}(e),tQ.util.object.extend(tQ.Text.prototype,{isEmptyStyles:function(t){if(!this.styles||void 0!==t&&!this.styles[t])return!0;var e=void 0===t?this.styles:{line:this.styles[t]};for(var i in e)for(var r in e[i])for(var n in e[i][r])return!1;return!0},styleHas:function(t,e){if(!this.styles||!t||""===t||void 0!==e&&!this.styles[e])return!1;var i=void 0===e?this.styles:{0:this.styles[e]};for(var r in i)for(var n in i[r])if(void 0!==i[r][n][t])return!0;return!1},cleanStyle:function(t){if(!this.styles||!t||""===t)return!1;var e,i,r,n=this.styles,a=0,o=!0,s=0;for(var l in n){for(var c in e=0,n[l]){var r=n[l][c],h=r.hasOwnProperty(t);a++,h?(i?r[t]!==i&&(o=!1):i=r[t],r[t]===this[t]&&delete r[t]):o=!1,0!==Object.keys(r).length?e++:delete n[l][c]}0===e&&delete n[l]}for(var u=0;u<this._textLines.length;u++)s+=this._textLines[u].length;o&&a===s&&(this[t]=i,this.removeStyle(t))},removeStyle:function(t){if(this.styles&&t&&""!==t){var e,i,r,n=this.styles;for(i in n){for(r in e=n[i])delete e[r][t],0===Object.keys(e[r]).length&&delete e[r];0===Object.keys(e).length&&delete n[i]}}},_extendStyles:function(t,e){var i=this.get2DCursorLocation(t);this._getLineStyle(i.lineIndex)||this._setLineStyle(i.lineIndex),this._getStyleDeclaration(i.lineIndex,i.charIndex)||this._setStyleDeclaration(i.lineIndex,i.charIndex,{}),tQ.util.object.extend(this._getStyleDeclaration(i.lineIndex,i.charIndex),e)},get2DCursorLocation:function(t,e){void 0===t&&(t=this.selectionStart);for(var i=e?this._unwrappedTextLines:this._textLines,r=i.length,n=0;n<r;n++){if(t<=i[n].length)return{lineIndex:n,charIndex:t};t-=i[n].length+this.missingNewlineOffset(n)}return{lineIndex:n-1,charIndex:i[n-1].length<t?i[n-1].length:t}},getSelectionStyles:function(t,e,i){void 0===t&&(t=this.selectionStart||0),void 0===e&&(e=this.selectionEnd||t);for(var r=[],n=t;n<e;n++)r.push(this.getStyleAtPosition(n,i));return r},getStyleAtPosition:function(t,e){var i=this.get2DCursorLocation(t);return(e?this.getCompleteStyleDeclaration(i.lineIndex,i.charIndex):this._getStyleDeclaration(i.lineIndex,i.charIndex))||{}},setSelectionStyles:function(t,e,i){void 0===e&&(e=this.selectionStart||0),void 0===i&&(i=this.selectionEnd||e);for(var r=e;r<i;r++)this._extendStyles(r,t);return this._forceClearCache=!0,this},_getStyleDeclaration:function(t,e){var i=this.styles&&this.styles[t];return i?i[e]:null},getCompleteStyleDeclaration:function(t,e){for(var i,r=this._getStyleDeclaration(t,e)||{},n={},a=0;a<this._styleProperties.length;a++)n[i=this._styleProperties[a]]=void 0===r[i]?this[i]:r[i];return n},_setStyleDeclaration:function(t,e,i){this.styles[t][e]=i},_deleteStyleDeclaration:function(t,e){delete this.styles[t][e]},_getLineStyle:function(t){return!!this.styles[t]},_setLineStyle:function(t){this.styles[t]={}},_deleteLineStyle:function(t){delete this.styles[t]}}),function(){var t=tQ.controlsUtils,e=t.scaleSkewCursorStyleHandler,i=t.scaleCursorStyleHandler,r=t.scalingEqually,n=t.scalingYOrSkewingX,a=t.scalingXOrSkewingY,o=t.scaleOrSkewActionName,s=tQ.Object.prototype.controls;if(s.ml=new tQ.Control({x:-.5,y:0,cursorStyleHandler:e,actionHandler:a,getActionName:o}),s.mr=new tQ.Control({x:.5,y:0,cursorStyleHandler:e,actionHandler:a,getActionName:o}),s.mb=new tQ.Control({x:0,y:.5,cursorStyleHandler:e,actionHandler:n,getActionName:o}),s.mt=new tQ.Control({x:0,y:-.5,cursorStyleHandler:e,actionHandler:n,getActionName:o}),s.tl=new tQ.Control({x:-.5,y:-.5,cursorStyleHandler:i,actionHandler:r}),s.tr=new tQ.Control({x:.5,y:-.5,cursorStyleHandler:i,actionHandler:r}),s.bl=new tQ.Control({x:-.5,y:.5,cursorStyleHandler:i,actionHandler:r}),s.br=new tQ.Control({x:.5,y:.5,cursorStyleHandler:i,actionHandler:r}),s.mtr=new tQ.Control({x:0,y:-.5,actionHandler:t.rotationWithSnapping,cursorStyleHandler:t.rotationStyleHandler,offsetY:-40,withConnection:!0,actionName:"rotate"}),tQ.Textbox){var l=tQ.Textbox.prototype.controls={};l.mtr=s.mtr,l.tr=s.tr,l.br=s.br,l.tl=s.tl,l.bl=s.bl,l.mt=s.mt,l.mb=s.mb,l.mr=new tQ.Control({x:.5,y:0,actionHandler:t.changeWidth,cursorStyleHandler:e,actionName:"resizing"}),l.ml=new tQ.Control({x:-.5,y:0,actionHandler:t.changeWidth,cursorStyleHandler:e,actionName:"resizing"})}}(),tQ.Object.ENLIVEN_PROPS.push("eraser"),tG=tQ.Object.prototype._drawClipPath,tq=tQ.Object.prototype.needsItsOwnCache,tK=tQ.Object.prototype.toObject,tQ.Object.prototype.getSvgCommons,tQ.Object.prototype._createBaseClipPathSVGMarkup,tQ.Object.prototype._createBaseSVGMarkup,tQ.Object.prototype.cacheProperties.push("eraser"),tQ.Object.prototype.stateProperties.push("eraser"),tQ.util.object.extend(tQ.Object.prototype,{erasable:!0,eraser:void 0,needsItsOwnCache:function(){return tq.call(this)||!!this.eraser},_drawClipPath:function(t,e){if(tG.call(this,t,e),this.eraser){var i=this._getNonTransformedDimensions();this.eraser.isType("eraser")&&this.eraser.set({width:i.x,height:i.y}),tG.call(this,t,this.eraser)}},toObject:function(t){var e=tK.call(this,["erasable"].concat(t));return this.eraser&&!this.eraser.excludeFromExport&&(e.eraser=this.eraser.toObject(t)),e}}),tJ=tQ.Group.prototype._restoreObjectsState,tQ.util.object.extend(tQ.Group.prototype,{_addEraserPathToObjects:function(t){this._objects.forEach(function(e){tQ.EraserBrush.prototype._addPathToObjectEraser.call(tQ.EraserBrush.prototype,e,t)})},applyEraserToObjects:function(){var t=this,e=this.eraser;if(e){delete this.eraser;var i=t.calcTransformMatrix();e.clone(function(e){var r=t.clipPath;e.getObjects("path").forEach(function(e){var n=tQ.util.multiplyTransformMatrices(i,e.calcTransformMatrix());tQ.util.applyTransformToObject(e,n),r?r.clone(function(r){var n=tQ.EraserBrush.prototype.applyClipPathToPath.call(tQ.EraserBrush.prototype,e,r,i);t._addEraserPathToObjects(n)},["absolutePositioned","inverted"]):t._addEraserPathToObjects(e)})})}},_restoreObjectsState:function(){return!0===this.erasable&&this.applyEraserToObjects(),tJ.call(this)}}),tQ.Eraser=tQ.util.createClass(tQ.Group,{type:"eraser",originX:"center",originY:"center",drawObject:function(t){t.save(),t.fillStyle="black",t.fillRect(-this.width/2,-this.height/2,this.width,this.height),t.restore(),this.callSuper("drawObject",t)},_getBounds:function(){}}),tQ.Eraser.fromObject=function(t,e){var i=t.objects;tQ.util.enlivenObjects(i,function(i){var r=tQ.util.object.clone(t,!0);delete r.objects,tQ.util.enlivenObjectEnlivables(t,r,function(){e&&e(new tQ.Eraser(i,r,!0))})})},tZ=tQ.Canvas.prototype._renderOverlay,tQ.util.object.extend(tQ.Canvas.prototype,{isErasing:function(){return this.isDrawingMode&&this.freeDrawingBrush&&"eraser"===this.freeDrawingBrush.type&&this.freeDrawingBrush._isErasing},_renderOverlay:function(t){tZ.call(this,t),this.isErasing()&&!this.freeDrawingBrush.inverted&&this.freeDrawingBrush._render()}}),tQ.EraserBrush=tQ.util.createClass(tQ.PencilBrush,{type:"eraser",inverted:!1,_isErasing:!1,_isErasable:function(t){return!1!==t.erasable},_prepareCollectionTraversal:function(t,e,i){t.forEachObject(function(r){r.forEachObject&&"deep"===r.erasable?this._prepareCollectionTraversal(r,e,i):!this.inverted&&r.erasable&&r.visible?(r.visible=!1,t.dirty=!0,i.visibility.push(r),i.collection.push(t)):this.inverted&&r.visible&&(r.erasable&&r.eraser?(r.eraser.inverted=!0,r.dirty=!0,t.dirty=!0,i.eraser.push(r)):(r.visible=!1,t.dirty=!0,i.visibility.push(r)),i.collection.push(t))},this)},preparePattern:function(){this._patternCanvas||(this._patternCanvas=tQ.util.createCanvasElement());var t=this._patternCanvas;t.width=this.canvas.width,t.height=this.canvas.height;var e=t.getContext("2d");if(this.canvas._isRetinaScaling()){var i=this.canvas.getRetinaScaling();this.canvas.__initRetinaScaling(i,t,e)}var r=this.canvas.backgroundImage,n=r&&this._isErasable(r),a=this.canvas.overlayImage,o=a&&this._isErasable(a);if(!this.inverted&&(r&&!n||this.canvas.backgroundColor))n&&(this.canvas.backgroundImage=void 0),this.canvas._renderBackground(e),n&&(this.canvas.backgroundImage=r);else if(this.inverted&&r&&n){var s=this.canvas.backgroundColor;this.canvas.backgroundColor=void 0,this.canvas._renderBackground(e),this.canvas.backgroundColor=s}e.save(),e.transform.apply(e,this.canvas.viewportTransform);var l={visibility:[],eraser:[],collection:[]};if(this._prepareCollectionTraversal(this.canvas,e,l),this.canvas._renderObjects(e,this.canvas._objects),l.visibility.forEach(function(t){t.visible=!0}),l.eraser.forEach(function(t){t.eraser.inverted=!1,t.dirty=!0}),l.collection.forEach(function(t){t.dirty=!0}),e.restore(),!this.inverted&&(a&&!o||this.canvas.overlayColor))o&&(this.canvas.overlayImage=void 0),tZ.call(this.canvas,e),o&&(this.canvas.overlayImage=a);else if(this.inverted&&a&&o){var s=this.canvas.overlayColor;this.canvas.overlayColor=void 0,tZ.call(this.canvas,e),this.canvas.overlayColor=s}},_setBrushStyles:function(t){this.callSuper("_setBrushStyles",t),t.strokeStyle="black"},_saveAndTransform:function(t){this.callSuper("_saveAndTransform",t),this._setBrushStyles(t),t.globalCompositeOperation=t===this.canvas.getContext()?"destination-out":"source-over"},needsFullRender:function(){return!0},onMouseDown:function(t,e){this.canvas._isMainEvent(e.e)&&(this._prepareForDrawing(t),this._captureDrawingPath(t),this.preparePattern(),this._isErasing=!0,this.canvas.fire("erasing:start"),this._render())},_render:function(){this.inverted||(t=this.canvas.getContext(),this.callSuper("_render",t)),t=this.canvas.contextTop,this.canvas.clearContext(t),this.callSuper("_render",t),t.save();var t,e=1/this.canvas.getRetinaScaling();t.scale(e,e),t.globalCompositeOperation="source-in",t.drawImage(this._patternCanvas,0,0),t.restore()},createPath:function(t){var e=this.callSuper("createPath",t);return e.globalCompositeOperation=this.inverted?"source-over":"destination-out",e.stroke=this.inverted?"white":"black",e},applyClipPathToPath:function(t,e,i){var r=tQ.util.invertTransform(t.calcTransformMatrix()),n=e.calcTransformMatrix(),a=e.absolutePositioned?r:tQ.util.multiplyTransformMatrices(r,i);return e.absolutePositioned=!1,tQ.util.applyTransformToObject(e,tQ.util.multiplyTransformMatrices(a,n)),t.clipPath=t.clipPath?tQ.util.mergeClipPaths(e,t.clipPath):e,t},clonePathWithClipPath:function(t,e,i){var r=e.calcTransformMatrix(),n=e.clipPath,a=this;t.clone(function(t){n.clone(function(e){i(a.applyClipPathToPath(t,e,r))},["absolutePositioned","inverted"])})},_addPathToObjectEraser:function(t,e){var i=this;if(t.forEachObject&&"deep"===t.erasable){var r=t._objects.filter(function(t){return t.erasable});r.length>0&&t.clipPath?this.clonePathWithClipPath(e,t,function(t){r.forEach(function(e){i._addPathToObjectEraser(e,t)})}):r.length>0&&r.forEach(function(t){i._addPathToObjectEraser(t,e)});return}var n=t.eraser;n||(n=new tQ.Eraser,t.eraser=n),e.clone(function(e){var r=tQ.util.multiplyTransformMatrices(tQ.util.invertTransform(t.calcTransformMatrix()),e.calcTransformMatrix());tQ.util.applyTransformToObject(e,r),n.addWithUpdate(e),t.set("dirty",!0),t.fire("erasing:end",{path:e}),t.group&&Array.isArray(i.__subTargets)&&i.__subTargets.push(t)})},applyEraserToCanvas:function(t){var e=this.canvas,i={};return["backgroundImage","overlayImage"].forEach(function(r){var n=e[r];n&&n.erasable&&(this._addPathToObjectEraser(n,t),i[r]=n)},this),i},_finalizeAndAddPath:function(){var t=this.canvas.contextTop,e=this.canvas;t.closePath(),this.decimate&&(this._points=this.decimatePoints(this._points,this.decimate)),e.clearContext(e.contextTop),this._isErasing=!1;var i=this._points&&this._points.length>1?this.convertPointsToSVGPath(this._points):null;if(!i||this._isEmptySVGPath(i)){e.fire("erasing:end"),e.requestRenderAll();return}var r=this.createPath(i);r.setCoords(),e.fire("before:path:created",{path:r});var n=this.applyEraserToCanvas(r),a=this;this.__subTargets=[];var o=[];e.forEachObject(function(t){t.erasable&&t.intersectsWithObject(r,!0,!0)&&(a._addPathToObjectEraser(t,r),o.push(t))}),e.fire("erasing:end",{path:r,targets:o,subTargets:this.__subTargets,drawables:n}),delete this.__subTargets,e.requestRenderAll(),this._resetShadow(),e.fire("path:created",{path:r})}})},6957:function(){},6907:function(){},4866:function(){}},function(t){t.O(0,[774,365,317,509,510,321,127,738,943,515,888,179],function(){return t(t.s=8312)}),_N_E=t.O()}]);
|
|
//# sourceMappingURL=index-3fa4416cd8b0abc2.js.map
|