(function(window){function Matrix(t){var e=this;e._t=e.transform,e.a=e.d=1,e.b=e.c=e.e=e.f=0,e.props=[1,0,0,1,0,0],e.cssParts=["matrix(","",")"],e.a1=e.b1=e.c1=e.d1=e.e1=e.f1=0,e.context=t,e.cos=e.sin=0,t&&t.setTransform(1,0,0,1,0,0)}function matrixManagerFunction(){var t=new Matrix,e=function(t,e,a,i,r,s,n,o,h){var l,m,p,d,c,u,f;return l=$M([[1,0,0,0],[0,Math.cos(t),Math.sin(-t),0],[0,Math.sin(t),Math.cos(t),0],[0,0,0,1]]),m=$M([[Math.cos(e),0,Math.sin(e),0],[0,1,0,0],[Math.sin(-e),0,Math.cos(e),0],[0,0,0,1]]),p=$M([[Math.cos(a),Math.sin(-a),0,0],[Math.sin(a),Math.cos(a),0,0],[0,0,1,0],[0,0,0,1]]),c=$M([[i,0,0,0],[0,r,0,0],[0,0,s,0],[0,0,0,1]]),u=l.x(m).x(p).x(c),u=u.transpose(),f=$M([[1,0,0,0],[0,1,0,0],[0,0,1,0],[n,o,h,1]]),u=u.x(f),d="matrix3d(",d+=u.e(1,1).toFixed(5)+","+u.e(1,2).toFixed(5)+","+u.e(1,3).toFixed(5)+","+u.e(1,4).toFixed(5)+",",d+=u.e(2,1).toFixed(5)+","+u.e(2,2).toFixed(5)+","+u.e(2,3).toFixed(5)+","+u.e(2,4).toFixed(5)+",",d+=u.e(3,1).toFixed(5)+","+u.e(3,2).toFixed(5)+","+u.e(3,3).toFixed(5)+","+u.e(3,4).toFixed(5)+",",d+=u.e(4,1).toFixed(5)+","+u.e(4,2).toFixed(5)+","+u.e(4,3).toFixed(5)+","+u.e(4,4).toFixed(5),d+=")"},a=function(e,a,i,r,s){return t.reset().translate(r,s).rotate(e).scale(a,i).toCSS()},i=function(e,a,i,r,s){return t.reset().translate(r,s).rotate(e).scale(a,i).toArray()},r=function(t){return a(t.r,t.s[0],t.s[1],t.p[0],t.p[1])},s=function(t,i){return i?e(-t.tr.r[0],t.tr.r[1],t.tr.r[2],t.tr.s[0],t.tr.s[1],t.tr.s[2],t.tr.p[0],t.tr.p[1],t.tr.p[2]):a(t.tr.r[2],t.tr.s[0],t.tr.s[1],t.tr.p[0],t.tr.p[1])},n=function(t,i){return i?e(-t.r[0],t.r[1],t.r[2],t.s[0],t.s[1],t.s[2],t.p[0],t.p[1],t.p[2]):a(t.r[2],t.s[0],t.s[1],t.p[0],t.p[1])},o=function(t,e){return e?null:i(t.r[2],t.s[0],t.s[1],t.p[0],t.p[1])};return{get2DMatrix:r,getMatrix:s,getMatrix2:n,getMatrixArray:o,getMatrixArrayFromParams:i,getMatrix2FromParams:a}}function styleDiv(t){t.style.position="absolute",t.style.top=0,t.style.left=0,t.style.display="block",t.style.verticalAlign="top",t.style.backfaceVisibility=t.style.webkitBackfaceVisibility="hidden",styleUnselectableDiv(t)}function styleUnselectableDiv(t){t.style.userSelect="none",t.style.MozUserSelect="none",t.style.webkitUserSelect="none",t.style.oUserSelect="none"}function randomString(t,e){void 0===e&&(e="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890");var a,i="";for(a=t;a>0;--a)i+=e[Math.round(Math.random()*(e.length-1))];return i}function componentToHex(t){var e=t.toString(16);return 1==e.length?"0"+e:e}function fillToRgba(t,e){if(!cachedColors[t]){var a=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(t);cachedColors[t]=parseInt(a[1],16)+","+parseInt(a[2],16)+","+parseInt(a[3],16)}return"rgba("+cachedColors[t]+","+e+")"}function createElement(t,e,a){if(!e){var i=Object.create(t.prototype,a),r={};return i&&"[object Function]"===r.toString.call(i.init)&&i.init(),i}e.prototype=Object.create(t.prototype),e.prototype.constructor=e,e.prototype.parent=t.prototype}function defineDescriptor(t,e,a,i){var r={writable:!1,configurable:!1,enumerable:!1,value:a};if(i)for(var s in i)r[s]=i[s];var n={};t&&"[object Function]"===n.toString.call(t)&&(t=t.prototype),Object.defineProperty(t,e,r)}function defineAccessor(t,e,a){var i,r={enumerable:!1,configurable:!1,get:function(){return i},set:function(t){i=t}};if(a)for(var s in a)r[s]=a[s];var n={};t&&"[object Function]"===n.toString.call(t)&&(t=t.prototype),Object.defineProperty(t,e,r)}function bezFunction(){function t(t,e,a,i,r,s){return o.abs((a-t)*(s-e)-(r-t)*(i-e))<1e-5}function e(t){return s[t].fnc}function a(t,e,a,i,r){if(r||(r=("bez_"+t+"_"+e+"_"+a+"_"+i).replace(/\./g,"p")),s[r])return s[r];var n,o,h,l,m,p;return s[r]=function(r,s,d,c,u){var f=s/u;r=f;for(var y,g=0;++g<14&&(h=3*t,o=3*(a-t)-h,n=1-h-o,y=r*(h+r*(o+r*n))-f,!(Math.abs(y)<.001));)r-=y/(h+r*(2*o+3*n*r));p=3*e,m=3*(i-e)-p,l=1-p-m;var v=r*(p+r*(m+r*l));return c*v+d},s[r]}function i(e,a,i,r){var s=(e.join("_")+"_"+a.join("_")+"_"+i.join("_")+"_"+r.join("_")).replace(/\./g,"p");if(n[s])return n[s];var o,h,l,m,p,d,c,u,f,y,g,v,x=500,b=0,E=null,C={points:[],segmentLength:0};for(t(e[0],e[1],a[0],a[1],i[0],i[1])&&t(e[0],e[1],a[0],a[1],r[0],r[1])&&(x=2),l=i.length,o=0;x>o;o+=1){for(v=[],y=o/(x-1),g=0,h=0;l>h;h+=1)m=e[h]+(i[h]-e[h])*y,p=i[h]+(r[h]-i[h])*y,d=r[h]+(a[h]-r[h])*y,c=m+(p-m)*y,u=p+(d-p)*y,f=c+(u-c)*y,v.push(f),null!==E&&(g+=Math.pow(v[h]-E[h],2));g=Math.sqrt(g),b+=g,C.points.push({partialLength:g,cumulatedLength:b,point:v}),E=v}return C.segmentLength=b,n[s]=C,C}function r(e){var a,i,r,s,n,o,h,l,m,p,d,c,u=e.s,f=e.e,y=e.to,g=e.ti,v=500,x=0,b=null,E={points:[],segmentLength:0};for(t(u[0],u[1],f[0],f[1],u[0]+y[0],u[1]+y[1])&&t(u[0],u[1],f[0],f[1],f[0]+g[0],f[1]+g[1])&&(v=2),r=y.length,a=0;v>a;a+=1){for(c=[],p=a/(v-1),d=0,i=0;r>i;i+=1)s=u[i]+y[i]*p,n=u[i]+y[i]+(f[i]+g[i]-(u[i]+y[i]))*p,o=f[i]+g[i]+-g[i]*p,h=s+(n-s)*p,l=n+(o-n)*p,m=h+(l-h)*p,c.push(m),null!==b&&(d+=Math.pow(c[i]-b[i],2));d=Math.sqrt(d),x+=d,E.points.push({partialLength:d,cumulatedLength:x,point:c}),b=c}E.segmentLength=x,e.bezierData=E}var s=[],n={},o=Math,h={getEasingCurve:a,getEasingCurveByIndex:e,drawBezierCurve:i,buildBezierData:r};return h}function dataFunctionManager(){function t(t,e,a){var i,r=o(t,e,a),s=[];for(i=0;e>i;i+=1)s.push(Math.floor(r[i]*g));return s}function e(t,e){var a,i,r,s=t.length;for(a=0;s>a;a+=1)if(void 0!==t[a].t)if(t[a].s instanceof Array)for(r=t[a].s.length,i=0;r>i;i+=1)t[a].s[i]*=e,t[a].e[i]*=e;else t[a].s&&(t[a].s*=e,t[a].e*=e);else t[a]=t[a]*e}function a(s){var o,h,l,m,p,d,c,u,f,y,g=s.length;for(d=0;g>d;d+=1){if(l=s[d],o=l.outPoint-l.startTime,h=l.startTime,l.layerName=n(l.layerName),l.parent&&(l.parent=n(l.parent)),l.renderedFrame={},l.renderedData={},m=[],p=-1,l.tm&&(l.trmp=l.tm,l.tm=t(l.tm,o,h)),l.ks.o instanceof Array?e(l.ks.o,.01):l.ks.o/=100,l.ks.s instanceof Array?e(l.ks.s,.01):l.ks.s/=100,l.ks.r instanceof Array?e(l.ks.r,b):l.ks.r*=b,l.hasMask){var v=l.masksProperties;for(u=v.length,c=0;u>c;c+=1)if(v[c].pt.i)r(v[c].pt);else for(y=v[c].pt.length,f=0;y>f;f+=1)v[c].pt[f].s&&r(v[c].pt[f].s[0]),v[c].pt[f].e&&r(v[c].pt[f].e[0])}"PreCompLayer"==l.type?a(l.layers):"ShapeLayer"==l.type&&i(l.shapes)}}function i(t){var a,s,n,o,h=t.length;for(a=0;h>a;a+=1)if(t[a].renderedData=[],"fl"==t[a].ty||"st"==t[a].ty)t[a].o instanceof Array?e(t[a].o,.01):t[a].o*=.01;else if("sh"==t[a].ty)if(t[a].ks.i)r(t[a].ks);else for(n=t[a].ks.length,s=0;n>s;s+=1)t[a].ks[s].s&&(r(t[a].ks[s].s[0]),r(t[a].ks[s].e[0]));else"gr"==t[a].ty?i(t[a].it):"tr"==t[a].ty&&(o=t[a],o.renderedData=[],o.o instanceof Array?e(o.o,.01):o.o/=100,o.s instanceof Array?e(o.s,.01):o.s/=100,o.r instanceof Array?e(o.r,b):o.r*=b)}function r(t){var e,a=t.i.length;for(e=0;a>e;e+=1)t.i[e][0]+=t.v[e][0],t.i[e][1]+=t.v[e][1],t.o[e][0]+=t.v[e][0],t.o[e][1]+=t.v[e][1]}function s(t){x[t._id]={data:t,renderedFrames:[]},g=t.animation.frameRate,a(t.animation.layers)}function n(t){return t=t.replace(/ /g,"_"),t=t.replace(/-/g,"_"),t=t.replace(/\./g,"_"),t=t.replace(/\//g,"_")}function o(t,e,a){var i,r,s=[];if(!(t instanceof Array)||null===t[0].t)return s.push(t),s;var n,o;s=[];var h,l,m,p=[];r=t.length;var d,c,u;for(i=0;r>i;i+=1)n=t[i],n.t-=a;var f=0,y=0;for(i=0;e>i;i+=1){h=f;for(var g=!1;r-1>h;){if(n=t[h],o=t[h+1],i<n.t&&0===h){for(m=n.s.length,p=[],l=0;m>l;l+=1)p.push(n.s[l]);s.push(p),g=!0,f!=h&&(f=h,y=0);break}if(i>=n.t&&i<o.t){if(p=[],n.to){d=bez.getEasingCurve(n.o.x,n.o.y,n.i.x,n.i.y)("",i-n.t,0,1,o.t-n.t),c=n.bezierData;var v,x,b=c.segmentLength*d;for(l=y;l<c.points.length;){if(0===i||0===b||0===d){p=c.points[l].point,y=l;break}if(l==c.points.length-1)p=c.points[l].point;else if(b>c.points[l].partialLength&&b<c.points[l+1].partialLength){for(v=c.points[l].point.length,x=(b-c.points[l].partialLength)/(c.points[l+1].partialLength-c.points[l].partialLength),u=0;v>u;u+=1)p.push(c.points[l].point[u]+(c.points[l+1].point[u]-c.points[l].point[u])*x);y=l;break}l+=1}}else{var E,C,S,D;n.s.forEach(function(t,e){if(1!==n.h&&(n.o.x instanceof Array?(E=n.o.x[e],C=n.o.y[e],S=n.i.x[e],D=n.i.y[e]):(E=n.o.x,C=n.o.y,S=n.i.x,D=n.i.y),d=bez.getEasingCurve(E,C,S,D)("",i-n.t,0,1,o.t-n.t)),t.i){var a={i:[],o:[],v:[]};t.i.forEach(function(i,r){var s=[],o=[],h=[];i.forEach(function(a,i){1===n.h?(s.push(a),o.push(t.o[r][i]),h.push(t.v[r][i])):(s.push(a+(n.e[e].i[r][i]-a)*d),o.push(t.o[r][i]+(n.e[e].o[r][i]-t.o[r][i])*d),h.push(t.v[r][i]+(n.e[e].v[r][i]-t.v[r][i])*d))}),a.i.push(s),a.o.push(o),a.v.push(h)}),p.push(a)}else p.push(1===n.h?t:t+(n.e[e]-t)*d)})}s.push(p),g=!0,f!=h&&(f=h,y=0);break}h+=1}g===!1&&(n=t[t.length-2],p=[],n.e.forEach(function(t){p.push(t)}),s.push(p))}for(h=s.length;e>h;)s.push(p),h+=1;return s}function h(t,e,a,i){var r,s,n,o,h,l;if(!t.length)return"p"==i.type?(C.px=t,C.py=t):"s"==i.type?(C.sx=t,C.sy=t):"r"==i.type&&(C.r=t),i.toArray?[t]:t;if(void 0===t[0].t)return"p"==i.type?(C.px=t[0],C.py=t[1]):"s"==i.type?(C.sx=t[0],C.sy=t[1]):"r"==i.type&&(C.r=t[0]),t;h=0,l=t.length-1;for(var m=1,p=!0;!(!p||(r=t[h],s=t[h+1],h==l-1&&e>=s.t-a)||s.t-a>e&&1==m);){if(s.t-a<e&&-1==m){h+=1,r=t[h],s=t[h+1];break}l-1>h&&1==m||h>0&&-1==m?h+=m:p=!1}r.to&&!r.bezierData&&bez.buildBezierData(r);var d,c,u,f,y,g=0;if("default"==i.type&&(n=[]),r.to){if(o=r.bezierData,e>=s.t-a)return"p"==i.type?(C.px=o.points[o.points.length-1].point[0],C.py=o.points[o.points.length-1].point[1]):"s"==i.type?(C.sx=o.points[o.points.length-1].point[0],C.sy=o.points[o.points.length-1].point[1]):"r"==i.type&&(C.r=o.points[o.points.length-1].point[0]),o.points[o.points.length-1].point;if(e<r.t-a)return"p"==i.type?(C.px=o.points[0].point[0],C.py=o.points[0].point[1]):"s"==i.type?(C.sx=o.points[0].point[0],C.sy=o.points[0].point[1]):"r"==i.type&&(C.r=o.points[0].point[0]),o.points[0].point;r.__fnct?y=r.__fnct:(y=bez.getEasingCurve(r.o.x,r.o.y,r.i.x,r.i.y,r.n),r.__fnct=y),u=y("",e-(r.t-a),0,1,s.t-a-(r.t-a));var v,x=o.segmentLength*u,b=0;for(m=1,p=!0,f=o.points.length;p;){if(b+=o.points[g].partialLength*m,0===x||0===u){"p"==i.type?(C.px=o.points[g].point[0],C.py=o.points[g].point[1]):"s"==i.type?(C.sx=o.points[g].point[0],C.sy=o.points[g].point[1]):"r"==i.type?C.r=o.points[g].point[0]:n=o.points[g].point;break}if(g==o.points.length-1){"p"==i.type?(C.px=o.points[g].point[0],C.py=o.points[g].point[1]):"s"==i.type?(C.sx=o.points[g].point[0],C.sy=o.points[g].point[1]):"r"==i.type?C.r=o.points[g].point[0]:n=o.points[g].point;break}if(x>b&&x<b+o.points[g+1].partialLength){if(v=(x-b)/o.points[g+1].partialLength,"p"==i.type)C.px=o.points[g].point[0]+(o.points[g+1].point[0]-o.points[g].point[0])*v,C.py=o.points[g].point[1]+(o.points[g+1].point[1]-o.points[g].point[1])*v;else if("s"==i.type)C.sx=o.points[g].point[0]+(o.points[g+1].point[0]-o.points[g].point[0])*v,C.sy=o.points[g].point[1]+(o.points[g+1].point[1]-o.points[g].point[1])*v;else if("r"==i.type)C.r=o.points[g].point[0]+(o.points[g+1].point[0]-o.points[g].point[0])*v;else for(c=o.points[g].point.length,d=0;c>d;d+=1)n.push(o.points[g].point[d]+(o.points[g+1].point[d]-o.points[g].point[d])*v);break}f-1>g&&1==m||g>0&&-1==m?g+=m:p=!1}}else{var E,S,D,w,F=!1;for(l=r.s.length,h=0;l>h;h+=1)1!==r.h&&(r.o.x instanceof Array?(F=!0,E=r.o.x[h]?r.o.x[h]:r.o.x[0],S=r.o.y[h]?r.o.y[h]:r.o.y[0],D=r.i.x[h]?r.i.x[h]:r.i.x[0],w=r.i.y[h]?r.i.y[h]:r.i.y[0],r.__fnct||(r.__fnct=[])):(F=!1,E=r.o.x,S=r.o.y,D=r.i.x,w=r.i.y),F?r.__fnct[h]?y=r.__fnct[h]:(y=bez.getEasingCurve(E,S,D,w),r.__fnct[h]=y):r.__fnct?y=r.__fnct:(y=bez.getEasingCurve(E,S,D,w),r.__fnct=y),u=e>=s.t-a?1:e<r.t-a?0:y("",e-(r.t-a),0,1,s.t-a-(r.t-a))),1===r.h?"p"==i.type?0===h?C.px=r.s[h]:1==h&&(C.py=r.s[h]):"s"==i.type?0===h?C.sx=r.s[h]:1==h&&(C.sy=r.s[h]):"r"==i.type?C.r=r.s[h]:n.push(r.s[h]):"p"==i.type?0===h?C.px=r.s[h]+(r.e[h]-r.s[h])*u:1==h&&(C.py=r.s[h]+(r.e[h]-r.s[h])*u):"s"==i.type?0===h?C.sx=r.s[h]+(r.e[h]-r.s[h])*u:1==h&&(C.sy=r.s[h]+(r.e[h]-r.s[h])*u):"r"==i.type?C.r=r.s[h]+(r.e[h]-r.s[h])*u:n.push(r.s[h]+(r.e[h]-r.s[h])*u)}return n}function l(t,e,a,i,r){var s={};s.closed=r?t.cl:t.closed;var n=r?t.pt:t.ks;if(n.v)return"svg"==i?(n.__pathString||(n.__pathString=m(n,s.closed)),s.pathString=n.__pathString):s.pathNodes=n,s;t={i:[],o:[],v:[]};var o,h,l,p,d,c,u,f=[];if(e<n[0].t-a){if(!n.__minValue){for(h=n[0].s[0].i.length,o=0;h>o;o+=1){for(d=[],c=[],u=[],p=n[0].s[0].i[o].length,l=0;p>l;l+=1)d.push(n[0].s[0].i[o][l]),c.push(n[0].s[0].o[o][l]),u.push(n[0].s[0].v[o][l]);t.i.push(d),t.o.push(c),t.v.push(u)}f.push(t),n.__minValue="svg"==i?m(f,s.closed):f[0]}return"svg"==i?s.pathString=n.__minValue:s.pathNodes=n.__minValue,s}if(e>n[n.length-1].t-a){if(!n.__maxValue){var y=n.length-2;for(h=n[y].s[0].i.length,o=0;h>o;o+=1){for(d=[],c=[],u=[],p=n[y].s[0].i[o].length,l=0;p>l;l+=1)d.push(n[y].e[0].i[o][l]),c.push(n[y].e[0].o[o][l]),u.push(n[y].e[0].v[o][l]);t.i.push(d),t.o.push(c),t.v.push(u)}f.push(t),n.__maxValue="svg"==i?m(f,s.closed):f[0]}return"svg"==i?s.pathString=n.__maxValue:s.pathNodes=n.__maxValue,s}for(var g,v,x=0,b=n.length-1,E=1,C=!0;C&&(g=n[x],v=n[x+1],!(v.t-a>e&&1==E));)b-1>x&&1==E||x>0&&-1==E?x+=E:C=!1;var S,D,w,F,I;if(1!==g.h){S=g.o.x,D=g.o.y,w=g.i.x,F=g.i.y;var A;g.__fnct?A=g.__fnct:(A=bez.getEasingCurve(S,D,w,F),g.__fnct=A),I=A("",e-(g.t-a),0,1,v.t-a-(g.t-a)),e>=v.t-a?I=1:e<g.t-a&&(I=0)}if(1===g.h&&g.__hValue)f.push(g.__hValue);else for(t={i:[],o:[],v:[]},h=g.s[0].i.length,o=0;h>o;o+=1){for(d=[],c=[],u=[],p=g.s[0].i[o].length,l=0;p>l;l+=1)1===g.h?(d.push(g.s[0].i[o][l]),c.push(g.s[0].o[o][l]),u.push(g.s[0].v[o][l])):(d.push(g.s[0].i[o][l]+(g.e[0].i[o][l]-g.s[0].i[o][l])*I),c.push(g.s[0].o[o][l]+(g.e[0].o[o][l]-g.s[0].o[o][l])*I),u.push(g.s[0].v[o][l]+(g.e[0].v[o][l]-g.s[0].v[o][l])*I));t.i.push(d),t.o.push(c),t.v.push(u),1===g.h&&(g.__hValue=t),f.push(t)}return"svg"==i?s.pathString=m(f[0],s.closed):s.pathNodes=f[0],s}function m(t,e){var a,i,r,s,n,o,h="";if(!(t instanceof Array)){for(a=t.v,i=t.o,r=t.i,o=a.length,h+="M"+a[0].join(","),n=1;o>n;n++)h+=" C"+i[n-1].join(",")+" "+r[n].join(",")+" "+a[n].join(",");return e!==!1&&(h+=" C"+i[n-1].join(",")+" "+r[0].join(",")+" "+a[0].join(",")),h}var l,m=t.length;for(h="",l=0;m>l;l+=1){for(s=t[l],a=s.v,i=s.o,r=s.i,o=a.length,h+="M"+a[0].join(","),n=1;o>n;n++)h+=" C"+i[n-1].join(",")+" "+r[n].join(",")+" "+a[n].join(",");e!==!1&&(h+=" C"+i[n-1].join(",")+" "+r[0].join(",")+" "+a[0].join(","))}return h}function p(t,e,a){var i,r,s,n,o,m,c,u,f,y=t.length;for(u=0;y>u;u+=1)if(f=t[u],n=e-f.startTime,!f.an[n]){if(i={},E.arrayFlag=!1,E.type="default",i.a=h(f.ks.a,n,f.startTime,E),i.o=h(f.ks.o,n,f.startTime,E),E.arrayFlag=!1,E.type="p",h(f.ks.p,n,f.startTime,E),E.arrayFlag=!0,E.type="r",h(f.ks.r,n,f.startTime,E),E.arrayFlag=!0,E.type="s",h(f.ks.s,n,f.startTime,E),c={},c.an={tr:i},E.arrayFlag=!1,E.type="default","canvas"==a?c.an.matrixArray=v.getMatrixArrayFromParams(C.r,C.sx,C.sy,C.px,C.py):(c.an.matrixArray=v.getMatrixArrayFromParams(C.r,C.sx,C.sy,C.px,C.py),c.an.matrixValue=v.getMatrix2FromParams(C.r,C.sx,C.sy,C.px,C.py)+"translate("+-i.a[0]+" "+-i.a[1]+")"),f.renderedData[n]=c,f.hasMask)for(r=f.masksProperties,m=r.length,o=0;m>o;o+=1)r[o].paths||(r[o].paths=[],r[o].opacity=[]),r[o].paths[n]=l(r[o],n,f.startTime,a,!0),r[o].opacity[n]=h(r[o].o,n,f.startTime,E),r[o].opacity[n]=r[o].opacity[n]instanceof Array?r[o].opacity[n][0]/100:r[o].opacity[n]/100;e<f.inPoint||e>f.outPoint||("PreCompLayer"==f.type?(s=f.tm?f.tm[n]<0?0:n>=f.tm.length?f.tm[f.tm.length-1]:f.tm[n]:n,void 0===s&&(s=h(f.trmp,n,0,E)[0]*g,f.tm[n]=s),p(f.layers,s,a)):"ShapeLayer"==f.type&&d(f.shapes,n,f.startTime,a))}}function d(t,e,a,i){var r,s,n,o,m,p,u,f,y,g,x,b,S,D=t.length;for(r=0;D>r;r+=1)s=t[r],"sh"==s.ty?s.renderedData[e]={path:l(s,e,a,i)}:"fl"==s.ty?(n=h(s.c,e,a,E),o=h(s.o,e,a,E),s.renderedData[e]={opacity:o instanceof Array?o[0]:o},"canvas"==i?(c(n),s.renderedData[e].color=n):s.renderedData[e].color=rgbToHex(Math.round(n[0]),Math.round(n[1]),Math.round(n[2]))):"rc"==s.ty?(m=h(s.p,e,a,E),p=h(s.s,e,a,E),u=h(s.r,e,a,E),s.renderedData[e]={position:m,size:p,roundness:u}):"el"==s.ty?(m=h(s.p,e,a,E),p=h(s.s,e,a,E),s.renderedData[e]={p:m,size:p}):"st"==s.ty?(f=h(s.c,e,a,E),y=h(s.o,e,a,E),g=h(s.w,e,a,E),s.renderedData[e]={opacity:y instanceof Array?y[0]:y,width:g instanceof Array?g[0]:g},"canvas"==i?(c(f),s.renderedData[e].color=f):s.renderedData[e].color=rgbToHex(Math.round(f[0]),Math.round(f[1]),Math.round(f[2]))):"tr"==s.ty?(s.renderedData[e]={a:h(s.a,e,a,E),o:h(s.o,e,a,E)},E.arrayFlag=!0,E.type="s",h(s.s,e,a,E),E.arrayFlag=!0,E.type="r",h(s.r,e,a,E),E.arrayFlag=!1,E.type="p",h(s.p,e,a,E),E.arrayFlag=!1,E.type="default","canvas"==i?s.renderedData[e].mtArr=v.getMatrixArrayFromParams(C.r,C.sx,C.sy,C.px,C.py):(s.renderedData[e].mtArr=v.getMatrixArrayFromParams(C.r,C.sx,C.sy,C.px,C.py),s.renderedData[e].mt=v.getMatrix2FromParams(C.r,C.sx,C.sy,C.px,C.py))):"tm"==s.ty?(x=h(s.s,e,a,E),b=h(s.e,e,a,E),S=h(s.o,e,a,E),s.renderedData[e]={s:x,e:b,o:S}):"gr"==s.ty&&d(s.it,e,a,i)}function c(t){var e,a=t.length;for(e=0;a>e;e+=1)t[e]=Math.round(t[e])}function u(t,e){for(var a=1;a>0;){if(e+=1,e>=t.data.animation.totalFrames){t.renderFinished=!0;break}t.renderedFrames[e]||(f(t.data._id,e),a-=1)}}function f(t,e){return 2==x[t].renderedFrames[e]?void(x[t].renderFinished||u(x[t],e)):(g=x[t].data.animation.frameRate,x[t].renderedFrames[e]=2,void p(x[t].data.animation.layers,e,x[t].data._animType))}function y(t){var e,a=x[t].data,i=a.animation.totalFrames,r=[];for(e=0;i>e;e+=1)r.push({num:e,data:f(t,e)})}var g=0,v=new MatrixManager,x={},b=Math.PI/180,E={arrayFlag:!1},C={r:0,sx:1,sy:1,px:1,py:1},S={};return S.completeData=s,S.renderFrame=f,S.renderAllFrames=y,S}function SVGRenderer(t){this.animationItem=t,this.layers=null,this.lastFrame=-1,this.globalData={frameNum:-1}}function CanvasRenderer(t,e){this.animationItem=t,this.renderConfig=e?e:{clearCanvas:!0,context:null,scaleMode:"fit"},this.lastFrame=-1,this.globalData={frameNum:-1}}function MaskElement(t){this.data=null,this.element=null,this.globalData=t,this.paths=[]}function ICompElement(t,e,a,i){this.parent.constructor.call(this,t,e,a,i),this.layers=t.layers}function IImageElement(t,e,a,i){this.animationItem=e,this.assets=this.animationItem.getAssets(),this.path=this.animationItem.getPath(),this.parent.constructor.call(this,t,e,a,i)}function IShapeElement(t,e,a,i){this.shapes=[],this.parent.constructor.call(this,t,e,a,i)}function ShapeItemElement(t,e,a){this.stylesList=[],this.currentMatrix=new Matrix,this.shape=e,this.data=t,this.globalData=a,this.searchShapes(this.data),styleUnselectableDiv(this.shape)}function ISolidElement(t,e,a,i){this.parent.constructor.call(this,t,e,a,i)}function ITextElement(t,e,a,i){this.parent.constructor.call(this,t,e,a,i)}function CVBaseElement(t,e,a){this.renderer=e,this.data=t,this.globalData=a,this.currentAnimData=null,this.renderFrame=!1,this.init()}function CVCompElement(t,e,a){this.parent.constructor.call(this,t,e,a),this.layers=t.layers}function CVImageElement(t,e,a){this.renderer=e,this.animationItem=e.animationItem,this.assets=this.animationItem.getAssets(),this.path=this.animationItem.getPath(),this.parent.constructor.call(this,t,e,a),this.animationItem.pendingElements+=1}function CVShapeElement(t,e,a){this.shapes=[],this.parent.constructor.call(this,t,e,a)}function CVShapeItemElement(t,e,a,i){this.data=t,this.globalData=i,this.renderer=e,this.frameNum=-1,this.trims=[],this.dataLength=this.data.length,this.mainFlag=a,this.stylesList=[],this.ownStylesList=[],this.stylesPool=[],this.currentStylePoolPos=0,this.currentMatrix=document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGMatrix(),this.mat=document.createElementNS("http://www.w3.org/2000/svg","svg").createSVGMatrix();var r,s=this.dataLength-1;this.renderedPaths={};var n;for(r=s;r>=0;r-=1)"gr"==this.data[r].ty?this.data[r].item=new CVShapeItemElement(this.data[r].it,this.renderer,!1,this.globalData):"st"==this.data[r].ty||"fl"==this.data[r].ty?(n={type:"fill",styleOpacity:0,opacity:0,value:"rgba(0,0,0,0)",closed:!1},"fl"==this.data[r].ty?n.type="fill":(n.type="stroke",n.width=0),this.stylesPool.push(n)):"sh"==this.data[r].ty||"el"==this.data[r].ty||"rc"==this.data[r].ty}function CVSolidElement(t,e,a){this.parent.constructor.call(this,t,e,a)}function CVTextElement(t,e){this.parent.constructor.call(this,t,e)}function CVMaskElement(){}var svgNS="http://www.w3.org/2000/svg";Matrix.prototype={concat:function(t){return this.clone()._t(t.a,t.b,t.c,t.d,t.e,t.f)},flipX:function(){return this._t(-1,0,0,1,0,0)},flipY:function(){return this._t(1,0,0,-1,0,0)},reflectVector:function(t,e){var a=this.applyToPoint(0,1),i=2*(a.x*t+a.y*e);return t-=i*a.x,e-=i*a.y,{x:t,y:e}},reset:function(){return this.setTransform(1,0,0,1,0,0)},rotate:function(t){return 0===t?this:(this.cos=Math.cos(t),this.sin=Math.sin(t),this._t(this.cos,this.sin,-this.sin,this.cos,0,0))},rotateFromVector:function(t,e){return this.rotate(Math.atan2(e,t))},rotateDeg:function(t){return this.rotate(t*Math.PI/180)},scaleU:function(t){return this._t(t,0,0,t,0,0)},scale:function(t,e){return 1==t&&1==e?this:this._t(t,0,0,e,0,0)},scaleX:function(t){return this._t(t,0,0,1,0,0)},scaleY:function(t){return this._t(1,0,0,t,0,0)},shear:function(t,e){return this._t(1,e,t,1,0,0)},shearX:function(t){return this._t(1,0,t,1,0,0)},shearY:function(t){return this._t(1,t,0,1,0,0)},skew:function(t,e){return this.shear(Math.tan(t),Math.tan(e))},skewX:function(t){return this.shearX(Math.tan(t))},skewY:function(t){return this.shearY(Math.tan(t))},setTransform:function(t,e,a,i,r,s){return this.props[0]=t,this.props[1]=e,this.props[2]=a,this.props[3]=i,this.props[4]=r,this.props[5]=s,this._x()},translate:function(t,e){return this._t(1,0,0,1,t,e)},translateX:function(t){return this._t(1,0,0,1,t,0)},translateY:function(t){return this._t(1,0,0,1,0,t)},transform:function(t,e,a,i,r,s){return this.a1=this.props[0],this.b1=this.props[1],this.c1=this.props[2],this.d1=this.props[3],this.e1=this.props[4],this.f1=this.props[5],this.props[0]=this.a1*t+this.c1*e,this.props[1]=this.b1*t+this.d1*e,this.props[2]=this.a1*a+this.c1*i,this.props[3]=this.b1*a+this.d1*i,this.props[4]=this.a1*r+this.c1*s+this.e1,this.props[5]=this.b1*r+this.d1*s+this.f1,this._x()},divide:function(t){if(!t.isInvertible())throw"Input matrix is not invertible";var e=t.inverse();return this._t(e.a,e.b,e.c,e.d,e.e,e.f)},divideScalar:function(t){var e=this;return e.a/=t,e.b/=t,e.c/=t,e.d/=t,e.e/=t,e.f/=t,e._x()},inverse:function(){if(this.isIdentity())return new Matrix;if(this.isInvertible()){var t=this,e=t.a,a=t.b,i=t.c,r=t.d,s=t.e,n=t.f,o=new Matrix,h=e*r-a*i;return o.a=r/h,o.b=-a/h,o.c=-i/h,o.d=e/h,o.e=(i*n-r*s)/h,o.f=-(e*n-a*s)/h,o}throw"Matrix is not invertible."},interpolate:function(t,e,a){var i=this,r=a?new Matrix(a):new Matrix;return r.a=i.a+(t.a-i.a)*e,r.b=i.b+(t.b-i.b)*e,r.c=i.c+(t.c-i.c)*e,r.d=i.d+(t.d-i.d)*e,r.e=i.e+(t.e-i.e)*e,r.f=i.f+(t.f-i.f)*e,r._x()},interpolateAnim:function(t,e,a){var i=this,r=a?new Matrix(a):new Matrix,s=i.decompose(),n=t.decompose(),o=s.rotation+(n.rotation-s.rotation)*e,h=s.translate.x+(n.translate.x-s.translate.x)*e,l=s.translate.y+(n.translate.y-s.translate.y)*e,m=s.scale.x+(n.scale.x-s.scale.x)*e,p=s.scale.y+(n.scale.y-s.scale.y)*e;return r.translate(h,l),r.rotate(o),r.scale(m,p),r._x()},decompose:function(t){var e=this.props[0],a=this.props[1],i=this.props[2],r=this.props[3],s=Math.acos,n=Math.atan,o=Math.sqrt,h=Math.PI,l={x:this.props[4],y:this.props[5]},m=0,p={x:1,y:1},d={x:0,y:0},c=e*r-a*i;if(t)e?(d={x:n(i/e),y:n(a/e)},p={x:e,y:c/e}):a?(m=.5*h,p={x:a,y:c/a},d.x=n(r/a)):(p={x:i,y:r},d.x=.25*h);else if(e||a){var u=o(e*e+a*a);m=a>0?s(e/u):-s(e/u),p={x:u,y:c/u},d.x=n((e*i+a*r)/(u*u))}else if(i||r){var f=o(i*i+r*r);m=.5*h-(r>0?s(-i/f):-s(i/f)),p={x:c/f,y:f},d.y=n((e*i+a*r)/(f*f))}else p={x:0,y:0};return{scale:p,translate:l,rotation:m,skew:d}},determinant:function(){return this.a*this.d-this.b*this.c},applyToPoint:function(t,e){return{x:t*this.props[0]+e*this.props[2]+this.props[4],y:t*this.props[1]+e*this.props[3]+this.props[5]}},applyToArray:function(t){var e,a,i=0,r=[];if("number"==typeof t[0])for(a=t.length;a>i;)e=this.applyToPoint(t[i++],t[i++]),r.push(e.x,e.y);else for(a=t.length,i=0;a>i;i++)r.push(this.applyToPoint(t[i].x,t[i].y));return r},applyToTypedArray:function(t,e){for(var a,i=0,r=t.length,s=e?new Float64Array(r):new Float32Array(r);r>i;)a=this.applyToPoint(t[i],t[i+1]),s[i++]=a.x,s[i++]=a.y;return s},applyToContext:function(t){var e=this;return t.setTransform(e.a,e.b,e.c,e.d,e.e,e.f),e},isIdentity:function(){var t=this;return t._q(t.a,1)&&t._q(t.b,0)&&t._q(t.c,0)&&t._q(t.d,1)&&t._q(t.e,0)&&t._q(t.f,0)},isInvertible:function(){return!this._q(this.determinant(),0)},isValid:function(){return!this._q(this.a*this.d,0)},clone:function(t){var e=this,a=new Matrix;return a.a=e.a,a.b=e.b,a.c=e.c,a.d=e.d,a.e=e.e,a.f=e.f,t||(a.context=e.context),a},isEqual:function(t){var e=this,a=e._q;return a(e.a,t.a)&&a(e.b,t.b)&&a(e.c,t.c)&&a(e.d,t.d)&&a(e.e,t.e)&&a(e.f,t.f)},toArray:function(){return[this.props[0],this.props[1],this.props[2],this.props[3],this.props[4],this.props[5]]},toCSS:function(){return this.cssParts[1]=this.props.join(","),this.cssParts.join("")},toJSON:function(){var t=this;return'{"a":'+t.a+',"b":'+t.b+',"c":'+t.c+',"d":'+t.d+',"e":'+t.e+',"f":'+t.f+"}"},toString:function(){return""+this.toArray()},_q:function(t,e){return Math.abs(t-e)<1e-14},_x:function(){return this.context&&this.context.setTransform(this.a,this.b,this.c,this.d,this.e,this.f),this}},void 0===CanvasRenderingContext2D.prototype.ellipse&&(CanvasRenderingContext2D.prototype.ellipse=function(t,e,a,i,r,s,n,o){this.save(),this.translate(t,e),this.rotate(r),this.scale(a,i),this.arc(0,0,1,s,n,o),this.restore()}),("function"!=typeof Path2D||"function"!=typeof Path2D.prototype.addPath||"function"!=typeof Path2D.prototype.ellipse)&&!function(){function t(t){if(this.ops_=[],void 0!==t)if("string"==typeof t)try{this.ops_=parser.parse(t)}catch(e){}else{if(!t.hasOwnProperty("ops_"))throw"Error: "+typeof t+"is not a valid argument to Path";this.ops_=t.ops_.slice(0)}}function e(t){return function(){var e,a=arguments.length,i=[];for(e=0;a>e;e+=1)i.push(arguments[e]);this.ops_.push({type:t,args:i})}}for(var a=CanvasRenderingContext2D.prototype,i=["closePath","moveTo","lineTo","quadraticCurveTo","bezierCurveTo","rect","arc","arcTo","ellipse"],r=0;r<i.length;r++){var s=i[r];t.prototype[s]=e(s)}t.prototype.addPath=function(t,e){var a=!1;!e||1==e.a&&0==e.b&&0==e.c&&1==e.d&&0==e.e&&0==e.f||(a=!0,this.ops_.push({type:"save",args:[]}),this.ops_.push({type:"transform",args:[e.a,e.b,e.c,e.d,e.e,e.f]})),this.ops_=this.ops_.concat(t.ops_),a&&this.ops_.push({type:"restore",args:[]})};var n=a.fill,o=a.stroke,h=a.clip;a.fill=function(e){if(e instanceof t){this.beginPath();for(var i=0,r=e.ops_.length;r>i;i++){var s=e.ops_[i];a[s.type].apply(this,s.args)}r=arguments.length;var o=[];for(i=1;r>i;i+=1)o.push(arguments[i]);n.apply(this,o)}else n.apply(this,arguments)},a.stroke=function(e){if(e instanceof t){this.beginPath();for(var i=0,r=e.ops_.length;r>i;i++){var s=e.ops_[i];a[s.type].apply(this,s.args)}o.call(this)}else o.call(this)},a.clip=function(e){if(e instanceof t){this.beginPath();for(var i=0,r=e.ops_.length;r>i;i++){var s=e.ops_[i];a[s.type].apply(this,s.args)}r=arguments.length;var n=[];for(i=1;r>i;i+=1)n.push(arguments[i]);h.apply(this,n)}else h.apply(this,arguments)},Path2D=t}();var MatrixManager=matrixManagerFunction;!function(){for(var t=0,e=["ms","moz","webkit","o"],a=0;a<e.length&&!window.requestAnimationFrame;++a)window.requestAnimationFrame=window[e[a]+"RequestAnimationFrame"],window.cancelAnimationFrame=window[e[a]+"CancelAnimationFrame"]||window[e[a]+"CancelRequestAnimationFrame"];window.requestAnimationFrame||(window.requestAnimationFrame=function(e){var a=(new Date).getTime(),i=Math.max(0,16-(a-t)),r=window.setTimeout(function(){e(a+i)},i);return t=a+i,r}),window.cancelAnimationFrame||(window.cancelAnimationFrame=function(t){clearTimeout(t)})}();var subframeEnabled=!1,cachedColors={},rgbToHex=function(){var t,e,a=[];for(t=0;256>t;t+=1)e=t.toString(16),a[t]=1==e.length?"0"+e:e;return function(t,e,i){return 0>t&&(t=0),0>e&&(e=0),0>i&&(i=0),"#"+a[t]+a[e]+a[i]}}(),fillColorToString=function(){var t=[];return function(e,a){return t[e[0]]||(t[e[0]]=[]),t[e[0]][e[1]]||(t[e[0]][e[1]]=[]),t[e[0]][e[1]][e[2]]||(void 0!==a&&(e[3]=a),t[e[0]][e[1]][e[2]]="rgba("+e.join(",")+")"),t[e[0]][e[1]][e[2]]}}(),bez=bezFunction(),dataManager=dataFunctionManager();SVGRenderer.prototype.buildItems=function(t,e){var a,i=0,r=t.length;for(a=r-1;a>=0;a--)"StillLayer"==t[a].type?(i++,this.createImage(t[a],e)):"PreCompLayer"==t[a].type?this.createComp(t[a],e):"SolidLayer"==t[a].type?this.createSolid(t[a],e):"ShapeLayer"==t[a].type?this.createShape(t[a],e):"TextLayer"==t[a].type?this.createText(t[a],e):this.createBase(t[a],e)},SVGRenderer.prototype.createBase=function(t,e){t.element=new BaseElement(t,this.animationItem,e,this.globalData)},SVGRenderer.prototype.createShape=function(t,e){t.element=new IShapeElement(t,this.animationItem,e,this.globalData)},SVGRenderer.prototype.createText=function(t,e){t.element=new ITextElement(t,this.animationItem,e,this.globalData)},SVGRenderer.prototype.createImage=function(t,e){t.element=new IImageElement(t,this.animationItem,e,this.globalData)},SVGRenderer.prototype.createComp=function(t,e){t.element=new ICompElement(t,this.animationItem,e,this.globalData),this.buildItems(t.layers,t.element.getDomElement())},SVGRenderer.prototype.createSolid=function(t,e){t.element=new ISolidElement(t,this.animationItem,e,this.globalData)},SVGRenderer.prototype.configAnimation=function(t){this.animationItem.container=document.createElementNS(svgNS,"svg"),this.animationItem.container.setAttribute("xmlns","http://www.w3.org/2000/svg"),this.animationItem.container.setAttribute("width",t.animation.compWidth),this.animationItem.container.setAttribute("height",t.animation.compHeight),this.animationItem.container.setAttribute("viewBox","0 0 "+t.animation.compWidth+" "+t.animation.compHeight),this.animationItem.container.setAttribute("preserveAspectRatio","xMidYMid meet"),this.animationItem.container.style.width="100%",this.animationItem.container.style.height="100%",this.animationItem.container.style.transformOrigin=this.animationItem.container.style.mozTransformOrigin=this.animationItem.container.style.webkitTransformOrigin=this.animationItem.container.style["-webkit-transform"]="0px 0px 0px",this.animationItem.wrapper.appendChild(this.animationItem.container);var e=document.createElementNS(svgNS,"defs");this.globalData.defs=e,this.animationItem.container.appendChild(e);var a=document.createElementNS(svgNS,"clipPath"),i=document.createElementNS(svgNS,"rect");i.setAttribute("width",t.animation.compWidth),i.setAttribute("height",t.animation.compHeight),i.setAttribute("x",0),i.setAttribute("y",0),a.setAttribute("id","animationMask"),a.appendChild(i);var r=document.createElementNS(svgNS,"g");r.setAttribute("clip-path","url(#animationMask)"),this.animationItem.container.appendChild(r),e.appendChild(a),this.animationItem.container=r,this.layers=t.animation.layers},SVGRenderer.prototype.buildStage=function(t,e){var a,i,r,s=e.length;for(a=s-1;a>=0;a--)i=e[a],i.parent?(this.buildItemParenting(i,e,i.parent),r=i.element.getDomElement(),t!=r&&r.setAttribute("data-layer-name",i.layerName),i.element.setMainElement(r)):(r=i.element.getDomElement(),t!=r&&r.setAttribute("data-layer-name",i.layerName),i.element.setMainElement(r)),"PreCompLayer"==i.type&&this.buildStage(i.element.getComposingElement(),i.layers,i.element.getType())},SVGRenderer.prototype.buildItemParenting=function(t,e,a){t.parents||(t.parents=[]);for(var i=0,r=e.length;r>i;){if(e[i].layerName==a){t.parents.push({elem:e[i]}),e[i].parent&&this.buildItemParenting(t,e,e[i].parent);break}i+=1}},SVGRenderer.prototype.updateContainerSize=function(){},SVGRenderer.prototype.renderFrame=function(t){if(this.lastFrame!=t){this.lastFrame=t,this.globalData.frameNum=t;var e,a=this.layers.length;for(e=0;a>e;e++)this.layers[e].element.prepareFrame(t-this.layers[e].startTime);for(e=0;a>e;e++)this.layers[e].element.renderFrame(t-this.layers[e].startTime)
}},CanvasRenderer.prototype.buildItems=function(t){var e,a=0,i=t.length;for(e=0;i>e;e++)"StillLayer"==t[e].type?(a++,this.createImage(t[e])):"PreCompLayer"==t[e].type?this.createComp(t[e]):"SolidLayer"==t[e].type?this.createSolid(t[e]):"ShapeLayer"==t[e].type?this.createShape(t[e]):"TextLayer"==t[e].type?this.createText(t[e]):this.createBase(t[e])},CanvasRenderer.prototype.createBase=function(t){t.element=new CVBaseElement(t,this,this.globalData)},CanvasRenderer.prototype.createShape=function(t){t.element=new CVShapeElement(t,this,this.globalData)},CanvasRenderer.prototype.createText=function(t){t.element=new CVTextElement(t,this,this.globalData)},CanvasRenderer.prototype.createImage=function(t){t.element=new CVImageElement(t,this,this.globalData)},CanvasRenderer.prototype.createComp=function(t){t.element=new CVCompElement(t,this,this.globalData),this.buildItems(t.layers)},CanvasRenderer.prototype.createSolid=function(t){t.element=new CVSolidElement(t,this,this.globalData)},CanvasRenderer.prototype.configAnimation=function(t){this.animationItem.wrapper?(this.animationItem.container=document.createElement("canvas"),this.animationItem.container.style.width="100%",this.animationItem.container.style.height="100%",this.animationItem.container.style.transformOrigin=this.animationItem.container.style.mozTransformOrigin=this.animationItem.container.style.webkitTransformOrigin=this.animationItem.container.style["-webkit-transform"]="0px 0px 0px",this.animationItem.wrapper.appendChild(this.animationItem.container),this.canvasContext=this.animationItem.container.getContext("2d")):this.canvasContext=this.renderConfig.context,this.layers=t.animation.layers,this.transformCanvas={},this.transformCanvas.w=t.animation.compWidth,this.transformCanvas.h=t.animation.compHeight,this.updateContainerSize()},CanvasRenderer.prototype.updateContainerSize=function(){var t,e;if(this.animationItem.wrapper&&this.animationItem.container?(t=this.animationItem.wrapper.offsetWidth,e=this.animationItem.wrapper.offsetHeight,this.animationItem.container.setAttribute("width",t),this.animationItem.container.setAttribute("height",e)):(t=this.canvasContext.canvas.width,e=this.canvasContext.canvas.height),"fit"==this.renderConfig.scaleMode){var a=t/e,i=this.transformCanvas.w/this.transformCanvas.h;i>a?(this.transformCanvas.sx=t/this.transformCanvas.w,this.transformCanvas.sy=t/this.transformCanvas.w,this.transformCanvas.tx=0,this.transformCanvas.ty=(e-this.transformCanvas.h*(t/this.transformCanvas.w))/2):(this.transformCanvas.sx=e/this.transformCanvas.h,this.transformCanvas.sy=e/this.transformCanvas.h,this.transformCanvas.tx=(t-this.transformCanvas.w*(e/this.transformCanvas.h))/2,this.transformCanvas.ty=0)}else this.transformCanvas.sx=1,this.transformCanvas.sy=1,this.transformCanvas.tx=0,this.transformCanvas.ty=0},CanvasRenderer.prototype.buildStage=function(t,e){var a,i,r=e.length;for(a=r-1;a>=0;a--)i=e[a],i.parent&&(i.parentHierarchy=[],this.buildItemHierarchy(i,e,i.parent)),"PreCompLayer"==i.type&&this.buildStage(null,i.layers)},CanvasRenderer.prototype.buildItemHierarchy=function(t,e,a){for(var i=0,r=e.length;r>i;){if(e[i].layerName==a){t.parentHierarchy.push(e[i]),void 0===e[i].parent||this.buildItemHierarchy(t,e,e[i].parent);break}i+=1}},CanvasRenderer.prototype.prepareFrame=function(t){var e,a=this.layers.length;for(e=0;a>e;e++)this.layers[e].element.prepareFrame(t-this.layers[e].startTime)},CanvasRenderer.prototype.draw=function(){var t,e=this.layers.length;for(t=e-1;t>=0;t-=1)this.layers[t].element.draw()},CanvasRenderer.prototype.renderFrame=function(t){this.lastFrame!=t&&(this.lastFrame=t,this.globalData.frameNum=t,this.renderConfig.clearCanvas===!0?this.canvasContext.canvas.width=this.canvasContext.canvas.width:this.canvasContext.save(),this.canvasContext.transform(this.transformCanvas.sx,0,0,this.transformCanvas.sy,this.transformCanvas.tx,this.transformCanvas.ty),this.canvasContext.beginPath(),this.canvasContext.rect(0,0,this.transformCanvas.w,this.transformCanvas.h),this.canvasContext.clip(),this.prepareFrame(t),this.draw(),this.renderConfig.clearCanvas!==!0&&this.canvasContext.restore())},MaskElement.prototype.init=function(){this.registeredEffects=[],this.masksProperties=this.data.masksProperties,this.totalMasks=this.masksProperties.length;var t=this.element.maskedElement,e=this.globalData.defs,a=0,i=this.masksProperties.length;this.layerSize=this.element.getLayerSize(),this.maskElement=document.createElementNS(svgNS,"clipPath");var r,s=this.data.masksProperties;for(a=0;i>a;a++)s[a].inv&&!this.solidPath&&(this.solidPath=this.createLayerSolidPath()),r=document.createElementNS(svgNS,"path"),s[a].cl?r.setAttribute("fill","#ffffff"):(r.setAttribute("fill","none"),r.setAttribute("stroke","#ffffff"),r.setAttribute("stroke-width","1"),r.setAttribute("stroke-miterlimit","10")),r.setAttribute("clip-rule","nonezero"),this.maskElement.appendChild(r),s[a].elem=r,s[a].lastPath="";var n=randomString(10);this.maskElement.setAttribute("id",n),t.setAttribute("clip-path","url(#"+n+")"),e.appendChild(this.maskElement)},MaskElement.prototype.renderFrame=function(t){var e,a=this.data.masksProperties.length;for(e=0;a>e;e++)this.drawPath(this.data.masksProperties[e],this.data.masksProperties[e].paths[t].pathString)},MaskElement.prototype.processMaskFromEffects=function(t,e){var a,i=this.registeredEffects.length;for(a=0;i>a;a++)this.registeredEffects[a].renderMask(t,e)},MaskElement.prototype.registerEffect=function(t){this.registeredEffects.push(t)},MaskElement.prototype.getMaskelement=function(){return this.maskElement},MaskElement.prototype.createLayerSolidPath=function(){var t="M0,0 ";return t+="h"+this.layerSize.w,t+="v"+this.layerSize.h,t+="h"+-this.layerSize.w,t+="v"+-this.layerSize.h},MaskElement.prototype.drawPath=function(t,e){t.lastPath!==e&&(t.inv?t.elem.setAttribute("d",this.solidPath+e):t.elem.setAttribute("d",e),t.lastPath=e)};var BaseElement=function(t,e,a,i){this.animationItem=e,this.globalData=i,this.data=t,this.ownMatrix=new Matrix,this.finalTransform={mat:new Matrix,op:1},this.renderedFrames=[],this.lastData={},this.parentContainer=a,this.init()};BaseElement.prototype.init=function(){this.createElements(),this.data.hasMask&&this.addMasks(this.data),this.data.eff&&this.createEffectsManager(this.data)},BaseElement.prototype.createElements=function(){this.data.hasMask?(this.layerElement=document.createElementNS(svgNS,"g"),this.parentContainer.appendChild(this.layerElement),this.maskedElement=this.layerElement):this.layerElement=this.parentContainer},BaseElement.prototype.prepareFrame=function(t){this.currentAnimData=this.data.renderedData[t].an,this.data.renderedFrame.tr=this.currentAnimData.matrixValue;var e=this.currentAnimData.matrixArray;this.ownMatrix.reset(),this.ownMatrix.transform(e[0],e[1],e[2],e[3],e[4],e[5]),this.ownMatrix.translate(-this.currentAnimData.tr.a[0],-this.currentAnimData.tr.a[1])},BaseElement.prototype.renderFrame=function(t,e){if(this.data.inPoint-this.data.startTime<=t&&this.data.outPoint-this.data.startTime>=t?(this.isVisible!==!0&&(this.isVisible=!0),this.finalTransform.opacity=1):(this.isVisible!==!1&&(this.isVisible=!1),this.finalTransform.opacity=0),this.data.eff&&this.effectsManager.renderFrame(t,this.currentAnimData.mk),t===this.data.renderedFrame.num)return this.isVisible;if(this.data.hasMask&&this.maskManager.renderFrame(t),this.finalTransform.opacity*=this.currentAnimData.tr.o,e&&(this.finalTransform.mat.reset(),r=e.mat.props,this.finalTransform.mat.transform(r[0],r[1],r[2],r[3],r[4],r[5]),this.finalTransform.opacity*=e.opacity),this.data.parents){var a,i,r,s=this.data.parents.length;for(e||this.finalTransform.mat.reset(),a=s-1;a>=0;a-=1)r=this.data.parents[a].elem.element.ownMatrix.props,this.finalTransform.mat.transform(r[0],r[1],r[2],r[3],r[4],r[5]),i=this.data.parents[a].elem.element.currentAnimData;r=this.ownMatrix.props,this.finalTransform.mat.transform(r[0],r[1],r[2],r[3],r[4],r[5])}else this.isVisible&&(e?(r=this.ownMatrix.props,this.finalTransform.mat.transform(r[0],r[1],r[2],r[3],r[4],r[5])):this.finalTransform.mat=this.ownMatrix);if(this.data.hasMask){this.renderedFrames[this.globalData.frameNum]||(this.renderedFrames[this.globalData.frameNum]={tr:"matrix("+this.finalTransform.mat.props.join(",")+")",o:this.finalTransform.opacity});var n=this.renderedFrames[this.globalData.frameNum];this.lastData.tr!=n.tr&&(this.lastData.tr=n.tr,this.layerElement.setAttribute("transform",n.tr)),this.lastData.o!=n.o&&(this.lastData.o=n.o,this.layerElement.setAttribute("opacity",n.o))}return this.isVisible},BaseElement.prototype.getDomElement=function(){return this.layerElement},BaseElement.prototype.setMainElement=function(t){this.mainElement=t},BaseElement.prototype.getMaskManager=function(){return this.maskManager},BaseElement.prototype.addMasks=function(t){var e={data:{value:t},element:{value:this},globalData:{value:this.globalData}};this.maskManager=createElement(MaskElement,null,e)},BaseElement.prototype.createEffectsManager=function(t){var e={effects:{value:t.eff},element:{value:this}};this.effectsManager=createElement(EffectsManager,null,e)},BaseElement.prototype.getType=function(){return this.type},BaseElement.prototype.getLayerSize=function(){return"TextLayer"==this.data.type?{w:this.data.textData.width,h:this.data.textData.height}:{w:this.data.width,h:this.data.height}},BaseElement.prototype.hide=function(){},createElement(BaseElement,ICompElement),ICompElement.prototype.getComposingElement=function(){return this.layerElement},ICompElement.prototype.hide=function(){if(!this.hidden){var t,e=this.layers.length;for(t=0;e>t;t+=1)this.layers[t].element.hide();this.hidden=!0}},ICompElement.prototype.renderFrame=function(t,e){var a=this.parent.renderFrame.call(this,t,e);if(a===!1)return void this.hide();this.hidden=!1;var i,r=this.layers.length,s=this.data.tm?this.data.tm[t]<0?0:t>=this.data.tm.length?this.data.tm[this.data.tm.length-1]:this.data.tm[t]:t;for(i=0;r>i;i+=1)this.layers[i].element.prepareFrame(s-this.layers[i].startTime);for(i=0;r>i;i+=1)this.data.hasMask?this.layers[i].element.renderFrame(s-this.layers[i].startTime):this.layers[i].element.renderFrame(s-this.layers[i].startTime,this.finalTransform)},createElement(BaseElement,IImageElement),IImageElement.prototype.createElements=function(){var t=this,e=function(){t.image.setAttributeNS("http://www.w3.org/1999/xlink","href",t.path+t.assets[t.data.assetId].path),t.maskedElement=t.image,t.animationItem.elementLoaded()},a=new Image;a.addEventListener("load",e,!1),a.src=this.path+this.assets[this.data.assetId].path,this.parent.createElements.call(this),this.image=document.createElementNS(svgNS,"image"),this.image.setAttribute("width",this.data.width+"px"),this.image.setAttribute("height",this.data.height+"px"),this.layerElement.appendChild(this.image)},IImageElement.prototype.hide=function(){this.hidden||(this.image.setAttribute("opacity","0"),this.hidden=!0)},IImageElement.prototype.renderFrame=function(t,e){var a=this.parent.renderFrame.call(this,t,e);if(a===!1)return void this.hide();if(this.hidden=!1,!this.data.hasMask){this.renderedFrames[this.globalData.frameNum]||(this.renderedFrames[this.globalData.frameNum]={tr:"matrix("+this.finalTransform.mat.props.join(",")+")",o:this.finalTransform.opacity});var i=this.renderedFrames[this.globalData.frameNum];this.lastData.tr!=i.tr&&(this.lastData.tr=i.tr,this.image.setAttribute("transform",i.tr)),this.lastData.o!=i.o&&(this.lastData.o=i.o,this.image.setAttribute("opacity",i.o))}},createElement(BaseElement,IShapeElement),IShapeElement.prototype.createElements=function(){this.parent.createElements.call(this),this.mainShape=new ShapeItemElement(this.data.shapes,this.layerElement,this.globalData)},IShapeElement.prototype.renderFrame=function(t,e){var a=this.parent.renderFrame.call(this,t,e);return a===!1?void this.hide():void this.renderShapes(t)},IShapeElement.prototype.hide=function(){this.hidden||(this.mainShape.hideShape(),this.hidden=!0)},IShapeElement.prototype.renderShapes=function(t){this.hidden=!1,this.data.hasMask?this.mainShape.renderShape(t):this.mainShape.renderShape(t,this.finalTransform)},ShapeItemElement.prototype.searchShapes=function(t){var e,a,i,r,s=t.length-1,n=[];for(e=s;e>=0;e-=1)if("fl"==t[e].ty||"st"==t[e].ty)t[e].renderedFrames=[],t[e].lastData={c:"",o:"",w:""},this.stylesList.push({elements:[],type:t[e].ty,d:""}),t[e].style=this.stylesList[this.stylesList.length-1],n.push(t[e].style);else if("gr"==t[e].ty)this.searchShapes(t[e].it);else if("tr"==t[e].ty)t[e].transform={mat:new Matrix,opacity:1};else if("sh"==t[e].ty)for(t[e].elements=[],t[e].renderedFrames=[],t[e].lastData={d:"",o:"",tr:""},i=this.stylesList.length,a=0;i>a;a+=1)this.stylesList[a].closed||(r=document.createElementNS(svgNS,"path"),t[e].elements.push(r),this.shape.appendChild(r),this.stylesList[a].elements.push(r),"st"==this.stylesList[a].type&&(r.setAttribute("fill-opacity",0),r.setAttribute("stroke-linejoin","round"),r.setAttribute("stroke-linecap","round")));else if("rc"==t[e].ty)for(t[e].elements=[],t[e].renderedFrames=[],t[e].lastData={roundness:"",w:"",h:"",x:"",y:"",o:"",tr:""},t[e].renderedFrames=[],i=this.stylesList.length,a=0;i>a;a+=1)this.stylesList[a].closed||(r=document.createElementNS(svgNS,"rect"),t[e].elements.push(r),this.shape.appendChild(r),this.stylesList[a].elements.push(r),"st"==this.stylesList[a].type&&r.setAttribute("fill-opacity",0));else if("el"==t[e].ty)for(t[e].elements=[],t[e].renderedFrames=[],t[e].lastData={cx:"",cy:"",rx:"",ry:"",o:"",tr:""},i=this.stylesList.length,a=0;i>a;a+=1)this.stylesList[a].closed||(r=document.createElementNS(svgNS,"ellipse"),t[e].elements.push(r),this.shape.appendChild(r),this.stylesList[a].elements.push(r),"st"==this.stylesList[a].type&&r.setAttribute("fill-opacity",0));for(s=n.length,e=0;s>e;e+=1)n[e].closed=!0},ShapeItemElement.prototype.getElement=function(){return this.shape},ShapeItemElement.prototype.hideShape=function(t){t||(t=this.data);var e,a,i,r,s=this.stylesList.length;for(s=t.length-1,e=s;e>=0;e-=1)if("sh"==t[e].ty||"el"==t[e].ty||"rc"==t[e].ty)for(t[e].lastData.o="",r=t[e].elements,i=r.length,a=0;i>a;a+=1)r[a].setAttribute("opacity","0");else"gr"==t[e].ty&&this.hideShape(t[e].it)},ShapeItemElement.prototype.renderShape=function(t,e,a){a||(a=this.data),this.posCount=0,this.frameNum=t;var i,r;r=a.length-1;var s,n;for(s=e,i=r;i>=0;i-=1)if("tr"==a[i].ty){var o=a[i].renderedData[t].mtArr;if(s=a[i].transform,n=s.mat,n.reset(),e){var h=e.mat.props;s.opacity=e.opacity,s.opacity*=a[i].renderedData[t].o,n.transform(h[0],h[1],h[2],h[3],h[4],h[5])}else s.opacity=a[i].renderedData[t].o;n.transform(o[0],o[1],o[2],o[3],o[4],o[5]).translate(-a[i].renderedData[t].a[0],-a[i].renderedData[t].a[1])}else"sh"==a[i].ty?this.renderPath(a[i],t,s):"el"==a[i].ty?this.renderEllipse(a[i],t,s):"rc"==a[i].ty?this.renderRect(a[i],t,s):"fl"==a[i].ty?this.renderFill(a[i],t):"st"==a[i].ty?this.renderStroke(a[i],t):"gr"==a[i].ty&&this.renderShape(t,s,a[i].it)},ShapeItemElement.prototype.renderPath=function(t,e,a){t.renderedFrames[this.globalData.frameNum]||(t.renderedFrames[this.globalData.frameNum]={d:t.renderedData[e].path.pathString,tr:"matrix("+a.mat.props.join(",")+")",o:a.opacity});var i,r=t.renderedFrames[this.globalData.frameNum],s=r.d,n=r.tr,o=r.o,h=t.elements,l=h.length;for(i=0;l>i;i+=1)t.lastData.d!=s&&h[i].setAttribute("d",s),t.lastData.tr!=n&&h[i].setAttribute("transform",n),t.lastData.o!=o&&h[i].setAttribute("opacity",o);t.lastData.d=s,t.lastData.tr=n,t.lastData.o=o},ShapeItemElement.prototype.renderEllipse=function(t,e,a){var i=t.renderedData[e];t.renderedFrames[this.globalData.frameNum]||(t.renderedFrames[this.globalData.frameNum]={cx:i.p[0],cy:i.p[1],rx:i.size[0]/2,ry:i.size[1]/2,tr:"matrix("+a.mat.props.join(",")+")",o:a.opacity});var r,s=t.renderedFrames[this.globalData.frameNum],n=s.cx,o=s.cy,h=s.rx,l=s.ry,m=s.tr,p=s.o,d=t.elements,c=d.length;for(r=0;c>r;r+=1)t.lastData.cx!=n&&d[r].setAttribute("cx",n),t.lastData.cy!=o&&d[r].setAttribute("cy",o),t.lastData.rx!=h&&d[r].setAttribute("rx",h),t.lastData.ry!=l&&d[r].setAttribute("ry",l),t.lastData.tr!=m&&d[r].setAttribute("transform",m),t.lastData.o!=p&&d[r].setAttribute("opacity",p);t.lastData.cx=n,t.lastData.cy=o,t.lastData.rx=h,t.lastData.ry=l,t.lastData.tr=m,t.lastData.o=p},ShapeItemElement.prototype.renderRect=function(t,e,a){var i,r=t.elements,s=t.renderedData[e];t.renderedFrames[this.globalData.frameNum]||(i=s.roundness,i>s.size[0]/2&&(i=s.size[0]/2),i>s.size[1]/2&&(i=s.size[1]/2),t.renderedFrames[this.globalData.frameNum]={round:i,w:s.size[0],h:s.size[1],x:s.position[0]-s.size[0]/2,y:s.position[1]-s.size[1]/2,tr:"matrix("+a.mat.props.join(",")+")",o:a.opacity});var n=t.renderedFrames[this.globalData.frameNum];i=n.round;var o,h=n.w,l=n.h,m=n.x,p=n.y,d=n.tr,c=n.o,u=r.length;for(o=0;u>o;o+=1)t.lastData.roundness!=i&&(r[o].setAttribute("rx",i),r[o].setAttribute("ry",i)),t.lastData.w!=h&&r[o].setAttribute("width",h),t.lastData.h!=l&&r[o].setAttribute("height",l),t.lastData.x!=m&&r[o].setAttribute("x",m),t.lastData.y!=p&&r[o].setAttribute("y",p),t.lastData.tr!=d&&r[o].setAttribute("transform",d),t.lastData.o!=c&&r[o].setAttribute("opacity",c);t.lastData.roundness=i,t.lastData.w=h,t.lastData.h=l,t.lastData.x=m,t.lastData.y=p,t.lastData.o=c},ShapeItemElement.prototype.renderFill=function(t,e){var a=t.renderedData[e],i=t.style;t.renderedFrames[this.globalData.frameNum]||(t.renderedFrames[this.globalData.frameNum]={c:a.color,o:a.opacity});var r,s=t.renderedFrames[this.globalData.frameNum],n=s.c,o=s.o,h=i.elements,l=h.length;for(r=0;l>r;r+=1)t.lastData.c!=n&&h[r].setAttribute("fill",n),t.lastData.o!=o&&h[r].setAttribute("fill-opacity",o);t.lastData.c=n,t.lastData.o=o},ShapeItemElement.prototype.renderStroke=function(t,e){var a=t.renderedData[e],i=t.style;t.renderedFrames[this.globalData.frameNum]||(t.renderedFrames[this.globalData.frameNum]={c:a.color,o:a.opacity,w:a.width});var r,s=t.renderedFrames[this.globalData.frameNum],n=s.c,o=s.o,h=s.w,l=i.elements,m=l.length;for(r=0;m>r;r+=1)t.lastData.c!=n&&l[r].setAttribute("stroke",n),t.lastData.o!=o&&l[r].setAttribute("stroke-opacity",o),t.lastData.o!=o&&l[r].setAttribute("stroke-width",h);t.lastData.c=n,t.lastData.o=o,t.lastData.w=h},createElement(BaseElement,ISolidElement),ISolidElement.prototype.createElements=function(){this.parent.createElements.call(this);var t=document.createElementNS(svgNS,"rect");t.setAttribute("width",this.data.width),t.setAttribute("height",this.data.height),t.setAttribute("fill",this.data.color),this.layerElement.appendChild(t),this.rectElement=t},ISolidElement.prototype.hide=function(){this.hidden||(this.rectElement.setAttribute("opacity","0"),this.hidden=!0)},ISolidElement.prototype.renderFrame=function(t,e){var a=this.parent.renderFrame.call(this,t,e);if(a===!1)return void this.hide();if(this.hidden=!1,!this.data.hasMask){this.renderedFrames[this.globalData.frameNum]||(this.renderedFrames[this.globalData.frameNum]={tr:"matrix("+this.finalTransform.mat.props.join(",")+")",o:this.finalTransform.opacity});var i=this.renderedFrames[this.globalData.frameNum];this.lastData.tr!=i.tr&&(this.lastData.tr=i.tr,this.rectElement.setAttribute("transform",i.tr)),this.lastData.o!=i.o&&(this.lastData.o=i.o,this.rectElement.setAttribute("opacity",i.o))}},createElement(BaseElement,ITextElement),ITextElement.prototype.createElements=function(){this.svgElem=document.createElementNS(svgNS,"g");var t=document.createElementNS(svgNS,"text");t.textContent=this.data.textData.text,t.setAttribute("fill",this.data.textData.fillColor),t.setAttribute("x","0"),t.setAttribute("y",this.data.textData.height-(this.data.textData.fontSize-this.data.textData.height)/2),this.svgElem.setAttribute("width",this.data.textData.width),this.svgElem.setAttribute("height",this.data.textData.height),this.svgElem.style.transform=this.svgElem.style.webkitTransform="translate("+this.data.textData.xOffset+"px,"+this.data.textData.yOffset+"px)",t.setAttribute("font-size",this.data.textData.fontSize),t.setAttribute("font-family","Arial, sans-serif"),this.svgElem.appendChild(t),this.parent.createElements.call(this),this.anchorElement.appendChild(this.svgElem),this.maskedElement=t},CVBaseElement.prototype.init=function(){this.createElements(),this.data.hasMask&&this.addMasks(this.data),this.data.eff&&this.createEffectsManager(this.data)},CVBaseElement.prototype.createElements=function(){},CVBaseElement.prototype.prepareFrame=function(t){return this.data.inPoint-this.data.startTime<=t&&this.data.outPoint-this.data.startTime>=t?(this.renderFrame=!0,this.currentAnimData=this.data.renderedData[t].an,void(this.data.hasMask&&this.maskManager.prepareFrame(t))):(this.renderFrame=!1,this.currentAnimData=this.data.renderedData[t].an,!1)},CVBaseElement.prototype.draw=function(t){if(t!==!1&&this.renderer.canvasContext.save(),!this.renderFrame)return!1;var e,a=this.renderer.canvasContext;if(this.data.parentHierarchy){var i,r,s=this.data.parentHierarchy.length;for(i=s-1;i>=0;i-=1)r=this.data.parentHierarchy[i].element.getCurrentAnimData(),e=r.matrixArray,a.transform(e[0],e[1],e[2],e[3],e[4],e[5]),a.translate(-r.tr.a[0],-r.tr.a[1])}a.globalAlpha=a.globalAlpha*this.currentAnimData.tr.o,e=this.currentAnimData.matrixArray,a.transform(e[0],e[1],e[2],e[3],e[4],e[5]),a.translate(-this.currentAnimData.tr.a[0],-this.currentAnimData.tr.a[1]),this.data.hasMask&&this.maskManager.draw(),t!==!1&&this.renderer.canvasContext.restore()},CVBaseElement.prototype.getCurrentAnimData=function(){return this.currentAnimData},CVBaseElement.prototype.addMasks=function(t){var e={data:{value:t},element:{value:this}};this.maskManager=createElement(CVMaskElement,null,e)},CVBaseElement.prototype.createEffectsManager=function(t){var e={effects:{value:t.eff},element:{value:this}};this.effectsManager=createElement(EffectsManager,null,e)},CVBaseElement.prototype.getType=function(){return this.type},CVBaseElement.prototype.getLayerSize=function(){return"TextLayer"==this.data.type?{w:this.data.textData.width,h:this.data.textData.height}:{w:this.data.width,h:this.data.height}},createElement(CVBaseElement,CVCompElement),CVCompElement.prototype.prepareFrame=function(t){var e=this.parent.prepareFrame.call(this,t);if(e!==!1){var a,i=this.layers.length,r=this.data.tm?this.data.tm[t]<0?0:t>=this.data.tm.length?this.data.tm[this.data.tm.length-1]:this.data.tm[t]:t;for(a=0;i>a;a+=1)this.layers[a].element.prepareFrame(r-this.layers[a].startTime)}},CVCompElement.prototype.draw=function(){if(this.renderer.canvasContext.save(),this.parent.draw.call(this,!1)===!1)return void this.renderer.canvasContext.restore();var t,e=this.layers.length;for(t=e-1;t>=0;t-=1)this.layers[t].element.draw();this.renderer.canvasContext.restore()},createElement(CVBaseElement,CVImageElement),CVImageElement.prototype.createElements=function(){var t=this,e=function(){t.animationItem.elementLoaded()};this.img=new Image,this.img.addEventListener("load",e,!1),this.img.src=this.path+this.assets[this.data.assetId].path,this.parent.createElements.call(this)},CVImageElement.prototype.draw=function(){if(this.renderer.canvasContext.save(),this.parent.draw.call(this,!1)===!1)return void this.renderer.canvasContext.restore();var t=this.renderer.canvasContext;t.drawImage(this.img,0,0),this.renderer.canvasContext.restore()},createElement(CVBaseElement,CVShapeElement),CVShapeElement.prototype.createElements=function(){this.parent.createElements.call(this),this.mainShape=new CVShapeItemElement(this.data.shapes,this.renderer,!0,this.globalData)},CVShapeElement.prototype.prepareFrame=function(t){var e=this.parent.prepareFrame.call(this,t);e!==!1&&this.mainShape.prepareFrame(t)},CVShapeElement.prototype.draw=function(){return this.renderer.canvasContext.save(),this.parent.draw.call(this,!1)===!1?void this.renderer.canvasContext.restore():(this.drawShapes(),void this.renderer.canvasContext.restore())},CVShapeElement.prototype.drawShapes=function(){this.mainShape.renderShape()},CVShapeItemElement.prototype.drawPaths=function(t){var e;if(t){var a=[];e=this.stylesList}else e=this.renderedPaths[this.globalData.frameNum];var i,r=e.length;for(this.renderer.canvasContext.save(),i=0;r>i;i+=1)"stroke"==e[i].type?(this.renderer.canvasContext.globalAlpha*=e[i].opacity,this.renderer.canvasContext.strokeStyle=e[i].value,this.renderer.canvasContext.lineWidth=e[i].width,this.renderer.canvasContext.stroke(e[i].path),t&&a.push({type:e[i].type,opacity:e[i].opacity,value:e[i].value,width:e[i].width,path:e[i].path})):"fill"==e[i].type&&(this.renderer.canvasContext.globalAlpha*=e[i].opacity,this.renderer.canvasContext.fillStyle=e[i].value,this.renderer.canvasContext.fill(e[i].path),t&&a.push({type:e[i].type,opacity:e[i].opacity,value:e[i].value,path:e[i].path}));this.renderer.canvasContext.restore(),t&&(this.renderedPaths[this.globalData.frameNum]=a)},CVShapeItemElement.prototype.prepareFrame=function(t){this.frameNum=t;var e,a=this.dataLength-1;for(e=a;e>=0;e-=1)"gr"==this.data[e].ty&&this.data[e].item.prepareFrame(t)},CVShapeItemElement.prototype.renderShape=function(t,e){if(this.renderedPaths[this.globalData.frameNum])return void this.drawPaths(!1);this.opacityMultiplier=1;var a,i;this.ownStylesList.length=0,this.currentStylePoolPos=0,t?this.stylesList=t:this.stylesList.length=0,e?this.currentMatrix=e:(this.currentMatrix.a=this.currentMatrix.d=1,this.currentMatrix.b=this.currentMatrix.c=this.currentMatrix.e=this.currentMatrix.f=0),i=this.dataLength-1;var r=this.renderer.canvasContext;for(r.lineCap="round",r.lineJoin="round",a=i;a>=0;a-=1)"gr"==this.data[a].ty?this.data[a].item.renderShape(this.stylesList,this.currentMatrix):"tr"==this.data[a].ty?this.renderTransform(this.data[a]):"sh"==this.data[a].ty?this.renderPath(this.data[a]):"el"==this.data[a].ty?this.renderEllipse(this.data[a]):"rc"==this.data[a].ty?this.renderRect(this.data[a]):"fl"==this.data[a].ty?this.renderFill(this.data[a]):"st"==this.data[a].ty&&this.renderStroke(this.data[a]);if(this.mainFlag)this.drawPaths(!0);else for(i=this.ownStylesList.length,a=0;i>a;a+=1)this.ownStylesList[a].closed=!0},CVShapeItemElement.prototype.renderTransform=function(t){var e=t.renderedData[this.frameNum],a=e.mtArr;this.mat.a=a[0],this.mat.b=a[1],this.mat.c=a[2],this.mat.d=a[3],this.mat.e=a[4],this.mat.f=a[5],this.mat=this.mat.translate(-e.a[0],-e.a[1]),this.opacityMultiplier*=e.o,this.currentMatrix=this.currentMatrix.multiply(this.mat)},CVShapeItemElement.prototype.renderPath=function(t){var e=t.renderedData[this.frameNum].path,a=new Path2D,i=e.pathNodes;i instanceof Array&&(i=i[0]);var r,s=i.i.length;for(a.moveTo(i.v[0][0],i.v[0][1]),r=1;s>r;r+=1)a.bezierCurveTo(i.o[r-1][0],i.o[r-1][1],i.i[r][0],i.i[r][1],i.v[r][0],i.v[r][1]);e.closed&&a.bezierCurveTo(i.o[r-1][0],i.o[r-1][1],i.i[0][0],i.i[0][1],i.v[0][0],i.v[0][1]),this.addPathToStyles(a)},CVShapeItemElement.prototype.renderEllipse=function(t){var e=new Path2D,a=t.renderedData[this.frameNum];e.moveTo(a.p[0]+a.size[0]/2,a.p[1]),e.ellipse(a.p[0],a.p[1],a.size[0]/2,a.size[1]/2,0,0,2*Math.PI,!1),this.addPathToStyles(e)},CVShapeItemElement.prototype.renderRect=function(t){var e=new Path2D,a=t.renderedData[this.frameNum],i=a.roundness;if(0===i)e.rect(a.position[0]-a.size[0]/2,a.position[1]-a.size[1]/2,a.size[0],a.size[1]);else{var r=a.position[0]-a.size[0]/2,s=a.position[1]-a.size[1]/2,n=a.size[0],o=a.size[1];i instanceof Array&&(i=i[0]),i>n/2&&(i=n/2),i>o/2&&(i=o/2),e.moveTo(r+i,s),e.lineTo(r+n-i,s),e.quadraticCurveTo(r+n,s,r+n,s+i),e.lineTo(r+n,s+o-i),e.quadraticCurveTo(r+n,s+o,r+n-i,s+o),e.lineTo(r+i,s+o),e.quadraticCurveTo(r,s+o,r,s+o-i),e.lineTo(r,s+i),e.quadraticCurveTo(r,s,r+i,s)}this.addPathToStyles(e)},CVShapeItemElement.prototype.addPathToStyles=function(t){var e,a=this.stylesList.length,i=!0,r=0;for(e=a-1;e>=0;e-=1)this.stylesList[e].closed||("stroke"==this.stylesList[e].type?(this.stylesList[e].width>r&&this.stylesList[e].path.addPath(t,this.currentMatrix),1==this.stylesList[e].styleOpacity&&1==this.stylesList[e].opacity&&(r=this.stylesList[e].width)):i&&"fill"==this.stylesList[e].type&&(this.stylesList[e].path.addPath(t,this.currentMatrix),1==this.stylesList[e].styleOpacity&&1==this.stylesList[e].opacity&&(i=!1)))},CVShapeItemElement.prototype.renderFill=function(t){var e=t.renderedData[this.frameNum];return t.fillEnabled!==!1?(this.stylesPool[this.currentStylePoolPos].path=new Path2D,this.stylesPool[this.currentStylePoolPos].closed=!1,this.stylesPool[this.currentStylePoolPos].styleOpacity=e.opacity<1?e.opacity:1,this.stylesPool[this.currentStylePoolPos].opacity=this.opacityMultiplier,this.stylesPool[this.currentStylePoolPos].value=e.opacity<1?fillColorToString(e.color,e.opacity):fillColorToString(e.color),this.stylesList.push(this.stylesPool[this.currentStylePoolPos]),this.ownStylesList.push(this.stylesList[this.stylesList.length-1]),void(this.currentStylePoolPos+=1)):(this.stylesList.push(this.stylesPool[this.currentStylePoolPos]),this.ownStylesList.push(this.stylesList[this.stylesList.length-1]),void(this.currentStylePoolPos+=1))},CVShapeItemElement.prototype.renderStroke=function(t){var e=t.renderedData[this.frameNum];return this.data.strokeEnabled!==!1?(this.stylesPool[this.currentStylePoolPos].path=new Path2D,this.stylesPool[this.currentStylePoolPos].closed=!1,this.stylesPool[this.currentStylePoolPos].styleOpacity=e.opacity<1?e.opacity:1,this.stylesPool[this.currentStylePoolPos].width=e.width,this.stylesPool[this.currentStylePoolPos].opacity=this.opacityMultiplier,this.stylesPool[this.currentStylePoolPos].value=e.opacity<1?fillColorToString(e.color,e.opacity):fillColorToString(e.color),this.stylesList.push(this.stylesPool[this.currentStylePoolPos]),this.ownStylesList.push(this.stylesList[this.stylesList.length-1]),void(this.currentStylePoolPos+=1)):(this.stylesList.push(this.stylesPool[this.currentStylePoolPos]),this.ownStylesList.push(this.stylesList[this.stylesList.length-1]),void(this.currentStylePoolPos+=1))},createElement(CVBaseElement,CVSolidElement),CVSolidElement.prototype.draw=function(){if(this.renderer.canvasContext.save(),this.parent.draw.call(this,!1)===!1)return void this.renderer.canvasContext.restore();var t=this.renderer.canvasContext;t.fillStyle=this.data.color,t.fillRect(0,0,this.data.width,this.data.height),this.renderer.canvasContext.restore()},createElement(CVBaseElement,CVTextElement),CVTextElement.prototype.createElements=function(){this.svgElem=document.createElementNS(svgNS,"g");var t=document.createElementNS(svgNS,"text");t.textContent=this.data.textData.text,t.setAttribute("fill",this.data.textData.fillColor),t.setAttribute("x","0"),t.setAttribute("y",this.data.textData.height-(this.data.textData.fontSize-this.data.textData.height)/2),this.svgElem.setAttribute("width",this.data.textData.width),this.svgElem.setAttribute("height",this.data.textData.height),this.svgElem.style.transform=this.svgElem.style.webkitTransform="translate("+this.data.textData.xOffset+"px,"+this.data.textData.yOffset+"px)",t.setAttribute("font-size",this.data.textData.fontSize),t.setAttribute("font-family","Arial, sans-serif"),this.svgElem.appendChild(t),this.parent.createElements.call(this),this.anchorElement.appendChild(this.svgElem),this.maskedElement=t},CVMaskElement.prototype.init=function(){this.registeredEffects=[],this.masksProperties=this.data.masksProperties,this.totalMasks=this.masksProperties.length,this.ctx=this.element.renderer.canvasContext,this.layerSize=this.element.getLayerSize()},CVMaskElement.prototype.prepareFrame=function(t){this.frameNum=t},CVMaskElement.prototype.draw=function(){var t,e=this.data.masksProperties.length;for(this.ctx.beginPath(),t=0;e>t;t++)this.masksProperties[t].inv?this.createInvertedMask(this.masksProperties[t],this.frameNum):this.drawShape(this.ctx,this.data.masksProperties[t].paths[this.frameNum].pathNodes);this.ctx.closePath(),this.ctx.clip()},CVMaskElement.prototype.drawShape=function(t,e){var a,i=e.v.length;for(t.moveTo(e.v[0][0],e.v[0][1]),a=1;i>a;a++)t.bezierCurveTo(e.o[a-1][0],e.o[a-1][1],e.i[a][0],e.i[a][1],e.v[a][0],e.v[a][1]);t.bezierCurveTo(e.o[a-1][0],e.o[a-1][1],e.i[0][0],e.i[0][1],e.v[0][0],e.v[0][1])
},CVMaskElement.prototype.createInvertedMask=function(){};var animationManager=function(){function t(t){if(!t)return null;for(var e=0;v>e;){if(f[e].elem==t&&null!==f[e].elem)return f[e].animation;e+=1}var a=new AnimationItem;return a.setData(t),f.push({elem:t,animation:a}),v+=1,a}function e(t){var e=new AnimationItem;return e.setParams(t),f.push({elem:null,animation:e}),v+=1,e}function a(t,e){var a;for(a=0;v>a;a+=1)f[a].animation.setSpeed(t,e)}function i(t,e){var a;for(a=0;v>a;a+=1)f[a].animation.setDirection(t,e)}function r(t){var e;for(e=0;v>e;e+=1)f[e].animation.play(t)}function s(t,e){g=!1,y=Date.now();var a;for(a=0;v>a;a+=1)f[a].animation.moveFrame(t,e)}function n(){var t,e=Date.now(),a=e-y;for(t=0;v>t;t+=1)f[t].animation.advanceTime(a);y=e,requestAnimationFrame(n)}function o(t){var e;for(e=0;v>e;e+=1)f[e].animation.pause(t)}function h(t,e,a){var i;for(i=0;v>i;i+=1)f[i].animation.goToAndStop(t,e,a)}function l(t){var e;for(e=0;v>e;e+=1)f[e].animation.stop(t)}function m(t){var e;for(e=0;v>e;e+=1)f[e].animation.togglePause(t)}function p(){var e=document.getElementsByClassName("bodymovin");Array.prototype.forEach.call(e,t)}function d(){var t;for(t=0;v>t;t+=1)f[t].animation.resize()}function c(){y=Date.now(),requestAnimationFrame(n)}var u={},f=[],y=0,g=!0,v=0;return setTimeout(c,0),u.registerAnimation=t,u.loadAnimation=e,u.setSpeed=a,u.setDirection=i,u.play=r,u.moveFrame=s,u.pause=o,u.stop=l,u.togglePause=m,u.searchAnimations=p,u.resize=d,u.start=c,u.goToAndStop=h,u}(),AnimationItem=function(){this.name="",this.path="",this.isLoaded=!1,this.currentFrame=0,this.currentRawFrame=0,this.totalFrames=0,this.frameRate=0,this.frameMult=0,this.playSpeed=1,this.playDirection=1,this.pendingElements=0,this.playCount=0,this.prerenderFramesFlag=!0,this.repeat="indefinite",this.animationData={},this.layers=[],this.assets=[],this.isPaused=!0,this.isScrolling=!1,this.autoplay=!1,this.loop=!0,this.renderer=null,this.animationID=randomString(10),this.renderedFrameCount=0,this.scaleMode="fit",this.math=Math};AnimationItem.prototype.setParams=function(t){var e=this;t.context&&(this.context=t.context),t.wrapper&&(this.wrapper=t.wrapper);var a=t.animType?t.animType:"canvas";switch(a){case"canvas":this.renderer=new CanvasRenderer(this,t.renderer);break;case"svg":this.renderer=new SVGRenderer(this,t.renderer)}if(this.animType=a,""===t.loop||null===t.loop||(this.loop=t.loop===!1?!1:t.loop===!0?!0:parseInt(t.loop)),this.autoplay="autoplay"in t?t.autoplay:!0,this.name=t.name?t.name:"",this.prerenderFramesFlag="prerender"in t?t.prerender:!0,t.animationData)e.configAnimation(t.animationData);else if(t.path){"json"!=t.path.substr(-4)&&("/"!=t.path.substr(-1,1)&&(t.path+="/"),t.path+="data.json");var i=new XMLHttpRequest;this.path=t.path.substr(0,t.path.lastIndexOf("/")+1),i.open("GET",t.path,!0),i.send(),i.onreadystatechange=function(){if(4==i.readyState)if(200==i.status)e.configAnimation(JSON.parse(i.responseText));else try{var t=JSON.parse(i.responseText);e.configAnimation(t)}catch(a){}}}},AnimationItem.prototype.setData=function(t){var e={wrapper:t},a=t.attributes;e.path=a.getNamedItem("data-animation-path")?a.getNamedItem("data-animation-path").value:a.getNamedItem("data-bm-path")?a.getNamedItem("data-bm-path").value:a.getNamedItem("bm-path")?a.getNamedItem("bm-path").value:"",e.animType=a.getNamedItem("data-anim-type")?a.getNamedItem("data-anim-type").value:a.getNamedItem("data-bm-type")?a.getNamedItem("data-bm-type").value:a.getNamedItem("bm-type")?a.getNamedItem("bm-type").value:"canvas";var i=a.getNamedItem("data-anim-loop")?a.getNamedItem("data-anim-loop").value:a.getNamedItem("data-bm-loop")?a.getNamedItem("data-bm-loop").value:a.getNamedItem("bm-loop")?a.getNamedItem("bm-loop").value:"";""===i||(e.loop="false"===i?!1:"true"===i?!0:parseInt(i)),e.name=a.getNamedItem("data-name")?a.getNamedItem("data-name").value:a.getNamedItem("data-bm-name")?a.getNamedItem("data-bm-name").value:a.getNamedItem("bm-name")?a.getNamedItem("bm-name").value:"";var r=a.getNamedItem("data-anim-prerender")?a.getNamedItem("data-anim-prerender").value:a.getNamedItem("data-bm-prerender")?a.getNamedItem("data-bm-prerender").value:a.getNamedItem("bm-prerender")?a.getNamedItem("bm-prerender").value:"";"false"===r&&(e.prerender=!1),this.setParams(e)},AnimationItem.prototype.configAnimation=function(t){this.renderer.configAnimation(t),this.animationData=t,this.animationData._id=this.animationID,this.animationData._animType=this.animType,this.layers=this.animationData.animation.layers,this.assets=this.animationData.assets,this.totalFrames=this.animationData.animation.totalFrames,this.frameRate=this.animationData.animation.frameRate,this.firstFrame=Math.round(this.animationData.animation.ff*this.frameRate),this.frameMult=this.animationData.animation.frameRate/1e3,dataManager.completeData(this.animationData),this.renderer.buildItems(this.animationData.animation.layers,this.container),this.updaFrameModifier(),this.checkLoaded()},AnimationItem.prototype.elementLoaded=function(){this.pendingElements--,this.checkLoaded()},AnimationItem.prototype.checkLoaded=function(){this.renderer.buildStage(this.container,this.layers),0===this.pendingElements&&(this.prerenderFramesFlag?(this.prerenderFrames(0),dataManager.renderFrame(this.animationID,this.currentFrame+this.firstFrame),this.renderer.renderFrame(this.currentFrame+this.firstFrame)):(this.isLoaded=!0,this.gotoFrame(),this.autoplay&&this.play()))},AnimationItem.prototype.prerenderFrames=function(t){t||(t=0),this.renderedFrameCount===this.totalFrames?(this.isLoaded=!0,this.gotoFrame(),this.autoplay&&this.play()):(dataManager.renderFrame(this.animationID,this.renderedFrameCount+this.firstFrame),this.renderedFrameCount+=1,t>5?setTimeout(this.prerenderFrames.bind(this),0):(t+=1,this.prerenderFrames(t)))},AnimationItem.prototype.resize=function(){this.renderer.updateContainerSize()},AnimationItem.prototype.gotoFrame=function(){this.currentFrame=subframeEnabled?this.math.round(100*this.currentRawFrame)/100:this.math.floor(this.currentRawFrame),this.renderFrame()},AnimationItem.prototype.renderFrame=function(){this.isLoaded!==!1&&(dataManager.renderFrame(this.animationID,this.currentFrame+this.firstFrame),this.renderer.renderFrame(this.currentFrame+this.firstFrame))},AnimationItem.prototype.play=function(t){t&&this.name!=t||this.isPaused===!0&&(this.isPaused=!1)},AnimationItem.prototype.pause=function(t){t&&this.name!=t||this.isPaused===!1&&(this.isPaused=!0)},AnimationItem.prototype.togglePause=function(t){t&&this.name!=t||(this.isPaused===!0?(this.isPaused=!1,this.play()):(this.isPaused=!0,this.pause()))},AnimationItem.prototype.stop=function(t){t&&this.name!=t||(this.isPaused=!0,this.currentFrame=this.currentRawFrame=0,this.playCount=0,this.gotoFrame())},AnimationItem.prototype.goToAndStop=function(t,e,a){a&&this.name!=a||(this.setCurrentRawFrameValue(e?t:t*this.frameModifier),this.isPaused=!0)},AnimationItem.prototype.advanceTime=function(t){this.isPaused!==!0&&this.isScrolling!==!0&&this.isLoaded!==!1&&this.setCurrentRawFrameValue(this.currentRawFrame+t*this.frameModifier)},AnimationItem.prototype.updateAnimation=function(t){this.setCurrentRawFrameValue(this.totalFrames*t)},AnimationItem.prototype.moveFrame=function(t,e){e&&this.name!=e||this.setCurrentRawFrameValue(this.currentRawFrame+t)},AnimationItem.prototype.setCurrentRawFrameValue=function(t){if(this.currentRawFrame=t,this.currentRawFrame>=this.totalFrames){if(this.loop===!1)return this.currentRawFrame=this.totalFrames-1,this.gotoFrame(),void this.pause();if(this.playCount+=1,this.loop!==!0&&this.playCount==this.loop)return this.currentRawFrame=this.totalFrames-1,this.gotoFrame(),void this.pause()}else if(this.currentRawFrame<0)return this.playCount-=1,this.playCount<0&&(this.playCount=0),this.loop===!1?(this.currentRawFrame=0,this.gotoFrame(),void this.pause()):(this.currentRawFrame=this.totalFrames+this.currentRawFrame,void this.gotoFrame());this.currentRawFrame=this.currentRawFrame%this.totalFrames,this.gotoFrame()},AnimationItem.prototype.setSpeed=function(t){this.playSpeed=t,this.updaFrameModifier()},AnimationItem.prototype.setDirection=function(t){this.playDirection=0>t?-1:1,this.updaFrameModifier()},AnimationItem.prototype.updaFrameModifier=function(){this.frameModifier=this.frameMult*this.playSpeed*this.playDirection},AnimationItem.prototype.getPath=function(){return this.path},AnimationItem.prototype.getAssets=function(){return this.assets},function(t){function e(t){animationManager.play(t)}function a(t){animationManager.pause(t)}function i(t){animationManager.togglePause(t)}function r(t,e){animationManager.setSpeed(t,e)}function s(t,e){animationManager.setDirection(t,e)}function n(t){animationManager.stop(t)}function o(t){animationManager.moveFrame(t)}function h(){animationManager.searchAnimations()}function l(t){return animationManager.registerAnimation(t)}function m(){animationManager.resize()}function p(){animationManager.start()}function d(t,e,a){animationManager.goToAndStop(t,e,a)}function c(t){subframeEnabled=t}function u(t){return animationManager.loadAnimation(t)}function f(){"complete"===document.readyState&&(clearInterval(g),h())}var y={};y.play=e,y.pause=a,y.togglePause=i,y.setSpeed=r,y.setDirection=s,y.stop=n,y.moveFrame=o,y.searchAnimations=h,y.registerAnimation=l,y.loadAnimation=u,y.setSubframeRendering=c,y.resize=m,y.start=p,y.goToAndStop=d,y.checkReady=f,t.bodymovin=y;var g=setInterval(f,100)}(window);}(window));