diff --git a/js/app.js b/js/app.js index ca9e41c2..6a4e5a8d 100644 --- a/js/app.js +++ b/js/app.js @@ -22,13 +22,13 @@ e.g+=t,8<=e.g&&8<=e.g&&A(e)}else e.fa=1;return n}function D(e){return e.Pa==e.gb var o;try{o=t.get(i.$normalize(s)+"Directive")}catch(r){throw new Error(s+" could not be found. The name should appear as it exists in the markup, not camelCased as it would appear in the directive declaration, e.g. directive-name not directiveName.")}var l=o[0];if(l.scope!==!0&&l.scope)throw new Error("Cannot use a directive with an isolated scope. The scope must be either true or falsy (e.g. false/null/undefined). Occurred for directive "+s+".");if(l.restrict.indexOf("A")<0)throw new Error('Directives must be usable as attributes. Add "A" to the restrict option (or remove the option entirely). Occurred for directive '+s+".");n.directiveData&&(n.directiveData=angular.fromJson(n.directiveData));var c=e("
")(n);a.append(c)})}}}]).directive("toasterContainer",["$parse","$rootScope","$interval","$sce","toasterConfig","toaster","toasterEventRegistry",function(e,t,n,a,i,s,o){return{replace:!0,restrict:"EA",scope:!0,link:function(t,r,l){function c(e,a){e.timeoutPromise=n(function(){t.removeToast(e.toastId)},a,1)}function d(n,i){if(n.type=g["icon-classes"][n.type],n.type||(n.type=g["icon-class"]),g["prevent-duplicates"]===!0&&t.toasters.length){if(t.toasters[t.toasters.length-1].body===n.body)return;var s,o,r=!1;for(s=0,o=t.toasters.length;s0&&t.toasters.length>g.limit&&t.toasters.pop()):(t.toasters.push(n),g.limit>0&&t.toasters.length>g.limit&&t.toasters.shift()),angular.isFunction(n.onShowCallback)&&n.onShowCallback()}function p(e){var a=t.toasters[e];a.timeoutPromise&&n.cancel(a.timeoutPromise),t.toasters.splice(e,1),angular.isFunction(a.onHideCallback)&&a.onHideCallback()}function u(e){for(var n=t.toasters.length-1;n>=0;n--)m(e)?p(n):t.toasters[n].toastId==e&&p(n)}function m(e){return angular.isUndefined(e)||null===e}var g;g=angular.extend({},i,t.$eval(l.toasterOptions)),t.config={toasterId:g["toaster-id"],position:g["position-class"],title:g["title-class"],message:g["message-class"],tap:g["tap-to-dismiss"],closeButton:g["close-button"],closeHtml:g["close-html"],animation:g["animation-class"],mouseoverTimer:g["mouseover-timer-stop"]},t.$on("$destroy",function(){o.unsubscribeToNewToastEvent(t._onNewToast),o.unsubscribeToClearToastsEvent(t._onClearToasts)}),t.configureTimer=function(e){var t=angular.isNumber(e.timeout)?e.timeout:g["time-out"];"object"==typeof t&&(t=t[e.type]),t>0&&c(e,t)},t.removeToast=function(e){var n,a;for(n=0,a=t.toasters.length;n
{{toaster.title}}
{{toaster.body}}
'}}])}(window,document),function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{var t;t="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,t.Clipboard=e()}}(function(){var e;return function t(e,n,a){function i(o,r){if(!n[o]){if(!e[o]){var l="function"==typeof require&&require;if(!r&&l)return l(o,!0);if(s)return s(o,!0);var c=new Error("Cannot find module '"+o+"'");throw c.code="MODULE_NOT_FOUND",c}var d=n[o]={exports:{}};e[o][0].call(d.exports,function(t){var n=e[o][1][t];return i(n?n:t)},d,d.exports,t,e,n,a)}return n[o].exports}for(var s="function"==typeof require&&require,o=0;os.length)&&(p=s)}for(s={},r=0;r,<\s]+/g,r=/^\s+|\s$/g;e.SearchIndexManager={createIndex:t,indexObject:i,cleanSearchText:n,cleanUsername:a,search:s}}(window),TLSerialization.prototype.createBuffer=function(){this.buffer=new ArrayBuffer(this.maxLength),this.intView=new Int32Array(this.buffer),this.byteView=new Uint8Array(this.buffer)},TLSerialization.prototype.getArray=function(){var e=new ArrayBuffer(this.offset),t=new Int32Array(e);return t.set(this.intView.subarray(0,this.offset/4)),t},TLSerialization.prototype.getBuffer=function(){return this.getArray().buffer},TLSerialization.prototype.getBytes=function(e){if(e){var t=new ArrayBuffer(this.offset),n=new Uint8Array(t);return n.set(this.byteView.subarray(0,this.offset)),n}for(var a=[],i=0;i>>",e.toString(16),e,t),this.checkLength(4),this.intView[this.offset/4]=e,this.offset+=4},TLSerialization.prototype.storeInt=function(e,t){this.writeInt(e,(t||"")+":int")},TLSerialization.prototype.storeBool=function(e,t){e?this.writeInt(2574415285,(t||"")+":bool"):this.writeInt(3162085175,(t||"")+":bool")},TLSerialization.prototype.storeLongP=function(e,t,n){this.writeInt(t,(n||"")+":long[low]"),this.writeInt(e,(n||"")+":long[high]")},TLSerialization.prototype.storeLong=function(e,t){if(angular.isArray(e))return 2==e.length?this.storeLongP(e[0],e[1],t):this.storeIntBytes(e,64,t);"string"!=typeof e&&(e=e?e.toString():"0");var n=bigStringInt(e).divideAndRemainder(bigint(4294967296));this.writeInt(intToUint(n[1].intValue()),(t||"")+":long[low]"),this.writeInt(intToUint(n[0].intValue()),(t||"")+":long[high]")},TLSerialization.prototype.storeDouble=function(e,t){var n=new ArrayBuffer(8),a=new Int32Array(n),i=new Float64Array(n);i[0]=e,this.writeInt(a[0],(t||"")+":double[low]"),this.writeInt(a[1],(t||"")+":double[high]")},TLSerialization.prototype.storeString=function(e,t){this.debug&&console.log(">>>",e,(t||"")+":string"),void 0===e&&(e="");var n=unescape(encodeURIComponent(e));this.checkLength(n.length+8);var a=n.length;a<=253?this.byteView[this.offset++]=a:(this.byteView[this.offset++]=254,this.byteView[this.offset++]=255&a,this.byteView[this.offset++]=(65280&a)>>8,this.byteView[this.offset++]=(16711680&a)>>16);for(var i=0;i>>",bytesToHex(e),(t||"")+":bytes");var n=e.byteLength||e.length;for(this.checkLength(n+8),n<=253?this.byteView[this.offset++]=n:(this.byteView[this.offset++]=254,this.byteView[this.offset++]=255&n,this.byteView[this.offset++]=(65280&n)>>8,this.byteView[this.offset++]=(16711680&n)>>16),this.byteView.set(e,this.offset),this.offset+=n;this.offset%4;)this.byteView[this.offset++]=0},TLSerialization.prototype.storeIntBytes=function(e,t,n){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var a=e.length;if(t%32||8*a!=t)throw new Error("Invalid bits: "+t+", "+e.length);this.debug&&console.log(">>>",bytesToHex(e),(n||"")+":int"+t),this.checkLength(a),this.byteView.set(e,this.offset),this.offset+=a},TLSerialization.prototype.storeRawBytes=function(e,t){e instanceof ArrayBuffer&&(e=new Uint8Array(e));var n=e.length;this.debug&&console.log(">>>",bytesToHex(e),t||""),this.checkLength(n),this.byteView.set(e,this.offset),this.offset+=n},TLSerialization.prototype.storeMethod=function(e,t){var n,a=this.mtproto?Config.Schema.MTProto:Config.Schema.API,i=!1;for(n=0;n=4*this.intView.length)throw new Error("Nothing to fetch: "+e);var t=this.intView[this.offset/4];return this.debug&&console.log("<<<",t.toString(16),t,e),this.offset+=4,t},TLDeserialization.prototype.fetchInt=function(e){return this.readInt((e||"")+":int")},TLDeserialization.prototype.fetchDouble=function(e){var t=new ArrayBuffer(8),n=new Int32Array(t),a=new Float64Array(t);return n[0]=this.readInt((e||"")+":double[low]"),n[1]=this.readInt((e||"")+":double[high]"),a[0]},TLDeserialization.prototype.fetchLong=function(e){var t=this.readInt((e||"")+":long[low]"),n=this.readInt((e||"")+":long[high]"),a=bigint(n).shiftLeft(32).add(bigint(t)).toString();return a},TLDeserialization.prototype.fetchBool=function(e){var t=this.readInt((e||"")+":bool");return 2574415285==t||3162085175!=t&&(this.offset-=4,this.fetchObject("Object",e))},TLDeserialization.prototype.fetchString=function(e){var t=this.byteView[this.offset++];if(254==t)var t=this.byteView[this.offset++]|this.byteView[this.offset++]<<8|this.byteView[this.offset++]<<16;for(var n="",a=0;athis.byteView.byteLength))throw new Error("Invalid raw bytes length: "+e+", buffer len: "+this.byteView.byteLength);if(t){var a=new Uint8Array(e);return a.set(this.byteView.subarray(this.offset,this.offset+e)),this.offset+=e,a}for(var a=[],i=0;i0)for(var d=e.substr(7,e.length-8),p=0;p=97&&e.charAt(0)<=122){for(var p=0;p10485760)return e.reject();if(!(a instanceof Blob)){var i=blobSafeMimeType(a.type||"image/jpeg"),s="data:"+i+";base64,"+bytesToBase64(a);return r(t,n,s).then(function(){return a})}try{var o=new FileReader}catch(c){return h=!1,e.reject()}var d=e.defer();o.onloadend=function(){r(t,n,o.result).then(function(){d.resolve(a)},function(e){d.reject(e)})},o.onerror=function(e){d.reject(e)};try{o.readAsDataURL(a)}catch(c){return h=!1,e.reject()}return d.promise}function r(t,n,a){try{var i=t.transaction([m],IDBTransaction.READ_WRITE||"readwrite").objectStore(m),s=i.put(a,n)}catch(o){return h=!1,e.reject(o)}var r=e.defer();return s.onsuccess=function(e){r.resolve()},s.onerror=function(e){r.reject(e)},r.promise}function l(e){return e.size||e.byteLength||e.length}function c(t){return i().then(function(n){var a=e.defer(),i=n.transaction([m],IDBTransaction.READ||"readonly").objectStore(m),s=i.get(t);return s.onsuccess=function(e){var t=e.target.result;void 0===t?a.reject():"string"==typeof t&&"data:"===t.substr(0,5)?a.resolve(dataUrlToBlob(t)):a.resolve(t)},s.onerror=function(e){a.reject(e)},a.promise})}function d(t,a){var i=n.getFakeFileWriter(a,function(e){s(t,e)});return e.when(i)}t.indexedDB=t.indexedDB||t.webkitIndexedDB||t.mozIndexedDB||t.OIndexedDB||t.msIndexedDB,t.IDBTransaction=t.IDBTransaction||t.webkitIDBTransaction||t.OIDBTransaction||t.msIDBTransaction;var p,u="cachedFiles",m="files",g=2,h=void 0!==t.indexedDB&&void 0!==t.IDBTransaction;h&&navigator.userAgent.indexOf("Safari")!=-1&&navigator.userAgent.indexOf("Chrome")==-1&&navigator.userAgent.match(/Version\/[678]/)&&(h=!1);var f=h||!1;return i(),{name:"IndexedDB",isAvailable:a,saveFile:s,getFile:c,getFileWriter:d}}]).service("TmpfsFileStorage",["$q","$window","FileManager",function(e,t,n){function a(){if(l)return l;if(!t.requestFileSystem)return l=e.reject({type:"FS_BROWSER_UNSUPPORTED",description:"requestFileSystem not present"});var n=e.defer();return t.requestFileSystem(t.TEMPORARY,524288e3,function(e){cachedFs=e,n.resolve()},function(e){c=!1,n.reject(e)}),l=n.promise}function i(){return Config.allow_tmpfs&&c}function s(t,n){return n=n||1,a().then(function(){var a=e.defer();return cachedFs.root.getFile(t,{create:!1},function(e){e.file(function(t){t.size>=n?a.resolve(e):a.reject(new Error("FILE_NOT_FOUND"))},function(e){console.log(dT(),"error",e),a.reject(e)})},function(){a.reject(new Error("FILE_NOT_FOUND"))}),a.promise})}function o(e,t){return r(e).then(function(e){return n.write(e,t).then(function(){return e.finalize()})})}function r(t){return a().then(function(){var a=e.defer();return cachedFs.root.getFile(t,{create:!0},function(e){n.getFileWriter(e).then(function(t){t.finalize=function(){return e},a.resolve(t)},function(e){c=!1,a.reject(e)})},function(e){c=!1,a.reject(e)}),a.promise})}t.requestFileSystem=t.requestFileSystem||t.webkitRequestFileSystem;var l,c=void 0!==t.requestFileSystem;return a(),{name:"TmpFS",isAvailable:i,saveFile:o,getFile:s,getFileWriter:r}}]).service("MemoryFileStorage",["$q","FileManager",function(e,t){function n(){return!0}function a(t,n){return o[t]?e.when(o[t]):e.reject(new Error("FILE_NOT_FOUND"))}function i(t,n){return e.when(o[t]=n)}function s(n,a){var s=t.getFakeFileWriter(a,function(e){i(n,e)});return e.when(s)}var o={};return{name:"Memory",isAvailable:n,saveFile:i,getFile:a,getFileWriter:s}}]).service("WebpManager",["qSync","$q",function(e,t){function n(e){var t=(tsNow(),new WebPDecoder),n=t.WebPDecoderConfig,a=n.j||n.output,i=n.input;if(!t.WebPInitDecoderConfig(n))return console.error("[webpjs] Library version mismatch!"),!1;var s=t.VP8StatusCode;status=t.WebPGetFeatures(e,e.length,i),status!=(s.VP8_STATUS_OK||0)&&console.error("[webpjs] status error",status,s);var l=t.WEBP_CSP_MODE;a.colorspace=l.MODE_RGBA,a.J=4;try{status=t.WebPDecode(e,e.length,n)}catch(c){status=c}if(ok=0==status,!ok)return console.error("[webpjs] decoding failed",status,s),!1;var d=a.c.RGBA.ma;if(!d)return!1;var p=a.height,u=a.width;o&&r?r.clearRect(0,0,o.width,o.height):(o=document.createElement("canvas"),r=o.getContext("2d")),o.height=p,o.width=u;for(var m=r.createImageData(o.width,o.height),g=m.data,h=0;h').appendTo($("body"))[0];p.addEventListener("load",function(e){i=p.firstChild,console.log(dT(),"NaCl ready")},!0),p.addEventListener("message",function(e){d(e.data.taskID,e.data.result)},!0),p.addEventListener("error",function(e){console.error("NaCl error",e)},!0)}if(window.Worker){var u=new Worker("js/lib/crypto_worker.js");u.onmessage=function(e){a?d(e.data.taskID,e.data.result):a=u},u.onerror=function(e){console.error("CW error",e,e.stack),a=!1}}return{sha1Hash:function(n){if(l){var a=t.defer(),i=Array.isArray(n)?convertToUint8Array(n):n;return r.digest({name:"SHA-1"},i).then(function(e){a.resolve(e)},function(e){console.error("Crypto digest error",e),l=!1,a.resolve(sha1HashSync(n))}),a.promise}return e(function(){return sha1HashSync(n)})},sha256Hash:function(n){if(c){var a=t.defer(),i=Array.isArray(n)?convertToUint8Array(n):n;return r.digest({name:"SHA-256"},i).then(function(e){a.resolve(e)},function(e){console.error("Crypto digest error",e),c=!1,a.resolve(sha256HashSync(n))}),a.promise}return e(function(){return sha256HashSync(n)})},aesEncrypt:function(t,a,s){return i?n("aes-encrypt",{bytes:addPadding(convertToArrayBuffer(t)),keyBytes:convertToArrayBuffer(a),ivBytes:convertToArrayBuffer(s)},i):e(function(){return convertToArrayBuffer(aesEncryptSync(t,a,s))})},aesDecrypt:function(t,a,s){return i?n("aes-decrypt",{encryptedBytes:addPadding(convertToArrayBuffer(t)),keyBytes:convertToArrayBuffer(a),ivBytes:convertToArrayBuffer(s)},i):e(function(){return convertToArrayBuffer(aesDecryptSync(t,a,s))})},factorize:function(t){return t=convertToByteArray(t),i&&t.length<=8?n("factorize",{bytes:t},i):a?n("factorize",{bytes:t}):e(function(){return pqPrimeFactorization(t)})},modPow:function(t,i,s){return a?n("mod-pow",{x:t,y:i,m:s}):e(function(){return bytesModPow(t,i,s)})}}}]).service("ExternalResourcesManager",["$q","$http","$sce",function(e,t,n){function a(a){return void 0!==i[a]?i[a]:i[a]=t.get(a,{responseType:"blob",transformRequest:null}).then(function(e){window.URL=window.URL||window.webkitURL;var t=window.URL.createObjectURL(e.data);return n.trustAsResourceUrl(t)},function(t){return Config.Modes.chrome_packed?e.reject(t):e.when(n.trustAsResourceUrl(a))})}var i={};return{downloadByURL:a}}]).service("IdleManager",["$rootScope","$window","$timeout",function(e,t,n){function a(){r||(r=!0,$(t).on(c+" blur focus keydown mousedown touchstart",i),setTimeout(function(){i({type:"blur",fake_initial:!0})},0))}function i(a){if("mousemove"==a.type){var a=a.originalEvent||a;if(a&&0===a.movementX&&0===a.movementY)return;$(t).off("mousemove",i)}var r="blur"==a.type||"timeout"==a.type;l&&document[l]&&(r=!0),n.cancel(s),r||(s=n(function(){i({type:"timeout"})},3e4)),"focus"!=a.type||e.idle.afterFocus||(e.idle.afterFocus=!0,setTimeout(function(){delete e.idle.afterFocus},10));var c=e.idle.initial?0:1e3;a&&!a.fake_initial&&delete e.idle.initial,n.cancel(o),e.idle.isIDLE!=r&&(o=n(function(){e.idle.isIDLE=r,r&&"timeout"==a.type&&$(t).on("mousemove",i)},c))}e.idle={isIDLE:!1,initial:!0};var s,o,r=!1,l="hidden",c="visibilitychange";return"undefined"!=typeof document.hidden||("undefined"!=typeof document.mozHidden?(l="mozHidden",c="mozvisibilitychange"):"undefined"!=typeof document.msHidden?(l="msHidden",c="msvisibilitychange"):"undefined"!=typeof document.webkitHidden&&(l="webkitHidden",c="webkitvisibilitychange")),{start:a}}]).service("GeoLocationManager",["$q",function(e){function t(){return void 0!==navigator.geolocation}function n(n){if(!n&&a)return e.when(a);if(!t())return e.reject();var i=e.defer();return navigator.geolocation.getCurrentPosition(function(e){a={lat:e.coords.latitude,"long":e.coords.longitude},i.resolve(a)},function(e){i.reject(e)}),i.promise}var a=!1;return{getPosition:n,isAvailable:t}}]).service("AppRuntimeManager",["$window",function(e){return{reload:function(){try{location.reload()}catch(t){}e.chrome&&chrome.runtime&&chrome.runtime.reload&&chrome.runtime.reload()},close:function(){try{e.close()}catch(t){}},focus:function(){window.navigator.mozApps&&document.hidden?window.navigator.mozApps.getSelf().onsuccess=function(){this.result.launch()}:(window.chrome&&chrome.app&&chrome.app.window&&chrome.app.window.current().focus(),window.focus())}}}]).service("RichTextProcessor",["$sce","$sanitize",function(e,t){function n(e){for(var t,n,a,i,s=0;s-1)return n=Math.floor(t/i),a=t%i,{category:s,row:n,column:a};return console.error("emoji not found in spritesheet",e),null}function a(e,t){t=t||{};for(var a,i,s,o,r,l=e,c=[],p=0;a=l.match(S);){if(r=p+a.index,a[3])c.push({_:"messageEntityMention",offset:r+a[1].length,length:a[2].length+a[3].length});else if(a[4])if(M.test(a[4]))c.push({_:"messageEntityEmail",offset:r,length:a[4].length});else{var i=!1,u=a[5],m=a[6],g="";if(m){if(u||"xn--"!==m.substr(0,4)&&Config.TLD.indexOf(m.toLowerCase())===-1||(u="http://"),u){var f=d(a[4]);f.length!==a[4].length&&(g=a[4].substring(f.length),a[4]=f),i=(a[5]?"":u)+a[4]}}else i=(a[5]?"":"http://")+a[4];i&&c.push({_:"messageEntityUrl",offset:r,length:a[4].length})}else a[7]?c.push({_:"messageEntityLinebreak",offset:r,length:1}):a[8]?(s=EmojiHelper.emojiMap[a[8]])&&(o=n(s))&&c.push({_:"messageEntityEmoji",offset:r,length:a[0].length,coords:o,title:h[s][1][0]}):a[10]?c.push({_:"messageEntityHashtag",offset:r+a[9].length,length:a[10].length}):a[12]&&c.push({_:"messageEntityBotCommand",offset:r+a[11].length,length:1+a[12].length+(a[13]?1+a[13].length:0)});l=l.substr(a.index+a[0].length),p+=a.index+a[0].length}return c}function i(e){return e.replace(/:([a-z0-9\-\+\*_]+?):/gi,function(e,t){var n=EmojiHelper.shortcuts[t];return void 0!==n?EmojiHelper.emojis[n][0]:e})}function s(e,t,n){if(!x.test(e))return n?e:e.trim();for(var a,i,s=e,o=[],r=0;a=s.match(I);){i=r+a.index,o.push(s.substr(0,a.index));var e=a[3]||a[8]||a[11];r-=e.length,e=e.replace(/^\s+|\s+$/g,""),r+=e.length,e.match(/^`*$/)?o.push(a[0]):a[3]?("\n"==a[5]&&(a[5]="",r-=1),o.push(a[1]+e+a[5]),t.push({_:"messageEntityPre",language:"",offset:i+a[1].length,length:e.length}),r-=a[2].length+a[4].length):a[7]?(o.push(a[6]+e+a[9]),t.push({_:T[a[7]],offset:i+a[6].length,length:e.length}),r-=2*a[7].length):a[11]&&(o.push(e),t.push({_:"messageEntityMentionName",user_id:a[10],offset:i,length:e.length}),r-=a[0].length-e.length),s=s.substr(a.index+a[0].length),r+=a.index+a[0].length}return o.push(s),o=o.join(""),o.replace(/\s+/g,"").length||(o=e,t.splice(0,t.length)),t.length||n||(o=o.trim()),o}function o(e,t,n){var a,i,s,o,r,l,c,d,p,u=t.slice(),m=e.length,g=t.length,h=0;for(a=0;a=c&&rc&&l<=d){n&&r>=c&&l<=d&&(void 0===o.nested&&(o.nested=[]),s.offset-=c,o.nested.push(angular.copy(s))),p=!0;break}if(c>=l)break}p||u.push(s)}return u.sort(function(e,t){return e.offset-t.offset}),u}function r(e,t,n){return void 0===t?encodeEntities(e):(n.hasNested=!0,l(e,{entities:t,nested:!0}))}function l(n,i){if(!n||!n.length)return"";i=i||{};var s=i.entities,o=i.contextSite||"Telegram",l="Telegram"!=o,c=!1;void 0===s&&(s=a(n,i));var d,u,g,h,_=0,v=s.length,y=[],b=0,w=i.emojiIconSize||f;for(_=0;_b)y.push(encodeEntities(n.substr(b,d.offset-b)));else if(d.offset',encodeEntities(u),"");break;case"messageEntityMentionName":if(i.noLinks){g=!0;break}y.push('',encodeEntities(u),"");break;case"messageEntityHashtag":var k=!i.noLinks&&A[o];if(!k){g=!0;break}var S=u.substr(1);y.push("',encodeEntities(u),"");break;case"messageEntityEmail":if(i.noLinks){g=!0;break}y.push('',encodeEntities(u),"");break;case"messageEntityUrl":case"messageEntityTextUrl":var M;"messageEntityTextUrl"==d._?(h=d.url,h=m(h,!0),M=r(u,d.nested,i)):(h=m(u,!1),M=encodeEntities(p(u))),i.noLinks?y.push(M):y.push('',M,"");break;case"messageEntityLinebreak":y.push(i.noLinebreaks?" ":"
");break;case"messageEntityEmoji":y.push('',":",d.title,":"),c=!0;break;case"messageEntityBotCommand":if(i.noLinks||i.noCommands||l){g=!0;break}var x,I,T=u.substr(1);(I=T.indexOf("@"))!=-1?(x=T.substr(I+1),T=T.substr(0,I)):x=i.fromBot,y.push('',encodeEntities(u),"");break;case"messageEntityBold":y.push("",r(u,d.nested,i),"");break;case"messageEntityItalic":y.push("",r(u,d.nested,i),"");break;case"messageEntityCode":y.push("",encodeEntities(u),"");break;case"messageEntityPre":y.push("
",encodeEntities(u),"
");break;default:g=!0}b=d.offset+(g?0:d.length)}if(y.push(encodeEntities(n.substr(b))),n=t(y.join("")),!i.nested&&(c||i.hasNested)){n=n.replace(/\ufe0f|️|�|‍/g,"",n);var D=18==w?"":" emoji-w"+w;n=n.replace(/]*)?) class="emoji emoji-(\d)-(\d+)-(\d+)"(.+?)<\/span>/g,'')}return e.trustAs("html",n)}function c(e,t){if(!e||!e.length)return"";t=t||{};var n=t.entities;void 0===n&&(n=a(e,t));var i,s,o,r=0,l=n.length,c=[],d=0;for(r=0;rd)c.push(e.substr(d,i.offset-d));else if(i.offsetn&&")"===e.charAt(t-1);)e=e.substr(0,t-1),a--,t--;return n>a&&(e=e.replace(/\)+$/,"")),e}function p(e){return e.replace(/(%[A-Z\d]{2})+/g,function(e){try{return decodeURIComponent(e)}catch(t){return e}})}function u(e,t){if(_)return e;if(!e||!e.length)return"";t=t||{},e=e.replace(/\ufe0f/g,"",e);for(var n,a,i=e,e=[];n=i.match(S);)e.push(i.substr(0,n.index)),n[8]&&(g=EmojiHelper.emojiMap[n[8]])&&(a=h[g][1][0])?e.push(":"+a+":"):e.push(n[0]),i=i.substr(n.index+n[0].length);return e.push(i),e.join("")}function m(e,t){e.match(/^https?:\/\//i)||(e="http://"+e);var n;if(2==t)e="tg://unsafe_url?url="+encodeURIComponent(e);else if(n=e.match(/^https?:\/\/t(?:elegram)?\.me\/(.+)/)){var a=n[1].split("/");switch(a[0]){case"joinchat":e="tg://join?invite="+a[1];break;case"addstickers":e="tg://addstickers?set="+a[1];break;default:if(a[1]&&a[1].match(/^\d+$/))e="tg://resolve?domain="+a[0]+"&post="+a[1];else if(!a[1]){var i=a[0].split("?");e="tg://resolve?domain="+i[0]+(i[1]?"&"+i[1]:"")}}}else t&&(e="tg://unsafe_url?url="+encodeURIComponent(e));return e}var g,h=Config.Emoji,f=18,_=navigator.userAgent.search(/OS X|iPhone|iPad|iOS|Android/i)!=-1,v="\\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�]\\uD83C[\\uDDEA-\\uDDFA�]|[0-9]\\u20e3|\\uD83C[\\uDC00-\\uDFFF]",y="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-\\uffdc",b="0-9_"+y,w="·",k="((?:https?|ftp)://|mailto:)?(?:\\S{1,64}(?::\\S{0,64})?@)?(?:(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])(?:\\.(?:25[0-5]|2[0-4][0-9]|1[0-9][0-9]|[1-9][0-9]|[0-9])){3}|["+y+"0-9]["+y+w+"0-9-]{0,64}(?:\\.["+y+"0-9]["+y+w+"0-9-]{0,64}){0,10}(?:\\.(xn--[0-9a-z]{2,16}|["+y+"]{2,24})))(?::\\d{2,5})?(?:/(?:\\S{0,255}[^\\s.;,(\\[\\]{}<>\"'])?)?",$="[a-zA-Z\\d_]{5,32}",C="\\/([a-zA-Z\\d_]{1,32})(?:@("+$+"))?(\\b|$)",S=new RegExp("(^| )(@)("+$+")|("+k+")|(\\n)|("+v+")|(^|[\\s\\(\\]])(#["+b+"]{2,64})|(^|\\s)"+C,"i"),M=/^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/,x=/[`_*@]/,I=/(^|\s|\n)(````?)([\s\S]+?)(````?)([\s\n\.,:?!;]|$)|(^|\s)(`|\*\*|__)([^\n]+?)\7([\s\.,:?!;]|$)|@(\d+)\s*\((.+?)\)/m,A={Telegram:"tg://search_hashtag?hashtag={1}",Twitter:"https://twitter.com/hashtag/{1}",Instagram:"https://instagram.com/explore/tags/{1}/","Google Plus":"https://plus.google.com/explore/{1}"},E={Telegram:"#/im?p=%40{1}",Twitter:"https://twitter.com/{1}",Instagram:"https://instagram.com/{1}/",GitHub:"https://github.com/{1}"},T={"`":"messageEntityCode","**":"messageEntityBold",__:"messageEntityItalic"};return{wrapRichText:l,wrapPlainText:u,wrapDraftText:c,wrapUrl:m,parseEntities:a,parseMarkdown:s,parseEmojis:i,mergeEntities:o}}]).service("ServerTimeManager",["Storage",function(e){var t=tsNow(!0),n=t-t%86400,a=new Date;a.setHours(0),a.setMinutes(0),a.setSeconds(0);var i=n-Math.floor(+a/1e3),s=0,o={midnightOffset:i,serverTimeOffset:s};return e.get("server_time_offset").then(function(e){e&&(s=e,o.serverTimeOffset=e)}),o}]).service("WebPushApiManager",["$window","$timeout","$q","$rootScope","_","AppRuntimeManager",function(e,t,n,a,i,s){function o(){b||(b=!0,l(),g())}function r(){y=!1}function l(){_&&navigator.serviceWorker.ready.then(function(e){e.pushManager.getSubscription().then(function(e){v=!!e,h("init",e)})["catch"](function(e){console.log("Error during getSubscription()",e)})})}function c(){_&&navigator.serviceWorker.ready.then(function(e){e.pushManager.subscribe({userVisibleOnly:$}).then(function(e){v=!0,h("subscribe",e)})["catch"](function(e){"denied"===Notification.permission?console.log("Permission for Notifications was denied"):(console.log("Unable to subscribe to push.",e),$||($=!0,setTimeout(c,0)))})})}function d(){_&&navigator.serviceWorker.ready.then(function(e){e.pushManager.getSubscription().then(function(e){v=!1,e&&(h("unsubscribe",e),setTimeout(function(){e.unsubscribe().then(function(e){v=!1})["catch"](function(e){console.error("Unsubscription error: ",e)})},3e3))})["catch"](function(e){console.error("Error thrown while unsubscribing from push messaging.",e)})})}function p(){if(!(!_||a.idle&&a.idle.deactivated)){w.baseUrl=(location.href||"").replace(/#.*$/,"")+"#/im";var e={type:"ping",localNotifications:y,lang:{push_action_mute1d:i(Config.Mobile?"push_action_mute1d_mobile_raw":"push_action_mute1d_raw"),push_action_settings:i(Config.Mobile?"push_action_settings_mobile_raw":"push_action_settings_raw"),push_message_nopreview:i("push_message_nopreview_raw")},settings:w};navigator.serviceWorker.controller&&navigator.serviceWorker.controller.postMessage(e),f=setTimeout(p,1e4)}}function u(e){w=angular.copy(e),clearTimeout(f),p()}function m(){if(_&&navigator.serviceWorker.controller){var e={type:"notifications_clear"};navigator.serviceWorker.controller.postMessage(e)}}function g(){_&&(navigator.serviceWorker.addEventListener("message",function(e){if(e.data&&"push_click"==e.data.type){if(a.idle&&a.idle.deactivated)return void s.reload();a.$emit("push_notification_click",e.data.data)}}),navigator.serviceWorker.ready.then(p))}function h(e,t){if(t){var n=t.toJSON();if(!(n&&n.endpoint&&n.keys&&n.keys.p256dh&&n.keys.auth))return console.warn(dT(),"Invalid push subscription",n),d(),_=!1,h(e,!1);console.warn(dT(),"Push",e,n),a.$emit("push_"+e,{tokenType:10,tokenValue:JSON.stringify(n)})}else console.warn(dT(),"Push",e,!1),a.$emit("push_"+e,!1)}var f,_=!0,v=!1,y=!0,b=!1,w={},k=navigator.userAgent.toLowerCase().indexOf("firefox")>-1,$=!k;return"PushManager"in window&&"Notification"in window&&"serviceWorker"in navigator||(console.warn("Push messaging is not supported."),_=!1,y=!1),_&&"denied"===Notification.permission&&console.warn("The user has blocked notifications."),{isAvailable:_,start:o,isPushEnabled:v,subscribe:c,unsubscribe:d,hidePushNotifications:m,setLocalNotificationsDisabled:r,setSettings:u}}]),angular.module("myApp.i18n",["izhukov.utils"]).factory("_",["$rootScope","$locale",function(e,t){function n(e,t){return e.replace(l,function(a,i,s){var o=t[i];return void 0===o?(console.warn("[i18n] missing param "+i+' for message "'+e+'"'),""):(void 0!==s&&(o=n(o,s.split("|"))),o.toString().trim())})}function a(e,t){return e=e.replace(/\*\*(.+?)\*\*/g,"$1").replace(/\n| /g,"
")}function i(e,t){var i=!1,l=e;if("_raw"===e.substr(-4)&&(i=!0,e=e.substr(0,e.length-4)),o.hasOwnProperty(e))l=o[e];else{if(!r.hasOwnProperty(e))return console.warn("[i18n] missing key "+e),e;l=r[e],console.warn("[i18n] missing locale key "+s+" / "+e)}return i||(l=encodeEntities(l)),"_md"==e.substr(-3)&&(l=a(l)),arguments.length>1&&("string"==typeof t?(Array.prototype.shift.apply(arguments),l=n(l,arguments)):l=n(l,t)),l}var s=Config.I18n.locale,o=Config.I18n.messages,r=Config.I18n.fallback_messages,l=/\{\s*([a-zA-Z\d\-_]+)(?:\s*:\s*(.*?))?\s*\}/g;return i.locale=function(){return s},i.pluralize=function(n){var a=e.$eval(i(n+"_raw"));return function(e){return(a[t.pluralCat(e)]||"").replace("{}",e)}},i}]).filter("i18n",["_",function(e){return function(t,n){return e(t+"_raw",n)}}]).directive("ngPluralize",["_",function(e){return{restrict:"EA",priority:1,compile:function(t){var n=t.attr("when"),a=e(n+"_raw");t.attr("when",a)}}}]).directive("myI18n",["_",function(e){return{restrict:"EA",compile:function(t){var n=t.children('my-i18n-param:not([name]), [my-i18n-param=""]:not([name])').map(function(e,t){return t.outerHTML}).toArray();t.children('my-i18n-param[name], [my-i18n-param]:not([my-i18n-param=""]), [my-i18n-param][name]').each(function(e,t){n[angular.element(t).attr("my-i18n-param")||angular.element(t).attr("name")]=t.outerHTML}),t.children("my-i18n-param").remove();var a=t.attr("my-i18n")||t.attr("msgid")?t:t.children("my-i18n-format, [my-i18n-format]");a.each(function(t,a){var i=angular.element(a),s=i.attr("my-i18n")||i.attr("msgid")||i.attr("my-i18n-format")||i.html().replace(/\s+/g," ").trim();if(i.hasClass("nocopy")){var o=e(s+"_raw",n);i.attr("data-content",o)}else{var o=e(s,n);i.html(o)}})}}}]),angular.module("izhukov.mtproto",["izhukov.utils"]).factory("MtpDcConfigurator",function(){function e(e,i){if(void 0===a[e]){var s,o,r=!1;if(Config.Modes.ssl||!Config.Modes.http){var l=t[e-1]+(i?"-1":""),c=Config.Modes.test?"apiw_test1":"apiw1";return r="https://"+l+".web.telegram.org/"+c}for(s=0;so[0]||a[0]==o[0]&&a[1]>=o[1])&&(o=[a[0],a[1]+4]),a=o,longFromInts(o[0],o[1])}function n(t,n){var s=t-Math.floor((n||tsNow())/1e3),o=Math.abs(i-s)>10;return e.set({server_time_offset:s}),a=[0,0],i=s,console.log(dT(),"Apply server time",t,n,s,o),o}var a=[0,0],i=0;return e.get("server_time_offset").then(function(e){e&&(i=e)}),{generateID:t,applyServerTime:n}}]).factory("MtpAuthorizer",["MtpDcConfigurator","MtpRsaKeysManager","MtpSecureRandom","MtpTimeManager","CryptoWorker","$http","$q","$timeout",function(e,t,n,a,i,s,o,r){function l(t,n){var i=n.byteLength,r=new Int32Array(n),l=new TLSerialization;l.storeLongP(0,0,"auth_key_id"),l.storeLong(a.generateID(),"msg_id"),l.storeInt(i,"request_length");var c=l.getBuffer(),d=new Int32Array(c),p=c.byteLength,u=new ArrayBuffer(p+i),m=new Int32Array(u);m.set(d),m.set(r,d.length);var g,h=_?u:m,f=e.chooseServer(t),v={code:406,type:"NETWORK_BAD_RESPONSE",url:f};try{g=s.post(f,h,{responseType:"arraybuffer",transformRequest:null})}catch(y){g=o.reject(angular.extend(v,{originalError:y}))}return g.then(function(e){if(!e.data||!e.data.byteLength)return o.reject(v);try{var t=new TLDeserialization(e.data,{mtproto:!0});t.fetchLong("auth_key_id"),t.fetchLong("msg_id"),t.fetchInt("msg_len")}catch(n){return o.reject(angular.extend(v,{originalError:n}))}return t},function(e){return e.message||e.type||(e=angular.extend(v,{originalError:e})),o.reject(e)})}function c(e){var n=e.deferred,a=new TLSerialization({mtproto:!0});a.storeMethod("req_pq",{nonce:e.nonce}),console.log(dT(),"Send req_pq",bytesToHex(e.nonce)),l(e.dcID,a.getBuffer()).then(function(a){var s=a.fetchObject("ResPQ");if("resPQ"!=s._)throw new Error("[MT] resPQ response invalid: "+s._);if(!bytesCmp(e.nonce,s.nonce))throw new Error("[MT] resPQ nonce mismatch");if(e.serverNonce=s.server_nonce,e.pq=s.pq,e.fingerprints=s.server_public_key_fingerprints,console.log(dT(),"Got ResPQ",bytesToHex(e.serverNonce),bytesToHex(e.pq),e.fingerprints),e.publicKey=t.select(e.fingerprints),!e.publicKey)throw new Error("[MT] No public key found");console.log(dT(),"PQ factorization start",e.pq),i.factorize(e.pq).then(function(t){e.p=t[0],e.q=t[1],console.log(dT(),"PQ factorization done",t[2]),d(e)},function(e){console.log("Worker error",e,e.stack),n.reject(e)})},function(e){console.error(dT(),"req_pq error",e.message),n.reject(e)}),r(function(){t.prepare()})}function d(e){var t=e.deferred;e.newNonce=new Array(32),n.nextBytes(e.newNonce);var a=new TLSerialization({mtproto:!0});a.storeObject({_:"p_q_inner_data",pq:e.pq,p:e.p,q:e.q,nonce:e.nonce,server_nonce:e.serverNonce,new_nonce:e.newNonce},"P_Q_inner_data","DECRYPTED_DATA");var i=sha1BytesSync(a.getBuffer()).concat(a.getBytes()),s=new TLSerialization({mtproto:!0});s.storeMethod("req_DH_params",{nonce:e.nonce,server_nonce:e.serverNonce,p:e.p,q:e.q,public_key_fingerprint:e.publicKey.fingerprint,encrypted_data:rsaEncrypt(e.publicKey,i)}),console.log(dT(),"Send req_DH_params"),l(e.dcID,s.getBuffer()).then(function(n){var a=n.fetchObject("Server_DH_Params","RESPONSE");if("server_DH_params_fail"!=a._&&"server_DH_params_ok"!=a._)return t.reject(new Error("[MT] Server_DH_Params response invalid: "+a._)),!1;if(!bytesCmp(e.nonce,a.nonce))return t.reject(new Error("[MT] Server_DH_Params nonce mismatch")),!1;if(!bytesCmp(e.serverNonce,a.server_nonce))return t.reject(new Error("[MT] Server_DH_Params server_nonce mismatch")), !1;if("server_DH_params_fail"==a._){var i=sha1BytesSync(e.newNonce).slice(-16);return bytesCmp(i,a.new_nonce_hash)?(t.reject(new Error("[MT] server_DH_params_fail")),!1):(t.reject(new Error("[MT] server_DH_params_fail new_nonce_hash mismatch")),!1)}try{p(e,a.encrypted_answer)}catch(s){return t.reject(s),!1}m(e)},function(e){t.reject(e)})}function p(e,t){e.localTime=tsNow(),e.tmpAesKey=sha1BytesSync(e.newNonce.concat(e.serverNonce)).concat(sha1BytesSync(e.serverNonce.concat(e.newNonce)).slice(0,12)),e.tmpAesIv=sha1BytesSync(e.serverNonce.concat(e.newNonce)).slice(12).concat(sha1BytesSync([].concat(e.newNonce,e.newNonce)),e.newNonce.slice(0,4));var n=aesDecryptSync(t,e.tmpAesKey,e.tmpAesIv),i=n.slice(0,20),s=n.slice(20),o=bytesToArrayBuffer(s),r=new TLDeserialization(o,{mtproto:!0}),l=r.fetchObject("Server_DH_inner_data");if("server_DH_inner_data"!=l._)throw new Error("[MT] server_DH_inner_data response invalid: "+constructor);if(!bytesCmp(e.nonce,l.nonce))throw new Error("[MT] server_DH_inner_data nonce mismatch");if(!bytesCmp(e.serverNonce,l.server_nonce))throw new Error("[MT] server_DH_inner_data serverNonce mismatch");console.log(dT(),"Done decrypting answer"),e.g=l.g,e.dhPrime=l.dh_prime,e.gA=l.g_a,e.serverTime=l.server_time,e.retry=0,u(e.g,e.dhPrime,e.gA);var c=r.getOffset();if(!bytesCmp(i,sha1BytesSync(s.slice(0,c))))throw new Error("[MT] server_DH_inner_data SHA1-hash mismatch");a.applyServerTime(e.serverTime,e.localTime)}function u(e,t,n){console.log(dT(),"Verifying DH params");var a=bytesToHex(t);if(3!=e||"c71caeb9c6b1c9048e6c522f70f13f73980d40238e3e21c14934d037563d930f48198a0aa7c14058229493d22530f4dbfa336f6e0ac925139543aed44cce7c3720fd51f69458705ac68cd4fe6b6b13abdc9746512969328454f18faf8c595f642477fe96bb2a941d5bcd1d4ac8cc49880708fa9b378e3c4f3a9060bee67cf9a4a4a695811051907e162753b56b0f6b410dba74d8a84b2a14b3144e0ef1284754fd17ed950d5965b4b9dd46582db1178d169c6bc465b0d6ff9ca3928fef5b9ae4e418fc15e83ebea0f87fa9ff5eed70050ded2849f47bf959d956850ce929851f0d8115f635b105ee2e4e15d04b2454bf6f4fadf034b10403119cd8e3b92fcc5b"!==a)throw new Error("[MT] DH params are not verified: unknown dhPrime");console.log(dT(),"dhPrime cmp OK");var i=new BigInteger(bytesToHex(n),16),s=new BigInteger(a,16);if(i.compareTo(BigInteger.ONE)<=0)throw new Error("[MT] DH params are not verified: gA <= 1");if(i.compareTo(s.subtract(BigInteger.ONE))>=0)throw new Error("[MT] DH params are not verified: gA >= dhPrime - 1");console.log(dT(),"1 < gA < dhPrime-1 OK");var o=new BigInteger(null);o.fromInt(2);var r=o.pow(1984);if(i.compareTo(r)<0)throw new Error("[MT] DH params are not verified: gA < 2^{2048-64}");if(i.compareTo(s.subtract(r))>=0)throw new Error("[MT] DH params are not verified: gA > dhPrime - 2^{2048-64}");return console.log(dT(),"2^{2048-64} < gA < dhPrime-2^{2048-64} OK"),!0}function m(e){var t=e.deferred,a=bytesFromHex(e.g.toString(16));e.b=new Array(256),n.nextBytes(e.b),i.modPow(a,e.b,e.dhPrime).then(function(n){var a=new TLSerialization({mtproto:!0});a.storeObject({_:"client_DH_inner_data",nonce:e.nonce,server_nonce:e.serverNonce,retry_id:[0,e.retry++],g_b:n},"Client_DH_Inner_Data");var s=sha1BytesSync(a.getBuffer()).concat(a.getBytes()),o=aesEncryptSync(s,e.tmpAesKey,e.tmpAesIv),r=new TLSerialization({mtproto:!0});r.storeMethod("set_client_DH_params",{nonce:e.nonce,server_nonce:e.serverNonce,encrypted_data:o}),console.log(dT(),"Send set_client_DH_params"),l(e.dcID,r.getBuffer()).then(function(n){var a=n.fetchObject("Set_client_DH_params_answer");return"dh_gen_ok"!=a._&&"dh_gen_retry"!=a._&&"dh_gen_fail"!=a._?(t.reject(new Error("[MT] Set_client_DH_params_answer response invalid: "+a._)),!1):bytesCmp(e.nonce,a.nonce)?bytesCmp(e.serverNonce,a.server_nonce)?void i.modPow(e.gA,e.b,e.dhPrime).then(function(n){var i=sha1BytesSync(n),s=i.slice(0,8),o=i.slice(-8);switch(console.log(dT(),"Got Set_client_DH_params_answer",a._),a._){case"dh_gen_ok":var r=sha1BytesSync(e.newNonce.concat([1],s)).slice(-16);if(!bytesCmp(r,a.new_nonce_hash1))return t.reject(new Error("[MT] Set_client_DH_params_answer new_nonce_hash1 mismatch")),!1;var l=bytesXor(e.newNonce.slice(0,8),e.serverNonce.slice(0,8));e.authKeyID=o,e.authKey=n,e.serverSalt=l,t.resolve(e);break;case"dh_gen_retry":var c=sha1BytesSync(e.newNonce.concat([2],s)).slice(-16);return bytesCmp(c,a.new_nonce_hash2)?m(e):(t.reject(new Error("[MT] Set_client_DH_params_answer new_nonce_hash2 mismatch")),!1);case"dh_gen_fail":var d=sha1BytesSync(e.newNonce.concat([3],s)).slice(-16);return bytesCmp(d,a.new_nonce_hash3)?(t.reject(new Error("[MT] Set_client_DH_params_answer fail")),!1):(t.reject(new Error("[MT] Set_client_DH_params_answer new_nonce_hash3 mismatch")),!1)}},function(e){t.reject(e)}):(t.reject(new Error("[MT] Set_client_DH_params_answer server_nonce mismatch")),!1):(t.reject(new Error("[MT] Set_client_DH_params_answer nonce mismatch")),!1)},function(e){t.reject(e)})},function(e){t.reject(e)})}function g(t){if(void 0!==v[t])return v[t];for(var n=[],a=0;a<16;a++)n.push(nextRandomInt(255));if(!e.chooseServer(t))return o.reject(new Error("[MT] No server found for dc "+t));var i={dcID:t,nonce:n,deferred:o.defer()};return r(function(){c(i)}),v[t]=i.deferred.promise,v[t]["catch"](function(){delete v[t]}),v[t]}var h=navigator.userAgent.match(/Chrome\/(\d+(\.\d+)?)/),f=h&&parseFloat(h[1])||!1,_=!("ArrayBufferView"in window)&&(!f||f<30);delete s.defaults.headers.post["Content-Type"],delete s.defaults.headers.common.Accept;var v={};return{auth:g}}]).factory("MtpNetworkerFactory",["MtpDcConfigurator","MtpTimeManager","MtpSecureRandom","Storage","CryptoWorker","AppRuntimeManager","$http","$q","$timeout","$interval","$rootScope",function(e,t,n,a,i,s,o,r,l,c,d){function p(e,t,n,a){a=a||{},this.dcID=e,this.iii=h++,this.authKey=t,this.authKeyUint8=convertToUint8Array(t),this.authKeyBuffer=convertToArrayBuffer(t),this.authKeyID=sha1BytesSync(t).slice(-8),this.serverSalt=n,this.upload=a.fileUpload||a.fileDownload||!1,this.updateSession(),this.lastServerMessages=[],this.currentRequests=0,this.checkConnectionPeriod=0,this.sentMessages={},this.clientMessages=[],this.pendingMessages={},this.pendingAcks=[],this.pendingResends=[],this.connectionInited=!1,this.pendingTimeouts=[],this.longPollInt=c(this.checkLongPoll.bind(this),1e4),this.checkLongPoll(),f||(f=!0,d.offline=!0,d.offlineConnecting=!0),Config.Navigator.mobile&&this.setupMobileSleep()}function u(){_&&(_=!1,g({_:"new_session_created"},!0))}function m(){_=!0}var g,h=0,f=!1,_=!1,v=navigator.userAgent.match(/Chrome\/(\d+(\.\d+)?)/),y=v&&parseFloat(v[1])||!1,b=!("ArrayBufferView"in window)&&(!y||y<30);return delete o.defaults.headers.post["Content-Type"],delete o.defaults.headers.common.Accept,d.retryOnline=function(){$(document.body).trigger("online")},p.prototype.updateSession=function(){this.seqNo=0,this.prevSessionID=this.sessionID,this.sessionID=new Array(8),n.nextBytes(this.sessionID)},p.prototype.setupMobileSleep=function(){var e=this;d.$watch("idle.isIDLE",function(t){t?e.sleepAfter=tsNow()+3e4:(delete e.sleepAfter,e.checkLongPoll())}),d.$on("push_received",function(){e.sleepAfter&&(e.sleepAfter=tsNow()+3e4,e.checkLongPoll())})},p.prototype.updateSentMessage=function(e){var n=this.sentMessages[e];if(!n)return!1;var a=this;if(n.container){var i=[];angular.forEach(n.inner,function(e){var t=a.updateSentMessage(e);t&&i.push(t.msg_id)}),n.inner=i}return n.msg_id=t.generateID(),n.seq_no=this.generateSeqNo(n.notContentRelated||n.container),this.sentMessages[n.msg_id]=n,delete a.sentMessages[e],n},p.prototype.generateSeqNo=function(e){var t=2*this.seqNo;return e||(t++,this.seqNo++),t},p.prototype.wrapMtpCall=function(e,n,a){var i=new TLSerialization({mtproto:!0});i.storeMethod(e,n);var s=t.generateID(),o=this.generateSeqNo(),r={msg_id:s,seq_no:o,body:i.getBytes()};return Config.Modes.debug&&console.log(dT(),"MT call",e,n,s,o),this.pushMessage(r,a)},p.prototype.wrapMtpMessage=function(e,n){n=n||{};var a=new TLSerialization({mtproto:!0});a.storeObject(e,"Object");var i=t.generateID(),s=this.generateSeqNo(n.notContentRelated),o={msg_id:i,seq_no:s,body:a.getBytes()};return Config.Modes.debug&&console.log(dT(),"MT message",e,i,s),this.pushMessage(o,n)},p.prototype.wrapApiCall=function(e,n,a){var i=new TLSerialization(a);this.connectionInited||(i.storeInt(3667594509,"invokeWithLayer"),i.storeInt(Config.Schema.API.layer,"layer"),i.storeInt(1769565673,"initConnection"),i.storeInt(Config.App.id,"api_id"),i.storeString(navigator.userAgent||"Unknown UserAgent","device_model"),i.storeString(navigator.platform||"Unknown Platform","system_version"),i.storeString(Config.App.version,"app_version"),i.storeString(navigator.language||"en","lang_code")),a.afterMessageID&&(i.storeInt(3416209197,"invokeAfterMsg"),i.storeLong(a.afterMessageID,"msg_id")),a.resultType=i.storeMethod(e,n);var s=t.generateID(),o=this.generateSeqNo(),r={msg_id:s,seq_no:o,body:i.getBytes(!0),isAPI:!0};return Config.Modes.debug?console.log(dT(),"Api call",e,n,s,o,a):console.log(dT(),"Api call",e),this.pushMessage(r,a)},p.prototype.checkLongPoll=function(e){var t=this.cleanupSent();if(this.longPollPending&&tsNow()n.sleepAfter)||n.sendLongPoll()})},p.prototype.sendLongPoll=function(){var e=25e3,t=this;this.longPollPending=tsNow()+e,this.wrapMtpCall("http_wait",{max_delay:500,wait_after:150,max_wait:e},{noResponse:!0,longPoll:!0}).then(function(){delete t.longPollPending,setZeroTimeout(t.checkLongPoll.bind(t))},function(){console.log("Long-poll failed")})},p.prototype.pushMessage=function(e,t){var n=r.defer();return this.sentMessages[e.msg_id]=angular.extend(e,t||{},{deferred:n}),this.pendingMessages[e.msg_id]=0,t&&t.noShedule||this.sheduleRequest(),angular.isObject(t)&&(t.messageID=e.msg_id),n.promise},p.prototype.pushResend=function(e,t){var n=t?tsNow()+t:0,a=this.sentMessages[e];if(a.container)for(var i=0;i=l){if(s=m.sentMessages[t]){var n=(s.body.byteLength||s.body.length)+32;if(!s.notContentRelated&&p)return;if(!s.notContentRelated&&r&&r+n>655360)return void(p=!0);if(s.singleInRequest&&(u++,u>1))return;o.push(s),r+=n,s.isAPI?c=!0:s.longPoll&&(d=!0)}delete m.pendingMessages[t]}}),c&&!d){var g=new TLSerialization({mtproto:!0});g.storeMethod("http_wait",{max_delay:500,wait_after:150,max_wait:3e3}),o.push({msg_id:t.generateID(),seq_no:this.generateSeqNo(),body:g.getBytes()})}if(o.length){var h=[];if(o.length>1){var f=new TLSerialization({mtproto:!0,startMaxLength:r+64});f.storeInt(1945237724,"CONTAINER[id]"),f.storeInt(o.length,"CONTAINER[count]");for(var v=[],n=0;n1)&&this.sheduleRequest()}},p.prototype.getEncryptedMessage=function(e){var t=this;return i.sha1Hash(e).then(function(n){var a=new Uint8Array(n).subarray(4,20);return t.getMsgKeyIv(a,!0).then(function(t){return i.aesEncrypt(e,t[0],t[1]).then(function(e){return{bytes:e,msgKey:a}})})})},p.prototype.getDecryptedMessage=function(e,t){return this.getMsgKeyIv(e,!1).then(function(e){return i.aesDecrypt(t,e[0],e[1])})},p.prototype.sendEncryptedRequest=function(t,n){var a=this;n=n||{};var i=new TLSerialization({startMaxLength:t.body.length+64});return i.storeIntBytes(this.serverSalt,64,"salt"),i.storeIntBytes(this.sessionID,64,"session_id"),i.storeLong(t.msg_id,"message_id"),i.storeInt(t.seq_no,"seq_no"),i.storeInt(t.body.length,"message_data_length"),i.storeRawBytes(t.body,"message_data"),this.getEncryptedMessage(i.getBuffer()).then(function(t){var i=new TLSerialization({startMaxLength:t.bytes.byteLength+256});i.storeIntBytes(a.authKeyID,64,"auth_key_id"),i.storeIntBytes(t.msgKey,128,"msg_key"),i.storeRawBytes(t.bytes,"encrypted_data");var s,l=b?i.getBuffer():i.getArray(),c=e.chooseServer(a.dcID,a.upload),d={code:406,type:"NETWORK_BAD_RESPONSE",url:c};try{n=angular.extend(n||{},{responseType:"arraybuffer",transformRequest:null}),s=o.post(c,l,n)}catch(p){s=r.reject(p)}return s.then(function(e){return e.data&&e.data.byteLength?e:r.reject(d)},function(e){return e.message||e.type||(e=angular.extend(d,{type:"NETWORK_BAD_REQUEST",originalError:e})),r.reject(e)})})},p.prototype.parseResponse=function(e){var t=this,n=new TLDeserialization(e),a=n.fetchIntBytes(64,!1,"auth_key_id");if(!bytesCmp(a,this.authKeyID))throw new Error("[MT] Invalid server auth_key_id: "+bytesToHex(a));var s=n.fetchIntBytes(128,!0,"msg_key"),o=n.fetchRawBytes(e.byteLength-n.getOffset(),!0,"encrypted_data");return this.getDecryptedMessage(s,o).then(function(e){var n=new TLDeserialization(e,{mtproto:!0}),a=(n.fetchIntBytes(64,!1,"salt"),n.fetchIntBytes(64,!1,"session_id")),o=n.fetchLong("message_id");if(!(bytesCmp(a,t.sessionID)||t.prevSessionID&&bytesCmp(a,t.prevSessionID)))throw console.warn("Sessions",a,t.sessionID,t.prevSessionID),new Error("[MT] Invalid server session_id: "+bytesToHex(a));var r=n.fetchInt("seq_no"),l=n.getOffset(),c=e.byteLength,d=n.fetchInt("message_data[length]");if(d%4||d>c-l)throw new Error("[MT] Invalid body length: "+d);var p=n.fetchRawBytes(d,!0,"message_data"),l=n.getOffset(),u=c-l;if(u<0||u>15)throw new Error("[MT] Invalid padding length: "+u);var m=convertToUint8Array(e).subarray(0,l);return i.sha1Hash(m).then(function(e){if(!bytesCmp(s,bytesFromArrayBuffer(e).slice(-16)))throw console.warn(s,bytesFromArrayBuffer(e)),new Error("[MT] server msgKey mismatch");var n=bytesToArrayBuffer(p),i={mtproto:!0,override:{mt_message:function(e,t){e.msg_id=this.fetchLong(t+"[msg_id]"),e.seqno=this.fetchInt(t+"[seqno]"),e.bytes=this.fetchInt(t+"[bytes]");var n=this.getOffset();try{e.body=this.fetchObject("Object",t+"[body]")}catch(a){console.error(dT(),"parse error",a.message,a.stack),e.body={_:"parse_error",error:a}}this.offset!=n+e.bytes&&(this.offset=n+e.bytes)},mt_rpc_result:function(e,n){e.req_msg_id=this.fetchLong(n+"[req_msg_id]");var a=t.sentMessages[e.req_msg_id],i=a&&a.resultType||"Object";e.req_msg_id&&!a||(e.result=this.fetchObject(i,n+"[result]"))}}},l=new TLDeserialization(n,i),c=l.fetchObject("","INPUT");return{response:c,messageID:o,sessionID:a,seqNo:r}})})},p.prototype.applyServerSalt=function(e){var t=longToBytes(e),n={};return n["dc"+this.dcID+"_server_salt"]=bytesToHex(t),a.set(n),this.serverSalt=t,!0},p.prototype.sheduleRequest=function(e){this.offline&&this.checkConnection("forced shedule");var t=tsNow()+e;return!(e&&this.nextReq&&this.nextReq<=t)&&(l.cancel(this.nextReqPromise),e>0?this.nextReqPromise=l(this.performSheduledRequest.bind(this),e||0):setZeroTimeout(this.performSheduledRequest.bind(this)),void(this.nextReq=t))},p.prototype.ackMessage=function(e){this.pendingAcks.push(e),this.sheduleRequest(3e4)},p.prototype.reqResendMessage=function(e){console.log(dT(),"Req resend",e),this.pendingResends.push(e),this.sheduleRequest(100)},p.prototype.cleanupSent=function(){var e=this,t=!1;return angular.forEach(this.sentMessages,function(n,a){if(n.notContentRelated&&void 0===e.pendingMessages[a])delete e.sentMessages[a];else if(n.container){for(var i=0;i100&&this.lastServerMessages.shift(),this.processMessage(e.body,e.msg_id,i);break;case"new_session_created":this.ackMessage(n),this.processMessageAck(e.first_msg_id),this.applyServerSalt(e.server_salt);var d=this;a.get("dc").then(function(t){t==d.dcID&&!d.upload&&g&&g(e,!0)});break;case"msgs_ack":for(var r=0;r5?"[.."+e.result.length+"..]":e.result),console.log(dT(),"Rpc response",_)}l.deferred.resolve(e.result)}l.isAPI&&(this.connectionInited=!0)}delete this.sentMessages[m]}break;default:this.ackMessage(n),g&&g(e,!0)}},{getNetworker:function(e,t,n,a){return new p(e,t,n,a)},setUpdatesProcessor:function(e){g=e},stopAll:m,startAll:u}}]),angular.module("izhukov.mtproto.wrapper",["izhukov.utils","izhukov.mtproto"]).factory("MtpApiManager",["Storage","MtpAuthorizer","MtpNetworkerFactory","MtpSingleInstanceService","AppRuntimeManager","ErrorService","qSync","$rootScope","$q","TelegramMeWebService",function(e,t,n,a,i,s,o,r,l,c){function d(e){v!==e&&(v=e,c.setAuthorized(v))}function p(t,n){var a=angular.extend({dcID:t},n);e.set({dc:t,user_auth:a}),d(!0),r.$broadcast("user_auth",a),k=t}function u(){for(var t=[],n=1;n<=5;n++)t.push("dc"+n+"_auth_key");return e.get(t).then(function(n){for(var a=[],i=0;i=a.stopTime)return p(s)}else a.stopTime=_+1e3*(void 0!==a.timeout?a.timeout:10);a.waitTime=a.waitTime?Math.min(60,1.5*a.waitTime):1,setTimeout(function(){f(r)},1e3*a.waitTime)}else{var v=s.type.match(/^FLOOD_WAIT_(\d+)/)[1]||10;if(v>(a.timeout||60))return p(s);setTimeout(function(){f(r)},1e3*v)}})};return(o=a.dcID||k)?g(o,a).then(f,p):e.get("dc").then(function(e){g(o=e||2,a).then(f,p)}),c.promise}function f(){return e.get("user_auth").then(function(e){return d(e&&e.id>0||!1),e.id||0})}function _(){return k||!1}var v,y={},b={},w={},k=!1;return a.start(),e.get("dc").then(function(e){e&&(k=e)}),{getBaseDcID:_,getUserID:f,invokeApi:h,getNetworker:g,setUserAuth:p,logOut:u}}]).factory("MtpApiFileManager",["MtpApiManager","$q","qSync","FileManager","IdbFileStorage","TmpfsFileStorage","MemoryFileStorage","WebpManager",function(e,t,n,a,i,s,o,r){function l(e,n,a){void 0===w[e]&&(w[e]=[],k[e]=0);var i=w[e],s=t.defer();return i.push({cb:n,deferred:s,activeDelta:a}),setZeroTimeout(function(){c(e)}),s.promise}function c(e){var t=w[e],n="upload"==e?11:5;if(k[e]>=n||!t||!t.length)return!1;var a=t.shift(),i=a.activeDelta||1;k[e]+=i;$++;a.cb().then(function(t){k[e]-=i,c(e),a.deferred.resolve(t)},function(t){k[e]-=i,c(e),a.deferred.reject(t)})}function d(e){switch(e._){case"inputDocumentFileLocation":var t=(e.file_name||"").split(".",2),n=t[1]||"";e.sticker&&!r.isWebpSupported()&&(n+=".png");var a=e.version?"v"+e.version:"";return t[0]+"_"+e.id+a+"."+n;default:e.volume_id||console.trace("Empty location",e);var n="jpg";return e.sticker&&(n=r.isWebpSupported()?"webp":"png"),e.volume_id+"_"+e.local_id+"_"+e.secret+"."+n}}function p(e){if(!e)return!1;var t=d(e);return b[t]||!1}function u(){if(!Config.Modes.memory_only){if(s.isAvailable())return s;if(i.isAvailable())return i}return o}function m(e,t){var n=d(e);return v[n]||(v[n]=u().saveFile(n,t).then(function(e){return b[n]=e},function(e){delete v[n]})),v[n]}function g(i){if(!a.isAvailable())return t.reject({type:"BROWSER_BLOB_NOT_SUPPORTED"});var s=d(i),o=i.sticker?"image/webp":"image/jpeg",c=v[s]||y[s];if(c)return c;var p=u();return y[s]=p.getFile(s).then(function(e){return b[s]=e},function(){var t=l(i.dc_id,function(){var t=i;return t._&&"fileLocation"!=t._||(t=angular.extend({},i,{_:"inputFileLocation"})),e.invokeApi("upload.getFile",{location:t,offset:0,limit:1048576},{dcID:i.dc_id,fileDownload:!0,createNetworker:!0,noErrorBox:!0})}),c=function(e){return!i.sticker||r.isWebpSupported()?n.when(e):r.getPngBlobFromWebp(e)};return p.getFileWriter(s,o).then(function(e){return t.then(function(t){return c(t.bytes).then(function(t){return a.write(e,t).then(function(){return b[s]=e.finalize()})})})})})}function h(e,t){var n=u(),a=d(e);return n.getFile(a,t)}function f(i,s,o,c){if(!a.isAvailable())return t.reject({type:"BROWSER_BLOB_NOT_SUPPORTED"});c=c||{};var p=!1;s.sticker&&!r.isWebpSupported()&&(c.toFileEntry||o>524288?delete s.sticker:(p=!0,c.mime="image/png"));var m=d(s),g=c.toFileEntry||null,h=v[m]||y[m],f=u();if(h)return g?h.then(function(e){return a.copy(e,g)}):h;var _,w=t.defer(),k=!1,$=!1,C=c.mime||"image/jpeg",S=function(e){w.reject(e),S=angular.noop,!_||e&&"DOWNLOAD_CANCELED"==e.type||_.truncate(0)};return f.getFile(m,o).then(function(e){g?a.copy(e,g).then(function(){w.resolve()},S):w.resolve(b[m]=e)},function(){var c=g?a.getFileWriter(g):f.getFileWriter(m,C),d=function(e){return p?r.getPngBlobFromWebp(e):n.when(e)};c.then(function(n){_=n;var r,c,p=524288,u=0,h=t.when();if(n.length){if(u=n.length,u>=o)return void(g?w.resolve():w.resolve(b[m]=n.finalize()));n.seek(u),w.notify({done:u,total:o})}for(r=u;r=o,r,c,h),h=c.promise})}),w.promise.cancel=function(){k||$||(k=!0,delete y[m],S({type:"DOWNLOAD_CANCELED"}))},g||(y[m]=w.promise),w.promise}function _(n){var a=n.size,i=a>=10485760,s=!1,o=!1,r=0,c=262144,d=2;a>67108864?(c=524288,d=4):a<102400&&(c=32768,d=1);var p=Math.ceil(a/c);if(p>3e3)return t.reject({type:"FILE_TOO_BIG"});var u,m=[nextRandomInt(4294967295),nextRandomInt(4294967295)],g=t.defer(),h=function(e){g.reject(e),s=!0,h=angular.noop},f=0,_={_:i?"inputFileBig":"inputFile",id:m,parts:p,name:n.name,md5_checksum:""};for(u=0;u=p?(g.resolve(_),o=!0):(console.log(dT(),"Progress",r*c/a),g.notify({done:r*c,total:a}))},h))},d.readAsArrayBuffer(v),l.promise},d)}(u,f++);return g.promise.cancel=function(){console.log("cancel upload",s,o),s||o||(s=!0,h({type:"UPLOAD_CANCELED"}))},g.promise}var v={},y={},b={},w={},k={},$=0;return{getCachedFile:p,getDownloadedFile:h,downloadFile:f,downloadSmallFile:g,saveSmallFile:m,uploadFile:_}}]).service("MtpSingleInstanceService",["_","$rootScope","$compile","$timeout","$interval","$modalStack","Storage","AppRuntimeManager","IdleManager","ErrorService","MtpNetworkerFactory",function(e,t,n,a,i,s,o,r,l,c,d){function p(){if(!f&&!Config.Navigator.mobile&&!Config.Modes.packed){f=!0,l.start(),t.$watch("idle.isIDLE",g),i(g,5e3),g();try{$($window).on("beforeunload",u)}catch(e){}} -}function u(){o.remove(_?"xt_instance":"xt_idle_instance")}function m(){if(_||y)return!1;console.log(dT(),"deactivate"),v=!1,y=!0,u(),s.dismissAll(),document.title=e("inactive_tab_title_raw");var a=n(""),i=t.$new(!0);i.close=function(){r.close()},i.reload=function(){r.reload()},a(i,function(e){$(".page_wrap").hide(),$(e).appendTo($("body"))}),t.idle.deactivated=!0}function g(){if(y)return!1;var e=tsNow(),n=t.idle&&t.idle.isIDLE,i={id:h,idle:n,time:e};o.get("xt_instance","xt_idle_instance").then(function(t){var s=t[0],r=t[1];!n||!s||s.id==h||s.time=1e3?void s.resolve(o):void this["continue"]()},t.onerror=function(e){console.log("phonebook error",e,e.type,e.message),s.reject(e)},s.promise}return{isAvailable:i,openPhonebookImport:s,getPhonebookContacts:o}}]).service("AppChatsManager",["$q","$rootScope","$modal","_","MtpApiManager","AppUsersManager","AppPhotosManager","RichTextProcessor",function(e,t,n,a,i,s,o,r){function l(e){angular.forEach(e,c)}function c(e){if(angular.isObject(e)){e.rTitle=r.wrapRichText(e.title,{noLinks:!0,noLinebreaks:!0})||a("chat_title_deleted");var n=S[e.id],i=SearchIndexManager.cleanSearchText(e.title||"").split(" "),s=i.shift(),o=i.pop();if(e.initials=s.charAt(0)+(o?o.charAt(0):s.charAt(1)),e.num=Math.abs(e.id>>1)%8+1,void 0===e.pFlags&&(e.pFlags={}),!e.pFlags.min||void 0===n){if(e.username){var l=SearchIndexManager.cleanUsername(e.username);M[l]=e.id}void 0===n?n=S[e.id]=e:(safeReplaceObject(n,e),t.$broadcast("chat_update",e.id)),void 0!==A[e.id]&&safeReplaceObject(A[e.id],e&&e.photo&&e.photo.photo_small||{empty:!0})}}}function d(e){return S[e]||{id:e,deleted:!0,access_hash:x[e]}}function p(e,t){if(void 0===S[e])return!1;var n=d(e);if("chatForbidden"==n._||"channelForbidden"==n._||n.pFlags.kicked||n.pFlags.left)return!1;if(n.pFlags.creator)return!0;switch(t){case"send":if("channel"==n._&&!n.pFlags.megagroup&&!n.pFlags.editor)return!1;break;case"edit_title":case"edit_photo":case"invite":if("channel"==n._){if(!n.pFlags.megagroup)return!1;if(!(n.pFlags.editor||"invite"==t&&n.pFlags.democracy))return!1}else if(n.pFlags.admins_enabled&&!n.pFlags.admin)return!1}return!0}function u(e){return M[e]||0}function m(e,t){x[e]=t}function g(e){I[e]=!0}function h(e){var t=S[e];return!((!t||"channel"!=t._&&"channelForbidden"!=t._)&&!x[e])}function f(e){if(I[e])return!0;var t=S[e];return!(!t||"channel"!=t._||!t.pFlags.megagroup)}function _(e){return h(e)&&!f(e)}function v(e){return e||0}function y(e){return e?{_:"inputChannel",channel_id:e,access_hash:d(e).access_hash||x[e]||0}:{_:"inputChannelEmpty"}}function b(e,t){var n=S[e];return angular.isObject(n)&&(t||!n.pFlags.min)}function w(e){var t=d(e);return void 0===A[e]&&(A[e]=t&&t.photo&&t.photo.photo_small||{empty:!0}),{placeholder:"img/placeholders/GroupAvatar"+Math.ceil(t.num/2)+"@2x.png",location:A[e]}}function k(e){var t=d(e);return h(e)?(f(e)?"s":"c")+e+"_"+t.access_hash:"g"+e}function $(e,t){var n=angular.copy(t),a=d(e);if(n.participants&&"chatParticipants"==n.participants._&&i.getUserID().then(function(e){var t=a.pFlags.creator||a.pFlags.admins_enabled&&a.pFlags.admin;angular.forEach(n.participants.participants,function(n){n.canLeave=e==n.user_id,n.canKick=!n.canLeave&&(a.pFlags.creator||"chatParticipant"==n._&&(t||e==n.inviter_id)),n.user=s.getUser(n.user_id)})}),n.participants&&"channelParticipants"==n.participants._){var o=a.pFlags.creator||a.pFlags.editor||a.pFlags.moderator;angular.forEach(n.participants.participants,function(e){e.canLeave=!a.pFlags.creator&&"channelParticipantSelf"==e._,e.canKick=o&&"channelParticipant"==e._,e.user=s.getUser(e.user_id)})}return n.about&&(n.rAbout=r.wrapRichText(n.about,{noLinebreaks:!0})),n.peerString=k(e),n.chat=a,n}function C(e,a){var i=t.$new();if(i.chatID=e,h(e)){n.open({templateUrl:templateUrl("channel_modal"),controller:"ChannelModalController",scope:i,windowClass:"chat_modal_window channel_modal_window mobile_modal"})}else{n.open({templateUrl:templateUrl("chat_modal"),controller:"ChatModalController",scope:i,windowClass:"chat_modal_window mobile_modal"})}}var S={},M={},x={},I={},A={};return t.$on("apiUpdate",function(e,n){switch(n._){case"updateChannel":var a=n.channel_id;t.$broadcast("channel_settings",{channelID:a})}}),{saveApiChats:l,saveApiChat:c,getChat:d,isChannel:h,isMegagroup:f,isBroadcast:_,hasRights:p,saveChannelAccess:m,saveIsMegagroup:g,getChatInput:v,getChannelInput:y,getChatPhoto:w,getChatString:k,resolveUsername:u,hasChat:b,wrapForFull:$,openChat:C}}]).service("AppPeersManager",["$q","qSync","AppUsersManager","AppChatsManager","MtpApiManager",function(e,t,n,a,i){function s(e){var t=e.charAt(0),i=e.substr(1).split("_");return"u"==t?(n.saveUserAccess(i[0],i[1]),{_:"inputPeerUser",user_id:i[0],access_hash:i[1]}):"c"==t||"s"==t?(a.saveChannelAccess(i[0],i[1]),"s"==t&&a.saveIsMegagroup(i[0]),{_:"inputPeerChannel",channel_id:i[0],access_hash:i[1]||0}):{_:"inputPeerChat",chat_id:i[0]}}function o(e){if(!e)return{_:"inputPeerEmpty"};if(e<0){var t=-e;return a.isChannel(t)?{_:"inputPeerChannel",channel_id:t,access_hash:a.getChat(t).access_hash||0}:{_:"inputPeerChat",chat_id:t}}return{_:"inputPeerUser",user_id:e,access_hash:n.getUser(e).access_hash||0}}function r(e){var t;if(e>0)t="%pu "+n.getUserSearchText(e);else if(e<0){var i=a.getChat(-e);t="%pg "+(i.title||"")}return t}function l(e){return e>0?n.getUserString(e):a.getChatString(-e)}function c(e){if(e>0)return{_:"peerUser",user_id:e};var t=-e;return a.isChannel(t)?{_:"peerChannel",channel_id:t}:{_:"peerChat",chat_id:t}}function d(e){var s=SearchIndexManager.cleanUsername(e);if(s.match(/^\d+$/))return t.when(!1);var o,r,l;return(o=n.resolveUsername(s))&&(l=n.getUser(o).username,SearchIndexManager.cleanUsername(l)==s)?t.when(o):(r=a.resolveUsername(s))&&(l=a.getChat(r).username,SearchIndexManager.cleanUsername(l)==s)?t.when(-r):i.invokeApi("contacts.resolveUsername",{username:e}).then(function(e){return n.saveApiUsers(e.users),a.saveApiChats(e.chats),p(e.peer)})}function p(e){if(angular.isObject(e))return e.user_id?e.user_id:-(e.channel_id||e.chat_id);var t="u"==e.charAt(0),n=e.substr(1).split("_");return t?n[0]:-n[0]||0}function u(e){return e>0?n.getUser(e):a.getChat(-e)}function m(e){return e>0?n.getUserPhoto(e):a.getChatPhoto(-e)}function g(e){return e<0&&a.isChannel(-e)}function h(e){return e<0&&a.isMegagroup(-e)}function f(e){return e<0&&!a.isBroadcast(-e)}function _(e){return g(e)&&!h(e)}function v(e){return e>0&&n.isBot(e)}return{getInputPeer:s,getInputPeerByID:o,getPeerSearchText:r,getPeerString:l,getOutputPeer:c,getPeerID:p,getPeer:u,getPeerPhoto:m,resolveUsername:d,isChannel:g,isAnyGroup:f,isMegagroup:h,isBroadcast:_,isBot:v}}]).service("AppProfileManager",["$q","$rootScope","AppUsersManager","AppChatsManager","AppPeersManager","AppPhotosManager","NotificationsManager","MtpApiManager","ApiUpdatesManager","RichTextProcessor",function(e,t,n,a,i,s,o,r,l,c){function d(e){var t=e&&e.user_id;if(!t)return!1;var n={};return angular.forEach(e.commands,function(e){n[e.command]=e.description}),_[t]={id:t,version:e.version,shareText:e.share_text,description:e.description,commands:n}}function p(e,t){return r.invokeApi("users.getFullUser",{id:n.getUserInput(e)}).then(function(a){return t&&t.phone_number?(a.user.phone=t.phone_number,(t.first_name||t.last_name)&&(a.user.first_name=t.first_name,a.user.last_name=t.last_name),n.saveApiUser(a.user)):n.saveApiUser(a.user,!0),a.profile_photo&&s.savePhoto(a.profile_photo,{user_id:e}),void 0!==a.about&&(a.rAbout=c.wrapRichText(a.about,{noLinebreaks:!0})),o.savePeerSettings(e,a.notify_settings),a.bot_info&&(a.bot_info=d(a.bot_info)),a})}function u(t){var a=[];return t>=0&&!n.isBot(t)||i.isChannel(t)&&!i.isMegagroup(t)?e.when(a):t>=0?p(t).then(function(e){var t=e.bot_info;return t&&"botInfoEmpty"!=t._&&a.push(t),a}):m(-t).then(function(e){return angular.forEach(e.bot_info,function(e){a.push(d(e))}),a})}function m(i){if(a.isChannel(i))return f(i);if(void 0!==v[i]){var l=a.getChat(i);if(l.version==v[i].participants.version||l.pFlags.left)return e.when(v[i])}return void 0!==y[i]?y[i]:y[i]=r.invokeApi("messages.getFullChat",{chat_id:a.getChatInput(i)}).then(function(e){a.saveApiChats(e.chats),n.saveApiUsers(e.users);var r=e.full_chat;return r&&r.chat_photo.id&&s.savePhoto(r.chat_photo),o.savePeerSettings(-i,r.notify_settings),delete y[i],v[i]=r,t.$broadcast("chat_full_update",i),r})}function g(e,t){return m(e).then(function(n){if(!t&&n.exported_invite&&"chatInviteExported"==n.exported_invite._)return n.exported_invite.link;var i;return i=a.isChannel(e)?r.invokeApi("channels.exportInvite",{channel:a.getChannelInput(e)}):r.invokeApi("messages.exportChatInvite",{chat_id:a.getChatInput(e)}),i.then(function(t){return void 0!==v[e]&&(v[e].exported_invite=t),t.link})})}function h(e){return r.invokeApi("channels.getParticipants",{channel:a.getChannelInput(e),filter:{_:"channelParticipantsRecent"},offset:0,limit:a.isMegagroup(e)?50:200}).then(function(t){n.saveApiUsers(t.users);var i=t.participants,s=a.getChat(e);if(!s.pFlags.kicked&&!s.pFlags.left){for(var o,r=n.getSelf().id,l=!1,c=0,d=i.length;c800&&(a-=208);var o=l(n,a,s);o&&!o.preloaded&&(o.preloaded=!0,o.size?i.downloadFile(o.location.dc_id,{_:"inputFileLocation",volume_id:o.location.volume_id,local_id:o.location.local_id,secret:o.location.secret},o.size):i.downloadSmallFile(o.location))}}function p(e){return f[e]||{_:"photoEmpty"}}function u(e,t){t=t||{};var n=angular.copy(f[e])||{_:"photoEmpty"},a=t.website?64:Math.min(_-80,Config.Mobile?210:260),i=t.website?64:Math.min(v-100,Config.Mobile?210:260),s=l(n,a,i),o={placeholder:"img/placeholders/PhotoThumbConversation.gif",width:a,height:i};if(t.website&&Config.Mobile&&(a=50,i=50),s&&"photoSizeEmpty"!=s._){var r=calcImageInBox(s.w,s.h,a,i);o.width=r.w,o.height=r.h,o.location=s.location,o.size=s.size}else o.width=100,o.height=100;return n.thumb=o,n}function m(e){var n=u(e),a=$(window).width()-(Config.Mobile?0:32),i=$(t).height()-(Config.Mobile?0:116);!Config.Mobile&&a>800&&(a-=208);var s=l(n,a,i),o={placeholder:"img/placeholders/PhotoThumbModal.gif"};if(o.width=a,o.height=i,s&&"photoSizeEmpty"!=s._){var r=calcImageInBox(s.w,s.h,a,i,!0);o.width=r.w,o.height=r.h,o.modalWidth=Math.max(o.width,Math.min(400,a)),o.location=s.location,o.size=s.size}return n.full=o,n}function g(t,a){if(!t||"0"===t)return!1;var i=n.$new(!0);i.photoID=t;var s="PhotoModalController";a&&a.p>0?(s="UserpicModalController",i.userID=a.p):a&&a.p<0?(s="ChatpicModalController",i.chatID=-a.p):a&&a.m>0&&(i.messageID=a.m,a.w&&(i.webpageID=a.w));e.open({templateUrl:templateUrl("photo_modal"),windowTemplateUrl:templateUrl("media_modal_layout"),controller:s,scope:i,windowClass:"photo_modal_window"})}function h(e){var n=f[e],a="jpg",s="image/jpeg",r="photo"+e+"."+a,c=Math.max(screen.width||0,$(window).width()-36,800),d=Math.max(screen.height||0,$(t).height()-150,800),p=l(n,c,d),u={_:"inputFileLocation",volume_id:p.location.volume_id,local_id:p.location.local_id,secret:p.location.secret};o.chooseSave(r,a,s).then(function(e){e&&i.downloadFile(p.location.dc_id,u,p.size,{mime:s,toFileEntry:e}).then(function(){},function(e){console.log("photo download failed",e)})},function(){var e=i.getCachedFile(u);return e?o.download(e,s,r):void i.downloadFile(p.location.dc_id,u,p.size,{mime:s}).then(function(e){o.download(e,s,r)},function(e){console.log("photo download failed",e)})})}var f={},_=$(window).width(),v=$(window).height();return n.preloadPhoto=d,n.openPhoto=g,{savePhoto:r,preloadPhoto:d,getUserPhotos:c,getPhoto:p,choosePhotoSize:l,wrapForHistory:u,wrapForFull:m,openPhoto:g,downloadPhoto:h}}]).service("AppWebPagesManager",["$modal","$sce","$window","$rootScope","MtpApiManager","AppPhotosManager","AppDocsManager","RichTextProcessor",function(e,t,n,a,i,s,o,r){function l(e,t,n){e.photo&&"photo"===e.photo._?s.savePhoto(e.photo,n):delete e.photo,e.document&&"document"===e.document._?o.saveDoc(e.document,n):("document"==e.type&&delete e.type,delete e.document);var i=e.site_name,l=e.title||e.author||i||"";i&&l==i&&delete e.site_name,l.length>100&&(l=l.substr(0,80)+"..."),e.rTitle=r.wrapRichText(l,{noLinks:!0,noLinebreaks:!0});var c="";if("GitHub"==i){var d=e.url.match(/(https?:\/\/github\.com\/[^\/]+\/[^\/]+)/);d&&(c=d[0]+"/issues/{1}")}var p=e.description||"";if(p.length>180&&(p=p.substr(0,150).replace(/(\n|\s)+$/,"")+"..."),e.rDescription=r.wrapRichText(p,{contextSite:i||"external",contextHashtag:c}),"photo"!=e.type&&"video"!=e.type&&"gif"!=e.type&&"document"!=e.type&&!e.description&&e.photo&&(e.type="photo"),t&&(void 0===m[e.id]&&(m[e.id]={}),m[e.id][t]=!0,u[e.id]=e),void 0===u[e.id]?u[e.id]=e:safeReplaceObject(u[e.id],e),!t&&void 0!==m[e.id]){var g=[];angular.forEach(m[e.id],function(e,t){g.push(t)}),a.$broadcast("webpage_updated",{id:e.id,msgs:g})}}function c(t,n){var i=a.$new(!0);i.webpageID=t,i.messageID=n,e.open({templateUrl:templateUrl("embed_modal"),windowTemplateUrl:templateUrl("media_modal_layout"),controller:"EmbedModalController",scope:i,windowClass:"photo_modal_window"})}function d(e){var t=angular.copy(u[e])||{_:"webPageEmpty"};return t.photo&&t.photo.id&&(t.photo=s.wrapForHistory(t.photo.id,{website:"photo"!=t.type&&"video"!=t.type})),t.document&&t.document.id&&(t.document=o.wrapForHistory(t.document.id)),t}function p(e){var a=d(e);if(!a.embed_url)return a;var i=$(window).width()-(Config.Mobile?0:10),s=$(n).height()-(Config.Mobile?92:150);!Config.Mobile&&i>800&&(i-=208);var o={width:i,height:s};if(a.embed_width&&a.embed_height){var r=calcImageInBox(a.embed_width,a.embed_height,i,s);o.width=r.w,o.height=r.h}else o.height=o.width=Math.min(i,s);var l=Config.Modes.chrome_packed?"webview":"iframe",c="iframe"!=a.embed_type?a.embed_type||"text/html":"text/html",p="<"+l+' src="'+encodeEntities(a.embed_url)+'" type="'+encodeEntities(c)+'" frameborder="0" border="0" webkitallowfullscreen mozallowfullscreen allowfullscreen width="'+o.width+'" height="'+o.height+'" style="width: '+o.width+"px; height: "+o.height+'px;">";return o.html=t.trustAs("html",p),a.full=o,a}var u={},m={};return a.$on("apiUpdate",function(e,t){switch(t._){case"updateWebPage":l(t.webpage)}}),{saveWebPage:l,openEmbed:c,wrapForFull:p,wrapForHistory:d}}]).service("AppGamesManager",["$modal","$sce","$window","$rootScope","MtpApiManager","AppPhotosManager","AppDocsManager","RichTextProcessor",function(e,t,n,a,i,s,o,r){function l(e,t,n){e.photo&&"photo"===e.photo._?s.savePhoto(e.photo,n):delete e.photo,e.document&&"document"===e.document._?o.saveDoc(e.document,n):delete e.document,e.rTitle=r.wrapRichText(e.title,{noLinks:!0,noLinebreaks:!0}),e.rDescription=r.wrapRichText(e.description||"",{}),void 0===u[e.id]?u[e.id]=e:safeReplaceObject(u[e.id],e)}function c(t,n,i){var s=a.$new(!0);s.gameID=t,s.messageID=n,s.embedUrl=i,e.open({templateUrl:templateUrl("game_modal"),windowTemplateUrl:templateUrl("media_modal_layout"),controller:"GameModalController",scope:s,windowClass:"photo_modal_window mobile_modal"})}function d(e){var t=angular.copy(u[e])||{_:"gameEmpty"};return t.photo&&t.photo.id&&(t.photo=s.wrapForHistory(t.photo.id)),t.document&&t.document.id&&(t.document=o.wrapForHistory(t.document.id)),t}function p(e,a,i){var s=d(e),o=$(window).width()-(Config.Mobile?0:10),r=$(n).height()-(Config.Mobile?51:150);!Config.Mobile&&o>800&&(o-=208);var l={width:o,height:r},c=Config.Modes.chrome_packed?"webview":"iframe",p="text/html",u="<"+c+' src="'+encodeEntities(i)+'" type="'+encodeEntities(p)+'" frameborder="0" border="0" webkitallowfullscreen mozallowfullscreen allowfullscreen width="'+l.width+'" height="'+l.height+'" style="width: '+l.width+"px; height: "+l.height+'px;" sandbox="allow-scripts allow-same-origin">";return l.html=t.trustAs("html",u),s.full=l,s}var u={};return{saveGame:l,openGame:c,wrapForFull:p,wrapForHistory:d}}]).service("AppDocsManager",["$sce","$rootScope","$modal","$window","$q","$timeout","RichTextProcessor","MtpApiFileManager","FileManager","qSync",function(e,t,n,a,i,s,o,r,l,c){function d(e,t){if(w[e.id]=e,t&&angular.extend(e,t),e.thumb&&"photoCachedSize"==e.thumb._&&(r.saveSmallFile(e.thumb.location,e.thumb.bytes),e.thumb.size=e.thumb.bytes.length,delete e.thumb.bytes,e.thumb._="photoSize"),e.thumb&&"photoSizeEmpty"==e.thumb._&&delete e.thumb,angular.forEach(e.attributes,function(t){switch(t._){case"documentAttributeFilename":e.file_name=t.file_name;break;case"documentAttributeAudio":e.duration=t.duration,e.audioTitle=t.title,e.audioPerformer=t.performer,e.type=t.pFlags.voice?"voice":"audio";break;case"documentAttributeVideo":e.duration=t.duration,e.w=t.w,e.h=t.h,e.thumb&&(e.type="video");break;case"documentAttributeSticker":e.sticker=!0,void 0!==t.alt&&(e.stickerEmojiRaw=t.alt,e.stickerEmoji=o.wrapRichText(e.stickerEmojiRaw,{noLinks:!0,noLinebreaks:!0})),t.stickerset&&("inputStickerSetEmpty"==t.stickerset._?delete t.stickerset:"inputStickerSetID"==t.stickerset._&&(e.stickerSetInput=t.stickerset)),e.thumb&&"image/webp"==e.mime_type&&(e.type="sticker");break;case"documentAttributeImageSize":e.w=t.w,e.h=t.h;break;case"documentAttributeAnimated":"image/gif"!=e.mime_type&&"video/mp4"!=e.mime_type||!e.thumb||(e.type="gif"),e.animated=!0}}),!e.mime_type)switch(e.type){case"gif":e.mime_type="video/mp4";break;case"video":e.mime_type="video/mp4";break;case"sticker":e.mime_type="image/webp";break;case"audio":e.mime_type="audio/mpeg";break;case"voice":e.mime_type="audio/ogg";break;default:e.mime_type="application/octet-stream"}e.file_name||(e.file_name=""),"documentEmpty"==e._&&(e.size=0)}function p(e){return w[e]||{_:"documentEmpty"}}function u(e){return void 0!==w[e]}function m(e){if(e.file_name)return e.file_name;var t="."+e.mime_type.split("/")[1];return".octet-stream"==t&&(t=""),"t_"+(e.type||"file")+e.id+t}function g(e){if(void 0!==k[e])return k[e];var t,n,a,i,s=angular.copy(w[e]),o=s.thumb,r=!1;switch(s.type){case"video":t=Math.min(C-80,Config.Mobile?210:150),n=Math.min(S-100,Config.Mobile?210:150);break;case"sticker":r=!0,t=Math.min(C-80,Config.Mobile?128:192),n=Math.min(S-100,Config.Mobile?128:192);break;case"gif":r=!0,t=Math.min(C-80,Config.Mobile?210:260),n=Math.min(S-100,Config.Mobile?210:260);break;default:t=n=100}return r&&s.w&&s.h?i=calcImageInBox(s.w,s.h,t,n):o&&(i=calcImageInBox(o.w,o.h,t,n)),i?(a={width:i.w,height:i.h},o&&(a.location=o.location,a.size=o.size)):a=!1,s.thumb=a,s.withPreview=!Config.Mobile&&s.mime_type.match(/^image\/(gif|png|jpeg|jpg|bmp|tiff)/)?1:0,k[e]=s}function h(e){var t=w[e],n=k[e]||t||{},a={_:"inputDocumentFileLocation",id:e,access_hash:t.access_hash,version:t.version,file_name:m(t)};void 0===n.downloaded&&r.getDownloadedFile(a,t.size).then(function(){n.downloaded=!0},function(){n.downloaded=!1})}function f(n,a){var o=w[n],d=k[n]||o||{},p={_:"inputDocumentFileLocation",id:n,access_hash:o.access_hash,version:o.version,file_name:m(o)};if("documentEmpty"==o._)return i.reject();if(d.downloaded&&!a){var u=r.getCachedFile(p);if(u)return c.when(u)}d.progress={enabled:!d.downloaded,percent:1,total:o.size};var g=r.downloadFile(o.dc_id,p,o.size,{mime:o.mime_type||"application/octet-stream",toFileEntry:a});return g.then(function(t){t&&(l.getFileCorrectUrl(t,o.mime_type).then(function(t){var n=e.trustAsResourceUrl(t);d.url=n,o.url=n}),d.downloaded=!0),d.progress.percent=100,s(function(){delete d.progress})},function(e){console.log("document download failed",e),d.progress.enabled=!1},function(e){console.log("dl progress",e),d.progress.enabled=!0,d.progress.done=e.done,d.progress.percent=Math.max(1,Math.floor(100*e.done/e.total)),t.$broadcast("history_update")}),d.progress.cancel=g.cancel,g}function _(e,a){var i=t.$new(!0);i.docID=e,i.messageID=a;n.open({templateUrl:templateUrl("document_modal"),windowTemplateUrl:templateUrl("media_modal_layout"),controller:"DocumentModalController",scope:i,windowClass:"document_modal_window"})}function v(e){var t=w[e],n=(k[e]||t||{},t.mime_type, -m(t)),a=(n.split(".",2)||[])[1]||"";l.chooseSave(m(t),a,t.mime_type).then(function(t){t&&f(e,t)},function(){f(e).then(function(e){l.download(e,t.mime_type,n)})})}function y(e){var t=g(e),n=Math.min($(window).width()-(Config.Mobile?0:60),542),a=$(window).height()-(Config.Mobile?92:150),i={placeholder:"img/placeholders/docThumbModal.gif",width:n,height:a};if(t.w&&t.h){var s=calcImageInBox(t.w,t.h,n,a);i.width=s.w,i.height=s.h}else i.height=i.width=Math.min(n,a);return t.full=i,t.fullThumb=angular.copy(t.thumb),t.fullThumb.width=i.width,t.fullThumb.height=i.height,t}function b(e,a){var i=t.$new(!0);return i.docID=e,i.messageID=a,n.open({templateUrl:templateUrl("video_modal"),windowTemplateUrl:templateUrl("media_modal_layout"),controller:"VideoModalController",scope:i,windowClass:"video_modal_window"})}var w={},k={},C=$(window).width(),S=$(window).height();return{saveDoc:d,getDoc:p,hasDoc:u,wrapForHistory:g,wrapVideoForFull:y,updateDocDownloaded:h,downloadDoc:f,openDoc:_,openVideo:b,saveDocFile:v}}]).service("AppStickersManager",["$q","$rootScope","$modal","_","FileManager","MtpApiManager","AppDocsManager","Storage","ApiUpdatesManager",function(e,t,n,a,i,s,o,r,l){function c(){k||(k=!0,setTimeout(d,1e3))}function d(e){return r.get("all_stickers").then(function(t){var n=Config.Schema.API.layer;return t.layer==n&&void 0!==t.emojiIndex||(t=!1),t&&t.date>tsNow(!0)&&!e?(S=t.emojiIndex,p(t)):s.invokeApi("messages.getAllStickers",{hash:t&&t.hash||""}).then(function(e){var a="messages.allStickersNotModified"==e._;return a&&(e=t),e.date=tsNow(!0)+3600,e.layer=n,delete e._,a?(r.set({all_stickers:e}),S=e.emojiIndex,p(e)):g(e,t&&t.fullSets).then(function(){return r.set({all_stickers:e}),p(e)})})})}function p(e){if($!==e.hash){$=e.hash;var t,n,i,s,r,l,c,d;for(C=[],i=e.sets.length,t=0;t15&&(i=i.slice(0,15)),i.push([e,1])),ConfigStorage.set({stickers_popular:i})})}function _(e){return s.invokeApi("messages.getStickerSet",{stickerset:e}).then(function(e){for(var t=0;t1209600||(a=e[t][0],m.hasUser(a)||m.saveApiUser(e[t][1]),i.push({id:a,rate:e[t][2],date:e[t][3]}))}return i})}function y(e){v().then(function(t){for(var a=!1,i=t.length,s=[],o=0;o15&&(s=s.slice(0,15)),s.push([e,m.getUser(e),1,tsNow(!0)])),ConfigStorage.set({inline_bots_popular:s}),n.$broadcast("inline_bots_popular")})}function b(n){return g.resolveUsername(n).then(function(a){if(a>0){var i=m.getUser(a);if(i.pFlags.bot&&void 0!==i.bot_inline_placeholder){var s={username:n,id:a,placeholder:i.bot_inline_placeholder};return i.pFlags.bot_inline_geo&&_.isAvailable()?T(a).then(function(){return _.getPosition().then(function(t){return s.geo=t,e.when(s)})})["catch"](function(){return e.when(s)}):e.when(s)}}return t.reject()},function(e){return e.handled=!0,t.reject(e)})}function w(e,t,n,a,i){return o.invokeApi("messages.getInlineBotResults",{flags:0|(a?1:0),bot:m.getUserInput(t),peer:g.getInputPeerByID(e),query:n,geo_point:a&&{_:"inputGeoPoint",lat:a.lat,"long":a["long"]},offset:i},{timeout:1,stopTime:-1,noErrorBox:!0}).then(function(e){var n=e.query_id;return delete e._,delete e.flags,delete e.query_id,e.switch_pm&&(e.switch_pm.rText=u.wrapRichText(e.switch_pm.text,{noLinebreaks:!0,noLinks:!0})),angular.forEach(e.results,function(e){var a=n+"_"+e.id;e.qID=a,e.botID=t,e.rTitle=u.wrapRichText(e.title,{noLinebreaks:!0,noLinks:!0}),e.rDescription=u.wrapRichText(e.description,{noLinebreaks:!0,noLinks:!0}),e.initials=(e.url||e.title||e.type||"").substr(0,1),e.document&&c.saveDoc(e.document),e.photo&&d.savePhoto(e.photo),D[a]=e}),e})}function k(e,t,n){if(e&&e[0]&&["photo","gif","sticker"].indexOf(e[0].type)!=-1){var a=[];angular.forEach(e,function(e){var t,n,i,s;if("botInlineMediaResult"==e._){if(i=e.document)t=e.document.w,n=e.document.h;else if(s=e.photo){var o=(s.sizes||[])[0];t=o&&o.w,n=o&&o.h}}else t=e.w,n=e.h;t&&n||(t=n=1),a.push(t/n)});var i=[],s=0,o=0;angular.forEach(a,function(e){var a=e*n;o+=a,!s||s<4&&o<1.1*t?s++:(i.push(s),s=1,o=a)}),s&&i.push(s);var r=0,l=i.length-1;angular.forEach(i,function(i,s){var o=s==l,c=a.slice(r,r+i),d=0;angular.forEach(c,function(e){d+=e}),angular.forEach(c,function(a,i){var s=n,l=t*a/d,c=s*a;o&&l>c&&(l=c);var p=e[r+i];p.thumbW=Math.floor(l)-2,p.thumbH=Math.floor(s)-2}),r+=i})}}function $(e,t,a){var s=g.getPeerString(e),o={};o["inline_switch_pm"+t]={peer:s,time:tsNow()},i.set(o),n.$broadcast("history_focus",{peerString:g.getPeerString(t)}),r.startBot(t,0,a)}function C(t){var n=m.getUser(t);if(!n||!n.pFlags.bot||!n.bot_inline_placeholder)return e.when(!1);var a="inline_switch_pm"+t;return i.get(a).then(function(e){return!!(e&&(i.remove(a),tsNow()-e.time<36e5))&&e.peer})}function S(e,t,a){n.$broadcast("history_focus",{peerString:t,attachment:{_:"inline_query",mention:"@"+m.getUser(e).username,query:a}})}function M(e,t){var n=r.getMessage(e),a=n.viaBotID||n.fromID;if(t.pFlags&&t.pFlags.same_peer){var i=r.getMessagePeer(n),s=g.getPeerString(i);return void S(a,s,t.query)}return C(a).then(function(e){return e?S(a,e,t.query):void f.selectPeer({canSend:!0}).then(function(e){return S(a,e,t.query)})})}function x(e,t){var n=r.getMessage(e),a=(n.fromID,r.getMessagePeer(n));return o.invokeApi("messages.getBotCallbackAnswer",{flags:1,peer:g.getInputPeerByID(a),msg_id:l.getMessageLocalID(e),data:t.data},{timeout:1,stopTime:-1,noErrorBox:!0}).then(function(e){if("string"==typeof e.message&&e.message.length)A(e.message,e.pFlags.alert);else if("string"==typeof e.url){var t=u.wrapUrl(e.url,!0);h.openUrl(t)}})}function I(e){var t=r.getMessage(e),n=r.getMessagePeer(t);return o.invokeApi("messages.getBotCallbackAnswer",{flags:2,peer:g.getInputPeerByID(n),msg_id:l.getMessageLocalID(e)},{timeout:1,stopTime:-1,noErrorBox:!0}).then(function(n){"string"==typeof n.message&&n.message.length?A(n.message,n.pFlags.alert):"string"==typeof n.url&&p.openGame(t.media.game.id,e,n.url)})}function A(e,t){if("string"==typeof e&&e.length){var n=u.wrapRichText(e,{noLinks:!0,noLinebreaks:!0});t?s.show({title_html:n,alert:!0}):a.pop({type:"info",body:n.valueOf(),bodyOutputType:"trustedHtml",showCloseButton:!1})}}function E(e,t,n){var a=D[t];if(void 0===a)return!1;y(a.botID);var i=t.split("_"),s=i.shift(),o=i.join("_");if(n=n||{},n.viaBotID=a.botID,n.queryID=s,n.resultID=o,a.send_message.reply_markup&&(n.reply_markup=a.send_message.reply_markup),"botInlineMessageText"==a.send_message._)n.entities=a.send_message.entities,r.sendText(e,a.send_message.message,n);else{var l="",c=!1;switch(a.send_message._){case"botInlineMessageMediaAuto":if(l=a.send_message.caption,"botInlineMediaResult"==a._){var d=a.document,p=a.photo;c=d?{_:"inputMediaDocument",id:{_:"inputDocument",id:d.id,access_hash:d.access_hash},caption:l}:{_:"inputMediaPhoto",id:{_:"inputPhoto",id:p.id,access_hash:p.access_hash},caption:l}}break;case"botInlineMessageMediaGeo":c={_:"inputMediaGeoPoint",geo_point:{_:"inputGeoPoint",lat:a.send_message.geo.lat,"long":a.send_message.geo["long"]}};break;case"botInlineMessageMediaVenue":c={_:"inputMediaVenue",geo_point:{_:"inputGeoPoint",lat:a.send_message.geo.lat,"long":a.send_message.geo["long"]},title:a.send_message.title,address:a.send_message.address,provider:a.send_message.provider,venue_id:a.send_message.venue_id};break;case"botInlineMessageMediaContact":c={_:"inputMediaContact",phone_number:a.send_message.phone_number,first_name:a.send_message.first_name,last_name:a.send_message.last_name}}c||(c={_:"messageMediaPending",type:a.type,file_name:a.title||a.content_url||a.url,size:0,progress:{percent:30,total:0}}),r.sendOther(e,c,n)}}function T(e){var n="bot_access_geo"+e;return i.get(n).then(function(e){return!(!e||!e.granted)||s.confirm({type:"BOT_ACCESS_GEO_INLINE"}).then(function(){var e={};return e[n]={granted:!0,time:tsNow()},i.set(e),!0},function(){var e={};return e[n]={denied:!0,time:tsNow()},i.set(e),t.reject()})})}var D={};return{resolveInlineMention:b,getPopularBots:v,sendInlineResult:E,getInlineResults:w,regroupWrappedResults:k,switchToPM:$,checkSwitchReturn:C,switchInlineButtonClick:M,callbackButtonClick:x,gameButtonClick:I}}]).service("ApiUpdatesManager",["$rootScope","MtpNetworkerFactory","AppUsersManager","AppChatsManager","AppPeersManager","MtpApiManager",function(e,t,n,a,i,s){function o(){var e=_.seq+1,t=_.pendingSeqUpdates[e];if(!t)return!1;for(var n,a,i=t.updates,n=0,a=i.length;n=_.syncPending.seqAwaiting&&(_.syncPending.ptsAwaiting?delete _.syncPending.seqAwaiting:(clearTimeout(_.syncPending.timeout),_.syncPending=!1)),!0}function r(e){var t=e?m(e):_;if(!t.pendingPtsUpdates.length)return!1;t.pendingPtsUpdates.sort(function(e,t){return e.pts-t.pts});for(var n,a=t.pts,i=!1,s=!1,o=0,r=t.pendingPtsUpdates.length;o=n.pts&&(i=n.pts,s=o);if(!i)return!1;for(console.log(dT(),"pop pending pts updates",i,t.pendingPtsUpdates.slice(0,s+1)),t.pts=i,o=0;o<=s;o++)n=t.pendingPtsUpdates[o],h(n);return t.pendingPtsUpdates.splice(0,s+1),!t.pendingPtsUpdates.length&&t.syncPending&&(t.syncPending.seqAwaiting?delete t.syncPending.ptsAwaiting:(clearTimeout(t.syncPending.timeout),t.syncPending=!1)),!0}function l(){_.syncLoading||d()}function c(e,t){var s={date:e.date,seq:e.seq,seqStart:e.seq_start};switch(e._){case"updatesTooLong":case"new_session_created":l();break;case"updateShort":g(e.update,s);break;case"updateShortMessage":case"updateShortChatMessage":var o=2&e.flags,r=e.from_id||(o?y:e.user_id),c=e.chat_id?-e.chat_id:o?e.user_id:y;g({_:"updateNewMessage",message:{_:"message",flags:e.flags,pFlags:e.pFlags,id:e.id,from_id:r,to_id:i.getOutputPeer(c),date:e.date,message:e.message,fwd_from:e.fwd_from,reply_to_msg_id:e.reply_to_msg_id,entities:e.entities},pts:e.pts,pts_count:e.pts_count},s);break;case"updatesCombined":case"updates":n.saveApiUsers(e.users),a.saveApiChats(e.chats),angular.forEach(e.updates,function(e){g(e,s)});break;default:console.warn(dT(),"Unknown update message",e)}}function d(){_.syncLoading||(_.syncLoading=!0,_.pendingSeqUpdates={},_.pendingPtsUpdates=[]),_.syncPending&&(clearTimeout(_.syncPending.timeout),_.syncPending=!1),s.invokeApi("updates.getDifference",{pts:_.pts,date:_.date,qts:-1}).then(function(t){if("updates.differenceEmpty"==t._)return console.log(dT(),"apply empty diff",t.seq),_.date=t.date,_.seq=t.seq,_.syncLoading=!1,e.$broadcast("stateSynchronized"),!1;n.saveApiUsers(t.users),a.saveApiChats(t.chats);angular.forEach(t.other_updates,function(e){switch(e._){case"updateChannelTooLong":case"updateNewChannelMessage":case"updateEditChannelMessage":return void g(e)}h(e)}),angular.forEach(t.new_messages,function(e){h({_:"updateNewMessage",message:e,pts:_.pts,pts_count:0})});var i=t.intermediate_state||t.state;_.seq=i.seq,_.pts=i.pts,_.date=i.date,"updates.differenceSlice"==t._?d():(e.$broadcast("stateSynchronized"),_.syncLoading=!1)})}function p(t){var i=m(t);i.syncLoading||(i.syncLoading=!0,i.pendingPtsUpdates=[]),i.syncPending&&(clearTimeout(i.syncPending.timeout),i.syncPending=!1),s.invokeApi("updates.getChannelDifference",{channel:a.getChannelInput(t),filter:{_:"channelMessagesFilterEmpty"},pts:i.pts,limit:30}).then(function(s){return i.pts=s.pts,"updates.channelDifferenceEmpty"==s._?(console.log(dT(),"apply channel empty diff",s),i.syncLoading=!1,e.$broadcast("stateSynchronized"),!1):"updates.channelDifferenceTooLong"==s._?(console.log(dT(),"channel diff too long",s),i.syncLoading=!1,delete v[t],h({_:"updateChannelReload",channel_id:t}),!1):(n.saveApiUsers(s.users),a.saveApiChats(s.chats),console.log(dT(),"applying",s.other_updates.length,"channel other updates"),angular.forEach(s.other_updates,function(e){h(e)}),console.log(dT(),"applying",s.new_messages.length,"channel new messages"),angular.forEach(s.new_messages,function(e){h({_:"updateNewChannelMessage",message:e,pts:i.pts,pts_count:0})}),console.log(dT(),"apply channel diff",i.pts),void("updates.channelDifference"!=s._||s.pFlags["final"]?(console.log(dT(),"finished channel get diff"),e.$broadcast("stateSynchronized"),i.syncLoading=!1):p(t)))})}function u(e,t){if(!t)throw new Error("Add channel state without pts "+e);return void 0===v[e]&&(v[e]={pts:t,pendingPtsUpdates:[],syncPending:!1,syncLoading:!1},!0)}function m(e,t){return void 0===v[e]&&u(e,t),v[e]}function g(e,t){t=t||{};var s=!1;switch(e._){case"updateNewChannelMessage":case"updateEditChannelMessage":s=-i.getPeerID(e.message.to_id);break;case"updateDeleteChannelMessages":s=e.channel_id;break;case"updateChannelTooLong":if(s=e.channel_id,void 0===v[s])return!1}var c=s?m(s,e.pts):_;if(c.syncLoading)return!1;if("updateChannelTooLong"==e._)return p(s),!1;if("updateNewMessage"==e._||"updateEditMessage"==e._||"updateNewChannelMessage"==e._||"updateEditChannelMessage"==e._){var u=e.message,g=i.getPeerID(u.to_id),f=u.fwd_from||{};if(u.from_id&&!n.hasUser(u.from_id,u.pFlags.post)||f.from_id&&!n.hasUser(f.from_id,!!f.channel_id)||f.channel_id&&!a.hasChat(f.channel_id,!0)||g>0&&!n.hasUser(g)||g<0&&!a.hasChat(-g))return console.warn(dT(),"Not enough data for message update",u),s&&a.hasChat(s)?p(s):l(),!1}else if(s&&!a.hasChat(s))return!1;var y,b;if(e.pts){var w=c.pts+(e.pts_count||0);if(wc.pts)c.pts=e.pts,y=!0;else if(e.pts_count)return!1;s&&t.date&&_.date0){var k=t.seq,$=t.seqStart||k;if($!=c.seq+1&&$>c.seq)return console.warn(dT(),"Seq hole",c,c.syncPending&&c.syncPending.seqAwaiting),void 0===c.pendingSeqUpdates[$]&&(c.pendingSeqUpdates[$]={seq:k,date:t.date,updates:[]}),c.pendingSeqUpdates[$].updates.push(e),c.syncPending||(c.syncPending={timeout:setTimeout(function(){d()},5e3)}),(!c.syncPending.seqAwaiting||c.syncPending.seqAwaiting<$)&&(c.syncPending.seqAwaiting=$),!1;c.seq!=k&&(c.seq=k,t.date&&c.datem)||(m=!1,!1))}var c,d=0,p=!1,u=0,m=!1;return n.getUserID().then(function(e){u=e}),t.$on("apiUpdate",function(e,t){"updateUserStatus"==t._&&t.user_id==u&&(m=tsNow()+("userStatusOnline"==t.status._?3e5:0))}),{start:s,isOtherDeviceActive:l}}]).service("NotificationsManager",["$rootScope","$window","$interval","$q","$modal","_","toaster","MtpApiManager","AppPeersManager","AppChatsManager","AppUsersManager","IdleManager","Storage","AppRuntimeManager","FileManager","WebPushApiManager",function(e,t,n,a,i,s,o,r,l,c,d,p,u,m,g,h){function f(){u.get("notify_nodesktop","notify_volume","notify_novibrate","notify_nopreview","notify_nopush").then(function(e){if(ee.nodesktop=e[0],ee.volume=e[1]===!1?.5:e[1],ee.novibrate=e[2],ee.nopreview=e[3],ee.nopush=e[4],ne){var t=!ee.nopush&&!ee.nodesktop&&h.isAvailable||!1,n=te!==!1;t!=n&&(t?h.subscribe():h.unsubscribe())}h.setSettings(ee)})}function _(){return ee}function v(e){return void 0!==K[e]?K[e]:K[e]=r.invokeApi("account.getNotifySettings",{peer:{_:"inputNotifyPeer",peer:l.getInputPeerByID(e)}})}function y(e){if(e=e||"favicon.ico",U!==e){var t=document.createElement("link");t.rel="shortcut icon",t.type="image/x-icon",t.href=e,Y.parentNode.replaceChild(t,Y),Y=t,U=e}}function b(t,n){K[t]=a.when(n),e.$broadcast("notify_settings",{peerID:t})}function w(e,t){b(e,t);var n=angular.copy(t);return n._="inputPeerNotifySettings",r.invokeApi("account.updateNotifySettings",{peer:{_:"inputNotifyPeer",peer:l.getInputPeerByID(e)},settings:n})}function k(e){return v(e).then(function(e){return"peerNotifySettings"==e._&&1e3*e.mute_until>tsNow()})}function C(){if(f(),e.$on("settings_changed",f),h.start(),!L)return!1;"Notification"in window&&"granted"!==Notification.permission&&"denied"!==Notification.permission&&$(t).on("click",M);try{"onbeforeunload"in window&&$(t).on("beforeunload",D)}catch(n){}}function S(){D(),n.cancel(O),y(),Q=!0}function M(){Notification.requestPermission(),$(t).off("click",M)}function x(e){if(!Q){if(Config.Navigator.ffos&&!Config.Navigator.ffos2p)e.image="https://telegram.org/img/t_logo.png";else if(e.image&&!angular.isString(e.image)){if(Config.Navigator.ffos2p)return g.getDataUrl(e.image,"image/jpeg").then(function(t){e.image=t,x(e)}),!1;e.image=g.getUrl(e.image,"image/jpeg")}else e.image||(e.image="img/icons/icon60.png");q++;var t=tsNow();if(ee.volume>0&&(!e.tag||!V[e.tag]||t>V[e.tag]+6e4)&&(I(ee.volume),V[e.tag]=t),!L||"Notification"in window&&"granted"!==Notification.permission)return!1;if(ee.nodesktop){if(z&&!ee.novibrate)return void navigator.vibrate([200,100,200])}else{var n,a=++H,i=e.key||"k"+a;if("Notification"in window)try{n=new Notification(e.title,{icon:e.image||"",body:e.message||"",tag:e.tag||"",silent:e.silent||!1})}catch(s){return L=!1,void h.setLocalNotificationsDisabled()}else if("mozNotification"in navigator)n=navigator.mozNotification.createNotification(e.title,e.message||"",e.image||"");else{if(!N)return;window.external.msSiteModeClearIconOverlay(),window.external.msSiteModeSetIconOverlay("img/icons/icon16.png",e.title),window.external.msSiteModeActivate(),n={index:a}}n.onclick=function(){n.close(),m.focus(),D(),e.onclick&&e.onclick()},n.onclose=function(){n.hidden||(delete j[i],D())},n.show&&n.show(),j[i]=n,Config.Navigator.mobile||setTimeout(function(){E(i)},8e3)}}}function I(e){var t=tsNow();if(!(W&&t');a.find("audio")[0].volume=e}}function A(e){var t=j[e];if(t){q>0&&q--;try{t.close?t.close():N&&t.index==H&&window.external.msSiteModeClearIconOverlay()}catch(n){}delete q[e]}}function E(e){var t=j[e];if(t){try{t.close&&(t.hidden=!0,t.close())}catch(n){}delete q[e]}}function T(e){delete V[e]}function D(){N?window.external.msSiteModeClearIconOverlay():angular.forEach(j,function(e){try{e.close&&e.close()}catch(t){}}),j={},q=0,h.hidePushNotifications()}function P(e){return(!te||!angular.equals(te,e))&&void r.invokeApi("account.registerDevice",{token_type:e.tokenType,token:e.tokenValue}).then(function(){te=e},function(e){e.handled=!0})}function F(e){return!!te&&void r.invokeApi("account.unregisterDevice",{token_type:e.tokenType,token:e.tokenValue}).then(function(){te=!1},function(e){e.handled=!0})}function R(){return z}navigator.vibrate=navigator.vibrate||navigator.mozVibrate||navigator.webkitVibrate;var N=!1;try{window.external&&window.external.msIsSiteMode()&&(N=!0)}catch(B){}var O,U,L=N||"Notification"in window||"mozNotification"in navigator,j={},H=0,q=0,V={},z=!!navigator.vibrate,W=!1,G=!1,K={},Y=$('link[rel="icon"]:first')[0],Z=s.pluralize("page_title_pluralize_notifications"),X=document.title,J=!1,Q=!1,ee={};e.$watch("idle.deactivated",function(e){e&&S()}),e.$watch("idle.isIDLE",function(e){Q||(e||D(),Config.Navigator.mobile||(n.cancel(O),e?(X=document.title,O=n(function(){J||!q?(J=!1,document.title=X,y()):(J=!0,document.title=Z(q),y("favicon_unread.ico"))},1e3)):(J=!1,document.title=X,y())))}),e.$on("apiUpdate",function(e,t){switch(t._){case"updateNotifySettings":if("notifyPeer"==t.peer._){var n=l.getPeerID(t.peer.peer);b(n,t.notify_settings)}}});var te=!1,ne=!1;e.$on("push_init",function(e,t){ne=!0,ee.nodesktop||ee.nopush?F(t):t?P(t):h.subscribe()}),e.$on("push_subscribe",function(e,t){P(t)}),e.$on("push_unsubscribe",function(e,t){F(t)});var ae=a.defer(),ie=e.$on("dialogs_multiupdate",function(){ie(),ae.resolve()}),se=ae.promise;return e.$on("push_notification_click",function(t,n){if("push_settings"==n.action)return void se.then(function(){i.open({templateUrl:templateUrl("settings_modal"),controller:"SettingsModalController",windowClass:"settings_modal_window mobile_modal",backdrop:"single"})});if("mute1d"==n.action)return void r.invokeApi("account.updateDeviceLocked",function(){}).then(function(){var e=o.pop({type:"info",body:s("push_action_mute1d_success"),bodyOutputType:"trustedHtml",clickHandler:function(){o.clear(e)},showCloseButton:!1})});var a=n.custom&&n.custom.peerID;console.log("click",n,a),a&&se.then(function(){n.custom.channel_id&&!c.hasChat(n.custom.channel_id)||a>0&&!d.hasUser(a)||e.$broadcast("history_focus",{peerString:l.getPeerString(a)})})}),{start:C,notify:x,cancel:A,clear:D,soundReset:T,getPeerSettings:v,getPeerMuted:k,savePeerSettings:b,updatePeerSettings:w,updateNotifySettings:f,getNotifySettings:_,getVibrateSupport:R,testSound:I}}]).service("PasswordManager",["$timeout","$q","$rootScope","MtpApiManager","CryptoWorker","MtpSecureRandom",function(e,t,n,a,i,s){function o(e){return a.invokeApi("account.getPassword",{},e).then(function(e){return e})}function r(e,n){var i,o,r={new_settings:{_:"account.passwordInputSettings",flags:0,hint:n.hint||""}};if(i="string"==typeof n.cur_password&&n.cur_password.length>0?p(e.current_salt,n.cur_password):t.when([]),"string"==typeof n.new_password&&n.new_password.length>0){var l=new Array(8),c=bufferConcat(e.new_salt,l);s.nextBytes(l),o=p(c,n.new_password),r.new_settings.new_salt=c,r.new_settings.flags|=1}else"string"==typeof n.new_password&&(r.new_settings.flags|=1,r.new_settings.new_salt=[]),o=t.when([]);return"string"==typeof n.email&&(r.new_settings.flags|=2,r.new_settings.email=n.email||""),t.all([i,o]).then(function(e){return r.current_password_hash=e[0],r.new_settings.new_password_hash=e[1],a.invokeApi("account.updatePasswordSettings",r)})}function l(e,t,n){return p(e.current_salt,t).then(function(e){return a.invokeApi("auth.checkPassword",{password_hash:e},n)})}function c(e,t){return a.invokeApi("auth.requestPasswordRecovery",{},t)}function d(e,t){return a.invokeApi("auth.recoverPassword",{code:e},t)}function p(e,t){for(var n=unescape(encodeURIComponent(t)),a=new ArrayBuffer(n.length),s=new Uint8Array(a),o=0,r=n.length;o=1)return console.log("Skip error box, too many open",o,n,a),!1;a=a||{};var i=e.$new();angular.extend(i,n),o++;var s=t.open({templateUrl:templateUrl("error_modal"),scope:i,windowClass:a.windowClass||"error_modal_window"});return s.result["finally"](function(){o--}),s}function i(e,t){return a({title:e,description:t})}function s(n,a,i){a=a||{},i=i||{};var s=e.$new();angular.extend(s,n),angular.extend(s,{data:i});var o=t.open({templateUrl:templateUrl("confirm_modal"),scope:s,windowClass:a.windowClass||"confirm_modal_window"});return o.result}var o=0;return n.safeConfirm=function(e,t){"string"==typeof e&&(e={message:e}),s(e).then(function(e){t(e||!0)},function(){t(!1)})},{show:a,alert:i,confirm:s}}]).service("PeersSelectService",["$rootScope","$modal",function(e,t){function n(n){var a=e.$new();return a.multiSelect=!1,a.noMessages=!0,n&&angular.extend(a,n),t.open({templateUrl:templateUrl("peer_select"),controller:"PeerSelectController",scope:a,windowClass:"peer_select_window mobile_modal",backdrop:"single"}).result}function a(a){if(Config.Mobile)return n(a).then(function(e){return[e]});var i=e.$new();return i.multiSelect=!0,i.noMessages=!0,a&&angular.extend(i,a),t.open({templateUrl:templateUrl("peer_select"),controller:"PeerSelectController",scope:i,windowClass:"peer_select_window mobile_modal",backdrop:"single"}).result}return{selectPeer:n,selectPeers:a}}]).service("ContactsSelectService",["$rootScope","$modal",function(e,t){function n(n,a){a=a||{};var i=e.$new();return i.multiSelect=n,angular.extend(i,a),!i.action&&n&&(i.action="select"),t.open({templateUrl:templateUrl("contacts_modal"),controller:"ContactsModalController",scope:i,windowClass:"contacts_modal_window mobile_modal",backdrop:"single"}).result}return{selectContacts:function(e){return n(!0,e)},selectContact:function(e){return n(!1,e)}}}]).service("ChangelogNotifyService",["Storage","$rootScope","$modal",function(e,t,n){function a(){e.get("last_version").then(function(t){t!=Config.App.version&&(t&&i(t),e.set({last_version:Config.App.version}))})}function i(e){var a=t.$new();a.lastVersion=e,n.open({controller:"ChangelogModalController",templateUrl:templateUrl("changelog_modal"),scope:a,windowClass:"changelog_modal_window mobile_modal"})}return{checkUpdate:a,showChangelog:i}}]).service("HttpsMigrateService",["ErrorService","Storage",function(e,t){function n(){t.get("https_dismiss").then(function(n){(!n||tsNow()>n+432e5)&&e.confirm({type:"MIGRATE_TO_HTTPS"}).then(function(){var e;try{e=window.open("https://web.telegram.org","_blank")}catch(t){}e||(location.href="https://web.telegram.org")},function(){t.set({https_dismiss:tsNow()})})})}function a(){i||"http:"!=location.protocol||Config.Modes.http||Config.App.domains.indexOf(location.hostname)==-1||(i=!0,setTimeout(n,12e4))}var i=!1;return{start:a,check:n}}]).service("LayoutSwitchService",["ErrorService","Storage","AppRuntimeManager","$window",function(e,t,n,a){function i(e){ConfigStorage.noPrefix(),t.set({layout_selected:e?"mobile":"desktop",layout_width:$(window).width()}).then(function(){n.reload()})}function s(n){if(!l){var a=$(window).width(),s=a<600;!a||!n&&(Config.Navigator.mobile?a<=800:s)||s!=Config.Mobile&&(ConfigStorage.noPrefix(),t.get("layout_width").then(function(n){return a!=n&&(l=!0,void e.confirm({type:s?"SWITCH_MOBILE_VERSION":"SWITCH_DESKTOP_VERSION"}).then(function(){i(s)},function(){ConfigStorage.noPrefix(),t.set({layout_width:a}),l=!1}))}))}}function o(){r||Config.Navigator.mobile||(r=!0,s(),$(a).on("resize",s))}var r=!1,l=!1;return{start:o,switchLayout:i}}]).service("TelegramMeWebService",["Storage",function(e){function t(t){return!n&&void e.get("tgme_sync").then(function(n){var a=tsNow(!0);if(t&&n&&n.canRedirect==t&&n.ts+86400>a)return!1;e.set({tgme_sync:{canRedirect:t,ts:a}});var i=$("