/ *
Highcharts JS v3 . 0.6 ( 2013 - 10 - 04 )
( c ) 2009 - 2013 Torstein Hønsi
License : www . highcharts . com / license
* /
( function ( ) { function r ( a , b ) { var c ; a || ( a = { } ) ; for ( c in b ) a [ c ] = b [ c ] ; return a } function x ( ) { var a , b = arguments . length , c = { } , d = function ( a , b ) { var c , h ; typeof a !== "object" && ( a = { } ) ; for ( h in b ) b . hasOwnProperty ( h ) && ( c = b [ h ] , a [ h ] = c && typeof c === "object" && Object . prototype . toString . call ( c ) !== "[object Array]" && typeof c . nodeType !== "number" ? d ( a [ h ] || { } , c ) : b [ h ] ) ; return a } ; for ( a = 0 ; a < b ; a ++ ) c = d ( c , arguments [ a ] ) ; return c } function C ( a , b ) { return parseInt ( a , b || 10 ) } function ea ( a ) { return typeof a === "string" } function T ( a ) { return typeof a ===
"object" } function Ia ( a ) { return Object . prototype . toString . call ( a ) === "[object Array]" } function sa ( a ) { return typeof a === "number" } function na ( a ) { return R . log ( a ) / R . LN10 } function fa ( a ) { return R . pow ( 10 , a ) } function ga ( a , b ) { for ( var c = a . length ; c -- ; ) if ( a [ c ] === b ) { a . splice ( c , 1 ) ; break } } function u ( a ) { return a !== w && a !== null } function v ( a , b , c ) { var d , e ; if ( ea ( b ) ) u ( c ) ? a . setAttribute ( b , c ) : a && a . getAttribute && ( e = a . getAttribute ( b ) ) ; else if ( u ( b ) && T ( b ) ) for ( d in b ) a . setAttribute ( d , b [ d ] ) ; return e } function ja ( a ) { return Ia ( a ) ?
a : [ a ] } function o ( ) { var a = arguments , b , c , d = a . length ; for ( b = 0 ; b < d ; b ++ ) if ( c = a [ b ] , typeof c !== "undefined" && c !== null ) return c } function K ( a , b ) { if ( ta && b && b . opacity !== w ) b . filter = "alpha(opacity=" + b . opacity * 100 + ")" ; r ( a . style , b ) } function U ( a , b , c , d , e ) { a = y . createElement ( a ) ; b && r ( a , b ) ; e && K ( a , { padding : 0 , border : S , margin : 0 } ) ; c && K ( a , c ) ; d && d . appendChild ( a ) ; return a } function ha ( a , b ) { var c = function ( ) { } ; c . prototype = new a ; r ( c . prototype , b ) ; return c } function Aa ( a , b , c , d ) { var e = M . lang , a = + a || 0 , f = b === - 1 ? ( a . toString ( ) . split ( "." ) [ 1 ] ||
"" ) . length : isNaN ( b = N ( b ) ) ? 2 : b , b = c === void 0 ? e . decimalPoint : c , d = d === void 0 ? e . thousandsSep : d , e = a < 0 ? "-" : "" , c = String ( C ( a = N ( a ) . toFixed ( f ) ) ) , g = c . length > 3 ? c . length % 3 : 0 ; return e + ( g ? c . substr ( 0 , g ) + d : "" ) + c . substr ( g ) . replace ( /(\d{3})(?=\d)/g , "$1" + d ) + ( f ? b + N ( a - c ) . toFixed ( f ) . slice ( 2 ) : "" ) } function Ba ( a , b ) { return Array ( ( b || 2 ) + 1 - String ( a ) . length ) . join ( 0 ) + a } function mb ( a , b , c ) { var d = a [ b ] ; a [ b ] = function ( ) { var a = Array . prototype . slice . call ( arguments ) ; a . unshift ( d ) ; return c . apply ( this , a ) } } function Ca ( a , b ) { for ( var c = "{" , d = ! 1 ,
e , f , g , h , i , j = [ ] ; ( c = a . indexOf ( c ) ) !== - 1 ; ) { e = a . slice ( 0 , c ) ; if ( d ) { f = e . split ( ":" ) ; g = f . shift ( ) . split ( "." ) ; i = g . length ; e = b ; for ( h = 0 ; h < i ; h ++ ) e = e [ g [ h ] ] ; if ( f . length ) f = f . join ( ":" ) , g = /\.([0-9])/ , h = M . lang , i = void 0 , /f$/ . test ( f ) ? ( i = ( i = f . match ( g ) ) ? i [ 1 ] : - 1 , e = Aa ( e , i , h . decimalPoint , f . indexOf ( "," ) > - 1 ? h . thousandsSep : "" ) ) : e = Xa ( f , e ) } j . push ( e ) ; a = a . slice ( c + 1 ) ; c = ( d = ! d ) ? "}" : "{" } j . push ( a ) ; return j . join ( "" ) } function nb ( a ) { return R . pow ( 10 , P ( R . log ( a ) / R . LN10 ) ) } function ob ( a , b , c , d ) { var e , c = o ( c , 1 ) ; e = a / c ; b || ( b = [ 1 , 2 , 2.5 , 5 , 10 ] , d && d . allowDecimals ===
! 1 && ( c === 1 ? b = [ 1 , 2 , 5 , 10 ] : c <= 0.1 && ( b = [ 1 / c ] ) ) ) ; for ( d = 0 ; d < b . length ; d ++ ) if ( a = b [ d ] , e <= ( b [ d ] + ( b [ d + 1 ] || b [ d ] ) ) / 2 ) break ; a *= c ; return a } function Cb ( a , b ) { var c = b || [ [ Db , [ 1 , 2 , 5 , 10 , 20 , 25 , 50 , 100 , 200 , 500 ] ] , [ pb , [ 1 , 2 , 5 , 10 , 15 , 30 ] ] , [ Ya , [ 1 , 2 , 5 , 10 , 15 , 30 ] ] , [ Qa , [ 1 , 2 , 3 , 4 , 6 , 8 , 12 ] ] , [ ua , [ 1 , 2 ] ] , [ Za , [ 1 , 2 ] ] , [ Ra , [ 1 , 2 , 3 , 4 , 6 ] ] , [ Da , null ] ] , d = c [ c . length - 1 ] , e = D [ d [ 0 ] ] , f = d [ 1 ] , g ; for ( g = 0 ; g < c . length ; g ++ ) if ( d = c [ g ] , e = D [ d [ 0 ] ] , f = d [ 1 ] , c [ g + 1 ] && a <= ( e * f [ f . length - 1 ] + D [ c [ g + 1 ] [ 0 ] ] ) / 2 ) break ; e === D [ Da ] && a < 5 * e && ( f = [ 1 , 2 , 5 ] ) ; c = ob ( a / e , f , d [ 0 ] === Da ? nb ( a / e ) : 1 ) ;
return { unitRange : e , count : c , unitName : d [ 0 ] } } function Eb ( a , b , c , d ) { var e = [ ] , f = { } , g = M . global . useUTC , h , i = new Date ( b ) , j = a . unitRange , k = a . count ; if ( u ( b ) ) { j >= D [ pb ] && ( i . setMilliseconds ( 0 ) , i . setSeconds ( j >= D [ Ya ] ? 0 : k * P ( i . getSeconds ( ) / k ) ) ) ; if ( j >= D [ Ya ] ) i [ Fb ] ( j >= D [ Qa ] ? 0 : k * P ( i [ qb ] ( ) / k ) ) ; if ( j >= D [ Qa ] ) i [ Gb ] ( j >= D [ ua ] ? 0 : k * P ( i [ rb ] ( ) / k ) ) ; if ( j >= D [ ua ] ) i [ sb ] ( j >= D [ Ra ] ? 1 : k * P ( i [ Sa ] ( ) / k ) ) ; j >= D [ Ra ] && ( i [ Hb ] ( j >= D [ Da ] ? 0 : k * P ( i [ $a ] ( ) / k ) ) , h = i [ ab ] ( ) ) ; j >= D [ Da ] && ( h -= h % k , i [ Ib ] ( h ) ) ; if ( j === D [ Za ] ) i [ sb ] ( i [ Sa ] ( ) - i [ tb ] ( ) + o ( d , 1 ) ) ; b = 1 ; h = i [ ab ] ( ) ; for ( var d =
i . getTime ( ) , l = i [ $a ] ( ) , m = i [ Sa ] ( ) , p = g ? 0 : ( 864E5 + i . getTimezoneOffset ( ) * 6E4 ) % 864E5 ; d < c ; ) e . push ( d ) , j === D [ Da ] ? d = bb ( h + b * k , 0 ) : j === D [ Ra ] ? d = bb ( h , l + b * k ) : ! g && ( j === D [ ua ] || j === D [ Za ] ) ? d = bb ( h , l , m + b * k * ( j === D [ ua ] ? 1 : 7 ) ) : d += j * k , b ++ ; e . push ( d ) ; n ( ub ( e , function ( a ) { return j <= D [ Qa ] && a % D [ ua ] === p } ) , function ( a ) { f [ a ] = ua } ) } e . info = r ( a , { higherRanks : f , totalRange : j * k } ) ; return e } function Jb ( ) { this . symbol = this . color = 0 } function Kb ( a , b ) { var c = a . length , d , e ; for ( e = 0 ; e < c ; e ++ ) a [ e ] . ss _i = e ; a . sort ( function ( a , c ) { d = b ( a , c ) ; return d === 0 ? a . ss _i - c . ss _i :
d } ) ; for ( e = 0 ; e < c ; e ++ ) delete a [ e ] . ss _i } function Ja ( a ) { for ( var b = a . length , c = a [ 0 ] ; b -- ; ) a [ b ] < c && ( c = a [ b ] ) ; return c } function va ( a ) { for ( var b = a . length , c = a [ 0 ] ; b -- ; ) a [ b ] > c && ( c = a [ b ] ) ; return c } function Ka ( a , b ) { for ( var c in a ) a [ c ] && a [ c ] !== b && a [ c ] . destroy && a [ c ] . destroy ( ) , delete a [ c ] } function Ta ( a ) { cb || ( cb = U ( Ea ) ) ; a && cb . appendChild ( a ) ; cb . innerHTML = "" } function ka ( a , b ) { var c = "Highcharts error #" + a + ": www.highcharts.com/errors/" + a ; if ( b ) throw c ; else O . console && console . log ( c ) } function ia ( a ) { return parseFloat ( a . toPrecision ( 14 ) ) }
function La ( a , b ) { Fa = o ( a , b . animation ) } function Lb ( ) { var a = M . global . useUTC , b = a ? "getUTC" : "get" , c = a ? "setUTC" : "set" ; bb = a ? Date . UTC : function ( a , b , c , g , h , i ) { return ( new Date ( a , b , o ( c , 1 ) , o ( g , 0 ) , o ( h , 0 ) , o ( i , 0 ) ) ) . getTime ( ) } ; qb = b + "Minutes" ; rb = b + "Hours" ; tb = b + "Day" ; Sa = b + "Date" ; $a = b + "Month" ; ab = b + "FullYear" ; Fb = c + "Minutes" ; Gb = c + "Hours" ; sb = c + "Date" ; Hb = c + "Month" ; Ib = c + "FullYear" } function wa ( ) { } function Ma ( a , b , c , d ) { this . axis = a ; this . pos = b ; this . type = c || "" ; this . isNew = ! 0 ; ! c && ! d && this . addLabel ( ) } function vb ( a , b ) { this . axis = a ; if ( b ) this . options =
b , this . id = b . id } function Mb ( a , b , c , d , e , f ) { var g = a . chart . inverted ; this . axis = a ; this . isNegative = c ; this . options = b ; this . x = d ; this . total = null ; this . points = { } ; this . stack = e ; this . percent = f === "percent" ; this . alignOptions = { align : b . align || ( g ? c ? "left" : "right" : "center" ) , verticalAlign : b . verticalAlign || ( g ? "middle" : c ? "bottom" : "top" ) , y : o ( b . y , g ? 4 : c ? 14 : - 6 ) , x : o ( b . x , g ? c ? - 6 : 6 : 0 ) } ; this . textAlign = b . textAlign || ( g ? c ? "right" : "left" : "center" ) } function db ( ) { this . init . apply ( this , arguments ) } function wb ( ) { this . init . apply ( this , arguments ) }
function xb ( a , b ) { this . init ( a , b ) } function eb ( a , b ) { this . init ( a , b ) } function yb ( ) { this . init . apply ( this , arguments ) } var w , y = document , O = window , R = Math , t = R . round , P = R . floor , xa = R . ceil , s = R . max , I = R . min , N = R . abs , V = R . cos , ca = R . sin , ya = R . PI , Ua = ya * 2 / 360 , oa = navigator . userAgent , Nb = O . opera , ta = /msie/i . test ( oa ) && ! Nb , fb = y . documentMode === 8 , gb = /AppleWebKit/ . test ( oa ) , hb = /Firefox/ . test ( oa ) , Ob = /(Mobile|Android|Windows Phone)/ . test ( oa ) , za = "http://www.w3.org/2000/svg" , Z = ! ! y . createElementNS && ! ! y . createElementNS ( za , "svg" ) . createSVGRect ,
Ub = hb && parseInt ( oa . split ( "Firefox/" ) [ 1 ] , 10 ) < 4 , $ = ! Z && ! ta && ! ! y . createElement ( "canvas" ) . getContext , Va , ib = y . documentElement . ontouchstart !== w , Pb = { } , zb = 0 , cb , M , Xa , Fa , Ab , D , pa = function ( ) { } , Ga = [ ] , Ea = "div" , S = "none" , Qb = "rgba(192,192,192," + ( Z ? 1.0 E - 4 : 0.002 ) + ")" , Db = "millisecond" , pb = "second" , Ya = "minute" , Qa = "hour" , ua = "day" , Za = "week" , Ra = "month" , Da = "year" , Rb = "stroke-width" , bb , qb , rb , tb , Sa , $a , ab , Fb , Gb , sb , Hb , Ib , W = { } ; O . Highcharts = O . Highcharts ? ka ( 16 , ! 0 ) : { } ; Xa = function ( a , b , c ) { if ( ! u ( b ) || isNaN ( b ) ) return "Invalid date" ; var a =
o ( a , "%Y-%m-%d %H:%M:%S" ) , d = new Date ( b ) , e , f = d [ rb ] ( ) , g = d [ tb ] ( ) , h = d [ Sa ] ( ) , i = d [ $a ] ( ) , j = d [ ab ] ( ) , k = M . lang , l = k . weekdays , d = r ( { a : l [ g ] . substr ( 0 , 3 ) , A : l [ g ] , d : Ba ( h ) , e : h , b : k . shortMonths [ i ] , B : k . months [ i ] , m : Ba ( i + 1 ) , y : j . toString ( ) . substr ( 2 , 2 ) , Y : j , H : Ba ( f ) , I : Ba ( f % 12 || 12 ) , l : f % 12 || 12 , M : Ba ( d [ qb ] ( ) ) , p : f < 12 ? "AM" : "PM" , P : f < 12 ? "am" : "pm" , S : Ba ( d . getSeconds ( ) ) , L : Ba ( t ( b % 1E3 ) , 3 ) } , Highcharts . dateFormats ) ; for ( e in d ) for ( ; a . indexOf ( "%" + e ) !== - 1 ; ) a = a . replace ( "%" + e , typeof d [ e ] === "function" ? d [ e ] ( b ) : d [ e ] ) ; return c ? a . substr ( 0 , 1 ) . toUpperCase ( ) +
a . substr ( 1 ) : a } ; Jb . prototype = { wrapColor : function ( a ) { if ( this . color >= a ) this . color = 0 } , wrapSymbol : function ( a ) { if ( this . symbol >= a ) this . symbol = 0 } } ; D = function ( ) { for ( var a = 0 , b = arguments , c = b . length , d = { } ; a < c ; a ++ ) d [ b [ a ++ ] ] = b [ a ] ; return d } ( Db , 1 , pb , 1E3 , Ya , 6E4 , Qa , 36E5 , ua , 864E5 , Za , 6048E5 , Ra , 26784E5 , Da , 31556952E3 ) ; Ab = { init : function ( a , b , c ) { var b = b || "" , d = a . shift , e = b . indexOf ( "C" ) > - 1 , f = e ? 7 : 3 , g , b = b . split ( " " ) , c = [ ] . concat ( c ) , h , i , j = function ( a ) { for ( g = a . length ; g -- ; ) a [ g ] === "M" && a . splice ( g + 1 , 0 , a [ g + 1 ] , a [ g + 2 ] , a [ g + 1 ] , a [ g + 2 ] ) } ; e &&
( j ( b ) , j ( c ) ) ; a . isArea && ( h = b . splice ( b . length - 6 , 6 ) , i = c . splice ( c . length - 6 , 6 ) ) ; if ( d <= c . length / f && b . length === c . length ) for ( ; d -- ; ) c = [ ] . concat ( c ) . splice ( 0 , f ) . concat ( c ) ; a . shift = 0 ; if ( b . length ) for ( a = c . length ; b . length < a ; ) d = [ ] . concat ( b ) . splice ( b . length - f , f ) , e && ( d [ f - 6 ] = d [ f - 2 ] , d [ f - 5 ] = d [ f - 1 ] ) , b = b . concat ( d ) ; h && ( b = b . concat ( h ) , c = c . concat ( i ) ) ; return [ b , c ] } , step : function ( a , b , c , d ) { var e = [ ] , f = a . length ; if ( c === 1 ) e = d ; else if ( f === b . length && c < 1 ) for ( ; f -- ; ) d = parseFloat ( a [ f ] ) , e [ f ] = isNaN ( d ) ? a [ f ] : c * parseFloat ( b [ f ] - d ) + d ; else e = b ; return e } } ;
( function ( a ) { O . HighchartsAdapter = O . HighchartsAdapter || a && { init : function ( b ) { var c = a . fx , d = c . step , e , f = a . Tween , g = f && f . propHooks ; e = a . cssHooks . opacity ; a . extend ( a . easing , { easeOutQuad : function ( a , b , c , d , e ) { return - d * ( b /= e ) * ( b - 2 ) + c } } ) ; a . each ( [ "cur" , "_default" , "width" , "height" , "opacity" ] , function ( a , b ) { var e = d , k , l ; b === "cur" ? e = c . prototype : b === "_default" && f && ( e = g [ b ] , b = "set" ) ; ( k = e [ b ] ) && ( e [ b ] = function ( c ) { c = a ? c : this ; if ( c . prop !== "align" ) return l = c . elem , l . attr ? l . attr ( c . prop , b === "cur" ? w : c . now ) : k . apply ( this , arguments ) } ) } ) ;
mb ( e , "get" , function ( a , b , c ) { return b . attr ? b . opacity || 0 : a . call ( this , b , c ) } ) ; e = function ( a ) { var c = a . elem , d ; if ( ! a . started ) d = b . init ( c , c . d , c . toD ) , a . start = d [ 0 ] , a . end = d [ 1 ] , a . started = ! 0 ; c . attr ( "d" , b . step ( a . start , a . end , a . pos , c . toD ) ) } ; f ? g . d = { set : e } : d . d = e ; this . each = Array . prototype . forEach ? function ( a , b ) { return Array . prototype . forEach . call ( a , b ) } : function ( a , b ) { for ( var c = 0 , d = a . length ; c < d ; c ++ ) if ( b . call ( a [ c ] , a [ c ] , c , a ) === ! 1 ) return c } ; a . fn . highcharts = function ( ) { var a = "Chart" , b = arguments , c , d ; ea ( b [ 0 ] ) && ( a = b [ 0 ] , b = Array . prototype . slice . call ( b ,
1 ) ) ; c = b [ 0 ] ; if ( c !== w ) c . chart = c . chart || { } , c . chart . renderTo = this [ 0 ] , new Highcharts [ a ] ( c , b [ 1 ] ) , d = this ; c === w && ( d = Ga [ v ( this [ 0 ] , "data-highcharts-chart" ) ] ) ; return d } } , getScript : a . getScript , inArray : a . inArray , adapterRun : function ( b , c ) { return a ( b ) [ c ] ( ) } , grep : a . grep , map : function ( a , c ) { for ( var d = [ ] , e = 0 , f = a . length ; e < f ; e ++ ) d [ e ] = c . call ( a [ e ] , a [ e ] , e , a ) ; return d } , offset : function ( b ) { return a ( b ) . offset ( ) } , addEvent : function ( b , c , d ) { a ( b ) . bind ( c , d ) } , removeEvent : function ( b , c , d ) { var e = y . removeEventListener ? "removeEventListener" :
"detachEvent" ; y [ e ] && b && ! b [ e ] && ( b [ e ] = function ( ) { } ) ; a ( b ) . unbind ( c , d ) } , fireEvent : function ( b , c , d , e ) { var f = a . Event ( c ) , g = "detached" + c , h ; ! ta && d && ( delete d . layerX , delete d . layerY ) ; r ( f , d ) ; b [ c ] && ( b [ g ] = b [ c ] , b [ c ] = null ) ; a . each ( [ "preventDefault" , "stopPropagation" ] , function ( a , b ) { var c = f [ b ] ; f [ b ] = function ( ) { try { c . call ( f ) } catch ( a ) { b === "preventDefault" && ( h = ! 0 ) } } } ) ; a ( b ) . trigger ( f ) ; b [ g ] && ( b [ c ] = b [ g ] , b [ g ] = null ) ; e && ! f . isDefaultPrevented ( ) && ! h && e ( f ) } , washMouseEvent : function ( a ) { var c = a . originalEvent || a ; if ( c . pageX === w ) c . pageX =
a . pageX , c . pageY = a . pageY ; return c } , animate : function ( b , c , d ) { var e = a ( b ) ; if ( ! b . style ) b . style = { } ; if ( c . d ) b . toD = c . d , c . d = 1 ; e . stop ( ) ; c . opacity !== w && b . attr && ( c . opacity += "px" ) ; e . animate ( c , d ) } , stop : function ( b ) { a ( b ) . stop ( ) } } } ) ( O . jQuery ) ; var X = O . HighchartsAdapter , G = X || { } ; X && X . init . call ( X , Ab ) ; var jb = G . adapterRun , Vb = G . getScript , qa = G . inArray , n = G . each , ub = G . grep , Wb = G . offset , Na = G . map , J = G . addEvent , aa = G . removeEvent , z = G . fireEvent , Xb = G . washMouseEvent , Bb = G . animate , Wa = G . stop , G = { enabled : ! 0 , x : 0 , y : 15 , style : { color : "#666" , cursor : "default" ,
fontSize : "11px" , lineHeight : "14px" } } ; M = { colors : "#2f7ed8,#0d233a,#8bbc21,#910000,#1aadce,#492970,#f28f43,#77a1e5,#c42525,#a6c96a" . split ( "," ) , symbols : [ "circle" , "diamond" , "square" , "triangle" , "triangle-down" ] , lang : { loading : "Loading..." , months : "January,February,March,April,May,June,July,August,September,October,November,December" . split ( "," ) , shortMonths : "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec" . split ( "," ) , weekdays : "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday" . split ( "," ) , decimalPoint : "." ,
numericSymbols : "k,M,G,T,P,E" . split ( "," ) , resetZoom : "Reset zoom" , resetZoomTitle : "Reset zoom level 1:1" , thousandsSep : "," } , global : { useUTC : ! 0 , canvasToolsURL : "http://code.highcharts.com/3.0.6/modules/canvas-tools.js" , VMLRadialGradientURL : "http://code.highcharts.com/3.0.6/gfx/vml-radial-gradient.png" } , chart : { borderColor : "#4572A7" , borderRadius : 5 , defaultSeriesType : "line" , ignoreHiddenSeries : ! 0 , spacing : [ 10 , 10 , 15 , 10 ] , style : { fontFamily : '"Lucida Grande", "Lucida Sans Unicode", Verdana, Arial, Helvetica, sans-serif' ,
fontSize : "12px" } , backgroundColor : "#FFFFFF" , plotBorderColor : "#C0C0C0" , resetZoomButton : { theme : { zIndex : 20 } , position : { align : "right" , x : - 10 , y : 10 } } } , title : { text : "Chart title" , align : "center" , margin : 15 , style : { color : "#274b6d" , fontSize : "16px" } } , subtitle : { text : "" , align : "center" , style : { color : "#4d759e" } } , plotOptions : { line : { allowPointSelect : ! 1 , showCheckbox : ! 1 , animation : { duration : 1E3 } , events : { } , lineWidth : 2 , marker : { enabled : ! 0 , lineWidth : 0 , radius : 4 , lineColor : "#FFFFFF" , states : { hover : { enabled : ! 0 } , select : { fillColor : "#FFFFFF" ,
lineColor : "#000000" , lineWidth : 2 } } } , point : { events : { } } , dataLabels : x ( G , { align : "center" , enabled : ! 1 , formatter : function ( ) { return this . y === null ? "" : Aa ( this . y , - 1 ) } , verticalAlign : "bottom" , y : 0 } ) , cropThreshold : 300 , pointRange : 0 , showInLegend : ! 0 , states : { hover : { marker : { } } , select : { marker : { } } } , stickyTracking : ! 0 } } , labels : { style : { position : "absolute" , color : "#3E576F" } } , legend : { enabled : ! 0 , align : "center" , layout : "horizontal" , labelFormatter : function ( ) { return this . name } , borderWidth : 1 , borderColor : "#909090" , borderRadius : 5 , navigation : { activeColor : "#274b6d" ,
inactiveColor : "#CCC" } , shadow : ! 1 , itemStyle : { cursor : "pointer" , color : "#274b6d" , fontSize : "12px" } , itemHoverStyle : { color : "#000" } , itemHiddenStyle : { color : "#CCC" } , itemCheckboxStyle : { position : "absolute" , width : "13px" , height : "13px" } , symbolWidth : 16 , symbolPadding : 5 , verticalAlign : "bottom" , x : 0 , y : 0 , title : { style : { fontWeight : "bold" } } } , loading : { labelStyle : { fontWeight : "bold" , position : "relative" , top : "1em" } , style : { position : "absolute" , backgroundColor : "white" , opacity : 0.5 , textAlign : "center" } } , tooltip : { enabled : ! 0 , animation : Z ,
backgroundColor : "rgba(255, 255, 255, .85)" , borderWidth : 1 , borderRadius : 3 , dateTimeLabelFormats : { millisecond : "%A, %b %e, %H:%M:%S.%L" , second : "%A, %b %e, %H:%M:%S" , minute : "%A, %b %e, %H:%M" , hour : "%A, %b %e, %H:%M" , day : "%A, %b %e, %Y" , week : "Week from %A, %b %e, %Y" , month : "%B %Y" , year : "%Y" } , headerFormat : '<span style="font-size: 10px">{point.key}</span><br/>' , pointFormat : '<span style="color:{series.color}">{series.name}</span>: <b>{point.y}</b><br/>' , shadow : ! 0 , snap : Ob ? 25 : 10 , style : { color : "#333333" , cursor : "default" ,
fontSize : "12px" , padding : "8px" , whiteSpace : "nowrap" } } , credits : { enabled : ! 0 , text : "Highcharts.com" , href : "http://www.highcharts.com" , position : { align : "right" , x : - 10 , verticalAlign : "bottom" , y : - 5 } , style : { cursor : "pointer" , color : "#909090" , fontSize : "9px" } } } ; var Y = M . plotOptions , X = Y . line ; Lb ( ) ; var ra = function ( a ) { var b = [ ] , c , d ; ( function ( a ) { a && a . stops ? d = Na ( a . stops , function ( a ) { return ra ( a [ 1 ] ) } ) : ( c = /rgba\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]?(?:\.[0-9]+)?)\s*\)/ . exec ( a ) ) ? b = [ C ( c [ 1 ] ) , C ( c [ 2 ] ) ,
C ( c [ 3 ] ) , parseFloat ( c [ 4 ] , 10 ) ] : ( c = /#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/ . exec ( a ) ) ? b = [ C ( c [ 1 ] , 16 ) , C ( c [ 2 ] , 16 ) , C ( c [ 3 ] , 16 ) , 1 ] : ( c = /rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/ . exec ( a ) ) && ( b = [ C ( c [ 1 ] ) , C ( c [ 2 ] ) , C ( c [ 3 ] ) , 1 ] ) } ) ( a ) ; return { get : function ( c ) { var f ; d ? ( f = x ( a ) , f . stops = [ ] . concat ( f . stops ) , n ( d , function ( a , b ) { f . stops [ b ] = [ f . stops [ b ] [ 0 ] , a . get ( c ) ] } ) ) : f = b && ! isNaN ( b [ 0 ] ) ? c === "rgb" ? "rgb(" + b [ 0 ] + "," + b [ 1 ] + "," + b [ 2 ] + ")" : c === "a" ? b [ 3 ] : "rgba(" + b . join ( "," ) + ")" : a ; return f } , brighten : function ( a ) { if ( d ) n ( d ,
function ( b ) { b . brighten ( a ) } ) ; else if ( sa ( a ) && a !== 0 ) { var c ; for ( c = 0 ; c < 3 ; c ++ ) b [ c ] += C ( a * 255 ) , b [ c ] < 0 && ( b [ c ] = 0 ) , b [ c ] > 255 && ( b [ c ] = 255 ) } return this } , rgba : b , setOpacity : function ( a ) { b [ 3 ] = a ; return this } } } ; wa . prototype = { init : function ( a , b ) { this . element = b === "span" ? U ( b ) : y . createElementNS ( za , b ) ; this . renderer = a ; this . attrSetters = { } } , opacity : 1 , animate : function ( a , b , c ) { b = o ( b , Fa , ! 0 ) ; Wa ( this ) ; if ( b ) { b = x ( b ) ; if ( c ) b . complete = c ; Bb ( this , a , b ) } else this . attr ( a ) , c && c ( ) } , attr : function ( a , b ) { var c , d , e , f , g = this . element , h = g . nodeName . toLowerCase ( ) ,
i = this . renderer , j , k = this . attrSetters , l = this . shadows , m , p , q = this ; ea ( a ) && u ( b ) && ( c = a , a = { } , a [ c ] = b ) ; if ( ea ( a ) ) c = a , h === "circle" ? c = { x : "cx" , y : "cy" } [ c ] || c : c === "strokeWidth" && ( c = "stroke-width" ) , q = v ( g , c ) || this [ c ] || 0 , c !== "d" && c !== "visibility" && c !== "fill" && ( q = parseFloat ( q ) ) ; else { for ( c in a ) if ( j = ! 1 , d = a [ c ] , e = k [ c ] && k [ c ] . call ( this , d , c ) , e !== ! 1 ) { e !== w && ( d = e ) ; if ( c === "d" ) d && d . join && ( d = d . join ( " " ) ) , /(NaN| {2}|^$)/ . test ( d ) && ( d = "M 0 0" ) ; else if ( c === "x" && h === "text" ) for ( e = 0 ; e < g . childNodes . length ; e ++ ) f = g . childNodes [ e ] , v ( f , "x" ) ===
v ( g , "x" ) && v ( f , "x" , d ) ; else if ( this . rotation && ( c === "x" || c === "y" ) ) p = ! 0 ; else if ( c === "fill" ) d = i . color ( d , g , c ) ; else if ( h === "circle" && ( c === "x" || c === "y" ) ) c = { x : "cx" , y : "cy" } [ c ] || c ; else if ( h === "rect" && c === "r" ) v ( g , { rx : d , ry : d } ) , j = ! 0 ; else if ( c === "translateX" || c === "translateY" || c === "rotation" || c === "verticalAlign" || c === "scaleX" || c === "scaleY" ) j = p = ! 0 ; else if ( c === "stroke" ) d = i . color ( d , g , c ) ; else if ( c === "dashstyle" ) if ( c = "stroke-dasharray" , d = d && d . toLowerCase ( ) , d === "solid" ) d = S ; else { if ( d ) { d = d . replace ( "shortdashdotdot" , "3,1,1,1,1,1," ) . replace ( "shortdashdot" ,
"3,1,1,1" ) . replace ( "shortdot" , "1,1," ) . replace ( "shortdash" , "3,1," ) . replace ( "longdash" , "8,3," ) . replace ( /dot/g , "1,3," ) . replace ( "dash" , "4,3," ) . replace ( /,$/ , "" ) . split ( "," ) ; for ( e = d . length ; e -- ; ) d [ e ] = C ( d [ e ] ) * o ( a [ "stroke-width" ] , this [ "stroke-width" ] ) ; d = d . join ( "," ) } } else if ( c === "width" ) d = C ( d ) ; else if ( c === "align" ) c = "text-anchor" , d = { left : "start" , center : "middle" , right : "end" } [ d ] ; else if ( c === "title" ) e = g . getElementsByTagName ( "title" ) [ 0 ] , e || ( e = y . createElementNS ( za , "title" ) , g . appendChild ( e ) ) , e . textContent = d ; c === "strokeWidth" &&
( c = "stroke-width" ) ; if ( c === "stroke-width" || c === "stroke" ) { this [ c ] = d ; if ( this . stroke && this [ "stroke-width" ] ) v ( g , "stroke" , this . stroke ) , v ( g , "stroke-width" , this [ "stroke-width" ] ) , this . hasStroke = ! 0 ; else if ( c === "stroke-width" && d === 0 && this . hasStroke ) g . removeAttribute ( "stroke" ) , this . hasStroke = ! 1 ; j = ! 0 } this . symbolName && /^(x|y|width|height|r|start|end|innerR|anchorX|anchorY)/ . test ( c ) && ( m || ( this . symbolAttr ( a ) , m = ! 0 ) , j = ! 0 ) ; if ( l && /^(width|height|visibility|x|y|d|transform|cx|cy|r)$/ . test ( c ) ) for ( e = l . length ; e -- ; ) v ( l [ e ] ,
c , c === "height" ? s ( d - ( l [ e ] . cutHeight || 0 ) , 0 ) : d ) ; if ( ( c === "width" || c === "height" ) && h === "rect" && d < 0 ) d = 0 ; this [ c ] = d ; c === "text" ? ( d !== this . textStr && delete this . bBox , this . textStr = d , this . added && i . buildText ( this ) ) : j || v ( g , c , d ) } p && this . updateTransform ( ) } return q } , addClass : function ( a ) { var b = this . element , c = v ( b , "class" ) || "" ; c . indexOf ( a ) === - 1 && v ( b , "class" , c + " " + a ) ; return this } , symbolAttr : function ( a ) { var b = this ; n ( "x,y,r,start,end,width,height,innerR,anchorX,anchorY" . split ( "," ) , function ( c ) { b [ c ] = o ( a [ c ] , b [ c ] ) } ) ; b . attr ( { d : b . renderer . symbols [ b . symbolName ] ( b . x ,
b . y , b . width , b . height , b ) } ) } , clip : function ( a ) { return this . attr ( "clip-path" , a ? "url(" + this . renderer . url + "#" + a . id + ")" : S ) } , crisp : function ( a , b , c , d , e ) { var f , g = { } , h = { } , i , a = a || this . strokeWidth || this . attr && this . attr ( "stroke-width" ) || 0 ; i = t ( a ) % 2 / 2 ; h . x = P ( b || this . x || 0 ) + i ; h . y = P ( c || this . y || 0 ) + i ; h . width = P ( ( d || this . width || 0 ) - 2 * i ) ; h . height = P ( ( e || this . height || 0 ) - 2 * i ) ; h . strokeWidth = a ; for ( f in h ) this [ f ] !== h [ f ] && ( this [ f ] = g [ f ] = h [ f ] ) ; return g } , css : function ( a ) { var b = this . element , c = a && a . width && b . nodeName . toLowerCase ( ) === "text" ,
d , e = "" , f = function ( a , b ) { return "-" + b . toLowerCase ( ) } ; if ( a && a . color ) a . fill = a . color ; this . styles = a = r ( this . styles , a ) ; $ && c && delete a . width ; if ( ta && ! Z ) c && delete a . width , K ( this . element , a ) ; else { for ( d in a ) e += d . replace ( /([A-Z])/g , f ) + ":" + a [ d ] + ";" ; v ( b , "style" , e ) } c && this . added && this . renderer . buildText ( this ) ; return this } , on : function ( a , b ) { var c = this , d = c . element ; ib && a === "click" ? ( d . ontouchstart = function ( a ) { c . touchEventFired = Date . now ( ) ; a . preventDefault ( ) ; b . call ( d , a ) } , d . onclick = function ( a ) { ( oa . indexOf ( "Android" ) === - 1 ||
Date . now ( ) - ( c . touchEventFired || 0 ) > 1100 ) && b . call ( d , a ) } ) : d [ "on" + a ] = b ; return this } , setRadialReference : function ( a ) { this . element . radialReference = a ; return this } , translate : function ( a , b ) { return this . attr ( { translateX : a , translateY : b } ) } , invert : function ( ) { this . inverted = ! 0 ; this . updateTransform ( ) ; return this } , htmlCss : function ( a ) { var b = this . element ; if ( b = a && b . tagName === "SPAN" && a . width ) delete a . width , this . textWidth = b , this . updateTransform ( ) ; this . styles = r ( this . styles , a ) ; K ( this . element , a ) ; return this } , htmlGetBBox : function ( ) { var a =
this . element , b = this . bBox ; if ( ! b ) { if ( a . nodeName === "text" ) a . style . position = "absolute" ; b = this . bBox = { x : a . offsetLeft , y : a . offsetTop , width : a . offsetWidth , height : a . offsetHeight } } return b } , htmlUpdateTransform : function ( ) { if ( this . added ) { var a = this . renderer , b = this . element , c = this . translateX || 0 , d = this . translateY || 0 , e = this . x || 0 , f = this . y || 0 , g = this . textAlign || "left" , h = { left : 0 , center : 0.5 , right : 1 } [ g ] , i = g && g !== "left" , j = this . shadows ; K ( b , { marginLeft : c , marginTop : d } ) ; j && n ( j , function ( a ) { K ( a , { marginLeft : c + 1 , marginTop : d + 1 } ) } ) ;
this . inverted && n ( b . childNodes , function ( c ) { a . invertChild ( c , b ) } ) ; if ( b . tagName === "SPAN" ) { var k , l , j = this . rotation , m ; k = 0 ; var p = 1 , q = 0 , ba ; m = C ( this . textWidth ) ; var A = this . xCorr || 0 , L = this . yCorr || 0 , Sb = [ j , g , b . innerHTML , this . textWidth ] . join ( "," ) ; if ( Sb !== this . cTT ) { u ( j ) && ( k = j * Ua , p = V ( k ) , q = ca ( k ) , this . setSpanRotation ( j , q , p ) ) ; k = o ( this . elemWidth , b . offsetWidth ) ; l = o ( this . elemHeight , b . offsetHeight ) ; if ( k > m && /[ \-]/ . test ( b . textContent || b . innerText ) ) K ( b , { width : m + "px" , display : "block" , whiteSpace : "normal" } ) , k = m ; m = a . fontMetrics ( b . style . fontSize ) . b ;
A = p < 0 && - k ; L = q < 0 && - l ; ba = p * q < 0 ; A += q * m * ( ba ? 1 - h : h ) ; L -= p * m * ( j ? ba ? h : 1 - h : 1 ) ; i && ( A -= k * h * ( p < 0 ? - 1 : 1 ) , j && ( L -= l * h * ( q < 0 ? - 1 : 1 ) ) , K ( b , { textAlign : g } ) ) ; this . xCorr = A ; this . yCorr = L } K ( b , { left : e + A + "px" , top : f + L + "px" } ) ; if ( gb ) l = b . offsetHeight ; this . cTT = Sb } } else this . alignOnAdd = ! 0 } , setSpanRotation : function ( a ) { var b = { } ; b [ ta ? "-ms-transform" : gb ? "-webkit-transform" : hb ? "MozTransform" : Nb ? "-o-transform" : "" ] = b . transform = "rotate(" + a + "deg)" ; K ( this . element , b ) } , updateTransform : function ( ) { var a = this . translateX || 0 , b = this . translateY || 0 , c =
this . scaleX , d = this . scaleY , e = this . inverted , f = this . rotation ; e && ( a += this . attr ( "width" ) , b += this . attr ( "height" ) ) ; a = [ "translate(" + a + "," + b + ")" ] ; e ? a . push ( "rotate(90) scale(-1,1)" ) : f && a . push ( "rotate(" + f + " " + ( this . x || 0 ) + " " + ( this . y || 0 ) + ")" ) ; ( u ( c ) || u ( d ) ) && a . push ( "scale(" + o ( c , 1 ) + " " + o ( d , 1 ) + ")" ) ; a . length && v ( this . element , "transform" , a . join ( " " ) ) } , toFront : function ( ) { var a = this . element ; a . parentNode . appendChild ( a ) ; return this } , align : function ( a , b , c ) { var d , e , f , g , h = { } ; e = this . renderer ; f = e . alignedObjects ; if ( a ) { if ( this . alignOptions =
a , this . alignByTranslate = b , ! c || ea ( c ) ) this . alignTo = d = c || "renderer" , ga ( f , this ) , f . push ( this ) , c = null } else a = this . alignOptions , b = this . alignByTranslate , d = this . alignTo ; c = o ( c , e [ d ] , e ) ; d = a . align ; e = a . verticalAlign ; f = ( c . x || 0 ) + ( a . x || 0 ) ; g = ( c . y || 0 ) + ( a . y || 0 ) ; if ( d === "right" || d === "center" ) f += ( c . width - ( a . width || 0 ) ) / { right : 1 , center : 2 } [ d ] ; h [ b ? "translateX" : "x" ] = t ( f ) ; if ( e === "bottom" || e === "middle" ) g += ( c . height - ( a . height || 0 ) ) / ( { bottom : 1 , middle : 2 } [ e ] || 1 ) ; h [ b ? "translateY" : "y" ] = t ( g ) ; this [ this . placed ? "animate" : "attr" ] ( h ) ; this . placed =
! 0 ; this . alignAttr = h ; return this } , getBBox : function ( ) { var a = this . bBox , b = this . renderer , c , d = this . rotation ; c = this . element ; var e = this . styles , f = d * Ua ; if ( ! a ) { if ( c . namespaceURI === za || b . forExport ) { try { a = c . getBBox ? r ( { } , c . getBBox ( ) ) : { width : c . offsetWidth , height : c . offsetHeight } } catch ( g ) { } if ( ! a || a . width < 0 ) a = { width : 0 , height : 0 } } else a = this . htmlGetBBox ( ) ; if ( b . isSVG ) { b = a . width ; c = a . height ; if ( ta && e && e . fontSize === "11px" && c . toPrecision ( 3 ) === "22.7" ) a . height = c = 14 ; if ( d ) a . width = N ( c * ca ( f ) ) + N ( b * V ( f ) ) , a . height = N ( c * V ( f ) ) + N ( b * ca ( f ) ) } this . bBox =
a } return a } , show : function ( ) { return this . attr ( { visibility : "visible" } ) } , hide : function ( ) { return this . attr ( { visibility : "hidden" } ) } , fadeOut : function ( a ) { var b = this ; b . animate ( { opacity : 0 } , { duration : a || 150 , complete : function ( ) { b . hide ( ) } } ) } , add : function ( a ) { var b = this . renderer , c = a || b , d = c . element || b . box , e = d . childNodes , f = this . element , g = v ( f , "zIndex" ) , h ; if ( a ) this . parentGroup = a ; this . parentInverted = a && a . inverted ; this . textStr !== void 0 && b . buildText ( this ) ; if ( g ) c . handleZ = ! 0 , g = C ( g ) ; if ( c . handleZ ) for ( c = 0 ; c < e . length ; c ++ ) if ( a =
e [ c ] , b = v ( a , "zIndex" ) , a !== f && ( C ( b ) > g || ! u ( g ) && u ( b ) ) ) { d . insertBefore ( f , a ) ; h = ! 0 ; break } h || d . appendChild ( f ) ; this . added = ! 0 ; z ( this , "add" ) ; return this } , safeRemoveChild : function ( a ) { var b = a . parentNode ; b && b . removeChild ( a ) } , destroy : function ( ) { var a = this , b = a . element || { } , c = a . shadows , d = a . renderer . isSVG && b . nodeName === "SPAN" && b . parentNode , e , f ; b . onclick = b . onmouseout = b . onmouseover = b . onmousemove = b . point = null ; Wa ( a ) ; if ( a . clipPath ) a . clipPath = a . clipPath . destroy ( ) ; if ( a . stops ) { for ( f = 0 ; f < a . stops . length ; f ++ ) a . stops [ f ] = a . stops [ f ] . destroy ( ) ;
a . stops = null } a . safeRemoveChild ( b ) ; for ( c && n ( c , function ( b ) { a . safeRemoveChild ( b ) } ) ; d && d . childNodes . length === 0 ; ) b = d . parentNode , a . safeRemoveChild ( d ) , d = b ; a . alignTo && ga ( a . renderer . alignedObjects , a ) ; for ( e in a ) delete a [ e ] ; return null } , shadow : function ( a , b , c ) { var d = [ ] , e , f , g = this . element , h , i , j , k ; if ( a ) { i = o ( a . width , 3 ) ; j = ( a . opacity || 0.15 ) / i ; k = this . parentInverted ? "(-1,-1)" : "(" + o ( a . offsetX , 1 ) + ", " + o ( a . offsetY , 1 ) + ")" ; for ( e = 1 ; e <= i ; e ++ ) { f = g . cloneNode ( 0 ) ; h = i * 2 + 1 - 2 * e ; v ( f , { isShadow : "true" , stroke : a . color || "black" , "stroke-opacity" : j *
e , "stroke-width" : h , transform : "translate" + k , fill : S } ) ; if ( c ) v ( f , "height" , s ( v ( f , "height" ) - h , 0 ) ) , f . cutHeight = h ; b ? b . element . appendChild ( f ) : g . parentNode . insertBefore ( f , g ) ; d . push ( f ) } this . shadows = d } return this } } ; var Ha = function ( ) { this . init . apply ( this , arguments ) } ; Ha . prototype = { Element : wa , init : function ( a , b , c , d ) { var e = location , f , g ; f = this . createElement ( "svg" ) . attr ( { version : "1.1" } ) ; g = f . element ; a . appendChild ( g ) ; a . innerHTML . indexOf ( "xmlns" ) === - 1 && v ( g , "xmlns" , za ) ; this . isSVG = ! 0 ; this . box = g ; this . boxWrapper = f ; this . alignedObjects =
[ ] ; this . url = ( hb || gb ) && y . getElementsByTagName ( "base" ) . length ? e . href . replace ( /#.*?$/ , "" ) . replace ( /([\('\)])/g , "\\$1" ) . replace ( / /g , "%20" ) : "" ; this . createElement ( "desc" ) . add ( ) . element . appendChild ( y . createTextNode ( "Created with Highcharts 3.0.6" ) ) ; this . defs = this . createElement ( "defs" ) . add ( ) ; this . forExport = d ; this . gradients = { } ; this . setSize ( b , c , ! 1 ) ; var h ; if ( hb && a . getBoundingClientRect ) this . subPixelFix = b = function ( ) { K ( a , { left : 0 , top : 0 } ) ; h = a . getBoundingClientRect ( ) ; K ( a , { left : xa ( h . left ) - h . left + "px" , top : xa ( h . top ) -
h . top + "px" } ) } , b ( ) , J ( O , "resize" , b ) } , isHidden : function ( ) { return ! this . boxWrapper . getBBox ( ) . width } , destroy : function ( ) { var a = this . defs ; this . box = null ; this . boxWrapper = this . boxWrapper . destroy ( ) ; Ka ( this . gradients || { } ) ; this . gradients = null ; if ( a ) this . defs = a . destroy ( ) ; this . subPixelFix && aa ( O , "resize" , this . subPixelFix ) ; return this . alignedObjects = null } , createElement : function ( a ) { var b = new this . Element ; b . init ( this , a ) ; return b } , draw : function ( ) { } , buildText : function ( a ) { for ( var b = a . element , c = this , d = c . forExport , e = o ( a . textStr ,
"" ) . toString ( ) . replace ( /<(b|strong)>/g , '<span style="font-weight:bold">' ) . replace ( /<(i|em)>/g , '<span style="font-style:italic">' ) . replace ( /<a/g , "<span" ) . replace ( /<\/(b|strong|i|em|a)>/g , "</span>" ) . split ( /<br.*?>/g ) , f = b . childNodes , g = /style="([^"]+)"/ , h = /href="(http[^"]+)"/ , i = v ( b , "x" ) , j = a . styles , k = j && j . width && C ( j . width ) , l = j && j . lineHeight , m = f . length ; m -- ; ) b . removeChild ( f [ m ] ) ; k && ! a . added && this . box . appendChild ( b ) ; e [ e . length - 1 ] === "" && e . pop ( ) ; n ( e , function ( e , f ) { var m , o = 0 , e = e . replace ( /<span/g , "|||<span" ) . replace ( /<\/span>/g ,
"</span>|||" ) ; m = e . split ( "|||" ) ; n ( m , function ( e ) { if ( e !== "" || m . length === 1 ) { var p = { } , n = y . createElementNS ( za , "tspan" ) , s ; g . test ( e ) && ( s = e . match ( g ) [ 1 ] . replace ( /(;| |^)color([ :])/ , "$1fill$2" ) , v ( n , "style" , s ) ) ; h . test ( e ) && ! d && ( v ( n , "onclick" , 'location.href="' + e . match ( h ) [ 1 ] + '"' ) , K ( n , { cursor : "pointer" } ) ) ; e = ( e . replace ( /<(.|\n)*?>/g , "" ) || " " ) . replace ( /</g , "<" ) . replace ( />/g , ">" ) ; if ( e !== " " && ( n . appendChild ( y . createTextNode ( e ) ) , o ? p . dx = 0 : p . x = i , v ( n , p ) , ! o && f && ( ! Z && d && K ( n , { display : "block" } ) , v ( n , "dy" , l || c . fontMetrics ( /px$/ . test ( n . style . fontSize ) ?
n . style . fontSize : j . fontSize ) . h , gb && n . offsetHeight ) ) , b . appendChild ( n ) , o ++ , k ) ) for ( var e = e . replace ( /([^\^])-/g , "$1- " ) . split ( " " ) , u , t , p = a . _clipHeight , E = [ ] , w = C ( l || 16 ) , B = 1 ; e . length || E . length ; ) delete a . bBox , u = a . getBBox ( ) , t = u . width , u = t > k , ! u || e . length === 1 ? ( e = E , E = [ ] , e . length && ( B ++ , p && B * w > p ? ( e = [ "..." ] , a . attr ( "title" , a . textStr ) ) : ( n = y . createElementNS ( za , "tspan" ) , v ( n , { dy : w , x : i } ) , s && v ( n , "style" , s ) , b . appendChild ( n ) , t > k && ( k = t ) ) ) ) : ( n . removeChild ( n . firstChild ) , E . unshift ( e . pop ( ) ) ) , e . length && n . appendChild ( y . createTextNode ( e . join ( " " ) . replace ( /- /g ,
"-" ) ) ) } } ) } ) } , button : function ( a , b , c , d , e , f , g , h ) { var i = this . label ( a , b , c , null , null , null , null , null , "button" ) , j = 0 , k , l , m , p , q , n , a = { x1 : 0 , y1 : 0 , x2 : 0 , y2 : 1 } , e = x ( { "stroke-width" : 1 , stroke : "#CCCCCC" , fill : { linearGradient : a , stops : [ [ 0 , "#FEFEFE" ] , [ 1 , "#F6F6F6" ] ] } , r : 2 , padding : 5 , style : { color : "black" } } , e ) ; m = e . style ; delete e . style ; f = x ( e , { stroke : "#68A" , fill : { linearGradient : a , stops : [ [ 0 , "#FFF" ] , [ 1 , "#ACF" ] ] } } , f ) ; p = f . style ; delete f . style ; g = x ( e , { stroke : "#68A" , fill : { linearGradient : a , stops : [ [ 0 , "#9BD" ] , [ 1 , "#CDF" ] ] } } , g ) ; q = g . style ;
delete g . style ; h = x ( e , { style : { color : "#CCC" } } , h ) ; n = h . style ; delete h . style ; J ( i . element , ta ? "mouseover" : "mouseenter" , function ( ) { j !== 3 && i . attr ( f ) . css ( p ) } ) ; J ( i . element , ta ? "mouseout" : "mouseleave" , function ( ) { j !== 3 && ( k = [ e , f , g ] [ j ] , l = [ m , p , q ] [ j ] , i . attr ( k ) . css ( l ) ) } ) ; i . setState = function ( a ) { ( i . state = j = a ) ? a === 2 ? i . attr ( g ) . css ( q ) : a === 3 && i . attr ( h ) . css ( n ) : i . attr ( e ) . css ( m ) } ; return i . on ( "click" , function ( ) { j !== 3 && d . call ( i ) } ) . attr ( e ) . css ( r ( { cursor : "default" } , m ) ) } , crispLine : function ( a , b ) { a [ 1 ] === a [ 4 ] && ( a [ 1 ] = a [ 4 ] = t ( a [ 1 ] ) - b %
2 / 2 ) ; a [ 2 ] === a [ 5 ] && ( a [ 2 ] = a [ 5 ] = t ( a [ 2 ] ) + b % 2 / 2 ) ; return a } , path : function ( a ) { var b = { fill : S } ; Ia ( a ) ? b . d = a : T ( a ) && r ( b , a ) ; return this . createElement ( "path" ) . attr ( b ) } , circle : function ( a , b , c ) { a = T ( a ) ? a : { x : a , y : b , r : c } ; return this . createElement ( "circle" ) . attr ( a ) } , arc : function ( a , b , c , d , e , f ) { if ( T ( a ) ) b = a . y , c = a . r , d = a . innerR , e = a . start , f = a . end , a = a . x ; a = this . symbol ( "arc" , a || 0 , b || 0 , c || 0 , c || 0 , { innerR : d || 0 , start : e || 0 , end : f || 0 } ) ; a . r = c ; return a } , rect : function ( a , b , c , d , e , f ) { e = T ( a ) ? a . r : e ; e = this . createElement ( "rect" ) . attr ( { rx : e , ry : e ,
fill : S } ) ; return e . attr ( T ( a ) ? a : e . crisp ( f , a , b , s ( c , 0 ) , s ( d , 0 ) ) ) } , setSize : function ( a , b , c ) { var d = this . alignedObjects , e = d . length ; this . width = a ; this . height = b ; for ( this . boxWrapper [ o ( c , ! 0 ) ? "animate" : "attr" ] ( { width : a , height : b } ) ; e -- ; ) d [ e ] . align ( ) } , g : function ( a ) { var b = this . createElement ( "g" ) ; return u ( a ) ? b . attr ( { "class" : "highcharts-" + a } ) : b } , image : function ( a , b , c , d , e ) { var f = { preserveAspectRatio : S } ; arguments . length > 1 && r ( f , { x : b , y : c , width : d , height : e } ) ; f = this . createElement ( "image" ) . attr ( f ) ; f . element . setAttributeNS ? f . element . setAttributeNS ( "http://www.w3.org/1999/xlink" ,
"href" , a ) : f . element . setAttribute ( "hc-svg-href" , a ) ; return f } , symbol : function ( a , b , c , d , e , f ) { var g , h = this . symbols [ a ] , h = h && h ( t ( b ) , t ( c ) , d , e , f ) , i = /^url\((.*?)\)$/ , j , k ; if ( h ) g = this . path ( h ) , r ( g , { symbolName : a , x : b , y : c , width : d , height : e } ) , f && r ( g , f ) ; else if ( i . test ( a ) ) k = function ( a , b ) { a . element && ( a . attr ( { width : b [ 0 ] , height : b [ 1 ] } ) , a . alignByTranslate || a . translate ( t ( ( d - b [ 0 ] ) / 2 ) , t ( ( e - b [ 1 ] ) / 2 ) ) ) } , j = a . match ( i ) [ 1 ] , a = Pb [ j ] , g = this . image ( j ) . attr ( { x : b , y : c } ) , g . isImg = ! 0 , a ? k ( g , a ) : ( g . attr ( { width : 0 , height : 0 } ) , U ( "img" , { onload : function ( ) { k ( g ,
Pb [ j ] = [ this . width , this . height ] ) } , src : j } ) ) ; return g } , symbols : { circle : function ( a , b , c , d ) { var e = 0.166 * c ; return [ "M" , a + c / 2 , b , "C" , a + c + e , b , a + c + e , b + d , a + c / 2 , b + d , "C" , a - e , b + d , a - e , b , a + c / 2 , b , "Z" ] } , square : function ( a , b , c , d ) { return [ "M" , a , b , "L" , a + c , b , a + c , b + d , a , b + d , "Z" ] } , triangle : function ( a , b , c , d ) { return [ "M" , a + c / 2 , b , "L" , a + c , b + d , a , b + d , "Z" ] } , "triangle-down" : function ( a , b , c , d ) { return [ "M" , a , b , "L" , a + c , b , a + c / 2 , b + d , "Z" ] } , diamond : function ( a , b , c , d ) { return [ "M" , a + c / 2 , b , "L" , a + c , b + d / 2 , a + c / 2 , b + d , a , b + d / 2 , "Z" ] } , arc : function ( a , b , c , d ,
e ) { var f = e . start , c = e . r || c || d , g = e . end - 0.001 , d = e . innerR , h = e . open , i = V ( f ) , j = ca ( f ) , k = V ( g ) , g = ca ( g ) , e = e . end - f < ya ? 0 : 1 ; return [ "M" , a + c * i , b + c * j , "A" , c , c , 0 , e , 1 , a + c * k , b + c * g , h ? "M" : "L" , a + d * k , b + d * g , "A" , d , d , 0 , e , 0 , a + d * i , b + d * j , h ? "" : "Z" ] } } , clipRect : function ( a , b , c , d ) { var e = "highcharts-" + zb ++ , f = this . createElement ( "clipPath" ) . attr ( { id : e } ) . add ( this . defs ) , a = this . rect ( a , b , c , d , 0 ) . add ( f ) ; a . id = e ; a . clipPath = f ; return a } , color : function ( a , b , c ) { var d = this , e , f = /^rgba/ , g , h , i , j , k , l , m , p = [ ] ; a && a . linearGradient ? g = "linearGradient" : a && a . radialGradient &&
( g = "radialGradient" ) ; if ( g ) { c = a [ g ] ; h = d . gradients ; j = a . stops ; b = b . radialReference ; Ia ( c ) && ( a [ g ] = c = { x1 : c [ 0 ] , y1 : c [ 1 ] , x2 : c [ 2 ] , y2 : c [ 3 ] , gradientUnits : "userSpaceOnUse" } ) ; g === "radialGradient" && b && ! u ( c . gradientUnits ) && ( c = x ( c , { cx : b [ 0 ] - b [ 2 ] / 2 + c . cx * b [ 2 ] , cy : b [ 1 ] - b [ 2 ] / 2 + c . cy * b [ 2 ] , r : c . r * b [ 2 ] , gradientUnits : "userSpaceOnUse" } ) ) ; for ( m in c ) m !== "id" && p . push ( m , c [ m ] ) ; for ( m in j ) p . push ( j [ m ] ) ; p = p . join ( "," ) ; h [ p ] ? a = h [ p ] . id : ( c . id = a = "highcharts-" + zb ++ , h [ p ] = i = d . createElement ( g ) . attr ( c ) . add ( d . defs ) , i . stops = [ ] , n ( j , function ( a ) { f . test ( a [ 1 ] ) ?
( e = ra ( a [ 1 ] ) , k = e . get ( "rgb" ) , l = e . get ( "a" ) ) : ( k = a [ 1 ] , l = 1 ) ; a = d . createElement ( "stop" ) . attr ( { offset : a [ 0 ] , "stop-color" : k , "stop-opacity" : l } ) . add ( i ) ; i . stops . push ( a ) } ) ) ; return "url(" + d . url + "#" + a + ")" } else return f . test ( a ) ? ( e = ra ( a ) , v ( b , c + "-opacity" , e . get ( "a" ) ) , e . get ( "rgb" ) ) : ( b . removeAttribute ( c + "-opacity" ) , a ) } , text : function ( a , b , c , d ) { var e = M . chart . style , f = $ || ! Z && this . forExport ; if ( d && ! this . forExport ) return this . html ( a , b , c ) ; b = t ( o ( b , 0 ) ) ; c = t ( o ( c , 0 ) ) ; a = this . createElement ( "text" ) . attr ( { x : b , y : c , text : a } ) . css ( { fontFamily : e . fontFamily ,
fontSize : e . fontSize } ) ; f && a . css ( { position : "absolute" } ) ; a . x = b ; a . y = c ; return a } , html : function ( a , b , c ) { var d = M . chart . style , e = this . createElement ( "span" ) , f = e . attrSetters , g = e . element , h = e . renderer ; f . text = function ( a ) { a !== g . innerHTML && delete this . bBox ; g . innerHTML = a ; return ! 1 } ; f . x = f . y = f . align = function ( a , b ) { b === "align" && ( b = "textAlign" ) ; e [ b ] = a ; e . htmlUpdateTransform ( ) ; return ! 1 } ; e . attr ( { text : a , x : t ( b ) , y : t ( c ) } ) . css ( { position : "absolute" , whiteSpace : "nowrap" , fontFamily : d . fontFamily , fontSize : d . fontSize } ) ; e . css = e . htmlCss ;
if ( h . isSVG ) e . add = function ( a ) { var b , c = h . box . parentNode , d = [ ] ; if ( a ) { if ( b = a . div , ! b ) { for ( ; a ; ) d . push ( a ) , a = a . parentGroup ; n ( d . reverse ( ) , function ( a ) { var d ; b = a . div = a . div || U ( Ea , { className : v ( a . element , "class" ) } , { position : "absolute" , left : ( a . translateX || 0 ) + "px" , top : ( a . translateY || 0 ) + "px" } , b || c ) ; d = b . style ; r ( a . attrSetters , { translateX : function ( a ) { d . left = a + "px" } , translateY : function ( a ) { d . top = a + "px" } , visibility : function ( a , b ) { d [ b ] = a } } ) } ) } } else b = c ; b . appendChild ( g ) ; e . added = ! 0 ; e . alignOnAdd && e . htmlUpdateTransform ( ) ; return e } ;
return e } , fontMetrics : function ( a ) { var a = C ( a || 11 ) , a = a < 24 ? a + 4 : t ( a * 1.2 ) , b = t ( a * 0.8 ) ; return { h : a , b : b } } , label : function ( a , b , c , d , e , f , g , h , i ) { function j ( ) { var a , b ; a = o . element . style ; L = ( Oa === void 0 || la === void 0 || q . styles . textAlign ) && o . getBBox ( ) ; q . width = ( Oa || L . width || 0 ) + 2 * da + kb ; q . height = ( la || L . height || 0 ) + 2 * da ; v = da + p . fontMetrics ( a && a . fontSize ) . b ; if ( C ) { if ( ! A ) a = t ( - s * da ) , b = h ? - v : 0 , q . box = A = d ? p . symbol ( d , a , b , q . width , q . height ) : p . rect ( a , b , q . width , q . height , 0 , lb [ Rb ] ) , A . add ( q ) ; A . isImg || A . attr ( x ( { width : q . width , height : q . height } ,
lb ) ) ; lb = null } } function k ( ) { var a = q . styles , a = a && a . textAlign , b = kb + da * ( 1 - s ) , c ; c = h ? 0 : v ; if ( u ( Oa ) && ( a === "center" || a === "right" ) ) b += { center : 0.5 , right : 1 } [ a ] * ( Oa - L . width ) ; ( b !== o . x || c !== o . y ) && o . attr ( { x : b , y : c } ) ; o . x = b ; o . y = c } function l ( a , b ) { A ? A . attr ( a , b ) : lb [ a ] = b } function m ( ) { o . add ( q ) ; q . attr ( { text : a , x : b , y : c } ) ; A && u ( e ) && q . attr ( { anchorX : e , anchorY : f } ) } var p = this , q = p . g ( i ) , o = p . text ( "" , 0 , 0 , g ) . attr ( { zIndex : 1 } ) , A , L , s = 0 , da = 3 , kb = 0 , Oa , la , E , H , B = 0 , lb = { } , v , g = q . attrSetters , C ; J ( q , "add" , m ) ; g . width = function ( a ) { Oa = a ; return ! 1 } ; g . height =
function ( a ) { la = a ; return ! 1 } ; g . padding = function ( a ) { u ( a ) && a !== da && ( da = a , k ( ) ) ; return ! 1 } ; g . paddingLeft = function ( a ) { u ( a ) && a !== kb && ( kb = a , k ( ) ) ; return ! 1 } ; g . align = function ( a ) { s = { left : 0 , center : 0.5 , right : 1 } [ a ] ; return ! 1 } ; g . text = function ( a , b ) { o . attr ( b , a ) ; j ( ) ; k ( ) ; return ! 1 } ; g [ Rb ] = function ( a , b ) { C = ! 0 ; B = a % 2 / 2 ; l ( b , a ) ; return ! 1 } ; g . stroke = g . fill = g . r = function ( a , b ) { b === "fill" && ( C = ! 0 ) ; l ( b , a ) ; return ! 1 } ; g . anchorX = function ( a , b ) { e = a ; l ( b , a + B - E ) ; return ! 1 } ; g . anchorY = function ( a , b ) { f = a ; l ( b , a - H ) ; return ! 1 } ; g . x = function ( a ) { q . x = a ; a -= s *
( ( Oa || L . width ) + da ) ; E = t ( a ) ; q . attr ( "translateX" , E ) ; return ! 1 } ; g . y = function ( a ) { H = q . y = t ( a ) ; q . attr ( "translateY" , H ) ; return ! 1 } ; var y = q . css ; return r ( q , { css : function ( a ) { if ( a ) { var b = { } , a = x ( a ) ; n ( "fontSize,fontWeight,fontFamily,color,lineHeight,width,textDecoration,textShadow" . split ( "," ) , function ( c ) { a [ c ] !== w && ( b [ c ] = a [ c ] , delete a [ c ] ) } ) ; o . css ( b ) } return y . call ( q , a ) } , getBBox : function ( ) { return { width : L . width + 2 * da , height : L . height + 2 * da , x : L . x - da , y : L . y - da } } , shadow : function ( a ) { A && A . shadow ( a ) ; return q } , destroy : function ( ) { aa ( q ,
"add" , m ) ; aa ( q . element , "mouseenter" ) ; aa ( q . element , "mouseleave" ) ; o && ( o = o . destroy ( ) ) ; A && ( A = A . destroy ( ) ) ; wa . prototype . destroy . call ( q ) ; q = p = j = k = l = m = null } } ) } } ; Va = Ha ; var F ; if ( ! Z && ! $ ) { Highcharts . VMLElement = F = { init : function ( a , b ) { var c = [ "<" , b , ' filled="f" stroked="f"' ] , d = [ "position: " , "absolute" , ";" ] , e = b === Ea ; ( b === "shape" || e ) && d . push ( "left:0;top:0;width:1px;height:1px;" ) ; d . push ( "visibility: " , e ? "hidden" : "visible" ) ; c . push ( ' style="' , d . join ( "" ) , '"/>' ) ; if ( b ) c = e || b === "span" || b === "img" ? c . join ( "" ) : a . prepVML ( c ) , this . element =
U ( c ) ; this . renderer = a ; this . attrSetters = { } } , add : function ( a ) { var b = this . renderer , c = this . element , d = b . box , d = a ? a . element || a : d ; a && a . inverted && b . invertChild ( c , d ) ; d . appendChild ( c ) ; this . added = ! 0 ; this . alignOnAdd && ! this . deferUpdateTransform && this . updateTransform ( ) ; z ( this , "add" ) ; return this } , updateTransform : wa . prototype . htmlUpdateTransform , setSpanRotation : function ( a , b , c ) { K ( this . element , { filter : a ? [ "progid:DXImageTransform.Microsoft.Matrix(M11=" , c , ", M12=" , - b , ", M21=" , b , ", M22=" , c , ", sizingMethod='auto expand')" ] . join ( "" ) :
S } ) } , pathToVML : function ( a ) { for ( var b = a . length , c = [ ] , d ; b -- ; ) if ( sa ( a [ b ] ) ) c [ b ] = t ( a [ b ] * 10 ) - 5 ; else if ( a [ b ] === "Z" ) c [ b ] = "x" ; else if ( c [ b ] = a [ b ] , a . isArc && ( a [ b ] === "wa" || a [ b ] === "at" ) ) d = a [ b ] === "wa" ? 1 : - 1 , c [ b + 5 ] === c [ b + 7 ] && ( c [ b + 7 ] -= d ) , c [ b + 6 ] === c [ b + 8 ] && ( c [ b + 8 ] -= d ) ; return c . join ( " " ) || "x" } , attr : function ( a , b ) { var c , d , e , f = this . element || { } , g = f . style , h = f . nodeName , i = this . renderer , j = this . symbolName , k , l = this . shadows , m , p = this . attrSetters , q = this ; ea ( a ) && u ( b ) && ( c = a , a = { } , a [ c ] = b ) ; if ( ea ( a ) ) c = a , q = c === "strokeWidth" || c === "stroke-width" ?
this . strokeweight : this [ c ] ; else for ( c in a ) if ( d = a [ c ] , m = ! 1 , e = p [ c ] && p [ c ] . call ( this , d , c ) , e !== ! 1 && d !== null ) { e !== w && ( d = e ) ; if ( j && /^(x|y|r|start|end|width|height|innerR|anchorX|anchorY)/ . test ( c ) ) k || ( this . symbolAttr ( a ) , k = ! 0 ) , m = ! 0 ; else if ( c === "d" ) { d = d || [ ] ; this . d = d . join ( " " ) ; f . path = d = this . pathToVML ( d ) ; if ( l ) for ( e = l . length ; e -- ; ) l [ e ] . path = l [ e ] . cutOff ? this . cutOffPath ( d , l [ e ] . cutOff ) : d ; m = ! 0 } else if ( c === "visibility" ) { if ( l ) for ( e = l . length ; e -- ; ) l [ e ] . style [ c ] = d ; h === "DIV" && ( d = d === "hidden" ? "-999em" : 0 , fb || ( g [ c ] = d ? "visible" :
"hidden" ) , c = "top" ) ; g [ c ] = d ; m = ! 0 } else if ( c === "zIndex" ) d && ( g [ c ] = d ) , m = ! 0 ; else if ( qa ( c , [ "x" , "y" , "width" , "height" ] ) !== - 1 ) this [ c ] = d , c === "x" || c === "y" ? c = { x : "left" , y : "top" } [ c ] : d = s ( 0 , d ) , this . updateClipping ? ( this [ c ] = d , this . updateClipping ( ) ) : g [ c ] = d , m = ! 0 ; else if ( c === "class" && h === "DIV" ) f . className = d ; else if ( c === "stroke" ) d = i . color ( d , f , c ) , c = "strokecolor" ; else if ( c === "stroke-width" || c === "strokeWidth" ) f . stroked = d ? ! 0 : ! 1 , c = "strokeweight" , this [ c ] = d , sa ( d ) && ( d += "px" ) ; else if ( c === "dashstyle" ) ( f . getElementsByTagName ( "stroke" ) [ 0 ] ||
U ( i . prepVML ( [ "<stroke/>" ] ) , null , null , f ) ) [ c ] = d || "solid" , this . dashstyle = d , m = ! 0 ; else if ( c === "fill" ) if ( h === "SPAN" ) g . color = d ; else { if ( h !== "IMG" ) f . filled = d !== S ? ! 0 : ! 1 , d = i . color ( d , f , c , this ) , c = "fillcolor" } else if ( c === "opacity" ) m = ! 0 ; else if ( h === "shape" && c === "rotation" ) this [ c ] = f . style [ c ] = d , f . style . left = - t ( ca ( d * Ua ) + 1 ) + "px" , f . style . top = t ( V ( d * Ua ) ) + "px" ; else if ( c === "translateX" || c === "translateY" || c === "rotation" ) this [ c ] = d , this . updateTransform ( ) , m = ! 0 ; else if ( c === "text" ) this . bBox = null , f . innerHTML = d , m = ! 0 ; m || ( fb ? f [ c ] =
d : v ( f , c , d ) ) } return q } , clip : function ( a ) { var b = this , c ; a ? ( c = a . members , ga ( c , b ) , c . push ( b ) , b . destroyClip = function ( ) { ga ( c , b ) } , a = a . getCSS ( b ) ) : ( b . destroyClip && b . destroyClip ( ) , a = { clip : fb ? "inherit" : "rect(auto)" } ) ; return b . css ( a ) } , css : wa . prototype . htmlCss , safeRemoveChild : function ( a ) { a . parentNode && Ta ( a ) } , destroy : function ( ) { this . destroyClip && this . destroyClip ( ) ; return wa . prototype . destroy . apply ( this ) } , on : function ( a , b ) { this . element [ "on" + a ] = function ( ) { var a = O . event ; a . target = a . srcElement ; b ( a ) } ; return this } , cutOffPath : function ( a ,
b ) { var c , a = a . split ( /[ ,]/ ) ; c = a . length ; if ( c === 9 || c === 11 ) a [ c - 4 ] = a [ c - 2 ] = C ( a [ c - 2 ] ) - 10 * b ; return a . join ( " " ) } , shadow : function ( a , b , c ) { var d = [ ] , e , f = this . element , g = this . renderer , h , i = f . style , j , k = f . path , l , m , p , q ; k && typeof k . value !== "string" && ( k = "x" ) ; m = k ; if ( a ) { p = o ( a . width , 3 ) ; q = ( a . opacity || 0.15 ) / p ; for ( e = 1 ; e <= 3 ; e ++ ) { l = p * 2 + 1 - 2 * e ; c && ( m = this . cutOffPath ( k . value , l + 0.5 ) ) ; j = [ '<shape isShadow="true" strokeweight="' , l , '" filled="false" path="' , m , '" coordsize="10 10" style="' , f . style . cssText , '" />' ] ; h = U ( g . prepVML ( j ) , null ,
{ left : C ( i . left ) + o ( a . offsetX , 1 ) , top : C ( i . top ) + o ( a . offsetY , 1 ) } ) ; if ( c ) h . cutOff = l + 1 ; j = [ '<stroke color="' , a . color || "black" , '" opacity="' , q * e , '"/>' ] ; U ( g . prepVML ( j ) , null , null , h ) ; b ? b . element . appendChild ( h ) : f . parentNode . insertBefore ( h , f ) ; d . push ( h ) } this . shadows = d } return this } } ; F = ha ( wa , F ) ; var ma = { Element : F , isIE8 : oa . indexOf ( "MSIE 8.0" ) > - 1 , init : function ( a , b , c ) { var d , e ; this . alignedObjects = [ ] ; d = this . createElement ( Ea ) ; e = d . element ; e . style . position = "relative" ; a . appendChild ( d . element ) ; this . isVML = ! 0 ; this . box = e ; this . boxWrapper =
d ; this . setSize ( b , c , ! 1 ) ; y . namespaces . hcv || ( y . namespaces . add ( "hcv" , "urn:schemas-microsoft-com:vml" ) , ( y . styleSheets . length ? y . styleSheets [ 0 ] : y . createStyleSheet ( ) ) . cssText += "hcv\\:fill, hcv\\:path, hcv\\:shape, hcv\\:stroke{ behavior:url(#default#VML); display: inline-block; } " ) } , isHidden : function ( ) { return ! this . box . offsetWidth } , clipRect : function ( a , b , c , d ) { var e = this . createElement ( ) , f = T ( a ) ; return r ( e , { members : [ ] , left : ( f ? a . x : a ) + 1 , top : ( f ? a . y : b ) + 1 , width : ( f ? a . width : c ) - 1 , height : ( f ? a . height : d ) - 1 , getCSS : function ( a ) { var b =
a . element , c = b . nodeName , a = a . inverted , d = this . top - ( c === "shape" ? b . offsetTop : 0 ) , e = this . left , b = e + this . width , f = d + this . height , d = { clip : "rect(" + t ( a ? e : d ) + "px," + t ( a ? f : b ) + "px," + t ( a ? b : f ) + "px," + t ( a ? d : e ) + "px)" } ; ! a && fb && c === "DIV" && r ( d , { width : b + "px" , height : f + "px" } ) ; return d } , updateClipping : function ( ) { n ( e . members , function ( a ) { a . css ( e . getCSS ( a ) ) } ) } } ) } , color : function ( a , b , c , d ) { var e = this , f , g = /^rgba/ , h , i , j = S ; a && a . linearGradient ? i = "gradient" : a && a . radialGradient && ( i = "pattern" ) ; if ( i ) { var k , l , m = a . linearGradient || a . radialGradient ,
p , q , o , A , L , s = "" , a = a . stops , u , t = [ ] , w = function ( ) { h = [ '<fill colors="' + t . join ( "," ) + '" opacity="' , o , '" o:opacity2="' , q , '" type="' , i , '" ' , s , 'focus="100%" method="any" />' ] ; U ( e . prepVML ( h ) , null , null , b ) } ; p = a [ 0 ] ; u = a [ a . length - 1 ] ; p [ 0 ] > 0 && a . unshift ( [ 0 , p [ 1 ] ] ) ; u [ 0 ] < 1 && a . push ( [ 1 , u [ 1 ] ] ) ; n ( a , function ( a , b ) { g . test ( a [ 1 ] ) ? ( f = ra ( a [ 1 ] ) , k = f . get ( "rgb" ) , l = f . get ( "a" ) ) : ( k = a [ 1 ] , l = 1 ) ; t . push ( a [ 0 ] * 100 + "% " + k ) ; b ? ( o = l , A = k ) : ( q = l , L = k ) } ) ; if ( c === "fill" ) if ( i === "gradient" ) c = m . x1 || m [ 0 ] || 0 , a = m . y1 || m [ 1 ] || 0 , p = m . x2 || m [ 2 ] || 0 , m = m . y2 || m [ 3 ] || 0 , s = 'angle="' +
( 90 - R . atan ( ( m - a ) / ( p - c ) ) * 180 / ya ) + '"' , w ( ) ; else { var j = m . r , r = j * 2 , E = j * 2 , H = m . cx , B = m . cy , x = b . radialReference , v , j = function ( ) { x && ( v = d . getBBox ( ) , H += ( x [ 0 ] - v . x ) / v . width - 0.5 , B += ( x [ 1 ] - v . y ) / v . height - 0.5 , r *= x [ 2 ] / v . width , E *= x [ 2 ] / v . height ) ; s = 'src="' + M . global . VMLRadialGradientURL + '" size="' + r + "," + E + '" origin="0.5,0.5" position="' + H + "," + B + '" color2="' + L + '" ' ; w ( ) } ; d . added ? j ( ) : J ( d , "add" , j ) ; j = A } else j = k } else if ( g . test ( a ) && b . tagName !== "IMG" ) f = ra ( a ) , h = [ "<" , c , ' opacity="' , f . get ( "a" ) , '"/>' ] , U ( this . prepVML ( h ) , null , null , b ) , j =
f . get ( "rgb" ) ; else { j = b . getElementsByTagName ( c ) ; if ( j . length ) j [ 0 ] . opacity = 1 , j [ 0 ] . type = "solid" ; j = a } return j } , prepVML : function ( a ) { var b = this . isIE8 , a = a . join ( "" ) ; b ? ( a = a . replace ( "/>" , ' xmlns="urn:schemas-microsoft-com:vml" />' ) , a = a . indexOf ( 'style="' ) === - 1 ? a . replace ( "/>" , ' style="display:inline-block;behavior:url(#default#VML);" />' ) : a . replace ( 'style="' , 'style="display:inline-block;behavior:url(#default#VML);' ) ) : a = a . replace ( "<" , "<hcv:" ) ; return a } , text : Ha . prototype . html , path : function ( a ) { var b = { coordsize : "10 10" } ;
Ia ( a ) ? b . d = a : T ( a ) && r ( b , a ) ; return this . createElement ( "shape" ) . attr ( b ) } , circle : function ( a , b , c ) { var d = this . symbol ( "circle" ) ; if ( T ( a ) ) c = a . r , b = a . y , a = a . x ; d . isCircle = ! 0 ; d . r = c ; return d . attr ( { x : a , y : b } ) } , g : function ( a ) { var b ; a && ( b = { className : "highcharts-" + a , "class" : "highcharts-" + a } ) ; return this . createElement ( Ea ) . attr ( b ) } , image : function ( a , b , c , d , e ) { var f = this . createElement ( "img" ) . attr ( { src : a } ) ; arguments . length > 1 && f . attr ( { x : b , y : c , width : d , height : e } ) ; return f } , rect : function ( a , b , c , d , e , f ) { var g = this . symbol ( "rect" ) ; g . r =
T ( a ) ? a . r : e ; return g . attr ( T ( a ) ? a : g . crisp ( f , a , b , s ( c , 0 ) , s ( d , 0 ) ) ) } , invertChild : function ( a , b ) { var c = b . style ; K ( a , { flip : "x" , left : C ( c . width ) - 1 , top : C ( c . height ) - 1 , rotation : - 90 } ) } , symbols : { arc : function ( a , b , c , d , e ) { var f = e . start , g = e . end , h = e . r || c || d , c = e . innerR , d = V ( f ) , i = ca ( f ) , j = V ( g ) , k = ca ( g ) ; if ( g - f === 0 ) return [ "x" ] ; f = [ "wa" , a - h , b - h , a + h , b + h , a + h * d , b + h * i , a + h * j , b + h * k ] ; e . open && ! c && f . push ( "e" , "M" , a , b ) ; f . push ( "at" , a - c , b - c , a + c , b + c , a + c * j , b + c * k , a + c * d , b + c * i , "x" , "e" ) ; f . isArc = ! 0 ; return f } , circle : function ( a , b , c , d , e ) { e && ( c = d = 2 * e . r ) ;
e && e . isCircle && ( a -= c / 2 , b -= d / 2 ) ; return [ "wa" , a , b , a + c , b + d , a + c , b + d / 2 , a + c , b + d / 2 , "e" ] } , rect : function ( a , b , c , d , e ) { var f = a + c , g = b + d , h ; ! u ( e ) || ! e . r ? f = Ha . prototype . symbols . square . apply ( 0 , arguments ) : ( h = I ( e . r , c , d ) , f = [ "M" , a + h , b , "L" , f - h , b , "wa" , f - 2 * h , b , f , b + 2 * h , f - h , b , f , b + h , "L" , f , g - h , "wa" , f - 2 * h , g - 2 * h , f , g , f , g - h , f - h , g , "L" , a + h , g , "wa" , a , g - 2 * h , a + 2 * h , g , a + h , g , a , g - h , "L" , a , b + h , "wa" , a , b , a + 2 * h , b + 2 * h , a , b + h , a + h , b , "x" , "e" ] ) ; return f } } } ; Highcharts . VMLRenderer = F = function ( ) { this . init . apply ( this , arguments ) } ; F . prototype = x ( Ha . prototype ,
ma ) ; Va = F } var Tb ; if ( $ ) Highcharts . CanVGRenderer = F = function ( ) { za = "http://www.w3.org/1999/xhtml" } , F . prototype . symbols = { } , Tb = function ( ) { function a ( ) { var a = b . length , d ; for ( d = 0 ; d < a ; d ++ ) b [ d ] ( ) ; b = [ ] } var b = [ ] ; return { push : function ( c , d ) { b . length === 0 && Vb ( d , a ) ; b . push ( c ) } } } ( ) , Va = F ; Ma . prototype = { addLabel : function ( ) { var a = this . axis , b = a . options , c = a . chart , d = a . horiz , e = a . categories , f = a . series [ 0 ] && a . series [ 0 ] . names , g = this . pos , h = b . labels , i = a . tickPositions , d = d && e && ! h . step && ! h . staggerLines && ! h . rotation && c . plotWidth / i . length ||
! d && ( c . margin [ 3 ] || c . chartWidth * 0.33 ) , j = g === i [ 0 ] , k = g === i [ i . length - 1 ] , l , f = e ? o ( e [ g ] , f && f [ g ] , g ) : g , e = this . label , m = i . info ; a . isDatetimeAxis && m && ( l = b . dateTimeLabelFormats [ m . higherRanks [ g ] || m . unitName ] ) ; this . isFirst = j ; this . isLast = k ; b = a . labelFormatter . call ( { axis : a , chart : c , isFirst : j , isLast : k , dateTimeLabelFormat : l , value : a . isLog ? ia ( fa ( f ) ) : f } ) ; g = d && { width : s ( 1 , t ( d - 2 * ( h . padding || 10 ) ) ) + "px" } ; g = r ( g , h . style ) ; if ( u ( e ) ) e && e . attr ( { text : b } ) . css ( g ) ; else { l = { align : a . labelAlign } ; if ( sa ( h . rotation ) ) l . rotation = h . rotation ; if ( d &&
h . ellipsis ) l . _clipHeight = a . len / i . length ; this . label = u ( b ) && h . enabled ? c . renderer . text ( b , 0 , 0 , h . useHTML ) . attr ( l ) . css ( g ) . add ( a . labelGroup ) : null } } , getLabelSize : function ( ) { var a = this . label , b = this . axis ; return a ? ( this . labelBBox = a . getBBox ( ) ) [ b . horiz ? "height" : "width" ] : 0 } , getLabelSides : function ( ) { var a = this . axis , b = this . labelBBox . width , a = b * { left : 0 , center : 0.5 , right : 1 } [ a . labelAlign ] - a . options . labels . x ; return [ - a , b - a ] } , handleOverflow : function ( a , b ) { var c = ! 0 , d = this . axis , e = d . chart , f = this . isFirst , g = this . isLast , h = b . x , i =
d . reversed , j = d . tickPositions ; if ( f || g ) { var k = this . getLabelSides ( ) , l = k [ 0 ] , k = k [ 1 ] , e = e . plotLeft , m = e + d . len , j = ( d = d . ticks [ j [ a + ( f ? 1 : - 1 ) ] ] ) && d . label . xy && d . label . xy . x + d . getLabelSides ( ) [ f ? 0 : 1 ] ; f && ! i || g && i ? h + l < e && ( h = e - l , d && h + k > j && ( c = ! 1 ) ) : h + k > m && ( h = m - k , d && h + l < j && ( c = ! 1 ) ) ; b . x = h } return c } , getPosition : function ( a , b , c , d ) { var e = this . axis , f = e . chart , g = d && f . oldChartHeight || f . chartHeight ; return { x : a ? e . translate ( b + c , null , null , d ) + e . transB : e . left + e . offset + ( e . opposite ? ( d && f . oldChartWidth || f . chartWidth ) - e . right - e . left : 0 ) , y : a ?
g - e . bottom + e . offset - ( e . opposite ? e . height : 0 ) : g - e . translate ( b + c , null , null , d ) - e . transB } } , getLabelPosition : function ( a , b , c , d , e , f , g , h ) { var i = this . axis , j = i . transA , k = i . reversed , l = i . staggerLines , m = i . chart . renderer . fontMetrics ( e . style . fontSize ) . b , p = e . rotation , a = a + e . x - ( f && d ? f * j * ( k ? - 1 : 1 ) : 0 ) , b = b + e . y - ( f && ! d ? f * j * ( k ? 1 : - 1 ) : 0 ) ; p && i . side === 2 && ( b -= m - m * V ( p * Ua ) ) ; ! u ( e . y ) && ! p && ( b += m - c . getBBox ( ) . height / 2 ) ; l && ( b += g / ( h || 1 ) % l * ( i . labelOffset / l ) ) ; return { x : a , y : b } } , getMarkPath : function ( a , b , c , d , e , f ) { return f . crispLine ( [ "M" , a , b , "L" ,
a + ( e ? 0 : - c ) , b + ( e ? c : 0 ) ] , d ) } , render : function ( a , b , c ) { var d = this . axis , e = d . options , f = d . chart . renderer , g = d . horiz , h = this . type , i = this . label , j = this . pos , k = e . labels , l = this . gridLine , m = h ? h + "Grid" : "grid" , p = h ? h + "Tick" : "tick" , q = e [ m + "LineWidth" ] , n = e [ m + "LineColor" ] , A = e [ m + "LineDashStyle" ] , s = e [ p + "Length" ] , m = e [ p + "Width" ] || 0 , u = e [ p + "Color" ] , t = e [ p + "Position" ] , p = this . mark , r = k . step , v = ! 0 , x = d . tickmarkOffset , E = this . getPosition ( g , j , x , b ) , H = E . x , E = E . y , B = g && H === d . pos + d . len || ! g && E === d . pos ? - 1 : 1 , C = d . staggerLines ; this . isActive = ! 0 ; if ( q ) { j =
d . getPlotLinePath ( j + x , q * B , b , ! 0 ) ; if ( l === w ) { l = { stroke : n , "stroke-width" : q } ; if ( A ) l . dashstyle = A ; if ( ! h ) l . zIndex = 1 ; if ( b ) l . opacity = 0 ; this . gridLine = l = q ? f . path ( j ) . attr ( l ) . add ( d . gridGroup ) : null } if ( ! b && l && j ) l [ this . isNew ? "attr" : "animate" ] ( { d : j , opacity : c } ) } if ( m && s ) t === "inside" && ( s = - s ) , d . opposite && ( s = - s ) , b = this . getMarkPath ( H , E , s , m * B , g , f ) , p ? p . animate ( { d : b , opacity : c } ) : this . mark = f . path ( b ) . attr ( { stroke : u , "stroke-width" : m , opacity : c } ) . add ( d . axisGroup ) ; if ( i && ! isNaN ( H ) ) i . xy = E = this . getLabelPosition ( H , E , i , g , k , x , a , r ) , this . isFirst &&
! this . isLast && ! o ( e . showFirstLabel , 1 ) || this . isLast && ! this . isFirst && ! o ( e . showLastLabel , 1 ) ? v = ! 1 : ! C && g && k . overflow === "justify" && ! this . handleOverflow ( a , E ) && ( v = ! 1 ) , r && a % r && ( v = ! 1 ) , v && ! isNaN ( E . y ) ? ( E . opacity = c , i [ this . isNew ? "attr" : "animate" ] ( E ) , this . isNew = ! 1 ) : i . attr ( "y" , - 9999 ) } , destroy : function ( ) { Ka ( this , this . axis ) } } ; vb . prototype = { render : function ( ) { var a = this , b = a . axis , c = b . horiz , d = ( b . pointRange || 0 ) / 2 , e = a . options , f = e . label , g = a . label , h = e . width , i = e . to , j = e . from , k = u ( j ) && u ( i ) , l = e . value , m = e . dashStyle , p = a . svgElem , q =
[ ] , n , A = e . color , L = e . zIndex , t = e . events , w = b . chart . renderer ; b . isLog && ( j = na ( j ) , i = na ( i ) , l = na ( l ) ) ; if ( h ) { if ( q = b . getPlotLinePath ( l , h ) , d = { stroke : A , "stroke-width" : h } , m ) d . dashstyle = m } else if ( k ) { if ( j = s ( j , b . min - d ) , i = I ( i , b . max + d ) , q = b . getPlotBandPath ( j , i , e ) , d = { fill : A } , e . borderWidth ) d . stroke = e . borderColor , d [ "stroke-width" ] = e . borderWidth } else return ; if ( u ( L ) ) d . zIndex = L ; if ( p ) q ? p . animate ( { d : q } , null , p . onGetPath ) : ( p . hide ( ) , p . onGetPath = function ( ) { p . show ( ) } ) ; else if ( q && q . length && ( a . svgElem = p = w . path ( q ) . attr ( d ) . add ( ) , t ) ) for ( n in e =
function ( b ) { p . on ( b , function ( c ) { t [ b ] . apply ( a , [ c ] ) } ) } , t ) e ( n ) ; if ( f && u ( f . text ) && q && q . length && b . width > 0 && b . height > 0 ) { f = x ( { align : c && k && "center" , x : c ? ! k && 4 : 10 , verticalAlign : ! c && k && "middle" , y : c ? k ? 16 : 10 : k ? 6 : - 4 , rotation : c && ! k && 90 } , f ) ; if ( ! g ) a . label = g = w . text ( f . text , 0 , 0 , f . useHTML ) . attr ( { align : f . textAlign || f . align , rotation : f . rotation , zIndex : L } ) . css ( f . style ) . add ( ) ; b = [ q [ 1 ] , q [ 4 ] , o ( q [ 6 ] , q [ 1 ] ) ] ; q = [ q [ 2 ] , q [ 5 ] , o ( q [ 7 ] , q [ 2 ] ) ] ; c = Ja ( b ) ; k = Ja ( q ) ; g . align ( f , ! 1 , { x : c , y : k , width : va ( b ) - c , height : va ( q ) - k } ) ; g . show ( ) } else g && g . hide ( ) ; return a } ,
destroy : function ( ) { ga ( this . axis . plotLinesAndBands , this ) ; delete this . axis ; Ka ( this ) } } ; Mb . prototype = { destroy : function ( ) { Ka ( this , this . axis ) } , render : function ( a ) { var b = this . options , c = b . format , c = c ? Ca ( c , this ) : b . formatter . call ( this ) ; this . label ? this . label . attr ( { text : c , visibility : "hidden" } ) : this . label = this . axis . chart . renderer . text ( c , 0 , 0 , b . useHTML ) . css ( b . style ) . attr ( { align : this . textAlign , rotation : b . rotation , visibility : "hidden" } ) . add ( a ) } , setOffset : function ( a , b ) { var c = this . axis , d = c . chart , e = d . inverted , f = this . isNegative ,
g = c . translate ( this . percent ? 100 : this . total , 0 , 0 , 0 , 1 ) , c = c . translate ( 0 ) , c = N ( g - c ) , h = d . xAxis [ 0 ] . translate ( this . x ) + a , i = d . plotHeight , f = { x : e ? f ? g : g - c : h , y : e ? i - h - b : f ? i - g - c : i - g , width : e ? c : b , height : e ? b : c } ; if ( e = this . label ) e . align ( this . alignOptions , null , f ) , f = e . alignAttr , e . attr ( { visibility : this . options . crop === ! 1 || d . isInsidePlot ( f . x , f . y ) ? Z ? "inherit" : "visible" : "hidden" } ) } } ; db . prototype = { defaultOptions : { dateTimeLabelFormats : { millisecond : "%H:%M:%S.%L" , second : "%H:%M:%S" , minute : "%H:%M" , hour : "%H:%M" , day : "%e. %b" , week : "%e. %b" ,
month : "%b '%y" , year : "%Y" } , endOnTick : ! 1 , gridLineColor : "#C0C0C0" , labels : G , lineColor : "#C0D0E0" , lineWidth : 1 , minPadding : 0.01 , maxPadding : 0.01 , minorGridLineColor : "#E0E0E0" , minorGridLineWidth : 1 , minorTickColor : "#A0A0A0" , minorTickLength : 2 , minorTickPosition : "outside" , startOfWeek : 1 , startOnTick : ! 1 , tickColor : "#C0D0E0" , tickLength : 5 , tickmarkPlacement : "between" , tickPixelInterval : 100 , tickPosition : "outside" , tickWidth : 1 , title : { align : "middle" , style : { color : "#4d759e" , fontWeight : "bold" } } , type : "linear" } , defaultYAxisOptions : { endOnTick : ! 0 ,
gridLineWidth : 1 , tickPixelInterval : 72 , showLastLabel : ! 0 , labels : { x : - 8 , y : 3 } , lineWidth : 0 , maxPadding : 0.05 , minPadding : 0.05 , startOnTick : ! 0 , tickWidth : 0 , title : { rotation : 270 , text : "Values" } , stackLabels : { enabled : ! 1 , formatter : function ( ) { return Aa ( this . total , - 1 ) } , style : G . style } } , defaultLeftAxisOptions : { labels : { x : - 8 , y : null } , title : { rotation : 270 } } , defaultRightAxisOptions : { labels : { x : 8 , y : null } , title : { rotation : 90 } } , defaultBottomAxisOptions : { labels : { x : 0 , y : 14 } , title : { rotation : 0 } } , defaultTopAxisOptions : { labels : { x : 0 , y : - 5 } ,
title : { rotation : 0 } } , init : function ( a , b ) { var c = b . isX ; this . horiz = a . inverted ? ! c : c ; this . xOrY = ( this . isXAxis = c ) ? "x" : "y" ; this . opposite = b . opposite ; this . side = this . horiz ? this . opposite ? 0 : 2 : this . opposite ? 1 : 3 ; this . setOptions ( b ) ; var d = this . options , e = d . type ; this . labelFormatter = d . labels . formatter || this . defaultLabelFormatter ; this . userOptions = b ; this . minPixelPadding = 0 ; this . chart = a ; this . reversed = d . reversed ; this . zoomEnabled = d . zoomEnabled !== ! 1 ; this . categories = d . categories || e === "category" ; this . isLog = e === "logarithmic" ; this . isDatetimeAxis =
e === "datetime" ; this . isLinked = u ( d . linkedTo ) ; this . tickmarkOffset = this . categories && d . tickmarkPlacement === "between" ? 0.5 : 0 ; this . ticks = { } ; this . minorTicks = { } ; this . plotLinesAndBands = [ ] ; this . alternateBands = { } ; this . len = 0 ; this . minRange = this . userMinRange = d . minRange || d . maxZoom ; this . range = d . range ; this . offset = d . offset || 0 ; this . stacks = { } ; this . oldStacks = { } ; this . stackExtremes = { } ; this . min = this . max = null ; var f , d = this . options . events ; qa ( this , a . axes ) === - 1 && ( a . axes . push ( this ) , a [ c ? "xAxis" : "yAxis" ] . push ( this ) ) ; this . series = this . series ||
[ ] ; if ( a . inverted && c && this . reversed === w ) this . reversed = ! 0 ; this . removePlotLine = this . removePlotBand = this . removePlotBandOrLine ; for ( f in d ) J ( this , f , d [ f ] ) ; if ( this . isLog ) this . val2lin = na , this . lin2val = fa } , setOptions : function ( a ) { this . options = x ( this . defaultOptions , this . isXAxis ? { } : this . defaultYAxisOptions , [ this . defaultTopAxisOptions , this . defaultRightAxisOptions , this . defaultBottomAxisOptions , this . defaultLeftAxisOptions ] [ this . side ] , x ( M [ this . isXAxis ? "xAxis" : "yAxis" ] , a ) ) } , update : function ( a , b ) { var c = this . chart , a = c . options [ this . xOrY +
"Axis" ] [ this . options . index ] = x ( this . userOptions , a ) ; this . destroy ( ! 0 ) ; this . _addedPlotLB = this . userMin = this . userMax = w ; this . init ( c , r ( a , { events : w } ) ) ; c . isDirtyBox = ! 0 ; o ( b , ! 0 ) && c . redraw ( ) } , remove : function ( a ) { var b = this . chart , c = this . xOrY + "Axis" ; n ( this . series , function ( a ) { a . remove ( ! 1 ) } ) ; ga ( b . axes , this ) ; ga ( b [ c ] , this ) ; b . options [ c ] . splice ( this . options . index , 1 ) ; n ( b [ c ] , function ( a , b ) { a . options . index = b } ) ; this . destroy ( ) ; b . isDirtyBox = ! 0 ; o ( a , ! 0 ) && b . redraw ( ) } , defaultLabelFormatter : function ( ) { var a = this . axis , b = this . value ,
c = a . categories , d = this . dateTimeLabelFormat , e = M . lang . numericSymbols , f = e && e . length , g , h = a . options . labels . format , a = a . isLog ? b : a . tickInterval ; if ( h ) g = Ca ( h , this ) ; else if ( c ) g = b ; else if ( d ) g = Xa ( d , b ) ; else if ( f && a >= 1E3 ) for ( ; f -- && g === w ; ) c = Math . pow ( 1E3 , f + 1 ) , a >= c && e [ f ] !== null && ( g = Aa ( b / c , - 1 ) + e [ f ] ) ; g === w && ( g = b >= 1E3 ? Aa ( b , 0 ) : Aa ( b , - 1 ) ) ; return g } , getSeriesExtremes : function ( ) { var a = this , b = a . chart ; a . hasVisibleSeries = ! 1 ; a . dataMin = a . dataMax = null ; a . stackExtremes = { } ; a . buildStacks ( ) ; n ( a . series , function ( c ) { if ( c . visible || ! b . options . chart . ignoreHiddenSeries ) { var d ;
d = c . options . threshold ; var e ; a . hasVisibleSeries = ! 0 ; a . isLog && d <= 0 && ( d = null ) ; if ( a . isXAxis ) { if ( d = c . xData , d . length ) a . dataMin = I ( o ( a . dataMin , d [ 0 ] ) , Ja ( d ) ) , a . dataMax = s ( o ( a . dataMax , d [ 0 ] ) , va ( d ) ) } else { c . getExtremes ( ) ; e = c . dataMax ; c = c . dataMin ; if ( u ( c ) && u ( e ) ) a . dataMin = I ( o ( a . dataMin , c ) , c ) , a . dataMax = s ( o ( a . dataMax , e ) , e ) ; if ( u ( d ) ) if ( a . dataMin >= d ) a . dataMin = d , a . ignoreMinPadding = ! 0 ; else if ( a . dataMax < d ) a . dataMax = d , a . ignoreMaxPadding = ! 0 } } } ) } , translate : function ( a , b , c , d , e , f ) { var g = this . len , h = 1 , i = 0 , j = d ? this . oldTransA : this . transA ,
d = d ? this . oldMin : this . min , k = this . minPixelPadding , e = ( this . options . ordinal || this . isLog && e ) && this . lin2val ; if ( ! j ) j = this . transA ; c && ( h *= - 1 , i = g ) ; this . reversed && ( h *= - 1 , i -= h * g ) ; b ? ( a = a * h + i , a -= k , a = a / j + d , e && ( a = this . lin2val ( a ) ) ) : ( e && ( a = this . val2lin ( a ) ) , f === "between" && ( f = 0.5 ) , a = h * ( a - d ) * j + i + h * k + ( sa ( f ) ? j * f * this . pointRange : 0 ) ) ; return a } , toPixels : function ( a , b ) { return this . translate ( a , ! 1 , ! this . horiz , null , ! 0 ) + ( b ? 0 : this . pos ) } , toValue : function ( a , b ) { return this . translate ( a - ( b ? 0 : this . pos ) , ! 0 , ! this . horiz , null , ! 0 ) } , getPlotLinePath : function ( a ,
b , c , d ) { var e = this . chart , f = this . left , g = this . top , h , i , j , a = this . translate ( a , null , null , c ) , k = c && e . oldChartHeight || e . chartHeight , l = c && e . oldChartWidth || e . chartWidth , m ; h = this . transB ; c = i = t ( a + h ) ; h = j = t ( k - a - h ) ; if ( isNaN ( a ) ) m = ! 0 ; else if ( this . horiz ) { if ( h = g , j = k - this . bottom , c < f || c > f + this . width ) m = ! 0 } else if ( c = f , i = l - this . right , h < g || h > g + this . height ) m = ! 0 ; return m && ! d ? null : e . renderer . crispLine ( [ "M" , c , h , "L" , i , j ] , b || 0 ) } , getPlotBandPath : function ( a , b ) { var c = this . getPlotLinePath ( b ) , d = this . getPlotLinePath ( a ) ; d && c ? d . push ( c [ 4 ] ,
c [ 5 ] , c [ 1 ] , c [ 2 ] ) : d = null ; return d } , getLinearTickPositions : function ( a , b , c ) { for ( var d , b = ia ( P ( b / a ) * a ) , c = ia ( xa ( c / a ) * a ) , e = [ ] ; b <= c ; ) { e . push ( b ) ; b = ia ( b + a ) ; if ( b === d ) break ; d = b } return e } , getLogTickPositions : function ( a , b , c , d ) { var e = this . options , f = this . len , g = [ ] ; if ( ! d ) this . _minorAutoInterval = null ; if ( a >= 0.5 ) a = t ( a ) , g = this . getLinearTickPositions ( a , b , c ) ; else if ( a >= 0.08 ) for ( var f = P ( b ) , h , i , j , k , l , e = a > 0.3 ? [ 1 , 2 , 4 ] : a > 0.15 ? [ 1 , 2 , 4 , 6 , 8 ] : [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] ; f < c + 1 && ! l ; f ++ ) { i = e . length ; for ( h = 0 ; h < i && ! l ; h ++ ) j = na ( fa ( f ) * e [ h ] ) , j > b && ( ! d ||
k <= c ) && g . push ( k ) , k > c && ( l = ! 0 ) , k = j } else if ( b = fa ( b ) , c = fa ( c ) , a = e [ d ? "minorTickInterval" : "tickInterval" ] , a = o ( a === "auto" ? null : a , this . _minorAutoInterval , ( c - b ) * ( e . tickPixelInterval / ( d ? 5 : 1 ) ) / ( ( d ? f / this . tickPositions . length : f ) || 1 ) ) , a = ob ( a , null , nb ( a ) ) , g = Na ( this . getLinearTickPositions ( a , b , c ) , na ) , ! d ) this . _minorAutoInterval = a / 5 ; if ( ! d ) this . tickInterval = a ; return g } , getMinorTickPositions : function ( ) { var a = this . options , b = this . tickPositions , c = this . minorTickInterval , d = [ ] , e ; if ( this . isLog ) { e = b . length ; for ( a = 1 ; a < e ; a ++ ) d = d . concat ( this . getLogTickPositions ( c ,
b [ a - 1 ] , b [ a ] , ! 0 ) ) } else if ( this . isDatetimeAxis && a . minorTickInterval === "auto" ) d = d . concat ( Eb ( Cb ( c ) , this . min , this . max , a . startOfWeek ) ) , d [ 0 ] < this . min && d . shift ( ) ; else for ( b = this . min + ( b [ 0 ] - this . min ) % c ; b <= this . max ; b += c ) d . push ( b ) ; return d } , adjustForMinRange : function ( ) { var a = this . options , b = this . min , c = this . max , d , e = this . dataMax - this . dataMin >= this . minRange , f , g , h , i , j ; if ( this . isXAxis && this . minRange === w && ! this . isLog ) u ( a . min ) || u ( a . max ) ? this . minRange = null : ( n ( this . series , function ( a ) { i = a . xData ; for ( g = j = a . xIncrement ? 1 : i . length -
1 ; g > 0 ; g -- ) if ( h = i [ g ] - i [ g - 1 ] , f === w || h < f ) f = h } ) , this . minRange = I ( f * 5 , this . dataMax - this . dataMin ) ) ; if ( c - b < this . minRange ) { var k = this . minRange ; d = ( k - c + b ) / 2 ; d = [ b - d , o ( a . min , b - d ) ] ; if ( e ) d [ 2 ] = this . dataMin ; b = va ( d ) ; c = [ b + k , o ( a . max , b + k ) ] ; if ( e ) c [ 2 ] = this . dataMax ; c = Ja ( c ) ; c - b < k && ( d [ 0 ] = c - k , d [ 1 ] = o ( a . min , c - k ) , b = va ( d ) ) } this . min = b ; this . max = c } , setAxisTranslation : function ( a ) { var b = this . max - this . min , c = 0 , d , e = 0 , f = 0 , g = this . linkedParent , h = this . transA ; if ( this . isXAxis ) g ? ( e = g . minPointOffset , f = g . pointRangePadding ) : n ( this . series , function ( a ) { var g =
a . pointRange , h = a . options . pointPlacement , l = a . closestPointRange ; g > b && ( g = 0 ) ; c = s ( c , g ) ; e = s ( e , ea ( h ) ? 0 : g / 2 ) ; f = s ( f , h === "on" ? 0 : g ) ; ! a . noSharedTooltip && u ( l ) && ( d = u ( d ) ? I ( d , l ) : l ) } ) , g = this . ordinalSlope && d ? this . ordinalSlope / d : 1 , this . minPointOffset = e *= g , this . pointRangePadding = f *= g , this . pointRange = I ( c , b ) , this . closestPointRange = d ; if ( a ) this . oldTransA = h ; this . translationSlope = this . transA = h = this . len / ( b + f || 1 ) ; this . transB = this . horiz ? this . left : this . bottom ; this . minPixelPadding = h * e } , setTickPositions : function ( a ) { var b = this , c =
b . chart , d = b . options , e = b . isLog , f = b . isDatetimeAxis , g = b . isXAxis , h = b . isLinked , i = b . options . tickPositioner , j = d . maxPadding , k = d . minPadding , l = d . tickInterval , m = d . minTickInterval , p = d . tickPixelInterval , q , ba = b . categories ; h ? ( b . linkedParent = c [ g ? "xAxis" : "yAxis" ] [ d . linkedTo ] , c = b . linkedParent . getExtremes ( ) , b . min = o ( c . min , c . dataMin ) , b . max = o ( c . max , c . dataMax ) , d . type !== b . linkedParent . options . type && ka ( 11 , 1 ) ) : ( b . min = o ( b . userMin , d . min , b . dataMin ) , b . max = o ( b . userMax , d . max , b . dataMax ) ) ; if ( e ) ! a && I ( b . min , o ( b . dataMin , b . min ) ) <= 0 &&
ka ( 10 , 1 ) , b . min = ia ( na ( b . min ) ) , b . max = ia ( na ( b . max ) ) ; if ( b . range && ( b . userMin = b . min = s ( b . min , b . max - b . range ) , b . userMax = b . max , a ) ) b . range = null ; b . beforePadding && b . beforePadding ( ) ; b . adjustForMinRange ( ) ; if ( ! ba && ! b . usePercentage && ! h && u ( b . min ) && u ( b . max ) && ( c = b . max - b . min ) ) { if ( ! u ( d . min ) && ! u ( b . userMin ) && k && ( b . dataMin < 0 || ! b . ignoreMinPadding ) ) b . min -= c * k ; if ( ! u ( d . max ) && ! u ( b . userMax ) && j && ( b . dataMax > 0 || ! b . ignoreMaxPadding ) ) b . max += c * j } b . min === b . max || b . min === void 0 || b . max === void 0 ? b . tickInterval = 1 : h && ! l && p === b . linkedParent . options . tickPixelInterval ?
b . tickInterval = b . linkedParent . tickInterval : ( b . tickInterval = o ( l , ba ? 1 : ( b . max - b . min ) * p / s ( b . len , p ) ) , ! u ( l ) && b . len < p && ! this . isRadial && ( q = ! 0 , b . tickInterval /= 4 ) ) ; g && ! a && n ( b . series , function ( a ) { a . processData ( b . min !== b . oldMin || b . max !== b . oldMax ) } ) ; b . setAxisTranslation ( ! 0 ) ; b . beforeSetTickPositions && b . beforeSetTickPositions ( ) ; if ( b . postProcessTickInterval ) b . tickInterval = b . postProcessTickInterval ( b . tickInterval ) ; if ( b . pointRange ) b . tickInterval = s ( b . pointRange , b . tickInterval ) ; if ( ! l && b . tickInterval < m ) b . tickInterval =
m ; if ( ! f && ! e && ! l ) b . tickInterval = ob ( b . tickInterval , null , nb ( b . tickInterval ) , d ) ; b . minorTickInterval = d . minorTickInterval === "auto" && b . tickInterval ? b . tickInterval / 5 : d . minorTickInterval ; b . tickPositions = a = d . tickPositions ? [ ] . concat ( d . tickPositions ) : i && i . apply ( b , [ b . min , b . max ] ) ; if ( ! a ) ! b . ordinalPositions && ( b . max - b . min ) / b . tickInterval > s ( 2 * b . len , 200 ) && ka ( 19 , ! 0 ) , a = f ? ( b . getNonLinearTimeTicks || Eb ) ( Cb ( b . tickInterval , d . units ) , b . min , b . max , d . startOfWeek , b . ordinalPositions , b . closestPointRange , ! 0 ) : e ? b . getLogTickPositions ( b . tickInterval ,
b . min , b . max ) : b . getLinearTickPositions ( b . tickInterval , b . min , b . max ) , q && a . splice ( 1 , a . length - 2 ) , b . tickPositions = a ; if ( ! h ) e = a [ 0 ] , f = a [ a . length - 1 ] , h = b . minPointOffset || 0 , d . startOnTick ? b . min = e : b . min - h > e && a . shift ( ) , d . endOnTick ? b . max = f : b . max + h < f && a . pop ( ) , a . length === 1 && ( b . min -= 0.001 , b . max += 0.001 ) } , setMaxTicks : function ( ) { var a = this . chart , b = a . maxTicks || { } , c = this . tickPositions , d = this . _maxTicksKey = [ this . xOrY , this . pos , this . len ] . join ( "-" ) ; if ( ! this . isLinked && ! this . isDatetimeAxis && c && c . length > ( b [ d ] || 0 ) && this . options . alignTicks !==
! 1 ) b [ d ] = c . length ; a . maxTicks = b } , adjustTickAmount : function ( ) { var a = this . _maxTicksKey , b = this . tickPositions , c = this . chart . maxTicks ; if ( c && c [ a ] && ! this . isDatetimeAxis && ! this . categories && ! this . isLinked && this . options . alignTicks !== ! 1 ) { var d = this . tickAmount , e = b . length ; this . tickAmount = a = c [ a ] ; if ( e < a ) { for ( ; b . length < a ; ) b . push ( ia ( b [ b . length - 1 ] + this . tickInterval ) ) ; this . transA *= ( e - 1 ) / ( a - 1 ) ; this . max = b [ b . length - 1 ] } if ( u ( d ) && a !== d ) this . isDirty = ! 0 } } , setScale : function ( ) { var a = this . stacks , b , c , d , e ; this . oldMin = this . min ; this . oldMax =
this . max ; this . oldAxisLength = this . len ; this . setAxisSize ( ) ; e = this . len !== this . oldAxisLength ; n ( this . series , function ( a ) { if ( a . isDirtyData || a . isDirty || a . xAxis . isDirty ) d = ! 0 } ) ; if ( e || d || this . isLinked || this . forceRedraw || this . userMin !== this . oldUserMin || this . userMax !== this . oldUserMax ) { if ( ! this . isXAxis ) for ( b in a ) delete a [ b ] ; this . forceRedraw = ! 1 ; this . getSeriesExtremes ( ) ; this . setTickPositions ( ) ; this . oldUserMin = this . userMin ; this . oldUserMax = this . userMax ; if ( ! this . isDirty ) this . isDirty = e || this . min !== this . oldMin || this . max !==
this . oldMax } else if ( ! this . isXAxis ) { if ( this . oldStacks ) a = this . stacks = this . oldStacks ; for ( b in a ) for ( c in a [ b ] ) a [ b ] [ c ] . cum = a [ b ] [ c ] . total } this . setMaxTicks ( ) } , setExtremes : function ( a , b , c , d , e ) { var f = this , g = f . chart , c = o ( c , ! 0 ) , e = r ( e , { min : a , max : b } ) ; z ( f , "setExtremes" , e , function ( ) { f . userMin = a ; f . userMax = b ; f . eventArgs = e ; f . isDirtyExtremes = ! 0 ; c && g . redraw ( d ) } ) } , zoom : function ( a , b ) { this . allowZoomOutside || ( u ( this . dataMin ) && a <= this . dataMin && ( a = w ) , u ( this . dataMax ) && b >= this . dataMax && ( b = w ) ) ; this . displayBtn = a !== w || b !== w ; this . setExtremes ( a ,
b , ! 1 , w , { trigger : "zoom" } ) ; return ! 0 } , setAxisSize : function ( ) { var a = this . chart , b = this . options , c = b . offsetLeft || 0 , d = b . offsetRight || 0 , e = this . horiz , f , g ; this . left = g = o ( b . left , a . plotLeft + c ) ; this . top = f = o ( b . top , a . plotTop ) ; this . width = c = o ( b . width , a . plotWidth - c + d ) ; this . height = b = o ( b . height , a . plotHeight ) ; this . bottom = a . chartHeight - b - f ; this . right = a . chartWidth - c - g ; this . len = s ( e ? c : b , 0 ) ; this . pos = e ? g : f } , getExtremes : function ( ) { var a = this . isLog ; return { min : a ? ia ( fa ( this . min ) ) : this . min , max : a ? ia ( fa ( this . max ) ) : this . max , dataMin : this . dataMin ,
dataMax : this . dataMax , userMin : this . userMin , userMax : this . userMax } } , getThreshold : function ( a ) { var b = this . isLog , c = b ? fa ( this . min ) : this . min , b = b ? fa ( this . max ) : this . max ; c > a || a === null ? a = c : b < a && ( a = b ) ; return this . translate ( a , 0 , 1 , 0 , 1 ) } , addPlotBand : function ( a ) { this . addPlotBandOrLine ( a , "plotBands" ) } , addPlotLine : function ( a ) { this . addPlotBandOrLine ( a , "plotLines" ) } , addPlotBandOrLine : function ( a , b ) { var c = ( new vb ( this , a ) ) . render ( ) , d = this . userOptions ; c && ( b && ( d [ b ] = d [ b ] || [ ] , d [ b ] . push ( a ) ) , this . plotLinesAndBands . push ( c ) ) ; return c } ,
autoLabelAlign : function ( a ) { a = ( o ( a , 0 ) - this . side * 90 + 720 ) % 360 ; return a > 15 && a < 165 ? "right" : a > 195 && a < 345 ? "left" : "center" } , getOffset : function ( ) { var a = this , b = a . chart , c = b . renderer , d = a . options , e = a . tickPositions , f = a . ticks , g = a . horiz , h = a . side , i = b . inverted ? [ 1 , 0 , 3 , 2 ] [ h ] : h , j , k = 0 , l , m = 0 , p = d . title , q = d . labels , ba = 0 , A = b . axisOffset , L = b . clipOffset , t = [ - 1 , 1 , 1 , - 1 ] [ h ] , r , v = 1 , x = o ( q . maxStaggerLines , 5 ) , la , E , H , B ; a . hasData = j = a . hasVisibleSeries || u ( a . min ) && u ( a . max ) && ! ! e ; a . showAxis = b = j || o ( d . showEmpty , ! 0 ) ; a . staggerLines = a . horiz && q . staggerLines ;
if ( ! a . axisGroup ) a . gridGroup = c . g ( "grid" ) . attr ( { zIndex : d . gridZIndex || 1 } ) . add ( ) , a . axisGroup = c . g ( "axis" ) . attr ( { zIndex : d . zIndex || 2 } ) . add ( ) , a . labelGroup = c . g ( "axis-labels" ) . attr ( { zIndex : q . zIndex || 7 } ) . add ( ) ; if ( j || a . isLinked ) { a . labelAlign = o ( q . align || a . autoLabelAlign ( q . rotation ) ) ; n ( e , function ( b ) { f [ b ] ? f [ b ] . addLabel ( ) : f [ b ] = new Ma ( a , b ) } ) ; if ( a . horiz && ! a . staggerLines && x && ! q . rotation ) { for ( r = a . reversed ? [ ] . concat ( e ) . reverse ( ) : e ; v < x ; ) { j = [ ] ; la = ! 1 ; for ( q = 0 ; q < r . length ; q ++ ) E = r [ q ] , H = ( H = f [ E ] . label && f [ E ] . label . getBBox ( ) ) ? H . width :
0 , B = q % v , H && ( E = a . translate ( E ) , j [ B ] !== w && E < j [ B ] && ( la = ! 0 ) , j [ B ] = E + H ) ; if ( la ) v ++ ; else break } if ( v > 1 ) a . staggerLines = v } n ( e , function ( b ) { if ( h === 0 || h === 2 || { 1 : "left" , 3 : "right" } [ h ] === a . labelAlign ) ba = s ( f [ b ] . getLabelSize ( ) , ba ) } ) ; if ( a . staggerLines ) ba *= a . staggerLines , a . labelOffset = ba } else for ( r in f ) f [ r ] . destroy ( ) , delete f [ r ] ; if ( p && p . text && p . enabled !== ! 1 ) { if ( ! a . axisTitle ) a . axisTitle = c . text ( p . text , 0 , 0 , p . useHTML ) . attr ( { zIndex : 7 , rotation : p . rotation || 0 , align : p . textAlign || { low : "left" , middle : "center" , high : "right" } [ p . align ] } ) . css ( p . style ) . add ( a . axisGroup ) ,
a . axisTitle . isNew = ! 0 ; if ( b ) k = a . axisTitle . getBBox ( ) [ g ? "height" : "width" ] , m = o ( p . margin , g ? 5 : 10 ) , l = p . offset ; a . axisTitle [ b ? "show" : "hide" ] ( ) } a . offset = t * o ( d . offset , A [ h ] ) ; a . axisTitleMargin = o ( l , ba + m + ( h !== 2 && ba && t * d . labels [ g ? "y" : "x" ] ) ) ; A [ h ] = s ( A [ h ] , a . axisTitleMargin + k + t * a . offset ) ; L [ i ] = s ( L [ i ] , P ( d . lineWidth / 2 ) * 2 ) } , getLinePath : function ( a ) { var b = this . chart , c = this . opposite , d = this . offset , e = this . horiz , f = this . left + ( c ? this . width : 0 ) + d , d = b . chartHeight - this . bottom - ( c ? this . height : 0 ) + d ; c && ( a *= - 1 ) ; return b . renderer . crispLine ( [ "M" ,
e ? this . left : f , e ? d : this . top , "L" , e ? b . chartWidth - this . right : f , e ? d : b . chartHeight - this . bottom ] , a ) } , getTitlePosition : function ( ) { var a = this . horiz , b = this . left , c = this . top , d = this . len , e = this . options . title , f = a ? b : c , g = this . opposite , h = this . offset , i = C ( e . style . fontSize || 12 ) , d = { low : f + ( a ? 0 : d ) , middle : f + d / 2 , high : f + ( a ? d : 0 ) } [ e . align ] , b = ( a ? c + this . height : b ) + ( a ? 1 : - 1 ) * ( g ? - 1 : 1 ) * this . axisTitleMargin + ( this . side === 2 ? i : 0 ) ; return { x : a ? d : b + ( g ? this . width : 0 ) + h + ( e . x || 0 ) , y : a ? b - ( g ? this . height : 0 ) + h : d + ( e . y || 0 ) } } , render : function ( ) { var a = this ,
b = a . chart , c = b . renderer , d = a . options , e = a . isLog , f = a . isLinked , g = a . tickPositions , h = a . axisTitle , i = a . stacks , j = a . ticks , k = a . minorTicks , l = a . alternateBands , m = d . stackLabels , p = d . alternateGridColor , q = a . tickmarkOffset , o = d . lineWidth , A , s = b . hasRendered && u ( a . oldMin ) && ! isNaN ( a . oldMin ) ; A = a . hasData ; var t = a . showAxis , r , v ; n ( [ j , k , l ] , function ( a ) { for ( var b in a ) a [ b ] . isActive = ! 1 } ) ; if ( A || f ) if ( a . minorTickInterval && ! a . categories && n ( a . getMinorTickPositions ( ) , function ( b ) { k [ b ] || ( k [ b ] = new Ma ( a , b , "minor" ) ) ; s && k [ b ] . isNew && k [ b ] . render ( null ,
! 0 ) ; k [ b ] . render ( null , ! 1 , 1 ) } ) , g . length && ( n ( g . slice ( 1 ) . concat ( [ g [ 0 ] ] ) , function ( b , c ) { c = c === g . length - 1 ? 0 : c + 1 ; if ( ! f || b >= a . min && b <= a . max ) j [ b ] || ( j [ b ] = new Ma ( a , b ) ) , s && j [ b ] . isNew && j [ b ] . render ( c , ! 0 ) , j [ b ] . render ( c , ! 1 , 1 ) } ) , q && a . min === 0 && ( j [ - 1 ] || ( j [ - 1 ] = new Ma ( a , - 1 , null , ! 0 ) ) , j [ - 1 ] . render ( - 1 ) ) ) , p && n ( g , function ( b , c ) { if ( c % 2 === 0 && b < a . max ) l [ b ] || ( l [ b ] = new vb ( a ) ) , r = b + q , v = g [ c + 1 ] !== w ? g [ c + 1 ] + q : a . max , l [ b ] . options = { from : e ? fa ( r ) : r , to : e ? fa ( v ) : v , color : p } , l [ b ] . render ( ) , l [ b ] . isActive = ! 0 } ) , ! a . _addedPlotLB ) n ( ( d . plotLines || [ ] ) . concat ( d . plotBands ||
[ ] ) , function ( b ) { a . addPlotBandOrLine ( b ) } ) , a . _addedPlotLB = ! 0 ; n ( [ j , k , l ] , function ( a ) { var c , d , e = [ ] , f = Fa ? Fa . duration || 500 : 0 , g = function ( ) { for ( d = e . length ; d -- ; ) a [ e [ d ] ] && ! a [ e [ d ] ] . isActive && ( a [ e [ d ] ] . destroy ( ) , delete a [ e [ d ] ] ) } ; for ( c in a ) if ( ! a [ c ] . isActive ) a [ c ] . render ( c , ! 1 , 0 ) , a [ c ] . isActive = ! 1 , e . push ( c ) ; a === l || ! b . hasRendered || ! f ? g ( ) : f && setTimeout ( g , f ) } ) ; if ( o ) A = a . getLinePath ( o ) , a . axisLine ? a . axisLine . animate ( { d : A } ) : a . axisLine = c . path ( A ) . attr ( { stroke : d . lineColor , "stroke-width" : o , zIndex : 7 } ) . add ( a . axisGroup ) , a . axisLine [ t ?
"show" : "hide" ] ( ) ; if ( h && t ) h [ h . isNew ? "attr" : "animate" ] ( a . getTitlePosition ( ) ) , h . isNew = ! 1 ; if ( m && m . enabled ) { var x , la , d = a . stackTotalGroup ; if ( ! d ) a . stackTotalGroup = d = c . g ( "stack-labels" ) . attr ( { visibility : "visible" , zIndex : 6 } ) . add ( ) ; d . translate ( b . plotLeft , b . plotTop ) ; for ( x in i ) for ( la in c = i [ x ] , c ) c [ la ] . render ( d ) } a . isDirty = ! 1 } , removePlotBandOrLine : function ( a ) { for ( var b = this . plotLinesAndBands , c = this . options , d = this . userOptions , e = b . length ; e -- ; ) b [ e ] . id === a && b [ e ] . destroy ( ) ; n ( [ c . plotLines || [ ] , d . plotLines || [ ] , c . plotBands ||
[ ] , d . plotBands || [ ] ] , function ( b ) { for ( e = b . length ; e -- ; ) b [ e ] . id === a && ga ( b , b [ e ] ) } ) } , setTitle : function ( a , b ) { this . update ( { title : a } , b ) } , redraw : function ( ) { var a = this . chart . pointer ; a . reset && a . reset ( ! 0 ) ; this . render ( ) ; n ( this . plotLinesAndBands , function ( a ) { a . render ( ) } ) ; n ( this . series , function ( a ) { a . isDirty = ! 0 } ) } , buildStacks : function ( ) { var a = this . series , b = a . length ; if ( ! this . isXAxis ) { for ( ; b -- ; ) a [ b ] . setStackedPoints ( ) ; if ( this . usePercentage ) for ( b = 0 ; b < a . length ; b ++ ) a [ b ] . setPercentStacks ( ) } } , setCategories : function ( a , b ) { this . update ( { categories : a } ,
b ) } , destroy : function ( a ) { var b = this , c = b . stacks , d , e = b . plotLinesAndBands ; a || aa ( b ) ; for ( d in c ) Ka ( c [ d ] ) , c [ d ] = null ; n ( [ b . ticks , b . minorTicks , b . alternateBands ] , function ( a ) { Ka ( a ) } ) ; for ( a = e . length ; a -- ; ) e [ a ] . destroy ( ) ; n ( "stackTotalGroup,axisLine,axisGroup,gridGroup,labelGroup,axisTitle" . split ( "," ) , function ( a ) { b [ a ] && ( b [ a ] = b [ a ] . destroy ( ) ) } ) } } ; wb . prototype = { init : function ( a , b ) { var c = b . borderWidth , d = b . style , e = C ( d . padding ) ; this . chart = a ; this . options = b ; this . crosshairs = [ ] ; this . now = { x : 0 , y : 0 } ; this . isHidden = ! 0 ; this . label =
a . renderer . label ( "" , 0 , 0 , b . shape , null , null , b . useHTML , null , "tooltip" ) . attr ( { padding : e , fill : b . backgroundColor , "stroke-width" : c , r : b . borderRadius , zIndex : 8 } ) . css ( d ) . css ( { padding : 0 } ) . add ( ) . attr ( { y : - 999 } ) ; $ || this . label . shadow ( b . shadow ) ; this . shared = b . shared } , destroy : function ( ) { n ( this . crosshairs , function ( a ) { a && a . destroy ( ) } ) ; if ( this . label ) this . label = this . label . destroy ( ) ; clearTimeout ( this . hideTimer ) ; clearTimeout ( this . tooltipTimeout ) } , move : function ( a , b , c , d ) { var e = this , f = e . now , g = e . options . animation !== ! 1 && ! e . isHidden ;
r ( f , { x : g ? ( 2 * f . x + a ) / 3 : a , y : g ? ( f . y + b ) / 2 : b , anchorX : g ? ( 2 * f . anchorX + c ) / 3 : c , anchorY : g ? ( f . anchorY + d ) / 2 : d } ) ; e . label . attr ( f ) ; if ( g && ( N ( a - f . x ) > 1 || N ( b - f . y ) > 1 ) ) clearTimeout ( this . tooltipTimeout ) , this . tooltipTimeout = setTimeout ( function ( ) { e && e . move ( a , b , c , d ) } , 32 ) } , hide : function ( ) { var a = this , b ; clearTimeout ( this . hideTimer ) ; if ( ! this . isHidden ) b = this . chart . hoverPoints , this . hideTimer = setTimeout ( function ( ) { a . label . fadeOut ( ) ; a . isHidden = ! 0 } , o ( this . options . hideDelay , 500 ) ) , b && n ( b , function ( a ) { a . setState ( ) } ) , this . chart . hoverPoints =
null } , hideCrosshairs : function ( ) { n ( this . crosshairs , function ( a ) { a && a . hide ( ) } ) } , getAnchor : function ( a , b ) { var c , d = this . chart , e = d . inverted , f = d . plotTop , g = 0 , h = 0 , i , a = ja ( a ) ; c = a [ 0 ] . tooltipPos ; this . followPointer && b && ( b . chartX === w && ( b = d . pointer . normalize ( b ) ) , c = [ b . chartX - d . plotLeft , b . chartY - f ] ) ; c || ( n ( a , function ( a ) { i = a . series . yAxis ; g += a . plotX ; h += ( a . plotLow ? ( a . plotLow + a . plotHigh ) / 2 : a . plotY ) + ( ! e && i ? i . top - f : 0 ) } ) , g /= a . length , h /= a . length , c = [ e ? d . plotWidth - h : g , this . shared && ! e && a . length > 1 && b ? b . chartY - f : e ? d . plotHeight - g :
h ] ) ; return Na ( c , t ) } , getPosition : function ( a , b , c ) { var d = this . chart , e = d . plotLeft , f = d . plotTop , g = d . plotWidth , h = d . plotHeight , i = o ( this . options . distance , 12 ) , j = c . plotX , c = c . plotY , d = j + e + ( d . inverted ? i : - a - i ) , k = c - b + f + 15 , l ; d < 7 && ( d = e + s ( j , 0 ) + i ) ; d + a > e + g && ( d -= d + a - ( e + g ) , k = c - b + f - i , l = ! 0 ) ; k < f + 5 && ( k = f + 5 , l && c >= k && c <= k + b && ( k = c + f + i ) ) ; k + b > f + h && ( k = s ( f , f + h - b - i ) ) ; return { x : d , y : k } } , defaultFormatter : function ( a ) { var b = this . points || ja ( this ) , c = b [ 0 ] . series , d ; d = [ c . tooltipHeaderFormatter ( b [ 0 ] ) ] ; n ( b , function ( a ) { c = a . series ; d . push ( c . tooltipFormatter &&
c . tooltipFormatter ( a ) || a . point . tooltipFormatter ( c . tooltipOptions . pointFormat ) ) } ) ; d . push ( a . options . footerFormat || "" ) ; return d . join ( "" ) } , refresh : function ( a , b ) { var c = this . chart , d = this . label , e = this . options , f , g , h = { } , i , j = [ ] ; i = e . formatter || this . defaultFormatter ; var h = c . hoverPoints , k , l = e . crosshairs , m = this . shared ; clearTimeout ( this . hideTimer ) ; this . followPointer = ja ( a ) [ 0 ] . series . tooltipOptions . followPointer ; g = this . getAnchor ( a , b ) ; f = g [ 0 ] ; g = g [ 1 ] ; m && ( ! a . series || ! a . series . noSharedTooltip ) ? ( c . hoverPoints = a , h && n ( h ,
function ( a ) { a . setState ( ) } ) , n ( a , function ( a ) { a . setState ( "hover" ) ; j . push ( a . getLabelConfig ( ) ) } ) , h = { x : a [ 0 ] . category , y : a [ 0 ] . y } , h . points = j , a = a [ 0 ] ) : h = a . getLabelConfig ( ) ; i = i . call ( h , this ) ; h = a . series ; i === ! 1 ? this . hide ( ) : ( this . isHidden && ( Wa ( d ) , d . attr ( "opacity" , 1 ) . show ( ) ) , d . attr ( { text : i } ) , k = e . borderColor || a . color || h . color || "#606060" , d . attr ( { stroke : k } ) , this . updatePosition ( { plotX : f , plotY : g } ) , this . isHidden = ! 1 ) ; if ( l ) { l = ja ( l ) ; for ( d = l . length ; d -- ; ) if ( m = a . series , e = m [ d ? "yAxis" : "xAxis" ] , l [ d ] && e ) if ( h = d ? o ( a . stackY , a . y ) : a . x ,
e . isLog && ( h = na ( h ) ) , d === 1 && m . modifyValue && ( h = m . modifyValue ( h ) ) , e = e . getPlotLinePath ( h , 1 ) , this . crosshairs [ d ] ) this . crosshairs [ d ] . attr ( { d : e , visibility : "visible" } ) ; else { h = { "stroke-width" : l [ d ] . width || 1 , stroke : l [ d ] . color || "#C0C0C0" , zIndex : l [ d ] . zIndex || 2 } ; if ( l [ d ] . dashStyle ) h . dashstyle = l [ d ] . dashStyle ; this . crosshairs [ d ] = c . renderer . path ( e ) . attr ( h ) . add ( ) } } z ( c , "tooltipRefresh" , { text : i , x : f + c . plotLeft , y : g + c . plotTop , borderColor : k } ) } , updatePosition : function ( a ) { var b = this . chart , c = this . label , c = ( this . options . positioner ||
this . getPosition ) . call ( this , c . width , c . height , a ) ; this . move ( t ( c . x ) , t ( c . y ) , a . plotX + b . plotLeft , a . plotY + b . plotTop ) } } ; xb . prototype = { init : function ( a , b ) { var c = b . chart , d = c . events , e = $ ? "" : c . zoomType , c = a . inverted , f ; this . options = b ; this . chart = a ; this . zoomX = f = /x/ . test ( e ) ; this . zoomY = e = /y/ . test ( e ) ; this . zoomHor = f && ! c || e && c ; this . zoomVert = e && ! c || f && c ; this . runChartClick = d && ! ! d . click ; this . pinchDown = [ ] ; this . lastValidTouch = { } ; if ( b . tooltip . enabled ) a . tooltip = new wb ( a , b . tooltip ) ; this . setDOMEvents ( ) } , normalize : function ( a , b ) { var c ,
d , a = a || O . event ; if ( ! a . target ) a . target = a . srcElement ; a = Xb ( a ) ; d = a . touches ? a . touches . item ( 0 ) : a ; if ( ! b ) this . chartPosition = b = Wb ( this . chart . container ) ; d . pageX === w ? ( c = s ( a . x , a . clientX - b . left ) , d = a . y ) : ( c = d . pageX - b . left , d = d . pageY - b . top ) ; return r ( a , { chartX : t ( c ) , chartY : t ( d ) } ) } , getCoordinates : function ( a ) { var b = { xAxis : [ ] , yAxis : [ ] } ; n ( this . chart . axes , function ( c ) { b [ c . isXAxis ? "xAxis" : "yAxis" ] . push ( { axis : c , value : c . toValue ( a [ c . horiz ? "chartX" : "chartY" ] ) } ) } ) ; return b } , getIndex : function ( a ) { var b = this . chart ; return b . inverted ?
b . plotHeight + b . plotTop - a . chartY : a . chartX - b . plotLeft } , runPointActions : function ( a ) { var b = this . chart , c = b . series , d = b . tooltip , e , f = b . hoverPoint , g = b . hoverSeries , h , i , j = b . chartWidth , k = this . getIndex ( a ) ; if ( d && this . options . tooltip . shared && ( ! g || ! g . noSharedTooltip ) ) { e = [ ] ; h = c . length ; for ( i = 0 ; i < h ; i ++ ) if ( c [ i ] . visible && c [ i ] . options . enableMouseTracking !== ! 1 && ! c [ i ] . noSharedTooltip && c [ i ] . tooltipPoints . length && ( b = c [ i ] . tooltipPoints [ k ] ) && b . series ) b . _dist = N ( k - b . clientX ) , j = I ( j , b . _dist ) , e . push ( b ) ; for ( h = e . length ; h -- ; ) e [ h ] . _dist >
j && e . splice ( h , 1 ) ; if ( e . length && e [ 0 ] . clientX !== this . hoverX ) d . refresh ( e , a ) , this . hoverX = e [ 0 ] . clientX } if ( g && g . tracker ) { if ( ( b = g . tooltipPoints [ k ] ) && b !== f ) b . onMouseOver ( a ) } else d && d . followPointer && ! d . isHidden && ( a = d . getAnchor ( [ { } ] , a ) , d . updatePosition ( { plotX : a [ 0 ] , plotY : a [ 1 ] } ) ) } , reset : function ( a ) { var b = this . chart , c = b . hoverSeries , d = b . hoverPoint , e = b . tooltip , b = e && e . shared ? b . hoverPoints : d ; ( a = a && e && b ) && ja ( b ) [ 0 ] . plotX === w && ( a = ! 1 ) ; if ( a ) e . refresh ( b ) ; else { if ( d ) d . onMouseOut ( ) ; if ( c ) c . onMouseOut ( ) ; e && ( e . hide ( ) , e . hideCrosshairs ( ) ) ;
this . hoverX = null } } , scaleGroups : function ( a , b ) { var c = this . chart , d ; n ( c . series , function ( e ) { d = a || e . getPlotBox ( ) ; e . xAxis && e . xAxis . zoomEnabled && ( e . group . attr ( d ) , e . markerGroup && ( e . markerGroup . attr ( d ) , e . markerGroup . clip ( b ? c . clipRect : null ) ) , e . dataLabelsGroup && e . dataLabelsGroup . attr ( d ) ) } ) ; c . clipRect . attr ( b || c . clipBox ) } , pinchTranslateDirection : function ( a , b , c , d , e , f , g ) { var h = this . chart , i = a ? "x" : "y" , j = a ? "X" : "Y" , k = "chart" + j , l = a ? "width" : "height" , m = h [ "plot" + ( a ? "Left" : "Top" ) ] , p , q , o = 1 , n = h . inverted , s = h . bounds [ a ? "h" : "v" ] ,
t = b . length === 1 , u = b [ 0 ] [ k ] , r = c [ 0 ] [ k ] , w = ! t && b [ 1 ] [ k ] , v = ! t && c [ 1 ] [ k ] , x , c = function ( ) { ! t && N ( u - w ) > 20 && ( o = N ( r - v ) / N ( u - w ) ) ; q = ( m - r ) / o + u ; p = h [ "plot" + ( a ? "Width" : "Height" ) ] / o } ; c ( ) ; b = q ; b < s . min ? ( b = s . min , x = ! 0 ) : b + p > s . max && ( b = s . max - p , x = ! 0 ) ; x ? ( r -= 0.8 * ( r - g [ i ] [ 0 ] ) , t || ( v -= 0.8 * ( v - g [ i ] [ 1 ] ) ) , c ( ) ) : g [ i ] = [ r , v ] ; n || ( f [ i ] = q - m , f [ l ] = p ) ; f = n ? 1 / o : o ; e [ l ] = p ; e [ i ] = b ; d [ n ? a ? "scaleY" : "scaleX" : "scale" + j ] = o ; d [ "translate" + j ] = f * m + ( r - f * u ) } , pinch : function ( a ) { var b = this , c = b . chart , d = b . pinchDown , e = c . tooltip && c . tooltip . options . followTouchMove , f = a . touches ,
g = f . length , h = b . lastValidTouch , i = b . zoomHor || b . pinchHor , j = b . zoomVert || b . pinchVert , k = i || j , l = b . selectionMarker , m = { } , p = g === 1 && ( b . inClass ( a . target , "highcharts-tracker" ) && c . runTrackerClick || c . runChartClick ) , q = { } ; ( k || e ) && ! p && a . preventDefault ( ) ; Na ( f , function ( a ) { return b . normalize ( a ) } ) ; if ( a . type === "touchstart" ) n ( f , function ( a , b ) { d [ b ] = { chartX : a . chartX , chartY : a . chartY } } ) , h . x = [ d [ 0 ] . chartX , d [ 1 ] && d [ 1 ] . chartX ] , h . y = [ d [ 0 ] . chartY , d [ 1 ] && d [ 1 ] . chartY ] , n ( c . axes , function ( a ) { if ( a . zoomEnabled ) { var b = c . bounds [ a . horiz ? "h" : "v" ] ,
d = a . minPixelPadding , e = a . toPixels ( a . dataMin ) , f = a . toPixels ( a . dataMax ) , g = I ( e , f ) , e = s ( e , f ) ; b . min = I ( a . pos , g - d ) ; b . max = s ( a . pos + a . len , e + d ) } } ) ; else if ( d . length ) { if ( ! l ) b . selectionMarker = l = r ( { destroy : pa } , c . plotBox ) ; i && b . pinchTranslateDirection ( ! 0 , d , f , m , l , q , h ) ; j && b . pinchTranslateDirection ( ! 1 , d , f , m , l , q , h ) ; b . hasPinched = k ; b . scaleGroups ( m , q ) ; ! k && e && g === 1 && this . runPointActions ( b . normalize ( a ) ) } } , dragStart : function ( a ) { var b = this . chart ; b . mouseIsDown = a . type ; b . cancelClick = ! 1 ; b . mouseDownX = this . mouseDownX = a . chartX ; b . mouseDownY =
this . mouseDownY = a . chartY } , drag : function ( a ) { var b = this . chart , c = b . options . chart , d = a . chartX , e = a . chartY , f = this . zoomHor , g = this . zoomVert , h = b . plotLeft , i = b . plotTop , j = b . plotWidth , k = b . plotHeight , l , m = this . mouseDownX , p = this . mouseDownY ; d < h ? d = h : d > h + j && ( d = h + j ) ; e < i ? e = i : e > i + k && ( e = i + k ) ; this . hasDragged = Math . sqrt ( Math . pow ( m - d , 2 ) + Math . pow ( p - e , 2 ) ) ; if ( this . hasDragged > 10 ) { l = b . isInsidePlot ( m - h , p - i ) ; if ( b . hasCartesianSeries && ( this . zoomX || this . zoomY ) && l && ! this . selectionMarker ) this . selectionMarker = b . renderer . rect ( h , i , f ? 1 : j , g ?
1 : k , 0 ) . attr ( { fill : c . selectionMarkerFill || "rgba(69,114,167,0.25)" , zIndex : 7 } ) . add ( ) ; this . selectionMarker && f && ( d -= m , this . selectionMarker . attr ( { width : N ( d ) , x : ( d > 0 ? 0 : d ) + m } ) ) ; this . selectionMarker && g && ( d = e - p , this . selectionMarker . attr ( { height : N ( d ) , y : ( d > 0 ? 0 : d ) + p } ) ) ; l && ! this . selectionMarker && c . panning && b . pan ( a , c . panning ) } } , drop : function ( a ) { var b = this . chart , c = this . hasPinched ; if ( this . selectionMarker ) { var d = { xAxis : [ ] , yAxis : [ ] , originalEvent : a . originalEvent || a } , e = this . selectionMarker , f = e . x , g = e . y , h ; if ( this . hasDragged ||
c ) n ( b . axes , function ( a ) { if ( a . zoomEnabled ) { var b = a . horiz , c = a . toValue ( b ? f : g ) , b = a . toValue ( b ? f + e . width : g + e . height ) ; ! isNaN ( c ) && ! isNaN ( b ) && ( d [ a . xOrY + "Axis" ] . push ( { axis : a , min : I ( c , b ) , max : s ( c , b ) } ) , h = ! 0 ) } } ) , h && z ( b , "selection" , d , function ( a ) { b . zoom ( r ( a , c ? { animation : ! 1 } : null ) ) } ) ; this . selectionMarker = this . selectionMarker . destroy ( ) ; c && this . scaleGroups ( ) } if ( b ) K ( b . container , { cursor : b . _cursor } ) , b . cancelClick = this . hasDragged > 10 , b . mouseIsDown = this . hasDragged = this . hasPinched = ! 1 , this . pinchDown = [ ] } , onContainerMouseDown : function ( a ) { a =
this . normalize ( a ) ; a . preventDefault && a . preventDefault ( ) ; this . dragStart ( a ) } , onDocumentMouseUp : function ( a ) { this . drop ( a ) } , onDocumentMouseMove : function ( a ) { var b = this . chart , c = this . chartPosition , d = b . hoverSeries , a = this . normalize ( a , c ) ; c && d && ! this . inClass ( a . target , "highcharts-tracker" ) && ! b . isInsidePlot ( a . chartX - b . plotLeft , a . chartY - b . plotTop ) && this . reset ( ) } , onContainerMouseLeave : function ( ) { this . reset ( ) ; this . chartPosition = null } , onContainerMouseMove : function ( a ) { var b = this . chart , a = this . normalize ( a ) ; a . returnValue =
! 1 ; b . mouseIsDown === "mousedown" && this . drag ( a ) ; ( this . inClass ( a . target , "highcharts-tracker" ) || b . isInsidePlot ( a . chartX - b . plotLeft , a . chartY - b . plotTop ) ) && ! b . openMenu && this . runPointActions ( a ) } , inClass : function ( a , b ) { for ( var c ; a ; ) { if ( c = v ( a , "class" ) ) if ( c . indexOf ( b ) !== - 1 ) return ! 0 ; else if ( c . indexOf ( "highcharts-container" ) !== - 1 ) return ! 1 ; a = a . parentNode } } , onTrackerMouseOut : function ( a ) { var b = this . chart . hoverSeries ; if ( b && ! b . options . stickyTracking && ! this . inClass ( a . toElement || a . relatedTarget , "highcharts-tooltip" ) ) b . onMouseOut ( ) } ,
onContainerClick : function ( a ) { var b = this . chart , c = b . hoverPoint , d = b . plotLeft , e = b . plotTop , f = b . inverted , g , h , i , a = this . normalize ( a ) ; a . cancelBubble = ! 0 ; if ( ! b . cancelClick ) c && this . inClass ( a . target , "highcharts-tracker" ) ? ( g = this . chartPosition , h = c . plotX , i = c . plotY , r ( c , { pageX : g . left + d + ( f ? b . plotWidth - i : h ) , pageY : g . top + e + ( f ? b . plotHeight - h : i ) } ) , z ( c . series , "click" , r ( a , { point : c } ) ) , b . hoverPoint && c . firePointEvent ( "click" , a ) ) : ( r ( a , this . getCoordinates ( a ) ) , b . isInsidePlot ( a . chartX - d , a . chartY - e ) && z ( b , "click" , a ) ) } , onContainerTouchStart : function ( a ) { var b =
this . chart ; a . touches . length === 1 ? ( a = this . normalize ( a ) , b . isInsidePlot ( a . chartX - b . plotLeft , a . chartY - b . plotTop ) ? ( this . runPointActions ( a ) , this . pinch ( a ) ) : this . reset ( ) ) : a . touches . length === 2 && this . pinch ( a ) } , onContainerTouchMove : function ( a ) { ( a . touches . length === 1 || a . touches . length === 2 ) && this . pinch ( a ) } , onDocumentTouchEnd : function ( a ) { this . drop ( a ) } , setDOMEvents : function ( ) { var a = this , b = a . chart . container , c ; this . _events = c = [ [ b , "onmousedown" , "onContainerMouseDown" ] , [ b , "onmousemove" , "onContainerMouseMove" ] , [ b , "onclick" ,
"onContainerClick" ] , [ b , "mouseleave" , "onContainerMouseLeave" ] , [ y , "mousemove" , "onDocumentMouseMove" ] , [ y , "mouseup" , "onDocumentMouseUp" ] ] ; ib && c . push ( [ b , "ontouchstart" , "onContainerTouchStart" ] , [ b , "ontouchmove" , "onContainerTouchMove" ] , [ y , "touchend" , "onDocumentTouchEnd" ] ) ; n ( c , function ( b ) { a [ "_" + b [ 2 ] ] = function ( c ) { a [ b [ 2 ] ] ( c ) } ; b [ 1 ] . indexOf ( "on" ) === 0 ? b [ 0 ] [ b [ 1 ] ] = a [ "_" + b [ 2 ] ] : J ( b [ 0 ] , b [ 1 ] , a [ "_" + b [ 2 ] ] ) } ) } , destroy : function ( ) { var a = this ; n ( a . _events , function ( b ) { b [ 1 ] . indexOf ( "on" ) === 0 ? b [ 0 ] [ b [ 1 ] ] = null : aa ( b [ 0 ] , b [ 1 ] , a [ "_" +
b [ 2 ] ] ) } ) ; delete a . _events ; clearInterval ( a . tooltipTimeout ) } } ; eb . prototype = { init : function ( a , b ) { var c = this , d = b . itemStyle , e = o ( b . padding , 8 ) , f = b . itemMarginTop || 0 ; this . options = b ; if ( b . enabled ) c . baseline = C ( d . fontSize ) + 3 + f , c . itemStyle = d , c . itemHiddenStyle = x ( d , b . itemHiddenStyle ) , c . itemMarginTop = f , c . padding = e , c . initialItemX = e , c . initialItemY = e - 5 , c . maxItemWidth = 0 , c . chart = a , c . itemHeight = 0 , c . lastLineHeight = 0 , c . render ( ) , J ( c . chart , "endResize" , function ( ) { c . positionCheckboxes ( ) } ) } , colorizeItem : function ( a , b ) { var c = this . options ,
d = a . legendItem , e = a . legendLine , f = a . legendSymbol , g = this . itemHiddenStyle . color , c = b ? c . itemStyle . color : g , h = b ? a . color : g , g = a . options && a . options . marker , i = { stroke : h , fill : h } , j ; d && d . css ( { fill : c , color : c } ) ; e && e . attr ( { stroke : h } ) ; if ( f ) { if ( g && f . isMarker ) for ( j in g = a . convertAttribs ( g ) , g ) d = g [ j ] , d !== w && ( i [ j ] = d ) ; f . attr ( i ) } } , positionItem : function ( a ) { var b = this . options , c = b . symbolPadding , b = ! b . rtl , d = a . _legendItemPos , e = d [ 0 ] , d = d [ 1 ] , f = a . checkbox ; a . legendGroup && a . legendGroup . translate ( b ? e : this . legendWidth - e - 2 * c - 4 , d ) ; if ( f ) f . x =
e , f . y = d } , destroyItem : function ( a ) { var b = a . checkbox ; n ( [ "legendItem" , "legendLine" , "legendSymbol" , "legendGroup" ] , function ( b ) { a [ b ] && ( a [ b ] = a [ b ] . destroy ( ) ) } ) ; b && Ta ( a . checkbox ) } , destroy : function ( ) { var a = this . group , b = this . box ; if ( b ) this . box = b . destroy ( ) ; if ( a ) this . group = a . destroy ( ) } , positionCheckboxes : function ( a ) { var b = this . group . alignAttr , c , d = this . clipHeight || this . legendHeight ; if ( b ) c = b . translateY , n ( this . allItems , function ( e ) { var f = e . checkbox , g ; f && ( g = c + f . y + ( a || 0 ) + 3 , K ( f , { left : b . translateX + e . legendItemWidth + f . x -
20 + "px" , top : g + "px" , display : g > c - 6 && g < c + d - 6 ? "" : S } ) ) } ) } , renderTitle : function ( ) { var a = this . padding , b = this . options . title , c = 0 ; if ( b . text ) { if ( ! this . title ) this . title = this . chart . renderer . label ( b . text , a - 3 , a - 4 , null , null , null , null , null , "legend-title" ) . attr ( { zIndex : 1 } ) . css ( b . style ) . add ( this . group ) ; a = this . title . getBBox ( ) ; c = a . height ; this . offsetWidth = a . width ; this . contentGroup . attr ( { translateY : c } ) } this . titleHeight = c } , renderItem : function ( a ) { var B ; var b = this , c = b . chart , d = c . renderer , e = b . options , f = e . layout === "horizontal" ,
g = e . symbolWidth , h = e . symbolPadding , i = b . itemStyle , j = b . itemHiddenStyle , k = b . padding , l = f ? o ( e . itemDistance , 8 ) : 0 , m = ! e . rtl , p = e . width , q = e . itemMarginBottom || 0 , n = b . itemMarginTop , A = b . initialItemX , t = a . legendItem , u = a . series || a , r = u . options , w = r . showCheckbox , v = e . useHTML ; if ( ! t && ( a . legendGroup = d . g ( "legend-item" ) . attr ( { zIndex : 1 } ) . add ( b . scrollGroup ) , u . drawLegendSymbol ( b , a ) , a . legendItem = t = d . text ( e . labelFormat ? Ca ( e . labelFormat , a ) : e . labelFormatter . call ( a ) , m ? g + h : - h , b . baseline , v ) . css ( x ( a . visible ? i : j ) ) . attr ( { align : m ? "left" :
"right" , zIndex : 2 } ) . add ( a . legendGroup ) , ( v ? t : a . legendGroup ) . on ( "mouseover" , function ( ) { a . setState ( "hover" ) ; t . css ( b . options . itemHoverStyle ) } ) . on ( "mouseout" , function ( ) { t . css ( a . visible ? i : j ) ; a . setState ( ) } ) . on ( "click" , function ( b ) { var c = function ( ) { a . setVisible ( ) } , b = { browserEvent : b } ; a . firePointEvent ? a . firePointEvent ( "legendItemClick" , b , c ) : z ( a , "legendItemClick" , b , c ) } ) , b . colorizeItem ( a , a . visible ) , r && w ) ) a . checkbox = U ( "input" , { type : "checkbox" , checked : a . selected , defaultChecked : a . selected } , e . itemCheckboxStyle , c . container ) ,
J ( a . checkbox , "click" , function ( b ) { z ( a , "checkboxClick" , { checked : b . target . checked } , function ( ) { a . select ( ) } ) } ) ; d = t . getBBox ( ) ; B = a . legendItemWidth = e . itemWidth || g + h + d . width + l + ( w ? 20 : 0 ) , e = B ; b . itemHeight = g = d . height ; if ( f && b . itemX - A + e > ( p || c . chartWidth - 2 * k - A ) ) b . itemX = A , b . itemY += n + b . lastLineHeight + q , b . lastLineHeight = 0 ; b . maxItemWidth = s ( b . maxItemWidth , e ) ; b . lastItemY = n + b . itemY + q ; b . lastLineHeight = s ( g , b . lastLineHeight ) ; a . _legendItemPos = [ b . itemX , b . itemY ] ; f ? b . itemX += e : ( b . itemY += n + g + q , b . lastLineHeight = g ) ; b . offsetWidth =
p || s ( ( f ? b . itemX - A - l : e ) + k , b . offsetWidth ) } , render : function ( ) { var a = this , b = a . chart , c = b . renderer , d = a . group , e , f , g , h , i = a . box , j = a . options , k = a . padding , l = j . borderWidth , m = j . backgroundColor ; a . itemX = a . initialItemX ; a . itemY = a . initialItemY ; a . offsetWidth = 0 ; a . lastItemY = 0 ; if ( ! d ) a . group = d = c . g ( "legend" ) . attr ( { zIndex : 7 } ) . add ( ) , a . contentGroup = c . g ( ) . attr ( { zIndex : 1 } ) . add ( d ) , a . scrollGroup = c . g ( ) . add ( a . contentGroup ) ; a . renderTitle ( ) ; e = [ ] ; n ( b . series , function ( a ) { var b = a . options ; b . showInLegend && ! u ( b . linkedTo ) && ( e = e . concat ( a . legendItems ||
( b . legendType === "point" ? a . data : a ) ) ) } ) ; Kb ( e , function ( a , b ) { return ( a . options && a . options . legendIndex || 0 ) - ( b . options && b . options . legendIndex || 0 ) } ) ; j . reversed && e . reverse ( ) ; a . allItems = e ; a . display = f = ! ! e . length ; n ( e , function ( b ) { a . renderItem ( b ) } ) ; g = j . width || a . offsetWidth ; h = a . lastItemY + a . lastLineHeight + a . titleHeight ; h = a . handleOverflow ( h ) ; if ( l || m ) { g += k ; h += k ; if ( i ) { if ( g > 0 && h > 0 ) i [ i . isNew ? "attr" : "animate" ] ( i . crisp ( null , null , null , g , h ) ) , i . isNew = ! 1 } else a . box = i = c . rect ( 0 , 0 , g , h , j . borderRadius , l || 0 ) . attr ( { stroke : j . borderColor ,
"stroke-width" : l || 0 , fill : m || S } ) . add ( d ) . shadow ( j . shadow ) , i . isNew = ! 0 ; i [ f ? "show" : "hide" ] ( ) } a . legendWidth = g ; a . legendHeight = h ; n ( e , function ( b ) { a . positionItem ( b ) } ) ; f && d . align ( r ( { width : g , height : h } , j ) , ! 0 , "spacingBox" ) ; b . isResizing || this . positionCheckboxes ( ) } , handleOverflow : function ( a ) { var b = this , c = this . chart , d = c . renderer , e = this . options , f = e . y , f = c . spacingBox . height + ( e . verticalAlign === "top" ? - f : f ) - this . padding , g = e . maxHeight , h = this . clipRect , i = e . navigation , j = o ( i . animation , ! 0 ) , k = i . arrowSize || 12 , l = this . nav ; e . layout ===
"horizontal" && ( f /= 2 ) ; g && ( f = I ( f , g ) ) ; if ( a > f && ! e . useHTML ) { this . clipHeight = c = f - 20 - this . titleHeight ; this . pageCount = xa ( a / c ) ; this . currentPage = o ( this . currentPage , 1 ) ; this . fullHeight = a ; if ( ! h ) h = b . clipRect = d . clipRect ( 0 , 0 , 9999 , 0 ) , b . contentGroup . clip ( h ) ; h . attr ( { height : c } ) ; if ( ! l ) this . nav = l = d . g ( ) . attr ( { zIndex : 1 } ) . add ( this . group ) , this . up = d . symbol ( "triangle" , 0 , 0 , k , k ) . on ( "click" , function ( ) { b . scroll ( - 1 , j ) } ) . add ( l ) , this . pager = d . text ( "" , 15 , 10 ) . css ( i . style ) . add ( l ) , this . down = d . symbol ( "triangle-down" , 0 , 0 , k , k ) . on ( "click" ,
function ( ) { b . scroll ( 1 , j ) } ) . add ( l ) ; b . scroll ( 0 ) ; a = f } else if ( l ) h . attr ( { height : c . chartHeight } ) , l . hide ( ) , this . scrollGroup . attr ( { translateY : 1 } ) , this . clipHeight = 0 ; return a } , scroll : function ( a , b ) { var c = this . pageCount , d = this . currentPage + a , e = this . clipHeight , f = this . options . navigation , g = f . activeColor , h = f . inactiveColor , f = this . pager , i = this . padding ; d > c && ( d = c ) ; if ( d > 0 ) b !== w && La ( b , this . chart ) , this . nav . attr ( { translateX : i , translateY : e + 7 + this . titleHeight , visibility : "visible" } ) , this . up . attr ( { fill : d === 1 ? h : g } ) . css ( { cursor : d ===
1 ? "default" : "pointer" } ) , f . attr ( { text : d + "/" + this . pageCount } ) , this . down . attr ( { x : 18 + this . pager . getBBox ( ) . width , fill : d === c ? h : g } ) . css ( { cursor : d === c ? "default" : "pointer" } ) , e = - I ( e * ( d - 1 ) , this . fullHeight - e + i ) + 1 , this . scrollGroup . animate ( { translateY : e } ) , f . attr ( { text : d + "/" + c } ) , this . currentPage = d , this . positionCheckboxes ( e ) } } ; /Trident.*?11\.0/ . test ( oa ) && mb ( eb . prototype , "positionItem" , function ( a , b ) { var c = this ; setTimeout ( function ( ) { a . call ( c , b ) } ) } ) ; yb . prototype = { init : function ( a , b ) { var c , d = a . series ; a . series = null ; c =
x ( M , a ) ; c . series = a . series = d ; d = c . chart ; this . margin = this . splashArray ( "margin" , d ) ; this . spacing = this . splashArray ( "spacing" , d ) ; var e = d . events ; this . bounds = { h : { } , v : { } } ; this . callback = b ; this . isResizing = 0 ; this . options = c ; this . axes = [ ] ; this . series = [ ] ; this . hasCartesianSeries = d . showAxes ; var f = this , g ; f . index = Ga . length ; Ga . push ( f ) ; d . reflow !== ! 1 && J ( f , "load" , function ( ) { f . initReflow ( ) } ) ; if ( e ) for ( g in e ) J ( f , g , e [ g ] ) ; f . xAxis = [ ] ; f . yAxis = [ ] ; f . animation = $ ? ! 1 : o ( d . animation , ! 0 ) ; f . pointCount = 0 ; f . counters = new Jb ; f . firstRender ( ) } ,
initSeries : function ( a ) { var b = this . options . chart ; ( b = W [ a . type || b . type || b . defaultSeriesType ] ) || ka ( 17 , ! 0 ) ; b = new b ; b . init ( this , a ) ; return b } , addSeries : function ( a , b , c ) { var d , e = this ; a && ( b = o ( b , ! 0 ) , z ( e , "addSeries" , { options : a } , function ( ) { d = e . initSeries ( a ) ; e . isDirtyLegend = ! 0 ; e . linkSeries ( ) ; b && e . redraw ( c ) } ) ) ; return d } , addAxis : function ( a , b , c , d ) { var e = b ? "xAxis" : "yAxis" , f = this . options ; new db ( this , x ( a , { index : this [ e ] . length , isX : b } ) ) ; f [ e ] = ja ( f [ e ] || { } ) ; f [ e ] . push ( a ) ; o ( c , ! 0 ) && this . redraw ( d ) } , isInsidePlot : function ( a , b ,
c ) { var d = c ? b : a , a = c ? a : b ; return d >= 0 && d <= this . plotWidth && a >= 0 && a <= this . plotHeight } , adjustTickAmounts : function ( ) { this . options . chart . alignTicks !== ! 1 && n ( this . axes , function ( a ) { a . adjustTickAmount ( ) } ) ; this . maxTicks = null } , redraw : function ( a ) { var b = this . axes , c = this . series , d = this . pointer , e = this . legend , f = this . isDirtyLegend , g , h , i = this . isDirtyBox , j = c . length , k = j , l = this . renderer , m = l . isHidden ( ) , p = [ ] ; La ( a , this ) ; m && this . cloneRenderTo ( ) ; for ( this . layOutTitles ( ) ; k -- ; ) if ( a = c [ k ] , a . options . stacking && ( g = ! 0 , a . isDirty ) ) { h = ! 0 ;
break } if ( h ) for ( k = j ; k -- ; ) if ( a = c [ k ] , a . options . stacking ) a . isDirty = ! 0 ; n ( c , function ( a ) { a . isDirty && a . options . legendType === "point" && ( f = ! 0 ) } ) ; if ( f && e . options . enabled ) e . render ( ) , this . isDirtyLegend = ! 1 ; g && this . getStacks ( ) ; if ( this . hasCartesianSeries ) { if ( ! this . isResizing ) this . maxTicks = null , n ( b , function ( a ) { a . setScale ( ) } ) ; this . adjustTickAmounts ( ) ; this . getMargins ( ) ; n ( b , function ( a ) { a . isDirty && ( i = ! 0 ) } ) ; n ( b , function ( a ) { if ( a . isDirtyExtremes ) a . isDirtyExtremes = ! 1 , p . push ( function ( ) { z ( a , "afterSetExtremes" , r ( a . eventArgs ,
a . getExtremes ( ) ) ) ; delete a . eventArgs } ) ; ( i || g ) && a . redraw ( ) } ) } i && this . drawChartBox ( ) ; n ( c , function ( a ) { a . isDirty && a . visible && ( ! a . isCartesian || a . xAxis ) && a . redraw ( ) } ) ; d && d . reset && d . reset ( ! 0 ) ; l . draw ( ) ; z ( this , "redraw" ) ; m && this . cloneRenderTo ( ! 0 ) ; n ( p , function ( a ) { a . call ( ) } ) } , showLoading : function ( a ) { var b = this . options , c = this . loadingDiv , d = b . loading ; if ( ! c ) this . loadingDiv = c = U ( Ea , { className : "highcharts-loading" } , r ( d . style , { zIndex : 10 , display : S } ) , this . container ) , this . loadingSpan = U ( "span" , null , d . labelStyle , c ) ; this . loadingSpan . innerHTML =
a || b . lang . loading ; if ( ! this . loadingShown ) K ( c , { opacity : 0 , display : "" , left : this . plotLeft + "px" , top : this . plotTop + "px" , width : this . plotWidth + "px" , height : this . plotHeight + "px" } ) , Bb ( c , { opacity : d . style . opacity } , { duration : d . showDuration || 0 } ) , this . loadingShown = ! 0 } , hideLoading : function ( ) { var a = this . options , b = this . loadingDiv ; b && Bb ( b , { opacity : 0 } , { duration : a . loading . hideDuration || 100 , complete : function ( ) { K ( b , { display : S } ) } } ) ; this . loadingShown = ! 1 } , get : function ( a ) { var b = this . axes , c = this . series , d , e ; for ( d = 0 ; d < b . length ; d ++ ) if ( b [ d ] . options . id ===
a ) return b [ d ] ; for ( d = 0 ; d < c . length ; d ++ ) if ( c [ d ] . options . id === a ) return c [ d ] ; for ( d = 0 ; d < c . length ; d ++ ) { e = c [ d ] . points || [ ] ; for ( b = 0 ; b < e . length ; b ++ ) if ( e [ b ] . id === a ) return e [ b ] } return null } , getAxes : function ( ) { var a = this , b = this . options , c = b . xAxis = ja ( b . xAxis || { } ) , b = b . yAxis = ja ( b . yAxis || { } ) ; n ( c , function ( a , b ) { a . index = b ; a . isX = ! 0 } ) ; n ( b , function ( a , b ) { a . index = b } ) ; c = c . concat ( b ) ; n ( c , function ( b ) { new db ( a , b ) } ) ; a . adjustTickAmounts ( ) } , getSelectedPoints : function ( ) { var a = [ ] ; n ( this . series , function ( b ) { a = a . concat ( ub ( b . points || [ ] ,
function ( a ) { return a . selected } ) ) } ) ; return a } , getSelectedSeries : function ( ) { return ub ( this . series , function ( a ) { return a . selected } ) } , getStacks : function ( ) { var a = this ; n ( a . yAxis , function ( a ) { if ( a . stacks && a . hasVisibleSeries ) a . oldStacks = a . stacks } ) ; n ( a . series , function ( b ) { if ( b . options . stacking && ( b . visible === ! 0 || a . options . chart . ignoreHiddenSeries === ! 1 ) ) b . stackKey = b . type + o ( b . options . stack , "" ) } ) } , showResetZoom : function ( ) { var a = this , b = M . lang , c = a . options . chart . resetZoomButton , d = c . theme , e = d . states , f = c . relativeTo ===
"chart" ? null : "plotBox" ; this . resetZoomButton = a . renderer . button ( b . resetZoom , null , null , function ( ) { a . zoomOut ( ) } , d , e && e . hover ) . attr ( { align : c . position . align , title : b . resetZoomTitle } ) . add ( ) . align ( c . position , ! 1 , f ) } , zoomOut : function ( ) { var a = this ; z ( a , "selection" , { resetSelection : ! 0 } , function ( ) { a . zoom ( ) } ) } , zoom : function ( a ) { var b , c = this . pointer , d = ! 1 , e ; ! a || a . resetSelection ? n ( this . axes , function ( a ) { b = a . zoom ( ) } ) : n ( a . xAxis . concat ( a . yAxis ) , function ( a ) { var e = a . axis , h = e . isXAxis ; if ( c [ h ? "zoomX" : "zoomY" ] || c [ h ? "pinchX" : "pinchY" ] ) b =
e . zoom ( a . min , a . max ) , e . displayBtn && ( d = ! 0 ) } ) ; e = this . resetZoomButton ; if ( d && ! e ) this . showResetZoom ( ) ; else if ( ! d && T ( e ) ) this . resetZoomButton = e . destroy ( ) ; b && this . redraw ( o ( this . options . chart . animation , a && a . animation , this . pointCount < 100 ) ) } , pan : function ( a , b ) { var c = this , d = c . hoverPoints , e ; d && n ( d , function ( a ) { a . setState ( ) } ) ; n ( b === "xy" ? [ 1 , 0 ] : [ 1 ] , function ( b ) { var d = a [ b ? "chartX" : "chartY" ] , h = c [ b ? "xAxis" : "yAxis" ] [ 0 ] , i = c [ b ? "mouseDownX" : "mouseDownY" ] , j = ( h . pointRange || 0 ) / 2 , k = h . getExtremes ( ) , l = h . toValue ( i - d , ! 0 ) + j , i = h . toValue ( i +
c [ b ? "plotWidth" : "plotHeight" ] - d , ! 0 ) - j ; h . series . length && l > I ( k . dataMin , k . min ) && i < s ( k . dataMax , k . max ) && ( h . setExtremes ( l , i , ! 1 , ! 1 , { trigger : "pan" } ) , e = ! 0 ) ; c [ b ? "mouseDownX" : "mouseDownY" ] = d } ) ; e && c . redraw ( ! 1 ) ; K ( c . container , { cursor : "move" } ) } , setTitle : function ( a , b ) { var f ; var c = this , d = c . options , e ; e = d . title = x ( d . title , a ) ; f = d . subtitle = x ( d . subtitle , b ) , d = f ; n ( [ [ "title" , a , e ] , [ "subtitle" , b , d ] ] , function ( a ) { var b = a [ 0 ] , d = c [ b ] , e = a [ 1 ] , a = a [ 2 ] ; d && e && ( c [ b ] = d = d . destroy ( ) ) ; a && a . text && ! d && ( c [ b ] = c . renderer . text ( a . text , 0 , 0 , a . useHTML ) . attr ( { align : a . align ,
"class" : "highcharts-" + b , zIndex : a . zIndex || 4 } ) . css ( a . style ) . add ( ) ) } ) ; c . layOutTitles ( ) } , layOutTitles : function ( ) { var a = 0 , b = this . title , c = this . subtitle , d = this . options , e = d . title , d = d . subtitle , f = this . spacingBox . width - 44 ; if ( b && ( b . css ( { width : ( e . width || f ) + "px" } ) . align ( r ( { y : 15 } , e ) , ! 1 , "spacingBox" ) , ! e . floating && ! e . verticalAlign ) ) a = b . getBBox ( ) . height , a >= 18 && a <= 25 && ( a = 15 ) ; c && ( c . css ( { width : ( d . width || f ) + "px" } ) . align ( r ( { y : a + e . margin } , d ) , ! 1 , "spacingBox" ) , ! d . floating && ! d . verticalAlign && ( a = xa ( a + c . getBBox ( ) . height ) ) ) ; this . titleOffset =
a } , getChartSize : function ( ) { var a = this . options . chart , b = this . renderToClone || this . renderTo ; this . containerWidth = jb ( b , "width" ) ; this . containerHeight = jb ( b , "height" ) ; this . chartWidth = s ( 0 , a . width || this . containerWidth || 600 ) ; this . chartHeight = s ( 0 , o ( a . height , this . containerHeight > 19 ? this . containerHeight : 400 ) ) } , cloneRenderTo : function ( a ) { var b = this . renderToClone , c = this . container ; a ? b && ( this . renderTo . appendChild ( c ) , Ta ( b ) , delete this . renderToClone ) : ( c && c . parentNode === this . renderTo && this . renderTo . removeChild ( c ) , this . renderToClone =
b = this . renderTo . cloneNode ( 0 ) , K ( b , { position : "absolute" , top : "-9999px" , display : "block" } ) , y . body . appendChild ( b ) , c && b . appendChild ( c ) ) } , getContainer : function ( ) { var a , b = this . options . chart , c , d , e ; this . renderTo = a = b . renderTo ; e = "highcharts-" + zb ++ ; if ( ea ( a ) ) this . renderTo = a = y . getElementById ( a ) ; a || ka ( 13 , ! 0 ) ; c = C ( v ( a , "data-highcharts-chart" ) ) ; ! isNaN ( c ) && Ga [ c ] && Ga [ c ] . destroy ( ) ; v ( a , "data-highcharts-chart" , this . index ) ; a . innerHTML = "" ; a . offsetWidth || this . cloneRenderTo ( ) ; this . getChartSize ( ) ; c = this . chartWidth ; d = this . chartHeight ;
this . container = a = U ( Ea , { className : "highcharts-container" + ( b . className ? " " + b . className : "" ) , id : e } , r ( { position : "relative" , overflow : "hidden" , width : c + "px" , height : d + "px" , textAlign : "left" , lineHeight : "normal" , zIndex : 0 , "-webkit-tap-highlight-color" : "rgba(0,0,0,0)" } , b . style ) , this . renderToClone || a ) ; this . _cursor = a . style . cursor ; this . renderer = b . forExport ? new Ha ( a , c , d , ! 0 ) : new Va ( a , c , d ) ; $ && this . renderer . create ( this , a , c , d ) } , getMargins : function ( ) { var a = this . spacing , b , c = this . legend , d = this . margin , e = this . options . legend ,
f = o ( e . margin , 10 ) , g = e . x , h = e . y , i = e . align , j = e . verticalAlign , k = this . titleOffset ; this . resetMargins ( ) ; b = this . axisOffset ; if ( k && ! u ( d [ 0 ] ) ) this . plotTop = s ( this . plotTop , k + this . options . title . margin + a [ 0 ] ) ; if ( c . display && ! e . floating ) if ( i === "right" ) { if ( ! u ( d [ 1 ] ) ) this . marginRight = s ( this . marginRight , c . legendWidth - g + f + a [ 1 ] ) } else if ( i === "left" ) { if ( ! u ( d [ 3 ] ) ) this . plotLeft = s ( this . plotLeft , c . legendWidth + g + f + a [ 3 ] ) } else if ( j === "top" ) { if ( ! u ( d [ 0 ] ) ) this . plotTop = s ( this . plotTop , c . legendHeight + h + f + a [ 0 ] ) } else if ( j === "bottom" && ! u ( d [ 2 ] ) ) this . marginBottom =
s ( this . marginBottom , c . legendHeight - h + f + a [ 2 ] ) ; this . extraBottomMargin && ( this . marginBottom += this . extraBottomMargin ) ; this . extraTopMargin && ( this . plotTop += this . extraTopMargin ) ; this . hasCartesianSeries && n ( this . axes , function ( a ) { a . getOffset ( ) } ) ; u ( d [ 3 ] ) || ( this . plotLeft += b [ 3 ] ) ; u ( d [ 0 ] ) || ( this . plotTop += b [ 0 ] ) ; u ( d [ 2 ] ) || ( this . marginBottom += b [ 2 ] ) ; u ( d [ 1 ] ) || ( this . marginRight += b [ 1 ] ) ; this . setChartSize ( ) } , initReflow : function ( ) { function a ( a ) { var g = c . width || jb ( d , "width" ) , h = c . height || jb ( d , "height" ) , a = a ? a . target : O ; if ( ! b . hasUserSize &&
g && h && ( a === O || a === y ) ) { if ( g !== b . containerWidth || h !== b . containerHeight ) clearTimeout ( e ) , b . reflowTimeout = e = setTimeout ( function ( ) { if ( b . container ) b . setSize ( g , h , ! 1 ) , b . hasUserSize = null } , 100 ) ; b . containerWidth = g ; b . containerHeight = h } } var b = this , c = b . options . chart , d = b . renderTo , e ; b . reflow = a ; J ( O , "resize" , a ) ; J ( b , "destroy" , function ( ) { aa ( O , "resize" , a ) } ) } , setSize : function ( a , b , c ) { var d = this , e , f , g ; d . isResizing += 1 ; g = function ( ) { d && z ( d , "endResize" , null , function ( ) { d . isResizing -= 1 } ) } ; La ( c , d ) ; d . oldChartHeight = d . chartHeight ;
d . oldChartWidth = d . chartWidth ; if ( u ( a ) ) d . chartWidth = e = s ( 0 , t ( a ) ) , d . hasUserSize = ! ! e ; if ( u ( b ) ) d . chartHeight = f = s ( 0 , t ( b ) ) ; K ( d . container , { width : e + "px" , height : f + "px" } ) ; d . setChartSize ( ! 0 ) ; d . renderer . setSize ( e , f , c ) ; d . maxTicks = null ; n ( d . axes , function ( a ) { a . isDirty = ! 0 ; a . setScale ( ) } ) ; n ( d . series , function ( a ) { a . isDirty = ! 0 } ) ; d . isDirtyLegend = ! 0 ; d . isDirtyBox = ! 0 ; d . getMargins ( ) ; d . redraw ( c ) ; d . oldChartHeight = null ; z ( d , "resize" ) ; Fa === ! 1 ? g ( ) : setTimeout ( g , Fa && Fa . duration || 500 ) } , setChartSize : function ( a ) { var b = this . inverted , c = this . renderer ,
d = this . chartWidth , e = this . chartHeight , f = this . options . chart , g = this . spacing , h = this . clipOffset , i , j , k , l ; this . plotLeft = i = t ( this . plotLeft ) ; this . plotTop = j = t ( this . plotTop ) ; this . plotWidth = k = s ( 0 , t ( d - i - this . marginRight ) ) ; this . plotHeight = l = s ( 0 , t ( e - j - this . marginBottom ) ) ; this . plotSizeX = b ? l : k ; this . plotSizeY = b ? k : l ; this . plotBorderWidth = f . plotBorderWidth || 0 ; this . spacingBox = c . spacingBox = { x : g [ 3 ] , y : g [ 0 ] , width : d - g [ 3 ] - g [ 1 ] , height : e - g [ 0 ] - g [ 2 ] } ; this . plotBox = c . plotBox = { x : i , y : j , width : k , height : l } ; d = 2 * P ( this . plotBorderWidth / 2 ) ;
b = xa ( s ( d , h [ 3 ] ) / 2 ) ; c = xa ( s ( d , h [ 0 ] ) / 2 ) ; this . clipBox = { x : b , y : c , width : P ( this . plotSizeX - s ( d , h [ 1 ] ) / 2 - b ) , height : P ( this . plotSizeY - s ( d , h [ 2 ] ) / 2 - c ) } ; a || n ( this . axes , function ( a ) { a . setAxisSize ( ) ; a . setAxisTranslation ( ) } ) } , resetMargins : function ( ) { var a = this . spacing , b = this . margin ; this . plotTop = o ( b [ 0 ] , a [ 0 ] ) ; this . marginRight = o ( b [ 1 ] , a [ 1 ] ) ; this . marginBottom = o ( b [ 2 ] , a [ 2 ] ) ; this . plotLeft = o ( b [ 3 ] , a [ 3 ] ) ; this . axisOffset = [ 0 , 0 , 0 , 0 ] ; this . clipOffset = [ 0 , 0 , 0 , 0 ] } , drawChartBox : function ( ) { var a = this . options . chart , b = this . renderer , c = this . chartWidth ,
d = this . chartHeight , e = this . chartBackground , f = this . plotBackground , g = this . plotBorder , h = this . plotBGImage , i = a . borderWidth || 0 , j = a . backgroundColor , k = a . plotBackgroundColor , l = a . plotBackgroundImage , m = a . plotBorderWidth || 0 , p , q = this . plotLeft , o = this . plotTop , n = this . plotWidth , s = this . plotHeight , t = this . plotBox , u = this . clipRect , r = this . clipBox ; p = i + ( a . shadow ? 8 : 0 ) ; if ( i || j ) if ( e ) e . animate ( e . crisp ( null , null , null , c - p , d - p ) ) ; else { e = { fill : j || S } ; if ( i ) e . stroke = a . borderColor , e [ "stroke-width" ] = i ; this . chartBackground = b . rect ( p / 2 , p /
2 , c - p , d - p , a . borderRadius , i ) . attr ( e ) . add ( ) . shadow ( a . shadow ) } if ( k ) f ? f . animate ( t ) : this . plotBackground = b . rect ( q , o , n , s , 0 ) . attr ( { fill : k } ) . add ( ) . shadow ( a . plotShadow ) ; if ( l ) h ? h . animate ( t ) : this . plotBGImage = b . image ( l , q , o , n , s ) . add ( ) ; u ? u . animate ( { width : r . width , height : r . height } ) : this . clipRect = b . clipRect ( r ) ; if ( m ) g ? g . animate ( g . crisp ( null , q , o , n , s ) ) : this . plotBorder = b . rect ( q , o , n , s , 0 , - m ) . attr ( { stroke : a . plotBorderColor , "stroke-width" : m , zIndex : 1 } ) . add ( ) ; this . isDirtyBox = ! 1 } , propFromSeries : function ( ) { var a = this , b = a . options . chart ,
c , d = a . options . series , e , f ; n ( [ "inverted" , "angular" , "polar" ] , function ( g ) { c = W [ b . type || b . defaultSeriesType ] ; f = a [ g ] || b [ g ] || c && c . prototype [ g ] ; for ( e = d && d . length ; ! f && e -- ; ) ( c = W [ d [ e ] . type ] ) && c . prototype [ g ] && ( f = ! 0 ) ; a [ g ] = f } ) } , linkSeries : function ( ) { var a = this , b = a . series ; n ( b , function ( a ) { a . linkedSeries . length = 0 } ) ; n ( b , function ( b ) { var d = b . options . linkedTo ; if ( ea ( d ) && ( d = d === ":previous" ? a . series [ b . index - 1 ] : a . get ( d ) ) ) d . linkedSeries . push ( b ) , b . linkedParent = d } ) } , render : function ( ) { var a = this , b = a . axes , c = a . renderer , d = a . options ,
e = d . labels , f = d . credits , g ; a . setTitle ( ) ; a . legend = new eb ( a , d . legend ) ; a . getStacks ( ) ; n ( b , function ( a ) { a . setScale ( ) } ) ; a . getMargins ( ) ; a . maxTicks = null ; n ( b , function ( a ) { a . setTickPositions ( ! 0 ) ; a . setMaxTicks ( ) } ) ; a . adjustTickAmounts ( ) ; a . getMargins ( ) ; a . drawChartBox ( ) ; a . hasCartesianSeries && n ( b , function ( a ) { a . render ( ) } ) ; if ( ! a . seriesGroup ) a . seriesGroup = c . g ( "series-group" ) . attr ( { zIndex : 3 } ) . add ( ) ; n ( a . series , function ( a ) { a . translate ( ) ; a . setTooltipPoints ( ) ; a . render ( ) } ) ; e . items && n ( e . items , function ( b ) { var d = r ( e . style , b . style ) ,
f = C ( d . left ) + a . plotLeft , g = C ( d . top ) + a . plotTop + 12 ; delete d . left ; delete d . top ; c . text ( b . html , f , g ) . attr ( { zIndex : 2 } ) . css ( d ) . add ( ) } ) ; if ( f . enabled && ! a . credits ) g = f . href , a . credits = c . text ( f . text , 0 , 0 ) . on ( "click" , function ( ) { if ( g ) location . href = g } ) . attr ( { align : f . position . align , zIndex : 8 } ) . css ( f . style ) . add ( ) . align ( f . position ) ; a . hasRendered = ! 0 } , destroy : function ( ) { var a = this , b = a . axes , c = a . series , d = a . container , e , f = d && d . parentNode ; z ( a , "destroy" ) ; Ga [ a . index ] = w ; a . renderTo . removeAttribute ( "data-highcharts-chart" ) ; aa ( a ) ; for ( e =
b . length ; e -- ; ) b [ e ] = b [ e ] . destroy ( ) ; for ( e = c . length ; e -- ; ) c [ e ] = c [ e ] . destroy ( ) ; n ( "title,subtitle,chartBackground,plotBackground,plotBGImage,plotBorder,seriesGroup,clipRect,credits,pointer,scroller,rangeSelector,legend,resetZoomButton,tooltip,renderer" . split ( "," ) , function ( b ) { var c = a [ b ] ; c && c . destroy && ( a [ b ] = c . destroy ( ) ) } ) ; if ( d ) d . innerHTML = "" , aa ( d ) , f && Ta ( d ) ; for ( e in a ) delete a [ e ] } , isReadyToRender : function ( ) { var a = this ; return ! Z && O == O . top && y . readyState !== "complete" || $ && ! O . canvg ? ( $ ? Tb . push ( function ( ) { a . firstRender ( ) } ,
a . options . global . canvasToolsURL ) : y . attachEvent ( "onreadystatechange" , function ( ) { y . detachEvent ( "onreadystatechange" , a . firstRender ) ; y . readyState === "complete" && a . firstRender ( ) } ) , ! 1 ) : ! 0 } , firstRender : function ( ) { var a = this , b = a . options , c = a . callback ; if ( a . isReadyToRender ( ) ) a . getContainer ( ) , z ( a , "init" ) , a . resetMargins ( ) , a . setChartSize ( ) , a . propFromSeries ( ) , a . getAxes ( ) , n ( b . series || [ ] , function ( b ) { a . initSeries ( b ) } ) , a . linkSeries ( ) , z ( a , "beforeRender" ) , a . pointer = new xb ( a , b ) , a . render ( ) , a . renderer . draw ( ) , c && c . apply ( a ,
[ a ] ) , n ( a . callbacks , function ( b ) { b . apply ( a , [ a ] ) } ) , a . cloneRenderTo ( ! 0 ) , z ( a , "load" ) } , splashArray : function ( a , b ) { var c = b [ a ] , c = T ( c ) ? c : [ c , c , c , c ] ; return [ o ( b [ a + "Top" ] , c [ 0 ] ) , o ( b [ a + "Right" ] , c [ 1 ] ) , o ( b [ a + "Bottom" ] , c [ 2 ] ) , o ( b [ a + "Left" ] , c [ 3 ] ) ] } } ; yb . prototype . callbacks = [ ] ; var Pa = function ( ) { } ; Pa . prototype = { init : function ( a , b , c ) { this . series = a ; this . applyOptions ( b , c ) ; this . pointAttr = { } ; if ( a . options . colorByPoint && ( b = a . options . colors || a . chart . options . colors , this . color = this . color || b [ a . colorCounter ++ ] , a . colorCounter === b . length ) ) a . colorCounter =
0 ; a . chart . pointCount ++ ; return this } , applyOptions : function ( a , b ) { var c = this . series , d = c . pointValKey , a = Pa . prototype . optionsToObject . call ( this , a ) ; r ( this , a ) ; this . options = this . options ? r ( this . options , a ) : a ; if ( d ) this . y = this [ d ] ; if ( this . x === w && c ) this . x = b === w ? c . autoIncrement ( ) : b ; return this } , optionsToObject : function ( a ) { var b , c = this . series , d = c . pointArrayMap || [ "y" ] , e = d . length , f = 0 , g = 0 ; if ( typeof a === "number" || a === null ) b = { y : a } ; else if ( Ia ( a ) ) { b = { } ; if ( a . length > e ) { c = typeof a [ 0 ] ; if ( c === "string" ) b . name = a [ 0 ] ; else if ( c ===
"number" ) b . x = a [ 0 ] ; f ++ } for ( ; g < e ; ) b [ d [ g ++ ] ] = a [ f ++ ] } else if ( typeof a === "object" ) { b = a ; if ( a . dataLabels ) c . _hasPointLabels = ! 0 ; if ( a . marker ) c . _hasPointMarkers = ! 0 } return b } , destroy : function ( ) { var a = this . series . chart , b = a . hoverPoints , c ; a . pointCount -- ; if ( b && ( this . setState ( ) , ga ( b , this ) , ! b . length ) ) a . hoverPoints = null ; if ( this === a . hoverPoint ) this . onMouseOut ( ) ; if ( this . graphic || this . dataLabel ) aa ( this ) , this . destroyElements ( ) ; this . legendItem && a . legend . destroyItem ( this ) ; for ( c in this ) this [ c ] = null } , destroyElements : function ( ) { for ( var a =
"graphic,dataLabel,dataLabelUpper,group,connector,shadowGroup" . split ( "," ) , b , c = 6 ; c -- ; ) b = a [ c ] , this [ b ] && ( this [ b ] = this [ b ] . destroy ( ) ) } , getLabelConfig : function ( ) { return { x : this . category , y : this . y , key : this . name || this . category , series : this . series , point : this , percentage : this . percentage , total : this . total || this . stackTotal } } , select : function ( a , b ) { var c = this , d = c . series , e = d . chart , a = o ( a , ! c . selected ) ; c . firePointEvent ( a ? "select" : "unselect" , { accumulate : b } , function ( ) { c . selected = c . options . selected = a ; d . options . data [ qa ( c , d . data ) ] =
c . options ; c . setState ( a && "select" ) ; b || n ( e . getSelectedPoints ( ) , function ( a ) { if ( a . selected && a !== c ) a . selected = a . options . selected = ! 1 , d . options . data [ qa ( a , d . data ) ] = a . options , a . setState ( "" ) , a . firePointEvent ( "unselect" ) } ) } ) } , onMouseOver : function ( a ) { var b = this . series , c = b . chart , d = c . tooltip , e = c . hoverPoint ; if ( e && e !== this ) e . onMouseOut ( ) ; this . firePointEvent ( "mouseOver" ) ; d && ( ! d . shared || b . noSharedTooltip ) && d . refresh ( this , a ) ; this . setState ( "hover" ) ; c . hoverPoint = this } , onMouseOut : function ( ) { var a = this . series . chart , b = a . hoverPoints ;
if ( ! b || qa ( this , b ) === - 1 ) this . firePointEvent ( "mouseOut" ) , this . setState ( ) , a . hoverPoint = null } , tooltipFormatter : function ( a ) { var b = this . series , c = b . tooltipOptions , d = o ( c . valueDecimals , "" ) , e = c . valuePrefix || "" , f = c . valueSuffix || "" ; n ( b . pointArrayMap || [ "y" ] , function ( b ) { b = "{point." + b ; if ( e || f ) a = a . replace ( b + "}" , e + b + "}" + f ) ; a = a . replace ( b + "}" , b + ":,." + d + "f}" ) } ) ; return Ca ( a , { point : this , series : this . series } ) } , update : function ( a , b , c ) { var d = this , e = d . series , f = d . graphic , g , h = e . data , i = e . chart , j = e . options , b = o ( b , ! 0 ) ; d . firePointEvent ( "update" ,
{ options : a } , function ( ) { d . applyOptions ( a ) ; if ( T ( a ) && ( e . getAttribs ( ) , f ) ) a . marker && a . marker . symbol ? d . graphic = f . destroy ( ) : f . attr ( d . pointAttr [ d . state || "" ] ) ; g = qa ( d , h ) ; e . xData [ g ] = d . x ; e . yData [ g ] = e . toYData ? e . toYData ( d ) : d . y ; e . zData [ g ] = d . z ; j . data [ g ] = d . options ; e . isDirty = e . isDirtyData = ! 0 ; if ( ! e . fixedBox && e . hasCartesianSeries ) i . isDirtyBox = ! 0 ; j . legendType === "point" && i . legend . destroyItem ( d ) ; b && i . redraw ( c ) } ) } , remove : function ( a , b ) { var c = this , d = c . series , e = d . points , f = d . chart , g , h = d . data ; La ( b , f ) ; a = o ( a , ! 0 ) ; c . firePointEvent ( "remove" ,
null , function ( ) { g = qa ( c , h ) ; h . length === e . length && e . splice ( g , 1 ) ; h . splice ( g , 1 ) ; d . options . data . splice ( g , 1 ) ; d . xData . splice ( g , 1 ) ; d . yData . splice ( g , 1 ) ; d . zData . splice ( g , 1 ) ; c . destroy ( ) ; d . isDirty = ! 0 ; d . isDirtyData = ! 0 ; a && f . redraw ( ) } ) } , firePointEvent : function ( a , b , c ) { var d = this , e = this . series . options ; ( e . point . events [ a ] || d . options && d . options . events && d . options . events [ a ] ) && this . importEvents ( ) ; a === "click" && e . allowPointSelect && ( c = function ( a ) { d . select ( null , a . ctrlKey || a . metaKey || a . shiftKey ) } ) ; z ( this , a , b , c ) } , importEvents : function ( ) { if ( ! this . hasImportedEvents ) { var a =
x ( this . series . options . point , this . options ) . events , b ; this . events = a ; for ( b in a ) J ( this , b , a [ b ] ) ; this . hasImportedEvents = ! 0 } } , setState : function ( a ) { var b = this . plotX , c = this . plotY , d = this . series , e = d . options . states , f = Y [ d . type ] . marker && d . options . marker , g = f && ! f . enabled , h = f && f . states [ a ] , i = h && h . enabled === ! 1 , j = d . stateMarkerGraphic , k = this . marker || { } , l = d . chart , m = this . pointAttr , a = a || "" ; if ( ! ( a === this . state || this . selected && a !== "select" || e [ a ] && e [ a ] . enabled === ! 1 || a && ( i || g && ! h . enabled ) ) ) { if ( this . graphic ) e = f && this . graphic . symbolName &&
m [ a ] . r , this . graphic . attr ( x ( m [ a ] , e ? { x : b - e , y : c - e , width : 2 * e , height : 2 * e } : { } ) ) ; else { if ( a && h ) e = h . radius , k = k . symbol || d . symbol , j && j . currentSymbol !== k && ( j = j . destroy ( ) ) , j ? j . attr ( { x : b - e , y : c - e } ) : ( d . stateMarkerGraphic = j = l . renderer . symbol ( k , b - e , c - e , 2 * e , 2 * e ) . attr ( m [ a ] ) . add ( d . markerGroup ) , j . currentSymbol = k ) ; if ( j ) j [ a && l . isInsidePlot ( b , c ) ? "show" : "hide" ] ( ) } this . state = a } } } ; var Q = function ( ) { } ; Q . prototype = { isCartesian : ! 0 , type : "line" , pointClass : Pa , sorted : ! 0 , requireSorting : ! 0 , pointAttrToOptions : { stroke : "lineColor" , "stroke-width" : "lineWidth" ,
fill : "fillColor" , r : "radius" } , colorCounter : 0 , init : function ( a , b ) { var c , d , e = a . series ; this . chart = a ; this . options = b = this . setOptions ( b ) ; this . linkedSeries = [ ] ; this . bindAxes ( ) ; r ( this , { name : b . name , state : "" , pointAttr : { } , visible : b . visible !== ! 1 , selected : b . selected === ! 0 } ) ; if ( $ ) b . animation = ! 1 ; d = b . events ; for ( c in d ) J ( this , c , d [ c ] ) ; if ( d && d . click || b . point && b . point . events && b . point . events . click || b . allowPointSelect ) a . runTrackerClick = ! 0 ; this . getColor ( ) ; this . getSymbol ( ) ; this . setData ( b . data , ! 1 ) ; if ( this . isCartesian ) a . hasCartesianSeries =
! 0 ; e . push ( this ) ; this . _i = e . length - 1 ; Kb ( e , function ( a , b ) { return o ( a . options . index , a . _i ) - o ( b . options . index , a . _i ) } ) ; n ( e , function ( a , b ) { a . index = b ; a . name = a . name || "Series " + ( b + 1 ) } ) } , bindAxes : function ( ) { var a = this , b = a . options , c = a . chart , d ; a . isCartesian && n ( [ "xAxis" , "yAxis" ] , function ( e ) { n ( c [ e ] , function ( c ) { d = c . options ; if ( b [ e ] === d . index || b [ e ] !== w && b [ e ] === d . id || b [ e ] === w && d . index === 0 ) c . series . push ( a ) , a [ e ] = c , c . isDirty = ! 0 } ) ; a [ e ] || ka ( 18 , ! 0 ) } ) } , autoIncrement : function ( ) { var a = this . options , b = this . xIncrement , b = o ( b , a . pointStart ,
0 ) ; this . pointInterval = o ( this . pointInterval , a . pointInterval , 1 ) ; this . xIncrement = b + this . pointInterval ; return b } , getSegments : function ( ) { var a = - 1 , b = [ ] , c , d = this . points , e = d . length ; if ( e ) if ( this . options . connectNulls ) { for ( c = e ; c -- ; ) d [ c ] . y === null && d . splice ( c , 1 ) ; d . length && ( b = [ d ] ) } else n ( d , function ( c , g ) { c . y === null ? ( g > a + 1 && b . push ( d . slice ( a + 1 , g ) ) , a = g ) : g === e - 1 && b . push ( d . slice ( a + 1 , g + 1 ) ) } ) ; this . segments = b } , setOptions : function ( a ) { var b = this . chart . options , c = b . plotOptions , d = c [ this . type ] ; this . userOptions = a ; a = x ( d , c . series ,
a ) ; this . tooltipOptions = x ( b . tooltip , a . tooltip ) ; d . marker === null && delete a . marker ; return a } , getColor : function ( ) { var a = this . options , b = this . userOptions , c = this . chart . options . colors , d = this . chart . counters , e ; e = a . color || Y [ this . type ] . color ; if ( ! e && ! a . colorByPoint ) u ( b . _colorIndex ) ? a = b . _colorIndex : ( b . _colorIndex = d . color , a = d . color ++ ) , e = c [ a ] ; this . color = e ; d . wrapColor ( c . length ) } , getSymbol : function ( ) { var a = this . userOptions , b = this . options . marker , c = this . chart , d = c . options . symbols , c = c . counters ; this . symbol = b . symbol ; if ( ! this . symbol ) u ( a . _symbolIndex ) ?
a = a . _symbolIndex : ( a . _symbolIndex = c . symbol , a = c . symbol ++ ) , this . symbol = d [ a ] ; if ( /^url/ . test ( this . symbol ) ) b . radius = 0 ; c . wrapSymbol ( d . length ) } , drawLegendSymbol : function ( a ) { var b = this . options , c = b . marker , d = a . options , e ; e = d . symbolWidth ; var f = this . chart . renderer , g = this . legendGroup , a = a . baseline - t ( f . fontMetrics ( d . itemStyle . fontSize ) . b * 0.3 ) ; if ( b . lineWidth ) { d = { "stroke-width" : b . lineWidth } ; if ( b . dashStyle ) d . dashstyle = b . dashStyle ; this . legendLine = f . path ( [ "M" , 0 , a , "L" , e , a ] ) . attr ( d ) . add ( g ) } if ( c && c . enabled ) b = c . radius , this . legendSymbol =
e = f . symbol ( this . symbol , e / 2 - b , a - b , 2 * b , 2 * b ) . add ( g ) , e . isMarker = ! 0 } , addPoint : function ( a , b , c , d ) { var e = this . options , f = this . data , g = this . graph , h = this . area , i = this . chart , j = this . xData , k = this . yData , l = this . zData , m = this . names , p = g && g . shift || 0 , q = e . data , s ; La ( d , i ) ; c && n ( [ g , h , this . graphNeg , this . areaNeg ] , function ( a ) { if ( a ) a . shift = p + 1 } ) ; if ( h ) h . isArea = ! 0 ; b = o ( b , ! 0 ) ; d = { series : this } ; this . pointClass . prototype . applyOptions . apply ( d , [ a ] ) ; g = d . x ; h = j . length ; if ( this . requireSorting && g < j [ h - 1 ] ) for ( s = ! 0 ; h && j [ h - 1 ] > g ; ) h -- ; j . splice ( h , 0 , g ) ;
k . splice ( h , 0 , this . toYData ? this . toYData ( d ) : d . y ) ; l . splice ( h , 0 , d . z ) ; if ( m ) m [ g ] = d . name ; q . splice ( h , 0 , a ) ; s && ( this . data . splice ( h , 0 , null ) , this . processData ( ) ) ; e . legendType === "point" && this . generatePoints ( ) ; c && ( f [ 0 ] && f [ 0 ] . remove ? f [ 0 ] . remove ( ! 1 ) : ( f . shift ( ) , j . shift ( ) , k . shift ( ) , l . shift ( ) , q . shift ( ) ) ) ; this . isDirtyData = this . isDirty = ! 0 ; b && ( this . getAttribs ( ) , i . redraw ( ) ) } , setData : function ( a , b ) { var c = this . points , d = this . options , e = this . chart , f = null , g = this . xAxis , h = g && g . categories && ! g . categories . length ? [ ] : null , i ; this . xIncrement =
null ; this . pointRange = g && g . categories ? 1 : d . pointRange ; this . colorCounter = 0 ; var j = [ ] , k = [ ] , l = [ ] , m = a ? a . length : [ ] ; i = o ( d . turboThreshold , 1E3 ) ; var p = this . pointArrayMap , p = p && p . length , q = ! ! this . toYData ; if ( i && m > i ) { for ( i = 0 ; f === null && i < m ; ) f = a [ i ] , i ++ ; if ( sa ( f ) ) { f = o ( d . pointStart , 0 ) ; d = o ( d . pointInterval , 1 ) ; for ( i = 0 ; i < m ; i ++ ) j [ i ] = f , k [ i ] = a [ i ] , f += d ; this . xIncrement = f } else if ( Ia ( f ) ) if ( p ) for ( i = 0 ; i < m ; i ++ ) d = a [ i ] , j [ i ] = d [ 0 ] , k [ i ] = d . slice ( 1 , p + 1 ) ; else for ( i = 0 ; i < m ; i ++ ) d = a [ i ] , j [ i ] = d [ 0 ] , k [ i ] = d [ 1 ] ; else ka ( 12 ) } else for ( i = 0 ; i < m ; i ++ ) if ( a [ i ] !==
w && ( d = { series : this } , this . pointClass . prototype . applyOptions . apply ( d , [ a [ i ] ] ) , j [ i ] = d . x , k [ i ] = q ? this . toYData ( d ) : d . y , l [ i ] = d . z , h && d . name ) ) h [ d . x ] = d . name ; ea ( k [ 0 ] ) && ka ( 14 , ! 0 ) ; this . data = [ ] ; this . options . data = a ; this . xData = j ; this . yData = k ; this . zData = l ; this . names = h ; for ( i = c && c . length || 0 ; i -- ; ) c [ i ] && c [ i ] . destroy && c [ i ] . destroy ( ) ; if ( g ) g . minRange = g . userMinRange ; this . isDirty = this . isDirtyData = e . isDirtyBox = ! 0 ; o ( b , ! 0 ) && e . redraw ( ! 1 ) } , remove : function ( a , b ) { var c = this , d = c . chart , a = o ( a , ! 0 ) ; if ( ! c . isRemoving ) c . isRemoving = ! 0 , z ( c , "remove" ,
null , function ( ) { c . destroy ( ) ; d . isDirtyLegend = d . isDirtyBox = ! 0 ; d . linkSeries ( ) ; a && d . redraw ( b ) } ) ; c . isRemoving = ! 1 } , processData : function ( a ) { var b = this . xData , c = this . yData , d = b . length , e ; e = 0 ; var f , g , h = this . xAxis , i = this . options , j = i . cropThreshold , k = this . isCartesian ; if ( k && ! this . isDirty && ! h . isDirty && ! this . yAxis . isDirty && ! a ) return ! 1 ; if ( k && this . sorted && ( ! j || d > j || this . forceCrop ) ) if ( a = h . min , h = h . max , b [ d - 1 ] < a || b [ 0 ] > h ) b = [ ] , c = [ ] ; else if ( b [ 0 ] < a || b [ d - 1 ] > h ) e = this . cropData ( this . xData , this . yData , a , h ) , b = e . xData , c = e . yData , e = e . start ,
f = ! 0 ; for ( h = b . length - 1 ; h >= 0 ; h -- ) d = b [ h ] - b [ h - 1 ] , d > 0 && ( g === w || d < g ) ? g = d : d < 0 && this . requireSorting && ka ( 15 ) ; this . cropped = f ; this . cropStart = e ; this . processedXData = b ; this . processedYData = c ; if ( i . pointRange === null ) this . pointRange = g || 1 ; this . closestPointRange = g } , cropData : function ( a , b , c , d ) { var e = a . length , f = 0 , g = e , h = o ( this . cropShoulder , 1 ) , i ; for ( i = 0 ; i < e ; i ++ ) if ( a [ i ] >= c ) { f = s ( 0 , i - h ) ; break } for ( ; i < e ; i ++ ) if ( a [ i ] > d ) { g = i + h ; break } return { xData : a . slice ( f , g ) , yData : b . slice ( f , g ) , start : f , end : g } } , generatePoints : function ( ) { var a = this . options . data ,
b = this . data , c , d = this . processedXData , e = this . processedYData , f = this . pointClass , g = d . length , h = this . cropStart || 0 , i , j = this . hasGroupedData , k , l = [ ] , m ; if ( ! b && ! j ) b = [ ] , b . length = a . length , b = this . data = b ; for ( m = 0 ; m < g ; m ++ ) i = h + m , j ? l [ m ] = ( new f ) . init ( this , [ d [ m ] ] . concat ( ja ( e [ m ] ) ) ) : ( b [ i ] ? k = b [ i ] : a [ i ] !== w && ( b [ i ] = k = ( new f ) . init ( this , a [ i ] , d [ m ] ) ) , l [ m ] = k ) ; if ( b && ( g !== ( c = b . length ) || j ) ) for ( m = 0 ; m < c ; m ++ ) if ( m === h && ! j && ( m += g ) , b [ m ] ) b [ m ] . destroyElements ( ) , b [ m ] . plotX = w ; this . data = b ; this . points = l } , setStackedPoints : function ( ) { if ( this . options . stacking &&
! ( this . visible !== ! 0 && this . chart . options . chart . ignoreHiddenSeries !== ! 1 ) ) { var a = this . processedXData , b = this . processedYData , c = [ ] , d = b . length , e = this . options , f = e . threshold , g = e . stack , e = e . stacking , h = this . stackKey , i = "-" + h , j = this . negStacks , k = this . yAxis , l = k . stacks , m = k . oldStacks , p , q , o , n , t ; for ( o = 0 ; o < d ; o ++ ) { n = a [ o ] ; t = b [ o ] ; q = ( p = j && t < f ) ? i : h ; l [ q ] || ( l [ q ] = { } ) ; if ( ! l [ q ] [ n ] ) m [ q ] && m [ q ] [ n ] ? ( l [ q ] [ n ] = m [ q ] [ n ] , l [ q ] [ n ] . total = null ) : l [ q ] [ n ] = new Mb ( k , k . options . stackLabels , p , n , g , e ) ; q = l [ q ] [ n ] ; q . points [ this . index ] = [ q . cum || 0 ] ; e === "percent" ?
( p = p ? h : i , j && l [ p ] && l [ p ] [ n ] ? ( p = l [ p ] [ n ] , q . total = p . total = s ( p . total , q . total ) + N ( t ) || 0 ) : q . total += N ( t ) || 0 ) : q . total += t || 0 ; q . cum = ( q . cum || 0 ) + ( t || 0 ) ; q . points [ this . index ] . push ( q . cum ) ; c [ o ] = q . cum } if ( e === "percent" ) k . usePercentage = ! 0 ; this . stackedYData = c ; k . oldStacks = { } } } , setPercentStacks : function ( ) { var a = this , b = a . stackKey , c = a . yAxis . stacks ; n ( [ b , "-" + b ] , function ( b ) { var d ; for ( var e = a . xData . length , f , g ; e -- ; ) if ( f = a . xData [ e ] , d = ( g = c [ b ] && c [ b ] [ f ] ) && g . points [ a . index ] , f = d ) g = g . total ? 100 / g . total : 0 , f [ 0 ] = ia ( f [ 0 ] * g ) , f [ 1 ] = ia ( f [ 1 ] * g ) ,
a . stackedYData [ e ] = f [ 1 ] } ) } , getExtremes : function ( ) { var a = this . yAxis , b = this . processedXData , c = this . stackedYData || this . processedYData , d = c . length , e = [ ] , f = 0 , g = this . xAxis . getExtremes ( ) , h = g . min , g = g . max , i , j , k , l ; for ( l = 0 ; l < d ; l ++ ) if ( j = b [ l ] , k = c [ l ] , i = k !== null && k !== w && ( ! a . isLog || k . length || k > 0 ) , j = this . getExtremesFromAll || this . cropped || ( b [ l + 1 ] || j ) >= h && ( b [ l - 1 ] || j ) <= g , i && j ) if ( i = k . length ) for ( ; i -- ; ) k [ i ] !== null && ( e [ f ++ ] = k [ i ] ) ; else e [ f ++ ] = k ; this . dataMin = o ( void 0 , Ja ( e ) ) ; this . dataMax = o ( void 0 , va ( e ) ) } , translate : function ( ) { this . processedXData ||
this . processData ( ) ; this . generatePoints ( ) ; for ( var a = this . options , b = a . stacking , c = this . xAxis , d = c . categories , e = this . yAxis , f = this . points , g = f . length , h = ! ! this . modifyValue , i = a . pointPlacement , j = i === "between" || sa ( i ) , k = a . threshold , a = 0 ; a < g ; a ++ ) { var l = f [ a ] , m = l . x , p = l . y , q = l . low , n = e . stacks [ ( this . negStacks && p < k ? "-" : "" ) + this . stackKey ] ; if ( e . isLog && p <= 0 ) l . y = p = null ; l . plotX = c . translate ( m , 0 , 0 , 0 , 1 , i , this . type === "flags" ) ; if ( b && this . visible && n && n [ m ] ) n = n [ m ] , p = n . points [ this . index ] , q = p [ 0 ] , p = p [ 1 ] , q === 0 && ( q = o ( k , e . min ) ) , e . isLog &&
q <= 0 && ( q = null ) , l . percentage = b === "percent" && p , l . total = l . stackTotal = n . total , l . stackY = p , n . setOffset ( this . pointXOffset || 0 , this . barW || 0 ) ; l . yBottom = u ( q ) ? e . translate ( q , 0 , 1 , 0 , 1 ) : null ; h && ( p = this . modifyValue ( p , l ) ) ; l . plotY = typeof p === "number" && p !== Infinity ? e . translate ( p , 0 , 1 , 0 , 1 ) : w ; l . clientX = j ? c . translate ( m , 0 , 0 , 0 , 1 ) : l . plotX ; l . negative = l . y < ( k || 0 ) ; l . category = d && d [ l . x ] !== w ? d [ l . x ] : l . x } this . getSegments ( ) } , setTooltipPoints : function ( a ) { var b = [ ] , c , d , e = this . xAxis , f = e && e . getExtremes ( ) , g = e ? e . tooltipLen || e . len : this . chart . plotSizeX ,
h , i , j = [ ] ; if ( this . options . enableMouseTracking !== ! 1 ) { if ( a ) this . tooltipPoints = null ; n ( this . segments || this . points , function ( a ) { b = b . concat ( a ) } ) ; e && e . reversed && ( b = b . reverse ( ) ) ; this . orderTooltipPoints && this . orderTooltipPoints ( b ) ; a = b . length ; for ( i = 0 ; i < a ; i ++ ) if ( e = b [ i ] , c = e . x , c >= f . min && c <= f . max ) { h = b [ i + 1 ] ; c = d === w ? 0 : d + 1 ; for ( d = b [ i + 1 ] ? I ( s ( 0 , P ( ( e . clientX + ( h ? h . wrappedClientX || h . clientX : g ) ) / 2 ) ) , g ) : g ; c >= 0 && c <= d ; ) j [ c ++ ] = e } this . tooltipPoints = j } } , tooltipHeaderFormatter : function ( a ) { var b = this . tooltipOptions , c = b . xDateFormat ,
d = b . dateTimeLabelFormats , e = this . xAxis , f = e && e . options . type === "datetime" , b = b . headerFormat , e = e && e . closestPointRange , g ; if ( f && ! c ) if ( e ) for ( g in D ) { if ( D [ g ] >= e ) { c = d [ g ] ; break } } else c = d . day ; f && c && sa ( a . key ) && ( b = b . replace ( "{point.key}" , "{point.key:" + c + "}" ) ) ; return Ca ( b , { point : a , series : this } ) } , onMouseOver : function ( ) { var a = this . chart , b = a . hoverSeries ; if ( b && b !== this ) b . onMouseOut ( ) ; this . options . events . mouseOver && z ( this , "mouseOver" ) ; this . setState ( "hover" ) ; a . hoverSeries = this } , onMouseOut : function ( ) { var a = this . options ,
b = this . chart , c = b . tooltip , d = b . hoverPoint ; if ( d ) d . onMouseOut ( ) ; this && a . events . mouseOut && z ( this , "mouseOut" ) ; c && ! a . stickyTracking && ( ! c . shared || this . noSharedTooltip ) && c . hide ( ) ; this . setState ( ) ; b . hoverSeries = null } , animate : function ( a ) { var b = this , c = b . chart , d = c . renderer , e ; e = b . options . animation ; var f = c . clipBox , g = c . inverted , h ; if ( e && ! T ( e ) ) e = Y [ b . type ] . animation ; h = "_sharedClip" + e . duration + e . easing ; if ( a ) a = c [ h ] , e = c [ h + "m" ] , a || ( c [ h ] = a = d . clipRect ( r ( f , { width : 0 } ) ) , c [ h + "m" ] = e = d . clipRect ( - 99 , g ? - c . plotLeft : - c . plotTop , 99 , g ?
c . chartWidth : c . chartHeight ) ) , b . group . clip ( a ) , b . markerGroup . clip ( e ) , b . sharedClipKey = h ; else { if ( a = c [ h ] ) a . animate ( { width : c . plotSizeX } , e ) , c [ h + "m" ] . animate ( { width : c . plotSizeX + 99 } , e ) ; b . animate = null ; b . animationTimeout = setTimeout ( function ( ) { b . afterAnimate ( ) } , e . duration ) } } , afterAnimate : function ( ) { var a = this . chart , b = this . sharedClipKey , c = this . group ; c && this . options . clip !== ! 1 && ( c . clip ( a . clipRect ) , this . markerGroup . clip ( ) ) ; setTimeout ( function ( ) { b && a [ b ] && ( a [ b ] = a [ b ] . destroy ( ) , a [ b + "m" ] = a [ b + "m" ] . destroy ( ) ) } , 100 ) } , drawPoints : function ( ) { var a ,
b = this . points , c = this . chart , d , e , f , g , h , i , j , k , l = this . options . marker , m , p = this . markerGroup ; if ( l . enabled || this . _hasPointMarkers ) for ( f = b . length ; f -- ; ) if ( g = b [ f ] , d = P ( g . plotX ) , e = g . plotY , k = g . graphic , i = g . marker || { } , a = l . enabled && i . enabled === w || i . enabled , m = c . isInsidePlot ( t ( d ) , e , c . inverted ) , a && e !== w && ! isNaN ( e ) && g . y !== null ) if ( a = g . pointAttr [ g . selected ? "select" : "" ] , h = a . r , i = o ( i . symbol , this . symbol ) , j = i . indexOf ( "url" ) === 0 , k ) k . attr ( { visibility : m ? Z ? "inherit" : "visible" : "hidden" } ) . animate ( r ( { x : d - h , y : e - h } , k . symbolName ? { width : 2 *
h , height : 2 * h } : { } ) ) ; else { if ( m && ( h > 0 || j ) ) g . graphic = c . renderer . symbol ( i , d - h , e - h , 2 * h , 2 * h ) . attr ( a ) . add ( p ) } else if ( k ) g . graphic = k . destroy ( ) } , convertAttribs : function ( a , b , c , d ) { var e = this . pointAttrToOptions , f , g , h = { } , a = a || { } , b = b || { } , c = c || { } , d = d || { } ; for ( f in e ) g = e [ f ] , h [ f ] = o ( a [ g ] , b [ f ] , c [ f ] , d [ f ] ) ; return h } , getAttribs : function ( ) { var a = this , b = a . options , c = Y [ a . type ] . marker ? b . marker : b , d = c . states , e = d . hover , f , g = a . color , h = { stroke : g , fill : g } , i = a . points || [ ] , j = [ ] , k , l = a . pointAttrToOptions , m = b . negativeColor , p = c . lineColor , q ;
b . marker ? ( e . radius = e . radius || c . radius + 2 , e . lineWidth = e . lineWidth || c . lineWidth + 1 ) : e . color = e . color || ra ( e . color || g ) . brighten ( e . brightness ) . get ( ) ; j [ "" ] = a . convertAttribs ( c , h ) ; n ( [ "hover" , "select" ] , function ( b ) { j [ b ] = a . convertAttribs ( d [ b ] , j [ "" ] ) } ) ; a . pointAttr = j ; for ( g = i . length ; g -- ; ) { h = i [ g ] ; if ( ( c = h . options && h . options . marker || h . options ) && c . enabled === ! 1 ) c . radius = 0 ; if ( h . negative && m ) h . color = h . fillColor = m ; f = b . colorByPoint || h . color ; if ( h . options ) for ( q in l ) u ( c [ l [ q ] ] ) && ( f = ! 0 ) ; if ( f ) { c = c || { } ; k = [ ] ; d = c . states || { } ; f = d . hover =
d . hover || { } ; if ( ! b . marker ) f . color = ra ( f . color || h . color ) . brighten ( f . brightness || e . brightness ) . get ( ) ; k [ "" ] = a . convertAttribs ( r ( { color : h . color , fillColor : h . color , lineColor : p === null ? h . color : w } , c ) , j [ "" ] ) ; k . hover = a . convertAttribs ( d . hover , j . hover , k [ "" ] ) ; k . select = a . convertAttribs ( d . select , j . select , k [ "" ] ) } else k = j ; h . pointAttr = k } } , update : function ( a , b ) { var c = this . chart , d = this . type , e = W [ d ] . prototype , f , a = x ( this . userOptions , { animation : ! 1 , index : this . index , pointStart : this . xData [ 0 ] } , { data : this . options . data } , a ) ; this . remove ( ! 1 ) ;
for ( f in e ) e . hasOwnProperty ( f ) && ( this [ f ] = w ) ; r ( this , W [ a . type || d ] . prototype ) ; this . init ( c , a ) ; o ( b , ! 0 ) && c . redraw ( ! 1 ) } , destroy : function ( ) { var a = this , b = a . chart , c = /AppleWebKit\/533/ . test ( oa ) , d , e , f = a . data || [ ] , g , h , i ; z ( a , "destroy" ) ; aa ( a ) ; n ( [ "xAxis" , "yAxis" ] , function ( b ) { if ( i = a [ b ] ) ga ( i . series , a ) , i . isDirty = i . forceRedraw = ! 0 , i . stacks = { } } ) ; a . legendItem && a . chart . legend . destroyItem ( a ) ; for ( e = f . length ; e -- ; ) ( g = f [ e ] ) && g . destroy && g . destroy ( ) ; a . points = null ; clearTimeout ( a . animationTimeout ) ; n ( "area,graph,dataLabelsGroup,group,markerGroup,tracker,graphNeg,areaNeg,posClip,negClip" . split ( "," ) ,
function ( b ) { a [ b ] && ( d = c && b === "group" ? "hide" : "destroy" , a [ b ] [ d ] ( ) ) } ) ; if ( b . hoverSeries === a ) b . hoverSeries = null ; ga ( b . series , a ) ; for ( h in a ) delete a [ h ] } , drawDataLabels : function ( ) { var a = this , b = a . options . dataLabels , c = a . points , d , e , f , g ; if ( b . enabled || a . _hasPointLabels ) a . dlProcessOptions && a . dlProcessOptions ( b ) , g = a . plotGroup ( "dataLabelsGroup" , "data-labels" , a . visible ? "visible" : "hidden" , b . zIndex || 6 ) , e = b , n ( c , function ( c ) { var i , j = c . dataLabel , k , l , m = c . connector , p = ! 0 ; d = c . options && c . options . dataLabels ; i = o ( d && d . enabled , e . enabled ) ;
if ( j && ! i ) c . dataLabel = j . destroy ( ) ; else if ( i ) { b = x ( e , d ) ; i = b . rotation ; k = c . getLabelConfig ( ) ; f = b . format ? Ca ( b . format , k ) : b . formatter . call ( k , b ) ; b . style . color = o ( b . color , b . style . color , a . color , "black" ) ; if ( j ) if ( u ( f ) ) j . attr ( { text : f } ) , p = ! 1 ; else { if ( c . dataLabel = j = j . destroy ( ) , m ) c . connector = m . destroy ( ) } else if ( u ( f ) ) { j = { fill : b . backgroundColor , stroke : b . borderColor , "stroke-width" : b . borderWidth , r : b . borderRadius || 0 , rotation : i , padding : b . padding , zIndex : 1 } ; for ( l in j ) j [ l ] === w && delete j [ l ] ; j = c . dataLabel = a . chart . renderer [ i ? "text" :
"label" ] ( f , 0 , - 999 , null , null , null , b . useHTML ) . attr ( j ) . css ( b . style ) . add ( g ) . shadow ( b . shadow ) } j && a . alignDataLabel ( c , j , b , null , p ) } } ) } , alignDataLabel : function ( a , b , c , d , e ) { var f = this . chart , g = f . inverted , h = o ( a . plotX , - 999 ) , i = o ( a . plotY , - 999 ) , j = b . getBBox ( ) ; if ( a = this . visible && f . isInsidePlot ( a . plotX , a . plotY , g ) ) d = r ( { x : g ? f . plotWidth - i : h , y : t ( g ? f . plotHeight - h : i ) , width : 0 , height : 0 } , d ) , r ( c , { width : j . width , height : j . height } ) , c . rotation ? ( g = { align : c . align , x : d . x + c . x + d . width / 2 , y : d . y + c . y + d . height / 2 } , b [ e ? "attr" : "animate" ] ( g ) ) : ( b . align ( c ,
null , d ) , g = b . alignAttr , o ( c . overflow , "justify" ) === "justify" ? this . justifyDataLabel ( b , c , g , j , d , e ) : o ( c . crop , ! 0 ) && ( a = f . isInsidePlot ( g . x , g . y ) && f . isInsidePlot ( g . x + j . width , g . y + j . height ) ) ) ; a || b . attr ( { y : - 999 } ) } , justifyDataLabel : function ( a , b , c , d , e , f ) { var g = this . chart , h = b . align , i = b . verticalAlign , j , k ; j = c . x ; if ( j < 0 ) h === "right" ? b . align = "left" : b . x = - j , k = ! 0 ; j = c . x + d . width ; if ( j > g . plotWidth ) h === "left" ? b . align = "right" : b . x = g . plotWidth - j , k = ! 0 ; j = c . y ; if ( j < 0 ) i === "bottom" ? b . verticalAlign = "top" : b . y = - j , k = ! 0 ; j = c . y + d . height ; if ( j > g . plotHeight ) i ===
"top" ? b . verticalAlign = "bottom" : b . y = g . plotHeight - j , k = ! 0 ; if ( k ) a . placed = ! f , a . align ( b , null , e ) } , getSegmentPath : function ( a ) { var b = this , c = [ ] , d = b . options . step ; n ( a , function ( e , f ) { var g = e . plotX , h = e . plotY , i ; b . getPointSpline ? c . push . apply ( c , b . getPointSpline ( a , e , f ) ) : ( c . push ( f ? "L" : "M" ) , d && f && ( i = a [ f - 1 ] , d === "right" ? c . push ( i . plotX , h ) : d === "center" ? c . push ( ( i . plotX + g ) / 2 , i . plotY , ( i . plotX + g ) / 2 , h ) : c . push ( g , i . plotY ) ) , c . push ( e . plotX , e . plotY ) ) } ) ; return c } , getGraphPath : function ( ) { var a = this , b = [ ] , c , d = [ ] ; n ( a . segments , function ( e ) { c =
a . getSegmentPath ( e ) ; e . length > 1 ? b = b . concat ( c ) : d . push ( e [ 0 ] ) } ) ; a . singlePoints = d ; return a . graphPath = b } , drawGraph : function ( ) { var a = this , b = this . options , c = [ [ "graph" , b . lineColor || this . color ] ] , d = b . lineWidth , e = b . dashStyle , f = this . getGraphPath ( ) , g = b . negativeColor ; g && c . push ( [ "graphNeg" , g ] ) ; n ( c , function ( c , g ) { var j = c [ 0 ] , k = a [ j ] ; if ( k ) Wa ( k ) , k . animate ( { d : f } ) ; else if ( d && f . length ) k = { stroke : c [ 1 ] , "stroke-width" : d , zIndex : 1 } , e ? k . dashstyle = e : k [ "stroke-linecap" ] = k [ "stroke-linejoin" ] = "round" , a [ j ] = a . chart . renderer . path ( f ) . attr ( k ) . add ( a . group ) . shadow ( ! g &&
b . shadow ) } ) } , clipNeg : function ( ) { var a = this . options , b = this . chart , c = b . renderer , d = a . negativeColor || a . negativeFillColor , e , f = this . graph , g = this . area , h = this . posClip , i = this . negClip ; e = b . chartWidth ; var j = b . chartHeight , k = s ( e , j ) , l = this . yAxis ; if ( d && ( f || g ) ) { d = t ( l . toPixels ( a . threshold || 0 , ! 0 ) ) ; a = { x : 0 , y : 0 , width : k , height : d } ; k = { x : 0 , y : d , width : k , height : k } ; if ( b . inverted ) a . height = k . y = b . plotWidth - d , c . isVML && ( a = { x : b . plotWidth - d - b . plotLeft , y : 0 , width : e , height : j } , k = { x : d + b . plotLeft - e , y : 0 , width : b . plotLeft + d , height : e } ) ; l . reversed ?
( b = k , e = a ) : ( b = a , e = k ) ; h ? ( h . animate ( b ) , i . animate ( e ) ) : ( this . posClip = h = c . clipRect ( b ) , this . negClip = i = c . clipRect ( e ) , f && this . graphNeg && ( f . clip ( h ) , this . graphNeg . clip ( i ) ) , g && ( g . clip ( h ) , this . areaNeg . clip ( i ) ) ) } } , invertGroups : function ( ) { function a ( ) { var a = { width : b . yAxis . len , height : b . xAxis . len } ; n ( [ "group" , "markerGroup" ] , function ( c ) { b [ c ] && b [ c ] . attr ( a ) . invert ( ) } ) } var b = this , c = b . chart ; if ( b . xAxis ) J ( c , "resize" , a ) , J ( b , "destroy" , function ( ) { aa ( c , "resize" , a ) } ) , a ( ) , b . invertGroups = a } , plotGroup : function ( a , b , c , d , e ) { var f = this [ a ] ,
g = ! f ; g && ( this [ a ] = f = this . chart . renderer . g ( b ) . attr ( { visibility : c , zIndex : d || 0.1 } ) . add ( e ) ) ; f [ g ? "attr" : "animate" ] ( this . getPlotBox ( ) ) ; return f } , getPlotBox : function ( ) { return { translateX : this . xAxis ? this . xAxis . left : this . chart . plotLeft , translateY : this . yAxis ? this . yAxis . top : this . chart . plotTop , scaleX : 1 , scaleY : 1 } } , render : function ( ) { var a = this . chart , b , c = this . options , d = c . animation && ! ! this . animate && a . renderer . isSVG , e = this . visible ? "visible" : "hidden" , f = c . zIndex , g = this . hasRendered , h = a . seriesGroup ; b = this . plotGroup ( "group" ,
"series" , e , f , h ) ; this . markerGroup = this . plotGroup ( "markerGroup" , "markers" , e , f , h ) ; d && this . animate ( ! 0 ) ; this . getAttribs ( ) ; b . inverted = this . isCartesian ? a . inverted : ! 1 ; this . drawGraph && ( this . drawGraph ( ) , this . clipNeg ( ) ) ; this . drawDataLabels ( ) ; this . drawPoints ( ) ; this . options . enableMouseTracking !== ! 1 && this . drawTracker ( ) ; a . inverted && this . invertGroups ( ) ; c . clip !== ! 1 && ! this . sharedClipKey && ! g && b . clip ( a . clipRect ) ; d ? this . animate ( ) : g || this . afterAnimate ( ) ; this . isDirty = this . isDirtyData = ! 1 ; this . hasRendered = ! 0 } , redraw : function ( ) { var a =
this . chart , b = this . isDirtyData , c = this . group , d = this . xAxis , e = this . yAxis ; c && ( a . inverted && c . attr ( { width : a . plotWidth , height : a . plotHeight } ) , c . animate ( { translateX : o ( d && d . left , a . plotLeft ) , translateY : o ( e && e . top , a . plotTop ) } ) ) ; this . translate ( ) ; this . setTooltipPoints ( ! 0 ) ; this . render ( ) ; b && z ( this , "updatedData" ) } , setState : function ( a ) { var b = this . options , c = this . graph , d = this . graphNeg , e = b . states , b = b . lineWidth , a = a || "" ; if ( this . state !== a ) this . state = a , e [ a ] && e [ a ] . enabled === ! 1 || ( a && ( b = e [ a ] . lineWidth || b + 1 ) , c && ! c . dashstyle &&
( a = { "stroke-width" : b } , c . attr ( a ) , d && d . attr ( a ) ) ) } , setVisible : function ( a , b ) { var c = this , d = c . chart , e = c . legendItem , f , g = d . options . chart . ignoreHiddenSeries , h = c . visible ; f = ( c . visible = a = c . userOptions . visible = a === w ? ! h : a ) ? "show" : "hide" ; n ( [ "group" , "dataLabelsGroup" , "markerGroup" , "tracker" ] , function ( a ) { if ( c [ a ] ) c [ a ] [ f ] ( ) } ) ; if ( d . hoverSeries === c ) c . onMouseOut ( ) ; e && d . legend . colorizeItem ( c , a ) ; c . isDirty = ! 0 ; c . options . stacking && n ( d . series , function ( a ) { if ( a . options . stacking && a . visible ) a . isDirty = ! 0 } ) ; n ( c . linkedSeries , function ( b ) { b . setVisible ( a ,
! 1 ) } ) ; if ( g ) d . isDirtyBox = ! 0 ; b !== ! 1 && d . redraw ( ) ; z ( c , f ) } , show : function ( ) { this . setVisible ( ! 0 ) } , hide : function ( ) { this . setVisible ( ! 1 ) } , select : function ( a ) { this . selected = a = a === w ? ! this . selected : a ; if ( this . checkbox ) this . checkbox . checked = a ; z ( this , a ? "select" : "unselect" ) } , drawTracker : function ( ) { var a = this , b = a . options , c = b . trackByArea , d = [ ] . concat ( c ? a . areaPath : a . graphPath ) , e = d . length , f = a . chart , g = f . pointer , h = f . renderer , i = f . options . tooltip . snap , j = a . tracker , k = b . cursor , l = k && { cursor : k } , k = a . singlePoints , m , p = function ( ) { if ( f . hoverSeries !==
a ) a . onMouseOver ( ) } ; if ( e && ! c ) for ( m = e + 1 ; m -- ; ) d [ m ] === "M" && d . splice ( m + 1 , 0 , d [ m + 1 ] - i , d [ m + 2 ] , "L" ) , ( m && d [ m ] === "M" || m === e ) && d . splice ( m , 0 , "L" , d [ m - 2 ] + i , d [ m - 1 ] ) ; for ( m = 0 ; m < k . length ; m ++ ) e = k [ m ] , d . push ( "M" , e . plotX - i , e . plotY , "L" , e . plotX + i , e . plotY ) ; j ? j . attr ( { d : d } ) : ( a . tracker = h . path ( d ) . attr ( { "stroke-linejoin" : "round" , visibility : a . visible ? "visible" : "hidden" , stroke : Qb , fill : c ? Qb : S , "stroke-width" : b . lineWidth + ( c ? 0 : 2 * i ) , zIndex : 2 } ) . add ( a . group ) , n ( [ a . tracker , a . markerGroup ] , function ( a ) { a . addClass ( "highcharts-tracker" ) . on ( "mouseover" ,
p ) . on ( "mouseout" , function ( a ) { g . onTrackerMouseOut ( a ) } ) . css ( l ) ; if ( ib ) a . on ( "touchstart" , p ) } ) ) } } ; G = ha ( Q ) ; W . line = G ; Y . area = x ( X , { threshold : 0 } ) ; G = ha ( Q , { type : "area" , getSegments : function ( ) { var a = [ ] , b = [ ] , c = [ ] , d = this . xAxis , e = this . yAxis , f = e . stacks [ this . stackKey ] , g = { } , h , i , j = this . points , k = this . options . connectNulls , l , m , p ; if ( this . options . stacking && ! this . cropped ) { for ( m = 0 ; m < j . length ; m ++ ) g [ j [ m ] . x ] = j [ m ] ; for ( p in f ) c . push ( + p ) ; c . sort ( function ( a , b ) { return a - b } ) ; n ( c , function ( a ) { if ( ! k || g [ a ] && g [ a ] . y !== null ) g [ a ] ? b . push ( g [ a ] ) :
( h = d . translate ( a ) , l = f [ a ] . percent ? f [ a ] . total ? f [ a ] . cum * 100 / f [ a ] . total : 0 : f [ a ] . cum , i = e . toPixels ( l , ! 0 ) , b . push ( { y : null , plotX : h , clientX : h , plotY : i , yBottom : i , onMouseOver : pa } ) ) } ) ; b . length && a . push ( b ) } else Q . prototype . getSegments . call ( this ) , a = this . segments ; this . segments = a } , getSegmentPath : function ( a ) { var b = Q . prototype . getSegmentPath . call ( this , a ) , c = [ ] . concat ( b ) , d , e = this . options ; d = b . length ; var f = this . yAxis . getThreshold ( e . threshold ) , g ; d === 3 && c . push ( "L" , b [ 1 ] , b [ 2 ] ) ; if ( e . stacking && ! this . closedStacks ) for ( d = a . length -
1 ; d >= 0 ; d -- ) g = o ( a [ d ] . yBottom , f ) , d < a . length - 1 && e . step && c . push ( a [ d + 1 ] . plotX , g ) , c . push ( a [ d ] . plotX , g ) ; else this . closeSegment ( c , a , f ) ; this . areaPath = this . areaPath . concat ( c ) ; return b } , closeSegment : function ( a , b , c ) { a . push ( "L" , b [ b . length - 1 ] . plotX , c , "L" , b [ 0 ] . plotX , c ) } , drawGraph : function ( ) { this . areaPath = [ ] ; Q . prototype . drawGraph . apply ( this ) ; var a = this , b = this . areaPath , c = this . options , d = c . negativeColor , e = c . negativeFillColor , f = [ [ "area" , this . color , c . fillColor ] ] ; ( d || e ) && f . push ( [ "areaNeg" , d , e ] ) ; n ( f , function ( d ) { var e = d [ 0 ] ,
f = a [ e ] ; f ? f . animate ( { d : b } ) : a [ e ] = a . chart . renderer . path ( b ) . attr ( { fill : o ( d [ 2 ] , ra ( d [ 1 ] ) . setOpacity ( o ( c . fillOpacity , 0.75 ) ) . get ( ) ) , zIndex : 0 } ) . add ( a . group ) } ) } , drawLegendSymbol : function ( a , b ) { b . legendSymbol = this . chart . renderer . rect ( 0 , a . baseline - 11 , a . options . symbolWidth , 12 , 2 ) . attr ( { zIndex : 3 } ) . add ( b . legendGroup ) } } ) ; W . area = G ; Y . spline = x ( X ) ; F = ha ( Q , { type : "spline" , getPointSpline : function ( a , b , c ) { var d = b . plotX , e = b . plotY , f = a [ c - 1 ] , g = a [ c + 1 ] , h , i , j , k ; if ( f && g ) { a = f . plotY ; j = g . plotX ; var g = g . plotY , l ; h = ( 1.5 * d + f . plotX ) / 2.5 ; i = ( 1.5 *
e + a ) / 2.5 ; j = ( 1.5 * d + j ) / 2.5 ; k = ( 1.5 * e + g ) / 2.5 ; l = ( k - i ) * ( j - d ) / ( j - h ) + e - k ; i += l ; k += l ; i > a && i > e ? ( i = s ( a , e ) , k = 2 * e - i ) : i < a && i < e && ( i = I ( a , e ) , k = 2 * e - i ) ; k > g && k > e ? ( k = s ( g , e ) , i = 2 * e - k ) : k < g && k < e && ( k = I ( g , e ) , i = 2 * e - k ) ; b . rightContX = j ; b . rightContY = k } c ? ( b = [ "C" , f . rightContX || f . plotX , f . rightContY || f . plotY , h || d , i || e , d , e ] , f . rightContX = f . rightContY = null ) : b = [ "M" , d , e ] ; return b } } ) ; W . spline = F ; Y . areaspline = x ( Y . area ) ; ma = G . prototype ; F = ha ( F , { type : "areaspline" , closedStacks : ! 0 , getSegmentPath : ma . getSegmentPath , closeSegment : ma . closeSegment , drawGraph : ma . drawGraph ,
drawLegendSymbol : ma . drawLegendSymbol } ) ; W . areaspline = F ; Y . column = x ( X , { borderColor : "#FFFFFF" , borderWidth : 1 , borderRadius : 0 , groupPadding : 0.2 , marker : null , pointPadding : 0.1 , minPointLength : 0 , cropThreshold : 50 , pointRange : null , states : { hover : { brightness : 0.1 , shadow : ! 1 } , select : { color : "#C0C0C0" , borderColor : "#000000" , shadow : ! 1 } } , dataLabels : { align : null , verticalAlign : null , y : null } , stickyTracking : ! 1 , threshold : 0 } ) ; F = ha ( Q , { type : "column" , pointAttrToOptions : { stroke : "borderColor" , "stroke-width" : "borderWidth" , fill : "color" ,
r : "borderRadius" } , cropShoulder : 0 , trackerGroups : [ "group" , "dataLabelsGroup" ] , negStacks : ! 0 , init : function ( ) { Q . prototype . init . apply ( this , arguments ) ; var a = this , b = a . chart ; b . hasRendered && n ( b . series , function ( b ) { if ( b . type === a . type ) b . isDirty = ! 0 } ) } , getColumnMetrics : function ( ) { var a = this , b = a . options , c = a . xAxis , d = a . yAxis , e = c . reversed , f , g = { } , h , i = 0 ; b . grouping === ! 1 ? i = 1 : n ( a . chart . series , function ( b ) { var c = b . options , e = b . yAxis ; if ( b . type === a . type && b . visible && d . len === e . len && d . pos === e . pos ) c . stacking ? ( f = b . stackKey , g [ f ] ===
w && ( g [ f ] = i ++ ) , h = g [ f ] ) : c . grouping !== ! 1 && ( h = i ++ ) , b . columnIndex = h } ) ; var c = I ( N ( c . transA ) * ( c . ordinalSlope || b . pointRange || c . closestPointRange || 1 ) , c . len ) , j = c * b . groupPadding , k = ( c - 2 * j ) / i , l = b . pointWidth , b = u ( l ) ? ( k - l ) / 2 : k * b . pointPadding , l = o ( l , k - 2 * b ) ; return a . columnMetrics = { width : l , offset : b + ( j + ( ( e ? i - ( a . columnIndex || 0 ) : a . columnIndex ) || 0 ) * k - c / 2 ) * ( e ? - 1 : 1 ) } } , translate : function ( ) { var a = this . chart , b = this . options , c = b . borderWidth , d = this . yAxis , e = this . translatedThreshold = d . getThreshold ( b . threshold ) , f = o ( b . minPointLength ,
5 ) , b = this . getColumnMetrics ( ) , g = b . width , h = this . barW = xa ( s ( g , 1 + 2 * c ) ) , i = this . pointXOffset = b . offset , j = - ( c % 2 ? 0.5 : 0 ) , k = c % 2 ? 0.5 : 1 ; a . renderer . isVML && a . inverted && ( k += 1 ) ; Q . prototype . translate . apply ( this ) ; n ( this . points , function ( a ) { var b = o ( a . yBottom , e ) , c = I ( s ( - 999 - b , a . plotY ) , d . len + 999 + b ) , n = a . plotX + i , u = h , r = I ( c , b ) , w , c = s ( c , b ) - r ; N ( c ) < f && f && ( c = f , r = t ( N ( r - e ) > f ? b - f : e - ( d . translate ( a . y , 0 , 1 , 0 , 1 ) <= e ? f : 0 ) ) ) ; a . barX = n ; a . pointWidth = g ; b = N ( n ) < 0.5 ; u = t ( n + u ) + j ; n = t ( n ) + j ; u -= n ; w = N ( r ) < 0.5 ; c = t ( r + c ) + k ; r = t ( r ) + k ; c -= r ; b && ( n += 1 , u -= 1 ) ; w && ( r -=
1 , c += 1 ) ; a . shapeType = "rect" ; a . shapeArgs = { x : n , y : r , width : u , height : c } } ) } , getSymbol : pa , drawLegendSymbol : G . prototype . drawLegendSymbol , drawGraph : pa , drawPoints : function ( ) { var a = this , b = a . options , c = a . chart . renderer , d ; n ( a . points , function ( e ) { var f = e . plotY , g = e . graphic ; if ( f !== w && ! isNaN ( f ) && e . y !== null ) d = e . shapeArgs , g ? ( Wa ( g ) , g . animate ( x ( d ) ) ) : e . graphic = c [ e . shapeType ] ( d ) . attr ( e . pointAttr [ e . selected ? "select" : "" ] ) . add ( a . group ) . shadow ( b . shadow , null , b . stacking && ! b . borderRadius ) ; else if ( g ) e . graphic = g . destroy ( ) } ) } , drawTracker : function ( ) { var a =
this , b = a . chart , c = b . pointer , d = a . options . cursor , e = d && { cursor : d } , f = function ( c ) { var d = c . target , e ; if ( b . hoverSeries !== a ) a . onMouseOver ( ) ; for ( ; d && ! e ; ) e = d . point , d = d . parentNode ; if ( e !== w && e !== b . hoverPoint ) e . onMouseOver ( c ) } ; n ( a . points , function ( a ) { if ( a . graphic ) a . graphic . element . point = a ; if ( a . dataLabel ) a . dataLabel . element . point = a } ) ; if ( ! a . _hasTracking ) n ( a . trackerGroups , function ( b ) { if ( a [ b ] && ( a [ b ] . addClass ( "highcharts-tracker" ) . on ( "mouseover" , f ) . on ( "mouseout" , function ( a ) { c . onTrackerMouseOut ( a ) } ) . css ( e ) , ib ) ) a [ b ] . on ( "touchstart" ,
f ) } ) , a . _hasTracking = ! 0 } , alignDataLabel : function ( a , b , c , d , e ) { var f = this . chart , g = f . inverted , h = a . dlBox || a . shapeArgs , i = a . below || a . plotY > o ( this . translatedThreshold , f . plotSizeY ) , j = o ( c . inside , ! ! this . options . stacking ) ; if ( h && ( d = x ( h ) , g && ( d = { x : f . plotWidth - d . y - d . height , y : f . plotHeight - d . x - d . width , width : d . height , height : d . width } ) , ! j ) ) g ? ( d . x += i ? 0 : d . width , d . width = 0 ) : ( d . y += i ? d . height : 0 , d . height = 0 ) ; c . align = o ( c . align , ! g || j ? "center" : i ? "right" : "left" ) ; c . verticalAlign = o ( c . verticalAlign , g || j ? "middle" : i ? "top" : "bottom" ) ; Q . prototype . alignDataLabel . call ( this ,
a , b , c , d , e ) } , animate : function ( a ) { var b = this . yAxis , c = this . options , d = this . chart . inverted , e = { } ; if ( Z ) a ? ( e . scaleY = 0.001 , a = I ( b . pos + b . len , s ( b . pos , b . toPixels ( c . threshold ) ) ) , d ? e . translateX = a - b . len : e . translateY = a , this . group . attr ( e ) ) : ( e . scaleY = 1 , e [ d ? "translateX" : "translateY" ] = b . pos , this . group . animate ( e , this . options . animation ) , this . animate = null ) } , remove : function ( ) { var a = this , b = a . chart ; b . hasRendered && n ( b . series , function ( b ) { if ( b . type === a . type ) b . isDirty = ! 0 } ) ; Q . prototype . remove . apply ( a , arguments ) } } ) ; W . column = F ; Y . bar =
x ( Y . column ) ; ma = ha ( F , { type : "bar" , inverted : ! 0 } ) ; W . bar = ma ; Y . scatter = x ( X , { lineWidth : 0 , tooltip : { headerFormat : '<span style="font-size: 10px; color:{series.color}">{series.name}</span><br/>' , pointFormat : "x: <b>{point.x}</b><br/>y: <b>{point.y}</b><br/>" , followPointer : ! 0 } , stickyTracking : ! 1 } ) ; ma = ha ( Q , { type : "scatter" , sorted : ! 1 , requireSorting : ! 1 , noSharedTooltip : ! 0 , trackerGroups : [ "markerGroup" ] , drawTracker : F . prototype . drawTracker , setTooltipPoints : pa } ) ; W . scatter = ma ; Y . pie = x ( X , { borderColor : "#FFFFFF" , borderWidth : 1 ,
center : [ null , null ] , clip : ! 1 , colorByPoint : ! 0 , dataLabels : { distance : 30 , enabled : ! 0 , formatter : function ( ) { return this . point . name } } , ignoreHiddenPoint : ! 0 , legendType : "point" , marker : null , size : null , showInLegend : ! 1 , slicedOffset : 10 , states : { hover : { brightness : 0.1 , shadow : ! 1 } } , stickyTracking : ! 1 , tooltip : { followPointer : ! 0 } } ) ; X = { type : "pie" , isCartesian : ! 1 , pointClass : ha ( Pa , { init : function ( ) { Pa . prototype . init . apply ( this , arguments ) ; var a = this , b ; if ( a . y < 0 ) a . y = null ; r ( a , { visible : a . visible !== ! 1 , name : o ( a . name , "Slice" ) } ) ; b = function ( b ) { a . slice ( b . type ===
"select" ) } ; J ( a , "select" , b ) ; J ( a , "unselect" , b ) ; return a } , setVisible : function ( a ) { var b = this , c = b . series , d = c . chart , e ; b . visible = b . options . visible = a = a === w ? ! b . visible : a ; c . options . data [ qa ( b , c . data ) ] = b . options ; e = a ? "show" : "hide" ; n ( [ "graphic" , "dataLabel" , "connector" , "shadowGroup" ] , function ( a ) { if ( b [ a ] ) b [ a ] [ e ] ( ) } ) ; b . legendItem && d . legend . colorizeItem ( b , a ) ; if ( ! c . isDirty && c . options . ignoreHiddenPoint ) c . isDirty = ! 0 , d . redraw ( ) } , slice : function ( a , b , c ) { var d = this . series ; La ( c , d . chart ) ; o ( b , ! 0 ) ; this . sliced = this . options . sliced =
a = u ( a ) ? a : ! this . sliced ; d . options . data [ qa ( this , d . data ) ] = this . options ; a = a ? this . slicedTranslation : { translateX : 0 , translateY : 0 } ; this . graphic . animate ( a ) ; this . shadowGroup && this . shadowGroup . animate ( a ) } } ) , requireSorting : ! 1 , noSharedTooltip : ! 0 , trackerGroups : [ "group" , "dataLabelsGroup" ] , pointAttrToOptions : { stroke : "borderColor" , "stroke-width" : "borderWidth" , fill : "color" } , getColor : pa , animate : function ( a ) { var b = this , c = b . points , d = b . startAngleRad ; if ( ! a ) n ( c , function ( a ) { var c = a . graphic , a = a . shapeArgs ; c && ( c . attr ( { r : b . center [ 3 ] /
2 , start : d , end : d } ) , c . animate ( { r : a . r , start : a . start , end : a . end } , b . options . animation ) ) } ) , b . animate = null } , setData : function ( a , b ) { Q . prototype . setData . call ( this , a , ! 1 ) ; this . processData ( ) ; this . generatePoints ( ) ; o ( b , ! 0 ) && this . chart . redraw ( ) } , generatePoints : function ( ) { var a , b = 0 , c , d , e , f = this . options . ignoreHiddenPoint ; Q . prototype . generatePoints . call ( this ) ; c = this . points ; d = c . length ; for ( a = 0 ; a < d ; a ++ ) e = c [ a ] , b += f && ! e . visible ? 0 : e . y ; this . total = b ; for ( a = 0 ; a < d ; a ++ ) e = c [ a ] , e . percentage = b > 0 ? e . y / b * 100 : 0 , e . total = b } , getCenter : function ( ) { var a =
this . options , b = this . chart , c = 2 * ( a . slicedOffset || 0 ) , d , e = b . plotWidth - 2 * c , f = b . plotHeight - 2 * c , b = a . center , a = [ o ( b [ 0 ] , "50%" ) , o ( b [ 1 ] , "50%" ) , a . size || "100%" , a . innerSize || 0 ] , g = I ( e , f ) , h ; return Na ( a , function ( a , b ) { h = /%$/ . test ( a ) ; d = b < 2 || b === 2 && h ; return ( h ? [ e , f , g , g ] [ b ] * C ( a ) / 100 : a ) + ( d ? c : 0 ) } ) } , translate : function ( a ) { this . generatePoints ( ) ; var b = 0 , c = this . options , d = c . slicedOffset , e = d + c . borderWidth , f , g , h , i = c . startAngle || 0 , j = this . startAngleRad = ya / 180 * ( i - 90 ) , i = ( this . endAngleRad = ya / 180 * ( ( c . endAngle || i + 360 ) - 90 ) ) - j , k = this . points ,
l = c . dataLabels . distance , c = c . ignoreHiddenPoint , m , n = k . length , o ; if ( ! a ) this . center = a = this . getCenter ( ) ; this . getX = function ( b , c ) { h = R . asin ( ( b - a [ 1 ] ) / ( a [ 2 ] / 2 + l ) ) ; return a [ 0 ] + ( c ? - 1 : 1 ) * V ( h ) * ( a [ 2 ] / 2 + l ) } ; for ( m = 0 ; m < n ; m ++ ) { o = k [ m ] ; f = j + b * i ; if ( ! c || o . visible ) b += o . percentage / 100 ; g = j + b * i ; o . shapeType = "arc" ; o . shapeArgs = { x : a [ 0 ] , y : a [ 1 ] , r : a [ 2 ] / 2 , innerR : a [ 3 ] / 2 , start : t ( f * 1E3 ) / 1E3 , end : t ( g * 1E3 ) / 1E3 } ; h = ( g + f ) / 2 ; h > 0.75 * i && ( h -= 2 * ya ) ; o . slicedTranslation = { translateX : t ( V ( h ) * d ) , translateY : t ( ca ( h ) * d ) } ; f = V ( h ) * a [ 2 ] / 2 ; g = ca ( h ) * a [ 2 ] / 2 ; o . tooltipPos =
[ a [ 0 ] + f * 0.7 , a [ 1 ] + g * 0.7 ] ; o . half = h < - ya / 2 || h > ya / 2 ? 1 : 0 ; o . angle = h ; e = I ( e , l / 2 ) ; o . labelPos = [ a [ 0 ] + f + V ( h ) * l , a [ 1 ] + g + ca ( h ) * l , a [ 0 ] + f + V ( h ) * e , a [ 1 ] + g + ca ( h ) * e , a [ 0 ] + f , a [ 1 ] + g , l < 0 ? "center" : o . half ? "right" : "left" , h ] } } , setTooltipPoints : pa , drawGraph : null , drawPoints : function ( ) { var a = this , b = a . chart . renderer , c , d , e = a . options . shadow , f , g ; if ( e && ! a . shadowGroup ) a . shadowGroup = b . g ( "shadow" ) . add ( a . group ) ; n ( a . points , function ( h ) { d = h . graphic ; g = h . shapeArgs ; f = h . shadowGroup ; if ( e && ! f ) f = h . shadowGroup = b . g ( "shadow" ) . add ( a . shadowGroup ) ; c = h . sliced ?
h . slicedTranslation : { translateX : 0 , translateY : 0 } ; f && f . attr ( c ) ; d ? d . animate ( r ( g , c ) ) : h . graphic = d = b . arc ( g ) . setRadialReference ( a . center ) . attr ( h . pointAttr [ h . selected ? "select" : "" ] ) . attr ( { "stroke-linejoin" : "round" } ) . attr ( c ) . add ( a . group ) . shadow ( e , f ) ; h . visible === ! 1 && h . setVisible ( ! 1 ) } ) } , sortByAngle : function ( a , b ) { a . sort ( function ( a , d ) { return a . angle !== void 0 && ( d . angle - a . angle ) * b } ) } , drawDataLabels : function ( ) { var a = this , b = a . data , c , d = a . chart , e = a . options . dataLabels , f = o ( e . connectorPadding , 10 ) , g = o ( e . connectorWidth , 1 ) ,
h = d . plotWidth , d = d . plotHeight , i , j , k = o ( e . softConnector , ! 0 ) , l = e . distance , m = a . center , p = m [ 2 ] / 2 , q = m [ 1 ] , u = l > 0 , r , w , v , x , C = [ [ ] , [ ] ] , y , z , E , H , B , D = [ 0 , 0 , 0 , 0 ] , I = function ( a , b ) { return b . y - a . y } ; if ( a . visible && ( e . enabled || a . _hasPointLabels ) ) { Q . prototype . drawDataLabels . apply ( a ) ; n ( b , function ( a ) { a . dataLabel && C [ a . half ] . push ( a ) } ) ; for ( H = 0 ; ! x && b [ H ] ; ) x = b [ H ] && b [ H ] . dataLabel && ( b [ H ] . dataLabel . getBBox ( ) . height || 21 ) , H ++ ; for ( H = 2 ; H -- ; ) { var b = [ ] , K = [ ] , G = C [ H ] , J = G . length , F ; a . sortByAngle ( G , H - 0.5 ) ; if ( l > 0 ) { for ( B = q - p - l ; B <= q + p + l ; B += x ) b . push ( B ) ;
w = b . length ; if ( J > w ) { c = [ ] . concat ( G ) ; c . sort ( I ) ; for ( B = J ; B -- ; ) c [ B ] . rank = B ; for ( B = J ; B -- ; ) G [ B ] . rank >= w && G . splice ( B , 1 ) ; J = G . length } for ( B = 0 ; B < J ; B ++ ) { c = G [ B ] ; v = c . labelPos ; c = 9999 ; var O , M ; for ( M = 0 ; M < w ; M ++ ) O = N ( b [ M ] - v [ 1 ] ) , O < c && ( c = O , F = M ) ; if ( F < B && b [ B ] !== null ) F = B ; else for ( w < J - B + F && b [ B ] !== null && ( F = w - J + B ) ; b [ F ] === null ; ) F ++ ; K . push ( { i : F , y : b [ F ] } ) ; b [ F ] = null } K . sort ( I ) } for ( B = 0 ; B < J ; B ++ ) { c = G [ B ] ; v = c . labelPos ; r = c . dataLabel ; E = c . visible === ! 1 ? "hidden" : "visible" ; c = v [ 1 ] ; if ( l > 0 ) { if ( w = K . pop ( ) , F = w . i , z = w . y , c > z && b [ F + 1 ] !== null || c < z && b [ F - 1 ] !==
null ) z = c } else z = c ; y = e . justify ? m [ 0 ] + ( H ? - 1 : 1 ) * ( p + l ) : a . getX ( F === 0 || F === b . length - 1 ? c : z , H ) ; r . _attr = { visibility : E , align : v [ 6 ] } ; r . _pos = { x : y + e . x + ( { left : f , right : - f } [ v [ 6 ] ] || 0 ) , y : z + e . y - 10 } ; r . connX = y ; r . connY = z ; if ( this . options . size === null ) w = r . width , y - w < f ? D [ 3 ] = s ( t ( w - y + f ) , D [ 3 ] ) : y + w > h - f && ( D [ 1 ] = s ( t ( y + w - h + f ) , D [ 1 ] ) ) , z - x / 2 < 0 ? D [ 0 ] = s ( t ( - z + x / 2 ) , D [ 0 ] ) : z + x / 2 > d && ( D [ 2 ] = s ( t ( z + x / 2 - d ) , D [ 2 ] ) ) } } if ( va ( D ) === 0 || this . verifyDataLabelOverflow ( D ) ) this . placeDataLabels ( ) , u && g && n ( this . points , function ( b ) { i = b . connector ; v = b . labelPos ; if ( ( r = b . dataLabel ) &&
r . _pos ) E = r . _attr . visibility , y = r . connX , z = r . connY , j = k ? [ "M" , y + ( v [ 6 ] === "left" ? 5 : - 5 ) , z , "C" , y , z , 2 * v [ 2 ] - v [ 4 ] , 2 * v [ 3 ] - v [ 5 ] , v [ 2 ] , v [ 3 ] , "L" , v [ 4 ] , v [ 5 ] ] : [ "M" , y + ( v [ 6 ] === "left" ? 5 : - 5 ) , z , "L" , v [ 2 ] , v [ 3 ] , "L" , v [ 4 ] , v [ 5 ] ] , i ? ( i . animate ( { d : j } ) , i . attr ( "visibility" , E ) ) : b . connector = i = a . chart . renderer . path ( j ) . attr ( { "stroke-width" : g , stroke : e . connectorColor || b . color || "#606060" , visibility : E } ) . add ( a . group ) ; else if ( i ) b . connector = i . destroy ( ) } ) } } , verifyDataLabelOverflow : function ( a ) { var b = this . center , c = this . options , d = c . center , e = c = c . minSize ||
80 , f ; d [ 0 ] !== null ? e = s ( b [ 2 ] - s ( a [ 1 ] , a [ 3 ] ) , c ) : ( e = s ( b [ 2 ] - a [ 1 ] - a [ 3 ] , c ) , b [ 0 ] += ( a [ 3 ] - a [ 1 ] ) / 2 ) ; d [ 1 ] !== null ? e = s ( I ( e , b [ 2 ] - s ( a [ 0 ] , a [ 2 ] ) ) , c ) : ( e = s ( I ( e , b [ 2 ] - a [ 0 ] - a [ 2 ] ) , c ) , b [ 1 ] += ( a [ 0 ] - a [ 2 ] ) / 2 ) ; e < b [ 2 ] ? ( b [ 2 ] = e , this . translate ( b ) , n ( this . points , function ( a ) { if ( a . dataLabel ) a . dataLabel . _pos = null } ) , this . drawDataLabels ( ) ) : f = ! 0 ; return f } , placeDataLabels : function ( ) { n ( this . points , function ( a ) { var a = a . dataLabel , b ; if ( a ) ( b = a . _pos ) ? ( a . attr ( a . _attr ) , a [ a . moved ? "animate" : "attr" ] ( b ) , a . moved = ! 0 ) : a && a . attr ( { y : - 999 } ) } ) } , alignDataLabel : pa ,
drawTracker : F . prototype . drawTracker , drawLegendSymbol : G . prototype . drawLegendSymbol , getSymbol : pa } ; X = ha ( Q , X ) ; W . pie = X ; r ( Highcharts , { Axis : db , Chart : yb , Color : ra , Legend : eb , Pointer : xb , Point : Pa , Tick : Ma , Tooltip : wb , Renderer : Va , Series : Q , SVGElement : wa , SVGRenderer : Ha , arrayMin : Ja , arrayMax : va , charts : Ga , dateFormat : Xa , format : Ca , pathAnim : Ab , getOptions : function ( ) { return M } , hasBidiBug : Ub , isTouchDevice : Ob , numberFormat : Aa , seriesTypes : W , setOptions : function ( a ) { M = x ( M , a ) ; Lb ( ) ; return M } , addEvent : J , removeEvent : aa , createElement : U ,
discardElement : Ta , css : K , each : n , extend : r , map : Na , merge : x , pick : o , splat : ja , extendClass : ha , pInt : C , wrap : mb , svg : Z , canvas : $ , vml : ! Z && ! $ , product : "Highcharts" , version : "3.0.6" } ) } ) ( ) ;