/** * @license AngularJS v1.2.5 * (c) 2010-2014 Google, Inc. http://angularjs.org * License: MIT */ !(function ( window, document, undefined ) { "use strict"; function minErr( module ) { return function ( ) { var message, i, code = arguments[0], prefix = "[" + (module ? module + ":" : "") + code + "] ", template = arguments[1], templateArgs = arguments, stringify = function ( obj ) { return "function" == typeof obj ? obj.toString( ).replace( / \{[\s\S]*$/, "" ) : void 0 === obj ? "undefined" : "string" != typeof obj ? JSON.stringify( obj ) : obj; }; for ( message = (message = prefix + template.replace( /\{\d+\}/g, function ( match ) { var arg, index = +match.slice( 1, -1 ); return index + 2 < templateArgs.length ? "function" == typeof (arg = templateArgs[index + 2]) ? arg.toString( ).replace( / ?\{[\s\S]*$/, "" ) : void 0 === arg ? "undefined" : "string" != typeof arg ? toJson( arg ) : arg : match; } )) + "\nhttp://errors.angularjs.org/1.2.5/" + (module ? module + "/" : "") + code, i = 2; i < arguments.length; i++ ) message = message + (2 == i ? "?" : "&") + "p" + (i - 2) + "=" + encodeURIComponent( stringify( arguments[i] ) ); return new Error( message ); }; } var lowercase = function ( string ) { return isString( string ) ? string.toLowerCase( ) : string; }, uppercase = function ( string ) { return isString( string ) ? string.toUpperCase( ) : string; }; "i" !== "I".toLowerCase( ) && ((lowercase = function ( s ) { return isString( s ) ? s.replace( /[A-Z]/g, function ( ch ) { return String.fromCharCode( 32 | ch.charCodeAt( 0 ) ); } ) : s; }), (uppercase = function ( s ) { return isString( s ) ? s.replace( /[a-z]/g, function ( ch ) { return String.fromCharCode( -33 & ch.charCodeAt( 0 ) ); } ) : s; })); var msie, jqLite, jQuery, angularModule, nodeName_, slice = [].slice, push = [].push, toString = Object.prototype.toString, ngMinErr = minErr( "ng" ), angular = (window.angular, window.angular || (window.angular = { })), uid = ["0", "0", "0",]; function isArrayLike( obj ) { if (null == obj || isWindow( obj )) return !1; var length = obj.length; return ( !(1 !== obj.nodeType || !length) || isString( obj ) || isArray( obj ) || 0 === length || ("number" == typeof length && length > 0 && length - 1 in obj) ); } function forEach( obj, iterator, context ) { var key; if (obj) if (isFunction( obj )) for (key in obj) "prototype" != key && "length" != key && "name" != key && obj.hasOwnProperty( key ) && iterator.call( context, obj[key], key ); else if (obj.forEach && obj.forEach !== forEach) obj.forEach( iterator, context ); else if (isArrayLike( obj )) for (key = 0; key < obj.length; key++) iterator.call( context, obj[key], key ); else for (key in obj) obj.hasOwnProperty( key ) && iterator.call( context, obj[key], key ); return obj; } function sortedKeys( obj ) { var keys = []; for (var key in obj) obj.hasOwnProperty( key ) && keys.push( key ); return keys.sort( ); } function reverseParams( iteratorFn ) { return function ( value, key ) { iteratorFn( key, value ); }; } function nextUid( ) { for (var digit, index = uid.length; index; ) { if ((index--, 57 == (digit = uid[index].charCodeAt( 0 )))) return (uid[index] = "A"), uid.join( "" ); if (90 != digit) return (uid[index] = String.fromCharCode( digit + 1 )), uid.join( "" ); uid[index] = "0"; } return uid.unshift( "0" ), uid.join( "" ); } function setHashKey( obj, h ) { h ? (obj.$$hashKey = h) : delete obj.$$hashKey; } function extend( dst ) { var h = dst.$$hashKey; return ( forEach( arguments, function ( obj ) { obj !== dst && forEach( obj, function ( value, key ) { dst[key] = value; } ); } ), setHashKey( dst, h ), dst ); } function int( str ) { return parseInt( str, 10 ); } function inherit( parent, extra ) { return extend( new (extend( function ( ) {}, { prototype: parent, } ))( ), extra ); } function noop( ) {} function identity( $ ) { return $; } function valueFn( value ) { return function ( ) { return value; }; } function isUndefined( value ) { return void 0 === value; } function isDefined( value ) { return void 0 !== value; } function isObject( value ) { return null != value && "object" == typeof value; } function isString( value ) { return "string" == typeof value; } function isNumber( value ) { return "number" == typeof value; } function isDate( value ) { return "[object Date]" === toString.call( value ); } function isArray( value ) { return "[object Array]" === toString.call( value ); } function isFunction( value ) { return "function" == typeof value; } function isRegExp( value ) { return "[object RegExp]" === toString.call( value ); } function isWindow( obj ) { return obj && obj.document && obj.location && obj.alert && obj.setInterval; } function isScope( obj ) { return obj && obj.$evalAsync && obj.$watch; } (msie = int( (/msie (\d+)/.exec( lowercase( navigator.userAgent ) ) || [])[1] )), isNaN( msie ) && (msie = int( (/trident\/.*; rv:(\d+)/.exec( lowercase( navigator.userAgent ) ) || [])[1], )), (noop.$inject = []), (identity.$inject = []); var trim = String.prototype.trim ? function ( value ) { return isString( value ) ? value.trim( ) : value; } : function ( value ) { return isString( value ) ? value.replace( /^\s\s*/, "" ).replace( /\s\s*$/, "" ) : value; }; function isElement( node ) { return !(!node || !(node.nodeName || (node.on && node.find))); } function indexOf( array, obj ) { if (array.indexOf) return array.indexOf( obj ); for (var i = 0; i < array.length; i++) if (obj === array[i]) return i; return -1; } function arrayRemove( array, value ) { var index = indexOf( array, value ); return index >= 0 && array.splice( index, 1 ), value; } function copy( source, destination ) { if (isWindow( source ) || isScope( source )) throw ngMinErr( "cpws", "Can't copy! Making copies of Window or Scope instances is not supported.", ); if (destination) { if (source === destination) throw ngMinErr( "cpi", "Can't copy! Source and destination are identical.", ); if (isArray( source )) { destination.length = 0; for (var i = 0; i < source.length; i++) destination.push( copy( source[i] ) ); } else { var h = destination.$$hashKey; for (var key in (forEach( destination, function ( value, key ) { delete destination[key]; } ), source)) destination[key] = copy( source[key] ); setHashKey( destination, h ); } } else (destination = source), source && (isArray( source ) ? (destination = copy( source, [] )) : isDate( source ) ? (destination = new Date( source.getTime( ) )) : isRegExp( source ) ? (destination = new RegExp( source.source )) : isObject( source ) && (destination = copy( source, { } ))); return destination; } function equals( o1, o2 ) { if (o1 === o2) return !0; if (null === o1 || null === o2) return !1; if (o1 != o1 && o2 != o2) return !0; var length, key, keySet, t1 = typeof o1; if (t1 == typeof o2 && "object" == t1) { if (!isArray( o1 )) { if (isDate( o1 )) return isDate( o2 ) && o1.getTime( ) == o2.getTime( ); if (isRegExp( o1 ) && isRegExp( o2 )) return o1.toString( ) == o2.toString( ); if ( isScope( o1 ) || isScope( o2 ) || isWindow( o1 ) || isWindow( o2 ) || isArray( o2 ) ) return !1; for (key in ((keySet = { }), o1)) if ("$" !== key.charAt( 0 ) && !isFunction( o1[key] )) { if (!equals( o1[key], o2[key] )) return !1; keySet[key] = !0; } for (key in o2) if ( !keySet.hasOwnProperty( key ) && "$" !== key.charAt( 0 ) && undefined !== o2[key] && !isFunction( o2[key] ) ) return !1; return !0; } if (!isArray( o2 )) return !1; if ((length = o1.length) == o2.length) { for (key = 0; key < length; key++) if (!equals( o1[key], o2[key] )) return !1; return !0; } } return !1; } function csp( ) { return ( (document.securityPolicy && document.securityPolicy.isActive) || (document.querySelector && !( !document.querySelector( "[ng-csp]" ) && !document.querySelector( "[data-ng-csp]" ) )) ); } function concat( array1, array2, index ) { return array1.concat( slice.call( array2, index ) ); } function sliceArgs( args, startIndex ) { return slice.call( args, startIndex || 0 ); } function bind( self, fn ) { var curryArgs = arguments.length > 2 ? sliceArgs( arguments, 2 ) : []; return !isFunction( fn ) || fn instanceof RegExp ? fn : curryArgs.length ? function ( ) { return arguments.length ? fn.apply( self, curryArgs.concat( slice.call( arguments, 0 ) ) ) : fn.apply( self, curryArgs ); } : function ( ) { return arguments.length ? fn.apply( self, arguments ) : fn.call( self ); }; } function toJsonReplacer( key, value ) { var val = value; return ( "string" == typeof key && "$" === key.charAt( 0 ) ? (val = undefined) : isWindow( value ) ? (val = "$WINDOW") : value && document === value ? (val = "$DOCUMENT") : isScope( value ) && (val = "$SCOPE"), val ); } function toJson( obj, pretty ) { if (void 0 !== obj) return JSON.stringify( obj, toJsonReplacer, pretty ? " " : null ); } function fromJson( json ) { return isString( json ) ? JSON.parse( json ) : json; } function toBoolean( value ) { if (value && 0 !== value.length) { var v = lowercase( "" + value ); value = !( "f" == v || "0" == v || "false" == v || "no" == v || "n" == v || "[]" == v ); } else value = !1; return value; } function startingTag( element ) { element = jqLite( element ).clone( ); try { element.empty( ); } catch (e) {} var elemHtml = jqLite( "
" ).append( element ).html( ); try { return 3 === element[0].nodeType ? lowercase( elemHtml ) : elemHtml .match( /^(<[^>]+>)/ )[1] .replace( /^<([\w\-]+)/, function ( match, nodeName ) { return "<" + lowercase( nodeName ); } ); } catch (e) { return lowercase( elemHtml ); } } function tryDecodeURIComponent( value ) { try { return decodeURIComponent( value ); } catch (e) {} } function parseKeyValue( keyValue ) { var key_value, key, obj = { }; return ( forEach( (keyValue || "").split( "&" ), function ( keyValue ) { if ( keyValue && ((key_value = keyValue.split( "=" )), isDefined( (key = tryDecodeURIComponent( key_value[0] )) )) ) { var val = !isDefined( key_value[1] ) || tryDecodeURIComponent( key_value[1] ); obj[key] ? isArray( obj[key] ) ? obj[key].push( val ) : (obj[key] = [obj[key], val,]) : (obj[key] = val); } } ), obj ); } function toKeyValue( obj ) { var parts = []; return ( forEach( obj, function ( value, key ) { isArray( value ) ? forEach( value, function ( arrayValue ) { parts.push( encodeUriQuery( key, !0 ) + (!0 === arrayValue ? "" : "=" + encodeUriQuery( arrayValue, !0 )), ); } ) : parts.push( encodeUriQuery( key, !0 ) + (!0 === value ? "" : "=" + encodeUriQuery( value, !0 )), ); } ), parts.length ? parts.join( "&" ) : "" ); } function encodeUriSegment( val ) { return encodeUriQuery( val, !0 ) .replace( /%26/gi, "&" ) .replace( /%3D/gi, "=" ) .replace( /%2B/gi, "+" ); } function encodeUriQuery( val, pctEncodeSpaces ) { return encodeURIComponent( val ) .replace( /%40/gi, "@" ) .replace( /%3A/gi, ":" ) .replace( /%24/g, "$" ) .replace( /%2C/gi, "," ) .replace( /%20/g, pctEncodeSpaces ? "%20" : "+" ); } function bootstrap( element, modules ) { var doBootstrap = function ( ) { if ((element = jqLite( element )).injector( )) { var tag = element[0] === document ? "document" : startingTag( element ); throw ngMinErr( "btstrpd", "App Already Bootstrapped with this Element '{0}'", tag, ); } (modules = modules || []).unshift( [ "$provide", function ( $provide ) { $provide.value( "$rootElement", element ); }, ] ), modules.unshift( "ng" ); var injector = createInjector( modules ); return ( injector.invoke( [ "$rootScope", "$rootElement", "$compile", "$injector", "$animate", function ( scope, element, compile, injector, animate ) { scope.$apply( function ( ) { element.data( "$injector", injector ), compile( element )( scope ); } ); }, ] ), injector ); }, NG_DEFER_BOOTSTRAP = /^NG_DEFER_BOOTSTRAP!/; if (window && !NG_DEFER_BOOTSTRAP.test( window.name )) return doBootstrap( ); (window.name = window.name.replace( NG_DEFER_BOOTSTRAP, "" )), (angular.resumeBootstrap = function ( extraModules ) { forEach( extraModules, function ( module ) { modules.push( module ); } ), doBootstrap( ); }); } nodeName_ = msie < 9 ? function ( element ) { return (element = element.nodeName ? element : element[0]) .scopeName && "HTML" != element.scopeName ? uppercase( element.scopeName + ":" + element.nodeName ) : element.nodeName; } : function ( element ) { return element.nodeName ? element.nodeName : element[0].nodeName; }; var SNAKE_CASE_REGEXP = /[A-Z]/g; function snake_case( name, separator ) { return ( (separator = separator || "_"), name.replace( SNAKE_CASE_REGEXP, function ( letter, pos ) { return (pos ? separator : "") + letter.toLowerCase( ); } ) ); } function assertArg( arg, name, reason ) { if (!arg) throw ngMinErr( "areq", "Argument '{0}' is {1}", name || "?", reason || "required", ); return arg; } function assertArgFn( arg, name, acceptArrayAnnotation ) { return ( acceptArrayAnnotation && isArray( arg ) && (arg = arg[arg.length - 1]), assertArg( isFunction( arg ), name, "not a function, got " + (arg && "object" == typeof arg ? arg.constructor.name || "Object" : typeof arg), ), arg ); } function assertNotHasOwnProperty( name, context ) { if ("hasOwnProperty" === name) throw ngMinErr( "badname", "hasOwnProperty is not a valid {0} name", context, ); } function getter( obj, path, bindFnToScope ) { if (!path) return obj; for ( var key, keys = path.split( "." ), lastInstance = obj, len = keys.length, i = 0; i < len; i++ ) (key = keys[i]), obj && (obj = (lastInstance = obj)[key]); return !bindFnToScope && isFunction( obj ) ? bind( lastInstance, obj ) : obj; } function getBlockElements( nodes ) { var startNode = nodes[0], endNode = nodes[nodes.length - 1]; if (startNode === endNode) return jqLite( startNode ); var element = startNode, elements = [element,]; do { if (!(element = element.nextSibling)) break; elements.push( element ); } while (element !== endNode); return jqLite( elements ); } var version = { full: "1.2.5", major: 1, minor: 2, dot: 5, codeName: "singularity-expansion", }; var jqCache = (JQLite.cache = { }), jqName = (JQLite.expando = "ng-" + new Date( ).getTime( )), jqId = 1, addEventListenerFn = window.document.addEventListener ? function ( element, type, fn ) { element.addEventListener( type, fn, !1 ); } : function ( element, type, fn ) { element.attachEvent( "on" + type, fn ); }, removeEventListenerFn = window.document.removeEventListener ? function ( element, type, fn ) { element.removeEventListener( type, fn, !1 ); } : function ( element, type, fn ) { element.detachEvent( "on" + type, fn ); }; var SPECIAL_CHARS_REGEXP = /([\:\-\_]+(.))/g, MOZ_HACK_REGEXP = /^moz([A-Z])/, jqLiteMinErr = minErr( "jqLite" ); function camelCase( name ) { return name .replace( SPECIAL_CHARS_REGEXP, function ( _, separator, letter, offset ) { return offset ? letter.toUpperCase( ) : letter; } ) .replace( MOZ_HACK_REGEXP, "Moz$1" ); } function jqLitePatchJQueryRemove( name, dispatchThis, filterElems, getterIfNoArguments, ) { var originalJqFn = jQuery.fn[name]; function removePatch( param ) { var set, setIndex, setLength, element, childIndex, childLength, children, list = filterElems && param ? [this.filter( param ),] : [this,], fireEvent = dispatchThis; if (!getterIfNoArguments || null != param) for (; list.length; ) for ( setIndex = 0, setLength = (set = list.shift( )).length; setIndex < setLength; setIndex++ ) for ( element = jqLite( set[setIndex] ), fireEvent ? element.triggerHandler( "$destroy" ) : (fireEvent = !fireEvent), childIndex = 0, childLength = (children = element.children( )).length; childIndex < childLength; childIndex++ ) list.push( jQuery( children[childIndex] ) ); return originalJqFn.apply( this, arguments ); } (originalJqFn = originalJqFn.$original || originalJqFn), (removePatch.$original = originalJqFn), (jQuery.fn[name] = removePatch); } function JQLite( element ) { if (element instanceof JQLite) return element; if (!(this instanceof JQLite)) { if (isString( element ) && "<" != element.charAt( 0 )) throw jqLiteMinErr( "nosel", "Looking up elements via selectors is not supported by jqLite! See: http://docs.angularjs.org/api/angular.element", ); return new JQLite( element ); } if (isString( element )) { var div = document.createElement( "div" ); (div.innerHTML = "
 
" + element), div.removeChild( div.firstChild ), jqLiteAddNodes( this, div.childNodes ), jqLite( document.createDocumentFragment( ) ).append( this ); } else jqLiteAddNodes( this, element ); } function jqLiteClone( element ) { return element.cloneNode( !0 ); } function jqLiteDealoc( element ) { jqLiteRemoveData( element ); for ( var i = 0, children = element.childNodes || []; i < children.length; i++ ) jqLiteDealoc( children[i] ); } function jqLiteOff( element, type, fn, unsupported ) { if (isDefined( unsupported )) throw jqLiteMinErr( "offargs", "jqLite#off() does not support the `selector` argument", ); var events = jqLiteExpandoStore( element, "events" ); jqLiteExpandoStore( element, "handle" ) && (isUndefined( type ) ? forEach( events, function ( eventHandler, type ) { removeEventListenerFn( element, type, eventHandler ), delete events[type]; } ) : forEach( type.split( " " ), function ( type ) { isUndefined( fn ) ? (removeEventListenerFn( element, type, events[type] ), delete events[type]) : arrayRemove( events[type] || [], fn ); } )); } function jqLiteRemoveData( element, name ) { var expandoId = element[jqName], expandoStore = jqCache[expandoId]; if (expandoStore) { if (name) return void delete jqCache[expandoId].data[name]; expandoStore.handle && (expandoStore.events.$destroy && expandoStore.handle( { }, "$destroy" ), jqLiteOff( element )), delete jqCache[expandoId], (element[jqName] = undefined); } } function jqLiteExpandoStore( element, key, value ) { var expandoId = element[jqName], expandoStore = jqCache[expandoId || -1]; if (!isDefined( value )) return expandoStore && expandoStore[key]; expandoStore || ((element[jqName] = expandoId = ++jqId), (expandoStore = jqCache[expandoId] = { })), (expandoStore[key] = value); } function jqLiteData( element, key, value ) { var data = jqLiteExpandoStore( element, "data" ), isSetter = isDefined( value ), keyDefined = !isSetter && isDefined( key ), isSimpleGetter = keyDefined && !isObject( key ); if ( (data || isSimpleGetter || jqLiteExpandoStore( element, "data", ( data = { }) ), isSetter) ) data[key] = value; else { if (!keyDefined) return data; if (isSimpleGetter) return data && data[key]; extend( data, key ); } } function jqLiteHasClass( element, selector ) { return ( !!element.getAttribute && (" " + (element.getAttribute( "class" ) || "") + " ") .replace( /[\n\t]/g, " " ) .indexOf( " " + selector + " " ) > -1 ); } function jqLiteRemoveClass( element, cssClasses ) { cssClasses && element.setAttribute && forEach( cssClasses.split( " " ), function ( cssClass ) { element.setAttribute( "class", trim( (" " + (element.getAttribute( "class" ) || "") + " ") .replace( /[\n\t]/g, " " ) .replace( " " + trim( cssClass ) + " ", " " ), ), ); } ); } function jqLiteAddClass( element, cssClasses ) { if (cssClasses && element.setAttribute) { var existingClasses = ( " " + (element.getAttribute( "class" ) || "") + " " ).replace( /[\n\t]/g, " " ); forEach( cssClasses.split( " " ), function ( cssClass ) { (cssClass = trim( cssClass )), -1 === existingClasses.indexOf( " " + cssClass + " " ) && (existingClasses += cssClass + " "); } ), element.setAttribute( "class", trim( existingClasses ) ); } } function jqLiteAddNodes( root, elements ) { if (elements) { elements = elements.nodeName || !isDefined( elements.length ) || isWindow( elements ) ? [elements,] : elements; for (var i = 0; i < elements.length; i++) root.push( elements[i] ); } } function jqLiteController( element, name ) { return jqLiteInheritedData( element, "$" + (name || "ngController") + "Controller", ); } function jqLiteInheritedData( element, name, value ) { 9 == (element = jqLite( element ))[0].nodeType && (element = element.find( "html" )); for (var names = isArray( name ) ? name : [name,]; element.length; ) { for (var i = 0, ii = names.length; i < ii; i++) if (undefined !== (value = element.data( names[i] ))) return value; element = element.parent( ); } } function jqLiteEmpty( element ) { for (var i = 0, childNodes = element.childNodes; i < childNodes.length; i++) jqLiteDealoc( childNodes[i] ); for (; element.firstChild; ) element.removeChild( element.firstChild ); } var JQLitePrototype = (JQLite.prototype = { ready: function ( fn ) { var fired = !1; function trigger( ) { fired || ((fired = !0), fn( )); } "complete" === document.readyState ? setTimeout( trigger ) : (this.on( "DOMContentLoaded", trigger ), JQLite( window ).on( "load", trigger )); }, toString: function ( ) { var value = []; return ( forEach( this, function ( e ) { value.push( "" + e ); } ), "[" + value.join( ", " ) + "]" ); }, eq: function ( index ) { return jqLite( index >= 0 ? this[index] : this[this.length + index] ); }, length: 0, push: push, sort: [].sort, splice: [].splice, }), BOOLEAN_ATTR = { }; forEach( "multiple,selected,checked,disabled,readOnly,required,open".split( "," ), function ( value ) { BOOLEAN_ATTR[lowercase( value )] = value; }, ); var BOOLEAN_ELEMENTS = { }; function getBooleanAttrName( element, name ) { var booleanAttr = BOOLEAN_ATTR[name.toLowerCase( )]; return booleanAttr && BOOLEAN_ELEMENTS[element.nodeName] && booleanAttr; } function hashKey( obj ) { var key, objType = typeof obj; return ( "object" == objType && null !== obj ? "function" == typeof (key = obj.$$hashKey) ? (key = obj.$$hashKey( )) : undefined === key && (key = obj.$$hashKey = nextUid( )) : (key = obj), objType + ":" + key ); } function HashMap( array ) { forEach( array, this.put, this ); } forEach( "input,select,option,textarea,button,form,details".split( "," ), function ( value ) { BOOLEAN_ELEMENTS[uppercase( value )] = !0; }, ), forEach( { data: jqLiteData, inheritedData: jqLiteInheritedData, scope: function ( element ) { return ( jqLite( element ).data( "$scope" ) || jqLiteInheritedData( element.parentNode || element, [ "$isolateScope", "$scope", ] ) ); }, isolateScope: function ( element ) { return ( jqLite( element ).data( "$isolateScope" ) || jqLite( element ).data( "$isolateScopeNoTemplate" ) ); }, controller: jqLiteController, injector: function ( element ) { return jqLiteInheritedData( element, "$injector" ); }, removeAttr: function ( element, name ) { element.removeAttribute( name ); }, hasClass: jqLiteHasClass, css: function ( element, name, value ) { var val; if (((name = camelCase( name )), !isDefined( value ))) return ( msie <= 8 && "" === (val = element.currentStyle && element.currentStyle[name]) && (val = "auto"), (val = val || element.style[name]), msie <= 8 && (val = "" === val ? undefined : val), val ); element.style[name] = value; }, attr: function ( element, name, value ) { var lowercasedName = lowercase( name ); if (BOOLEAN_ATTR[lowercasedName]) { if (!isDefined( value )) return element[name] || (element.attributes.getNamedItem( name ) || noop).specified ? lowercasedName : undefined; value ? ((element[name] = !0), element.setAttribute( name, lowercasedName )) : ((element[name] = !1), element.removeAttribute( lowercasedName )); } else if (isDefined( value )) element.setAttribute( name, value ); else if (element.getAttribute) { var ret = element.getAttribute( name, 2 ); return null === ret ? undefined : ret; } }, prop: function ( element, name, value ) { if (!isDefined( value )) return element[name]; element[name] = value; }, text: (function ( ) { var NODE_TYPE_TEXT_PROPERTY = []; return ( msie < 9 ? ((NODE_TYPE_TEXT_PROPERTY[1] = "innerText"), (NODE_TYPE_TEXT_PROPERTY[3] = "nodeValue")) : (NODE_TYPE_TEXT_PROPERTY[1] = NODE_TYPE_TEXT_PROPERTY[3] = "textContent"), (getText.$dv = ""), getText ); function getText( element, value ) { var textProp = NODE_TYPE_TEXT_PROPERTY[element.nodeType]; if (isUndefined( value )) return textProp ? element[textProp] : ""; element[textProp] = value; } })( ), val: function ( element, value ) { if (isUndefined( value )) { if ("SELECT" === nodeName_( element ) && element.multiple) { var result = []; return ( forEach( element.options, function ( option ) { option.selected && result.push( option.value || option.text ); } ), 0 === result.length ? null : result ); } return element.value; } element.value = value; }, html: function ( element, value ) { if (isUndefined( value )) return element.innerHTML; for ( var i = 0, childNodes = element.childNodes; i < childNodes.length; i++ ) jqLiteDealoc( childNodes[i] ); element.innerHTML = value; }, empty: jqLiteEmpty, }, function ( fn, name ) { JQLite.prototype[name] = function ( arg1, arg2 ) { var i, key; if ( fn !== jqLiteEmpty && undefined === (2 == fn.length && fn !== jqLiteHasClass && fn !== jqLiteController ? arg1 : arg2) ) { if (isObject( arg1 )) { for (i = 0; i < this.length; i++) if (fn === jqLiteData) fn( this[i], arg1 ); else for (key in arg1) fn( this[i], key, arg1[key] ); return this; } for ( var value = fn.$dv, jj = undefined === value ? Math.min( this.length, 1 ) : this.length, j = 0; j < jj; j++ ) { var nodeValue = fn( this[j], arg1, arg2 ); value = value ? value + nodeValue : nodeValue; } return value; } for (i = 0; i < this.length; i++) fn( this[i], arg1, arg2 ); return this; }; }, ), forEach( { removeData: jqLiteRemoveData, dealoc: jqLiteDealoc, on: function onFn( element, type, fn, unsupported ) { if (isDefined( unsupported )) throw jqLiteMinErr( "onargs", "jqLite#on() does not support the `selector` or `eventData` parameters", ); var events = jqLiteExpandoStore( element, "events" ), handle = jqLiteExpandoStore( element, "handle" ); events || jqLiteExpandoStore( element, "events", ( events = { }) ), handle || jqLiteExpandoStore( element, "handle", (handle = (function ( element, events ) { var eventHandler = function ( event, type ) { if ( (event.preventDefault || (event.preventDefault = function ( ) { event.returnValue = !1; }), event.stopPropagation || (event.stopPropagation = function ( ) { event.cancelBubble = !0; }), event.target || (event.target = event.srcElement || document), isUndefined( event.defaultPrevented )) ) { var prevent = event.preventDefault; (event.preventDefault = function ( ) { (event.defaultPrevented = !0), prevent.call( event ); }), (event.defaultPrevented = !1); } (event.isDefaultPrevented = function ( ) { return event.defaultPrevented || !1 === event.returnValue; }), forEach( events[type || event.type], function ( fn ) { fn.call( element, event ); } ), msie <= 8 ? ((event.preventDefault = null), (event.stopPropagation = null), (event.isDefaultPrevented = null)) : (delete event.preventDefault, delete event.stopPropagation, delete event.isDefaultPrevented); }; return (eventHandler.elem = element), eventHandler; })( element, events )), ), forEach( type.split( " " ), function ( type ) { var eventFns = events[type]; if (!eventFns) { if ("mouseenter" == type || "mouseleave" == type) { var contains = document.body.contains || document.body.compareDocumentPosition ? function ( a, b ) { var adown = 9 === a.nodeType ? a.documentElement : a, bup = b && b.parentNode; return ( a === bup || !( !bup || 1 !== bup.nodeType || !(adown.contains ? adown.contains( bup ) : a.compareDocumentPosition && 16 & a.compareDocumentPosition( bup )) ) ); } : function ( a, b ) { if (b) for (; (b = b.parentNode); ) if (b === a) return !0; return !1; }; events[type] = []; onFn( element, { mouseleave: "mouseout", mouseenter: "mouseover", }[type], function ( event ) { var related = event.relatedTarget; (related && (related === this || contains( this, related ))) || handle( event, type ); }, ); } else addEventListenerFn( element, type, handle ), (events[type] = []); eventFns = events[type]; } eventFns.push( fn ); } ); }, off: jqLiteOff, replaceWith: function ( element, replaceNode ) { var index, parent = element.parentNode; jqLiteDealoc( element ), forEach( new JQLite( replaceNode ), function ( node ) { index ? parent.insertBefore( node, index.nextSibling ) : parent.replaceChild( node, element ), (index = node); } ); }, children: function ( element ) { var children = []; return ( forEach( element.childNodes, function ( element ) { 1 === element.nodeType && children.push( element ); } ), children ); }, contents: function ( element ) { return element.childNodes || []; }, append: function ( element, node ) { forEach( new JQLite( node ), function ( child ) { (1 !== element.nodeType && 11 !== element.nodeType) || element.appendChild( child ); } ); }, prepend: function ( element, node ) { if (1 === element.nodeType) { var index = element.firstChild; forEach( new JQLite( node ), function ( child ) { element.insertBefore( child, index ); } ); } }, wrap: function ( element, wrapNode ) { wrapNode = jqLite( wrapNode )[0]; var parent = element.parentNode; parent && parent.replaceChild( wrapNode, element ), wrapNode.appendChild( element ); }, remove: function ( element ) { jqLiteDealoc( element ); var parent = element.parentNode; parent && parent.removeChild( element ); }, after: function ( element, newElement ) { var index = element, parent = element.parentNode; forEach( new JQLite( newElement ), function ( node ) { parent.insertBefore( node, index.nextSibling ), (index = node); } ); }, addClass: jqLiteAddClass, removeClass: jqLiteRemoveClass, toggleClass: function ( element, selector, condition ) { isUndefined( condition ) && (condition = !jqLiteHasClass( element, selector )), (condition ? jqLiteAddClass : jqLiteRemoveClass)( element, selector ); }, parent: function ( element ) { var parent = element.parentNode; return parent && 11 !== parent.nodeType ? parent : null; }, next: function ( element ) { if (element.nextElementSibling) return element.nextElementSibling; for ( var elm = element.nextSibling; null != elm && 1 !== elm.nodeType; ) elm = elm.nextSibling; return elm; }, find: function ( element, selector ) { return element.getElementsByTagName ? element.getElementsByTagName( selector ) : []; }, clone: jqLiteClone, triggerHandler: function ( element, eventName, eventData ) { var eventFns = (jqLiteExpandoStore( element, "events" ) || { })[ eventName ]; eventData = eventData || []; var event = [{ preventDefault: noop, stopPropagation: noop, },]; forEach( eventFns, function ( fn ) { fn.apply( element, event.concat( eventData ) ); } ); }, }, function ( fn, name ) { (JQLite.prototype[name] = function ( arg1, arg2, arg3 ) { for (var value, i = 0; i < this.length; i++) isUndefined( value ) ? isDefined( (value = fn( this[i], arg1, arg2, arg3 )) ) && (value = jqLite( value )) : jqLiteAddNodes( value, fn( this[i], arg1, arg2, arg3 ) ); return isDefined( value ) ? value : this; }), (JQLite.prototype.bind = JQLite.prototype.on), (JQLite.prototype.unbind = JQLite.prototype.off); }, ), (HashMap.prototype = { put: function ( key, value ) { this[hashKey( key )] = value; }, get: function ( key ) { return this[hashKey( key )]; }, remove: function ( key ) { var value = this[(key = hashKey( key ))]; return delete this[key], value; }, }); var FN_ARGS = /^function\s*[^\(]*\(\s*([^\)]*)\)/m, FN_ARG_SPLIT = /,/, FN_ARG = /^\s*(_?)(\S+?)\1\s*$/, STRIP_COMMENTS = /((\/\/.*$)|(\/\*[\s\S]*?\*\/))/gm, $injectorMinErr = minErr( "$injector" ); function annotate( fn ) { var $inject, last; return ( "function" == typeof fn ? ($inject = fn.$inject) || (($inject = []), fn.length && forEach( fn .toString( ) .replace( STRIP_COMMENTS, "" ) .match( FN_ARGS )[1] .split( FN_ARG_SPLIT ), function ( arg ) { arg.replace( FN_ARG, function ( all, underscore, name ) { $inject.push( name ); } ); }, ), (fn.$inject = $inject)) : isArray( fn ) ? (assertArgFn( fn[(last = fn.length - 1)], "fn" ), ($inject = fn.slice( 0, last ))) : assertArgFn( fn, "fn", !0 ), $inject ); } function createInjector( modulesToLoad ) { var INSTANTIATING = { }, path = [], loadedModules = new HashMap( ), providerCache = { $provide: { provider: supportObject( provider ), factory: supportObject( factory ), service: supportObject( function ( name, constructor ) { return factory( name, [ "$injector", function ( $injector ) { return $injector.instantiate( constructor ); }, ] ); } ), value: supportObject( function ( name, val ) { return factory( name, valueFn( val ) ); } ), constant: supportObject( function ( name, value ) { assertNotHasOwnProperty( name, "constant" ), (providerCache[name] = value), (instanceCache[name] = value); } ), decorator: function ( serviceName, decorFn ) { var origProvider = providerInjector.get( serviceName + "Provider" ), orig$get = origProvider.$get; origProvider.$get = function ( ) { var origInstance = instanceInjector.invoke( orig$get, origProvider, ); return instanceInjector.invoke( decorFn, null, { $delegate: origInstance, } ); }; }, }, }, providerInjector = (providerCache.$injector = createInternalInjector( providerCache, function ( ) { throw $injectorMinErr( "unpr", "Unknown provider: {0}", path.join( " <- " ), ); }, )), instanceCache = { }, instanceInjector = (instanceCache.$injector = createInternalInjector( instanceCache, function ( servicename ) { var provider = providerInjector.get( servicename + "Provider" ); return instanceInjector.invoke( provider.$get, provider ); }, )); return ( forEach( (function loadModules( modulesToLoad ) { var moduleFn, invokeQueue, i, ii, runBlocks = []; return ( forEach( modulesToLoad, function ( module ) { if (!loadedModules.get( module )) { loadedModules.put( module, !0 ); try { if (isString( module )) for ( moduleFn = angularModule( module ), runBlocks = runBlocks .concat( loadModules( moduleFn.requires ) ) .concat( moduleFn._runBlocks ), invokeQueue = moduleFn._invokeQueue, i = 0, ii = invokeQueue.length; i < ii; i++ ) { var invokeArgs = invokeQueue[i], provider = providerInjector.get( invokeArgs[0] ); provider[invokeArgs[1]].apply( provider, invokeArgs[2] ); } else isFunction( module ) || isArray( module ) ? runBlocks.push( providerInjector.invoke( module ) ) : assertArgFn( module, "module" ); } catch (e) { throw ( (isArray( module ) && (module = module[module.length - 1]), e.message && e.stack && -1 == e.stack.indexOf( e.message ) && (e = e.message + "\n" + e.stack), $injectorMinErr( "modulerr", "Failed to instantiate module {0} due to:\n{1}", module, e.stack || e.message || e, )) ); } } } ), runBlocks ); })( modulesToLoad ), function ( fn ) { instanceInjector.invoke( fn || noop ); }, ), instanceInjector ); function supportObject( delegate ) { return function ( key, value ) { if (!isObject( key )) return delegate( key, value ); forEach( key, reverseParams( delegate ) ); }; } function provider( name, provider_ ) { if ( (assertNotHasOwnProperty( name, "service" ), (isFunction( provider_ ) || isArray( provider_ )) && (provider_ = providerInjector.instantiate( provider_ )), !provider_.$get) ) throw $injectorMinErr( "pget", "Provider '{0}' must define $get factory method.", name, ); return (providerCache[name + "Provider"] = provider_); } function factory( name, factoryFn ) { return provider( name, { $get: factoryFn, } ); } function createInternalInjector( cache, factory ) { function getService( serviceName ) { if (cache.hasOwnProperty( serviceName )) { if (cache[serviceName] === INSTANTIATING) throw $injectorMinErr( "cdep", "Circular dependency found: {0}", path.join( " <- " ), ); return cache[serviceName]; } try { return ( path.unshift( serviceName ), (cache[serviceName] = INSTANTIATING), (cache[serviceName] = factory( serviceName )) ); } finally { path.shift( ); } } function invoke( fn, self, locals ) { var length, i, key, args = [], $inject = annotate( fn ); for (i = 0, length = $inject.length; i < length; i++) { if ("string" != typeof (key = $inject[i])) throw $injectorMinErr( "itkn", "Incorrect injection token! Expected service name as string, got {0}", key, ); args.push( locals && locals.hasOwnProperty( key ) ? locals[key] : getService( key ), ); } return fn.$inject || (fn = fn[length]), fn.apply( self, args ); } return { invoke: invoke, instantiate: function ( Type, locals ) { var instance, returnedValue, Constructor = function ( ) {}; return ( (Constructor.prototype = (isArray( Type ) ? Type[Type.length - 1] : Type ).prototype), isObject( (returnedValue = invoke( Type, (instance = new Constructor( )), locals, )), ) || isFunction( returnedValue ) ? returnedValue : instance ); }, get: getService, annotate: annotate, has: function ( name ) { return ( providerCache.hasOwnProperty( name + "Provider" ) || cache.hasOwnProperty( name ) ); }, }; } } function $AnchorScrollProvider( ) { var autoScrollingEnabled = !0; (this.disableAutoScrolling = function ( ) { autoScrollingEnabled = !1; }), (this.$get = [ "$window", "$location", "$rootScope", function ( $window, $location, $rootScope ) { var document = $window.document; function scroll( ) { var elm, list, result, hash = $location.hash( ); hash ? (elm = document.getElementById( hash )) ? elm.scrollIntoView( ) : ((list = document.getElementsByName( hash )), (result = null), forEach( list, function ( element ) { result || "a" !== lowercase( element.nodeName ) || (result = element); } ), (elm = result) ? elm.scrollIntoView( ) : "top" === hash && $window.scrollTo( 0, 0 )) : $window.scrollTo( 0, 0 ); } return ( autoScrollingEnabled && $rootScope.$watch( function ( ) { return $location.hash( ); }, function ( ) { $rootScope.$evalAsync( scroll ); }, ), scroll ); }, ]); } var $animateMinErr = minErr( "$animate" ), $AnimateProvider = [ "$provide", function ( $provide ) { (this.$$selectors = { }), (this.register = function ( name, factory ) { var key = name + "-animation"; if (name && "." != name.charAt( 0 )) throw $animateMinErr( "notcsel", "Expecting class selector starting with '.' got '{0}'.", name, ); (this.$$selectors[name.substr( 1 )] = key), $provide.factory( key, factory ); }), (this.$get = [ "$timeout", function ( $timeout ) { return { enter: function ( element, parent, after, done ) { after ? after.after( element ) : ((parent && parent[0]) || (parent = after.parent( )), parent.append( element )), done && $timeout( done, 0, !1 ); }, leave: function ( element, done ) { element.remove( ), done && $timeout( done, 0, !1 ); }, move: function ( element, parent, after, done ) { this.enter( element, parent, after, done ); }, addClass: function ( element, className, done ) { (className = isString( className ) ? className : isArray( className ) ? className.join( " " ) : ""), forEach( element, function ( element ) { jqLiteAddClass( element, className ); } ), done && $timeout( done, 0, !1 ); }, removeClass: function ( element, className, done ) { (className = isString( className ) ? className : isArray( className ) ? className.join( " " ) : ""), forEach( element, function ( element ) { jqLiteRemoveClass( element, className ); } ), done && $timeout( done, 0, !1 ); }, enabled: noop, }; }, ]); }, ]; function Browser( window, document, $log, $sniffer ) { var self = this, rawDocument = document[0], location = window.location, history = window.history, setTimeout = window.setTimeout, clearTimeout = window.clearTimeout, pendingDeferIds = { }; self.isMock = !1; var outstandingRequestCount = 0, outstandingRequestCallbacks = []; function completeOutstandingRequest( fn ) { try { fn.apply( null, sliceArgs( arguments, 1 ) ); } finally { if (0 === --outstandingRequestCount) for (; outstandingRequestCallbacks.length; ) try { outstandingRequestCallbacks.pop( )( ); } catch (e) { $log.error( e ); } } } (self.$$completeOutstandingRequest = completeOutstandingRequest), (self.$$incOutstandingRequestCount = function ( ) { outstandingRequestCount++; }), (self.notifyWhenNoOutstandingRequests = function ( callback ) { forEach( pollFns, function ( pollFn ) { pollFn( ); } ), 0 === outstandingRequestCount ? callback( ) : outstandingRequestCallbacks.push( callback ); }); var pollTimeout, pollFns = []; self.addPollFn = function ( fn ) { return ( isUndefined( pollTimeout ) && (function ( interval, setTimeout ) { !(function check( ) { forEach( pollFns, function ( pollFn ) { pollFn( ); } ), (pollTimeout = setTimeout( check, interval )); })( ); })( 100, setTimeout ), pollFns.push( fn ), fn ); }; var lastBrowserUrl = location.href, baseElement = document.find( "base" ), newLocation = null; self.url = function ( url, replace ) { if ((location !== window.location && (location = window.location), url)) { if (lastBrowserUrl == url) return; return ( (lastBrowserUrl = url), $sniffer.history ? replace ? history.replaceState( null, "", url ) : (history.pushState( null, "", url ), baseElement.attr( "href", baseElement.attr( "href" ) )) : ((newLocation = url), replace ? location.replace( url ) : (location.href = url)), self ); } return newLocation || location.href.replace( /%27/g, "'" ); }; var urlChangeListeners = [], urlChangeInit = !1; function fireUrlChange( ) { (newLocation = null), lastBrowserUrl != self.url( ) && ((lastBrowserUrl = self.url( )), forEach( urlChangeListeners, function ( listener ) { listener( self.url( ) ); } )); } (self.onUrlChange = function ( callback ) { return ( urlChangeInit || ($sniffer.history && jqLite( window ).on( "popstate", fireUrlChange ), $sniffer.hashchange ? jqLite( window ).on( "hashchange", fireUrlChange ) : self.addPollFn( fireUrlChange ), (urlChangeInit = !0)), urlChangeListeners.push( callback ), callback ); }), (self.baseHref = function ( ) { var href = baseElement.attr( "href" ); return href ? href.replace( /^https?\:\/\/[^\/]*/, "" ) : ""; }); var lastCookies = { }, lastCookieString = "", cookiePath = self.baseHref( ); (self.cookies = function ( name, value ) { var cookieLength, cookieArray, cookie, i, index; if (!name) { if (rawDocument.cookie !== lastCookieString) for ( cookieArray = (lastCookieString = rawDocument.cookie).split( "; " ), lastCookies = { }, i = 0; i < cookieArray.length; i++ ) (index = (cookie = cookieArray[i]).indexOf( "=" )) > 0 && ((name = unescape( cookie.substring( 0, index ) )), undefined === lastCookies[name] && (lastCookies[name] = unescape( cookie.substring( index + 1 ) ))); return lastCookies; } undefined === value ? (rawDocument.cookie = escape( name ) + "=;path=" + cookiePath + ";expires=Thu, 01 Jan 1970 00:00:00 GMT") : isString( value ) && (cookieLength = (rawDocument.cookie = escape( name ) + "=" + escape( value ) + ";path=" + cookiePath) .length + 1) > 4096 && $log.warn( "Cookie '" + name + "' possibly not set or overflowed because it was too large (" + cookieLength + " > 4096 bytes)!", ); }), (self.defer = function ( fn, delay ) { var timeoutId; return ( outstandingRequestCount++, (timeoutId = setTimeout( function ( ) { delete pendingDeferIds[timeoutId], completeOutstandingRequest( fn ); }, delay || 0 )), (pendingDeferIds[timeoutId] = !0), timeoutId ); }), (self.defer.cancel = function ( deferId ) { return ( !!pendingDeferIds[deferId] && (delete pendingDeferIds[deferId], clearTimeout( deferId ), completeOutstandingRequest( noop ), !0) ); }); } function $BrowserProvider( ) { this.$get = [ "$window", "$log", "$sniffer", "$document", function ( $window, $log, $sniffer, $document ) { return new Browser( $window, $document, $log, $sniffer ); }, ]; } function $CacheFactoryProvider( ) { this.$get = function ( ) { var caches = { }; function cacheFactory( cacheId, options ) { if (cacheId in caches) throw minErr( "$cacheFactory" )( "iid", "CacheId '{0}' is already taken!", cacheId, ); var size = 0, stats = extend( { }, options, { id: cacheId, } ), data = { }, capacity = (options && options.capacity) || Number.MAX_VALUE, lruHash = { }, freshEnd = null, staleEnd = null; return (caches[cacheId] = { put: function ( key, value ) { if ( (refresh( lruHash[key] || (lruHash[key] = { key: key, }) ), !isUndefined( value )) ) return ( key in data || size++, (data[key] = value), size > capacity && this.remove( staleEnd.key ), value ); }, get: function ( key ) { var lruEntry = lruHash[key]; if (lruEntry) return refresh( lruEntry ), data[key]; }, remove: function ( key ) { var lruEntry = lruHash[key]; lruEntry && (lruEntry == freshEnd && (freshEnd = lruEntry.p), lruEntry == staleEnd && (staleEnd = lruEntry.n), link( lruEntry.n, lruEntry.p ), delete lruHash[key], delete data[key], size--); }, removeAll: function ( ) { (data = { }), (size = 0), (lruHash = { }), (freshEnd = staleEnd = null); }, destroy: function ( ) { (data = null), (stats = null), (lruHash = null), delete caches[cacheId]; }, info: function ( ) { return extend( { }, stats, { size: size, } ); }, }); function refresh( entry ) { entry != freshEnd && (staleEnd ? staleEnd == entry && (staleEnd = entry.n) : (staleEnd = entry), link( entry.n, entry.p ), link( entry, freshEnd ), ((freshEnd = entry).n = null)); } function link( nextEntry, prevEntry ) { nextEntry != prevEntry && (nextEntry && (nextEntry.p = prevEntry), prevEntry && (prevEntry.n = nextEntry)); } } return ( (cacheFactory.info = function ( ) { var info = { }; return ( forEach( caches, function ( cache, cacheId ) { info[cacheId] = cache.info( ); } ), info ); }), (cacheFactory.get = function ( cacheId ) { return caches[cacheId]; }), cacheFactory ); }; } function $TemplateCacheProvider( ) { this.$get = [ "$cacheFactory", function ( $cacheFactory ) { return $cacheFactory( "templates" ); }, ]; } var $compileMinErr = minErr( "$compile" ); function $CompileProvider( $provide, $$sanitizeUriProvider ) { var hasDirectives = { }, COMMENT_DIRECTIVE_REGEXP = /^\s*directive\:\s*([\d\w\-_]+)\s+(.*)$/, CLASS_DIRECTIVE_REGEXP = /(([\d\w\-_]+)(?:\:([^;]+))?;?)/, EVENT_HANDLER_ATTR_REGEXP = /^(on[a-z]+|formaction)$/; (this.directive = function registerDirective( name, directiveFactory ) { return ( assertNotHasOwnProperty( name, "directive" ), isString( name ) ? (assertArg( directiveFactory, "directiveFactory" ), hasDirectives.hasOwnProperty( name ) || ((hasDirectives[name] = []), $provide.factory( name + "Directive", [ "$injector", "$exceptionHandler", function ( $injector, $exceptionHandler ) { var directives = []; return ( forEach( hasDirectives[name], function ( directiveFactory, index ) { try { var directive = $injector.invoke( directiveFactory ); isFunction( directive ) ? (directive = { compile: valueFn( directive ), }) : !directive.compile && directive.link && (directive.compile = valueFn( directive.link )), (directive.priority = directive.priority || 0), (directive.index = index), (directive.name = directive.name || name), (directive.require = directive.require || (directive.controller && directive.name)), (directive.restrict = directive.restrict || "A"), directives.push( directive ); } catch (e) { $exceptionHandler( e ); } }, ), directives ); }, ] )), hasDirectives[name].push( directiveFactory )) : forEach( name, reverseParams( registerDirective ) ), this ); }), (this.aHrefSanitizationWhitelist = function ( regexp ) { return isDefined( regexp ) ? ($$sanitizeUriProvider.aHrefSanitizationWhitelist( regexp ), this) : $$sanitizeUriProvider.aHrefSanitizationWhitelist( ); }), (this.imgSrcSanitizationWhitelist = function ( regexp ) { return isDefined( regexp ) ? ($$sanitizeUriProvider.imgSrcSanitizationWhitelist( regexp ), this) : $$sanitizeUriProvider.imgSrcSanitizationWhitelist( ); }), (this.$get = [ "$injector", "$interpolate", "$exceptionHandler", "$http", "$templateCache", "$parse", "$controller", "$rootScope", "$document", "$sce", "$animate", "$$sanitizeUri", function ( $injector, $interpolate, $exceptionHandler, $http, $templateCache, $parse, $controller, $rootScope, $document, $sce, $animate, $$sanitizeUri, ) { var Attributes = function ( element, attr ) { (this.$$element = element), (this.$attr = attr || { }); }; Attributes.prototype = { $normalize: directiveNormalize, $addClass: function ( classVal ) { classVal && classVal.length > 0 && $animate.addClass( this.$$element, classVal ); }, $removeClass: function ( classVal ) { classVal && classVal.length > 0 && $animate.removeClass( this.$$element, classVal ); }, $updateClass: function ( newClasses, oldClasses ) { this.$removeClass( tokenDifference( oldClasses, newClasses ) ), this.$addClass( tokenDifference( newClasses, oldClasses ) ); }, $set: function ( key, value, writeAttr, attrName ) { var nodeName, booleanKey = getBooleanAttrName( this.$$element[0], key ); booleanKey && (this.$$element.prop( key, value ), (attrName = booleanKey)), (this[key] = value), attrName ? (this.$attr[key] = attrName) : (attrName = this.$attr[key]) || (this.$attr[key] = attrName = snake_case( key, "-" )), (("A" === (nodeName = nodeName_( this.$$element )) && "href" === key) || ("IMG" === nodeName && "src" === key)) && (this[key] = value = $$sanitizeUri( value, "src" === key )), !1 !== writeAttr && (null == value ? this.$$element.removeAttr( attrName ) : this.$$element.attr( attrName, value )); var $$observers = this.$$observers; $$observers && forEach( $$observers[key], function ( fn ) { try { fn( value ); } catch (e) { $exceptionHandler( e ); } } ); }, $observe: function ( key, fn ) { var attrs = this, $$observers = attrs.$$observers || (attrs.$$observers = { }), listeners = $$observers[key] || ($$observers[key] = []); return ( listeners.push( fn ), $rootScope.$evalAsync( function ( ) { listeners.$$inter || fn( attrs[key] ); } ), fn ); }, }; var startSymbol = $interpolate.startSymbol( ), endSymbol = $interpolate.endSymbol( ), denormalizeTemplate = "{{" == startSymbol || "}}" == endSymbol ? identity : function ( template ) { return template .replace( /\{\{/g, startSymbol ) .replace( /}}/g, endSymbol ); }, NG_ATTR_BINDING = /^ngAttr[A-Z]/; return compile; function compile( $compileNodes, transcludeFn, maxPriority, ignoreDirective, previousCompileContext, ) { $compileNodes instanceof jqLite || ($compileNodes = jqLite( $compileNodes )), forEach( $compileNodes, function ( node, index ) { 3 == node.nodeType && node.nodeValue.match( /\S+/ ) && ($compileNodes[index] = node = jqLite( node ) .wrap( "" ) .parent( )[0]); } ); var compositeLinkFn = compileNodes( $compileNodes, transcludeFn, $compileNodes, maxPriority, ignoreDirective, previousCompileContext, ); return function ( scope, cloneConnectFn, transcludeControllers ) { assertArg( scope, "scope" ); var $linkNode = cloneConnectFn ? JQLitePrototype.clone.call( $compileNodes ) : $compileNodes; forEach( transcludeControllers, function ( instance, name ) { $linkNode.data( "$" + name + "Controller", instance ); } ); for (var i = 0, ii = $linkNode.length; i < ii; i++) { var node = $linkNode[i]; (1 != node.nodeType && 9 != node.nodeType) || $linkNode.eq( i ).data( "$scope", scope ); } return ( safeAddClass( $linkNode, "ng-scope" ), cloneConnectFn && cloneConnectFn( $linkNode, scope ), compositeLinkFn && compositeLinkFn( scope, $linkNode, $linkNode ), $linkNode ); }; } function safeAddClass( $element, className ) { try { $element.addClass( className ); } catch (e) {} } function compileNodes( nodeList, transcludeFn, $rootElement, maxPriority, ignoreDirective, previousCompileContext, ) { for ( var nodeLinkFn, childLinkFn, directives, attrs, linkFnFound, linkFns = [], i = 0; i < nodeList.length; i++ ) (attrs = new Attributes( )), (childLinkFn = ((nodeLinkFn = (directives = collectDirectives( nodeList[i], [], attrs, 0 === i ? maxPriority : undefined, ignoreDirective, )).length ? applyDirectivesToNode( directives, nodeList[i], attrs, transcludeFn, $rootElement, null, [], [], previousCompileContext, ) : null) && nodeLinkFn.terminal) || !nodeList[i].childNodes || !nodeList[i].childNodes.length ? null : compileNodes( nodeList[i].childNodes, nodeLinkFn ? nodeLinkFn.transclude : transcludeFn, )), linkFns.push( nodeLinkFn ), linkFns.push( childLinkFn ), (linkFnFound = linkFnFound || nodeLinkFn || childLinkFn), (previousCompileContext = null); return linkFnFound ? function ( scope, nodeList, $rootElement, boundTranscludeFn ) { var nodeLinkFn, childLinkFn, node, $node, childScope, childTranscludeFn, i, ii, n, stableNodeList = []; for (i = 0, ii = nodeList.length; i < ii; i++) stableNodeList.push( nodeList[i] ); for (i = 0, n = 0, ii = linkFns.length; i < ii; n++) (node = stableNodeList[n]), (nodeLinkFn = linkFns[i++]), (childLinkFn = linkFns[i++]), ($node = jqLite( node )), nodeLinkFn ? (nodeLinkFn.scope ? ((childScope = scope.$new( )), $node.data( "$scope", childScope ), safeAddClass( $node, "ng-scope" )) : (childScope = scope), (childTranscludeFn = nodeLinkFn.transclude), nodeLinkFn( childLinkFn, childScope, node, $rootElement, childTranscludeFn || (!boundTranscludeFn && transcludeFn) ? createBoundTranscludeFn( scope, childTranscludeFn || transcludeFn, ) : boundTranscludeFn, )) : childLinkFn && childLinkFn( scope, node.childNodes, undefined, boundTranscludeFn, ); } : null; } function createBoundTranscludeFn( scope, transcludeFn ) { return function ( transcludedScope, cloneFn, controllers ) { var scopeCreated = !1; transcludedScope || (((transcludedScope = scope.$new( )).$$transcluded = !0), (scopeCreated = !0)); var clone = transcludeFn( transcludedScope, cloneFn, controllers ); return ( scopeCreated && clone.on( "$destroy", bind( transcludedScope, transcludedScope.$destroy ), ), clone ); }; } function collectDirectives( node, directives, attrs, maxPriority, ignoreDirective, ) { var match, className, nodeType = node.nodeType, attrsMap = attrs.$attr; switch (nodeType) { case 1: addDirective( directives, directiveNormalize( nodeName_( node ).toLowerCase( ) ), "E", maxPriority, ignoreDirective, ); for ( var attr, name, nName, ngAttrName, value, nAttrs = node.attributes, j = 0, jj = nAttrs && nAttrs.length; j < jj; j++ ) { var attrStartName = !1, attrEndName = !1; if ( ((attr = nAttrs[j]), !msie || msie >= 8 || attr.specified) ) { (ngAttrName = directiveNormalize( (name = attr.name) )), NG_ATTR_BINDING.test( ngAttrName ) && (name = snake_case( ngAttrName.substr( 6 ), "-" )); var directiveNName = ngAttrName.replace( /(Start|End)$/, "" ); ngAttrName === directiveNName + "Start" && ((attrStartName = name), (attrEndName = name.substr( 0, name.length - 5 ) + "end"), (name = name.substr( 0, name.length - 6 ))), (attrsMap[ (nName = directiveNormalize( name.toLowerCase( ) )) ] = name), (attrs[nName] = value = trim( msie && "href" == name ? decodeURIComponent( node.getAttribute( name, 2 ) ) : attr.value, )), getBooleanAttrName( node, nName ) && (attrs[nName] = !0), addAttrInterpolateDirective( node, directives, value, nName, ), addDirective( directives, nName, "A", maxPriority, ignoreDirective, attrStartName, attrEndName, ); } } if (isString( (className = node.className) ) && "" !== className) for (; (match = CLASS_DIRECTIVE_REGEXP.exec( className )); ) addDirective( directives, (nName = directiveNormalize( match[2] )), "C", maxPriority, ignoreDirective, ) && (attrs[nName] = trim( match[3] )), (className = className.substr( match.index + match[0].length, )); break; case 3: !(function ( directives, text ) { var interpolateFn = $interpolate( text, !0 ); interpolateFn && directives.push( { priority: 0, compile: valueFn( function ( scope, node ) { var parent = node.parent( ), bindings = parent.data( "$binding" ) || []; bindings.push( interpolateFn ), safeAddClass( parent.data( "$binding", bindings ), "ng-binding", ), scope.$watch( interpolateFn, function ( value ) { node[0].nodeValue = value; } ); } ), } ); })( directives, node.nodeValue ); break; case 8: try { (match = COMMENT_DIRECTIVE_REGEXP.exec( node.nodeValue )) && addDirective( directives, (nName = directiveNormalize( match[1] )), "M", maxPriority, ignoreDirective, ) && (attrs[nName] = trim( match[2] )); } catch (e) {} } return directives.sort( byPriority ), directives; } function groupScan( node, attrStart, attrEnd ) { var nodes = [], depth = 0; if ( attrStart && node.hasAttribute && node.hasAttribute( attrStart ) ) { do { if (!node) throw $compileMinErr( "uterdir", "Unterminated attribute, found '{0}' but no matching '{1}' found.", attrStart, attrEnd, ); 1 == node.nodeType && (node.hasAttribute( attrStart ) && depth++, node.hasAttribute( attrEnd ) && depth--), nodes.push( node ), (node = node.nextSibling); } while (depth > 0); } else nodes.push( node ); return jqLite( nodes ); } function groupElementsLinkFnWrapper( linkFn, attrStart, attrEnd ) { return function ( scope, element, attrs, controllers, transcludeFn ) { return ( (element = groupScan( element[0], attrStart, attrEnd )), linkFn( scope, element, attrs, controllers, transcludeFn ) ); }; } function applyDirectivesToNode( directives, compileNode, templateAttrs, transcludeFn, jqCollection, originalReplaceDirective, preLinkFns, postLinkFns, previousCompileContext, ) { previousCompileContext = previousCompileContext || { }; for ( var newScopeDirective, directive, directiveName, $template, linkFn, directiveValue, terminalPriority = -Number.MAX_VALUE, controllerDirectives = previousCompileContext.controllerDirectives, newIsolateScopeDirective = previousCompileContext.newIsolateScopeDirective, templateDirective = previousCompileContext.templateDirective, nonTlbTranscludeDirective = previousCompileContext.nonTlbTranscludeDirective, hasTranscludeDirective = !1, hasElementTranscludeDirective = !1, $compileNode = (templateAttrs.$$element = jqLite( compileNode )), replaceDirective = originalReplaceDirective, childTranscludeFn = transcludeFn, i = 0, ii = directives.length; i < ii; i++ ) { var attrStart = (directive = directives[i]).$$start, attrEnd = directive.$$end; if ( (attrStart && ($compileNode = groupScan( compileNode, attrStart, attrEnd )), ($template = undefined), terminalPriority > directive.priority) ) break; if ( ((directiveValue = directive.scope) && ((newScopeDirective = newScopeDirective || directive), directive.templateUrl || (assertNoDuplicate( "new/isolated scope", newIsolateScopeDirective, directive, $compileNode, ), isObject( directiveValue ) && (newIsolateScopeDirective = directive))), (directiveName = directive.name), !directive.templateUrl && directive.controller && ((directiveValue = directive.controller), assertNoDuplicate( "'" + directiveName + "' controller", (controllerDirectives = controllerDirectives || { })[ directiveName ], directive, $compileNode, ), (controllerDirectives[directiveName] = directive)), (directiveValue = directive.transclude) && ((hasTranscludeDirective = !0), directive.$$tlb || (assertNoDuplicate( "transclusion", nonTlbTranscludeDirective, directive, $compileNode, ), (nonTlbTranscludeDirective = directive)), "element" == directiveValue ? ((hasElementTranscludeDirective = !0), (terminalPriority = directive.priority), ($template = groupScan( compileNode, attrStart, attrEnd )), ($compileNode = templateAttrs.$$element = jqLite( document.createComment( " " + directiveName + ": " + templateAttrs[directiveName] + " ", ), )), (compileNode = $compileNode[0]), replaceWith( jqCollection, jqLite( sliceArgs( $template ) ), compileNode, ), (childTranscludeFn = compile( $template, transcludeFn, terminalPriority, replaceDirective && replaceDirective.name, { nonTlbTranscludeDirective: nonTlbTranscludeDirective, }, ))) : (($template = jqLite( jqLiteClone( compileNode ), ).contents( )), $compileNode.empty( ), (childTranscludeFn = compile( $template, transcludeFn )))), directive.template) ) if ( (assertNoDuplicate( "template", templateDirective, directive, $compileNode, ), (templateDirective = directive), (directiveValue = isFunction( directive.template ) ? directive.template( $compileNode, templateAttrs ) : directive.template), (directiveValue = denormalizeTemplate( directiveValue )), directive.replace) ) { if ( ((replaceDirective = directive), ($template = jqLite( "
" + trim( directiveValue ) + "
", ).contents( )), (compileNode = $template[0]), 1 != $template.length || 1 !== compileNode.nodeType) ) throw $compileMinErr( "tplrt", "Template for directive '{0}' must have exactly one root element. {1}", directiveName, "", ); replaceWith( jqCollection, $compileNode, compileNode ); var newTemplateAttrs = { $attr: { }, }, templateDirectives = collectDirectives( compileNode, [], newTemplateAttrs, ), unprocessedDirectives = directives.splice( i + 1, directives.length - (i + 1), ); newIsolateScopeDirective && markDirectivesAsIsolate( templateDirectives ), (directives = directives .concat( templateDirectives ) .concat( unprocessedDirectives )), mergeTemplateAttributes( templateAttrs, newTemplateAttrs ), (ii = directives.length); } else $compileNode.html( directiveValue ); if (directive.templateUrl) assertNoDuplicate( "template", templateDirective, directive, $compileNode, ), (templateDirective = directive), directive.replace && (replaceDirective = directive), (nodeLinkFn = compileTemplateUrl( directives.splice( i, directives.length - i ), $compileNode, templateAttrs, jqCollection, childTranscludeFn, preLinkFns, postLinkFns, { controllerDirectives: controllerDirectives, newIsolateScopeDirective: newIsolateScopeDirective, templateDirective: templateDirective, nonTlbTranscludeDirective: nonTlbTranscludeDirective, }, )), (ii = directives.length); else if (directive.compile) try { isFunction( (linkFn = directive.compile( $compileNode, templateAttrs, childTranscludeFn, )), ) ? addLinkFns( null, linkFn, attrStart, attrEnd ) : linkFn && addLinkFns( linkFn.pre, linkFn.post, attrStart, attrEnd ); } catch (e) { $exceptionHandler( e, startingTag( $compileNode ) ); } directive.terminal && ((nodeLinkFn.terminal = !0), (terminalPriority = Math.max( terminalPriority, directive.priority, ))); } return ( (nodeLinkFn.scope = newScopeDirective && !0 === newScopeDirective.scope), (nodeLinkFn.transclude = hasTranscludeDirective && childTranscludeFn), nodeLinkFn ); function addLinkFns( pre, post, attrStart, attrEnd ) { pre && (attrStart && (pre = groupElementsLinkFnWrapper( pre, attrStart, attrEnd )), (pre.require = directive.require), (newIsolateScopeDirective === directive || directive.$$isolateScope) && (pre = cloneAndAnnotateFn( pre, { isolateScope: !0, } )), preLinkFns.push( pre )), post && (attrStart && (post = groupElementsLinkFnWrapper( post, attrStart, attrEnd, )), (post.require = directive.require), (newIsolateScopeDirective === directive || directive.$$isolateScope) && (post = cloneAndAnnotateFn( post, { isolateScope: !0, } )), postLinkFns.push( post )); } function getControllers( require, $element, elementControllers ) { var value, retrievalMethod = "data", optional = !1; if (isString( require )) { for (; "^" == (value = require.charAt( 0 )) || "?" == value; ) (require = require.substr( 1 )), "^" == value && (retrievalMethod = "inheritedData"), (optional = optional || "?" == value); if ( ((value = null), elementControllers && "data" === retrievalMethod && (value = elementControllers[require]), !(value = value || $element[retrievalMethod]( "$" + require + "Controller" )) && !optional) ) throw $compileMinErr( "ctreq", "Controller '{0}', required by directive '{1}', can't be found!", require, directiveName, ); return value; } return ( isArray( require ) && ((value = []), forEach( require, function ( require ) { value.push( getControllers( require, $element, elementControllers ), ); } )), value ); } function nodeLinkFn( childLinkFn, scope, linkNode, $rootElement, boundTranscludeFn, ) { var attrs, $element, i, ii, linkFn, controller, isolateScope, transcludeFn, elementControllers = { }; if ( ((attrs = compileNode === linkNode ? templateAttrs : (function ( src, dst ) { for (var key in ((dst = dst || { }), src)) src.hasOwnProperty( key ) && "$$" !== key.substr( 0, 2 ) && (dst[key] = src[key]); return dst; })( templateAttrs, new Attributes( jqLite( linkNode ), templateAttrs.$attr ), )), ($element = attrs.$$element), newIsolateScopeDirective) ) { var LOCAL_REGEXP = /^\s*([@=&])(\??)\s*(\w*)\s*$/, $linkNode = jqLite( linkNode ); (isolateScope = scope.$new( !0 )), templateDirective && templateDirective === newIsolateScopeDirective.$$originalDirective ? $linkNode.data( "$isolateScope", isolateScope ) : $linkNode.data( "$isolateScopeNoTemplate", isolateScope ), safeAddClass( $linkNode, "ng-isolate-scope" ), forEach( newIsolateScopeDirective.scope, function ( definition, scopeName ) { var lastValue, parentGet, parentSet, compare, match = definition.match( LOCAL_REGEXP ) || [], attrName = match[3] || scopeName, optional = "?" == match[2], mode = match[1]; switch ( ((isolateScope.$$isolateBindings[scopeName] = mode + attrName), mode) ) { case "@": attrs.$observe( attrName, function ( value ) { isolateScope[scopeName] = value; } ), (attrs.$$observers[attrName].$$scope = scope), attrs[attrName] && (isolateScope[scopeName] = $interpolate( attrs[attrName], )( scope )); break; case "=": if (optional && !attrs[attrName]) return; (parentGet = $parse( attrs[attrName] )), (compare = parentGet.literal ? equals : function ( a, b ) { return a === b; }), (parentSet = parentGet.assign || function ( ) { throw ( ((lastValue = isolateScope[ scopeName ] = parentGet( scope )), $compileMinErr( "nonassign", "Expression '{0}' used with directive '{1}' is non-assignable!", attrs[attrName], newIsolateScopeDirective.name, )) ); }), (lastValue = isolateScope[scopeName] = parentGet( scope, )), isolateScope.$watch( function ( ) { var parentValue = parentGet( scope ); return ( compare( parentValue, isolateScope[scopeName], ) || (compare( parentValue, lastValue ) ? parentSet( scope, (parentValue = isolateScope[scopeName]), ) : (isolateScope[ scopeName ] = parentValue)), (lastValue = parentValue) ); }, null, parentGet.literal, ); break; case "&": (parentGet = $parse( attrs[attrName] )), (isolateScope[scopeName] = function ( locals ) { return parentGet( scope, locals ); }); break; default: throw $compileMinErr( "iscp", "Invalid isolate scope definition for directive '{0}'. Definition: {... {1}: '{2}' ...}", newIsolateScopeDirective.name, scopeName, definition, ); } }, ); } for ( transcludeFn = boundTranscludeFn && function ( scope, cloneAttachFn ) { var transcludeControllers; arguments.length < 2 && ((cloneAttachFn = scope), (scope = undefined)); hasElementTranscludeDirective && (transcludeControllers = elementControllers); return boundTranscludeFn( scope, cloneAttachFn, transcludeControllers, ); }, controllerDirectives && forEach( controllerDirectives, function ( directive ) { var controllerInstance, locals = { $scope: directive === newIsolateScopeDirective || directive.$$isolateScope ? isolateScope : scope, $element: $element, $attrs: attrs, $transclude: transcludeFn, }; "@" == (controller = directive.controller) && (controller = attrs[directive.name]), (controllerInstance = $controller( controller, locals )), (elementControllers[ directive.name ] = controllerInstance), hasElementTranscludeDirective || $element.data( "$" + directive.name + "Controller", controllerInstance, ), directive.controllerAs && (locals.$scope[ directive.controllerAs ] = controllerInstance); } ), i = 0, ii = preLinkFns.length; i < ii; i++ ) try { (linkFn = preLinkFns[i])( linkFn.isolateScope ? isolateScope : scope, $element, attrs, linkFn.require && getControllers( linkFn.require, $element, elementControllers, ), transcludeFn, ); } catch (e) { $exceptionHandler( e, startingTag( $element ) ); } var scopeToChild = scope; for ( newIsolateScopeDirective && (newIsolateScopeDirective.template || null === newIsolateScopeDirective.templateUrl) && (scopeToChild = isolateScope), childLinkFn && childLinkFn( scopeToChild, linkNode.childNodes, undefined, boundTranscludeFn, ), i = postLinkFns.length - 1; i >= 0; i-- ) try { (linkFn = postLinkFns[i])( linkFn.isolateScope ? isolateScope : scope, $element, attrs, linkFn.require && getControllers( linkFn.require, $element, elementControllers, ), transcludeFn, ); } catch (e) { $exceptionHandler( e, startingTag( $element ) ); } } } function markDirectivesAsIsolate( directives ) { for (var j = 0, jj = directives.length; j < jj; j++) directives[j] = inherit( directives[j], { $$isolateScope: !0, } ); } function addDirective( tDirectives, name, location, maxPriority, ignoreDirective, startAttrName, endAttrName, ) { if (name === ignoreDirective) return null; var match = null; if (hasDirectives.hasOwnProperty( name )) for ( var directive, directives = $injector.get( name + "Directive" ), i = 0, ii = directives.length; i < ii; i++ ) try { (directive = directives[i]), (undefined === maxPriority || maxPriority > directive.priority) && -1 != directive.restrict.indexOf( location ) && (startAttrName && (directive = inherit( directive, { $$start: startAttrName, $$end: endAttrName, } )), tDirectives.push( directive ), (match = directive)); } catch (e) { $exceptionHandler( e ); } return match; } function mergeTemplateAttributes( dst, src ) { var srcAttr = src.$attr, dstAttr = dst.$attr, $element = dst.$$element; forEach( dst, function ( value, key ) { "$" != key.charAt( 0 ) && (src[key] && (value += ("style" === key ? ";" : " ") + src[key]), dst.$set( key, value, !0, srcAttr[key] )); } ), forEach( src, function ( value, key ) { "class" == key ? (safeAddClass( $element, value ), (dst.class = (dst.class ? dst.class + " " : "") + value)) : "style" == key ? ($element.attr( "style", $element.attr( "style" ) + ";" + value, ), (dst.style = (dst.style ? dst.style + ";" : "") + value)) : "$" == key.charAt( 0 ) || dst.hasOwnProperty( key ) || ((dst[key] = value), (dstAttr[key] = srcAttr[key])); } ); } function compileTemplateUrl( directives, $compileNode, tAttrs, $rootElement, childTranscludeFn, preLinkFns, postLinkFns, previousCompileContext, ) { var afterTemplateNodeLinkFn, afterTemplateChildLinkFn, linkQueue = [], beforeTemplateCompileNode = $compileNode[0], origAsyncDirective = directives.shift( ), derivedSyncDirective = extend( { }, origAsyncDirective, { templateUrl: null, transclude: null, replace: null, $$originalDirective: origAsyncDirective, } ), templateUrl = isFunction( origAsyncDirective.templateUrl ) ? origAsyncDirective.templateUrl( $compileNode, tAttrs ) : origAsyncDirective.templateUrl; return ( $compileNode.empty( ), $http .get( $sce.getTrustedResourceUrl( templateUrl ), { cache: $templateCache, } ) .success( function ( content ) { var compileNode, tempTemplateAttrs, $template, childBoundTranscludeFn; if ( ((content = denormalizeTemplate( content )), origAsyncDirective.replace) ) { if ( (($template = jqLite( "
" + trim( content ) + "
", ).contents( )), (compileNode = $template[0]), 1 != $template.length || 1 !== compileNode.nodeType) ) throw $compileMinErr( "tplrt", "Template for directive '{0}' must have exactly one root element. {1}", origAsyncDirective.name, templateUrl, ); (tempTemplateAttrs = { $attr: { }, }), replaceWith( $rootElement, $compileNode, compileNode ); var templateDirectives = collectDirectives( compileNode, [], tempTemplateAttrs, ); isObject( origAsyncDirective.scope ) && markDirectivesAsIsolate( templateDirectives ), (directives = templateDirectives.concat( directives )), mergeTemplateAttributes( tAttrs, tempTemplateAttrs ); } else (compileNode = beforeTemplateCompileNode), $compileNode.html( content ); for ( directives.unshift( derivedSyncDirective ), afterTemplateNodeLinkFn = applyDirectivesToNode( directives, compileNode, tAttrs, childTranscludeFn, $compileNode, origAsyncDirective, preLinkFns, postLinkFns, previousCompileContext, ), forEach( $rootElement, function ( node, i ) { node == compileNode && ($rootElement[i] = $compileNode[0]); } ), afterTemplateChildLinkFn = compileNodes( $compileNode[0].childNodes, childTranscludeFn, ); linkQueue.length; ) { var scope = linkQueue.shift( ), beforeTemplateLinkNode = linkQueue.shift( ), linkRootElement = linkQueue.shift( ), boundTranscludeFn = linkQueue.shift( ), linkNode = $compileNode[0]; beforeTemplateLinkNode !== beforeTemplateCompileNode && ((linkNode = jqLiteClone( compileNode )), replaceWith( linkRootElement, jqLite( beforeTemplateLinkNode ), linkNode, )), (childBoundTranscludeFn = afterTemplateNodeLinkFn.transclude ? createBoundTranscludeFn( scope, afterTemplateNodeLinkFn.transclude, ) : boundTranscludeFn), afterTemplateNodeLinkFn( afterTemplateChildLinkFn, scope, linkNode, $rootElement, childBoundTranscludeFn, ); } linkQueue = null; } ) .error( function ( response, code, headers, config ) { throw $compileMinErr( "tpload", "Failed to load template: {0}", config.url, ); } ), function ( ignoreChildLinkFn, scope, node, rootElement, boundTranscludeFn, ) { linkQueue ? (linkQueue.push( scope ), linkQueue.push( node ), linkQueue.push( rootElement ), linkQueue.push( boundTranscludeFn )) : afterTemplateNodeLinkFn( afterTemplateChildLinkFn, scope, node, rootElement, boundTranscludeFn, ); } ); } function byPriority( a, b ) { var diff = b.priority - a.priority; return 0 !== diff ? diff : a.name !== b.name ? a.name < b.name ? -1 : 1 : a.index - b.index; } function assertNoDuplicate( what, previousDirective, directive, element, ) { if (previousDirective) throw $compileMinErr( "multidir", "Multiple directives [{0}, {1}] asking for {2} on: {3}", previousDirective.name, directive.name, what, startingTag( element ), ); } function addAttrInterpolateDirective( node, directives, value, name ) { var interpolateFn = $interpolate( value, !0 ); if (interpolateFn) { if ("multiple" === name && "SELECT" === nodeName_( node )) throw $compileMinErr( "selmulti", "Binding to the 'multiple' attribute is not supported. Element: {0}", startingTag( node ), ); directives.push( { priority: 100, compile: function ( ) { return { pre: function ( scope, element, attr ) { var $$observers = attr.$$observers || (attr.$$observers = { }); if (EVENT_HANDLER_ATTR_REGEXP.test( name )) throw $compileMinErr( "nodomevents", "Interpolations for HTML DOM event attributes are disallowed. Please use the ng- versions (such as ng-click instead of onclick) instead.", ); (interpolateFn = $interpolate( attr[name], !0, (function ( node, attrNormalizedName ) { if ("srcdoc" == attrNormalizedName) return $sce.HTML; var tag = nodeName_( node ); return "xlinkHref" == attrNormalizedName || ("FORM" == tag && "action" == attrNormalizedName) || ("IMG" != tag && ("src" == attrNormalizedName || "ngSrc" == attrNormalizedName)) ? $sce.RESOURCE_URL : void 0; })( node, name ), )) && ((attr[name] = interpolateFn( scope )), (( $$observers[name] || ($$observers[name] = []) ).$$inter = !0), ( (attr.$$observers && attr.$$observers[name].$$scope) || scope ).$watch( interpolateFn, function ( newValue, oldValue ) { "class" === name && newValue != oldValue ? attr.$updateClass( newValue, oldValue ) : attr.$set( name, newValue ); } )); }, }; }, } ); } } function replaceWith( $rootElement, elementsToRemove, newNode ) { var i, ii, firstElementToRemove = elementsToRemove[0], removeCount = elementsToRemove.length, parent = firstElementToRemove.parentNode; if ($rootElement) for (i = 0, ii = $rootElement.length; i < ii; i++) if ($rootElement[i] == firstElementToRemove) { $rootElement[i++] = newNode; for ( var j = i, j2 = j + removeCount - 1, jj = $rootElement.length; j < jj; j++, j2++ ) j2 < jj ? ($rootElement[j] = $rootElement[j2]) : delete $rootElement[j]; $rootElement.length -= removeCount - 1; break; } parent && parent.replaceChild( newNode, firstElementToRemove ); var fragment = document.createDocumentFragment( ); fragment.appendChild( firstElementToRemove ), (newNode[jqLite.expando] = firstElementToRemove[jqLite.expando]); for (var k = 1, kk = elementsToRemove.length; k < kk; k++) { var element = elementsToRemove[k]; jqLite( element ).remove( ), fragment.appendChild( element ), delete elementsToRemove[k]; } (elementsToRemove[0] = newNode), (elementsToRemove.length = 1); } function cloneAndAnnotateFn( fn, annotation ) { return extend( function ( ) { return fn.apply( null, arguments ); }, fn, annotation, ); } }, ]); } $CompileProvider.$inject = ["$provide", "$$sanitizeUriProvider",]; var PREFIX_REGEXP = /^(x[\:\-_]|data[\:\-_])/i; function directiveNormalize( name ) { return camelCase( name.replace( PREFIX_REGEXP, "" ) ); } function tokenDifference( str1, str2 ) { var values = "", tokens1 = str1.split( /\s+/ ), tokens2 = str2.split( /\s+/ ); outer: for (var i = 0; i < tokens1.length; i++) { for (var token = tokens1[i], j = 0; j < tokens2.length; j++) if (token == tokens2[j]) continue outer; values += (values.length > 0 ? " " : "") + token; } return values; } function $ControllerProvider( ) { var controllers = { }, CNTRL_REG = /^(\S+)(\s+as\s+(\w+))?$/; (this.register = function ( name, constructor ) { assertNotHasOwnProperty( name, "controller" ), isObject( name ) ? extend( controllers, name ) : (controllers[name] = constructor); }), (this.$get = [ "$injector", "$window", function ( $injector, $window ) { return function ( expression, locals ) { var instance, match, constructor, identifier; if ( (isString( expression ) && ((constructor = (match = expression.match( CNTRL_REG ))[1]), (identifier = match[3]), assertArgFn( (expression = controllers.hasOwnProperty( constructor ) ? controllers[constructor] : getter( locals.$scope, constructor, !0 ) || getter( $window, constructor, !0 )), constructor, !0, )), (instance = $injector.instantiate( expression, locals )), identifier) ) { if (!locals || "object" != typeof locals.$scope) throw minErr( "$controller" )( "noscp", "Cannot export controller '{0}' as '{1}'! No $scope object provided via `locals`.", constructor || expression.name, identifier, ); locals.$scope[identifier] = instance; } return instance; }; }, ]); } function $DocumentProvider( ) { this.$get = [ "$window", function ( window ) { return jqLite( window.document ); }, ]; } function $ExceptionHandlerProvider( ) { this.$get = [ "$log", function ( $log ) { return function ( exception, cause ) { $log.error.apply( $log, arguments ); }; }, ]; } function parseHeaders( headers ) { var key, val, i, parsed = { }; return headers ? (forEach( headers.split( "\n" ), function ( line ) { (i = line.indexOf( ":" )), (key = lowercase( trim( line.substr( 0, i ) ) )), (val = trim( line.substr( i + 1 ) )), key && (parsed[key] ? (parsed[key] += ", " + val) : (parsed[key] = val)); } ), parsed) : parsed; } function headersGetter( headers ) { var headersObj = isObject( headers ) ? headers : undefined; return function ( name ) { return ( headersObj || (headersObj = parseHeaders( headers )), name ? headersObj[lowercase( name )] || null : headersObj ); }; } function transformData( data, headers, fns ) { return isFunction( fns ) ? fns( data, headers ) : (forEach( fns, function ( fn ) { data = fn( data, headers ); } ), data); } function isSuccess( status ) { return 200 <= status && status < 300; } function $HttpProvider( ) { var JSON_START = /^\s*(\[|\{[^\{])/, JSON_END = /[\}\]]\s*$/, PROTECTION_PREFIX = /^\)\]\}',?\n/, CONTENT_TYPE_APPLICATION_JSON = { "Content-Type": "application/json;charset=utf-8", }, defaults = (this.defaults = { transformResponse: [ function ( data ) { return ( isString( data ) && ((data = data.replace( PROTECTION_PREFIX, "" )), JSON_START.test( data ) && JSON_END.test( data ) && (data = fromJson( data ))), data ); }, ], transformRequest: [ function ( d ) { return isObject( d ) && ((obj = d), "[object File]" !== toString.call( obj )) ? toJson( d ) : d; var obj; }, ], headers: { common: { Accept: "application/json, text/plain, */*", }, post: CONTENT_TYPE_APPLICATION_JSON, put: CONTENT_TYPE_APPLICATION_JSON, patch: CONTENT_TYPE_APPLICATION_JSON, }, xsrfCookieName: "XSRF-TOKEN", xsrfHeaderName: "X-XSRF-TOKEN", }), interceptorFactories = (this.interceptors = []), responseInterceptorFactories = (this.responseInterceptors = []); this.$get = [ "$httpBackend", "$browser", "$cacheFactory", "$rootScope", "$q", "$injector", function ( $httpBackend, $browser, $cacheFactory, $rootScope, $q, $injector, ) { var defaultCache = $cacheFactory( "$http" ), reversedInterceptors = []; function $http( requestConfig ) { var config = { transformRequest: defaults.transformRequest, transformResponse: defaults.transformResponse, }, headers = (function ( config ) { var defHeaderName, lowercaseDefHeaderName, reqHeaderName, defHeaders = defaults.headers, reqHeaders = extend( { }, config.headers ); execHeaders( (defHeaders = extend( { }, defHeaders.common, defHeaders[lowercase( config.method )], )), ), execHeaders( reqHeaders ); defaultHeadersIteration: for (defHeaderName in defHeaders) { for (reqHeaderName in ((lowercaseDefHeaderName = lowercase( defHeaderName, )), reqHeaders)) if (lowercase( reqHeaderName ) === lowercaseDefHeaderName) continue defaultHeadersIteration; reqHeaders[defHeaderName] = defHeaders[defHeaderName]; } return reqHeaders; function execHeaders( headers ) { var headerContent; forEach( headers, function ( headerFn, header ) { isFunction( headerFn ) && (null != (headerContent = headerFn( )) ? (headers[header] = headerContent) : delete headers[header]); } ); } })( requestConfig ); extend( config, requestConfig ), (config.headers = headers), (config.method = uppercase( config.method )); var xsrfValue = urlIsSameOrigin( config.url ) ? $browser.cookies( )[ config.xsrfCookieName || defaults.xsrfCookieName ] : undefined; xsrfValue && (headers[ config.xsrfHeaderName || defaults.xsrfHeaderName ] = xsrfValue); var chain = [ function ( config ) { headers = config.headers; var reqData = transformData( config.data, headersGetter( headers ), config.transformRequest, ); return ( isUndefined( config.data ) && forEach( headers, function ( value, header ) { "content-type" === lowercase( header ) && delete headers[header]; } ), isUndefined( config.withCredentials ) && !isUndefined( defaults.withCredentials ) && (config.withCredentials = defaults.withCredentials), (function ( config, reqData, reqHeaders ) { var cache, cachedResp, deferred = $q.defer( ), promise = deferred.promise, url = (function ( url, params ) { if (!params) return url; var parts = []; return ( (function ( obj, iterator, context ) { for ( var keys = sortedKeys( obj ), i = 0; i < keys.length; i++ ) iterator.call( context, obj[keys[i]], keys[i] ); })( params, function ( value, key ) { null === value || isUndefined( value ) || (isArray( value ) || (value = [value,]), forEach( value, function ( v ) { isObject( v ) && (v = toJson( v )), parts.push( encodeUriQuery( key ) + "=" + encodeUriQuery( v ), ); } )); } ), url + (-1 == url.indexOf( "?" ) ? "?" : "&") + parts.join( "&" ) ); })( config.url, config.params ); $http.pendingRequests.push( config ), promise.then( removePendingReq, removePendingReq ), (config.cache || defaults.cache) && !1 !== config.cache && "GET" == config.method && (cache = isObject( config.cache ) ? config.cache : isObject( defaults.cache ) ? defaults.cache : defaultCache); if (cache) if (isDefined( (cachedResp = cache.get( url )) )) { if (cachedResp.then) return ( cachedResp.then( removePendingReq, removePendingReq ), cachedResp ); isArray( cachedResp ) ? resolvePromise( cachedResp[1], cachedResp[0], copy( cachedResp[2] ), ) : resolvePromise( cachedResp, 200, { } ); } else cache.put( url, promise ); isUndefined( cachedResp ) && $httpBackend( config.method, url, reqData, done, reqHeaders, config.timeout, config.withCredentials, config.responseType, ); return promise; function done( status, response, headersString ) { cache && (isSuccess( status ) ? cache.put( url, [ status, response, parseHeaders( headersString ), ] ) : cache.remove( url )), resolvePromise( response, status, headersString ), $rootScope.$$phase || $rootScope.$apply( ); } function resolvePromise( response, status, headers ) { (isSuccess( (status = Math.max( status, 0 )) ) ? deferred.resolve : deferred.reject)( { data: response, status: status, headers: headersGetter( headers ), config: config, } ); } function removePendingReq( ) { var idx = indexOf( $http.pendingRequests, config ); -1 !== idx && $http.pendingRequests.splice( idx, 1 ); } })( config, reqData, headers ).then( transformResponse, transformResponse, ) ); }, undefined, ], promise = $q.when( config ); for ( forEach( reversedInterceptors, function ( interceptor ) { (interceptor.request || interceptor.requestError) && chain.unshift( interceptor.request, interceptor.requestError ), (interceptor.response || interceptor.responseError) && chain.push( interceptor.response, interceptor.responseError ); } ); chain.length; ) { var thenFn = chain.shift( ), rejectFn = chain.shift( ); promise = promise.then( thenFn, rejectFn ); } return ( (promise.success = function ( fn ) { return ( promise.then( function ( response ) { fn( response.data, response.status, response.headers, config ); } ), promise ); }), (promise.error = function ( fn ) { return ( promise.then( null, function ( response ) { fn( response.data, response.status, response.headers, config ); } ), promise ); }), promise ); function transformResponse( response ) { var resp = extend( { }, response, { data: transformData( response.data, response.headers, config.transformResponse, ), } ); return isSuccess( response.status ) ? resp : $q.reject( resp ); } } return ( forEach( interceptorFactories, function ( interceptorFactory ) { reversedInterceptors.unshift( isString( interceptorFactory ) ? $injector.get( interceptorFactory ) : $injector.invoke( interceptorFactory ), ); } ), forEach( responseInterceptorFactories, function ( interceptorFactory, index ) { var responseFn = isString( interceptorFactory ) ? $injector.get( interceptorFactory ) : $injector.invoke( interceptorFactory ); reversedInterceptors.splice( index, 0, { response: function ( response ) { return responseFn( $q.when( response ) ); }, responseError: function ( response ) { return responseFn( $q.reject( response ) ); }, } ); }, ), ($http.pendingRequests = []), (function ( names ) { forEach( arguments, function ( name ) { $http[name] = function ( url, config ) { return $http( extend( config || { }, { method: name, url: url, } ) ); }; } ); })( "get", "delete", "head", "jsonp" ), (function ( name ) { forEach( arguments, function ( name ) { $http[name] = function ( url, data, config ) { return $http( extend( config || { }, { method: name, url: url, data: data, } ), ); }; } ); })( "post", "put" ), ($http.defaults = defaults), $http ); }, ]; } var XHR = window.XMLHttpRequest || function ( ) { try { return new ActiveXObject( "Msxml2.XMLHTTP.6.0" ); } catch (e1) {} try { return new ActiveXObject( "Msxml2.XMLHTTP.3.0" ); } catch (e2) {} try { return new ActiveXObject( "Msxml2.XMLHTTP" ); } catch (e3) {} throw minErr( "$httpBackend" )( "noxhr", "This browser does not support XMLHttpRequest.", ); }; function $HttpBackendProvider( ) { this.$get = [ "$browser", "$window", "$document", function ( $browser, $window, $document ) { return (function ( $browser, XHR, $browserDefer, callbacks, rawDocument, ) { var ABORTED = -1; return function ( method, url, post, callback, headers, timeout, withCredentials, responseType, ) { var status; if ( ($browser.$$incOutstandingRequestCount( ), (url = url || $browser.url( )), "jsonp" == lowercase( method )) ) { var callbackId = "_" + (callbacks.counter++).toString( 36 ); callbacks[callbackId] = function ( data ) { callbacks[callbackId].data = data; }; var jsonpDone = jsonpReq( url.replace( "JSON_CALLBACK", "angular.callbacks." + callbackId ), function ( ) { callbacks[callbackId].data ? completeRequest( callback, 200, callbacks[callbackId].data ) : completeRequest( callback, status || -2 ), delete callbacks[callbackId]; }, ); } else { var xhr = new XHR( ); xhr.open( method, url, !0 ), forEach( headers, function ( value, key ) { isDefined( value ) && xhr.setRequestHeader( key, value ); } ), (xhr.onreadystatechange = function ( ) { if (4 == xhr.readyState) { var responseHeaders = null, response = null; status !== ABORTED && ((responseHeaders = xhr.getAllResponseHeaders( )), (response = xhr.responseType ? xhr.response : xhr.responseText)), completeRequest( callback, status || xhr.status, response, responseHeaders, ); } }), withCredentials && (xhr.withCredentials = !0), responseType && (xhr.responseType = responseType), xhr.send( post || null ); } if (timeout > 0) var timeoutId = $browserDefer( timeoutRequest, timeout ); else timeout && timeout.then && timeout.then( timeoutRequest ); function timeoutRequest( ) { (status = ABORTED), jsonpDone && jsonpDone( ), xhr && xhr.abort( ); } function completeRequest( callback, status, response, headersString, ) { var protocol = urlResolve( url ).protocol; timeoutId && $browserDefer.cancel( timeoutId ), (jsonpDone = xhr = null), callback( (status = 1223 == (status = "file" == protocol && 0 === status ? response ? 200 : 404 : status) ? 204 : status), response, headersString, ), $browser.$$completeOutstandingRequest( noop ); } }; function jsonpReq( url, done ) { var script = rawDocument.createElement( "script" ), doneWrapper = function ( ) { (script.onreadystatechange = script.onload = script.onerror = null), rawDocument.body.removeChild( script ), done && done( ); }; return ( (script.type = "text/javascript"), (script.src = url), msie && msie <= 8 ? (script.onreadystatechange = function ( ) { /loaded|complete/.test( script.readyState ) && doneWrapper( ); }) : (script.onload = script.onerror = function ( ) { doneWrapper( ); }), rawDocument.body.appendChild( script ), doneWrapper ); } })( $browser, XHR, $browser.defer, $window.angular.callbacks, $document[0], ); }, ]; } var $interpolateMinErr = minErr( "$interpolate" ); function $InterpolateProvider( ) { var startSymbol = "{{", endSymbol = "}}"; (this.startSymbol = function ( value ) { return value ? ((startSymbol = value), this) : startSymbol; }), (this.endSymbol = function ( value ) { return value ? ((endSymbol = value), this) : endSymbol; }), (this.$get = [ "$parse", "$exceptionHandler", "$sce", function ( $parse, $exceptionHandler, $sce ) { var startSymbolLength = startSymbol.length, endSymbolLength = endSymbol.length; function $interpolate( text, mustHaveExpression, trustedContext ) { for ( var startIndex, endIndex, fn, exp, index = 0, parts = [], length = text.length, hasInterpolation = !1, concat = []; index < length; ) -1 != (startIndex = text.indexOf( startSymbol, index )) && -1 != (endIndex = text.indexOf( endSymbol, startIndex + startSymbolLength, )) ? (index != startIndex && parts.push( text.substring( index, startIndex ) ), parts.push( (fn = $parse( (exp = text.substring( startIndex + startSymbolLength, endIndex, )), )), ), (fn.exp = exp), (index = endIndex + endSymbolLength), (hasInterpolation = !0)) : (index != length && parts.push( text.substring( index ) ), (index = length)); if ( ((length = parts.length) || (parts.push( "" ), (length = 1)), trustedContext && parts.length > 1) ) throw $interpolateMinErr( "noconcat", "Error while interpolating: {0}\nStrict Contextual Escaping disallows interpolations that concatenate multiple expressions when a trusted value is required. See http://docs.angularjs.org/api/ng.$sce", text, ); if (!mustHaveExpression || hasInterpolation) return ( (concat.length = length), ((fn = function ( context ) { try { for (var part, i = 0, ii = length; i < ii; i++) "function" == typeof (part = parts[i]) && ((part = part( context )), null === (part = trustedContext ? $sce.getTrusted( trustedContext, part ) : $sce.valueOf( part )) || isUndefined( part ) ? (part = "") : "string" != typeof part && (part = toJson( part ))), (concat[i] = part); return concat.join( "" ); } catch (err) { var newErr = $interpolateMinErr( "interr", "Can't interpolate: {0}\n{1}", text, err.toString( ), ); $exceptionHandler( newErr ); } }).exp = text), (fn.parts = parts), fn ); } return ( ($interpolate.startSymbol = function ( ) { return startSymbol; }), ($interpolate.endSymbol = function ( ) { return endSymbol; }), $interpolate ); }, ]); } function $IntervalProvider( ) { this.$get = [ "$rootScope", "$window", "$q", function ( $rootScope, $window, $q ) { var intervals = { }; function interval( fn, delay, count, invokeApply ) { var setInterval = $window.setInterval, clearInterval = $window.clearInterval, deferred = $q.defer( ), promise = deferred.promise, iteration = 0, skipApply = isDefined( invokeApply ) && !invokeApply; return ( (count = isDefined( count ) ? count : 0), promise.then( null, null, fn ), (promise.$$intervalId = setInterval( function ( ) { deferred.notify( iteration++ ), count > 0 && iteration >= count && (deferred.resolve( iteration ), clearInterval( promise.$$intervalId ), delete intervals[promise.$$intervalId]), skipApply || $rootScope.$apply( ); }, delay )), (intervals[promise.$$intervalId] = deferred), promise ); } return ( (interval.cancel = function ( promise ) { return ( !(!promise || !(promise.$$intervalId in intervals)) && (intervals[promise.$$intervalId].reject( "canceled" ), clearInterval( promise.$$intervalId ), delete intervals[promise.$$intervalId], !0) ); }), interval ); }, ]; } function $LocaleProvider( ) { this.$get = function ( ) { return { id: "en-us", NUMBER_FORMATS: { DECIMAL_SEP: ".", GROUP_SEP: ",", PATTERNS: [ { minInt: 1, minFrac: 0, maxFrac: 3, posPre: "", posSuf: "", negPre: "-", negSuf: "", gSize: 3, lgSize: 3, }, { minInt: 1, minFrac: 2, maxFrac: 2, posPre: "¤", posSuf: "", negPre: "(¤", negSuf: ")", gSize: 3, lgSize: 3, }, ], CURRENCY_SYM: "$", }, DATETIME_FORMATS: { MONTH: "January,February,March,April,May,June,July,August,September,October,November,December".split( ",", ), SHORTMONTH: "Jan,Feb,Mar,Apr,May,Jun,Jul,Aug,Sep,Oct,Nov,Dec".split( ",", ), DAY: "Sunday,Monday,Tuesday,Wednesday,Thursday,Friday,Saturday".split( ",", ), SHORTDAY: "Sun,Mon,Tue,Wed,Thu,Fri,Sat".split( "," ), AMPMS: ["AM", "PM",], medium: "MMM d, y h:mm:ss a", short: "M/d/yy h:mm a", fullDate: "EEEE, MMMM d, y", longDate: "MMMM d, y", mediumDate: "MMM d, y", shortDate: "M/d/yy", mediumTime: "h:mm:ss a", shortTime: "h:mm a", }, pluralCat: function ( num ) { return 1 === num ? "one" : "other"; }, }; }; } var PATH_MATCH = /^([^\?#]*)(\?([^#]*))?(#(.*))?$/, DEFAULT_PORTS = { http: 80, https: 443, ftp: 21, }, $locationMinErr = minErr( "$location" ); function encodePath( path ) { for (var segments = path.split( "/" ), i = segments.length; i--; ) segments[i] = encodeUriSegment( segments[i] ); return segments.join( "/" ); } function parseAbsoluteUrl( absoluteUrl, locationObj, appBase ) { var parsedUrl = urlResolve( absoluteUrl, appBase ); (locationObj.$$protocol = parsedUrl.protocol), (locationObj.$$host = parsedUrl.hostname), (locationObj.$$port = int( parsedUrl.port ) || DEFAULT_PORTS[parsedUrl.protocol] || null); } function parseAppUrl( relativeUrl, locationObj, appBase ) { var prefixed = "/" !== relativeUrl.charAt( 0 ); prefixed && (relativeUrl = "/" + relativeUrl); var match = urlResolve( relativeUrl, appBase ); (locationObj.$$path = decodeURIComponent( prefixed && "/" === match.pathname.charAt( 0 ) ? match.pathname.substring( 1 ) : match.pathname, )), (locationObj.$$search = parseKeyValue( match.search )), (locationObj.$$hash = decodeURIComponent( match.hash )), locationObj.$$path && "/" != locationObj.$$path.charAt( 0 ) && (locationObj.$$path = "/" + locationObj.$$path); } function beginsWith( begin, whole ) { if (0 === whole.indexOf( begin )) return whole.substr( begin.length ); } function stripHash( url ) { var index = url.indexOf( "#" ); return -1 == index ? url : url.substr( 0, index ); } function stripFile( url ) { return url.substr( 0, stripHash( url ).lastIndexOf( "/" ) + 1 ); } function LocationHtml5Url( appBase, basePrefix ) { (this.$$html5 = !0), (basePrefix = basePrefix || ""); var appBaseNoFile = stripFile( appBase ); parseAbsoluteUrl( appBase, this, appBase ), (this.$$parse = function ( url ) { var pathUrl = beginsWith( appBaseNoFile, url ); if (!isString( pathUrl )) throw $locationMinErr( "ipthprfx", 'Invalid url "{0}", missing path prefix "{1}".', url, appBaseNoFile, ); parseAppUrl( pathUrl, this, appBase ), this.$$path || (this.$$path = "/"), this.$$compose( ); }), (this.$$compose = function ( ) { var search = toKeyValue( this.$$search ), hash = this.$$hash ? "#" + encodeUriSegment( this.$$hash ) : ""; (this.$$url = encodePath( this.$$path ) + (search ? "?" + search : "") + hash), (this.$$absUrl = appBaseNoFile + this.$$url.substr( 1 )); }), (this.$$rewrite = function ( url ) { var appUrl, prevAppUrl; return undefined !== (appUrl = beginsWith( appBase, url )) ? ((prevAppUrl = appUrl), undefined !== (appUrl = beginsWith( basePrefix, appUrl )) ? appBaseNoFile + (beginsWith( "/", appUrl ) || appUrl) : appBase + prevAppUrl) : undefined !== (appUrl = beginsWith( appBaseNoFile, url )) ? appBaseNoFile + appUrl : appBaseNoFile == url + "/" ? appBaseNoFile : void 0; }); } function LocationHashbangUrl( appBase, hashPrefix ) { var appBaseNoFile = stripFile( appBase ); parseAbsoluteUrl( appBase, this, appBase ), (this.$$parse = function ( url ) { var withoutBaseUrl = beginsWith( appBase, url ) || beginsWith( appBaseNoFile, url ), withoutHashUrl = "#" == withoutBaseUrl.charAt( 0 ) ? beginsWith( hashPrefix, withoutBaseUrl ) : this.$$html5 ? withoutBaseUrl : ""; if (!isString( withoutHashUrl )) throw $locationMinErr( "ihshprfx", 'Invalid url "{0}", missing hash prefix "{1}".', url, hashPrefix, ); parseAppUrl( withoutHashUrl, this, appBase ), (this.$$path = (function ( path, url, base ) { var firstPathSegmentMatch, windowsFilePathExp = /^\/?.*?:(\/.*)/; 0 === url.indexOf( base ) && (url = url.replace( base, "" )); if (windowsFilePathExp.exec( url )) return path; return (firstPathSegmentMatch = windowsFilePathExp.exec( path )) ? firstPathSegmentMatch[1] : path; })( this.$$path, withoutHashUrl, appBase )), this.$$compose( ); }), (this.$$compose = function ( ) { var search = toKeyValue( this.$$search ), hash = this.$$hash ? "#" + encodeUriSegment( this.$$hash ) : ""; (this.$$url = encodePath( this.$$path ) + (search ? "?" + search : "") + hash), (this.$$absUrl = appBase + (this.$$url ? hashPrefix + this.$$url : "")); }), (this.$$rewrite = function ( url ) { if (stripHash( appBase ) == stripHash( url )) return url; }); } function LocationHashbangInHtml5Url( appBase, hashPrefix ) { (this.$$html5 = !0), LocationHashbangUrl.apply( this, arguments ); var appBaseNoFile = stripFile( appBase ); this.$$rewrite = function ( url ) { var appUrl; return appBase == stripHash( url ) ? url : (appUrl = beginsWith( appBaseNoFile, url )) ? appBase + hashPrefix + appUrl : appBaseNoFile === url + "/" ? appBaseNoFile : void 0; }; } function locationGetter( property ) { return function ( ) { return this[property]; }; } function locationGetterSetter( property, preprocess ) { return function ( value ) { return isUndefined( value ) ? this[property] : ((this[property] = preprocess( value )), this.$$compose( ), this); }; } function $LocationProvider( ) { var hashPrefix = "", html5Mode = !1; (this.hashPrefix = function ( prefix ) { return isDefined( prefix ) ? ((hashPrefix = prefix), this) : hashPrefix; }), (this.html5Mode = function ( mode ) { return isDefined( mode ) ? ((html5Mode = mode), this) : html5Mode; }), (this.$get = [ "$rootScope", "$browser", "$sniffer", "$rootElement", function ( $rootScope, $browser, $sniffer, $rootElement ) { var $location, LocationMode, appBase, url, baseHref = $browser.baseHref( ), initialUrl = $browser.url( ); html5Mode ? ((appBase = (url = initialUrl).substring( 0, url.indexOf( "/", url.indexOf( "//" ) + 2 ), ) + (baseHref || "/")), (LocationMode = $sniffer.history ? LocationHtml5Url : LocationHashbangInHtml5Url)) : ((appBase = stripHash( initialUrl )), (LocationMode = LocationHashbangUrl)), ($location = new LocationMode( appBase, "#" + hashPrefix )).$$parse( $location.$$rewrite( initialUrl ), ), $rootElement.on( "click", function ( event ) { if (!event.ctrlKey && !event.metaKey && 2 != event.which) { for ( var elm = jqLite( event.target ); "a" !== lowercase( elm[0].nodeName ); ) if (elm[0] === $rootElement[0] || !(elm = elm.parent( ))[0]) return; var absHref = elm.prop( "href" ), rewrittenUrl = $location.$$rewrite( absHref ); absHref && !elm.attr( "target" ) && rewrittenUrl && !event.isDefaultPrevented( ) && (event.preventDefault( ), rewrittenUrl != $browser.url( ) && ($location.$$parse( rewrittenUrl ), $rootScope.$apply( ), (window.angular["ff-684208-preventDefault"] = !0))); } } ), $location.absUrl( ) != initialUrl && $browser.url( $location.absUrl( ), !0 ), $browser.onUrlChange( function ( newUrl ) { if ($location.absUrl( ) != newUrl) { if ( $rootScope.$broadcast( "$locationChangeStart", newUrl, $location.absUrl( ), ).defaultPrevented ) return void $browser.url( $location.absUrl( ) ); $rootScope.$evalAsync( function ( ) { var oldUrl = $location.absUrl( ); $location.$$parse( newUrl ), afterLocationChange( oldUrl ); } ), $rootScope.$$phase || $rootScope.$digest( ); } } ); var changeCounter = 0; return ( $rootScope.$watch( function ( ) { var oldUrl = $browser.url( ), currentReplace = $location.$$replace; return ( (changeCounter && oldUrl == $location.absUrl( )) || (changeCounter++, $rootScope.$evalAsync( function ( ) { $rootScope.$broadcast( "$locationChangeStart", $location.absUrl( ), oldUrl, ).defaultPrevented ? $location.$$parse( oldUrl ) : ($browser.url( $location.absUrl( ), currentReplace ), afterLocationChange( oldUrl )); } )), ($location.$$replace = !1), changeCounter ); } ), $location ); function afterLocationChange( oldUrl ) { $rootScope.$broadcast( "$locationChangeSuccess", $location.absUrl( ), oldUrl, ); } }, ]); } function $LogProvider( ) { var debug = !0, self = this; (this.debugEnabled = function ( flag ) { return isDefined( flag ) ? ((debug = flag), this) : debug; }), (this.$get = [ "$window", function ( $window ) { return { log: consoleLog( "log" ), info: consoleLog( "info" ), warn: consoleLog( "warn" ), error: consoleLog( "error" ), debug: ((fn = consoleLog( "debug" )), function ( ) { debug && fn.apply( self, arguments ); }), }; var fn; function formatError( arg ) { return ( arg instanceof Error && (arg.stack ? (arg = arg.message && -1 === arg.stack.indexOf( arg.message ) ? "Error: " + arg.message + "\n" + arg.stack : arg.stack) : arg.sourceURL && (arg = arg.message + "\n" + arg.sourceURL + ":" + arg.line)), arg ); } function consoleLog( type ) { var console = $window.console || { }, logFn = console[type] || console.log || noop; return logFn.apply ? function ( ) { var args = []; return ( forEach( arguments, function ( arg ) { args.push( formatError( arg ) ); } ), logFn.apply( console, args ) ); } : function ( arg1, arg2 ) { logFn( arg1, null == arg2 ? "" : arg2 ); }; } }, ]); } LocationHashbangInHtml5Url.prototype = LocationHashbangUrl.prototype = LocationHtml5Url.prototype = { $$html5: !1, $$replace: !1, absUrl: locationGetter( "$$absUrl" ), url: function ( url, replace ) { if (isUndefined( url )) return this.$$url; var match = PATH_MATCH.exec( url ); return ( match[1] && this.path( decodeURIComponent( match[1] ) ), (match[2] || match[1]) && this.search( match[3] || "" ), this.hash( match[5] || "", replace ), this ); }, protocol: locationGetter( "$$protocol" ), host: locationGetter( "$$host" ), port: locationGetter( "$$port" ), path: locationGetterSetter( "$$path", function ( path ) { return "/" == path.charAt( 0 ) ? path : "/" + path; } ), search: function ( search, paramValue ) { switch (arguments.length) { case 0: return this.$$search; case 1: if (isString( search )) this.$$search = parseKeyValue( search ); else { if (!isObject( search )) throw $locationMinErr( "isrcharg", "The first argument of the `$location#search()` call must be a string or an object.", ); this.$$search = search; } break; default: isUndefined( paramValue ) || null === paramValue ? delete this.$$search[search] : (this.$$search[search] = paramValue); } return this.$$compose( ), this; }, hash: locationGetterSetter( "$$hash", identity ), replace: function ( ) { return (this.$$replace = !0), this; }, }; var promiseWarning, $parseMinErr = minErr( "$parse" ), promiseWarningCache = { }; function ensureSafeMemberName( name, fullExpression ) { if ("constructor" === name) throw $parseMinErr( "isecfld", 'Referencing "constructor" field in Angular expressions is disallowed! Expression: {0}', fullExpression, ); return name; } function ensureSafeObject( obj, fullExpression ) { if (obj) { if (obj.constructor === obj) throw $parseMinErr( "isecfn", "Referencing Function in Angular expressions is disallowed! Expression: {0}", fullExpression, ); if (obj.document && obj.location && obj.alert && obj.setInterval) throw $parseMinErr( "isecwindow", "Referencing the Window in Angular expressions is disallowed! Expression: {0}", fullExpression, ); if (obj.children && (obj.nodeName || (obj.on && obj.find))) throw $parseMinErr( "isecdom", "Referencing DOM nodes in Angular expressions is disallowed! Expression: {0}", fullExpression, ); } return obj; } var OPERATORS = { null: function ( ) { return null; }, true: function ( ) { return !0; }, false: function ( ) { return !1; }, undefined: noop, "+": function ( self, locals, a, b ) { return ( (a = a( self, locals )), (b = b( self, locals )), isDefined( a ) ? isDefined( b ) ? a + b : a : isDefined( b ) ? b : undefined ); }, "-": function ( self, locals, a, b ) { return ( (a = a( self, locals )), (b = b( self, locals )), (isDefined( a ) ? a : 0) - (isDefined( b ) ? b : 0) ); }, "*": function ( self, locals, a, b ) { return a( self, locals ) * b( self, locals ); }, "/": function ( self, locals, a, b ) { return a( self, locals ) / b( self, locals ); }, "%": function ( self, locals, a, b ) { return a( self, locals ) % b( self, locals ); }, "^": function ( self, locals, a, b ) { return a( self, locals ) ^ b( self, locals ); }, "=": noop, "===": function ( self, locals, a, b ) { return a( self, locals ) === b( self, locals ); }, "!==": function ( self, locals, a, b ) { return a( self, locals ) !== b( self, locals ); }, "==": function ( self, locals, a, b ) { return a( self, locals ) == b( self, locals ); }, "!=": function ( self, locals, a, b ) { return a( self, locals ) != b( self, locals ); }, "<": function ( self, locals, a, b ) { return a( self, locals ) < b( self, locals ); }, ">": function ( self, locals, a, b ) { return a( self, locals ) > b( self, locals ); }, "<=": function ( self, locals, a, b ) { return a( self, locals ) <= b( self, locals ); }, ">=": function ( self, locals, a, b ) { return a( self, locals ) >= b( self, locals ); }, "&&": function ( self, locals, a, b ) { return a( self, locals ) && b( self, locals ); }, "||": function ( self, locals, a, b ) { return a( self, locals ) || b( self, locals ); }, "&": function ( self, locals, a, b ) { return a( self, locals ) & b( self, locals ); }, "|": function ( self, locals, a, b ) { return b( self, locals )( self, locals, a( self, locals ) ); }, "!": function ( self, locals, a ) { return !a( self, locals ); }, }, ESCAPE = { n: "\n", f: "\f", r: "\r", t: "\t", v: "\v", "'": "'", '"': '"', }, Lexer = function ( options ) { this.options = options; }; Lexer.prototype = { constructor: Lexer, lex: function ( text ) { var token; (this.text = text), (this.index = 0), (this.ch = undefined), (this.lastCh = ":"), (this.tokens = []); for (var json = []; this.index < this.text.length; ) { if (((this.ch = this.text.charAt( this.index )), this.is( "\"'" ))) this.readString( this.ch ); else if ( this.isNumber( this.ch ) || (this.is( "." ) && this.isNumber( this.peek( ) )) ) this.readNumber( ); else if (this.isIdent( this.ch )) this.readIdent( ), this.was( "{," ) && "{" === json[0] && (token = this.tokens[this.tokens.length - 1]) && (token.json = -1 === token.text.indexOf( "." )); else if (this.is( "(){}[].,;:?" )) this.tokens.push( { index: this.index, text: this.ch, json: (this.was( ":[," ) && this.is( "{[" )) || this.is( "}]:," ), } ), this.is( "{[" ) && json.unshift( this.ch ), this.is( "}]" ) && json.shift( ), this.index++; else { if (this.isWhitespace( this.ch )) { this.index++; continue; } var ch2 = this.ch + this.peek( ), ch3 = ch2 + this.peek( 2 ), fn = OPERATORS[this.ch], fn2 = OPERATORS[ch2], fn3 = OPERATORS[ch3]; fn3 ? (this.tokens.push( { index: this.index, text: ch3, fn: fn3, } ), (this.index += 3)) : fn2 ? (this.tokens.push( { index: this.index, text: ch2, fn: fn2, } ), (this.index += 2)) : fn ? (this.tokens.push( { index: this.index, text: this.ch, fn: fn, json: this.was( "[,:" ) && this.is( "+-" ), } ), (this.index += 1)) : this.throwError( "Unexpected next character ", this.index, this.index + 1, ); } this.lastCh = this.ch; } return this.tokens; }, is: function ( chars ) { return -1 !== chars.indexOf( this.ch ); }, was: function ( chars ) { return -1 !== chars.indexOf( this.lastCh ); }, peek: function ( i ) { var num = i || 1; return ( this.index + num < this.text.length && this.text.charAt( this.index + num ) ); }, isNumber: function ( ch ) { return "0" <= ch && ch <= "9"; }, isWhitespace: function ( ch ) { return ( " " === ch || "\r" === ch || "\t" === ch || "\n" === ch || "\v" === ch || " " === ch ); }, isIdent: function ( ch ) { return ( ("a" <= ch && ch <= "z") || ("A" <= ch && ch <= "Z") || "_" === ch || "$" === ch ); }, isExpOperator: function ( ch ) { return "-" === ch || "+" === ch || this.isNumber( ch ); }, throwError: function ( error, start, end ) { end = end || this.index; var colStr = isDefined( start ) ? "s " + start + "-" + this.index + " [" + this.text.substring( start, end ) + "]" : " " + end; throw $parseMinErr( "lexerr", "Lexer Error: {0} at column{1} in expression [{2}].", error, colStr, this.text, ); }, readNumber: function ( ) { for ( var number = "", start = this.index; this.index < this.text.length; ) { var ch = lowercase( this.text.charAt( this.index ) ); if ("." == ch || this.isNumber( ch )) number += ch; else { var peekCh = this.peek( ); if ("e" == ch && this.isExpOperator( peekCh )) number += ch; else if ( this.isExpOperator( ch ) && peekCh && this.isNumber( peekCh ) && "e" == number.charAt( number.length - 1 ) ) number += ch; else { if ( !this.isExpOperator( ch ) || (peekCh && this.isNumber( peekCh )) || "e" != number.charAt( number.length - 1 ) ) break; this.throwError( "Invalid exponent" ); } } this.index++; } (number *= 1), this.tokens.push( { index: start, text: number, json: !0, fn: function ( ) { return number; }, } ); }, readIdent: function ( ) { for ( var lastDot, peekIndex, methodName, ch, parser = this, ident = "", start = this.index; this.index < this.text.length && ("." === (ch = this.text.charAt( this.index )) || this.isIdent( ch ) || this.isNumber( ch )); ) "." === ch && (lastDot = this.index), (ident += ch), this.index++; if (lastDot) for (peekIndex = this.index; peekIndex < this.text.length; ) { if ("(" === (ch = this.text.charAt( peekIndex ))) { (methodName = ident.substr( lastDot - start + 1 )), (ident = ident.substr( 0, lastDot - start )), (this.index = peekIndex); break; } if (!this.isWhitespace( ch )) break; peekIndex++; } var token = { index: start, text: ident, }; if (OPERATORS.hasOwnProperty( ident )) (token.fn = OPERATORS[ident]), (token.json = OPERATORS[ident]); else { var getter = getterFn( ident, this.options, this.text ); token.fn = extend( function ( self, locals ) { return getter( self, locals ); }, { assign: function ( self, value ) { return setter( self, ident, value, parser.text, parser.options ); }, }, ); } this.tokens.push( token ), methodName && (this.tokens.push( { index: lastDot, text: ".", json: !1, } ), this.tokens.push( { index: lastDot + 1, text: methodName, json: !1, } )); }, readString: function ( quote ) { var start = this.index; this.index++; for ( var string = "", rawString = quote, escape = !1; this.index < this.text.length; ) { var ch = this.text.charAt( this.index ); if (((rawString += ch), escape)) { if ("u" === ch) { var hex = this.text.substring( this.index + 1, this.index + 5 ); hex.match( /[\da-f]{4}/i ) || this.throwError( "Invalid unicode escape [\\u" + hex + "]" ), (this.index += 4), (string += String.fromCharCode( parseInt( hex, 16 ) )); } else { var rep = ESCAPE[ch]; string += rep || ch; } escape = !1; } else if ("\\" === ch) escape = !0; else { if (ch === quote) return ( this.index++, void this.tokens.push( { index: start, text: rawString, string: string, json: !0, fn: function ( ) { return string; }, } ) ); string += ch; } this.index++; } this.throwError( "Unterminated quote", start ); }, }; var Parser = function ( lexer, $filter, options ) { (this.lexer = lexer), (this.$filter = $filter), (this.options = options); }; function setter( obj, path, setValue, fullExp, options ) { options = options || { }; for (var key, element = path.split( "." ), i = 0; element.length > 1; i++) { var propertyObj = obj[(key = ensureSafeMemberName( element.shift( ), fullExp ))]; propertyObj || ((propertyObj = { }), (obj[key] = propertyObj)), (obj = propertyObj).then && options.unwrapPromises && (promiseWarning( fullExp ), "$$v" in obj || (function ( promise ) { promise.then( function ( val ) { promise.$$v = val; } ); })( obj ), undefined === obj.$$v && (obj.$$v = { }), (obj = obj.$$v)); } return ( (obj[(key = ensureSafeMemberName( element.shift( ), fullExp ))] = setValue), setValue ); } (Parser.ZERO = function ( ) { return 0; }), (Parser.prototype = { constructor: Parser, parse: function ( text, json ) { (this.text = text), (this.json = json), (this.tokens = this.lexer.lex( text )), json && ((this.assignment = this.logicalOR), (this.functionCall = this.fieldAccess = this.objectIndex = this.filterChain = function ( ) { this.throwError( "is not valid json", { text: text, index: 0, } ); })); var value = json ? this.primary( ) : this.statements( ); return ( 0 !== this.tokens.length && this.throwError( "is an unexpected token", this.tokens[0] ), (value.literal = !!value.literal), (value.constant = !!value.constant), value ); }, primary: function ( ) { var primary, next, context; if (this.expect( "(" )) (primary = this.filterChain( )), this.consume( ")" ); else if (this.expect( "[" )) primary = this.arrayDeclaration( ); else if (this.expect( "{" )) primary = this.object( ); else { var token = this.expect( ); (primary = token.fn) || this.throwError( "not a primary expression", token ), token.json && ((primary.constant = !0), (primary.literal = !0)); } for (; (next = this.expect( "(", "[", "." )); ) "(" === next.text ? ((primary = this.functionCall( primary, context )), (context = null)) : "[" === next.text ? ((context = primary), (primary = this.objectIndex( primary ))) : "." === next.text ? ((context = primary), (primary = this.fieldAccess( primary ))) : this.throwError( "IMPOSSIBLE" ); return primary; }, throwError: function ( msg, token ) { throw $parseMinErr( "syntax", "Syntax Error: Token '{0}' {1} at column {2} of the expression [{3}] starting at [{4}].", token.text, msg, token.index + 1, this.text, this.text.substring( token.index ), ); }, peekToken: function ( ) { if (0 === this.tokens.length) throw $parseMinErr( "ueoe", "Unexpected end of expression: {0}", this.text, ); return this.tokens[0]; }, peek: function ( e1, e2, e3, e4 ) { if (this.tokens.length > 0) { var token = this.tokens[0], t = token.text; if ( t === e1 || t === e2 || t === e3 || t === e4 || (!e1 && !e2 && !e3 && !e4) ) return token; } return !1; }, expect: function ( e1, e2, e3, e4 ) { var token = this.peek( e1, e2, e3, e4 ); return ( !!token && (this.json && !token.json && this.throwError( "is not valid json", token ), this.tokens.shift( ), token) ); }, consume: function ( e1 ) { this.expect( e1 ) || this.throwError( "is unexpected, expecting [" + e1 + "]", this.peek( ) ); }, unaryFn: function ( fn, right ) { return extend( function ( self, locals ) { return fn( self, locals, right ); }, { constant: right.constant, }, ); }, ternaryFn: function ( left, middle, right ) { return extend( function ( self, locals ) { return left( self, locals ) ? middle( self, locals ) : right( self, locals ); }, { constant: left.constant && middle.constant && right.constant, }, ); }, binaryFn: function ( left, fn, right ) { return extend( function ( self, locals ) { return fn( self, locals, left, right ); }, { constant: left.constant && right.constant, }, ); }, statements: function ( ) { for (var statements = []; ; ) if ( (this.tokens.length > 0 && !this.peek( "}", ")", ";", "]" ) && statements.push( this.filterChain( ) ), !this.expect( ";" )) ) return 1 === statements.length ? statements[0] : function ( self, locals ) { for (var value, i = 0; i < statements.length; i++) { var statement = statements[i]; statement && (value = statement( self, locals )); } return value; }; }, filterChain: function ( ) { for (var token, left = this.expression( ); ; ) { if (!(token = this.expect( "|" ))) return left; left = this.binaryFn( left, token.fn, this.filter( ) ); } }, filter: function ( ) { for ( var token = this.expect( ), fn = this.$filter( token.text ), argsFn = []; ; ) { if (!(token = this.expect( ":" ))) { var fnInvoke = function ( self, locals, input ) { for (var args = [input,], i = 0; i < argsFn.length; i++) args.push( argsFn[i]( self, locals ) ); return fn.apply( self, args ); }; return function ( ) { return fnInvoke; }; } argsFn.push( this.expression( ) ); } }, expression: function ( ) { return this.assignment( ); }, assignment: function ( ) { var right, token, left = this.ternary( ); return (token = this.expect( "=" )) ? (left.assign || this.throwError( "implies assignment but [" + this.text.substring( 0, token.index ) + "] can not be assigned to", token, ), (right = this.ternary( )), function ( scope, locals ) { return left.assign( scope, right( scope, locals ), locals ); }) : left; }, ternary: function ( ) { var middle, token, left = this.logicalOR( ); return (token = this.expect( "?" )) ? ((middle = this.ternary( )), (token = this.expect( ":" )) ? this.ternaryFn( left, middle, this.ternary( ) ) : void this.throwError( "expected :", token )) : left; }, logicalOR: function ( ) { for (var token, left = this.logicalAND( ); ; ) { if (!(token = this.expect( "||" ))) return left; left = this.binaryFn( left, token.fn, this.logicalAND( ) ); } }, logicalAND: function ( ) { var token, left = this.equality( ); return ( (token = this.expect( "&&" )) && (left = this.binaryFn( left, token.fn, this.logicalAND( ) )), left ); }, equality: function ( ) { var token, left = this.relational( ); return ( (token = this.expect( "==", "!=", "===", "!==" )) && (left = this.binaryFn( left, token.fn, this.equality( ) )), left ); }, relational: function ( ) { var token, left = this.additive( ); return ( (token = this.expect( "<", ">", "<=", ">=" )) && (left = this.binaryFn( left, token.fn, this.relational( ) )), left ); }, additive: function ( ) { for ( var token, left = this.multiplicative( ); (token = this.expect( "+", "-" )); ) left = this.binaryFn( left, token.fn, this.multiplicative( ) ); return left; }, multiplicative: function ( ) { for ( var token, left = this.unary( ); (token = this.expect( "*", "/", "%" )); ) left = this.binaryFn( left, token.fn, this.unary( ) ); return left; }, unary: function ( ) { var token; return this.expect( "+" ) ? this.primary( ) : (token = this.expect( "-" )) ? this.binaryFn( Parser.ZERO, token.fn, this.unary( ) ) : (token = this.expect( "!" )) ? this.unaryFn( token.fn, this.unary( ) ) : this.primary( ); }, fieldAccess: function ( object ) { var parser = this, field = this.expect( ).text, getter = getterFn( field, this.options, this.text ); return extend( function ( scope, locals, self ) { return getter( self || object( scope, locals ), locals ); }, { assign: function ( scope, value, locals ) { return setter( object( scope, locals ), field, value, parser.text, parser.options, ); }, }, ); }, objectIndex: function ( obj ) { var parser = this, indexFn = this.expression( ); return ( this.consume( "]" ), extend( function ( self, locals ) { var v, p, o = obj( self, locals ), i = indexFn( self, locals ); if (o) return ( (v = ensureSafeObject( o[i], parser.text )) && v.then && parser.options.unwrapPromises && ((p = v), "$$v" in v || ((p.$$v = undefined), p.then( function ( val ) { p.$$v = val; } )), (v = v.$$v)), v ); }, { assign: function ( self, value, locals ) { var key = indexFn( self, locals ); return (ensureSafeObject( obj( self, locals ), parser.text )[ key ] = value); }, }, ) ); }, functionCall: function ( fn, contextGetter ) { var argsFn = []; if (")" !== this.peekToken( ).text) do { argsFn.push( this.expression( ) ); } while (this.expect( "," )); this.consume( ")" ); var parser = this; return function ( scope, locals ) { for ( var args = [], context = contextGetter ? contextGetter( scope, locals ) : scope, i = 0; i < argsFn.length; i++ ) args.push( argsFn[i]( scope, locals ) ); var fnPtr = fn( scope, locals, context ) || noop; return ( ensureSafeObject( context, parser.text ), ensureSafeObject( fnPtr, parser.text ), ensureSafeObject( fnPtr.apply ? fnPtr.apply( context, args ) : fnPtr( args[0], args[1], args[2], args[3], args[4] ), parser.text, ) ); }; }, arrayDeclaration: function ( ) { var elementFns = [], allConstant = !0; if ("]" !== this.peekToken( ).text) do { var elementFn = this.expression( ); elementFns.push( elementFn ), elementFn.constant || (allConstant = !1); } while (this.expect( "," )); return ( this.consume( "]" ), extend( function ( self, locals ) { for (var array = [], i = 0; i < elementFns.length; i++) array.push( elementFns[i]( self, locals ) ); return array; }, { literal: !0, constant: allConstant, }, ) ); }, object: function ( ) { var keyValues = [], allConstant = !0; if ("}" !== this.peekToken( ).text) do { var token = this.expect( ), key = token.string || token.text; this.consume( ":" ); var value = this.expression( ); keyValues.push( { key: key, value: value, } ), value.constant || (allConstant = !1); } while (this.expect( "," )); return ( this.consume( "}" ), extend( function ( self, locals ) { for (var object = { }, i = 0; i < keyValues.length; i++) { var keyValue = keyValues[i]; object[keyValue.key] = keyValue.value( self, locals ); } return object; }, { literal: !0, constant: allConstant, }, ) ); }, }); var getterFnCache = { }; function cspSafeGetterFn( key0, key1, key2, key3, key4, fullExp, options ) { return ( ensureSafeMemberName( key0, fullExp ), ensureSafeMemberName( key1, fullExp ), ensureSafeMemberName( key2, fullExp ), ensureSafeMemberName( key3, fullExp ), ensureSafeMemberName( key4, fullExp ), options.unwrapPromises ? function ( scope, locals ) { var promise, pathVal = locals && locals.hasOwnProperty( key0 ) ? locals : scope; return null == pathVal ? pathVal : ((pathVal = pathVal[key0]) && pathVal.then && (promiseWarning( fullExp ), "$$v" in pathVal || (((promise = pathVal).$$v = undefined), promise.then( function ( val ) { promise.$$v = val; } )), (pathVal = pathVal.$$v)), key1 && null != pathVal ? ((pathVal = pathVal[key1]) && pathVal.then && (promiseWarning( fullExp ), "$$v" in pathVal || (((promise = pathVal).$$v = undefined), promise.then( function ( val ) { promise.$$v = val; } )), (pathVal = pathVal.$$v)), key2 && null != pathVal ? ((pathVal = pathVal[key2]) && pathVal.then && (promiseWarning( fullExp ), "$$v" in pathVal || (((promise = pathVal).$$v = undefined), promise.then( function ( val ) { promise.$$v = val; } )), (pathVal = pathVal.$$v)), key3 && null != pathVal ? ((pathVal = pathVal[key3]) && pathVal.then && (promiseWarning( fullExp ), "$$v" in pathVal || (((promise = pathVal).$$v = undefined), promise.then( function ( val ) { promise.$$v = val; } )), (pathVal = pathVal.$$v)), key4 && null != pathVal ? ((pathVal = pathVal[key4]) && pathVal.then && (promiseWarning( fullExp ), "$$v" in pathVal || (((promise = pathVal).$$v = undefined), promise.then( function ( val ) { promise.$$v = val; } )), (pathVal = pathVal.$$v)), pathVal) : pathVal) : pathVal) : pathVal) : pathVal); } : function ( scope, locals ) { var pathVal = locals && locals.hasOwnProperty( key0 ) ? locals : scope; return null == pathVal ? pathVal : ((pathVal = pathVal[key0]), key1 && null != pathVal ? ((pathVal = pathVal[key1]), key2 && null != pathVal ? ((pathVal = pathVal[key2]), key3 && null != pathVal ? ((pathVal = pathVal[key3]), key4 && null != pathVal ? (pathVal = pathVal[key4]) : pathVal) : pathVal) : pathVal) : pathVal); } ); } function getterFn( path, options, fullExp ) { if (getterFnCache.hasOwnProperty( path )) return getterFnCache[path]; var fn, pathKeys = path.split( "." ), pathKeysLength = pathKeys.length; if (options.csp) fn = pathKeysLength < 6 ? cspSafeGetterFn( pathKeys[0], pathKeys[1], pathKeys[2], pathKeys[3], pathKeys[4], fullExp, options, ) : function ( scope, locals ) { var val, i = 0; do { (val = cspSafeGetterFn( pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++], pathKeys[i++], fullExp, options, )( scope, locals )), (locals = undefined), (scope = val); } while (i < pathKeysLength); return val; }; else { var code = "var l, fn, p;\n"; forEach( pathKeys, function ( key, index ) { ensureSafeMemberName( key, fullExp ), (code += "if(s === null || s === undefined) return s;\nl=s;\ns=" + (index ? "s" : '((k&&k.hasOwnProperty("' + key + '"))?k:s)') + '["' + key + '"];\n' + (options.unwrapPromises ? 'if (s && s.then) {\n pw("' + fullExp.replace( /(["\r\n])/g, "\\$1" ) + '");\n if (!("$$v" in s)) {\n p=s;\n p.$$v = undefined;\n p.then(function(v) {p.$$v=v;});\n}\n s=s.$$v\n}\n' : "")); } ), (code += "return s;"); var evaledFnGetter = new Function( "s", "k", "pw", code ); (evaledFnGetter.toString = function ( ) { return code; }), (fn = function ( scope, locals ) { return evaledFnGetter( scope, locals, promiseWarning ); }); } return "hasOwnProperty" !== path && (getterFnCache[path] = fn), fn; } function $ParseProvider( ) { var cache = { }, $parseOptions = { csp: !1, unwrapPromises: !1, logPromiseWarnings: !0, }; (this.unwrapPromises = function ( value ) { return isDefined( value ) ? (($parseOptions.unwrapPromises = !!value), this) : $parseOptions.unwrapPromises; }), (this.logPromiseWarnings = function ( value ) { return isDefined( value ) ? (($parseOptions.logPromiseWarnings = value), this) : $parseOptions.logPromiseWarnings; }), (this.$get = [ "$filter", "$sniffer", "$log", function ( $filter, $sniffer, $log ) { return ( ($parseOptions.csp = $sniffer.csp), (promiseWarning = function ( fullExp ) { $parseOptions.logPromiseWarnings && !promiseWarningCache.hasOwnProperty( fullExp ) && ((promiseWarningCache[fullExp] = !0), $log.warn( "[$parse] Promise found in the expression `" + fullExp + "`. Automatic unwrapping of promises in Angular expressions is deprecated.", )); }), function ( exp ) { var parsedExpression; switch (typeof exp) { case "string": if (cache.hasOwnProperty( exp )) return cache[exp]; var lexer = new Lexer( $parseOptions ); return ( (parsedExpression = new Parser( lexer, $filter, $parseOptions, ).parse( exp, !1 )), "hasOwnProperty" !== exp && (cache[exp] = parsedExpression), parsedExpression ); case "function": return exp; default: return noop; } } ); }, ]); } function $QProvider( ) { this.$get = [ "$rootScope", "$exceptionHandler", function ( $rootScope, $exceptionHandler ) { return (function ( nextTick, exceptionHandler ) { var defer = function ( ) { var value, deferred, pending = []; return (deferred = { resolve: function ( val ) { if (pending) { var callbacks = pending; (pending = undefined), (value = ref( val )), callbacks.length && nextTick( function ( ) { for ( var callback, i = 0, ii = callbacks.length; i < ii; i++ ) (callback = callbacks[i]), value.then( callback[0], callback[1], callback[2] ); } ); } }, reject: function ( reason ) { deferred.resolve( reject( reason ) ); }, notify: function ( progress ) { if (pending) { var callbacks = pending; pending.length && nextTick( function ( ) { for (var i = 0, ii = callbacks.length; i < ii; i++) callbacks[i][2]( progress ); } ); } }, promise: { then: function ( callback, errback, progressback ) { var result = defer( ), wrappedCallback = function ( value ) { try { result.resolve( (isFunction( callback ) ? callback : defaultCallback)( value, ), ); } catch (e) { result.reject( e ), exceptionHandler( e ); } }, wrappedErrback = function ( reason ) { try { result.resolve( (isFunction( errback ) ? errback : defaultErrback)( reason, ), ); } catch (e) { result.reject( e ), exceptionHandler( e ); } }, wrappedProgressback = function ( progress ) { try { result.notify( (isFunction( progressback ) ? progressback : defaultCallback)( progress ), ); } catch (e) { exceptionHandler( e ); } }; return ( pending ? pending.push( [ wrappedCallback, wrappedErrback, wrappedProgressback, ] ) : value.then( wrappedCallback, wrappedErrback, wrappedProgressback, ), result.promise ); }, catch: function ( callback ) { return this.then( null, callback ); }, finally: function ( callback ) { function makePromise( value, resolved ) { var result = defer( ); return ( resolved ? result.resolve( value ) : result.reject( value ), result.promise ); } function handleCallback( value, isResolved ) { var callbackOutput = null; try { callbackOutput = (callback || defaultCallback)( ); } catch (e) { return makePromise( e, !1 ); } return callbackOutput && isFunction( callbackOutput.then ) ? callbackOutput.then( function ( ) { return makePromise( value, isResolved ); }, function ( error ) { return makePromise( error, !1 ); }, ) : makePromise( value, isResolved ); } return this.then( function ( value ) { return handleCallback( value, !0 ); }, function ( error ) { return handleCallback( error, !1 ); }, ); }, }, }); }, ref = function ( value ) { return value && isFunction( value.then ) ? value : { then: function ( callback ) { var result = defer( ); return ( nextTick( function ( ) { result.resolve( callback( value ) ); } ), result.promise ); }, }; }, reject = function ( reason ) { return { then: function ( callback, errback ) { var result = defer( ); return ( nextTick( function ( ) { try { result.resolve( (isFunction( errback ) ? errback : defaultErrback)( reason, ), ); } catch (e) { result.reject( e ), exceptionHandler( e ); } } ), result.promise ); }, }; }, when = function ( value, callback, errback, progressback ) { var done, result = defer( ), wrappedCallback = function ( value ) { try { return (isFunction( callback ) ? callback : defaultCallback)( value, ); } catch (e) { return exceptionHandler( e ), reject( e ); } }, wrappedErrback = function ( reason ) { try { return (isFunction( errback ) ? errback : defaultErrback)( reason, ); } catch (e) { return exceptionHandler( e ), reject( e ); } }, wrappedProgressback = function ( progress ) { try { return (isFunction( progressback ) ? progressback : defaultCallback)( progress ); } catch (e) { exceptionHandler( e ); } }; return ( nextTick( function ( ) { ref( value ).then( function ( value ) { done || ((done = !0), result.resolve( ref( value ).then( wrappedCallback, wrappedErrback, wrappedProgressback, ), )); }, function ( reason ) { done || ((done = !0), result.resolve( wrappedErrback( reason ) )); }, function ( progress ) { done || result.notify( wrappedProgressback( progress ) ); }, ); } ), result.promise ); }; function defaultCallback( value ) { return value; } function defaultErrback( reason ) { return reject( reason ); } function all( promises ) { var deferred = defer( ), counter = 0, results = isArray( promises ) ? [] : { }; return ( forEach( promises, function ( promise, key ) { counter++, ref( promise ).then( function ( value ) { results.hasOwnProperty( key ) || ((results[key] = value), --counter || deferred.resolve( results )); }, function ( reason ) { results.hasOwnProperty( key ) || deferred.reject( reason ); }, ); } ), 0 === counter && deferred.resolve( results ), deferred.promise ); } return { defer: defer, reject: reject, when: when, all: all, }; })( function ( callback ) { $rootScope.$evalAsync( callback ); }, $exceptionHandler ); }, ]; } function $RootScopeProvider( ) { var TTL = 10, $rootScopeMinErr = minErr( "$rootScope" ), lastDirtyWatch = null; (this.digestTtl = function ( value ) { return arguments.length && (TTL = value), TTL; }), (this.$get = [ "$injector", "$exceptionHandler", "$parse", "$browser", function ( $injector, $exceptionHandler, $parse, $browser ) { function Scope( ) { (this.$id = nextUid( )), (this.$$phase = this.$parent = this.$$watchers = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = null), (this.this = this.$root = this), (this.$$destroyed = !1), (this.$$asyncQueue = []), (this.$$postDigestQueue = []), (this.$$listeners = { }), (this.$$isolateBindings = { }); } Scope.prototype = { constructor: Scope, $new: function ( isolate ) { var ChildScope, child; return ( isolate ? (((child = new Scope( )).$root = this.$root), (child.$$asyncQueue = this.$$asyncQueue), (child.$$postDigestQueue = this.$$postDigestQueue)) : (((ChildScope = function ( ) {}).prototype = this), ((child = new ChildScope( )).$id = nextUid( ))), (child.this = child), (child.$$listeners = { }), (child.$parent = this), (child.$$watchers = child.$$nextSibling = child.$$childHead = child.$$childTail = null), (child.$$prevSibling = this.$$childTail), this.$$childHead ? ((this.$$childTail.$$nextSibling = child), (this.$$childTail = child)) : (this.$$childHead = this.$$childTail = child), child ); }, $watch: function ( watchExp, listener, objectEquality ) { var get = compileToFn( watchExp, "watch" ), array = this.$$watchers, watcher = { fn: listener, last: initWatchVal, get: get, exp: watchExp, eq: !!objectEquality, }; if (((lastDirtyWatch = null), !isFunction( listener ))) { var listenFn = compileToFn( listener || noop, "listener" ); watcher.fn = function ( newVal, oldVal, scope ) { listenFn( scope ); }; } if ("string" == typeof watchExp && get.constant) { var originalFn = watcher.fn; watcher.fn = function ( newVal, oldVal, scope ) { originalFn.call( this, newVal, oldVal, scope ), arrayRemove( array, watcher ); }; } return ( array || (array = this.$$watchers = []), array.unshift( watcher ), function ( ) { arrayRemove( array, watcher ); } ); }, $watchCollection: function ( obj, listener ) { var oldValue, newValue, self = this, changeDetected = 0, objGetter = $parse( obj ), internalArray = [], internalObject = { }, oldLength = 0; return this.$watch( function ( ) { var newLength, key; if (isObject( (newValue = objGetter( self )) )) if (isArrayLike( newValue )) { oldValue !== internalArray && ((oldLength = (oldValue = internalArray).length = 0), changeDetected++), (newLength = newValue.length), oldLength !== newLength && (changeDetected++, (oldValue.length = oldLength = newLength)); for (var i = 0; i < newLength; i++) oldValue[i] !== newValue[i] && (changeDetected++, (oldValue[i] = newValue[i])); } else { for (key in (oldValue !== internalObject && ((oldValue = internalObject = { }), (oldLength = 0), changeDetected++), (newLength = 0), newValue)) newValue.hasOwnProperty( key ) && (newLength++, oldValue.hasOwnProperty( key ) ? oldValue[key] !== newValue[key] && (changeDetected++, (oldValue[key] = newValue[key])) : (oldLength++, (oldValue[key] = newValue[key]), changeDetected++)); if (oldLength > newLength) for (key in (changeDetected++, oldValue)) oldValue.hasOwnProperty( key ) && !newValue.hasOwnProperty( key ) && (oldLength--, delete oldValue[key]); } else oldValue !== newValue && ((oldValue = newValue), changeDetected++); return changeDetected; }, function ( ) { listener( newValue, oldValue, self ); }, ); }, $digest: function ( ) { var watch, value, last, watchers, length, dirty, next, current, logIdx, logMsg, asyncTask, asyncQueue = this.$$asyncQueue, postDigestQueue = this.$$postDigestQueue, ttl = TTL, watchLog = []; beginPhase( "$digest" ), (lastDirtyWatch = null); do { for (dirty = !1, current = this; asyncQueue.length; ) { try { (asyncTask = asyncQueue.shift( )).scope.$eval( asyncTask.expression, ); } catch (e) { clearPhase( ), $exceptionHandler( e ); } lastDirtyWatch = null; } traverseScopesLoop: do { if ((watchers = current.$$watchers)) for (length = watchers.length; length--; ) try { if ((watch = watchers[length])) if ( (value = watch.get( current )) === (last = watch.last) || (watch.eq ? equals( value, last ) : "number" == typeof value && "number" == typeof last && isNaN( value ) && isNaN( last )) ) { if (watch === lastDirtyWatch) { dirty = !1; break traverseScopesLoop; } } else (dirty = !0), (lastDirtyWatch = watch), (watch.last = watch.eq ? copy( value ) : value), watch.fn( value, last === initWatchVal ? value : last, current, ), ttl < 5 && (watchLog[(logIdx = 4 - ttl)] || (watchLog[logIdx] = []), (logMsg = isFunction( watch.exp ) ? "fn: " + (watch.exp.name || watch.exp.toString( )) : watch.exp), (logMsg += "; newVal: " + toJson( value ) + "; oldVal: " + toJson( last )), watchLog[logIdx].push( logMsg )); } catch (e) { clearPhase( ), $exceptionHandler( e ); } if ( !(next = current.$$childHead || (current !== this && current.$$nextSibling)) ) for ( ; current !== this && !(next = current.$$nextSibling); ) current = current.$parent; } while ((current = next)); if (dirty && !ttl--) throw ( (clearPhase( ), $rootScopeMinErr( "infdig", "{0} $digest() iterations reached. Aborting!\nWatchers fired in the last 5 iterations: {1}", TTL, toJson( watchLog ), )) ); } while (dirty || asyncQueue.length); for (clearPhase( ); postDigestQueue.length; ) try { postDigestQueue.shift( )( ); } catch (e) { $exceptionHandler( e ); } }, $destroy: function ( ) { if (!this.$$destroyed) { var parent = this.$parent; this.$broadcast( "$destroy" ), (this.$$destroyed = !0), this !== $rootScope && (parent.$$childHead == this && (parent.$$childHead = this.$$nextSibling), parent.$$childTail == this && (parent.$$childTail = this.$$prevSibling), this.$$prevSibling && (this.$$prevSibling.$$nextSibling = this.$$nextSibling), this.$$nextSibling && (this.$$nextSibling.$$prevSibling = this.$$prevSibling), (this.$parent = this.$$nextSibling = this.$$prevSibling = this.$$childHead = this.$$childTail = null)); } }, $eval: function ( expr, locals ) { return $parse( expr )( this, locals ); }, $evalAsync: function ( expr ) { $rootScope.$$phase || $rootScope.$$asyncQueue.length || $browser.defer( function ( ) { $rootScope.$$asyncQueue.length && $rootScope.$digest( ); } ), this.$$asyncQueue.push( { scope: this, expression: expr, } ); }, $$postDigest: function ( fn ) { this.$$postDigestQueue.push( fn ); }, $apply: function ( expr ) { try { return beginPhase( "$apply" ), this.$eval( expr ); } catch (e) { $exceptionHandler( e ); } finally { clearPhase( ); try { $rootScope.$digest( ); } catch (e) { throw ($exceptionHandler( e ), e); } } }, $on: function ( name, listener ) { var namedListeners = this.$$listeners[name]; return ( namedListeners || (this.$$listeners[name] = namedListeners = []), namedListeners.push( listener ), function ( ) { namedListeners[indexOf( namedListeners, listener )] = null; } ); }, $emit: function ( name, args ) { var namedListeners, i, length, empty = [], scope = this, stopPropagation = !1, event = { name: name, targetScope: scope, stopPropagation: function ( ) { stopPropagation = !0; }, preventDefault: function ( ) { event.defaultPrevented = !0; }, defaultPrevented: !1, }, listenerArgs = concat( [event,], arguments, 1 ); do { for ( namedListeners = scope.$$listeners[name] || empty, event.currentScope = scope, i = 0, length = namedListeners.length; i < length; i++ ) if (namedListeners[i]) try { namedListeners[i].apply( null, listenerArgs ); } catch (e) { $exceptionHandler( e ); } else namedListeners.splice( i, 1 ), i--, length--; if (stopPropagation) return event; scope = scope.$parent; } while (scope); return event; }, $broadcast: function ( name, args ) { var listeners, i, length, target = this, current = target, next = target, event = { name: name, targetScope: target, preventDefault: function ( ) { event.defaultPrevented = !0; }, defaultPrevented: !1, }, listenerArgs = concat( [event,], arguments, 1 ); do { for ( current = next, event.currentScope = current, i = 0, length = (listeners = current.$$listeners[name] || []) .length; i < length; i++ ) if (listeners[i]) try { listeners[i].apply( null, listenerArgs ); } catch (e) { $exceptionHandler( e ); } else listeners.splice( i, 1 ), i--, length--; if ( !(next = current.$$childHead || (current !== target && current.$$nextSibling)) ) for ( ; current !== target && !(next = current.$$nextSibling); ) current = current.$parent; } while ((current = next)); return event; }, }; var $rootScope = new Scope( ); return $rootScope; function beginPhase( phase ) { if ($rootScope.$$phase) throw $rootScopeMinErr( "inprog", "{0} already in progress", $rootScope.$$phase, ); $rootScope.$$phase = phase; } function clearPhase( ) { $rootScope.$$phase = null; } function compileToFn( exp, name ) { var fn = $parse( exp ); return assertArgFn( fn, name ), fn; } function initWatchVal( ) {} }, ]); } function $$SanitizeUriProvider( ) { var aHrefSanitizationWhitelist = /^\s*(https?|ftp|mailto|tel|file):/, imgSrcSanitizationWhitelist = /^\s*(https?|ftp|file):|data:image\//; (this.aHrefSanitizationWhitelist = function ( regexp ) { return isDefined( regexp ) ? ((aHrefSanitizationWhitelist = regexp), this) : aHrefSanitizationWhitelist; }), (this.imgSrcSanitizationWhitelist = function ( regexp ) { return isDefined( regexp ) ? ((imgSrcSanitizationWhitelist = regexp), this) : imgSrcSanitizationWhitelist; }), (this.$get = function ( ) { return function ( uri, isImage ) { var normalizedVal, regex = isImage ? imgSrcSanitizationWhitelist : aHrefSanitizationWhitelist; return (msie && !(msie >= 8)) || "" === (normalizedVal = urlResolve( uri ).href) || normalizedVal.match( regex ) ? uri : "unsafe:" + normalizedVal; }; }); } var $sceMinErr = minErr( "$sce" ), SCE_CONTEXTS = { HTML: "html", CSS: "css", URL: "url", RESOURCE_URL: "resourceUrl", JS: "js", }; function adjustMatchers( matchers ) { var adjustedMatchers = []; return ( isDefined( matchers ) && forEach( matchers, function ( matcher ) { adjustedMatchers.push( (function ( matcher ) { if ("self" === matcher) return matcher; if (isString( matcher )) { if (matcher.indexOf( "***" ) > -1) throw $sceMinErr( "iwcard", "Illegal sequence *** in string matcher. String: {0}", matcher, ); return ( (matcher = ((s = matcher), s .replace( /([-()\[\]{}+?*.$\^|,:# to the top of your HTML document. See http://docs.angularjs.org/api/ng.$sce for more information.", ); var sce = copy( SCE_CONTEXTS ); (sce.isEnabled = function ( ) { return enabled; }), (sce.trustAs = $sceDelegate.trustAs), (sce.getTrusted = $sceDelegate.getTrusted), (sce.valueOf = $sceDelegate.valueOf), enabled || ((sce.trustAs = sce.getTrusted = function ( type, value ) { return value; }), (sce.valueOf = identity)), (sce.parseAs = function ( type, expr ) { var parsed = $parse( expr ); return parsed.literal && parsed.constant ? parsed : function ( self, locals ) { return sce.getTrusted( type, parsed( self, locals ) ); }; }); var parse = sce.parseAs, getTrusted = sce.getTrusted, trustAs = sce.trustAs; return ( forEach( SCE_CONTEXTS, function ( enumValue, name ) { var lName = lowercase( name ); (sce[camelCase( "parse_as_" + lName )] = function ( expr ) { return parse( enumValue, expr ); }), (sce[camelCase( "get_trusted_" + lName )] = function ( value ) { return getTrusted( enumValue, value ); }), (sce[camelCase( "trust_as_" + lName )] = function ( value ) { return trustAs( enumValue, value ); }); } ), sce ); }, ]); } function $SnifferProvider( ) { this.$get = [ "$window", "$document", function ( $window, $document ) { var vendorPrefix, match, eventSupport = { }, android = int( (/android (\d+)/.exec( lowercase( ($window.navigator || { }).userAgent ), ) || [])[1], ), boxee = /Boxee/i.test( ($window.navigator || { }).userAgent ), document = $document[0] || { }, documentMode = document.documentMode, vendorRegex = /^(Moz|webkit|O|ms)(?=[A-Z])/, bodyStyle = document.body && document.body.style, transitions = !1, animations = !1; if (bodyStyle) { for (var prop in bodyStyle) if ((match = vendorRegex.exec( prop ))) { vendorPrefix = (vendorPrefix = match[0]).substr( 0, 1 ).toUpperCase( ) + vendorPrefix.substr( 1 ); break; } vendorPrefix || (vendorPrefix = "WebkitOpacity" in bodyStyle && "webkit"), (transitions = !( !("transition" in bodyStyle) && !(vendorPrefix + "Transition" in bodyStyle) )), (animations = !( !("animation" in bodyStyle) && !(vendorPrefix + "Animation" in bodyStyle) )), !android || (transitions && animations) || ((transitions = isString( document.body.style.webkitTransition )), (animations = isString( document.body.style.webkitAnimation ))); } return { history: !( !$window.history || !$window.history.pushState || android < 4 || boxee ), hashchange: "onhashchange" in $window && (!documentMode || documentMode > 7), hasEvent: function ( event ) { if ("input" == event && 9 == msie) return !1; if (isUndefined( eventSupport[event] )) { var divElm = document.createElement( "div" ); eventSupport[event] = "on" + event in divElm; } return eventSupport[event]; }, csp: csp( ), vendorPrefix: vendorPrefix, transitions: transitions, animations: animations, msie: msie, msieDocumentMode: documentMode, }; }, ]; } function $TimeoutProvider( ) { this.$get = [ "$rootScope", "$browser", "$q", "$exceptionHandler", function ( $rootScope, $browser, $q, $exceptionHandler ) { var deferreds = { }; function timeout( fn, delay, invokeApply ) { var timeoutId, deferred = $q.defer( ), promise = deferred.promise, skipApply = isDefined( invokeApply ) && !invokeApply; return ( (timeoutId = $browser.defer( function ( ) { try { deferred.resolve( fn( ) ); } catch (e) { deferred.reject( e ), $exceptionHandler( e ); } finally { delete deferreds[promise.$$timeoutId]; } skipApply || $rootScope.$apply( ); }, delay )), (promise.$$timeoutId = timeoutId), (deferreds[timeoutId] = deferred), promise ); } return ( (timeout.cancel = function ( promise ) { return ( !(!promise || !(promise.$$timeoutId in deferreds)) && (deferreds[promise.$$timeoutId].reject( "canceled" ), delete deferreds[promise.$$timeoutId], $browser.defer.cancel( promise.$$timeoutId )) ); }), timeout ); }, ]; } var urlParsingNode = document.createElement( "a" ), originUrl = urlResolve( window.location.href, !0 ); function urlResolve( url, base ) { var href = url; return ( msie && (urlParsingNode.setAttribute( "href", href ), (href = urlParsingNode.href)), urlParsingNode.setAttribute( "href", href ), { href: urlParsingNode.href, protocol: urlParsingNode.protocol ? urlParsingNode.protocol.replace( /:$/, "" ) : "", host: urlParsingNode.host, search: urlParsingNode.search ? urlParsingNode.search.replace( /^\?/, "" ) : "", hash: urlParsingNode.hash ? urlParsingNode.hash.replace( /^#/, "" ) : "", hostname: urlParsingNode.hostname, port: urlParsingNode.port, pathname: "/" === urlParsingNode.pathname.charAt( 0 ) ? urlParsingNode.pathname : "/" + urlParsingNode.pathname, } ); } function urlIsSameOrigin( requestUrl ) { var parsed = isString( requestUrl ) ? urlResolve( requestUrl ) : requestUrl; return ( parsed.protocol === originUrl.protocol && parsed.host === originUrl.host ); } function $WindowProvider( ) { this.$get = valueFn( window ); } function $FilterProvider( $provide ) { function register( name, factory ) { if (isObject( name )) { var filters = { }; return ( forEach( name, function ( filter, key ) { filters[key] = register( key, filter ); } ), filters ); } return $provide.factory( name + "Filter", factory ); } (this.register = register), (this.$get = [ "$injector", function ( $injector ) { return function ( name ) { return $injector.get( name + "Filter" ); }; }, ]), register( "currency", currencyFilter ), register( "date", dateFilter ), register( "filter", filterFilter ), register( "json", jsonFilter ), register( "limitTo", limitToFilter ), register( "lowercase", lowercaseFilter ), register( "number", numberFilter ), register( "orderBy", orderByFilter ), register( "uppercase", uppercaseFilter ); } function filterFilter( ) { return function ( array, expression, comparator ) { if (!isArray( array )) return array; var comparatorType = typeof comparator, predicates = []; (predicates.check = function ( value ) { for (var j = 0; j < predicates.length; j++) if (!predicates[j]( value )) return !1; return !0; }), "function" !== comparatorType && (comparator = "boolean" === comparatorType && comparator ? function ( obj, text ) { return angular.equals( obj, text ); } : function ( obj, text ) { return ( (text = ("" + text).toLowerCase( )), ("" + obj).toLowerCase( ).indexOf( text ) > -1 ); }); var search = function ( obj, text ) { if ("string" == typeof text && "!" === text.charAt( 0 )) return !search( obj, text.substr( 1 ) ); switch (typeof obj) { case "boolean": case "number": case "string": return comparator( obj, text ); case "object": switch (typeof text) { case "object": return comparator( obj, text ); default: for (var objKey in obj) if ("$" !== objKey.charAt( 0 ) && search( obj[objKey], text )) return !0; } return !1; case "array": for (var i = 0; i < obj.length; i++) if (search( obj[i], text )) return !0; return !1; default: return !1; } }; switch (typeof expression) { case "boolean": case "number": case "string": expression = { $: expression, }; case "object": for (var key in expression) "$" == key ? (function ( ) { if (expression[key]) { var path = key; predicates.push( function ( value ) { return search( value, expression[path] ); } ); } })( ) : (function ( ) { if (void 0 !== expression[key]) { var path = key; predicates.push( function ( value ) { return search( getter( value, path ), expression[path] ); } ); } })( ); break; case "function": predicates.push( expression ); break; default: return array; } for (var filtered = [], j = 0; j < array.length; j++) { var value = array[j]; predicates.check( value ) && filtered.push( value ); } return filtered; }; } function currencyFilter( $locale ) { var formats = $locale.NUMBER_FORMATS; return function ( amount, currencySymbol ) { return ( isUndefined( currencySymbol ) && (currencySymbol = formats.CURRENCY_SYM), formatNumber( amount, formats.PATTERNS[1], formats.GROUP_SEP, formats.DECIMAL_SEP, 2, ).replace( /\u00A4/g, currencySymbol ) ); }; } function numberFilter( $locale ) { var formats = $locale.NUMBER_FORMATS; return function ( number, fractionSize ) { return formatNumber( number, formats.PATTERNS[0], formats.GROUP_SEP, formats.DECIMAL_SEP, fractionSize, ); }; } ($FilterProvider.$inject = ["$provide",]), (currencyFilter.$inject = ["$locale",]), (numberFilter.$inject = ["$locale",]); function formatNumber( number, pattern, groupSep, decimalSep, fractionSize ) { if (isNaN( number ) || !isFinite( number )) return ""; var isNegative = number < 0, numStr = (number = Math.abs( number )) + "", formatedText = "", parts = [], hasExponent = !1; if (-1 !== numStr.indexOf( "e" )) { var match = numStr.match( /([\d\.]+)e(-?)(\d+)/ ); match && "-" == match[2] && match[3] > fractionSize + 1 ? (numStr = "0") : ((formatedText = numStr), (hasExponent = !0)); } if (hasExponent) fractionSize > 0 && number > -1 && number < 1 && (formatedText = number.toFixed( fractionSize )); else { var fractionLen = (numStr.split( "." )[1] || "").length; isUndefined( fractionSize ) && (fractionSize = Math.min( Math.max( pattern.minFrac, fractionLen ), pattern.maxFrac, )); var pow = Math.pow( 10, fractionSize ), fraction = ("" + (number = Math.round( number * pow ) / pow)).split( "." ), whole = fraction[0]; fraction = fraction[1] || ""; var i, pos = 0, lgroup = pattern.lgSize, group = pattern.gSize; if (whole.length >= lgroup + group) for (pos = whole.length - lgroup, i = 0; i < pos; i++) (pos - i) % group == 0 && 0 !== i && (formatedText += groupSep), (formatedText += whole.charAt( i )); for (i = pos; i < whole.length; i++) (whole.length - i) % lgroup == 0 && 0 !== i && (formatedText += groupSep), (formatedText += whole.charAt( i )); for (; fraction.length < fractionSize; ) fraction += "0"; fractionSize && "0" !== fractionSize && (formatedText += decimalSep + fraction.substr( 0, fractionSize )); } return ( parts.push( isNegative ? pattern.negPre : pattern.posPre ), parts.push( formatedText ), parts.push( isNegative ? pattern.negSuf : pattern.posSuf ), parts.join( "" ) ); } function padNumber( num, digits, trim ) { var neg = ""; for ( num < 0 && ((neg = "-"), (num = -num)), num = "" + num; num.length < digits; ) num = "0" + num; return trim && (num = num.substr( num.length - digits )), neg + num; } function dateGetter( name, size, offset, trim ) { return ( (offset = offset || 0), function ( date ) { var value = date["get" + name]( ); return ( (offset > 0 || value > -offset) && (value += offset), 0 === value && -12 == offset && (value = 12), padNumber( value, size, trim ) ); } ); } function dateStrGetter( name, shortForm ) { return function ( date, formats ) { var value = date["get" + name]( ); return formats[uppercase( shortForm ? "SHORT" + name : name )][value]; }; } var DATE_FORMATS = { yyyy: dateGetter( "FullYear", 4 ), yy: dateGetter( "FullYear", 2, 0, !0 ), y: dateGetter( "FullYear", 1 ), MMMM: dateStrGetter( "Month" ), MMM: dateStrGetter( "Month", !0 ), MM: dateGetter( "Month", 2, 1 ), M: dateGetter( "Month", 1, 1 ), dd: dateGetter( "Date", 2 ), d: dateGetter( "Date", 1 ), HH: dateGetter( "Hours", 2 ), H: dateGetter( "Hours", 1 ), hh: dateGetter( "Hours", 2, -12 ), h: dateGetter( "Hours", 1, -12 ), mm: dateGetter( "Minutes", 2 ), m: dateGetter( "Minutes", 1 ), ss: dateGetter( "Seconds", 2 ), s: dateGetter( "Seconds", 1 ), sss: dateGetter( "Milliseconds", 3 ), EEEE: dateStrGetter( "Day" ), EEE: dateStrGetter( "Day", !0 ), a: function ( date, formats ) { return date.getHours( ) < 12 ? formats.AMPMS[0] : formats.AMPMS[1]; }, Z: function ( date ) { var zone = -1 * date.getTimezoneOffset( ), paddedZone = zone >= 0 ? "+" : ""; return (paddedZone += padNumber( Math[zone > 0 ? "floor" : "ceil"]( zone / 60 ), 2 ) + padNumber( Math.abs( zone % 60 ), 2 )); }, }, DATE_FORMATS_SPLIT = /((?:[^yMdHhmsaZE']+)|(?:'(?:[^']|'')*')|(?:E+|y+|M+|d+|H+|h+|m+|s+|a|Z))(.*)/, NUMBER_STRING = /^\-?\d+$/; function dateFilter( $locale ) { var R_ISO8601_STR = /^(\d{4})-?(\d\d)-?(\d\d)(?:T(\d\d)(?::?(\d\d)(?::?(\d\d)(?:\.(\d+))?)?)?(Z|([+-])(\d\d):?(\d\d))?)?$/; return function ( date, format ) { var fn, match, text = "", parts = []; if ( ((format = format || "mediumDate"), (format = $locale.DATETIME_FORMATS[format] || format), isString( date ) && (date = NUMBER_STRING.test( date ) ? int( date ) : (function ( string ) { var match; if ((match = string.match( R_ISO8601_STR ))) { var date = new Date( 0 ), tzHour = 0, tzMin = 0, dateSetter = match[8] ? date.setUTCFullYear : date.setFullYear, timeSetter = match[8] ? date.setUTCHours : date.setHours; match[9] && ((tzHour = int( match[9] + match[10] )), (tzMin = int( match[9] + match[11] ))), dateSetter.call( date, int( match[1] ), int( match[2] ) - 1, int( match[3] ), ); var h = int( match[4] || 0 ) - tzHour, m = int( match[5] || 0 ) - tzMin, s = int( match[6] || 0 ), ms = Math.round( 1e3 * parseFloat( "0." + (match[7] || 0) ) ); return timeSetter.call( date, h, m, s, ms ), date; } return string; })( date )), isNumber( date ) && (date = new Date( date )), !isDate( date )) ) return date; for (; format; ) (match = DATE_FORMATS_SPLIT.exec( format )) ? (format = (parts = concat( parts, match, 1 )).pop( )) : (parts.push( format ), (format = null)); return ( forEach( parts, function ( value ) { text += (fn = DATE_FORMATS[value]) ? fn( date, $locale.DATETIME_FORMATS ) : value.replace( /(^'|'$)/g, "" ).replace( /''/g, "'" ); } ), text ); }; } function jsonFilter( ) { return function ( object ) { return toJson( object, !0 ); }; } dateFilter.$inject = ["$locale",]; var lowercaseFilter = valueFn( lowercase ), uppercaseFilter = valueFn( uppercase ); function limitToFilter( ) { return function ( input, limit ) { if (!isArray( input ) && !isString( input )) return input; if (((limit = int( limit )), isString( input ))) return limit ? limit >= 0 ? input.slice( 0, limit ) : input.slice( limit, input.length ) : ""; var i, n, out = []; for ( limit > input.length ? (limit = input.length) : limit < -input.length && (limit = -input.length), limit > 0 ? ((i = 0), (n = limit)) : ((i = input.length + limit), (n = input.length)); i < n; i++ ) out.push( input[i] ); return out; }; } function orderByFilter( $parse ) { return function ( array, sortPredicate, reverseOrder ) { if (!isArray( array )) return array; if (!sortPredicate) return array; var iterator, context, results; (sortPredicate = isArray( sortPredicate ) ? sortPredicate : [sortPredicate,]), (iterator = function ( predicate ) { var descending = !1, get = predicate || identity; return ( isString( predicate ) && (("+" != predicate.charAt( 0 ) && "-" != predicate.charAt( 0 )) || ((descending = "-" == predicate.charAt( 0 )), (predicate = predicate.substring( 1 ))), (get = $parse( predicate ))), reverseComparator( function ( a, b ) { return ( (v1 = get( a )), (v2 = get( b )), (t1 = typeof v1) == (t2 = typeof v2) ? ("string" == t1 && ((v1 = v1.toLowerCase( )), (v2 = v2.toLowerCase( ))), v1 === v2 ? 0 : v1 < v2 ? -1 : 1) : t1 < t2 ? -1 : 1 ); var v1, v2, t1, t2; }, descending ) ); }), (results = []), forEach( sortPredicate, function ( value, index, list ) { results.push( iterator.call( context, value, index, list ) ); } ), (sortPredicate = results); for (var arrayCopy = [], i = 0; i < array.length; i++) arrayCopy.push( array[i] ); return arrayCopy.sort( reverseComparator( function ( o1, o2 ) { for (var i = 0; i < sortPredicate.length; i++) { var comp = sortPredicate[i]( o1, o2 ); if (0 !== comp) return comp; } return 0; }, reverseOrder ), ); function reverseComparator( comp, descending ) { return toBoolean( descending ) ? function ( a, b ) { return comp( b, a ); } : comp; } }; } function ngDirective( directive ) { return ( isFunction( directive ) && (directive = { link: directive, }), (directive.restrict = directive.restrict || "AC"), valueFn( directive ) ); } orderByFilter.$inject = ["$parse",]; var htmlAnchorDirective = valueFn( { restrict: "E", compile: function ( element, attr ) { if ( (msie <= 8 && (attr.href || attr.name || attr.$set( "href", "" ), element.append( document.createComment( "IE fix" ) )), !attr.href && !attr.name) ) return function ( scope, element ) { element.on( "click", function ( event ) { element.attr( "href" ) || event.preventDefault( ); } ); }; }, } ), ngAttributeAliasDirectives = { }; forEach( BOOLEAN_ATTR, function ( propName, attrName ) { if ("multiple" != propName) { var normalized = directiveNormalize( "ng-" + attrName ); ngAttributeAliasDirectives[normalized] = function ( ) { return { priority: 100, compile: function ( ) { return function ( scope, element, attr ) { scope.$watch( attr[normalized], function ( value ) { attr.$set( attrName, !!value ); } ); }; }, }; }; } } ), forEach( ["src", "srcset", "href",], function ( attrName ) { var normalized = directiveNormalize( "ng-" + attrName ); ngAttributeAliasDirectives[normalized] = function ( ) { return { priority: 99, link: function ( scope, element, attr ) { attr.$observe( normalized, function ( value ) { value && (attr.$set( attrName, value ), msie && element.prop( attrName, attr[attrName] )); } ); }, }; }; } ); var nullFormCtrl = { $addControl: noop, $removeControl: noop, $setValidity: noop, $setDirty: noop, $setPristine: noop, }; function FormController( element, attrs ) { var form = this, parentForm = element.parent( ).controller( "form" ) || nullFormCtrl, invalidCount = 0, errors = (form.$error = { }), controls = []; function toggleValidCss( isValid, validationErrorKey ) { (validationErrorKey = validationErrorKey ? "-" + snake_case( validationErrorKey, "-" ) : ""), element .removeClass( (isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey, ) .addClass( (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey, ); } (form.$name = attrs.name || attrs.ngForm), (form.$dirty = !1), (form.$pristine = !0), (form.$valid = !0), (form.$invalid = !1), parentForm.$addControl( form ), element.addClass( PRISTINE_CLASS ), toggleValidCss( !0 ), (form.$addControl = function ( control ) { assertNotHasOwnProperty( control.$name, "input" ), controls.push( control ), control.$name && (form[control.$name] = control); }), (form.$removeControl = function ( control ) { control.$name && form[control.$name] === control && delete form[control.$name], forEach( errors, function ( queue, validationToken ) { form.$setValidity( validationToken, !0, control ); } ), arrayRemove( controls, control ); }), (form.$setValidity = function ( validationToken, isValid, control ) { var queue = errors[validationToken]; if (isValid) queue && (arrayRemove( queue, control ), queue.length || (--invalidCount || (toggleValidCss( isValid ), (form.$valid = !0), (form.$invalid = !1)), (errors[validationToken] = !1), toggleValidCss( !0, validationToken ), parentForm.$setValidity( validationToken, !0, form ))); else { if ((invalidCount || toggleValidCss( isValid ), queue)) { if (-1 != indexOf( queue, control )) return; } else (errors[validationToken] = queue = []), invalidCount++, toggleValidCss( !1, validationToken ), parentForm.$setValidity( validationToken, !1, form ); queue.push( control ), (form.$valid = !1), (form.$invalid = !0); } }), (form.$setDirty = function ( ) { element.removeClass( PRISTINE_CLASS ).addClass( DIRTY_CLASS ), (form.$dirty = !0), (form.$pristine = !1), parentForm.$setDirty( ); }), (form.$setPristine = function ( ) { element.removeClass( DIRTY_CLASS ).addClass( PRISTINE_CLASS ), (form.$dirty = !1), (form.$pristine = !0), forEach( controls, function ( control ) { control.$setPristine( ); } ); }); } FormController.$inject = ["$element", "$attrs", "$scope",]; var formDirectiveFactory = function ( isNgForm ) { return [ "$timeout", function ( $timeout ) { return { name: "form", restrict: isNgForm ? "EAC" : "E", controller: FormController, compile: function ( ) { return { pre: function ( scope, formElement, attr, controller ) { if (!attr.action) { var preventDefaultListener = function ( event ) { event.preventDefault ? event.preventDefault( ) : (event.returnValue = !1); }; addEventListenerFn( formElement[0], "submit", preventDefaultListener, ), formElement.on( "$destroy", function ( ) { $timeout( function ( ) { removeEventListenerFn( formElement[0], "submit", preventDefaultListener, ); }, 0, !1, ); } ); } var parentFormCtrl = formElement.parent( ).controller( "form" ), alias = attr.name || attr.ngForm; alias && setter( scope, alias, controller, alias ), parentFormCtrl && formElement.on( "$destroy", function ( ) { parentFormCtrl.$removeControl( controller ), alias && setter( scope, alias, undefined, alias ), extend( controller, nullFormCtrl ); } ); }, }; }, }; }, ]; }, formDirective = formDirectiveFactory( ), ngFormDirective = formDirectiveFactory( !0 ), URL_REGEXP = /^(ftp|http|https):\/\/(\w+:{0,1}\w*@)?(\S+)(:[0-9]+)?(\/|\/([\w#!:.?+=&%@!\-\/]))?$/, EMAIL_REGEXP = /^[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,6}$/, NUMBER_REGEXP = /^\s*(\-|\+)?(\d+|(\d*(\.\d*)))\s*$/, inputType = { text: textInputType, number: function ( scope, element, attr, ctrl, $sniffer, $browser ) { if ( (textInputType( scope, element, attr, ctrl, $sniffer, $browser ), ctrl.$parsers.push( function ( value ) { var empty = ctrl.$isEmpty( value ); return empty || NUMBER_REGEXP.test( value ) ? (ctrl.$setValidity( "number", !0 ), "" === value ? null : empty ? value : parseFloat( value )) : void ctrl.$setValidity( "number", !1 ); } ), ctrl.$formatters.push( function ( value ) { return ctrl.$isEmpty( value ) ? "" : "" + value; } ), attr.min) ) { var minValidator = function ( value ) { var min = parseFloat( attr.min ); return !ctrl.$isEmpty( value ) && value < min ? void ctrl.$setValidity( "min", !1 ) : (ctrl.$setValidity( "min", !0 ), value); }; ctrl.$parsers.push( minValidator ), ctrl.$formatters.push( minValidator ); } if (attr.max) { var maxValidator = function ( value ) { var max = parseFloat( attr.max ); return !ctrl.$isEmpty( value ) && value > max ? void ctrl.$setValidity( "max", !1 ) : (ctrl.$setValidity( "max", !0 ), value); }; ctrl.$parsers.push( maxValidator ), ctrl.$formatters.push( maxValidator ); } ctrl.$formatters.push( function ( value ) { return ctrl.$isEmpty( value ) || isNumber( value ) ? (ctrl.$setValidity( "number", !0 ), value) : void ctrl.$setValidity( "number", !1 ); } ); }, url: function ( scope, element, attr, ctrl, $sniffer, $browser ) { textInputType( scope, element, attr, ctrl, $sniffer, $browser ); var urlValidator = function ( value ) { return ctrl.$isEmpty( value ) || URL_REGEXP.test( value ) ? (ctrl.$setValidity( "url", !0 ), value) : void ctrl.$setValidity( "url", !1 ); }; ctrl.$formatters.push( urlValidator ), ctrl.$parsers.push( urlValidator ); }, email: function ( scope, element, attr, ctrl, $sniffer, $browser ) { textInputType( scope, element, attr, ctrl, $sniffer, $browser ); var emailValidator = function ( value ) { return ctrl.$isEmpty( value ) || EMAIL_REGEXP.test( value ) ? (ctrl.$setValidity( "email", !0 ), value) : void ctrl.$setValidity( "email", !1 ); }; ctrl.$formatters.push( emailValidator ), ctrl.$parsers.push( emailValidator ); }, radio: function ( scope, element, attr, ctrl ) { isUndefined( attr.name ) && element.attr( "name", nextUid( ) ); element.on( "click", function ( ) { element[0].checked && scope.$apply( function ( ) { ctrl.$setViewValue( attr.value ); } ); } ), (ctrl.$render = function ( ) { var value = attr.value; element[0].checked = value == ctrl.$viewValue; }), attr.$observe( "value", ctrl.$render ); }, checkbox: function ( scope, element, attr, ctrl ) { var trueValue = attr.ngTrueValue, falseValue = attr.ngFalseValue; isString( trueValue ) || (trueValue = !0); isString( falseValue ) || (falseValue = !1); element.on( "click", function ( ) { scope.$apply( function ( ) { ctrl.$setViewValue( element[0].checked ); } ); } ), (ctrl.$render = function ( ) { element[0].checked = ctrl.$viewValue; }), (ctrl.$isEmpty = function ( value ) { return value !== trueValue; }), ctrl.$formatters.push( function ( value ) { return value === trueValue; } ), ctrl.$parsers.push( function ( value ) { return value ? trueValue : falseValue; } ); }, hidden: noop, button: noop, submit: noop, reset: noop, }; function textInputType( scope, element, attr, ctrl, $sniffer, $browser ) { var composing = !1; element.on( "compositionstart", function ( ) { composing = !0; } ), element.on( "compositionend", function ( ) { composing = !1; } ); var listener = function ( ) { if (!composing) { var value = element.val( ); toBoolean( attr.ngTrim || "T" ) && (value = trim( value )), ctrl.$viewValue !== value && scope.$apply( function ( ) { ctrl.$setViewValue( value ); } ); } }; if ($sniffer.hasEvent( "input" )) element.on( "input", listener ); else { var timeout, deferListener = function ( ) { timeout || (timeout = $browser.defer( function ( ) { listener( ), (timeout = null); } )); }; element.on( "keydown", function ( event ) { var key = event.keyCode; 91 === key || (15 < key && key < 19) || (37 <= key && key <= 40) || deferListener( ); } ), $sniffer.hasEvent( "paste" ) && element.on( "paste cut", deferListener ); } element.on( "change", listener ), (ctrl.$render = function ( ) { element.val( ctrl.$isEmpty( ctrl.$viewValue ) ? "" : ctrl.$viewValue ); }); var patternValidator, match, pattern = attr.ngPattern, validate = function ( regexp, value ) { return ctrl.$isEmpty( value ) || regexp.test( value ) ? (ctrl.$setValidity( "pattern", !0 ), value) : void ctrl.$setValidity( "pattern", !1 ); }; if ( (pattern && ((match = pattern.match( /^\/(.*)\/([gim]*)$/ )) ? ((pattern = new RegExp( match[1], match[2] )), (patternValidator = function ( value ) { return validate( pattern, value ); })) : (patternValidator = function ( value ) { var patternObj = scope.$eval( pattern ); if (!patternObj || !patternObj.test) throw minErr( "ngPattern" )( "noregexp", "Expected {0} to be a RegExp but was {1}. Element: {2}", pattern, patternObj, startingTag( element ), ); return validate( patternObj, value ); }), ctrl.$formatters.push( patternValidator ), ctrl.$parsers.push( patternValidator )), attr.ngMinlength) ) { var minlength = int( attr.ngMinlength ), minLengthValidator = function ( value ) { return !ctrl.$isEmpty( value ) && value.length < minlength ? void ctrl.$setValidity( "minlength", !1 ) : (ctrl.$setValidity( "minlength", !0 ), value); }; ctrl.$parsers.push( minLengthValidator ), ctrl.$formatters.push( minLengthValidator ); } if (attr.ngMaxlength) { var maxlength = int( attr.ngMaxlength ), maxLengthValidator = function ( value ) { return !ctrl.$isEmpty( value ) && value.length > maxlength ? void ctrl.$setValidity( "maxlength", !1 ) : (ctrl.$setValidity( "maxlength", !0 ), value); }; ctrl.$parsers.push( maxLengthValidator ), ctrl.$formatters.push( maxLengthValidator ); } } var inputDirective = [ "$browser", "$sniffer", function ( $browser, $sniffer ) { return { restrict: "E", require: "?ngModel", link: function ( scope, element, attr, ctrl ) { ctrl && (inputType[lowercase( attr.type )] || inputType.text)( scope, element, attr, ctrl, $sniffer, $browser, ); }, }; }, ], VALID_CLASS = "ng-valid", INVALID_CLASS = "ng-invalid", PRISTINE_CLASS = "ng-pristine", DIRTY_CLASS = "ng-dirty", NgModelController = [ "$scope", "$exceptionHandler", "$attrs", "$element", "$parse", function ( $scope, $exceptionHandler, $attr, $element, $parse ) { (this.$viewValue = Number.NaN), (this.$modelValue = Number.NaN), (this.$parsers = []), (this.$formatters = []), (this.$viewChangeListeners = []), (this.$pristine = !0), (this.$dirty = !1), (this.$valid = !0), (this.$invalid = !1), (this.$name = $attr.name); var ngModelGet = $parse( $attr.ngModel ), ngModelSet = ngModelGet.assign; if (!ngModelSet) throw minErr( "ngModel" )( "nonassign", "Expression '{0}' is non-assignable. Element: {1}", $attr.ngModel, startingTag( $element ), ); (this.$render = noop), (this.$isEmpty = function ( value ) { return ( isUndefined( value ) || "" === value || null === value || value != value ); }); var parentForm = $element.inheritedData( "$formController" ) || nullFormCtrl, invalidCount = 0, $error = (this.$error = { }); function toggleValidCss( isValid, validationErrorKey ) { (validationErrorKey = validationErrorKey ? "-" + snake_case( validationErrorKey, "-" ) : ""), $element .removeClass( (isValid ? INVALID_CLASS : VALID_CLASS) + validationErrorKey, ) .addClass( (isValid ? VALID_CLASS : INVALID_CLASS) + validationErrorKey, ); } $element.addClass( PRISTINE_CLASS ), toggleValidCss( !0 ), (this.$setValidity = function ( validationErrorKey, isValid ) { $error[validationErrorKey] !== !isValid && (isValid ? ($error[validationErrorKey] && invalidCount--, invalidCount || (toggleValidCss( !0 ), (this.$valid = !0), (this.$invalid = !1))) : (toggleValidCss( !1 ), (this.$invalid = !0), (this.$valid = !1), invalidCount++), ($error[validationErrorKey] = !isValid), toggleValidCss( isValid, validationErrorKey ), parentForm.$setValidity( validationErrorKey, isValid, this )); }), (this.$setPristine = function ( ) { (this.$dirty = !1), (this.$pristine = !0), $element.removeClass( DIRTY_CLASS ).addClass( PRISTINE_CLASS ); }), (this.$setViewValue = function ( value ) { (this.$viewValue = value), this.$pristine && ((this.$dirty = !0), (this.$pristine = !1), $element.removeClass( PRISTINE_CLASS ).addClass( DIRTY_CLASS ), parentForm.$setDirty( )), forEach( this.$parsers, function ( fn ) { value = fn( value ); } ), this.$modelValue !== value && ((this.$modelValue = value), ngModelSet( $scope, value ), forEach( this.$viewChangeListeners, function ( listener ) { try { listener( ); } catch (e) { $exceptionHandler( e ); } } )); }); var ctrl = this; $scope.$watch( function ( ) { var value = ngModelGet( $scope ); if (ctrl.$modelValue !== value) { var formatters = ctrl.$formatters, idx = formatters.length; for (ctrl.$modelValue = value; idx--; ) value = formatters[idx]( value ); ctrl.$viewValue !== value && ((ctrl.$viewValue = value), ctrl.$render( )); } return value; } ); }, ], ngModelDirective = function ( ) { return { require: ["ngModel", "^?form",], controller: NgModelController, link: function ( scope, element, attr, ctrls ) { var modelCtrl = ctrls[0], formCtrl = ctrls[1] || nullFormCtrl; formCtrl.$addControl( modelCtrl ), scope.$on( "$destroy", function ( ) { formCtrl.$removeControl( modelCtrl ); } ); }, }; }, ngChangeDirective = valueFn( { require: "ngModel", link: function ( scope, element, attr, ctrl ) { ctrl.$viewChangeListeners.push( function ( ) { scope.$eval( attr.ngChange ); } ); }, } ), requiredDirective = function ( ) { return { require: "?ngModel", link: function ( scope, elm, attr, ctrl ) { if (ctrl) { attr.required = !0; var validator = function ( value ) { return attr.required && ctrl.$isEmpty( value ) ? void ctrl.$setValidity( "required", !1 ) : (ctrl.$setValidity( "required", !0 ), value); }; ctrl.$formatters.push( validator ), ctrl.$parsers.unshift( validator ), attr.$observe( "required", function ( ) { validator( ctrl.$viewValue ); } ); } }, }; }, ngListDirective = function ( ) { return { require: "ngModel", link: function ( scope, element, attr, ctrl ) { var match = /\/(.*)\//.exec( attr.ngList ), separator = (match && new RegExp( match[1] )) || attr.ngList || ","; ctrl.$parsers.push( function ( viewValue ) { if (!isUndefined( viewValue )) { var list = []; return ( viewValue && forEach( viewValue.split( separator ), function ( value ) { value && list.push( trim( value ) ); } ), list ); } } ), ctrl.$formatters.push( function ( value ) { if (isArray( value )) return value.join( ", " ); } ), (ctrl.$isEmpty = function ( value ) { return !value || !value.length; }); }, }; }, CONSTANT_VALUE_REGEXP = /^(true|false|\d+)$/, ngValueDirective = function ( ) { return { priority: 100, compile: function ( tpl, tplAttr ) { return CONSTANT_VALUE_REGEXP.test( tplAttr.ngValue ) ? function ( scope, elm, attr ) { attr.$set( "value", scope.$eval( attr.ngValue ) ); } : function ( scope, elm, attr ) { scope.$watch( attr.ngValue, function ( value ) { attr.$set( "value", value ); } ); }; }, }; }, ngBindDirective = ngDirective( function ( scope, element, attr ) { element.addClass( "ng-binding" ).data( "$binding", attr.ngBind ), scope.$watch( attr.ngBind, function ( value ) { element.text( null == value ? "" : value ); } ); } ), ngBindTemplateDirective = [ "$interpolate", function ( $interpolate ) { return function ( scope, element, attr ) { var interpolateFn = $interpolate( element.attr( attr.$attr.ngBindTemplate ), ); element.addClass( "ng-binding" ).data( "$binding", interpolateFn ), attr.$observe( "ngBindTemplate", function ( value ) { element.text( value ); } ); }; }, ], ngBindHtmlDirective = [ "$sce", "$parse", function ( $sce, $parse ) { return function ( scope, element, attr ) { element.addClass( "ng-binding" ).data( "$binding", attr.ngBindHtml ); var parsed = $parse( attr.ngBindHtml ); scope.$watch( function ( ) { return (parsed( scope ) || "").toString( ); }, function ( value ) { element.html( $sce.getTrustedHtml( parsed( scope ) ) || "" ); }, ); }; }, ]; function classDirective( name, selector ) { return ( (name = "ngClass" + name), function ( ) { return { restrict: "AC", link: function ( scope, element, attr ) { var oldVal; function ngClassWatchAction( newVal ) { if (!0 === selector || scope.$index % 2 === selector) { var newClasses = flattenClasses( newVal || "" ); oldVal ? equals( newVal, oldVal ) || attr.$updateClass( newClasses, flattenClasses( oldVal ) ) : attr.$addClass( newClasses ); } oldVal = copy( newVal ); } function flattenClasses( classVal ) { if (isArray( classVal )) return classVal.join( " " ); if (isObject( classVal )) { var classes = []; return ( forEach( classVal, function ( v, k ) { v && classes.push( k ); } ), classes.join( " " ) ); } return classVal; } scope.$watch( attr[name], ngClassWatchAction, !0 ), attr.$observe( "class", function ( value ) { ngClassWatchAction( scope.$eval( attr[name] ) ); } ), "ngClass" !== name && scope.$watch( "$index", function ( $index, old$index ) { var mod = 1 & $index; if ((mod !== old$index) & 1) { var classes = flattenClasses( scope.$eval( attr[name] ) ); mod === selector ? attr.$addClass( classes ) : attr.$removeClass( classes ); } } ); }, }; } ); } var ngClassDirective = classDirective( "", !0 ), ngClassOddDirective = classDirective( "Odd", 0 ), ngClassEvenDirective = classDirective( "Even", 1 ), ngCloakDirective = ngDirective( { compile: function ( element, attr ) { attr.$set( "ngCloak", undefined ), element.removeClass( "ng-cloak" ); }, } ), ngControllerDirective = [ function ( ) { return { scope: !0, controller: "@", priority: 500, }; }, ], ngEventDirectives = { }; forEach( "click dblclick mousedown mouseup mouseover mouseout mousemove mouseenter mouseleave keydown keyup keypress submit focus blur copy cut paste".split( " ", ), function ( name ) { var directiveName = directiveNormalize( "ng-" + name ); ngEventDirectives[directiveName] = [ "$parse", function ( $parse ) { return { compile: function ( $element, attr ) { var fn = $parse( attr[directiveName] ); return function ( scope, element, attr ) { element.on( lowercase( name ), function ( event ) { scope.$apply( function ( ) { fn( scope, { $event: event, } ); } ); } ); }; }, }; }, ]; }, ); var ngIfDirective = [ "$animate", function ( $animate ) { return { transclude: "element", priority: 600, terminal: !0, restrict: "A", $$tlb: !0, link: function ( $scope, $element, $attr, ctrl, $transclude ) { var block, childScope; $scope.$watch( $attr.ngIf, function ( value ) { toBoolean( value ) ? childScope || ((childScope = $scope.$new( )), $transclude( childScope, function ( clone ) { (clone[clone.length++] = document.createComment( " end ngIf: " + $attr.ngIf + " ", )), (block = { clone: clone, }), $animate.enter( clone, $element.parent( ), $element ); } )) : (childScope && (childScope.$destroy( ), (childScope = null)), block && ($animate.leave( getBlockElements( block.clone ) ), (block = null))); } ); }, }; }, ], ngIncludeDirective = [ "$http", "$templateCache", "$anchorScroll", "$animate", "$sce", function ( $http, $templateCache, $anchorScroll, $animate, $sce ) { return { restrict: "ECA", priority: 400, terminal: !0, transclude: "element", controller: angular.noop, compile: function ( element, attr ) { var srcExp = attr.ngInclude || attr.src, onloadExp = attr.onload || "", autoScrollExp = attr.autoscroll; return function ( scope, $element, $attr, ctrl, $transclude ) { var currentScope, currentElement, changeCounter = 0, cleanupLastIncludeContent = function ( ) { currentScope && (currentScope.$destroy( ), (currentScope = null)), currentElement && ($animate.leave( currentElement ), (currentElement = null)); }; scope.$watch( $sce.parseAsResourceUrl( srcExp ), function ( src ) { var afterAnimation = function ( ) { !isDefined( autoScrollExp ) || (autoScrollExp && !scope.$eval( autoScrollExp )) || $anchorScroll( ); }, thisChangeId = ++changeCounter; src ? ($http .get( src, { cache: $templateCache, } ) .success( function ( response ) { if (thisChangeId === changeCounter) { var newScope = scope.$new( ); ctrl.template = response; var clone = $transclude( newScope, function ( clone ) { cleanupLastIncludeContent( ), $animate.enter( clone, null, $element, afterAnimation, ); } ); (currentElement = clone), (currentScope = newScope).$emit( "$includeContentLoaded", ), scope.$eval( onloadExp ); } } ) .error( function ( ) { thisChangeId === changeCounter && cleanupLastIncludeContent( ); } ), scope.$emit( "$includeContentRequested" )) : (cleanupLastIncludeContent( ), (ctrl.template = null)); } ); }; }, }; }, ], ngIncludeFillContentDirective = [ "$compile", function ( $compile ) { return { restrict: "ECA", priority: -400, require: "ngInclude", link: function ( scope, $element, $attr, ctrl ) { $element.html( ctrl.template ), $compile( $element.contents( ) )( scope ); }, }; }, ], ngInitDirective = ngDirective( { priority: 450, compile: function ( ) { return { pre: function ( scope, element, attrs ) { scope.$eval( attrs.ngInit ); }, }; }, } ), ngNonBindableDirective = ngDirective( { terminal: !0, priority: 1e3, } ), ngPluralizeDirective = [ "$locale", "$interpolate", function ( $locale, $interpolate ) { var BRACE = /{}/g; return { restrict: "EA", link: function ( scope, element, attr ) { var numberExp = attr.count, whenExp = attr.$attr.when && element.attr( attr.$attr.when ), offset = attr.offset || 0, whens = scope.$eval( whenExp ) || { }, whensExpFns = { }, startSymbol = $interpolate.startSymbol( ), endSymbol = $interpolate.endSymbol( ), isWhen = /^when(Minus)?(.+)$/; forEach( attr, function ( expression, attributeName ) { isWhen.test( attributeName ) && (whens[ lowercase( attributeName.replace( "when", "" ).replace( "Minus", "-" ), ) ] = element.attr( attr.$attr[attributeName] )); } ), forEach( whens, function ( expression, key ) { whensExpFns[key] = $interpolate( expression.replace( BRACE, startSymbol + numberExp + "-" + offset + endSymbol, ), ); } ), scope.$watch( function ( ) { var value = parseFloat( scope.$eval( numberExp ) ); return isNaN( value ) ? "" : (value in whens || (value = $locale.pluralCat( value - offset )), whensExpFns[value]( scope, element, !0 )); }, function ( newVal ) { element.text( newVal ); }, ); }, }; }, ], ngRepeatDirective = [ "$parse", "$animate", function ( $parse, $animate ) { var ngRepeatMinErr = minErr( "ngRepeat" ); return { transclude: "element", priority: 1e3, terminal: !0, $$tlb: !0, link: function ( $scope, $element, $attr, ctrl, $transclude ) { var trackByExp, trackByExpGetter, trackByIdExpFn, trackByIdArrayFn, trackByIdObjFn, lhs, rhs, valueIdentifier, keyIdentifier, expression = $attr.ngRepeat, match = expression.match( /^\s*(.+)\s+in\s+(.*?)\s*(\s+track\s+by\s+(.+)\s*)?$/, ), hashFnLocals = { $id: hashKey, }; if (!match) throw ngRepeatMinErr( "iexp", "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'.", expression, ); if ( ((lhs = match[1]), (rhs = match[2]), (trackByExp = match[4]) ? ((trackByExpGetter = $parse( trackByExp )), (trackByIdExpFn = function ( key, value, index ) { return ( keyIdentifier && (hashFnLocals[keyIdentifier] = key), (hashFnLocals[valueIdentifier] = value), (hashFnLocals.$index = index), trackByExpGetter( $scope, hashFnLocals ) ); })) : ((trackByIdArrayFn = function ( key, value ) { return hashKey( value ); }), (trackByIdObjFn = function ( key ) { return key; })), !(match = lhs.match( /^(?:([\$\w]+)|\(([\$\w]+)\s*,\s*([\$\w]+)\))$/, ))) ) throw ngRepeatMinErr( "iidexp", "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'.", lhs, ); (valueIdentifier = match[3] || match[1]), (keyIdentifier = match[2]); var lastBlockMap = { }; $scope.$watchCollection( rhs, function ( collection ) { var index, length, nextNode, arrayLength, childScope, key, value, trackById, trackByIdFn, collectionKeys, block, elementsToRemove, previousNode = $element[0], nextBlockMap = { }, nextBlockOrder = []; if (isArrayLike( collection )) (collectionKeys = collection), (trackByIdFn = trackByIdExpFn || trackByIdArrayFn); else { for (key in ((trackByIdFn = trackByIdExpFn || trackByIdObjFn), (collectionKeys = []), collection)) collection.hasOwnProperty( key ) && "$" != key.charAt( 0 ) && collectionKeys.push( key ); collectionKeys.sort( ); } for ( arrayLength = collectionKeys.length, length = nextBlockOrder.length = collectionKeys.length, index = 0; index < length; index++ ) if ( (assertNotHasOwnProperty( (trackById = trackByIdFn( (key = collection === collectionKeys ? index : collectionKeys[index]), (value = collection[key]), index, )), "`track by` id", ), lastBlockMap.hasOwnProperty( trackById )) ) (block = lastBlockMap[trackById]), delete lastBlockMap[trackById], (nextBlockMap[trackById] = block), (nextBlockOrder[index] = block); else { if (nextBlockMap.hasOwnProperty( trackById )) throw ( (forEach( nextBlockOrder, function ( block ) { block && block.scope && (lastBlockMap[block.id] = block); } ), ngRepeatMinErr( "dupes", "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}", expression, trackById, )) ); (nextBlockOrder[index] = { id: trackById, }), (nextBlockMap[trackById] = !1); } for (key in lastBlockMap) lastBlockMap.hasOwnProperty( key ) && ((elementsToRemove = getBlockElements( (block = lastBlockMap[key]).clone, )), $animate.leave( elementsToRemove ), forEach( elementsToRemove, function ( element ) { element.$$NG_REMOVED = !0; } ), block.scope.$destroy( )); for ( index = 0, length = collectionKeys.length; index < length; index++ ) { if ( ((value = collection[ (key = collection === collectionKeys ? index : collectionKeys[index]) ]), (block = nextBlockOrder[index]), nextBlockOrder[index - 1] && (previousNode = getBlockEnd( nextBlockOrder[index - 1] )), block.scope) ) { (childScope = block.scope), (nextNode = previousNode); do { nextNode = nextNode.nextSibling; } while (nextNode && nextNode.$$NG_REMOVED); getBlockStart( block ) != nextNode && $animate.move( getBlockElements( block.clone ), null, jqLite( previousNode ), ), (previousNode = getBlockEnd( block )); } else childScope = $scope.$new( ); (childScope[valueIdentifier] = value), keyIdentifier && (childScope[keyIdentifier] = key), (childScope.$index = index), (childScope.$first = 0 === index), (childScope.$last = index === arrayLength - 1), (childScope.$middle = !( childScope.$first || childScope.$last )), (childScope.$odd = !(childScope.$even = 0 == (1 & index))), block.scope || $transclude( childScope, function ( clone ) { (clone[clone.length++] = document.createComment( " end ngRepeat: " + expression + " ", )), $animate.enter( clone, null, jqLite( previousNode ) ), (previousNode = clone), (block.scope = childScope), (block.clone = clone), (nextBlockMap[block.id] = block); } ); } lastBlockMap = nextBlockMap; } ); }, }; function getBlockStart( block ) { return block.clone[0]; } function getBlockEnd( block ) { return block.clone[block.clone.length - 1]; } }, ], ngShowDirective = [ "$animate", function ( $animate ) { return function ( scope, element, attr ) { scope.$watch( attr.ngShow, function ( value ) { $animate[toBoolean( value ) ? "removeClass" : "addClass"]( element, "ng-hide", ); } ); }; }, ], ngHideDirective = [ "$animate", function ( $animate ) { return function ( scope, element, attr ) { scope.$watch( attr.ngHide, function ( value ) { $animate[toBoolean( value ) ? "addClass" : "removeClass"]( element, "ng-hide", ); } ); }; }, ], ngStyleDirective = ngDirective( function ( scope, element, attr ) { scope.$watch( attr.ngStyle, function ( newStyles, oldStyles ) { oldStyles && newStyles !== oldStyles && forEach( oldStyles, function ( val, style ) { element.css( style, "" ); } ), newStyles && element.css( newStyles ); }, !0, ); } ), ngSwitchDirective = [ "$animate", function ( $animate ) { return { restrict: "EA", require: "ngSwitch", controller: [ "$scope", function ( ) { this.cases = { }; }, ], link: function ( scope, element, attr, ngSwitchController ) { var selectedTranscludes, selectedElements, watchExpr = attr.ngSwitch || attr.on, selectedScopes = []; scope.$watch( watchExpr, function ( value ) { for (var i = 0, ii = selectedScopes.length; i < ii; i++) selectedScopes[i].$destroy( ), $animate.leave( selectedElements[i] ); (selectedElements = []), (selectedScopes = []), (selectedTranscludes = ngSwitchController.cases["!" + value] || ngSwitchController.cases["?"]) && (scope.$eval( attr.change ), forEach( selectedTranscludes, function ( selectedTransclude ) { var selectedScope = scope.$new( ); selectedScopes.push( selectedScope ), selectedTransclude.transclude( selectedScope, function ( caseElement ) { var anchor = selectedTransclude.element; selectedElements.push( caseElement ), $animate.enter( caseElement, anchor.parent( ), anchor, ); }, ); } )); } ); }, }; }, ], ngSwitchWhenDirective = ngDirective( { transclude: "element", priority: 800, require: "^ngSwitch", compile: function ( element, attrs ) { return function ( scope, element, attr, ctrl, $transclude ) { (ctrl.cases["!" + attrs.ngSwitchWhen] = ctrl.cases["!" + attrs.ngSwitchWhen] || []), ctrl.cases["!" + attrs.ngSwitchWhen].push( { transclude: $transclude, element: element, } ); }; }, } ), ngSwitchDefaultDirective = ngDirective( { transclude: "element", priority: 800, require: "^ngSwitch", link: function ( scope, element, attr, ctrl, $transclude ) { (ctrl.cases["?"] = ctrl.cases["?"] || []), ctrl.cases["?"].push( { transclude: $transclude, element: element, } ); }, } ), ngTranscludeDirective = ngDirective( { controller: [ "$element", "$transclude", function ( $element, $transclude ) { if (!$transclude) throw minErr( "ngTransclude" )( "orphan", "Illegal use of ngTransclude directive in the template! No parent directive that requires a transclusion found. Element: {0}", startingTag( $element ), ); this.$transclude = $transclude; }, ], link: function ( $scope, $element, $attrs, controller ) { controller.$transclude( function ( clone ) { $element.empty( ), $element.append( clone ); } ); }, } ), scriptDirective = [ "$templateCache", function ( $templateCache ) { return { restrict: "E", terminal: !0, compile: function ( element, attr ) { if ("text/ng-template" == attr.type) { var templateUrl = attr.id, text = element[0].text; $templateCache.put( templateUrl, text ); } }, }; }, ], ngOptionsMinErr = minErr( "ngOptions" ), ngOptionsDirective = valueFn( { terminal: !0, } ), selectDirective = [ "$compile", "$parse", function ( $compile, $parse ) { var NG_OPTIONS_REGEXP = /^\s*(.*?)(?:\s+as\s+(.*?))?(?:\s+group\s+by\s+(.*))?\s+for\s+(?:([\$\w][\$\w]*)|(?:\(\s*([\$\w][\$\w]*)\s*,\s*([\$\w][\$\w]*)\s*\)))\s+in\s+(.*?)(?:\s+track\s+by\s+(.*?))?$/, nullModelCtrl = { $setViewValue: noop, }; return { restrict: "E", require: ["select", "?ngModel",], controller: [ "$element", "$scope", "$attrs", function ( $element, $scope, $attrs ) { var unknownOption, self = this, optionsMap = { }, ngModelCtrl = nullModelCtrl; (self.databound = $attrs.ngModel), (self.init = function ( ngModelCtrl_, nullOption_, unknownOption_, ) { (ngModelCtrl = ngModelCtrl_), nullOption_, (unknownOption = unknownOption_); }), (self.addOption = function ( value ) { assertNotHasOwnProperty( value, '"option value"' ), (optionsMap[value] = !0), ngModelCtrl.$viewValue == value && ($element.val( value ), unknownOption.parent( ) && unknownOption.remove( )); }), (self.removeOption = function ( value ) { this.hasOption( value ) && (delete optionsMap[value], ngModelCtrl.$viewValue == value && this.renderUnknownOption( value )); }), (self.renderUnknownOption = function ( val ) { var unknownVal = "? " + hashKey( val ) + " ?"; unknownOption.val( unknownVal ), $element.prepend( unknownOption ), $element.val( unknownVal ), unknownOption.prop( "selected", !0 ); }), (self.hasOption = function ( value ) { return optionsMap.hasOwnProperty( value ); }), $scope.$on( "$destroy", function ( ) { self.renderUnknownOption = noop; } ); }, ], link: function ( scope, element, attr, ctrls ) { if (ctrls[1]) { for ( var emptyOption, selectCtrl = ctrls[0], ngModelCtrl = ctrls[1], multiple = attr.multiple, optionsExp = attr.ngOptions, nullOption = !1, optionTemplate = jqLite( document.createElement( "option" ) ), optGroupTemplate = jqLite( document.createElement( "optgroup" ) ), unknownOption = optionTemplate.clone( ), i = 0, children = element.children( ), ii = children.length; i < ii; i++ ) if ("" === children[i].value) { emptyOption = nullOption = children.eq( i ); break; } if ( (selectCtrl.init( ngModelCtrl, nullOption, unknownOption ), multiple && (attr.required || attr.ngRequired)) ) { var requiredValidator = function ( value ) { return ( ngModelCtrl.$setValidity( "required", !attr.required || (value && value.length), ), value ); }; ngModelCtrl.$parsers.push( requiredValidator ), ngModelCtrl.$formatters.unshift( requiredValidator ), attr.$observe( "required", function ( ) { requiredValidator( ngModelCtrl.$viewValue ); } ); } optionsExp ? (function ( scope, selectElement, ctrl ) { var match; if (!(match = optionsExp.match( NG_OPTIONS_REGEXP ))) throw ngOptionsMinErr( "iexp", "Expected expression in form of '_select_ (as _label_)? for (_key_,)?_value_ in _collection_' but got '{0}'. Element: {1}", optionsExp, startingTag( selectElement ), ); var displayFn = $parse( match[2] || match[1] ), valueName = match[4] || match[6], keyName = match[5], groupByFn = $parse( match[3] || "" ), valueFn = $parse( match[2] ? match[1] : valueName ), valuesFn = $parse( match[7] ), trackFn = match[8] ? $parse( match[8] ) : null, optionGroupsCache = [ [{ element: selectElement, label: "", },], ]; nullOption && ($compile( nullOption )( scope ), nullOption.removeClass( "ng-scope" ), nullOption.remove( )); function render( ) { var optionGroupName, optionGroup, option, existingParent, existingOptions, existingOption, key, groupLength, length, groupIndex, index, selected, lastElement, element, label, optionGroups = { "": [], }, optionGroupNames = ["",], modelValue = ctrl.$modelValue, values = valuesFn( scope ) || [], keys = keyName ? sortedKeys( values ) : values, locals = { }, selectedSet = !1; if (multiple) if (trackFn && isArray( modelValue )) { selectedSet = new HashMap( [] ); for ( var trackIndex = 0; trackIndex < modelValue.length; trackIndex++ ) (locals[valueName] = modelValue[trackIndex]), selectedSet.put( trackFn( scope, locals ), modelValue[trackIndex], ); } else selectedSet = new HashMap( modelValue ); for (index = 0; index < (length = keys.length); index++) { if (((key = index), keyName)) { if ("$" === (key = keys[index]).charAt( 0 )) continue; locals[keyName] = key; } if ( ((locals[valueName] = values[key]), (optionGroup = optionGroups[ (optionGroupName = groupByFn( scope, locals ) || "") ]) || ((optionGroup = optionGroups[optionGroupName] = []), optionGroupNames.push( optionGroupName )), multiple) ) selected = isDefined( selectedSet.remove( trackFn ? trackFn( scope, locals ) : valueFn( scope, locals ), ), ); else { if (trackFn) { var modelCast = { }; (modelCast[valueName] = modelValue), (selected = trackFn( scope, modelCast ) === trackFn( scope, locals )); } else selected = modelValue === valueFn( scope, locals ); selectedSet = selectedSet || selected; } (label = isDefined( (label = displayFn( scope, locals )) ) ? label : ""), optionGroup.push( { id: trackFn ? trackFn( scope, locals ) : keyName ? keys[index] : index, label: label, selected: selected, } ); } for ( multiple || (nullOption || null === modelValue ? optionGroups[""].unshift( { id: "", label: "", selected: !selectedSet, } ) : selectedSet || optionGroups[""].unshift( { id: "?", label: "", selected: !0, } )), groupIndex = 0, groupLength = optionGroupNames.length; groupIndex < groupLength; groupIndex++ ) { for ( optionGroup = optionGroups[ (optionGroupName = optionGroupNames[groupIndex]) ], optionGroupsCache.length <= groupIndex ? ((existingOptions = [ (existingParent = { element: optGroupTemplate .clone( ) .attr( "label", optionGroupName ), label: optionGroup.label, }), ]), optionGroupsCache.push( existingOptions ), selectElement.append( existingParent.element )) : (existingParent = (existingOptions = optionGroupsCache[groupIndex])[0]).label != optionGroupName && existingParent.element.attr( "label", (existingParent.label = optionGroupName), ), lastElement = null, index = 0, length = optionGroup.length; index < length; index++ ) (option = optionGroup[index]), (existingOption = existingOptions[index + 1]) ? ((lastElement = existingOption.element), existingOption.label !== option.label && lastElement.text( (existingOption.label = option.label), ), existingOption.id !== option.id && lastElement.val( (existingOption.id = option.id), ), lastElement[0].selected !== option.selected && lastElement.prop( "selected", (existingOption.selected = option.selected), )) : ("" === option.id && nullOption ? (element = nullOption) : (element = optionTemplate.clone( )) .val( option.id ) .attr( "selected", option.selected ) .text( option.label ), existingOptions.push( (existingOption = { element: element, label: option.label, id: option.id, selected: option.selected, }), ), lastElement ? lastElement.after( element ) : existingParent.element.append( element ), (lastElement = element)); for (index++; existingOptions.length > index; ) existingOptions.pop( ).element.remove( ); } for (; optionGroupsCache.length > groupIndex; ) optionGroupsCache.pop( )[0].element.remove( ); } selectElement.empty( ), selectElement.on( "change", function ( ) { scope.$apply( function ( ) { var optionGroup, key, value, optionElement, index, groupIndex, length, groupLength, trackIndex, collection = valuesFn( scope ) || [], locals = { }; if (multiple) { for ( value = [], groupIndex = 0, groupLength = optionGroupsCache.length; groupIndex < groupLength; groupIndex++ ) for ( index = 1, length = (optionGroup = optionGroupsCache[groupIndex]).length; index < length; index++ ) if ( (optionElement = optionGroup[index].element)[0].selected ) { if ( ((key = optionElement.val( )), keyName && (locals[keyName] = key), trackFn) ) for ( trackIndex = 0; trackIndex < collection.length && ((locals[valueName] = collection[trackIndex]), trackFn( scope, locals ) != key); trackIndex++ ); else locals[valueName] = collection[key]; value.push( valueFn( scope, locals ) ); } } else if ("?" == (key = selectElement.val( ))) value = undefined; else if ("" === key) value = null; else if (trackFn) { for ( trackIndex = 0; trackIndex < collection.length; trackIndex++ ) if ( ((locals[valueName] = collection[trackIndex]), trackFn( scope, locals ) == key) ) { value = valueFn( scope, locals ); break; } } else (locals[valueName] = collection[key]), keyName && (locals[keyName] = key), (value = valueFn( scope, locals )); ctrl.$setViewValue( value ); } ); } ), (ctrl.$render = render), scope.$watch( render ); })( scope, element, ngModelCtrl ) : multiple ? (function ( scope, selectElement, ctrl ) { var lastView; (ctrl.$render = function ( ) { var items = new HashMap( ctrl.$viewValue ); forEach( selectElement.find( "option" ), function ( option ) { option.selected = isDefined( items.get( option.value ) ); } ); }), scope.$watch( function ( ) { equals( lastView, ctrl.$viewValue ) || ((lastView = copy( ctrl.$viewValue )), ctrl.$render( )); } ), selectElement.on( "change", function ( ) { scope.$apply( function ( ) { var array = []; forEach( selectElement.find( "option" ), function ( option ) { option.selected && array.push( option.value ); }, ), ctrl.$setViewValue( array ); } ); } ); })( scope, element, ngModelCtrl ) : (function ( scope, selectElement, ngModelCtrl, selectCtrl ) { (ngModelCtrl.$render = function ( ) { var viewValue = ngModelCtrl.$viewValue; selectCtrl.hasOption( viewValue ) ? (unknownOption.parent( ) && unknownOption.remove( ), selectElement.val( viewValue ), "" === viewValue && emptyOption.prop( "selected", !0 )) : isUndefined( viewValue ) && emptyOption ? selectElement.val( "" ) : selectCtrl.renderUnknownOption( viewValue ); }), selectElement.on( "change", function ( ) { scope.$apply( function ( ) { unknownOption.parent( ) && unknownOption.remove( ), ngModelCtrl.$setViewValue( selectElement.val( ) ); } ); } ); })( scope, element, ngModelCtrl, selectCtrl ); } }, }; }, ], optionDirective = [ "$interpolate", function ( $interpolate ) { var nullSelectCtrl = { addOption: noop, removeOption: noop, }; return { restrict: "E", priority: 100, compile: function ( element, attr ) { if (isUndefined( attr.value )) { var interpolateFn = $interpolate( element.text( ), !0 ); interpolateFn || attr.$set( "value", element.text( ) ); } return function ( scope, element, attr ) { var parent = element.parent( ), selectCtrl = parent.data( "$selectController" ) || parent.parent( ).data( "$selectController" ); selectCtrl && selectCtrl.databound ? element.prop( "selected", !1 ) : (selectCtrl = nullSelectCtrl), interpolateFn ? scope.$watch( interpolateFn, function ( newVal, oldVal ) { attr.$set( "value", newVal ), newVal !== oldVal && selectCtrl.removeOption( oldVal ), selectCtrl.addOption( newVal ); } ) : selectCtrl.addOption( attr.value ), element.on( "$destroy", function ( ) { selectCtrl.removeOption( attr.value ); } ); }; }, }; }, ], styleDirective = valueFn( { restrict: "E", terminal: !0, } ); (jQuery = window.jQuery) ? ((jqLite = jQuery), extend( jQuery.fn, { scope: JQLitePrototype.scope, isolateScope: JQLitePrototype.isolateScope, controller: JQLitePrototype.controller, injector: JQLitePrototype.injector, inheritedData: JQLitePrototype.inheritedData, } ), jqLitePatchJQueryRemove( "remove", !0, !0, !1 ), jqLitePatchJQueryRemove( "empty", !1, !1, !1 ), jqLitePatchJQueryRemove( "html", !1, !1, !0 )) : (jqLite = JQLite), (angular.element = jqLite), (function ( angular ) { extend( angular, { bootstrap: bootstrap, copy: copy, extend: extend, equals: equals, element: jqLite, forEach: forEach, injector: createInjector, noop: noop, bind: bind, toJson: toJson, fromJson: fromJson, identity: identity, isUndefined: isUndefined, isDefined: isDefined, isString: isString, isFunction: isFunction, isObject: isObject, isNumber: isNumber, isElement: isElement, isArray: isArray, version: version, isDate: isDate, lowercase: lowercase, uppercase: uppercase, callbacks: { counter: 0, }, $$minErr: minErr, $$csp: csp, } ), (angularModule = (function ( window ) { var $injectorMinErr = minErr( "$injector" ), ngMinErr = minErr( "ng" ); function ensure( obj, name, factory ) { return obj[name] || (obj[name] = factory( )); } var angular = ensure( window, "angular", Object ); return ( (angular.$$minErr = angular.$$minErr || minErr), ensure( angular, "module", function ( ) { var modules = { }; return function ( name, requires, configFn ) { return ( (function ( name, context ) { if ("hasOwnProperty" === name) throw ngMinErr( "badname", "hasOwnProperty is not a valid {0} name", "module", ); })( name ), requires && modules.hasOwnProperty( name ) && (modules[name] = null), ensure( modules, name, function ( ) { if (!requires) throw $injectorMinErr( "nomod", "Module '{0}' is not available! You either misspelled the module name or forgot to load it. If registering a module ensure that you specify the dependencies as the second argument.", name, ); var invokeQueue = [], runBlocks = [], config = invokeLater( "$injector", "invoke" ), moduleInstance = { _invokeQueue: invokeQueue, _runBlocks: runBlocks, requires: requires, name: name, provider: invokeLater( "$provide", "provider" ), factory: invokeLater( "$provide", "factory" ), service: invokeLater( "$provide", "service" ), value: invokeLater( "$provide", "value" ), constant: invokeLater( "$provide", "constant", "unshift", ), animation: invokeLater( "$animateProvider", "register" ), filter: invokeLater( "$filterProvider", "register" ), controller: invokeLater( "$controllerProvider", "register", ), directive: invokeLater( "$compileProvider", "directive" ), config: config, run: function ( block ) { return runBlocks.push( block ), this; }, }; return configFn && config( configFn ), moduleInstance; function invokeLater( provider, method, insertMethod ) { return function ( ) { return ( invokeQueue[insertMethod || "push"]( [ provider, method, arguments, ] ), moduleInstance ); }; } } ) ); }; } ) ); })( window )); try { angularModule( "ngLocale" ); } catch (e) { angularModule( "ngLocale", [] ).provider( "$locale", $LocaleProvider ); } angularModule( "ng", ["ngLocale",], [ "$provide", function ( $provide ) { $provide.provider( { $$sanitizeUri: $$SanitizeUriProvider, } ), $provide .provider( "$compile", $CompileProvider ) .directive( { a: htmlAnchorDirective, input: inputDirective, textarea: inputDirective, form: formDirective, script: scriptDirective, select: selectDirective, style: styleDirective, option: optionDirective, ngBind: ngBindDirective, ngBindHtml: ngBindHtmlDirective, ngBindTemplate: ngBindTemplateDirective, ngClass: ngClassDirective, ngClassEven: ngClassEvenDirective, ngClassOdd: ngClassOddDirective, ngCloak: ngCloakDirective, ngController: ngControllerDirective, ngForm: ngFormDirective, ngHide: ngHideDirective, ngIf: ngIfDirective, ngInclude: ngIncludeDirective, ngInit: ngInitDirective, ngNonBindable: ngNonBindableDirective, ngPluralize: ngPluralizeDirective, ngRepeat: ngRepeatDirective, ngShow: ngShowDirective, ngStyle: ngStyleDirective, ngSwitch: ngSwitchDirective, ngSwitchWhen: ngSwitchWhenDirective, ngSwitchDefault: ngSwitchDefaultDirective, ngOptions: ngOptionsDirective, ngTransclude: ngTranscludeDirective, ngModel: ngModelDirective, ngList: ngListDirective, ngChange: ngChangeDirective, required: requiredDirective, ngRequired: requiredDirective, ngValue: ngValueDirective, } ) .directive( { ngInclude: ngIncludeFillContentDirective, } ) .directive( ngAttributeAliasDirectives ) .directive( ngEventDirectives ), $provide.provider( { $anchorScroll: $AnchorScrollProvider, $animate: $AnimateProvider, $browser: $BrowserProvider, $cacheFactory: $CacheFactoryProvider, $controller: $ControllerProvider, $document: $DocumentProvider, $exceptionHandler: $ExceptionHandlerProvider, $filter: $FilterProvider, $interpolate: $InterpolateProvider, $interval: $IntervalProvider, $http: $HttpProvider, $httpBackend: $HttpBackendProvider, $location: $LocationProvider, $log: $LogProvider, $parse: $ParseProvider, $rootScope: $RootScopeProvider, $q: $QProvider, $sce: $SceProvider, $sceDelegate: $SceDelegateProvider, $sniffer: $SnifferProvider, $templateCache: $TemplateCacheProvider, $timeout: $TimeoutProvider, $window: $WindowProvider, } ); }, ], ); })( angular ), jqLite( document ).ready( function ( ) { !(function ( element, bootstrap ) { var appElement, module, elements = [element,], names = ["ng:app", "ng-app", "x-ng-app", "data-ng-app",], NG_APP_CLASS_REGEXP = /\sng[:\-]app(:\s*([\w\d_]+);?)?\s/; function append( element ) { element && elements.push( element ); } forEach( names, function ( name ) { (names[name] = !0), append( document.getElementById( name ) ), (name = name.replace( ":", "\\:" )), element.querySelectorAll && (forEach( element.querySelectorAll( "." + name ), append ), forEach( element.querySelectorAll( "." + name + "\\:" ), append ), forEach( element.querySelectorAll( "[" + name + "]" ), append )); } ), forEach( elements, function ( element ) { if (!appElement) { var className = " " + element.className + " ", match = NG_APP_CLASS_REGEXP.exec( className ); match ? ((appElement = element), (module = (match[2] || "").replace( /\s+/g, "," ))) : forEach( element.attributes, function ( attr ) { !appElement && names[attr.name] && ((appElement = element), (module = attr.value)); } ); } } ), appElement && bootstrap( appElement, module ? [module,] : [] ); })( document, bootstrap ); } ); })( window, document ), !angular.$$csp( ) && angular .element( document ) .find( "head" ) .prepend( '', );