/**
 * almond 0.2.5 Copyright (c) 2011-2012, The Dojo Foundation All Rights Reserved.
 * Available via the MIT or new BSD license.
 * see: http://github.com/jrburke/almond for details
 */

// (c) 2010-2013 Thomas Fuchs

// Zepto.js may be freely distributed under the MIT license.

// Copyright 2006 Google Inc.

//   http://www.apache.org/licenses/LICENSE-2.0

/*!
 * ZRender, a lightweight canvas library with a MVC architecture, data-driven 
 * and provides an event model like DOM.
 *  
 * Copyright (c) 2013, Baidu Inc.
 * All rights reserved.
 * 
 * LICENSE
 * https://github.com/ecomfe/zrender/blob/master/LICENSE.txt
 */

/*!
 * ECharts, a javascript interactive chart library.
 *  
 * Copyright (c) 2013, Baidu Inc.
 * All rights reserved.
 * 
 * LICENSE
 * https://github.com/ecomfe/echarts/blob/master/LICENSE.txt
 */

(function(e){var t,n,r;(function(e){function d(e,t){return h.call(e,t)}function v(e,t){var n,r,i,s,o,u,a,f,c,h,p=t&&t.split("/"),d=l.map,v=d&&d["*"]||{};if(e&&e.charAt(0)===".")if(t){p=p.slice(0,p.length-1),e=p.concat(e.split("/"));for(f=0;f<e.length;f+=1){h=e[f];if(h===".")e.splice(f,1),f-=1;else if(h===".."){if(f===1&&(e[2]===".."||e[0]===".."))break;f>0&&(e.splice(f-1,2),f-=2)}}e=e.join("/")}else e.indexOf("./")===0&&(e=e.substring(2));if((p||v)&&d){n=e.split("/");for(f=n.length;f>0;f-=1){r=n.slice(0,f).join("/");if(p)for(c=p.length;c>0;c-=1){i=d[p.slice(0,c).join("/")];if(i){i=i[r];if(i){s=i,o=f;break}}}if(s)break;!u&&v&&v[r]&&(u=v[r],a=f)}!s&&u&&(s=u,o=a),s&&(n.splice(0,o,s),e=n.join("/"))}return e}function m(t,n){return function(){return s.apply(e,p.call(arguments,0).concat([t,n]))}}function g(e){return function(t){return v(t,e)}}function y(e){return function(t){a[e]=t}}function b(t){if(d(f,t)){var n=f[t];delete f[t],c[t]=!0,i.apply(e,n)}if(!d(a,t)&&!d(c,t))throw new Error("No "+t);return a[t]}function w(e){var t,n=e?e.indexOf("!"):-1;return n>-1&&(t=e.substring(0,n),e=e.substring(n+1,e.length)),[t,e]}function E(e){return function(){return l&&l.config&&l.config[e]||{}}}var i,s,o,u,a={},f={},l={},c={},h=Object.prototype.hasOwnProperty,p=[].slice;o=function(e,t){var n,r=w(e),i=r[0];return e=r[1],i&&(i=v(i,t),n=b(i)),i?n&&n.normalize?e=n.normalize(e,g(t)):e=v(e,t):(e=v(e,t),r=w(e),i=r[0],e=r[1],i&&(n=b(i))),{f:i?i+"!"+e:e,n:e,pr:i,p:n}},u={require:function(e){return m(e)},exports:function(e){var t=a[e];return typeof t!="undefined"?t:a[e]={}},module:function(e){return{id:e,uri:"",exports:a[e],config:E(e)}}},i=function(t,n,r,i){var s,l,h,p,v,g=[],w;i=i||t;if(typeof r=="function"){n=!n.length&&r.length?["require","exports","module"]:n;for(v=0;v<n.length;v+=1){p=o(n[v],i),l=p.f;if(l==="require")g[v]=u.require(t);else if(l==="exports")g[v]=u.exports(t),w=!0;else if(l==="module")s=g[v]=u.module(t);else if(d(a,l)||d(f,l)||d(c,l))g[v]=b(l);else{if(!p.p)throw new Error(t+" missing "+l);p.p.load(p.n,m(i,!0),y(l),{}),g[v]=a[l]}}h=r.apply(a[t],g);if(t)if(s&&s.exports!==e&&s.exports!==a[t])a[t]=s.exports;else if(h!==e||!w)a[t]=h}else t&&(a[t]=r)},t=n=s=function(t,n,r,a,f){return typeof t=="string"?u[t]?u[t](n):b(o(t,n).f):(t.splice||(l=t,n.splice?(t=n,n=r,r=null):t=e),n=n||function(){},typeof r=="function"&&(r=a,a=f),a?i(e,t,n,r):setTimeout(function(){i(e,t,n,r)},4),s)},s.config=function(e){return l=e,l.deps&&s(l.deps,l.callback),s},r=function(e,t,n){t.splice||(n=t,t=[]),!d(a,e)&&!d(f,e)&&(f[e]=[e,t,n])},r.amd={jQuery:!0}})(),r("zrender/tool/env",[],function(){function e(e){var t=this.os={},n=this.browser={},r=e.match(/Web[kK]it[\/]{0,1}([\d.]+)/),i=e.match(/(Android);?[\s\/]+([\d.]+)?/),s=e.match(/(iPad).*OS\s([\d_]+)/),o=e.match(/(iPod)(.*OS\s([\d_]+))?/),u=!s&&e.match(/(iPhone\sOS)\s([\d_]+)/),a=e.match(/(webOS|hpwOS)[\s\/]([\d.]+)/),f=a&&e.match(/TouchPad/),l=e.match(/Kindle\/([\d.]+)/),c=e.match(/Silk\/([\d._]+)/),h=e.match(/(BlackBerry).*Version\/([\d.]+)/),p=e.match(/(BB10).*Version\/([\d.]+)/),d=e.match(/(RIM\sTablet\sOS)\s([\d.]+)/),v=e.match(/PlayBook/),m=e.match(/Chrome\/([\d.]+)/)||e.match(/CriOS\/([\d.]+)/),g=e.match(/Firefox\/([\d.]+)/),y=e.match(/MSIE ([\d.]+)/),b=r&&e.match(/Mobile\//)&&!m,w=e.match(/(iPhone|iPod|iPad).*AppleWebKit(?!.*Safari)/)&&!m,y=e.match(/MSIE\s([\d.]+)/);if(n.webkit=!!r)n.version=r[1];return i&&(t.android=!0,t.version=i[2]),u&&!o&&(t.ios=t.iphone=!0,t.version=u[2].replace(/_/g,".")),s&&(t.ios=t.ipad=!0,t.version=s[2].replace(/_/g,".")),o&&(t.ios=t.ipod=!0,t.version=o[3]?o[3].replace(/_/g,"."):null),a&&(t.webos=!0,t.version=a[2]),f&&(t.touchpad=!0),h&&(t.blackberry=!0,t.version=h[2]),p&&(t.bb10=!0,t.version=p[2]),d&&(t.rimtabletos=!0,t.version=d[2]),v&&(n.playbook=!0),l&&(t.kindle=!0,t.version=l[1]),c&&(n.silk=!0,n.version=c[1]),!c&&t.android&&e.match(/Kindle Fire/)&&(n.silk=!0),m&&(n.chrome=!0,n.version=m[1]),g&&(n.firefox=!0,n.version=g[1]),y&&(n.ie=!0,n.version=y[1]),b&&(e.match(/Safari/)||!!t.ios)&&(n.safari=!0),w&&(n.webview=!0),y&&(n.ie=!0,n.version=y[1]),t.tablet=!!(s||v||i&&!e.match(/Mobile/)||g&&e.match(/Tablet/)||y&&!e.match(/Phone/)&&e.match(/Touch/)),t.phone=!!(!t.tablet&&!t.ipod&&(i||u||a||h||p||m&&e.match(/Android/)||m&&e.match(/CriOS\/([\d.]+)/)||g&&e.match(/Mobile/)||y&&e.match(/Touch/))),{browser:n,os:t,canvasSupported:document.createElement("canvas").getContext?!0:!1}}return e(navigator.userAgent)}),r("echarts/config",[],function(){var e={CHART_TYPE_LINE:"line",CHART_TYPE_BAR:"bar",CHART_TYPE_SCATTER:"scatter",CHART_TYPE_PIE:"pie",CHART_TYPE_RADAR:"radar",CHART_TYPE_MAP:"map",CHART_TYPE_K:"k",CHART_TYPE_ISLAND:"island",CHART_TYPE_FORCE:"force",CHART_TYPE_CHORD:"chord",COMPONENT_TYPE_TITLE:"title",COMPONENT_TYPE_LEGEND:"legend",COMPONENT_TYPE_DATARANGE:"dataRange",COMPONENT_TYPE_DATAVIEW:"dataView",COMPONENT_TYPE_DATAZOOM:"dataZoom",COMPONENT_TYPE_TOOLBOX:"toolbox",COMPONENT_TYPE_TOOLTIP:"tooltip",COMPONENT_TYPE_GRID:"grid",COMPONENT_TYPE_AXIS:"axis",COMPONENT_TYPE_POLAR:"polar",COMPONENT_TYPE_X_AXIS:"xAxis",COMPONENT_TYPE_Y_AXIS:"yAxis",COMPONENT_TYPE_AXIS_CATEGORY:"categoryAxis",COMPONENT_TYPE_AXIS_VALUE:"valueAxis",color:["#ff7f50","#87cefa","#da70d6","#32cd32","#6495ed","#ff69b4","#ba55d3","#cd5c5c","#ffa500","#40e0d0","#1e90ff","#ff6347","#7b68ee","#00fa9a","#ffd700","#6699FF","#ff6666","#3cb371","#b8860b","#30e0e0"],title:{text:"",subtext:"",x:"left",y:"top",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,textStyle:{fontSize:18,fontWeight:"bolder",color:"#333"},subtextStyle:{color:"#aaa"}},legend:{orient:"horizontal",x:"center",y:"top",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemWidth:20,itemHeight:14,textStyle:{color:"#333"},selectedMode:!0},dataRange:{orient:"vertical",x:"left",y:"bottom",backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemWidth:20,itemHeight:14,precision:0,splitNumber:5,calculable:!1,realtime:!0,color:["#006edd","#e0ffff"],textStyle:{color:"#333"}},toolbox:{show:!1,orient:"horizontal",x:"right",y:"top",color:["#1e90ff","#22bb22","#4b0082","#d2691e"],backgroundColor:"rgba(0,0,0,0)",borderColor:"#ccc",borderWidth:0,padding:5,itemGap:10,itemSize:16,showTitle:!0,feature:{mark:{show:!1,title:{mark:"辅助线开关",markUndo:"删除辅助线",markClear:"清空辅助线"},lineStyle:{width:1,color:"#1e90ff",type:"dashed"}},dataZoom:{show:!1,title:{dataZoom:"区域缩放",dataZoomReset:"区域缩放后退"}},dataView:{show:!1,title:"数据视图",readOnly:!1,lang:["Data View","close","refresh"]},magicType:{show:!1,title:{line:"折线图切换",bar:"柱形图切换",stack:"堆叠",tiled:"平铺"},type:[]},restore:{show:!1,title:"还原"},saveAsImage:{show:!1,title:"保存为图片",type:"png",lang:["点击保存"]}}},tooltip:{show:!0,showContent:!0,trigger:"item",islandFormatter:"{a} <br/>{b} : {c}",showDelay:20,hideDelay:100,transitionDuration:.4,backgroundColor:"rgba(0,0,0,0.7)",borderColor:"#333",borderRadius:4,borderWidth:0,padding:5,axisPointer:{type:"line",lineStyle:{color:"#48b",width:2,type:"solid"},areaStyle:{size:"auto",color:"rgba(150,150,150,0.3)"}},textStyle:{color:"#fff"}},dataZoom:{show:!1,orient:"horizontal",backgroundColor:"rgba(0,0,0,0)",dataBackgroundColor:"#eee",fillerColor:"rgba(144,197,237,0.2)",handleColor:"rgba(70,130,180,0.8)",realtime:!0},grid:{x:80,y:60,x2:80,y2:60,backgroundColor:"rgba(0,0,0,0)",borderWidth:1,borderColor:"#ccc"},categoryAxis:{position:"bottom",name:"",nameLocation:"end",nameTextStyle:{},boundaryGap:!0,axisLine:{show:!0,lineStyle:{color:"#48b",width:2,type:"solid"}},axisTick:{show:!0,interval:"auto",inside:!1,length:5,lineStyle:{color:"#333",width:1}},axisLabel:{show:!0,interval:"auto",rotate:0,margin:8,textStyle:{color:"#333"}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}},valueAxis:{position:"left",name:"",nameLocation:"end",nameTextStyle:{},boundaryGap:[0,0],precision:0,power:100,splitNumber:5,axisLine:{show:!0,lineStyle:{color:"#48b",width:2,type:"solid"}},axisTick:{show:!1,inside:!1,length:5,lineStyle:{color:"#333",width:1}},axisLabel:{show:!0,rotate:0,margin:8,textStyle:{color:"#333"}},splitLine:{show:!0,lineStyle:{color:["#ccc"],width:1,type:"solid"}},splitArea:{show:!1,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}}},polar:{center:["50%","50%"],radius:"75%",startAngle:90,splitNumber:5,name:{show:!0,textStyle:{color:"#333"}},axisLine:{show:!0,lineStyle:{color:"#ccc",width:1,type:"solid"}},axisLabel:{show:!1,textStyle:{color:"#333"}},splitArea:{show:!0,areaStyle:{color:["rgba(250,250,250,0.3)","rgba(200,200,200,0.3)"]}},splitLine:{show:!0,lineStyle:{width:1,color:"#ccc"}}},bar:{xAxisIndex:0,yAxisIndex:0,barMinHeight:0,barGap:"30%",barCategoryGap:"20%",itemStyle:{normal:{borderColor:"#fff",borderRadius:0,borderWidth:0,label:{show:!1}},emphasis:{borderColor:"#fff",borderRadius:0,borderWidth:0,label:{show:!1}}}},line:{xAxisIndex:0,yAxisIndex:0,itemStyle:{normal:{label:{show:!1},lineStyle:{width:2,type:"solid",shadowColor:"rgba(0,0,0,0)",shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0}},emphasis:{label:{show:!1}}},symbolSize:2,showAllSymbol:!1},k:{xAxisIndex:0,yAxisIndex:0,itemStyle:{normal:{color:"#fff",color0:"#00aa11",lineStyle:{width:1,color:"#ff3200",color0:"#00aa11"}},emphasis:{}}},scatter:{xAxisIndex:0,yAxisIndex:0,symbolSize:4,large:!1,largeThreshold:2e3,itemStyle:{normal:{label:{show:!1,formatter:function(e,t,n){return typeof n[2]!="undefined"?n[2]:n[0]+" , "+n[1]}}},emphasis:{label:{show:!1,formatter:function(e,t,n){return typeof n[2]!="undefined"?n[2]:n[0]+" , "+n[1]}}}}},radar:{polarIndex:0,itemStyle:{normal:{label:{show:!1},lineStyle:{width:2,type:"solid"}},emphasis:{label:{show:!1}}},symbolSize:2},pie:{center:["50%","50%"],radius:[0,"75%"],clockWise:!0,startAngle:90,minAngle:0,selectedOffset:10,itemStyle:{normal:{borderColor:"#fff",borderWidth:1,label:{show:!0,position:"outer"},labelLine:{show:!0,length:20,lineStyle:{width:1,type:"solid"}}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,label:{show:!1},labelLine:{show:!1,length:20,lineStyle:{width:1,type:"solid"}}}}},map:{mapType:"china",mapLocation:{x:"center",y:"center"},mapValuePrecision:0,showLegendSymbol:!0,hoverable:!0,itemStyle:{normal:{borderColor:"#fff",borderWidth:1,areaStyle:{color:"#ccc"},label:{show:!1,textStyle:{color:"rgb(139,69,19)"}}},emphasis:{borderColor:"rgba(0,0,0,0)",borderWidth:1,areaStyle:{color:"rgba(255,215,0,0.8)"},label:{show:!1,textStyle:{color:"rgb(100,0,0)"}}}}},force:{minRadius:10,maxRadius:20,density:1,attractiveness:1,initSize:300,centripetal:1,coolDown:.99,categories:[],itemStyle:{normal:{label:{show:!1},nodeStyle:{brushType:"both",color:"#f08c2e",strokeColor:"#5182ab"},linkStyle:{strokeColor:"#5182ab"}},emphasis:{label:{show:!1},nodeStyle:{},linkStyle:{}}}},chord:{radius:["65%","75%"],center:["50%","50%"],padding:2,sort:"none",sortSub:"none",startAngle:90,clockWise:!1,showScale:!1,showScaleText:!1,itemStyle:{normal:{label:{show:!0},lineStyle:{width:0,color:"#000"},chordStyle:{lineStyle:{width:1,color:"#666"}}},emphasis:{lineStyle:{width:0,color:"#000"},chordStyle:{lineStyle:{width:2,color:"#333"}}}},matrix:[]},island:{r:15,calculateStep:.1},markPoint:{symbol:"pin",symbolSize:10,effect:{show:!1,period:15,scaleSize:2},itemStyle:{normal:{borderWidth:2,label:{show:!0,position:"inside"}},emphasis:{label:{show:!0}}}},markLine:{symbol:["circle","arrow"],symbolSize:[2,4],effect:{show:!1,period:15,scaleSize:2},itemStyle:{normal:{borderWidth:1.5,label:{show:!0,position:"end"},lineStyle:{type:"dashed",shadowColor:"rgba(0,0,0,0)",shadowBlur:0,shadowOffsetX:0,shadowOffsetY:0}},emphasis:{label:{show:!1},lineStyle:{}}}},textStyle:{decoration:"none",fontFamily:"Arial, Verdana, sans-serif",fontFamily2:"微软雅黑",fontSize:12,fontStyle:"normal",fontWeight:"normal"},EVENT:{REFRESH:"refresh",RESTORE:"restore",RESIZE:"resize",CLICK:"click",HOVER:"hover",DATA_CHANGED:"dataChanged",DATA_ZOOM:"dataZoom",DATA_RANGE:"dataRange",LEGEND_SELECTED:"legendSelected",MAP_SELECTED:"mapSelected",PIE_SELECTED:"pieSelected",MAGIC_TYPE_CHANGED:"magicTypeChanged",DATA_VIEW_CHANGED:"dataViewChanged",MAP_ROAM:"mapRoam",TOOLTIP_HOVER:"tooltipHover",TOOLTIP_IN_GRID:"tooltipInGrid",TOOLTIP_OUT_GRID:"tooltipOutGrid"},DRAG_ENABLE_TIME:150,symbolList:["circle","rectangle","triangle","diamond","emptyCircle","emptyRectangle","emptyTriangle","emptyDiamond"],loadingText:"Loading...",calculable:!1,calculableColor:"rgba(255,165,0,0.6)",calculableHolderColor:"#ccc",nameConnector:" & ",valueConnector:" : ",animation:!0,addDataAnimation:!0,animationThreshold:2500,animationDuration:2e3,animationEasing:"ExponentialOut"};return e}),r("zrender/tool/vector",[],function(){var e=typeof Float32Array=="undefined"?Array:Float32Array,t={create:function(t,n){var r=new e(2);return r[0]=t||0,r[1]=n||0,r},copy:function(e,t){e[0]=t[0],e[1]=t[1]},set:function(e,t,n){e[0]=t,e[1]=n},add:function(e,t,n){return e[0]=t[0]+n[0],e[1]=t[1]+n[1],e},scaleAndAdd:function(e,t,n,r){return e[0]=t[0]+n[0]*r,e[1]=t[1]+n[1]*r,e},sub:function(e,t,n){return e[0]=t[0]-n[0],e[1]=t[1]-n[1],e},length:function(e){return Math.sqrt(this.lengthSquare(e))},lengthSquare:function(e){return e[0]*e[0]+e[1]*e[1]},mul:function(e,t,n){return e[0]=t[0]*n[0],e[1]=t[1]*n[1],e},dot:function(e,t){return e[0]*t[0]+e[1]*t[1]},scale:function(e,t,n){return e[0]=t[0]*n,e[1]=t[1]*n,e},normalize:function(e,n){var r=t.length(n);return r===0?(e[0]=0,e[1]=0):(e[0]=n[0]/r,e[1]=n[1]/r),e},distance:function(e,t){return Math.sqrt((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1]))},negate:function(e,t){e[0]=-t[0],e[1]=-t[1]},middle:function(e,t,n){return e[0]=(t[0]+n[0])/2,e[1]=(t[1]+n[1])/2,e}};return t}),r("zrender/lib/excanvas",["require"],function(e){return document.createElement("canvas").getContext?G_vmlCanvasManager=!1:function(){function f(){return this.context_||(this.context_=new I(this))}function c(e,t,n){var r=l.call(arguments,2);return function(){return e.apply(t,r.concat(l.call(arguments)))}}function h(e){return String(e).replace(/&/g,"&amp;").replace(/"/g,"&quot;")}function p(e,t,n){e.namespaces[t]||e.namespaces.add(t,n,"#default#VML")}function d(e){p(e,"g_vml_","urn:schemas-microsoft-com:vml"),p(e,"g_o_","urn:schemas-microsoft-com:office:office");if(!e.styleSheets.ex_canvas_){var t=e.createStyleSheet();t.owningElement.id="ex_canvas_",t.cssText="canvas{display:inline-block;overflow:hidden;text-align:left;width:300px;height:150px}"}}function m(e){var t=e.srcElement;switch(e.propertyName){case"width":t.getContext().clearRect(),t.style.width=t.attributes.width.nodeValue+"px",t.firstChild.style.width=t.clientWidth+"px";break;case"height":t.getContext().clearRect(),t.style.height=t.attributes.height.nodeValue+"px",t.firstChild.style.height=t.clientHeight+"px"}}function g(e){var t=e.srcElement;t.firstChild&&(t.firstChild.style.width=t.clientWidth+"px",t.firstChild.style.height=t.clientHeight+"px")}function E(){return[[1,0,0],[0,1,0],[0,0,1]]}function S(e,t){var n=E();for(var r=0;r<3;r++)for(var i=0;i<3;i++){var s=0;for(var o=0;o<3;o++)s+=e[r][o]*t[o][i];n[r][i]=s}return n}function x(e,t){t.fillStyle=e.fillStyle,t.lineCap=e.lineCap,t.lineJoin=e.lineJoin,t.lineWidth=e.lineWidth,t.miterLimit=e.miterLimit,t.shadowBlur=e.shadowBlur,t.shadowColor=e.shadowColor,t.shadowOffsetX=e.shadowOffsetX,t.shadowOffsetY=e.shadowOffsetY,t.strokeStyle=e.strokeStyle,t.globalAlpha=e.globalAlpha,t.font=e.font,t.textAlign=e.textAlign,t.textBaseline=e.textBaseline,t.arcScaleX_=e.arcScaleX_,t.arcScaleY_=e.arcScaleY_,t.lineScale_=e.lineScale_}function N(e){var t=e.indexOf("(",3),n=e.indexOf(")",t+1),r=e.substring(t+1,n).split(",");if(r.length!=4||e.charAt(3)!="a")r[3]=1;return r}function C(e){return parseFloat(e)/100}function k(e,t,n){return Math.min(n,Math.max(t,e))}function L(e){var t,n,r,i,s,o;i=parseFloat(e[0])/360%360,i<0&&i++,s=k(C(e[1]),0,1),o=k(C(e[2]),0,1);if(s==0)t=n=r=o;else{var u=o<.5?o*(1+s):o+s-o*s,a=2*o-u;t=A(a,u,i+1/3),n=A(a,u,i),r=A(a,u,i-1/3)}return"#"+y[Math.floor(t*255)]+y[Math.floor(n*255)]+y[Math.floor(r*255)]}function A(e,t,n){return n<0&&n++,n>1&&n--,6*n<1?e+(t-e)*6*n:2*n<1?t:3*n<2?e+(t-e)*(2/3-n)*6:e}function M(e){if(e in O)return O[e];var t,n=1;e=String(e);if(e.charAt(0)=="#")t=e;else if(/^rgb/.test(e)){var r=N(e),t="#",i;for(var s=0;s<3;s++)r[s].indexOf("%")!=-1?i=Math.floor(C(r[s])*255):i=+r[s],t+=y[k(i,0,255)];n=+r[3]}else if(/^hsl/.test(e)){var r=N(e);t=L(r),n=r[3]}else t=T[e]||e;return O[e]={color:t,alpha:n}}function P(e){if(D[e])return D[e];var t=document.createElement("div"),n=t.style,r;try{n.font=e,r=n.fontFamily.split(",")[0]}catch(i){}return D[e]={style:n.fontStyle||_.style,variant:n.fontVariant||_.variant,weight:n.fontWeight||_.weight,size:n.fontSize||_.size,family:r||_.family}}function H(e,t){var n={};for(var r in e)n[r]=e[r];var i=parseFloat(t.currentStyle.fontSize),s=parseFloat(e.size);return typeof e.size=="number"?n.size=e.size:e.size.indexOf("px")!=-1?n.size=s:e.size.indexOf("em")!=-1?n.size=i*s:e.size.indexOf("%")!=-1?n.size=i/100*s:e.size.indexOf("pt")!=-1?n.size=s/.75:n.size=i,n}function B(e){return e.style+" "+e.variant+" "+e.weight+" "+e.size+"px '"+e.family+"'"}function F(e){return j[e]||"square"}function I(e){this.m_=E(),this.mStack_=[],this.aStack_=[],this.currentPath_=[],this.strokeStyle="#000",this.fillStyle="#000",this.lineWidth=1,this.lineJoin="miter",this.lineCap="butt",this.miterLimit=o*1,this.globalAlpha=1,this.font="12px 微软雅黑",this.textAlign="left",this.textBaseline="alphabetic",this.canvas=e;var t="width:"+e.clientWidth+"px;height:"+e.clientHeight+"px;overflow:hidden;position:absolute",n=e.ownerDocument.createElement("div");n.style.cssText=t,e.appendChild(n);var r=n.cloneNode(!1);r.style.backgroundColor="#fff",r.style.filter="alpha(opacity=0)",e.appendChild(r),this.element_=n,this.arcScaleX_=1,this.arcScaleY_=1,this.lineScale_=1}function R(e,t,n,r){e.currentPath_.push({type:"bezierCurveTo",cp1x:t.x,cp1y:t.y,cp2x:n.x,cp2y:n.y,x:r.x,y:r.y}),e.currentX_=r.x,e.currentY_=r.y}function U(e,t){var n=M(e.strokeStyle),r=n.color,i=n.alpha*e.globalAlpha,s=e.lineScale_*e.lineWidth;s<1&&(i*=s),t.push("<g_vml_:stroke",' opacity="',i,'"',' joinstyle="',e.lineJoin,'"',' miterlimit="',e.miterLimit,'"',' endcap="',F(e.lineCap),'"',' weight="',s,'px"',' color="',r,'" />')}function z(t,n,r,i){var s=t.fillStyle,u=t.arcScaleX_,a=t.arcScaleY_,f=i.x-r.x,l=i.y-r.y;if(s instanceof $){var c=0,h={x:0,y:0},p=0,d=1;if(s.type_=="gradient"){var v=s.x0_/u,m=s.y0_/a,g=s.x1_/u,y=s.y1_/a,b=W(t,v,m),w=W(t,g,y),E=w.x-b.x,S=w.y-b.y;c=Math.atan2(E,S)*180/Math.PI,c<0&&(c+=360),c<1e-6&&(c=0)}else{var b=W(t,s.x0_,s.y0_);h={x:(b.x-r.x)/f,y:(b.y-r.y)/l},f/=u*o,l/=a*o;var x=e.max(f,l);p=2*s.r0_/x,d=2*s.r1_/x-p}var T=s.colors_;T.sort(function(e,t){return e.offset-t.offset});var N=T.length,C=T[0].color,k=T[N-1].color,L=T[0].alpha*t.globalAlpha,A=T[N-1].alpha*t.globalAlpha,O=[];for(var _=0;_<N;_++){var D=T[_];O.push(D.offset*d+p+" "+D.color)}n.push('<g_vml_:fill type="',s.type_,'"',' method="none" focus="100%"',' color="',C,'"',' color2="',k,'"',' colors="',O.join(","),'"',' opacity="',A,'"',' g_o_:opacity2="',L,'"',' angle="',c,'"',' focusposition="',h.x,",",h.y,'" />')}else if(s instanceof J){if(f&&l){var P=-r.x,H=-r.y;n.push("<g_vml_:fill",' position="',P/f*u*u,",",H/l*a*a,'"',' type="tile"',' src="',s.src_,'" />')}}else{var B=M(t.fillStyle),j=B.color,F=B.alpha*t.globalAlpha;n.push('<g_vml_:fill color="',j,'" opacity="',F,'" />')}}function W(e,t,n){var r=e.m_;return{x:o*(t*r[0][0]+n*r[1][0]+r[2][0])-u,y:o*(t*r[0][1]+n*r[1][1]+r[2][1])-u}}function X(e){return isFinite(e[0][0])&&isFinite(e[0][1])&&isFinite(e[1][0])&&isFinite(e[1][1])&&isFinite(e[2][0])&&isFinite(e[2][1])}function V(e,t,n){if(!X(t))return;e.m_=t;if(n){var r=t[0][0]*t[1][1]-t[0][1]*t[1][0];e.lineScale_=s(i(r))}}function $(e){this.type_=e,this.x0_=0,this.y0_=0,this.r0_=0,this.x1_=0,this.y1_=0,this.r1_=0,this.colors_=[]}function J(e,t){Q(e);switch(t){case"repeat":case null:case"":this.repetition_="repeat";break;case"repeat-x":case"repeat-y":case"no-repeat":this.repetition_=t;break;default:K("SYNTAX_ERR")}this.src_=e.src,this.width_=e.width,this.height_=e.height}function K(e){throw new G(e)}function Q(e){(!e||e.nodeType!=1||e.tagName!="IMG")&&K("TYPE_MISMATCH_ERR"),e.readyState!="complete"&&K("INVALID_STATE_ERR")}function G(e){this.code=this[e],this.message=e+": DOM Exception "+this.code}var e=Math,t=e.round,n=e.sin,r=e.cos,i=e.abs,s=e.sqrt,o=10,u=o/2,a=+navigator.userAgent.match(/MSIE ([\d.]+)?/)[1],l=Array.prototype.slice;d(document);var v={init:function(e){var t=e||document;t.createElement("canvas"),t.attachEvent("onreadystatechange",c(this.init_,this,t))},init_:function(e){var t=e.getElementsByTagName("canvas");for(var n=0;n<t.length;n++)this.initElement(t[n])},initElement:function(e){if(!e.getContext){e.getContext=f,d(e.ownerDocument),e.innerHTML="",e.attachEvent("onpropertychange",m),e.attachEvent("onresize",g);var t=e.attributes;t.width&&t.width.specified?e.style.width=t.width.nodeValue+"px":e.width=e.clientWidth,t.height&&t.height.specified?e.style.height=t.height.nodeValue+"px":e.height=e.clientHeight}return e}};v.init();var y=[];for(var b=0;b<16;b++)for(var w=0;w<16;w++)y[b*16+w]=b.toString(16)+w.toString(16);var T={aliceblue:"#F0F8FF",antiquewhite:"#FAEBD7",aquamarine:"#7FFFD4",azure:"#F0FFFF",beige:"#F5F5DC",bisque:"#FFE4C4",black:"#000000",blanchedalmond:"#FFEBCD",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",darkgreen:"#006400",darkgrey:"#A9A9A9",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",gainsboro:"#DCDCDC",ghostwhite:"#F8F8FF",gold:"#FFD700",goldenrod:"#DAA520",grey:"#808080",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",lightgreen:"#90EE90",lightgrey:"#D3D3D3",lightpink:"#FFB6C1",lightsalmon:"#FFA07A",lightseagreen:"#20B2AA",lightskyblue:"#87CEFA",lightslategray:"#778899",lightslategrey:"#778899",lightsteelblue:"#B0C4DE",lightyellow:"#FFFFE0",limegreen:"#32CD32",linen:"#FAF0E6",magenta:"#FF00FF",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",oldlace:"#FDF5E6",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",rosybrown:"#BC8F8F",royalblue:"#4169E1",saddlebrown:"#8B4513",salmon:"#FA8072",sandybrown:"#F4A460",seagreen:"#2E8B57",seashell:"#FFF5EE",sienna:"#A0522D",skyblue:"#87CEEB",slateblue:"#6A5ACD",slategray:"#708090",slategrey:"#708090",snow:"#FFFAFA",springgreen:"#00FF7F",steelblue:"#4682B4",tan:"#D2B48C",thistle:"#D8BFD8",tomato:"#FF6347",turquoise:"#40E0D0",violet:"#EE82EE",wheat:"#F5DEB3",whitesmoke:"#F5F5F5",yellowgreen:"#9ACD32"},O={},_={style:"normal",variant:"normal",weight:"normal",size:12,family:"微软雅黑"},D={},j={butt:"flat",round:"round"},q=I.prototype;q.clearRect=function(){this.textMeasureEl_&&(this.textMeasureEl_.removeNode(!0),this.textMeasureEl_=null),this.element_.innerHTML=""},q.beginPath=function(){this.currentPath_=[]},q.moveTo=function(e,t){var n=W(this,e,t);this.currentPath_.push({type:"moveTo",x:n.x,y:n.y}),this.currentX_=n.x,this.currentY_=n.y},q.lineTo=function(e,t){var n=W(this,e,t);this.currentPath_.push({type:"lineTo",x:n.x,y:n.y}),this.currentX_=n.x,this.currentY_=n.y},q.bezierCurveTo=function(e,t,n,r,i,s){var o=W(this,i,s),u=W(this,e,t),a=W(this,n,r);R(this,u,a,o)},q.quadraticCurveTo=function(e,t,n,r){var i=W(this,e,t),s=W(this,n,r),o={x:this.currentX_+2/3*(i.x-this.currentX_),y:this.currentY_+2/3*(i.y-this.currentY_)},u={x:o.x+(s.x-this.currentX_)/3,y:o.y+(s.y-this.currentY_)/3};R(this,o,u,s)},q.arc=function(e,t,i,s,a,f){i*=o;var l=f?"at":"wa",c=e+r(s)*i-u,h=t+n(s)*i-u,p=e+r(a)*i-u,d=t+n(a)*i-u;c==p&&!f&&(c+=.125);var v=W(this,e,t),m=W(this,c,h),g=W(this,p,d);this.currentPath_.push({type:l,x:v.x,y:v.y,radius:i,xStart:m.x,yStart:m.y,xEnd:g.x,yEnd:g.y})},q.rect=function(e,t,n,r){this.moveTo(e,t),this.lineTo(e+n,t),this.lineTo(e+n,t+r),this.lineTo(e,t+r),this.closePath()},q.strokeRect=function(e,t,n,r){var i=this.currentPath_;this.beginPath(),this.moveTo(e,t),this.lineTo(e+n,t),this.lineTo(e+n,t+r),this.lineTo(e,t+r),this.closePath(),this.stroke(),this.currentPath_=i},q.fillRect=function(e,t,n,r){var i=this.currentPath_;this.beginPath(),this.moveTo(e,t),this.lineTo(e+n,t),this.lineTo(e+n,t+r),this.lineTo(e,t+r),this.closePath(),this.fill(),this.currentPath_=i},q.createLinearGradient=function(e,t,n,r){var i=new $("gradient");return i.x0_=e,i.y0_=t,i.x1_=n,i.y1_=r,i},q.createRadialGradient=function(e,t,n,r,i,s){var o=new $("gradientradial");return o.x0_=e,o.y0_=t,o.r0_=n,o.x1_=r,o.y1_=i,o.r1_=s,o},q.drawImage=function(n,r){var i,s,u,a,f,l,c,h,p=n.runtimeStyle.width,d=n.runtimeStyle.height;n.runtimeStyle.width="auto",n.runtimeStyle.height="auto";var v=n.width,m=n.height;n.runtimeStyle.width=p,n.runtimeStyle.height=d;if(arguments.length==3)i=arguments[1],s=arguments[2],f=l=0,c=u=v,h=a=m;else if(arguments.length==5)i=arguments[1],s=arguments[2],u=arguments[3],a=arguments[4],f=l=0,c=v,h=m;else{if(arguments.length!=9)throw Error("Invalid number of arguments");f=arguments[1],l=arguments[2],c=arguments[3],h=arguments[4],i=arguments[5],s=arguments[6],u=arguments[7],a=arguments[8]}var g=W(this,i,s),y=c/2,b=h/2,w=[],E=10,S=10,x=scaleY=1;w.push(" <g_vml_:group",' coordsize="',o*E,",",o*S,'"',' coordorigin="0,0"',' style="width:',E,"px;height:",S,"px;position:absolute;");if(this.m_[0][0]!=1||this.m_[0][1]||this.m_[1][1]!=1||this.m_[1][0]){var T=[];x=Math.sqrt(this.m_[0][0]*this.m_[0][0]+this.m_[0][1]*this.m_[0][1]),scaleY=Math.sqrt(this.m_[1][0]*this.m_[1][0]+this.m_[1][1]*this.m_[1][1]),T.push("M11=",this.m_[0][0]/x,",","M12=",this.m_[1][0]/scaleY,",","M21=",this.m_[0][1]/x,",","M22=",this.m_[1][1]/scaleY,",","Dx=",t(g.x/o),",","Dy=",t(g.y/o),"");var N=g,C=W(this,i+u,s),k=W(this,i,s+a),L=W(this,i+u,s+a);N.x=e.max(N.x,C.x,k.x,L.x),N.y=e.max(N.y,C.y,k.y,L.y),w.push("padding:0 ",t(N.x/o),"px ",t(N.y/o),"px 0;filter:progid:DXImageTransform.Microsoft.Matrix(",T.join(""),", sizingmethod='clip');")}else w.push("top:",t(g.y/o),"px;left:",t(g.x/o),"px;");w.push(' ">'),(f||l)&&w.push('<div style="overflow: hidden; width:',Math.ceil((u+f*u/c)*x),"px;"," height:",Math.ceil((a+l*a/h)*scaleY),"px;"," filter:progid:DxImageTransform.Microsoft.Matrix(Dx=",-f*u/c*x,",Dy=",-l*a/h*scaleY,');">'),w.push('<div style="width:',Math.round(x*v*u/c),"px;"," height:",Math.round(scaleY*m*a/h),"px;"," filter:"),this.globalAlpha<1&&w.push(" progid:DXImageTransform.Microsoft.Alpha(opacity="+this.globalAlpha*100+")"),w.push(" progid:DXImageTransform.Microsoft.AlphaImageLoader(src=",n.src,',sizingMethod=scale)">'),(f||l)&&w.push("</div>"),w.push("</div></div>"),this.element_.insertAdjacentHTML("BeforeEnd",w.join(""))},q.stroke=function(e){var n=[],r=!1,i=10,s=10;n.push("<g_vml_:shape",' filled="',!!e,'"',' style="position:absolute;width:',i,"px;height:",s,'px;"',' coordorigin="0,0"',' coordsize="',o*i,",",o*s,'"',' stroked="',!e,'"',' path="');var u=!1,a={x:null,y:null},f={x:null,y:null};for(var l=0;l<this.currentPath_.length;l++){var c=this.currentPath_[l],h;switch(c.type){case"moveTo":h=c,n.push(" m ",t(c.x),",",t(c.y));break;case"lineTo":n.push(" l ",t(c.x),",",t(c.y));break;case"close":n.push(" x "),c=null;break;case"bezierCurveTo":n.push(" c ",t(c.cp1x),",",t(c.cp1y),",",t(c.cp2x),",",t(c.cp2y),",",t(c.x),",",t(c.y));break;case"at":case"wa":n.push(" ",c.type," ",t(c.x-this.arcScaleX_*c.radius),",",t(c.y-this.arcScaleY_*c.radius)," ",t(c.x+this.arcScaleX_*c.radius),",",t(c.y+this.arcScaleY_*c.radius)," ",t(c.xStart),",",t(c.yStart)," ",t(c.xEnd),",",t(c.yEnd))}if(c){if(a.x==null||c.x<a.x)a.x=c.x;if(f.x==null||c.x>f.x)f.x=c.x;if(a.y==null||c.y<a.y)a.y=c.y;if(f.y==null||c.y>f.y)f.y=c.y}}n.push(' ">'),e?z(this,n,a,f):U(this,n),n.push("</g_vml_:shape>"),this.element_.insertAdjacentHTML("beforeEnd",n.join(""))},q.fill=function(){this.stroke(!0)},q.closePath=function(){this.currentPath_.push({type:"close"})},q.save=function(){var e={};x(this,e),this.aStack_.push(e),this.mStack_.push(this.m_),this.m_=S(E(),this.m_)},q.restore=function(){this.aStack_.length&&(x(this.aStack_.pop(),this),this.m_=this.mStack_.pop())},q.translate=function(e,t){var n=[[1,0,0],[0,1,0],[e,t,1]];V(this,S(n,this.m_),!1)},q.rotate=function(e){var t=r(e),i=n(e),s=[[t,i,0],[-i,t,0],[0,0,1]];V(this,S(s,this.m_),!1)},q.scale=function(e,t){this.arcScaleX_*=e,this.arcScaleY_*=t;var n=[[e,0,0],[0,t,0],[0,0,1]];V(this,S(n,this.m_),!0)},q.transform=function(e,t,n,r,i,s){var o=[[e,t,0],[n,r,0],[i,s,1]];V(this,S(o,this.m_),!0)},q.setTransform=function(e,t,n,r,i,s){var o=[[e,t,0],[n,r,0],[i,s,1]];V(this,o,!0)},q.drawText_=function(e,n,r,i,s){var u=this.m_,a=1e3,f=0,l=a,c={x:0,y:0},p=[],d=H(P(this.font),this.element_),v=B(d),m=this.element_.currentStyle,g=this.textAlign.toLowerCase();switch(g){case"left":case"center":case"right":break;case"end":g=m.direction=="ltr"?"right":"left";break;case"start":g=m.direction=="rtl"?"right":"left";break;default:g="left"}switch(this.textBaseline){case"hanging":case"top":c.y=d.size/1.75;break;case"middle":break;default:case null:case"alphabetic":case"ideographic":case"bottom":c.y=-d.size/2.25}switch(g){case"right":f=a,l=.05;break;case"center":f=l=a/2}var y=W(this,n+c.x,r+c.y);p.push('<g_vml_:line from="',-f,' 0" to="',l,' 0.05" ',' coordsize="100 100" coordorigin="0 0"',' filled="',!s,'" stroked="',!!s,'" style="position:absolute;width:1px;height:1px;">'),s?U(this,p):z(this,p,{x:-f,y:0},{x:l,y:d.size});var b=u[0][0].toFixed(3)+","+u[1][0].toFixed(3)+","+u[0][1].toFixed(3)+","+u[1][1].toFixed(3)+",0,0",w=t(y.x/o)+","+t(y.y/o);p.push('<g_vml_:skew on="t" matrix="',b,'" ',' offset="',w,'" origin="',f,' 0" />','<g_vml_:path textpathok="true" />','<g_vml_:textpath on="true" string="',h(e),'" style="v-text-align:',g,";font:",h(v),'" /></g_vml_:line>'),this.element_.insertAdjacentHTML("beforeEnd",p.join(""))},q.fillText=function(e,t,n,r){this.drawText_(e,t,n,r,!1)},q.strokeText=function(e,t,n,r){this.drawText_(e,t,n,r,!0)},q.measureText=function(e){if(!this.textMeasureEl_){var t='<span style="position:absolute;top:-20000px;left:0;padding:0;margin:0;border:none;white-space:pre;"></span>';this.element_.insertAdjacentHTML("beforeEnd",t),this.textMeasureEl_=this.element_.lastChild}var n=this.element_.ownerDocument;return this.textMeasureEl_.innerHTML="",this.textMeasureEl_.style.font=this.font,this.textMeasureEl_.appendChild(n.createTextNode(e)),{width:this.textMeasureEl_.offsetWidth}},q.clip=function(){},q.arcTo=function(){},q.createPattern=function(e,t){return new J(e,t)},$.prototype.addColorStop=function(e,t){t=M(t),this.colors_.push({offset:e,color:t.color,alpha:t.alpha})};var Y=G.prototype=new Error;Y.INDEX_SIZE_ERR=1,Y.DOMSTRING_SIZE_ERR=2,Y.HIERARCHY_REQUEST_ERR=3,Y.WRONG_DOCUMENT_ERR=4,Y.INVALID_CHARACTER_ERR=5,Y.NO_DATA_ALLOWED_ERR=6,Y.NO_MODIFICATION_ALLOWED_ERR=7,Y.NOT_FOUND_ERR=8,Y.NOT_SUPPORTED_ERR=9,Y.INUSE_ATTRIBUTE_ERR=10,Y.INVALID_STATE_ERR=11,Y.SYNTAX_ERR=12,Y.INVALID_MODIFICATION_ERR=13,Y.NAMESPACE_ERR=14,Y.INVALID_ACCESS_ERR=15,Y.VALIDATION_ERR=16,Y.TYPE_MISMATCH_ERR=17,G_vmlCanvasManager=v,CanvasRenderingContext2D=I,CanvasGradient=$,CanvasPattern=J,DOMException=G}(),G_vmlCanvasManager}),r("zrender/tool/util",["require","./vector","../lib/excanvas"],function(e){function n(e){var t={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1},n=e,r,i;if(!e||e instanceof Number||e instanceof String||e instanceof Boolean)return n;if(e instanceof Array){n=[];var s=0;for(r=0,i=e.length;r<i;r++)n[s++]=this.clone(e[r])}else if("object"==typeof e){if(t[Object.prototype.toString.call(e)]||e.__nonRecursion)return n;n={};for(r in e)e.hasOwnProperty(r)&&(n[r]=this.clone(e[r]))}return n}function i(e,t,n,r){if(!e||!t)return;if(t instanceof Object)for(var s in t)if(t.hasOwnProperty(s))if(t[s]instanceof Object&&r&&e[s])i(e[s],t[s],n,r);else if(n||!e.hasOwnProperty(s))e[s]=t[s]}function o(){if(!s){e("../lib/excanvas");if(G_vmlCanvasManager){var t=document.createElement("div");t.style.position="absolute",t.style.top="-1000px",document.body.appendChild(t),s=G_vmlCanvasManager.initElement(t).getContext("2d")}else s=document.createElement("canvas").getContext("2d")}return s}function p(){return a||(u=document.createElement("canvas"),f=u.width,l=u.height,a=u.getContext("2d")),a}function d(e,t){var n=100,r=!1;e+c>f&&(f=e+c+n,u.width=f,r=!0),t+h>l&&(l=t+h+n,u.height=l,r=!0),e<-c&&(c=Math.ceil(-e/n)*n,f+=c,u.width=f,r=!0),t<-h&&(h=Math.ceil(-t/n)*n,l+=h,u.height=l,r=!0),r&&a.translate(c,h)}function v(){return{x:c,y:h}}function m(e,t){if(e.indexOf)return e.indexOf(t);for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1}function g(e,t,n){if(e.length===0)return;var r=e[0][0],i=e[0][0],s=e[0][1],o=e[0][1];for(var u=1;u<e.length;u++){var a=e[u];a[0]<r&&(r=a[0]),a[0]>i&&(i=a[0]),a[1]<s&&(s=a[1]),a[1]>o&&(o=a[1])}t[0]=r,t[1]=s,n[0]=i,n[1]=o}function y(e,t,n,r,i,s){var o=b(e[0],t[0],n[0],r[0]),u=b(e[1],t[1],n[1],r[1]);o.push(e[0],r[0]),u.push(e[1],r[1]);var a=Math.min.apply(null,o),f=Math.max.apply(null,o),l=Math.min.apply(null,u),c=Math.max.apply(null,u);i[0]=a,i[1]=l,s[0]=f,s[1]=c}function b(e,t,n,r){var i=[],s=6*n-12*t+6*e,o=9*t+3*r-3*e-9*n,u=3*t-3*e,a=s*s-4*o*u;if(a>0){var f=Math.sqrt(a),l=(-s+f)/(2*o),c=(-s-f)/(2*o);i.push(l,c)}else a===0&&i.push(-s/(2*o));var h=[];for(var p=0;p<i.length;p++){var d=i[p];if(Math.abs(2*o*d+s)>1e-4&&d<1&&d>0){var v=1-d,m=v*v*v*e+3*v*v*d*t+3*v*d*d*n+d*d*d*r;h.push(m)}}return h}function w(e,t,n,r,i){var s=e[0]+n[0]-2*t[0],o;s===0?o=.5:o=(e[0]-t[0])/s,s=e[1]+n[1]-2*t[1];var u;s===0?u=.5:u=(e[1]-t[1])/s,o=Math.max(Math.min(o,1),0),u=Math.max(Math.min(u,1),0);var a=1-o,f=1-u,l=a*a*e[0]+2*a*o*t[0]+o*o*n[0],c=a*a*e[1]+2*a*o*t[1]+o*o*n[1],h=f*f*e[0]+2*f*u*t[0]+u*u*n[0],p=f*f*e[1]+2*f*u*t[1]+u*u*n[1];return g([e.slice(),n.slice(),[l,c],[h,p]],r,i)}var t=e("./vector"),r=function(){function t(t,n,i,s,o){if(n.hasOwnProperty(i))if(o&&typeof t[i]=="object"&&e[Object.prototype.toString.call(t[i])]!=1)r(t[i],n[i],{overwrite:s,recursive:o});else if(s||!(i in t))t[i]=n[i]}var e={"[object Function]":1,"[object RegExp]":1,"[object Date]":1,"[object Error]":1,"[object CanvasGradient]":1};return function(e,n,r){var i=0,s=r||{},o=s.overwrite,u=s.whiteList,a=s.recursive,f;if(u&&u.length){f=u.length;for(;i<f;++i)t(e,n,u[i],o,a)}else for(i in n)t(e,n,i,o,a);return e}}(),s,u,a,f,l,c=0,h=0,E=function(){var e=[],n=[],r=[[],[],[],[]];return function(i,s,o,u,a,f,l){a=a?1:-1,e[0]=Math.cos(o),e[1]=Math.sin(o)*a,t.scale(e,e,s),t.add(e,e,i),n[0]=Math.cos(u),n[1]=Math.sin(u)*a,t.scale(n,n,s),t.add(n,n,i),o%=Math.PI*2,o<0&&(o+=Math.PI*2),u%=Math.PI*2,u<0&&(u+=Math.PI*2),o>u&&(u+=Math.PI*2);var c=0;for(var h=0;h<u;h+=Math.PI/2)if(h>o){var p=r[c++];p[0]=Math.cos(h),p[1]=Math.sin(h)*a,t.scale(p,p,s),t.add(p,p,i)}var d=r.slice(0,c);d.push(e,n),g(d,f,l)}}();return{clone:n,merge:r,mergeFast:i,getContext:o,getPixelContext:p,getPixelOffset:v,adjustCanvasSize:d,computeBoundingBox:g,computeCubeBezierBoundingBox:y,computeQuadraticBezierBoundingBox:w,computeArcBoundingBox:E,indexOf:m}}),r("zrender/shape",[],function(){var e={},t={};return e.define=function(n,r){return t[n]=r,e},e.get=function(e){return t[e]},e}),r("zrender/tool/area",["require","../tool/util","../shape"],function(e){function r(e,r,u,a){if(!r||!e)return!1;var f=e.type;n||(n=t.getContext());if(!h(r.__rect||e.getRect(r),u,a))return!1;var l=i(f,r,u,a);if(typeof l!="undefined")return l;if(f!="beziercurve"&&e.buildPath&&n.isPointInPath)return s(e,n,r,u,a);if(n.getImageData)return o(e,r,u,a);switch(f){case"heart":return!0;case"droplet":return!0;case"ellipse":return!0;case"trochoid":var c=r.location=="out"?r.r1+r.r2+r.d:r.r1-r.r2+r.d;return p(r,u,a,c);case"rose":return p(r,u,a,r.maxr);default:return!1}}function i(e,t,n,r){switch(e){case"line":return f(t,n,r);case"brokenLine":return l(t,n,r);case"text":return!0;case"ring":return c(t,n,r);case"rectangle":return!0;case"circle":return p(t,n,r,t.r);case"sector":return d(t,n,r);case"path":return m(t,n,r);case"polygon":case"star":case"isogon":return v(t,n,r);case"image":return!0}}function s(e,t,n,r,i){return t.beginPath(),e.buildPath(t,n),t.closePath(),t.isPointInPath(r,i)}function o(e,n,r,i){var s=n.__rect||e.getRect(n),o=t.getPixelContext(),a=t.getPixelOffset();return t.adjustCanvasSize(r,i),o.clearRect(s.x,s.y,s.width,s.height),o.beginPath(),e.brush(o,{style:n}),o.closePath(),u(o,r+a.x,i+a.y)}function u(e,t,n,r){var i;typeof r!="undefined"?(r=Math.floor((r||1)/2),i=e.getImageData(t-r,n-r,r+r,r+r).data):i=e.getImageData(t,n,1,1).data;var s=i.length;while(s--)if(i[s]!==0)return!0;return!1}function a(e,t,n,i){return!r(e,t,n,i)}function f(e,t,n){var r=e.xStart,i=e.yStart,s=e.xEnd,o=e.yEnd,u=Math.max(e.lineWidth,5),a=0,f=r;if(r===s)return Math.abs(t-r)<=u/2;a=(i-o)/(r-s),f=(r*o-s*i)/(r-s);var l=(a*t-n+f)*(a*t-n+f)/(a*a+1);return l<=u/2*u/2}function l(e,t,n){var r=e.pointList,i,s=!1;for(var o=0,u=r.length-1;o<u;o++){i={xStart:r[o][0],yStart:r[o][1],xEnd:r[o+1][0],yEnd:r[o+1][1],lineWidth:Math.max(e.lineWidth,10)};if(!h({x:Math.min(i.xStart,i.xEnd)-i.lineWidth,y:Math.min(i.yStart,i.yEnd)-i.lineWidth,width:Math.abs(i.xStart-i.xEnd)+i.lineWidth,height:Math.abs(i.yStart-i.yEnd)+i.lineWidth},t,n))continue;s=f(i,t,n);if(s)break}return s}function c(e,t,n){return p(e,t,n,e.r)&&!p({x:e.x,y:e.y},t,n,e.r0||0)?!0:!1}function h(e,t,n){return t>=e.x&&t<=e.x+e.width&&n>=e.y&&n<=e.y+e.height?!0:!1}function p(e,t,n,r){return(t-e.x)*(t-e.x)+(n-e.y)*(n-e.y)<r*r}function d(e,t,n){if(!p(e,t,n,e.r)||e.r0>0&&p({x:e.x,y:e.y},t,n,e.r0))return!1;if(Math.abs(e.endAngle-e.startAngle)>=360)return!0;var r=(360-Math.atan2(n-e.y,t-e.x)/Math.PI*180)%360,i=(360+e.endAngle)%360,s=(360+e.startAngle)%360;return i>s?r>=s&&r<=i:!(r>=i&&r<=s)}function v(e,t,n){var r,i,s=e.pointList,o=s.length,u=!1,a=!0,f;for(r=0;r<o;++r)if(s[r][0]==t&&s[r][1]==n){a=!1,u=!0;break}if(a){a=!1,u=!1;for(r=0,i=o-1;r<o;i=r++)if(s[r][1]<n&&n<s[i][1]||s[i][1]<n&&n<s[r][1]){if(t<=s[r][0]||t<=s[i][0]){f=(n-s[r][1])*(s[i][0]-s[r][0])/(s[i][1]-s[r][1])+s[r][0];if(t<f)u=!u;else if(t==f){u=!0;break}}}else if(n==s[r][1]){if(t<s[r][0]){s[r][1]>s[i][1]?--n:++n;break}}else if(s[r][1]==s[i][1]&&n==s[r][1]&&(s[r][0]<t&&t<s[i][0]||s[i][0]<t&&t<s[r][0])){u=!0;break}}return u}function m(t,r,i){t.pointList||e("../shape").get("path").buildPath(n,t);var s=t.pointList,o=!1;for(var u=0,a=s.length;u<a;u++){o=v({pointList:s[u]},r,i);if(o)break}return o}function g(e,r){n||(n=t.getContext()),n.save(),r&&(n.font=r),e=(e+"").split("\n");var i=0;for(var s=0,o=e.length;s<o;s++)i=Math.max(n.measureText(e[s]).width,i);return n.restore(),i}function y(e,r){n||(n=t.getContext()),n.save(),r&&(n.font=r),e=(e+"").split("\n");var i=(n.measureText("国").width+2)*e.length;return n.restore(),i}var t=e("../tool/util"),n;return{isInside:r,isOutside:a,getTextWidth:g,getTextHeight:y}}),r("zrender/tool/matrix",[],function(){var e={create:function(){return[1,0,0,1,0,0]},identity:function(e){e[0]=1,e[1]=0,e[2]=0,e[3]=1,e[4]=0,e[5]=0},mul:function(e,t,n){return e[0]=t[0]*n[0]+t[2]*n[1],e[1]=t[1]*n[0]+t[3]*n[1],e[2]=t[0]*n[2]+t[2]*n[3],e[3]=t[1]*n[2]+t[3]*n[3],e[4]=t[0]*n[4]+t[2]*n[5]+t[4],e[5]=t[1]*n[4]+t[3]*n[5]+t[5],e},translate:function(e,t,n){return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4]+n[0],e[5]=t[5]+n[1],e},rotate:function(e,t,n){var r=t[0],i=t[2],s=t[4],o=t[1],u=t[3],a=t[5],f=Math.sin(n),l=Math.cos(n);return e[0]=r*l+o*f,e[1]=-r*f+o*l,e[2]=i*l+u*f,e[3]=-i*f+l*u,e[4]=l*s+f*a,e[5]=l*a-f*s,e},scale:function(e,t,n){var r=n[0],i=n[1];return e[0]=t[0]*r,e[1]=t[1]*i,e[2]=t[2]*r,e[3]=t[3]*i,e[4]=t[4]*r,e[5]=t[5]*i,e},invert:function(e,t){var n=t[0],r=t[2],i=t[4],s=t[1],o=t[3],u=t[5],a=n*o-s*r;return a?(a=1/a,e[0]=o*a,e[1]=-s*a,e[2]=-r*a,e[3]=n*a,e[4]=(r*u-o*i)*a,e[5]=(s*i-n*u)*a,e):null},mulVector:function(e,t,n){var r=t[0],i=t[2],s=t[4],o=t[1],u=t[3],a=t[5];return e[0]=n[0]*r+n[1]*i+s,e[1]=n[0]*o+n[1]*u+a,e}};return e}),r("zrender/tool/color",["require","../tool/util"],function(e){function f(e){r=e}function l(){r=i}function c(e,t){return e=+e||0,t=t||r,t[e%t.length]}function h(e){s=e}function p(){o=s}function d(){return s}function v(e,r,i,s,o,u,a){n||(n=t.getContext());var f=n.createRadialGradient(e,r,i,s,o,u);for(var l=0,c=a.length;l<c;l++)f.addColorStop(a[l][0],a[l][1]);return f.__nonRecursion=!0,f}function m(e,r,i,s,o){n||(n=t.getContext());var u=n.createLinearGradient(e,r,i,s);for(var a=0,f=o.length;a<f;a++)u.addColorStop(o[a][0],o[a][1]);return u.__nonRecursion=!0,u}function g(e,t,n){e=S(e),t=S(t),e=F(e),t=F(t);var r=[],i=(t[0]-e[0])/n,s=(t[1]-e[1])/n,o=(t[2]-e[2])/n;for(var u=0,a=e[0],f=e[1],l=e[2];u<n;u++)r[u]=b([R(Math.floor(a),[0,255]),R(Math.floor(f),[0,255]),R(Math.floor(l),[0,255])]),a+=i,f+=s,l+=o;return a=t[0],f=t[1],l=t[2],r[u]=b([a,f,l]),r}function y(e,t){var n=[],r=e.length;t===undefined&&(t=20);if(r===1)n=g(e[0],e[0],t);else if(r>1)for(var i=0,s=r-1;i<s;i++){var o=g(e[i],e[i+1],t);i<s-1&&o.pop(),n=n.concat(o)}return n}function b(e,t){t=t||"rgb";if(e&&(e.length===3||e.length===4)){e=q(e,function(e){return e>1?Math.ceil(e):e});if(t.indexOf("hex")>-1)return e=q(e.slice(0,3),function(e){return e=Number(e).toString(16),e.length===1?"0"+e:e}),"#"+e.join("");if(t.indexOf("hs")>-1){var n=q(e.slice(1,3),function(e){return e+"%"});e[1]=n[0],e[2]=n[1]}return t.indexOf("a")>-1?(e.length===3&&e.push(1),e[3]=R(e[3],[0,1]),t+"("+e.slice(0,4).join(",")+")"):t+"("+e.slice(0,3).join(",")+")"}}function w(e){e=_(e),e.indexOf("#")>-1&&(e=x(e));var t=e.replace(/[rgbahsvl%\(\)]/ig,"").split(",");return t=q(t,function(e){return Number(e)}),t}function E(e,t){var n=F(e),r=n[3];return typeof r=="undefined"&&(r=1),e.indexOf("hsb")>-1?n=U(n):e.indexOf("hsl")>-1&&(n=z(n)),t.indexOf("hsb")>-1||t.indexOf("hsv")>-1?n=X(n):t.indexOf("hsl")>-1&&(n=V(n)),n[3]=r,b(n,t)}function S(e){return E(e,"rgba")}function x(e){return E(e,"rgb")}function T(e){return E(e,"hex")}function N(e){return E(e,"hsva")}function C(e){return E(e,"hsv")}function k(e){return E(e,"hsba")}function L(e){return E(e,"hsb")}function A(e){return E(e,"hsla")}function O(e){return E(e,"hsl")}function M(e){for(var t in a)if(T(a[t])===T(e))return t;return null}function _(e){return e=String(e),e=e.replace(/(^\s*)|(\s*$)/g,""),/^[^#]*?$/i.test(e)&&(e=e.replace(/\s/g,"")),e}function D(e){a[e]&&(e=a[e]),e=_(e),e=e.replace(/hsv/i,"hsb");if(/^#[0-9a-f]{3}$/i.test(e)){var t=e.replace("#","").split("");e="#"+t[0]+t[0]+t[1]+t[1]+t[2]+t[2]}return e}function P(e,t){var n=t>0?1:-1;typeof t=="undefined"&&(t=0),t=Math.abs(t)>1?1:Math.abs(t),e=x(e);var r=F(e);for(var i=0;i<3;i++)n===1?r[i]=Math.floor(r[i]*(1-t)):r[i]=Math.floor((255-r[i])*t+r[i]);return"rgb("+r.join(",")+")"}function H(e){var t=F(S(e));return t=q(t,function(e){return 255-e}),b(t,"rgb")}function B(e,t,n){typeof n=="undefined"&&(n=.5),n=1-R(n,[0,1]);var r=n*2-1,i=F(S(e)),s=F(S(t)),o=i[3]-s[3],u=((r*o===-1?r:(r+o)/(1+r*o))+1)/2,a=1-u,f=[];for(var l=0;l<3;l++)f[l]=i[l]*u+s[l]*a;var c=i[3]*n+s[3]*(1-n);return c=Math.max(0,Math.min(1,c)),i[3]===1&&s[3]===1?b(f,"rgb"):(f[3]=c,b(f,"rgba"))}function j(){return T("rgb("+Math.round(Math.random()*256)+","+Math.round(Math.random()*256)+","+Math.round(Math.random()*256)+")")}function F(e){e=D(e);var t=e.match(u);if(t===null)throw new Error("The color format error");var n,r,i=[],s;if(t[2])n=t[2].replace("#","").split(""),s=[n[0]+n[1],n[2]+n[3],n[4]+n[5]],i=q(s,function(e){return R(parseInt(e,16),[0,255])});else if(t[4]){var o=t[4].split(",");r=o[3],s=o.slice(0,3),i=q(s,function(e){return e=Math.floor(e.indexOf("%")>0?parseInt(e,0)*2.55:e),R(e,[0,255])}),typeof r!="undefined"&&i.push(R(parseFloat(r),[0,1]))}else if(t[5]||t[6]){var a=(t[5]||t[6]).split(","),f=parseInt(a[0],0)/360,l=a[1],c=a[2];r=a[3],i=q([l,c],function(e){return R(parseFloat(e)/100,[0,1])}),i.unshift(f),typeof r!="undefined"&&i.push(R(parseFloat(r),[0,1]))}return i}function I(e,t){t===null&&(t=1);var n=F(S(e));return n[3]=R(Number(t).toFixed(4),[0,1]),b(n,"rgba")}function q(e,t){if(typeof t!="function")throw new TypeError;var n=e?e.length:0;for(var r=0;r<n;r++)e[r]=t(e[r]);return e}function R(e,t){return e<=t[0]?e=t[0]:e>=t[1]&&(e=t[1]),e}function U(e){var t=e[0],n=e[1],r=e[2],i,s,o;if(n===0)i=r*255,s=r*255,o=r*255;else{var u=t*6;u===6&&(u=0);var a=Math.floor(u),f=r*(1-n),l=r*(1-n*(u-a)),c=r*(1-n*(1-(u-a))),h=0,p=0,d=0;a===0?(h=r,p=c,d=f):a===1?(h=l,p=r,d=f):a===2?(h=f,p=r,d=c):a===3?(h=f,p=l,d=r):a===4?(h=c,p=f,d=r):(h=r,p=f,d=l),i=h*255,s=p*255,o=d*255}return[i,s,o]}function z(e){var t=e[0],n=e[1],r=e[2],i,s,o;if(n===0)i=r*255,s=r*255,o=r*255;else{var u;r<.5?u=r*(1+n):u=r+n-n*r;var a=2*r-u;i=255*W(a,u,t+1/3),s=255*W(a,u,t),o=255*W(a,u,t-1/3)}return[i,s,o]}function W(e,t,n){return n<0&&(n+=1),n>1&&(n-=1),6*n<1?e+(t-e)*6*n:2*n<1?t:3*n<2?e+(t-e)*(2/3-n)*6:e}function X(e){var t=e[0]/255,n=e[1]/255,r=e[2]/255,i=Math.min(t,n,r),s=Math.max(t,n,r),o=s-i,u=s,a,f;if(o===0)a=0,f=0;else{f=o/s;var l=((s-t)/6+o/2)/o,c=((s-n)/6+o/2)/o,h=((s-r)/6+o/2)/o;t===s?a=h-c:n===s?a=1/3+l-h:r===s&&(a=2/3+c-l),a<0&&(a+=1),a>1&&(a-=1)}return a*=360,f*=100,u*=100,[a,f,u]}function V(e){var t=e[0]/255,n=e[1]/255,r=e[2]/255,i=Math.min(t,n,r),s=Math.max(t,n,r),o=s-i,u=(s+i)/2,a,f;if(o===0)a=0,f=0;else{u<.5?f=o/(s+i):f=o/(2-s-i);var l=((s-t)/6+o/2)/o,c=((s-n)/6+o/2)/o,h=((s-r)/6+o/2)/o;t===s?a=h-c:n===s?a=1/3+l-h:r===s&&(a=2/3+c-l),a<0&&(a+=1),a>1&&(a-=1)}return a*=360,f*=100,u*=100,[a,f,u]}var t=e("../tool/util"),n,r=["#ff9277"," #dddd00"," #ffc877"," #bbe3ff"," #d5ffbb","#bbbbff"," #ddb000"," #b0dd00"," #e2bbff"," #ffbbe3","#ff7777"," #ff9900"," #83dd00"," #77e3ff"," #778fff","#c877ff"," #ff77ab"," #ff6600"," #aa8800"," #77c7ff","#ad77ff"," #ff77ff"," #dd0083"," #777700"," #00aa00","#0088aa"," #8400dd"," #aa0088"," #dd0000"," #772e00"],i=r,s="rgba(255,255,0,0.5)",o=s,u=/^\s*((#[a-f\d]{6})|(#[a-f\d]{3})|rgba?\(\s*([\d\.]+%?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+%?)?)\s*\)|hsba?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+)?)%?\s*\)|hsla?\(\s*([\d\.]+(?:deg|\xb0|%)?\s*,\s*[\d\.]+%?\s*,\s*[\d\.]+%?(?:\s*,\s*[\d\.]+)?)%?\s*\))\s*$/i,a={aliceblue:"#f0f8ff",antiquewhite:"#faebd7",aqua:"#0ff",aquamarine:"#7fffd4",azure:"#f0ffff",beige:"#f5f5dc",bisque:"#ffe4c4",black:"#000",blanchedalmond:"#ffebcd",blue:"#00f",blueviolet:"#8a2be2",brown:"#a52a2a",burlywood:"#deb887",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",cornflowerblue:"#6495ed",cornsilk:"#fff8dc",crimson:"#dc143c",cyan:"#0ff",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:"#f0f",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:"#789",lightslategrey:"#789",lightsteelblue:"#b0c4de",lightyellow:"#ffffe0",lime:"#0f0",limegreen:"#32cd32",linen:"#faf0e6",magenta:"#f0f",maroon:"#800000",mediumaquamarine:"#66cdaa",mediumblue:"#0000cd",mediumorchid:"#ba55d3",mediumpurple:"#9370d8",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:"#d87093",papayawhip:"#ffefd5",peachpuff:"#ffdab9",peru:"#cd853f",pink:"#ffc0cb",plum:"#dda0dd",powderblue:"#b0e0e6",purple:"#800080",red:"#f00",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:"#fff",whitesmoke:"#f5f5f5",yellow:"#ff0",yellowgreen:"#9acd32"};return{customPalette:f,resetPalette:l,getColor:c,getHighlightColor:d,customHighlight:h,resetHighlight:p,getRadialGradient:v,getLinearGradient:m,getGradientColors:y,getStepColors:g,reverse:H,mix:B,lift:P,trim:_,random:j,toRGB:x,toRGBA:S,toHex:T,toHSL:O,toHSLA:A,toHSB:L,toHSBA:k,toHSV:C,toHSVA:N,toName:M,toColor:b,toArray:w,alpha:I,getData:F}}),r("zrender/shape/base",["require","../tool/area","../tool/matrix","../tool/vector","../tool/color"],function(e){function s(e){var n=["brush","setContext","dashedLineTo","smoothBezier","smoothSpline","drawText","getHighlightStyle","getHighlightZoom","drift","isCover","updateTransform"],r=n.length,i=e.prototype,s=0,o;for(;s<r;s++)o=n[s],i[o]||(i[o]=t[o])}function o(e,t,n){var r=t.style||{};this.brushTypeOnly&&(r.brushType=this.brushTypeOnly),n&&(r=this.getHighlightStyle(r,t.highlightStyle||{},this.brushTypeOnly)),this.brushTypeOnly=="stroke"&&(r.strokeColor=r.strokeColor||r.color),e.save(),this.setContext(e,r),t.__needTransform&&e.transform.apply(e,this.updateTransform(t)),e.beginPath(),this.buildPath(e,r),this.brushTypeOnly!="stroke"&&e.closePath();switch(r.brushType){case"fill":e.fill();break;case"stroke":r.lineWidth>0&&e.stroke();break;case"both":e.fill(),r.lineWidth>0&&e.stroke();break;default:e.fill()}typeof r.text!="undefined"&&this.drawText(e,r,t.style),e.restore();return}function u(e,t){t.color&&(e.fillStyle=t.color),t.strokeColor&&(e.strokeStyle=t.strokeColor),typeof t.opacity!="undefined"&&(e.globalAlpha=t.opacity),t.lineCap&&(e.lineCap=t.lineCap),t.lineJoin&&(e.lineJoin=t.lineJoin),t.miterLimit&&(e.miterLimit=t.miterLimit),typeof t.lineWidth!="undefined"&&(e.lineWidth=t.lineWidth),typeof t.shadowBlur!="undefined"&&(e.shadowBlur=t.shadowBlur),t.shadowColor&&(e.shadowColor=t.shadowColor),typeof t.shadowOffsetX!="undefined"&&(e.shadowOffsetX=t.shadowOffsetX),typeof t.shadowOffsetY!="undefined"&&(e.shadowOffsetY=t.shadowOffsetY)}function a(e,t,n,r,i,s){s=typeof s=="undefined"?5:s;var o=r-t,u=i-n,a=Math.floor(Math.sqrt(o*o+u*u)/s);for(var f=0;f<a;++f)e[f%2===0?"moveTo":"lineTo"](t+o/a*f,n+u/a*f)}function f(e,t,n){var r=e.length,s=[],o=[],u=[],a=[],f,l;for(var c=0;c<r;c++){var h=e[c],f,l;if(n)f=e[c===0?r-1:c-1],l=e[(c+1)%r];else{if(c===0||c===r-1){s.push(e[c]);continue}f=e[c-1],l=e[c+1]}i.sub(o,l,f),i.scale(o,o,t);var p=i.distance(h,f),d=i.distance(h,l),v=p+d;p/=v,d/=v,i.scale(u,o,-p),i.scale(a,o,d),s.push(i.add([],h,u)),s.push(i.add([],h,a))}return n&&s.push(s.shift()),s}function l(e,t){var n=e.length,r=[],s=0;for(var o=1;o<n;o++)s+=i.distance(e[o-1],e[o]);var u=s/5;u=u<n?n:u;for(var o=0;o<u;o++){var a;t?a=o/(u-1)*n:a=o/(u-1)*(n-1);var f=Math.floor(a),l=a-f,h,p=e[f%n],d,v;t?(h=e[(f-1+n)%n],d=e[(f+1)%n],v=e[(f+2)%n]):(h=e[f===0?f:f-1],d=e[f>n-2?n-1:f+1],v=e[f>n-3?n-1:f+2]);var m=l*l,g=l*m;r.push([c(h[0],p[0],d[0],v[0],l,m,g),c(h[1],p[1],d[1],v[1],l,m,g)])}return r}function c(e,t,n,r,i,s,o){var u=(n-e)*.5,a=(r-t)*.5;return(2*(t-n)+u+a)*o+(-3*(t-n)-2*u-a)*s+u*i+t}function h(e,t,n){t.textColor=t.textColor||t.color||t.strokeColor,e.fillStyle=t.textColor,t.textPosition=="inside"&&(e.shadowColor="rgba(0,0,0,0)");var r=10,i,s,o,u,a=t.textPosition||this.textPosition||"top";if(a!="inside"&&a!="top"&&a!="bottom"&&a!="left"&&a!="right"||!this.getRect)if(a=="start"||a=="end"){var l,c,h,d;if(typeof t.pointList!="undefined"){var v=t.pointList;if(v.length<2)return;var m=v.length;switch(a){case"start":l=v[0][0],c=v[1][0],h=v[0][1],d=v[1][1];break;case"end":l=v[m-2][0],c=v[m-1][0],h=v[m-2][1],d=v[m-1][1]}}else l=t.xStart||0,c=t.xEnd||0,h=t.yStart||0,d=t.yEnd||0;switch(a){case"start":i=l<c?"end":"start",s=h<d?"bottom":"top",o=l,u=h;break;case"end":i=l<c?"start":"end",s=h<d?"top":"bottom",o=c,u=d}r-=4,l!=c?o-=i=="end"?r:-r:i="center",h!=d?u-=s=="bottom"?r:-r:s="middle"}else a=="specific"&&(o=t.textX||0,u=t.textY||0,i="start",s="middle");else{var f=(n||t).__rect||this.getRect(n||t);switch(a){case"inside":o=f.x+f.width/2,u=f.y+f.height/2,i="center",s="middle",t.brushType!="stroke"&&t.textColor==t.color&&(e.fillStyle="#fff");break;case"left":o=f.x-r,u=f.y+f.height/2,i="end",s="middle";break;case"right":o=f.x+f.width+r,u=f.y+f.height/2,i="start",s="middle";break;case"top":o=f.x+f.width/2,u=f.y-r,i="center",s="bottom";break;case"bottom":o=f.x+f.width/2,u=f.y+f.height+r,i="center",s="top"}}typeof o!="undefined"&&typeof u!="undefined"&&p(e,t.text,o,u,t.textFont,t.textAlign||i,t.textBaseline||s)}function p(e,t,r,i,s,o,u){s&&(e.font=s),e.textAlign=o,e.textBaseline=u;var a=d(t,r,i,s,o,u);t=(t+"").split("\n");var f=n.getTextHeight("国",s),r=r,i;u=="top"?i=a.y:u=="bottom"?i=a.y+f:i=a.y+f/2;for(var l=0,c=t.length;l<c;l++)e.fillText(t[l],r,i),i+=f}function d(e,t,r,i,s,o){var u=n.getTextWidth(e,i),a=n.getTextHeight("国",i);e=(e+"").split("\n");var f=t;s=="end"||s=="right"?f-=u:s=="center"&&(f-=u/2);var l;return o=="top"?l=r:o=="bottom"?l=r-a*e.length:l=r-a*e.length/2,{x:f,y:l,width:u,height:a*e.length}}function v(t,n,r){var i={};for(var s in t)i[s]=t[s];var o=e("../tool/color"),u=o.getHighlightColor();t.brushType!="stroke"?(i.strokeColor=u,i.lineWidth=(t.lineWidth||1)+this.getHighlightZoom(),i.brushType="both"):r!="stroke"?(i.strokeColor=u,i.lineWidth=(t.lineWidth||1)+this.getHighlightZoom()):i.strokeColor=n.strokeColor||o.mix(t.strokeColor,o.toRGB(u));for(var s in n)typeof n[s]!="undefined"&&(i[s]=n[s]);return i}function m(){return this.type!="text"?6:2}function g(e,t,n){e.position[0]+=t,e.position[1]+=n}function y(e,t,i){if(e.__needTransform&&e._transform){var s=[];r.invert(s,e._transform);var o=[t,i];r.mulVector(o,s,[t,i,1]),t==o[0]&&i==o[1]&&(Math.abs(e.rotation[0])>1e-4||Math.abs(e.position[0])>1e-4||Math.abs(e.position[1])>1e-4||Math.abs(e.scale[0]-1)>1e-4||Math.abs(e.scale[1]-1)>1e-4?e.__needTransform=!0:e.__needTransform=!1),t=o[0],i=o[1]}var u;return e.style.__rect?u=e.style.__rect:(u=this.getRect(e.style),e.style.__rect=u),t>=u.x&&t<=u.x+u.width&&i>=u.y&&i<=u.y+u.height?n.isInside(this,e.style,t,i):!1}function b(e){var t=e._transform||r.create();r.identity(t);if(e.scale&&(e.scale[0]!==1||e.scale[1]!==1)){var n=e.scale[2]||0,i=e.scale[3]||0;(n||i)&&r.translate(t,t,[-n,-i]),r.scale(t,t,e.scale),(n||i)&&r.translate(t,t,[n,i])}if(e.rotation)if(e.rotation instanceof Array){if(e.rotation[0]!==0){var n=e.rotation[1]||0,i=e.rotation[2]||0;(n||i)&&r.translate(t,t,[-n,-i]),r.rotate(t,t,e.rotation[0]),(n||i)&&r.translate(t,t,[n,i])}}else e.rotation!==0&&r.rotate(t,t,e.rotation);return e.position&&(e.position[0]!==0||e.position[1]!==0)&&r.translate(t,t,e.position),e._transform=t,t}var t,n=e("../tool/area"),r=e("../tool/matrix"),i=e("../tool/vector");return t={derive:s,brush:o,setContext:u,dashedLineTo:a,smoothBezier:f,smoothSpline:l,drawText:h,getHighlightStyle:v,getHighlightZoom:m,drift:g,isCover:y,updateTransform:b},t}),r("zrender/shape/circle",["require","./base","../shape"],function(e){function t(){this.type="circle"}t.prototype={buildPath:function(e,t){e.arc(t.x,t.y,t.r,0,Math.PI*2,!0);return},getRect:function(e){var t;return e.brushType=="stroke"||e.brushType=="fill"?t=e.lineWidth||1:t=0,{x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:e.r*2+t,height:e.r*2+t}}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("circle",new t),t}),r("zrender/shape/ellipse",["require","./base","../shape"],function(e){function t(){this.type="ellipse"}t.prototype={buildPath:function(e,t){var n=.5522848,r=t.x,i=t.y,s=t.a,o=t.b,u=s*n,a=o*n;e.moveTo(r-s,i),e.bezierCurveTo(r-s,i-a,r-u,i-o,r,i-o),e.bezierCurveTo(r+u,i-o,r+s,i-a,r+s,i),e.bezierCurveTo(r+s,i+a,r+u,i+o,r,i+o),e.bezierCurveTo(r-u,i+o,r-s,i+a,r-s,i);return},getRect:function(e){var t;return e.brushType=="stroke"||e.brushType=="fill"?t=e.lineWidth||1:t=0,{x:Math.round(e.x-e.a-t/2),y:Math.round(e.y-e.b-t/2),width:e.a*2+t,height:e.b*2+t}}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("ellipse",new t),t}),r("zrender/shape/line",["require","./base","../shape"],function(e){function t(){this.type="line",this.brushTypeOnly="stroke",this.textPosition="end"}t.prototype={buildPath:function(e,t){if(!t.lineType||t.lineType=="solid")e.moveTo(t.xStart,t.yStart),e.lineTo(t.xEnd,t.yEnd);else if(t.lineType=="dashed"||t.lineType=="dotted"){var n=(t.lineWidth||1)*(t.lineType=="dashed"?5:1);this.dashedLineTo(e,t.xStart,t.yStart,t.xEnd,t.yEnd,n)}},getRect:function(e){var t=e.lineWidth||1;return{x:Math.min(e.xStart,e.xEnd)-t,y:Math.min(e.yStart,e.yEnd)-t,width:Math.abs(e.xStart-e.xEnd)+t,height:Math.abs(e.yStart-e.yEnd)+t}}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("line",new t),t}),r("zrender/shape/polygon",["require","./base","../shape"],function(e){function t(){this.type="polygon"}t.prototype={brush:function(e,t,n){var r=t.style||{};n&&(r=this.getHighlightStyle(r,t.highlightStyle||{})),e.save(),this.setContext(e,r),t.__needTransform&&e.transform.apply(e,this.updateTransform(t));var i=!1;if(r.brushType=="fill"||r.brushType=="both"||typeof r.brushType=="undefined")e.beginPath(),r.lineType=="dashed"||r.lineType=="dotted"?(this.buildPath(e,{lineType:"solid",lineWidth:r.lineWidth,pointList:r.pointList}),i=!1):(this.buildPath(e,r),i=!0),e.closePath(),e.fill();r.lineWidth>0&&(r.brushType=="stroke"||r.brushType=="both")&&(i||(e.beginPath(),this.buildPath(e,r),e.closePath()),e.stroke()),r.text&&this.drawText(e,r,t.style),e.restore();return},buildPath:function(e,t){var n=t.pointList,r=n[0],i=n[n.length-1];r&&i&&r[0]==i[0]&&r[1]==i[1]&&n.pop();if(n.length<2)return;if(t.smooth&&t.smooth!=="spline"){var s=this.smoothBezier(n,t.smooth,!0);e.moveTo(n[0][0],n[0][1]);var o,u,a,f=n.length;for(var l=0;l<f;l++)o=s[l*2],u=s[l*2+1],a=n[(l+1)%f],e.bezierCurveTo(o[0],o[1],u[0],u[1],a[0],a[1])}else{t.smooth==="spline"&&(n=this.smoothSpline(n,!0));if(!t.lineType||t.lineType=="solid"){e.moveTo(n[0][0],n[0][1]);for(var l=1,c=n.length;l<c;l++)e.lineTo(n[l][0],n[l][1]);e.lineTo(n[0][0],n[0][1])}else if(t.lineType=="dashed"||t.lineType=="dotted"){var h=t._dashLength||(t.lineWidth||1)*(t.lineType=="dashed"?5:1);t._dashLength=h,e.moveTo(n[0][0],n[0][1]);for(var l=1,c=n.length;l<c;l++)this.dashedLineTo(e,n[l-1][0],n[l-1][1],n[l][0],n[l][1],h);this.dashedLineTo(e,n[n.length-1][0],n[n.length-1][1],n[0][0],n[0][1],h)}}return},getRect:function(e){var t=Number.MAX_VALUE,n=Number.MIN_VALUE,r=Number.MAX_VALUE,i=Number.MIN_VALUE,s=e.pointList;for(var o=0,u=s.length;o<u;o++)s[o][0]<t&&(t=s[o][0]),s[o][0]>n&&(n=s[o][0]),s[o][1]<r&&(r=s[o][1]),s[o][1]>i&&(i=s[o][1]);var a;return e.brushType=="stroke"||e.brushType=="fill"?a=e.lineWidth||1:a=0,{x:Math.round(t-a/2),y:Math.round(r-a/2),width:n-t+a,height:i-r+a}}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("polygon",new t),t}),r("zrender/shape/brokenLine",["require","../shape","./base","../shape"],function(e){function t(){this.type="brokenLine",this.brushTypeOnly="stroke",this.textPosition="end"}t.prototype={buildPath:function(e,t){var n=t.pointList;if(n.length<2)return;if(t.smooth&&t.smooth!=="spline"){var r=this.smoothBezier(n,t.smooth,!1);e.moveTo(n[0][0],n[0][1]);var i,s,o;for(var u=0,a=n.length;u<a-1;u++)i=r[u*2],s=r[u*2+1],o=n[u+1],e.bezierCurveTo(i[0],i[1],s[0],s[1],o[0],o[1])}else{t.smooth==="spline"&&(n=this.smoothSpline(n,!1));if(!t.lineType||t.lineType=="solid"){e.moveTo(n[0][0],n[0][1]);for(var u=1,a=n.length;u<a;u++)e.lineTo(n[u][0],n[u][1])}else if(t.lineType=="dashed"||t.lineType=="dotted"){var f=(t.lineWidth||1)*(t.lineType=="dashed"?5:1);e.moveTo(n[0][0],n[0][1]);for(var u=1,a=n.length;u<a;u++)this.dashedLineTo(e,n[u-1][0],n[u-1][1],n[u][0],n[u][1],f)}}return},getRect:function(t){var n=e("../shape");return n.get("polygon").getRect(t)}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("brokenLine",new t),t}),r("zrender/shape/rectangle",["require","./base","../shape"],function(e){function t(){this.type="rectangle"}t.prototype={_buildRadiusPath:function(e,t){var n=t.x,r=t.y,i=t.width,s=t.height,o=t.radius,u,a,f,l;typeof o=="number"?u=a=f=l=o:o instanceof Array?o.length===1?u=a=f=l=o[0]:o.length===2?(u=f=o[0],a=l=o[1]):o.length===3?(u=o[0],a=l=o[1],f=o[2]):(u=o[0],a=o[1],f=o[2],l=o[3]):u=a=f=l=0,e.moveTo(n+u,r),e.lineTo(n+i-a,r),a!==0&&e.quadraticCurveTo(n+i,r,n+i,r+a),e.lineTo(n+i,r+s-f),f!==0&&e.quadraticCurveTo(n+i,r+s,n+i-f,r+s),e.lineTo(n+l,r+s),l!==0&&e.quadraticCurveTo(n,r+s,n,r+s-l),e.lineTo(n,r+u),u!==0&&e.quadraticCurveTo(n,r,n+u,r)},buildPath:function(e,t){t.radius?this._buildRadiusPath(e,t):(e.moveTo(t.x,t.y),e.lineTo(t.x+t.width,t.y),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x,t.y));return},getRect:function(e){var t;return e.brushType=="stroke"||e.brushType=="fill"?t=e.lineWidth||1:t=0,{x:Math.round(e.x-t/2),y:Math.round(e.y-t/2),width:e.width+t,height:e.height+t}}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("rectangle",new t),t}),r("zrender/shape/ring",["require","./base","../shape"],function(e){function t(){this.type="ring"}t.prototype={buildPath:function(e,t){e.arc(t.x,t.y,t.r,0,Math.PI*2,!1),e.moveTo(t.x+t.r0,t.y),e.arc(t.x,t.y,t.r0,0,Math.PI*2,!0);return},getRect:function(e){var t;return e.brushType=="stroke"||e.brushType=="fill"?t=e.lineWidth||1:t=0,{x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:e.r*2+t,height:e.r*2+t}}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("ring",new t),t}),r("zrender/tool/math",[],function(){function t(t,n){return Math.sin(n?t*e:t)}function n(t,n){return Math.cos(n?t*e:t)}function r(t){return t*e}function i(t){return t/e}var e=Math.PI/180;return{sin:t,cos:n,degreeToRadian:r,radianToDegree:i}}),r("zrender/shape/sector",["require","../tool/math","../shape","./base","../shape"],function(e){function n(){this.type="sector"}var t=e("../tool/math");n.prototype={buildPath:function(e,n){var r=n.x,i=n.y,s=typeof n.r0=="undefined"?0:n.r0,o=n.r,u=n.startAngle,a=n.endAngle;if(Math.abs(a-u)>=360){e.arc(r,i,o,0,Math.PI*2,!1),s!==0&&(e.moveTo(r+s,i),e.arc(r,i,s,0,Math.PI*2,!0));return}u=t.degreeToRadian(u),a=t.degreeToRadian(a);var f=Math.PI*2,l=t.cos(u),c=t.sin(u);e.moveTo(l*s+r,i-c*s),e.lineTo(l*o+r,i-c*o),e.arc(r,i,o,f-u,f-a,!0),e.lineTo(t.cos(a)*s+r,i-t.sin(a)*s),s!==0&&e.arc(r,i,s,f-a,f-u,!1);return},getRect:function(n){var r=e("../shape"),i=n.x,s=n.y,o=typeof n.r0=="undefined"?0:n.r0,u=n.r,a=n.startAngle,f=n.endAngle;if(Math.abs(f-a)>=360)return r.get("ring").getRect(n);a=(720+a)%360,f=(720+f)%360,f<=a&&(f+=360);var l=[];return a<=90&&f>=90&&l.push([i,s-u]),a<=180&&f>=180&&l.push([i-u,s]),a<=270&&f>=270&&l.push([i,s+u]),a<=360&&f>=360&&l.push([i+u,s]),a=t.degreeToRadian(a),f=t.degreeToRadian(f),l.push([t.cos(a)*o+i,s-t.sin(a)*o]),l.push([t.cos(a)*u+i,s-t.sin(a)*u]),l.push([t.cos(f)*u+i,s-t.sin(f)*u]),l.push([t.cos(f)*o+i,s-t.sin(f)*o]),r.get("polygon").getRect({brushType:n.brushType,lineWidth:n.lineWidth,pointList:l})}};var r=e("./base");r.derive(n);var i=e("../shape");return i.define("sector",new n),n}),r("zrender/shape/text",["require","../tool/area","./base","../shape"],function(e){function n(){this.type="text"}var t=e("../tool/area");n.prototype={brush:function(e,n,r){var i=n.style||{};r&&(i=this.getHighlightStyle(i,n.highlightStyle||{}));if(typeof i.text=="undefined")return;e.save(),this.setContext(e,i),n.__needTransform&&e.transform.apply(e,this.updateTransform(n)),i.textFont&&(e.font=i.textFont),e.textAlign=i.textAlign||"start",e.textBaseline=i.textBaseline||"middle";var s=(i.text+"").split("\n"),o=t.getTextHeight("国",i.textFont),u=this.getRect(i),a=i.x,f;i.textBaseline=="top"?f=u.y:i.textBaseline=="bottom"?f=u.y+o:f=u.y+o/2;for(var l=0,c=s.length;l<c;l++){if(i.maxWidth)switch(i.brushType){case"fill":e.fillText(s[l],a,f,i.maxWidth);break;case"stroke":e.strokeText(s[l],a,f,i.maxWidth);break;case"both":e.fillText(s[l],a,f,i.maxWidth),e.strokeText(s[l],a,f,i.maxWidth);break;default:e.fillText(s[l],a,f,i.maxWidth)}else switch(i.brushType){case"fill":e.fillText(s[l],a,f);break;case"stroke":e.strokeText(s[l],a,f);break;case"both":e.fillText(s[l],a,f),e.strokeText(s[l],a,f);break;default:e.fillText(s[l],a,f)}f+=o}e.restore();return},getRect:function(e){var n=t.getTextWidth(e.text,e.textFont),r=t.getTextHeight(e.text,e.textFont),i=e.x;e.textAlign=="end"||e.textAlign=="right"?i-=n:e.textAlign=="center"&&(i-=n/2);var s;return e.textBaseline=="top"?s=e.y:e.textBaseline=="bottom"?s=e.y-r:s=e.y-r/2,{x:i,y:s,width:n,height:r}}};var r=e("./base");r.derive(n);var i=e("../shape");return i.define("text",new n),n}),r("zrender/shape/heart",["require","./base","../shape"],function(e){function t(){this.type="heart"}t.prototype={buildPath:function(e,t){e.moveTo(t.x,t.y),e.bezierCurveTo(t.x+t.a/2,t.y-t.b*2/3,t.x+t.a*2,t.y+t.b/3,t.x,t.y+t.b),e.bezierCurveTo(t.x-t.a*2,t.y+t.b/3,t.x-t.a/2,t.y-t.b*2/3,t.x,t.y);return},getRect:function(e){var t;return e.brushType=="stroke"||e.brushType=="fill"?t=e.lineWidth||1:t=0,{x:Math.round(e.x-e.a-t/2),y:Math.round(e.y-e.b/4-t/2),width:e.a*2+t,height:e.b*5/4+t}}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("heart",new t),t}),r("zrender/shape/droplet",["require","./base","../shape"],function(e){function t(){this.type="droplet"}t.prototype={buildPath:function(e,t){e.moveTo(t.x,t.y+t.a),e.bezierCurveTo(t.x+t.a,t.y+t.a,t.x+t.a*3/2,t.y-t.a/3,t.x,t.y-t.b),e.bezierCurveTo(t.x-t.a*3/2,t.y-t.a/3,t.x-t.a,t.y+t.a,t.x,t.y+t.a);return},getRect:function(e){var t;return e.brushType=="stroke"||e.brushType=="fill"?t=e.lineWidth||1:t=0,{x:Math.round(e.x-e.a-t/2),y:Math.round(e.y-e.b-t/2),width:e.a*2+t,height:e.a+e.b+t}}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("droplet",new t),t}),r("zrender/shape/path",["require","./base","../shape"],function(e){function t(){this.type="path"}t.prototype={_parsePathData:function(e){if(!e)return[];var t=e,n=["m","M","l","L","v","V","h","H","z","Z","c","C","q","Q","t","T","s","S","a","A"];t=t.replace(/-/g," -"),t=t.replace(/  /g," "),t=t.replace(/ /g,","),t=t.replace(/,,/g,",");var r;for(r=0;r<n.length;r++)t=t.replace(new RegExp(n[r],"g"),"|"+n[r]);var i=t.split("|"),s=[],o=0,u=0;for(r=1;r<i.length;r++){var a=i[r],f=a.charAt(0);a=a.slice(1),a=a.replace(new RegExp("e,-","g"),"e-");var l=a.split(",");l.length>0&&l[0]===""&&l.shift();for(var c=0;c<l.length;c++)l[c]=parseFloat(l[c]);while(l.length>0){if(isNaN(l[0]))break;var h=null,p=[],d,v,m,g,y,b,w,E,S=o,x=u;switch(f){case"l":o+=l.shift(),u+=l.shift(),h="L",p.push(o,u);break;case"L":o=l.shift(),u=l.shift(),p.push(o,u);break;case"m":o+=l.shift(),u+=l.shift(),h="M",p.push(o,u),f="l";break;case"M":o=l.shift(),u=l.shift(),h="M",p.push(o,u),f="L";break;case"h":o+=l.shift(),h="L",p.push(o,u);break;case"H":o=l.shift(),h="L",p.push(o,u);break;case"v":u+=l.shift(),h="L",p.push(o,u);break;case"V":u=l.shift(),h="L",p.push(o,u);break;case"C":p.push(l.shift(),l.shift(),l.shift(),l.shift()),o=l.shift(),u=l.shift(),p.push(o,u);break;case"c":p.push(o+l.shift(),u+l.shift(),o+l.shift(),u+l.shift()),o+=l.shift(),u+=l.shift(),h="C",p.push(o,u);break;case"S":d=o,v=u,m=s[s.length-1],m.command==="C"&&(d=o+(o-m.points[2]),v=u+(u-m.points[3])),p.push(d,v,l.shift(),l.shift()),o=l.shift(),u=l.shift(),h="C",p.push(o,u);break;case"s":d=o,v=u,m=s[s.length-1],m.command==="C"&&(d=o+(o-m.points[2]),v=u+(u-m.points[3])),p.push(d,v,o+l.shift(),u+l.shift()),o+=l.shift(),u+=l.shift(),h="C",p.push(o,u);break;case"Q":p.push(l.shift(),l.shift()),o=l.shift(),u=l.shift(),p.push(o,u);break;case"q":p.push(o+l.shift(),u+l.shift()),o+=l.shift(),u+=l.shift(),h="Q",p.push(o,u);break;case"T":d=o,v=u,m=s[s.length-1],m.command==="Q"&&(d=o+(o-m.points[0]),v=u+(u-m.points[1])),o=l.shift(),u=l.shift(),h="Q",p.push(d,v,o,u);break;case"t":d=o,v=u,m=s[s.length-1],m.command==="Q"&&(d=o+(o-m.points[0]),v=u+(u-m.points[1])),o+=l.shift(),u+=l.shift(),h="Q",p.push(d,v,o,u);break;case"A":g=l.shift(),y=l.shift(),b=l.shift(),w=l.shift(),E=l.shift(),S=o,x=u,o=l.shift(),u=l.shift(),h="A",p=this._convertPoint(S,x,o,u,w,E,g,y,b);break;case"a":g=l.shift(),y=l.shift(),b=l.shift(),w=l.shift(),E=l.shift(),S=o,x=u,o+=l.shift(),u+=l.shift(),h="A",p=this._convertPoint(S,x,o,u,w,E,g,y,b)}s.push({command:h||f,points:p})}(f==="z"||f==="Z")&&s.push({command:"z",points:[]})}return s},_convertPoint:function(e,t,n,r,i,s,o,u,a){var f=a*(Math.PI/180),l=Math.cos(f)*(e-n)/2+Math.sin(f)*(t-r)/2,c=-1*Math.sin(f)*(e-n)/2+Math.cos(f)*(t-r)/2,h=l*l/(o*o)+c*c/(u*u);h>1&&(o*=Math.sqrt(h),u*=Math.sqrt(h));var p=Math.sqrt((o*o*u*u-o*o*c*c-u*u*l*l)/(o*o*c*c+u*u*l*l));i===s&&(p*=-1),isNaN(p)&&(p=0);var d=p*o*c/u,v=p*-u*l/o,m=(e+n)/2+Math.cos(f)*d-Math.sin(f)*v,g=(t+r)/2+Math.sin(f)*d+Math.cos(f)*v,y=function(e){return Math.sqrt(e[0]*e[0]+e[1]*e[1])},b=function(e,t){return(e[0]*t[0]+e[1]*t[1])/(y(e)*y(t))},w=function(e,t){return(e[0]*t[1]<e[1]*t[0]?-1:1)*Math.acos(b(e,t))},E=w([1,0],[(l-d)/o,(c-v)/u]),S=[(l-d)/o,(c-v)/u],x=[(-1*l-d)/o,(-1*c-v)/u],T=w(S,x);return b(S,x)<=-1&&(T=Math.PI),b(S,x)>=1&&(T=0),s===0&&T>0&&(T-=2*Math.PI),s===1&&T<0&&(T+=2*Math.PI),[m,g,o,u,E,T,f,s]},buildPath:function(e,t){var n=t.path,r=this._parsePathData(n),i=t.x||0,s=t.y||0,o,u=t.pointList=[],a=[];for(var f=0,l=r.length;f<l;f++){r[f].command.toUpperCase()=="M"&&(a.length>0&&u.push(a),a=[]),o=r[f].points;for(var c=0,h=o.length;c<h;c+=2)a.push([o[c]+i,o[c+1]+s])}a.length>0&&u.push(a);var p;for(var f=0,l=r.length;f<l;f++){p=r[f].command,o=r[f].points;for(var c=0,h=o.length;c<h;c++)c%2===0?o[c]+=i:o[c]+=s;switch(p){case"L":e.lineTo(o[0],o[1]);break;case"M":e.moveTo(o[0],o[1]);break;case"C":e.bezierCurveTo(o[0],o[1],o[2],o[3],o[4],o[5]);break;case"Q":e.quadraticCurveTo(o[0],o[1],o[2],o[3]);break;case"A":var d=o[0],v=o[1],m=o[2],g=o[3],y=o[4],b=o[5],w=o[6],E=o[7],S=m>g?m:g,x=m>g?1:m/g,T=m>g?g/m:1;e.translate(d,v),e.rotate(w),e.scale(x,T),e.arc(0,0,S,y,y+b,1-E),e.scale(1/x,1/T),e.rotate(-w),e.translate(-d,-v);break;case"z":e.closePath()}}return},getRect:function(e){var t;e.brushType=="stroke"||e.brushType=="fill"?t=e.lineWidth||1:t=0;var n=Number.MAX_VALUE,r=Number.MIN_VALUE,i=Number.MAX_VALUE,s=Number.MIN_VALUE,o=e.x||0,u=e.y||0,a=this._parsePathData(e.path);for(var f=0;f<a.length;f++){var l=a[f].points;for(var c=0;c<l.length;c++)c%2===0?(l[c]+o<n&&(n=l[c]+o),l[c]+o>r&&(r=l[c]+o)):(l[c]+u<i&&(i=l[c]+u),l[c]+u>s&&(s=l[c]+u))}var h;return n===Number.MAX_VALUE||r===Number.MIN_VALUE||i===Number.MAX_VALUE||s===Number.MIN_VALUE?h={x:0,y:0,width:0,height:0}:h={x:Math.round(n-t/2),y:Math.round(i-t/2),width:r-n+t,height:s-i+t},h}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("path",new t),t}),r("zrender/shape/image",["require","./base","../shape"],function(e){function i(){this.type="image"}var t={},n=[],r;i.prototype={brush:function(e,i,s,o){var u=i.style||{};s&&(u=this.getHighlightStyle(u,i.highlightStyle||{}));var a=u.image;if(typeof a=="string"){var f=a;t[f]?a=t[f]:(a=new Image,a.onload=function(){a.onload=null,clearTimeout(r),n.push(i),r=setTimeout(function(){o(n),n=[]},10)},t[f]=a,a.src=f)}if(a){if(window.ActiveXObject){if(a.readyState!="complete")return}else if(!a.complete)return;e.save(),this.setContext(e,u),i.__needTransform&&e.transform.apply(e,this.updateTransform(i));var l=u.width||a.width,c=u.height||a.height,h=u.x,p=u.y;if(u.sWidth&&u.sHeight){var d=u.sx||0,v=u.sy||0;e.drawImage(a,d,v,u.sWidth,u.sHeight,h,p,l,c)}else if(u.sx&&u.sy){var d=u.sx,v=u.sy,m=l-d,g=c-v;e.drawImage(a,d,v,m,g,h,p,l,c)}else e.drawImage(a,h,p,l,c);u.width=l,u.height=c,i.style.width=l,i.style.height=c,u.text&&this.drawText(e,u,i.style),e.restore()}return},buildPath:function(e,t){e.rect(t.x,t.y,t.width,t.height);return},getRect:function(e){return{x:e.x,y:e.y,width:e.width,height:e.height}}};var s=e("./base");s.derive(i);var o=e("../shape");return o.define("image",new i),i}),r("zrender/shape/beziercurve",["require","./base","../shape"],function(e){function t(){this.type="beziercurve",this.brushTypeOnly="stroke",this.textPosition="end"}t.prototype={buildPath:function(e,t){e.moveTo(t.xStart,t.yStart),typeof t.cpX2!="undefined"&&typeof t.cpY2!="undefined"?e.bezierCurveTo(t.cpX1,t.cpY1,t.cpX2,t.cpY2,t.xEnd,t.yEnd):e.quadraticCurveTo(t.cpX1,t.cpY1,t.xEnd,t.yEnd)},getRect:function(e){var t=Math.min(e.xStart,e.xEnd,e.cpX1),n=Math.min(e.yStart,e.yEnd,e.cpY1),r=Math.max(e.xStart,e.xEnd,e.cpX1),i=Math.max(e.yStart,e.yEnd,e.cpY1),s=e.cpX2,o=e.cpY2;typeof s!="undefined"&&typeof o!="undefined"&&(t=Math.min(t,s),n=Math.min(n,o),r=Math.max(r,s),i=Math.max(i,o));var u=e.lineWidth||1;return{x:t-u,y:n-u,width:r-t+u,height:i-n+u}}};var n=e("./base");n.derive(t);var r=e("../shape");return r.define("beziercurve",new t),t}),r("zrender/shape/star",["require","../tool/math","./base","../shape"],function(e){function s(){this.type="heart"}var t=e("../tool/math"),n=t.sin,r=t.cos,i=Math.PI;s.prototype={buildPath:function(e,t){var s=t.n;if(!s||s<2)return;var o=t.x,u=t.y,a=t.r,f=t.r0;f==null&&(f=s>4?a*r(2*i/s)/r(i/s):a/3);var l=i/s,c=-i/2,h=o+a*r(c),p=u+a*n(c);c+=l;var d=t.pointList=[];d.push([h,p]);for(var v=0,m=s*2-1,g;v<m;v++)g=v%2===0?f:a,d.push([o+g*r(c),u+g*n(c)]),c+=l;d.push([h,p]),e.moveTo(d[0][0],d[0][1]);for(var v=0;v<d.length;v++)e.lineTo(d[v][0],d[v][1]);return},getRect:function(e){var t;return e.brushType=="stroke"||e.brushType=="fill"?t=e.lineWidth||1:t=0,{x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:e.r*2+t,height:e.r*2+t}}};var o=e("./base");o.derive(s);var u=e("../shape");return u.define("star",new s),s}),r("zrender/shape/isogon",["require","../tool/math","./base","../shape"],function(e){function s(){this.type="isogon"}var t=e("../tool/math"),n=t.sin,r=t.cos,i=Math.PI;s.prototype={buildPath:function(e,t){var s=t.n;if(!s||s<2)return;var o=t.x,u=t.y,a=t.r,f=2*i/s,l=-i/2,c=o+a*r(l),h=u+a*n(l);l+=f;var p=t.pointList=[];p.push([c,h]);for(var d=0,v=s-1;d<v;d++)p.push([o+a*r(l),u+a*n(l)]),l+=f;p.push([c,h]),e.moveTo(p[0][0],p[0][1]);for(var d=0;d<p.length;d++)e.lineTo(p[d][0],p[d][1]);return},getRect:function(e){var t;return e.brushType=="stroke"||e.brushType=="fill"?t=e.lineWidth||1:t=0,{x:Math.round(e.x-e.r-t/2),y:Math.round(e.y-e.r-t/2),width:e.r*2+t,height:e.r*2+t}}};var o=e("./base");o.derive(s);var u=e("../shape");return u.define("isogon",new s),s}),r("zrender/animation/easing",[],function(){var e={Linear:function(e){return e},QuadraticIn:function(e){return e*e},QuadraticOut:function(e){return e*(2-e)},QuadraticInOut:function(e){return(e*=2)<1?.5*e*e:-0.5*(--e*(e-2)-1)},CubicIn:function(e){return e*e*e},CubicOut:function(e){return--e*e*e+1},CubicInOut:function(e){return(e*=2)<1?.5*e*e*e:.5*((e-=2)*e*e+2)},QuarticIn:function(e){return e*e*e*e},QuarticOut:function(e){return 1- --e*e*e*e},QuarticInOut:function(e){return(e*=2)<1?.5*e*e*e*e:-0.5*((e-=2)*e*e*e-2)},QuinticIn:function(e){return e*e*e*e*e},QuinticOut:function(e){return--e*e*e*e*e+1},QuinticInOut:function(e){return(e*=2)<1?.5*e*e*e*e*e:.5*((e-=2)*e*e*e*e+2)},SinusoidalIn:function(e){return 1-Math.cos(e*Math.PI/2)},SinusoidalOut:function(e){return Math.sin(e*Math.PI/2)},SinusoidalInOut:function(e){return.5*(1-Math.cos(Math.PI*e))},ExponentialIn:function(e){return e===0?0:Math.pow(1024,e-1)},ExponentialOut:function(e){return e===1?1:1-Math.pow(2,-10*e)},ExponentialInOut:function(e){return e===0?0:e===1?1:(e*=2)<1?.5*Math.pow(1024,e-1):.5*(-Math.pow(2,-10*(e-1))+2)},CircularIn:function(e){return 1-Math.sqrt(1-e*e)},CircularOut:function(e){return Math.sqrt(1- --e*e)},CircularInOut:function(e){return(e*=2)<1?-0.5*(Math.sqrt(1-e*e)-1):.5*(Math.sqrt(1-(e-=2)*e)+1)},ElasticIn:function(e){var t,n=.1,r=.4;return e===0?0:e===1?1:(!n||n<1?(n=1,t=r/4):t=r*Math.asin(1/n)/(2*Math.PI),-(n*Math.pow(2,10*(e-=1))*Math.sin((e-t)*2*Math.PI/r)))},ElasticOut:function(e){var t,n=.1,r=.4;return e===0?0:e===1?1:(!n||n<1?(n=1,t=r/4):t=r*Math.asin(1/n)/(2*Math.PI),n*Math.pow(2,-10*e)*Math.sin((e-t)*2*Math.PI/r)+1)},ElasticInOut:function(e){var t,n=.1,r=.4;return e===0?0:e===1?1:(!n||n<1?(n=1,t=r/4):t=r*Math.asin(1/n)/(2*Math.PI),(e*=2)<1?-0.5*n*Math.pow(2,10*(e-=1))*Math.sin((e-t)*2*Math.PI/r):n*Math.pow(2,-10*(e-=1))*Math.sin((e-t)*2*Math.PI/r)*.5+1)},BackIn:function(e){var t=1.70158;return e*e*((t+1)*e-t)},BackOut:function(e){var t=1.70158;return--e*e*((t+1)*e+t)+1},BackInOut:function(e){var t=2.5949095;return(e*=2)<1?.5*e*e*((t+1)*e-t):.5*((e-=2)*e*((t+1)*e+t)+2)},BounceIn:function(t){return 1-e.BounceOut(1-t)},BounceOut:function(e){return e<1/2.75?7.5625*e*e:e<2/2.75?7.5625*(e-=1.5/2.75)*e+.75:e<2.5/2.75?7.5625*(e-=2.25/2.75)*e+.9375:7.5625*(e-=2.625/2.75)*e+.984375},BounceInOut:function(t){return t<.5?e.BounceIn(t*2)*.5:e.BounceOut(t*2-1)*.5+.5}};return e}),r("zrender/animation/clip",["require","./easing"],function(e){var t=e("./easing"),n=function(e){this._targetPool=e.target||{},this._targetPool.constructor!=Array&&(this._targetPool=[this._targetPool]),this._life=e.life||1e3,this._delay=e.delay||0,this._startTime=(new Date).getTime()+this._delay,this._endTime=this._startTime+this._life*1e3,this.loop=typeof e.loop=="undefined"?!1:e.loop,this.gap=e.gap||0,this.easing=e.easing||"Linear",this.onframe=e.onframe||null,this.ondestroy=e.ondestroy||null,this.onrestart=e.onrestart||null};return n.prototype={step:function(e){var n=(e-this._startTime)/this._life;if(n<0)return;n=Math.min(n,1);var r=typeof this.easing=="string"?t[this.easing]:this.easing,i;return typeof r=="function"?i=r(n):i=n,this.fire("frame",i),n==1?this.loop?(this.restart(),"restart"):(this._needsRemove=!0,"destroy"):null},restart:function(){this._startTime=(new Date).getTime()+this.gap},fire:function(e,t){for(var n=0,r=this._targetPool.length;n<r;n++)this["on"+e]&&this["on"+e](this._targetPool[n],t)}},n.prototype.constructor=n,n}),r("zrender/animation/animation",["require","./clip"],function(e){function s(e,t){return e[t]}function o(e,t,n){e[t]=n}function u(e,t,n){return(t-e)*n+e}function a(e,t,n,r,i){var s=e.length;if(i==1)for(var o=0;o<s;o++)r[o]=u(e[o],t[o],n);else{var a=e[0].length;for(var o=0;o<s;o++)for(var f=0;f<a;f++)r[o][f]=u(e[o][f],t[o][f],n)}}function f(e){return typeof e=="undefined"?!1:typeof e=="string"?!1:typeof e.length!="undefined"}function l(e,t,n,r,i,s,o,u,a){var f=e.length;if(a==1)for(var l=0;l<f;l++)u[l]=c(e[l],t[l],n[l],r[l],i,s,o);else{var h=e[0].length;for(var l=0;l<f;l++)for(var p=0;p<h;p++)u[l][p]=c(e[l][p],t[l][p],n[l][p],r[l][p],i,s,o)}}function c(e,t,n,r,i,s,o){var u=(n-e)*.5,a=(r-t)*.5;return(2*(t-n)+u+a)*o+(-3*(t-n)-2*u-a)*s+u*i+t}function h(e,t,n,r){this._tracks={},this._target=e,this._loop=t||!1,this._getter=n||s,this._setter=r||o,this._clipCount=0,this._delay=0,this._doneList=[],this._onframeList=[],this._clipList=[]}var t=e("./clip"),n=window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(e){setTimeout(e,16)},r=Array.prototype.slice,i=function(e){e=e||{},this.stage=e.stage||{},this.onframe=e.onframe||function(){},this._clips=[],this._running=!1,this._time=0};return i.prototype={add:function(e){this._clips.push(e)},remove:function(e){var t=this._clips.indexOf(e);t>=0&&this._clips.splice(t,1)},update:function(){var e=(new Date).getTime(),t=this._clips,n=t.length,r=[],i=[];for(var s=0;s<n;s++){var o=t[s],u=o.step(e);u&&(r.push(u),i.push(o))}this.stage&&this.stage.update&&this._clips.length&&this.stage.update();for(var s=0;s<n;)t[s]._needsRemove?(t[s]=t[n-1],t.pop(),n--):s++;n=r.length;for(var s=0;s<n;s++)i[s].fire(r[s]);this._time=e,this.onframe()},start:function(){function t(){e._running&&(e.update(),n(t))}var e=this;this._running=!0,n(t)},stop:function(){this._running=!1},clear:function(){this._clips=[]},animate:function(e,t){t=t||{};var n=new h(e,t.loop,t.getter,t.setter);return n.animation=this,n}},i.prototype.constructor=i,h.prototype={when:function(e,t){for(var n in t)this._tracks[n]||(this._tracks[n]=[],this._tracks[n].push({time:0,value:this._getter(this._target,n)})),this._tracks[n].push({time:parseInt(e,10),value:t[n]});return this},during:function(e){return this._onframeList.push(e),this},start:function(e){var n=this,i=this._setter,s=this._getter,o=n._onframeList.length,h=e==="spline",p=function(){n._clipCount--;if(n._clipCount===0){n._tracks={};var e=n._doneList.length;for(var t=0;t<e;t++)n._doneList[t].call(n)}},d=function(d,v){var m=d.length;if(!m)return;var g=d[0].value,y=f(g),b=y&&f(g[0])?2:1;d.sort(function(e,t){return e.time-t.time});var w;if(!m)return;w=d[m-1].time;var E=[],S=[];for(var x=0;x<m;x++){E.push(d[x].time/w);if(y)if(b==2){S[x]=[];for(var T=0;T<g.length;T++)S[x].push(r.call(d[x].value[T]))}else S.push(r.call(d[x].value));else S.push(d[x].value)}var N=0,C=0,k,x,L,A,O,M,_,D=function(e,t){if(t<C){k=Math.min(N+1,m-1);for(x=k;x>=0;x--)if(E[x]<=t)break;x=Math.min(x,m-2)}else{for(x=N;x<m;x++)if(E[x]>t)break;x=Math.min(x-1,m-2)}N=x,C=t;var r=E[x+1]-E[x];if(r===0)return;L=(t-E[x])/r,L<0&&console.log(L),h?(O=S[x],A=S[x===0?x:x-1],M=S[x>m-2?m-1:x+1],_=S[x>m-3?m-1:x+2],y?l(A,O,M,_,L,L*L,L*L*L,s(e,v),b):i(e,v,c(A,O,M,_,L,L*L,L*L*L))):y?a(S[x],S[x+1],L,s(e,v),b):i(e,v,u(S[x],S[x+1],L));for(x=0;x<o;x++)n._onframeList[x](e,t)},P=new t({target:n._target,life:w,loop:n._loop,delay:n._delay,onframe:D,ondestroy:p});e&&e!=="spline"&&(P.easing=e),n._clipList.push(P),n._clipCount++,n.animation.add(P)};for(var v in this._tracks)d(this._tracks[v],v);return this},stop:function(){for(var e=0;e<this._clipList.length;e++){var t=this._clipList[e];this.animation.remove(t)}this._clipList=[]},delay:function(e){return this._delay=e,this},done:function(e){return this._doneList.push(e),this}},i}),r("zrender/config",{loadingEffect:"spin",EVENT:{RESIZE:"resize",CLICK:"click",MOUSEWHEEL:"mousewheel",MOUSEMOVE:"mousemove",MOUSEOVER:"mouseover",MOUSEOUT:"mouseout",MOUSEDOWN:"mousedown",MOUSEUP:"mouseup",GLOBALOUT:"globalout",DRAGSTART:"dragstart",DRAGEND:"dragend",DRAGENTER:"dragenter",DRAGOVER:"dragover",DRAGLEAVE:"dragleave",DROP:"drop",touchClickDelay:300}}),r("zrender/tool/loadingEffect",["require","./util","./color","./color","./color","./color","./color","./math"],function(e){function u(e,t){n[e]=t}function a(e){return{shape:"text",highlightStyle:t.merge({x:s/2,y:o/2,text:r,textAlign:"center",textBaseline:"middle",textFont:i,color:"#333",brushType:"fill"},e,{overwrite:!0,recursive:!0})}}function f(e){return{shape:"rectangle",highlightStyle:{x:0,y:0,width:s,height:o,brushType:"fill",color:e}}}function l(e,t){return e<=t[0]?e=t[0]:e>=t[1]&&(e=t[1]),e}function c(n,r,i){var u=e("./color");n=t.merge(n,{textStyle:{color:"#888"},backgroundColor:"rgba(250, 250, 250, 0.8)",effectOption:{x:0,y:o/2-30,width:s,height:5,brushType:"fill",timeInterval:100}},{overwrite:!1,recursive:!0});var c=a(n.textStyle),h=f(n.backgroundColor),p=n.effectOption,d={shape:"rectangle",highlightStyle:t.clone(p)};d.highlightStyle.color=p.color||u.getLinearGradient(p.x,p.y,p.x+p.width,p.y+p.height,[[0,"#ff6400"],[.5,"#ffe100"],[1,"#b1ff00"]]);if(typeof n.progress!="undefined"){r(h),d.highlightStyle.width=l(n.progress,[0,1])*n.effectOption.width,r(d),r(c),i();return}return d.highlightStyle.width=0,setInterval(function(){r(h),d.highlightStyle.width<n.effectOption.width?d.highlightStyle.width+=8:d.highlightStyle.width=0,r(d),r(c),i()},p.timeInterval)}function h(e,n,r){e.effectOption=t.merge(e.effectOption||{},{x:s/2-80,y:o/2,r:18,colorIn:"#fff",colorOut:"#555",colorWhirl:"#6cf",timeInterval:50});var i=e.effectOption;e=t.merge(e,{textStyle:{color:"#888",x:i.x+i.r+10,y:i.y,textAlign:"start"},backgroundColor:"rgba(250, 250, 250, 0.8)"},{overwrite:!1,recursive:!0});var u=a(e.textStyle),l=f(e.backgroundColor),c={shape:"droplet",highlightStyle:{a:Math.round(i.r/2),b:Math.round(i.r-i.r/6),brushType:"fill",color:i.colorWhirl}},h={shape:"circle",highlightStyle:{r:Math.round(i.r/6),brushType:"fill",color:i.colorIn}},p={shape:"ring",highlightStyle:{r0:Math.round(i.r-i.r/3),r:i.r,brushType:"fill",color:i.colorOut}},d=[0,i.x,i.y];return c.highlightStyle.x=h.highlightStyle.x=p.highlightStyle.x=d[1],c.highlightStyle.y=h.highlightStyle.y=p.highlightStyle.y=d[2],setInterval(function(){n(l),n(p),d[0]-=.3,c.rotation=d,n(c),n(h),n(u),r()},i.timeInterval)}function p(n,r,i){var u=e("./color");n=t.merge(n,{textStyle:{color:"#fff"},backgroundColor:"rgba(0, 0, 0, 0.8)",effectOption:{n:30,lineWidth:1,color:"random",timeInterval:100}},{overwrite:!1,recursive:!0});var l=a(n.textStyle),c=f(n.backgroundColor),h=n.effectOption,p=h.n,d=h.lineWidth,v=[],m,g,y,b;for(var w=0;w<p;w++)y=-Math.ceil(Math.random()*1e3),g=Math.ceil(Math.random()*400),m=Math.ceil(Math.random()*o),h.color=="random"?b=u.random():b=h.color,v[w]={shape:"line",highlightStyle:{xStart:y,yStart:m,xEnd:y+g,yEnd:m,strokeColor:b,lineWidth:d},animationX:Math.ceil(Math.random()*100),len:g};return setInterval(function(){r(c);var e;for(var t=0;t<p;t++)e=v[t].highlightStyle,e.xStart>=s&&(v[t].len=Math.ceil(Math.random()*400),v[t].highlightStyle.xStart=-400,v[t].highlightStyle.xEnd=-400+v[t].len,v[t].highlightStyle.yStart=Math.ceil(Math.random()*o),v[t].highlightStyle.yEnd=v[t].highlightStyle.yStart),v[t].highlightStyle.xStart+=v[t].animationX,v[t].highlightStyle.xEnd+=v[t].animationX,r(v[t]);r(l),i()},h.timeInterval)}function d(n,r,i){var u=e("./color");n=t.merge(n,{textStyle:{color:"#888"},backgroundColor:"rgba(250, 250, 250, 0.8)",effectOption:{n:50,lineWidth:2,brushType:"stroke",color:"random",timeInterval:100}},{overwrite:!1,recursive:!0});var l=a(n.textStyle),c=f(n.backgroundColor),h=n.effectOption,p=h.n,d=h.brushType,v=h.lineWidth,m=[],g;for(var y=0;y<p;y++)h.color=="random"?g=u.alpha(u.random(),.3):g=h.color,m[y]={shape:"circle",highlightStyle:{x:Math.ceil(Math.random()*s),y:Math.ceil(Math.random()*o),r:Math.ceil(Math.random()*40),brushType:d,color:g,strokeColor:g,lineWidth:v},animationY:Math.ceil(Math.random()*20)};return setInterval(function(){r(c);var e;for(var t=0;t<p;t++)e=m[t].highlightStyle,e.y-m[t].animationY+e.r<=0&&(m[t].highlightStyle.y=o+e.r,m[t].highlightStyle.x=Math.ceil(Math.random()*s)),m[t].highlightStyle.y-=m[t].animationY,r(m[t]);r(l),i()},h.timeInterval)}function v(n,r,i){var u=e("./color");n.effectOption=t.merge(n.effectOption||{},{x:s/2-80,y:o/2,r0:9,r:15,n:18,color:"#fff",timeInterval:100});var l=n.effectOption;n=t.merge(n,{textStyle:{color:"#fff",x:l.x+l.r+10,y:l.y,textAlign:"start"},backgroundColor:"rgba(0, 0, 0, 0.8)"},{overwrite:!1,recursive:!0});var c=a(n.textStyle),h=f(n.backgroundColor),p=l.n,d=l.x,v=l.y,m=l.r0,g=l.r,y=l.color,b=[],w=Math.round(180/p);for(var E=0;E<p;E++)b[E]={shape:"sector",highlightStyle:{x:d,y:v,r0:m,r:g,startAngle:w*E*2,endAngle:w*E*2+w,color:u.alpha(y,(E+1)/p),brushType:"fill"}};var S=[0,d,v];return setInterval(function(){r(h),S[0]-=.3;for(var e=0;e<p;e++)b[e].rotation=S,r(b[e]);r(c),i()},l.timeInterval)}function m(n,r,i){var u=e("./color"),c=e("./math");n=t.merge(n,{textStyle:{color:"#07a"},backgroundColor:"rgba(250, 250, 250, 0.8)",effectOption:{x:s/2,y:o/2,r0:60,r:100,color:"#bbdcff",brushType:"fill",textPosition:"inside",textFont:"normal 30px verdana",textColor:"rgba(30, 144, 255, 0.6)",timeInterval:100}},{overwrite:!1,recursive:!0});var h=n.effectOption,p=n.textStyle;p.x=typeof p.x!="undefined"?p.x:h.x,p.y=typeof p.y!="undefined"?p.y:h.y+(h.r0+h.r)/2-5;var d=a(n.textStyle),v=f(n.backgroundColor),m=h.x,g=h.y,y=h.r0+6,b=h.r-6,w=h.color,E=u.lift(w,.1),S={shape:"ring",highlightStyle:t.clone(h)},x=[],T=u.getGradientColors(["#ff6400","#ffe100","#97ff00"],25),N=15,C=240;for(var k=0;k<16;k++)x.push({shape:"sector",highlightStyle:{x:m,y:g,r0:y,r:b,startAngle:C-N,endAngle:C,brushType:"fill",color:E},_color:u.getLinearGradient(m+y*c.cos(C,!0),g-y*c.sin(C,!0),m+y*c.cos(C-N,!0),g-y*c.sin(C-N,!0),[[0,T[k*2]],[1,T[k*2+1]]])}),C-=N;C=360;for(var k=0;k<4;k++)x.push({shape:"sector",highlightStyle:{x:m,y:g,r0:y,r:b,startAngle:C-N,endAngle:C,brushType:"fill",color:E},_color:u.getLinearGradient(m+y*c.cos(C,!0),g-y*c.sin(C,!0),m+y*c.cos(C-N,!0),g-y*c.sin(C-N,!0),[[0,T[k*2+32]],[1,T[k*2+33]]])}),C-=N;var L=0;if(typeof n.progress!="undefined"){r(v),L=l(n.progress,[0,1]).toFixed(2)*100/5,S.highlightStyle.text=L*5+"%",r(S);for(var k=0;k<20;k++)x[k].highlightStyle.color=k<L?x[k]._color:E,r(x[k]);r(d),i();return}return setInterval(function(){r(v),L+=L>=20?-20:1,r(S);for(var e=0;e<20;e++)x[e].highlightStyle.color=e<L?x[e]._color:E,r(x[e]);r(d),i()},h.timeInterval)}function g(e,t,r){var i=n.ring;return typeof e.effect=="function"?i=e.effect:typeof n[e.effect]=="function"&&(i=n[e.effect]),s=e.canvasSize.width,o=e.canvasSize.height,i(e,t,r)}function y(e){clearInterval(e)}var t=e("./util"),n,r="Loading...",i="normal 16px Arial",s,o;return n={getBackgroundShape:f,getTextShape:a,define:u,bar:c,whirling:h,dynamicLine:p,bubble:d,spin:v,ring:m,start:g,stop:y},n}),r("zrender/tool/event",[],function(){function e(e){return typeof e.zrenderX!="undefined"&&e.zrenderX||typeof e.offsetX!="undefined"&&e.offsetX||typeof e.layerX!="undefined"&&e.layerX||typeof e.clientX!="undefined"&&e.clientX}function t(e){return typeof e.zrenderY!="undefined"&&e.zrenderY||typeof e.offsetY!="undefined"&&e.offsetY||typeof e.layerY!="undefined"&&e.layerY||typeof e.clientY!="undefined"&&e.clientY}function n(e){return typeof e.wheelDelta!="undefined"&&e.wheelDelta||typeof e.detail!="undefined"&&-e.detail}function r(e){e.preventDefault?(e.preventDefault(),e.stopPropagation()):(e.returnValue=!1,e.cancelBubble=!0)}function i(){function n(n,r){return!r||!n?e:(t[n]||(t[n]=[]),t[n].push({h:r,one:!0}),e)}function r(n,r){return!r||!n?e:(t[n]||(t[n]=[]),t[n].push({h:r,one:!1}),e)}function i(n,r){if(!n)return t={},e;if(r){if(t[n]){var i=[];for(var s=0,o=t[n].length;s<o;s++)t[n][s]["h"]!=r&&i.push(t[n][s]);t[n]=i}t[n]&&t[n].length===0&&delete t[n]}else delete t[n];return e}function s(n,r,i){if(t[n]){var s=[],o=i||{};o.type=n,o.event=r;for(var u=0,a=t[n].length;u<a;u++)t[n][u].h(o),t[n][u].one||s.push(t[n][u]);s.length!=t[n].length&&(t[n]=s)}return e}var e=this,t={};e.one=n,e.bind=r,e.unbind=i,e.dispatch=s}return{getX:e,getY:t,getDelta:n,stop:r,Dispatcher:i}}),r("zrender/zrender",["require","./lib/excanvas","./tool/util","./tool/env","./shape","./shape/circle","./shape/ellipse","./shape/line","./shape/polygon","./shape/brokenLine","./shape/rectangle","./shape/ring","./shape/sector","./shape/text","./shape/heart","./shape/droplet","./shape/path","./shape/image","./shape/beziercurve","./shape/star","./shape/isogon","./animation/animation","./config","./tool/loadingEffect","./tool/loadingEffect","./config","./tool/env","./tool/event"],function(e){function o(n,i,s){var o=this;o.env=e("./tool/env");var l=e("./shape");e("./shape/circle"),e("./shape/ellipse"),e("./shape/line"),e("./shape/polygon"),e("./shape/brokenLine"),e("./shape/rectangle"),e("./shape/ring"),e("./shape/sector"),e("./shape/text"),e("./shape/heart"),e("./shape/droplet"),e("./shape/path"),e("./shape/image"),e("./shape/beziercurve"),e("./shape/star"),e("./shape/isogon");var c;if(typeof s.shape=="undefined")c=l;else{c={};for(var h in s.shape)c[h]=s.shape[h];c.get=function(e){return c[e]||l.get(e)}}var p=new u(c),d=new a(i,p,c),v=new f(i,p,d,c),m=e("./animation/animation"),g=[],y=new m({stage:{update:function(){var e=g;for(var t=0,n=e.length;t<n;t++)p.mod(e[t].id);e.length>0&&d.refresh()}}});y.start(),o.getId=function(){return n},o.addShape=function(e){return p.add(e),o},o.delShape=function(e){return p.del(e),o},o.modShape=function(e,t,n){return p.mod(e,t,n),o},o.modLayer=function(e,t){d.modLayer(e,t)},o.addHoverShape=function(e){return p.addHover(e),o},o.render=function(e){return d.render(e),o},o.refresh=function(e){return d.refresh(e),o},o.refreshHover=function(e){return d.refreshHover(e),o},o.update=function(e,t){return d.update(e,t),o},o.resize=function(){return d.resize(),o},o.animate=function(e,n,i){var s=p.get(e);if(s){var o;if(n){var u=n.split("."),a=s;for(var f=0,l=u.length;f<l;f++){if(!a)continue;a=a[u[f]]}a&&(o=a)}else o=s;if(!o){r.log('Property "'+n+'" is not existed in shape '+e);return}return typeof s.__aniCount=="undefined"&&(s.__aniCount=0),s.__aniCount===0&&g.push(s),s.__aniCount++,y.animate(o,{loop:i}).done(function(){s.__aniCount--;if(s.__aniCount===0){var e=t.indexOf(g,s);g.splice(e,1)}})}r.log('Shape "'+e+'" not existed')},o.clearAnimation=function(){y.clear()},o.showLoading=function(e){return d.showLoading(e),o},o.hideLoading=function(){return d.hideLoading(),o},o.newShapeId=function(e){return p.newShapeId(e)},o.getWidth=function(){return d.getWidth()},o.getHeight=function(){return d.getHeight()},o.toDataURL=function(e,t,n){return d.toDataURL(e,t,n)},o.shapeToImage=function(e,t,n){var r=o.newShapeId("image");return d.shapeToImage(r,e,t,n)},o.on=function(e,t){return v.on(e,t),o},o.un=function(e,t){return v.un(e,t),o},o.trigger=function(e,t){return v.trigger(e,t),o},o.clear=function(){return p.del(),d.clear(),o},o.dispose=function(){y.stop(),y=null,g=null,o.clear(),o=null,p.dispose(),p=null,d.dispose(),d=null,v.dispose(),v=null,r.delInstance(n);return}}function u(e){function l(e){e.hoverable||e.onclick||e.draggable||e.onmousemove||e.onmouseover||e.onmouseout||e.onmousedown||e.onmouseup||e.ondragenter||e.ondragover||e.ondragleave||e.ondrop?e.__silent=!1:e.__silent=!0,Math.abs(e.rotation[0])>1e-4||Math.abs(e.position[0])>1e-4||Math.abs(e.position[1])>1e-4||Math.abs(e.scale[0]-1)>1e-4||Math.abs(e.scale[1]-1)>1e-4?e.__needTransform=!0:e.__needTransform=!1,e.style=e.style||{},e.style.__rect=null}function c(e){return(e||"")+ ++i}function h(e){var r={shape:"circle",id:e.id||n.newShapeId(),zlevel:0,draggable:!1,clickable:!1,hoverable:!0,position:[0,0],rotation:[0,0,0],scale:[1,1,0,0]};return t.merge(r,e,{overwrite:!0,recursive:!0}),l(r),s[r.id]=r,o[r.zlevel]=o[r.zlevel]||[],o[r.zlevel].push(r),a=Math.max(a,r.zlevel),f[r.zlevel]=!0,n}function p(e){return s[e]}function d(e){if(typeof e!="undefined"){var t={};if(e instanceof Array){if(e.lenth<1)return;for(var r=0,i=e.length;r<i;r++)t[e[r].id]=!0}else t[e]=!0;var l,c,h,p={};for(var d in t)if(s[d]){h=s[d].zlevel,f[h]=!0;if(!p[h]){c=o[h],l=[];for(var r=0,i=c.length;r<i;r++)t[c[r].id]||l.push(c[r]);o[h]=l,p[h]=!0}delete s[d]}}else s={},o=[],u=[],a=0,f={all:!0};return n}function v(e,r,i){var o=s[e];return o&&(f[o.zlevel]=!0,r&&(i?t.mergeFast(o,r,!0,!0):t.merge(o,r,{overwrite:!0,recursive:!0})),l(o),f[o.zlevel]=!0,a=Math.max(a,o.zlevel)),n}function m(t,i,o){var u=s[t];if(!u)return;u.__needTransform=!0;if(!u.ondrift||u.ondrift&&!u.ondrift(u,i,o))if(r.catchBrushException)try{e.get(u.shape).drift(u,i,o)}catch(a){r.log(a,"drift error of "+u.shape,u)}else e.get(u.shape).drift(u,i,o);return f[u.zlevel]=!0,n}function g(e){return e.rotation&&Math.abs(e.rotation[0])>1e-4||e.position&&(Math.abs(e.position[0])>1e-4||Math.abs(e.position[1])>1e-4)||e.scale&&(Math.abs(e.scale[0]-1)>1e-4||Math.abs(e.scale[1]-1)>1e-4)?e.__needTransform=!0:e.__needTransform=!1,u.push(e),n}function y(){return u=[],n}function b(){return u.length>0}function w(e,t){t||(t={hover:!1,normal:"down"});if(t.hover)for(var r=0,i=u.length;r<i;r++)if(e(u[r]))return n;var a,f;if(typeof t.normal!="undefined")switch(t.normal){case"down":for(var i=o.length-1;i>=0;i--){a=o[i];if(a){f=a.length;while(f--)if(e(a[f]))return n}}break;case"up":for(var r=0,i=o.length;r<i;r++){a=o[r];if(a){f=a.length;for(var l=0;l<f;l++)if(e(a[l]))return n}}break;default:for(var r in s)if(e(s[r]))return n}return n}function E(){return a}function S(){return f}function x(){return f={},n}function T(e){return f[e]=!0,n}function N(){s=null,o=null,u=null,n=null;return}var n=this,i=0,s={},o=[],u=[],a=0,f={};n.newShapeId=c,n.add=h,n.get=p,n.del=d,n.addHover=g,n.delHover=y,n.hasHoverShape=b,n.mod=v,n.drift=m,n.iterShape=w,n.getMaxZlevel=E,n.getChangedZlevel=S,n.clearChangedZlevel=x,n.setChangedZlevle=T,n.dispose=N}function a(n,i,s){function b(){var e=n.currentStyle||document.defaultView.getComputedStyle(n);return((n.clientWidth||parseInt(e.width,10))-parseInt(e.paddingLeft,10)-parseInt(e.paddingRight,10)).toFixed(0)-0}function w(){var e=n.currentStyle||document.defaultView.getComputedStyle(n);return((n.clientHeight||parseInt(e.height,10))-parseInt(e.paddingTop,10)-parseInt(e.paddingBottom,10)).toFixed(0)-0}function E(){v.innerHTML="",n.innerHTML="",m=b(),g=w(),v.style.position="relative",v.style.overflow="hidden",v.style.width=m+"px",v.style.height=g+"px",n.appendChild(v),a={},f={},l={},c={},p=i.getMaxZlevel(),a.bg=x("bg","div"),v.appendChild(a.bg);for(var e=0;e<=p;e++)a[e]=x(e,"canvas"),v.appendChild(a[e]),G_vmlCanvasManager&&G_vmlCanvasManager.initElement(a[e]),f[e]=a[e].getContext("2d"),y!=1&&f[e].scale(y,y);a.hover=x("hover","canvas"),a.hover.id="_zrender_hover_",v.appendChild(a.hover),G_vmlCanvasManager&&G_vmlCanvasManager.initElement(a.hover),f.hover=a.hover.getContext("2d"),y!=1&&f.hover.scale(y,y)}function S(){var e=i.getMaxZlevel();if(p<e){for(var t=p+1;t<=e;t++)a[t]=x(t,"canvas"),v.insertBefore(a[t],a.hover),G_vmlCanvasManager&&G_vmlCanvasManager.initElement(a[t]),f[t]=a[t].getContext("2d"),y!=1&&f[t].scale(y,y);p=e}}function x(e,t){var n=document.createElement(t);return n.style.position="absolute",n.style.left=0,n.style.top=0,n.style.width=m+"px",n.style.height=g+"px",n.setAttribute("width",m*y),n.setAttribute("height",g*y),n.setAttribute("data-id",e),n}function T(e){return function(t){if((e.all||e[t.zlevel])&&!t.invisible){var n=f[t.zlevel];if(n){if(!t.onbrush||t.onbrush&&!t.onbrush(n,t,!1))if(r.catchBrushException)try{s.get(t.shape).brush(n,t,!1,L)}catch(i){r.log(i,"brush error of "+t.shape,t)}else s.get(t.shape).brush(n,t,!1,L)}else r.log("can not find the specific zlevel canvas!")}}}function N(e){var t=f.hover;if(!e.onbrush||e.onbrush&&!e.onbrush(t,e,!0))if(r.catchBrushException)try{s.get(e.shape).brush(t,e,!0,L)}catch(n){r.log(n,"hoverBrush error of "+e.shape,e)}else s.get(e.shape).brush(t,e,!0,L)}function C(e){return B()&&H(),S(),A(),i.iterShape(T({all:!0}),{normal:"up"}),i.clearChangedZlevel(),typeof e=="function"&&e(),u}function k(e){S();var t=i.getChangedZlevel();if(t.all)A();else for(var n in t)f[n]&&O(n);return i.iterShape(T(t),{normal:"up"}),i.clearChangedZlevel(),typeof e=="function"&&e(),u}function L(e,t){var n;for(var r=0,s=e.length;r<s;r++)n=e[r],i.mod(n.id,n);return k(t),u}function A(){for(var e in f){if(e=="hover")continue;O(e)}return u}function O(e){if(h[e]){var t=typeof h[e].clearColor!="undefined",n=h[e].motionBlur,r=h[e].lastFrameAlpha;typeof r=="undefined"&&(r=.7);if(n){if(typeof l[e]=="undefined"){var i=x("back-"+e,"canvas");i.width=a[e].width,i.height=a[e].height,i.style.width=a[e].style.width,i.style.height=a[e].style.height,l[e]=i,c[e]=i.getContext("2d"),y!=1&&c[e].scale(y,y)}c[e].globalCompositeOperation="copy",c[e].drawImage(a[e],0,0,a[e].width/y,a[e].height/y)}t?(f[e].save(),f[e].fillStyle=h[e].clearColor,f[e].fillRect(0,0,m*y,g*y),f[e].restore()):f[e].clearRect(0,0,m*y,g*y);if(n){var i=l[e],s=f[e];s.save(),s.globalAlpha=r,s.drawImage(i,0,0,i.width/y,i.height/y),s.restore()}}else f[e].clearRect(0,0,m*y,g*y)}function M(e,n){n&&(typeof h[e]=="undefined"&&(h[e]={}),t.merge(h[e],n,{recursive:!0,overwrite:!0}))}function _(){return D(),i.iterShape(N,{hover:!0}),i.delHover(),u}function D(){return f&&f.hover&&f.hover.clearRect(0,0,m*y,g*y),u}function P(t){var n=e("./tool/loadingEffect");return n.stop(d),t=t||{},t.effect=t.effect||o.loadingEffect,t.canvasSize={width:m,height:g},d=n.start(t,i.addHover,_),u.loading=!0,u}function H(){var t=e("./tool/loadingEffect");return t.stop(d),D(),u.loading=!1,u}function B(){return u.loading}function j(){return m}function F(){return g}function I(){var e,t,n;v.style.display="none",e=b(),t=w(),v.style.display="";if(m!=e||t!=g){m=e,g=t,v.style.width=m+"px",v.style.height=g+"px";for(var r in a)n=a[r],n.setAttribute("width",m),n.setAttribute("height",g),n.style.width=m+"px",n.style.height=g+"px";i.setChangedZlevle("all"),k()}return u}function q(){B()&&H(),n.innerHTML="",n=null,i=null,s=null,v=null,a=null,f=null,c=null,l=null,u=null;return}function R(){return a.hover}function U(e,t,n){if(G_vmlCanvasManager)return null;var o=x("image","canvas");a.bg.appendChild(o);var u=o.getContext("2d");y!=1&&u.scale(y,y),u.fillStyle=t||"#fff",u.rect(0,0,m*y,g*y),u.fill(),i.iterShape(function(e){if(!e.invisible)if(!e.onbrush||e.onbrush&&!e.onbrush(u,e,!1))if(r.catchBrushException)try{s.get(e.shape).brush(u,e,!1,L)}catch(t){r.log(t,"brush error of "+e.shape,e)}else s.get(e.shape).brush(u,e,!1,L)},{normal:"up"});var f=o.toDataURL(e,n);return u=null,a.bg.removeChild(o),f}var o=e("./config"),u=this,a={},f={},l={},c={},h={},p=0,d,v=document.createElement("div");v.onselectstart=function(){return!1};var m,g,y=window.devicePixelRatio||1,z=function(){if(G_vmlCanvasManager)return function(){};var e=document.createElement("canvas"),t=e.getContext("2d"),n=window.devicePixelRatio||1;return function(r,i,o,u){e.style.width=o+"px",e.style.height=u+"px",e.setAttribute("width",o*n),e.setAttribute("height",u*n),t.clearRect(0,0,o*n,u*n);var a=s.get(i.shape),f={position:i.position,rotation:i.rotation,scale:i.scale};i.position=[0,0,0],i.rotation=0,i.scale=[1,1],a&&a.brush(t,i,!1);var l={shape:"image",id:r,style:{x:0,y:0,image:e.toDataURL()}};return typeof f.position!="undefined"&&(l.position=i.position=f.position),typeof f.rotation!="undefined"&&(l.rotation=i.rotation=f.rotation),typeof f.scale!="undefined"&&(l.scale=i.scale=f.scale),l}}();u.render=C,u.refresh=k,u.update=L,u.clear=A,u.modLayer=M,u.refreshHover=_,u.clearHover=D,u.showLoading=P,u.hideLoading=H,u.isLoading=B,u.getWidth=j,u.getHeight=F,u.resize=I,u.dispose=q,u.getDomHover=R,u.toDataURL=U,u.shapeToImage=z,E()}function f(t,n,r,i){function C(){window.addEventListener?(window.addEventListener("resize",k),!o.os.tablet&&!o.os.phone?(t.addEventListener("click",L),t.addEventListener("mousewheel",A),t.addEventListener("mousemove",O),t.addEventListener("mousedown",P),t.addEventListener("mouseup",H)):(t.addEventListener("touchstart",B),t.addEventListener("touchmove",j),t.addEventListener("touchend",F)),t.addEventListener("DOMMouseScroll",A),t.addEventListener("mouseout",M)):(window.attachEvent("onresize",k),t.attachEvent("onclick",L),t.attachEvent("onmousewheel",A),t.attachEvent("onmousemove",O),t.attachEvent("onmouseout",M),t.attachEvent("onmousedown",P),t.attachEvent("onmouseup",H))}function k(e){c=e||window.event,p=null,m=!1,a.dispatch(s.EVENT.RESIZE,c)}function L(e){c=J(e),p?p&&p.clickable&&X(p,s.EVENT.CLICK):X(p,s.EVENT.CLICK),O(c)}function A(e){c=J(e),X(p,s.EVENT.MOUSEWHEEL),O(c)}function O(e){if(r.isLoading())return;c=J(e),E=x,S=T,x=f(c),T=l(c),I(),h=!1,n.iterShape($,{normal:"down"});if(!h){if(!v||p&&p.id!=v.id)D(),U();p=null,n.delHover(),r.clearHover()}v&&(n.drift(v.id,x-E,T-S),n.addHover(v)),v||h&&p.draggable?t.style.cursor="move":h&&p.clickable?t.style.cursor="pointer":t.style.cursor="default",X(p,s.EVENT.MOUSEMOVE),(v||h||n.hasHoverShape())&&r.refreshHover()}function M(e){c=J(e);var n=c.toElement||c.relatedTarget;if(n!=t)while(n&&n.nodeType!=9){if(n==t){O(e);return}n=n.parentNode}c.zrenderX=E,c.zrenderY=S,t.style.cursor="default",m=!1,D(),z(),W(),r.isLoading()||r.refreshHover(),a.dispatch(s.EVENT.GLOBALOUT,c)}function _(){X(p,s.EVENT.MOUSEOVER)}function D(){X(p,s.EVENT.MOUSEOUT)}function P(e){if(w==2){w=e.button,d=null;return}y=new Date,c=J(e),m=!0,d=p,X(p,s.EVENT.MOUSEDOWN),w=e.button}function H(e){c=J(e),t.style.cursor="default",m=!1,d=null,X(p,s.EVENT.MOUSEUP),z(),W()}function B(e){c=J(e,!0),b=new Date,V(),P(c)}function j(e){c=J(e,!0),O(c),g&&u.stop(e)}function F(e){c=J(e,!0),H(c),new Date-b<s.EVENT.touchClickDelay&&(V(),L(c)),r.clearHover()}function I(){if(m&&p&&p.draggable&&!v&&d==p){if(p.dragEnableTime&&new Date-y<p.dragEnableTime)return;v=p,g=!0,v.invisible=!0,n.mod(v.id,v),X(v,s.EVENT.DRAGSTART),r.refresh()}}function q(){v&&X(p,s.EVENT.DRAGENTER,v)}function R(){v&&X(p,s.EVENT.DRAGOVER,v)}function U(){v&&X(p,s.EVENT.DRAGLEAVE,v)}function z(){v&&(v.invisible=!1,n.mod(v.id,v),r.refresh(),X(p,s.EVENT.DROP,v))}function W(){v&&(X(v,s.EVENT.DRAGEND),p=null),g=!1,v=null}function X(e,t,n){var r="on"+t,i={type:t,event:c,target:e};n&&(i.dragged=n),e?(!e[r]||!e[r](i))&&a.dispatch(t,c,i):n||a.dispatch(t,c)}function V(){p=null,x=c.zrenderX,T=c.zrenderY,n.iterShape($,{normal:"down"}),p||(x+=10,n.iterShape($,{normal:"down"})),p||(x-=20,n.iterShape($,{normal:"down"})),p||(x+=10,T+=10,n.iterShape($,{normal:"down"})),p||(T-=20,n.iterShape($,{normal:"down"})),p&&(c.zrenderX=x,c.zrenderY=T)}function $(e){if(v&&v.id==e.id)return!1;if(e.__silent)return!1;var t=i.get(e.shape);return t.isCover(e,x,T)?(e.hoverable&&n.addHover(e),p!=e&&(D(),U(),p=e,q()),_(),R(),h=!0,!0):!1}function J(e,n){if(!n){c=e||window.event;var r=c.toElement||c.relatedTarget||c.srcElement||c.target;r&&r!=N&&(c.zrenderX=(typeof c.offsetX!="undefined"?c.offsetX:c.layerX)+r.offsetLeft,c.zrenderY=(typeof c.offsetY!="undefined"?c.offsetY:c.layerY)+r.offsetTop)}else{c=e;var i=c.type!="touchend"?c.targetTouches[0]:c.changedTouches[0];i&&(c.zrenderX=i.clientX-t.offsetLeft+document.body.scrollLeft,c.zrenderY=i.clientY-t.offsetTop+document.body.scrollTop)}return c}function K(e,t){return a.bind(e,t),a}function Q(e,t){return a.unbind(e,t),a}function G(e,t){switch(e){case s.EVENT.RESIZE:k(t);break;case s.EVENT.CLICK:L(t);break;case s.EVENT.MOUSEWHEEL:A(t);break;case s.EVENT.MOUSEMOVE:O(t);break;case s.EVENT.MOUSEDOWN:P(t);break;case s.EVENT.MOUSEUP:_mouseUpHandleru(t);break;case s.EVENT.MOUSEOUT:M(t)}}function Y(){window.removeEventListener?(window.removeEventListener("resize",k),!o.os.tablet&&!o.os.phone?(t.removeEventListener("click",L),t.removeEventListener("mousewheel",A),t.removeEventListener("mousemove",O),t.removeEventListener("mousedown",P),t.removeEventListener("mouseup",H)):(t.removeEventListener("touchstart",B),t.removeEventListener("touchmove",j),t.removeEventListener("touchend",F)),t.removeEventListener("DOMMouseScroll",A),t.removeEventListener("mouseout",M)):(window.detachEvent("onresize",k),t.detachEvent("onclick",L),t.detachEvent("onmousewheel",A),t.detachEvent("onmousemove",O),t.detachEvent("onmouseout",M),t.detachEvent("onmousedown",P),t.detachEvent("onmouseup",H)),t=null,N=null,n=null,r=null,i=null,Q(),a=null;return}var s=e("./config"),o=e("./tool/env"),u=e("./tool/event");u.Dispatcher.call(this);var a=this,f=u.getX,l=u.getY,c,h=!1,p=null,d=null,v=null,m=!1,g=!1,y,b,w,E=0,S=0,x=0,T=0,N=r.getDomHover();a.on=K,a.un=Q,a.trigger=G,a.dispose=Y,C()}e("./lib/excanvas");var t=e("./tool/util"),n={},r=n,i=0,s={};return n.version="1.1.2",n.init=function(e,t){var n=new o(++i+"",e,t||{});return s[i]=n,n},n.dispose=function(e){if(e)e.dispose();else{for(var t in s)s[t].dispose();s={}}return n},n.getInstance=function(e){return s[e]},n.delInstance=function(e){return s[e]&&(s[e]=null,delete s[e]),n},n.catchBrushException=!1,n.debugMode=0,n.log=function(){if(n.debugMode===0)return;if(n.debugMode==1)for(var e in arguments)throw new Error(arguments[e]);else if(n.debugMode>1)for(var e in arguments)console.log(arguments[e]);return n},n}),r("zrender",["zrender/zrender"],function(e){return e}),r("echarts/util/shape/icon",["require","zrender/tool/matrix","zrender/shape","zrender/shape","zrender/shape","zrender/shape","zrender/shape/base","zrender/shape"],function(e){function n(){this.type="icon",this._iconLibrary={mark:r,markUndo:i,markClear:s,dataZoom:o,dataZoomReset:u,restore:a,lineChart:f,barChart:l,stackChart:c,tiledChart:h,dataView:p,saveAsImage:d,cross:v,circle:m,rectangle:g,triangle:y,diamond:b,arrow:w,star:E,heart:S,droplet:x,pin:T,image:N}}function r(e,t){var n=t.width/16,r=t.height/16;e.moveTo(t.x,t.y+t.height),e.lineTo(t.x+5*n,t.y+14*r),e.lineTo(t.x+t.width,t.y+3*r),e.lineTo(t.x+13*n,t.y),e.lineTo(t.x+2*n,t.y+11*r),e.lineTo(t.x,t.y+t.height),e.moveTo(t.x+6*n,t.y+10*r),e.lineTo(t.x+14*n,t.y+2*r),e.moveTo(t.x+10*n,t.y+13*r),e.lineTo(t.x+t.width,t.y+13*r),e.moveTo(t.x+13*n,t.y+10*r),e.lineTo(t.x+13*n,t.y+t.height)}function i(e,t){var n=t.width/16,r=t.height/16;e.moveTo(t.x,t.y+t.height),e.lineTo(t.x+5*n,t.y+14*r),e.lineTo(t.x+t.width,t.y+3*r),e.lineTo(t.x+13*n,t.y),e.lineTo(t.x+2*n,t.y+11*r),e.lineTo(t.x,t.y+t.height),e.moveTo(t.x+6*n,t.y+10*r),e.lineTo(t.x+14*n,t.y+2*r),e.moveTo(t.x+10*n,t.y+13*r),e.lineTo(t.x+t.width,t.y+13*r)}function s(e,t){var n=t.width/16,r=t.height/16;e.moveTo(t.x+4*n,t.y+15*r),e.lineTo(t.x+9*n,t.y+13*r),e.lineTo(t.x+14*n,t.y+8*r),e.lineTo(t.x+11*n,t.y+5*r),e.lineTo(t.x+6*n,t.y+10*r),e.lineTo(t.x+4*n,t.y+15*r),e.moveTo(t.x+5*n,t.y),e.lineTo(t.x+11*n,t.y),e.moveTo(t.x+5*n,t.y+r),e.lineTo(t.x+11*n,t.y+r),e.moveTo(t.x,t.y+2*r),e.lineTo(t.x+t.width,t.y+2*r),e.moveTo(t.x,t.y+5*r),e.lineTo(t.x+3*n,t.y+t.height),e.lineTo(t.x+13*n,t.y+t.height),e.lineTo(t.x+t.width,t.y+5*r)}function o(e,t){var n=t.width/16,r=t.height/16;e.moveTo(t.x,t.y+3*r),e.lineTo(t.x+6*n,t.y+3*r),e.moveTo(t.x+3*n,t.y),e.lineTo(t.x+3*n,t.y+6*r),e.moveTo(t.x+3*n,t.y+8*r),e.lineTo(t.x+3*n,t.y+t.height),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x+t.width,t.y+3*r),e.lineTo(t.x+8*n,t.y+3*r),e.moveTo(t.x,t.y),e.lineTo(t.x,t.y)}function u(e,t){var n=t.width/16,r=t.height/16;e.moveTo(t.x+6*n,t.y),e.lineTo(t.x+2*n,t.y+3*r),e.lineTo(t.x+6*n,t.y+6*r),e.moveTo(t.x+2*n,t.y+3*r),e.lineTo(t.x+14*n,t.y+3*r),e.lineTo(t.x+14*n,t.y+11*r),e.moveTo(t.x+2*n,t.y+5*r),e.lineTo(t.x+2*n,t.y+13*r),e.lineTo(t.x+14*n,t.y+13*r),e.moveTo(t.x+10*n,t.y+10*r),e.lineTo(t.x+14*n,t.y+13*r),e.lineTo(t.x+10*n,t.y+t.height),e.moveTo(t.x,t.y),e.lineTo(t.x,t.y)}function a(e,t){var n=t.width/16,r=t.height/16,i=t.width/2;e.lineWidth=1.5,e.arc(t.x+i,t.y+i,i-n,0,Math.PI*2/3),e.moveTo(t.x+3*n,t.y+t.height),e.lineTo(t.x+0*n,t.y+12*r),e.lineTo(t.x+5*n,t.y+11*r),e.moveTo(t.x,t.y+8*r),e.arc(t.x+i,t.y+i,i-n,Math.PI,Math.PI*5/3),e.moveTo(t.x+13*n,t.y),e.lineTo(t.x+t.width,t.y+4*r),e.lineTo(t.x+11*n,t.y+5*r),e.moveTo(t.x,t.y),e.lineTo(t.x,t.y)}function f(e,t){var n=t.width/16,r=t.height/16;e.moveTo(t.x,t.y),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x+t.width,t.y+t.height),e.moveTo(t.x+2*n,t.y+14*r),e.lineTo(t.x+7*n,t.y+6*r),e.lineTo(t.x+11*n,t.y+11*r),e.lineTo(t.x+15*n,t.y+2*r),e.moveTo(t.x,t.y),e.lineTo(t.x,t.y)}function l(e,t){var n=t.width/16,r=t.height/16;e.moveTo(t.x,t.y),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x+t.width,t.y+t.height),e.moveTo(t.x+3*n,t.y+14*r),e.lineTo(t.x+3*n,t.y+6*r),e.lineTo(t.x+4*n,t.y+6*r),e.lineTo(t.x+4*n,t.y+14*r),e.moveTo(t.x+7*n,t.y+14*r),e.lineTo(t.x+7*n,t.y+2*r),e.lineTo(t.x+8*n,t.y+2*r),e.lineTo(t.x+8*n,t.y+14*r),e.moveTo(t.x+11*n,t.y+14*r),e.lineTo(t.x+11*n,t.y+9*r),e.lineTo(t.x+12*n,t.y+9*r),e.lineTo(t.x+12*n,t.y+14*r)}function c(e,t){var n=t.x,r=t.y,i=t.width,s=t.height,o=Math.round(s/3),u=3;while(u--)e.rect(n,r+o*u+2,i,2)}function h(e,t){var n=t.x,r=t.y,i=t.width,s=t.height,o=Math.round(i/3),u=3;while(u--)e.rect(n+o*u,r,2,s)}function p(e,t){var n=t.width/16;e.moveTo(t.x+n,t.y),e.lineTo(t.x+n,t.y+t.height),e.lineTo(t.x+15*n,t.y+t.height),e.lineTo(t.x+15*n,t.y),e.lineTo(t.x+n,t.y),e.moveTo(t.x+3*n,t.y+3*n),e.lineTo(t.x+13*n,t.y+3*n),e.moveTo(t.x+3*n,t.y+6*n),e.lineTo(t.x+13*n,t.y+6*n),e.moveTo(t.x+3*n,t.y+9*n),e.lineTo(t.x+13*n,t.y+9*n),e.moveTo(t.x+3*n,t.y+12*n),e.lineTo(t.x+9*n,t.y+12*n)}function d(e,t){var n=t.width/16,r=t.height/16;e.moveTo(t.x,t.y),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x+t.width,t.y),e.lineTo(t.x,t.y),e.moveTo(t.x+4*n,t.y),e.lineTo(t.x+4*n,t.y+8*r),e.lineTo(t.x+12*n,t.y+8*r),e.lineTo(t.x+12*n,t.y),e.moveTo(t.x+6*n,t.y+11*r),e.lineTo(t.x+6*n,t.y+13*r),e.lineTo(t.x+10*n,t.y+13*r),e.lineTo(t.x+10*n,t.y+11*r),e.lineTo(t.x+6*n,t.y+11*r),e.moveTo(t.x,t.y),e.lineTo(t.x,t.y)}function v(e,t){var n=t.x,r=t.y,i=t.width,s=t.height;e.moveTo(n,r+s/2),e.lineTo(n+i,r+s/2),e.moveTo(n+i/2,r),e.lineTo(n+i/2,r+s)}function m(e,t){var n=t.width/2,r=t.height/2,i=Math.min(n,r);e.moveTo(t.x+n+i,t.y+r),e.arc(t.x+n,t.y+r,i,0,Math.PI*2)}function g(e,t){e.rect(t.x,t.y,t.width,t.height)}function y(e,t){var n=t.width/2,r=t.height/2,i=t.x+n,s=t.y+r,o=Math.min(n,r);e.moveTo(i,s-o),e.lineTo(i+o,s+o),e.lineTo(i-o,s+o),e.lineTo(i,s-o)}function b(e,t){var n=t.width/2,r=t.height/2,i=t.x+n,s=t.y+r,o=Math.min(n,r);e.moveTo(i,s-o),e.lineTo(i+o,s),e.lineTo(i,s+o),e.lineTo(i-o,s),e.lineTo(i,s-o)}function w(e,t){var n=t.x,r=t.y,i=t.width/16;e.moveTo(n+8*i,r),e.lineTo(n+i,r+t.height),e.lineTo(n+8*i,r+t.height/4*3),e.lineTo(n+15*i,r+t.height),e.lineTo(n+8*i,r)}function E(t,n){var r=n.width/2,i=n.height/2,s=e("zrender/shape").get("star");s.buildPath(t,{x:n.x+r,y:n.y+i,r:Math.min(r,i),n:n.n||5})}function S(t,n){var r=e("zrender/shape").get("heart");r.buildPath(t,{x:n.x+n.width/2,y:n.y+n.height*.2,a:n.width/2,b:n.height*.8})}function x(t,n){var r=e("zrender/shape").get("droplet");r.buildPath(t,{x:n.x+n.width*.5,y:n.y+n.height*.5,a:n.width*.5,b:n.height*.8})}function T(e,t){var n=t.x,r=t.y-t.height/2*1.5,i=t.width/2,s=t.height/2,o=Math.min(i,s);e.arc(n+i,r+s,o,Math.PI/5*4,Math.PI/5),e.lineTo(n+i,r+s+o*1.5)}function N(t,n){setTimeout(function(){e("zrender/shape").get("image").brush(t,{style:n})},100)}var t=e("zrender/tool/matrix");return n.prototype={buildPath:function(e,t){this._iconLibrary[t.iconType]?this._iconLibrary[t.iconType](e,t):(e.moveTo(t.x,t.y),e.lineTo(t.x+t.width,t.y),e.lineTo(t.x+t.width,t.y+t.height),e.lineTo(t.x,t.y+t.height),e.lineTo(t.x,t.y));return},getRect:function(e){return{x:Math.round(e.x),y:Math.round(e.y-(e.iconType=="pin"?e.height/2*1.5:0)),width:e.width,height:e.height}},isCover:function(e,n,r){if(e.__needTransform&&e._transform){var i=[];t.invert(i,e._transform);var s=[n,r];t.mulVector(s,i,[n,r,1]),n==s[0]&&r==s[1]&&(Math.abs(e.rotation[0])>1e-4||Math.abs(e.position[0])>1e-4||Math.abs(e.position[1])>1e-4||Math.abs(e.scale[0]-1)>1e-4||Math.abs(e.scale[1]-1)>1e-4?e.__needTransform=!0:e.__needTransform=!1),n=s[0],r=s[1]}var o;e.style.__rect?o=e.style.__rect:(o=this.getRect(e.style),e.style.__rect=o);var u=o.height<8||o.width<8?4:0;return n>=o.x-u&&n<=o.x+o.width+u&&r>=o.y-u&&r<=o.y+o.height+u?!0:!1},define:function(e,t){this._iconLibrary[e]=t},get:function(e){return this._iconLibrary[e]}},e("zrender/shape/base").derive(n),e("zrender/shape").define("icon",new n),n}),r("echarts/util/shape/markLine",["require","zrender/tool/matrix","zrender/shape","zrender/shape","zrender/shape/base","zrender/shape"],function(e){function n(){this.type="markLine"}var t=e("zrender/tool/matrix");return n.prototype={brush:function(e,t,n){var r=t.style||{};n&&(r=this.getHighlightStyle(r,t.highlightStyle||{})),e.save(),this.setContext(e,r),t.__needTransform&&e.transform.apply(e,this.updateTransform(t)),e.beginPath(),this.buildLinePath(e,r),e.stroke(),this.brushSymbol(t,e,r,0),this.brushSymbol(t,e,r,1),typeof r.text!="undefined"&&this.drawText(e,r,t.style),e.restore();return},buildLinePath:function(e,t){var n=t.pointList||this.getPointList(t);t.pointList=n,typeof t.pointListLength=="undefined"&&(t.pointListLength=n.length);var r=Math.round(t.pointListLength);if(!t.lineType||t.lineType=="solid"){e.moveTo(n[0][0],n[0][1]);for(var i=1;i<r;i++)e.lineTo(n[i][0],n[i][1])}else if(t.lineType=="dashed"||t.lineType=="dotted")if(t.smooth!=="spline"){var s=(t.lineWidth||1)*(t.lineType=="dashed"?5:1);e.moveTo(n[0][0],n[0][1]);for(var i=1;i<r;i++)this.dashedLineTo(e,n[i-1][0],n[i-1][1],n[i][0],n[i][1],s)}else for(var i=0;i<r-1;i+=2)e.moveTo(n[i][0],n[i][1]),e.lineTo(n[i+1][0],n[i+1][1])},brushSymbol:function(n,r,i,s){if(i.symbol[s]=="none")return;r.save(),r.beginPath(),r.lineWidth=i.symbolBorder,r.strokeStyle=i.symbolBorderColor,i.iconType=i.symbol[s].replace("empty","").toLowerCase(),i.symbol[s].match("empty")&&(r.fillStyle="#fff");var o=Math.round(i.pointListLength||i.pointList.length),u=s===0?i.pointList[0][0]:i.pointList[o-1][0],a=s===0?i.pointList[0][1]:i.pointList[o-1][1],f=typeof i.symbolRotate[s]!="undefined"?i.symbolRotate[s]-0:0,l;f!==0&&(l=t.create(),t.identity(l),(u||a)&&t.translate(l,l,[-u,-a]),t.rotate(l,l,f*Math.PI/180),(u||a)&&t.translate(l,l,[u,a]),r.transform.apply(r,l));if(i.iconType=="arrow"&&f===0)this.buildArrawPath(r,i,s);else{var c=i.symbolSize[s];i.x=u-c,i.y=a-c,i.width=c*2,i.height=c*2,e("zrender/shape").get("icon").buildPath(r,i)}r.closePath(),r.fill(),r.stroke(),r.restore()},buildArrawPath:function(e,t,n){var r=Math.round(t.pointListLength||t.pointList.length),i=t.symbolSize[n]*2,s=t.pointList[0][0],o=t.pointList[r-1][0],u=t.pointList[0][1],a=t.pointList[r-1][1],f=0;t.smooth==="spline"&&(f=.2);var l=Math.atan(Math.abs((a-u)/(s-o)));n===0?o>s?a>u?l=Math.PI*2-l+f:l+=f:a>u?l+=Math.PI-f:l=Math.PI-l-f:s>o?u>a?l=Math.PI*2-l+f:l+=f:u>a?l+=Math.PI-f:l=Math.PI-l-f;var c=Math.PI/8,h=n===0?s:o,p=n===0?u:a,d=[[h+i*Math.cos(l-c),p-i*Math.sin(l-c)],[h+i*.6*Math.cos(l),p-i*.6*Math.sin(l)],[h+i*Math.cos(l+c),p-i*Math.sin(l+c)]];e.moveTo(h,p);for(var v=0,m=d.length;v<m;v++)e.lineTo(d[v][0],d[v][1]);e.lineTo(h,p)},getPointList:function(e){var t=[[e.xStart,e.yStart],[e.xEnd,e.yEnd]];if(e.smooth==="spline"){var n=t[1][0],r=t[1][1];t[3]=[n,r],t[1]=this.getOffetPoint(t[0],t[3]),t[2]=this.getOffetPoint(t[3],t[0]),t=this.smoothSpline(t,!1),t[t.length-1]=[n,r]}return t},getOffetPoint:function(e,t){var n=Math.sqrt(Math.round((e[0]-t[0])*(e[0]-t[0])+(e[1]-t[1])*(e[1]-t[1])))/3,r=[e[0],e[1]],i,s=.2;if(e[0]!=t[0]&&e[1]!=t[1]){var o=(t[1]-e[1])/(t[0]-e[0]);i=Math.atan(o)}else e[0]==t[0]?i=(e[1]<=t[1]?1:-1)*Math.PI/2:i=0;var u,a;return e[0]<=t[0]?(i-=s,u=Math.round(Math.cos(i)*n),a=Math.round(Math.sin(i)*n),r[0]+=u,r[1]+=a):(i+=s,u=Math.round(Math.cos(i)*n),a=Math.round(Math.sin(i)*n),r[0]-=u,r[1]-=a),r},getRect:function(e){var t=e.lineWidth||1;return{x:Math.min(e.xStart,e.xEnd)-t,y:Math.min(e.yStart,e.yEnd)-t,width:Math.abs(e.xStart-e.xEnd)+t,height:Math.abs(e.yStart-e.yEnd)+t}},isCover:function(t,n,r){return e("zrender/shape").get(t.style.smooth!=="spline"?"line":"brokenLine").isCover(t,n,r)}},e("zrender/shape/base").derive(n),e("zrender/shape").define("markLine",new n),n}),r("echarts/chart",[],function(){var e={},t={};return e.define=function(n,r){return t[n]=r,e},e.get=function(e){return t[e]},e}),r("echarts/util/ecData",[],function(){function e(e,t,n,r,i,s,o,u){var a;return typeof r!="undefined"&&(typeof r.value!="undefined"?a=r.value:a=r),e._echartsData={_series:t,_seriesIndex:n,_data:r,_dataIndex:i,_name:s,_value:a,_special:o,_special2:u},e._echartsData}function t(e,t){var n=e._echartsData;if(!t)return n;switch(t){case"series":return n&&n._series;case"seriesIndex":return n&&n._seriesIndex;case"data":return n&&n._data;case"dataIndex":return n&&n._dataIndex;case"name":return n&&n._name;case"value":return n&&n._value;case"special":return n&&n._special;case"special2":return n&&n._special2}return null}function n(e,t,n){e._echartsData=e._echartsData||{};switch(t){case"series":e._echartsData._series=n;break;case"seriesIndex":e._echartsData._seriesIndex=n;break;case"data":e._echartsData._data=n;break;case"dataIndex":e._echartsData._dataIndex=n;break;case"name":e._echartsData._name=n;break;case"value":e._echartsData._value=n;break;case"special":e._echartsData._special=n;break;case"special2":e._echartsData._special2=n}}return{pack:e,set:n,get:t}}),r("echarts/util/ecQuery",["zrender/tool/util"],function(){function t(e,t){if(typeof e=="undefined")return undefined;if(!t)return e;t=t.split(".");var n=t.length,r=0;while(r<n){e=e[t[r]];if(typeof e=="undefined")return undefined;r++}return e}function r(e,n){var r;for(var i=0,s=e.length;i<s;i++){r=t(e[i],n);if(typeof r!="undefined")return r}return undefined}function i(n,r){var i,s,o=n.length;while(o--)s=t(n[o],r),typeof s!="undefined"&&(typeof i=="undefined"?i=e.clone(s):e.merge(i,s,{overwrite:!0,recursive:!0}));return i}var e=n("zrender/tool/util");return{query:t,deepQuery:r,deepMerge:i}}),r("echarts/util/number",[],function(){function e(e){return e.replace(/^\s\s*/,"").replace(/\s\s*$/,"")}function t(t,n){return typeof t=="string"?e(t).match(/%$/)?parseFloat(t)/100*n:parseFloat(t):t}function n(e,n){return[t(n[0],e.getWidth()),t(n[1],e.getHeight())]}function r(e,n){n instanceof Array||(n=[0,n]);var r=Math.min(e.getWidth(),e.getHeight())/2;return[t(n[0],r),t(n[1],r)]}function i(e){return isNaN(e)?"-":(e=(e+"").split("."),e[0].replace(/(\d{1,3})(?=(?:\d{3})+(?!\d))/g,"$1,")+(e.length>1?"."+e[1]:""))}return{parsePercent:t,parseCenter:n,parseRadius:r,addCommas:i}}),r("echarts/component/base",["require","../util/ecData","../util/ecQuery","../util/number","zrender/tool/util","zrender/tool/area","zrender/tool/env"],function(e){function t(t,n){function h(e){e=e||a.type+"";switch(e){case t.COMPONENT_TYPE_GRID:case t.COMPONENT_TYPE_AXIS_CATEGORY:case t.COMPONENT_TYPE_AXIS_VALUE:return 0;case t.CHART_TYPE_LINE:case t.CHART_TYPE_BAR:case t.CHART_TYPE_SCATTER:case t.CHART_TYPE_PIE:case t.CHART_TYPE_RADAR:case t.CHART_TYPE_MAP:case t.CHART_TYPE_K:case t.CHART_TYPE_CHORD:return 2;case t.COMPONENT_TYPE_LEGEND:case t.COMPONENT_TYPE_DATARANGE:case t.COMPONENT_TYPE_DATAZOOM:return 4;case t.CHART_TYPE_ISLAND:return 5;case t.COMPONENT_TYPE_TOOLBOX:case t.COMPONENT_TYPE_TITLE:return 6;case t.COMPONENT_TYPE_TOOLTIP:return 8;default:return 0}}function p(e){return o.merge(e||{},o.clone(t[a.type]||{}),{overwrite:!1,recursive:!0})}function d(e){if(!(e instanceof Array))return[e,e,e,e];switch(e.length+""){case"4":return e;case"3":return[e[0],e[1],e[2],e[1]];case"2":return[e[0],e[1],e[0],e[1]];case"1":return[e[0],e[0],e[0],e[0]];case"0":return[0,0,0,0]}}function v(e){var n=o.merge(o.clone(e)||{},t.textStyle,{overwrite:!1});return n.fontStyle+" "+n.fontWeight+" "+n.fontSize+"px "+n.fontFamily}function m(e,t,n,r,i){var s=[n,t],o=a.deepMerge(s,"itemStyle.normal.label"),u=a.deepMerge(s,"itemStyle.emphasis.label"),f=o.textStyle||{},l=u.textStyle||{};return o.show&&(e.style.text=g(t,n,r,"normal"),e.style.textPosition=typeof o.position=="undefined"?i=="horizontal"?"right":"top":o.position,e.style.textColor=f.color,e.style.textFont=a.getFont(f)),u.show&&(e.highlightStyle.text=g(t,n,r,"emphasis"),e.highlightStyle.textPosition=o.show?e.style.textPosition:typeof u.position=="undefined"?i=="horizontal"?"right":"top":u.position,e.highlightStyle.textColor=l.color,e.highlightStyle.textFont=a.getFont(l)),e}function g(e,t,n,r){var i=a.deepQuery([t,e],"itemStyle."+r+".label.formatter");!i&&r=="emphasis"&&(i=a.deepQuery([t,e],"itemStyle.normal.label.formatter"));var s=typeof t!="undefined"?typeof t.value!="undefined"?t.value:t:"-";if(!i)return s;if(typeof i=="function")return i(e.name,n,s);if(typeof i=="string")return i=i.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}"),i=i.replace("{a0}",e.name).replace("{b0}",n).replace("{c0}",s),i}function y(e,t,n,r,i){a.selectedMap[e.name]&&(e.markPoint&&b(e,t,n,r,i),e.markLine&&w(e,t,n,r,i))}function b(e,n,r,i,s){var f=a.getZlevelBase(),l,c,h=o.clone(e.markPoint);for(var p=0,d=h.data.length;p<d;p++)l=h.data[p],c=a.getMarkCoord(e,n,l,i),h.data[p].x=typeof l.x!="undefined"?l.x:c[0],h.data[p].y=typeof l.y!="undefined"?l.y:c[1],l.type&&(l.type=="max"||l.type=="min")&&(h.data[p].value=c[3],h.data[p].name=l.name||l.type,h.data[p].symbolSize=h.data[p].symbolSize||u.getTextWidth(c[3],a.getFont())/2+5);var v=E(e,n,h,r);for(var p=0,d=v.length;p<d;p++){v[p].zlevel=f+1;for(var m in s)v[p][m]=s[m];a.shapeList.push(v[p])}if(a.type==t.CHART_TYPE_FORCE||a.type==t.CHART_TYPE_CHORD)for(var p=0,d=v.length;p<d;p++)v[p].id=a.zr.newShapeId(a.type),a.zr.addShape(v[p])}function w(e,n,r,i,s){var u=a.getZlevelBase(),f,l,c=o.clone(e.markLine);for(var h=0,p=c.data.length;h<p;h++)f=c.data[h],!f.type||f.type!="max"&&f.type!="min"&&f.type!="average"?l=[a.getMarkCoord(e,n,f[0],i),a.getMarkCoord(e,n,f[1],i)]:(l=a.getMarkCoord(e,n,f,i),c.data[h]=[o.clone(f),{}],c.data[h][0].name=f.name||f.type,c.data[h][0].value=l[3],l=l[2],f=[{},{}]),c.data[h][0].x=typeof f[0].x!="undefined"?f[0].x:l[0][0],c.data[h][0].y=typeof f[0].y!="undefined"?f[0].y:l[0][1],c.data[h][1].x=typeof f[1].x!="undefined"?f[1].x:l[1][0],c.data[h][1].y=typeof f[1].y!="undefined"?f[1].y:l[1][1];var d=S(e,n,c,r);for(var h=0,p=d.length;h<p;h++){d[h].zlevel=u+1;for(var v in s)d[h][v]=s[v];a.shapeList.push(d[h])}if(a.type==t.CHART_TYPE_FORCE||a.type==t.CHART_TYPE_CHORD)for(var h=0,p=d.length;h<p;h++)d[h].id=a.zr.newShapeId(a.type),a.zr.addShape(d[h])}function E(e,n,i,s){o.merge(i,t.markPoint,{overwrite:!1,recursive:!0}),i.name=e.name;var u=[],f=i.data,l,c=s.dataRange,h=s.legend,p,d,v,m,g,y,b=a.zr.getWidth(),w=a.zr.getHeight();for(var E=0,S=f.length;E<S;E++){h&&(p=h.getColor(e.name));if(c){d=typeof f[E]!="undefined"?typeof f[E].value!="undefined"?f[E].value:f[E]:"-",p=isNaN(d)?p:c.getColor(d),v=[f[E],i],m=a.deepQuery(v,"itemStyle.normal.color")||p,g=a.deepQuery(v,"itemStyle.emphasis.color")||m;if(m==null&&g==null)continue}f[E].tooltip=f[E].tooltip||{trigger:"item"},f[E].name=typeof f[E].name!="undefined"?f[E].name:"",f[E].value=typeof f[E].value!="undefined"?f[E].value:"",l=T(i,n,f[E],E,f[E].name,a.parsePercent(f[E].x,b),a.parsePercent(f[E].y,w),"pin",p,"rgba(0,0,0,0)","horizontal"),y=a.deepMerge([f[E],i],"effect"),y.show&&(l.effect=y),r.pack(l,e,n,f[E],0,f[E].name),u.push(l)}return u}function S(e,n,i,s){o.merge(i,t.markLine,{overwrite:!1,recursive:!0}),i.symbol=i.symbol instanceof Array?i.symbol.length>1?i.symbol:[i.symbol[0],i.symbol[0]]:[i.symbol,i.symbol],i.symbolSize=i.symbolSize instanceof Array?i.symbolSize.length>1?i.symbolSize:[i.symbolSize[0],i.symbolSize[0]]:[i.symbolSize,i.symbolSize],i.symbolRotate=i.symbolRotate instanceof Array?i.symbolRotate.length>1?i.symbolRotate:[i.symbolRotate[0],i.symbolRotate[0]]:[i.symbolRotate,i.symbolRotate],i.name=e.name;var u=[],f=i.data,l,c=s.dataRange,h=s.legend,p,d,v,m,g,y,b=a.zr.getWidth(),w=a.zr.getHeight(),E;for(var S=0,x=f.length;S<x;S++){h&&(p=h.getColor(e.name)),E=a.deepMerge(f[S]);if(c){d=typeof E!="undefined"?typeof E.value!="undefined"?E.value:E:"-",p=isNaN(d)?p:c.getColor(d),v=[E,i],m=a.deepQuery(v,"itemStyle.normal.color")||p,g=a.deepQuery(v,"itemStyle.emphasis.color")||m;if(m==null&&g==null)continue}f[S][0].tooltip=E.tooltip||{trigger:"item"},f[S][0].name=typeof f[S][0].name!="undefined"?f[S][0].name:"",f[S][1].name=typeof f[S][1].name!="undefined"?f[S][1].name:"",f[S][0].value=typeof f[S][0].value!="undefined"?f[S][0].value:"",l=N(i,n,f[S],S,a.parsePercent(f[S][0].x,b),a.parsePercent(f[S][0].y,w),a.parsePercent(f[S][1].x,b),a.parsePercent(f[S][1].y,w),p),y=a.deepMerge([E,i],"effect"),y.show&&(l.effect=y),r.pack(l,e,n,f[S][0],0,f[S][0].name+(f[S][1].name!==""?" > "+f[S][1].name:"")),u.push(l)}return u}function x(){return[0,0]}function T(e,t,n,i,s,o,u,f,l,c,h){var p=[n,e],d=typeof n!="undefined"?typeof n.value!="undefined"?n.value:n:"-";f=a.deepQuery(p,"symbol")||f;var v=a.deepQuery(p,"symbolSize");v=typeof v=="function"?v(d):v;var m=a.deepQuery(p,"symbolRotate"),g=a.deepMerge(p,"itemStyle.normal"),y=a.deepMerge(p,"itemStyle.emphasis"),b=typeof g.borderWidth!="undefined"?g.borderWidth:g.lineStyle&&g.lineStyle.width;typeof b=="undefined"&&(b=0);var w=typeof y.borderWidth!="undefined"?y.borderWidth:y.lineStyle&&y.lineStyle.width;typeof w=="undefined"&&(w=b+2);var E={shape:"icon",style:{iconType:f.replace("empty","").toLowerCase(),x:o-v,y:u-v,width:v*2,height:v*2,brushType:"both",color:f.match("empty")?c:a.getItemStyleColor(g.color,t,i,n)||l,strokeColor:g.borderColor||a.getItemStyleColor(g.color,t,i,n)||l,lineWidth:b},highlightStyle:{color:f.match("empty")?c:a.getItemStyleColor(y.color,t,i,n),strokeColor:y.borderColor||g.borderColor||a.getItemStyleColor(g.color,t,i,n)||l,lineWidth:w},clickable:!0};return f.match("image")&&(E.style.image=f.replace(new RegExp("^image:\\/\\/"),""),E.shape="image"),typeof m!="undefined"&&(E.rotation=[m*Math.PI/180,o,u]),f.match("star")&&(E.style.iconType="star",E.style.n=f.replace("empty","").replace("star","")-0||5),f=="none"&&(E.invisible=!0,E.hoverable=!1),E=a.addLabel(E,e,n,s,h),f.match("empty")&&(typeof E.style.textColor=="undefined"&&(E.style.textColor=E.style.strokeColor),typeof E.highlightStyle.textColor=="undefined"&&(E.highlightStyle.textColor=E.highlightStyle.strokeColor)),r.pack(E,e,t,n,i,s),E._mark="point",E._x=o,E._y=u,E._dataIndex=i,E._seriesIndex=t,E}function N(e,t,n,r,i,s,o,u,f){var l=typeof n[0]!="undefined"?typeof n[0].value!="undefined"?n[0].value:n[0]:"-",c=typeof n[1]!="undefined"?typeof n[1].value!="undefined"?n[1].value:n[1]:"-",h=[a.query(n[0],"symbol")||e.symbol[0],a.query(n[1],"symbol")||e.symbol[1]],p=[a.query(n[0],"symbolSize")||e.symbolSize[0],a.query(n[1],"symbolSize")||e.symbolSize[1]];p[0]=typeof p[0]=="function"?p[0](l):p[0],p[1]=typeof p[1]=="function"?p[1](c):p[1];var d=[a.query(n[0],"symbolRotate")||e.symbolRotate[0],a.query(n[1],"symbolRotate")||e.symbolRotate[1]],v=[n[0],e],m=a.deepMerge(v,"itemStyle.normal");m.color=a.getItemStyleColor(m.color,t,r,n);var g=a.deepMerge(v,"itemStyle.emphasis");g.color=a.getItemStyleColor(g.color,t,r,n);var y=m.lineStyle,b=g.lineStyle,w=y.width;typeof w=="undefined"&&(w=m.borderWidth);var E=b.width;typeof E=="undefined"&&(typeof g.borderWidth!="undefined"?E=g.borderWidth:E=w+2);var S={shape:"markLine",style:{smooth:e.smooth?"spline":!1,symbol:h,symbolSize:p,symbolRotate:d,xStart:i,yStart:s,xEnd:o,yEnd:u,brushType:"both",lineType:y.type,shadowColor:y.shadowColor,shadowBlur:y.shadowBlur,shadowOffsetX:y.shadowOffsetX,shadowOffsetY:y.shadowOffsetY,color:m.color||f,strokeColor:y.color||m.borderColor||m.color||f,lineWidth:w,symbolBorderColor:m.borderColor||m.color||f,symbolBorder:m.borderWidth},highlightStyle:{shadowColor:b.shadowColor,shadowBlur:b.shadowBlur,shadowOffsetX:b.shadowOffsetX,shadowOffsetY:b.shadowOffsetY,color:g.color||m.color||f,strokeColor:b.color||y.color||g.borderColor||m.borderColor||g.color||m.color||f,lineWidth:E,symbolBorderColor:g.borderColor||m.borderColor||g.color||m.color||f,symbolBorder:typeof g.borderWidth=="undefined"?m.borderWidth+2:g.borderWidth},clickable:!0};return S=a.addLabel(S,e,n[0],n[0].name+" : "+n[1].name),S._mark="line",S._x=o,S._y=u,S}function C(e,t,n,r){return typeof e=="function"?e(t,n,r):e}function k(e,t){return t%2==1?e=Math.floor(e)+.5:e=Math.round(e),e}function L(){c[a.type]?a.animationMark(t.animationDuration):a.animationEffect()}function A(e,t){var r,i;for(var s=0,o=a.shapeList.length;s<o;s++){if(!a.shapeList[s]._mark)continue;r=a.shapeList[s]._x||0,i=a.shapeList[s]._y||0,a.shapeList[s]._mark=="point"?(n.modShape(a.shapeList[s].id,{scale:[0,0,r,i]},!0),n.animate(a.shapeList[s].id,"").when(e,{scale:[1,1,r,i]}).start(t||"QuinticOut")):a.shapeList[s]._mark=="line"&&(a.shapeList[s].style.smooth?(n.modShape(a.shapeList[s].id,{style:{pointListLength:1}},!0),n.animate(a.shapeList[s].id,"style").when(e,{pointListLength:a.shapeList[s].style.pointList.length}).start(t||"QuinticOut")):(n.modShape(a.shapeList[s].id,{style:{pointList:[[a.shapeList[s].style.xStart,a.shapeList[s].style.yStart],[a.shapeList[s].style.xStart,a.shapeList[s].style.yStart]]}},!0),n.animate(a.shapeList[s].id,"style").when(e,{pointList:[[a.shapeList[s].style.xStart,a.shapeList[s].style.yStart],[r,i]]}).start(t||"QuinticOut")))}a.animationEffect()}function O(){_();var e=f;l&&n.modLayer(e,{motionBlur:!0,lastFrameAlpha:.95});var t,r,i,s;for(var o=0,u=a.shapeList.length;o<u;o++){shape=a.shapeList[o];if(!shape._mark||!shape.effect||!shape.effect.show)continue;s=shape.effect,t=s.color||shape.style.strokeColor||shape.style.color,r=s.shadowColor||t;var c,h;switch(shape._mark){case"point":i=s.scaleSize,shadowBlur=typeof s.shadowBlur!="undefined"?s.shadowBlur:i,c={shape:shape.shape,id:n.newShapeId(),zlevel:e,style:{brushType:"stroke",iconType:shape.style.iconType!="pin"&&shape.style.iconType!="droplet"?shape.style.iconType:"circle",x:shadowBlur+1,y:shadowBlur+1,n:shape.style.n,width:shape.style.width*i,height:shape.style.height*i,lineWidth:1,strokeColor:t,shadowColor:r,shadowBlur:shadowBlur},draggable:!1,hoverable:!1},l&&(c.style.image=n.shapeToImage(c,c.style.width+shadowBlur*2+2,c.style.height+shadowBlur*2+2).style.image,c.shape="image"),h=(c.style.width-shape.style.width)/2;break;case"line":i=shape.style.lineWidth*s.scaleSize,shadowBlur=typeof s.shadowBlur!="undefined"?s.shadowBlur:i,c={shape:"circle",id:n.newShapeId(),zlevel:e,style:{x:shadowBlur,y:shadowBlur,r:i,color:t,shadowColor:r,shadowBlur:shadowBlur},draggable:!1,hoverable:!1},l?(c.style.image=n.shapeToImage(c,(i+shadowBlur)*2,(i+shadowBlur)*2).style.image,c.shape="image",h=shadowBlur):h=0}var p;c.position=shape.position;if(shape._mark==="point")c.style.x=shape.style.x-h,c.style.y=shape.style.y-h,p=(s.period+Math.random()*10)*100;else if(shape._mark==="line"){c.style.x=shape.style.xStart-h,c.style.y=shape.style.yStart-h;var d=(shape.style.xStart-shape._x)*(shape.style.xStart-shape._x)+(shape.style.yStart-shape._y)*(shape.style.yStart-shape._y);p=Math.round(Math.sqrt(Math.round(d*s.period*s.period)))}a.effectList.push(c),n.addShape(c);if(shape._mark==="point"){n.modShape(shape.id,{invisible:!0},!0);var v=c.style.x+c.style.width/2,m=c.style.y+c.style.height/2;n.modShape(c.id,{scale:[.1,.1,v,m]},!0),n.animate(c.id,"",!0).when(p,{scale:[1,1,v,m]}).start()}else if(shape._mark==="line")if(!shape.style.smooth)n.animate(c.id,"style",!0).when(p,{x:shape._x-h,y:shape._y-h}).start();else{var g=shape.style.pointList,y=g.length;p=Math.round(p/y);var b=n.animate(c.id,"style",!0);for(var w=0;w<y;w++)b.when(p*(w+1),{x:g[w][0]-h,y:g[w][1]-h});b.start()}}}function M(){a.refresh&&a.refresh()}function _(){a.zr&&a.effectList.length>0&&(a.zr.modLayer(f,{motionBlur:!1}),a.zr.delShape(a.effectList)),a.effectList=[]}function D(){_(),a.zr&&a.zr.delShape(a.shapeList),a.shapeList=[]}function P(){a.clear(),a.shapeList=null,a.effectList=null,a=null}var r=e("../util/ecData"),i=e("../util/ecQuery"),s=e("../util/number"),o=e("zrender/tool/util"),u=e("zrender/tool/area"),a=this;a.zr=n,a.shapeList=[],a.effectList=[];var f=7,l=e("zrender/tool/env").canvasSupported,c={};c[t.CHART_TYPE_LINE]=!0,c[t.CHART_TYPE_BAR]=!0,c[t.CHART_TYPE_SCATTER]=!0,c[t.CHART_TYPE_PIE]=!0,c[t.CHART_TYPE_RADAR]=!0,c[t.CHART_TYPE_MAP]=!0,c[t.CHART_TYPE_K]=!0,c[t.CHART_TYPE_CHORD]=!0,a.getZlevelBase=h,a.reformOption=p,a.reformCssArray=d,a.query=i.query,a.deepQuery=i.deepQuery,a.deepMerge=i.deepMerge,a.getFont=v,a.addLabel=m,a.buildMark=y,a.getMarkCoord=x,a.getSymbolShape=T,a.parsePercent=s.parsePercent,a.parseCenter=s.parseCenter,a.parseRadius=s.parseRadius,a.numAddCommas=s.addCommas,a.getItemStyleColor=C,a.subPixelOptimize=k,a.animation=L,a.animationMark=A,a.animationEffect=O,a.resize=M,a.clearAnimationShape=_,a.clear=D,a.dispose=P}return t}),r("echarts/util/accMath",[],function(){function e(e,n){return t(e,1/n)}function t(e,t){var n=0,r=e.toString(),i=t.toString();try{n+=r.split(".")[1].length}catch(s){}try{n+=i.split(".")[1].length}catch(s){}return Number(r.replace(".",""))*Number(i.replace(".",""))/Math.pow(10,n)}function n(e,t){var n,r,i;try{n=e.toString().split(".")[1].length}catch(s){n=0}try{r=t.toString().split(".")[1].length}catch(s){r=0}return i=Math.pow(10,Math.max(n,r)),(Math.round(e*i)+Math.round(t*i))/i}function r(e,t){return n(e,-t)}return{accDiv:e,accMul:t,accAdd:n,accSub:r}}),r("echarts/chart/calculableBase",["require","../util/ecData","../util/accMath","zrender/tool/util"],function(e){function t(t,n){function u(e){return e.dragEnableTime=n.DRAG_ENABLE_TIME,e.ondragover=o.shapeHandler.ondragover,e.ondragend=o.shapeHandler.ondragend,e.ondrop=o.shapeHandler.ondrop,e}function a(e,t){if(!o.isDrop||!e.target)return;var s=e.target,u=e.dragged,a=r.get(s,"seriesIndex"),f=r.get(s,"dataIndex"),l=n.series[a].data[f]||"-";l.value?l.value!="-"?n.series[a].data[f].value=i.accAdd(n.series[a].data[f].value,r.get(u,"value")):n.series[a].data[f].value=r.get(u,"value"):l!="-"?n.series[a].data[f]=i.accAdd(n.series[a].data[f],r.get(u,"value")):n.series[a].data[f]=r.get(u,"value"),t.dragIn=t.dragIn||!0,o.isDrop=!1;return}function f(e,t){if(!o.isDragend||!e.target)return;var i=e.target,s=r.get(i,"seriesIndex"),u=r.get(i,"dataIndex");n.series[s].data[u]="-",t.dragOut=!0,t.needRefresh=!0,o.isDragend=!1;return}function l(e,t){var n=e.selected;for(var r in o.selectedMap)o.selectedMap[r]!=n[r]&&(t.needRefresh=!0),o.selectedMap[r]=n[r];return}var r=e("../util/ecData"),i=e("../util/accMath"),s=e("zrender/tool/util"),o=this;o.selectedMap={},o.shapeHandler={onclick:function(){o.isClick=!0},ondragover:function(e){var t=s.clone(e.target);t.highlightStyle={text:"",r:t.style.r+5,brushType:"stroke",strokeColor:n.calculableColor,lineWidth:(t.style.lineWidth||1)+12},o.zr.addHoverShape(t)},ondrop:function(e){typeof r.get(e.dragged,"data")!="undefined"&&(o.isDrop=!0)},ondragend:function(){o.isDragend=!0}},o.setCalculable=u,o.ondrop=a,o.ondragend=f,o.onlegendSelected=l}return t}),r("echarts/chart/island",["require","../component/base","./calculableBase","../util/ecData","zrender/tool/event","zrender/tool/color","../util/accMath","../chart"],function(e){function t(t,n,r){function v(t,n){var r=e("zrender/tool/color"),i=e("../util/accMath"),s=i.accAdd(o.get(t,"value"),o.get(n,"value")),u=o.get(t,"name")+c+o.get(n,"name");t.style.text=u+h+s,o.set(t,"value",s),o.set(t,"name",u),t.style.r=f.island.r,t.style.color=r.mix(t.style.color,n.style.color)}function m(e){e&&(e.island=a.reformOption(e.island),f=e,c=f.nameConnector,h=f.valueConnector)}function g(e){m(e);for(var t=0,n=a.shapeList.length;t<n;t++)r.addShape(a.shapeList[t])}function y(){return f}function b(){var e=r.getWidth(),t=r.getHeight(),n=e/(d||e),i=t/(p||t);if(n==1&&i==1)return;d=e,p=t;for(var s=0,o=a.shapeList.length;s<o;s++)r.modShape(a.shapeList[s].id,{style:{x:Math.round(a.shapeList[s].style.x*n),y:Math.round(a.shapeList[s].style.y*i)}},!0)}function w(e){var t=o.get(e,"name"),n=o.get(e,"value"),i=typeof o.get(e,"series")!="undefined"?o.get(e,"series").name:"",s=a.getFont(f.island.textStyle),u={shape:"circle",id:r.newShapeId(a.type),zlevel:l,style:{x:e.style.x,y:e.style.y,r:f.island.r,color:e.style.color||e.style.strokeColor,text:t+h+n,textFont:s},draggable:!0,hoverable:!0,onmousewheel:a.shapeHandler.onmousewheel,_type:"island"};u.style.color=="#fff"&&(u.style.color=e.style.strokeColor),a.setCalculable(u),u.dragEnableTime=0,o.pack(u,{name:i},-1,n,-1,t),a.shapeList.push(u),r.addShape(u)}function E(e){r.delShape(e.id);var t=[];for(var n=0,i=a.shapeList.length;n<i;n++)a.shapeList[n].id!=e.id&&t.push(a.shapeList[n]);a.shapeList=t}function S(e,t){if(!a.isDrop||!e.target)return;var n=e.target,i=e.dragged;v(n,i),r.modShape(n.id,n),t.dragIn=!0,a.isDrop=!1;return}function x(e,t){var n=e.target;a.isDragend?t.dragIn&&(E(n),t.needRefresh=!0):t.dragIn||(n.style.x=u.getX(e.event),n.style.y=u.getY(e.event),w(n),t.needRefresh=!0),a.isDragend=!1;return}var i=e("../component/base");i.call(this,t,r);var s=e("./calculableBase");s.call(this,r,t);var o=e("../util/ecData"),u=e("zrender/tool/event"),a=this;a.type=t.CHART_TYPE_ISLAND;var f,l=a.getZlevelBase(),c,h,p=r.getHeight(),d=r.getWidth();a.shapeHandler.onmousewheel=function(e){var t=e.target,n=e.event,i=u.getDelta(n);i=i>0?-1:1,t.style.r-=i,t.style.r=t.style.r<5?5:t.style.r;var s=o.get(t,"value"),a=s*f.island.calculateStep;a>1?s=Math.round(s-a*i):s=(s-a*i).toFixed(2)-0;var l=o.get(t,"name");t.style.text=l+":"+s,o.set(t,"value",s),o.set(t,"name",l),r.modShape(t.id,t),r.refresh(),u.stop(n)},a.refresh=m,a.render=g,a.resize=b,a.getOption=y,a.add=w,a.del=E,a.ondrop=S,a.ondragend=x}return e("../chart").define("island",t),t}),r("echarts/component",[],function(){var e={},t={};return e.define=function(n,r){return t[n]=r,e},e.get=function(e){return t[e]},e}),r("echarts/component/title",["require","./base","zrender/tool/area","zrender/tool/util","../component"],function(e){function t(t,n,r,i){function h(){c=v(),d(),p();for(var e=0,t=a.shapeList.length;e<t;e++)a.shapeList[e].id=r.newShapeId(a.type),r.addShape(a.shapeList[e])}function p(){var e=f.text,t=f.link,n=f.subtext,r=f.sublink,i=a.getFont(f.textStyle),s=a.getFont(f.subtextStyle),o=c.x,u=c.y,h=c.width,p=c.height,d={shape:"text",zlevel:l,style:{y:u,color:f.textStyle.color,text:e,textFont:i,textBaseline:"top"},highlightStyle:{brushType:"fill"},hoverable:!1};t&&(d.hoverable=!0,d.clickable=!0,d.onclick=function(){window.open(t)});var v={shape:"text",zlevel:l,style:{y:u+p,color:f.subtextStyle.color,text:n,textFont:s,textBaseline:"bottom"},highlightStyle:{brushType:"fill"},hoverable:!1};r&&(v.hoverable=!0,v.clickable=!0,v.onclick=function(){window.open(r)});switch(f.x){case"center":d.style.x=v.style.x=o+h/2,d.style.textAlign=v.style.textAlign="center";break;case"left":d.style.x=v.style.x=o,d.style.textAlign=v.style.textAlign="left";break;case"right":d.style.x=v.style.x=o+h,d.style.textAlign=v.style.textAlign="right";break;default:o=f.x-0,o=isNaN(o)?0:o,d.style.x=v.style.x=o}f.textAlign&&(d.style.textAlign=v.style.textAlign=f.textAlign),a.shapeList.push(d),n!==""&&a.shapeList.push(v)}function d(){var e=f.padding[0],t=f.padding[1],n=f.padding[2],r=f.padding[3];a.shapeList.push({shape:"rectangle",zlevel:l,hoverable:!1,style:{x:c.x-r,y:c.y-e,width:c.width+r+t,height:c.height+e+n,brushType:f.borderWidth===0?"fill":"both",color:f.backgroundColor,strokeColor:f.borderColor,lineWidth:f.borderWidth}})}function v(){var e=f.text,t=f.subtext,n=a.getFont(f.textStyle),i=a.getFont(f.subtextStyle),s=Math.max(o.getTextWidth(e,n),o.getTextWidth(t,i)),u=o.getTextHeight(e,n)+(t===""?0:f.itemGap+o.getTextHeight(t,i)),l,c=r.getWidth();switch(f.x){case"center":l=Math.floor((c-s)/2);break;case"left":l=f.padding[3]+f.borderWidth;break;case"right":l=c-s-f.padding[1]-f.borderWidth;break;default:l=f.x-0,l=isNaN(l)?0:l}var h,p=r.getHeight();switch(f.y){case"top":h=f.padding[0]+f.borderWidth;break;case"bottom":h=p-u-f.padding[2]-f.borderWidth;break;case"center":h=Math.floor((p-u)/2);break;default:h=f.y-0,h=isNaN(h)?0:h}return{x:l,y:h,width:s,height:u}}function m(e){g(e)}function g(e){e&&(i=e,i.title=a.reformOption(i.title),i.title.padding=a.reformCssArray(i.title.padding),f=i.title,f.textStyle=u.merge(f.textStyle,t.textStyle,{overwrite:!1,recursive:!1}),f.subtextStyle=u.merge(f.subtextStyle,t.textStyle,{overwrite:!1,recursive:!1}),a.clear(),h())}function y(){a.clear(),h()}var s=e("./base");s.call(this,t,r);var o=e("zrender/tool/area"),u=e("zrender/tool/util"),a=this;a.type=t.COMPONENT_TYPE_TITLE;var f,l=a.getZlevelBase(),c={};a.init=m,a.refresh=g,a.resize=y,m(i)}return e("../component").define("title",t),t}),r("echarts/component/categoryAxis",["require","./base","zrender/tool/util","zrender/tool/area","../component"],function(e){function t(t,n,r,i,s){function d(){var e=u.clone(i.data),t=i.axisLabel.formatter,n;for(var r=0,s=e.length;r<s;r++)n=e[r].formatter||t,n&&(typeof n=="function"?typeof e[r].value!="undefined"?e[r].value=n(e[r].value):e[r]=n(e[r]):typeof n=="string"&&(typeof e[r].value!="undefined"?e[r].value=n.replace("{value}",e[r].value):e[r]=n.replace("{value}",e[r])));return e}function v(){var e=i.axisLabel.interval;if(e=="auto"){var t=i.axisLabel.textStyle.fontSize,n=f.getFont(i.axisLabel.textStyle),r=i.data,s=i.data.length;if(i.position=="bottom"||i.position=="top")if(s>3){var o=T(),l=!1,c,h;e=0;while(!l&&e<s){e++,l=!0,c=o*e-10;for(var d=0;d<s;d+=e){i.axisLabel.rotate!==0?h=t:r[d].textStyle?h=a.getTextWidth(p[d].value||p[d],f.getFont(u.merge(r[d].textStyle,i.axisLabel.textStyle,{overwrite:!1,recursive:!0}))):h=a.getTextWidth(p[d].value||p[d],n);if(c<h){l=!1;break}}}}else e=1;else if(s>3){var o=T();e=1;while(o*e-6<t&&e<s)e++}else e=1}else e+=1;return e}function m(){p=d(),h=v(),i.splitArea.show&&E(),i.splitLine.show&&w(),i.axisLine.show&&g(),i.axisTick.show&&y(),i.axisLabel.show&&b();for(var e=0,t=f.shapeList.length;e<t;e++)f.shapeList[e].id=r.newShapeId(f.type),r.addShape(f.shapeList[e])}function g(){var e=i.axisLine.lineStyle.width,t=e/2,n={shape:"line",zlevel:c+1,hoverable:!1};switch(i.position){case"left":n.style={xStart:l.getX()-t,yStart:l.getYend()+t,xEnd:l.getX()-t,yEnd:l.getY()-t};break;case"right":n.style={xStart:l.getXend()+t,yStart:l.getYend()+t,xEnd:l.getXend()+t,yEnd:l.getY()-t};break;case"bottom":n.style={xStart:l.getX()-t,yStart:l.getYend()+t,xEnd:l.getXend()+t,yEnd:l.getYend()+t};break;case"top":n.style={xStart:l.getX()-t,yStart:l.getY()-t,xEnd:l.getXend()+t,yEnd:l.getY()-t}}i.name!==""&&(n.style.text=i.name,n.style.textPosition=i.nameLocation,n.style.textFont=f.getFont(i.nameTextStyle),i.nameTextStyle.align&&(n.style.textAlign=i.nameTextStyle.align),i.nameTextStyle.baseline&&(n.style.textBaseline=i.nameTextStyle.baseline),i.nameTextStyle.color&&(n.style.textColor=i.nameTextStyle.color)),n.style.strokeColor=i.axisLine.lineStyle.color,n.style.lineWidth=e,i.position=="left"||i.position=="right"?n.style.xStart=n.style.xEnd=f.subPixelOptimize(n.style.xEnd,e):n.style.yStart=n.style.yEnd=f.subPixelOptimize(n.style.yEnd,e),n.style.lineType=i.axisLine.lineStyle.type,f.shapeList.push(n)}function y(){var e,t=i.data.length,n=i.axisTick,r=n.length,s=n.lineStyle.color,o=n.lineStyle.width,u=n.interval=="auto"?h:n.interval-0+1,a=n.onGap,p=a?T()/2:typeof a=="undefined"?i.boundaryGap?T()/2:0:0,d=p>0?-u:0;if(i.position=="bottom"||i.position=="top"){var v=i.position=="bottom"?n.inside?l.getYend()-r:l.getYend():n.inside?l.getY():l.getY()-r,m;for(var g=d;g<t;g+=u)m=f.subPixelOptimize(C(g)+(g>=0?p:0),o),e={shape:"line",zlevel:c,hoverable:!1,style:{xStart:m,yStart:v,xEnd:m,yEnd:v+r,strokeColor:s,lineWidth:o}},f.shapeList.push(e)}else{var y=i.position=="left"?n.inside?l.getX():l.getX()-r:n.inside?l.getXend()-r:l.getXend(),b;for(var g=d;g<t;g+=u)b=f.subPixelOptimize(C(g)-(g>=0?p:0),o),e={shape:"line",zlevel:c,hoverable:!1,style:{xStart:y,yStart:b,xEnd:y+r,yEnd:b,strokeColor:s,lineWidth:o}},f.shapeList.push(e)}}function b(){var e,t=i.data,n=i.data.length,r=i.axisLabel.rotate,s=i.axisLabel.margin,o=i.axisLabel.textStyle,a;if(i.position=="bottom"||i.position=="top"){var d,v;i.position=="bottom"?(d=l.getYend()+s,v="top"):(d=l.getY()-s,v="bottom");for(var m=0;m<n;m+=h){if((p[m].value||p[m])==="")continue;a=u.merge(t[m].textStyle||{},o,{overwrite:!1}),e={shape:"text",zlevel:c,hoverable:!1,style:{x:C(m),y:d,color:a.color,text:p[m].value||p[m],textFont:f.getFont(a),textAlign:"center",textBaseline:v}},r&&(e.style.textAlign=r>0?i.position=="bottom"?"right":"left":i.position=="bottom"?"left":"right",e.rotation=[r*Math.PI/180,e.style.x,e.style.y]),f.shapeList.push(e)}}else{var g,y;i.position=="left"?(g=l.getX()-s,y="right"):(g=l.getXend()+s,y="left");for(var m=0;m<n;m+=h){if((p[m].value||p[m])==="")continue;a=u.merge(t[m].textStyle||{},o,{overwrite:!1}),e={shape:"text",zlevel:c,hoverable:!1,style:{x:g,y:C(m),color:a.color,text:p[m].value||p[m],textFont:f.getFont(a),textAlign:y,textBaseline:m===0&&i.name!==""?"bottom":m==n-1&&i.name!==""?"top":"middle"}},r&&(e.rotation=[r*Math.PI/180,e.style.x,e.style.y]),f.shapeList.push(e)}}}function w(){var e,t=i.data.length,n=i.splitLine,r=n.lineStyle.type,s=n.lineStyle.width,o=n.lineStyle.color;o=o instanceof Array?o:[o];var u=o.length,a=n.onGap,p=a?T()/2:typeof a=="undefined"?i.boundaryGap?T()/2:0:0;t-=a||typeof a=="undefined"&&i.boundaryGap?1:0;if(i.position=="bottom"||i.position=="top"){var d=l.getY(),v=l.getYend(),m;for(var g=0;g<t;g+=h)m=f.subPixelOptimize(C(g)+p,s),e={shape:"line",zlevel:c,hoverable:!1,style:{xStart:m,yStart:d,xEnd:m,yEnd:v,strokeColor:o[g/h%u],lineType:r,lineWidth:s}},f.shapeList.push(e)}else{var y=l.getX(),b=l.getXend(),w;for(var g=0;g<t;g+=h)w=f.subPixelOptimize(C(g)-p,s),e={shape:"line",zlevel:c,hoverable:!1,style:{xStart:y,yStart:w,xEnd:b,yEnd:w,strokeColor:o[g/h%u],linetype:r,lineWidth:s}},f.shapeList.push(e)}}function E(){var e,t=i.splitArea,n=t.areaStyle.color;if(n instanceof Array){var r=n.length,s=i.data.length,o=t.onGap,u=o?T()/2:typeof o=="undefined"?i.boundaryGap?T()/2:0:0;if(i.position=="bottom"||i.position=="top"){var a=l.getY(),p=l.getHeight(),d=l.getX(),v;for(var m=0;m<=s;m+=h)v=m<s?C(m)+u:l.getXend(),e={shape:"rectangle",zlevel:c,hoverable:!1,style:{x:d,y:a,width:v-d,height:p,color:n[m/h%r]}},f.shapeList.push(e),d=v}else{var g=l.getX(),y=l.getWidth(),b=l.getYend(),w;for(var m=0;m<=s;m+=h)w=m<s?C(m)-u:l.getY(),e={shape:"rectangle",zlevel:c,hoverable:!1,style:{x:g,y:w,width:y,height:b-w,color:n[m/h%r]}},f.shapeList.push(e),b=w}}else e={shape:"rectangle",zlevel:c,hoverable:!1,style:{x:l.getX(),y:l.getY(),width:l.getWidth(),height:l.getHeight(),color:n}},f.shapeList.push(e)}function S(e,t){if(e.data.length<1)return;l=t,x(e)}function x(e){e&&(i=f.reformOption(e),i.axisLabel.textStyle=u.merge(i.axisLabel.textStyle||{},t.textStyle,{overwrite:!1,recursive:!0}),i.axisLabel.textStyle=u.merge(i.axisLabel.textStyle||{},t.textStyle,{overwrite:!1,recursive:!0})),f.clear(),m()}function T(){var e=i.data.length,t=i.position=="bottom"||i.position=="top"?l.getWidth():l.getHeight();return i.boundaryGap?t/e:t/(e>1?e-1:1)}function N(e){var t=i.data,n=t.length,r=T(),s=i.boundaryGap?r/2:0;for(var o=0;o<n;o++){if(t[o]==e||typeof t[o].value!="undefined"&&t[o].value==e)return i.position=="bottom"||i.position=="top"?s=l.getX()+s:s=l.getYend()-s,s;s+=r}}function C(e){if(e<0)return i.position=="bottom"||i.position=="top"?l.getX():l.getYend();if(e>i.data.length-1)return i.position=="bottom"||i.position=="top"?l.getXend():l.getY();var t=T(),n=i.boundaryGap?t/2:0;return n+=e*t,i.position=="bottom"||i.position=="top"?n=l.getX()+n:n=l.getYend()-n,n}function k(e){var t=i.data[e];return typeof t!="undefined"&&typeof t.value!="undefined"?t.value:t}function L(e){var t=i.data,n=t.length;for(var r=0;r<n;r++)if(t[r]==e||typeof t[r].value!="undefined"&&t[r].value==e)return r}function A(e){return e%h===0}function O(){return i.position}var o=e("./base");o.call(this,t,r);var u=e("zrender/tool/util"),a=e("zrender/tool/area"),f=this;f.type=t.COMPONENT_TYPE_AXIS_CATEGORY;var l=s.grid,c=f.getZlevelBase(),h,p;f.init=S,f.refresh=x,f.getGap=T,f.getCoord=N,f.getCoordByIndex=C,f.getNameByIndex=k,f.getIndexByName=L,f.isMainAxis=A,f.getPosition=O,S(i,l)}return e("../component").define("categoryAxis",t),t}),r("echarts/component/valueAxis",["require","./base","zrender/tool/util","../component"],function(e){function t(t,n,r,i,s,o){function g(){d=!1,x();if(!d)return;i.splitArea.show&&S(),i.splitLine.show&&E(),i.axisLine.show&&y(),i.axisTick.show&&b(),i.axisLabel.show&&w();for(var e=0,t=f.shapeList.length;e<t;e++)f.shapeList[e].id=r.newShapeId(f.type),r.addShape(f.shapeList[e])}function y(){var e=i.axisLine.lineStyle.width,t=e/2,n={shape:"line",zlevel:c+1,hoverable:!1};switch(i.position){case"left":n.style={xStart:l.getX()-t,yStart:l.getYend()+t,xEnd:l.getX()-t,yEnd:l.getY()-t};break;case"right":n.style={xStart:l.getXend()+t,yStart:l.getYend()+t,xEnd:l.getXend()+t,yEnd:l.getY()-t};break;case"bottom":n.style={xStart:l.getX()-t,yStart:l.getYend()+t,xEnd:l.getXend()+t,yEnd:l.getYend()+t};break;case"top":n.style={xStart:l.getX()-t,yStart:l.getY()-t,xEnd:l.getXend()+t,yEnd:l.getY()-t}}i.name!==""&&(n.style.text=i.name,n.style.textPosition=i.nameLocation,n.style.textFont=f.getFont(i.nameTextStyle),i.nameTextStyle.align&&(n.style.textAlign=i.nameTextStyle.align),i.nameTextStyle.baseline&&(n.style.textBaseline=i.nameTextStyle.baseline),i.nameTextStyle.color&&(n.style.textColor=i.nameTextStyle.color)),n.style.strokeColor=i.axisLine.lineStyle.color;var e=i.axisLine.lineStyle.width;n.style.lineWidth=e,i.position=="left"||i.position=="right"?n.style.xStart=n.style.xEnd=f.subPixelOptimize(n.style.xEnd,e):n.style.yStart=n.style.yEnd=f.subPixelOptimize(n.style.yEnd,e),n.style.lineType=i.axisLine.lineStyle.type,f.shapeList.push(n)}function b(){var e,t=v,n=v.length,r=i.axisTick,s=r.length,o=r.lineStyle.color,u=r.lineStyle.width;if(i.position=="bottom"||i.position=="top"){var a=i.position=="bottom"?r.inside?l.getYend()-s:l.getYend():r.inside?l.getY():l.getY()-s,h;for(var p=0;p<n;p++)h=f.subPixelOptimize(O(t[p]),u),e={shape:"line",zlevel:c,hoverable:!1,style:{xStart:h,yStart:a,xEnd:h,yEnd:a+s,strokeColor:o,lineWidth:u}},f.shapeList.push(e)}else{var d=i.position=="left"?r.inside?l.getX():l.getX()-s:r.inside?l.getXend()-s:l.getXend(),m;for(var p=0;p<n;p++)m=f.subPixelOptimize(O(t[p]),u),e={shape:"line",zlevel:c,hoverable:!1,style:{xStart:d,yStart:m,xEnd:d+s,yEnd:m,strokeColor:o,lineWidth:u}},f.shapeList.push(e)}}function w(){var e,t=v,n=v.length,r=i.axisLabel.rotate,s=i.axisLabel.margin,o=i.axisLabel.textStyle;if(i.position=="bottom"||i.position=="top"){var u,a;i.position=="bottom"?(u=l.getYend()+s,a="top"):(u=l.getY()-s,a="bottom");for(var h=0;h<n;h++)e={shape:"text",zlevel:c,hoverable:!1,style:{x:O(t[h]),y:u,color:typeof o.color=="function"?o.color(t[h]):o.color,text:m[h],textFont:f.getFont(o),textAlign:"center",textBaseline:a}},r&&(e.style.textAlign=r>0?i.position=="bottom"?"right":"left":i.position=="bottom"?"left":"right",e.rotation=[r*Math.PI/180,e.style.x,e.style.y]),f.shapeList.push(e)}else{var p,d;i.position=="left"?(p=l.getX()-s,d="right"):(p=l.getXend()+s,d="left");for(var h=0;h<n;h++)e={shape:"text",zlevel:c,hoverable:!1,style:{x:p,y:O(t[h]),color:typeof o.color=="function"?o.color(t[h]):o.color,text:m[h],textFont:f.getFont(o),textAlign:d,textBaseline:h===0&&i.name!==""?"bottom":h==n-1&&i.name!==""?"top":"middle"}},r&&(e.rotation=[r*Math.PI/180,e.style.x,e.style.y]),f.shapeList.push(e)}}function E(){var e,t=v,n=v.length,r=i.splitLine,s=r.lineStyle.type,o=r.lineStyle.width,u=r.lineStyle.color;u=u instanceof Array?u:[u];var a=u.length;if(i.position=="bottom"||i.position=="top"){var h=l.getY(),p=l.getYend(),d;for(var m=1;m<n-1;m++)d=f.subPixelOptimize(O(t[m]),o),e={shape:"line",zlevel:c,hoverable:!1,style:{xStart:d,yStart:h,xEnd:d,yEnd:p,strokeColor:u[m%a],lineType:s,lineWidth:o}},f.shapeList.push(e)}else{var g=l.getX(),y=l.getXend(),b;for(var m=1;m<n-1;m++)b=f.subPixelOptimize(O(t[m]),o),e={shape:"line",zlevel:c,hoverable:!1,style:{xStart:g,yStart:b,xEnd:y,yEnd:b,strokeColor:u[m%a],lineType:s,lineWidth:o}},f.shapeList.push(e)}}function S(){var e,t=i.splitArea.areaStyle.color;if(t instanceof Array){var n=t.length,r=v,s=v.length;if(i.position=="bottom"||i.position=="top"){var o=l.getY(),u=l.getHeight(),a=l.getX(),h;for(var p=0;p<=s;p++)h=p<s?O(r[p]):l.getXend(),e={shape:"rectangle",zlevel:c,hoverable:!1,style:{x:a,y:o,width:h-a,height:u,color:t[p%n]}},f.shapeList.push(e),a=h}else{var d=l.getX(),m=l.getWidth(),g=l.getYend(),y;for(var p=0;p<=s;p++)y=p<s?O(r[p]):l.getY(),e={shape:"rectangle",zlevel:c,hoverable:!1,style:{x:d,y:y,width:m,height:g-y,color:t[p%n]}},f.shapeList.push(e),g=y}}else e={shape:"rectangle",zlevel:c,hoverable:!1,style:{x:l.getX(),y:l.getY(),width:l.getWidth(),height:l.getHeight(),color:t}},f.shapeList.push(e)}function x(){if(isNaN(i.min-0)||isNaN(i.max-0)){var e,n={},r,u,a,f=s.legend;for(var l=0,c=o.length;l<c;l++){if(o[l].type!=t.CHART_TYPE_LINE&&o[l].type!=t.CHART_TYPE_BAR&&o[l].type!=t.CHART_TYPE_SCATTER&&o[l].type!=t.CHART_TYPE_K)continue;if(f&&!f.isSelected(o[l].name))continue;u=o[l].xAxisIndex||0,a=o[l].yAxisIndex||0;if(i.xAxisIndex!=u&&i.yAxisIndex!=a)continue;var v=o[l].name||"kener";if(!o[l].stack){n[v]=n[v]||[],e=o[l].data;for(var m=0,g=e.length;m<g;m++)r=typeof e[m].value!="undefined"?e[m].value:e[m],o[l].type==t.CHART_TYPE_SCATTER?(i.xAxisIndex!=-1&&n[v].push(r[0]),i.yAxisIndex!=-1&&n[v].push(r[1])):o[l].type==t.CHART_TYPE_K?(n[v].push(r[0]),n[v].push(r[1]),n[v].push(r[2]),n[v].push(r[3])):n[v].push(r)}else{var y="__Magic_Key_Positive__"+o[l].stack,b="__Magic_Key_Negative__"+o[l].stack;n[y]=n[y]||[],n[b]=n[b]||[],n[v]=n[v]||[],e=o[l].data;for(var m=0,g=e.length;m<g;m++){r=typeof e[m].value!="undefined"?e[m].value:e[m];if(r=="-")continue;r-=0,r>=0?typeof n[y][m]!="undefined"?n[y][m]+=r:n[y][m]=r:typeof n[b][m]!="undefined"?n[b][m]+=r:n[b][m]=r,i.scale&&n[v].push(r)}}}for(var l in n){e=n[l];for(var m=0,g=e.length;m<g;m++)if(!isNaN(e[m])){d=!0,h=e[m],p=e[m];break}if(d)break}for(var l in n){e=n[l];for(var m=0,g=e.length;m<g;m++)isNaN(e[m])||(h=Math.min(h,e[m]),p=Math.max(p,e[m]))}h=isNaN(i.min-0)?h-Math.abs(h*i.boundaryGap[0]):i.min-0,p=isNaN(i.max-0)?p+Math.abs(p*i.boundaryGap[1]):i.max-0,h==p&&(p===0?p=i.power>0?i.power:1:p>0?h=p/i.splitNumber:p/=i.splitNumber),T(i.scale)}else d=!0,h=i.min-0,p=i.max-0,customerDefine=!0,N()}function T(e){var t=i.splitNumber,n=i.precision,r,s;n===0?s=i.power>1?i.power:1:(s=Math.pow(10,n),h*=s,p*=s,s=i.power);var o;if(h>=0&&p>=0){if(!e){while(p/s<t&&s!=1)s/=10;h=0}else{while(h<s&&s!=1)s/=10;n===0&&(h=Math.floor(h/s)*s,p=Math.ceil(p/s)*s)}s=s>1?s/10:1,o=p-h,r=Math.ceil(o/t/s)*s,p=h+r*t}else if(h<=0&&p<=0){s=-s;if(!e){while(h/s<t&&s!=-1)s/=10;p=0}else{while(p>s&&s!=-1)s/=10;n===0&&(h=Math.ceil(h/s)*s,p=Math.floor(p/s)*s)}s=s<-1?s/10:-1,o=h-p,r=-Math.ceil(o/t/s)*s,h=-r*t+p}else{o=p-h;while(o/s<t&&s!=1)s/=10;var u=Math.round(p/o*t);u-=u==t?1:0,u+=u===0?1:0,r=Math.ceil(Math.max(p/u,h/(u-t))/s)*s,p=r*u,h=r*(u-t)}v=[];for(var a=0;a<=t;a++)v.push(h+r*a);if(n!==0){s=Math.pow(10,n),h=(h/s).toFixed(n)-0,p=(p/s).toFixed(n)-0;for(var a=0;a<=t;a++)v[a]=(v[a]/s).toFixed(n)-0}C()}function N(){var e=i.splitNumber,t=i.precision,n=(p-h)/e;v=[];for(var r=0;r<=e;r++)v.push((h+n*r).toFixed(t)-0);C()}function C(){m=[];var e=i.axisLabel.formatter;if(e)for(var t=0,n=v.length;t<n;t++)typeof e=="function"?m.push(e(v[t])):typeof e=="string"&&m.push(e.replace("{value}",v[t]));else for(var t=0,n=v.length;t<n;t++)m.push(f.numAddCommas(v[t]))}function k(){return x(),{min:h,max:p}}function L(e,t,n){if(!n||n.length===0)return;l=t,A(e,n)}function A(e,n){e&&(i=f.reformOption(e),i.axisLabel.textStyle=a.merge(i.axisLabel.textStyle||{},t.textStyle,{overwrite:!1,recursive:!0}),i.axisLabel.textStyle=a.merge(i.axisLabel.textStyle||{},t.textStyle,{overwrite:!1,recursive:!0}),o=n),r&&(f.clear(),g())}function O(e){e=e<h?h:e,e=e>p?p:e;var t=p-h,n,r;return i.position=="left"||i.position=="right"?(n=l.getHeight(),r=l.getYend()-(e-h)/t*n):(n=l.getWidth(),r=(e-h)/t*n+l.getX()),r}function M(e){return i.position=="left"||i.position=="right"?Math.abs(e/(p-h)*l.getHeight()):Math.abs(e/(p-h)*l.getWidth())}function _(){return i.position}var u=e("./base");u.call(this,t,r);var a=e("zrender/tool/util"),f=this;f.type=t.COMPONENT_TYPE_AXIS_VALUE;var l=s.grid,c=f.getZlevelBase(),h,p,d,v,m;f.init=L,f.refresh=A,f.getExtremum=k,f.getCoord=O,f.getCoordSize=M,f.getPosition=_,L(i,l,o)}return e("../component").define("valueAxis",t),t}),r("echarts/component/axis",["require","./base","./categoryAxis","./valueAxis","../component"],function(e){function t(t,n,r,i,s,o){function l(e){!e||e instanceof Array&&e.length===0?e=[{type:t.COMPONENT_TYPE_AXIS_VALUE}]:e instanceof Array||(e=[e]),e.length>2&&(e=[e[0],e[1]]);if(o=="xAxis"){if(!e[0].position||e[0].position!="bottom"&&e[0].position!="top")e[0].position="bottom";e.length>1&&(e[1].position=e[0].position=="bottom"?"top":"bottom");for(var n=0,r=e.length;n<r;n++)e[n].type=e[n].type||"category",e[n].xAxisIndex=n,e[n].yAxisIndex=-1}else{if(!e[0].position||e[0].position!="left"&&e[0].position!="right")e[0].position="left";e.length>1&&(e[1].position=e[0].position=="left"?"right":"left");for(var n=0,r=e.length;n<r;n++)e[n].type=e[n].type||"value",e[n].xAxisIndex=-1,e[n].yAxisIndex=n}return e}function c(u,l,c){s=l,o=c,a.clear();var h;o=="xAxis"?(i.xAxis=a.reformOption(u.xAxis),h=i.xAxis):(i.yAxis=a.reformOption(u.yAxis),h=i.yAxis);var p=e("./categoryAxis"),d=e("./valueAxis");for(var v=0,m=h.length;v<m;v++)f.push(h[v].type=="category"?new p(t,n,r,h[v],s):new d(t,n,r,h[v],s,i.series))}function h(e){var t,n;e&&(o=="xAxis"?(i.xAxis=a.reformOption(e.xAxis),t=i.xAxis):(i.yAxis=l(e.yAxis),t=i.yAxis),n=e.series);for(var r=0,s=f.length;r<s;r++)f[r].refresh&&f[r].refresh(t?t[r]:!1,n)}function p(e){return f[e]}function d(){for(var e=0,t=f.length;e<t;e++)f[e].dispose&&f[e].dispose();f=[]}var u=e("./base");u.call(this,t,r);var a=this;a.type=t.COMPONENT_TYPE_AXIS;var f=[];a.clear=d,a.reformOption=l,a.init=c,a.refresh=h,a.getAxis=p,c(i,s,o)}return e("../component").define("axis",t),t}),r("echarts/component/grid",["require","./base","../component"],function(e){function t(t,n,r,i){function d(e){i=e,i.grid=o.reformOption(i.grid);var t=i.grid;h=r.getWidth(),p=r.getHeight(),a=o.parsePercent(t.x,h),f=o.parsePercent(t.y,p);var n=o.parsePercent(t.x2,h),s=o.parsePercent(t.y2,p);typeof t.width=="undefined"?l=h-a-n:l=o.parsePercent(t.width,h),typeof t.height=="undefined"?c=p-f-s:c=o.parsePercent(t.height,p),a=o.subPixelOptimize(a,t.borderWidth),f=o.subPixelOptimize(f,t.borderWidth),o.shapeList.push({shape:"rectangle",id:r.newShapeId("grid"),zlevel:u,hoverable:!1,style:{x:a,y:f,width:l,height:c,brushType:t.borderWidth>0?"both":"fill",color:t.backgroundColor,strokeColor:t.borderColor,lineWidth:t.borderWidth}}),r.addShape(o.shapeList[0])}function v(){return a}function m(){return f}function g(){return l}function y(){return c}function b(){return a+l}function w(){return f+c}function E(){return{x:a,y:f,width:l,height:c}}function S(e){if(h!=r.getWidth()||p!=r.getHeight()||e)o.clear(),d(e||i)}var s=e("./base");s.call(this,t,r);var o=this;o.type=t.COMPONENT_TYPE_GRID;var u=o.getZlevelBase(),a,f,l,c,h,p;o.init=d,o.getX=v,o.getY=m,o.getWidth=g,o.getHeight=y,o.getXend=b,o.getYend=w,o.getArea=E,o.refresh=S,d(i)}return e("../component").define("grid",t),t}),r("echarts/component/dataZoom",["require","./base","../component","zrender/tool/util","zrender/tool/util","zrender/tool/util","../component"],function(e){function t(t,n,r,i,s){function S(){k(),L(),A(),O();for(var e=0,t=u.shapeList.length;e<t;e++)u.shapeList[e].id=r.newShapeId(u.type),r.addShape(u.shapeList[e]);P()}function x(){var e,t,n,i,o=s.grid;return f.orient=="horizontal"?(n=f.width||o.getWidth(),i=f.height||l,e=typeof f.x!="undefined"?f.x:o.getX(),t=typeof f.y!="undefined"?f.y:r.getHeight()-i-2):(n=f.width||l,i=f.height||o.getHeight(),e=typeof f.x!="undefined"?f.x:2,t=typeof f.y!="undefined"?f.y:o.getY()),{x:e,y:t,width:n,height:i}}function T(){var e=i.series,n=i.xAxis;n&&!(n instanceof Array)&&(n=[n],i.xAxis=n);var r=i.yAxis;r&&!(r instanceof Array)&&(r=[r],i.yAxis=r);var s=[],o,u,a=f.xAxisIndex;if(n&&typeof a=="undefined"){o=[];for(var l=0,c=n.length;l<c;l++)(n[l].type=="category"||typeof n[l].type=="undefined")&&o.push(l)}else a instanceof Array?o=a:typeof a!="undefined"?o=[a]:o=[];a=f.yAxisIndex;if(r&&typeof a=="undefined"){u=[];for(var l=0,c=r.length;l<c;l++)r[l].type=="category"&&u.push(l)}else a instanceof Array?u=a:typeof a!="undefined"?u=[a]:u=[];for(var l=0,c=e.length;l<c;l++){if(e[l].type!=t.CHART_TYPE_LINE&&e[l].type!=t.CHART_TYPE_BAR&&e[l].type!=t.CHART_TYPE_SCATTER&&e[l].type!=t.CHART_TYPE_K)continue;for(var p=0,d=o.length;p<d;p++)if(o[p]==(e[l].xAxisIndex||0)){s.push(l);break}for(var p=0,d=u.length;p<d;p++)if(u[p]==(e[l].yAxisIndex||0)){s.push(l);break}e[l].type==t.CHART_TYPE_SCATTER&&typeof f.xAxisIndex=="undefined"&&typeof f.yAxisIndex=="undefined"&&s.push(l)}var v=typeof f.start!="undefined"&&f.start>=0&&f.start<=100?f.start:0,m=typeof f.end!="undefined"&&f.end>=0&&f.end<=100?f.end:100;v>m&&(v+=m,m=v-m,v-=m);var g=Math.round((m-v)/100*(f.orient=="horizontal"?h.width:h.height));return{start:v,end:m,start2:0,end2:100,size:g,xAxisIndex:o,yAxisIndex:u,seriesIndex:s}}function N(){E={xAxis:{},yAxis:{},series:{}};var e=i.xAxis,n=p.xAxisIndex;for(var r=0,s=n.length;r<s;r++)E.xAxis[n[r]]=e[n[r]].data;var o=i.yAxis,u=p.yAxisIndex;for(var r=0,s=u.length;r<s;r++)E.yAxis[u[r]]=o[u[r]].data;var a=i.series,f=p.seriesIndex,l;for(var r=0,s=f.length;r<s;r++)l=a[f[r]],E.series[f[r]]=l.data,l.type==t.CHART_TYPE_SCATTER&&C(f[r])}function C(n){p.scatterMap=p.scatterMap||{},p.scatterMap[n]=p.scatterMap[n]||{};var r=e("../component"),o=e("zrender/tool/util"),u=r.get("axis"),a=o.clone(i.xAxis);a instanceof Array?(a[0].type="value",a[1]&&(a[1].type="value")):a.type="value";var f=new u(t,null,!1,{xAxis:a,series:i.series},s,"xAxis"),l=i.series[n].xAxisIndex||0;p.scatterMap[n].x=f.getAxis(l).getExtremum(),f.dispose(),a=o.clone(i.yAxis),a instanceof Array?(a[0].type="value",a[1]&&(a[1].type="value")):a.type="value",f=new u(t,null,!1,{yAxis:a,series:i.series},s,"yAxis"),l=i.series[n].yAxisIndex||0,p.scatterMap[n].y=f.getAxis(l).getExtremum(),f.dispose()}function k(){u.shapeList.push({shape:"rectangle",zlevel:a,hoverable:!1,style:{x:h.x,y:h.y,width:h.width,height:h.height,color:f.backgroundColor}});var e=0,n=E.xAxis,r=p.xAxisIndex;for(var s=0,o=r.length;s<o;s++)e=Math.max(e,n[r[s]].length);var l=E.yAxis,c=p.yAxisIndex;for(var s=0,o=c.length;s<o;s++)e=Math.max(e,l[c[s]].length);var d=p.seriesIndex[0],v=E.series[d],m=Number.MIN_VALUE,g=Number.MAX_VALUE,y;for(var s=0,o=v.length;s<o;s++)y=typeof v[s]!="undefined"?typeof v[s].value!="undefined"?v[s].value:v[s]:0,i.series[d].type==t.CHART_TYPE_K&&(y=y[1]),isNaN(y)&&(y=0),m=Math.max(m,y),g=Math.min(g,y);var b=[],w=h.width/(e-(e>1?1:0)),S=h.height/(e-(e>1?1:0));for(var s=0,o=e;s<o;s++)y=typeof v[s]!="undefined"?typeof v[s].value!="undefined"?v[s].value:v[s]:0,i.series[d].type==t.CHART_TYPE_K&&(y=y[1]),isNaN(y)&&(y=0),f.orient=="horizontal"?b.push([h.x+w*s,h.y+h.height-5-Math.round((y-g)/(m-g)*(h.height-10))]):b.push([h.x+5+Math.round((y-g)/(m-g)*(h.width-10)),h.y+S*s]);f.orient=="horizontal"?(b.push([h.x+h.width,h.y+h.height]),b.push([h.x,h.y+h.height])):(b.push([h.x,h.y+h.height]),b.push([h.x,h.y])),u.shapeList.push({shape:"polygon",zlevel:a,style:{pointList:b,color:f.dataBackgroundColor},hoverable:!1})}function L(){d={shape:"rectangle",zlevel:a,draggable:!0,ondrift:M,ondragend:F,_type:"filler"},f.orient=="horizontal"?d.style={x:h.x+Math.round(p.start/100*h.width)+c,y:h.y,width:p.size-c*2,height:h.height,color:f.fillerColor,text:":::",textPosition:"inside"}:d.style={x:h.x,y:h.y+Math.round(p.start/100*h.height)+c,width:h.width,height:p.size-c*2,color:f.fillerColor,text:"::",textPosition:"inside"},d.highlightStyle={brushType:"fill",color:"rgba(0,0,0,0)"},u.shapeList.push(d)}function A(){var t=e("zrender/tool/util");v={shape:"icon",zlevel:a,draggable:!0,style:{iconType:"rectangle",x:h.x,y:h.y,width:c,height:c,color:f.handleColor,text:"=",textPosition:"inside"},highlightStyle:{brushType:"fill"},ondrift:M,ondragend:F},f.orient=="horizontal"?(v.style.height=h.height,m=t.clone(v),v.style.x=d.style.x-c,m.style.x=d.style.x+d.style.width):(v.style.width=h.width,m=t.clone(v),v.style.y=d.style.y-c,m.style.y=d.style.y+d.style.height),u.shapeList.push(v),u.shapeList.push(m)}function O(){var t=e("zrender/tool/util"),n=u.subPixelOptimize(h.x,1),r=u.subPixelOptimize(h.y,1);g={shape:"rectangle",zlevel:a,hoverable:!1,style:{x:n,y:r,width:h.width-(n>h.x?1:0),height:h.height-(r>h.y?1:0),lineWidth:1,brushType:"stroke",strokeColor:f.handleColor}},y=t.clone(g),u.shapeList.push(g),u.shapeList.push(y);return}function M(e,t,n){f.zoomLock&&(e=d);var r=e._type=="filler"?c:0;return f.orient=="horizontal"?e.style.x+t-r<=h.x?e.style.x=h.x+r:e.style.x+t+e.style.width+r>=h.x+h.width?e.style.x=h.x+h.width-e.style.width-r:e.style.x+=t:e.style.y+n-r<=h.y?e.style.y=h.y+r:e.style.y+n+e.style.height+r>=h.y+h.height?e.style.y=h.y+h.height-e.style.height-r:e.style.y+=n,e._type=="filler"?_():D(),f.realtime?B():(clearTimeout(b),b=setTimeout(B,200)),!0}function _(){f.orient=="horizontal"?(v.style.x=d.style.x-c,m.style.x=d.style.x+d.style.width,p.start=Math.floor((v.style.x-h.x)/h.width*100),p.end=Math.ceil((m.style.x+c-h.x)/h.width*100)):(v.style.y=d.style.y-c,m.style.y=d.style.y+d.style.height,p.start=Math.floor((v.style.y-h.y)/h.height*100),p.end=Math.ceil((m.style.y+c-h.y)/h.height*100)),r.modShape(v.id,v),r.modShape(m.id,m),P(),r.refresh()}function D(){var e,t;f.orient=="horizontal"?(e=v.style.x,t=m.style.x,d.style.x=Math.min(e,t)+c,d.style.width=Math.abs(e-t)-c,p.start=Math.floor((Math.min(e,t)-h.x)/h.width*100),p.end=Math.ceil((Math.max(e,t)+c-h.x)/h.width*100)):(e=v.style.y,t=m.style.y,d.style.y=Math.min(e,t)+c,d.style.height=Math.abs(e-t)-c,p.start=Math.floor((Math.min(e,t)-h.y)/h.height*100),p.end=Math.ceil((Math.max(e,t)+c-h.y)/h.height*100)),r.modShape(d.id,d),P(),r.refresh()}function P(){f.orient=="horizontal"?(g.style.width=d.style.x-h.x,y.style.x=d.style.x+d.style.width,y.style.width=h.x+h.width-y.style.x):(g.style.height=d.style.y-h.y,y.style.y=d.style.y+d.style.height,y.style.height=h.y+h.height-y.style.y),r.modShape(g.id,g),r.modShape(y.id,y)}function H(){if(!f.show)return;f.orient=="horizontal"?(v.style.x=h.x+p.start/100*h.width,m.style.x=h.x+p.end/100*h.width-c,d.style.x=v.style.x+c,d.style.width=m.style.x-v.style.x-c):(v.style.y=h.y+p.start/100*h.height,m.style.y=h.y+p.end/100*h.height-c,d.style.y=v.style.y+c,d.style.height=m.style.y-v.style.y-c),r.modShape(v.id,v),r.modShape(m.id,m),r.modShape(d.id,d),P(),r.refresh()}function B(e){var r,s,o,u,a;for(var l in E){r=E[l];for(var c in r)a=r[c],u=a.length,s=Math.floor(p.start/100*u),o=Math.ceil(p.end/100*u),i[l][c].type!=t.CHART_TYPE_SCATTER?i[l][c].data=a.slice(s,o):i[l][c].data=j(c,a)}!w&&(f.realtime||e)&&n.dispatch(t.EVENT.DATA_ZOOM,null,{zoom:p}),f.start=p.start,f.end=p.end}function j(e,t){var n=[],r=p.scatterMap[e],i,s,o,u,a;f.orient=="horizontal"?(i=r.x.max-r.x.min,s=p.start/100*i+r.x.min,o=p.end/100*i+r.x.min,i=r.y.max-r.y.min,u=p.start2/100*i+r.y.min,a=p.end2/100*i+r.y.min):(i=r.x.max-r.x.min,s=p.start2/100*i+r.x.min,o=p.end2/100*i+r.x.min,i=r.y.max-r.y.min,u=p.start/100*i+r.y.min,a=p.end/100*i+r.y.min);var l;for(var c=0,h=t.length;c<h;c++)l=t[c].value||t[c],l[0]>=s&&l[0]<=o&&l[1]>=u&&l[1]<=a&&n.push(t[c]);return n}function F(){u.isDragend=!0}function I(e,r){if(!u.isDragend||!e.target)return;B(),r.dragOut=!0,r.dragIn=!0,!w&&!f.realtime&&n.dispatch(t.EVENT.DATA_ZOOM,null,{zoom:p}),r.needRefresh=!1,u.isDragend=!1;return}function q(e,t){t.needRefresh=!0;return}function R(e){f.start=p.start=e.start,f.end=p.end=e.end,f.start2=p.start2=e.start2,f.end2=p.end2=e.end2,H(),B(!0);return}function U(e){if(!e)return f.start=f.start2=p.start=p.start2=0,f.end=f.end2=p.end=p.end2=100,H(),B(!0),p;var t=s.grid.getArea(),n={x:e.x,y:e.y,width:e.width,height:e.height};n.width<0&&(n.x+=n.width,n.width=-n.width),n.height<0&&(n.y+=n.height,n.height=-n.height);if(n.x>t.x+t.width||n.y>t.y+t.height)return!1;n.x<t.x&&(n.x=t.x),n.x+n.width>t.x+t.width&&(n.width=t.x+t.width-n.x),n.y+n.height>t.y+t.height&&(n.height=t.y+t.height-n.y);var r,i=(n.x-t.x)/t.width,o=1-(n.x+n.width-t.x)/t.width,u=1-(n.y+n.height-t.y)/t.height,a=(n.y-t.y)/t.height;return f.orient=="horizontal"?(r=p.end-p.start,p.start+=r*i,p.end-=r*o,r=p.end2-p.start2,p.start2+=r*u,p.end2-=r*a):(r=p.end-p.start,p.start+=r*u,p.end-=r*a,r=p.end2-p.start2,p.start2+=r*i,p.end2-=r*o),f.start=p.start,f.end=p.end,f.start2=p.start2,f.end2=p.end2,H(),B(!0),p}function z(e,t){var n,r=E.series,i=e.series,s;for(var o=0,u=i.length;o<u;o++){s=i[o].data,r[o]?n=Math.floor(p.start/100*r[o].length):n=0;for(var a=0,f=s.length;a<f;a++)t.series[o].data[a+n]=s[a],r[o]&&(r[o][a+n]=s[a])}}function W(e){w=e}function X(e,t){if(!E)return t;var n=E.series;return n[e]?Math.floor(p.start/100*n[e].length)+t:-1}function V(e){i=e,i.dataZoom=u.reformOption(i.dataZoom),f=i.dataZoom,u.clear();if(i.dataZoom.show||u.query(i,"toolbox.show")&&u.query(i,"toolbox.feature.dataZoom.show"))h=x(),p=T(),N();i.dataZoom.show&&(S(),B())}function $(){u.clear();if(i.dataZoom.show||u.query(i,"toolbox.show")&&u.query(i,"toolbox.feature.dataZoom.show"))h=x(),p=T();i.dataZoom.show&&S()}var o=e("./base");o.call(this,t,r);var u=this;u.type=t.COMPONENT_TYPE_DATAZOOM;var a=u.getZlevelBase(),f,l=28,c=8,h,p,d,v,m,g,y,b,w=!1,E;u.init=V,u.resize=$,u.syncBackupData=z,u.absoluteZoom=R,u.rectZoom=U,u.ondragend=I,u.ondataZoom=q,u.silence=W,u.getRealDataIndex=X,V(i)}return e("../component").define("dataZoom",t),t}),r("echarts/component/legend",["require","./base","zrender/tool/util","zrender/tool/area","zrender/tool/color","zrender/shape","zrender/shape","zrender/shape","zrender/shape","zrender/shape","../component"],function(e){function t(t,r,i,s,o){function w(){d=T(),x(),E();for(var e=0,t=c.shapeList.length;e<t;e++)c.shapeList[e].id=i.newShapeId(c.type),i.addShape(c.shapeList[e])}function E(){var e=h.data,t=e.length,n,r,s,o,u=h.textStyle,l,v,m=i.getWidth(),y=i.getHeight(),b=d.x,w=d.y,E=h.itemWidth,x=h.itemHeight,T=h.itemGap,L;h.orient=="vertical"&&h.x=="right"&&(b=d.x+d.width-E);for(var A=0;A<t;A++){l=a.merge(e[A].textStyle||{},u,{overwrite:!1}),v=c.getFont(l),n=e[A].name||e[A];if(n===""){h.orient=="horizontal"?(b=d.x,w+=x+T):(h.x=="right"?b-=d.maxWidth+T:b+=d.maxWidth+T,w=d.y);continue}r=N(n).type,L=M(n),h.orient=="horizontal"?m-b<200&&E+5+f.getTextWidth(n,v)+(A==t-1||e[A+1]===""?0:T)>=m-b&&(b=d.x,w+=x+T):y-w<200&&x+(A==t-1||e[A+1]===""?0:T)>=y-w&&(h.x=="right"?b-=d.maxWidth+T:b+=d.maxWidth+T,w=d.y),s=C(b,w,E,x,g[n]?L:"#ccc",r,L),s._name=n,h.selectedMode&&(s.onclick=k),c.shapeList.push(s),o={shape:"text",zlevel:p,style:{x:b+E+5,y:w,color:g[n]?l.color==="auto"?L:l.color:"#ccc",text:n,textFont:v,textBaseline:"top"},highlightStyle:{color:L,brushType:"fill"},hoverable:!!h.selectedMode,clickable:!!h.selectedMode},h.orient=="vertical"&&h.x=="right"&&(o.style.x-=E+10,o.style.textAlign="right"),o._name=n,h.selectedMode&&(o.onclick=k),c.shapeList.push(o),h.orient=="horizontal"?b+=E+5+f.getTextWidth(n,v)+T:w+=x+T}h.orient=="horizontal"&&h.x=="center"&&w!=d.y&&S()}function S(){var e=[],t=d.x;for(var n=2,r=c.shapeList.length;n<r;n++)c.shapeList[n].style.x==t?e.push((d.width-(c.shapeList[n-1].style.x+f.getTextWidth(c.shapeList[n-1].style.text,c.shapeList[n-1].style.textFont)-t))/2):n==r-1&&e.push((d.width-(c.shapeList[n].style.x+f.getTextWidth(c.shapeList[n].style.text,c.shapeList[n].style.textFont)-t))/2);var i=-1;for(var n=1,r=c.shapeList.length;n<r;n++){c.shapeList[n].style.x==t&&i++;if(e[i]===0)continue;c.shapeList[n].style.x+=e[i]}}function x(){var e=h.padding[0],t=h.padding[1],n=h.padding[2],r=h.padding[3];c.shapeList.push({shape:"rectangle",zlevel:p,hoverable:!1,style:{x:d.x-r,y:d.y-e,width:d.width+r+t,height:d.height+e+n,brushType:h.borderWidth===0?"fill":"both",color:h.backgroundColor,strokeColor:h.borderColor,lineWidth:h.borderWidth}})}function T(){var e=h.data,t=e.length,n=h.itemGap,r=h.itemWidth+5,s=h.itemHeight,o=h.textStyle,u=c.getFont(o),l=0,p=0,d=h.padding,v=i.getWidth()-d[1]-d[3],m=i.getHeight()-d[0]-d[2],g=0,y=0;if(h.orient=="horizontal"){p=s;for(var b=0;b<t;b++){if(e[b]===""){g-=n,g>v?(l=v,p+=s+n):l=Math.max(l,g),p+=s+n,g=0;continue}dataTextStyle=a.merge(e[b].textStyle||{},o,{overwrite:!1}),g+=r+f.getTextWidth(e[b].name||e[b],e[b].textStyle?c.getFont(a.merge(e[b].textStyle||{},o,{overwrite:!1})):u)+n}p=Math.max(p,s),g-=n,g>v?(l=v,p+=s+n):l=Math.max(l,g)}else{for(var b=0;b<t;b++)y=Math.max(y,f.getTextWidth(e[b].name||e[b],e[b].textStyle?c.getFont(a.merge(e[b].textStyle||{},o,{overwrite:!1})):u));y+=r,l=y;for(var b=0;b<t;b++){if(e[b]===""){g-=n,g>m?(p=m,l+=y+n):p=Math.max(p,g),l+=y+n,g=0;continue}g+=s+n}l=Math.max(l,y),g-=n,g>m?(p=m,l+=y+n):p=Math.max(p,g)}v=i.getWidth(),m=i.getHeight();var w;switch(h.x){case"center":w=Math.floor((v-l)/2);break;case"left":w=h.padding[3]+h.borderWidth;break;case"right":w=v-l-h.padding[1]-h.padding[3]-h.borderWidth*2;break;default:w=h.x-0,w=isNaN(w)?0:w}var E;switch(h.y){case"top":E=h.padding[0]+h.borderWidth;break;case"bottom":E=m-p-h.padding[0]-h.padding[2]-h.borderWidth*2;break;case"center":E=Math.floor((m-p)/2);break;default:E=h.y-0,E=isNaN(E)?0:E}return{x:w,y:E,width:l,height:p,maxWidth:y}}function N(e){var n=s.series,r;for(var i=0,o=n.length;i<o;i++){if(n[i].name==e)return{type:n[i].type,series:n[i],seriesIndex:i,data:null,dataIndex:-1};if(n[i].type==t.CHART_TYPE_PIE||n[i].type==t.CHART_TYPE_RADAR||n[i].type==t.CHART_TYPE_CHORD||n[i].type==t.CHART_TYPE_FORCE){r=n[i].type!=t.CHART_TYPE_FORCE?n[i].data:n[i].categories;for(var u=0,a=r.length;u<a;u++)if(r[u].name==e)return{type:n[i].type,series:n[i],seriesIndex:i,data:r[u],dataIndex:u}}}return{type:"bar",series:null,seriesIndex:-1,data:null,dataIndex:-1}}function C(e,n,r,i,s,o,u){var a=s==="#ccc"?u:typeof s=="string"&&s!="#ccc"?l.lift(s,-0.3):s,f={shape:"icon",zlevel:p,style:{iconType:"legendicon"+(o!=t.CHART_TYPE_CHORD?o:t.CHART_TYPE_PIE),x:e,y:n,width:r,height:i,color:s,strokeColor:s,lineWidth:2},highlightStyle:{color:a,strokeColor:a,lineWidth:1},hoverable:h.selectedMode,clickable:h.selectedMode};switch(o){case"line":f.style.brushType="stroke",f.highlightStyle.lineWidth=3;break;case"radar":case"scatter":f.highlightStyle.lineWidth=3;break;case"k":f.style.brushType="both",f.highlightStyle.lineWidth=3,f.highlightStyle.color=f.style.color=c.query(t,"k.itemStyle.normal.color")||"#fff",f.style.strokeColor=s!="#ccc"?c.query(t,"k.itemStyle.normal.lineStyle.color")||"#ff3200":s}return f}function k(e){var n=e.target._name;if(h.selectedMode==="single")for(var i in g)g[i]=!1;g[n]=!g[n],r.dispatch(t.EVENT.LEGEND_SELECTED,e.event,{selected:g,target:n})}function L(e){if(!c.query(e,"legend.data"))return;s=e,s.legend=c.reformOption(s.legend),s.legend.padding=c.reformCssArray(s.legend.padding),h=s.legend,c.clear(),g={};var n=h.data||[],r,i,u,a;for(var f=0,l=n.length;f<l;f++){r=n[f].name||n[f];if(r==="")continue;i=N(r),i.series?(!i.data||i.type!=t.CHART_TYPE_PIE&&i.type!=t.CHART_TYPE_FORCE?a=[i.series]:a=[i.data,i.series],u=c.getItemStyleColor(c.deepQuery(a,"itemStyle.normal.color"),i.seriesIndex,i.dataIndex,i.data),u&&i.type!=t.CHART_TYPE_K&&O(r,u),g[r]=!0):g[r]=!1}if(o)for(var p in o)g[p]=o[p];w()}function A(e){if(e){s=e,s.legend=c.reformOption(s.legend),s.legend.padding=c.reformCssArray(s.legend.padding);if(s.legend.selected)for(var t in s.legend.selected)g[t]=s.legend.selected[t]}h=s.legend,c.clear(),w()}function O(e,t){m[e]=t}function M(e){return m[e]||(m[e]=i.getColor(v++)),m[e]}function _(e){return m[e]?m[e]:!1}function D(e,t){h.data.push(e),O(e,t),g[e]=!0}function P(e){var t=h.data,n=[],r=!1;for(var i=0,s=t.length;i<s;i++){if(!r&&t[i]==e){r=!0;continue}n.push(t[i])}h.data=n}function H(e){if(typeof e=="undefined")return;var t;for(var n=0,r=c.shapeList.length;n<r;n++){t=c.shapeList[n];if(t._name==e&&t.shape!="text")return t}}function B(e,t){var n;for(var r=0,s=c.shapeList.length;r<s;r++)n=c.shapeList[r],n._name==e&&n.shape!="text"&&(g[e]||(t.style.color="#ccc",t.style.strokeColor="#ccc"),i.modShape(n.id,t))}function j(e){return typeof g[e]!="undefined"?g[e]:!0}function F(){return g}function I(e,t){var n=e.selected;for(var r in g)g[r]!=n[r]&&(t.needRefresh=!0),g[r]=n[r];return}var u=e("./base");u.call(this,t,i);var a=e("zrender/tool/util"),f=e("zrender/tool/area"),l=e("zrender/tool/color"),c=this;c.type=t.COMPONENT_TYPE_LEGEND;var h,p=c.getZlevelBase(),d={},v=0,m={},g={},y=e("zrender/shape").get("icon");for(var b in n)y.define("legendicon"+b,n[b]);c.init=L,c.refresh=A,c.setColor=O,c.getColor=M,c.hasColor=_,c.add=D,c.del=P,c.getItemShape=H,c.setItemShape=B,c.isSelected=j,c.getSelectedMap=F,c.onlegendSelected=I,L(s)}var n={line:function(e,t){var n=t.height/2;e.moveTo(t.x,t.y+n),e.lineTo(t.x+t.width,t.y+n)},pie:function(t,n){var r=n.x,i=n.y,s=n.width,o=n.height,u=e("zrender/shape").get("sector");u.buildPath(t,{x:r+s/2,y:i+o+2,r:o+2,r0:6,startAngle:45,endAngle:135})},chord:function(t,n){var r=n.x,i=n.y,s=n.width,o=n.height,u=e("zrender/shape").get("beziercurve");t.moveTo(r,i+o),u.buildPath(t,{xStart:r,yStart:i+o,cpX1:r+s,cpY1:i+o,cpX2:r,cpY2:i+4,xEnd:r+s,yEnd:i+4}),t.lineTo(r+s,i),u.buildPath(t,{xStart:r+s,yStart:i,cpX1:r,cpY1:i,cpX2:r+s,cpY2:i+o-4,xEnd:r,yEnd:i+o-4}),t.lineTo(r,i+o)},k:function(t,n){var r=n.x,i=n.y,s=n.width,o=n.height,u=e("zrender/shape").get("candle");u.buildPath(t,{x:r+s/2,y:[i+1,i+1,i+o-6,i+o],width:s-6})},bar:function(e,t){var n=t.x,r=t.y+1,i=t.width,s=t.height-2,o=3;e.moveTo(n+o,r),e.lineTo(n+i-o,r),e.quadraticCurveTo(n+i,r,n+i,r+o),e.lineTo(n+i,r+s-o),e.quadraticCurveTo(n+i,r+s,n+i-o,r+s),e.lineTo(n+o,r+s),e.quadraticCurveTo(n,r+s,n,r+s-o),e.lineTo(n,r+o),e.quadraticCurveTo(n,r,n+o,r)},force:function(t,n){e("zrender/shape").get("icon").get("circle")(t,n)},radar:function(e,t){var n=6,r=t.x+t.width/2,i=t.y+t.height/2,s=t.height/2,o=2*Math.PI/n,u=-Math.PI/2,a=r+s*Math.cos(u),f=i+s*Math.sin(u);e.moveTo(a,f),u+=o;for(var l=0,c=n-1;l<c;l++)e.lineTo(r+s*Math.cos(u),i+s*Math.sin(u)),u+=o;e.lineTo(a,f)}};return e("../component").define("legend",t),t}),r("echarts/util/shape/handlePolygon",["require","zrender/tool/matrix","zrender/shape","zrender/shape/base","zrender/shape"],function(e){function n(){this.type="handlePolygon"}var t=e("zrender/tool/matrix");return n.prototype={buildPath:function(t,n){e("zrender/shape").get("polygon").buildPath(t,n);return},isCover:function(e,n,r){if(e.__needTransform&&e._transform){var i=[];t.invert(i,e._transform);var s=[n,r];t.mulVector(s,i,[n,r,1]),n==s[0]&&r==s[1]&&(Math.abs(e.rotation[0])>1e-4||Math.abs(e.position[0])>1e-4||Math.abs(e.position[1])>1e-4||Math.abs(e.scale[0]-1)>1e-4||Math.abs(e.scale[1]-1)>1e-4?e.__needTransform=!0:e.__needTransform=!1),n=s[0],r=s[1]}var o=e.style.rect;return n>=o.x&&n<=o.x+o.width&&r>=o.y&&r<=o.y+o.height?!0:!1}},e("zrender/shape/base").derive(n),e("zrender/shape").define("handlePolygon",new n),n}),r("echarts/component/dataRange",["require","./base","zrender/tool/area","zrender/tool/color","zrender/tool/color","../util/shape/handlePolygon","../component"],function(e){function t(t,n,r,i){function T(){l=M(),O(),a.splitNumber<=0||a.calculable?C():N();for(var e=0,t=u.shapeList.length;e<t;e++)u.shapeList[e].id=r.newShapeId(u.type),r.addShape(u.shapeList[e]);j()}function N(){var e=S,t=e.length,n,r,i,s=u.getFont(a.textStyle),c=l.x,h=l.y,p=a.itemWidth,d=a.itemHeight,v=a.itemGap,m=o.getTextHeight("国",s),g;a.orient=="vertical"&&a.x=="right"&&(c=l.x+l.width-p);var y=!0;a.text&&(y=!1,a.text[0]&&(i=_(c,h,a.text[0]),a.orient=="horizontal"?c+=o.getTextWidth(a.text[0],s)+b:(h+=m+b,i.style.y+=m/2+b,i.style.textBaseline="bottom"),u.shapeList.push(i)));for(var E=0;E<t;E++)n=e[E],g=X((t-E)*w+a.min),r=D(c,h,p,d,x[E]?g:"#ccc"),r._idx=E,r.onclick=U,u.shapeList.push(r),y&&(i={shape:"text",zlevel:f,style:{x:c+p+5,y:h,color:x[E]?a.textStyle.color:"#ccc",text:e[E],textFont:s,textBaseline:"top"},highlightStyle:{brushType:"fill"},clickable:!0},a.orient=="vertical"&&a.x=="right"&&(i.style.x-=p+10,i.style.textAlign="right"),i._idx=E,i.onclick=U,u.shapeList.push(i)),a.orient=="horizontal"?c+=p+(y?5:0)+(y?o.getTextWidth(n,s):0)+v:h+=d+v;!y&&a.text[1]&&(a.orient=="horizontal"?c=c-v+b:h=h-v+b,i=_(c,h,a.text[1]),a.orient!="horizontal"&&(i.style.y-=5,i.style.textBaseline="top"),u.shapeList.push(i))}function C(){var t,n,r=u.getFont(a.textStyle),i=l.x,s=l.y,h=a.itemWidth,p=a.itemHeight,d=o.getTextHeight("国",r),v=!0;a.text&&(v=!1,a.text[0]&&(n=_(i,s,a.text[0]),a.orient=="horizontal"?i+=o.getTextWidth(a.text[0],r)+b:(s+=d+b,n.style.y+=d/2+b,n.style.textBaseline="bottom"),u.shapeList.push(n)));var m=e("zrender/tool/color"),g=1/(a.color.length-1),y=[];for(var w=0,E=a.color.length;w<E;w++)y.push([w*g,a.color[w]]);a.orient=="horizontal"?(t={shape:"rectangle",zlevel:f,style:{x:i,y:s,width:h*10,height:p,color:m.getLinearGradient(i,s,i+h*10,s,y)},hoverable:!1},i+=h*10+b):(t={shape:"rectangle",zlevel:f,style:{x:i,y:s,width:h,height:p*10,color:m.getLinearGradient(i,s,i,s+p*10,y)},hoverable:!1},s+=p*10+b),u.shapeList.push(t),a.calculable&&(c=t.style,k(),A(),L()),!v&&a.text[1]&&(n=_(i,s,a.text[1]),u.shapeList.push(n))}function k(){m={shape:"rectangle",zlevel:f+1,style:{x:c.x,y:c.y,width:c.width,height:c.height,color:"rgba(255,255,255,0)"},highlightStyle:{strokeColor:"rgba(255,255,255,0.5)",lineWidth:1},draggable:!0,ondrift:P,ondragend:H,_type:"filler"},u.shapeList.push(m)}function L(){var e=c.x,t=c.y,n=c.width,r=c.height,i=u.getFont(a.textStyle),s=o.getTextHeight("国",i),l=Math.max(o.getTextWidth(a.max.toFixed(a.precision),i),o.getTextWidth(a.min.toFixed(a.precision),i))+2,p,v,m,g,y,b,w,E;a.orient=="horizontal"?a.y!="bottom"?(p=[[e,t],[e,t+r+s],[e-s,t+r+s],[e-1,t+r],[e-1,t]],v=e-l/2-s,m=t+r+s/2+2,g={x:e-l-s,y:t+r,width:l+s,height:s},y=[[e+n,t],[e+n,t+r+s],[e+n+s,t+r+s],[e+n+1,t+r],[e+n+1,t]],b=e+n+l/2+s,w=m,E={x:e+n,y:t+r,width:l+s,height:s}):(p=[[e,t+r],[e,t-s],[e-s,t-s],[e-1,t],[e-1,t+r]],v=e-l/2-s,m=t-s/2-2,g={x:e-l-s,y:t-s,width:l+s,height:s},y=[[e+n,t+r],[e+n,t-s],[e+n+s,t-s],[e+n+1,t],[e+n+1,t+r]],b=e+n+l/2+s,w=m,E={x:e+n,y:t-s,width:l+s,height:s}):(l+=s,a.x!="right"?(p=[[e,t],[e+n+s,t],[e+n+s,t-s],[e+n,t-1],[e,t-1]],v=e+n+l/2+s/2,m=t-s/2,g={x:e+n,y:t-s,width:l+s,height:s},y=[[e,t+r],[e+n+s,t+r],[e+n+s,t+s+r],[e+n,t+1+r],[e,t+r+1]],b=v,w=t+r+s/2,E={x:e+n,y:t+r,width:l+s,height:s}):(p=[[e+n,t],[e-s,t],[e-s,t-s],[e,t-1],[e+n,t-1]],v=e-l/2-s/2,m=t-s/2,g={x:e-l-s,y:t-s,width:l+s,height:s},y=[[e+n,t+r],[e-s,t+r],[e-s,t+s+r],[e,t+1+r],[e+n,t+r+1]],b=v,w=t+r+s/2,E={x:e-l-s,y:t+r,width:l+s,height:s})),h={shape:"handlePolygon",style:{pointList:p,text:a.max.toFixed(a.precision),textX:v,textY:m,color:X(a.max),rect:g,x:p[0][0],y:p[0][1],_x:p[0][0],_y:p[0][1]}},h.highlightStyle={strokeColor:h.style.color,lineWidth:1},d={shape:"handlePolygon",style:{pointList:y,text:a.min.toFixed(a.precision),textX:b,textY:w,color:X(a.min),rect:E,x:y[0][0],y:y[0][1],_x:y[0][0],_y:y[0][1]}},d.highlightStyle={strokeColor:d.style.color,lineWidth:1},h.zlevel=d.zlevel=f+1,h.draggable=d.draggable=!0,h.ondrift=d.ondrift=P,h.ondragend=d.ondragend=H,h.style.textColor=d.style.textColor=a.textStyle.color,h.style.textAlign=d.style.textAlign="center",h.style.textPosition=d.style.textPosition="specific",h.style.textBaseline=d.style.textBaseline="middle",h.style.width=d.style.width=0,h.style.height=d.style.height=0,h.style.textPosition=d.style.textPosition="specific",u.shapeList.push(h),u.shapeList.push(d)}function A(){var e=c.x,t=c.y,n=c.width,r=c.height;p={shape:"rectangle",zlevel:f+1,style:{x:e,y:t,width:a.orient=="horizontal"?0:n,height:a.orient=="horizontal"?r:0,color:"#ccc"},hoverable:!1},v={shape:"rectangle",zlevel:f+1,style:{x:a.orient=="horizontal"?e+n:e,y:a.orient=="horizontal"?t:t+r,width:a.orient=="horizontal"?0:n,height:a.orient=="horizontal"?r:0,color:"#ccc"},hoverable:!1},u.shapeList.push(p),u.shapeList.push(v)}function O(){var e=a.padding[0],t=a.padding[1],n=a.padding[2],r=a.padding[3];u.shapeList.push({shape:"rectangle",zlevel:f,hoverable:!1,style:{x:l.x-r,y:l.y-e,width:l.width+r+t,height:l.height+e+n,brushType:a.borderWidth===0?"fill":"both",color:a.backgroundColor,strokeColor:a.borderColor,lineWidth:a.borderWidth}})}function M(){var e=S,t=e.length,n=a.itemGap,i=a.itemWidth,s=a.itemHeight,f=0,l=0,c=u.getFont(a.textStyle),h=o.getTextHeight("国",c);if(a.orient=="horizontal"){if(a.text||a.splitNumber<=0||a.calculable)f=(a.splitNumber<=0||a.calculable?i*10+n:t*(i+n))+(a.text&&typeof a.text[0]!="undefined"?o.getTextWidth(a.text[0],c)+b:0)+(a.text&&typeof a.text[1]!="undefined"?o.getTextWidth(a.text[1],c)+b:0);else{i+=5;for(var p=0;p<t;p++)f+=i+o.getTextWidth(e[p],c)+n}f-=n,l=Math.max(h,s)}else{var d;if(a.text||a.splitNumber<=0||a.calculable)l=(a.splitNumber<=0||a.calculable?s*10+n:t*(s+n))+(a.text&&typeof a.text[0]!="undefined"?b+h:0)+(a.text&&typeof a.text[1]!="undefined"?b+h:0),d=Math.max(o.getTextWidth(a.text&&a.text[0]||"",c),o.getTextWidth(a.text&&a.text[1]||"",c)),f=Math.max(i,d);else{l=(s+n)*t,i+=5,d=0;for(var p=0;p<t;p++)d=Math.max(d,o.getTextWidth(e[p],c));f=i+d}l-=n}var v,m=r.getWidth();switch(a.x){case"center":v=Math.floor((m-f)/2);break;case"left":v=a.padding[3]+a.borderWidth;break;case"right":v=m-f-a.padding[1]-a.borderWidth;break;default:v=u.parsePercent(a.x,m),v=isNaN(v)?0:v}var g,y=r.getHeight();switch(a.y){case"top":g=a.padding[0]+a.borderWidth;break;case"bottom":g=y-l-a.padding[2]-a.borderWidth;break;case"center":g=Math.floor((y-l)/2);break;default:g=u.parsePercent(a.y,y),g=isNaN(g)?0:g}if(a.calculable){var w=Math.max(o.getTextWidth(a.max,c),o.getTextWidth(a.min,c))+h;a.orient=="horizontal"?(v<w&&(v=w),v+f+w>m&&(v-=w)):(g<h&&(g=h),g+l+h>y&&(g-=h))}return{x:v,y:g,width:f,height:l}}function _(e,t,n){return{shape:"text",zlevel:f,style:{x:a.orient=="horizontal"?e:l.x+l.width/2,y:a.orient=="horizontal"?l.y+l.height/2:t,color:a.textStyle.color,text:n,textFont:u.getFont(a.textStyle),textBaseline:a.orient=="horizontal"?"middle":"top",textAlign:a.orient=="horizontal"?"left":"center"},hoverable:!1}}function D(e,t,n,r,i){return{shape:"rectangle",zlevel:f,style:{x:e,y:t+1,width:n,height:r-2,color:i},highlightStyle:{strokeColor:i,lineWidth:1},clickable:!0}}function P(e,t,n){var r=c.x,i=c.y,s=c.width,o=c.height;return a.orient=="horizontal"?e.style.x+t<=r?e.style.x=r:e.style.x+t+e.style.width>=r+s?e.style.x=r+s-e.style.width:e.style.x+=t:e.style.y+n<=i?e.style.y=i:e.style.y+n+e.style.height>=i+o?e.style.y=i+o-e.style.height:e.style.y+=n,e._type=="filler"?F():I(e),a.realtime?R():(clearTimeout(y),y=setTimeout(R,200)),!0}function H(){u.isDragend=!0}function B(e,r){if(!u.isDragend||!e.target)return;R(),r.dragOut=!0,r.dragIn=!0,a.realtime||n.dispatch(t.EVENT.DATA_RANGE,null,{range:{start:g.end,end:g.start}}),r.needRefresh=!1,u.isDragend=!1;return}function j(){if(a.range){typeof a.range.start!="undefined"&&(g.end=a.range.start),typeof a.range.end!="undefined"&&(g.start=a.range.end);if(g.start!=100||g.end!==0){if(a.orient=="horizontal"){var e=m.style.width;m.style.x+=e*(100-g.start)/100,m.style.width=e*(g.start-g.end)/100}else{var t=m.style.height;m.style.y+=t*(100-g.start)/100,m.style.height=t*(g.start-g.end)/100}r.modShape(m.id,m),F()}}}function F(){var e=c.x,t=c.y,n=c.width,r=c.height;a.orient=="horizontal"?(h.style.x=m.style.x,p.style.width=h.style.x-e,d.style.x=m.style.x+m.style.width,v.style.x=d.style.x,v.style.width=e+n-d.style.x,g.start=Math.ceil(100-(h.style.x-e)/n*100),g.end=Math.floor(100-(d.style.x-e)/n*100)):(h.style.y=m.style.y,p.style.height=h.style.y-t,d.style.y=m.style.y+m.style.height,v.style.y=d.style.y,v.style.height=t+r-d.style.y,g.start=Math.ceil(100-(h.style.y-t)/r*100),g.end=Math.floor(100-(d.style.y-t)/r*100)),q(!1)}function I(e){var t=c.x,n=c.y,r=c.width,i=c.height,s,o;a.orient=="horizontal"?(s=h.style.x,o=d.style.x,e.id==h.id&&s>=o?(o=s,d.style.x=s):e.id==d.id&&s>=o&&(s=o,h.style.x=s),m.style.x=s,m.style.width=o-s,p.style.width=s-t,v.style.x=o,v.style.width=t+r-o,g.start=Math.ceil(100-(s-t)/r*100),g.end=Math.floor(100-(o-t)/r*100)):(s=h.style.y,o=d.style.y,e.id==h.id&&s>=o?(o=s,d.style.y=s):e.id==d.id&&s>=o&&(s=o,h.style.y=s),m.style.y=s,m.style.height=o-s,p.style.height=s-n,v.style.y=o,v.style.height=n+i-o,g.start=Math.ceil(100-(s-n)/i*100),g.end=Math.floor(100-(o-n)/i*100)),q(!0)}function q(e){h.position=[h.style.x-h.style._x,h.style.y-h.style._y],a.precision===0?h.style.text=Math.round(w*g.start+a.min)+"":h.style.text=(w*g.start+a.min).toFixed(a.precision),h.style.color=h.highlightStyle.strokeColor=X(w*g.start+a.min),r.modShape(h.id,h),d.position=[d.style.x-d.style._x,d.style.y-d.style._y],a.precision===0?d.style.text=Math.round(w*g.end+a.min)+"":d.style.text=(w*g.end+a.min).toFixed(a.precision),d.style.color=d.highlightStyle.strokeColor=X(w*g.end+a.min),r.modShape(d.id,d),r.modShape(p.id,p),r.modShape(v.id,v),e&&r.modShape(m.id,m),r.refresh()}function R(){a.realtime&&n.dispatch(t.EVENT.DATA_RANGE,null,{range:{start:g.end,end:g.start}})}function U(e){var r=e.target._idx;x[r]=!x[r],n.dispatch(t.EVENT.REFRESH)}function z(t){if(typeof u.query(t,"dataRange.min")=="undefined"||typeof u.query(t,"dataRange.max")=="undefined")return;i=t,i.dataRange=u.reformOption(i.dataRange),i.dataRange.padding=u.reformCssArray(i.dataRange.padding),a=i.dataRange,u.clear(),x={};var n=e("zrender/tool/color"),r=a.splitNumber<=0||a.calculable?100:a.splitNumber;E=n.getGradientColors(a.color,Math.max((r-a.color.length)/(a.color.length-1),0)+1);if(E.length>r){var s=E.length,o=[E[0]],f=s/(r-1);for(var l=1;l<r-1;l++)o.push(E[Math.floor(l*f)]);o.push(E[s-1]),E=o}a.precision===0?w=Math.round((a.max-a.min)/r)||1:(w=(a.max-a.min)/r,w=w.toFixed(a.precision)-0),S=[];for(var l=0;l<r;l++)x[l]=!0,S.unshift((l*w+a.min).toFixed(a.precision)+" - "+((l+1)*w+a.min).toFixed(a.precision));g={start:100,end:0},T()}function W(e){e&&(i=e,i.dataRange=u.reformOption(i.dataRange),i.dataRange.padding=u.reformCssArray(i.dataRange.padding)),a=i.dataRange,a.range={start:g.end,end:g.start},u.clear(),T()}function X(e){if(isNaN(e))return null;e<a.min?e=a.min:e>a.max&&(e=a.max);if(a.calculable)if(e>w*g.start+a.min||e<w*g.end+a.min)return null;var t=E.length-Math.ceil((e-a.min)/(a.max-a.min)*E.length);return t==E.length&&t--,x[t]?E[t]:null}var s=e("./base");s.call(this,t,r);var o=e("zrender/tool/area"),u=this;u.type=t.COMPONENT_TYPE_DATARANGE;var a,f=u.getZlevelBase(),l={},c,h,p,d,v,m,g,y,b=10,w,E,S,x={};u.init=z,u.refresh=W,u.getColor=X,u.ondragend=B,z(i)}return e("../util/shape/handlePolygon"),e("../component").define("dataRange",t),t}),r("echarts/component/tooltip",["require","./base","../util/ecData","zrender/config","zrender/shape","zrender/tool/event","zrender/tool/area","zrender/tool/color","zrender/tool/util","zrender/shape/base","../component"],function(e){function t(t,n,r,i,s,o){function U(e){if(!e)return"";var t=[];if(e.transitionDuration){var n="left "+e.transitionDuration+"s,"+"top "+e.transitionDuration+"s";t.push("transition:"+n),t.push("-moz-transition:"+n),t.push("-webkit-transition:"+n),t.push("-o-transition:"+n)}e.backgroundColor&&(t.push("background-Color:"+p.toHex(e.backgroundColor)),t.push("filter:alpha(opacity=70)"),t.push("background-Color:"+e.backgroundColor)),typeof e.borderWidth!="undefined"&&t.push("border-width:"+e.borderWidth+"px"),typeof e.borderColor!="undefined"&&t.push("border-color:"+e.borderColor),typeof e.borderRadius!="undefined"&&(t.push("border-radius:"+e.borderRadius+"px"),t.push("-moz-border-radius:"+e.borderRadius+"px"),t.push("-webkit-border-radius:"+e.borderRadius+"px"),t.push("-o-border-radius:"+e.borderRadius+"px"));var r=e.textStyle;r&&(r.color&&t.push("color:"+r.color),r.decoration&&t.push("text-decoration:"+r.decoration),r.align&&t.push("text-align:"+r.align),r.fontFamily&&t.push("font-family:"+r.fontFamily),r.fontSize&&t.push("font-size:"+r.fontSize+"px"),r.fontSize&&t.push("line-height:"+Math.round(r.fontSize*3/2)+"px"),r.fontStyle&&t.push("font-style:"+r.fontStyle),r.fontWeight&&t.push("font-weight:"+r.fontWeight));var i=e.padding;return typeof i!="undefined"&&(i=g.reformCssArray(i),t.push("padding:"+i[0]+"px "+i[1]+"px "+i[2]+"px "+i[3]+"px")),t=t.join(";")+";",t}function z(){N&&(N.style.display="none");var e=!1;q.invisible||(q.invisible=!0,r.modShape(q.id,q),e=!0),R.invisible||(R.invisible=!0,r.modShape(R.id,R),e=!0),F&&F.tipShape.length>0&&(r.delShape(F.tipShape),F=!1),e&&r.refresh()}function W(e,t,n){var r=N.offsetHeight,i=N.offsetWidth;e+i>j&&(e-=i+40),t+r>B&&(t-=r-20),t<20&&(t=0),N.style.cssText=C+k+(n?n:"")+"left:"+e+"px;top:"+t+"px;",(r<10||i<10)&&setTimeout(X,20)}function X(){if(N){var e="",t=N.offsetHeight,n=N.offsetWidth;N.offsetLeft+n>j&&(e+="left:"+(j-n-20)+"px;"),N.offsetTop+t>B&&(e+="top:"+(B-t-10)+"px;"),e!==""&&(N.style.cssText+=e)}}function V(){var e,t;if(!D)J()||$();else{if(D._type=="island"&&i.tooltip.show){Y();return}var n=a.get(D,"series"),r=a.get(D,"data");e=g.deepQuery([r,n,i],"tooltip.show"),typeof n=="undefined"||typeof r=="undefined"||e===!1?(clearTimeout(A),clearTimeout(M),A=setTimeout(z,O)):(t=g.deepQuery([r,n,i],"tooltip.trigger"),t=="axis"?Q(n.xAxisIndex,n.yAxisIndex,a.get(D,"dataIndex")):Y())}}function $(){if(!E||!S){A=setTimeout(z,O);return}var e=i.series,n,r;for(var s=0,o=e.length;s<o;s++)if(g.deepQuery([e[s],i],"tooltip.trigger")=="axis"){n=e[s].xAxisIndex||0,r=e[s].yAxisIndex||0;if(E.getAxis(n)&&E.getAxis(n).type==t.COMPONENT_TYPE_AXIS_CATEGORY){Q(n,r,K("x",E.getAxis(n)));return}if(S.getAxis(r)&&S.getAxis(r).type==t.COMPONENT_TYPE_AXIS_CATEGORY){Q(n,r,K("y",S.getAxis(r)));return}}}function J(){if(!x)return!1;var e=c.getX(P),t=c.getY(P),n=x.getNearestIndex([e,t]),r;return n?(r=n.valueIndex,n=n.polarIndex):n=-1,n!=-1?G(n,r):!1}function K(e,t){var n=-1,r=c.getX(P),i=c.getY(P);if(e=="x"){var s,o,u=w.getXend(),a=t.getCoordByIndex(n);while(a<u){a<=r&&(s=a);if(a>=r)break;a=t.getCoordByIndex(++n),o=a}return r-s<o-r?n-=n!==0?1:0:typeof t.getNameByIndex(n)=="undefined"&&(n-=1),n}var f,l,h=w.getY(),a=t.getCoordByIndex(n);while(a>h){a>=i&&(l=a);if(a<=i)break;a=t.getCoordByIndex(++n),f=a}return i-f>l-i?n-=n!==0?1:0:typeof t.getNameByIndex(n)=="undefined"&&(n-=1),n}function Q(e,r,o){!P.connectTrigger&&n.dispatch(t.EVENT.TOOLTIP_IN_GRID,P);if(typeof E=="undefined"||typeof S=="undefined"||typeof e=="undefined"||typeof r=="undefined"||o<0){clearTimeout(A),clearTimeout(M),A=setTimeout(z,O);return}var u=i.series,a=[],f=[],l,h,p,d,v,m="";if(i.tooltip.trigger=="axis"){if(i.tooltip.show===!1)return;d=i.tooltip.formatter}if(e!=-1&&E.getAxis(e).type==t.COMPONENT_TYPE_AXIS_CATEGORY){l=E.getAxis(e);for(var y=0,x=u.length;y<x;y++){if(!at(u[y].name))continue;u[y].xAxisIndex==e&&g.deepQuery([u[y],i],"tooltip.trigger")=="axis"&&(v=g.query(u[y],"tooltip.showContent")||v,d=g.query(u[y],"tooltip.formatter")||d,m+=U(g.query(u[y],"tooltip")),a.push(u[y]),f.push(y))}n.dispatch(t.EVENT.TOOLTIP_HOVER,P,{seriesIndex:f,dataIndex:b.dataZoom?b.dataZoom.getRealDataIndex(f,o):o}),p=c.getY(P)+10,h=g.subPixelOptimize(l.getCoordByIndex(o),I),Z(a,h,w.getY(),h,w.getYend(),l.getGap()),h+=10}else if(r!=-1&&S.getAxis(r).type==t.COMPONENT_TYPE_AXIS_CATEGORY){l=S.getAxis(r);for(var y=0,x=u.length;y<x;y++){if(!at(u[y].name))continue;u[y].yAxisIndex==r&&g.deepQuery([u[y],i],"tooltip.trigger")=="axis"&&(v=g.query(u[y],"tooltip.showContent")||v,d=g.query(u[y],"tooltip.formatter")||d,m+=U(g.query(u[y],"tooltip")),a.push(u[y]),f.push(y))}n.dispatch(t.EVENT.TOOLTIP_HOVER,P,{seriesIndex:f,dataIndex:b.dataZoom?b.dataZoom.getRealDataIndex(f,o):o}),h=c.getX(P)+10,p=g.subPixelOptimize(l.getCoordByIndex(o),I),Z(a,w.getX(),p,w.getXend(),p,l.getGap()),p+=10}if(a.length>0){var T;if(typeof d=="function"){var C=[];for(var y=0,x=a.length;y<x;y++)T=a[y].data[o],T=typeof T!="undefined"?typeof T.value!="undefined"?T.value:T:"-",C.push([a[y].name||"",l.getNameByIndex(o),T]);H="axis:"+o,N.innerHTML=d(C,H,nt)}else if(typeof d=="string"){H=NaN,d=d.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}");for(var y=0,x=a.length;y<x;y++)d=d.replace("{a"+y+"}",vt(a[y].name||"")),d=d.replace("{b"+y+"}",vt(l.getNameByIndex(o))),T=a[y].data[o],T=typeof T!="undefined"?typeof T.value!="undefined"?T.value:T:"-",d=d.replace("{c"+y+"}",T instanceof Array?T:g.numAddCommas(T));N.innerHTML=d}else{H=NaN,d=vt(l.getNameByIndex(o));for(var y=0,x=a.length;y<x;y++)d+="<br/>"+vt(a[y].name||"")+" : ",T=a[y].data[o],T=typeof T!="undefined"?typeof T.value!="undefined"?T.value:T:"-",d+=T instanceof Array?T:g.numAddCommas(T);N.innerHTML=d}if(v===!1||!i.tooltip.showContent)return;g.hasAppend||(N.style.left=j/2+"px",N.style.top=B/2+"px",s.firstChild.appendChild(N),g.hasAppend=!0),W(h,p,m)}}function G(e,t){if(typeof x=="undefined"||typeof e=="undefined"||typeof t=="undefined"||t<0)return!1;var n=i.series,r=[],o,u,a="";if(i.tooltip.trigger=="axis"){if(i.tooltip.show===!1)return!1;o=i.tooltip.formatter}var f=i.polar[e].indicator[t].text;for(var l=0,h=n.length;l<h;l++){if(!at(n[l].name))continue;n[l].polarIndex==e&&g.deepQuery([n[l],i],"tooltip.trigger")=="axis"&&(u=g.query(n[l],"tooltip.showContent")||u,o=g.query(n[l],"tooltip.formatter")||o,a+=U(g.query(n[l],"tooltip")),r.push(n[l]))}if(r.length>0){var p,d,v=[];for(var l=0,h=r.length;l<h;l++){p=r[l].data;for(var m=0,y=p.length;m<y;m++){d=p[m];if(!at(d.name))continue;d=typeof d!="undefined"?d:{name:"",value:{dataIndex:"-"}},v.push([r[l].name||"",d.name,d.value[t],f])}}if(v.length<=0)return;if(typeof o=="function")H="axis:"+t,N.innerHTML=o(v,H,nt);else if(typeof o=="string"){o=o.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{d}","{d0}");for(var l=0,h=v.length;l<h;l++)o=o.replace("{a"+l+"}",vt(v[l][0])),o=o.replace("{b"+l+"}",vt(v[l][1])),o=o.replace("{c"+l+"}",g.numAddCommas(v[l][2])),o=o.replace("{d"+l+"}",vt(v[l][3]));N.innerHTML=o}else{o=vt(v[0][1])+"<br/>"+vt(v[0][3])+" : "+g.numAddCommas(v[0][2]);for(var l=1,h=v.length;l<h;l++)o+="<br/>"+vt(v[l][1])+"<br/>",o+=vt(v[l][3])+" : "+g.numAddCommas(v[l][2]);N.innerHTML=o}if(u===!1||!i.tooltip.showContent)return;return g.hasAppend||(N.style.left=j/2+"px",N.style.top=B/2+"px",s.firstChild.appendChild(N),g.hasAppend=!0),W(c.getX(P),c.getY(P),a),!0}}function Y(){var e=a.get(D,"series"),n=a.get(D,"data"),o=a.get(D,"name"),u=a.get(D,"value"),f=a.get(D,"special"),l=a.get(D,"special2"),h,p,d="",v,m="";D._type!="island"?(i.tooltip.trigger=="item"&&(h=i.tooltip.formatter),g.query(e,"tooltip.trigger")=="item"&&(p=g.query(e,"tooltip.showContent")||p,h=g.query(e,"tooltip.formatter")||h,d+=U(g.query(e,"tooltip"))),p=g.query(n,"tooltip.showContent")||p,h=g.query(n,"tooltip.formatter")||h,d+=U(g.query(n,"tooltip"))):(p=g.deepQuery([n,e,i],"tooltip.showContent"),h=g.deepQuery([n,e,i],"tooltip.islandFormatter"));if(typeof h=="function")H=(e.name||"")+":"+a.get(D,"dataIndex"),N.innerHTML=h([e.name||"",o,u,f,l],H,nt);else if(typeof h=="string")H=NaN,h=h.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}"),h=h.replace("{a0}",vt(e.name||"")).replace("{b0}",vt(o)).replace("{c0}",u instanceof Array?u:g.numAddCommas(u)),h=h.replace("{d}","{d0}").replace("{d0}",f||""),h=h.replace("{e}","{e0}").replace("{e0}",a.get(D,"special2")||""),N.innerHTML=h;else{H=NaN;if(e.type==t.CHART_TYPE_SCATTER)N.innerHTML=(typeof e.name!="undefined"?vt(e.name)+"<br/>":"")+(o===""?"":vt(o)+" : ")+u+(typeof f=="undefined"?"":" ("+f+")");else if(e.type==t.CHART_TYPE_RADAR&&f){v=f,m+=vt(o===""?e.name||"":o),m+=m===""?"":"<br />";for(var y=0;y<v.length;y++)m+=vt(v[y].text)+" : "+g.numAddCommas(u[y])+"<br />";N.innerHTML=m}else if(e.type==t.CHART_TYPE_CHORD)if(typeof l=="undefined")N.innerHTML=vt(o)+" ("+g.numAddCommas(u)+")";else{var b=vt(o),w=vt(f);N.innerHTML=(typeof e.name!="undefined"?vt(e.name)+"<br/>":"")+b+" -> "+w+" ("+g.numAddCommas(u)+")"+"<br />"+w+" -> "+b+" ("+g.numAddCommas(l)+")"}else N.innerHTML=(typeof e.name!="undefined"?vt(e.name)+"<br/>":"")+vt(o)+" : "+g.numAddCommas(u)+(typeof f=="undefined"?"":" ("+g.numAddCommas(f)+")")}q.invisible||(q.invisible=!0,r.modShape(q.id,q),r.refresh());if(p===!1||!i.tooltip.showContent)return;g.hasAppend||(N.style.left=j/2+"px",N.style.top=B/2+"px",s.firstChild.appendChild(N),g.hasAppend=!0),W(c.getX(P)+20,c.getY(P)-20,d)}function Z(e,t,n,s,o,u){if(e.length>0){var a,f,l=i.tooltip.axisPointer,c=l.type,h=l.lineStyle.color,p=l.lineStyle.width,d=l.lineStyle.type,v=l.areaStyle.size,m=l.areaStyle.color;for(var y=0,b=e.length;y<b;y++)g.deepQuery([e[y],i],"tooltip.trigger")=="axis"&&(a=e[y],f=g.query(a,"tooltip.axisPointer.type"),c=f||c,f=="line"?(h=g.query(a,"tooltip.axisPointer.lineStyle.color")||h,p=g.query(a,"tooltip.axisPointer.lineStyle.width")||p,d=g.query(a,"tooltip.axisPointer.lineStyle.type")||d):f=="shadow"&&(v=g.query(a,"tooltip.axisPointer.areaStyle.size")||v,m=g.query(a,"tooltip.axisPointer.areaStyle.color")||m));c=="line"?(q.style={xStart:t,yStart:n,xEnd:s,yEnd:o,strokeColor:h,lineWidth:p,lineType:d},q.invisible=!1,r.modShape(q.id,q)):c=="shadow"&&(typeof v=="undefined"||v=="auto"||isNaN(v)?p=u:p=v,t==s?Math.abs(w.getX()-t)<2?(p/=2,t=s+=p/2):Math.abs(w.getXend()-t)<2&&(p/=2,t=s-=p/2):n==o&&(Math.abs(w.getY()-n)<2?(p/=2,n=o+=p/2):Math.abs(w.getYend()-n)<2&&(p/=2,n=o-=p/2)),R.style={xStart:t,yStart:n,xEnd:s,yEnd:o,strokeColor:m,lineWidth:p},R.invisible=!1,r.modShape(R.id,R)),r.refresh()}}function et(e){clearTimeout(A),clearTimeout(M);var r=e.target,s=c.getX(e.event),o=c.getY(e.event);if(!r)D=!1,P=e.event,P._target=P.target||P.toElement,P.zrenderX=s,P.zrenderY=o,L&&w&&h.isInside(m,w.getArea(),s,o)?M=setTimeout(V,_):L&&x&&x.isInside([s,o])!=-1?M=setTimeout(V,_):(!P.connectTrigger&&n.dispatch(t.EVENT.TOOLTIP_OUT_GRID,P),A=setTimeout(z,O));else{D=r,P=e.event,P._target=P.target||P.toElement,P.zrenderX=s,P.zrenderY=o;var u;if(L&&x&&(u=x.isInside([s,o]))!=-1){var a=i.series;for(var f=0,l=a.length;f<l;f++)if(a[f].polarIndex==u&&g.deepQuery([a[f],i],"tooltip.trigger")=="axis"){D=null;break}}M=setTimeout(V,_)}}function tt(){clearTimeout(A),clearTimeout(M),A=setTimeout(z,O)}function nt(e,t){if(!N)return;e==H&&(N.innerHTML=t),setTimeout(X,20)}function rt(){b=o.component,w=b.grid,E=b.xAxis,S=b.yAxis,x=b.polar}function it(e,t){if(!F||F&&F.dataIndex!=e.dataIndex){F&&F.tipShape.length>0&&r.delShape(F.tipShape);for(var n=0,i=t.length;n<i;n++)t[n].id=r.newShapeId("tooltip"),t[n].zlevel=y,t[n].style=v.getHighlightStyle(t[n].style,t[n].highlightStyle),t[n].draggable=!1,t[n].hoverable=!1,t[n].clickable=!1,t[n].ondragend=null,t[n].ondragover=null,t[n].ondrop=null,r.addShape(t[n]);F={dataIndex:e.dataIndex,tipShape:t}}}function st(){z()}function ot(e){T=e.selected}function ut(){i.legend&&i.legend.selected?T=i.legend.selected:T={}}function at(e){return typeof T[e]!="undefined"?T[e]:!0}function ft(e){if(!e)return;var n,s=i.series;if(typeof e.seriesIndex!="undefined")n=e.seriesIndex;else{var u=e.seriesName;for(var l=0,c=s.length;l<c;l++)if(s[l].name==u){n=l;break}}var h=s[n];if(typeof h=="undefined")return;var p=o.chart[h.type],d=g.deepQuery([h,i],"tooltip.trigger")=="axis";if(!p)return;if(d){var v=e.dataIndex;switch(p.type){case t.CHART_TYPE_LINE:case t.CHART_TYPE_BAR:case t.CHART_TYPE_K:if(typeof E=="undefined"||typeof S=="undefined"||h.data.length<=v)return;var m=h.xAxisIndex||0,y=h.yAxisIndex||0;E.getAxis(m).type==t.COMPONENT_TYPE_AXIS_CATEGORY?P={zrenderX:E.getAxis(m).getCoordByIndex(v),zrenderY:w.getY()+(w.getYend()-w.getY())/4}:P={zrenderX:w.getX()+(w.getXend()-w.getX())/4,zrenderY:S.getAxis(y).getCoordByIndex(v)},Q(m,y,v);break;case t.CHART_TYPE_RADAR:if(typeof x=="undefined"||h.data[0].value.length<=v)return;var b=h.polarIndex||0,T=x.getVector(b,v,"max");P={zrenderX:T[0],zrenderY:T[1]},G(b,v)}}else{var N=p.shapeList,C,k;switch(p.type){case t.CHART_TYPE_LINE:case t.CHART_TYPE_BAR:case t.CHART_TYPE_K:case t.CHART_TYPE_SCATTER:var v=e.dataIndex;for(var l=0,c=N.length;l<c;l++)if(a.get(N[l],"seriesIndex")==n&&a.get(N[l],"dataIndex")==v){D=N[l],C=N[l].style.x,k=p.type!=t.CHART_TYPE_K?N[l].style.y:N[l].style.y[0];break}break;case t.CHART_TYPE_RADAR:var v=e.dataIndex;for(var l=0,c=N.length;l<c;l++)if(N[l].shape=="polygon"&&a.get(N[l],"seriesIndex")==n&&a.get(N[l],"dataIndex")==v){D=N[l];var T=x.getCenter(h.polarIndex||0);C=T[0],k=T[1];break}break;case t.CHART_TYPE_PIE:var L=e.name;for(var l=0,c=N.length;l<c;l++)if(N[l].shape=="sector"&&a.get(N[l],"seriesIndex")==n&&a.get(N[l],"name")==L){D=N[l];var A=D.style,O=(A.startAngle+A.endAngle)/2*Math.PI/180;C=D.style.x+Math.cos(O)*A.r/1.5,k=D.style.y-Math.sin(O)*A.r/1.5;break}break;case t.CHART_TYPE_MAP:var L=e.name,M=h.mapType;for(var l=0,c=N.length;l<c;l++)if(N[l].shape=="text"&&N[l]._mapType==M&&N[l].style._text==L){D=N[l],C=D.style.x+D.position[0],k=D.style.y+D.position[1];break}break;case t.CHART_TYPE_CHORD:var L=e.name;for(var l=0,c=N.length;l<c;l++)if(N[l].shape=="sector"&&a.get(N[l],"name")==L){D=N[l];var A=D.style,O=(A.startAngle+A.endAngle)/2*Math.PI/180;C=D.style.x+Math.cos(O)*(A.r-2),k=D.style.y-Math.sin(O)*(A.r-2),r.trigger(f.EVENT.MOUSEMOVE,{zrenderX:C,zrenderY:k});return}break;case t.CHART_TYPE_FORCE:var L=e.name;for(var l=0,c=N.length;l<c;l++)if(N[l].shape=="circle"&&a.get(N[l],"name")==L){D=N[l],C=D.position[0],k=D.position[1];break}}typeof C!="undefined"&&typeof k!="undefined"&&(P={zrenderX:C,zrenderY:k},r.addHoverShape(D),r.refreshHover(),Y())}}function lt(){z()}function ct(e,n){i=e,s=n,i.tooltip=g.reformOption(i.tooltip),i.tooltip.textStyle=d.merge(i.tooltip.textStyle,t.textStyle,{overwrite:!1,recursive:!0}),i.tooltip.padding=g.reformCssArray(i.tooltip.padding),L=!1,i.tooltip.trigger=="axis"&&(L=!0);var r=i.series;for(var o=0,u=r.length;o<u;o++)if(g.query(r[o],"tooltip.trigger")=="axis"){L=!0;break}_=i.tooltip.showDelay,O=i.tooltip.hideDelay,k=U(i.tooltip),N.style.position="absolute",g.hasAppend=!1,ut(),I=i.tooltip.axisPointer.lineStyle.width}function ht(e){e&&(i=e,i.tooltip=g.reformOption(i.tooltip),i.tooltip.textStyle=d.merge(i.tooltip.textStyle,t.textStyle,{overwrite:!1,recursive:!0}),i.tooltip.padding=g.reformCssArray(i.tooltip.padding),ut(),I=i.tooltip.axisPointer.lineStyle.width)}function pt(){B=r.getHeight(),j=r.getWidth()}function dt(){clearTimeout(A),clearTimeout(M),r.un(f.EVENT.MOUSEMOVE,et),r.un(f.EVENT.GLOBALOUT,tt),g.hasAppend&&s.firstChild.removeChild(N),N=null,g.shapeList=null,g=null}function vt(e){return String(e).replace(/&/g,"&amp;").replace(/</g,"&lt;").replace(/>/g,"&gt;").replace(/"/g,"&quot;").replace(/'/g,"&#39;")}var u=e("./base");u.call(this,t,r);var a=e("../util/ecData"),f=e("zrender/config"),l=e("zrender/shape"),c=e("zrender/tool/event"),h=e("zrender/tool/area"),p=e("zrender/tool/color"),d=e("zrender/tool/util"),v=e("zrender/shape/base"),m=l.get("rectangle"),g=this;g.type=t.COMPONENT_TYPE_TOOLTIP;var y=g.getZlevelBase(),b={},w,E,S,x,T={},N=document.createElement("div"),C="position:absolute;display:block;border-style:solid;white-space:nowrap;",k,L,A,O,M,_,D,P,H,B=r.getHeight(),j=r.getWidth(),F=!1,I=0,q={shape:"line",id:r.newShapeId("tooltip"),zlevel:y,invisible:!0,hoverable:!1,style:{}},R={shape:"line",id:r.newShapeId("tooltip"),zlevel:1,invisible:!0,hoverable:!1,style:{}};r.addShape(q),r.addShape(R),r.on(f.EVENT.MOUSEMOVE,et),r.on(f.EVENT.GLOBALOUT,tt),g.dispose=dt,g.init=ct,g.refresh=ht,g.resize=pt,g.setComponent=rt,g.ontooltipHover=it,g.ondragend=st,g.onlegendSelected=ot,g.showTip=ft,g.hideTip=lt,ct(i,s)}return e("../component").define("tooltip",t),t}),r("echarts/component/toolbox",["require","./base","zrender/config","zrender/tool/util","zrender/tool/event","zrender/tool/env","../component","../component"],function(e){function t(t,n,r,i,s){function B(){y=[];var e=l.toolbox.feature,t=[];for(var n in e)if(e[n].show)switch(n){case"mark":t.push({key:n,name:"mark"}),t.push({key:n,name:"markUndo"}),t.push({key:n,name:"markClear"});break;case"magicType":for(var i=0,s=e[n].type.length;i<s;i++)e[n].title[e[n].type[i]+"Chart"]=e[n].title[e[n].type[i]],t.push({key:n,name:e[n].type[i]+"Chart"});break;case"dataZoom":t.push({key:n,name:"dataZoom"}),t.push({key:n,name:"dataZoomReset"});break;case"saveAsImage":p&&t.push({key:n,name:"saveAsImage"});break;default:t.push({key:n,name:n})}if(t.length>0){var o,n;for(var i=0,s=t.length;i<s;i++)o=t[i].name,n=t[i].key,y.push(o),E[o]=e[n].title[o]||e[n].title,e[n].icon&&(S[o]=e[n].icon[o]||e[n].icon),e[n].color&&(x[o]=e[n].color[o]||e[n].color);w=I(),F(),j();for(var i=0,s=h.shapeList.length;i<s;i++)h.shapeList[i].id=r.newShapeId(h.type),r.addShape(h.shapeList[i]);b.mark&&(G(b.markUndo),G(b.markClear)),b.dataZoomReset&&_.length===0&&G(b.dataZoomReset)}}function j(){var s=l.toolbox,o=y.length,u=w.x,a=w.y,f=s.itemSize,c=s.itemGap,p,m=s.color instanceof Array?s.color:[s.color],g=h.getFont(s.textStyle),N,C,k;s.orient=="horizontal"?(N=w.y/r.getHeight()<.5?"bottom":"top",C=w.x/r.getWidth()<.5?"left":"right",k=w.y/r.getHeight()<.5?"top":"bottom"):N=w.x/r.getWidth()<.5?"right":"left",b={};for(var L=0;L<o;L++){p={shape:"icon",zlevel:d,style:{x:u,y:a,width:f,height:f,iconType:y[L],lineWidth:1,strokeColor:x[y[L]]||m[L%m.length],brushType:"stroke"},highlightStyle:{lineWidth:2,text:s.showTitle?E[y[L]]:undefined,textFont:g,textPosition:N,strokeColor:x[y[L]]||m[L%m.length]},hoverable:!0,clickable:!0},S[y[L]]&&(p.style.image=S[y[L]].replace(new RegExp("^image:\\/\\/"),""),p.style.opacity=.8,p.highlightStyle.opacity=1,p.shape="image"),s.orient=="horizontal"&&(L===0&&C=="left"&&(p.highlightStyle.textPosition="specific",p.highlightStyle.textAlign=C,p.highlightStyle.textBaseline=k,p.highlightStyle.textX=u,p.highlightStyle.textY=k=="top"?a+f+10:a-10),L==o-1&&C=="right"&&(p.highlightStyle.textPosition="specific",p.highlightStyle.textAlign=C,p.highlightStyle.textBaseline=k,p.highlightStyle.textX=u+f,p.highlightStyle.textY=k=="top"?a+f+10:a-10));switch(y[L]){case"mark":p.onclick=q;break;case"markUndo":p.onclick=V;break;case"markClear":p.onclick=$;break;case"dataZoom":p.onclick=R;break;case"dataZoomReset":p.onclick=J;break;case"dataView":if(!D){var A=e("../component"),O=A.get("dataView");D=new O(t,n,r,l,i)}p.onclick=Z;break;case"restore":p.onclick=et;break;case"saveAsImage":p.onclick=tt;break;default:y[L].match("Chart")?(p._name=y[L].replace("Chart",""),v[p._name]&&(p.style.strokeColor=T),p.onclick=nt):p.onclick=it}h.shapeList.push(p),b[y[L]]=p,s.orient=="horizontal"?u+=f+c:a+=f+c}}function F(){var e=l.toolbox,t=e.padding[0],n=e.padding[1],r=e.padding[2],i=e.padding[3];h.shapeList.push({shape:"rectangle",zlevel:d,hoverable:!1,style:{x:w.x-i,y:w.y-t,width:w.width+i+n,height:w.height+t+r,brushType:e.borderWidth===0?"fill":"both",color:e.backgroundColor,strokeColor:e.borderColor,lineWidth:e.borderWidth}})}function I(){var e=l.toolbox,t=y.length,n=e.itemGap,i=e.itemSize,s=0,o=0;e.orient=="horizontal"?(s=(i+n)*t-n,o=i):(o=(i+n)*t-n,s=i);var u,a=r.getWidth();switch(e.x){case"center":u=Math.floor((a-s)/2);break;case"left":u=e.padding[3]+e.borderWidth;break;case"right":u=a-s-e.padding[1]-e.borderWidth;break;default:u=e.x-0,u=isNaN(u)?0:u}var f,c=r.getHeight();switch(e.y){case"top":f=e.padding[0]+e.borderWidth;break;case"bottom":f=c-o-e.padding[2]-e.borderWidth;break;case"center":f=Math.floor((c-o)/2);break;default:f=e.y-0,f=isNaN(f)?0:f}return{x:u,y:f,width:s,height:o}}function q(e){var t=e.target;return k||C?(K(),r.refresh()):(Q(),r.modShape(t.id,{style:{strokeColor:T}}),r.refresh(),C=!0,setTimeout(function(){r&&r.on(u.EVENT.CLICK,X)&&r.on(u.EVENT.MOUSEMOVE,U)},10)),!0}function R(e){var t=e.target;return O||A?(Q(),r.refresh(),i.style.cursor="default"):(K(),r.modShape(t.id,{style:{strokeColor:T}}),r.refresh(),A=!0,setTimeout(function(){r&&r.on(u.EVENT.MOUSEDOWN,z)&&r.on(u.EVENT.MOUSEUP,W)&&r.on(u.EVENT.MOUSEMOVE,U)},10),i.style.cursor="crosshair"),!0}function U(e){k&&(L.style.xEnd=f.getX(e.event),L.style.yEnd=f.getY(e.event),r.addHoverShape(L)),O&&(M.style.width=f.getX(e.event)-M.style.x,M.style.height=f.getY(e.event)-M.style.y,r.addHoverShape(M),i.style.cursor="crosshair"),A&&i.style.cursor!="pointer"&&i.style.cursor!="move"&&(i.style.cursor="crosshair")}function z(e){if(e.target)return;O=!0;var n=f.getX(e.event),i=f.getY(e.event),s=l.dataZoom||{};return M={shape:"rectangle",id:r.newShapeId("zoom"),zlevel:d,style:{x:n,y:i,width:1,height:1,brushType:"both"},highlightStyle:{lineWidth:2,color:s.fillerColor||t.dataZoom.fillerColor,strokeColor:s.handleColor||t.dataZoom.handleColor,brushType:"both"}},r.addHoverShape(M),!0}function W(){if(!M||Math.abs(M.style.width)<10||Math.abs(M.style.height)<10)return O=!1,!0;if(O&&c.dataZoom){O=!1;var e=c.dataZoom.rectZoom(M.style);e&&(_.push({start:e.start,end:e.end,start2:e.start2,end2:e.end2}),Y(b.dataZoomReset),r.refresh())}return!0}function X(e){if(k)k=!1,h.shapeList.push(L),Y(b.markUndo),Y(b.markClear),r.addShape(L),r.refresh();else if(C){k=!0;var t=f.getX(e.event),n=f.getY(e.event);L={shape:"line",id:r.newShapeId("mark"),zlevel:d,style:{xStart:t,yStart:n,xEnd:t,yEnd:n,lineWidth:h.query(l,"toolbox.feature.mark.lineStyle.width"),strokeColor:h.query(l,"toolbox.feature.mark.lineStyle.color"),lineType:h.query(l,"toolbox.feature.mark.lineStyle.type")}},r.addHoverShape(L)}}function V(){if(k)k=!1;else{var e=h.shapeList.length-1;y.length==e-1&&(G(b.markUndo),G(b.markClear));if(y.length<e){var t=h.shapeList[h.shapeList.length-1];r.delShape(t.id),r.refresh(),h.shapeList.pop()}}return!0}function $(){k&&(k=!1);var e=h.shapeList.length-y.length-1,t=!1;while(e--)r.delShape(h.shapeList.pop().id),t=!0;return t&&(G(b.markUndo),G(b.markClear),r.refresh()),!0}function J(){return O&&(O=!1),_.pop(),_.length>0?c.dataZoom.absoluteZoom(_[_.length-1]):(c.dataZoom.rectZoom(),G(b.dataZoomReset),r.refresh()),!0}function K(){k=!1,C&&(C=!1,b.mark&&r.modShape(b.mark.id,{style:{strokeColor:b.mark.highlightStyle.strokeColor}}),r.un(u.EVENT.CLICK,X),r.un(u.EVENT.MOUSEMOVE,U))}function Q(){O=!1,A&&(A=!1,b.dataZoom&&r.modShape(b.dataZoom.id,{style:{strokeColor:b.dataZoom.highlightStyle.strokeColor}}),r.un(u.EVENT.MOUSEDOWN,z),r.un(u.EVENT.MOUSEUP,W),r.un(u.EVENT.MOUSEMOVE,U))}function G(e){e.shape!="image"?r.modShape(e.id,{hoverable:!1,clickable:!1,style:{strokeColor:N}}):r.modShape(e.id,{hoverable:!1,clickable:!1,style:{opacity:.3}})}function Y(e){e.shape!="image"?r.modShape(e.id,{hoverable:!0,clickable:!0,style:{strokeColor:e.highlightStyle.strokeColor}}):r.modShape(e.id,{hoverable:!0,clickable:!0,style:{opacity:.8}})}function Z(){return D.show(l),!0}function et(){return K(),Q(),n.dispatch(t.EVENT.RESTORE),!0}function tt(){var e=l.toolbox.feature.saveAsImage,t=e.type||"png";t!="png"&&t!="jpeg"&&(t="png");var n;s.isConnected()?n=s.getConnectedDataURL(t):n=r.toDataURL("image/"+t,l.backgroundColor&&l.backgroundColor.replace(" ","")=="rgba(0,0,0,0)"?"#fff":l.backgroundColor);var i=document.createElement("div");i.id="__echarts_download_wrap__",i.style.cssText="position:fixed;z-index:99999;display:block;top:0;left:0;background-color:rgba(33,33,33,0.5);text-align:center;width:100%;height:100%;line-height:"+document.documentElement.clientHeight+"px;";var o=document.createElement("a");o.href=n,o.setAttribute("download",(e.name?e.name:l.title&&(l.title.text||l.title.subtext)?l.title.text||l.title.subtext:"ECharts")+"."+t),o.innerHTML='<img style="vertical-align:middle" src="'+n+'" title="'+(!window.attachEvent||navigator.userAgent.indexOf("Opera")!==-1?e.lang?e.lang[0]:"点击保存":"右键->图片另存为")+'"/>',i.appendChild(o),document.body.appendChild(i),o=null,i=null,setTimeout(function(){var e=document.getElementById("__echarts_download_wrap__");e&&(e.onclick=function(){var e=document.getElementById("__echarts_download_wrap__");e.onclick=null,e.innerHTML="",document.body.removeChild(e),e=null},e=null)},500);return}function nt(e){K();var r=e.target._name;return v[r]?v[r]=!1:(v[r]=!0,r==t.CHART_TYPE_LINE?v[t.CHART_TYPE_BAR]=!1:r==t.CHART_TYPE_BAR&&(v[t.CHART_TYPE_LINE]=!1),r==P?v[H]=!1:r==H&&(v[P]=!1)),n.dispatch(t.EVENT.MAGIC_TYPE_CHANGED,e.event,{magicType:v}),!0}function rt(e){K(),v=e,!g&&n.dispatch(t.EVENT.MAGIC_TYPE_CHANGED,null,{magicType:v})}function it(e){var t=e.target.style.iconType,n=l.toolbox.feature[t].onclick;typeof n=="function"&&n(l)}function st(e){if(h.query(e,"toolbox.show")&&h.query(e,"toolbox.feature.magicType.show")){var t=e.toolbox.feature.magicType.type,n=t.length;m={};while(n--)m[t[n]]=!0;n=e.series.length;var r,i;while(n--){r=e.series[n].type,m[r]&&(i=e.xAxis instanceof Array?e.xAxis[e.series[n].xAxisIndex||0]:e.xAxis,i&&(i.type||"category")=="category"&&(i.__boundaryGap=typeof i.boundaryGap!="undefined"?i.boundaryGap:!0),i=e.yAxis instanceof Array?e.yAxis[e.series[n].yAxisIndex||0]:e.yAxis,i&&i.type=="category"&&(i.__boundaryGap=typeof i.boundaryGap!="undefined"?i.boundaryGap:!0),e.series[n].__type=r,e.series[n].__itemStyle=e.series[n].itemStyle?a.clone(e.series[n].itemStyle):{});if(m[P]||m[H])e.series[n].__stack=e.series[n].stack}}v={};var s=e.dataZoom;if(s&&s.show){var o=typeof s.start!="undefined"&&s.start>=0&&s.start<=100?s.start:0,u=typeof s.end!="undefined"&&s.end>=0&&s.end<=100?s.end:100;o>u&&(o+=u,u=o-u,o-=u),_=[{start:o,end:u,start2:0,end2:100}]}else _=[]}function ot(){var e;if(v[t.CHART_TYPE_LINE]||v[t.CHART_TYPE_BAR]){var n=v[t.CHART_TYPE_LINE]?!1:!0;for(var r=0,i=l.series.length;r<i;r++)m[l.series[r].type]&&(l.series[r].type=v[t.CHART_TYPE_LINE]?t.CHART_TYPE_LINE:t.CHART_TYPE_BAR,l.series[r].itemStyle=a.clone(l.series[r].__itemStyle),e=l.xAxis instanceof Array?l.xAxis[l.series[r].xAxisIndex||0]:l.xAxis,e&&(e.type||"category")=="category"&&(e.boundaryGap=n?!0:e.__boundaryGap),e=l.yAxis instanceof Array?l.yAxis[l.series[r].yAxisIndex||0]:l.yAxis,e&&e.type=="category"&&(e.boundaryGap=n?!0:e.__boundaryGap))}else for(var r=0,i=l.series.length;r<i;r++)m[l.series[r].type]&&(l.series[r].type=l.series[r].__type,l.series[r].itemStyle=l.series[r].__itemStyle,e=l.xAxis instanceof Array?l.xAxis[l.series[r].xAxisIndex||0]:l.xAxis,e&&(e.type||"category")=="category"&&(e.boundaryGap=e.__boundaryGap),e=l.yAxis instanceof Array?l.yAxis[l.series[r].yAxisIndex||0]:l.yAxis,e&&e.type=="category"&&(e.boundaryGap=e.__boundaryGap));if(v[P]||v[H])for(var r=0,i=l.series.length;r<i;r++)v[P]?l.series[r].stack="_ECHARTS_STACK_KENER_2014_":v[H]&&(l.series[r].stack=null);else for(var r=0,i=l.series.length;r<i;r++)l.series[r].stack=l.series[r].__stack;return l}function ut(e){g=e}function at(e,t){K(),Q(),e.toolbox=h.reformOption(e.toolbox),e.toolbox.padding=h.reformCssArray(e.toolbox.padding),l=e,c=t,h.shapeList=[],e.toolbox.show&&B(),lt()}function ft(){K(),h.clear(),l&&l.toolbox&&l.toolbox.show&&B(),D&&D.resize()}function lt(){D&&D.hide()}function ct(){D&&(D.dispose(),D=null),h.clear(),h.shapeList=null,h=null}function ht(e){e&&(e.toolbox=h.reformOption(e.toolbox),e.toolbox.padding=h.reformCssArray(e.toolbox.padding),l=e)}var o=e("./base");o.call(this,t,r);var u=e("zrender/config"),a=e("zrender/tool/util"),f=e("zrender/tool/event"),l,c,h=this;h.type=t.COMPONENT_TYPE_TOOLBOX;var p=e("zrender/tool/env").canvasSupported,d=h.getZlevelBase(),v={},m,g=!1,y,b={},w,E={},S={},x={},T="red",N="#ccc",C,k,L,A,O,M,_,D,P="stack",H="tiled";h.dispose=ct,h.render=at,h.resize=ft,h.hideDataView=lt,h.getMagicOption=ot,h.silence=ut,h.setMagicType=rt,h.reset=st,h.refresh=ht}return e("../component").define("toolbox",t),t}),r("echarts/component/dataView",["require","./base","zrender/tool/env","../component"],function(e){function t(t,n,r,i,s){function w(){m="width:"+b+"px;"+"height:"+0+"px;"+"background-color:#f0ffff;",l.style.cssText=v+m,s.onselectstart=function(){return!1}}function E(e){d=!0;var t=u.query(i,"toolbox.feature.dataView.lang")||a;i=e,l.innerHTML='<p style="padding:8px 0;margin:0 0 10px 0;border-bottom:1px solid #eee">'+(t[0]||a[0])+"</p>",c.style.cssText="display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;width:"+(b-15)+"px;"+"height:"+(y-100)+"px;";var n=u.query(i,"toolbox.feature.dataView.optionToContent");typeof n!="function"?c.value=S():c.value=n(i),l.appendChild(c),p.style.cssText="float:right;padding:1px 6px;",p.innerHTML=t[1]||a[1],p.onclick=w,l.appendChild(p),u.query(i,"toolbox.feature.dataView.readOnly")===!1?(h.style.cssText="float:right;margin-right:10px;padding:1px 6px;",h.innerHTML=t[2]||a[2],h.onclick=x,l.appendChild(h),c.readOnly=!1,c.style.cursor="default"):(c.readOnly=!0,c.style.cursor="text"),m="width:"+b+"px;"+"height:"+y+"px;"+"background-color:#fff;",l.style.cssText=v+m,s.onselectstart=function(){return!0}}function S(){var e,n,r,s,o,u,a=[],f="";if(i.xAxis){i.xAxis instanceof Array?a=i.xAxis:a=[i.xAxis];for(e=0,s=a.length;e<s;e++)if((a[e].type||"category")=="category"){u=[];for(n=0,r=a[e].data.length;n<r;n++)o=a[e].data[n],u.push(typeof o.value!="undefined"?o.value:o);f+=u.join(", ")+"\n\n"}}if(i.yAxis){i.yAxis instanceof Array?a=i.yAxis:a=[i.yAxis];for(e=0,s=a.length;e<s;e++)if(a[e].type=="category"){u=[];for(n=0,r=a[e].data.length;n<r;n++)o=a[e].data[n],u.push(typeof o.value!="undefined"?o.value:o);f+=u.join(", ")+"\n\n"}}var l=i.series,c;for(e=0,s=l.length;e<s;e++){u=[];for(n=0,r=l[e].data.length;n<r;n++)o=l[e].data[n],l[e].type==t.CHART_TYPE_PIE||l[e].type==t.CHART_TYPE_MAP?c=(o.name||"-")+":":c="",l[e].type==t.CHART_TYPE_SCATTER&&(o=typeof o.value!="undefined"?o.value:o,o=o.join(", ")),u.push(c+(typeof o.value!="undefined"?o.value:o));f+=(l[e].name||"-")+" : \n",f+=u.join(l[e].type==t.CHART_TYPE_SCATTER?"\n":", "),f+="\n\n"}return f}function x(){var e=c.value,r=u.query(i,"toolbox.feature.dataView.contentToOption");if(typeof r!="function"){e=e.split("\n");var s=[];for(var o=0,a=e.length;o<a;o++)e[o]=N(e[o]),e[o]!==""&&s.push(e[o]);T(s)}else r(e,i);w(),setTimeout(function(){n&&n.dispatch(t.EVENT.DATA_VIEW_CHANGED,null,{option:i})},f?800:100)}function T(e){var n,r,s,o,u,a=[],f=0,l,c;if(i.xAxis){i.xAxis instanceof Array?a=i.xAxis:a=[i.xAxis];for(n=0,o=a.length;n<o;n++)if((a[n].type||"category")=="category"){l=e[f].split(",");for(r=0,s=a[n].data.length;r<s;r++)c=N(l[r]||""),u=a[n].data[r],typeof a[n].data[r].value!="undefined"?a[n].data[r].value=c:a[n].data[r]=c;f++}}if(i.yAxis){i.yAxis instanceof Array?a=i.yAxis:a=[i.yAxis];for(n=0,o=a.length;n<o;n++)if(a[n].type=="category"){l=e[f].split(",");for(r=0,s=a[n].data.length;r<s;r++)c=N(l[r]||""),u=a[n].data[r],typeof a[n].data[r].value!="undefined"?a[n].data[r].value=c:a[n].data[r]=c;f++}}var h=i.series;for(n=0,o=h.length;n<o;n++){f++;if(h[n].type==t.CHART_TYPE_SCATTER)for(var r=0,s=h[n].data.length;r<s;r++)l=e[f],c=l.replace(" ","").split(","),typeof h[n].data[r].value!="undefined"?h[n].data[r].value=c:h[n].data[r]=c,f++;else{l=e[f].split(",");for(var r=0,s=h[n].data.length;r<s;r++)c=(l[r]||"").replace(/.*:/,""),c=N(c),c=c!="-"&&c!==""?c-0:"-",typeof h[n].data[r].value!="undefined"?h[n].data[r].value=c:h[n].data[r]=c;f++}}}function N(e){var t=new RegExp("(^[\\s\\t\\xa0\\u3000]+)|([\\u3000\\xa0\\s\\t]+$)","g");return e.replace(t,"")}function C(e){e=e||window.event,e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function k(){l.className=g,w(),s.firstChild.appendChild(l),window.addEventListener?(l.addEventListener("click",C),l.addEventListener("mousewheel",C),l.addEventListener("mousemove",C),l.addEventListener("mousedown",C),l.addEventListener("mouseup",C),l.addEventListener("touchstart",C),l.addEventListener("touchmove",C),l.addEventListener("touchend",C)):(l.attachEvent("onclick",C),l.attachEvent("onmousewheel",C),l.attachEvent("onmousemove",C),l.attachEvent("onmousedown",C),l.attachEvent("onmouseup",C))}function L(){y=r.getHeight(),b=r.getWidth(),l.offsetHeight>10&&(m="width:"+b+"px;"+"height:"+y+"px;"+"background-color:#fff;",l.style.cssText=v+m,c.style.cssText="display:block;margin:0 0 8px 0;padding:4px 6px;overflow:auto;width:"+(b-15)+"px;"+"height:"+(y-100)+"px;")}function A(){window.removeEventListener?(l.removeEventListener("click",C),l.removeEventListener("mousewheel",C),l.removeEventListener("mousemove",C),l.removeEventListener("mousedown",C),l.removeEventListener("mouseup",C),l.removeEventListener("touchstart",C),l.removeEventListener("touchmove",C),l.removeEventListener("touchend",C)):(l.detachEvent("onclick",C),l.detachEvent("onmousewheel",C),l.detachEvent("onmousemove",C),l.detachEvent("onmousedown",C),l.detachEvent("onmouseup",C)),h.onclick=null,p.onclick=null,d&&(l.removeChild(c),l.removeChild(h),l.removeChild(p)),c=null,h=null,p=null,s.firstChild.removeChild(l),l=null,u=null}var o=e("./base");o.call(this,t,r);var u=this;u.type=t.COMPONENT_TYPE_DATAVIEW;var a=["Data View","close","refresh"],f=e("zrender/tool/env").canvasSupported,l=document.createElement("div"),c=document.createElement("textArea"),h=document.createElement("button"),p=document.createElement("button"),d=!1,v="position:absolute;display:block;overflow:hidden;transition:height 0.8s,background-color 1s;-moz-transition:height 0.8s,background-color 1s;-webkit-transition:height 0.8s,background-color 1s;-o-transition:height 0.8s,background-color 1s;z-index:1;left:0;top:0;",m,g="echarts-dataview",y=r.getHeight(),b=r.getWidth();u.dispose=A,u.resize=L,u.show=E,u.hide=w,k()}return e("../component").define("dataView",t),t}),r("echarts/util/coordinates",["require","zrender/tool/math"],function(e){function n(e,n){return[e*t.sin(n),e*t.cos(n)]}function r(e,t){return[Math.sqrt(e*e+t*t),Math.atan(t/e)]}var t=e("zrender/tool/math");return{polar2cartesian:n,cartesian2polar:r}}),r("echarts/component/polar",["require","./base","../util/coordinates","zrender/tool/util","../component"],function(e){function t(t,n,r,i,s){function p(e,t){s=t,B(e)}function d(){for(var e=0;e<l.length;e++)f.reformOption(l[e]),h=[l[e],i],v(e),m(e),y(e),L(e),g(e);for(var e=0;e<f.shapeList.length;e++)f.shapeList[e].id=r.newShapeId(f.type),r.addShape(f.shapeList[e])}function v(e){var t=l[e],n=f.deepQuery(h,"indicator"),i=n.length,s=t.startAngle,o=2*Math.PI/i,a=f.parsePercent(t.radius,Math.min(r.getWidth(),r.getHeight())/2),c=t.__ecIndicator=[],p;for(var d=0;d<i;d++)p=u.polar2cartesian(a,s*Math.PI/180+o*d),c.push({vector:[p[1],-p[0]]})}function m(e){var t=l[e],n=t.__ecIndicator,r=t.splitArea,i=t.splitLine,s=N(e),o=t.splitNumber,u=i.lineStyle.color,a=i.lineStyle.width,c=i.show,p=f.deepQuery(h,"axisLine");w(n,o,s,r,u,a,c),C(n,s,p)}function g(e){var t=l[e],n=f.deepQuery(h,"indicator"),r=t.__ecIndicator,s,o,u,c,p=f.deepQuery(h,"splitNumber"),d=N(e),o,v,m,g,y,b=f.deepQuery(h,"precision");for(var w=0;w<n.length;w++){s=f.deepQuery([n[w],t,i],"axisLabel");if(s.show){u={},u.textFont=f.getFont(),u=a.merge(u,s),u.lineWidth=u.width,o=r[w].vector,v=r[w].value,g=w/n.length*2*Math.PI,y=s.offset||10;for(var E=1;E<=p;E++)c=a.merge({},u),m=E*(v.max-v.min)/p+v.min,b&&(m=m.toFixed(b)),c.text=f.numAddCommas(m),c.x=E*o[0]/p+Math.cos(g)*y+d[0],c.y=E*o[1]/p+Math.sin(g)*y+d[1],f.shapeList.push({shape:"text",style:c,draggable:!1,hoverable:!1})}}}function y(e){var t=l[e],n=t.__ecIndicator,r,s=f.deepQuery(h,"indicator"),o=N(e),u,a,c,p,d=0,v=0,m,g;for(var y=0;y<s.length;y++){c=f.deepQuery([s[y],t,i],"name");if(!c.show)continue;g=f.deepQuery([c,t,i],"textStyle"),u={},u.textFont=f.getFont(g),u.color=g.color,typeof c.formatter=="function"?u.text=c.formatter(s[y].text,y):typeof c.formatter=="string"?u.text=c.formatter.replace("{value}",s[y].text):u.text=s[y].text,r=n[y].vector,Math.round(r[0])>0?a="left":Math.round(r[0])<0?a="right":a="center",c.margin?(m=c.margin,d=r[0]>0?m:-m,v=r[1]>0?m:-m,d=r[0]===0?0:d,v=r[1]===0?0:v,r=T(r,o,1)):r=T(r,o,1.2),u.textAlign=a,u.x=r[0]+d,u.y=r[1]+v,c.rotate&&(p=[c.rotate/180*Math.PI,r[0],r[1]]),f.shapeList.push({shape:"text",style:u,draggable:!1,hoverable:!1,rotation:p})}}function b(e){var e=e||0,t=l[e],n=N(e),r=t.__ecIndicator,i=r.length,s=[],o,u;for(var a=0;a<i;a++)o=r[a].vector,s.push(T(o,n,1.2));return u=S(s,"fill","rgba(0,0,0,0)","",1),u}function w(e,t,n,r,i,s,o){var u,a,l,c;for(var h=0;h<t;h++)a=(t-h)/t,c=E(e,a,n),o&&(u=S(c,"stroke","",i,s),f.shapeList.push(u)),r.show&&(l=(t-h-1)/t,x(e,r,a,l,n,h))}function E(e,t,n){var r=[],i=e.length,s;for(var o=0;o<i;o++)s=e[o].vector,r.push(T(s,n,t));return r}function S(e,t,n,r,i,s,o){return{shape:"polygon",style:{pointList:e,brushType:t,color:n,strokeColor:r,lineWidth:i},hoverable:s||!1,draggable:o||!1}}function x(e,t,n,r,i,s){var o=e.length,u,a=t.areaStyle.color,l,c,h,p=[],o=e.length,d;typeof a=="string"&&(a=[a]),l=a.length,u=a[s%l];for(var v=0;v<o;v++)p=[],c=e[v].vector,h=e[(v+1)%o].vector,p.push(T(c,i,n)),p.push(T(c,i,r)),p.push(T(h,i,r)),p.push(T(h,i,n)),d=S(p,"fill",u,"",1),f.shapeList.push(d)}function T(e,t,n){return[e[0]*n+t[0],e[1]*n+t[1]]}function N(e){var e=e||0;return f.parseCenter(r,l[e].center)}function C(e,t,n){var r=e.length,i,s,o=n.lineStyle,u=o.color,a=o.width,l=o.type;for(var c=0;c<r;c++)s=e[c].vector,i=k(t[0],t[1],s[0]+t[0],s[1]+t[1],u,a,l),f.shapeList.push(i)}function k(e,t,n,r,i,s,o){return{shape:"line",style:{xStart:e,yStart:t,xEnd:n,yEnd:r,strokeColor:i,lineWidth:s,lineType:o},hoverable:!1}}function L(e){var t=l[e],n=f.deepQuery(h,"indicator"),r=n.length,i=t.__ecIndicator,s,o,u,a=A(e),c=t.splitNumber,p=f.deepQuery(h,"boundaryGap"),d=f.deepQuery(h,"precision"),v=f.deepQuery(h,"power"),m=f.deepQuery(h,"scale");for(var g=0;g<r;g++)typeof n[g].max=="number"?(o=n[g].max,u=n[g].min||0,s={max:o,min:u}):s=O(a,g,c,p,d,v,m),i[g].value=s}function A(e){var n=[],r,o,u=s.legend;for(var a=0;a<c.length;a++){r=c[a];if(r.type!=t.CHART_TYPE_RADAR)continue;o=r.data||[];for(var l=0;l<o.length;l++)polarIndex=f.deepQuery([o[l],r,i],"polarIndex")||0,polarIndex==e&&(!u||u.isSelected(o[l].name))&&n.push(o[l])}return n}function O(e,t,n,r,i,s,o){function m(e){(e>u||u===undefined)&&(u=e),(e<a||a===undefined)&&(a=e)}var u,a,f,l,c,h=0,p,d,v;if(!e||e.length===0)return;e.length==1&&(a=0);if(e.length!=1)for(var g=0;g<e.length;g++)f=e[g].value[t],m(f);else{v=e[0];for(var g=0;g<v.value.length;g++)m(v.value[g])}if(e.length!=1)if(o){l=M(u,a,n,i,s);if(l>=1)a=Math.floor(a/l)*l-l;else{if(l===0)return u>0?(d=0,p=2*u):u===0?(d=0,p=100):(p=0,d=2*a),{max:p,min:d};c=(l+"").split(".")[1],h=c.length,a=Math.floor(a*Math.pow(10,h))/Math.pow(10,h)-l}Math.abs(a)<=l&&(a=0),u=a+Math.floor(l*Math.pow(10,h)*(n+1))/Math.pow(10,h)}else a=a>0?0:a;return r&&(u=u>0?u*1.2:u*.8,a=a>0?a*.8:a*1.2),{max:u,min:a}}function M(e,t,n,r,i){var s=(e-t)/n,o,u;if(s>1)return i?(s=Math.ceil(s),s%i>0?(Math.ceil(s/i)+1)*i:s):(o=(s+"").split(".")[0],u=o.length,o.charAt(0)>=5?Math.pow(10,u):(o.charAt(0)-0+1)*Math.pow(10,u-1));if(s==1)return 1;if(s===0)return 0;if(!r){o=(s+"").split(".")[1],u=0;while(o[u]=="0")u++;return o[u]>=5?"0."+o.substring(0,u+1)-0+1/Math.pow(10,u):"0."+o.substring(0,u+1)-0+1/Math.pow(10,u+1)}return Math.ceil(s*Math.pow(10,r))/Math.pow(10,r)}function _(e,t,n){e=e||0,t=t||0;var r=l[e].__ecIndicator;if(t>=r.length)return;var i=l[e].__ecIndicator[t],s=N(e),o=i.vector,u=i.value.max,a=i.value.min,f;if(typeof n=="undefined")return s;switch(n){case"min":n=a;break;case"max":n=u;break;case"center":n=(u+a)/2}return u!=a?f=(n-a)/(u-a):f=.5,T(o,s,f)}function D(e){var t=P(e);return t?t.polarIndex:-1}function P(e){var t,n,i,s,o,a,c,h,p,d=Math.min(r.getWidth(),r.getHeight())/2;for(var v=0;v<l.length;v++){t=l[v],n=N(v);if(e[0]==n[0]&&e[1]==n[1])return{polarIndex:v,valueIndex:0};i=f.parsePercent(t.radius,d),o=t.startAngle,a=t.indicator,c=a.length,h=2*Math.PI/c,s=u.cartesian2polar(e[0]-n[0],n[1]-e[1]),e[0]-n[0]<0&&(s[1]+=Math.PI),s[1]<0&&(s[1]+=2*Math.PI),p=s[1]-o/180*Math.PI+Math.PI*2;if(Math.abs(Math.cos(p%(h/2)))*i>s[0])return{polarIndex:v,valueIndex:Math.floor((p+h/2)/h)%c}}}function H(e){var e=e||0;return l[e].indicator}function B(e){e&&(i=e,l=i.polar,c=i.series),f.clear(),d()}var o=e("./base");o.call(this,t,r);var u=e("../util/coordinates"),a=e("zrender/tool/util"),f=this;f.type=t.COMPONENT_TYPE_POLAR;var l,c,h;f.refresh=B,f.getVector=_,f.getDropBox=b,f.getCenter=N,f.getIndicator=H,f.isInside=D,f.getNearestIndex=P,p(i,s)}return e("../component").define("polar",t),t}),r("echarts/theme/default",[],function(){var e={};return e}),r("echarts/echarts",["require","zrender/tool/env","./config","zrender/tool/util","zrender","zrender/tool/event","zrender/config","./util/shape/icon","./util/shape/markLine","./chart","./chart/island","./component","./component/title","./component/axis","./component/categoryAxis","./component/valueAxis","./component/grid","./component/dataZoom","./component/legend","./component/dataRange","./component/tooltip","./component/toolbox","./component/dataView","./component/polar","./util/ecQuery","./util/ecData","./chart","./component","zrender/tool/util","./util/ecQuery","zrender/tool/util","zrender/tool/color","zrender/tool/util","./util/ecQuery","zrender/tool/util","./util/ecQuery","zrender/tool/util","zrender","zrender/tool/util","zrender/tool/util","./theme/default","./theme/default"],function(e){function u(t){function E(){var r=e("zrender");(r.version||"1.0.3").replace(".","")-0<n.dependencies.zrender.replace(".","")-0&&console.error("ZRender "+(r.version||"1.0.3-")+" is too old for ECharts "+n.version+". Current version need ZRender "+n.dependencies.zrender+"+"),f=r.init(t),l={},p=[],d={};var s=e("zrender/tool/event");s.Dispatcher.call(d);for(var o in i.EVENT)o!="CLICK"&&o!="HOVER"&&o!="MAP_ROAM"&&d.bind(i.EVENT[o],x);var c=e("zrender/config");f.on(c.EVENT.CLICK,T),f.on(c.EVENT.MOUSEOVER,N),f.on(c.EVENT.DRAGSTART,C),f.on(c.EVENT.DRAGEND,M),f.on(c.EVENT.DRAGENTER,k),f.on(c.EVENT.DRAGOVER,L),f.on(c.EVENT.DRAGLEAVE,A),f.on(c.EVENT.DROP,O),e("./util/shape/icon"),e("./util/shape/markLine");var h=e("./chart");e("./chart/island");var v=h.get("island");y=new v(u,d,f);var m=e("./component");e("./component/title"),e("./component/axis"),e("./component/categoryAxis"),e("./component/valueAxis"),e("./component/grid"),e("./component/dataZoom"),e("./component/legend"),e("./component/dataRange"),e("./component/tooltip"),e("./component/toolbox"),e("./component/dataView"),e("./component/polar");var g=m.get("toolbox");b=new g(u,d,f,t,a),V()}function x(e){e.__echartsId=e.__echartsId||a.id;var t=!0;e.__echartsId!=a.id&&(t=!1),S||(S=e.type);switch(e.type){case i.EVENT.LEGEND_SELECTED:_(e);break;case i.EVENT.DATA_ZOOM:if(!t){var n=a.component.dataZoom;n&&(n.silence(!0),n.absoluteZoom(e.zoom),n.silence(!1))}D(e);break;case i.EVENT.DATA_RANGE:t&&P(e);break;case i.EVENT.MAGIC_TYPE_CHANGED:if(!t){var r=a.component.toolbox;r&&(r.silence(!0),r.setMagicType(e.magicType),r.silence(!1))}H(e);break;case i.EVENT.DATA_VIEW_CHANGED:t&&B(e);break;case i.EVENT.TOOLTIP_HOVER:t&&j(e);break;case i.EVENT.RESTORE:F();break;case i.EVENT.REFRESH:t&&I(e);break;case i.EVENT.TOOLTIP_IN_GRID:case i.EVENT.TOOLTIP_OUT_GRID:if(!t){var s=a.component.grid;s&&f.trigger("mousemove",{connectTrigger:!0,zrenderX:s.getX()+e.x*s.getWidth(),zrenderY:s.getY()+e.y*s.getHeight()})}else if(v){var s=a.component.grid;s&&(e.x=(e.event.zrenderX-s.getX())/s.getWidth(),e.y=(e.event.zrenderY-s.getY())/s.getHeight())}}if(v&&t&&S==e.type){for(var o in v)v[o].connectedEventHandler(e);S=null}if(!t||!v&&t)S=null}function T(e){var t=p.length;while(t--)p[t]&&p[t].onclick&&p[t].onclick(e);if(e.target){var n=U(e.target);n&&typeof n.seriesIndex!="undefined"&&d.dispatch(i.EVENT.CLICK,e.event,n)}}function N(e){if(e.target){var t=U(e.target);t&&typeof t.seriesIndex!="undefined"&&d.dispatch(i.EVENT.HOVER,e.event,t)}}function C(e){m={dragIn:!1,dragOut:!1,needRefresh:!1};var t=p.length;while(t--)p[t]&&p[t].ondragstart&&p[t].ondragstart(e)}function k(e){var t=p.length;while(t--)p[t]&&p[t].ondragenter&&p[t].ondragenter(e)}function L(e){var t=p.length;while(t--)p[t]&&p[t].ondragover&&p[t].ondragover(e)}function A(e){var t=p.length;while(t--)p[t]&&p[t].ondragleave&&p[t].ondragleave(e)}function O(e){var t=p.length;while(t--)p[t]&&p[t].ondrop&&p[t].ondrop(e,m);y.ondrop(e,m)}function M(e){var t=p.length;while(t--)p[t]&&p[t].ondragend&&p[t].ondragend(e,m);y.ondragend(e,m),m.needRefresh&&(R(y.getOption()),d.dispatch(i.EVENT.DATA_CHANGED,e.event,U(e.target)),d.dispatch(i.EVENT.REFRESH))}function _(e){m.needRefresh=!1;var t=p.length;while(t--)p[t]&&p[t].onlegendSelected&&p[t].onlegendSelected(e,m);g=e.selected,m.needRefresh&&d.dispatch(i.EVENT.REFRESH)}function D(e){m.needRefresh=!1;var t=p.length;while(t--)p[t]&&p[t].ondataZoom&&p[t].ondataZoom(e,m);m.needRefresh&&d.dispatch(i.EVENT.REFRESH)}function P(e){m.needRefresh=!1;var t=p.length;while(t--)p[t]&&p[t].ondataRange&&p[t].ondataRange(e,m);m.needRefresh&&f.refresh()}function H(){z(q())}function B(e){R(e.option),d.dispatch(i.EVENT.DATA_CHANGED,null,e),d.dispatch(i.EVENT.REFRESH)}function j(e){var t=p.length,n=[];while(t--)p[t]&&p[t].ontooltipHover&&p[t].ontooltipHover(e,n)}function F(){a.restore()}function I(e){w=!0,a.refresh(e),w=!1}function q(e){var t=e||b.getMagicOption(),n;if(c.xAxis)if(c.xAxis instanceof Array){n=c.xAxis.length;while(n--)t.xAxis[n].data=c.xAxis[n].data}else t.xAxis.data=c.xAxis.data;if(c.yAxis)if(c.yAxis instanceof Array){n=c.yAxis.length;while(n--)t.yAxis[n].data=c.yAxis[n].data}else t.yAxis.data=c.yAxis.data;n=t.series.length;while(n--)t.series[n].data=c.series[n].data;return t}function R(t){var n=e("./util/ecQuery");if(n.query(t,"dataZoom.show")||n.query(t,"toolbox.show")&&n.query(t,"toolbox.feature.dataZoom.show")){for(var r=0,s=p.length;r<s;r++)if(p[r].type==i.COMPONENT_TYPE_DATAZOOM){p[r].syncBackupData(t,c);return}}else{var o=t.series,u;for(var r=0,s=o.length;r<s;r++){u=o[r].data;for(var a=0,f=u.length;a<f;a++)c.series[r].data[a]=u[a]}}}function U(t){if(t){var n=e("./util/ecData"),r=n.get(t,"seriesIndex"),i=n.get(t,"dataIndex");return i=a.component.dataZoom?a.component.dataZoom.getRealDataIndex(r,i):i,{seriesIndex:r,dataIndex:i,data:n.get(t,"data"),name:n.get(t,"name"),value:n.get(t,"value")}}return}function z(n){$(n);if(n.backgroundColor)if(!r&&n.backgroundColor.indexOf("rgba")!=-1){var i=n.backgroundColor.split(",");t.style.filter="alpha(opacity="+i[3].substring(0,i[3].lastIndexOf(")"))*100+")",i.length=3,i[0]=i[0].replace("a",""),t.style.backgroundColor=i.join(",")+")"}else t.style.backgroundColor=n.backgroundColor;V(),f.clear();var s=e("./chart"),o=e("./component"),l;if(n.title){var c=o.get("title");l=new c(u,d,f,n),p.push(l),a.component.title=l}var h;if(n.tooltip){var v=o.get("tooltip");h=new v(u,d,f,n,t,a),p.push(h),a.component.tooltip=h}var m;if(n.legend){var w=o.get("legend");m=new w(u,d,f,n,g),p.push(m),a.component.legend=m}var E;if(n.dataRange){var S=o.get("dataRange");E=new S(u,d,f,n),p.push(E),a.component.dataRange=E}var x,T,N,C;if(n.grid||n.xAxis||n.yAxis){var k=o.get("grid");x=new k(u,d,f,n),p.push(x),a.component.grid=x;var L=o.get("dataZoom");T=new L(u,d,f,n,{legend:m,grid:x}),p.push(T),a.component.dataZoom=T;var A=o.get("axis");N=new A(u,d,f,n,{legend:m,grid:x},"xAxis"),p.push(N),a.component.xAxis=N,C=new A(u,d,f,n,{legend:m,grid:x},"yAxis"),p.push(C),a.component.yAxis=C}var O;if(n.polar){var M=o.get("polar");O=new M(u,d,f,n,{legend:m}),p.push(O),a.component.polar=O}h&&h.setComponent();var _,D,P,H={};for(var B=0,j=n.series.length;B<j;B++){D=n.series[B].type;if(!D){console.error("series["+B+"] chart type has not been defined.");continue}H[D]||(H[D]=!0,_=s.get(D),_?(P=new _(u,d,f,n,{tooltip:h,legend:m,dataRange:E,grid:x,xAxis:N,yAxis:C,polar:O}),p.push(P),a.chart[D]=P):console.error(D+" has not been required."))}y.render(n),b.render(n,{dataZoom:T});if(n.animation&&!n.renderAsImage){var F=p.length;while(F--)P=p[F],P&&P.animation&&P.shapeList&&P.shapeList.length<n.animationThreshold&&P.animation();f.refresh()}else f.render();var I="IMG"+a.id,q=document.getElementById(I);n.renderAsImage&&r?(q?q.src=tt(n.renderAsImage):(q=nt(n.renderAsImage),q.id=I,q.style.position="absolute",q.style.left=0,q.style.top=0,t.firstChild.appendChild(q)),ot(),f.un(),V(),f.clear()):q&&q.parentNode.removeChild(q),q=null}function W(){var t=e("zrender/tool/util");h.legend&&h.legend.selected?g=h.legend.selected:g={},c=t.clone(h),l=t.clone(h),y.clear(),b.reset(l),z(l)}function X(t){t=t||{};var n=t.option;if(!w&&t.option){var r=e("./util/ecQuery");r.query(c,"toolbox.show")&&r.query(c,"toolbox.feature.magicType.show")?n=q():n=q(y.getOption());var i=e("zrender/tool/util");i.merge(n,t.option,{overwrite:!0,recursive:!0}),i.merge(c,t.option,{overwrite:!0,recursive:!0}),i.merge(h,t.option,{overwrite:!0,recursive:!0}),y.refresh(n),b.refresh(n)}f.clearAnimation();for(var s=0,o=p.length;s<o;s++)p[s].refresh&&p[s].refresh(n);f.refresh()}function V(){f.clearAnimation();var e=p.length;while(e--)p[e]&&p[e].dispose&&p[e].dispose();p=[],a.chart={island:y},a.component={toolbox:b}}function $(t){typeof t.backgroundColor=="undefined"&&(t.backgroundColor=u.backgroundColor),typeof t.calculable=="undefined"&&(t.calculable=u.calculable),typeof t.calculableColor=="undefined"&&(t.calculableColor=u.calculableColor),typeof t.calculableHolderColor=="undefined"&&(t.calculableHolderColor=u.calculableHolderColor),typeof t.nameConnector=="undefined"&&(t.nameConnector=u.nameConnector),typeof t.valueConnector=="undefined"&&(t.valueConnector=u.valueConnector),typeof t.animation=="undefined"&&(t.animation=u.animation),typeof t.animationThreshold=="undefined"&&(t.animationThreshold=u.animationThreshold),typeof t.animationDuration=="undefined"&&(t.animationDuration=u.animationDuration),typeof t.animationEasing=="undefined"&&(t.animationEasing=u.animationEasing),typeof t.addDataAnimation=="undefined"&&(t.addDataAnimation=u.addDataAnimation);var n=e("zrender/tool/color");t.color&&t.color.length>0?f.getColor=function(e){return n.getColor(e,t.color)}:f.getColor=function(e){return n.getColor(e,u.color)},typeof t.DRAG_ENABLE_TIME=="undefined"&&(t.DRAG_ENABLE_TIME=u.DRAG_ENABLE_TIME)}function J(t,n){var r=e("zrender/tool/util");n?l=r.clone(t):r.merge(l,r.clone(t),{overwrite:!0,recursive:!0});if(!l.series||l.series.length===0)return;return c=r.clone(l),h=r.clone(l),l.legend&&l.legend.selected?g=l.legend.selected:g={},y.clear(),b.reset(l),z(l),a}function K(){var t=e("./util/ecQuery"),n=e("zrender/tool/util");return t.query(c,"toolbox.show")&&t.query(c,"toolbox.feature.magicType.show")?n.clone(q()):n.clone(q(y.getOption()))}function Q(e,t){return t?(l.series=e,a.setOption(l,t)):a.setOption({series:e}),a}function G(){return K().series}function Y(t,n,r,s,o){var u=e("./util/ecQuery"),f;u.query(c,"toolbox.show")&&u.query(c,"toolbox.feature.magicType.show")?f=q():f=q(y.getOption());var l=e("zrender/tool/util"),v=t instanceof Array?t:[[t,n,r,s,o]],m,w;for(var E=0,S=v.length;E<S;E++){t=v[E][0],n=v[E][1],r=v[E][2],s=v[E][3],o=v[E][4];if(h.series[t]){r?(h.series[t].data.unshift(n),c.series[t].data.unshift(n),s||(h.series[t].data.pop(),n=c.series[t].data.pop())):(h.series[t].data.push(n),c.series[t].data.push(n),s||(h.series[t].data.shift(),n=c.series[t].data.shift()));if(typeof o!="undefined"&&h.series[t].type==i.CHART_TYPE_PIE&&c.legend&&c.legend.data)f.legend.data=c.legend.data,r?(h.legend.data.unshift(o),c.legend.data.unshift(o)):(h.legend.data.push(o),c.legend.data.push(o)),s||(w=l.indexOf(c.legend.data,n.name),w!=-1&&(h.legend.data.splice(w,1),c.legend.data.splice(w,1))),g[o]=!0;else if(typeof o!="undefined"&&typeof h.xAxis!="undefined"&&typeof h.yAxis!="undefined"){m=h.series[t].xAxisIndex||0;if(typeof h.xAxis[m].type=="undefined"||h.xAxis[m].type=="category")r?(h.xAxis[m].data.unshift(o),c.xAxis[m].data.unshift(o),s||(h.xAxis[m].data.pop(),c.xAxis[m].data.pop())):(h.xAxis[m].data.push(o),c.xAxis[m].data.push(o),s||(h.xAxis[m].data.shift(),c.xAxis[m].data.shift()));m=h.series[t].yAxisIndex||0,h.yAxis[m].type=="category"&&(r?(h.yAxis[m].data.unshift(o),c.yAxis[m].data.unshift(o),s||(h.yAxis[m].data.pop(),c.yAxis[m].data.pop())):(h.yAxis[m].data.push(o),c.yAxis[m].data.push(o),s||(h.yAxis[m].data.shift(),c.yAxis[m].data.shift())))}}}f.legend&&(f.legend.selected=g);for(var E=0,S=p.length;E<S;E++)f.addDataAnimation&&p[E].addDataAnimation&&p[E].addDataAnimation(v),p[E].type==i.COMPONENT_TYPE_DATAZOOM&&(p[E].silence(!0),p[E].init(f),p[E].silence(!1));return y.refresh(f),b.refresh(f),setTimeout(function(){d.dispatch(i.EVENT.REFRESH,"",{option:f})},f.addDataAnimation?500:0),a}function Z(){return t}function et(){return f}function tt(e){if(!r)return"";if(p.length===0){var t="IMG"+a.id,n=document.getElementById(t);if(n)return n.src}a.component.tooltip&&a.component.tooltip.hideTip(),e=e||"png",e!="png"&&e!="jpeg"&&(e="png");var i=l.backgroundColor&&l.backgroundColor.replace(" ","")=="rgba(0,0,0,0)"?"#fff":l.backgroundColor;return f.toDataURL("image/"+e,i)}function nt(e){var t=document.createElement("img");return t.src=tt(e),t.title=h.title&&h.title.text||"ECharts",t}function rt(n){if(!lt())return tt(n);var r,i=[t.offsetLeft,t.offsetTop,t.offsetWidth,t.offsetHeight],s={self:{img:a.getDataURL(n),left:i[0],top:i[1],right:i[0]+i[2],bottom:i[1]+i[3]}},o=s.self.left,u=s.self.top,f=s.self.right,c=s.self.bottom;for(var h in v)r=v[h].getDom(),i=[r.offsetLeft,r.offsetTop,r.offsetWidth,r.offsetHeight],s[h]={img:v[h].getDataURL(n),left:i[0],top:i[1],right:i[0]+i[2],bottom:i[1]+i[3]},o=Math.min(o,s[h].left),u=Math.min(u,s[h].top),f=Math.max(f,s[h].right),c=Math.max(c,s[h].bottom);var p=document.createElement("div");p.style.position="absolute",p.style.left="-4000px",p.style.width=f-o+"px",p.style.height=c-u+"px",document.body.appendChild(p);var d=e("zrender").init(p);for(var h in s)d.addShape({shape:"image",style:{x:s[h].left-o,y:s[h].top-u,image:s[h].img}});d.render();var m=l.backgroundColor&&l.backgroundColor.replace(" ","")=="rgba(0,0,0,0)"?"#fff":l.backgroundColor,g=d.toDataURL("image/png",m);return setTimeout(function(){d.dispose(),p.parentNode.removeChild(p),p=null},100),g}function it(e){var t=document.createElement("img");return t.src=rt(e),t.title=h.title&&h.title.text||"ECharts",t}function st(e,t){return d.bind(e,t),a}function ot(e,t){return d.unbind(e,t),a}function ut(e){if(!e)return a;v||(v={});if(e instanceof Array)for(var t=0,n=e.length;t<n;t++)v[e[t].id]=e[t];else v[e.id]=e;return a}function at(e){if(!e||!v)return a;if(e instanceof Array)for(var t=0,n=e.length;t<n;t++)delete v[e[t].id];else delete v[e.id];for(var r in v)return r,a;return v=!1,a}function ft(e){e.__echartsId!=a.id&&x(e)}function lt(){return!!v}function ct(t){b.hideDataView();var n=e("zrender/tool/util");t=t||{},t.textStyle=t.textStyle||{};var r=n.merge(n.clone(t.textStyle),u.textStyle,{overwrite:!1});return t.textStyle.textFont=r.fontStyle+" "+r.fontWeight+" "+r.fontSize+"px "+r.fontFamily,t.textStyle.text=t.text||u.loadingText,typeof t.x!="undefined"&&(t.textStyle.x=t.x),typeof t.y!="undefined"&&(t.textStyle.y=t.y),f.showLoading(t),a}function ht(){return f.hideLoading(),a}function pt(t){var n=e("zrender/tool/util");if(t){if(typeof t=="string")switch(t){case"default":t=e("./theme/default");break;default:t=e("./theme/default")}else t=t||{};for(var s in u)delete u[s];for(var s in i)u[s]=n.clone(i[s]);t.color&&(u.color=[]),t.symbolList&&(u.symbolList=[]),n.merge(u,n.clone(t),{overwrite:!0,recursive:!0})}r||(u.textStyle.fontFamily=u.textStyle.fontFamily2),h&&a.restore()}function dt(){f.resize();if(l.renderAsImage&&r)return z(l),a;f.clearAnimation(),y.resize(),b.resize();for(var e=0,t=p.length;e<t;e++)p[e].resize&&p[e].resize();return f.refresh(),d.dispatch(i.EVENT.RESIZE),a}function vt(){return V(),f.clear(),l={},c={},h={},a}function mt(){var e=t.getAttribute(o);e&&delete s[e],y.dispose(),b.dispose(),d.unbind(),a.clear(),f.dispose(),f=null,a=null;return}var i=e("./config"),u=e("zrender/tool/util").clone(i),a=this,f,l,c,h,p,d,v=!1,m={dragIn:!1,dragOut:!1,needRefresh:!1},g,y,b,w;E();var S=null;a.setOption=J,a.setSeries=Q,a.addData=Y,a.getOption=K,a.getSeries=G,a.getDom=Z,a.getZrender=et,a.getDataURL=tt,a.getImage=nt,a.getConnectedDataURL=rt,a.getConnectedImage=it,a.on=st,a.un=ot,a.connect=ut,a.disConnect=at,a.connectedEventHandler=ft,a.isConnected=lt,a.showLoading=ct,a.hideLoading=ht,a.setTheme=pt,a.resize=dt,a.refresh=X,a.restore=W,a.clear=vt,a.dispose=mt}var t={},n=t,r=e("zrender/tool/env").canvasSupported,i=new Date-0,s={},o="_echarts_instance_";return t.version="1.4.1",t.dependencies={zrender:"1.1.2"},t.init=function(e,t){e=e instanceof Array?e[0]:e;var n=e.getAttribute(o);return n||(n=i++,e.setAttribute(o,n)),s[n]&&s[n].dispose(),s[n]=new u(e),s[n].id=n,s[n].setTheme(t),s[n]},t.getInstanceById=function(e){return s[e]},t}),r("echarts",["echarts/echarts"],function(e){return e}),r("echarts/util/shape/symbol",["require","zrender/tool/color","zrender/shape","zrender/shape/base","zrender/shape"],function(e){function t(){this.type="symbol"}return t.prototype={buildPath:function(t,n){var r=n.pointList,i=this.getRect(n),s=window.devicePixelRatio||1;i={x:Math.floor(i.x),y:Math.floor(i.y),width:Math.floor(i.width),height:Math.floor(i.height)};var o=t.getImageData(i.x*s,i.y*s,i.width*s,i.height*s),u=o.data,a,f=e("zrender/tool/color"),l=f.toArray(n.color),c=l[0],h=l[1],p=l[2],d=i.width;for(var v=1,m=r.length;v<m;v++)a=((Math.floor(r[v][0])-i.x)*s+(Math.floor(r[v][1])-i.y)*d*s*s)*4,u[a]=c,u[a+1]=h,u[a+2]=p,u[a+3]=255;t.putImageData(o,i.x*s,i.y*s);return},getRect:function(t){var n=e("zrender/shape");return n.get("polygon").getRect(t)},isCover:function(){return!1}},e("zrender/shape/base").derive(t),e("zrender/shape").define("symbol",new t),t}),r("echarts/chart/scatter",["require","../component/base","./calculableBase","zrender/tool/color","../util/shape/symbol","../chart"],function(e){function t(t,n,r,i,s){function v(){f.selectedMap={};var e=s.legend,n=[],i,o,u,c;for(var v=0,g=l.length;v<g;v++){i=l[v],o=i.name;if(i.type==t.CHART_TYPE_SCATTER){l[v]=f.reformOption(l[v]),d[v]=f.query(i,"symbol")||p[v%p.length];if(e){f.selectedMap[o]=e.isSelected(o),h[v]=a.alpha(e.getColor(o),.5),u=e.getItemShape(o);if(u){u.shape="icon";var c=d[v];u.style.brushType=c.match("empty")?"stroke":"both",c=c.replace("empty","").toLowerCase(),c.match("star")&&(u.style.n=c.replace("star","")-0||5,c="star"),c.match("image")&&(u.style.image=c.replace(new RegExp("^image:\\/\\/"),""),u.style.x+=Math.round((u.style.width-u.style.height)/2),u.style.width=u.style.height,c="image"),u.style.iconType=c,e.setItemShape(o,u)}}else f.selectedMap[o]=!0,h[v]=r.getColor(v);f.selectedMap[o]&&n.push(v)}}if(n.length===0)return;m(n);for(var v=0,g=f.shapeList.length;v<g;v++)f.shapeList[v].id=r.newShapeId(f.type),r.addShape(f.shapeList[v])}function m(e){var t,n,r,i,o,u,a={},c,h;for(var p=0,d=e.length;p<d;p++){t=e[p],n=l[t];if(n.data.length===0)continue;o=s.xAxis.getAxis(n.xAxisIndex||0),u=s.yAxis.getAxis(n.yAxisIndex||0),a[t]=[];for(var v=0,m=n.data.length;v<m;v++){r=n.data[v],i=typeof r!="undefined"?typeof r.value!="undefined"?r.value:r:"-";if(i=="-"||i.length<2)continue;c=o.getCoord(i[0]),h=u.getCoord(i[1]),a[t].push([c,h,v,r.name||""])}y(o,u,n.data,a[t]),f.buildMark(n,t,s,{xMarkMap:g(t)?y(o,u,n.data,a[t]):{}})}b(a)}function g(e){var t=l[e],n=[];t.markPoint&&t.markPoint.data&&n.push(t.markPoint.data),t.markLine&&t.markLine.data&&n.push(t.markLine.data);var r,i=n.length;while(i--){r=n[i];for(var s=0,o=r.length;s<o;s++)if(r[s].type=="max"||r[s].type=="min"||r[s].type=="average")return!0}return!1}function y(e,t,n,r){var i={min0:Number.POSITIVE_INFINITY,max0:Number.NEGATIVE_INFINITY,sum0:0,counter0:0,average0:0,min1:Number.POSITIVE_INFINITY,max1:Number.NEGATIVE_INFINITY,sum1:0,counter1:0,average1:0},o;for(var u=0,a=r.length;u<a;u++)o=n[r[u][2]].value||n[r[u][2]],i.min0>o[0]&&(i.min0=o[0],i.minY0=r[u][1],i.minX0=r[u][0]),i.max0<o[0]&&(i.max0=o[0],i.maxY0=r[u][1],i.maxX0=r[u][0]),i.sum0+=o[0],i.counter0++,i.min1>o[1]&&(i.min1=o[1],i.minY1=r[u][1],i.minX1=r[u][0]),i.max1<o[1]&&(i.max1=o[1],i.maxY1=r[u][1],i.maxX1=r[u][0]),i.sum1+=o[1],i.counter1++;var f=s.grid.getX(),l=s.grid.getXend(),c=s.grid.getY(),h=s.grid.getYend();i.average0=(i.sum0/i.counter0).toFixed(2)-0;var p=e.getCoord(i.average0);i.averageLine0=[[p,h],[p,c]],i.minLine0=[[i.minX0,h],[i.minX0,c]],i.maxLine0=[[i.maxX0,h],[i.maxX0,c]],i.average1=(i.sum1/i.counter1).toFixed(2)-0;var d=t.getCoord(i.average1);return i.averageLine1=[[f,d],[l,d]],i.minLine1=[[f,i.minY1],[l,i.minY1]],i.maxLine1=[[f,i.maxY1],[l,i.maxY1]],i}function b(e){var t,n,r,i;for(var s in e){t=l[s],n=e[s];if(t.large&&t.data.length>t.largeThreshold){f.shapeList.push(E(n,f.getItemStyleColor(f.query(t,"itemStyle.normal.color"),s,-1)||h[s]));continue}for(var o=0,u=n.length;o<u;o++)r=n[o],i=w(s,r[2],r[3],r[0],r[1]),i&&f.shapeList.push(i)}}function w(e,t,n,r,i){var o=l[e],u=o.data[t],a=s.dataRange,p;if(a){p=isNaN(u[2])?h[e]:a.getColor(u[2]);if(!p)return null}else p=h[e];var v=f.getSymbolShape(o,e,u,t,n,r,i,d[e],p,"rgba(0,0,0,0)","vertical");return v.zlevel=c,v._mark=!1,v._main=!0,v}function E(e,t){return{shape:"symbol",zlevel:c,_main:!0,hoverable:!1,style:{pointList:e,color:t,strokeColor:t}}}function S(e,t,n,r){var i=s.xAxis.getAxis(e.xAxisIndex),o=s.yAxis.getAxis(e.yAxisIndex),u;if(!n.type||n.type!="max"&&n.type!="min"&&n.type!="average")u=[typeof n.xAxis!="string"&&i.getCoordByIndex?i.getCoordByIndex(n.xAxis||0):i.getCoord(n.xAxis||0),typeof n.yAxis!="string"&&o.getCoordByIndex?o.getCoordByIndex(n.yAxis||0):o.getCoord(n.yAxis||0)];else{var a=typeof n.valueIndex!="undefined"?n.valueIndex:1;u=[r.xMarkMap[n.type+"X"+a],r.xMarkMap[n.type+"Y"+a],r.xMarkMap[n.type+"Line"+a],r.xMarkMap[n.type+a]]}return u}function x(e,t){s=t,T(e)}function T(e){e&&(i=e,l=i.series),f.clear(),v()}function N(e,t){s.dataRange&&(T(),t.needRefresh=!0);return}function C(){var e=f.query(i,"animationDuration"),t=f.query(i,"animationEasing"),n,s,o;for(var u=0,a=f.shapeList.length;u<a;u++)if(f.shapeList[u]._main){if(f.shapeList[u].shape=="symbol")continue;o=l[f.shapeList[u]._seriesIndex],n=f.shapeList[u]._x||0,s=f.shapeList[u]._y||0,r.modShape(f.shapeList[u].id,{scale:[0,0,n,s]},!0),r.animate(f.shapeList[u].id,"").when(f.query(o,"animationDuration")||e,{scale:[1,1,n,s]}).start(f.query(o,"animationEasing")||t)}f.animationMark(e,t)}var o=e("../component/base");o.call(this,t,r);var u=e("./calculableBase");u.call(this,r,i);var a=e("zrender/tool/color"),f=this;f.type=t.CHART_TYPE_SCATTER;var l,c=f.getZlevelBase(),h={},p=t.symbolList,d={};f.getMarkCoord=S,f.animation=C,f.init=x,f.refresh=T,f.ondataRange=N,x(i,s)}return e("../util/shape/symbol"),e("../chart").define("scatter",t),t}),r("echarts/util/shape/candle",["require","zrender/tool/matrix","zrender/shape/base","zrender/shape"],function(e){function n(){this.type="candle"}var t=e("zrender/tool/matrix");return n.prototype={_numberOrder:function(e,t){return t-e},buildPath:function(e,t){t.y.sort(this._numberOrder),e.moveTo(t.x,t.y[3]),e.lineTo(t.x,t.y[2]),e.moveTo(t.x-t.width/2,t.y[2]),e.rect(t.x-t.width/2,t.y[2],t.width,t.y[1]-t.y[2]),e.moveTo(t.x,t.y[1]),e.lineTo(t.x,t.y[0]);return},getRect:function(e){var t;return e.brushType=="stroke"||e.brushType=="fill"?t=e.lineWidth||1:t=0,{x:Math.round(e.x-e.width/2-t/2),y:Math.round(e.y[3]-t/2),width:e.width+t,height:e.y[0]-e.y[3]+t}},isCover:function(e,n,r){if(e.__needTransform&&e._transform){var i=[];t.invert(i,e._transform);var s=[n,r];t.mulVector(s,i,[n,r,1]),n==s[0]&&r==s[1]&&(Math.abs(e.rotation[0])>1e-4||Math.abs(e.position[0])>1e-4||Math.abs(e.position[1])>1e-4||Math.abs(e.scale[0]-1)>1e-4||Math.abs(e.scale[1]-1)>1e-4?e.__needTransform=!0:e.__needTransform=!1),n=s[0],r=s[1]}var o;return e.style.__rect?o=e.style.__rect:(o=this.getRect(e.style),o=[o.x,o.x+o.width,o.y,o.y+o.height],e.style.__rect=o),n>=o[0]&&n<=o[1]&&r>=o[2]&&r<=o[3]?!0:!1}},e("zrender/shape/base").derive(n),e("zrender/shape").define("candle",new n),n}),r("echarts/chart/k",["require","../component/base","./calculableBase","../util/ecData","../util/shape/candle","../chart"],function(e){function t(t,n,r,i,s){function h(){f.selectedMap={};var e={top:[],bottom:[]},n;for(var i=0,o=l.length;i<o;i++)l[i].type==t.CHART_TYPE_K&&(l[i]=f.reformOption(l[i]),n=s.xAxis.getAxis(l[i].xAxisIndex),n.type==t.COMPONENT_TYPE_AXIS_CATEGORY&&e[n.getPosition()].push(i));for(var u in e)e[u].length>0&&p(u,e[u]);for(var i=0,o=f.shapeList.length;i<o;i++)f.shapeList[i].id=r.newShapeId(f.type),r.addShape(f.shapeList[i])}function p(e,t){var n=d(t),r=n.locationMap,i=n.maxDataLength;if(i===0||r.length===0)return;v(i,r);for(var o=0,u=t.length;o<u;o++)f.buildMark(l[t[o]],t[o],s)}function d(e){var t,n,r=s.legend,i=[],o=0;for(var u=0,a=e.length;u<a;u++)t=l[e[u]],n=t.name,r?f.selectedMap[n]=r.isSelected(n):f.selectedMap[n]=!0,f.selectedMap[n]&&i.push(e[u]),o=Math.max(o,t.data.length);return{locationMap:i,maxDataLength:o}}function v(e,t){var n,r,i,o,u,a,f={},c,h,p,d;for(var v=0,g=t.length;v<g;v++){n=t[v],r=l[n],i=r.xAxisIndex||0,o=s.xAxis.getAxis(i),c=r.barWidth||Math.floor(o.getGap()/2),d=r.barMaxWidth,d&&d<c&&(c=d),u=r.yAxisIndex||0,a=s.yAxis.getAxis(u),f[n]=[];for(var y=0,b=e;y<b;y++){if(typeof o.getNameByIndex(y)=="undefined")break;h=r.data[y],p=typeof h!="undefined"?typeof h.value!="undefined"?h.value:h:"-";if(p=="-"||p.length!=4)continue;f[n].push([o.getCoordByIndex(y),c,a.getCoord(p[0]),a.getCoord(p[1]),a.getCoord(p[2]),a.getCoord(p[3]),y,o.getNameByIndex(y)])}}m(f)}function m(e){var n,r,i,s,o,u,a,c,h,p,d,v,m,y,b,w;for(var E=0,S=l.length;E<S;E++){d=l[E],y=e[E];if(d.type==t.CHART_TYPE_K&&typeof y!="undefined"){v=d,n=f.query(v,"itemStyle.normal.lineStyle.width"),r=f.query(v,"itemStyle.normal.lineStyle.color"),i=f.query(v,"itemStyle.normal.lineStyle.color0"),s=f.query(v,"itemStyle.normal.color"),o=f.query(v,"itemStyle.normal.color0"),u=f.query(v,"itemStyle.emphasis.lineStyle.width"),a=f.query(v,"itemStyle.emphasis.lineStyle.color"),c=f.query(v,"itemStyle.emphasis.lineStyle.color0"),h=f.query(v,"itemStyle.emphasis.color"),p=f.query(v,"itemStyle.emphasis.color0");for(var x=0,T=y.length;x<T;x++)b=y[x],m=d.data[b[6]],v=m,w=b[3]<b[2],f.shapeList.push(g(E,b[6],b[7],b[0],b[1],b[2],b[3],b[4],b[5],w?f.query(v,"itemStyle.normal.color")||s:f.query(v,"itemStyle.normal.color0")||o,f.query(v,"itemStyle.normal.lineStyle.width")||n,w?f.query(v,"itemStyle.normal.lineStyle.color")||r:f.query(v,"itemStyle.normal.lineStyle.color0")||i,w?f.query(v,"itemStyle.emphasis.color")||h||s:f.query(v,"itemStyle.emphasis.color0")||p||o,f.query(v,"itemStyle.emphasis.lineStyle.width")||u||n,w?f.query(v,"itemStyle.emphasis.lineStyle.color")||a||r:f.query(v,"itemStyle.emphasis.lineStyle.color0")||c||i))}}}function g(e,t,n,r,i,s,o,u,f,h,p,d,v,m,g){var y={shape:"candle",zlevel:c,clickable:!0,style:{x:r,y:[s,o,u,f],width:i,color:h,strokeColor:d,lineWidth:p,brushType:"both"},highlightStyle:{color:v,strokeColor:g,lineWidth:m},_seriesIndex:e};return a.pack(y,l[e],e,l[e].data[t],t,n),y}function y(e,t,n){var r=s.xAxis.getAxis(e.xAxisIndex),i=s.yAxis.getAxis(e.yAxisIndex);return[typeof n.xAxis!="string"&&r.getCoordByIndex?r.getCoordByIndex(n.xAxis||0):r.getCoord(n.xAxis||0),typeof n.yAxis!="string"&&i.getCoordByIndex?i.getCoordByIndex(n.yAxis||0):i.getCoord(n.yAxis||0)]}function b(e,t){s=t,w(e)}function w(e){e&&(i=e,l=i.series),f.clear(),h()}function E(e){var t={};for(var n=0,i=e.length;n<i;n++)t[e[n][0]]=e[n];var o,u,c,h,p,d;for(var n=0,i=f.shapeList.length;n<i;n++){p=f.shapeList[n]._seriesIndex;if(t[p]&&!t[p][3]&&f.shapeList[n].shape=="candle"){d=a.get(f.shapeList[n],"dataIndex"),h=l[p];if(t[p][2]&&d==h.data.length-1){r.delShape(f.shapeList[n].id);continue}if(!t[p][2]&&d===0){r.delShape(f.shapeList[n].id);continue}u=s.xAxis.getAxis(h.xAxisIndex||0).getGap(),o=t[p][2]?u:-u,c=0,r.animate(f.shapeList[n].id,"").when(500,{position:[o,c]}).start()}}}function S(){var e=f.query(i,"animationDuration"),t=f.query(i,"animationEasing"),n,s,o;for(var u=0,a=f.shapeList.length;u<a;u++)f.shapeList[u].shape=="candle"&&(o=l[f.shapeList[u]._seriesIndex],n=f.shapeList[u].style.x,s=f.shapeList[u].style.y[0],r.modShape(f.shapeList[u].id,{scale:[1,0,n,s]},!0),r.animate(f.shapeList[u].id,"").when(f.query(o,"animationDuration")||e,{scale:[1,1,n,s]}).start(f.query(o,"animationEasing")||t));f.animationMark(e,t)}var o=e("../component/base");o.call(this,t,r);var u=e("./calculableBase");u.call(this,r,i);var a=e("../util/ecData"),f=this;f.type=t.CHART_TYPE_K;var l,c=f.getZlevelBase();f.getMarkCoord=y,f.animation=S,f.init=b,f.refresh=w,f.addDataAnimation=E,b(i,s)}return e("../util/shape/candle"),e("../chart").define("k",t),t}),r("echarts/chart/radar",["require","../component/base","./calculableBase","../util/ecData","zrender/tool/color","../util/accMath","../chart"],function(e){function t(t,n,r,i,s){function y(){var e=s.legend;l.selectedMap={},v=[],g=0;var n;for(var o=0,u=c.length;o<u;o++)c[o].type==t.CHART_TYPE_RADAR&&(h=l.reformOption(c[o]),n=h.name||"",l.selectedMap[n]=e?e.isSelected(n):!0,l.selectedMap[n]&&(d=[h,i],l.deepQuery(d,"calculable")&&x(o),b(o),l.buildMark(c[o],o,s)));for(var o=0,u=l.shapeList.length;o<u;o++)l.shapeList[o].id=r.newShapeId(l.type),r.addShape(l.shapeList[o])}function b(e){var t=s.legend,n,i=h.data,o,u,a,f=l.deepQuery(d,"calculable");for(var c=0;c<i.length;c++){u=i[c].name||"",l.selectedMap[u]=t?t.isSelected(u):!0;if(!l.selectedMap[u])continue;t?(o=t.getColor(u),n=t.getItemShape(u),n&&(n.style.brushType=l.deepQuery([i[c],h],"itemStyle.normal.areaStyle")?"both":"stroke",t.setItemShape(u,n))):o=r.getColor(c),a=w(h.polarIndex,i[c]),E(a,o,c,e),S(a,o,i[c],e,c,f),g++}}function w(e,t){var n=[],r,i=s.polar;for(var o=0,u=t.value.length;o<u;o++)r=i.getVector(e,o,t.value[o]),r&&n.push(r);return n}function E(e,t,n,r){var i;for(var s=0,o=e.length;s<o;s++)i=l.getSymbolShape(c[r],r,c[r].data[n],n,"",e[s][0],e[s][1],m[g%m.length],t,"#fff","vertical"),i.zlevel=p+1,l.shapeList.push(i)}function S(e,t,n,r,i,o){var u=[n,h],d=l.getItemStyleColor(l.deepQuery(u,"itemStyle.normal.color"),r,i,n),v=l.deepQuery(u,"itemStyle.normal.lineStyle.width"),m=l.deepQuery(u,"itemStyle.normal.lineStyle.type"),g=l.deepQuery(u,"itemStyle.normal.areaStyle.color"),y=l.deepQuery(u,"itemStyle.normal.areaStyle"),b={shape:"polygon",zlevel:p,style:{pointList:e,brushType:y?"both":"stroke",color:g||d||f.alpha(t,.5),strokeColor:d||t,lineWidth:v,lineType:m},highlightStyle:{brushType:l.deepQuery(u,"itemStyle.emphasis.areaStyle")||y?"both":"stroke",color:l.deepQuery(u,"itemStyle.emphasis.areaStyle.color")||g||d||f.alpha(t,.5),strokeColor:l.getItemStyleColor(l.deepQuery(u,"itemStyle.emphasis.color"),r,i,n)||d||t,lineWidth:l.deepQuery(u,"itemStyle.emphasis.lineStyle.width")||v,lineType:l.deepQuery(u,"itemStyle.emphasis.lineStyle.type")||m}};a.pack(b,c[r],r,n,i,n.name,s.polar.getIndicator(c[r].polarIndex)),o&&(b.draggable=!0,l.setCalculable(b)),l.shapeList.push(b)}function x(e){var t=l.deepQuery(d,"polarIndex");if(!v[t]){var n=s.polar.getDropBox(t);n.zlevel=p,l.setCalculable(n),a.pack(n,c,e,undefined,-1),l.shapeList.push(n),v[t]=!0}}function T(e,t){if(!l.isDragend||!e.target)return;var n=e.target,r=a.get(n,"seriesIndex"),i=a.get(n,"dataIndex");s.legend&&s.legend.del(c[r].data[i].name),c[r].data.splice(i,1),t.dragOut=!0,t.needRefresh=!0,l.isDragend=!1;return}function N(t,n){if(!l.isDrop||!t.target)return;var r=t.target,o=t.dragged,u=a.get(r,"seriesIndex"),f=a.get(r,"dataIndex"),h,p=s.legend,d;if(f==-1)h={value:a.get(o,"value"),name:a.get(o,"name")},c[u].data.push(h),p&&p.add(h.name,o.style.color||o.style.strokeColor);else{var v=e("../util/accMath");h=c[u].data[f],p&&p.del(h.name),h.name+=i.nameConnector+a.get(o,"name"),d=a.get(o,"value");for(var m=0;m<d.length;m++)h.value[m]=v.accAdd(h.value[m],d[m]);p&&p.add(h.name,o.style.color||o.style.strokeColor)}n.dragIn=n.dragIn||!0,l.isDrop=!1;return}function C(e,t){s=t,k(e)}function k(e){e&&(i=e,c=i.series),l.clear(),y()}function L(){var e=l.query(i,"animationDuration"),t=l.query(i,"animationEasing"),n,o,u,f,h,p=s.polar,d,v,m,g;for(var y=0,b=l.shapeList.length;y<b;y++)l.shapeList[y].shape=="polygon"&&(v=l.shapeList[y],o=a.get(v,"seriesIndex"),n=a.get(v,"dataIndex"),f=c[o],u=f.data[n],h=l.deepQuery([u,f,i],"polarIndex"),d=p.getCenter(h),m=d[0],g=d[1],r.modShape(l.shapeList[y].id,{scale:[.1,.1,m,g]},!0),r.animate(v.id,"").when((l.query(f,"animationDuration")||e)+n*100,{scale:[1,1,m,g]}).start(l.query(f,"animationEasing")||t));l.animationMark(e,t)}var o=e("../component/base");o.call(this,t,r);var u=e("./calculableBase");u.call(this,r,i);var a=e("../util/ecData"),f=e("zrender/tool/color"),l=this;l.type=t.CHART_TYPE_RADAR;var c,h,p=l.getZlevelBase(),d,v,m=t.symbolList,g;l.animation=L,l.init=C,l.refresh=k,l.ondrop=N,l.ondragend=T,C(i,s)}return e("../chart").define("radar",t),t}),r("echarts/util/shape/chord",["require","zrender/tool/util","zrender/shape/base","zrender/shape"],function(e){function n(){this.type="chord"}var t=e("zrender/tool/util"),r=t.getContext();return n.prototype={buildPath:function(e,t){var n=Math.PI*2,r=t.center[0],i=t.center[1],s=t.r,o=t.source0/180*Math.PI,u=t.source1/180*Math.PI,a=t.target0/180*Math.PI,f=t.target1/180*Math.PI,l=r+Math.cos(n-o)*s,c=i-Math.sin(n-o)*s,h=r+Math.cos(n-u)*s,p=i-Math.sin(n-u)*s,d=r+Math.cos(n-a)*s,v=i-Math.sin(n-a)*s,m=r+Math.cos(n-f)*s,g=i-Math.sin(n-f)*s;e.moveTo(l,c),e.arc(r,i,t.r,o,u,!1),e.bezierCurveTo((r-h)*.7+h,(i-p)*.7+p,(r-d)*.7+d,(i-v)*.7+v,d,v);if(t.source0===t.target0&&t.source1===t.target1)return;e.arc(r,i,t.r,a,f,!1),e.bezierCurveTo((r-m)*.7+m,(i-g)*.7+g,(r-l)*.7+l,(i-c)*.7+c,l,c)},getRect:function(){return{x:0,y:0,width:0,height:0}},isCover:function(e,t,i){if(!r.isPointInPath)return!1;if(e.__needTransform&&e._transform){var s=[];matrix.invert(s,e._transform);var o=[t,i];matrix.mulVector(o,s,[t,i,1]),t==o[0]&&i==o[1]&&(Math.abs(e.rotation[0])>1e-4||Math.abs(e.position[0])>1e-4||Math.abs(e.position[1])>1e-4||Math.abs(e.scale[0]-1)>1e-4||Math.abs(e.scale[1]-1)>1e-4?e.__needTransform=!0:e.__needTransform=!1),t=o[0],i=o[1]}return r.beginPath(),n.prototype.buildPath.call(null,r,e.style),r.closePath(),r.isPointInPath(t,i)}},e("zrender/shape/base").derive(n),e("zrender/shape").define("chord",new n),n}),r("echarts/util/kwargs",[],function(){function e(e,t){var n=new RegExp("(\\/\\*[\\w\\'\\,\\(\\)\\s\\r\\n\\*]*\\*\\/)|(\\/\\/[\\w\\s\\'][^\\n\\r]*$)|(<![\\-\\-\\s\\w\\>\\/]*>)","gim"),r=new RegExp("\\s+","gim"),i=new RegExp("function.*?\\((.*?)\\)","i"),s=e.toString().replace(n,"").replace(r,"").match(i)[1].split(",");return t!==Object(t)&&(t={}),function(){var n=Array.prototype.slice.call(arguments),r=n[n.length-1];r&&r.constructor===Object?n.pop():r={};for(var i=0;i<s.length;i++){var o=s[i];o in r?n[i]=r[o]:o in t&&n[i]===undefined&&(n[i]=t[o])}return e.apply(this,n)}}return e}),r("echarts/util/ndarray",["require","./kwargs"],function(e){function d(e){if(typeof e=="undefined")return"number";switch(Object.prototype.toString.call(e)){case"[object Int32Array]":return"int32";case"[object Int16Array]":return"int16";case"[object Int8Array]":return"int8";case"[object Uint32Array]":return"uint32";case"[object Uint16Array]":return"uint16";case"[object Uint8Array]":return"uint8";case"[object Uint8ClampedArray]":return"uint8c";case"[object Float32Array]":return"float32";case"[object Float64Array]":return"float64";default:return"number"}}function m(e,t){if(e.indexOf(":")>=0){var n=e.split(/\s*:\s*/),r=parseInt(n[2]||1,10),i,s;if(r===0)throw new Error("Slice step cannot be zero");return r>0?(i=parseInt(n[0]||0,10),s=parseInt(n[1]||t,10)):(i=parseInt(n[0]||t-1,10),s=parseInt(n[1]||-1,10)),i<0&&(i=t+i),s<0&&n[1]&&(s=t+s),r>0?(i=Math.max(Math.min(t,i),0),s=Math.max(Math.min(t,s),0)):(i=Math.max(Math.min(t-1,i),-1),s=Math.max(Math.min(t-1,s),-1)),[i,s,r]}var i=parseInt(e,10);i<0&&(i=t+i);if(i<0||i>t)throw new Error(N(e));return i=Math.max(Math.min(t-1,i),0),[i,i+1,1]}function g(e){var t=e[0];for(var n=1;n<e.length;n++)t*=e[n];return t}function y(e){var t=1,n=e[0];while(n instanceof Array)n=n[0],t++;return t}function b(e){var t=[e.length],n=e[0];while(n instanceof Array)t.push(n.length),n=n[0];return t}function w(e,t){if(t==e.length-1)return 1;var n=e[t+1];for(var r=t+2;r<e.length;r++)n*=e[r];return n}function E(e){var t=[],n=1,r=g(e);for(var i=0;i<e.length;i++)n*=e[i],t.push(r/n);return t}function S(e,t){if(e.length!==t.length)return!1;for(var n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}function x(e,t){return"Shape ("+e.toString()+") ("+t.toString()+") could not be broadcast together"}function T(e){return"Axis "+e+" out of bounds"}function N(e){return"Index "+e+" out of bounds"}var t=e("./kwargs"),n=Array.prototype.slice;this.Int32Array=window.Int32Array||Array,this.Int16Array=window.Int16Array||Array,this.Int8Array=window.Int8Array||Array,this.Uint32Array=window.Uint32Array||Array,this.Uint16Array=window.Uint16Array||Array,this.Uint8Array=window.Uint8Array||Array,this.Float32Array=window.Float32Array||Array,this.Float64Array=window.Float64Array||Array;var r={int32:this.Int32Array,int16:this.Int16Array,int8:this.Int8Array,uint32:this.Uint32Array,uint16:this.Uint16Array,uint8:this.Uint8Array,uint8c:this.Uint8ClampedArray,float32:this.Float32Array,float64:this.Float64Array,number:Array},i={int32:4,int16:2,int8:1,uint32:4,uint16:2,uint8:1,uint8c:1,float32:4,float64:8,number:1},s=0,o=1,u=2,a=3,f=4,l=5,c=6,h=7,p=8,v=function(e){var t=arguments[arguments.length-1];typeof t=="string"?this._dtype=t:this._dtype=d(e);if(e&&typeof e!="string"){if(e instanceof v)return e._dtype=this._dtype,e;typeof e.length!="undefined"?this.initFromArray(e):typeof e=="number"&&this.initFromShape.apply(this,arguments)}else this._array=new r[this._dtype],this._shape=[0],this._size=0};return v.prototype={initFromArray:function(e){function i(e,r,s){var o=s.length;for(var u=0;u<o;u++)e<t-1?i(e+1,r,s[u]):r[n++]=s[u]}var t=y(e),n=0,s=b(e),o=g(s);return this._array=new r[this._dtype](o),i(0,this._array,e),this._shape=s,this._size=o,this},initFromShape:function(e){typeof e=="number"&&(e=Array.prototype.slice.call(arguments));if(e){var t=g(e);if(this._dtype==="number"){this._array=[];var n=this._array;for(var i=0;i<t;i++)n[i]=0}else this._array=new r[this._dtype](t)}return this._shape=e,this._size=g(e),this},fill:function(e){var t=this._array;for(var n=0;n<t.length;n++)t[n]=e;return this},shape:function(){return this._shape.slice()},size:function(){return this._size},dtype:function(){return this._dtype},dimension:function(){return this._shape.length},strides:function(){var e=E(this._shape),t=i[this._dtype];for(var n=0;n<e.length;n++)e[n]*=t;return e},reshape:function(e){typeof e=="number"&&(e=Array.prototype.slice.call(arguments));if(!this._isShapeValid(e))throw new Error("Total size of new array must be unchanged");return this._shape=e,this},_isShapeValid:function(e){return g(e)===this._size},resize:function(e){typeof e=="number"&&(e=Array.prototype.slice.call(arguments));var t=g(e);if(t<this._size)this._dtype==="number"&&(this._array.length=t);else if(this._dtype==="number")for(var n=this._array.length;n<t;n++)this._array[n]=0;else{var i=new r[this._dtype](t),s=this._array;for(var n=0;n<s.length;n++)i[n]=s[n];this._array=i}return this._shape=e,this._size=t,this},transpose:t(function(e,t){var n=[];for(var r=0;r<this._shape.length;r++)n.push(r);typeof e=="undefined"&&(e=n.slice());for(var r=0;r<e.length;r++)if(e[r]>=this._shape.length)throw new Error(T(e[r]));if(e.length<=1)return this;var i=n.slice();for(var r=0;r<Math.floor(e.length/2);r++)for(var s=e.length-1;s>=Math.ceil(e.length/2);s--)i[e[r]]=e[s],i[e[s]]=e[r];return this._transposelike(i,t)}),swapaxes:t(function(e,t,n){return this.transpose([e,t],n)}),rollaxis:t(function(e,t,n){if(e>=this._shape.length)throw new Error(T(e));var r=[];for(var i=0;i<this._shape.length;i++)r.push(i);return r.splice(e,1),r.splice(t,0,e),this._transposelike(r,n)},{start:0}),_transposelike:function(e,t){function p(e,t,r){var u=i[e],a=s[e],f=c[e];if(e<o-1)for(var l=0;l<u;l++)p(e+1,t+a*l,r+f*l);else for(var l=0;l<u;l++)h[r+l]=n[t+a*l]}var n=this._array,i=this._shape.slice(),s=E(this._shape),o=i.length,u=[],a=[];for(var f=0;f<e.length;f++){var l=e[f];a[f]=i[l],u[f]=s[l]}s=u,i=a,this._shape=i;var c=E(this._shape);t||(t=new v,t._shape=this._shape.slice(),t._dtype=this._dtype,t._size=this._size);var h=new r[this._dtype](this._size);return t._array=h,p(0,0,0),t},repeat:t(function(e,t,n){var r;typeof t=="undefined"?(r=[this._size],t=0):r=this._shape.slice();var i=r.slice();r[t]*=e;if(!n)n=new v(this._dtype),n.initFromShape(r);else if(!S(r,n._shape))throw new Error(x(r,n._shape));var s=n._array,o=w(i,t),u=i[t],a=this._array,f=o*u;for(var l=0;l<this._size;l+=f)for(var c=0;c<o;c++){var h=l+c,p=l*e+c;for(var d=0;d<u;d++){for(var m=0;m<e;m++)s[p]=a[h],p+=o;h+=o}}return n}),choose:function(){console.warn("TODO")},take:function(){console.warn("TODO")},tile:function(){console.warn("TODO")},_withPreprocess1:function(e,t,n,r){var i=this._array;if(!this._size)return;if(typeof e!="undefined"){e<0&&(e=this._shape.length+e);if(e>=this._shape.length||e<0)throw new Error(T(e));var s=this._shape.slice();s.splice(e,1);if(t&&!S(s,t._shape))throw new Error(x(s,t._shape));t||(t=new v(this._dtype),t.initFromShape(s));var o=t._array,u=w(this._shape,e),a=this._shape[e],f=u*a;return n.call(this,o,i,f,a,u),t}return r.call(this,i)},_withPreprocess2:function(e,t,n,r){var i=this._array;if(!this._size)return;if(t&&!S(this._shape,t._shape))throw new Error(x(this._shape,t._shape));t||(t=new v(this._dtype),t.initFromShape(this._shape));var s=t._array;if(typeof e!="undefined"){e<0&&(e=this._shape.length+e);if(e>=this._shape.length||e<0)throw new Error(T(e));if(e>=this._shape.length)throw new Error(T(e));var o=w(this._shape,e),u=this._shape[e],a=o*u;n.call(this,s,i,a,u,o)}else t.reshape([this._size]),r.call(this,s,i);return t},max:t(function(){function e(e,t,n,r,i){var s=0;for(var o=0;o<this._size;o+=n)for(var u=0;u<i;u++){var a=u+o,f=t[a];for(var l=0;l<r;l++){var c=t[a];c>f&&(f=c),a+=i}e[s++]=f}}function t(e){var t=e[0];for(var n=1;n<this._size;n++)e[n]>t&&(t=e[n]);return t}return function(n,r){return this._withPreprocess1(n,r,e,t)}}()),min:t(function(){function e(e,t,n,r,i){var s=0;for(var o=0;o<this._size;o+=n)for(var u=0;u<i;u++){var a=u+o,f=t[a];for(var l=0;l<r;l++){var c=t[a];c<f&&(f=c),a+=i}e[s++]=f}}function t(e){var t=e[0];for(var n=1;n<this._size;n++)e[n]<t&&(t=e[n]);return t}return function(n,r){return this._withPreprocess1(n,r,e,t)}}()),argmax:t(function(){function e(e,t,n,r,i){var s=0;for(var o=0;o<this._size;o+=n)for(var u=0;u<i;u++){var a=0,f=u+o,l=t[f];for(var c=0;c<r;c++){var h=t[f];h>l&&(l=h,a=c),f+=i}e[s++]=a}}function t(e){var t=e[0],n=0;for(var r=1;r<this._size;r++)e[r]>t&&(n=r,t=e[r]);return n}return function(n,r){return this._withPreprocess1(n,r,e,t)}}()),argmin:t(function(){function e(e,t,n,r,i){var s=0;for(var o=0;o<this._size;o+=n)for(var u=0;u<i;u++){var a=0,f=u+o,l=t[f];for(var c=0;c<r;c++){var h=t[f];h<l&&(l=h,a=c),f+=i}e[s++]=a}}function t(e){var t=e[0],n=0;for(var r=1;r<this._size;r++)e[r]<t&&(n=r,t=e[r]);return n}return function(n,r){return this._withPreprocess1(n,r,e,t)}}()),sum:t(function(){function e(e,t,n,r,i){var s=0;for(var o=0;o<this._size;o+=n)for(var u=0;u<i;u++){var a=0,f=u+o;for(var l=0;l<r;l++)a+=t[f],f+=i;e[s++]=a}}function t(e){var t=0;for(var n=0;n<this._size;n++)t+=e[n];return t}return function(n,r){return this._withPreprocess1(n,r,e,t)}}()),prod:t(function(){function e(e,t,n,r,i){var s=0;for(var o=0;o<this._size;o+=n)for(var u=0;u<i;u++){var a=1,f=u+o;for(var l=0;l<r;l++)a*=t[f],f+=i;e[s++]=a}}function t(e){var t=1;for(var n=0;n<this._size;n++)t*=e[n];return t}return function(n,r){return this._withPreprocess1(n,r,e,t)}}()),mean:t(function(){function e(e,t,n,r,i){var s=0;for(var o=0;o<this._size;o+=n)for(var u=0;u<i;u++){var a=0,f=u+o;for(var l=0;l<r;l++)a+=t[f],f+=i;var c=a/r;e[s++]=c}}function t(e){var t=0,n=e.length;for(var r=0;r<n;r++)t+=e[r];var i=t/n;return i}return function(n,r){return this._withPreprocess1(n,r,e,t)}}()),"var":t(function(){function e(e,t,n,r,i){var s=0;for(var o=0;o<this._size;o+=n)for(var u=0;u<i;u++){var a=0,f=u+o;for(var l=0;l<r;l++)a+=t[f],f+=i;var c=a/r,h=0;f=u+o;for(var l=0;l<r;l++){var p=t[f]-c;h+=p*p,f+=i}e[s++]=h/r}}function t(e){var t=0,n=e.length;for(var r=0;r<n;r++)t+=e[r];var i=t/n,s=0;for(var r=0;r<n;r++){var o=e[r]-i;s+=o*o}return s/n}return function(n,r){return this._withPreprocess1(n,r,e,t)}}()),std:t(function(){function e(e,t,n,r,i){var s=0;for(var o=0;o<this._size;o+=n)for(var u=0;u<i;u++){var a=0,f=u+o;for(var l=0;l<r;l++)a+=t[f],f+=i;var c=a/r,h=0;f=u+o;for(var l=0;l<r;l++){var p=t[f]-c;h+=p*p,f+=i}e[s++]=Math.sqrt(h/r)}}function t(e){var t=0,n=e.length;for(var r=0;r<n;r++)t+=e[r];var i=t/n,s=0;for(var r=0;r<n;r++){var o=e[r]-i;s+=o*o}return Math.sqrt(s/n)}return function(n,r){return this._withPreprocess1(n,r,e,t)}}()),ptp:t(function(){function e(e,t,n,r,i){var s=0;for(var o=0;o<this._size;o+=n)for(var u=0;u<i;u++){var a=o+u,f=t[a],l=t[a];for(var c=0;c<r;c++){var h=t[a];h<f&&(f=h),h>l&&(l=h),a+=i}e[s++]=l-f}}function t(e){var t=e[0],n=e[0];for(var r=1;r<this._size;r++)e[r]<t&&(t=e[r]),e[r]>n&&(n=e[r]);return n-t}return function(n,r){return this._withPreprocess1(n,r,e,t)}}()),sort:t(function(e,t){e<0&&(e=this._shape.length+e);var n;t==="ascending"?n=function(e,t){return e-t}:t==="descending"&&(n=function(e,t){return t-e});var r=this._array,i=w(this._shape,e),s=this._shape[e],o=i*s,u=new Array(s);for(var a=0;a<this._size;a+=o)for(var f=0;f<i;f++){var l=a+f;for(var c=0;c<s;c++)u[c]=r[l],l+=i;u.sort(n);var l=a+f;for(var c=0;c<s;c++)r[l]=u[c],l+=i}return this},{axis:-1,order:"ascending"}),argsort:t(function(e,t,n){e<0&&(e=this._shape.length+e);if(!this._size)return;if(n&&!S(this._shape,n._shape))throw new Error(x(this._shape,n._shape));n||(n=new v(this._dtype),n.initFromShape(this._shape));var r=n._array,i;t==="ascending"?i=function(e,t){return f[e]-f[t]}:t==="descending"&&(i=function(e,t){return f[t]-f[e]});var s=this._array,o=w(this._shape,e),u=this._shape[e],a=o*u,f=new Array(u),l=new Array(u);for(var c=0;c<this._size;c+=a)for(var h=0;h<o;h++){var p=c+h;for(var d=0;d<u;d++)f[d]=s[p],l[d]=d,p+=o;l.sort(i);var p=c+h;for(var d=0;d<u;d++)r[p]=l[d],p+=o}return n},{axis:-1,order:"ascending"}),cumsum:t(function(){function e(e,t,n,r,i){for(var s=0;s<this._size;s+=n)for(var o=0;o<i;o++){var u=s+o,a=u;e[u]=t[u];for(var f=1;f<r;f++)a=u,u+=i,e[u]=e[a]+t[u]}}function t(e,t){e[0]=t[0];for(var n=1;n<e.length;n++)e[n]=e[n-1]+t[n]}return function(n,r){return this._withPreprocess2(n,r,e,t)}}()),cumprod:t(function(){function e(e,t,n,r,i){for(var s=0;s<this._size;s+=n)for(var o=0;o<i;o++){var u=s+o,a=u;e[u]=t[u];for(var f=1;f<r;f++)a=u,u+=i,e[u]=e[a]*t[u]}}function t(e,t){e[0]=t[0];for(var n=1;n<e.length;n++)e[n]=e[n-1]*t[n]}return function(n,r){return this._withPreprocess2(n,r,e,t)}}()),dot:function(){console.warn("TODO")},map:function(e,t){var n=this._array,r=this._array,i=n[0],s=n[0],o=this._size;for(var u=1;u<o;u++){var a=n[u];a<i&&(i=a),a>s&&(s=a)}var f=s-i,l=t-e;for(var u=0;u<o;u++)if(f===0)r[u]=e;else{var a=n[u],c=(a-i)/f;r[u]=l*c+e}return this},add:function(e,t){return this.binaryOperation(this,e,s,t)},sub:function(e,t){return this.binaryOperation(this,e,o,t)},mul:function(e,t){return this.binaryOperation(this,e,u,t)},div:function(e,t){return this.binaryOperation(this,e,a,t)},mod:function(e,t){return this.binaryOperation(this,e,f,t)},and:function(e,t){return this.binaryOperation(this,e,l,t)},or:function(e,t){return this.binaryOperation(this,e,c,t)},xor:function(e,t){return this.binaryOperation(this,e,h,t)},equal:function(e){return this.binaryOperation(this,e,p,out)},binaryOperation:function(e,t,n,r){var i=[],d=typeof e=="number",m=typeof t=="number";if(d)i=t._shape.slice();else if(m)i=e._shape.slice();else{var g=e._shape.length-1,y=t._shape.length-1,b=e,E=t;while(g>=0&&y>=0){if(e._shape[g]==1)i.unshift(t._shape[y]),b=e.repeat(t._shape[y],g);else if(t._shape[y]==1)i.unshift(e._shape[g]),E=t.repeat(e._shape[g],y);else{if(t._shape[y]!=e._shape[g])throw new Error(x(e._shape,t._shape));i.unshift(e._shape[g])}g--,y--}for(var T=g;T>=0;T--)i.unshift(e._shape[T]);for(var T=y;T>=0;T--)i.unshift(t._shape[T]);e=b,t=E}if(!r)r=new v(this._dtype),r.initFromShape(i);else if(!S(i,r._shape))throw new Error(x(i,r._shape));var N=r._array,C,k,L,A;d?(C=t._shape.length-1,k=!1,L=e,A=t._array):m?(C=e._shape.length-1,k=!0,A=t,L=e._array):(C=Math.abs(e._shape.length-t._shape.length),k=e._shape.length>=t._shape.length,L=e._array,A=t._array);var O=w(i,C),M=i[C],_=O*M,D=r._size/_,P,H,B,j=0;if(k)if(m)for(var F=0;F<D;F++)for(var T=0;T<_;T++){P=L[j],H=A;switch(n){case s:B=P+H;break;case o:B=P-H;break;case u:B=P*H;break;case a:B=P/H;break;case f:B=P%H;break;case l:B=P&H;break;case c:B=P|H;break;case h:B=P^H;break;case p:B=P==H;break;default:throw new Error("Unkown operation "+n)}N[j]=B,j++}else for(var F=0;F<D;F++)for(var T=0;T<_;T++){P=L[j],H=A[T];switch(n){case s:B=P+H;break;case o:B=P-H;break;case u:B=P*H;break;case a:B=P/H;break;case f:B=P%H;break;case l:B=P&H;break;case c:B=P|H;break;case h:B=P^H;break;case p:B=P==H;break;default:throw new Error("Unkown operation "+n)}N[j]=B,j++}else if(d)for(var F=0;F<D;F++)for(var T=0;T<_;T++){P=L,H=A[j];switch(n){case s:B=P+H;break;case o:B=P-H;break;case u:B=P*H;break;case a:B=P/H;break;case f:B=P%H;break;case l:B=P&H;break;case c:B=P|H;break;case h:B=P^H;break;case p:B=P==H;break;default:throw new Error("Unkown operation "+n)}N[j]=B,j++}else for(var F=0;F<D;F++)for(var T=0;T<_;T++){P=L[j],H=A[T];switch(n){case s:B=P+H;break;case o:B=P-H;break;case u:B=P*H;break;case a:B=P/H;break;case f:B=P%H;break;case l:B=P&H;break;case c:B=P|H;break;case h:B=P^H;break;case p:B=P==H;break;default:throw new Error("Unkown operation "+n)}N[j]=B,j++}return r},neg:function(){var e=this._array;for(var t=0;t<this._size;t++)e[t]=-e[t];return this},sin:function(){return this._mathAdapter(Math.sin)},cos:function(){return this._mathAdapter(Math.cos)},tan:function(){return this._mathAdapter(Math.tan)},abs:function(){return this._mathAdapter(Math.abs)},log:function(){return this._mathAdapter(Math.log)},sqrt:function(){return this._mathAdapter(Math.sqrt)},ceil:function(){return this._mathAdapter(Math.ceil)},floor:function(){return this._mathAdapter(Math.floor)},pow:function(e){var t=this._array;for(var n=0;n<this._size;n++)t[n]=Math.pow(t[n],e);return this},_mathAdapter:function(e){var t=this._array;for(var n=0;n<this._size;n++)t[n]=e(t[n]);return this},round:function(e){e=Math.floor(e||0);var t=Math.pow(10,e),n=this._array;if(e===0)for(var r=0;r<this._size;r++)n[r]=Math.round(n[r]);else for(var r=0;r<this._size;r++)n[r]=Math.round(n[r]*t)/t;return this},clip:function(e,t){var n=this._array;for(var r=0;r<this._size;r++)n[r]=Math.max(Math.min(n[r],t),e);return this},get:function(e,t){function l(e,t){var r=i[e],s=n[e];if(e<o-1)if(r[2]>0)for(var c=r[0];c<r[1];c+=r[2])l(e+1,t+s*c);else for(var c=r[0];c>r[1];c+=r[2])l(e+1,t+s*c);else if(r[2]>0)for(var c=r[0];c<r[1];c+=r[2])for(var h=0;h<s;h++)u[f++]=a[c*s+h+t];else for(var c=r[0];c>r[1];c+=r[2])for(var h=0;h<s;h++)u[f++]=a[c*s+h+t]}typeof e=="number"&&(e=e.toString());var n=E(this._shape),r=this._parseRanges(e),i=r[0],s=r[1];if(i.length>this._shape.length)throw new Error("Too many indices");var o=i.length,u;s.length?(t=new v(this._dtype),t.initFromShape(s),u=t._array):u=[];var a=this._array,f=0;return l(0,0),s.length?t:u[0]},set:function(e,t){typeof e=="number"&&(e=e.toString());var n=E(this._shape),r=this._parseRanges(e),i=r[0],s=r[1];if(i.length>this._shape.length)throw new Error("Too many indices");var o=typeof t=="number",u=i.length,a=this._array;if(o)var f=t;else{if(!S(s,t.shape()))throw new Error(x(s,t.shape()));var f=t._array}var l=0,c=function(e,t){var r=i[e],s=n[e];if(e<u-1)if(r[2]>0)for(var h=r[0];h<r[1];h+=r[2])c(e+1,t+s*h);else for(var h=r[0];h>r[1];h+=r[2])c(e+1,t+s*h);else if(r[2]>0)for(var h=r[0];h<r[1];h+=r[2])for(var p=0;p<s;p++)o?a[h*s+p+t]=f:a[h*s+p+t]=f[l++];else for(var h=r[0];h>r[1];h+=r[2])for(var p=0;p<s;p++)o?a[h*s+p+t]=f:a[h*s+p+t]=f[l++]};return c(0,0),this},insert:t(function(e,t,n){var i=this._array,s=!1;typeof e=="number"&&(e=[e],s=!0),typeof t=="number"?t=new v([t]):t instanceof Array&&(t=new v(t)),typeof n=="undefined"&&(this._shape=[this._size],n=0);var o=e[0],u=this._shape[n];for(var a=0;a<e.length;a++){e[a]<0&&(e[a]=u+e[a]);if(e[a]>u)throw new Error(N(e[a]));if(e[a]<o)throw new Error("Index must be in ascending order");o=e[a]}var f=this._shape.slice();s?f.splice(n,1):f[n]=e.length;var l=t._shape,c=l.length-1,h=f.length-1,p=t;while(c>=0&&h>=0){if(l[c]===1)p=t.repeat(f[h],c);else if(l[c]!==f[h])throw new Error(x(l,f));c--,h--}t=p;var d=w(this._shape,n),u=this._shape[n],m=u*d,y=this._size/m,b=e.length,E=new Uint32Array(y*b),S=0;for(var T=0;T<this._size;T+=m)for(var a=0;a<b;a++){var C=e[a];E[S++]=T+C*d}var k=this._shape.slice();k[n]+=e.length;var L=g(k);if(this._array.length<L)var i=new r[this._dtype](L);else var i=this._array;var A=this._array,O=t._array,M=E.length-1,_=this._size,D=E[M],P=L-1,H=t._size-1;while(M>=0){for(var a=_-1;a>=D;a--)i[P--]=A[a];_=D,D=E[--M];for(var a=0;a<d;a++)H<0&&(H=t._size-1),i[P--]=O[H--]}for(var a=_-1;a>=0;a--)i[P--]=A[a];return this._array=i,this._shape=k,this._size=L,this}),append:function(){console.warn("TODO")},"delete":t(function(e,t){var n=this._array;typeof e=="number"&&(e=[e]);var r=this._size;typeof t=="undefined"&&(this._shape=[r],t=0);var i=w(this._shape,t),s=this._shape[t],o=i*s,u=0;for(var a=0;a<r;a+=o){var f=0,l=e[0],c=0;while(c<e.length){l<0&&(l+=s);if(l>s)throw new Error(N(l));if(l<f)throw new Error("Index must be in ascending order");for(var h=f;h<l;h++)for(var p=0;p<i;p++)n[u++]=n[h*i+p+a];f=l+1,l=e[++c]}for(var h=f;h<s;h++)for(var p=0;p<i;p++)n[u++]=n[h*i+p+a]}return this._shape[t]-=e.length,this._size=g(this._shape),this}),_parseRanges:function(e){var t=e.split(/\s*,\s*/),n=[],r=[],i=0;for(var s=0;s<t.length;s++)if(t[s]==="..."){var o=this._shape.length-(t.length-s);while(i<=o)n.push([0,this._shape[i],1]),r.push(this._shape[i]),i++}else{var u=m(t[s],this._shape[i]);n.push(u);if(t[s].indexOf(":")>=0){var a=Math.floor((u[1]-u[0])/u[2]);a=a<0?0:a,r.push(a)}i++}for(;i<this._shape.length;i++)r.push(this._shape[i]);return[n,r]},toArray:function(){function i(s,o){var u=n[s];for(var a=0;a<u;a++)s<r-1?i(s+1,o[a]=[]):o[a]=e[t++]}var e=this._array,t=0,n=this._shape,r=n.length,s=[];return i(0,s),s},copy:function(){var e=new v;return e._array=n.call(this._array),e._shape=this._shape.slice(),e._dtype=this._dtype,e._size=this._size,e},constructor:v},v.range=t(function(e,t,i,s){var o=n.call(arguments),u=o[o.length-1];if(typeof u=="string"){var s=u;o.pop()}o.length===1?(t=o[0],i=1,e=0):o.length==2&&(i=1),s=s||"number";var a=new r[s](Math.ceil((t-e)/i)),f=0;for(var l=e;l<t;l+=i)a[f++]=l;var c=new v;return c._array=a,c._shape=[a.length],c._dtype=s,c._size=a.length,c}),v.zeros=t(function(e,t){var n=new v(t);return n.initFromShape(e),n}),v}),r("echarts/chart/chord",["require","../util/shape/chord","../component/base","./calculableBase","../util/ecData","zrender/tool/util","zrender/tool/vector","../util/ndarray","../chart"],function(e){function n(n,r,i,s,o){function F(){u.selectedMap={},w=[],b=null;var e=[],n=0;for(var r=0,s=g.length;r<s;r++)if(g[r].type===u.type){b||(b=g[r],u.reformOption(b));var a=m(g[r].name);u.selectedMap[g[r].name]=a;if(!a)continue;w.push(g[r]),u.buildMark(g[r],r,o),e.push(g[r].matrix),n++}if(!b)return;if(!w.length)return;var f=i.getWidth(),l=i.getHeight(),c=Math.min(f,l);E=b.data,S=b.startAngle,S%=360,S<0&&(S+=360),x=b.clockWise,T=u.parsePercent(b.radius[0],c/2),N=u.parsePercent(b.radius[1],c/2),C=b.padding,k=b.sort,L=b.sortSub,O=b.showScale,M=b.showScaleText,A=[u.parsePercent(b.center[0],f),u.parsePercent(b.center[1],l)];var h=b.itemStyle.normal.chordStyle.lineStyle.width-b.itemStyle.normal.lineStyle.width;_=h/t/T/Math.PI*180,D=new p(e),D=D._transposelike([1,2,0]);var d=I(D,E);D=d[0],E=d[1];var v=D.shape();if(v[0]!==v[1]||v[0]!==E.length)throw new Error("Data not valid");if(v[0]===0||v[2]===0)return;D.reshape(v[0],v[1]*v[2]);var y=D.sum(1),B=y.mul(1/y.sum()),j=v[0],F=v[1]*v[2],W=B.mul(360-C*j),X=D.div(D.sum(1).reshape(j,1));X=X.mul(W.sub(_*2).reshape(j,1));switch(k){case"ascending":case"descending":var V=W.argsort(0,k);W.sort(0,k),y.sort(0,k);break;default:var V=p.range(v[0])}switch(L){case"ascending":case"descending":var $=X.argsort(1,L);X.sort(1,L);break;default:var $=p.range(F).reshape(1,F).repeat(j,0)}var J=V.toArray(),K=W.toArray(),Q=$.toArray(),G=X.toArray(),Y=y.toArray(),Z=[],et=(new p(j,F)).toArray(),tt=[],nt=0,rt=0;for(var r=0;r<j;r++){var it=J[r];tt[it]=Y[r],rt=nt+K[r],Z[it]=[nt,rt];var st=nt+_,ot=st;for(var ut=0;ut<F;ut++){ot=st+G[it][ut];var at=Q[it][ut];et[it][at]=[st,ot],st=ot}nt=rt+C}H=(new p(j,j,n)).toArray(),P=[],q(Z,tt),et=(new p(et)).reshape(j,j,n,2).toArray(),R(et,D.reshape(v).toArray());var d=z(tt);O&&U(d[0],d[1],Z,(new p(d[0])).sum()/(360-C*j))}function I(e,t){var n=[],r=[];for(var i=0;i<t.length;i++){var s=t[i].name;u.selectedMap[s]=m(s),u.selectedMap[s]?r.push(t[i]):n.push(i)}n.length&&(e=e["delete"](n,0),e=e["delete"](n,1));if(!e.size())return[e,r];n=[];var o=[],a=e.shape();e.reshape(a[0],a[1]*a[2]);var f=e.sum(1).toArray();e.reshape(a);for(var i=0;i<r.length;i++)f[i]===0?n.push(i):o.push(r[i]);return n.length&&(e=e["delete"](n,0),e=e["delete"](n,1)),[e,o]}function q(e,t){function f(e){return function(){s&&clearTimeout(s),s=setTimeout(function(){for(var t=0;t<n;t++){P[t].style.opacity=t===e?1:.1,i.modShape(P[t].id,P[t]);for(var s=0;s<n;s++)for(var o=0;o<r;o++){var u=H[t][s][o];u&&(u.style.opacity=t===e||s===e?.5:.03,i.modShape(u.id,u))}}i.refresh()},50)}}function c(){return function(){s&&clearTimeout(s),s=setTimeout(function(){for(var e=0;e<n;e++){P[e].style.opacity=1,i.modShape(P[e].id,P[e]);for(var t=0;t<n;t++)for(var s=0;s<r;s++){var o=H[e][t][s];o&&(o.style.opacity=.5,i.modShape(o.id,o))}}i.refresh()},50)}}var n=E.length,r=w.length,s,o=u.query(b,"itemStyle.normal.label.show"),a=u.query(b,"itemStyle.normal.label.color");for(var p=0;p<n;p++){var d=E[p],m=e[p],g=(x?360-m[1]:m[0])+S,C=(x?360-m[0]:m[1])+S,k={id:i.newShapeId(u.type),shape:"sector",zlevel:y,style:{x:A[0],y:A[1],r0:T,r:N,startAngle:g,endAngle:C,brushType:"fill",opacity:1,color:v(d.name)},highlightStyle:{brushType:"fill"}};k.style.lineWidth=u.deepQuery([d,b],"itemStyle.normal.lineStyle.width"),k.highlightStyle.lineWidth=u.deepQuery([d,b],"itemStyle.emphasis.lineStyle.width"),k.style.strokeColor=u.deepQuery([d,b],"itemStyle.normal.lineStyle.color"),k.highlightStyle.strokeColor=u.deepQuery([d,b],"itemStyle.emphasis.lineStyle.color"),k.style.lineWidth>0&&(k.style.brushType="both"),k.highlightStyle.lineWidth>0&&(k.highlightStyle.brushType="both"),l.pack(k,w[0],0,t[p],0,d.name);if(o){var L=[g+C]/2;L%=360;var O=L<=90||L>=270;L=L*Math.PI/180;var _=[Math.cos(L),-Math.sin(L)],D=M?45:20,B=h.scale([],_,N+D);h.add(B,B,A);var j={shape:"text",id:i.newShapeId(u.type),zlevel:y-1,hoverable:!1,style:{x:B[0],y:B[1],text:d.name,textAlign:O?"left":"right",color:a}};j.style.textColor=u.deepQuery([d,b],"itemStyle.normal.label.textStyle.color")||"#fff",j.style.textFont=u.getFont(u.deepQuery([d,b],"itemStyle.normal.label.textStyle")),i.addShape(j),u.shapeList.push(j)}k.onmouseover=f(p),k.onmouseout=c(),u.shapeList.push(k),P.push(k),i.addShape(k)}}function R(e,t){var n=e.length;if(!n)return;var r=e[0][0].length,s=b.itemStyle.normal.chordStyle.lineStyle,o=b.itemStyle.emphasis.chordStyle.lineStyle;for(var a=0;a<n;a++)for(var f=0;f<n;f++)for(var c=0;c<r;c++){if(H[f][a][c])continue;var h=e[a][f][c][0],p=e[f][a][c][0],d=e[a][f][c][1],m=e[f][a][c][1];if(h-m===0||p-m===0){H[a][f][c]=null;continue}var g;r===1?d-h<=m-p?g=v(E[a].name):g=v(E[f].name):g=v(w[c].name);var N=x?h:360-d,C=x?d:360-h,k=x?p:360-m,L=x?m:360-p,O={id:i.newShapeId(u.type),shape:"chord",zlevel:y,style:{center:A,r:T,source0:N-S,source1:C-S,target0:k-S,target1:L-S,brushType:"both",opacity:.5,color:g,lineWidth:s.width,strokeColor:s.color},highlightStyle:{brushType:"both",lineWidth:o.width,strokeColor:o.color}};l.pack(O,w[c],c,t[a][f][c],0,E[a].name,E[f].name,t[f][a][c]),H[a][f][c]=O,u.shapeList.push(O),i.addShape(O)}}function U(e,t,n,r){for(var s=0;s<n.length;s++){var o=n[s][0],a=n[s][1],f=o;while(f<a){var l=((x?360-f:f)+S)/180*Math.PI,c=[Math.cos(l),-Math.sin(l)],d=h.scale([],c,N+1);h.add(d,d,A);var v=h.scale([],c,N+B);h.add(v,v,A);var m={shape:"line",id:i.newShapeId(u.type),zlevel:y-1,hoverable:!1,style:{xStart:d[0],yStart:d[1],xEnd:v[0],yEnd:v[1],lineCap:"round",brushType:"stroke",strokeColor:"#666"}};u.shapeList.push(m),i.addShape(m),f+=j}if(!M)continue;var g=o,b=r*5*j,w=p.range(0,e[s],b).toArray();while(g<a){var l=x?360-g:g;l=(l+S)%360;var E=l<=90||l>=270,T={shape:"text",id:i.newShapeId(u.type),zlevel:y-1,hoverable:!1,style:{x:E?N+B+4:-N-B-4,y:0,text:Math.round(w.shift()*10)/10+t,textAlign:E?"left":"right"},position:A.slice(),rotation:E?[l/180*Math.PI,0,0]:[(l+180)/180*Math.PI,0,0]};u.shapeList.push(T),i.addShape(T),g+=j*5}}}function z(e){var t=[],n=(new p(e)).max(),r,i;n>1e4?(r="k",i=.001):n>1e7?(r="m",i=1e-6):n>1e10?(r="b",i=1e-9):(r="",i=1);for(var s=0;s<e.length;s++)t[s]=e[s]*i;return[t,r]}function W(e,t){o=t,X(e)}function X(e){e&&(s=e,g=s.series),u.clear(),d=o.legend;if(d)v=d.getColor,m=d.isSelected;else{var t={},n={},r=0;v=function(e){if(n[e])return n[e];t[e]===undefined&&(t[e]=r++);for(var s=0;s<w.length;s++)if(w[s].name===e){n[e]=u.query(w[s],"itemStyle.normal.color");break}if(!n[e]){var o=E.length;for(var s=0;s<o;s++)if(E[s].name===e){n[e]=u.query(E[s],"itemStyle.normal.color");break}}return n[e]||(n[e]=i.getColor(t[e])),n[e]},m=function(){return!0}}F()}function V(e){var t=c.merge;e=t(e||{},n.chord,{overwrite:!1,recursive:!0}),e.itemStyle.normal.label.textStyle=t(e.itemStyle.normal.label.textStyle||{},n.textStyle,{overwrite:!1,recursive:!0})}var u=this,a=e("../component/base");a.call(this,n,i);var f=e("./calculableBase");f.call(this,i,s);var l=e("../util/ecData"),c=e("zrender/tool/util"),h=e("zrender/tool/vector"),p=e("../util/ndarray"),d,v,m,g;this.type=n.CHART_TYPE_CHORD;var y=u.getZlevelBase(),b,w=[],E,S,x,T,N,C,k,L,A,O,M,_=0,D,P=[],H=[],B=4,j=4;u.init=W,u.refresh=X,u.reformOption=V,W(s,o)}e("../util/shape/chord");var t=window.devicePixelRatio||1;return e("../chart").define("chord",n),n}),r("echarts/chart/force",["require","../component/base","./calculableBase","../util/ecData","zrender/config","zrender/tool/event","zrender/tool/util","zrender/tool/vector","../util/ndarray","../chart"],function(e){function r(r,o,u,a,f){function Y(){y=f.legend,I=1,$=u.getWidth(),J=u.getHeight(),K=[$/2,J/2];var e;for(var t=0,n=w.length;t<n;t++){var i=w[t];if(i.type===r.CHART_TYPE_FORCE){w[t]=b.reformOption(w[t]),e=w[t].name||"",b.selectedMap[e]=y?y.isSelected(e):!0;if(!b.selectedMap[e])continue;b.buildMark(w[t],t,f),E=i;var s=b.query(i,"minRadius"),o=b.query(i,"maxRadius");X=b.query(i,"attractiveness"),R=b.query(i,"density"),U=b.query(i,"initSize"),W=b.query(i,"centripetal"),z=b.query(i,"coolDown"),T=b.query(i,"categories");for(var a=0,l=T.length;a<l;a++)T[a].name&&(y?b.selectedMap[a]=y.isSelected(T[a].name):b.selectedMap[a]=!0);k=b.query(i,"itemStyle.normal.linkStyle"),L=b.query(i,"itemStyle.emphasis.linkStyle"),N=b.query(i,"itemStyle.normal.nodeStyle"),C=b.query(i,"itemStyle.emphasis.nodeStyle"),A=b.query(i,"nodes"),O=v.clone(b.query(i,"links")),Z(A,O),B=[],j=[],F=[],D=[],P=[],F=[],S=[],x=[];var c=$*J;q=.5/X*Math.sqrt(c/M.length),tt(M,_),et(M,s,o)}}}function Z(e,t){var n=[],r=0;M=s(e,function(e,t){if(!e)return;if(e.ignore)return;if(b.selectedMap[e.category])return n[t]=r++,!0;n[t]=-1});var i,o,u;_=s(t,function(e,t){return i=e.source,o=e.target,u=!0,n[i]>=0?e.source=n[i]:u=!1,n[o]>=0?e.target=n[o]:u=!1,e.rawIndex=t,u})}function et(e,t,r){var s=[],o=e.length;for(var a=0;a<o;a++){var f=e[a];f.value!==undefined?s.push(f.value):s.push(1)}var l=new g(s);s=l.map(t,r).toArray();var c=l.max();c!==0&&(D=l.mul(1/c,l).toArray());for(var a=0;a<o;a++){var f=e[a],p,d,w=s[a],x;f.initial!==undefined?x=f.initial:n[f.name]!==undefined?x=n[f.name]:x=i($/2,J/2,U);var p=x[0],d=x[1];B[a]=m.create(p,d),j[a]=m.create(p,d),H[a]=m.create(0,0),F[a]=w*w*R*.035;var k={id:u.newShapeId(b.type),shape:"circle",style:{r:w,x:0,y:0},clickable:!0,highlightStyle:{},position:[p,d],__forceIndex:a},L;b.query(E,"itemStyle.normal.label.show")&&(k.style.text=f.name,k.style.textPosition="inside",L=b.query(E,"itemStyle.normal.label.textStyle")||{},k.style.textColor=L.color||"#fff",k.style.textAlign=L.align||"center",k.style.textBaseline=L.baseline||"middle",k.style.textFont=b.getFont(L)),b.query(E,"itemStyle.emphasis.label.show")&&(k.highlightStyle.text=f.name,k.highlightStyle.textPosition="inside",L=b.query(E,"itemStyle.emphasis.label.textStyle")||{},k.highlightStyle.textColor=L.color||"#fff",k.highlightStyle.textAlign=L.align||"center",k.highlightStyle.textBaseline=L.baseline||"middle",k.highlightStyle.textFont=b.getFont(L)),v.merge(k.style,N),v.merge(k.highlightStyle,C);if(typeof f.category!="undefined"){var O=T[f.category];if(O){y&&(k.style.color=y.getColor(O.name));var M=O.itemStyle;M&&(M.normal&&v.merge(k.style,M.normal,{overwrite:!0}),M.emphasis&&v.merge(k.highlightStyle,M.emphasis,{overwrite:!0}))}}if(typeof f.itemStyle!="undefined"){var M=f.itemStyle;M.normal&&v.merge(k.style,M.normal,{overwrite:!0}),M.normal&&v.merge(k.highlightStyle,M.emphasis,{overwrite:!0})}b.setCalculable(k),k.dragEnableTime=0,k.ondragstart=b.shapeHandler.ondragstart,k.draggable=!0,S.push(k),b.shapeList.push(k);var _="";if(typeof f.category!="undefined"){var O=T[f.category];_=O&&O.name||""}h.pack(k,{name:_},0,f,v.indexOf(A,f),f.name||"",f.value),u.addShape(k)}}function tt(e,t){var n=t.length;for(var r=0;r<n;r++){var i=t[r];i.weight!==undefined?P.push(i.weight):P.push(1);var s={id:u.newShapeId(b.type),shape:"line",style:{xStart:0,yStart:0,xEnd:0,yEnd:0,lineWidth:1},clickable:!0,highlightStyle:{}};v.merge(s.style,k),v.merge(s.highlightStyle,L),typeof i.itemStyle!="undefined"&&(i.itemStyle.normal&&v.merge(s.style,i.itemStyle.normal,{overwrite:!0}),i.itemStyle.emphasis&&v.merge(s.highlightStyle,i.itemStyle.emphasis,{overwrite:!0})),x.push(s),b.shapeList.push(s);var o=M[i.source],a=M[i.target],i=O[i.rawIndex];h.pack(s,E,0,{source:i.source,target:i.target,weight:i.weight||0},i.rawIndex,o.name+" - "+a.name,i.weight||0,!0),u.addShape(s)}var f=new g(P),l=f.max();l!==0&&(P=f.mul(1/l,f).toArray())}function nt(){for(var e=0,t=_.length;e<t;e++){var n=_[e],r=x[e],i=S[n.source],s=S[n.target];r.style.xStart=i.position[0],r.style.yStart=i.position[1],r.style.xEnd=s.position[0],r.style.yEnd=s.position[1]}}function rt(e){var t=B.length,r=[],i=q*q;for(var s=0;s<t;s++)H[s][0]=0,H[s][1]=0;for(var s=0;s<t;s++)for(var o=s+1;o<t;o++){var u=D[s],a=D[o],f=B[s],l=B[o];m.sub(r,l,f);var c=m.length(r);if(c>500)continue;c<5&&(c=5),m.scale(r,r,1/c);var h=1*(u+a)*i/c;m.scaleAndAdd(H[s],H[s],r,-h),m.scaleAndAdd(H[o],H[o],r,h)}for(var s=0,p=_.length;s<p;s++){var d=_[s],v=P[s],g=d.source,y=d.target,f=B[g],l=B[y];m.sub(r,l,f);var b=m.lengthSquare(r);if(b===0)continue;var h=v*b/q/Math.sqrt(b);m.scaleAndAdd(H[g],H[g],r,h),m.scaleAndAdd(H[y],H[y],r,-h)}for(var s=0,p=M.length;s<p;s++){var w=B[s];m.sub(r,K,w);var b=m.lengthSquare(r),h=b*W/(100*Math.sqrt(b));m.scaleAndAdd(H[s],H[s],r,h)}var E=[];for(var s=0,p=B.length;s<p;s++){var x=M[s].name;if(M[s].fixed){m.set(B[s],Q,G),m.set(j[s],Q,G),m.set(S[s].position,Q,G),M[s].initial!==undefined&&m.set(M[s].initial,Q,G),n[x]!==undefined&&m.set(n[x],Q,G);continue}var w=B[s],T=j[s];m.sub(E,w,T),T[0]=w[0],T[1]=w[1],m.scaleAndAdd(E,E,H[s],e/F[s]),m.scale(E,E,I),E[0]=Math.max(Math.min(E[0],100),-100),E[1]=Math.max(Math.min(E[1],100),-100),m.add(w,w,E),m.copy(S[s].position,w),x?(n[x]===undefined&&(n[x]=m.create()),m.copy(n[x],w)):(M[s].initial===undefined&&(M[s].initial=m.create()),m.copy(M[s].initial,w))}}function it(){if(I<.01)return;rt(V),nt();var e={};for(var t=0;t<S.length;t++){var n=S[t];e.position=n.position,u.modShape(n.id,e,!0)}e={};for(var t=0;t<x.length;t++){var n=x[t];e.style=n.style,u.modShape(n.id,e,!0)}u.refresh(),I*=z}function ot(e,n){function r(){st&&(it(),t(r))}a=e,f=n,w=a.series,b.clear(),Y(),st=!0,t(r)}function ut(e){e&&(a=e,w=a.series),b.clear(),Y(),I=1}function at(){st=!1}function ft(){}function lt(e){if(!b.isDragstart||!e.target)return;var t=e.target,n=t.__forceIndex,r=M[n];r.fixed=!0,b.isDragstart=!1,u.on(p.EVENT.MOUSEMOVE,ht)}function ct(e,t){if(!b.isDragend||!e.target)return;var n=e.target,r=n.__forceIndex,i=M[r];i.fixed=!1,t.dragIn=!0,t.needRefresh=!1,b.isDragend=!1,u.un(p.EVENT.MOUSEMOVE,ht)}function ht(e){I=.8,Q=d.getX(e.event),G=d.getY(e.event)}var l=e("../component/base");l.call(this,r,u);var c=e("./calculableBase");c.call(this,u,a);var h=e("../util/ecData"),p=e("zrender/config"),d=e("zrender/tool/event"),v=e("zrender/tool/util"),m=e("zrender/tool/vector"),g=e("../util/ndarray"),y,b=this;b.type=r.CHART_TYPE_FORCE;var w,E,S=[],x=[],T=[],N,C,k,L,A,O,M=[],_=[],D=[],P=[],H=[],B=[],j=[],F=[],I,q,R,U,z,W,X,V=1/60,$,J,K=[],Q,G,st;b.shapeHandler.ondragstart=function(){b.isDragstart=!0},b.init=ot,b.refresh=ut,b.ondragstart=lt,b.ondragend=ct,b.dispose=at,b.onclick=ft,ot(a,f)}function i(e,t,n){return[(Math.random()-.5)*n+e,(Math.random()-.5)*n+t]}function s(e,t){var n=e.length,r=[];for(var i=0;i<n;i++)t(e[i],i)&&r.push(e[i]);return r}var t=window.requestAnimationFrame||window.msRequestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||function(e){setTimeout(e,16)},n={};return e("../chart").define("force",r),r}),r("echarts/util/shape/halfSmoothPolygon",["require","zrender/shape","zrender/shape/base","zrender/shape"],function(e){function t(){this.type="halfSmoothPolygon"}return t.prototype={buildPath:function(t,n){var r=n.pointList;if(r.length<2)return;if(n.smooth){var i=this.smoothBezier(r.slice(0,-2),n.smooth);t.moveTo(r[0][0],r[0][1]);var s,o,u,a=r.length;for(var f=0;f<a-3;f++)s=i[f*2],o=i[f*2+1],u=r[f+1],t.bezierCurveTo(s[0],s[1],o[0],o[1],u[0],u[1]);t.lineTo(r[a-2][0],r[a-2][1]),t.lineTo(r[a-1][0],r[a-1][1]),t.lineTo(r[0][0],r[0][1])}else e("zrender/shape").get("polygon").buildPath(t,n);return}},e("zrender/shape/base").derive(t),e("zrender/shape").define("halfSmoothPolygon",new t),t}),r("echarts/chart/line",["require","../component/base","./calculableBase","zrender/tool/color","zrender/shape","zrender/shape","../util/shape/halfSmoothPolygon","../chart"],function(e){function t(t,r,i,s,o){function g(){p={},l.selectedMap={};var e={top:[],bottom:[],left:[],right:[]},n,r,s,u;for(var a=0,f=c.length;a<f;a++)c[a].type==l.type&&(c[a]=l.reformOption(c[a]),n=c[a].xAxisIndex,r=c[a].yAxisIndex,s=o.xAxis.getAxis(n),u=o.yAxis.getAxis(r),s.type==t.COMPONENT_TYPE_AXIS_CATEGORY?e[s.getPosition()].push(a):u.type==t.COMPONENT_TYPE_AXIS_CATEGORY&&e[u.getPosition()].push(a));for(var h in e)e[h].length>0&&y(h,e[h]);for(var a=0,f=l.shapeList.length;a<f;a++)l.shapeList[a].id=i.newShapeId(l.type),i.addShape(l.shapeList[a])}function y(e,t){var n=b(t),r=n.locationMap,i=n.maxDataLength;if(i===0||r.length===0)return;var s={};switch(e){case"bottom":case"top":w(i,r,s);break;case"left":case"right":E(i,r,s)}for(var u=0,a=t.length;u<a;u++)l.buildMark(c[t[u]],t[u],o,{xMarkMap:s})}function b(e){var t,n=0,r={},s="__kener__stack__",u,a,f=o.legend,h=[],p=0,g;for(var y=0,b=e.length;y<b;y++)t=c[e[y]],a=t.name,m[e[y]]=m[e[y]]||l.query(t,"symbol")||v[y%v.length],f?(l.selectedMap[a]=f.isSelected(a),d[e[y]]=f.getColor(a),g=f.getItemShape(a),g&&(g.shape="icon",g.style.iconType="legendLineIcon",g.style.symbol=m[e[y]],f.setItemShape(a,g))):(l.selectedMap[a]=!0,d[e[y]]=i.getColor(e[y])),l.selectedMap[a]&&(u=t.stack||s+e[y],typeof r[u]=="undefined"?(r[u]=n,h[n]=[e[y]],n++):h[r[u]].push(e[y])),p=Math.max(p,t.data.length);return{locationMap:h,maxDataLength:p}}function w(e,t,n){var r=t[0][0],i=c[r],u=i.xAxisIndex,a=o.xAxis.getAxis(u),f,h,d,v,m,g,y,b,w={},E,x;for(var N=0,C=e;N<C;N++){if(typeof a.getNameByIndex(N)=="undefined")break;d=a.getCoordByIndex(N);for(var k=0,L=t.length;k<L;k++){f=c[t[k][0]].yAxisIndex||0,h=o.yAxis.getAxis(f),g=m=b=y=h.getCoord(0);for(var A=0,O=t[k].length;A<O;A++){r=t[k][A],i=c[r],E=i.data[N],x=typeof E!="undefined"?typeof E.value!="undefined"?E.value:E:"-",w[r]=w[r]||[],n[r]=n[r]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0};if(x=="-"){w[r].length>0&&(p[r]=p[r]||[],p[r].push(w[r]),w[r]=[]);continue}x>=0?(m-=A>0?h.getCoordSize(x):g-h.getCoord(x),v=m):x<0&&(y+=A>0?h.getCoordSize(x):h.getCoord(x)-b,v=y),w[r].push([d,v,N,a.getNameByIndex(N),d,g]),n[r].min>x&&(n[r].min=x,n[r].minY=v,n[r].minX=d),n[r].max<x&&(n[r].max=x,n[r].maxY=v,n[r].maxX=d),n[r].sum+=x,n[r].counter++}}m=o.grid.getY();var M;for(var k=0,L=t.length;k<L;k++)for(var A=0,O=t[k].length;A<O;A++){r=t[k][A],i=c[r],E=i.data[N],x=typeof E!="undefined"?typeof E.value!="undefined"?E.value:E:"-";if(x!="-")continue;l.deepQuery([E,i,s],"calculable")&&(M=l.deepQuery([E,i],"symbolSize"),m+=M*2+5,v=m,l.shapeList.push(T(r,N,a.getNameByIndex(N),d,v,"horizontal")))}}for(var _ in w)w[_].length>0&&(p[_]=p[_]||[],p[_].push(w[_]),w[_]=[]);for(var k=0,L=t.length;k<L;k++)for(var A=0,O=t[k].length;A<O;A++)r=t[k][A],n[r].counter>0&&(n[r].average=(n[r].sum/n[r].counter).toFixed(2)-0),v=o.yAxis.getAxis(c[r].yAxisIndex||0).getCoord(n[r].average),n[r].averageLine=[[o.grid.getX(),v],[o.grid.getXend(),v]],n[r].minLine=[[o.grid.getX(),n[r].minY],[o.grid.getXend(),n[r].minY]],n[r].maxLine=[[o.grid.getX(),n[r].maxY],[o.grid.getXend(),n[r].maxY]];S(p,a,"horizontal")}function E(e,t,n){var r=t[0][0],i=c[r],u=i.yAxisIndex,a=o.yAxis.getAxis(u),f,h,d,v,m,g,y,b,w={},E,x;for(var N=0,C=e;N<C;N++){if(typeof a.getNameByIndex(N)=="undefined")break;v=a.getCoordByIndex(N);for(var k=0,L=t.length;k<L;k++){f=c[t[k][0]].xAxisIndex||0,h=o.xAxis.getAxis(f),g=m=b=y=h.getCoord(0);for(var A=0,O=t[k].length;A<O;A++){r=t[k][A],i=c[r],E=i.data[N],x=typeof E!="undefined"?typeof E.value!="undefined"?E.value:E:"-",w[r]=w[r]||[],n[r]=n[r]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0};if(x=="-"){w[r].length>0&&(p[r]=p[r]||[],p[r].push(w[r]),w[r]=[]);continue}x>=0?(m+=A>0?h.getCoordSize(x):h.getCoord(x)-g,d=m):x<0&&(y-=A>0?h.getCoordSize(x):b-h.getCoord(x),d=y),w[r].push([d,v,N,a.getNameByIndex(N),g,v]),n[r].min>x&&(n[r].min=x,n[r].minX=d,n[r].minY=v),n[r].max<x&&(n[r].max=x,n[r].maxX=d,n[r].maxY=v),n[r].sum+=x,n[r].counter++}}m=o.grid.getXend();var M;for(var k=0,L=t.length;k<L;k++)for(var A=0,O=t[k].length;A<O;A++){r=t[k][A],i=c[r],E=i.data[N],x=typeof E!="undefined"?typeof E.value!="undefined"?E.value:E:"-";if(x!="-")continue;l.deepQuery([E,i,s],"calculable")&&(M=l.deepQuery([E,i],"symbolSize"),m-=M*2+5,d=m,l.shapeList.push(T(r,N,a.getNameByIndex(N),d,v,"vertical")))}}for(var _ in w)w[_].length>0&&(p[_]=p[_]||[],p[_].push(w[_]),w[_]=[]);for(var k=0,L=t.length;k<L;k++)for(var A=0,O=t[k].length;A<O;A++)r=t[k][A],n[r].counter>0&&(n[r].average=(n[r].sum/n[r].counter).toFixed(2)-0),d=o.xAxis.getAxis(c[r].xAxisIndex||0).getCoord(n[r].average),n[r].averageLine=[[d,o.grid.getYend()],[d,o.grid.getY()]],n[r].minLine=[[n[r].minX,o.grid.getYend()],[n[r].minX,o.grid.getY()]],n[r].maxLine=[[n[r].maxX,o.grid.getYend()],[n[r].maxX,o.grid.getY()]];S(p,a,"vertical")}function S(e,t,n){var r,i,o,u,a,p,v,m,g,y,b;for(var w=c.length-1;w>=0;w--){m=c[w],y=e[w];if(m.type==l.type&&typeof y!="undefined"){r=d[w],i=l.query(m,"itemStyle.normal.lineStyle.width"),o=l.query(m,"itemStyle.normal.lineStyle.type"),u=l.query(m,"itemStyle.normal.lineStyle.color"),a=l.getItemStyleColor(l.query(m,"itemStyle.normal.color"),w,-1),p=typeof l.query(m,"itemStyle.normal.areaStyle")!="undefined",v=l.query(m,"itemStyle.normal.areaStyle.color");for(var E=0,S=y.length;E<S;E++){b=y[E];for(var T=0,C=b.length;T<C;T++)g=m.data[b[T][2]],(l.deepQuery([g,m],"showAllSymbol")||t.isMainAxis(b[T][2])&&l.deepQuery([g,m],"symbol")!="none"||l.deepQuery([g,m,s],"calculable"))&&l.shapeList.push(N(w,b[T][2],b[T][3],b[T][0],b[T][1],n));l.shapeList.push({shape:"brokenLine",zlevel:h,style:{miterLimit:i,pointList:b,strokeColor:u||a||r,lineWidth:i,lineType:o,smooth:x(m.smooth),shadowColor:l.query(m,"itemStyle.normal.lineStyle.shadowColor"),shadowBlur:l.query(m,"itemStyle.normal.lineStyle.shadowBlur"),shadowOffsetX:l.query(m,"itemStyle.normal.lineStyle.shadowOffsetX"),shadowOffsetY:l.query(m,"itemStyle.normal.lineStyle.shadowOffsetY")},hoverable:!1,_main:!0,_seriesIndex:w,_orient:n}),p&&l.shapeList.push({shape:"halfSmoothPolygon",zlevel:h,style:{miterLimit:i,pointList:b.concat([[b[b.length-1][4],b[b.length-1][5]-2],[b[0][4],b[0][5]-2]]),brushType:"fill",smooth:x(m.smooth),color:v?v:f.alpha(r,.5)},hoverable:!1,_main:!0,_seriesIndex:w,_orient:n})}}}}function x(e){return e?.3:0}function T(e,n,r,i,s,o){var u=c[e].calculableHolderColor||t.calculableHolderColor,a=N(e,n,r,i,s,o);return a.style.color=u,a.style.strokeColor=u,a.rotation=[0,0],a.hoverable=!1,a.draggable=!1,a.style.text=undefined,a}function N(e,t,n,r,i,o){var u=c[e],a=u.data[t],f=l.getSymbolShape(u,e,a,t,n,r,i,m[e],d[e],"#fff",o=="vertical"?"horizontal":"vertical");return f.zlevel=h+1,l.deepQuery([a,u,s],"calculable")&&(l.setCalculable(f),f.draggable=!0),f}function C(e,t,n,r){var i=o.xAxis.getAxis(e.xAxisIndex),s=o.yAxis.getAxis(e.yAxisIndex);return!n.type||n.type!="max"&&n.type!="min"&&n.type!="average"?[typeof n.xAxis!="string"&&i.getCoordByIndex?i.getCoordByIndex(n.xAxis||0):i.getCoord(n.xAxis||0),typeof n.yAxis!="string"&&s.getCoordByIndex?s.getCoordByIndex(n.yAxis||0):s.getCoord(n.yAxis||0)]:[r.xMarkMap[t][n.type+"X"],r.xMarkMap[t][n.type+"Y"],r.xMarkMap[t][n.type+"Line"],r.xMarkMap[t][n.type]]}function k(e,t){o=t,L(e)}function L(e){e&&(s=e,c=s.series),l.clear(),g()}function A(e,t){var n=e.seriesIndex,r=e.dataIndex,i,s,o=n.length;while(o--){i=p[n[o]];if(i)for(var u=0,a=i.length;u<a;u++){s=i[u];for(var f=0,l=s.length;f<l;f++)r==s[f][2]&&t.push(N(n[o],s[f][2],s[f][3],s[f][0],s[f][1],"horizontal"))}}}function O(e){var t={};for(var n=0,r=e.length;n<r;n++)t[e[n][0]]=e[n];var s,o,u,a,f,h,p;for(var n=l.shapeList.length-1;n>=0;n--){f=l.shapeList[n]._seriesIndex;if(t[f]&&!t[f][3]){if(l.shapeList[n]._main){h=l.shapeList[n].style.pointList,o=Math.abs(h[0][0]-h[1][0]),a=Math.abs(h[0][1]-h[1][1]),p=l.shapeList[n]._orient=="horizontal";if(t[f][2]){if(l.shapeList[n].shape=="polygon"){var d=h.length;l.shapeList[n].style.pointList[d-3]=h[d-2],p?l.shapeList[n].style.pointList[d-3][0]=h[d-4][0]:l.shapeList[n].style.pointList[d-3][1]=h[d-4][1],l.shapeList[n].style.pointList[d-2]=h[d-1]}l.shapeList[n].style.pointList.pop(),p?(s=o,u=0):(s=0,u=-a)}else{l.shapeList[n].style.pointList.shift();if(l.shapeList[n].shape=="polygon"){var v=l.shapeList[n].style.pointList.pop();p?v[0]=h[0][0]:v[1]=h[0][1],l.shapeList[n].style.pointList.push(v)}p?(s=-o,u=0):(s=0,u=a)}i.modShape(l.shapeList[n].id,{style:{pointList:l.shapeList[n].style.pointList}},!0)}else{if(t[f][2]&&l.shapeList[n]._dataIndex==c[f].data.length-1){i.delShape(l.shapeList[n].id);continue}if(!t[f][2]&&l.shapeList[n]._dataIndex===0){i.delShape(l.shapeList[n].id);continue}}i.animate(l.shapeList[n].id,"").when(500,{position:[s,u]}).start()}}}function M(){var e=l.query(s,"animationDuration"),t=l.query(s,"animationEasing"),n,r,o,u=0;for(var a=0,f=l.shapeList.length;a<f;a++)l.shapeList[a]._main&&(o=c[l.shapeList[a]._seriesIndex],u+=1,n=l.shapeList[a].style.pointList[0][0],r=l.shapeList[a].style.pointList[0][1],l.shapeList[a]._orient=="horizontal"?i.modShape(l.shapeList[a].id,{scale:[0,1,n,r]},!0):i.modShape(l.shapeList[a].id,{scale:[1,0,n,r]},!0),i.animate(l.shapeList[a].id,"").when((l.query(o,"animationDuration")||e)+u*100,{scale:[1,1,n,r]}).start(l.query(o,"animationEasing")||t));l.animationMark(e,t)}var u=e("../component/base");u.call(this,t,i);var a=e("./calculableBase");a.call(this,i,s);var f=e("zrender/tool/color"),l=this;l.type=t.CHART_TYPE_LINE;var c,h=l.getZlevelBase(),p={},d={},v=t.symbolList,m={};e("zrender/shape").get("icon").define("legendLineIcon",n),l.getMarkCoord=C,l.animation=M,l.init=k,l.refresh=L,l.ontooltipHover=A,l.addDataAnimation=O,k(s,o)}function n(t,n){var r=n.x,i=n.y,s=n.width,o=n.height,u=o/2;n.symbol.match("empty")&&(t.fillStyle="#fff"),n.brushType="both";var a=n.symbol.replace("empty","").toLowerCase();if(a.match("star"))u=a.replace("star","")-0||5,i-=1,a="star";else if(a=="rectangle"||a=="arrow")r+=(s-o)/2,s=o;var f="";a.match("image")&&(f=a.replace(new RegExp("^image:\\/\\/"),""),a="image",r+=Math.round((s-o)/2)-1,s=o+=2),a=e("zrender/shape").get("icon").get(a);if(a){var l=n.x,c=n.y;t.moveTo(l,c+u),t.lineTo(l+5,c+u),t.moveTo(l+n.width-5,c+u),t.lineTo(l+n.width,c+u),a(t,{x:r+4,y:i+4,width:s-8,height:o-8,n:u,image:f})}else t.moveTo(r,i+u),t.lineTo(r+s,i+u)}return e("../util/shape/halfSmoothPolygon"),e("../chart").define("line",t),t}),r("echarts/chart/bar",["require","../component/base","./calculableBase","../util/ecData","zrender/tool/color","../chart"],function(e){function t(t,n,r,i,s){function d(){l.selectedMap={};var e={top:[],bottom:[],left:[],right:[]},n,i,o,u;for(var a=0,f=c.length;a<f;a++)c[a].type==t.CHART_TYPE_BAR&&(c[a]=l.reformOption(c[a]),n=c[a].xAxisIndex,i=c[a].yAxisIndex,o=s.xAxis.getAxis(n),u=s.yAxis.getAxis(i),o.type==t.COMPONENT_TYPE_AXIS_CATEGORY?e[o.getPosition()].push(a):u.type==t.COMPONENT_TYPE_AXIS_CATEGORY&&e[u.getPosition()].push(a));for(var h in e)e[h].length>0&&v(h,e[h]);for(var a=0,f=l.shapeList.length;a<f;a++)l.shapeList[a].id=r.newShapeId(l.type),r.addShape(l.shapeList[a])}function v(e,t){var n=m(t),r=n.locationMap,i=n.maxDataLength;if(i===0||r.length===0)return;switch(e){case"bottom":case"top":g(i,r,t);break;case"left":case"right":y(i,r,t)}}function m(e){var t,n=0,i={},o="__kener__stack__",u,a,f=s.legend,h=[],d=0,v;for(var m=0,g=e.length;m<g;m++)t=c[e[m]],a=t.name,f?(l.selectedMap[a]=f.isSelected(a),p[e[m]]=f.getColor(a),v=f.getItemShape(a),v&&(t.itemStyle.normal.borderWidth>0&&(v.style.x+=1,v.style.y+=1,v.style.width-=2,v.style.height-=2,v.style.strokeColor=v.highlightStyle.strokeColor=t.itemStyle.normal.borderColor,v.highlightStyle.lineWidth=3,v.style.brushType="both"),f.setItemShape(a,v))):(l.selectedMap[a]=!0,p[e[m]]=r.getColor(e[m])),l.selectedMap[a]&&(u=t.stack||o+e[m],typeof i[u]=="undefined"?(i[u]=n,h[n]=[e[m]],n++):h[i[u]].push(e[m])),d=Math.max(d,t.data.length);return{locationMap:h,maxDataLength:d}}function g(e,n,r){var o=n[0][0],u=c[o],a=u.xAxisIndex,f=s.xAxis.getAxis(a),h,p,d=b(f,n),v=d.gap,m=d.barGap,g=d.barWidthMap,y=d.barWidth,S=d.barMinHeightMap,x,T={},N,C,k,L,A,O,M,_,D;for(var P=0,H=e;P<H;P++){if(typeof f.getNameByIndex(P)=="undefined")break;N=f.getCoordByIndex(P)-v/2;for(var B=0,j=n.length;B<j;B++){h=c[n[B][0]].yAxisIndex||0,p=s.yAxis.getAxis(h),L=k=O=A=p.getCoord(0);for(var F=0,I=n[B].length;F<I;F++){o=n[B][F],u=c[o],_=u.data[P],D=typeof _!="undefined"?typeof _.value!="undefined"?_.value:_:"-",T[o]=T[o]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0};if(D=="-")continue;D>0?(x=F>0?p.getCoordSize(D):L-p.getCoord(D),I==1&&S[o]>x&&(x=S[o]),k-=x,C=k):D<0?(x=F>0?p.getCoordSize(D):p.getCoord(D)-O,I==1&&S[o]>x&&(x=S[o]),C=A,A+=x):(x=0,k-=x,C=k),M=w(o,P,f.getNameByIndex(P),N,C,g[o]||y,x,"vertical"),T[o][P]=N+(g[o]||y)/2,T[o].min>D&&(T[o].min=D,T[o].minY=C,T[o].minX=T[o][P]),T[o].max<D&&(T[o].max=D,T[o].maxY=C,T[o].maxX=T[o][P]),T[o].sum+=D,T[o].counter++,l.shapeList.push(M)}for(var F=0,I=n[B].length;F<I;F++){o=n[B][F],u=c[o],_=u.data[P],D=typeof _!="undefined"?typeof _.value!="undefined"?_.value:_:"-";if(D!="-")continue;l.deepQuery([_,u,i],"calculable")&&(k-=t.island.r,C=k,M=w(o,P,f.getNameByIndex(P),N+.5,C+.5,(g[o]||y)-1,t.island.r-1,"vertical"),M.hoverable=!1,M.draggable=!1,M.style.lineWidth=1,M.style.brushType="stroke",M.style.strokeColor=u.calculableHolderColor||t.calculableHolderColor,l.shapeList.push(M))}N+=(g[o]||y)+m}}for(var B=0,j=n.length;B<j;B++)for(var F=0,I=n[B].length;F<I;F++)o=n[B][F],T[o].counter>0&&(T[o].average=(T[o].sum/T[o].counter).toFixed(2)-0),C=s.yAxis.getAxis(c[o].yAxisIndex||0).getCoord(T[o].average),T[o].averageLine=[[s.grid.getX(),C],[s.grid.getXend(),C]],T[o].minLine=[[s.grid.getX(),T[o].minY],[s.grid.getXend(),T[o].minY]],T[o].maxLine=[[s.grid.getX(),T[o].maxY],[s.grid.getXend(),T[o].maxY]];E(r,T,!0)}function y(e,n,r){var o=n[0][0],u=c[o],a=u.yAxisIndex,f=s.yAxis.getAxis(a),h,p,d=b(f,n),v=d.gap,m=d.barGap,g=d.barWidthMap,y=d.barWidth,S=d.barMinHeightMap,x,T={},N,C,k,L,A,O,M,_,D;for(var P=0,H=e;P<H;P++){if(typeof f.getNameByIndex(P)=="undefined")break;C=f.getCoordByIndex(P)+v/2;for(var B=0,j=n.length;B<j;B++){h=c[n[B][0]].xAxisIndex||0,p=s.xAxis.getAxis(h),L=k=O=A=p.getCoord(0);for(var F=0,I=n[B].length;F<I;F++){o=n[B][F],u=c[o],_=u.data[P],D=typeof _!="undefined"?typeof _.value!="undefined"?_.value:_:"-",T[o]=T[o]||{min:Number.POSITIVE_INFINITY,max:Number.NEGATIVE_INFINITY,sum:0,counter:0,average:0};if(D=="-")continue;D>0?(x=F>0?p.getCoordSize(D):p.getCoord(D)-L,I==1&&S[o]>x&&(x=S[o]),N=k,k+=x):D<0?(x=F>0?p.getCoordSize(D):O-p.getCoord(D),I==1&&S[o]>x&&(x=S[o]),A-=x,N=A):(x=0,N=k,k+=x),M=w(o,P,f.getNameByIndex(P),N,C-(g[o]||y),x,g[o]||y,"horizontal"),T[o][P]=C-(g[o]||y)/2,T[o].min>D&&(T[o].min=D,T[o].minX=N+x,T[o].minY=T[o][P]),T[o].max<D&&(T[o].max=D,T[o].maxX=N+x,T[o].maxY=T[o][P]),T[o].sum+=D,T[o].counter++,l.shapeList.push(M)}for(var F=0,I=n[B].length;F<I;F++){o=n[B][F],u=c[o],_=u.data[P],D=typeof _!="undefined"?typeof _.value!="undefined"?_.value:_:"-";if(D!="-")continue;l.deepQuery([_,u,i],"calculable")&&(N=k,k+=t.island.r,M=w(o,P,f.getNameByIndex(P),N+.5,C+.5-(g[o]||y),t.island.r-1,(g[o]||y)-1,"horizontal"),M.hoverable=!1,M.draggable=!1,M.style.lineWidth=1,M.style.brushType="stroke",M.style.strokeColor=u.calculableHolderColor||t.calculableHolderColor,l.shapeList.push(M))}C-=(g[o]||y)+m}}for(var B=0,j=n.length;B<j;B++)for(var F=0,I=n[B].length;F<I;F++)o=n[B][F],T[o].counter>0&&(T[o].average=(T[o].sum/T[o].counter).toFixed(2)-0),N=s.xAxis.getAxis(c[o].xAxisIndex||0).getCoord(T[o].average),T[o].averageLine=[[N,s.grid.getYend()],[N,s.grid.getY()]],T[o].minLine=[[T[o].minX,s.grid.getYend()],[T[o].minX,s.grid.getY()]],T[o].maxLine=[[T[o].maxX,s.grid.getYend()],[T[o].maxX,s.grid.getY()]];E(r,T,!1)}function b(e,t,n){var r={},i={},s,o=0,u=0,a,f,h,p;for(var d=0,v=t.length;d<v;d++){h=!1;for(var m=0,g=t[d].length;m<g;m++){seriesIndex=t[d][m],p=c[seriesIndex];if(!n)if(!h){s=l.query(p,"barWidth");if(typeof s!="undefined"){r[seriesIndex]=s,u+=s,o++,h=!0;for(var y=0,w=m;y<w;y++){var E=t[d][y];r[E]=s}}}else r[seriesIndex]=s;i[seriesIndex]=l.query(p,"barMinHeight"),a=typeof a!="undefined"?a:l.query(p,"barGap"),f=typeof f!="undefined"?f:l.query(p,"barCategoryGap")}}var S,x;if(t.length!=o)if(!n){S=typeof f=="string"&&f.match(/%$/)?Math.floor(e.getGap()*(100-parseFloat(f))/100):e.getGap()-f,typeof a=="string"&&a.match(/%$/)?(a=parseFloat(a)/100,x=Math.floor((S-u)/((t.length-1)*a+t.length-o)),a=Math.floor(x*a)):(a=parseFloat(a),x=Math.floor((S-u-a*(t.length-1))/(t.length-o)));if(x<=0)return b(e,t,!0)}else S=e.getGap(),a=0,x=Math.floor(S/t.length),x<=0&&(x=1);else{S=o>1?typeof f=="string"&&f.match(/%$/)?Math.floor(e.getGap()*(100-parseFloat(f))/100):e.getGap()-f:u,x=0,a=o>1?Math.floor((S-u)/(o-1)):0;if(a<0)return b(e,t,!0)}return{barWidthMap:r,barMinHeightMap:i,gap:S,barWidth:x,barGap:a}}function w(e,t,n,r,s,o,u,d){var v,m=c[e],g=m.data[t],y=p[e],b=[g,m],w=l.deepQuery(b,"itemStyle.normal.color")||y,E=l.deepQuery(b,"itemStyle.emphasis.color"),S=l.deepMerge(b,"itemStyle.normal"),x=S.borderWidth,T=l.deepMerge(b,"itemStyle.emphasis");return v={shape:"rectangle",zlevel:h,clickable:!0,style:{x:r,y:s,width:o,height:u,brushType:"both",color:l.getItemStyleColor(w,e,t,g),radius:S.borderRadius,lineWidth:x,strokeColor:S.borderColor},highlightStyle:{color:l.getItemStyleColor(E,e,t,g),radius:T.borderRadius,lineWidth:T.borderWidth,strokeColor:T.borderColor},_orient:d},v.highlightStyle.color=v.highlightStyle.color||(typeof v.style.color=="string"?f.lift(v.style.color,-0.3):v.style.color),x>0&&v.style.height>x&&v.style.width>x?(v.style.y+=x/2,v.style.height-=x,v.style.x+=x/2,v.style.width-=x):v.style.brushType="fill",v.highlightStyle.textColor=v.highlightStyle.color,v=l.addLabel(v,m,g,n,d),l.deepQuery([g,m,i],"calculable")&&(l.setCalculable(v),v.draggable=!0),a.pack(v,c[e],e,c[e].data[t],t,n),v}function E(e,t,n){for(var r=0,i=e.length;r<i;r++)l.buildMark(c[e[r]],e[r],s,{isHorizontal:n,xMarkMap:t})}function S(e,t,n,r){var i=s.xAxis.getAxis(e.xAxisIndex),o=s.yAxis.getAxis(e.yAxisIndex),u,a;return!n.type||n.type!="max"&&n.type!="min"&&n.type!="average"?r.isHorizontal?(u=typeof n.xAxis=="string"&&i.getIndexByName?i.getIndexByName(n.xAxis):n.xAxis||0,a=[r.xMarkMap[t][u],o.getCoord(n.yAxis||0)]):(u=typeof n.yAxis=="string"&&o.getIndexByName?o.getIndexByName(n.yAxis):n.yAxis||0,a=[i.getCoord(n.xAxis||0),r.xMarkMap[t][u]]):a=[r.xMarkMap[t][n.type+"X"],r.xMarkMap[t][n.type+"Y"],r.xMarkMap[t][n.type+"Line"],r.xMarkMap[t][n.type]],a}function x(e,t){s=t,T(e)}function T(e){e&&(i=e,c=i.series),l.clear(),d()}function N(e){var t={};for(var n=0,i=e.length;n<i;n++)t[e[n][0]]=e[n];var o,u,f,h,p,d,v;for(var n=l.shapeList.length-1;n>=0;n--){d=a.get(l.shapeList[n],"seriesIndex");if(t[d]&&!t[d][3]&&l.shapeList[n].shape=="rectangle"){v=a.get(l.shapeList[n],"dataIndex"),p=c[d];if(t[d][2]&&v==p.data.length-1){r.delShape(l.shapeList[n].id);continue}if(!t[d][2]&&v===0){r.delShape(l.shapeList[n].id);continue}l.shapeList[n]._orient=="horizontal"?(h=s.yAxis.getAxis(p.yAxisIndex||0).getGap(),f=t[d][2]?-h:h,o=0):(u=s.xAxis.getAxis(p.xAxisIndex||0).getGap(),o=t[d][2]?u:-u,f=0),r.animate(l.shapeList[n].id,"").when(500,{position:[o,f]}).start()}}}function C(){var e,t,n,s,o,u,f,c,h;for(var p=0,d=l.shapeList.length;p<d;p++)l.shapeList[p].shape=="rectangle"&&(f=a.get(l.shapeList[p],"series"),c=a.get(l.shapeList[p],"dataIndex"),h=a.get(l.shapeList[p],"value"),e=l.deepQuery([f,i],"animationDuration"),t=l.deepQuery([f,i],"animationEasing"),l.shapeList[p]._orient=="horizontal"?(n=l.shapeList[p].style.width,o=l.shapeList[p].style.x,h<0?(r.modShape(l.shapeList[p].id,{style:{x:o+n,width:0}},!0),r.animate(l.shapeList[p].id,"style").when(e+c*100,{x:o,width:n}).start(t)):(r.modShape(l.shapeList[p].id,{style:{width:0}},!0),r.animate(l.shapeList[p].id,"style").when(e+c*100,{width:n}).start(t))):(s=l.shapeList[p].style.height,u=l.shapeList[p].style.y,h<0?(r.modShape(l.shapeList[p].id,{style:{height:0}},!0),r.animate(l.shapeList[p].id,"style").when(e+c*100,{height:s}).start(t)):(r.modShape(l.shapeList[p].id,{style:{y:u+s,height:0}},!0),r.animate(l.shapeList[p].id,"style").when(e+c*100,{y:u,height:s}).start(t))));l.animationMark(e,t)}var o=e("../component/base");o.call(this,t,r);var u=e("./calculableBase");u.call(this,r,i);var a=e("../util/ecData"),f=e("zrender/tool/color"),l=this;l.type=t.CHART_TYPE_BAR;var c,h=l.getZlevelBase(),p={};l.getMarkCoord=S,l.animation=C,l.init=x,l.refresh=T,l.addDataAnimation=N,x(i,s)}return e("../chart").define("bar",t),t}),r("echarts/chart/pie",["require","../component/base","./calculableBase","../util/ecData","zrender/tool/math","zrender/tool/util","zrender/tool/color","../util/accMath","../chart"],function(e){function t(t,n,r,i,s){function g(){var e=s.legend;h.selectedMap={},m={};var n,o,u;v=!1;var f;for(var l=0,c=p.length;l<c;l++)if(p[l].type==t.CHART_TYPE_PIE){p[l]=h.reformOption(p[l]),f=p[l].name||"",h.selectedMap[f]=e?e.isSelected(f):!0;if(!h.selectedMap[f])continue;n=h.parseCenter(r,p[l].center),o=h.parseRadius(r,p[l].radius),v=v||p[l].selectedMode,m[l]=[],h.deepQuery([p[l],i],"calculable")&&(u={shape:o[0]<=10?"circle":"ring",zlevel:d,hoverable:!1,style:{x:n[0],y:n[1],r0:o[0]<=10?0:o[0]-10,r:o[1]+10,brushType:"stroke",lineWidth:1,strokeColor:p[l].calculableHolderColor||t.calculableHolderColor}},a.pack(u,p[l],l,undefined,-1),h.setCalculable(u),h.shapeList.push(u)),y(l),h.buildMark(p[l],l,s)}for(var l=0,c=h.shapeList.length;l<c;l++)h.shapeList[l].id=r.newShapeId(h.type),r.addShape(h.shapeList[l])}function y(e){var t=p[e],n=t.data,i=s.legend,o,u=0,a=0,f=0,l=Number.NEGATIVE_INFINITY;for(var c=0,d=n.length;c<d;c++)o=n[c].name,i?h.selectedMap[o]=i.isSelected(o):h.selectedMap[o]=!0,h.selectedMap[o]&&!isNaN(n[c].value)&&(+n[c].value!==0?u++:a++,f+=+n[c].value,l=Math.max(l,+n[c].value));var v=100,m,g=0,y=t.clockWise,w=t.startAngle.toFixed(2)-0,E,S=t.minAngle||.01,x=360-S*u-.01*a,N,C=t.roseType,k,L,A;for(var c=0,d=n.length;c<d;c++){o=n[c].name;if(!h.selectedMap[o]||isNaN(n[c].value))continue;i?N=i.getColor(o):N=r.getColor(c),m=v,v=n[c].value/f,C!="area"?E=y?w-v*x-(v!==0?S:.01):v*x+w+(v!==0?S:.01):E=y?w-360/d:360/d+w,E=E.toFixed(2)-0,v=(v*100).toFixed(2),k=h.parseRadius(r,t.radius),L=+k[0],A=+k[1],C=="radius"?A=n[c].value/l*(A-L)*.8+(A-L)*.2+L:C=="area"&&(A=Math.sqrt(n[c].value/l)*(A-L)+L);if(y){var O;O=w,w=E,E=O}c>0&&v<4&&m<4&&T(t,n[c],!1)&&h.deepQuery([n[c],t],"itemStyle.normal.label.position")!="center"?g+=v<4?20:-20:g=0,b(e,c,v,g,n[c].selected,L,A,w,E,N),y||(w=E)}}function b(e,t,n,r,i,s,o,u,f,l){var c=w(e,t,n,i,s,o,u,f,l);a.pack(c,p[e],e,p[e].data[t],t,p[e].data[t].name,n),c._lastAddRadius=r,h.shapeList.push(c);var d=E(e,t,n,r,u,f,l,!1);d&&(d._dataIndex=t,h.shapeList.push(d));var v=x(e,t,r,s,o,u,f,l,!1);v&&(v._dataIndex=t,h.shapeList.push(v))}function w(e,t,n,s,o,u,a,l,g){var y=p[e],b=y.data[t],w=[b,y],E=h.parseCenter(r,y.center),S=h.deepMerge(w,"itemStyle.normal")||{},x=h.deepMerge(w,"itemStyle.emphasis")||{},C=h.getItemStyleColor(S.color,e,t,b)||g,k=h.getItemStyleColor(x.color,e,t,b)||(typeof C=="string"?c.lift(C,-0.2):C),L={shape:"sector",zlevel:d,clickable:!0,style:{x:E[0],y:E[1],r0:o,r:u,startAngle:a,endAngle:l,brushType:"both",color:C,lineWidth:S.borderWidth,strokeColor:S.borderColor,lineJoin:"round"},highlightStyle:{color:k,lineWidth:x.borderWidth,strokeColor:x.borderColor,lineJoin:"round"},_seriesIndex:e,_dataIndex:t};if(s){var A=((L.style.startAngle+L.style.endAngle)/2).toFixed(2)-0;L.style._hasSelected=!0,L.style._x=L.style.x,L.style._y=L.style.y;var O=h.query(y,"selectedOffset");L.style.x+=f.cos(A,!0)*O,L.style.y-=f.sin(A,!0)*O,m[e][t]=!0}else m[e][t]=!1;v&&(L.onclick=h.shapeHandler.onclick),h.deepQuery([b,y,i],"calculable")&&(h.setCalculable(L),L.draggable=!0);if(T(y,b,!0)||N(y,b,!0))L.onmouseover=h.shapeHandler.onmouseover;return L}function E(e,t,n,i,s,o,u,a){var c=p[e],v=c.data[t];if(!T(c,v,a))return;var m=a?"emphasis":"normal",g=l.merge(l.clone(v.itemStyle)||{},c.itemStyle,{overwrite:!1,recursive:!0}),y=g[m].label,b=y.textStyle||{},w=h.parseCenter(r,c.center),E=w[0],x=w[1],N,C,k=((o+s)/2+360)%360,L=h.parseRadius(r,c.radius),A,O="middle";return y.position=y.position||g.normal.label.position,y.position=="center"?(L=L[1],N=E,C=x,A="center"):y.position=="inner"?(L=(L[0]+L[1])/2+i,N=Math.round(E+L*f.cos(k,!0)),C=Math.round(x-L*f.sin(k,!0)),u="#fff",A="center"):(L=L[1]- -g[m].labelLine.length+i,N=E+L*f.cos(k,!0),C=x-L*f.sin(k,!0),A=k>=90&&k<=270?"right":"left"),y.position!="center"&&y.position!="inner"&&(N+=A=="left"?20:-20),v.__labelX=N-(A=="left"?5:-5),v.__labelY=C,{shape:"text",zlevel:d+1,hoverable:!1,style:{x:N,y:C,color:b.color||u,text:S(e,t,n,m),textAlign:b.align||A,textBaseline:b.baseline||O,textFont:h.getFont(b)},highlightStyle:{brushType:"fill"},_seriesIndex:e,_dataIndex:t}}function S(e,t,n,r){var i=p[e],s=i.data[t],o=h.deepQuery([s,i],"itemStyle."+r+".label.formatter");if(!o)return s.name;if(typeof o=="function")return o(i.name,s.name,s.value,n);if(typeof o=="string")return o=o.replace("{a}","{a0}").replace("{b}","{b0}").replace("{c}","{c0}").replace("{d}","{d0}"),o=o.replace("{a0}",i.name).replace("{b0}",s.name).replace("{c0}",s.value).replace("{d0}",n),o}function x(e,t,n,i,s,o,u,a,c){var v=p[e],m=v.data[t];if(N(v,m,c)){var g=c?"emphasis":"normal",y=l.merge(l.clone(m.itemStyle)||{},v.itemStyle,{overwrite:!1,recursive:!0}),b=y[g].labelLine,w=b.lineStyle||{},E=h.parseCenter(r,v.center),S=E[0],x=E[1],T=s,C=h.parseRadius(r,v.radius)[1]- -b.length+n,k=(u+o)/2%360,L=f.cos(k,!0),A=f.sin(k,!0);return{shape:"brokenLine",zlevel:d+1,hoverable:!1,style:{pointList:[[S+T*L,x-T*A],[S+C*L,x-C*A],[m.__labelX,m.__labelY]],strokeColor:w.color||a,lineType:w.type,lineWidth:w.width},_seriesIndex:e,_dataIndex:t}}return}function T(e,t,n){return h.deepQuery([t,e],"itemStyle."+(n?"emphasis":"normal")+".label.show")}function N(e,t,n){return h.deepQuery([t,e],"itemStyle."+(n?"emphasis":"normal")+".labelLine.show")}function C(e){var n=l.merge;return e=n(e||{},t.pie,{overwrite:!1,recursive:!0}),e.itemStyle.normal.label.textStyle=n(e.itemStyle.normal.label.textStyle||{},t.textStyle,{overwrite:!1,recursive:!0}),e.itemStyle.emphasis.label.textStyle=n(e.itemStyle.emphasis.label.textStyle||{},t.textStyle,{overwrite:!1,recursive:!0}),e}function k(e,t){s=t,L(e)}function L(e){e&&(i=e,p=i.series),h.clear(),g()}function A(e){var n={};for(var i=0,s=e.length;i<s;i++)n[e[i][0]]=e[i];var o={},u={},a={},f=l.clone(h.shapeList);h.shapeList=[];var c,d,v,m={};for(var i=0,s=e.length;i<s;i++)c=e[i][0],d=e[i][2],v=e[i][3],p[c]&&p[c].type==t.CHART_TYPE_PIE&&(d?(v||(o[c+"_"+p[c].data.length]="delete"),m[c]=1):v?m[c]=0:(o[c+"_-1"]="delete",m[c]=-1),y(c));var g,b;for(var i=0,s=h.shapeList.length;i<s;i++){c=h.shapeList[i]._seriesIndex,g=h.shapeList[i]._dataIndex,b=c+"_"+g;switch(h.shapeList[i].shape){case"sector":o[b]=h.shapeList[i];break;case"text":u[b]=h.shapeList[i];break;case"line":a[b]=h.shapeList[i]}}h.shapeList=[];var w;for(var i=0,s=f.length;i<s;i++){c=f[i]._seriesIndex;if(n[c]){g=f[i]._dataIndex+m[c],b=c+"_"+g,w=o[b];if(!w)continue;if(f[i].shape=="sector")w!="delete"?r.animate(f[i].id,"style").when(400,{startAngle:w.style.startAngle,endAngle:w.style.endAngle}).start():r.animate(f[i].id,"style").when(400,m[c]<0?{endAngle:f[i].style.startAngle}:{startAngle:f[i].style.endAngle}).start();else if(f[i].shape=="text"||f[i].shape=="line")if(w=="delete")r.delShape(f[i].id);else switch(f[i].shape){case"text":w=u[b],r.animate(f[i].id,"style").when(400,{x:w.style.x,y:w.style.y}).start();break;case"line":w=a[b],r.animate(f[i].id,"style").when(400,{xStart:w.style.xStart,yStart:w.style.yStart,xEnd:w.style.xEnd,yEnd:w.style.yEnd}).start()}}}h.shapeList=f}function O(){var e=h.query(i,"animationDuration"),t=h.query(i,"animationEasing"),n,s,o,u,f,l;for(var c=0,p=h.shapeList.length;c<p;c++)h.shapeList[c].shape=="sector"||h.shapeList[c].shape=="circle"||h.shapeList[c].shape=="ring"?(n=h.shapeList[c].style.x,s=h.shapeList[c].style.y,o=h.shapeList[c].style.r0,u=h.shapeList[c].style.r,r.modShape(h.shapeList[c].id,{rotation:[Math.PI*2,n,s],style:{r0:0,r:0}},!0),f=a.get(h.shapeList[c],"series"),l=a.get(h.shapeList[c],"dataIndex"),r.animate(h.shapeList[c].id,"style").when((h.query(f,"animationDuration")||e)+l*10,{r0:o,r:u}).start("QuinticOut"),r.animate(h.shapeList[c].id,"").when((h.query(f,"animationDuration")||e)+l*100,{rotation:[0,n,s]}).start(h.query(f,"animationEasing")||t)):h.shapeList[c]._mark||(l=h.shapeList[c]._dataIndex,r.modShape(h.shapeList[c].id,{scale:[0,0,n,s]},!0),r.animate(h.shapeList[c].id,"").when(e+l*100,{scale:[1,1,n,s]}).start("QuinticOut"));h.animationMark(e,t)}function M(e){if(!h.isClick||!e.target)return;var i,s=e.target,o=s.style,u=a.get(s,"seriesIndex"),l=a.get(s,"dataIndex");for(var c=0,d=h.shapeList.length;c<d;c++)if(h.shapeList[c].id==s.id){u=a.get(s,"seriesIndex"),l=a.get(s,"dataIndex");if(!o._hasSelected){var g=((o.startAngle+o.endAngle)/2).toFixed(2)-0;s.style._hasSelected=!0,m[u][l]=!0,s.style._x=s.style.x,s.style._y=s.style.y,i=h.query(p[u],"selectedOffset"),s.style.x+=f.cos(g,!0)*i,s.style.y-=f.sin(g,!0)*i}else s.style.x=s.style._x,s.style.y=s.style._y,s.style._hasSelected=!1,m[u][l]=!1;r.modShape(s.id,s)}else h.shapeList[c].style._hasSelected&&v=="single"&&(u=a.get(h.shapeList[c],"seriesIndex"),l=a.get(h.shapeList[c],"dataIndex"),h.shapeList[c].style.x=h.shapeList[c].style._x,h.shapeList[c].style.y=h.shapeList[c].style._y,h.shapeList[c].style._hasSelected=!1,m[u][l]=!1,r.modShape(h.shapeList[c].id,h.shapeList[c]));n.dispatch(t.EVENT.PIE_SELECTED,e.event,{selected:m}),r.refresh()}function _(t,n){if(!h.isDrop||!t.target)return;var r=t.target,o=t.dragged,u=a.get(r,"seriesIndex"),f=a.get(r,"dataIndex"),l,c=s.legend;if(f==-1)l={value:a.get(o,"value"),name:a.get(o,"name")},l.value<0&&(l.value=0),p[u].data.push(l),c&&c.add(l.name,o.style.color||o.style.strokeColor);else{var d=e("../util/accMath");l=p[u].data[f],c&&c.del(l.name),l.name+=i.nameConnector+a.get(o,"name"),l.value=d.accAdd(l.value,a.get(o,"value")),c&&c.add(l.name,o.style.color||o.style.strokeColor)}n.dragIn=n.dragIn||!0,h.isDrop=!1;return}function D(e,t){if(!h.isDragend||!e.target)return;var n=e.target,r=a.get(n,"seriesIndex"),i=a.get(n,"dataIndex");s.legend&&s.legend.del(p[r].data[i].name),p[r].data.splice(i,1),t.dragOut=!0,t.needRefresh=!0,h.isDragend=!1;return}var o=e("../component/base");o.call(this,t,r);var u=e("./calculableBase");u.call(this,r,i);var a=e("../util/ecData"),f=e("zrender/tool/math"),l=e("zrender/tool/util"),c=e("zrender/tool/color"),h=this;h.type=t.CHART_TYPE_PIE;var p,d=h.getZlevelBase(),v,m={};h.shapeHandler.onmouseover=function(e){var t=e.target,n=a.get(t,"seriesIndex"),i=a.get(t,"dataIndex"),s=a.get(t,"special"),o=t._lastAddRadius,u=t.style.startAngle,f=t.style.endAngle,l=t.highlightStyle.color,c=E(n,i,s,o,u,f,l,!0);c&&r.addHoverShape(c);var h=x(n,i,o,t.style.r0,t.style.r,u,f,l,!0);h&&r.addHoverShape(h)},h.reformOption=C,h.animation=O,h.init=k,h.refresh=L,h.addDataAnimation=A,h.onclick=M,h.ondrop=_,h.ondragend=D,k(i,s)}return e("../chart").define("pie",t),t}),r("_chart",["require","echarts/chart/scatter","echarts/chart/k","echarts/chart/radar","echarts/chart/chord","echarts/chart/force","echarts/chart/line","echarts/chart/bar","echarts/chart/pie"],function(e){e("echarts/chart/scatter"),e("echarts/chart/k"),e("echarts/chart/radar"),e("echarts/chart/chord"),e("echarts/chart/force"),e("echarts/chart/line"),e("echarts/chart/bar"),e("echarts/chart/pie")});var i=n("zrender");i.tool={color:n("zrender/tool/color"),math:n("zrender/tool/math"),util:n("zrender/tool/util"),vector:n("zrender/tool/vector"),area:n("zrender/tool/area"),event:n("zrender/tool/event")},i.animation={Animation:n("zrender/animation/animation"),Cip:n("zrender/animation/clip"),easing:n("zrender/animation/easing")};var s=n("echarts");s.config=n("echarts/config"),s.util={};var o=n("_chart");e.echarts=s,e.zrender=i})(window);