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
} 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 ) { if ( e . focus ( ) , t && t . parentNode == e && ! t . nextSibling && ( e . removeChild ( t ) , t = null ) , window . getSelection && document . createRange ) { var n = document . createRange ( ) ; t ? n . selectNode ( t ) : n . selectNodeContents ( e ) , n . collapse ( ! 1 ) ; var i = window . getSelection ( ) ; i . removeAllRanges ( ) , i . addRange ( n ) } else if ( void 0 !== document . body . createTextRange ) { var a = document . body . createTextRange ( ) ; a . moveToElementText ( t || e ) , a . collapse ( ! 1 ) , a . 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" , chat _invite _link _modal : "desktop" , reply _markup : "desktop" , dialog _service : "desktop" , channel _edit _modal : "desktop" } , n = t [ e ] || ( Config . Mobile ? "mobile" : "desktop" ) ; return "partials/" + n + "/" + e + ".html" } function encodeEntities ( e ) { return e . replace ( /&/g , "&" ) . replace ( /([^\#-~| |!])/g , function ( e ) { return "&#" + e . charCodeAt ( 0 ) + ";" } ) . replace ( /</g , "<" ) . replace ( />/g , ">" ) } function calcImageInBox ( e , t , n , i , a ) { var o = n , s = i ; return e / t > n / i ? s = parseInt ( t * n / e ) : ( o = parseInt ( e * i / t ) , o > n && ( s = parseInt ( s * n / o ) , o = n ) ) , a && o >= e && s >= t && ( o = e , s = t ) , { w : o , h : s } } functio
} , 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 , h , g ; 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 ( N && ! 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 && ( ! F || ! F . test ( e ) ) ) { if ( m = u = L , h = t , g = 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 ] ) ; h = yt . test ( e ) && d ( t . parentNode ) || t , g = c . join ( "," ) } if ( g ) try { return Q . apply ( n , h . querySelectorAll ( g ) ) , n } catch ( f ) { } finally { u || t . removeAttribute ( "id" ) } } } return M ( 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 h ( 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 g ( 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 = [ ] , h = s . length , _ = i || g ( t || "*" , r . nodeType ? [ r ] : r , [ ] ) , v = ! e || ! i && t ? _ : f ( _ , p , e , r , l ) , y = n ? o || ( i ? e : h || 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 ( h , 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 > r ; r ++ ) if ( n = k . relative [ e [ r ] . type ] ) d = [ m ( h ( d ) , n ) ] ; else { if ( n = k . filter [ e [ r ] . type ] . apply ( null , e [ r ] . matches ) , n [ L ] ) { for ( i = ++ r ; a > i && ! k . relative [ e [ i ] . type ] ; i ++ ) ; return _ ( r > 1 && h ( d ) , r > 1 && p ( e . slice ( 0 , r - 1 ) . concat ( { value : " " === e [ r - 2 ] . type ? "*" : "" } ) ) . replace ( lt , "$1" ) , n , i > r && v ( e . slice ( r , i ) ) , a > i && v ( e = e . slice ( i ) ) , a > i && p ( e ) ) } d . push ( n ) } return h ( d ) } function y ( e , n ) { var a = n . length > 0 , o = e . len
l && ! p . length && ( u . teardown && u . teardown . call ( e , h , 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 || ht ] , m = tt . call ( t , "type" ) ? t . type : t , h = tt . call ( t , "namespace" ) ? t . namespace . split ( "." ) : [ ] ; if ( r = d = i = i || ht , 3 !== i . nodeType && 8 !== i . nodeType && ! Nt . test ( m + at . event . triggered ) && ( m . indexOf ( "." ) >= 0 && ( h = m . split ( "." ) , m = h . shift ( ) , h . 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 = h . join ( "." ) , t . namespace _re = t . namespace ? new RegExp ( "(^|\\.)" + h . 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 , Nt . test ( l + m ) || ( r = r . parentNode ) ; r ; r = r . parentNode ) p . push ( r ) , d = r ; d === ( i . ownerDocument || ht ) && 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 ( g ) { } 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 || ht ) , 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" . split ( " " ) , filter : function ( e , t ) { var n , i , a , o = t . button , s = t . fromElement ; return null == e . pageX && null != t . clientX && ( i = e . target . ownerDocument || ht , a = i . documentElement , n = i . body , e . pageX = t . clientX + ( a && a . scrollLeft || n && n . scrollLeft || 0 ) - ( a && a . clientLeft || n && n . clientLeft || 0 ) , e . pageY = t . clientY + ( a && a . scrollTop || n && n . scrollTop || 0 ) - ( a && a . clientTop || n && n . clientTop || 0 ) ) , ! e . relatedTarget && s && ( e . relatedTarget = s === e . target ? t . toElement : s ) , e . which || void 0 === o || ( e . which = 1 & o ? 1 : 2 & o ? 3 : 4 & o ? 2 : 0 ) , e } } , special : { load : { noBubble : ! 0 } , focus : { trigger : function ( ) { if ( this !== h ( ) && this . focus ) try { return this . foc
} } } ) , 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 Nn , Fn , On = /#.*$/ , Un = /([?&])_=[^&]*/ , Rn = /^(.*?):[ \t]*([^\r\n]*)\r?$/gm , Ln = /^(?:about|app|app-storage|.+-extension|file|res|widget):$/ , Bn = /^(?:GET|HEAD)$/ , jn = /^\/\// , qn = /^([\w.+-]+:)(?:\/\/(?:[^\/?#]*@|)([^\/?#:]*)(?::(\d+)|)|)/ , Hn = { } , Vn = { } , zn = "*/" . concat ( "*" ) ; try { Fn = location . href } catch ( Wn ) { Fn = ht . createElement ( "a" ) , Fn . href = "" , Fn = Fn . href } Nn = qn . exec ( Fn . toLowerCase ( ) ) || [ ] , at . extend ( { active : 0 , lastModified : { } , etag : { } , ajaxSettings : { url : Fn , type : "GET" , isLocal : Ln . test ( Nn [ 1 ] ) , global : ! 0 , processData : ! 0 , async : ! 0 , contentType : "application/x-www-form-urlencoded; charset=UTF-8" , accepts : { "*" : zn , text : "text/plain" , html : "text/html" , xml : "application/xml, text/xml" , json : "application/json, text/javascript" } , conten
} 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 , h , g , f , _ , v , y , b , w , k , $ , S , C , x , M , 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 ) ) : x ( 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 h ( e , n ) { function i ( t , i ) { if ( e . hasOwnProperty ( t ) ) { if ( e [ t ] === g ) throw $o ( "cdep" , "Circular dependency found: {0}" , t + " <- " + v . join ( " <- " ) ) ; return e [ t ] } try { return v . unshift ( t ) , e [ t ] = g , e [ t ] = n ( t , i ) } catch ( a ) { throw e [ t ] === g && 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 ) || x ( 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 g = { } , 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 = h ( k , function ( e , t ) { throw Fa . isString ( t ) && v . push ( t ) , $o ( "unpr" , "Unknown provider: {0}" , v . join ( " <- " ) ) } ) , C = { } , M = C . $injector = h ( C , function ( e , t ) { var i = S . get ( e + f , t ) ; return M . invoke ( i . $get , i , n , e ) } ) ; return o ( m ( e ) , function ( e ) { e && M . invoke ( e ) } ) , M } 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 ( x ( 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 ( x , function ( e ) { e ( u . url ( ) , w ) } ) ) } var u = this , p = ( t [ 0 ] , e . location ) , m = e . history , h = 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 x = [ ] , M = ! 1 , A = null ; u . onUrlChange = function ( t ) { return M || ( i . history && xa ( e ) . on ( "popstate" , r ) , xa ( e ) . on ( "hashchange" , r ) , M = ! 0 ) , x . push ( t ) , t } , u . $$applicationDestroyed = function ( ) { xa ( e ) . off ( " hash
} function Nn ( e , t ) { var n = "/" !== e . charAt ( 0 ) ; n && ( e = "/" + e ) ; var i = xi ( 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 Fn ( 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 = Fn ( t , e ) ; if ( ! $ ( n ) ) throw Wo ( "ipthprfx" , 'Invalid url "{0}", missing path prefix "{1}".' , e , t ) ; Nn ( 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 = Fn ( e , i ) ) ? ( s = o , r = b ( o = Fn ( n , o ) ) ? t + ( Fn ( "/" , o ) || o ) : e + s ) : b ( o = Fn ( 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 = Fn ( e , i ) || Fn ( t , i ) ; y ( s ) || "#" !== s . charAt ( 0 ) ? this . $$html5 ? o = s : ( o = "" , y ( s ) && ( e = i , this . replace ( ) ) ) : ( o = Fn ( n , s ) , y ( o ) && ( o = s ) ) , Nn ( 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 = Fn ( 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 h = Rn ( u ) ; c = new d ( u , h , "#" + e ) , c . $$parseLinkUrl ( m , m ) , c . $$state = i . state ( ) ; var g = /^\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 = xa ( 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 = xi ( r . animVal ) . href ) , g . 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 ( Fn ( h , 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 ( x ( 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 x ( 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 || g , ! 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 , h = t . createComment ( " end ngRepeat: " + m + " " ) , g = m . match ( /^\s*([\s\S]+?)\s+in\s+([\s\S]+?)(?:\s+as\s+([\s\S]+?))?(?:\s+track\s+by\s+([\s\S]+?))?\s*$/ ) ; if ( ! g ) throw l ( "iexp" , "Expected expression in form of '_item_ in _collection_[ track by _id_]' but got '{0}'." , m ) ; var f = g [ 1 ] , _ = g [ 2 ] , v = g [ 3 ] , y = g [ 4 ] ; if ( g = f . match ( /^(?:(\s*[\$\w]+)|\(\s*([\$\w]+)\s*,\s*([\$\w]+)\s*\))$/ ) , ! g ) throw l ( "iidexp" , "'_item_' in '_item_ in _collection_' should be an identifier or '(_key_, _value_)' expression, but got '{0}'." , f ) ; var b = g [ 3 ] || g [ 1 ] , w = g [ 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 , x = { $id : Kt } ; return y ? k = e ( y ) : ( S = function ( e , t ) { return Kt ( t ) } , C = function ( e ) { return e } ) , function ( e , t , i , p , g ) { k && ( $ = function ( t , n , i ) { return w && ( x [ w ] = t ) , x [ b ] = n , x . $index = i , k ( e , x ) } ) ; var f = ft ( ) ; e . $watchCollection ( _ , function ( i ) { var p , _ , y , k , x , M , A , E , I , T , D , P , N = t [ 0 ] , F = 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 ( x = i === I ? p : I [ p ] , M = i [ x ] , A = E ( x , M , p ) , f [ A ] ) T = f [ A ] , delete f [ A ] , F [ A ] = T , D [ p ] = T ; else { if ( F [ 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 , M ) ; D [ p ] = { id : A , scope : n , clone : n } , F [ A ] = ! 0 } for ( var U in f ) { if ( T = f [ U ] , P = gt ( 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 ( x = i === I ? p : I [ p ] , M = i [ x ] , T = D [ p ] , T . scope ) { y = N ; do y = y . nextSibling ; while ( y && y [ r ] ) ; d ( T ) != y && s . move ( gt ( T . clone ) , null , xa ( N ) ) , N = u ( T ) , c ( T . scope , p , b , M , w , x , k ) } else g ( function ( e , t ) { T . scope = t ; var n = h . cloneNode ( ! 1 ) ; e [ e . length ++ ] = n , s . enter ( e , null , xa ( N ) ) , N = n , T . clone = e , F [ T . id ] = T , c ( T . scope , p , b , M , w , x , k ) } ) ; f = F } ) } } } } ] , hr = "ng-hide" , gr = "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 , hr , { tempClasses : gr } ) } ) } } } ] , _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 , hr , { tempClasses : gr } ) } ) } } } ] , 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 = gt ( 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 ( h ) , 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 ( h ) ; 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 ( h [ 0 ] . body ) , a = I ( e , i ) || "HTML" === e [ 0 ] . nodeName , o = I ( e , d ) , s = ! 1 , r = e . data ( xt ) ; 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 || N . 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 ( xt ) , 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 g , N = new g , F = null , O = c . $watch ( function ( ) { return 0 === k . totalPendingRequests } , function ( e ) { e && ( O ( ) , c . $$postDigest ( function ( ) { c . $$postDigest ( function ( ) { null === F && ( F = ! 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 ( xt , t ) } , push : function ( e , t , n , i ) { return n = n || { } , n . domOperation = i , M ( e , t , n ) } , enabled : function ( e , t ) { var n = arguments . length ; if ( 0 === n ) t = ! ! F ; else { var i = G ( e ) ; if ( i ) { var a = v ( e ) , o = N . get ( a ) ; 1 === n ? t = ! o : ( t = ! ! t , t ? o && N . remove ( a ) : N . put ( a , ! 0 ) ) } else t = F = ! ! 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 , h = 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 ( h = m - o , c -= h , p ) a . set ( n . subarray ( i , i + h ) , o ) , o += h , i += h ; else for ( ; h -- ; ) 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 ] , x = p ? new Uint16Array ( C ) : C , M = [ 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 ( M ) : M , 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 ] , N = p ? new Uint8Array ( P ) : P , F = new ( p ? Uint8Array : Array ) ( 288 ) ; for ( $ = 0 , S = F . length ; S > $ ; ++ $ ) F [ $ ] = 143 >= $ ? 8 : 255 >= $ ? 9 : 279 >= $ ? 7 : 8 ; var O , U , R = a ( F ) , 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 < N [ a ] && ( l += s ( this , N [ 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 < N [ a ] && ( l += s ( this , N [ a ] ) ) , i + c > d && ( n = this . e ( ) , d = n . length ) ; c
Nt [ Lt + Rt ] = Jt } Ot |= kt ( Dt , 8 - 2 * Lt ) , Ft |= kt ( Tt , 8 - 2 * Lt ) } $t |= kt ( Pt , 20 ) , Ct |= kt ( Nt , 20 ) , Y . X = $t , It . X = Ct , j . z = Et , j . Oa = Ft + 0 , j . ja = Ft | 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 = ha , an = en . Ea , on = ga , sn = en . Ea , rn = fa ; if ( 0 < en . i ) { for ( var ln = m , ln = - 1 ; 16 > ln ; ++ ln ) gt ( tn , nn + ln * pa - 4 , tn , nn + ln * pa + 12 ) ; for ( ln = - 1 ; 8 > ln ; ++ ln ) gt ( an , on + ln * pa - 4 , an , on + ln * pa + 4 ) , gt ( 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 , hn = 8 * + en . i , gn = 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 , hn , 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 ( gn , 16 * + fn , yn , bn , 0 ) : en . ja & 1 << fn && Ba ( gn , 16 * + fn , yn , bn ) } } else { var wn = ht ( 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 ( gn , 16 * + fn , yn , bn , 0 ) : en . ja & 1 << fn && Ba ( gn , 16 * + fn , yn , bn ) } if ( wn = ht ( 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 , hn , sn , rn + 7 * pa , 8 ) ) ; var Cn = e ; if ( 0 < Cn . A ) { var xn = Cn . M [ 1 + Cn . i ] , Mn = 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 , xn . 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 ) ) , xn . yc = 1 > An ? 1 : An , xn . ab = ( ! Mn || 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 , Nn = Cn . ba + 8 * Cn . i + In , Fn = Cn . ra , On = Cn . sa + 8 * Cn . i + In , En = 0 ; 16 > En ; ++ En ) t ( Tn , Dn + En * Cn . H , Cn . Ea , + ha + En * pa , 16 ) ; for ( En = 0 ; 8 > En ; ++ En ) t ( Pn , Nn + En * Cn . r , Cn . Ea , + ga + En * pa , 8 ) , t ( Fn , 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 = g , pi = di . oa . d ; for ( p ( di . oa . W ) , ui = di . lb ; ui < di . wb ; ++ ui ) { var mi = di , hi = ui , gi = pi , fi = mi . oa , _i = mi . H , vi = fi . M [ 1 + hi ] , yi = mi . ca , bi = mi . da + 16 * fi . ha * _i + 16 * hi , wi = vi . zc , ki = vi . yc , $i = 2 * wi + ki ; if ( 0 != wi ) if ( 1 == mi . A ) hi > 0 && Xa ( yi , bi , _i , $i + 4 ) , vi . ab && Qa ( yi , bi , _i , $i ) , gi > 0 && Za ( yi , bi , _i , $i + 4 ) , vi . ab && Ja ( yi , bi , _i , $i ) ; else { var Si = mi . r , Ci = mi . aa , xi = mi . ba + 8 * fi . ha * Si + 8 * hi , Mi = mi . ra , Ai = mi . sa + 8 * fi . ha * Si + 8 * hi , Ei = mi . Ac . fb ? wi >= 40 ? 2 : wi >= 15 ? 1 : 0 : wi >= 40 ? 3 : wi >= 20 ? 2 : wi >= 15 ? 1 : 0 ; hi > 0 && ( Ha ( yi , bi , _i , $i + 4 , ki , Ei ) , za ( Ci , xi , Mi , Ai , Si , $i + 4 , ki , Ei ) ) , vi . ab && ( Ga ( yi , bi , _i , $i , ki , Ei ) , Ya ( Ci , xi , Mi , Ai , Si , $i , ki , Ei ) ) , gi > 0 && ( qa ( yi , bi , _i , $i + 4 , ki , Ei ) , Va ( Ci , xi , Mi , Ai , Si , $i + 4 , ki , Ei ) ) , vi . ab && ( Wa ( yi , bi , _i , $i , ki , Ei ) , Ka ( Ci , xi , Mi , 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 != h && ci > li && ( 0 == li ? ( Rn . p = U ( Un , li , ci - li ) , Rn . q = 0 ) : Rn . q = U ( Un , li , ci - li ) , Rn . p == h ) ) { 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 != h && ( Rn . q += Rn . width * Ii ) } ci > li && ( Rn . D += Rn . t , Rn . B += Rn . t >> 1 , Rn . C += Rn . t >> 1 , Rn . p != h && ( 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 ] , xo = u ( [ da , ua ] , "" ) ; c ( 4 , f ) ; var Mo = [ [ 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 Nt ( Nt ( e , t [ n + 1 ] ) , t [ n + 0 ] ) } , function ( e , t , n ) { return Nt ( e , t [ n - 1 ] ) } , function ( e , t , n ) { return Nt ( e , t [ n + 0 ] ) } , function ( e , t , n ) { return Nt ( t [ n - 1 ] , t [ n + 0 ] ) } , function ( e , t , n ) { return Nt ( t [ n + 0 ] , t [ n + 1 ] ) } , function ( e , t , n ) { return Nt ( Nt ( e , t [ n - 1 ] ) , Nt ( 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 ( Ft ( ( e >> 24 & 255 ) + ( t [ n + 0 ] >> 24 & 255 ) - ( t [ n - 1 ] >> 24 & 255 ) ) << 24 | Ft ( ( e >> 16 & 255 ) + ( t [ n + 0 ] >> 16 & 255 ) - ( t [ n - 1 ] >> 16 & 255 ) ) << 16 | Ft ( ( e >> 8 & 255 ) + ( t [ n + 0 ] >> 8 & 255 ) - ( t [ n - 1 ] >> 8 & 255 ) ) << 8 | Ft ( ( 255 & e ) + ( 255 & t [ n + 0 ] ) - ( 255 & t [ n - 1 ] ) ) ) >>> 0 } , function ( e , t , n ) { var i = t [ n - 1 ] ; return e = Nt ( 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 } , No = 16 , Fo = 16 , Oo = 16 , Uo = [ 2 , 3 , 7 ] , Ro = [ 3 , 3 , 11 ] , Lo = 0 , Bo = 1 , jo = 2 , qo = 3 , Ho = 4 , Vo = [ Mi + Ai , Mi , Mi , Mi , 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 ) { hn ( e , t , n , i , a , o , s , r , l , c , d , u , p , xt , 3 ) } , gn , function ( e , t , n , i , a , o , s , r , l , c , d , u , p ) { hn ( 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 ) { hn ( e , t , n , i , a , o , s , r , l , c , d , u , p , Mt , 2 ) } , gn , fn , _n , vn ] ; this . Hd = function ( e , t , n , i ) { return Fn ( Ln , e , t , n , i ) } , this . Id = function ( e , t , n , i ) { return Fn ( Bn , e , t , n , i ) } , this . Jd = function ( e , t , n , i ) { return Fn ( Vn , e , t , n , i ) } , this . Ed = function ( e , t , n , i ) { return Fn ( Hn , e , t , n , i ) } , this . Fd = function ( e , t , n , i ) { return Fn ( jn , e , t , n , i ) } , this . Gd = function ( e , t , n , i ) { return Fn ( qn , e , t , n , i ) } , this . WebPDecode = this . Dd = function ( t , n , i ) { var a = e ( ui ) , o = "VP8StatusCode" ; return i == h ? ni : ( o = On ( t , [ 0 ] , [ n ] , i . input ) , o != ei ? o == ri ? ii : o : ( a . j = i . j , a . Qa = i . Qa , o = Nn ( 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 "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 h = d . url || u ; h . match ( /^https?:\/\//i ) || ( h = "http://" + h ) ; var $ ; if ( $ = h . match ( /^https?:\/\/telegram\.me\/(.+)/ ) ) { var x = $ [ 1 ] . split ( "/" ) ; switch ( x [ 0 ] ) { case "joinchat" : h = "tg://join?invite=" + x [ 1 ] ; break ; case "addstickers" : h = "tg://addstickers?set=" + x [ 1 ] ; break ; default : var M = x [ 0 ] . split ( "?" ) ; h = "tg://resolve?domain=" + M [ 0 ] + ( M [ 1 ] ? "&" + M [ 1 ] : "" ) } } _ . push ( '<a href="' , encodeEntities ( h ) , '" 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 , "-" , m * d . coords . column , "-" , m * d . coords . row , '" ' , 'title="' , d . title , '">' , ":" , d . title , ":</span>" ) , c = ! 0 ; break ; case "messageEntityBotCommand" : if ( a . noLinks || a . noCommands || l ) { p = ! 0 ; break } var A , E , I = u . substr ( 1 ) ; - 1 != ( E = I . indexOf ( "@" ) ) ? ( A = I . substr ( E ) , I = I . substr ( 0 , E ) ) : A = a . fromBot , _ . push ( '<a href="' , encodeEntities ( "tg://bot_command?command=" + encodeURIComponent ( I ) + ( A ? "&bot=" + encodeURIComponent ( A ) : "" ) ) , '">' , 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 ) } return _ . push ( encodeEntities ( n . substr ( v ) ) ) , n = t ( _ . join ( "" ) ) , c && ! a . nested && ( n = n . replace ( /\ufe0f|️|�|‍/g , "" , n ) , n = n . replace ( /<span class="emoji emoji-(\d)-(\d+)-(\d+)"(.+?)<\/span>/g , '<span class="emoji emoji-spritesheet-$1" style="background-position: -$2px -$3px;" $4</span>' ) ) , 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 ( h ) 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 ( w ) ; ) 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 , h = - 1 != navigator . userAgent . search ( /OS X|iPhone|iPad|iOS|Android/i ) , g = "\\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 - \ \u06fc \ \u06ff \ \u0750 - \ \u077f \ \u08a0 \ \u08a2 - \ \u08ac \ \u08e4 - \ \u08fe \ \ufb50 - \ \ufbb1 \ \ufbd3 - \ \ufd3d \ \ufd50 - \ \ufd8f \ \ufd92 - \ \ufdc7 \ \ufdf0 - \ \ufdfb \ \ufe70 - \ \ufe74 \ \ufe76 - \ \ufefc \ \u200c \ \u0e01 - \ \u0e3a \ \u0e40 - \ \u0e4e \ \u1100 - \ \u11ff \ \u3130 - \ \u3185 \ \uA960 - \ \uA97F \ \uAC00 - \ \uD7AF \ \uD7B0 - \ \uD7FF \ \u3003 \ \u3005 \ \u303b \ \uff21 - \ \uff3a \ \uff41 - \ \uff5a \ \uff66 - \ \uff9f \ \uffa1 - \ \
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 && h && h ( 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 g = this . processError ( e . result ) ; console . log ( dT ( ) , "Rpc error" , g ) , m && m . reject ( g ) } 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 ) , h && h ( e ) } } , { getNetworker : function ( e , t , n , i ) { return new u ( e , t , n , i ) } , setUpdatesProcessor : function ( e ) { h = e } , stopAll : m , startAll : p } } ] ) , angular . module ( "izhukov.mtproto.wrapper" , [ "izhukov.utils" , "izhukov.mtproto" ] ) . factory ( "MtpApiManager" , [ "Storage" , "MtpAuthorizer" , "MtpNetworkerFactory" , "MtpSingleInstanceService" , "AppRuntimeManager" , "ErrorService" , "qSync" , "$q" , "TelegramMeWebService" , function ( e , t , n , i , a , o , s , r , l ) { function c ( e ) { f !== e && ( f = e , l . setAuthorized ( f ) ) } function d ( t , n ) { e . set ( { dc : t , user _auth : angular . extend ( { dcID : t } , n ) } ) , c ( ! 0 ) , b = t } function u ( ) { 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 ( m ( "auth.logOut" , { } , { dcID : a + 1 } ) ) ; return r . all ( i ) . then ( function ( ) { e . remove ( "dc" , "user_auth" ) , b = ! 1 , c ( ! 1 ) } , function ( n ) { e . remove . apply ( t ) , e . remove ( "dc" , "user_auth" ) , b = ! 1 , n . handled = ! 0 , c ( ! 1 ) } ) } ) } function p ( i , a ) { a = a || { } ; var o = a . fileUpload || a . fileDownload ? v : _ ; if ( ! i ) throw new Exception ( "get Networker without dcID" ) ; if ( void 0 !== o [ i ] ) return s . when ( o [ i ] ) ; var l = "dc" + i + "_auth_key" , c = "dc" + i + "_server_salt" ; return e . get ( l , 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 [ l ] = 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 ) , r . reject ( e ) } ) : r . reject ( { type : "AUTH_KEY_EMPTY" , code : 401 } ) } ) } function m ( t , n , i ) { i = i || { } ; var s , l , d = r . defer ( ) , h = function ( e ) { e ? angular . isObject ( e ) || ( e = { message : e } ) : e = { type : "ERROR_EMPTY" } , d . 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 ? u ( ) [ "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 ) ) } , g = ( new Error ) . stack ; if ( ! g ) try { window . unexistingFunction ( ) } catch ( f ) { g = f . stack || "" } var _ = function ( a ) { return ( l = a ) . wrapApiCall ( t , n , i ) . then ( function ( e ) { d . resolve ( e ) } , function ( o ) { if ( console . error ( dT ( ) , "Error" , o . code , o . type , b , s ) , 401 == o . code && b == s ) e . remove ( "dc" , "user_auth" ) , c ( ! 1 ) , h ( o ) ; else if ( 401 == o . code && b && s != b ) { if ( void 0 === y [ s ] ) { var u = r . defer ( ) ; m ( "auth.exportAuthorization" , { dc _id : s } , { noErrorBox : ! 0 } ) . then ( function ( e ) { m ( "auth.importAuthorization" , { id : e . id , bytes : e . byte
} ) , 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 ) , g [ e . id ] = e , e . thumb && "photoCachedSize" == e . thumb . _ && ( a . saveSmallFile ( e . thumb . location , e . thumb . bytes ) , e . thumb . size = e . thumb . bytes . length , delete e . thumb . bytes , e . thumb . _ = "photoSize" ) } function c ( e ) { if ( void 0 !== f [ e ] ) return f [ e ] ; var t = angular . copy ( g [ e ] ) , n = Math . min ( _ - 80 , Config . Mobile ? 210 : 150 ) , i = Math . min ( v - 100 , Config . Mobile ? 210 : 150 ) , a = t . thumb , o = { placeholder : "img/placeholders/VideoThumbConversation.gif" , width : n , height : i } ; return a && "photoSizeEmpty" != a . _ && ( a . w / a . h > n / i ? o . height = parseInt ( a . h * n / a . w ) : ( o . width = parseInt ( a . w * i / a . h ) , o . width > n && ( o . height = parseInt ( o . height * n / o . width ) , o . width = n ) ) , o . location = a . location , o . size = a . size ) , t . thumb = o , f [ e ] = t } function d ( e ) { var t = c ( e ) , n = Math . min ( $ ( window ) . width ( ) - ( Config . Mobile ? 0 : 60 ) , 542 ) , a = $ ( i ) . height ( ) - ( Config . Mobile ? 92 : 150 ) , o = { placeholder : "img/placeholders/VideoThumbModal.gif" , width : n , height : a } ; if ( t . w && t . h ) { var s = calcImageInBox ( t . w , t . h , n , a ) ; o . width = s . w , o . height = s . h } else o . height = o . width = Math . min ( n , a ) ; return t . full = o , t . fullThumb = angular . copy ( t . thumb ) , t . fullThumb . width = o . width , t . fullThumb . height = o . height , t } function u ( e , i ) { var a = t . $new ( ! 0 ) ; return a . videoID = e , a . messageID = i , n . open ( { templateUrl : templateUrl ( "video_modal" ) , windowTemplateUrl : templateUrl ( "media_modal_layout" ) , controller : "VideoModalController" , scope : a , windowClass : "video_modal_window" } ) } function p ( e ) { var t = g [ e ] , n = f [ e ] || t || { } , i = { _ : "inputVideoFileLocation" , id : e , access _hash : t . access _hash } ; void 0 === n . downloaded && a . getDownloadedFile ( i , t . size ) . then ( function ( ) { n . downloaded = ! 0 } , function ( ) { n . downloaded = ! 1 } ) } function m ( n , i ) { var o = g [ n ] , l = f [ n ] || o || { } , c = o . mime _type || "video/ogg" , d = { _ : "inputVideoFileLocation" , id : n , access _hash : o . access _hash } ; if ( l . downloaded && ! i ) { var u = a . getCachedFile ( d ) ; if ( u ) return r . when ( u ) } l . progress = { enabled : ! l . downloaded , percent : 1 , total : o . size } ; var p = a . downloadFile ( o . dc _id , d , o . size , { mime : c , toFileEntry : i } ) ; return p . then ( function ( t ) { s . getFileCorrectUrl ( t , c ) . then ( function ( t ) { l . url = e . trustAsResourceUrl ( t ) } ) , delete l . progress , l . downloaded = ! 0 , console . log ( "video save done" ) } , function ( e ) { console . log ( "video download failed" , e ) , l . progress . enabled = ! 1 } , function ( e ) { console . log ( "dl progress" , e ) , l . progress . enabled = ! 0 , l . progress . done = e . done , l . progress . percent = Math . max ( 1 , Math . floor ( 100 * e . done / e . total ) ) , t . $broadcast ( "history_update" ) } ) , l . progress . cancel = p . cancel , p } function h ( e ) { { var t = g [ e ] , n = t . mime _type || "video/mp4" , i = n . split ( "." ) [ 1 ] || "mp4" , a = "t_video" + e + "." + i ; f [ e ] || t || { } } s . chooseSave ( a , i , n ) . then ( function ( t ) { t && m ( e , t ) } , function ( ) { m ( e ) . then ( function ( e ) { s . download ( e , n , a ) } ) } ) } var g = { } , f = { } , _ = $ ( window ) . width ( ) , v =
} return _ ( { name : h ( "country_select_modal_country_us_raw" ) , code : "+1" } ) } function _ ( t ) { $ = t , e . credentials . phone _country != t . code ? e . credentials . phone _country = t . code : v ( ) , e . $broadcast ( "country_selected" ) , e . $broadcast ( "value_updated" ) } function v ( ) { var t , n , i , a = ( ( e . credentials . phone _country || "" ) + ( e . credentials . phone _number || "" ) ) . replace ( /\D+/g , "" ) , o = 0 , s = ! 1 ; if ( a . length ) if ( $ && ! a . indexOf ( $ . code . replace ( /\D+/g , "" ) ) ) s = $ . name ; else for ( t = 0 ; t < Config . CountryCodes . length ; t ++ ) for ( n = 2 ; n < Config . CountryCodes [ t ] . length ; n ++ ) i = Config . CountryCodes [ t ] [ n ] . replace ( /\D+/g , "" ) , i . length > o && ! a . indexOf ( i ) && ( o = i . length , s = h ( Config . CountryCodes [ t ] [ 1 ] + "_raw" ) ) ; e . credentials . phone _full = a , e . credentials . phone _country _name = s || h ( "login_controller_unknown_country_raw" ) } function y ( e ) { s . setUserAuth ( k . dcID , { id : e . user . id } ) , i . cancel ( S ) , n . url ( "/im" ) } function b ( ) { i . cancel ( S ) , e . credentials . viaApp || ( -- e . callPending . remaining ? S = i ( b , 1e3 ) : ( e . callPending . success = ! 1 , s . invokeApi ( "auth.sendCall" , { phone _number : e . credentials . phone _full , phone _code _hash : e . credentials . phone _code _hash } , k ) . then ( function ( ) { e . callPending . success = ! 0 } ) ) ) } function w ( ) { return c . getState ( k ) . then ( function ( t ) { return e . password = t } ) } o . dismissAll ( ) , u . start ( ) , s . getUserID ( ) . then ( function ( e ) { return e ? void n . url ( "/im" ) : "http:" != location . protocol || Config . Modes . http || - 1 == Config . App . domains . indexOf ( location . hostname ) ? void m . setAuthorized ( ! 1 ) : void ( location . href = location . href . replace ( /^http:/ , "https:" ) ) } ) ; var k = { dcID : 2 , createNetworker : ! 0 } , $ = ! 1 ; e . credentials = { phone _country : "" , phone _country _name : "" , phone _number : "" , phone _full : "" } , e . progress = { } , e . callPending = { } , e . about = { } , e . chooseCountry = function ( ) { var e = a . open ( { templateUrl : templateUrl ( "country_select_modal" ) , controller : "CountrySelectModalController" , windowClass : "countries_modal_window mobile_modal" , backdrop : "single" } ) ; e . result . then ( _ ) } , e . $watch ( "credentials.phone_country" , v ) , e . $watch ( "credentials.phone_number" , v ) , g ( ) ; var S ; e . sendCode = function ( ) { i . cancel ( S ) , r . confirm ( { type : "LOGIN_PHONE_CORRECT" , country _code : e . credentials . phone _country , phone _number : e . credentials . phone _number } ) . then ( function ( ) { e . progress . enabled = ! 0 , onContentLoaded ( function ( ) { e . $broadcast ( "ui_height" ) } ) ; var n = tsNow ( ) ; s . invokeApi ( "auth.sendCode" , { phone _number : e . credentials . phone _full , api _id : Config . App . id , api _hash : Config . App . hash , lang _code : navigator . language || "en" } , k ) . then ( function ( t ) { e . progress . enabled = ! 1 , e . credentials . phone _code _hash = t . phone _code _hash , e . credentials . phone _occupied = t . phone _registered , e . credentials . viaApp = "auth.sentAppCode" == t . _ , e . callPending . remaining = t . send _call _timeout || 60 , e . error = { } , e . about = { } , b ( ) , onContentLoaded ( function ( ) { e . $broadcast ( "ui_height" ) } ) } , function ( t ) { switch ( e . progress . enabled = ! 1 , console . log ( "sendCode error" , t ) , t . type ) { case "PHONE_NUMBER_INVALID" : e . error = { field : "phone" } , t . handled = ! 0 } } ) [ "finally" ] ( function ( ) { ( t . idle . isIDLE || tsNow ( ) - n > 6e4 ) && l . notify ( { title : "Telegram" , message : "Your authorization key was successfully generated! Open the app to log in." , tag : "auth_key" } ) } ) } ) } , e . sendSms = function ( ) { e . credentials . viaApp && ( delete e . credentials . viaApp , s . invokeApi ( "auth.sendSms" , { phone _number : e . credentials . phone _full , phone _code _hash : e . credentials . phone _code _hash } , k ) . then ( b ) ) } , e . editPhone = function ( ) { i . cancel ( S ) , delete e . credentials . phone _code _hash , delete e . credentials . phone _unoccupied , delete e . credentials . phone _code _valid , delete e . credentials . viaApp , delete e . callPending . remaining , delete e . callPending . success } , e . logIn = function ( t ) { var n = "auth.signIn" , i = { phone _number : e . credentials . phone _full , phone _code _hash : e . credentials . phone _code _hash , phone _code : e . credentials . phone _code } ; t && ( n = "auth.signUp" , angular . extend ( i , { first _name : e . credentials . first _name || "" , last _name : e . credentials . last _name || "" } ) ) , e . progress . enabled = ! 0 , s . invokeApi ( n , i , k ) . then ( y , function ( t ) { if ( e . progress . enabled = ! 1 , 400 == t . code && "PHONE_NUMBER_UNOCCUPIED" == t . type ) return t . handled = ! 0 , e . credentials . phone _code _valid = ! 0 , e . credentials . phone _unoccupied = ! 0 , void ( e . about = { } ) ; if ( 400 == t . code && "PHONE_NUMBER_OCCUPIED" == t . type ) return t . handled = ! 0 , e . logIn ( ! 1 ) ; if ( 401 == t . code && "SESSION_PASSWORD_NEEDED" == t . type ) return e . progress . enabled = ! 0 , w ( ) . then ( function ( ) { e . pro
} ) , e . replyKeyboardToggle = b , e . toggleSlash = v ; var x = ! 1 } ] ) . controller ( "AppLangSelectController" , [ "$scope" , "_" , "Storage" , "ErrorService" , "AppRuntimeManager" , function ( e , t , n , i , a ) { e . supportedLocales = Config . I18n . supported , e . langNames = Config . I18n . languages , e . curLocale = Config . I18n . locale , e . form = { locale : Config . I18n . locale } , e . localeSelect = function ( t ) { t = t || e . form . locale , e . curLocale !== t && i . confirm ( { type : "APPLY_LANG_WITH_RELOAD" } ) . then ( function ( ) { n . set ( { i18n _locale : t } ) . then ( function ( ) { a . reload ( ) } ) } , function ( ) { e . form . locale = e . curLocale } ) } } ] ) . controller ( "AppFooterController" , [ "$scope" , "LayoutSwitchService" , function ( e , t ) { e . switchLayout = function ( e ) { t . switchLayout ( e ) } } ] ) . controller ( "PhotoModalController" , [ "$q" , "$scope" , "$rootScope" , "$modalInstance" , "AppPhotosManager" , "AppMessagesManager" , "AppPeersManager" , "AppWebPagesManager" , "PeersSelectService" , "ErrorService" , function ( e , t , n , i , a , o , s , r , l , c ) { function d ( e ) { var n = 0 > e ? [ - 1 , - 2 ] : [ 1 , 2 ] , i = v . indexOf ( t . messageID ) ; angular . forEach ( n , function ( e ) { var t = v [ i + e ] ; if ( void 0 !== t && void 0 === y [ t ] ) { y [ t ] = ! 0 ; var n = o . getMessage ( t ) , s = n . media . photo . id ; a . preloadPhoto ( s ) } } ) } function u ( e ) { var n = v . indexOf ( t . messageID ) ; w ? e && ( t . count = Math . max ( e , v . length ) ) : t . count = v . length , t . pos = t . count - n , t . nav . hasNext = n > 0 , t . nav . hasPrev = w || n < v . length - 1 , t . canForward = t . canDelete = t . messageID > 0 } function p ( n ) { var i = v . indexOf ( t . messageID ) , s = i >= 0 ? i + n : 0 , r = ++ k , l = s >= v . length ? m ( ) : e . when ( ) ; l . then ( function ( ) { if ( r == k ) { var e = v [ s ] , i = o . getMessage ( e ) , l = i && i . media && ( i . media . photo && i . media . photo . id || i . media . webpage && i . media . webpage . photo && i . media . webpage . photo . id ) ; if ( ! l ) return void console . error ( "Invalid photo message" , s , v , e , i ) ; t . messageID = e , t . photoID = l , t . photo = a . wrapForFull ( t . photoID ) , y [ t . messageID ] = ! 0 , u ( ) , n > 0 && w && v . indexOf ( e ) + 1 >= v . length ? m ( ) : d ( n ) } } ) } function m ( ) { return $ ? $ : $ = o . getSearch ( g , f , _ , b ) . then ( function ( t ) { return t . history . length ? ( b = t . history [ t . history . length - 1 ] , v = v . concat ( t . history ) , w = v . length < t . count ) : w = ! 1 , u ( t . count ) , $ = ! 1 , t . history . length ? e . reject ( ) : void d ( 1 ) } ) } if ( t . photo = a . wrapForFull ( t . photoID ) , t . nav = { } , t . download = function ( ) { a . downloadPhoto ( t . photoID ) } , t . messageID ) { t . forward = function ( ) { var e = t . messageID ; l . selectPeers ( { confirm _type : "FORWARD_PEER" } ) . then ( function ( t ) { angular . forEach ( t , function ( i ) { var a = s . getPeerID ( i ) ; o . forwardMessages ( a , [ e ] ) . then ( function ( ) { 1 == t . length && n . $broadcast ( "history_focus" , { peerString : i } ) } ) } ) } ) } , t . goToMessage = function ( ) { var e = t . messageID , a = o . getMessagePeer ( o . getMessage ( e ) ) , r = s . getPeerString ( a ) ; i . dismiss ( ) , n . $broadcast ( "history_focus" , { peerString : r , messageID : e } ) } , t [ "delete" ] = function ( ) { var e = t . messageID ; c . confirm ( { type : "MESSAGE_DELETE" } ) . then ( function ( ) { o . deleteMessages ( [ e ] ) } ) } ; var h = o . getMessagePeer ( o . getMessage ( t . messageID ) ) , g = s . getInputPeerByID ( h ) , f = "" , _ = { _ : "inputMessagesFilterPhotos" } , v = [ t . messageID ] , y = { } , b = t . messageID , w = ! 0 ; if ( y [ t . messageID ] = ! 0 , u ( ) , t . nav . next = function ( ) { return t . nav . hasNext ? void p ( - 1 ) : ! 1 } , t . nav . prev = function ( ) { return t . nav . hasPrev ? void p ( 1 ) : ! 1 } , t . $on ( "history_delete" , function ( e , n ) { if ( n . peerID == h ) { if ( n . msgs [ t . messageID ] ) if ( t . nav . hasNext ) t . nav . next ( ) ; else { if ( ! t . nav . hasPrev ) return i . dismiss ( ) ; t . nav . prev ( ) } for ( var a = [ ] , o = 0 ; o < v . length ; o ++ ) n . msgs [ v [ o ] ] || a . push ( v [ o ] ) ; v = a } } ) , t . webpageID ) return void ( t . webpage = r . wrapForHistory ( t . webpageID ) ) ; o . getSearch ( g , f , _ , 0 , 1e3 ) . then ( function ( e ) { e . history . indexOf ( t . messageID ) >= 0 && ( v = e . history , b = v [ v . length - 1 ] , u ( ) , d ( 1 ) ) , m ( ) } , m ) ; var k = 0 , $ = ! 1 } } ] ) . controller ( "UserpicModalController" , [ "$q" , "$scope" , "$rootScope" , "$modalInstance" , "MtpApiManager" , "AppPhotosManager" , "AppUsersManager" , "AppPeersManager" , "AppMessagesManager" , "ApiUpdatesManager" , "PeersSelectService" , "ErrorService" , function ( e , t , n , i , a , o , s , r , l , c , d , u ) { function p ( n , i ) { var a = f . indexOf ( t . photoID ) , s = a >= 0 ? a + n : 0 , r = ++ w , l = s >= f . length ? h ( ) : e . when ( ) ; l . then ( function ( ) { if ( r == w ) { t . photoID = f [ s ] , t . photo = o . wrapForFull ( t . photoID ) , t . photo . thumb = { location : o . choosePhotoSize ( t . photo , 0 , 0 ) . location } ; var e ; i && ( f . splice ( a , 1 ) , e = t . count - 1 ) , g ( e ) , v [ t . photoID ] = ! 0 , g ( ) , n > 0 && b && f . indexOf ( t . photoID ) + 1 >= f . length ? h ( ) : m ( n ) } } ) } function m ( e ) { var n = 0 > e ? [ - 1 , - 2 ] : [ 1 , 2 ] , i = f . indexOf ( t . photoID ) ; angular . forEach ( n , function ( e ) { var t = f [ i + e ] ; void 0 !== t && void 0 === v [ t ] && ( v [ t ] = ! 0 , o . preloa
} ) } } } ] ) . controller ( "ChannelEditModalController" , [ "$q" , "$scope" , "$modalInstance" , "$rootScope" , "MtpApiManager" , "AppUsersManager" , "AppChatsManager" , "AppProfileManager" , "ApiUpdatesManager" , function ( e , t , n , i , a , o , s , r , l ) { function c ( ) { return a . invokeApi ( "channels.editTitle" , { channel : s . getChannelInput ( t . chatID ) , title : t . channel . title } ) . then ( function ( e ) { l . processUpdateMessage ( e ) } ) } function d ( ) { return a . invokeApi ( "channels.editAbout" , { channel : s . getChannelInput ( t . chatID ) , about : t . channel . about } ) } var u = s . getChat ( t . chatID ) , p = { title : u . title } ; t . channel = { title : u . title } , r . getChannelFull ( t . chatID ) . then ( function ( e ) { p . about = e . about , t . channel . about = e . about } ) , t . updateChannel = function ( ) { if ( t . channel . title . length ) { var n = [ ] ; return t . channel . title != p . title && n . push ( c ( ) ) , t . channel . about != p . about && n . push ( d ( ) ) , e . all ( n ) . then ( function ( ) { var e = s . getChatString ( t . chatID ) ; i . $broadcast ( "history_focus" , { peerString : e } ) } ) [ "finally" ] ( function ( ) { delete t . channel . updating } ) } } } ] ) . controller ( "ChatInviteLinkModalController" , [ "_" , "$scope" , "$timeout" , "$modalInstance" , "AppChatsManager" , "AppProfileManager" , "ErrorService" , function ( e , t , n , i , a , o , s ) { function r ( ) { n ( function ( ) { t . $broadcast ( "ui_invite_select" ) } , 100 ) } function l ( e ) { var n = a . getChat ( t . chatID ) ; return n . username ? ( t . exportedInvite = { link : "https://telegram.me/" + n . username , "short" : ! 0 } , void r ( ) ) : ( e && ( t . exportedInvite . revoking = ! 0 ) , void o . getChatInviteLink ( t . chatID , e ) . then ( function ( e ) { t . exportedInvite = { link : e , canRevoke : ! 0 } , r ( ) } ) [ "finally" ] ( function ( ) { delete t . exportedInvite . revoking } ) ) } t . exportedInvite = { link : e ( "group_invite_link_loading_raw" ) } ; var c = a . isChannel ( t . chatID ) ; t . revokeLink = function ( ) { s . confirm ( { type : c ? "REVOKE_CHANNEL_INVITE_LINK" : "REVOKE_GROUP_INVITE_LINK" } ) . then ( function ( ) { l ( ! 0 ) } ) } , l ( ) } ] ) . controller ( "ImportContactModalController" , [ "$scope" , "$modalInstance" , "$rootScope" , "AppUsersManager" , "ErrorService" , "PhonebookContactsService" , function ( e , t , n , i , a , o ) { void 0 === e . importContact && ( e . importContact = { } ) , e . phonebookAvailable = o . isAvailable ( ) , e . doImport = function ( ) { e . importContact && e . importContact . phone && ( e . progress = { enabled : ! 0 } , i . importContact ( e . importContact . phone , e . importContact . first _name || "" , e . importContact . last _name || "" ) . then ( function ( e ) { e || a . show ( { error : { code : 404 , type : "USER_NOT_USING_TELEGRAM" } } ) , t . close ( e ) } ) [ "finally" ] ( function ( ) { delete e . progress . enabled } ) ) } , e . importPhonebook = function ( ) { o . openPhonebookImport ( ) . result . then ( function ( e ) { e ? t . close ( e [ 0 ] ) : t . dismiss ( ) } ) } } ] ) . controller ( "CountrySelectModalController" , [ "$scope" , "$modalInstance" , "$rootScope" , "_" , function ( e , t , n , i ) { e . search = { } , e . slice = { limit : 20 , limitDelta : 20 } ; for ( var a = SearchIndexManager . createIndex ( ) , o = 0 ; o < Config . CountryCodes . length ; o ++ ) { var s = Config . CountryCodes [ o ] [ 0 ] ; s += " " + i ( Config . CountryCodes [ o ] [ 1 ] + "_raw" ) , s += " " + Config . CountryCodes [ o ] . slice ( 2 ) . join ( " " ) , SearchIndexManager . indexObject ( o , s , a ) } e . $watch ( "search.query" , function ( t ) { var n = ! 1 , o = { } ; angular . isString ( t ) && t . length && ( n = ! 0 , o = SearchIndexManager . search ( t , a ) ) , e . countries = [ ] , e . slice . limit = 20 ; for ( var s , r = 0 ; r < Config . CountryCodes . length ; r ++ ) if ( ! n || o [ r ] ) for ( s = 2 ; s < Config . CountryCodes [ r ] . length ; s ++ ) e . countries . push ( { name : i ( Config . CountryCodes [ r ] [ 1 ] + "_raw" ) , code : Config . CountryCodes [ r ] [ s ] } ) ; String . prototype . localeCompare && e . countries . sort ( function ( e , t ) { return e . name . localeCompare ( t . name ) } ) } ) } ] ) . controller ( "PhonebookModalController" , [ "$scope" , "$modalInstance" , "$rootScope" , "AppUsersManager" , "PhonebookContactsService" , "ErrorService" , function ( e , t , n , i , a , o ) { function s ( ) { var t = ! 1 , n = { } ; if ( angular . isString ( e . search . query ) && e . search . query . length ) { t = ! 0 , n = SearchIndexManager . search ( e . search . query , r ) , e . contacts = [ ] , delete e . contactsEmpty ; for ( var i = 0 ; i < e . phonebook . length ; i ++ ) ( ! t || n [ i ] ) && e . contacts . push ( e . phonebook [ i ] ) } else e . contacts = e . phonebook , e . contactsEmpty = ! e . contacts . length ; e . slice . limit = 20 } e . search = { } , e . phonebook = [ ] , e . selectedContacts = { } , e . selectedCount = 0 , e . slice = { limit : 20 , limitDelta : 20 } , e . progress = { enabled : ! 1 } , e . multiSelect = ! 0 ; var r = SearchIndexManager . createIndex ( ) , l = ! 1 ; a . getPhonebookContacts ( ) . then ( function ( t ) { for ( var n = 0 ; n < t . length ; n ++ ) SearchIndexManager . indexObject ( n , t [ n ] . first _name + " " + t [ n ] . last _name + " " + t [ n ] . phones . joi
o . grouped = m && o . fwdFromID && o . fwdFromID == s . fwdFromID ? h ? "im_grouped_fwd_short" : "im_grouped_fwd" : ! o . fwdFromID && h ? "im_grouped_short" : "im_grouped" , m && o . fwdFromID && ( s . grouped || ( s . grouped = "im_grouped_fwd_start" ) , o . grouped && n == d - 1 && ( o . grouped += " im_grouped_fwd_end" ) ) } else ( s || ! n ) && ( delete o . grouped , m && s && s . grouped && s . fwdFromID && ( s . grouped += " im_grouped_fwd_end" ) ) ; p || l == ( s && s . grouped ) || ( p = ! 0 ) , s = o , a = i } return p || r == ( s && s . grouped ) || ( p = ! 0 ) , p } function ut ( e ) { Rt !== ! 1 && e && e > Rt && b . set ( { max _seen _msg : e } ) } function pt ( e , n ) { n = n || { } ; var i , a , o = ot ( e ) , s = { } , c = ! 1 , d = v . getNotifySettings ( ) ; if ( e . fwdFromID && n . fwd _count ) c = Bt ( n . fwd _count ) ; else if ( e . message ) c = d . nopreview ? x ( "conversation_message_sent" ) : _ . wrapPlainText ( e . message ) ; else if ( e . media ) switch ( e . media . _ ) { case "messageMediaPhoto" : c = x ( "conversation_media_photo_raw" ) ; break ; case "messageMediaVideo" : c = x ( "conversation_media_video_raw" ) ; break ; case "messageMediaDocument" : if ( e . media . document . sticker ) { c = x ( "conversation_media_sticker" ) ; var u = e . media . document . stickerEmojiRaw ; void 0 !== u && ( c = _ . wrapPlainText ( u ) + " (" + c + ")" ) } else c = e . media . document . file _name || x ( "conversation_media_document_raw" ) ; break ; case "messageMediaAudio" : c = x ( "conversation_media_audio_raw" ) ; break ; case "messageMediaGeo" : case "messageMediaVenue" : c = x ( "conversation_media_location_raw" ) ; break ; case "messageMediaContact" : c = x ( "conversation_media_contact_raw" ) ; break ; default : c = x ( "conversation_media_attachment_raw" ) } else if ( "messageService" == e . _ ) switch ( e . action . _ ) { case "messageActionChatCreate" : c = x ( "conversation_group_created_raw" ) ; break ; case "messageActionChatEditTitle" : c = x ( "conversation_group_renamed_raw" ) ; break ; case "messageActionChatEditPhoto" : c = x ( "conversation_group_photo_updated_raw" ) ; break ; case "messageActionChatDeletePhoto" : c = x ( "conversation_group_photo_removed_raw" ) ; break ; case "messageActionChatAddUser" : c = x ( e . action . user _id == e . from _id ? "conversation_returned_to_group" : "conversation_invited_user_message_raw" ) ; break ; case "messageActionChatDeleteUser" : c = x ( e . action . user _id == e . from _id ? "conversation_left_group" : "conversation_kicked_user_message_raw" ) ; break ; case "messageActionChatJoinedByLink" : c = x ( "conversation_joined_by_link" ) ; break ; case "messageActionChannelCreate" : c = x ( "conversation_created_channel" ) ; break ; case "messageActionChannelEditTitle" : c = x ( "conversation_changed_channel_name" ) ; break ; case "messageActionChannelEditPhoto" : c = x ( "conversation_changed_channel_photo" ) ; break ; case "messageActionChannelDeletePhoto" : c = x ( "conversation_removed_channel_photo" ) } if ( o > 0 ) { var p = r . getUser ( e . from _id ) , m = r . getUserPhoto ( e . from _id ) ; s . title = ( p . first _name || "" ) + ( p . first _name && p . last _name ? " " : "" ) + ( p . last _name || "" ) , s . title || ( s . title = p . phone || x ( "conversation_unknown_user_raw" ) ) , a = m , i = r . getUserString ( o ) } else { if ( s . title = l . getChat ( - o ) . title || x ( "conversation_unknown_chat_raw" ) , e . from _id > 0 ) { var p = r . getUser ( e . from _id ) ; s . title = ( p . first _name || p . last _name || x ( "conversation_unknown_user_raw" ) ) + " @ " + s . title } a = l . getChatPhoto ( - o ) , i = l . getChatString ( - o ) } s . title = _ . wrapPlainText ( s . title ) , s . onclick = function ( ) { t . $broadcast ( "history_focus" , { peerString : i , messageID : 16 & e . flags ? e . mid : 0 } ) } , s . message = c , s . image = a . placeholder , s . key = "msg" + e . mid , s . tag = i , a . location && ! a . location . empty ? f . downloadSmallFile ( a . location , a . size ) . then ( function ( t ) { s . image = k . getUrl ( t , "image/jpeg" ) , e . unread && v . notify ( s ) } ) : v . notify ( s ) } function mt ( ) { a . cancel ( Xt ) , Xt = ! 1 , t . $broadcast ( "history_multiappend" , Jt ) , Jt = { } } function ht ( ) { a . cancel ( Qt ) , Qt = ! 1 , angular . forEach ( en , function ( e ) { P ( e ) } ) , t . $broadcast ( "dialogs_multiupdate" , en ) , en = { } } function gt ( ) { a . cancel ( tn ) , tn = ! 1 ; var e = t . idle . isIDLE && C . isOtherDeviceActive ( ) ? 3e4 : 1e3 ; angular . forEach ( nn , function ( t ) { t . isMutedPromise . then ( function ( n ) { var i = t . top _message ; ! n && i . unread && setTimeout ( function ( ) { i . unread && pt ( i , { fwd _count : t . fwd _count } ) } , e ) } ) } ) , nn = { } } function ft ( n ) { var i = - n , a = c . getInputPeerByID ( i ) ; return e . all ( [ w . getChannelFull ( n , ! 0 ) , B ( a , 0 ) ] ) . then ( function ( e ) { var a = e [ 0 ] , o = e [ 1 ] , s = o . history [ 0 ] , r = { _ : "dialogChannel" , peer : c . getOutputPeer ( i ) , top _message : s , top _important _message : s , read _inbox _max _id : a . read _inbox _max _id , unread _count : a . unread _count , unread _important _count : a . unread _important _count , notify _settings : a . notify _settings } ; E ( n , r )
} ] ) , 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 , h , g , 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 , h = n . length ; h > l ; l ++ ) for ( m = i [ l ] [ 1 ] , c = 0 , g = n [ l ] . length ; g > 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 ) , 200 ) ) } , 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 ( ) } , 400 ) } } , EmojiTooltip . prototype . createTooltip = function ( ) { if ( this . tooltipEl ) return ! 1 ; var e = this ; return this . tooltipEl = $ ( '<div class="composer_emoji_tooltip noselect"><div class="composer_emoji_tooltip_tabs"></div><div class="composer_emoji_tooltip_content clearfix"></div><div class="composer_emoji_tooltip_footer"><a class="composer_emoji_tooltip_settings"></a></div><div class="composer_emoji_tooltip_tail"><i class="icon icon-tooltip-tail"></i></div></div>' ) . appendTo ( document . body ) , this . tabsEl = $ ( ".composer_emoji_tooltip_tabs" , this . tooltipEl ) , this . contentEl = $ ( ".composer_emoji_tooltip_content" , this . tooltipEl ) , this . footerEl = $ ( ".composer_emoji_tooltip_footer" , this . tooltipEl ) , this . settingsEl = $ ( ".composer_emoji_tooltip_settings" , this . tooltipEl ) , angular . forEach ( [ "recent" , "smile" , "flower" , "bell" , "car" , "grid" , "stickers" ] , function ( t , n ) { var i = $ ( '<a class="composer_emoji_tooltip_tab composer_emoji_tooltip_tab_' + t + '"></a>' ) . on ( "mousedown" , function ( t ) { return e . selectTab ( n ) , cancelEvent ( t ) } ) . appendTo ( e . tabsEl ) ; Config . Navigator . touch || i . on ( "mouseenter mouseleave" , function ( t ) { clearTimeout ( e . selectTabTimeout ) , "mouseenter" == t . type && ( e . selectTabTimeout = setTimeout ( function ( ) { e . selectTab ( n ) } , 300 ) ) } ) } ) , this . scroller = new Scroller ( this . contentEl , { classPrefix : "composer_emoji_tooltip" } ) , this . contentEl . on ( "mousedown" , function ( t ) { t = t . originalEvent || t ; var n , i , a , o = $ ( t . target ) ; return "A" != o [ 0 ] . tagName && ( o = $ ( o [ 0 ] . parentNode ) ) , ( n = o . attr ( "data-code" ) ) && ( e . onEmojiSelected && e . onEmojiSelected ( n ) , EmojiHelper . pushPopularEmoji ( n ) ) , ( i = o . attr ( "data-sticker" ) ) && ( e . onStickerSelected && e . onStickerSelected ( i ) , Config . Mobile && e . hide ( ) ) , ( a = o . attr ( "data-stickerset" ) ) && ( e . onStickersetSelected && e . onStickersetSelected ( a ) , e . hide ( ) ) , cancelEvent ( t ) } ) , Config . Navigator . touch || this . tooltipEl . on ( "mouseenter mouseleave" , function ( t ) { "mouseenter" == t . type ? e . onMouseEnter ( ) : e . onMouseLeave ( ) } ) , this . selectTab ( 0 ) , $ ( window ) . on ( "resize" , this . updatePosition . bind ( this ) ) , ! 0 } , EmojiTooltip . prototype . selectTab = function ( e ) { return this . tab === e && 6 !=
} , 100 ) ) : ( setFieldSelection ( c ) , c . value && c . select ( ) ) , cancelEvent ( n ) ; if ( m && 13 == n . keyCode ) { var i = $ ( l ) . find ( ".im_dialog_selected" ) [ 0 ] || $ ( l ) . find ( ".im_dialog_wrap a" ) [ 0 ] ; return i && $ ( i ) . trigger ( "mousedown" ) , cancelEvent ( n ) } if ( n . altKey && n . shiftKey && ! n . ctrlKey && ! n . metaKey && n . keyCode >= 49 && n . keyCode <= 57 ) { var a = n . keyCode - 49 , o = $ ( l ) . find ( ".im_dialog_wrap" ) , s = o [ a ] ; return s && ( $ ( s ) . find ( "a" ) . trigger ( "mousedown" ) , scrollToNode ( l , s , r ) ) , cancelEvent ( n ) } var d , p , h , g = Config . Modes . packed ; if ( 40 == n . keyCode || 38 == n . keyCode ? ( d = 40 == n . keyCode , p = ! d , h = ! n . shiftKey && n . altKey ) : g && 9 == n . keyCode && n . ctrlKey && ! n . metaKey && ( d = ! n . shiftKey , p = ! d , h = ! 0 ) , d || p ) { if ( ! h && ( ! m || n . metaKey ) ) return ! 0 ; var s , i = ! h && $ ( l ) . find ( ".im_dialog_selected" ) [ 0 ] || $ ( l ) . find ( ".active a.im_dialog" ) [ 0 ] , f = i && i . parentNode ; if ( f ) { var s = i [ d ? "nextSibling" : "previousSibling" ] ; if ( ! s || ! s . className || - 1 == s . className . indexOf ( "im_dialog_wrap" ) ) { var o = $ ( l ) . find ( ".im_dialog_wrap" ) , _ = o . index ( i . parentNode ) , v = _ + ( d ? 1 : - 1 ) ; s = o [ v ] } } else { var o = $ ( l ) . find ( ".im_dialog_wrap" ) ; s = d ? o [ 0 ] : o [ o . length - 1 ] } return h ? s && $ ( s ) . find ( "a" ) . trigger ( "mousedown" ) : ( f && s && $ ( f ) . find ( "a" ) . removeClass ( "im_dialog_selected" ) , s && $ ( s ) . find ( "a" ) . addClass ( "im_dialog_selected" ) ) , s && scrollToNode ( l , s , r ) , cancelEvent ( n ) } } var r = $ ( ".im_dialogs_wrap" , a ) [ 0 ] , l = $ ( ".im_dialogs_scrollable_wrap" , a ) [ 0 ] , c = $ ( ".im_dialogs_search_field" , a ) [ 0 ] , d = $ ( ".im_dialogs_panel" , a ) [ 0 ] , u = $ ( ".im_dialogs_search_clear" , a ) [ 0 ] , p = $ ( ".im_dialogs_tabs_wrap" , a ) [ 0 ] , m = ! 1 ; $ ( c ) . on ( "focus blur" , function ( e ) { m = "focus" == e . type , m || ( $ ( l ) . find ( ".im_dialog_selected" ) . removeClass ( "im_dialog_selected" ) , c . value || t . $emit ( "ui_dialogs_search_clear" ) ) } ) , t . $on ( "dialogs_search_toggle" , function ( ) { $ ( d ) . addClass ( "im_dialogs_panel_search" ) , t . $broadcast ( "ui_dialogs_search" ) , $ ( n ) . scrollTop ( 0 ) , i ( function ( ) { setFieldSelection ( c ) } ) } ) , t . $on ( "search_clear" , function ( ) { $ ( d ) . removeClass ( "im_dialogs_panel_search" ) , t . $broadcast ( "ui_dialogs_search" ) } ) , o . $observe ( "hasTabs" , function ( e ) { e = "true" == e , $ ( p ) . toggle ( e ) , t . $broadcast ( "ui_dialogs_tabs" , e ) } ) , $ ( document ) . on ( "keydown" , s ) , t . $on ( "$destroy" , function ( ) { $ ( document ) . off ( "keydown" , s ) } ) , t . $on ( "ui_dialogs_change" , function ( ) { onContentLoaded ( function ( ) { var e = $ ( l ) . find ( ".active a.im_dialog" ) [ 0 ] ; e && scrollToNode ( l , e . parentNode , r ) } ) } ) } return { link : a } } ] ) . directive ( "myDialogsList" , [ "$window" , "$timeout" , function ( e , t ) { function n ( n , i , a ) { function o ( ) { if ( u && u . offsetHeight || ( u = $ ( d ) [ 0 ] ) , a . modal ) { var t = $ ( e ) . height ( ) - ( u ? u . offsetHeight : 58 ) - ( Config . Mobile ? 46 : 200 ) ; return t = Math . min ( 350 , t ) , $ ( i ) . css ( { height : t } ) , void g ( ) } c && c . offsetHeight || ( c = $ ( ".tg_page_head" ) [ 0 ] ) , p && p . offsetHeight || ( p = $ ( ".footer_wrap" ) [ 0 ] ) , r && r . offsetHeight || ( r = $ ( ".im_dialogs_col_wrap" ) [ 0 ] ) ; var n = p ? p . offsetHeight : 0 ; n && n ++ , $ ( i ) . css ( { height : $ ( e ) . height ( ) - n - ( c ? c . offsetHeight : 48 ) - ( u ? u . offsetHeight : 58 ) - parseInt ( $ ( r ) . css ( "paddingBottom" ) || 0 ) } ) , g ( ) } var s = $ ( ".im_dialogs_wrap" , i ) [ 0 ] , r = $ ( ".im_dialogs_col_wrap" ) [ 0 ] , l = $ ( ".im_dialogs_scrollable_wrap" , i ) [ 0 ] , c = $ ( ".tg_page_head" ) [ 0 ] , d = Config . Mobile && a . modal ? ".mobile_modal_body .im_dialogs_panel" : ".im_dialogs_panel" , u = $ ( d ) [ 0 ] , p = $ ( ".footer_wrap" ) [ 0 ] , m = ! 1 , h = ! 1 ; onContentLoaded ( function ( ) { $ ( s ) . nanoScroller ( { preventPageScrolling : ! 0 , tabIndex : - 1 , iOSNativeScrolling : ! 0 } ) } ) ; var g = function ( ) { onContentLoaded ( function ( ) { $ ( s ) . nanoScroller ( ) } ) } ; n . $on ( "ui_dialogs_prepend" , g ) , n . $on ( "ui_dialogs_tabs" , function ( e , t ) { m = t , o ( ) } ) , n . $on ( "ui_dialogs_search" , o ) , n . $on ( "ui_dialogs_update" , o ) , n . $on ( "ui_dialogs_append" , function ( ) { onContentLoaded ( function ( ) { g ( ) , h = ! 1 , t ( function ( ) { $ ( l ) . trigger ( "scroll" ) } ) } ) } ) , n . $on ( "ui_dialogs_change" , function ( ) { onContentLoaded ( function ( ) { g ( ) , h = ! 1 , t ( function ( ) { $ ( l ) . trigger ( "scroll" ) } ) } ) } ) , $ ( l ) . on ( "scroll" , function ( ) { i . is ( ":visible" ) && ! h && l . scrollTop >= l . scrollHeight - l . clientHeight - 300 && ( n . $emit ( "dialogs_need_more" ) , h = ! 0 ) } ) , $ ( e ) . on ( "resize" , o ) , o ( ) , setTimeout ( o , 1e3 ) } return { link : n } } ] ) . directive ( "myContactsList" , [ "$window" , "$timeout" , function ( e ) { function t ( t , n ) { function i ( ) { $ ( n ) . css ( { height : $ ( e ) . height ( ) - ( o && o . offsetHeight || 0 ) - ( a && a . offsetHeight || 0 ) - ( Config . Mobile ? 64 : 200 ) } ) , $ ( s ) . nanoScroller ( ) } var a = $ ( ".contacts_modal_search" ) [ 0 ] , o = $ ( ".contacts_modal_panel" ) [ 0 ] , s = $ ( ".contacts_wrap" , n ) [ 0 ] ; onContentLoaded ( function ( ) { $ (
else { if ( void 0 === i . layerX ) return cancelEvent ( i ) ; _ = i . layerX , h = i . pageX - _ } return m = u + _ / r * ( p - u ) , d ? t . $eval ( d , { value : m } ) : t . $eval ( c + "=" + m ) , s . css ( "left" , Math . max ( 0 , _ - l ) ) , o . css ( "width" , _ ) , $ ( e ) . on ( "mousemove touchmove" , g ) , $ ( e ) . on ( "mouseup touchend touchcancel touchleave" , f ) , cancelEvent ( i ) } ) } return { link : t , templateUrl : templateUrl ( "slider" ) } } ] ) . directive ( "myLabeledInput" , function ( ) { function e ( e , t ) { var n = $ ( ".md-input:first" , t ) , i = ( $ ( ".md-input-label:first" , t ) , n [ 0 ] && "SPAN" == n [ 0 ] . tagName ) , a = ! 1 , o = function ( ) { i ? t . toggleClass ( "md-input-has-value" , n . html ( ) . length > 0 ) : t . toggleClass ( "md-input-has-value" , a || n . val ( ) . length > 0 ) } ; o ( ) , onContentLoaded ( function ( ) { o ( ) , setZeroTimeout ( function ( ) { t . addClass ( "md-input-animated" ) } ) } ) , i || n . on ( "blur focus change" , function ( e ) { a = "focus" == e . type , t . toggleClass ( "md-input-focused" , a ) , o ( ) } ) , e . $on ( "value_updated" , function ( ) { setZeroTimeout ( function ( ) { o ( ) } ) } ) } return { link : e } } ) . directive ( "myCopyField" , function ( ) { function e ( e , t ) { t . attr ( "readonly" , "true" ) , t [ 0 ] . readonly = ! 0 , t . on ( "click" , function ( ) { this . select ( ) } ) , e . selectEvent && e . $on ( e . selectEvent , function ( ) { setTimeout ( function ( ) { t [ 0 ] . focus ( ) , t [ 0 ] . select ( ) } , 100 ) } ) } return { scope : { selectEvent : "=myCopyField" } , link : e } } ) . directive ( "mySubmitOnEnter" , function ( ) { function e ( e , t ) { t . on ( "keydown" , function ( e ) { return 13 == e . keyCode ? ( t . trigger ( "submit" ) , cancelEvent ( e ) ) : void 0 } ) } return { link : e } } ) . directive ( "myScrollToOn" , function ( ) { return { link : function ( e , t , n ) { var i = n . myScrollToOn , a = function ( ) { onContentLoaded ( function ( ) { $ ( "html, body" ) . animate ( { scrollTop : t . offset ( ) . top } , 200 ) } ) } ; "$init" == i ? a ( ) : e . $on ( i , a ) } } } ) , angular . module ( "myApp.directives" ) . directive ( "myDialogsListMobile" , [ "$window" , "$timeout" , function ( e , t ) { function n ( n , i , a ) { function o ( ) { return d && d . offsetHeight || ( d = $ ( c ) [ 0 ] ) , a . modal ? void $ ( i ) . css ( { height : $ ( e ) . height ( ) - ( d ? d . offsetHeight : 58 ) - 46 } ) : ( l && l . offsetHeight || ( l = $ ( ".tg_page_head" ) [ 0 ] ) , s && s . offsetHeight || ( s = $ ( ".im_dialogs_col_wrap" ) [ 0 ] ) , void $ ( i ) . css ( { height : $ ( e ) . height ( ) - ( l ? l . offsetHeight : 46 ) - ( d ? d . offsetHeight : 58 ) - parseInt ( $ ( s ) . css ( "paddingBottom" ) || 0 ) } ) ) } var s = $ ( ".im_dialogs_col_wrap" ) [ 0 ] , r = i [ 0 ] , l = $ ( ".tg_page_head" ) [ 0 ] , c = a . modal ? ".mobile_modal_body .im_dialogs_panel" : ".im_dialogs_panel" , d = $ ( c ) [ 0 ] , u = ! 1 , p = ! 1 ; n . $on ( "ui_dialogs_tabs" , function ( e , t ) { u = t , o ( ) } ) , n . $on ( "ui_dialogs_search" , o ) , n . $on ( "ui_dialogs_update" , o ) , n . $on ( "ui_dialogs_append" , function ( ) { onContentLoaded ( function ( ) { p = ! 1 , t ( function ( ) { $ ( r ) . trigger ( "scroll" ) } ) } ) } ) , n . $on ( "ui_dialogs_change" , function ( ) { onContentLoaded ( function ( ) { p = ! 1 , t ( function ( ) { $ ( r ) . trigger ( "scroll" ) } ) } ) } ) , $ ( r ) . on ( "scroll" , function ( ) { i . is ( ":visible" ) && ! p && r . scrollTop >= r . scrollHeight - r . clientHeight - 300 && ( n . $emit ( "dialogs_need_more" ) , p = ! 0 ) } ) , $ ( e ) . on ( "resize" , o ) , o ( ) , setTimeout ( o , 1e3 ) } return { link : n } } ] ) . directive ( "myHistoryMobile" , [ "$window" , "$timeout" , "$rootScope" , "$transition" , function ( e , t ) { function n ( n , i ) { function a ( ) { var e , n ; if ( n = $ ( ".im_message_focus:visible" , l ) [ 0 ] ) { var i = l . clientHeight , a = l . scrollTop , o = n . offsetTop , s = n . clientHeight ; ( ! a || o > a + i || a > o + s ) && ( l . scrollTop = Math . max ( 0 , o - Math . floor ( i / 2 ) + 26 ) ) , f = ! 1 } else ( e = $ ( ".im_message_unread_split:visible" , l ) [ 0 ] ) ? ( l . scrollTop = Math . max ( 0 , e . offsetTop - 52 ) , f = ! 1 ) : ( l . scrollTop = l . scrollHeight , f = ! 0 ) ; t ( function ( ) { $ ( l ) . trigger ( "scroll" ) , _ = l . scrollTop } ) } function o ( t ) { if ( i . is ( ":visible" ) || $ ( i [ 0 ] . parentNode . parentNode ) . is ( ":visible" ) ) { $ ( u ) . is ( ":visible" ) && $ ( u ) . css ( { height : $ ( m ) . height ( ) } ) , p && p . offsetHeight || ( p = $ ( ".tg_page_head" ) [ 0 ] ) ; var n = $ ( e ) . height ( ) - d . offsetHeight - ( p ? p . offsetHeight : 46 ) ; $ ( r ) . css ( { height : n } ) , s ( ) , t !== ! 0 && f && onContentLoaded ( function ( ) { l . scrollTop = l . scrollHeight } ) } } function s ( ) { return } var r = $ ( ".im_history_wrap" , i ) [ 0 ] , l = ( $ ( ".im_history_messages" , i ) [ 0 ] , $ ( ".im_history_scrollable_wrap" , i ) [ 0 ] ) , c = $ ( ".im_history_scrollable" , i ) [ 0 ] , d = $ ( ".im_bottom_panel_wrap" , i ) [ 0 ] , u = $ ( ".im_send_form_wrap" , i ) [ 0 ] , p = $ ( ".tg_page_head" ) [ 0 ] , m = $ ( ".im_send_form" , i ) [ 0 ] , h = ! 1 , g = ! 1 ; onContentLoaded ( function ( ) { l . scrollTop = l . scrollHeight } ) , n . $on ( "ui_history_append_new" , function ( e , t ) { if ( f || t . my ) { var n = parseInt ( $ ( l ) . css ( "paddingRight" ) ) ; $ ( l ) . addClass ( "im_history_to_bottom" ) , $ ( c ) . css ( { bottom : 0 , marginLeft : - Math . ceil ( n / 2 ) } ) , onContentLoaded ( function ( ) { $ ( l ) . removeClass ( " im _h