function BigInteger ( e , t , n ) { null != e && ( "number" == typeof e ? this . fromNumber ( e , t , n ) : null == t && "string" != typeof e ? this . fromString ( e , 256 ) : this . fromString ( e , t ) ) } function nbi ( ) { return new BigInteger ( null ) } function am1 ( e , t , n , i , a , o ) { for ( ; -- o >= 0 ; ) { var s = t * this [ e ++ ] + n [ i ] + a ; a = Math . floor ( s / 67108864 ) , n [ i ++ ] = 67108863 & s } return a } function am2 ( e , t , n , i , a , o ) { for ( var s = 32767 & t , r = t >> 15 ; -- o >= 0 ; ) { var l = 32767 & this [ e ] , c = this [ e ++ ] >> 15 , d = r * l + c * s ; l = s * l + ( ( 32767 & d ) << 15 ) + n [ i ] + ( 1073741823 & a ) , a = ( l >>> 30 ) + ( d >>> 15 ) + r * c + ( a >>> 30 ) , n [ i ++ ] = 1073741823 & l } return a } function am3 ( e , t , n , i , a , o ) { for ( var s = 16383 & t , r = t >> 14 ; -- o >= 0 ; ) { var l = 16383 & this [ e ] , c = this [ e ++ ] >> 14 , d = r * l + c * s ; l = s * l + ( ( 16383 & d ) << 14 ) + n [ i ] + a , a = ( l >> 28 ) + ( d >> 14 ) + r * c , n [ i ++ ] = 268435455 & l } return a } function int2char ( e ) { return BI _RM . charAt ( e ) } function intAt ( e , t ) { var n = BI _RC [ e . charCodeAt ( t ) ] ; return null == n ? - 1 : n } function bnpCopyTo ( e ) { for ( var t = this . t - 1 ; t >= 0 ; -- t ) e [ t ] = this [ t ] ; e . t = this . t , e . s = this . s } function bnpFromInt ( e ) { this . t = 1 , this . s = 0 > e ? - 1 : 0 , e > 0 ? this [ 0 ] = e : - 1 > e ? this [ 0 ] = e + this . DV : this . t = 0 } function nbv ( e ) { var t = nbi ( ) ; return t . fromInt ( e ) , t } function bnpFromString ( e , t , n ) { var i ; if ( 16 == t ) i = 4 ; else if ( 8 == t ) i = 3 ; else if ( 256 == t ) i = 8 ; else if ( 2 == t ) i = 1 ; else if ( 32 == t ) i = 5 ; else { if ( 4 != t ) return void this . fromRadix ( e , t ) ; i = 2 } this . t = 0 , this . s = 0 ; for ( var a = e . length , o = ! 1 , s = 0 ; -- a >= 0 ; ) { var r = 8 == i ? 255 & e [ a ] : intAt ( e , a ) ; 0 > r ? "-" == e . charAt ( a ) && ( o = ! 0 ) : ( o = ! 1 , 0 == s ? this [ this . t ++ ] = r : s + i > this . DB ? ( this [ this . t - 1 ] |= ( r & ( 1 << this . DB - s ) - 1 ) << s , this [ this . t ++ ] = r >> this . DB - s ) : this [ this . t - 1 ] |= r << s , s += i , s >= this . DB && ( s -= this . DB ) ) } 8 == i && 0 != ( 128 & e [ 0 ] ) && n && ( this . s = - 1 , s > 0 && ( this [ this . t - 1 ] |= ( 1 << this . DB - s ) - 1 << s ) ) , this . clamp ( ) , o && BigInteger . ZERO . subTo ( this , this ) } function bnpClamp ( ) { for ( var e = this . s & this . DM ; this . t > 0 && this [ this . t - 1 ] == e ; ) -- this . t } function bnToString ( e ) { if ( this . s < 0 ) return "-" + this . negate ( ) . toString ( e ) ; var t ; if ( 16 == e ) t = 4 ; else if ( 8 == e ) t = 3 ; else if ( 2 == e ) t = 1 ; else if ( 32 == e ) t = 5 ; else { if ( 4 != e ) return this . toRadix ( e ) ; t = 2 } var n , i = ( 1 << t ) - 1 , a = ! 1 , o = "" , s = this . t , r = this . DB - s * this . DB % t ; if ( s -- > 0 ) for ( r < this . DB && ( n = this [ s ] >> r ) > 0 && ( a = ! 0 , o = int2char ( n ) ) ; s >= 0 ; ) t > r ? ( n = ( this [ s ] & ( 1 << r ) - 1 ) << t - r , n |= this [ -- s ] >> ( r += this . DB - t ) ) : ( n = this [ s ] >> ( r -= t ) & i , 0 >= r && ( r += this . DB , -- s ) ) , n > 0 && ( a = ! 0 ) , a && ( o += int2char ( n ) ) ; return a ? o : "0" } function bnNegate ( ) { var e = nbi ( ) ; return BigInteger . ZERO . subTo ( this , e ) , e } function bnAbs ( ) { return this . s < 0 ? this . negate ( ) : this } function bnCompareTo ( e ) { var t = this . s - e . s ; if ( 0 != t ) return t ; var n = this . t ; if ( t = n - e . t , 0 != t ) return this . s < 0 ? - t : t ; for ( ; -- n >= 0 ; ) if ( 0 != ( t = this [ n ] - e [ n ] ) ) return t ; return 0 } function nbits ( e ) { var t , n = 1 ; return 0 != ( t = e >>> 16 ) && ( e = t , n += 16 ) , 0 != ( t = e >> 8 ) && ( e = t , n += 8 ) , 0 != ( t = e >> 4 ) && ( e = t , n += 4 ) , 0 != ( t = e >> 2 ) && ( e = t , n += 2 ) , 0 != ( t = e >> 1 ) && ( e = t , n += 1 ) , n } function bnBitLength ( ) { return this . t <= 0 ? 0 : this . DB * ( this . t - 1 ) + nbits ( this [ this . t - 1 ] ^ this . s & this . DM ) } function bnpDLShiftTo ( e , t ) { var n ; for ( n = this . t - 1 ; n >= 0 ; -- n ) t [ n + e ] = this [ n ] ; for ( n = e - 1 ; n >= 0 ; -- n ) t [ n ] = 0 ; t . t = this . t + e , t . s = this . s } function bnpDRShiftTo ( e , t ) { for ( var n = e ; n < this . t ; ++ n ) t [ n - e ] = this [ n ] ; t . t = Math . max ( this . t - e , 0 ) , t . s = this . s } function bnpLShiftTo ( e , t ) { var n , i = e % this . DB , a = this . DB - i , o = ( 1 << a ) - 1 , s = Math . floor ( e / this . DB ) , r = this . s << i & this . DM ; for ( n = this . t - 1 ; n >= 0 ; -- n ) t [ n + s + 1 ] = this [ n ] >> a | r , r = ( this [ n ] & o ) << i ; for ( n = s - 1 ; n >= 0 ; -- n ) t [ n ] = 0 ; t [ s ] = r , t . t = this . t + s + 1 , t . s = this . s , t . clamp ( ) } function bnpRShiftTo ( e , t ) { t . s = this . s ; var n = Math . floor ( e / this . DB ) ; if ( n >= this . t ) return void ( t . t = 0 ) ; var i = e % this . DB , a = this . DB - i , o = ( 1 << i ) - 1 ; t [ 0 ] = this [ n ] >> i ; for ( var s = n + 1 ; s < this . t ; ++ s ) t [ s - n - 1 ] |= ( this [ s ] & o ) << a , t [ s - n ] = this [ s ] >> i ; i > 0 && ( t [ this . t - n - 1 ] |= ( this . s & o ) << a ) , t . t = this . t - n , t . clamp ( ) } function bnpSubTo ( e , t ) { for ( var n = 0 , i = 0 , a = Math . min ( e . t , this . t ) ; a > n ; ) i += this [ n ] - e [ n ] , t [ n ++ ] = i & this . DM , i >>= this . DB ; if ( e . t < this . t ) { for ( i -= e . s ; n < this . t ; ) i += this [ n ] , t [ n ++ ] = i & this . DM , i >>= this . DB ; i += this . s } else { for ( i += this . s ; n < e . t ; ) i -= e [ n ] , t [ n ++ ] = i & this . DM , i >>= this . DB ; i -= e . s } t . s = 0 > i ? - 1 : 0 , - 1 > i ? t [ n ++ ] = this . DV + i : i > 0 && ( t [ n ++ ] = i ) , t . t = n , t . clamp ( ) } function bnpMultiplyTo ( e , t ) { var n = this . abs ( ) , i = e . abs ( ) , a = n . t ; for ( t . t = a + i . t ; -- a >= 0 ; ) t [ a ] = 0 ; for ( a = 0 ; a < i . t ; ++ a ) t [ a + n . t ] = n . am ( 0 , i [ a ] , t , a , 0 , n . t ) ; t . s = 0 , t . clamp ( ) , this . s != e . s && BigInteger . ZERO . subTo ( t , t ) } function bnpSquareTo ( e ) { for ( var t = this . abs ( ) , n = e . t = 2 * t . t ; -- n >= 0 ; ) e [ n ] = 0 ; for ( n = 0 ; n < t . t - 1 ; ++ n ) { var i = t . a
return ! 1 } function cancelEvent ( e ) { return e = e || window . event , e && ( e = e . originalEvent || e , e . stopPropagation && e . stopPropagation ( ) , e . preventDefault && e . preventDefault ( ) ) , ! 1 } function getScrollWidth ( ) { var e = $ ( "<div>" ) . css ( { position : "absolute" , width : 100 , height : 100 , overflow : "scroll" , top : - 9999 } ) . appendTo ( $ ( document . body ) ) , t = e [ 0 ] . offsetWidth - e [ 0 ] . clientWidth ; return e . remove ( ) , t } function onCtrlEnter ( e , t ) { $ ( e ) . on ( "keydown" , function ( e ) { return 13 == e . keyCode && ( e . ctrlKey || e . metaKey ) ? ( t ( ) , cancelEvent ( e ) ) : void 0 } ) } function setFieldSelection ( e , t , n ) { e = $ ( e ) [ 0 ] ; try { if ( e . focus ( ) , ( void 0 === t || t === ! 1 ) && ( t = e . value . length ) , ( void 0 === n || n === ! 1 ) && ( n = t ) , e . createTextRange ) { var i = e . createTextRange ( ) ; i . collapse ( ! 0 ) , i . moveEnd ( "character" , n ) , i . moveStart ( "character" , t ) , i . select ( ) } else e . setSelectionRange && e . setSelectionRange ( t , n ) } catch ( a ) { } } function getFieldSelection ( e ) { if ( e . selectionStart ) return e . selectionStart ; if ( ! document . selection ) return 0 ; var t = " " , n = document . selection . createRange ( ) , i = n . text , a = n . duplicate ( ) , o = 0 ; try { a . moveToElementText ( e ) } catch ( s ) { return 0 } return n . text = i + t , o = a . text . indexOf ( t ) , n . moveStart ( "character" , - 1 ) , n . text = "" , o } function getRichValue ( e ) { if ( ! e ) return "" ; var t = [ ] , n = [ ] ; return getRichElementValue ( e , t , n ) , n . length && t . push ( n . join ( "" ) ) , t . join ( "\n" ) } function getRichValueWithCaret ( e ) { if ( ! e ) return [ ] ; var t , n , i = [ ] , a = [ ] , o = window . getSelection ? window . getSelection ( ) : ! 1 ; if ( o && o . rangeCount ) { var s = o . getRangeAt ( 0 ) ; s . startContainer && s . startContainer == s . endContainer && s . startOffset == s . endOffset && ( t = s . startContainer , n = s . startOffset ) } getRichElementValue ( e , i , a , t , n ) , a . length && i . push ( a . join ( "" ) ) ; var r = i . join ( "\n" ) , l = r . indexOf ( " " ) ; return - 1 != l && ( r = r . substr ( 0 , l ) + r . substr ( l + 1 ) ) , [ r , l ] } function getRichElementValue ( e , t , n , i , a ) { if ( 3 != e . nodeType ) { if ( 1 == e . nodeType ) { var o , s = i === e , r = "DIV" == e . tagName || "P" == e . tagName ; r && n . length || "BR" == e . tagName ? ( t . push ( n . join ( "" ) ) , n . splice ( 0 , n . length ) ) : "IMG" == e . tagName && e . alt && n . push ( e . alt ) , s && ! a && n . push ( " " ) ; for ( var o = e . firstChild ; o ; ) getRichElementValue ( o , t , n , i , a ) , o = o . nextSibling ; s && a && n . push ( " " ) , r && n . length && ( t . push ( n . join ( "" ) ) , n . splice ( 0 , n . length ) ) } } else if ( i === e ) { var l = e . nodeValue ; n . push ( l . substr ( 0 , a ) + " " + l . substr ( a ) ) } else n . push ( e . nodeValue ) } function setRichFocus ( e , t , n ) { if ( e . focus ( ) , ! t || t . parentNode != e || t . nextSibling || n || ( e . removeChild ( t ) , t = null ) , window . getSelection && document . createRange ) { var i = document . createRange ( ) ; t ? i . selectNode ( t ) : i . selectNodeContents ( e ) , n || i . collapse ( ! 1 ) ; var a = window . getSelection ( ) ; a . removeAllRanges ( ) , a . addRange ( i ) } else if ( void 0 !== document . body . createTextRange ) { var o = document . body . createTextRange ( ) ; o . moveToElementText ( t || e ) , n || o . collapse ( ! 1 ) , o . select ( ) } } function getSelectedText ( ) { var e = ( window . getSelection && window . getSelection ( ) || document . getSelection && document . getSelection ( ) || document . selection && document . selection . createRange ( ) . text || "" ) . toString ( ) . replace ( /^\s+|\s+$/g , "" ) ; return e } function scrollToNode ( e , t , n ) { var i = t . offsetTop - 15 , a = t . offsetHeight + 30 , o = e . scrollTop , s = e . clientHeight ; o > i ? ( e . scrollTop = i , $ ( n ) . nanoScroller ( { flash : ! 0 } ) ) : i + a - s > o && ( e . scrollTop = i + a - s , $ ( n ) . nanoScroller ( { flash : ! 0 } ) ) } function onContentLoaded ( e ) { setZeroTimeout ( e ) } function tsNow ( e ) { var t = + new Date + ( window . tsOffset || 0 ) ; return e ? Math . floor ( t / 1e3 ) : t } function safeReplaceObject ( e , t ) { for ( var n in e ) t . hasOwnProperty ( n ) || "$" == n . charAt ( 0 ) || delete e [ n ] ; for ( var n in t ) t . hasOwnProperty ( n ) && ( e [ n ] = t [ n ] ) } function listMergeSorted ( e , t ) { e = e || [ ] , t = t || [ ] ; for ( var n = angular . copy ( e ) , i = e . length ? e [ e . length - 1 ] : 4294967295 , a = 0 ; a < t . length ; a ++ ) t [ a ] < i && n . push ( t [ a ] ) ; return n } function listUniqSorted ( e ) { e = e || [ ] ; for ( var t = [ ] , n = ! 1 , i = 0 ; i < e . length ; i ++ ) e [ i ] !== n && t . push ( e [ i ] ) , n = e [ i ] ; return t } function templateUrl ( e ) { var t = { confirm _modal : "desktop" , error _modal : "desktop" , media _modal _layout : "desktop" , slider : "desktop" , reply _message : "desktop" , forwarded _messages : "desktop" , chat _invite _link _modal : "desktop" , reply _markup : "desktop" , dialog _service : "desktop" , channel _edit _modal : "desktop" , megagroup _edit _modal : "desktop" } , n = t [ e ] || ( Config . Mobile ? "mobile" : "desktop" ) ; return "partials/" + n + "/" + e + ".html" } function encodeEntities ( e ) { return e . replace ( /&/g , "&" ) . replace ( /[\uD800-\uDBFF][\uDC00-\uDFFF]/g , function
return a } , map : function ( e , t , i ) { var a , o = 0 , s = e . length , r = n ( e ) , l = [ ] ; if ( r ) for ( ; s > o ; o ++ ) a = t ( e [ o ] , o , i ) , null != a && l . push ( a ) ; else for ( o in e ) a = t ( e [ o ] , o , i ) , null != a && l . push ( a ) ; return Z . apply ( [ ] , l ) } , guid : 1 , proxy : function ( e , t ) { var n , i , a ; return "string" == typeof t && ( a = e [ t ] , t = e , e = a ) , at . isFunction ( e ) ? ( n = Y . call ( arguments , 2 ) , i = function ( ) { return e . apply ( t || this , n . concat ( Y . call ( arguments ) ) ) } , i . guid = e . guid = e . guid || at . guid ++ , i ) : void 0 } , now : function ( ) { return + new Date } , support : nt } ) , at . each ( "Boolean Number String Function Array Date RegExp Object Error" . split ( " " ) , function ( e , t ) { Q [ "[object " + t + "]" ] = t . toLowerCase ( ) } ) ; var ct = function ( e ) { function t ( e , t , n , i ) { var a , o , s , r , l , c , u , m , g , h ; if ( ( t ? t . ownerDocument || t : B ) !== D && T ( t ) , t = t || D , n = n || [ ] , ! e || "string" != typeof e ) return n ; if ( 1 !== ( r = t . nodeType ) && 9 !== r ) return [ ] ; if ( F && ! i ) { if ( a = vt . exec ( e ) ) if ( s = a [ 1 ] ) { if ( 9 === r ) { if ( o = t . getElementById ( s ) , ! o || ! o . parentNode ) return n ; if ( o . id === s ) return n . push ( o ) , n } else if ( t . ownerDocument && ( o = t . ownerDocument . getElementById ( s ) ) && R ( t , o ) && o . id === s ) return n . push ( o ) , n } else { if ( a [ 2 ] ) return Q . apply ( n , t . getElementsByTagName ( e ) ) , n ; if ( ( s = a [ 3 ] ) && w . getElementsByClassName && t . getElementsByClassName ) return Q . apply ( n , t . getElementsByClassName ( s ) ) , n } if ( w . qsa && ( ! N || ! N . test ( e ) ) ) { if ( m = u = L , g = t , h = 9 === r && e , 1 === r && "object" !== t . nodeName . toLowerCase ( ) ) { for ( c = C ( e ) , ( u = t . getAttribute ( "id" ) ) ? m = u . replace ( bt , "\\$&" ) : t . setAttribute ( "id" , m ) , m = "[id='" + m + "'] " , l = c . length ; l -- ; ) c [ l ] = m + p ( c [ l ] ) ; g = yt . test ( e ) && d ( t . parentNode ) || t , h = c . join ( "," ) } if ( h ) try { return Q . apply ( n , g . querySelectorAll ( h ) ) , n } catch ( f ) { } finally { u || t . removeAttribute ( "id" ) } } } return x ( e . replace ( lt , "$1" ) , t , n , i ) } function n ( ) { function e ( n , i ) { return t . push ( n + " " ) > k . cacheLength && delete e [ t . shift ( ) ] , e [ n + " " ] = i } var t = [ ] ; return e } function i ( e ) { return e [ L ] = ! 0 , e } function a ( e ) { var t = D . createElement ( "div" ) ; try { return ! ! e ( t ) } catch ( n ) { return ! 1 } finally { t . parentNode && t . parentNode . removeChild ( t ) , t = null } } function o ( e , t ) { for ( var n = e . split ( "|" ) , i = e . length ; i -- ; ) k . attrHandle [ n [ i ] ] = t } function s ( e , t ) { var n = t && e , i = n && 1 === e . nodeType && 1 === t . nodeType && ( ~ t . sourceIndex || K ) - ( ~ e . sourceIndex || K ) ; if ( i ) return i ; if ( n ) for ( ; n = n . nextSibling ; ) if ( n === t ) return - 1 ; return e ? 1 : - 1 } function r ( e ) { return function ( t ) { var n = t . nodeName . toLowerCase ( ) ; return "input" === n && t . type === e } } function l ( e ) { return function ( t ) { var n = t . nodeName . toLowerCase ( ) ; return ( "input" === n || "button" === n ) && t . type === e } } function c ( e ) { return i ( function ( t ) { return t = + t , i ( function ( n , i ) { for ( var a , o = e ( [ ] , n . length , t ) , s = o . length ; s -- ; ) n [ a = o [ s ] ] && ( n [ a ] = ! ( i [ a ] = n [ a ] ) ) } ) } ) } function d ( e ) { return e && typeof e . getElementsByTagName !== G && e } function u ( ) { } function p ( e ) { for ( var t = 0 , n = e . length , i = "" ; n > t ; t ++ ) i += e [ t ] . value ; return i } function m ( e , t , n ) { var i = t . dir , a = n && "parentNode" === i , o = q ++ ; return t . first ? function ( t , n , o ) { for ( ; t = t [ i ] ; ) if ( 1 === t . nodeType || a ) return e ( t , n , o ) } : function ( t , n , s ) { var r , l , c = [ j , o ] ; if ( s ) { for ( ; t = t [ i ] ; ) if ( ( 1 === t . nodeType || a ) && e ( t , n , s ) ) return ! 0 } else for ( ; t = t [ i ] ; ) if ( 1 === t . nodeType || a ) { if ( l = t [ L ] || ( t [ L ] = { } ) , ( r = l [ i ] ) && r [ 0 ] === j && r [ 1 ] === o ) return c [ 2 ] = r [ 2 ] ; if ( l [ i ] = c , c [ 2 ] = e ( t , n , s ) ) return ! 0 } } } function g ( e ) { return e . length > 1 ? function ( t , n , i ) { for ( var a = e . length ; a -- ; ) if ( ! e [ a ] ( t , n , i ) ) return ! 1 ; return ! 0 } : e [ 0 ] } function h ( e , n , i ) { for ( var a = 0 , o = n . length ; o > a ; a ++ ) t ( e , n [ a ] , i ) ; return i } function f ( e , t , n , i , a ) { for ( var o , s = [ ] , r = 0 , l = e . length , c = null != t ; l > r ; r ++ ) ( o = e [ r ] ) && ( ! n || n ( o , i , a ) ) && ( s . push ( o ) , c && t . push ( r ) ) ; return s } function _ ( e , t , n , a , o , s ) { return a && ! a [ L ] && ( a = _ ( a ) ) , o && ! o [ L ] && ( o = _ ( o , s ) ) , i ( function ( i , s , r , l ) { var c , d , u , p = [ ] , m = [ ] , g = s . length , _ = i || h ( t || "*" , r . nodeType ? [ r ] : r , [ ] ) , v = ! e || ! i && t ? _ : f ( _ , p , e , r , l ) , y = n ? o || ( i ? e : g || a ) ? [ ] : s : v ; if ( n && n ( v , y , r , l ) , a ) for ( c = f ( y , m ) , a ( c , [ ] , r , l ) , d = c . length ; d -- ; ) ( u = c [ d ] ) && ( y [ m [ d ] ] = ! ( v [ m [ d ] ] = u ) ) ; if ( i ) { if ( o || e ) { if ( o ) { for ( c = [ ] , d = y . length ; d -- ; ) ( u = y [ d ] ) && c . push ( v [ d ] = u ) ; o ( null , y = [ ] , c , l ) } for ( d = y . length ; d -- ; ) ( u = y [ d ] ) && ( c = o ? tt . call ( i , u ) : p [ d ] ) > - 1 && ( i [ c ] = ! ( s [ c ] = u ) ) } } else y = f ( y === s ? y . splice ( g , y . length ) : y ) , o ? o ( null , s , y , l ) : Q . apply ( s , y ) } ) } function v ( e ) { for ( var t , n , i , a = e . length , o = k . relative [ e [ 0 ] . type ] , s = o || k . relative [ " " ] , r = o ? 1 : 0 , l = m ( function ( e ) { return e === t } , s , ! 0 ) , c = m ( function ( e ) { return tt . call ( t , e ) > - 1 } , s , ! 0 ) , d = [ function ( e , n , i ) { return ! o && ( i || n !== A ) || ( ( t = n ) . nodeType ? l ( e , n , i ) : c ( e , n , i ) ) } ] ; a
e = null } } , remove : function ( e , t , n , i , a ) { var o , s , r , l , c , d , u , p , m , g , h , f = at . hasData ( e ) && at . _data ( e ) ; if ( f && ( d = f . events ) ) { for ( t = ( t || "" ) . match ( yt ) || [ "" ] , c = t . length ; c -- ; ) if ( r = Nt . exec ( t [ c ] ) || [ ] , m = h = r [ 1 ] , g = ( r [ 2 ] || "" ) . split ( "." ) . sort ( ) , m ) { for ( u = at . event . special [ m ] || { } , m = ( i ? u . delegateType : u . bindType ) || m , p = d [ m ] || [ ] , r = r [ 2 ] && new RegExp ( "(^|\\.)" + g . join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) , l = o = p . length ; o -- ; ) s = p [ o ] , ! a && h !== s . origType || n && n . guid !== s . guid || r && ! r . test ( s . namespace ) || i && i !== s . selector && ( "**" !== i || ! s . selector ) || ( p . splice ( o , 1 ) , s . selector && p . delegateCount -- , u . remove && u . remove . call ( e , s ) ) ; l && ! p . length && ( u . teardown && u . teardown . call ( e , g , f . handle ) !== ! 1 || at . removeEvent ( e , m , f . handle ) , delete d [ m ] ) } else for ( m in d ) at . event . remove ( e , m + t [ c ] , n , i , ! 0 ) ; at . isEmptyObject ( d ) && ( delete f . handle , at . _removeData ( e , "events" ) ) } } , trigger : function ( t , n , i , a ) { var o , s , r , l , c , d , u , p = [ i || gt ] , m = tt . call ( t , "type" ) ? t . type : t , g = tt . call ( t , "namespace" ) ? t . namespace . split ( "." ) : [ ] ; if ( r = d = i = i || gt , 3 !== i . nodeType && 8 !== i . nodeType && ! Ft . test ( m + at . event . triggered ) && ( m . indexOf ( "." ) >= 0 && ( g = m . split ( "." ) , m = g . shift ( ) , g . sort ( ) ) , s = m . indexOf ( ":" ) < 0 && "on" + m , t = t [ at . expando ] ? t : new at . Event ( m , "object" == typeof t && t ) , t . isTrigger = a ? 2 : 3 , t . namespace = g . join ( "." ) , t . namespace _re = t . namespace ? new RegExp ( "(^|\\.)" + g . join ( "\\.(?:.*\\.|)" ) + "(\\.|$)" ) : null , t . result = void 0 , t . target || ( t . target = i ) , n = null == n ? [ t ] : at . makeArray ( n , [ t ] ) , c = at . event . special [ m ] || { } , a || ! c . trigger || c . trigger . apply ( i , n ) !== ! 1 ) ) { if ( ! a && ! c . noBubble && ! at . isWindow ( i ) ) { for ( l = c . delegateType || m , Ft . test ( l + m ) || ( r = r . parentNode ) ; r ; r = r . parentNode ) p . push ( r ) , d = r ; d === ( i . ownerDocument || gt ) && p . push ( d . defaultView || d . parentWindow || e ) } for ( u = 0 ; ( r = p [ u ++ ] ) && ! t . isPropagationStopped ( ) ; ) t . type = u > 1 ? l : c . bindType || m , o = ( at . _data ( r , "events" ) || { } ) [ t . type ] && at . _data ( r , "handle" ) , o && o . apply ( r , n ) , o = s && r [ s ] , o && o . apply && at . acceptData ( r ) && ( t . result = o . apply ( r , n ) , t . result === ! 1 && t . preventDefault ( ) ) ; if ( t . type = m , ! a && ! t . isDefaultPrevented ( ) && ( ! c . _default || c . _default . apply ( p . pop ( ) , n ) === ! 1 ) && at . acceptData ( i ) && s && i [ m ] && ! at . isWindow ( i ) ) { d = i [ s ] , d && ( i [ s ] = null ) , at . event . triggered = m ; try { i [ m ] ( ) } catch ( h ) { } at . event . triggered = void 0 , d && ( i [ s ] = d ) } return t . result } } , dispatch : function ( e ) { e = at . event . fix ( e ) ; var t , n , i , a , o , s = [ ] , r = Y . call ( arguments ) , l = ( at . _data ( this , "events" ) || { } ) [ e . type ] || [ ] , c = at . event . special [ e . type ] || { } ; if ( r [ 0 ] = e , e . delegateTarget = this , ! c . preDispatch || c . preDispatch . call ( this , e ) !== ! 1 ) { for ( s = at . event . handlers . call ( this , e , l ) , t = 0 ; ( a = s [ t ++ ] ) && ! e . isPropagationStopped ( ) ; ) for ( e . currentTarget = a . elem , o = 0 ; ( i = a . handlers [ o ++ ] ) && ! e . isImmediatePropagationStopped ( ) ; ) ( ! e . namespace _re || e . namespace _re . test ( i . namespace ) ) && ( e . handleObj = i , e . data = i . data , n = ( ( at . event . special [ i . origType ] || { } ) . handle || i . handler ) . apply ( a . elem , r ) , void 0 !== n && ( e . result = n ) === ! 1 && ( e . preventDefault ( ) , e . stopPropagation ( ) ) ) ; return c . postDispatch && c . postDispatch . call ( this , e ) , e . result } } , handlers : function ( e , t ) { var n , i , a , o , s = [ ] , r = t . delegateCount , l = e . target ; if ( r && l . nodeType && ( ! e . button || "click" !== e . type ) ) for ( ; l != this ; l = l . parentNode || this ) if ( 1 === l . nodeType && ( l . disabled !== ! 0 || "click" !== e . type ) ) { for ( a = [ ] , o = 0 ; r > o ; o ++ ) i = t [ o ] , n = i . selector + " " , void 0 === a [ n ] && ( a [ n ] = i . needsContext ? at ( n , this ) . index ( l ) >= 0 : at . find ( n , this , null , [ l ] ) . length ) , a [ n ] && a . push ( i ) ; a . length && s . push ( { elem : l , handlers : a } ) } return r < t . length && s . push ( { elem : this , handlers : t . slice ( r ) } ) , s } , fix : function ( e ) { if ( e [ at . expando ] ) return e ; var t , n , i , a = e . type , o = e , s = this . fixHooks [ a ] ; for ( s || ( this . fixHooks [ a ] = s = Pt . test ( a ) ? this . mouseHooks : Dt . test ( a ) ? this . keyHooks : { } ) , i = s . props ? this . props . concat ( s . props ) : this . props , e = new at . Event ( o ) , t = i . length ; t -- ; ) n = i [ t ] , e [ n ] = o [ n ] ; return e . target || ( e . target = o . srcElement || gt ) , 3 === e . target . nodeType && ( e . target = e . target . parentNode ) , e . metaKey = ! ! e . metaKey , s . filter ? s . filter ( e , o ) : e } , props : "altKey bubbles cancelable ctrlKey currentTarget eventPhase metaKey relatedTarget shiftKey target timeStamp view which" . split ( " " ) , fixHooks : { } , keyHooks : { props : "char charCode key keyCode" . split ( " " ) , filter : function ( e , t ) { return null == e . which && ( e . which = null != t . charCode ? t . charCode : t . keyCode ) , e } } , mouseHooks : { props : "button buttons clientX clientY fromElement offsetX offsetY pageX pageY screenX screenY toElement" .
} catch ( t ) { } } ) } } ) , at . extend ( { propFix : { "for" : "htmlFor" , "class" : "className" } , prop : function ( e , t , n ) { var i , a , o , s = e . nodeType ; return e && 3 !== s && 8 !== s && 2 !== s ? ( o = 1 !== s || ! at . isXMLDoc ( e ) , o && ( t = at . propFix [ t ] || t , a = at . propHooks [ t ] ) , void 0 !== n ? a && "set" in a && void 0 !== ( i = a . set ( e , n , t ) ) ? i : e [ t ] = n : a && "get" in a && null !== ( i = a . get ( e , t ) ) ? i : e [ t ] ) : void 0 } , propHooks : { tabIndex : { get : function ( e ) { var t = at . find . attr ( e , "tabindex" ) ; return t ? parseInt ( t , 10 ) : An . test ( e . nodeName ) || En . test ( e . nodeName ) && e . href ? 0 : - 1 } } } } ) , nt . hrefNormalized || at . each ( [ "href" , "src" ] , function ( e , t ) { at . propHooks [ t ] = { get : function ( e ) { return e . getAttribute ( t , 4 ) } } } ) , nt . optSelected || ( at . propHooks . selected = { get : function ( e ) { var t = e . parentNode ; return t && ( t . selectedIndex , t . parentNode && t . parentNode . selectedIndex ) , null } } ) , at . each ( [ "tabIndex" , "readOnly" , "maxLength" , "cellSpacing" , "cellPadding" , "rowSpan" , "colSpan" , "useMap" , "frameBorder" , "contentEditable" ] , function ( ) { at . propFix [ this . toLowerCase ( ) ] = this } ) , nt . enctype || ( at . propFix . enctype = "encoding" ) ; var In = /[\t\r\n\f]/g ; at . fn . extend ( { addClass : function ( e ) { var t , n , i , a , o , s , r = 0 , l = this . length , c = "string" == typeof e && e ; if ( at . isFunction ( e ) ) return this . each ( function ( t ) { at ( this ) . addClass ( e . call ( this , t , this . className ) ) } ) ; if ( c ) for ( t = ( e || "" ) . match ( yt ) || [ ] ; l > r ; r ++ ) if ( n = this [ r ] , i = 1 === n . nodeType && ( n . className ? ( " " + n . className + " " ) . replace ( In , " " ) : " " ) ) { for ( o = 0 ; a = t [ o ++ ] ; ) i . indexOf ( " " + a + " " ) < 0 && ( i += a + " " ) ; s = at . trim ( i ) , n . className !== s && ( n . className = s ) } return this } , removeClass : function ( e ) { var t , n , i , a , o , s , r = 0 , l = this . length , c = 0 === arguments . length || "string" == typeof e && e ; if ( at . isFunction ( e ) ) return this . each ( function ( t ) { at ( this ) . removeClass ( e . call ( this , t , this . className ) ) } ) ; if ( c ) for ( t = ( e || "" ) . match ( yt ) || [ ] ; l > r ; r ++ ) if ( n = this [ r ] , i = 1 === n . nodeType && ( n . className ? ( " " + n . className + " " ) . replace ( In , " " ) : "" ) ) { for ( o = 0 ; a = t [ o ++ ] ; ) for ( ; i . indexOf ( " " + a + " " ) >= 0 ; ) i = i . replace ( " " + a + " " , " " ) ; s = e ? at . trim ( i ) : "" , n . className !== s && ( n . className = s ) } return this } , toggleClass : function ( e , t ) { var n = typeof e ; return "boolean" == typeof t && "string" === n ? t ? this . addClass ( e ) : this . removeClass ( e ) : this . each ( at . isFunction ( e ) ? function ( n ) { at ( this ) . toggleClass ( e . call ( this , n , this . className , t ) , t ) } : function ( ) { if ( "string" === n ) for ( var t , i = 0 , a = at ( this ) , o = e . match ( yt ) || [ ] ; t = o [ i ++ ] ; ) a . hasClass ( t ) ? a . removeClass ( t ) : a . addClass ( t ) ; else ( n === $t || "boolean" === n ) && ( this . className && at . _data ( this , "__className__" , this . className ) , this . className = this . className || e === ! 1 ? "" : at . _data ( this , "__className__" ) || "" ) } ) } , hasClass : function ( e ) { for ( var t = " " + e + " " , n = 0 , i = this . length ; i > n ; n ++ ) if ( 1 === this [ n ] . nodeType && ( " " + this [ n ] . className + " " ) . replace ( In , " " ) . indexOf ( t ) >= 0 ) return ! 0 ; return ! 1 } } ) , at . each ( "blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error contextmenu" . split ( " " ) , function ( e , t ) { at . fn [ t ] = function ( e , n ) { return arguments . length > 0 ? this . on ( t , null , e , n ) : this . trigger ( t ) } } ) , at . fn . extend ( { hover : function ( e , t ) { return this . mouseenter ( e ) . mouseleave ( t || e ) } , bind : function ( e , t , n ) { return this . on ( e , null , t , n ) } , unbind : function ( e , t ) { return this . off ( e , null , t ) } , delegate : function ( e , t , n , i ) { return this . on ( t , e , n , i ) } , undelegate : function ( e , t , n ) { return 1 === arguments . length ? this . off ( e , "**" ) : this . off ( t , e || "**" , n ) } } ) ; var Tn = at . now ( ) , Dn = /\?/ , Pn = /(,)|(\[|{)|(}|])|"(?:[^"\\\r\n]|\\["\\\/bfnrt]|\\u[\da-fA-F]{4})*"\s*:?|true|false|null|-?(?!0\d)\d+(?:\.\d+|)(?:[eE][+-]?\d+|)/g ; at . parseJSON = function ( t ) { if ( e . JSON && e . JSON . parse ) return e . JSON . parse ( t + "" ) ; var n , i = null , a = at . trim ( t + "" ) ; return a && ! at . trim ( a . replace ( Pn , function ( e , t , a , o ) { return n && t && ( i = 0 ) , 0 === i ? e : ( n = a || t , i += ! o - ! a , "" ) } ) ) ? Function ( "return " + a ) ( ) : at . error ( "Invalid JSON: " + t ) } , at . parseXML = function ( t ) { var n , i ; if ( ! t || "string" != typeof t ) return null ; try { e . DOMParser ? ( i = new DOMParser , n = i . parseFromString ( t , "text/xml" ) ) : ( n = new ActiveXObject ( "Microsoft.XMLDOM" ) , n . async = "false" , n . loadXML ( t ) ) } catch ( a ) { n = void 0 } return n && n . documentElement && ! n . getElementsByTagName ( "parsererror" ) . length || at . error ( "Invalid XML: " + t ) , n } ; var Fn , Nn , On = /#.*$/ , Un = /([?&])_=[^&]*/ , Rn = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm , Ln = / ^ ( ? : a b o u t | a p p | a p p - s t o r a g e | .
} function n ( ) { l = ! 0 } function i ( ) { return l ? ( l = ! 1 , "" ) : r } function a ( ) { var e , t , n , a = Array . prototype . slice . call ( arguments ) , o = a . pop ( ) , s = [ ] , r = 1 == a . length , l = ! 0 , p = i ( ) ; for ( t = 0 ; t < a . length ; t ++ ) if ( n = a [ t ] = p + a [ t ] , "xt_" != n . substr ( 0 , 3 ) && void 0 !== c [ n ] ) s . push ( c [ n ] ) ; else if ( u ) { try { e = localStorage . getItem ( n ) } catch ( m ) { u = ! 1 } try { e = void 0 === e || null === e ? ! 1 : JSON . parse ( e ) } catch ( m ) { e = ! 1 } s . push ( c [ n ] = e ) } else d ? l = ! 1 : s . push ( c [ n ] = ! 1 ) ; return l ? o ( r ? s [ 0 ] : s ) : void chrome . storage . local . get ( a , function ( e ) { var i ; for ( s = [ ] , t = 0 ; t < a . length ; t ++ ) n = a [ t ] , i = e [ n ] , i = void 0 === i || null === i ? ! 1 : JSON . parse ( i ) , s . push ( c [ n ] = i ) ; o ( r ? s [ 0 ] : s ) } ) } function o ( e , t ) { var n , a , o = { } , s = i ( ) ; for ( n in e ) if ( e . hasOwnProperty ( n ) ) if ( a = e [ n ] , n = s + n , c [ n ] = a , a = JSON . stringify ( a ) , u ) try { localStorage . setItem ( n , a ) } catch ( r ) { u = ! 1 } else o [ n ] = a ; return u || ! d ? void ( t && t ( ) ) : void chrome . storage . local . set ( o , t ) } function s ( ) { var e , t , n , a = Array . prototype . slice . call ( arguments ) , o = i ( ) ; for ( "function" == typeof a [ a . length - 1 ] && ( n = a . pop ( ) ) , e = 0 ; e < a . length ; e ++ ) if ( t = a [ e ] = o + a [ e ] , delete c [ t ] , u ) try { localStorage . removeItem ( t ) } catch ( s ) { u = ! 1 } d ? chrome . storage . local . remove ( a , n ) : n && n ( ) } var r = "" , l = ! 1 , c = { } , d = ! ! ( e . chrome && chrome . storage && chrome . storage . local ) , u = ! d && ! ! e . localStorage ; e . ConfigStorage = { prefix : t , noPrefix : n , get : a , set : o , remove : s } } ( this ) , function ( ) { try { window == window . top || window . chrome && chrome . app && chrome . app . window ? document . documentElement . style . display = "block" : top . location = self . location } catch ( e ) { console . error ( "CJ protection" , e ) } if ( window . safeConfirm = function ( e , t ) { "string" == typeof e && ( e = { message : e } ) ; var n = ! 1 ; try { n = confirm ( e . message ) } catch ( i ) { n = ! 0 } setTimeout ( function ( ) { t ( n ) } , 10 ) } , window . applicationCache && ! Config . Modes . packed && window . addEventListener ) { var t = window . applicationCache , n = ! 1 , i = ! 1 , a = function ( e ) { clearTimeout ( i ) , i = setTimeout ( function ( ) { try { t . update ( ) } catch ( e ) { console . log ( "appCache.update: " + e ) } } , e || 3e5 ) } , o = function ( ) { t . addEventListener ( "updateready" , function ( ) { t . status == t . UPDATEREADY && ( n || ( safeConfirm ( { type : "WEBOGRAM_UPDATED_RELOAD" , message : "A new version of Webogram is downloaded. Launch it?" } , function ( e ) { e ? window . location . reload ( ) : n = ! 0 } ) , a ( ) ) ) } , ! 1 ) , t . addEventListener ( "noupdate" , function ( ) { a ( ) } , ! 1 ) , t . addEventListener ( "error" , function ( ) { a ( ) } , ! 1 ) } ; a ( 3e3 ) , window . addEventListener ( "load" , o ) } } ( ) , function ( ) { var e = [ Config . Navigator . osX ? "osx" : "non_osx" , Config . Navigator . retina ? "is_2x" : "is_1x" ] ; Config . Modes . ios _standalone && e . push ( "ios_standalone" ) , $ ( document . body ) . addClass ( e . join ( " " ) ) , ConfigStorage . get ( "layout_selected" , "i18n_locale" , function ( e ) { var t = e [ 0 ] , n = e [ 1 ] , i = "en-us" , a = { dom : ! 1 , i18n _ng : ! 1 , i18n _messages : ! 1 , i18n _fallback : ! 1 } , o = function ( ) { var e , t = ! 0 ; for ( e in a ) if ( a . hasOwnProperty ( e ) && a [ e ] === ! 1 ) { t = ! 1 ; break } t && ( a . boot = ! 1 , angular . bootstrap ( document , [ "myApp" ] ) ) } ; switch ( Config . Modes . force _mobile ? t = "mobile" : Config . Modes . force _desktop && ( t = "desktop" ) , t ) { case "mobile" : Config . Mobile = ! 0 ; break ; case "desktop" : Config . Mobile = ! 1 ; break ; default : var s = $ ( window ) . width ( ) ; Config . Mobile = Config . Navigator . mobile || s > 10 && 480 > s } $ ( "head" ) . append ( '<link rel="stylesheet" href="css/' + ( Config . Mobile ? "mobile.css" : "desktop.css" ) + '" />' ) , n || ( n = ( navigator . language || "" ) . toLowerCase ( ) , n = Config . I18n . aliases [ n ] || n ) ; for ( var r = 0 ; r < Config . I18n . supported . length ; r ++ ) if ( Config . I18n . supported [ r ] == n ) { Config . I18n . locale = n ; break } a . i18n _ng = Config . I18n . locale == i , $ . getJSON ( "js/locales/" + Config . I18n . locale + ".json" ) . success ( function ( e ) { Config . I18n . messages = e , a . i18n _messages = ! 0 , Config . I18n . locale == i && ( a . i18n _fallback = ! 0 ) , o ( ) } ) , Config . I18n . locale != i && $ . getJSON ( "js/locales/" + i + ".json" ) . success ( function ( e ) { Config . I18n . fallback _messages = e , a . i18n _fallback = ! 0 , o ( ) } ) , $ ( document ) . ready ( function ( ) { a . dom = ! 0 , a . i18n _ng ? o ( ) : $ ( "<script>" ) . appendTo ( "body" ) . on ( "load" , function ( ) { a . i18n _ng = ! 0 , o ( ) } ) . attr ( "src" , "vendor/angular/i18n/angular-locale_" + Config . I18n . locale + ".js" ) } ) } ) } ( ) , function ( e , t , n ) { "use strict" ; var i , a , o , s , r , l , c , d , u , p , m , g , h , f , _ , v , y , b , w , k , $ , S , C , M , x , A , E , I , T , D , P ; C = { paneClass : "nano-pane" , sliderClass : "nano-slider" , contentClass : "nano-content" , iOSNativeScrolling : ! 1 , preventPageScrolling : ! 1 , disableResize : ! 1 , alwaysVisible : ! 1 , flashDelay : 1500 , sliderMinHeight : 20 , sliderMaxHeight : null , documentContext : null , windowContext : null }
for ( t = 0 , n = e . length ; n > t ; t ++ ) { var i = e [ t ] , a = S . get ( i [ 0 ] ) ; a [ i [ 1 ] ] . apply ( a , i [ 2 ] ) } } if ( ! b . get ( e ) ) { b . put ( e , ! 0 ) ; try { $ ( e ) ? ( t = Aa ( e ) , n = n . concat ( m ( t . requires ) ) . concat ( t . _runBlocks ) , i ( t . _invokeQueue ) , i ( t . _configBlocks ) ) : M ( e ) ? n . push ( S . invoke ( e ) ) : Ra ( e ) ? n . push ( S . invoke ( e ) ) : pt ( e , "module" ) } catch ( a ) { throw Ra ( e ) && ( e = e [ e . length - 1 ] ) , a . message && a . stack && - 1 == a . stack . indexOf ( a . message ) && ( a = a . message + "\n" + a . stack ) , $o ( "modulerr" , "Failed to instantiate module {0} due to:\n{1}" , e , a . stack || a . message || a ) } } } ) , n } function g ( e , n ) { function i ( t , i ) { if ( e . hasOwnProperty ( t ) ) { if ( e [ t ] === h ) throw $o ( "cdep" , "Circular dependency found: {0}" , t + " <- " + v . join ( " <- " ) ) ; return e [ t ] } try { return v . unshift ( t ) , e [ t ] = h , e [ t ] = n ( t , i ) } catch ( a ) { throw e [ t ] === h && delete e [ t ] , a } finally { v . shift ( ) } } function a ( e , n , a , o ) { "string" == typeof a && ( o = a , a = null ) ; var s , r , l , c = [ ] , d = Jt . $$annotate ( e , t , o ) ; for ( r = 0 , s = d . length ; s > r ; r ++ ) { if ( l = d [ r ] , "string" != typeof l ) throw $o ( "itkn" , "Incorrect injection token! Expected service name as string, got {0}" , l ) ; c . push ( a && a . hasOwnProperty ( l ) ? a [ l ] : i ( l , o ) ) } return Ra ( e ) && ( e = e [ s ] ) , e . apply ( n , c ) } function o ( e , t , n ) { var i = Object . create ( ( Ra ( e ) ? e [ e . length - 1 ] : e ) . prototype || null ) , o = a ( e , i , t , n ) ; return w ( o ) || M ( o ) ? o : i } return { invoke : a , instantiate : o , get : i , annotate : Jt . $$annotate , has : function ( t ) { return k . hasOwnProperty ( t + f ) || e . hasOwnProperty ( t ) } } } t = t === ! 0 ; var h = { } , f = "Provider" , v = [ ] , b = new Yt ( [ ] , ! 0 ) , k = { $provide : { provider : i ( a ) , factory : i ( l ) , service : i ( c ) , value : i ( d ) , constant : i ( u ) , decorator : p } } , S = k . $injector = g ( k , function ( e , t ) { throw Na . isString ( t ) && v . push ( t ) , $o ( "unpr" , "Unknown provider: {0}" , v . join ( " <- " ) ) } ) , C = { } , x = C . $injector = g ( C , function ( e , t ) { var i = S . get ( e + f , t ) ; return x . invoke ( i . $get , i , n , e ) } ) ; return o ( m ( e ) , function ( e ) { e && x . invoke ( e ) } ) , x } function Qt ( ) { var e = ! 0 ; this . disableAutoScrolling = function ( ) { e = ! 1 } , this . $get = [ "$window" , "$location" , "$rootScope" , function ( t , n , i ) { function a ( e ) { var t = null ; return Array . prototype . some . call ( e , function ( e ) { return "a" === R ( e ) ? ( t = e , ! 0 ) : void 0 } ) , t } function o ( ) { var e = r . yOffset ; if ( M ( e ) ) e = e ( ) ; else if ( O ( e ) ) { var n = e [ 0 ] , i = t . getComputedStyle ( n ) ; e = "fixed" !== i . position ? 0 : n . getBoundingClientRect ( ) . bottom } else S ( e ) || ( e = 0 ) ; return e } function s ( e ) { if ( e ) { e . scrollIntoView ( ) ; var n = o ( ) ; if ( n ) { var i = e . getBoundingClientRect ( ) . top ; t . scrollBy ( 0 , i - n ) } } else t . scrollTo ( 0 , 0 ) } function r ( e ) { e = $ ( e ) ? e : n . hash ( ) ; var t ; e ? ( t = l . getElementById ( e ) ) ? s ( t ) : ( t = a ( l . getElementsByName ( e ) ) ) ? s ( t ) : "top" === e && s ( null ) : s ( null ) } var l = t . document ; return e && i . $watch ( function ( ) { return n . hash ( ) } , function ( e , t ) { ( e !== t || "" !== e ) && Ht ( function ( ) { i . $evalAsync ( r ) } ) } ) , r } ] } function en ( e , t ) { return e || t ? e ? t ? ( Ra ( e ) && ( e = e . join ( " " ) ) , Ra ( t ) && ( t = t . join ( " " ) ) , e + " " + t ) : e : t : "" } function tn ( e ) { for ( var t = 0 ; t < e . length ; t ++ ) { var n = e [ t ] ; if ( n . nodeType === Co ) return n } } function nn ( e ) { $ ( e ) && ( e = e . split ( " " ) ) ; var t = ft ( ) ; return o ( e , function ( e ) { e . length && ( t [ e ] = ! 0 ) } ) , t } function an ( e ) { return w ( e ) ? e : { } } function on ( e , t , n , i ) { function a ( e ) { try { e . apply ( null , V ( arguments , 1 ) ) } finally { if ( v -- , 0 === v ) for ( ; b . length ; ) try { b . pop ( ) ( ) } catch ( t ) { n . error ( t ) } } } function s ( e ) { var t = e . indexOf ( "#" ) ; return - 1 === t ? "" : e . substr ( t ) } function r ( ) { C = null , c ( ) , d ( ) } function l ( ) { try { return m . state } catch ( e ) { } } function c ( ) { w = l ( ) , w = y ( w ) ? null : w , q ( w , A ) && ( w = A ) , A = w } function d ( ) { ( $ !== u . url ( ) || k !== w ) && ( $ = u . url ( ) , k = w , o ( M , function ( e ) { e ( u . url ( ) , w ) } ) ) } var u = this , p = ( t [ 0 ] , e . location ) , m = e . history , g = e . setTimeout , f = e . clearTimeout , _ = { } ; u . isMock = ! 1 ; var v = 0 , b = [ ] ; u . $$completeOutstandingRequest = a , u . $$incOutstandingRequestCount = function ( ) { v ++ } , u . notifyWhenNoOutstandingRequests = function ( e ) { 0 === v ? e ( ) : b . push ( e ) } ; var w , k , $ = p . href , S = t . find ( "base" ) , C = null ; c ( ) , k = w , u . url = function ( t , n , a ) { if ( y ( a ) && ( a = null ) , p !== e . location && ( p = e . location ) , m !== e . history && ( m = e . history ) , t ) { var o = k === a ; if ( $ === t && ( ! i . history || o ) ) return u ; var r = $ && On ( $ ) === On ( t ) ; return $ = t , k = a , ! i . history || r && o ? ( ( ! r || C ) && ( C = t ) , n ? p . replace ( t ) : r ? p . hash = s ( t ) : p . href = t , p . href !== t && ( C = t ) ) : ( m [ n ? "replaceState" : "pushState" ] ( a , "" , t ) , c ( ) , k = w ) , u } return C || p . href . replace ( /%27/g , "'" ) } , u . state = function ( ) { return w } ; var M = [ ] , x = ! 1 , A = null ; u . onUrlChange = function ( t ) { return x || ( i . history && Ma ( e ) . on ( "popstate" , r ) , Ma ( e ) . on ( "hashchange" , r ) , x = ! 0 ) , M . push ( t ) , t } , u . $$applicationDestroyed = function ( ) { Ma ( e ) . off ( " hash
} function Fn ( e , t ) { var n = "/" !== e . charAt ( 0 ) ; n && ( e = "/" + e ) ; var i = Mi ( e ) ; t . $$path = decodeURIComponent ( n && "/" === i . pathname . charAt ( 0 ) ? i . pathname . substring ( 1 ) : i . pathname ) , t . $$search = et ( i . search ) , t . $$hash = decodeURIComponent ( i . hash ) , t . $$path && "/" != t . $$path . charAt ( 0 ) && ( t . $$path = "/" + t . $$path ) } function Nn ( e , t ) { return 0 === t . indexOf ( e ) ? t . substr ( e . length ) : void 0 } function On ( e ) { var t = e . indexOf ( "#" ) ; return - 1 == t ? e : e . substr ( 0 , t ) } function Un ( e ) { return e . replace ( /(#.+)|#$/ , "$1" ) } function Rn ( e ) { return e . substr ( 0 , On ( e ) . lastIndexOf ( "/" ) + 1 ) } function Ln ( e ) { return e . substring ( 0 , e . indexOf ( "/" , e . indexOf ( "//" ) + 2 ) ) } function Bn ( e , t , n ) { this . $$html5 = ! 0 , n = n || "" , Pn ( e , this ) , this . $$parse = function ( e ) { var n = Nn ( t , e ) ; if ( ! $ ( n ) ) throw Wo ( "ipthprfx" , 'Invalid url "{0}", missing path prefix "{1}".' , e , t ) ; Fn ( n , this ) , this . $$path || ( this . $$path = "/" ) , this . $$compose ( ) } , this . $$compose = function ( ) { var e = tt ( this . $$search ) , n = this . $$hash ? "#" + nt ( this . $$hash ) : "" ; this . $$url = Dn ( this . $$path ) + ( e ? "?" + e : "" ) + n , this . $$absUrl = t + this . $$url . substr ( 1 ) } , this . $$parseLinkUrl = function ( i , a ) { if ( a && "#" === a [ 0 ] ) return this . hash ( a . slice ( 1 ) ) , ! 0 ; var o , s , r ; return b ( o = Nn ( e , i ) ) ? ( s = o , r = b ( o = Nn ( n , o ) ) ? t + ( Nn ( "/" , o ) || o ) : e + s ) : b ( o = Nn ( t , i ) ) ? r = t + o : t == i + "/" && ( r = t ) , r && this . $$parse ( r ) , ! ! r } } function jn ( e , t , n ) { Pn ( e , this ) , this . $$parse = function ( i ) { function a ( e , t , n ) { var i , a = /^\/[A-Z]:(\/.*)/ ; return 0 === t . indexOf ( n ) && ( t = t . replace ( n , "" ) ) , a . exec ( t ) ? e : ( i = a . exec ( e ) , i ? i [ 1 ] : e ) } var o , s = Nn ( e , i ) || Nn ( t , i ) ; y ( s ) || "#" !== s . charAt ( 0 ) ? this . $$html5 ? o = s : ( o = "" , y ( s ) && ( e = i , this . replace ( ) ) ) : ( o = Nn ( n , s ) , y ( o ) && ( o = s ) ) , Fn ( o , this ) , this . $$path = a ( this . $$path , o , e ) , this . $$compose ( ) } , this . $$compose = function ( ) { var t = tt ( this . $$search ) , i = this . $$hash ? "#" + nt ( this . $$hash ) : "" ; this . $$url = Dn ( this . $$path ) + ( t ? "?" + t : "" ) + i , this . $$absUrl = e + ( this . $$url ? n + this . $$url : "" ) } , this . $$parseLinkUrl = function ( t ) { return On ( e ) == On ( t ) ? ( this . $$parse ( t ) , ! 0 ) : ! 1 } } function qn ( e , t , n ) { this . $$html5 = ! 0 , jn . apply ( this , arguments ) , this . $$parseLinkUrl = function ( i , a ) { if ( a && "#" === a [ 0 ] ) return this . hash ( a . slice ( 1 ) ) , ! 0 ; var o , s ; return e == On ( i ) ? o = i : ( s = Nn ( t , i ) ) ? o = e + n + s : t === i + "/" && ( o = t ) , o && this . $$parse ( o ) , ! ! o } , this . $$compose = function ( ) { var t = tt ( this . $$search ) , i = this . $$hash ? "#" + nt ( this . $$hash ) : "" ; this . $$url = Dn ( this . $$path ) + ( t ? "?" + t : "" ) + i , this . $$absUrl = e + n + this . $$url } } function Hn ( e ) { return function ( ) { return this [ e ] } } function Vn ( e , t ) { return function ( n ) { return y ( n ) ? this [ e ] : ( this [ e ] = t ( n ) , this . $$compose ( ) , this ) } } function zn ( ) { var e = "" , t = { enabled : ! 1 , requireBase : ! 0 , rewriteLinks : ! 0 } ; this . hashPrefix = function ( t ) { return b ( t ) ? ( e = t , this ) : e } , this . html5Mode = function ( e ) { return P ( e ) ? ( t . enabled = e , this ) : w ( e ) ? ( P ( e . enabled ) && ( t . enabled = e . enabled ) , P ( e . requireBase ) && ( t . requireBase = e . requireBase ) , P ( e . rewriteLinks ) && ( t . rewriteLinks = e . rewriteLinks ) , this ) : t } , this . $get = [ "$rootScope" , "$browser" , "$sniffer" , "$rootElement" , "$window" , function ( n , i , a , o , s ) { function r ( e , t , n ) { var a = c . url ( ) , o = c . $$state ; try { i . url ( e , t , n ) , c . $$state = i . state ( ) } catch ( s ) { throw c . url ( a ) , c . $$state = o , s } } function l ( e , t ) { n . $broadcast ( "$locationChangeSuccess" , c . absUrl ( ) , e , c . $$state , t ) } var c , d , u , p = i . baseHref ( ) , m = i . url ( ) ; if ( t . enabled ) { if ( ! p && t . requireBase ) throw Wo ( "nobase" , "$location in HTML5 mode requires a <base> tag to be present!" ) ; u = Ln ( m ) + ( p || "/" ) , d = a . history ? Bn : qn } else u = On ( m ) , d = jn ; var g = Rn ( u ) ; c = new d ( u , g , "#" + e ) , c . $$parseLinkUrl ( m , m ) , c . $$state = i . state ( ) ; var h = /^\s*(javascript|mailto):/i ; o . on ( "click" , function ( e ) { if ( t . rewriteLinks && ! e . ctrlKey && ! e . metaKey && ! e . shiftKey && 2 != e . which && 2 != e . button ) { for ( var a = Ma ( e . target ) ; "a" !== R ( a [ 0 ] ) ; ) if ( a [ 0 ] === o [ 0 ] || ! ( a = a . parent ( ) ) [ 0 ] ) return ; var r = a . prop ( "href" ) , l = a . attr ( "href" ) || a . attr ( "xlink:href" ) ; w ( r ) && "[object SVGAnimatedString]" === r . toString ( ) && ( r = Mi ( r . animVal ) . href ) , h . test ( r ) || ! r || a . attr ( "target" ) || e . isDefaultPrevented ( ) || c . $$parseLinkUrl ( r , l ) && ( e . preventDefault ( ) , c . absUrl ( ) != i . url ( ) && ( n . $apply ( ) , s . angular [ "ff-684208-preventDefault" ] = ! 0 ) ) } } ) , Un ( c . absUrl ( ) ) != Un ( m ) && i . url ( c . absUrl ( ) , ! 0 ) ; var f = ! 0 ; return i . onUrlChange ( function ( e , t ) { return y ( Nn ( g , e ) ) ? void ( s . location . href = e ) : ( n . $evalAsync ( function ( ) { var i , a = c . absUrl ( ) , o = c . $$state ; c . $$parse ( e ) , c . $$state = t , i = n . $broadcast ( "$locationChangeStart" , e , a , t , o ) . defaultPrevented , c . absUrl ( ) === e && ( i ? ( c . $$parse ( a ) ,
for ( ; i ; ) r = ds . exec ( i ) , r ? ( c = H ( c , r , 1 ) , i = c . pop ( ) ) : ( c . push ( i ) , i = null ) ; var d = n . getTimezoneOffset ( ) ; return a && ( d = Y ( a , n . getTimezoneOffset ( ) ) , n = X ( n , a , ! 0 ) ) , o ( c , function ( t ) { s = cs [ t ] , l += s ? s ( n , e . DATETIME _FORMATS , d ) : t . replace ( /(^'|'$)/g , "" ) . replace ( /''/g , "'" ) } ) , l } } function Zi ( ) { return function ( e , t ) { return y ( t ) && ( t = 2 ) , G ( e , t ) } } function Xi ( ) { return function ( e , t , n ) { return t = 1 / 0 === Math . abs ( Number ( t ) ) ? Number ( t ) : m ( t ) , isNaN ( t ) ? e : ( S ( e ) && ( e = e . toString ( ) ) , Ra ( e ) || $ ( e ) ? ( n = ! n || isNaN ( n ) ? 0 : m ( n ) , n = 0 > n && n >= - e . length ? e . length + n : n , t >= 0 ? e . slice ( n , n + t ) : 0 === n ? e . slice ( t , e . length ) : e . slice ( Math . max ( 0 , n + t ) , n ) ) : e ) } } function Ji ( e ) { function t ( t , n ) { return n = n ? - 1 : 1 , t . map ( function ( t ) { var i = 1 , a = f ; if ( M ( t ) ) a = t ; else if ( $ ( t ) && ( ( "+" == t . charAt ( 0 ) || "-" == t . charAt ( 0 ) ) && ( i = "-" == t . charAt ( 0 ) ? - 1 : 1 , t = t . substring ( 1 ) ) , "" !== t && ( a = e ( t ) , a . constant ) ) ) { var o = a ( ) ; a = function ( e ) { return e [ o ] } } return { get : a , descending : i * n } } ) } function n ( e ) { switch ( typeof e ) { case "number" : case "boolean" : case "string" : return ! 0 ; default : return ! 1 } } function i ( e , t ) { return "function" == typeof e . valueOf && ( e = e . valueOf ( ) , n ( e ) ) ? e : v ( e ) && ( e = e . toString ( ) , n ( e ) ) ? e : t } function o ( e , t ) { var n = typeof e ; return null === e ? ( n = "string" , e = "null" ) : "string" === n ? e = e . toLowerCase ( ) : "object" === n && ( e = i ( e , t ) ) , { value : e , type : n } } function s ( e , t ) { var n = 0 ; return e . type === t . type ? e . value !== t . value && ( n = e . value < t . value ? - 1 : 1 ) : n = e . type < t . type ? - 1 : 1 , n } return function ( e , n , i ) { function r ( e , t ) { return { value : e , predicateValues : c . map ( function ( n ) { return o ( n . get ( e ) , t ) } ) } } function l ( e , t ) { for ( var n = 0 , i = 0 , a = c . length ; a > i && ! ( n = s ( e . predicateValues [ i ] , t . predicateValues [ i ] ) * c [ i ] . descending ) ; ++ i ) ; return n } if ( ! a ( e ) ) return e ; Ra ( n ) || ( n = [ n ] ) , 0 === n . length && ( n = [ "+" ] ) ; var c = t ( n , i ) ; c . push ( { get : function ( ) { return { } } , descending : i ? - 1 : 1 } ) ; var d = Array . prototype . map . call ( e , r ) ; return d . sort ( l ) , e = d . map ( function ( e ) { return e . value } ) } } function Qi ( e ) { return M ( e ) && ( e = { link : e } ) , e . restrict = e . restrict || "AC" , _ ( e ) } function ea ( e , t ) { e . $name = t } function ta ( e , t , i , a , s ) { var r = this , l = [ ] ; r . $error = { } , r . $$success = { } , r . $pending = n , r . $name = s ( t . name || t . ngForm || "" ) ( i ) , r . $dirty = ! 1 , r . $pristine = ! 0 , r . $valid = ! 0 , r . $invalid = ! 1 , r . $submitted = ! 1 , r . $$parentForm = fs , r . $rollbackViewValue = function ( ) { o ( l , function ( e ) { e . $rollbackViewValue ( ) } ) } , r . $commitViewValue = function ( ) { o ( l , function ( e ) { e . $commitViewValue ( ) } ) } , r . $addControl = function ( e ) { mt ( e . $name , "input" ) , l . push ( e ) , e . $name && ( r [ e . $name ] = e ) , e . $$parentForm = r } , r . $$renameControl = function ( e , t ) { var n = e . $name ; r [ n ] === e && delete r [ n ] , r [ t ] = e , e . $name = t } , r . $removeControl = function ( e ) { e . $name && r [ e . $name ] === e && delete r [ e . $name ] , o ( r . $pending , function ( t , n ) { r . $setValidity ( n , null , e ) } ) , o ( r . $error , function ( t , n ) { r . $setValidity ( n , null , e ) } ) , o ( r . $$success , function ( t , n ) { r . $setValidity ( n , null , e ) } ) , L ( l , e ) , e . $$parentForm = fs } , fa ( { ctrl : this , $element : e , set : function ( e , t , n ) { var i = e [ t ] ; if ( i ) { var a = i . indexOf ( n ) ; - 1 === a && i . push ( n ) } else e [ t ] = [ n ] } , unset : function ( e , t , n ) { var i = e [ t ] ; i && ( L ( i , n ) , 0 === i . length && delete e [ t ] ) } , $animate : a } ) , r . $setDirty = function ( ) { a . removeClass ( e , Js ) , a . addClass ( e , Qs ) , r . $dirty = ! 0 , r . $pristine = ! 1 , r . $$parentForm . $setDirty ( ) } , r . $setPristine = function ( ) { a . setClass ( e , Js , Qs + " " + _s ) , r . $dirty = ! 1 , r . $pristine = ! 0 , r . $submitted = ! 1 , o ( l , function ( e ) { e . $setPristine ( ) } ) } , r . $setUntouched = function ( ) { o ( l , function ( e ) { e . $setUntouched ( ) } ) } , r . $setSubmitted = function ( ) { a . addClass ( e , _s ) , r . $submitted = ! 0 , r . $$parentForm . $setSubmitted ( ) } } function na ( e ) { e . $formatters . push ( function ( t ) { return e . $isEmpty ( t ) ? t : t . toString ( ) } ) } function ia ( e , t , n , i , a , o ) { aa ( e , t , n , i , a , o ) , na ( i ) } function aa ( e , t , n , i , a , o ) { var s = ba ( t [ 0 ] . type ) ; if ( ! a . android ) { var r = ! 1 ; t . on ( "compositionstart" , function ( ) { r = ! 0 } ) , t . on ( "compositionend" , function ( ) { r = ! 1 , l ( ) } ) } var l = function ( e ) { if ( c && ( o . defer . cancel ( c ) , c = null ) , ! r ) { var a = t . val ( ) , l = e && e . type ; "password" === s || n . ngTrim && "false" === n . ngTrim || ( a = Ba ( a ) ) , ( i . $viewValue !== a || "" === a && i . $$hasNativeValidators ) && i . $setViewValue ( a , l ) } } ; if ( a . hasEvent ( "input" ) ) t . on ( "input" , l ) ; else { var c , d = function ( e , t , n ) { c || ( c = o . defer ( function ( ) { c = null , t && t . value === n || l ( e ) } ) ) } ; t . on ( "keydown" , function ( e ) { var t = e . keyCode ; 91 === t || t > 15 && 19 > t || t >= 37 && 40 >= t || d ( e , this , this . value ) } ) , a . hasEvent ( "paste" ) && t . on ( "paste cut" , d ) } t . on ( "change" , l ) , i . $render = function ( ) { var e = i . $isEmpty ( i . $vie
var a = i . nextId ( ) ; i . recurse ( e , a ) , i . return _ ( a ) , i . state . inputs . push ( n ) , e . watchId = t } ) , this . state . computing = "fn" , this . stage = "main" , this . recurse ( a ) ; var d = '"' + this . USE + " " + this . STRICT + '";\n' + this . filterPrefix ( ) + "var fn=" + this . generateFunction ( "fn" , "s,l,a,i" ) + r + this . watchFns ( ) + "return fn;" , u = new Function ( "$filter" , "ensureSafeMemberName" , "ensureSafeObject" , "ensureSafeFunction" , "getStringValue" , "ensureSafeAssignContext" , "ifDefined" , "plus" , "text" , d ) ( this . $filter , Gn , Yn , Zn , Kn , Xn , Jn , Qn , e ) ; return this . state = this . stage = n , u . literal = oi ( a ) , u . constant = si ( a ) , u } , USE : "use" , STRICT : "strict" , watchFns : function ( ) { var e = [ ] , t = this . state . inputs , n = this ; return o ( t , function ( t ) { e . push ( "var " + t + "=" + n . generateFunction ( t , "s" ) ) } ) , t . length && e . push ( "fn.inputs=[" + t . join ( "," ) + "];" ) , e . join ( "" ) } , generateFunction : function ( e , t ) { return "function(" + t + "){" + this . varsPrefix ( e ) + this . body ( e ) + "};" } , filterPrefix : function ( ) { var e = [ ] , t = this ; return o ( this . state . filters , function ( n , i ) { e . push ( n + "=$filter(" + t . escape ( i ) + ")" ) } ) , e . length ? "var " + e . join ( "," ) + ";" : "" } , varsPrefix : function ( e ) { return this . state [ e ] . vars . length ? "var " + this . state [ e ] . vars . join ( "," ) + ";" : "" } , body : function ( e ) { return this . state [ e ] . body . join ( "" ) } , recurse : function ( e , t , i , a , s , r ) { var l , c , d , u , p = this ; if ( a = a || h , ! r && b ( e . watchId ) ) return t = t || this . nextId ( ) , void this . if _ ( "i" , this . lazyAssign ( t , this . computedMember ( "i" , e . watchId ) ) , this . lazyRecurse ( e , t , i , a , s , ! 0 ) ) ; switch ( e . type ) { case ts . Program : o ( e . body , function ( t , i ) { p . recurse ( t . expression , n , n , function ( e ) { c = e } ) , i !== e . body . length - 1 ? p . current ( ) . body . push ( c , ";" ) : p . return _ ( c ) } ) ; break ; case ts . Literal : u = this . escape ( e . value ) , this . assign ( t , u ) , a ( u ) ; break ; case ts . UnaryExpression : this . recurse ( e . argument , n , n , function ( e ) { c = e } ) , u = e . operator + "(" + this . ifDefined ( c , 0 ) + ")" , this . assign ( t , u ) , a ( u ) ; break ; case ts . BinaryExpression : this . recurse ( e . left , n , n , function ( e ) { l = e } ) , this . recurse ( e . right , n , n , function ( e ) { c = e } ) , u = "+" === e . operator ? this . plus ( l , c ) : "-" === e . operator ? this . ifDefined ( l , 0 ) + e . operator + this . ifDefined ( c , 0 ) : "(" + l + ")" + e . operator + "(" + c + ")" , this . assign ( t , u ) , a ( u ) ; break ; case ts . LogicalExpression : t = t || this . nextId ( ) , p . recurse ( e . left , t ) , p . if _ ( "&&" === e . operator ? t : p . not ( t ) , p . lazyRecurse ( e . right , t ) ) , a ( t ) ; break ; case ts . ConditionalExpression : t = t || this . nextId ( ) , p . recurse ( e . test , t ) , p . if _ ( t , p . lazyRecurse ( e . alternate , t ) , p . lazyRecurse ( e . consequent , t ) ) , a ( t ) ; break ; case ts . Identifier : t = t || this . nextId ( ) , i && ( i . context = "inputs" === p . stage ? "s" : this . assign ( this . nextId ( ) , this . getHasOwnProperty ( "l" , e . name ) + "?l:s" ) , i . computed = ! 1 , i . name = e . name ) , Gn ( e . name ) , p . if _ ( "inputs" === p . stage || p . not ( p . getHasOwnProperty ( "l" , e . name ) ) , function ( ) { p . if _ ( "inputs" === p . stage || "s" , function ( ) { s && 1 !== s && p . if _ ( p . not ( p . nonComputedMember ( "s" , e . name ) ) , p . lazyAssign ( p . nonComputedMember ( "s" , e . name ) , "{}" ) ) , p . assign ( t , p . nonComputedMember ( "s" , e . name ) ) } ) } , t && p . lazyAssign ( t , p . nonComputedMember ( "l" , e . name ) ) ) , ( p . state . expensiveChecks || ci ( e . name ) ) && p . addEnsureSafeObject ( t ) , a ( t ) ; break ; case ts . MemberExpression : l = i && ( i . context = this . nextId ( ) ) || this . nextId ( ) , t = t || this . nextId ( ) , p . recurse ( e . object , l , n , function ( ) { p . if _ ( p . notNull ( l ) , function ( ) { e . computed ? ( c = p . nextId ( ) , p . recurse ( e . property , c ) , p . getStringValue ( c ) , p . addEnsureSafeMemberName ( c ) , s && 1 !== s && p . if _ ( p . not ( p . computedMember ( l , c ) ) , p . lazyAssign ( p . computedMember ( l , c ) , "{}" ) ) , u = p . ensureSafeObject ( p . computedMember ( l , c ) ) , p . assign ( t , u ) , i && ( i . computed = ! 0 , i . name = c ) ) : ( Gn ( e . property . name ) , s && 1 !== s && p . if _ ( p . not ( p . nonComputedMember ( l , e . property . name ) ) , p . lazyAssign ( p . nonComputedMember ( l , e . property . name ) , "{}" ) ) , u = p . nonComputedMember ( l , e . property . name ) , ( p . state . expensiveChecks || ci ( e . property . name ) ) && ( u = p . ensureSafeObject ( u ) ) , p . assign ( t , u ) , i && ( i . computed = ! 1 , i . name = e . property . name ) ) } , function ( ) { p . assign ( t , "undefined" ) } ) , a ( t ) } , ! ! s ) ; break ; case ts . CallExpression : t = t || this . nextId ( ) , e . filter ? ( c = p . filter ( e . callee . name ) , d = [ ] , o ( e . arguments , function ( e ) { var t = p . nextId ( ) ; p . recurse ( e , t ) , d . push ( t ) } ) , u = c + "(" + d . join ( "," ) + ")" , p . assign ( t , u ) , a ( t ) ) : ( c = p . nextId ( ) , l = { } , d = [ ] , p . recurse ( e . callee , c , l , function ( ) { p . if _ ( p . notNull ( c ) , function ( ) { p . addEnsureSafeFunction ( c ) , o ( e . arguments , function ( e ) { p . recurse ( e , p . nextId ( ) , n , function ( e ) { d . push ( p . ensureSafeObject ( e ) ) } ) } ) , l . nam
} , d = function ( e ) { return e . clone [ 0 ] } , u = function ( e ) { return e . clone [ e . clone . length - 1 ] } ; return { restrict : "A" , multiElement : ! 0 , transclude : "element" , priority : 1e3 , terminal : ! 0 , $$tlb : ! 0 , compile : function ( i , p ) { var m = p . ngRepeat , g = t . createComment ( " end ngRepeat: " + m + " " ) , h = m . match ( /^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/ ) ; if ( ! h ) throw l ( "iexp" , "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'." , m ) ; var f = h [ 1 ] , _ = h [ 2 ] , v = h [ 3 ] , y = h [ 4 ] ; if ( h = f . match ( /^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/ ) , ! h ) throw l ( "iidexp" , "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'." , f ) ; var b = h [ 3 ] || h [ 1 ] , w = h [ 2 ] ; if ( v && ( ! /^[$a-zA-Z_][$a-zA-Z0-9_]*$/ . test ( v ) || /^(null|undefined|this|\$index|\$first|\$middle|\$last|\$even|\$odd|\$parent|\$root|\$id)$/ . test ( v ) ) ) throw l ( "badident" , "alias '{0}' is invalid --- must be a valid JS identifier which is not a reserved name." , v ) ; var k , $ , S , C , M = { $id : Kt } ; return y ? k = e ( y ) : ( S = function ( e , t ) { return Kt ( t ) } , C = function ( e ) { return e } ) , function ( e , t , i , p , h ) { k && ( $ = function ( t , n , i ) { return w && ( M [ w ] = t ) , M [ b ] = n , M . $index = i , k ( e , M ) } ) ; var f = ft ( ) ; e . $watchCollection ( _ , function ( i ) { var p , _ , y , k , M , x , A , E , I , T , D , P , F = t [ 0 ] , N = ft ( ) ; if ( v && ( e [ v ] = i ) , a ( i ) ) I = i , E = $ || S ; else { E = $ || C , I = [ ] ; for ( var O in i ) wa . call ( i , O ) && "$" !== O . charAt ( 0 ) && I . push ( O ) } for ( k = I . length , D = new Array ( k ) , p = 0 ; k > p ; p ++ ) if ( M = i === I ? p : I [ p ] , x = i [ M ] , A = E ( M , x , p ) , f [ A ] ) T = f [ A ] , delete f [ A ] , N [ A ] = T , D [ p ] = T ; else { if ( N [ A ] ) throw o ( D , function ( e ) { e && e . scope && ( f [ e . id ] = e ) } ) , l ( "dupes" , "Duplicates in a repeater are not allowed. Use 'track by' expression to specify unique keys. Repeater: {0}, Duplicate key: {1}, Duplicate value: {2}" , m , A , x ) ; D [ p ] = { id : A , scope : n , clone : n } , N [ A ] = ! 0 } for ( var U in f ) { if ( T = f [ U ] , P = ht ( T . clone ) , s . leave ( P ) , P [ 0 ] . parentNode ) for ( p = 0 , _ = P . length ; _ > p ; p ++ ) P [ p ] [ r ] = ! 0 ; T . scope . $destroy ( ) } for ( p = 0 ; k > p ; p ++ ) if ( M = i === I ? p : I [ p ] , x = i [ M ] , T = D [ p ] , T . scope ) { y = F ; do y = y . nextSibling ; while ( y && y [ r ] ) ; d ( T ) != y && s . move ( ht ( T . clone ) , null , Ma ( F ) ) , F = u ( T ) , c ( T . scope , p , b , x , w , M , k ) } else h ( function ( e , t ) { T . scope = t ; var n = g . cloneNode ( ! 1 ) ; e [ e . length ++ ] = n , s . enter ( e , null , Ma ( F ) ) , F = n , T . clone = e , N [ T . id ] = T , c ( T . scope , p , b , x , w , M , k ) } ) ; f = N } ) } } } } ] , gr = "ng-hide" , hr = "ng-hide-animate" , fr = [ "$animate" , function ( e ) { return { restrict : "A" , multiElement : ! 0 , link : function ( t , n , i ) { t . $watch ( i . ngShow , function ( t ) { e [ t ? "removeClass" : "addClass" ] ( n , gr , { tempClasses : hr } ) } ) } } } ] , _r = [ "$animate" , function ( e ) { return { restrict : "A" , multiElement : ! 0 , link : function ( t , n , i ) { t . $watch ( i . ngHide , function ( t ) { e [ t ? "addClass" : "removeClass" ] ( n , gr , { tempClasses : hr } ) } ) } } } ] , vr = Qi ( function ( e , t , n ) { e . $watch ( n . ngStyle , function ( e , n ) { n && e !== n && o ( n , function ( e , n ) { t . css ( n , "" ) } ) , e && t . css ( e ) } , ! 0 ) } ) , yr = [ "$animate" , function ( e ) { return { require : "ngSwitch" , controller : [ "$scope" , function ( ) { this . cases = { } } ] , link : function ( n , i , a , s ) { var r = a . ngSwitch || a . on , l = [ ] , c = [ ] , d = [ ] , u = [ ] , p = function ( e , t ) { return function ( ) { e . splice ( t , 1 ) } } ; n . $watch ( r , function ( n ) { var i , a ; for ( i = 0 , a = d . length ; a > i ; ++ i ) e . cancel ( d [ i ] ) ; for ( d . length = 0 , i = 0 , a = u . length ; a > i ; ++ i ) { var r = ht ( c [ i ] . clone ) ; u [ i ] . $destroy ( ) ; var m = d [ i ] = e . leave ( r ) ; m . then ( p ( d , i ) ) } c . length = 0 , u . length = 0 , ( l = s . cases [ "!" + n ] || s . cases [ "?" ] ) && o ( l , function ( n ) { n . transclude ( function ( i , a ) { u . push ( a ) ; var o = n . element ; i [ i . length ++ ] = t . createComment ( " end ngSwitchWhen: " ) ; var s = { clone : i } ; c . push ( s ) , e . enter ( i , o . parent ( ) , o ) } ) } ) } ) } } } ] , br = Qi ( { transclude : "element" , priority : 1200 , require : "^ngSwitch" , multiElement : ! 0 , link : function ( e , t , n , i , a ) { i . cases [ "!" + n . ngSwitchWhen ] = i . cases [ "!" + n . ngSwitchWhen ] || [ ] , i . cases [ "!" + n . ngSwitchWhen ] . push ( { transclude : a , element : t } ) } } ) , wr = Qi ( { transclude : "element" , priority : 1200 , require : "^ngSwitch" , multiElement : ! 0 , link : function ( e , t , n , i , a ) { i . cases [ "?" ] = i . cases [ "?" ] || [ ] , i . cases [ "?" ] . push ( { transclude : a , element : t } ) } } ) , kr = Qi ( { restrict : "EAC" , link : function ( e , t , n , a , o ) { if ( ! o ) throw i ( "ngTransclude" ) ( "orphan" , "Illegal use of ngTransclude directive in the template! No parent directive that requires a transclusion found. Element: {0}" , J ( t ) ) ; o ( function ( e ) { t . empty ( ) , t . append ( e ) } ) } } ) , $r = [ "$templateCache" , function ( e ) { return { restrict : "E" , terminal : ! 0 , compile : function ( t , n ) { if ( " text / ng - templat
C ( e , l ) } } } else C ( e , l ) ; var G = L . structural ; if ( G || ( G = "animate" === L . event && Object . keys ( L . options . to || { } ) . length > 0 || i ( L . options ) ) , ! G ) return u ( ) , E ( e ) , k ; var K = ( U . counter || 0 ) + 1 ; return L . counter = K , D ( e , a , L ) , c . $$postDigest ( function ( ) { var t = P . get ( g ) , a = ! t ; t = t || { } ; var s = e . parent ( ) || [ ] , r = s . length > 0 && ( "animate" === t . event || t . structural || i ( t . options ) ) ; if ( a || t . counter !== K || ! r ) return a && ( Z ( e , l ) , m ( e , l ) ) , ( a || I && t . event !== n ) && ( l . domOperation ( ) , k . end ( ) ) , void ( r || E ( e ) ) ; n = ! t . structural && i ( t . options , ! 0 ) ? "setClass" : t . event , D ( e , o ) ; var c = _ ( e , n , t . options ) ; c . done ( function ( t ) { u ( ! t ) ; var i = P . get ( g ) ; i && i . counter === K && E ( v ( e ) ) , d ( k , n , "close" , { } ) } ) , k . setHost ( c ) , d ( k , n , "start" , { } ) } ) , k } function A ( e ) { var t = v ( e ) , n = t . querySelectorAll ( "[" + Ct + "]" ) ; B ( n , function ( e ) { var t = parseInt ( e . getAttribute ( Ct ) ) , n = P . get ( e ) ; switch ( t ) { case o : n . runner . end ( ) ; case a : n && P . remove ( e ) } } ) } function E ( e ) { var t = v ( e ) ; t . removeAttribute ( Ct ) , P . remove ( t ) } function I ( e , t ) { return v ( e ) === v ( t ) } function T ( e , t ) { var n , i = L ( g [ 0 ] . body ) , a = I ( e , i ) || "HTML" === e [ 0 ] . nodeName , o = I ( e , d ) , s = ! 1 , r = e . data ( Mt ) ; for ( r && ( t = r ) ; t && t . length ; ) { o || ( o = I ( t , d ) ) ; var l = t [ 0 ] ; if ( l . nodeType !== K ) break ; var c = P . get ( l ) || { } ; if ( s || ( s = c . structural || F . get ( l ) ) , V ( n ) || n === ! 0 ) { var u = t . data ( et ) ; z ( u ) && ( n = u ) } if ( s && n === ! 1 ) break ; o || ( o = I ( t , d ) , o || ( r = t . data ( Mt ) , r && ( t = r ) ) ) , a || ( a = I ( t , i ) ) , t = t . parent ( ) } var p = ! s || n ; return p && o && a } function D ( e , t , n ) { n = n || { } , n . state = t ; var i = v ( e ) ; i . setAttribute ( Ct , t ) ; var a = P . get ( i ) , o = a ? R ( a , n ) : n ; P . put ( i , o ) } var P = new h , F = new h , N = null , O = c . $watch ( function ( ) { return 0 === k . totalPendingRequests } , function ( e ) { e && ( O ( ) , c . $$postDigest ( function ( ) { c . $$postDigest ( function ( ) { null === N && ( N = ! 0 ) } ) } ) ) } ) , U = { } , W = e . classNameFilter ( ) , Y = W ? function ( e ) { return W . test ( e ) } : function ( ) { return ! 0 } , Z = u ( $ ) ; return { on : function ( e , t , n ) { var i = l ( t ) ; U [ e ] = U [ e ] || [ ] , U [ e ] . push ( { node : i , callback : n } ) } , off : function ( e , t , n ) { function i ( e , t , n ) { var i = l ( t ) ; return e . filter ( function ( e ) { var t = e . node === i && ( ! n || e . callback === n ) ; return ! t } ) } var a = U [ e ] ; a && ( U [ e ] = 1 === arguments . length ? null : i ( a , t , n ) ) } , pin : function ( e , t ) { n ( G ( e ) , "element" , "not an element" ) , n ( G ( t ) , "parentElement" , "not an element" ) , e . data ( Mt , t ) } , push : function ( e , t , n , i ) { return n = n || { } , n . domOperation = i , x ( e , t , n ) } , enabled : function ( e , t ) { var n = arguments . length ; if ( 0 === n ) t = ! ! N ; else { var i = G ( e ) ; if ( i ) { var a = v ( e ) , o = F . get ( a ) ; 1 === n ? t = ! o : ( t = ! ! t , t ? o && F . remove ( a ) : F . put ( a , ! 0 ) ) } else t = N = ! ! e } return t } } } ] } ] , At = [ "$$rAF" , function ( e ) { function t ( t ) { n . push ( t ) , n . length > 1 || e ( function ( ) { for ( var e = 0 ; e < n . length ; e ++ ) n [ e ] ( ) ; n = [ ] } ) } var n = [ ] ; return function ( ) { var e = ! 1 ; return t ( function ( ) { e = ! 0 } ) , function ( n ) { e ? n ( ) : t ( n ) } } } ] , Et = [ "$q" , "$sniffer" , "$$animateAsyncRun" , function ( e , t , n ) { function i ( e ) { this . setHost ( e ) , this . _doneCallbacks = [ ] , this . _runInAnimationFrame = n ( ) , this . _state = 0 } var a = 0 , o = 1 , s = 2 ; return i . chain = function ( e , t ) { function n ( ) { return i === e . length ? void t ( ! 0 ) : void e [ i ] ( function ( e ) { return e === ! 1 ? void t ( ! 1 ) : ( i ++ , void n ( ) ) } ) } var i = 0 ; n ( ) } , i . all = function ( e , t ) { function n ( n ) { a = a && n , ++ i === e . length && t ( a ) } var i = 0 , a = ! 0 ; B ( e , function ( e ) { e . done ( n ) } ) } , i . prototype = { setHost : function ( e ) { this . host = e || { } } , done : function ( e ) { this . _state === s ? e ( ) : this . _doneCallbacks . push ( e ) } , progress : U , getPromise : function ( ) { if ( ! this . promise ) { var t = this ; this . promise = e ( function ( e , n ) { t . done ( function ( t ) { t === ! 1 ? n ( ) : e ( ) } ) } ) } return this . promise } , then : function ( e , t ) { return this . getPromise ( ) . then ( e , t ) } , "catch" : function ( e ) { return this . getPromise ( ) [ "catch" ] ( e ) } , "finally" : function ( e ) { return this . getPromise ( ) [ "finally" ] ( e ) } , pause : function ( ) { this . host . pause && this . host . pause ( ) } , resume : function ( ) { this . host . resume && this . host . resume ( ) } , end : function ( ) { this . host . end && this . host . end ( ) , this . _resolve ( ! 0 ) } , cancel : function ( ) { this . host . cancel && this . host . cancel ( ) , this . _resolve ( ! 1 ) } , complete : function ( e ) { var t = this ; t . _state === a && ( t . _state = o , t . _runInAnimationFrame ( function ( ) { t . _resolve ( e ) } ) ) } , _resolve : function ( e ) { this . _state !== s && ( B ( this . _doneCallbacks , function ( t ) { t ( e ) } ) , this . _doneCallbacks . length = 0 , this . _state = s ) } } , i } ] , It = [ "$animateProvider" , function ( ) { function e ( e , t ) { e . data ( s , t ) } function t ( e ) { e . removeData ( s ) } function n ( e ) { return e . data ( s ) } var a = "ng-animate-ref" , o = this . drivers = [ ] , s = "$$animationRunner" ; this . $get = [ "$$jqLite" , "$rootScope" , "$injector" , " $$Anim
if ( e . $attachPlaylist ( t ) , void 0 === t && void 0 !== i ) return e . pause ( ) ; if ( e . currentTrack ) { a = i ? i [ e . currentTrack - 1 ] : - 1 ; for ( var s = 0 ; s < t . length ; s ++ ) if ( angular . equals ( t [ s ] , a ) ) { o = s ; break } null !== o ? ( e . currentTrack = o + 1 , e . tracks = t . length ) : ( e . pause ( ) , t . length ? n ( function ( ) { e . $clearSourceList ( ) , e . $addSourceList ( t [ 0 ] ) , e . load ( ) , e . tracks = t . length } ) : e . reset ( ) ) } else t . length ? ( e . $clearSourceList ( ) , e . $addSourceList ( t [ 0 ] ) , e . load ( ) , e . tracks = t . length ) : e . reset ( ) } } var s = { load : function ( e , t ) { "boolean" == typeof e ? ( t = e , e = null ) : "object" == typeof e && ( this . $clearSourceList ( ) , this . $addSourceList ( e ) ) , this . $domEl . load ( ) , this . ended = void 0 , t && this . $element . one ( "canplay" , this . play . bind ( this ) ) } , reset : function ( e ) { angular . extend ( this , a ) , this . $clearSourceList ( ) , this . load ( this . $playlist , e ) } , play : function ( e , t ) { return "boolean" == typeof e && ( t = e , e = void 0 ) , t && ( this . $selective = ! 0 ) , this . $playlist . length > e ? ( this . currentTrack = e + 1 , this . load ( this . $playlist [ e ] , ! 0 ) ) : ( ! this . currentTrack && this . $domEl . readyState && this . currentTrack ++ , void ( this . ended ? this . load ( ! 0 ) : this . $domEl . play ( ) ) ) } , playPause : function ( e , t ) { "boolean" == typeof e && ( t = e , e = void 0 ) , t && ( this . $selective = ! 0 ) , "number" == typeof e && e + 1 !== this . currentTrack ? this . play ( e ) : this . playing ? this . pause ( ) : this . play ( ) } , pause : function ( ) { this . $domEl . pause ( ) } , stop : function ( ) { this . reset ( ) } , toggleMute : function ( ) { this . muted = this . $domEl . muted = ! this . $domEl . muted } , next : function ( e ) { var t = this ; if ( t . currentTrack && t . currentTrack < t . tracks ) { var i = e || t . playing ; t . pause ( ) , n ( function ( ) { t . $clearSourceList ( ) , t . $addSourceList ( t . $playlist [ t . currentTrack ] ) , t . load ( i ) , t . currentTrack ++ } ) } } , prev : function ( e ) { var t = this ; if ( t . currentTrack && t . currentTrack - 1 ) { var i = e || t . playing ; t . pause ( ) , n ( function ( ) { t . $clearSourceList ( ) , t . $addSourceList ( t . $playlist [ t . currentTrack - 2 ] ) , t . load ( i ) , t . currentTrack -- } ) } } , setPlaybackRate : function ( e ) { this . $domEl . playbackRate = e } , setVolume : function ( e ) { this . $domEl . volume = e } , seek : function ( e ) { var t , n = 0 ; return "string" != typeof e ? this . $domEl . currentTime = e : ( t = e . split ( ":" ) , n += parseInt ( t . pop ( ) , 10 ) , t . length && ( n += 60 * parseInt ( t . pop ( ) , 10 ) ) , t . length && ( n += 3600 * parseInt ( t . pop ( ) , 10 ) ) , isNaN ( n ) ? void 0 : this . $domEl . currentTime = n ) } , on : function ( e , t ) { return this . $element . on ( e , t ) } , off : function ( e , t ) { return this . $element . off ( e , t ) } , one : function ( e , t ) { return this . $element . one ( e , t ) } , $addSourceList : function ( e ) { var t = this ; if ( angular . isArray ( e ) ) angular . forEach ( e , function ( e ) { var n = document . createElement ( "SOURCE" ) ; [ "src" , "type" , "media" ] . forEach ( function ( t ) { void 0 !== e [ t ] && n . setAttribute ( t , e [ t ] ) } ) , t . $element . append ( n ) } ) ; else if ( angular . isObject ( e ) ) { var n = document . createElement ( "SOURCE" ) ; [ "src" , "type" , "media" ] . forEach ( function ( t ) { void 0 !== e [ t ] && n . setAttribute ( t , e [ t ] ) } ) , t . $element . append ( n ) } } , $clearSourceList : function ( ) { this . $element . contents ( ) . remove ( ) } , $formatTime : function ( e ) { if ( 1 / 0 === e ) return "∞" ; var t , n = parseInt ( e / 3600 , 10 ) % 24 , i = parseInt ( e / 60 , 10 ) % 60 , a = parseInt ( e % 60 , 10 ) , o = ( 10 > i ? "0" + i : i ) + ":" + ( 10 > a ? "0" + a : a ) ; return t = n > 0 ? ( 10 > n ? "0" + n : n ) + ":" + o : o } , $attachPlaylist : function ( e ) { void 0 === e || null === e ? this . playlist = [ ] : this . $playlist = e } } , r = function ( e , t , n ) { var a = { playing : function ( ) { e . $apply ( function ( e ) { e . playing = ! 0 , e . ended = ! 1 } ) } , pause : function ( ) { e . $apply ( function ( e ) { e . playing = ! 1 } ) } , ended : function ( ) { ! e . $selective && e . currentTrack < e . tracks ? e . next ( ! 0 ) : e . $apply ( function ( e ) { e . ended = ! 0 , e . playing = ! 1 } ) } , timeupdate : i ( 1e3 , ! 1 , function ( ) { e . $apply ( function ( e ) { e . currentTime = t . currentTime , e . formatTime = e . $formatTime ( e . currentTime ) } ) } ) , loadedmetadata : function ( ) { e . $apply ( function ( e ) { e . currentTrack || e . currentTrack ++ , e . duration = t . duration , e . formatDuration = e . $formatTime ( e . duration ) , t . buffered . length && ( e . loadPercent = Math . round ( t . buffered . end ( t . buffered . length - 1 ) / e . duration * 100 ) ) } ) } , progress : function ( ) { e . $domEl . buffered . length && e . $apply ( function ( e ) { e . loadPercent = Math . round ( t . buffered . end ( t . buffered . length - 1 ) / e . duration * 100 ) , e . network = "progress" } ) } , volumechange : function ( ) { e . $apply ( function ( e ) { e . volume = t . volume , e . muted = t . muted } ) } , seeked : function ( ) { e . $apply ( function ( e ) { e . seeking = ! 1 } ) } , seeking : function ( ) { e . $apply ( function ( e ) { e . seeking = ! 0 } ) } , ratechange : function ( ) { e . $apply ( function ( e ) { e . playbackRate = t . playbackRate } ) } , stalled : function (
i . prototype . getName = function ( ) { return this . name } , i . prototype . getData = function ( ) { return this . data } , i . prototype . G = function ( ) { return this . H } , t ( "Zlib.GunzipMember" , i ) , t ( "Zlib.GunzipMember.prototype.getName" , i . prototype . getName ) , t ( "Zlib.GunzipMember.prototype.getData" , i . prototype . getData ) , t ( "Zlib.GunzipMember.prototype.getMtime" , i . prototype . G ) ; var v , y = [ ] ; for ( v = 0 ; 288 > v ; v ++ ) switch ( ! 0 ) { case 143 >= v : y . push ( [ v + 48 , 8 ] ) ; break ; case 255 >= v : y . push ( [ v - 144 + 400 , 9 ] ) ; break ; case 279 >= v : y . push ( [ v - 256 + 0 , 7 ] ) ; break ; case 287 >= v : y . push ( [ v - 280 + 192 , 8 ] ) ; break ; default : e ( "invalid literal: " + v ) } var b = function ( ) { function t ( t ) { switch ( ! 0 ) { case 3 === t : return [ 257 , t - 3 , 0 ] ; case 4 === t : return [ 258 , t - 4 , 0 ] ; case 5 === t : return [ 259 , t - 5 , 0 ] ; case 6 === t : return [ 260 , t - 6 , 0 ] ; case 7 === t : return [ 261 , t - 7 , 0 ] ; case 8 === t : return [ 262 , t - 8 , 0 ] ; case 9 === t : return [ 263 , t - 9 , 0 ] ; case 10 === t : return [ 264 , t - 10 , 0 ] ; case 12 >= t : return [ 265 , t - 11 , 1 ] ; case 14 >= t : return [ 266 , t - 13 , 1 ] ; case 16 >= t : return [ 267 , t - 15 , 1 ] ; case 18 >= t : return [ 268 , t - 17 , 1 ] ; case 22 >= t : return [ 269 , t - 19 , 2 ] ; case 26 >= t : return [ 270 , t - 23 , 2 ] ; case 30 >= t : return [ 271 , t - 27 , 2 ] ; case 34 >= t : return [ 272 , t - 31 , 2 ] ; case 42 >= t : return [ 273 , t - 35 , 3 ] ; case 50 >= t : return [ 274 , t - 43 , 3 ] ; case 58 >= t : return [ 275 , t - 51 , 3 ] ; case 66 >= t : return [ 276 , t - 59 , 3 ] ; case 82 >= t : return [ 277 , t - 67 , 4 ] ; case 98 >= t : return [ 278 , t - 83 , 4 ] ; case 114 >= t : return [ 279 , t - 99 , 4 ] ; case 130 >= t : return [ 280 , t - 115 , 4 ] ; case 162 >= t : return [ 281 , t - 131 , 5 ] ; case 194 >= t : return [ 282 , t - 163 , 5 ] ; case 226 >= t : return [ 283 , t - 195 , 5 ] ; case 257 >= t : return [ 284 , t - 227 , 5 ] ; case 258 === t : return [ 285 , t - 258 , 0 ] ; default : e ( "invalid length: " + t ) } } var n , i , a = [ ] ; for ( n = 3 ; 258 >= n ; n ++ ) i = t ( n ) , a [ n ] = i [ 2 ] << 24 | i [ 1 ] << 16 | i [ 0 ] ; return a } ( ) ; p && new Uint32Array ( b ) ; var w = 0 , k = 1 ; o . prototype . g = function ( ) { for ( ; ! this . o ; ) { var t = s ( this , 3 ) ; switch ( 1 & t && ( this . o = ! 0 ) , t >>>= 1 ) { case 0 : var n = this . input , i = this . c , a = this . b , o = this . a , r = d , c = d , u = d , m = a . length , g = d ; switch ( this . d = this . f = 0 , r = n [ i ++ ] , r === d && e ( Error ( "invalid uncompressed block header: LEN (first byte)" ) ) , c = r , r = n [ i ++ ] , r === d && e ( Error ( "invalid uncompressed block header: LEN (second byte)" ) ) , c |= r << 8 , r = n [ i ++ ] , r === d && e ( Error ( "invalid uncompressed block header: NLEN (first byte)" ) ) , u = r , r = n [ i ++ ] , r === d && e ( Error ( "invalid uncompressed block header: NLEN (second byte)" ) ) , u |= r << 8 , c === ~ u && e ( Error ( "invalid uncompressed block header: length verify" ) ) , i + c > n . length && e ( Error ( "input buffer is broken" ) ) , this . k ) { case w : for ( ; o + c > a . length ; ) { if ( g = m - o , c -= g , p ) a . set ( n . subarray ( i , i + g ) , o ) , o += g , i += g ; else for ( ; g -- ; ) a [ o ++ ] = n [ i ++ ] ; this . a = o , a = this . e ( ) , o = this . a } break ; case k : for ( ; o + c > a . length ; ) a = this . e ( { t : 2 } ) ; break ; default : e ( Error ( "invalid inflate mode" ) ) } if ( p ) a . set ( n . subarray ( i , i + c ) , o ) , o += c , i += c ; else for ( ; c -- ; ) a [ o ++ ] = n [ i ++ ] ; this . c = i , this . a = o , this . b = a ; break ; case 1 : this . l ( R , B ) ; break ; case 2 : l ( this ) ; break ; default : e ( Error ( "unknown BTYPE: " + t ) ) } } return this . q ( ) } ; var $ , S , C = [ 16 , 17 , 18 , 0 , 8 , 7 , 9 , 6 , 10 , 5 , 11 , 4 , 12 , 3 , 13 , 2 , 14 , 1 , 15 ] , M = p ? new Uint16Array ( C ) : C , x = [ 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 13 , 15 , 17 , 19 , 23 , 27 , 31 , 35 , 43 , 51 , 59 , 67 , 83 , 99 , 115 , 131 , 163 , 195 , 227 , 258 , 258 , 258 ] , A = p ? new Uint16Array ( x ) : x , E = [ 0 , 0 , 0 , 0 , 0 , 0 , 0 , 0 , 1 , 1 , 1 , 1 , 2 , 2 , 2 , 2 , 3 , 3 , 3 , 3 , 4 , 4 , 4 , 4 , 5 , 5 , 5 , 5 , 0 , 0 , 0 ] , I = p ? new Uint8Array ( E ) : E , T = [ 1 , 2 , 3 , 4 , 5 , 7 , 9 , 13 , 17 , 25 , 33 , 49 , 65 , 97 , 129 , 193 , 257 , 385 , 513 , 769 , 1025 , 1537 , 2049 , 3073 , 4097 , 6145 , 8193 , 12289 , 16385 , 24577 ] , D = p ? new Uint16Array ( T ) : T , P = [ 0 , 0 , 0 , 0 , 1 , 1 , 2 , 2 , 3 , 3 , 4 , 4 , 5 , 5 , 6 , 6 , 7 , 7 , 8 , 8 , 9 , 9 , 10 , 10 , 11 , 11 , 12 , 12 , 13 , 13 ] , F = p ? new Uint8Array ( P ) : P , N = new ( p ? Uint8Array : Array ) ( 288 ) ; for ( $ = 0 , S = N . length ; S > $ ; ++ $ ) N [ $ ] = 143 >= $ ? 8 : 255 >= $ ? 9 : 279 >= $ ? 7 : 8 ; var O , U , R = a ( N ) , L = new ( p ? Uint8Array : Array ) ( 30 ) ; for ( O = 0 , U = L . length ; U > O ; ++ O ) L [ O ] = 5 ; var B = a ( L ) ; o . prototype . l = function ( e , t ) { var n = this . b , i = this . a ; this . r = e ; for ( var a , o , l , c , d = n . length - 258 ; 256 !== ( a = r ( this , e ) ) ; ) if ( 256 > a ) i >= d && ( this . a = i , n = this . e ( ) , i = this . a ) , n [ i ++ ] = a ; else for ( o = a - 257 , c = A [ o ] , 0 < I [ o ] && ( c += s ( this , I [ o ] ) ) , a = r ( this , t ) , l = D [ a ] , 0 < F [ a ] && ( l += s ( this , F [ a ] ) ) , i >= d && ( this . a = i , n = this . e ( ) , i = this . a ) ; c -- ; ) n [ i ] = n [ i ++ - l ] ; for ( ; 8 <= this . d ; ) this . d -= 8 , this . c -- ; this . a = i } , o . prototype . C = function ( e , t ) { var n = this . b , i = this . a ; this . r = e ; for ( var a , o , l , c , d = n . length ; 256 !== ( a = r ( this , e ) ) ; ) if ( 256 > a ) i >= d && ( n = this . e ( ) , d = n . length ) , n [ i ++ ] = a ; else for ( o = a - 257 , c = A [ o ] , 0 < I [ o ] && ( c += s ( this , I [ o ] ) ) , a = r ( this , t ) , l = D [ a ] , 0 < F [ a ] && ( l += s ( this , F [ a ] ) ) , i + c > d && ( n = this . e ( ) , d = n . length ) ; c
Ft [ Lt + Rt ] = Jt } Ot |= kt ( Dt , 8 - 2 * Lt ) , Nt |= kt ( Tt , 8 - 2 * Lt ) } $t |= kt ( Pt , 20 ) , Ct |= kt ( Ft , 20 ) , Y . X = $t , It . X = Ct , j . z = Et , j . Oa = Nt + 0 , j . ja = Nt | Ot , Y . Nb = ! j . ja + 0 } B = ! q . Ab } if ( ! B ) { l = yt ( e , "VP8_STATUS_NOT_ENOUGH_DATA" , "Premature end-of-file encountered." + e . i + " " + e . d ) ; break e } var en = e , tn = en . Ea , nn = ga , an = en . Ea , on = ha , sn = en . Ea , rn = fa ; if ( 0 < en . i ) { for ( var ln = m , ln = - 1 ; 16 > ln ; ++ ln ) ht ( tn , nn + ln * pa - 4 , tn , nn + ln * pa + 12 ) ; for ( ln = - 1 ; 8 > ln ; ++ ln ) ht ( an , on + ln * pa - 4 , an , on + ln * pa + 4 ) , ht ( sn , rn + ln * pa - 4 , sn , rn + ln * pa + 4 ) } else { for ( ln = 0 ; 16 > ln ; ++ ln ) tn [ nn + ln * pa - 1 ] = 129 ; for ( ln = 0 ; 8 > ln ; ++ ln ) an [ on + ln * pa - 1 ] = 129 , sn [ rn + ln * pa - 1 ] = 129 ; 0 < en . d && ( tn [ nn - 1 - pa ] = an [ on - 1 - pa ] = sn [ rn - 1 - pa ] = 129 ) } var cn = en . Xc , dn = 16 * + en . i , un = en . Sc , pn = 8 * + en . i , mn = en . Vc , gn = 8 * + en . i , hn = en . z , fn = m ; if ( 0 < en . d ) t ( tn , nn - pa , cn , dn , 16 ) , t ( an , on - pa , un , pn , 8 ) , t ( sn , rn - pa , mn , gn , 8 ) ; else if ( 0 == en . i ) { for ( i = 0 ; 21 > i ; ++ i ) tn [ nn - pa - 1 + i ] = 127 ; for ( i = 0 ; 9 > i ; ++ i ) an [ on - pa - 1 + i ] = 127 ; for ( i = 0 ; 9 > i ; ++ i ) sn [ rn - pa - 1 + i ] = 127 } if ( en . wa ) { var _n = nn - pa + 16 ; 0 < en . d && ( en . i >= en . Ma - 1 ? tn [ _n + 0 ] = tn [ _n + 1 ] = tn [ _n + 2 ] = tn [ _n + 3 ] = cn [ dn + 15 ] : t ( tn , _n + 0 , cn , dn + 16 , 4 ) ) ; for ( var vn = 0 ; 4 > vn ; ++ vn ) tn [ vn + _n + 4 * pa ] = tn [ vn + _n + 4 * pa ] = tn [ vn + _n + 8 * pa ] = tn [ vn + _n + 12 * pa ] = tn [ vn + _n + 0 ] ; for ( fn = 0 ; 16 > fn ; fn ++ ) { var yn = tn , bn = nn + fo [ fn ] ; lo [ en . Eb [ fn ] ] ( yn , bn ) , en . Oa & 1 << fn ? Ra ( hn , 16 * + fn , yn , bn , 0 ) : en . ja & 1 << fn && Ba ( hn , 16 * + fn , yn , bn ) } } else { var wn = gt ( en , en . Eb [ 0 ] ) ; if ( co [ wn ] ( tn , nn ) , en . ja ) for ( fn = 0 ; 16 > fn ; fn ++ ) yn = tn , bn = nn + fo [ fn ] , en . Oa & 1 << fn ? Ra ( hn , 16 * + fn , yn , bn , 0 ) : en . ja & 1 << fn && Ba ( hn , 16 * + fn , yn , bn ) } if ( wn = gt ( en , en . Tc ) , uo [ wn ] ( an , on ) , uo [ wn ] ( sn , rn ) , 983040 & en . ja ) { var kn = en . z , $n = 256 ; 983040 & en . Oa ? La ( kn , $n , an , on ) : ja ( kn , $n , an , on ) } if ( 15728640 & en . ja ) { var Sn = en . z , $n = 320 ; 15728640 & en . Oa ? La ( Sn , $n , sn , rn ) : ja ( Sn , $n , sn , rn ) } en . d < en . hb - 1 && ( t ( cn , dn , tn , nn + 15 * pa , 16 ) , t ( un , pn , an , on + 7 * pa , 8 ) , t ( mn , gn , sn , rn + 7 * pa , 8 ) ) ; var Cn = e ; if ( 0 < Cn . A ) { var Mn = Cn . M [ 1 + Cn . i ] , xn = Cn . La [ 1 + Cn . i ] . Nb , An = Cn . Zb [ Cn . Lb ] ; Cn . ga . oc && ( An += Cn . ga . Lc [ 0 ] , Cn . wa && ( An += Cn . ga . Gc [ 0 ] ) ) , An = 0 > An ? 0 : An > 63 ? 63 : An , Mn . zc = An , 0 < Cn . ga . kb && ( An = 4 < Cn . ga . kb ? An >> 2 : An >> 1 , An > 9 - Cn . ga . kb && ( An = 9 - Cn . ga . kb ) ) , Mn . yc = 1 > An ? 1 : An , Mn . ab = ( ! xn || Cn . wa ) + 0 } for ( var En = m , In = 8 * Cn . Ja * Cn . r , Tn = Cn . ca , Dn = Cn . da + 16 * Cn . i + 16 * Cn . Ja * Cn . H , Pn = Cn . aa , Fn = Cn . ba + 8 * Cn . i + In , Nn = Cn . ra , On = Cn . sa + 8 * Cn . i + In , En = 0 ; 16 > En ; ++ En ) t ( Tn , Dn + En * Cn . H , Cn . Ea , + ga + En * pa , 16 ) ; for ( En = 0 ; 8 > En ; ++ En ) t ( Pn , Fn + En * Cn . r , Cn . Ea , + ha + En * pa , 8 ) , t ( Nn , On + En * Cn . r , Cn . Ea , + fa + En * pa , 8 ) } var Un = e , Rn = s , Ln = 1 , Bn = Un . oa ; if ( Un . qb ) { var jn = Un . rc , Ln = Ln & WebPWorkerSync ( jn ) ; if ( p ( jn . a == OK ) , Ln ) { if ( Bn . N = Rn , Bn . ha = Un . Ja , Bn . d = Un . d , Bn . W = Un . W , Bn . W ) { var qn = Bn . M ; Bn . M = Un . M , Un . M = qn } WebPWorkerLaunch ( jn ) , ++ Un . Ja == Un . jb && ( Un . Ja = 0 ) } } else { Bn . d = Un . d , Bn . W = Un . W ; t : { var Hn = 1 , Vn = Un . oa , zn = mo [ Un . A ] , Wn = zn * Un . H , Gn = parseInt ( zn / 2 ) * Un . r , Kn = 16 * Vn . ha * Un . H , Yn = 8 * Vn . ha * Un . r , Zn = Un . ca , Xn = Un . da - Wn + Kn , Jn = Un . aa , Qn = Un . ba - Gn + Yn , ni = Un . ra , ai = Un . sa - Gn + Yn , oi = 0 == Vn . d , ri = ( Vn . d >= Un . hb - 1 ) + 0 , li = 16 * Vn . d , ci = 16 * ( Vn . d + 1 ) ; if ( Vn . W ) { var di = Un , ui = h , pi = di . oa . d ; for ( p ( di . oa . W ) , ui = di . lb ; ui < di . wb ; ++ ui ) { var mi = di , gi = ui , hi = pi , fi = mi . oa , _i = mi . H , vi = fi . M [ 1 + gi ] , yi = mi . ca , bi = mi . da + 16 * fi . ha * _i + 16 * gi , wi = vi . zc , ki = vi . yc , $i = 2 * wi + ki ; if ( 0 != wi ) if ( 1 == mi . A ) gi > 0 && Xa ( yi , bi , _i , $i + 4 ) , vi . ab && Qa ( yi , bi , _i , $i ) , hi > 0 && Za ( yi , bi , _i , $i + 4 ) , vi . ab && Ja ( yi , bi , _i , $i ) ; else { var Si = mi . r , Ci = mi . aa , Mi = mi . ba + 8 * fi . ha * Si + 8 * gi , xi = mi . ra , Ai = mi . sa + 8 * fi . ha * Si + 8 * gi , Ei = mi . Ac . fb ? wi >= 40 ? 2 : wi >= 15 ? 1 : 0 : wi >= 40 ? 3 : wi >= 20 ? 2 : wi >= 15 ? 1 : 0 ; gi > 0 && ( Ha ( yi , bi , _i , $i + 4 , ki , Ei ) , za ( Ci , Mi , xi , Ai , Si , $i + 4 , ki , Ei ) ) , vi . ab && ( Ga ( yi , bi , _i , $i , ki , Ei ) , Ya ( Ci , Mi , xi , Ai , Si , $i , ki , Ei ) ) , hi > 0 && ( qa ( yi , bi , _i , $i + 4 , ki , Ei ) , Va ( Ci , Mi , xi , Ai , Si , $i + 4 , ki , Ei ) ) , vi . ab && ( Wa ( yi , bi , _i , $i , ki , Ei ) , Ka ( Ci , Mi , xi , Ai , Si , $i , ki , Ei ) ) } } } if ( Rn . put ) { if ( oi ? ( Rn . y = Un . ca , Rn . D = Un . da + Kn , Rn . c = Un . aa , Rn . B = Un . ba + Yn , Rn . S = Un . ra , Rn . C = Un . sa + Yn ) : ( li -= zn , Rn . y = Zn , Rn . D = Xn , Rn . c = Jn , Rn . B = Qn , Rn . S = ni , Rn . C = ai ) , ri || ( ci -= zn ) , ci > Rn . K && ( ci = Rn . K ) , Un . Ga != g && ci > li && ( 0 == li ? ( Rn . p = U ( Un , li , ci - li ) , Rn . q = 0 ) : Rn . q = U ( Un , li , ci - li ) , Rn . p == g ) ) { Ln = yt ( Un , ii , "Could not decode alpha data." ) ; break t } if ( li < Rn . k ) { var Ii = Rn . k - li , li = Rn . k ; p ( ! ( 1 & Ii ) ) , Rn . D += Un . H * Ii , Rn . B += Un . r * ( Ii >> 1 ) , Rn . C += Un . r * ( Ii >> 1 ) , Rn . p != g && ( Rn . q += Rn . width * Ii ) } ci > li && ( Rn . D += Rn . t , Rn . B += Rn . t >> 1 , Rn . C += Rn . t >> 1 , Rn . p != g && ( Rn . q += Rn . t ) , Rn . w = li - Rn . k , Rn . m = Rn . Ka - Rn . t , Rn . h = ci - li , Hn = Rn . put ( Rn ) ) } Vn . ha + 1 == Un . jb && ! ri && ( t ( Un . ca , Un . da - Wn , Zn , Xn + 16 * Un . H , Wn ) , t ( Un . aa , Un . ba - Gn , Jn , Qn + 8 * Un . r , Gn ) , t ( Un . ra , Un . sa - Gn , ni , ai + 8 * Un . r , Gn ) ) , Ln = Hn } } if ( ! Ln ) { l = yt ( e
this . WebPGetDecoderVersion = this . Ld = function ( ) { return 512 } ; var $o = [ 0 , 1 , 2 , 3 , 6 , 4 , 5 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 6 , 7 , 0 ] , So = [ [ 173 , 148 , 140 , 0 ] , [ 176 , 155 , 140 , 135 , 0 ] , [ 180 , 157 , 141 , 134 , 130 , 0 ] , [ 254 , 254 , 243 , 230 , 196 , 177 , 153 , 140 , 133 , 130 , 129 , 0 ] ] , Co = [ 0 , 1 , 4 , 8 , 5 , 2 , 3 , 6 , 9 , 12 , 13 , 10 , 7 , 11 , 14 , 15 ] , Mo = u ( [ da , ua ] , "" ) ; c ( 4 , f ) ; var xo = [ [ 0 , 0 , 0 , 0 ] , [ 1 , 0 , 0 , 0 ] , [ 0 , 1 , 0 , 0 ] , [ 1 , 1 , 0 , 0 ] , [ 0 , 0 , 1 , 0 ] , [ 1 , 0 , 1 , 0 ] , [ 0 , 1 , 1 , 0 ] , [ 1 , 1 , 1 , 0 ] , [ 0 , 0 , 0 , 1 ] , [ 1 , 0 , 0 , 1 ] , [ 0 , 1 , 0 , 1 ] , [ 1 , 1 , 0 , 1 ] , [ 0 , 0 , 1 , 1 ] , [ 1 , 0 , 1 , 1 ] , [ 0 , 1 , 1 , 1 ] , [ 1 , 1 , 1 , 1 ] ] , Ao = 134480385 , Eo = 16 , Io = - 227 , To = 482 , Do = [ Ut , function ( e ) { return e } , function ( e , t , n ) { return t [ n + 0 ] } , function ( e , t , n ) { return t [ n + 1 ] } , function ( e , t , n ) { return t [ n - 1 ] } , function ( e , t , n ) { return Ft ( Ft ( e , t [ n + 1 ] ) , t [ n + 0 ] ) } , function ( e , t , n ) { return Ft ( e , t [ n - 1 ] ) } , function ( e , t , n ) { return Ft ( e , t [ n + 0 ] ) } , function ( e , t , n ) { return Ft ( t [ n - 1 ] , t [ n + 0 ] ) } , function ( e , t , n ) { return Ft ( t [ n + 0 ] , t [ n + 1 ] ) } , function ( e , t , n ) { return Ft ( Ft ( e , t [ n - 1 ] ) , Ft ( t [ n + 0 ] , t [ n + 1 ] ) ) } , function ( e , t , n ) { return 0 >= Math . abs ( ( e >> 24 & 255 ) - ( t [ n - 1 ] >> 24 & 255 ) ) - Math . abs ( ( t [ n + 0 ] >> 24 & 255 ) - ( t [ n - 1 ] >> 24 & 255 ) ) + ( Math . abs ( ( e >> 16 & 255 ) - ( t [ n - 1 ] >> 16 & 255 ) ) - Math . abs ( ( t [ n + 0 ] >> 16 & 255 ) - ( t [ n - 1 ] >> 16 & 255 ) ) ) + ( Math . abs ( ( e >> 8 & 255 ) - ( t [ n - 1 ] >> 8 & 255 ) ) - Math . abs ( ( t [ n + 0 ] >> 8 & 255 ) - ( t [ n - 1 ] >> 8 & 255 ) ) ) + ( Math . abs ( ( 255 & e ) - ( 255 & t [ n - 1 ] ) ) - Math . abs ( ( 255 & t [ n + 0 ] ) - ( 255 & t [ n - 1 ] ) ) ) ? t [ n + 0 ] : e } , function ( e , t , n ) { return ( Nt ( ( e >> 24 & 255 ) + ( t [ n + 0 ] >> 24 & 255 ) - ( t [ n - 1 ] >> 24 & 255 ) ) << 24 | Nt ( ( e >> 16 & 255 ) + ( t [ n + 0 ] >> 16 & 255 ) - ( t [ n - 1 ] >> 16 & 255 ) ) << 16 | Nt ( ( e >> 8 & 255 ) + ( t [ n + 0 ] >> 8 & 255 ) - ( t [ n - 1 ] >> 8 & 255 ) ) << 8 | Nt ( ( 255 & e ) + ( 255 & t [ n + 0 ] ) - ( 255 & t [ n - 1 ] ) ) ) >>> 0 } , function ( e , t , n ) { var i = t [ n - 1 ] ; return e = Ft ( e , t [ n + 0 ] ) , ( Ot ( e >> 24 & 255 , i >> 24 & 255 ) << 24 | Ot ( e >> 16 & 255 , i >> 16 & 255 ) << 16 | Ot ( e >> 8 & 255 , i >> 8 & 255 ) << 8 | Ot ( e >> 0 & 255 , i >> 0 & 255 ) ) >>> 0 } , Ut , Ut ] , Po = { Cc : f , Bc : f , Kc : f } , Fo = 16 , No = 16 , Oo = 16 , Uo = [ 2 , 3 , 7 ] , Ro = [ 3 , 3 , 11 ] , Lo = 0 , Bo = 1 , jo = 2 , qo = 3 , Ho = 4 , Vo = [ xi + Ai , xi , xi , xi , 40 ] , zo = 19 , Wo = [ 17 , 18 , 0 , 1 , 2 , 3 , 4 , 5 , 16 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 ] , Go = 120 , Ko = [ 24 , 7 , 23 , 25 , 40 , 6 , 39 , 41 , 22 , 26 , 38 , 42 , 56 , 5 , 55 , 57 , 21 , 27 , 54 , 58 , 37 , 43 , 72 , 4 , 71 , 73 , 20 , 28 , 53 , 59 , 70 , 74 , 36 , 44 , 88 , 69 , 75 , 52 , 60 , 3 , 87 , 89 , 19 , 29 , 86 , 90 , 35 , 45 , 68 , 76 , 85 , 91 , 51 , 61 , 104 , 2 , 103 , 105 , 18 , 30 , 102 , 106 , 34 , 46 , 84 , 92 , 67 , 77 , 101 , 107 , 50 , 62 , 120 , 1 , 119 , 121 , 83 , 93 , 17 , 31 , 100 , 108 , 66 , 78 , 118 , 122 , 33 , 47 , 117 , 123 , 49 , 63 , 99 , 109 , 82 , 94 , 0 , 116 , 124 , 65 , 79 , 16 , 32 , 98 , 110 , 48 , 115 , 125 , 81 , 95 , 64 , 114 , 126 , 97 , 111 , 80 , 113 , 127 , 96 , 112 ] , Yo = 1 << Eo - 1 , Zo = c ( 256 , 0 ) , Xo = c ( 256 , 0 ) , Jo = c ( 256 , _ ) , Qo = c ( 256 , _ ) , es = c ( To - Io , f ) , ts = c ( To - Io , f ) , ns = 0 , is = Array ( Jn ) , as = [ function ( e , t , n , i , a , o , s , r , l , c , d , u , p ) { gn ( e , t , n , i , a , o , s , r , l , c , d , u , p , Mt , 3 ) } , hn , function ( e , t , n , i , a , o , s , r , l , c , d , u , p ) { gn ( e , t , n , i , a , o , s , r , l , c , d , u , p , It , 3 ) } , fn , _n , vn , function ( e , t , n , i , a , o , s , r , l , c , d , u , p ) { gn ( e , t , n , i , a , o , s , r , l , c , d , u , p , xt , 2 ) } , hn , fn , _n , vn ] ; this . Hd = function ( e , t , n , i ) { return Nn ( Ln , e , t , n , i ) } , this . Id = function ( e , t , n , i ) { return Nn ( Bn , e , t , n , i ) } , this . Jd = function ( e , t , n , i ) { return Nn ( Vn , e , t , n , i ) } , this . Ed = function ( e , t , n , i ) { return Nn ( Hn , e , t , n , i ) } , this . Fd = function ( e , t , n , i ) { return Nn ( jn , e , t , n , i ) } , this . Gd = function ( e , t , n , i ) { return Nn ( qn , e , t , n , i ) } , this . WebPDecode = this . Dd = function ( t , n , i ) { var a = e ( ui ) , o = "VP8StatusCode" ; return i == g ? ni : ( o = On ( t , [ 0 ] , [ n ] , i . input ) , o != ei ? o == ri ? ii : o : ( a . j = i . j , a . Qa = i . Qa , o = Fn ( t , 0 , [ n ] , a ) ) ) } } } ( ) ; var _logTimer = ( new Date ) . getTime ( ) ; ! function ( e ) { function t ( ) { return { shortIndexes : { } , fullTexts : { } } } function n ( e ) { var t = "%" == e . charAt ( 0 ) ; return e = e . replace ( s , " " ) . replace ( r , "" ) , e = e . replace ( /[^A-Za-z0-9]/g , function ( e ) { return Config . LatinizeMap [ e ] || e } ) , e = e . toLowerCase ( ) , t && ( e = "%" + e ) , e } function i ( e ) { return e && e . toLowerCase ( ) || "" } function a ( e , t , i ) { if ( void 0 !== i . fullTexts [ e ] ) return ! 1 ; if ( t = n ( t ) , ! t . length ) return ! 1 ; var a = i . shortIndexes ; i . fullTexts [ e ] = t , angular . forEach ( t . split ( " " ) , function ( t ) { var n , i , o = Math . min ( t . length , 3 ) ; for ( i = 1 ; o >= i ; i ++ ) n = t . substr ( 0 , i ) , void 0 === a [ n ] ? a [ n ] = [ e ] : a [ n ] . push ( e ) } ) } function o ( e , t ) { var i = t . shortIndexes , a = t . fullTexts ; e = n ( e ) ; var o , s , r , l , c , d = e . split ( " " ) , u = ! 1 ; for ( s = 0 ; s < d . length ; s ++ ) { if ( o = i [ d [ s ] . substr ( 0 , 3 ) ] , ! o ) { u = [ ] ; break } ( u === ! 1 || u . length > o . length ) && ( u = o ) } for ( o = { } , r = 0 ; r < u . length ; r ++ ) { for ( c = ! 0 , l = a [ u [ r ] ] , s = 0 ; s < d . length ; s ++ ) if ( - 1 == l . indexOf ( d [ s ] ) ) { c = ! 1 ; break } c && ( o [ u [ r ] ] = ! 0 ) } return o } var s = /[`~!@#$%^&*()\-_=+\[\]\\|{}'";:\/?.>,<\s]+/g , r = /^\s+|\s$/g ; e . SearchIndexManager = { createIndex : t , indexObject : a , cleanSearchText : n , cleanUsername : i , search : o } } ( window ) , TLSerialization . prototype . cr
break ; case "messageEntityHashtag" : var b = ! a . noLinks && C [ r ] ; if ( ! b ) { p = ! 0 ; break } var $ = u . substr ( 1 ) ; _ . push ( "<a " , l ? ' target="_blank" ' : "" , 'href="' , b . replace ( "{1}" , encodeURIComponent ( $ ) ) , '">' , encodeEntities ( u ) , "</a>" ) ; break ; case "messageEntityEmail" : if ( a . noLinks ) { p = ! 0 ; break } _ . push ( '<a href="' , encodeEntities ( "mailto:" + u ) , '" target="_blank">' , encodeEntities ( u ) , "</a>" ) ; break ; case "messageEntityUrl" : case "messageEntityTextUrl" : if ( a . noLinks ) { p = ! 0 ; break } var g = d . url || u ; g . match ( /^https?:\/\//i ) || ( g = "http://" + g ) ; var S ; if ( "messageEntityTextUrl" == d . _ ) g = "tg://unsafe_url?url=" + encodeURIComponent ( g ) ; else if ( S = g . match ( /^https?:\/\/telegram\.me\/(.+)/ ) ) { var x = S [ 1 ] . split ( "/" ) ; switch ( x [ 0 ] ) { case "joinchat" : g = "tg://join?invite=" + x [ 1 ] ; break ; case "addstickers" : g = "tg://addstickers?set=" + x [ 1 ] ; break ; default : if ( ! x [ 1 ] ) { var A = x [ 0 ] . split ( "?" ) ; g = "tg://resolve?domain=" + A [ 0 ] + ( A [ 1 ] ? "&" + A [ 1 ] : "" ) } } } _ . push ( '<a href="' , encodeEntities ( g ) , '" target="_blank">' , s ( u , d . nested , a ) , "</a>" ) ; break ; case "messageEntityLinebreak" : _ . push ( a . noLinebreaks ? " " : "<br/>" ) ; break ; case "messageEntityEmoji" : _ . push ( '<span class="emoji emoji-' , d . coords . category , "-" , y * d . coords . column , "-" , y * d . coords . row , '" ' , 'title="' , d . title , '">' , ":" , d . title , ":</span>" ) , c = ! 0 ; break ; case "messageEntityBotCommand" : if ( a . noLinks || a . noCommands || l ) { p = ! 0 ; break } var E , I , T = u . substr ( 1 ) ; - 1 != ( I = T . indexOf ( "@" ) ) ? ( E = T . substr ( I + 1 ) , T = T . substr ( 0 , I ) ) : E = a . fromBot , _ . push ( '<a href="' , encodeEntities ( "tg://bot_command?command=" + encodeURIComponent ( T ) + ( E ? "&bot=" + encodeURIComponent ( E ) : "" ) ) , '">' , encodeEntities ( u ) , "</a>" ) ; break ; case "messageEntityBold" : _ . push ( "<strong>" , s ( u , d . nested , a ) , "</strong>" ) ; break ; case "messageEntityItalic" : _ . push ( "<em>" , s ( u , d . nested , a ) , "</em>" ) ; break ; case "messageEntityCode" : _ . push ( "<code>" , encodeEntities ( u ) , "</code>" ) ; break ; case "messageEntityPre" : _ . push ( "<pre><code" , d . language ? ' class="language-' + encodeEntities ( d . language ) + '"' : "" , ">" , encodeEntities ( u ) , "</code></pre>" ) ; break ; default : p = ! 0 } v = d . offset + ( p ? 0 : d . length ) } if ( _ . push ( encodeEntities ( n . substr ( v ) ) ) , n = t ( _ . join ( "" ) ) , ! a . nested && ( c || a . hasNested ) ) { n = n . replace ( /\ufe0f|️|�|‍/g , "" , n ) ; var D = 18 == y ? "" : " emoji-w" + y ; n = n . replace ( /<span class="emoji emoji-(\d)-(\d+)-(\d+)"(.+?)<\/span>/g , '<span class="emoji ' + D + ' emoji-spritesheet-$1" style="background-position: -$2px -$3px;" $4</span>' ) } return e . trustAs ( "html" , n ) } function l ( e ) { for ( var t = e . length , n = e . split ( "(" ) . length - 1 , i = e . split ( ")" ) . length - 1 ; i > n && ")" === e . charAt ( t - 1 ) ; ) e = e . substr ( 0 , t - 1 ) , i -- , t -- ; return n > i && ( e = e . replace ( /\)+$/ , "" ) ) , e } function c ( e , t ) { if ( g ) return e ; if ( ! e || ! e . length ) return "" ; t = t || { } , e = e . replace ( /\ufe0f/g , "" , e ) ; for ( var n , i , a = e , e = [ ] ; n = a . match ( k ) ; ) e . push ( a . substr ( 0 , n . index ) ) , e . push ( n [ 8 ] ? ( d = u [ n [ 8 ] ] ) && ( i = p [ d ] [ 1 ] [ 0 ] ) ? ":" + i + ":" : n [ 0 ] : n [ 0 ] ) , a = a . substr ( n . index + n [ 0 ] . length ) ; return e . push ( a ) , e . join ( "" ) } var d , u = { } , p = Config . Emoji , m = 18 , g = - 1 != navigator . userAgent . search ( /OS X|iPhone|iPad|iOS|Android/i ) , h = "\\u0023\\u20E3|\\u00a9|\\u00ae|\\u203c|\\u2049|\\u2139|[\\u2194-\\u2199]|\\u21a9|\\u21aa|\\u231a|\\u231b|\\u23e9|[\\u23ea-\\u23ec]|\\u23f0|\\u24c2|\\u25aa|\\u25ab|\\u25b6|\\u2611|\\u2614|\\u26fd|\\u2705|\\u2709|[\\u2795-\\u2797]|\\u27a1|\\u27b0|\\u27bf|\\u2934|\\u2935|[\\u2b05-\\u2b07]|\\u2b1b|\\u2b1c|\\u2b50|\\u2b55|\\u3030|\\u303d|\\u3297|\\u3299|[\\uE000-\\uF8FF\\u270A-\\u2764\\u2122\\u25C0\\u25FB-\\u25FE\\u2615\\u263a\\u2648-\\u2653\\u2660-\\u2668\\u267B\\u267F\\u2693\\u261d\\u26A0-\\u26FA\\u2708\\u2702\\u2601\\u260E]|[\\u2600\\u26C4\\u26BE\\u23F3\\u2764]|\\uD83D[\\uDC00-\\uDFFF]|\\uD83C[\\uDDE8-\\uDDFA<EFBFBD> ]\\uD83C[\\uDDEA-\\uDDFA<EFBFBD> ]|[0-9]\\u20e3|\\uD83C[\\uDC00-\\uDFFF]" ; for ( d in p ) u [ p [ d ] [ 0 ] ] = d ; var f = " a - z \ \u00c0 - \ \u00d6 \ \u00d8 - \ \u00f6 \ \u00f8 - \ \u00ff \ \u0100 - \ \u024f \ \u0253 \ \u0254 \ \u0256 \ \u0257 \ \u0259 \ \u025b \ \u0263 \ \u0268 \ \u026f \ \u0272 \ \u0289 \ \u028b \ \u02bb \ \u0300 - \ \u036f \ \u1e00 - \ \u1eff \ \u0400 - \ \u04ff \ \u0500 - \ \u0527 \ \u2de0 - \ \u2dff \ \ua640 - \ \ua69f \ \u0591 - \ \u05bf \ \u05c1 - \ \u05c2 \ \u05c4 - \ \u05c5 \ \u05c7 \ \u05d0 - \ \u05ea \ \u05f0 - \ \u05f4 \ \ufb1d - \ \ufb28 \ \ufb2a - \ \ufb36 \ \ufb38 - \ \ufb3c \ \ufb3e \ \ufb40 - \ \ufb41 \ \ufb43 - \ \ufb44 \ \ufb46 - \ \ufb4f \ \u0610 - \ \u061a \ \u0620 - \ \u065f \ \u066e - \ \u06d3 \ \u06d5 - \ \u06dc \ \u06de - \ \u06e8 \ \u06ea - \ \u06ef \ \u06fa - \ \ u0
var r = this . sentMessages [ e . bad _msg _id ] ; if ( ! r || r . seq _no != e . bad _msg _seqno ) throw console . log ( e . bad _msg _id , e . bad _msg _seqno ) , new Error ( "Bad msg notification for invalid message" ) ; if ( 16 == e . error _code || 17 == e . error _code ) { t . applyServerTime ( bigStringInt ( n ) . shiftRight ( 32 ) . toString ( 10 ) ) && ( console . log ( dT ( ) , "Update session" ) , this . updateSession ( ) ) ; var l = this . updateSentMessage ( e . bad _msg _id ) ; this . pushResend ( l . msg _id ) , this . ackMessage ( n ) } break ; case "message" : this . serverMessages . push ( e . msg _id ) , this . processMessage ( e . body , e . msg _id , a ) ; break ; case "new_session_created" : this . ackMessage ( n ) , this . processMessageAck ( e . first _msg _id ) , this . applyServerSalt ( e . server _salt ) ; var c = this ; i . get ( "dc" ) . then ( function ( t ) { t == c . dcID && ! c . upload && g && g ( e ) } ) ; break ; case "msgs_ack" : for ( var s = 0 ; s < e . msg _ids . length ; s ++ ) this . processMessageAck ( e . msg _ids [ s ] ) ; break ; case "msg_detailed_info" : if ( ! this . sentMessages [ e . msg _id ] ) { this . ackMessage ( e . answer _msg _id ) ; break } case "msg_new_detailed_info" : this . reqResendMessage ( e . answer _msg _id ) ; break ; case "msgs_state_info" : if ( this . ackMessage ( e . answer _msg _id ) , this . lastResendReq && this . lastResendReq . req _msg _id == e . req _msg _id && this . pendingResends . length ) { var s , d , u ; for ( s = 0 ; s < this . lastResendReq . resend _msg _ids . length ; s ++ ) d = this . lastResendReq . resend _msg _ids [ s ] , u = this . pendingResends . indexOf ( d ) , - 1 != u && this . pendingResends . splice ( u , 1 ) } break ; case "rpc_result" : this . ackMessage ( n ) ; var p = e . req _msg _id , r = this . sentMessages [ p ] ; if ( this . processMessageAck ( p ) , r ) { var m = r . deferred ; if ( "rpc_error" == e . result . _ ) { var h = this . processError ( e . result ) ; console . log ( dT ( ) , "Rpc error" , h ) , m && m . reject ( h ) } else { if ( m ) { if ( Config . Modes . debug ) console . log ( dT ( ) , "Rpc response" , e . result ) ; else { var f = e . result . _ ; f || ( f = e . result . length > 5 ? "[.." + e . result . length + "..]" : e . result ) , console . log ( dT ( ) , "Rpc response" , f ) } r . deferred . resolve ( e . result ) } r . isAPI && ( this . connectionInited = ! 0 ) } delete this . sentMessages [ p ] } break ; default : this . ackMessage ( n ) , g && g ( e ) } } , { getNetworker : function ( e , t , n , i ) { return new u ( e , t , n , i ) } , setUpdatesProcessor : function ( e ) { g = e } , stopAll : m , startAll : p } } ] ) , angular . module ( "izhukov.mtproto.wrapper" , [ "izhukov.utils" , "izhukov.mtproto" ] ) . factory ( "MtpApiManager" , [ "Storage" , "MtpAuthorizer" , "MtpNetworkerFactory" , "MtpSingleInstanceService" , "AppRuntimeManager" , "ErrorService" , "qSync" , "$rootScope" , "$q" , "TelegramMeWebService" , function ( e , t , n , i , a , o , s , r , l , c ) { function d ( e ) { _ !== e && ( _ = e , c . setAuthorized ( _ ) ) } function u ( t , n ) { var i = angular . extend ( { dcID : t } , n ) ; e . set ( { dc : t , user _auth : i } ) , d ( ! 0 ) , r . $broadcast ( "user_auth" , i ) , w = t } function p ( ) { for ( var t = [ ] , n = 1 ; 5 >= n ; n ++ ) t . push ( "dc" + n + "_auth_key" ) ; return e . get . apply ( e , t ) . then ( function ( n ) { for ( var i = [ ] , a = 0 ; a < n . length ; a ++ ) n [ a ] && i . push ( g ( "auth.logOut" , { } , { dcID : a + 1 } ) ) ; return l . all ( i ) . then ( function ( ) { e . remove ( "dc" , "user_auth" ) , w = ! 1 , d ( ! 1 ) } , function ( n ) { e . remove . apply ( t ) , e . remove ( "dc" , "user_auth" ) , w = ! 1 , n . handled = ! 0 , d ( ! 1 ) } ) } ) } function m ( i , a ) { a = a || { } ; var o = a . fileUpload || a . fileDownload ? y : v ; if ( ! i ) throw new Exception ( "get Networker without dcID" ) ; if ( void 0 !== o [ i ] ) return s . when ( o [ i ] ) ; var r = "dc" + i + "_auth_key" , c = "dc" + i + "_server_salt" ; return e . get ( r , c ) . then ( function ( s ) { if ( void 0 !== o [ i ] ) return o [ i ] ; var d = s [ 0 ] , u = s [ 1 ] ; if ( d && 512 == d . length ) { var p = bytesFromHex ( d ) , m = bytesFromHex ( u ) ; return o [ i ] = n . getNetworker ( i , p , m , a ) } return a . createNetworker ? t . auth ( i ) . then ( function ( t ) { var s = { } ; return s [ r ] = bytesToHex ( t . authKey ) , s [ c ] = bytesToHex ( t . serverSalt ) , e . set ( s ) , o [ i ] = n . getNetworker ( i , t . authKey , t . serverSalt , a ) } , function ( e ) { return console . log ( "Get networker error" , e , e . stack ) , l . reject ( e ) } ) : l . reject ( { type : "AUTH_KEY_EMPTY" , code : 401 } ) } ) } function g ( t , n , i ) { i = i || { } ; var s , r , c = l . defer ( ) , u = function ( e ) { e ? angular . isObject ( e ) || ( e = { message : e } ) : e = { type : "ERROR_EMPTY" } , c . reject ( e ) , i . noErrorBox || ( e . input = t , e . stack = e . originalError && e . originalError . stack || e . stack || ( new Error ) . stack , setTimeout ( function ( ) { e . handled || ( 401 == e . code ? p ( ) [ "finally" ] ( function ( ) { "http:" != location . protocol || Config . Modes . http || - 1 == Config . App . domains . indexOf ( location . hostname ) ? ( location . hash = "/login" , a . reload ( ) ) : location . href = location . href . replace ( /^http:/ , "https:" ) } ) : o . show ( { error : e } ) , e . handled = ! 0 ) } , 100 ) ) } , h = ( new Error ) . stack ; if ( ! h ) try { window . unexistingFunction ( ) } catch ( f ) { h = f . stack || ""
} else s . width = 100 , s . height = 100 ; return n . thumb = s , n } function m ( e ) { var n = p ( e ) , i = $ ( window ) . width ( ) - ( Config . Mobile ? 0 : 32 ) , a = $ ( t ) . height ( ) - ( Config . Mobile ? 0 : 116 ) ; ! Config . Mobile && i > 800 && ( i -= 208 ) ; var o = l ( n , i , a ) , s = { placeholder : "img/placeholders/PhotoThumbModal.gif" } ; if ( s . width = i , s . height = a , o && "photoSizeEmpty" != o . _ ) { var r = calcImageInBox ( o . w , o . h , i , a , ! 0 ) ; s . width = r . w , s . height = r . h , s . modalWidth = Math . max ( s . width , Math . min ( 400 , i ) ) , s . location = o . location , s . size = o . size } return n . full = s , n } function g ( t , i ) { if ( ! t || "0" === t ) return ! 1 ; var a = n . $new ( ! 0 ) ; a . photoID = t ; var o = "PhotoModalController" ; i && i . p > 0 ? ( o = "UserpicModalController" , a . userID = i . p ) : i && i . p < 0 ? ( o = "ChatpicModalController" , a . chatID = - i . p ) : i && i . m > 0 && ( a . messageID = i . m , i . w && ( a . webpageID = i . w ) ) ; e . open ( { templateUrl : templateUrl ( "photo_modal" ) , windowTemplateUrl : templateUrl ( "media_modal_layout" ) , controller : o , scope : a , windowClass : "photo_modal_window" } ) } function h ( e ) { var n = f [ e ] , i = "jpg" , o = "image/jpeg" , r = "photo" + e + "." + i , c = Math . max ( screen . width || 0 , $ ( window ) . width ( ) - 36 , 800 ) , d = Math . max ( screen . height || 0 , $ ( t ) . height ( ) - 150 , 800 ) , u = l ( n , c , d ) , p = { _ : "inputFileLocation" , volume _id : u . location . volume _id , local _id : u . location . local _id , secret : u . location . secret } ; s . chooseSave ( r , i , o ) . then ( function ( e ) { e && a . downloadFile ( u . location . dc _id , p , u . size , { mime : o , toFileEntry : e } ) . then ( function ( ) { } , function ( e ) { console . log ( "photo download failed" , e ) } ) } , function ( ) { var e = a . getCachedFile ( p ) ; return e ? s . download ( e , o , r ) : void a . downloadFile ( u . location . dc _id , p , u . size , { mime : o } ) . then ( function ( e ) { s . download ( e , o , r ) } , function ( e ) { console . log ( "photo download failed" , e ) } ) } ) } var f = { } , _ = $ ( window ) . width ( ) , v = $ ( window ) . height ( ) ; return n . preloadPhoto = d , n . openPhoto = g , { savePhoto : r , preloadPhoto : d , getUserPhotos : c , getPhoto : u , choosePhotoSize : l , wrapForHistory : p , wrapForFull : m , openPhoto : g , downloadPhoto : h } } ] ) . service ( "AppWebPagesManager" , [ "$modal" , "$sce" , "$window" , "$rootScope" , "MtpApiManager" , "AppPhotosManager" , "RichTextProcessor" , function ( e , t , n , i , a , o , s ) { function r ( e , t , n ) { e . photo && "photo" === e . photo . _ ? o . savePhoto ( e . photo , n ) : delete e . photo , e . rTitle = s . wrapRichText ( e . title || e . author , { noLinks : ! 0 , noLinebreaks : ! 0 } ) ; var a = "" ; if ( "GitHub" == e . site _name ) { var r = e . url . match ( /(https?:\/\/github\.com\/[^\/]+\/[^\/]+)/ ) ; r && ( a = r [ 0 ] + "/issues/{1}" ) } if ( e . rDescription = s . wrapRichText ( e . description , { contextSite : e . site _name || "external" , contextHashtag : a } ) , t && ( void 0 === p [ e . id ] && ( p [ e . id ] = { } ) , p [ e . id ] [ t ] = ! 0 , u [ e . id ] = e ) , void 0 === u [ e . id ] ? u [ e . id ] = e : safeReplaceObject ( u [ e . id ] , e ) , ! t && void 0 !== p [ e . id ] ) { var l = [ ] ; angular . forEach ( p [ e . id ] , function ( e , t ) { l . push ( t ) } ) , i . $broadcast ( "webpage_updated" , { id : e . id , msgs : l } ) } } function l ( t , n ) { var a = i . $new ( ! 0 ) ; a . webpageID = t , a . messageID = n , e . open ( { templateUrl : templateUrl ( "embed_modal" ) , windowTemplateUrl : templateUrl ( "media_modal_layout" ) , controller : "EmbedModalController" , scope : a , windowClass : "photo_modal_window" } ) } function c ( e ) { var t = angular . copy ( u [ e ] ) || { _ : "webPageEmpty" } ; return t . photo && t . photo . id && ( t . photo = o . wrapForHistory ( t . photo . id , { website : "photo" != t . type && "video" != t . type } ) ) , t } function d ( e ) { var i = c ( e ) ; if ( ! i . embed _url ) return i ; var a = $ ( window ) . width ( ) - ( Config . Mobile ? 0 : 10 ) , o = $ ( n ) . height ( ) - ( Config . Mobile ? 92 : 150 ) ; ! Config . Mobile && a > 800 && ( a -= 208 ) ; var s = { width : a , height : o } ; if ( i . embed _width && i . embed _height ) { var r = calcImageInBox ( i . embed _width , i . embed _height , a , o ) ; s . width = r . w , s . height = r . h } else s . height = s . width = Math . min ( a , o ) ; var l = Config . Modes . chrome _packed ? "webview" : "iframe" , d = "iframe" != i . embed _type ? i . embed _type || "text/html" : "text/html" , u = "<" + l + ' src="' + encodeEntities ( i . embed _url ) + '" type="' + encodeEntities ( d ) + '" frameborder="0" border="0" webkitallowfullscreen mozallowfullscreen allowfullscreen width="' + s . width + '" height="' + s . height + '" style="width: ' + s . width + "px; height: " + s . height + 'px;"></' + l + ">" ; return s . html = t . trustAs ( "html" , u ) , i . full = s , i } var u = { } , p = { } ; return i . $on ( "apiUpdate" , function ( e , t ) { switch ( t . _ ) { case "updateWebPage" : r ( t . webpage ) } } ) , { saveWebPage : r , openEmbed : l , wrapForFull : d , wrapForHistory : c } } ] ) . service ( "AppVideoManager" , [ "$sce" , "$rootScope" , "$modal" , "$window" , "MtpApiFileManager" , "AppUsersManager" , "FileManager" , "qSync" , function ( e , t , n , i , a , o , s , r ) { function l ( e , t ) { t && angular . extend ( e , t ) , h [ e . id ] =
} , function ( ) { ConfigStorage . noPrefix ( ) , t . set ( { layout _width : i } ) , l = ! 1 } ) ) } ) ) } } function s ( ) { r || Config . Navigator . mobile || ( r = ! 0 , o ( ) , $ ( i ) . on ( "resize" , o ) ) } var r = ! 1 , l = ! 1 ; return { start : s , switchLayout : a } } ] ) . service ( "TelegramMeWebService" , [ "Storage" , function ( e ) { function t ( t ) { return n ? ! 1 : void e . get ( "tgme_sync" ) . then ( function ( n ) { var i = tsNow ( ! 0 ) ; if ( t && n && n . canRedirect == t && n . ts + 86400 > i ) return ! 1 ; e . set ( { tgme _sync : { canRedirect : t , ts : i } } ) ; var a = $ ( "<script>" ) . appendTo ( "body" ) . on ( "load error" , function ( ) { a . remove ( ) } ) . attr ( "src" , "//telegram.me/_websync_?authed=" + ( t ? "1" : "0" ) ) } ) } var n = Config . Modes . test || - 1 == Config . App . domains . indexOf ( location . hostname ) || "http:" != location . protocol && "https:" != location . protocol || "https:" == location . protocol && "web.telegram.org" != location . hostname ; return { setAuthorized : t } } ] ) . service ( "LocationParamsService" , [ "$rootScope" , "$routeParams" , "AppPeersManager" , "AppUsersManager" , "AppMessagesManager" , "PeersSelectService" , "AppStickersManager" , "ErrorService" , function ( e , t , n , i , a , o , s , r ) { function l ( ) { var e = t . tgaddr ; if ( e ) { try { e = decodeURIComponent ( e ) } catch ( n ) { } var i = e . match ( m ) ; i && c ( i [ 3 ] ) } } function c ( t , l ) { var c ; if ( c = t . match ( /^resolve\?domain=(.+?)(?:&(start|startgroup)=(.+))?$/ ) ) return n . resolveUsername ( c [ 1 ] ) . then ( function ( t ) { return t > 0 && i . isBot ( t ) && "startgroup" == c [ 2 ] ? ( o . selectPeer ( { confirm _type : "INVITE_TO_GROUP" , noUsers : ! 0 } ) . then ( function ( i ) { var o = n . getPeerID ( i ) , s = 0 > o ? - o : 0 ; a . startBot ( t , s , c [ 3 ] ) . then ( function ( ) { e . $broadcast ( "history_focus" , { peerString : i } ) } ) } ) , ! 0 ) : void e . $broadcast ( "history_focus" , { peerString : n . getPeerString ( t ) , startParam : c [ 3 ] } ) } ) , ! 0 ; if ( c = t . match ( /^join\?invite=(.+)$/ ) ) return a . openChatInviteLink ( c [ 1 ] ) , ! 0 ; if ( c = t . match ( /^addstickers\?set=(.+)$/ ) ) return s . openStickersetLink ( c [ 1 ] ) , ! 0 ; if ( c = t . match ( /^msg_url\?url=([^&]+)(?:&text=(.*))?$/ ) ) return o . selectPeer ( ) . then ( function ( ) { var e = decodeURIComponent ( c [ 1 ] ) , t = c [ 2 ] ? decodeURIComponent ( c [ 2 ] ) : "" ; p ( e , t ) } ) , ! 0 ; if ( l && ( c = t . match ( /^unsafe_url\?url=([^&]+)/ ) ) ) { var t = decodeURIComponent ( c [ 1 ] ) ; return r . confirm ( { type : "JUMP_EXT_URL" , url : t } ) . then ( function ( ) { window . open ( t , "_blank" ) } ) , ! 0 } if ( l && ( c = t . match ( /^bot_command\?command=(.+?)(?:&bot=(.+))?$/ ) ) ) { var d = e . selectedPeerID , u = "/" + c [ 1 ] ; return 0 > d && c [ 2 ] && ( u += "@" + c [ 2 ] ) , a . sendText ( d , u ) , e . $broadcast ( "history_focus" , { peerString : n . getPeerString ( d ) } ) , ! 0 } return ! 1 } function d ( t , s ) { if ( console . log ( dT ( ) , "Received activity" , t , s ) , "share" == t && s . url ) p ( s . url , "" ) ; else if ( "view" == t && s . url ) { var l = s . url . match ( m ) ; l && c ( l [ 3 ] ) } else if ( "webrtc-call" == t && s . contact ) { var d = s . contact , u = [ ] ; if ( void 0 != d . tel ) for ( var g = 0 ; g < d . tel . length ; g ++ ) u . push ( d . tel [ g ] . value ) ; var h = ( d . givenName || [ ] ) . join ( " " ) , f = ( d . familyName || [ ] ) . join ( " " ) ; u . length && i . importContact ( u [ 0 ] , h , f ) . then ( function ( t ) { if ( t ) { var i = n . getPeerString ( t ) ; e . $broadcast ( "history_focus" , { peerString : i } ) } else r . show ( { error : { code : 404 , type : "USER_NOT_USING_TELEGRAM" } } ) } ) } else "share" === t && s . blobs && s . blobs . length > 0 && o . selectPeers ( { confirm _type : "EXT_SHARE_PEER" } ) . then ( function ( t ) { angular . forEach ( t , function ( e ) { var t = n . getPeerID ( e ) ; angular . forEach ( s . blobs , function ( e ) { a . sendFile ( t , e , { isMedia : ! 0 } ) } ) } ) , 1 == t . length && e . $broadcast ( "history_focus" , { peerString : t [ 0 ] } ) } ) } function u ( ) { if ( ! g ) { if ( g = ! 0 , "registerProtocolHandler" in navigator ) { try { navigator . registerProtocolHandler ( "tg" , "#im?tgaddr=%s" , "Telegram Web" ) } catch ( t ) { } try { navigator . registerProtocolHandler ( "web+tg" , "#im?tgaddr=%s" , "Telegram Web" ) } catch ( t ) { } } window . navigator . mozSetMessageHandler && ( console . log ( dT ( ) , "Set activity message handler" ) , window . navigator . mozSetMessageHandler ( "activity" , function ( e ) { d ( e . source . name , e . source . data ) } ) ) , $ ( document ) . on ( "click" , function ( e ) { var t = e . target ; if ( t && "A" == t . tagName && ! t . onclick && ! t . onmousedown ) { var n = $ ( t ) . attr ( "href" ) || t . href || "" , i = n . match ( m ) ; if ( i && c ( i [ 3 ] , ! 0 ) ) return cancelEvent ( e ) } } ) , e . $on ( "$routeUpdate" , l ) , l ( ) } } function p ( t , n ) { o . selectPeer ( ) . then ( function ( i ) { e . $broadcast ( "history_focus" , { peerString : i , attachment : { _ : "share_url" , url : t , text : n } } ) } ) } var m = /^(web\+)?tg:(\/\/)?(.+)/ , g = ! 1 ; return { start : u , shareUrl : p } } ] ) , angular . module ( "myApp.controllers" , [ "myApp.i18n" ] ) . controller ( "AppWelcomeController" , [ "$scope" , "$location" , "MtpApiManager" , "ErrorService" , " ChangelogNotifyS
} ) , w ( ) , k ( ) ) } } ) , o && e . $broadcast ( "messages_regroup" ) , s && e . $broadcast ( "messages_unread_after" ) } ) , e . $on ( "history_delete" , function ( t , n ) { var i = v ( n . peerID ) ; if ( i ) { var a , o = [ ] ; for ( a = 0 ; a < i . messages . length ; a ++ ) n . msgs [ i . messages [ a ] . mid ] || o . push ( i . messages [ a ] ) ; i . messages = o , l . regroupWrappedHistory ( i . messages ) , e . $broadcast ( "messages_regroup" ) , n . peerID == e . curDialog . peerID && ( e . state . empty = ! o . length , w ( ) ) } } ) , e . $on ( "dialog_flush" , function ( t , n ) { var i = v ( n . peerID ) ; i && ( i . messages = [ ] , i . ids = [ ] , n . peerID == e . curDialog . peerID && ( e . state . empty = ! 0 , w ( ) ) ) } ) , e . $on ( "history_focus" , function ( ) { e . historyFilter . mediaType && B ( ) } ) , e . $on ( "apiUpdate" , function ( t , i ) { switch ( i . _ ) { case "updateUserTyping" : case "updateChatUserTyping" : s . forceUserOnline ( i . user _id ) , s . hasUser ( i . user _id ) && e . curDialog . peerID == ( "updateUserTyping" == i . _ ? i . user _id : - i . chat _id ) && ( - 1 == e . historyState . typing . indexOf ( i . user _id ) && e . historyState . typing . push ( i . user _id ) , n . cancel ( st [ i . user _id ] ) , st [ i . user _id ] = n ( function ( ) { var t = e . historyState . typing . indexOf ( i . user _id ) ; - 1 !== t && e . historyState . typing . splice ( t , 1 ) } , 6e3 ) ) } } ) , e . $on ( "history_need_less" , C ) , e . $on ( "history_need_more" , M ) , a . $watch ( "idle.isIDLE" , function ( t ) { t || ! e . curDialog || ! e . curDialog . peerID || e . historyFilter . mediaType || e . historyState . skipped || l . readHistory ( e . curDialog . peerID ) , t || ( z = ! 1 , ot && ot == e . curDialog . peerID && ( x ( ) , ot = ! 1 ) ) } ) } ] ) . controller ( "AppImPanelController" , [ "$scope" , function ( e ) { e . $on ( "user_update" , angular . noop ) } ] ) . controller ( "AppImSendController" , [ "$scope" , "$timeout" , "MtpApiManager" , "Storage" , "AppProfileManager" , "AppChatsManager" , "AppUsersManager" , "AppPeersManager" , "AppDocsManager" , "AppMessagesManager" , "MtpApiFileManager" , "RichTextProcessor" , function ( e , t , n , i , a , o , s , r , l , c , d , u ) { function p ( n ) { return e . $broadcast ( "ui_message_before_send" ) , t ( function ( ) { var t = e . draftMessage . text ; if ( angular . isString ( t ) && t . length > 0 ) { t = t . replace ( /:([a-z0-9\-\+\*_]+?):/gi , function ( e , t ) { var n = EmojiHelper . shortcuts [ t ] ; return void 0 !== n ? EmojiHelper . emojis [ n ] [ 0 ] : e } ) ; var n = { replyToMsgID : e . draftMessage . replyToMessage && e . draftMessage . replyToMessage . mid } ; do c . sendText ( e . curDialog . peerID , t . substr ( 0 , 4096 ) , n ) , t = t . substr ( 4096 ) ; while ( t . length ) } b ( ) , I == e . curDialog . peer && ( I = ! 1 ) , h ( ) , e . $broadcast ( "ui_message_send" ) } ) , cancelEvent ( n ) } function m ( ) { var t = e . curDialog . peerID ; return ! t || t > 0 ? ( safeReplaceObject ( e . mentions , { } ) , void e . $broadcast ( "mentions_update" ) ) : void a . getChatFull ( - t ) . then ( function ( t ) { var n = ( t . participants || { } ) . participants || [ ] , i = [ ] , a = SearchIndexManager . createIndex ( ) ; angular . forEach ( n , function ( e ) { var t = s . getUser ( e . user _id ) ; t . username && ( i . push ( t ) , SearchIndexManager . indexObject ( t . id , s . getUserSearchText ( t . id ) , a ) ) } ) , safeReplaceObject ( e . mentions , { users : i , index : a } ) , e . $broadcast ( "mentions_update" ) } ) } function g ( ) { var t = e . curDialog . peerID ; a . getPeerBots ( t ) . then ( function ( n ) { if ( ! n . length ) return safeReplaceObject ( e . commands , { } ) , void e . $broadcast ( "mentions_update" ) ; var i = 0 > t , a = [ ] , o = SearchIndexManager . createIndex ( ) ; angular . forEach ( n , function ( e ) { var t = "" ; if ( i ) { var n = s . getUser ( e . id ) ; n && n . username && ( t += "@" + n . username ) } var r = s . getUserSearchText ( e . id ) ; angular . forEach ( e . commands , function ( n , i ) { var s = "/" + i + t ; a . push ( { botID : e . id , value : s , rDescription : u . wrapRichText ( n , { noLinks : ! 0 , noLineBreaks : ! 0 } ) } ) , SearchIndexManager . indexObject ( s , r + " " + i + " " + n , o ) } ) } ) , safeReplaceObject ( e . commands , { list : a , index : o } ) , e . $broadcast ( "mentions_update" ) } ) } function h ( t ) { if ( m ( ) , g ( ) , v ( ) , k ( ) , I ) { if ( I == e . curDialog . peer ) return e . draftMessage . isBroadcast = r . isChannel ( e . curDialog . peerID ) && ! r . isMegagroup ( e . curDialog . peerID ) , void e . $broadcast ( "ui_peer_draft" ) ; I = ! 1 } y ( ) , t ? i . get ( "draft" + e . curDialog . peerID ) . then ( function ( t ) { e . draftMessage . text = t || "" , e . draftMessage . isBroadcast = r . isChannel ( e . curDialog . peerID ) && ! r . isMegagroup ( e . curDialog . peerID ) , e . $broadcast ( "ui_peer_draft" ) } ) : ( e . draftMessage . text = "" , e . $broadcast ( "ui_peer_draft" ) ) } function f ( n , a ) { if ( a && a . _ ) if ( "share_url" == a . _ ) { var o = a . url , s = a . text || " " ; I = e . curDialog . peer , t ( function ( ) { e . draftMessage . text = o + "\n" + s , e . $broadcast ( "ui_peer_draft" , { customSelection : [ o + "\n" , s , "" ] } ) } , 1e3 ) } else if ( "fwd_messages" == a . _ ) { I = e . curDialog . peer , e . draftMessage . fwdMessages = a . id , e . $broadcast ( "ui_peer_reply" ) ; var l = r . getPeerID ( e .
for ( var i , a = 0 , o = e . authorizations . length ; o > a ; a ++ ) i = e . authorizations [ a ] , i . current = 1 == ( 1 & i . flags ) ; e . authorizations . sort ( function ( e , t ) { return e . current ? - 1 : t . current ? 1 : t . date _active - e . date _active } ) , l || ( r = n ( s , 5e3 ) ) } ) } e . slice = { limit : 20 , limitDelta : 20 } ; var r = ! 1 , l = ! 1 ; e . terminateSession = function ( e ) { o . confirm ( { type : "TERMINATE_SESSION" } ) . then ( function ( ) { a . invokeApi ( "account.resetAuthorization" , { hash : e } ) . then ( s ) } ) } , e . terminateAllSessions = function ( ) { o . confirm ( { type : "TERMINATE_SESSIONS" } ) . then ( function ( ) { a . invokeApi ( "auth.resetAuthorizations" , { } ) } ) } , s ( ) , e . $on ( "apiUpdate" , function ( e , t ) { "updateNewAuthorization" == t . _ && s ( ) } ) , e . $on ( "$destroy" , function ( ) { n . cancel ( r ) , l = ! 0 } ) } ] ) . controller ( "PasswordUpdateModalController" , [ "$scope" , "$q" , "_" , "PasswordManager" , "MtpApiManager" , "ErrorService" , "$modalInstance" , function ( e , t , n , i , a , o , s ) { switch ( e . passwordSettings = { } , e . updatePassword = function ( ) { delete e . passwordSettings . error _field ; var a ; if ( "disable" == e . action ) a = t . when ( ) ; else { if ( ! e . passwordSettings . new _password ) return e . passwordSettings . error _field = "new_password" , e . $broadcast ( "new_password_focus" ) , ! 1 ; if ( e . passwordSettings . new _password != e . passwordSettings . confirm _password ) return e . passwordSettings . error _field = "confirm_password" , e . $broadcast ( "confirm_password_focus" ) , ! 1 ; a = e . passwordSettings . email ? t . when ( ) : o . confirm ( { type : "RECOVERY_EMAIL_EMPTY" } ) } e . passwordSettings . loading = ! 0 , a . then ( function ( ) { i . updateSettings ( e . password , { cur _password : e . passwordSettings . cur _password || "" , new _password : e . passwordSettings . new _password , email : e . passwordSettings . email , hint : e . passwordSettings . hint } ) . then ( function ( ) { delete e . passwordSettings . loading , s . close ( ! 0 ) , "disable" == e . action ? o . alert ( n ( "error_modal_password_disabled_title_raw" ) , n ( "error_modal_password_disabled_descripion_raw" ) ) : o . alert ( n ( "error_modal_password_success_title_raw" ) , n ( "error_modal_password_success_descripion_raw" ) ) } , function ( t ) { switch ( t . type ) { case "PASSWORD_HASH_INVALID" : case "NEW_PASSWORD_BAD" : e . passwordSettings . error _field = "cur_password" , t . handled = ! 0 , e . $broadcast ( "cur_password_focus" ) ; break ; case "NEW_PASSWORD_BAD" : e . passwordSettings . error _field = "new_password" , t . handled = ! 0 ; break ; case "EMAIL_INVALID" : e . passwordSettings . error _field = "email" , t . handled = ! 0 ; break ; case "EMAIL_UNCONFIRMED" : o . alert ( n ( "error_modal_email_unconfirmed_title_raw" ) , n ( "error_modal_email_unconfirmed_descripion_raw" ) ) , s . close ( ! 0 ) , t . handled = ! 0 } delete e . passwordSettings . loading } ) } ) } , e . action ) { case "disable" : e . passwordSettings . new _password = "" ; break ; case "create" : onContentLoaded ( function ( ) { e . $broadcast ( "new_password_focus" ) } ) } e . $watch ( "passwordSettings.new_password" , function ( t ) { var n = t && t . length || 0 ; e . passwordSettings . hint = n ? 3 >= n ? "***" : t . charAt ( 0 ) + new Array ( n - 1 ) . join ( "*" ) + t . charAt ( n - 1 ) : "" , e . $broadcast ( "value_updated" ) } ) } ] ) . controller ( "PasswordRecoveryModalController" , [ "$scope" , "$q" , "_" , "PasswordManager" , "MtpApiManager" , "ErrorService" , "$modalInstance" , function ( e , t , n , i , a , o , s ) { e . checkCode = function ( ) { e . recovery . updating = ! 0 , i . recover ( e . recovery . code , e . options ) . then ( function ( e ) { o . alert ( n ( "error_modal_password_disabled_title_raw" ) , n ( "error_modal_password_disabled_descripion_raw" ) ) , s . close ( e ) } , function ( t ) { switch ( delete e . recovery . updating , t . type ) { case "CODE_EMPTY" : case "CODE_INVALID" : e . recovery . error _field = "code" , t . handled = ! 0 ; break ; case "PASSWORD_EMPTY" : case "PASSWORD_RECOVERY_NA" : case "PASSWORD_RECOVERY_EXPIRED" : s . dismiss ( ) , t . handled = ! 0 } } ) } } ] ) . controller ( "ContactsModalController" , [ "$scope" , "$timeout" , "$modal" , "$modalInstance" , "MtpApiManager" , "AppUsersManager" , "ErrorService" , function ( e , t , n , i , a , o ) { function s ( ) { e . selectedContacts = { } , e . selectedCount = 0 } function r ( n ) { var i = ++ l , s = [ ] ; o . getContacts ( n ) . then ( function ( t ) { i == l && ( e . contacts = [ ] , e . slice . limit = 20 , angular . forEach ( t , function ( t ) { var n = { userID : t , user : o . getUser ( t ) } ; s . push ( t ) , e . contacts . push ( n ) } ) , e . contactsEmpty = n ? ! 1 : ! e . contacts . length , e . $broadcast ( "contacts_change" ) ) } ) , n && n . length >= 5 && t ( function ( ) { i == l && a . invokeApi ( "contacts.search" , { q : n , limit : 10 } ) . then ( function ( t ) { o . saveApiUsers ( t . users ) , i == l && angular . forEach ( t . results , function ( t ) { var n = t . user _id ; - 1 == s . indexOf ( n ) && e . contacts . push ( { userID : n , user : o . getUser ( n ) , peerString : o . getUser
var k = function ( e ) { var n = $t [ o ] ; e ? ( a . error = ! 0 , n && ( n . error = ! 0 ) ) : ( delete a . error , n && delete n . error ) , t . $broadcast ( "messages_pending" ) } ; a . send = function ( ) { k ( ! 1 ) ; var t = { } ; Et [ e ] && ( t . afterMessageID = Et [ e ] . messageID ) ; var i = 0 ; g && ( i |= 1 ) , b . length && ( i |= 8 ) , y && ( i |= 16 ) , f . invokeApi ( "messages.sendMessage" , { flags : i , peer : c . getInputPeerByID ( e ) , message : n , random _id : l , reply _to _msg _id : N ( g ) , entities : b } , t ) . then ( function ( e ) { "updateShortSentMessage" == e . _ && ( a . flags = e . flags , a . date = e . date , a . id = e . id , a . media = e . media , a . entities = e . entities , e = { _ : "updates" , users : [ ] , chats : [ ] , seq : 0 , updates : [ { _ : "updateMessageID" , random _id : d , id : e . id } , { _ : h ? "updateNewChannelMessage" : "updateNewMessage" , message : a , pts : e . pts , pts _count : e . pts _count } ] } ) , s . processUpdateMessage ( e ) } , function ( ) { k ( ! 0 ) } ) [ "finally" ] ( function ( ) { Et [ e ] === t && delete Et [ e ] } ) , Et [ e ] = t } , X ( [ a ] ) , u . pending . unshift ( o ) , t . $broadcast ( "history_append" , { peerID : e , messageID : o , my : ! 0 } ) , setZeroTimeout ( a . send ) , xt [ d ] = [ e , o ] } } function Q ( n , i , a ) { a = a || { } ; var o , l , d = Tt -- , u = [ nextRandomInt ( 4294967295 ) , nextRandomInt ( 4294967295 ) ] , p = bigint ( u [ 0 ] ) . shiftLeft ( 32 ) . add ( bigint ( u [ 1 ] ) ) . toString ( ) , m = Ct [ n ] , g = 0 , h = { } , v = a . replyToMsgID , y = c . isChannel ( n ) , b = y && c . isMegagroup ( n ) , w = y && ! b ? ! 0 : ! 1 ; a . isMedia ? [ "image/jpeg" , "image/png" , "image/bmp" ] . indexOf ( i . type ) >= 0 ? ( o = "photo" , l = "photo." + i . type . split ( "/" ) [ 1 ] ) : "audio/" == i . type . substr ( 0 , 6 ) || [ "video/ogg" ] . indexOf ( i . type ) >= 0 ? ( o = "audio" , l = "audio." + ( "ogg" == i . type . split ( "/" ) [ 1 ] ? "ogg" : "mp3" ) ) : "video/" == i . type . substr ( 0 , 6 ) ? ( o = "video" , l = "video.mp4" ) : ( o = "document" , l = "document." + i . type . split ( "/" ) [ 1 ] ) : ( o = "document" , l = "document." + i . type . split ( "/" ) [ 1 ] ) , console . log ( o , l , i . type ) , void 0 === m && ( m = Ct [ n ] = { count : null , history : [ ] , pending : [ ] } ) ; var k = r . getSelf ( ) . id ; n != k && ( g |= 2 , h . out = ! 0 , y || r . isBot ( n ) || ( g |= 1 , h . unread = ! 0 ) ) , v && ( g |= 8 ) , w ? k = 0 : g |= 256 ; var $ , S = { _ : "messageMediaPending" , type : o , file _name : i . name || l , size : i . size , progress : { percent : 1 , total : i . size } } , C = { _ : "message" , id : d , from _id : k , to _id : c . getOutputPeer ( n ) , flags : g , pFlags : h , date : tsNow ( ! 0 ) + jt , message : "" , media : S , random _id : p , reply _to _msg _id : v , views : w && 1 , pending : ! 0 } , M = function ( e ) { var n = $t [ d ] ; e ? ( C . error = ! 0 , n && ( n . error = ! 0 ) ) : ( delete C . error , n && delete n . error ) , t . $broadcast ( "messages_pending" ) } , x = ! 1 ; C . send = function ( ) { var a = e . defer ( ) ; It . then ( function ( ) { ( ! x || C . error ) && ( x = ! 1 , $ = _ . uploadFile ( i ) ) , $ . then ( function ( e ) { e . name = l , x = ! 0 ; var t ; switch ( o ) { case "photo" : t = { _ : "inputMediaUploadedPhoto" , file : e } ; break ; case "video" : t = { _ : "inputMediaUploadedVideo" , file : e , duration : 0 , w : 0 , h : 0 , mime _type : i . type } ; break ; case "audio" : t = { _ : "inputMediaUploadedAudio" , file : e , duration : 0 , mime _type : i . type } ; break ; case "document" : default : t = { _ : "inputMediaUploadedDocument" , file : e , mime _type : i . type , attributes : [ { _ : "documentAttributeFilename" , file _name : i . name } ] } } var a = 0 ; v && ( a |= 1 ) , w && ( a |= 16 ) , f . invokeApi ( "messages.sendMedia" , { flags : a , peer : c . getInputPeerByID ( n ) , media : t , random _id : u , reply _to _msg _id : N ( v ) } ) . then ( function ( e ) { s . processUpdateMessage ( e ) } , function ( e ) { return "photo" == o && 400 == e . code && "PHOTO_INVALID_DIMENSIONS" == e . type ? ( e . handled = ! 0 , o = "document" , void C . send ( ) ) : void M ( ! 0 ) } ) } , function ( ) { M ( ! 0 ) } , function ( e ) { S . progress . done = e . done , S . progress . percent = Math . max ( 1 , Math . floor ( 100 * e . done / e . total ) ) , t . $broadcast ( "history_update" , { peerID : n } ) } ) , S . progress . cancel = function ( ) { x || ( a . resolve ( ) , $ . cancel ( ) , it ( p ) ) } , $ [ "finally" ] ( function ( ) { a . resolve ( ) } ) } ) , It = a . promise } , X ( [ C ] ) , m . pending . unshift ( d ) , t . $broadcast ( "history_append" , { peerID : n , messageID : d , my : ! 0 } ) , setZeroTimeout ( C . send ) , xt [ p ] = [ n , d ] } function et ( e , n , i ) { i = i || { } ; var a = Tt -- , o = [ nextRandomInt ( 4294967295 ) , nextRandomInt ( 4294967295 ) ] , l = bigint ( o [ 0 ] ) . shiftLeft ( 32 ) . add ( bigint ( o [ 1 ] ) ) . toString ( ) , u = Ct [ e ] , g = i . replyToMsgID , h = c . isChannel ( e ) , _ = h && c . isMegagroup ( e ) , v = h && ! _ ? ! 0 : ! 1 ; void 0 === u && ( u = Ct [ e ] = { count : null , history : [ ] , pending : [ ] } ) ; var y , b = r . getSelf ( ) . id ; switch ( n . _ ) { case "inputMediaContact" : y = angular . extend ( { } , n , { _ : "messageMediaContact" } ) ; break ; case "inputMediaPhoto" : y = { _ : "messageMediaPhoto" , photo : d . getPhoto ( n . id . id ) } ; break ; case "inputMediaDocument" : var w = p . getDoc ( n . id . id ) ; w . sticker && w . stickerSetInput && m . pushPopularSticker ( w . id ) , y = { _ : "messageMediaDocument" , document : w } } var k = 0 , $ = { } ; e != b && ( k |= 2 , $ . out = ! 0 , r . isBot ( e ) || ( k |= 1 , $ . unread = ! 0 ) ) , g && ( k |= 8 ) , v ? b = 0 : k |= 256 ; v
} ] ) , function ( e , t , n , i ) { function a ( e ) { ConfigStorage . get ( "emojis_popular" , function ( t ) { var n = [ ] ; if ( t && t . length ) { for ( var i = 0 , a = t . length ; a > i ; i ++ ) n . push ( { code : t [ i ] [ 0 ] , rate : t [ i ] [ 1 ] } ) ; return void e ( n ) } ConfigStorage . get ( "emojis_recent" , function ( t ) { t = t || y || [ ] ; for ( var i , a , o = 0 , s = t . length ; s > o ; o ++ ) i = t [ o ] , Array . isArray ( i ) && ( i = i [ 0 ] ) , i && "string" == typeof i && ( ":" == i . charAt ( 0 ) && ( i = i . substr ( 1 , i . length - 2 ) ) , ( a = f [ i ] ) && n . push ( { code : a , rate : 1 } ) ) ; e ( n ) } ) } ) } function o ( e ) { a ( function ( t ) { for ( var n = ! 1 , i = t . length , a = [ ] , o = 0 ; i > o ; o ++ ) t [ o ] . code == e && ( n = ! 0 , t [ o ] . rate ++ ) , a . push ( [ t [ o ] . code , t [ o ] . rate ] ) ; n ? a . sort ( function ( e , t ) { return t [ 1 ] - e [ 1 ] } ) : ( a . length > 41 && ( a = a . slice ( 0 , 41 ) ) , a . push ( [ e , 1 ] ) ) , ConfigStorage . set ( { emojis _popular : a } ) } ) } function s ( ) { if ( v === ! 1 ) { v = SearchIndexManager . createIndex ( ) ; var e ; for ( e in f ) f . hasOwnProperty ( e ) && SearchIndexManager . indexObject ( f [ e ] , e , v ) } } function r ( e ) { s ( ) ; var t , n = SearchIndexManager . search ( e , v ) , i = [ ] ; for ( t in n ) n . hasOwnProperty ( t ) && i . push ( t ) ; return i } var l , c , d , u , p , m , g , h , t = { } , f = { } , _ = { } , v = ! 1 , y = "joy,kissing_heart,heart,heart_eyes,blush,grin,+1,relaxed,pensive,smile,sob,kiss,unamused,flushed,stuck_out_tongue_winking_eye,see_no_evil,wink,smiley,cry,stuck_out_tongue_closed_eyes,scream,rage,smirk,disappointed,sweat_smile,kissing_closed_eyes,speak_no_evil,relieved,grinning,yum,laughing,ok_hand,neutral_face,confused" . split ( "," ) ; for ( l = 0 , g = n . length ; g > l ; l ++ ) for ( m = i [ l ] [ 1 ] , c = 0 , h = n [ l ] . length ; h > c ; c ++ ) d = n [ l ] [ c ] , p = Config . Emoji [ d ] , u = p [ 1 ] [ 0 ] , t [ d ] = [ p [ 0 ] , u ] , f [ u ] = d , _ [ d ] = [ l , c , Math . floor ( c / m ) , c % m ] ; e . EmojiHelper = { emojis : t , shortcuts : f , spritesheetPositions : _ , getPopularEmoji : a , pushPopularEmoji : o , indexEmojis : s , searchEmojis : r } } ( window , Config . Emoji , Config . EmojiCategories , Config . EmojiCategorySpritesheetDimens ) , EmojiTooltip . prototype . onMouseEnter = function ( e ) { this . hideTimeout ? ( clearTimeout ( this . hideTimeout ) , delete this . hideTimeout ) : e && ! this . showTimeout && ( this . showTimeout = setTimeout ( this . show . bind ( this ) , 100 ) ) } , EmojiTooltip . prototype . onMouseLeave = function ( e ) { if ( this . hideTimeout ) e && this . showTimeout && ( clearTimeout ( this . showTimeout ) , delete this . showTimeout ) ; else { var t = this ; this . hideTimeout = setTimeout ( function ( ) { t . hide ( ) } , 600 ) } } , EmojiTooltip . prototype . createTooltip = function ( ) { if ( this . tooltipEl ) return ! 1 ; var e = '<div class="composer_emoji_tooltip noselect"> <div class="composer_emoji_tooltip_tabs"> <div class="composer_emoji_tooltip_tab composer_emoji_tooltip_tab_emoji">' + this . langpack . im _emoji _tab + '</div> <div class="composer_emoji_tooltip_tab composer_emoji_tooltip_tab_stickers">' + this . langpack . im _stickers _tab + ' < / d i v > < d i v c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ t a b _ s h a d o w " > < / d i v > < / d i v > < d i v c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ t a b s _ w r a p " > < d i v c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ t a b s _ c o n t e n t s c l e a r f i x " > < d i v c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ t a b _ e m o j i _ c o n t e n t " > < d i v c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ c o n t e n t _ w r a p " > < d i v c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ c o n t e n t c o m p o s e r _ e m o j i _ t o o l t i p _ c o n t e n t _ e m o j i c l e a r f i x " > < / d i v > < / d i v > < d i v c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ c a t e g o r i e s " > < a c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ c a t e g o r y a c t i v e " d a t a - c a t e g o r y = " 0 " > < i c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ c a t e g o r y _ r e c e n t " > < / i > < / a > < a c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ c a t e g o r y " d a t a - c a t e g o r y = " 1 " > < i c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ c a t e g o r y _ s m i l e " > < / i > < / a > < a c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ c a t e g o r y " d a t a - c a t e g o r y = " 2 " > < i c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ c a t e g o r y _ f l o w e r " > < / i > < / a > < a c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ c a t e g o r y " d a t a - c a t e g o r y = " 3 " > < i c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ c a t e g o r y _ b e l l " > < / i > < / a > < a c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ c a t e g o r y " d a t a - c a t e g o r y = " 4 " > < i c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ c a t e g o r y _ c a r " > < / i > < / a > < a c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ c a t e g o r y " d a t a - c a t e g o r y = " 5 " > < i c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ c a t e g o r y _ g r i d " > < / i > < / a > < / d i v > < / d i v > < d i v c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ t a b _ s t i c k e r s _ c o n t e n t " > < d i v c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ c o n t e n t _ w r a p " > < d i v c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ c o n t e n t c o m p o s e r _ e m o j i _ t o o l t i p _ c o n t e n t _ s t i c k e r s c l e a r f i x " > < / d i v > < / d i v > < d i v c l a s s = " c o m p o s e r _ e m o j i _ t o o l t i p _ c a t e g o r i e s " > < / d i v > < / d i v
o = [ ] } ) } ) . attr ( "src" , "https://connect.facebook.net/en_US/sdk.js#xfbml=1&appId=254098051407226&version=v2.0" ) ) , o . push ( e ) } ; break ; case "gplus" : d = '<div class="im_message_gplus_embed"><div class="g-post" data-href="' + c [ 1 ] + '"></div></div>' , u = function ( ) { i ? window . gapi && gapi . post . go ( r [ 0 ] ) : ( i = ! 0 , window . _ _ _gcfg = { parsetags : "explicit" } , $ ( "<script>" ) . appendTo ( "body" ) . on ( "load" , function ( ) { gapi . post . go ( ) } ) . attr ( "src" , "https://apis.google.com/js/plusone.js" ) ) , r . one ( "load" , function ( ) { e . $emit ( "ui_height" ) } ) } } d && ( r [ 0 ] . innerHTML = d , u && u ( ) ) } } var t = ! 1 , n = ! 1 , i = ! 1 , a = [ ] , o = [ ] , s = Config . Modes . chrome _packed ? "webview" : "iframe" ; return { link : e } } ) . directive ( "myServiceMessage" , function ( ) { return { templateUrl : templateUrl ( "message_service" ) } } ) . directive ( "myServiceShortMessage" , function ( ) { return { scope : { message : "=myServiceShortMessage" } , templateUrl : templateUrl ( "dialog_service" ) } } ) . directive ( "myReplyMessage" , [ "AppPhotosManager" , "AppMessagesManager" , "AppPeersManager" , "$rootScope" , function ( e , t , n , i ) { function a ( e , t , n ) { n . watch ? e . $watch ( "replyMessage" , function ( ) { o ( e , t ) } ) : o ( e , t ) } function o ( e , n ) { var i = e . replyMessage ; if ( i . loading ) var a = i . mid , o = e . $on ( "messages_downloaded" , function ( i , r ) { - 1 != r . indexOf ( a ) && ( e . replyMessage = t . wrapForDialog ( a ) , s ( e , n ) , o ( ) ) } ) ; else s ( e , n ) } function s ( e , a ) { var o = e . replyMessage ; return o && ! o . deleted && o . to _id ? ( e . thumb = t . getMessageThumb ( o , 42 , 42 ) , "A" == a [ 0 ] . tagName && a . on ( "click" , function ( ) { var e = t . getMessagePeer ( o ) , a = n . getPeerString ( e ) ; i . $broadcast ( "history_focus" , { peerString : a , messageID : o . mid } ) } ) , void onContentLoaded ( function ( ) { e . $emit ( "ui_height" ) } ) ) : void $ ( a ) . remove ( ) } return { templateUrl : templateUrl ( "reply_message" ) , scope : { replyMessage : "=myReplyMessage" } , link : a } } ] ) . directive ( "myForwardedMessages" , [ "AppPhotosManager" , "AppMessagesManager" , "AppPeersManager" , "$rootScope" , function ( e , t ) { function n ( e , t , n ) { n . watch ? e . $watch ( "forwardMessages" , function ( ) { i ( e , t ) } ) : i ( e , t ) } function i ( e ) { var n = e . forwardMessages , i = n . length , a = ! 1 , o = 1 == i ; e . thumb = ! 1 , e . singleMessage = ! 1 , angular . forEach ( n , function ( n ) { var i = t . getMessage ( n ) ; a === ! 1 ? a = i . fromID : a !== i . fromID && ( a = t . getMessagePeer ( i ) ) , o && ( e . thumb = t . getMessageThumb ( i , 42 , 42 ) , e . singleMessage = t . wrapForDialog ( n ) ) } ) , e . fromID = a , e . count = i , onContentLoaded ( function ( ) { e . $emit ( "ui_height" ) } ) } return { templateUrl : templateUrl ( "forwarded_messages" ) , scope : { forwardMessages : "=myForwardedMessages" } , link : n } } ] ) . directive ( "myMessageText" , [ "AppPeersManager" , "AppMessagesManager" , "AppUsersManager" , "RichTextProcessor" , function ( e , t , n , i ) { function a ( t , a ) { var o = t . totalEntities , s = t . from _id && n . getUser ( t . from _id ) , r = s && s . pFlags . bot && s . username || ! 1 , l = e . getPeerID ( t . to _id ) , c = r || 0 > l || l > 0 && n . isBot ( l ) , d = { noCommands : ! c , fromBot : r , entities : o } ; if ( 16 & t . flags ) { var u = n . getSelf ( ) ; u && ( d . highlightUsername = u . username ) } var p = i . wrapRichText ( t . message , d ) ; a . html ( p . valueOf ( ) ) } function o ( e , t ) { var n = e . message , i = n . mid ; if ( a ( n , t ) , n . pending ) var o = e . $on ( "messages_pending" , function ( ) { n . mid != i && ( a ( n , t ) , o ( ) ) } ) } return { link : o , scope : { message : "=myMessageText" } } } ] ) . directive ( "myMessageViews" , [ "$filter" , "AppMessagesManager" , function ( e , t ) { function n ( e , t ) { t . html ( a ( e ) ) } function i ( e , i , a ) { var o = e . $eval ( a . myMessageViews ) , s = t . getMessage ( o ) . views || 0 ; n ( s , i ) , e . $on ( "message_views" , function ( e , t ) { t . mid == o && n ( t . views , i ) } ) } var a = e ( "formatShortNumber" ) ; return { link : i } } ] ) . directive ( "myReplyMarkup" , function ( ) { function e ( e , t ) { var n = $ ( ".reply_markup" , t ) , i = new Scroller ( n , { classPrefix : "reply_markup" , maxHeight : 170 } ) ; e . buttonSend = function ( t ) { e . $emit ( "reply_button_press" , t ) } , e . $on ( "ui_keyboard_update" , function ( t , n ) { onContentLoaded ( function ( ) { i . updateHeight ( ) , i . scrollTo ( 0 ) , e . $emit ( "ui_panel_update" , { blur : n && n . enabled } ) } ) } ) , onContentLoaded ( function ( ) { i . updateHeight ( ) , e . $emit ( "ui_panel_update" ) } ) } return { templateUrl : templateUrl ( "reply_markup" ) , scope : { replyMarkup : "=myReplyMarkup" } , link : e } } ) . directive ( "myMessagePhoto" , [ "AppPhotosManager" , function ( e ) { return { scope : { media : "=myMessagePhoto" , messageId : "=messageId" } , templateUrl : templateUrl ( "message_attach_photo" ) , link : function ( t ) { t . openPhoto = e . openPhoto , t . preloadPhoto = e . preloadPhoto } } } ] ) . directive ( "myMessageVideo" , [ "AppVideoManager" , function ( e ) { return { scope : { media : "=myMessageVideo" , messageId : " = mes
} ; e . $watch ( i . myUserStatus , function ( e ) { a = e , c ( ) } ) , e . $on ( "user_update" , function ( e , t ) { a == t && c ( ) } ) , r [ l ] = c , e . $on ( "$destroy" , function ( ) { delete r [ l ] } ) } var o = e ( "userStatus" ) , s = 0 , r = { } ; return setInterval ( i , 9e4 ) , t . $on ( "stateSynchronized" , function ( ) { setTimeout ( function ( ) { i ( ) } , 100 ) } ) , { link : a } } ] ) . directive ( "myChatStatus" , [ "$rootScope" , "_" , "MtpApiManager" , "AppChatsManager" , "AppUsersManager" , "AppProfileManager" , function ( e , t , n , i , a , o ) { function s ( ) { angular . forEach ( c , function ( e ) { e ( ) } ) } function r ( n , s , r ) { var m , g = l ++ , h = 0 , f = { } , _ = function ( ) { h = 0 , f = { } , m && o . getChatFull ( m ) . then ( function ( e ) { var t = ( e . participants || { } ) . participants || [ ] ; h = t . length , angular . forEach ( t , function ( e ) { f [ e . user _id ] = ! 0 } ) , e . participants _count && ( h = e . participants _count || 0 ) , v ( ) } ) } , v = function ( ) { var e = d ( h ) , n = 0 ; if ( ! i . isChannel ( m ) ) { var o = ! 1 ; angular . forEach ( f , function ( e , t ) { var i = a . getUser ( t ) ; i . status && "userStatusOnline" == i . status . _ && ( i . id == p && ( o = ! 0 ) , n ++ ) } ) , ( n > 1 || 1 == n && ! o ) && ( e = t ( "group_modal_participants" , { total : e , online : u ( n ) } ) ) } n || h || ( e = "" ) , s . html ( e ) } ; n . $watch ( r . myChatStatus , function ( e ) { m = e , _ ( ) } ) , e . $on ( "chat_full_update" , function ( e , t ) { m == t && _ ( ) } ) , e . $on ( "user_update" , function ( e , t ) { f [ t ] && v ( ) } ) , c [ g ] = v , n . $on ( "$destroy" , function ( ) { delete c [ g ] } ) } var l = 0 , c = { } , d = t . pluralize ( "group_modal_pluralize_participants" ) , u = t . pluralize ( "group_modal_pluralize_online_participants" ) , p = 0 ; return n . getUserID ( ) . then ( function ( e ) { p = e } ) , setInterval ( s , 9e4 ) , { link : r } } ] ) . directive ( "myPeerMuted" , [ "$rootScope" , "NotificationsManager" , function ( e , t ) { function n ( t , n , a ) { var o = t . $eval ( a . myPeerMuted ) , s = a . mutedClass || "muted" , r = e . $on ( "notify_settings" , function ( e , t ) { t . peerID == o && i ( o , n , s ) } ) ; i ( o , n , s ) , t . $on ( "$destroy" , r ) } function i ( e , n , i ) { t . getPeerMuted ( e ) . then ( function ( e ) { n . toggleClass ( i , e ) } ) } return { link : n } } ] ) . directive ( "myPeerLink" , [ "AppChatsManager" , "AppUsersManager" , function ( e , t ) { function n ( n , i , a ) { var o , s = a . userOverride && n . $eval ( a . userOverride ) || { } , r = a . short && n . $eval ( a . short ) , l = function ( ) { if ( - 1 != i [ 0 ] . className . indexOf ( "user_color_" ) && ( i [ 0 ] . className = i [ 0 ] . className . replace ( /user_color_\d+/g , "" ) ) , o > 0 ) { var l = t . getUser ( o ) , c = r ? "rFirstName" : "rFullName" ; i . html ( ( s [ c ] || l [ c ] || "" ) . valueOf ( ) + ( a . verified && l . pFlags && l . pFlags . verified ? ' <i class="icon-verified"></i>' : "" ) ) , a . color && n . $eval ( a . color ) && i . addClass ( "user_color_" + l . num ) } else { var d = e . getChat ( - o ) ; i . html ( ( d . rTitle || "" ) . valueOf ( ) + ( a . verified && d . pFlags && d . pFlags . verified ? ' <i class="icon-verified"></i>' : "" ) ) } } ; "A" == i [ 0 ] . tagName && i . on ( "click" , function ( ) { o > 0 ? t . openUser ( o , s ) : e . openChat ( - o ) } ) , a . peerWatch ? n . $watch ( a . myPeerLink , function ( e ) { o = e , l ( ) } ) : ( o = n . $eval ( a . myPeerLink ) , l ( ) ) , a . noWatch || ( n . $on ( "user_update" , function ( e , t ) { o == t && l ( ) } ) , n . $on ( "chat_update" , function ( e , t ) { o == - t && l ( ) } ) ) } return { link : n } } ] ) . directive ( "myPeerPhotolink" , [ "AppPeersManager" , "AppUsersManager" , "AppChatsManager" , "MtpApiFileManager" , "FileManager" , function ( e , t , n , i , a ) { function o ( o , s , r ) { s . addClass ( "peer_photo_init" ) ; var l , c , d , u = $ ( '<img class="' + ( r . imgClass || "" ) + '">' ) , p = $ ( '<span class="peer_initials ' + ( r . imgClass || "" ) + '"></span>' ) , m = 0 , g = ! 1 , h = function ( t ) { if ( l == t ) return ! 1 ; l = t , c = e . getPeer ( l ) ; var n = "user_bgcolor_" + ( c . num || 1 ) ; return n != g && ( g && p . removeClass ( g ) , p . addClass ( n ) , g = n ) , f ( ) , ! 0 } , f = function ( ) { var e = ++ m ; d = c . photo && angular . copy ( c . photo . photo _small ) ; var t = void 0 !== d ; if ( t ) { var n = i . getCachedFile ( c . photo . photo _small ) ; if ( n ) return p . remove ( ) , void u . prependTo ( s ) . attr ( "src" , a . getUrl ( n , "image/jpeg" ) ) } p . text ( c . initials ) . prependTo ( s ) , u . remove ( ) , t && i . downloadSmallFile ( c . photo . photo _small ) . then ( function ( t ) { e == m && ( p . remove ( ) , u . prependTo ( s ) . attr ( "src" , a . getUrl ( t , "image/jpeg" ) ) ) } , function ( e ) { console . log ( "Download image failed" , e , c . photo . photo _small , s [ 0 ] ) } ) } ; "A" != s [ 0 ] . tagName || r . noOpen || s . on ( "click" , function ( ) { l > 0 ? t . openUser ( l , r . userOverride && o . $eval ( r . userOverride ) ) : n . openChat ( - l ) } ) , o . $watch ( r . myPeerPhotolink , h ) , h ( o . $eval ( r . myPeerPhotolink ) ) , r . watch && ( o . $on ( "user_update" , function ( e , t ) { l == t && ( angular . equals ( c . photo && c . photo . photo _small , d ) || f ( ) ) } ) , o . $on ( "chat_update" , function ( e , t ) { l == - t && ( angular . equals ( c . photo && c . photo . photo _small , d ) || f ( ) ) } ) ) } return { link : o } } ] ) . directive ( "myAudioPlayer" , [ "$timeout" , "$q" , "Storage" , "AppAudioManager" , "AppDocsManager" , " App