2013-06-26 22:42:24 -04:00
/ * !
2015-06-23 10:23:54 -04:00
* Paper . js v0 . 9.23 - The Swiss Army Knife of Vector Graphics Scripting .
2013-06-26 22:42:24 -04:00
* http : //paperjs.org/
*
2014-03-13 12:49:37 -04:00
* Copyright ( c ) 2011 - 2014 , Juerg Lehni & Jonathan Puckey
* http : //scratchdisk.com/ & http://jonathanpuckey.com/
2013-06-26 22:42:24 -04:00
*
* Distributed under the MIT license . See LICENSE file for details .
*
* All rights reserved .
*
2015-06-23 10:23:54 -04:00
* Date : Tue Jun 23 16 : 22 : 48 2015 + 0200
2013-06-26 22:42:24 -04:00
*
* * *
*
2014-03-13 12:49:37 -04:00
* Straps . js - Class inheritance library with support for bean - style accessors
2013-06-26 22:42:24 -04:00
*
* Copyright ( c ) 2006 - 2013 Juerg Lehni
2014-03-13 12:49:37 -04:00
* http : //scratchdisk.com/
2013-06-26 22:42:24 -04:00
*
* Distributed under the MIT license .
*
* * *
*
2014-03-13 12:49:37 -04:00
* Acorn . js
2013-06-26 22:42:24 -04:00
* http : //marijnhaverbeke.nl/acorn/
*
* Acorn is a tiny , fast JavaScript parser written in JavaScript ,
* created by Marijn Haverbeke and released under an MIT license .
*
* /
2015-06-23 10:23:54 -04:00
var paper = new function ( t ) { var e = new function ( ) { function n ( t , n , i , r , a ) { function o ( s , o ) { o = o || ( o = u ( n , s ) ) && ( o . get ? o : o . value ) , "string" == typeof o && "#" === o [ 0 ] && ( o = t [ o . substring ( 1 ) ] || o ) ; var l , d = "function" == typeof o , f = o , _ = a || d ? o && o . get ? s in t : t [ s ] : null ; a && _ || ( d && _ && ( o . base = _ ) , d && r !== ! 1 && ( l = s . match ( /^([gs]et|is)(([A-Z])(.*))$/ ) ) && ( h [ l [ 3 ] . toLowerCase ( ) + l [ 4 ] ] = l [ 2 ] ) , f && ! d && f . get && "function" == typeof f . get && e . isPlainObject ( f ) || ( f = { value : f , writable : ! 0 } ) , ( u ( t , s ) || { configurable : ! 0 } ) . configurable && ( f . configurable = ! 0 , f . enumerable = i ) , c ( t , s , f ) ) } var h = { } ; if ( n ) { for ( var l in n ) n . hasOwnProperty ( l ) && ! s . test ( l ) && o ( l ) ; for ( var l in h ) { var d = h [ l ] , f = t [ "set" + d ] , _ = t [ "get" + d ] || f && t [ "is" + d ] ; ! _ || r !== ! 0 && 0 !== _ . length || o ( l , { get : _ , set : f } ) } } return t } function i ( t , e , n ) { return t && ( "length" in t && ! t . getLength && "number" == typeof t . length ? a : o ) . call ( t , e , n = n || t ) , n } function r ( t , e , n ) { for ( var i in e ) ! e . hasOwnProperty ( i ) || n && n [ i ] || ( t [ i ] = e [ i ] ) ; return t } var s = /^(statics|enumerable|beans|preserve)$/ , a = [ ] . forEach || function ( t , e ) { for ( var n = 0 , i = this . length ; i > n ; n ++ ) t . call ( e , this [ n ] , n , this ) } , o = function ( t , e ) { for ( var n in this ) this . hasOwnProperty ( n ) && t . call ( e , this [ n ] , n , this ) } , h = Object . create || function ( t ) { return { _ _proto _ _ : t } } , u = Object . getOwnPropertyDescriptor || function ( t , e ) { var n = t . _ _lookupGetter _ _ && t . _ _lookupGetter _ _ ( e ) ; return n ? { get : n , set : t . _ _lookupSetter _ _ ( e ) , enumerable : ! 0 , configurable : ! 0 } : t . hasOwnProperty ( e ) ? { value : t [ e ] , enumerable : ! 0 , configurable : ! 0 , writable : ! 0 } : null } , l = Object . defineProperty || function ( t , e , n ) { return ( n . get || n . set ) && t . _ _defineGetter _ _ ? ( n . get && t . _ _defineGetter _ _ ( e , n . get ) , n . set && t . _ _defineSetter _ _ ( e , n . set ) ) : t [ e ] = n . value , t } , c = function ( t , e , n ) { return delete t [ e ] , l ( t , e , n ) } ; return n ( function ( ) { for ( var t = 0 , e = arguments . length ; e > t ; t ++ ) r ( this , arguments [ t ] ) } , { inject : function ( t ) { if ( t ) { var e = t . statics === ! 0 ? t : t . statics , i = t . beans , r = t . preserve ; e !== t && n ( this . prototype , t , t . enumerable , i , r ) , n ( this , e , ! 0 , i , r ) } for ( var s = 1 , a = arguments . length ; a > s ; s ++ ) this . inject ( arguments [ s ] ) ; return this } , extend : function ( ) { for ( var t , e , i = this , r = 0 , s = arguments . length ; s > r && ! ( t = arguments [ r ] . initialize ) ; r ++ ) ; return t = t || function ( ) { i . apply ( this , arguments ) } , e = t . prototype = h ( this . prototype ) , c ( e , "constructor" , { value : t , writable : ! 0 , configurable : ! 0 } ) , n ( t , this , ! 0 ) , arguments . length && this . inject . apply ( t , arguments ) , t . base = i , t } } , ! 0 ) . inject ( { inject : function ( ) { for ( var t = 0 , e = arguments . length ; e > t ; t ++ ) { var i = arguments [ t ] ; i && n ( this , i , i . enumerable , i . beans , i . preserve ) } return this } , extend : function ( ) { var t = h ( this ) ; return t . inject . apply ( t , arguments ) } , each : function ( t , e ) { return i ( this , t , e ) } , set : function ( t ) { return r ( this , t ) } , clone : function ( ) { return new this . constructor ( this ) } , statics : { each : i , create : h , define : c , describe : u , set : r , clone : function ( t ) { return r ( new t . constructor , t ) } , isPlainObject : function ( t ) { var n = null != t && t . constructor ; return n && ( n === Object || n === e || "Object" === n . name ) } , pick : function ( e , n ) { return e !== t ? e : n } } } ) } ; "undefined" != typeof module && ( module . exports = e ) , e . inject ( { toString : function ( ) { return null != this . _id ? ( this . _class || "Object" ) + ( this . _name ? " '" + this . _name + "'" : " @" + this . _id ) : "{ " + e . each ( this , function ( t , e ) { if ( ! /^_/ . test ( e ) ) { var n = typeof t ; this . push ( e + ": " + ( "number" === n ? a . instance . number ( t ) : "string" === n ? "'" + t + "'" : t ) ) } } , [ ] ) . join ( ", " ) + " }" } , getClassName : function ( ) { return this . _class || "" } , exportJSON : function ( t ) { return e . exportJSON ( this , t ) } , toJSON : function ( ) { return e . serialize ( this ) } , _set : function ( n , i , r ) { if ( n && ( r || e . isPlainObject ( n ) ) ) { var s = n . _filtering || n ; for ( var a in s ) if ( s . hasOwnProperty ( a ) && ( ! i || ! i [ a ] ) ) { var o = n [ a ] ; o !== t && ( this [ a ] = o ) } return ! 0 } } , statics : { exports : { enumerable : ! 0 } , extend : function se ( ) { var t = se . base . apply ( this , arguments ) , n = t . prototype . _class ; return n && ! e . exports [ n ] && ( e . exports [ n ] = t ) , t } , equals : function ( t , n ) { function i ( t , e ) { for ( var n in t ) if ( t . hasOwnProperty ( n ) && ! e . hasOwnProperty ( n ) ) return ! 1 ; return ! 0 } if ( t === n ) return ! 0 ; if ( t && t . equals ) return t . equals ( n ) ; if ( n && n . equals ) return n . equals ( t ) ; if ( Array . isArray ( t ) && Array . isArray ( n ) ) { if ( t . length !== n . length ) return ! 1 ; for ( var r = 0 , s = t . length ; s > r ; r ++ ) if ( ! e . equals ( t [ r ] , n [ r ] ) ) return ! 1 ; return ! 0 } if ( t && "object" == typeof t && n && "object" == typeof n ) { if ( ! i ( t , n ) || ! i ( n , t ) ) return ! 1 ; for ( var r in t ) if ( t . hasO
return new p ( o * e + u * n , o * i + u * r , h * e + l * n , h * i + l * r , s + c * e + d * n , a + c * i + d * r ) } , isIdentity : function ( ) { return 1 === this . _a && 0 === this . _c && 0 === this . _b && 1 === this . _d && 0 === this . _tx && 0 === this . _ty } , orNullIfIdentity : function ( ) { return this . isIdentity ( ) ? null : this } , isInvertible : function ( ) { return ! ! this . _getDeterminant ( ) } , isSingular : function ( ) { return ! this . _getDeterminant ( ) } , transform : function ( t , e , n ) { return arguments . length < 3 ? this . _transformPoint ( u . read ( arguments ) ) : this . _transformCoordinates ( t , e , n ) } , _transformPoint : function ( t , e , n ) { var i = t . x , r = t . y ; return e || ( e = new u ) , e . set ( i * this . _a + r * this . _b + this . _tx , i * this . _c + r * this . _d + this . _ty , n ) } , _transformCoordinates : function ( t , e , n ) { for ( var i = 0 , r = 0 , s = 2 * n ; s > i ; ) { var a = t [ i ++ ] , o = t [ i ++ ] ; e [ r ++ ] = a * this . _a + o * this . _b + this . _tx , e [ r ++ ] = a * this . _c + o * this . _d + this . _ty } return e } , _transformCorners : function ( t ) { var e = t . x , n = t . y , i = e + t . width , r = n + t . height , s = [ e , n , i , n , i , r , e , r ] ; return this . _transformCoordinates ( s , s , 4 ) } , _transformBounds : function ( t , e , n ) { for ( var i = this . _transformCorners ( t ) , r = i . slice ( 0 , 2 ) , s = i . slice ( ) , a = 2 ; 8 > a ; a ++ ) { var o = i [ a ] , h = 1 & a ; o < r [ h ] ? r [ h ] = o : o > s [ h ] && ( s [ h ] = o ) } return e || ( e = new _ ) , e . set ( r [ 0 ] , r [ 1 ] , s [ 0 ] - r [ 0 ] , s [ 1 ] - r [ 1 ] , n ) } , inverseTransform : function ( ) { return this . _inverseTransform ( u . read ( arguments ) ) } , _getDeterminant : function ( ) { var t = this . _a * this . _d - this . _b * this . _c ; return isFinite ( t ) && ! o . isZero ( t ) && isFinite ( this . _tx ) && isFinite ( this . _ty ) ? t : null } , _inverseTransform : function ( t , e , n ) { var i = this . _getDeterminant ( ) ; if ( ! i ) return null ; var r = t . x - this . _tx , s = t . y - this . _ty ; return e || ( e = new u ) , e . set ( ( r * this . _d - s * this . _b ) / i , ( s * this . _a - r * this . _c ) / i , n ) } , decompose : function ( ) { var t = this . _a , e = this . _b , n = this . _c , i = this . _d ; if ( o . isZero ( t * i - e * n ) ) return null ; var r = Math . sqrt ( t * t + e * e ) ; t /= r , e /= r ; var s = t * n + e * i ; n -= t * s , i -= e * s ; var a = Math . sqrt ( n * n + i * i ) ; return n /= a , i /= a , s /= a , e * n > t * i && ( t = - t , e = - e , s = - s , r = - r ) , { scaling : new u ( r , a ) , rotation : 180 * - Math . atan2 ( e , t ) / Math . PI , shearing : s } } , getValues : function ( ) { return [ this . _a , this . _c , this . _b , this . _d , this . _tx , this . _ty ] } , getTranslation : function ( ) { return new u ( this . _tx , this . _ty ) } , getScaling : function ( ) { return ( this . decompose ( ) || { } ) . scaling } , getRotation : function ( ) { return ( this . decompose ( ) || { } ) . rotation } , inverted : function ( ) { var t = this . _getDeterminant ( ) ; return t && new p ( this . _d / t , - this . _c / t , - this . _b / t , this . _a / t , ( this . _b * this . _ty - this . _d * this . _tx ) / t , ( this . _c * this . _tx - this . _a * this . _ty ) / t ) } , shiftless : function ( ) { return new p ( this . _a , this . _c , this . _b , this . _d , 0 , 0 ) } , applyToContext : function ( t ) { t . transform ( this . _a , this . _c , this . _b , this . _d , this . _tx , this . _ty ) } } , e . each ( [ "a" , "c" , "b" , "d" , "tx" , "ty" ] , function ( t ) { var n = e . capitalize ( t ) , i = "_" + t ; this [ "get" + n ] = function ( ) { return this [ i ] } , this [ "set" + n ] = function ( t ) { this [ i ] = t , this . _changed ( ) } } , { } ) ) , v = e . extend ( { _class : "Line" , initialize : function ( t , e , n , i , r ) { var s = ! 1 ; arguments . length >= 4 ? ( this . _px = t , this . _py = e , this . _vx = n , this . _vy = i , s = r ) : ( this . _px = t . x , this . _py = t . y , this . _vx = e . x , this . _vy = e . y , s = n ) , s || ( this . _vx -= this . _px , this . _vy -= this . _py ) } , getPoint : function ( ) { return new u ( this . _px , this . _py ) } , getVector : function ( ) { return new u ( this . _vx , this . _vy ) } , getLength : function ( ) { return this . getVector ( ) . getLength ( ) } , intersect : function ( t , e ) { return v . intersect ( this . _px , this . _py , this . _vx , this . _vy , t . _px , t . _py , t . _vx , t . _vy , ! 0 , e ) } , getSide : function ( t ) { return v . getSide ( this . _px , this . _py , this . _vx , this . _vy , t . x , t . y , ! 0 ) } , getDistance : function ( t ) { return Math . abs ( v . getSignedDistance ( this . _px , this . _py , this . _vx , this . _vy , t . x , t . y , ! 0 ) ) } , statics : { intersect : function ( t , e , n , i , r , s , a , h , l , c ) { l || ( n -= t , i -= e , a -= r , h -= s ) ; var d = n * h - i * a ; if ( ! o . isZero ( d ) ) { var f = t - r , _ = e - s , g = ( a * _ - h * f ) / d , p = ( n * _ - i * f ) / d ; if ( c || g >= 0 && 1 >= g && p >= 0 && 1 >= p ) return new u ( t + g * n , e + g * i ) } } , getSide : function ( t , e , n , i , r , s , a ) { a || ( n -= t , i -= e ) ; var o = r - t , h = s - e , u = o * i - h * n ; return 0 === u && ( u = o * n + h * i , u > 0 && ( o -= n , h -= i , u = o * n + h * i , 0 > u && ( u = 0 ) ) ) , 0 > u ? - 1 : u > 0 ? 1 : 0 } , getSignedDistance : function ( t , e , n , i , r , s , a ) { return a || ( n -= t , i -= e ) , o . isZero ( n ) ? i >= 0 ? t - r : r - t : o . isZero ( i ) ? n >= 0 ? s - e : e - s : ( n * ( s - e ) - i * ( r - t ) ) / Math . sqrt ( n * n + i * i ) } } } ) , y = s . extend ( { _class : "Project" , _list : "projects" , _reference : "project" , initialize : function ( t ) { s . call ( this , ! 0 ) , this . layers = [ ] , this . _activeLayer = null , this . symbols = [ ] , this . _currentStyle = new Z ( null , null , this ) , this . _view = W . create ( this ,
} , clone : function ( t ) { var e = new S ( x . NO _INSERT ) ; return e . setType ( this . _type ) , e . setSize ( this . _size ) , e . setRadius ( this . _radius ) , this . _clone ( e , t ) } , getType : function ( ) { return this . _type } , setType : function ( t ) { this . _type = t } , getShape : "#getType" , setShape : "#setType" , getSize : function ( ) { var t = this . _size ; return new f ( t . width , t . height , this , "setSize" ) } , setSize : function ( ) { var t = d . read ( arguments ) ; if ( this . _size ) { if ( ! this . _size . equals ( t ) ) { var e = this . _type , n = t . width , i = t . height ; if ( "rectangle" === e ) { var r = d . min ( this . _radius , t . divide ( 2 ) ) ; this . _radius . set ( r . width , r . height ) } else "circle" === e ? ( n = i = ( n + i ) / 2 , this . _radius = n / 2 ) : "ellipse" === e && this . _radius . set ( n / 2 , i / 2 ) ; this . _size . set ( n , i ) , this . _changed ( 9 ) } } else this . _size = t . clone ( ) } , getRadius : function ( ) { var t = this . _radius ; return "circle" === this . _type ? t : new f ( t . width , t . height , this , "setRadius" ) } , setRadius : function ( t ) { var e = this . _type ; if ( "circle" === e ) { if ( t === this . _radius ) return ; var n = 2 * t ; this . _radius = t , this . _size . set ( n , n ) } else if ( t = d . read ( arguments ) , this . _radius ) { if ( this . _radius . equals ( t ) ) return ; if ( this . _radius . set ( t . width , t . height ) , "rectangle" === e ) { var n = d . max ( this . _size , t . multiply ( 2 ) ) ; this . _size . set ( n . width , n . height ) } else "ellipse" === e && this . _size . set ( 2 * t . width , 2 * t . height ) } else this . _radius = t . clone ( ) ; this . _changed ( 9 ) } , isEmpty : function ( ) { return ! 1 } , toPath : function ( t ) { var n = this . _clone ( new ( E [ e . capitalize ( this . _type ) ] ) ( { center : new u , size : this . _size , radius : this . _radius , insert : ! 1 } ) , t ) ; return paper . settings . applyMatrix && n . setApplyMatrix ( ! 0 ) , n } , _draw : function ( t , e , n ) { var i = this . _style , r = i . hasFill ( ) , s = i . hasStroke ( ) , a = e . dontFinish || e . clip , o = ! n ; if ( r || s || a ) { var h = this . _type , u = this . _radius , l = "circle" === h ; if ( e . dontStart || t . beginPath ( ) , o && l ) t . arc ( 0 , 0 , u , 0 , 2 * Math . PI , ! 0 ) ; else { var c = l ? u : u . width , d = l ? u : u . height , f = this . _size , _ = f . width , g = f . height ; if ( o && "rect" === h && 0 === c && 0 === d ) t . rect ( - _ / 2 , - g / 2 , _ , g ) ; else { var p = _ / 2 , v = g / 2 , m = . 44771525016920644 , y = c * m , w = d * m , x = [ - p , - v + d , - p , - v + w , - p + y , - v , - p + c , - v , p - c , - v , p - y , - v , p , - v + w , p , - v + d , p , v - d , p , v - w , p - y , v , p - c , v , - p + c , v , - p + y , v , - p , v - w , - p , v - d ] ; n && n . transform ( x , x , 32 ) , t . moveTo ( x [ 0 ] , x [ 1 ] ) , t . bezierCurveTo ( x [ 2 ] , x [ 3 ] , x [ 4 ] , x [ 5 ] , x [ 6 ] , x [ 7 ] ) , p !== c && t . lineTo ( x [ 8 ] , x [ 9 ] ) , t . bezierCurveTo ( x [ 10 ] , x [ 11 ] , x [ 12 ] , x [ 13 ] , x [ 14 ] , x [ 15 ] ) , v !== d && t . lineTo ( x [ 16 ] , x [ 17 ] ) , t . bezierCurveTo ( x [ 18 ] , x [ 19 ] , x [ 20 ] , x [ 21 ] , x [ 22 ] , x [ 23 ] ) , p !== c && t . lineTo ( x [ 24 ] , x [ 25 ] ) , t . bezierCurveTo ( x [ 26 ] , x [ 27 ] , x [ 28 ] , x [ 29 ] , x [ 30 ] , x [ 31 ] ) } } t . closePath ( ) } a || ! r && ! s || ( this . _setStyles ( t ) , r && ( t . fill ( i . getWindingRule ( ) ) , t . shadowColor = "rgba(0,0,0,0)" ) , s && t . stroke ( ) ) } , _canComposite : function ( ) { return ! ( this . hasFill ( ) && this . hasStroke ( ) ) } , _getBounds : function ( t , e ) { var n = new _ ( this . _size ) . setCenter ( 0 , 0 ) ; return "getBounds" !== t && this . hasStroke ( ) && ( n = n . expand ( this . getStrokeWidth ( ) ) ) , e ? e . _transformBounds ( n ) : n } } , new function ( ) { function t ( t , e , n ) { var i = t . _radius ; if ( ! i . isZero ( ) ) for ( var r = t . _size . divide ( 2 ) , s = 0 ; 4 > s ; s ++ ) { var a = new u ( 1 & s ? 1 : - 1 , s > 1 ? 1 : - 1 ) , o = a . multiply ( r ) , h = o . subtract ( a . multiply ( i ) ) , l = new _ ( o , h ) ; if ( ( n ? l . expand ( n ) : l ) . contains ( e ) ) return h } } function e ( t , e ) { var n = t . getAngleInRadians ( ) , i = 2 * e . width , r = 2 * e . height , s = i * Math . sin ( n ) , a = r * Math . cos ( n ) ; return i * r / ( 2 * Math . sqrt ( s * s + a * a ) ) } return { _contains : function n ( e ) { if ( "rectangle" === this . _type ) { var i = t ( this , e ) ; return i ? e . subtract ( i ) . divide ( this . _radius ) . getLength ( ) <= 1 : n . base . call ( this , e ) } return e . divide ( this . size ) . getLength ( ) <= . 5 } , _hitTestSelf : function i ( n , r ) { var s = ! 1 ; if ( this . hasStroke ( ) ) { var a = this . _type , o = this . _radius , h = this . getStrokeWidth ( ) + 2 * r . tolerance ; if ( "rectangle" === a ) { var u = t ( this , n , h ) ; if ( u ) { var l = n . subtract ( u ) ; s = 2 * Math . abs ( l . getLength ( ) - e ( l , o ) ) <= h } else { var c = new _ ( this . _size ) . setCenter ( 0 , 0 ) , d = c . expand ( h ) , f = c . expand ( - h ) ; s = d . _containsPoint ( n ) && ! f . _containsPoint ( n ) } } else "ellipse" === a && ( o = e ( n , o ) ) , s = 2 * Math . abs ( n . getLength ( ) - o ) <= h } return s ? new I ( "stroke" , this ) : i . base . apply ( this , arguments ) } } } , { statics : new function ( ) { function t ( t , n , i , r , s ) { var a = new S ( e . getNamed ( s ) ) ; return a . _type = t , a . _size = i , a . _radius = r , a . translate ( n ) } return { Circle : function ( ) { var n = u . readNamed ( arguments , "center" ) , i = e . readNamed ( arguments , "radius" ) ; return t ( "circle" , n , new d ( 2 * i ) , i , arguments ) } , Rectangle : function ( ) { var e = _ . readNamed ( arguments , "rectangle" ) , n = d . min ( d . readNamed ( arguments , "radius" ) ,
s = h , m && ( l = h ) ; break ; case "h" : case "v" : for ( var w = "h" === p ? "x" : "y" , y = 0 ; v > y ; y ++ ) h [ w ] = e ( y , w ) , this . lineTo ( h ) ; s = h ; break ; case "c" : for ( var y = 0 ; v > y ; y += 6 ) this . cubicCurveTo ( n ( y ) , s = n ( y + 2 ) , h = n ( y + 4 ) ) ; break ; case "s" : for ( var y = 0 ; v > y ; y += 4 ) this . cubicCurveTo ( /[cs]/ . test ( r ) ? h . multiply ( 2 ) . subtract ( s ) : h , s = n ( y ) , h = n ( y + 2 ) ) , r = p ; break ; case "q" : for ( var y = 0 ; v > y ; y += 4 ) this . quadraticCurveTo ( s = n ( y ) , h = n ( y + 2 ) ) ; break ; case "t" : for ( var y = 0 ; v > y ; y += 2 ) this . quadraticCurveTo ( s = /[qt]/ . test ( r ) ? h . multiply ( 2 ) . subtract ( s ) : h , h = n ( y ) ) , r = p ; break ; case "a" : for ( var y = 0 ; v > y ; y += 7 ) this . arcTo ( h = n ( y + 5 ) , new d ( + i [ y ] , + i [ y + 1 ] ) , + i [ y + 2 ] , + i [ y + 4 ] , + i [ y + 3 ] ) ; break ; case "z" : this . closePath ( ! 0 ) } r = p } } , _canComposite : function ( ) { return ! ( this . hasFill ( ) && this . hasStroke ( ) ) } , _contains : function ( t ) { var e = this . _getWinding ( t , ! 1 , ! 0 ) ; return ! ! ( "evenodd" === this . getWindingRule ( ) ? 1 & e : e ) } } ) , E = L . extend ( { _class : "Path" , _serializeFields : { segments : [ ] , closed : ! 1 } , initialize : function ( e ) { this . _closed = ! 1 , this . _segments = [ ] , this . _version = 0 ; var n = Array . isArray ( e ) ? "object" == typeof e [ 0 ] ? e : arguments : ! e || e . size !== t || e . x === t && e . point === t ? null : arguments ; n && n . length > 0 ? this . setSegments ( n ) : ( this . _curves = t , this . _selectedSegmentState = 0 , n || "string" != typeof e || ( this . setPathData ( e ) , e = null ) ) , this . _initialize ( ! n && e ) } , _equals : function ( t ) { return this . _closed === t . _closed && e . equals ( this . _segments , t . _segments ) } , clone : function ( e ) { var n = new E ( x . NO _INSERT ) ; return n . setSegments ( this . _segments ) , n . _closed = this . _closed , this . _clockwise !== t && ( n . _clockwise = this . _clockwise ) , this . _clone ( n , e ) } , _changed : function we ( e ) { if ( we . base . call ( this , e ) , 8 & e ) { var n = this . _parent ; if ( n && ( n . _currentPath = t ) , this . _length = this . _clockwise = t , 16 & e ) this . _version ++ ; else if ( this . _curves ) for ( var i = 0 , r = this . _curves . length ; r > i ; i ++ ) this . _curves [ i ] . _changed ( ) ; this . _monoCurves = t } else 32 & e && ( this . _bounds = t ) } , getStyle : function ( ) { var t = this . _parent ; return ( t instanceof N ? t : this ) . _style } , getSegments : function ( ) { return this . _segments } , setSegments : function ( e ) { var n = this . isFullySelected ( ) ; this . _segments . length = 0 , this . _selectedSegmentState = 0 , this . _curves = t , e && e . length > 0 && this . _add ( z . readAll ( e ) ) , n && this . setFullySelected ( ! 0 ) } , getFirstSegment : function ( ) { return this . _segments [ 0 ] } , getLastSegment : function ( ) { return this . _segments [ this . _segments . length - 1 ] } , getCurves : function ( ) { var t = this . _curves , e = this . _segments ; if ( ! t ) { var n = this . _countCurves ( ) ; t = this . _curves = Array ( n ) ; for ( var i = 0 ; n > i ; i ++ ) t [ i ] = new O ( this , e [ i ] , e [ i + 1 ] || e [ 0 ] ) } return t } , getFirstCurve : function ( ) { return this . getCurves ( ) [ 0 ] } , getLastCurve : function ( ) { var t = this . getCurves ( ) ; return t [ t . length - 1 ] } , isClosed : function ( ) { return this . _closed } , setClosed : function ( t ) { if ( this . _closed != ( t = ! ! t ) ) { if ( this . _closed = t , this . _curves ) { var e = this . _curves . length = this . _countCurves ( ) ; t && ( this . _curves [ e - 1 ] = new O ( this , this . _segments [ e - 1 ] , this . _segments [ 0 ] ) ) } this . _changed ( 25 ) } } } , { beans : ! 0 , getPathData : function ( t , e ) { function n ( e , n ) { e . _transformCoordinates ( t , g , ! 1 ) , i = g [ 0 ] , r = g [ 1 ] , p ? ( v . push ( "M" + _ . pair ( i , r ) ) , p = ! 1 ) : ( h = g [ 2 ] , u = g [ 3 ] , h === i && u === r && l === s && c === o ? n || v . push ( "l" + _ . pair ( i - s , r - o ) ) : v . push ( "c" + _ . pair ( l - s , c - o ) + " " + _ . pair ( h - s , u - o ) + " " + _ . pair ( i - s , r - o ) ) ) , s = i , o = r , l = g [ 4 ] , c = g [ 5 ] } var i , r , s , o , h , u , l , c , d = this . _segments , f = d . length , _ = new a ( e ) , g = Array ( 6 ) , p = ! 0 , v = [ ] ; if ( 0 === f ) return "" ; for ( var m = 0 ; f > m ; m ++ ) n ( d [ m ] ) ; return this . _closed && f > 0 && ( n ( d [ 0 ] , ! 0 ) , v . push ( "z" ) ) , v . join ( "" ) } } , { isEmpty : function ( ) { return 0 === this . _segments . length } , isPolygon : function ( ) { for ( var t = 0 , e = this . _segments . length ; e > t ; t ++ ) if ( ! this . _segments [ t ] . isLinear ( ) ) return ! 1 ; return ! 0 } , _transformContent : function ( t ) { for ( var e = Array ( 6 ) , n = 0 , i = this . _segments . length ; i > n ; n ++ ) this . _segments [ n ] . _transformCoordinates ( t , e , ! 0 ) ; return ! 0 } , _add : function ( t , e ) { for ( var n = this . _segments , i = this . _curves , r = t . length , s = null == e , e = s ? n . length : e , a = 0 ; r > a ; a ++ ) { var o = t [ a ] ; o . _path && ( o = t [ a ] = o . clone ( ) ) , o . _path = this , o . _index = e + a , o . _selectionState && this . _updateSelection ( o , 0 , o . _selectionState ) } if ( s ) n . push . apply ( n , t ) ; else { n . splice . apply ( n , [ e , 0 ] . concat ( t ) ) ; for ( var a = e + r , h = n . length ; h > a ; a ++ ) n [ a ] . _index = a } if ( i || t . _curves ) { i || ( i = this . _curves = [ ] ) ; var u = e > 0 ? e - 1 : e , l = u , c = Math . min ( u + r , this . _countCurves ( ) ) ; t . _curves && ( i . splice . apply ( i , [ u , 0 ] . concat ( t . _curves ) ) , l += t . _curves . length ) ; for ( var a = l ; c > a ; a ++
return e } , reorient : function ( ) { var t = this . removeChildren ( ) . sort ( function ( t , e ) { return e . getBounds ( ) . getArea ( ) - t . getBounds ( ) . getArea ( ) } ) ; if ( t . length > 0 ) { this . addChildren ( t ) ; for ( var e = t [ 0 ] . isClockwise ( ) , n = 1 , i = t . length ; i > n ; n ++ ) { for ( var r = t [ n ] . getInteriorPoint ( ) , s = 0 , a = n - 1 ; a >= 0 ; a -- ) t [ a ] . contains ( r ) && s ++ ; t [ n ] . setClockwise ( s % 2 === 0 && e ) } } return this } } ) ; var B = e . extend ( { _class : "PathIterator" , initialize : function ( t , e , n , i ) { function r ( t , e ) { var n = O . getValues ( t , e , i ) ; o . push ( n ) , s ( n , t . _index , 0 , 1 ) } function s ( t , e , i , r ) { if ( r - i > l && ! O . isFlatEnough ( t , n || . 25 ) ) { var a = O . subdivide ( t ) , o = ( i + r ) / 2 ; s ( a [ 0 ] , e , i , o ) , s ( a [ 1 ] , e , o , r ) } else { var c = t [ 6 ] - t [ 0 ] , d = t [ 7 ] - t [ 1 ] , f = Math . sqrt ( c * c + d * d ) ; f > 1e-6 && ( u += f , h . push ( { offset : u , value : r , index : e } ) ) } } for ( var a , o = [ ] , h = [ ] , u = 0 , l = 1 / ( e || 32 ) , c = t . _segments , d = c [ 0 ] , f = 1 , _ = c . length ; _ > f ; f ++ ) a = c [ f ] , r ( d , a ) , d = a ; t . _closed && r ( a , c [ 0 ] ) , this . curves = o , this . parts = h , this . length = u , this . index = 0 } , getParameterAt : function ( t ) { for ( var e , n = this . index ; e = n , ! ( 0 == n || this . parts [ -- n ] . offset < t ) ; ) ; for ( var i = this . parts . length ; i > e ; e ++ ) { var r = this . parts [ e ] ; if ( r . offset >= t ) { this . index = e ; var s = this . parts [ e - 1 ] , a = s && s . index == r . index ? s . value : 0 , o = s ? s . offset : 0 ; return { value : a + ( r . value - a ) * ( t - o ) / ( r . offset - o ) , index : r . index } } } var r = this . parts [ this . parts . length - 1 ] ; return { value : 1 , index : r . index } } , evaluate : function ( t , e ) { var n = this . getParameterAt ( t ) ; return O . evaluate ( this . curves [ n . index ] , n . value , e ) } , drawPart : function ( t , e , n ) { e = this . getParameterAt ( e ) , n = this . getParameterAt ( n ) ; for ( var i = e . index ; i <= n . index ; i ++ ) { var r = O . getPart ( this . curves [ i ] , i == e . index ? e . value : 0 , i == n . index ? n . value : 1 ) ; i == e . index && t . moveTo ( r [ 0 ] , r [ 1 ] ) , t . bezierCurveTo . apply ( t , r . slice ( 2 ) ) } } } , e . each ( [ "getPoint" , "getTangent" , "getNormal" , "getCurvature" ] , function ( t , e ) { this [ t + "At" ] = function ( t ) { return this . evaluate ( t , e ) } } , { } ) ) , j = e . extend ( { initialize : function ( t , e ) { for ( var n , i = this . points = [ ] , r = t . _segments , s = 0 , a = r . length ; a > s ; s ++ ) { var o = r [ s ] . point . clone ( ) ; n && n . equals ( o ) || ( i . push ( o ) , n = o ) } t . _closed && ( this . closed = ! 0 , i . unshift ( i [ i . length - 1 ] ) , i . push ( i [ 1 ] ) ) , this . error = e } , fit : function ( ) { var t = this . points , e = t . length , n = this . segments = e > 0 ? [ new z ( t [ 0 ] ) ] : [ ] ; return e > 1 && this . fitCubic ( 0 , e - 1 , t [ 1 ] . subtract ( t [ 0 ] ) . normalize ( ) , t [ e - 2 ] . subtract ( t [ e - 1 ] ) . normalize ( ) ) , this . closed && ( n . shift ( ) , n . pop ( ) ) , n } , fitCubic : function ( e , n , i , r ) { if ( n - e == 1 ) { var s = this . points [ e ] , a = this . points [ n ] , o = s . getDistance ( a ) / 3 ; return this . addCurve ( [ s , s . add ( i . normalize ( o ) ) , a . add ( r . normalize ( o ) ) , a ] ) , t } for ( var h , u = this . chordLengthParameterize ( e , n ) , l = Math . max ( this . error , this . error * this . error ) , c = ! 0 , d = 0 ; 4 >= d ; d ++ ) { var f = this . generateBezier ( e , n , u , i , r ) , _ = this . findMaxError ( e , n , f , u ) ; if ( _ . error < this . error && c ) return this . addCurve ( f ) , t ; if ( h = _ . index , _ . error >= l ) break ; c = this . reparameterize ( e , n , u , f ) , l = _ . error } var g = this . points [ h - 1 ] . subtract ( this . points [ h ] ) , p = this . points [ h ] . subtract ( this . points [ h + 1 ] ) , v = g . add ( p ) . divide ( 2 ) . normalize ( ) ; this . fitCubic ( e , h , i , v ) , this . fitCubic ( h , n , v . negate ( ) , r ) } , addCurve : function ( t ) { var e = this . segments [ this . segments . length - 1 ] ; e . setHandleOut ( t [ 1 ] . subtract ( t [ 0 ] ) ) , this . segments . push ( new z ( t [ 3 ] , t [ 2 ] . subtract ( t [ 3 ] ) ) ) } , generateBezier : function ( t , e , n , i , r ) { for ( var s = 1e-12 , a = this . points [ t ] , o = this . points [ e ] , h = [ [ 0 , 0 ] , [ 0 , 0 ] ] , u = [ 0 , 0 ] , l = 0 , c = e - t + 1 ; c > l ; l ++ ) { var d = n [ l ] , f = 1 - d , _ = 3 * d * f , g = f * f * f , p = _ * f , v = _ * d , m = d * d * d , y = i . normalize ( p ) , w = r . normalize ( v ) , x = this . points [ t + l ] . subtract ( a . multiply ( g + p ) ) . subtract ( o . multiply ( v + m ) ) ; h [ 0 ] [ 0 ] += y . dot ( y ) , h [ 0 ] [ 1 ] += y . dot ( w ) , h [ 1 ] [ 0 ] = h [ 0 ] [ 1 ] , h [ 1 ] [ 1 ] += w . dot ( w ) , u [ 0 ] += y . dot ( x ) , u [ 1 ] += w . dot ( x ) } var b , C , S = h [ 0 ] [ 0 ] * h [ 1 ] [ 1 ] - h [ 1 ] [ 0 ] * h [ 0 ] [ 1 ] ; if ( Math . abs ( S ) > s ) { var P = h [ 0 ] [ 0 ] * u [ 1 ] - h [ 1 ] [ 0 ] * u [ 0 ] , k = u [ 0 ] * h [ 1 ] [ 1 ] - u [ 1 ] * h [ 0 ] [ 1 ] ; b = k / S , C = P / S } else { var M = h [ 0 ] [ 0 ] + h [ 0 ] [ 1 ] , I = h [ 1 ] [ 0 ] + h [ 1 ] [ 1 ] ; b = C = Math . abs ( M ) > s ? u [ 0 ] / M : Math . abs ( I ) > s ? u [ 1 ] / I : 0 } var z , A , O = o . getDistance ( a ) , T = s * O ; if ( T > b || T > C ) b = C = O / 3 ; else { var L = o . subtract ( a ) ; z = i . normalize ( b ) , A = r . normalize ( C ) , z . dot ( L ) - A . dot ( L ) > O * O && ( b = C = O / 3 , z = A = null ) } return [ a , a . add ( z || i . normalize ( b ) ) , o . add ( A || r . normalize ( C ) ) , o ] } , reparameterize : function ( t , e , n , i ) { for ( var r = t ; e >= r ; r ++ ) n [ r - t ] = this . findRoot ( i , this . points [ r ] , n [ r - t ] ) ; for ( var r = 1 , s = n . length ; s > r ; r ++ ) if ( n [ r ] <= n [ r - 1 ] ) return ! 1 ; return ! 0 } , findRoot : function ( t , e , n ) { for ( var i = [ ] , r = [ ] , s = 0 ; 2 >= s ; s ++ ) i [ s ] = t [ s + 1 ] . subtract ( t [ s ] ) . multiply ( 3 ) ; for (
} , setCount : function ( t ) { this . tool [ /^mouse(down|up)$/ . test ( this . type ) ? "downCount" : "count" ] = t } , getItem : function ( ) { if ( ! this . _item ) { var t = this . tool . _scope . project . hitTest ( this . getPoint ( ) ) ; if ( t ) { for ( var e = t . item , n = e . _parent ; /^(Group|CompoundPath)$/ . test ( n . _class ) ; ) e = n , n = n . _parent ; this . _item = e } } return this . _item } , setItem : function ( t ) { this . _item = t } , toString : function ( ) { return "{ type: " + this . type + ", point: " + this . getPoint ( ) + ", count: " + this . getCount ( ) + ", modifiers: " + this . getModifiers ( ) + " }" } } ) , Q = s . extend ( { _class : "Tool" , _list : "tools" , _reference : "tool" , _events : [ "onActivate" , "onDeactivate" , "onEditOptions" , "onMouseDown" , "onMouseUp" , "onMouseDrag" , "onMouseMove" , "onKeyDown" , "onKeyUp" ] , initialize : function ( t ) { s . call ( this ) , this . _firstMove = ! 0 , this . _count = 0 , this . _downCount = 0 , this . _set ( t ) } , getMinDistance : function ( ) { return this . _minDistance } , setMinDistance : function ( t ) { this . _minDistance = t , null != t && null != this . _maxDistance && t > this . _maxDistance && ( this . _maxDistance = t ) } , getMaxDistance : function ( ) { return this . _maxDistance } , setMaxDistance : function ( t ) { this . _maxDistance = t , null != this . _minDistance && null != t && t < this . _minDistance && ( this . _minDistance = t ) } , getFixedDistance : function ( ) { return this . _minDistance == this . _maxDistance ? this . _minDistance : null } , setFixedDistance : function ( t ) { this . _minDistance = t , this . _maxDistance = t } , _updateEvent : function ( t , e , n , i , r , s , a ) { if ( ! r ) { if ( null != n || null != i ) { var o = null != n ? n : 0 , h = e . subtract ( this . _point ) , u = h . getLength ( ) ; if ( o > u ) return ! 1 ; if ( null != i && 0 != i ) if ( u > i ) e = this . _point . add ( h . normalize ( i ) ) ; else if ( a ) return ! 1 } if ( s && e . equals ( this . _point ) ) return ! 1 } switch ( this . _lastPoint = r && "mousemove" == t ? e : this . _point , this . _point = e , t ) { case "mousedown" : this . _lastPoint = this . _downPoint , this . _downPoint = this . _point , this . _downCount ++ ; break ; case "mouseup" : this . _lastPoint = this . _downPoint } return this . _count = r ? 0 : this . _count + 1 , ! 0 } , _fireEvent : function ( t , e ) { var n = paper . project . _removeSets ; if ( n ) { "mouseup" === t && ( n . mousedrag = null ) ; var i = n [ t ] ; if ( i ) { for ( var r in i ) { var s = i [ r ] ; for ( var a in n ) { var o = n [ a ] ; o && o != i && delete o [ s . _id ] } s . remove ( ) } n [ t ] = null } } return this . responds ( t ) && this . emit ( t , new K ( this , t , e ) ) } , _handleEvent : function ( t , e , n ) { paper = this . _scope ; var i = ! 1 ; switch ( t ) { case "mousedown" : this . _updateEvent ( t , e , null , null , ! 0 , ! 1 , ! 1 ) , i = this . _fireEvent ( t , n ) ; break ; case "mousedrag" : for ( var r = ! 1 , s = ! 1 ; this . _updateEvent ( t , e , this . minDistance , this . maxDistance , ! 1 , r , s ) ; ) i = this . _fireEvent ( t , n ) || i , r = ! 0 , s = ! 0 ; break ; case "mouseup" : ! e . equals ( this . _point ) && this . _updateEvent ( "mousedrag" , e , this . minDistance , this . maxDistance , ! 1 , ! 1 , ! 1 ) && ( i = this . _fireEvent ( "mousedrag" , n ) ) , this . _updateEvent ( t , e , null , this . maxDistance , ! 1 , ! 1 , ! 1 ) , i = this . _fireEvent ( t , n ) || i , this . _updateEvent ( t , e , null , null , ! 0 , ! 1 , ! 1 ) , this . _firstMove = ! 0 ; break ; case "mousemove" : for ( ; this . _updateEvent ( t , e , this . minDistance , this . maxDistance , this . _firstMove , ! 0 , ! 1 ) ; ) i = this . _fireEvent ( t , n ) || i , this . _firstMove = ! 1 } return i && n . preventDefault ( ) , i } } ) , te = { request : function ( e , n , i , r ) { r = r === t ? ! 0 : r ; var s = new ( window . ActiveXObject || XMLHttpRequest ) ( "Microsoft.XMLHTTP" ) ; return s . open ( e . toUpperCase ( ) , n , r ) , "overrideMimeType" in s && s . overrideMimeType ( "text/plain" ) , s . onreadystatechange = function ( ) { if ( 4 === s . readyState ) { var t = s . status ; if ( 0 !== t && 200 !== t ) throw Error ( "Could not load " + n + " (Error " + t + ")" ) ; i . call ( s , s . responseText ) } } , s . send ( null ) } } , ee = { canvases : [ ] , getCanvas : function ( t , e ) { var n , i = ! 0 ; "object" == typeof t && ( e = t . height , t = t . width ) , n = this . canvases . length ? this . canvases . pop ( ) : document . createElement ( "canvas" ) ; var r = n . getContext ( "2d" ) ; return n . width === t && n . height === e ? i && r . clearRect ( 0 , 0 , t + 1 , e + 1 ) : ( n . width = t , n . height = e ) , r . save ( ) , n } , getContext : function ( t , e ) { return this . getCanvas ( t , e ) . getContext ( "2d" ) } , release : function ( t ) { var e = t . canvas ? t . canvas : t ; e . getContext ( "2d" ) . restore ( ) , this . canvases . push ( e ) } } , ne = new function ( ) { function t ( t , e , n ) { return . 2989 * t + . 587 * e + . 114 * n } function n ( e , n , i , r ) { var s = r - t ( e , n , i ) ; f = e + s , _ = n + s , g = i + s ; var r = t ( f , _ , g ) , a = p ( f , _ , g ) , o = v ( f , _ , g ) ; if ( 0 > a ) { var h = r - a ; f = r + ( f - r ) * r / h , _ = r + ( _ - r ) * r / h , g = r + ( g - r ) * r / h } if ( o > 255 ) { var u = 255 - r , l = o - r ; f = r + ( f - r ) * u / l , _ = r + ( _ - r ) * u / l , g = r + ( g - r ) * u / l } } function i ( t , e , n ) { return v ( t , e , n ) - p ( t , e , n ) } function r ( t , e , n , i ) { var r , s = [ t , e , n ] , a = v ( t , e , n ) , o = p ( t , e , n ) ; o = o === t ? 0 : o =
case Ye : return Ae || n ( me , "'return' outside of function" ) , z ( ) , j ( yn ) || R ( ) ? e . argument = null : ( e . argument = J ( ) , D ( ) ) , N ( e , "ReturnStatement" ) ; case Ke : z ( ) , e . discriminant = H ( ) , e . cases = [ ] , F ( _n ) , Oe . push ( ei ) ; for ( var o , h ; be != gn ; ) if ( be === Fe || be === Ue ) { var u = be === Fe ; o && N ( o , "SwitchCase" ) , e . cases . push ( o = L ( ) ) , o . consequent = [ ] , z ( ) , u ? o . test = J ( ) : ( h && n ( Me , "Multiple default clauses" ) , h = ! 0 , o . test = null ) , F ( wn ) } else o || q ( ) , o . consequent . push ( U ( ) ) ; return o && N ( o , "SwitchCase" ) , z ( ) , Oe . pop ( ) , N ( e , "SwitchStatement" ) ; case Qe : return z ( ) , Jn . test ( de . slice ( Ie , me ) ) && n ( Ie , "Illegal newline after throw" ) , e . argument = J ( ) , D ( ) , N ( e , "ThrowStatement" ) ; case tn : if ( z ( ) , e . block = W ( ) , e . handler = null , be === qe ) { var l = L ( ) ; z ( ) , F ( pn ) , l . param = le ( ) , Te && Zn ( l . param . name ) && n ( l . param . start , "Binding " + l . param . name + " in strict mode" ) , F ( vn ) , l . guard = null , l . body = W ( ) , e . handler = N ( l , "CatchClause" ) } return e . guardedHandlers = Le , e . finalizer = j ( Ge ) ? W ( ) : null , e . handler || e . finalizer || n ( e . start , "Missing catch or finally clause" ) , N ( e , "TryStatement" ) ; case en : return z ( ) , X ( e ) , D ( ) , N ( e , "VariableDeclaration" ) ; case nn : return z ( ) , e . test = H ( ) , Oe . push ( ti ) , e . body = U ( ) , Oe . pop ( ) , N ( e , "WhileStatement" ) ; case rn : return Te && n ( me , "'with' in strict mode" ) , z ( ) , e . object = H ( ) , e . body = U ( ) , N ( e , "WithStatement" ) ; case _n : return W ( ) ; case yn : return z ( ) , N ( e , "EmptyStatement" ) ; default : var c = Ce , d = J ( ) ; if ( t === je && "Identifier" === d . type && j ( wn ) ) { for ( var r = 0 ; r < Oe . length ; ++ r ) Oe [ r ] . name === c && n ( d . start , "Label '" + c + "' is already declared" ) ; var f = be . isLoop ? "loop" : be === Ke ? "switch" : null ; return Oe . push ( { name : c , kind : f } ) , e . body = U ( ) , Oe . pop ( ) , e . label = d , N ( e , "LabeledStatement" ) } return e . expression = d , D ( ) , N ( e , "ExpressionStatement" ) } } function H ( ) { F ( pn ) ; var t = J ( ) ; return F ( vn ) , t } function W ( t ) { var e , n = L ( ) , i = ! 0 , r = ! 1 ; for ( n . body = [ ] , F ( _n ) ; ! j ( gn ) ; ) { var s = U ( ) ; n . body . push ( s ) , i && t && B ( s ) && ( e = r , A ( r = ! 0 ) ) , i = ! 1 } return r && ! e && A ( ! 1 ) , N ( n , "BlockStatement" ) } function G ( t , e ) { return t . init = e , F ( yn ) , t . test = be === yn ? null : J ( ) , F ( yn ) , t . update = be === vn ? null : J ( ) , F ( vn ) , t . body = U ( ) , Oe . pop ( ) , N ( t , "ForStatement" ) } function $ ( t , e ) { return t . left = e , t . right = J ( ) , F ( vn ) , t . body = U ( ) , Oe . pop ( ) , N ( t , "ForInStatement" ) } function X ( t , e ) { for ( t . declarations = [ ] , t . kind = "var" ; ; ) { var i = L ( ) ; if ( i . id = le ( ) , Te && Zn ( i . id . name ) && n ( i . id . start , "Binding " + i . id . name + " in strict mode" ) , i . init = j ( Sn ) ? J ( ! 0 , e ) : null , t . declarations . push ( N ( i , "VariableDeclarator" ) ) , ! j ( mn ) ) break } return t } function J ( t , e ) { var n = Y ( e ) ; if ( ! t && be === mn ) { var i = E ( n ) ; for ( i . expressions = [ n ] ; j ( mn ) ; ) i . expressions . push ( Y ( e ) ) ; return N ( i , "SequenceExpression" ) } return n } function Y ( t ) { var e = K ( t ) ; if ( be . isAssign ) { var n = E ( e ) ; return n . operator = Ce , n . left = e , z ( ) , n . right = Y ( t ) , V ( e ) , N ( n , "AssignmentExpression" ) } return e } function K ( t ) { var e = Q ( t ) ; if ( j ( bn ) ) { var n = E ( e ) ; return n . test = e , n . consequent = J ( ! 0 ) , F ( wn ) , n . alternate = J ( ! 0 , t ) , N ( n , "ConditionalExpression" ) } return e } function Q ( t ) { return te ( ee ( ) , - 1 , t ) } function te ( t , e , n ) { var i = be . binop ; if ( null != i && ( ! n || be !== ln ) && i > e ) { var r = E ( t ) ; r . left = t , r . operator = Ce , z ( ) , r . right = te ( ee ( ) , i , n ) ; var s = N ( r , /&&|\|\|/ . test ( r . operator ) ? "LogicalExpression" : "BinaryExpression" ) ; return te ( s , e , n ) } return t } function ee ( ) { if ( be . prefix ) { var t = L ( ) , e = be . isUpdate ; return t . operator = Ce , t . prefix = ! 0 , Se = ! 0 , z ( ) , t . argument = ee ( ) , e ? V ( t . argument ) : Te && "delete" === t . operator && "Identifier" === t . argument . type && n ( t . start , "Deleting local variable in strict mode" ) , N ( t , e ? "UpdateExpression" : "UnaryExpression" ) } for ( var i = ne ( ) ; be . postfix && ! R ( ) ; ) { var t = E ( i ) ; t . operator = Ce , t . prefix = ! 1 , t . argument = i , V ( i ) , z ( ) , i = N ( t , "UpdateExpression" ) } return i } function ne ( ) { return ie ( re ( ) ) } function ie ( t , e ) { if ( j ( xn ) ) { var n = E ( t ) ; return n . object = t , n . property = le ( ! 0 ) , n . computed = ! 1 , ie ( N ( n , "MemberExpression" ) , e ) } if ( j ( dn ) ) { var n = E ( t ) ; return n . object = t , n . property = J ( ) , n . computed = ! 0 , F ( fn ) , ie ( N ( n , "MemberExpression" ) , e ) } if ( ! e && j ( pn ) ) { var n = E ( t ) ; return n . callee = t , n . arguments = ue ( vn , ! 1 ) , ie ( N ( n , "CallExpression" ) , e ) } return t } function re ( ) { switch ( be ) { case an : var t = L ( ) ; return z ( ) , N ( t , "ThisExpression" ) ; case je : return le ( ) ; case Ee : case Be : case Ne : var t = L ( ) ; return t . value = Ce , t . raw = de . slice ( me , ye ) , z ( ) , N ( t , "Literal" ) ; case on : case hn : case un : var t = L ( ) ; return t . value = be . atomValue , t . raw = be . keyword , z ( ) , N ( t , "Literal" ) ; case pn : var e = we , n = me ; z ( ) ; var i = J ( ) ; return i . start = n , i .